aboutsummaryrefslogtreecommitdiff
path: root/documentation
diff options
context:
space:
mode:
Diffstat (limited to 'documentation')
-rw-r--r--documentation/Makefile47
-rw-r--r--documentation/config/_default/hugo.toml (renamed from documentation/config/_default/config.toml)8
-rw-r--r--documentation/config/offline/config.toml3
-rw-r--r--documentation/content/de/books/developers-handbook/bibliography/_index.adoc2
-rw-r--r--documentation/content/de/books/developers-handbook/book.adoc1
-rw-r--r--documentation/content/de/books/developers-handbook/introduction/_index.adoc2
-rw-r--r--documentation/content/de/books/developers-handbook/ipv6/_index.adoc2
-rw-r--r--documentation/content/de/books/developers-handbook/kernelbuild/_index.adoc2
-rw-r--r--documentation/content/de/books/developers-handbook/kerneldebug/_index.adoc2
-rw-r--r--documentation/content/de/books/developers-handbook/l10n/_index.adoc2
-rw-r--r--documentation/content/de/books/developers-handbook/parti.adoc2
-rw-r--r--documentation/content/de/books/developers-handbook/partii.adoc2
-rw-r--r--documentation/content/de/books/developers-handbook/partiii.adoc2
-rw-r--r--documentation/content/de/books/developers-handbook/partiv.adoc2
-rw-r--r--documentation/content/de/books/developers-handbook/partv.adoc2
-rw-r--r--documentation/content/de/books/developers-handbook/policies/_index.adoc2
-rw-r--r--documentation/content/de/books/developers-handbook/secure/_index.adoc2
-rw-r--r--documentation/content/de/books/developers-handbook/sockets/_index.adoc2
-rw-r--r--documentation/content/de/books/developers-handbook/testing/_index.adoc2
-rw-r--r--documentation/content/de/books/developers-handbook/tools/_index.adoc4
-rw-r--r--documentation/content/de/books/developers-handbook/x86/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/advanced-networking/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/audit/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/basics/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/bibliography/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/boot/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/bsdinstall/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/config/_index.adoc4
-rw-r--r--documentation/content/de/books/handbook/cutting-edge/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/desktop/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/disks/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/dtrace/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/eresources/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/filesystems/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/firewalls/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/geom/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/introduction/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/jails/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/kernelconfig/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/l10n/_index.adoc4
-rw-r--r--documentation/content/de/books/handbook/linuxemu/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/mac/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/mail/_index.adoc4
-rw-r--r--documentation/content/de/books/handbook/mirrors/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/multimedia/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/network-servers/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/parti.adoc2
-rw-r--r--documentation/content/de/books/handbook/partii.adoc2
-rw-r--r--documentation/content/de/books/handbook/partiii.adoc2
-rw-r--r--documentation/content/de/books/handbook/partiv.adoc2
-rw-r--r--documentation/content/de/books/handbook/partv.adoc2
-rw-r--r--documentation/content/de/books/handbook/pgpkeys/_index.adoc5
-rw-r--r--documentation/content/de/books/handbook/ports/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/ppp-and-slip/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/preface/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/printing/_index.adoc7
-rw-r--r--documentation/content/de/books/handbook/security/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/serialcomms/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/usb-device-mode/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/virtualization/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/x11/_index.adoc2
-rw-r--r--documentation/content/de/books/handbook/zfs/_index.adoc2
-rw-r--r--documentation/content/de/books/porters-handbook/book.adoc1
-rw-r--r--documentation/content/de/books/porters-handbook/keeping-up/_index.adoc2
-rw-r--r--documentation/content/de/books/porters-handbook/makefile/_index.adoc2
-rw-r--r--documentation/content/de/books/porters-handbook/own-port/_index.adoc2
-rw-r--r--documentation/content/de/books/porters-handbook/pkg-files/_index.adoc10
-rw-r--r--documentation/content/de/books/porters-handbook/plist/_index.adoc2
-rw-r--r--documentation/content/de/books/porters-handbook/port-upgrading/_index.adoc2
-rw-r--r--documentation/content/de/books/porters-handbook/porting-dads/_index.adoc2
-rw-r--r--documentation/content/de/books/porters-handbook/porting-samplem/_index.adoc2
-rw-r--r--documentation/content/de/books/porters-handbook/quick-porting/_index.adoc2
-rw-r--r--documentation/content/de/books/porters-handbook/security/_index.adoc2
-rw-r--r--documentation/content/de/books/porters-handbook/slow/_index.adoc2
-rw-r--r--documentation/content/de/books/porters-handbook/special/_index.adoc2
-rw-r--r--documentation/content/de/books/porters-handbook/testing/_index.adoc2
-rw-r--r--documentation/content/de/books/porters-handbook/why-port/_index.adoc2
-rw-r--r--documentation/content/el/books/faq/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/advanced-networking/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/audit/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/basics/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/bibliography/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/boot/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/bsdinstall/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/config/_index.adoc4
-rw-r--r--documentation/content/el/books/handbook/cutting-edge/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/desktop/_index.adoc164
-rw-r--r--documentation/content/el/books/handbook/disks/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/dtrace/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/eresources/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/filesystems/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/firewalls/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/geom/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/install/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/introduction/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/jails/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/kernelconfig/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/l10n/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/linuxemu/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/mac/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/mail/_index.adoc4
-rw-r--r--documentation/content/el/books/handbook/mirrors/_index.adoc23
-rw-r--r--documentation/content/el/books/handbook/multimedia/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/network-servers/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/parti.adoc2
-rw-r--r--documentation/content/el/books/handbook/partii.adoc2
-rw-r--r--documentation/content/el/books/handbook/partiii.adoc2
-rw-r--r--documentation/content/el/books/handbook/partiv.adoc2
-rw-r--r--documentation/content/el/books/handbook/partv.adoc2
-rw-r--r--documentation/content/el/books/handbook/pgpkeys/_index.adoc5
-rw-r--r--documentation/content/el/books/handbook/ports/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/ppp-and-slip/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/preface/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/printing/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/security/_index.adoc4
-rw-r--r--documentation/content/el/books/handbook/serialcomms/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/users/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/virtualization/_index.adoc2
-rw-r--r--documentation/content/el/books/handbook/x11/_index.adoc2
-rw-r--r--documentation/content/en/articles/_index.po29
-rw-r--r--documentation/content/en/articles/bsdl-gpl/_index.po780
-rw-r--r--documentation/content/en/articles/building-products/_index.po1102
-rw-r--r--documentation/content/en/articles/committers-guide/_index.adoc946
-rw-r--r--documentation/content/en/articles/committers-guide/_index.po8465
-rw-r--r--documentation/content/en/articles/contributing/_index.adoc147
-rw-r--r--documentation/content/en/articles/contributing/_index.po1638
-rw-r--r--documentation/content/en/articles/contributors/_index.adoc145
-rw-r--r--documentation/content/en/articles/contributors/_index.po534
-rw-r--r--documentation/content/en/articles/contributors/contrib-develinmemoriam.po266
-rw-r--r--documentation/content/en/articles/cups/_index.adoc6
-rw-r--r--documentation/content/en/articles/cups/_index.po502
-rw-r--r--documentation/content/en/articles/explaining-bsd/_index.adoc18
-rw-r--r--documentation/content/en/articles/explaining-bsd/_index.po683
-rw-r--r--documentation/content/en/articles/filtering-bridges/_index.adoc24
-rw-r--r--documentation/content/en/articles/filtering-bridges/_index.po583
-rw-r--r--documentation/content/en/articles/fonts/_index.po1215
-rw-r--r--documentation/content/en/articles/freebsd-questions/_index.adoc2
-rw-r--r--documentation/content/en/articles/freebsd-questions/_index.po683
-rw-r--r--documentation/content/en/articles/freebsd-releng/_index.adoc261
-rw-r--r--documentation/content/en/articles/freebsd-releng/_index.po1859
-rw-r--r--documentation/content/en/articles/freebsd-src-lsp/_index.adoc39
-rw-r--r--documentation/content/en/articles/freebsd-src-lsp/_index.po535
-rw-r--r--documentation/content/en/articles/freebsd-status-report-process/_index.adoc288
-rw-r--r--documentation/content/en/articles/freebsd-status-report-process/_index.po863
-rw-r--r--documentation/content/en/articles/freebsd-update-server/_index.adoc12
-rw-r--r--documentation/content/en/articles/freebsd-update-server/_index.po1039
-rw-r--r--documentation/content/en/articles/geom-class/_index.po1059
-rw-r--r--documentation/content/en/articles/gjournal-desktop/_index.po1028
-rw-r--r--documentation/content/en/articles/hubs/_index.adoc10
-rw-r--r--documentation/content/en/articles/hubs/_index.po917
-rw-r--r--documentation/content/en/articles/ipsec-must/_index.adoc2
-rw-r--r--documentation/content/en/articles/ipsec-must/_index.po567
-rw-r--r--documentation/content/en/articles/ldap-auth/_index.adoc14
-rw-r--r--documentation/content/en/articles/ldap-auth/_index.po1422
-rw-r--r--documentation/content/en/articles/leap-seconds/_index.po200
-rw-r--r--documentation/content/en/articles/license-guide/_index.adoc351
-rw-r--r--documentation/content/en/articles/license-guide/_index.po761
-rw-r--r--documentation/content/en/articles/linux-emulation/_index.adoc34
-rw-r--r--documentation/content/en/articles/linux-emulation/_index.po3230
-rw-r--r--documentation/content/en/articles/linux-users/_index.adoc15
-rw-r--r--documentation/content/en/articles/linux-users/_index.po809
-rw-r--r--documentation/content/en/articles/mailing-list-faq/_index.adoc8
-rw-r--r--documentation/content/en/articles/mailing-list-faq/_index.po581
-rw-r--r--documentation/content/en/articles/nanobsd/_index.adoc11
-rw-r--r--documentation/content/en/articles/nanobsd/_index.po1204
-rw-r--r--documentation/content/en/articles/new-users/_index.po1126
-rw-r--r--documentation/content/en/articles/pam/_index.adoc16
-rw-r--r--documentation/content/en/articles/pam/_index.po1723
-rw-r--r--documentation/content/en/articles/pgpkeys/_index.adoc80
-rw-r--r--documentation/content/en/articles/pgpkeys/_index.po2908
-rw-r--r--documentation/content/en/articles/port-mentor-guidelines/_index.po311
-rw-r--r--documentation/content/en/articles/pr-guidelines/_index.po1439
-rw-r--r--documentation/content/en/articles/problem-reports/_index.adoc24
-rw-r--r--documentation/content/en/articles/problem-reports/_index.po1000
-rw-r--r--documentation/content/en/articles/rc-scripting/_index.adoc10
-rw-r--r--documentation/content/en/articles/rc-scripting/_index.po1620
-rw-r--r--documentation/content/en/articles/releng/_index.adoc18
-rw-r--r--documentation/content/en/articles/releng/_index.po1253
-rw-r--r--documentation/content/en/articles/remote-install/_index.adoc10
-rw-r--r--documentation/content/en/articles/remote-install/_index.po779
-rw-r--r--documentation/content/en/articles/serial-uart/_index.po3064
-rw-r--r--documentation/content/en/articles/solid-state/_index.adoc2
-rw-r--r--documentation/content/en/articles/solid-state/_index.po651
-rw-r--r--documentation/content/en/articles/vinum/_index.adoc14
-rw-r--r--documentation/content/en/articles/vinum/_index.po1652
-rw-r--r--documentation/content/en/articles/vm-design/_index.adoc24
-rw-r--r--documentation/content/en/articles/vm-design/_index.po1017
-rw-r--r--documentation/content/en/articles/vpn-ipsec/_index.adoc326
-rw-r--r--documentation/content/en/articles/vpn-ipsec/_index.po586
-rw-r--r--documentation/content/en/books/_index.po29
-rw-r--r--documentation/content/en/books/arch-handbook/_index.adoc2
-rw-r--r--documentation/content/en/books/arch-handbook/_index.po59
-rw-r--r--documentation/content/en/books/arch-handbook/bibliography/_index.adoc2
-rw-r--r--documentation/content/en/books/arch-handbook/bibliography/_index.po39
-rw-r--r--documentation/content/en/books/arch-handbook/book.adoc2
-rw-r--r--documentation/content/en/books/arch-handbook/book.po59
-rw-r--r--documentation/content/en/books/arch-handbook/boot/_index.adoc14
-rw-r--r--documentation/content/en/books/arch-handbook/boot/_index.po3006
-rw-r--r--documentation/content/en/books/arch-handbook/driverbasics/_index.adoc36
-rw-r--r--documentation/content/en/books/arch-handbook/driverbasics/_index.po634
-rw-r--r--documentation/content/en/books/arch-handbook/isa/_index.adoc5
-rw-r--r--documentation/content/en/books/arch-handbook/isa/_index.po3063
-rw-r--r--documentation/content/en/books/arch-handbook/jail/_index.adoc2
-rw-r--r--documentation/content/en/books/arch-handbook/jail/_index.po981
-rw-r--r--documentation/content/en/books/arch-handbook/kobj/_index.adoc2
-rw-r--r--documentation/content/en/books/arch-handbook/kobj/_index.po491
-rw-r--r--documentation/content/en/books/arch-handbook/locking/_index.adoc2
-rw-r--r--documentation/content/en/books/arch-handbook/locking/_index.po354
-rw-r--r--documentation/content/en/books/arch-handbook/mac/_index.adoc1572
-rw-r--r--documentation/content/en/books/arch-handbook/mac/_index.po8170
-rw-r--r--documentation/content/en/books/arch-handbook/newbus/_index.adoc2
-rw-r--r--documentation/content/en/books/arch-handbook/newbus/_index.po531
-rw-r--r--documentation/content/en/books/arch-handbook/parti.adoc3
-rw-r--r--documentation/content/en/books/arch-handbook/parti.po29
-rw-r--r--documentation/content/en/books/arch-handbook/partii.adoc2
-rw-r--r--documentation/content/en/books/arch-handbook/partii.po29
-rw-r--r--documentation/content/en/books/arch-handbook/partiii.adoc2
-rw-r--r--documentation/content/en/books/arch-handbook/partiii.po29
-rw-r--r--documentation/content/en/books/arch-handbook/pccard/_index.adoc2
-rw-r--r--documentation/content/en/books/arch-handbook/pccard/_index.po483
-rw-r--r--documentation/content/en/books/arch-handbook/pci/_index.adoc2
-rw-r--r--documentation/content/en/books/arch-handbook/pci/_index.po787
-rw-r--r--documentation/content/en/books/arch-handbook/scsi/_index.adoc2
-rw-r--r--documentation/content/en/books/arch-handbook/scsi/_index.po3093
-rw-r--r--documentation/content/en/books/arch-handbook/smp/_index.adoc2
-rw-r--r--documentation/content/en/books/arch-handbook/smp/_index.po1395
-rw-r--r--documentation/content/en/books/arch-handbook/sound/_index.adoc2
-rw-r--r--documentation/content/en/books/arch-handbook/sound/_index.po855
-rw-r--r--documentation/content/en/books/arch-handbook/sysinit/_index.adoc2
-rw-r--r--documentation/content/en/books/arch-handbook/sysinit/_index.po299
-rw-r--r--documentation/content/en/books/arch-handbook/usb/_index.adoc4
-rw-r--r--documentation/content/en/books/arch-handbook/usb/_index.po797
-rw-r--r--documentation/content/en/books/arch-handbook/vm/_index.adoc2
-rw-r--r--documentation/content/en/books/arch-handbook/vm/_index.po366
-rw-r--r--documentation/content/en/books/design-44bsd/_index.adoc5
-rw-r--r--documentation/content/en/books/design-44bsd/_index.po2591
-rw-r--r--documentation/content/en/books/dev-model/_index.adoc542
-rw-r--r--documentation/content/en/books/dev-model/_index.po2874
-rw-r--r--documentation/content/en/books/developers-handbook/_index.adoc2
-rw-r--r--documentation/content/en/books/developers-handbook/_index.po59
-rw-r--r--documentation/content/en/books/developers-handbook/bibliography/_index.adoc6
-rw-r--r--documentation/content/en/books/developers-handbook/bibliography/_index.po75
-rw-r--r--documentation/content/en/books/developers-handbook/book.adoc2
-rw-r--r--documentation/content/en/books/developers-handbook/book.po59
-rw-r--r--documentation/content/en/books/developers-handbook/introduction/_index.adoc74
-rw-r--r--documentation/content/en/books/developers-handbook/introduction/_index.po153
-rw-r--r--documentation/content/en/books/developers-handbook/ipv6/_index.adoc8
-rw-r--r--documentation/content/en/books/developers-handbook/ipv6/_index.po2133
-rw-r--r--documentation/content/en/books/developers-handbook/kernelbuild/_index.adoc6
-rw-r--r--documentation/content/en/books/developers-handbook/kernelbuild/_index.po119
-rw-r--r--documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc2
-rw-r--r--documentation/content/en/books/developers-handbook/kerneldebug/_index.po1681
-rw-r--r--documentation/content/en/books/developers-handbook/l10n/_index.adoc2
-rw-r--r--documentation/content/en/books/developers-handbook/l10n/_index.po487
-rw-r--r--documentation/content/en/books/developers-handbook/parti.adoc2
-rw-r--r--documentation/content/en/books/developers-handbook/parti.po29
-rw-r--r--documentation/content/en/books/developers-handbook/partii.adoc2
-rw-r--r--documentation/content/en/books/developers-handbook/partii.po29
-rw-r--r--documentation/content/en/books/developers-handbook/partiii.adoc2
-rw-r--r--documentation/content/en/books/developers-handbook/partiii.po29
-rw-r--r--documentation/content/en/books/developers-handbook/partiv.adoc2
-rw-r--r--documentation/content/en/books/developers-handbook/partiv.po29
-rw-r--r--documentation/content/en/books/developers-handbook/partv.adoc2
-rw-r--r--documentation/content/en/books/developers-handbook/partv.po29
-rw-r--r--documentation/content/en/books/developers-handbook/policies/_index.adoc189
-rw-r--r--documentation/content/en/books/developers-handbook/policies/_index.po396
-rw-r--r--documentation/content/en/books/developers-handbook/secure/_index.adoc2
-rw-r--r--documentation/content/en/books/developers-handbook/secure/_index.po624
-rw-r--r--documentation/content/en/books/developers-handbook/sockets/_index.adoc3
-rw-r--r--documentation/content/en/books/developers-handbook/sockets/_index.po2247
-rw-r--r--documentation/content/en/books/developers-handbook/testing/_index.adoc2
-rw-r--r--documentation/content/en/books/developers-handbook/testing/_index.po614
-rw-r--r--documentation/content/en/books/developers-handbook/tools/_index.adoc36
-rw-r--r--documentation/content/en/books/developers-handbook/tools/_index.po3356
-rw-r--r--documentation/content/en/books/developers-handbook/x86/_index.adoc51
-rw-r--r--documentation/content/en/books/developers-handbook/x86/_index.po8103
-rw-r--r--documentation/content/en/books/faq/_index.adoc3186
-rw-r--r--documentation/content/en/books/faq/_index.po1391
-rw-r--r--documentation/content/en/books/fdp-primer/_index.adoc4
-rw-r--r--documentation/content/en/books/fdp-primer/_index.po61
-rw-r--r--documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc113
-rw-r--r--documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.po624
-rw-r--r--documentation/content/en/books/fdp-primer/book.adoc8
-rw-r--r--documentation/content/en/books/fdp-primer/book.po61
-rw-r--r--documentation/content/en/books/fdp-primer/doc-build/_index.adoc29
-rw-r--r--documentation/content/en/books/fdp-primer/doc-build/_index.po1205
-rw-r--r--documentation/content/en/books/fdp-primer/editor-config/_index.adoc226
-rw-r--r--documentation/content/en/books/fdp-primer/editor-config/_index.po555
-rw-r--r--documentation/content/en/books/fdp-primer/examples/_index.adoc6
-rw-r--r--documentation/content/en/books/fdp-primer/examples/_index.po206
-rw-r--r--documentation/content/en/books/fdp-primer/manual-pages/_index.adoc20
-rw-r--r--documentation/content/en/books/fdp-primer/manual-pages/_index.po1202
-rw-r--r--documentation/content/en/books/fdp-primer/overview/_index.adoc55
-rw-r--r--documentation/content/en/books/fdp-primer/overview/_index.po608
-rw-r--r--documentation/content/en/books/fdp-primer/po-translations/_index.adoc87
-rw-r--r--documentation/content/en/books/fdp-primer/po-translations/_index.po917
-rw-r--r--documentation/content/en/books/fdp-primer/preface/_index.adoc2
-rw-r--r--documentation/content/en/books/fdp-primer/preface/_index.po288
-rw-r--r--documentation/content/en/books/fdp-primer/rosetta/_index.adoc2
-rw-r--r--documentation/content/en/books/fdp-primer/rosetta/_index.po589
-rw-r--r--documentation/content/en/books/fdp-primer/see-also/_index.adoc10
-rw-r--r--documentation/content/en/books/fdp-primer/see-also/_index.po119
-rw-r--r--documentation/content/en/books/fdp-primer/structure/_index.adoc25
-rw-r--r--documentation/content/en/books/fdp-primer/structure/_index.po579
-rw-r--r--documentation/content/en/books/fdp-primer/tools/_index.adoc2
-rw-r--r--documentation/content/en/books/fdp-primer/tools/_index.po104
-rw-r--r--documentation/content/en/books/fdp-primer/trademarks/_index.adoc97
-rw-r--r--documentation/content/en/books/fdp-primer/trademarks/_index.po157
-rw-r--r--documentation/content/en/books/fdp-primer/translations/_index.adoc2
-rw-r--r--documentation/content/en/books/fdp-primer/translations/_index.po544
-rw-r--r--documentation/content/en/books/fdp-primer/weblate/_index.adoc487
-rw-r--r--documentation/content/en/books/fdp-primer/weblate/_index.po1064
-rw-r--r--documentation/content/en/books/fdp-primer/working-copy/_index.adoc4
-rw-r--r--documentation/content/en/books/fdp-primer/working-copy/_index.po264
-rw-r--r--documentation/content/en/books/fdp-primer/writing-style/_index.adoc165
-rw-r--r--documentation/content/en/books/fdp-primer/writing-style/_index.po883
-rw-r--r--documentation/content/en/books/handbook/_index.adoc2
-rw-r--r--documentation/content/en/books/handbook/_index.po35
-rw-r--r--documentation/content/en/books/handbook/advanced-networking/_index.adoc1026
-rw-r--r--documentation/content/en/books/handbook/advanced-networking/_index.po4727
-rw-r--r--documentation/content/en/books/handbook/audit/_index.adoc8
-rw-r--r--documentation/content/en/books/handbook/audit/_index.po1212
-rw-r--r--documentation/content/en/books/handbook/basics/_index.adoc507
-rw-r--r--documentation/content/en/books/handbook/basics/_index.po4545
-rw-r--r--documentation/content/en/books/handbook/bibliography/_index.adoc119
-rw-r--r--documentation/content/en/books/handbook/bibliography/_index.po243
-rw-r--r--documentation/content/en/books/handbook/book.adoc6
-rw-r--r--documentation/content/en/books/handbook/book.po35
-rw-r--r--documentation/content/en/books/handbook/boot/_index.adoc18
-rw-r--r--documentation/content/en/books/handbook/boot/_index.po1005
-rw-r--r--documentation/content/en/books/handbook/bsdinstall/_index.adoc761
-rw-r--r--documentation/content/en/books/handbook/bsdinstall/_index.po3731
-rw-r--r--documentation/content/en/books/handbook/colophon.adoc4
-rw-r--r--documentation/content/en/books/handbook/colophon.po37
-rw-r--r--documentation/content/en/books/handbook/config/_index.adoc2073
-rw-r--r--documentation/content/en/books/handbook/config/_index.po3378
-rw-r--r--documentation/content/en/books/handbook/cutting-edge/_index.adoc168
-rw-r--r--documentation/content/en/books/handbook/cutting-edge/_index.po2380
-rw-r--r--documentation/content/en/books/handbook/desktop/_index.adoc1177
-rw-r--r--documentation/content/en/books/handbook/desktop/_index.po2074
-rw-r--r--documentation/content/en/books/handbook/disks/_index.adoc74
-rw-r--r--documentation/content/en/books/handbook/disks/_index.po5018
-rw-r--r--documentation/content/en/books/handbook/dtrace/_index.adoc8
-rw-r--r--documentation/content/en/books/handbook/dtrace/_index.po477
-rw-r--r--documentation/content/en/books/handbook/eresources/_index.adoc1074
-rw-r--r--documentation/content/en/books/handbook/eresources/_index.po562
-rw-r--r--documentation/content/en/books/handbook/filesystems/_index.adoc12
-rw-r--r--documentation/content/en/books/handbook/filesystems/_index.po175
-rw-r--r--documentation/content/en/books/handbook/firewalls/_index.adoc38
-rw-r--r--documentation/content/en/books/handbook/firewalls/_index.po5621
-rw-r--r--documentation/content/en/books/handbook/geom/_index.adoc10
-rw-r--r--documentation/content/en/books/handbook/geom/_index.po2364
-rw-r--r--documentation/content/en/books/handbook/glossary.adoc4
-rw-r--r--documentation/content/en/books/handbook/glossary.po2992
-rw-r--r--documentation/content/en/books/handbook/introduction.adoc2
-rw-r--r--documentation/content/en/books/handbook/introduction.po44
-rw-r--r--documentation/content/en/books/handbook/introduction/_index.adoc91
-rw-r--r--documentation/content/en/books/handbook/introduction/_index.po777
-rw-r--r--documentation/content/en/books/handbook/jails/_index.adoc1485
-rw-r--r--documentation/content/en/books/handbook/jails/_index.po2375
-rw-r--r--documentation/content/en/books/handbook/kernelconfig/_index.adoc29
-rw-r--r--documentation/content/en/books/handbook/kernelconfig/_index.po705
-rw-r--r--documentation/content/en/books/handbook/l10n/_index.adoc12
-rw-r--r--documentation/content/en/books/handbook/l10n/_index.po1412
-rw-r--r--documentation/content/en/books/handbook/linuxemu/_index.adoc306
-rw-r--r--documentation/content/en/books/handbook/linuxemu/_index.po771
-rw-r--r--documentation/content/en/books/handbook/mac/_index.adoc8
-rw-r--r--documentation/content/en/books/handbook/mac/_index.po2324
-rw-r--r--documentation/content/en/books/handbook/mail/_index.adoc1077
-rw-r--r--documentation/content/en/books/handbook/mail/_index.po1975
-rw-r--r--documentation/content/en/books/handbook/mirrors/_index.adoc60
-rw-r--r--documentation/content/en/books/handbook/mirrors/_index.po1738
-rw-r--r--documentation/content/en/books/handbook/multimedia/_index.adoc1235
-rw-r--r--documentation/content/en/books/handbook/multimedia/_index.po1496
-rw-r--r--documentation/content/en/books/handbook/network-servers/_index.adoc80
-rw-r--r--documentation/content/en/books/handbook/network-servers/_index.po6329
-rw-r--r--documentation/content/en/books/handbook/network/_index.adoc950
-rw-r--r--documentation/content/en/books/handbook/network/_index.po2025
-rw-r--r--documentation/content/en/books/handbook/parti.adoc3
-rw-r--r--documentation/content/en/books/handbook/parti.po77
-rw-r--r--documentation/content/en/books/handbook/partii.adoc6
-rw-r--r--documentation/content/en/books/handbook/partii.po74
-rw-r--r--documentation/content/en/books/handbook/partiii.adoc4
-rw-r--r--documentation/content/en/books/handbook/partiii.po46
-rw-r--r--documentation/content/en/books/handbook/partiv.adoc4
-rw-r--r--documentation/content/en/books/handbook/partiv.po74
-rw-r--r--documentation/content/en/books/handbook/partv.adoc4
-rw-r--r--documentation/content/en/books/handbook/partv.po29
-rw-r--r--documentation/content/en/books/handbook/pgpkeys/_index.adoc7
-rw-r--r--documentation/content/en/books/handbook/pgpkeys/_index.po81
-rw-r--r--documentation/content/en/books/handbook/ports/_index.adoc791
-rw-r--r--documentation/content/en/books/handbook/ports/_index.po2503
-rw-r--r--documentation/content/en/books/handbook/ppp-and-slip/_index.adoc10
-rw-r--r--documentation/content/en/books/handbook/ppp-and-slip/_index.po1895
-rw-r--r--documentation/content/en/books/handbook/preface/_index.adoc41
-rw-r--r--documentation/content/en/books/handbook/preface/_index.po1067
-rw-r--r--documentation/content/en/books/handbook/printing/_index.adoc15
-rw-r--r--documentation/content/en/books/handbook/printing/_index.po1629
-rw-r--r--documentation/content/en/books/handbook/security/_index.adoc2751
-rw-r--r--documentation/content/en/books/handbook/security/_index.po4569
-rw-r--r--documentation/content/en/books/handbook/serialcomms/_index.adoc40
-rw-r--r--documentation/content/en/books/handbook/serialcomms/_index.po2486
-rw-r--r--documentation/content/en/books/handbook/usb-device-mode/_index.adoc10
-rw-r--r--documentation/content/en/books/handbook/usb-device-mode/_index.po546
-rw-r--r--documentation/content/en/books/handbook/virtualization/_index.adoc298
-rw-r--r--documentation/content/en/books/handbook/virtualization/_index.po2223
-rw-r--r--documentation/content/en/books/handbook/wayland/_index.adoc696
-rw-r--r--documentation/content/en/books/handbook/wayland/_index.po1190
-rw-r--r--documentation/content/en/books/handbook/wine/_index.adoc127
-rw-r--r--documentation/content/en/books/handbook/wine/_index.po2326
-rw-r--r--documentation/content/en/books/handbook/x11/_index.adoc2199
-rw-r--r--documentation/content/en/books/handbook/x11/_index.po1473
-rw-r--r--documentation/content/en/books/handbook/zfs/_index.adoc24
-rw-r--r--documentation/content/en/books/handbook/zfs/_index.po5039
-rw-r--r--documentation/content/en/books/porters-handbook/_index.adoc2
-rw-r--r--documentation/content/en/books/porters-handbook/_index.po35
-rw-r--r--documentation/content/en/books/porters-handbook/book.adoc2
-rw-r--r--documentation/content/en/books/porters-handbook/book.po35
-rw-r--r--documentation/content/en/books/porters-handbook/flavors/_index.adoc48
-rw-r--r--documentation/content/en/books/porters-handbook/flavors/_index.po669
-rw-r--r--documentation/content/en/books/porters-handbook/keeping-up/_index.adoc12
-rw-r--r--documentation/content/en/books/porters-handbook/keeping-up/_index.po198
-rw-r--r--documentation/content/en/books/porters-handbook/makefiles/_index.adoc109
-rw-r--r--documentation/content/en/books/porters-handbook/makefiles/_index.po11636
-rw-r--r--documentation/content/en/books/porters-handbook/new-port/_index.adoc2
-rw-r--r--documentation/content/en/books/porters-handbook/new-port/_index.po78
-rw-r--r--documentation/content/en/books/porters-handbook/order/_index.adoc3
-rw-r--r--documentation/content/en/books/porters-handbook/order/_index.po674
-rw-r--r--documentation/content/en/books/porters-handbook/pkg-files/_index.adoc64
-rw-r--r--documentation/content/en/books/porters-handbook/pkg-files/_index.po698
-rw-r--r--documentation/content/en/books/porters-handbook/plist/_index.adoc3
-rw-r--r--documentation/content/en/books/porters-handbook/plist/_index.po1366
-rw-r--r--documentation/content/en/books/porters-handbook/porting-dads/_index.adoc15
-rw-r--r--documentation/content/en/books/porters-handbook/porting-dads/_index.po1157
-rw-r--r--documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc3
-rw-r--r--documentation/content/en/books/porters-handbook/porting-samplem/_index.po210
-rw-r--r--documentation/content/en/books/porters-handbook/porting-why/_index.adoc2
-rw-r--r--documentation/content/en/books/porters-handbook/porting-why/_index.po51
-rw-r--r--documentation/content/en/books/porters-handbook/quick-porting/_index.adoc47
-rw-r--r--documentation/content/en/books/porters-handbook/quick-porting/_index.po587
-rw-r--r--documentation/content/en/books/porters-handbook/security/_index.adoc44
-rw-r--r--documentation/content/en/books/porters-handbook/security/_index.po577
-rw-r--r--documentation/content/en/books/porters-handbook/slow-porting/_index.adoc6
-rw-r--r--documentation/content/en/books/porters-handbook/slow-porting/_index.po742
-rw-r--r--documentation/content/en/books/porters-handbook/special/_index.adoc676
-rw-r--r--documentation/content/en/books/porters-handbook/special/_index.po13307
-rw-r--r--documentation/content/en/books/porters-handbook/testing/_index.adoc319
-rw-r--r--documentation/content/en/books/porters-handbook/testing/_index.po1288
-rw-r--r--documentation/content/en/books/porters-handbook/upgrading/_index.adoc8
-rw-r--r--documentation/content/en/books/porters-handbook/upgrading/_index.po513
-rw-r--r--documentation/content/en/books/porters-handbook/uses/_index.adoc356
-rw-r--r--documentation/content/en/books/porters-handbook/uses/_index.po6575
-rw-r--r--documentation/content/en/books/porters-handbook/versions/_index.adoc796
-rw-r--r--documentation/content/en/books/porters-handbook/versions/_index.po32757
-rw-r--r--documentation/content/en/languages.po24
-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.adoc42
-rw-r--r--documentation/content/es/articles/contributing/_index.po639
-rw-r--r--documentation/content/es/articles/contributors/_index.adoc33
-rw-r--r--documentation/content/es/articles/contributors/_index.po296
-rw-r--r--documentation/content/es/articles/contributors/contrib-develinmemoriam.po8
-rw-r--r--documentation/content/es/articles/filtering-bridges/_index.adoc93
-rw-r--r--documentation/content/es/articles/filtering-bridges/_index.po152
-rw-r--r--documentation/content/es/articles/freebsd-releng/_index.adoc175
-rw-r--r--documentation/content/es/articles/freebsd-releng/_index.po2038
-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.adoc25
-rw-r--r--documentation/content/es/articles/freebsd-update-server/_index.po401
-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.adoc50
-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.adoc42
-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.adoc149
-rw-r--r--documentation/content/es/articles/linux-users/_index.po1007
-rw-r--r--documentation/content/es/articles/mailing-list-faq/_index.adoc100
-rw-r--r--documentation/content/es/articles/mailing-list-faq/_index.po781
-rw-r--r--documentation/content/es/articles/nanobsd/_index.adoc259
-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.adoc74
-rw-r--r--documentation/content/es/articles/port-mentor-guidelines/_index.po417
-rw-r--r--documentation/content/es/articles/pr-guidelines/_index.adoc252
-rw-r--r--documentation/content/es/articles/pr-guidelines/_index.po1616
-rw-r--r--documentation/content/es/articles/problem-reports/_index.adoc199
-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/remote-install/_index.adoc163
-rw-r--r--documentation/content/es/articles/remote-install/_index.po1027
-rw-r--r--documentation/content/es/articles/solid-state/_index.adoc145
-rw-r--r--documentation/content/es/articles/solid-state/_index.po904
-rw-r--r--documentation/content/es/articles/vinum/_index.adoc16
-rw-r--r--documentation/content/es/articles/vinum/_index.po585
-rw-r--r--documentation/content/es/books/handbook/advanced-networking/_index.adoc4660
-rw-r--r--documentation/content/es/books/handbook/advanced-networking/_index.po8324
-rw-r--r--documentation/content/es/books/handbook/audit/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/basics/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/bibliography/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/boot/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/config/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/cutting-edge/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/desktop/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/disks/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/eresources/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/firewalls/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/geom/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/install/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/introduction/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/jails/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/kernelconfig/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/l10n/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/linuxemu/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/mac/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/mail/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/mirrors/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/multimedia/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/network-servers/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/parti.adoc2
-rw-r--r--documentation/content/es/books/handbook/partii.adoc2
-rw-r--r--documentation/content/es/books/handbook/partiii.adoc2
-rw-r--r--documentation/content/es/books/handbook/partiv.adoc2
-rw-r--r--documentation/content/es/books/handbook/partv.adoc2
-rw-r--r--documentation/content/es/books/handbook/pgpkeys/_index.adoc5
-rw-r--r--documentation/content/es/books/handbook/ports/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/ppp-and-slip/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/preface/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/printing/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/security/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/serialcomms/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/users/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/vinum/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/virtualization/_index.adoc2
-rw-r--r--documentation/content/es/books/handbook/x11/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/_index.adoc20
-rw-r--r--documentation/content/fr/books/handbook/advanced-networking/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/audit/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/basics/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/bibliography/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/book.adoc14
-rw-r--r--documentation/content/fr/books/handbook/boot/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/bsdinstall/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/config/_index.adoc4
-rw-r--r--documentation/content/fr/books/handbook/cutting-edge/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/desktop/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/disks/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/dtrace/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/eresources/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/filesystems/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/firewalls/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/geom/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/introduction.adoc13
-rw-r--r--documentation/content/fr/books/handbook/introduction/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/jails/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/kernelconfig/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/l10n/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/linuxemu/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/mac/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/mail/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/mirrors/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/multimedia/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/network-servers/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/parti.adoc2
-rw-r--r--documentation/content/fr/books/handbook/partii.adoc2
-rw-r--r--documentation/content/fr/books/handbook/partiii.adoc2
-rw-r--r--documentation/content/fr/books/handbook/partiv.adoc2
-rw-r--r--documentation/content/fr/books/handbook/partv.adoc2
-rw-r--r--documentation/content/fr/books/handbook/pgpkeys/_index.adoc5
-rw-r--r--documentation/content/fr/books/handbook/ports/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/ppp-and-slip/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/preface/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/printing/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/security/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/serialcomms/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/users/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/vinum/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/virtualization/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/wine/_index.adoc898
-rw-r--r--documentation/content/fr/books/handbook/x11/_index.adoc2
-rw-r--r--documentation/content/fr/books/handbook/zfs/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/advanced-networking/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/audit/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/basics/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/bibliography/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/boot/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/config/_index.adoc4
-rw-r--r--documentation/content/hu/books/handbook/cutting-edge/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/desktop/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/disks/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/dtrace/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/eresources/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/filesystems/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/firewalls/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/geom/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/install/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/introduction/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/jails/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/kernelconfig/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/l10n/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/linuxemu/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/mac/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/mail/_index.adoc4
-rw-r--r--documentation/content/hu/books/handbook/mirrors/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/multimedia/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/network-servers/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/parti.adoc2
-rw-r--r--documentation/content/hu/books/handbook/partii.adoc2
-rw-r--r--documentation/content/hu/books/handbook/partiii.adoc2
-rw-r--r--documentation/content/hu/books/handbook/partiv.adoc2
-rw-r--r--documentation/content/hu/books/handbook/partv.adoc2
-rw-r--r--documentation/content/hu/books/handbook/pgpkeys/_index.adoc5
-rw-r--r--documentation/content/hu/books/handbook/ports/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/ppp-and-slip/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/preface/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/printing/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/security/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/serialcomms/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/users/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/vinum/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/virtualization/_index.adoc2
-rw-r--r--documentation/content/hu/books/handbook/x11/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/advanced-networking/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/audit/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/basics/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/bibliography/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/boot/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/config/_index.adoc4
-rw-r--r--documentation/content/it/books/handbook/cutting-edge/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/desktop/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/disks/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/eresources/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/firewalls/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/geom/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/install/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/introduction/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/jails/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/kernelconfig/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/l10n/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/linuxemu/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/mac/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/mail/_index.adoc4
-rw-r--r--documentation/content/it/books/handbook/mirrors/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/multimedia/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/network-servers/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/parti.adoc2
-rw-r--r--documentation/content/it/books/handbook/partii.adoc2
-rw-r--r--documentation/content/it/books/handbook/partiii.adoc2
-rw-r--r--documentation/content/it/books/handbook/partiv.adoc2
-rw-r--r--documentation/content/it/books/handbook/partv.adoc2
-rw-r--r--documentation/content/it/books/handbook/pgpkeys/_index.adoc5
-rw-r--r--documentation/content/it/books/handbook/ports/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/ppp-and-slip/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/preface/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/printing/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/security/_index.adoc4
-rw-r--r--documentation/content/it/books/handbook/serialcomms/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/users/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/vinum/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/virtualization/_index.adoc2
-rw-r--r--documentation/content/it/books/handbook/x11/_index.adoc2
-rw-r--r--documentation/content/ja/books/handbook/_index.adoc2
-rw-r--r--documentation/content/ja/books/handbook/advanced-networking/_index.adoc8
-rw-r--r--documentation/content/ja/books/handbook/basics/_index.adoc1595
-rw-r--r--documentation/content/ja/books/handbook/bibliography/_index.adoc4
-rw-r--r--documentation/content/ja/books/handbook/book.adoc2
-rw-r--r--documentation/content/ja/books/handbook/boot/_index.adoc18
-rw-r--r--documentation/content/ja/books/handbook/bsdinstall/_index.adoc796
-rw-r--r--documentation/content/ja/books/handbook/config/_index.adoc2
-rw-r--r--documentation/content/ja/books/handbook/cutting-edge/_index.adoc58
-rw-r--r--documentation/content/ja/books/handbook/desktop/_index.adoc2
-rw-r--r--documentation/content/ja/books/handbook/disks/_index.adoc8
-rw-r--r--documentation/content/ja/books/handbook/eresources/_index.adoc4
-rw-r--r--documentation/content/ja/books/handbook/introduction.adoc2
-rw-r--r--documentation/content/ja/books/handbook/introduction/_index.adoc121
-rw-r--r--documentation/content/ja/books/handbook/kernelconfig/_index.adoc27
-rw-r--r--documentation/content/ja/books/handbook/l10n/_index.adoc8
-rw-r--r--documentation/content/ja/books/handbook/linuxemu/_index.adoc2
-rw-r--r--documentation/content/ja/books/handbook/mail/_index.adoc10
-rw-r--r--documentation/content/ja/books/handbook/mirrors/_index.adoc17
-rw-r--r--documentation/content/ja/books/handbook/multimedia/_index.adoc2
-rw-r--r--documentation/content/ja/books/handbook/parti.adoc2
-rw-r--r--documentation/content/ja/books/handbook/partii.adoc2
-rw-r--r--documentation/content/ja/books/handbook/partiii.adoc2
-rw-r--r--documentation/content/ja/books/handbook/partiv.adoc4
-rw-r--r--documentation/content/ja/books/handbook/partv.adoc4
-rw-r--r--documentation/content/ja/books/handbook/pgpkeys/_index.adoc7
-rw-r--r--documentation/content/ja/books/handbook/ports/_index.adoc97
-rw-r--r--documentation/content/ja/books/handbook/ppp-and-slip/_index.adoc8
-rw-r--r--documentation/content/ja/books/handbook/preface/_index.adoc2
-rw-r--r--documentation/content/ja/books/handbook/printing/_index.adoc2
-rw-r--r--documentation/content/ja/books/handbook/security/_index.adoc346
-rw-r--r--documentation/content/ja/books/handbook/serialcomms/_index.adoc8
-rw-r--r--documentation/content/ja/books/handbook/users/_index.adoc527
-rw-r--r--documentation/content/ja/books/handbook/x11/_index.adoc9
-rw-r--r--documentation/content/ja/books/porters-handbook/changes/_index.adoc2
-rw-r--r--documentation/content/ja/books/porters-handbook/makefile/_index.adoc2
-rw-r--r--documentation/content/ja/books/porters-handbook/own-port/_index.adoc2
-rw-r--r--documentation/content/ja/books/porters-handbook/pkg-files/_index.adoc2
-rw-r--r--documentation/content/ja/books/porters-handbook/port-upgrading/_index.adoc2
-rw-r--r--documentation/content/ja/books/porters-handbook/porting-autoplist/_index.adoc2
-rw-r--r--documentation/content/ja/books/porters-handbook/porting-dads/_index.adoc2
-rw-r--r--documentation/content/ja/books/porters-handbook/porting-info/_index.adoc2
-rw-r--r--documentation/content/ja/books/porters-handbook/porting-manpages/_index.adoc2
-rw-r--r--documentation/content/ja/books/porters-handbook/porting-masterdir/_index.adoc2
-rw-r--r--documentation/content/ja/books/porters-handbook/porting-motif/_index.adoc2
-rw-r--r--documentation/content/ja/books/porters-handbook/porting-samplem/_index.adoc2
-rw-r--r--documentation/content/ja/books/porters-handbook/quick-porting/_index.adoc2
-rw-r--r--documentation/content/ja/books/porters-handbook/shared/_index.adoc2
-rw-r--r--documentation/content/ja/books/porters-handbook/slow/_index.adoc2
-rw-r--r--documentation/content/ja/books/porters-handbook/special/_index.adoc2
-rw-r--r--documentation/content/ja/books/porters-handbook/testing/_index.adoc2
-rw-r--r--documentation/content/ja/books/porters-handbook/why-port/_index.adoc2
-rw-r--r--documentation/content/ja/books/porters-handbook/x11-fonts/_index.adoc2
-rw-r--r--documentation/content/ko/articles/bsdl-gpl/_index.adoc171
-rw-r--r--documentation/content/ko/articles/bsdl-gpl/_index.po1078
-rw-r--r--documentation/content/ko/articles/leap-seconds/_index.adoc92
-rw-r--r--documentation/content/ko/articles/leap-seconds/_index.po247
-rw-r--r--documentation/content/mn/books/handbook/advanced-networking/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/audit/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/basics/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/bibliography/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/boot/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/bsdinstall/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/config/_index.adoc4
-rw-r--r--documentation/content/mn/books/handbook/cutting-edge/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/desktop/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/disks/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/dtrace/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/eresources/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/filesystems/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/firewalls/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/geom/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/install/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/introduction/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/jails/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/kernelconfig/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/l10n/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/linuxemu/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/mac/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/mail/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/mirrors/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/multimedia/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/network-servers/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/parti.adoc2
-rw-r--r--documentation/content/mn/books/handbook/partii.adoc2
-rw-r--r--documentation/content/mn/books/handbook/partiii.adoc2
-rw-r--r--documentation/content/mn/books/handbook/partiv.adoc2
-rw-r--r--documentation/content/mn/books/handbook/partv.adoc2
-rw-r--r--documentation/content/mn/books/handbook/pgpkeys/_index.adoc5
-rw-r--r--documentation/content/mn/books/handbook/ports/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/ppp-and-slip/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/preface/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/printing/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/security/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/serialcomms/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/users/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/vinum/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/virtualization/_index.adoc2
-rw-r--r--documentation/content/mn/books/handbook/x11/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/advanced-networking/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/audit/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/basics/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/bibliography/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/boot/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/bsdinstall/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/config/_index.adoc4
-rw-r--r--documentation/content/nl/books/handbook/cutting-edge/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/desktop/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/disks/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/dtrace/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/eresources/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/filesystems/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/firewalls/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/geom/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/install/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/introduction/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/jails/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/kernelconfig/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/l10n/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/linuxemu/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/mac/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/mail/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/mirrors/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/multimedia/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/network-servers/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/parti.adoc2
-rw-r--r--documentation/content/nl/books/handbook/partii.adoc2
-rw-r--r--documentation/content/nl/books/handbook/partiii.adoc2
-rw-r--r--documentation/content/nl/books/handbook/partiv.adoc2
-rw-r--r--documentation/content/nl/books/handbook/partv.adoc2
-rw-r--r--documentation/content/nl/books/handbook/pgpkeys/_index.adoc5
-rw-r--r--documentation/content/nl/books/handbook/ports/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/ppp-and-slip/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/preface/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/printing/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/security/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/serialcomms/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/users/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/virtualization/_index.adoc2
-rw-r--r--documentation/content/nl/books/handbook/x11/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/advanced-networking/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/audit/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/basics/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/bibliography/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/boot/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/config/_index.adoc4
-rw-r--r--documentation/content/pl/books/handbook/cutting-edge/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/desktop/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/disks/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/dtrace/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/eresources/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/filesystems/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/firewalls/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/geom/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/install/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/introduction/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/jails/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/kernelconfig/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/l10n/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/linuxemu/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/mac/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/mail/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/mirrors/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/multimedia/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/network-servers/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/parti.adoc2
-rw-r--r--documentation/content/pl/books/handbook/partii.adoc2
-rw-r--r--documentation/content/pl/books/handbook/partiii.adoc2
-rw-r--r--documentation/content/pl/books/handbook/partiv.adoc2
-rw-r--r--documentation/content/pl/books/handbook/partv.adoc2
-rw-r--r--documentation/content/pl/books/handbook/pgpkeys/_index.adoc5
-rw-r--r--documentation/content/pl/books/handbook/ports/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/ppp-and-slip/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/preface/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/printing/_index.adoc7
-rw-r--r--documentation/content/pl/books/handbook/security/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/serialcomms/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/usb-device-mode/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/users/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/virtualization/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/x11/_index.adoc2
-rw-r--r--documentation/content/pl/books/handbook/zfs/_index.adoc2
-rw-r--r--documentation/content/pt-br/articles/building-products/_index.adoc176
-rw-r--r--documentation/content/pt-br/articles/building-products/_index.po1504
-rw-r--r--documentation/content/pt-br/articles/contributing/_index.adoc380
-rw-r--r--documentation/content/pt-br/articles/contributing/_index.po2187
-rw-r--r--documentation/content/pt-br/articles/contributors/_index.adoc144
-rw-r--r--documentation/content/pt-br/articles/contributors/_index.po740
-rw-r--r--documentation/content/pt-br/articles/contributors/contrib-develinmemoriam.adoc10
-rw-r--r--documentation/content/pt-br/articles/cups/_index.adoc59
-rw-r--r--documentation/content/pt-br/articles/cups/_index.po703
-rw-r--r--documentation/content/pt-br/articles/explaining-bsd/_index.adoc2
-rw-r--r--documentation/content/pt-br/articles/explaining-bsd/_index.po226
-rw-r--r--documentation/content/pt-br/articles/filtering-bridges/_index.adoc84
-rw-r--r--documentation/content/pt-br/articles/filtering-bridges/_index.po842
-rw-r--r--documentation/content/pt-br/articles/fonts/_index.adoc281
-rw-r--r--documentation/content/pt-br/articles/fonts/_index.po1615
-rw-r--r--documentation/content/pt-br/articles/freebsd-questions/_index.adoc196
-rw-r--r--documentation/content/pt-br/articles/freebsd-questions/_index.po965
-rw-r--r--documentation/content/pt-br/articles/freebsd-src-lsp/_index.adoc268
-rw-r--r--documentation/content/pt-br/articles/freebsd-src-lsp/_index.po702
-rw-r--r--documentation/content/pt-br/articles/freebsd-status-report-process/_index.adoc244
-rw-r--r--documentation/content/pt-br/articles/freebsd-status-report-process/_index.po1065
-rw-r--r--documentation/content/pt-br/articles/freebsd-update-server/_index.adoc173
-rw-r--r--documentation/content/pt-br/articles/freebsd-update-server/_index.po1562
-rw-r--r--documentation/content/pt-br/articles/geom-class/_index.adoc177
-rw-r--r--documentation/content/pt-br/articles/geom-class/_index.po1397
-rw-r--r--documentation/content/pt-br/articles/gjournal-desktop/_index.adoc173
-rw-r--r--documentation/content/pt-br/articles/gjournal-desktop/_index.po1348
-rw-r--r--documentation/content/pt-br/articles/hubs/_index.adoc171
-rw-r--r--documentation/content/pt-br/articles/hubs/_index.po1219
-rw-r--r--documentation/content/pt-br/articles/ipsec-must/_index.adoc44
-rw-r--r--documentation/content/pt-br/articles/ipsec-must/_index.po741
-rw-r--r--documentation/content/pt-br/articles/license-guide/_index.adoc233
-rw-r--r--documentation/content/pt-br/articles/license-guide/_index.po1067
-rw-r--r--documentation/content/pt-br/articles/linux-emulation/_index.adoc404
-rw-r--r--documentation/content/pt-br/articles/linux-emulation/_index.po4509
-rw-r--r--documentation/content/pt-br/articles/linux-users/_index.adoc160
-rw-r--r--documentation/content/pt-br/articles/linux-users/_index.po1007
-rw-r--r--documentation/content/pt-br/articles/mailing-list-faq/_index.adoc4
-rw-r--r--documentation/content/pt-br/articles/mailing-list-faq/_index.po199
-rw-r--r--documentation/content/pt-br/articles/nanobsd/_index.adoc243
-rw-r--r--documentation/content/pt-br/articles/nanobsd/_index.po1567
-rw-r--r--documentation/content/pt-br/articles/new-users/_index.adoc215
-rw-r--r--documentation/content/pt-br/articles/new-users/_index.po1425
-rw-r--r--documentation/content/pt-br/articles/pgpkeys/_index.adoc1362
-rw-r--r--documentation/content/pt-br/articles/pgpkeys/_index.po2824
-rw-r--r--documentation/content/pt-br/articles/pr-guidelines/_index.adoc242
-rw-r--r--documentation/content/pt-br/articles/pr-guidelines/_index.po1616
-rw-r--r--documentation/content/pt-br/articles/problem-reports/_index.adoc4
-rw-r--r--documentation/content/pt-br/articles/problem-reports/_index.po144
-rw-r--r--documentation/content/pt-br/articles/rc-scripting/_index.adoc238
-rw-r--r--documentation/content/pt-br/articles/rc-scripting/_index.po2337
-rw-r--r--documentation/content/pt-br/articles/remote-install/_index.adoc147
-rw-r--r--documentation/content/pt-br/articles/remote-install/_index.po1027
-rw-r--r--documentation/content/pt-br/articles/solid-state/_index.adoc95
-rw-r--r--documentation/content/pt-br/articles/solid-state/_index.po907
-rw-r--r--documentation/content/pt-br/books/dev-model/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/fdp-primer/_index.adoc4
-rw-r--r--documentation/content/pt-br/books/fdp-primer/_index.po8
-rw-r--r--documentation/content/pt-br/books/fdp-primer/asciidoctor-primer/_index.adoc106
-rw-r--r--documentation/content/pt-br/books/fdp-primer/asciidoctor-primer/_index.po264
-rw-r--r--documentation/content/pt-br/books/fdp-primer/book.adoc8
-rw-r--r--documentation/content/pt-br/books/fdp-primer/book.po8
-rw-r--r--documentation/content/pt-br/books/fdp-primer/doc-build/_index.adoc29
-rw-r--r--documentation/content/pt-br/books/fdp-primer/doc-build/_index.po297
-rw-r--r--documentation/content/pt-br/books/fdp-primer/editor-config/_index.adoc216
-rw-r--r--documentation/content/pt-br/books/fdp-primer/editor-config/_index.po635
-rw-r--r--documentation/content/pt-br/books/fdp-primer/examples/_index.adoc10
-rw-r--r--documentation/content/pt-br/books/fdp-primer/examples/_index.po12
-rw-r--r--documentation/content/pt-br/books/fdp-primer/manual-pages/_index.adoc17
-rw-r--r--documentation/content/pt-br/books/fdp-primer/manual-pages/_index.po97
-rw-r--r--documentation/content/pt-br/books/fdp-primer/overview/_index.adoc213
-rw-r--r--documentation/content/pt-br/books/fdp-primer/overview/_index.po549
-rw-r--r--documentation/content/pt-br/books/fdp-primer/po-translations/_index.adoc83
-rw-r--r--documentation/content/pt-br/books/fdp-primer/po-translations/_index.po647
-rw-r--r--documentation/content/pt-br/books/fdp-primer/preface/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/fdp-primer/rosetta/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/fdp-primer/see-also/_index.adoc10
-rw-r--r--documentation/content/pt-br/books/fdp-primer/see-also/_index.po13
-rw-r--r--documentation/content/pt-br/books/fdp-primer/structure/_index.adoc22
-rw-r--r--documentation/content/pt-br/books/fdp-primer/structure/_index.po212
-rw-r--r--documentation/content/pt-br/books/fdp-primer/tools/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/fdp-primer/trademarks/_index.adoc94
-rw-r--r--documentation/content/pt-br/books/fdp-primer/trademarks/_index.po197
-rw-r--r--documentation/content/pt-br/books/fdp-primer/translations/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/fdp-primer/weblate/_index.adoc454
-rw-r--r--documentation/content/pt-br/books/fdp-primer/weblate/_index.po1258
-rw-r--r--documentation/content/pt-br/books/fdp-primer/working-copy/_index.adoc4
-rw-r--r--documentation/content/pt-br/books/fdp-primer/working-copy/_index.po15
-rw-r--r--documentation/content/pt-br/books/fdp-primer/writing-style/_index.adoc129
-rw-r--r--documentation/content/pt-br/books/fdp-primer/writing-style/_index.po648
-rw-r--r--documentation/content/pt-br/books/handbook/advanced-networking/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/audit/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/basics/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/bibliography/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/boot/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/bsdinstall/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/config/_index.adoc4
-rw-r--r--documentation/content/pt-br/books/handbook/cutting-edge/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/desktop/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/disks/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/dtrace/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/eresources/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/filesystems/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/firewalls/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/geom/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/introduction/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/jails/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/kernelconfig/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/l10n/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/linuxemu/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/mac/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/mail/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/mirrors/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/multimedia/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/network-servers/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/parti.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/partii.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/partiii.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/partiv.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/partv.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/pgpkeys/_index.adoc5
-rw-r--r--documentation/content/pt-br/books/handbook/ports/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/ppp-and-slip/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/preface/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/printing/_index.adoc7
-rw-r--r--documentation/content/pt-br/books/handbook/security/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/serialcomms/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/usb-device-mode/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/virtualization/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/x11/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/handbook/zfs/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/porters-handbook/flavors/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/porters-handbook/keeping-up/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/porters-handbook/makefiles/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/porters-handbook/new-port/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/porters-handbook/order/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/porters-handbook/pkg-files/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/porters-handbook/plist/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/porters-handbook/porting-dads/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/porters-handbook/porting-samplem/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/porters-handbook/porting-why/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/porters-handbook/quick-porting/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/porters-handbook/security/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/porters-handbook/slow-porting/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/porters-handbook/special/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/porters-handbook/testing/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/porters-handbook/upgrading/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/porters-handbook/uses/_index.adoc2
-rw-r--r--documentation/content/pt-br/books/porters-handbook/versions/_index.adoc2
-rw-r--r--documentation/content/ru/books/arch-handbook/book.adoc2
-rw-r--r--documentation/content/ru/books/faq/_index.adoc2058
-rw-r--r--documentation/content/ru/books/handbook/advanced-networking/_index.adoc2
-rw-r--r--documentation/content/ru/books/handbook/audit/_index.adoc2
-rw-r--r--documentation/content/ru/books/handbook/basics/_index.adoc2
-rw-r--r--documentation/content/ru/books/handbook/bibliography/_index.adoc2
-rw-r--r--documentation/content/ru/books/handbook/boot/_index.adoc2
-rw-r--r--documentation/content/ru/books/handbook/bsdinstall/_index.adoc2
-rw-r--r--documentation/content/ru/books/handbook/config/_index.adoc4
-rw-r--r--documentation/content/ru/books/handbook/cutting-edge/_index.adoc2
-rw-r--r--documentation/content/ru/books/handbook/desktop/_index.adoc2
-rw-r--r--documentation/content/ru/books/handbook/disks/_index.adoc2
-rw-r--r--documentation/content/ru/books/handbook/eresources/_index.adoc2
-rw-r--r--documentation/content/ru/books/handbook/filesystems/_index.adoc2
-rw-r--r--documentation/content/ru/books/handbook/firewalls/_index.adoc2
-rw-r--r--documentation/content/ru/books/handbook/geom/_index.adoc2
-rw-r--r--documentation/content/ru/books/handbook/install/_index.adoc2
-rw-r--r--documentation/content/ru/books/handbook/introduction/_index.adoc2
-rw-r--r--documentation/content/ru/books/handbook/kernelconfig/_index.adoc2
-rw-r--r--documentation/content/ru/books/handbook/l10n/_index.adoc2
-rw-r--r--documentation/content/ru/books/handbook/linuxemu/_index.adoc2
-rw-r--r--documentation/content/ru/books/handbook/mac/_index.adoc2
-rw-r--r--documentation/content/ru/books/handbook/mail/_index.adoc2
-rw-r--r--documentation/content/ru/books/handbook/mirrors/_index.adoc2
-rw-r--r--documentation/content/ru/books/handbook/multimedia/_index.adoc2
-rw-r--r--documentation/content/ru/books/handbook/network-servers/_index.adoc2
-rw-r--r--documentation/content/ru/books/handbook/parti.adoc2
-rw-r--r--documentation/content/ru/books/handbook/partii.adoc2
-rw-r--r--documentation/content/ru/books/handbook/partiii.adoc2
-rw-r--r--documentation/content/ru/books/handbook/partiv.adoc2
-rw-r--r--documentation/content/ru/books/handbook/partv.adoc2
-rw-r--r--documentation/content/ru/books/handbook/pgpkeys/_index.adoc5
-rw-r--r--documentation/content/ru/books/handbook/ports/_index.adoc2
-rw-r--r--documentation/content/ru/books/handbook/ppp-and-slip/_index.adoc2
-rw-r--r--documentation/content/ru/books/handbook/preface/_index.adoc236
-rw-r--r--documentation/content/ru/books/handbook/printing/_index.adoc2
-rw-r--r--documentation/content/ru/books/handbook/security/_index.adoc2
-rw-r--r--documentation/content/ru/books/handbook/serialcomms/_index.adoc2
-rw-r--r--documentation/content/ru/books/handbook/wayland/_index.adoc699
-rw-r--r--documentation/content/ru/books/handbook/x11/_index.adoc2
-rw-r--r--documentation/content/ru/books/porters-handbook/keeping-up/_index.adoc2
-rw-r--r--documentation/content/ru/books/porters-handbook/makefiles/_index.adoc2
-rw-r--r--documentation/content/ru/books/porters-handbook/new-port/_index.adoc2
-rw-r--r--documentation/content/ru/books/porters-handbook/pkg-files/_index.adoc2
-rw-r--r--documentation/content/ru/books/porters-handbook/plist/_index.adoc2
-rw-r--r--documentation/content/ru/books/porters-handbook/porting-dads/_index.adoc2
-rw-r--r--documentation/content/ru/books/porters-handbook/porting-samplem/_index.adoc2
-rw-r--r--documentation/content/ru/books/porters-handbook/porting-why/_index.adoc2
-rw-r--r--documentation/content/ru/books/porters-handbook/quick-porting/_index.adoc2
-rw-r--r--documentation/content/ru/books/porters-handbook/security/_index.adoc2
-rw-r--r--documentation/content/ru/books/porters-handbook/slow-porting/_index.adoc2
-rw-r--r--documentation/content/ru/books/porters-handbook/special/_index.adoc2
-rw-r--r--documentation/content/ru/books/porters-handbook/testing/_index.adoc2
-rw-r--r--documentation/content/ru/books/porters-handbook/upgrading/_index.adoc2
-rw-r--r--documentation/content/ru/books/porters-handbook/uses/_index.adoc2
-rw-r--r--documentation/content/ru/books/porters-handbook/versions/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/arch-handbook/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/arch-handbook/bibliography/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/arch-handbook/book.adoc2
-rw-r--r--documentation/content/zh-cn/books/arch-handbook/boot/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/arch-handbook/driverbasics/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/arch-handbook/isa/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/arch-handbook/jail/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/arch-handbook/kobj/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/arch-handbook/locking/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/arch-handbook/mac/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/arch-handbook/newbus/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/arch-handbook/parti.adoc2
-rw-r--r--documentation/content/zh-cn/books/arch-handbook/partii.adoc2
-rw-r--r--documentation/content/zh-cn/books/arch-handbook/partiii.adoc2
-rw-r--r--documentation/content/zh-cn/books/arch-handbook/pccard/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/arch-handbook/pci/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/arch-handbook/scsi/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/arch-handbook/smp/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/arch-handbook/sound/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/arch-handbook/sysinit/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/arch-handbook/usb/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/arch-handbook/vm/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/advanced-networking/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/audit/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/basics/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/bibliography/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/boot/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/bsdinstall/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/config/_index.adoc4
-rw-r--r--documentation/content/zh-cn/books/handbook/cutting-edge/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/desktop/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/disks/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/dtrace/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/eresources/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/filesystems/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/firewalls/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/geom/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/install/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/introduction/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/jails/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/kernelconfig/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/l10n/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/linuxemu/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/mac/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/mail/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/mirrors/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/multimedia/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/network-servers/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/parti.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/partii.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/partiii.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/partiv.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/partv.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/pgpkeys/_index.adoc5
-rw-r--r--documentation/content/zh-cn/books/handbook/ports/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/ppp-and-slip/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/preface/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/printing/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/security/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/serialcomms/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/users/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/vinum/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/virtualization/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/handbook/x11/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/porters-handbook/keeping-up/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/porters-handbook/makefile/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/porters-handbook/own-port/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/porters-handbook/pkg-files/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/porters-handbook/plist/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/porters-handbook/port-upgrading/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/porters-handbook/porting-dads/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/porters-handbook/porting-samplem/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/porters-handbook/quick-porting/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/porters-handbook/security/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/porters-handbook/slow/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/porters-handbook/special/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/porters-handbook/testing/_index.adoc2
-rw-r--r--documentation/content/zh-cn/books/porters-handbook/why-port/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/developers-handbook/bibliography/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/developers-handbook/introduction/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/developers-handbook/ipv6/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/developers-handbook/kernelbuild/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/developers-handbook/kerneldebug/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/developers-handbook/l10n/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/developers-handbook/parti.adoc2
-rw-r--r--documentation/content/zh-tw/books/developers-handbook/partii.adoc2
-rw-r--r--documentation/content/zh-tw/books/developers-handbook/partiii.adoc2
-rw-r--r--documentation/content/zh-tw/books/developers-handbook/partiv.adoc2
-rw-r--r--documentation/content/zh-tw/books/developers-handbook/partv.adoc2
-rw-r--r--documentation/content/zh-tw/books/developers-handbook/policies/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/developers-handbook/secure/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/developers-handbook/sockets/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/developers-handbook/testing/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/developers-handbook/tools/_index.adoc18
-rw-r--r--documentation/content/zh-tw/books/developers-handbook/x86/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/faq/_index.adoc89
-rw-r--r--documentation/content/zh-tw/books/handbook/_index.adoc5
-rw-r--r--documentation/content/zh-tw/books/handbook/advanced-networking/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/audit/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/basics/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/bibliography/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/book.adoc4
-rw-r--r--documentation/content/zh-tw/books/handbook/boot/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/bsdinstall/_index.adoc4
-rw-r--r--documentation/content/zh-tw/books/handbook/config/_index.adoc4
-rw-r--r--documentation/content/zh-tw/books/handbook/cutting-edge/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/desktop/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/disks/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/dtrace/_index.adoc110
-rw-r--r--documentation/content/zh-tw/books/handbook/eresources/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/filesystems/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/firewalls/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/geom/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/introduction/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/jails/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/kernelconfig/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/l10n/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/linuxemu/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/mac/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/mail/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/mirrors/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/multimedia/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/network-servers/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/parti.adoc4
-rw-r--r--documentation/content/zh-tw/books/handbook/partii.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/partiii.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/partiv.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/partv.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/pgpkeys/_index.adoc5
-rw-r--r--documentation/content/zh-tw/books/handbook/ports/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/ppp-and-slip/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/preface/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/printing/_index.adoc7
-rw-r--r--documentation/content/zh-tw/books/handbook/security/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/serialcomms/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/usb-device-mode/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/virtualization/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/x11/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/handbook/zfs/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/porters-handbook/flavors/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/porters-handbook/keeping-up/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/porters-handbook/makefiles/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/porters-handbook/new-port/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/porters-handbook/order/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/porters-handbook/pkg-files/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/porters-handbook/plist/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/porters-handbook/porting-dads/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/porters-handbook/porting-samplem/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/porters-handbook/porting-why/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/porters-handbook/quick-porting/_index.adoc125
-rw-r--r--documentation/content/zh-tw/books/porters-handbook/security/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/porters-handbook/slow-porting/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/porters-handbook/special/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/porters-handbook/testing/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/porters-handbook/upgrading/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/porters-handbook/uses/_index.adoc2
-rw-r--r--documentation/content/zh-tw/books/porters-handbook/versions/_index.adoc2
-rw-r--r--documentation/static/images/books/dev-model/portsstatus.pngbin11895 -> 0 bytes
-rw-r--r--documentation/static/images/books/dev-model/portsstatus.svg341
-rw-r--r--documentation/static/images/books/fdp-primer/weblate-documents.pngbin0 -> 291722 bytes
-rw-r--r--documentation/static/images/books/fdp-primer/weblate-languages.pngbin0 -> 164031 bytes
-rw-r--r--documentation/static/images/books/fdp-primer/weblate-login.pngbin0 -> 302559 bytes
-rw-r--r--documentation/static/images/books/fdp-primer/weblate-offline.pngbin0 -> 255581 bytes
-rw-r--r--documentation/static/images/books/fdp-primer/weblate-revision1.pngbin0 -> 363288 bytes
-rw-r--r--documentation/static/images/books/fdp-primer/weblate-revision2.pngbin0 -> 324747 bytes
-rw-r--r--documentation/static/images/books/fdp-primer/weblate-translate.pngbin0 -> 418977 bytes
-rw-r--r--documentation/static/images/books/fdp-primer/weblate_automatic_suggestion_01.pngbin0 -> 183682 bytes
-rw-r--r--documentation/static/images/books/fdp-primer/weblate_automatic_suggestion_02.pngbin0 -> 201198 bytes
-rw-r--r--documentation/static/images/books/fdp-primer/weblate_automatic_suggestion_03.pngbin0 -> 205683 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-adduser1.pngbin1792 -> 6678 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-adduser2.pngbin3440 -> 10337 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-adduser3.pngbin4483 -> 14716 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-boot-options-menu.pngbin7141 -> 118629 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-choose-mode.pngbin2015 -> 6969 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-config-components.pngbin7216 -> 10826 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-config-hostname.pngbin2607 -> 7844 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-config-services.pngbin8239 -> 11743 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-ipv4-dhcp.pngbin1757 -> 6529 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-ipv4-static.pngbin2643 -> 8016 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-ipv4.pngbin1770 -> 6490 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-ipv6-static.pngbin2764 -> 8459 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-ipv6.pngbin1761 -> 6488 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-slaac.pngbin1904 -> 6727 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface.pngbin4501 -> 7318 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-ipv4-dns.pngbin2702 -> 9069 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-wireless-accesspoints.pngbin4227 -> 11462 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-wireless-scan.pngbin1842 -> 6612 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-wireless-wpa2setup.pngbin1603 -> 6309 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-distfile-extracting.pngbin6459 -> 9506 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-distfile-fetching.pngbin5596 -> 8628 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-distfile-verifying.pngbin5943 -> 9099 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-final-confirmation.pngbin8569 -> 10844 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-final-modification-shell.pngbin2542 -> 8105 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-finalconfiguration.pngbin10277 -> 14367 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-hardening.pngbin11675 -> 15265 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-keymap-10.pngbin8712 -> 17396 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-keymap-loading.pngbin2788 -> 5213 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-keymap-testing.pngbin4975 -> 7789 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-mainexit.pngbin2095 -> 7156 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-netinstall-files.pngbin4978 -> 7932 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-netinstall-mirrorselect.pngbin6376 -> 22826 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-newboot-loader-menu.pngbin6321 -> 120071 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-entire-part.pngbin3130 -> 8252 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-guided-disk.pngbin2712 -> 7721 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-manual-addpart.pngbin7277 -> 10676 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-manual-create.pngbin3029 -> 8041 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-manual-partscheme.pngbin6522 -> 9845 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-review.pngbin7219 -> 9695 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-post-root-passwd.pngbin3485 -> 5446 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-confirm.pngbin7917 -> 5699 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-country.pngbin7760 -> 11452 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-date.pngbin5659 -> 6128 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-region.pngbin5731 -> 8694 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-time.pngbin3473 -> 5907 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-zone.pngbin7636 -> 7310 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-ufs-warning.pngbin4819 -> 7715 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-disk_info.pngbin7049 -> 15786 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-disk_select.pngbin3694 -> 7142 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-geli_password.pngbin4735 -> 8343 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-init-encription.pngbin3809 -> 6456 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-menu.pngbin8542 -> 13254 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-partmenu.pngbin5928 -> 10367 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-pool-name.pngbin3809 -> 6541 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-rescan-devices.pngbin3424 -> 5600 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-swap-amount.pngbin4636 -> 7462 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-vdev_invalid.pngbin3855 -> 7370 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-vdev_type.pngbin8153 -> 11919 bytes
-rw-r--r--documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-warning.pngbin4530 -> 7816 bytes
-rw-r--r--documentation/static/images/books/handbook/multimedia/pwcview.pngbin0 -> 406407 bytes
-rw-r--r--documentation/static/images/books/handbook/virtualization/parallels-freebsd1.pngbin62972 -> 705979 bytes
-rw-r--r--documentation/static/images/books/handbook/virtualization/parallels-freebsd2.pngbin68151 -> 603138 bytes
-rw-r--r--documentation/static/images/books/handbook/virtualization/parallels-freebsd3.pngbin76742 -> 591697 bytes
-rw-r--r--documentation/static/images/books/handbook/virtualization/parallels-freebsd4.pngbin87403 -> 502689 bytes
-rw-r--r--documentation/static/images/books/handbook/virtualization/parallels-freebsd5.pngbin57191 -> 514080 bytes
-rw-r--r--documentation/static/images/books/handbook/virtualization/parallels-freebsd6.pngbin89874 -> 484946 bytes
-rw-r--r--documentation/static/images/books/handbook/virtualization/parallels-freebsd7.pngbin69993 -> 1107633 bytes
-rw-r--r--documentation/static/pgpkeys/README8
-rw-r--r--documentation/static/pgpkeys/acm.key75
-rw-r--r--documentation/static/pgpkeys/akiyano.key44
-rw-r--r--documentation/static/pgpkeys/alfredo.key98
-rw-r--r--documentation/static/pgpkeys/ashish.key38714
-rw-r--r--documentation/static/pgpkeys/bjk.key397
-rw-r--r--documentation/static/pgpkeys/blackend.key100
-rw-r--r--documentation/static/pgpkeys/bnovkov.key28
-rw-r--r--documentation/static/pgpkeys/bofh.key1168
-rw-r--r--documentation/static/pgpkeys/carlavilla.key88
-rw-r--r--documentation/static/pgpkeys/cc.key66
-rw-r--r--documentation/static/pgpkeys/christos.key45
-rw-r--r--documentation/static/pgpkeys/core-secretary.key127
-rw-r--r--documentation/static/pgpkeys/corvink.key66
-rw-r--r--documentation/static/pgpkeys/cperciva.key202
-rw-r--r--documentation/static/pgpkeys/dbaio.key359
-rw-r--r--documentation/static/pgpkeys/debdrup.key39
-rw-r--r--documentation/static/pgpkeys/decke.key48
-rw-r--r--documentation/static/pgpkeys/delphij.key263
-rw-r--r--documentation/static/pgpkeys/des.key102
-rw-r--r--documentation/static/pgpkeys/dhw.key30
-rw-r--r--documentation/static/pgpkeys/dinoex.key80
-rw-r--r--documentation/static/pgpkeys/dsl.key80
-rw-r--r--documentation/static/pgpkeys/dumbbell.key421
-rw-r--r--documentation/static/pgpkeys/dutra.key66
-rw-r--r--documentation/static/pgpkeys/ebrandi.key275
-rw-r--r--documentation/static/pgpkeys/eduardo.key37
-rw-r--r--documentation/static/pgpkeys/ehaupt.key91
-rw-r--r--documentation/static/pgpkeys/erj.key152
-rw-r--r--documentation/static/pgpkeys/eugen.key85
-rw-r--r--documentation/static/pgpkeys/farrokhi.key337
-rw-r--r--documentation/static/pgpkeys/flo.key191
-rw-r--r--documentation/static/pgpkeys/fuz.key80
-rw-r--r--documentation/static/pgpkeys/gahr.key80
-rw-r--r--documentation/static/pgpkeys/ganbold.key78
-rw-r--r--documentation/static/pgpkeys/garga.key95
-rw-r--r--documentation/static/pgpkeys/gbe.key37
-rw-r--r--documentation/static/pgpkeys/gjb.key144
-rw-r--r--documentation/static/pgpkeys/glebius.key67
-rw-r--r--documentation/static/pgpkeys/gnn.key138
-rw-r--r--documentation/static/pgpkeys/gordon.key420
-rw-r--r--documentation/static/pgpkeys/grahamperrin.key92
-rw-r--r--documentation/static/pgpkeys/gshapiro.key816
-rw-r--r--documentation/static/pgpkeys/jadawin.key142
-rw-r--r--documentation/static/pgpkeys/jah.key54
-rw-r--r--documentation/static/pgpkeys/jbo.key66
-rw-r--r--documentation/static/pgpkeys/jfree.key55
-rw-r--r--documentation/static/pgpkeys/jkoshy.key61
-rw-r--r--documentation/static/pgpkeys/jrm.key158
-rw-r--r--documentation/static/pgpkeys/kaktus.key280
-rw-r--r--documentation/static/pgpkeys/karels.key101
-rw-r--r--documentation/static/pgpkeys/kd.key94
-rw-r--r--documentation/static/pgpkeys/kevans.key56
-rw-r--r--documentation/static/pgpkeys/khng.key92
-rw-r--r--documentation/static/pgpkeys/krion.key138
-rw-r--r--documentation/static/pgpkeys/ler.key311
-rw-r--r--documentation/static/pgpkeys/leres.key152
-rw-r--r--documentation/static/pgpkeys/marck.key1683
-rw-r--r--documentation/static/pgpkeys/markj.key61
-rw-r--r--documentation/static/pgpkeys/martymac.key181
-rw-r--r--documentation/static/pgpkeys/mat.key4265
-rw-r--r--documentation/static/pgpkeys/matthew.key718
-rw-r--r--documentation/static/pgpkeys/maxim.key290
-rw-r--r--documentation/static/pgpkeys/meta.key106
-rw-r--r--documentation/static/pgpkeys/mfechner.key205
-rw-r--r--documentation/static/pgpkeys/michaelo.key96
-rw-r--r--documentation/static/pgpkeys/misha.key33
-rw-r--r--documentation/static/pgpkeys/mm.key122
-rw-r--r--documentation/static/pgpkeys/mp.key161
-rw-r--r--documentation/static/pgpkeys/netchild.key818
-rw-r--r--documentation/static/pgpkeys/ngie.key105
-rw-r--r--documentation/static/pgpkeys/olce.key116
-rw-r--r--documentation/static/pgpkeys/olgeni.key58
-rw-r--r--documentation/static/pgpkeys/pauamma.key56
-rw-r--r--documentation/static/pgpkeys/peterj.key181
-rw-r--r--documentation/static/pgpkeys/philip.key42
-rw-r--r--documentation/static/pgpkeys/phk.key764
-rw-r--r--documentation/static/pgpkeys/pi.key126
-rw-r--r--documentation/static/pgpkeys/portmgr-secretary.key142
-rw-r--r--documentation/static/pgpkeys/rakuco.key52
-rw-r--r--documentation/static/pgpkeys/rcm.key45
-rw-r--r--documentation/static/pgpkeys/rene.key54
-rw-r--r--documentation/static/pgpkeys/rew.key63
-rw-r--r--documentation/static/pgpkeys/riggs.key107
-rw-r--r--documentation/static/pgpkeys/rlibby.key154
-rw-r--r--documentation/static/pgpkeys/rnagy.key55
-rw-r--r--documentation/static/pgpkeys/ronald.key27
-rw-r--r--documentation/static/pgpkeys/rscheff.key31
-rw-r--r--documentation/static/pgpkeys/salvadore.key64
-rw-r--r--documentation/static/pgpkeys/se.key96
-rw-r--r--documentation/static/pgpkeys/secteam-secretary.key89
-rw-r--r--documentation/static/pgpkeys/security-officer.key217
-rw-r--r--documentation/static/pgpkeys/tcberner.key45
-rw-r--r--documentation/static/pgpkeys/thierry.key1267
-rw-r--r--documentation/static/pgpkeys/tobik.key46
-rw-r--r--documentation/static/pgpkeys/uzsolt.key55
-rw-r--r--documentation/static/pgpkeys/vd.key314
-rw-r--r--documentation/static/pgpkeys/vishwin.key69
-rw-r--r--documentation/static/pgpkeys/vvd.key27
-rw-r--r--documentation/static/pgpkeys/ygy.key78
-rw-r--r--documentation/static/pgpkeys/zirias.key32
-rw-r--r--documentation/static/pgpkeys/zlei.key87
-rw-r--r--documentation/themes/beastie/LICENSE4
-rw-r--r--documentation/themes/beastie/assets/js/copy-clipboard.js4
-rw-r--r--documentation/themes/beastie/assets/js/search.js4
-rw-r--r--documentation/themes/beastie/assets/js/theme-chooser.js24
-rw-r--r--documentation/themes/beastie/assets/styles/documentation.scss21
-rw-r--r--documentation/themes/beastie/assets/styles/footer.scss274
-rw-r--r--documentation/themes/beastie/assets/styles/global.scss299
-rw-r--r--documentation/themes/beastie/assets/styles/header.scss387
-rw-r--r--documentation/themes/beastie/assets/styles/main.scss4
-rw-r--r--documentation/themes/beastie/assets/styles/variables.scss86
-rw-r--r--documentation/themes/beastie/i18n/bn-bd.toml11
-rw-r--r--documentation/themes/beastie/i18n/da.toml12
-rw-r--r--documentation/themes/beastie/i18n/de.toml16
-rw-r--r--documentation/themes/beastie/i18n/el.toml102
-rw-r--r--documentation/themes/beastie/i18n/en.toml178
-rw-r--r--documentation/themes/beastie/i18n/es.toml14
-rw-r--r--documentation/themes/beastie/i18n/fr.toml12
-rw-r--r--documentation/themes/beastie/i18n/hu.toml16
-rw-r--r--documentation/themes/beastie/i18n/it.toml36
-rw-r--r--documentation/themes/beastie/i18n/ja.toml14
-rw-r--r--documentation/themes/beastie/i18n/ko.toml12
-rw-r--r--documentation/themes/beastie/i18n/mn.toml12
-rw-r--r--documentation/themes/beastie/i18n/nl.toml16
-rw-r--r--documentation/themes/beastie/i18n/pl.toml12
-rw-r--r--documentation/themes/beastie/i18n/pt-br.toml18
-rw-r--r--documentation/themes/beastie/i18n/ru.toml343
-rw-r--r--documentation/themes/beastie/i18n/tr.toml12
-rw-r--r--documentation/themes/beastie/i18n/zh-cn.toml12
-rw-r--r--documentation/themes/beastie/i18n/zh-tw.toml12
-rw-r--r--documentation/themes/beastie/layouts/_default/languages.html24
-rw-r--r--documentation/themes/beastie/layouts/articles/list.html13
-rw-r--r--documentation/themes/beastie/layouts/articles/single.html13
-rw-r--r--documentation/themes/beastie/layouts/articles/total-list.html2
-rw-r--r--documentation/themes/beastie/layouts/books/list.html26
-rw-r--r--documentation/themes/beastie/layouts/books/single.html26
-rw-r--r--documentation/themes/beastie/layouts/books/total-list.html2
-rw-r--r--documentation/themes/beastie/layouts/index.html118
-rw-r--r--documentation/themes/beastie/layouts/partials/global-search.html10
-rw-r--r--documentation/themes/beastie/layouts/partials/menu.html10
-rwxr-xr-xdocumentation/themes/beastie/layouts/partials/site-footer.html139
-rw-r--r--documentation/themes/beastie/layouts/partials/site-head.html6
-rwxr-xr-xdocumentation/themes/beastie/layouts/partials/site-header.html116
-rw-r--r--documentation/themes/beastie/layouts/partials/trademarks.html12
-rw-r--r--documentation/themes/beastie/layouts/robots.txt19
-rw-r--r--documentation/themes/beastie/layouts/shortcodes/list-articles-directories.html34
-rw-r--r--documentation/themes/beastie/layouts/shortcodes/list-books-directories.html33
-rwxr-xr-xdocumentation/themes/beastie/static/images/FreeBSD-colors.svg92
-rwxr-xr-xdocumentation/themes/beastie/static/images/FreeBSD-monochromatic.svg82
-rw-r--r--documentation/tools/README2
-rwxr-xr-xdocumentation/tools/asciidoctor.sh41
-rw-r--r--documentation/tools/global-pgpkeys-creator.rb4
1456 files changed, 445255 insertions, 61576 deletions
diff --git a/documentation/Makefile b/documentation/Makefile
index 457f6add0b..cd255d01a1 100644
--- a/documentation/Makefile
+++ b/documentation/Makefile
@@ -1,19 +1,20 @@
# Generate the FreeBSD documentation
#
-# Copyright (c) 2020-2022, The FreeBSD Documentation Project
-# Copyright (c) 2020-2022, Sergio Carlavilla <carlavilla@FreeBSD.org>
+# Copyright (c) 2020-2023, The FreeBSD Documentation Project
+# Copyright (c) 2020-2023, Sergio Carlavilla <carlavilla@FreeBSD.org>
#
# Targets intended for use on the command line
#
-# all (default) - generate the books TOC and compile all the documentation
+# all (default) - generate books and articles without generating the
+# PDFs or EPUBs
# clean - removes generated files
# run - serves the built documentation site for local browsing
# pdf - build PDF versions of the articles and books.
# html - build HTML versions of the articles and books for
-# offline use.
-# If variable DOC_HTML_ARCHIVE is set, all documents will be
-# archived/compressed, and only these files will be kept in the public
-# directory.
+# offline use.
+# If variable DOC_HTML_ARCHIVE is set, all documents will be
+# archived/compressed, and only these files will be kept in the
+# public directory.
# epub - build EPUB versions of the articles and books (Experimental).
#
# The run target uses hugo's built-in webserver to make the documentation site
@@ -32,13 +33,23 @@ BOOKONLY_LANGS= mn
ALL_LANGUAGES= bn-bd da de el en es fr hu id it ja ko mn nl pl pt-br ru tr zh-cn zh-tw
LOCALBASE?= /usr/local
+USE_RUBYGEMS?= NO
+GEM_PATH?=
-RUBY_CMD = ${LOCALBASE}/bin/ruby
+.if ${USE_RUBYGEMS} == "YES"
+GEMBASE?= ${GEM_PATH}
+.else
+GEMBASE?= ${LOCALBASE}
+.endif
+
+RUBY_CMD ?= ${LOCALBASE}/bin/ruby
HUGO_CMD = ${LOCALBASE}/bin/hugo
-HUGO_ARGS?= --verbose --minify
-HUGO_OFFLINE_ARGS?= --environment offline --verbose --minify
-ASCIIDOCTOR_CMD= ${LOCALBASE}/bin/asciidoctor
-ASCIIDOCTORPDF_CMD= ${LOCALBASE}/bin/asciidoctor-pdf
+HUGO_ARGS?= --minify
+HUGO_OFFLINE_ARGS?= --environment offline --minify
+ROUGIFY_CMD= ${GEMBASE}/bin/rougify
+ASCIIDOCTOR_CMD= ${GEMBASE}/bin/asciidoctor
+ASCIIDOCTORPDF_CMD= ${GEMBASE}/bin/asciidoctor-pdf
+ASCIIDOCTOREPUB3_CMD= ${GEMBASE}/bin/asciidoctor-epub3
.if defined(DOC_LANG) && !empty(DOC_LANG)
LANGUAGES= ${DOC_LANG:S/,/ /g}
@@ -54,8 +65,8 @@ RUBYLIB = ../shared/lib
.export RUBYLIB
RUN_DEPENDS= ${HUGO_CMD} \
- ${LOCALBASE}/bin/asciidoctor \
- ${LOCALBASE}/bin/rougify
+ ${ASCIIDOCTOR_CMD} \
+ ${ROUGIFY_CMD}
.ifndef HOSTNAME
. ifdef BIND
@@ -111,13 +122,13 @@ requirements:
.endfor
requirements-pdf:
-.if !exists(${LOCALBASE}/bin/asciidoctor-pdf)
- @(echo ${LOCALBASE}/bin/asciidoctor-pdf not found, please run 'pkg install rubygem-asciidoctor-pdf'; exit 1)
+.if !exists(${ASCIIDOCTORPDF_CMD})
+ @(echo ${ASCIIDOCTOR_CMD} not found, please install rubygem-asciidoctor-pdf; exit 1)
.endif
requirements-epub:
-.if !exists(${LOCALBASE}/bin/asciidoctor-epub3)
- @(echo ${LOCALBASE}/bin/asciidoctor-epub3 not found, please run 'pkg install rubygem-asciidoctor-epub3'; exit 1)
+.if !exists(${ASCIIDOCTOREPUB3_CMD})
+ @(echo ${ASCIIDOCTOREPUB3_CMD} not found, please install rubygem-asciidoctor-epub3; exit 1)
.endif
starting-message: .PHONY
diff --git a/documentation/config/_default/config.toml b/documentation/config/_default/hugo.toml
index 087c0f5576..a7548e54b9 100644
--- a/documentation/config/_default/config.toml
+++ b/documentation/config/_default/hugo.toml
@@ -7,17 +7,18 @@ defaultContentLanguage = "en"
defaultContentLanguageInSubdir = true
disablePathToLower = true
theme = "beastie"
-disableKinds = [ "taxonomy", "taxonomyTerm" ]
+disableKinds = [ "taxonomy" ]
authors = [ "carlavilla@FreeBSD.org" ]
ignoreFiles = [ "chapter.adoc$", "contrib-386bsd.adoc$", "contrib-additional.adoc$", "contrib-committers.adoc$", "contrib-corealumni.adoc$", "contrib-develalumni.adoc$", "contrib-develinmemoriam.adoc$", "contrib-portmgralumni.adoc$", "\\.po$" ]
enableRobotsTXT = true
enableGitInfo = true
+timeout = "180s"
[params]
websiteURL = "https://www.FreeBSD.org"
description = "FreeBSD Documentation Portal"
isOnline = true
- editBaseUrl = "https://github.com/freebsd/freebsd-doc/edit/main/documentation/content/"
+ editBaseUrl = "https://github.com/freebsd/freebsd-doc/blob/main/documentation/content/"
downloadBaseUrl = "https://download.freebsd.org/doc/"
[security]
@@ -37,10 +38,9 @@ enableGitInfo = true
env-beastie = true
isOnline = true
skip-front-matter = true
+ sectanchors = "after"
[outputs]
home = [ "HTML" ]
page = [ "HTML" ]
-list = [ "HTML" ]
-single = [ "HTML" ]
section = [ "HTML" ]
diff --git a/documentation/config/offline/config.toml b/documentation/config/offline/config.toml
index 653ef5b279..b13653b063 100644
--- a/documentation/config/offline/config.toml
+++ b/documentation/config/offline/config.toml
@@ -12,6 +12,7 @@ authors = [ "carlavilla@FreeBSD.org" ]
ignoreFiles = [ "chapter.adoc$", "contrib-386bsd.adoc$", "contrib-additional.adoc$", "contrib-committers.adoc$", "contrib-corealumni.adoc$", "contrib-develalumni.adoc$", "contrib-develinmemoriam.adoc$", "contrib-portmgralumni.adoc$", "books.adoc$", "\\.po$" ]
enableRobotsTXT = true
relativeURLs = true
+timeout = "180s"
[params]
websiteURL = "https://www.FreeBSD.org"
@@ -39,6 +40,4 @@ relativeURLs = true
[outputs]
home = [ "HTML" ]
page = [ "HTML" ]
-list = [ "HTML" ]
-single = [ "HTML" ]
section = [ "HTML" ]
diff --git a/documentation/content/de/books/developers-handbook/bibliography/_index.adoc b/documentation/content/de/books/developers-handbook/bibliography/_index.adoc
index 4e14268754..a5950c8566 100644
--- a/documentation/content/de/books/developers-handbook/bibliography/_index.adoc
+++ b/documentation/content/de/books/developers-handbook/bibliography/_index.adoc
@@ -3,7 +3,7 @@ title: Literaturverzeichnis
prev: books/developers-handbook/partv
showBookMenu: true
weight: 17
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/bibliography/"
---
[bibliography]
diff --git a/documentation/content/de/books/developers-handbook/book.adoc b/documentation/content/de/books/developers-handbook/book.adoc
index 3ecd03a10f..608d906dad 100644
--- a/documentation/content/de/books/developers-handbook/book.adoc
+++ b/documentation/content/de/books/developers-handbook/book.adoc
@@ -6,7 +6,6 @@ copyright: 1995-2020 The FreeBSD Documentation Project
trademarks: ["freebsd", "apple", "ibm", "ieee", "intel", "linux", "microsoft", "opengroup", "sun", "general"]
add_split_page_link: true
showBookMenu: false
-path: "/books/developers-handbook/"
---
= FreeBSD Developers' Handbook
diff --git a/documentation/content/de/books/developers-handbook/introduction/_index.adoc b/documentation/content/de/books/developers-handbook/introduction/_index.adoc
index 2f8c22a3a1..57c38e63c3 100644
--- a/documentation/content/de/books/developers-handbook/introduction/_index.adoc
+++ b/documentation/content/de/books/developers-handbook/introduction/_index.adoc
@@ -4,7 +4,7 @@ prev: books/developers-handbook/parti
next: books/developers-handbook/tools
showBookMenu: true
weight: 2
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/introduction/"
---
[[introduction]]
diff --git a/documentation/content/de/books/developers-handbook/ipv6/_index.adoc b/documentation/content/de/books/developers-handbook/ipv6/_index.adoc
index 9658203b7c..8caafef837 100644
--- a/documentation/content/de/books/developers-handbook/ipv6/_index.adoc
+++ b/documentation/content/de/books/developers-handbook/ipv6/_index.adoc
@@ -4,7 +4,7 @@ prev: books/developers-handbook/sockets
next: books/developers-handbook/partiii
showBookMenu: true
weight: 10
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/ipv6/"
---
[[ipv6]]
diff --git a/documentation/content/de/books/developers-handbook/kernelbuild/_index.adoc b/documentation/content/de/books/developers-handbook/kernelbuild/_index.adoc
index 6f529e71ee..e7375100dd 100644
--- a/documentation/content/de/books/developers-handbook/kernelbuild/_index.adoc
+++ b/documentation/content/de/books/developers-handbook/kernelbuild/_index.adoc
@@ -4,7 +4,7 @@ prev: books/developers-handbook/partiii
next: books/developers-handbook/kerneldebug
showBookMenu: true
weight: 12
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/kernelbuild/"
---
[[kernelbuild]]
diff --git a/documentation/content/de/books/developers-handbook/kerneldebug/_index.adoc b/documentation/content/de/books/developers-handbook/kerneldebug/_index.adoc
index bdf2f52cbd..f4238f789f 100644
--- a/documentation/content/de/books/developers-handbook/kerneldebug/_index.adoc
+++ b/documentation/content/de/books/developers-handbook/kerneldebug/_index.adoc
@@ -8,7 +8,7 @@ prev: books/developers-handbook/kernelbuild
next: books/developers-handbook/partiv
showBookMenu: true
weight: 13
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/kerneldebug/"
---
[[kerneldebug]]
diff --git a/documentation/content/de/books/developers-handbook/l10n/_index.adoc b/documentation/content/de/books/developers-handbook/l10n/_index.adoc
index 6f6990dcbc..df889b26e0 100644
--- a/documentation/content/de/books/developers-handbook/l10n/_index.adoc
+++ b/documentation/content/de/books/developers-handbook/l10n/_index.adoc
@@ -4,7 +4,7 @@ prev: books/developers-handbook/secure
next: books/developers-handbook/policies
showBookMenu: true
weight: 5
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/l10n/"
---
[[l10n]]
diff --git a/documentation/content/de/books/developers-handbook/parti.adoc b/documentation/content/de/books/developers-handbook/parti.adoc
index f4bd804963..7890953b65 100644
--- a/documentation/content/de/books/developers-handbook/parti.adoc
+++ b/documentation/content/de/books/developers-handbook/parti.adoc
@@ -4,7 +4,7 @@ prev: books/developers-handbook
next: books/developers-handbook/introduction
showBookMenu: true
weight: 1
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/parti/"
---
[[basics]]
diff --git a/documentation/content/de/books/developers-handbook/partii.adoc b/documentation/content/de/books/developers-handbook/partii.adoc
index 42651a1a43..40958c9832 100644
--- a/documentation/content/de/books/developers-handbook/partii.adoc
+++ b/documentation/content/de/books/developers-handbook/partii.adoc
@@ -4,7 +4,7 @@ prev: books/developers-handbook/testing
next: books/developers-handbook/sockets
showBookMenu: true
weight: 8
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/partii/"
---
[[ipc]]
diff --git a/documentation/content/de/books/developers-handbook/partiii.adoc b/documentation/content/de/books/developers-handbook/partiii.adoc
index 6eb00591d0..6a4c7bb49b 100644
--- a/documentation/content/de/books/developers-handbook/partiii.adoc
+++ b/documentation/content/de/books/developers-handbook/partiii.adoc
@@ -4,7 +4,7 @@ prev: books/developers-handbook/ipv6
next: books/developers-handbook/kernelbuild
showBookMenu: true
weight: 11
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/partiii/"
---
[[kernel]]
diff --git a/documentation/content/de/books/developers-handbook/partiv.adoc b/documentation/content/de/books/developers-handbook/partiv.adoc
index 1f87dce615..7762c9b0ba 100644
--- a/documentation/content/de/books/developers-handbook/partiv.adoc
+++ b/documentation/content/de/books/developers-handbook/partiv.adoc
@@ -4,7 +4,7 @@ prev: books/developers-handbook/kerneldebug
next: books/developers-handbook/x86
showBookMenu: true
weight: 14
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/partiv/"
---
[[architectures]]
diff --git a/documentation/content/de/books/developers-handbook/partv.adoc b/documentation/content/de/books/developers-handbook/partv.adoc
index a76ea02541..ddbdb2e053 100644
--- a/documentation/content/de/books/developers-handbook/partv.adoc
+++ b/documentation/content/de/books/developers-handbook/partv.adoc
@@ -4,7 +4,7 @@ prev: books/developers-handbook/x86
next: books/developers-handbook/bibliography
showBookMenu: true
weight: 16
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/partv/"
---
[[appendices]]
diff --git a/documentation/content/de/books/developers-handbook/policies/_index.adoc b/documentation/content/de/books/developers-handbook/policies/_index.adoc
index f78e4fd5f5..994271b18b 100644
--- a/documentation/content/de/books/developers-handbook/policies/_index.adoc
+++ b/documentation/content/de/books/developers-handbook/policies/_index.adoc
@@ -7,7 +7,7 @@ prev: books/developers-handbook/l10n
next: books/developers-handbook/testing
showBookMenu: true
weight: 6
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/policies/"
---
[[policies]]
diff --git a/documentation/content/de/books/developers-handbook/secure/_index.adoc b/documentation/content/de/books/developers-handbook/secure/_index.adoc
index f1331bbf85..38945dcecf 100644
--- a/documentation/content/de/books/developers-handbook/secure/_index.adoc
+++ b/documentation/content/de/books/developers-handbook/secure/_index.adoc
@@ -6,7 +6,7 @@ prev: books/developers-handbook/tools
next: books/developers-handbook/l10n
showBookMenu: true
weight: 4
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/secure/"
---
[[secure]]
diff --git a/documentation/content/de/books/developers-handbook/sockets/_index.adoc b/documentation/content/de/books/developers-handbook/sockets/_index.adoc
index cd2eb56f29..caa6651686 100644
--- a/documentation/content/de/books/developers-handbook/sockets/_index.adoc
+++ b/documentation/content/de/books/developers-handbook/sockets/_index.adoc
@@ -6,7 +6,7 @@ prev: books/developers-handbook/partii
next: books/developers-handbook/ipv6
showBookMenu: true
weight: 9
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/sockets/"
---
[[sockets]]
diff --git a/documentation/content/de/books/developers-handbook/testing/_index.adoc b/documentation/content/de/books/developers-handbook/testing/_index.adoc
index d0a92f5ad5..b3e6f4efb2 100644
--- a/documentation/content/de/books/developers-handbook/testing/_index.adoc
+++ b/documentation/content/de/books/developers-handbook/testing/_index.adoc
@@ -4,7 +4,7 @@ prev: books/developers-handbook/policies
next: books/developers-handbook/partii
showBookMenu: true
weight: 7
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/testing/"
---
[[testing]]
diff --git a/documentation/content/de/books/developers-handbook/tools/_index.adoc b/documentation/content/de/books/developers-handbook/tools/_index.adoc
index d38808099a..f6b6f1c2bc 100644
--- a/documentation/content/de/books/developers-handbook/tools/_index.adoc
+++ b/documentation/content/de/books/developers-handbook/tools/_index.adoc
@@ -7,7 +7,7 @@ prev: books/developers-handbook/introduction
next: books/developers-handbook/secure
showBookMenu: true
weight: 3
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/tools/"
---
[[tools]]
@@ -129,7 +129,7 @@ Ruby ist in der Ports-Sammlung unter package:lang/ruby18[] verfügbar.
Tcl und Tk::
Tcl ist eine einbettbare, interpretierte Programmiersprache, welche aufgrund ihrer Portierbarkeit auf viele unterschiedliche Plattformen eine weite Verbreitung erfahren hat. Sie kann sowohl für die schnelle Entwicklung kleinerer Prototypen, als auch (in Verbindung mit Tk, einem GUI Toolkit) vollwertiger, ausgereifter Programme verwendet werden.
+
-Es sind mehrere Versionen von Tcl als Ports für FreeBSD verfügbar. Die aktuellste Version, Tcl 8.5, ist unter package:lang/tcl85[] verfügbar.
+Es sind mehrere Versionen von Tcl als Ports für FreeBSD verfügbar. Die aktuellste Version, Tcl 8.7, ist unter package:lang/tcl87[] verfügbar.
=== Compiler
diff --git a/documentation/content/de/books/developers-handbook/x86/_index.adoc b/documentation/content/de/books/developers-handbook/x86/_index.adoc
index 8d54850081..fe9897a006 100644
--- a/documentation/content/de/books/developers-handbook/x86/_index.adoc
+++ b/documentation/content/de/books/developers-handbook/x86/_index.adoc
@@ -4,7 +4,7 @@ prev: books/developers-handbook/partiv
next: books/developers-handbook/partv
showBookMenu: true
weight: 15
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/x86/"
---
[[x86]]
diff --git a/documentation/content/de/books/handbook/advanced-networking/_index.adoc b/documentation/content/de/books/handbook/advanced-networking/_index.adoc
index c9d530b68b..c881b3c683 100644
--- a/documentation/content/de/books/handbook/advanced-networking/_index.adoc
+++ b/documentation/content/de/books/handbook/advanced-networking/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/firewalls
next: books/handbook/partv
showBookMenu: true
weight: 36
-path: "/books/handbook/"
+path: "/books/handbook/advanced-networking/"
---
[[advanced-networking]]
diff --git a/documentation/content/de/books/handbook/audit/_index.adoc b/documentation/content/de/books/handbook/audit/_index.adoc
index 4dd21e0423..2973bfbc11 100644
--- a/documentation/content/de/books/handbook/audit/_index.adoc
+++ b/documentation/content/de/books/handbook/audit/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mac
next: books/handbook/disks
showBookMenu: true
weight: 20
-path: "/books/handbook/"
+path: "/books/handbook/audit/"
---
[[audit]]
diff --git a/documentation/content/de/books/handbook/basics/_index.adoc b/documentation/content/de/books/handbook/basics/_index.adoc
index 6703a981ed..6afebb7af2 100644
--- a/documentation/content/de/books/handbook/basics/_index.adoc
+++ b/documentation/content/de/books/handbook/basics/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/bsdinstall
next: books/handbook/ports
showBookMenu: true
weight: 5
-path: "/books/handbook/"
+path: "/books/handbook/basics/"
---
[[basics]]
diff --git a/documentation/content/de/books/handbook/bibliography/_index.adoc b/documentation/content/de/books/handbook/bibliography/_index.adoc
index 75a5b30c93..dd0b035519 100644
--- a/documentation/content/de/books/handbook/bibliography/_index.adoc
+++ b/documentation/content/de/books/handbook/bibliography/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mirrors
next: books/handbook/eresources
showBookMenu: true
weight: 39
-path: "/books/handbook/"
+path: "/books/handbook/bibliography/"
---
[appendix]
diff --git a/documentation/content/de/books/handbook/boot/_index.adoc b/documentation/content/de/books/handbook/boot/_index.adoc
index db4b929f85..b55ee55278 100644
--- a/documentation/content/de/books/handbook/boot/_index.adoc
+++ b/documentation/content/de/books/handbook/boot/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/config
next: books/handbook/security
showBookMenu: true
weight: 16
-path: "/books/handbook/"
+path: "/books/handbook/boot/"
---
[[boot]]
diff --git a/documentation/content/de/books/handbook/bsdinstall/_index.adoc b/documentation/content/de/books/handbook/bsdinstall/_index.adoc
index b127459cec..bd17d48aed 100644
--- a/documentation/content/de/books/handbook/bsdinstall/_index.adoc
+++ b/documentation/content/de/books/handbook/bsdinstall/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/introduction
next: books/handbook/basics
showBookMenu: true
weight: 4
-path: "/books/handbook/"
+path: "/books/handbook/bsdinstall/"
---
[[bsdinstall]]
diff --git a/documentation/content/de/books/handbook/config/_index.adoc b/documentation/content/de/books/handbook/config/_index.adoc
index c3ca5b53f3..1cbf27cba1 100644
--- a/documentation/content/de/books/handbook/config/_index.adoc
+++ b/documentation/content/de/books/handbook/config/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partiii
next: books/handbook/boot
showBookMenu: true
weight: 15
-path: "/books/handbook/"
+path: "/books/handbook/config/"
---
[[config-tuning]]
@@ -1523,5 +1523,5 @@ Obwohl die meisten Entwickler die Mailingliste {freebsd-current} lesen, sollten
Weitere Informationen über ACPI finden Sie hier:
* Die FreeBSD ACPI Mailingliste (https://lists.freebsd.org/pipermail/freebsd-acpi/[https://lists.freebsd.org/pipermail/freebsd-acpi/])
-* Die ACPI 2.0 Spezifikation (http://acpi.info/spec.htm[http://acpi.info/spec.htm])
+* Die https://uefi.org/specifications#ACPI[ACPI Spezifikation]
* man:acpi[4], man:acpi_thermal[4], man:acpidump[8], man:iasl[8] und man:acpidb[8]
diff --git a/documentation/content/de/books/handbook/cutting-edge/_index.adoc b/documentation/content/de/books/handbook/cutting-edge/_index.adoc
index 381b9fda49..8a46e9dbe6 100644
--- a/documentation/content/de/books/handbook/cutting-edge/_index.adoc
+++ b/documentation/content/de/books/handbook/cutting-edge/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/l10n
next: books/handbook/dtrace
showBookMenu: true
weight: 27
-path: "/books/handbook/"
+path: "/books/handbook/cutting-edge/"
---
[[updating-upgrading]]
diff --git a/documentation/content/de/books/handbook/desktop/_index.adoc b/documentation/content/de/books/handbook/desktop/_index.adoc
index a012d34148..1f09638e10 100644
--- a/documentation/content/de/books/handbook/desktop/_index.adoc
+++ b/documentation/content/de/books/handbook/desktop/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partii
next: books/handbook/multimedia
showBookMenu: true
weight: 9
-path: "/books/handbook/"
+path: "/books/handbook/desktop/"
---
[[desktop]]
diff --git a/documentation/content/de/books/handbook/disks/_index.adoc b/documentation/content/de/books/handbook/disks/_index.adoc
index 6d7379f2cf..6b338f1708 100644
--- a/documentation/content/de/books/handbook/disks/_index.adoc
+++ b/documentation/content/de/books/handbook/disks/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/audit
next: books/handbook/geom
showBookMenu: true
weight: 21
-path: "/books/handbook/"
+path: "/books/handbook/disks/"
---
[[disks]]
diff --git a/documentation/content/de/books/handbook/dtrace/_index.adoc b/documentation/content/de/books/handbook/dtrace/_index.adoc
index aa934bf89b..4b3c0c7237 100644
--- a/documentation/content/de/books/handbook/dtrace/_index.adoc
+++ b/documentation/content/de/books/handbook/dtrace/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/cutting-edge
next: books/handbook/usb-device-mode
showBookMenu: true
weight: 28
-path: "/books/handbook/"
+path: "/books/handbook/dtrace/"
---
[[dtrace]]
diff --git a/documentation/content/de/books/handbook/eresources/_index.adoc b/documentation/content/de/books/handbook/eresources/_index.adoc
index 4e1059deef..1fdc0cb4e8 100644
--- a/documentation/content/de/books/handbook/eresources/_index.adoc
+++ b/documentation/content/de/books/handbook/eresources/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/bibliography
next: books/handbook/pgpkeys
showBookMenu: true
weight: 40
-path: "/books/handbook/"
+path: "/books/handbook/eresources/"
---
[appendix]
diff --git a/documentation/content/de/books/handbook/filesystems/_index.adoc b/documentation/content/de/books/handbook/filesystems/_index.adoc
index 04abe76876..748189da70 100644
--- a/documentation/content/de/books/handbook/filesystems/_index.adoc
+++ b/documentation/content/de/books/handbook/filesystems/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/zfs
next: books/handbook/virtualization
showBookMenu: true
weight: 24
-path: "/books/handbook/"
+path: "/books/handbook/filesystems/"
---
[[filesystems]]
diff --git a/documentation/content/de/books/handbook/firewalls/_index.adoc b/documentation/content/de/books/handbook/firewalls/_index.adoc
index 012b56502d..0bf14c334f 100644
--- a/documentation/content/de/books/handbook/firewalls/_index.adoc
+++ b/documentation/content/de/books/handbook/firewalls/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/network-servers
next: books/handbook/advanced-networking
showBookMenu: true
weight: 35
-path: "/books/handbook/"
+path: "/books/handbook/firewalls/"
---
[[firewalls]]
diff --git a/documentation/content/de/books/handbook/geom/_index.adoc b/documentation/content/de/books/handbook/geom/_index.adoc
index 6baff19700..5de53f8af1 100644
--- a/documentation/content/de/books/handbook/geom/_index.adoc
+++ b/documentation/content/de/books/handbook/geom/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/disks
next: books/handbook/zfs
showBookMenu: true
weight: 22
-path: "/books/handbook/"
+path: "/books/handbook/geom/"
---
[[geom]]
diff --git a/documentation/content/de/books/handbook/introduction/_index.adoc b/documentation/content/de/books/handbook/introduction/_index.adoc
index 621615c550..c8dea55f27 100644
--- a/documentation/content/de/books/handbook/introduction/_index.adoc
+++ b/documentation/content/de/books/handbook/introduction/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/parti
next: books/handbook/bsdinstall
showBookMenu: true
weight: 3
-path: "/books/handbook/"
+path: "/books/handbook/introduction/"
---
[[introduction]]
diff --git a/documentation/content/de/books/handbook/jails/_index.adoc b/documentation/content/de/books/handbook/jails/_index.adoc
index 682b4cb139..ea0f3248f4 100644
--- a/documentation/content/de/books/handbook/jails/_index.adoc
+++ b/documentation/content/de/books/handbook/jails/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/security
next: books/handbook/mac
showBookMenu: true
weight: 18
-path: "/books/handbook/"
+path: "/books/handbook/jails/"
---
[[jails]]
diff --git a/documentation/content/de/books/handbook/kernelconfig/_index.adoc b/documentation/content/de/books/handbook/kernelconfig/_index.adoc
index d959d0d427..135c7393b4 100644
--- a/documentation/content/de/books/handbook/kernelconfig/_index.adoc
+++ b/documentation/content/de/books/handbook/kernelconfig/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/multimedia
next: books/handbook/printing
showBookMenu: true
weight: 11
-path: "/books/handbook/"
+path: "/books/handbook/kernelconfig/"
---
[[kernelconfig]]
diff --git a/documentation/content/de/books/handbook/l10n/_index.adoc b/documentation/content/de/books/handbook/l10n/_index.adoc
index f8d6dcc44a..1878283d60 100644
--- a/documentation/content/de/books/handbook/l10n/_index.adoc
+++ b/documentation/content/de/books/handbook/l10n/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/virtualization
next: books/handbook/cutting-edge
showBookMenu: true
weight: 26
-path: "/books/handbook/"
+path: "/books/handbook/l10n/"
---
[[l10n]]
@@ -361,7 +361,7 @@ mousechar_start=3
=== Einrichtung von Xorg
-crossref:x11[x11,Das X-Window-System] beschreibt die Installation und Konfiguration von Xorg. Wenn Xorg für die Lokalisierung eingerichtet wird, stehen zusätzliche Zeichensätze und Eingabemethoden in der FreeBSD Ports-Sammlung zur Verfügung. Anwendungsspezifische I18N-Einstellungen, wie etwa Zeichensätze und Menüs, können in [.filename]#~/.Xresouces# angepasst werden, damit in den graphischen Anwendungen des Benutzers die gewählte Sprache angezeigt wird.
+crossref:x11[x11,Das X-Window-System] beschreibt die Installation und Konfiguration von Xorg. Wenn Xorg für die Lokalisierung eingerichtet wird, stehen zusätzliche Zeichensätze und Eingabemethoden in der FreeBSD Ports-Sammlung zur Verfügung. Anwendungsspezifische I18N-Einstellungen, wie etwa Zeichensätze und Menüs, können in [.filename]#~/.Xresources# angepasst werden, damit in den graphischen Anwendungen des Benutzers die gewählte Sprache angezeigt wird.
Das X Input Method (XIM) Protokoll ist ein Xorg-Standard für die Eingabe von nicht-englischen Zeichen. <<locale-xim>> fasst die aus der FreeBSD Ports-Sammlung verfügbaren Anwendungen für die Eingabemethoden zusammen. Zusätzliche Fcitx- und Uim-Anwendungen sind ebenfalls verfügbar.
[[locale-xim]]
diff --git a/documentation/content/de/books/handbook/linuxemu/_index.adoc b/documentation/content/de/books/handbook/linuxemu/_index.adoc
index b46b50d765..d68cad39f1 100644
--- a/documentation/content/de/books/handbook/linuxemu/_index.adoc
+++ b/documentation/content/de/books/handbook/linuxemu/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/printing
next: books/handbook/partiii
showBookMenu: true
weight: 13
-path: "/books/handbook/"
+path: "/books/handbook/linuxemu/"
---
[[linuxemu]]
diff --git a/documentation/content/de/books/handbook/mac/_index.adoc b/documentation/content/de/books/handbook/mac/_index.adoc
index 21981b8af9..1d9641f04f 100644
--- a/documentation/content/de/books/handbook/mac/_index.adoc
+++ b/documentation/content/de/books/handbook/mac/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/jails
next: books/handbook/audit
showBookMenu: true
weight: 19
-path: "/books/handbook/"
+path: "/books/handbook/mac/"
---
[[mac]]
diff --git a/documentation/content/de/books/handbook/mail/_index.adoc b/documentation/content/de/books/handbook/mail/_index.adoc
index fcaea84f03..60fb538d8b 100644
--- a/documentation/content/de/books/handbook/mail/_index.adoc
+++ b/documentation/content/de/books/handbook/mail/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/ppp-and-slip
next: books/handbook/network-servers
showBookMenu: true
weight: 33
-path: "/books/handbook/"
+path: "/books/handbook/mail/"
---
[[mail]]
@@ -360,7 +360,7 @@ domain foo.bar.edu
in [.filename]#/etc/resolv.conf# ein. Stellen Sie jedoch sicher, dass die Suchordnung nicht die Begrenzung von "lokaler und öffentlicher Administration", wie RFC 1535 sie nennt, überschreitet.
-=== Wie kann ich einen E-Mail-Server auf einem Anwahl-PPPPPP Rechner betreiben?
+=== Wie kann ich einen E-Mail-Server auf einem Anwahl-PPP Rechner betreiben?
Sie wollen sich mit einem FreeBSD E-Mail Gateway im LAN verbinden. Die PPP-Verbindung ist keine Standleitung.
diff --git a/documentation/content/de/books/handbook/mirrors/_index.adoc b/documentation/content/de/books/handbook/mirrors/_index.adoc
index e8a0dad384..3beb294902 100644
--- a/documentation/content/de/books/handbook/mirrors/_index.adoc
+++ b/documentation/content/de/books/handbook/mirrors/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partv
next: books/handbook/bibliography
showBookMenu: true
weight: 38
-path: "/books/handbook/"
+path: "/books/handbook/mirrors/"
---
[appendix]
diff --git a/documentation/content/de/books/handbook/multimedia/_index.adoc b/documentation/content/de/books/handbook/multimedia/_index.adoc
index 61a487b329..b8a98c665c 100644
--- a/documentation/content/de/books/handbook/multimedia/_index.adoc
+++ b/documentation/content/de/books/handbook/multimedia/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/desktop
next: books/handbook/kernelconfig
showBookMenu: true
weight: 10
-path: "/books/handbook/"
+path: "/books/handbook/multimedia/"
---
[[multimedia]]
diff --git a/documentation/content/de/books/handbook/network-servers/_index.adoc b/documentation/content/de/books/handbook/network-servers/_index.adoc
index 3dfbb1f2bb..4a67d45139 100644
--- a/documentation/content/de/books/handbook/network-servers/_index.adoc
+++ b/documentation/content/de/books/handbook/network-servers/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mail
next: books/handbook/firewalls
showBookMenu: true
weight: 34
-path: "/books/handbook/"
+path: "/books/handbook/network-servers/"
---
[[network-servers]]
diff --git a/documentation/content/de/books/handbook/parti.adoc b/documentation/content/de/books/handbook/parti.adoc
index ca29de93ad..2b9cd46a30 100644
--- a/documentation/content/de/books/handbook/parti.adoc
+++ b/documentation/content/de/books/handbook/parti.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/preface
next: books/handbook/introduction
showBookMenu: true
weight: 2
-path: "/books/handbook/"
+path: "/books/handbook/parti/"
---
[[getting-started]]
diff --git a/documentation/content/de/books/handbook/partii.adoc b/documentation/content/de/books/handbook/partii.adoc
index dd9943dba5..e69731fa95 100644
--- a/documentation/content/de/books/handbook/partii.adoc
+++ b/documentation/content/de/books/handbook/partii.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/x11
next: books/handbook/desktop
showBookMenu: true
weight: 8
-path: "/books/handbook/"
+path: "/books/handbook/partii/"
---
[[common-tasks]]
diff --git a/documentation/content/de/books/handbook/partiii.adoc b/documentation/content/de/books/handbook/partiii.adoc
index 215f5ee432..0f526332be 100644
--- a/documentation/content/de/books/handbook/partiii.adoc
+++ b/documentation/content/de/books/handbook/partiii.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/linuxemu
next: books/handbook/config
showBookMenu: true
weight: 14
-path: "/books/handbook/"
+path: "/books/handbook/partiii/"
---
[[system-administration]]
diff --git a/documentation/content/de/books/handbook/partiv.adoc b/documentation/content/de/books/handbook/partiv.adoc
index cca89b93fe..d2ce88a203 100644
--- a/documentation/content/de/books/handbook/partiv.adoc
+++ b/documentation/content/de/books/handbook/partiv.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/usb-device-mode
next: books/handbook/serialcomms
showBookMenu: true
weight: 30
-path: "/books/handbook/"
+path: "/books/handbook/partiv/"
---
[[network-communication]]
diff --git a/documentation/content/de/books/handbook/partv.adoc b/documentation/content/de/books/handbook/partv.adoc
index 92cbfbd97f..c7bb4735dc 100644
--- a/documentation/content/de/books/handbook/partv.adoc
+++ b/documentation/content/de/books/handbook/partv.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/advanced-networking
next: books/handbook/mirrors
showBookMenu: true
weight: 37
-path: "/books/handbook/"
+path: "/books/handbook/partv/"
---
[[appendices]]
diff --git a/documentation/content/de/books/handbook/pgpkeys/_index.adoc b/documentation/content/de/books/handbook/pgpkeys/_index.adoc
index 92bc2cf2d1..7136696141 100644
--- a/documentation/content/de/books/handbook/pgpkeys/_index.adoc
+++ b/documentation/content/de/books/handbook/pgpkeys/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/eresources
next: books/handbook/freebsd-glossary
showBookMenu: true
weight: 41
-path: "/books/handbook/"
+path: "/books/handbook/pgpkeys/"
---
[appendix]
@@ -59,9 +59,6 @@ Verwenden Sie die nachstehenden Schlüssel, wenn Sie eine Signatur überprüfen
=== {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/de/books/handbook/ports/_index.adoc b/documentation/content/de/books/handbook/ports/_index.adoc
index 49152f75e4..1dbec41b1f 100644
--- a/documentation/content/de/books/handbook/ports/_index.adoc
+++ b/documentation/content/de/books/handbook/ports/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/basics
next: books/handbook/x11
showBookMenu: true
weight: 6
-path: "/books/handbook/"
+path: "/books/handbook/ports/"
---
[[ports]]
diff --git a/documentation/content/de/books/handbook/ppp-and-slip/_index.adoc b/documentation/content/de/books/handbook/ppp-and-slip/_index.adoc
index 025b2a7e4b..613c077ee9 100644
--- a/documentation/content/de/books/handbook/ppp-and-slip/_index.adoc
+++ b/documentation/content/de/books/handbook/ppp-and-slip/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/serialcomms
next: books/handbook/mail
showBookMenu: true
weight: 32
-path: "/books/handbook/"
+path: "/books/handbook/ppp-and-slip/"
---
[[ppp-and-slip]]
diff --git a/documentation/content/de/books/handbook/preface/_index.adoc b/documentation/content/de/books/handbook/preface/_index.adoc
index 3f80c13691..ca0d9b5eb3 100644
--- a/documentation/content/de/books/handbook/preface/_index.adoc
+++ b/documentation/content/de/books/handbook/preface/_index.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/
next: books/handbook/parti
showBookMenu: true
weight: 1
-path: "/books/handbook/"
+path: "/books/handbook/preface/"
---
[preface]
diff --git a/documentation/content/de/books/handbook/printing/_index.adoc b/documentation/content/de/books/handbook/printing/_index.adoc
index a7ad9746af..d660309e13 100644
--- a/documentation/content/de/books/handbook/printing/_index.adoc
+++ b/documentation/content/de/books/handbook/printing/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/kernelconfig
next: books/handbook/linuxemu
showBookMenu: true
weight: 12
-path: "/books/handbook/"
+path: "/books/handbook/printing/"
---
[[printing]]
@@ -499,11 +499,6 @@ Bearbeiten Sie [.filename]#/etc/printcap# um den neuen Filter zu verwenden:
Um den Filter zu testen, drucken Sie PostScript(R)- und einfache Textdateien.
-[[printing-lpd-filters-othersmart]]
-==== Weitere intelligente Filter
-
-Einen Filter zu schreiben, der verschiedene Arten von Eingaben erkennen und formatieren kann, ist eine große Herausforderung. package:print/apsfilter[] aus der Ports-Sammlung ist auch ein intelligenter Filter, der Dutzende Dateitypen automatisch in eine für den Drucker verständliche PDL umwandeln kann. Weitere Details finden Sie auf http://www.apsfilter.org[].
-
[[printing-lpd-queues]]
=== Mehrere Warteschlangen
diff --git a/documentation/content/de/books/handbook/security/_index.adoc b/documentation/content/de/books/handbook/security/_index.adoc
index 0736fcee03..569553f057 100644
--- a/documentation/content/de/books/handbook/security/_index.adoc
+++ b/documentation/content/de/books/handbook/security/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/boot
next: books/handbook/jails
showBookMenu: true
weight: 17
-path: "/books/handbook/"
+path: "/books/handbook/security/"
---
[[security]]
diff --git a/documentation/content/de/books/handbook/serialcomms/_index.adoc b/documentation/content/de/books/handbook/serialcomms/_index.adoc
index d78e7df5f0..a5b5a77818 100644
--- a/documentation/content/de/books/handbook/serialcomms/_index.adoc
+++ b/documentation/content/de/books/handbook/serialcomms/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partiv
next: books/handbook/ppp-and-slip
showBookMenu: true
weight: 31
-path: "/books/handbook/"
+path: "/books/handbook/serialcomms/"
---
[[serialcomms]]
diff --git a/documentation/content/de/books/handbook/usb-device-mode/_index.adoc b/documentation/content/de/books/handbook/usb-device-mode/_index.adoc
index a3c45975ef..72d8b7bc3b 100644
--- a/documentation/content/de/books/handbook/usb-device-mode/_index.adoc
+++ b/documentation/content/de/books/handbook/usb-device-mode/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/dtrace
next: books/handbook/partiv
showBookMenu: true
weight: 29
-path: "/books/handbook/"
+path: "/books/handbook/usb-device-mode/"
---
[[usb-device-mode]]
diff --git a/documentation/content/de/books/handbook/virtualization/_index.adoc b/documentation/content/de/books/handbook/virtualization/_index.adoc
index 27fd53b7f5..fa9c0d5b86 100644
--- a/documentation/content/de/books/handbook/virtualization/_index.adoc
+++ b/documentation/content/de/books/handbook/virtualization/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/filesystems
next: books/handbook/l10n
showBookMenu: true
weight: 25
-path: "/books/handbook/"
+path: "/books/handbook/virtualization/"
---
[[virtualization]]
diff --git a/documentation/content/de/books/handbook/x11/_index.adoc b/documentation/content/de/books/handbook/x11/_index.adoc
index b5a838a2da..bc9141b0c2 100644
--- a/documentation/content/de/books/handbook/x11/_index.adoc
+++ b/documentation/content/de/books/handbook/x11/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/ports
next: books/handbook/partii
showBookMenu: true
weight: 7
-path: "/books/handbook/"
+path: "/books/handbook/x11/"
---
[[x11]]
diff --git a/documentation/content/de/books/handbook/zfs/_index.adoc b/documentation/content/de/books/handbook/zfs/_index.adoc
index fc0c575e35..6d489e683a 100644
--- a/documentation/content/de/books/handbook/zfs/_index.adoc
+++ b/documentation/content/de/books/handbook/zfs/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/geom
next: books/handbook/filesystems
showBookMenu: true
weight: 23
-path: "/books/handbook/"
+path: "/books/handbook/zfs/"
---
[[zfs]]
diff --git a/documentation/content/de/books/porters-handbook/book.adoc b/documentation/content/de/books/porters-handbook/book.adoc
index 38393676a7..4ea2d3ee74 100644
--- a/documentation/content/de/books/porters-handbook/book.adoc
+++ b/documentation/content/de/books/porters-handbook/book.adoc
@@ -7,7 +7,6 @@ trademarks: ["freebsd", "sun", "unix", "general"]
add_split_page_link: true
showBookMenu: false
weight: 0
-path: "/books/porters-handbook/"
---
= FreeBSD Porter's Handbook
diff --git a/documentation/content/de/books/porters-handbook/keeping-up/_index.adoc b/documentation/content/de/books/porters-handbook/keeping-up/_index.adoc
index 6ee2736075..58e006371e 100644
--- a/documentation/content/de/books/porters-handbook/keeping-up/_index.adoc
+++ b/documentation/content/de/books/porters-handbook/keeping-up/_index.adoc
@@ -3,7 +3,7 @@ title: Kapitel 14. Auf dem Laufenden bleiben
prev: books/porters-handbook/porting-samplem
showBookMenu: true
weight: 14
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/keeping-up/"
---
[[keeping-up]]
diff --git a/documentation/content/de/books/porters-handbook/makefile/_index.adoc b/documentation/content/de/books/porters-handbook/makefile/_index.adoc
index b583974ca8..c9438bf45e 100644
--- a/documentation/content/de/books/porters-handbook/makefile/_index.adoc
+++ b/documentation/content/de/books/porters-handbook/makefile/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/slow
next: books/porters-handbook/special
showBookMenu: true
weight: 5
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/makefile/"
---
[[flavors]]
diff --git a/documentation/content/de/books/porters-handbook/own-port/_index.adoc b/documentation/content/de/books/porters-handbook/own-port/_index.adoc
index b64c5f0f9a..417850af37 100644
--- a/documentation/content/de/books/porters-handbook/own-port/_index.adoc
+++ b/documentation/content/de/books/porters-handbook/own-port/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/why-port
next: books/porters-handbook/quick-porting
showBookMenu: true
weight: 2
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/own-port/"
---
[[own-port]]
diff --git a/documentation/content/de/books/porters-handbook/pkg-files/_index.adoc b/documentation/content/de/books/porters-handbook/pkg-files/_index.adoc
index e5ec5b10af..e7ee4574d7 100644
--- a/documentation/content/de/books/porters-handbook/pkg-files/_index.adoc
+++ b/documentation/content/de/books/porters-handbook/pkg-files/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/plist
next: books/porters-handbook/testing
showBookMenu: true
weight: 8
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/pkg-files/"
---
[[pkg-files]]
@@ -66,6 +66,14 @@ update-etc-shells:
[NOTE]
====
+Stellen Sie sicher, dass sie auf die korrekten Tools zum Verwalten von Diensten verweisen.
+* Verwenden Sie `service name start`, um einen Dienst zu starten, anstatt `/usr/local/etc/rc.d/name start` zu verwenden.
+* Verwenden Sie `sysrc name_enable=YES`, um Optionen in rc.conf zu ändern.
+
+====
+
+[NOTE]
+====
Die [.filename]#pkg-message# wird nicht zur [.filename]#pkg-plist# hinzugefügt. Sie wird auch nicht automatisch angezeigt, falls ein Anwender den Port installiert. Sie müssen also die Ausgabe selbst im `post-install`-Ziel des Make-Vorgangs veranlassen.
====
diff --git a/documentation/content/de/books/porters-handbook/plist/_index.adoc b/documentation/content/de/books/porters-handbook/plist/_index.adoc
index 9812c3bea7..6be9d16d30 100644
--- a/documentation/content/de/books/porters-handbook/plist/_index.adoc
+++ b/documentation/content/de/books/porters-handbook/plist/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/special
next: books/porters-handbook/pkg-files
showBookMenu: true
weight: 7
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/plist/"
---
[[plist]]
diff --git a/documentation/content/de/books/porters-handbook/port-upgrading/_index.adoc b/documentation/content/de/books/porters-handbook/port-upgrading/_index.adoc
index b474474a44..cc93938e48 100644
--- a/documentation/content/de/books/porters-handbook/port-upgrading/_index.adoc
+++ b/documentation/content/de/books/porters-handbook/port-upgrading/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/testing
next: books/porters-handbook/security
showBookMenu: true
weight: 10
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/port-upgrading/"
---
[[port-upgrading]]
diff --git a/documentation/content/de/books/porters-handbook/porting-dads/_index.adoc b/documentation/content/de/books/porters-handbook/porting-dads/_index.adoc
index 550eb3a1c5..776ffb5866 100644
--- a/documentation/content/de/books/porters-handbook/porting-dads/_index.adoc
+++ b/documentation/content/de/books/porters-handbook/porting-dads/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/security
next: books/porters-handbook/porting-samplem
showBookMenu: true
weight: 12
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/porting-dads/"
---
[[porting-dads]]
diff --git a/documentation/content/de/books/porters-handbook/porting-samplem/_index.adoc b/documentation/content/de/books/porters-handbook/porting-samplem/_index.adoc
index ad06e817f7..4b34fa2578 100644
--- a/documentation/content/de/books/porters-handbook/porting-samplem/_index.adoc
+++ b/documentation/content/de/books/porters-handbook/porting-samplem/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/porting-dads
next: books/porters-handbook/keeping-up
showBookMenu: true
weight: 13
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/porting-samplem/"
---
[[porting-samplem]]
diff --git a/documentation/content/de/books/porters-handbook/quick-porting/_index.adoc b/documentation/content/de/books/porters-handbook/quick-porting/_index.adoc
index 49f49bfd37..9a4c5e0229 100644
--- a/documentation/content/de/books/porters-handbook/quick-porting/_index.adoc
+++ b/documentation/content/de/books/porters-handbook/quick-porting/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/own-port
next: books/porters-handbook/slow
showBookMenu: true
weight: 3
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/quick-porting/"
---
[[quick-porting]]
diff --git a/documentation/content/de/books/porters-handbook/security/_index.adoc b/documentation/content/de/books/porters-handbook/security/_index.adoc
index 33edfd6a64..3adf0e3f3e 100644
--- a/documentation/content/de/books/porters-handbook/security/_index.adoc
+++ b/documentation/content/de/books/porters-handbook/security/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/port-upgrading
next: books/porters-handbook/porting-dads
showBookMenu: true
weight: 11
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/security/"
---
[[security]]
diff --git a/documentation/content/de/books/porters-handbook/slow/_index.adoc b/documentation/content/de/books/porters-handbook/slow/_index.adoc
index 80ca50ecc0..03d401177d 100644
--- a/documentation/content/de/books/porters-handbook/slow/_index.adoc
+++ b/documentation/content/de/books/porters-handbook/slow/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/quick-porting
next: books/porters-handbook/makefile
showBookMenu: true
weight: 4
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/slow/"
---
[[slow]]
diff --git a/documentation/content/de/books/porters-handbook/special/_index.adoc b/documentation/content/de/books/porters-handbook/special/_index.adoc
index d134fee52a..48e3f4d84a 100644
--- a/documentation/content/de/books/porters-handbook/special/_index.adoc
+++ b/documentation/content/de/books/porters-handbook/special/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/makefile
next: books/porters-handbook/plist
showBookMenu: true
weight: 6
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/special/"
---
[[special]]
diff --git a/documentation/content/de/books/porters-handbook/testing/_index.adoc b/documentation/content/de/books/porters-handbook/testing/_index.adoc
index a42fa9080d..c000d33b60 100644
--- a/documentation/content/de/books/porters-handbook/testing/_index.adoc
+++ b/documentation/content/de/books/porters-handbook/testing/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/pkg-files
next: books/porters-handbook/port-upgrading
showBookMenu: true
weight: 9
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/testing/"
---
[[testing]]
diff --git a/documentation/content/de/books/porters-handbook/why-port/_index.adoc b/documentation/content/de/books/porters-handbook/why-port/_index.adoc
index 73eb4f65be..e23dc1babf 100644
--- a/documentation/content/de/books/porters-handbook/why-port/_index.adoc
+++ b/documentation/content/de/books/porters-handbook/why-port/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/
next: books/porters-handbook/own-port
showBookMenu: true
weight: 1
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/why-port/"
---
[[why-port]]
diff --git a/documentation/content/el/books/faq/_index.adoc b/documentation/content/el/books/faq/_index.adoc
index eedac8c88f..bd000063ee 100644
--- a/documentation/content/el/books/faq/_index.adoc
+++ b/documentation/content/el/books/faq/_index.adoc
@@ -1660,7 +1660,7 @@ First, always make sure that you have a completely up-to-date Ports Collection.
However, if you are up-to-date, perhaps you are seeing another problem. `make index` has a known bug in dealing with incomplete copies of the Ports Collection. It assumes that you have a local copy of every single port that every other port that you have a local copy of depends on. To explain, if you have a copy of [.filename]#foo/bar# on your disk, and [.filename]#foo/bar# depends on [.filename]#baz/quux#, then you must also have a copy of [.filename]#baz/quux# on your disk, and the ports [.filename]#baz/quux# depends on, and so on. Otherwise, `make index` has insufficient information to create its dependency tree.
-This is particularly a problem for FreeBSD users who utilize man:cvsup[1] to track the Ports Collection but choose not to install certain categories by specifying them in [.filename]#refuse#. In theory, one should be able to refuse categories, but in practice there are too many ports that depend on ports in other categories. Until someone comes up with a solution for this problem, the general rule is is that if you want to build [.filename]#INDEX#, you must have a complete copy of the Ports Collection.
+This is particularly a problem for FreeBSD users who utilize man:cvsup[1] to track the Ports Collection but choose not to install certain categories by specifying them in [.filename]#refuse#. In theory, one should be able to refuse categories, but in practice there are too many ports that depend on ports in other categories. Until someone comes up with a solution for this problem, the general rule is that if you want to build [.filename]#INDEX#, you must have a complete copy of the Ports Collection.
There are rare cases where [.filename]#INDEX# will not build due to odd cases involving `WITH__*_` or `WITHOUT__*_` variables being set in [.filename]#make.conf#. If you suspect that this is the case, please try to make [.filename]#INDEX# with those Makevars turned off before reporting it to {freebsd-ports}.
diff --git a/documentation/content/el/books/handbook/advanced-networking/_index.adoc b/documentation/content/el/books/handbook/advanced-networking/_index.adoc
index 01f916ee6a..530ba95094 100644
--- a/documentation/content/el/books/handbook/advanced-networking/_index.adoc
+++ b/documentation/content/el/books/handbook/advanced-networking/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/firewalls
next: books/handbook/partv
showBookMenu: true
weight: 36
-path: "/books/handbook/"
+path: "/books/handbook/advanced-networking/"
---
[[advanced-networking]]
diff --git a/documentation/content/el/books/handbook/audit/_index.adoc b/documentation/content/el/books/handbook/audit/_index.adoc
index 62f91944aa..10ca6c331d 100644
--- a/documentation/content/el/books/handbook/audit/_index.adoc
+++ b/documentation/content/el/books/handbook/audit/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mac
next: books/handbook/disks
showBookMenu: true
weight: 22
-path: "/books/handbook/"
+path: "/books/handbook/audit/"
---
[[audit]]
diff --git a/documentation/content/el/books/handbook/basics/_index.adoc b/documentation/content/el/books/handbook/basics/_index.adoc
index b1d9d37fba..f6ecc087d7 100644
--- a/documentation/content/el/books/handbook/basics/_index.adoc
+++ b/documentation/content/el/books/handbook/basics/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/install
next: books/handbook/ports
showBookMenu: true
weight: 6
-path: "/books/handbook/"
+path: "/books/handbook/basics/"
---
[[basics]]
diff --git a/documentation/content/el/books/handbook/bibliography/_index.adoc b/documentation/content/el/books/handbook/bibliography/_index.adoc
index e140ec4682..a6ee9105b1 100644
--- a/documentation/content/el/books/handbook/bibliography/_index.adoc
+++ b/documentation/content/el/books/handbook/bibliography/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mirrors
next: books/handbook/eresources
showBookMenu: true
weight: 39
-path: "/books/handbook/"
+path: "/books/handbook/bibliography/"
---
[appendix]
diff --git a/documentation/content/el/books/handbook/boot/_index.adoc b/documentation/content/el/books/handbook/boot/_index.adoc
index ccc2b0884b..5051315ca8 100644
--- a/documentation/content/el/books/handbook/boot/_index.adoc
+++ b/documentation/content/el/books/handbook/boot/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/config
next: books/handbook/users
showBookMenu: true
weight: 17
-path: "/books/handbook/"
+path: "/books/handbook/boot/"
---
[[boot]]
diff --git a/documentation/content/el/books/handbook/bsdinstall/_index.adoc b/documentation/content/el/books/handbook/bsdinstall/_index.adoc
index c3583220e4..1944c06bf1 100644
--- a/documentation/content/el/books/handbook/bsdinstall/_index.adoc
+++ b/documentation/content/el/books/handbook/bsdinstall/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/introduction
next: books/handbook/install
showBookMenu: true
weight: 4
-path: "/books/handbook/"
+path: "/books/handbook/bsdinstall/"
---
[[bsdinstall]]
diff --git a/documentation/content/el/books/handbook/config/_index.adoc b/documentation/content/el/books/handbook/config/_index.adoc
index 3460bb661d..3797c67602 100644
--- a/documentation/content/el/books/handbook/config/_index.adoc
+++ b/documentation/content/el/books/handbook/config/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partiii
next: books/handbook/boot
showBookMenu: true
weight: 16
-path: "/books/handbook/"
+path: "/books/handbook/config/"
---
[[config-tuning]]
@@ -1369,6 +1369,6 @@ More information about ACPI may be found in the following locations:
* The {freebsd-acpi}
* The ACPI Mailing List Archives http://lists.freebsd.org/pipermail/freebsd-acpi/[http://lists.freebsd.org/pipermail/freebsd-acpi/]
* The old ACPI Mailing List Archives http://home.jp.FreeBSD.org/mail-list/acpi-jp/[http://home.jp.FreeBSD.org/mail-list/acpi-jp/]
-* The ACPI 2.0 Specification http://acpi.info/spec.htm[http://acpi.info/spec.htm]
+* The https://uefi.org/specifications#ACPI[ACPI Specification]
* FreeBSD Manual pages: man:acpi[4], man:acpi_thermal[4], man:acpidump[8], man:iasl[8], man:acpidb[8]
* http://www.cpqlinux.com/acpi-howto.html#fix_broken_dsdt[DSDT debugging resource]. (Uses Compaq as an example but generally useful.)
diff --git a/documentation/content/el/books/handbook/cutting-edge/_index.adoc b/documentation/content/el/books/handbook/cutting-edge/_index.adoc
index 18956ddd3e..99035ecfa8 100644
--- a/documentation/content/el/books/handbook/cutting-edge/_index.adoc
+++ b/documentation/content/el/books/handbook/cutting-edge/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/l10n
next: books/handbook/dtrace
showBookMenu: true
weight: 28
-path: "/books/handbook/"
+path: "/books/handbook/cutting-edge/"
---
[[updating-upgrading]]
diff --git a/documentation/content/el/books/handbook/desktop/_index.adoc b/documentation/content/el/books/handbook/desktop/_index.adoc
index 37c9f116a3..322e40ddff 100644
--- a/documentation/content/el/books/handbook/desktop/_index.adoc
+++ b/documentation/content/el/books/handbook/desktop/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partii
next: books/handbook/multimedia
showBookMenu: true
weight: 10
-path: "/books/handbook/"
+path: "/books/handbook/desktop/"
---
[[desktop]]
@@ -84,29 +84,59 @@ endif::[]
[cols="1,1,1,1", frame="none", options="header"]
|===
| Όνομα Εφαρμογής
+| Άδεια
+| Πακέτο
| Απαιτούμενοι Πόροι
-| Εγκατάσταση από Ports
-| Βασικές Εξαρτήσεις
|Firefox
-|μεσαία
+|MPL 2.0
+|www/firefox
|βαριά
-|Gtk+
-|Opera
-|λίγοι (ελαφριά)
-|ελαφριά
-|Υπάρχουν διαθέσιμες εκδόσεις για FreeBSD και Linux. Η έκδοση για Linux εξαρτάται από την δυαδική συμβατότητα με Linux (Linux Binary Compatibility) και το linux-openmotif.
+|Chromium
+|BSD-3
+|www/chromium
+|βαριά
+
+|Iridium browser
+|BSD-3
+|www/iridium-browser
+|βαριά
+
+|Falkon
+|MPL 2.0
+|www/falkon-qtonly
+|βαριά
|Konqueror
+|GPL 2.0 ή νεότερη
+|x11-fm/konqueror
|μεσαία
-|βαριά
-|Βιβλιοθήκες KDE
-|Chromium
+|Gnome Web (Epiphany)
+|GPL 3.0 ή νεότερη
+|www/epiphany
|μεσαία
+
+|qutebrowser
+|GPL 3.0 ή νεότερη
+|www/qutebrowser
|μεσαία
-|Gtk+
+
+|Dillo
+|GPL 3.0 ή νεότερη
+|www/dillo
+|ελαφριά
+
+|Links
+|GPL 2.0 ή νεότερη
+|www/links
+|ελαφριά
+
+|w3m
+|MIT
+|www/w3m
+|ελαφριά
|===
=== Firefox
@@ -117,14 +147,14 @@ endif::[]
[source,shell]
....
-# pkg_add -r firefox
+# pkg install firefox
....
Η παραπάνω εντολή θα εγκαταστήσει την τελευταία σταθερή έκδοση του Firefox. Αν θέλετε να εγκαταστήσετε την παλιά έκδοση εκτεταμένης υποστήριξης (Extended Support Release, ESR), πληκτρολογήστε:
[source,shell]
....
-# pkg_add -r firefox-esr
+# pkg install firefox-esr
....
Μπορείτε επίσης να χρησιμοποιήσετε την Συλλογή των Ports αν προτιμάτε να μεταγλωττίσετε από τον πηγαίο κώδικα:
@@ -137,110 +167,6 @@ endif::[]
Για τον Firefox ESR, αντικαταστήστε στην παραπάνω εντολή τη λέξη `firefox` με `firefox-esr`.
-[[moz-java-plugin]]
-=== Ο Firefox και το Πρόσθετο (plugin) της Java(TM)
-
-[NOTE]
-====
-Σε αυτό το τμήμα και τα δύο επόμενα, θεωρούμε ότι έχετε ήδη εγκαταστήσει τον Firefox.
-====
-
-Εγκαταστήστε το OpenJDK 6 από τη Συλλογή των Ports, πληκτρολογώντας:
-
-[source,shell]
-....
-# cd /usr/ports/java/openjdk6
-# make install clean
-....
-
-Εγκαταστήστε έπειτα το port package:java/icedtea-web[]:
-
-[source,shell]
-....
-# cd /usr/ports/java/icedtea-web
-# make install clean
-....
-
-Βεβαιωθείτε ότι δεν αλλάξατε τις προεπιλεγμένες επιλογές στις οθόνες ρυθμίσεων και των δύο ports.
-
-Ξεκινήστε το φυλλομετρητή σας, γράψτε `about:plugins` στη γραμμή διευθύνσεων και πιέστε kbd:[Enter]. Θα δείτε μια σελίδα με όλα τα εγκατεστημένα πρόσθετα. Στη σελίδα αυτή θα πρέπει να δείτε και την καταχώριση για το πρόσθετο της Java(TM).
-
-Αν ο φυλλομετρητής δεν καταφέρει να εντοπίσει το πρόσθετο, κάθε χρήστης θα χρειαστεί να εκτελέσει την παρακάτω εντολή και να επανεκκινήσει το φυλλομετρητή του:
-
-[source,shell]
-....
-% ln -s /usr/local/lib/IcedTeaPlugin.so \
- $HOME/.mozilla/plugins/
-....
-
-[[moz-flash-plugin]]
-=== Ο Firefox και το Adobe(R) Flash(TM) Plugin
-
-Το Adobe(R) Flash(TM) plugin δεν διατίθεται για το FreeBSD. Ωστόσο, υπάρχει ένα επίπεδο εξομοίωσης (software layer, wrapper) για την εκτέλεση του αντίστοιχου plugin του Linux. To wrapper αυτό υποστηρίζει επίσης και τα plugins για τον Adobe(R) Acrobat(R), το RealPlayer και άλλα.
-
-Εκτελέστε τα παρακάτω βήματα, ανάλογα με την έκδοση του FreeBSD που χρησιμοποιείτε:
-
-[.procedure]
-====
-. Για το FreeBSD 7._X_
-+
-Εγκαταστήστε το port package:www/nspluginwrapper[]. Το port αυτό απαιτεί το package:emulators/linux_base-fc4[] το οποίο είναι μεγάλο.
-+
-Το επόμενο βήμα είναι η εγκατάσταση του port package:www/linux-flashplugin9[]. Θα εγκατασταθεί η έκδοση Flash(TM) 9._X_ η οποία γνωρίζουμε ότι δουλεύει σωστά στο FreeBSD 7._X_.
-+
-[NOTE]
-======
-Σε εκδόσεις του FreeBSD παλαιότερες από την 7.1-RELEASE, θα πρέπει να εγκαταστήσετε το πακέτο package:www/linux-flashplugin7[] και να παραλείψετε το βήμα σχετικά με το man:linprocfs[5] που φαίνεται παρακάτω.
-======
-+
-. Για το FreeBSD 8._X_ ή Νεώτερη Έκδοση
-+
-Εγκαταστήστε το port package:www/nspluginwrapper[]. Το port αυτό απαιτεί το package:emulators/linux_base-f10[] το οποίο είναι μεγάλο.
-+
-Το επόμενο βήμα είναι η εγκατάσταση του Flash(TM) 11.X από το port package:www/linux-f10-flashplugin11[].
-+
-Για να λειτουργήσει σωστά αυτή η έκδοση, θα χρειαστεί να δημιουργήσετε τον συμβολικό σύνδεσμο που φαίνεται παρακάτω:
-+
-[source,shell]
-....
-# ln -s /usr/local/lib/npapi/linux-f10-flashplugin/libflashplayer.so \
- /usr/local/lib/browser_plugins/
-....
-+
-Θα χρειαστεί να δημιουργήσετε χειροκίνητα τον κατάλογο [.filename]#/usr/local/lib/browser_plugins# αν δεν υπάρχει στο σύστημα σας.
-====
-
-Μετά την εγκατάσταση του σωστού (σύμφωνα με την έκδοση του FreeBSD) Flash(TM) port, ο κάθε χρήστης θα πρέπει να ολοκληρώσει την προσωπική του εγκατάσταση του plugin εκτελώντας την παρακάτω εντολή του `nspluginwrapper`:
-
-[source,shell]
-....
-% nspluginwrapper -v -a -i
-....
-
-Μετά την εγκατάσταση του plugin, ξεκινήστε το φυλλομετρητή σας, γράψτε `about:plugins` στη γραμμή διευθύνσεων και πιέστε kbd:[Enter]. Θα πρέπει να δείτε μια λίστα με όλα τα τρέχοντα διαθέσιμα plugins.
-
-[[moz-swfdec-flash-plugin]]
-=== Ο Firefox και το Swfdec Flash(TM) Plugin
-
-To Swfdec είναι μια βιβλιοθήκη για αποκωδικοποίηση και αναπαραγωγή σκηνών Flash(TM). Το Swfdec-Mozilla είναι ένα plugin για τους φυλλομετρητές Firefox το οποίο χρησιμοποιεί αυτή τη βιβλιοθήκη για την αναπαραγωγή αρχείων SWF. Είναι ακόμα στο στάδιο της ανάπτυξης.
-
-Αν δεν μπορείτε ή δεν θέλετε να το μεταγλωττίσετε, απλώς εγκαταστήστε το πακέτο από το δίκτυο:
-
-[source,shell]
-....
-# pkg_add -r swfdec-plugin
-....
-
-Αν το πακέτο δεν είναι διαθέσιμο, μπορείτε να το μεταγλωττίσετε και να το εγκαταστήσετε από τη Συλλογή των Ports:
-
-[source,shell]
-....
-# cd /usr/ports/www/swfdec-plugin
-# make install clean
-....
-
-Μετά την εγκατάσταση, επανεκκινήστε το φυλλομετρητή σας για να ενεργοποιηθεί το plugin.
-
=== Opera
Ο Opera είναι ένας φυλλομετρητής με πλήρεις δυνατότητες και συμβατός με τα πρότυπα. Έρχεται επίσης με ενσωματωμένο πρόγραμμα ανάγνωσης ταχυδρομείου (mail) και ειδήσεων (news), πρόγραμμα για IRC, αναγνώστη για RSS/Atom και πολλά ακόμα. Παρ'όλα αυτά, ο Opera είναι μια σχετικά ελαφριά και πολύ γρήγορη εφαρμογή. Έρχεται σε δύο τύπους: μια "εγγενής" έκδοση για το FreeBSD και μια έκδοση που εκτελείται μέσω της συμβατότητας με το Linux.
diff --git a/documentation/content/el/books/handbook/disks/_index.adoc b/documentation/content/el/books/handbook/disks/_index.adoc
index 4b6708b447..649071a675 100644
--- a/documentation/content/el/books/handbook/disks/_index.adoc
+++ b/documentation/content/el/books/handbook/disks/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/audit
next: books/handbook/geom
showBookMenu: true
weight: 23
-path: "/books/handbook/"
+path: "/books/handbook/disks/"
---
[[disks]]
diff --git a/documentation/content/el/books/handbook/dtrace/_index.adoc b/documentation/content/el/books/handbook/dtrace/_index.adoc
index 2eb0bfb49e..999d74b818 100644
--- a/documentation/content/el/books/handbook/dtrace/_index.adoc
+++ b/documentation/content/el/books/handbook/dtrace/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/cutting-edge
next: books/handbook/partiv
showBookMenu: true
weight: 29
-path: "/books/handbook/"
+path: "/books/handbook/dtrace/"
---
[[dtrace]]
diff --git a/documentation/content/el/books/handbook/eresources/_index.adoc b/documentation/content/el/books/handbook/eresources/_index.adoc
index 58def9a943..8f9b6c31c7 100644
--- a/documentation/content/el/books/handbook/eresources/_index.adoc
+++ b/documentation/content/el/books/handbook/eresources/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/bibliography
next: books/handbook/pgpkeys
showBookMenu: true
weight: 40
-path: "/books/handbook/"
+path: "/books/handbook/eresources/"
---
[appendix]
diff --git a/documentation/content/el/books/handbook/filesystems/_index.adoc b/documentation/content/el/books/handbook/filesystems/_index.adoc
index 0515bd3ac0..176047d35b 100644
--- a/documentation/content/el/books/handbook/filesystems/_index.adoc
+++ b/documentation/content/el/books/handbook/filesystems/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/geom
next: books/handbook/virtualization
showBookMenu: true
weight: 25
-path: "/books/handbook/"
+path: "/books/handbook/filesystems/"
---
[[filesystems]]
diff --git a/documentation/content/el/books/handbook/firewalls/_index.adoc b/documentation/content/el/books/handbook/firewalls/_index.adoc
index 1c2ab03dc4..ec052ca63e 100644
--- a/documentation/content/el/books/handbook/firewalls/_index.adoc
+++ b/documentation/content/el/books/handbook/firewalls/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/network-servers
next: books/handbook/advanced-networking
showBookMenu: true
weight: 35
-path: "/books/handbook/"
+path: "/books/handbook/firewalls/"
---
[[firewalls]]
diff --git a/documentation/content/el/books/handbook/geom/_index.adoc b/documentation/content/el/books/handbook/geom/_index.adoc
index 6cec5f11e6..0c306a818e 100644
--- a/documentation/content/el/books/handbook/geom/_index.adoc
+++ b/documentation/content/el/books/handbook/geom/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/disks
next: books/handbook/filesystems
showBookMenu: true
weight: 24
-path: "/books/handbook/"
+path: "/books/handbook/geom/"
---
[[geom]]
diff --git a/documentation/content/el/books/handbook/install/_index.adoc b/documentation/content/el/books/handbook/install/_index.adoc
index 40bd5400f4..8c229d61bf 100644
--- a/documentation/content/el/books/handbook/install/_index.adoc
+++ b/documentation/content/el/books/handbook/install/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/bsdinstall
next: books/handbook/basics
showBookMenu: true
weight: 5
-path: "/books/handbook/"
+path: "/books/handbook/install/"
---
[[install]]
diff --git a/documentation/content/el/books/handbook/introduction/_index.adoc b/documentation/content/el/books/handbook/introduction/_index.adoc
index 488ac31153..c2337d9179 100644
--- a/documentation/content/el/books/handbook/introduction/_index.adoc
+++ b/documentation/content/el/books/handbook/introduction/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/parti
next: books/handbook/bsdinstall
showBookMenu: true
weight: 3
-path: "/books/handbook/"
+path: "/books/handbook/introduction/"
---
[[introduction]]
diff --git a/documentation/content/el/books/handbook/jails/_index.adoc b/documentation/content/el/books/handbook/jails/_index.adoc
index 4116dbafa4..5d51085211 100644
--- a/documentation/content/el/books/handbook/jails/_index.adoc
+++ b/documentation/content/el/books/handbook/jails/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/security
next: books/handbook/mac
showBookMenu: true
weight: 20
-path: "/books/handbook/"
+path: "/books/handbook/jails/"
---
[[jails]]
diff --git a/documentation/content/el/books/handbook/kernelconfig/_index.adoc b/documentation/content/el/books/handbook/kernelconfig/_index.adoc
index 7cb39d74a6..3d2e8fcfb6 100644
--- a/documentation/content/el/books/handbook/kernelconfig/_index.adoc
+++ b/documentation/content/el/books/handbook/kernelconfig/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/multimedia
next: books/handbook/printing
showBookMenu: true
weight: 12
-path: "/books/handbook/"
+path: "/books/handbook/kernelconfig/"
---
[[kernelconfig]]
diff --git a/documentation/content/el/books/handbook/l10n/_index.adoc b/documentation/content/el/books/handbook/l10n/_index.adoc
index 521e756540..39a41a1a2d 100644
--- a/documentation/content/el/books/handbook/l10n/_index.adoc
+++ b/documentation/content/el/books/handbook/l10n/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/virtualization
next: books/handbook/cutting-edge
showBookMenu: true
weight: 27
-path: "/books/handbook/"
+path: "/books/handbook/l10n/"
---
[[l10n]]
diff --git a/documentation/content/el/books/handbook/linuxemu/_index.adoc b/documentation/content/el/books/handbook/linuxemu/_index.adoc
index f7de3ec5eb..c2373089f1 100644
--- a/documentation/content/el/books/handbook/linuxemu/_index.adoc
+++ b/documentation/content/el/books/handbook/linuxemu/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/printing
next: books/handbook/partiii
showBookMenu: true
weight: 14
-path: "/books/handbook/"
+path: "/books/handbook/linuxemu/"
---
[[linuxemu]]
diff --git a/documentation/content/el/books/handbook/mac/_index.adoc b/documentation/content/el/books/handbook/mac/_index.adoc
index 76c187db39..afe4d53bb8 100644
--- a/documentation/content/el/books/handbook/mac/_index.adoc
+++ b/documentation/content/el/books/handbook/mac/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/jails
next: books/handbook/audit
showBookMenu: true
weight: 21
-path: "/books/handbook/"
+path: "/books/handbook/mac/"
---
[[mac]]
diff --git a/documentation/content/el/books/handbook/mail/_index.adoc b/documentation/content/el/books/handbook/mail/_index.adoc
index a72c307cce..1e305f301e 100644
--- a/documentation/content/el/books/handbook/mail/_index.adoc
+++ b/documentation/content/el/books/handbook/mail/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/ppp-and-slip
next: books/handbook/network-servers
showBookMenu: true
weight: 33
-path: "/books/handbook/"
+path: "/books/handbook/mail/"
---
[[mail]]
@@ -419,7 +419,7 @@ Cw domain.net στο /etc/mail/sendmail.cf.
Μπορείτε να βρείτε το FAQ του sendmail στη διεύθυνση http://www.sendmail.org/faq/[http://www.sendmail.org/faq/], και συνίσταται να το διαβάσετε αν θέλετε να "πειράξετε" τις ρυθμίσεις του mail σας.
-=== Πως μπορώ να εκτελέσω εξυπηρετητή mail σε υπολογιστή που συνδέεται μέσω επιλογικής σύνδεσης PPPPPP;
+=== Πως μπορώ να εκτελέσω εξυπηρετητή mail σε υπολογιστή που συνδέεται μέσω επιλογικής σύνδεσης PPP;
Θέλετε να συνδέσετε ένα FreeBSD μηχάνημα σε ένα τοπικό δίκτυο (LAN) στο Internet. Το FreeBSD μηχάνημα θα γίνει πύλη ταχυδρομείου για το LAN. Η σύνδεση PPP δεν είναι αποκλειστική.
diff --git a/documentation/content/el/books/handbook/mirrors/_index.adoc b/documentation/content/el/books/handbook/mirrors/_index.adoc
index c800a74758..015757ab19 100644
--- a/documentation/content/el/books/handbook/mirrors/_index.adoc
+++ b/documentation/content/el/books/handbook/mirrors/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partv
next: books/handbook/bibliography
showBookMenu: true
weight: 38
-path: "/books/handbook/"
+path: "/books/handbook/mirrors/"
---
[appendix]
@@ -62,19 +62,24 @@ WWW: http://www.frys.com/
Το FreeBSD είναι διαθέσιμο σε CD και DVD για αγορά μέσω διαδικτύου από τους παρακάτω προμηθευτές:
* FreeBSD Mall, Inc. +
-700 Harvest Park Ste F +
-Brentwood, CA 94513 +
+1164 Claremont Dr +
+Brentwood, CA +
+94513 +
USA +
-Τηλέφωνο: +1 925 674-0783 +
+Τηλέφωνο: +1 925 240-6652 +
Fax: +1 925 674-0821 +
-Email: <info@freebsdmall.com> +
-WWW: http://www.freebsdmall.com/
+Email: info@freebsdmall.com +
+WWW: https://www.freebsdmall.com
+
+* Getlinux +
+WWW: https://www.getlinux.fr/
* Dr. Hinner EDV +
-St. Augustinus-Str. 10 +
-D-81825 M"unchen +
+Schäftlarnstr. 10 // 4. Stock +
+D-81371 München +
Germany +
-Τηλέφωνο: (089) 428 419 +
+Τηλέφωνο: +49 171 417 544 6 +
+Email: infow@hinner.de +
WWW: http://www.hinner.de/linux/freebsd.html
* JMC Software +
diff --git a/documentation/content/el/books/handbook/multimedia/_index.adoc b/documentation/content/el/books/handbook/multimedia/_index.adoc
index c530fef52b..936b3e2eb5 100644
--- a/documentation/content/el/books/handbook/multimedia/_index.adoc
+++ b/documentation/content/el/books/handbook/multimedia/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/desktop
next: books/handbook/kernelconfig
showBookMenu: true
weight: 11
-path: "/books/handbook/"
+path: "/books/handbook/multimedia/"
---
[[multimedia]]
diff --git a/documentation/content/el/books/handbook/network-servers/_index.adoc b/documentation/content/el/books/handbook/network-servers/_index.adoc
index 3cc0414e6e..da220fc692 100644
--- a/documentation/content/el/books/handbook/network-servers/_index.adoc
+++ b/documentation/content/el/books/handbook/network-servers/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mail
next: books/handbook/firewalls
showBookMenu: true
weight: 34
-path: "/books/handbook/"
+path: "/books/handbook/network-servers/"
---
[[network-servers]]
diff --git a/documentation/content/el/books/handbook/parti.adoc b/documentation/content/el/books/handbook/parti.adoc
index bf952a1e0f..719b7567dc 100644
--- a/documentation/content/el/books/handbook/parti.adoc
+++ b/documentation/content/el/books/handbook/parti.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/preface
next: books/handbook/introduction
showBookMenu: true
weight: 2
-path: "/books/handbook/"
+path: "/books/handbook/parti/"
---
[[getting-started]]
diff --git a/documentation/content/el/books/handbook/partii.adoc b/documentation/content/el/books/handbook/partii.adoc
index 817f6de95a..3df0de2d1f 100644
--- a/documentation/content/el/books/handbook/partii.adoc
+++ b/documentation/content/el/books/handbook/partii.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/x11
next: books/handbook/desktop
showBookMenu: true
weight: 9
-path: "/books/handbook/"
+path: "/books/handbook/partii/"
---
[[common-tasks]]
diff --git a/documentation/content/el/books/handbook/partiii.adoc b/documentation/content/el/books/handbook/partiii.adoc
index 49ca05ecd8..ce9056de06 100644
--- a/documentation/content/el/books/handbook/partiii.adoc
+++ b/documentation/content/el/books/handbook/partiii.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/linuxemu
next: books/handbook/config
showBookMenu: true
weight: 15
-path: "/books/handbook/"
+path: "/books/handbook/partiii/"
---
[[system-administration]]
diff --git a/documentation/content/el/books/handbook/partiv.adoc b/documentation/content/el/books/handbook/partiv.adoc
index 6183126b07..837d6ab1b7 100644
--- a/documentation/content/el/books/handbook/partiv.adoc
+++ b/documentation/content/el/books/handbook/partiv.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/dtrace
next: books/handbook/serialcomms
showBookMenu: true
weight: 30
-path: "/books/handbook/"
+path: "/books/handbook/partiv/"
---
[[network-communication]]
diff --git a/documentation/content/el/books/handbook/partv.adoc b/documentation/content/el/books/handbook/partv.adoc
index 0594ce1a82..fae510d29d 100644
--- a/documentation/content/el/books/handbook/partv.adoc
+++ b/documentation/content/el/books/handbook/partv.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/advanced-networking
next: books/handbook/mirrors
showBookMenu: true
weight: 37
-path: "/books/handbook/"
+path: "/books/handbook/partv/"
---
[[appendices]]
diff --git a/documentation/content/el/books/handbook/pgpkeys/_index.adoc b/documentation/content/el/books/handbook/pgpkeys/_index.adoc
index d00364b3a8..d8e9023569 100644
--- a/documentation/content/el/books/handbook/pgpkeys/_index.adoc
+++ b/documentation/content/el/books/handbook/pgpkeys/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/eresources
next: books/handbook/freebsd-glossary
showBookMenu: true
weight: 41
-path: "/books/handbook/"
+path: "/books/handbook/pgpkeys/"
---
[appendix]
@@ -59,9 +59,6 @@ endif::[]
=== {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/el/books/handbook/ports/_index.adoc b/documentation/content/el/books/handbook/ports/_index.adoc
index b7f4a3fc28..8003ab918d 100644
--- a/documentation/content/el/books/handbook/ports/_index.adoc
+++ b/documentation/content/el/books/handbook/ports/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/basics
next: books/handbook/x11
showBookMenu: true
weight: 7
-path: "/books/handbook/"
+path: "/books/handbook/ports/"
---
[[ports]]
diff --git a/documentation/content/el/books/handbook/ppp-and-slip/_index.adoc b/documentation/content/el/books/handbook/ppp-and-slip/_index.adoc
index 86eed9805a..6f54bc4e73 100644
--- a/documentation/content/el/books/handbook/ppp-and-slip/_index.adoc
+++ b/documentation/content/el/books/handbook/ppp-and-slip/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/serialcomms
next: books/handbook/mail
showBookMenu: true
weight: 32
-path: "/books/handbook/"
+path: "/books/handbook/ppp-and-slip/"
---
[[ppp-and-slip]]
diff --git a/documentation/content/el/books/handbook/preface/_index.adoc b/documentation/content/el/books/handbook/preface/_index.adoc
index 8faebe4822..751740d897 100644
--- a/documentation/content/el/books/handbook/preface/_index.adoc
+++ b/documentation/content/el/books/handbook/preface/_index.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/
next: books/handbook/parti
showBookMenu: true
weight: 1
-path: "/books/handbook/"
+path: "/books/handbook/preface/"
---
[preface]
diff --git a/documentation/content/el/books/handbook/printing/_index.adoc b/documentation/content/el/books/handbook/printing/_index.adoc
index 144be390cc..06fa38cd03 100644
--- a/documentation/content/el/books/handbook/printing/_index.adoc
+++ b/documentation/content/el/books/handbook/printing/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/kernelconfig
next: books/handbook/linuxemu
showBookMenu: true
weight: 13
-path: "/books/handbook/"
+path: "/books/handbook/printing/"
---
[[printing]]
diff --git a/documentation/content/el/books/handbook/security/_index.adoc b/documentation/content/el/books/handbook/security/_index.adoc
index 33114a15cf..6fbefbc056 100644
--- a/documentation/content/el/books/handbook/security/_index.adoc
+++ b/documentation/content/el/books/handbook/security/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/users
next: books/handbook/jails
showBookMenu: true
weight: 19
-path: "/books/handbook/"
+path: "/books/handbook/security/"
---
[[security]]
@@ -189,7 +189,7 @@ A good security script will also check for changes to user and staff members acc
If you have a huge amount of user disk space, it may take too long to run through every file on those partitions. In this case, setting mount flags to disallow suid binaries and devices on those partitions is a good idea. The `nodev` and `nosuid` options (see man:mount[8]) are what you want to look into. You should probably scan them anyway, at least once a week, since the object of this layer is to detect a break-in attempt, whether or not the attempt succeeds.
-Process accounting (see man:accton[8]) is a relatively low-overhead feature of the operating system which might help as a post-break-in evaluation mechanism. It is especially useful in tracking down how an intruder has actually broken into a system, assuming the file is still intact after the break-in has occured.
+Process accounting (see man:accton[8]) is a relatively low-overhead feature of the operating system which might help as a post-break-in evaluation mechanism. It is especially useful in tracking down how an intruder has actually broken into a system, assuming the file is still intact after the break-in has occurred.
Finally, security scripts should process the log files, and the logs themselves should be generated in as secure a manner as possible - remote syslog can be very useful. An intruder will try to cover his tracks, and log files are critical to the sysadmin trying to track down the time and method of the initial break-in. One way to keep a permanent record of the log files is to run the system console to a serial port and collect the information to a secure machine monitoring the consoles.
diff --git a/documentation/content/el/books/handbook/serialcomms/_index.adoc b/documentation/content/el/books/handbook/serialcomms/_index.adoc
index e5c3f1c7bd..d9ddb3830c 100644
--- a/documentation/content/el/books/handbook/serialcomms/_index.adoc
+++ b/documentation/content/el/books/handbook/serialcomms/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partiv
next: books/handbook/ppp-and-slip
showBookMenu: true
weight: 31
-path: "/books/handbook/"
+path: "/books/handbook/serialcomms/"
---
[[serialcomms]]
diff --git a/documentation/content/el/books/handbook/users/_index.adoc b/documentation/content/el/books/handbook/users/_index.adoc
index 2e6fcfd690..6ee98f00af 100644
--- a/documentation/content/el/books/handbook/users/_index.adoc
+++ b/documentation/content/el/books/handbook/users/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/boot
next: books/handbook/security
showBookMenu: true
weight: 18
-path: "/books/handbook/"
+path: "/books/handbook/users/"
---
[[users]]
diff --git a/documentation/content/el/books/handbook/virtualization/_index.adoc b/documentation/content/el/books/handbook/virtualization/_index.adoc
index 5a5920612b..1f5853173f 100644
--- a/documentation/content/el/books/handbook/virtualization/_index.adoc
+++ b/documentation/content/el/books/handbook/virtualization/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/filesystems
next: books/handbook/l10n
showBookMenu: true
weight: 26
-path: "/books/handbook/"
+path: "/books/handbook/virtualization/"
---
[[virtualization]]
diff --git a/documentation/content/el/books/handbook/x11/_index.adoc b/documentation/content/el/books/handbook/x11/_index.adoc
index c027246673..50c91ef8cc 100644
--- a/documentation/content/el/books/handbook/x11/_index.adoc
+++ b/documentation/content/el/books/handbook/x11/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/ports
next: books/handbook/partii
showBookMenu: true
weight: 8
-path: "/books/handbook/"
+path: "/books/handbook/x11/"
---
[[x11]]
diff --git a/documentation/content/en/articles/_index.po b/documentation/content/en/articles/_index.po
new file mode 100644
index 0000000000..42a0aa133d
--- /dev/null
+++ b/documentation/content/en/articles/_index.po
@@ -0,0 +1,29 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-01-08 11:34-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: documentation/content/en/articles/_index.adoc:1
+#: documentation/content/en/articles/_index.adoc:6
+#, no-wrap
+msgid "Articles"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/_index.adoc:8
+msgid "{{< list-articles-directories >}}"
+msgstr ""
diff --git a/documentation/content/en/articles/bsdl-gpl/_index.po b/documentation/content/en/articles/bsdl-gpl/_index.po
new file mode 100644
index 0000000000..54a98693aa
--- /dev/null
+++ b/documentation/content/en/articles/bsdl-gpl/_index.po
@@ -0,0 +1,780 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:1
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:11
+#, no-wrap
+msgid "Why you should use a BSD style license for your Open Source Project"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:43
+msgid "'''"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:47
+#, no-wrap
+msgid "Introduction"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:52
+msgid ""
+"This document makes a case for using a BSD style license for software and "
+"data; specifically it recommends using a BSD style license in place of the "
+"GPL. It can also be read as a BSD versus GPL Open Source License "
+"introduction and summary."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:54
+#, no-wrap
+msgid "Very Brief Open Source History"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:60
+msgid ""
+"Long before the term \"Open Source\" was used, software was developed by "
+"loose associations of programmers and freely exchanged. Starting in the "
+"early 1950's, organizations such as http://www.share.org[SHARE] and http://"
+"www.decus.org[DECUS] developed much of the software that computer hardware "
+"companies bundled with their hardware offerings. At that time computer "
+"companies were in the hardware business; anything that reduced software cost "
+"and made more programs available made the hardware companies more "
+"competitive."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:67
+msgid ""
+"This model changed in the 1960's. In 1965 ADR developed the first licensed "
+"software product independent of a hardware company. ADR was competing "
+"against a free IBM package originally developed by IBM customers. ADR "
+"patented their software in 1968. To stop sharing of their program, they "
+"provided it under an equipment lease in which payment was spread over the "
+"lifetime of the product. ADR thus retained ownership and could control "
+"resale and reuse."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:70
+msgid ""
+"In 1969 the US Department of Justice charged IBM with destroying businesses "
+"by bundling free software with IBM hardware. As a result of this suit, IBM "
+"unbundled its software; that is, software became independent products "
+"separate from hardware."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:75
+msgid ""
+"In 1968 Informatics introduced the first commercial killer-app and rapidly "
+"established the concept of the software product, the software company, and "
+"very high rates of return. Informatics developed the perpetual license "
+"which is now standard throughout the computer industry, wherein ownership is "
+"never transferred to the customer."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:77
+#, no-wrap
+msgid "Unix from a BSD Licensing Perspective"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:83
+msgid ""
+"AT&T, who owned the original Unix implementation, was a publicly regulated "
+"monopoly tied up in anti-trust court; it was legally unable to sell a "
+"product into the software market. It was, however, able to provide it to "
+"academic institutions for the price of media."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:89
+msgid ""
+"Universities rapidly adopted Unix after an OS conference publicized its "
+"availability. It was extremely helpful that Unix ran on the PDP-11, a very "
+"affordable 16-bit computer, and was coded in a high-level language that was "
+"demonstrably good for systems programming. The DEC PDP-11 had, in effect, "
+"an open hardware interface designed to make it easy for customers to write "
+"their own OS, which was common. As DEC founder Ken Olsen famously "
+"proclaimed, \"software comes from heaven when you have good hardware\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:95
+msgid ""
+"Unix author Ken Thompson returned to his alma mater, University of "
+"California Berkeley (UCB), in 1975 and taught the kernel line-by-line. This "
+"ultimately resulted in an evolving system known as BSD (Berkeley Standard "
+"Distribution). UCB converted Unix to 32-bits, added virtual memory, and "
+"implemented the version of the TCP/IP stack upon which the Internet was "
+"essentially built. UCB made BSD available for the cost of media, under what "
+"became known as \"the BSD license\". A customer purchased Unix from AT&T "
+"and then ordered a BSD tape from UCB."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:99
+msgid ""
+"In the mid-1980s a government anti-trust case against AT&T ended with the "
+"break-up of AT&T. AT&T still owned Unix and was now able to sell it. AT&T "
+"embarked on an aggressive licensing effort and most commercial Unixes of the "
+"day became AT&T-derived."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:105
+msgid ""
+"In the early 1990's AT&T sued UCB over license violations related to BSD. "
+"UCB discovered that AT&T had incorporated, without acknowledgment or "
+"payment, many improvements due to BSD into AT&T's products, and a lengthy "
+"court case, primarily between AT&T and UCB, ensued. During this period some "
+"UCB programmers embarked on a project to rewrite any AT&T code associated "
+"with BSD. This project resulted in a system called BSD 4.4-lite (lite "
+"because it was not a complete system; it lacked 6 key AT&T files)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:109
+msgid ""
+"A lengthy series of articles published slightly later in Dr. Dobbs magazine "
+"described a BSD-derived 386 PC version of Unix, with BSD-licensed "
+"replacement files for the 6 missing 4.4 lite files. This system, named "
+"386BSD, was due to ex-UCB programmer William Jolitz. It became the original "
+"basis of all the PC BSDs in use today."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:112
+msgid ""
+"In the mid 1990s, Novell purchased AT&T's Unix rights and a (then secret) "
+"agreement was reached to terminate the lawsuit. UCB soon terminated its "
+"support for BSD."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:114
+#, no-wrap
+msgid "The Current State of FreeBSD and BSD Licenses"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:120
+msgid ""
+"The so-called http://www.opensource.org/licenses/bsd-license.php[new BSD "
+"license] applied to FreeBSD within the last few years is effectively a "
+"statement that you can do anything with the program or its source, but you "
+"do not have any warranty and none of the authors has any liability "
+"(basically, you cannot sue anybody). This new BSD license is intended to "
+"encourage product commercialization. Any BSD code can be sold or included "
+"in proprietary products without any restrictions on the availability of your "
+"code or your future behavior."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:123
+msgid ""
+"Do not confuse the new BSD license with \"public domain\". While an item in "
+"the public domain is also free for all to use, it has no owner."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:125
+#, no-wrap
+msgid "The origins of the GPL"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:129
+msgid ""
+"While the future of Unix had been so muddled in the late 1980s and early "
+"1990s, the GPL, another development with important licensing considerations, "
+"reached fruition."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:138
+msgid ""
+"Richard Stallman, the developer of Emacs, was a member of the staff at MIT "
+"when his lab switched from home-grown to proprietary systems. Stallman "
+"became upset when he found that he could not legally add minor improvements "
+"to the system. (Many of Stallman's co-workers had left to form two "
+"companies based on software developed at MIT and licensed by MIT; there "
+"appears to have been disagreement over access to the source code for this "
+"software). Stallman devised an alternative to the commercial software "
+"license and called it the GPL, or \"GNU Public License\". He also started a "
+"non-profit foundation, the http://www.fsf.org[Free Software Foundation] "
+"(FSF), which intended to develop an entire operating system, including all "
+"associated software, that would not be subject to proprietary licensing. "
+"This system was called GNU, for \"GNU is Not Unix\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:143
+msgid ""
+"The GPL was designed to be the antithesis of the standard proprietary "
+"license. To this end, any modifications that were made to a GPL program "
+"were required to be given back to the GPL community (by requiring that the "
+"source of the program be available to the user) and any program that used or "
+"linked to GPL code was required to be under the GPL. The GPL was intended "
+"to keep software from becoming proprietary. As the last paragraph of the "
+"GPL states:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:145
+msgid ""
+"\"This General Public License does not permit incorporating your program "
+"into proprietary programs.\"<<one>>"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:147
+msgid ""
+"The http://www.opensource.org/licenses/gpl-license.php[GPL] is a complex "
+"license so here are some rules of thumb when using the GPL:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:149
+msgid ""
+"you can charge as much as you want for distributing, supporting, or "
+"documenting the software, but you cannot sell the software itself."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:150
+msgid ""
+"the rule-of-thumb states that if GPL source is required for a program to "
+"compile, the program must be under the GPL. Linking statically to a GPL "
+"library requires a program to be under the GPL."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:151
+msgid ""
+"the GPL requires that any patents associated with GPLed software must be "
+"licensed for everyone's free use."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:152
+msgid ""
+"simply aggregating software together, as when multiple programs are put on "
+"one disk, does not count as including GPLed programs in non-GPLed programs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:153
+msgid ""
+"output of a program does not count as a derivative work. This enables the "
+"gcc compiler to be used in commercial environments without legal problems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:154
+msgid ""
+"since the Linux kernel is under the GPL, any code statically linked with the "
+"Linux kernel must be GPLed. This requirement can be circumvented by "
+"dynamically linking loadable kernel modules. This permits companies to "
+"distribute binary drivers, but often has the disadvantage that they will "
+"only work for particular versions of the Linux kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:157
+msgid ""
+"Due in part to its complexity, in many parts of the world today the "
+"legalities of the GPL are being ignored in regard to Linux and related "
+"software. The long-term ramifications of this are unclear."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:159
+#, no-wrap
+msgid "The origins of Linux and the LGPL"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:164
+msgid ""
+"While the commercial Unix wars raged, the Linux kernel was developed as a PC "
+"Unix clone. Linus Torvalds credits the existence of the GNU C compiler and "
+"the associated GNU tools for the existence of Linux. He put the Linux "
+"kernel under the GPL."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:173
+msgid ""
+"Remember that the GPL requires anything that statically links to any code "
+"under the GPL also be placed under the GPL. The source for this code must "
+"thus be made available to the user of the program. Dynamic linking, "
+"however, is not considered a violation of the GPL. Pressure to put "
+"proprietary applications on Linux became overwhelming. Such applications "
+"often must link with system libraries. This resulted in a modified version "
+"of the GPL called the http://www.opensource.org/licenses/lgpl-license."
+"php[LGPL] (\"Library\", since renamed to \"Lesser\", GPL). The LGPL allows "
+"proprietary code to be linked to the GNU C library, glibc. You do not have "
+"to release the source code which has been dynamically linked to an LGPLed "
+"library."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:177
+msgid ""
+"If you statically link an application with glibc, such as is often required "
+"in embedded systems, you cannot keep your application proprietary, that is, "
+"the source must be released. Both the GPL and LGPL require any "
+"modifications to the code directly under the license to be released."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:179
+#, no-wrap
+msgid "Open Source licenses and the Orphaning Problem"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:184
+msgid ""
+"One of the serious problems associated with proprietary software is known as "
+"\"orphaning\". This occurs when a single business failure or change in a "
+"product strategy causes a huge pyramid of dependent systems and companies to "
+"fail for reasons beyond their control. Decades of experience have shown "
+"that the momentary size or success of a software supplier is no guarantee "
+"that their software will remain available, as current market conditions and "
+"strategies can change rapidly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:186
+msgid ""
+"The GPL attempts to prevent orphaning by severing the link to proprietary "
+"intellectual property."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:191
+msgid ""
+"A BSD license gives a small company the equivalent of software-in-escrow "
+"without any legal complications or costs. If a BSD-licensed program becomes "
+"orphaned, a company can simply take over, in a proprietary manner, the "
+"program on which they are dependent. An even better situation occurs when a "
+"BSD code-base is maintained by a small informal consortium, since the "
+"development process is not dependent on the survival of a single company or "
+"product line. The survivability of the development team when they are "
+"mentally in the zone is much more important than simple physical "
+"availability of the source code."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:193
+#, no-wrap
+msgid "What a license cannot do"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:197
+msgid ""
+"No license can guarantee future software availability. Although a copyright "
+"holder can traditionally change the terms of a copyright at anytime, the "
+"presumption in the BSD community is that such an attempt simply causes the "
+"source to fork."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:203
+msgid ""
+"The GPL explicitly disallows revoking the license. It has occurred, "
+"however, that a company (Mattel) purchased a GPL copyright (cphack), revoked "
+"the entire copyright, went to court, and prevailed <<two>>. That is, they "
+"legally revoked the entire distribution and all derivative works based on "
+"the copyright. Whether this could happen with a larger and more dispersed "
+"distribution is an open question; there is also some confusion regarding "
+"whether the software was really under the GPL."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:208
+msgid ""
+"In another example, Red Hat purchased Cygnus, an engineering company that "
+"had taken over development of the FSF compiler tools. Cygnus was able to do "
+"so because they had developed a business model in which they sold support "
+"for GNU software. This enabled them to employ some 50 engineers and drive "
+"the direction of the programs by contributing the preponderance of "
+"modifications. As Donald Rosenberg states \"projects using licenses like "
+"the GPL...live under constant threat of having someone take over the project "
+"by producing a better version of the code and doing it faster than the "
+"original owners.\" <<three>>"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:210
+#, no-wrap
+msgid "GPL Advantages and Disadvantages"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:214
+msgid ""
+"A common reason to use the GPL is when modifying or extending the gcc "
+"compiler. This is particularly apt when working with one-off specialty CPUs "
+"in environments where all software costs are likely to be considered "
+"overhead, with minimal expectations that others will use the resulting "
+"compiler."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:217
+msgid ""
+"The GPL is also attractive to small companies selling CDs in an environment "
+"where \"buy-low, sell-high\" may still give the end-user a very inexpensive "
+"product. It is also attractive to companies that expect to survive by "
+"providing various forms of technical support, including documentation, for "
+"the GPLed intellectual property world."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:220
+msgid ""
+"A less publicized and unintended use of the GPL is that it is very favorable "
+"to large companies that want to undercut software companies. In other "
+"words, the GPL is well suited for use as a marketing weapon, potentially "
+"reducing overall economic benefit and contributing to monopolistic behavior."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:223
+msgid ""
+"The GPL can present a real problem for those wishing to commercialize and "
+"profit from software. For example, the GPL adds to the difficulty a "
+"graduate student will have in directly forming a company to commercialize "
+"his research results, or the difficulty a student will have in joining a "
+"company on the assumption that a promising research project will be "
+"commercialized."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:228
+msgid ""
+"For those who must work with statically-linked implementations of multiple "
+"software standards, the GPL is often a poor license, because it precludes "
+"using proprietary implementations of the standards. The GPL thus minimizes "
+"the number of programs that can be built using a GPLed standard. The GPL "
+"was intended to not provide a mechanism to develop a standard on which one "
+"engineers proprietary products. (This does not apply to Linux applications "
+"because they do not statically link, rather they use a trap-based API.)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:232
+msgid ""
+"The GPL attempts to make programmers contribute to an evolving suite of "
+"programs, then to compete in the distribution and support of this suite. "
+"This situation is unrealistic for many required core system standards, which "
+"may be applied in widely varying environments which require commercial "
+"customization or integration with legacy standards under existing (non-GPL) "
+"licenses. Real-time systems are often statically linked, so the GPL and "
+"LGPL are definitely considered potential problems by many embedded systems "
+"companies."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:235
+msgid ""
+"The GPL is an attempt to keep efforts, regardless of demand, at the research "
+"and development stages. This maximizes the benefits to researchers and "
+"developers, at an unknown cost to those who would benefit from wider "
+"distribution."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:239
+msgid ""
+"The GPL was designed to keep research results from transitioning to "
+"proprietary products. This step is often assumed to be the last step in the "
+"traditional technology transfer pipeline and it is usually difficult enough "
+"under the best of circumstances; the GPL was intended to make it impossible."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:241
+#, no-wrap
+msgid "BSD Advantages"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:244
+msgid ""
+"A BSD style license is a good choice for long duration research or other "
+"projects that need a development environment that:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:246
+msgid "has near zero cost"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:247
+msgid "will evolve over a long period of time"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:248
+msgid ""
+"permits anyone to retain the option of commercializing final results with "
+"minimal legal issues."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:250
+msgid ""
+"This final consideration may often be the dominant one, as it was when the "
+"Apache project decided upon its license:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:254
+msgid ""
+"\"This type of license is ideal for promoting the use of a reference body of "
+"code that implements a protocol for common service. This is another reason "
+"why we choose it for the Apache group - many of us wanted to see HTTP "
+"survive and become a true multiparty standard, and would not have minded in "
+"the slightest if Microsoft or Netscape choose to incorporate our HTTP engine "
+"or any other component of our code into their products, if it helped further "
+"the goal of keeping HTTP common... All this means that, strategically "
+"speaking, the project needs to maintain sufficient momentum, and that "
+"participants realize greater value by contributing their code to the "
+"project, even code that would have had value if kept proprietary.\""
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:258
+msgid ""
+"Developers tend to find the BSD license attractive as it keeps legal issues "
+"out of the way and lets them do whatever they want with the code. In "
+"contrast, those who expect primarily to use a system rather than program it, "
+"or expect others to evolve the code, or who do not expect to make a living "
+"from their work associated with the system (such as government employees), "
+"find the GPL attractive, because it forces code developed by others to be "
+"given to them and keeps their employer from retaining copyright and thus "
+"potentially \"burying\" or orphaning the software. If you want to force "
+"your competitors to help you, the GPL is attractive."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:265
+msgid ""
+"A BSD license is not simply a gift. The question \"why should we help our "
+"competitors or let them steal our work?\" comes up often in relation to a "
+"BSD license. Under a BSD license, if one company came to dominate a product "
+"niche that others considered strategic, the other companies can, with "
+"minimal effort, form a mini-consortium aimed at reestablishing parity by "
+"contributing to a competitive BSD variant that increases market competition "
+"and fairness. This permits each company to believe that it will be able to "
+"profit from some advantage it can provide, while also contributing to "
+"economic flexibility and efficiency. The more rapidly and easily the "
+"cooperating members can do this, the more successful they will be. A BSD "
+"license is essentially a minimally complicated license that enables such "
+"behavior."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:268
+msgid ""
+"A key effect of the GPL, making a complete and competitive Open Source "
+"system widely available at cost of media, is a reasonable goal. A BSD style "
+"license, in conjunction with ad-hoc-consortiums of individuals, can achieve "
+"this goal without destroying the economic assumptions built around the "
+"deployment-end of the technology transfer pipeline."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:270
+#, no-wrap
+msgid "Specific Recommendations for using a BSD license"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:275
+msgid ""
+"The BSD license is preferable for transferring research results in a way "
+"that will widely be deployed and most benefit an economy. As such, research "
+"funding agencies, such as the NSF, ONR and DARPA, should encourage in the "
+"earliest phases of funded research projects, the adoption of BSD style "
+"licenses for software, data, results, and open hardware. They should also "
+"encourage formation of standards based around implemented Open Source "
+"systems and ongoing Open Source projects."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:277
+msgid ""
+"Government policy should minimize the costs and difficulties in moving from "
+"research to deployment. When possible, grants should require results to be "
+"available under a commercialization friendly BSD style license."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:278
+msgid ""
+"In many cases, the long-term results of a BSD style license more accurately "
+"reflect the goals proclaimed in the research charter of universities than "
+"what occurs when results are copyrighted or patented and subject to "
+"proprietary university licensing. Anecdotal evidence exists that "
+"universities are financially better rewarded in the long run by releasing "
+"research results and then appealing to donations from commercially "
+"successful alumni."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:279
+msgid ""
+"Companies have long recognized that the creation of de facto standards is a "
+"key marketing technique. The BSD license serves this role well, if a company "
+"really has a unique advantage in evolving the system. The license is legally "
+"attractive to the widest audience while the company's expertise ensures "
+"their control. There are times when the GPL may be the appropriate vehicle "
+"for an attempt to create such a standard, especially when attempting to "
+"undermine or co-opt others. The GPL, however, penalizes the evolution of "
+"that standard, because it promotes a suite rather than a commercially "
+"applicable standard. Use of such a suite constantly raises commercialization "
+"and legal issues. It may not be possible to mix standards when some are "
+"under the GPL and others are not. A true technical standard should not "
+"mandate exclusion of other standards for non-technical reasons."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:280
+msgid ""
+"Companies interested in promoting an evolving standard, which can become the "
+"core of other companies' commercial products, should be wary of the GPL. "
+"Regardless of the license used, the resulting software will usually devolve "
+"to whoever actually makes the majority of the engineering changes and most "
+"understands the state of the system. The GPL simply adds more legal friction "
+"to the result."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:281
+msgid ""
+"Large companies, in which Open Source code is developed, should be aware "
+"that programmers appreciate Open Source because it leaves the software "
+"available to the employee when they change employers. Some companies "
+"encourage this behavior as an employment perk, especially when the software "
+"involved is not directly strategic. It is, in effect, a front-loaded "
+"retirement benefit with potential lost opportunity costs but no direct "
+"costs. Encouraging employees to work for peer acclaim outside the company is "
+"a cheap portable benefit a company can sometimes provide with near zero "
+"downside."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:282
+msgid ""
+"Small companies with software projects vulnerable to orphaning should "
+"attempt to use the BSD license when possible. Companies of all sizes should "
+"consider forming such Open Source projects when it is to their mutual "
+"advantage to maintain the minimal legal and organization overheads "
+"associated with a true BSD-style Open Source project."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:283
+msgid ""
+"Non-profits should participate in Open Source projects when possible. To "
+"minimize software engineering problems, such as mixing code under different "
+"licenses, BSD-style licenses should be encouraged. Being leery of the GPL "
+"should particularly be the case with non-profits that interact with the "
+"developing world. In some locales where application of law becomes a costly "
+"exercise, the simplicity of the new BSD license, as compared to the GPL, may "
+"be of considerable advantage."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:285
+#, no-wrap
+msgid "Conclusion"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:290
+msgid ""
+"In contrast to the GPL, which is designed to prevent the proprietary "
+"commercialization of Open Source code, the BSD license places minimal "
+"restrictions on future behavior. This allows BSD code to remain Open Source "
+"or become integrated into commercial solutions, as a project's or company's "
+"needs change. In other words, the BSD license does not become a legal time-"
+"bomb at any point in the development process."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:292
+msgid ""
+"In addition, since the BSD license does not come with the legal complexity "
+"of the GPL or LGPL licenses, it allows developers and companies to spend "
+"their time creating and promoting good code rather than worrying if that "
+"code violates licensing."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:295
+#, no-wrap
+msgid "Bibliographical References"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:298
+msgid "[[[one,1]]] http://www.gnu.org/licenses/gpl.html"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:300
+msgid ""
+"[[[two,2]]] http://archives.cnn.com/2000/TECH/computing/03/28/cyberpatrol."
+"mirrors/"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:302
+msgid ""
+"[[[three,3]]] Open Source: the Unauthorized White Papers, Donald K. "
+"Rosenberg, IDG Books, 2000. Quotes are from page 114, \"Effects of the GNU "
+"GPL\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:304
+msgid ""
+"[[[four,4]]] In the \"What License to Use?\" section of http://www.oreilly."
+"com/catalog/opensources/book/brian.html"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:305
+msgid ""
+"This whitepaper is a condensation of an original work available at http://"
+"alumni.cse.ucsc.edu/~brucem/open_source_license.htm"
+msgstr ""
diff --git a/documentation/content/en/articles/building-products/_index.po b/documentation/content/en/articles/building-products/_index.po
new file mode 100644
index 0000000000..f7405dcdc2
--- /dev/null
+++ b/documentation/content/en/articles/building-products/_index.po
@@ -0,0 +1,1102 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/building-products/_index.adoc:1
+#, no-wrap
+msgid "How FreeBSD can help you build a better product"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/articles/building-products/_index.adoc:1
+#: documentation/content/en/articles/building-products/_index.adoc:13
+#, no-wrap
+msgid "Building Products with FreeBSD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:46
+msgid "Abstract"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:50
+msgid ""
+"The FreeBSD project is a worldwide, volunteer based, and collaborative "
+"project, which develops a portable and high-quality operating system. The "
+"FreeBSD project distributes the source code for its product under a liberal "
+"license, with the intention of encouraging the use of its code. "
+"Collaborating with the FreeBSD project can help organizations reduce their "
+"time to market, reduce engineering costs and improve their product quality."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:54
+msgid ""
+"This article examines the issues in using FreeBSD code in appliances and "
+"software products. It highlights the characteristics of FreeBSD that make "
+"it an excellent substrate for product development. The article concludes by "
+"suggesting a few \"best practices\" for organizations collaborating with the "
+"FreeBSD project."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:56
+msgid "'''"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/building-products/_index.adoc:60
+#, no-wrap
+msgid "Introduction"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:66
+msgid ""
+"FreeBSD today is well-known as a high-performance server operating system. "
+"It is deployed on millions of web servers and internet-facing hosts "
+"worldwide. FreeBSD code also forms an integral part of many products, "
+"ranging from appliances such as network routers, firewalls, and storage "
+"devices, to personal computers. Portions of FreeBSD have also been used in "
+"commercial shrink-wrapped software (see <<freebsd-intro>>)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:68
+msgid ""
+"In this article we look at the link:https://www.FreeBSD.org/[FreeBSD "
+"project] as a software engineering resource-as a collection of building "
+"blocks and processes which you can use to build products."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:71
+msgid ""
+"While FreeBSD's source is distributed freely to the public, to fully enjoy "
+"the benefits of the project's work, organizations need to _collaborate_ with "
+"the project. In subsequent sections of this article we discuss effective "
+"means of collaboration with the project and the pitfalls that need to be "
+"avoided while doing so."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:74
+#, no-wrap
+msgid ""
+"*Caveat Reader.* The author believes that the characteristics of the FreeBSD Project listed in this article were substantially true at the time the article was conceived and written (2005).\n"
+"However, the reader should keep in mind that the practices and processes used by open-source communities can change over time, and that the information in this article should therefore be taken as indicative rather than normative.\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:75
+#, no-wrap
+msgid "Target Audience"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:78
+msgid ""
+"This document would be of interest to the following broad groups of people:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:80
+msgid ""
+"Decision makers in product companies looking at ways to improve their "
+"product quality, reduce their time to market and lower engineering costs in "
+"the long term."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:81
+msgid ""
+"Technology consultants looking for best-practices in leveraging \"open-source"
+"\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:82
+msgid ""
+"Industry observers interested in understanding the dynamics of open-source "
+"projects."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:83
+msgid ""
+"Software developers seeking to use FreeBSD and looking for ways to "
+"contribute back."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:84
+#, no-wrap
+msgid "Article Goals"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:87
+msgid "After reading this article you should have:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:89
+msgid ""
+"An understanding of the goals of the FreeBSD Project and its organizational "
+"structure."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:90
+msgid ""
+"An understanding of its development model and release engineering processes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:91
+msgid ""
+"An understanding of how conventional corporate software development "
+"processes differ from that used in the FreeBSD project."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:92
+msgid ""
+"Awareness of the communication channels used by the project and the level of "
+"transparency you can expect."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:93
+msgid ""
+"Awareness of optimal ways of working with the project-how best to reduce "
+"engineering costs, improve time to market, manage security vulnerabilities, "
+"and preserve future compatibility with your product as the FreeBSD project "
+"evolves."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:94
+#, no-wrap
+msgid "Article Structure"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:97
+msgid "The rest of the article is structured as follows:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:99
+msgid ""
+"<<freebsd-intro>> introduces the FreeBSD project, explores its "
+"organizational structure, key technologies and release engineering processes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:100
+msgid ""
+"<<freebsd-collaboration>> describes ways to collaborate with the FreeBSD "
+"project. It examines common pitfalls encountered by corporates working with "
+"voluntary projects like FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:101
+msgid "<<conclusion>> concludes."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/building-products/_index.adoc:103
+#, no-wrap
+msgid "FreeBSD as a set of building blocks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:106
+msgid "FreeBSD makes an excellent foundation on which to build products:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:108
+msgid ""
+"FreeBSD source code is distributed under a liberal BSD license facilitating "
+"its adoption in commercial products <<Mon2005>> with minimum hassle."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:109
+msgid ""
+"The FreeBSD project has excellent engineering practices that can be "
+"leveraged."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:110
+msgid ""
+"The project offers exceptional transparency into its workings, allowing "
+"organizations using its code to plan effectively for the future."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:111
+msgid ""
+"The culture of the FreeBSD project, carried over from the Computer Science "
+"Research Group at The University of California, Berkeley <<McKu1999-1>>, "
+"fosters high-quality work. Some features in FreeBSD define the state of the "
+"art."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:114
+msgid ""
+"<<GoldGab2005>> examines the business reasons for using open-source in "
+"greater detail. For organizations, the benefits of using FreeBSD components "
+"in their products include a shorter time to market, lower development costs "
+"and lower development risks."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:115
+#, no-wrap
+msgid "Building with FreeBSD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:118
+msgid "Here are a few ways organizations have used FreeBSD:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:120
+msgid "As an upstream source for tested code for libraries and utilities."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:122
+msgid ""
+"By being \"downstream\" of the project, organizations leverage the new "
+"features, bug fixes and testing that the upstream code receives."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:123
+msgid ""
+"As an embedded OS (for example, for an OEM router and firewall device). In "
+"this model, organizations use a customized FreeBSD kernel and application "
+"program set along with a proprietary management layer for their device. OEMs "
+"benefit from new hardware support being added by the FreeBSD project "
+"upstream, and from the testing that the base system receives."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:125
+msgid ""
+"FreeBSD ships with a self-hosting development environment that allows easy "
+"creation of such configurations."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:126
+msgid ""
+"As a Unix compatible environment for the management functions of high-end "
+"storage and networking devices, running on a separate processor \"blade\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:130
+msgid ""
+"FreeBSD provides the tools for creating dedicated OS and application program "
+"images. Its implementation of a BSD unix API is mature and tested. FreeBSD "
+"can also provide a stable cross-development environment for the other "
+"components of the high-end device."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:131
+msgid ""
+"As a vehicle to get widespread testing and support from a worldwide team of "
+"developers for non-critical \"intellectual property\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:135
+msgid ""
+"In this model, organizations contribute useful infrastructural frameworks to "
+"the FreeBSD project (for example, see man:netgraph[3]). The widespread "
+"exposure that the code gets helps to quickly identify performance issues and "
+"bugs. The involvement of top-notch developers also leads to useful "
+"extensions to the infrastructure that the contributing organization also "
+"benefits from."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:136
+msgid ""
+"As a development environment supporting cross-development for embedded OSes "
+"like http://www.rtems.com/[RTEMS] and http://ecos.sourceware.org/[eCOS]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:138
+msgid ""
+"There are many full-fledged development environments in the {numports}-"
+"strong collection of applications ported and packaged with FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:139
+msgid ""
+"As a way to support a Unix-like API in an otherwise proprietary OS, "
+"increasing its palatability for application developers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:143
+msgid ""
+"Here parts of FreeBSD's kernel and application programs are \"ported\" to "
+"run alongside other tasks in the proprietary OS. The availability of a "
+"stable and well tested Unix(TM) API implementation can reduce the effort "
+"needed to port popular applications to the proprietary OS. As FreeBSD ships "
+"with high-quality documentation for its internals and has effective "
+"vulnerability management and release engineering processes, the costs of "
+"keeping up-to-date are kept low."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:145
+#, no-wrap
+msgid "Technologies"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:149
+msgid ""
+"There are a large number of technologies supported by the FreeBSD project. "
+"A selection of these are listed below:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:151
+msgid ""
+"A complete system that can cross-host itself for link:https://www.FreeBSD."
+"org/platforms/[many architectures:]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:152
+msgid ""
+"A modular symmetric multiprocessing capable kernel, with loadable kernel "
+"modules and a flexible and easy to use configuration system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:153
+msgid ""
+"Support for emulation of Linux(TM) and SVR4 binaries at near machine speeds. "
+"Support for binary Windows(TM) (NDIS) network drivers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:154
+msgid ""
+"Libraries for many programming tasks: archivers, FTP and HTTP support, "
+"thread support, in addition to a full POSIX(TM) like programming environment."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:155
+msgid ""
+"Security features: Mandatory Access Control (man:mac[9]), jails (man:"
+"jail[2]), ACLs, and in-kernel cryptographic device support."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:156
+msgid ""
+"Networking features: firewall-ing, QoS management, high-performance TCP/IP "
+"networking with support for many extensions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:158
+msgid ""
+"FreeBSD's in-kernel Netgraph (man:netgraph[4]) framework allows kernel "
+"networking modules to be connected together in flexible ways."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:159
+msgid ""
+"Support for storage technologies: Fibre Channel, SCSI, software and hardware "
+"RAID, ATA and SATA."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:161
+msgid ""
+"FreeBSD supports a number of filesystems, and its native UFS2 filesystem "
+"supports soft updates, snapshots and very large filesystem sizes (16TB per "
+"filesystem) <<McKu1999>>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:163
+msgid ""
+"FreeBSD's in-kernel GEOM (man:geom[4]) framework allows kernel storage "
+"modules to be composed in flexible ways."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:164
+msgid ""
+"Over {numports} ported applications, both commercial and open-source, "
+"managed via the FreeBSD ports collection."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:165
+#, no-wrap
+msgid "Organizational Structure"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:168
+msgid "FreeBSD's organizational structure is non-hierarchical."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:170
+msgid ""
+"There are essentially two kinds of contributors to FreeBSD, general users of "
+"FreeBSD, and developers with write access (known as _committers_ in the "
+"jargon) to the source base."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:174
+msgid ""
+"There are many thousands of contributors in the first group; the vast "
+"majority of contributions to FreeBSD come from individuals in this group. "
+"Commit rights (write access) to the repository are granted to individuals "
+"who contribute consistently to the project. Commit rights come with "
+"additional responsibilities, and new committers are assigned mentors to help "
+"them learn the ropes."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/articles/building-products/_index.adoc:175
+#, no-wrap
+msgid "FreeBSD Organization"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/articles/building-products/_index.adoc:176
+#, no-wrap
+msgid "freebsd-organization.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:179
+msgid ""
+"Conflict resolution is performed by a nine member \"Core Team\" that is "
+"elected from the group of committers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:183
+msgid ""
+"FreeBSD does not have \"corporate\" committers. Individual committers are "
+"required to take responsibility for the changes they introduce to the code. "
+"The extref:{committers-guide}[FreeBSD Committer's guide] <<ComGuide>> "
+"documents the rules and responsibilities for committers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:185
+msgid "FreeBSD's project model is examined in detail in <<Nik2005>>."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:186
+#, no-wrap
+msgid "FreeBSD Release Engineering Processes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:190
+msgid ""
+"FreeBSD's release engineering processes play a major role in ensuring that "
+"its released versions are of a high quality. At any point of time, "
+"FreeBSD's volunteers support multiple code lines (<<fig-freebsd-branches, "
+"FreeBSD Release Branches>>):"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:192
+msgid ""
+"New features and disruptive code enters on the development branch, also "
+"known as the _-CURRENT_ branch."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:193
+msgid ""
+"_-STABLE_ branches are code lines that are branched from HEAD at regular "
+"intervals. Only tested code is allowed onto a -STABLE branch. New features "
+"are allowed once they have been tested and stabilized in the -CURRENT branch."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:194
+msgid ""
+"_-RELEASE_ branches are maintained by the FreeBSD security team. Only bug "
+"fixes for critical issues are permitted onto -RELEASE branches."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/articles/building-products/_index.adoc:196
+#, no-wrap
+msgid "FreeBSD Release Branches"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/articles/building-products/_index.adoc:197
+#, no-wrap
+msgid "freebsd-branches.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:200
+msgid ""
+"Code lines are kept alive for as long as there is user and developer "
+"interest in them."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:203
+msgid ""
+"Machine architectures are grouped into \"tiers\"; _Tier 1_ architectures are "
+"fully supported by the project's release engineering and security teams, "
+"_Tier 2_ architectures are supported on a best effort basis, and "
+"experimental architectures comprise _Tier 3_. The list of extref:"
+"{committers-guide}[supported architectures, archs] is part of the FreeBSD "
+"documentation collection."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:206
+msgid ""
+"The release engineering team publishes a link:https://www.FreeBSD.org/releng/"
+"[road map] for future releases of FreeBSD on the project's web site. The "
+"dates laid down in the road map are not deadlines; FreeBSD is released when "
+"its code and documentation are ready."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:208
+msgid "FreeBSD's release engineering processes are described in <<RelEngDoc>>."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/building-products/_index.adoc:210
+#, no-wrap
+msgid "Collaborating with FreeBSD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:213
+msgid ""
+"Open-source projects like FreeBSD offer finished code of a very high quality."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:218
+msgid ""
+"While access to quality source code can reduce the cost of initial "
+"development, in the long-term the costs of managing change begin to "
+"dominate. As computing environments change over the years and new security "
+"vulnerabilities are discovered, your product too needs to change and adapt. "
+"Using open-source code is best viewed not as a one-off activity, but as an "
+"__ongoing process__. The best projects to collaborate with are the ones "
+"that are __live__; i.e., with an active community, clear goals and a "
+"transparent working style."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:220
+msgid ""
+"FreeBSD has an active developer community around it. At the time of writing "
+"there are many thousands of contributors from every populated continent in "
+"the world and over 300 individuals with write access to the project's source "
+"repositories."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:221
+msgid "The goals of the FreeBSD project are <<Hub1994>>:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:223
+msgid ""
+"To develop a high-quality operating system for popular computer hardware, "
+"and,"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:224
+msgid "To make our work available to all under a liberal license."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:226
+msgid ""
+"FreeBSD enjoys an open and transparent working culture. Nearly all "
+"discussion in the project happens by email, on link:https://lists.freebsd."
+"org/[public mailing lists] that are also archived for posterity. The "
+"project's policies are link:https://www.FreeBSD.org/internal/policies/"
+"[documented] and maintained under revision control. Participation in the "
+"project is open to all."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:228
+#, no-wrap
+msgid "Understanding FreeBSD culture"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:231
+msgid ""
+"To be able to work effectively with the FreeBSD project, you need to "
+"understand the project's culture."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:234
+msgid ""
+"Volunteer driven projects operate under different rules than for-profit "
+"corporates. A common mistake that companies make when venturing into the "
+"open-source world is that of underplaying these differences."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:236
+#, no-wrap
+msgid "*Motivation.* Most contributions to FreeBSD are done voluntarily without monetary rewards entering the picture. The factors that motivate individuals are complex, ranging from altruism, to an interest in solving the kinds of problems that FreeBSD attempts to solve. In this environment, \"elegance is never optional\"<<Nor1993>>.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:238
+#, no-wrap
+msgid "*The Long Term View.* FreeBSD traces its roots back nearly twenty years to the work of the Computer Science Research Group at the University of California Berkeley.footnote:[FreeBSD's source repository contains a history of the project since its inception, and there are CDROMs available that contain earlier code from the CSRG.] A number of the original CSRG developers remain associated with the project.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:240
+msgid ""
+"The project values long-term perspectives <<Nor2001>>. A frequent acronym "
+"encountered in the project is DTRT, which stands for \"Do The Right Thing\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:243
+#, no-wrap
+msgid ""
+"*Development Processes.* Computer programs are tools for communication: at one level programmers communicate their intentions using a precise notation to a tool (a compiler) that translates their instructions to executable code.\n"
+"At another level, the same notation is used for communication of intent between two programmers.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:247
+msgid ""
+"Formal specifications and design documents are seldom used in the project. "
+"Clear and well-written code and well-written change logs (<<fig-change-log, "
+"A sample change log entry>>) are used in their place. FreeBSD development "
+"happens by \"rough consensus and running code\"<<Carp1996>>."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/building-products/_index.adoc:253
+#, no-wrap
+msgid ""
+"r151864 | bde | 2005-10-29 09:34:50 -0700 (Sat, 29 Oct 2005) | 13 lines\n"
+"Changed paths:\n"
+" M /head/lib/msun/src/e_rem_pio2f.c\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/building-products/_index.adoc:263
+#, no-wrap
+msgid ""
+"Use double precision to simplify and optimize arg reduction for small\n"
+"and medium size args too: instead of conditionally subtracting a float\n"
+"17+24, 17+17+24 or 17+17+17+24 bit approximation to pi/2, always\n"
+"subtract a double 33+53 bit one. The float version is now closer to\n"
+"the double version than to old versions of itself -- it uses the same\n"
+"33+53 bit approximation as the simplest cases in the double version,\n"
+"and where the float version had to switch to the slow general case at\n"
+"|x| == 2^7*pi/2, it now switches at |x| == 2^19*pi/2 the same as the\n"
+"double version.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/building-products/_index.adoc:266
+#, no-wrap
+msgid ""
+"This speeds up arg reduction by a factor of 2 for |x| between 3*pi/4 and\n"
+"2^7*pi/4, and by a factor of 7 for |x| between 2^7*pi/4 and 2^19*pi/4.\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/articles/building-products/_index.adoc:267
+#, no-wrap
+msgid "A sample change log entry [[fig-change-log]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:270
+msgid ""
+"Communication between programmers is enhanced by the use of a common coding "
+"standard man:style[9]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:273
+#, no-wrap
+msgid ""
+"*Communication Channels.* FreeBSD's contributors are spread across the world.\n"
+"Email (and to a lesser extent, IRC) is the preferred means of communication in the project.\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:274
+#, no-wrap
+msgid "Best Practices for collaborating with the FreeBSD project"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:277
+msgid ""
+"We now look at a few best practices for making the best use of FreeBSD in "
+"product development."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/building-products/_index.adoc:278
+#, no-wrap
+msgid "Plan for the long term"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:281
+msgid ""
+"Setup processes that help in tracking the development of FreeBSD. For "
+"example:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:283
+#, no-wrap
+msgid "*Track FreeBSD source code.* The project makes it easy to mirror its SVN repository using extref:{committers-guide}[svnsync, svn-advanced-use-setting-up-svnsync]. Having the complete history of the source is useful when debugging complex problems and offers valuable insight into the intentions of the original developers. Use a capable source control system that allows you to easily merge changes between the upstream FreeBSD code base and your own in-house code.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:287
+msgid ""
+"<<fig-svn-blame, An annotated source listing generated using `svn blame`>> "
+"shows a portion of an annotated listing of the file referenced by the change "
+"log in <<fig-change-log, A sample change log entry>>. The ancestry of each "
+"line of the source is clearly visible. Annotated listings showing the "
+"history of every file that is part of FreeBSD are https://svnweb.freebsd.org/"
+"[available on the web]."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/building-products/_index.adoc:291
+#, no-wrap
+msgid "#REV #WHO #DATE #TEXT\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/building-products/_index.adoc:305
+#, no-wrap
+msgid ""
+"176410 bde 2008-02-19 07:42:46 -0800 (Tue, 19 Feb 2008) #include <sys/cdefs.h>\n"
+"176410 bde 2008-02-19 07:42:46 -0800 (Tue, 19 Feb 2008) __FBSDID(\"$FreeBSD$\");\n"
+" 2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994) \n"
+" 2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994) /* __ieee754_rem_pio2f(x,y)\n"
+" 8870 rgrimes 1995-05-29 22:51:47 -0700 (Mon, 29 May 1995) *\n"
+"176552 bde 2008-02-25 05:33:20 -0800 (Mon, 25 Feb 2008) * return the remainder of x rem pi/2 in *y\n"
+"176552 bde 2008-02-25 05:33:20 -0800 (Mon, 25 Feb 2008) * use double precision for everything except passing x\n"
+"152535 bde 2005-11-16 18:20:04 -0800 (Wed, 16 Nov 2005) * use __kernel_rem_pio2() for large x\n"
+" 2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994) */\n"
+" 2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994) \n"
+"176465 bde 2008-02-22 07:55:14 -0800 (Fri, 22 Feb 2008) #include <float.h>\n"
+"176465 bde 2008-02-22 07:55:14 -0800 (Fri, 22 Feb 2008) \n"
+" 2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994) #include \"math.h\"\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/articles/building-products/_index.adoc:306
+#, no-wrap
+msgid "An annotated source listing generated using `svn blame` [[fig-svn-blame]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:309
+#, no-wrap
+msgid "*Use a gatekeeper.* Appoint a _gatekeeper_ to monitor FreeBSD development, to keep an eye out for changes that could potentially impact your products.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:312
+#, no-wrap
+msgid ""
+"*Report bugs upstream.* If you notice bug in the FreeBSD code that you are using, file a https://www.FreeBSD.org/support/bugreports/[bug report].\n"
+"This step helps ensure that you do not have to fix the bug the next time you take a code drop from upstream.\n"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/building-products/_index.adoc:312
+#, no-wrap
+msgid "Leverage FreeBSD's release engineering efforts"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:315
+msgid ""
+"Use code from a -STABLE development branch of FreeBSD. These development "
+"branches are formally supported by FreeBSD's release engineering and "
+"security teams and comprise of tested code."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/building-products/_index.adoc:316
+#, no-wrap
+msgid "Donate code to reduce costs"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:320
+msgid ""
+"A major proportion of the costs associated with developing products is that "
+"of doing maintenance. By donating non-critical code to the project, you "
+"benefit by having your code see much wider exposure than it would otherwise "
+"get. This in turn leads to more bugs and security vulnerabilities being "
+"flushed out and performance anomalies being identified and fixed."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/building-products/_index.adoc:321
+#, no-wrap
+msgid "Get support effectively"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:326
+msgid ""
+"For products with tight deadlines, it is recommended that you hire or enter "
+"into a consulting agreement with a developer or firm with FreeBSD "
+"experience. The {freebsd-jobs} is a useful communication channel to find "
+"talent. The FreeBSD project maintains a link:https://www.FreeBSD.org/"
+"commercial/consult_bycat/[gallery of consultants and consulting firms] "
+"undertaking FreeBSD work. The http://www.bsdcertification.org/[BSD "
+"Certification Group] offers certification for all the major BSD derived OSes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:329
+msgid ""
+"For less critical needs, you can ask for help on the link:https://lists."
+"freebsd.org/[project mailing lists]. A useful guide to follow when asking "
+"for help is given in <<Ray2004>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/building-products/_index.adoc:329
+#, no-wrap
+msgid "Publicize your involvement"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:331
+msgid ""
+"You are not required to publicize your use of FreeBSD, but doing so helps "
+"both your effort as well as that of the project."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:335
+msgid ""
+"Letting the FreeBSD community know that your company uses FreeBSD helps "
+"improve your chances of attracting high quality talent. A large roster of "
+"support for FreeBSD also means more mind share for it among developers. "
+"This in turn yields a healthier foundation for your future."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/building-products/_index.adoc:335
+#, no-wrap
+msgid "Support FreeBSD developers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:341
+msgid ""
+"Sometimes the most direct way to get a desired feature into FreeBSD is to "
+"support a developer who is already looking at a related problem. Help can "
+"range from hardware donations to direct financial assistance. In some "
+"countries, donations to the FreeBSD project enjoy tax benefits. The project "
+"has a dedicated link:https://www.FreeBSD.org/donations/[donations liaison] "
+"to assist donors. The project also maintains a web page where developers "
+"link:https://www.FreeBSD.org/donations/wantlist/[list their needs]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:343
+msgid ""
+"As a policy the FreeBSD project extref:{contributors}[acknowledges] all "
+"contributions received on its web site."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/building-products/_index.adoc:345
+#, no-wrap
+msgid "Conclusion"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:349
+msgid ""
+"The FreeBSD project's goals are to create and give away the source code for "
+"a high-quality operating system. By working with the FreeBSD project you "
+"can reduce development costs and improve your time to market in a number of "
+"product development scenarios."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:353
+msgid ""
+"We examined the characteristics of the FreeBSD project that make it an "
+"excellent choice for being part of an organization's product strategy. We "
+"then looked at the prevailing culture of the project and examined effective "
+"ways of interacting with its developers. The article concluded with a list "
+"of best-practices that could help organizations collaborating with the "
+"project."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/building-products/_index.adoc:357
+#, no-wrap
+msgid "Bibliography"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:360
+msgid ""
+"[[Carp1996]] [Carp1996] http://www.ietf.org/rfc/rfc1958.txt[The "
+"Architectural Principles of the Internet] B. Carpenter. The Internet "
+"Architecture Board.The Internet Architecture Board. Copyright(R) 1996."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:362
+msgid ""
+"[[ComGuide]] [ComGuide] extref:{committers-guide}[Committer's Guide] The "
+"FreeBSD Project. Copyright(R) 2005."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:364
+msgid ""
+"[[GoldGab2005]] [GoldGab2005] http://dreamsongs.com/IHE/IHE.html[Innovation "
+"Happens Elsewhere: Open Source as Business Strategy] Ron Goldman. Richard "
+"Gabriel. Copyright(R) 2005. Morgan-Kaufmann."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:366
+msgid ""
+"[[Hub1994]] [Hub1994] extref:{contributing}[Contributing to the FreeBSD "
+"Project] Jordan Hubbard. Copyright(R) 1994-2005. The FreeBSD Project."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:368
+msgid ""
+"[[McKu1999]] [McKu1999] http://www.usenix.org/publications/library/"
+"proceedings/usenix99/mckusick.html[Soft Updates: A Technique for Eliminating "
+"Most Synchronous Writes in the Fast Filesystem] Kirk McKusick. Gregory "
+"Ganger. Copyright(R) 1999."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:370
+msgid ""
+"[[McKu1999-1]] [McKu1999-1] http://www.oreilly.com/catalog/opensources/book/"
+"kirkmck.html[Twenty Years of Berkeley Unix: From AT&T-Owned to Freely "
+"Redistributable] Marshall Kirk McKusick. http://www.oreilly.com/catalog/"
+"opensources/book/toc.html[Open Sources: Voices from the Open Source "
+"Revolution] O'Reilly Inc.. Copyright(R) 1993."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:372
+msgid ""
+"[[Mon2005]] [Mon2005] extref:{bsdl-gpl}[Why you should use a BSD style "
+"license for your Open Source Project] Bruce Montague. The FreeBSD Project. "
+"Copyright(R) 2005."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:374
+msgid ""
+"[[Nik2005]] [Nik2005] extref:{dev-model}[A project model for the FreeBSD "
+"Project] Niklas Saers. Copyright(R) 2005. The FreeBSD Project."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:376
+msgid ""
+"[[Nor1993]] [Nor1993] http://www.norvig.com/luv-slides.ps[Tutorial on Good "
+"Lisp Programming Style] Peter Norvig. Kent Pitman. Copyright(R) 1993."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:378
+msgid ""
+"[[Nor2001]] [Nor2001] http://www.norvig.com/21-days.html[Teach Yourself "
+"Programming in Ten Years] Peter Norvig. Copyright(R) 2001."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:380
+msgid ""
+"[[Ray2004]] [Ray2004] http://www.catb.org/~esr/faqs/smart-questions.html[How "
+"to ask questions the smart way] Eric Steven Raymond. Copyright(R) 2004."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:381
+msgid ""
+"[[RelEngDoc]] [RelEngDoc] extref:{releng}[FreeBSD Release Engineering] "
+"Murray Stokely. Copyright(R) 2001. The FreeBSD Project."
+msgstr ""
diff --git a/documentation/content/en/articles/committers-guide/_index.adoc b/documentation/content/en/articles/committers-guide/_index.adoc
index ade98950b1..1106e62635 100644
--- a/documentation/content/en/articles/committers-guide/_index.adoc
+++ b/documentation/content/en/articles/committers-guide/_index.adoc
@@ -2,9 +2,9 @@
title: Committer's Guide
authors:
- author: The FreeBSD Documentation Project
-copyright: 1999-2021 The FreeBSD Documentation Project
+copyright: 1999-2022 The FreeBSD Documentation Project
description: Introductory information for FreeBSD committers
-trademarks: ["freebsd", "coverity", "ibm", "intel", "general"]
+trademarks: ["freebsd", "coverity", "git", "github", "gitlab", "ibm", "intel", "general"]
weight: 25
tags: ["FreeBSD Committer's Guide", "Guide", "Community"]
---
@@ -48,7 +48,7 @@ All new committers should read this document before they start, and existing com
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).
+(For instance, some people only have rights to work with the Problem Report database.)
Please see <<non-committers>> for more information.
This document may also be of interest to members of the FreeBSD community who want to learn more about how the project works.
@@ -77,19 +77,19 @@ toc::[]
|`smtp.FreeBSD.org:587` (see also <<smtp-setup>>).
|`_src/_` Git Repository
-|`ssh://git@gitrepo.FreeBSD.org/src.git` (see also <<git-getting-started-base-layout>>).
+|`ssh://git@gitrepo.FreeBSD.org/src.git`
|`_doc/_` Git Repository
-|`ssh://git@gitrepo.FreeBSD.org/doc.git` (see also <<git-getting-started-doc-layout>>).
+|`ssh://git@gitrepo.FreeBSD.org/doc.git`
|`_ports/_` Git Repository
-|`ssh://git@gitrepo.FreeBSD.org/ports.git` (see also <<git-getting-started-ports-layout>>).
+|`ssh://git@gitrepo.FreeBSD.org/ports.git`
|_Internal Mailing Lists_
-|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 the `FreeBSD.org` cluster.)
+|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`.)
|_Core Team monthly reports_
-|[.filename]#/home/core/public/monthly-reports# on the `FreeBSD.org` cluster.
+|[.filename]#/home/core/public/reports# on the `FreeBSD.org` cluster.
|_Ports Management Team monthly reports_
|[.filename]#/home/portmgr/public/monthly-reports# on the `FreeBSD.org` cluster.
@@ -124,18 +124,14 @@ For those who do not yet have an OpenPGP key, or need a new key to meet FreeBSD
[[pgpkeys-create-steps]]
[.procedure]
====
-. Install [.filename]#security/gnupg#. Enter these lines in [.filename]#~/.gnupg/gpg.conf# to set minimum acceptable defaults:
+. Install [.filename]#security/gnupg#. Enter these lines in [.filename]#~/.gnupg/gpg.conf# to set minimum acceptable defaults for signing and new key preferences (see the link:https://www.gnupg.org/documentation/manuals/gnupg/GPG-Options.html[GnuPG options documentation] for more details):
+
[.programlisting]
....
-fixed-list-mode
-keyid-format 0xlong
+# Sorted list of preferred algorithms for signing (strongest to weakest).
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
+# Default preferences for new keys
+default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 CAMELLIA256 AES192 CAMELLIA192 AES CAMELLIA128 CAST5 BZIP2 ZLIB ZIP Uncompressed
....
. Generate a key:
+
@@ -177,7 +173,7 @@ Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
You need a Passphrase to protect your secret key.
....
-<.> 2048-bit keys with a three-year expiration provide adequate protection at present (2013-12). http://danielpocock.com/rsa-key-sizes-2048-or-4096-bits[] describes the situation in more detail.
+<.> 2048-bit keys with a three-year expiration provide adequate protection at present (2022-10).
<.> A three year key lifespan is short enough to obsolete keys weakened by advancing computer power, but long enough to reduce key management problems.
@@ -185,7 +181,7 @@ You need a Passphrase to protect your secret key.
+
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: http://world.std.com/~reinhold/diceware.html[], http://www.iusmentis.com/security/passphrasefaq/[], http://xkcd.com/936/[], http://en.wikipedia.org/wiki/Passphrase[].
+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[].
====
Protect the private key and passphrase.
@@ -266,7 +262,7 @@ Committers are encouraged to seek review for their work as part of the normal de
=== Policy for Committer Activity in Other Trees
* All committers may modify [.filename]#src/share/misc/committers-*.dot#, [.filename]#src/usr.bin/calendar/calendars/calendar.freebsd#, and [.filename]#ports/astro/xearth/files#.
-* doc committers may commit documentation changes to [.filename]#src# files, such as man pages, READMEs, fortune databases, calendar files, and comment fixes without approval from a src committer, subject to the normal care and tending of commits.
+* 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.
* 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".
* 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.
@@ -327,7 +323,7 @@ This primer is less ambitiously scoped than the old Subversion Primer, but shoul
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.
+Other sections of this guide cover more advanced topics related to contributing to the project.
The goal of this section is to highlight those bits of Git needed to track sources.
They assume a basic understanding of Git.
@@ -338,8 +334,14 @@ There are many primers for Git on the web, but the https://git-scm.com/book/en/v
This section describes the read-write access for committers to push the commits from developers or contributors.
+[[git-mini-daily-use]]
===== Daily use
+[NOTE]
+====
+In the examples below, replace `${repo}` with the name of the desired FreeBSD repository: `doc`, `ports`, or `src`.
+====
+
* Clone the repository:
+
[source,shell]
@@ -385,14 +387,31 @@ freebsd https://git.freebsd.org/${repo}.git (fetch)
freebsd git@gitrepo.freebsd.org:${repo}.git (push)
....
+
-Again, note that `gitrepo.freebsd.org` will be canonicalized to `repo.freebsd.org` in the future.
+Again, note that `gitrepo.freebsd.org` has been canonicalized to `repo.freebsd.org`.
* Install commit message template hook:
+
+For doc repository:
++
+[source,shell]
+....
+% cd .git/hooks
+% ln -s ../../.hooks/prepare-commit-msg
+....
++
+For ports repository:
++
+[source,shell]
+....
+% git config --add core.hooksPath .hooks
+....
++
+For src repository:
++
[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
+% cd .git/hooks
+% ln -s ../../tools/tools/git/hooks/prepare-commit-msg
....
[[admin-branch]]
@@ -416,22 +435,15 @@ git worktree add -b admin ../${repo}-admin internal/admin
....
For browsing `internal/admin` branch on web:
-https://cgit.freebsd.org/${repo}/log/?h=internal/admin
+`https://cgit.freebsd.org/${repo}/log/?h=internal/admin`
-For pushing, either specify the full refspec:
+For pushing, specify the full refspec:
[source,shell]
....
git push freebsd HEAD:refs/internal/admin
....
-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:
-
-[source,shell]
-....
-git config push.default freebsd
-....
-
==== Keeping Current With The FreeBSD src Tree
[[keeping_current]]
First step: cloning a tree.
@@ -440,13 +452,24 @@ 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.
-===== Branch names
-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.
+===== Branch Names
+FreeBSD-CURRENT uses the `main` branch.
+
+`main` is the default branch.
+
+For FreeBSD-STABLE, branch names include `stable/12` and `stable/13`.
+
+For FreeBSD-RELEASE, release engineering branch names include `releng/12.4` and `releng/13.2`.
+
+https://www.freebsd.org/releng/[] shows:
+
+* `main` and `stable/⋯` branches open
+* `releng/⋯` branches, each of which is frozen when a release is tagged.
+
+Examples:
+
+* 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
+* 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.
===== Repositories
Please see the <<admin,Administrative Details>> for the latest information on where to get FreeBSD sources.
@@ -461,12 +484,12 @@ 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.
[source,shell]
....
-% git clone -o freebsd $URL -b branch [dir]
+% git clone -o freebsd $URL -b branch [<directory>]
....
-is how you make a deep clone.
-'branch' should be one of the branches listed in the previous section.
-It is optional if it is the main branch.
-'dir' is an optional directory to place it in (the default will be the name of the repo you are cloning (src, doc, etc)).
+-- 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#).
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.
@@ -487,7 +510,7 @@ However, see below for a significant limitation of this approach.
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.
+Should you change your mind later, you can do `git fetch --unshallow` to get the old history.
[WARNING]
====
@@ -522,15 +545,15 @@ This pulls in all the revisions since your last update.
....
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.
+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.
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.
+The simplest is to use `--autostash` on the `git pull` command, but more sophisticated options are available.
==== Selecting a Specific Version
-In Git, the 'git checkout' checks out both branches and specific versions.
+In Git, `git checkout` checks out both branches and specific versions.
Git's versions are the long hashes rather than a sequential number.
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):
@@ -564,29 +587,29 @@ 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.
-Git makes bisecting changes easy with a powerful 'git bisect' command.
+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.
`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.
+`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.
[TIP]
====
-If you want to know the last version you checked out, you should use 'git reflog':
+If you want to know the last version you checked out, you should use `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
...
....
-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.
+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 5ef0bd68b515) and good would be a8163e165c5b.
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.
====
@@ -602,11 +625,11 @@ Bisecting: 1722 revisions left to test after this (roughly 11 steps)
....
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'.
+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).
+`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.
[[git-gpg-signing]]
@@ -649,7 +672,7 @@ For example, to encrypt for the subkey `DEADBEEF`, use `DEADBEEF!`.
Commit signatures can be verified by running either `git verify-commit <commit hash>`, or `git log --show-signature`.
-Tag signatures can be verified with `git verity-tag <tag name>`, or `git tag -v <tag name>`.
+Tag signatures can be verified with `git verify-tag <tag name>`, or `git tag -v <tag name>`.
////
Commented out for now until we decide what to do.
@@ -667,8 +690,8 @@ The cgit repository web interface for use with web browsers is at https://cgit.F
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).
There is also a mirror on GitHub, see extref:{handbook}/mirrors[External mirrors, mirrors] for an overview.
-The 'current' branch is 'main' .
-The quarterly branches are named 'yyyyQn' for year 'yyyy' and quarter 'n'.
+The _latest_ branch is `main`.
+The _quarterly_ branches are named `yyyyQn` for year 'yyyy' and quarter 'n'.
[[port-commit-message-formats]]
===== Commit message formats
@@ -700,7 +723,7 @@ Another blank line should be added if there are any metadata fields, so that the
==== Managing Local Changes
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).
+If you have no local changes you can skip this section.
One item that is important for all of them: all changes are local until pushed.
Unlike Subversion, Git uses a distributed model.
@@ -709,16 +732,16 @@ However, if you have local changes, you can use the same tool to manage them as
All changes that you have not pushed are local and can easily be modified (git rebase, discussed below does this).
===== Keeping local changes
-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).
+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'.
+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.
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.
+Stashing is also integrated with the `git pull` command: just add `--autostash` to the command line.
===== Keeping a local branch
[[keeping_a_local_branch]]
@@ -729,7 +752,7 @@ 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.
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.
+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.
====== Create a branch
@@ -766,9 +789,10 @@ 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.
+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.
====== Time to update
+
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.
@@ -792,7 +816,7 @@ 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.
+A pointer to a complete treatment can be found at the end of this section.
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:
@@ -810,15 +834,14 @@ Could not apply 646e0f9cda11... no color ls
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):
[source,shell]
-....
-<<<<<<< HEAD
-#ifdef COLORLS_NEW
-#include <terminfo.h>
-=======
-#undef COLORLS
-#ifdef COLORLS
-#include <termcap.h>
->>>>>>> 646e0f9cda11... no color ls
+ <<<<<<< HEAD
+ #ifdef COLORLS_NEW
+ #include <terminfo.h>
+ =======
+ #undef COLORLS
+ #ifdef COLORLS
+ #include <termcap.h>
+ >>>>>>> 646e0f9cda11... no color ls
....
The new code is first, and your code is second.
The right fix here is to just add a #undef COLORLS_NEW before #ifdef and then delete the old changes:
@@ -843,7 +866,7 @@ If the commit message is still accurate, just exit the editor.
If you get stuck during the rebase, do not panic.
git rebase --abort will take you back to a clean slate.
It is important, though, to start with an unmodified tree.
-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.
+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.
For more on this topic, https://www.freecodecamp.org/news/the-ultimate-guide-to-git-merge-and-git-rebase/ provides a rather extensive treatment.
It is a good resource for issues that arise occasionally but are too obscure for this guide.
@@ -859,7 +882,7 @@ If you have a deep clone, the following will suffice:
If you have a local branch, though, there are one or two caveats.
First, rebase will rewrite history, so you will likely want to do something to save it.
Second, jumping branches tends to cause more conflicts.
-If we pretend the example above was relative to stable/12, then to move to main, I'd suggest the following:
+If we pretend the example above was relative to stable/12, then to move to `main`, I'd suggest the following:
[source,shell]
....
% git checkout no-color-ls
@@ -869,50 +892,9 @@ If we pretend the example above was relative to stable/12, then to move to main,
What the above does is checkout no-color-ls.
Then create a new name for it (no-color-ls-stable-12) in case you need to get back to it.
-Then you rebase onto the main branch.
+Then you rebase onto the `main` branch.
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
-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).
-
-===== Migrating from an existing Git clone
-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.
-
-When you have only a few local changes, the easiest way would be to cherry-pick those changes to the new base:
-[source,shell]
-....
-% git checkout main
-% git cherry-pick old_branch..your_branch
-....
-Or alternatively, do the same thing with rebase:
-[source,shell]
-....
-% git rebase --onto main master your_branch
-....
-
-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).
-
-You can find out by looking up the same commit that are found on both parents:
-[source,shell]
-....
-% git show old_branch
-....
-You will see a commit message, now search for that in the new branch:
-[source,shell]
-....
-% git log --grep="commit message on old_branch" freebsd/main
-....
-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:
-[source,shell]
-....
-% git checkout -b stage _hash_found_from_git_log_
-....
-Then perform a merge of the old branch:
-[source,shell]
-....
-% git merge -s ours -m "Mark old branch as merged" old_branch
-....
-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.
+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).
[[mfc-with-git]]
=== MFC (Merge From Current) Procedures
@@ -995,9 +977,9 @@ Once the MFC is complete, you can delete the temporary branch:
==== MFC a vendor import
-Vendor imports are the only thing in the tree that creates a merge commit in the main line.
+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 mainline (though there may be some exceptions).
+Generally, you'll want the first parent's diff since that's the diff to `main` (though there may be some exceptions).
[source,shell]
....
@@ -1006,9 +988,9 @@ Generally, you'll want the first parent's diff since that's the diff to mainline
is typically what you want.
This will tell cherry-pick to apply the correct diff.
-There are some, hopefully, rare cases where it's possible that the mainline was merged backwards by the conversion script.
-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.
-Just do
+There are some, hopefully, rare cases where it's possible that the `main` branch was merged backwards by the conversion script.
+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.
+Just do:
[source,shell]
....
% git cherry-pick --abort
@@ -1025,7 +1007,7 @@ then the easiest way is to use `git reset --hard` like so:
% git reset --hard freebsd/stable/12
....
though if you have some revs you want to keep, and others you don't,
-using 'git rebase -i' is better.
+using `git rebase -i` is better.
==== Considerations when MFCing
@@ -1037,7 +1019,7 @@ When committing source commits to stable and releng branches, we have the follow
With Subversion, we used the following practices to achieve these goals:
-* Using 'MFC' and 'MFS' tags to mark commits that merged changes from another branch.
+* Using `MFC` and `MFS` tags to mark commits that merged changes from another branch.
* Squashing fixup commits into the main commit when merging a change.
* Recording mergeinfo so that `svn mergeinfo --show-revs` worked.
@@ -1052,17 +1034,8 @@ Instead, when this document refers to "merge commits", it means a commit origina
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 head 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.
-
-There are a few options for resolving this:
-
-1. 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`.
-
-2. 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.
+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.
==== Commit message standards
===== Marking MFCs
@@ -1081,7 +1054,7 @@ Should it include the metadata from the original commit unchanged, or should it
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.
+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.
@@ -1092,268 +1065,13 @@ This new metadata will have to be added via `git commit --amend` or similar afte
We may also want to reserve some metadata fields in MFC commits such as Phabricator URLs for use by re@ in the future.
Preserving existing metadata provides a very simple workflow.
-Developers can just use `git cherry-pick -x` without having to edit the log message.
+Developers use `git cherry-pick -x` without having to edit the log message.
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.
The bottom line is that developers will likely need to curate their commit message for MFCs that are non-trivial.
-==== Examples
-
-===== Merging a Single Subversion Commit
-
-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.
-
-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`:
-
-[source,shell]
-....
-% git log main --grep 368685
-commit ce8395ecfda2c8e332a2adf9a9432c2e7f35ea81
-Author: John Baldwin <jhb@FreeBSD.org>
-Date: Wed Dec 16 00:11:30 2020 +0000
-
- Use the 't' modifier to print a ptrdiff_t.
-
- Reviewed by: imp
- Obtained from: CheriBSD
- Sponsored by: DARPA
- Differential Revision: https://reviews.freebsd.org/D27576
-
-Notes:
- svn path=/head/; revision=368685
-....
-
-Next, MFC the commit to a `stable/12` checkout:
-
-[source,shell]
-....
-git checkout stable/12
-git cherry-pick -x ce8395ecfda2c8e332a2adf9a9432c2e7f35ea81 --edit
-....
-
-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:
-
-[source,shell]
-....
-[stable/12 3e3a548c4874] Use the 't' modifier to print a ptrdiff_t.
- Date: Wed Dec 16 00:11:30 2020 +0000
- 1 file changed, 1 insertion(+), 1 deletion(-)
-....
-
-The contents of the MFCd commit can be examined via `git show`:
-
-[source,shell]
-....
-% git show
-commit 3e3a548c487450825679e4bd63d8d1a67fd8bd2d (HEAD -> stable/12)
-Author: John Baldwin <jhb@FreeBSD.org>
-Date: Wed Dec 16 00:11:30 2020 +0000
-
- Use the 't' modifier to print a ptrdiff_t.
-
- Obtained from: CheriBSD
- Sponsored by: DARPA
-
- (cherry picked from commit ce8395ecfda2c8e332a2adf9a9432c2e7f35ea81)
-
-diff --git a/sys/compat/linuxkpi/common/include/linux/printk.h b/sys/compat/linuxkpi/common/include/linux/printk.h
-index 31802bdd2c99..e6510e9e9834 100644
---- a/sys/compat/linuxkpi/common/include/linux/printk.h
-+++ b/sys/compat/linuxkpi/common/include/linux/printk.h
-@@ -68,7 +68,7 @@ print_hex_dump(const char *level, const char *prefix_str,
- printf("[%p] ", buf);
- break;
- case DUMP_PREFIX_OFFSET:
-- printf("[%p] ", (const char *)((const char *)buf -
-+ printf("[%#tx] ", ((const char *)buf -
- (const char *)buf_old));
- break;
- default:
-....
-
-The MFC commit can now be published via `git push`
-
-[source,shell]
-....
-% git push freebsd
-Enumerating objects: 17, done.
-Counting objects: 100% (17/17), done.
-Delta compression using up to 4 threads
-Compressing objects: 100% (7/7), done.
-Writing objects: 100% (9/9), 817 bytes | 204.00 KiB/s, done.
-Total 9 (delta 5), reused 1 (delta 1), pack-reused 0
-To gitrepo-dev.FreeBSD.org:src.git
- 525bd9c9dda7..3e3a548c4874 stable/12 -> stable/12
-....
-
-===== Merging a Single Subversion Commit with a Conflict
-
-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.
-
-As above, the first step is to map the Subversion commit to a Git hash:
-
-[source,shell]
-....
-% git log main --grep 368314
-commit 99963f5343a017e934e4d8ea2371a86789a46ff9
-Author: John Baldwin <jhb@FreeBSD.org>
-Date: Thu Dec 3 22:01:13 2020 +0000
-
- Don't transmit mbufs that aren't yet ready on TOE sockets.
-
- This includes mbufs waiting for data from sendfile() I/O requests, or
- mbufs awaiting encryption for KTLS.
-
- Reviewed by: np
- MFC after: 2 weeks
- Sponsored by: Chelsio Communications
- Differential Revision: https://reviews.freebsd.org/D27469
-
-Notes:
- svn path=/head/; revision=368314
-....
-
-Next, MFC the commit to a `stable/12` checkout:
-
-[source,shell]
-....
-% git checkout stable/12
-% git cherry-pick -x 99963f5343a017e934e4d8ea2371a86789a46ff9 --edit
-Auto-merging sys/dev/cxgbe/tom/t4_cpl_io.c
-CONFLICT (content): Merge conflict in sys/dev/cxgbe/tom/t4_cpl_io.c
-warning: inexact rename detection was skipped due to too many files.
-warning: you may want to set your merge.renamelimit variable to at least 7123 and retry the command.
-error: could not apply 99963f5343a0... Don't transmit mbufs that aren't yet ready on TOE sockets.
-hint: after resolving the conflicts, mark the corrected paths
-hint: with 'git add <paths>' or 'git rm <paths>'
-hint: and commit the result with 'git commit'
-....
-
-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:
-
-[source,shell]
-....
-% git status
-On branch stable/12
-Your branch is up to date with 'upstream/stable/12'.
-
-You are currently cherry-picking commit 99963f5343a0.
- (fix conflicts and run "git cherry-pick --continue")
- (use "git cherry-pick --skip" to skip this patch)
- (use "git cherry-pick --abort" to cancel the cherry-pick operation)
-
-Unmerged paths:
- (use "git add <file>..." to mark resolution)
- both modified: sys/dev/cxgbe/tom/t4_cpl_io.c
-
-no changes added to commit (use "git add" and/or "git commit -a")
-....
-
-After editing the file to resolve the conflict, `git status` shows the conflict as resolved:
-
-[source,shell]
-....
-% git status
-On branch stable/12
-Your branch is up to date with 'upstream/stable/12'.
-
-You are currently cherry-picking commit 99963f5343a0.
- (all conflicts fixed: run "git cherry-pick --continue")
- (use "git cherry-pick --skip" to skip this patch)
- (use "git cherry-pick --abort" to cancel the cherry-pick operation)
-
-Changes to be committed:
- modified: sys/dev/cxgbe/tom/t4_cpl_io.c
-....
-
-The cherry-pick can now be completed:
-
-[source,shell]
-....
-% git cherry-pick --continue
-....
-
-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.
-
-The contents of the MFC commit can be examined via `git show`:
-
-[source,shell]
-....
-% git show
-commit 525bd9c9dda7e7c7efad2d4570c7fd8e1a8ffabc (HEAD -> stable/12)
-Author: John Baldwin <jhb@FreeBSD.org>
-Date: Thu Dec 3 22:01:13 2020 +0000
-
- Don't transmit mbufs that aren't yet ready on TOE sockets.
-
- This includes mbufs waiting for data from sendfile() I/O requests, or
- mbufs awaiting encryption for KTLS.
-
- Sponsored by: Chelsio Communications
-
- (cherry picked from commit 99963f5343a017e934e4d8ea2371a86789a46ff9)
-
-diff --git a/sys/dev/cxgbe/tom/t4_cpl_io.c b/sys/dev/cxgbe/tom/t4_cpl_io.c
-index 8e8c2b8639e6..43861f10b689 100644
---- a/sys/dev/cxgbe/tom/t4_cpl_io.c
-+++ b/sys/dev/cxgbe/tom/t4_cpl_io.c
-@@ -746,6 +746,8 @@ t4_push_frames(struct adapter *sc, struct toepcb *toep, int drop)
- for (m = sndptr; m != NULL; m = m->m_next) {
- int n;
-
-+ if ((m->m_flags & M_NOTAVAIL) != 0)
-+ break;
- if (IS_AIOTX_MBUF(m))
- n = sglist_count_vmpages(aiotx_mbuf_pages(m),
- aiotx_mbuf_pgoff(m), m->m_len);
-@@ -821,8 +823,9 @@ t4_push_frames(struct adapter *sc, struct toepcb *toep, int drop)
-
- /* nothing to send */
- if (plen == 0) {
-- KASSERT(m == NULL,
-- ("%s: nothing to send, but m != NULL", __func__));
-+ KASSERT(m == NULL || (m->m_flags & M_NOTAVAIL) != 0,
-+ ("%s: nothing to send, but m != NULL is ready",
-+ __func__));
- break;
- }
-
-@@ -910,7 +913,7 @@ t4_push_frames(struct adapter *sc, struct toepcb *toep, int drop)
- toep->txsd_avail--;
-
- t4_l2t_send(sc, wr, toep->l2te);
-- } while (m != NULL);
-+ } while (m != NULL && (m->m_flags & M_NOTAVAIL) == 0);
-
- /* Send a FIN if requested, but only if there's no more data to send */
- if (m == NULL && toep->flags & TPF_SEND_FIN)
-....
-
-The MFC commit can now be published via `git push`
-
-[source,shell]
-....
-git push freebsd
-Enumerating objects: 13, done.
-Counting objects: 100% (13/13), done.
-Delta compression using up to 4 threads
-Compressing objects: 100% (7/7), done.
-Writing objects: 100% (7/7), 819 bytes | 117.00 KiB/s, done.
-Total 7 (delta 6), reused 0 (delta 0), pack-reused 0
-To gitrepo.FreeBSD.org:src.git
- f4d0bc6aa6b9..525bd9c9dda7 stable/12 -> stable/12
-....
-
[[vendor-import-git]]
=== Vendor Imports with Git
@@ -1407,8 +1125,24 @@ package:net/rsync[] is commonly installed, so I'll use that.
% git tag -a vendor/NetBSD/mtree/20201211
....
-Note: I run the `git diff` and `git status` commands to make sure nothing weird was present.
-Also I used `-m` to illustrate, but you should compose a proper message in an editor (using a commit message template).
+It is critical to verify that the source code you are importing comes from a
+trustworthy source. Many open-source projects use cryptographic signatures to
+sign code changes, git tags, and/or source code tarballs. Always verify these
+signatures, and use isolation mechanisms like jails, chroot, in combination with
+a dedicated, non-privileged user account that is different from the one you
+regularly use (see the Updating the FreeBSD source tree section below for
+more details), until you are confident that the source code you are importing
+looks safe. Following the upstream development and occasionally reviewing the
+upstream code changes can greatly help in improving code quality and benefit
+everyone involved. It is also a good idea to examine the git diff results
+before importing them into the vendor area.
+
+Always run the `git diff` and `git status` commands and examine the results
+carefully. When in doubt, it is useful to do a `git annotate` on the vendor
+branch or the upstream git repository to see who and why a change was made.
+
+In the example above we used `-m` to illustrate, but you should compose a
+proper message in an editor (using a commit message template).
It is also important to create an annotated tag using `git tag -a`, otherwise the push will be rejected.
Only annotated tags are allowed to be pushed.
@@ -1431,6 +1165,12 @@ At this point you can push the import to `vendor` into our repo.
Now you need to update the mtree in FreeBSD.
The sources live in `contrib/mtree` since it is upstream software.
+From time to time, we may have to make changes to the contributed code to
+better satisfy FreeBSD's needs. Whenever possible, please try to contribute
+the local changes back to the upstream projects, this helps them to better
+support FreeBSD, and also saves your time for future conflict resolutions
+when importing updates.
+
[source,shell]
....
% cd ../src
@@ -1438,9 +1178,35 @@ The sources live in `contrib/mtree` since it is upstream software.
....
This would generate a subtree merge commit of `contrib/mtree` against the local `vendor/NetBSD/mtree` branch.
+Examine the diff from the merge result and the contents of the
+upstream branch. If the merge reduced our local changes to more
+trivial difference like blank line or indenting changes, try amending
+the local changes to reduce diff against upstream, or try to
+contribute the remaining changes back to the upstream project.
If there were conflicts, you would need to fix them before committing.
Include details about the changes being merged in the merge commit message.
+Some open-source software includes a `configure` script that generates files
+used to define how the code is built; usually, these generated files like
+`config.h` should be updated as part of the import process. When doing
+this, always keep in mind that these scripts are executable code running
+under the current user's credentials. This process should always be run
+in an isolated environment, ideally inside a jail that does not have
+network access, and with an unprivileged account; or, at minimum, a
+dedicated account that is different from the user account you normally
+use for everyday purposes or for pushing to the FreeBSD source
+code repository. This minimizes the risk of encountering bugs that can
+cause data loss or, in worse cases, maliciously planted code. Using an
+isolated jail also prevents the configure scripts from detecting locally
+installed software packages, which may lead to unexpected results.
+
+When testing your changes, run them in a chroot or jailed environment,
+or even within a virtual machine first, especially for kernel or library
+modifications. This approach helps prevent adverse interactions with
+your working environment. It can be particularly beneficial for
+changes to libraries that many base system components use,
+among others.
+
==== Rebasing your change against latest FreeBSD source tree
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.
@@ -1448,56 +1214,85 @@ Because the current policy recommends against using merges, if the upstream Free
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.
-The easiest way to do this would be to create a side branch with the **contents** of the merged tree:
+The following steps should be taken to easily recreate the merge commit as if `git rebase --merge-commits` worked properly:
-[source,shell]
-....
-% cd ../src
-% git fetch freebsd
-% git checkout -b merge_result
-% git merge freebsd/main
-....
+* cd to the top of the repo
+* Create a side branch `XXX` with the **contents** of the merged tree.
+* Update this side branch `XXX` to be merged and up-to-date with FreeBSD's `main` branch.
+** In the worst case scenario, you would still have to resolve merge conflicts, if there was any, but this should be really rare.
+** Resolve conflicts, and collapse multiple commits down to 1 if need be (without conflicts, there's no collapse needed)
+* checkout `main`
+* create a branch `YYY` (allows for easier unwinding if things go wrong)
+* Re-do the subtree merge
+* Instead of resolving any conflicts from the subtree merge, checkout the contents of XXX on top of it.
+** The trailing `.` is important, as is being at the top level of the repo.
+** Rather than switching branches to XXX, it splats the contents of XXX on top of the repo
+* Commit the results with the prior commit message (the example assumes there's only one merge on the XXX branch).
+* Make sure the branches are the same.
+* Do whatever review you need, including having others check it out if you think that's needed.
+* Push the commit, if you 'lost the race' again, just redo these steps again (see below for a recipe)
+* Delete the branches once the commit is upstream. They are throw-a-way.
-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.
-
-Now, checkout `freebsd/main` again as `new_merge`, and redo the merge:
+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):
[source,shell]
....
-% git checkout -b new_merge freebsd/main
-% git subtree merge -P contrib/mtree vendor/NetBSD/mtree
+% cd ../src # CD to top of tree
+% git checkout -b XXX # create new throw-away XXX branch for merge
+% git fetch freebsd # Get changes from upstream from upstream
+% git merge freebsd/main # Merge the changes and resolve conflicts
+% git checkout -b YYY freebsd/main # Create 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
+% git diff XXX YYY # Should be empty
+% git show YYY # Should only have changes you want, and be a merge commit from vendor branch
....
-Instead of resolving the conflicts, perform this instead:
-
+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:
[source,shell]
....
-% git checkout merge_result .
+% git checkout -B YYY freebsd/main # Create new throw-away YYY branch if starting over is just going to be easier
....
-Which will overwrite the files with conflicts with the version found in `merge_result`.
+==== Pushing the changes
-Examine the tree against `merge_result` to make sure that you haven't missed deleted files:
+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.
+
+After review, when you are sure it is a good change, you can push it to the FreeBSD repo:
[source,shell]
....
-% git diff merge_result
+% 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
....
-==== Pushing the changes
+Note: I used `XXX` and `YYY` to make it obvious they are terrible names and should not leave your machine.
+If you use such names for other work, then you'll need to pick different names, or risk losing the other work.
+There is nothing magic about these names.
+Upstream will not allow you to push them, but never the less, please pay attention to the exact commands above.
+Some commands use syntax that differs only slightly from typical uses and that different behavior is critical to this recipe working.
-Once you are sure that you have a set of deltas you think is 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.
+==== How to redo things if need be
-After review, when you are sure it is a good change, you can push it to the FreeBSD repo:
+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.
[source,shell]
....
-% git push freebsd main
+% 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
....
+Then go check it out as above and push as above when ready.
+
=== Creating a new vendor branch
There are a number of ways to create a new vendor branch.
@@ -1593,7 +1388,7 @@ Here 'good' means:
. All the right files, and none of the wrong ones, were merged into contrib/glorbnitz.
. No other changes are in the tree.
-. 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.
+. 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.
. UPDATING should be updated if there is anything of note, such as user visible changes, important upgrade concerns, etc.
[NOTE]
@@ -1602,90 +1397,6 @@ This hasn't connected `glorbnitz` to the build yet.
How so do that is specific to the software being imported and is beyond the scope of this tutorial.
====
-=== FreeBSD Src Committer Transition Guide
-
-This section is designed to walk people through the conversion process from Subversion to Git, written from the source committer's point of view.
-
-==== Migrating from a Subversion tree
-
-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.
-
-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`):
-
-[source,shell]
-....
-% sudo pkg install git
-....
-
-===== No staged changes migration
-
-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:
-
-[source,shell]
-....
-% git clone -o freebsd --config remote.freebsd.fetch='+refs/notes/*:refs/notes/*' https://git.freebsd.org/src.git freebsd-src
-....
-
-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 .
-
-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:
-
-[source,shell]
-....
-% git config --add remote.freebsd.fetch "+refs/notes/*:refs/notes/*"
-% git fetch
-....
-
-At this point you have the src checked out into a Git tree, ready to do other things.
-
-===== But I have changes that I've not committed
-
-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.
-
-[source,shell]
-....
-% cd path-to-svn-checkout-tree
-% svn diff > /tmp/src.diff
-% cd _mumble_/freebsd-src
-% git checkout -b working
-....
-
-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.
-
-[source,shell]
-....
-% git apply /tmp/src.diff
-....
-
-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:
-
-[source,shell]
-....
-% git add _files_
-% git commit
-....
-
-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.
-
-At this point, your work is preserved, and in the Git repository.
-
===== Keeping current
So, time passes.
@@ -1694,7 +1405,7 @@ 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.
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.
+Alternatively, `git pull --rebase` is useful if you have changes staged in the `main` branch.
[source,shell]
....
@@ -1723,7 +1434,7 @@ The longer form is also recommended.
% git merge --ff-only freebsd/main
....
-These commands reset your tree to the main branch, and then update it from where you pulled the tree from originally.
+These commands reset your tree to the `main` branch, and then update it from where you pulled the tree from originally.
It's important to switch to `main` before doing this so it moves forward.
Now, it's time to move the changes forward:
@@ -1760,9 +1471,9 @@ freefall% gen-gitconfig.sh
on freefall.freebsd.org to get a recipe that you can use directly, assuming /usr/local/bin is in the PATH.
-The below command merges the `working` branch into the upstream main line.
+The below command merges the `working` branch into the upstream `main` branch.
It's important that you curate your changes to be just like you want them in the FreeBSD source repo before doing this.
-This syntax pushes the `working` branch to main, moving the `main` branch forward.
+This syntax pushes the `working` branch to `main`, moving the `main` branch forward.
You will only be able to do this if this results in a linear change to `main` (e.g. no merges).
[source,shell]
@@ -1804,7 +1515,7 @@ Note: merging vendor branch commits will not work with this technique.
===== Finding the Subversion Revision
-You'll need to make sure that you've fetched the notes (see the `No staged changes migration` section above for details.
+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:
[source,shell]
@@ -1822,51 +1533,6 @@ If you have a specific version in mind, you can use this construct:
to find the specific revision.
The hex number after 'commit' is the hash you can use to refer to this commit.
-==== Migrating from GitHub fork
-
-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.
-
-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...
-
-===== Add the new `freebsd` upstream repository:
-
-[source,shell]
-....
-% git remote add freebsd https://git.freebsd.org/src.git
-% git fetch freebsd
-% git checkout --track freebsd/main
-....
-
-===== Rebase all your WIP branches.
-
-For each branch FOO, do the following after fetching the `freebsd` sources and creating a local `main` branch with the above checkout:
-
-[source,shell]
-....
-% git rebase -i freebsd/master FOO --onto main
-....
-
-And you'll now be tracking the official repository.
-You can then follow the `Keeping Current` section above to stay up to date.
-
-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:
-
-[source,shell]
-....
-% git remote set-url --push freebsd ssh://git@gitrepo.freebsd.org/src.git
-....
-
-(note that gitrepo.freebsd.org will be change to repo.freebsd.org in the future.)
-
-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.
-
[[git-faq]]
=== Git FAQ
@@ -1926,9 +1592,9 @@ Here's https://adventurist.me/posts/00296[a good writeup] that goes into more de
==== Developers
-===== Ooops! I committed to `main` instead of a branch.
+===== Ooops! I committed to `main`, instead of another branch.
-**Q:** From time to time, I goof up and commit to main instead of to a branch. What do I do?
+**Q:** From time to time, I goof up and mistakenly commit to the `main` branch. What do I do?
**A:** First, don't panic.
@@ -1969,7 +1635,7 @@ cherry-pick it over.
**Q:** But what if I want to commit a few changes to `main`, but keep the rest in `wilma` for some reason?
**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).
-You can cherry pick those changes into main, then push to the parent repository.
+You can cherry pick those changes into `main`, then push to the parent repository.
Once you've done that, cleanup couldn't be simpler: just `git rebase -i`.
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).
There's no need to switch back to wilma to adjust it: just rebase!
@@ -2046,8 +1712,8 @@ You can also stack:
....
and you are ready to try again.
-The 'checkout -B' with the hash combines checking out and creating a branch for it.
-The -B instead of -b forces the movement of a pre-existing branch.
+The `checkout -B` with the hash combines checking out and creating a branch for it.
+The `-B` instead of `-b` forces the movement of a pre-existing branch.
Either way works, which is what's great (and awful) about Git.
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:
@@ -2074,7 +1740,7 @@ this produces the same effect, but I have to read a lot more and severed heads a
===== Ooops! I did a `git pull` and it created a merge commit, what do I do?
-**Q:** I was on autopilot and did a `git pull` for my development tree and that created a merge commit on the mainline.
+**Q:** I was on autopilot and did a `git pull` for my development tree and that created a merge commit on `main`.
How do I recover?
**A:** This can happen when you invoke the pull with your development branch checked out.
@@ -2224,7 +1890,7 @@ However, there are two disadvantages to this if you want to use it for anything
First, this is a 'bare repository' which has the repository database, but no checked out worktree.
This is great for mirroring, but terrible for day to day work.
-There's a number of ways around this with 'git worktree':
+There's a number of ways around this with `git worktree`:
[source,shell]
....
@@ -2261,7 +1927,7 @@ To setup your repository to do that:
git config --add remote.freebsd.fetch '+refs/*:refs/freebsd/*'
....
-which will put everything in the upstream repository into your local repository's 'refs/freebsd/' namespace.
+which will put everything in the upstream repository into your local repository's `refs/freebsd/` namespace.
Please note, that this also grabs all the unconverted vendor branches and the number of refs associated with them is quite large.
You'll need to refer to these 'refs' with their full name because they aren't in and of Git's regular namespaces.
@@ -2276,9 +1942,9 @@ would look at the log for the vendor branch for zlib starting at 1.2.10.
=== Collaborating with others
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, in order to share changes in a user-generated branch.
+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.
-The following instructions show how to set up a user-generated branch, based on the FreeBSD main branch, and push it to GitHub.
+The following instructions show how to set up a user-generated branch, based on the FreeBSD `main` branch, and push it to GitHub.
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.>>
@@ -2475,7 +2141,7 @@ Those who have been given commit rights to the FreeBSD repositories must follow
[[commit-steps]]
[.procedure]
====
-*Procedure 1. Steps for New Committers*
+*Steps for New Committers*
. Add an Author Entity
+
@@ -2487,7 +2153,7 @@ Those who have been given commit rights to the FreeBSD repositories must follow
[.filename]#doc/shared/contrib-additional.adoc# - _Remove_ the entry. Entries are sorted by first name.
. Add a News Item
+
-[.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].
+[.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.
. Add a PGP Key
+
`{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.
@@ -2507,13 +2173,15 @@ It is very important to have a current PGP/GnuPG key in the repository. The key
Add an entry for each additional mentor/mentee relationship in the bottom section.
. Generate a Kerberos Password
+
-See <<kerberos-ldap>> to generate or set a Kerberos for use with other FreeBSD services like the bug tracking database.
+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).
. Optional: Enable Wiki Account
+
-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 https://wiki.freebsd.org/AboutWiki[AboutWiki Page] to obtain one. Contact mailto:wiki-admin@FreeBSD.org[wiki-admin@FreeBSD.org] if you need help with your Wiki account.
+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.
. Optional: Update Wiki Information
+
-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], and https://wiki.freebsd.org/Community/Dogs[Dogs of FreeBSD] pages.
+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.
. Optional: Update Ports with Personal Information
+
[.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.
@@ -2676,10 +2344,11 @@ freebsd_smtp:
hosts_require_auth = smtp.freebsd.org
Authenticators:
-fixed_plain:
+freebsd_plain:
driver = plaintext
public_name = PLAIN
client_send = ^example/mail^examplePassword
+ client_condition = ${if eq{$host}{smtp.freebsd.org}}
....
Create [.filename]#/usr/local/etc/exim/freebsd_send# with the following content:
@@ -2709,7 +2378,7 @@ Detailed information on how to access these branches can be found in <<admin-bra
== Pre-Commit Review
Code review is one way to increase the quality of software.
-The following guidelines apply to commits to the `head` (-CURRENT) branch of the `src` repository.
+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:
* All non-trivial changes should be reviewed before they are committed to the repository.
@@ -2879,7 +2548,8 @@ The key words or phrases are:
Typically used when there is no PR, for example if the issue was reported on
a mailing list.
-|`Submitted by:`
+|`Submitted by:` +
+(deprecated)
|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.
|`Reviewed by:`
@@ -2912,6 +2582,7 @@ There are several cases where approval is customary:
* commits to an area of the tree covered by the LOCKS file (src)
* during a release cycle
* committing to a repo where you do not hold a commit bit (e.g. src committer committing to docs)
+* committing to a port maintained by someone else
While under mentorship, get mentor approval before the commit. Enter the mentor's username in this field, and note that they are a mentor:
@@ -2939,9 +2610,6 @@ Approved by: re (username)
|`MFC to:`
|If the commit should be merged to a subset of stable branches, specify the branch names.
-|`MFC with:`
-|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.
-
|`MFH:`
|If the commit is to be merged into a ports quarterly branch name, specify the quarterly branch. For example `2021Q2`.
@@ -2962,6 +2630,10 @@ Approved by: re (username)
It should include the entire URL to the pull request, as these often act as code reviews for the code.
For example: `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:`
|ID certifies compliance with https://developercertificate.org/
@@ -3087,7 +2759,7 @@ The FreeBSD Project suggests and uses this text as the preferred license scheme:
[.programlisting]
....
/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ * SPDX-License-Identifier: BSD-2-Clause
*
* Copyright (c) [year] [your name]
*
@@ -3122,7 +2794,7 @@ If you have code in the tree with the advertising clause, please consider removi
In fact, please consider using the above license for your code.
The FreeBSD project discourages completely new licenses and variations on the standard licenses.
-New licenses require the approval of the {core-email} to reside in the main repository.
+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.
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.
@@ -3175,13 +2847,19 @@ As of March 2021, approximately 25,000 out of 90,000 files in the tree have been
== Developer Relations
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.
-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 review just as a developer would have before becoming a committer.
+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#.
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.
-An example script that lists each person who has committed to a given file along with the number of commits each person has made can be found at on `freefall` at [.filename]#~eadler/bin/whodid#.
+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:
+
+[source,shell]
+----
+% git -C /path/to/repo shortlog -sne --since="2 years" -- relative/path/to/file
+----
+
If queries go unanswered or the committer otherwise indicates a lack of interest in the area affected, go ahead and commit it.
[IMPORTANT]
@@ -3196,7 +2874,7 @@ If a commit does results in controversy erupting, it may be advisable to conside
Remember, with a version control system we can always change it back.
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.
+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.
Disagree honestly.
@@ -3235,8 +2913,8 @@ Once your question is answered, if no one pointed you to documentation that spel
== Bugzilla
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.
+If you commit a fix or suggestion found in the PR database, be sure to close the PR.
+It is also considered nice if you take time to close any other PRs associated with your commits.
Committers with non-``FreeBSD.org`` Bugzilla accounts can have the old account merged with the `FreeBSD.org` account by following these steps:
@@ -3294,7 +2972,7 @@ If there is something you want merged from FreeBSD-CURRENT to FreeBSD-STABLE (wh
`{so-name}` is the link:https://www.FreeBSD.org/security/[FreeBSD Security Officer] and oversees the `{security-officer}`.
{committers-name}::
-{svn-src-all}, {svn-ports-all} and {svn-doc-all} are the mailing lists that the version control system uses to send commit messages to.
+{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.
@@ -3472,11 +3150,11 @@ If you have not done it before, chances are good that you do not actually know t
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.
. Test your changes before committing them.
+
-This may sound obvious, but if it really were so obvious then we probably would not see so many cases of people clearly not doing this.
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.
. Do not commit to contributed software without _explicit_ approval from the respective maintainers.
@@ -3504,14 +3182,70 @@ In an effort to make it easier to keep FreeBSD portable across the platforms we
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.
-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.
-
-We will continue to re-evaluate this policy as cost and availability of the 64-bit platforms change.
-
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.
+[[compilers]]
+=== Policy on Multiple Compilers
+
+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 unduly increasing the testing matrix.
+Older and obscure compilers, as well as older dialects of the languages, 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.
+
+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.
+
+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.
+
+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.
+
+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.
+
+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.
+
+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.
+
+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.
+
+==== Current Compiler Versions
+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.
+
=== Other Suggestions
When committing documentation changes, use a spell checker before committing.
@@ -3614,7 +3348,7 @@ The native "ABI" generally shares certain properties with the kernel ABI such as
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.
-=== Tier 1: Fully-Supported Architectures
+==== Tier 1: Fully-Supported Architectures
Tier 1 platforms are the most mature FreeBSD platforms.
They are supported by the security officer, release engineering, and Ports Management Team.
@@ -3650,7 +3384,7 @@ Collectively, developers are required to provide the following to maintain the T
* 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.
* 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.
-=== Tier 2: Developmental and Niche Architectures
+==== Tier 2: Developmental and Niche Architectures
Tier 2 platforms are functional, but less mature FreeBSD platforms.
They are not supported by the security officer, release engineering, and Ports Management Team.
@@ -3678,7 +3412,7 @@ Collectively, developers are required to provide the following to maintain the T
* 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.
* New features that are not yet implemented on Tier 2 architectures should provide a means of disabling them on those architectures.
-=== Tier 3: Experimental Architectures
+==== Tier 3: Experimental Architectures
Tier 3 platforms have at least partial FreeBSD support.
They are _not_ supported by the security officer, release engineering, and Ports Management Team.
@@ -3689,7 +3423,7 @@ Initial support for Tier 3 platforms may exist in a separate repository rather t
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.
-=== Unsupported Architectures
+==== Unsupported Architectures
Other platforms are not supported in any form by the project.
The project previously described these as Tier 4 systems.
@@ -3737,7 +3471,7 @@ Don't forget to <<port-commit-message-formats,setup git hooks for the ports tree
Check the port, preferably to make sure it compiles and packages correctly.
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.
+See the extref:{porters-handbook}testing[Portclippy / Portfmt, testing-portclippy] and the extref:{porters-handbook}testing[poudriere, testing-poudriere] sections.
You do not necessarily have to eliminate all warnings but make sure you have fixed the simple ones.
@@ -3748,7 +3482,7 @@ To close a PR, change the state to `Issue Resolved` and the resolution as `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:
+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]
....
@@ -3853,8 +3587,8 @@ Merging commits to the quarterly branch (a process we call MFH for a historical
% git push
....
-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.
+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.
[[ports-qa-new-category]]
=== Creating a New Category
@@ -3977,7 +3711,7 @@ Full package builds will be done with the patches provided by the submitter, and
== Issues Specific to Developers Who Are Not Committers
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).
+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:
* <<admin>>
@@ -3994,7 +3728,7 @@ Get your mentor to add you to the "Additional Contributors" ([.filename]#doc/sha
[[google-analytics]]
== Information About Google Analytics
-As of December 12, 2012, Google Analytics was enabled on the FreeBSD Project website to collect anonymized usage statistics regarding usage of the site.
+As of December 12, 2012, Google Analytics was enabled on the FreeBSD Project website to collect anonymized usage statistics regarding usage of the site.
[NOTE]
====
@@ -4037,7 +3771,7 @@ FreeBSD committers can get a free 4-CD or DVD set at conferences from http://www
https://gandi.net[Gandi] provides website hosting, cloud computing, domain registration, and X.509 certificate services.
Gandi offers an E-rate discount to all FreeBSD developers.
-In order to streamline the process of getting the discount first set up a Gandi account, fill in the billing information and select the currency.
+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.
[[benefits-rsync]]
diff --git a/documentation/content/en/articles/committers-guide/_index.po b/documentation/content/en/articles/committers-guide/_index.po
new file mode 100644
index 0000000000..bb85f6fe75
--- /dev/null
+++ b/documentation/content/en/articles/committers-guide/_index.po
@@ -0,0 +1,8465 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/committers-guide/_index.adoc:1
+#, no-wrap
+msgid "Introductory information for FreeBSD committers"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:45
+msgid "Abstract"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:68
+#, no-wrap
+msgid "_Login Methods_"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:70
+#, no-wrap
+msgid "man:ssh[1], protocol 2 only"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:71
+#, no-wrap
+msgid "_Main Shell Host_"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:73
+#, no-wrap
+msgid "`freefall.FreeBSD.org`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:74
+#, no-wrap
+msgid "_Reference Machines_"
+msgstr ""
+
+#. 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:77
+#, no-wrap
+msgid "_SMTP Host_"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:79
+#, no-wrap
+msgid "`smtp.FreeBSD.org:587` (see also <<smtp-setup>>)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:80
+#, no-wrap
+msgid "`_src/_` Git Repository"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:82
+#, no-wrap
+msgid "`ssh://git@gitrepo.FreeBSD.org/src.git`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:83
+#, no-wrap
+msgid "`_doc/_` Git Repository"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:85
+#, no-wrap
+msgid "`ssh://git@gitrepo.FreeBSD.org/doc.git`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:86
+#, no-wrap
+msgid "`_ports/_` Git Repository"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:88
+#, no-wrap
+msgid "`ssh://git@gitrepo.FreeBSD.org/ports.git`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:89
+#, no-wrap
+msgid "_Internal Mailing Lists_"
+msgstr ""
+
+#. 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:92
+#, no-wrap
+msgid "_Core Team monthly reports_"
+msgstr ""
+
+#. 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:95
+#, no-wrap
+msgid "_Ports Management Team monthly reports_"
+msgstr ""
+
+#. 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:98
+#, no-wrap
+msgid "_Noteworthy `src/` Git Branches:_"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:99
+#, no-wrap
+msgid "`stable/n` (`n`-STABLE), `main` (-CURRENT)"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:104
+msgid "Useful links:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:106
+msgid "link:https://www.FreeBSD.org/internal/[FreeBSD Project Internal Pages]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:107
+msgid "link:https://www.FreeBSD.org/internal/machines/[FreeBSD Project Hosts]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:108
+msgid ""
+"link:https://www.FreeBSD.org/administration/[FreeBSD Project Administrative "
+"Groups]"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:110
+#, no-wrap
+msgid "OpenPGP Keys for FreeBSD"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:117
+#, no-wrap
+msgid "Creating a Key"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 for signing and new key "
+"preferences (see the link:https://www.gnupg.org/documentation/manuals/gnupg/"
+"GPG-Options.html[GnuPG options documentation] for more details):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:135
+#, no-wrap
+msgid ""
+"# Sorted list of preferred algorithms for signing (strongest to weakest).\n"
+"personal-digest-preferences SHA512 SHA384 SHA256 SHA224\n"
+"# Default preferences for new keys\n"
+"default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 CAMELLIA256 AES192 CAMELLIA192 AES CAMELLIA128 CAST5 BZIP2 ZLIB ZIP Uncompressed\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:137
+msgid "Generate a key:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:144
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:165
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:171
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:174
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:177
+msgid ""
+"2048-bit keys with a three-year expiration provide adequate protection at "
+"present (2022-10)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:179
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:181
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:185
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:189
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:191
+msgid ""
+"Committing the new key is shown in <<commit-steps, Steps for New "
+"Committers>>."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:193
+#, no-wrap
+msgid "Kerberos and LDAP web Password for FreeBSD Cluster"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:198
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:200
+msgid "https://bugs.freebsd.org/bugzilla[Bugzilla]"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:201
+msgid "https://ci.freebsd.org[Jenkins]"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:203
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:207
+#, no-wrap
+msgid "% ssh kpasswd.freebsd.org\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:212
+msgid "This must be done from a machine outside of the FreeBSD.org cluster."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:215
+msgid ""
+"A Kerberos password can also be set manually by logging into `freefall."
+"FreeBSD.org` and running:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:219
+#, no-wrap
+msgid "% kpasswd\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:225
+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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:228
+#, no-wrap
+msgid "Commit Bit Types"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:234
+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 ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:240
+#, no-wrap
+msgid "__Committer Type__"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:241
+#, no-wrap
+msgid "__Responsible__"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:243
+#, no-wrap
+msgid "__Tree Components__"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:244
+#, no-wrap
+msgid "src"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:245
+#, no-wrap
+msgid "core@"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:247
+#, no-wrap
+msgid "src/"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:248
+#, no-wrap
+msgid "doc"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:249
+#, no-wrap
+msgid "doceng@"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:251
+#, no-wrap
+msgid "doc/, ports/, src/ documentation"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:252
+#, no-wrap
+msgid "ports"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:253
+#, no-wrap
+msgid "portmgr@"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:254
+#, no-wrap
+msgid "ports/"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:259
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:261
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:262
+#, no-wrap
+msgid "Policy for Committer Activity in Other Trees"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:265
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:266
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:268
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:269
+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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:271
+#, no-wrap
+msgid "Documentation Implicit (Blanket) Approval"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:275
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:277
+msgid "Blanket approval applies to these types of fixes:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:279
+msgid "Typos"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:280
+msgid "Trivial fixes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:282
+msgid ""
+"Punctuation, URLs, dates, paths and file names with outdated or incorrect "
+"information, and other common mistakes that may confound the readers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:285
+msgid ""
+"Over the years, some implicit approvals were granted in the doc tree. This "
+"list shows the most common cases:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:287
+msgid ""
+"Changes in [.filename]#documentation/content/en/books/porters-handbook/"
+"versions/_index.adoc#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:289
+msgid ""
+"extref:{porters-handbook}versions/[__FreeBSD_version Values (Porter's "
+"Handbook)], mainly used for src committers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:290
+msgid "Changes in [.filename]#doc/shared/contrib-additional.adoc#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:292
+msgid ""
+"extref:{contributors}[Additional FreeBSD Contributors, contrib-additional] "
+"maintenance."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:293
+msgid "All link:#commit-steps[Steps for New Committers], doc related"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:294
+msgid "Security advisories; Errata Notices; Releases;"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:296
+msgid "Used by {security-officer} and {re}."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:297
+msgid "Changes in [.filename]#website/content/en/donations/donors.adoc#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:299
+msgid "Used by {donations}."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:301
+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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:303
+#, no-wrap
+msgid "Git Primer"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:306
+#, no-wrap
+msgid "Git basics"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:313
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:315
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:317
+#, no-wrap
+msgid "Git Mini Primer"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:320
+msgid ""
+"This primer is less ambitiously scoped than the old Subversion Primer, but "
+"should cover the basics."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:321
+#, no-wrap
+msgid "Scope"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:327
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:331
+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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:333
+#, no-wrap
+msgid "Getting Started For Developers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:336
+msgid ""
+"This section describes the read-write access for committers to push the "
+"commits from developers or contributors."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:338
+#, no-wrap
+msgid "Daily use"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:343
+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:346
+msgid "Clone the repository:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:350
+#, no-wrap
+msgid "% git clone -o freebsd --config remote.freebsd.fetch='+refs/notes/*:refs/notes/*' https://git.freebsd.org/${repo}.git\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:353
+msgid "Then you should have the official mirrors as your remote:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:359
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:362
+msgid "Configure the FreeBSD committer data:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:365
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:372
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:375
+msgid "Set the push URL:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:379
+#, no-wrap
+msgid "% git remote set-url --push freebsd git@gitrepo.freebsd.org:${repo}.git\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:382
+msgid ""
+"Then you should have separated fetch and push URLs as the most efficient "
+"setup:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:388
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:391
+msgid ""
+"Again, note that `gitrepo.freebsd.org` has been canonicalized to `repo."
+"freebsd.org`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:393
+msgid "Install commit message template hook:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:395
+msgid "For doc repository:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:400
+#, no-wrap
+msgid ""
+"% cd .git/hooks\n"
+"% ln -s ../../.hooks/prepare-commit-msg\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:403
+msgid "For ports repository:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:407
+#, no-wrap
+msgid "% git config --add core.hooksPath .hooks\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:410
+msgid "For src repository:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:415
+#, no-wrap
+msgid ""
+"% cd .git/hooks\n"
+"% ln -s ../../tools/tools/git/hooks/prepare-commit-msg\n"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:418
+#, no-wrap
+msgid "\"admin\" branch"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:421
+msgid ""
+"The `access` and `mentors` files are stored in an orphan branch, `internal/"
+"admin`, in each repository."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:423
+msgid ""
+"Following example is how to check out the `internal/admin` branch to a local "
+"branch named `admin`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:429
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:431
+msgid "Alternatively, you can add a worktree for the `admin` branch:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:435
+#, no-wrap
+msgid "git worktree add -b admin ../${repo}-admin internal/admin\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:439
+msgid ""
+"For browsing `internal/admin` branch on web: `https://cgit.freebsd.org/"
+"${repo}/log/?h=internal/admin`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:441
+msgid "For pushing, specify the full refspec:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:445
+#, no-wrap
+msgid "git push freebsd HEAD:refs/internal/admin\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:447
+#, no-wrap
+msgid "Keeping Current With The FreeBSD src Tree"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:454
+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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:455
+#, no-wrap
+msgid "Branch Names"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:457
+msgid "FreeBSD-CURRENT uses the `main` branch."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:459
+msgid "`main` is the default branch."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:461
+msgid "For FreeBSD-STABLE, branch names include `stable/12` and `stable/13`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:463
+msgid ""
+"For FreeBSD-RELEASE, release engineering branch names include `releng/12.4` "
+"and `releng/13.2`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:465
+msgid "https://www.freebsd.org/releng/[] shows:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:467
+msgid "`main` and `stable/⋯` branches open"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:468
+msgid "`releng/⋯` branches, each of which is frozen when a release is tagged."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:470
+msgid "Examples:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:472
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:473
+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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:474
+#, no-wrap
+msgid "Repositories"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:477
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:480
+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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:481
+#, no-wrap
+msgid "Deep Clone"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:485
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:488
+#, no-wrap
+msgid "% git clone -o freebsd $URL -b branch [<directory>]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:493
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:498
+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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:499
+#, no-wrap
+msgid "Shallow Clone"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:505
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:509
+#, no-wrap
+msgid "% git clone -o freebsd -b branch --depth 1 $URL [dir]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:514
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:519
+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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:521
+#, no-wrap
+msgid "Building"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:525
+msgid ""
+"Once you've downloaded, building is done as described in the handbook, e.g.:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:532
+#, no-wrap
+msgid ""
+"% cd src\n"
+"% make buildworld\n"
+"% make buildkernel\n"
+"% make installkernel\n"
+"% make installworld\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:534
+msgid "so that won't be covered in depth here."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:537
+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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:538
+#, no-wrap
+msgid "Updating"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:542
+msgid ""
+"To update both types of trees uses the same commands. This pulls in all the "
+"revisions since your last update."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:545
+#, no-wrap
+msgid "% git pull --ff-only\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:550
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:553
+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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:554
+#, no-wrap
+msgid "Selecting a Specific Version"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:558
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:560
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:563
+#, no-wrap
+msgid "% git checkout 08b8197a74\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:566
+msgid ""
+"and you have that checked out. You will be greeted with a message similar "
+"to the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:569
+#, no-wrap
+msgid "Note: checking out '08b8197a742a96964d2924391bf9fdfeb788865d'.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:573
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:576
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:578
+#: documentation/content/en/articles/committers-guide/_index.adoc:1686
+#, no-wrap
+msgid " git checkout -b <new-branch-name>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:580
+#, no-wrap
+msgid "HEAD is now at 08b8197a742a hook gpiokeys.4 to the build\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:584
+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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:585
+#, no-wrap
+msgid "Bisecting"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:589
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:594
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:601
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:605
+msgid ""
+"If you want to know the last version you checked out, you should use `git "
+"reflog`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:610
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:614
+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 "
+"5ef0bd68b515) and good would be a8163e165c5b. 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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:618
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:625
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:634
+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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:636
+#, no-wrap
+msgid "Signing the commits, tags, and pushes, with GnuPG"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:641
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:643
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:645
+msgid ""
+"The rationale behind signing pushes can be found in the https://github.com/"
+"git/git/commit/a85b377d0419a9dfaca8af2320cc33b051cbed04[commit that "
+"introduced the feature]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:648
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:655
+#, 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 ""
+
+#. 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:663
+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 ""
+
+#. type: delimited block = 6
+#: documentation/content/en/articles/committers-guide/_index.adoc:669
+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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:671
+#, no-wrap
+msgid "Verifying signatures"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:674
+msgid ""
+"Commit signatures can be verified by running either `git verify-commit "
+"<commit hash>`, or `git log --show-signature`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:676
+msgid ""
+"Tag signatures can be verified with `git verify-tag <tag name>`, or `git tag "
+"-v <tag name>`."
+msgstr ""
+
+#
+#
+#. 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:685
+#, no-wrap
+msgid "Ports Considerations"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:688
+msgid ""
+"The ports tree operates the same way. The branch names are different and "
+"the repositories are in different locations."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:691
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:695
+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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:697
+#, no-wrap
+msgid "Commit message formats"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:701
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:703
+msgid ""
+"The main point being that a commit message should be formatted in the "
+"following way:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:706
+#, no-wrap
+msgid "category/port: Summary.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:708
+#, no-wrap
+msgid "Description of why the changes where made.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:710
+#, no-wrap
+msgid "PR:\t 12345\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:716
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:718
+msgid "A blank line should separate it from the rest of the commit message."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:720
+msgid ""
+"The rest of the commit message should be wrapped at the 72 characters "
+"boundary."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:722
+msgid ""
+"Another blank line should be added if there are any metadata fields, so that "
+"they are easily distinguishable from the commit message."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:724
+#, no-wrap
+msgid "Managing Local Changes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:727
+msgid ""
+"This section addresses tracking local changes. If you have no local changes "
+"you can skip this section."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:733
+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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:734
+#, no-wrap
+msgid "Keeping local changes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:741
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:745
+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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:746
+#, no-wrap
+msgid "Keeping a local branch"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:753
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:757
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:759
+msgid "====== Create a branch"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:764
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:786
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:793
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:795
+msgid "====== Time to update"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:800
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:806
+#, no-wrap
+msgid ""
+"% git checkout main\n"
+"% git pull --ff-only\n"
+"% git rebase -i main no-color-ls\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:811
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:813
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:820
+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 complete "
+"treatment can be found at the end of this section."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:823
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:833
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:836
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:845
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:849
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:853
+msgid "#undef COLORLS_NEW #ifdef COLORLS_NEW #include <terminfo.h>"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:857
+#, no-wrap
+msgid ""
+"save the file.\n"
+"The rebase was interrupted, so you have to complete it:\n"
+"[source,shell]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:860
+msgid "% git add ls.c % git rebase --continue"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:865
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:870
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:873
+#, 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:874
+#, no-wrap
+msgid "Switching to a Different FreeBSD Branch"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:878
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:881
+msgid "% git checkout main % # build and install here..."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:887
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:891
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:898
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:900
+#, no-wrap
+msgid "[[mfc-with-git]]\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:900
+#, no-wrap
+msgid "MFC (Merge From Current) Procedures"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:901
+#, no-wrap
+msgid "Summary"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:905
+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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:906
+#, no-wrap
+msgid "Single commit MFC"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:909
+#: documentation/content/en/articles/committers-guide/_index.adoc:949
+#: documentation/content/en/articles/committers-guide/_index.adoc:985
+#: documentation/content/en/articles/committers-guide/_index.adoc:1101
+#: documentation/content/en/articles/committers-guide/_index.adoc:1114
+#: documentation/content/en/articles/committers-guide/_index.adoc:1141
+#: documentation/content/en/articles/committers-guide/_index.adoc:1153
+#: documentation/content/en/articles/committers-guide/_index.adoc:1219
+#: documentation/content/en/articles/committers-guide/_index.adoc:1237
+#: documentation/content/en/articles/committers-guide/_index.adoc:1259
+#: documentation/content/en/articles/committers-guide/_index.adoc:1277
+#: documentation/content/en/articles/committers-guide/_index.adoc:1297
+#: documentation/content/en/articles/committers-guide/_index.adoc:1312
+#: documentation/content/en/articles/committers-guide/_index.adoc:1331
+#: documentation/content/en/articles/committers-guide/_index.adoc:1363
+#: documentation/content/en/articles/committers-guide/_index.adoc:1410
+#: documentation/content/en/articles/committers-guide/_index.adoc:1474
+msgid "[source,shell]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:912
+msgid "% git checkout stable/X % git cherry-pick -x $HASH --edit"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:916
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:918
+#: documentation/content/en/articles/committers-guide/_index.adoc:939
+#: documentation/content/en/articles/committers-guide/_index.adoc:962
+#: documentation/content/en/articles/committers-guide/_index.adoc:973
+#: documentation/content/en/articles/committers-guide/_index.adoc:1191
+#: documentation/content/en/articles/committers-guide/_index.adoc:1285
+#: documentation/content/en/articles/committers-guide/_index.adoc:1370
+#: documentation/content/en/articles/committers-guide/_index.adoc:1382
+#: documentation/content/en/articles/committers-guide/_index.adoc:1394
+#: documentation/content/en/articles/committers-guide/_index.adoc:1420
+#: documentation/content/en/articles/committers-guide/_index.adoc:1432
+#: documentation/content/en/articles/committers-guide/_index.adoc:1439
+#: documentation/content/en/articles/committers-guide/_index.adoc:1481
+#: documentation/content/en/articles/committers-guide/_index.adoc:1515
+#: documentation/content/en/articles/committers-guide/_index.adoc:1522
+#: documentation/content/en/articles/committers-guide/_index.adoc:1531
+#: documentation/content/en/articles/committers-guide/_index.adoc:1560
+#: documentation/content/en/articles/committers-guide/_index.adoc:1576
+#: documentation/content/en/articles/committers-guide/_index.adoc:1609
+#: documentation/content/en/articles/committers-guide/_index.adoc:1630
+#: documentation/content/en/articles/committers-guide/_index.adoc:1661
+#: documentation/content/en/articles/committers-guide/_index.adoc:1673
+#: documentation/content/en/articles/committers-guide/_index.adoc:1704
+#: documentation/content/en/articles/committers-guide/_index.adoc:1713
+#: documentation/content/en/articles/committers-guide/_index.adoc:1723
+#: documentation/content/en/articles/committers-guide/_index.adoc:1739
+#: documentation/content/en/articles/committers-guide/_index.adoc:1755
+#: documentation/content/en/articles/committers-guide/_index.adoc:1766
+#: documentation/content/en/articles/committers-guide/_index.adoc:1773
+#: documentation/content/en/articles/committers-guide/_index.adoc:1786
+#: documentation/content/en/articles/committers-guide/_index.adoc:1806
+#: documentation/content/en/articles/committers-guide/_index.adoc:1820
+#: documentation/content/en/articles/committers-guide/_index.adoc:1836
+#: documentation/content/en/articles/committers-guide/_index.adoc:1848
+#: documentation/content/en/articles/committers-guide/_index.adoc:1867
+#: documentation/content/en/articles/committers-guide/_index.adoc:1878
+#: documentation/content/en/articles/committers-guide/_index.adoc:1888
+#: documentation/content/en/articles/committers-guide/_index.adoc:1926
+#: documentation/content/en/articles/committers-guide/_index.adoc:1934
+#: documentation/content/en/articles/committers-guide/_index.adoc:1945
+#: documentation/content/en/articles/committers-guide/_index.adoc:1966
+#: documentation/content/en/articles/committers-guide/_index.adoc:2026
+#, no-wrap
+msgid "[source,shell]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:921
+msgid "% git checkout stable/X % git cherry-pick -x $HASH -m 1 --edit"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:924
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:927
+#, 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:928
+#, no-wrap
+msgid "MFC to RELENG branch"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:932
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:937
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:942
+msgid "% git checkout releng/13.0 % git cherry-pick -x $HASH --edit"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:945
+#, 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:946
+#, no-wrap
+msgid "Multiple commit MFC"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:957
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:960
+#, no-wrap
+msgid "If the push fails due to losing the commit race, rebase and try again:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:968
+msgid ""
+"% git checkout stable/X % git pull % git checkout tmp-branch % git rebase "
+"stable/X % git push freebsd HEAD:stable/X"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:971
+#, no-wrap
+msgid "Once the MFC is complete, you can delete the temporary branch:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:976
+msgid "% git checkout stable/X % git branch -d tmp-branch"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:978
+#, no-wrap
+msgid "MFC a vendor import"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:983
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:987
+msgid "% git cherry-pick -x -m 1 $HASH"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:990
+#, no-wrap
+msgid ""
+"is typically what you want.\n"
+"This will tell cherry-pick to apply the correct diff.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:995
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:998
+msgid "% git cherry-pick --abort % git cherry-pick -x -m 2 $HASH"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1000
+#, no-wrap
+msgid "to do that. The `--abort` will cleanup the failed first attempt.\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1001
+#, no-wrap
+msgid "Redoing a MFC"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1006
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1008
+msgid "% git reset --hard freebsd/stable/12"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1011
+#, 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1012
+#, no-wrap
+msgid "Considerations when MFCing"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1015
+msgid ""
+"When committing source commits to stable and releng branches, we have the "
+"following goals:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1019
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1021
+#, no-wrap
+msgid "With Subversion, we used the following practices to achieve these goals:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1025
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1029
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1032
+#, 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1033
+#, no-wrap
+msgid "Finding Eligible Hashes to MFC"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1039
+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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1040
+#, no-wrap
+msgid "Commit message standards"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1041
+#, no-wrap
+msgid "Marking MFCs"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1044
+msgid "The project has adopted the following practice for marking MFCs:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1046
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1048
+#, no-wrap
+msgid "When merging multiple commits, keep all the \"cherry picked from\" lines.\n"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1049
+#, no-wrap
+msgid "Trim Metadata?"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1053
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1062
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1066
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1069
+msgid ""
+"Preserving existing metadata provides a very simple workflow. Developers "
+"use `git cherry-pick -x` without having to edit the log message."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1072
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1074
+msgid ""
+"The bottom line is that developers will likely need to curate their commit "
+"message for MFCs that are non-trivial."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1076
+msgid "[[vendor-import-git]]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:1076
+#, no-wrap
+msgid "Vendor Imports with Git"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1079
+msgid "This section describes the vendor import procedure with Git in detail."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1080
+#, no-wrap
+msgid "Branch naming convention"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1083
+msgid ""
+"All vendor branches and tags start with `vendor/`. These branches and tags "
+"are visible by default."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1089
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1092
+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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1093
+#, no-wrap
+msgid "Updating an old vendor import"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1099
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1103
+msgid "% git worktree add ../mtree vendor/NetBSD/mtree"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1105
+#, no-wrap
+msgid "Update the Sources in the Vendor Branch"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1108
+msgid ""
+"Prepare a full, clean tree of the vendor sources. Import everything but "
+"merge only what is needed."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1112
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1126
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1130
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1135
+#, 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1136
+#, no-wrap
+msgid "Updating the FreeBSD Copy"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1139
+msgid "At this point you can push the import to `vendor` into our repo."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1143
+msgid "% git push --follow-tags freebsd vendor/NetBSD/mtree"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1146
+#, no-wrap
+msgid "`--follow-tags` tells `git push` to also push tags associated with the locally committed revision.\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1147
+#, no-wrap
+msgid "Updating the FreeBSD source tree"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1151
+msgid ""
+"Now you need to update the mtree in FreeBSD. The sources live in `contrib/"
+"mtree` since it is upstream software."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1156
+msgid "% cd ../src % git subtree merge -P contrib/mtree vendor/NetBSD/mtree"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1161
+#, 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1162
+#, no-wrap
+msgid "Rebasing your change against latest FreeBSD source tree"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1165
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1168
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1170
+msgid ""
+"The following steps should be taken to easily recreate the merge commit as "
+"if `git rebase --merge-commits` worked properly:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1187
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1189
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1202
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1206
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1208
+msgid ""
+"% git checkout -B YYY freebsd/main # Create new throw-away YYY branch if "
+"starting over is just going to be easier"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1210
+#, no-wrap
+msgid "Pushing the changes"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1215
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1217
+msgid ""
+"After review, when you are sure it is a good change, you can push it to the "
+"FreeBSD repo:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1223
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1230
+#, 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1231
+#, no-wrap
+msgid "How to redo things if need be"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1235
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1244
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1247
+#, no-wrap
+msgid "Then go check it out as above and push as above when ready.\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:1248
+#, no-wrap
+msgid "Creating a new vendor branch"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1255
+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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1256
+#, no-wrap
+msgid "Create the repo"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1265
+msgid ""
+"% cd /some/where % mkdir glorbnitz % cd glorbnitz % git init % git checkout -"
+"b vendor/glorbnitz"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1268
+#, no-wrap
+msgid "At this point, you have a new repo, where all new commits will go on the `vendor/glorbnitz` branch.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1270
+#, 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1271
+#, no-wrap
+msgid "Copy the sources in"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1275
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1280
+msgid "% cp -r ~/glorbnitz/* . % git add *"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1283
+#, no-wrap
+msgid "At this point, you should have a pristine copy of glorbnitz ready to commit.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1287
+msgid "% git commit -m \"Import GlorbNitz frobnosticator revision 3.1415\""
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1291
+#, 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1292
+#, no-wrap
+msgid "Now import it into our repository"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1295
+msgid "Now you need to import the branch into our repository."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1301
+msgid ""
+"% cd /path/to/freebsd/repo/src % git remote add glorbnitz /some/where/"
+"glorbnitz % git fetch glorbnitz vendor/glorbnitz"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1306
+#, 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1307
+#, no-wrap
+msgid "Tag and push"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1310
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1318
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1321
+#, no-wrap
+msgid "By 'good' we mean:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1327
+#, 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1328
+#, no-wrap
+msgid "Time to finally merge it into the base tree"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1337
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1340
+#, no-wrap
+msgid "Here 'good' means:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1345
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1351
+#, 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1352
+#, no-wrap
+msgid "Keeping current"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1358
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1361
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1365
+msgid "% git config --global pull.ff only"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1368
+#, no-wrap
+msgid "You may need to omit the --global if you want this setting to apply to only this repository.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1374
+msgid "% cd freebsd-src % git checkout main % git pull (--ff-only|--rebase)"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1378
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1380
+#, no-wrap
+msgid "The longer form is also recommended.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1387
+msgid ""
+"% cd freebsd-src % git checkout main % git fetch freebsd % git merge --ff-"
+"only freebsd/main"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1392
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1396
+msgid "% git rebase -i main working"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1403
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1405
+#, no-wrap
+msgid "[[git-push-upstream]]\n"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1405
+#, no-wrap
+msgid "Time to push changes upstream"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1408
+msgid ""
+"First, ensure that the push URL is properly configured for the upstream "
+"repository."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1412
+msgid ""
+"% git remote set-url --push freebsd ssh://git@gitrepo.freebsd.org/src.git"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1416
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1418
+#, no-wrap
+msgid "Use\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1422
+msgid "freefall% gen-gitconfig.sh"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1425
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1430
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1434
+msgid "% git push freebsd working:main"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1437
+#, no-wrap
+msgid "If your push is rejected due to losing a commit race, rebase your branch before trying again:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1444
+msgid ""
+"% git checkout working % git fetch freebsd % git rebase freebsd/main % git "
+"push freebsd working:main"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1447
+#, no-wrap
+msgid "[[git-push-upstream-alt]]\n"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1447
+#, no-wrap
+msgid "Time to push changes upstream (alternative)"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1453
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1457
+msgid "% git checkout main % git merge --ff-only `working` % git push freebsd"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1461
+#, no-wrap
+msgid ""
+"If you lose the race, then try again with\n"
+"[source,shell]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1464
+msgid "% git pull --rebase % git push freebsd"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1467
+#, 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1468
+#, no-wrap
+msgid "Finding the Subversion Revision"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1472
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1476
+msgid "% git log"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1479
+#, no-wrap
+msgid "If you have a specific version in mind, you can use this construct:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1483
+msgid "% git log --grep revision=XXXX"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1487
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1489
+#, no-wrap
+msgid "[[git-faq]]\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:1489
+#, no-wrap
+msgid "Git FAQ"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1492
+msgid ""
+"This section provides a number of targeted answers to questions that are "
+"likely to come up often for users and developers."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1498
+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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1499
+#, no-wrap
+msgid "Users"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1501
+#, no-wrap
+msgid "How do I track -current and -stable with only one copy of the repository?"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1506
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1510
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1513
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1517
+msgid ""
+"% git clone -o freebsd --config remote.freebsd.fetch='+refs/notes/*:refs/"
+"notes/*' $URL freebsd-current"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1520
+#, no-wrap
+msgid "then once that's cloned, you can simply create a worktree from it:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1525
+msgid "% cd freebsd-current % git worktree add ../freebsd-stable-12 stable/12"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1529
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1539
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1542
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1544
+#, no-wrap
+msgid "Here's https://adventurist.me/posts/00296[a good writeup] that goes into more detail.\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1545
+#, no-wrap
+msgid "Developers"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1547
+#, no-wrap
+msgid "Ooops! I committed to `main`, instead of another branch."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1550
+#, no-wrap
+msgid "**Q:** From time to time, I goof up and mistakenly commit to the `main` branch. What do I do?\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1552
+#, no-wrap
+msgid "**A:** First, don't panic.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1556
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1558
+#, no-wrap
+msgid "The following answer assumes you committed to `main` and want to create a branch called `issue`:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1564
+#, 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1566
+#, no-wrap
+msgid "Ooops! I committed something to the wrong branch!"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1570
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1574
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1582
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1586
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1588
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1594
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1596
+#, no-wrap
+msgid "**Q:** I want to split off some changes from branch `wilma` into branch `fred`\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1602
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1607
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1614
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1618
+#, no-wrap
+msgid ""
+"The last step is optional.\n"
+"If you are going to try again to split, you'd omit it.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1622
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1624
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1628
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1643
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1651
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1659
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1664
+msgid "% git checkout -B wilma 869cbd3 % git branch -D fred"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1671
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1677
+msgid "% git checkout 869cbd3 M\tfaq.md Note: checking out '869cbd3'."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1681
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1684
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1689
+msgid "HEAD is now at 869cbd3 Encourage contributions % git checkout -B wilma"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1692
+#, 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1693
+#, no-wrap
+msgid "Ooops! I did a `git pull` and it created a merge commit, what do I do?"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1697
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1699
+#, no-wrap
+msgid "**A:** This can happen when you invoke the pull with your development branch checked out.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1702
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1707
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1711
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1715
+msgid "git reset --hard HEAD^2"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1718
+#, no-wrap
+msgid "**Q:** But I also need to fix my `main` branch. How do I do that?\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1721
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1725
+msgid "git branch -f main freebsd/main"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1730
+#, 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1731
+#, no-wrap
+msgid "Mixing and matching branches"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1735
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1737
+#, no-wrap
+msgid "**A:** This is a job for cherry pick.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1743
+msgid ""
+"% git checkout worker % git checkout -b feature\t# create a new branch % git "
+"cherry-pick main..async\t# bring in the changes"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1748
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1750
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1753
+#, no-wrap
+msgid ""
+"**A:** This takes a little bit of prep work, but `git rebase` will do the heavy\n"
+"lifting here.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1759
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1764
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1768
+msgid "% git rebase -i main kernel"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1771
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1775
+msgid "% git rebase -i main userland"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1778
+#, no-wrap
+msgid "and do the same thing you did with the `kernel` branch.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1781
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1784
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1790
+msgid "% git checkout kernel % git log driver % git cherry-pick $HASH"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1796
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1799
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1804
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1808
+msgid "% git reset HEAD^"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1811
+#, no-wrap
+msgid "Note: Do not, repeat do not, add `--hard` here since that also removes the changes from your tree.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1815
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1818
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1822
+msgid "git add -i foo/bar.c"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1828
+#, 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:1829
+#, no-wrap
+msgid "Cloning and Mirroring"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1832
+#, no-wrap
+msgid "**Q:** I'd like to mirror the entire Git repository, how do I do that?\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1834
+#, no-wrap
+msgid "**A:** If all you want to do is mirror, then\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1838
+msgid "% git clone --mirror $URL"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1842
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1846
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1854
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1857
+#, no-wrap
+msgid "But if you aren't using your mirror for further local clones, then it's a poor match.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1860
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1862
+#, no-wrap
+msgid "**Q:** So what can I do instead?\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1865
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1869
+#, no-wrap
+msgid " fetch = +refs/heads/*:refs/remotes/freebsd/*\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1872
+#, no-wrap
+msgid "which says just fetch the branch refs.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1876
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1880
+msgid "git config --add remote.freebsd.fetch '+refs/*:refs/freebsd/*'"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1884
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1886
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1890
+msgid "git log refs/freebsd/vendor/zlib/1.2.10"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1893
+#, no-wrap
+msgid "would look at the log for the vendor branch for zlib starting at 1.2.10.\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:1894
+#, no-wrap
+msgid "Collaborating with others"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1898
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1900
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1902
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1909
+msgid ""
+"[source,shell] ```` % git remote -v freebsd https://git.freebsd.org/src.git "
+"(fetch) freebsd ssh://git@gitrepo.freebsd.org/src.git (push) ````"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1912
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1915
+msgid ""
+"Now add a remote on your local system that points to your fork: [source,"
+"shell]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1922
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1924
+#, no-wrap
+msgid "With this in place you can create a branch <<keeping_a_local_branch,as shown above.>>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1928
+msgid "% git checkout -b gnn-pr2001-fix"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1932
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1938
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1940
+#, no-wrap
+msgid " git push --set-upstream github gnn-pr2001-fix\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1943
+#, no-wrap
+msgid "Setting the push as +git+ advises allows it to succeed:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1959
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1961
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1964
+#, no-wrap
+msgid "Subsequent changes to the same branch will push correctly by default:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1977
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1981
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1983
+#, no-wrap
+msgid "[[github-pull-land]]\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:1983
+#, no-wrap
+msgid "Landing a github pull request"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1988
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:1992
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:1998
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2018
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2020
+#, no-wrap
+msgid "Author: github-user <38923459+github-user@users.noreply.github.com>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2024
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2036
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2041
+#, no-wrap
+msgid ""
+"[.procedure]\n"
+"====\n"
+"For complicated pull requests that have multiple commits with conflicts, follow the following outline.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2049
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2054
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2056
+#, no-wrap
+msgid "[[vcs-history]]\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2056
+#, no-wrap
+msgid "Version Control History"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2059
+msgid "The project has moved to <<git-primer,git>>."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2065
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2071
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2077
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2079
+msgid "[[conventions]]"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2079
+#, no-wrap
+msgid "Setup, Conventions, and Traditions"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2084
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2086
+msgid "[[conventions-committers]]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2086
+#, no-wrap
+msgid "For New Committers"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2089
+msgid ""
+"Those who have been given commit rights to the FreeBSD repositories must "
+"follow these steps."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2092
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2097
+#, no-wrap
+msgid ""
+"[[commit-steps]]\n"
+"[.procedure]\n"
+"====\n"
+"*Steps for New Committers*\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2144
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2146
+#, no-wrap
+msgid "[[conventions-everyone]]\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2146
+#, no-wrap
+msgid "For Everyone"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2166
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2168
+msgid "[[smtp-setup]]"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:2168
+#, no-wrap
+msgid "SMTP Access Setup"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2171
+msgid ""
+"For those willing to send e-mail messages through the FreeBSD.org "
+"infrastructure, follow the instructions below:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2192
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2194
+msgid "[[smtp-setup-local-mta]]"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/articles/committers-guide/_index.adoc:2194
+#, no-wrap
+msgid "Using a Local MTA to Forward Emails to the FreeBSD.org SMTP Service"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2197
+msgid ""
+"It is also possible to use a local MTA to forward locally sent emails to the "
+"FreeBSD.org SMTP servers."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2202
+msgid "[[smtp-setup-local-postfix]] .Using Postfix [example] ===="
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2204
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2206
+msgid "[.programlisting]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2212
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2215
+#, no-wrap
+msgid "Create [.filename]#/usr/local/etc/postfix/relayhost_maps# with the following content:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2217
+#: documentation/content/en/articles/committers-guide/_index.adoc:2224
+#: documentation/content/en/articles/committers-guide/_index.adoc:2231
+#: documentation/content/en/articles/committers-guide/_index.adoc:2239
+#: documentation/content/en/articles/committers-guide/_index.adoc:2254
+#: documentation/content/en/articles/committers-guide/_index.adoc:2264
+#: documentation/content/en/articles/committers-guide/_index.adoc:2278
+#: documentation/content/en/articles/committers-guide/_index.adoc:2308
+#, no-wrap
+msgid "[.programlisting]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2219
+msgid "yourusername@FreeBSD.org [smtp.freebsd.org]:587"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2222
+#, no-wrap
+msgid "Create [.filename]#/usr/local/etc/postfix/sasl_passwd# with the following content:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2226
+#, no-wrap
+msgid "[smtp.freebsd.org]:587 yourusername:yourpassword\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2229
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2234
+msgid ""
+"smtpd_sender_login_maps = hash:/usr/local/etc/postfix/sender_login_maps "
+"smtpd_sender_restrictions = reject_known_sender_login_mismatch"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2237
+#, no-wrap
+msgid "Create [.filename]#/usr/local/etc/postfix/sender_login_maps# with the following content:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2241
+msgid "yourusername@FreeBSD.org yourlocalusername"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2245
+#, no-wrap
+msgid ""
+"Where _yourlocalusername_ is the SASL username used to connect to the local instance of Postfix.\n"
+"====\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2250
+#, no-wrap
+msgid ""
+"[[smtp-setup-local-opensmtpd]]\n"
+".Using OpenSMTPD\n"
+"[example]\n"
+"====\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2252
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2257
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2260
+#, no-wrap
+msgid "Where _yourlocalusername_ is the SASL username used to connect to the local instance of OpenSMTPD.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2262
+#, no-wrap
+msgid "Create [.filename]#/usr/local/etc/mail/secrets# with the following content:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2266
+msgid "freebsd\tyourusername:yourpassword"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2273
+#, no-wrap
+msgid ""
+"====\n"
+"[[smtp-setup-local-exim]]\n"
+".Using Exim\n"
+"[example]\n"
+"====\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2276
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2285
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2297
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2303
+#, no-wrap
+msgid ""
+"Authenticators:\n"
+"fixed_plain:\n"
+" driver = plaintext\n"
+" public_name = PLAIN\n"
+" client_send = ^example/mail^examplePassword\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2306
+#, no-wrap
+msgid "Create [.filename]#/usr/local/etc/exim/freebsd_send# with the following content:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2310
+msgid "example@freebsd.org:smtp.freebsd.org::587"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2313
+#, no-wrap
+msgid "====\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2315
+#, no-wrap
+msgid "[[mentors]]\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2315
+#, no-wrap
+msgid "Mentors"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2320
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2323
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2327
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2329
+msgid "[[pre-commit-review]]"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2329
+#, no-wrap
+msgid "Pre-Commit Review"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2334
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2340
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2342
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2349
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2354
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2357
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2359
+#, no-wrap
+msgid "[[commit-log-message]]\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2359
+#, no-wrap
+msgid "Commit Log Messages"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2362
+msgid ""
+"This section contains some suggestions and traditions for how commit logs "
+"are formatted."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2363
+#, no-wrap
+msgid "Why are commit messages important?"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2367
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2370
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2373
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2375
+msgid "Commit messages serve at least three purposes:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2382
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2388
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2394
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2396
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2398
+#, no-wrap
+msgid "Having established the importance, here are elements of a good FreeBSD commit message:\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2399
+#, no-wrap
+msgid "Start with a subject line"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2403
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2404
+#, no-wrap
+msgid "Keep subject lines short"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2409
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2410
+#, no-wrap
+msgid "Prefix the subject line with a component, if applicable"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2413
+msgid ""
+"If the change relates to a specific component the subject line may be "
+"prefixed with that component name and a colon (:)."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2415
+msgid "✓ `foo: Add -k option to keep temporary data`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2417
+msgid ""
+"Include the prefix in the 63-character limit suggested above, so that `git "
+"log --oneline` avoids wrapping."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2418
+#, no-wrap
+msgid "Capitalize the first letter of the subject"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2422
+msgid ""
+"Capitalize the first letter of the subject itself. The prefix, if any, is "
+"not capitalized unless necessary (e.g., `USB:` is capitalized)."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2423
+#, no-wrap
+msgid "Do not end the subject line with punctuation"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2427
+msgid ""
+"Do not end with a period or other punctuation. In this regard the subject "
+"line is like a newspaper headline."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2428
+#, no-wrap
+msgid "Separate the subject and body with a blank line"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2431
+msgid "Separate the body from the subject with a blank line."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2433
+msgid ""
+"Some trivial commits do not require a body, and will have only a subject."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2435
+msgid "✓ `ls: Fix typo in usage text`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2436
+#, no-wrap
+msgid "Limit messages to 72 columns"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2442
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2443
+#, no-wrap
+msgid "Use the present tense, imperative mood"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2448
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2453
+#, 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2454
+#, no-wrap
+msgid "Focus on what and why, not how"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2457
+msgid ""
+"Explain what the change accomplishes and why it is being done, rather than "
+"how."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2461
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2463
+msgid ""
+"If there are limitations or incomplete aspects of the change, describe them "
+"in the commit message."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2464
+#, no-wrap
+msgid "Consider whether parts of the commit message could be code comments instead"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2467
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2468
+#, no-wrap
+msgid "Write commit messages for your future self"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2472
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2473
+#, no-wrap
+msgid "Commit messages should stand alone"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2477
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2481
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:2482
+#, no-wrap
+msgid "Include appropriate metadata in a footer"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2485
+msgid ""
+"As well as including an informative message with each commit, some "
+"additional information may be needed."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2487
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2489
+msgid "The key words or phrases are:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2494
+#, no-wrap
+msgid ""
+"[.informaltable]\n"
+"[cols=\"20%,80%\", frame=\"none\"]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2495
+#, no-wrap
+msgid "`PR:`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2497
+#, 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2498
+#, no-wrap
+msgid "`Reported by:`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2502
+#, 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2504
+#, no-wrap
+msgid ""
+"`Submitted by:` +\n"
+"(deprecated)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2506
+#, 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2507
+#, no-wrap
+msgid "`Reviewed by:`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2522
+#, 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2523
+#, no-wrap
+msgid "`Tested by:`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2525
+#, 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2526
+#, no-wrap
+msgid "`Approved by:`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2552
+#, 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2553
+#, no-wrap
+msgid "`Obtained from:`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2555
+#, 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2556
+#, no-wrap
+msgid "`Fixes:`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2558
+#, 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2559
+#, no-wrap
+msgid "`MFC after:`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2561
+#, 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2562
+#, no-wrap
+msgid "`MFC to:`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2564
+#, no-wrap
+msgid "If the commit should be merged to a subset of stable branches, specify the branch names."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2565
+#, no-wrap
+msgid "`MFH:`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2567
+#, no-wrap
+msgid "If the commit is to be merged into a ports quarterly branch name, specify the quarterly branch. For example `2021Q2`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2568
+#, no-wrap
+msgid "`Relnotes:`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2570
+#, 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2571
+#, no-wrap
+msgid "`Security:`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2573
+#, 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2574
+#, no-wrap
+msgid "`Event:`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2576
+#, 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2577
+#, no-wrap
+msgid "`Sponsored by:`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2579
+#, 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2580
+#, no-wrap
+msgid "`Pull Request:`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2584
+#, 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2585
+#, no-wrap
+msgid "`Co-authored-by:`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2588
+#, 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:2589
+#, no-wrap
+msgid "`Signed-off-by:`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2591
+#, no-wrap
+msgid "ID certifies compliance with https://developercertificate.org/"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2592
+#, no-wrap
+msgid "`Differential Revision:`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/committers-guide/_index.adoc:2594
+#, 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 ""
+
+#. type: Block title
+#: documentation/content/en/articles/committers-guide/_index.adoc:2596
+#, no-wrap
+msgid "Commit Log for a Commit Based on a PR"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2602
+msgid ""
+"The commit is based on a patch from a PR submitted by John Smith. The "
+"commit message \"PR\" field is filled."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2606
+#: documentation/content/en/articles/committers-guide/_index.adoc:2624
+#: documentation/content/en/articles/committers-guide/_index.adoc:2639
+#: documentation/content/en/articles/committers-guide/_index.adoc:2655
+#: documentation/content/en/articles/committers-guide/_index.adoc:2670
+#, no-wrap
+msgid "...\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2608
+#, no-wrap
+msgid "PR:\t\t12345\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2611
+msgid ""
+"The committer sets the author of the patch with `git commit --author \"John "
+"Smith <John.Smith@example.com>\"`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/articles/committers-guide/_index.adoc:2614
+#, no-wrap
+msgid "Commit Log for a Commit Needing Review"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2620
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2626
+#, no-wrap
+msgid "Reviewed by:\t-arch\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/articles/committers-guide/_index.adoc:2630
+#, no-wrap
+msgid "Commit Log for a Commit Needing Approval"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2635
+msgid ""
+"Commit a port, after working with the listed MAINTAINER, who said to go "
+"ahead and commit."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2641
+#, no-wrap
+msgid "Approved by:\tabc (maintainer)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2644
+msgid "Where _abc_ is the account name of the person who approved."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/articles/committers-guide/_index.adoc:2646
+#, no-wrap
+msgid "Commit Log for a Commit Bringing in Code from OpenBSD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2651
+msgid "Committing some code based on work done in the OpenBSD project."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2657
+#, no-wrap
+msgid "Obtained from:\tOpenBSD\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/articles/committers-guide/_index.adoc:2661
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2666
+msgid ""
+"Committing some code which will be merged from FreeBSD-CURRENT into the "
+"FreeBSD-STABLE branch after two weeks."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2672
+#, no-wrap
+msgid "MFC after:\t2 weeks\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2675
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2678
+msgid "It is often necessary to combine these."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2682
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2684
+msgid ""
+"The extra information to include in the commit would look something like"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/articles/committers-guide/_index.adoc:2685
+#, no-wrap
+msgid "Example Combined Commit Log"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2696
+#, 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2701
+#, no-wrap
+msgid "Preferred License for New Files"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2707
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2709
+msgid ""
+"The FreeBSD Project suggests and uses this text as the preferred license "
+"scheme:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2740
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2746
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2750
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2754
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2757
+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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2759
+#, no-wrap
+msgid "Keeping Track of Licenses Granted to the FreeBSD Project"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2764
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2769
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2771
+msgid ""
+"Contact details for people or organizations granting the special license."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2772
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2773
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2774
+msgid "The license text."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2775
+msgid ""
+"A note of any restrictions, limitations or exceptions that apply "
+"specifically to FreeBSD's usage of the licensed material."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2776
+msgid "Any other relevant information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2779
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2782
+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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2784
+#, no-wrap
+msgid "SPDX Tags in the tree"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2795
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2797
+msgid ""
+"As of March 2021, approximately 25,000 out of 90,000 files in the tree have "
+"been marked."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2798
+#, no-wrap
+msgid "Developer Relations"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2804
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2808
+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 ""
+
+#. type: delimited block - 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2812
+#, no-wrap
+msgid "% git -C /path/to/repo shortlog -sne --since=\"2 years\" -- relative/path/to/file\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2815
+msgid ""
+"If queries go unanswered or the committer otherwise indicates a lack of "
+"interest in the area affected, go ahead and commit it."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2820
+msgid ""
+"Avoid sending private emails to maintainers. Other people might be "
+"interested in the conversation, not just the final output."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2826
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2830
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2833
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2839
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2843
+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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2845
+#, no-wrap
+msgid "If in Doubt..."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2849
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2853
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2855
+msgid "For project specific or administrative questions ask, in order:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2857
+msgid "Your mentor or former mentor."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2858
+msgid "An experienced committer on IRC, email, etc."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2859
+msgid "Any team with a \"hat\", as they can give you a definitive answer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2860
+msgid "If still not sure, ask on {developers-name}."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2862
+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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2864
+#, no-wrap
+msgid "Bugzilla"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2869
+msgid ""
+"The FreeBSD Project utilizes Bugzilla for tracking bugs and change "
+"requests. If you commit a fix or suggestion found in the PR database, be "
+"sure to close the PR. It is also considered nice if you take time to close "
+"any other PRs associated with your commits."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2871
+msgid ""
+"Committers with non-``FreeBSD.org`` Bugzilla accounts can have the old "
+"account merged with the `FreeBSD.org` account by following these steps:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2875
+msgid "Log in using your old account."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2876
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2877
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2878
+msgid ""
+"If there are more than two accounts to merge, post comments from each of "
+"them."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2881
+msgid "You can find out more about Bugzilla at:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2883
+msgid "extref:{pr-guidelines}[FreeBSD Problem Report Handling Guidelines]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2884
+msgid "link:https://www.FreeBSD.org/support/[https://www.FreeBSD.org/support]"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2886
+#, no-wrap
+msgid "Phabricator"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2890
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2892
+msgid ""
+"Committers with non-``FreeBSD.org`` Phabricator accounts can have the old "
+"account renamed to the ``FreeBSD.org`` account by following these steps:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2896
+msgid "Change your Phabricator account email to your `FreeBSD.org` email."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2897
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2902
+msgid ""
+"Phabricator accounts cannot be merged, please do not open a new account."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2905
+#, no-wrap
+msgid "Who's Who"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2908
+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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/committers-guide/_index.adoc:2909
+#, no-wrap
+msgid "`{doceng}`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2915
+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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/committers-guide/_index.adoc:2916
+#, no-wrap
+msgid "`{re-members}`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2921
+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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/committers-guide/_index.adoc:2922
+#, no-wrap
+msgid "`{so}`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2924
+msgid ""
+"`{so-name}` is the link:https://www.FreeBSD.org/security/[FreeBSD Security "
+"Officer] and oversees the `{security-officer}`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2929
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2934
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2938
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2942
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2948
+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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2949
+#, no-wrap
+msgid "SSH Quick-Start Guide"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2954
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2955
+msgid ""
+"Generate a key pair using man:ssh-keygen[1]. The key pair will wind up in "
+"your [.filename]#$HOME/.ssh/# directory."
+msgstr ""
+
+#. type: delimited block = 6
+#: documentation/content/en/articles/committers-guide/_index.adoc:2959
+msgid "Only ECDSA, Ed25519 or RSA keys are supported."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:2961
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2966
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2968
+msgid "Test with a simple remote command: `ssh freefall.FreeBSD.org ls /usr`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2970
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2972
+msgid ""
+"For information on adding, changing, or removing man:ssh[1] keys, see "
+"https://wiki.freebsd.org/clusteradm/ssh-keys[this article]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2974
+#, no-wrap
+msgid "Coverity(R) Availability for FreeBSD Committers"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2978
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2981
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2983
+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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:2985
+#, no-wrap
+msgid "The FreeBSD Committers' Big List of Rules"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2990
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2992
+#: documentation/content/en/articles/committers-guide/_index.adoc:3022
+msgid "Respect other committers."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2993
+#: documentation/content/en/articles/committers-guide/_index.adoc:3038
+msgid "Respect other contributors."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2994
+#: documentation/content/en/articles/committers-guide/_index.adoc:3053
+msgid "Discuss any significant change _before_ committing."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2995
+msgid ""
+"Respect existing maintainers (if listed in the `MAINTAINER` field in [."
+"filename]#Makefile# or in [.filename]#MAINTAINER# in the top-level "
+"directory)."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2996
+#: documentation/content/en/articles/committers-guide/_index.adoc:3068
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2997
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2998
+#: documentation/content/en/articles/committers-guide/_index.adoc:3083
+msgid "Do not fight in public with other committers; it looks bad."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:2999
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3000
+#: documentation/content/en/articles/committers-guide/_index.adoc:3098
+msgid "When in doubt on any procedure, ask first!"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3001
+#: documentation/content/en/articles/committers-guide/_index.adoc:3103
+msgid "Test your changes before committing them."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3002
+#: documentation/content/en/articles/committers-guide/_index.adoc:3112
+msgid ""
+"Do not commit to contributed software without _explicit_ approval from the "
+"respective maintainers."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3013
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3017
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3018
+#, no-wrap
+msgid "Details"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3026
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3028
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3034
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3037
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3050
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3052
+msgid ""
+"Consider the points raised under <<respect,Respect other committers>> and "
+"apply them also to contributors."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3059
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3061
+msgid "When in doubt, ask for review!"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3062
+msgid "Respect existing maintainers if listed."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3067
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3073
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3074
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3080
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3082
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3093
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3094
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3097
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3102
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3111
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3114
+msgid ""
+"Contributed software is anything under the [.filename]#src/contrib#, [."
+"filename]#src/crypto#, or [.filename]#src/sys/contrib# trees."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3119
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3123
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3126
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3127
+#, no-wrap
+msgid "Policy on Multiple Architectures"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3131
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3135
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3139
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3141
+#, no-wrap
+msgid "Policy on Multiple Compilers"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3155
+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 unduly increasing the testing matrix. Older "
+"and obscure compilers, as well as older dialects of the languages, 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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3160
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3168
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3172
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3178
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3182
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3188
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3193
+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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3194
+#, no-wrap
+msgid "Current Compiler Versions"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3199
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3200
+#, no-wrap
+msgid "Other Suggestions"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3204
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3206
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3213
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3214
+#, no-wrap
+msgid "Deprecating Features"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3217
+msgid ""
+"When it is necessary to remove functionality from software in the base "
+"system, follow these guidelines whenever possible:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3219
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3220
+msgid ""
+"The option, utility, or interface is preserved until the next major (point "
+"zero) release."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3221
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3222
+#, no-wrap
+msgid "Privacy and Confidentiality"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3225
+msgid "Most FreeBSD business is done in public."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3228
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3229
+msgid "Certain sensitive matters must remain private or held under embargo."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3235
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3236
+msgid ""
+"The Security Officer has sole control over the release of security "
+"advisories."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3241
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3242
+msgid ""
+"Communications with Core are kept confidential for as long as necessary."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3247
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3248
+msgid ""
+"Non-disclosure Agreements may be required for access to certain commercially "
+"sensitive data."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3251
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3252
+msgid "Private communications must not be made public without permission."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3255
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3256
+msgid ""
+"Communications on project-only or restricted access channels must be kept "
+"private."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3259
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3260
+msgid "Core may approve publication."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3262
+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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:3264
+#, no-wrap
+msgid "Support for Multiple Architectures"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3271
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3272
+#, no-wrap
+msgid "Statement of General Intent"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3277
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3284
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3285
+#, no-wrap
+msgid "Platform Targets"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3292
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3294
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3299
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3301
+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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3302
+#, no-wrap
+msgid "Tier 1: Fully-Supported Architectures"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3307
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3309
+msgid ""
+"The FreeBSD Project provides the following guarantees to consumers of Tier 1 "
+"platforms:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3311
+msgid ""
+"Official FreeBSD release images will be provided by the release engineering "
+"team."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3312
+msgid ""
+"Binary updates and source patches for Security Advisories and Errata Notices "
+"will be provided for supported releases."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3313
+msgid ""
+"Source patches for Security Advisories will be provided for supported "
+"branches."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3314
+msgid ""
+"Binary updates and source patches for cross-platform Security Advisories "
+"will typically be provided at the time of the announcement."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3315
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3316
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3317
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3318
+msgid ""
+"Most relevant ports should either build or have the appropriate filters to "
+"prevent inappropriate ones from building."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3319
+msgid ""
+"New features which are not inherently platform-specific will be fully "
+"functional on all Tier 1 architectures."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3320
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3321
+msgid ""
+"Tier 1 platforms should be fully documented. Basic operations will be "
+"documented in the FreeBSD Handbook."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3322
+msgid "Tier 1 platforms will be included in the source tree."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3323
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3325
+msgid ""
+"To maintain maturity of Tier 1 platforms, the FreeBSD Project will maintain "
+"the following resources to support development:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3327
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3328
+#: documentation/content/en/articles/committers-guide/_index.adoc:3358
+msgid "Inclusion in the `make universe` and `make tinderbox` targets."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3329
+msgid ""
+"Dedicated hardware in one of the FreeBSD clusters for package building "
+"(either natively or via qemu-user)."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3331
+msgid ""
+"Collectively, developers are required to provide the following to maintain "
+"the Tier 1 status of a platform:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3333
+msgid ""
+"Changes to the source tree should not knowingly break the build of a Tier 1 "
+"platform."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3334
+msgid ""
+"Tier 1 architectures must have a mature, healthy ecosystem of users and "
+"active developers."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3335
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3336
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3337
+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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3338
+#, no-wrap
+msgid "Tier 2: Developmental and Niche Architectures"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3342
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3346
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3348
+msgid ""
+"The FreeBSD Project provides the following guarantees to consumers of Tier 2 "
+"platforms:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3350
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3351
+msgid ""
+"New features which are not inherently platform-specific should be feasible "
+"on all Tier 2 architectures if not implemented."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3352
+msgid "Tier 2 platforms will be included in the source tree."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3353
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3354
+msgid ""
+"Tier 2 platforms should provide functional kernels and userlands even if an "
+"official release distribution is not provided."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3356
+msgid ""
+"To maintain maturity of Tier 2 platforms, the FreeBSD Project will maintain "
+"the following resources to support development:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3360
+msgid ""
+"Collectively, developers are required to provide the following to maintain "
+"the Tier 2 status of a platform:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3362
+msgid ""
+"Changes to the source tree should not knowingly break the build of a Tier 2 "
+"platform."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3363
+msgid ""
+"Tier 2 architectures must have an active ecosystem of users and developers."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3364
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3365
+msgid ""
+"New features that are not yet implemented on Tier 2 architectures should "
+"provide a means of disabling them on those architectures."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3366
+#, no-wrap
+msgid "Tier 3: Experimental Architectures"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3370
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3373
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3376
+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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3377
+#, no-wrap
+msgid "Unsupported Architectures"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3381
+msgid ""
+"Other platforms are not supported in any form by the project. The project "
+"previously described these as Tier 4 systems."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3384
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3385
+#, no-wrap
+msgid "Policy on Changing the Tier of an Architecture"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3389
+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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:3391
+#, no-wrap
+msgid "Ports Specific FAQ"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3394
+#, no-wrap
+msgid "Adding a New Port"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3397
+#, no-wrap
+msgid "How do I add a new port?"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3401
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3405
+#, no-wrap
+msgid "\tSUBDIR += newport\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3408
+msgid ""
+"Once the port and its category's Makefile are ready, the new port can be "
+"committed:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3413
+#, no-wrap
+msgid ""
+"% git add category/Makefile category/newport\n"
+"% git commit\n"
+"% git push\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3417
+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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3420
+#, no-wrap
+msgid "Any other things I need to know when I add a new port?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3423
+msgid ""
+"Check the port, preferably to make sure it compiles and packages correctly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3426
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3428
+msgid ""
+"You do not necessarily have to eliminate all warnings but make sure you have "
+"fixed the simple ones."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3430
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3433
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3437
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3447
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3450
+msgid ""
+"Note that poudriere is the reference for package building, it the port does "
+"not build in poudriere, it will be removed."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3453
+#, no-wrap
+msgid "Removing an Existing Port"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3456
+#, no-wrap
+msgid "How do I remove an existing port?"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3459
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3461
+msgid "Make sure there is no dependency on the port in the ports collection:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3462
+msgid "The port's PKGNAME appears in exactly one line in a recent INDEX file."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3463
+msgid ""
+"No other ports contains any reference to the port's directory or PKGNAME in "
+"their Makefiles"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3467
+msgid ""
+"When using Git, consider using man:git-grep[1], it is much faster than `grep "
+"-r`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3470
+msgid "Then, remove the port:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3474
+msgid "Remove the port's files and directory with `git rm`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3475
+msgid ""
+"Remove the `SUBDIR` listing of the port in the parent directory [."
+"filename]#Makefile#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3476
+#: documentation/content/en/articles/committers-guide/_index.adoc:3491
+msgid "Add an entry to [.filename]#ports/MOVED#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3477
+msgid "Remove the port from [.filename]#ports/LEGAL# if it is there."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3482
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3484
+#, no-wrap
+msgid "How do I move a port to a new location?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3489
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3490
+msgid ""
+"Remove the `SUBDIR` entry from the old category Makefile and add a `SUBDIR` "
+"entry to the new category Makefile."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3492
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3493
+msgid "Move the port with `git mv`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3494
+#: documentation/content/en/articles/committers-guide/_index.adoc:3505
+msgid "Commit the changes."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3497
+#, no-wrap
+msgid "How do I copy a port to a new location?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3502
+msgid "Copy port with `cp -R old-cat/old-port new-cat/new-port`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3503
+msgid "Add the new port to the [.filename]#new-cat/Makefile#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3504
+msgid "Change stuff in [.filename]#new-cat/new-port#."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3508
+#, no-wrap
+msgid "Ports Freeze"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3511
+#, no-wrap
+msgid "What is a “ports freeze”?"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3518
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3520
+msgid ""
+"For more information on how to merge commits to the quarterly branch, see "
+"<<ports-qa-misc-request-mfh>>."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3522
+#, no-wrap
+msgid "Quarterly Branches"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3525
+#, no-wrap
+msgid "What is the procedure to request authorization for merging a commit to the quarterly branch?"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3528
+msgid ""
+"As of November 30, 2020, there is no need to seek explicit approval to "
+"commit to the quarterly branch."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3530
+#, no-wrap
+msgid "What is the procedure for merging commits to the quarterly branch?"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3533
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3539
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3543
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3545
+#, no-wrap
+msgid "Creating a New Category"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3548
+#, no-wrap
+msgid "What is the procedure for creating a new category?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3553
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3557
+msgid "Perform any needed moves. (This only applies to physical categories.)"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3558
+msgid ""
+"Update the `VALID_CATEGORIES` definition in [.filename]#ports/Mk/bsd.port."
+"mk#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3559
+msgid "Assign the PR back to you."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3562
+#, no-wrap
+msgid "What do I need to do to implement a new physical category?"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3567
+msgid ""
+"Upgrade each moved port's [.filename]#Makefile#. Do not connect the new "
+"category to the build yet."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3569
+msgid "To do this, you will need to:"
+msgstr ""
+
+#. type: delimited block = 6
+#: documentation/content/en/articles/committers-guide/_index.adoc:3573
+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 ""
+
+#. type: delimited block = 6
+#: documentation/content/en/articles/committers-guide/_index.adoc:3574
+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 ""
+
+#. type: delimited block = 6
+#: documentation/content/en/articles/committers-guide/_index.adoc:3575
+msgid ""
+"If you want to be really thorough, now might be a good time to run man:"
+"portlint[1]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3578
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3580
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3581
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3582
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3583
+msgid "Add appropriate entries to [.filename]#ports/MOVED#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3584
+msgid "Update the documentation by modifying:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3585
+#: documentation/content/en/articles/committers-guide/_index.adoc:3594
+msgid ""
+"the extref:{porters-handbook}[list of categories, PORTING-CATEGORIES] in the "
+"Porter's Handbook"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3587
+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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3589
+#, no-wrap
+msgid "What do I need to do to implement a new virtual category?"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3592
+msgid ""
+"This is much simpler than a physical category. Only a few modifications are "
+"needed:"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:3596
+#: documentation/content/en/articles/committers-guide/_index.adoc:3690
+#, no-wrap
+msgid "Miscellaneous Questions"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3599
+#, no-wrap
+msgid "Are there changes that can be committed without asking the maintainer for approval?"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3602
+msgid "Blanket approval for most ports applies to these types of fixes:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3604
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3605
+msgid "Trivial and _tested_ build and runtime fixes."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3606
+msgid ""
+"Documentations or metadata changes to ports, like [.filename]#pkg-descr# or "
+"`COMMENT`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3611
+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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3614
+#, no-wrap
+msgid "How do I know if my port is building correctly or not?"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3618
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3620
+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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3622
+#, no-wrap
+msgid "I added a new port. Do I need to add it to the [.filename]#INDEX#?"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3625
+msgid ""
+"No. The file can either be generated by running `make index`, or a pre-"
+"generated version can be downloaded with `make fetchindex`."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3627
+#, no-wrap
+msgid "Are there any other files I am not allowed to touch?"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3631
+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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3633
+#, 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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3637
+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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/committers-guide/_index.adoc:3639
+#, no-wrap
+msgid "How can an experimental test build of the ports tree (exp-run) be requested?"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3643
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3645
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3649
+msgid "Go to the link:https://bugs.freebsd.org/submit[Bugzilla new PR page]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3650
+msgid "Select the product your patch is about."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3651
+msgid "Fill in the bug report as normal. Remember to attach the patch."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3652
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3653
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3654
+msgid "Submit. Wait for the build to run."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3655
+msgid "{portmgr} will reply with a possible fallout."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3656
+msgid "Depending on the fallout:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3657
+msgid ""
+"If there is no fallout, the procedure stops here, and the change can be "
+"committed, pending any other approval required."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3658
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3659
+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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:3662
+#, no-wrap
+msgid "Issues Specific to Developers Who Are Not Committers"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3667
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3669
+msgid "<<admin>>"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3670
+msgid "<<conventions-everyone>>"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3674
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3676
+msgid "<<developer.relations>>"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3677
+msgid "<<ssh.guide>>"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3678
+msgid "<<rules>>"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:3680
+#, no-wrap
+msgid "Information About Google Analytics"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3683
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3687
+msgid ""
+"As of March 3, 2022, Google Analytics was removed from the FreeBSD Project."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3692
+#, no-wrap
+msgid "How do I access people.FreeBSD.org to put up personal or project information?"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3696
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3697
+#, no-wrap
+msgid "Where are the mailing list archives stored?"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3700
+msgid ""
+"The mailing lists are archived under [.filename]#/local/mail# on `freefall."
+"FreeBSD.org`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3701
+#, no-wrap
+msgid "I would like to mentor a new committer. What process do I need to follow?"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3704
+msgid ""
+"See the https://www.freebsd.org/internal/new-account/[New Account Creation "
+"Procedure] document on the internal pages."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/committers-guide/_index.adoc:3706
+#, no-wrap
+msgid "Benefits and Perks for FreeBSD Committers"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3709
+#, no-wrap
+msgid "Recognition"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3713
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3715
+#, no-wrap
+msgid "FreeBSD Mall"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3718
+msgid ""
+"FreeBSD committers can get a free 4-CD or DVD set at conferences from http://"
+"www.freebsdmall.com[FreeBSD Mall, Inc.]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3720
+#, no-wrap
+msgid "`Gandi.net`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3723
+msgid ""
+"https://gandi.net[Gandi] provides website hosting, cloud computing, domain "
+"registration, and X.509 certificate services."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3727
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3729
+#, no-wrap
+msgid "`rsync.net`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3732
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3734
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/committers-guide/_index.adoc:3736
+#, no-wrap
+msgid "`JetBrains`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3739
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/committers-guide/_index.adoc:3741
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/committers-guide/_index.adoc:3745
+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 ""
diff --git a/documentation/content/en/articles/contributing/_index.adoc b/documentation/content/en/articles/contributing/_index.adoc
index cd889a2361..53c9a450c7 100644
--- a/documentation/content/en/articles/contributing/_index.adoc
+++ b/documentation/content/en/articles/contributing/_index.adoc
@@ -41,6 +41,8 @@ ifndef::env-beastie[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
+pass:[<!-- vale FreeBSD.Pronouns = NO -->]
+
[.abstract-title]
Abstract
@@ -50,7 +52,9 @@ This article describes the different ways in which an individual or organization
toc::[]
-So you want to contribute to FreeBSD? That is great! FreeBSD _relies_ on the contributions of its user base to survive.
+So you want to contribute to FreeBSD?
+That is great!
+FreeBSD _relies_ on the contributions of its user base to survive.
Your contributions are not only appreciated, they are vital to FreeBSD's continued growth.
A large and growing number of international contributors, of greatly varying ages and areas of technical expertise, develop FreeBSD.
@@ -65,8 +69,11 @@ As such, our [.filename]#TODO# lists span a very wide range of tasks: from docum
People of any skill level, in almost any area, can almost certainly help the project.
Commercial entities engaged in FreeBSD-related enterprises are also encouraged to contact us.
-Do you need a special extension to make your product work? You will find us receptive to your requests, given that they are not too outlandish.
-Are you working on a value-added product? Please let us know! We may be able to work cooperatively on some aspect of it.
+Do you need a special extension to make your product work?
+You will find us receptive to your requests, given that they are not too outlandish.
+Are you working on a value-added product?
+Please let us know!
+We may be able to work cooperatively on some aspect of it.
The free software world is challenging many existing assumptions about how software is developed, sold, and maintained, and we urge you to at least give it a second look.
[[contrib-what]]
@@ -81,9 +88,18 @@ Many people who are involved in FreeBSD are not programmers.
The Project includes documentation writers, Web designers, and support people.
All that these people need to contribute is an investment of time and a willingness to learn.
-. Read through the FAQ and Handbook periodically. If anything is poorly explained, ambiguous, out of date or incorrect, let us know. Even better, send us a fix (AsciiDoc is not difficult to learn, but there is no objection to plain text submissions).
-. Help translate FreeBSD documentation into your native language. If documentation already exists for your language, you can help translate additional documents or verify that the translations are up-to-date and correct. First take a look at the extref:{fdp-primer}[Translations FAQ, translations] in the FreeBSD Documentation Project Primer. You are not committing yourself to translating every single FreeBSD document by doing this - as a volunteer, you can do as much or as little translation as you desire. Once someone begins translating, others almost always join the effort. If you only have the time or energy to translate one part of the documentation, please translate the installation instructions.
-. Read the {freebsd-questions} occasionally (or even regularly). It can be very satisfying to share your expertise and help people solve their problems; sometimes you may even learn something new yourself! These forums can also be a source of ideas for things to improve upon.
+. Read through the FAQ and Handbook periodically.
+If anything is poorly explained, ambiguous, out of date or incorrect, let us know.
+Even better, send us a fix (AsciiDoc is not difficult to learn, but there is no objection to plain text submissions).
+. Help translate FreeBSD documentation into your native language.
+If documentation already exists for your language, you can help translate additional documents or verify that the translations are up-to-date and correct.
+First take a look at the extref:{fdp-primer}[Translations FAQ, translations] in the FreeBSD Documentation Project Primer.
+You are not committing yourself to translating every single FreeBSD document by doing this - as a volunteer, you can do as much or as little translation as you desire.
+Once someone begins translating, others almost always join the effort.
+If you only have the time or energy to translate one part of the documentation, please translate the installation instructions.
+. Read the {freebsd-questions} occasionally (or even regularly).
+It can be very satisfying to share your expertise and help people solve their problems; sometimes you may even learn something new yourself!
+These forums can also be a source of ideas for things to improve upon.
[[ongoing-programmer-tasks]]
=== Ongoing Programmer Tasks
@@ -92,14 +108,21 @@ Most of the tasks listed here may require a considerable investment of time, an
However, there are also many useful tasks which are suitable for "weekend hackers".
. If you run FreeBSD-CURRENT and have a good Internet connection, there is a machine `current.FreeBSD.org` which builds a full release once a day-every now and again, try to install the latest release from it and report any failures in the process.
-. Read the {freebsd-bugs}. There may be a problem you can comment constructively on or with patches you can test. Or you could even try to fix one of the problems yourself.
+. Read the {freebsd-bugs}.
+There may be a problem you can comment constructively on or with patches you can test.
+Or you could even try to fix one of the problems yourself.
. If you know of any bug fixes which have been successfully applied to -CURRENT but have not been merged into -STABLE after a decent interval (normally a couple of weeks), send the committer a polite reminder.
. Move contributed software to [.filename]#src/contrib# in the source tree.
. Make sure code in [.filename]#src/contrib# is up to date.
-. Build the source tree (or just part of it) with extra warnings enabled and clean up the warnings. A list of build warnings can also be found from our https://ci.freebsd.org[CI] by selecting a build and checking "LLVM/Clang Warnings".
+. Build the source tree (or just part of it) with extra warnings enabled and clean up the warnings.
+A list of build warnings can also be found from our https://ci.freebsd.org[CI] by selecting a build and checking "LLVM/Clang Warnings".
. Fix warnings for ports which do deprecated things like using `gets()` or including [.filename]#malloc.h#.
. If you have contributed any ports and you had to make FreeBSD-specific changes, send your patches back to the original authors (this will make your life easier when they bring out the next version).
-. Get copies of formal standards like POSIX(R). Compare FreeBSD's behavior to that required by the standard. If the behavior differs, particularly in subtle or obscure corners of the specification, send in a PR about it. If you are able, figure out how to fix it and include a patch in the PR. If you think the standard is wrong, ask the standards body to consider the question.
+. Get copies of formal standards like POSIX(R).
+Compare FreeBSD's behavior to that required by the standard.
+If the behavior differs, particularly in subtle or obscure corners of the specification, send in a PR about it.
+If you are able, figure out how to fix it and include a patch in the PR.
+If you think the standard is wrong, ask the standards body to consider the question.
. Suggest further tasks for this list!
=== Work through the PR Database
@@ -126,7 +149,8 @@ Whether you are looking for an ongoing role, or a fun challenge for a rainy day,
There are a number of easy ways you can contribute to keeping the ports tree up to date and in good working order:
* Find some cool or useful software and extref:{porters-handbook}[create a port] for it.
-* There are a large number of ports that have no maintainer. Become a maintainer and <<adopt-port>>.
+* There are a large number of ports that have no maintainer.
+Become a maintainer and <<adopt-port>>.
* If you have created or adopted a port, be aware of <<maintain-port>>.
* When you are looking for a quick challenge you could <<fix-broken>>.
@@ -147,12 +171,41 @@ An idea or suggestion of _general_ technical interest should be mailed to the {f
Likewise, people with an interest in such things (and a tolerance for a _high_ volume of mail!) may subscribe to the {freebsd-hackers}.
See extref:{handbook}[The FreeBSD Handbook, eresources-mail] for more information about this and other mailing lists.
+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:
+
+* 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.
+* It passes all the GitHub CI jobs.
+* You can respond to feedback quickly.
+* 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.
+* 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].
+* 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.
+* 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.
+* Fixup commits should be squashed with the commit they are fixing.
+Each commit in your branch should be suitable for FreeBSD's repository.
+* Commits should include one or more `Signed-off-by:` lines with full name and email address certifying https://developercertificate.org/[Developer Certificate of Origin].
+
+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.
+
+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>>.
+
+The docs team also accepts pull requests via GitHub, but has not established any policy for them yet.
+
If you find a bug or are submitting a specific change, please report it using the https://bugs.FreeBSD.org/submit/[bug submission form].
Try to fill-in each field of the bug report.
Unless they exceed 65KB, include any patches directly in the report.
If the patch is suitable to be applied to the source tree put `[PATCH]` in the synopsis of the report.
When including patches, _do not_ use cut-and-paste because cut-and-paste turns tabs into spaces and makes them unusable.
-When patches are a lot larger than 20KB, consider compressing them (eg. with man:gzip[1] or man:bzip2[1]) prior to uploading them.
+When patches are a lot larger than 20KB, consider compressing them (for example with man:gzip[1] or man:bzip2[1]) prior to uploading them.
After filing a report, you should receive confirmation along with a tracking number.
Keep this tracking number so that you can update us with details about the problem.
@@ -199,7 +252,7 @@ Once you have a set of diffs (which you may test with the man:patch[1] command),
_Do not_ just send the diffs to the {freebsd-hackers} or they will get lost! We greatly appreciate your submission (this is a volunteer project!); because we are busy, we may not be able to address it immediately, but it will remain in the PR database until we do.
Indicate your submission by including `[PATCH]` in the synopsis of the report.
-If you feel it appropriate (e.g. you have added, deleted, or renamed files), bundle your changes into a `tar` file.
+If you feel it appropriate (for example you have added, deleted, or renamed files), bundle your changes into a `tar` file.
Archives created with man:shar[1] are also welcome.
If your change is of a potentially sensitive nature, such as if you are unsure of copyright issues governing its further distribution then you should send it to {core-email} directly rather than submitting as a bug report.
@@ -221,12 +274,13 @@ The complete listing can be found on the link:https://www.FreeBSD.org/internal/s
=== Money or Hardware
-We are always very happy to accept donations to further the cause of the FreeBSD Project and, in a volunteer effort like ours, a little can go a long way! Donations of hardware are also very important to expanding our list of supported peripherals since we generally lack the funds to buy such items ourselves.
+We are always very happy to accept donations to further the cause of the FreeBSD Project and, in a volunteer effort like ours, a little can go a long way!
+Donations of hardware are also very important to expanding our list of supported peripherals since we generally lack the funds to buy such items ourselves.
[[donations]]
==== Donating Funds
-The https://www.freebsdfoundation.org[FreeBSD Foundation] is a non-profit, tax-exempt foundation established to further the goals of the FreeBSD Project.
+The https://www.freebsdfoundation.org[FreeBSD Foundation] is a non-profit, tax-exempt foundation established to further the goals of the FreeBSD Project.
As a 501(c)3 entity, the Foundation is generally exempt from US federal income tax as well as Colorado State income tax.
Donations to a tax-exempt entity are often deductible from taxable federal income.
@@ -269,11 +323,11 @@ Many unmaintained ports can have pending updates, this can be seen at the https:
On https://portsfallout.com/fallout?port=&maintainer=ports%40FreeBSD.org[PortsFallout] can be seen a list of unmaintained ports with errors.
-Some ports affect a large number of others due to dependencies and slave port relationships.
+Some ports affect a large number of others due to dependencies and secondary port relationships.
Generally, we want people to have some experience before they maintain such ports.
-You can find out whether or not a port has dependencies or slave ports by looking at a master index of ports called [.filename]#INDEX#.
-(The name of the file varies by release of FreeBSD; for instance, [.filename]#INDEX-8#.) Some ports have conditional dependencies that are not included in a default [.filename]#INDEX# build.
+You can find out whether or not a port has dependencies or secondary ports by looking at a primary index of ports called [.filename]#INDEX#.
+(The name of the file varies by release of FreeBSD; for instance, [.filename]#INDEX-13#.) Some ports have conditional dependencies that are not included in a default [.filename]#INDEX# build.
We expect you to be able to recognize such ports by looking through other ports' [.filename]#Makefile#'s.
==== How to adopt the port
@@ -288,7 +342,7 @@ If the port has build errors or needs updating, you may wish to include any othe
This will help because many committers are less willing to assign maintainership to someone who does not have a known track record with FreeBSD.
Submitting PRs that fix build errors or update ports are the best ways to establish one.
-File your PR with category `ports` and class `change-request`.
+File your PR with Product `Ports & Packages`.
A committer will examine your PR, commit the changes, and finally close the PR.
Sometimes this process can take a little while (committers are volunteers, too :).
@@ -309,19 +363,24 @@ An additional challenge is to keep individual ports working within the Ports Col
As a maintainer, you will need to manage the following challenges:
-* *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.
+* *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.
* *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.
* *Changes affecting dependent ports.* If other ports depend on a port that you maintain, changes to your port may require coordination with other maintainers.
-* *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.
+* *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.
-* *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.
+* *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.
-* *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.
+* *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.
-* *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.
+* *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.
==== Maintainer responsibilities
@@ -351,11 +410,18 @@ You need to be able to generate a patch between the original port and your updat
+
Thoroughly review and test your changes:
-** Build, install and test your port on as many platforms and architectures as you can. It is common for a port to work on one branch or platform and fail on another.
-** Make sure your port's dependencies are complete. The recommended way of doing this is by installing your own ports tinderbox. See <<resources>> for more information.
-** Check that the packing list is up to date. This involves adding in any new files and directories and removing unused entries.
-** Verify your port using man:portlint[1] as a guide. See <<resources>> for important information about using portlint.
-** Consider whether changes to your port might cause any other ports to break. If this is the case, coordinate the changes with the maintainers of those ports. This is especially important if your update changes the shared library version; in this case, at the very least, the dependent ports will need to get a `PORTREVISION` bump so that they will automatically be upgraded by automated tools such as portmaster or man:portupgrade[1].
+** Build, install and test your port on as many platforms and architectures as you can.
+It is common for a port to work on one branch or platform and fail on another.
+** Make sure your port's dependencies are complete.
+The recommended way of doing this is by installing your own ports tinderbox.
+See <<resources>> for more information.
+** Check that the packing list is up to date.
+This involves adding in any new files and directories and removing unused entries.
+** Verify your port using man:portlint[1] as a guide.
+See <<resources>> for important information about using portlint.
+** Consider whether changes to your port might cause any other ports to break.
+If this is the case, coordinate the changes with the maintainers of those ports.
+This is especially important if your update changes the shared library version; in this case, at the very least, the dependent ports will need to get a `PORTREVISION` bump so that they will automatically be upgraded by automated tools such as package:ports-mgmt/poudriere[].
. Submit changes
+
@@ -380,7 +446,8 @@ A prompt response will help get your PR committed faster, and is better for main
. And Finally
+
Your changes will be committed and your port will have been updated.
-The PR will then be closed by the committer. That's it!
+The PR will then be closed by the committer.
+That is it!
====
===== Ensure your ports continue to build correctly
@@ -423,7 +490,8 @@ If the failure was reported to you by a user, ask them to send you information w
. Investigate and find a solution
+
Unfortunately there is no straightforward process to follow to do this.
-Remember, though: if you are stuck, ask for help! The {freebsd-ports} is a good place to start, and the upstream developers are often very helpful.
+Remember, though: if you are stuck, ask for help!
+The {freebsd-ports} is a good place to start, and the upstream developers are often very helpful.
. Submit changes
+
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.
@@ -516,13 +584,14 @@ If you can make them feel that their contribution is appreciated (and it should
There are some really good places to find a port that needs some attention.
You can use the https://bugs.freebsd.org/search[web interface] to the Problem Report database to search through and view unresolved PRs.
-The majority of ports PRs are updates, but with a little searching and skimming over synopses you should be able to find something interesting to work on (the `sw-bug` class is a good place to start).
+The majority of ports PRs are updates, but with a little searching and skimming over synopses you should be able to find something interesting to work on.
https://portsfallout.com/[PortsFallout] shows port issues gathered from the FreeBSD package building.
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.
-Once you have found a bug or problem, collect information, investigate and fix! If there is an existing PR, follow up to that.
+Once you have found a bug or problem, collect information, investigate and fix!
+If there is an existing PR, follow up to that.
Otherwise create a new PR.
Your changes will be reviewed and, if everything checks out, committed.
@@ -530,7 +599,8 @@ Your changes will be reviewed and, if everything checks out, committed.
=== When to call it quits
As your interests and commitments change, you may find that you no longer have time to continue some (or all) of your ports contributions.
-That is fine! Please let us know if you are no longer using a port or have otherwise lost time or interest in being a maintainer.
+That is fine!
+Please let us know if you are no longer using a port or have otherwise lost time or interest in being a maintainer.
In this way we can go ahead and allow other people to try to work on existing problems with the port without waiting for your response.
Remember, FreeBSD is a volunteer project, so if maintaining a port is no fun any more, it is probably time to let someone else do it!
@@ -541,10 +611,12 @@ By this, we mean that there are unresolved problems or pending updates that have
[[resources]]
=== Resources for ports maintainers and contributors
-The extref:{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!
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.
+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.
The https://bugs.freebsd.org/bugzilla/query.cgi[Problem Report database].
@@ -552,7 +624,7 @@ The http://portscout.FreeBSD.org[FreeBSD Ports distfile scanner (portscout)] can
You can check on your own ports or use it to find ports that need their `MASTER_SITES` updated.
package:ports-mgmt/poudriere[] is the most thorough way to test a port through the entire cycle of installation, packaging, and deinstallation.
-Documentation is located at the https://github.com/freebsd/poudriere[poudriere github repository]
+Documentation is located at the https://github.com/freebsd/poudriere[poudriere GitHub repository]
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__.
@@ -568,7 +640,8 @@ https://portsfallout.com/[PortsFallout] is a place to help in searching for the
[[ideas-contributing]]
== Getting Started in Other Areas
-Looking for something interesting to get started that is not mentioned elsewhere in this article? The FreeBSD Project has several Wiki pages containing areas within which new contributors can get ideas on how to get started.
+Looking for something interesting to get started that is not mentioned elsewhere in this article?
+The FreeBSD Project has several Wiki pages containing areas within which new contributors can get ideas on how to get started.
The https://wiki.freebsd.org/JuniorJobs[Junior Jobs] page has a list of projects that might be of interest to people just getting started in FreeBSD, and want to work on interesting things to get their feet wet.
diff --git a/documentation/content/en/articles/contributing/_index.po b/documentation/content/en/articles/contributing/_index.po
new file mode 100644
index 0000000000..9294814ea7
--- /dev/null
+++ b/documentation/content/en/articles/contributing/_index.po
@@ -0,0 +1,1638 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/contributing/_index.adoc:1
+#, no-wrap
+msgid "How to contribute to the FreeBSD Project"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/articles/contributing/_index.adoc:1
+#: documentation/content/en/articles/contributing/_index.adoc:13
+#, no-wrap
+msgid "Contributing to FreeBSD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:45
+msgid "pass:[<!-- vale FreeBSD.Pronouns = NO -->]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:48
+msgid "Abstract"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:50
+msgid ""
+"This article describes the different ways in which an individual or "
+"organization may contribute to the FreeBSD Project."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:52
+msgid "'''"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:59
+msgid ""
+"So you want to contribute to FreeBSD? That is great! FreeBSD _relies_ on the "
+"contributions of its user base to survive. Your contributions are not only "
+"appreciated, they are vital to FreeBSD's continued growth."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:62
+msgid ""
+"A large and growing number of international contributors, of greatly varying "
+"ages and areas of technical expertise, develop FreeBSD. There is always "
+"more work to be done than there are people available to do it, and more help "
+"is always appreciated."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:66
+msgid ""
+"As a volunteer, what you do is limited only by what you want to do. "
+"However, we do ask that you are aware of what other members of the FreeBSD "
+"community will expect of you. You may want to take this into account before "
+"deciding to volunteer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:70
+msgid ""
+"The FreeBSD project is responsible for an entire operating system "
+"environment, rather than just a kernel or a few scattered utilities. As "
+"such, our [.filename]#TODO# lists span a very wide range of tasks: from "
+"documentation, beta testing and presentation, to the system installer and "
+"highly specialized types of kernel development. People of any skill level, "
+"in almost any area, can almost certainly help the project."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:78
+msgid ""
+"Commercial entities engaged in FreeBSD-related enterprises are also "
+"encouraged to contact us. Do you need a special extension to make your "
+"product work? You will find us receptive to your requests, given that they "
+"are not too outlandish. Are you working on a value-added product? Please "
+"let us know! We may be able to work cooperatively on some aspect of it. The "
+"free software world is challenging many existing assumptions about how "
+"software is developed, sold, and maintained, and we urge you to at least "
+"give it a second look."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/contributing/_index.adoc:80
+#, no-wrap
+msgid "What Is Needed"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:83
+msgid ""
+"The following list of tasks and sub-projects represents something of an "
+"amalgam of various [.filename]#TODO# lists and user requests."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:85
+#, no-wrap
+msgid "Ongoing Non-Programmer Tasks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:90
+msgid ""
+"Many people who are involved in FreeBSD are not programmers. The Project "
+"includes documentation writers, Web designers, and support people. All that "
+"these people need to contribute is an investment of time and a willingness "
+"to learn."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:94
+msgid ""
+"Read through the FAQ and Handbook periodically. If anything is poorly "
+"explained, ambiguous, out of date or incorrect, let us know. Even better, "
+"send us a fix (AsciiDoc is not difficult to learn, but there is no objection "
+"to plain text submissions)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:100
+msgid ""
+"Help translate FreeBSD documentation into your native language. If "
+"documentation already exists for your language, you can help translate "
+"additional documents or verify that the translations are up-to-date and "
+"correct. First take a look at the extref:{fdp-primer}[Translations FAQ, "
+"translations] in the FreeBSD Documentation Project Primer. You are not "
+"committing yourself to translating every single FreeBSD document by doing "
+"this - as a volunteer, you can do as much or as little translation as you "
+"desire. Once someone begins translating, others almost always join the "
+"effort. If you only have the time or energy to translate one part of the "
+"documentation, please translate the installation instructions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:103
+msgid ""
+"Read the {freebsd-questions} occasionally (or even regularly). It can be "
+"very satisfying to share your expertise and help people solve their "
+"problems; sometimes you may even learn something new yourself! These forums "
+"can also be a source of ideas for things to improve upon."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:105
+#, no-wrap
+msgid "Ongoing Programmer Tasks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:109
+msgid ""
+"Most of the tasks listed here may require a considerable investment of time, "
+"an in-depth knowledge of the FreeBSD kernel, or both. However, there are "
+"also many useful tasks which are suitable for \"weekend hackers\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:111
+msgid ""
+"If you run FreeBSD-CURRENT and have a good Internet connection, there is a "
+"machine `current.FreeBSD.org` which builds a full release once a day-every "
+"now and again, try to install the latest release from it and report any "
+"failures in the process."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:114
+msgid ""
+"Read the {freebsd-bugs}. There may be a problem you can comment "
+"constructively on or with patches you can test. Or you could even try to "
+"fix one of the problems yourself."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:115
+msgid ""
+"If you know of any bug fixes which have been successfully applied to -"
+"CURRENT but have not been merged into -STABLE after a decent interval "
+"(normally a couple of weeks), send the committer a polite reminder."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:116
+msgid ""
+"Move contributed software to [.filename]#src/contrib# in the source tree."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:117
+msgid "Make sure code in [.filename]#src/contrib# is up to date."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:119
+msgid ""
+"Build the source tree (or just part of it) with extra warnings enabled and "
+"clean up the warnings. A list of build warnings can also be found from our "
+"https://ci.freebsd.org[CI] by selecting a build and checking \"LLVM/Clang "
+"Warnings\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:120
+msgid ""
+"Fix warnings for ports which do deprecated things like using `gets()` or "
+"including [.filename]#malloc.h#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:121
+msgid ""
+"If you have contributed any ports and you had to make FreeBSD-specific "
+"changes, send your patches back to the original authors (this will make your "
+"life easier when they bring out the next version)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:126
+msgid ""
+"Get copies of formal standards like POSIX(R). Compare FreeBSD's behavior to "
+"that required by the standard. If the behavior differs, particularly in "
+"subtle or obscure corners of the specification, send in a PR about it. If "
+"you are able, figure out how to fix it and include a patch in the PR. If "
+"you think the standard is wrong, ask the standards body to consider the "
+"question."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:127
+msgid "Suggest further tasks for this list!"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:128
+#, no-wrap
+msgid "Work through the PR Database"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:135
+msgid ""
+"The https://bugs.FreeBSD.org/search/[FreeBSD PR list] shows all the current "
+"active problem reports and requests for enhancement that have been submitted "
+"by FreeBSD users. The PR database includes both programmer and non-"
+"programmer tasks. Look through the open PRs, and see if anything there "
+"takes your interest. Some of these might be very simple tasks that just "
+"need an extra pair of eyes to look over them and confirm that the fix in the "
+"PR is a good one. Others might be much more complex, or might not even have "
+"a fix included at all."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:138
+msgid ""
+"Start with the PRs that have not been assigned to anyone else. If a PR is "
+"assigned to someone else, but it looks like something you can handle, email "
+"the person it is assigned to and ask if you can work on it-they might "
+"already have a patch ready to be tested, or further ideas that you can "
+"discuss with them."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:139
+#, no-wrap
+msgid "Ongoing Ports Tasks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:144
+msgid ""
+"The Ports Collection is a perpetual work in progress. We want to provide "
+"our users with an easy to use, up to date, high quality repository of third "
+"party software. We need people to donate some of their time and effort to "
+"help us achieve this goal."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:148
+msgid ""
+"Anyone can get involved, and there are lots of different ways to do so. "
+"Contributing to ports is an excellent way to help \"give back\" something to "
+"the project. Whether you are looking for an ongoing role, or a fun "
+"challenge for a rainy day, we would love to have your help!"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:150
+msgid ""
+"There are a number of easy ways you can contribute to keeping the ports tree "
+"up to date and in good working order:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:152
+msgid ""
+"Find some cool or useful software and extref:{porters-handbook}[create a "
+"port] for it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:154
+msgid ""
+"There are a large number of ports that have no maintainer. Become a "
+"maintainer and <<adopt-port>>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:155
+msgid "If you have created or adopted a port, be aware of <<maintain-port>>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:156
+msgid "When you are looking for a quick challenge you could <<fix-broken>>."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:157
+#, no-wrap
+msgid "Pick one of the items from the Ideas page"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:161
+msgid ""
+"The https://wiki.freebsd.org/IdeasPage[FreeBSD list of projects and ideas "
+"for volunteers] is also available for people willing to contribute to the "
+"FreeBSD project. The list is being regularly updated and contains items for "
+"both programmers and non-programmers with information about each project."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/contributing/_index.adoc:163
+#, no-wrap
+msgid "How to Contribute"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:166
+msgid ""
+"Contributions to the system generally fall into one or more of the following "
+"5 categories:"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:168
+#, no-wrap
+msgid "Bug Reports and General Commentary"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:173
+msgid ""
+"An idea or suggestion of _general_ technical interest should be mailed to "
+"the {freebsd-hackers}. Likewise, people with an interest in such things "
+"(and a tolerance for a _high_ volume of mail!) may subscribe to the {freebsd-"
+"hackers}. See extref:{handbook}[The FreeBSD Handbook, eresources-mail] for "
+"more information about this and other mailing lists."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:176
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:179
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:180
+msgid "It passes all the GitHub CI jobs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:181
+msgid "You can respond to feedback quickly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:183
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:185
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:187
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:189
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:191
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:192
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:197
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:200
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:202
+msgid ""
+"The docs team also accepts pull requests via GitHub, but has not established "
+"any policy for them yet."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:209
+msgid ""
+"If you find a bug or are submitting a specific change, please report it "
+"using the https://bugs.FreeBSD.org/submit/[bug submission form]. Try to "
+"fill-in each field of the bug report. Unless they exceed 65KB, include any "
+"patches directly in the report. If the patch is suitable to be applied to "
+"the source tree put `[PATCH]` in the synopsis of the report. When including "
+"patches, _do not_ use cut-and-paste because cut-and-paste turns tabs into "
+"spaces and makes them unusable. When patches are a lot larger than 20KB, "
+"consider compressing them (for example with man:gzip[1] or man:bzip2[1]) "
+"prior to uploading them."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:212
+msgid ""
+"After filing a report, you should receive confirmation along with a tracking "
+"number. Keep this tracking number so that you can update us with details "
+"about the problem."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:214
+msgid ""
+"See also extref:{problem-reports}[this article] on how to write good problem "
+"reports."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:215
+#, no-wrap
+msgid "Changes to the Documentation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:220
+msgid ""
+"Changes to the documentation are overseen by the {freebsd-doc}. Please look "
+"at the extref:{fdp-primer}[FreeBSD Documentation Project Primer] for "
+"complete instructions. Send submissions and changes (even small ones are "
+"welcome!) using the same method as any other bug report."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:221
+#, no-wrap
+msgid "Changes to Existing Source Code"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:226
+msgid ""
+"An addition or change to the existing source code is a somewhat trickier "
+"affair and depends a lot on how far out of date you are with the current "
+"state of FreeBSD development. There is a special on-going release of "
+"FreeBSD known as \"FreeBSD-CURRENT\" which is made available in a variety of "
+"ways for the convenience of developers working actively on the system. See "
+"extref:{handbook}[The FreeBSD Handbook, current-stable] for more information "
+"about getting and using FreeBSD-CURRENT."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:229
+msgid ""
+"Working from older sources unfortunately means that your changes may "
+"sometimes be too obsolete or too divergent for easy re-integration into "
+"FreeBSD. Chances of this can be minimized somewhat by subscribing to the "
+"{freebsd-announce} and the {freebsd-current} lists, where discussions on the "
+"current state of the system take place."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:232
+msgid ""
+"Assuming that you can manage to secure fairly up-to-date sources to base "
+"your changes on, the next step is to produce a set of diffs to send to the "
+"FreeBSD maintainers. This is done with the man:diff[1] command."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:234
+msgid ""
+"The preferred man:diff[1] format for submitting patches is the unified "
+"output format generated by `diff -u`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/contributing/_index.adoc:238
+#, no-wrap
+msgid "% diff -u oldfile newfile\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:241
+msgid "or"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/contributing/_index.adoc:245
+#, no-wrap
+msgid "% diff -u -r -N olddir newdir\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:248
+msgid ""
+"would generate a set of unified diffs for the given source file or directory "
+"hierarchy."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:250
+msgid "See man:diff[1] for more information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:254
+msgid ""
+"Once you have a set of diffs (which you may test with the man:patch[1] "
+"command), you should submit them for inclusion with FreeBSD as a bug "
+"report. _Do not_ just send the diffs to the {freebsd-hackers} or they will "
+"get lost! We greatly appreciate your submission (this is a volunteer "
+"project!); because we are busy, we may not be able to address it "
+"immediately, but it will remain in the PR database until we do. Indicate "
+"your submission by including `[PATCH]` in the synopsis of the report."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:257
+msgid ""
+"If you feel it appropriate (for example you have added, deleted, or renamed "
+"files), bundle your changes into a `tar` file. Archives created with man:"
+"shar[1] are also welcome."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:261
+msgid ""
+"If your change is of a potentially sensitive nature, such as if you are "
+"unsure of copyright issues governing its further distribution then you "
+"should send it to {core-email} directly rather than submitting as a bug "
+"report. The {core-email} reaches a much smaller group of people who do much "
+"of the day-to-day work on FreeBSD. Note that this group is also _very busy_ "
+"and so you should only send mail to them where it is truly necessary."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:264
+msgid ""
+"Please refer to man:intro[9] and man:style[9] for some information on coding "
+"style. We would appreciate it if you were at least aware of this "
+"information before submitting code."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:265
+#, no-wrap
+msgid "New Code or Major Value-Added Packages"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:269
+msgid ""
+"In the case of a significant contribution of a large body work, or the "
+"addition of an important new feature to FreeBSD, it becomes almost always "
+"necessary to either send changes as tar files or upload them to a web or FTP "
+"site for other people to access. If you do not have access to a web or FTP "
+"site, ask on an appropriate FreeBSD mailing list for someone to host the "
+"changes for you."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:274
+msgid ""
+"When working with large amounts of code, the touchy subject of copyrights "
+"also invariably comes up. FreeBSD prefers free software licenses such as "
+"BSD or ISC. Copyleft licenses such as GPLv2 are sometimes permitted. The "
+"complete listing can be found on the link:https://www.FreeBSD.org/internal/"
+"software-license/[core team licensing policy] page."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:275
+#, no-wrap
+msgid "Money or Hardware"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:279
+msgid ""
+"We are always very happy to accept donations to further the cause of the "
+"FreeBSD Project and, in a volunteer effort like ours, a little can go a long "
+"way! Donations of hardware are also very important to expanding our list of "
+"supported peripherals since we generally lack the funds to buy such items "
+"ourselves."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/contributing/_index.adoc:281
+#, no-wrap
+msgid "Donating Funds"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:286
+msgid ""
+"The https://www.freebsdfoundation.org[FreeBSD Foundation] is a non-profit, "
+"tax-exempt foundation established to further the goals of the FreeBSD "
+"Project. As a 501(c)3 entity, the Foundation is generally exempt from US "
+"federal income tax as well as Colorado State income tax. Donations to a tax-"
+"exempt entity are often deductible from taxable federal income."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:288
+msgid "Donations may be sent in check form to:"
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/articles/contributing/_index.adoc:296
+#, no-wrap
+msgid ""
+"The FreeBSD Foundation\n"
+"3980 Broadway Street\n"
+"STE #103-107\n"
+"Boulder CO 80304\n"
+"USA"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:299
+msgid ""
+"The FreeBSD Foundation is also able to accept https://www.freebsdfoundation."
+"org/donate/[online donations] through various payment options."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:302
+msgid ""
+"More information about the FreeBSD Foundation can be found in https://people."
+"FreeBSD.org/~jdp/foundation/announcement.html[The FreeBSD Foundation -- an "
+"Introduction]. To contact the Foundation by email, write to mailto:"
+"info@FreeBSDFoundation.org[info@FreeBSDFoundation.org]."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/contributing/_index.adoc:303
+#, no-wrap
+msgid "Donating Hardware"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:307
+msgid ""
+"The FreeBSD Project happily accepts donations of hardware that it can find "
+"good use for. If you are interested in donating hardware, please contact "
+"the link:https://www.FreeBSD.org/donations/[Donations Liaison Office]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/contributing/_index.adoc:309
+#, no-wrap
+msgid "Contributing to ports"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:312
+#, no-wrap
+msgid "Adopting an unmaintained port"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/contributing/_index.adoc:314
+#, no-wrap
+msgid "Choosing an unmaintained port"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:320
+msgid ""
+"Taking over maintainership of ports that are unmaintained is a great way to "
+"get involved. Unmaintained ports are only updated and fixed when somebody "
+"volunteers to work on them. There are a large number of unmaintained "
+"ports. It is a good idea to start with adopting a port that you use "
+"regularly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:323
+msgid ""
+"Unmaintained ports have their `MAINTAINER` set to `ports@FreeBSD.org`. Many "
+"unmaintained ports can have pending updates, this can be seen at the https://"
+"portscout.freebsd.org/ports@freebsd.org.html[FreeBSD Ports distfile scanner]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:325
+msgid ""
+"On https://portsfallout.com/fallout?port=&maintainer=ports%40FreeBSD."
+"org[PortsFallout] can be seen a list of unmaintained ports with errors."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:328
+msgid ""
+"Some ports affect a large number of others due to dependencies and secondary "
+"port relationships. Generally, we want people to have some experience "
+"before they maintain such ports."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:332
+msgid ""
+"You can find out whether or not a port has dependencies or secondary ports "
+"by looking at a primary index of ports called [.filename]#INDEX#. (The name "
+"of the file varies by release of FreeBSD; for instance, [."
+"filename]#INDEX-13#.) Some ports have conditional dependencies that are not "
+"included in a default [.filename]#INDEX# build. We expect you to be able to "
+"recognize such ports by looking through other ports' [.filename]#Makefile#'s."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/contributing/_index.adoc:333
+#, no-wrap
+msgid "How to adopt the port"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:338
+msgid ""
+"First make sure you understand your <<maintain-port>>. Also read the extref:"
+"{porters-handbook}[Porter's Handbook]. _Please do not commit yourself to "
+"more than you feel you can comfortably handle._"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:344
+msgid ""
+"You may request maintainership of any unmaintained port as soon as you "
+"wish. Simply set `MAINTAINER` to your own email address and send a PR "
+"(Problem Report) with the change. If the port has build errors or needs "
+"updating, you may wish to include any other changes in the same PR. This "
+"will help because many committers are less willing to assign maintainership "
+"to someone who does not have a known track record with FreeBSD. Submitting "
+"PRs that fix build errors or update ports are the best ways to establish one."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:348
+msgid ""
+"File your PR with category `ports` and class `change-request`. A committer "
+"will examine your PR, commit the changes, and finally close the PR. "
+"Sometimes this process can take a little while (committers are volunteers, "
+"too :)."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:350
+#, no-wrap
+msgid "The challenge for port maintainers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:353
+msgid ""
+"This section will give you an idea of why ports need to be maintained and "
+"outline the responsibilities of a port maintainer."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/contributing/_index.adoc:355
+#, no-wrap
+msgid "Why ports require maintenance"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:360
+msgid ""
+"Creating a port is a once-off task. Ensuring that a port is up to date and "
+"continues to build and run requires an ongoing maintenance effort. "
+"Maintainers are the people who dedicate some of their time to meeting these "
+"goals."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:363
+msgid ""
+"The foremost reason ports need maintenance is to bring the latest and "
+"greatest in third party software to the FreeBSD community. An additional "
+"challenge is to keep individual ports working within the Ports Collection "
+"framework as it evolves."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:365
+msgid "As a maintainer, you will need to manage the following challenges:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:367
+#, 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 to provide up-to-date software.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:369
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:371
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:374
+#, no-wrap
+msgid ""
+"*Interaction with other users, maintainers and developers.* Part of being a maintainer is taking on a support role.\n"
+"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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:378
+#, no-wrap
+msgid ""
+"*Bug hunting.* A port may be affected by bugs which are specific to FreeBSD.\n"
+"You will need to investigate, find, and fix these bugs when they are reported.\n"
+"Thoroughly testing a port to identify problems before they make their way into the Ports Collection is even better.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:381
+#, 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.\n"
+"You should be aware of these changes in case your ports are affected and require updating.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:384
+#, no-wrap
+msgid ""
+"*Changes to the base system.* FreeBSD is under constant development.\n"
+"Changes to software, libraries, the kernel or even policy changes can cause flow-on change requirements to ports.\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/contributing/_index.adoc:385
+#, no-wrap
+msgid "Maintainer responsibilities"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/articles/contributing/_index.adoc:387
+#, no-wrap
+msgid "Keep your ports up to date"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:390
+msgid ""
+"This section outlines the process to follow to keep your ports up to date."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:393
+msgid ""
+"This is an overview. More information about upgrading a port is available "
+"in the extref:{porters-handbook}[Porter's Handbook]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:397
+msgid "Watch for updates"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:402
+msgid ""
+"Monitor the upstream vendor for new versions, updates and security fixes for "
+"the software. Announcement mailing lists or news web pages are useful for "
+"doing this. Sometimes users will contact you and ask when your port will be "
+"updated. If you are busy with other things or for any reason just cannot "
+"update it at the moment, ask if they will help you by submitting an update."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:405
+msgid ""
+"You may also receive automated email from the `FreeBSD Ports Version Check` "
+"informing you that a newer version of your port's distfile is available. "
+"More information about that system (including how to stop future emails) "
+"will be provided in the message."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:406
+msgid "Incorporate changes"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:409
+msgid ""
+"When they become available, incorporate the changes into the port. You need "
+"to be able to generate a patch between the original port and your updated "
+"port."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:410
+msgid "Review and test"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:412
+msgid "Thoroughly review and test your changes:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:415
+msgid ""
+"Build, install and test your port on as many platforms and architectures as "
+"you can. It is common for a port to work on one branch or platform and fail "
+"on another."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:418
+msgid ""
+"Make sure your port's dependencies are complete. The recommended way of "
+"doing this is by installing your own ports tinderbox. See <<resources>> for "
+"more information."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:420
+msgid ""
+"Check that the packing list is up to date. This involves adding in any new "
+"files and directories and removing unused entries."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:422
+msgid ""
+"Verify your port using man:portlint[1] as a guide. See <<resources>> for "
+"important information about using portlint."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:425
+msgid ""
+"Consider whether changes to your port might cause any other ports to break. "
+"If this is the case, coordinate the changes with the maintainers of those "
+"ports. This is especially important if your update changes the shared "
+"library version; in this case, at the very least, the dependent ports will "
+"need to get a `PORTREVISION` bump so that they will automatically be "
+"upgraded by automated tools such as package:ports-mgmt/poudriere[]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:427
+#: documentation/content/en/articles/contributing/_index.adoc:496
+msgid "Submit changes"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:430
+msgid ""
+"Send your update by submitting a PR with an explanation of the changes and a "
+"patch containing the differences between the original port and the updated "
+"one. Please refer to extref:{problem-reports}[Writing FreeBSD Problem "
+"Reports] for information on how to write a really good PR."
+msgstr ""
+
+#. type: delimited block = 6
+#: documentation/content/en/articles/contributing/_index.adoc:436
+msgid ""
+"Please do not submit a man:shar[1] archive of the entire port; instead, use "
+"man:git-format-patch[1] or man:diff[1] `-ruN`. In this way, committers can "
+"much more easily see exactly what changes are being made. The Porter's "
+"Handbook section on extref:{porters-handbook}[Upgrading, port-upgrading] has "
+"more information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:438
+msgid "Wait"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:442
+msgid ""
+"At some stage a committer will deal with your PR. It may take minutes, or "
+"it may take one or two weeks - so please be patient. If it takes any "
+"longer, please seek for help on mailing lists ({freebsd-ports}), IRC: "
+"#bsdports on EFNet or #freebsd-ports on Libera for example."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:443
+msgid "Give feedback"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:446
+msgid ""
+"If a committer finds a problem with your changes, they will most likely "
+"refer it back to you. A prompt response will help get your PR committed "
+"faster, and is better for maintaining a thread of conversation when trying "
+"to resolve any problems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:447
+msgid "And Finally"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:451
+msgid ""
+"Your changes will be committed and your port will have been updated. The PR "
+"will then be closed by the committer. That is it!"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/articles/contributing/_index.adoc:453
+#, no-wrap
+msgid "Ensure your ports continue to build correctly"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:456
+msgid ""
+"This section is about discovering and fixing problems that stop your ports "
+"from building correctly."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:459
+msgid ""
+"FreeBSD only guarantees that the Ports Collection works on the `-STABLE` "
+"branches. In theory, you should be able to get by with running the latest "
+"release of each stable branch (since the ABIs are not supposed to change) "
+"but if you can run the branch, that is even better."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:463
+msgid ""
+"Since the majority of FreeBSD installations run on PC-compatible machines "
+"(what is termed the `i386` architecture), we expect you to keep the port "
+"working on that architecture. We prefer that ports also work on the `amd64` "
+"architecture running native. It is completely fair to ask for help if you "
+"do not have one of these machines."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:468
+msgid ""
+"The usual failure modes for non-`x86` machines are that the original "
+"programmers assumed that, for instance, pointers are `int`-s, or that a "
+"relatively lax older gcc compiler was being used. More and more, "
+"application authors are reworking their code to remove these assumptions - "
+"but if the author is not actively maintaining their code, you may need to do "
+"this yourself."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:471
+msgid ""
+"These are the tasks you need to perform to ensure your port is able to be "
+"built:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:475
+msgid "Watch for build failures"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:477
+msgid ""
+"Check your mail for mail from `pkg-fallout@FreeBSD.org` and the http://"
+"portscout.FreeBSD.org[distfiles scanner] to see if any of the port which are "
+"failing to build are out of date."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:478
+#: documentation/content/en/articles/contributing/_index.adoc:527
+msgid "Collect information"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:482
+msgid ""
+"Once you are aware of a problem, collect information to help you fix it. "
+"Build errors reported by `pkg-fallout` are accompanied by logs which will "
+"show you where the build failed. If the failure was reported to you by a "
+"user, ask them to send you information which may help in diagnosing the "
+"problem, such as:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:484
+msgid "Build logs"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:485
+msgid ""
+"The commands and options used to build the port (including options set in [."
+"filename]#/etc/make.conf#)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:486
+msgid ""
+"A list of packages installed on their system as shown by man:pkg-info[8]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:487
+msgid "The version of FreeBSD they are running as shown by man:uname[1] `-a`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:488
+msgid "When their ports collection was last updated"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:489
+msgid "When their ports tree and [.filename]#INDEX# was last updated"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:491
+msgid "Investigate and find a solution"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:495
+msgid ""
+"Unfortunately there is no straightforward process to follow to do this. "
+"Remember, though: if you are stuck, ask for help! The {freebsd-ports} is a "
+"good place to start, and the upstream developers are often very helpful."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:498
+msgid ""
+"Just as with updating a port, you should now incorporate changes, review and "
+"test, submit your changes in a PR, and provide feedback if required."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:499
+msgid "Send patches to upstream authors"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:504
+msgid ""
+"In some cases, you will have to make patches to the port to make it run on "
+"FreeBSD. Some (but not all) upstream authors will accept such patches back "
+"into their code for the next release. If so, this may even help their users "
+"on other BSD-based systems as well and perhaps save duplicated effort. "
+"Please consider sending any applicable patches to the authors as a courtesy."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/articles/contributing/_index.adoc:506
+#, no-wrap
+msgid "Investigate bug reports and PRs related to your port"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:509
+msgid "This section is about discovering and fixing bugs."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:512
+msgid ""
+"FreeBSD-specific bugs are generally caused by assumptions about the build "
+"and runtime environments that do not apply to FreeBSD. You are less likely "
+"to encounter a problem of this type, but it can be more subtle and difficult "
+"to diagnose."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:514
+msgid ""
+"These are the tasks you need to perform to ensure your port continues to "
+"work as intended:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:518
+msgid "Respond to bug reports"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:521
+msgid ""
+"Bugs may be reported to you through email via the https://bugs.FreeBSD.org/"
+"search/[Problem Report database]. Bugs may also be reported directly to you "
+"by users."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:524
+msgid ""
+"You should respond to PRs and other reports within 14 days, but please try "
+"not to take that long. Try to respond as soon as possible, even if it is "
+"just to say you need some more time before you can work on the PR."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:526
+msgid ""
+"If you have not responded after 14 days, any committer may commit from a PR "
+"that you have not responded to via a `maintainer-timeout`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:529
+msgid ""
+"If the person reporting the bug has not also provided a fix, you need to "
+"collect the information that will allow you to generate one."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:532
+msgid ""
+"If the bug is reproducible, you can collect most of the required information "
+"yourself. If not, ask the person who reported the bug to collect the "
+"information for you, such as:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:534
+msgid ""
+"A detailed description of their actions, expected program behavior and "
+"actual behavior"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:535
+msgid "Copies of input data used to trigger the bug"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:536
+msgid ""
+"Information about their build and execution environment - for example, a "
+"list of installed packages and the output of man:env[1]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:537
+msgid "Core dumps"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:538
+msgid "Stack traces"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:540
+msgid "Eliminate incorrect reports"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:546
+msgid ""
+"Some bug reports may be incorrect. For example, the user may have simply "
+"misused the program; or their installed packages may be out of date and "
+"require updating. Sometimes a reported bug is not specific to FreeBSD. In "
+"this case report the bug to the upstream developers. If the bug is within "
+"your capabilities to fix, you can also patch the port so that the fix is "
+"applied before the next upstream release."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:547
+msgid "Find a solution"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:550
+msgid ""
+"As with build errors, you will need to sort out a fix to the problem. "
+"Again, remember to ask if you are stuck!"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:551
+msgid "Submit or approve changes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:554
+msgid ""
+"Just as with updating a port, you should now incorporate changes, review and "
+"test, and submit your changes in a PR (or send a follow-up if a PR already "
+"exists for the problem). If another user has submitted changes in the PR, "
+"you can also send a follow-up saying whether or not you approve the changes."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/articles/contributing/_index.adoc:556
+#, no-wrap
+msgid "Providing support"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:561
+msgid ""
+"Part of being a maintainer is providing support - not for the software in "
+"general - but for the port and any FreeBSD-specific quirks and problems. "
+"Users may contact you with questions, suggestions, problems and patches. "
+"Most of the time their correspondence will be specific to FreeBSD."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:565
+msgid ""
+"Occasionally you may have to invoke your skills in diplomacy, and kindly "
+"point users seeking general support to the appropriate resources. Less "
+"frequently you will encounter a person asking why the `RPMS` are not up to "
+"date or how can they get the software to run under Foo Linux. Take the "
+"opportunity to tell them that your port is up to date (if it is, of "
+"course!), and suggest that they try FreeBSD."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:568
+msgid ""
+"Sometimes users and developers will decide that you are a busy person whose "
+"time is valuable and do some of the work for you. For example, they might:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:570
+msgid "submit a PR or send you patches to update your port,"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:571
+msgid "investigate and perhaps provide a fix to a PR, or"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:572
+msgid "otherwise submit changes to your port."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:578
+msgid ""
+"In these cases your main obligation is to respond in a timely manner. "
+"Again, the timeout for non-responsive maintainers is 14 days. After this "
+"period changes may be committed unapproved. They have taken the trouble to "
+"do this for you; so please try to at least respond promptly. Then review, "
+"approve, modify or discuss their changes with them as soon as possible."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:580
+msgid ""
+"If you can make them feel that their contribution is appreciated (and it "
+"should be) you will have a better chance persuading them to do more things "
+"for you in the future :-)."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:582
+#, no-wrap
+msgid "Finding and fixing a broken port"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:585
+msgid ""
+"There are some really good places to find a port that needs some attention."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:588
+msgid ""
+"You can use the https://bugs.freebsd.org/search[web interface] to the "
+"Problem Report database to search through and view unresolved PRs. The "
+"majority of ports PRs are updates, but with a little searching and skimming "
+"over synopses you should be able to find something interesting to work on "
+"(the `sw-bug` class is a good place to start)."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:590
+msgid ""
+"https://portsfallout.com/[PortsFallout] shows port issues gathered from the "
+"FreeBSD package building."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:592
+msgid ""
+"It is OK to send changes for a maintained port as well, but remember to ask "
+"the maintainer in case they are already working on the problem."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:597
+msgid ""
+"Once you have found a bug or problem, collect information, investigate and "
+"fix! If there is an existing PR, follow up to that. Otherwise create a new "
+"PR. Your changes will be reviewed and, if everything checks out, committed."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:599
+#, no-wrap
+msgid "When to call it quits"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:606
+msgid ""
+"As your interests and commitments change, you may find that you no longer "
+"have time to continue some (or all) of your ports contributions. That is "
+"fine! Please let us know if you are no longer using a port or have otherwise "
+"lost time or interest in being a maintainer. In this way we can go ahead "
+"and allow other people to try to work on existing problems with the port "
+"without waiting for your response. Remember, FreeBSD is a volunteer "
+"project, so if maintaining a port is no fun any more, it is probably time to "
+"let someone else do it!"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:610
+msgid ""
+"In any case, the Ports Management Team (`portmgr`) reserves the right to "
+"reset your maintainership if you have not actively maintained your port in "
+"some time. (Currently, this is set to 3 months.) By this, we mean that "
+"there are unresolved problems or pending updates that have not been worked "
+"on during that time."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:612
+#, no-wrap
+msgid "Resources for ports maintainers and contributors"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:616
+msgid ""
+"The extref:{porters-handbook}[Porter's Handbook] is your hitchhiker's guide "
+"to the ports system. Keep it handy!"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:620
+msgid ""
+"extref:{problem-reports}[Writing FreeBSD Problem Reports] describes how to "
+"best formulate and submit a PR. In 2005 more than eleven thousand ports PRs "
+"were submitted! Following this article will greatly assist us in reducing "
+"the time needed to handle your PRs."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:622
+msgid ""
+"The https://bugs.freebsd.org/bugzilla/query.cgi[Problem Report database]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:625
+msgid ""
+"The http://portscout.FreeBSD.org[FreeBSD Ports distfile scanner (portscout)] "
+"can show you ports for which the distfiles are not fetchable. You can check "
+"on your own ports or use it to find ports that need their `MASTER_SITES` "
+"updated."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:628
+msgid ""
+"package:ports-mgmt/poudriere[] is the most thorough way to test a port "
+"through the entire cycle of installation, packaging, and deinstallation. "
+"Documentation is located at the https://github.com/freebsd/"
+"poudriere[poudriere GitHub repository]"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:632
+msgid ""
+"man:portlint[1] is an application which can be used to verify that your port "
+"conforms to many important stylistic and functional guidelines. portlint is "
+"a simple heuristic application, so you should use it __only as a guide__. "
+"If portlint suggests changes which seem unreasonable, consult the extref:"
+"{porters-handbook}[Porter's Handbook] or ask for advice."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:637
+msgid ""
+"The {freebsd-ports} is for general ports-related discussion. It is a good "
+"place to ask for help. You can link:https://lists.freebsd.org/[subscribe, "
+"or read and search the list archives]. Reading the archives of the {freebsd-"
+"ports-bugs} and the {svn-ports-head} may also be of interest."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:639
+msgid ""
+"https://portsfallout.com/[PortsFallout] is a place to help in searching for "
+"the https://lists.freebsd.org/archives/freebsd-pkg-fallout/[FreeBSD package-"
+"fallout archive]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/contributing/_index.adoc:641
+#, no-wrap
+msgid "Getting Started in Other Areas"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:645
+msgid ""
+"Looking for something interesting to get started that is not mentioned "
+"elsewhere in this article? The FreeBSD Project has several Wiki pages "
+"containing areas within which new contributors can get ideas on how to get "
+"started."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:647
+msgid ""
+"The https://wiki.freebsd.org/JuniorJobs[Junior Jobs] page has a list of "
+"projects that might be of interest to people just getting started in "
+"FreeBSD, and want to work on interesting things to get their feet wet."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:648
+msgid ""
+"The https://wiki.freebsd.org/IdeasPage[Ideas Page] contains various \"nice "
+"to have\" or \"interesting\" things to work on in the Project."
+msgstr ""
diff --git a/documentation/content/en/articles/contributors/_index.adoc b/documentation/content/en/articles/contributors/_index.adoc
index fcedd93ebd..41516b19fc 100644
--- a/documentation/content/en/articles/contributors/_index.adoc
+++ b/documentation/content/en/articles/contributors/_index.adoc
@@ -61,84 +61,17 @@ endif::[]
Abstract
This article lists individuals and organizations who have made a contribution to FreeBSD.
+To see the current list of FreeBSD Committers you can take a look at the following <<staff-committers, list>>.
'''
toc::[]
-[[donors]]
-== Donors Gallery
-
-[NOTE]
-====
-As of 2010, the following section is several years out-of-date. Donations from the past several years appear https://www.FreeBSD.org/donations/donors/[here].
-====
-
-The FreeBSD Project is indebted to the following donors and would like to publicly thank them here!
-
-* _Contributors to the central server project:_
-+
-The following individuals and businesses made it possible for the FreeBSD Project to build a new central server machine, which has replaced `freefall.FreeBSD.org` at one point, by donating the following items:
-
-** {mbarkah} and his employer, http://www.hemi.com/[ Hemisphere Online], donated a _Pentium Pro (P6) 200MHz CPU_
-** http://www.asacomputers.com/[ASA Computers] donated a _Tyan 1662 motherboard_.
-** Joe McGuckin mailto:joe@via.net[joe@via.net] of http://www.via.net/[ViaNet Communications] donated a _Kingston ethernet controller._
-** Jack O'Neill mailto:jack@diamond.xtalwind.net[jack@diamond.xtalwind.net] donated an _NCR 53C875 SCSI controller card_.
-** 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._
-
-* _Direct funding:_
-+
-The following individuals and businesses have generously contributed direct funding to the project:
-
-** Annelise Anderson mailto:ANDRSN@HOOVER.STANFORD.EDU[ANDRSN@HOOVER.STANFORD.EDU]
-** {dillon}
-** http://www.bluemountain.com/[Blue Mountain Arts]
-** http://www.epilogue.com/[Epilogue Technology Corporation]
-** {sef}
-** http://www.gta.com/[Global Technology Associates, Inc]
-** Don Scott Wilde
-** Gianmarco Giovannelli mailto:gmarco@masternet.it[gmarco@masternet.it]
-** Josef C. Grosch mailto:joeg@truenorth.org[joeg@truenorth.org]
-** Robert T. Morris
-** {chuckr}
-** Kenneth P. Stox mailto:ken@stox.sa.enteract.com[ken@stox.sa.enteract.com] of 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] of Japan (a portion of the profits from sales of their various FreeBSD CDROMs).
-** http://www.mmjp.or.jp/fuki/[Fuki Shuppan Publishing Co.] donated a portion of their profits from _Hajimete no FreeBSD_ (FreeBSD, Getting started) to the FreeBSD and XFree86 projects.
-** http://www.ascii.co.jp/[ASCII Corp.] donated a portion of their profits from several FreeBSD-related books to the FreeBSD project.
-** http://www.yokogawa.co.jp/[Yokogawa Electric Corp] has generously donated significant funding to the FreeBSD project.
-** http://www.buffnet.net/[BuffNET]
-** http://www.pacificsolutions.com/[Pacific Solutions]
-** http://www.siemens.de/[Siemens AG] via Andre Albsmeier mailto:andre.albsmeier@mchp.siemens.de[andre.albsmeier@mchp.siemens.de]
-** Chris Silva mailto:ras@interaccess.com[ras@interaccess.com]
-
-* _Hardware contributors:_
-+
-The following individuals and businesses have generously contributed hardware for testing and device driver development/support:
-
-** 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 and other donations of hardware resources.
-** 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, an AlphaServer DS20, AlphaServer 2100s, an AlphaServer 4100, 8 500Mhz Personal Workstations, 4 433Mhz Personal Workstations, and more! These machines are used for release engineering, package building, SMP development, and general development on the Alpha architecture.
-** TRW Financial Systems, Inc. provided 130 PCs, three 68 GB file servers, twelve Ethernets, two routers and an ATM switch for debugging the diskless code.
-** Dermot McDonnell donated the Toshiba XM3401B CDROM drive currently used in freefall.
-** Chuck Robey mailto:chuckr@glue.umd.edu[chuckr@glue.umd.edu] contributed his floppy tape streamer for experimental work.
-** 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.
-** Ernst Winter (http://berklix.org/ewinter/[Deceased]) contributed a 2.88 MB floppy drive to the project. This will hopefully increase the pressure for rewriting the floppy disk driver.
-** 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 testing of the NCR and AMD drivers with their cards. They are also to be applauded for making driver sources for free operating systems available from their FTP server link:ftp://ftp.tekram.com/scsi/FreeBSD/[ftp://ftp.tekram.com/scsi/FreeBSD/].
-** 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 with Ultra-2 and LVD support, and the latest programming manual with information on how to safely use the advanced features of the latest Symbios SCSI chips. Thanks a lot!
-** {kuku} donated an FX120 12 speed Mitsumi CDROM drive for IDE CDROM driver development.
-** 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.
-
-* _Special contributors:_
-
-** 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 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 contributors over the years and providing us with unrestricted use of their T1 connection to the Internet.
-** The http://www.interface-business.de/[interface business GmbH, Dresden] has been patiently supporting {joerg} who has often preferred FreeBSD work over paid work, and used to fall back to their (quite expensive) EUnet Internet connection whenever his private connection became too slow or flaky to work with it...
-** 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_ command.
-
[[staff-committers]]
== The FreeBSD Developers
-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].
(in alphabetical order by last name):
@@ -205,3 +138,75 @@ include::{include-contrib-additional}[]
(in alphabetical order by first name):
include::{include-contrib-386bsd}[]
+
+[[donors]]
+== Donors Gallery
+
+The FreeBSD Foundation thanks https://freebsdfoundation.org/our-donors/donors/[financial and in-kind donors].
+
+The https://www.freebsd.org/donations/[FreeBSD Donations Liaison] area includes a https://www.freebsd.org/donations/donors/[list of donated hardware].
+
+The FreeBSD Project thanks all donors!
+
+[NOTE]
+====
+As of 2010, the section below was several years out-of-date.
+====
+
+=== Contributors to the central server project
+
+The following individuals and businesses made it possible for the FreeBSD Project to build a new central server machine, which has replaced `freefall.FreeBSD.org` at one point, by donating the following items:
+
+* {mbarkah} and his employer, http://www.hemi.com/[Hemisphere Online], donated a _Pentium Pro (P6) 200MHz CPU_.
+* http://www.asacomputers.com/[ASA Computers] donated a _Tyan 1662 motherboard_.
+* Joe McGuckin <mailto:joe@via.net[joe@via.net]> of http://www.via.net/[ViaNet Communications] donated a _Kingston ethernet controller_.
+* Jack O'Neill <mailto:jack@diamond.xtalwind.net[jack@diamond.xtalwind.net]> donated an _NCR 53C875 SCSI controller card_.
+* 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_.
+
+=== Direct funding
+
+The following individuals and businesses have generously contributed direct funding to the project:
+
+* Annelise Anderson <mailto:andrsn@hoover.stanford.edu[andrsn@hoover.stanford.edu]>.
+* {dillon}.
+* http://www.bluemountain.com/[Blue Mountain Arts].
+* http://www.epilogue.com/[Epilogue Technology Corporation].
+* {sef}.
+* http://www.gta.com/[Global Technology Associates, Inc].
+* Don Scott Wilde.
+* Gianmarco Giovannelli <mailto:gmarco@masternet.it[gmarco@masternet.it]>.
+* Josef C. Grosch <mailto:joeg@truenorth.org[joeg@truenorth.org]>.
+* Robert T. Morris.
+* {chuckr}.
+* Kenneth P. Stox <mailto:ken@stox.sa.enteract.com[ken@stox.sa.enteract.com]> of 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] of Japan (a portion of the profits from sales of their various FreeBSD CDROMs).
+* http://www.mmjp.or.jp/fuki/[Fuki Shuppan Publishing Co.] donated a portion of their profits from _Hajimete no FreeBSD_ (FreeBSD, Getting started) to the FreeBSD and XFree86 projects.
+* http://www.ascii.co.jp/[ASCII Corp.] donated a portion of their profits from several FreeBSD-related books to the FreeBSD project.
+* http://www.yokogawa.co.jp/[Yokogawa Electric Corp] has generously donated significant funding to the FreeBSD project.
+* http://www.buffnet.net/[BuffNET].
+* http://www.pacificsolutions.com/[Pacific Solutions].
+* http://www.siemens.de/[Siemens AG] via Andre Albsmeier <mailto:andre.albsmeier@mchp.siemens.de[andre.albsmeier@mchp.siemens.de]>.
+* Chris Silva <mailto:ras@interaccess.com[ras@interaccess.com]>.
+
+=== Hardware contributors
+
+The following individuals and businesses have generously contributed hardware for testing and device driver development/support:
+
+* 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 and other donations of hardware resources.
+* 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, an AlphaServer DS20, AlphaServer 2100s, an AlphaServer 4100, 8 500Mhz Personal Workstations, 4 433Mhz Personal Workstations, and more! These machines are used for release engineering, package building, SMP development, and general development on the Alpha architecture.
+* TRW Financial Systems, Inc. provided 130 PCs, three 68 GB file servers, twelve Ethernets, two routers and an ATM switch for debugging the diskless code
+* Dermot McDonnell donated the Toshiba XM3401B CDROM drive currently used in _freefall_.
+* Chuck Robey <mailto:chuckr@glue.umd.edu[chuckr@glue.umd.edu]> contributed his floppy tape streamer for experimental work.
+* Larry Altneu <mailto:larry@alr.com[larry@alr.com],> and {wilko}, provided Wangtek and Archive QIC-02 tape drives to improve the [.filename]#wt# driver.
+* Ernst Winter (http://berklix.org/ewinter/[Deceased]) contributed a 2.88 MB floppy drive to the project. This will hopefully increase the pressure for rewriting the floppy disk driver.
+* 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 testing of the NCR and AMD drivers with their cards. They are also to be applauded for making driver sources for free operating systems available from their FTP server link:ftp://ftp.tekram.com/scsi/FreeBSD/[ftp://ftp.tekram.com/scsi/FreeBSD/].
+* 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 with Ultra-2 and LVD support, and the latest programming manual with information on how to safely use the advanced features of the latest Symbios SCSI chips. Thanks a lot!
+* {kuku} donated an FX120 12 speed Mitsumi CDROM drive for IDE CDROM driver development.
+* Mike Tancsa <mailto:mike@sentex.ca[mike@sentex.ca]> donated four various ATM PCI cards to help increase support of these cards as well as help support the development effort of the netatm ATM stack.
+
+=== Special contributors
+
+* 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 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 contributors over the years and providing us with unrestricted use of their T1 connection to the Internet.
+* The http://www.interface-business.de/[interface business GmbH, Dresden] has been patiently supporting {joerg} who has often preferred FreeBSD work over paid work, and used to fall back to their (quite expensive) EUnet Internet connection whenever his private connection became too slow or flaky to work with it.
+* 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` command.
diff --git a/documentation/content/en/articles/contributors/_index.po b/documentation/content/en/articles/contributors/_index.po
new file mode 100644
index 0000000000..9cfc174f3d
--- /dev/null
+++ b/documentation/content/en/articles/contributors/_index.po
@@ -0,0 +1,534 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-05-21 14:43-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 ""
+
+#. type: Title =
+#: documentation/content/en/articles/contributors/_index.adoc:1
+#: documentation/content/en/articles/contributors/_index.adoc:8
+#, no-wrap
+msgid "Contributors to FreeBSD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:62
+msgid "Abstract"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:65
+msgid ""
+"This article lists individuals and organizations who have made a "
+"contribution to FreeBSD. To see the current list of FreeBSD Committers you "
+"can take a look at the following <<staff-committers, list>>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:67
+msgid "'''"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:71
+#, no-wrap
+msgid "The FreeBSD Developers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:75
+msgid ""
+"This list, which includes all members of the Core Team, names everyone who "
+"has commit privileges for one or more of the three source trees (doc, ports "
+"and src). To see the current Core Team members you can take a look at the "
+"link:https://www.freebsd.org/administration/#t-core[administration page]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:77
+msgid "(in alphabetical order by last name):"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:81
+#, no-wrap
+msgid "Core Team Alumni"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:85
+msgid ""
+"The following people were members of the FreeBSD core team during the "
+"periods indicated. We thank them for their past efforts in the service of "
+"the FreeBSD project."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:87
+#: documentation/content/en/articles/contributors/_index.adoc:97
+#: documentation/content/en/articles/contributors/_index.adoc:107
+msgid "_In rough reverse chronological order:_"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:91
+#, no-wrap
+msgid "Development Team Alumni"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:95
+msgid ""
+"The following people were members of the FreeBSD development team during the "
+"periods indicated. We thank them for their past efforts in the service of "
+"the FreeBSD project."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:101
+#, no-wrap
+msgid "Ports Management Team Alumni"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:105
+msgid ""
+"The following people were members of the FreeBSD portmgr team during the "
+"periods indicated. We thank them for their past efforts in the service of "
+"the FreeBSD project."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:111
+#, no-wrap
+msgid "Development Team: In Memoriam"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:115
+msgid ""
+"During the many years that the FreeBSD Project has been in existence, sadly, "
+"some of our developers have passed away. Here are some remembrances."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:117
+msgid "_In rough reverse chronological order of their passing:_"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:121
+#, no-wrap
+msgid "Derived Software Contributors"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:125
+msgid ""
+"This software was originally derived from William F. Jolitz's 386BSD release "
+"0.1, though almost none of the original 386BSD specific code remains. This "
+"software has been essentially re-implemented from the 4.4BSD-Lite release "
+"provided by the Computer Science Research Group (CSRG) at the University of "
+"California, Berkeley and associated academic contributors."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:127
+msgid ""
+"There are also portions of NetBSD and OpenBSD that have been integrated into "
+"FreeBSD as well, and we would therefore like to thank all the contributors "
+"to NetBSD and OpenBSD for their work."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:129
+#, no-wrap
+msgid "Additional FreeBSD Contributors"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:132
+#: documentation/content/en/articles/contributors/_index.adoc:139
+msgid "(in alphabetical order by first name):"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:136
+#, no-wrap
+msgid "386BSD Patch Kit Patch Contributors"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:143
+#, no-wrap
+msgid "Donors Gallery"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:146
+msgid ""
+"The FreeBSD Foundation thanks https://freebsdfoundation.org/our-donors/"
+"donors/[financial and in-kind donors]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:148
+msgid ""
+"The https://www.freebsd.org/donations/[FreeBSD Donations Liaison] area "
+"includes a https://www.freebsd.org/donations/donors/[list of donated "
+"hardware]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:150
+msgid "The FreeBSD Project thanks all donors!"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributors/_index.adoc:154
+msgid "As of 2010, the section below was several years out-of-date."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/contributors/_index.adoc:156
+#, no-wrap
+msgid "Contributors to the central server project"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:159
+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:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:161
+msgid ""
+"{mbarkah} and his employer, http://www.hemi.com/[Hemisphere Online], donated "
+"a _Pentium Pro (P6) 200MHz CPU_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:162
+msgid ""
+"http://www.asacomputers.com/[ASA Computers] donated a _Tyan 1662 "
+"motherboard_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:163
+msgid ""
+"Joe McGuckin <mailto:joe@via.net[joe@via.net]> of http://www.via.net/[ViaNet "
+"Communications] donated a _Kingston ethernet controller_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:164
+msgid ""
+"Jack O'Neill <mailto:jack@diamond.xtalwind.net[jack@diamond.xtalwind.net]> "
+"donated an _NCR 53C875 SCSI controller card_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:165
+msgid ""
+"Ulf Zimmermann <mailto:ulf@Alameda.net[ulf@Alameda.net]> of http://www."
+"Alameda.net/[Alameda Networks] donated _128MB of memory_, a _4 Gb disk drive "
+"and the case_."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/contributors/_index.adoc:166
+#, no-wrap
+msgid "Direct funding"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:169
+msgid ""
+"The following individuals and businesses have generously contributed direct "
+"funding to the project:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:171
+msgid ""
+"Annelise Anderson <mailto:andrsn@hoover.stanford.edu[andrsn@hoover.stanford."
+"edu]>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:172
+msgid "{dillon}."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:173
+msgid "http://www.bluemountain.com/[Blue Mountain Arts]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:174
+msgid "http://www.epilogue.com/[Epilogue Technology Corporation]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:175
+msgid "{sef}."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:176
+msgid "http://www.gta.com/[Global Technology Associates, Inc]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:177
+msgid "Don Scott Wilde."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:178
+msgid ""
+"Gianmarco Giovannelli <mailto:gmarco@masternet.it[gmarco@masternet.it]>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:179
+msgid "Josef C. Grosch <mailto:joeg@truenorth.org[joeg@truenorth.org]>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:180
+msgid "Robert T. Morris."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:181
+msgid "{chuckr}."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:182
+msgid ""
+"Kenneth P. Stox <mailto:ken@stox.sa.enteract.com[ken@stox.sa.enteract.com]> "
+"of http://www.imagescape.com/[Imaginary Landscape, LLC.]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:183
+msgid "Dmitry S. Kohmanyuk <mailto:dk@dog.farm.org[dk@dog.farm.org]>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:184
+msgid ""
+"http://www.cdrom.co.jp/[Laser5] of Japan (a portion of the profits from "
+"sales of their various FreeBSD CDROMs)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:185
+msgid ""
+"http://www.mmjp.or.jp/fuki/[Fuki Shuppan Publishing Co.] donated a portion "
+"of their profits from _Hajimete no FreeBSD_ (FreeBSD, Getting started) to "
+"the FreeBSD and XFree86 projects."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:186
+msgid ""
+"http://www.ascii.co.jp/[ASCII Corp.] donated a portion of their profits from "
+"several FreeBSD-related books to the FreeBSD project."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:187
+msgid ""
+"http://www.yokogawa.co.jp/[Yokogawa Electric Corp] has generously donated "
+"significant funding to the FreeBSD project."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:188
+msgid "http://www.buffnet.net/[BuffNET]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:189
+msgid "http://www.pacificsolutions.com/[Pacific Solutions]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:190
+msgid ""
+"http://www.siemens.de/[Siemens AG] via Andre Albsmeier <mailto:andre."
+"albsmeier@mchp.siemens.de[andre.albsmeier@mchp.siemens.de]>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:191
+msgid "Chris Silva <mailto:ras@interaccess.com[ras@interaccess.com]>."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/contributors/_index.adoc:192
+#, no-wrap
+msgid "Hardware contributors"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:195
+msgid ""
+"The following individuals and businesses have generously contributed "
+"hardware for testing and device driver development/support:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:197
+msgid ""
+"BSDi for providing the Pentium P5-90 and 486/DX2-66 EISA/VL systems that are "
+"being used for our development work, to say nothing of the network access "
+"and other donations of hardware resources."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:198
+msgid ""
+"http://www.compaq.com[Compaq] has donated a variety of Alpha systems to the "
+"FreeBSD Project. Among the many generous donations are 4 AlphaStation DS10s, "
+"an AlphaServer DS20, AlphaServer 2100s, an AlphaServer 4100, 8 500Mhz "
+"Personal Workstations, 4 433Mhz Personal Workstations, and more! These "
+"machines are used for release engineering, package building, SMP "
+"development, and general development on the Alpha architecture."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:199
+msgid ""
+"TRW Financial Systems, Inc. provided 130 PCs, three 68 GB file servers, "
+"twelve Ethernets, two routers and an ATM switch for debugging the diskless "
+"code"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:200
+msgid ""
+"Dermot McDonnell donated the Toshiba XM3401B CDROM drive currently used in "
+"_freefall_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:201
+msgid ""
+"Chuck Robey <mailto:chuckr@glue.umd.edu[chuckr@glue.umd.edu]> contributed "
+"his floppy tape streamer for experimental work."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:202
+msgid ""
+"Larry Altneu <mailto:larry@alr.com[larry@alr.com],> and {wilko}, provided "
+"Wangtek and Archive QIC-02 tape drives to improve the [.filename]#wt# driver."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:203
+msgid ""
+"Ernst Winter (http://berklix.org/ewinter/[Deceased]) contributed a 2.88 MB "
+"floppy drive to the project. This will hopefully increase the pressure for "
+"rewriting the floppy disk driver."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:204
+msgid ""
+"http://www.tekram.com/[Tekram Technologies] sent one each of their DC-390, "
+"DC-390U and DC-390F FAST and ULTRA SCSI host adapter cards for regression "
+"testing of the NCR and AMD drivers with their cards. They are also to be "
+"applauded for making driver sources for free operating systems available "
+"from their FTP server link:ftp://ftp.tekram.com/scsi/FreeBSD/[ftp://ftp."
+"tekram.com/scsi/FreeBSD/]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:205
+msgid ""
+"Larry M. Augustin contributed not only a Symbios Sym8751S SCSI card, but "
+"also a set of data books, including one about the forthcoming Sym53c895 chip "
+"with Ultra-2 and LVD support, and the latest programming manual with "
+"information on how to safely use the advanced features of the latest Symbios "
+"SCSI chips. Thanks a lot!"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:206
+msgid ""
+"{kuku} donated an FX120 12 speed Mitsumi CDROM drive for IDE CDROM driver "
+"development."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:207
+msgid ""
+"Mike Tancsa <mailto:mike@sentex.ca[mike@sentex.ca]> donated four various ATM "
+"PCI cards to help increase support of these cards as well as help support "
+"the development effort of the netatm ATM stack."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/contributors/_index.adoc:208
+#, no-wrap
+msgid "Special contributors"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:211
+msgid ""
+"http://www.osd.bsdi.com/[BSDi] (formerly Walnut Creek CDROM) has donated "
+"almost more than we can say (see the 'About the FreeBSD Project' section of "
+"the 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 "
+"contributors over the years and providing us with unrestricted use of their "
+"T1 connection to the Internet."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:212
+msgid ""
+"The http://www.interface-business.de/[interface business GmbH, Dresden] has "
+"been patiently supporting {joerg} who has often preferred FreeBSD work over "
+"paid work, and used to fall back to their (quite expensive) EUnet Internet "
+"connection whenever his private connection became too slow or flaky to work "
+"with it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:212
+msgid ""
+"http://www.bsdi.com/[Berkeley Software Design, Inc.] has contributed their "
+"DOS emulator code to the remaining BSD world, which is used in the `doscmd` "
+"command."
+msgstr ""
diff --git a/documentation/content/en/articles/contributors/contrib-develinmemoriam.po b/documentation/content/en/articles/contributors/contrib-develinmemoriam.po
new file mode 100644
index 0000000000..66029316a4
--- /dev/null
+++ b/documentation/content/en/articles/contributors/contrib-develinmemoriam.po
@@ -0,0 +1,266 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2021-07-25 09:16-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:3
+msgid "Bruce D. Evans (1991 - 2019; RIP 2019)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:5
+msgid "Bruce was a programming giant who made FreeBSD his home."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:7
+msgid ""
+"Back before FreeBSD and Linux there was Minix, a toy \"unix\" written by "
+"Andy Tannenbaum, released in 1987, sold with complete sources on three "
+"floppy disks, for $99."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:9
+msgid "Bruce ported Minix to the i386 around 1989."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:11
+msgid ""
+"Linus Torvalds used Minix/386 to develop his own kernel, and Bruce was the "
+"first person he thanked in the release-announcement."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:13
+msgid ""
+"When Bill Jolitz released 386BSD 0.1 in 1992, Bruce was listed as a "
+"contributor."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:15
+msgid ""
+"Bruce co-founded the FreeBSD project, and served on core.0, but he was never "
+"partisan, and over the years many other projects have benefitted from his "
+"patches, advice and wisdom."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:17
+msgid ""
+"Code reviews from Bruce came in three flavours, \"mild\", \"brucified\" and "
+"\"brucifiction\", but they were never personal: It was always only about the "
+"code, the mistakes, the sloppy thinking, the missing historical context, the "
+"ambiguous standards - and the style(9) transgressions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:19
+msgid ""
+"As Bruce gave more code reviews than anybody else in the history of the "
+"FreeBSD project, the commit logs hide the true scale of his impact until you "
+"pay attention to \"Submitted by\", \"Reviewed by\" and \"Pointed out by\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:21
+msgid "Being hard of hearing, Bruce did not attend conferences."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:23
+msgid ""
+"The notable exception was the 1999 BSDcon in California, where his core team "
+"colleagues greeted him with \"We're not worthy!\" in Wayne's World fashion."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:25
+msgid "Twenty years later we're still not."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:26
+msgid "Kurt Lidl (2015 - 2019; RIP 2019)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:28
+msgid ""
+"Kurt first got involved with BSD while it was still a project at the "
+"University of California at Berkeley. Shortly after personalized license "
+"plates became available in Maryland, he got \"BSDWZRD\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:30
+msgid ""
+"He began contributing to FreeBSD shortly after the conception of the "
+"project. He became a FreeBSD source committer in October 2015."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:32
+msgid ""
+"Kurt's most well known FreeBSD project was man:blacklistd[8] which blocks "
+"and releases ports on demand to avoid DoS abuse. He has also made many other "
+"bug fixes and enhancements to DTrace, boot loaders, and other bits and "
+"pieces of the FreeBSD infrastructure."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:34
+msgid ""
+"Earlier work included the game XTank, an author on RFC 2516 https://tools."
+"ietf.org/html/rfc2516[\"A Method for Transmitting PPP Over Ethernet "
+"(PPPoE)\"], and the USENIX paper https://www.usenix.org/conference/usenix-"
+"winter-1994-technical-conference/drinking-firehose-multicast-usenet-"
+"news[\"Drinking from the Firehose: Multicast USENET News\"]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:35
+msgid "Frank Durda IV (1995 - 2003; RIP 2018)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:37
+msgid ""
+"Frank had been around the project since the very early days, contributing "
+"code to the 1.x line before becoming a committer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:38
+msgid "Andrey A. Chernov (1993 - 2017; RIP 2017)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:40
+msgid ""
+"Andrey contributions to FreeBSD can not be overstated. Having been involved "
+"for a long there is hardly an area which he did not touch."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:41
+msgid "Jürgen Lock (2006 - 2015; RIP 2015)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:43
+msgid ""
+"Jürgen made a number of contributions to FreeBSD, including work on libvirt, "
+"the graphics stack, and QEMU. Jürgen's contributions and helpfulness were "
+"appreciated by people around the world. That work continues to improve the "
+"lives of thousands every day."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:44
+msgid "{alexbl} (2006 - 2011; RIP 2012)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:46
+msgid ""
+"http://www.legacy.com/obituaries/sfgate/obituary.aspx?"
+"pid=159801494[Alexander] was best known as a major contributor to FreeBSD's "
+"Python ports and a founding member of {python} as well as his work on XMMS2."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:47
+msgid "{jb} (1997 - 2009; RIP 2009)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:49
+msgid ""
+"http://hub.opensolaris.org/bin/view/Community+Group+ogb/In+Memoriam[John] "
+"made major contributions to FreeBSD, the best known of which is the import "
+"of the man:dtrace[1] code. John's unique sense of humor and plain-spokenness "
+"either ruffled feathers or made him quick friends. At the end of his life, "
+"he had moved to a rural area and was attempting to live with as minimal "
+"impact to the planet as possible, while at the same time still working in "
+"the high-tech area."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:50
+msgid "{jmz} (1994 - 2009; RIP 2009)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:52
+msgid ""
+"http://www.obs-besancon.fr/article.php3?id_article=323[Jean-Marc] was an "
+"astrophysicist who made important contributions to the modeling of the "
+"atmospheres of both planets and comets at http://www.obs-besancon.fr/"
+"[l'Observatoire de Besançon] in Besançon, France. While there, he "
+"participated in the conception and construction of the Vega tricanal "
+"spectrometer that studied Halley's Comet. He had also been a long-time "
+"contributor to FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:53
+msgid "{itojun} (1997 - 2001; RIP 2008)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:55
+msgid ""
+"Known to everyone as http://astralblue.livejournal.com/350702.html[itojun], "
+"Jun-ichiro Hagino was a core researcher at the http://www.kame.net/[KAME "
+"Project], which aimed to provide IPv6 and IPsec technology in freely "
+"redistributable form. Much of this code was incorporated into FreeBSD. "
+"Without his efforts, the state of IPv6 on the Internet would be much "
+"different."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:56
+msgid "{cg} (1999 - 2005; RIP 2005)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:58
+msgid ""
+"http://www.dbsi.org/cam/[Cameron] was a unique individual who contributed to "
+"the project despite serious physical disabilities. He was responsible for a "
+"complete rewrite of our sound system during the late 1990s. Many of those "
+"who corresponded with him had no idea of his limited mobility, due to his "
+"cheerful spirit and willingness to help others."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:59
+msgid "{alane} (2002 - 2003; RIP 2003)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/contrib-develinmemoriam.adoc:60
+msgid ""
+"http://freebsd.kde.org/memoriam/alane.php[Alan] was a major contributor to "
+"the KDE on FreeBSD group. In addition, he maintained many other difficult "
+"and time-consuming ports such as autoconf, CUPS, and python. Alan's path was "
+"not an easy one but his passion for FreeBSD, and dedication to programming "
+"excellence, won him many friends."
+msgstr ""
diff --git a/documentation/content/en/articles/cups/_index.adoc b/documentation/content/en/articles/cups/_index.adoc
index 58930951c9..cc7b52b604 100644
--- a/documentation/content/en/articles/cups/_index.adoc
+++ b/documentation/content/en/articles/cups/_index.adoc
@@ -77,7 +77,7 @@ Once installed, the CUPS configuration files can be found in the directory [.fil
[[printing-cups-configuring-server]]
== Configuring the CUPS Print Server
-After installation, a few files must be edited in order to configure the CUPS server.
+After installation, a few files must be edited to configure the CUPS server.
First, create or modify, as the case may be, the file [.filename]#/etc/devfs.rules# and add the following information to set the proper permissions on all potential printer devices and to associate printers with the `cups` user group:
[.programlisting]
@@ -105,7 +105,7 @@ devfs_system_ruleset="system"
These two entries will start the CUPS print server on boot and invoke the local devfs rule created above, respectively.
-In order to enable CUPS printing under certain Microsoft(R) Windows(R) clients, the line below should be uncommented in [.filename]#/usr/local/etc/cups/mime.types# and [.filename]#/usr/local/etc/cups/mime.convs#:
+To enable CUPS printing under certain Microsoft(R) Windows(R) clients, the line below should be uncommented in [.filename]#/usr/local/etc/cups/mime.types# and [.filename]#/usr/local/etc/cups/mime.convs#:
[.programlisting]
....
@@ -181,7 +181,7 @@ Generally, the Windows(R) administrator will run the Windows(R) `Add Printer` wi
http://server-name-or-ip:631/printers/printername
....
-If one has an older version of Windows(R) without native IPP printing support, then the general means of connecting to a CUPS printer is to use package:net/samba413[] and CUPS together, which is a topic outside the scope of this chapter.
+If one has an older version of Windows(R) without native IPP printing support, then the general means of connecting to a CUPS printer is to use package:net/samba416[] and CUPS together, which is a topic outside the scope of this chapter.
[[printing-cups-troubleshooting]]
== CUPS Troubleshooting
diff --git a/documentation/content/en/articles/cups/_index.po b/documentation/content/en/articles/cups/_index.po
new file mode 100644
index 0000000000..b377aee531
--- /dev/null
+++ b/documentation/content/en/articles/cups/_index.po
@@ -0,0 +1,502 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-05-21 14:43-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/cups/_index.adoc:1
+#, no-wrap
+msgid "How to install and use CUPS on FreeBSD"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/articles/cups/_index.adoc:1
+#: documentation/content/en/articles/cups/_index.adoc:11
+#, no-wrap
+msgid "CUPS on FreeBSD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:44
+msgid "Abstract"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:46
+msgid "An article about configuring CUPS on FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:48
+msgid "'''"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/cups/_index.adoc:52
+#, no-wrap
+msgid "An Introduction to the Common Unix Printing System (CUPS)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:56
+msgid ""
+"CUPS, the Common UNIX Printing System, provides a portable printing layer "
+"for UNIX(R)-based operating systems. It has been developed by Easy Software "
+"Products to promote a standard printing solution for all UNIX(R) vendors and "
+"users."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:61
+msgid ""
+"CUPS uses the Internet Printing Protocol (IPP) as the basis for managing "
+"print jobs and queues. The Line Printer Daemon (LPD), Server Message Block "
+"(SMB), and AppSocket (aka JetDirect) protocols are also supported with "
+"reduced functionality. CUPS adds network printer browsing and PostScript "
+"Printer Description (PPD) based printing options to support real-world "
+"printing under UNIX(R). As a result, CUPS is ideally-suited for sharing and "
+"accessing printers in mixed environments of FreeBSD, Linux(R), Mac OS(R) X, "
+"or Windows(R)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:63
+msgid "The main site for CUPS is http://www.cups.org/[http://www.cups.org/]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/cups/_index.adoc:65
+#, no-wrap
+msgid "Installing the CUPS Print Server"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:68
+msgid ""
+"To install CUPS using a precompiled binary, issue the following command from "
+"a root terminal:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:72
+#, no-wrap
+msgid "# pkg install cups\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:76
+msgid ""
+"Other optional, but recommended, packages are package:print/gutenprint[] and "
+"package:print/hplip[], both of which add drivers and utilities for a variety "
+"of printers. Once installed, the CUPS configuration files can be found in "
+"the directory [.filename]#/usr/local/etc/cups#."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/cups/_index.adoc:78
+#, no-wrap
+msgid "Configuring the CUPS Print Server"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:82
+msgid ""
+"After installation, a few files must be edited to configure the CUPS "
+"server. First, create or modify, as the case may be, the file [.filename]#/"
+"etc/devfs.rules# and add the following information to set the proper "
+"permissions on all potential printer devices and to associate printers with "
+"the `cups` user group:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:90
+#, no-wrap
+msgid ""
+"[system=10]\n"
+"add path 'unlpt*' mode 0660 group cups\n"
+"add path 'ulpt*' mode 0660 group cups\n"
+"add path 'lpt*' mode 0660 group cups\n"
+"add path 'usb/X.Y.Z' mode 0660 group cups\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/cups/_index.adoc:96
+msgid ""
+"Note that _X_, _Y_, and _Z_ should be replaced with the target USB device "
+"listed in the [.filename]#/dev/usb# directory that corresponds to the "
+"printer. To find the correct device, examine the output of man:dmesg[8], "
+"where [.filename]#ugenX.Y# lists the printer device, which is a symbolic "
+"link to a USB device in [.filename]#/dev/usb#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:99
+msgid "Next, add two lines to [.filename]#/etc/rc.conf# as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:104
+#, no-wrap
+msgid ""
+"cupsd_enable=\"YES\"\n"
+"devfs_system_ruleset=\"system\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:107
+msgid ""
+"These two entries will start the CUPS print server on boot and invoke the "
+"local devfs rule created above, respectively."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:109
+msgid ""
+"To enable CUPS printing under certain Microsoft(R) Windows(R) clients, the "
+"line below should be uncommented in [.filename]#/usr/local/etc/cups/mime."
+"types# and [.filename]#/usr/local/etc/cups/mime.convs#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:113
+#, no-wrap
+msgid "application/octet-stream\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:116
+msgid ""
+"Once these changes have been made, the man:devfs[8] and CUPS systems must "
+"both be restarted, either by rebooting the computer or issuing the following "
+"two commands in a root terminal:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:121
+#, no-wrap
+msgid ""
+"# /etc/rc.d/devfs restart\n"
+"# /usr/local/etc/rc.d/cupsd restart\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/cups/_index.adoc:124
+#, no-wrap
+msgid "Configuring Printers on the CUPS Print Server"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:128
+msgid ""
+"After the CUPS system has been installed and configured, the administrator "
+"can begin configuring the local printers attached to the CUPS print server. "
+"This part of the process is very similar, if not identical, to configuring "
+"CUPS printers on other UNIX(R)-based operating systems, such as a Linux(R) "
+"distribution."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:133
+msgid ""
+"The primary means for managing and administering the CUPS server is through "
+"the web-based interface, which can be found by launching a web browser and "
+"entering http://localhost:631[http://localhost:631] in the browser's URL "
+"bar. If the CUPS server is on another machine on the network, substitute "
+"the server's local IP address for `localhost`. The CUPS web interface is "
+"fairly self-explanatory, as there are sections for managing printers and "
+"print jobs, authorizing users, and more. Additionally, on the right-hand "
+"side of the Administration screen are several check-boxes allowing easy "
+"access to commonly-changed settings, such as whether to share published "
+"printers connected to the system, whether to allow remote administration of "
+"the CUPS server, and whether to allow users additional access and privileges "
+"to the printers and print jobs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:137
+msgid ""
+"Adding a printer is generally as easy as clicking \"Add Printer\" at the "
+"Administration screen of the CUPS web interface, or clicking one of the "
+"\"New Printers Found\" buttons also at the Administration screen. When "
+"presented with the \"Device\" drop-down box, simply select the desired "
+"locally-attached printer, and then continue through the process. If one has "
+"added the package:print/gutenprint-cups[] or package:print/hplip[] ports or "
+"packages as referenced above, then additional print drivers will be "
+"available in the subsequent screens that might provide more stability or "
+"features."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/cups/_index.adoc:139
+#, no-wrap
+msgid "Configuring CUPS Clients"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:143
+msgid ""
+"Once the CUPS server has been configured and printers have been added and "
+"published to the network, the next step is to configure the clients, or the "
+"machines that are going to access the CUPS server. If one has a single "
+"desktop machine that is acting as both server and client, then much of this "
+"information may not be needed."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/cups/_index.adoc:145
+#, no-wrap
+msgid "UNIX(R) Clients"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:151
+msgid ""
+"CUPS will also need to be installed on your UNIX(R) clients. Once CUPS is "
+"installed on the clients, then CUPS printers that are shared across the "
+"network are often automatically discovered by the printer managers for "
+"various desktop environments such as GNOME or KDE. Alternatively, one can "
+"access the local CUPS interface on the client machine at http://"
+"localhost:631[http://localhost:631] and click on \"Add Printer\" in the "
+"Administration section. When presented with the \"Device\" drop-down box, "
+"simply select the networked CUPS printer, if it was automatically "
+"discovered, or select `ipp` or `http` and enter the IPP or HTTP URI of the "
+"networked CUPS printer, usually in one of the two following syntaxes:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:155
+#, no-wrap
+msgid "ipp://server-name-or-ip/printers/printername\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:160
+#: documentation/content/en/articles/cups/_index.adoc:182
+#, no-wrap
+msgid "http://server-name-or-ip:631/printers/printername\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:163
+msgid ""
+"If the CUPS clients have difficulty finding other CUPS printers shared "
+"across the network, sometimes it is helpful to add or create a file [."
+"filename]#/usr/local/etc/cups/client.conf# with a single entry as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:167
+#, no-wrap
+msgid "ServerName server-ip\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:170
+msgid ""
+"In this case, _server-ip_ would be replaced by the local IP address of the "
+"CUPS server on the network."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/cups/_index.adoc:172
+#, no-wrap
+msgid "Windows(R) Clients"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:178
+msgid ""
+"Versions of Windows(R) prior to XP did not have the capability to natively "
+"network with IPP-based printers. However, Windows(R) XP and later versions "
+"do have this capability. Therefore, to add a CUPS printer in these versions "
+"of Windows(R) is quite easy. Generally, the Windows(R) administrator will "
+"run the Windows(R) `Add Printer` wizard, select `Network Printer` and then "
+"enter the URI in the following syntax:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:185
+msgid ""
+"If one has an older version of Windows(R) without native IPP printing "
+"support, then the general means of connecting to a CUPS printer is to use "
+"package:net/samba416[] and CUPS together, which is a topic outside the scope "
+"of this chapter."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/cups/_index.adoc:187
+#, no-wrap
+msgid "CUPS Troubleshooting"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:196
+msgid ""
+"Difficulties with CUPS often lies in permissions. First, double check the "
+"man:devfs[8] permissions as outlined above. Next, check the actual "
+"permissions of the devices created in the file system. It is also helpful "
+"to make sure your user is a member of the `cups` group. If the permissions "
+"check boxes in the Administration section of the CUPS web interface do not "
+"seem to be working, another fix might be to manually backup the main CUPS "
+"configuration file located at [.filename]#/usr/local/etc/cups/cupsd.conf# "
+"and edit the various configuration options and try different combinations of "
+"configuration options. One sample [.filename]#/usr/local/etc/cups/cupsd."
+"conf# to test is listed below. Please note that this sample [."
+"filename]#cupsd.conf# sacrifices security for easier configuration; once the "
+"administrator successfully connects to the CUPS server and configures the "
+"clients, it is advisable to revisit this configuration file and begin "
+"locking down access."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:202
+#, no-wrap
+msgid ""
+"# Log general information in error_log - change \"info\" to \"debug\" for\n"
+"# troubleshooting...\n"
+"LogLevel info\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:205
+#, no-wrap
+msgid ""
+"# Administrator user group...\n"
+"SystemGroup wheel\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:210
+#, no-wrap
+msgid ""
+"# Listen for connections on Port 631.\n"
+"Port 631\n"
+"#Listen localhost:631\n"
+"Listen /var/run/cups.sock\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:217
+#, no-wrap
+msgid ""
+"# Show shared printers on the local network.\n"
+"Browsing On\n"
+"BrowseOrder allow,deny\n"
+"#BrowseAllow @LOCAL\n"
+"BrowseAllow 192.168.1.* # change to local LAN settings\n"
+"BrowseAddress 192.168.1.* # change to local LAN settings\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:221
+#, no-wrap
+msgid ""
+"# Default authentication type, when authentication is required...\n"
+"DefaultAuthType Basic\n"
+"DefaultEncryption Never # comment this line to allow encryption\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:228
+#, no-wrap
+msgid ""
+"# Allow access to the server from any machine on the LAN\n"
+"<Location />\n"
+" Order allow,deny\n"
+" #Allow localhost\n"
+" Allow 192.168.1.* # change to local LAN settings\n"
+"</Location>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:236
+#, no-wrap
+msgid ""
+"# Allow access to the admin pages from any machine on the LAN\n"
+"<Location /admin>\n"
+" #Encryption Required\n"
+" Order allow,deny\n"
+" #Allow localhost\n"
+" Allow 192.168.1.* # change to local LAN settings\n"
+"</Location>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:245
+#, no-wrap
+msgid ""
+"# Allow access to configuration files from any machine on the LAN\n"
+"<Location /admin/conf>\n"
+" AuthType Basic\n"
+" Require user @SYSTEM\n"
+" Order allow,deny\n"
+" #Allow localhost\n"
+" Allow 192.168.1.* # change to local LAN settings\n"
+"</Location>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:256
+#, no-wrap
+msgid ""
+"# Set the default printer/job policies...\n"
+"<Policy default>\n"
+" # Job-related operations must be done by the owner or an administrator...\n"
+" <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs \\\n"
+"Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription \\\n"
+"Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job \\\n"
+"CUPS-Move-Job>\n"
+" Require user @OWNER @SYSTEM\n"
+" Order deny,allow\n"
+" </Limit>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:267
+#, no-wrap
+msgid ""
+" # All administration operations require an administrator to authenticate...\n"
+" <Limit Pause-Printer Resume-Printer Set-Printer-Attributes Enable-Printer \\\n"
+"Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs \\\n"
+"Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer \\\n"
+"Promote-Job Schedule-Job-After CUPS-Add-Printer CUPS-Delete-Printer CUPS-Add-Class \\\n"
+"CUPS-Delete-Class CUPS-Accept-Jobs CUPS-Reject-Jobs CUPS-Set-Default>\n"
+" AuthType Basic\n"
+" Require user @SYSTEM\n"
+" Order deny,allow\n"
+" </Limit>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:273
+#, no-wrap
+msgid ""
+" # Only the owner or an administrator can cancel or authenticate a job...\n"
+" <Limit Cancel-Job CUPS-Authenticate-Job>\n"
+" Require user @OWNER @SYSTEM\n"
+" Order deny,allow\n"
+" </Limit>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:278
+#, no-wrap
+msgid ""
+" <Limit All>\n"
+" Order deny,allow\n"
+" </Limit>\n"
+"</Policy>\n"
+msgstr ""
diff --git a/documentation/content/en/articles/explaining-bsd/_index.adoc b/documentation/content/en/articles/explaining-bsd/_index.adoc
index b188f0a2b0..82c9222170 100644
--- a/documentation/content/en/articles/explaining-bsd/_index.adoc
+++ b/documentation/content/en/articles/explaining-bsd/_index.adoc
@@ -4,7 +4,7 @@ authors:
- author: Greg Lehey
email: grog@FreeBSD.org
description: Brief explanation about BSD
-trademarks: ["freebsd", "amd", "apple", "intel", "linux", "opengroup", "sun", "unix", "general"]
+trademarks: ["freebsd", "amd", "apple", "git", intel", "linux", "opengroup", "sun", "unix", "general"]
tags: ["Explaining BSD", "BSD", "FreeBSD", "operating system"]
---
@@ -145,23 +145,23 @@ Users can obtain a complete copy of any version.
A large number of developers worldwide contribute to improvements to BSD.
They are divided into three kinds:
-* _Contributors_ write code or documentation. They are not permitted to commit (add code) directly to the source tree. In order for their code to be included in the system, it must be reviewed and checked in by a registered developer, known as a __committer__.
-* _Committers_ are developers with write access to the source tree. In order to become a committer, an individual must show ability in the area in which they are active.
+* _Contributors_ write code or documentation. They are not permitted to commit (add code) directly to the source tree. For their code to be included in the system, it must be reviewed and checked in by a registered developer, known as a __committer__.
+* _Committers_ are developers with write access to the source tree. To become a committer, an individual must show ability in the area in which they are active.
+
It is at the individual committer's discretion whether they should obtain authority before committing changes to the source tree.
In general, an experienced committer may make changes which are obviously correct without obtaining consensus.
For example, a documentation project committer may correct typographical or grammatical errors without review.
-On the other hand, developers making far-reaching or complicated changes are expected to submit their changes for review before committing them
+On the other hand, developers making far-reaching or complicated changes are expected to submit their changes for review before committing them.
In extreme cases, a core team member with a function such as Principal Architect may order that changes be removed from the tree, a process known as _backing out_.
All committers receive mail describing each individual commit, so it is not possible to commit secretly.
-* The _Core team_. FreeBSD and NetBSD each have a core team which manages the project. The core teams developed in the course of the projects, and their role is not always well-defined. It is not necessary to be a developer in order to be a core team member, though it is normal. The rules for the core team vary from one project to the other, but in general they have more say in the direction of the project than non-core team members have.
+* The _Core team_. FreeBSD and NetBSD each have a core team which manages the project. The core teams developed in the course of the projects, and their role is not always well-defined. It is not necessary to be a developer to be a core team member, though it is normal. The rules for the core team vary from one project to the other, but in general they have more say in the direction of the project than non-core team members have.
This arrangement differs from Linux in a number of ways:
. No one person controls the content of the system. In practice, this difference is overrated, since the Principal Architect can require that code be backed out, and even in the Linux project several people are permitted to make changes.
. On the other hand, there _is_ a central repository, a single place where you can find the entire operating system sources, including all older versions.
. BSD projects maintain the entire "Operating System", not only the kernel. This distinction is only marginally useful: neither BSD nor Linux is useful without applications. The applications used under BSD are frequently the same as the applications used under Linux.
-. As a result of the formalized maintenance of a single SVN source tree, BSD development is clear, and it is possible to access any version of the system by release number or by date. SVN also allows incremental updates to the system: for example, the FreeBSD repository is updated about 100 times a day. Most of these changes are small.
+. As a result of the formalized maintenance of a single Git source tree, BSD development is clear, and it is possible to access any version of the system by release number or by date. Git also allows incremental updates to the system: for example, the FreeBSD repository is updated about 100 times a day. Most of these changes are small.
=== BSD releases
@@ -171,7 +171,7 @@ In addition, the version number has a suffix indicating its purpose:
. The development version of the system is called _CURRENT_. FreeBSD assigns a number to CURRENT, for example FreeBSD 5.0-CURRENT. NetBSD uses a slightly different naming scheme and appends a single-letter suffix which indicates changes in the internal interfaces, for example NetBSD 1.4.3G. OpenBSD does not assign a number ("OpenBSD-current"). All new development on the system goes into this branch.
. At regular intervals, between two and four times a year, the projects bring out a _RELEASE_ version of the system, which is available on CD-ROM and for free download from FTP sites, for example OpenBSD 2.6-RELEASE or NetBSD 1.4-RELEASE. The RELEASE version is intended for end users and is the normal version of the system. NetBSD also provides _patch releases_ with a third digit, for example NetBSD 1.4.2.
-. As bugs are found in a RELEASE version, they are fixed, and the fixes are added to the SVN tree. In FreeBSD, the resultant version is called the _STABLE_ version, while in NetBSD and OpenBSD it continues to be called the RELEASE version. Smaller new features can also be added to this branch after a period of test in the CURRENT branch. Security and other important bug fixes are also applied to all supported RELEASE versions.
+. As bugs are found in a RELEASE version, they are fixed, and the fixes are added to the Git tree. In FreeBSD, the resultant version is called the _STABLE_ version, while in NetBSD and OpenBSD it continues to be called the RELEASE version. Smaller new features can also be added to this branch after a period of test in the CURRENT branch. Security and other important bug fixes are also applied to all supported RELEASE versions.
_By contrast, Linux maintains two separate code trees: the stable version and the development version.
Stable versions have an even minor version number, such as 2.0, 2.2 or 2.4.
@@ -206,7 +206,7 @@ This is particularly attractive for embedded applications.
=== What else should I know?
Since fewer applications are available for BSD than Linux, the BSD developers created a Linux compatibility package, which allows Linux programs to run under BSD.
-The package includes both kernel modifications, in order to correctly perform Linux system calls, and Linux compatibility files such as the C library.
+The package includes both kernel modifications, to correctly perform Linux system calls, and Linux compatibility files such as the C library.
There is no noticeable difference in execution speed between a Linux application running on a Linux machine and a Linux application running on a BSD machine of the same speed.
The "all from one supplier" nature of BSD means that upgrades are much easier to handle than is frequently the case with Linux.
@@ -228,6 +228,6 @@ Here are some guidelines:
=== Who provides support, service, and training for BSD?
-BSDi / http://www.freebsdmall.com[FreeBSD Mall, Inc.] have been providing support contracts for FreeBSD for nearly a decade.
+http://www.ixsystems.com/[iXsystems, Inc.] provides support contracts for FreeBSD.
In addition, each of the projects has a list of consultants for hire: link:https://www.FreeBSD.org/commercial/consult_bycat/[FreeBSD], http://www.netbsd.org/gallery/consultants.html[NetBSD], and http://www.openbsd.org/support.html[OpenBSD].
diff --git a/documentation/content/en/articles/explaining-bsd/_index.po b/documentation/content/en/articles/explaining-bsd/_index.po
new file mode 100644
index 0000000000..932b1a44f5
--- /dev/null
+++ b/documentation/content/en/articles/explaining-bsd/_index.po
@@ -0,0 +1,683 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-09-09 18:13-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:1
+#, no-wrap
+msgid "Brief explanation about BSD"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:1
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:11
+#, no-wrap
+msgid "Explaining BSD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:44
+msgid "Abstract"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:46
+msgid ""
+"In the open source world, the word \"Linux\" is almost synonymous with "
+"\"Operating System\", but it is not the only open source UNIX(R) operating "
+"system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:48
+msgid ""
+"So what is the secret? Why is BSD not better known? This white paper "
+"addresses these and other questions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:50
+msgid ""
+"Throughout this paper, differences between BSD and Linux will be noted "
+"__like this__."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:52
+msgid "'''"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:56
+#, no-wrap
+msgid "What is BSD?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:63
+msgid ""
+"BSD stands for \"Berkeley Software Distribution\". It is the name of "
+"distributions of source code from the University of California, Berkeley, "
+"which were originally extensions to AT&T's Research UNIX(R) operating "
+"system. Several open source operating system projects are based on a "
+"release of this source code known as 4.4BSD-Lite. In addition, they "
+"comprise a number of packages from other Open Source projects, including "
+"notably the GNU project. The overall operating system comprises:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:65
+msgid ""
+"The BSD kernel, which handles process scheduling, memory management, "
+"symmetric multi-processing (SMP), device drivers, etc."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:66
+msgid "The C library, the base API for the system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:68
+msgid ""
+"__The BSD C library is based on code from Berkeley, not the GNU project.__"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:69
+msgid "Utilities such as shells, file utilities, compilers and linkers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:71
+msgid ""
+"__Some of the utilities are derived from the GNU project, others are not.__"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:72
+msgid "The X Window system, which handles graphical display."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:75
+msgid ""
+"The X Window system used in most versions of BSD is maintained by the http://"
+"www.X.org/[X.Org project]. FreeBSD allows the user to choose from a variety "
+"of desktop environments, such as Gnome, KDE, or Xfce; and lightweight window "
+"managers like Openbox, Fluxbox, or Awesome."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:76
+msgid "Many other programs and utilities."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:78
+#, no-wrap
+msgid "What, a real UNIX(R)?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:83
+msgid ""
+"The BSD operating systems are not clones, but open source derivatives of "
+"AT&T's Research UNIX(R) operating system, which is also the ancestor of the "
+"modern UNIX(R) System V. This may surprise you. How could that happen when "
+"AT&T has never released its code as open source?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:85
+msgid ""
+"It is true that AT&T UNIX(R) is not open source, and in a copyright sense "
+"BSD is very definitely _not_ UNIX(R), but on the other hand, AT&T has "
+"imported sources from other projects, noticeably the Computer Sciences "
+"Research Group (CSRG) of the University of California in Berkeley, CA. "
+"Starting in 1976, the CSRG started releasing tapes of their software, "
+"calling them _Berkeley Software Distribution_ or __BSD__."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:89
+msgid ""
+"Initial BSD releases consisted mainly of user programs, but that changed "
+"dramatically when the CSRG landed a contract with the Defense Advanced "
+"Research Projects Agency (DARPA) to upgrade the communications protocols on "
+"their network, ARPANET. The new protocols were known as the __Internet "
+"Protocols__, later _TCP/IP_ after the most important protocols. The first "
+"widely distributed implementation was part of 4.2BSD, in 1982."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:96
+msgid ""
+"In the course of the 1980s, a number of new workstation companies sprang "
+"up. Many preferred to license UNIX(R) rather than developing operating "
+"systems for themselves. In particular, Sun Microsystems licensed UNIX(R) "
+"and implemented a version of 4.2BSD, which they called SunOS(TM). When AT&T "
+"themselves were allowed to sell UNIX(R) commercially, they started with a "
+"somewhat bare-bones implementation called System III, to be quickly followed "
+"by System V. The System V code base did not include networking, so all "
+"implementations included additional software from the BSD, including the TCP/"
+"IP software, but also utilities such as the _csh_ shell and the _vi_ "
+"editor. Collectively, these enhancements were known as the __Berkeley "
+"Extensions__."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:105
+msgid ""
+"The BSD tapes contained AT&T source code and thus required a UNIX(R) source "
+"license. By 1990, the CSRG's funding was running out, and it faced "
+"closure. Some members of the group decided to release the BSD code, which "
+"was Open Source, without the AT&T proprietary code. This finally happened "
+"with the __Networking Tape 2__, usually known as __Net/2__. Net/2 was not a "
+"complete operating system: about 20% of the kernel code was missing. One of "
+"the CSRG members, William F. Jolitz, wrote the remaining code and released "
+"it in early 1992 as __386BSD__. At the same time, another group of ex-CSRG "
+"members formed a commercial company called http://www.bsdi.com/[Berkeley "
+"Software Design Inc.] and released a beta version of an operating system "
+"called http://www.bsdi.com/[BSD/386], which was based on the same sources. "
+"The name of the operating system was later changed to BSD/OS."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:111
+msgid ""
+"386BSD never became a stable operating system. Instead, two other projects "
+"split off from it in 1993: http://www.NetBSD.org/[NetBSD] and link:https://"
+"www.FreeBSD.org/[FreeBSD]. The two projects originally diverged due to "
+"differences in patience waiting for improvements to 386BSD: the NetBSD "
+"people started early in the year, and the first version of FreeBSD was not "
+"ready until the end of the year. In the meantime, the code base had "
+"diverged sufficiently to make it difficult to merge. In addition, the "
+"projects had different aims, as we will see below. In 1996, http://www."
+"OpenBSD.org/[OpenBSD] split off from NetBSD, and in 2003, http://www."
+"dragonflybsd.org/[DragonFlyBSD] split off from FreeBSD."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:113
+#, no-wrap
+msgid "Why is BSD not better known?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:116
+msgid "For a number of reasons, BSD is relatively unknown:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:118
+msgid ""
+"The BSD developers are often more interested in polishing their code than "
+"marketing it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:119
+msgid ""
+"Much of Linux's popularity is due to factors external to the Linux projects, "
+"such as the press, and to companies formed to provide Linux services. Until "
+"recently, the open source BSDs had no such proponents."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:120
+msgid ""
+"In 1992, AT&T sued http://www.bsdi.com/[BSDI], the vendor of BSD/386, "
+"alleging that the product contained AT&T-copyrighted code. The case was "
+"settled out of court in 1994, but the spectre of the litigation continues to "
+"haunt people. In March 2000 an article published on the web claimed that the "
+"court case had been \"recently settled\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:124
+msgid ""
+"One detail that the lawsuit did clarify is the naming: in the 1980s, BSD was "
+"known as \"BSD UNIX(R)\". With the elimination of the last vestige of AT&T "
+"code from BSD, it also lost the right to the name UNIX(R). Thus you will "
+"see references in book titles to \"the 4.3BSD UNIX(R) operating system\" and "
+"\"the 4.4BSD operating system\"."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:126
+#, no-wrap
+msgid "Comparing BSD and Linux"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:132
+msgid ""
+"So what is really the difference between, say, Debian Linux and FreeBSD? For "
+"the average user, the difference is surprisingly small: Both are UNIX(R) "
+"like operating systems. Both are developed by non-commercial projects (this "
+"does not apply to many other Linux distributions, of course). In the "
+"following section, we will look at BSD and compare it to Linux. The "
+"description applies most closely to FreeBSD, which accounts for an estimated "
+"80% of the BSD installations, but the differences from NetBSD, OpenBSD and "
+"DragonFlyBSD are small."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:133
+#, no-wrap
+msgid "Who owns BSD?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:138
+msgid ""
+"No one person or corporation owns BSD. It is created and distributed by a "
+"community of highly technical and committed contributors all over the "
+"world. Some of the components of BSD are Open Source projects in their own "
+"right and managed by different project maintainers."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:139
+#, no-wrap
+msgid "How is BSD developed and updated?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:144
+msgid ""
+"The BSD kernels are developed and updated following the Open Source "
+"development model. Each project maintains a publicly accessible _source "
+"tree_ which contains all source files for the project, including "
+"documentation and other incidental files. Users can obtain a complete copy "
+"of any version."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:147
+msgid ""
+"A large number of developers worldwide contribute to improvements to BSD. "
+"They are divided into three kinds:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:149
+msgid ""
+"_Contributors_ write code or documentation. They are not permitted to commit "
+"(add code) directly to the source tree. For their code to be included in the "
+"system, it must be reviewed and checked in by a registered developer, known "
+"as a __committer__."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:150
+msgid ""
+"_Committers_ are developers with write access to the source tree. To become "
+"a committer, an individual must show ability in the area in which they are "
+"active."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:157
+msgid ""
+"It is at the individual committer's discretion whether they should obtain "
+"authority before committing changes to the source tree. In general, an "
+"experienced committer may make changes which are obviously correct without "
+"obtaining consensus. For example, a documentation project committer may "
+"correct typographical or grammatical errors without review. On the other "
+"hand, developers making far-reaching or complicated changes are expected to "
+"submit their changes for review before committing them. In extreme cases, a "
+"core team member with a function such as Principal Architect may order that "
+"changes be removed from the tree, a process known as _backing out_. All "
+"committers receive mail describing each individual commit, so it is not "
+"possible to commit secretly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:158
+msgid ""
+"The _Core team_. FreeBSD and NetBSD each have a core team which manages the "
+"project. The core teams developed in the course of the projects, and their "
+"role is not always well-defined. It is not necessary to be a developer to be "
+"a core team member, though it is normal. The rules for the core team vary "
+"from one project to the other, but in general they have more say in the "
+"direction of the project than non-core team members have."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:160
+msgid "This arrangement differs from Linux in a number of ways:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:162
+msgid ""
+"No one person controls the content of the system. In practice, this "
+"difference is overrated, since the Principal Architect can require that code "
+"be backed out, and even in the Linux project several people are permitted to "
+"make changes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:163
+msgid ""
+"On the other hand, there _is_ a central repository, a single place where you "
+"can find the entire operating system sources, including all older versions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:164
+msgid ""
+"BSD projects maintain the entire \"Operating System\", not only the kernel. "
+"This distinction is only marginally useful: neither BSD nor Linux is useful "
+"without applications. The applications used under BSD are frequently the "
+"same as the applications used under Linux."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:165
+msgid ""
+"As a result of the formalized maintenance of a single Git source tree, BSD "
+"development is clear, and it is possible to access any version of the system "
+"by release number or by date. Git also allows incremental updates to the "
+"system: for example, the FreeBSD repository is updated about 100 times a "
+"day. Most of these changes are small."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:166
+#, no-wrap
+msgid "BSD releases"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:171
+msgid ""
+"FreeBSD, NetBSD and OpenBSD provide the system in three different "
+"\"releases\". As with Linux, releases are assigned a number such as 1.4.1 "
+"or 3.5. In addition, the version number has a suffix indicating its purpose:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:173
+msgid ""
+"The development version of the system is called _CURRENT_. FreeBSD assigns a "
+"number to CURRENT, for example FreeBSD 5.0-CURRENT. NetBSD uses a slightly "
+"different naming scheme and appends a single-letter suffix which indicates "
+"changes in the internal interfaces, for example NetBSD 1.4.3G. OpenBSD does "
+"not assign a number (\"OpenBSD-current\"). All new development on the system "
+"goes into this branch."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:174
+msgid ""
+"At regular intervals, between two and four times a year, the projects bring "
+"out a _RELEASE_ version of the system, which is available on CD-ROM and for "
+"free download from FTP sites, for example OpenBSD 2.6-RELEASE or NetBSD 1.4-"
+"RELEASE. The RELEASE version is intended for end users and is the normal "
+"version of the system. NetBSD also provides _patch releases_ with a third "
+"digit, for example NetBSD 1.4.2."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:175
+msgid ""
+"As bugs are found in a RELEASE version, they are fixed, and the fixes are "
+"added to the Git tree. In FreeBSD, the resultant version is called the "
+"_STABLE_ version, while in NetBSD and OpenBSD it continues to be called the "
+"RELEASE version. Smaller new features can also be added to this branch after "
+"a period of test in the CURRENT branch. Security and other important bug "
+"fixes are also applied to all supported RELEASE versions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:182
+msgid ""
+"_By contrast, Linux maintains two separate code trees: the stable version "
+"and the development version. Stable versions have an even minor version "
+"number, such as 2.0, 2.2 or 2.4. Development versions have an odd minor "
+"version number, such as 2.1, 2.3 or 2.5. In each case, the number is "
+"followed by a further number designating the exact release. In addition, "
+"each vendor adds their own userland programs and utilities, so the name of "
+"the distribution is also important. Each distribution vendor also assigns "
+"version numbers to the distribution, so a complete description might be "
+"something like \"TurboLinux 6.0 with kernel 2.2.14\"_"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:183
+#, no-wrap
+msgid "What versions of BSD are available?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:186
+msgid ""
+"In contrast to the numerous Linux distributions, there are only four major "
+"open source BSDs. Each BSD project maintains its own source tree and its own "
+"kernel. In practice, though, there appear to be fewer divergences between "
+"the userland code of the projects than there is in Linux."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:188
+msgid ""
+"It is difficult to categorize the goals of each project: the differences are "
+"very subjective. Basically,"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:190
+msgid ""
+"FreeBSD aims for high performance and ease of use by end users, and is a "
+"favourite of web content providers. It runs on a link:https://www.FreeBSD."
+"org/platforms/[number of platforms] and has significantly more users than "
+"the other projects."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:191
+msgid ""
+"NetBSD aims for maximum portability: \"of course it runs NetBSD\". It runs "
+"on machines from palmtops to large servers, and has even been used on NASA "
+"space missions. It is a particularly good choice for running on old non-"
+"Intel(R) hardware."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:192
+msgid ""
+"OpenBSD aims for security and code purity: it uses a combination of the open "
+"source concept and rigorous code reviews to create a system which is "
+"demonstrably correct, making it the choice of security-conscious "
+"organizations such as banks, stock exchanges and US Government departments. "
+"Like NetBSD, it runs on a number of platforms."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:193
+msgid ""
+"DragonFlyBSD aims for high performance and scalability under everything from "
+"a single-node UP system to a massively clustered system. DragonFlyBSD has "
+"several long-range technical goals, but focus lies on providing a SMP-"
+"capable infrastructure that is easy to understand, maintain and develop for."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:195
+msgid ""
+"There are also two additional BSD UNIX(R) operating systems which are not "
+"open source, BSD/OS and Apple's Mac OS(R) X:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:197
+msgid ""
+"BSD/OS was the oldest of the 4.4BSD derivatives. It was not open source, "
+"though source code licenses were available at relatively low cost. It "
+"resembled FreeBSD in many ways. Two years after the acquisition of BSDi by "
+"Wind River Systems, BSD/OS failed to survive as an independent product. "
+"Support and source code may still be available from Wind River, but all new "
+"development is focused on the VxWorks embedded operating system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:198
+msgid ""
+"http://www.apple.com/macosx/server/[Mac OS(R) X] is the latest version of "
+"the operating system for Apple(R)'s Mac(R) line. The BSD core of this "
+"operating system, http://developer.apple.com/darwin/[Darwin], is available "
+"as a fully functional open source operating system for x86 and PPC "
+"computers. The Aqua/Quartz graphics system and many other proprietary "
+"aspects of Mac OS(R) X remain closed-source, however. Several Darwin "
+"developers are also FreeBSD committers, and vice-versa."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:199
+#, no-wrap
+msgid "How does the BSD license differ from the GNU Public license?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:205
+msgid ""
+"Linux is available under the http://www.fsf.org/copyleft/gpl.html[GNU "
+"General Public License] (GPL), which is designed to eliminate closed source "
+"software. In particular, any derivative work of a product released under "
+"the GPL must also be supplied with source code if requested. By contrast, "
+"the http://www.opensource.org/licenses/bsd-license.html[BSD license] is less "
+"restrictive: binary-only distributions are allowed. This is particularly "
+"attractive for embedded applications."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:206
+#, no-wrap
+msgid "What else should I know?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:211
+msgid ""
+"Since fewer applications are available for BSD than Linux, the BSD "
+"developers created a Linux compatibility package, which allows Linux "
+"programs to run under BSD. The package includes both kernel modifications, "
+"to correctly perform Linux system calls, and Linux compatibility files such "
+"as the C library. There is no noticeable difference in execution speed "
+"between a Linux application running on a Linux machine and a Linux "
+"application running on a BSD machine of the same speed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:214
+msgid ""
+"The \"all from one supplier\" nature of BSD means that upgrades are much "
+"easier to handle than is frequently the case with Linux. BSD handles "
+"library version upgrades by providing compatibility modules for earlier "
+"library versions, so it is possible to run binaries which are several years "
+"old with no problems."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:215
+#, no-wrap
+msgid "Which should I use, BSD or Linux?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:218
+msgid ""
+"What does this all mean in practice? Who should use BSD, who should use "
+"Linux?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:221
+msgid "This is a very difficult question to answer. Here are some guidelines:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:223
+msgid ""
+"\"If it ain't broke, don't fix it\": If you already use an open source "
+"operating system, and you are happy with it, there is probably no good "
+"reason to change."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:224
+msgid ""
+"BSD systems, in particular FreeBSD, can have notably higher performance than "
+"Linux. But this is not across the board. In many cases, there is little or "
+"no difference in performance. In some cases, Linux may perform better than "
+"FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:225
+msgid ""
+"In general, BSD systems have a better reputation for reliability, mainly as "
+"a result of the more mature code base."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:226
+msgid ""
+"BSD projects have a better reputation for the quality and completeness of "
+"their documentation. The various documentation projects aim to provide "
+"actively updated documentation, in many languages, and covering all aspects "
+"of the system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:227
+msgid "The BSD license may be more attractive than the GPL."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:228
+msgid ""
+"BSD can execute most Linux binaries, while Linux can not execute BSD "
+"binaries. Many BSD implementations can also execute binaries from other "
+"UNIX(R) like systems. As a result, BSD may present an easier migration route "
+"from other systems than Linux would."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:229
+#, no-wrap
+msgid "Who provides support, service, and training for BSD?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:232
+msgid ""
+"http://www.ixsystems.com/[iXsystems, Inc.] provides support contracts for "
+"FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:233
+msgid ""
+"In addition, each of the projects has a list of consultants for hire: link:"
+"https://www.FreeBSD.org/commercial/consult_bycat/[FreeBSD], http://www."
+"netbsd.org/gallery/consultants.html[NetBSD], and http://www.openbsd.org/"
+"support.html[OpenBSD]."
+msgstr ""
diff --git a/documentation/content/en/articles/filtering-bridges/_index.adoc b/documentation/content/en/articles/filtering-bridges/_index.adoc
index 1d9f76ba83..1ef6adc085 100644
--- a/documentation/content/en/articles/filtering-bridges/_index.adoc
+++ b/documentation/content/en/articles/filtering-bridges/_index.adoc
@@ -44,7 +44,7 @@ Abstract
Often it is useful to divide one physical network (like an Ethernet) into two separate segments without having to create subnets, and use a router to link them together.
The device that connects the two networks in this way is called a bridge.
-A FreeBSD system with two network interfaces is enough in order to act as a bridge.
+A FreeBSD system with two network interfaces is enough to act as a bridge.
A bridge works by scanning the addresses of MAC level (Ethernet addresses) of the devices connected to each of its network interfaces and then forwarding the traffic between the two networks only if the source and the destination are on different segments.
Under many points of view a bridge is similar to an Ethernet switch with only two ports.
@@ -78,7 +78,7 @@ Select the best choice according to your needs and abilities.
Before going on, be sure to have at least two Ethernet cards that support the promiscuous mode for both reception and transmission, since they must be able to send Ethernet packets with any address, not just their own.
Moreover, to have a good throughput, the cards should be PCI bus mastering cards.
The best choices are still the Intel EtherExpress(TM) Pro, followed by the 3Com(R) 3c9xx series.
-To simplify the firewall configuration it may be useful to have two cards of different manufacturers (using different drivers) in order to distinguish clearly which interface is connected to the router and which to the inner network.
+To simplify the firewall configuration it may be useful to have two cards of different manufacturers (using different drivers) to distinguish clearly which interface is connected to the router and which to the inner network.
[[filtering-bridges-kernel]]
=== Kernel Configuration
@@ -114,9 +114,9 @@ It is not required to add a similar row for the [.filename]#ipfw.ko# module, sin
[[filtering-bridges-finalprep]]
== Final Preparation
-Before rebooting in order to load the new kernel or the required modules (according to the previously chosen installation method), you have to make some changes to the [.filename]#/etc/rc.conf# configuration file.
+Before rebooting to load the new kernel or the required modules (according to the previously chosen installation method), you have to make some changes to the [.filename]#/etc/rc.conf# configuration file.
The default rule of the firewall is to reject all IP packets.
-Initially we will set up an `open` firewall, in order to verify its operation without any issue related to packet filtering (in case you are going to execute this procedure remotely, such configuration will avoid you to remain isolated from the network).
+Initially we will set up an `open` firewall, to verify its operation without any issue related to packet filtering (in case you are going to execute this procedure remotely, such configuration will avoid you to remain isolated from the network).
Put these lines in [.filename]#/etc/rc.conf#:
[.programlisting]
@@ -138,7 +138,7 @@ Assigning an IP to both the network cards does not make much sense, unless, duri
There is another important thing to know.
When running IP over Ethernet, there are actually two Ethernet protocols in use: one is IP, the other is ARP.
ARP does the conversion of the IP address of a host into its Ethernet address (MAC layer).
-In order to allow the communication between two hosts separated by the bridge, it is necessary that the bridge will forward ARP packets.
+To allow the communication between two hosts separated by the bridge, it is necessary that the bridge will forward ARP packets.
Such protocol is not included in the IP layer, since it exists only with IP over Ethernet.
The FreeBSD firewall filters exclusively on the IP layer and therefore all non-IP packets (ARP included) will be forwarded without being filtered, even if the firewall is configured to not permit anything.
@@ -161,14 +161,14 @@ At this point, to enable the bridge, you have to execute the following commands
The first row specifies which interfaces should be activated by the bridge, the second one will enable the firewall on the bridge and finally the third one will enable the bridge.
At this point you should be able to insert the machine between two sets of hosts without compromising any communication abilities between them.
-If so, the next step is to add the `net.link.ether.bridge._[blah]_=_[blah]_` portions of these rows to the [.filename]#/etc/sysctl.conf# file, in order to have them execute at startup.
+If so, the next step is to add the `net.link.ether.bridge._[blah]_=_[blah]_` portions of these rows to the [.filename]#/etc/sysctl.conf# file, to have them execute at startup.
[[filtering-bridges-ipfirewall]]
== Configuring The Firewall
-Now it is time to create your own file with custom firewall rules, in order to secure the inside network.
+Now it is time to create your own file with custom firewall rules, to secure the inside network.
There will be some complication in doing this because not all of the firewall functionalities are available on bridged packets.
-Furthermore, there is a difference between the packets that are in the process of being forwarded and packets that are being received by the local machine.
+Furthermore, there is a difference between the packets that are in the process of being forwarded and packets that are being received by the local machine.
In general, incoming packets are run through the firewall only once, not twice as is normally the case; in fact they are filtered only upon receipt, so rules that use `out` or `xmit` will never match.
Personally, I use `in via` which is an older syntax, but one that has a sense when you read it.
Another limitation is that you are restricted to use only `pass` or `drop` commands for packets filtered by a bridge.
@@ -176,7 +176,7 @@ Sophisticated things like `divert`, `forward` or `reject` are not available.
Such options can still be used, but only on traffic to or from the bridge machine itself (if it has an IP address).
New in FreeBSD 4.0, is the concept of stateful filtering.
-This is a big improvement for UDP traffic, which typically is a request going out, followed shortly thereafter by a response with the exact same set of IP addresses and port numbers (but with source and destination reversed, of course).
+This is a big improvement for UDP traffic, which typically is a request going out, followed shortly thereafter by a response with the same set of IP addresses and port numbers (but with source and destination reversed, of course).
For firewalls that have no statekeeping, there is almost no way to deal with this sort of traffic as a single session.
But with a firewall that can "remember" an outgoing UDP packet and, for the next few minutes, allow a response, handling UDP services is trivial.
The following example shows how to do it.
@@ -267,16 +267,16 @@ But there is a difference: all suspected traffic will be logged.
There are two rules for passing SMTP and DNS traffic towards the mail server and the name server, if you have them.
Obviously the whole rule set should be flavored to personal taste, this is only a specific example (rule format is described accurately in the man:ipfw[8] man page).
-Note that in order for "relay" and "ns" to work, name service lookups must work _before_ the bridge is enabled.
+Note that for "relay" and "ns" to work, name service lookups must work _before_ the bridge is enabled.
This is an example of making sure that you set the IP on the correct network card.
Alternatively it is possible to specify the IP address instead of the host name (required if the machine is IP-less).
-People that are used to setting up firewalls are probably also used to either having a `reset` or a `forward` rule for ident packets (TCP port 113).
+People that are used to setting up firewalls are probably also used to either having a `reset` or a `forward` rule for ident packets (TCP port 113).
Unfortunately, this is not an applicable option with the bridge, so the best thing is to simply pass them to their destination.
As long as that destination machine is not running an ident daemon, this is relatively harmless.
The alternative is dropping connections on port 113, which creates some problems with services like IRC (the ident probe must timeout).
-The only other thing that is a little weird that you may have noticed is that there is a rule to let the bridge machine speak, and another for internal hosts.
+The only other thing that is a little weird that you may have noticed is that there is a rule to let the bridge machine speak, and another for internal hosts.
Remember that this is because the two sets of traffic will take different paths through the kernel and into the packet filter.
The inside net will go through the bridge, while the local machine will use the normal IP stack to speak.
Thus the two rules to handle the different cases.
diff --git a/documentation/content/en/articles/filtering-bridges/_index.po b/documentation/content/en/articles/filtering-bridges/_index.po
new file mode 100644
index 0000000000..987db4a5fc
--- /dev/null
+++ b/documentation/content/en/articles/filtering-bridges/_index.po
@@ -0,0 +1,583 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 ""
+
+#. type: Title =
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:1
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:11
+#, no-wrap
+msgid "Filtering Bridges"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:44
+msgid "Abstract"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:48
+msgid ""
+"Often it is useful to divide one physical network (like an Ethernet) into "
+"two separate segments without having to create subnets, and use a router to "
+"link them together. The device that connects the two networks in this way "
+"is called a bridge. A FreeBSD system with two network interfaces is enough "
+"to act as a bridge."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:51
+msgid ""
+"A bridge works by scanning the addresses of MAC level (Ethernet addresses) "
+"of the devices connected to each of its network interfaces and then "
+"forwarding the traffic between the two networks only if the source and the "
+"destination are on different segments. Under many points of view a bridge "
+"is similar to an Ethernet switch with only two ports."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:53
+msgid "'''"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:57
+#, no-wrap
+msgid "Why use a filtering bridge?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:62
+msgid ""
+"More and more frequently, thanks to the lowering costs of broad band "
+"Internet connections (xDSL) and also because of the reduction of available "
+"IPv4 addresses, many companies are connected to the Internet 24 hours on 24 "
+"and with few (sometimes not even a power of 2) IP addresses. In these "
+"situations it is often desirable to have a firewall that filters incoming "
+"and outgoing traffic from and towards Internet, but a packet filtering "
+"solution based on router may not be applicable, either due to subnetting "
+"issues, the router is owned by the connectivity supplier (ISP), or because "
+"it does not support such functionalities. In these scenarios the use of a "
+"filtering bridge is highly advised."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:64
+msgid ""
+"A bridge-based firewall can be configured and inserted between the xDSL "
+"router and your Ethernet hub/switch without any IP numbering issues."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:66
+#, no-wrap
+msgid "How to Install"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:71
+msgid ""
+"Adding bridge functionalities to a FreeBSD system is not difficult. Since "
+"4.5 release it is possible to load such functionalities as modules instead "
+"of having to rebuild the kernel, simplifying the procedure a great deal. In "
+"the following subsections I will explain both installation ways."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:76
+msgid ""
+"_Do not_ follow both instructions: a procedure _excludes_ the other one. "
+"Select the best choice according to your needs and abilities."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:82
+msgid ""
+"Before going on, be sure to have at least two Ethernet cards that support "
+"the promiscuous mode for both reception and transmission, since they must be "
+"able to send Ethernet packets with any address, not just their own. "
+"Moreover, to have a good throughput, the cards should be PCI bus mastering "
+"cards. The best choices are still the Intel EtherExpress(TM) Pro, followed "
+"by the 3Com(R) 3c9xx series. To simplify the firewall configuration it may "
+"be useful to have two cards of different manufacturers (using different "
+"drivers) to distinguish clearly which interface is connected to the router "
+"and which to the inner network."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:84
+#, no-wrap
+msgid "Kernel Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:88
+msgid ""
+"So you have decided to use the older but well tested installation method. "
+"To begin, you have to add the following rows to your kernel configuration "
+"file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:94
+#, no-wrap
+msgid ""
+"options BRIDGE\n"
+"options IPFIREWALL\n"
+"options IPFIREWALL_VERBOSE\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:97
+msgid ""
+"The first line is to compile the bridge support, the second one is the "
+"firewall and the third one is the logging functions of the firewall."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:100
+msgid ""
+"Now it is necessary to build and install the new kernel. You may find "
+"detailed instructions in the extref:{handbook}[Building and Installing a "
+"Custom Kernel, kernelconfig-building] section of the FreeBSD Handbook."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:102
+#, no-wrap
+msgid "Modules Loading"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:105
+msgid ""
+"If you have chosen to use the new and simpler installation method, the only "
+"thing to do now is add the following row to [.filename]#/boot/loader.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:109
+#, no-wrap
+msgid "bridge_load=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:113
+msgid ""
+"In this way, during the system startup, the [.filename]#bridge.ko# module "
+"will be loaded together with the kernel. It is not required to add a "
+"similar row for the [.filename]#ipfw.ko# module, since it will be loaded "
+"automatically after the execution of the steps in the following section."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:115
+#, no-wrap
+msgid "Final Preparation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:121
+msgid ""
+"Before rebooting to load the new kernel or the required modules (according "
+"to the previously chosen installation method), you have to make some changes "
+"to the [.filename]#/etc/rc.conf# configuration file. The default rule of "
+"the firewall is to reject all IP packets. Initially we will set up an "
+"`open` firewall, to verify its operation without any issue related to packet "
+"filtering (in case you are going to execute this procedure remotely, such "
+"configuration will avoid you to remain isolated from the network). Put "
+"these lines in [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:128
+#, no-wrap
+msgid ""
+"firewall_enable=\"YES\"\n"
+"firewall_type=\"open\"\n"
+"firewall_quiet=\"YES\"\n"
+"firewall_logging=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:131
+msgid ""
+"The first row will enable the firewall (and will load the module [."
+"filename]#ipfw.ko# if it is not compiled in the kernel), the second one to "
+"set up it in `open` mode (as explained in [.filename]#/etc/rc.firewall#), "
+"the third one to not show rules loading and the fourth one to enable logging "
+"support."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:137
+msgid ""
+"About the configuration of the network interfaces, the most used way is to "
+"assign an IP to only one of the network cards, but the bridge will work "
+"equally even if both interfaces or none has a configured IP. In the last "
+"case (IP-less) the bridge machine will be still more hidden, as inaccessible "
+"from the network: to configure it, you have to login from console or through "
+"a third network interface separated from the bridge. Sometimes, during the "
+"system startup, some programs require network access, say for domain "
+"resolution: in this case it is necessary to assign an IP to the external "
+"interface (the one connected to Internet, where DNS server resides), since "
+"the bridge will be activated at the end of the startup procedure. It means "
+"that the [.filename]#fxp0# interface (in our case) must be mentioned in the "
+"ifconfig section of the [.filename]#/etc/rc.conf# file, while the [."
+"filename]#xl0# is not. Assigning an IP to both the network cards does not "
+"make much sense, unless, during the start procedure, applications should "
+"access to services on both Ethernet segments."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:144
+msgid ""
+"There is another important thing to know. When running IP over Ethernet, "
+"there are actually two Ethernet protocols in use: one is IP, the other is "
+"ARP. ARP does the conversion of the IP address of a host into its Ethernet "
+"address (MAC layer). To allow the communication between two hosts separated "
+"by the bridge, it is necessary that the bridge will forward ARP packets. "
+"Such protocol is not included in the IP layer, since it exists only with IP "
+"over Ethernet. The FreeBSD firewall filters exclusively on the IP layer and "
+"therefore all non-IP packets (ARP included) will be forwarded without being "
+"filtered, even if the firewall is configured to not permit anything."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:146
+msgid ""
+"Now it is time to reboot the system and use it as before: there will be some "
+"new messages about the bridge and the firewall, but the bridge will not be "
+"activated and the firewall, being in `open` mode, will not avoid any "
+"operations."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:148
+msgid ""
+"If there are any problems, you should sort them out now before proceeding."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:150
+#, no-wrap
+msgid "Enabling the Bridge"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:153
+msgid ""
+"At this point, to enable the bridge, you have to execute the following "
+"commands (having the shrewdness to replace the names of the two network "
+"interfaces [.filename]#fxp0# and [.filename]#xl0# with your own ones):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:159
+#, no-wrap
+msgid ""
+"# sysctl net.link.ether.bridge.config=fxp0:0,xl0:0\n"
+"# sysctl net.link.ether.bridge.ipfw=1\n"
+"# sysctl net.link.ether.bridge.enable=1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:162
+msgid ""
+"The first row specifies which interfaces should be activated by the bridge, "
+"the second one will enable the firewall on the bridge and finally the third "
+"one will enable the bridge."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:165
+msgid ""
+"At this point you should be able to insert the machine between two sets of "
+"hosts without compromising any communication abilities between them. If so, "
+"the next step is to add the `net.link.ether.bridge._[blah]_=_[blah]_` "
+"portions of these rows to the [.filename]#/etc/sysctl.conf# file, to have "
+"them execute at startup."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:167
+#, no-wrap
+msgid "Configuring The Firewall"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:177
+msgid ""
+"Now it is time to create your own file with custom firewall rules, to secure "
+"the inside network. There will be some complication in doing this because "
+"not all of the firewall functionalities are available on bridged packets. "
+"Furthermore, there is a difference between the packets that are in the "
+"process of being forwarded and packets that are being received by the local "
+"machine. In general, incoming packets are run through the firewall only "
+"once, not twice as is normally the case; in fact they are filtered only upon "
+"receipt, so rules that use `out` or `xmit` will never match. Personally, I "
+"use `in via` which is an older syntax, but one that has a sense when you "
+"read it. Another limitation is that you are restricted to use only `pass` "
+"or `drop` commands for packets filtered by a bridge. Sophisticated things "
+"like `divert`, `forward` or `reject` are not available. Such options can "
+"still be used, but only on traffic to or from the bridge machine itself (if "
+"it has an IP address)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:185
+msgid ""
+"New in FreeBSD 4.0, is the concept of stateful filtering. This is a big "
+"improvement for UDP traffic, which typically is a request going out, "
+"followed shortly thereafter by a response with the same set of IP addresses "
+"and port numbers (but with source and destination reversed, of course). For "
+"firewalls that have no statekeeping, there is almost no way to deal with "
+"this sort of traffic as a single session. But with a firewall that can "
+"\"remember\" an outgoing UDP packet and, for the next few minutes, allow a "
+"response, handling UDP services is trivial. The following example shows how "
+"to do it. It is possible to do the same thing with TCP packets. This "
+"allows you to avoid some denial of service attacks and other nasty tricks, "
+"but it also typically makes your state table grow quickly in size."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:189
+msgid ""
+"Let's look at an example setup. Note first that at the top of [.filename]#/"
+"etc/rc.firewall# there are already standard rules for the loopback interface "
+"[.filename]#lo0#, so we should not have to care for them anymore. Custom "
+"rules should be put in a separate file (say [.filename]#/etc/rc.firewall."
+"local#) and loaded at system startup, by modifying the row of [.filename]#/"
+"etc/rc.conf# where we defined the `open` firewall:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:193
+#, no-wrap
+msgid "firewall_type=\"/etc/rc.firewall.local\"\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:198
+msgid ""
+"You have to specify the _full_ path, otherwise it will not be loaded with "
+"the risk to remain isolated from the network."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:201
+msgid ""
+"For our example imagine to have the [.filename]#fxp0# interface connected "
+"towards the outside (Internet) and the [.filename]#xl0# towards the inside "
+"(LAN). The bridge machine has the IP `1.2.3.4` (it is not possible that your "
+"ISP can give you an address quite like this, but for our example it is good)."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:206
+#, no-wrap
+msgid ""
+"# Things that we have kept state on before get to go through in a hurry\n"
+"add check-state\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:211
+#, no-wrap
+msgid ""
+"# Throw away RFC 1918 networks\n"
+"add drop all from 10.0.0.0/8 to any in via fxp0\n"
+"add drop all from 172.16.0.0/12 to any in via fxp0\n"
+"add drop all from 192.168.0.0/16 to any in via fxp0\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:217
+#, no-wrap
+msgid ""
+"# Allow the bridge machine to say anything it wants\n"
+"# (if the machine is IP-less do not include these rows)\n"
+"add pass tcp from 1.2.3.4 to any setup keep-state\n"
+"add pass udp from 1.2.3.4 to any keep-state\n"
+"add pass ip from 1.2.3.4 to any\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:222
+#, no-wrap
+msgid ""
+"# Allow the inside hosts to say anything they want\n"
+"add pass tcp from any to any in via xl0 setup keep-state\n"
+"add pass udp from any to any in via xl0 keep-state\n"
+"add pass ip from any to any in via xl0\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:234
+#, no-wrap
+msgid ""
+"# TCP section\n"
+"# Allow SSH\n"
+"add pass tcp from any to any 22 in via fxp0 setup keep-state\n"
+"# Allow SMTP only towards the mail server\n"
+"add pass tcp from any to relay 25 in via fxp0 setup keep-state\n"
+"# Allow zone transfers only by the secondary name server [dns2.nic.it]\n"
+"add pass tcp from 193.205.245.8 to ns 53 in via fxp0 setup keep-state\n"
+"# Pass ident probes. It is better than waiting for them to timeout\n"
+"add pass tcp from any to any 113 in via fxp0 setup keep-state\n"
+"# Pass the \"quarantine\" range\n"
+"add pass tcp from any to any 49152-65535 in via fxp0 setup keep-state\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:240
+#, no-wrap
+msgid ""
+"# UDP section\n"
+"# Allow DNS only towards the name server\n"
+"add pass udp from any to ns 53 in via fxp0 keep-state\n"
+"# Pass the \"quarantine\" range\n"
+"add pass udp from any to any 49152-65535 in via fxp0 keep-state\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:247
+#, no-wrap
+msgid ""
+"# ICMP section\n"
+"# Pass 'ping'\n"
+"add pass icmp from any to any icmptypes 8 keep-state\n"
+"# Pass error messages generated by 'traceroute'\n"
+"add pass icmp from any to any icmptypes 3\n"
+"add pass icmp from any to any icmptypes 11\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:250
+#, no-wrap
+msgid ""
+"# Everything else is suspect\n"
+"add drop log all from any to any\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:254
+msgid ""
+"Those of you who have set up firewalls before may notice some things "
+"missing. In particular, there are no anti-spoofing rules, in fact we did "
+"_not_ add:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:258
+#, no-wrap
+msgid "add deny all from 1.2.3.4/8 to any in via fxp0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:264
+msgid ""
+"That is, drop packets that are coming in from the outside claiming to be "
+"from our network. This is something that you would commonly do to be sure "
+"that someone does not try to evade the packet filter, by generating "
+"nefarious packets that look like they are from the inside. The problem with "
+"that is that there is _at least_ one host on the outside interface that you "
+"do not want to ignore: the router. But usually, the ISP anti-spoofs at "
+"their router, so we do not need to bother that much."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:267
+msgid ""
+"The last rule seems to be an exact duplicate of the default rule, that is, "
+"do not let anything pass that is not specifically allowed. But there is a "
+"difference: all suspected traffic will be logged."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:273
+msgid ""
+"There are two rules for passing SMTP and DNS traffic towards the mail server "
+"and the name server, if you have them. Obviously the whole rule set should "
+"be flavored to personal taste, this is only a specific example (rule format "
+"is described accurately in the man:ipfw[8] man page). Note that for "
+"\"relay\" and \"ns\" to work, name service lookups must work _before_ the "
+"bridge is enabled. This is an example of making sure that you set the IP on "
+"the correct network card. Alternatively it is possible to specify the IP "
+"address instead of the host name (required if the machine is IP-less)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:278
+msgid ""
+"People that are used to setting up firewalls are probably also used to "
+"either having a `reset` or a `forward` rule for ident packets (TCP port "
+"113). Unfortunately, this is not an applicable option with the bridge, so "
+"the best thing is to simply pass them to their destination. As long as that "
+"destination machine is not running an ident daemon, this is relatively "
+"harmless. The alternative is dropping connections on port 113, which "
+"creates some problems with services like IRC (the ident probe must timeout)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:285
+msgid ""
+"The only other thing that is a little weird that you may have noticed is "
+"that there is a rule to let the bridge machine speak, and another for "
+"internal hosts. Remember that this is because the two sets of traffic will "
+"take different paths through the kernel and into the packet filter. The "
+"inside net will go through the bridge, while the local machine will use the "
+"normal IP stack to speak. Thus the two rules to handle the different "
+"cases. The `in via fxp0` rules work for both paths. In general, if you use "
+"`in via` rules throughout the filter, you will need to make an exception for "
+"locally generated packets, because they did not come in via any of our "
+"interfaces."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:287
+#, no-wrap
+msgid "Contributors"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:291
+msgid ""
+"Many parts of this article have been taken, updated and adapted from an old "
+"text about bridging, edited by Nick Sayer. A pair of inspirations are due "
+"to an introduction on bridging by Steve Peterson."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:293
+msgid ""
+"A big thanks to Luigi Rizzo for the implementation of the bridge code in "
+"FreeBSD and for the time he has dedicated to me answering all of my related "
+"questions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:294
+msgid ""
+"A thanks goes out also to Tom Rhodes who looked over my job of translation "
+"from Italian (the original language of this article) into English."
+msgstr ""
diff --git a/documentation/content/en/articles/fonts/_index.po b/documentation/content/en/articles/fonts/_index.po
new file mode 100644
index 0000000000..33a5802983
--- /dev/null
+++ b/documentation/content/en/articles/fonts/_index.po
@@ -0,0 +1,1215 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:45
+msgid "Abstract"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:61
+#, no-wrap
+msgid "Basic Terminology"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:69
+#, no-wrap
+msgid "[.filename]#.afm#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:71
+msgid "The font metrics associated with a type 1 font."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:72
+#, no-wrap
+msgid "[.filename]#.pfm#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:74
+msgid "The printer font metrics associated with a type 1 font."
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:77
+msgid "A TrueType(R) font"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:78
+#, no-wrap
+msgid "[.filename]#.fot#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:80
+msgid "An indirect reference to a TrueType font (not an actual font)"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:81
+#, no-wrap
+msgid "[.filename]#.fon#, [.filename]#.fnt#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:83
+msgid "Bitmapped screen fonts"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:88
+#, no-wrap
+msgid "What Font Formats Can I Use?"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:95
+#, no-wrap
+msgid "Driver"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:97
+#, no-wrap
+msgid "vt"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:99
+msgid "[.filename]#.hex#"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:100
+#, no-wrap
+msgid "syscons"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:102
+msgid "[.filename]#.fnt#"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:103
+#, no-wrap
+msgid "Application"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:105
+#, no-wrap
+msgid "Ghostscript"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:107
+msgid "[.filename]#.pfa#, [.filename]#.pfb#, [.filename]#.ttf#"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:108
+#, no-wrap
+msgid "X11"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:111
+#, no-wrap
+msgid "Groff"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:113
+msgid "[.filename]#.pfa#, [.filename]#.afm#"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:114
+#, no-wrap
+msgid "Povray"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:123
+#, no-wrap
+msgid "Setting a Virtual Console to 80x60 Line Mode"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:134
+msgid "The command to actually switch the mode is man:vidcontrol[1]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:138
+#, no-wrap
+msgid "% vidcontrol VGA_80x60\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:152
+msgid "References: man:rc.conf[5], man:vidcontrol[1]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:154
+#, no-wrap
+msgid "Using Type 1 Fonts with X11"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:237
+msgid "Using this information, a possible name might be:"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:244
+msgid "The components of our name are:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:245
+#, no-wrap
+msgid "Foundry"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:247
+msgid "Lets just name all the new fonts `type1`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:248
+#, no-wrap
+msgid "Family"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:250
+msgid "The name of the font."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:251
+#, no-wrap
+msgid "Weight"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:255
+#, no-wrap
+msgid "Slant"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:259
+#, no-wrap
+msgid "Width"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:263
+#, no-wrap
+msgid "Additional style"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:266
+#, no-wrap
+msgid "Spacing"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:269
+msgid ""
+"proportional or monospaced. _Proportional_ is used since _isFixedPitch_ is "
+"false."
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:277
+#, no-wrap
+msgid "...-normal-r-normal-...-p-...\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:282
+msgid "So, to complete our example:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:315
+#, no-wrap
+msgid "Using Type 1 Fonts with Ghostscript"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:354
+msgid "References: [.filename]#fonts.txt# in the Ghostscript 4.01 distribution"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:356
+#, no-wrap
+msgid "Using Type 1 Fonts with Groff"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:395
+msgid "The font can now be referenced with the name SHOWBOAT."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:425
+msgid "To test the font:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:467
+#, no-wrap
+msgid "Converting TrueType Fonts to a groff/PostScript Format For groff"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:472
+#, no-wrap
+msgid "`ttf2pf`"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:481
+msgid "The files of interest are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:483
+msgid "[.filename]#GS_TTF.PS#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:484
+msgid "[.filename]#PF2AFM.PS#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:485
+msgid "[.filename]#ttf2pf.ps#"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:492
+#, no-wrap
+msgid "`afmtodit`"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:507
+#, no-wrap
+msgid "# make -f Makefile.sub afmtodit\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:514
+msgid "Create [.filename]#.afm# by typing:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:548
+msgid "Create the groff PostScript file:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:572
+#, no-wrap
+msgid "Can TrueType Fonts be Used with Other Programs?"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:588
+msgid "and others ..."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:590
+#, no-wrap
+msgid "Where Can Additional Fonts be Obtained?"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:597
+#, no-wrap
+msgid "Additional Questions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:600
+msgid "What use are the [.filename]#.pfm# files?"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
diff --git a/documentation/content/en/articles/freebsd-questions/_index.adoc b/documentation/content/en/articles/freebsd-questions/_index.adoc
index 426b20577f..2869c685ab 100644
--- a/documentation/content/en/articles/freebsd-questions/_index.adoc
+++ b/documentation/content/en/articles/freebsd-questions/_index.adoc
@@ -110,7 +110,7 @@ You can (and should) do some things yourself before asking a question on one of
* 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.
* 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].
-* 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].
+* 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.
* Use a search engine such as http://www.google.com[Google] or http://www.yahoo.com[Yahoo] to find answers to your question.
== How to Submit a Question
diff --git a/documentation/content/en/articles/freebsd-questions/_index.po b/documentation/content/en/articles/freebsd-questions/_index.po
new file mode 100644
index 0000000000..9856b90616
--- /dev/null
+++ b/documentation/content/en/articles/freebsd-questions/_index.po
@@ -0,0 +1,683 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-09-09 18:13-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:44
+msgid "Abstract"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:76
+#, no-wrap
+msgid "How to Subscribe to FreeBSD-questions"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:85
+#, no-wrap
+msgid "How to Unsubscribe from FreeBSD-questions"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:93
+#, no-wrap
+msgid "Should I ask `-questions` or `-hackers`?"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:107
+#, no-wrap
+msgid "Before Submitting a Question"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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."
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:116
+#, no-wrap
+msgid "How to Submit a Question"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:131
+msgid "exmh"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:132
+msgid "Microsoft(R) Exchange"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:133
+msgid "Microsoft(R) Outlook(R)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:135
+msgid ""
+"Try not to use MIME: a lot of people use mailers which do not get on very "
+"well with MIME."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:136
+msgid ""
+"Make sure your time and time zone are set correctly. This may seem a little "
+"silly, since your message still gets there, but many of the people you are "
+"trying to reach get several hundred messages a day. They frequently sort the "
+"incoming messages by subject and by date, and if your message does not come "
+"before the first answer, they may assume they missed it and not bother to "
+"look."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:137
+msgid ""
+"Do not include unrelated questions in the same message. Firstly, a long "
+"message tends to scare people off, and secondly, it is more difficult to get "
+"all the people who can answer all the questions to read the message."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:138
+msgid ""
+"Specify as much information as possible. This is a difficult area, and we "
+"need to expand on what information you need to submit, but here is a start:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:140
+msgid ""
+"In nearly every case, it is important to know the version of FreeBSD you are "
+"running. This is particularly the case for FreeBSD-CURRENT, where you should "
+"also specify the date of the sources, though of course you should not be "
+"sending questions about -CURRENT to FreeBSD-questions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:141
+msgid ""
+"With any problem which _could_ be hardware related, tell us about your "
+"hardware. In case of doubt, assume it is possible that it is hardware. What "
+"kind of CPU are you using? How fast? What motherboard? How much memory? What "
+"peripherals?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:143
+msgid ""
+"There is a judgement call here, of course, but the output of the man:"
+"dmesg[8] command can frequently be very useful, since it tells not just what "
+"hardware you are running, but what version of FreeBSD as well."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:144
+msgid ""
+"If you get error messages, do not say \"I get error messages\", say (for "
+"example) \"I get the error message 'No route to host'\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:145
+msgid ""
+"If your system panics, do not say \"My system panicked\", say (for example) "
+"\"my system panicked with the message 'free vnode isn't'\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:146
+msgid ""
+"If you have difficulty installing FreeBSD, please tell us what hardware you "
+"have. In particular, it is important to know the IRQs and I/O addresses of "
+"the boards installed in your machine."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:147
+msgid ""
+"If you have difficulty getting PPP to run, describe the configuration. Which "
+"version of PPP do you use? What kind of authentication do you have? Do you "
+"have a static or dynamic IP address? What kind of messages do you get in the "
+"log file?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:149
+msgid ""
+"A lot of the information you need to supply is the output of programs, such "
+"as man:dmesg[8], or console messages, which usually appear in [.filename]#/"
+"var/log/messages#. Do not try to copy this information by typing it in "
+"again; it is a real pain, and you are bound to make a mistake. To send log "
+"file contents, either make a copy of the file and use an editor to trim the "
+"information to what is relevant, or cut and paste into your message. For the "
+"output of programs like man:dmesg[8], redirect the output to a file and "
+"include that. For example,"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:153
+#, no-wrap
+msgid "% dmesg > /tmp/dmesg.out\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:156
+msgid "This redirects the information to the file [.filename]#/tmp/dmesg.out#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:157
+msgid ""
+"If you do all this, and you still do not get an answer, there could be other "
+"reasons. For example, the problem is so complicated that nobody knows the "
+"answer, or the person who does know the answer was offline. If you do not "
+"get an answer after, say, a week, it might help to re-send the message. If "
+"you do not get an answer to your second message, though, you are probably "
+"not going to get one from this forum. Resending the same message again and "
+"again will only make you unpopular."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:160
+msgid ""
+"To summarize, let's assume you know the answer to the following question "
+"(yes, it is the same one in each case). You choose which of these two "
+"questions you would be more prepared to answer:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:161
+#, no-wrap
+msgid "Message 1"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:171
+#, no-wrap
+msgid ""
+"Subject: HELP!!?!??\n"
+"I just can't get hits damn silly FereBSD system to\n"
+"workd, and Im really good at this tsuff, but I have never seen\n"
+"anythign sho difficult to install, it jst wont work whatever I try\n"
+"so why don't you guys tell me what I doing wrong.\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:174
+#, no-wrap
+msgid "Message 2"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:180
+#, no-wrap
+msgid "Subject: Problems installing FreeBSD\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:187
+#, no-wrap
+msgid ""
+"I've just got the FreeBSD 2.1.5 CDROM from Walnut Creek, and I'm having a lot\n"
+"of difficulty installing it. I have a 66 MHz 486 with 16 MB of\n"
+"memory and an Adaptec 1540A SCSI board, a 1.2GB Quantum Fireball\n"
+"disk and a Toshiba 3501XA CDROM drive. The installation works just\n"
+"fine, but when I try to reboot the system, I get the message\n"
+"Missing Operating System.\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:190
+#, no-wrap
+msgid "How to Follow up to a Question"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:195
+msgid ""
+"Often you will want to send in additional information to a question you have "
+"already sent. The best way to do this is to reply to your original "
+"message. This has three advantages:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:197
+msgid ""
+"You include the original message text, so people will know what you are "
+"talking about. Do not forget to trim unnecessary text out, though."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:198
+msgid ""
+"The text in the subject line stays the same (you did remember to put one in, "
+"did you not?). Many mailers will sort messages by subject. This helps group "
+"messages together."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:199
+msgid ""
+"The message reference numbers in the header will refer to the previous "
+"message. Some mailers, such as http://www.mutt.org/[mutt], can _thread_ "
+"messages, showing the exact relationships between the messages."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:200
+#, no-wrap
+msgid "How to Answer a Question"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:203
+msgid "Before you answer a question to FreeBSD-questions, consider:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:205
+msgid ""
+"A lot of the points on submitting questions also apply to answering "
+"questions. Read them."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:206
+msgid ""
+"Has somebody already answered the question? The easiest way to check this is "
+"to sort your incoming mail by subject: then (hopefully) you will see the "
+"question followed by any answers, all together."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:209
+msgid ""
+"If somebody has already answered it, it does not automatically mean that you "
+"should not send another answer. But it makes sense to read all the other "
+"answers first."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:210
+msgid ""
+"Do you have something to contribute beyond what has already been said? In "
+"general, \"Yeah, me too\" answers do not help much, although there are "
+"exceptions, like when somebody is describing a problem they are having, and "
+"they do not know whether it is their fault or whether there is something "
+"wrong with the hardware or software. If you do send a \"me too\" answer, you "
+"should also include any further relevant information."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:211
+msgid ""
+"Are you sure you understand the question? Very frequently, the person who "
+"asks the question is confused or does not express themselves very well. Even "
+"with the best understanding of the system, it is easy to send a reply which "
+"does not answer the question. This does not help: you will leave the person "
+"who submitted the question more frustrated or confused than ever. If nobody "
+"else answers, and you are not too sure either, you can always ask for more "
+"information."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:212
+msgid ""
+"Are you sure your answer is correct? If not, wait a day or so. If nobody "
+"else comes up with a better answer, you can still reply and say, for "
+"example, \"I do not know if this is correct, but since nobody else has "
+"replied, why don't you try replacing your ATAPI CDROM with a frog?\"."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:213
+msgid ""
+"Unless there is a good reason to do otherwise, reply to the sender and to "
+"FreeBSD-questions. Many people on the FreeBSD-questions are \"lurkers\": "
+"they learn by reading messages sent and replied to by others. If you take a "
+"message which is of general interest off the list, you are depriving these "
+"people of their information. Be careful with group replies; lots of people "
+"send messages with hundreds of CCs. If this is the case, be sure to trim the "
+"Cc: lines appropriately."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:214
+msgid ""
+"Include relevant text from the original message. Trim it to the minimum, but "
+"do not overdo it. It should still be possible for somebody who did not read "
+"the original message to understand what you are talking about."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:215
+msgid ""
+"Use some technique to identify which text came from the original message, "
+"and which text you add. I personally find that prepending \"`>`\" to the "
+"original message works best. Leaving white space after the \"`> ;`\" and "
+"leave empty lines between your text and the original text both make the "
+"result more readable."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:216
+msgid ""
+"Put your response in the correct place (after the text to which it replies). "
+"It is very difficult to read a thread of responses where each reply comes "
+"before the text to which it replies."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:217
+msgid ""
+"Most mailers change the subject line on a reply by prepending a text such as "
+"\"Re: \". If your mailer does not do it automatically, you should do it "
+"manually."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:218
+msgid ""
+"If the submitter did not abide by format conventions (lines too long, "
+"inappropriate subject line) _please_ fix it. In the case of an incorrect "
+"subject line (such as \"HELP!!??\"), change the subject line to (say) \"Re: "
+"Difficulties with sync PPP (was: HELP!!??)\". That way other people trying "
+"to follow the thread will have less difficulty following it."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:221
+msgid ""
+"In such cases, it is appropriate to say what you did and why you did it, but "
+"try not to be rude. If you find you can not answer without being rude, do "
+"not answer."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:223
+msgid ""
+"If you just want to reply to a message because of its bad format, just reply "
+"to the submitter, not to the list. You can just send him this message in "
+"reply, if you like."
+msgstr ""
diff --git a/documentation/content/en/articles/freebsd-releng/_index.adoc b/documentation/content/en/articles/freebsd-releng/_index.adoc
index 02452258df..8a6b8b6aa9 100644
--- a/documentation/content/en/articles/freebsd-releng/_index.adoc
+++ b/documentation/content/en/articles/freebsd-releng/_index.adoc
@@ -9,7 +9,7 @@ organizations:
- organization: Rubicon Communications, LLC (Netgate)
webpage: https://www.netgate.com/
description: 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
-trademarks: ["freebsd", "intel", "general"]
+trademarks: ["freebsd", "intel", "general", "git"]
tags: ["releases", "engineering", "process", "FreeBSD"]
---
@@ -28,13 +28,13 @@ tags: ["releases", "engineering", "process", "FreeBSD"]
:teamPostmaster: FreeBSD Postmaster Team
:teamRe: FreeBSD Release Engineering Team
:teamSecteam: FreeBSD Security Team
-:branchHead: head/
+:branchHead: main
:branchStable: stable/
-:branchStablex: stable/12/
+:branchStablex: stable/13
:branchReleng: releng/
-:branchRelengx: releng/12.0/
-:branchReleasex: release/12.0.0/
-:branchRevision: 12.0
+:branchRelengx: releng/13.0
+:tagReleasex: release/13.0.0
+:branchRevision: 13.0
:images-path: articles/freebsd-releng/
@@ -63,11 +63,6 @@ Abstract
This article describes the release engineering process of the FreeBSD Project.
-[NOTE]
-====
-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.
-====
-
'''
toc::[]
@@ -83,7 +78,7 @@ The default minimum timeframe before merging to {branchStable} branches is three
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.
-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.
+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.
In between releases from the {branchStable} branches, approximately every two (2) years, a release will be cut directly from {branchHead}.
@@ -221,7 +216,7 @@ For example, a FreeBSD developer may request blanket approvals from the start of
[NOTE]
====
-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.
+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.
====
@@ -266,13 +261,10 @@ The code slush does not enforce commit approvals to the branch.
The code freeze marks the point in time where all commits to the branch require explicit approval from the {teamRe}.
-The FreeBSD Subversion repository contains several hooks to perform sanity checks before any commit is actually committed to the tree.
+The FreeBSD Git 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.
-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.
-
-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.
+To enforce commit approvals by the {teamRe}, the Release Engineering Team must approve any changes to the branch, in which case the commit log must include an `Approved by: re (login)` line, where "login" is the login ID of the approver.
[NOTE]
====
@@ -292,13 +284,13 @@ This section describes the changes to the website that should occur as the relea
[NOTE]
====
-The files specified throughout this section are relative to the `head/` branch of the `doc` repository in Subversion.
+The files specified throughout this section are relative to the `{branchHead}` branch of the `doc` repository.
====
[[releng-website-prerelease]]
=== Website Changes Before the Release Cycle Begins
-When the release cycle schedule is available, these files need to be updated to enable various different functionalities on the FreeBSD Project website:
+When the release cycle schedule is available, these files need to be updated to enable different functionalities on the FreeBSD Project website:
[.informaltable]
[cols="1,1", frame="none", options="header"]
@@ -325,7 +317,7 @@ When transitioning from `PRERELEASE` to `BETA`, these files need to be updated t
| File to Edit
| What to Change
-|[.filename]#share/releases.adoc#
+|[.filename]#~/shared/releases.adoc#
|Update `betarel-vers` to `BETA__1__`
|[.filename]#~/website/data/en/news/news.toml#
@@ -338,11 +330,7 @@ When transitioning from `PRERELEASE` to `BETA`, these files need to be updated t
|Add the new `BETA`, `RC`, or final `RELEASE` to the template
|===
-Once the {branchRelengx} branch is created, the various release-related documents need to be generated and manually added to the `doc/` repository.
-
-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.
-
-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.
+Once the {branchRelengx} branch is created, the various release-related documents need to be added to the `doc/` repository.
[NOTE]
====
@@ -380,14 +368,19 @@ See <<releng-building>> for information on building the `ALPHA` images.
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:
+To create the new {branchStablex} branch in Git:
+
+[NOTE]
+====
+Make sure that you are in the {branchHead} branch
+====
[source,shell,subs="attributes"]
....
-% svn cp ^/head {branchStablex}
+% git checkout -b {branchStablex}
....
-Once the {branchStablex} branch has been committed, make the following edits:
+Once the {branchStablex} branch has been created, make the following edits:
[.informaltable]
[cols="1,1", frame="none", options="header"]
@@ -395,10 +388,10 @@ Once the {branchStablex} branch has been committed, make the following edits:
| File to Edit
| What to Change
-|[.filename]#stable/12/UPDATING#
+|[.filename]#UPDATING#
|Update the FreeBSD version, and remove the notice about `WITNESS`
-|[.filename]#stable/12/contrib/jemalloc/include/jemalloc/jemalloc_FreeBSD.h#
+|[.filename]#contrib/jemalloc/include/jemalloc/jemalloc_FreeBSD.h#
a|
[source,shell,subs="attributes"]
@@ -408,37 +401,37 @@ a|
#endif
....
-|[.filename]#stable/12/lib/clang/llvm.build.mk#
+|[.filename]#lib/clang/llvm.build.mk#
|Uncomment `-DNDEBUG`
-|[.filename]#stable/12/sys/\*/conf/GENERIC*#
+|[.filename]#sys/\*/conf/GENERIC*#
|Remove debugging support
-|[.filename]#stable/12/sys/*/conf/MINIMAL#
+|[.filename]#sys/*/conf/MINIMAL#
|Remove debugging support
-|[.filename]#stable/12/release/release.conf.sample#
+|[.filename]#release/release.conf.sample#
|Update `SRCBRANCH`
-|[.filename]#stable/12/sys/*/conf/GENERIC-NODEBUG#
+|[.filename]#sys/*/conf/GENERIC-NODEBUG#
|Remove these kernel configurations
-|[.filename]#stable/12/sys/arm/conf/std.arm*#
+|[.filename]#sys/arm/conf/std.arm*#
|Remove debugging options
-|[.filename]#stable/12/sys/conf/newvers.sh#
+|[.filename]#sys/conf/newvers.sh#
|Update the `BRANCH` value to reflect `BETA1`
-|[.filename]#stable/12/share/mk/src.opts.mk#
+|[.filename]#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]#share/mk/src.opts.mk#
+|Move `LLVM_ASSERTIONS` from `\__DEFAULT_YES_OPTIONS` to `__DEFAULT_NO_OPTIONS`
-|[.filename]#stable/12/libexec/rc/rc.conf#
+|[.filename]#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#
+|[.filename]#release/Makefile#
|Remove the `debug.witness.trace` entries
|===
@@ -450,34 +443,34 @@ Then in the {branchHead} branch, which will now become a new major version:
| File to Edit
| What to Change
-|[.filename]#head/UPDATING#
+|[.filename]#UPDATING#
|Update the FreeBSD version
-|[.filename]#head/sys/conf/newvers.sh#
+|[.filename]#sys/conf/newvers.sh#
|Update the `BRANCH` value to reflect `CURRENT`, and increment `REVISION`
-|[.filename]#head/Makefile.inc1#
+|[.filename]#Makefile.inc1#
|Update `TARGET_TRIPLE` and `MACHINE_TRIPLE`
-|[.filename]#head/sys/sys/param.h#
+|[.filename]#sys/sys/param.h#
|Update `__FreeBSD_version`
-|[.filename]#head/gnu/usr.bin/cc/cc_tools/freebsd-native.h#
+|[.filename]#gnu/usr.bin/cc/cc_tools/freebsd-native.h#
|Update `FBSD_MAJOR` and `FBSD_CC_VER`
-|[.filename]#head/contrib/gcc/config.gcc#
+|[.filename]#contrib/gcc/config.gcc#
|Append the `freebsdversion.h` section
-|[.filename]#head/lib/clang/llvm.build.mk#
+|[.filename]#lib/clang/llvm.build.mk#
|Update the value of `OS_VERSION`
-|[.filename]#head/lib/clang/freebsd_cc_version.h#
+|[.filename]#lib/clang/freebsd_cc_version.h#
|Update `FREEBSD_CC_VERSION`
-|[.filename]#head/lib/clang/include/lld/Common/Version.inc#
+|[.filename]#lib/clang/include/lld/Common/Version.inc#
|Update `LLD_REVISION_STRING`
-|[.filename]#head/Makefile.libcompat#
+|[.filename]#Makefile.libcompat#
|Update `LIB32CPUFLAGS`
|===
@@ -516,18 +509,12 @@ These files are all relative to the top-most level of the stable branch:
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:
-
-[.programlisting,subs="attributes"]
-....
-^/{branchStablex} re
-^/{branchRelengx} re
-....
+This is enforced by {git-admin-email} who handles the repository.
[NOTE]
====
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.
+The first is any change that needs to be committed by the Release Engineer to proceed with the day-to-day workflow of the release cycle, the other is security fixes that may occur during the release cycle.
====
Once the code freeze is in effect, the next build from the branch is labeled `BETA1`.
@@ -540,13 +527,18 @@ Subsequent `BETA` builds do not require updates to any files other than [.filena
=== Creating the {branchRelengx} Branch
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.
+This is a multi-step process that must be done in a specific 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:
+[NOTE]
+====
+Make sure that you are in the {branchStablex} branch
+====
+
[source,shell,subs="attributes"]
....
-% svn cp ^/{branchStablex} {branchRelengx}
+% git checkout -b {branchRelengx}
....
[.informaltable]
@@ -555,41 +547,39 @@ The order of commits and what to change are:
| File to Edit
| What to Change
-|[.filename]#releng/12.0/sys/conf/newvers.sh#
+|[.filename]#sys/conf/newvers.sh#
|Change `BETA__X__` to `RC1`
-|[.filename]#releng/12.0/sys/sys/param.h#
+|[.filename]#sys/sys/param.h#
|Update `__FreeBSD_version`
-|[.filename]#releng/12.0/sys/conf/kern.opts.mk
+|[.filename]#sys/conf/kern.opts.mk#
|Move `REPRODUCIBLE_BUILD` from `__DEFAULT_NO_OPTIONS` to `__DEFAULT_YES_OPTIONS`
-|[.filename]#releng/12.0/etc/pkg/FreeBSD.conf#
+|[.filename]#etc/pkg/FreeBSD.conf#
|Replace `latest` with `quarterly` as the default package repository location
-|[.filename]#releng/12.0/release/pkg_repos/release-dvd.conf#
+|[.filename]#release/pkg_repos/release-dvd.conf#
|Replace `latest` with `quarterly` as the default package repository location
-|[.filename]#stable/12/sys/conf/newvers.sh#
+|[.filename]#sys/conf/newvers.sh#
|Update `BETA__X__` with `PRERELEASE`
-|[.filename]#stable/12/sys/sys/param.h#
+|[.filename]#sys/sys/param.h#
|Update `__FreeBSD_version`
-
-|[.filename]#svnadmin/conf/approvers#
-|Add a new approvers line for the releng branch as was done for the stable branch
|===
+Then, {git-admin-email} adds new approvers for the releng branch as did for the stable branch.
+
[source,shell,subs="attributes"]
....
-% svn propdel -R svn:mergeinfo {branchRelengx}
-% svn commit {branchRelengx}
-% svn commit {branchStablex}
+% git add .
+% git commit
....
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.
-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#.
+After the first `RC` build has completed and tested, the {branchStable} branch can be "thawed" by {git-admin-email}.
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.
@@ -601,11 +591,6 @@ This section describes the general procedures producing FreeBSD development snap
[[releng-build-scripts]]
=== Release Build Scripts
-This section describes the build scripts used by {teamRe} to produce development snapshots and releases.
-
-[[releng-build-scripts-single]]
-==== The [.filename]#release.sh# Script
-
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.
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.
@@ -638,98 +623,9 @@ Then invoke [.filename]#src/release/release.sh# as:
See and [.filename]#src/release/release.conf.sample# for more details and example usage.
-[[releng-build-scripts-multiple]]
-==== The [.filename]#thermite.sh# Wrapper Script
-
-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.
-
-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.
-
-Using [.filename]#thermite.sh# is covered in <<releng-build-snapshot>> and <<releng-build-release>>.
-
-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.
-
-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.
-
-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.
-
-There are two paths of file sourcing:
-
-* [.filename]#builds-12.conf# - [.filename]#main.conf#
-+
-This controls [.filename]#thermite.sh# behavior
-* [.filename]#12-amd64-GENERIC-snap.conf# - [.filename]#defaults-12.conf# - [.filename]#main.conf#
-+
-This controls [.filename]#release/release.sh# behavior within the build
-
-[NOTE]
-====
-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.
-====
-
-[[releng-build-snapshot]]
-=== Building FreeBSD Development Snapshots
-
-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.
-
-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.
-
-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#.
-
-[NOTE]
-====
-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.
-====
-
-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.
-
-Assuming these filesystem paths, [.filename]#thermite.sh# would be invoked as:
-
-[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
-....
-
-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:
-
-[source,shell,subs="attributes"]
-....
-# cd /releng/scripts-snapshot/scripts
-# ./get-checksums.sh -c ./builds-12.conf | ./generate-email.pl > snapshot-12-mail
-....
-
-[NOTE]
-====
-The generated output should be double-checked for correctness, and the email itself should be PGP signed, in-line.
-====
-
-[NOTE]
-====
-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].
-====
-
[[releng-build-release]]
=== Building FreeBSD Releases
-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.
-
-In addition, the `BUILDTYPE` and `types` must be changed from `snap` to `release` in [.filename]#defaults-12.conf# and [.filename]#builds-12.conf#, respectively.
-
-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}.
-
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.
@@ -751,14 +647,18 @@ In preparation for the release build, several files need to be updated:
|Replace `__FreeBSD_version` with the value in [.filename]#sys/sys/param.h#
|===
-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`.
+After building the final `RELEASE`, the {branchRelengx} branch is tagged as {tagReleasex} using the revision from which the `RELEASE` was built.
+Similar to creating the {branchStablex} and {branchRelengx} branches, this is done with `git tag`.
From the repository root:
+[NOTE]
+====
+Make sure that you are in the {branchRelengx} branch
+====
+
[source,shell,subs="attributes"]
....
-% svn cp ^/{branchRelengx}@r306420 {branchReleasex}
-% svn commit {branchReleasex}
+% git tag {tagReleasex}
....
[[releng-mirrors]]
@@ -795,14 +695,14 @@ On `ftp-master` in the FreeBSD Project infrastructure, this step requires `root`
=== Publishing FreeBSD Installation Media
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#.
+To reduce propagation time, is used to create hard links from [.filename]#/archive/tmp# to [.filename]#/archive/pub/FreeBSD#.
[NOTE]
====
-In order for this to be effective, both [.filename]#/archive/tmp# and [.filename]#/archive/pub# must reside on the same logical filesystem.
+For this to be effective, both [.filename]#/archive/tmp# and [.filename]#/archive/pub# must reside on the same logical filesystem.
====
-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.
+There is a caveat, however, where rsync must be used after to correct the symbolic links in [.filename]#pub/FreeBSD/snapshots/ISO-IMAGES# which will replace with a hard link, increasing the propagation time.
[NOTE]
====
@@ -846,7 +746,7 @@ Once the {branchReleng} branch has been handed over to the {teamSecteam} as desc
[[releng-wrapup-handoff]]
=== Handoff to the {teamSecteam}
-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.
+Roughly two weeks following the release, the Release Engineer updates the Git repository changing the approver from the Release engineering team to the security officer for the {branchRelengx} branch.
[[releng-eol]]
== Release End-of-Life
@@ -864,7 +764,6 @@ When a release reaches End-of-Life, references to that release should be removed
| File
| What to Change
-
|[.filename]#~/website/themes/beastie/layouts/index.html#
|Remove `u-relXXX-announce` and `u-relXXX-announce` references.
@@ -872,7 +771,7 @@ When a release reaches End-of-Life, references to that release should be removed
|Move the `u-relXXX-*` variables from the supported release list to the Legacy Releases list.
|[.filename]#~/website/content/en/releng/_index.adoc#
-|Update the appropriate releng branch to refelect the branch is no longer supported.
+|Update the appropriate releng branch to reflect the branch is no longer supported.
|[.filename]#~/website/content/en/security/_index.adoc#
|Remove the branch from the supported branch list.
diff --git a/documentation/content/en/articles/freebsd-releng/_index.po b/documentation/content/en/articles/freebsd-releng/_index.po
new file mode 100644
index 0000000000..95c866467f
--- /dev/null
+++ b/documentation/content/en/articles/freebsd-releng/_index.po
@@ -0,0 +1,1859 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:63
+msgid "Abstract"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:67
+msgid "'''"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:71
+#, no-wrap
+msgid "Introduction to the FreeBSD Release Engineering Process"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:75
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:78
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:80
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:83
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:86
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:88
+msgid ""
+"This article will highlight the workflow and responsibilities of the "
+"{teamRe} for both \"dot-zero\" and \"point\"' releases."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:90
+msgid "The following sections of this article describe:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:91
+#, no-wrap
+msgid "<<releng-prep>>"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:93
+msgid "General information and preparation before starting the release cycle."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:94
+#, no-wrap
+msgid "<<releng-website>>"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:96
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:281
+#, no-wrap
+msgid "Website Changes During the Release Cycle"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:97
+#, no-wrap
+msgid "<<releng-terms>>"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:99
+msgid ""
+"Terminology and general information, such as the \"code slush\" and \"code "
+"freeze\", used throughout this document."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:100
+#, no-wrap
+msgid "<<releng-head>>"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:102
+msgid "The Release Engineering process for a \"dot-zero\" release."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:103
+#, no-wrap
+msgid "<<releng-stable>>"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:105
+msgid "The Release Engineering process for a \"point\" release."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:106
+#, no-wrap
+msgid "<<releng-building>>"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:108
+msgid ""
+"Information related to the specific procedures to build installation medium."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:109
+#, no-wrap
+msgid "<<releng-mirrors>>"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:111
+msgid "Procedures to publish installation medium."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:112
+#, no-wrap
+msgid "<<releng-wrapup>>"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:114
+msgid "Wrapping up the release cycle."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:116
+#, no-wrap
+msgid "General Information and Preparation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:121
+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 ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:126
+#, no-wrap
+msgid "Milestone"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:128
+#, no-wrap
+msgid "Anticipated Date"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:129
+#, no-wrap
+msgid "{branchHead} slush:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:131
+#, no-wrap
+msgid "May 27, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:132
+#, no-wrap
+msgid "{branchHead} freeze:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:134
+#, no-wrap
+msgid "June 10, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:135
+#, no-wrap
+msgid "{branchHead} KBI freeze:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:137
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:140
+#, no-wrap
+msgid "June 24, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:138
+#, no-wrap
+msgid "`doc/` tree slush [1]:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:141
+#, no-wrap
+msgid "Ports quarterly branch [2]:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:143
+#, no-wrap
+msgid "July 1, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:144
+#, no-wrap
+msgid "{branchStablex} branch:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:146
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:149
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:152
+#, no-wrap
+msgid "July 8, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:147
+#, no-wrap
+msgid "`doc/` tree tag [3]:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:150
+#, no-wrap
+msgid "BETA1 build starts:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:153
+#, no-wrap
+msgid "{branchHead} thaw:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:155
+#, no-wrap
+msgid "July 9, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:156
+#, no-wrap
+msgid "BETA2 build starts:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:158
+#, no-wrap
+msgid "July 15, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:159
+#, no-wrap
+msgid "BETA3 build starts [*]:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:161
+#, no-wrap
+msgid "July 22, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:162
+#, no-wrap
+msgid "{branchRelengx} branch:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:164
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:167
+#, no-wrap
+msgid "July 29, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:165
+#, no-wrap
+msgid "RC1 build starts:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:168
+#, no-wrap
+msgid "{branchStablex} thaw:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:170
+#, no-wrap
+msgid "July 30, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:171
+#, no-wrap
+msgid "RC2 build starts:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:173
+#, no-wrap
+msgid "August 5, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:174
+#, no-wrap
+msgid "Final Ports package builds [4]:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:176
+#, no-wrap
+msgid "August 6, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:177
+#, no-wrap
+msgid "Ports release tag:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:179
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:182
+#, no-wrap
+msgid "August 12, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:180
+#, no-wrap
+msgid "RC3 build starts [*]:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:183
+#, no-wrap
+msgid "RELEASE build starts:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:185
+#, no-wrap
+msgid "August 19, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:186
+#, no-wrap
+msgid "RELEASE announcement:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:187
+#, no-wrap
+msgid "September 2, 2016"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:192
+msgid "Items marked with \"[*]\" are \"as needed\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:195
+msgid "The `doc/` tree slush is coordinated by the {teamDoceng}."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:196
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:197
+msgid "The `doc/` tree is tagged by the {teamDoceng}."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:198
+msgid ""
+"The final Ports package build is done by the {teamPortmgr} after the final "
+"(or what is expected to be final) `RC` build."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:202
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:207
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:209
+msgid ""
+"After general agreement on the schedule, the {teamRe} emails the schedule to "
+"the FreeBSD Developers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:212
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:216
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:221
+msgid ""
+"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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:226
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:229
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:233
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:235
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:239
+msgid ""
+"In most cases, the [.filename]#schedule.adoc# can be copied from a prior "
+"release and updated accordingly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:242
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:244
+msgid ""
+"The schedule is also linked from [.filename]#~/website/content/en/releng/"
+"_index.adoc#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:246
+msgid ""
+"Approximately one month prior to the scheduled \"code slush\", the {teamRe} "
+"sends a reminder email to the FreeBSD Developers."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:248
+#, no-wrap
+msgid "Release Engineering Terminology"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:251
+msgid ""
+"This section describes some of the terminology used throughout the rest of "
+"this document."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:253
+#, no-wrap
+msgid "The Code Slush"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:256
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:258
+msgid "The code slush does not enforce commit approvals to the branch."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:260
+#, no-wrap
+msgid "The Code Freeze"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:263
+msgid ""
+"The code freeze marks the point in time where all commits to the branch "
+"require explicit approval from the {teamRe}."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:266
+msgid ""
+"The FreeBSD Git 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:268
+msgid ""
+"To enforce commit approvals by the {teamRe}, the Release Engineering Team "
+"must approve any changes to the branch, in which case the commit log must "
+"include an `Approved by: re (login)` line, where \"login\" is the login ID "
+"of the approver."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:272
+msgid ""
+"During the code freeze, FreeBSD committers are urged to follow the link:"
+"https://wiki.freebsd.org/Releng/ChangeRequestGuidelines[Change Request "
+"Guidelines]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:275
+#, no-wrap
+msgid "The KBI/KPI Freeze"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:279
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:284
+msgid ""
+"This section describes the changes to the website that should occur as the "
+"release cycle progresses."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:288
+msgid ""
+"The files specified throughout this section are relative to the `{branchHead}"
+"` branch of the `doc` repository."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:291
+#, no-wrap
+msgid "Website Changes Before the Release Cycle Begins"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:294
+msgid ""
+"When the release cycle schedule is available, these files need to be updated "
+"to enable different functionalities on the FreeBSD Project website:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:299
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:318
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:389
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:444
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:492
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:548
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:638
+#, no-wrap
+msgid "File to Edit"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:301
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:320
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:391
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:446
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:494
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:550
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:640
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:767
+#, no-wrap
+msgid "What to Change"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:302
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:305
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:321
+#, no-wrap
+msgid "[.filename]#~/shared/releases.adoc#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:304
+#, no-wrap
+msgid "Change `beta-upcoming` from `IGNORE` to `INCLUDE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:307
+#, no-wrap
+msgid "Change `beta-testing` from `IGNORE` to `INCLUDE`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:310
+#, no-wrap
+msgid "Website Changes During `BETA` or `RC`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:313
+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 ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:323
+#, no-wrap
+msgid "Update `betarel-vers` to `BETA__1__`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:324
+#, no-wrap
+msgid "[.filename]#~/website/data/en/news/news.toml#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:326
+#, no-wrap
+msgid "Add an entry announcing the `BETA`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:327
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:786
+#, no-wrap
+msgid "[.filename]#~/website/static/security/advisory-template.txt#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:329
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:331
+#, no-wrap
+msgid "Add the new `BETA`, `RC`, or final `RELEASE` to the template"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:330
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:789
+#, no-wrap
+msgid "[.filename]#~/website/static/security/errata-template.txt#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:334
+msgid ""
+"Once the {branchRelengx} branch is created, the various release-related "
+"documents need to be added to the `doc/` repository."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:338
+msgid ""
+"The relevant release-related documents exist in the [.filename]#doc# "
+"repository for FreeBSD 12.x and later."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:341
+#, no-wrap
+msgid "Ports Changes During `BETA`, `RC`, and the Final `RELEASE`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:345
+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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:347
+#, no-wrap
+msgid "Release from {branchHead}"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:350
+msgid ""
+"This section describes the general procedures of the FreeBSD release cycle "
+"from the {branchHead} branch."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:352
+#, no-wrap
+msgid "FreeBSD \"`ALPHA`\" Builds"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:356
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:358
+msgid ""
+"The idea behind `ALPHA` builds is to provide regular FreeBSD-provided builds "
+"before the creation of the {branchStable} branch."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:360
+msgid "FreeBSD `ALPHA` snapshots should be built approximately once a week."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:363
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:365
+msgid "See <<releng-building>> for information on building the `ALPHA` images."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:367
+#, no-wrap
+msgid "Creating the {branchStablex} Branch"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:372
+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 Git:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:376
+msgid "Make sure that you are in the {branchHead} branch"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:381
+#, no-wrap
+msgid "% git checkout -b {branchStablex}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:384
+msgid ""
+"Once the {branchStablex} branch has been created, make the following edits:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:392
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:447
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:644
+#, no-wrap
+msgid "[.filename]#UPDATING#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:394
+#, no-wrap
+msgid "Update the FreeBSD version, and remove the notice about `WITNESS`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:395
+#, no-wrap
+msgid "[.filename]#contrib/jemalloc/include/jemalloc/jemalloc_FreeBSD.h#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:404
+#, no-wrap
+msgid ""
+"[source,shell,subs=\"attributes\"]\n"
+"....\n"
+"#ifndef MALLOC_PRODUCTION\n"
+"#define MALLOC_PRODUCTION\n"
+"#endif\n"
+"...."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:405
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:465
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:501
+#, no-wrap
+msgid "[.filename]#lib/clang/llvm.build.mk#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:407
+#, no-wrap
+msgid "Uncomment `-DNDEBUG`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:408
+#, no-wrap
+msgid "[.filename]#sys/\\*/conf/GENERIC*#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:410
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:413
+#, no-wrap
+msgid "Remove debugging support"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:411
+#, no-wrap
+msgid "[.filename]#sys/*/conf/MINIMAL#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:414
+#, no-wrap
+msgid "[.filename]#release/release.conf.sample#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:416
+#, no-wrap
+msgid "Update `SRCBRANCH`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:417
+#, no-wrap
+msgid "[.filename]#sys/*/conf/GENERIC-NODEBUG#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:419
+#, no-wrap
+msgid "Remove these kernel configurations"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:420
+#, no-wrap
+msgid "[.filename]#sys/arm/conf/std.arm*#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:422
+#, no-wrap
+msgid "Remove debugging options"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:423
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:450
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:495
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:551
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:566
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:641
+#, no-wrap
+msgid "[.filename]#sys/conf/newvers.sh#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:425
+#, no-wrap
+msgid "Update the `BRANCH` value to reflect `BETA1`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:426
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:429
+#, no-wrap
+msgid "[.filename]#share/mk/src.opts.mk#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:428
+#, no-wrap
+msgid "Move `REPRODUCIBLE_BUILD` from `\\__DEFAULT_NO_OPTIONS` to `__DEFAULT_YES_OPTIONS`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:431
+#, no-wrap
+msgid "Move `LLVM_ASSERTIONS` from `\\__DEFAULT_YES_OPTIONS` to `__DEFAULT_NO_OPTIONS`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:432
+#, no-wrap
+msgid "[.filename]#libexec/rc/rc.conf#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:434
+#, no-wrap
+msgid "Set `dumpdev` from `AUTO` to `NO` (it is configurable via for those that want it enabled by default)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:435
+#, no-wrap
+msgid "[.filename]#release/Makefile#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:436
+#, no-wrap
+msgid "Remove the `debug.witness.trace` entries"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:439
+msgid ""
+"Then in the {branchHead} branch, which will now become a new major version:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:449
+#, no-wrap
+msgid "Update the FreeBSD version"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:452
+#, no-wrap
+msgid "Update the `BRANCH` value to reflect `CURRENT`, and increment `REVISION`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:453
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:498
+#, no-wrap
+msgid "[.filename]#Makefile.inc1#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:455
+#, no-wrap
+msgid "Update `TARGET_TRIPLE` and `MACHINE_TRIPLE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:456
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:554
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:569
+#, no-wrap
+msgid "[.filename]#sys/sys/param.h#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:458
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:556
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:570
+#, no-wrap
+msgid "Update `__FreeBSD_version`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:459
+#, no-wrap
+msgid "[.filename]#gnu/usr.bin/cc/cc_tools/freebsd-native.h#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:461
+#, no-wrap
+msgid "Update `FBSD_MAJOR` and `FBSD_CC_VER`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:462
+#, no-wrap
+msgid "[.filename]#contrib/gcc/config.gcc#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:464
+#, no-wrap
+msgid "Append the `freebsdversion.h` section"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:467
+#, no-wrap
+msgid "Update the value of `OS_VERSION`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:468
+#, no-wrap
+msgid "[.filename]#lib/clang/freebsd_cc_version.h#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:470
+#, no-wrap
+msgid "Update `FREEBSD_CC_VERSION`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:471
+#, no-wrap
+msgid "[.filename]#lib/clang/include/lld/Common/Version.inc#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:473
+#, no-wrap
+msgid "Update `LLD_REVISION_STRING`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:474
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:504
+#, no-wrap
+msgid "[.filename]#Makefile.libcompat#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:475
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:505
+#, no-wrap
+msgid "Update `LIB32CPUFLAGS`"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:478
+#, no-wrap
+msgid "Release from {branchStable}"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:481
+msgid ""
+"This section describes the general procedures of the FreeBSD release cycle "
+"from an extablished {branchStable} branch."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:483
+#, no-wrap
+msgid "FreeBSD `stable` Branch Code Slush"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:487
+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 ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:497
+#, no-wrap
+msgid "Update the `BRANCH` value to reflect `PRERELEASE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:500
+#, no-wrap
+msgid "Update `TARGET_TRIPLE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:503
+#, no-wrap
+msgid "Update `OS_VERSION`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:508
+#, no-wrap
+msgid "FreeBSD `BETA` Builds"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:513
+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 {git-admin-email} "
+"who handles the repository."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:518
+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 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:522
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:525
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:527
+#, no-wrap
+msgid "Creating the {branchRelengx} Branch"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:533
+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, 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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:537
+msgid "Make sure that you are in the {branchStablex} branch"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:542
+#, no-wrap
+msgid "% git checkout -b {branchRelengx}\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:553
+#, no-wrap
+msgid "Change `BETA__X__` to `RC1`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:557
+#, no-wrap
+msgid "[.filename]#sys/conf/kern.opts.mk#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:559
+#, no-wrap
+msgid "Move `REPRODUCIBLE_BUILD` from `__DEFAULT_NO_OPTIONS` to `__DEFAULT_YES_OPTIONS`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:560
+#, no-wrap
+msgid "[.filename]#etc/pkg/FreeBSD.conf#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:562
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:565
+#, no-wrap
+msgid "Replace `latest` with `quarterly` as the default package repository location"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:563
+#, no-wrap
+msgid "[.filename]#release/pkg_repos/release-dvd.conf#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:568
+#, no-wrap
+msgid "Update `BETA__X__` with `PRERELEASE`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:573
+msgid ""
+"Then, {git-admin-email} adds new approvers for the releng branch as did for "
+"the stable branch."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:578
+#, no-wrap
+msgid ""
+"% git add .\n"
+"% git commit\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:581
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:583
+msgid ""
+"After the first `RC` build has completed and tested, the {branchStable} "
+"branch can be \"thawed\" by {git-admin-email}."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:585
+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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:587
+#, no-wrap
+msgid "Building FreeBSD Installation Media"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:590
+msgid ""
+"This section describes the general procedures producing FreeBSD development "
+"snapshots and releases."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:592
+#, no-wrap
+msgid "Release Build Scripts"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:595
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:598
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:600
+msgid ""
+"As a brief example of using [.filename]#src/release/release.sh# to build a "
+"single release in [.filename]#/scratch#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:604
+#, no-wrap
+msgid "# /bin/sh /usr/src/release/release.sh\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:607
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:615
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:618
+msgid "Then invoke [.filename]#src/release/release.sh# as:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:622
+#, no-wrap
+msgid "# /bin/sh /usr/src/release/release.sh -c $HOME/release.conf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:625
+msgid ""
+"See and [.filename]#src/release/release.conf.sample# for more details and "
+"example usage."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:627
+#, no-wrap
+msgid "Building FreeBSD Releases"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:631
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:633
+msgid "In preparation for the release build, several files need to be updated:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:643
+#, no-wrap
+msgid "Update the `BRANCH` value to `RELEASE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:646
+#, no-wrap
+msgid "Add the anticipated announcement date"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:647
+#, no-wrap
+msgid "[.filename]#lib/csu/common/crtbrand.S#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:648
+#, no-wrap
+msgid "Replace `__FreeBSD_version` with the value in [.filename]#sys/sys/param.h#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:653
+msgid ""
+"After building the final `RELEASE`, the {branchRelengx} branch is tagged as "
+"{tagReleasex} using the revision from which the `RELEASE` was built. "
+"Similar to creating the {branchStablex} and {branchRelengx} branches, this "
+"is done with `git tag`. From the repository root:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:657
+msgid "Make sure that you are in the {branchRelengx} branch"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:662
+#, no-wrap
+msgid "% git tag {tagReleasex}\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:665
+#, no-wrap
+msgid "Publishing FreeBSD Installation Media to Project Mirrors"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:668
+msgid ""
+"This section describes the procedure to publish FreeBSD development "
+"snapshots and releases to the Project mirrors."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:670
+#, no-wrap
+msgid "Staging FreeBSD Installation Media Images"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:673
+msgid "Staging FreeBSD snapshots and releases is a two part process:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:675
+msgid "Creating the directory structure to match the hierarchy on `ftp-master`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:678
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:682
+#, no-wrap
+msgid "# make -C /usr/src/release -f Makefile.mirrors EVERYTHINGISFINE=1 ftp-stage\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:685
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:686
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:688
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:692
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:695
+#, no-wrap
+msgid "Publishing FreeBSD Installation Media"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:699
+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#. To "
+"reduce propagation time, is used to create hard links from [.filename]#/"
+"archive/tmp# to [.filename]#/archive/pub/FreeBSD#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:703
+msgid ""
+"For this to be effective, both [.filename]#/archive/tmp# and [.filename]#/"
+"archive/pub# must reside on the same logical filesystem."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:706
+msgid ""
+"There is a caveat, however, where rsync must be used after to correct the "
+"symbolic links in [.filename]#pub/FreeBSD/snapshots/ISO-IMAGES# which will "
+"replace with a hard link, increasing the propagation time."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:710
+msgid ""
+"As with the staging steps, this requires `root` level access, as this step "
+"must be executed as the `archive` user."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:713
+msgid "As the `archive` user:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:719
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:722
+msgid "Replace _snapshots_ with _releases_ as appropriate."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:724
+#, no-wrap
+msgid "Wrapping up the Release Cycle"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:727
+msgid "This section describes general post-release tasks."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:729
+#, no-wrap
+msgid "Post-Release Errata Notices"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:733
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:737
+msgid "The actual process of issuing ENs is handled by the {teamSecteam}."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:740
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:742
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:745
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:747
+#, no-wrap
+msgid "Handoff to the {teamSecteam}"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:750
+msgid ""
+"Roughly two weeks following the release, the Release Engineer updates the "
+"Git repository changing the approver from the Release engineering team to "
+"the security officer for the {branchRelengx} branch."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:752
+#, no-wrap
+msgid "Release End-of-Life"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:755
+msgid ""
+"This section describes the website-related files to update when a release "
+"reaches EoL (End-of-Life)."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:757
+#, no-wrap
+msgid "Website Updates for End-of-Life"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:760
+msgid ""
+"When a release reaches End-of-Life, references to that release should be "
+"removed and/or updated on the website:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:765
+#, no-wrap
+msgid "File"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:768
+#, no-wrap
+msgid "[.filename]#~/website/themes/beastie/layouts/index.html#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:770
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:785
+#, no-wrap
+msgid "Remove `u-relXXX-announce` and `u-relXXX-announce` references."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:771
+#, no-wrap
+msgid "[.filename]#~/website/content/en/releases/_index.adoc#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:773
+#, no-wrap
+msgid "Move the `u-relXXX-*` variables from the supported release list to the Legacy Releases list."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:774
+#, no-wrap
+msgid "[.filename]#~/website/content/en/releng/_index.adoc#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:776
+#, no-wrap
+msgid "Update the appropriate releng branch to reflect the branch is no longer supported."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:777
+#, no-wrap
+msgid "[.filename]#~/website/content/en/security/_index.adoc#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:779
+#, no-wrap
+msgid "Remove the branch from the supported branch list."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:780
+#, no-wrap
+msgid "[.filename]#~/website/content/en/where.adoc#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:782
+#, no-wrap
+msgid "Remove the URLs for the release."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:783
+#, no-wrap
+msgid "[.filename]#~/website/themes/beastie/layouts/partials/sidenav.html#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:788
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:790
+#, no-wrap
+msgid "Remove references to the release and releng branch."
+msgstr ""
diff --git a/documentation/content/en/articles/freebsd-src-lsp/_index.adoc b/documentation/content/en/articles/freebsd-src-lsp/_index.adoc
index 8b6647833f..753e4f78f0 100644
--- a/documentation/content/en/articles/freebsd-src-lsp/_index.adoc
+++ b/documentation/content/en/articles/freebsd-src-lsp/_index.adoc
@@ -46,13 +46,30 @@ toc::[]
[[intro]]
== Introduction
-This guide is about setting up a FreeBSD src tree with language servers performing source code indexing.
+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.
-[[ports-required]]
-== Required Ports
+[[requirements]]
+== Requirements
-Some ports are required throughout the guide.
-Choose a favorite combination of tools from each category below:
+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.
+
+The installation of the Language server can be performed via `pkg` or via ports. If we chose `clangd` we need to install `llvm`.
+
+Using `pkg` to install `ccls`:
+
+[source,shell]
+....
+# pkg install ccls
+....
+
+If we want to use `clangd` we need to install `llvm` (The example command uses `llvm15` but choose the version you desire):
+
+[source,shell]
+....
+# pkg install llvm15
+....
+
+To install via ports choose a favorite combination of tools from each category below:
* Language server implementations
** package:devel/ccls[]
@@ -114,12 +131,14 @@ au User lsp_setup call lsp#register_server({
....
au User lsp_setup call lsp#register_server({
\ 'name': 'clangd',
- \ 'cmd': {server_info->['clangd12', '--background-index', '--header-insertion=never']},
+ \ 'cmd': {server_info->['clangd15', '--background-index', '--header-insertion=never']},
\ 'allowlist': ['c', 'cpp', 'objc'],
\ 'initialization_options': {},
\ })
....
+Depending on the version that you installed for `clangd` you might need to update the `server-info` to point to the correct binary.
+
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/[].
@@ -197,7 +216,7 @@ Depending on the language server implementations, put one of the following JSON
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]#compiler_commands.json#.
+The compilation database file is usually [.filename]#compile_commands.json#.
The database is used by language server implementations for indexing purpose.
Please refer to link:https://clang.llvm.org/docs/JSONCompilationDatabase.html#format[] for details on the format of the compilation database file.
@@ -244,7 +263,7 @@ In the top-level directory of the FreeBSD src tree, generate the compilation dat
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]#compiler_commands.json#.
+The generated compilation database by default is saved in the current working directory as [.filename]#compile_commands.json#.
[[generators-bear]]
==== Using devel/bear
@@ -259,8 +278,8 @@ In the top-level directory of the FreeBSD src tree, to generate compilation data
....
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]#compiler_commands.json#.
+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#.
[[final]]
== Final
diff --git a/documentation/content/en/articles/freebsd-src-lsp/_index.po b/documentation/content/en/articles/freebsd-src-lsp/_index.po
new file mode 100644
index 0000000000..20b6ba0feb
--- /dev/null
+++ b/documentation/content/en/articles/freebsd-src-lsp/_index.po
@@ -0,0 +1,535 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:47
+#, no-wrap
+msgid "Introduction"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:52
+#, no-wrap
+msgid "Requirements"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:59
+msgid "Using `pkg` to install `ccls`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:63
+#, no-wrap
+msgid "# pkg install ccls\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:70
+#, no-wrap
+msgid "# pkg install llvm15\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:75
+msgid "Language server implementations"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:76
+msgid "package:devel/ccls[]"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:78
+msgid "Editors"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:79
+msgid "package:editors/vim[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:80
+msgid "package:editors/neovim[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:81
+msgid "package:editors/vscode[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:82
+msgid "Compilation database generator"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:85
+msgid "package:devel/bear[]"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:87
+#, no-wrap
+msgid "Editor settings"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:90
+#, no-wrap
+msgid "Vim/Neovim"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:98
+msgid "To set up the LSP client plugin for Neovim:"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:106
+msgid "and for Vim:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:176
+#, no-wrap
+msgid "VSCode"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:215
+#, no-wrap
+msgid "Compilation database"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:225
+#, no-wrap
+msgid "Generators"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:228
+#, no-wrap
+msgid "Using scan-build-py"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:230
+#, no-wrap
+msgid "Installation"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:269
+#, no-wrap
+msgid "Using devel/bear"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 keys are merged. The generated compilation database by "
+"default is saved in the current working directory as [."
+"filename]#compile_commands.json#."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:285
+#, no-wrap
+msgid "Final"
+msgstr ""
+
+#. 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 ""
diff --git a/documentation/content/en/articles/freebsd-status-report-process/_index.adoc b/documentation/content/en/articles/freebsd-status-report-process/_index.adoc
new file mode 100644
index 0000000000..3193663a13
--- /dev/null
+++ b/documentation/content/en/articles/freebsd-status-report-process/_index.adoc
@@ -0,0 +1,288 @@
+---
+title: FreeBSD Status Report Process
+authors:
+ - author: The FreeBSD Documentation Project
+copyright: 2023 The FreeBSD Documentation Project
+description: Instructions for both writers and editors of status reports
+trademarks: ["freebsd", "git", "github", "general"]
+---
+
+= FreeBSD Status Report Process
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+
+'''
+
+toc::[]
+
+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.
+
+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.
+
+== Instructions for writers
+
+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.
+
+_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._
+
+=== Introduce Your Work
+
+_Do not assume that the person reading the report knows about your project._
+
+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:
+
+....
+abc(4) support was added, including frobnicator compatibility.
+....
+
+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:
+
+....
+A new driver, abc(4), was added to the tree, bringing support for
+Yoyodyne's range of Frobnicator network interfaces.
+....
+
+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.
+
+=== Show the Importance of Your Work
+
+_Status reports are not just about telling everyone that things were done, they also need to explain why they were done._
+
+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:
+
+....
+We imported Cyberdyne Systems T800 into the tree.
+....
+
+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.
+
+=== Tell Us Something New
+
+_Do not recycle the same status report items._
+
+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)?
+
+=== Sponsorship
+
+_Do not forget about your sponsors._
+
+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.
+
+=== Open Items
+
+_If help is needed, make this explicit!_
+
+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.
+
+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.
+
+=== Submit your report
+
+The following methods are available to submit your reports:
+
+* 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);
+
+* 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);
+
+* send an email to status-submissions@FreeBSD.org including your report.
+
+An link:https://www.FreeBSD.org/status/report-sample.adoc[AsciiDoc sample report template] is available.
+
+== Instructions for editors
+
+This section describes how the reviewing and publication process works.
+
+[.informaltable]
+[cols="1,1", frame="none"]
+|===
+
+|Status reports main webpage
+|link:https://www.FreeBSD.org/status/[https://www.FreeBSD.org/status/]
+
+|Status reports archived GitHub repository (was used for reports from 2017Q4 to 2022Q4):
+|link:https://www.github.com/freebsd/freebsd-quarterly[https://github.com/freebsd/freebsd-quarterly]
+
+|Main status team email address
+|link:mailto:status@FreeBSD.org[status@FreeBSD.org]
+
+|Email address for reports submission
+|link:mailto:status-submissions@FreeBSD.org[status-submissions@FreeBSD.org]
+
+|Mailing list for receiving calls for status reports
+|link:https://lists.freebsd.org/subscription/freebsd-status-calls[freebsd-status-calls@FreeBSD.org]
+
+|Phabricator status team main page
+|link:https://reviews.freebsd.org/project/profile/88/[https://reviews.freebsd.org/project/88/]
+|===
+
+=== Timeline
+
+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.
+
+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.
+
+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.
+
+[cols="1,2,2,2,2"]
+|===
+||First quarter|Second quarter|Third quarter|Fourth quarter
+
+|First call for reports
+|March 1st
+|June 1st
+|September 1st
+|December 1st
+
+|2 weeks left reminder
+|March 15th
+|June 15th
+|September 15th
+|December 15th
+
+|Last reminder
+|March 24th
+|June 24th
+|September 24th
+|December 24th
+
+|Standard deadline
+|March 31st
+|June 30th
+|September 30th
+|December 31st
+
+|Extended deadline
+|April 8th
+|July 8th
+|October 8th
+|January 8th
+
+|Third-party review slush
+|April 15th
+|July 15th
+|October 15th
+|January 15th
+|===
+
+=== Call for reports
+
+Calls for status reports are sent to the following recipients:
+
+* the link:https://lists.freebsd.org/subscription/freebsd-status-calls[freebsd-status-calls@FreeBSD.org mailing list];
+* to all submitters of last status reports (they may have updates or further improvements);
+* and, depending on the season:
+ ** Various conference organizers:
+ *** link:mailto:secretary@asiabsdcon.org[AsiaBSDCon] in March (First Quarter);
+ *** link:mailto:info@bsdcan.org[BSDCan] in May (Second Quarter);
+ *** EuroBSDcon September - October (Third-Fourth Quarter).
+ 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;
+ ** Google Summer of Code link:mailto:soc-students@FreeBSD.org[students] and their link:mailto:soc-mentors@FreeBSD.org[mentors].
+
+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:
+
+....
+0 0 1,15,24 3,6,9,12 * cd ~/doc/tools/sendcalls && git pull && ./sendcalls -s 'Lorenzo Salvadore'
+....
+
+[IMPORTANT]
+====
+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.
+====
+
+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].
+
+=== Building the report
+
+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.
+
+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.
+
+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.
+
+=== Publishing the report
+
+When all the files of the status report are ready, it is time to publish it.
+
+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.
+
+Then the news entry for the main website page is added to [.filename]#doc/website/data/en/news/news.toml#.
+
+Here is a sample for the news entry:
+....
+[[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."
+....
+
+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:
+....
+% w3m -cols 80 -dump https://www.FreeBSD.org/status/report-2021-01-2021-03/ > /tmp/report-2021-01-2021-03.txt
+....
+
+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.
+
+A link to the rendered report is added between the introduction and the first entry.
+
+The report is finally ready to be sent, toggling disposition (the report should be inlined), and ensuring it is encoded as UTF-8.
+
+Two emails are sent, both with subject in the format `FreeBSD Status Report - <First/Second/Third/Fourth> Quarter <year>`:
+
+* one to link:https://lists.freebsd.org/subscription/freebsd-announce[freebsd-announce@FreeBSD.org];
+
+[IMPORTANT]
+====
+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).
+====
+
+* 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.
diff --git a/documentation/content/en/articles/freebsd-status-report-process/_index.po b/documentation/content/en/articles/freebsd-status-report-process/_index.po
new file mode 100644
index 0000000000..9e38f12427
--- /dev/null
+++ b/documentation/content/en/articles/freebsd-status-report-process/_index.po
@@ -0,0 +1,863 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-04-20 21:10-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:29
+#, no-wrap
+msgid "Instructions for writers"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:37
+#, no-wrap
+msgid "Introduce Your Work"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:62
+#, no-wrap
+msgid "Show the Importance of Your Work"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:85
+#, no-wrap
+msgid "Tell Us Something New"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:88
+msgid "_Do not recycle the same status report items._"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:95
+#, no-wrap
+msgid "Sponsorship"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:98
+msgid "_Do not forget about your sponsors._"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:103
+#, no-wrap
+msgid "Open Items"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:106
+msgid "_If help is needed, make this explicit!_"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:115
+#, no-wrap
+msgid "Submit your report"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:129
+#, no-wrap
+msgid "Instructions for editors"
+msgstr ""
+
+#. 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:138
+#, no-wrap
+msgid "Status reports main webpage"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:144
+#, no-wrap
+msgid "Main status team email address"
+msgstr ""
+
+#. 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:147
+#, no-wrap
+msgid "Email address for reports submission"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:153
+#, no-wrap
+msgid "Phabricator status team main page"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:156
+#, no-wrap
+msgid "Timeline"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:172
+#, no-wrap
+msgid "First quarter"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:172
+#, no-wrap
+msgid "Second quarter"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:172
+#, no-wrap
+msgid "Third quarter"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:174
+#, no-wrap
+msgid "Fourth quarter"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:175
+#, no-wrap
+msgid "First call for reports"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:176
+#, no-wrap
+msgid "March 1st"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:177
+#, no-wrap
+msgid "June 1st"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:178
+#, no-wrap
+msgid "September 1st"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:180
+#, no-wrap
+msgid "December 1st"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:181
+#, no-wrap
+msgid "2 weeks left reminder"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:182
+#, no-wrap
+msgid "March 15th"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:183
+#, no-wrap
+msgid "June 15th"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:184
+#, no-wrap
+msgid "September 15th"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:186
+#, no-wrap
+msgid "December 15th"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:187
+#, no-wrap
+msgid "Last reminder"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:188
+#, no-wrap
+msgid "March 24th"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:189
+#, no-wrap
+msgid "June 24th"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:190
+#, no-wrap
+msgid "September 24th"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:192
+#, no-wrap
+msgid "December 24th"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:193
+#, no-wrap
+msgid "Standard deadline"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:194
+#, no-wrap
+msgid "March 31st"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:195
+#, no-wrap
+msgid "June 30th"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:196
+#, no-wrap
+msgid "September 30th"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:198
+#, no-wrap
+msgid "December 31st"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:199
+#, no-wrap
+msgid "Extended deadline"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:200
+#, no-wrap
+msgid "April 8th"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:201
+#, no-wrap
+msgid "July 8th"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:202
+#, no-wrap
+msgid "October 8th"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:204
+#, no-wrap
+msgid "January 8th"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:205
+#, no-wrap
+msgid "Third-party review slush"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:206
+#, no-wrap
+msgid "April 15th"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:207
+#, no-wrap
+msgid "July 15th"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:208
+#, no-wrap
+msgid "October 15th"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:209
+#, no-wrap
+msgid "January 15th"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:211
+#, no-wrap
+msgid "Call for reports"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:218
+msgid "and, depending on the season:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:219
+msgid "Various conference organizers:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:222
+msgid "EuroBSDcon September - October (Third-Fourth Quarter)."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:241
+#, no-wrap
+msgid "Building the report"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:251
+#, no-wrap
+msgid "Publishing the report"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:261
+msgid "Here is a sample for the news entry:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
diff --git a/documentation/content/en/articles/freebsd-update-server/_index.adoc b/documentation/content/en/articles/freebsd-update-server/_index.adoc
index dda1d906b3..78f44784c8 100644
--- a/documentation/content/en/articles/freebsd-update-server/_index.adoc
+++ b/documentation/content/en/articles/freebsd-update-server/_index.adoc
@@ -40,6 +40,16 @@ ifndef::env-beastie[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
+
+[WARNING]
+====
+The instructions in this article refer to an older version of FreeBSD and may
+not work properly on recent versions of the OS. With the availability of
+pkgbase, the freebsd-update utility is scheduled to be removed from FreeBSD in
+the future. When that happens, this article is either updated to reflect the
+new procedures or removed entirely.
+====
+
[.abstract-title]
Abstract
@@ -602,7 +612,7 @@ For reference, the entire run of link:../../source/articles/freebsd-update-serve
findextradocs () {
}
# Add extra docs to ${WORKDIR}/$1
-addextradocs () {
+addextradocs () {
}
....
diff --git a/documentation/content/en/articles/freebsd-update-server/_index.po b/documentation/content/en/articles/freebsd-update-server/_index.po
new file mode 100644
index 0000000000..5424e29877
--- /dev/null
+++ b/documentation/content/en/articles/freebsd-update-server/_index.po
@@ -0,0 +1,1039 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 ""
+
+#. 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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:51
+msgid ""
+"The instructions in this article refer to an older version of FreeBSD and "
+"may not work properly on recent versions of the OS. With the availability of "
+"pkgbase, the freebsd-update utility is scheduled to be removed from FreeBSD "
+"in the future. When that happens, this article is either updated to reflect "
+"the new procedures or removed entirely."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:55
+msgid "Abstract"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:59
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:61
+msgid "'''"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:65
+#, no-wrap
+msgid "Acknowledgments"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:68
+msgid ""
+"This article was subsequently printed at https://people.freebsd.org/~jgh/"
+"files/fus/BSD_03_2010_EN.pdf[BSD Magazine]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:70
+#, no-wrap
+msgid "Introduction"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:77
+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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:79
+#, no-wrap
+msgid "Prerequisites"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:82
+msgid ""
+"To build an internal FreeBSD Update Server some requirements should be met."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:84
+msgid "A running FreeBSD system."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:88
+msgid ""
+"At a minimum, updates require building on a FreeBSD release greater than or "
+"equal to the target release version for distribution."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:90
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:91
+msgid ""
+"An man:ssh[1] account on a remote machine to upload distributed updates."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:92
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:93
+msgid "Basic knowledge of shell scripting with Bourne shell, man:sh[1]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:95
+#, no-wrap
+msgid "Configuration: Installation & Setup"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:98
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:102
+#, no-wrap
+msgid "% git clone https://github.com/freebsd/freebsd-update-build.git freebsd-update-server\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:106
+msgid ""
+"Update [.filename]#scripts/build.conf# appropriately. It is sourced during "
+"all build operations."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:108
+msgid ""
+"Here is the default [.filename]#build.conf#, which should be modified to "
+"suit your environment."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:114
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:117
+#, no-wrap
+msgid ""
+"# Location from which to fetch releases\n"
+"export FTP=ftp://ftp2.freebsd.org/pub/FreeBSD/releases <.>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:120
+#, no-wrap
+msgid ""
+"# Host platform\n"
+"export HOSTPLATFORM=`uname -m`\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:123
+#, no-wrap
+msgid ""
+"# Host name to use inside jails\n"
+"export BUILDHOSTNAME=${HOSTPLATFORM}-builder.daemonology.net <.>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:126
+#, no-wrap
+msgid ""
+"# Location of SSH key\n"
+"export SSHKEY=/root/.ssh/id_dsa <.>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:129
+#, no-wrap
+msgid ""
+"# SSH account into which files are uploaded\n"
+"MASTERACCT=builder@wadham.daemonology.net <.>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:132
+#, no-wrap
+msgid ""
+"# Directory into which files are uploaded\n"
+"MASTERDIR=update-master.freebsd.org <.>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:135
+msgid "Parameters for consideration would be:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:138
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:140
+msgid ""
+"The name of the build host. This information will be displayed on updated "
+"systems when issuing:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:144
+#, no-wrap
+msgid "% uname -v\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:148
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:150
+msgid "Account for uploading files to the update server."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:152
+msgid "Directory on the update server where files are uploaded to."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:154
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:158
+msgid "Create a build environment for amd64:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:162
+#, no-wrap
+msgid "% mkdir -p /usr/local/freebsd-update-server/scripts/7.2-RELEASE/amd64\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:165
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:176
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:179
+#, no-wrap
+msgid ""
+"# EOL date\n"
+"export EOL=1275289200 <.>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:182
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:183
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:187
+#, no-wrap
+msgid "% date -j -f '%Y%m%d-%H%M%S' '20090401-000000' '+%s'\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:191
+#, no-wrap
+msgid "Building Update Code"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:196
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:211
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:214
+#, no-wrap
+msgid ""
+"Public key fingerprint:\n"
+"27ef53e48dc869eea6c3136091cc6ab8589f967559824779e855d58a2294de9e\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:218
+#, 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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:224
+msgid ""
+"Keep a note of the generated key fingerprint. This value is required in [."
+"filename]#/etc/freebsd-update.conf# for binary updates."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:227
+msgid "At this point, we are ready to stage a build."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:232
+#, no-wrap
+msgid ""
+"# cd /usr/local/freebsd-update-server\n"
+"# sh scripts/init.sh amd64 7.2-RELEASE\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:235
+msgid "What follows is a sample of an _initial_ build run."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:255
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:276
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:280
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:286
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:305
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:323
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:326
+msgid "Finally, the build completes."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:355
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:361
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:366
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:371
+#, no-wrap
+msgid ""
+"# cd /usr/local/freebsd-update-server\n"
+"# sh scripts/mountkey.sh\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:381
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:384
+msgid ""
+"After the approval process is complete, the upload procedure may be started."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:389
+#, no-wrap
+msgid ""
+"# cd /usr/local/freebsd-update-server\n"
+"# sh scripts/upload.sh amd64 7.2-RELEASE\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:394
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:399
+#, no-wrap
+msgid ""
+"# cd /usr/local/freebsd-update-server/pub/7.2-RELEASE/amd64\n"
+"# touch -t 200801010101.01 uploaded\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:406
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:408
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:414
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:417
+msgid ""
+"For reference, the entire run of link:../../source/articles/freebsd-update-"
+"server/init.txt[init.sh] is attached."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:419
+#, no-wrap
+msgid "Building a Patch"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:422
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:424
+msgid "For this example, 7.1-RELEASE will be used."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:426
+msgid "A couple of assumptions are made for a different release build:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:428
+msgid "Setup the correct directory structure for the initial build."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:429
+msgid "Perform an initial build for 7.1-RELEASE."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:431
+msgid ""
+"Create the patch directory of the respective release under [.filename]#/usr/"
+"local/freebsd-update-server/patches/#."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:436
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:441
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:446
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:450
+#, no-wrap
+msgid "% cd /usr/local/freebsd-update-server/patches/7.1-RELEASE/; mv bind.patch 7-SA-09:12.bind\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:456
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:458
+msgid ""
+"There can be custom patches added to any build. Use the number zero, or any "
+"other number."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:464
+msgid ""
+"It is up to the administrator of the FreeBSD Update Server to take "
+"appropriate measures to verify the authenticity of every patch."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:468
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:473
+#, no-wrap
+msgid ""
+"# cd /usr/local/freebsd-update-server\n"
+"# sh scripts/diff.sh amd64 7.1-RELEASE 7\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:476
+msgid "What follows is a sample of a _differential_ build run."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:550
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:553
+msgid "Updates are printed, and approval is requested."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:572
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:575
+msgid "Follow the same process as noted before for approving a build:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:584
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:590
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:593
+msgid "After approving the build, upload the software:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:598
+#, no-wrap
+msgid ""
+"# cd /usr/local/freebsd-update-server\n"
+"# sh scripts/upload.sh amd64 7.1-RELEASE\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:601
+msgid ""
+"For reference, the entire run of link:../../source/articles/freebsd-update-"
+"server/diff.txt[diff.sh] is attached."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:603
+#, no-wrap
+msgid "Tips"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:606
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:617
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:620
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:632
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:635
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:641
+#, 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 ""
diff --git a/documentation/content/en/articles/geom-class/_index.po b/documentation/content/en/articles/geom-class/_index.po
new file mode 100644
index 0000000000..ef0c661432
--- /dev/null
+++ b/documentation/content/en/articles/geom-class/_index.po
@@ -0,0 +1,1059 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:44
+msgid "Abstract"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:56
+#, no-wrap
+msgid "Documentation"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/geom-class/_index.adoc:70
+#, no-wrap
+msgid "Preliminaries"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:82
+#, no-wrap
+msgid "Modifying a System for Development"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:90
+#, no-wrap
+msgid ""
+"options INVARIANT_SUPPORT\n"
+"options INVARIANTS\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:98
+#, no-wrap
+msgid ""
+"options WITNESS_SUPPORT\n"
+"options WITNESS\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:105
+#, no-wrap
+msgid " makeoptions DEBUG=-g\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:126
+#, no-wrap
+msgid " debug.debugger_on_panic=1\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:143
+msgid "The numbers represent seconds."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:166
+#, no-wrap
+msgid " hw.physmem=\"256M\"\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:173
+#, no-wrap
+msgid " background_fsck=\"NO\"\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:180
+#, no-wrap
+msgid "Starting the Project"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:186
+#, no-wrap
+msgid "The Makefile"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:199
+#, no-wrap
+msgid ".include <bsd.kmod.mk>\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/geom-class/_index.adoc:205
+#, no-wrap
+msgid "On FreeBSD Kernel Programming"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:208
+#, no-wrap
+msgid "Memory Allocation"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:227
+#, no-wrap
+msgid "Lists and Queues"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:238
+#, no-wrap
+msgid "BIOs"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/geom-class/_index.adoc:252
+#, no-wrap
+msgid "On GEOM Programming"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:255
+#, no-wrap
+msgid "Ggate"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:261
+#, no-wrap
+msgid "GEOM Class"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:273
+msgid "`.destroy_geom` is called when the geom should be disbanded"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:274
+msgid ""
+"`.ctlconf` is called when user requests reconfiguration of existing geom"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:280
+msgid "These functions are called from the g_event kernel thread."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:282
+#, no-wrap
+msgid "Softc"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:290
+msgid "`struct g_provider *provider` : The \"provider\" this geom instantiates"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:291
+msgid "`uint16_t n_disks` : Number of consumer this geom consumes"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:297
+#, no-wrap
+msgid "Metadata"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:303
+msgid "uint32 version ID"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:311
+#, no-wrap
+msgid "Labeling/creating a GEOM"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:314
+msgid "The sequence of events is:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:328
+#, no-wrap
+msgid "GEOM Command Structure"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:336
+#, no-wrap
+msgid " verb [-options] geomname [other]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:339
+msgid "Common verbs are:"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:342
+msgid "destroy - to destroy metadata, so the geoms get destroyed"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:344
+msgid "Common options are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:346
+msgid "`-v` : be verbose"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:347
+msgid "`-f` : force"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:353
+#, no-wrap
+msgid "Geoms"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:359
+msgid "The event functions are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:361
+msgid "`.access` : calculates permissions (read/write/exclusive)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:362
+msgid "`.dumpconf` : returns XML-formatted information about the geom"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:363
+msgid "`.orphan` : called when some underlying provider gets disconnected"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:364
+msgid "`.spoiled` : called when some underlying provider gets written to"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:365
+msgid "`.start` : handles I/O"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:371
+#, no-wrap
+msgid "GEOM Threads"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:387
+msgid "The filesystem gets the data and transfers it to userland."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:394
+msgid "Calls to `msleep`() and `tsleep`(), obviously."
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:396
+msgid "Waiting for I/O."
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:398
+msgid "sx and other sleepable locks"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:404
+#, no-wrap
+msgid "Kernel Threads for Use in GEOM Code"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
diff --git a/documentation/content/en/articles/gjournal-desktop/_index.po b/documentation/content/en/articles/gjournal-desktop/_index.po
new file mode 100644
index 0000000000..096ce4c655
--- /dev/null
+++ b/documentation/content/en/articles/gjournal-desktop/_index.po
@@ -0,0 +1,1028 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 10:28-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:44
+msgid "Abstract"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:69
+msgid "After reading this article, you will know:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:74
+msgid "How to implement journaling in new (empty) partitions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:75
+msgid "How to troubleshoot common problems associated with journaling."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:77
+msgid "Before reading this article, you should be able to:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:79
+msgid "Understand basic UNIX(R) and FreeBSD concepts."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:89
+#, no-wrap
+msgid "Understanding Journaling in FreeBSD"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:124
+#, no-wrap
+msgid "Steps During the Installation of FreeBSD"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:126
+#, no-wrap
+msgid "Reserving Space for Journaling"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Target for macro image
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:138
+#, no-wrap
+msgid "disklabel1.png"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Target for macro image
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:172
+#, no-wrap
+msgid "disklabel2.png"
+msgstr ""
+
+#. 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 ""
+
+#. type: Block title
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:178
+#, no-wrap
+msgid "Partitions and Journals"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:182
+#, no-wrap
+msgid "Partition"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:183
+#, no-wrap
+msgid "Mount Point"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:185
+#, no-wrap
+msgid "Journal"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:186
+#, no-wrap
+msgid "ad0s1d"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:187
+#, no-wrap
+msgid "/var"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:189
+#, no-wrap
+msgid "ad0s1h"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:190
+#, no-wrap
+msgid "ad0s1f"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:191
+#, no-wrap
+msgid "/usr"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:192
+#, no-wrap
+msgid "ad0s1g"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:198
+#, no-wrap
+msgid "Booting for the first time"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:207
+#, no-wrap
+msgid "Setting Up Journaling"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:210
+#, no-wrap
+msgid "Executing `gjournal`"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:229
+msgid "Load the module required for journaling:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:258
+#, no-wrap
+msgid "# gjournal label -f ad0s1d ad0s1h\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:304
+#, no-wrap
+msgid "geom_journal_load=\"YES\"\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:326
+#, no-wrap
+msgid "GEOM_JOURNAL: Journal ad0s1d consistent.\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:331
+#, no-wrap
+msgid "Journaling Newly Created Partitions"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:340
+#, no-wrap
+msgid "# gjournal label ad1s1d\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:352
+#, no-wrap
+msgid "# gjournal label -s 2G ad1s1d\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:359
+#, no-wrap
+msgid "# newfs -J /dev/ad1s1d.journal\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:362
+#, no-wrap
+msgid "Building Journaling into Your Custom Kernel"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:379
+#, no-wrap
+msgid "Troubleshooting Journaling"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:400
+#, no-wrap
+msgid "# cat /boot/loader.conf\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:432
+msgid "Login as `root` and switch to single user mode:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:439
+msgid "Unmount the journaled partitions:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:446
+msgid "Synchronize the journals:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:450
+#, no-wrap
+msgid "# gjournal sync\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:453
+msgid "Stop the journaling providers:"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:461
+msgid "Clear journaling metadata from all the devices used:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:484
+msgid "Remount the old devices by hand:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:502
+#, no-wrap
+msgid "Further Reading"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
diff --git a/documentation/content/en/articles/hubs/_index.adoc b/documentation/content/en/articles/hubs/_index.adoc
index 9c5bf2506e..403cd84b9a 100644
--- a/documentation/content/en/articles/hubs/_index.adoc
+++ b/documentation/content/en/articles/hubs/_index.adoc
@@ -56,7 +56,7 @@ toc::[]
[NOTE]
====
-We are not accepting new mirrors at this time.
+We are not accepting new community mirrors at this time.
====
[[mirror-contact]]
@@ -245,7 +245,7 @@ Notice the website was split into www.FreeBSD.org and docs.FreeBSD.org, and ther
[[mirror-pkgs]]
=== Mirroring Packages
-Due to very high requirements of bandwidth, storage and adminstration the FreeBSD Project has decided not to allow public mirrors of packages.
+Due to very high requirements of bandwidth, storage and administration 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:
@@ -308,7 +308,7 @@ Lots of online documentation leads "interactive"users to `ftp.FreeBSD.org` so au
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>>.
+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).
@@ -333,7 +333,7 @@ This means:
====
[[mirror-where-official]]
-==== I am an Official Mirror, What is the Right Rite for Me?
+==== I am an Official Mirror, What is the Right Site for Me?
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.
@@ -402,7 +402,7 @@ If Mirror1 does not update for a while, lower tier mirrors will begin to mirror
[[mirror-official-become]]
=== How to Become Official Then?
-We are not accepting any new mirrors at this time.
+Please contact the Cluster Administrators as documented at https://www.FreeBSD.org/administration/#t-clusteradm.
[[mirror-statpages]]
== Some Statistics from Mirror Sites
diff --git a/documentation/content/en/articles/hubs/_index.po b/documentation/content/en/articles/hubs/_index.po
new file mode 100644
index 0000000000..71c2afb088
--- /dev/null
+++ b/documentation/content/en/articles/hubs/_index.po
@@ -0,0 +1,917 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 ""
+
+#. type: Title =
+#: documentation/content/en/articles/hubs/_index.adoc:1
+#: documentation/content/en/articles/hubs/_index.adoc:17
+#, no-wrap
+msgid "Mirroring FreeBSD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:50
+msgid "Abstract"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:54
+msgid "'''"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:60
+msgid "We are not accepting new community mirrors at this time."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/hubs/_index.adoc:63
+#, no-wrap
+msgid "Contact Information"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/hubs/_index.adoc:69
+#, no-wrap
+msgid "Requirements for FreeBSD Mirrors"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:72
+#, no-wrap
+msgid "Disk Space"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:84
+msgid "Full FTP Distribution: 1.4 TB"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:85
+msgid "CTM deltas: 10 GB"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:86
+msgid "Web pages: 1GB"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:90
+#, no-wrap
+msgid "Network Connection/Bandwidth"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:100
+msgid "Unofficial public site: 34 Mbps is probably a good start."
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:103
+#, no-wrap
+msgid "System Requirements, CPU, RAM"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:122
+#, no-wrap
+msgid "Services to Offer"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/hubs/_index.adoc:129
+#, no-wrap
+msgid "FTP (required for FTP Fileset)"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:140
+msgid "package:ftp/ncftpd[]: A commercial package, free for educational use."
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:142
+msgid "package:ftp/proftpd[]: A modular and very flexible ftpd."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:143
+msgid "package:ftp/pure-ftpd[]: Another ftpd developed with security in mind."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:144
+msgid "package:ftp/twoftpd[]: As above."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:145
+msgid "package:ftp/vsftpd[]: The \"very secure\" ftpd."
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/hubs/_index.adoc:151
+#, no-wrap
+msgid "Rsync (optional for FTP Fileset)"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:163
+msgid "package:net/rsync[]"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/hubs/_index.adoc:165
+#, no-wrap
+msgid "HTTP (required for Web Pages, Optional for FTP Fileset)"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/hubs/_index.adoc:180
+#, no-wrap
+msgid "How to Mirror FreeBSD"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:186
+#, no-wrap
+msgid "Mirroring the FTP Site"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:205
+msgid "A command line to mirror FreeBSD might look like:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:215
+#, no-wrap
+msgid "Mirroring the WWW Pages"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. [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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:246
+#, no-wrap
+msgid "Mirroring Packages"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:251
+msgid ""
+"Due to very high requirements of bandwidth, storage and administration 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/hubs/_index.adoc:262
+#, no-wrap
+msgid "% pkg repo /usr/local/mirror\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:268
+#, no-wrap
+msgid "How Often Should I Mirror?"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:280
+msgid "Test if your script works. Check the logs."
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:284
+msgid "Here are some recommended schedules:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:286
+msgid "FTP fileset: daily"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:287
+msgid "WWW pages: daily"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/hubs/_index.adoc:289
+#, no-wrap
+msgid "Where to Mirror From"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:296
+#, no-wrap
+msgid "A few Words About the Organization"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:317
+#, no-wrap
+msgid "Ok, but Where Should I get the Stuff Now?"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/hubs/_index.adoc:323
+#, no-wrap
+msgid "I Just Want to Mirror from Somewhere!"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:333
+msgid "Set up your mirror as described above."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/hubs/_index.adoc:336
+#, no-wrap
+msgid "I am an Official Mirror, What is the Right Site for Me?"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/hubs/_index.adoc:343
+#, no-wrap
+msgid "I Want to Access the Master Sites!"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:355
+msgid "There is one master site for the FTP fileset."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/articles/hubs/_index.adoc:357
+#, no-wrap
+msgid "ftp-master.FreeBSD.org"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:360
+msgid "This is the master site for the FTP fileset."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/hubs/_index.adoc:367
+#, no-wrap
+msgid "Official Mirrors"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:370
+msgid "Official mirrors are mirrors that"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:372
+msgid "a) have a `FreeBSD.org` DNS entry (usually a CNAME)."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:378
+#, no-wrap
+msgid "Special Requirements for Official (tier-1) Mirrors"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:385
+msgid "Tier-1 mirrors are required to:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:387
+msgid "carry the complete fileset"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:388
+msgid "allow access to other mirror sites"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:389
+msgid "provide FTP and rsync access"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:403
+#, no-wrap
+msgid "How to Become Official Then?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:406
+msgid ""
+"Please contact the Cluster Administrators as documented at https://www."
+"FreeBSD.org/administration/#t-clusteradm."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/hubs/_index.adoc:408
+#, no-wrap
+msgid "Some Statistics from Mirror Sites"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:413
+#, no-wrap
+msgid "FTP Site Statistics"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
diff --git a/documentation/content/en/articles/ipsec-must/_index.adoc b/documentation/content/en/articles/ipsec-must/_index.adoc
index 361f70406f..d4de24e1a9 100644
--- a/documentation/content/en/articles/ipsec-must/_index.adoc
+++ b/documentation/content/en/articles/ipsec-must/_index.adoc
@@ -148,7 +148,7 @@ A comprehensive guide on running IPsec on FreeBSD is provided in extref:{handboo
[[kernel]]
== src/sys/i386/conf/KERNELNAME
-This needs to be present in the kernel config file in order to capture network data with man:tcpdump[1].
+This needs to be present in the kernel config file to capture network data with man:tcpdump[1].
Be sure to run man:config[8] after adding this, and rebuild and reinstall.
[.programlisting]
diff --git a/documentation/content/en/articles/ipsec-must/_index.po b/documentation/content/en/articles/ipsec-must/_index.po
new file mode 100644
index 0000000000..5a15b621b2
--- /dev/null
+++ b/documentation/content/en/articles/ipsec-must/_index.po
@@ -0,0 +1,567 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-05-21 14:43-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:44
+msgid "Abstract"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:60
+#, no-wrap
+msgid "The Solution"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:63
+msgid "First, some crypto-relevant info theory:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/ipsec-must/_index.adoc:72
+#, no-wrap
+msgid "MUST"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/ipsec-must/_index.adoc:79
+#, no-wrap
+msgid "Tcpdump"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:85
+msgid "The command:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:95
+#, no-wrap
+msgid "The Experiment"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:98
+msgid "Here is the experiment:"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:103
+msgid "Now start <<tcpdump>>."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:125
+#, no-wrap
+msgid "Caveat"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:133
+#, no-wrap
+msgid "IPsec---Definition"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:141
+#, no-wrap
+msgid "Installing IPsec"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:149
+#, no-wrap
+msgid "src/sys/i386/conf/KERNELNAME"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:153
+msgid ""
+"This needs to be present in the kernel config file to capture network data "
+"with man:tcpdump[1]. Be sure to run man:config[8] after adding this, and "
+"rebuild and reinstall."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:157
+#, no-wrap
+msgid "device\tbpf\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:168
+#, no-wrap
+msgid ""
+"/*\n"
+" ULISCAN.c ---blocksize of 8\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:182
+#, no-wrap
+msgid " Handles input file exhaustion gracefully.\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:188
+#, no-wrap
+msgid ""
+" -David Honig\n"
+" honig@sprynet.com\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:216
+#, no-wrap
+msgid " extern double log(/* double x */);\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:227
+#, no-wrap
+msgid " fptr = fopen(argv[1],\"rb\");\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:243
+#, no-wrap
+msgid " printf(\"Init done\\n\");\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:247
+#, no-wrap
+msgid " run = 1;\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:259
+#, no-wrap
+msgid ""
+" if (b < 0)\n"
+" run = 0;\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:265
+#, no-wrap
+msgid " sum += log((double)(j-table[b]));\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:269
+#, no-wrap
+msgid ""
+" table[b] = i;\n"
+" }\n"
+" }\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:280
+#, no-wrap
+msgid " printf(\"\\n\");\n"
+msgstr ""
+
+#. 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 ""
diff --git a/documentation/content/en/articles/ldap-auth/_index.adoc b/documentation/content/en/articles/ldap-auth/_index.adoc
index 3d1b5d718b..10bba18534 100644
--- a/documentation/content/en/articles/ldap-auth/_index.adoc
+++ b/documentation/content/en/articles/ldap-auth/_index.adoc
@@ -70,8 +70,8 @@ Its most recent specifications are in http://www.ietf.org/rfc/rfc4510.txt[RFC451
Essentially it is a database that expects to be read from more often than it is written to.
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.
+There are several server versions in ports, for example package:net/openldap26-server[].
+Client servers will need the corresponding package:net/openldap26-client[] libraries.
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.
@@ -97,7 +97,7 @@ First, install OpenLDAP:
[source,shell]
....
-# cd /usr/ports/net/openldap24-server
+# cd /usr/ports/net/openldap26-server
# make install clean
....
@@ -209,7 +209,7 @@ ldap slapd 3261 7 tcp4 *:389 *:*
[[ldap-connect-client]]
==== Configuring the Client
-Install the package:net/openldap24-client[] port for the OpenLDAP libraries.
+Install the package:net/openldap26-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.
The configuration file for the OpenLDAP libraries is [.filename]#/usr/local/etc/openldap/ldap.conf#.
@@ -317,7 +317,7 @@ If it does, your database is properly configured to be used as an LDAP authentic
[[client]]
== Client Configuration
-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.
+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/openldap26-client[] on each of them.
FreeBSD requires two ports to be installed to authenticate against an LDAP server, package:security/pam_ldap[] and package:net/nss_ldap[].
@@ -734,10 +734,6 @@ There are a few other programs that might be useful, particularly if you have ma
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.
-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).
-
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.
diff --git a/documentation/content/en/articles/ldap-auth/_index.po b/documentation/content/en/articles/ldap-auth/_index.po
new file mode 100644
index 0000000000..b7bbfb1b41
--- /dev/null
+++ b/documentation/content/en/articles/ldap-auth/_index.po
@@ -0,0 +1,1422 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:45
+msgid "Abstract"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/ldap-auth/_index.adoc:66
+#, no-wrap
+msgid "Configuring LDAP"
+msgstr ""
+
+#. 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 ""
+
+#. 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/openldap26-server[]. Client servers will need the corresponding "
+"package:net/openldap26-client[] libraries."
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:80
+#, no-wrap
+msgid "Setting Up the Server for Connections"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:92
+msgid "First, install OpenLDAP:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:102
+#, no-wrap
+msgid ""
+"# cd /usr/ports/net/openldap26-server\n"
+"# make install clean\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/ldap-auth/_index.adoc:109
+#, no-wrap
+msgid "Configuring OpenLDAP"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:112
+msgid "Next we must configure OpenLDAP."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:136
+#, no-wrap
+msgid "security ssf=128\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:149
+#, no-wrap
+msgid "Generating an RSA Key"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:173
+msgid "Finally, the certificate signing request needs to be signed:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:175
+#, no-wrap
+msgid "Self-signing the Certificate"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:197
+#, no-wrap
+msgid "slapd_enable=\"YES\"\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/ldap-auth/_index.adoc:210
+#, no-wrap
+msgid "Configuring the Client"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:214
+msgid ""
+"Install the package:net/openldap26-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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:243
+#, no-wrap
+msgid "Entries in the Database"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/ldap-auth/_index.adoc:318
+#, no-wrap
+msgid "Client Configuration"
+msgstr ""
+
+#. 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/openldap26-client[] on each of them."
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:325
+#, no-wrap
+msgid "Authentication"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:342
+#, no-wrap
+msgid "Setting `pam_login_attribute`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:349
+#, no-wrap
+msgid "pam_login_attribute uid\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:367
+#, no-wrap
+msgid "% getent passwd username\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/ldap-auth/_index.adoc:382
+#, no-wrap
+msgid "PAM"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:390
+msgid "To use PAM for authentication, add the line"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:432
+#, no-wrap
+msgid "Sample [.filename]#pam.d/sshd#"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:458
+#, no-wrap
+msgid "Name Service Switch"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:474
+#, no-wrap
+msgid ""
+"group: compat\n"
+"passwd: compat\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:477
+msgid "with"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:487
+msgid "Congratulations! You should now have working LDAP authentication."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:489
+#, no-wrap
+msgid "Caveats"
+msgstr ""
+
+#. 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 ""
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:497
+#, no-wrap
+msgid "Shell Script for Changing Passwords"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:504
+#, no-wrap
+msgid "#!/bin/sh\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:542
+#, no-wrap
+msgid "Ruby Script for Changing Passwords"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/ldap-auth/_index.adoc:591
+#, no-wrap
+msgid "Security Considerations"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:599
+#, no-wrap
+msgid "Setting Attributes Read-only"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:609
+#, no-wrap
+msgid "Hide Passwords"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:635
+#, no-wrap
+msgid "Read-only Attributes"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:660
+#, no-wrap
+msgid "`root` Account Definition"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:697
+#, no-wrap
+msgid "ACLs for a Home Directory Management Group"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:718
+#, no-wrap
+msgid "Password Storage"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/ldap-auth/_index.adoc:730
+#, no-wrap
+msgid "Useful Aids"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:740
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:743
+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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/ldap-auth/_index.adoc:748
+#, no-wrap
+msgid "OpenSSL Certificates for LDAP"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:752
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:754
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:757
+msgid ""
+"To create a certificate authority, we simply need a self-signed certificate "
+"and key. The steps for this again are"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:759
+#, no-wrap
+msgid "Creating a Certificate"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:768
+#, 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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:774
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:777
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:781
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:784
+msgid "To sign the key, use `-CA` and `-CAkey` instead of `-signkey`:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:786
+#, no-wrap
+msgid "Signing as a Certificate Authority"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:795
+#, 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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:800
+msgid ""
+"The resulting file will be the certificate that you can use on your LDAP "
+"servers."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:801
+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 ""
diff --git a/documentation/content/en/articles/leap-seconds/_index.po b/documentation/content/en/articles/leap-seconds/_index.po
new file mode 100644
index 0000000000..ff08ec6a17
--- /dev/null
+++ b/documentation/content/en/articles/leap-seconds/_index.po
@@ -0,0 +1,200 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/leap-seconds/_index.adoc:57
+#, no-wrap
+msgid "Default Leap Second Handling on FreeBSD"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/leap-seconds/_index.adoc:68
+#, no-wrap
+msgid "Cautions"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/leap-seconds/_index.adoc:85
+#, no-wrap
+msgid "Testing"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/leap-seconds/_index.adoc:95
+#, no-wrap
+msgid "% ntpq -c 'rv 0 leap'\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/leap-seconds/_index.adoc:101
+#, no-wrap
+msgid "Conclusion"
+msgstr ""
+
+#. 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 ""
diff --git a/documentation/content/en/articles/license-guide/_index.adoc b/documentation/content/en/articles/license-guide/_index.adoc
new file mode 100644
index 0000000000..c349ffd266
--- /dev/null
+++ b/documentation/content/en/articles/license-guide/_index.adoc
@@ -0,0 +1,351 @@
+---
+title: FreeBSD Licensing Policy
+authors:
+ - author: Warner Losh
+ email: imp@FreeBSD.org
+trademarks: ["freebsd", "general"]
+---
+
+= FreeBSD License Policies
+: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]]
+== Preferred License for New Files
+
+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).
+
+The FreeBSD Project uses this text as the preferred license:
+
+[.programlisting]
+....
+/*-
+ * Copyright (c) [year] [your name]
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+....
+
+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.
+
+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.
+
+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.
+
+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}.
+
+[[license-policy]]
+== Software License Policy
+
+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}.
+
+=== Guiding Principles
+
+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.
+
+We accept however that compelling reasons exist to allow differently-licensed software to be included in the FreeBSD source tree.
+
+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.
+
+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.
+
+=== Policy
+
+* 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:
+** 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.
+** 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.
+** A list of FreeBSD branches that may be affected.
+Expansions of scope require a new request to and approval from the FreeBSD Core Team.
+
+* 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.
+** This license is approved for the following components:
+*** LLVM toolchain and (with LLVM Exceptions) runtime components.
+
+* 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.
+** This license is approved for the following components:
+*** EDK2 derived code related to UEFI functionality
+
+* 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.
+** This license is approved for the following components:
+*** DTrace
+*** ZFS filesystem, including kernel support and userland utilities
+
+* 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.
+* 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.
+
+==== Acceptable licenses
+
+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:
+
+* The 2 clause version of the BSD license
+
+[.programlisting]
+....
+/*-
+ * Copyright (c) [year] [your name]
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+....
+* The 3 clause version of the BSD license
+
+[.programlisting]
+....
+/*-
+ * Copyright (c) [year] [your name]
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+....
+* The ISC License
+
+[.programlisting]
+....
+/*-
+ * Copyright (c) [year] [copyright holder]
+ *
+ * SPDX-License-Identifier: ISC
+ */
+....
+* The MIT License
+
+[.programlisting]
+....
+/*-
+ * Copyright (c) [year] [copyright holders]
+ *
+ * SPDX-License-Identifier: MIT
+ */
+....
+== Software Collection License
+
+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.
+
+== License File Location
+
+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.
+
+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.
+
+[[individual-files]]
+== Individual Files License
+
+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.
+
+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.
+
+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.
+
+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.
+
+There are four types of files in the FreeBSD software collection:
+
+. Files that have only an explicit copyright notice and license.
+. Files that have both an explicit copyright notice and license, and a SPDX-License-Identifier tag.
+. Files that have only a copyright notice and an SPDX-License-Identifier tag, but no explicit license.
+. Files that lack any copyright or license at all.
+
+=== Only Copyright and License
+
+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.
+
+=== Copyright and License with SPDX-License-Identifier expression
+
+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.
+
+=== Only Copyright and SPDX-License-Identifier expression.
+
+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.
+
+The license for files containing only the SPDX-License-Identifier should be construed to be
+
+. Start the license with the copyright notice from the file.
+Include all the copyright holders.
+. 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.
+
+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.
+
+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.
+
+. 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.
+. 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.
+. 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.
+
+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.
+
+=== Files without Copyright or any License Marking
+
+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.
+
+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.
+
+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.
+
+In the future, all such files will be marked explicitly, or follow the REUSE Software [.filename]#.license# convention.
+
+[[expressions]]
+=== SPDX-License-Identifier Expressions
+
+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.
+
+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.
+
+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.
+
+[.programlisting]
+....
+ // SPDX-License-Identifier: GPL-2.0-only
+ // SPDX-License-Identifier: LGPL-2.1-or-later
+....
+
+`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:
+
+[.programlisting]
+....
+ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+....
+
+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.
+
+`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:
+
+[.programlisting]
+....
+ // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
+....
+
+`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:
+
+[.programlisting]
+....
+ // SPDX-License-Identifier: BSD-2-Clause AND MIT
+....
diff --git a/documentation/content/en/articles/license-guide/_index.po b/documentation/content/en/articles/license-guide/_index.po
new file mode 100644
index 0000000000..db57ca6cec
--- /dev/null
+++ b/documentation/content/en/articles/license-guide/_index.po
@@ -0,0 +1,761 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-09-09 18:13-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/articles/license-guide/_index.adoc:1
+#, no-wrap
+msgid "FreeBSD Licensing Policy"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/articles/license-guide/_index.adoc:9
+#, no-wrap
+msgid "FreeBSD License Policies"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:54
+msgid "The FreeBSD Project uses this text as the preferred license:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/license-guide/_index.adoc:86
+#, no-wrap
+msgid "Software License Policy"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:93
+#, no-wrap
+msgid "Guiding Principles"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:108
+#, no-wrap
+msgid "Policy"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:123
+msgid "LLVM toolchain and (with LLVM Exceptions) runtime components."
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:128
+msgid "EDK2 derived code related to UEFI functionality"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:133
+msgid "DTrace"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:134
+msgid "ZFS filesystem, including kernel support and userland utilities"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/license-guide/_index.adoc:144
+#, no-wrap
+msgid "Acceptable licenses"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:150
+msgid "The 2 clause version of the BSD license"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:160
+msgid "The 3 clause version of the BSD license"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:170
+msgid "The ISC License"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:180
+msgid "The MIT License"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/license-guide/_index.adoc:189
+#, no-wrap
+msgid "Software Collection License"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/license-guide/_index.adoc:195
+#, no-wrap
+msgid "License File Location"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/license-guide/_index.adoc:213
+#, no-wrap
+msgid "Individual Files License"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:237
+msgid "Files that have only an explicit copyright notice and license."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:240
+msgid "Files that lack any copyright or license at all."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:241
+#, no-wrap
+msgid "Only Copyright and License"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:246
+#, no-wrap
+msgid "Copyright and License with SPDX-License-Identifier expression"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:253
+#, no-wrap
+msgid "Only Copyright and SPDX-License-Identifier expression."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:285
+#, no-wrap
+msgid "Files without Copyright or any License Marking"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:300
+#, no-wrap
+msgid "SPDX-License-Identifier Expressions"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
diff --git a/documentation/content/en/articles/linux-emulation/_index.adoc b/documentation/content/en/articles/linux-emulation/_index.adoc
index b695d7bc81..a252df5f54 100644
--- a/documentation/content/en/articles/linux-emulation/_index.adoc
+++ b/documentation/content/en/articles/linux-emulation/_index.adoc
@@ -61,7 +61,7 @@ toc::[]
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.
+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.
@@ -109,7 +109,7 @@ Common UNIX(R) API defines a syscall as a way to issue commands from a user spac
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).
+Some syscalls need parameters, which are passed from the user-space to the kernel-space in various ways (implementation dependent).
Syscalls are synchronous.
Another possible way to communicate is by using a _trap_.
@@ -219,7 +219,7 @@ The parameters to the actual syscall handler are passed in the form of `struct t
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.
+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()`.
[[freebsd-exits]]
@@ -510,14 +510,14 @@ numbers are not casual
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.
+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).
[[freebsd-blocking]]
===== Blocking
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.
+To avoid starvation issues, blocking locks do priority propagation from the waiters to the owner.
Block locks must be implemented through the turnstile interface and are intended to be the most used kind of locks in the kernel, if no particular conditions are met.
[[freebsd-sleeping]]
@@ -548,7 +548,7 @@ Among these locks only mutexes, sxlocks, rwlocks and lockmgrs are intended to ha
[[freebsd-scheduling]]
===== Scheduling barriers
-Scheduling barriers are intended to be used in order to drive scheduling of threading.
+Scheduling barriers are intended to be used to drive scheduling of threading.
They consist mainly of three different stubs:
* critical sections (and preemption)
@@ -561,11 +561,11 @@ Generally, these should be used only in a particular context and even if they ca
===== Critical sections
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).
+In fact, to avoid high interrupt latency, time-sharing priority threads can be preempted by interrupt threads (in this way, they do not need to wait to be scheduled as the normal path previews).
Preemption, however, introduces new racing points that need to be handled, as well.
-Often, in order to deal with preemption, the simplest thing to do is to completely disable it.
+Often, to deal with preemption, the simplest thing to do is to completely disable it.
A critical section defines a piece of code (borderlined by the pair of functions man:critical_enter[9] and man:critical_exit[9], where preemption is guaranteed to not happen (until the protected code is fully executed).
-This can often replace a lock effectively but should be used carefully in order to not lose the whole advantage that preemption brings.
+This can often replace a lock effectively but should be used carefully to not lose the whole advantage that preemption brings.
[[freebsd-schedpin]]
===== sched_pin/sched_unpin
@@ -578,7 +578,7 @@ The latter condition will determine a critical section as a too strong condition
[[freebsd-schedbind]]
===== sched_bind/sched_unbind
-`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.
+`sched_bind` is an API used to bind a thread to a particular CPU for all the time it executes the code, until a `sched_unbind` function call does not unbind it.
This feature has a key role in situations where you cannot trust the current state of CPUs (for example, at very early stages of boot), as you want to avoid your thread to migrate on inactive CPUs.
Since `sched_bind` and `sched_unbind` manipulate internal scheduler structures, they need to be enclosed in `sched_lock` acquisition/releasing when used.
@@ -741,7 +741,7 @@ On the other hand `close` is just an alias for real FreeBSD man:close[2] so it h
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.
+The `UNIMPL` prototype is not used because we want to be able to identify the name of the syscall that was called to know what syscalls are more important to implement.
[[signal-handling]]
=== Signal handling
@@ -775,7 +775,7 @@ It also unmasks the signal in process signal mask.
[[ptrace]]
=== Ptrace
-Many UNIX(R) derivates implement the man:ptrace[2] syscall in order to allow various tracking and debugging features.
+Many UNIX(R) derivates implement the man:ptrace[2] syscall to allow various tracking and debugging features.
This facility enables the tracing process to obtain various information about the traced process, like register dumps, any memory from the process address space, etc. and also to trace the process like in stepping an instruction or between system entries (syscalls and traps).
man:ptrace[2] also lets you set various information in the traced process (registers etc.).
man:ptrace[2] is a UNIX(R)-wide standard implemented in most UNIX(R)es around the world.
@@ -793,7 +793,7 @@ Also `PT_SYSCALL` is not implemented.
[[traps]]
=== Traps
-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.
+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:
@@ -851,7 +851,7 @@ Then we talk briefly about some syscalls.
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 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.
@@ -954,7 +954,7 @@ More about locking later.
[[pid-mangling]]
==== PID mangling
-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.
+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`.
@@ -1006,7 +1006,7 @@ Newer glibc in a case of 2.6 kernel uses `clone` to implement man:fork[2] and ma
==== Locking
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`.
+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.
@@ -1392,7 +1392,7 @@ We are able to run the most used applications like package:www/linux-firefox[],
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.
-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.
+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.
[[future-work]]
diff --git a/documentation/content/en/articles/linux-emulation/_index.po b/documentation/content/en/articles/linux-emulation/_index.po
new file mode 100644
index 0000000000..4483660ee5
--- /dev/null
+++ b/documentation/content/en/articles/linux-emulation/_index.po
@@ -0,0 +1,3230 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1
+#, no-wrap
+msgid "Linux® emulation in FreeBSD"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/articles/linux-emulation/_index.adoc:11
+#, no-wrap
+msgid "Linux(R) emulation in FreeBSD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:44
+msgid "Abstract"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-emulation/_index.adoc:74
+#, no-wrap
+msgid "A look inside..."
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:82
+#, no-wrap
+msgid "What is UNIX(R)"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:106
+#, no-wrap
+msgid "Communication between kernel and user space process"
+msgstr ""
+
+#. 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 dependent). Syscalls are synchronous."
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:120
+#, no-wrap
+msgid "Communication between processes"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:127
+#, no-wrap
+msgid "Process management"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:139
+#, no-wrap
+msgid "Thread management"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:147
+msgid "1:1 threading"
+msgstr ""
+
+#. type: Bullet: '- '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:149
+msgid "heavyweight threads"
+msgstr ""
+
+#. 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 ""
+
+#. type: Bullet: '+ '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:151
+msgid "no syscall wrapping necessary"
+msgstr ""
+
+#. type: Bullet: '+ '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:152
+msgid "can utilize multiple CPUs"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:154
+msgid "1:N threading"
+msgstr ""
+
+#. type: Bullet: '+ '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:156
+msgid "lightweight threads"
+msgstr ""
+
+#. type: Bullet: '+ '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:157
+msgid "scheduling can be easily altered by the user"
+msgstr ""
+
+#. type: Bullet: '- '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:158
+msgid "syscalls must be wrapped"
+msgstr ""
+
+#. type: Bullet: '- '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:159
+msgid "cannot utilize more than one CPU"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:161
+#, no-wrap
+msgid "What is FreeBSD?"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:176
+msgid "FreeBSD/i386 emulation on FreeBSD/amd64"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:177
+msgid "FreeBSD/i386 emulation on FreeBSD/ia64"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:178
+msgid "Linux(R)-emulation of Linux(R) operating system on FreeBSD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:179
+msgid "NDIS-emulation of Windows networking drivers interface"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:180
+msgid "NetBSD-emulation of NetBSD operating system"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:181
+msgid "PECoff-support for PECoff FreeBSD executables"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:182
+msgid "SVR4-emulation of System V revision 4 UNIX(R)"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:197
+#, no-wrap
+msgid "System entries"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:259
+#, no-wrap
+msgid "What is Linux(R)"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:277
+msgid "More information can be obtained from [3]."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:298
+msgid "parameter -> `%ebx`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:299
+msgid "parameter -> `%ecx`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:300
+msgid "parameter -> `%edx`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:301
+msgid "parameter -> `%esi`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:302
+msgid "parameter -> `%edi`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:303
+msgid "parameter -> `%ebp`"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:329
+msgid "Implemented clone flags are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:331
+msgid "`CLONE_VM` - processes share their memory space"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:332
+msgid "`CLONE_FS` - share umask, cwd and namespace"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:333
+msgid "`CLONE_FILES` - share open files"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:334
+msgid "`CLONE_SIGHAND` - share signal handlers and blocked signals"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:335
+msgid "`CLONE_PARENT` - share parent"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:336
+msgid "`CLONE_THREAD` - be thread (further explanation below)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:337
+msgid "`CLONE_NEWNS` - new namespace"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:338
+msgid "`CLONE_SYSVSEM` - share SysV undo structures"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:339
+msgid "`CLONE_SETTLS` - setup TLS at supplied address"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:340
+msgid "`CLONE_PARENT_SETTID` - set TID in the parent"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:341
+msgid "`CLONE_CHILD_CLEARTID` - clear TID in the child"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:342
+msgid "`CLONE_CHILD_SETTID` - set TID in the child"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:363
+#, no-wrap
+msgid " | CLONE_SETTLS | CLONE_PARENT_SETTID\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:369
+#, no-wrap
+msgid ""
+"| CLONE_DETACHED\n"
+"#endif\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:371
+#, no-wrap
+msgid "| 0);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:374
+msgid "The `CLONE_SIGNAL` is defined like"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:383
+#, no-wrap
+msgid "What is emulation"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-emulation/_index.adoc:422
+#, no-wrap
+msgid "Emulation"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:424
+#, no-wrap
+msgid "How emulation works in FreeBSD"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:450
+#, no-wrap
+msgid "Common primitives in the FreeBSD kernel"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:456
+#, no-wrap
+msgid "Locking primitives"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:459
+msgid "Contributed by: `{attilio}`"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:465
+msgid "atomic operations and memory barriers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:466
+msgid "locks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:467
+msgid "scheduling barriers"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:472
+#, no-wrap
+msgid "Atomic operations and memory barriers"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:485
+#, no-wrap
+msgid "Refcounts"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:493
+#, no-wrap
+msgid "Locks"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:500
+msgid "spinning"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:501
+msgid "blocking"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:502
+msgid "sleeping"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:506
+msgid "numbers are not casual"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:509
+#, no-wrap
+msgid "Spinning locks"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:517
+#, no-wrap
+msgid "Blocking"
+msgstr ""
+
+#. 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. 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:524
+#, no-wrap
+msgid "Sleeping"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:535
+msgid "This is a list of lock with their respective behaviors:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:537
+msgid "spin mutex - spinning - man:mutex[9]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:538
+msgid "sleep mutex - blocking - man:mutex[9]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:539
+msgid "pool mutex - blocking - man:mtx[pool]"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:541
+msgid "condvar - sleeping - man:condvar[9]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:542
+msgid "rwlock - blocking - man:rwlock[9]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:543
+msgid "sxlock - sleeping - man:sx[9]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:544
+msgid "lockmgr - sleeping - man:lockmgr[9]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:545
+msgid "semaphores - sleeping - man:sema[9]"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:549
+#, no-wrap
+msgid "Scheduling barriers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:553
+msgid ""
+"Scheduling barriers are intended to be used to drive scheduling of "
+"threading. They consist mainly of three different stubs:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:555
+msgid "critical sections (and preemption)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:556
+msgid "sched_bind"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:557
+msgid "sched_pin"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:561
+#, no-wrap
+msgid "Critical sections"
+msgstr ""
+
+#. 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, to avoid high interrupt latency, time-sharing priority "
+"threads can be preempted by interrupt threads (in this way, they do not need "
+"to wait to be scheduled as the normal path previews). Preemption, however, "
+"introduces new racing points that need to be handled, as well. Often, to "
+"deal with preemption, the simplest thing to do is to completely disable it. "
+"A critical section defines a piece of code (borderlined by the pair of "
+"functions man:critical_enter[9] and man:critical_exit[9], where preemption "
+"is guaranteed to not happen (until the protected code is fully executed). "
+"This can often replace a lock effectively but should be used carefully to "
+"not lose the whole advantage that preemption brings."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:571
+#, no-wrap
+msgid "sched_pin/sched_unpin"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:579
+#, no-wrap
+msgid "sched_bind/sched_unbind"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:584
+msgid ""
+"`sched_bind` is an API used to bind a thread to a particular CPU for all the "
+"time it executes the code, until a `sched_unbind` function call does not "
+"unbind it. This feature has a key role in situations where you cannot trust "
+"the current state of CPUs (for example, at very early stages of boot), as "
+"you want to avoid your thread to migrate on inactive CPUs. Since "
+"`sched_bind` and `sched_unbind` manipulate internal scheduler structures, "
+"they need to be enclosed in `sched_lock` acquisition/releasing when used."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:586
+#, no-wrap
+msgid "Proc structure"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:608
+#, no-wrap
+msgid "VFS"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:619
+#, no-wrap
+msgid "namei"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:628
+#, no-wrap
+msgid "vn_fullpath"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:636
+#, no-wrap
+msgid "Vnode operations"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:640
+msgid "man:vn_lock[9] - locks a vnode"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:641
+msgid "`vn_unlock` - unlocks a vnode"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:648
+msgid "man:vrele[9] - decrements the use count for a vnode"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:649
+msgid "man:vref[9] - increments the use count for a vnode"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:651
+#, no-wrap
+msgid "File handler operations"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:655
+msgid "`fdrop` - drops a reference to a file handler"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:656
+msgid "`fhold` - references a file handler"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-emulation/_index.adoc:658
+#, no-wrap
+msgid "Linux(R) emulation layer -MD part"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:668
+#, no-wrap
+msgid "Syscall handling"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:674
+#, no-wrap
+msgid "Linux(R) prepsyscall"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:683
+#, no-wrap
+msgid "Syscall writing"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:739
+#, no-wrap
+msgid "Dummy syscalls"
+msgstr ""
+
+#. 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 to know what syscalls are more important to implement."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:747
+#, no-wrap
+msgid "Signal handling"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:753
+#, no-wrap
+msgid "Linux(R) sendsig"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:762
+#, no-wrap
+msgid "linux_rt_sendsig"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:769
+#, no-wrap
+msgid "linux_sigreturn"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:776
+#, no-wrap
+msgid "Ptrace"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:782
+msgid ""
+"Many UNIX(R) derivates implement the man:ptrace[2] syscall to allow various "
+"tracking and debugging features. This facility enables the tracing process "
+"to obtain various information about the traced process, like register dumps, "
+"any memory from the process address space, etc. and also to trace the "
+"process like in stepping an instruction or between system entries (syscalls "
+"and traps). man:ptrace[2] also lets you set various information in the "
+"traced process (registers etc.). man:ptrace[2] is a UNIX(R)-wide standard "
+"implemented in most UNIX(R)es around the world."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:808
+#, no-wrap
+msgid ""
+" if (signal != SIGBUS)\n"
+" return signal;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:810
+#, no-wrap
+msgid " switch (trap_code) {\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:821
+#, no-wrap
+msgid ""
+" default:\n"
+" return signal;\n"
+" }\n"
+"}\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:824
+#, no-wrap
+msgid "Stack fixup"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:833
+#, no-wrap
+msgid "A.OUT support"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-emulation/_index.adoc:842
+#, no-wrap
+msgid "Linux(R) emulation layer -MI part"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:849
+#, no-wrap
+msgid "Description of NPTL"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:869
+#, no-wrap
+msgid "Linux(R) 2.6 emulation infrastructure"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:874
+#, no-wrap
+msgid "Runtime determining of 2.6 emulation"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:885
+#, no-wrap
+msgid "Linux(R) processes and thread identifiers"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:913
+#, no-wrap
+msgid " struct linux_emuldata_shared *shared;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:915
+#, no-wrap
+msgid " int pdeath_signal; /* parent death signal */\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:929
+#, no-wrap
+msgid "struct linux_emuldata_shared {\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:931
+#, no-wrap
+msgid " int refs;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:933
+#, no-wrap
+msgid " pid_t group_pid;\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:955
+#, no-wrap
+msgid "PID mangling"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:968
+#, no-wrap
+msgid "Clone syscall"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1006
+#, no-wrap
+msgid "Locking"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1014
+#, no-wrap
+msgid "TLS"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1019
+#, no-wrap
+msgid "Introduction to threading"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1042
+#, no-wrap
+msgid "Segments on i386"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1053
+#, no-wrap
+msgid "mov %edx,%gs:0x10\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1064
+#, no-wrap
+msgid "Implementation on Linux(R) i386"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1074
+#, no-wrap
+msgid "Emulation of Linux(R) TLS"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1077
+#, no-wrap
+msgid "i386"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1097
+#, no-wrap
+msgid "amd64"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1103
+#, no-wrap
+msgid "Futexes"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1106
+#, no-wrap
+msgid "Introduction to synchronization"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1122
+#, no-wrap
+msgid "Futexes introduction"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1143
+#, no-wrap
+msgid "Futex API"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1146
+msgid "The futex syscall looks like this:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1155
+msgid "Futexes implement the following operations:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1157
+msgid "`FUTEX_WAIT`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1158
+msgid "`FUTEX_WAKE`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1159
+msgid "`FUTEX_FD`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1160
+msgid "`FUTEX_REQUEUE`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1161
+msgid "`FUTEX_CMP_REQUEUE`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1162
+msgid "`FUTEX_WAKE_OP`"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1164
+#, no-wrap
+msgid "FUTEX_WAIT"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1171
+#, no-wrap
+msgid "FUTEX_WAKE"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1176
+#, no-wrap
+msgid "FUTEX_FD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1179
+msgid "This operations associates a file descriptor with a given futex."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1181
+#, no-wrap
+msgid "FUTEX_REQUEUE"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1186
+#, no-wrap
+msgid "FUTEX_CMP_REQUEUE"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1191
+#, no-wrap
+msgid "FUTEX_WAKE_OP"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1197
+msgid "The operations implemented in `FUTEX_WAKE_OP`:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1199
+msgid "`FUTEX_OP_SET`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1200
+msgid "`FUTEX_OP_ADD`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1201
+msgid "`FUTEX_OP_OR`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1202
+msgid "`FUTEX_OP_AND`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1203
+msgid "`FUTEX_OP_XOR`"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1211
+#, no-wrap
+msgid "Futex emulation in FreeBSD"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1224
+#, no-wrap
+msgid " LIST_ENTRY(futex) f_list;\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1230
+msgid "And the structure `waiting_proc` is:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1234
+#, no-wrap
+msgid "struct waiting_proc {\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1236
+#, no-wrap
+msgid " struct thread *wp_t;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1238
+#, no-wrap
+msgid " struct futex *wp_new_futex;\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1244
+#, no-wrap
+msgid "futex_get / futex_put"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1250
+#, no-wrap
+msgid "futex_sleep"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1260
+#, no-wrap
+msgid "futex_wake"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1270
+#, no-wrap
+msgid "futex_wake_op"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1277
+#, no-wrap
+msgid "futex atomic operation"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1293
+#, no-wrap
+msgid "Futex locking"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1299
+#, no-wrap
+msgid "Various syscalls implementation"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1304
+#, no-wrap
+msgid "*at family of syscalls"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1336
+#, no-wrap
+msgid "Implementation"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1348
+#, no-wrap
+msgid "openat() --> kern_openat() --> vn_open() -> namei()\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1356
+#, no-wrap
+msgid "Ioctl"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1372
+#, no-wrap
+msgid "Debugging"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1381
+#, no-wrap
+msgid "Conclusion"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1384
+#, no-wrap
+msgid "Results"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1399
+#, no-wrap
+msgid "Future work"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1415
+#, no-wrap
+msgid "Team"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1418
+msgid "I cooperated on this project with (in alphabetical order):"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1420
+msgid "`{jhb}`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1421
+msgid "`{kib}`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1422
+msgid "Emmanuel Dreyfus"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1423
+msgid "Scot Hetzel"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1424
+msgid "`{jkim}`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1425
+msgid "`{netchild}`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1426
+msgid "`{ssouhlal}`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1427
+msgid "Li Xiao"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1428
+msgid "`{davidxu}`"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1432
+#, no-wrap
+msgid "Literatures"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1436
+msgid "https://tldp.org[https://tldp.org]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1436
+msgid "https://www.kernel.org[https://www.kernel.org]"
+msgstr ""
diff --git a/documentation/content/en/articles/linux-users/_index.adoc b/documentation/content/en/articles/linux-users/_index.adoc
index 37f9a4126d..7086c93f7c 100644
--- a/documentation/content/en/articles/linux-users/_index.adoc
+++ b/documentation/content/en/articles/linux-users/_index.adoc
@@ -61,7 +61,8 @@ Refer to the extref:{handbook}[Installing FreeBSD, bsdinstall] chapter of the Fr
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, FreeBSD uses man:tcsh[1] as the default root shell, and the Bourne shell-compatible man:sh[1] as the default user shell.
+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.
@@ -113,8 +114,8 @@ For more information on packages refer to section 5.4 of the FreeBSD Handbook: e
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.
-The Ports Collection, sometimes referred to as the ports tree, can be installed to [.filename]#/usr/ports# using man:portsnap[8].
-Detailed instructions for installing the Ports Collection can be found in extref:{handbook}[section 5.5, ports-using] of the FreeBSD Handbook.
+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.
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:
@@ -141,10 +142,10 @@ Refer to extref:{handbook}[Using the Ports Collection, ports-using] for more inf
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.
+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.
-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 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.
Since FreeBSD is developed as a complete operating system, user-installed applications are not considered to be part of the "base" system.
@@ -272,7 +273,7 @@ ipfw add allow tcp from any to me 22 in via $ext_if
There are two methods for updating a FreeBSD system: from source or binary updates.
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 Subversion servers.
+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.
Binary updates are similar to using `yum` or `apt-get` to update a Linux(R) system.
@@ -290,7 +291,7 @@ When using man:cron[8] to schedule updates, use `freebsd-update cron` in the man
====
-For more information on source and binary updates, refer to extref:{handbook}[the chapter on updating, updating-upgrading] in the FreeBSD Handbook.
+For more information on source and binary updates, refer to extref:{handbook}[the chapter on updating, updating-upgrading-freebsdupdate] in the FreeBSD Handbook.
[[procfs]]
== procfs: Gone But Not Forgotten
diff --git a/documentation/content/en/articles/linux-users/_index.po b/documentation/content/en/articles/linux-users/_index.po
new file mode 100644
index 0000000000..af81989e61
--- /dev/null
+++ b/documentation/content/en/articles/linux-users/_index.po
@@ -0,0 +1,809 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-06-19 21:08-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/articles/linux-users/_index.adoc:1
+#, no-wrap
+msgid "FreeBSD Quickstart Guide for Linux® Users"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/articles/linux-users/_index.adoc:11
+#, no-wrap
+msgid "FreeBSD Quickstart Guide for Linux(R) Users"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:44
+msgid "Abstract"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:60
+#, no-wrap
+msgid "Default Shell"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:77
+#, no-wrap
+msgid "Packages and Ports: Adding Software in FreeBSD"
+msgstr ""
+
+#. 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 ""
+
+#. type: Block title
+#: documentation/content/en/articles/linux-users/_index.adoc:82
+#, no-wrap
+msgid "Binary Packages"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:84
+msgid "Faster installation as compared to compiling large applications."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:85
+msgid "Does not require an understanding of how to compile software."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:86
+msgid "No need to install a compiler."
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:89
+msgid "Ability to customize installation options."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:90
+msgid "Custom patches can be applied."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-users/_index.adoc:98
+#, no-wrap
+msgid "Packages"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:107
+#, no-wrap
+msgid "# pkg install apache24\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:140
+#, no-wrap
+msgid "System Startup"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:185
+#, no-wrap
+msgid "# service sshd onestart\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:188
+#, no-wrap
+msgid "Network Configuration"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:230
+#, no-wrap
+msgid "Firewall"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:236
+msgid "extref:{handbook}[PF, firewalls-pf]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:237
+msgid "extref:{handbook}[IPFILTER, firewalls-ipf]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:238
+msgid "extref:{handbook}[IPFW, firewalls-ipfw]"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:244
+msgid "This sample PF entry allows inbound SSH:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:254
+msgid "The IPFILTER syntax to allow inbound SSH is:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:264
+msgid "The IPFW syntax to allow inbound SSH would be:"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:271
+#, no-wrap
+msgid "Updating FreeBSD"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:297
+#, no-wrap
+msgid "procfs: Gone But Not Forgotten"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:311
+msgid "Use `-a` to list all the system settings:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:315
+#, no-wrap
+msgid "% sysctl -a | more\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:327
+msgid "To mount the file system without rebooting:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:331
+#, no-wrap
+msgid "# mount /proc\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:334
+#, no-wrap
+msgid "Common Commands"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:337
+msgid "Some common command equivalents are as follows:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:342
+#, no-wrap
+msgid "Linux(R) command (Red Hat/Debian)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:343
+#, no-wrap
+msgid "FreeBSD equivalent"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:345
+#, no-wrap
+msgid "Purpose"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:346
+#, no-wrap
+msgid "`yum install _package_` / `apt-get install _package_`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:347
+#, no-wrap
+msgid "`pkg install _package_`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:349
+#, no-wrap
+msgid "Install package from remote repository"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:350
+#, no-wrap
+msgid "`rpm -ivh _package_` / `dpkg -i _package_`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:351
+#, no-wrap
+msgid "`pkg add _package_`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:353
+#, no-wrap
+msgid "Install local package"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:354
+#, no-wrap
+msgid "`rpm -qa` / `dpkg -l`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:355
+#, no-wrap
+msgid "`pkg info`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:357
+#, no-wrap
+msgid "List installed packages"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:358
+#, no-wrap
+msgid "`lspci`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:359
+#, no-wrap
+msgid "`pciconf`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:361
+#, no-wrap
+msgid "List PCI devices"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:362
+#, no-wrap
+msgid "`lsmod`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:363
+#, no-wrap
+msgid "`kldstat`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:365
+#, no-wrap
+msgid "List loaded kernel modules"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:366
+#, no-wrap
+msgid "`modprobe`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:367
+#, no-wrap
+msgid "`kldload` / `kldunload`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:369
+#, no-wrap
+msgid "Load/Unload kernel modules"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:370
+#, no-wrap
+msgid "`strace`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:371
+#, no-wrap
+msgid "`truss`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:372
+#, no-wrap
+msgid "Trace system calls"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:375
+#, no-wrap
+msgid "Conclusion"
+msgstr ""
+
+#. 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 ""
diff --git a/documentation/content/en/articles/mailing-list-faq/_index.adoc b/documentation/content/en/articles/mailing-list-faq/_index.adoc
index 99b123e332..2747145e41 100644
--- a/documentation/content/en/articles/mailing-list-faq/_index.adoc
+++ b/documentation/content/en/articles/mailing-list-faq/_index.adoc
@@ -54,7 +54,7 @@ toc::[]
[[introduction]]
== Introduction
-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!).
+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.
This document attempts to represent a community consensus, and as such it can never really be __authoritative__.
@@ -71,6 +71,8 @@ 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.
+Lists are English language, unless stated otherwise.
+
=== Are the FreeBSD mailing lists open for anyone to participate?
Again, this depends on charter of each individual list.
@@ -97,7 +99,7 @@ This is a classical mistake when using mailing lists; please try to avoid it.
=== Are archives available?
-Yes. Threaded archives are available link:https://docs.FreeBSD.org/mail/[here].
+Yes. Threaded archives with all e-mails since 1994 are available link:https://mail-archive.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.
=== Are mailing lists available in a digest format?
@@ -195,7 +197,7 @@ Literally, a `bikeshed` is a small outdoor shelter into which one may store one'
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.
-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.
+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 history.
Please help us to keep the mailing lists as useful for as many people as possible by avoiding bikesheds whenever you can.
Thanks.
diff --git a/documentation/content/en/articles/mailing-list-faq/_index.po b/documentation/content/en/articles/mailing-list-faq/_index.po
new file mode 100644
index 0000000000..3129313231
--- /dev/null
+++ b/documentation/content/en/articles/mailing-list-faq/_index.po
@@ -0,0 +1,581 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:43
+msgid "Abstract"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:75
+msgid "Lists are English language, unless stated otherwise."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:88
+#, no-wrap
+msgid "How can I subscribe?"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:92
+#, no-wrap
+msgid "How can I unsubscribe?"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:100
+#, no-wrap
+msgid "Are archives available?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:104
+msgid ""
+"Yes. Threaded archives with all e-mails since 1994 are available link:https://mail-archive.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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:105
+#, no-wrap
+msgid "Are mailing lists available in a digest format?"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:110
+#, no-wrap
+msgid "Mailing List Etiquette"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:115
+#, no-wrap
+msgid "What should I do before I post?"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:126
+#, no-wrap
+msgid "What constitutes an inappropriate posting?"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:145
+msgid "exmh"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:146
+msgid "Microsoft(R) Exchange"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:147
+msgid "Microsoft(R) Outlook(R)"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:155
+#, no-wrap
+msgid "% dmesg > /tmp/dmesg.out\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:170
+msgid "A: Because it reverses the logical flow of conversation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:171
+msgid "Q: Why is top posting frowned upon?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:173
+msgid "(Thanks to Randy Bush for the joke.)"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:175
+#, no-wrap
+msgid "Recurring Topics On The Mailing Lists"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:194
+#, no-wrap
+msgid "What Is A \"Bikeshed\"?"
+msgstr ""
+
+#. 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 ""
+
+#. 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 history."
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:206
+#, no-wrap
+msgid "Acknowledgments"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:208
+#, no-wrap
+msgid "`{grog}`"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:211
+#, no-wrap
+msgid "`{linimon}`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:212
+msgid "Creation of the rough draft of this FAQ."
+msgstr ""
diff --git a/documentation/content/en/articles/nanobsd/_index.adoc b/documentation/content/en/articles/nanobsd/_index.adoc
index 2f6e420b17..a8f3ba03d6 100644
--- a/documentation/content/en/articles/nanobsd/_index.adoc
+++ b/documentation/content/en/articles/nanobsd/_index.adoc
@@ -108,6 +108,16 @@ Keeping [.filename]#/cfg# mounted at all times is not a good idea, especially if
=== Building a NanoBSD Image
+The source code of FreeBSD is required to build NanoBSD.
+To obtain the source code:
+
+[source,shell]
+....
+# git clone https://git.FreeBSD.org/src.git /usr/src
+....
+
+For more details, follow the steps extref:{handbook}cutting-edge#updating-src-obtaining-src[here].
+
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.
@@ -305,6 +315,7 @@ There are a few default pre-defined customization functions ready for use:
* `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.
* `cust_allow_ssh_root` - Allow `root` to login via man:sshd[8].
* `cust_install_files` - Installs files from the [.filename]#nanobsd/Files# directory, which contains some useful scripts for system administration.
+* `cust_pkgng` - Installs packages from the [.filename]#nanobsd/Pkg# directory (needs also pkg-* package to bootstrap).
==== Adding Packages
diff --git a/documentation/content/en/articles/nanobsd/_index.po b/documentation/content/en/articles/nanobsd/_index.po
new file mode 100644
index 0000000000..700fff2e60
--- /dev/null
+++ b/documentation/content/en/articles/nanobsd/_index.po
@@ -0,0 +1,1204 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:44
+msgid "Abstract"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:62
+msgid "The features of NanoBSD include:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/nanobsd/_index.adoc:69
+#, no-wrap
+msgid "NanoBSD Howto"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/nanobsd/_index.adoc:72
+#, no-wrap
+msgid "The Design of NanoBSD"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:78
+msgid "Two image partitions: `code#1` and `code#2`."
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:81
+msgid "These partitions are normally mounted read-only."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Block title
+#: documentation/content/en/articles/nanobsd/_index.adoc:87
+#, no-wrap
+msgid "Making Persistent Changes to [.filename]#/etc/resolv.conf#"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/nanobsd/_index.adoc:109
+#, no-wrap
+msgid "Building a NanoBSD Image"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:113
+msgid ""
+"The source code of FreeBSD is required to build NanoBSD. To obtain the "
+"source code:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:117
+#, no-wrap
+msgid "# git clone https://git.FreeBSD.org/src.git /usr/src\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:120
+msgid ""
+"For more details, follow the steps extref:{handbook}cutting-edge#updating-"
+"src-obtaining-src[here]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:123
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:125
+msgid "The necessary commands to build a NanoBSD image are:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:132
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:135
+msgid ""
+"Change the current directory to the base directory of the NanoBSD build "
+"script."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:137
+msgid "Start the build process."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:139
+msgid ""
+"Change the current directory to the place where the built images are located."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:141
+msgid "Install NanoBSD onto the storage medium."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:142
+#, no-wrap
+msgid "Options When Building a NanoBSD Image"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:146
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:148
+msgid "Some options are for verbosity purposes:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:150
+msgid "`-h`: prints the help summary page."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:151
+msgid "`-q`: makes output quieter."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:152
+msgid "`-v`: makes output more verbose"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:155
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:157
+msgid "`-k`: do not build the kernel"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:158
+msgid "`-w`: do not build world"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:159
+msgid "`-b`: do not build either kernel and world"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:160
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:161
+msgid ""
+"`-f`: do not build a disk image of the first partition (which is useful for "
+"upgrade purposes)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:162
+msgid ""
+"`-n`: add `-DNO_CLEAN` to `buildworld`, `buildkernel`. Also, all the files "
+"that have already been built in a previous run are kept."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:165
+msgid ""
+"A configuration file can be used to tweak as many elements as desired. Load "
+"it with `-c`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:167
+msgid "The last options are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:169
+msgid ""
+"`-K`: do not install a kernel. A disk image without a kernel will not be "
+"able to achieve a normal boot sequence."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:170
+#, no-wrap
+msgid "The Complete Image Building Process"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:175
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:177
+msgid ""
+"`run_early_customize`: commands that are defined in a supplied configuration "
+"file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:178
+msgid ""
+"`clean_build`: Just cleans the build environment by deleting the previously "
+"built files."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:179
+msgid ""
+"`make_conf_build`: Assemble make.conffrom the `CONF_WORLD` and `CONF_BUILD` "
+"variables."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:180
+msgid "`build_world`: Build world."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:181
+msgid "`build_kernel`: Build the kernel files."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:182
+msgid "`clean_world`: Clean the destination directory."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:183
+msgid ""
+"`make_conf_install`: Assemble make.conf from the `CONF_WORLD` and "
+"`CONF_INSTALL` variables."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:184
+msgid "`install_world`: Install all files built during `buildworld`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:185
+msgid ""
+"`install_etc`: Install the necessary files in the [.filename]#/etc# "
+"directory, based on the `make distribution` command."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:186
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:187
+msgid "`install_kernel`: the kernel and modules files are installed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:188
+msgid ""
+"`run_customize`: all the customizing routines defined by the user will be "
+"called."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:189
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:190
+msgid "`prune_usr`: the empty directories from [.filename]#/usr# are removed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:191
+msgid ""
+"`run_late_customize`: the very last custom scripts can be run at this point."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:192
+msgid "`fixup_before_diskimage`: List all installed files in a metalog"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:193
+msgid ""
+"`create_diskimage`: creates the actual disk image, based on the disk "
+"geometries provides parameters."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:194
+msgid "`last_orders`: does nothing for now."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/nanobsd/_index.adoc:195
+#, no-wrap
+msgid "Customizing a NanoBSD Image"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:199
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:201
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:205
+#, no-wrap
+msgid "# sh nanobsd.sh -c myconf.nano\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:208
+msgid "Customization is done in two ways:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:210
+msgid "Configuration options"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:211
+msgid "Custom functions"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:212
+#, no-wrap
+msgid "Configuration Options"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:217
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:220
+msgid ""
+"The configuration file consists of configuration options, which override the "
+"default values. The most important directives are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:222
+msgid "`NANO_NAME` - Name of build (used to construct the workdir names)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:223
+msgid "`NANO_SRC` - Path to the source tree used to build the image."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:224
+msgid "`NANO_KERNEL` - Name of kernel configuration file used to build kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:225
+msgid "`CONF_BUILD` - Options passed to the `buildworld` stage of the build."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:226
+msgid ""
+"`CONF_INSTALL` - Options passed to the `installworld` stage of the build."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:227
+msgid ""
+"`CONF_WORLD` - Options passed to both the `buildworld` and the "
+"`installworld` stage of the build."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:228
+msgid ""
+"`FlashDevice` - Defines what type of media to use. Check [."
+"filename]#FlashDevice.sub# for more details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:230
+msgid ""
+"There are many more configuration options that could be relevant depending "
+"upon the kind of NanoBSD that is desired."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/articles/nanobsd/_index.adoc:231
+#, no-wrap
+msgid "General Customization"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:234
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:236
+msgid "`run_early_customize`: before anything else happens."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:237
+msgid "`run_customize`: after all the standard files have been laid out"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:238
+msgid ""
+"`run_late_customize`: at the very end of the process, just before the actual "
+"NanoBSD image is built."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:240
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:243
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:246
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:250
+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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/nanobsd/_index.adoc:251
+#, no-wrap
+msgid "Booting Options"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:255
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:257
+msgid "`NANO_BOOT0CFG`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:258
+msgid "`NANO_BOOTLOADER`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:263
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:270
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:273
+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 ""
+
+#. type: Title =====
+#: documentation/content/en/articles/nanobsd/_index.adoc:274
+#, no-wrap
+msgid "Disk Image Creation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:278
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:280
+msgid ""
+"There are many variable that need to be set just right for the script to "
+"produce a usable disk image."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:282
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:283
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:285
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:286
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:287
+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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:288
+#, no-wrap
+msgid "Custom Functions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:292
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:300
+#, no-wrap
+msgid ""
+"cust_foo () (\n"
+"\techo \"bar=baz\" > \\\n"
+"\t\t${NANO_WORLDDIR}/etc/foo\n"
+")\n"
+"customize_cmd cust_foo\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:303
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:311
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:314
+msgid ""
+"There are a few default pre-defined customization functions ready for use:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:316
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:317
+msgid "`cust_allow_ssh_root` - Allow `root` to login via man:sshd[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:318
+msgid ""
+"`cust_install_files` - Installs files from the [.filename]#nanobsd/Files# "
+"directory, which contains some useful scripts for system administration."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:319
+msgid ""
+"`cust_pkgng` - Installs packages from the [.filename]#nanobsd/Pkg# directory "
+"(needs also pkg-* package to bootstrap)."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:320
+#, no-wrap
+msgid "Adding Packages"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:323
+msgid ""
+"Packages can be added to a NanoBSD image, to provide specific "
+"functionalities on the appliance. To do so, either:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:325
+msgid "Add the `cust_pkgng` to the `NANO_CUSTOMIZE` variable, or"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:326
+msgid ""
+"Add a `'customize_cmd cust_pkgng'` command in a customized configuration "
+"file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:329
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:335
+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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:336
+#, no-wrap
+msgid "Configuration File Example"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:339
+msgid ""
+"A complete example of a configuration file for building a custom NanoBSD "
+"image can be:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:346
+#, no-wrap
+msgid ""
+"NANO_NAME=custom\n"
+"NANO_SRC=/usr/src\n"
+"NANO_KERNEL=MYKERNEL\n"
+"NANO_IMAGES=2\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:352
+#, no-wrap
+msgid ""
+"CONF_BUILD='\n"
+"WITHOUT_KLDLOAD=YES\n"
+"WITHOUT_NETGRAPH=YES\n"
+"WITHOUT_PAM=YES\n"
+"'\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:368
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:379
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:381
+#, no-wrap
+msgid "FlashDevice SanDisk 1G\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:386
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:391
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:395
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:399
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:401
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/nanobsd/_index.adoc:402
+#, no-wrap
+msgid "Updating NanoBSD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:405
+msgid "The update process of NanoBSD is relatively simple:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:409
+msgid "Build a new NanoBSD image, as usual."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:410
+msgid ""
+"Upload the new image into an unused partition of a running NanoBSD appliance."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:412
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:413
+msgid "Reboot, and start the system from the newly installed partition."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:414
+msgid "If all goes well, the upgrade is finished."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:415
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:418
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:420
+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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:421
+#, no-wrap
+msgid "Using man:ftp[1]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:424
+msgid "If the transfer speed is in first place, use this example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:429
+#, no-wrap
+msgid ""
+"# ftp myhost\n"
+"get _.disk.image \"| sh updatep1\"\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:431
+#, no-wrap
+msgid "Using man:ssh[1]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:434
+msgid "If a secure transfer is preferred, consider using this example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:438
+#, no-wrap
+msgid "# ssh myhost cat _.disk.image.gz | zcat | sh updatep1\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:440
+#, no-wrap
+msgid "Using man:nc[1]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:443
+msgid ""
+"Try this example if the remote host is not running neither man:ftpd[8] or "
+"man:sshd[8] service:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:447
+msgid ""
+"At first, open a TCP listener on host serving the image and make it send the "
+"image to client:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:451
+#, no-wrap
+msgid "myhost# nc -l 2222 < _.disk.image\n"
+msgstr ""
+
+#. type: delimited block = 6
+#: documentation/content/en/articles/nanobsd/_index.adoc:456
+msgid ""
+"Make sure that the used port is not blocked to receive incoming connections "
+"from NanoBSD host by firewall."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:458
+msgid ""
+"Connect to the host serving new image and execute [.filename]#updatep1# "
+"script:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:462
+#, no-wrap
+msgid "# nc myhost 2222 | sh updatep1\n"
+msgstr ""
diff --git a/documentation/content/en/articles/new-users/_index.po b/documentation/content/en/articles/new-users/_index.po
new file mode 100644
index 0000000000..38ff671f2c
--- /dev/null
+++ b/documentation/content/en/articles/new-users/_index.po
@@ -0,0 +1,1126 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 ""
+
+#. 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 ""
+
+#. type: Title =
+#: documentation/content/en/articles/new-users/_index.adoc:11
+#, no-wrap
+msgid "For People New to Both FreeBSD and UNIX(R)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:44
+msgid "Abstract"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:60
+msgid "To log out (and get a new `login:` prompt) type"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:64
+#, no-wrap
+msgid "# exit\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:70
+msgid "To shut down the machine type"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:74
+#, no-wrap
+msgid "# /sbin/shutdown -h now\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:77
+msgid "Or to reboot type"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:81
+#, no-wrap
+msgid "# /sbin/shutdown -r now\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:84
+msgid "or"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:88
+#, no-wrap
+msgid "# /sbin/reboot\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:96
+#, no-wrap
+msgid "Adding a User with Root Privileges"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:103
+#, no-wrap
+msgid "# adduser\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:132
+msgid "To delete a user, use `rmuser`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:134
+#, no-wrap
+msgid "Looking Around"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:139
+msgid "Here are some commands and what they do:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:140
+#, no-wrap
+msgid "`id`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:142
+msgid "Tells you who you are!"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:143
+#, no-wrap
+msgid "`pwd`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:145
+msgid "Shows you where you are-the current working directory."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:146
+#, no-wrap
+msgid "`ls`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:148
+msgid "Lists the files in the current directory."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:149
+#, no-wrap
+msgid "`ls -F`"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:152
+#, no-wrap
+msgid "`ls -l`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:154
+msgid "Lists the files in long format-size, date, permissions."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:155
+#, no-wrap
+msgid "`ls -a`"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:159
+#, no-wrap
+msgid "`cd`"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:164
+#, no-wrap
+msgid "`less _filename_`"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:169
+#, no-wrap
+msgid "`cat _filename_`"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:180
+#, no-wrap
+msgid "Getting Help and Information"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:185
+#, no-wrap
+msgid "`apropos _text_`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:187
+msgid "Everything containing string _text_ in the `whatis database`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:188
+#, no-wrap
+msgid "`man _text_`"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:194
+#, no-wrap
+msgid "`which _text_`"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:197
+#, no-wrap
+msgid "`locate _text_`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:199
+msgid "All the paths where the string _text_ is found."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:200
+#, no-wrap
+msgid "`whatis _text_`"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:204
+#, no-wrap
+msgid "`whereis _text_`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:206
+msgid "Finds the file _text_, giving its full path."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:237
+#, no-wrap
+msgid "Editing Text"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:251
+#, no-wrap
+msgid "# cp rc.conf rc.conf.orig\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:269
+#, no-wrap
+msgid "# mv rc.conf.orig rc.conf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:272
+msgid "to put things back the way they were."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:274
+msgid "To edit a file, type"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:278
+#, no-wrap
+msgid "# vi filename\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:284
+#, no-wrap
+msgid "`x`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:286
+msgid "delete letter the cursor is on"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:287
+#, no-wrap
+msgid "`dd`"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:290
+#, no-wrap
+msgid "`i`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:292
+msgid "insert text at the cursor"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:293
+#, no-wrap
+msgid "`a`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:295
+msgid "insert text after the cursor"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:299
+#, no-wrap
+msgid "`:w`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:301
+msgid "to write your changes to disk and continue editing"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:302
+#, no-wrap
+msgid "`:wq`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:304
+msgid "to write and quit"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:305
+#, no-wrap
+msgid "`:q!`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:307
+msgid "to quit without saving changes"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:308
+#, no-wrap
+msgid "`/_text_`"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:311
+#, no-wrap
+msgid "`G`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:313
+msgid "to go to the end of the file"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:314
+#, no-wrap
+msgid "`nG`"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:317
+#, no-wrap
+msgid "kbd:[Ctrl+L]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:319
+msgid "to redraw the screen"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:320
+#, no-wrap
+msgid "kbd:[Ctrl+b] and kbd:[Ctrl+f]"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:333
+#, no-wrap
+msgid "Other Useful Commands"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:335
+#, no-wrap
+msgid "`df`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:337
+msgid "shows file space and mounted systems."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:338
+#, no-wrap
+msgid "`ps aux`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:340
+msgid "shows processes running. `ps ax` is a narrower form."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:341
+#, no-wrap
+msgid "`rm _filename_`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:343
+msgid "remove _filename_."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:344
+#, no-wrap
+msgid "`rm -R _dir_`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:346
+msgid "removes a directory _dir_ and all subdirectories-careful!"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:347
+#, no-wrap
+msgid "`ls -R`"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:350
+#, no-wrap
+msgid "`passwd`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:352
+msgid "to change user's password (or ``root``'s password)"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:353
+#, no-wrap
+msgid "`man hier`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:355
+msgid "manual page on the UNIX(R) filesystem"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:361
+#, no-wrap
+msgid "% find /usr -name \"filename\"\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:369
+#, no-wrap
+msgid "Next Steps"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:400
+#, no-wrap
+msgid "# make all install\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:408
+#, no-wrap
+msgid "Your Working Environment"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:425
+msgid "Here are the three steps for installing a new shell:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:442
+#, no-wrap
+msgid "alias su su -m\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/new-users/_index.adoc:455
+msgid "set prompt = \"%h %t %~ %# \""
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:466
+#, no-wrap
+msgid "Other"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:478
+#, no-wrap
+msgid "Comments Welcome"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
diff --git a/documentation/content/en/articles/pam/_index.adoc b/documentation/content/en/articles/pam/_index.adoc
index 011ee465c9..36c4a77097 100644
--- a/documentation/content/en/articles/pam/_index.adoc
+++ b/documentation/content/en/articles/pam/_index.adoc
@@ -544,22 +544,6 @@ The man:pam_login_access[8] module provides an implementation of the account man
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.
-[[pam-modules-opie]]
-=== man:pam_opie[8]
-
-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.
-
-[[pam-modules-opieaccess]]
-=== man:pam_opieaccess[8]
-
-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.
-
-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.
-
[[pam-modules-passwdqc]]
=== man:pam_passwdqc[8]
diff --git a/documentation/content/en/articles/pam/_index.po b/documentation/content/en/articles/pam/_index.po
new file mode 100644
index 0000000000..abe308c206
--- /dev/null
+++ b/documentation/content/en/articles/pam/_index.po
@@ -0,0 +1,1723 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-07-15 16:42-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:81
+msgid "Abstract"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/pam/_index.adoc:100
+#, no-wrap
+msgid "Terms and Conventions"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:103
+#, no-wrap
+msgid "Definitions"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:111
+#, no-wrap
+msgid "account"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:113
+msgid "The set of credentials the applicant is requesting from the arbitrator."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:114
+#, no-wrap
+msgid "applicant"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:116
+msgid "The user or entity requesting authentication."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:117
+#, no-wrap
+msgid "arbitrator"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:120
+#, no-wrap
+msgid "chain"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:124
+#, no-wrap
+msgid "client"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:127
+#, no-wrap
+msgid "facility"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:130
+#, no-wrap
+msgid "module"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:133
+#, no-wrap
+msgid "policy"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:137
+#, no-wrap
+msgid "server"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:140
+#, no-wrap
+msgid "service"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:144
+#, no-wrap
+msgid "session"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:148
+#, no-wrap
+msgid "token"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:151
+#, no-wrap
+msgid "transaction"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:155
+#, no-wrap
+msgid "Usage Examples"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/pam/_index.adoc:159
+#, no-wrap
+msgid "Client and Server Are One"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:162
+msgid "This simple example shows `alice` man:su[1]'ing to `root`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/pam/_index.adoc:167
+#, no-wrap
+msgid ""
+"% whoami\n"
+"alice\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:178
+msgid "The applicant is `alice`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:179
+msgid "The account is `root`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:180
+msgid "The man:su[1] process is both client and server."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:181
+msgid "The authentication token is `xi3kiune`."
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/pam/_index.adoc:183
+#, no-wrap
+msgid "Client and Server Are Separate"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/pam/_index.adoc:192
+#, no-wrap
+msgid ""
+"% whoami\n"
+"eve\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/pam/_index.adoc:203
+#, no-wrap
+msgid ""
+"Welcome to FreeBSD!\n"
+"%\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:207
+msgid "The applicant is `eve`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:208
+msgid "The client is Eve's man:ssh[1] process."
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:210
+msgid "The account is `bob`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:211
+msgid "The authentication token is `god`."
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/pam/_index.adoc:213
+#, no-wrap
+msgid "Sample Policy"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:216
+msgid "The following is FreeBSD's default policy for `sshd`:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:229
+msgid "`auth`, `account`, `session` and `password` are facilities."
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/pam/_index.adoc:232
+#, no-wrap
+msgid "PAM Essentials"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:235
+#, no-wrap
+msgid "Facilities and Primitives"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:239
+#, no-wrap
+msgid "`auth`"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:246
+#, no-wrap
+msgid "`account`"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:252
+#, no-wrap
+msgid "`session`"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:259
+#, no-wrap
+msgid "`password`"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:266
+#, no-wrap
+msgid "Modules"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/pam/_index.adoc:273
+#, no-wrap
+msgid "Module Naming"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/pam/_index.adoc:280
+#, no-wrap
+msgid "Module Versioning"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:291
+#, no-wrap
+msgid "Chains and Policies"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:303
+#, no-wrap
+msgid "`binding`"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:308
+#, no-wrap
+msgid "`required`"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:312
+#, no-wrap
+msgid "`requisite`"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:316
+#, no-wrap
+msgid "`sufficient`"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/pam/_index.adoc:321
+#, no-wrap
+msgid "`optional`"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:333
+#, no-wrap
+msgid "Transactions"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:342
+msgid "The server calls man:pam_authenticate[3] to authenticate the applicant."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/pam/_index.adoc:351
+#, no-wrap
+msgid "PAM Configuration"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:354
+#, no-wrap
+msgid "PAM Policy Files"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/pam/_index.adoc:357
+#, no-wrap
+msgid "The [.filename]#/etc/pam.conf#"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/pam/_index.adoc:376
+#, no-wrap
+msgid "The [.filename]#/etc/pam.d#"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/pam/_index.adoc:388
+#, no-wrap
+msgid "auth required pam_nologin.so no_warn\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/pam/_index.adoc:404
+#, no-wrap
+msgid "The Policy Search Order"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:412
+#, no-wrap
+msgid "Breakdown of a Configuration Line"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:428
+#, no-wrap
+msgid "Policies"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Block title
+#: documentation/content/en/articles/pam/_index.adoc:439
+#, no-wrap
+msgid "PAM Chain Execution Summary"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:444
+#, no-wrap
+msgid "PAM_SUCCESS"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:445
+#, no-wrap
+msgid "PAM_IGNORE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:447
+#, no-wrap
+msgid "other"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:448
+#, no-wrap
+msgid "binding"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:453
+#, no-wrap
+msgid "required"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:458
+#, no-wrap
+msgid "requisite"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:462
+#, no-wrap
+msgid "fail = true; break;"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:463
+#, no-wrap
+msgid "sufficient"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pam/_index.adoc:468
+#, no-wrap
+msgid "optional"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/pam/_index.adoc:483
+#, no-wrap
+msgid "FreeBSD PAM Modules"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:486
+#, no-wrap
+msgid "man:pam_deny[8]"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:492
+#, no-wrap
+msgid "man:pam_echo[8]"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:498
+#, no-wrap
+msgid "man:pam_exec[8]"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:504
+#, no-wrap
+msgid "man:pam_ftpusers[8]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:507
+msgid "The man:pam_ftpusers[8] module"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:509
+#, no-wrap
+msgid "man:pam_group[8]"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:515
+#, no-wrap
+msgid "man:pam_guest[8]"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:522
+#, no-wrap
+msgid "man:pam_krb5[8]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:525
+msgid "The man:pam_krb5[8] module"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:527
+#, no-wrap
+msgid "man:pam_ksu[8]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:530
+msgid "The man:pam_ksu[8] module"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:532
+#, no-wrap
+msgid "man:pam_lastlog[8]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:535
+msgid "The man:pam_lastlog[8] module"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:537
+#, no-wrap
+msgid "man:pam_login_access[8]"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:542
+#, no-wrap
+msgid "man:pam_nologin[8]"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:548
+#, no-wrap
+msgid "man:pam_passwdqc[8]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:551
+msgid "The man:pam_passwdqc[8] module"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:553
+#, no-wrap
+msgid "man:pam_permit[8]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:557
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:559
+#, no-wrap
+msgid "man:pam_radius[8]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:562
+msgid "The man:pam_radius[8] module"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:564
+#, no-wrap
+msgid "man:pam_rhosts[8]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:567
+msgid "The man:pam_rhosts[8] module"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:569
+#, no-wrap
+msgid "man:pam_rootok[8]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:573
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:575
+#, no-wrap
+msgid "man:pam_securetty[8]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:578
+msgid "The man:pam_securetty[8] module"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:580
+#, no-wrap
+msgid "man:pam_self[8]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:584
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:586
+#, no-wrap
+msgid "man:pam_ssh[8]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:592
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:594
+#, no-wrap
+msgid "man:pam_tacplus[8]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:597
+msgid "The man:pam_tacplus[8] module"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:599
+#, no-wrap
+msgid "man:pam_unix[8]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:604
+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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/pam/_index.adoc:606
+#, no-wrap
+msgid "PAM Application Programming"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:609
+#: documentation/content/en/articles/pam/_index.adoc:614
+msgid "This section has not yet been written."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/pam/_index.adoc:611
+#, no-wrap
+msgid "PAM Module Programming"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/pam/_index.adoc:619
+#, no-wrap
+msgid "Sample PAM Application"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:626
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/pam/_index.adoc:630
+#, no-wrap
+msgid "include::{include-path}su.c[]\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/pam/_index.adoc:636
+#, no-wrap
+msgid "Sample PAM Module"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:640
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/pam/_index.adoc:644
+#, no-wrap
+msgid "include::{include-path}pam_unix.c[]\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/pam/_index.adoc:650
+#, no-wrap
+msgid "Sample PAM Conversation Function"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:655
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/pam/_index.adoc:659
+#, no-wrap
+msgid "include::{include-path}converse.c[]\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/pam/_index.adoc:664
+#, no-wrap
+msgid "Further Reading"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:666
+#, no-wrap
+msgid "Papers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:669
+msgid ""
+"Making Login Services Independent of Authentication Technologies Vipin "
+"Samar. Charlie Lai. Sun Microsystems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:671
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:673
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:674
+#, no-wrap
+msgid "User Manuals"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:677
+msgid ""
+"_link:https://docs.oracle.com/cd/E26505_01/html/E27224/pam-1.html[PAM "
+"Administration]_. Sun Microsystems."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pam/_index.adoc:678
+#, no-wrap
+msgid "Related Web Pages"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:681
+msgid ""
+"_link:https://www.openpam.org/[OpenPAM homepage]_ Dag-Erling Smørgrav. "
+"ThinkSec AS."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:683
+msgid ""
+"_link:http://www.kernel.org/pub/linux/libs/pam/[Linux-PAM homepage]_ Andrew "
+"Morgan."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pam/_index.adoc:684
+msgid "_Solaris PAM homepage_. Sun Microsystems."
+msgstr ""
diff --git a/documentation/content/en/articles/pgpkeys/_index.adoc b/documentation/content/en/articles/pgpkeys/_index.adoc
index 998f15fd7a..2670b9d803 100644
--- a/documentation/content/en/articles/pgpkeys/_index.adoc
+++ b/documentation/content/en/articles/pgpkeys/_index.adoc
@@ -63,16 +63,13 @@ shown in the Handbook PGP keys chapter.
=== {security-officer-name} `<{security-officer-email}>`
include::{include-path}security-officer.key[]
-=== {secteam-secretary-name} `<{secteam-secretary-email}>`
-include::{include-path}secteam-secretary.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-email}`
+=== {doceng-secretary-name} `<{doceng-secretary-email}>`
include::{include-path}doceng-secretary.key[]
[[pgpkeys-core]]
@@ -117,6 +114,9 @@ include::{include-path}tabthorpe.key[]
=== `{eadler}`
include::{include-path}eadler.key[]
+=== `{pauamma}`
+include::{include-path}pauamma.key[]
+
=== `{shaun}`
include::{include-path}shaun.key[]
@@ -207,6 +207,9 @@ include::{include-path}mbr.key[]
=== `{bvs}`
include::{include-path}bvs.key[]
+=== `{jbo}`
+include::{include-path}jbo.key[]
+
=== `{novel}`
include::{include-path}novel.key[]
@@ -261,6 +264,9 @@ include::{include-path}jcamou.key[]
=== `{acm}`
include::{include-path}acm.key[]
+=== `{olce}`
+include::{include-path}olce.key[]
+
=== `{gahr}`
include::{include-path}gahr.key[]
@@ -303,6 +309,9 @@ include::{include-path}cjc.key[]
=== `{marcus}`
include::{include-path}marcus.key[]
+=== `{fuz}`
+include::{include-path}fuz.key[]
+
=== `{nik}`
include::{include-path}nik.key[]
@@ -327,6 +336,9 @@ include::{include-path}olivier.key[]
=== `{bcran}`
include::{include-path}bcran.key[]
+=== `{cc}`
+include::{include-path}cc.key[]
+
=== `{culot}`
include::{include-path}culot.key[]
@@ -372,6 +384,9 @@ include::{include-path}bdrewery.key[]
=== `{gad}`
include::{include-path}gad.key[]
+=== `{kd}`
+include::{include-path}kd.key[]
+
=== `{olivierd}`
include::{include-path}olivierd.key[]
@@ -501,6 +516,9 @@ include::{include-path}mjg.key[]
=== `{jhale}`
include::{include-path}jhale.key[]
+=== `{jah}`
+include::{include-path}jah.key[]
+
=== `{dannyboy}`
include::{include-path}dannyboy.key[]
@@ -576,6 +594,9 @@ include::{include-path}whu.key[]
=== `{chinsan}`
include::{include-path}chinsan.key[]
+=== `{zlei}`
+include::{include-path}zlei.key[]
+
=== `{davide}`
include::{include-path}davide.key[]
@@ -657,6 +678,9 @@ include::{include-path}jkim.key[]
=== `{zack}`
include::{include-path}zack.key[]
+=== `{akiyano}`
+include::{include-path}akiyano.key[]
+
=== `{jceel}`
include::{include-path}jceel.key[]
@@ -666,6 +690,9 @@ include::{include-path}andreas.key[]
=== `{kai}`
include::{include-path}kai.key[]
+=== `{corvink}`
+include::{include-path}corvink.key[]
+
=== `{jkois}`
include::{include-path}jkois.key[]
@@ -834,6 +861,9 @@ include::{include-path}mtm.key[]
=== `{dwmalone}`
include::{include-path}dwmalone.key[]
+=== `{christos}`
+include::{include-path}christos.key[]
+
=== `{marino}`
include::{include-path}marino.key[]
@@ -849,6 +879,9 @@ include::{include-path}mm.key[]
=== `{sem}`
include::{include-path}sem.key[]
+=== `{rcm}`
+include::{include-path}rcm.key[]
+
=== `{mckusick}`
include::{include-path}mckusick.key[]
@@ -966,6 +999,9 @@ include::{include-path}philip.key[]
=== `{jpaetzel}`
include::{include-path}jpaetzel.key[]
+=== `{zirias}`
+include::{include-path}zirias.key[]
+
=== `{hiren}`
include::{include-path}hiren.key[]
@@ -987,6 +1023,12 @@ include::{include-path}royger.key[]
=== `{rpaulo}`
include::{include-path}rpaulo.key[]
+=== `{misha}`
+include::{include-path}misha.key[]
+
+=== `{dumbbell}`
+include::{include-path}dumbbell.key[]
+
=== `{rpokala}`
include::{include-path}rpokala.key[]
@@ -1002,6 +1044,9 @@ include::{include-path}den.key[]
=== `{csjp}`
include::{include-path}csjp.key[]
+=== `{grahamperrin}`
+include::{include-path}grahamperrin.key[]
+
=== `{gerald}`
include::{include-path}gerald.key[]
@@ -1077,6 +1122,9 @@ include::{include-path}roberto.key[]
=== `{rodrigc}`
include::{include-path}rodrigc.key[]
+=== `{michaelo}`
+include::{include-path}michaelo.key[]
+
=== `{ler}`
include::{include-path}ler.key[]
@@ -1308,6 +1356,9 @@ include::{include-path}tuexen.key[]
=== `{gonzo}`
include::{include-path}gonzo.key[]
+=== `{uzsolt}`
+include::{include-path}uzsolt.key[]
+
=== `{ume}`
include::{include-path}ume.key[]
@@ -1395,6 +1446,9 @@ include::{include-path}egypcio.key[]
=== `{bz}`
include::{include-path}bz.key[]
+=== `{dsl}`
+include::{include-path}dsl.key[]
+
=== `{zeising}`
include::{include-path}zeising.key[]
@@ -1416,6 +1470,24 @@ 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[]
+
+=== `{bnovkov}`
+include::{include-path}bnovkov.key[]
+
[[pgpkeys-other]]
== Other Cluster Account Holders
diff --git a/documentation/content/en/articles/pgpkeys/_index.po b/documentation/content/en/articles/pgpkeys/_index.po
new file mode 100644
index 0000000000..75773a61bd
--- /dev/null
+++ b/documentation/content/en/articles/pgpkeys/_index.po
@@ -0,0 +1,2908 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 ""
+
+#. type: Title =
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1
+#: documentation/content/en/articles/pgpkeys/_index.adoc:7
+#, no-wrap
+msgid "OpenPGP Keys"
+msgstr ""
+
+#. 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 ""
+
+#
+#
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:63
+#, no-wrap
+msgid "{security-officer-name} `<{security-officer-email}>`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:66
+#, no-wrap
+msgid "{core-secretary-name} `<{core-secretary-email}>`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:69
+#, no-wrap
+msgid "{portmgr-secretary-name} `<{portmgr-secretary-email}>`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:72
+#, no-wrap
+msgid "{doceng-secretary-name} `<{doceng-secretary-email}>`"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/pgpkeys/_index.adoc:76
+#, no-wrap
+msgid "Core Team Members"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:78
+#: documentation/content/en/articles/pgpkeys/_index.adoc:348
+#, no-wrap
+msgid "`{bapt}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:81
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1107
+#, no-wrap
+msgid "`{bcr}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:84
+#: documentation/content/en/articles/pgpkeys/_index.adoc:771
+#, no-wrap
+msgid "`{grog}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:87
+#: documentation/content/en/articles/pgpkeys/_index.adoc:171
+#, no-wrap
+msgid "`{jhb}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:90
+#: documentation/content/en/articles/pgpkeys/_index.adoc:585
+#, no-wrap
+msgid "`{lwhsu}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:93
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1371
+#, no-wrap
+msgid "`{manu}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:96
+#: documentation/content/en/articles/pgpkeys/_index.adoc:198
+#, no-wrap
+msgid "`{tcberner}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:99
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1059
+#, no-wrap
+msgid "`{0mp}`"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/pgpkeys/_index.adoc:103
+#, no-wrap
+msgid "Developers"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:105
+#, no-wrap
+msgid "`{jgh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:108
+#, no-wrap
+msgid "`{ariff}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:111
+#, no-wrap
+msgid "`{tabthorpe}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:114
+#, no-wrap
+msgid "`{eadler}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:117
+#, no-wrap
+msgid "`{pauamma}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:120
+#, no-wrap
+msgid "`{shaun}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:123
+#, no-wrap
+msgid "`{brix}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:126
+#, no-wrap
+msgid "`{mandree}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:129
+#, no-wrap
+msgid "`{will}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:132
+#, no-wrap
+msgid "`{dim}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:135
+#, no-wrap
+msgid "`{anholt}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:138
+#, no-wrap
+msgid "`{fernape}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:141
+#, no-wrap
+msgid "`{mva}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:144
+#, no-wrap
+msgid "`{araujo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:147
+#, no-wrap
+msgid "`{mat}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:150
+#, no-wrap
+msgid "`{syuu}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:153
+#, no-wrap
+msgid "`{asami}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:156
+#, no-wrap
+msgid "`{jsa}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:159
+#, no-wrap
+msgid "`{jadawin}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:162
+#, no-wrap
+msgid "`{jwb}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:165
+#, no-wrap
+msgid "`{dbaio}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:168
+#, no-wrap
+msgid "`{timur}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:174
+#, no-wrap
+msgid "`{gjb}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:177
+#, no-wrap
+msgid "`{snb}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:180
+#, no-wrap
+msgid "`{barner}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:183
+#, no-wrap
+msgid "`{lbartoletti}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:186
+#, no-wrap
+msgid "`{art}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:189
+#, no-wrap
+msgid "`{tobez}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:192
+#, no-wrap
+msgid "`{damien}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:195
+#, no-wrap
+msgid "`{bdragon}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:201
+#, no-wrap
+msgid "`{tdb}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:204
+#, no-wrap
+msgid "`{mbr}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:207
+#, no-wrap
+msgid "`{bvs}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:210
+#, no-wrap
+msgid "`{jbo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:213
+#, no-wrap
+msgid "`{novel}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:216
+#, no-wrap
+msgid "`{garga}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:219
+#, no-wrap
+msgid "`{kbowling}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:222
+#, no-wrap
+msgid "`{alexbl}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:225
+#, no-wrap
+msgid "`{ebrandi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:228
+#, no-wrap
+msgid "`{harti}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:231
+#, no-wrap
+msgid "`{obraun}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:234
+#, no-wrap
+msgid "`{makc}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:237
+#, no-wrap
+msgid "`{jmb}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:240
+#, no-wrap
+msgid "`{antoine}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:243
+#, no-wrap
+msgid "`{db}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:246
+#, no-wrap
+msgid "`{brueffer}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:249
+#, no-wrap
+msgid "`{markus}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:252
+#, no-wrap
+msgid "`{br}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:255
+#, no-wrap
+msgid "`{jch}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:258
+#, no-wrap
+msgid "`{jchandra}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:261
+#, no-wrap
+msgid "`{jcamou}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:264
+#, no-wrap
+msgid "`{acm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:267
+#, no-wrap
+msgid "`{olce}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:270
+#, no-wrap
+msgid "`{gahr}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:273
+#, no-wrap
+msgid "`{dchagin}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:276
+#, no-wrap
+msgid "`{perky}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:279
+#, no-wrap
+msgid "`{jon}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:282
+#, no-wrap
+msgid "`{jonathan}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:285
+#, no-wrap
+msgid "`{loader}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:288
+#, no-wrap
+msgid "`{luoqi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:291
+#, no-wrap
+msgid "`{ache}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:294
+#, no-wrap
+msgid "`{melifaro}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:297
+#, no-wrap
+msgid "`{cjh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:300
+#, no-wrap
+msgid "`{davidch}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:303
+#, no-wrap
+msgid "`{milki}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:306
+#, no-wrap
+msgid "`{cjc}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:309
+#, no-wrap
+msgid "`{marcus}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:312
+#, no-wrap
+msgid "`{fuz}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:315
+#, no-wrap
+msgid "`{nik}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:318
+#, no-wrap
+msgid "`{benjsc}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:321
+#, no-wrap
+msgid "`{lcook}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:324
+#, no-wrap
+msgid "`{ngie}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:327
+#, no-wrap
+msgid "`{rakuco}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:330
+#, no-wrap
+msgid "`{alc}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:333
+#, no-wrap
+msgid "`{olivier}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:336
+#, no-wrap
+msgid "`{bcran}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:339
+#, no-wrap
+msgid "`{cc}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:342
+#, no-wrap
+msgid "`{culot}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:345
+#, no-wrap
+msgid "`{alfredo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:351
+#, no-wrap
+msgid "`{ceri}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:354
+#, no-wrap
+msgid "`{edavis}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:357
+#, no-wrap
+msgid "`{alexey}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:360
+#, no-wrap
+msgid "`{bsd}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:363
+#, no-wrap
+msgid "`{carl}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:366
+#, no-wrap
+msgid "`{carlavilla}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:369
+#, no-wrap
+msgid "`{vd}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:372
+#, no-wrap
+msgid "`{rdivacky}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:375
+#, no-wrap
+msgid "`{danfe}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:378
+#, no-wrap
+msgid "`{dd}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:381
+#, no-wrap
+msgid "`{bdrewery}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:384
+#, no-wrap
+msgid "`{gad}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:387
+#, no-wrap
+msgid "`{kd}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:390
+#, no-wrap
+msgid "`{olivierd}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:393
+#, no-wrap
+msgid "`{bruno}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:396
+#, no-wrap
+msgid "`{ale}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:399
+#, no-wrap
+msgid "`{nemysis}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:402
+#, no-wrap
+msgid "`{peadar}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:405
+#, no-wrap
+msgid "`{deischen}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:408
+#, no-wrap
+msgid "`{diizzy}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:411
+#, no-wrap
+msgid "`{ue}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:414
+#, no-wrap
+msgid "`{madpilot}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:417
+#, no-wrap
+msgid "`{rafan}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:420
+#, no-wrap
+msgid "`{kami}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:423
+#, no-wrap
+msgid "`{farrokhi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:426
+#, no-wrap
+msgid "`{jedgar}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:429
+#, no-wrap
+msgid "`{mfechner}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:432
+#, no-wrap
+msgid "`{feld}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:435
+#, no-wrap
+msgid "`{green}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:438
+#, no-wrap
+msgid "`{fanf}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:441
+#, no-wrap
+msgid "`{blackend}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:444
+#, no-wrap
+msgid "`{petef}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:447
+#, no-wrap
+msgid "`{decke}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:450
+#, no-wrap
+msgid "`{landonf}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:453
+#, no-wrap
+msgid "`{billf}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:456
+#, no-wrap
+msgid "`{grembo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:459
+#, no-wrap
+msgid "`{sgalabov}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:462
+#, no-wrap
+msgid "`{avg}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:465
+#, no-wrap
+msgid "`{beat}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:468
+#, no-wrap
+msgid "`{sjg}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:471
+#, no-wrap
+msgid "`{gibbs}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:474
+#, no-wrap
+msgid "`{pfg}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:477
+#, no-wrap
+msgid "`{girgen}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:480
+#, no-wrap
+msgid "`{eugen}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:483
+#, no-wrap
+msgid "`{pgollucci}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:486
+#, no-wrap
+msgid "`{trociny}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:489
+#, no-wrap
+msgid "`{dmgk}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:492
+#, no-wrap
+msgid "`{daichi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:495
+#, no-wrap
+msgid "`{grehan}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:498
+#, no-wrap
+msgid "`{jamie}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:501
+#, no-wrap
+msgid "`{adridg}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:504
+#, no-wrap
+msgid "`{wg}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:507
+#, no-wrap
+msgid "`{bar}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:510
+#, no-wrap
+msgid "`{jmg}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:513
+#, no-wrap
+msgid "`{mjg}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:516
+#, no-wrap
+msgid "`{jhale}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:519
+#, no-wrap
+msgid "`{jah}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:522
+#, no-wrap
+msgid "`{dannyboy}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:525
+#, no-wrap
+msgid "`{dhartmei}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:528
+#, no-wrap
+msgid "`{ohauer}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:531
+#, no-wrap
+msgid "`{ehaupt}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:534
+#, no-wrap
+msgid "`{jhay}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:537
+#, no-wrap
+msgid "`{bhd}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:540
+#, no-wrap
+msgid "`{sheldonh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:543
+#, no-wrap
+msgid "`{mikeh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:546
+#, no-wrap
+msgid "`{mheinen}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:549
+#, no-wrap
+msgid "`{niels}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:552
+#, no-wrap
+msgid "`{ghelmer}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:555
+#, no-wrap
+msgid "`{mux}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:558
+#, no-wrap
+msgid "`{wen}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:561
+#, no-wrap
+msgid "`{dhn}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:564
+#, no-wrap
+msgid "`{jhibbits}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:567
+#, no-wrap
+msgid "`{jhixson}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:570
+#, no-wrap
+msgid "`{pho}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:573
+#, no-wrap
+msgid "`{oh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:576
+#, no-wrap
+msgid "`{mhorne}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:579
+#, no-wrap
+msgid "`{bhughes}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:582
+#, no-wrap
+msgid "`{sunpoet}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:588
+#, no-wrap
+msgid "`{foxfair}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:591
+#, no-wrap
+msgid "`{whu}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:594
+#, no-wrap
+msgid "`{chinsan}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:597
+#, no-wrap
+msgid "`{zlei}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:600
+#, no-wrap
+msgid "`{davide}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:603
+#, no-wrap
+msgid "`{jkh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:606
+#, no-wrap
+msgid "`{versus}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:609
+#, no-wrap
+msgid "`{pi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:612
+#, no-wrap
+msgid "`{weongyo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:615
+#, no-wrap
+msgid "`{peterj}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:618
+#, no-wrap
+msgid "`{jinmei}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:621
+#, no-wrap
+msgid "`{ahze}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:624
+#, no-wrap
+msgid "`{markj}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:627
+#, no-wrap
+msgid "`{trevor}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:630
+#, no-wrap
+msgid "`{erj}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:633
+#, no-wrap
+msgid "`{allanjude}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:636
+#, no-wrap
+msgid "`{bjk}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:639
+#, no-wrap
+msgid "`{phk}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:642
+#, no-wrap
+msgid "`{pluknet}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:645
+#, no-wrap
+msgid "`{cokane}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:648
+#, no-wrap
+msgid "`{karels}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:651
+#, no-wrap
+msgid "`{kato}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:654
+#, no-wrap
+msgid "`{vkashyap}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:657
+#, no-wrap
+msgid "`{pkubaj}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:660
+#, no-wrap
+msgid "`{kris}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:663
+#, no-wrap
+msgid "`{keramida}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:666
+#, no-wrap
+msgid "`{fjoe}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:669
+#, no-wrap
+msgid "`{manolis}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:672
+#, no-wrap
+msgid "`{stevek}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:675
+#, no-wrap
+msgid "`{jkim}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:678
+#, no-wrap
+msgid "`{zack}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:681
+#, no-wrap
+msgid "`{akiyano}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:684
+#, no-wrap
+msgid "`{jceel}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:687
+#, no-wrap
+msgid "`{andreas}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:690
+#, no-wrap
+msgid "`{kai}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:693
+#, no-wrap
+msgid "`{corvink}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:696
+#, no-wrap
+msgid "`{jkois}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:699
+#, no-wrap
+msgid "`{sergei}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:702
+#, no-wrap
+msgid "`{maxim}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:705
+#, no-wrap
+msgid "`{taras}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:708
+#, no-wrap
+msgid "`{tobik}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:711
+#, no-wrap
+msgid "`{jkoshy}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:714
+#, no-wrap
+msgid "`{wkoszek}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:717
+#, no-wrap
+msgid "`{ak}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:720
+#, no-wrap
+msgid "`{gabor}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:723
+#, no-wrap
+msgid "`{anchie}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:726
+#, no-wrap
+msgid "`{rushani}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:729
+#, no-wrap
+msgid "`{kuriyama}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:732
+#, no-wrap
+msgid "`{rene}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:735
+#, no-wrap
+msgid "`{jlaffaye}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:738
+#, no-wrap
+msgid "`{clement}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:741
+#, no-wrap
+msgid "`{mlaier}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:744
+#, no-wrap
+msgid "`{martymac}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:747
+#, no-wrap
+msgid "`{glarkin}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:750
+#, no-wrap
+msgid "`{dru}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:753
+#, no-wrap
+msgid "`{lawrance}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:756
+#, no-wrap
+msgid "`{njl}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:759
+#, no-wrap
+msgid "`{jlh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:762
+#, no-wrap
+msgid "`{leeym}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:765
+#, no-wrap
+msgid "`{sam}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:768
+#, no-wrap
+msgid "`{jylefort}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:774
+#, no-wrap
+msgid "`{oliver}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:777
+#, no-wrap
+msgid "`{netchild}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:780
+#, no-wrap
+msgid "`{leitao}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:783
+#, no-wrap
+msgid "`{ae}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:786
+#, no-wrap
+msgid "`{lesi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:789
+#, no-wrap
+msgid "`{achim}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:792
+#, no-wrap
+msgid "`{cel}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:795
+#, no-wrap
+msgid "`{glewis}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:798
+#, no-wrap
+msgid "`{vishwin}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:801
+#, no-wrap
+msgid "`{delphij}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:804
+#, no-wrap
+msgid "`{avatar}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:807
+#, no-wrap
+msgid "`{ijliao}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:810
+#, no-wrap
+msgid "`{rlibby}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:813
+#, no-wrap
+msgid "`{pclin}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:816
+#, no-wrap
+msgid "`{yzlin}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:819
+#, no-wrap
+msgid "`{linimon}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:822
+#, no-wrap
+msgid "`{arved}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:825
+#, no-wrap
+msgid "`{dryice}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:828
+#, no-wrap
+msgid "`{nemoliu}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:831
+#, no-wrap
+msgid "`{kevlo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:834
+#, no-wrap
+msgid "`{zml}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:837
+#, no-wrap
+msgid "`{nox}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:840
+#, no-wrap
+msgid "`{avl}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:843
+#, no-wrap
+msgid "`{scottl}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:846
+#, no-wrap
+msgid "`{rmacklem}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:849
+#, no-wrap
+msgid "`{vmaffione}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:852
+#, no-wrap
+msgid "`{bmah}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:855
+#, no-wrap
+msgid "`{rm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:858
+#, no-wrap
+msgid "`{mtm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:861
+#, no-wrap
+msgid "`{dwmalone}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:864
+#, no-wrap
+msgid "`{christos}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:867
+#, no-wrap
+msgid "`{marino}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:870
+#, no-wrap
+msgid "`{cherry}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:873
+#, no-wrap
+msgid "`{matusita}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:876
+#, no-wrap
+msgid "`{mm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:879
+#, no-wrap
+msgid "`{sem}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:882
+#, no-wrap
+msgid "`{rcm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:885
+#, no-wrap
+msgid "`{mckusick}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:888
+#, no-wrap
+msgid "`{tmclaugh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:891
+#, no-wrap
+msgid "`{jmelo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:894
+#, no-wrap
+msgid "`{mmel}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:897
+#, no-wrap
+msgid "`{jmmv}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:900
+#, no-wrap
+msgid "`{kadesai}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:903
+#, no-wrap
+msgid "`{ken}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:906
+#, no-wrap
+msgid "`{markm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:909
+#, no-wrap
+msgid "`{dinoex}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:912
+#, no-wrap
+msgid "`{sanpei}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:915
+#, no-wrap
+msgid "`{rmh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:918
+#, no-wrap
+msgid "`{driesm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:921
+#, no-wrap
+msgid "`{jrm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:924
+#, no-wrap
+msgid "`{freqlabs}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:927
+#, no-wrap
+msgid "`{mmoll}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:930
+#, no-wrap
+msgid "`{cmt}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:933
+#, no-wrap
+msgid "`{stephen}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:936
+#, no-wrap
+msgid "`{marcel}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:939
+#, no-wrap
+msgid "`{dougm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:942
+#, no-wrap
+msgid "`{kmoore}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:945
+#, no-wrap
+msgid "`{marck}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:948
+#, no-wrap
+msgid "`{mav}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:951
+#, no-wrap
+msgid "`{rich}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:954
+#, no-wrap
+msgid "`{knu}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:957
+#, no-wrap
+msgid "`{tmm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:960
+#, no-wrap
+msgid "`{max}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:963
+#, no-wrap
+msgid "`{maho}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:966
+#, no-wrap
+msgid "`{yoichi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:969
+#, no-wrap
+msgid "`{bland}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:972
+#, no-wrap
+msgid "`{gnn}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:975
+#, no-wrap
+msgid "`{khng}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:978
+#, no-wrap
+msgid "`{simon}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:981
+#, no-wrap
+msgid "`{rnoland}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:984
+#, no-wrap
+msgid "`{anders}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:987
+#, no-wrap
+msgid "`{lofi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:990
+#, no-wrap
+msgid "`{obrien}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:993
+#, no-wrap
+msgid "`{olgeni}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:996
+#, no-wrap
+msgid "`{philip}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:999
+#, no-wrap
+msgid "`{jpaetzel}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1002
+#, no-wrap
+msgid "`{zirias}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1005
+#, no-wrap
+msgid "`{hiren}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1008
+#, no-wrap
+msgid "`{hmp}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1011
+#, no-wrap
+msgid "`{fluffy}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1014
+#, no-wrap
+msgid "`{sat}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1017
+#, no-wrap
+msgid "`{np}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1020
+#, no-wrap
+msgid "`{royger}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1023
+#, no-wrap
+msgid "`{rpaulo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1026
+#, no-wrap
+msgid "`{misha}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1029
+#, no-wrap
+msgid "`{dumbbell}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1032
+#, no-wrap
+msgid "`{rpokala}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1035
+#, no-wrap
+msgid "`{mp}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1038
+#, no-wrap
+msgid "`{roam}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1041
+#, no-wrap
+msgid "`{den}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1044
+#, no-wrap
+msgid "`{csjp}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1047
+#, no-wrap
+msgid "`{grahamperrin}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1050
+#, no-wrap
+msgid "`{gerald}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1053
+#, no-wrap
+msgid "`{scottph}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1056
+#, no-wrap
+msgid "`{jacula}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1062
+#, no-wrap
+msgid "`{jdp}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1065
+#, no-wrap
+msgid "`{krion}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1068
+#, no-wrap
+msgid "`{sepotvin}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1071
+#, no-wrap
+msgid "`{cpm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1074
+#, no-wrap
+msgid "`{markp}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1077
+#, no-wrap
+msgid "`{alepulver}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1080
+#, no-wrap
+msgid "`{kp}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1083
+#, no-wrap
+msgid "`{thomas}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1086
+#, no-wrap
+msgid "`{hq}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1089
+#, no-wrap
+msgid "`{bofh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1092
+#, no-wrap
+msgid "`{fox}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1095
+#, no-wrap
+msgid "`{lbr}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1098
+#, no-wrap
+msgid "`{crees}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1101
+#, no-wrap
+msgid "`{rees}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1104
+#, no-wrap
+msgid "`{mr}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1110
+#, no-wrap
+msgid "`{trhodes}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1113
+#, no-wrap
+msgid "`{benno}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1116
+#, no-wrap
+msgid "`{beech}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1119
+#, no-wrap
+msgid "`{roberto}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1122
+#, no-wrap
+msgid "`{rodrigc}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1125
+#, no-wrap
+msgid "`{michaelo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1128
+#, no-wrap
+msgid "`{ler}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1131
+#, no-wrap
+msgid "`{leres}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1134
+#, no-wrap
+msgid "`{robak}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1137
+#, no-wrap
+msgid "`{guido}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1140
+#, no-wrap
+msgid "`{rea}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1143
+#, no-wrap
+msgid "`{ray}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1146
+#, no-wrap
+msgid "`{niklas}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1149
+#, no-wrap
+msgid "`{salvadore}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1152
+#, no-wrap
+msgid "`{bsam}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1155
+#, no-wrap
+msgid "`{marks}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1158
+#, no-wrap
+msgid "`{bschmidt}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1161
+#, no-wrap
+msgid "`{wosch}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1164
+#, no-wrap
+msgid "`{cy}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1167
+#, no-wrap
+msgid "`{das}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1170
+#, no-wrap
+msgid "`{scheidell}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1173
+#, no-wrap
+msgid "`{matthew}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1176
+#, no-wrap
+msgid "`{tmseck}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1179
+#, no-wrap
+msgid "`{johans}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1182
+#, no-wrap
+msgid "`{bakul}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1185
+#, no-wrap
+msgid "`{gshapiro}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1188
+#, no-wrap
+msgid "`{wxs}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1191
+#, no-wrap
+msgid "`{nork}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1194
+#, no-wrap
+msgid "`{syrinx}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1197
+#, no-wrap
+msgid "`{vanilla}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1200
+#, no-wrap
+msgid "`{ashish}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1203
+#, no-wrap
+msgid "`{asiciliano}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1206
+#, no-wrap
+msgid "`{chs}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1209
+#, no-wrap
+msgid "`{bms}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1212
+#, no-wrap
+msgid "`{demon}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1215
+#, no-wrap
+msgid "`{jesper}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1218
+#, no-wrap
+msgid "`{scop}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1221
+#, no-wrap
+msgid "`{anray}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1224
+#, no-wrap
+msgid "`{flo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1227
+#, no-wrap
+msgid "`{glebius}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1230
+#, no-wrap
+msgid "`{kensmith}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1233
+#, no-wrap
+msgid "`{ben}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1236
+#, no-wrap
+msgid "`{des}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1239
+#, no-wrap
+msgid "`{sobomax}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1242
+#, no-wrap
+msgid "`{asomers}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1245
+#, no-wrap
+msgid "`{brian}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1248
+#, no-wrap
+msgid "`{sson}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1251
+#, no-wrap
+msgid "`{nsouch}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1254
+#, no-wrap
+msgid "`{ssouhlal}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1257
+#, no-wrap
+msgid "`{loos}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1260
+#, no-wrap
+msgid "`{brnrd}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1263
+#, no-wrap
+msgid "`{rink}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1266
+#, no-wrap
+msgid "`{vsevolod}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1269
+#, no-wrap
+msgid "`{pstef}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1272
+#, no-wrap
+msgid "`{zi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1275
+#, no-wrap
+msgid "`{lstewart}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1278
+#, no-wrap
+msgid "`{murray}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1281
+#, no-wrap
+msgid "`{vs}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1284
+#, no-wrap
+msgid "`{xride}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1287
+#, no-wrap
+msgid "`{marius}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1290
+#, no-wrap
+msgid "`{cs}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1293
+#, no-wrap
+msgid "`{clsung}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1296
+#, no-wrap
+msgid "`{gsutter}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1299
+#, no-wrap
+msgid "`{metal}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1302
+#, no-wrap
+msgid "`{ryusuke}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1305
+#, no-wrap
+msgid "`{nyan}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1308
+#, no-wrap
+msgid "`{sahil}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1311
+#, no-wrap
+msgid "`{tota}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1314
+#, no-wrap
+msgid "`{romain}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1317
+#, no-wrap
+msgid "`{eduardo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1320
+#, no-wrap
+msgid "`{sylvio}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1323
+#, no-wrap
+msgid "`{itetcu}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1326
+#, no-wrap
+msgid "`{mi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1329
+#, no-wrap
+msgid "`{gordon}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1332
+#, no-wrap
+msgid "`{lth}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1335
+#, no-wrap
+msgid "`{fabient}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1338
+#, no-wrap
+msgid "`{thierry}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1341
+#, no-wrap
+msgid "`{thompsa}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1344
+#, no-wrap
+msgid "`{flz}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1347
+#, no-wrap
+msgid "`{jilles}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1350
+#, no-wrap
+msgid "`{ganbold}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1353
+#, no-wrap
+msgid "`{tuexen}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1356
+#, no-wrap
+msgid "`{gonzo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1359
+#, no-wrap
+msgid "`{ume}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1362
+#, no-wrap
+msgid "`{ups}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1365
+#, no-wrap
+msgid "`{fsu}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1368
+#, no-wrap
+msgid "`{mikael}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1374
+#, no-wrap
+msgid "`{ram}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1377
+#, no-wrap
+msgid "`{bryanv}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1380
+#, no-wrap
+msgid "`{nectar}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1383
+#, no-wrap
+msgid "`{avilla}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1386
+#, no-wrap
+msgid "`{nivit}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1389
+#, no-wrap
+msgid "`{ivoras}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1392
+#, no-wrap
+msgid "`{stefan}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1395
+#, no-wrap
+msgid "`{kaiw}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1398
+#, no-wrap
+msgid "`{adamw}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1401
+#, no-wrap
+msgid "`{naddy}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1404
+#, no-wrap
+msgid "`{peter}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1407
+#, no-wrap
+msgid "`{nwhitehorn}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1410
+#, no-wrap
+msgid "`{miwi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1413
+#, no-wrap
+msgid "`{nate}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1416
+#, no-wrap
+msgid "`{twinterg}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1419
+#, no-wrap
+msgid "`{def}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1422
+#, no-wrap
+msgid "`{wollman}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1425
+#, no-wrap
+msgid "`{joerg}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1428
+#, no-wrap
+msgid "`{ygy}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1431
+#, no-wrap
+msgid "`{emax}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1434
+#, no-wrap
+msgid "`{oshogbo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1437
+#, no-wrap
+msgid "`{riggs}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1440
+#, no-wrap
+msgid "`{egypcio}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1443
+#, no-wrap
+msgid "`{bz}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1446
+#, no-wrap
+msgid "`{dsl}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1449
+#, no-wrap
+msgid "`{zeising}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1452
+#, no-wrap
+msgid "`{phantom}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1455
+#, no-wrap
+msgid "`{tz}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1458
+#, no-wrap
+msgid "`{rigoletto}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1461
+#, no-wrap
+msgid "`{kaktus}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1464
+#, no-wrap
+msgid "`{samm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1467
+#, no-wrap
+msgid "`{arrowd}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1470
+#, no-wrap
+msgid "`{ronald}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1473
+#, no-wrap
+msgid "`{meta}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1476
+#, no-wrap
+msgid "`{rnagy}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1479
+#, no-wrap
+msgid "`{vvd}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1482
+#, no-wrap
+msgid "`{gbe}`"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1486
+#, no-wrap
+msgid "Other Cluster Account Holders"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1488
+#, no-wrap
+msgid "`{bk}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1491
+#, no-wrap
+msgid "`{deb}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1494
+#, no-wrap
+msgid "`{debdrup}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1497
+#, no-wrap
+msgid "`{dutchdaemon}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1500
+#, no-wrap
+msgid "`{keymaster}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1503
+#, no-wrap
+msgid "`{mwlucas}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1506
+#, no-wrap
+msgid "`{dhw}`"
+msgstr ""
diff --git a/documentation/content/en/articles/port-mentor-guidelines/_index.po b/documentation/content/en/articles/port-mentor-guidelines/_index.po
new file mode 100644
index 0000000000..8318571d82
--- /dev/null
+++ b/documentation/content/en/articles/port-mentor-guidelines/_index.po
@@ -0,0 +1,311 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:52
+#, no-wrap
+msgid "Why Mentor?"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:59
+#, no-wrap
+msgid "Mentor/Co-Mentor"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:62
+msgid "Reasons for a co-mentorship:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:68
+msgid "Two heads are better than one."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:70
+msgid "Reasons for sole mentorship:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:72
+msgid "You do not play nicely with others."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:73
+msgid "You prefer to have a one-on-one relationship."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:87
+#, no-wrap
+msgid "Selecting a Mentee"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:107
+#, no-wrap
+msgid "Mentorship Duration"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/port-mentor-guidelines/_index.adoc:122
+#, no-wrap
+msgid "Mentor/Co-Mentor Debate"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
diff --git a/documentation/content/en/articles/pr-guidelines/_index.po b/documentation/content/en/articles/pr-guidelines/_index.po
new file mode 100644
index 0000000000..e5b90c1f53
--- /dev/null
+++ b/documentation/content/en/articles/pr-guidelines/_index.po
@@ -0,0 +1,1439 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 10:28-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:44
+msgid "Abstract"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:62
+#, no-wrap
+msgid "Problem Report Life-cycle"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:79
+#, no-wrap
+msgid "Problem Report State"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:93
+#, no-wrap
+msgid "open"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:96
+#, no-wrap
+msgid "analyzed"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:99
+#, no-wrap
+msgid "feedback"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:102
+#, no-wrap
+msgid "patched"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:105
+#, no-wrap
+msgid "suspended"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:111
+#, no-wrap
+msgid "closed"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:120
+#, no-wrap
+msgid "Types of Problem Reports"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:125
+msgid "<<pr-unassigned>>"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:126
+msgid "<<pr-assigned>>"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:127
+msgid "<<pr-dups>>"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:128
+msgid "<<pr-stale>>"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:129
+msgid "<<pr-misfiled-notpr>>"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:133
+#, no-wrap
+msgid "Unassigned PRs"
+msgstr ""
+
+#. 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 ""
+
+#. type: Block title
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:141
+#, no-wrap
+msgid "Default Assignees - most common"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:149
+#, no-wrap
+msgid "base system"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:150
+#, no-wrap
+msgid "bin, conf, gnu, kern, misc"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:152
+#, no-wrap
+msgid "freebsd-bugs"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:153
+#, no-wrap
+msgid "architecture-specific"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:154
+#, no-wrap
+msgid "alpha, amd64, arm, i386, ia64, powerpc, sparc64"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:156
+#, no-wrap
+msgid "freebsd-_arch_"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:157
+#, no-wrap
+msgid "ports collection"
+msgstr ""
+
+#. 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:160
+#, no-wrap
+msgid "freebsd-ports-bugs"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:161
+#, no-wrap
+msgid "documentation shipped with the system"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:162
+#, no-wrap
+msgid "docs"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:164
+#, no-wrap
+msgid "freebsd-doc"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:165
+#, no-wrap
+msgid "FreeBSD web pages (not including docs)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:166
+#, no-wrap
+msgid "Website"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:167
+#, no-wrap
+msgid "freebsd-www"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:170
+#, no-wrap
+msgid "Default Assignees - other"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:178
+#, no-wrap
+msgid "advocacy efforts"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:179
+#, no-wrap
+msgid "advocacy"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:181
+#, no-wrap
+msgid "freebsd-advocacy"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:182
+#, no-wrap
+msgid "Java Virtual Machine(TM) problems"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:183
+#, no-wrap
+msgid "java"
+msgstr ""
+
+#. 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:186
+#, no-wrap
+msgid "standards compliance"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:187
+#, no-wrap
+msgid "standards"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:189
+#, no-wrap
+msgid "freebsd-standards"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:190
+#, no-wrap
+msgid "threading libraries"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:191
+#, no-wrap
+msgid "threads"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:193
+#, no-wrap
+msgid "freebsd-threads"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:194
+#, no-wrap
+msgid "man:usb[4] subsystem"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:195
+#, no-wrap
+msgid "usb"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:196
+#, no-wrap
+msgid "freebsd-usb"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Block title
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:217
+#, no-wrap
+msgid "Common Assignees - base system"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:226
+#, no-wrap
+msgid "problem specific to the ARM(R) architecture"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:227
+#, no-wrap
+msgid "arm"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:228
+#, no-wrap
+msgid "freebsd-arm"
+msgstr ""
+
+#. 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:231
+#, no-wrap
+msgid "problem specific to the MIPS(R) architecture"
+msgstr ""
+
+#. 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:233
+#, no-wrap
+msgid "freebsd-mips"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:236
+#, no-wrap
+msgid "problem specific to the PowerPC(R) architecture"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:238
+#, no-wrap
+msgid "freebsd-ppc"
+msgstr ""
+
+#. 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:243
+#, no-wrap
+msgid "freebsd-acpi"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:246
+#, no-wrap
+msgid "problem with Asynchronous Transfer Mode (ATM) drivers"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:248
+#, no-wrap
+msgid "freebsd-atm"
+msgstr ""
+
+#. 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:253
+#, no-wrap
+msgid "freebsd-embedded"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:256
+#, no-wrap
+msgid "problem with FireWire(R) drivers"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:258
+#, no-wrap
+msgid "freebsd-firewire"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:261
+#, no-wrap
+msgid "problem with the filesystem code"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:263
+#, no-wrap
+msgid "freebsd-fs"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:266
+#, no-wrap
+msgid "problem with the man:geom[4] subsystem"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:268
+#, no-wrap
+msgid "freebsd-geom"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:271
+#, no-wrap
+msgid "problem with the man:ipfw[4] subsystem"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:273
+#, no-wrap
+msgid "freebsd-ipfw"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:276
+#, no-wrap
+msgid "problem with Integrated Services Digital Network (ISDN) drivers"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:278
+#, no-wrap
+msgid "freebsd-isdn"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:281
+#, no-wrap
+msgid "man:jail[8] subsystem"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:283
+#, no-wrap
+msgid "freebsd-jail"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:286
+#, no-wrap
+msgid "problem with Linux(R) or SVR4 emulation"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:288
+#, no-wrap
+msgid "freebsd-emulation"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:291
+#, no-wrap
+msgid "problem with the networking stack"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:293
+#, no-wrap
+msgid "freebsd-net"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:296
+#, no-wrap
+msgid "problem with the man:pf[4] subsystem"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:298
+#, no-wrap
+msgid "freebsd-pf"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:301
+#, no-wrap
+msgid "problem with the man:scsi[4] subsystem"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:303
+#, no-wrap
+msgid "freebsd-scsi"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:306
+#, no-wrap
+msgid "problem with the man:sound[4] subsystem"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:308
+#, no-wrap
+msgid "freebsd-multimedia"
+msgstr ""
+
+#. 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:313
+#, no-wrap
+msgid "freebsd-wireless"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:316
+#, no-wrap
+msgid "problem with man:sysinstall[8] or man:bsdinstall[8]"
+msgstr ""
+
+#. 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:318
+#, no-wrap
+msgid "freebsd-sysinstall"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:321
+#, no-wrap
+msgid "problem with the system startup scripts (man:rc[8])"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:323
+#, no-wrap
+msgid "freebsd-rc"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:326
+#, no-wrap
+msgid "problem with VIMAGE or VNET functionality and related code"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:328
+#, no-wrap
+msgid "freebsd-virtualization"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:331
+#, no-wrap
+msgid "problem with Xen emulation"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:333
+#, no-wrap
+msgid "freebsd-xen"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:337
+#, no-wrap
+msgid "Common Assignees - Ports Collection"
+msgstr ""
+
+#. 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:348
+#, no-wrap
+msgid "portmgr"
+msgstr ""
+
+#. 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:351
+#, no-wrap
+msgid "port which is maintained by apache@FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:353
+#, no-wrap
+msgid "apache"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:356
+#, no-wrap
+msgid "port which is maintained by autotools@FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:358
+#, no-wrap
+msgid "autotools"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:361
+#, no-wrap
+msgid "port which is maintained by doceng@FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:363
+#, no-wrap
+msgid "doceng"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:366
+#, no-wrap
+msgid "port which is maintained by eclipse@FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:368
+#, no-wrap
+msgid "freebsd-eclipse"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:371
+#, no-wrap
+msgid "port which is maintained by gecko@FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:373
+#, no-wrap
+msgid "gecko"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:376
+#, no-wrap
+msgid "port which is maintained by gnome@FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:378
+#, no-wrap
+msgid "gnome"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:381
+#, no-wrap
+msgid "port which is maintained by hamradio@FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:383
+#, no-wrap
+msgid "hamradio"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:386
+#, no-wrap
+msgid "port which is maintained by haskell@FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:388
+#, no-wrap
+msgid "haskell"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:391
+#, no-wrap
+msgid "port which is maintained by java@FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:396
+#, no-wrap
+msgid "port which is maintained by kde@FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:398
+#, no-wrap
+msgid "kde"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:401
+#, no-wrap
+msgid "port which is maintained by mono@FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:403
+#, no-wrap
+msgid "mono"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:406
+#, no-wrap
+msgid "port which is maintained by office@FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:408
+#, no-wrap
+msgid "freebsd-office"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:411
+#, no-wrap
+msgid "port which is maintained by perl@FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:413
+#, no-wrap
+msgid "perl"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:416
+#, no-wrap
+msgid "port which is maintained by python@FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:418
+#, no-wrap
+msgid "freebsd-python"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:421
+#, no-wrap
+msgid "port which is maintained by ruby@FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:423
+#, no-wrap
+msgid "freebsd-ruby"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:426
+#, no-wrap
+msgid "port which is maintained by secteam@FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:428
+#, no-wrap
+msgid "secteam"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:431
+#, no-wrap
+msgid "port which is maintained by vbox@FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:433
+#, no-wrap
+msgid "vbox"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:436
+#, no-wrap
+msgid "port which is maintained by x11@FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:438
+#, no-wrap
+msgid "freebsd-x11"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Block title
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:447
+#, no-wrap
+msgid "Common Assignees - Other"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:456
+#, no-wrap
+msgid "problem with PR database"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:462
+#, no-wrap
+msgid "doc"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:467
+#, no-wrap
+msgid "Assigned PRs"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:477
+#, no-wrap
+msgid "Duplicate PRs"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:483
+#, no-wrap
+msgid "Stale PRs"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:494
+#, no-wrap
+msgid "Non-Bug PRs"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:504
+msgid "Set the component to `junk` (under `Supporting Services`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:505
+msgid "Set Responsible to `nobody@FreeBSD.org`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:506
+msgid "Set State to `Issue Resolved`."
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:510
+#, no-wrap
+msgid "Further Reading"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
diff --git a/documentation/content/en/articles/problem-reports/_index.adoc b/documentation/content/en/articles/problem-reports/_index.adoc
index 81cf7c92f9..f201711526 100644
--- a/documentation/content/en/articles/problem-reports/_index.adoc
+++ b/documentation/content/en/articles/problem-reports/_index.adoc
@@ -68,7 +68,7 @@ Read the entire document before submitting a problem report, rather than treatin
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.
+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.
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.
@@ -83,7 +83,7 @@ Consider these factors when submitting PRs about ports or other software that is
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.
+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.
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:
@@ -110,13 +110,13 @@ You should therefore check all the obvious places before submitting your problem
For FreeBSD, this means:
* 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].
-* 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.
+* 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.
* 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.
* 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.
* Most importantly, attempt to see if existing documentation in the source base addresses your problem.
+
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).
+(This is vital information if you are upgrading from one version to another, especially if you are upgrading to the FreeBSD-CURRENT branch).
+
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.
@@ -132,7 +132,9 @@ Before we get into the mechanics of the program used to generate and submit PRs,
* _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.
* _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.)
-* _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.
+* _If you have a patch, say so._
+The presence of a patch makes it much easier to progress a report.
+** Do not use the `patch` or `patch-ready` keywords – they are deprecated.
* _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.
* _Be specific._ The more information you supply about what problem you are having, the better your chance of getting a response.
@@ -186,7 +188,7 @@ If you attach a patch inline, instead of as an attachment, note that the most co
Do not send patches as attachments using `Content-Transfer-Encoding: quoted-printable`.
These will perform character escaping and the entire patch will be useless.
-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.
+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.
@@ -250,8 +252,8 @@ You have a common PC-based machine, and think you have encountered a problem spe
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.
====
** 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.
-* _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.
-* __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.
+* _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.
+* _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.
[[pr-followup]]
== Follow-up
@@ -273,7 +275,7 @@ When a problem report has not received attention after several weeks, it is wort
There are a few ways to do so, ideally in the following order, with a few days between attempting each communication channel:
* Send an e-mail to extref:{handbook}eresources/[the relevant list, eresources-summary] seeking comments on the report.
-* 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.
+* Join the relevant IRC channels. A partial listing is here: https://wiki.freebsd.org/IRC/Channels[]. 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.
* 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.
Remember that these people are volunteers, just like maintainers and users, so they might not be immediately available to assist with the problem report.
@@ -292,5 +294,5 @@ If you are unable to do so, contact the bug wranglers at mailto:bugmeister@Free
This is a list of resources relevant to the proper writing and processing of problem reports.
It is by no means complete.
-* 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.
-* extref:{pr-guidelines}[Problem Report Handling Guidelines]-valuable insight into how problem reports are handled by the FreeBSD developers.
+* 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.
+* extref:{pr-guidelines}[Problem Report Handling Guidelines]: Valuable insight into how problem reports are handled by the FreeBSD developers.
diff --git a/documentation/content/en/articles/problem-reports/_index.po b/documentation/content/en/articles/problem-reports/_index.po
new file mode 100644
index 0000000000..ccfa3691f2
--- /dev/null
+++ b/documentation/content/en/articles/problem-reports/_index.po
@@ -0,0 +1,1000 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-09-09 18:13-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:44
+msgid "Abstract"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:66
+#, no-wrap
+msgid "When to Submit a Problem Report"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:105
+#, no-wrap
+msgid "Preparations"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:125
+#, no-wrap
+msgid "Writing the Problem Report"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:131
+#, no-wrap
+msgid "Tips and Tricks for Writing a Good Problem Report"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:147
+msgid ""
+"your kernel configuration (including which hardware devices you have "
+"installed)"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:156
+msgid "which ports you have installed"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:166
+#, no-wrap
+msgid "Before Beginning"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:174
+#, no-wrap
+msgid "Attaching Patches or Files"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:199
+#, no-wrap
+msgid "Filling out the Form"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:213
+msgid "_Category:_ Choose an appropriate category."
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:220
+msgid "Here is a description of the major categories:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:232
+msgid "There are a few more specialized categories."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Block title
+#: documentation/content/en/articles/problem-reports/_index.adoc:243
+#, no-wrap
+msgid "Correct Use of Arch-Specific Category"
+msgstr ""
+
+#. 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 ""
+
+#. type: Block title
+#: documentation/content/en/articles/problem-reports/_index.adoc:249
+#, no-wrap
+msgid "Incorrect Use of Arch-Specific Category"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:259
+#, no-wrap
+msgid "Follow-up"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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/IRC/Channels[]. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:286
+#, no-wrap
+msgid "If There Are Problems"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:292
+#, no-wrap
+msgid "Further Reading"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
diff --git a/documentation/content/en/articles/rc-scripting/_index.adoc b/documentation/content/en/articles/rc-scripting/_index.adoc
index bc939aec04..cdfa656e53 100644
--- a/documentation/content/en/articles/rc-scripting/_index.adoc
+++ b/documentation/content/en/articles/rc-scripting/_index.adoc
@@ -92,7 +92,7 @@ Finally, an important part of the [.filename]#rc.d# framework is man:rcorder[8],
It can help [.filename]#/etc/rc.shutdown#, too, because the proper order for the shutdown sequence is opposite to that of startup.
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.
+However, it might not appear obvious to an [.filename]#rc.d# newbie how to tie the numerous bits and pieces together 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.
@@ -100,7 +100,7 @@ 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.
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#.
+First of all, you should be familiar with the man:sh[1] scripting language 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].
This article focuses on the FreeBSD branch of [.filename]#rc.d#.
@@ -110,7 +110,7 @@ Nevertheless, it may be useful to NetBSD developers, too, because the two branch
== Outlining the task
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:
+To write a well-tempered [.filename]#rc.d# script for a system service, we should be able to answer the following questions first:
* Is the service mandatory or optional?
* Will the script serve a single program, e.g., a daemon, or perform more complex actions?
@@ -157,7 +157,7 @@ For example, a system admin can run our script manually, from the command line:
[NOTE]
====
-In order to be properly managed by the [.filename]#rc.d# framework, its scripts need to be written in the man:sh[1] language.
+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.
====
@@ -586,7 +586,7 @@ However, man:rc.subr[8] can be instructed from the command line to ignore those
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/etc/rc.d# through the [.filename]#Makefile# found there.
+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].
However, we should consider beforehand the place of our script in the system startup sequence.
diff --git a/documentation/content/en/articles/rc-scripting/_index.po b/documentation/content/en/articles/rc-scripting/_index.po
new file mode 100644
index 0000000000..f90baeddb2
--- /dev/null
+++ b/documentation/content/en/articles/rc-scripting/_index.po
@@ -0,0 +1,1620 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-05-21 14:43-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:45
+msgid "Abstract"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 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 ""
+
+#. 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 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:110
+#, no-wrap
+msgid "Outlining the task"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:114
+msgid ""
+"A little consideration before starting `$EDITOR` will not hurt. To write a "
+"well-tempered [.filename]#rc.d# script for a system service, we should be "
+"able to answer the following questions first:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:116
+msgid "Is the service mandatory or optional?"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:122
+#, no-wrap
+msgid "A dummy script"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:129
+#, no-wrap
+msgid "#!/bin/sh <.>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:131
+#, no-wrap
+msgid ". /etc/rc.subr <.>\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:146
+msgid "Things to note are:"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:156
+#, no-wrap
+msgid "# /etc/rc.d/dummy start\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:162
+msgid ""
+"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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:227
+#, no-wrap
+msgid "A configurable dummy script"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:246
+#, no-wrap
+msgid ""
+"name=dummy\n"
+"rcvar=dummy_enable <.>\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:260
+#, no-wrap
+msgid "run_rc_command \"$1\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:263
+msgid "What changed in this example?"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:290
+#, no-wrap
+msgid "# /etc/rc.d/dummy onestart\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:318
+#, no-wrap
+msgid "start_cmd=\"echo \\\"$dummy_msg\\\"\"\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:321
+#, no-wrap
+msgid "Startup and shutdown of a simple daemon"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:339
+#, no-wrap
+msgid "command=\"/usr/sbin/${name}\" <.>\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:380
+#, no-wrap
+msgid "Startup and shutdown of an advanced daemon"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:399
+#, no-wrap
+msgid "pidfile=\"/var/run/${name}.pid\" <.>\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:403
+#, no-wrap
+msgid "sig_reload=\"USR1\" <.>\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:408
+#, no-wrap
+msgid "extra_commands=\"reload plugh xyzzy\" <.>\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:549
+msgid "The following is the correct usage of `checkyesno`:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:584
+#, no-wrap
+msgid "Connecting a script to the rc.d framework"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:605
+msgid "the names of the \"conditions\" it __requires__;"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:649
+msgid "As before, detailed analysis follows:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/rc-scripting/_index.adoc:688
+#, no-wrap
+msgid "nojail"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/rc-scripting/_index.adoc:691
+#, no-wrap
+msgid "nostart"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/rc-scripting/_index.adoc:695
+#, no-wrap
+msgid "shutdown"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:724
+#, no-wrap
+msgid "Giving more flexibility to an rc.d script"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:791
+msgid "What essential changes can we notice in the script?"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:835
+#, no-wrap
+msgid "Further reading"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
diff --git a/documentation/content/en/articles/releng/_index.adoc b/documentation/content/en/articles/releng/_index.adoc
index aea32e4591..9a48f7ee22 100644
--- a/documentation/content/en/articles/releng/_index.adoc
+++ b/documentation/content/en/articles/releng/_index.adoc
@@ -4,7 +4,7 @@ authors:
- author: Murray Stokely
email: murray@FreeBSD.org
webpage: https://people.FreeBSD.org/~murray/
-description: This paper describes the approach used by past the FreeBSD release engineering team to make production quality releases of the FreeBSD Operating System
+description: This paper describes the approach previously used by the FreeBSD release engineering team to make production quality releases of the FreeBSD Operating System
trademarks: ["freebsd", "intel", "general"]
tags: ["Release", "Engineering", "Historical", "FreeBSD"]
---
@@ -64,7 +64,7 @@ The development of FreeBSD is a very open process.
FreeBSD is comprised of contributions from thousands of people around the world.
The FreeBSD Project provides Subversion footnote:[Subversion, http://subversion.apache.org] access to the general public so that others can have access to log messages, diffs (patches) between development branches, and other productivity enhancements that formal source code management provides.
This has been a huge help in attracting more talented developers to FreeBSD.
-However, I think everyone would agree that chaos would soon manifest if write access to the main repository was opened up to everyone on the Internet.
+However, I think everyone would agree that chaos would soon manifest if write access to the main repository was opened up to everyone on the Internet.
Therefore only a "select" group of nearly 300 people are given write access to the Subversion repository.
These extref:{contributors}[FreeBSD committers, staff-committers]footnote:[extref:{contributors}[FreeBSD committers, staff-committers]] are usually the people who do the bulk of FreeBSD development.
An elected link:https://www.FreeBSD.org/administration/#t-core[Core Team]footnote:[link:https://www.FreeBSD.org/administration/#t-core[FreeBSD Core Team]] of developers provide some level of direction over the project.
@@ -85,11 +85,11 @@ This means that a user application compiled on an older version of the system fr
The ABI stability has improved greatly from the compared to previous releases.
In most cases, binaries from the older _STABLE_ systems run unmodified on newer systems, including __HEAD__, assuming that the system management interfaces are not used.
-In the interim period between releases, weekly snapshots are built automatically by the FreeBSD Project build machines and made available for download from `ftp://ftp.FreeBSD.org/pub/FreeBSD/snapshots/`.
+In the interim period between releases, weekly snapshots are built automatically by the FreeBSD Project build machines and made available for download from `https:/download.FreeBSD.org/snapshots/`.
The widespread availability of binary release snapshots, and the tendency of our user community to keep up with -STABLE development with Subversion and "`make buildworld`" footnote:[extref:{handbook}[Rebuilding world, makeworld]] helps to keep FreeBSD-STABLE in a very reliable condition even before the quality assurance activities ramp up pending a major release.
In addition to installation ISO snapshots, weekly virtual machine images are also provided for use with VirtualBox, qemu, or other popular emulation software.
-The virtual machine images can be downloaded from `ftp://ftp.FreeBSD.org/pub/FreeBSD/snapshots/VM-IMAGES/`.
+The virtual machine images can be downloaded from `https://download.FreeBSD.org/snapshots/VM-IMAGES/`.
The virtual machine images are approximately 150MB man:xz[1] compressed, and contain a 10GB sparse filesystem when attached to a virtual machine.
@@ -263,7 +263,7 @@ When the final release is ready, the following command will create the `release/
The Documentation and Ports managers are responsible for tagging their respective trees with the `tags/RELEASE_9_2_0` tag.
When the Subversion `svn cp` command is used to create a __release tag__, this identifies the source at a specific point in time.
-By creating tags, we ensure that future release builders will always be able to use the exact same source we used to create the official FreeBSD Project releases.
+By creating tags, we ensure that future release builders will always be able to use the same source we used to create the official FreeBSD Project releases.
[[release-build]]
== Release Building
@@ -323,7 +323,7 @@ The `{portmgr}` is responsible for maintaining a consistent ports tree that can
=== Release ISOs
Starting with FreeBSD 4.4, the FreeBSD Project decided to release all four ISO images that were previously sold on the _BSDi/Wind River Systems/FreeBSD Mall_ "official" CDROM distributions.
-Each of the four discs must contain a [.filename]#README.TXT# file that explains the contents of the disc, a [.filename]#CDROM.INF# file that provides meta-data for the disc so that man:bsdinstall[8] can validate and use the contents, and a [.filename]#filename.txt# file that provides a manifest for the disc.
+Each of the four discs must contain a [.filename]#README.TXT# file that explains the contents of the disc, a [.filename]#CDROM.INF# file that provides meta-data for the disc so that man:bsdinstall[8] can validate and use the contents, and a [.filename]#filename.txt# file that provides a manifest for the disc.
This _manifest_ can be created with a simple command:
[source,shell]
@@ -355,7 +355,7 @@ This disc should be bootable and should also contain a compressed copy of the CV
Sysinstall supports multiple volume package installations.
This requires that each disc have an [.filename]#INDEX# file containing all of the packages on all volumes of a set, along with an extra field that indicates which volume that particular package is on.
-Each volume in the set must also have the `CD_VOLUME` variable set in the [.filename]#cdrom.inf# file so that bsdinstall can tell which volume is which.
+Each volume in the set must also have the `CD_VOLUME` variable set in the [.filename]#cdrom.inf# file so that bsdinstall can tell which volume is which.
When a user attempts to install a package that is not on the current disc, bsdinstall will prompt the user to insert the appropriate one.
[[distribution]]
@@ -403,7 +403,7 @@ Coming soon: Tips for sending FreeBSD ISOs to a replicator and quality assurance
[[extensibility]]
== Extensibility
-Although FreeBSD forms a complete operating system, there is nothing that forces you to use the system exactly as we have packaged it up for distribution.
+Although FreeBSD forms a complete operating system, there is nothing that forces you to use the system exactly as we have packaged it up for distribution.
We have tried to design the system to be as extensible as possible so that it can serve as a platform that other commercial products can be built on top of.
The only "rule" we have about this is that if you are going to distribute FreeBSD with non-trivial changes, we encourage you to document your enhancements!
The FreeBSD community can only help support users of the software we provide.
@@ -424,7 +424,7 @@ The security officer was very involved in the last week of the process as severa
A total of over _500_ emails were sent to the `{re}` in little over a month.
Our user community has made it very clear that the security and stability of a FreeBSD release should not be sacrificed for any self-imposed deadlines or target release dates.
-The FreeBSD Project has grown tremendously over its lifetime and the need for standardized release engineering procedures has never been more apparent.
+The FreeBSD Project has grown tremendously over its lifetime and the need for standardized release engineering procedures has never been more apparent.
This will become even more important as FreeBSD is ported to new platforms.
[[future]]
diff --git a/documentation/content/en/articles/releng/_index.po b/documentation/content/en/articles/releng/_index.po
new file mode 100644
index 0000000000..01474b48ba
--- /dev/null
+++ b/documentation/content/en/articles/releng/_index.po
@@ -0,0 +1,1253 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/releng/_index.adoc:1
+#, no-wrap
+msgid "This paper describes the approach previously used by the FreeBSD release engineering team to make production quality releases of the FreeBSD Operating System"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/articles/releng/_index.adoc:1
+#, no-wrap
+msgid "Legacy FreeBSD Release Engineering"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/articles/releng/_index.adoc:12
+#, no-wrap
+msgid "FreeBSD Release Engineering"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:45
+msgid "Abstract"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/releng/_index.adoc:51
+msgid ""
+"This document is outdated and does not accurately describe the current "
+"release procedures of the FreeBSD Release Engineering team. It is retained "
+"for historical purposes. The current procedures used by the FreeBSD Release "
+"Engineering team are available in the extref:{freebsd-releng}[FreeBSD "
+"Release Engineering] article."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:55
+msgid ""
+"This paper describes the approach used by the FreeBSD release engineering "
+"team to make production quality releases of the FreeBSD Operating System. "
+"It details the methodology used for the official FreeBSD releases and "
+"describes the tools available for those interested in producing customized "
+"FreeBSD releases for corporate rollouts or commercial productization."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:57
+msgid "'''"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/releng/_index.adoc:61
+#, no-wrap
+msgid "Introduction"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:71
+msgid ""
+"The development of FreeBSD is a very open process. FreeBSD is comprised of "
+"contributions from thousands of people around the world. The FreeBSD "
+"Project provides Subversion footnote:[Subversion, http://subversion.apache."
+"org] access to the general public so that others can have access to log "
+"messages, diffs (patches) between development branches, and other "
+"productivity enhancements that formal source code management provides. This "
+"has been a huge help in attracting more talented developers to FreeBSD. "
+"However, I think everyone would agree that chaos would soon manifest if "
+"write access to the main repository was opened up to everyone on the "
+"Internet. Therefore only a \"select\" group of nearly 300 people are given "
+"write access to the Subversion repository. These extref:{contributors}"
+"[FreeBSD committers, staff-committers]footnote:[extref:{contributors}"
+"[FreeBSD committers, staff-committers]] are usually the people who do the "
+"bulk of FreeBSD development. An elected link:https://www.FreeBSD.org/"
+"administration/#t-core[Core Team]footnote:[link:https://www.FreeBSD.org/"
+"administration/#t-core[FreeBSD Core Team]] of developers provide some level "
+"of direction over the project."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:76
+msgid ""
+"The rapid pace of `FreeBSD` development makes the main development branch "
+"unsuitable for the everyday use by the general public. In particular, "
+"stabilizing efforts are required for polishing the development system into a "
+"production quality release. To solve this conflict, development continues "
+"on several parallel tracks. The main development branch is the _HEAD_ or "
+"_trunk_ of our Subversion tree, known as \"FreeBSD-CURRENT\" or \"-CURRENT\" "
+"for short."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:82
+msgid ""
+"A set of more stable branches are maintained, known as \"FreeBSD-STABLE\" or "
+"\"-STABLE\" for short. All branches live in a master Subversion repository "
+"maintained by the FreeBSD Project. FreeBSD-CURRENT is the \"bleeding-edge\" "
+"of FreeBSD development where all new changes first enter the system. "
+"FreeBSD-STABLE is the development branch from which major releases are "
+"made. Changes go into this branch at a different pace, and with the general "
+"assumption that they have first gone into FreeBSD-CURRENT and have been "
+"thoroughly tested by our user community."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:87
+msgid ""
+"The term _stable_ in the name of the branch refers to the presumed "
+"Application Binary Interface stability, which is promised by the project. "
+"This means that a user application compiled on an older version of the "
+"system from the same branch works on a newer system from the same branch. "
+"The ABI stability has improved greatly from the compared to previous "
+"releases. In most cases, binaries from the older _STABLE_ systems run "
+"unmodified on newer systems, including __HEAD__, assuming that the system "
+"management interfaces are not used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:90
+msgid ""
+"In the interim period between releases, weekly snapshots are built "
+"automatically by the FreeBSD Project build machines and made available for "
+"download from `https:/download.FreeBSD.org/snapshots/`. The widespread "
+"availability of binary release snapshots, and the tendency of our user "
+"community to keep up with -STABLE development with Subversion and \"`make "
+"buildworld`\" footnote:[extref:{handbook}[Rebuilding world, makeworld]] "
+"helps to keep FreeBSD-STABLE in a very reliable condition even before the "
+"quality assurance activities ramp up pending a major release."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:93
+msgid ""
+"In addition to installation ISO snapshots, weekly virtual machine images are "
+"also provided for use with VirtualBox, qemu, or other popular emulation "
+"software. The virtual machine images can be downloaded from `https://"
+"download.FreeBSD.org/snapshots/VM-IMAGES/`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:95
+msgid ""
+"The virtual machine images are approximately 150MB man:xz[1] compressed, and "
+"contain a 10GB sparse filesystem when attached to a virtual machine."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:98
+msgid ""
+"Bug reports and feature requests are continuously submitted by users "
+"throughout the release cycle. Problems reports are entered into our "
+"Bugzilla database through the web interface provided at https://www.freebsd."
+"org/support/bugreports/[https://www.freebsd.org/support/bugreports/]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:103
+msgid ""
+"To service our most conservative users, individual release branches were "
+"introduced with FreeBSD 4.3. These release branches are created shortly "
+"before a final release is made. After the release goes out, only the most "
+"critical security fixes and additions are merged onto the release branch. "
+"In addition to source updates via Subversion, binary patchkits are available "
+"to keep systems on the _releng/X.Y_ branches updated."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/releng/_index.adoc:104
+#, no-wrap
+msgid "What This Article Describes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:107
+msgid "The following sections of this article describe:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/releng/_index.adoc:108
+#, no-wrap
+msgid "<<release-proc>>"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:110
+msgid ""
+"The different phases of the release engineering process leading up to the "
+"actual system build."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/releng/_index.adoc:111
+#, no-wrap
+msgid "<<release-build>>"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:113
+msgid "The actual build process."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/releng/_index.adoc:114
+#, no-wrap
+msgid "<<extensibility>>"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:116
+msgid "How the base release may be extended by third parties."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/releng/_index.adoc:117
+#, no-wrap
+msgid "<<lessons-learned>>"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:119
+msgid "Some of the lessons learned through the release of FreeBSD 4.4."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/releng/_index.adoc:120
+#, no-wrap
+msgid "<<future>>"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:122
+msgid "Future directions of development."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/releng/_index.adoc:124
+#, no-wrap
+msgid "Release Process"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:129
+msgid ""
+"New releases of FreeBSD are released from the -STABLE branch at "
+"approximately four month intervals. The FreeBSD release process begins to "
+"ramp up 70-80 days before the anticipated release date when the release "
+"engineer sends an email to the development mailing lists to remind "
+"developers that they only have 15 days to integrate new changes before the "
+"code freeze. During this time, many developers perform what have become "
+"known as \"MFC sweeps\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:133
+msgid ""
+"MFC stands for \"Merge From CURRENT\" and it describes the process of "
+"merging a tested change from our -CURRENT development branch to our -STABLE "
+"branch. Project policy requires any change to be first applied to trunk, "
+"and merged to the -STABLE branches after sufficient external testing was "
+"done by -CURRENT users (developers are expected to extensively test the "
+"change before committing to -CURRENT, but it is impossible for a person to "
+"exercise all usages of the general-purpose operating system). Minimal MFC "
+"period is 3 days, which is typically used only for trivial or critical "
+"bugfixes."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/releng/_index.adoc:134
+#, no-wrap
+msgid "Code Review"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:140
+msgid ""
+"Sixty days before the anticipated release, the source repository enters a "
+"\"code freeze\". During this time, all commits to the -STABLE branch must "
+"be approved by `{re}`. The approval process is technically enforced by a "
+"pre-commit hook. The kinds of changes that are allowed during this period "
+"include:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:142
+msgid "Bug fixes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:143
+msgid "Documentation updates."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:144
+msgid "Security-related fixes of any kind."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:145
+msgid "Minor changes to device drivers, such as adding new Device IDs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:146
+msgid "Driver updates from the vendors."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:147
+msgid ""
+"Any additional change that the release engineering team feels is justified, "
+"given the potential risk."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:151
+msgid ""
+"Shortly after the code freeze is started, a _BETA1_ image is built and "
+"released for widespread testing. During the code freeze, at least one beta "
+"image or release candidate is released every two weeks until the final "
+"release is ready. During the days preceding the final release, the release "
+"engineering team is in constant communication with the security-officer "
+"team, the documentation maintainers, and the port maintainers to ensure that "
+"all of the different components required for a successful release are "
+"available."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:154
+msgid ""
+"After the quality of the BETA images is satisfying enough, and no large and "
+"potentially risky changes are planned, the release branch is created and "
+"_Release Candidate_ (RC) images are built from the release branch, instead "
+"of the BETA images from the STABLE branch. Also, the freeze on the STABLE "
+"branch is lifted and release branch enters a \"hard code freeze\" where it "
+"becomes much harder to justify new changes to the system unless a serious "
+"bug-fix or security issue is involved."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/releng/_index.adoc:155
+#, no-wrap
+msgid "Final Release Checklist"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:158
+msgid ""
+"When several BETA images have been made available for widespread testing and "
+"all major issues have been resolved, the final release \"polishing\" can "
+"begin."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/releng/_index.adoc:160
+#, no-wrap
+msgid "Creating the Release Branch"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/releng/_index.adoc:165
+msgid ""
+"In all examples below, `$FSVN` refers to the location of the FreeBSD "
+"Subversion repository, `svn+ssh://svn.FreeBSD.org/base/`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:169
+msgid ""
+"The layout of FreeBSD branches in Subversion is described in the extref:"
+"{committers-guide}[Committer's Guide, subversion-primer-base-layout]. The "
+"first step in creating a branch is to identify the revision of the `stable/"
+"_X_` sources that you want to branch _from_."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/releng/_index.adoc:173
+#, no-wrap
+msgid "# svn log -v $FSVN/stable/9\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:176
+msgid "The next step is to create the _release branch_"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/releng/_index.adoc:180
+#, no-wrap
+msgid "# svn cp $FSVN/stable/9@REVISION $FSVN/releng/9.2\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:183
+msgid "This branch can be checked out:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/releng/_index.adoc:187
+#, no-wrap
+msgid "# svn co $FSVN/releng/9.2 src\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/releng/_index.adoc:192
+msgid ""
+"Creating the `releng` branch and `release` tags is done by the link:https://"
+"www.FreeBSD.org/administration/#t-re[Release Engineering Team]."
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/articles/releng/_index.adoc:194
+#, no-wrap
+msgid "FreeBSD Development Branch"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/articles/releng/_index.adoc:194
+#, no-wrap
+msgid "branches-head.png"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/articles/releng/_index.adoc:196
+#, no-wrap
+msgid "FreeBSD 3.x STABLE Branch"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/articles/releng/_index.adoc:196
+#, no-wrap
+msgid "branches-releng3.png"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/articles/releng/_index.adoc:198
+#, no-wrap
+msgid "FreeBSD 4.x STABLE Branch"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/articles/releng/_index.adoc:198
+#, no-wrap
+msgid "branches-releng4.png"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/articles/releng/_index.adoc:200
+#, no-wrap
+msgid "FreeBSD 5.x STABLE Branch"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/articles/releng/_index.adoc:200
+#, no-wrap
+msgid "branches-releng5.png"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/articles/releng/_index.adoc:202
+#, no-wrap
+msgid "FreeBSD 6.x STABLE Branch"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/articles/releng/_index.adoc:202
+#, no-wrap
+msgid "branches-releng6.png"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/articles/releng/_index.adoc:204
+#, no-wrap
+msgid "FreeBSD 7.x STABLE Branch"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/articles/releng/_index.adoc:204
+#, no-wrap
+msgid "branches-releng7.png"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/articles/releng/_index.adoc:206
+#, no-wrap
+msgid "FreeBSD 8.x STABLE Branch"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/articles/releng/_index.adoc:206
+#, no-wrap
+msgid "branches-releng8.png"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/articles/releng/_index.adoc:208
+#, no-wrap
+msgid "FreeBSD 9.x STABLE Branch"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/articles/releng/_index.adoc:208
+#, no-wrap
+msgid "branches-releng9.png"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/releng/_index.adoc:211
+#, no-wrap
+msgid "Bumping up the Version Number"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:214
+msgid ""
+"Before the final release can be tagged, built, and released, the following "
+"files need to be modified to reflect the correct version of FreeBSD:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:216
+msgid "[.filename]#doc/en_US.ISO8859-1/books/handbook/mirrors/chapter.xml#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:217
+msgid "[.filename]#doc/en_US.ISO8859-1/books/porters-handbook/book.xml#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:218
+msgid "[.filename]#doc/en_US.ISO8859-1/htdocs/cgi/ports.cgi#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:219
+msgid "[.filename]#ports/Tools/scripts/release/config#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:220
+msgid "[.filename]#doc/shared/xml/freebsd.ent#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:221
+msgid "[.filename]#src/Makefile.inc1#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:222
+msgid "[.filename]#src/UPDATING#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:223
+msgid "[.filename]#src/gnu/usr.bin/groff/tmac/mdoc.local#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:224
+msgid "[.filename]#src/release/Makefile#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:225
+msgid "[.filename]#src/release/doc/en_US.ISO8859-1/shared/xml/release.dsl#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:226
+msgid "[.filename]#src/release/doc/shared/examples/Makefile.relnotesng#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:227
+msgid "[.filename]#src/release/doc/shared/xml/release.ent#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:228
+msgid "[.filename]#src/sys/conf/newvers.sh#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:229
+msgid "[.filename]#src/sys/sys/param.h#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:230
+msgid "[.filename]#src/usr.sbin/pkg_install/add/main.c#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:231
+msgid "[.filename]#doc/en_US.ISO8859-1/htdocs/search/opensearch/man.xml#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:233
+msgid ""
+"The release notes and errata files also need to be adjusted for the new "
+"release (on the release branch) and truncated appropriately (on the stable/"
+"current branch):"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:235
+msgid "[.filename]#src/release/doc/en_US.ISO8859-1/relnotes/common/new.xml#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:236
+msgid "[.filename]#src/release/doc/en_US.ISO8859-1/errata/article.xml#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:240
+msgid ""
+"Sysinstall should be updated to note the number of available ports and the "
+"amount of disk space required for the Ports Collection. footnote:[FreeBSD "
+"Ports Collection https://www.FreeBSD.org/ports] This information is "
+"currently kept in [.filename]#src/usr.sbin/bsdinstall/dist.c#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:243
+msgid ""
+"After the release has been built, a number of files should be updated to "
+"announce the release to the world. These files are relative to `head/` "
+"within the `doc/` subversion tree."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:245
+msgid "[.filename]#share/images/articles/releng/branches-relengX.pic#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:246
+msgid "[.filename]#head/shared/xml/release.ent#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:247
+msgid "[.filename]#en_US.ISO8859-1/htdocs/releases/*#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:248
+msgid "[.filename]#en_US.ISO8859-1/htdocs/releng/index.xml#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:249
+msgid "[.filename]#share/xml/news.xml#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:251
+msgid "Additionally, update the \"BSD Family Tree\" file:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:253
+msgid "[.filename]#src/shared/misc/bsd-family-tree#"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/releng/_index.adoc:254
+#, no-wrap
+msgid "Creating the Release Tag"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:257
+msgid ""
+"When the final release is ready, the following command will create the "
+"`release/9.2.0` tag."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/releng/_index.adoc:261
+#, no-wrap
+msgid "# svn cp $FSVN/releng/9.2 $FSVN/release/9.2.0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:264
+msgid ""
+"The Documentation and Ports managers are responsible for tagging their "
+"respective trees with the `tags/RELEASE_9_2_0` tag."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:267
+msgid ""
+"When the Subversion `svn cp` command is used to create a __release tag__, "
+"this identifies the source at a specific point in time. By creating tags, "
+"we ensure that future release builders will always be able to use the same "
+"source we used to create the official FreeBSD Project releases."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/releng/_index.adoc:269
+#, no-wrap
+msgid "Release Building"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:280
+msgid ""
+"FreeBSD \"releases\" can be built by anyone with a fast machine and access "
+"to a source repository. (That should be everyone, since we offer Subversion "
+"access! See the extref:{handbook}[Subversion section in the Handbook, svn] "
+"for details.) The _only_ special requirement is that the man:md[4] device "
+"must be available. If the device is not loaded into your kernel, then the "
+"kernel module should be automatically loaded when man:mdconfig[8] is "
+"executed during the boot media creation phase. All of the tools necessary "
+"to build a release are available from the Subversion repository in [."
+"filename]#src/release#. These tools aim to provide a consistent way to "
+"build FreeBSD releases. A complete release can actually be built with only "
+"a single command, including the creation of ISO images suitable for burning "
+"to CDROM or DVD, and an FTP install directory. man:release[7] fully "
+"documents the `src/release/generate-release.sh` script which is used to "
+"build a release. `generate-release.sh` is a wrapper around the Makefile "
+"target: `make release`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/releng/_index.adoc:281
+#, no-wrap
+msgid "Building a Release"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:285
+msgid ""
+"man:release[7] documents the exact commands required to build a FreeBSD "
+"release. The following sequences of commands can build an 9.2.0 release:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/releng/_index.adoc:290
+#, no-wrap
+msgid ""
+"# cd /usr/src/release\n"
+"# sh generate-release.sh release/9.2.0 /local3/release\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:293
+msgid ""
+"After running these commands, all prepared release files are available in [."
+"filename]#/local3/release/R# directory."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:295
+msgid ""
+"The release [.filename]#Makefile# can be broken down into several distinct "
+"steps."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:297
+msgid ""
+"Creation of a sanitized system environment in a separate directory hierarchy "
+"with \"`make installworld`\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:298
+msgid ""
+"Checkout from Subversion of a clean version of the system source, "
+"documentation, and ports into the release build hierarchy."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:299
+msgid ""
+"Population of [.filename]#/etc# and [.filename]#/dev# in the chrooted "
+"environment."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:300
+msgid ""
+"chroot into the release build hierarchy, to make it harder for the outside "
+"environment to taint this build."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:301
+msgid "`make world` in the chrooted environment."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:302
+msgid "Build of Kerberos-related binaries."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:303
+msgid "Build [.filename]#GENERIC# kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:304
+msgid ""
+"Creation of a staging directory tree where the binary distributions will be "
+"built and packaged."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:305
+msgid ""
+"Build and installation of the documentation toolchain needed to convert the "
+"documentation source (SGML) into HTML and text documents that will accompany "
+"the release."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:306
+msgid ""
+"Build and installation of the actual documentation (user manuals, tutorials, "
+"release notes, hardware compatibility lists, and so on.)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:307
+msgid "Package up distribution tarballs of the binaries and sources."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:308
+msgid "Create FTP installation hierarchy."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:309
+msgid "_(optionally)_ Create ISO images for CDROM/DVD media."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:311
+msgid ""
+"For more information about the release build infrastructure, please see man:"
+"release[7]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/releng/_index.adoc:316
+msgid ""
+"It is important to remove any site-specific settings from [.filename]#/etc/"
+"make.conf#. For example, it would be unwise to distribute binaries that "
+"were built on a system with `CPUTYPE` set to a specific processor."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/releng/_index.adoc:318
+#, no-wrap
+msgid "Contributed Software (\"ports\")"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:322
+msgid ""
+"The https://www.FreeBSD.org/ports[FreeBSD Ports collection] is a collection "
+"of over {numports} third-party software packages available for FreeBSD. The "
+"`{portmgr}` is responsible for maintaining a consistent ports tree that can "
+"be used to create the binary packages that accompany official FreeBSD "
+"releases."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/releng/_index.adoc:323
+#, no-wrap
+msgid "Release ISOs"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:328
+msgid ""
+"Starting with FreeBSD 4.4, the FreeBSD Project decided to release all four "
+"ISO images that were previously sold on the _BSDi/Wind River Systems/FreeBSD "
+"Mall_ \"official\" CDROM distributions. Each of the four discs must contain "
+"a [.filename]#README.TXT# file that explains the contents of the disc, a [."
+"filename]#CDROM.INF# file that provides meta-data for the disc so that man:"
+"bsdinstall[8] can validate and use the contents, and a [.filename]#filename."
+"txt# file that provides a manifest for the disc. This _manifest_ can be "
+"created with a simple command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/releng/_index.adoc:332
+#, no-wrap
+msgid "/stage/cdrom# find . -type f | sed -e 's/^\\.\\///' | sort > filename.txt\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:335
+msgid "The specific requirements of each CD are outlined below."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/releng/_index.adoc:336
+#, no-wrap
+msgid "Disc 1"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:342
+msgid ""
+"The first disc is almost completely created by `make release`. The only "
+"changes that should be made to the [.filename]#disc1# directory are the "
+"addition of a [.filename]#tools# directory, and as many popular third party "
+"software packages as will fit on the disc. The [.filename]#tools# directory "
+"contains software that allow users to create installation floppies from "
+"other operating systems. This disc should be made bootable so that users of "
+"modern PCs do not need to create installation floppy disks."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:347
+msgid ""
+"If a custom kernel of FreeBSD is to be included, then man:bsdinstall[8] and "
+"man:release[7] must be updated to include installation instructions. The "
+"relevant code is contained in [.filename]#src/release# and [.filename]#src/"
+"usr.sbin/bsdinstall#. Specifically, the file [.filename]#src/release/"
+"Makefile#, and [.filename]#dist.c#, [.filename]#dist.h#, [.filename]#menus."
+"c#, [.filename]#install.c#, and [.filename]#Makefile# will need to be "
+"updated under [.filename]#src/usr.sbin/bsdinstall#. Optionally, you may "
+"choose to update [.filename]#bsdinstall.8#."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/releng/_index.adoc:348
+#, no-wrap
+msgid "Disc 2"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:353
+msgid ""
+"The second disc is also largely created by `make release`. This disc "
+"contains a \"live filesystem\" that can be used from man:bsdinstall[8] to "
+"troubleshoot a FreeBSD installation. This disc should be bootable and "
+"should also contain a compressed copy of the CVS repository in the [."
+"filename]#CVSROOT# directory and commercial software demos in the [."
+"filename]#commerce# directory."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/releng/_index.adoc:354
+#, no-wrap
+msgid "Multi-volume Support"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:360
+msgid ""
+"Sysinstall supports multiple volume package installations. This requires "
+"that each disc have an [.filename]#INDEX# file containing all of the "
+"packages on all volumes of a set, along with an extra field that indicates "
+"which volume that particular package is on. Each volume in the set must "
+"also have the `CD_VOLUME` variable set in the [.filename]#cdrom.inf# file so "
+"that bsdinstall can tell which volume is which. When a user attempts to "
+"install a package that is not on the current disc, bsdinstall will prompt "
+"the user to insert the appropriate one."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/releng/_index.adoc:362
+#, no-wrap
+msgid "Distribution"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/releng/_index.adoc:365
+#, no-wrap
+msgid "FTP Sites"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:371
+msgid ""
+"When the release has been thoroughly tested and packaged for distribution, "
+"the master FTP site must be updated. The official FreeBSD public FTP sites "
+"are all mirrors of a master server that is open only to other FTP sites. "
+"This site is known as `ftp-master`. When the release is ready, the "
+"following files must be modified on `ftp-master`:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/releng/_index.adoc:372
+#, no-wrap
+msgid "[.filename]#/pub/FreeBSD/releases/arch/X.Y-RELEASE/#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:374
+msgid "The installable FTP directory as output from `make release`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/releng/_index.adoc:375
+#, no-wrap
+msgid "[.filename]#/pub/FreeBSD/ports/arch/packages-X.Y-release/#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:377
+msgid "The complete package build for this release."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/releng/_index.adoc:378
+#, no-wrap
+msgid "[.filename]#/pub/FreeBSD/releases/arch/X.Y-RELEASE/tools#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:380
+msgid "A symlink to [.filename]#../../../tools#."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/releng/_index.adoc:381
+#, no-wrap
+msgid "[.filename]#/pub/FreeBSD/releases/arch/X.Y-RELEASE/packages#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:383
+msgid "A symlink to [.filename]#../../../ports/arch/packages-X.Y-release#."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/releng/_index.adoc:384
+#, no-wrap
+msgid "[.filename]#/pub/FreeBSD/releases/arch/ISO-IMAGES/X.Y/X.Y-RELEASE-arch-*.iso#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:387
+msgid ""
+"The ISO images. The \"*\" is [.filename]#disc1#, [.filename]#disc2#, etc. "
+"Only if there is a [.filename]#disc1# and there is an alternative first "
+"installation CD (for example a stripped-down install with no windowing "
+"system) there may be a [.filename]#mini# as well."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:389
+msgid ""
+"For more information about the distribution mirror architecture of the "
+"FreeBSD FTP sites, please see the extref:{hubs}[Mirroring FreeBSD] article."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:397
+msgid ""
+"It may take many hours to two days after updating `ftp-master` before a "
+"majority of the Tier-1 FTP sites have the new software depending on whether "
+"or not a package set got loaded at the same time. It is imperative that the "
+"release engineers coordinate with the {mirror-announce} before announcing "
+"the general availability of new software on the FTP sites. Ideally the "
+"release package set should be loaded at least four days prior to release "
+"day. The release bits should be loaded between 24 and 48 hours before the "
+"planned release time with \"other\" file permissions turned off. This will "
+"allow the mirror sites to download it but the general public will not be "
+"able to download it from the mirror sites. Mail should be sent to {mirror-"
+"announce} at the time the release bits get posted saying the release has "
+"been staged and giving the time that the mirror sites should begin allowing "
+"access. Be sure to include a time zone with the time, for example make it "
+"relative to GMT."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/releng/_index.adoc:399
+#, no-wrap
+msgid "CD-ROM Replication"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:402
+msgid ""
+"Coming soon: Tips for sending FreeBSD ISOs to a replicator and quality "
+"assurance measures to be taken."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/releng/_index.adoc:404
+#, no-wrap
+msgid "Extensibility"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:411
+msgid ""
+"Although FreeBSD forms a complete operating system, there is nothing that "
+"forces you to use the system exactly as we have packaged it up for "
+"distribution. We have tried to design the system to be as extensible as "
+"possible so that it can serve as a platform that other commercial products "
+"can be built on top of. The only \"rule\" we have about this is that if you "
+"are going to distribute FreeBSD with non-trivial changes, we encourage you "
+"to document your enhancements! The FreeBSD community can only help support "
+"users of the software we provide. We certainly encourage innovation in the "
+"form of advanced installation and administration tools, for example, but we "
+"cannot be expected to answer questions about it."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/releng/_index.adoc:412
+#, no-wrap
+msgid "Scripting `bsdinstall`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:416
+msgid ""
+"The FreeBSD system installation and configuration tool, man:bsdinstall[8], "
+"can be scripted to provide automated installs for large sites. This "
+"functionality can be used in conjunction with Intel(R) PXE footnote:[extref:"
+"{handbook}[Diskless Operation with PXE, network-diskless]] to bootstrap "
+"systems from the network."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/releng/_index.adoc:418
+#, no-wrap
+msgid "Lessons Learned from FreeBSD 4.4"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:425
+msgid ""
+"The release engineering process for 4.4 formally began on August 1st, 2001. "
+"After that date all commits to the `RELENG_4` branch of FreeBSD had to be "
+"explicitly approved by the `{re}`. The first release candidate for the x86 "
+"architecture was released on August 16, followed by 4 more release "
+"candidates leading up to the final release on September 18th. The security "
+"officer was very involved in the last week of the process as several "
+"security issues were found in the earlier release candidates. A total of "
+"over _500_ emails were sent to the `{re}` in little over a month."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:429
+msgid ""
+"Our user community has made it very clear that the security and stability of "
+"a FreeBSD release should not be sacrificed for any self-imposed deadlines or "
+"target release dates. The FreeBSD Project has grown tremendously over its "
+"lifetime and the need for standardized release engineering procedures has "
+"never been more apparent. This will become even more important as FreeBSD "
+"is ported to new platforms."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/releng/_index.adoc:431
+#, no-wrap
+msgid "Future Directions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:435
+msgid ""
+"It is imperative for our release engineering activities to scale with our "
+"growing userbase. Along these lines we are working very hard to document "
+"the procedures involved in producing FreeBSD releases."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:437
+msgid ""
+"_Parallelism_ - Certain portions of the release build are actually "
+"\"embarrassingly parallel\". Most of the tasks are very I/O intensive, so "
+"having multiple high-speed disk drives is actually more important than using "
+"multiple processors in speeding up the `make release` process. If multiple "
+"disks are used for different hierarchies in the man:chroot[2] environment, "
+"then the CVS checkout of the [.filename]#ports# and [.filename]#doc# trees "
+"can be happening simultaneously as the `make world` on another disk. Using a "
+"RAID solution (hardware or software) can significantly decrease the overall "
+"build time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:438
+msgid ""
+"_Cross-building releases_ - Building IA-64 or Alpha release on x86 hardware? "
+"`make TARGET=ia64 release`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:439
+msgid ""
+"_Regression Testing_ - We need better automated correctness testing for "
+"FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:440
+msgid ""
+"_Installation Tools_ - Our installation program has long since outlived its "
+"intended life span. Several projects are under development to provide a more "
+"advanced installation mechanism. The libh project was one such project that "
+"aimed to provide an intelligent new package framework and GUI installation "
+"program."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/releng/_index.adoc:442
+#, no-wrap
+msgid "Acknowledgements"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/releng/_index.adoc:447
+msgid ""
+"I would like to thank Jordan Hubbard for giving me the opportunity to take "
+"on some of the release engineering responsibilities for FreeBSD 4.4 and also "
+"for all of his work throughout the years making FreeBSD what it is today. "
+"Of course the release would not have been possible without all of the "
+"release-related work done by `{asami}`, `{steve}`, `{bmah}`, `{nik}`, "
+"`{obrien}`, `{kris}`, `{jhb}` and the rest of the FreeBSD development "
+"community. I would also like to thank `{rgrimes}`, `{phk}`, and others who "
+"worked on the release engineering tools in the very early days of FreeBSD. "
+"This article was influenced by release engineering documents from the CSRG "
+"footnote:[Marshall Kirk McKusick, Michael J. Karels, and Keith Bostic: link:"
+"http://docs.FreeBSD.org/44doc/papers/releng.html[The Release Engineering of "
+"4.3BSD]] , the NetBSD Project, footnote:[NetBSD Developer Documentation: "
+"Release Engineering http://www.NetBSD.org/developers/releng/index.html] , "
+"and John Baldwin's proposed release engineering process notes. footnote:"
+"[John Baldwin's FreeBSD Release Engineering Proposal https://people.FreeBSD."
+"org/~jhb/docs/releng.txt]"
+msgstr ""
diff --git a/documentation/content/en/articles/remote-install/_index.adoc b/documentation/content/en/articles/remote-install/_index.adoc
index f1bd16bb37..9efc5e4165 100644
--- a/documentation/content/en/articles/remote-install/_index.adoc
+++ b/documentation/content/en/articles/remote-install/_index.adoc
@@ -70,7 +70,7 @@ The instructions included in this article will benefit those using services prov
[.procedure]
====
-. 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.
+. 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 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.
+
. 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.
. The rest of this article will describe the installation procedure itself, as well as the configuration of the ZFS file system.
@@ -261,7 +261,7 @@ The following example will describe how to create slices and labels, initialize
<.> Write a standard label for each disk including the bootstrap code.
-<.> 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.
+<.> Now, manually edit the label of the given disk. Refer to the man:bsdlabel[8] manual page 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.
<.> Import the recently created label for the second hard drive, so both hard drives will be labeled in the same way.
@@ -297,7 +297,7 @@ Note that this step is very important and if skipped, `sysinstall` will be unabl
====
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.
+This article uses the Minimal distribution to save network traffic, because the system itself will be installed over ftp.
Exit this menu by choosing `Exit`.
[NOTE]
@@ -315,9 +315,9 @@ Exit `sysinstall` when it finishes the installation.
=== Post Installation Steps
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.
+It is necessary to perform some post installation steps to allow FreeBSD to boot in the future and to be able to log in to the system.
-You must now man:chroot[8] into the freshly installed system in order to finish the installation.
+You must now man:chroot[8] into the freshly installed system to finish the installation.
Use the following command:
[source,shell]
diff --git a/documentation/content/en/articles/remote-install/_index.po b/documentation/content/en/articles/remote-install/_index.po
new file mode 100644
index 0000000000..ebd348bd77
--- /dev/null
+++ b/documentation/content/en/articles/remote-install/_index.po
@@ -0,0 +1,779 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-05-21 14:43-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:45
+msgid "Abstract"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/remote-install/_index.adoc:66
+#, no-wrap
+msgid "Introduction"
+msgstr ""
+
+#. 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 ""
+
+#. 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 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/remote-install/_index.adoc:80
+#, no-wrap
+msgid "Requirements"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:83
+msgid "To continue successfully, you must:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:85
+msgid "Have a network accessible operating system with SSH access"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:86
+msgid "Understand the FreeBSD installation process"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:87
+msgid "Be familiar with the man:sysinstall[8] utility"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:88
+msgid "Have the FreeBSD installation SO image or CD handy"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/remote-install/_index.adoc:90
+#, no-wrap
+msgid "Preparation - mfsBSD"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/remote-install/_index.adoc:113
+#, no-wrap
+msgid "Configuration of mfsBSD"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/remote-install/_index.adoc:124
+#, no-wrap
+msgid "The [.filename]#conf/interfaces.conf# method"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:141
+#, no-wrap
+msgid "defaultrouter=\"192.168.0.1\"\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/remote-install/_index.adoc:143
+#, no-wrap
+msgid "The [.filename]#conf/rc.conf# Method"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/remote-install/_index.adoc:157
+#, no-wrap
+msgid "Building an mfsBSD Image"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:160
+msgid "The process of building an mfsBSD image is pretty straightforward."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:181
+msgid "Next, build the bootable mfsBSD image:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:185
+#, no-wrap
+msgid "# make BASE=DIST\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/remote-install/_index.adoc:192
+#, no-wrap
+msgid "Booting mfsBSD"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/remote-install/_index.adoc:215
+#, no-wrap
+msgid "Installation of the FreeBSD Operating System"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/remote-install/_index.adoc:220
+#, no-wrap
+msgid "Preparation of Hard Drives"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:269
+msgid "Initialize man:gmirror[8] on each partition."
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:273
+msgid "Create a UFS2 file system on each mirrored partition."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/remote-install/_index.adoc:274
+#, no-wrap
+msgid "System Installation"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 to save network traffic, because the system itself "
+"will be installed over ftp. Exit this menu by choosing `Exit`."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/remote-install/_index.adoc:315
+#, no-wrap
+msgid "Post Installation Steps"
+msgstr ""
+
+#. 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 to allow FreeBSD to boot in the future and to be able to log in to the "
+"system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:322
+msgid ""
+"You must now man:chroot[8] into the freshly installed system to finish the "
+"installation. Use the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:326
+#, no-wrap
+msgid "# chroot /mnt\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:329
+msgid "To complete our goal, perform these steps:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:331
+msgid "Copy the `GENERIC` kernel to the [.filename]#/boot/kernel# directory:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:335
+#, no-wrap
+msgid "# cp -Rp /boot/GENERIC/* /boot/kernel\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:349
+msgid "Create [.filename]#/boot/loader.conf# with the following contents:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:360
+#, no-wrap
+msgid "# sysrc zfs_enable=\"YES\"\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:364
+msgid "Double-check all your settings."
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/remote-install/_index.adoc:369
+#, no-wrap
+msgid "ZFS"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:383
+msgid "Next, create some file systems:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
diff --git a/documentation/content/en/articles/serial-uart/_index.po b/documentation/content/en/articles/serial-uart/_index.po
new file mode 100644
index 0000000000..62713aaccd
--- /dev/null
+++ b/documentation/content/en/articles/serial-uart/_index.po
@@ -0,0 +1,3064 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 10:28-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/serial-uart/_index.adoc:1
+#, no-wrap
+msgid "Detailed information about the use of serial ports and UART with FreeBSD"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/articles/serial-uart/_index.adoc:1
+#: documentation/content/en/articles/serial-uart/_index.adoc:11
+#, no-wrap
+msgid "Serial and UART Tutorial"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:44
+msgid "Abstract"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:46
+msgid "This article talks about using serial hardware with FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:48
+msgid "'''"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/serial-uart/_index.adoc:52
+#, no-wrap
+msgid "The UART: What it is and how it works"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:55
+msgid "_Copyright (R) 1996 `{uhclem}`, All Rights Reserved. 13 January 1996._"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:59
+msgid ""
+"The Universal Asynchronous Receiver/Transmitter (UART) controller is the key "
+"component of the serial communications subsystem of a computer. The UART "
+"takes bytes of data and transmits the individual bits in a sequential "
+"fashion. At the destination, a second UART re-assembles the bits into "
+"complete bytes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:61
+msgid ""
+"Serial transmission is commonly used with modems and for non-networked "
+"communication between computers, terminals and other devices."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:65
+msgid ""
+"There are two primary forms of serial transmission: Synchronous and "
+"Asynchronous. Depending on the modes that are supported by the hardware, "
+"the name of the communication sub-system will usually include a `A` if it "
+"supports Asynchronous communications, and a `S` if it supports Synchronous "
+"communications. Both forms are described below."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:67
+msgid "Some common acronyms are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:70
+msgid "UART Universal Asynchronous Receiver/Transmitter"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:73
+msgid "USART Universal Synchronous-Asynchronous Receiver/Transmitter"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/serial-uart/_index.adoc:74
+#, no-wrap
+msgid "Synchronous Serial Transmission"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:79
+msgid ""
+"Synchronous serial transmission requires that the sender and receiver share "
+"a clock with one another, or that the sender provide a strobe or other "
+"timing signal so that the receiver knows when to \"read\" the next bit of "
+"the data. In most forms of serial Synchronous communication, if there is no "
+"data available at a given instant to transmit, a fill character must be sent "
+"instead so that data is always being transmitted. Synchronous communication "
+"is usually more efficient because only data bits are transmitted between "
+"sender and receiver, and synchronous communication can be more costly if "
+"extra wiring and circuits are required to share a clock signal between the "
+"sender and receiver."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:83
+msgid ""
+"A form of Synchronous transmission is used with printers and fixed disk "
+"devices in that the data is sent on one set of wires while a clock or strobe "
+"is sent on a different wire. Printers and fixed disk devices are not "
+"normally serial devices because most fixed disk interface standards send an "
+"entire word of data for each clock or strobe signal by using a separate wire "
+"for each bit of the word. In the PC industry, these are known as Parallel "
+"devices."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:86
+msgid ""
+"The standard serial communications hardware in the PC does not support "
+"Synchronous operations. This mode is described here for comparison purposes "
+"only."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/serial-uart/_index.adoc:87
+#, no-wrap
+msgid "Asynchronous Serial Transmission"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:91
+msgid ""
+"Asynchronous transmission allows data to be transmitted without the sender "
+"having to send a clock signal to the receiver. Instead, the sender and "
+"receiver must agree on timing parameters in advance and special bits are "
+"added to each word which are used to synchronize the sending and receiving "
+"units."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:96
+msgid ""
+"When a word is given to the UART for Asynchronous transmissions, a bit "
+"called the \"Start Bit\" is added to the beginning of each word that is to "
+"be transmitted. The Start Bit is used to alert the receiver that a word of "
+"data is about to be sent, and to force the clock in the receiver into "
+"synchronization with the clock in the transmitter. These two clocks must be "
+"accurate enough to not have the frequency drift by more than 10% during the "
+"transmission of the remaining bits in the word. (This requirement was set "
+"in the days of mechanical teleprinters and is easily met by modern "
+"electronic equipment.)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:100
+msgid ""
+"After the Start Bit, the individual bits of the word of data are sent, with "
+"the Least Significant Bit (LSB) being sent first. Each bit in the "
+"transmission is transmitted for exactly the same amount of time as all of "
+"the other bits, and the receiver \"looks\" at the wire at approximately "
+"halfway through the period assigned to each bit to determine if the bit is a "
+"`1` or a `0`. For example, if it takes two seconds to send each bit, the "
+"receiver will examine the signal to determine if it is a `1` or a `0` after "
+"one second has passed, then it will wait two seconds and then examine the "
+"value of the next bit, and so on."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:103
+msgid ""
+"The sender does not know when the receiver has \"looked\" at the value of "
+"the bit. The sender only knows when the clock says to begin transmitting "
+"the next bit of the word."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:107
+msgid ""
+"When the entire data word has been sent, the transmitter may add a Parity "
+"Bit that the transmitter generates. The Parity Bit may be used by the "
+"receiver to perform simple error checking. Then at least one Stop Bit is "
+"sent by the transmitter."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:111
+msgid ""
+"When the receiver has received all of the bits in the data word, it may "
+"check for the Parity Bits (both sender and receiver must agree on whether a "
+"Parity Bit is to be used), and then the receiver looks for a Stop Bit. If "
+"the Stop Bit does not appear when it is supposed to, the UART considers the "
+"entire word to be garbled and will report a Framing Error to the host "
+"processor when the data word is read. The usual cause of a Framing Error is "
+"that the sender and receiver clocks were not running at the same speed, or "
+"that the signal was interrupted."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:114
+msgid ""
+"Regardless of whether the data was received correctly or not, the UART "
+"automatically discards the Start, Parity and Stop bits. If the sender and "
+"receiver are configured identically, these bits are not passed to the host."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:116
+msgid ""
+"If another word is ready for transmission, the Start Bit for the new word "
+"can be sent as soon as the Stop Bit for the previous word has been sent."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:118
+msgid ""
+"As asynchronous data is \"self synchronizing\", if there is no data to "
+"transmit, the transmission line can be idle."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/serial-uart/_index.adoc:119
+#, no-wrap
+msgid "Other UART Functions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:124
+msgid ""
+"In addition to the basic job of converting data from parallel to serial for "
+"transmission and from serial to parallel on reception, a UART will usually "
+"provide additional circuits for signals that can be used to indicate the "
+"state of the transmission media, and to regulate the flow of data in the "
+"event that the remote device is not prepared to accept more data. For "
+"example, when the device connected to the UART is a modem, the modem may "
+"report the presence of a carrier on the phone line while the computer may be "
+"able to instruct the modem to reset itself or to not take calls by raising "
+"or lowering one more of these extra signals. The function of each of these "
+"additional signals is defined in the EIA RS232-C standard."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/serial-uart/_index.adoc:125
+#, no-wrap
+msgid "The RS232-C and V.24 Standards"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:129
+msgid ""
+"In most computer systems, the UART is connected to circuitry that generates "
+"signals that comply with the EIA RS232-C specification. There is also a "
+"CCITT standard named V.24 that mirrors the specifications included in RS232-"
+"C."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/serial-uart/_index.adoc:130
+#, no-wrap
+msgid "RS232-C Bit Assignments (Marks and Spaces)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:134
+msgid ""
+"In RS232-C, a value of `1` is called a `Mark` and a value of `0` is called a "
+"`Space`. When a communication line is idle, the line is said to be \"Marking"
+"\", or transmitting continuous `1` values."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:139
+msgid ""
+"The Start bit always has a value of `0` (a Space). The Stop Bit always has "
+"a value of `1` (a Mark). This means that there will always be a Mark (1) to "
+"Space (0) transition on the line at the start of every word, even when "
+"multiple word are transmitted back to back. This guarantees that sender and "
+"receiver can resynchronize their clocks regardless of the content of the "
+"data bits that are being transmitted."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:141
+msgid ""
+"The idle time between Stop and Start bits does not have to be an exact "
+"multiple (including zero) of the bit rate of the communication link, but "
+"most UARTs are designed this way for simplicity."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:145
+msgid ""
+"In RS232-C, the \"Marking\" signal (a `1`) is represented by a voltage "
+"between -2 VDC and -12 VDC, and a \"Spacing\" signal (a `0`) is represented "
+"by a voltage between 0 and +12 VDC. The transmitter is supposed to send +12 "
+"VDC or -12 VDC, and the receiver is supposed to allow for some voltage loss "
+"in long cables. Some transmitters in low power devices (like portable "
+"computers) sometimes use only +5 VDC and -5 VDC, but these values are still "
+"acceptable to a RS232-C receiver, provided that the cable lengths are short."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/serial-uart/_index.adoc:146
+#, no-wrap
+msgid "RS232-C Break Signal"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:150
+msgid ""
+"RS232-C also specifies a signal called a `Break`, which is caused by sending "
+"continuous Spacing values (no Start or Stop bits). When there is no "
+"electricity present on the data circuit, the line is considered to be "
+"sending `Break`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:153
+msgid ""
+"The `Break` signal must be of a duration longer than the time it takes to "
+"send a complete byte plus Start, Stop and Parity bits. Most UARTs can "
+"distinguish between a Framing Error and a Break, but if the UART cannot do "
+"this, the Framing Error detection can be used to identify Breaks."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:156
+msgid ""
+"In the days of teleprinters, when numerous printers around the country were "
+"wired in series (such as news services), any unit could cause a `Break` by "
+"temporarily opening the entire circuit so that no current flowed. This was "
+"used to allow a location with urgent news to interrupt some other location "
+"that was currently sending information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:161
+msgid ""
+"In modern systems there are two types of Break signals. If the Break is "
+"longer than 1.6 seconds, it is considered a \"Modem Break\", and some modems "
+"can be programmed to terminate the conversation and go on-hook or enter the "
+"modems' command mode when the modem detects this signal. If the Break is "
+"smaller than 1.6 seconds, it signifies a Data Break and it is up to the "
+"remote computer to respond to this signal. Sometimes this form of Break is "
+"used as an Attention or Interrupt signal and sometimes is accepted as a "
+"substitute for the ASCII CONTROL-C character."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:163
+msgid ""
+"Marks and Spaces are also equivalent to \"Holes\" and \"No Holes\" in paper "
+"tape systems."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:168
+msgid ""
+"Breaks cannot be generated from paper tape or from any other byte value, "
+"since bytes are always sent with Start and Stop bit. The UART is usually "
+"capable of generating the continuous Spacing signal in response to a special "
+"command from the host processor."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/serial-uart/_index.adoc:170
+#, no-wrap
+msgid "RS232-C DTE and DCE Devices"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:176
+msgid ""
+"The RS232-C specification defines two types of equipment: the Data Terminal "
+"Equipment (DTE) and the Data Carrier Equipment (DCE). Usually, the DTE "
+"device is the terminal (or computer), and the DCE is a modem. Across the "
+"phone line at the other end of a conversation, the receiving modem is also a "
+"DCE device and the computer that is connected to that modem is a DTE "
+"device. The DCE device receives signals on the pins that the DTE device "
+"transmits on, and vice versa."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:180
+msgid ""
+"When two devices that are both DTE or both DCE must be connected together "
+"without a modem or a similar media translator between them, a NULL modem "
+"must be used. The NULL modem electrically re-arranges the cabling so that "
+"the transmitter output is connected to the receiver input on the other "
+"device, and vice versa. Similar translations are performed on all of the "
+"control signals so that each device will see what it thinks are DCE (or DTE) "
+"signals from the other device."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:183
+msgid ""
+"The number of signals generated by the DTE and DCE devices are not "
+"symmetrical. The DTE device generates fewer signals for the DCE device than "
+"the DTE device receives from the DCE."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/serial-uart/_index.adoc:184
+#, no-wrap
+msgid "RS232-C Pin Assignments"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:187
+msgid ""
+"The EIA RS232-C specification (and the ITU equivalent, V.24) calls for a "
+"twenty-five pin connector (usually a DB25) and defines the purpose of most "
+"of the pins in that connector."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:190
+msgid ""
+"In the IBM Personal Computer and similar systems, a subset of RS232-C "
+"signals are provided via nine pin connectors (DB9). The signals that are "
+"not included on the PC connector deal mainly with synchronous operation, and "
+"this transmission mode is not supported by the UART that IBM selected for "
+"use in the IBM PC."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:193
+msgid ""
+"Depending on the computer manufacturer, a DB25, a DB9, or both types of "
+"connector may be used for RS232-C communications. (The IBM PC also uses a "
+"DB25 connector for the parallel printer interface which causes some "
+"confusion.)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:195
+msgid ""
+"Below is a table of the RS232-C signal assignments in the DB25 and DB9 "
+"connectors."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:200
+#, no-wrap
+msgid "DB25 RS232-C Pin"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:201
+#, no-wrap
+msgid "DB9 IBM PC Pin"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:202
+#, no-wrap
+msgid "EIA Circuit Symbol"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:203
+#, no-wrap
+msgid "CCITT Circuit Symbol"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:204
+#, no-wrap
+msgid "Common Name"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:205
+#, no-wrap
+msgid "Signal Source"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:207
+#: documentation/content/en/articles/serial-uart/_index.adoc:675
+#, no-wrap
+msgid "Description"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:208
+#: documentation/content/en/articles/serial-uart/_index.adoc:265
+#, no-wrap
+msgid "1"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:209
+#: documentation/content/en/articles/serial-uart/_index.adoc:213
+#: documentation/content/en/articles/serial-uart/_index.adoc:261
+#: documentation/content/en/articles/serial-uart/_index.adoc:273
+#: documentation/content/en/articles/serial-uart/_index.adoc:274
+#: documentation/content/en/articles/serial-uart/_index.adoc:275
+#: documentation/content/en/articles/serial-uart/_index.adoc:276
+#: documentation/content/en/articles/serial-uart/_index.adoc:277
+#: documentation/content/en/articles/serial-uart/_index.adoc:281
+#: documentation/content/en/articles/serial-uart/_index.adoc:282
+#: documentation/content/en/articles/serial-uart/_index.adoc:283
+#: documentation/content/en/articles/serial-uart/_index.adoc:284
+#: documentation/content/en/articles/serial-uart/_index.adoc:285
+#: documentation/content/en/articles/serial-uart/_index.adoc:289
+#: documentation/content/en/articles/serial-uart/_index.adoc:290
+#: documentation/content/en/articles/serial-uart/_index.adoc:291
+#: documentation/content/en/articles/serial-uart/_index.adoc:292
+#: documentation/content/en/articles/serial-uart/_index.adoc:293
+#: documentation/content/en/articles/serial-uart/_index.adoc:297
+#: documentation/content/en/articles/serial-uart/_index.adoc:305
+#: documentation/content/en/articles/serial-uart/_index.adoc:313
+#: documentation/content/en/articles/serial-uart/_index.adoc:321
+#: documentation/content/en/articles/serial-uart/_index.adoc:329
+#: documentation/content/en/articles/serial-uart/_index.adoc:337
+#: documentation/content/en/articles/serial-uart/_index.adoc:345
+#: documentation/content/en/articles/serial-uart/_index.adoc:346
+#: documentation/content/en/articles/serial-uart/_index.adoc:353
+#: documentation/content/en/articles/serial-uart/_index.adoc:369
+#: documentation/content/en/articles/serial-uart/_index.adoc:370
+#: documentation/content/en/articles/serial-uart/_index.adoc:371
+#: documentation/content/en/articles/serial-uart/_index.adoc:385
+#: documentation/content/en/articles/serial-uart/_index.adoc:393
+#: documentation/content/en/articles/serial-uart/_index.adoc:401
+#: documentation/content/en/articles/serial-uart/_index.adoc:402
+#: documentation/content/en/articles/serial-uart/_index.adoc:404
+#, no-wrap
+msgid "-"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:210
+#, no-wrap
+msgid "AA"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:211
+#, no-wrap
+msgid "101"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:212
+#, no-wrap
+msgid "PG/FG"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:215
+#, no-wrap
+msgid "Frame/Protective Ground"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:216
+#: documentation/content/en/articles/serial-uart/_index.adoc:225
+#, no-wrap
+msgid "2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:217
+#: documentation/content/en/articles/serial-uart/_index.adoc:224
+#: documentation/content/en/articles/serial-uart/_index.adoc:610
+#, no-wrap
+msgid "3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:218
+#, no-wrap
+msgid "BA"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:219
+#, no-wrap
+msgid "103"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:220
+#, no-wrap
+msgid "TD"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:221
+#: documentation/content/en/articles/serial-uart/_index.adoc:237
+#: documentation/content/en/articles/serial-uart/_index.adoc:317
+#: documentation/content/en/articles/serial-uart/_index.adoc:349
+#: documentation/content/en/articles/serial-uart/_index.adoc:357
+#: documentation/content/en/articles/serial-uart/_index.adoc:365
+#: documentation/content/en/articles/serial-uart/_index.adoc:373
+#: documentation/content/en/articles/serial-uart/_index.adoc:389
+#: documentation/content/en/articles/serial-uart/_index.adoc:397
+#, no-wrap
+msgid "DTE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:223
+#, no-wrap
+msgid "Transmit Data"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:226
+#, no-wrap
+msgid "BB"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:227
+#, no-wrap
+msgid "104"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:228
+#, no-wrap
+msgid "RD"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:229
+#: documentation/content/en/articles/serial-uart/_index.adoc:245
+#: documentation/content/en/articles/serial-uart/_index.adoc:253
+#: documentation/content/en/articles/serial-uart/_index.adoc:269
+#: documentation/content/en/articles/serial-uart/_index.adoc:301
+#: documentation/content/en/articles/serial-uart/_index.adoc:309
+#: documentation/content/en/articles/serial-uart/_index.adoc:325
+#: documentation/content/en/articles/serial-uart/_index.adoc:333
+#: documentation/content/en/articles/serial-uart/_index.adoc:341
+#: documentation/content/en/articles/serial-uart/_index.adoc:381
+#: documentation/content/en/articles/serial-uart/_index.adoc:405
+#, no-wrap
+msgid "DCE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:231
+#, no-wrap
+msgid "Receive Data"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:232
+#: documentation/content/en/articles/serial-uart/_index.adoc:361
+#, no-wrap
+msgid "4"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:233
+#: documentation/content/en/articles/serial-uart/_index.adoc:256
+#, no-wrap
+msgid "7"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:234
+#, no-wrap
+msgid "CA"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:235
+#, no-wrap
+msgid "105"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:236
+#, no-wrap
+msgid "RTS"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:239
+#, no-wrap
+msgid "Request to Send"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:240
+#: documentation/content/en/articles/serial-uart/_index.adoc:257
+#, no-wrap
+msgid "5"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:241
+#: documentation/content/en/articles/serial-uart/_index.adoc:264
+#, no-wrap
+msgid "8"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:242
+#, no-wrap
+msgid "CB"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:243
+#, no-wrap
+msgid "106"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:244
+#, no-wrap
+msgid "CTS"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:247
+#, no-wrap
+msgid "Clear to Send"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:248
+#: documentation/content/en/articles/serial-uart/_index.adoc:249
+#, no-wrap
+msgid "6"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:250
+#, no-wrap
+msgid "CC"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:251
+#, no-wrap
+msgid "107"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:252
+#, no-wrap
+msgid "DSR"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:255
+#, no-wrap
+msgid "Data Set Ready"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:258
+#, no-wrap
+msgid "AV"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:259
+#, no-wrap
+msgid "102"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:260
+#, no-wrap
+msgid "SG/GND"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:263
+#, no-wrap
+msgid "Signal Ground"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:266
+#, no-wrap
+msgid "CF"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:267
+#, no-wrap
+msgid "109"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:268
+#, no-wrap
+msgid "DCD/CD"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:271
+#, no-wrap
+msgid "Data Carrier Detect"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:272
+#: documentation/content/en/articles/serial-uart/_index.adoc:377
+#, no-wrap
+msgid "9"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:279
+#: documentation/content/en/articles/serial-uart/_index.adoc:287
+#: documentation/content/en/articles/serial-uart/_index.adoc:295
+#, no-wrap
+msgid "Reserved for Test"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:280
+#, no-wrap
+msgid "10"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:288
+#, no-wrap
+msgid "11"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:296
+#, no-wrap
+msgid "12"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:298
+#, no-wrap
+msgid "CI"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:299
+#, no-wrap
+msgid "122"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:300
+#, no-wrap
+msgid "SRLSD"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:303
+#, no-wrap
+msgid "Sec. Recv. Line Signal Detector"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:304
+#, no-wrap
+msgid "13"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:306
+#, no-wrap
+msgid "SCB"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:307
+#, no-wrap
+msgid "121"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:308
+#, no-wrap
+msgid "SCTS"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:311
+#, no-wrap
+msgid "Secondary Clear to Send"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:312
+#, no-wrap
+msgid "14"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:314
+#, no-wrap
+msgid "SBA"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:315
+#, no-wrap
+msgid "118"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:316
+#, no-wrap
+msgid "STD"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:319
+#, no-wrap
+msgid "Secondary Transmit Data"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:320
+#, no-wrap
+msgid "15"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:322
+#, no-wrap
+msgid "DB"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:323
+#, no-wrap
+msgid "114"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:324
+#: documentation/content/en/articles/serial-uart/_index.adoc:396
+#, no-wrap
+msgid "TSET"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:327
+#: documentation/content/en/articles/serial-uart/_index.adoc:399
+#, no-wrap
+msgid "Trans. Sig. Element Timing"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:328
+#, no-wrap
+msgid "16"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:330
+#, no-wrap
+msgid "SBB"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:331
+#, no-wrap
+msgid "119"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:332
+#, no-wrap
+msgid "SRD"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:335
+#, no-wrap
+msgid "Secondary Received Data"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:336
+#, no-wrap
+msgid "17"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:338
+#, no-wrap
+msgid "DD"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:339
+#, no-wrap
+msgid "115"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:340
+#, no-wrap
+msgid "RSET"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:343
+#, no-wrap
+msgid "Receiver Signal Element Timing"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:344
+#, no-wrap
+msgid "18"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:347
+#, no-wrap
+msgid "141"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:348
+#, no-wrap
+msgid "LOOP"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:351
+#, no-wrap
+msgid "Local Loopback"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:352
+#: documentation/content/en/articles/serial-uart/_index.adoc:614
+#, no-wrap
+msgid "19"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:354
+#, no-wrap
+msgid "SCA"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:355
+#, no-wrap
+msgid "120"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:356
+#, no-wrap
+msgid "SRS"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:359
+#, no-wrap
+msgid "Secondary Request to Send"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:360
+#, no-wrap
+msgid "20"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:362
+#, no-wrap
+msgid "CD"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:363
+#, no-wrap
+msgid "108.2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:364
+#, no-wrap
+msgid "DTR"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:367
+#, no-wrap
+msgid "Data Terminal Ready"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:368
+#, no-wrap
+msgid "21"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:372
+#, no-wrap
+msgid "RDL"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:375
+#, no-wrap
+msgid "Remote Digital Loopback"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:376
+#, no-wrap
+msgid "22"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:378
+#, no-wrap
+msgid "CE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:379
+#, no-wrap
+msgid "125"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:380
+#, no-wrap
+msgid "RI"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:383
+#, no-wrap
+msgid "Ring Indicator"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:384
+#: documentation/content/en/articles/serial-uart/_index.adoc:618
+#, no-wrap
+msgid "23"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:386
+#, no-wrap
+msgid "CH"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:387
+#, no-wrap
+msgid "111"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:388
+#, no-wrap
+msgid "DSRS"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:391
+#, no-wrap
+msgid "Data Signal Rate Selector"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:392
+#, no-wrap
+msgid "24"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:394
+#, no-wrap
+msgid "DA"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:395
+#, no-wrap
+msgid "113"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:400
+#, no-wrap
+msgid "25"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:403
+#, no-wrap
+msgid "142"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:406
+#, no-wrap
+msgid "Test Mode"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/serial-uart/_index.adoc:408
+#, no-wrap
+msgid "Bits, Baud and Symbols"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:412
+msgid ""
+"Baud is a measurement of transmission speed in asynchronous communication. "
+"Due to advances in modem communication technology, this term is frequently "
+"misused when describing the data rates in newer devices."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:417
+msgid ""
+"Traditionally, a Baud Rate represents the number of bits that are actually "
+"being sent over the media, not the amount of data that is actually moved "
+"from one DTE device to the other. The Baud count includes the overhead bits "
+"Start, Stop and Parity that are generated by the sending UART and removed by "
+"the receiving UART. This means that seven-bit words of data actually take "
+"10 bits to be completely transmitted. Therefore, a modem capable of moving "
+"300 bits per second from one place to another can normally only move 30 7-"
+"bit words if Parity is used and one Start and Stop bit are present."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:419
+msgid ""
+"If 8-bit data words are used and Parity bits are also used, the data rate "
+"falls to 27.27 words per second, because it now takes 11 bits to send the "
+"eight-bit words, and the modem still only sends 300 bits per second."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:425
+msgid ""
+"The formula for converting bytes per second into a baud rate and vice versa "
+"was simple until error-correcting modems came along. These modems receive "
+"the serial stream of bits from the UART in the host computer (even when "
+"internal modems are used the data is still frequently serialized) and "
+"converts the bits back into bytes. These bytes are then combined into "
+"packets and sent over the phone line using a Synchronous transmission "
+"method. This means that the Stop, Start, and Parity bits added by the UART "
+"in the DTE (the computer) were removed by the modem before transmission by "
+"the sending modem. When these bytes are received by the remote modem, the "
+"remote modem adds Start, Stop and Parity bits to the words, converts them to "
+"a serial format and then sends them to the receiving UART in the remote "
+"computer, who then strips the Start, Stop and Parity bits."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:428
+msgid ""
+"The reason all these extra conversions are done is so that the two modems "
+"can perform error correction, which means that the receiving modem is able "
+"to ask the sending modem to resend a block of data that was not received "
+"with the correct checksum. This checking is handled by the modems, and the "
+"DTE devices are usually unaware that the process is occurring."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:431
+msgid ""
+"By striping the Start, Stop and Parity bits, the additional bits of data "
+"that the two modems must share between themselves to perform error-"
+"correction are mostly concealed from the effective transmission rate seen by "
+"the sending and receiving DTE equipment. For example, if a modem sends ten "
+"7-bit words to another modem without including the Start, Stop and Parity "
+"bits, the sending modem will be able to add 30 bits of its own information "
+"that the receiving modem can use to do error-correction without impacting "
+"the transmission speed of the real data."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:435
+msgid ""
+"The use of the term Baud is further confused by modems that perform "
+"compression. A single 8-bit word passed over the telephone line might "
+"represent a dozen words that were transmitted to the sending modem. The "
+"receiving modem will expand the data back to its original content and pass "
+"that data to the receiving DTE."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:438
+msgid ""
+"Modern modems also include buffers that allow the rate that bits move across "
+"the phone line (DCE to DCE) to be a different speed than the speed that the "
+"bits move between the DTE and DCE on both ends of the conversation. "
+"Normally the speed between the DTE and DCE is higher than the DCE to DCE "
+"speed because of the use of compression by the modems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:441
+msgid ""
+"As the number of bits needed to describe a byte varied during the trip "
+"between the two machines plus the differing bits-per-seconds speeds that are "
+"used present on the DTE-DCE and DCE-DCE links, the usage of the term Baud to "
+"describe the overall communication speed causes problems and can "
+"misrepresent the true transmission speed. So Bits Per Second (bps) is the "
+"correct term to use to describe the transmission rate seen at the DCE to DCE "
+"interface and Baud or Bits Per Second are acceptable terms to use when a "
+"connection is made between two systems with a wired connection, or if a "
+"modem is in use that is not performing error-correction or compression."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:445
+msgid ""
+"Modern high speed modems (2400, 9600, 14,400, and 19,200bps) in reality "
+"still operate at or below 2400 baud, or more accurately, 2400 Symbols per "
+"second. High speed modem are able to encode more bits of data into each "
+"Symbol using a technique called Constellation Stuffing, which is why the "
+"effective bits per second rate of the modem is higher, but the modem "
+"continues to operate within the limited audio bandwidth that the telephone "
+"system provides. Modems operating at 28,800 and higher speeds have variable "
+"Symbol rates, but the technique is the same."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/serial-uart/_index.adoc:446
+#, no-wrap
+msgid "The IBM Personal Computer UART"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:450
+msgid ""
+"Starting with the original IBM Personal Computer, IBM selected the National "
+"Semiconductor INS8250 UART for use in the IBM PC Parallel/Serial Adapter. "
+"Subsequent generations of compatible computers from IBM and other vendors "
+"continued to use the INS8250 or improved versions of the National "
+"Semiconductor UART family."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/serial-uart/_index.adoc:451
+#, no-wrap
+msgid "National Semiconductor UART Family Tree"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:454
+msgid ""
+"There have been several versions and subsequent generations of the INS8250 "
+"UART. Each major version is described below."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:467
+#, no-wrap
+msgid ""
+"INS8250 -> INS8250B\n"
+" \\\n"
+" \\\n"
+" \\-> INS8250A -> INS82C50A\n"
+" \\\n"
+" \\\n"
+" \\-> NS16450 -> NS16C450\n"
+" \\\n"
+" \\\n"
+" \\-> NS16550 -> NS16550A -> PC16550D\n"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/serial-uart/_index.adoc:469
+#, no-wrap
+msgid "INS8250"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:472
+msgid ""
+"This part was used in the original IBM PC and IBM PC/XT. The original name "
+"for this part was the INS8250 ACE (Asynchronous Communications Element) and "
+"it is made from NMOS technology."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:476
+msgid ""
+"The 8250 uses eight I/O ports and has a one-byte send and a one-byte receive "
+"buffer. This original UART has several race conditions and other flaws. "
+"The original IBM BIOS includes code to work around these flaws, but this "
+"made the BIOS dependent on the flaws being present, so subsequent parts like "
+"the 8250A, 16450 or 16550 could not be used in the original IBM PC or IBM PC/"
+"XT."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/serial-uart/_index.adoc:476
+#, no-wrap
+msgid "INS8250-B"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:479
+msgid ""
+"This is the slower speed of the INS8250 made from NMOS technology. It "
+"contains the same problems as the original INS8250."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/serial-uart/_index.adoc:480
+#, no-wrap
+msgid "INS8250A"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:484
+msgid ""
+"An improved version of the INS8250 using XMOS technology with various "
+"functional flaws corrected. The INS8250A was used initially in PC clone "
+"computers by vendors who used \"clean\" BIOS designs. Due to the "
+"corrections in the chip, this part could not be used with a BIOS compatible "
+"with the INS8250 or INS8250B."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/serial-uart/_index.adoc:485
+#, no-wrap
+msgid "INS82C50A"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:487
+msgid ""
+"This is a CMOS version (low power consumption) of the INS8250A and has "
+"similar functional characteristics."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/serial-uart/_index.adoc:488
+#, no-wrap
+msgid "NS16450"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:491
+msgid ""
+"Same as NS8250A with improvements so it can be used with faster CPU bus "
+"designs. IBM used this part in the IBM AT and updated the IBM BIOS to no "
+"longer rely on the bugs in the INS8250."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/serial-uart/_index.adoc:492
+#, no-wrap
+msgid "NS16C450"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:494
+msgid "This is a CMOS version (low power consumption) of the NS16450."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/serial-uart/_index.adoc:495
+#, no-wrap
+msgid "NS16550"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:497
+msgid ""
+"Same as NS16450 with a 16-byte send and receive buffer but the buffer design "
+"was flawed and could not be reliably be used."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/serial-uart/_index.adoc:498
+#, no-wrap
+msgid "NS16550A"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:501
+msgid ""
+"Same as NS16550 with the buffer flaws corrected. The 16550A and its "
+"successors have become the most popular UART design in the PC industry, "
+"mainly due to its ability to reliably handle higher data rates on operating "
+"systems with sluggish interrupt response times."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/serial-uart/_index.adoc:502
+#, no-wrap
+msgid "NS16C552"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:504
+msgid ""
+"This component consists of two NS16C550A CMOS UARTs in a single package."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/serial-uart/_index.adoc:505
+#, no-wrap
+msgid "PC16550D"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:508
+msgid ""
+"Same as NS16550A with subtle flaws corrected. This is revision D of the "
+"16550 family and is the latest design available from National Semiconductor."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/serial-uart/_index.adoc:509
+#, no-wrap
+msgid "The NS16550AF and the PC16550D are the same thing"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:515
+msgid ""
+"National reorganized their part numbering system a few years ago, and the "
+"NS16550AFN no longer exists by that name. (If you have a NS16550AFN, look "
+"at the date code on the part, which is a four digit number that usually "
+"starts with a nine. The first two digits of the number are the year, and "
+"the last two digits are the week in that year when the part was packaged. "
+"If you have a NS16550AFN, it is probably a few years old.)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:518
+msgid ""
+"The new numbers are like PC16550DV, with minor differences in the suffix "
+"letters depending on the package material and its shape. (A description of "
+"the numbering system can be found below.)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:520
+msgid ""
+"It is important to understand that in some stores, you may pay $15(US) for a "
+"NS16550AFN made in 1990 and in the next bin are the new PC16550DN parts with "
+"minor fixes that National has made since the AFN part was in production, the "
+"PC16550DN was probably made in the past six months and it costs half (as low "
+"as $5(US) in volume) as much as the NS16550AFN because they are readily "
+"available."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:522
+msgid ""
+"As the supply of NS16550AFN chips continues to shrink, the price will "
+"probably continue to increase until more people discover and accept that the "
+"PC16550DN really has the same function as the old part number."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/serial-uart/_index.adoc:523
+#, no-wrap
+msgid "National Semiconductor Part Numbering System"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:526
+msgid ""
+"The older NS``__nnnnnrqp__`` part numbers are now of the format "
+"PC``__nnnnnrgp__``."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:528
+msgid ""
+"The `_r_` is the revision field. The current revision of the 16550 from "
+"National Semiconductor is `D`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:530
+msgid "The `_p_` is the package-type field. The types are:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:536
+#, no-wrap
+msgid "\"F\""
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:537
+#, no-wrap
+msgid "QFP"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:539
+#, no-wrap
+msgid "(quad flat pack) L lead type"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:540
+#, no-wrap
+msgid "\"N\""
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:541
+#, no-wrap
+msgid "DIP"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:543
+#, no-wrap
+msgid "(dual inline package) through hole straight lead type"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:544
+#, no-wrap
+msgid "\"V\""
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:545
+#, no-wrap
+msgid "LPCC"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:546
+#, no-wrap
+msgid "(lead plastic chip carrier) J lead type"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:551
+msgid ""
+"The _g_ is the product grade field. If an `I` precedes the package-type "
+"letter, it indicates an \"industrial\" grade part, which has higher specs "
+"than a standard part but not as high as Military Specification (Milspec) "
+"component. This is an optional field."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:553
+msgid ""
+"So what we used to call a NS16550AFN (DIP Package) is now called a PC16550DN "
+"or PC16550DIN."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/serial-uart/_index.adoc:554
+#, no-wrap
+msgid "Other Vendors and Similar UARTs"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:559
+msgid ""
+"Over the years, the 8250, 8250A, 16450 and 16550 have been licensed or "
+"copied by other chip vendors. In the case of the 8250, 8250A and 16450, the "
+"exact circuit (the \"megacell\") was licensed to many vendors, including "
+"Western Digital and Intel. Other vendors reverse-engineered the part or "
+"produced emulations that had similar behavior."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:563
+msgid ""
+"In internal modems, the modem designer will frequently emulate the "
+"8250A/16450 with the modem microprocessor, and the emulated UART will "
+"frequently have a hidden buffer consisting of several hundred bytes. Due to "
+"the size of the buffer, these emulations can be as reliable as a 16550A in "
+"their ability to handle high speed data. However, most operating systems "
+"will still report that the UART is only a 8250A or 16450, and may not make "
+"effective use of the extra buffering present in the emulated UART unless "
+"special drivers are used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:565
+msgid ""
+"Some modem makers are driven by market forces to abandon a design that has "
+"hundreds of bytes of buffer and instead use a 16550A UART so that the "
+"product will compare favorably in market comparisons even though the "
+"effective performance may be lowered by this action."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:568
+msgid ""
+"A common misconception is that all parts with \"16550A\" written on them are "
+"identical in performance. There are differences, and in some cases, "
+"outright flaws in most of these 16550A clones."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:572
+msgid ""
+"When the NS16550 was developed, the National Semiconductor obtained several "
+"patents on the design and they also limited licensing, making it harder for "
+"other vendors to provide a chip with similar features. As a result of the "
+"patents, reverse-engineered designs and emulations had to avoid infringing "
+"the claims covered by the patents. Subsequently, these copies almost never "
+"perform exactly the same as the NS16550A or PC16550D, which are the parts "
+"most computer and modem makers want to buy but are sometimes unwilling to "
+"pay the price required to get the genuine part."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:577
+msgid ""
+"Some of the differences in the clone 16550A parts are unimportant, while "
+"others can prevent the device from being used at all with a given operating "
+"system or driver. These differences may show up when using other drivers, "
+"or when particular combinations of events occur that were not well tested or "
+"considered in the Windows(R) driver. This is because most modem vendors and "
+"16550-clone makers use the Microsoft drivers from Windows(R) for Workgroups "
+"3.11 and the Microsoft(R) MS-DOS(R) utility as the primary tests for "
+"compatibility with the NS16550A. This over-simplistic criteria means that "
+"if a different operating system is used, problems could appear due to subtle "
+"differences between the clones and genuine components."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:580
+msgid ""
+"National Semiconductor has made available a program named COMTEST that "
+"performs compatibility tests independent of any OS drivers. It should be "
+"remembered that the purpose of this type of program is to demonstrate the "
+"flaws in the products of the competition, so the program will report major "
+"as well as extremely subtle differences in behavior in the part being tested."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:583
+msgid ""
+"In a series of tests performed by the author of this document in 1994, "
+"components made by National Semiconductor, TI, StarTech, and CMD as well as "
+"megacells and emulations embedded in internal modems were tested with "
+"COMTEST. A difference count for some of these components is listed below. "
+"Since these tests were performed in 1994, they may not reflect the current "
+"performance of the given product from a vendor."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:586
+msgid ""
+"It should be noted that COMTEST normally aborts when an excessive number or "
+"certain types of problems have been detected. As part of this testing, "
+"COMTEST was modified so that it would not abort no matter how many "
+"differences were encountered."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:591
+#, no-wrap
+msgid "Vendor"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:592
+#, no-wrap
+msgid "Part Number"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:594
+#, no-wrap
+msgid "Errors (aka \"differences\" reported)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:595
+#: documentation/content/en/articles/serial-uart/_index.adoc:599
+#: documentation/content/en/articles/serial-uart/_index.adoc:603
+#, no-wrap
+msgid "National"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:596
+#, no-wrap
+msgid "(PC16550DV)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:598
+#: documentation/content/en/articles/serial-uart/_index.adoc:602
+#: documentation/content/en/articles/serial-uart/_index.adoc:606
+#, no-wrap
+msgid "0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:600
+#, no-wrap
+msgid "(NS16550AFN)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:604
+#, no-wrap
+msgid "(NS16C552V)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:607
+#, no-wrap
+msgid "TI"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:608
+#, no-wrap
+msgid "(TL16550AFN)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:611
+#, no-wrap
+msgid "CMD"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:612
+#, no-wrap
+msgid "(16C550PE)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:615
+#, no-wrap
+msgid "StarTech"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:616
+#, no-wrap
+msgid "(ST16C550J)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:619
+#, no-wrap
+msgid "Rockwell"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:620
+#, no-wrap
+msgid "Reference modem with internal 16550 or an emulation (RC144DPi/C3000-25)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:622
+#, no-wrap
+msgid "117"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:623
+#, no-wrap
+msgid "Sierra"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:624
+#, no-wrap
+msgid "Modem with an internal 16550 (SC11951/SC11351)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:625
+#, no-wrap
+msgid "91"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:632
+msgid ""
+"To date, the author of this document has not found any non-National parts "
+"that report zero differences using the COMTEST program. It should also be "
+"noted that National has had five versions of the 16550 over the years and "
+"the newest parts behave a bit differently than the classic NS16550AFN that "
+"is considered the benchmark for functionality. COMTEST appears to turn a "
+"blind eye to the differences within the National product line and reports no "
+"errors on the National parts (except for the original 16550) even when there "
+"are official erratas that describe bugs in the A, B and C revisions of the "
+"parts, so this bias in COMTEST must be taken into account."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:639
+msgid ""
+"It is important to understand that a simple count of differences from "
+"COMTEST does not reveal a lot about what differences are important and which "
+"are not. For example, about half of the differences reported in the two "
+"modems listed above that have internal UARTs were caused by the clone UARTs "
+"not supporting five- and six-bit character modes. The real 16550, 16450, "
+"and 8250 UARTs all support these modes and COMTEST checks the functionality "
+"of these modes so over fifty differences are reported. However, almost no "
+"modern modem supports five- or six-bit characters, particularly those with "
+"error-correction and compression capabilities. This means that the "
+"differences related to five- and six-bit character modes can be discounted."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:643
+msgid ""
+"Many of the differences COMTEST reports have to do with timing. In many of "
+"the clone designs, when the host reads from one port, the status bits in "
+"some other port may not update in the same amount of time (some faster, some "
+"slower) as a _real_ NS16550AFN and COMTEST looks for these differences. "
+"This means that the number of differences can be misleading in that one "
+"device may only have one or two differences but they are extremely serious, "
+"and some other device that updates the status registers faster or slower "
+"than the reference part (that would probably never affect the operation of a "
+"properly written driver) could have dozens of differences reported."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:645
+msgid ""
+"COMTEST can be used as a screening tool to alert the administrator to the "
+"presence of potentially incompatible components that might cause problems or "
+"have to be handled as a special case."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:648
+msgid ""
+"If you run COMTEST on a 16550 that is in a modem or a modem is attached to "
+"the serial port, you need to first issue a ATE0&W command to the modem so "
+"that the modem will not echo any of the test characters. If you forget to "
+"do this, COMTEST will report at least this one difference:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:652
+#, no-wrap
+msgid "Error (6)...Timeout interrupt failed: IIR = c1 LSR = 61\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/serial-uart/_index.adoc:654
+#, no-wrap
+msgid "8250/16450/16550 Registers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:660
+msgid ""
+"The 8250/16450/16550 UART occupies eight contiguous I/O port addresses. In "
+"the IBM PC, there are two defined locations for these eight ports and they "
+"are known collectively as [.filename]#COM1# and [.filename]#COM2#. The "
+"makers of PC-clones and add-on cards have created two additional areas known "
+"as [.filename]#COM3# and [.filename]#COM4#, but these extra COM ports "
+"conflict with other hardware on some systems. The most common conflict is "
+"with video adapters that provide IBM 8514 emulation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:665
+msgid ""
+"[.filename]#COM1# is located from 0x3f8 to 0x3ff and normally uses IRQ 4. [."
+"filename]#COM2# is located from 0x2f8 to 0x2ff and normally uses IRQ 3. [."
+"filename]#COM3# is located from 0x3e8 to 0x3ef and has no standardized IRQ. "
+"[.filename]#COM4# is located from 0x2e8 to 0x2ef and has no standardized IRQ."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:667
+msgid ""
+"A description of the I/O ports of the 8250/16450/16550 UART is provided "
+"below."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:672
+#, no-wrap
+msgid "I/O Port"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:673
+#, no-wrap
+msgid "Access Allowed"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:676
+#: documentation/content/en/articles/serial-uart/_index.adoc:684
+#: documentation/content/en/articles/serial-uart/_index.adoc:692
+#, no-wrap
+msgid "+0x00"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:677
+#, no-wrap
+msgid "write (DLAB==0)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:683
+#, no-wrap
+msgid ""
+"Transmit Holding Register (THR).\n"
+"\n"
+"Information written to this port are treated as data words and will be transmitted by the UART."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:685
+#, no-wrap
+msgid "read (DLAB==0)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:691
+#, no-wrap
+msgid ""
+"Receive Buffer Register (RBR).\n"
+"\n"
+"Any data words received by the UART form the serial link are accessed by the host by reading this port."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:693
+#: documentation/content/en/articles/serial-uart/_index.adoc:701
+#, no-wrap
+msgid "write/read (DLAB==1)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:699
+#, no-wrap
+msgid ""
+"Divisor Latch LSB (DLL)\n"
+"\n"
+"This value will be divided from the master input clock (in the IBM PC, the master clock is 1.8432MHz) and the resulting clock will determine the baud rate of the UART. This register holds bits 0 thru 7 of the divisor."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:700
+#: documentation/content/en/articles/serial-uart/_index.adoc:708
+#, no-wrap
+msgid "+0x01"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:707
+#, no-wrap
+msgid ""
+"Divisor Latch MSB (DLH)\n"
+"\n"
+"This value will be divided from the master input clock (in the IBM PC, the master clock is 1.8432MHz) and the resulting clock will determine the baud rate of the UART. This register holds bits 8 thru 15 of the divisor."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:709
+#, no-wrap
+msgid "write/read (DLAB==0)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:721
+#, no-wrap
+msgid ""
+"Interrupt Enable Register (IER) +\n"
+"\n"
+"The 8250/16450/16550 UART classifies events into one of four categories. Each category can be configured to generate an interrupt when any of the events occurs. The 8250/16450/16550 UART generates a single external interrupt signal regardless of how many events in the enabled categories have occurred. It is up to the host processor to respond to the interrupt and then poll the enabled interrupt categories (usually all categories have interrupts enabled) to determine the true cause(s) of the interrupt. +\n"
+"Bit 7 -> Reserved, always 0. +\n"
+"Bit 6 -> Reserved, always 0. +\n"
+"Bit 5 -> Reserved, always 0. +\n"
+"Bit 4 -> Reserved, always 0. +\n"
+"Bit 3 -> Enable Modem Status Interrupt (EDSSI). Setting this bit to \"1\" allows the UART to generate an interrupt when a change occurs on one or more of the status lines. +\n"
+"Bit 2 -> Enable Receiver Line Status Interrupt (ELSI) Setting this bit to \"1\" causes the UART to generate an interrupt when the an error (or a BREAK signal) has been detected in the incoming data. +\n"
+"Bit 1 -> Enable Transmitter Holding Register Empty Interrupt (ETBEI) Setting this bit to \"1\" causes the UART to generate an interrupt when the UART has room for one or more additional characters that are to be transmitted. +\n"
+"Bit 0 -> Enable Received Data Available Interrupt (ERBFI) Setting this bit to \"1\" causes the UART to generate an interrupt when the UART has received enough characters to exceed the trigger level of the FIFO, or the FIFO timer has expired (stale data), or a single character has been received when the FIFO is disabled."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:722
+#: documentation/content/en/articles/serial-uart/_index.adoc:741
+#, no-wrap
+msgid "+0x02"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:723
+#, no-wrap
+msgid "write"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:740
+#, no-wrap
+msgid ""
+"FIFO Control Register (FCR) (This port does not exist on the 8250 and 16450 UART.) +\n"
+"Bit 7 -> Receiver Trigger Bit #1 +\n"
+"Bit 6 -> Receiver Trigger Bit #0 +\n"
+"\n"
+"These two bits control at what point the receiver is to generate an interrupt when the FIFO is active. +\n"
+"7 6 How many words are received before an interrupt is generated +\n"
+"0 0 1 +\n"
+"0 1 4 +\n"
+"1 0 8 +\n"
+"1 1 14 +\n"
+"Bit 5 -> Reserved, always 0. +\n"
+"Bit 4 -> Reserved, always 0. +\n"
+"Bit 3 -> DMA Mode Select. If Bit 0 is set to \"1\" (FIFOs enabled), setting this bit changes the operation of the -RXRDY and -TXRDY signals from Mode 0 to Mode 1. +\n"
+"Bit 2 -> Transmit FIFO Reset. When a \"1\" is written to this bit, the contents of the FIFO are discarded. Any word currently being transmitted will be sent intact. This function is useful in aborting transfers. +\n"
+"Bit 1 -> Receiver FIFO Reset. When a \"1\" is written to this bit, the contents of the FIFO are discarded. Any word currently being assembled in the shift register will be received intact. +\n"
+"Bit 0 -> 16550 FIFO Enable. When set, both the transmit and receive FIFOs are enabled. Any contents in the holding register, shift registers or FIFOs are lost when FIFOs are enabled or disabled. +"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:742
+#, no-wrap
+msgid "read"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:758
+#, no-wrap
+msgid ""
+"Interrupt Identification Register +\n"
+"Bit 7 -> FIFOs enabled. On the 8250/16450 UART, this bit is zero. +\n"
+"Bit 6 -> FIFOs enabled. On the 8250/16450 UART, this bit is zero. +\n"
+"Bit 5 -> Reserved, always 0. +\n"
+"Bit 4 -> Reserved, always 0. +\n"
+"Bit 3 -> Interrupt ID Bit #2. On the 8250/16450 UART, this bit is zero. +\n"
+"Bit 2 -> Interrupt ID Bit #1 +\n"
+"Bit 1 -> Interrupt ID Bit #0.These three bits combine to report the category of event that caused the interrupt that is in progress. These categories have priorities, so if multiple categories of events occur at the same time, the UART will report the more important events first and the host must resolve the events in the order they are reported. All events that caused the current interrupt must be resolved before any new interrupts will be generated. (This is a limitation of the PC architecture.) +\n"
+"2 1 0 Priority Description +\n"
+"0 1 1 First Received Error (OE, PE, BI, or FE) +\n"
+"0 1 0 Second Received Data Available +\n"
+"1 1 0 Second Trigger level identification (Stale data in receive buffer) +\n"
+"0 0 1 Third Transmitter has room for more words (THRE) +\n"
+"0 0 0 Fourth Modem Status Change (-CTS, -DSR, -RI, or -DCD) +\n"
+"Bit 0 -> Interrupt Pending Bit. If this bit is set to \"0\", then at least one interrupt is pending."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:759
+#, no-wrap
+msgid "+0x03"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:760
+#: documentation/content/en/articles/serial-uart/_index.adoc:778
+#: documentation/content/en/articles/serial-uart/_index.adoc:790
+#: documentation/content/en/articles/serial-uart/_index.adoc:802
+#: documentation/content/en/articles/serial-uart/_index.adoc:813
+#, no-wrap
+msgid "write/read"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:776
+#, no-wrap
+msgid ""
+"Line Control Register (LCR) +\n"
+"Bit 7 -> Divisor Latch Access Bit (DLAB). When set, access to the data transmit/receive register (THR/RBR) and the Interrupt Enable Register (IER) is disabled. Any access to these ports is now redirected to the Divisor Latch Registers. Setting this bit, loading the Divisor Registers, and clearing DLAB should be done with interrupts disabled. +\n"
+"Bit 6 -> Set Break. When set to \"1\", the transmitter begins to transmit continuous Spacing until this bit is set to \"0\". This overrides any bits of characters that are being transmitted. +\n"
+"Bit 5 -> Stick Parity. When parity is enabled, setting this bit causes parity to always be \"1\" or \"0\", based on the value of Bit 4.\n"
+"Bit 4 -> Even Parity Select (EPS). When parity is enabled and Bit 5 is \"0\", setting this bit causes even parity to be transmitted and expected. Otherwise, odd parity is used. +\n"
+"Bit 3 -> Parity Enable (PEN). When set to \"1\", a parity bit is inserted between the last bit of the data and the Stop Bit. The UART will also expect parity to be present in the received data. +\n"
+"Bit 2 -> Number of Stop Bits (STB). If set to \"1\" and using 5-bit data words, 1.5 Stop Bits are transmitted and expected in each data word. For 6, 7 and 8-bit data words, 2 Stop Bits are transmitted and expected. When this bit is set to \"0\", one Stop Bit is used on each data word. +\n"
+"Bit 1 -> Word Length Select Bit #1 (WLSB1) +\n"
+"Bit 0 -> Word Length Select Bit #0 (WLSB0) +\n"
+"Together these bits specify the number of bits in each data word. +\n"
+"1 0 Word Length +\n"
+"0 0 5 Data Bits +\n"
+"0 1 6 Data Bits +\n"
+"1 0 7 Data Bits +\n"
+"1 1 8 Data Bits +"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:777
+#, no-wrap
+msgid "+0x04"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:788
+#, no-wrap
+msgid ""
+"Modem Control Register (MCR) +\n"
+"Bit 7 -> Reserved, always 0. +\n"
+"Bit 6 -> Reserved, always 0. +\n"
+"Bit 5 -> Reserved, always 0. +\n"
+"Bit 4 -> Loop-Back Enable. When set to \"1\", the UART transmitter and receiver are internally connected together to allow diagnostic operations. In addition, the UART modem control outputs are connected to the UART modem control inputs. CTS is connected to RTS, DTR is connected to DSR, OUT1 is connected to RI, and OUT 2 is connected to DCD. +\n"
+"Bit 3 -> OUT 2. An auxiliary output that the host processor may set high or low. In the IBM PC serial adapter (and most clones), OUT 2 is used to tri-state (disable) the interrupt signal from the 8250/16450/16550 UART. +\n"
+"Bit 2 -> OUT 1. An auxiliary output that the host processor may set high or low. This output is not used on the IBM PC serial adapter. +\n"
+"Bit 1 -> Request to Send (RTS). When set to \"1\", the output of the UART -RTS line is Low (Active). +\n"
+"Bit 0 -> Data Terminal Ready (DTR). When set to \"1\", the output of the UART -DTR line is Low (Active). +"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:789
+#, no-wrap
+msgid "+0x05"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:800
+#, no-wrap
+msgid ""
+"Line Status Register (LSR) +\n"
+"Bit 7 -> Error in Receiver FIFO. On the 8250/16450 UART, this bit is zero. This bit is set to \"1\" when any of the bytes in the FIFO have one or more of the following error conditions: PE, FE, or BI. +\n"
+"Bit 6 -> Transmitter Empty (TEMT). When set to \"1\", there are no words remaining in the transmit FIFO or the transmit shift register. The transmitter is completely idle. +\n"
+"Bit 5 -> Transmitter Holding Register Empty (THRE). When set to \"1\", the FIFO (or holding register) now has room for at least one additional word to transmit. The transmitter may still be transmitting when this bit is set to \"1\". +\n"
+"Bit 4 -> Break Interrupt (BI). The receiver has detected a Break signal. +\n"
+"Bit 3 -> Framing Error (FE). A Start Bit was detected but the Stop Bit did not appear at the expected time. The received word is probably garbled. +\n"
+"Bit 2 -> Parity Error (PE). The parity bit was incorrect for the word received. +\n"
+"Bit 1 -> Overrun Error (OE). A new word was received and there was no room in the receive buffer. The newly-arrived word in the shift register is discarded. On 8250/16450 UARTs, the word in the holding register is discarded and the newly- arrived word is put in the holding register. +\n"
+"Bit 0 -> Data Ready (DR) One or more words are in the receive FIFO that the host may read. A word must be completely received and moved from the shift register into the FIFO (or holding register for 8250/16450 designs) before this bit is set."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:801
+#, no-wrap
+msgid "+0x06"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:811
+#, no-wrap
+msgid ""
+"Modem Status Register (MSR) +\n"
+"Bit 7 -> Data Carrier Detect (DCD). Reflects the state of the DCD line on the UART. +\n"
+"Bit 6 -> Ring Indicator (RI). Reflects the state of the RI line on the UART. +\n"
+"Bit 5 -> Data Set Ready (DSR). Reflects the state of the DSR line on the UART. +\n"
+"Bit 4 -> Clear To Send (CTS). Reflects the state of the CTS line on the UART. +\n"
+"Bit 3 -> Delta Data Carrier Detect (DDCD). Set to \"1\" if the -DCD line has changed state one more time since the last time the MSR was read by the host. +\n"
+"Bit 2 -> Trailing Edge Ring Indicator (TERI). Set to \"1\" if the -RI line has had a low to high transition since the last time the MSR was read by the host. +\n"
+"Bit 1 -> Delta Data Set Ready (DDSR). Set to \"1\" if the -DSR line has changed state one more time since the last time the MSR was read by the host. +\n"
+"Bit 0 -> Delta Clear To Send (DCTS). Set to \"1\" if the -CTS line has changed state one more time since the last time the MSR was read by the host. +"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:812
+#, no-wrap
+msgid "+0x07"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/serial-uart/_index.adoc:814
+#, no-wrap
+msgid "Scratch Register (SCR). This register performs no function in the UART. Any value can be written by the host to this location and read by the host later on."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/serial-uart/_index.adoc:816
+#, no-wrap
+msgid "Beyond the 16550A UART"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:821
+msgid ""
+"Although National Semiconductor has not offered any components compatible "
+"with the 16550 that provide additional features, various other vendors "
+"have. Some of these components are described below. It should be "
+"understood that to effectively utilize these improvements, drivers may have "
+"to be provided by the chip vendor since most of the popular operating "
+"systems do not support features beyond those provided by the 16550."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/serial-uart/_index.adoc:822
+#, no-wrap
+msgid "ST16650"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:825
+msgid ""
+"By default this part is similar to the NS16550A, but an extended 32-byte "
+"send and receive buffer can be optionally enabled. Made by StarTech."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/serial-uart/_index.adoc:826
+#, no-wrap
+msgid "TIL16660"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:829
+msgid ""
+"By default this part behaves similar to the NS16550A, but an extended 64-"
+"byte send and receive buffer can be optionally enabled. Made by Texas "
+"Instruments."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/articles/serial-uart/_index.adoc:830
+#, no-wrap
+msgid "Hayes ESP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:833
+msgid ""
+"This proprietary plug-in card contains a 2048-byte send and receive buffer, "
+"and supports data rates to 230.4Kbit/sec. Made by Hayes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:838
+msgid ""
+"In addition to these \"dumb\" UARTs, many vendors produce intelligent serial "
+"communication boards. This type of design usually provides a microprocessor "
+"that interfaces with several UARTs, processes and buffers the data, and then "
+"alerts the main PC processor when necessary. As the UARTs are not directly "
+"accessed by the PC processor in this type of communication system, it is not "
+"necessary for the vendor to use UARTs that are compatible with the 8250, "
+"16450, or the 16550 UART. This leaves the designer free to components that "
+"may have better performance characteristics."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/serial-uart/_index.adoc:840
+#, no-wrap
+msgid "Configuring the [.filename]#sio# driver"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:845
+msgid ""
+"The [.filename]#sio# driver provides support for NS8250-, NS16450-, NS16550 "
+"and NS16550A-based EIA RS-232C (CCITT V.24) communications interfaces. "
+"Several multiport cards are supported as well. See the man:sio[4] manual "
+"page for detailed technical documentation."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/serial-uart/_index.adoc:846
+#, no-wrap
+msgid "Digi International (DigiBoard) PC/8"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:849
+msgid "_Contributed by `{awebster}`. 26 August 1995._"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:853
+msgid ""
+"Here is a config snippet from a machine with a Digi International PC/8 with "
+"16550. It has 8 modems connected to these 8 lines, and they work just "
+"great. Do not forget to add `options COM_MULTIPORT` or it will not work "
+"very well!"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:864
+#, no-wrap
+msgid ""
+"device sio4 at isa? port 0x100 flags 0xb05\n"
+"device sio5 at isa? port 0x108 flags 0xb05\n"
+"device sio6 at isa? port 0x110 flags 0xb05\n"
+"device sio7 at isa? port 0x118 flags 0xb05\n"
+"device sio8 at isa? port 0x120 flags 0xb05\n"
+"device sio9 at isa? port 0x128 flags 0xb05\n"
+"device sio10 at isa? port 0x130 flags 0xb05\n"
+"device sio11 at isa? port 0x138 flags 0xb05 irq 9\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:867
+msgid ""
+"The trick in setting this up is that the MSB of the flags represent the last "
+"SIO port, in this case 11 so flags are 0xb05."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/serial-uart/_index.adoc:868
+#, no-wrap
+msgid "Boca 16"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:871
+msgid "_Contributed by `{whiteside}`. 26 August 1995._"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:873
+msgid ""
+"The procedures to make a Boca 16 port board with FreeBSD are pretty "
+"straightforward, but you will need a couple things to make it work:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:875
+msgid ""
+"You either need the kernel sources installed so you can recompile the "
+"necessary options or you will need someone else to compile it for you. The "
+"2.0.5 default kernel does _not_ come with multiport support enabled and you "
+"will need to add a device entry for each port anyways."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:876
+msgid ""
+"Two, you will need to know the interrupt and IO setting for your Boca Board "
+"so you can set these options properly in the kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:880
+msgid ""
+"One important note - the actual UART chips for the Boca 16 are in the "
+"connector box, not on the internal board itself. So if you have it "
+"unplugged, probes of those ports will fail. I have never tested booting "
+"with the box unplugged and plugging it back in, and I suggest you do not "
+"either."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:883
+msgid ""
+"If you do not already have a custom kernel configuration file set up, refer "
+"to extref:{handbook}[Kernel Configuration, kernelconfig] chapter of the "
+"FreeBSD Handbook for general procedures. The following are the specifics "
+"for the Boca 16 board and assume you are using the kernel name MYKERNEL and "
+"editing with vi."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:887
+msgid "Add the line"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:891
+#, no-wrap
+msgid "options COM_MULTIPORT\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:893
+msgid "to the config file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:894
+msgid ""
+"Where the current `device sio__n__` lines are, you will need to add 16 more "
+"devices. The following example is for a Boca Board with an interrupt of 3, "
+"and a base IO address 100h. The IO address for Each port is +8 hexadecimal "
+"from the previous port, thus the 100h, 108h, 110h... addresses."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:904
+#, no-wrap
+msgid ""
+"device sio1 at isa? port 0x100 flags 0x1005\n"
+"device sio2 at isa? port 0x108 flags 0x1005\n"
+"device sio3 at isa? port 0x110 flags 0x1005\n"
+"device sio4 at isa? port 0x118 flags 0x1005\n"
+"...\n"
+"device sio15 at isa? port 0x170 flags 0x1005\n"
+"device sio16 at isa? port 0x178 flags 0x1005 irq 3\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:909
+msgid ""
+"The flags entry _must_ be changed from this example unless you are using the "
+"exact same sio assignments. Flags are set according to 0x``__MYY__`` where "
+"_M_ indicates the minor number of the master port (the last port on a Boca "
+"16) and _YY_ indicates if FIFO is enabled or disabled(enabled), IRQ sharing "
+"is used(yes) and if there is an AST/4 compatible IRQ control register(no). "
+"In this example,"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:914
+#, no-wrap
+msgid ""
+" flags\n"
+"\t 0x1005\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:918
+msgid ""
+"indicates that the master port is sio16. If I added another board and "
+"assigned sio17 through sio28, the flags for all 16 ports on _that_ board "
+"would be 0x1C05, where 1C indicates the minor number of the master port. Do "
+"not change the 05 setting."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:919
+msgid ""
+"Save and complete the kernel configuration, recompile, install and reboot. "
+"Presuming you have successfully installed the recompiled kernel and have it "
+"set to the correct address and IRQ, your boot message should indicate the "
+"successful probe of the Boca ports as follows: (obviously the sio numbers, "
+"IO and IRQ could be different)"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:954
+#, no-wrap
+msgid ""
+"sio1 at 0x100-0x107 flags 0x1005 on isa\n"
+"sio1: type 16550A (multiport)\n"
+"sio2 at 0x108-0x10f flags 0x1005 on isa\n"
+"sio2: type 16550A (multiport)\n"
+"sio3 at 0x110-0x117 flags 0x1005 on isa\n"
+"sio3: type 16550A (multiport)\n"
+"sio4 at 0x118-0x11f flags 0x1005 on isa\n"
+"sio4: type 16550A (multiport)\n"
+"sio5 at 0x120-0x127 flags 0x1005 on isa\n"
+"sio5: type 16550A (multiport)\n"
+"sio6 at 0x128-0x12f flags 0x1005 on isa\n"
+"sio6: type 16550A (multiport)\n"
+"sio7 at 0x130-0x137 flags 0x1005 on isa\n"
+"sio7: type 16550A (multiport)\n"
+"sio8 at 0x138-0x13f flags 0x1005 on isa\n"
+"sio8: type 16550A (multiport)\n"
+"sio9 at 0x140-0x147 flags 0x1005 on isa\n"
+"sio9: type 16550A (multiport)\n"
+"sio10 at 0x148-0x14f flags 0x1005 on isa\n"
+"sio10: type 16550A (multiport)\n"
+"sio11 at 0x150-0x157 flags 0x1005 on isa\n"
+"sio11: type 16550A (multiport)\n"
+"sio12 at 0x158-0x15f flags 0x1005 on isa\n"
+"sio12: type 16550A (multiport)\n"
+"sio13 at 0x160-0x167 flags 0x1005 on isa\n"
+"sio13: type 16550A (multiport)\n"
+"sio14 at 0x168-0x16f flags 0x1005 on isa\n"
+"sio14: type 16550A (multiport)\n"
+"sio15 at 0x170-0x177 flags 0x1005 on isa\n"
+"sio15: type 16550A (multiport)\n"
+"sio16 at 0x178-0x17f irq 3 flags 0x1005 on isa\n"
+"sio16: type 16550A (multiport master)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:957
+msgid "If the messages go by too fast to see,"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:961
+#, no-wrap
+msgid "# dmesg | more\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:963
+msgid "will show you the boot messages."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:964
+msgid ""
+"Next, appropriate entries in [.filename]#/dev# for the devices must be made "
+"using the [.filename]#/dev/MAKEDEV# script. This step can be omitted if you "
+"are running FreeBSD 5.X with a kernel that has man:devfs[5] support compiled "
+"in."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:966
+msgid ""
+"If you do need to create the [.filename]#/dev# entries, run the following as "
+"`root`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:972
+#, no-wrap
+msgid ""
+"# cd /dev\n"
+"# ./MAKEDEV tty1\n"
+"# ./MAKEDEV cua1\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:976
+#, no-wrap
+msgid ""
+"(everything in between)\n"
+"# ./MAKEDEV ttyg\n"
+"# ./MAKEDEV cuag\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:979
+msgid ""
+"If you do not want or need call-out devices for some reason, you can "
+"dispense with making the [.filename]#cua*# devices."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:980
+msgid ""
+"If you want a quick and sloppy way to make sure the devices are working, you "
+"can simply plug a modem into each port and (as root)"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:984
+#, no-wrap
+msgid "# echo at > ttyd*\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:986
+msgid ""
+"for each device you have made. You _should_ see the RX lights flash for each "
+"working port."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/serial-uart/_index.adoc:988
+#, no-wrap
+msgid "Support for Cheap Multi-UART Cards"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:991
+msgid ""
+"_Contributed by Helge Oldach_ mailto:hmo@sep.hamburg.com[hmo@sep.hamburg."
+"com], September 1999"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:993
+msgid ""
+"Ever wondered about FreeBSD support for your 20$ multi-I/O card with two (or "
+"more) COM ports, sharing IRQs? Here is how:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:997
+msgid ""
+"Usually the only option to support these kind of boards is to use a distinct "
+"IRQ for each port. For example, if your CPU board has an on-board [."
+"filename]#COM1# port (aka [.filename]#sio0#-I/O address 0x3F8 and IRQ 4) and "
+"you have an extension board with two UARTs, you will commonly need to "
+"configure them as [.filename]#COM2# (aka [.filename]#sio1#-I/O address 0x2F8 "
+"and IRQ 3), and the third port (aka [.filename]#sio2#) as I/O 0x3E8 and IRQ "
+"5. Obviously this is a waste of IRQ resources, as it should be basically "
+"possible to run both extension board ports using a single IRQ with the "
+"`COM_MULTIPORT` configuration described in the previous sections."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:999
+msgid ""
+"Such cheap I/O boards commonly have a 4 by 3 jumper matrix for the COM "
+"ports, similar to the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1008
+#, no-wrap
+msgid ""
+" o o o *\n"
+"Port A |\n"
+" o * o *\n"
+"Port B |\n"
+" o * o o\n"
+"IRQ 2 3 4 5\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:1012
+msgid ""
+"Shown here is port A wired for IRQ 5 and port B wired for IRQ 3. The IRQ "
+"columns on your specific board may vary-other boards may supply jumpers for "
+"IRQs 3, 4, 5, and 7 instead."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:1016
+msgid ""
+"One could conclude that wiring both ports for IRQ 3 using a handcrafted wire-"
+"made jumper covering all three connection points in the IRQ 3 column would "
+"solve the issue, but no. You cannot duplicate IRQ 3 because the output "
+"drivers of each UART are wired in a \"totem pole\" fashion, so if one of the "
+"UARTs drives IRQ 3, the output signal will not be what you would expect. "
+"Depending on the implementation of the extension board or your motherboard, "
+"the IRQ 3 line will continuously stay up, or always stay low."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:1020
+msgid ""
+"You need to decouple the IRQ drivers for the two UARTs, so that the IRQ line "
+"of the board only goes up if (and only if) one of the UARTs asserts a IRQ, "
+"and stays low otherwise. The solution was proposed by Joerg Wunsch mailto:"
+"j@ida.interface-business.de[j@ida.interface-business.de]: To solder up a "
+"wired-or consisting of two diodes (Germanium or Schottky-types strongly "
+"preferred) and a 1 kOhm resistor. Here is the schematic, starting from the "
+"4 by 3 jumper field above:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1034
+#, no-wrap
+msgid ""
+" Diode\n"
+" +---------->|-------+\n"
+" / |\n"
+" o * o o | 1 kOhm\n"
+"Port A +----|######|-------+\n"
+" o * o o | |\n"
+"Port B `-------------------+ ==+==\n"
+" o * o o | Ground\n"
+" \\ |\n"
+" +--------->|-------+\n"
+"IRQ 2 3 4 5 Diode\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:1038
+msgid ""
+"The cathodes of the diodes are connected to a common point, together with a "
+"1 kOhm pull-down resistor. It is essential to connect the resistor to "
+"ground to avoid floating of the IRQ line on the bus."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:1041
+msgid ""
+"Now we are ready to configure a kernel. Staying with this example, we would "
+"configure:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1050
+#, no-wrap
+msgid ""
+"# standard on-board COM1 port\n"
+"device sio0 at isa? port \"IO_COM1\" flags 0x10\n"
+"# patched-up multi-I/O extension board\n"
+"options COM_MULTIPORT\n"
+"device sio1 at isa? port \"IO_COM2\" flags 0x205\n"
+"device sio2 at isa? port \"IO_COM3\" flags 0x205 irq 3\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:1055
+msgid ""
+"Note that the `flags` setting for [.filename]#sio1# and [.filename]#sio2# is "
+"truly essential; refer to man:sio[4] for details. (Generally, the `2` in "
+"the \"flags\" attribute refers to [.filename]#sio#`2` which holds the IRQ, "
+"and you surely want a `5` low nibble.) With kernel verbose mode turned on "
+"this should yield something similar to this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1067
+#, no-wrap
+msgid ""
+"sio0: irq maps: 0x1 0x11 0x1 0x1\n"
+"sio0 at 0x3f8-0x3ff irq 4 flags 0x10 on isa\n"
+"sio0: type 16550A\n"
+"sio1: irq maps: 0x1 0x9 0x1 0x1\n"
+"sio1 at 0x2f8-0x2ff flags 0x205 on isa\n"
+"sio1: type 16550A (multiport)\n"
+"sio2: irq maps: 0x1 0x9 0x1 0x1\n"
+"sio2 at 0x3e8-0x3ef irq 3 flags 0x205 on isa\n"
+"sio2: type 16550A (multiport master)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:1072
+msgid ""
+"Though [.filename]#/sys/i386/isa/sio.c# is somewhat cryptic with its use of "
+"the \"irq maps\" array above, the basic idea is that you observe `0x1` in "
+"the first, third, and fourth place. This means that the corresponding IRQ "
+"was set upon output and cleared after, which is just what we would expect. "
+"If your kernel does not display this behavior, most likely there is "
+"something wrong with your wiring."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/serial-uart/_index.adoc:1074
+#, no-wrap
+msgid "Configuring the [.filename]#cy# driver"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:1077
+msgid "_Contributed by Alex Nash. 6 June 1996._"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:1080
+msgid ""
+"The Cyclades multiport cards are based on the [.filename]#cy# driver instead "
+"of the usual [.filename]#sio# driver used by other multiport cards. "
+"Configuration is a simple matter of:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1084
+msgid ""
+"Add the [.filename]#cy# device to your kernel configuration (note that your "
+"irq and iomem settings may differ)."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1088
+#, no-wrap
+msgid "device cy0 at isa? irq 10 iomem 0xd4000 iosiz 0x2000\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:1090
+msgid "Rebuild and install the new kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:1091
+msgid ""
+"Make the device nodes by typing (the following example assumes an 8-port "
+"board):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1096
+#, no-wrap
+msgid ""
+"# cd /dev\n"
+"# for i in 0 1 2 3 4 5 6 7;do ./MAKEDEV cuac$i ttyc$i;done\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:1099
+msgid ""
+"If appropriate, add dialup entries to [.filename]#/etc/ttys# by duplicating "
+"serial device (`ttyd`) entries and using `ttyc` in place of `ttyd`. For "
+"example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1107
+#, no-wrap
+msgid ""
+"ttyc0 \"/usr/libexec/getty std.38400\" unknown on insecure\n"
+"ttyc1 \"/usr/libexec/getty std.38400\" unknown on insecure\n"
+"ttyc2 \"/usr/libexec/getty std.38400\" unknown on insecure\n"
+"...\n"
+"ttyc7 \"/usr/libexec/getty std.38400\" unknown on insecure\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:1109
+msgid "Reboot with the new kernel."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/serial-uart/_index.adoc:1111
+#, no-wrap
+msgid "Configuring the [.filename]#si# driver"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1114
+msgid "_Contributed by `{nsayer}`. 25 March 1998._"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1118
+msgid ""
+"The Specialix SI/XIO and SX multiport cards use the [.filename]#si# driver. "
+"A single machine can have up to 4 host cards. The following host cards are "
+"supported:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1120
+msgid "ISA SI/XIO host card (2 versions)"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1121
+msgid "EISA SI/XIO host card"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1122
+msgid "PCI SI/XIO host card"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1123
+msgid "ISA SX host card"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1124
+msgid "PCI SX host card"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1130
+msgid ""
+"Although the SX and SI/XIO host cards look markedly different, their "
+"functionality are basically the same. The host cards do not use I/O "
+"locations, but instead require a 32K chunk of memory. The factory "
+"configuration for ISA cards places this at `0xd0000-0xd7fff`. They also "
+"require an IRQ. PCI cards will, of course, auto-configure themselves."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1134
+msgid ""
+"You can attach up to 4 external modules to each host card. The external "
+"modules contain either 4 or 8 serial ports. They come in the following "
+"varieties:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1136
+msgid "SI 4 or 8 port modules. Up to 57600 bps on each port supported."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1137
+msgid ""
+"XIO 8 port modules. Up to 115200 bps on each port supported. One type of XIO "
+"module has 7 serial and 1 parallel port."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1138
+msgid ""
+"SXDC 8 port modules. Up to 921600 bps on each port supported. Like XIO, a "
+"module is available with one parallel port as well."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1140
+msgid ""
+"To configure an ISA host card, add the following line to your kernel "
+"configuration file, changing the numbers as appropriate:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1144
+#, no-wrap
+msgid "device si0 at isa? iomem 0xd0000 irq 11\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:1147
+msgid ""
+"Valid IRQ numbers are 9, 10, 11, 12 and 15 for SX ISA host cards and 11, 12 "
+"and 15 for SI/XIO ISA host cards."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:1149
+msgid "To configure an EISA or PCI host card, use this line:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1153
+#, no-wrap
+msgid "device si0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:1156
+msgid ""
+"After adding the configuration entry, rebuild and install your new kernel."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1160
+msgid ""
+"The following step, is not necessary if you are using man:devfs[5] in "
+"FreeBSD 5._X_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:1165
+msgid ""
+"After rebooting with the new kernel, you need to make the device nodes in [."
+"filename]#/dev#. The [.filename]#MAKEDEV# script will take care of this for "
+"you. Count how many total ports you have and type:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1170
+#, no-wrap
+msgid ""
+"# cd /dev\n"
+"# ./MAKEDEV ttyAnn cuaAnn\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:1173
+msgid "(where _nn_ is the number of ports)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:1175
+msgid ""
+"If you want login prompts to appear on these ports, you will need to add "
+"lines like this to [.filename]#/etc/ttys#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/serial-uart/_index.adoc:1179
+#, no-wrap
+msgid "ttyA01 \"/usr/libexec/getty std.9600\" vt100 on insecure\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/serial-uart/_index.adoc:1182
+msgid ""
+"Change the terminal type as appropriate. For modems, `dialup` or `unknown` "
+"is fine."
+msgstr ""
diff --git a/documentation/content/en/articles/solid-state/_index.adoc b/documentation/content/en/articles/solid-state/_index.adoc
index 2309a9193b..1c019fb8a1 100644
--- a/documentation/content/en/articles/solid-state/_index.adoc
+++ b/documentation/content/en/articles/solid-state/_index.adoc
@@ -88,9 +88,7 @@ You should make sure the following lines exist in your kernel configuration file
[.programlisting]
....
-options MFS # Memory Filesystem
options MD_ROOT # md device usable as a potential root device
-pseudo-device md # memory disk
....
[[ro-fs]]
diff --git a/documentation/content/en/articles/solid-state/_index.po b/documentation/content/en/articles/solid-state/_index.po
new file mode 100644
index 0000000000..4c0a9f35bc
--- /dev/null
+++ b/documentation/content/en/articles/solid-state/_index.po
@@ -0,0 +1,651 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-07-15 16:42-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:45
+msgid "Abstract"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/solid-state/_index.adoc:78
+#, no-wrap
+msgid "Kernel Options"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:92
+#, no-wrap
+msgid "options MD_ROOT # md device usable as a potential root device\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/solid-state/_index.adoc:95
+#, no-wrap
+msgid "The `rc` Subsystem and Read-Only Filesystems"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:98
+msgid ""
+"The post-boot initialization of an embedded FreeBSD system is controlled by "
+"[.filename]#/etc/rc.initdiskless#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:102
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:106
+#, no-wrap
+msgid "varsize=8192\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:109
+msgid "Remember that this value is in sectors by default."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:116
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:121
+#, no-wrap
+msgid ""
+"# Device Mountpoint FStype Options Dump Pass#\n"
+"/dev/ad0s1a / ufs ro 1 1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:126
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:128
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:132
+#, no-wrap
+msgid "# /sbin/mount -uw partition\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:135
+msgid "and can be toggled back to read-only with the command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:139
+#, no-wrap
+msgid "# /sbin/mount -ur partition\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/solid-state/_index.adoc:141
+#, no-wrap
+msgid "Building a File System from Scratch"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:144
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:147
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:153
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:157
+msgid "Partitioning Your Flash Media Device"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:167
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:168
+msgid "Creating Filesystems on Your Flash Memory Device"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:171
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:175
+#, no-wrap
+msgid "# disklabel -e /dev/ad0c\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:179
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:183
+#, no-wrap
+msgid "a: 123456 0 4.2BSD 0 0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:188
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:193
+#, no-wrap
+msgid ""
+"# disklabel -B -r /dev/ad0c\n"
+"# newfs /dev/ad0a\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:196
+msgid "Placing Your Filesystem on the Flash Media"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:198
+msgid "Mount the newly prepared flash media:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:202
+#, no-wrap
+msgid "# mount /dev/ad0a /flash\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:206
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:211
+#, no-wrap
+msgid ""
+"# ifconfig xl0 192.168.0.10 netmask 255.255.255.0\n"
+"# route add default 192.168.0.1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:217
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:221
+#, no-wrap
+msgid "ftp> get tarfile.tar \"| tar xvf -\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:224
+msgid "If your tarfile is gzipped, you can accomplish this as well:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:228
+#, no-wrap
+msgid "ftp> get tarfile.tar \"| zcat | tar xvf -\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:231
+msgid ""
+"After the contents of your tarred filesystem are on your flash memory "
+"filesystem, you can unmount the flash memory and reboot:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:237
+#, no-wrap
+msgid ""
+"# cd /\n"
+"# umount /flash\n"
+"# exit\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:240
+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 ""
+
+#. type: Title ==
+#: documentation/content/en/articles/solid-state/_index.adoc:243
+#, no-wrap
+msgid "System Strategies for Small and Read Only Environments"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:247
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/solid-state/_index.adoc:248
+#, no-wrap
+msgid "Cron"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:251
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:256
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/solid-state/_index.adoc:257
+#, no-wrap
+msgid "Syslog"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:262
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:267
+#, no-wrap
+msgid ""
+"# touch /var/log/security /var/log/maillog /var/log/cron /var/log/messages\n"
+"# chmod 0644 /var/log/*\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/solid-state/_index.adoc:269
+#, no-wrap
+msgid "Ports Installation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:274
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:277
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:280
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:284
+#, no-wrap
+msgid "# mkdir /etc/pkg\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:287
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:291
+#, no-wrap
+msgid "# ln -s /etc/pkg /var/db/pkg\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:294
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/articles/solid-state/_index.adoc:295
+#, no-wrap
+msgid "Apache Web Server"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:301
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:307
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:309
+msgid ""
+"First, add the directory `log/apache` to the list of directories to be "
+"created in [.filename]#/etc/rc.d/var#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:311
+msgid ""
+"Second, add these commands to [.filename]#/etc/rc.d/var# after the directory "
+"creation section:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:316
+#, no-wrap
+msgid ""
+"# chmod 0774 /var/log/apache\n"
+"# chown nobody:nobody /var/log/apache\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:319
+msgid ""
+"Finally, remove the existing [.filename]#apache_log_dir# directory, and "
+"replace it with a link:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:324
+#, no-wrap
+msgid ""
+"# rm -rf apache_log_dir\n"
+"# ln -s /var/log/apache apache_log_dir\n"
+msgstr ""
diff --git a/documentation/content/en/articles/vinum/_index.adoc b/documentation/content/en/articles/vinum/_index.adoc
index f6b0baea11..0583ae94a7 100644
--- a/documentation/content/en/articles/vinum/_index.adoc
+++ b/documentation/content/en/articles/vinum/_index.adoc
@@ -68,7 +68,7 @@ This chapter provides an overview of potential problems with traditional disk st
[NOTE]
====
-Starting with FreeBSD 5, [.filename]#vinum# has been rewritten in order to fit into the extref:{handbook}[GEOM architecture, geom], while retaining the original ideas, terminology, and on-disk metadata.
+Starting with FreeBSD 5, [.filename]#vinum# has been rewritten to 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 `gvinum`.
The name of the kernel module has changed from the original [.filename]#vinum.ko# to [.filename]#geom_vinum.ko#, and all device nodes reside under [.filename]#/dev/gvinum# instead of [.filename]#/dev/vinum#.
@@ -158,7 +158,7 @@ If one drive fails, the array can continue to operate in degraded mode where a r
[[vinum-objects]]
== [.filename]#vinum# Objects
-In order to address these problems, [.filename]#vinum# implements a four-level hierarchy of objects:
+To address these problems, [.filename]#vinum# implements a four-level hierarchy of objects:
* 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 some minor differences. For one, they have no size limitations.
* 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 plexes as individual disks in a mirrored array, each containing the same data.
@@ -186,7 +186,7 @@ As long as at least one plex can provide the data for the complete address range
[.filename]#vinum# implements both concatenation and striping at the plex level:
* 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 subdisks, and the subdisks may be of different length. The plex may be extended by adding additional subdisks. They require less CPU time than striped plexes, though the difference in CPU overhead is not measurable. On the other hand, they are most susceptible to hot spots, where one disk is very active and others are idle.
-* 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 distinguish it from a concatenated plex. The greatest advantage of striped plexes is that they reduce hot spots. By choosing an optimum sized stripe, about 256 kB, the load can be evened out on the component drives. Extending a plex by adding new subdisks is so complicated that [.filename]#vinum# does not implement it.
+* 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 to distinguish it from a concatenated plex. The greatest advantage of striped plexes is that they reduce hot spots. By choosing an optimum sized stripe, about 256 kB, the load can be evened out on the component drives. Extending a plex by adding new subdisks is so complicated that [.filename]#vinum# does not implement it.
<<vinum-comparison, [.filename]#vinum# Plex Organizations>> summarizes the advantages and disadvantages of each plex organization.
@@ -484,7 +484,7 @@ For example, a disk drive may have a name like [.filename]#/dev/ad0a# or [.filen
These names represent the first partition ([.filename]#a#) on the first (0) IDE disk ([.filename]#ad#) and the eighth partition ([.filename]#h#) on the third (2) SCSI disk ([.filename]#da#) respectively.
By contrast, a [.filename]#vinum# volume might be called [.filename]#/dev/gvinum/concat#, which has no relationship with a partition name.
-In order to create a file system on this volume, use man:newfs[8]:
+To create a file system on this volume, use man:newfs[8]:
[source,shell]
....
@@ -582,7 +582,7 @@ Each single subdisk within these plexes needs its own `a` partition illusion, fo
It is not strictly needed that each of these faked `a` partitions is located at the same offset within its device, compared with other devices containing plexes of the root volume.
However, it is probably a good idea to create the [.filename]#vinum# volumes that way so the resulting mirrored devices are symmetric, to avoid confusion.
-In order to set up these `a` partitions for each device containing part of the root volume, the following is required:
+To set up these `a` partitions for each device containing part of the root volume, the following is required:
[.procedure]
====
@@ -594,7 +594,7 @@ In order to set up these `a` partitions for each device containing part of the r
....
+
[.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 `bsdlabel`.
+They must be divided by 512 to obtain the block numbers that are to be used by `bsdlabel`.
. Run this command for each device that participates in the root volume:
+
[source,shell]
@@ -713,4 +713,4 @@ So if a [.filename]#vinum# partition was started at offset 0 within a slice or d
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 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 to recover all the data by entering exactly the same [.filename]#vinum# configuration data again, the situation is hard to fix.
-It is necessary to move the entire [.filename]#vinum# partition by at least 4 KB, in order to have the [.filename]#vinum# header and the system bootstrap no longer collide.
+It is necessary to move the entire [.filename]#vinum# partition by at least 4 KB, to have the [.filename]#vinum# header and the system bootstrap no longer collide.
diff --git a/documentation/content/en/articles/vinum/_index.po b/documentation/content/en/articles/vinum/_index.po
new file mode 100644
index 0000000000..ed9a0c336e
--- /dev/null
+++ b/documentation/content/en/articles/vinum/_index.po
@@ -0,0 +1,1652 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-05-21 14:43-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/vinum/_index.adoc:1
+#, no-wrap
+msgid "The vinum Volume Manager in FreeBSD"
+msgstr ""
+
+#. 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:19
+#, no-wrap
+msgid "The vinum Volume Manager"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vinum/_index.adoc:51
+msgid "'''"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/vinum/_index.adoc:55
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"requirements. While disks are getting bigger, so are data storage "
+"requirements. Often a file system is needed that is bigger than a disk's "
+"capacity. Various solutions to these problems have been proposed and "
+"implemented."
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"Redundant Array of Independent Disks RAID systems, the base FreeBSD system "
+"includes the [.filename]#vinum# volume manager, a block device driver that "
+"implements virtual disk drives and addresses these three problems. [."
+"filename]#vinum# provides more flexibility, performance, and reliability "
+"than traditional disk storage and implements `RAID`-0, `RAID`-1, and "
+"`RAID`-5 models, both individually and in combination."
+msgstr ""
+
+#. type: Plain text
+#: 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."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/vinum/_index.adoc:76
+msgid ""
+"Starting with FreeBSD 5, [.filename]#vinum# has been rewritten to 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 `gvinum`. The name of the "
+"kernel module has changed from the original [.filename]#vinum.ko# to [."
+"filename]#geom_vinum.ko#, and all device nodes reside under [.filename]#/dev/"
+"gvinum# instead of [.filename]#/dev/vinum#. As of FreeBSD 6, the original [."
+"filename]#vinum# implementation is no longer available in the code base."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/vinum/_index.adoc:79
+#, no-wrap
+msgid "Access Bottlenecks"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"concurrent sessions and have multiple 100 Mbit/s connections to the outside "
+"world, well beyond the sustained transfer rate of most disks."
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"processes access a drive, and where they may achieve only a fraction of "
+"these values. In such cases, it is more interesting to view the problem "
+"from the viewpoint of the disk subsystem. The important parameter is the "
+"load that a transfer places on the subsystem, or the time for which a "
+"transfer occupies the drives involved in the transfer."
+msgstr ""
+
+#. type: Plain text
+#: 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. "
+"These actions can be considered to be atomic as it does not make any sense "
+"to interrupt them."
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"3.5 ms. The fastest drives spin at 15,000 rpm, so the average rotational "
+"latency (half a revolution) is 2 ms. At 70 MB/s, the transfer itself takes "
+"about 150 μs, almost nothing compared to the positioning time. In such a "
+"case, the effective transfer rate drops to a little over 1 MB/s and is "
+"clearly highly dependent on the transfer size."
+msgstr ""
+
+#. type: Plain text
+#: 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 same aggregate storage space. Each disk is capable of positioning and "
+"transferring independently, so the effective throughput increases by a "
+"factor close to the number of disks used."
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"is no way to ensure that the requests are evenly distributed across the "
+"drives. Inevitably the load on one drive will be higher than on another."
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"convenient to think of the disk storage as a large number of data sectors "
+"which are addressable by number, rather like the pages in a book. The most "
+"obvious method is to divide the virtual disk into groups of consecutive "
+"sectors the size of the individual physical disks and store them in this "
+"manner, rather like taking a large book and tearing it into smaller "
+"sections. This method is called _concatenation_ and has the advantage that "
+"the disks are not required to have any specific size relationships. It "
+"works well when the access to the virtual disk is spread evenly about its "
+"address space. When access is concentrated on a smaller area, the "
+"improvement is less marked. <<vinum-concat, Concatenated Organization>> "
+"illustrates the sequence in which storage units are allocated in a "
+"concatenated organization."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/articles/vinum/_index.adoc:112
+#, no-wrap
+msgid "Concatenated Organization"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/articles/vinum/_index.adoc:113
+#, no-wrap
+msgid "vinum-concat.png"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"example, the first 256 sectors may be stored on the first disk, the next 256 "
+"sectors on the next disk and so on. After filling the last disk, the "
+"process repeats until the disks are full. This mapping is called _striping_ "
+"or RAID-0."
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"effort to locate the data, and it can cause additional I/O load where a "
+"transfer is spread over multiple disks, but it can also provide a more "
+"constant load across the disks. <<vinum-striped, Striped Organization>> "
+"illustrates the sequence in which storage units are allocated in a striped "
+"organization."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/articles/vinum/_index.adoc:125
+#, no-wrap
+msgid "Striped Organization"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/articles/vinum/_index.adoc:126
+#, no-wrap
+msgid "vinum-striped.png"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/vinum/_index.adoc:129
+#, no-wrap
+msgid "Data Integrity"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"are still the most likely core component of a server to fail. When they do, "
+"the results can be catastrophic and replacing a failed disk drive and "
+"restoring data can result in server downtime."
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"writes to both disks; a read can be satisfied from either, so if one drive "
+"fails, the data is still available on the other drive."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vinum/_index.adoc:139
+msgid "Mirroring has two problems:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vinum/_index.adoc:141
+msgid "It requires twice as much disk storage as a non-redundant solution."
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"can even be faster."
+msgstr ""
+
+#. type: Plain text
+#: 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 [."
+"filename]#vinum#, it is a variant on a striped organization which dedicates "
+"one block of each stripe to parity one of the other blocks. As implemented "
+"by [.filename]#vinum#, a `RAID-5` plex is similar to a striped plex, except "
+"that it implements `RAID-5` by including a parity block in each stripe. As "
+"required by `RAID-5`, the location of this parity block changes from one "
+"stripe to the next. The numbers in the data blocks indicate the relative "
+"block numbers."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/articles/vinum/_index.adoc:151
+#, no-wrap
+msgid "`RAID`-5 Organization"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/articles/vinum/_index.adoc:152
+#, no-wrap
+msgid "vinum-raid5-org.png"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"organizations, but write access is significantly slower, approximately 25% "
+"of the read performance. If one drive fails, the array can continue to "
+"operate in degraded mode where a read from one of the remaining accessible "
+"drives continues normally, but a read from the failed drive is recalculated "
+"from the corresponding block from all the remaining drives."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/vinum/_index.adoc:159
+#, no-wrap
+msgid "[.filename]#vinum# Objects"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vinum/_index.adoc:162
+msgid ""
+"To address these problems, [.filename]#vinum# implements a four-level "
+"hierarchy of objects:"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"some minor differences. For one, they have no size limitations."
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"plexes as individual disks in a mirrored array, each containing the same "
+"data."
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"multi-disk plexes. In fact, this turns out to be too inflexible as UNIX(R) "
+"disks can have only a limited number of partitions. Instead, [."
+"filename]#vinum# subdivides a single UNIX(R) partition, the _drive_, into "
+"contiguous areas called _subdisks_, which are used as building blocks for "
+"plexes."
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"exception of a small area at the beginning of the drive, which is used for "
+"storing configuration and state information, the entire drive is available "
+"for data storage."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vinum/_index.adoc:169
+msgid ""
+"The following sections describe the way these objects provide the "
+"functionality required of [.filename]#vinum#."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/vinum/_index.adoc:170
+#, no-wrap
+msgid "Volume Size Considerations"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"drive does not limit the size of a plex or a volume."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/vinum/_index.adoc:175
+#, no-wrap
+msgid "Redundant Data Storage"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"may contain between one and eight plexes."
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"not defining a subdisk for parts of the plex) or by accident (as a result of "
+"the failure of a drive). As long as at least one plex can provide the data "
+"for the complete address range of the volume, the volume is fully functional."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/vinum/_index.adoc:184
+#, no-wrap
+msgid "Which Plex Organization?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vinum/_index.adoc:187
+msgid ""
+"[.filename]#vinum# implements both concatenation and striping at the plex "
+"level:"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"subdisks, and the subdisks may be of different length. The plex may be "
+"extended by adding additional subdisks. They require less CPU time than "
+"striped plexes, though the difference in CPU overhead is not measurable. On "
+"the other hand, they are most susceptible to hot spots, where one disk is "
+"very active and others are idle."
+msgstr ""
+
+#. type: Plain text
+#: 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 to distinguish it "
+"from a concatenated plex. The greatest advantage of striped plexes is that "
+"they reduce hot spots. By choosing an optimum sized stripe, about 256 kB, "
+"the load can be evened out on the component drives. Extending a plex by "
+"adding new subdisks is so complicated that [.filename]#vinum# does not "
+"implement it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vinum/_index.adoc:192
+msgid ""
+"<<vinum-comparison, [.filename]#vinum# Plex Organizations>> summarizes the "
+"advantages and disadvantages of each plex organization."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/articles/vinum/_index.adoc:194
+#, no-wrap
+msgid "[.filename]#vinum# Plex Organizations"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/vinum/_index.adoc:198
+#, no-wrap
+msgid "Plex type"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/vinum/_index.adoc:199
+#, no-wrap
+msgid "Minimum subdisks"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/vinum/_index.adoc:200
+#, no-wrap
+msgid "Can add subdisks"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/vinum/_index.adoc:201
+#, no-wrap
+msgid "Must be equal size"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/vinum/_index.adoc:203
+#, no-wrap
+msgid "Application"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/vinum/_index.adoc:204
+#, no-wrap
+msgid "concatenated"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/vinum/_index.adoc:205
+#, no-wrap
+msgid "1"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/vinum/_index.adoc:206
+#: documentation/content/en/articles/vinum/_index.adoc:213
+#, no-wrap
+msgid "yes"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/vinum/_index.adoc:207
+#: documentation/content/en/articles/vinum/_index.adoc:212
+#, no-wrap
+msgid "no"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/vinum/_index.adoc:209
+#, no-wrap
+msgid "Large data storage with maximum placement flexibility and moderate performance"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/vinum/_index.adoc:210
+#, no-wrap
+msgid "striped"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/vinum/_index.adoc:211
+#, no-wrap
+msgid "2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/articles/vinum/_index.adoc:214
+#, no-wrap
+msgid "High performance in combination with highly concurrent access"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/vinum/_index.adoc:217
+#, no-wrap
+msgid "Some Examples"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"configuration database from one or more configuration files using man:"
+"gvinum[8]. [.filename]#vinum# stores a copy of its configuration database "
+"on each disk _device_ under its control. This database is updated on each "
+"state change, so that a restart accurately restores the state of each [."
+"filename]#vinum# object."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/vinum/_index.adoc:224
+#, no-wrap
+msgid "The Configuration File"
+msgstr ""
+
+#. type: Plain text
+#: 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:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:235
+#, no-wrap
+msgid ""
+" drive a device /dev/da3h\n"
+" volume myvol\n"
+" plex org concat\n"
+" sd length 512m drive a\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vinum/_index.adoc:238
+msgid "This file describes four [.filename]#vinum# objects:"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"separation of symbolic names from device names allows disks to be moved from "
+"one location to another without confusion."
+msgstr ""
+
+#. type: Plain text
+#: 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_."
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"automatically generates a name from the volume name by adding the suffix _."
+"px_, where _x_ is the number of the plex in the volume. Thus this plex will "
+"be called _myvol.p0_."
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"necessary as the system automatically assigns names derived from the plex "
+"name by adding the suffix _.sx_, where _x_ is the number of the subdisk in "
+"the plex. Thus [.filename]#vinum# gives this subdisk the name _myvol.p0.s0_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vinum/_index.adoc:245
+msgid ""
+"After processing this file, man:gvinum[8] produces the following output:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:255
+#, no-wrap
+msgid ""
+"# gvinum -> create config1\n"
+"Configuration summary\n"
+"Drives: 1 (4 configured)\n"
+"Volumes: 1 (4 configured)\n"
+"Plexes: 1 (8 configured)\n"
+"Subdisks: 1 (16 configured)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:259
+#, no-wrap
+msgid " V myvol State: up Plexes: 1 Size: 512 MB\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:261
+#, no-wrap
+msgid " P myvol.p0 C State: up Subdisks: 1 Size: 512 MB\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: 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 ""
+
+#. type: Plain text
+#: 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# "
+"Volume>>."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/articles/vinum/_index.adoc:269
+#, no-wrap
+msgid "A Simple [.filename]#vinum# Volume"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/articles/vinum/_index.adoc:270
+#, no-wrap
+msgid "vinum-simple-vol.png"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"volume contains one plex, and the plex contains one subdisk."
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"contains a single subdisk, so there is no difference in storage allocation "
+"from a conventional disk partition. The following sections illustrate "
+"various more interesting configuration methods."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/vinum/_index.adoc:280
+#, no-wrap
+msgid "Increased Resilience: Mirroring"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"are on different drives, so that a drive failure will not take down both "
+"plexes. The following configuration mirrors a volume:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:294
+#, no-wrap
+msgid ""
+"\tdrive b device /dev/da4h\n"
+"\tvolume mirror\n"
+" plex org concat\n"
+" sd length 512m drive a\n"
+"\t plex org concat\n"
+"\t sd length 512m drive b\n"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"configuration database. After processing this definition, the configuration "
+"looks like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:306
+#, no-wrap
+msgid ""
+"\tDrives: 2 (4 configured)\n"
+"\tVolumes: 2 (4 configured)\n"
+"\tPlexes: 3 (8 configured)\n"
+"\tSubdisks: 3 (16 configured)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:309
+#, no-wrap
+msgid ""
+"\tD a State: up Device /dev/da3h Avail: 1549/2573 MB (60%)\n"
+"\tD b State: up Device /dev/da4h Avail: 2061/2573 MB (80%)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:312
+#, no-wrap
+msgid ""
+" V myvol State: up Plexes: 1 Size: 512 MB\n"
+" V mirror State: up Plexes: 2 Size: 512 MB\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:316
+#, no-wrap
+msgid ""
+" P myvol.p0 C State: up Subdisks: 1 Size: 512 MB\n"
+" P mirror.p0 C State: up Subdisks: 1 Size: 512 MB\n"
+" P mirror.p1 C State: initializing Subdisks: 1 Size: 512 MB\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:320
+#, no-wrap
+msgid ""
+" S myvol.p0.s0 State: up PO: 0 B Size: 512 MB\n"
+"\tS mirror.p0.s0 State: up PO: 0 B Size: 512 MB\n"
+"\tS mirror.p1.s0 State: empty PO: 0 B Size: 512 MB\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vinum/_index.adoc:323
+msgid ""
+"<<vinum-mirrored-vol, A Mirrored [.filename]#vinum# Volume>> shows the "
+"structure graphically."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/articles/vinum/_index.adoc:325
+#, no-wrap
+msgid "A Mirrored [.filename]#vinum# Volume"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/articles/vinum/_index.adoc:326
+#, no-wrap
+msgid "vinum-mirrored-vol.png"
+msgstr ""
+
+#. type: Plain text
+#: 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."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/vinum/_index.adoc:331
+#, no-wrap
+msgid "Optimizing Performance"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"volume requires a write to both drives, using up a greater proportion of the "
+"total disk bandwidth. Performance considerations demand a different "
+"approach: instead of mirroring, the data is striped across as many disk "
+"drives as possible. The following configuration shows a volume with a plex "
+"striped across four disk drives:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:347
+#, no-wrap
+msgid ""
+" drive c device /dev/da5h\n"
+"\tdrive d device /dev/da6h\n"
+"\tvolume stripe\n"
+"\tplex org striped 512k\n"
+"\t sd length 128m drive a\n"
+"\t sd length 128m drive b\n"
+"\t sd length 128m drive c\n"
+"\t sd length 128m drive d\n"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"looks like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:359
+#, no-wrap
+msgid ""
+"\tDrives: 4 (4 configured)\n"
+"\tVolumes: 3 (4 configured)\n"
+"\tPlexes: 4 (8 configured)\n"
+"\tSubdisks: 7 (16 configured)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:364
+#, no-wrap
+msgid ""
+" D a State: up Device /dev/da3h Avail: 1421/2573 MB (55%)\n"
+" D b State: up Device /dev/da4h Avail: 1933/2573 MB (75%)\n"
+" D c State: up Device /dev/da5h Avail: 2445/2573 MB (95%)\n"
+" D d State: up Device /dev/da6h Avail: 2445/2573 MB (95%)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:368
+#, no-wrap
+msgid ""
+" V myvol State: up Plexes: 1 Size: 512 MB\n"
+" V mirror State: up Plexes: 2 Size: 512 MB\n"
+" V striped State: up Plexes: 1 Size: 512 MB\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:373
+#, no-wrap
+msgid ""
+" P myvol.p0 C State: up Subdisks: 1 Size: 512 MB\n"
+" P mirror.p0 C State: up Subdisks: 1 Size: 512 MB\n"
+" P mirror.p1 C State: initializing Subdisks: 1 Size: 512 MB\n"
+" P striped.p1 State: up Subdisks: 1 Size: 512 MB\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:381
+#, no-wrap
+msgid ""
+" S myvol.p0.s0 State: up PO: 0 B Size: 512 MB\n"
+" S mirror.p0.s0 State: up PO: 0 B Size: 512 MB\n"
+" S mirror.p1.s0 State: empty PO: 0 B Size: 512 MB\n"
+" S striped.p0.s0 State: up PO: 0 B Size: 128 MB\n"
+" S striped.p0.s1 State: up PO: 512 kB Size: 128 MB\n"
+" S striped.p0.s2 State: up PO: 1024 kB Size: 128 MB\n"
+" S striped.p0.s3 State: up PO: 1536 kB Size: 128 MB\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/articles/vinum/_index.adoc:384
+#, no-wrap
+msgid "A Striped [.filename]#vinum# Volume"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/articles/vinum/_index.adoc:385
+#, no-wrap
+msgid "vinum-striped-vol.png"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"position within the plex address space, where the lightest stripes come "
+"first and the darkest last."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/vinum/_index.adoc:390
+#, no-wrap
+msgid "Resilience and Performance"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"compared to standard UNIX(R) partitions. A typical configuration file might "
+"be:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:410
+#, no-wrap
+msgid ""
+"\tvolume raid10\n"
+" plex org striped 512k\n"
+" sd length 102480k drive a\n"
+" sd length 102480k drive b\n"
+" sd length 102480k drive c\n"
+" sd length 102480k drive d\n"
+" sd length 102480k drive e\n"
+" plex org striped 512k\n"
+" sd length 102480k drive c\n"
+" sd length 102480k drive d\n"
+" sd length 102480k drive e\n"
+" sd length 102480k drive a\n"
+" sd length 102480k drive b\n"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"even if a transfer goes over two drives."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vinum/_index.adoc:416
+msgid ""
+"<<vinum-raid10-vol, A Mirrored, Striped [.filename]#vinum# Volume>> "
+"represents the structure of this volume."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/articles/vinum/_index.adoc:418
+#, no-wrap
+msgid "A Mirrored, Striped [.filename]#vinum# Volume"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/articles/vinum/_index.adoc:419
+#, no-wrap
+msgid "vinum-raid10-vol.png"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/vinum/_index.adoc:422
+#, no-wrap
+msgid "Object Naming"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"it does not bring a significant advantage and it can cause confusion."
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"volumes, plexes, and subdisks may be up to 64 characters long, and the names "
+"of drives may be up to 32 characters long."
+msgstr ""
+
+#. type: Plain text
+#: 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 [."
+"filename]#vinum# to create the following device nodes:"
+msgstr ""
+
+#. type: Plain text
+#: 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 [."
+"filename]#/dev/gvinum/myvol#, [.filename]#/dev/gvinum/mirror#, [.filename]#/"
+"dev/gvinum/striped#, [.filename]#/dev/gvinum/raid5# and [.filename]#/dev/"
+"gvinum/raid10#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vinum/_index.adoc:435
+msgid "All volumes get direct entries under [.filename]#/dev/gvinum/#."
+msgstr ""
+
+#. type: Plain text
+#: 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, "
+"respectively."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vinum/_index.adoc:438
+msgid "For example, consider the following configuration file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:451
+#, no-wrap
+msgid ""
+"\tdrive drive1 device /dev/sd1h\n"
+"\tdrive drive2 device /dev/sd2h\n"
+"\tdrive drive3 device /dev/sd3h\n"
+"\tdrive drive4 device /dev/sd4h\n"
+" volume s64 setupstate\n"
+" plex org striped 64k\n"
+" sd length 100m drive drive1\n"
+" sd length 100m drive drive2\n"
+" sd length 100m drive drive3\n"
+" sd length 100m drive drive4\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vinum/_index.adoc:454
+msgid ""
+"After processing this file, man:gvinum[8] creates the following structure in "
+"[.filename]#/dev/gvinum#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:461
+#, no-wrap
+msgid ""
+"\tdrwxr-xr-x 2 root wheel 512 Apr 13\n"
+"16:46 plex\n"
+"\tcrwxr-xr-- 1 root wheel 91, 2 Apr 13 16:46 s64\n"
+"\tdrwxr-xr-x 2 root wheel 512 Apr 13 16:46 sd\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:465
+#, no-wrap
+msgid ""
+" /dev/vinum/plex:\n"
+" total 0\n"
+" crwxr-xr-- 1 root wheel 25, 0x10000002 Apr 13 16:46 s64.p0\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:472
+#, no-wrap
+msgid ""
+" /dev/vinum/sd:\n"
+" total 0\n"
+" crwxr-xr-- 1 root wheel 91, 0x20000002 Apr 13 16:46 s64.p0.s0\n"
+" crwxr-xr-- 1 root wheel 91, 0x20100002 Apr 13 16:46 s64.p0.s1\n"
+" crwxr-xr-- 1 root wheel 91, 0x20200002 Apr 13 16:46 s64.p0.s2\n"
+" crwxr-xr-- 1 root wheel 91, 0x20300002 Apr 13 16:46 s64.p0.s3\n"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"possible to move a drive to a different location and still recognize it "
+"automatically. Drive names may be up to 32 characters long."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/vinum/_index.adoc:478
+#, no-wrap
+msgid "Creating File Systems"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"thus do not contain a partition table. This has required modification to "
+"some disk utilities, notably man:newfs[8], so that it does not try to "
+"interpret the last letter of a [.filename]#vinum# volume name as a partition "
+"identifier. For example, a disk drive may have a name like [.filename]#/dev/"
+"ad0a# or [.filename]#/dev/da2h#. These names represent the first partition "
+"([.filename]#a#) on the first (0) IDE disk ([.filename]#ad#) and the eighth "
+"partition ([.filename]#h#) on the third (2) SCSI disk ([.filename]#da#) "
+"respectively. By contrast, a [.filename]#vinum# volume might be called [."
+"filename]#/dev/gvinum/concat#, which has no relationship with a partition "
+"name."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vinum/_index.adoc:488
+msgid "To create a file system on this volume, use man:newfs[8]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:492
+#, no-wrap
+msgid "# newfs /dev/gvinum/concat\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/vinum/_index.adoc:495
+#, no-wrap
+msgid "Configuring [.filename]#vinum#"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"this is not recommended. The standard way to start [.filename]#vinum# is as "
+"a kernel module. man:kldload[8] is not needed because when man:gvinum[8] "
+"starts, it checks whether the module has been loaded, and if it is not, it "
+"loads it automatically."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/vinum/_index.adoc:502
+#, no-wrap
+msgid "Startup"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"the configuration database, [.filename]#vinum# recognizes a number of "
+"keywords which are not allowed in the configuration files. For example, a "
+"disk configuration might contain the following text:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:529
+#, no-wrap
+msgid ""
+"volume myvol state up\n"
+"volume bigraid state down\n"
+"plex name myvol.p0 state up org concat vol myvol\n"
+"plex name myvol.p1 state up org concat vol myvol\n"
+"plex name myvol.p2 state init org striped 512b vol myvol\n"
+"plex name bigraid.p0 state initializing org raid5 512b vol bigraid\n"
+"sd name myvol.p0.s0 drive a plex myvol.p0 state up len 1048576b driveoffset 265b plexoffset 0b\n"
+"sd name myvol.p0.s1 drive b plex myvol.p0 state up len 1048576b driveoffset 265b plexoffset 1048576b\n"
+"sd name myvol.p1.s0 drive c plex myvol.p1 state up len 1048576b driveoffset 265b plexoffset 0b\n"
+"sd name myvol.p1.s1 drive d plex myvol.p1 state up len 1048576b driveoffset 265b plexoffset 1048576b\n"
+"sd name myvol.p2.s0 drive a plex myvol.p2 state init len 524288b driveoffset 1048841b plexoffset 0b\n"
+"sd name myvol.p2.s1 drive b plex myvol.p2 state init len 524288b driveoffset 1048841b plexoffset 524288b\n"
+"sd name myvol.p2.s2 drive c plex myvol.p2 state init len 524288b driveoffset 1048841b plexoffset 1048576b\n"
+"sd name myvol.p2.s3 drive d plex myvol.p2 state init len 524288b driveoffset 1048841b plexoffset 1572864b\n"
+"sd name bigraid.p0.s0 drive a plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 0b\n"
+"sd name bigraid.p0.s1 drive b plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 4194304b\n"
+"sd name bigraid.p0.s2 drive c plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 8388608b\n"
+"sd name bigraid.p0.s3 drive d plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 12582912b\n"
+"sd name bigraid.p0.s4 drive e plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 16777216b\n"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"information on the states. [.filename]#vinum# does not store information "
+"about drives in the configuration information. It finds the drives by "
+"scanning the configured disk drives for partitions with a [.filename]#vinum# "
+"label. This enables [.filename]#vinum# to identify drives correctly even if "
+"they have been assigned different UNIX(R) drive IDs."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/vinum/_index.adoc:537
+#, no-wrap
+msgid "Automatic Startup"
+msgstr ""
+
+#. type: Plain text
+#: 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, "
+"add `geom_vinum_load=\"YES\"` to [.filename]#/boot/loader.conf#."
+msgstr ""
+
+#. type: Plain text
+#: 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. "
+"Under normal circumstances, each drive contains an identical copy of the "
+"configuration database, so it does not matter which drive is read. After a "
+"crash, however, [.filename]#vinum# must determine which drive was updated "
+"most recently and read the configuration from this drive. It then updates "
+"the configuration, if necessary, from progressively older drives."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/vinum/_index.adoc:548
+#, no-wrap
+msgid "Using [.filename]#vinum# for the Root File System"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"configuration is less trivial than mirroring an arbitrary file system "
+"because:"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"time."
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"utilities, such as the BIOS, which often cannot be taught about the details "
+"of [.filename]#vinum#."
+msgstr ""
+
+#. type: Plain text
+#: 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."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/vinum/_index.adoc:558
+#, no-wrap
+msgid "Starting up [.filename]#vinum# Early Enough for the Root File System"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"kernel. This can be accomplished by putting this line in [.filename]#/boot/"
+"loader.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:566
+#, no-wrap
+msgid "geom_vinum_load=\"YES\"\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/vinum/_index.adoc:568
+#, no-wrap
+msgid "Making a [.filename]#vinum#-based Root Volume Accessible to the Bootstrap"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"the [.filename]#vinum# configuration data or figure out the elements of a "
+"boot volume. Thus, some workarounds are necessary to provide the bootstrap "
+"code with the illusion of a standard `a` partition that contains the root "
+"file system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vinum/_index.adoc:575
+msgid ""
+"For this to be possible, the following requirements must be met for the root "
+"volume:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vinum/_index.adoc:577
+msgid "The root volume must not be a stripe or `RAID`-5."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vinum/_index.adoc:578
+msgid ""
+"The root volume must not contain more than one concatenated subdisk per plex."
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"only use one replica for finding the bootstrap and all boot files, until the "
+"kernel mounts the root file system. Each single subdisk within these plexes "
+"needs its own `a` partition illusion, for the respective device to be "
+"bootable. It is not strictly needed that each of these faked `a` partitions "
+"is located at the same offset within its device, compared with other devices "
+"containing plexes of the root volume. However, it is probably a good idea "
+"to create the [.filename]#vinum# volumes that way so the resulting mirrored "
+"devices are symmetric, to avoid confusion."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vinum/_index.adoc:586
+msgid ""
+"To set up these `a` partitions for each device containing part of the root "
+"volume, the following is required:"
+msgstr ""
+
+#. type: delimited block = 4
+#: 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 "
+"the command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:594
+#, no-wrap
+msgid "# gvinum l -rv root\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vinum/_index.adoc:598
+msgid ""
+"[.filename]#vinum# offsets and sizes are measured in bytes. They must be "
+"divided by 512 to obtain the block numbers that are to be used by `bsdlabel`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vinum/_index.adoc:599
+msgid "Run this command for each device that participates in the root volume:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:603
+#, no-wrap
+msgid "# bsdlabel -e devname\n"
+msgstr ""
+
+#. type: Plain text
+#: 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 [."
+"filename]#ad0s1#."
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"that it remains accessible (just in case), but will no longer be used by "
+"default to bootstrap the system. A currently mounted root file system "
+"cannot be renamed, so this must be executed either when being booted from a "
+"\"Fixit\" media, or in a two-step process where, in a mirror, the disk that "
+"is not been currently booted is manipulated first."
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"device. The resulting value will become the `offset` value for the new `a` "
+"partition. The `size` value for this partition can be taken verbatim from "
+"the calculation above. The `fstype` should be `4.2BSD`. The `fsize`, "
+"`bsize`, and `cpg` values should be chosen to match the actual file system, "
+"though they are fairly unimportant within this context."
+msgstr ""
+
+#. type: Plain text
+#: 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 ""
+
+#. type: Plain text
+#: 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 "
+"like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:623
+#, no-wrap
+msgid "# fsck -n /dev/devnamea\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: 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, "
+"when setting up a new [.filename]#vinum# root volume, might not match the "
+"root file system that is currently active. So in particular, [.filename]#/"
+"etc/fstab# and [.filename]#/boot/loader.conf# need to be taken care of."
+msgstr ""
+
+#. type: delimited block = 4
+#: 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 "
+"accordingly. At the end of the kernel initialization process, after all "
+"devices have been announced, the prominent notice that shows the success of "
+"this setup is a message like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:635
+#, no-wrap
+msgid "Mounting root from ufs:/dev/gvinum/root\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/vinum/_index.adoc:637
+#, no-wrap
+msgid "Example of a [.filename]#vinum#-based Root Setup"
+msgstr ""
+
+#. type: Plain text
+#: 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:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:649
+#, no-wrap
+msgid ""
+"...\n"
+"Subdisk root.p0.s0:\n"
+"\t\tSize: 125829120 bytes (120 MB)\n"
+"\t\tState: up\n"
+"\t\tPlex root.p0 at offset 0 (0 B)\n"
+"\t\tDrive disk0 (/dev/da0h) at offset 135680 (132 kB)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:655
+#, no-wrap
+msgid ""
+"Subdisk root.p1.s0:\n"
+"\t\tSize: 125829120 bytes (120 MB)\n"
+"\t\tState: up\n"
+"\t\tPlex root.p1 at offset 0 (0 B)\n"
+"\t\tDrive disk1 (/dev/da1h) at offset 135680 (132 kB)\n"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"`bsdlabel`'s terms. Likewise, the size of this root volume is 245760 512-"
+"byte blocks. [.filename]#/dev/da1h#, containing the second replica of this "
+"root volume, has a symmetric setup."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vinum/_index.adoc:663
+msgid "The bsdlabel for these devices might look like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vinum/_index.adoc:672
+#, no-wrap
+msgid ""
+"...\n"
+"8 partitions:\n"
+"# size offset fstype [fsize bsize bps/cpg]\n"
+" a: 245760 281 4.2BSD 2048 16384 0 # (Cyl. 0*- 15*)\n"
+" c: 71771688 0 unused 0 0 # (Cyl. 0 - 4467*)\n"
+" h: 71771672 16 vinum # (Cyl. 0*- 4467*)\n"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"the offset within the [.filename]#vinum# partition `h`, and the offset of "
+"this partition within the device or slice. This is a typical setup that is "
+"necessary to avoid the problem described in <<vinum-root-panic, Nothing "
+"Boots, the Bootstrap Panics>>. The entire `a` partition is completely "
+"within the `h` partition containing all the [.filename]#vinum# data for this "
+"device."
+msgstr ""
+
+#. type: Plain text
+#: 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."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/vinum/_index.adoc:680
+#, no-wrap
+msgid "Troubleshooting"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vinum/_index.adoc:683
+msgid "The following list contains a few known pitfalls and solutions."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/vinum/_index.adoc:684
+#, no-wrap
+msgid "System Bootstrap Loads, but System Does Not Boot"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"variable `vinum.autostart` can be examined by typing `show` and manipulated "
+"using `set` or `unset`."
+msgstr ""
+
+#. type: Plain text
+#: 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`."
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"make the boot process stop in single-user mode (`-s`), where the root file "
+"system is mounted read-only. That way, even if only one plex of a multi-"
+"plex volume has been mounted, no data inconsistency between plexes is being "
+"risked."
+msgstr ""
+
+#. type: Plain text
+#: 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/"
+"fstab# is set up correctly, the default should be something like `ufs:/dev/"
+"gvinum/root`. A typical alternate choice would be something like `ufs:da0d` "
+"which could be a hypothetical partition containing the pre-[."
+"filename]#vinum# root file system. Care should be taken if one of the alias "
+"`a` partitions is entered here, that it actually references the subdisks of "
+"the [.filename]#vinum# root device, because in a mirrored setup, this would "
+"only mount one piece of a mirrored root device. If this file system is to "
+"be mounted read-write later on, it is necessary to remove the other plex(es) "
+"of the [.filename]#vinum# root volume since these plexes would otherwise "
+"carry inconsistent data."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/articles/vinum/_index.adoc:700
+#, no-wrap
+msgid "Only Primary Bootstrap Loads"
+msgstr ""
+
+#. type: Plain text
+#: 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 "
+"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 ""
+
+#. type: Title ====
+#: documentation/content/en/articles/vinum/_index.adoc:707
+#, no-wrap
+msgid "Nothing Boots, the Bootstrap Panics"
+msgstr ""
+
+#. type: Plain text
+#: 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# "
+"accidentally leaves only 4 KB at the beginning of its partition free before "
+"starting to write its [.filename]#vinum# header information. However, the "
+"stage one and two bootstraps plus the bsdlabel require 8 KB. So if a [."
+"filename]#vinum# partition was started at offset 0 within a slice or disk "
+"that was meant to be bootable, the [.filename]#vinum# setup will trash the "
+"bootstrap."
+msgstr ""
+
+#. type: Plain text
+#: 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 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 "
+"to recover all the data by entering exactly the same [.filename]#vinum# "
+"configuration data again, the situation is hard to fix. It is necessary to "
+"move the entire [.filename]#vinum# partition by at least 4 KB, to have the [."
+"filename]#vinum# header and the system bootstrap no longer collide."
+msgstr ""
diff --git a/documentation/content/en/articles/vm-design/_index.adoc b/documentation/content/en/articles/vm-design/_index.adoc
index 7499c1e362..f80be4f0e1 100644
--- a/documentation/content/en/articles/vm-design/_index.adoc
+++ b/documentation/content/en/articles/vm-design/_index.adoc
@@ -42,6 +42,8 @@ endif::[]
[.abstract-title]
Abstract
+Matthew Dillon <dillon@apollo.backplane.com>
+
The title is really just a fancy way of saying that I am going to attempt to describe the whole VM enchilada, hopefully in a way that everyone can follow.
For the last year I have concentrated on a number of major kernel subsystems within FreeBSD, with the VM and Swap subsystems being the most interesting and NFS being "a necessary chore".
I rewrote only small portions of the code. In the VM arena the only major rewrite I have done is to the swap subsystem.
@@ -76,7 +78,7 @@ These issues are not due to bad algorithmic design but instead rise from environ
In any direct comparison between platforms, these issues become most apparent when system resources begin to get stressed.
As I describe FreeBSD's VM/Swap subsystem the reader should always keep two points in mind:
-. The most important aspect of performance design is what is known as "Optimizing the Critical Path". It is often the case that performance optimizations add a little bloat to the code in order to make the critical path perform better.
+. The most important aspect of performance design is what is known as "Optimizing the Critical Path". It is often the case that performance optimizations add a little bloat to the code to make the critical path perform better.
. A solid, generalized design outperforms a heavily-optimized design over the long run. While a generalized design may end up being slower than an heavily-optimized design when they are first implemented, the generalized design tends to be easier to adapt to changing conditions and the heavily-optimized design winds up having to be thrown away.
Any codebase that will survive and be maintainable for years must therefore be designed properly from the beginning even if it costs some performance.
@@ -185,7 +187,7 @@ FreeBSD allocates the swap management structure for a VM Object only when it is
However, the swap management structure has had problems historically:
* Under FreeBSD 3.X the swap management structure preallocates an array that encompasses the entire object requiring swap backing store-even if only a few pages of that object are swap-backed. This creates a kernel memory fragmentation problem when large objects are mapped, or processes with large runsizes (RSS) fork.
-* Also, in order to keep track of swap space, a "list of holes" is kept in kernel memory, and this tends to get severely fragmented as well. Since the "list of holes" is a linear list, the swap allocation and freeing performance is a non-optimal O(n)-per-page.
+* Also, to keep track of swap space, a "list of holes" is kept in kernel memory, and this tends to get severely fragmented as well. Since the "list of holes" is a linear list, the swap allocation and freeing performance is a non-optimal O(n)-per-page.
* It requires kernel memory allocations to take place during the swap freeing process, and that creates low memory deadlock problems.
* The problem is further exacerbated by holes created due to the interleaving algorithm.
* Also, the swap block map can become fragmented fairly easily resulting in non-contiguous allocations.
@@ -196,10 +198,10 @@ For FreeBSD 4.X, I completely rewrote the swap subsystem:
* Swap management structures are allocated through a hash table rather than a linear array giving them a fixed allocation size and much finer granularity.
* Rather then using a linearly linked list to keep track of swap space reservations, it now uses a bitmap of swap blocks arranged in a radix tree structure with free-space hinting in the radix node structures. This effectively makes swap allocation and freeing an O(1) operation.
-* The entire radix tree bitmap is also preallocated in order to avoid having to allocate kernel memory during critical low memory swapping operations. After all, the system tends to swap when it is low on memory so we should avoid allocating kernel memory at such times in order to avoid potential deadlocks.
+* The entire radix tree bitmap is also preallocated to avoid having to allocate kernel memory during critical low memory swapping operations. After all, the system tends to swap when it is low on memory so we should avoid allocating kernel memory at such times to avoid potential deadlocks.
* To reduce fragmentation the radix tree is capable of allocating large contiguous chunks at once, skipping over smaller fragmented chunks.
-I did not take the final step of having an "allocating hint pointer" that would trundle through a portion of swap as allocations were made in order to further guarantee contiguous allocations or at least locality of reference, but I ensured that such an addition could be made.
+I did not take the final step of having an "allocating hint pointer" that would trundle through a portion of swap as allocations were made to further guarantee contiguous allocations or at least locality of reference, but I ensured that such an addition could be made.
[[freeing-pages]]
== When to free a page
@@ -208,7 +210,7 @@ Since the VM system uses all available memory for disk caching, there are usuall
The VM system depends on being able to properly choose pages which are not in use to reuse for new allocations.
Selecting the optimal pages to free is possibly the single-most important function any VM system can perform because if it makes a poor selection, the VM system may be forced to unnecessarily retrieve pages from disk, seriously degrading system performance.
-How much overhead are we willing to suffer in the critical path to avoid freeing the wrong page? Each wrong choice we make will cost us hundreds of thousands of CPU cycles and a noticeable stall of the affected processes, so we are willing to endure a significant amount of overhead in order to be sure that the right page is chosen.
+How much overhead are we willing to suffer in the critical path to avoid freeing the wrong page? Each wrong choice we make will cost us hundreds of thousands of CPU cycles and a noticeable stall of the affected processes, so we are willing to endure a significant amount of overhead to be sure that the right page is chosen.
This is why FreeBSD tends to outperform other systems when memory resources become stressed.
The free page determination algorithm is built upon a history of the use of memory pages.
@@ -240,7 +242,7 @@ This is why you will see some systems with very low cache queue counts and high
As the VM system becomes more stressed, it makes a greater effort to maintain the various page queues at the levels determined to be the most effective.
An urban myth has circulated for years that Linux did a better job avoiding swapouts than FreeBSD, but this in fact is not true.
-What was actually occurring was that FreeBSD was proactively paging out unused pages in order to make room for more disk cache while Linux was keeping unused pages in core and leaving less memory available for cache and process pages.
+What was actually occurring was that FreeBSD was proactively paging out unused pages to make room for more disk cache while Linux was keeping unused pages in core and leaving less memory available for cache and process pages.
I do not know whether this is still true today.
[[prefault-optimizations]]
@@ -261,8 +263,8 @@ These occur when a process accesses pages in its BSS area.
The BSS area is expected to be initially zero but the VM system does not bother to allocate any memory at all until the process actually accesses it.
When a fault occurs the VM system must not only allocate a new page, it must zero it as well.
To optimize the zeroing operation the VM system has the ability to pre-zero pages and mark them as such, and to request pre-zeroed pages when zero-fill faults occur.
-The pre-zeroing occurs whenever the CPU is idle but the number of pages the system pre-zeros is limited in order to avoid blowing away the memory caches.
-This is an excellent example of adding complexity to the VM system in order to optimize the critical path.
+The pre-zeroing occurs whenever the CPU is idle but the number of pages the system pre-zeros is limited to avoid blowing away the memory caches.
+This is an excellent example of adding complexity to the VM system to optimize the critical path.
[[page-table-optimizations]]
== Page Table Optimizations
@@ -360,16 +362,16 @@ A `vm_page` represents an (object,index#) tuple. A `pv_entry` represents a hardw
If you have five processes sharing the same physical page, and three of those processes's page tables actually map the page, that page will be represented by a single `vm_page` structure and three `pv_entry` structures.
`pv_entry` structures only represent pages mapped by the MMU (one `pv_entry` represents one pte).
-This means that when we need to remove all hardware references to a `vm_page` (in order to reuse the page for something else, page it out, clear it, dirty it, and so forth) we can simply scan the linked list of pv_entry's associated with that vm_page to remove or modify the pte's from their page tables.
+This means that when we need to remove all hardware references to a `vm_page` (to reuse the page for something else, page it out, clear it, dirty it, and so forth) we can simply scan the linked list of pv_entry's associated with that vm_page to remove or modify the pte's from their page tables.
Under Linux there is no such linked list.
-In order to remove all the hardware page table mappings for a `vm_page` linux must index into every VM object that _might_ have mapped the page.
+To remove all the hardware page table mappings for a `vm_page` linux must index into every VM object that _might_ have mapped the page.
For example, if you have 50 processes all mapping the same shared library and want to get rid of page X in that library, you need to index into the page table for each of those 50 processes even if only 10 of them have actually mapped the page.
So Linux is trading off the simplicity of its design against performance.
Many VM algorithms which are O(1) or (small N) under FreeBSD wind up being O(N), O(N^2), or worse under Linux.
Since the pte's representing a particular page in an object tend to be at the same offset in all the page tables they are mapped in, reducing the number of accesses into the page tables at the same pte offset will often avoid blowing away the L1 cache line for that offset, which can lead to better performance.
-FreeBSD has added complexity (the `pv_entry` scheme) in order to increase performance (to limit page table accesses to _only_ those pte's that need to be modified).
+FreeBSD has added complexity (the `pv_entry` scheme) to increase performance (to limit page table accesses to _only_ those pte's that need to be modified).
But FreeBSD has a scaling problem that Linux does not in that there are a limited number of `pv_entry` structures and this causes problems when you have massive sharing of data.
In this case you may run out of `pv_entry` structures even though there is plenty of free memory available.
diff --git a/documentation/content/en/articles/vm-design/_index.po b/documentation/content/en/articles/vm-design/_index.po
new file mode 100644
index 0000000000..c9d38532d6
--- /dev/null
+++ b/documentation/content/en/articles/vm-design/_index.po
@@ -0,0 +1,1017 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-09-09 18:13-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/vm-design/_index.adoc:1
+#, no-wrap
+msgid "An easy to follow description of the design of the FreeBSD virtual memory system"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/articles/vm-design/_index.adoc:1
+#: documentation/content/en/articles/vm-design/_index.adoc:11
+#, no-wrap
+msgid "Design elements of the FreeBSD VM system"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:44
+msgid "Abstract"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:46
+msgid "Matthew Dillon <dillon@apollo.backplane.com>"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:53
+msgid ""
+"The title is really just a fancy way of saying that I am going to attempt to "
+"describe the whole VM enchilada, hopefully in a way that everyone can "
+"follow. For the last year I have concentrated on a number of major kernel "
+"subsystems within FreeBSD, with the VM and Swap subsystems being the most "
+"interesting and NFS being \"a necessary chore\". I rewrote only small "
+"portions of the code. In the VM arena the only major rewrite I have done is "
+"to the swap subsystem. Most of my work was cleanup and maintenance, with "
+"only moderate code rewriting and no major algorithmic adjustments within the "
+"VM subsystem. The bulk of the VM subsystem's theoretical base remains "
+"unchanged and a lot of the credit for the modernization effort in the last "
+"few years belongs to John Dyson and David Greenman. Not being a historian "
+"like Kirk I will not attempt to tag all the various features with peoples "
+"names, since I will invariably get it wrong."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:55
+msgid "'''"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/vm-design/_index.adoc:59
+#, no-wrap
+msgid "Introduction"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:75
+msgid ""
+"Before moving along to the actual design let's spend a little time on the "
+"necessity of maintaining and modernizing any long-living codebase. In the "
+"programming world, algorithms tend to be more important than code and it is "
+"precisely due to BSD's academic roots that a great deal of attention was "
+"paid to algorithm design from the beginning. More attention paid to the "
+"design generally leads to a clean and flexible codebase that can be fairly "
+"easily modified, extended, or replaced over time. While BSD is considered "
+"an \"old\" operating system by some people, those of us who work on it tend "
+"to view it more as a \"mature\" codebase which has various components "
+"modified, extended, or replaced with modern code. It has evolved, and "
+"FreeBSD is at the bleeding edge no matter how old some of the code might "
+"be. This is an important distinction to make and one that is unfortunately "
+"lost to many people. The biggest error a programmer can make is to not "
+"learn from history, and this is precisely the error that many other modern "
+"operating systems have made. Windows NT(R) is the best example of this, and "
+"the consequences have been dire. Linux also makes this mistake to some "
+"degree-enough that we BSD folk can make small jokes about it every once in a "
+"while, anyway. Linux's problem is simply one of a lack of experience and "
+"history to compare ideas against, a problem that is easily and rapidly being "
+"addressed by the Linux community in the same way it has been addressed in "
+"the BSD community-by continuous code development. The Windows NT(R) folk, "
+"on the other hand, repeatedly make the same mistakes solved by UNIX(R) "
+"decades ago and then spend years fixing them. Over and over again. They "
+"have a severe case of \"not designed here\" and \"we are always right "
+"because our marketing department says so\". I have little tolerance for "
+"anyone who cannot learn from history."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:80
+msgid ""
+"Much of the apparent complexity of the FreeBSD design, especially in the VM/"
+"Swap subsystem, is a direct result of having to solve serious performance "
+"issues that occur under various conditions. These issues are not due to bad "
+"algorithmic design but instead rise from environmental factors. In any "
+"direct comparison between platforms, these issues become most apparent when "
+"system resources begin to get stressed. As I describe FreeBSD's VM/Swap "
+"subsystem the reader should always keep two points in mind:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:82
+msgid ""
+"The most important aspect of performance design is what is known as "
+"\"Optimizing the Critical Path\". It is often the case that performance "
+"optimizations add a little bloat to the code to make the critical path "
+"perform better."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:83
+msgid ""
+"A solid, generalized design outperforms a heavily-optimized design over the "
+"long run. While a generalized design may end up being slower than an heavily-"
+"optimized design when they are first implemented, the generalized design "
+"tends to be easier to adapt to changing conditions and the heavily-optimized "
+"design winds up having to be thrown away."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:87
+msgid ""
+"Any codebase that will survive and be maintainable for years must therefore "
+"be designed properly from the beginning even if it costs some performance. "
+"Twenty years ago people were still arguing that programming in assembly was "
+"better than programming in a high-level language because it produced code "
+"that was ten times as fast. Today, the fallibility of that argument is "
+"obvious - as are the parallels to algorithmic design and code generalization."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/vm-design/_index.adoc:89
+#, no-wrap
+msgid "VM Objects"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:99
+msgid ""
+"The best way to begin describing the FreeBSD VM system is to look at it from "
+"the perspective of a user-level process. Each user process sees a single, "
+"private, contiguous VM address space containing several types of memory "
+"objects. These objects have various characteristics. Program code and "
+"program data are effectively a single memory-mapped file (the binary file "
+"being run), but program code is read-only while program data is copy-on-"
+"write. Program BSS is just memory allocated and filled with zeros on "
+"demand, called demand zero page fill. Arbitrary files can be memory-mapped "
+"into the address space as well, which is how the shared library mechanism "
+"works. Such mappings can require modifications to remain private to the "
+"process making them. The fork system call adds an entirely new dimension to "
+"the VM management problem on top of the complexity already given."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:105
+msgid ""
+"A program binary data page (which is a basic copy-on-write page) illustrates "
+"the complexity. A program binary contains a preinitialized data section "
+"which is initially mapped directly from the program file. When a program is "
+"loaded into a process's VM space, this area is initially memory-mapped and "
+"backed by the program binary itself, allowing the VM system to free/reuse "
+"the page and later load it back in from the binary. The moment a process "
+"modifies this data, however, the VM system must make a private copy of the "
+"page for that process. Since the private copy has been modified, the VM "
+"system may no longer free it, because there is no longer any way to restore "
+"it later on."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:112
+msgid ""
+"You will notice immediately that what was originally a simple file mapping "
+"has become much more complex. Data may be modified on a page-by-page basis "
+"whereas the file mapping encompasses many pages at once. The complexity "
+"further increases when a process forks. When a process forks, the result is "
+"two processes-each with their own private address spaces, including any "
+"modifications made by the original process prior to the call to `fork()`. "
+"It would be silly for the VM system to make a complete copy of the data at "
+"the time of the `fork()` because it is quite possible that at least one of "
+"the two processes will only need to read from that page from then on, "
+"allowing the original page to continue to be used. What was a private page "
+"is made copy-on-write again, since each process (parent and child) expects "
+"their own personal post-fork modifications to remain private to themselves "
+"and not affect the other."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:121
+msgid ""
+"FreeBSD manages all of this with a layered VM Object model. The original "
+"binary program file winds up being the lowest VM Object layer. A copy-on-"
+"write layer is pushed on top of that to hold those pages which had to be "
+"copied from the original file. If the program modifies a data page "
+"belonging to the original file the VM system takes a fault and makes a copy "
+"of the page in the higher layer. When a process forks, additional VM Object "
+"layers are pushed on. This might make a little more sense with a fairly "
+"basic example. A `fork()` is a common operation for any *BSD system, so "
+"this example will consider a program that starts up, and forks. When the "
+"process starts, the VM system creates an object layer, let's call this A:"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/articles/vm-design/_index.adoc:122
+#, no-wrap
+msgid "A picture"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/articles/vm-design/_index.adoc:122
+#, no-wrap
+msgid "fig1.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:127
+msgid ""
+"A represents the file-pages may be paged in and out of the file's physical "
+"media as necessary. Paging in from the disk is reasonable for a program, "
+"but we really do not want to page back out and overwrite the executable. "
+"The VM system therefore creates a second layer, B, that will be physically "
+"backed by swap space:"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/articles/vm-design/_index.adoc:128
+#, no-wrap
+msgid "fig2.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:133
+msgid ""
+"On the first write to a page after this, a new page is created in B, and its "
+"contents are initialized from A. All pages in B can be paged in or out to a "
+"swap device. When the program forks, the VM system creates two new object "
+"layers-C1 for the parent, and C2 for the child-that rest on top of B:"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/articles/vm-design/_index.adoc:134
+#, no-wrap
+msgid "fig3.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:145
+msgid ""
+"In this case, let's say a page in B is modified by the original parent "
+"process. The process will take a copy-on-write fault and duplicate the page "
+"in C1, leaving the original page in B untouched. Now, let's say the same "
+"page in B is modified by the child process. The process will take a copy-on-"
+"write fault and duplicate the page in C2. The original page in B is now "
+"completely hidden since both C1 and C2 have a copy and B could theoretically "
+"be destroyed if it does not represent a \"real\" file; however, this sort of "
+"optimization is not trivial to make because it is so fine-grained. FreeBSD "
+"does not make this optimization. Now, suppose (as is often the case) that "
+"the child process does an `exec()`. Its current address space is usually "
+"replaced by a new address space representing a new file. In this case, the "
+"C2 layer is destroyed:"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/articles/vm-design/_index.adoc:146
+#, no-wrap
+msgid "fig4.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:152
+msgid ""
+"In this case, the number of children of B drops to one, and all accesses to "
+"B now go through C1. This means that B and C1 can be collapsed together. "
+"Any pages in B that also exist in C1 are deleted from B during the "
+"collapse. Thus, even though the optimization in the previous step could not "
+"be made, we can recover the dead pages when either of the processes exit or "
+"`exec()`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:159
+msgid ""
+"This model creates a number of potential problems. The first is that you "
+"can wind up with a relatively deep stack of layered VM Objects which can "
+"cost scanning time and memory when you take a fault. Deep layering can "
+"occur when processes fork and then fork again (either parent or child). The "
+"second problem is that you can wind up with dead, inaccessible pages deep in "
+"the stack of VM Objects. In our last example if both the parent and child "
+"processes modify the same page, they both get their own private copies of "
+"the page and the original page in B is no longer accessible by anyone. That "
+"page in B can be freed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:170
+msgid ""
+"FreeBSD solves the deep layering problem with a special optimization called "
+"the \"All Shadowed Case\". This case occurs if either C1 or C2 take "
+"sufficient COW faults to completely shadow all pages in B. Lets say that C1 "
+"achieves this. C1 can now bypass B entirely, so rather then have C1->B->A "
+"and C2->B->A we now have C1->A and C2->B->A. But look what also happened-"
+"now B has only one reference (C2), so we can collapse B and C2 together. "
+"The end result is that B is deleted entirely and we have C1->A and C2->A. "
+"It is often the case that B will contain a large number of pages and neither "
+"C1 nor C2 will be able to completely overshadow it. If we fork again and "
+"create a set of D layers, however, it is much more likely that one of the D "
+"layers will eventually be able to completely overshadow the much smaller "
+"dataset represented by C1 or C2. The same optimization will work at any "
+"point in the graph and the grand result of this is that even on a heavily "
+"forked machine VM Object stacks tend to not get much deeper then 4. This is "
+"true of both the parent and the children and true whether the parent is "
+"doing the forking or whether the children cascade forks."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:174
+msgid ""
+"The dead page problem still exists in the case where C1 or C2 do not "
+"completely overshadow B. Due to our other optimizations this case does not "
+"represent much of a problem and we simply allow the pages to be dead. If "
+"the system runs low on memory it will swap them out, eating a little swap, "
+"but that is it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:178
+msgid ""
+"The advantage to the VM Object model is that `fork()` is extremely fast, "
+"since no real data copying need take place. The disadvantage is that you "
+"can build a relatively complex VM Object layering that slows page fault "
+"handling down a little, and you spend memory managing the VM Object "
+"structures. The optimizations FreeBSD makes proves to reduce the problems "
+"enough that they can be ignored, leaving no real disadvantage."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/vm-design/_index.adoc:180
+#, no-wrap
+msgid "SWAP Layers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:188
+msgid ""
+"Private data pages are initially either copy-on-write or zero-fill pages. "
+"When a change, and therefore a copy, is made, the original backing object "
+"(usually a file) can no longer be used to save a copy of the page when the "
+"VM system needs to reuse it for other purposes. This is where SWAP comes "
+"in. SWAP is allocated to create backing store for memory that does not "
+"otherwise have it. FreeBSD allocates the swap management structure for a VM "
+"Object only when it is actually needed. However, the swap management "
+"structure has had problems historically:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:190
+msgid ""
+"Under FreeBSD 3.X the swap management structure preallocates an array that "
+"encompasses the entire object requiring swap backing store-even if only a "
+"few pages of that object are swap-backed. This creates a kernel memory "
+"fragmentation problem when large objects are mapped, or processes with large "
+"runsizes (RSS) fork."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:191
+msgid ""
+"Also, to keep track of swap space, a \"list of holes\" is kept in kernel "
+"memory, and this tends to get severely fragmented as well. Since the \"list "
+"of holes\" is a linear list, the swap allocation and freeing performance is "
+"a non-optimal O(n)-per-page."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:192
+msgid ""
+"It requires kernel memory allocations to take place during the swap freeing "
+"process, and that creates low memory deadlock problems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:193
+msgid ""
+"The problem is further exacerbated by holes created due to the interleaving "
+"algorithm."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:194
+msgid ""
+"Also, the swap block map can become fragmented fairly easily resulting in "
+"non-contiguous allocations."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:195
+msgid ""
+"Kernel memory must also be allocated on the fly for additional swap "
+"management structures when a swapout occurs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:198
+msgid ""
+"It is evident from that list that there was plenty of room for improvement. "
+"For FreeBSD 4.X, I completely rewrote the swap subsystem:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:200
+msgid ""
+"Swap management structures are allocated through a hash table rather than a "
+"linear array giving them a fixed allocation size and much finer granularity."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:201
+msgid ""
+"Rather then using a linearly linked list to keep track of swap space "
+"reservations, it now uses a bitmap of swap blocks arranged in a radix tree "
+"structure with free-space hinting in the radix node structures. This "
+"effectively makes swap allocation and freeing an O(1) operation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:202
+msgid ""
+"The entire radix tree bitmap is also preallocated to avoid having to "
+"allocate kernel memory during critical low memory swapping operations. After "
+"all, the system tends to swap when it is low on memory so we should avoid "
+"allocating kernel memory at such times to avoid potential deadlocks."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:203
+msgid ""
+"To reduce fragmentation the radix tree is capable of allocating large "
+"contiguous chunks at once, skipping over smaller fragmented chunks."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:205
+msgid ""
+"I did not take the final step of having an \"allocating hint pointer\" that "
+"would trundle through a portion of swap as allocations were made to further "
+"guarantee contiguous allocations or at least locality of reference, but I "
+"ensured that such an addition could be made."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/vm-design/_index.adoc:207
+#, no-wrap
+msgid "When to free a page"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:212
+msgid ""
+"Since the VM system uses all available memory for disk caching, there are "
+"usually very few truly-free pages. The VM system depends on being able to "
+"properly choose pages which are not in use to reuse for new allocations. "
+"Selecting the optimal pages to free is possibly the single-most important "
+"function any VM system can perform because if it makes a poor selection, the "
+"VM system may be forced to unnecessarily retrieve pages from disk, seriously "
+"degrading system performance."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:215
+msgid ""
+"How much overhead are we willing to suffer in the critical path to avoid "
+"freeing the wrong page? Each wrong choice we make will cost us hundreds of "
+"thousands of CPU cycles and a noticeable stall of the affected processes, so "
+"we are willing to endure a significant amount of overhead to be sure that "
+"the right page is chosen. This is why FreeBSD tends to outperform other "
+"systems when memory resources become stressed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:218
+msgid ""
+"The free page determination algorithm is built upon a history of the use of "
+"memory pages. To acquire this history, the system takes advantage of a page-"
+"used bit feature that most hardware page tables have."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:224
+msgid ""
+"In any case, the page-used bit is cleared and at some later point the VM "
+"system comes across the page again and sees that the page-used bit has been "
+"set. This indicates that the page is still being actively used. If the bit "
+"is still clear it is an indication that the page is not being actively "
+"used. By testing this bit periodically, a use history (in the form of a "
+"counter) for the physical page is developed. When the VM system later needs "
+"to free up some pages, checking this history becomes the cornerstone of "
+"determining the best candidate page to reuse."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:229
+msgid ""
+"For those platforms that do not have this feature, the system actually "
+"emulates a page-used bit. It unmaps or protects a page, forcing a page "
+"fault if the page is accessed again. When the page fault is taken, the "
+"system simply marks the page as having been used and unprotects the page so "
+"that it may be used. While taking such page faults just to determine if a "
+"page is being used appears to be an expensive proposition, it is much less "
+"expensive than reusing the page for some other purpose only to find that a "
+"process needs it back and then have to go to disk."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:239
+msgid ""
+"FreeBSD makes use of several page queues to further refine the selection of "
+"pages to reuse as well as to determine when dirty pages must be flushed to "
+"their backing store. Since page tables are dynamic entities under FreeBSD, "
+"it costs virtually nothing to unmap a page from the address space of any "
+"processes using it. When a page candidate has been chosen based on the page-"
+"use counter, this is precisely what is done. The system must make a "
+"distinction between clean pages which can theoretically be freed up at any "
+"time, and dirty pages which must first be written to their backing store "
+"before being reusable. When a page candidate has been found it is moved to "
+"the inactive queue if it is dirty, or the cache queue if it is clean. A "
+"separate algorithm based on the dirty-to-clean page ratio determines when "
+"dirty pages in the inactive queue must be flushed to disk. Once this is "
+"accomplished, the flushed pages are moved from the inactive queue to the "
+"cache queue. At this point, pages in the cache queue can still be "
+"reactivated by a VM fault at relatively low cost. However, pages in the "
+"cache queue are considered to be \"immediately freeable\" and will be reused "
+"in an LRU (least-recently used) fashion when the system needs to allocate "
+"new memory."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:243
+msgid ""
+"It is important to note that the FreeBSD VM system attempts to separate "
+"clean and dirty pages for the express reason of avoiding unnecessary flushes "
+"of dirty pages (which eats I/O bandwidth), nor does it move pages between "
+"the various page queues gratuitously when the memory subsystem is not being "
+"stressed. This is why you will see some systems with very low cache queue "
+"counts and high active queue counts when doing a `systat -vm` command. As "
+"the VM system becomes more stressed, it makes a greater effort to maintain "
+"the various page queues at the levels determined to be the most effective."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:247
+msgid ""
+"An urban myth has circulated for years that Linux did a better job avoiding "
+"swapouts than FreeBSD, but this in fact is not true. What was actually "
+"occurring was that FreeBSD was proactively paging out unused pages to make "
+"room for more disk cache while Linux was keeping unused pages in core and "
+"leaving less memory available for cache and process pages. I do not know "
+"whether this is still true today."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/vm-design/_index.adoc:249
+#, no-wrap
+msgid "Pre-Faulting and Zeroing Optimizations"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:259
+msgid ""
+"Taking a VM fault is not expensive if the underlying page is already in core "
+"and can simply be mapped into the process, but it can become expensive if "
+"you take a whole lot of them on a regular basis. A good example of this is "
+"running a program such as man:ls[1] or man:ps[1] over and over again. If "
+"the program binary is mapped into memory but not mapped into the page table, "
+"then all the pages that will be accessed by the program will have to be "
+"faulted in every time the program is run. This is unnecessary when the "
+"pages in question are already in the VM Cache, so FreeBSD will attempt to "
+"pre-populate a process's page tables with those pages that are already in "
+"the VM Cache. One thing that FreeBSD does not yet do is pre-copy-on-write "
+"certain pages on exec. For example, if you run the man:ls[1] program while "
+"running `vmstat 1` you will notice that it always takes a certain number of "
+"page faults, even when you run it over and over again. These are zero-fill "
+"faults, not program code faults (which were pre-faulted in already). Pre-"
+"copying pages on exec or fork is an area that could use more study."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:268
+msgid ""
+"A large percentage of page faults that occur are zero-fill faults. You can "
+"usually see this by observing the `vmstat -s` output. These occur when a "
+"process accesses pages in its BSS area. The BSS area is expected to be "
+"initially zero but the VM system does not bother to allocate any memory at "
+"all until the process actually accesses it. When a fault occurs the VM "
+"system must not only allocate a new page, it must zero it as well. To "
+"optimize the zeroing operation the VM system has the ability to pre-zero "
+"pages and mark them as such, and to request pre-zeroed pages when zero-fill "
+"faults occur. The pre-zeroing occurs whenever the CPU is idle but the "
+"number of pages the system pre-zeros is limited to avoid blowing away the "
+"memory caches. This is an excellent example of adding complexity to the VM "
+"system to optimize the critical path."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/vm-design/_index.adoc:270
+#, no-wrap
+msgid "Page Table Optimizations"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:280
+msgid ""
+"The page table optimizations make up the most contentious part of the "
+"FreeBSD VM design and they have shown some strain with the advent of serious "
+"use of `mmap()`. I think this is actually a feature of most BSDs though I "
+"am not sure when it was first introduced. There are two major "
+"optimizations. The first is that hardware page tables do not contain "
+"persistent state but instead can be thrown away at any time with only a "
+"minor amount of management overhead. The second is that every active page "
+"table entry in the system has a governing `pv_entry` structure which is tied "
+"into the `vm_page` structure. FreeBSD can simply iterate through those "
+"mappings that are known to exist while Linux must check all page tables that "
+"_might_ contain a specific mapping to see if it does, which can achieve "
+"O(n^2) overhead in certain situations. It is because of this that FreeBSD "
+"tends to make better choices on which pages to reuse or swap when memory is "
+"stressed, giving it better performance under load. However, FreeBSD "
+"requires kernel tuning to accommodate large-shared-address-space situations "
+"such as those that can occur in a news system because it may run out of "
+"`pv_entry` structures."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:285
+msgid ""
+"Both Linux and FreeBSD need work in this area. FreeBSD is trying to "
+"maximize the advantage of a potentially sparse active-mapping model (not all "
+"processes need to map all pages of a shared library, for example), whereas "
+"Linux is trying to simplify its algorithms. FreeBSD generally has the "
+"performance advantage here at the cost of wasting a little extra memory, but "
+"FreeBSD breaks down in the case where a large file is massively shared "
+"across hundreds of processes. Linux, on the other hand, breaks down in the "
+"case where many processes are sparsely-mapping the same shared library and "
+"also runs non-optimally when trying to determine whether a page can be "
+"reused or not."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/vm-design/_index.adoc:287
+#, no-wrap
+msgid "Page Coloring"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:297
+msgid ""
+"We will end with the page coloring optimizations. Page coloring is a "
+"performance optimization designed to ensure that accesses to contiguous "
+"pages in virtual memory make the best use of the processor cache. In "
+"ancient times (i.e. 10+ years ago) processor caches tended to map virtual "
+"memory rather than physical memory. This led to a huge number of problems "
+"including having to clear the cache on every context switch in some cases, "
+"and problems with data aliasing in the cache. Modern processor caches map "
+"physical memory precisely to solve those problems. This means that two side-"
+"by-side pages in a processes address space may not correspond to two side-by-"
+"side pages in the cache. In fact, if you are not careful side-by-side pages "
+"in virtual memory could wind up using the same page in the processor cache-"
+"leading to cacheable data being thrown away prematurely and reducing CPU "
+"performance. This is true even with multi-way set-associative caches "
+"(though the effect is mitigated somewhat)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:304
+msgid ""
+"FreeBSD's memory allocation code implements page coloring optimizations, "
+"which means that the memory allocation code will attempt to locate free "
+"pages that are contiguous from the point of view of the cache. For example, "
+"if page 16 of physical memory is assigned to page 0 of a process's virtual "
+"memory and the cache can hold 4 pages, the page coloring code will not "
+"assign page 20 of physical memory to page 1 of a process's virtual memory. "
+"It would, instead, assign page 21 of physical memory. The page coloring "
+"code attempts to avoid assigning page 20 because this maps over the same "
+"cache memory as page 16 and would result in non-optimal caching. This code "
+"adds a significant amount of complexity to the VM memory allocation "
+"subsystem as you can well imagine, but the result is well worth the effort. "
+"Page Coloring makes VM memory as deterministic as physical memory in regards "
+"to cache performance."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/vm-design/_index.adoc:306
+#, no-wrap
+msgid "Conclusion"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:311
+msgid ""
+"Virtual memory in modern operating systems must address a number of "
+"different issues efficiently and for many different usage patterns. The "
+"modular and algorithmic approach that BSD has historically taken allows us "
+"to study and understand the current implementation as well as relatively "
+"cleanly replace large sections of the code. There have been a number of "
+"improvements to the FreeBSD VM system in the last several years, and work is "
+"ongoing."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/vm-design/_index.adoc:313
+#, no-wrap
+msgid "Bonus QA session by Allen Briggs"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/vm-design/_index.adoc:315
+#, no-wrap
+msgid "What is the interleaving algorithm that you refer to in your listing of the ills of the FreeBSD 3.X swap arrangements?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:321
+msgid ""
+"FreeBSD uses a fixed swap interleave which defaults to 4. This means that "
+"FreeBSD reserves space for four swap areas even if you only have one, two, "
+"or three. Since swap is interleaved the linear address space representing "
+"the \"four swap areas\" will be fragmented if you do not actually have four "
+"swap areas. For example, if you have two swap areas A and B FreeBSD's "
+"address space representation for that swap area will be interleaved in "
+"blocks of 16 pages:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vm-design/_index.adoc:324
+#, no-wrap
+msgid "A B C D A B C D A B C D A B C D\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:331
+msgid ""
+"FreeBSD 3.X uses a \"sequential list of free regions\" approach to "
+"accounting for the free swap areas. The idea is that large blocks of free "
+"linear space can be represented with a single list node ([.filename]#kern/"
+"subr_rlist.c#). But due to the fragmentation the sequential list winds up "
+"being insanely fragmented. In the above example, completely unused swap "
+"will have A and B shown as \"free\" and C and D shown as \"all allocated\". "
+"Each A-B sequence requires a list node to account for because C and D are "
+"holes, so the list node cannot be combined with the next A-B sequence."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:333
+msgid ""
+"Why do we interleave our swap space instead of just tack swap areas onto the "
+"end and do something fancier? It is a whole lot easier to allocate linear "
+"swaths of an address space and have the result automatically be interleaved "
+"across multiple disks than it is to try to put that sophistication elsewhere."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:338
+msgid ""
+"The fragmentation causes other problems. Being a linear list under 3.X, and "
+"having such a huge amount of inherent fragmentation, allocating and freeing "
+"swap winds up being an O(N) algorithm instead of an O(1) algorithm. "
+"Combined with other factors (heavy swapping) and you start getting into "
+"O(N^2) and O(N^3) levels of overhead, which is bad. The 3.X system may also "
+"need to allocate KVM during a swap operation to create a new list node which "
+"can lead to a deadlock if the system is trying to pageout pages in a low-"
+"memory situation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:343
+msgid ""
+"Under 4.X we do not use a sequential list. Instead we use a radix tree and "
+"bitmaps of swap blocks rather than ranged list nodes. We take the hit of "
+"preallocating all the bitmaps required for the entire swap area up front but "
+"it winds up wasting less memory due to the use of a bitmap (one bit per "
+"block) instead of a linked list of nodes. The use of a radix tree instead "
+"of a sequential list gives us nearly O(1) performance no matter how "
+"fragmented the tree becomes."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/vm-design/_index.adoc:344
+#, no-wrap
+msgid "How is the separation of clean and dirty (inactive) pages related to the situation where you see low cache queue counts and high active queue counts in systat -vm? Do the systat stats roll the active and dirty pages together for the active queue count?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:349
+msgid ""
+"Yes, that is confusing. The relationship is \"goal\" verses \"reality\". "
+"Our goal is to separate the pages but the reality is that if we are not in a "
+"memory crunch, we do not really have to."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:351
+msgid ""
+"What this means is that FreeBSD will not try very hard to separate out dirty "
+"pages (inactive queue) from clean pages (cache queue) when the system is not "
+"being stressed, nor will it try to deactivate pages (active queue -> "
+"inactive queue) when the system is not being stressed, even if they are not "
+"being used."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/vm-design/_index.adoc:352
+#, no-wrap
+msgid "In man:ls[1] the / vmstat 1 example, would not some of the page faults be data page faults (COW from executable file to private page)? I.e., I would expect the page faults to be some zero-fill and some program data. Or are you implying that FreeBSD does do pre-COW for the program data?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:358
+msgid ""
+"A COW fault can be either zero-fill or program-data. The mechanism is the "
+"same either way because the backing program-data is almost certainly already "
+"in the cache. I am indeed lumping the two together. FreeBSD does not pre-"
+"COW program data or zero-fill, but it _does_ pre-map pages that exist in its "
+"cache."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/vm-design/_index.adoc:359
+#, no-wrap
+msgid "In your section on page table optimizations, can you give a little more detail about pv_entry and vm_page (or should vm_page be vm_pmap-as in 4.4, cf. pp. 180-181 of McKusick, Bostic, Karel, Quarterman)? Specifically, what kind of operation/reaction would require scanning the mappings?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:363
+msgid ""
+"A `vm_page` represents an (object,index#) tuple. A `pv_entry` represents a "
+"hardware page table entry (pte). If you have five processes sharing the "
+"same physical page, and three of those processes's page tables actually map "
+"the page, that page will be represented by a single `vm_page` structure and "
+"three `pv_entry` structures."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:366
+msgid ""
+"`pv_entry` structures only represent pages mapped by the MMU (one `pv_entry` "
+"represents one pte). This means that when we need to remove all hardware "
+"references to a `vm_page` (to reuse the page for something else, page it "
+"out, clear it, dirty it, and so forth) we can simply scan the linked list of "
+"pv_entry's associated with that vm_page to remove or modify the pte's from "
+"their page tables."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:373
+msgid ""
+"Under Linux there is no such linked list. To remove all the hardware page "
+"table mappings for a `vm_page` linux must index into every VM object that "
+"_might_ have mapped the page. For example, if you have 50 processes all "
+"mapping the same shared library and want to get rid of page X in that "
+"library, you need to index into the page table for each of those 50 "
+"processes even if only 10 of them have actually mapped the page. So Linux "
+"is trading off the simplicity of its design against performance. Many VM "
+"algorithms which are O(1) or (small N) under FreeBSD wind up being O(N), "
+"O(N^2), or worse under Linux. Since the pte's representing a particular "
+"page in an object tend to be at the same offset in all the page tables they "
+"are mapped in, reducing the number of accesses into the page tables at the "
+"same pte offset will often avoid blowing away the L1 cache line for that "
+"offset, which can lead to better performance."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:375
+msgid ""
+"FreeBSD has added complexity (the `pv_entry` scheme) to increase performance "
+"(to limit page table accesses to _only_ those pte's that need to be "
+"modified)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:379
+msgid ""
+"But FreeBSD has a scaling problem that Linux does not in that there are a "
+"limited number of `pv_entry` structures and this causes problems when you "
+"have massive sharing of data. In this case you may run out of `pv_entry` "
+"structures even though there is plenty of free memory available. This can "
+"be fixed easily enough by bumping up the number of `pv_entry` structures in "
+"the kernel config, but we really need to find a better way to do it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:383
+msgid ""
+"In regards to the memory overhead of a page table verses the `pv_entry` "
+"scheme: Linux uses \"permanent\" page tables that are not throw away, but "
+"does not need a `pv_entry` for each potentially mapped pte. FreeBSD uses "
+"\"throw away\" page tables but adds in a `pv_entry` structure for each "
+"actually-mapped pte. I think memory utilization winds up being about the "
+"same, giving FreeBSD an algorithmic advantage with its ability to throw away "
+"page tables at will with very low overhead."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/vm-design/_index.adoc:384
+#, no-wrap
+msgid "Finally, in the page coloring section, it might help to have a little more description of what you mean here. I did not quite follow it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:389
+msgid ""
+"Do you know how an L1 hardware memory cache works? I will explain: Consider "
+"a machine with 16MB of main memory but only 128K of L1 cache. Generally the "
+"way this cache works is that each 128K block of main memory uses the _same_ "
+"128K of cache. If you access offset 0 in main memory and then offset 128K "
+"in main memory you can wind up throwing away the cached data you read from "
+"offset 0!"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:395
+msgid ""
+"Now, I am simplifying things greatly. What I just described is what is "
+"called a \"direct mapped\" hardware memory cache. Most modern caches are "
+"what are called 2-way-set-associative or 4-way-set-associative caches. The "
+"set-associatively allows you to access up to N different memory regions that "
+"overlap the same cache memory without destroying the previously cached "
+"data. But only N."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:398
+msgid ""
+"So if I have a 4-way set associative cache I can access offset 0, offset "
+"128K, 256K and offset 384K and still be able to access offset 0 again and "
+"have it come from the L1 cache. If I then access offset 512K, however, one "
+"of the four previously cached data objects will be thrown away by the cache."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:402
+msgid ""
+"It is extremely important... _extremely_ important for most of a processor's "
+"memory accesses to be able to come from the L1 cache, because the L1 cache "
+"operates at the processor frequency. The moment you have an L1 cache miss "
+"and have to go to the L2 cache or to main memory, the processor will stall "
+"and potentially sit twiddling its fingers for _hundreds_ of instructions "
+"worth of time waiting for a read from main memory to complete. Main memory "
+"(the dynamic ram you stuff into a computer) is __slow__, when compared to "
+"the speed of a modern processor core."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:406
+msgid ""
+"Ok, so now onto page coloring: All modern memory caches are what are known "
+"as _physical_ caches. They cache physical memory addresses, not virtual "
+"memory addresses. This allows the cache to be left alone across a process "
+"context switch, which is very important."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:411
+msgid ""
+"But in the UNIX(R) world you are dealing with virtual address spaces, not "
+"physical address spaces. Any program you write will see the virtual address "
+"space given to it. The actual _physical_ pages underlying that virtual "
+"address space are not necessarily physically contiguous! In fact, you might "
+"have two pages that are side by side in a processes address space which wind "
+"up being at offset 0 and offset 128K in _physical_ memory."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:415
+msgid ""
+"A program normally assumes that two side-by-side pages will be optimally "
+"cached. That is, that you can access data objects in both pages without "
+"having them blow away each other's cache entry. But this is only true if "
+"the physical pages underlying the virtual address space are contiguous "
+"(insofar as the cache is concerned)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:419
+msgid ""
+"This is what Page coloring does. Instead of assigning _random_ physical "
+"pages to virtual addresses, which may result in non-optimal cache "
+"performance, Page coloring assigns _reasonably-contiguous_ physical pages to "
+"virtual addresses. Thus programs can be written under the assumption that "
+"the characteristics of the underlying hardware cache are the same for their "
+"virtual address space as they would be if the program had been run directly "
+"in a physical address space."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vm-design/_index.adoc:423
+msgid ""
+"Note that I say \"reasonably\" contiguous rather than simply "
+"\"contiguous\". From the point of view of a 128K direct mapped cache, the "
+"physical address 0 is the same as the physical address 128K. So two side-by-"
+"side pages in your virtual address space may wind up being offset 128K and "
+"offset 132K in physical memory, but could also easily be offset 128K and "
+"offset 4K in physical memory and still retain the same cache performance "
+"characteristics. So page-coloring does _not_ have to assign truly "
+"contiguous pages of physical memory to contiguous pages of virtual memory, "
+"it just needs to make sure it assigns contiguous pages from the point of "
+"view of cache performance and operation."
+msgstr ""
diff --git a/documentation/content/en/articles/vpn-ipsec/_index.adoc b/documentation/content/en/articles/vpn-ipsec/_index.adoc
new file mode 100644
index 0000000000..882a4c0f34
--- /dev/null
+++ b/documentation/content/en/articles/vpn-ipsec/_index.adoc
@@ -0,0 +1,326 @@
+---
+title: VPN over IPsec
+authors:
+ - author: The FreeBSD Documentation Project
+copyright: 2023 The FreeBSD Documentation Project
+description: VPN over IPsec
+trademarks: ["freebsd", "general"]
+---
+
+= VPN over IPsec
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+
+'''
+
+toc::[]
+
+Internet Protocol Security (IPsec) is a set of protocols which sit on top of the Internet Protocol (IP) layer.
+It allows two or more hosts to communicate in a secure manner by authenticating and encrypting each IP packet of a communication session.
+The FreeBSD IPsec network stack is based on the http://www.kame.net/[http://www.kame.net/] implementation and supports both IPv4 and IPv6 sessions.
+
+IPsec is comprised of the following sub-protocols:
+
+* _Encapsulated Security Payload (ESP)_: this protocol protects the IP packet data from third party interference by encrypting the contents using symmetric cryptography algorithms such as Blowfish and 3DES.
+* _Authentication Header (AH)_: this protocol protects the IP packet header from third party interference and spoofing by computing a cryptographic checksum and hashing the IP packet header fields with a secure hashing function. This is then followed by an additional header that contains the hash, to allow the information in the packet to be authenticated.
+* _IP Payload Compression Protocol (IPComp_): this protocol tries to increase communication performance by compressing the IP payload in order to reduce the amount of data sent.
+
+These protocols can either be used together or separately, depending on the environment.
+
+IPsec supports two modes of operation.
+The first mode, _Transport Mode_, protects communications between two hosts.
+The second mode, _Tunnel Mode_, is used to build virtual tunnels, commonly known as Virtual Private Networks (VPNs).
+Consult man:ipsec[4] for detailed information on the IPsec subsystem in FreeBSD.
+
+The article demonstrates the process of setting up an IPsecVPN between a home network and a corporate network.
+
+In the example scenario:
+
+* Both sites are connected to the Internet through a gateway that is running FreeBSD.
+* The gateway on each network has at least one external IP address. In this example, the corporate LAN's external IP address is `172.16.5.4` and the home LAN's external IP address is `192.168.1.12`.
+* The internal addresses of the two networks can be either public or private IP addresses. However, the address space must not overlap. In this example, the corporate LAN's internal IP address is `10.246.38.1` and the home LAN's internal IP address is `10.0.0.5`.
+
+[.programlisting]
+....
+ corporate home
+10.246.38.1/24 -- 172.16.5.4 <--> 192.168.1.12 -- 10.0.0.5/24
+....
+
+== Configuring a VPN on FreeBSD
+
+To begin, package:security/ipsec-tools[] must be installed from the Ports Collection.
+This software provides a number of applications which support the configuration.
+
+The next requirement is to create two man:gif[4] pseudo-devices which will be used to tunnel packets and allow both networks to communicate properly.
+As `root`, run the following command on each gateway:
+
+[source,shell]
+....
+corp-gw# ifconfig gif0 create
+corp-gw# ifconfig gif0 10.246.38.1 10.0.0.5
+corp-gw# ifconfig gif0 tunnel 172.16.5.4 192.168.1.12
+....
+
+[source,shell]
+....
+home-gw# ifconfig gif0 create
+home-gw# ifconfig gif0 10.0.0.5 10.246.38.1
+home-gw# ifconfig gif0 tunnel 192.168.1.12 172.16.5.4
+....
+
+Verify the setup on each gateway, using `ifconfig gif0`.
+Here is the output from the home gateway:
+
+[.programlisting]
+....
+gif0: flags=8051 mtu 1280
+tunnel inet 172.16.5.4 --> 192.168.1.12
+inet6 fe80::2e0:81ff:fe02:5881%gif0 prefixlen 64 scopeid 0x6
+inet 10.246.38.1 --> 10.0.0.5 netmask 0xffffff00
+....
+
+Here is the output from the corporate gateway:
+
+[.programlisting]
+....
+gif0: flags=8051 mtu 1280
+tunnel inet 192.168.1.12 --> 172.16.5.4
+inet 10.0.0.5 --> 10.246.38.1 netmask 0xffffff00
+inet6 fe80::250:bfff:fe3a:c1f%gif0 prefixlen 64 scopeid 0x4
+....
+
+Once complete, both internal IP addresses should be reachable using man:ping[8]:
+
+[source,shell]
+....
+home-gw# ping 10.0.0.5
+PING 10.0.0.5 (10.0.0.5): 56 data bytes
+64 bytes from 10.0.0.5: icmp_seq=0 ttl=64 time=42.786 ms
+64 bytes from 10.0.0.5: icmp_seq=1 ttl=64 time=19.255 ms
+64 bytes from 10.0.0.5: icmp_seq=2 ttl=64 time=20.440 ms
+64 bytes from 10.0.0.5: icmp_seq=3 ttl=64 time=21.036 ms
+--- 10.0.0.5 ping statistics ---
+4 packets transmitted, 4 packets received, 0% packet loss
+round-trip min/avg/max/stddev = 19.255/25.879/42.786/9.782 ms
+
+corp-gw# ping 10.246.38.1
+PING 10.246.38.1 (10.246.38.1): 56 data bytes
+64 bytes from 10.246.38.1: icmp_seq=0 ttl=64 time=28.106 ms
+64 bytes from 10.246.38.1: icmp_seq=1 ttl=64 time=42.917 ms
+64 bytes from 10.246.38.1: icmp_seq=2 ttl=64 time=127.525 ms
+64 bytes from 10.246.38.1: icmp_seq=3 ttl=64 time=119.896 ms
+64 bytes from 10.246.38.1: icmp_seq=4 ttl=64 time=154.524 ms
+--- 10.246.38.1 ping statistics ---
+5 packets transmitted, 5 packets received, 0% packet loss
+round-trip min/avg/max/stddev = 28.106/94.594/154.524/49.814 ms
+....
+
+As expected, both sides have the ability to send and receive ICMP packets from the privately configured addresses.
+Next, both gateways must be told how to route packets in order to correctly send traffic from the networks behind each gateway.
+The following commands will achieve this goal:
+
+[source,shell]
+....
+corp-gw# route add 10.0.0.0 10.0.0.5 255.255.255.0
+corp-gw# route add net 10.0.0.0: gateway 10.0.0.5
+home-gw# route add 10.246.38.0 10.246.38.1 255.255.255.0
+home-gw# route add host 10.246.38.0: gateway 10.246.38.1
+....
+
+Internal machines should be reachable from each gateway as well as from machines behind the gateways.
+Again, use man:ping[8] to confirm:
+
+[source,shell]
+....
+corp-gw# ping -c 3 10.0.0.8
+PING 10.0.0.8 (10.0.0.8): 56 data bytes
+64 bytes from 10.0.0.8: icmp_seq=0 ttl=63 time=92.391 ms
+64 bytes from 10.0.0.8: icmp_seq=1 ttl=63 time=21.870 ms
+64 bytes from 10.0.0.8: icmp_seq=2 ttl=63 time=198.022 ms
+--- 10.0.0.8 ping statistics ---
+3 packets transmitted, 3 packets received, 0% packet loss
+round-trip min/avg/max/stddev = 21.870/101.846/198.022/74.001 ms
+
+home-gw# ping -c 3 10.246.38.107
+PING 10.246.38.1 (10.246.38.107): 56 data bytes
+64 bytes from 10.246.38.107: icmp_seq=0 ttl=64 time=53.491 ms
+64 bytes from 10.246.38.107: icmp_seq=1 ttl=64 time=23.395 ms
+64 bytes from 10.246.38.107: icmp_seq=2 ttl=64 time=23.865 ms
+--- 10.246.38.107 ping statistics ---
+3 packets transmitted, 3 packets received, 0% packet loss
+round-trip min/avg/max/stddev = 21.145/31.721/53.491/12.179 ms
+....
+
+At this point, traffic is flowing between the networks encapsulated in a gif tunnel but without any encryption.
+Next, use IPSec to encrypt traffic using pre-shared keys (PSK).
+Other than the IP addresses, [.filename]#/usr/local/etc/racoon/racoon.conf# on both gateways will be identical and look similar to:
+
+[.programlisting]
+....
+path pre_shared_key "/usr/local/etc/racoon/psk.txt"; #location of pre-shared key file
+log debug; #log verbosity setting: set to 'notify' when testing and debugging is complete
+
+padding # options are not to be changed
+{
+ maximum_length 20;
+ randomize off;
+ strict_check off;
+ exclusive_tail off;
+}
+
+timer # timing options. change as needed
+{
+ counter 5;
+ interval 20 sec;
+ persend 1;
+# natt_keepalive 15 sec;
+ phase1 30 sec;
+ phase2 15 sec;
+}
+
+listen # address [port] that racoon will listen on
+{
+ isakmp 172.16.5.4 [500];
+ isakmp_natt 172.16.5.4 [4500];
+}
+
+remote 192.168.1.12 [500]
+{
+ exchange_mode main,aggressive;
+ doi ipsec_doi;
+ situation identity_only;
+ my_identifier address 172.16.5.4;
+ peers_identifier address 192.168.1.12;
+ lifetime time 8 hour;
+ passive off;
+ proposal_check obey;
+# nat_traversal off;
+ generate_policy off;
+
+ proposal {
+ encryption_algorithm blowfish;
+ hash_algorithm md5;
+ authentication_method pre_shared_key;
+ lifetime time 30 sec;
+ dh_group 1;
+ }
+}
+
+sainfo (address 10.246.38.0/24 any address 10.0.0.0/24 any) # address $network/$netmask $type address $network/$netmask $type ( $type being any or esp)
+{ # $network must be the two internal networks you are joining.
+ pfs_group 1;
+ lifetime time 36000 sec;
+ encryption_algorithm blowfish,3des;
+ authentication_algorithm hmac_md5,hmac_sha1;
+ compression_algorithm deflate;
+}
+....
+
+For descriptions of each available option, refer to the manual page for [.filename]#racoon.conf#.
+
+The Security Policy Database (SPD) needs to be configured so that FreeBSD and racoon are able to encrypt and decrypt network traffic between the hosts.
+
+This can be achieved with a shell script, similar to the following, on the corporate gateway.
+This file will be used during system initialization and should be saved as [.filename]#/usr/local/etc/racoon/setkey.conf#.
+
+[.programlisting]
+....
+flush;
+spdflush;
+# To the home network
+spdadd 10.246.38.0/24 10.0.0.0/24 any -P out ipsec esp/tunnel/172.16.5.4-192.168.1.12/use;
+spdadd 10.0.0.0/24 10.246.38.0/24 any -P in ipsec esp/tunnel/192.168.1.12-172.16.5.4/use;
+....
+
+Once in place, racoon may be started on both gateways using the following command:
+
+[source,shell]
+....
+# /usr/local/sbin/racoon -F -f /usr/local/etc/racoon/racoon.conf -l /var/log/racoon.log
+....
+
+The output should be similar to the following:
+
+[source,shell]
+....
+corp-gw# /usr/local/sbin/racoon -F -f /usr/local/etc/racoon/racoon.conf
+Foreground mode.
+2006-01-30 01:35:47: INFO: begin Identity Protection mode.
+2006-01-30 01:35:48: INFO: received Vendor ID: KAME/racoon
+2006-01-30 01:35:55: INFO: received Vendor ID: KAME/racoon
+2006-01-30 01:36:04: INFO: ISAKMP-SA established 172.16.5.4[500]-192.168.1.12[500] spi:623b9b3bd2492452:7deab82d54ff704a
+2006-01-30 01:36:05: INFO: initiate new phase 2 negotiation: 172.16.5.4[0]192.168.1.12[0]
+2006-01-30 01:36:09: INFO: IPsec-SA established: ESP/Tunnel 192.168.1.12[0]->172.16.5.4[0] spi=28496098(0x1b2d0e2)
+2006-01-30 01:36:09: INFO: IPsec-SA established: ESP/Tunnel 172.16.5.4[0]->192.168.1.12[0] spi=47784998(0x2d92426)
+2006-01-30 01:36:13: INFO: respond new phase 2 negotiation: 172.16.5.4[0]192.168.1.12[0]
+2006-01-30 01:36:18: INFO: IPsec-SA established: ESP/Tunnel 192.168.1.12[0]->172.16.5.4[0] spi=124397467(0x76a279b)
+2006-01-30 01:36:18: INFO: IPsec-SA established: ESP/Tunnel 172.16.5.4[0]->192.168.1.12[0] spi=175852902(0xa7b4d66)
+....
+
+To ensure the tunnel is working properly, switch to another console and use man:tcpdump[1] to view network traffic using the following command.
+Replace `em0` with the network interface card as required:
+
+[source,shell]
+....
+corp-gw# tcpdump -i em0 host 172.16.5.4 and dst 192.168.1.12
+....
+
+Data similar to the following should appear on the console.
+If not, there is an issue and debugging the returned data will be required.
+
+[.programlisting]
+....
+01:47:32.021683 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xa)
+01:47:33.022442 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xb)
+01:47:34.024218 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xc)
+....
+
+At this point, both networks should be available and seem to be part of the same network.
+Most likely both networks are protected by a firewall.
+To allow traffic to flow between them, rules need to be added to pass packets.
+For the man:ipfw[8] firewall, add the following lines to the firewall configuration file:
+
+[.programlisting]
+....
+ipfw add 00201 allow log esp from any to any
+ipfw add 00202 allow log ah from any to any
+ipfw add 00203 allow log ipencap from any to any
+ipfw add 00204 allow log udp from any 500 to any
+....
+
+[NOTE]
+====
+The rule numbers may need to be altered depending on the current host configuration.
+====
+
+For users of man:pf[4] or man:ipf[8], the following rules should do the trick:
+
+[.programlisting]
+....
+pass in quick proto esp from any to any
+pass in quick proto ah from any to any
+pass in quick proto ipencap from any to any
+pass in quick proto udp from any port = 500 to any port = 500
+pass in quick on gif0 from any to any
+pass out quick proto esp from any to any
+pass out quick proto ah from any to any
+pass out quick proto ipencap from any to any
+pass out quick proto udp from any port = 500 to any port = 500
+pass out quick on gif0 from any to any
+....
+
+Finally, to allow the machine to start support for the VPN during system initialization, add the following lines to [.filename]#/etc/rc.conf#:
+
+[.programlisting]
+....
+ipsec_enable="YES"
+ipsec_program="/usr/local/sbin/setkey"
+ipsec_file="/usr/local/etc/racoon/setkey.conf" # allows setting up spd policies on boot
+racoon_enable="yes"
+....
diff --git a/documentation/content/en/articles/vpn-ipsec/_index.po b/documentation/content/en/articles/vpn-ipsec/_index.po
new file mode 100644
index 0000000000..906793f27a
--- /dev/null
+++ b/documentation/content/en/articles/vpn-ipsec/_index.po
@@ -0,0 +1,586 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:1
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:10
+#, no-wrap
+msgid "VPN over IPsec"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:21
+msgid "'''"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:27
+msgid ""
+"Internet Protocol Security (IPsec) is a set of protocols which sit on top of "
+"the Internet Protocol (IP) layer. It allows two or more hosts to "
+"communicate in a secure manner by authenticating and encrypting each IP "
+"packet of a communication session. The FreeBSD IPsec network stack is based "
+"on the http://www.kame.net/[http://www.kame.net/] implementation and "
+"supports both IPv4 and IPv6 sessions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:29
+msgid "IPsec is comprised of the following sub-protocols:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:31
+msgid ""
+"_Encapsulated Security Payload (ESP)_: this protocol protects the IP packet "
+"data from third party interference by encrypting the contents using "
+"symmetric cryptography algorithms such as Blowfish and 3DES."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:32
+msgid ""
+"_Authentication Header (AH)_: this protocol protects the IP packet header "
+"from third party interference and spoofing by computing a cryptographic "
+"checksum and hashing the IP packet header fields with a secure hashing "
+"function. This is then followed by an additional header that contains the "
+"hash, to allow the information in the packet to be authenticated."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:33
+msgid ""
+"_IP Payload Compression Protocol (IPComp_): this protocol tries to increase "
+"communication performance by compressing the IP payload in order to reduce "
+"the amount of data sent."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:35
+msgid ""
+"These protocols can either be used together or separately, depending on the "
+"environment."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:40
+msgid ""
+"IPsec supports two modes of operation. The first mode, _Transport Mode_, "
+"protects communications between two hosts. The second mode, _Tunnel Mode_, "
+"is used to build virtual tunnels, commonly known as Virtual Private Networks "
+"(VPNs). Consult man:ipsec[4] for detailed information on the IPsec "
+"subsystem in FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:42
+msgid ""
+"The article demonstrates the process of setting up an IPsecVPN between a "
+"home network and a corporate network."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:44
+msgid "In the example scenario:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:46
+msgid ""
+"Both sites are connected to the Internet through a gateway that is running "
+"FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:47
+msgid ""
+"The gateway on each network has at least one external IP address. In this "
+"example, the corporate LAN's external IP address is `172.16.5.4` and the "
+"home LAN's external IP address is `192.168.1.12`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:48
+msgid ""
+"The internal addresses of the two networks can be either public or private "
+"IP addresses. However, the address space must not overlap. In this example, "
+"the corporate LAN's internal IP address is `10.246.38.1` and the home LAN's "
+"internal IP address is `10.0.0.5`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:53
+#, no-wrap
+msgid ""
+" corporate home\n"
+"10.246.38.1/24 -- 172.16.5.4 <--> 192.168.1.12 -- 10.0.0.5/24\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:55
+#, no-wrap
+msgid "Configuring a VPN on FreeBSD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:59
+msgid ""
+"To begin, package:security/ipsec-tools[] must be installed from the Ports "
+"Collection. This software provides a number of applications which support "
+"the configuration."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:62
+msgid ""
+"The next requirement is to create two man:gif[4] pseudo-devices which will "
+"be used to tunnel packets and allow both networks to communicate properly. "
+"As `root`, run the following command on each gateway:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:68
+#, no-wrap
+msgid ""
+"corp-gw# ifconfig gif0 create\n"
+"corp-gw# ifconfig gif0 10.246.38.1 10.0.0.5\n"
+"corp-gw# ifconfig gif0 tunnel 172.16.5.4 192.168.1.12\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:75
+#, no-wrap
+msgid ""
+"home-gw# ifconfig gif0 create\n"
+"home-gw# ifconfig gif0 10.0.0.5 10.246.38.1\n"
+"home-gw# ifconfig gif0 tunnel 192.168.1.12 172.16.5.4\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:79
+msgid ""
+"Verify the setup on each gateway, using `ifconfig gif0`. Here is the output "
+"from the home gateway:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:86
+#, no-wrap
+msgid ""
+"gif0: flags=8051 mtu 1280\n"
+"tunnel inet 172.16.5.4 --> 192.168.1.12\n"
+"inet6 fe80::2e0:81ff:fe02:5881%gif0 prefixlen 64 scopeid 0x6\n"
+"inet 10.246.38.1 --> 10.0.0.5 netmask 0xffffff00\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:89
+msgid "Here is the output from the corporate gateway:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:96
+#, no-wrap
+msgid ""
+"gif0: flags=8051 mtu 1280\n"
+"tunnel inet 192.168.1.12 --> 172.16.5.4\n"
+"inet 10.0.0.5 --> 10.246.38.1 netmask 0xffffff00\n"
+"inet6 fe80::250:bfff:fe3a:c1f%gif0 prefixlen 64 scopeid 0x4\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:99
+msgid ""
+"Once complete, both internal IP addresses should be reachable using "
+"man:ping[8]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:111
+#, no-wrap
+msgid ""
+"home-gw# ping 10.0.0.5\n"
+"PING 10.0.0.5 (10.0.0.5): 56 data bytes\n"
+"64 bytes from 10.0.0.5: icmp_seq=0 ttl=64 time=42.786 ms\n"
+"64 bytes from 10.0.0.5: icmp_seq=1 ttl=64 time=19.255 ms\n"
+"64 bytes from 10.0.0.5: icmp_seq=2 ttl=64 time=20.440 ms\n"
+"64 bytes from 10.0.0.5: icmp_seq=3 ttl=64 time=21.036 ms\n"
+"--- 10.0.0.5 ping statistics ---\n"
+"4 packets transmitted, 4 packets received, 0% packet loss\n"
+"round-trip min/avg/max/stddev = 19.255/25.879/42.786/9.782 ms\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:122
+#, no-wrap
+msgid ""
+"corp-gw# ping 10.246.38.1\n"
+"PING 10.246.38.1 (10.246.38.1): 56 data bytes\n"
+"64 bytes from 10.246.38.1: icmp_seq=0 ttl=64 time=28.106 ms\n"
+"64 bytes from 10.246.38.1: icmp_seq=1 ttl=64 time=42.917 ms\n"
+"64 bytes from 10.246.38.1: icmp_seq=2 ttl=64 time=127.525 ms\n"
+"64 bytes from 10.246.38.1: icmp_seq=3 ttl=64 time=119.896 ms\n"
+"64 bytes from 10.246.38.1: icmp_seq=4 ttl=64 time=154.524 ms\n"
+"--- 10.246.38.1 ping statistics ---\n"
+"5 packets transmitted, 5 packets received, 0% packet loss\n"
+"round-trip min/avg/max/stddev = 28.106/94.594/154.524/49.814 ms\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:127
+msgid ""
+"As expected, both sides have the ability to send and receive ICMP packets "
+"from the privately configured addresses. Next, both gateways must be told "
+"how to route packets in order to correctly send traffic from the networks "
+"behind each gateway. The following commands will achieve this goal:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:134
+#, no-wrap
+msgid ""
+"corp-gw# route add 10.0.0.0 10.0.0.5 255.255.255.0\n"
+"corp-gw# route add net 10.0.0.0: gateway 10.0.0.5\n"
+"home-gw# route add 10.246.38.0 10.246.38.1 255.255.255.0\n"
+"home-gw# route add host 10.246.38.0: gateway 10.246.38.1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:138
+msgid ""
+"Internal machines should be reachable from each gateway as well as from "
+"machines behind the gateways. Again, use man:ping[8] to confirm:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:149
+#, no-wrap
+msgid ""
+"corp-gw# ping -c 3 10.0.0.8\n"
+"PING 10.0.0.8 (10.0.0.8): 56 data bytes\n"
+"64 bytes from 10.0.0.8: icmp_seq=0 ttl=63 time=92.391 ms\n"
+"64 bytes from 10.0.0.8: icmp_seq=1 ttl=63 time=21.870 ms\n"
+"64 bytes from 10.0.0.8: icmp_seq=2 ttl=63 time=198.022 ms\n"
+"--- 10.0.0.8 ping statistics ---\n"
+"3 packets transmitted, 3 packets received, 0% packet loss\n"
+"round-trip min/avg/max/stddev = 21.870/101.846/198.022/74.001 ms\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:158
+#, no-wrap
+msgid ""
+"home-gw# ping -c 3 10.246.38.107\n"
+"PING 10.246.38.1 (10.246.38.107): 56 data bytes\n"
+"64 bytes from 10.246.38.107: icmp_seq=0 ttl=64 time=53.491 ms\n"
+"64 bytes from 10.246.38.107: icmp_seq=1 ttl=64 time=23.395 ms\n"
+"64 bytes from 10.246.38.107: icmp_seq=2 ttl=64 time=23.865 ms\n"
+"--- 10.246.38.107 ping statistics ---\n"
+"3 packets transmitted, 3 packets received, 0% packet loss\n"
+"round-trip min/avg/max/stddev = 21.145/31.721/53.491/12.179 ms\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:163
+msgid ""
+"At this point, traffic is flowing between the networks encapsulated in a gif "
+"tunnel but without any encryption. Next, use IPSec to encrypt traffic using "
+"pre-shared keys (PSK). Other than the IP addresses, "
+"[.filename]#/usr/local/etc/racoon/racoon.conf# on both gateways will be "
+"identical and look similar to:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:168
+#, no-wrap
+msgid ""
+"path pre_shared_key \"/usr/local/etc/racoon/psk.txt\"; #location of "
+"pre-shared key file\n"
+"log debug;\t#log verbosity setting: set to 'notify' when testing and "
+"debugging is complete\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:176
+#, no-wrap
+msgid ""
+"padding\t# options are not to be changed\n"
+"{\n"
+" maximum_length 20;\n"
+" randomize off;\n"
+" strict_check off;\n"
+" exclusive_tail off;\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:186
+#, no-wrap
+msgid ""
+"timer\t# timing options. change as needed\n"
+"{\n"
+" counter 5;\n"
+" interval 20 sec;\n"
+" persend 1;\n"
+"# natt_keepalive 15 sec;\n"
+" phase1 30 sec;\n"
+" phase2 15 sec;\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:192
+#, no-wrap
+msgid ""
+"listen\t# address [port] that racoon will listen on\n"
+"{\n"
+" isakmp 172.16.5.4 [500];\n"
+" isakmp_natt 172.16.5.4 [4500];\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:205
+#, no-wrap
+msgid ""
+"remote 192.168.1.12 [500]\n"
+"{\n"
+" exchange_mode main,aggressive;\n"
+" doi ipsec_doi;\n"
+" situation identity_only;\n"
+" my_identifier address 172.16.5.4;\n"
+" peers_identifier address 192.168.1.12;\n"
+" lifetime time 8 hour;\n"
+" passive off;\n"
+" proposal_check obey;\n"
+"# nat_traversal off;\n"
+" generate_policy off;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:214
+#, no-wrap
+msgid ""
+" proposal {\n"
+" encryption_algorithm blowfish;\n"
+" hash_algorithm md5;\n"
+" authentication_method pre_shared_key;\n"
+" lifetime time 30 sec;\n"
+" dh_group 1;\n"
+" }\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:223
+#, no-wrap
+msgid ""
+"sainfo (address 10.246.38.0/24 any address 10.0.0.0/24 any)\t# address "
+"$network/$netmask $type address $network/$netmask $type ( $type being any or "
+"esp)\n"
+"{\t\t\t\t\t\t\t\t# $network must be the two internal networks you are "
+"joining.\n"
+" pfs_group 1;\n"
+" lifetime time 36000 sec;\n"
+" encryption_algorithm blowfish,3des;\n"
+" authentication_algorithm hmac_md5,hmac_sha1;\n"
+" compression_algorithm deflate;\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:226
+msgid ""
+"For descriptions of each available option, refer to the manual page for "
+"[.filename]#racoon.conf#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:228
+msgid ""
+"The Security Policy Database (SPD) needs to be configured so that FreeBSD "
+"and racoon are able to encrypt and decrypt network traffic between the "
+"hosts."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:231
+msgid ""
+"This can be achieved with a shell script, similar to the following, on the "
+"corporate gateway. This file will be used during system initialization and "
+"should be saved as [.filename]#/usr/local/etc/racoon/setkey.conf#."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:239
+#, no-wrap
+msgid ""
+"flush;\n"
+"spdflush;\n"
+"# To the home network\n"
+"spdadd 10.246.38.0/24 10.0.0.0/24 any -P out ipsec "
+"esp/tunnel/172.16.5.4-192.168.1.12/use;\n"
+"spdadd 10.0.0.0/24 10.246.38.0/24 any -P in ipsec "
+"esp/tunnel/192.168.1.12-172.16.5.4/use;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:242
+msgid ""
+"Once in place, racoon may be started on both gateways using the following "
+"command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:246
+#, no-wrap
+msgid ""
+"# /usr/local/sbin/racoon -F -f /usr/local/etc/racoon/racoon.conf -l "
+"/var/log/racoon.log\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:249
+msgid "The output should be similar to the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:264
+#, no-wrap
+msgid ""
+"corp-gw# /usr/local/sbin/racoon -F -f /usr/local/etc/racoon/racoon.conf\n"
+"Foreground mode.\n"
+"2006-01-30 01:35:47: INFO: begin Identity Protection mode.\n"
+"2006-01-30 01:35:48: INFO: received Vendor ID: KAME/racoon\n"
+"2006-01-30 01:35:55: INFO: received Vendor ID: KAME/racoon\n"
+"2006-01-30 01:36:04: INFO: ISAKMP-SA established "
+"172.16.5.4[500]-192.168.1.12[500] spi:623b9b3bd2492452:7deab82d54ff704a\n"
+"2006-01-30 01:36:05: INFO: initiate new phase 2 negotiation: "
+"172.16.5.4[0]192.168.1.12[0]\n"
+"2006-01-30 01:36:09: INFO: IPsec-SA established: ESP/Tunnel "
+"192.168.1.12[0]->172.16.5.4[0] spi=28496098(0x1b2d0e2)\n"
+"2006-01-30 01:36:09: INFO: IPsec-SA established: ESP/Tunnel "
+"172.16.5.4[0]->192.168.1.12[0] spi=47784998(0x2d92426)\n"
+"2006-01-30 01:36:13: INFO: respond new phase 2 negotiation: "
+"172.16.5.4[0]192.168.1.12[0]\n"
+"2006-01-30 01:36:18: INFO: IPsec-SA established: ESP/Tunnel "
+"192.168.1.12[0]->172.16.5.4[0] spi=124397467(0x76a279b)\n"
+"2006-01-30 01:36:18: INFO: IPsec-SA established: ESP/Tunnel "
+"172.16.5.4[0]->192.168.1.12[0] spi=175852902(0xa7b4d66)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:268
+msgid ""
+"To ensure the tunnel is working properly, switch to another console and use "
+"man:tcpdump[1] to view network traffic using the following command. Replace "
+"`em0` with the network interface card as required:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:272
+#, no-wrap
+msgid "corp-gw# tcpdump -i em0 host 172.16.5.4 and dst 192.168.1.12\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:276
+msgid ""
+"Data similar to the following should appear on the console. If not, there "
+"is an issue and debugging the returned data will be required."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:282
+#, no-wrap
+msgid ""
+"01:47:32.021683 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: "
+"ESP(spi=0x02acbf9f,seq=0xa)\n"
+"01:47:33.022442 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: "
+"ESP(spi=0x02acbf9f,seq=0xb)\n"
+"01:47:34.024218 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: "
+"ESP(spi=0x02acbf9f,seq=0xc)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:288
+msgid ""
+"At this point, both networks should be available and seem to be part of the "
+"same network. Most likely both networks are protected by a firewall. To "
+"allow traffic to flow between them, rules need to be added to pass packets. "
+"For the man:ipfw[8] firewall, add the following lines to the firewall "
+"configuration file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:295
+#, no-wrap
+msgid ""
+"ipfw add 00201 allow log esp from any to any\n"
+"ipfw add 00202 allow log ah from any to any\n"
+"ipfw add 00203 allow log ipencap from any to any\n"
+"ipfw add 00204 allow log udp from any 500 to any\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:300
+msgid ""
+"The rule numbers may need to be altered depending on the current host "
+"configuration."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:303
+msgid ""
+"For users of man:pf[4] or man:ipf[8], the following rules should do the "
+"trick:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:316
+#, no-wrap
+msgid ""
+"pass in quick proto esp from any to any\n"
+"pass in quick proto ah from any to any\n"
+"pass in quick proto ipencap from any to any\n"
+"pass in quick proto udp from any port = 500 to any port = 500\n"
+"pass in quick on gif0 from any to any\n"
+"pass out quick proto esp from any to any\n"
+"pass out quick proto ah from any to any\n"
+"pass out quick proto ipencap from any to any\n"
+"pass out quick proto udp from any port = 500 to any port = 500\n"
+"pass out quick on gif0 from any to any\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:319
+msgid ""
+"Finally, to allow the machine to start support for the VPN during system "
+"initialization, add the following lines to [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/vpn-ipsec/_index.adoc:326
+#, no-wrap
+msgid ""
+"ipsec_enable=\"YES\"\n"
+"ipsec_program=\"/usr/local/sbin/setkey\"\n"
+"ipsec_file=\"/usr/local/etc/racoon/setkey.conf\" # allows setting up spd "
+"policies on boot\n"
+"racoon_enable=\"yes\"\n"
+msgstr ""
diff --git a/documentation/content/en/books/_index.po b/documentation/content/en/books/_index.po
new file mode 100644
index 0000000000..25a5f99dac
--- /dev/null
+++ b/documentation/content/en/books/_index.po
@@ -0,0 +1,29 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-01-08 11:34-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: documentation/content/en/books/_index.adoc:1
+#: documentation/content/en/books/_index.adoc:6
+#, no-wrap
+msgid "Books"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/_index.adoc:8
+msgid "{{< list-books-directories >}}"
+msgstr ""
diff --git a/documentation/content/en/books/arch-handbook/_index.adoc b/documentation/content/en/books/arch-handbook/_index.adoc
index bb01f09331..f12bdf69dd 100644
--- a/documentation/content/en/books/arch-handbook/_index.adoc
+++ b/documentation/content/en/books/arch-handbook/_index.adoc
@@ -2,7 +2,7 @@
title: FreeBSD Architecture Handbook
authors:
- author: The FreeBSD Documentation Project
-copyright: Copyright © 2000-2006, 2012-2021 The FreeBSD Documentation Project
+copyright: 2000-2006, 2012-2023 The FreeBSD Documentation Project
description: For FreeBSD system developers. This book covers the architectural details of many important FreeBSD kernel subsystems
trademarks: ["freebsd", "apple", "microsoft", "unix", "general"]
tags: ["Arch Handbook", "FreeBSD"]
diff --git a/documentation/content/en/books/arch-handbook/_index.po b/documentation/content/en/books/arch-handbook/_index.po
new file mode 100644
index 0000000000..8c24da20cb
--- /dev/null
+++ b/documentation/content/en/books/arch-handbook/_index.po
@@ -0,0 +1,59 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-07-07 23:22-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/arch-handbook/_index.adoc:1
+#, no-wrap
+msgid "For FreeBSD system developers. This book covers the architectural details of many important FreeBSD kernel subsystems"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/arch-handbook/_index.adoc:1
+#: documentation/content/en/books/arch-handbook/_index.adoc:17
+#, no-wrap
+msgid "FreeBSD Architecture Handbook"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/_index.adoc:50
+msgid "Abstract"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/_index.adoc:52
+msgid ""
+"Welcome to the FreeBSD Architecture Handbook. This manual is a _work in "
+"progress_ and is the work of many individuals. Many sections do not yet "
+"exist and some of those that do exist need to be updated. If you are "
+"interested in helping with this project, send email to the {freebsd-doc}."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/_index.adoc:54
+msgid ""
+"The latest version of this document is always available from the link:"
+"https://www.FreeBSD.org/[FreeBSD World Wide Web server]. It may also be "
+"downloaded in a variety of formats and compression options from the https://"
+"download.freebsd.org/doc/[FreeBSD download server] or one of the numerous "
+"extref:{handbook}[mirror sites, mirrors]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/_index.adoc:55
+msgid "'''"
+msgstr ""
diff --git a/documentation/content/en/books/arch-handbook/bibliography/_index.adoc b/documentation/content/en/books/arch-handbook/bibliography/_index.adoc
index d49d1d7aed..e3eba139d0 100644
--- a/documentation/content/en/books/arch-handbook/bibliography/_index.adoc
+++ b/documentation/content/en/books/arch-handbook/bibliography/_index.adoc
@@ -5,7 +5,7 @@ description: Bibliography of the FreeBSD Architecture Handbook
tags: ["bibliography", "Arch Handbook", "FreeBSD"]
showBookMenu: true
weight: 20
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/bibliography/"
---
[appendix]
diff --git a/documentation/content/en/books/arch-handbook/bibliography/_index.po b/documentation/content/en/books/arch-handbook/bibliography/_index.po
new file mode 100644
index 0000000000..66e66bec3c
--- /dev/null
+++ b/documentation/content/en/books/arch-handbook/bibliography/_index.po
@@ -0,0 +1,39 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:20-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/arch-handbook/bibliography/_index.adoc:1
+#, no-wrap
+msgid "Bibliography of the FreeBSD Architecture Handbook"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/arch-handbook/bibliography/_index.adoc:1
+#: documentation/content/en/books/arch-handbook/bibliography/_index.adoc:13
+#, no-wrap
+msgid "Bibliography"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/bibliography/_index.adoc:50
+msgid ""
+"[1] _Marshall Kirk McKusick, Keith Bostic, Michael J Karels, and John S "
+"Quarterman._ Copyright © 1996 Addison-Wesley Publishing Company, Inc.. "
+"0-201-54979-4. Addison-Wesley Publishing Company, Inc.. The Design and "
+"Implementation of the 4.4 BSD Operating System. 1-2."
+msgstr ""
diff --git a/documentation/content/en/books/arch-handbook/book.adoc b/documentation/content/en/books/arch-handbook/book.adoc
index 15b9bdede4..3273926895 100644
--- a/documentation/content/en/books/arch-handbook/book.adoc
+++ b/documentation/content/en/books/arch-handbook/book.adoc
@@ -2,7 +2,7 @@
title: FreeBSD Architecture Handbook
authors:
- author: The FreeBSD Documentation Project
-copyright: Copyright © 2000-2006, 2012-2021 The FreeBSD Documentation Project
+copyright: 2000-2006, 2012-2023 The FreeBSD Documentation Project
description: For FreeBSD system developers. This book covers the architectural details of many important FreeBSD kernel subsystems
trademarks: ["freebsd", "apple", "microsoft", "unix", "general"]
tags: ["Arch Handbook", "FreeBSD"]
diff --git a/documentation/content/en/books/arch-handbook/book.po b/documentation/content/en/books/arch-handbook/book.po
new file mode 100644
index 0000000000..cb1347a865
--- /dev/null
+++ b/documentation/content/en/books/arch-handbook/book.po
@@ -0,0 +1,59 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-07-07 23:22-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/arch-handbook/book.adoc:1
+#, no-wrap
+msgid "For FreeBSD system developers. This book covers the architectural details of many important FreeBSD kernel subsystems"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/arch-handbook/book.adoc:1
+#: documentation/content/en/books/arch-handbook/book.adoc:12
+#, no-wrap
+msgid "FreeBSD Architecture Handbook"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/book.adoc:49
+msgid "Abstract"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/book.adoc:51
+msgid ""
+"Welcome to the FreeBSD Architecture Handbook. This manual is a _work in "
+"progress_ and is the work of many individuals. Many sections do not yet "
+"exist and some of those that do exist need to be updated. If you are "
+"interested in helping with this project, send email to the {freebsd-doc}."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/book.adoc:53
+msgid ""
+"The latest version of this document is always available from the link:"
+"https://www.FreeBSD.org/[FreeBSD World Wide Web server]. It may also be "
+"downloaded in a variety of formats and compression options from the https://"
+"download.freebsd.org/doc/[FreeBSD download server] or one of the numerous "
+"extref:{handbook}[mirror sites, mirrors]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/book.adoc:55
+msgid "'''"
+msgstr ""
diff --git a/documentation/content/en/books/arch-handbook/boot/_index.adoc b/documentation/content/en/books/arch-handbook/boot/_index.adoc
index cca516e445..7a0eba19d3 100644
--- a/documentation/content/en/books/arch-handbook/boot/_index.adoc
+++ b/documentation/content/en/books/arch-handbook/boot/_index.adoc
@@ -6,7 +6,7 @@ description: Bootstrapping and Kernel Initialization
tags: ["boot", "BIOS", "kernel", "MBR", "FreeBSD"]
showBookMenu: true
weight: 2
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/boot/"
---
[[boot]]
@@ -189,7 +189,7 @@ The task of [.filename]#boot0# is quite simple: scan the partition table and let
The Partition Table is a special, standard data structure embedded in the MBR (hence embedded in [.filename]#boot0#) describing the four standard PC "partitions".
[.filename]#boot0# resides in the filesystem as [.filename]#/boot/boot0#.
It is a small 512-byte file, and it is exactly what FreeBSD's installation procedure wrote to the hard disk's MBR if you chose the "bootmanager" option at installation time.
-Indeed, [.filename]#boot0#_is_ the MBR.
+Indeed, [.filename]#boot0# _is_ the MBR.
As mentioned previously, we're calling the BIOS `INT 0x19` to load the MBR ([.filename]#boot0#) into memory at address `0x7c00`.
The source file for [.filename]#boot0# can be found in [.filename]#stand/i386/boot0/boot0.S# - which is an awesome piece of code written by Robert Nordier.
@@ -265,7 +265,7 @@ The next block is responsible for the relocation and subsequent jump to the relo
[.programlisting]
....
- movw %sp,%si # Source
+ movw %sp,%si # Source
movw $start,%di # Destination
movw $0x100,%cx # Word count
rep # Relocate
@@ -283,7 +283,8 @@ As [.filename]#boot0# is loaded by the BIOS to address `0x7C00`, it copies itsel
The source address, `0x7c00`, is copied to register `%si`.
The destination address, `0x600`, to register `%di`.
The number of words to copy, `256` (the program's size = 512 bytes), is copied to register `%cx`.
-Next, the `rep` instruction repeats the instruction that follows, that is, `movsw`, the number of times dictated by the `%cx` register.The `movsw` instruction copies the word pointed to by `%si` to the address pointed to by `%di`.
+Next, the `rep` instruction repeats the instruction that follows, that is, `movsw`, the number of times dictated by the `%cx` register.
+The `movsw` instruction copies the word pointed to by `%si` to the address pointed to by `%di`.
This is repeated another 255 times.
On each repetition, both the source and destination registers, `%si` and `%di`, are incremented by one.
Thus, upon completion of the 256-word (512-byte) copy, `%di` has the value `0x600`+`512`= `0x800`, and `%si` has the value `0x7c00`+`512`= `0x7e00`; we have thus completed the code _relocation_.
@@ -296,7 +297,8 @@ Now, `stosw` is executed 8 times.
This instruction copies a `0` value to the address pointed to by the destination register (`%di`, which is `0x800`), and increments it.
This is repeated another 7 times, so `%di` ends up with value `0x810`.
Effectively, this clears the address range `0x800`-`0x80f`.
-This range is used as a (fake) partition table for writing the MBR back to disk.Finally, the sector field for the CHS addressing of this fake partition is given the value 1 and a jump is made to the main function from the relocated code.
+This range is used as a (fake) partition table for writing the MBR back to disk.
+Finally, the sector field for the CHS addressing of this fake partition is given the value 1 and a jump is made to the main function from the relocated code.
Note that until this jump to the relocated code, any reference to an absolute address was avoided.
The following code block tests whether the drive number provided by the BIOS should be used, or the one stored in [.filename]#boot0#.
@@ -1345,7 +1347,7 @@ sys/i386/i386/locore.s:
=== `init386()`
-`init386()` is defined in [.filename]#sys/i386/i386/machdep.c# and performs low-level initialization specific to the i386 chip.The switch to protected mode was performed by the loader.
+`init386()` is defined in [.filename]#sys/i386/i386/machdep.c# and performs low-level initialization specific to the i386 chip. The switch to protected mode was performed by the loader.
The loader has created the very first task, in which the kernel continues to operate.
Before looking at the code, consider the tasks the processor must complete to initialize protected mode execution:
diff --git a/documentation/content/en/books/arch-handbook/boot/_index.po b/documentation/content/en/books/arch-handbook/boot/_index.po
new file mode 100644
index 0000000000..b74d9a119a
--- /dev/null
+++ b/documentation/content/en/books/arch-handbook/boot/_index.po
@@ -0,0 +1,3006 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-10-30 14:39-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:13
+#, no-wrap
+msgid "Bootstrapping and Kernel Initialization"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1
+#, no-wrap
+msgid "Chapter 1. Bootstrapping and Kernel Initialization"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:51
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:56
+msgid ""
+"This chapter is an overview of the boot and system initialization processes, "
+"starting from the BIOS (firmware) POST, to the first user process creation. "
+"Since the initial steps of system startup are very architecture dependent, "
+"the IA-32 architecture is used as an example. But the AMD64 and ARM64 "
+"architectures are much more important and compelling examples and should be "
+"explained in the near future according to the topic of this document."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:60
+msgid ""
+"The FreeBSD boot process can be surprisingly complex. After control is "
+"passed from the BIOS, a considerable amount of low-level configuration must "
+"be done before the kernel can be loaded and executed. This setup must be "
+"done in a simple and flexible manner, allowing the user a great deal of "
+"customization possibilities."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:62
+#, no-wrap
+msgid "Overview"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:75
+msgid ""
+"The boot process is an extremely machine-dependent activity. Not only must "
+"code be written for every computer architecture, but there may also be "
+"multiple types of booting on the same architecture. For example, a "
+"directory listing of [.filename]#stand# reveals a great amount of "
+"architecture-dependent code. There is a directory for each of the various "
+"supported architectures. FreeBSD supports the CSM boot standard "
+"(Compatibility Support Module). So CSM is supported (with both GPT and MBR "
+"partitioning support) and UEFI booting (GPT is totally supported, MBR is "
+"mostly supported). It also supports loading files from ext2fs, MSDOS, UFS "
+"and ZFS. FreeBSD also supports the boot environment feature of ZFS which "
+"allows the HOST OS to communicate details about what to boot that go beyond "
+"a simple partition as was possible in the past. But UEFI is more relevant "
+"than the CSM these days. The example that follows shows booting an x86 "
+"computer from an MBR-partitioned hard drive with the FreeBSD [."
+"filename]#boot0# multi-boot loader stored in the very first sector. That "
+"boot code starts the FreeBSD three-stage boot process."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:81
+msgid ""
+"The key to understanding this process is that it is a series of stages of "
+"increasing complexity. These stages are [.filename]#boot1#, [."
+"filename]#boot2#, and [.filename]#loader# (see man:boot[8] for more "
+"detail). The boot system executes each stage in sequence. The last stage, "
+"[.filename]#loader#, is responsible for loading the FreeBSD kernel. Each "
+"stage is examined in the following sections."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:84
+msgid ""
+"Here is an example of the output generated by the different boot stages. "
+"Actual output may differ from machine to machine:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:90
+#, no-wrap
+msgid "*FreeBSD Component*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:92
+#, no-wrap
+msgid "*Output (may vary)*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:93
+#, no-wrap
+msgid "`boot0`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:102
+#, no-wrap
+msgid ""
+"[source,bash]\n"
+"....\n"
+"F1 FreeBSD\n"
+"F2 BSD\n"
+"F5 Disk 2\n"
+"...."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:103
+#, no-wrap
+msgid "`boot2` footnote:[This prompt will appear if the user presses a key just after selecting an OS to boot at the boot0 stage.]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:112
+#, no-wrap
+msgid ""
+"[source,bash]\n"
+"....\n"
+">>FreeBSD/x86 BOOT\n"
+"Default: 0:ad(0p4)/boot/loader\n"
+"boot:\n"
+"...."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:113
+#, no-wrap
+msgid "[.filename]#loader#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:129
+#, no-wrap
+msgid ""
+"[source,bash]\n"
+"....\n"
+"BTX loader 1.00 BTX version is 1.02\n"
+"Consoles: internal video/keyboard\n"
+"BIOS drive C: is disk0\n"
+"BIOS 639kB/2096064kB available memory\n"
+"\n"
+"FreeBSD/x86 bootstrap loader, Revision 1.1\n"
+"Console internal video/keyboard\n"
+"(root@releng1.nyi.freebsd.org, Fri Apr 9 04:04:45 UTC 2021)\n"
+"Loading /boot/defaults/loader.conf\n"
+"/boot/kernel/kernel text=0xed9008 data=0x117d28+0x176650 syms=[0x8+0x137988+0x8+0x1515f8]\n"
+"...."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:130
+#, no-wrap
+msgid "kernel"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:143
+#, no-wrap
+msgid ""
+"[source,bash]\n"
+"....\n"
+"Copyright (c) 1992-2021 The FreeBSD Project.\n"
+"Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994\n"
+" The Regents of the University of California. All rights reserved.\n"
+"FreeBSD is a registered trademark of The FreeBSD Foundation.\n"
+"FreeBSD 13.0-RELEASE 0 releng/13.0-n244733-ea31abc261f: Fri Apr 9 04:04:45 UTC 2021\n"
+" root@releng1.nyi.freebsd.org:/usr/obj/usr/src/i386.i386/sys/GENERIC i386\n"
+"FreeBSD clang version 11.0.1 (git@github.com:llvm/llvm-project.git llvmorg-11.0.1-0-g43ff75f2c3fe)\n"
+"...."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:146
+#, no-wrap
+msgid "The BIOS"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:157
+msgid ""
+"When the computer powers on, the processor's registers are set to some "
+"predefined values. One of the registers is the _instruction pointer_ "
+"register, and its value after a power on is well defined: it is a 32-bit "
+"value of `0xfffffff0`. The instruction pointer register (also known as the "
+"Program Counter) points to code to be executed by the processor. Another "
+"important register is the `cr0` 32-bit control register, and its value just "
+"after a reboot is `0`. One of ``cr0``'s bits, the PE (Protection Enabled) "
+"bit, indicates whether the processor is running in 32-bit protected mode or "
+"16-bit real mode. Since this bit is cleared at boot time, the processor "
+"boots in 16-bit real mode. Real mode means, among other things, that linear "
+"and physical addresses are identical. The reason for the processor not to "
+"start immediately in 32-bit protected mode is backwards compatibility. In "
+"particular, the boot process relies on the services provided by the BIOS, "
+"and the BIOS itself works in legacy, 16-bit code."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:160
+msgid ""
+"The value of `0xfffffff0` is slightly less than 4 GB, so unless the machine "
+"has 4 GB of physical memory, it cannot point to a valid memory address. The "
+"computer's hardware translates this address so that it points to a BIOS "
+"memory block."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:165
+msgid ""
+"The BIOS (Basic Input Output System) is a chip on the motherboard that has a "
+"relatively small amount of read-only memory (ROM). This memory contains "
+"various low-level routines that are specific to the hardware supplied with "
+"the motherboard. The processor will first jump to the address 0xfffffff0, "
+"which really resides in the BIOS's memory. Usually this address contains a "
+"jump instruction to the BIOS's POST routines."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:169
+msgid ""
+"The POST (Power On Self Test) is a set of routines including the memory "
+"check, system bus check, and other low-level initialization so the CPU can "
+"set up the computer properly. The important step of this stage is "
+"determining the boot device. Modern BIOS implementations permit the "
+"selection of a boot device, allowing booting from a floppy, CD-ROM, hard "
+"disk, or other devices."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:178
+msgid ""
+"The very last thing in the POST is the `INT 0x19` instruction. The `INT "
+"0x19` handler reads 512 bytes from the first sector of boot device into the "
+"memory at address `0x7c00`. The term _first sector_ originates from hard "
+"drive architecture, where the magnetic plate is divided into a number of "
+"cylindrical tracks. Tracks are numbered, and every track is divided into a "
+"number (usually 64) of sectors. Track numbers start at 0, but sector "
+"numbers start from 1. Track 0 is the outermost on the magnetic plate, and "
+"sector 1, the first sector, has a special purpose. It is also called the "
+"MBR, or Master Boot Record. The remaining sectors on the first track are "
+"never used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:182
+msgid ""
+"This sector is our boot-sequence starting point. As we will see, this "
+"sector contains a copy of our [.filename]#boot0# program. A jump is made by "
+"the BIOS to address `0x7c00` so it starts executing."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:184
+#, no-wrap
+msgid "The Master Boot Record (`boot0`)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:193
+msgid ""
+"After control is received from the BIOS at memory address `0x7c00`, [."
+"filename]#boot0# starts executing. It is the first piece of code under "
+"FreeBSD control. The task of [.filename]#boot0# is quite simple: scan the "
+"partition table and let the user choose which partition to boot from. The "
+"Partition Table is a special, standard data structure embedded in the MBR "
+"(hence embedded in [.filename]#boot0#) describing the four standard PC "
+"\"partitions\". [.filename]#boot0# resides in the filesystem as [."
+"filename]#/boot/boot0#. It is a small 512-byte file, and it is exactly what "
+"FreeBSD's installation procedure wrote to the hard disk's MBR if you chose "
+"the \"bootmanager\" option at installation time. Indeed, [.filename]#boot0# "
+"_is_ the MBR."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:196
+msgid ""
+"As mentioned previously, we're calling the BIOS `INT 0x19` to load the MBR "
+"([.filename]#boot0#) into memory at address `0x7c00`. The source file for [."
+"filename]#boot0# can be found in [.filename]#stand/i386/boot0/boot0.S# - "
+"which is an awesome piece of code written by Robert Nordier."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:201
+msgid ""
+"A special structure starting from offset `0x1be` in the MBR is called the "
+"_partition table_. It has four records of 16 bytes each, called _partition "
+"records_, which represent how the hard disk is partitioned, or, in FreeBSD's "
+"terminology, sliced. One byte of those 16 says whether a partition (slice) "
+"is bootable or not. Exactly one record must have that flag set, otherwise [."
+"filename]#boot0#'s code will refuse to proceed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:203
+msgid "A partition record has the following fields:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:205
+msgid "the 1-byte filesystem type"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:206
+msgid "the 1-byte bootable flag"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:207
+msgid "the 6 byte descriptor in CHS format"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:208
+msgid "the 8 byte descriptor in LBA format"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:212
+msgid ""
+"A partition record descriptor contains information about where exactly the "
+"partition resides on the drive. Both descriptors, LBA and CHS, describe the "
+"same information, but in different ways: LBA (Logical Block Addressing) has "
+"the starting sector for the partition and the partition's length, while CHS "
+"(Cylinder Head Sector) has coordinates for the first and last sectors of the "
+"partition. The partition table ends with the special signature `0xaa55`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:217
+msgid ""
+"The MBR must fit into 512 bytes, a single disk sector. This program uses "
+"low-level \"tricks\" like taking advantage of the side effects of certain "
+"instructions and reusing register values from previous operations to make "
+"the most out of the fewest possible instructions. Care must also be taken "
+"when handling the partition table, which is embedded in the MBR itself. For "
+"these reasons, be very careful when modifying [.filename]#boot0.S#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:222
+msgid ""
+"Note that the [.filename]#boot0.S# source file is assembled \"as is\": "
+"instructions are translated one by one to binary, with no additional "
+"information (no ELF file format, for example). This kind of low-level "
+"control is achieved at link time through special control flags passed to the "
+"linker. For example, the text section of the program is set to be located "
+"at address `0x600`. In practice this means that [.filename]#boot0# must be "
+"loaded to memory address `0x600` in order to function properly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:229
+msgid ""
+"It is worth looking at the [.filename]#Makefile# for [.filename]#boot0# ([."
+"filename]#stand/i386/boot0/Makefile#), as it defines some of the run-time "
+"behavior of [.filename]#boot0#. For instance, if a terminal connected to "
+"the serial port (COM1) is used for I/O, the macro `SIO` must be defined (`-"
+"DSIO`). `-DPXE` enables boot through PXE by pressing kbd:[F6]. "
+"Additionally, the program defines a set of _flags_ that allow further "
+"modification of its behavior. All of this is illustrated in the [."
+"filename]#Makefile#. For example, look at the linker directives which "
+"command the linker to start the text section at address `0x600`, and to "
+"build the output file \"as is\" (strip out any file formatting):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:234
+#, no-wrap
+msgid ""
+" BOOT_BOOT0_ORG?=0x600\n"
+" ORG=${BOOT_BOOT0_ORG}\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:236
+#, no-wrap
+msgid "[.filename]#stand/i386/boot0/Makefile# [[boot-boot0-makefile-as-is]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:238
+msgid ""
+"Let us now start our study of the MBR, or [.filename]#boot0#, starting where "
+"execution begins."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:244
+msgid ""
+"Some modifications have been made to some instructions in favor of better "
+"exposition. For example, some macros are expanded, and some macro tests are "
+"omitted when the result of the test is known. This applies to all of the "
+"code examples shown."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:255
+#, no-wrap
+msgid ""
+"start:\n"
+" cld\t\t\t# String ops inc\n"
+" xorw %ax,%ax\t\t# Zero\n"
+" movw %ax,%es\t\t# Address\n"
+" movw %ax,%ds\t\t# data\n"
+" movw %ax,%ss\t\t# Set up\n"
+" movw $LOAD,%sp\t\t# stack\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:257
+#, no-wrap
+msgid "[.filename]#stand/i386/boot0/boot0.S# [[boot-boot0-entrypoint]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:263
+msgid ""
+"This first block of code is the entry point of the program. It is where the "
+"BIOS transfers control. First, it makes sure that the string operations "
+"autoincrement its pointer operands (the `cld` instruction) footnote:[When in "
+"doubt, we refer the reader to the official Intel manuals, which describe the "
+"exact semantics for each instruction: .]. Then, as it makes no assumption "
+"about the state of the segment registers, it initializes them. Finally, it "
+"sets the stack pointer register (`%sp`) to ($LOAD = address `0x7c00`), so we "
+"have a working stack."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:265
+msgid ""
+"The next block is responsible for the relocation and subsequent jump to the "
+"relocated code."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:279
+#, no-wrap
+msgid ""
+" movw %sp,%si\t# Source\n"
+" movw $start,%di\t\t# Destination\n"
+" movw $0x100,%cx\t\t# Word count\n"
+" rep\t\t\t# Relocate\n"
+" movsw\t\t\t# code\n"
+" movw %di,%bp\t\t# Address variables\n"
+" movb $0x8,%cl\t\t# Words to clear\n"
+" rep\t\t\t# Zero\n"
+" stosw\t\t\t# them\n"
+" incb -0xe(%di)\t\t# Set the S field to 1\n"
+" jmp main-LOAD+ORIGIN\t# Jump to relocated code\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:281
+#, no-wrap
+msgid "[.filename]#stand/i386/boot0/boot0.S# [[boot-boot0-relocation]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:291
+msgid ""
+"As [.filename]#boot0# is loaded by the BIOS to address `0x7C00`, it copies "
+"itself to address `0x600` and then transfers control there (recall that it "
+"was linked to execute at address `0x600`). The source address, `0x7c00`, is "
+"copied to register `%si`. The destination address, `0x600`, to register `"
+"%di`. The number of words to copy, `256` (the program's size = 512 bytes), "
+"is copied to register `%cx`. Next, the `rep` instruction repeats the "
+"instruction that follows, that is, `movsw`, the number of times dictated by "
+"the `%cx` register.The `movsw` instruction copies the word pointed to by `"
+"%si` to the address pointed to by `%di`. This is repeated another 255 "
+"times. On each repetition, both the source and destination registers, `%si` "
+"and `%di`, are incremented by one. Thus, upon completion of the 256-word "
+"(512-byte) copy, `%di` has the value `0x600`+`512`= `0x800`, and `%si` has "
+"the value `0x7c00`+`512`= `0x7e00`; we have thus completed the code "
+"_relocation_. Since the last update of this document, the copy instructions "
+"have changed in the code, so instead of the movsb and stosb, movsw and stosw "
+"have been introduced, which copy 2 bytes(1 word) in one iteration."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:301
+msgid ""
+"Next, the destination register `%di` is copied to `%bp`. `%bp` gets the "
+"value `0x800`. The value `8` is copied to `%cl` in preparation for a new "
+"string operation (like our previous `movsw`). Now, `stosw` is executed 8 "
+"times. This instruction copies a `0` value to the address pointed to by the "
+"destination register (`%di`, which is `0x800`), and increments it. This is "
+"repeated another 7 times, so `%di` ends up with value `0x810`. Effectively, "
+"this clears the address range `0x800`-`0x80f`. This range is used as a "
+"(fake) partition table for writing the MBR back to disk.Finally, the sector "
+"field for the CHS addressing of this fake partition is given the value 1 and "
+"a jump is made to the main function from the relocated code. Note that "
+"until this jump to the relocated code, any reference to an absolute address "
+"was avoided."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:303
+msgid ""
+"The following code block tests whether the drive number provided by the BIOS "
+"should be used, or the one stored in [.filename]#boot0#."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:315
+#, no-wrap
+msgid ""
+"main:\n"
+" testb $SETDRV,_FLAGS(%bp)\t# Set drive number?\n"
+"#ifndef CHECK_DRIVE\t/* disable drive checks */\n"
+" jz save_curdrive\t\t# no, use the default\n"
+"#else\n"
+" jnz disable_update\t# Yes\n"
+" testb %dl,%dl\t\t# Drive number valid?\n"
+" js save_curdrive\t\t# Possibly (0x80 set)\n"
+"#endif\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:317
+#, no-wrap
+msgid "[.filename]#stand/i386/boot0/boot0.S# [[boot-boot0-drivenumber]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:324
+msgid ""
+"This code tests the `SETDRV` bit (`0x20`) in the _flags_ variable. Recall "
+"that register `%bp` points to address location `0x800`, so the test is done "
+"to the _flags_ variable at address `0x800`-`69`= `0x7bb`. This is an "
+"example of the type of modifications that can be done to [."
+"filename]#boot0#. The `SETDRV` flag is not set by default, but it can be "
+"set in the [.filename]#Makefile#. When set, the drive number stored in the "
+"MBR is used instead of the one provided by the BIOS. We assume the "
+"defaults, and that the BIOS provided a valid drive number, so we jump to "
+"`save_curdrive`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:326
+msgid ""
+"The next block saves the drive number provided by the BIOS, and calls `putn` "
+"to print a new line on the screen."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:338
+#, no-wrap
+msgid ""
+"save_curdrive:\n"
+" movb %dl, (%bp)\t\t# Save drive number\n"
+" pushw %dx\t\t\t# Also in the stack\n"
+"#ifdef\tTEST\t/* test code, print internal bios drive */\n"
+" rolb $1, %dl\n"
+" movw $drive, %si\n"
+" call putkey\n"
+"#endif\n"
+" callw putn\t\t# Print a newline\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:340
+#, no-wrap
+msgid "[.filename]#stand/i386/boot0/boot0.S# [[boot-boot0-savedrivenumber]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:342
+msgid ""
+"Note that we assume `TEST` is not defined, so the conditional code in it is "
+"not assembled and will not appear in our executable [.filename]#boot0#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:348
+msgid ""
+"Our next block implements the actual scanning of the partition table. It "
+"prints to the screen the partition type for each of the four entries in the "
+"partition table. It compares each type with a list of well-known operating "
+"system file systems. Examples of recognized partition types are NTFS "
+"(Windows(R), ID 0x7), `ext2fs` (Linux(R), ID 0x83), and, of course, `ffs`/"
+"`ufs2` (FreeBSD, ID 0xa5). The implementation is fairly simple."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:353
+#, no-wrap
+msgid ""
+" movw $(partbl+0x4),%bx\t# Partition table (+4)\n"
+" xorw %dx,%dx\t\t# Item number\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:369
+#, no-wrap
+msgid ""
+"read_entry:\n"
+" movb %ch,-0x4(%bx)\t# Zero active flag (ch == 0)\n"
+" btw %dx,_FLAGS(%bp)\t# Entry enabled?\n"
+" jnc next_entry\t\t# No\n"
+" movb (%bx),%al\t\t# Load type\n"
+" test %al, %al\t\t# skip empty partition\n"
+" jz next_entry\n"
+" movw $bootable_ids,%di\t# Lookup tables\n"
+" movb $(TLEN+1),%cl\t# Number of entries\n"
+" repne\t\t\t# Locate\n"
+" scasb\t\t\t# type\n"
+" addw $(TLEN-1), %di\t# Adjust\n"
+" movb (%di),%cl\t\t# Partition\n"
+" addw %cx,%di\t\t# description\n"
+" callw putx\t\t# Display it\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:374
+#, no-wrap
+msgid ""
+"next_entry:\n"
+" incw %dx\t\t\t# Next item\n"
+" addb $0x10,%bl\t\t# Next entry\n"
+" jnc read_entry\t\t# Till done\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:376
+#, no-wrap
+msgid "[.filename]#stand/i386/boot0/boot0.S# [[boot-boot0-partition-scan]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:380
+msgid ""
+"It is important to note that the active flag for each entry is cleared, so "
+"after the scanning, _no_ partition entry is active in our memory copy of [."
+"filename]#boot0#. Later, the active flag will be set for the selected "
+"partition. This ensures that only one active partition exists if the user "
+"chooses to write the changes back to disk."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:385
+msgid ""
+"The next block tests for other drives. At startup, the BIOS writes the "
+"number of drives present in the computer to address `0x475`. If there are "
+"any other drives present, [.filename]#boot0# prints the current drive to "
+"screen. The user may command [.filename]#boot0# to scan partitions on "
+"another drive later."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:394
+#, no-wrap
+msgid ""
+" popw %ax\t\t\t# Drive number\n"
+" subb $0x80-0x1,%al\t\t# Does next\n"
+" cmpb NHRDRV,%al\t\t# drive exist? (from BIOS?)\n"
+" jb print_drive\t\t# Yes\n"
+" decw %ax\t\t\t# Already drive 0?\n"
+" jz print_prompt\t\t# Yes\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:396
+#, no-wrap
+msgid "[.filename]#stand/i386/boot0/boot0.S# [[boot-boot0-test-drives]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:399
+msgid ""
+"We make the assumption that a single drive is present, so the jump to "
+"`print_drive` is not performed. We also assume nothing strange happened, so "
+"we jump to `print_prompt`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:401
+msgid ""
+"This next block just prints out a prompt followed by the default option:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:411
+#, no-wrap
+msgid ""
+"print_prompt:\n"
+" movw $prompt,%si\t\t# Display\n"
+" callw putstr\t\t# prompt\n"
+" movb _OPT(%bp),%dl\t# Display\n"
+" decw %si\t\t\t# default\n"
+" callw putkey\t\t# key\n"
+" jmp start_input\t\t# Skip beep\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:413
+#, no-wrap
+msgid "[.filename]#stand/i386/boot0/boot0.S# [[boot-boot0-prompt]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:415
+msgid ""
+"Finally, a jump is performed to `start_input`, where the BIOS services are "
+"used to start a timer and for reading user input from the keyboard; if the "
+"timer expires, the default option will be selected:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:431
+#, no-wrap
+msgid ""
+"start_input:\n"
+" xorb %ah,%ah\t\t# BIOS: Get\n"
+" int $0x1a\t\t\t# system time\n"
+" movw %dx,%di\t\t# Ticks when\n"
+" addw _TICKS(%bp),%di\t# timeout\n"
+"read_key:\n"
+" movb $0x1,%ah\t\t# BIOS: Check\n"
+" int $0x16\t\t\t# for keypress\n"
+" jnz got_key\t\t# Have input\n"
+" xorb %ah,%ah\t\t# BIOS: int 0x1a, 00\n"
+" int $0x1a\t\t\t# get system time\n"
+" cmpw %di,%dx\t\t# Timeout?\n"
+" jb read_key\t\t# No\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:433
+#, no-wrap
+msgid "[.filename]#stand/i386/boot0/boot0.S# [[boot-boot0-start-input]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:446
+msgid ""
+"An interrupt is requested with number `0x1a` and argument `0` in register `"
+"%ah`. The BIOS has a predefined set of services, requested by applications "
+"as software-generated interrupts through the `int` instruction and receiving "
+"arguments in registers (in this case, `%ah`). Here, particularly, we are "
+"requesting the number of clock ticks since last midnight; this value is "
+"computed by the BIOS through the RTC (Real Time Clock). This clock can be "
+"programmed to work at frequencies ranging from 2 Hz to 8192 Hz. The BIOS "
+"sets it to 18.2 Hz at startup. When the request is satisfied, a 32-bit "
+"result is returned by the BIOS in registers `%cx` and `%dx` (lower bytes in `"
+"%dx`). This result (the `%dx` part) is copied to register `%di`, and the "
+"value of the `TICKS` variable is added to `%di`. This variable resides in [."
+"filename]#boot0# at offset `_TICKS` (a negative value) from register `%bp` "
+"(which, recall, points to `0x800`). The default value of this variable is "
+"`0xb6` (182 in decimal). Now, the idea is that [.filename]#boot0# "
+"constantly requests the time from the BIOS, and when the value returned in "
+"register `%dx` is greater than the value stored in `%di`, the time is up and "
+"the default selection will be made. Since the RTC ticks 18.2 times per "
+"second, this condition will be met after 10 seconds (this default behavior "
+"can be changed in the [.filename]#Makefile#). Until this time has passed, [."
+"filename]#boot0# continually asks the BIOS for any user input; this is done "
+"through `int 0x16`, argument `1` in `%ah`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:454
+msgid ""
+"Whether a key was pressed or the time expired, subsequent code validates the "
+"selection. Based on the selection, the register `%si` is set to point to "
+"the appropriate partition entry in the partition table. This new selection "
+"overrides the previous default one. Indeed, it becomes the new default. "
+"Finally, the ACTIVE flag of the selected partition is set. If it was "
+"enabled at compile time, the in-memory version of [.filename]#boot0# with "
+"these modified values is written back to the MBR on disk. We leave the "
+"details of this implementation to the reader."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:456
+msgid ""
+"We now end our study with the last code block from the [.filename]#boot0# "
+"program:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:469
+#, no-wrap
+msgid ""
+" movw $LOAD,%bx\t\t# Address for read\n"
+" movb $0x2,%ah\t\t# Read sector\n"
+" callw intx13\t\t# from disk\n"
+" jc beep\t\t\t# If error\n"
+" cmpw $MAGIC,0x1fe(%bx)\t# Bootable?\n"
+" jne beep\t\t\t# No\n"
+" pushw %si\t\t\t# Save ptr to selected part.\n"
+" callw putn\t\t# Leave some space\n"
+" popw %si\t\t\t# Restore, next stage uses it\n"
+" jmp *%bx\t\t\t# Invoke bootstrap\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:471
+#, no-wrap
+msgid "[.filename]#stand/i386/boot0/boot0.S# [[boot-boot0-check-bootable]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:475
+msgid ""
+"Recall that `%si` points to the selected partition entry. This entry tells "
+"us where the partition begins on disk. We assume, of course, that the "
+"partition selected is actually a FreeBSD slice."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:479
+msgid ""
+"From now on, we will favor the use of the technically more accurate term "
+"\"slice\" rather than \"partition\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:485
+msgid ""
+"The transfer buffer is set to `0x7c00` (register `%bx`), and a read for the "
+"first sector of the FreeBSD slice is requested by calling `intx13`. We "
+"assume that everything went okay, so a jump to `beep` is not performed. In "
+"particular, the new sector read must end with the magic sequence `0xaa55`. "
+"Finally, the value at `%si` (the pointer to the selected partition table) is "
+"preserved for use by the next stage, and a jump is performed to address "
+"`0x7c00`, where execution of our next stage (the just-read block) is started."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:487
+#, no-wrap
+msgid "`boot1` Stage"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:490
+msgid "So far we have gone through the following sequence:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:494
+msgid ""
+"The BIOS did some early hardware initialization, including the POST. The "
+"MBR ([.filename]#boot0#) was loaded from absolute disk sector one to address "
+"`0x7c00`. Execution control was passed to that location."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:497
+msgid ""
+"[.filename]#boot0# relocated itself to the location it was linked to execute "
+"(`0x600`), followed by a jump to continue execution at the appropriate "
+"place. Finally, [.filename]#boot0# loaded the first disk sector from the "
+"FreeBSD slice to address `0x7c00`. Execution control was passed to that "
+"location."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:510
+msgid ""
+"[.filename]#boot1# is the next step in the boot-loading sequence. It is the "
+"first of three boot stages. Note that we have been dealing exclusively with "
+"disk sectors. Indeed, the BIOS loads the absolute first sector, while [."
+"filename]#boot0# loads the first sector of the FreeBSD slice. Both loads "
+"are to address `0x7c00`. We can conceptually think of these disk sectors as "
+"containing the files [.filename]#boot0# and [.filename]#boot1#, "
+"respectively, but in reality this is not entirely true for [."
+"filename]#boot1#. Strictly speaking, unlike [.filename]#boot0#, [."
+"filename]#boot1# is not part of the boot blocks footnote:[There is a file /"
+"boot/boot1, but it is not the written to the beginning of the FreeBSD "
+"slice. Instead, it is concatenated with boot2 to form boot, which is "
+"written to the beginning of the FreeBSD slice and read at boot time.]. "
+"Instead, a single, full-blown file, [.filename]#boot# ([.filename]#/boot/"
+"boot#), is what ultimately is written to disk. This file is a combination "
+"of [.filename]#boot1#, [.filename]#boot2# and the `Boot Extender` (or BTX). "
+"This single file is greater in size than a single sector (greater than 512 "
+"bytes). Fortunately, [.filename]#boot1# occupies _exactly_ the first 512 "
+"bytes of this single file, so when [.filename]#boot0# loads the first sector "
+"of the FreeBSD slice (512 bytes), it is actually loading [.filename]#boot1# "
+"and transferring control to it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:515
+msgid ""
+"The main task of [.filename]#boot1# is to load the next boot stage. This "
+"next stage is somewhat more complex. It is composed of a server called the "
+"\"Boot Extender\", or BTX, and a client, called [.filename]#boot2#. As we "
+"will see, the last boot stage, [.filename]#loader#, is also a client of the "
+"BTX server."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:517
+msgid ""
+"Let us now look in detail at what exactly is done by [.filename]#boot1#, "
+"starting like we did for [.filename]#boot0#, at its entry point:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:522
+#, no-wrap
+msgid ""
+"start:\n"
+"\tjmp main\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:524
+#, no-wrap
+msgid "[.filename]#stand/i386/boot2/boot1.S# [[boot-boot1-entry]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:526
+msgid ""
+"The entry point at `start` simply jumps past a special data area to the "
+"label `main`, which in turn looks like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:541
+#, no-wrap
+msgid ""
+"main:\n"
+" cld\t\t\t# String ops inc\n"
+" xor %cx,%cx\t\t# Zero\n"
+" mov %cx,%es\t\t# Address\n"
+" mov %cx,%ds\t\t# data\n"
+" mov %cx,%ss\t\t# Set up\n"
+" mov $start,%sp\t\t# stack\n"
+" mov %sp,%si\t\t# Source\n"
+" mov $MEM_REL,%di\t\t# Destination\n"
+" incb %ch\t\t\t# Word count\n"
+" rep\t\t\t# Copy\n"
+" movsw\t\t\t# code\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:543
+#, no-wrap
+msgid "[.filename]#stand/i386/boot2/boot1.S# [[boot-boot1-main]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:548
+msgid ""
+"Just like [.filename]#boot0#, this code relocates [.filename]#boot1#, this "
+"time to memory address `0x700`. However, unlike [.filename]#boot0#, it does "
+"not jump there. [.filename]#boot1# is linked to execute at address "
+"`0x7c00`, effectively where it was loaded in the first place. The reason "
+"for this relocation will be discussed shortly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:553
+msgid ""
+"Next comes a loop that looks for the FreeBSD slice. Although [."
+"filename]#boot0# loaded [.filename]#boot1# from the FreeBSD slice, no "
+"information was passed to it about this footnote:[Actually we did pass a "
+"pointer to the slice entry in register %si. However, boot1 does not assume "
+"that it was loaded by boot0 (perhaps some other MBR loaded it, and did not "
+"pass this information), so it assumes nothing.], so [.filename]#boot1# must "
+"rescan the partition table to find where the FreeBSD slice starts. "
+"Therefore it rereads the MBR:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:561
+#, no-wrap
+msgid ""
+" mov $part4,%si\t\t# Partition\n"
+" cmpb $0x80,%dl\t\t# Hard drive?\n"
+" jb main.4\t\t\t# No\n"
+" movb $0x1,%dh\t\t# Block count\n"
+" callw nread\t\t# Read MBR\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:563
+#, no-wrap
+msgid "[.filename]#stand/i386/boot2/boot1.S# [[boot-boot1-find-freebsd]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:571
+msgid ""
+"In the code above, register `%dl` maintains information about the boot "
+"device. This is passed on by the BIOS and preserved by the MBR. Numbers "
+"`0x80` and greater tells us that we are dealing with a hard drive, so a call "
+"is made to `nread`, where the MBR is read. Arguments to `nread` are passed "
+"through `%si` and `%dh`. The memory address at label `part4` is copied to `"
+"%si`. This memory address holds a \"fake partition\" to be used by "
+"`nread`. The following is the data in the fake partition:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:579
+#, no-wrap
+msgid ""
+" part4:\n"
+"\t.byte 0x80, 0x00, 0x01, 0x00\n"
+"\t.byte 0xa5, 0xfe, 0xff, 0xff\n"
+"\t.byte 0x00, 0x00, 0x00, 0x00\n"
+"\t.byte 0x50, 0xc3, 0x00, 0x00\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:581
+#, no-wrap
+msgid "[.filename]#stand/i386/boot2/boot1.S# [[boot-boot2-make-fake-partition]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:586
+msgid ""
+"In particular, the LBA for this fake partition is hardcoded to zero. This "
+"is used as an argument to the BIOS for reading absolute sector one from the "
+"hard drive. Alternatively, CHS addressing could be used. In this case, the "
+"fake partition holds cylinder 0, head 0 and sector 1, which is equivalent to "
+"absolute sector one."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:588
+msgid "Let us now proceed to take a look at `nread`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:598
+#, no-wrap
+msgid ""
+"nread:\n"
+" mov $MEM_BUF,%bx\t\t# Transfer buffer\n"
+" mov 0x8(%si),%ax\t\t# Get\n"
+" mov 0xa(%si),%cx\t\t# LBA\n"
+" push %cs\t\t\t# Read from\n"
+" callw xread.1\t\t# disk\n"
+" jnc return\t\t# If success, return\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:600
+#, no-wrap
+msgid "[.filename]#stand/i386/boot2/boot1.S# [[boot-boot1-nread]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:609
+msgid ""
+"Recall that `%si` points to the fake partition. The word footnote:[In the "
+"context of 16-bit real mode, a word is 2 bytes.] at offset `0x8` is copied "
+"to register `%ax` and word at offset `0xa` to `%cx`. They are interpreted "
+"by the BIOS as the lower 4-byte value denoting the LBA to be read (the upper "
+"four bytes are assumed to be zero). Register `%bx` holds the memory address "
+"where the MBR will be loaded. The instruction pushing `%cs` onto the stack "
+"is very interesting. In this context, it accomplishes nothing. However, as "
+"we will see shortly, [.filename]#boot2#, in conjunction with the BTX server, "
+"also uses `xread.1`. This mechanism will be discussed in the next section."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:611
+msgid ""
+"The code at `xread.1` further calls the `read` function, which actually "
+"calls the BIOS asking for the disk sector:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:628
+#, no-wrap
+msgid ""
+"xread.1:\n"
+"\tpushl $0x0\t\t# absolute\n"
+"\tpush %cx\t\t# block\n"
+"\tpush %ax\t\t# number\n"
+"\tpush %es\t\t# Address of\n"
+"\tpush %bx\t\t# transfer buffer\n"
+"\txor %ax,%ax\t\t# Number of\n"
+"\tmovb %dh,%al\t\t# blocks to\n"
+"\tpush %ax\t\t# transfer\n"
+"\tpush $0x10\t\t# Size of packet\n"
+"\tmov %sp,%bp\t\t# Packet pointer\n"
+"\tcallw read\t\t# Read from disk\n"
+"\tlea 0x10(%bp),%sp\t# Clear stack\n"
+"\tlret\t\t\t# To far caller\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:630
+#, no-wrap
+msgid "[.filename]#stand/i386/boot2/boot1.S# [[boot-boot1-xread1]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:634
+msgid ""
+"Note the long return instruction at the end of this block. This instruction "
+"pops out the `%cs` register pushed by `nread`, and returns. Finally, "
+"`nread` also returns."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:636
+msgid ""
+"With the MBR loaded to memory, the actual loop for searching the FreeBSD "
+"slice begins:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:656
+#, no-wrap
+msgid ""
+"\tmov $0x1,%cx\t\t # Two passes\n"
+"main.1:\n"
+"\tmov $MEM_BUF+PRT_OFF,%si # Partition table\n"
+"\tmovb $0x1,%dh\t\t # Partition\n"
+"main.2:\n"
+"\tcmpb $PRT_BSD,0x4(%si)\t # Our partition type?\n"
+"\tjne main.3\t\t # No\n"
+"\tjcxz main.5\t\t # If second pass\n"
+"\ttestb $0x80,(%si)\t # Active?\n"
+"\tjnz main.5\t\t # Yes\n"
+"main.3:\n"
+"\tadd $0x10,%si\t\t # Next entry\n"
+"\tincb %dh\t\t # Partition\n"
+"\tcmpb $0x1+PRT_NUM,%dh\t\t # In table?\n"
+"\tjb main.2\t\t # Yes\n"
+"\tdec %cx\t\t\t # Do two\n"
+"\tjcxz main.1\t\t # passes\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:658
+#, no-wrap
+msgid "[.filename]#stand/i386/boot2/boot1.S# [[boot-boot1-find-part]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:662
+msgid ""
+"If a FreeBSD slice is identified, execution continues at `main.5`. Note "
+"that when a FreeBSD slice is found `%si` points to the appropriate entry in "
+"the partition table, and `%dh` holds the partition number. We assume that a "
+"FreeBSD slice is found, so we continue execution at `main.5`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:677
+#, no-wrap
+msgid ""
+"main.5:\n"
+"\tmov %dx,MEM_ARG\t\t\t # Save args\n"
+"\tmovb $NSECT,%dh\t\t\t # Sector count\n"
+"\tcallw nread\t\t\t # Read disk\n"
+"\tmov $MEM_BTX,%bx\t\t\t # BTX\n"
+"\tmov 0xa(%bx),%si\t\t # Get BTX length and set\n"
+"\tadd %bx,%si\t\t\t # %si to start of boot2.bin\n"
+"\tmov $MEM_USR+SIZ_PAG*2,%di\t\t\t # Client page 2\n"
+"\tmov $MEM_BTX+(NSECT-1)*SIZ_SEC,%cx\t\t\t # Byte\n"
+"\tsub %si,%cx\t\t\t # count\n"
+"\trep\t\t\t\t # Relocate\n"
+"\tmovsb\t\t\t\t # client\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:679
+#, no-wrap
+msgid "[.filename]#stand/i386/boot2/boot1.S# [[boot-boot1-main5]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:685
+msgid ""
+"Recall that at this point, register `%si` points to the FreeBSD slice entry "
+"in the MBR partition table, so a call to `nread` will effectively read "
+"sectors at the beginning of this partition. The argument passed on register "
+"`%dh` tells `nread` to read 16 disk sectors. Recall that the first 512 "
+"bytes, or the first sector of the FreeBSD slice, coincides with the [."
+"filename]#boot1# program. Also recall that the file written to the "
+"beginning of the FreeBSD slice is not [.filename]#/boot/boot1#, but [."
+"filename]#/boot/boot#. Let us look at the size of these files in the "
+"filesystem:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:692
+#, no-wrap
+msgid ""
+"-r--r--r-- 1 root wheel 512B Jan 8 00:15 /boot/boot0\n"
+"-r--r--r-- 1 root wheel 512B Jan 8 00:15 /boot/boot1\n"
+"-r--r--r-- 1 root wheel 7.5K Jan 8 00:15 /boot/boot2\n"
+"-r--r--r-- 1 root wheel 8.0K Jan 8 00:15 /boot/boot\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:700
+msgid ""
+"Both [.filename]#boot0# and [.filename]#boot1# are 512 bytes each, so they "
+"fit _exactly_ in one disk sector. [.filename]#boot2# is much bigger, "
+"holding both the BTX server and the [.filename]#boot2# client. Finally, a "
+"file called simply [.filename]#boot# is 512 bytes larger than [."
+"filename]#boot2#. This file is a concatenation of [.filename]#boot1# and [."
+"filename]#boot2#. As already noted, [.filename]#boot0# is the file written "
+"to the absolute first disk sector (the MBR), and [.filename]#boot# is the "
+"file written to the first sector of the FreeBSD slice; [.filename]#boot1# "
+"and [.filename]#boot2# are _not_ written to disk. The command used to "
+"concatenate [.filename]#boot1# and [.filename]#boot2# into a single [."
+"filename]#boot# is merely `cat boot1 boot2 > boot`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:704
+msgid ""
+"So [.filename]#boot1# occupies exactly the first 512 bytes of [."
+"filename]#boot# and, because [.filename]#boot# is written to the first "
+"sector of the FreeBSD slice, [.filename]#boot1# fits exactly in this first "
+"sector. When `nread` reads the first 16 sectors of the FreeBSD slice, it "
+"effectively reads the entire [.filename]#boot# file footnote:[512*16=8192 "
+"bytes, exactly the size of boot]. We will see more details about how [."
+"filename]#boot# is formed from [.filename]#boot1# and [.filename]#boot2# in "
+"the next section."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:710
+msgid ""
+"Recall that `nread` uses memory address `0x8c00` as the transfer buffer to "
+"hold the sectors read. This address is conveniently chosen. Indeed, "
+"because [.filename]#boot1# belongs to the first 512 bytes, it ends up in the "
+"address range `0x8c00`-`0x8dff`. The 512 bytes that follows (range `0x8e00`-"
+"`0x8fff`) is used to store the _bsdlabel_ footnote:[Historically known as "
+"disklabel. If you ever wondered where FreeBSD stored this information, it "
+"is in this region - see man:bsdlabel[8]]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:718
+msgid ""
+"Starting at address `0x9000` is the beginning of the BTX server, and "
+"immediately following is the [.filename]#boot2# client. The BTX server acts "
+"as a kernel, and executes in protected mode in the most privileged level. "
+"In contrast, the BTX clients ([.filename]#boot2#, for example), execute in "
+"user mode. We will see how this is accomplished in the next section. The "
+"code after the call to `nread` locates the beginning of [.filename]#boot2# "
+"in the memory buffer, and copies it to memory address `0xc000`. This is "
+"because the BTX server arranges [.filename]#boot2# to execute in a segment "
+"starting at `0xa000`. We explore this in detail in the following section."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:721
+msgid ""
+"The last code block of [.filename]#boot1# enables access to memory above 1MB "
+"footnote:[This is necessary for legacy reasons. Interested readers should "
+"see .] and concludes with a jump to the starting point of the BTX server:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:729
+#, no-wrap
+msgid ""
+"seta20:\n"
+"\tcli\t\t\t# Disable interrupts\n"
+"seta20.1:\n"
+"\tdec %cx\t\t\t# Timeout?\n"
+"\tjz seta20.3\t\t# Yes\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:744
+#, no-wrap
+msgid ""
+"\tinb $0x64,%al\t\t# Get status\n"
+"\ttestb $0x2,%al\t\t# Busy?\n"
+"\tjnz seta20.1\t\t# Yes\n"
+"\tmovb $0xd1,%al\t\t# Command: Write\n"
+"\toutb %al,$0x64\t\t# output port\n"
+"seta20.2:\n"
+"\tinb $0x64,%al\t\t# Get status\n"
+"\ttestb $0x2,%al\t\t# Busy?\n"
+"\tjnz seta20.2\t\t# Yes\n"
+"\tmovb $0xdf,%al\t\t# Enable\n"
+"\toutb %al,$0x60\t\t# A20\n"
+"seta20.3:\n"
+"\tsti\t\t\t# Enable interrupts\n"
+"\tjmp 0x9010\t\t# Start BTX\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:746
+#, no-wrap
+msgid "[.filename]#stand/i386/boot2/boot1.S# [[boot-boot1-seta20]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:748
+msgid "Note that right before the jump, interrupts are enabled."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:750
+#, no-wrap
+msgid "The BTX Server"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:754
+msgid ""
+"Next in our boot sequence is the BTX Server. Let us quickly remember how we "
+"got here:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:756
+msgid ""
+"The BIOS loads the absolute sector one (the MBR, or [.filename]#boot0#), to "
+"address `0x7c00` and jumps there."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:758
+msgid ""
+"[.filename]#boot0# relocates itself to `0x600`, the address it was linked to "
+"execute, and jumps over there. It then reads the first sector of the "
+"FreeBSD slice (which consists of [.filename]#boot1#) into address `0x7c00` "
+"and jumps over there."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:763
+msgid ""
+"[.filename]#boot1# loads the first 16 sectors of the FreeBSD slice into "
+"address `0x8c00`. This 16 sectors, or 8192 bytes, is the whole file [."
+"filename]#boot#. The file is a concatenation of [.filename]#boot1# and [."
+"filename]#boot2#. [.filename]#boot2#, in turn, contains the BTX server and "
+"the [.filename]#boot2# client. Finally, a jump is made to address `0x9010`, "
+"the entry point of the BTX server."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:767
+msgid ""
+"Before studying the BTX Server in detail, let us further review how the "
+"single, all-in-one [.filename]#boot# file is created. The way [."
+"filename]#boot# is built is defined in its [.filename]#Makefile# ([."
+"filename]#stand/i386/boot2/Makefile#). Let us look at the rule that creates "
+"the [.filename]#boot# file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:772
+#, no-wrap
+msgid ""
+" boot: boot1 boot2\n"
+"\tcat boot1 boot2 > boot\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:774
+#, no-wrap
+msgid "[.filename]#stand/i386/boot2/Makefile# [[boot-boot1-make-boot]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:777
+msgid ""
+"This tells us that [.filename]#boot1# and [.filename]#boot2# are needed, and "
+"the rule simply concatenates them to produce a single file called [."
+"filename]#boot#. The rules for creating [.filename]#boot1# are also quite "
+"simple:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:782
+#, no-wrap
+msgid ""
+" boot1: boot1.out\n"
+"\t${OBJCOPY} -S -O binary boot1.out ${.TARGET}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:785
+#, no-wrap
+msgid ""
+" boot1.out: boot1.o\n"
+"\t${LD} ${LD_FLAGS} -e start --defsym ORG=${ORG1} -T ${LDSCRIPT} -o ${.TARGET} boot1.o\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:787
+#, no-wrap
+msgid "[.filename]#stand/i386/boot2/Makefile# [[boot-boot1-make-boot1]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:796
+msgid ""
+"To apply the rule for creating [.filename]#boot1#, [.filename]#boot1.out# "
+"must be resolved. This, in turn, depends on the existence of [."
+"filename]#boot1.o#. This last file is simply the result of assembling our "
+"familiar [.filename]#boot1.S#, without linking. Now, the rule for creating "
+"[.filename]#boot1.out# is applied. This tells us that [.filename]#boot1.o# "
+"should be linked with `start` as its entry point, and starting at address "
+"`0x7c00`. Finally, [.filename]#boot1# is created from [.filename]#boot1."
+"out# applying the appropriate rule. This rule is the [.filename]#objcopy# "
+"command applied to [.filename]#boot1.out#. Note the flags passed to [."
+"filename]#objcopy#: `-S` tells it to strip all relocation and symbolic "
+"information; `-O binary` indicates the output format, that is, a simple, "
+"unformatted binary file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:798
+msgid ""
+"Having [.filename]#boot1#, let us take a look at how [.filename]#boot2# is "
+"constructed:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:805
+#, no-wrap
+msgid ""
+" boot2: boot2.ld\n"
+"\t@set -- `ls -l ${.ALLSRC}`; x=$$((${BOOT2SIZE}-$$5)); \\\n"
+"\t echo \"$$x bytes available\"; test $$x -ge 0\n"
+"\t${DD} if=${.ALLSRC} of=${.TARGET} bs=${BOOT2SIZE} conv=sync\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:809
+#, no-wrap
+msgid ""
+" boot2.ld: boot2.ldr boot2.bin ${BTXKERN}\n"
+"\tbtxld -v -E ${ORG2} -f bin -b ${BTXKERN} -l boot2.ldr \\\n"
+"\t -o ${.TARGET} -P 1 boot2.bin\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:812
+#, no-wrap
+msgid ""
+" boot2.ldr:\n"
+"\t${DD} if=/dev/zero of=${.TARGET} bs=512 count=1\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:815
+#, no-wrap
+msgid ""
+" boot2.bin: boot2.out\n"
+"\t${OBJCOPY} -S -O binary boot2.out ${.TARGET}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:818
+#, no-wrap
+msgid ""
+" boot2.out: ${BTXCRT} boot2.o sio.o ashldi3.o\n"
+"\t${LD} ${LD_FLAGS} --defsym ORG=${ORG2} -T ${LDSCRIPT} -o ${.TARGET} ${.ALLSRC}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:825
+#, no-wrap
+msgid ""
+" boot2.h: boot1.out\n"
+"\t${NM} -t d ${.ALLSRC} | awk '/([0-9])+ T xread/ \\\n"
+"\t { x = $$1 - ORG1; \\\n"
+"\t printf(\"#define XREADORG %#x\\n\", REL1 + x) }' \\\n"
+"\t ORG1=`printf \"%d\" ${ORG1}` \\\n"
+"\t REL1=`printf \"%d\" ${REL1}` > ${.TARGET}\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:827
+#, no-wrap
+msgid "[.filename]#stand/i386/boot2/Makefile# [[boot-boot1-make-boot2]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:831
+msgid ""
+"The mechanism for building [.filename]#boot2# is far more elaborate. Let us "
+"point out the most relevant facts. The dependency list is as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:839
+#, no-wrap
+msgid ""
+" boot2: boot2.ld\n"
+" boot2.ld: boot2.ldr boot2.bin ${BTXDIR}\n"
+" boot2.bin: boot2.out\n"
+" boot2.out: ${BTXDIR} boot2.o sio.o ashldi3.o\n"
+" boot2.h: boot1.out\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:841
+#, no-wrap
+msgid "[.filename]#stand/i386/boot2/Makefile# [[boot-boot1-make-boot2-more]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:844
+msgid ""
+"Note that initially there is no header file [.filename]#boot2.h#, but its "
+"creation depends on [.filename]#boot1.out#, which we already have. The rule "
+"for its creation is a bit terse, but the important thing is that the output, "
+"[.filename]#boot2.h#, is something like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:848
+#, no-wrap
+msgid "#define XREADORG 0x725\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:850
+#, no-wrap
+msgid "[.filename]#stand/i386/boot2/boot2.h# [[boot-boot1-make-boot2h]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:856
+msgid ""
+"Recall that [.filename]#boot1# was relocated (i.e., copied from `0x7c00` to "
+"`0x700`). This relocation will now make sense, because as we will see, the "
+"BTX server reclaims some memory, including the space where [."
+"filename]#boot1# was originally loaded. However, the BTX server needs "
+"access to [.filename]#boot1#'s `xread` function; this function, according to "
+"the output of [.filename]#boot2.h#, is at location `0x725`. Indeed, the BTX "
+"server uses the `xread` function from [.filename]#boot1#'s relocated code. "
+"This function is now accessible from within the [.filename]#boot2# client."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:865
+msgid ""
+"The next rule directs the linker to link various files ([.filename]#ashldi3."
+"o#, [.filename]#boot2.o# and [.filename]#sio.o#). Note that the output "
+"file, [.filename]#boot2.out#, is linked to execute at address `0x2000` "
+"(${ORG2}). Recall that [.filename]#boot2# will be executed in user mode, "
+"within a special user segment set up by the BTX server. This segment starts "
+"at `0xa000`. Also, remember that the [.filename]#boot2# portion of [."
+"filename]#boot# was copied to address `0xc000`, that is, offset `0x2000` "
+"from the start of the user segment, so [.filename]#boot2# will work properly "
+"when we transfer control to it. Next, [.filename]#boot2.bin# is created "
+"from [.filename]#boot2.out# by stripping its symbols and format information; "
+"boot2.bin is a _raw_ binary. Now, note that a file [.filename]#boot2.ldr# "
+"is created as a 512-byte file full of zeros. This space is reserved for the "
+"bsdlabel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:870
+msgid ""
+"Now that we have files [.filename]#boot1#, [.filename]#boot2.bin# and [."
+"filename]#boot2.ldr#, only the BTX server is missing before creating the all-"
+"in-one [.filename]#boot# file. The BTX server is located in [."
+"filename]#stand/i386/btx/btx#; it has its own [.filename]#Makefile# with its "
+"own set of rules for building. The important thing to notice is that it is "
+"also compiled as a _raw_ binary, and that it is linked to execute at address "
+"`0x9000`. The details can be found in [.filename]#stand/i386/btx/btx/"
+"Makefile#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:877
+msgid ""
+"Having the files that comprise the [.filename]#boot# program, the final step "
+"is to _merge_ them. This is done by a special program called [."
+"filename]#btxld# (source located in [.filename]#/usr/src/usr.sbin/btxld#). "
+"Some arguments to this program include the name of the output file ([."
+"filename]#boot#), its entry point (`0x2000`) and its file format (raw "
+"binary). The various files are finally merged by this utility into the file "
+"[.filename]#boot#, which consists of [.filename]#boot1#, [.filename]#boot2#, "
+"the `bsdlabel` and the BTX server. This file, which takes exactly 16 "
+"sectors, or 8192 bytes, is what is actually written to the beginning of the "
+"FreeBSD slice during installation. Let us now proceed to study the BTX "
+"server program."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:880
+msgid ""
+"The BTX server prepares a simple environment and switches from 16-bit real "
+"mode to 32-bit protected mode, right before passing control to the client. "
+"This includes initializing and updating the following data structures:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:883
+msgid ""
+"Modifies the `Interrupt Vector Table (IVT)`. The IVT provides exception and "
+"interrupt handlers for Real-Mode code."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:886
+msgid ""
+"The `Interrupt Descriptor Table (IDT)` is created. Entries are provided for "
+"processor exceptions, hardware interrupts, two system calls and V86 "
+"interface. The IDT provides exception and interrupt handlers for Protected-"
+"Mode code."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:888
+msgid ""
+"A `Task-State Segment (TSS)` is created. This is necessary because the "
+"processor works in the _least_ privileged level when executing the client ([."
+"filename]#boot2#), but in the _most_ privileged level when executing the BTX "
+"server."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:891
+msgid ""
+"The GDT (Global Descriptor Table) is set up. Entries (descriptors) are "
+"provided for supervisor code and data, user code and data, and real-mode "
+"code and data. footnote:[Real-mode code and data are necessary when "
+"switching back to real mode from protected mode, as suggested by the Intel "
+"manuals.]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:896
+msgid ""
+"Let us now start studying the actual implementation. Recall that [."
+"filename]#boot1# made a jump to address `0x9010`, the BTX server's entry "
+"point. Before studying program execution there, note that the BTX server "
+"has a special header at address range `0x9000-0x900f`, right before its "
+"entry point. This header is defined as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:912
+#, no-wrap
+msgid ""
+"start:\t\t\t\t\t\t# Start of code\n"
+"/*\n"
+" * BTX header.\n"
+" */\n"
+"btx_hdr:\t.byte 0xeb\t\t\t# Machine ID\n"
+"\t\t.byte 0xe\t\t\t# Header size\n"
+"\t\t.ascii \"BTX\"\t\t\t# Magic\n"
+"\t\t.byte 0x1\t\t\t# Major version\n"
+"\t\t.byte 0x2\t\t\t# Minor version\n"
+"\t\t.byte BTX_FLAGS\t\t\t# Flags\n"
+"\t\t.word PAG_CNT-MEM_ORG>>0xc\t# Paging control\n"
+"\t\t.word break-start\t\t# Text size\n"
+"\t\t.long 0x0\t\t\t# Entry address\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:914
+#, no-wrap
+msgid "[.filename]#stand/i386/btx/btx/btx.S# [[btx-header]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:919
+msgid ""
+"Note the first two bytes are `0xeb` and `0xe`. In the IA-32 architecture, "
+"these two bytes are interpreted as a relative jump past the header into the "
+"entry point, so in theory, [.filename]#boot1# could jump here (address "
+"`0x9000`) instead of address `0x9010`. Note that the last field in the BTX "
+"header is a pointer to the client's ([.filename]#boot2#) entry pointb2. "
+"This field is patched at link time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:921
+msgid "Immediately following the header is the BTX server's entry point:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:935
+#, no-wrap
+msgid ""
+"/*\n"
+" * Initialization routine.\n"
+" */\n"
+"init:\t\tcli\t\t\t\t# Disable interrupts\n"
+"\t\txor %ax,%ax\t\t\t# Zero/segment\n"
+"\t\tmov %ax,%ss\t\t\t# Set up\n"
+"\t\tmov $MEM_ESP0,%sp\t\t# stack\n"
+"\t\tmov %ax,%es\t\t\t# Address\n"
+"\t\tmov %ax,%ds\t\t\t# data\n"
+"\t\tpushl $0x2\t\t\t# Clear\n"
+"\t\tpopfl\t\t\t\t# flags\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:937
+#, no-wrap
+msgid "[.filename]#stand/i386/btx/btx/btx.S# [[btx-init]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:941
+msgid ""
+"This code disables interrupts, sets up a working stack (starting at address "
+"`0x1800`) and clears the flags in the EFLAGS register. Note that the "
+"`popfl` instruction pops out a doubleword (4 bytes) from the stack and "
+"places it in the EFLAGS register. As the value actually popped is `2`, the "
+"EFLAGS register is effectively cleared (IA-32 requires that bit 2 of the "
+"EFLAGS register always be 1)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:944
+msgid ""
+"Our next code block clears (sets to `0`) the memory range `0x5e00-0x8fff`. "
+"This range is where the various data structures will be created:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:954
+#, no-wrap
+msgid ""
+"/*\n"
+" * Initialize memory.\n"
+" */\n"
+"\t\tmov $MEM_IDT,%di\t\t# Memory to initialize\n"
+"\t\tmov $(MEM_ORG-MEM_IDT)/2,%cx\t# Words to zero\n"
+"\t\trep\t\t\t\t# Zero-fill\n"
+"\t\tstosw\t\t\t\t# memory\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:956
+#, no-wrap
+msgid "[.filename]#stand/i386/btx/btx/btx.S# [[btx-clear-mem]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:959
+msgid ""
+"Recall that [.filename]#boot1# was originally loaded to address `0x7c00`, "
+"so, with this memory initialization, that copy effectively disappeared. "
+"However, also recall that [.filename]#boot1# was relocated to `0x700`, so "
+"_that_ copy is still in memory, and the BTX server will make use of it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:967
+msgid ""
+"Next, the real-mode IVT (Interrupt Vector Table is updated. The IVT is an "
+"array of segment/offset pairs for exception and interrupt handlers. The "
+"BIOS normally maps hardware interrupts to interrupt vectors `0x8` to `0xf` "
+"and `0x70` to `0x77` but, as will be seen, the 8259A Programmable Interrupt "
+"Controller, the chip controlling the actual mapping of hardware interrupts "
+"to interrupt vectors, is programmed to remap these interrupt vectors from "
+"`0x8-0xf` to `0x20-0x27` and from `0x70-0x77` to `0x28-0x2f`. Thus, "
+"interrupt handlers are provided for interrupt vectors `0x20-0x2f`. The "
+"reason the BIOS-provided handlers are not used directly is because they work "
+"in 16-bit real mode, but not 32-bit protected mode. Processor mode will be "
+"switched to 32-bit protected mode shortly. However, the BTX server sets up "
+"a mechanism to effectively use the handlers provided by the BIOS:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:982
+#, no-wrap
+msgid ""
+"/*\n"
+" * Update real mode IDT for reflecting hardware interrupts.\n"
+" */\n"
+"\t\tmov $intr20,%bx\t\t\t# Address first handler\n"
+"\t\tmov $0x10,%cx\t\t\t# Number of handlers\n"
+"\t\tmov $0x20*4,%di\t\t\t# First real mode IDT entry\n"
+"init.0:\t\tmov %bx,(%di)\t\t\t# Store IP\n"
+"\t\tinc %di\t\t\t\t# Address next\n"
+"\t\tinc %di\t\t\t\t# entry\n"
+"\t\tstosw\t\t\t\t# Store CS\n"
+"\t\tadd $4,%bx\t\t\t# Next handler\n"
+"\t\tloop init.0\t\t\t# Next IRQ\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:984
+#, no-wrap
+msgid "[.filename]#stand/i386/btx/btx/btx.S# [[btx-ivt]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:989
+msgid ""
+"The next block creates the IDT (Interrupt Descriptor Table). The IDT is "
+"analogous, in protected mode, to the IVT in real mode. That is, the IDT "
+"describes the various exception and interrupt handlers used when the "
+"processor is executing in protected mode. In essence, it also consists of "
+"an array of segment/offset pairs, although the structure is somewhat more "
+"complex, because segments in protected mode are different than in real mode, "
+"and various protection mechanisms apply:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1016
+#, no-wrap
+msgid ""
+"/*\n"
+" * Create IDT.\n"
+" */\n"
+"\t\tmov $MEM_IDT,%di\t\t# IDT's address\n"
+"\t\tmov $idtctl,%si\t\t\t# Control string\n"
+"init.1:\t\tlodsb\t\t\t\t# Get entry\n"
+"\t\tcbw\t\t\t\t# count\n"
+"\t\txchg %ax,%cx\t\t\t# as word\n"
+"\t\tjcxz init.4\t\t\t# If done\n"
+"\t\tlodsb\t\t\t\t# Get segment\n"
+"\t\txchg %ax,%dx\t\t\t# P:DPL:type\n"
+"\t\tlodsw\t\t\t\t# Get control\n"
+"\t\txchg %ax,%bx\t\t\t# set\n"
+"\t\tlodsw\t\t\t\t# Get handler offset\n"
+"\t\tmov $SEL_SCODE,%dh\t\t# Segment selector\n"
+"init.2:\t\tshr %bx\t\t\t\t# Handle this int?\n"
+"\t\tjnc init.3\t\t\t# No\n"
+"\t\tmov %ax,(%di)\t\t\t# Set handler offset\n"
+"\t\tmov %dh,0x2(%di)\t\t# and selector\n"
+"\t\tmov %dl,0x5(%di)\t\t# Set P:DPL:type\n"
+"\t\tadd $0x4,%ax\t\t\t# Next handler\n"
+"init.3:\t\tlea 0x8(%di),%di\t\t# Next entry\n"
+"\t\tloop init.2\t\t\t# Till set done\n"
+"\t\tjmp init.1\t\t\t# Continue\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1018
+#, no-wrap
+msgid "[.filename]#stand/i386/btx/btx/btx.S# [[btx-idt]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1026
+msgid ""
+"Each entry in the `IDT` is 8 bytes long. Besides the segment/offset "
+"information, they also describe the segment type, privilege level, and "
+"whether the segment is present in memory or not. The construction is such "
+"that interrupt vectors from `0` to `0xf` (exceptions) are handled by "
+"function `intx00`; vector `0x10` (also an exception) is handled by `intx10`; "
+"hardware interrupts, which are later configured to start at interrupt vector "
+"`0x20` all the way to interrupt vector `0x2f`, are handled by function "
+"`intx20`. Lastly, interrupt vector `0x30`, which is used for system calls, "
+"is handled by `intx30`, and vectors `0x31` and `0x32` are handled by "
+"`intx31`. It must be noted that only descriptors for interrupt vectors "
+"`0x30`, `0x31` and `0x32` are given privilege level 3, the same privilege "
+"level as the [.filename]#boot2# client, which means the client can execute a "
+"software-generated interrupt to this vectors through the `int` instruction "
+"without failing (this is the way [.filename]#boot2# use the services "
+"provided by the BTX server). Also, note that _only_ software-generated "
+"interrupts are protected from code executing in lesser privilege levels. "
+"Hardware-generated interrupts and processor-generated exceptions are "
+"_always_ handled adequately, regardless of the actual privileges involved."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1031
+msgid ""
+"The next step is to initialize the TSS (Task-State Segment). The TSS is a "
+"hardware feature that helps the operating system or executive software "
+"implement multitasking functionality through process abstraction. The IA-32 "
+"architecture demands the creation and use of _at least_ one TSS if "
+"multitasking facilities are used or different privilege levels are defined. "
+"Since the [.filename]#boot2# client is executed in privilege level 3, but "
+"the BTX server runs in privilege level 0, a TSS must be defined:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1040
+#, no-wrap
+msgid ""
+"/*\n"
+" * Initialize TSS.\n"
+" */\n"
+"init.4:\t\tmovb $_ESP0H,TSS_ESP0+1(%di)\t# Set ESP0\n"
+"\t\tmovb $SEL_SDATA,TSS_SS0(%di)\t# Set SS0\n"
+"\t\tmovb $_TSSIO,TSS_MAP(%di)\t# Set I/O bit map base\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1042
+#, no-wrap
+msgid "[.filename]#stand/i386/btx/btx/btx.S# [[btx-tss]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1046
+msgid ""
+"Note that a value is given for the Privilege Level 0 stack pointer and stack "
+"segment in the TSS. This is needed because, if an interrupt or exception is "
+"received while executing [.filename]#boot2# in Privilege Level 3, a change "
+"to Privilege Level 0 is automatically performed by the processor, so a new "
+"working stack is needed. Finally, the I/O Map Base Address field of the TSS "
+"is given a value, which is a 16-bit offset from the beginning of the TSS to "
+"the I/O Permission Bitmap and the Interrupt Redirection Bitmap."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1049
+msgid ""
+"After the IDT and TSS are created, the processor is ready to switch to "
+"protected mode. This is done in the next block:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1067
+#, no-wrap
+msgid ""
+"/*\n"
+" * Bring up the system.\n"
+" */\n"
+"\t\tmov $0x2820,%bx\t\t\t# Set protected mode\n"
+"\t\tcallw setpic\t\t\t# IRQ offsets\n"
+"\t\tlidt idtdesc\t\t\t# Set IDT\n"
+"\t\tlgdt gdtdesc\t\t\t# Set GDT\n"
+"\t\tmov %cr0,%eax\t\t\t# Switch to protected\n"
+"\t\tinc %ax\t\t\t\t# mode\n"
+"\t\tmov %eax,%cr0\t\t\t#\n"
+"\t\tljmp $SEL_SCODE,$init.8\t\t# To 32-bit code\n"
+"\t\t.code32\n"
+"init.8:\t\txorl %ecx,%ecx\t\t\t# Zero\n"
+"\t\tmovb $SEL_SDATA,%cl\t\t# To 32-bit\n"
+"\t\tmovw %cx,%ss\t\t\t# stack\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1069
+#, no-wrap
+msgid "[.filename]#stand/i386/btx/btx/btx.S# [[btx-prot]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1082
+msgid ""
+"First, a call is made to `setpic` to program the 8259A PIC (Programmable "
+"Interrupt Controller). This chip is connected to multiple hardware "
+"interrupt sources. Upon receiving an interrupt from a device, it signals "
+"the processor with the appropriate interrupt vector. This can be customized "
+"so that specific interrupts are associated with specific interrupt vectors, "
+"as explained before. Next, the IDTR (Interrupt Descriptor Table Register) "
+"and GDTR (Global Descriptor Table Register) are loaded with the instructions "
+"`lidt` and `lgdt`, respectively. These registers are loaded with the base "
+"address and limit address for the IDT and GDT. The following three "
+"instructions set the Protection Enable (PE) bit of the `%cr0` register. "
+"This effectively switches the processor to 32-bit protected mode. Next, a "
+"long jump is made to `init.8` using segment selector SEL_SCODE, which "
+"selects the Supervisor Code Segment. The processor is effectively executing "
+"in CPL 0, the most privileged level, after this jump. Finally, the "
+"Supervisor Data Segment is selected for the stack by assigning the segment "
+"selector SEL_SDATA to the `%ss` register. This data segment also has a "
+"privilege level of `0`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1084
+msgid ""
+"Our last code block is responsible for loading the TR (Task Register) with "
+"the segment selector for the TSS we created earlier, and setting the User "
+"Mode environment before passing execution control to the [.filename]#boot2# "
+"client."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1120
+#, no-wrap
+msgid ""
+"/*\n"
+" * Launch user task.\n"
+" */\n"
+"\t\tmovb $SEL_TSS,%cl\t\t# Set task\n"
+"\t\tltr %cx\t\t\t\t# register\n"
+"\t\tmovl $MEM_USR,%edx\t\t# User base address\n"
+"\t\tmovzwl %ss:BDA_MEM,%eax\t\t# Get free memory\n"
+"\t\tshll $0xa,%eax\t\t\t# To bytes\n"
+"\t\tsubl $ARGSPACE,%eax\t\t# Less arg space\n"
+"\t\tsubl %edx,%eax\t\t\t# Less base\n"
+"\t\tmovb $SEL_UDATA,%cl\t\t# User data selector\n"
+"\t\tpushl %ecx\t\t\t# Set SS\n"
+"\t\tpushl %eax\t\t\t# Set ESP\n"
+"\t\tpush $0x202\t\t\t# Set flags (IF set)\n"
+"\t\tpush $SEL_UCODE\t\t\t# Set CS\n"
+"\t\tpushl btx_hdr+0xc\t\t# Set EIP\n"
+"\t\tpushl %ecx\t\t\t# Set GS\n"
+"\t\tpushl %ecx\t\t\t# Set FS\n"
+"\t\tpushl %ecx\t\t\t# Set DS\n"
+"\t\tpushl %ecx\t\t\t# Set ES\n"
+"\t\tpushl %edx\t\t\t# Set EAX\n"
+"\t\tmovb $0x7,%cl\t\t\t# Set remaining\n"
+"init.9:\t\tpush $0x0\t\t\t# general\n"
+"\t\tloop init.9\t\t\t# registers\n"
+"#ifdef BTX_SERIAL\n"
+"\t\tcall sio_init\t\t\t# setup the serial console\n"
+"#endif\n"
+"\t\tpopa\t\t\t\t# and initialize\n"
+"\t\tpopl %es\t\t\t# Initialize\n"
+"\t\tpopl %ds\t\t\t# user\n"
+"\t\tpopl %fs\t\t\t# segment\n"
+"\t\tpopl %gs\t\t\t# registers\n"
+"\t\tiret\t\t\t\t# To user mode\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1122
+#, no-wrap
+msgid "[.filename]#stand/i386/btx/btx/btx.S# [[btx-end]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1146
+msgid ""
+"Note that the client's environment include a stack segment selector and "
+"stack pointer (registers `%ss` and `%esp`). Indeed, once the TR is loaded "
+"with the appropriate stack segment selector (instruction `ltr`), the stack "
+"pointer is calculated and pushed onto the stack along with the stack's "
+"segment selector. Next, the value `0x202` is pushed onto the stack; it is "
+"the value that the EFLAGS will get when control is passed to the client. "
+"Also, the User Mode code segment selector and the client's entry point are "
+"pushed. Recall that this entry point is patched in the BTX header at link "
+"time. Finally, segment selectors (stored in register `%ecx`) for the "
+"segment registers `%gs, %fs, %ds and %es` are pushed onto the stack, along "
+"with the value at `%edx` (`0xa000`). Keep in mind the various values that "
+"have been pushed onto the stack (they will be popped out shortly). Next, "
+"values for the remaining general purpose registers are also pushed onto the "
+"stack (note the `loop` that pushes the value `0` seven times). Now, values "
+"will be started to be popped out of the stack. First, the `popa` "
+"instruction pops out of the stack the latest seven values pushed. They are "
+"stored in the general purpose registers in order `%edi, %esi, %ebp, %ebx, "
+"%edx, %ecx, %eax`. Then, the various segment selectors pushed are popped "
+"into the various segment registers. Five values still remain on the stack. "
+"They are popped when the `iret` instruction is executed. This instruction "
+"first pops the value that was pushed from the BTX header. This value is a "
+"pointer to [.filename]#boot2#'s entry point. It is placed in the register `"
+"%eip`, the instruction pointer register. Next, the segment selector for the "
+"User Code Segment is popped and copied to register `%cs`. Remember that "
+"this segment's privilege level is 3, the least privileged level. This means "
+"that we must provide values for the stack of this privilege level. This is "
+"why the processor, besides further popping the value for the EFLAGS "
+"register, does two more pops out of the stack. These values go to the stack "
+"pointer (`%esp`) and the stack segment (`%ss`). Now, execution continues at "
+"``boot0``'s entry point."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1150
+msgid ""
+"It is important to note how the User Code Segment is defined. This "
+"segment's _base address_ is set to `0xa000`. This means that code memory "
+"addresses are _relative_ to address 0xa000; if code being executed is "
+"fetched from address `0x2000`, the _actual_ memory addressed is "
+"`0xa000+0x2000=0xc000`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1152
+#, no-wrap
+msgid "boot2 Stage"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1159
+msgid ""
+"`boot2` defines an important structure, `struct bootinfo`. This structure "
+"is initialized by `boot2` and passed to the loader, and then further to the "
+"kernel. Some nodes of this structures are set by `boot2`, the rest by the "
+"loader. This structure, among other information, contains the kernel "
+"filename, BIOS harddisk geometry, BIOS drive number for boot device, "
+"physical memory available, `envp` pointer etc. The definition for it is:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1184
+#, no-wrap
+msgid ""
+"/usr/include/machine/bootinfo.h:\n"
+"struct bootinfo {\n"
+"\tu_int32_t\tbi_version;\n"
+"\tu_int32_t\tbi_kernelname;\t\t/* represents a char * */\n"
+"\tu_int32_t\tbi_nfs_diskless;\t/* struct nfs_diskless * */\n"
+"\t\t\t\t/* End of fields that are always present. */\n"
+"#define\tbi_endcommon\tbi_n_bios_used\n"
+"\tu_int32_t\tbi_n_bios_used;\n"
+"\tu_int32_t\tbi_bios_geom[N_BIOS_GEOM];\n"
+"\tu_int32_t\tbi_size;\n"
+"\tu_int8_t\tbi_memsizes_valid;\n"
+"\tu_int8_t\tbi_bios_dev;\t\t/* bootdev BIOS unit number */\n"
+"\tu_int8_t\tbi_pad[2];\n"
+"\tu_int32_t\tbi_basemem;\n"
+"\tu_int32_t\tbi_extmem;\n"
+"\tu_int32_t\tbi_symtab;\t\t/* struct symtab * */\n"
+"\tu_int32_t\tbi_esymtab;\t\t/* struct symtab * */\n"
+"\t\t\t\t/* Items below only from advanced bootloader */\n"
+"\tu_int32_t\tbi_kernend;\t\t/* end of kernel space */\n"
+"\tu_int32_t\tbi_envp;\t\t/* environment */\n"
+"\tu_int32_t\tbi_modulep;\t\t/* preloaded modules */\n"
+"};\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1191
+msgid ""
+"`boot2` enters into an infinite loop waiting for user input, then calls "
+"`load()`. If the user does not press anything, the loop breaks by a "
+"timeout, so `load()` will load the default file ([.filename]#/boot/"
+"loader#). Functions `ino_t lookup(char *filename)` and `int xfsread(ino_t "
+"inode, void *buf, size_t nbyte)` are used to read the content of a file into "
+"memory. [.filename]#/boot/loader# is an ELF binary, but where the ELF "
+"header is prepended with [.filename]#a.out#'s `struct exec` structure. "
+"`load()` scans the loader's ELF header, loading the content of [.filename]#/"
+"boot/loader# into memory, and passing the execution to the loader's entry:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1198
+#, no-wrap
+msgid ""
+"stand/i386/boot2/boot2.c:\n"
+" __exec((caddr_t)addr, RB_BOOTINFO | (opts & RBX_MASK),\n"
+"\t MAKEBOOTDEV(dev_maj[dsk.type], dsk.slice, dsk.unit, dsk.part),\n"
+"\t 0, 0, 0, VTOP(&bootinfo));\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1201
+#, no-wrap
+msgid "loader Stage"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1206
+msgid ""
+"loader is a BTX client as well. I will not describe it here in detail, "
+"there is a comprehensive man page written by Mike Smith, man:loader[8]. The "
+"underlying mechanisms and BTX were discussed above."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1209
+msgid ""
+"The main task for the loader is to boot the kernel. When the kernel is "
+"loaded into memory, it is being called by the loader:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1215
+#, no-wrap
+msgid ""
+"stand/common/boot.c:\n"
+" /* Call the exec handler from the loader matching the kernel */\n"
+" file_formats[fp->f_loader]->l_exec(fp);\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1218
+#, no-wrap
+msgid "Kernel Initialization"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1225
+msgid ""
+"Let us take a look at the command that links the kernel. This will help "
+"identify the exact location where the loader passes execution to the "
+"kernel. This location is the kernel's actual entry point. This command is "
+"now excluded from [.filename]#sys/conf/Makefile.i386#. The content that "
+"interests us can be found in [.filename]#/usr/obj/usr/src/i386.i386/sys/"
+"GENERIC/#."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1232
+#, no-wrap
+msgid ""
+"/usr/obj/usr/src/i386.i386/sys/GENERIC/kernel.meta:\n"
+"ld -m elf_i386_fbsd -Bdynamic -T /usr/src/sys/conf/ldscript.i386 --build-id=sha1 --no-warn-mismatch \\\n"
+"--warn-common --export-dynamic --dynamic-linker /red/herring -X -o kernel locore.o\n"
+"<lots of kernel .o files>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1238
+msgid ""
+"A few interesting things can be seen here. First, the kernel is an ELF "
+"dynamically linked binary, but the dynamic linker for kernel is [.filename]#/"
+"red/herring#, which is definitely a bogus file. Second, taking a look at "
+"the file [.filename]#sys/conf/ldscript.i386# gives an idea about what ld "
+"options are used when compiling a kernel. Reading through the first few "
+"lines, the string"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1243
+#, no-wrap
+msgid ""
+"sys/conf/ldscript.i386:\n"
+"ENTRY(btext)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1247
+msgid ""
+"says that a kernel's entry point is the symbol `btext`. This symbol is "
+"defined in [.filename]#locore.s#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1258
+#, no-wrap
+msgid ""
+"sys/i386/i386/locore.s:\n"
+"\t.text\n"
+"/**********************************************************************\n"
+" *\n"
+" * This is where the bootblocks start us, set the ball rolling...\n"
+" *\n"
+" */\n"
+"NON_GPROF_ENTRY(btext)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1262
+msgid ""
+"First, the register EFLAGS is set to a predefined value of 0x00000002. Then "
+"all the segment registers are initialized:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1269
+#, no-wrap
+msgid ""
+"sys/i386/i386/locore.s:\n"
+"/* Don't trust what the BIOS gives for eflags. */\n"
+"\tpushl\t$PSL_KERNEL\n"
+"\tpopfl\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1277
+#, no-wrap
+msgid ""
+"/*\n"
+" * Don't trust what the BIOS gives for %fs and %gs. Trust the bootstrap\n"
+" * to set %cs, %ds, %es and %ss.\n"
+" */\n"
+"\tmov\t%ds, %ax\n"
+"\tmov\t%ax, %fs\n"
+"\tmov\t%ax, %gs\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1281
+msgid ""
+"btext calls the routines `recover_bootinfo()`, `identify_cpu()`, which are "
+"also defined in [.filename]#locore.s#. Here is a description of what they "
+"do:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1287
+#, no-wrap
+msgid "`recover_bootinfo`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1291
+#, no-wrap
+msgid ""
+"This routine parses the parameters to the kernel passed from the bootstrap.\n"
+"The kernel may have been booted in 3 ways: by the loader, described above, by the old disk boot blocks, or by the old diskless boot procedure.\n"
+"This function determines the booting method, and stores the `struct bootinfo` structure into the kernel memory."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1292
+#, no-wrap
+msgid "`identify_cpu`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1293
+#, no-wrap
+msgid "This function tries to find out what CPU it is running on, storing the value found in a variable `_cpu`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1296
+msgid "The next steps are enabling VME, if the CPU supports it:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1304
+#, no-wrap
+msgid ""
+"sys/i386/i386/mpboot.s:\n"
+"\ttestl\t$CPUID_VME,%edx\n"
+"\tjz\t3f\n"
+"\torl\t$CR4_VME,%eax\n"
+"3:\tmovl\t%eax,%cr4\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1307
+msgid "Then, enabling paging:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1317
+#, no-wrap
+msgid ""
+"sys/i386/i386/mpboot.s:\n"
+"/* Now enable paging */\n"
+"\tmovl\tIdlePTD_nopae, %eax\n"
+"\tmovl\t%eax,%cr3\t\t\t/* load ptd addr into mmu */\n"
+"\tmovl\t%cr0,%eax\t\t\t/* get control word */\n"
+"\torl\t$CR0_PE|CR0_PG,%eax\t\t/* enable paging */\n"
+"\tmovl\t%eax,%cr0\t\t\t/* and let's page NOW! */\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1320
+msgid ""
+"The next three lines of code are because the paging was set, so the jump is "
+"needed to continue the execution in virtualized address space:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1326
+#, no-wrap
+msgid ""
+"sys/i386/i386/mpboot.s:\n"
+"\tpushl\t$mp_begin\t\t\t\t/* jump to high mem */\n"
+"\tret\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1329
+#, no-wrap
+msgid ""
+"/* now running relocated at KERNBASE where the system is linked to run */\n"
+"mp_begin:\t/* now running relocated at KERNBASE */\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1334
+msgid ""
+"The function `init386()` is called with a pointer to the first free physical "
+"page, after that `mi_startup()`. `init386` is an architecture dependent "
+"initialization function, and `mi_startup()` is an architecture independent "
+"one (the 'mi_' prefix stands for Machine Independent). The kernel never "
+"returns from `mi_startup()`, and by calling it, the kernel finishes booting:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1344
+#, no-wrap
+msgid ""
+"sys/i386/i386/locore.s:\n"
+"\tpushl\tphysfree\t\t\t/* value of first for init386(first) */\n"
+"\tcall\tinit386\t\t\t\t/* wire 386 chip for unix operation */\n"
+"\taddl\t$4,%esp\n"
+"\tmovl\t%eax,%esp\t\t\t/* Switch to true top of stack. */\n"
+"\tcall\tmi_startup\t\t\t/* autoconfiguration, mountroot etc */\n"
+"\t/* NOTREACHED */\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1346
+#, no-wrap
+msgid "`init386()`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1351
+msgid ""
+"`init386()` is defined in [.filename]#sys/i386/i386/machdep.c# and performs "
+"low-level initialization specific to the i386 chip. The switch to protected "
+"mode was performed by the loader. The loader has created the very first "
+"task, in which the kernel continues to operate. Before looking at the code, "
+"consider the tasks the processor must complete to initialize protected mode "
+"execution:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1353
+msgid ""
+"Initialize the kernel tunable parameters, passed from the bootstrapping "
+"program."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1354
+msgid "Prepare the GDT."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1355
+msgid "Prepare the IDT."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1356
+msgid "Initialize the system console."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1357
+msgid "Initialize the DDB, if it is compiled into kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1358
+msgid "Initialize the TSS."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1359
+msgid "Prepare the LDT."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1360
+msgid "Set up thread0's pcb."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1363
+msgid ""
+"`init386()` initializes the tunable parameters passed from bootstrap by "
+"setting the environment pointer (envp) and calling `init_param1()`. The "
+"envp pointer has been passed from loader in the `bootinfo` structure:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1369
+#, no-wrap
+msgid ""
+"sys/i386/i386/machdep.c:\n"
+"\t/* Init basic tunables, hz etc */\n"
+"\tinit_param1();\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1373
+msgid ""
+"`init_param1()` is defined in [.filename]#sys/kern/subr_param.c#. That file "
+"has a number of sysctls, and two functions, `init_param1()` and "
+"`init_param2()`, that are called from `init386()`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1381
+#, no-wrap
+msgid ""
+"sys/kern/subr_param.c:\n"
+"\thz = -1;\n"
+"\tTUNABLE_INT_FETCH(\"kern.hz\", &hz);\n"
+"\tif (hz == -1)\n"
+"\t\thz = vm_guest > VM_GUEST_NO ? HZ_VM : HZ;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1384
+msgid ""
+"TUNABLE_<typename>_FETCH is used to fetch the value from the environment:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1389
+#, no-wrap
+msgid ""
+"/usr/src/sys/sys/kernel.h:\n"
+"#define\tTUNABLE_INT_FETCH(path, var)\tgetenv_int((path), (var))\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1393
+msgid ""
+"Sysctl `kern.hz` is the system clock tick. Additionally, these sysctls are "
+"set by `init_param1()`: `kern.maxswzone, kern.maxbcache, kern.maxtsiz, kern."
+"dfldsiz, kern.maxdsiz, kern.dflssiz, kern.maxssiz, kern.sgrowsiz`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1401
+msgid ""
+"Then `init386()` prepares the Global Descriptors Table (GDT). Every task on "
+"an x86 is running in its own virtual address space, and this space is "
+"addressed by a segment:offset pair. Say, for instance, the current "
+"instruction to be executed by the processor lies at CS:EIP, then the linear "
+"virtual address for that instruction would be \"the virtual address of code "
+"segment CS\" + EIP. For convenience, segments begin at virtual address 0 "
+"and end at a 4GB boundary. Therefore, the instruction's linear virtual "
+"address for this example would just be the value of EIP. Segment registers "
+"such as CS, DS etc are the selectors, i.e., indexes, into GDT (to be more "
+"precise, an index is not a selector itself, but the INDEX field of a "
+"selector). FreeBSD's GDT holds descriptors for 15 selectors per CPU:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1407
+#, no-wrap
+msgid ""
+"sys/i386/i386/machdep.c:\n"
+"union descriptor gdt0[NGDT];\t/* initial global descriptor table */\n"
+"union descriptor *gdt = gdt0;\t/* global descriptor table */\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1432
+#, no-wrap
+msgid ""
+"sys/x86/include/segments.h:\n"
+"/*\n"
+" * Entries in the Global Descriptor Table (GDT)\n"
+" */\n"
+"#define\tGNULL_SEL\t0\t/* Null Descriptor */\n"
+"#define\tGPRIV_SEL\t1\t/* SMP Per-Processor Private Data */\n"
+"#define\tGUFS_SEL\t2\t/* User %fs Descriptor (order critical: 1) */\n"
+"#define\tGUGS_SEL\t3\t/* User %gs Descriptor (order critical: 2) */\n"
+"#define\tGCODE_SEL\t4\t/* Kernel Code Descriptor (order critical: 1) */\n"
+"#define\tGDATA_SEL\t5\t/* Kernel Data Descriptor (order critical: 2) */\n"
+"#define\tGUCODE_SEL\t6\t/* User Code Descriptor (order critical: 3) */\n"
+"#define\tGUDATA_SEL\t7\t/* User Data Descriptor (order critical: 4) */\n"
+"#define\tGBIOSLOWMEM_SEL\t8\t/* BIOS low memory access (must be entry 8) */\n"
+"#define\tGPROC0_SEL\t9\t/* Task state process slot zero and up */\n"
+"#define\tGLDT_SEL\t10\t/* Default User LDT */\n"
+"#define\tGUSERLDT_SEL\t11\t/* User LDT */\n"
+"#define\tGPANIC_SEL\t12\t/* Task state to consider panic from */\n"
+"#define\tGBIOSCODE32_SEL\t13\t/* BIOS interface (32bit Code) */\n"
+"#define\tGBIOSCODE16_SEL\t14\t/* BIOS interface (16bit Code) */\n"
+"#define\tGBIOSDATA_SEL\t15\t/* BIOS interface (Data) */\n"
+"#define\tGBIOSUTIL_SEL\t16\t/* BIOS interface (Utility) */\n"
+"#define\tGBIOSARGS_SEL\t17\t/* BIOS interface (Arguments) */\n"
+"#define\tGNDIS_SEL\t18\t/* For the NDIS layer */\n"
+"#define\tNGDT\t\t19\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1436
+msgid ""
+"Note that those #defines are not selectors themselves, but just a field "
+"INDEX of a selector, so they are exactly the indices of the GDT. for "
+"example, an actual selector for the kernel code (GCODE_SEL) has the value "
+"0x20."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1444
+msgid ""
+"The next step is to initialize the Interrupt Descriptor Table (IDT). This "
+"table is referenced by the processor when a software or hardware interrupt "
+"occurs. For example, to make a system call, user application issues the "
+"`INT 0x80` instruction. This is a software interrupt, so the processor's "
+"hardware looks up a record with index 0x80 in the IDT. This record points "
+"to the routine that handles this interrupt, in this particular case, this "
+"will be the kernel's syscall gate. The IDT may have a maximum of 256 "
+"(0x100) records. The kernel allocates NIDT records for the IDT, where NIDT "
+"is the maximum (256):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1450
+#, no-wrap
+msgid ""
+"sys/i386/i386/machdep.c:\n"
+"static struct gate_descriptor idt0[NIDT];\n"
+"struct gate_descriptor *idt = &idt0[0];\t/* interrupt descriptor table */\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1454
+msgid ""
+"For each interrupt, an appropriate handler is set. The syscall gate for "
+"`INT 0x80` is set as well:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1460
+#, no-wrap
+msgid ""
+"sys/i386/i386/machdep.c:\n"
+"\tsetidt(IDT_SYSCALL, &IDTVEC(int0x80_syscall),\n"
+"\t\t\tSDT_SYS386IGT, SEL_UPL, GSEL(GCODE_SEL, SEL_KPL));\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1463
+msgid ""
+"So when a userland application issues the `INT 0x80` instruction, control "
+"will transfer to the function `_Xint0x80_syscall`, which is in the kernel "
+"code segment and will be executed with supervisor privileges."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1465
+msgid "Console and DDB are then initialized:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1476
+#, no-wrap
+msgid ""
+"sys/i386/i386/machdep.c:\n"
+"\tcninit();\n"
+"/* skipped */\n"
+" kdb_init();\n"
+"#ifdef KDB\n"
+"\tif (boothowto & RB_KDB)\n"
+"\t\tkdb_enter(KDB_WHY_BOOTFLAGS, \"Boot flags requested debugger\");\n"
+"#endif\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1479
+msgid ""
+"The Task State Segment is another x86 protected mode structure, the TSS is "
+"used by the hardware to store task information when a task switch occurs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1482
+msgid ""
+"The Local Descriptors Table is used to reference userland code and data. "
+"Several selectors are defined to point to the LDT, they are the system call "
+"gates and the user code and data selectors:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1491
+#, no-wrap
+msgid ""
+"sys/x86/include/segments.h:\n"
+"#define\tLSYS5CALLS_SEL\t0\t/* forced by intel BCS */\n"
+"#define\tLSYS5SIGR_SEL\t1\n"
+"#define\tLUCODE_SEL\t3\n"
+"#define\tLUDATA_SEL\t5\n"
+"#define\tNLDT\t\t(LUDATA_SEL + 1)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1496
+msgid ""
+"Next, proc0's Process Control Block (`struct pcb`) structure is "
+"initialized. proc0 is a `struct proc` structure that describes a kernel "
+"process. It is always present while the kernel is running, therefore it is "
+"linked with thread0:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1504
+#, no-wrap
+msgid ""
+"sys/i386/i386/machdep.c:\n"
+"register_t\n"
+"init386(int first)\n"
+"{\n"
+" /* ... skipped ... */\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1508
+#, no-wrap
+msgid ""
+" proc_linkup0(&proc0, &thread0);\n"
+" /* ... skipped ... */\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1512
+msgid ""
+"The structure `struct pcb` is a part of a proc structure. It is defined in "
+"[.filename]#/usr/include/machine/pcb.h# and has a process's information "
+"specific to the i386 architecture, such as registers values."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1513
+#, no-wrap
+msgid "`mi_startup()`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1516
+msgid ""
+"This function performs a bubble sort of all the system initialization "
+"objects and then calls the entry of each object one by one:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1521
+#, no-wrap
+msgid ""
+"sys/kern/init_main.c:\n"
+"\tfor (sipp = sysinit; sipp < sysinit_end; sipp++) {\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1523
+#, no-wrap
+msgid "\t\t/* ... skipped ... */\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1528
+#, no-wrap
+msgid ""
+"\t\t/* Call function */\n"
+"\t\t(*((*sipp)->func))((*sipp)->udata);\n"
+"\t\t/* ... skipped ... */\n"
+"\t}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1531
+msgid ""
+"Although the sysinit framework is described in the link:/books/developers-"
+"handbook[Developers' Handbook], I will discuss the internals of it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1535
+msgid ""
+"Every system initialization object (sysinit object) is created by calling a "
+"SYSINIT() macro. Let us take as example an `announce` sysinit object. This "
+"object prints the copyright message:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1546
+#, no-wrap
+msgid ""
+"sys/kern/init_main.c:\n"
+"static void\n"
+"print_caddr_t(void *data __unused)\n"
+"{\n"
+"\tprintf(\"%s\", (char *)data);\n"
+"}\n"
+"/* ... skipped ... */\n"
+"SYSINIT(announce, SI_SUB_COPYRIGHT, SI_ORDER_FIRST, print_caddr_t, copyright);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1550
+msgid ""
+"The subsystem ID for this object is SI_SUB_COPYRIGHT (0x0800001). So, the "
+"copyright message will be printed out first, just after the console "
+"initialization."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1554
+msgid ""
+"Let us take a look at what exactly the macro `SYSINIT()` does. It expands "
+"to a `C_SYSINIT()` macro. The `C_SYSINIT()` macro then expands to a static "
+"`struct sysinit` structure declaration with another `DATA_SET` macro call:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1562
+#, no-wrap
+msgid ""
+"/usr/include/sys/kernel.h:\n"
+" #define C_SYSINIT(uniquifier, subsystem, order, func, ident) \\\n"
+" static struct sysinit uniquifier ## _sys_init = { \\ subsystem, \\\n"
+" order, \\ func, \\ (ident) \\ }; \\ DATA_WSET(sysinit_set,uniquifier ##\n"
+" _sys_init);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1566
+#, no-wrap
+msgid ""
+"#define\tSYSINIT(uniquifier, subsystem, order, func, ident)\t\\\n"
+"\tC_SYSINIT(uniquifier, subsystem, order,\t\t\t\\\n"
+"\t(sysinit_cfunc_t)(sysinit_nfunc_t)func, (void *)(ident))\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1569
+msgid ""
+"The `DATA_SET()` macro expands to a `_MAKE_SET()`, and that macro is the "
+"point where all the sysinit magic is hidden:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1575
+#, no-wrap
+msgid ""
+"/usr/include/linker_set.h:\n"
+"#define TEXT_SET(set, sym) _MAKE_SET(set, sym)\n"
+"#define DATA_SET(set, sym) _MAKE_SET(set, sym)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1579
+msgid ""
+"After executing these macros, various sections were made in the kernel, "
+"including`set.sysinit_set`. Running objdump on a kernel binary, you may "
+"notice the presence of such small sections:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1591
+#, no-wrap
+msgid ""
+"% llvm-objdump -h /kernel\n"
+"Sections:\n"
+"Idx Name Size VMA Type\n"
+" 10 set_sysctl_set 000021d4 01827078 DATA\n"
+" 16 set_kbddriver_set 00000010 0182a4d0 DATA\n"
+" 20 set_scterm_set 0000000c 0182c75c DATA\n"
+" 21 set_cons_set 00000014 0182c768 DATA\n"
+" 33 set_scrndr_set 00000024 0182c828 DATA\n"
+" 41 set_sysinit_set 000014d8 018fabb0 DATA\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1595
+msgid ""
+"This screen dump shows that the size of set.sysinit_set section is 0x14d8 "
+"bytes, so `0x14d8/sizeof(void *)` sysinit objects are compiled into the "
+"kernel. The other sections such as `set.sysctl_set` represent other linker "
+"sets."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1597
+msgid ""
+"By defining a variable of type `struct sysinit` the content of `set."
+"sysinit_set` section will be \"collected\" into that variable:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1602
+#, no-wrap
+msgid ""
+"sys/kern/init_main.c:\n"
+" SET_DECLARE(sysinit_set, struct sysinit);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1605
+msgid "The `struct sysinit` is defined as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1615
+#, no-wrap
+msgid ""
+"sys/sys/kernel.h:\n"
+" struct sysinit {\n"
+"\tenum sysinit_sub_id\tsubsystem;\t/* subsystem identifier*/\n"
+"\tenum sysinit_elem_order\torder;\t\t/* init order within subsystem*/\n"
+"\tsysinit_cfunc_t func;\t\t\t/* function\t\t*/\n"
+"\tconst void\t*udata;\t\t\t/* multiplexer/argument */\n"
+"};\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1620
+msgid ""
+"Returning to the `mi_startup()` discussion, it is must be clear now, how the "
+"sysinit objects are being organized. The `mi_startup()` function sorts them "
+"and calls each. The very last object is the system scheduler:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1632
+#, no-wrap
+msgid ""
+"/usr/include/sys/kernel.h:\n"
+"enum sysinit_sub_id {\n"
+"\tSI_SUB_DUMMY\t\t= 0x0000000,\t/* not executed; for linker*/\n"
+"\tSI_SUB_DONE\t\t= 0x0000001,\t/* processed*/\n"
+"\tSI_SUB_TUNABLES\t\t= 0x0700000,\t/* establish tunable values */\n"
+"\tSI_SUB_COPYRIGHT\t= 0x0800001,\t/* first use of console*/\n"
+"...\n"
+"\tSI_SUB_LAST\t\t= 0xfffffff\t/* final initialization */\n"
+"};\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1637
+msgid ""
+"The system scheduler sysinit object is defined in the file [.filename]#sys/"
+"vm/vm_glue.c#, and the entry point for that object is `scheduler()`. That "
+"function is actually an infinite loop, and it represents a process with PID "
+"0, the swapper process. The thread0 structure, mentioned before, is used to "
+"describe it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1639
+msgid ""
+"The first user process, called _init_, is created by the sysinit object "
+"`init`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1650
+#, no-wrap
+msgid ""
+"sys/kern/init_main.c:\n"
+"static void\n"
+"create_init(const void *udata __unused)\n"
+"{\n"
+"\tstruct fork_req fr;\n"
+"\tstruct ucred *newcred, *oldcred;\n"
+"\tstruct thread *td;\n"
+"\tint error;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1683
+#, no-wrap
+msgid ""
+"\tbzero(&fr, sizeof(fr));\n"
+"\tfr.fr_flags = RFFDG | RFPROC | RFSTOPPED;\n"
+"\tfr.fr_procp = &initproc;\n"
+"\terror = fork1(&thread0, &fr);\n"
+"\tif (error)\n"
+"\t\tpanic(\"cannot fork init: %d\\n\", error);\n"
+"\tKASSERT(initproc->p_pid == 1, (\"create_init: initproc->p_pid != 1\"));\n"
+"\t/* divorce init's credentials from the kernel's */\n"
+"\tnewcred = crget();\n"
+"\tsx_xlock(&proctree_lock);\n"
+"\tPROC_LOCK(initproc);\n"
+"\tinitproc->p_flag |= P_SYSTEM | P_INMEM;\n"
+"\tinitproc->p_treeflag |= P_TREE_REAPER;\n"
+"\toldcred = initproc->p_ucred;\n"
+"\tcrcopy(newcred, oldcred);\n"
+"#ifdef MAC\n"
+"\tmac_cred_create_init(newcred);\n"
+"#endif\n"
+"#ifdef AUDIT\n"
+"\taudit_cred_proc1(newcred);\n"
+"#endif\n"
+"\tproc_set_cred(initproc, newcred);\n"
+"\ttd = FIRST_THREAD_IN_PROC(initproc);\n"
+"\tcrcowfree(td);\n"
+"\ttd->td_realucred = crcowget(initproc->p_ucred);\n"
+"\ttd->td_ucred = td->td_realucred;\n"
+"\tPROC_UNLOCK(initproc);\n"
+"\tsx_xunlock(&proctree_lock);\n"
+"\tcrfree(oldcred);\n"
+"\tcpu_fork_kthread_handler(FIRST_THREAD_IN_PROC(initproc), start_init, NULL);\n"
+"}\n"
+"SYSINIT(init, SI_SUB_CREATE_INIT, SI_ORDER_FIRST, create_init, NULL);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1689
+msgid ""
+"The function `create_init()` allocates a new process by calling `fork1()`, "
+"but does not mark it runnable. When this new process is scheduled for "
+"execution by the scheduler, the `start_init()` will be called. That "
+"function is defined in [.filename]#init_main.c#. It tries to load and exec "
+"the [.filename]#init# binary, probing [.filename]#/sbin/init# first, then [."
+"filename]#/sbin/oinit#, [.filename]#/sbin/init.bak#, and finally [."
+"filename]#/rescue/init#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/boot/_index.adoc:1699
+#, no-wrap
+msgid ""
+"sys/kern/init_main.c:\n"
+"static char init_path[MAXPATHLEN] =\n"
+"#ifdef\tINIT_PATH\n"
+" __XSTRING(INIT_PATH);\n"
+"#else\n"
+" \"/sbin/init:/sbin/oinit:/sbin/init.bak:/rescue/init\";\n"
+"#endif\n"
+msgstr ""
diff --git a/documentation/content/en/books/arch-handbook/driverbasics/_index.adoc b/documentation/content/en/books/arch-handbook/driverbasics/_index.adoc
index acaca6502e..542bcdbc7a 100644
--- a/documentation/content/en/books/arch-handbook/driverbasics/_index.adoc
+++ b/documentation/content/en/books/arch-handbook/driverbasics/_index.adoc
@@ -6,7 +6,7 @@ description: Writing FreeBSD Device Drivers
tags: ["writing", "device drivers", "KLD", "FreeBSD"]
showBookMenu: true
weight: 11
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/driverbasics/"
---
[[driverbasics]]
@@ -90,28 +90,28 @@ Skeleton Layout of a kernel module
static int
skel_loader(struct module *m, int what, void *arg)
{
- int err = 0;
-
- switch (what) {
- case MOD_LOAD: /* kldload */
- uprintf("Skeleton KLD loaded.\n");
- break;
- case MOD_UNLOAD:
- uprintf("Skeleton KLD unloaded.\n");
- break;
- default:
- err = EOPNOTSUPP;
- break;
- }
- return(err);
+ int err = 0;
+
+ switch (what) {
+ case MOD_LOAD: /* kldload */
+ uprintf("Skeleton KLD loaded.\n");
+ break;
+ case MOD_UNLOAD:
+ uprintf("Skeleton KLD unloaded.\n");
+ break;
+ default:
+ err = EOPNOTSUPP;
+ break;
+ }
+ return(err);
}
/* Declare this module to the rest of the kernel */
static moduledata_t skel_mod = {
- "skel",
- skel_loader,
- NULL
+ "skel",
+ skel_loader,
+ NULL
};
DECLARE_MODULE(skeleton, skel_mod, SI_SUB_KLD, SI_ORDER_ANY);
diff --git a/documentation/content/en/books/arch-handbook/driverbasics/_index.po b/documentation/content/en/books/arch-handbook/driverbasics/_index.po
new file mode 100644
index 0000000000..31ed9cbdeb
--- /dev/null
+++ b/documentation/content/en/books/arch-handbook/driverbasics/_index.po
@@ -0,0 +1,634 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:20-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:1
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:13
+#, no-wrap
+msgid "Writing FreeBSD Device Drivers"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:1
+#, no-wrap
+msgid "Chapter 9. Writing FreeBSD Device Drivers"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:51
+#, no-wrap
+msgid "Introduction"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:54
+msgid ""
+"This chapter provides a brief introduction to writing device drivers for "
+"FreeBSD. A device in this context is a term used mostly for hardware-related "
+"stuff that belongs to the system, like disks, printers, or a graphics "
+"display with its keyboard. A device driver is the software component of the "
+"operating system that controls a specific device. There are also so-called "
+"pseudo-devices where a device driver emulates the behavior of a device in "
+"software without any particular underlying hardware. Device drivers can be "
+"compiled into the system statically or loaded on demand through the dynamic "
+"kernel linker facility `kld'."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:56
+msgid ""
+"Most devices in a UNIX(R)-like operating system are accessed through device-"
+"nodes, sometimes also called special files. These files are usually located "
+"under the directory [.filename]#/dev# in the filesystem hierarchy."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:58
+msgid ""
+"Device drivers can roughly be broken down into two categories; character and "
+"network device drivers."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:60
+#, no-wrap
+msgid "Dynamic Kernel Linker Facility - KLD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:63
+msgid ""
+"The kld interface allows system administrators to dynamically add and remove "
+"functionality from a running system. This allows device driver writers to "
+"load their new changes into a running kernel without constantly rebooting to "
+"test changes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:65
+msgid "The kld interface is used through:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:67
+msgid "`kldload` - loads a new kernel module"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:68
+msgid "`kldunload` - unloads a kernel module"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:69
+msgid "`kldstat` - lists loaded modules"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:71
+msgid "Skeleton Layout of a kernel module"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:78
+#, no-wrap
+msgid ""
+"/*\n"
+" * KLD Skeleton\n"
+" * Inspired by Andrew Reiter's Daemonnews article\n"
+" */\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:85
+#, no-wrap
+msgid ""
+"#include <sys/types.h>\n"
+"#include <sys/systm.h> /* uprintf */\n"
+"#include <sys/errno.h>\n"
+"#include <sys/param.h> /* defines used in kernel.h */\n"
+"#include <sys/module.h>\n"
+"#include <sys/kernel.h> /* types used in module initialization */\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:89
+#, no-wrap
+msgid ""
+"/*\n"
+" * Load handler that deals with the loading and unloading of a KLD.\n"
+" */\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:94
+#, no-wrap
+msgid ""
+"static int\n"
+"skel_loader(struct module *m, int what, void *arg)\n"
+"{\n"
+" int err = 0;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:108
+#, no-wrap
+msgid ""
+" switch (what) {\n"
+" case MOD_LOAD: /* kldload */\n"
+" uprintf(\"Skeleton KLD loaded.\\n\");\n"
+" break;\n"
+" case MOD_UNLOAD:\n"
+" uprintf(\"Skeleton KLD unloaded.\\n\");\n"
+" break;\n"
+" default:\n"
+" err = EOPNOTSUPP;\n"
+" break;\n"
+" }\n"
+" return(err);\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:110
+#, no-wrap
+msgid "/* Declare this module to the rest of the kernel */\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:116
+#, no-wrap
+msgid ""
+"static moduledata_t skel_mod = {\n"
+" \"skel\",\n"
+" skel_loader,\n"
+" NULL\n"
+"};\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:118
+#, no-wrap
+msgid "DECLARE_MODULE(skeleton, skel_mod, SI_SUB_KLD, SI_ORDER_ANY);\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:120
+#, no-wrap
+msgid "Makefile"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:123
+msgid ""
+"FreeBSD provides a system makefile to simplify compiling a kernel module."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:128
+#, no-wrap
+msgid ""
+"SRCS=skeleton.c\n"
+"KMOD=skeleton\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:130
+#, no-wrap
+msgid ".include <bsd.kmod.mk>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:133
+msgid ""
+"Running `make` with this makefile will create a file [.filename]#skeleton."
+"ko# that can be loaded into the kernel by typing:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:137
+#, no-wrap
+msgid "# kldload -v ./skeleton.ko\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:140
+#, no-wrap
+msgid "Character Devices"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:143
+msgid ""
+"A character device driver is one that transfers data directly to and from a "
+"user process. This is the most common type of device driver and there are "
+"plenty of simple examples in the source tree."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:145
+msgid ""
+"This simple example pseudo-device remembers whatever values are written to "
+"it and can then echo them back when read."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:146
+#, no-wrap
+msgid "Example of a Sample Echo Pseudo-Device Driver for FreeBSD 10.X - 12.X"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:158
+#, no-wrap
+msgid ""
+"/*\n"
+" * Simple Echo pseudo-device KLD\n"
+" *\n"
+" * Murray Stokely\n"
+" * Søren (Xride) Straarup\n"
+" * Eitan Adler\n"
+" */\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:167
+#, no-wrap
+msgid ""
+"#include <sys/types.h>\n"
+"#include <sys/systm.h> /* uprintf */\n"
+"#include <sys/param.h> /* defines used in kernel.h */\n"
+"#include <sys/module.h>\n"
+"#include <sys/kernel.h> /* types used in module initialization */\n"
+"#include <sys/conf.h> /* cdevsw struct */\n"
+"#include <sys/uio.h> /* uio struct */\n"
+"#include <sys/malloc.h>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:169
+#, no-wrap
+msgid "#define BUFFERSIZE 255\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:175
+#, no-wrap
+msgid ""
+"/* Function prototypes */\n"
+"static d_open_t echo_open;\n"
+"static d_close_t echo_close;\n"
+"static d_read_t echo_read;\n"
+"static d_write_t echo_write;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:185
+#, no-wrap
+msgid ""
+"/* Character device entry points */\n"
+"static struct cdevsw echo_cdevsw = {\n"
+"\t.d_version = D_VERSION,\n"
+"\t.d_open = echo_open,\n"
+"\t.d_close = echo_close,\n"
+"\t.d_read = echo_read,\n"
+"\t.d_write = echo_write,\n"
+"\t.d_name = \"echo\",\n"
+"};\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:190
+#, no-wrap
+msgid ""
+"struct s_echo {\n"
+"\tchar msg[BUFFERSIZE + 1];\n"
+"\tint len;\n"
+"};\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:194
+#, no-wrap
+msgid ""
+"/* vars */\n"
+"static struct cdev *echo_dev;\n"
+"static struct s_echo *echomsg;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:197
+#, no-wrap
+msgid ""
+"MALLOC_DECLARE(M_ECHOBUF);\n"
+"MALLOC_DEFINE(M_ECHOBUF, \"echobuffer\", \"buffer for echo module\");\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:206
+#, no-wrap
+msgid ""
+"/*\n"
+" * This function is called by the kld[un]load(2) system calls to\n"
+" * determine what actions to take when a module is loaded or unloaded.\n"
+" */\n"
+"static int\n"
+"echo_loader(struct module *m __unused, int what, void *arg __unused)\n"
+"{\n"
+"\tint error = 0;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:219
+#, no-wrap
+msgid ""
+"\tswitch (what) {\n"
+"\tcase MOD_LOAD: /* kldload */\n"
+"\t\terror = make_dev_p(MAKEDEV_CHECKNAME | MAKEDEV_WAITOK,\n"
+"\t\t &echo_dev,\n"
+"\t\t &echo_cdevsw,\n"
+"\t\t 0,\n"
+"\t\t UID_ROOT,\n"
+"\t\t GID_WHEEL,\n"
+"\t\t 0600,\n"
+"\t\t \"echo\");\n"
+"\t\tif (error != 0)\n"
+"\t\t\tbreak;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:235
+#, no-wrap
+msgid ""
+"\t\techomsg = malloc(sizeof(*echomsg), M_ECHOBUF, M_WAITOK |\n"
+"\t\t M_ZERO);\n"
+"\t\tprintf(\"Echo device loaded.\\n\");\n"
+"\t\tbreak;\n"
+"\tcase MOD_UNLOAD:\n"
+"\t\tdestroy_dev(echo_dev);\n"
+"\t\tfree(echomsg, M_ECHOBUF);\n"
+"\t\tprintf(\"Echo device unloaded.\\n\");\n"
+"\t\tbreak;\n"
+"\tdefault:\n"
+"\t\terror = EOPNOTSUPP;\n"
+"\t\tbreak;\n"
+"\t}\n"
+"\treturn (error);\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:241
+#, no-wrap
+msgid ""
+"static int\n"
+"echo_open(struct cdev *dev __unused, int oflags __unused, int devtype __unused,\n"
+" struct thread *td __unused)\n"
+"{\n"
+"\tint error = 0;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:245
+#, no-wrap
+msgid ""
+"\tuprintf(\"Opened device \\\"echo\\\" successfully.\\n\");\n"
+"\treturn (error);\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:250
+#, no-wrap
+msgid ""
+"static int\n"
+"echo_close(struct cdev *dev __unused, int fflag __unused, int devtype __unused,\n"
+" struct thread *td __unused)\n"
+"{\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:254
+#, no-wrap
+msgid ""
+"\tuprintf(\"Closing device \\\"echo\\\".\\n\");\n"
+"\treturn (0);\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:265
+#, no-wrap
+msgid ""
+"/*\n"
+" * The read function just takes the buf that was saved via\n"
+" * echo_write() and returns it to userland for accessing.\n"
+" * uio(9)\n"
+" */\n"
+"static int\n"
+"echo_read(struct cdev *dev __unused, struct uio *uio, int ioflag __unused)\n"
+"{\n"
+"\tsize_t amt;\n"
+"\tint error;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:273
+#, no-wrap
+msgid ""
+"\t/*\n"
+"\t * How big is this read operation? Either as big as the user wants,\n"
+"\t * or as big as the remaining data. Note that the 'len' does not\n"
+"\t * include the trailing null character.\n"
+"\t */\n"
+"\tamt = MIN(uio->uio_resid, uio->uio_offset >= echomsg->len + 1 ? 0 :\n"
+"\t echomsg->len + 1 - uio->uio_offset);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:276
+#, no-wrap
+msgid ""
+"\tif ((error = uiomove(echomsg->msg, amt, uio)) != 0)\n"
+"\t\tuprintf(\"uiomove failed!\\n\");\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:279
+#, no-wrap
+msgid ""
+"\treturn (error);\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:289
+#, no-wrap
+msgid ""
+"/*\n"
+" * echo_write takes in a character string and saves it\n"
+" * to buf for later accessing.\n"
+" */\n"
+"static int\n"
+"echo_write(struct cdev *dev __unused, struct uio *uio, int ioflag __unused)\n"
+"{\n"
+"\tsize_t amt;\n"
+"\tint error;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:296
+#, no-wrap
+msgid ""
+"\t/*\n"
+"\t * We either write from the beginning or are appending -- do\n"
+"\t * not allow random access.\n"
+"\t */\n"
+"\tif (uio->uio_offset != 0 && (uio->uio_offset != echomsg->len))\n"
+"\t\treturn (EINVAL);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:300
+#, no-wrap
+msgid ""
+"\t/* This is a new message, reset length */\n"
+"\tif (uio->uio_offset == 0)\n"
+"\t\techomsg->len = 0;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:303
+#, no-wrap
+msgid ""
+"\t/* Copy the string in from user memory to kernel memory */\n"
+"\tamt = MIN(uio->uio_resid, (BUFFERSIZE - echomsg->len));\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:305
+#, no-wrap
+msgid "\terror = uiomove(echomsg->msg + uio->uio_offset, amt, uio);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:309
+#, no-wrap
+msgid ""
+"\t/* Now we need to null terminate and record the length */\n"
+"\techomsg->len = uio->uio_offset;\n"
+"\techomsg->msg[echomsg->len] = 0;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:314
+#, no-wrap
+msgid ""
+"\tif (error != 0)\n"
+"\t\tuprintf(\"Write failed: bad address!\\n\");\n"
+"\treturn (error);\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:316
+#, no-wrap
+msgid "DEV_MODULE(echo, echo_loader, NULL);\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:320
+msgid "With this driver loaded try:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:328
+#, no-wrap
+msgid ""
+"# echo -n \"Test Data\" > /dev/echo\n"
+"# cat /dev/echo\n"
+"Opened device \"echo\" successfully.\n"
+"Test Data\n"
+"Closing device \"echo\".\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:331
+msgid "Real hardware devices are described in the next chapter."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:333
+#, no-wrap
+msgid "Block Devices (Are Gone)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:336
+msgid ""
+"Other UNIX(R) systems may support a second type of disk device known as "
+"block devices. Block devices are disk devices for which the kernel provides "
+"caching. This caching makes block-devices almost unusable, or at least "
+"dangerously unreliable. The caching will reorder the sequence of write "
+"operations, depriving the application of the ability to know the exact disk "
+"contents at any one instant in time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:338
+msgid ""
+"This makes predictable and reliable crash recovery of on-disk data "
+"structures (filesystems, databases, etc.) impossible. Since writes may be "
+"delayed, there is no way the kernel can report to the application which "
+"particular write operation encountered a write error, this further compounds "
+"the consistency problem."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:340
+msgid ""
+"For this reason, no serious applications rely on block devices, and in fact, "
+"almost all applications which access disks directly take great pains to "
+"specify that character (or \"raw\") devices should always be used. As the "
+"implementation of the aliasing of each disk (partition) to two devices with "
+"different semantics significantly complicated the relevant kernel code, "
+"FreeBSD dropped support for cached disk devices as part of the modernization "
+"of the disk I/O infrastructure."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:342
+#, no-wrap
+msgid "Network Drivers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:345
+msgid ""
+"Drivers for network devices do not use device nodes in order to be accessed. "
+"Their selection is based on other decisions made inside the kernel and "
+"instead of calling open(), use of a network device is generally introduced "
+"by using the system call socket(2)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/driverbasics/_index.adoc:346
+msgid ""
+"For more information see ifnet(9), the source of the loopback device, and "
+"Bill Paul's network drivers."
+msgstr ""
diff --git a/documentation/content/en/books/arch-handbook/isa/_index.adoc b/documentation/content/en/books/arch-handbook/isa/_index.adoc
index b2913774ef..520aec94e1 100644
--- a/documentation/content/en/books/arch-handbook/isa/_index.adoc
+++ b/documentation/content/en/books/arch-handbook/isa/_index.adoc
@@ -6,7 +6,7 @@ description: ISA Device Drivers
tags: ["ISA", "device drivers", "FreeBSD"]
showBookMenu: true
weight: 12
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/isa/"
---
[[isa-driver]]
@@ -364,10 +364,9 @@ highaddr = BUS_SPACE_MAXADDR
** _maxsize_ - the maximal size of memory (in bytes) that may be allocated through this tag. In case it is difficult to estimate or could be arbitrarily big, the value for ISA devices would be `BUS_SPACE_MAXSIZE_24BIT`.
** _nsegments_ - maximal number of scatter-gather segments supported by the device. If unrestricted then the value `BUS_SPACE_UNRESTRICTED` should be used. This value is recommended for the parent tags, the actual restrictions would then be specified for the descendant tags. Tags with nsegments equal to `BUS_SPACE_UNRESTRICTED` may not be used to actually load maps, they may be used only as parent tags. The practical limit for nsegments seems to be about 250-300, higher values will cause kernel stack overflow (the hardware can not normally support that many scatter-gather buffers anyway).
** _maxsegsz_ - maximal size of a scatter-gather segment supported by the device. The maximal value for ISA device would be `BUS_SPACE_MAXSIZE_24BIT`.
-** _flags_ - a bitmap of flags. The only interesting flags are:
+** _flags_ - a bitmap of flags. The only interesting flag is:
*** _BUS_DMA_ALLOCNOW_ - requests to allocate all the potentially needed bounce pages when creating the tag.
-*** _BUS_DMA_ISA_ - mysterious flag used only on Alpha machines. It is not defined for the i386 machines. Probably it should be used by all the ISA drivers for Alpha machines but it looks like there are no such drivers yet.
** _dmat_ - pointer to the storage for the new tag to be returned.
diff --git a/documentation/content/en/books/arch-handbook/isa/_index.po b/documentation/content/en/books/arch-handbook/isa/_index.po
new file mode 100644
index 0000000000..44349fdc20
--- /dev/null
+++ b/documentation/content/en/books/arch-handbook/isa/_index.po
@@ -0,0 +1,3063 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-09-03 21:28-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:13
+#, no-wrap
+msgid "ISA Device Drivers"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1
+#, no-wrap
+msgid "Chapter 10. ISA Device Drivers"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:51
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:54
+msgid ""
+"This chapter introduces the issues relevant to writing a driver for an ISA "
+"device. The pseudo-code presented here is rather detailed and reminiscent of "
+"the real code but is still only pseudo-code. It avoids the details "
+"irrelevant to the subject of the discussion. The real-life examples can be "
+"found in the source code of real drivers. In particular the drivers `ep` and "
+"`aha` are good sources of information."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:56
+#, no-wrap
+msgid "Basic Information"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:59
+msgid "A typical ISA driver would need the following include files:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:67
+#, no-wrap
+msgid ""
+"#include <sys/module.h>\n"
+"#include <sys/bus.h>\n"
+"#include <machine/bus.h>\n"
+"#include <machine/resource.h>\n"
+"#include <sys/rman.h>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:70
+#, no-wrap
+msgid ""
+"#include <isa/isavar.h>\n"
+"#include <isa/pnpvar.h>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:73
+msgid "They describe the things specific to the ISA and generic bus subsystem."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:75
+msgid ""
+"The bus subsystem is implemented in an object-oriented fashion, its main "
+"structures are accessed by associated method functions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:77
+msgid ""
+"The list of bus methods implemented by an ISA driver is like one for any "
+"other bus. For a hypothetical driver named \"xxx\" they would be:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:79
+msgid ""
+"`static void xxx_isa_identify (driver_t *, device_t);` Normally used for bus "
+"drivers, not device drivers. But for ISA devices this method may have "
+"special use: if the device provides some device-specific (non-PnP) way to "
+"auto-detect devices this routine may implement it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:80
+msgid ""
+"`static int xxx_isa_probe (device_t dev);` Probe for a device at a known (or "
+"PnP) location. This routine can also accommodate device-specific auto-"
+"detection of parameters for partially configured devices."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:81
+msgid ""
+"`static int xxx_isa_attach (device_t dev);` Attach and initialize device."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:82
+msgid ""
+"`static int xxx_isa_detach (device_t dev);` Detach device before unloading "
+"the driver module."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:83
+msgid ""
+"`static int xxx_isa_shutdown (device_t dev);` Execute shutdown of the device "
+"before system shutdown."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:84
+msgid ""
+"`static int xxx_isa_suspend (device_t dev);` Suspend the device before the "
+"system goes to the power-save state. May also abort transition to the power-"
+"save state."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:85
+msgid ""
+"`static int xxx_isa_resume (device_t dev);` Resume the device activity after "
+"return from power-save state."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:87
+msgid ""
+"`xxx_isa_probe()` and `xxx_isa_attach()` are mandatory, the rest of the "
+"routines are optional, depending on the device's needs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:89
+msgid ""
+"The driver is linked to the system with the following set of descriptions."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:103
+#, no-wrap
+msgid ""
+" /* table of supported bus methods */\n"
+" static device_method_t xxx_isa_methods[] = {\n"
+" /* list all the bus method functions supported by the driver */\n"
+" /* omit the unsupported methods */\n"
+" DEVMETHOD(device_identify, xxx_isa_identify),\n"
+" DEVMETHOD(device_probe, xxx_isa_probe),\n"
+" DEVMETHOD(device_attach, xxx_isa_attach),\n"
+" DEVMETHOD(device_detach, xxx_isa_detach),\n"
+" DEVMETHOD(device_shutdown, xxx_isa_shutdown),\n"
+" DEVMETHOD(device_suspend, xxx_isa_suspend),\n"
+" DEVMETHOD(device_resume, xxx_isa_resume),\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:106
+#, no-wrap
+msgid ""
+"\tDEVMETHOD_END\n"
+" };\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:112
+#, no-wrap
+msgid ""
+" static driver_t xxx_isa_driver = {\n"
+" \"xxx\",\n"
+" xxx_isa_methods,\n"
+" sizeof(struct xxx_softc),\n"
+" };\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:114
+#, no-wrap
+msgid " static devclass_t xxx_devclass;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:117
+#, no-wrap
+msgid ""
+" DRIVER_MODULE(xxx, isa, xxx_isa_driver, xxx_devclass,\n"
+" load_function, load_argument);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:120
+msgid ""
+"Here struct `xxx_softc` is a device-specific structure that contains private "
+"driver data and descriptors for the driver's resources. The bus code "
+"automatically allocates one softc descriptor per device as needed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:122
+msgid ""
+"If the driver is implemented as a loadable module then `load_function()` is "
+"called to do driver-specific initialization or clean-up when the driver is "
+"loaded or unloaded and load_argument is passed as one of its arguments. If "
+"the driver does not support dynamic loading (in other words it must always "
+"be linked into the kernel) then these values should be set to 0 and the last "
+"definition would look like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:127
+#, no-wrap
+msgid ""
+" DRIVER_MODULE(xxx, isa, xxx_isa_driver,\n"
+" xxx_devclass, 0, 0);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:130
+msgid ""
+"If the driver is for a device which supports PnP then a table of supported "
+"PnP IDs must be defined. The table consists of a list of PnP IDs supported "
+"by this driver and human-readable descriptions of the hardware types and "
+"models having these IDs. It looks like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:139
+#, no-wrap
+msgid ""
+" static struct isa_pnp_id xxx_pnp_ids[] = {\n"
+" /* a line for each supported PnP ID */\n"
+" { 0x12345678, \"Our device model 1234A\" },\n"
+" { 0x12345679, \"Our device model 1234B\" },\n"
+" { 0, NULL }, /* end of table */\n"
+" };\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:142
+msgid ""
+"If the driver does not support PnP devices it still needs an empty PnP ID "
+"table, like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:148
+#, no-wrap
+msgid ""
+" static struct isa_pnp_id xxx_pnp_ids[] = {\n"
+" { 0, NULL }, /* end of table */\n"
+" };\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:151
+#, no-wrap
+msgid "`device_t` Pointer"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:154
+msgid ""
+"`device_t` is the pointer type for the device structure. Here we consider "
+"only the methods interesting from the device driver writer's standpoint. The "
+"methods to manipulate values in the device structure are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:156
+msgid "`device_t device_get_parent(dev)` Get the parent bus of a device."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:157
+msgid "`driver_t device_get_driver(dev)` Get pointer to its driver structure."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:158
+msgid ""
+"`char *device_get_name(dev)` Get the driver name, such as `\"xxx\"` for our "
+"example."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:159
+msgid ""
+"`int device_get_unit(dev)` Get the unit number (units are numbered from 0 "
+"for the devices associated with each driver)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:160
+msgid ""
+"`char *device_get_nameunit(dev)` Get the device name including the unit "
+"number, such as \"xxx0\", \"xxx1\" and so on."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:161
+msgid ""
+"`char *device_get_desc(dev)` Get the device description. Normally it "
+"describes the exact model of device in human-readable form."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:162
+msgid ""
+"`device_set_desc(dev, desc)` Set the description. This makes the device "
+"description point to the string desc which may not be deallocated or changed "
+"after that."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:163
+msgid ""
+"`device_set_desc_copy(dev, desc)` Set the description. The description is "
+"copied into an internal dynamically allocated buffer, so the string desc may "
+"be changed afterwards without adverse effects."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:164
+msgid ""
+"`void *device_get_softc(dev)` Get pointer to the device descriptor (struct "
+"`xxx_softc`) associated with this device."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:165
+msgid ""
+"`u_int32_t device_get_flags(dev)` Get the flags specified for the device in "
+"the configuration file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:167
+msgid ""
+"A convenience function `device_printf(dev, fmt, ...)` may be used to print "
+"the messages from the device driver. It automatically prepends the unitname "
+"and colon to the message."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:169
+msgid ""
+"The device_t methods are implemented in the file [.filename]#kern/bus_subr."
+"c#."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:171
+#, no-wrap
+msgid "Configuration File and the Order of Identifying and Probing During Auto-Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:174
+msgid "The ISA devices are described in the kernel configuration file like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:179
+#, no-wrap
+msgid ""
+"device xxx0 at isa? port 0x300 irq 10 drq 5\n"
+" iomem 0xd0000 flags 0x1 sensitive\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:182
+msgid ""
+"The values of port, IRQ and so on are converted to the resource values "
+"associated with the device. They are optional, depending on the device's "
+"needs and abilities for auto-configuration. For example, some devices do not "
+"need DRQ at all and some allow the driver to read the IRQ setting from the "
+"device configuration ports. If a machine has multiple ISA buses the exact "
+"bus may be specified in the configuration line, like `isa0` or `isa1`, "
+"otherwise the device would be searched for on all the ISA buses."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:184
+msgid ""
+"`sensitive` is a resource requesting that this device must be probed before "
+"all non-sensitive devices. It is supported but does not seem to be used in "
+"any current driver."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:186
+msgid ""
+"For legacy ISA devices in many cases the drivers are still able to detect "
+"the configuration parameters. But each device to be configured in the system "
+"must have a config line. If two devices of some type are installed in the "
+"system but there is only one configuration line for the corresponding "
+"driver, ie:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:189
+#, no-wrap
+msgid "device xxx0 at isa?\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:191
+#, no-wrap
+msgid " then only one device will be configured.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:193
+msgid ""
+"But for the devices supporting automatic identification by the means of Plug-"
+"n-Play or some proprietary protocol one configuration line is enough to "
+"configure all the devices in the system, like the one above or just simply:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:197
+#, no-wrap
+msgid "device xxx at isa?\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:200
+msgid ""
+"If a driver supports both auto-identified and legacy devices and both kinds "
+"are installed at once in one machine then it is enough to describe in the "
+"config file the legacy devices only. The auto-identified devices will be "
+"added automatically."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:202
+msgid "When an ISA bus is auto-configured the events happen as follows:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:204
+msgid ""
+"All the drivers' identify routines (including the PnP identify routine which "
+"identifies all the PnP devices) are called in random order. As they identify "
+"the devices they add them to the list on the ISA bus. Normally the drivers' "
+"identify routines associate their drivers with the new devices. The PnP "
+"identify routine does not know about the other drivers yet so it does not "
+"associate any with the new devices it adds."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:206
+msgid ""
+"The PnP devices are put to sleep using the PnP protocol to prevent them from "
+"being probed as legacy devices."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:208
+msgid ""
+"The probe routines of non-PnP devices marked as `sensitive` are called. If "
+"probe for a device went successfully, the attach routine is called for it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:210
+msgid ""
+"The probe and attach routines of all non-PNP devices are called likewise."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:212
+msgid ""
+"The PnP devices are brought back from the sleep state and assigned the "
+"resources they request: I/O and memory address ranges, IRQs and DRQs, all of "
+"them not conflicting with the attached legacy devices."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:214
+msgid ""
+"Then for each PnP device the probe routines of all the present ISA drivers "
+"are called. The first one that claims the device gets attached. It is "
+"possible that multiple drivers would claim the device with different "
+"priority; in this case, the highest-priority driver wins. The probe routines "
+"must call `ISA_PNP_PROBE()` to compare the actual PnP ID with the list of "
+"the IDs supported by the driver and if the ID is not in the table return "
+"failure. That means that absolutely every driver, even the ones not "
+"supporting any PnP devices must call `ISA_PNP_PROBE()`, at least with an "
+"empty PnP ID table to return failure on unknown PnP devices."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:216
+msgid ""
+"The probe routine returns a positive value (the error code) on error, zero "
+"or negative value on success."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:218
+msgid ""
+"The negative return values are used when a PnP device supports multiple "
+"interfaces. For example, an older compatibility interface and a newer "
+"advanced interface which are supported by different drivers. Then both "
+"drivers would detect the device. The driver which returns a higher value in "
+"the probe routine takes precedence (in other words, the driver returning 0 "
+"has highest precedence, returning -1 is next, returning -2 is after it and "
+"so on). In result the devices which support only the old interface will be "
+"handled by the old driver (which should return -1 from the probe routine) "
+"while the devices supporting the new interface as well will be handled by "
+"the new driver (which should return 0 from the probe routine). If multiple "
+"drivers return the same value then the one called first wins. So if a driver "
+"returns value 0 it may be sure that it won the priority arbitration."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:220
+msgid ""
+"The device-specific identify routines can also assign not a driver but a "
+"class of drivers to the device. Then all the drivers in the class are probed "
+"for this device, like the case with PnP. This feature is not implemented in "
+"any existing driver and is not considered further in this document."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:222
+msgid ""
+"As the PnP devices are disabled when probing the legacy devices they will "
+"not be attached twice (once as legacy and once as PnP). But in case of "
+"device-dependent identify routines it is the responsibility of the driver to "
+"make sure that the same device will not be attached by the driver twice: "
+"once as legacy user-configured and once as auto-identified."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:224
+msgid ""
+"Another practical consequence for the auto-identified devices (both PnP and "
+"device-specific) is that the flags can not be passed to them from the kernel "
+"configuration file. So they must either not use the flags at all or use the "
+"flags from the device unit 0 for all the auto-identified devices or use the "
+"sysctl interface instead of flags."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:226
+msgid ""
+"Other unusual configurations may be accommodated by accessing the "
+"configuration resources directly with functions of families "
+"`resource_query_*()` and `resource_*_value()`. Their implementations are "
+"located in [.filename]#kern/subr_bus.c#. The old IDE disk driver [."
+"filename]#i386/isa/wd.c# contains examples of such use. But the standard "
+"means of configuration must always be preferred. Leave parsing the "
+"configuration resources to the bus configuration code."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:228
+#, no-wrap
+msgid "Resources"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:231
+msgid ""
+"The information that a user enters into the kernel configuration file is "
+"processed and passed to the kernel as configuration resources. This "
+"information is parsed by the bus configuration code and transformed into a "
+"value of structure device_t and the bus resources associated with it. The "
+"drivers may access the configuration resources directly using functions "
+"`resource_*` for more complex cases of configuration. However, generally "
+"this is neither needed nor recommended, so this issue is not discussed "
+"further here."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:233
+msgid ""
+"The bus resources are associated with each device. They are identified by "
+"type and number within the type. For the ISA bus the following types are "
+"defined:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:235
+msgid "_SYS_RES_IRQ_ - interrupt number"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:236
+msgid "_SYS_RES_DRQ_ - ISA DMA channel number"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:237
+msgid ""
+"_SYS_RES_MEMORY_ - range of device memory mapped into the system memory space"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:238
+msgid "_SYS_RES_IOPORT_ - range of device I/O registers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:240
+msgid ""
+"The enumeration within types starts from 0, so if a device has two memory "
+"regions it would have resources of type `SYS_RES_MEMORY` numbered 0 and 1. "
+"The resource type has nothing to do with the C language type, all the "
+"resource values have the C language type `unsigned long` and must be cast as "
+"necessary. The resource numbers do not have to be contiguous, although for "
+"ISA they normally would be. The permitted resource numbers for ISA devices "
+"are:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:247
+#, no-wrap
+msgid ""
+" IRQ: 0-1\n"
+" DRQ: 0-1\n"
+" MEMORY: 0-3\n"
+" IOPORT: 0-7\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:250
+msgid ""
+"All the resources are represented as ranges, with a start value and count. "
+"For IRQ and DRQ resources the count would normally be equal to 1. The values "
+"for memory refer to the physical addresses."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:252
+msgid "Three types of activities can be performed on resources:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:254
+msgid "set/get"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:255
+msgid "allocate/release"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:256
+msgid "activate/deactivate"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:258
+msgid ""
+"Setting sets the range used by the resource. Allocation reserves the "
+"requested range that no other driver would be able to reserve it (and "
+"checking that no other driver reserved this range already). Activation makes "
+"the resource accessible to the driver by doing whatever is necessary for "
+"that (for example, for memory it would be mapping into the kernel virtual "
+"address space)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:260
+msgid "The functions to manipulate resources are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:262
+msgid ""
+"`int bus_set_resource(device_t dev, int type, int rid, u_long start, u_long "
+"count)`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:264
+msgid ""
+"Set a range for a resource. Returns 0 if successful, error code otherwise. "
+"Normally, this function will return an error only if one of `type`, `rid`, "
+"`start` or `count` has a value that falls out of the permitted range."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:266
+msgid "dev - driver's device"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:267
+msgid "type - type of resource, SYS_RES_*"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:268
+msgid "rid - resource number (ID) within type"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:269
+msgid "start, count - resource range"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:271
+msgid ""
+"`int bus_get_resource(device_t dev, int type, int rid, u_long *startp, "
+"u_long *countp)`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:273
+msgid ""
+"Get the range of resource. Returns 0 if successful, error code if the "
+"resource is not defined yet."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:274
+msgid ""
+"`u_long bus_get_resource_start(device_t dev, int type, int rid) u_long "
+"bus_get_resource_count (device_t dev, int type, int rid)`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:276
+msgid ""
+"Convenience functions to get only the start or count. Return 0 in case of "
+"error, so if the resource start has 0 among the legitimate values it would "
+"be impossible to tell if the value is 0 or an error occurred. Luckily, no "
+"ISA resources for add-on drivers may have a start value equal to 0."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:277
+msgid "`void bus_delete_resource(device_t dev, int type, int rid)`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:279
+msgid "Delete a resource, make it undefined."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:280
+msgid ""
+"`struct resource * bus_alloc_resource(device_t dev, int type, int *rid, "
+"u_long start, u_long end, u_long count, u_int flags)`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:282
+msgid ""
+"Allocate a resource as a range of count values not allocated by anyone else, "
+"somewhere between start and end. Alas, alignment is not supported. If the "
+"resource was not set yet it is automatically created. The special values of "
+"start 0 and end ~0 (all ones) means that the fixed values previously set by "
+"`bus_set_resource()` must be used instead: start and count as themselves and "
+"end=(start+count), in this case if the resource was not defined before then "
+"an error is returned. Although rid is passed by reference it is not set "
+"anywhere by the resource allocation code of the ISA bus. (The other buses "
+"may use a different approach and modify it)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:284
+msgid "Flags are a bitmap, the flags interesting for the caller are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:286
+msgid ""
+"_RF_ACTIVE_ - causes the resource to be automatically activated after "
+"allocation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:287
+msgid ""
+"_RF_SHAREABLE_ - resource may be shared at the same time by multiple drivers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:288
+msgid ""
+"_RF_TIMESHARE_ - resource may be time-shared by multiple drivers, i.e., "
+"allocated at the same time by many but activated only by one at any given "
+"moment of time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:289
+msgid ""
+"Returns 0 on error. The allocated values may be obtained from the returned "
+"handle using methods `rhand_*()`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:290
+msgid ""
+"`int bus_release_resource(device_t dev, int type, int rid, struct resource "
+"*r)`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:291
+msgid ""
+"Release the resource, r is the handle returned by `bus_alloc_resource()`. "
+"Returns 0 on success, error code otherwise."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:292
+msgid ""
+"`int bus_activate_resource(device_t dev, int type, int rid, struct resource "
+"*r) int bus_deactivate_resource(device_t dev, int type, int rid, struct "
+"resource *r)`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:293
+msgid ""
+"Activate or deactivate resource. Return 0 on success, error code otherwise. "
+"If the resource is time-shared and currently activated by another driver "
+"then `EBUSY` is returned."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:294
+msgid ""
+"`int bus_setup_intr(device_t dev, struct resource *r, int flags, "
+"driver_intr_t *handler, void *arg, void **cookiep) int "
+"bus_teardown_intr(device_t dev, struct resource *r, void *cookie)`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:295
+msgid ""
+"Associate or de-associate the interrupt handler with a device. Return 0 on "
+"success, error code otherwise."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:296
+msgid "r - the activated resource handler describing the IRQ"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:298
+msgid "flags - the interrupt priority level, one of:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:300
+msgid ""
+"`INTR_TYPE_TTY` - terminals and other likewise character-type devices. To "
+"mask them use `spltty()`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:301
+msgid ""
+"`(INTR_TYPE_TTY | INTR_TYPE_FAST)` - terminal type devices with small input "
+"buffer, critical to the data loss on input (such as the old-fashioned serial "
+"ports). To mask them use `spltty()`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:302
+msgid ""
+"`INTR_TYPE_BIO` - block-type devices, except those on the CAM controllers. "
+"To mask them use `splbio()`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:303
+msgid ""
+"`INTR_TYPE_CAM` - CAM (Common Access Method) bus controllers. To mask them "
+"use `splcam()`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:304
+msgid ""
+"`INTR_TYPE_NET` - network interface controllers. To mask them use `splimp()`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:305
+msgid ""
+"`INTR_TYPE_MISC` - miscellaneous devices. There is no other way to mask them "
+"than by `splhigh()` which masks all interrupts."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:307
+msgid ""
+"When an interrupt handler executes all the other interrupts matching its "
+"priority level will be masked. The only exception is the MISC level for "
+"which no other interrupts are masked and which is not masked by any other "
+"interrupt."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:309
+msgid ""
+"_handler_ - pointer to the handler function, the type driver_intr_t is "
+"defined as `void driver_intr_t(void *)`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:310
+msgid ""
+"_arg_ - the argument passed to the handler to identify this particular "
+"device. It is cast from void* to any real type by the handler. The old "
+"convention for the ISA interrupt handlers was to use the unit number as "
+"argument, the new (recommended) convention is using a pointer to the device "
+"softc structure."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:311
+msgid ""
+"_cookie[p]_ - the value received from `setup()` is used to identify the "
+"handler when passed to `teardown()`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:313
+msgid ""
+"A number of methods are defined to operate on the resource handlers (struct "
+"resource *). Those of interest to the device driver writers are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:315
+msgid ""
+"`u_long rman_get_start(r) u_long rman_get_end(r)` Get the start and end of "
+"allocated resource range."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:316
+msgid ""
+"`void *rman_get_virtual(r)` Get the virtual address of activated memory "
+"resource."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:318
+#, no-wrap
+msgid "Bus Memory Mapping"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:321
+msgid ""
+"In many cases data is exchanged between the driver and the device through "
+"the memory. Two variants are possible:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:323
+msgid "(a) memory is located on the device card"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:325
+msgid "(b) memory is the main memory of the computer"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:327
+msgid ""
+"In case (a) the driver always copies the data back and forth between the on-"
+"card memory and the main memory as necessary. To map the on-card memory into "
+"the kernel virtual address space the physical address and length of the on-"
+"card memory must be defined as a `SYS_RES_MEMORY` resource. That resource "
+"can then be allocated and activated, and its virtual address obtained using "
+"`rman_get_virtual()`. The older drivers used the function `pmap_mapdev()` "
+"for this purpose, which should not be used directly any more. Now it is one "
+"of the internal steps of resource activation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:329
+msgid ""
+"Most of the ISA cards will have their memory configured for physical "
+"location somewhere in range 640KB-1MB. Some of the ISA cards require larger "
+"memory ranges which should be placed somewhere under 16MB (because of the 24-"
+"bit address limitation on the ISA bus). In that case if the machine has more "
+"memory than the start address of the device memory (in other words, they "
+"overlap) a memory hole must be configured at the address range used by "
+"devices. Many BIOSes allow configuration of a memory hole of 1MB starting at "
+"14MB or 15MB. FreeBSD can handle the memory holes properly if the BIOS "
+"reports them properly (this feature may be broken on old BIOSes)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:331
+msgid ""
+"In case (b) just the address of the data is sent to the device, and the "
+"device uses DMA to actually access the data in the main memory. Two "
+"limitations are present: First, ISA cards can only access memory below 16MB. "
+"Second, the contiguous pages in virtual address space may not be contiguous "
+"in physical address space, so the device may have to do scatter/gather "
+"operations. The bus subsystem provides ready solutions for some of these "
+"problems, the rest has to be done by the drivers themselves."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:333
+msgid ""
+"Two structures are used for DMA memory allocation, `bus_dma_tag_t` and "
+"`bus_dmamap_t`. Tag describes the properties required for the DMA memory. "
+"Map represents a memory block allocated according to these properties. "
+"Multiple maps may be associated with the same tag."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:335
+msgid ""
+"Tags are organized into a tree-like hierarchy with inheritance of the "
+"properties. A child tag inherits all the requirements of its parent tag, and "
+"may make them more strict but never more loose."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:337
+msgid ""
+"Normally one top-level tag (with no parent) is created for each device unit. "
+"If multiple memory areas with different requirements are needed for each "
+"device then a tag for each of them may be created as a child of the parent "
+"tag."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:339
+msgid "The tags can be used to create a map in two ways."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:341
+msgid ""
+"First, a chunk of contiguous memory conformant with the tag requirements may "
+"be allocated (and later may be freed). This is normally used to allocate "
+"relatively long-living areas of memory for communication with the device. "
+"Loading of such memory into a map is trivial: it is always considered as one "
+"chunk in the appropriate physical memory range."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:343
+msgid ""
+"Second, an arbitrary area of virtual memory may be loaded into a map. Each "
+"page of this memory will be checked for conformance to the map requirement. "
+"If it conforms then it is left at its original location. If it is not then a "
+"fresh conformant \"bounce page\" is allocated and used as intermediate "
+"storage. When writing the data from the non-conformant original pages they "
+"will be copied to their bounce pages first and then transferred from the "
+"bounce pages to the device. When reading the data would go from the device "
+"to the bounce pages and then copied to their non-conformant original pages. "
+"The process of copying between the original and bounce pages is called "
+"synchronization. This is normally used on a per-transfer basis: buffer for "
+"each transfer would be loaded, transfer done and buffer unloaded."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:345
+msgid "The functions working on the DMA memory are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:347
+msgid ""
+"`int bus_dma_tag_create(bus_dma_tag_t parent, bus_size_t alignment, "
+"bus_size_t boundary, bus_addr_t lowaddr, bus_addr_t highaddr, "
+"bus_dma_filter_t *filter, void *filterarg, bus_size_t maxsize, int "
+"nsegments, bus_size_t maxsegsz, int flags, bus_dma_tag_t *dmat)`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:349
+msgid "Create a new tag. Returns 0 on success, the error code otherwise."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:351
+msgid "_parent_ - parent tag, or NULL to create a top-level tag."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:352
+msgid ""
+"_alignment_ - required physical alignment of the memory area to be allocated "
+"for this tag. Use value 1 for \"no specific alignment\". Applies only to the "
+"future `bus_dmamem_alloc()` but not `bus_dmamap_create()` calls."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:353
+msgid ""
+"_boundary_ - physical address boundary that must not be crossed when "
+"allocating the memory. Use value 0 for \"no boundary\". Applies only to the "
+"future `bus_dmamem_alloc()` but not `bus_dmamap_create()` calls. Must be "
+"power of 2. If the memory is planned to be used in non-cascaded DMA mode (i."
+"e., the DMA addresses will be supplied not by the device itself but by the "
+"ISA DMA controller) then the boundary must be no larger than 64KB (64*1024) "
+"due to the limitations of the DMA hardware."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:354
+msgid ""
+"_lowaddr, highaddr_ - the names are slightly misleading; these values are "
+"used to limit the permitted range of physical addresses used to allocate the "
+"memory. The exact meaning varies depending on the planned future use:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:356
+msgid ""
+"For `bus_dmamem_alloc()` all the addresses from 0 to lowaddr-1 are "
+"considered permitted, the higher ones are forbidden."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:357
+msgid ""
+"For `bus_dmamap_create()` all the addresses outside the inclusive range "
+"[lowaddr; highaddr] are considered accessible. The addresses of pages inside "
+"the range are passed to the filter function which decides if they are "
+"accessible. If no filter function is supplied then all the range is "
+"considered unaccessible."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:358
+msgid "For the ISA devices the normal values (with no filter function) are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:360
+msgid "lowaddr = BUS_SPACE_MAXADDR_24BIT"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:362
+msgid "highaddr = BUS_SPACE_MAXADDR"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:364
+msgid ""
+"_filter, filterarg_ - the filter function and its argument. If NULL is "
+"passed for filter then the whole range [lowaddr, highaddr] is considered "
+"unaccessible when doing `bus_dmamap_create()`. Otherwise the physical "
+"address of each attempted page in range [lowaddr; highaddr] is passed to the "
+"filter function which decides if it is accessible. The prototype of the "
+"filter function is: `int filterfunc(void *arg, bus_addr_t paddr)`. It must "
+"return 0 if the page is accessible, non-zero otherwise."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:365
+msgid ""
+"_maxsize_ - the maximal size of memory (in bytes) that may be allocated "
+"through this tag. In case it is difficult to estimate or could be "
+"arbitrarily big, the value for ISA devices would be "
+"`BUS_SPACE_MAXSIZE_24BIT`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:366
+msgid ""
+"_nsegments_ - maximal number of scatter-gather segments supported by the "
+"device. If unrestricted then the value `BUS_SPACE_UNRESTRICTED` should be "
+"used. This value is recommended for the parent tags, the actual restrictions "
+"would then be specified for the descendant tags. Tags with nsegments equal "
+"to `BUS_SPACE_UNRESTRICTED` may not be used to actually load maps, they may "
+"be used only as parent tags. The practical limit for nsegments seems to be "
+"about 250-300, higher values will cause kernel stack overflow (the hardware "
+"can not normally support that many scatter-gather buffers anyway)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:367
+msgid ""
+"_maxsegsz_ - maximal size of a scatter-gather segment supported by the "
+"device. The maximal value for ISA device would be `BUS_SPACE_MAXSIZE_24BIT`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:368
+msgid "_flags_ - a bitmap of flags. The only interesting flag is:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:370
+msgid ""
+"_BUS_DMA_ALLOCNOW_ - requests to allocate all the potentially needed bounce "
+"pages when creating the tag."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:372
+msgid "_dmat_ - pointer to the storage for the new tag to be returned."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:374
+msgid "`int bus_dma_tag_destroy(bus_dma_tag_t dmat)`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:376
+msgid "Destroy a tag. Returns 0 on success, the error code otherwise."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:378
+msgid "dmat - the tag to be destroyed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:379
+msgid ""
+"`int bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags, "
+"bus_dmamap_t *mapp)`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:381
+msgid ""
+"Allocate an area of contiguous memory described by the tag. The size of "
+"memory to be allocated is tag's maxsize. Returns 0 on success, the error "
+"code otherwise. The result still has to be loaded by `bus_dmamap_load()` "
+"before being used to get the physical address of the memory."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:383
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:395
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:403
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:418
+msgid "_dmat_ - the tag"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:384
+msgid ""
+"_vaddr_ - pointer to the storage for the kernel virtual address of the "
+"allocated area to be returned."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:385
+msgid "flags - a bitmap of flags. The only interesting flag is:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:387
+msgid ""
+"_BUS_DMA_NOWAIT_ - if the memory is not immediately available return the "
+"error. If this flag is not set then the routine is allowed to sleep until "
+"the memory becomes available."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:389
+msgid "_mapp_ - pointer to the storage for the new map to be returned."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:391
+msgid ""
+"`void bus_dmamem_free(bus_dma_tag_t dmat, void *vaddr, bus_dmamap_t map)`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:393
+msgid ""
+"Free the memory allocated by `bus_dmamem_alloc()`. At present, freeing of "
+"the memory allocated with ISA restrictions is not implemented. Due to this "
+"the recommended model of use is to keep and re-use the allocated areas for "
+"as long as possible. Do not lightly free some area and then shortly allocate "
+"it again. That does not mean that `bus_dmamem_free()` should not be used at "
+"all: hopefully it will be properly implemented soon."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:396
+msgid "_vaddr_ - the kernel virtual address of the memory"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:397
+msgid "_map_ - the map of the memory (as returned from `bus_dmamem_alloc()`)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:399
+msgid ""
+"`int bus_dmamap_create(bus_dma_tag_t dmat, int flags, bus_dmamap_t *mapp)`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:401
+msgid ""
+"Create a map for the tag, to be used in `bus_dmamap_load()` later. Returns 0 "
+"on success, the error code otherwise."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:404
+msgid ""
+"_flags_ - theoretically, a bit map of flags. But no flags are defined yet, "
+"so at present it will be always 0."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:405
+msgid "_mapp_ - pointer to the storage for the new map to be returned"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:407
+msgid "`int bus_dmamap_destroy(bus_dma_tag_t dmat, bus_dmamap_t map)`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:409
+msgid "Destroy a map. Returns 0 on success, the error code otherwise."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:411
+msgid "dmat - the tag to which the map is associated"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:412
+msgid "map - the map to be destroyed"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:414
+msgid ""
+"`int bus_dmamap_load(bus_dma_tag_t dmat, bus_dmamap_t map, void *buf, "
+"bus_size_t buflen, bus_dmamap_callback_t *callback, void *callback_arg, int "
+"flags)`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:416
+msgid ""
+"Load a buffer into the map (the map must be previously created by "
+"`bus_dmamap_create()` or `bus_dmamem_alloc()`). All the pages of the buffer "
+"are checked for conformance to the tag requirements and for those not "
+"conformant the bounce pages are allocated. An array of physical segment "
+"descriptors is built and passed to the callback routine. This callback "
+"routine is then expected to handle it in some way. The number of bounce "
+"buffers in the system is limited, so if the bounce buffers are needed but "
+"not immediately available the request will be queued and the callback will "
+"be called when the bounce buffers will become available. Returns 0 if the "
+"callback was executed immediately or `EINPROGRESS` if the request was queued "
+"for future execution. In the latter case the synchronization with queued "
+"callback routine is the responsibility of the driver."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:419
+msgid "_map_ - the map"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:420
+msgid "_buf_ - kernel virtual address of the buffer"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:421
+msgid "_buflen_ - length of the buffer"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:422
+msgid "_callback_, `callback_arg` - the callback function and its argument"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:424
+msgid ""
+"The prototype of callback function is: `void callback(void *arg, "
+"bus_dma_segment_t *seg, int nseg, int error)`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:426
+msgid "_arg_ - the same as callback_arg passed to `bus_dmamap_load()`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:427
+msgid "_seg_ - array of the segment descriptors"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:428
+msgid "_nseg_ - number of descriptors in array"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:429
+msgid ""
+"_error_ - indication of the segment number overflow: if it is set to `EFBIG` "
+"then the buffer did not fit into the maximal number of segments permitted by "
+"the tag. In this case only the permitted number of descriptors will be in "
+"the array. Handling of this situation is up to the driver: depending on the "
+"desired semantics it can either consider this an error or split the buffer "
+"in two and handle the second part separately"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:431
+msgid "Each entry in the segments array contains the fields:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:433
+msgid "_ds_addr_ - physical bus address of the segment"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:434
+msgid "_ds_len_ - length of the segment"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:436
+msgid "`void bus_dmamap_unload(bus_dma_tag_t dmat, bus_dmamap_t map)`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:438
+msgid "unload the map."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:440
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:447
+msgid "_dmat_ - tag"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:441
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:448
+msgid "_map_ - loaded map"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:443
+msgid ""
+"`void bus_dmamap_sync (bus_dma_tag_t dmat, bus_dmamap_t map, "
+"bus_dmasync_op_t op)`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:445
+msgid ""
+"Synchronise a loaded buffer with its bounce pages before and after physical "
+"transfer to or from device. This is the function that does all the necessary "
+"copying of data between the original buffer and its mapped version. The "
+"buffers must be synchronized both before and after doing the transfer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:449
+msgid "_op_ - type of synchronization operation to perform:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:451
+msgid "`BUS_DMASYNC_PREREAD` - before reading from device into buffer"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:452
+msgid "`BUS_DMASYNC_POSTREAD` - after reading from device into buffer"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:453
+msgid "`BUS_DMASYNC_PREWRITE` - before writing the buffer to device"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:454
+msgid "`BUS_DMASYNC_POSTWRITE` - after writing the buffer to device"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:456
+msgid ""
+"As of now PREREAD and POSTWRITE are null operations but that may change in "
+"the future, so they must not be ignored in the driver. Synchronization is "
+"not needed for the memory obtained from `bus_dmamem_alloc()`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:458
+msgid ""
+"Before calling the callback function from `bus_dmamap_load()` the segment "
+"array is stored in the stack. And it gets pre-allocated for the maximal "
+"number of segments allowed by the tag. As a result of this the practical "
+"limit for the number of segments on i386 architecture is about 250-300 (the "
+"kernel stack is 4KB minus the size of the user structure, size of a segment "
+"array entry is 8 bytes, and some space must be left). Since the array is "
+"allocated based on the maximal number this value must not be set higher than "
+"really needed. Fortunately, for most of hardware the maximal supported "
+"number of segments is much lower. But if the driver wants to handle buffers "
+"with a very large number of scatter-gather segments it should do that in "
+"portions: load part of the buffer, transfer it to the device, load next part "
+"of the buffer, and so on."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:460
+msgid ""
+"Another practical consequence is that the number of segments may limit the "
+"size of the buffer. If all the pages in the buffer happen to be physically "
+"non-contiguous then the maximal supported buffer size for that fragmented "
+"case would be (nsegments * page_size). For example, if a maximal number of "
+"10 segments is supported then on i386 maximal guaranteed supported buffer "
+"size would be 40K. If a higher size is desired then special tricks should be "
+"used in the driver."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:462
+msgid ""
+"If the hardware does not support scatter-gather at all or the driver wants "
+"to support some buffer size even if it is heavily fragmented then the "
+"solution is to allocate a contiguous buffer in the driver and use it as "
+"intermediate storage if the original buffer does not fit."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:464
+msgid ""
+"Below are the typical call sequences when using a map depend on the use of "
+"the map. The characters -> are used to show the flow of time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:466
+msgid ""
+"For a buffer which stays practically fixed during all the time between "
+"attachment and detachment of a device:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:468
+msgid ""
+"bus_dmamem_alloc -> bus_dmamap_load -> ...use buffer... -> -> "
+"bus_dmamap_unload -> bus_dmamem_free"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:470
+msgid ""
+"For a buffer that changes frequently and is passed from outside the driver:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:479
+#, no-wrap
+msgid ""
+" bus_dmamap_create ->\n"
+" -> bus_dmamap_load -> bus_dmamap_sync(PRE...) -> do transfer ->\n"
+" -> bus_dmamap_sync(POST...) -> bus_dmamap_unload ->\n"
+" ...\n"
+" -> bus_dmamap_load -> bus_dmamap_sync(PRE...) -> do transfer ->\n"
+" -> bus_dmamap_sync(POST...) -> bus_dmamap_unload ->\n"
+" -> bus_dmamap_destroy\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:482
+msgid ""
+"When loading a map created by `bus_dmamem_alloc()` the passed address and "
+"size of the buffer must be the same as used in `bus_dmamem_alloc()`. In this "
+"case it is guaranteed that the whole buffer will be mapped as one segment "
+"(so the callback may be based on this assumption) and the request will be "
+"executed immediately (EINPROGRESS will never be returned). All the callback "
+"needs to do in this case is to save the physical address."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:484
+msgid "A typical example would be:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:492
+#, no-wrap
+msgid ""
+" static void\n"
+" alloc_callback(void *arg, bus_dma_segment_t *seg, int nseg, int error)\n"
+" {\n"
+" *(bus_addr_t *)arg = seg[0].ds_addr;\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:503
+#, no-wrap
+msgid ""
+" ...\n"
+" int error;\n"
+" struct somedata {\n"
+" ....\n"
+" };\n"
+" struct somedata *vsomedata; /* virtual address */\n"
+" bus_addr_t psomedata; /* physical bus-relative address */\n"
+" bus_dma_tag_t tag_somedata;\n"
+" bus_dmamap_t map_somedata;\n"
+" ...\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:511
+#, no-wrap
+msgid ""
+" error=bus_dma_tag_create(parent_tag, alignment,\n"
+" boundary, lowaddr, highaddr, /*filter*/ NULL, /*filterarg*/ NULL,\n"
+" /*maxsize*/ sizeof(struct somedata), /*nsegments*/ 1,\n"
+" /*maxsegsz*/ sizeof(struct somedata), /*flags*/ 0,\n"
+" &tag_somedata);\n"
+" if(error)\n"
+" return error;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:516
+#, no-wrap
+msgid ""
+" error = bus_dmamem_alloc(tag_somedata, &vsomedata, /* flags*/ 0,\n"
+" &map_somedata);\n"
+" if(error)\n"
+" return error;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:520
+#, no-wrap
+msgid ""
+" bus_dmamap_load(tag_somedata, map_somedata, (void *)vsomedata,\n"
+" sizeof (struct somedata), alloc_callback,\n"
+" (void *) &psomedata, /*flags*/0);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:523
+msgid ""
+"Looks a bit long and complicated but that is the way to do it. The practical "
+"consequence is: if multiple memory areas are allocated always together it "
+"would be a really good idea to combine them all into one structure and "
+"allocate as one (if the alignment and boundary limitations permit)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:525
+msgid ""
+"When loading an arbitrary buffer into the map created by "
+"`bus_dmamap_create()` special measures must be taken to synchronize with the "
+"callback in case it would be delayed. The code would look like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:531
+#, no-wrap
+msgid ""
+" {\n"
+" int s;\n"
+" int error;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:550
+#, no-wrap
+msgid ""
+" s = splsoftvm();\n"
+" error = bus_dmamap_load(\n"
+" dmat,\n"
+" dmamap,\n"
+" buffer_ptr,\n"
+" buffer_len,\n"
+" callback,\n"
+" /*callback_arg*/ buffer_descriptor,\n"
+" /*flags*/0);\n"
+" if (error == EINPROGRESS) {\n"
+" /*\n"
+" * Do whatever is needed to ensure synchronization\n"
+" * with callback. Callback is guaranteed not to be started\n"
+" * until we do splx() or tsleep().\n"
+" */\n"
+" }\n"
+" splx(s);\n"
+" }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:553
+msgid "Two possible approaches for the processing of requests are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:555
+msgid ""
+"If requests are completed by marking them explicitly as done (such as the "
+"CAM requests) then it would be simpler to put all the further processing "
+"into the callback driver which would mark the request when it is done. Then "
+"not much extra synchronization is needed. For the flow control reasons it "
+"may be a good idea to freeze the request queue until this request gets "
+"completed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:557
+msgid ""
+"If requests are completed when the function returns (such as classic read or "
+"write requests on character devices) then a synchronization flag should be "
+"set in the buffer descriptor and `tsleep()` called. Later when the callback "
+"gets called it will do its processing and check this synchronization flag. "
+"If it is set then the callback should issue a wakeup. In this approach the "
+"callback function could either do all the needed processing (just like the "
+"previous case) or simply save the segments array in the buffer descriptor. "
+"Then after callback completes the calling function could use this saved "
+"segments array and do all the processing."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:559
+#, no-wrap
+msgid "DMA"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:562
+msgid ""
+"The Direct Memory Access (DMA) is implemented in the ISA bus through the DMA "
+"controller (actually, two of them but that is an irrelevant detail). To make "
+"the early ISA devices simple and cheap the logic of the bus control and "
+"address generation was concentrated in the DMA controller. Fortunately, "
+"FreeBSD provides a set of functions that mostly hide the annoying details of "
+"the DMA controller from the device drivers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:564
+msgid ""
+"The simplest case is for the fairly intelligent devices. Like the bus master "
+"devices on PCI they can generate the bus cycles and memory addresses all by "
+"themselves. The only thing they really need from the DMA controller is bus "
+"arbitration. So for this purpose they pretend to be cascaded slave DMA "
+"controllers. And the only thing needed from the system DMA controller is to "
+"enable the cascaded mode on a DMA channel by calling the following function "
+"when attaching the driver:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:566
+msgid "`void isa_dmacascade(int channel_number)`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:568
+msgid ""
+"All the further activity is done by programming the device. When detaching "
+"the driver no DMA-related functions need to be called."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:570
+msgid ""
+"For the simpler devices things get more complicated. The functions used are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:572
+msgid "`int isa_dma_acquire(int chanel_number)`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:574
+msgid ""
+"Reserve a DMA channel. Returns 0 on success or EBUSY if the channel was "
+"already reserved by this or a different driver. Most of the ISA devices are "
+"not able to share DMA channels anyway, so normally this function is called "
+"when attaching a device. This reservation was made redundant by the modern "
+"interface of bus resources but still must be used in addition to the latter. "
+"If not used then later, other DMA routines will panic."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:575
+msgid "`int isa_dma_release(int chanel_number)`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:577
+msgid ""
+"Release a previously reserved DMA channel. No transfers must be in progress "
+"when the channel is released (in addition the device must not try to "
+"initiate transfer after the channel is released)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:578
+msgid "`void isa_dmainit(int chan, u_int bouncebufsize)`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:580
+msgid ""
+"Allocate a bounce buffer for use with the specified channel. The requested "
+"size of the buffer can not exceed 64KB. This bounce buffer will be "
+"automatically used later if a transfer buffer happens to be not physically "
+"contiguous or outside of the memory accessible by the ISA bus or crossing "
+"the 64KB boundary. If the transfers will be always done from buffers which "
+"conform to these conditions (such as those allocated by `bus_dmamem_alloc()` "
+"with proper limitations) then `isa_dmainit()` does not have to be called. "
+"But it is quite convenient to transfer arbitrary data using the DMA "
+"controller. The bounce buffer will automatically care of the scatter-gather "
+"issues."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:582
+msgid "_chan_ - channel number"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:583
+msgid "_bouncebufsize_ - size of the bounce buffer in bytes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:585
+msgid "`void isa_dmastart(int flags, caddr_t addr, u_int nbytes, int chan)`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:587
+msgid ""
+"Prepare to start a DMA transfer. This function must be called to set up the "
+"DMA controller before actually starting transfer on the device. It checks "
+"that the buffer is contiguous and falls into the ISA memory range, if not "
+"then the bounce buffer is automatically used. If bounce buffer is required "
+"but not set up by `isa_dmainit()` or too small for the requested transfer "
+"size then the system will panic. In case of a write request with bounce "
+"buffer the data will be automatically copied to the bounce buffer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:588
+msgid ""
+"flags - a bitmask determining the type of operation to be done. The "
+"direction bits B_READ and B_WRITE are mutually exclusive."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:590
+msgid "B_READ - read from the ISA bus into memory"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:591
+msgid "B_WRITE - write from the memory to the ISA bus"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:592
+msgid ""
+"B_RAW - if set then the DMA controller will remember the buffer and after "
+"the end of transfer will automatically re-initialize itself to repeat "
+"transfer of the same buffer again (of course, the driver may change the data "
+"in the buffer before initiating another transfer in the device). If not set "
+"then the parameters will work only for one transfer, and `isa_dmastart()` "
+"will have to be called again before initiating the next transfer. Using "
+"B_RAW makes sense only if the bounce buffer is not used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:594
+msgid "addr - virtual address of the buffer"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:595
+msgid ""
+"nbytes - length of the buffer. Must be less or equal to 64KB. Length of 0 is "
+"not allowed: the DMA controller will understand it as 64KB while the kernel "
+"code will understand it as 0 and that would cause unpredictable effects. For "
+"channels number 4 and higher the length must be even because these channels "
+"transfer 2 bytes at a time. In case of an odd length the last byte will not "
+"be transferred."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:596
+msgid "chan - channel number"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:597
+msgid "`void isa_dmadone(int flags, caddr_t addr, int nbytes, int chan)`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:599
+msgid ""
+"Synchronize the memory after device reports that transfer is done. If that "
+"was a read operation with a bounce buffer then the data will be copied from "
+"the bounce buffer to the original buffer. Arguments are the same as for "
+"`isa_dmastart()`. Flag B_RAW is permitted but it does not affect "
+"`isa_dmadone()` in any way."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:600
+msgid "`int isa_dmastatus(int channel_number)`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:602
+msgid ""
+"Returns the number of bytes left in the current transfer to be transferred. "
+"In case the flag B_READ was set in `isa_dmastart()` the number returned will "
+"never be equal to zero. At the end of transfer it will be automatically "
+"reset back to the length of buffer. The normal use is to check the number of "
+"bytes left after the device signals that the transfer is completed. If the "
+"number of bytes is not 0 then something probably went wrong with that "
+"transfer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:603
+msgid "`int isa_dmastop(int channel_number)`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:605
+msgid ""
+"Aborts the current transfer and returns the number of bytes left "
+"untransferred."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:607
+#, no-wrap
+msgid "xxx_isa_probe"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:610
+msgid ""
+"This function probes if a device is present. If the driver supports auto-"
+"detection of some part of device configuration (such as interrupt vector or "
+"memory address) this auto-detection must be done in this routine."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:612
+msgid ""
+"As for any other bus, if the device cannot be detected or is detected but "
+"failed the self-test or some other problem happened then it returns a "
+"positive value of error. The value `ENXIO` must be returned if the device is "
+"not present. Other error values may mean other conditions. Zero or negative "
+"values mean success. Most of the drivers return zero as success."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:614
+msgid ""
+"The negative return values are used when a PnP device supports multiple "
+"interfaces. For example, an older compatibility interface and a newer "
+"advanced interface which are supported by different drivers. Then both "
+"drivers would detect the device. The driver which returns a higher value in "
+"the probe routine takes precedence (in other words, the driver returning 0 "
+"has highest precedence, one returning -1 is next, one returning -2 is after "
+"it and so on). In result the devices which support only the old interface "
+"will be handled by the old driver (which should return -1 from the probe "
+"routine) while the devices supporting the new interface as well will be "
+"handled by the new driver (which should return 0 from the probe routine)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:616
+msgid ""
+"The device descriptor struct xxx_softc is allocated by the system before "
+"calling the probe routine. If the probe routine returns an error the "
+"descriptor will be automatically deallocated by the system. So if a probing "
+"error occurs the driver must make sure that all the resources it used during "
+"probe are deallocated and that nothing keeps the descriptor from being "
+"safely deallocated. If the probe completes successfully the descriptor will "
+"be preserved by the system and later passed to the routine "
+"`xxx_isa_attach()`. If a driver returns a negative value it can not be sure "
+"that it will have the highest priority and its attach routine will be "
+"called. So in this case it also must release all the resources before "
+"returning and if necessary allocate them again in the attach routine. When "
+"`xxx_isa_probe()` returns 0 releasing the resources before returning is also "
+"a good idea and a well-behaved driver should do so. But in cases where there "
+"is some problem with releasing the resources the driver is allowed to keep "
+"resources between returning 0 from the probe routine and execution of the "
+"attach routine."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:618
+msgid ""
+"A typical probe routine starts with getting the device descriptor and unit:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:625
+#, no-wrap
+msgid ""
+" struct xxx_softc *sc = device_get_softc(dev);\n"
+" int unit = device_get_unit(dev);\n"
+" int pnperror;\n"
+" int error = 0;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:628
+#, no-wrap
+msgid ""
+" sc->dev = dev; /* link it back */\n"
+" sc->unit = unit;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:631
+msgid ""
+"Then check for the PnP devices. The check is carried out by a table "
+"containing the list of PnP IDs supported by this driver and human-readable "
+"descriptions of the device models corresponding to these IDs."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:637
+#, no-wrap
+msgid ""
+" pnperror=ISA_PNP_PROBE(device_get_parent(dev), dev,\n"
+" xxx_pnp_ids); if(pnperror == ENXIO) return ENXIO;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:640
+msgid ""
+"The logic of ISA_PNP_PROBE is the following: If this card (device unit) was "
+"not detected as PnP then ENOENT will be returned. If it was detected as PnP "
+"but its detected ID does not match any of the IDs in the table then ENXIO is "
+"returned. Finally, if it has PnP support and it matches on of the IDs in the "
+"table, 0 is returned and the appropriate description from the table is set "
+"by `device_set_desc()`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:642
+msgid ""
+"If a driver supports only PnP devices then the condition would look like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:647
+#, no-wrap
+msgid ""
+" if(pnperror != 0)\n"
+" return pnperror;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:650
+msgid ""
+"No special treatment is required for the drivers which do not support PnP "
+"because they pass an empty PnP ID table and will always get ENXIO if called "
+"on a PnP card."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:652
+msgid ""
+"The probe routine normally needs at least some minimal set of resources, "
+"such as I/O port number to find the card and probe it. Depending on the "
+"hardware the driver may be able to discover the other necessary resources "
+"automatically. The PnP devices have all the resources pre-set by the PnP "
+"subsystem, so the driver does not need to discover them by itself."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:654
+msgid ""
+"Typically the minimal information required to get access to the device is "
+"the I/O port number. Then some devices allow to get the rest of information "
+"from the device configuration registers (though not all devices do that). So "
+"first we try to get the port start value:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:659
+#, no-wrap
+msgid ""
+" sc->port0 = bus_get_resource_start(dev,\n"
+" SYS_RES_IOPORT, 0 /*rid*/); if(sc->port0 == 0) return ENXIO;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:662
+msgid ""
+"The base port address is saved in the structure softc for future use. If it "
+"will be used very often then calling the resource function each time would "
+"be prohibitively slow. If we do not get a port we just return an error. Some "
+"device drivers can instead be clever and try to probe all the possible "
+"ports, like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:676
+#, no-wrap
+msgid ""
+" /* table of all possible base I/O port addresses for this device */\n"
+" static struct xxx_allports {\n"
+" u_short port; /* port address */\n"
+" short used; /* flag: if this port is already used by some unit */\n"
+" } xxx_allports = {\n"
+" { 0x300, 0 },\n"
+" { 0x320, 0 },\n"
+" { 0x340, 0 },\n"
+" { 0, 0 } /* end of table */\n"
+" };\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:680
+#, no-wrap
+msgid ""
+" ...\n"
+" int port, i;\n"
+" ...\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:686
+#, no-wrap
+msgid ""
+" port = bus_get_resource_start(dev, SYS_RES_IOPORT, 0 /*rid*/);\n"
+" if(port !=0 ) {\n"
+" for(i=0; xxx_allports[i].port!=0; i++) {\n"
+" if(xxx_allports[i].used || xxx_allports[i].port != port)\n"
+" continue;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:694
+#, no-wrap
+msgid ""
+" /* found it */\n"
+" xxx_allports[i].used = 1;\n"
+" /* do probe on a known port */\n"
+" return xxx_really_probe(dev, port);\n"
+" }\n"
+" return ENXIO; /* port is unknown or already used */\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:699
+#, no-wrap
+msgid ""
+" /* we get here only if we need to guess the port */\n"
+" for(i=0; xxx_allports[i].port!=0; i++) {\n"
+" if(xxx_allports[i].used)\n"
+" continue;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:704
+#, no-wrap
+msgid ""
+" /* mark as used - even if we find nothing at this port\n"
+" * at least we won't probe it in future\n"
+" */\n"
+" xxx_allports[i].used = 1;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:711
+#, no-wrap
+msgid ""
+" error = xxx_really_probe(dev, xxx_allports[i].port);\n"
+" if(error == 0) /* found a device at that port */\n"
+" return 0;\n"
+" }\n"
+" /* probed all possible addresses, none worked */\n"
+" return ENXIO;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:714
+msgid ""
+"Of course, normally the driver's `identify()` routine should be used for "
+"such things. But there may be one valid reason why it may be better to be "
+"done in `probe()`: if this probe would drive some other sensitive device "
+"crazy. The probe routines are ordered with consideration of the `sensitive` "
+"flag: the sensitive devices get probed first and the rest of the devices "
+"later. But the `identify()` routines are called before any probes, so they "
+"show no respect to the sensitive devices and may upset them."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:716
+msgid ""
+"Now, after we got the starting port we need to set the port count (except "
+"for PnP devices) because the kernel does not have this information in the "
+"configuration file."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:724
+#, no-wrap
+msgid ""
+" if(pnperror /* only for non-PnP devices */\n"
+" && bus_set_resource(dev, SYS_RES_IOPORT, 0, sc->port0,\n"
+" XXX_PORT_COUNT)<0)\n"
+" return ENXIO;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:727
+msgid ""
+"Finally allocate and activate a piece of port address space (special values "
+"of start and end mean \"use those we set by ``bus_set_resource()``\"):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:735
+#, no-wrap
+msgid ""
+" sc->port0_rid = 0;\n"
+" sc->port0_r = bus_alloc_resource(dev, SYS_RES_IOPORT,\n"
+" &sc->port0_rid,\n"
+" /*start*/ 0, /*end*/ ~0, /*count*/ 0, RF_ACTIVE);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:738
+#, no-wrap
+msgid ""
+" if(sc->port0_r == NULL)\n"
+" return ENXIO;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:741
+msgid ""
+"Now having access to the port-mapped registers we can poke the device in "
+"some way and check if it reacts like it is expected to. If it does not then "
+"there is probably some other device or no device at all at this address."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:743
+msgid ""
+"Normally drivers do not set up the interrupt handlers until the attach "
+"routine. Instead they do probes in the polling mode using the `DELAY()` "
+"function for timeout. The probe routine must never hang forever, all the "
+"waits for the device must be done with timeouts. If the device does not "
+"respond within the time it is probably broken or misconfigured and the "
+"driver must return error. When determining the timeout interval give the "
+"device some extra time to be on the safe side: although `DELAY()` is "
+"supposed to delay for the same amount of time on any machine it has some "
+"margin of error, depending on the exact CPU."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:745
+msgid ""
+"If the probe routine really wants to check that the interrupts really work "
+"it may configure and probe the interrupts too. But that is not recommended."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:752
+#, no-wrap
+msgid ""
+" /* implemented in some very device-specific way */\n"
+" if(error = xxx_probe_ports(sc))\n"
+" goto bad; /* will deallocate the resources before returning */\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:755
+msgid ""
+"The function `xxx_probe_ports()` may also set the device description "
+"depending on the exact model of device it discovers. But if there is only "
+"one supported device model this can be as well done in a hardcoded way. Of "
+"course, for the PnP devices the PnP support sets the description from the "
+"table automatically."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:760
+#, no-wrap
+msgid ""
+" if(pnperror)\n"
+" device_set_desc(dev, \"Our device model 1234\");\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:763
+msgid ""
+"Then the probe routine should either discover the ranges of all the "
+"resources by reading the device configuration registers or make sure that "
+"they were set explicitly by the user. We will consider it with an example of "
+"on-board memory. The probe routine should be as non-intrusive as possible, "
+"so allocation and check of functionality of the rest of resources (besides "
+"the ports) would be better left to the attach routine."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:765
+msgid ""
+"The memory address may be specified in the kernel configuration file or on "
+"some devices it may be pre-configured in non-volatile configuration "
+"registers. If both sources are available and different, which one should be "
+"used? Probably if the user bothered to set the address explicitly in the "
+"kernel configuration file they know what they are doing and this one should "
+"take precedence. An example of implementation could be:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:773
+#, no-wrap
+msgid ""
+" /* try to find out the config address first */\n"
+" sc->mem0_p = bus_get_resource_start(dev, SYS_RES_MEMORY, 0 /*rid*/);\n"
+" if(sc->mem0_p == 0) { /* nope, not specified by user */\n"
+" sc->mem0_p = xxx_read_mem0_from_device_config(sc);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:781
+#, no-wrap
+msgid ""
+" if(sc->mem0_p == 0)\n"
+" /* can't get it from device config registers either */\n"
+" goto bad;\n"
+" } else {\n"
+" if(xxx_set_mem0_address_on_device(sc) < 0)\n"
+" goto bad; /* device does not support that address */\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:793
+#, no-wrap
+msgid ""
+" /* just like the port, set the memory size,\n"
+" * for some devices the memory size would not be constant\n"
+" * but should be read from the device configuration registers instead\n"
+" * to accommodate different models of devices. Another option would\n"
+" * be to let the user set the memory size as \"msize\" configuration\n"
+" * resource which will be automatically handled by the ISA bus.\n"
+" */\n"
+" if(pnperror) { /* only for non-PnP devices */\n"
+" sc->mem0_size = bus_get_resource_count(dev, SYS_RES_MEMORY, 0 /*rid*/);\n"
+" if(sc->mem0_size == 0) /* not specified by user */\n"
+" sc->mem0_size = xxx_read_mem0_size_from_device_config(sc);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:802
+#, no-wrap
+msgid ""
+" if(sc->mem0_size == 0) {\n"
+" /* suppose this is a very old model of device without\n"
+" * auto-configuration features and the user gave no preference,\n"
+" * so assume the minimalistic case\n"
+" * (of course, the real value will vary with the driver)\n"
+" */\n"
+" sc->mem0_size = 8*1024;\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:805
+#, no-wrap
+msgid ""
+" if(xxx_set_mem0_size_on_device(sc) < 0)\n"
+" goto bad; /* device does not support that size */\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:812
+#, no-wrap
+msgid ""
+" if(bus_set_resource(dev, SYS_RES_MEMORY, /*rid*/0,\n"
+" sc->mem0_p, sc->mem0_size)<0)\n"
+" goto bad;\n"
+" } else {\n"
+" sc->mem0_size = bus_get_resource_count(dev, SYS_RES_MEMORY, 0 /*rid*/);\n"
+" }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:815
+msgid "Resources for IRQ and DRQ are easy to check by analogy."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:817
+msgid "If all went well then release all the resources and return success."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:822
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1085
+#, no-wrap
+msgid ""
+" xxx_free_resources(sc);\n"
+" return 0;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:825
+msgid ""
+"Finally, handle the troublesome situations. All the resources should be "
+"deallocated before returning. We make use of the fact that before the "
+"structure softc is passed to us it gets zeroed out, so we can find out if "
+"some resource was allocated: then its descriptor is non-zero."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:829
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1046
+#, no-wrap
+msgid " bad:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:835
+#, no-wrap
+msgid ""
+" xxx_free_resources(sc);\n"
+" if(error)\n"
+" return error;\n"
+" else /* exact error is unknown */\n"
+" return ENXIO;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:838
+msgid ""
+"That would be all for the probe routine. Freeing of resources is done from "
+"multiple places, so it is moved to a function which may look like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:846
+#, no-wrap
+msgid ""
+"static void\n"
+" xxx_free_resources(sc)\n"
+" struct xxx_softc *sc;\n"
+" {\n"
+" /* check every resource and free if not zero */\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:854
+#, no-wrap
+msgid ""
+" /* interrupt handler */\n"
+" if(sc->intr_r) {\n"
+" bus_teardown_intr(sc->dev, sc->intr_r, sc->intr_cookie);\n"
+" bus_release_resource(sc->dev, SYS_RES_IRQ, sc->intr_rid,\n"
+" sc->intr_r);\n"
+" sc->intr_r = 0;\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:869
+#, no-wrap
+msgid ""
+" /* all kinds of memory maps we could have allocated */\n"
+" if(sc->data_p) {\n"
+" bus_dmamap_unload(sc->data_tag, sc->data_map);\n"
+" sc->data_p = 0;\n"
+" }\n"
+" if(sc->data) { /* sc->data_map may be legitimately equal to 0 */\n"
+" /* the map will also be freed */\n"
+" bus_dmamem_free(sc->data_tag, sc->data, sc->data_map);\n"
+" sc->data = 0;\n"
+" }\n"
+" if(sc->data_tag) {\n"
+" bus_dma_tag_destroy(sc->data_tag);\n"
+" sc->data_tag = 0;\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:871
+#, no-wrap
+msgid " ... free other maps and tags if we have them ...\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:876
+#, no-wrap
+msgid ""
+" if(sc->parent_tag) {\n"
+" bus_dma_tag_destroy(sc->parent_tag);\n"
+" sc->parent_tag = 0;\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:890
+#, no-wrap
+msgid ""
+" /* release all the bus resources */\n"
+" if(sc->mem0_r) {\n"
+" bus_release_resource(sc->dev, SYS_RES_MEMORY, sc->mem0_rid,\n"
+" sc->mem0_r);\n"
+" sc->mem0_r = 0;\n"
+" }\n"
+" ...\n"
+" if(sc->port0_r) {\n"
+" bus_release_resource(sc->dev, SYS_RES_IOPORT, sc->port0_rid,\n"
+" sc->port0_r);\n"
+" sc->port0_r = 0;\n"
+" }\n"
+" }\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:893
+#, no-wrap
+msgid "xxx_isa_attach"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:896
+msgid ""
+"The attach routine actually connects the driver to the system if the probe "
+"routine returned success and the system had chosen to attach that driver. If "
+"the probe routine returned 0 then the attach routine may expect to receive "
+"the device structure softc intact, as it was set by the probe routine. Also "
+"if the probe routine returns 0 it may expect that the attach routine for "
+"this device shall be called at some point in the future. If the probe "
+"routine returns a negative value then the driver may make none of these "
+"assumptions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:898
+msgid ""
+"The attach routine returns 0 if it completed successfully or error code "
+"otherwise."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:900
+msgid ""
+"The attach routine starts just like the probe routine, with getting some "
+"frequently used data into more accessible variables."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:906
+#, no-wrap
+msgid ""
+" struct xxx_softc *sc = device_get_softc(dev);\n"
+" int unit = device_get_unit(dev);\n"
+" int error = 0;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:909
+msgid ""
+"Then allocate and activate all the necessary resources. As normally the port "
+"range will be released before returning from probe, it has to be allocated "
+"again. We expect that the probe routine had properly set all the resource "
+"ranges, as well as saved them in the structure softc. If the probe routine "
+"had left some resource allocated then it does not need to be allocated again "
+"(which would be considered an error)."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:915
+#, no-wrap
+msgid ""
+" sc->port0_rid = 0;\n"
+" sc->port0_r = bus_alloc_resource(dev, SYS_RES_IOPORT, &sc->port0_rid,\n"
+" /*start*/ 0, /*end*/ ~0, /*count*/ 0, RF_ACTIVE);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:918
+#, no-wrap
+msgid ""
+" if(sc->port0_r == NULL)\n"
+" return ENXIO;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:923
+#, no-wrap
+msgid ""
+" /* on-board memory */\n"
+" sc->mem0_rid = 0;\n"
+" sc->mem0_r = bus_alloc_resource(dev, SYS_RES_MEMORY, &sc->mem0_rid,\n"
+" /*start*/ 0, /*end*/ ~0, /*count*/ 0, RF_ACTIVE);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:926
+#, no-wrap
+msgid ""
+" if(sc->mem0_r == NULL)\n"
+" goto bad;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:929
+#, no-wrap
+msgid ""
+" /* get its virtual address */\n"
+" sc->mem0_v = rman_get_virtual(sc->mem0_r);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:932
+msgid ""
+"The DMA request channel (DRQ) is allocated likewise. To initialize it use "
+"functions of the `isa_dma*()` family. For example:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:934
+msgid "`isa_dmacascade(sc->drq0);`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:936
+msgid ""
+"The interrupt request line (IRQ) is a bit special. Besides allocation the "
+"driver's interrupt handler should be associated with it. Historically in the "
+"old ISA drivers the argument passed by the system to the interrupt handler "
+"was the device unit number. But in modern drivers the convention suggests "
+"passing the pointer to structure softc. The important reason is that when "
+"the structures softc are allocated dynamically then getting the unit number "
+"from softc is easy while getting softc from the unit number is difficult. "
+"Also this convention makes the drivers for different buses look more uniform "
+"and allows them to share the code: each bus gets its own probe, attach, "
+"detach and other bus-specific routines while the bulk of the driver code may "
+"be shared among them."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:943
+#, no-wrap
+msgid ""
+" sc->intr_rid = 0;\n"
+" sc->intr_r = bus_alloc_resource(dev, SYS_RES_MEMORY, &sc->intr_rid,\n"
+" /*start*/ 0, /*end*/ ~0, /*count*/ 0, RF_ACTIVE);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:946
+#, no-wrap
+msgid ""
+" if(sc->intr_r == NULL)\n"
+" goto bad;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:955
+#, no-wrap
+msgid ""
+" /*\n"
+" * XXX_INTR_TYPE is supposed to be defined depending on the type of\n"
+" * the driver, for example as INTR_TYPE_CAM for a CAM driver\n"
+" */\n"
+" error = bus_setup_intr(dev, sc->intr_r, XXX_INTR_TYPE,\n"
+" (driver_intr_t *) xxx_intr, (void *) sc, &sc->intr_cookie);\n"
+" if(error)\n"
+" goto bad;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:958
+msgid ""
+"If the device needs to make DMA to the main memory then this memory should "
+"be allocated like described before:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:970
+#, no-wrap
+msgid ""
+" error=bus_dma_tag_create(NULL, /*alignment*/ 4,\n"
+" /*boundary*/ 0, /*lowaddr*/ BUS_SPACE_MAXADDR_24BIT,\n"
+" /*highaddr*/ BUS_SPACE_MAXADDR, /*filter*/ NULL, /*filterarg*/ NULL,\n"
+" /*maxsize*/ BUS_SPACE_MAXSIZE_24BIT,\n"
+" /*nsegments*/ BUS_SPACE_UNRESTRICTED,\n"
+" /*maxsegsz*/ BUS_SPACE_MAXSIZE_24BIT, /*flags*/ 0,\n"
+" &sc->parent_tag);\n"
+" if(error)\n"
+" goto bad;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:987
+#, no-wrap
+msgid ""
+" /* many things get inherited from the parent tag\n"
+" * sc->data is supposed to point to the structure with the shared data,\n"
+" * for example for a ring buffer it could be:\n"
+" * struct {\n"
+" * u_short rd_pos;\n"
+" * u_short wr_pos;\n"
+" * char bf[XXX_RING_BUFFER_SIZE]\n"
+" * } *data;\n"
+" */\n"
+" error=bus_dma_tag_create(sc->parent_tag, 1,\n"
+" 0, BUS_SPACE_MAXADDR, 0, /*filter*/ NULL, /*filterarg*/ NULL,\n"
+" /*maxsize*/ sizeof(* sc->data), /*nsegments*/ 1,\n"
+" /*maxsegsz*/ sizeof(* sc->data), /*flags*/ 0,\n"
+" &sc->data_tag);\n"
+" if(error)\n"
+" goto bad;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:992
+#, no-wrap
+msgid ""
+" error = bus_dmamem_alloc(sc->data_tag, &sc->data, /* flags*/ 0,\n"
+" &sc->data_map);\n"
+" if(error)\n"
+" goto bad;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1008
+#, no-wrap
+msgid ""
+" /* xxx_alloc_callback() just saves the physical address at\n"
+" * the pointer passed as its argument, in this case &sc->data_p.\n"
+" * See details in the section on bus memory mapping.\n"
+" * It can be implemented like:\n"
+" *\n"
+" * static void\n"
+" * xxx_alloc_callback(void *arg, bus_dma_segment_t *seg,\n"
+" * int nseg, int error)\n"
+" * {\n"
+" * *(bus_addr_t *)arg = seg[0].ds_addr;\n"
+" * }\n"
+" */\n"
+" bus_dmamap_load(sc->data_tag, sc->data_map, (void *)sc->data,\n"
+" sizeof (* sc->data), xxx_alloc_callback, (void *) &sc->data_p,\n"
+" /*flags*/0);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1011
+msgid ""
+"After all the necessary resources are allocated the device should be "
+"initialized. The initialization may include testing that all the expected "
+"features are functional."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1016
+#, no-wrap
+msgid ""
+" if(xxx_initialize(sc) < 0)\n"
+" goto bad;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1019
+msgid ""
+"The bus subsystem will automatically print on the console the device "
+"description set by probe. But if the driver wants to print some extra "
+"information about the device it may do so, for example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1024
+#, no-wrap
+msgid " device_printf(dev, \"has on-card FIFO buffer of %d bytes\\n\", sc->fifosize);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1027
+msgid ""
+"If the initialization routine experiences any problems then printing "
+"messages about them before returning error is also recommended."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1029
+msgid ""
+"The final step of the attach routine is attaching the device to its "
+"functional subsystem in the kernel. The exact way to do it depends on the "
+"type of the driver: a character device, a block device, a network device, a "
+"CAM SCSI bus device and so on."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1031
+msgid "If all went well then return success."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1037
+#, no-wrap
+msgid ""
+" error = xxx_attach_subsystem(sc);\n"
+" if(error)\n"
+" goto bad;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1039
+#, no-wrap
+msgid " return 0;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1042
+msgid ""
+"Finally, handle the troublesome situations. All the resources should be "
+"deallocated before returning an error. We make use of the fact that before "
+"the structure softc is passed to us it gets zeroed out, so we can find out "
+"if some resource was allocated: then its descriptor is non-zero."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1052
+#, no-wrap
+msgid ""
+" xxx_free_resources(sc);\n"
+" if(error)\n"
+" return error;\n"
+" else /* exact error is unknown */\n"
+" return ENXIO;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1055
+msgid "That would be all for the attach routine."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1057
+#, no-wrap
+msgid "xxx_isa_detach"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1060
+msgid ""
+"If this function is present in the driver and the driver is compiled as a "
+"loadable module then the driver gets the ability to be unloaded. This is an "
+"important feature if the hardware supports hot plug. But the ISA bus does "
+"not support hot plug, so this feature is not particularly important for the "
+"ISA devices. The ability to unload a driver may be useful when debugging it, "
+"but in many cases installation of the new version of the driver would be "
+"required only after the old version somehow wedges the system and a reboot "
+"will be needed anyway, so the efforts spent on writing the detach routine "
+"may not be worth it. Another argument that unloading would allow upgrading "
+"the drivers on a production machine seems to be mostly theoretical. "
+"Installing a new version of a driver is a dangerous operation which should "
+"never be performed on a production machine (and which is not permitted when "
+"the system is running in secure mode). Still, the detach routine may be "
+"provided for the sake of completeness."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1062
+msgid ""
+"The detach routine returns 0 if the driver was successfully detached or the "
+"error code otherwise."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1064
+msgid ""
+"The logic of detach is a mirror of the attach. The first thing to do is to "
+"detach the driver from its kernel subsystem. If the device is currently open "
+"then the driver has two choices: refuse to be detached or forcibly close and "
+"proceed with detach. The choice used depends on the ability of the "
+"particular kernel subsystem to do a forced close and on the preferences of "
+"the driver's author. Generally the forced close seems to be the preferred "
+"alternative."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1069
+#, no-wrap
+msgid ""
+" struct xxx_softc *sc = device_get_softc(dev);\n"
+" int error;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1073
+#, no-wrap
+msgid ""
+" error = xxx_detach_subsystem(sc);\n"
+" if(error)\n"
+" return error;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1076
+msgid ""
+"Next the driver may want to reset the hardware to some consistent state. "
+"That includes stopping any ongoing transfers, disabling the DMA channels and "
+"interrupts to avoid memory corruption by the device. For most of the drivers "
+"this is exactly what the shutdown routine does, so if it is included in the "
+"driver we can just call it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1078
+msgid "`xxx_isa_shutdown(dev);`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1080
+msgid "And finally release all the resources and return success."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1088
+#, no-wrap
+msgid "xxx_isa_shutdown"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1091
+msgid ""
+"This routine is called when the system is about to be shut down. It is "
+"expected to bring the hardware to some consistent state. For most of the ISA "
+"devices no special action is required, so the function is not really "
+"necessary because the device will be re-initialized on reboot anyway. But "
+"some devices have to be shut down with a special procedure, to make sure "
+"that they will be properly detected after soft reboot (this is especially "
+"true for many devices with proprietary identification protocols). In any "
+"case disabling DMA and interrupts in the device registers and stopping any "
+"ongoing transfers is a good idea. The exact action depends on the hardware, "
+"so we do not consider it here in any detail."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1093
+#, no-wrap
+msgid "xxx_intr"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1096
+msgid ""
+"The interrupt handler is called when an interrupt is received which may be "
+"from this particular device. The ISA bus does not support interrupt sharing "
+"(except in some special cases) so in practice if the interrupt handler is "
+"called then the interrupt almost for sure came from its device. Still, the "
+"interrupt handler must poll the device registers and make sure that the "
+"interrupt was generated by its device. If not it should just return."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1098
+msgid ""
+"The old convention for the ISA drivers was getting the device unit number as "
+"an argument. This is obsolete, and the new drivers receive whatever argument "
+"was specified for them in the attach routine when calling "
+"`bus_setup_intr()`. By the new convention it should be the pointer to the "
+"structure softc. So the interrupt handler commonly starts as:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1105
+#, no-wrap
+msgid ""
+" static void\n"
+" xxx_intr(struct xxx_softc *sc)\n"
+" {\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1108
+msgid ""
+"It runs at the interrupt priority level specified by the interrupt type "
+"parameter of `bus_setup_intr()`. That means that all the other interrupts of "
+"the same type as well as all the software interrupts are disabled."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1110
+msgid "To avoid races it is commonly written as a loop:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1118
+#, no-wrap
+msgid ""
+" while(xxx_interrupt_pending(sc)) {\n"
+" xxx_process_interrupt(sc);\n"
+" xxx_acknowledge_interrupt(sc);\n"
+" }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/isa/_index.adoc:1120
+msgid ""
+"The interrupt handler has to acknowledge interrupt to the device only but "
+"not to the interrupt controller, the system takes care of the latter."
+msgstr ""
diff --git a/documentation/content/en/books/arch-handbook/jail/_index.adoc b/documentation/content/en/books/arch-handbook/jail/_index.adoc
index 48cc3c1a0c..52ce924766 100644
--- a/documentation/content/en/books/arch-handbook/jail/_index.adoc
+++ b/documentation/content/en/books/arch-handbook/jail/_index.adoc
@@ -6,7 +6,7 @@ description: The Jail Subsystem
tags: ["jail", "architecture", "networking", "kernel"]
showBookMenu: true
weight: 5
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/jail/"
---
[[jail]]
diff --git a/documentation/content/en/books/arch-handbook/jail/_index.po b/documentation/content/en/books/arch-handbook/jail/_index.po
new file mode 100644
index 0000000000..a09bdef10e
--- /dev/null
+++ b/documentation/content/en/books/arch-handbook/jail/_index.po
@@ -0,0 +1,981 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:20-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:1
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:13
+#, no-wrap
+msgid "The Jail Subsystem"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:1
+#, no-wrap
+msgid "Chapter 4. The Jail Subsystem"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:51
+msgid ""
+"On most UNIX(R) systems, `root` has omnipotent power. This promotes "
+"insecurity. If an attacker gained `root` on a system, he would have every "
+"function at his fingertips. In FreeBSD there are sysctls which dilute the "
+"power of `root`, in order to minimize the damage caused by an attacker. "
+"Specifically, one of these functions is called `secure levels`. Similarly, "
+"another function which is present from FreeBSD 4.0 and onward, is a utility "
+"called man:jail[8]. Jail chroots an environment and sets certain "
+"restrictions on processes which are forked within the jail. For example, a "
+"jailed process cannot affect processes outside the jail, utilize certain "
+"system calls, or inflict any damage on the host environment."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:53
+msgid ""
+"Jail is becoming the new security model. People are running potentially "
+"vulnerable servers such as Apache, BIND, and sendmail within jails, so that "
+"if an attacker gains `root` within the jail, it is only an annoyance, and "
+"not a devastation. This article mainly focuses on the internals (source "
+"code) of jail. For information on how to set up a jail see the extref:"
+"{handbook}[handbook entry on jails, jails]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:55
+#, no-wrap
+msgid "Architecture"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:58
+msgid ""
+"Jail consists of two realms: the userland program, man:jail[8], and the code "
+"implemented within the kernel: the man:jail[2] system call and associated "
+"restrictions. I will be discussing the userland program and then how jail is "
+"implemented within the kernel."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:59
+#, no-wrap
+msgid "Userland Code"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:62
+msgid ""
+"The source for the userland jail is located in [.filename]#/usr/src/usr.sbin/"
+"jail#, consisting of one file, [.filename]#jail.c#. The program takes these "
+"arguments: the path of the jail, hostname, IP address, and the command to be "
+"executed."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:63
+#, no-wrap
+msgid "Data Structures"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:66
+msgid ""
+"In [.filename]#jail.c#, the first thing I would note is the declaration of "
+"an important structure `struct jail j;` which was included from [.filename]#/"
+"usr/include/sys/jail.h#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:68
+msgid "The definition of the `jail` structure is:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:72
+#, no-wrap
+msgid "/usr/include/sys/jail.h:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:79
+#, no-wrap
+msgid ""
+"struct jail {\n"
+" u_int32_t version;\n"
+" char *path;\n"
+" char *hostname;\n"
+" u_int32_t ip_number;\n"
+"};\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:82
+msgid ""
+"As you can see, there is an entry for each of the arguments passed to the "
+"man:jail[8] program, and indeed, they are set during its execution."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:96
+#, no-wrap
+msgid ""
+"/usr/src/usr.sbin/jail/jail.c\n"
+"char path[PATH_MAX];\n"
+"...\n"
+"if (realpath(argv[0], path) == NULL)\n"
+" err(1, \"realpath: %s\", argv[0]);\n"
+"if (chdir(path) != 0)\n"
+" err(1, \"chdir: %s\", path);\n"
+"memset(&j, 0, sizeof(j));\n"
+"j.version = 0;\n"
+"j.path = path;\n"
+"j.hostname = argv[1];\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:98
+#, no-wrap
+msgid "Networking"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:101
+msgid ""
+"One of the arguments passed to the man:jail[8] program is an IP address with "
+"which the jail can be accessed over the network. man:jail[8] translates the "
+"IP address given into host byte order and then stores it in `j` (the `jail` "
+"structure)."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:110
+#, no-wrap
+msgid ""
+"/usr/src/usr.sbin/jail/jail.c:\n"
+"struct in_addr in;\n"
+"...\n"
+"if (inet_aton(argv[2], &in) == 0)\n"
+" errx(1, \"Could not make sense of ip-number: %s\", argv[2]);\n"
+"j.ip_number = ntohl(in.s_addr);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:113
+msgid ""
+"The man:inet_aton[3] function \"interprets the specified character string as "
+"an Internet address, placing the address into the structure provided.\" The "
+"`ip_number` member in the `jail` structure is set only when the IP address "
+"placed onto the `in` structure by man:inet_aton[3] is translated into host "
+"byte order by man:ntohl[3]."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:114
+#, no-wrap
+msgid "Jailing the Process"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:117
+msgid ""
+"Finally, the userland program jails the process. Jail now becomes an "
+"imprisoned process itself and then executes the command given using man:"
+"execv[3]."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:125
+#, no-wrap
+msgid ""
+"/usr/src/usr.sbin/jail/jail.c\n"
+"i = jail(&j);\n"
+"...\n"
+"if (execv(argv[3], argv + 3) != 0)\n"
+" err(1, \"execv: %s\", argv[3]);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:128
+msgid ""
+"As you can see, the `jail()` function is called, and its argument is the "
+"`jail` structure which has been filled with the arguments given to the "
+"program. Finally, the program you specify is executed. I will now discuss "
+"how jail is implemented within the kernel."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:129
+#, no-wrap
+msgid "Kernel Space"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:132
+msgid ""
+"We will now be looking at the file [.filename]#/usr/src/sys/kern/kern_jail."
+"c#. This is the file where the man:jail[2] system call, appropriate sysctls, "
+"and networking functions are defined."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:133
+#, no-wrap
+msgid "Sysctls"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:136
+msgid "In [.filename]#kern_jail.c#, the following sysctls are defined:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:144
+#, no-wrap
+msgid ""
+"/usr/src/sys/kern/kern_jail.c:\n"
+"int jail_set_hostname_allowed = 1;\n"
+"SYSCTL_INT(_security_jail, OID_AUTO, set_hostname_allowed, CTLFLAG_RW,\n"
+" &jail_set_hostname_allowed, 0,\n"
+" \"Processes in jail can set their hostnames\");\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:149
+#, no-wrap
+msgid ""
+"int jail_socket_unixiproute_only = 1;\n"
+"SYSCTL_INT(_security_jail, OID_AUTO, socket_unixiproute_only, CTLFLAG_RW,\n"
+" &jail_socket_unixiproute_only, 0,\n"
+" \"Processes in jail are limited to creating UNIX/IPv4/route sockets only\");\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:154
+#, no-wrap
+msgid ""
+"int jail_sysvipc_allowed = 0;\n"
+"SYSCTL_INT(_security_jail, OID_AUTO, sysvipc_allowed, CTLFLAG_RW,\n"
+" &jail_sysvipc_allowed, 0,\n"
+" \"Processes in jail can use System V IPC primitives\");\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:159
+#, no-wrap
+msgid ""
+"static int jail_enforce_statfs = 2;\n"
+"SYSCTL_INT(_security_jail, OID_AUTO, enforce_statfs, CTLFLAG_RW,\n"
+" &jail_enforce_statfs, 0,\n"
+" \"Processes in jail cannot see all mounted file systems\");\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:164
+#, no-wrap
+msgid ""
+"int jail_allow_raw_sockets = 0;\n"
+"SYSCTL_INT(_security_jail, OID_AUTO, allow_raw_sockets, CTLFLAG_RW,\n"
+" &jail_allow_raw_sockets, 0,\n"
+" \"Prison root can create raw sockets\");\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:169
+#, no-wrap
+msgid ""
+"int jail_chflags_allowed = 0;\n"
+"SYSCTL_INT(_security_jail, OID_AUTO, chflags_allowed, CTLFLAG_RW,\n"
+" &jail_chflags_allowed, 0,\n"
+" \"Processes in jail can alter system file flags\");\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:174
+#, no-wrap
+msgid ""
+"int jail_mount_allowed = 0;\n"
+"SYSCTL_INT(_security_jail, OID_AUTO, mount_allowed, CTLFLAG_RW,\n"
+" &jail_mount_allowed, 0,\n"
+" \"Processes in jail can mount/unmount jail-friendly file systems\");\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:177
+msgid ""
+"Each of these sysctls can be accessed by the user through the man:sysctl[8] "
+"program. Throughout the kernel, these specific sysctls are recognized by "
+"their name. For example, the name of the first sysctl is `security.jail."
+"set_hostname_allowed`."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:178
+#, no-wrap
+msgid "man:jail[2] System Call"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:181
+msgid ""
+"Like all system calls, the man:jail[2] system call takes two arguments, "
+"`struct thread *td` and `struct jail_args *uap`. `td` is a pointer to the "
+"`thread` structure which describes the calling thread. In this context, "
+"`uap` is a pointer to the structure in which a pointer to the `jail` "
+"structure passed by the userland [.filename]#jail.c# is contained. When I "
+"described the userland program before, you saw that the man:jail[2] system "
+"call was given a `jail` structure as its own argument."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:192
+#, no-wrap
+msgid ""
+"/usr/src/sys/kern/kern_jail.c:\n"
+"/*\n"
+" * struct jail_args {\n"
+" * struct jail *jail;\n"
+" * };\n"
+" */\n"
+"int\n"
+"jail(struct thread *td, struct jail_args *uap)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:195
+msgid ""
+"Therefore, `uap->jail` can be used to access the `jail` structure which was "
+"passed to the system call. Next, the system call copies the `jail` structure "
+"into kernel space using the man:copyin[9] function. man:copyin[9] takes "
+"three arguments: the address of the data which is to be copied into kernel "
+"space, `uap->jail`, where to store it, `j` and the size of the storage. The "
+"`jail` structure pointed by `uap->jail` is copied into kernel space and is "
+"stored in another `jail` structure, `j`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:200
+#, no-wrap
+msgid ""
+"/usr/src/sys/kern/kern_jail.c:\n"
+"error = copyin(uap->jail, &j, sizeof(j));\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:203
+msgid ""
+"There is another important structure defined in [.filename]#jail.h#. It is "
+"the `prison` structure. The `prison` structure is used exclusively within "
+"kernel space. Here is the definition of the `prison` structure."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:221
+#, no-wrap
+msgid ""
+"/usr/include/sys/jail.h:\n"
+"struct prison {\n"
+" LIST_ENTRY(prison) pr_list; /* (a) all prisons */\n"
+" int pr_id; /* (c) prison id */\n"
+" int pr_ref; /* (p) refcount */\n"
+" char pr_path[MAXPATHLEN]; /* (c) chroot path */\n"
+" struct vnode *pr_root; /* (c) vnode to rdir */\n"
+" char pr_host[MAXHOSTNAMELEN]; /* (p) jail hostname */\n"
+" u_int32_t pr_ip; /* (c) ip addr host */\n"
+" void *pr_linux; /* (p) linux abi */\n"
+" int pr_securelevel; /* (p) securelevel */\n"
+" struct task pr_task; /* (d) destroy task */\n"
+" struct mtx pr_mtx;\n"
+" void **pr_slots; /* (p) additional data */\n"
+"};\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:224
+msgid ""
+"The man:jail[2] system call then allocates memory for a `prison` structure "
+"and copies data between the `jail` and `prison` structure."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:238
+#, no-wrap
+msgid ""
+"/usr/src/sys/kern/kern_jail.c:\n"
+"MALLOC(pr, struct prison *, sizeof(*pr), M_PRISON, M_WAITOK | M_ZERO);\n"
+"...\n"
+"error = copyinstr(j.path, &pr->pr_path, sizeof(pr->pr_path), 0);\n"
+"if (error)\n"
+" goto e_killmtx;\n"
+"...\n"
+"error = copyinstr(j.hostname, &pr->pr_host, sizeof(pr->pr_host), 0);\n"
+"if (error)\n"
+" goto e_dropvnref;\n"
+"pr->pr_ip = j.ip_number;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:241
+msgid ""
+"Next, we will discuss another important system call man:jail_attach[2], "
+"which implements the function to put a process into the jail."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:252
+#, no-wrap
+msgid ""
+"/usr/src/sys/kern/kern_jail.c:\n"
+"/*\n"
+" * struct jail_attach_args {\n"
+" * int jid;\n"
+" * };\n"
+" */\n"
+"int\n"
+"jail_attach(struct thread *td, struct jail_attach_args *uap)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:255
+msgid ""
+"This system call makes the changes that can distinguish a jailed process "
+"from those unjailed ones. To understand what man:jail_attach[2] does for us, "
+"certain background information is needed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:257
+msgid ""
+"On FreeBSD, each kernel visible thread is identified by its `thread` "
+"structure, while the processes are described by their `proc` structures. You "
+"can find the definitions of the `thread` and `proc` structure in [."
+"filename]#/usr/include/sys/proc.h#. For example, the `td` argument in any "
+"system call is actually a pointer to the calling thread's `thread` "
+"structure, as stated before. The `td_proc` member in the `thread` structure "
+"pointed by `td` is a pointer to the `proc` structure which represents the "
+"process that contains the thread represented by `td`. The `proc` structure "
+"contains members which can describe the owner's identity(`p_ucred`), the "
+"process resource limits(`p_limit`), and so on. In the `ucred` structure "
+"pointed by `p_ucred` member in the `proc` structure, there is a pointer to "
+"the `prison` structure(`cr_prison`)."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:277
+#, no-wrap
+msgid ""
+"/usr/include/sys/proc.h:\n"
+"struct thread {\n"
+" ...\n"
+" struct proc *td_proc;\n"
+" ...\n"
+"};\n"
+"struct proc {\n"
+" ...\n"
+" struct ucred *p_ucred;\n"
+" ...\n"
+"};\n"
+"/usr/include/sys/ucred.h\n"
+"struct ucred {\n"
+" ...\n"
+" struct prison *cr_prison;\n"
+" ...\n"
+"};\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:280
+msgid ""
+"In [.filename]#kern_jail.c#, the function `jail()` then calls function "
+"`jail_attach()` with a given `jid`. And `jail_attach()` calls function "
+"`change_root()` to change the root directory of the calling process. The "
+"`jail_attach()` then creates a new `ucred` structure, and attaches the newly "
+"created `ucred` structure to the calling process after it has successfully "
+"attached the `prison` structure to the `ucred` structure. From then on, the "
+"calling process is recognized as jailed. When the kernel routine `jailed()` "
+"is called in the kernel with the newly created `ucred` structure as its "
+"argument, it returns 1 to tell that the credential is connected with a jail. "
+"The public ancestor process of all the process forked within the jail, is "
+"the process which runs man:jail[8], as it calls the man:jail[2] system call. "
+"When a program is executed through man:execve[2], it inherits the jailed "
+"property of its parent's `ucred` structure, therefore it has a jailed "
+"`ucred` structure."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:295
+#, no-wrap
+msgid ""
+"/usr/src/sys/kern/kern_jail.c\n"
+"int\n"
+"jail(struct thread *td, struct jail_args *uap)\n"
+"{\n"
+"...\n"
+" struct jail_attach_args jaa;\n"
+"...\n"
+" error = jail_attach(td, &jaa);\n"
+" if (error)\n"
+" goto e_dropprref;\n"
+"...\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:313
+#, no-wrap
+msgid ""
+"int\n"
+"jail_attach(struct thread *td, struct jail_attach_args *uap)\n"
+"{\n"
+" struct proc *p;\n"
+" struct ucred *newcred, *oldcred;\n"
+" struct prison *pr;\n"
+"...\n"
+" p = td->td_proc;\n"
+"...\n"
+" pr = prison_find(uap->jid);\n"
+"...\n"
+" change_root(pr->pr_root, td);\n"
+"...\n"
+" newcred->cr_prison = pr;\n"
+" p->p_ucred = newcred;\n"
+"...\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:316
+msgid ""
+"When a process is forked from its parent process, the man:fork[2] system "
+"call uses `crhold()` to maintain the credential for the newly forked "
+"process. It inherently keep the newly forked child's credential consistent "
+"with its parent, so the child process is also jailed."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:323
+#, no-wrap
+msgid ""
+"/usr/src/sys/kern/kern_fork.c:\n"
+"p2->p_ucred = crhold(td->td_ucred);\n"
+"...\n"
+"td2->td_ucred = crhold(p2->p_ucred);\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:326
+#, no-wrap
+msgid "Restrictions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:329
+msgid ""
+"Throughout the kernel there are access restrictions relating to jailed "
+"processes. Usually, these restrictions only check whether the process is "
+"jailed, and if so, returns an error. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:334
+#, no-wrap
+msgid ""
+"if (jailed(td->td_ucred))\n"
+" return (EPERM);\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:336
+#, no-wrap
+msgid "SysV IPC"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:339
+msgid ""
+"System V IPC is based on messages. Processes can send each other these "
+"messages which tell them how to act. The functions which deal with messages "
+"are: man:msgctl[3], man:msgget[3], man:msgsnd[3] and man:msgrcv[3]. Earlier, "
+"I mentioned that there were certain sysctls you could turn on or off in "
+"order to affect the behavior of jail. One of these sysctls was `security."
+"jail.sysvipc_allowed`. By default, this sysctl is set to 0. If it were set "
+"to 1, it would defeat the whole purpose of having a jail; privileged users "
+"from the jail would be able to affect processes outside the jailed "
+"environment. The difference between a message and a signal is that the "
+"message only consists of the signal number."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:341
+msgid "[.filename]#/usr/src/sys/kern/sysv_msg.c#:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:343
+msgid ""
+"`msgget(key, msgflg)`: `msgget` returns (and possibly creates) a message "
+"descriptor that designates a message queue for use in other functions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:344
+msgid ""
+"`msgctl(msgid, cmd, buf)`: Using this function, a process can query the "
+"status of a message descriptor."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:345
+msgid ""
+"`msgsnd(msgid, msgp, msgsz, msgflg)`: `msgsnd` sends a message to a process."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:346
+msgid ""
+"`msgrcv(msgid, msgp, msgsz, msgtyp, msgflg)`: a process receives messages "
+"using this function"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:348
+msgid ""
+"In each of the system calls corresponding to these functions, there is this "
+"conditional:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:354
+#, no-wrap
+msgid ""
+"/usr/src/sys/kern/sysv_msg.c:\n"
+"if (!jail_sysvipc_allowed && jailed(td->td_ucred))\n"
+" return (ENOSYS);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:357
+msgid ""
+"Semaphore system calls allow processes to synchronize execution by doing a "
+"set of operations atomically on a set of semaphores. Basically semaphores "
+"provide another way for processes lock resources. However, process waiting "
+"on a semaphore, that is being used, will sleep until the resources are "
+"relinquished. The following semaphore system calls are blocked inside a "
+"jail: man:semget[2], man:semctl[2] and man:semop[2]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:359
+msgid "[.filename]#/usr/src/sys/kern/sysv_sem.c#:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:361
+msgid ""
+"`semctl(semid, semnum, cmd, ...)`: `semctl` does the specified `cmd` on the "
+"semaphore queue indicated by `semid`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:362
+msgid ""
+"`semget(key, nsems, flag)`: `semget` creates an array of semaphores, "
+"corresponding to `key`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:364
+msgid "`key and flag take on the same meaning as they do in msgget.`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:365
+msgid ""
+"`semop(semid, array, nops)`: `semop` performs a group of operations "
+"indicated by `array`, to the set of semaphores identified by `semid`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:367
+msgid ""
+"System V IPC allows for processes to share memory. Processes can communicate "
+"directly with each other by sharing parts of their virtual address space and "
+"then reading and writing data stored in the shared memory. These system "
+"calls are blocked within a jailed environment: man:shmdt[2], man:shmat[2], "
+"man:shmctl[2] and man:shmget[2]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:369
+msgid "[.filename]#/usr/src/sys/kern/sysv_shm.c#:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:371
+msgid ""
+"`shmctl(shmid, cmd, buf)`: `shmctl` does various control operations on the "
+"shared memory region identified by `shmid`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:372
+msgid ""
+"`shmget(key, size, flag)`: `shmget` accesses or creates a shared memory "
+"region of `size` bytes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:373
+msgid ""
+"`shmat(shmid, addr, flag)`: `shmat` attaches a shared memory region "
+"identified by `shmid` to the address space of a process."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:374
+msgid ""
+"`shmdt(addr)`: `shmdt` detaches the shared memory region previously attached "
+"at `addr`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:375
+#, no-wrap
+msgid "Sockets"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:378
+msgid ""
+"Jail treats the man:socket[2] system call and related lower-level socket "
+"functions in a special manner. In order to determine whether a certain "
+"socket is allowed to be created, it first checks to see if the sysctl "
+"`security.jail.socket_unixiproute_only` is set. If set, sockets are only "
+"allowed to be created if the family specified is either `PF_LOCAL`, "
+"`PF_INET` or `PF_ROUTE`. Otherwise, it returns an error."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:396
+#, no-wrap
+msgid ""
+"/usr/src/sys/kern/uipc_socket.c:\n"
+"int\n"
+"socreate(int dom, struct socket **aso, int type, int proto,\n"
+" struct ucred *cred, struct thread *td)\n"
+"{\n"
+" struct protosw *prp;\n"
+"...\n"
+" if (jailed(cred) && jail_socket_unixiproute_only &&\n"
+" prp->pr_domain->dom_family != PF_LOCAL &&\n"
+" prp->pr_domain->dom_family != PF_INET &&\n"
+" prp->pr_domain->dom_family != PF_ROUTE) {\n"
+" return (EPROTONOSUPPORT);\n"
+" }\n"
+"...\n"
+"}\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:398
+#, no-wrap
+msgid "Berkeley Packet Filter"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:401
+msgid ""
+"The Berkeley Packet Filter provides a raw interface to data link layers in a "
+"protocol independent fashion. BPF is now controlled by the man:devfs[8] "
+"whether it can be used in a jailed environment."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:402
+#, no-wrap
+msgid "Protocols"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:405
+msgid ""
+"There are certain protocols which are very common, such as TCP, UDP, IP and "
+"ICMP. IP and ICMP are on the same level: the network layer 2. There are "
+"certain precautions which are taken in order to prevent a jailed process "
+"from binding a protocol to a certain address only if the `nam` parameter is "
+"set. `nam` is a pointer to a `sockaddr` structure, which describes the "
+"address on which to bind the service. A more exact definition is that "
+"`sockaddr` \"may be used as a template for referring to the identifying tag "
+"and length of each address\". In the function `in_pcbbind_setup()`, `sin` is "
+"a pointer to a `sockaddr_in` structure, which contains the port, address, "
+"length and domain family of the socket which is to be bound. Basically, this "
+"disallows any processes from jail to be able to specify the address that "
+"does not belong to the jail in which the calling process exists."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:442
+#, no-wrap
+msgid ""
+"/usr/src/sys/netinet/in_pcb.c:\n"
+"int\n"
+"in_pcbbind_setup(struct inpcb *inp, struct sockaddr *nam, in_addr_t *laddrp,\n"
+" u_short *lportp, struct ucred *cred)\n"
+"{\n"
+" ...\n"
+" struct sockaddr_in *sin;\n"
+" ...\n"
+" if (nam) {\n"
+" sin = (struct sockaddr_in *)nam;\n"
+" ...\n"
+" if (sin->sin_addr.s_addr != INADDR_ANY)\n"
+" if (prison_ip(cred, 0, &sin->sin_addr.s_addr))\n"
+" return(EINVAL);\n"
+" ...\n"
+" if (lport) {\n"
+" ...\n"
+" if (prison && prison_ip(cred, 0, &sin->sin_addr.s_addr))\n"
+" return (EADDRNOTAVAIL);\n"
+" ...\n"
+" }\n"
+" }\n"
+" if (lport == 0) {\n"
+" ...\n"
+" if (laddr.s_addr != INADDR_ANY)\n"
+" if (prison_ip(cred, 0, &laddr.s_addr))\n"
+" return (EINVAL);\n"
+" ...\n"
+" }\n"
+"...\n"
+" if (prison_ip(cred, 0, &laddr.s_addr))\n"
+" return (EINVAL);\n"
+"...\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:445
+msgid ""
+"You might be wondering what function `prison_ip()` does. `prison_ip()` is "
+"given three arguments, a pointer to the credential(represented by `cred`), "
+"any flags, and an IP address. It returns 1 if the IP address does NOT belong "
+"to the jail or 0 otherwise. As you can see from the code, if it is indeed an "
+"IP address not belonging to the jail, the protocol is not allowed to bind to "
+"that address."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:453
+#, no-wrap
+msgid ""
+"/usr/src/sys/kern/kern_jail.c:\n"
+"int\n"
+"prison_ip(struct ucred *cred, int flag, u_int32_t *ip)\n"
+"{\n"
+" u_int32_t tmp;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:478
+#, no-wrap
+msgid ""
+" if (!jailed(cred))\n"
+" return (0);\n"
+" if (flag)\n"
+" tmp = *ip;\n"
+" else\n"
+" tmp = ntohl(*ip);\n"
+" if (tmp == INADDR_ANY) {\n"
+" if (flag)\n"
+" *ip = cred->cr_prison->pr_ip;\n"
+" else\n"
+" *ip = htonl(cred->cr_prison->pr_ip);\n"
+" return (0);\n"
+" }\n"
+" if (tmp == INADDR_LOOPBACK) {\n"
+" if (flag)\n"
+" *ip = cred->cr_prison->pr_ip;\n"
+" else\n"
+" *ip = htonl(cred->cr_prison->pr_ip);\n"
+" return (0);\n"
+" }\n"
+" if (cred->cr_prison->pr_ip != tmp)\n"
+" return (1);\n"
+" return (0);\n"
+"}\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:480
+#, no-wrap
+msgid "Filesystem"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:483
+msgid ""
+"Even `root` users within the jail are not allowed to unset or modify any "
+"file flags, such as immutable, append-only, and undeleteable flags, if the "
+"securelevel is greater than 0."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/jail/_index.adoc:528
+#, no-wrap
+msgid ""
+"/usr/src/sys/ufs/ufs/ufs_vnops.c:\n"
+"static int\n"
+"ufs_setattr(ap)\n"
+" ...\n"
+"{\n"
+" ...\n"
+" if (!priv_check_cred(cred, PRIV_VFS_SYSFLAGS, 0)) {\n"
+" if (ip->i_flags\n"
+" & (SF_NOUNLINK | SF_IMMUTABLE | SF_APPEND)) {\n"
+" error = securelevel_gt(cred, 0);\n"
+" if (error)\n"
+" return (error);\n"
+" }\n"
+" ...\n"
+" }\n"
+"}\n"
+"/usr/src/sys/kern/kern_priv.c\n"
+"int\n"
+"priv_check_cred(struct ucred *cred, int priv, int flags)\n"
+"{\n"
+" ...\n"
+" error = prison_priv_check(cred, priv);\n"
+" if (error)\n"
+" return (error);\n"
+" ...\n"
+"}\n"
+"/usr/src/sys/kern/kern_jail.c\n"
+"int\n"
+"prison_priv_check(struct ucred *cred, int priv)\n"
+"{\n"
+" ...\n"
+" switch (priv) {\n"
+" ...\n"
+" case PRIV_VFS_SYSFLAGS:\n"
+" if (jail_chflags_allowed)\n"
+" return (0);\n"
+" else\n"
+" return (EPERM);\n"
+" ...\n"
+" }\n"
+" ...\n"
+"}\n"
+msgstr ""
diff --git a/documentation/content/en/books/arch-handbook/kobj/_index.adoc b/documentation/content/en/books/arch-handbook/kobj/_index.adoc
index 50b33bbc37..2f8dbbc24d 100644
--- a/documentation/content/en/books/arch-handbook/kobj/_index.adoc
+++ b/documentation/content/en/books/arch-handbook/kobj/_index.adoc
@@ -6,7 +6,7 @@ description: Kernel Objects
tags: ["kernel objects", "kobj", "guide", "FreeBSD"]
showBookMenu: true
weight: 4
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/kobj/"
---
[[kernel-objects]]
diff --git a/documentation/content/en/books/arch-handbook/kobj/_index.po b/documentation/content/en/books/arch-handbook/kobj/_index.po
new file mode 100644
index 0000000000..99ff6b3d33
--- /dev/null
+++ b/documentation/content/en/books/arch-handbook/kobj/_index.po
@@ -0,0 +1,491 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:20-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:1
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:13
+#, no-wrap
+msgid "Kernel Objects"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:1
+#, no-wrap
+msgid "Chapter 3. Kernel Objects"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:53
+msgid ""
+"Kernel Objects, or _Kobj_ provides an object-oriented C programming system "
+"for the kernel. As such the data being operated on carries the description "
+"of how to operate on it. This allows operations to be added and removed "
+"from an interface at run time and without breaking binary compatibility."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:55
+#, no-wrap
+msgid "Terminology"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:57
+#, no-wrap
+msgid "Object"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:59
+msgid "A set of data - data structure - data allocation."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:60
+#, no-wrap
+msgid "Method"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:62
+msgid "An operation - function."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:63
+#, no-wrap
+msgid "Class"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:65
+msgid "One or more methods."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:66
+#, no-wrap
+msgid "Interface"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:68
+msgid "A standard set of one or more methods."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:70
+#, no-wrap
+msgid "Kobj Operation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:75
+msgid ""
+"Kobj works by generating descriptions of methods. Each description holds a "
+"unique id as well as a default function. The description's address is used "
+"to uniquely identify the method within a class' method table."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:84
+msgid ""
+"A class is built by creating a method table associating one or more "
+"functions with method descriptions. Before use the class is compiled. The "
+"compilation allocates a cache and associates it with the class. A unique id "
+"is assigned to each method description within the method table of the class "
+"if not already done so by another referencing class compilation. For every "
+"method to be used a function is generated by script to qualify arguments and "
+"automatically reference the method description for a lookup. The generated "
+"function looks up the method by using the unique id associated with the "
+"method description as a hash into the cache associated with the object's "
+"class. If the method is not cached the generated function proceeds to use "
+"the class' table to find the method. If the method is found then the "
+"associated function within the class is used; otherwise, the default "
+"function associated with the method description is used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:86
+msgid "These indirections can be visualized as the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:90
+#, no-wrap
+msgid "object->cache<->class\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:93
+#, no-wrap
+msgid "Using Kobj"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:95
+#, no-wrap
+msgid "Structures"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:100
+#, no-wrap
+msgid "struct kobj_method\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:102
+#, no-wrap
+msgid "Functions"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:112
+#, no-wrap
+msgid ""
+"void kobj_class_compile(kobj_class_t cls);\n"
+"void kobj_class_compile_static(kobj_class_t cls, kobj_ops_t ops);\n"
+"void kobj_class_free(kobj_class_t cls);\n"
+"kobj_t kobj_create(kobj_class_t cls, struct malloc_type *mtype, int mflags);\n"
+"void kobj_init(kobj_t obj, kobj_class_t cls);\n"
+"void kobj_delete(kobj_t obj, struct malloc_type *mtype);\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:114
+#, no-wrap
+msgid "Macros"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:122
+#, no-wrap
+msgid ""
+"KOBJ_CLASS_FIELDS\n"
+"KOBJ_FIELDS\n"
+"DEFINE_CLASS(name, methods, size)\n"
+"KOBJMETHOD(NAME, FUNC)\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:124
+#, no-wrap
+msgid "Headers"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:130
+#, no-wrap
+msgid ""
+"<sys/param.h>\n"
+"<sys/kobj.h>\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:132
+#, no-wrap
+msgid "Creating an Interface Template"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:136
+msgid ""
+"The first step in using Kobj is to create an Interface. Creating the "
+"interface involves creating a template that the script [.filename]#src/sys/"
+"kern/makeobjops.pl# can use to generate the header and code for the method "
+"declarations and method lookup functions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:138
+msgid ""
+"Within this template the following keywords are used: `#include`, "
+"`INTERFACE`, `CODE`, `EPILOG`, `HEADER`, `METHOD`, `PROLOG`, `STATICMETHOD`, "
+"and `DEFAULT`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:140
+msgid ""
+"The `#include` statement and what follows it is copied verbatim to the head "
+"of the generated code file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:142
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:153
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:163
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:178
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:191
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:206
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:240
+msgid "For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:146
+#, no-wrap
+msgid "#include <sys/foo.h>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:151
+msgid ""
+"The `INTERFACE` keyword is used to define the interface name. This name is "
+"concatenated with each method name as [interface name]_[method name]. Its "
+"syntax is INTERFACE [interface name];."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:157
+#, no-wrap
+msgid "INTERFACE foo;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:161
+msgid ""
+"The `CODE` keyword copies its arguments verbatim into the code file. Its "
+"syntax is `CODE { [whatever] };`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:172
+#, no-wrap
+msgid ""
+"CODE {\n"
+"\tstruct foo * foo_alloc_null(struct bar *)\n"
+"\t{\n"
+"\t\treturn NULL;\n"
+"\t}\n"
+"};\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:176
+msgid ""
+"The `HEADER` keyword copies its arguments verbatim into the header file. "
+"Its syntax is `HEADER { [whatever] };`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:185
+#, no-wrap
+msgid ""
+"HEADER {\n"
+" struct mumble;\n"
+" struct grumble;\n"
+"};\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:189
+msgid ""
+"The `METHOD` keyword describes a method. Its syntax is `METHOD [return "
+"type] [method name] { [object [, arguments]] };`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:199
+#, no-wrap
+msgid ""
+"METHOD int bar {\n"
+"\tstruct object *;\n"
+"\tstruct foo *;\n"
+"\tstruct bar;\n"
+"};\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:204
+msgid ""
+"The `DEFAULT` keyword may follow the `METHOD` keyword. It extends the "
+"`METHOD` key word to include the default function for method. The extended "
+"syntax is `METHOD [return type] [method name] { [object; [other arguments]] }"
+"DEFAULT [default function];`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:214
+#, no-wrap
+msgid ""
+"METHOD int bar {\n"
+"\tstruct object *;\n"
+"\tstruct foo *;\n"
+"\tint bar;\n"
+"} DEFAULT foo_hack;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:219
+msgid ""
+"The `STATICMETHOD` keyword is used like the `METHOD` keyword except the kobj "
+"data is not at the head of the object structure so casting to kobj_t would "
+"be incorrect. Instead `STATICMETHOD` relies on the Kobj data being "
+"referenced as 'ops'. This is also useful for calling methods directly out "
+"of a class's method table."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:222
+msgid ""
+"The `PROLOG` and `EPILOG` keywords sets inserts code immediately before or "
+"directly after the `METHOD` they are attached to. This feature is used "
+"primarily for profiling situations where it's difficult to obtain the "
+"information in another way."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:224
+msgid "Other complete examples:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:229
+#, no-wrap
+msgid ""
+"src/sys/kern/bus_if.m\n"
+"src/sys/kern/device_if.m\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:231
+#, no-wrap
+msgid "Creating a Class"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:238
+msgid ""
+"The second step in using Kobj is to create a class. A class consists of a "
+"name, a table of methods, and the size of objects if Kobj's object handling "
+"facilities are used. To create the class use the macro `DEFINE_CLASS()`. "
+"To create the method table create an array of kobj_method_t terminated by a "
+"NULL entry. Each non-NULL entry may be created using the macro "
+"`KOBJMETHOD()`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:244
+#, no-wrap
+msgid "DEFINE_CLASS(fooclass, foomethods, sizeof(struct foodata));\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:250
+#, no-wrap
+msgid ""
+"kobj_method_t foomethods[] = {\n"
+"\tKOBJMETHOD(bar_doo, foo_doo),\n"
+"\tKOBJMETHOD(bar_foo, foo_foo),\n"
+"\t{ NULL, NULL}\n"
+"};\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:255
+msgid ""
+"The class must be \"compiled\". Depending on the state of the system at the "
+"time that the class is to be initialized a statically allocated cache, \"ops "
+"table\" have to be used. This can be accomplished by declaring a `struct "
+"kobj_ops` and using `kobj_class_compile_static();` otherwise, "
+"`kobj_class_compile()` should be used."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:256
+#, no-wrap
+msgid "Creating an Object"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:262
+msgid ""
+"The third step in using Kobj involves how to define the object. Kobj object "
+"creation routines assume that Kobj data is at the head of an object. If "
+"this in not appropriate you will have to allocate the object yourself and "
+"then use `kobj_init()` on the Kobj portion of it; otherwise, you may use "
+"`kobj_create()` to allocate and initialize the Kobj portion of the object "
+"automatically. `kobj_init()` may also be used to change the class that an "
+"object uses."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:264
+msgid "To integrate Kobj into the object you should use the macro KOBJ_FIELDS."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:266
+msgid "For example"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:274
+#, no-wrap
+msgid ""
+"struct foo_data {\n"
+"\tKOBJ_FIELDS;\n"
+"\tfoo_foo;\n"
+"\tfoo_bar;\n"
+"};\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:276
+#, no-wrap
+msgid "Calling Methods"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:281
+msgid ""
+"The last step in using Kobj is to simply use the generated functions to use "
+"the desired method within the object's class. This is as simple as using "
+"the interface name and the method name with a few modifications. The "
+"interface name should be concatenated with the method name using a '_' "
+"between them, all in upper case."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:283
+msgid ""
+"For example, if the interface name was foo and the method was bar then the "
+"call would be:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:287
+#, no-wrap
+msgid "[return value = ] FOO_BAR(object [, other parameters]);\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:289
+#, no-wrap
+msgid "Cleaning Up"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/kobj/_index.adoc:291
+msgid ""
+"When an object allocated through `kobj_create()` is no longer needed "
+"`kobj_delete()` may be called on it, and when a class is no longer being "
+"used `kobj_class_free()` may be called on it."
+msgstr ""
diff --git a/documentation/content/en/books/arch-handbook/locking/_index.adoc b/documentation/content/en/books/arch-handbook/locking/_index.adoc
index b4fa6b8a68..d3446249f4 100644
--- a/documentation/content/en/books/arch-handbook/locking/_index.adoc
+++ b/documentation/content/en/books/arch-handbook/locking/_index.adoc
@@ -6,7 +6,7 @@ description: Locking Notes
tags: ["locking", "notes", "SMP", "Mutexes"]
showBookMenu: true
weight: 3
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/locking/"
---
[[locking]]
diff --git a/documentation/content/en/books/arch-handbook/locking/_index.po b/documentation/content/en/books/arch-handbook/locking/_index.po
new file mode 100644
index 0000000000..e10bd4977c
--- /dev/null
+++ b/documentation/content/en/books/arch-handbook/locking/_index.po
@@ -0,0 +1,354 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 10:28-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:1
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:13
+#, no-wrap
+msgid "Locking Notes"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:1
+#, no-wrap
+msgid "Chapter 2. Locking Notes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:51
+msgid ""
+"_This chapter is maintained by the FreeBSD SMP Next Generation Project._"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:53
+msgid ""
+"This document outlines the locking used in the FreeBSD kernel to permit "
+"effective multi-processing within the kernel. Locking can be achieved via "
+"several means. Data structures can be protected by mutexes or man:lockmgr[9] "
+"locks. A few variables are protected simply by always using atomic "
+"operations to access them."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:55
+#, no-wrap
+msgid "Mutexes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:58
+msgid ""
+"A mutex is simply a lock used to guarantee mutual exclusion. Specifically, a "
+"mutex may only be owned by one entity at a time. If another entity wishes to "
+"obtain a mutex that is already owned, it must wait until the mutex is "
+"released. In the FreeBSD kernel, mutexes are owned by processes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:60
+msgid ""
+"Mutexes may be recursively acquired, but they are intended to be held for a "
+"short period of time. Specifically, one may not sleep while holding a mutex. "
+"If you need to hold a lock across a sleep, use a man:lockmgr[9] lock."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:62
+msgid "Each mutex has several properties of interest:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:63
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:91
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:130
+#, no-wrap
+msgid "Variable Name"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:65
+msgid "The name of the struct mtx variable in the kernel source."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:66
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:92
+#, no-wrap
+msgid "Logical Name"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:68
+msgid ""
+"The name of the mutex assigned to it by `mtx_init`. This name is displayed "
+"in KTR trace messages and witness errors and warnings and is used to "
+"distinguish mutexes in the witness code."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:69
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:93
+#, no-wrap
+msgid "Type"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:71
+msgid ""
+"The type of the mutex in terms of the `MTX_*` flags. The meaning for each "
+"flag is related to its meaning as documented in man:mutex[9]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:72
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:105
+#, no-wrap
+msgid "`MTX_DEF`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:74
+msgid "A sleep mutex"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:75
+#, no-wrap
+msgid "`MTX_SPIN`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:77
+msgid "A spin mutex"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:78
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:99
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:111
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:117
+#, no-wrap
+msgid "`MTX_RECURSE`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:80
+msgid "This mutex is allowed to recurse."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:81
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:94
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:132
+#, no-wrap
+msgid "Protectees"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:83
+msgid ""
+"A list of data structures or data structure members that this entry "
+"protects. For data structure members, the name will be in the form of "
+"`structure name`.`member name`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:84
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:96
+#, no-wrap
+msgid "Dependent Functions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:86
+msgid "Functions that can only be called if this mutex is held."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:87
+#, no-wrap
+msgid "Mutex List"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:97
+#, no-wrap
+msgid "sched_lock"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:98
+#, no-wrap
+msgid "\"sched lock\""
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:98
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:116
+#, no-wrap
+msgid "`MTX_SPIN` \\"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:100
+#, no-wrap
+msgid "`_gmonparam`, `cnt.v_swtch`, `cp_time`, `curpriority`, `mtx`.`mtx_blocked`, `mtx`.`mtx_contested`, `proc`.`p_procq`, `proc`.`p_slpq`, `proc`.`p_sflag`, `proc`.`p_stat`, `proc`.`p_estcpu`, `proc`.`p_cpticks` `proc`.`p_pctcpu`, `proc`.`p_wchan`, `proc`.`p_wmesg`, `proc`.`p_swtime`, `proc`.`p_slptime`, `proc`.`p_runtime`, `proc`.`p_uu`, `proc`.`p_su`, `proc`.`p_iu`, `proc`.`p_uticks`, `proc`.`p_sticks`, `proc`.`p_iticks`, `proc`.`p_oncpu`, `proc`.`p_lastcpu`, `proc`.`p_rqindex`, `proc`.`p_heldmtx`, `proc`.`p_blocked`, `proc`.`p_mtxname`, `proc`.`p_contested`, `proc`.`p_priority`, `proc`.`p_usrpri`, `proc`.`p_nativepri`, `proc`.`p_nice`, `proc`.`p_rtprio`, `pscnt`, `slpque`, `itqueuebits`, `itqueues`, `rtqueuebits`, `rtqueues`, `queuebits`, `queues`, `idqueuebits`, `idqueues`, `switchtime`, `switchticks`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:102
+#, no-wrap
+msgid "`setrunqueue`, `remrunqueue`, `mi_switch`, `chooseproc`, `schedclock`, `resetpriority`, `updatepri`, `maybe_resched`, `cpu_switch`, `cpu_throw`, `need_resched`, `resched_wanted`, `clear_resched`, `aston`, `astoff`, `astpending`, `calcru`, `proc_compare`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:103
+#, no-wrap
+msgid "vm86pcb_lock"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:104
+#, no-wrap
+msgid "\"vm86pcb lock\""
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:106
+#, no-wrap
+msgid "`vm86pcb`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:108
+#, no-wrap
+msgid "`vm86_bioscall`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:109
+#, no-wrap
+msgid "Giant"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:110
+#, no-wrap
+msgid "\"Giant\""
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:110
+#, no-wrap
+msgid "`MTX_DEF` \\"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:112
+#, no-wrap
+msgid "nearly everything"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:114
+#, no-wrap
+msgid "lots"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:115
+#, no-wrap
+msgid "callout_lock"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:116
+#, no-wrap
+msgid "\"callout lock\""
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:118
+#, no-wrap
+msgid "`callfree`, `callwheel`, `nextsoftcheck`, `proc`.`p_itcallout`, `proc`.`p_slpcallout`, `softticks`, `ticks`"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:122
+#, no-wrap
+msgid "Shared Exclusive Locks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:125
+msgid ""
+"These locks provide basic reader-writer type functionality and may be held "
+"by a sleeping process. Currently they are backed by man:lockmgr[9]."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:126
+#, no-wrap
+msgid "Shared Exclusive Lock List"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:133
+#, no-wrap
+msgid "`allproc_lock`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:135
+#, no-wrap
+msgid "`allproc` `zombproc` `pidhashtbl` `proc`.`p_list` `proc`.`p_hash` `nextpid`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:136
+#, no-wrap
+msgid "`proctree_lock`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:137
+#, no-wrap
+msgid "`proc`.`p_children` `proc`.`p_sibling`"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:140
+#, no-wrap
+msgid "Atomically Protected Variables"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:143
+msgid ""
+"An atomically protected variable is a special variable that is not protected "
+"by an explicit lock. Instead, all data accesses to the variables use special "
+"atomic operations as described in man:atomic[9]. Very few variables are "
+"treated this way, although other synchronization primitives such as mutexes "
+"are implemented with atomically protected variables."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/locking/_index.adoc:144
+msgid "`mtx`.`mtx_lock`"
+msgstr ""
diff --git a/documentation/content/en/books/arch-handbook/mac/_index.adoc b/documentation/content/en/books/arch-handbook/mac/_index.adoc
index a1ee13c101..a1f07c1fb8 100644
--- a/documentation/content/en/books/arch-handbook/mac/_index.adoc
+++ b/documentation/content/en/books/arch-handbook/mac/_index.adoc
@@ -1,6 +1,6 @@
---
title: Chapter 6. The TrustedBSD MAC Framework
-authors:
+authors:
- author: Chris Costello
email: chris@FreeBSD.org
- author: Robert Watson
@@ -11,7 +11,7 @@ description: The TrustedBSD MAC Framework
tags: ["TrustedBSD", "MAC"]
showBookMenu: true
weight: 7
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/mac/"
---
[[mac]]
@@ -64,34 +64,46 @@ Redistribution and use in source (SGML DocBook) and 'compiled' forms (SGML, HTML
[IMPORTANT]
====
-THIS DOCUMENTATION IS PROVIDED BY THE NETWORKS ASSOCIATES TECHNOLOGY, INC "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 NETWORKS ASSOCIATES TECHNOLOGY, INC 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 DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+THIS DOCUMENTATION IS PROVIDED BY THE NETWORKS ASSOCIATES TECHNOLOGY, INC "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 NETWORKS ASSOCIATES TECHNOLOGY, INC 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 DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
====
[[mac-synopsis]]
== Synopsis
-FreeBSD includes experimental support for several mandatory access control policies, as well as a framework for kernel security extensibility, the TrustedBSD MAC Framework. The MAC Framework is a pluggable access control framework, permitting new security policies to be easily linked into the kernel, loaded at boot, or loaded dynamically at run-time. The framework provides a variety of features to make it easier to implement new security policies, including the ability to easily tag security labels (such as confidentiality information) onto system objects.
+FreeBSD includes experimental support for several mandatory access control policies, as well as a framework for kernel security extensibility, the TrustedBSD MAC Framework.
+The MAC Framework is a pluggable access control framework, permitting new security policies to be easily linked into the kernel, loaded at boot, or loaded dynamically at run-time.
+The framework provides a variety of features to make it easier to implement new security policies, including the ability to easily tag security labels (such as confidentiality information) onto system objects.
This chapter introduces the MAC policy framework and provides documentation for a sample MAC policy module.
[[mac-introduction]]
== Introduction
-The TrustedBSD MAC framework provides a mechanism to allow the compile-time or run-time extension of the kernel access control model. New system policies may be implemented as kernel modules and linked to the kernel; if multiple policy modules are present, their results will be composed. The MAC Framework provides a variety of access control infrastructure services to assist policy writers, including support for transient and persistent policy-agnostic object security labels. This support is currently considered experimental.
+The TrustedBSD MAC framework provides a mechanism to allow the compile-time or run-time extension of the kernel access control model.
+New system policies may be implemented as kernel modules and linked to the kernel; if multiple policy modules are present, their results will be composed.
+The MAC Framework provides a variety of access control infrastructure services to assist policy writers, including support for transient and persistent policy-agnostic object security labels.
+This support is currently considered experimental.
This chapter provides information appropriate for developers of policy modules, as well as potential consumers of MAC-enabled environments, to learn about how the MAC Framework supports access control extension of the kernel.
[[mac-background]]
== Policy Background
-Mandatory Access Control (MAC), refers to a set of access control policies that are mandatorily enforced on users by the operating system. MAC policies may be contrasted with Discretionary Access Control (DAC) protections, by which non-administrative users may (at their discretion) protect objects. In traditional UNIX systems, DAC protections include file permissions and access control lists; MAC protections include process controls preventing inter-user debugging and firewalls. A variety of MAC policies have been formulated by operating system designers and security researches, including the Multi-Level Security (MLS) confidentiality policy, the Biba integrity policy, Role-Based Access Control (RBAC), Domain and Type Enforcement (DTE), and Type Enforcement (TE). Each model bases decisions on a variety of factors, including user identity, role, and security clearance, as well as security labels on objects representing concepts such as data sensitivity and integrity.
+Mandatory Access Control (MAC), refers to a set of access control policies that are mandatorily enforced on users by the operating system.
+MAC policies may be contrasted with Discretionary Access Control (DAC) protections, by which non-administrative users may (at their discretion) protect objects.
+In traditional UNIX systems, DAC protections include file permissions and access control lists; MAC protections include process controls preventing inter-user debugging and firewalls.
+A variety of MAC policies have been formulated by operating system designers and security researches, including the Multi-Level Security (MLS) confidentiality policy, the Biba integrity policy, Role-Based Access Control (RBAC), Domain and Type Enforcement (DTE), and Type Enforcement (TE).
+Each model bases decisions on a variety of factors, including user identity, role, and security clearance, as well as security labels on objects representing concepts such as data sensitivity and integrity.
-The TrustedBSD MAC Framework is capable of supporting policy modules that implement all of these policies, as well as a broad class of system hardening policies, which may use existing security attributes, such as user and group IDs, as well as extended attributes on files, and other system properties. In addition, despite the name, the MAC Framework can also be used to implement purely discretionary policies, as policy modules are given substantial flexibility in how they authorize protections.
+The TrustedBSD MAC Framework is capable of supporting policy modules that implement all of these policies, as well as a broad class of system hardening policies, which may use existing security attributes, such as user and group IDs, as well as extended attributes on files, and other system properties.
+In addition, despite the name, the MAC Framework can also be used to implement purely discretionary policies, as policy modules are given substantial flexibility in how they authorize protections.
[[mac-framework-kernel-arch]]
== MAC Framework Kernel Architecture
-The TrustedBSD MAC Framework permits kernel modules to extend the operating system security policy, as well as providing infrastructure functionality required by many access control modules. If multiple policies are simultaneously loaded, the MAC Framework will usefully (for some definition of useful) compose the results of the policies.
+The TrustedBSD MAC Framework permits kernel modules to extend the operating system security policy, as well as providing infrastructure functionality required by many access control modules.
+If multiple policies are simultaneously loaded, the MAC Framework will usefully (for some definition of useful) compose the results of the policies.
[[mac-framework-kernel-arch-elements]]
=== Kernel Elements
@@ -116,56 +128,103 @@ The MAC Framework contains a number of kernel elements:
The TrustedBSD MAC Framework may be directly managed using sysctl's, loader tunables, and system calls.
-In most cases, sysctl's and loader tunables of the same name modify the same parameters, and control behavior such as enforcement of protections relating to various kernel subsystems. In addition, if MAC debugging support is compiled into the kernel, several counters will be maintained tracking label allocation. It is generally advisable that per-subsystem enforcement controls not be used to control policy behavior in production environments, as they broadly impact the operation of all active policies. Instead, per-policy controls should be preferred, as they provide greater granularity and greater operational consistency for policy modules.
+In most cases, sysctl's and loader tunables of the same name modify the same parameters, and control behavior such as enforcement of protections relating to various kernel subsystems.
+In addition, if MAC debugging support is compiled into the kernel, several counters will be maintained tracking label allocation.
+It is generally advisable that per-subsystem enforcement controls not be used to control policy behavior in production environments, as they broadly impact the operation of all active policies.
+Instead, per-policy controls should be preferred, as they provide greater granularity and greater operational consistency for policy modules.
Loading and unloading of policy modules is performed using the system module management system calls and other system interfaces, including boot loader variables; policy modules will have the opportunity to influence load and unload events, including preventing undesired unloading of the policy.
[[mac-framework-kernel-arch-synchronization]]
=== Policy List Concurrency and Synchronization
-As the set of active policies may change at run-time, and the invocation of entry points is non-atomic, synchronization is required to prevent loading or unloading of policies while an entry point invocation is in progress, freezing the set of active policies for the duration. This is accomplished by means of a framework busy count: whenever an entry point is entered, the busy count is incremented; whenever it is exited, the busy count is decremented. While the busy count is elevated, policy list changes are not permitted, and threads attempting to modify the policy list will sleep until the list is not busy. The busy count is protected by a mutex, and a condition variable is used to wake up sleepers waiting on policy list modifications. One side effect of this synchronization model is that recursion into the MAC Framework from within a policy module is permitted, although not generally used.
+As the set of active policies may change at run-time, and the invocation of entry points is non-atomic, synchronization is required to prevent loading or unloading of policies while an entry point invocation is in progress, freezing the set of active policies for the duration.
+This is accomplished by means of a framework busy count: whenever an entry point is entered, the busy count is incremented; whenever it is exited, the busy count is decremented.
+While the busy count is elevated, policy list changes are not permitted, and threads attempting to modify the policy list will sleep until the list is not busy.
+The busy count is protected by a mutex, and a condition variable is used to wake up sleepers waiting on policy list modifications.
+One side effect of this synchronization model is that recursion into the MAC Framework from within a policy module is permitted, although not generally used.
-Various optimizations are used to reduce the overhead of the busy count, including avoiding the full cost of incrementing and decrementing if the list is empty or contains only static entries (policies that are loaded before the system starts, and cannot be unloaded). A compile-time option is also provided which prevents any change in the set of loaded policies at run-time, which eliminates the mutex locking costs associated with supporting dynamically loaded and unloaded policies as synchronization is no longer required.
+Various optimizations are used to reduce the overhead of the busy count, including avoiding the full cost of incrementing and decrementing if the list is empty or contains only static entries (policies that are loaded before the system starts, and cannot be unloaded).
+A compile-time option is also provided which prevents any change in the set of loaded policies at run-time, which eliminates the mutex locking costs associated with supporting dynamically loaded and unloaded policies as synchronization is no longer required.
As the MAC Framework is not permitted to block in some entry points, a normal sleep lock cannot be used; as a result, it is possible for the load or unload attempt to block for a substantial period of time waiting for the framework to become idle.
[[mac-framework-kernel-arch-label-synchronization]]
=== Label Synchronization
-As kernel objects of interest may generally be accessed from more than one thread at a time, and simultaneous entry of more than one thread into the MAC Framework is permitted, security attribute storage maintained by the MAC Framework is carefully synchronized. In general, existing kernel synchronization on kernel object data is used to protect MAC Framework security labels on the object: for example, MAC labels on sockets are protected using the existing socket mutex. Likewise, semantics for concurrent access are generally identical to those of the container objects: for credentials, copy-on-write semantics are maintained for label contents as with the remainder of the credential structure. The MAC Framework asserts necessary locks on objects when invoked with an object reference. Policy authors must be aware of these synchronization semantics, as they will sometimes limit the types of accesses permitted on labels: for example, when a read-only reference to a credential is passed to a policy via an entry point, only read operations are permitted on the label state attached to the credential.
+As kernel objects of interest may generally be accessed from more than one thread at a time, and simultaneous entry of more than one thread into the MAC Framework is permitted, security attribute storage maintained by the MAC Framework is carefully synchronized.
+In general, existing kernel synchronization on kernel object data is used to protect MAC Framework security labels on the object: for example, MAC labels on sockets are protected using the existing socket mutex.
+Likewise, semantics for concurrent access are generally identical to those of the container objects: for credentials, copy-on-write semantics are maintained for label contents as with the remainder of the credential structure.
+The MAC Framework asserts necessary locks on objects when invoked with an object reference.
+Policy authors must be aware of these synchronization semantics, as they will sometimes limit the types of accesses permitted on labels: for example, when a read-only reference to a credential is passed to a policy via an entry point, only read operations are permitted on the label state attached to the credential.
[[mac-framework-kernel-arch-policy-synchronization]]
=== Policy Synchronization and Concurrency
-Policy modules must be written to assume that many kernel threads may simultaneously enter one more policy entry points due to the parallel and preemptive nature of the FreeBSD kernel. If the policy module makes use of mutable state, this may require the use of synchronization primitives within the policy to prevent inconsistent views on that state resulting in incorrect operation of the policy. Policies will generally be able to make use of existing FreeBSD synchronization primitives for this purpose, including mutexes, sleep locks, condition variables, and counting semaphores. However, policies should be written to employ these primitives carefully, respecting existing kernel lock orders, and recognizing that some entry points are not permitted to sleep, limiting the use of primitives in those entry points to mutexes and wakeup operations.
+Policy modules must be written to assume that many kernel threads may simultaneously enter one more policy entry points due to the parallel and preemptive nature of the FreeBSD kernel.
+If the policy module makes use of mutable state, this may require the use of synchronization primitives within the policy to prevent inconsistent views on that state resulting in incorrect operation of the policy.
+Policies will generally be able to make use of existing FreeBSD synchronization primitives for this purpose, including mutexes, sleep locks, condition variables, and counting semaphores.
+However, policies should be written to employ these primitives carefully, respecting existing kernel lock orders, and recognizing that some entry points are not permitted to sleep, limiting the use of primitives in those entry points to mutexes and wakeup operations.
-When policy modules call out to other kernel subsystems, they will generally need to release any in-policy locks in order to avoid violating the kernel lock order or risking lock recursion. This will maintain policy locks as leaf locks in the global lock order, helping to avoid deadlock.
+When policy modules call out to other kernel subsystems, they will generally need to release any in-policy locks in order to avoid violating the kernel lock order or risking lock recursion.
+This will maintain policy locks as leaf locks in the global lock order, helping to avoid deadlock.
[[mac-framework-kernel-arch-registration]]
=== Policy Registration
-The MAC Framework maintains two lists of active policies: a static list, and a dynamic list. The lists differ only with regards to their locking semantics: an elevated reference count is not required to make use of the static list. When kernel modules containing MAC Framework policies are loaded, the policy module will use `SYSINIT` to invoke a registration function; when a policy module is unloaded, `SYSINIT` will likewise invoke a de-registration function. Registration may fail if a policy module is loaded more than once, if insufficient resources are available for the registration (for example, the policy might require labeling and insufficient labeling state might be available), or other policy prerequisites might not be met (some policies may only be loaded prior to boot). Likewise, de-registration may fail if a policy is flagged as not unloadable.
+The MAC Framework maintains two lists of active policies: a static list, and a dynamic list.
+The lists differ only with regards to their locking semantics: an elevated reference count is not required to make use of the static list.
+When kernel modules containing MAC Framework policies are loaded, the policy module will use `SYSINIT` to invoke a registration function; when a policy module is unloaded, `SYSINIT` will likewise invoke a de-registration function.
+Registration may fail if a policy module is loaded more than once, if insufficient resources are available for the registration (for example, the policy might require labeling and insufficient labeling state might be available), or other policy prerequisites might not be met (some policies may only be loaded prior to boot).
+Likewise, de-registration may fail if a policy is flagged as not unloadable.
[[mac-framework-kernel-arch-entrypoints]]
=== Entry Points
-Kernel services interact with the MAC Framework in two ways: they invoke a series of APIs to notify the framework of relevant events, and they provide a policy-agnostic label structure pointer in security-relevant objects. The label pointer is maintained by the MAC Framework via label management entry points, and permits the Framework to offer a labeling service to policy modules through relatively non-invasive changes to the kernel subsystem maintaining the object. For example, label pointers have been added to processes, process credentials, sockets, pipes, vnodes, Mbufs, network interfaces, IP reassembly queues, and a variety of other security-relevant structures. Kernel services also invoke the MAC Framework when they perform important security decisions, permitting policy modules to augment those decisions based on their own criteria (possibly including data stored in security labels). Most of these security critical decisions will be explicit access control checks; however, some affect more general decision functions such as packet matching for sockets and label transition at program execution.
+Kernel services interact with the MAC Framework in two ways: they invoke a series of APIs to notify the framework of relevant events, and they provide a policy-agnostic label structure pointer in security-relevant objects.
+The label pointer is maintained by the MAC Framework via label management entry points, and permits the Framework to offer a labeling service to policy modules through relatively non-invasive changes to the kernel subsystem maintaining the object.
+For example, label pointers have been added to processes, process credentials, sockets, pipes, vnodes, Mbufs, network interfaces, IP reassembly queues, and a variety of other security-relevant structures.
+Kernel services also invoke the MAC Framework when they perform important security decisions, permitting policy modules to augment those decisions based on their own criteria (possibly including data stored in security labels).
+Most of these security critical decisions will be explicit access control checks; however, some affect more general decision functions such as packet matching for sockets and label transition at program execution.
[[mac-framework-kernel-arch-composition]]
=== Policy Composition
-When more than one policy module is loaded into the kernel at a time, the results of the policy modules will be composed by the framework using a composition operator. This operator is currently hard-coded, and requires that all active policies must approve a request for it to return success. As policies may return a variety of error conditions (success, access denied, object does not exist, ...), a precedence operator selects the resulting error from the set of errors returned by policies. In general, errors indicating that an object does not exist will be preferred to errors indicating that access to an object is denied. While it is not guaranteed that the resulting composition will be useful or secure, we have found that it is for many useful selections of policies. For example, traditional trusted systems often ship with two or more policies using a similar composition.
+When more than one policy module is loaded into the kernel at a time, the results of the policy modules will be composed by the framework using a composition operator.
+This operator is currently hard-coded, and requires that all active policies must approve a request for it to return success.
+As policies may return a variety of error conditions (success, access denied, object does not exist, ...), a precedence operator selects the resulting error from the set of errors returned by policies.
+In general, errors indicating that an object does not exist will be preferred to errors indicating that access to an object is denied.
+While it is not guaranteed that the resulting composition will be useful or secure, we have found that it is for many useful selections of policies.
+For example, traditional trusted systems often ship with two or more policies using a similar composition.
[[mac-framework-kernel-arch-labels]]
=== Labeling Support
-As many interesting access control extensions rely on security labels on objects, the MAC Framework provides a set of policy-agnostic label management system calls covering a variety of user-exposed objects. Common label types include partition identifiers, sensitivity labels, integrity labels, compartments, domains, roles, and types. By policy agnostic, we mean that policy modules are able to completely define the semantics of meta-data associated with an object. Policy modules participate in the internalization and externalization of string-based labels provides by user applications, and can expose multiple label elements to applications if desired.
-
-In-memory labels are stored in slab-allocated `struct label`, which consists of a fixed-length array of unions, each holding a `void *` pointer and a `long`. Policies registering for label storage will be assigned a "slot" identifier, which may be used to dereference the label storage. The semantics of the storage are left entirely up to the policy module: modules are provided with a variety of entry points associated with the kernel object life cycle, including initialization, association/creation, and destruction. Using these interfaces, it is possible to implement reference counting and other storage models. Direct access to the object structure is generally not required by policy modules to retrieve a label, as the MAC Framework generally passes both a pointer to the object and a direct pointer to the object's label into entry points. The primary exception to this rule is the process credential, which must be manually dereferenced to access the credential label. This may change in future revisions of the MAC Framework.
-
-Initialization entry points frequently include a sleeping disposition flag indicating whether or not an initialization is permitted to sleep; if sleeping is not permitted, a failure may be returned to cancel allocation of the label (and hence object). This may occur, for example, in the network stack during interrupt handling, where sleeping is not permitted, or while the caller holds a mutex. Due to the performance cost of maintaining labels on in-flight network packets (Mbufs), policies must specifically declare a requirement that Mbuf labels be allocated. Dynamically loaded policies making use of labels must be able to handle the case where their init function has not been called on an object, as objects may already exist when the policy is loaded. The MAC Framework guarantees that uninitialized label slots will hold a 0 or NULL value, which policies may use to detect uninitialized values. However, as allocation of Mbuf labels is conditional, policies must also be able to handle a NULL label pointer for Mbufs if they have been loaded dynamically.
-
-In the case of file system labels, special support is provided for the persistent storage of security labels in extended attributes. Where available, extended attribute transactions are used to permit consistent compound updates of security labels on vnodes--currently this support is present only in the UFS2 file system. Policy authors may choose to implement multilabel file system object labels using one (or more) extended attributes. For efficiency reasons, the vnode label (`v_label`) is a cache of any on-disk label; policies are able to load values into the cache when the vnode is instantiated, and update the cache as needed. As a result, the extended attribute need not be directly accessed with every access control check.
+As many interesting access control extensions rely on security labels on objects, the MAC Framework provides a set of policy-agnostic label management system calls covering a variety of user-exposed objects.
+Common label types include partition identifiers, sensitivity labels, integrity labels, compartments, domains, roles, and types.
+By policy agnostic, we mean that policy modules are able to completely define the semantics of meta-data associated with an object.
+Policy modules participate in the internalization and externalization of string-based labels provides by user applications, and can expose multiple label elements to applications if desired.
+
+In-memory labels are stored in slab-allocated `struct label`, which consists of a fixed-length array of unions, each holding a `void *` pointer and a `long`.
+Policies registering for label storage will be assigned a "slot" identifier, which may be used to dereference the label storage.
+The semantics of the storage are left entirely up to the policy module: modules are provided with a variety of entry points associated with the kernel object life cycle, including initialization, association/creation, and destruction.
+Using these interfaces, it is possible to implement reference counting and other storage models.
+Direct access to the object structure is generally not required by policy modules to retrieve a label, as the MAC Framework generally passes both a pointer to the object and a direct pointer to the object's label into entry points.
+The primary exception to this rule is the process credential, which must be manually dereferenced to access the credential label.
+This may change in future revisions of the MAC Framework.
+
+Initialization entry points frequently include a sleeping disposition flag indicating whether or not an initialization is permitted to sleep; if sleeping is not permitted, a failure may be returned to cancel allocation of the label (and hence object).
+This may occur, for example, in the network stack during interrupt handling, where sleeping is not permitted, or while the caller holds a mutex.
+Due to the performance cost of maintaining labels on in-flight network packets (Mbufs), policies must specifically declare a requirement that Mbuf labels be allocated.
+Dynamically loaded policies making use of labels must be able to handle the case where their init function has not been called on an object, as objects may already exist when the policy is loaded.
+The MAC Framework guarantees that uninitialized label slots will hold a 0 or NULL value, which policies may use to detect uninitialized values.
+However, as allocation of Mbuf labels is conditional, policies must also be able to handle a NULL label pointer for Mbufs if they have been loaded dynamically.
+
+In the case of file system labels, special support is provided for the persistent storage of security labels in extended attributes.
+Where available, extended attribute transactions are used to permit consistent compound updates of security labels on vnodes--currently this support is present only in the UFS2 file system.
+Policy authors may choose to implement multilabel file system object labels using one (or more) extended attributes.
+For efficiency reasons, the vnode label (`v_label`) is a cache of any on-disk label; policies are able to load values into the cache when the vnode is instantiated, and update the cache as needed.
+As a result, the extended attribute need not be directly accessed with every access control check.
[NOTE]
====
@@ -177,7 +236,11 @@ Currently, if a labeled policy permits dynamic unloading, its state slot cannot
The MAC Framework implements a number of system calls: most of these calls support the policy-agnostic label retrieval and manipulation APIs exposed to user applications.
-The label management calls accept a label description structure, `struct mac`, which contains a series of MAC label elements. Each element contains a character string name, and character string value. Each policy will be given the chance to claim a particular element name, permitting policies to expose multiple independent elements if desired. Policy modules perform the internalization and externalization between kernel labels and user-provided labels via entry points, permitting a variety of semantics. Label management system calls are generally wrapped by user library functions to perform memory allocation and error handling, simplifying user applications that must manage labels.
+The label management calls accept a label description structure, `struct mac`, which contains a series of MAC label elements.
+Each element contains a character string name, and character string value.
+Each policy will be given the chance to claim a particular element name, permitting policies to expose multiple independent elements if desired.
+Policy modules perform the internalization and externalization between kernel labels and user-provided labels via entry points, permitting a variety of semantics.
+Label management system calls are generally wrapped by user library functions to perform memory allocation and error handling, simplifying user applications that must manage labels.
The following MAC-related system calls are present in the FreeBSD kernel:
@@ -191,7 +254,8 @@ The following MAC-related system calls are present in the FreeBSD kernel:
* `mac_get_pid()` may be used to request the label of another process by process id.
* `mac_get_link()` is identical to `mac_get_file()`, only it will not follow a symbolic link if it is the final entry in the path, so may be used to retrieve the label on a symlink.
* `mac_set_link()` is identical to `mac_set_file()`, only it will not follow a symbolic link if it is the final entry in a path, so may be used to manipulate the label on a symlink.
-* `mac_execve()` is identical to the `execve()` system call, only it also accepts a requested label to set the process label to when beginning execution of a new program. This change in label on execution is referred to as a "transition".
+* `mac_execve()` is identical to the `execve()` system call, only it also accepts a requested label to set the process label to when beginning execution of a new program.
+This change in label on execution is referred to as a "transition".
* `mac_get_peer()`, actually implemented via a socket option, retrieves the label of a remote peer on a socket, if available.
In addition to these system calls, the `SIOCSIGMAC` and `SIOCSIFMAC` network interface ioctls permit the labels on network interfaces to be retrieved and set.
@@ -199,7 +263,9 @@ In addition to these system calls, the `SIOCSIGMAC` and `SIOCSIFMAC` network int
[[mac-policy-architecture]]
== MAC Policy Architecture
-Security policies are either linked directly into the kernel, or compiled into loadable kernel modules that may be loaded at boot, or dynamically using the module loading system calls at runtime. Policy modules interact with the system through a set of declared entry points, providing access to a stream of system events and permitting the policy to influence access control decisions. Each policy contains a number of elements:
+Security policies are either linked directly into the kernel, or compiled into loadable kernel modules that may be loaded at boot, or dynamically using the module loading system calls at runtime.
+Policy modules interact with the system through a set of declared entry points, providing access to a stream of system events and permitting the policy to influence access control decisions.
+Each policy contains a number of elements:
* Optional configuration parameters for policy.
* Centralized implementation of the policy logic and parameters.
@@ -229,37 +295,61 @@ static struct mac_policy_ops mac_policy_ops =
};
....
-The MAC policy entry point vector, `mac__policy__ops` in this example, associates functions defined in the module with specific entry points. A complete listing of available entry points and their prototypes may be found in the MAC entry point reference section. Of specific interest during module registration are the .mpo_destroy and .mpo_init entry points. .mpo_init will be invoked once a policy is successfully registered with the module framework but prior to any other entry points becoming active. This permits the policy to perform any policy-specific allocation and initialization, such as initialization of any data or locks. .mpo_destroy will be invoked when a policy module is unloaded to permit releasing of any allocated memory and destruction of locks. Currently, these two entry points are invoked with the MAC policy list mutex held to prevent any other entry points from being invoked: this will be changed, but in the mean time, policies should be careful about what kernel primitives they invoke so as to avoid lock ordering or sleeping problems.
+The MAC policy entry point vector, `mac__policy__ops` in this example, associates functions defined in the module with specific entry points.
+A complete listing of available entry points and their prototypes may be found in the MAC entry point reference section.
+Of specific interest during module registration are the .mpo_destroy and .mpo_init entry points.
+.mpo_init will be invoked once a policy is successfully registered with the module framework but prior to any other entry points becoming active.
+This permits the policy to perform any policy-specific allocation and initialization, such as initialization of any data or locks.
+.mpo_destroy will be invoked when a policy module is unloaded to permit releasing of any allocated memory and destruction of locks.
+Currently, these two entry points are invoked with the MAC policy list mutex held to prevent any other entry points from being invoked: this will be changed, but in the mean time, policies should be careful about what kernel primitives they invoke so as to avoid lock ordering or sleeping problems.
-The policy declaration's module name field exists so that the module may be uniquely identified for the purposes of module dependencies. An appropriate string should be selected. The full string name of the policy is displayed to the user via the kernel log during load and unload events, and also exported when providing status information to userland processes.
+The policy declaration's module name field exists so that the module may be uniquely identified for the purposes of module dependencies.
+An appropriate string should be selected.
+The full string name of the policy is displayed to the user via the kernel log during load and unload events, and also exported when providing status information to userland processes.
[[mac-policy-flags]]
=== Policy Flags
-The policy declaration flags field permits the module to provide the framework with information about its capabilities at the time the module is loaded. Currently, three flags are defined:
+The policy declaration flags field permits the module to provide the framework with information about its capabilities at the time the module is loaded.
+Currently, three flags are defined:
MPC_LOADTIME_FLAG_UNLOADOK::
-This flag indicates that the policy module may be unloaded. If this flag is not provided, then the policy framework will reject requests to unload the module. This flag might be used by modules that allocate label state and are unable to free that state at runtime.
+This flag indicates that the policy module may be unloaded.
+If this flag is not provided, then the policy framework will reject requests to unload the module.
+This flag might be used by modules that allocate label state and are unable to free that state at runtime.
MPC_LOADTIME_FLAG_NOTLATE::
-This flag indicates that the policy module must be loaded and initialized early in the boot process. If the flag is specified, attempts to register the module following boot will be rejected. The flag may be used by policies that require pervasive labeling of all system objects, and cannot handle objects that have not been properly initialized by the policy.
+This flag indicates that the policy module must be loaded and initialized early in the boot process.
+If the flag is specified, attempts to register the module following boot will be rejected.
+The flag may be used by policies that require pervasive labeling of all system objects, and cannot handle objects that have not been properly initialized by the policy.
MPC_LOADTIME_FLAG_LABELMBUFS::
-This flag indicates that the policy module requires labeling of Mbufs, and that memory should always be allocated for the storage of Mbuf labels. By default, the MAC Framework will not allocate label storage for Mbufs unless at least one loaded policy has this flag set. This measurably improves network performance when policies do not require Mbuf labeling. A kernel option, `MAC_ALWAYS_LABEL_MBUF`, exists to force the MAC Framework to allocate Mbuf label storage regardless of the setting of this flag, and may be useful in some environments.
+This flag indicates that the policy module requires labeling of Mbufs, and that memory should always be allocated for the storage of Mbuf labels.
+By default, the MAC Framework will not allocate label storage for Mbufs unless at least one loaded policy has this flag set.
+This measurably improves network performance when policies do not require Mbuf labeling.
+A kernel option, `MAC_ALWAYS_LABEL_MBUF`, exists to force the MAC Framework to allocate Mbuf label storage regardless of the setting of this flag, and may be useful in some environments.
[NOTE]
====
-Policies using the `MPC_LOADTIME_FLAG_LABELMBUFS` without the `MPC_LOADTIME_FLAG_NOTLATE` flag set must be able to correctly handle `NULL` Mbuf label pointers passed into entry points. This is necessary as in-flight Mbufs without label storage may persist after a policy enabling Mbuf labeling has been loaded. If a policy is loaded before the network subsystem is active (i.e., the policy is not being loaded late), then all Mbufs are guaranteed to have label storage.
+Policies using the `MPC_LOADTIME_FLAG_LABELMBUFS` without the `MPC_LOADTIME_FLAG_NOTLATE` flag set must be able to correctly handle `NULL` Mbuf label pointers passed into entry points.
+This is necessary as in-flight Mbufs without label storage may persist after a policy enabling Mbuf labeling has been loaded.
+If a policy is loaded before the network subsystem is active (i.e., the policy is not being loaded late), then all Mbufs are guaranteed to have label storage.
====
[[mac-policy-entry-points]]
=== Policy Entry Points
-Four classes of entry points are offered to policies registered with the framework: entry points associated with the registration and management of policies, entry points denoting initialization, creation, destruction, and other life cycle events for kernel objects, events associated with access control decisions that the policy module may influence, and calls associated with the management of labels on objects. In addition, a `mac_syscall()` entry point is provided so that policies may extend the kernel interface without registering new system calls.
+Four classes of entry points are offered to policies registered with the framework: entry points associated with the registration and management of policies, entry points denoting initialization, creation, destruction, and other life cycle events for kernel objects, events associated with access control decisions that the policy module may influence, and calls associated with the management of labels on objects.
+In addition, a `mac_syscall()` entry point is provided so that policies may extend the kernel interface without registering new system calls.
-Policy module writers should be aware of the kernel locking strategy, as well as what object locks are available during which entry points. Writers should attempt to avoid deadlock scenarios by avoiding grabbing non-leaf locks inside of entry points, and also follow the locking protocol for object access and modification. In particular, writers should be aware that while necessary locks to access objects and their labels are generally held, sufficient locks to modify an object or its label may not be present for all entry points. Locking information for arguments is documented in the MAC framework entry point document.
+Policy module writers should be aware of the kernel locking strategy, as well as what object locks are available during which entry points.
+Writers should attempt to avoid deadlock scenarios by avoiding grabbing non-leaf locks inside of entry points, and also follow the locking protocol for object access and modification.
+In particular, writers should be aware that while necessary locks to access objects and their labels are generally held, sufficient locks to modify an object or its label may not be present for all entry points.
+Locking information for arguments is documented in the MAC framework entry point document.
-Policy entry points will pass a reference to the object label along with the object itself. This permits labeled policies to be unaware of the internals of the object yet still make decisions based on the label. The exception to this is the process credential, which is assumed to be understood by policies as a first class security object in the kernel.
+Policy entry points will pass a reference to the object label along with the object itself.
+This permits labeled policies to be unaware of the internals of the object yet still make decisions based on the label.
+The exception to this is the process credential, which is assumed to be understood by policies as a first class security object in the kernel.
[[mac-entry-point-reference]]
== MAC Policy Entry Point Reference
@@ -272,7 +362,7 @@ Policy entry points will pass a reference to the object label along with the obj
[source,c]
----
-void mpo_init( conf);
+void mpo_init( conf);
struct mac_policy_conf *conf;
----
@@ -288,14 +378,16 @@ struct mac_policy_conf *conf;
|
|===
-Policy load event. The policy list mutex is held, so sleep operations cannot be performed, and calls out to other kernel subsystems must be made with caution. If potentially sleeping memory allocations are required during policy initialization, they should be made using a separate module SYSINIT().
+Policy load event.
+The policy list mutex is held, so sleep operations cannot be performed, and calls out to other kernel subsystems must be made with caution.
+If potentially sleeping memory allocations are required during policy initialization, they should be made using a separate module SYSINIT().
[[mpo-destroy]]
==== `mpo_destroy`
[source,c]
----
-void mpo_destroy( conf);
+void mpo_destroy( conf);
struct mac_policy_conf *conf;
----
@@ -311,16 +403,17 @@ struct mac_policy_conf *conf;
|
|===
-Policy load event. The policy list mutex is held, so caution should be applied.
+Policy load event.
+The policy list mutex is held, so caution should be applied.
[[mac-mpo-syscall]]
==== `mpo_syscall`
[source,c]
----
-int mpo_syscall( td,
- call,
- arg);
+int mpo_syscall( td,
+ call,
+ arg);
struct thread *td;
int call;
void *arg;
@@ -346,7 +439,10 @@ void *arg;
|
|===
-This entry point provides a policy-multiplexed system call so that policies may provide additional services to user processes without registering specific system calls. The policy name provided during registration is used to demux calls from userland, and the arguments will be forwarded to this entry point. When implementing new services, security modules should be sure to invoke appropriate access control checks from the MAC framework as needed. For example, if a policy implements an augmented signal functionality, it should call the necessary signal access control checks to invoke the MAC framework and other registered policies.
+This entry point provides a policy-multiplexed system call so that policies may provide additional services to user processes without registering specific system calls.
+The policy name provided during registration is used to demultiplexer calls from userland, and the arguments will be forwarded to this entry point.
+When implementing new services, security modules should be sure to invoke appropriate access control checks from the MAC framework as needed.
+For example, if a policy implements an augmented signal functionality, it should call the necessary signal access control checks to invoke the MAC framework and other registered policies.
[NOTE]
====
@@ -358,7 +454,7 @@ Modules must currently perform the `copyin()` of the syscall data on their own.
[source,c]
----
-void mpo_thread_userret( td);
+void mpo_thread_userret( td);
struct thread *td;
----
@@ -374,7 +470,11 @@ struct thread *td;
|
|===
-This entry point permits policy modules to perform MAC-related events when a thread returns to user space, via a system call return, trap return, or otherwise. This is required for policies that have floating process labels, as it is not always possible to acquire the process lock at arbitrary points in the stack during system call processing; process labels might represent traditional authentication data, process history information, or other data. To employ this mechanism, intended changes to the process credential label may be stored in the `p_label` protected by a per-policy spin lock, and then set the per-thread `TDF_ASTPENDING` flag and per-process `PS_MACPENDM` flag to schedule a call to the userret entry point. From this entry point, the policy may create a replacement credential with less concern about the locking context. Policy writers are cautioned that event ordering relating to scheduling an AST and the AST being performed may be complex and interlaced in multithreaded applications.
+This entry point permits policy modules to perform MAC-related events when a thread returns to user space, via a system call return, trap return, or otherwise.
+This is required for policies that have floating process labels, as it is not always possible to acquire the process lock at arbitrary points in the stack during system call processing; process labels might represent traditional authentication data, process history information, or other data.
+To employ this mechanism, intended changes to the process credential label may be stored in the `p_label` protected by a per-policy spin lock, and then set the per-thread `TDF_ASTPENDING` flag and per-process `PS_MACPENDM` flag to schedule a call to the `userret` entry point.
+From this entry point, the policy may create a replacement credential with less concern about the locking context.
+Policy writers are cautioned that event ordering relating to scheduling an AST and the AST being performed may be complex and interlaced in multithreaded applications.
[[mac-label-ops]]
=== Label Operations
@@ -384,7 +484,7 @@ This entry point permits policy modules to perform MAC-related events when a thr
[source,c]
----
-void mpo_init_bpfdesc_label( label);
+void mpo_init_bpfdesc_label( label);
struct label *label;
----
@@ -400,14 +500,15 @@ struct label *label;
|
|===
-Initialize the label on a newly instantiated bpfdesc (BPF descriptor). Sleeping is permitted.
+Initialize the label on a newly instantiated bpfdesc (BPF descriptor).
+Sleeping is permitted.
[[mac-mpo-init-cred-label]]
==== `mpo_init_cred_label`
[source,c]
----
-void mpo_init_cred_label( label);
+void mpo_init_cred_label( label);
struct label *label;
----
@@ -423,14 +524,15 @@ struct label *label;
|
|===
-Initialize the label for a newly instantiated user credential. Sleeping is permitted.
+Initialize the label for a newly instantiated user credential.
+Sleeping is permitted.
[[mac-mpo-init-devfsdirent]]
==== `mpo_init_devfsdirent_label`
[source,c]
----
-void mpo_init_devfsdirent_label( label);
+void mpo_init_devfsdirent_label( label);
struct label *label;
----
@@ -446,14 +548,15 @@ struct label *label;
|
|===
-Initialize the label on a newly instantiated devfs entry. Sleeping is permitted.
+Initialize the label on a newly instantiated devfs entry.
+Sleeping is permitted.
[[mac-mpo-init-ifnet]]
==== `mpo_init_ifnet_label`
[source,c]
----
-void mpo_init_ifnet_label( label);
+void mpo_init_ifnet_label( label);
struct label *label;
----
@@ -469,15 +572,16 @@ struct label *label;
|
|===
-Initialize the label on a newly instantiated network interface. Sleeping is permitted.
+Initialize the label on a newly instantiated network interface.
+Sleeping is permitted.
[[mac-mpo-init-ipq]]
==== `mpo_init_ipq_label`
[source,c]
----
-void mpo_init_ipq_label( label,
- flag);
+void mpo_init_ipq_label( label,
+ flag);
struct label *label;
int flag;
----
@@ -498,15 +602,18 @@ int flag;
|
|===
-Initialize the label on a newly instantiated IP fragment reassembly queue. The `flag` field may be one of M_WAITOK and M_NOWAIT, and should be employed to avoid performing a sleeping man:malloc[9] during this initialization call. IP fragment reassembly queue allocation frequently occurs in performance sensitive environments, and the implementation should be careful to avoid sleeping or long-lived operations. This entry point is permitted to fail resulting in the failure to allocate the IP fragment reassembly queue.
+Initialize the label on a newly instantiated IP fragment reassembly queue.
+The `flag` field may be one of M_WAITOK and M_NOWAIT, and should be employed to avoid performing a sleeping man:malloc[9] during this initialization call.
+IP fragment reassembly queue allocation frequently occurs in performance sensitive environments, and the implementation should be careful to avoid sleeping or long-lived operations.
+This entry point is permitted to fail resulting in the failure to allocate the IP fragment reassembly queue.
[[mac-mpo-init-mbuf]]
==== `mpo_init_mbuf_label`
[source,c]
----
-void mpo_init_mbuf_label( flag,
- label);
+void mpo_init_mbuf_label( flag,
+ label);
int flag;
struct label *label;
----
@@ -527,15 +634,18 @@ struct label *label;
|
|===
-Initialize the label on a newly instantiated mbuf packet header (`mbuf`). The `flag` field may be one of M_WAITOK and M_NOWAIT, and should be employed to avoid performing a sleeping man:malloc[9] during this initialization call. Mbuf allocation frequently occurs in performance sensitive environments, and the implementation should be careful to avoid sleeping or long-lived operations. This entry point is permitted to fail resulting in the failure to allocate the mbuf header.
+Initialize the label on a newly instantiated mbuf packet header (`mbuf`).
+The `flag` field may be one of M_WAITOK and M_NOWAIT, and should be employed to avoid performing a sleeping man:malloc[9] during this initialization call.
+Mbuf allocation frequently occurs in performance sensitive environments, and the implementation should be careful to avoid sleeping or long-lived operations.
+This entry point is permitted to fail resulting in the failure to allocate the mbuf header.
[[mac-mpo-init-mount]]
==== `mpo_init_mount_label`
[source,c]
----
-void mpo_init_mount_label( mntlabel,
- fslabel);
+void mpo_init_mount_label( mntlabel,
+ fslabel);
struct label *mntlabel;
struct label *fslabel;
----
@@ -556,14 +666,15 @@ struct label *fslabel;
|
|===
-Initialize the labels on a newly instantiated mount point. Sleeping is permitted.
+Initialize the labels on a newly instantiated mount point.
+Sleeping is permitted.
[[mac-mpo-init-mount-fs-label]]
==== `mpo_init_mount_fs_label`
[source,c]
----
-void mpo_init_mount_fs_label( label);
+void mpo_init_mount_fs_label( label);
struct label *label;
----
@@ -579,14 +690,15 @@ struct label *label;
|
|===
-Initialize the label on a newly mounted file system. Sleeping is permitted
+Initialize the label on a newly mounted file system.
+Sleeping is permitted
[[mac-mpo-init-pipe-label]]
==== `mpo_init_pipe_label`
[source,c]
----
-void mpo_init_pipe_label( label);
+void mpo_init_pipe_label( label);
struct label*label;
----
@@ -602,15 +714,16 @@ struct label*label;
|
|===
-Initialize a label for a newly instantiated pipe. Sleeping is permitted.
+Initialize a label for a newly instantiated pipe.
+Sleeping is permitted.
[[mac-mpo-init-socket]]
==== `mpo_init_socket_label`
[source,c]
----
-void mpo_init_socket_label( label,
- flag);
+void mpo_init_socket_label( label,
+ flag);
struct label *label;
int flag;
----
@@ -631,15 +744,16 @@ int flag;
|
|===
-Initialize a label for a newly instantiated socket. The `flag` field may be one of M_WAITOK and M_NOWAIT, and should be employed to avoid performing a sleeping man:malloc[9] during this initialization call.
+Initialize a label for a newly instantiated socket.
+The `flag` field may be one of M_WAITOK and M_NOWAIT, and should be employed to avoid performing a sleeping man:malloc[9] during this initialization call.
[[mac-mpo-init-socket-peer-label]]
==== `mpo_init_socket_peer_label`
[source,c]
----
-void mpo_init_socket_peer_label( label,
- flag);
+void mpo_init_socket_peer_label( label,
+ flag);
struct label *label;
int flag;
----
@@ -660,14 +774,15 @@ int flag;
|
|===
-Initialize the peer label for a newly instantiated socket. The `flag` field may be one of M_WAITOK and M_NOWAIT, and should be employed to avoid performing a sleeping man:malloc[9] during this initialization call.
+Initialize the peer label for a newly instantiated socket.
+The `flag` field may be one of M_WAITOK and M_NOWAIT, and should be employed to avoid performing a sleeping man:malloc[9] during this initialization call.
[[mac-mpo-init-proc-label]]
==== `mpo_init_proc_label`
[source,c]
----
-void mpo_init_proc_label( label);
+void mpo_init_proc_label( label);
struct label *label;
----
@@ -683,14 +798,15 @@ struct label *label;
|
|===
-Initialize the label for a newly instantiated process. Sleeping is permitted.
+Initialize the label for a newly instantiated process.
+Sleeping is permitted.
[[mac-mpo-init-vnode]]
==== `mpo_init_vnode_label`
[source,c]
----
-void mpo_init_vnode_label( label);
+void mpo_init_vnode_label( label);
struct label *label;
----
@@ -706,14 +822,15 @@ struct label *label;
|
|===
-Initialize the label on a newly instantiated vnode. Sleeping is permitted.
+Initialize the label on a newly instantiated vnode.
+Sleeping is permitted.
[[mac-mpo-destroy-bpfdesc]]
==== `mpo_destroy_bpfdesc_label`
[source,c]
----
-void mpo_destroy_bpfdesc_label( label);
+void mpo_destroy_bpfdesc_label( label);
struct label *label;
----
@@ -729,14 +846,15 @@ struct label *label;
|
|===
-Destroy the label on a BPF descriptor. In this entry point a policy should free any internal storage associated with `label` so that it may be destroyed.
+Destroy the label on a BPF descriptor.
+In this entry point a policy should free any internal storage associated with `label` so that it may be destroyed.
[[mac-mpo-destroy-cred]]
==== `mpo_destroy_cred_label`
[source,c]
----
-void mpo_destroy_cred_label( label);
+void mpo_destroy_cred_label( label);
struct label *label;
----
@@ -752,14 +870,15 @@ struct label *label;
|
|===
-Destroy the label on a credential. In this entry point, a policy module should free any internal storage associated with `label` so that it may be destroyed.
+Destroy the label on a credential.
+In this entry point, a policy module should free any internal storage associated with `label` so that it may be destroyed.
[[mac-mpo-destroy-devfsdirent]]
==== `mpo_destroy_devfsdirent_label`
[source,c]
----
-void mpo_destroy_devfsdirent_label( label);
+void mpo_destroy_devfsdirent_label( label);
struct label *label;
----
@@ -775,14 +894,15 @@ struct label *label;
|
|===
-Destroy the label on a devfs entry. In this entry point, a policy module should free any internal storage associated with `label` so that it may be destroyed.
+Destroy the label on a devfs entry.
+In this entry point, a policy module should free any internal storage associated with `label` so that it may be destroyed.
[[mac-mpo-destroy-ifnet-label]]
==== `mpo_destroy_ifnet_label`
[source,c]
----
-void mpo_destroy_ifnet_label( label);
+void mpo_destroy_ifnet_label( label);
struct label *label;
----
@@ -798,14 +918,15 @@ struct label *label;
|
|===
-Destroy the label on a removed interface. In this entry point, a policy module should free any internal storage associated with `label` so that it may be destroyed.
+Destroy the label on a removed interface.
+In this entry point, a policy module should free any internal storage associated with `label` so that it may be destroyed.
[[mac-mpo-destroy-ipq-label]]
==== `mpo_destroy_ipq_label`
[source,c]
----
-void mpo_destroy_ipq_label( label);
+void mpo_destroy_ipq_label( label);
struct label *label;
----
@@ -821,14 +942,15 @@ struct label *label;
|
|===
-Destroy the label on an IP fragment queue. In this entry point, a policy module should free any internal storage associated with `label` so that it may be destroyed.
+Destroy the label on an IP fragment queue.
+In this entry point, a policy module should free any internal storage associated with `label` so that it may be destroyed.
[[mac-mpo-destroy-mbuf-label]]
==== `mpo_destroy_mbuf_label`
[source,c]
----
-void mpo_destroy_mbuf_label( label);
+void mpo_destroy_mbuf_label( label);
struct label *label;
----
@@ -844,14 +966,15 @@ struct label *label;
|
|===
-Destroy the label on an mbuf header. In this entry point, a policy module should free any internal storage associated with `label` so that it may be destroyed.
+Destroy the label on an mbuf header.
+In this entry point, a policy module should free any internal storage associated with `label` so that it may be destroyed.
[[mac-mpo-destroy-mount-label]]
==== `mpo_destroy_mount_label`
[source,c]
----
-void mpo_destroy_mount_label( label);
+void mpo_destroy_mount_label( label);
struct label *label;
----
@@ -867,15 +990,16 @@ struct label *label;
|
|===
-Destroy the labels on a mount point. In this entry point, a policy module should free the internal storage associated with `mntlabel` so that they may be destroyed.
+Destroy the labels on a mount point.
+In this entry point, a policy module should free the internal storage associated with `mntlabel` so that they may be destroyed.
[[mac-mpo-destroy-mount]]
==== `mpo_destroy_mount_label`
[source,c]
----
-void mpo_destroy_mount_label( mntlabel,
- fslabel);
+void mpo_destroy_mount_label( mntlabel,
+ fslabel);
struct label *mntlabel;
struct label *fslabel;
----
@@ -896,14 +1020,15 @@ struct label *fslabel;
|
|===
-Destroy the labels on a mount point. In this entry point, a policy module should free the internal storage associated with `mntlabel` and `fslabel` so that they may be destroyed.
+Destroy the labels on a mount point.
+In this entry point, a policy module should free the internal storage associated with `mntlabel` and `fslabel` so that they may be destroyed.
[[mac-mpo-destroy-socket]]
==== `mpo_destroy_socket_label`
[source,c]
----
-void mpo_destroy_socket_label( label);
+void mpo_destroy_socket_label( label);
struct label *label;
----
@@ -919,14 +1044,15 @@ struct label *label;
|
|===
-Destroy the label on a socket. In this entry point, a policy module should free any internal storage associated with `label` so that it may be destroyed.
+Destroy the label on a socket.
+In this entry point, a policy module should free any internal storage associated with `label` so that it may be destroyed.
[[mac-mpo-destroy-socket-peer-label]]
==== `mpo_destroy_socket_peer_label`
[source,c]
----
-void mpo_destroy_socket_peer_label( peerlabel);
+void mpo_destroy_socket_peer_label( peerlabel);
struct label *peerlabel;
----
@@ -942,14 +1068,15 @@ struct label *peerlabel;
|
|===
-Destroy the peer label on a socket. In this entry point, a policy module should free any internal storage associated with `label` so that it may be destroyed.
+Destroy the peer label on a socket.
+In this entry point, a policy module should free any internal storage associated with `label` so that it may be destroyed.
[[mac-mpo-destroy-pipe-label]]
==== `mpo_destroy_pipe_label`
[source,c]
----
-void mpo_destroy_pipe_label( label);
+void mpo_destroy_pipe_label( label);
struct label *label;
----
@@ -965,14 +1092,15 @@ struct label *label;
|
|===
-Destroy the label on a pipe. In this entry point, a policy module should free any internal storage associated with `label` so that it may be destroyed.
+Destroy the label on a pipe.
+In this entry point, a policy module should free any internal storage associated with `label` so that it may be destroyed.
[[mac-mpo-destroy-proc-label]]
==== `mpo_destroy_proc_label`
[source,c]
----
-void mpo_destroy_proc_label( label);
+void mpo_destroy_proc_label( label);
struct label *label;
----
@@ -988,14 +1116,15 @@ struct label *label;
|
|===
-Destroy the label on a process. In this entry point, a policy module should free any internal storage associated with `label` so that it may be destroyed.
+Destroy the label on a process.
+In this entry point, a policy module should free any internal storage associated with `label` so that it may be destroyed.
[[mac-mpo-destroy-vnode-label]]
==== `mpo_destroy_vnode_label`
[source,c]
----
-void mpo_destroy_vnode_label( label);
+void mpo_destroy_vnode_label( label);
struct label *label;
----
@@ -1011,15 +1140,16 @@ struct label *label;
|
|===
-Destroy the label on a vnode. In this entry point, a policy module should free any internal storage associated with `label` so that it may be destroyed.
+Destroy the label on a vnode.
+In this entry point, a policy module should free any internal storage associated with `label` so that it may be destroyed.
[[mac-mpo-copy-mbuf-label]]
==== `mpo_copy_mbuf_label`
[source,c]
----
-void mpo_copy_mbuf_label( src,
- dest);
+void mpo_copy_mbuf_label( src,
+ dest);
struct label *src;
struct label *dest;
----
@@ -1047,8 +1177,8 @@ Copy the label information in `src` into `dest`.
[source,c]
----
-void mpo_copy_pipe_label( src,
- dest);
+void mpo_copy_pipe_label( src,
+ dest);
struct label *src;
struct label *dest;
----
@@ -1076,8 +1206,8 @@ Copy the label information in `src` into `dest`.
[source,c]
----
-void mpo_copy_vnode_label( src,
- dest);
+void mpo_copy_vnode_label( src,
+ dest);
struct label *src;
struct label *dest;
----
@@ -1105,10 +1235,10 @@ Copy the label information in `src` into `dest`.
[source,c]
----
-int mpo_externalize_cred_label( label,
- element_name,
- sb,
- *claimed);
+int mpo_externalize_cred_label( label,
+ element_name,
+ sb,
+ *claimed);
struct label *label;
char *element_name;
struct sbuf *sb;
@@ -1139,17 +1269,22 @@ int *claimed;
|
|===
-Produce an externalized label based on the label structure passed. An externalized label consists of a text representation of the label contents that can be used with userland applications and read by the user. Currently, all policies' `externalize` entry points will be called, so the implementation should check the contents of `element_name` before attempting to fill in `sb`. If `element_name` does not match the name of your policy, simply return 0. Only return nonzero if an error occurs while externalizing the label data. Once the policy fills in `element_data`, `*claimed` should be incremented.
+Produce an externalized label based on the label structure passed.
+An externalized label consists of a text representation of the label contents that can be used with userland applications and read by the user.
+Currently, all policies' `externalize` entry points will be called, so the implementation should check the contents of `element_name` before attempting to fill in `sb`.
+If `element_name` does not match the name of your policy, simply return 0.
+Only return nonzero if an error occurs while externalizing the label data.
+Once the policy fills in `element_data`, `*claimed` should be incremented.
[[mac-mpo-externalize-ifnet-label]]
==== `mpo_externalize_ifnet_label`
[source,c]
----
-int mpo_externalize_ifnet_label( label,
- element_name,
- sb,
- *claimed);
+int mpo_externalize_ifnet_label( label,
+ element_name,
+ sb,
+ *claimed);
struct label *label;
char *element_name;
struct sbuf *sb;
@@ -1180,17 +1315,22 @@ int *claimed;
|
|===
-Produce an externalized label based on the label structure passed. An externalized label consists of a text representation of the label contents that can be used with userland applications and read by the user. Currently, all policies' `externalize` entry points will be called, so the implementation should check the contents of `element_name` before attempting to fill in `sb`. If `element_name` does not match the name of your policy, simply return 0. Only return nonzero if an error occurs while externalizing the label data. Once the policy fills in `element_data`, `*claimed` should be incremented.
+Produce an externalized label based on the label structure passed.
+An externalized label consists of a text representation of the label contents that can be used with userland applications and read by the user.
+Currently, all policies' `externalize` entry points will be called, so the implementation should check the contents of `element_name` before attempting to fill in `sb`.
+If `element_name` does not match the name of your policy, simply return 0.
+Only return nonzero if an error occurs while externalizing the label data.
+Once the policy fills in `element_data`, `*claimed` should be incremented.
[[mac-mpo-externalize-pipe-label]]
==== `mpo_externalize_pipe_label`
[source,c]
----
-int mpo_externalize_pipe_label( label,
- element_name,
- sb,
- *claimed);
+int mpo_externalize_pipe_label( label,
+ element_name,
+ sb,
+ *claimed);
struct label *label;
char *element_name;
struct sbuf *sb;
@@ -1221,17 +1361,22 @@ int *claimed;
|
|===
-Produce an externalized label based on the label structure passed. An externalized label consists of a text representation of the label contents that can be used with userland applications and read by the user. Currently, all policies' `externalize` entry points will be called, so the implementation should check the contents of `element_name` before attempting to fill in `sb`. If `element_name` does not match the name of your policy, simply return 0. Only return nonzero if an error occurs while externalizing the label data. Once the policy fills in `element_data`, `*claimed` should be incremented.
+Produce an externalized label based on the label structure passed.
+An externalized label consists of a text representation of the label contents that can be used with userland applications and read by the user.
+Currently, all policies' `externalize` entry points will be called, so the implementation should check the contents of `element_name` before attempting to fill in `sb`.
+If `element_name` does not match the name of your policy, simply return 0.
+Only return nonzero if an error occurs while externalizing the label data.
+Once the policy fills in `element_data`, `*claimed` should be incremented.
[[mac-mpo-externalize-socket-label]]
==== `mpo_externalize_socket_label`
[source,c]
----
-int mpo_externalize_socket_label( label,
- element_name,
- sb,
- *claimed);
+int mpo_externalize_socket_label( label,
+ element_name,
+ sb,
+ *claimed);
struct label *label;
char *element_name;
struct sbuf *sb;
@@ -1262,17 +1407,22 @@ int *claimed;
|
|===
-Produce an externalized label based on the label structure passed. An externalized label consists of a text representation of the label contents that can be used with userland applications and read by the user. Currently, all policies' `externalize` entry points will be called, so the implementation should check the contents of `element_name` before attempting to fill in `sb`. If `element_name` does not match the name of your policy, simply return 0. Only return nonzero if an error occurs while externalizing the label data. Once the policy fills in `element_data`, `*claimed` should be incremented.
+Produce an externalized label based on the label structure passed.
+An externalized label consists of a text representation of the label contents that can be used with userland applications and read by the user.
+Currently, all policies' `externalize` entry points will be called, so the implementation should check the contents of `element_name` before attempting to fill in `sb`.
+If `element_name` does not match the name of your policy, simply return 0.
+Only return nonzero if an error occurs while externalizing the label data.
+Once the policy fills in `element_data`, `*claimed` should be incremented.
[[mac-mpo-externalize-socket-peer-label]]
==== `mpo_externalize_socket_peer_label`
[source,c]
----
-int mpo_externalize_socket_peer_label( label,
- element_name,
- sb,
- *claimed);
+int mpo_externalize_socket_peer_label( label,
+ element_name,
+ sb,
+ *claimed);
struct label *label;
char *element_name;
struct sbuf *sb;
@@ -1303,17 +1453,22 @@ int *claimed;
|
|===
-Produce an externalized label based on the label structure passed. An externalized label consists of a text representation of the label contents that can be used with userland applications and read by the user. Currently, all policies' `externalize` entry points will be called, so the implementation should check the contents of `element_name` before attempting to fill in `sb`. If `element_name` does not match the name of your policy, simply return 0. Only return nonzero if an error occurs while externalizing the label data. Once the policy fills in `element_data`, `*claimed` should be incremented.
+Produce an externalized label based on the label structure passed.
+An externalized label consists of a text representation of the label contents that can be used with userland applications and read by the user.
+Currently, all policies' `externalize` entry points will be called, so the implementation should check the contents of `element_name` before attempting to fill in `sb`.
+If `element_name` does not match the name of your policy, simply return 0.
+Only return nonzero if an error occurs while externalizing the label data.
+Once the policy fills in `element_data`, `*claimed` should be incremented.
[[mac-mpo-externalize-vnode-label]]
==== `mpo_externalize_vnode_label`
[source,c]
----
-int mpo_externalize_vnode_label( label,
- element_name,
- sb,
- *claimed);
+int mpo_externalize_vnode_label( label,
+ element_name,
+ sb,
+ *claimed);
struct label *label;
char *element_name;
struct sbuf *sb;
@@ -1344,17 +1499,22 @@ int *claimed;
|
|===
-Produce an externalized label based on the label structure passed. An externalized label consists of a text representation of the label contents that can be used with userland applications and read by the user. Currently, all policies' `externalize` entry points will be called, so the implementation should check the contents of `element_name` before attempting to fill in `sb`. If `element_name` does not match the name of your policy, simply return 0. Only return nonzero if an error occurs while externalizing the label data. Once the policy fills in `element_data`, `*claimed` should be incremented.
+Produce an externalized label based on the label structure passed.
+An externalized label consists of a text representation of the label contents that can be used with userland applications and read by the user.
+Currently, all policies' `externalize` entry points will be called, so the implementation should check the contents of `element_name` before attempting to fill in `sb`.
+If `element_name` does not match the name of your policy, simply return 0.
+Only return nonzero if an error occurs while externalizing the label data.
+Once the policy fills in `element_data`, `*claimed` should be incremented.
[[mac-mpo-internalize-cred-label]]
==== `mpo_internalize_cred_label`
[source,c]
----
-int mpo_internalize_cred_label( label,
- element_name,
- element_data,
- claimed);
+int mpo_internalize_cred_label( label,
+ element_name,
+ element_data,
+ claimed);
struct label *label;
char *element_name;
char *element_data;
@@ -1385,17 +1545,19 @@ int *claimed;
|
|===
-Produce an internal label structure based on externalized label data in text format. Currently, all policies' `internalize` entry points are called when internalization is requested, so the implementation should compare the contents of `element_name` to its own name in order to be sure it should be internalizing the data in `element_data`. Just as in the `externalize` entry points, the entry point should return 0 if `element_name` does not match its own name, or when data can successfully be internalized, in which case `*claimed` should be incremented.
+Produce an internal label structure based on externalized label data in text format.
+Currently, all policies' `internalize` entry points are called when internalization is requested, so the implementation should compare the contents of `element_name` to its own name in order to be sure it should be internalizing the data in `element_data`.
+Just as in the `externalize` entry points, the entry point should return 0 if `element_name` does not match its own name, or when data can successfully be internalized, in which case `*claimed` should be incremented.
[[mac-mpo-internalize-ifnet-label]]
==== `mpo_internalize_ifnet_label`
[source,c]
----
-int mpo_internalize_ifnet_label( label,
- element_name,
- element_data,
- claimed);
+int mpo_internalize_ifnet_label( label,
+ element_name,
+ element_data,
+ claimed);
struct label *label;
char *element_name;
char *element_data;
@@ -1426,17 +1588,19 @@ int *claimed;
|
|===
-Produce an internal label structure based on externalized label data in text format. Currently, all policies' `internalize` entry points are called when internalization is requested, so the implementation should compare the contents of `element_name` to its own name in order to be sure it should be internalizing the data in `element_data`. Just as in the `externalize` entry points, the entry point should return 0 if `element_name` does not match its own name, or when data can successfully be internalized, in which case `*claimed` should be incremented.
+Produce an internal label structure based on externalized label data in text format.
+Currently, all policies' `internalize` entry points are called when internalization is requested, so the implementation should compare the contents of `element_name` to its own name in order to be sure it should be internalizing the data in `element_data`.
+Just as in the `externalize` entry points, the entry point should return 0 if `element_name` does not match its own name, or when data can successfully be internalized, in which case `*claimed` should be incremented.
[[mac-mpo-internalize-pipe-label]]
==== `mpo_internalize_pipe_label`
[source,c]
----
-int mpo_internalize_pipe_label( label,
- element_name,
- element_data,
- claimed);
+int mpo_internalize_pipe_label( label,
+ element_name,
+ element_data,
+ claimed);
struct label *label;
char *element_name;
char *element_data;
@@ -1467,17 +1631,19 @@ int *claimed;
|
|===
-Produce an internal label structure based on externalized label data in text format. Currently, all policies' `internalize` entry points are called when internalization is requested, so the implementation should compare the contents of `element_name` to its own name in order to be sure it should be internalizing the data in `element_data`. Just as in the `externalize` entry points, the entry point should return 0 if `element_name` does not match its own name, or when data can successfully be internalized, in which case `*claimed` should be incremented.
+Produce an internal label structure based on externalized label data in text format.
+Currently, all policies' `internalize` entry points are called when internalization is requested, so the implementation should compare the contents of `element_name` to its own name in order to be sure it should be internalizing the data in `element_data`.
+Just as in the `externalize` entry points, the entry point should return 0 if `element_name` does not match its own name, or when data can successfully be internalized, in which case `*claimed` should be incremented.
[[mac-mpo-internalize-socket-label]]
==== `mpo_internalize_socket_label`
[source,c]
----
-int mpo_internalize_socket_label( label,
- element_name,
- element_data,
- claimed);
+int mpo_internalize_socket_label( label,
+ element_name,
+ element_data,
+ claimed);
struct label *label;
char *element_name;
char *element_data;
@@ -1508,17 +1674,19 @@ int *claimed;
|
|===
-Produce an internal label structure based on externalized label data in text format. Currently, all policies' `internalize` entry points are called when internalization is requested, so the implementation should compare the contents of `element_name` to its own name in order to be sure it should be internalizing the data in `element_data`. Just as in the `externalize` entry points, the entry point should return 0 if `element_name` does not match its own name, or when data can successfully be internalized, in which case `*claimed` should be incremented.
+Produce an internal label structure based on externalized label data in text format.
+Currently, all policies' `internalize` entry points are called when internalization is requested, so the implementation should compare the contents of `element_name` to its own name in order to be sure it should be internalizing the data in `element_data`.
+Just as in the `externalize` entry points, the entry point should return 0 if `element_name` does not match its own name, or when data can successfully be internalized, in which case `*claimed` should be incremented.
[[mac-mpo-internalize-vnode-label]]
==== `mpo_internalize_vnode_label`
[source,c]
----
-int mpo_internalize_vnode_label( label,
- element_name,
- element_data,
- claimed);
+int mpo_internalize_vnode_label( label,
+ element_name,
+ element_data,
+ claimed);
struct label *label;
char *element_name;
char *element_data;
@@ -1549,12 +1717,19 @@ int *claimed;
|
|===
-Produce an internal label structure based on externalized label data in text format. Currently, all policies' `internalize` entry points are called when internalization is requested, so the implementation should compare the contents of `element_name` to its own name in order to be sure it should be internalizing the data in `element_data`. Just as in the `externalize` entry points, the entry point should return 0 if `element_name` does not match its own name, or when data can successfully be internalized, in which case `*claimed` should be incremented.
+Produce an internal label structure based on externalized label data in text format.
+Currently, all policies' `internalize` entry points are called when internalization is requested, so the implementation should compare the contents of `element_name` to its own name in order to be sure it should be internalizing the data in `element_data`.
+Just as in the `externalize` entry points, the entry point should return 0 if `element_name` does not match its own name, or when data can successfully be internalized, in which case `*claimed` should be incremented.
[[mac-label-events]]
=== Label Events
-This class of entry points is used by the MAC framework to permit policies to maintain label information on kernel objects. For each labeled kernel object of interest to a MAC policy, entry points may be registered for relevant life cycle events. All objects implement initialization, creation, and destruction hooks. Some objects will also implement relabeling, allowing user processes to change the labels on objects. Some objects will also implement object-specific events, such as label events associated with IP reassembly. A typical labeled object will have the following life cycle of entry points:
+This class of entry points is used by the MAC framework to permit policies to maintain label information on kernel objects.
+For each labeled kernel object of interest to a MAC policy, entry points may be registered for relevant life cycle events.
+All objects implement initialization, creation, and destruction hooks.
+Some objects will also implement relabeling, allowing user processes to change the labels on objects.
+Some objects will also implement object-specific events, such as label events associated with IP reassembly.
+A typical labeled object will have the following life cycle of entry points:
[.programlisting]
....
@@ -1569,17 +1744,26 @@ Access control events ~-->--o
Label destruction o
....
-Label initialization permits policies to allocate memory and set initial values for labels without context for the use of the object. The label slot allocated to a policy will be zeroed by default, so some policies may not need to perform initialization.
+Label initialization permits policies to allocate memory and set initial values for labels without context for the use of the object.
+The label slot allocated to a policy will be zeroed by default, so some policies may not need to perform initialization.
-Label creation occurs when the kernel structure is associated with an actual kernel object. For example, Mbufs may be allocated and remain unused in a pool until they are required. mbuf allocation causes label initialization on the mbuf to take place, but mbuf creation occurs when the mbuf is associated with a datagram. Typically, context will be provided for a creation event, including the circumstances of the creation, and labels of other relevant objects in the creation process. For example, when an mbuf is created from a socket, the socket and its label will be presented to registered policies in addition to the new mbuf and its label. Memory allocation in creation events is discouraged, as it may occur in performance sensitive ports of the kernel; in addition, creation calls are not permitted to fail so a failure to allocate memory cannot be reported.
+Label creation occurs when the kernel structure is associated with an actual kernel object.
+For example, Mbufs may be allocated and remain unused in a pool until they are required.
+mbuf allocation causes label initialization on the mbuf to take place, but mbuf creation occurs when the mbuf is associated with a datagram.
+Typically, context will be provided for a creation event, including the circumstances of the creation, and labels of other relevant objects in the creation process.
+For example, when an mbuf is created from a socket, the socket and its label will be presented to registered policies in addition to the new mbuf and its label.
+Memory allocation in creation events is discouraged, as it may occur in performance sensitive ports of the kernel; in addition, creation calls are not permitted to fail so a failure to allocate memory cannot be reported.
-Object specific events do not generally fall into the other broad classes of label events, but will generally provide an opportunity to modify or update the label on an object based on additional context. For example, the label on an IP fragment reassembly queue may be updated during the MAC_UPDATE_IPQ entry point as a result of the acceptance of an additional mbuf to that queue.
+Object specific events do not generally fall into the other broad classes of label events, but will generally provide an opportunity to modify or update the label on an object based on additional context.
+For example, the label on an IP fragment reassembly queue may be updated during the MAC_UPDATE_IPQ entry point as a result of the acceptance of an additional mbuf to that queue.
Access control events are discussed in detail in the following section.
Label destruction permits policies to release storage or state associated with a label during its association with an object so that the kernel data structures supporting the object may be reused or released.
-In addition to labels associated with specific kernel objects, an additional class of labels exists: temporary labels. These labels are used to store update information submitted by user processes. These labels are initialized and destroyed as with other label types, but the creation event is MAC_INTERNALIZE, which accepts a user label to be converted to an in-kernel representation.
+In addition to labels associated with specific kernel objects, an additional class of labels exists: temporary labels.
+These labels are used to store update information submitted by user processes.
+These labels are initialized and destroyed as with other label types, but the creation event is MAC_INTERNALIZE, which accepts a user label to be converted to an in-kernel representation.
[[mac-fs-label-event-ops]]
==== File System Object Labeling Event Operations
@@ -1589,12 +1773,12 @@ In addition to labels associated with specific kernel objects, an additional cla
[source,c]
----
-void mpo_associate_vnode_devfs( mp,
- fslabel,
- de,
- delabel,
- vp,
- vlabel);
+void mpo_associate_vnode_devfs( mp,
+ fslabel,
+ de,
+ delabel,
+ vp,
+ vlabel);
struct mount *mp;
struct label *fslabel;
struct devfs_dirent *de;
@@ -1642,10 +1826,10 @@ Fill in the label (`vlabel`) for a newly created devfs vnode based on the devfs
[source,c]
----
-int mpo_associate_vnode_extattr( mp,
- fslabel,
- vp,
- vlabel);
+int mpo_associate_vnode_extattr( mp,
+ fslabel,
+ vp,
+ vlabel);
struct mount *mp;
struct label *fslabel;
struct vnode *vp;
@@ -1676,17 +1860,20 @@ struct label *vlabel;
|
|===
-Attempt to retrieve the label for `vp` from the file system extended attributes. Upon success, the value `0` is returned. Should extended attribute retrieval not be supported, an accepted fallback is to copy `fslabel` into `vlabel`. In the event of an error, an appropriate value for `errno` should be returned.
+Attempt to retrieve the label for `vp` from the file system extended attributes.
+Upon success, the value `0` is returned.
+Should extended attribute retrieval not be supported, an accepted fallback is to copy `fslabel` into `vlabel`.
+In the event of an error, an appropriate value for `errno` should be returned.
[[mac-mpo-associate-vnode-singlelabel]]
===== `mpo_associate_vnode_singlelabel`
[source,c]
----
-void mpo_associate_vnode_singlelabel( mp,
- fslabel,
- vp,
- vlabel);
+void mpo_associate_vnode_singlelabel( mp,
+ fslabel,
+ vp,
+ vlabel);
struct mount *mp;
struct label *fslabel;
struct vnode *vp;
@@ -1724,9 +1911,9 @@ On non-multilabel file systems, this entry point is called to set the policy lab
[source,c]
----
-void mpo_create_devfs_device( dev,
- devfs_dirent,
- label);
+void mpo_create_devfs_device( dev,
+ devfs_dirent,
+ label);
dev_t dev;
struct devfs_dirent *devfs_dirent;
struct label *label;
@@ -1752,17 +1939,18 @@ struct label *label;
|
|===
-Fill out the label on a devfs_dirent being created for the passed device. This call will be made when the device file system is mounted, regenerated, or a new device is made available.
+Fill out the label on a devfs_dirent being created for the passed device.
+This call will be made when the device file system is mounted, regenerated, or a new device is made available.
[[mac-mpo-create-devfs-directory]]
===== `mpo_create_devfs_directory`
[source,c]
----
-void mpo_create_devfs_directory( dirname,
- dirnamelen,
- devfs_dirent,
- label);
+void mpo_create_devfs_directory( dirname,
+ dirnamelen,
+ devfs_dirent,
+ label);
char *dirname;
int dirnamelen;
struct devfs_dirent *devfs_dirent;
@@ -1789,19 +1977,20 @@ struct label *label;
|
|===
-Fill out the label on a devfs_dirent being created for the passed directory. This call will be made when the device file system is mounted, regenerated, or a new device requiring a specific directory hierarchy is made available.
+Fill out the label on a devfs_dirent being created for the passed directory.
+This call will be made when the device file system is mounted, regenerated, or a new device requiring a specific directory hierarchy is made available.
[[mac-mpo-create-devfs-symlink]]
===== `mpo_create_devfs_symlink`
[source,c]
----
-void mpo_create_devfs_symlink( cred,
- mp,
- dd,
- ddlabel,
- de,
- delabel);
+void mpo_create_devfs_symlink( cred,
+ mp,
+ dd,
+ ddlabel,
+ de,
+ delabel);
struct ucred *cred;
struct mount *mp;
struct devfs_dirent *dd;
@@ -1849,14 +2038,14 @@ Fill in the label (`delabel`) for a newly created man:devfs[5] symbolic link ent
[source,c]
----
-int mpo_create_vnode_extattr( cred,
- mp,
- fslabel,
- dvp,
- dlabel,
- vp,
- vlabel,
- cnp);
+int mpo_create_vnode_extattr( cred,
+ mp,
+ fslabel,
+ dvp,
+ dlabel,
+ vp,
+ vlabel,
+ cnp);
struct ucred *cred;
struct mount *mp;
struct label *fslabel;
@@ -1907,17 +2096,19 @@ struct componentname *cnp;
|
|===
-Write out the label for `vp` to the appropriate extended attribute. If the write succeeds, fill in `vlabel` with the label, and return 0. Otherwise, return an appropriate error.
+Write out the label for `vp` to the appropriate extended attribute.
+If the write succeeds, fill in `vlabel` with the label, and return 0.
+Otherwise, return an appropriate error.
[[mac-mpo-create-mount]]
===== `mpo_create_mount`
[source,c]
----
-void mpo_create_mount( cred,
- mp,
- mnt,
- fslabel);
+void mpo_create_mount( cred,
+ mp,
+ mnt,
+ fslabel);
struct ucred *cred;
struct mount *mp;
struct label *mnt;
@@ -1948,17 +2139,18 @@ struct label *fslabel;
|
|===
-Fill out the labels on the mount point being created by the passed subject credential. This call will be made when a new file system is mounted.
+Fill out the labels on the mount point being created by the passed subject credential.
+This call will be made when a new file system is mounted.
[[mac-mpo-create-root-mount]]
===== `mpo_create_root_mount`
[source,c]
----
-void mpo_create_root_mount( cred,
- mp,
- mntlabel,
- fslabel);
+void mpo_create_root_mount( cred,
+ mp,
+ mntlabel,
+ fslabel);
struct ucred *cred;
struct mount *mp;
struct label *mntlabel;
@@ -1975,17 +2167,18 @@ struct label *fslabel;
3+|See <<mac-mpo-create-mount>>.
|===
-Fill out the labels on the mount point being created by the passed subject credential. This call will be made when the root file system is mounted, after mpo_create_mount;.
+Fill out the labels on the mount point being created by the passed subject credential.
+This call will be made when the root file system is mounted, after `mpo_create_mount;`.
[[mac-mpo-relabel-vnode]]
===== `mpo_relabel_vnode`
[source,c]
----
-void mpo_relabel_vnode( cred,
- vp,
- vnodelabel,
- newlabel);
+void mpo_relabel_vnode( cred,
+ vp,
+ vnodelabel,
+ newlabel);
struct ucred *cred;
struct vnode *vp;
struct label *vnodelabel;
@@ -2023,10 +2216,10 @@ Update the label on the passed vnode given the passed update vnode label and the
[source,c]
----
-int mpo_setlabel_vnode_extattr( cred,
- vp,
- vlabel,
- intlabel);
+int mpo_setlabel_vnode_extattr( cred,
+ vp,
+ vlabel,
+ intlabel);
struct ucred *cred;
struct vnode *vp;
struct label *vlabel;
@@ -2057,17 +2250,18 @@ struct label *intlabel;
|
|===
-Write out the policy from `intlabel` to an extended attribute. This is called from `vop_stdcreatevnode_ea`.
+Write out the policy from `intlabel` to an extended attribute.
+This is called from `vop_stdcreatevnode_ea`.
[[mac-mpo-update-devfsdirent]]
===== `mpo_update_devfsdirent`
[source,c]
----
-void mpo_update_devfsdirent( devfs_dirent,
- direntlabel,
- vp,
- vnodelabel);
+void mpo_update_devfsdirent( devfs_dirent,
+ direntlabel,
+ vp,
+ vnodelabel);
struct devfs_dirent *devfs_dirent;
struct label *direntlabel;
struct vnode *vp;
@@ -2099,7 +2293,9 @@ struct label *vnodelabel;
|
|===
-Update the `devfs_dirent` label from the passed devfs vnode label. This call will be made when a devfs vnode has been successfully relabeled to commit the label change such that it lasts even if the vnode is recycled. It will also be made when a symlink is created in devfs, following a call to `mac_vnode_create_from_vnode` to initialize the vnode label.
+Update the `devfs_dirent` label from the passed devfs vnode label.
+This call will be made when a devfs vnode has been successfully relabeled to commit the label change such that it lasts even if the vnode is recycled.
+It will also be made when a symlink is created in devfs, following a call to `mac_vnode_create_from_vnode` to initialize the vnode label.
[[mac-ipc-label-ops]]
==== IPC Object Labeling Event Operations
@@ -2109,10 +2305,10 @@ Update the `devfs_dirent` label from the passed devfs vnode label. This call wil
[source,c]
----
-void mpo_create_mbuf_from_socket( so,
- socketlabel,
- m,
- mbuflabel);
+void mpo_create_mbuf_from_socket( so,
+ socketlabel,
+ m,
+ mbuflabel);
struct socket *so;
struct label *socketlabel;
struct mbuf *m;
@@ -2143,16 +2339,17 @@ struct label *mbuflabel;
|
|===
-Set the label on a newly created mbuf header from the passed socket label. This call is made when a new datagram or message is generated by the socket and stored in the passed mbuf.
+Set the label on a newly created mbuf header from the passed socket label.
+This call is made when a new datagram or message is generated by the socket and stored in the passed mbuf.
[[mac-mpo-create-pipe]]
===== `mpo_create_pipe`
[source,c]
----
-void mpo_create_pipe( cred,
- pipe,
- pipelabel);
+void mpo_create_pipe( cred,
+ pipe,
+ pipelabel);
struct ucred *cred;
struct pipe *pipe;
struct label *pipelabel;
@@ -2178,16 +2375,17 @@ struct label *pipelabel;
|
|===
-Set the label on a newly created pipe from the passed subject credential. This call is made when a new pipe is created.
+Set the label on a newly created pipe from the passed subject credential.
+This call is made when a new pipe is created.
[[mac-mpo-create-socket]]
===== `mpo_create_socket`
[source,c]
----
-void mpo_create_socket( cred,
- so,
- socketlabel);
+void mpo_create_socket( cred,
+ so,
+ socketlabel);
struct ucred *cred;
struct socket *so;
struct label *socketlabel;
@@ -2213,17 +2411,18 @@ struct label *socketlabel;
|
|===
-Set the label on a newly created socket from the passed subject credential. This call is made when a socket is created.
+Set the label on a newly created socket from the passed subject credential.
+This call is made when a socket is created.
[[mac-mpo-create-socket-from-socket]]
===== `mpo_create_socket_from_socket`
[source,c]
----
-void mpo_create_socket_from_socket( oldsocket,
- oldsocketlabel,
- newsocket,
- newsocketlabel);
+void mpo_create_socket_from_socket( oldsocket,
+ oldsocketlabel,
+ newsocket,
+ newsocketlabel);
struct socket *oldsocket;
struct label *oldsocketlabel;
struct socket *newsocket;
@@ -2261,10 +2460,10 @@ Label a socket, `newsocket`, newly man:accept[2]ed, based on the man:listen[2] s
[source,c]
----
-void mpo_relabel_pipe( cred,
- pipe,
- oldlabel,
- newlabel);
+void mpo_relabel_pipe( cred,
+ pipe,
+ oldlabel,
+ newlabel);
struct ucred *cred;
struct pipe *pipe;
struct label *oldlabel;
@@ -2302,10 +2501,10 @@ Apply a new label, `newlabel`, to `pipe`.
[source,c]
----
-void mpo_relabel_socket( cred,
- so,
- oldlabel,
- newlabel);
+void mpo_relabel_socket( cred,
+ so,
+ oldlabel,
+ newlabel);
struct ucred *cred;
struct socket *so;
struct label *oldlabel;
@@ -2343,10 +2542,10 @@ Update the label on a socket from the passed socket label update.
[source,c]
----
-void mpo_set_socket_peer_from_mbuf( mbuf,
- mbuflabel,
- oldlabel,
- newlabel);
+void mpo_set_socket_peer_from_mbuf( mbuf,
+ mbuflabel,
+ oldlabel,
+ newlabel);
struct mbuf *mbuf;
struct label *mbuflabel;
struct label *oldlabel;
@@ -2377,17 +2576,18 @@ struct label *newlabel;
|
|===
-Set the peer label on a stream socket from the passed mbuf label. This call will be made when the first datagram is received by the stream socket, with the exception of Unix domain sockets.
+Set the peer label on a stream socket from the passed mbuf label.
+This call will be made when the first datagram is received by the stream socket, with the exception of Unix domain sockets.
[[mac-mpo-set-socket-peer-from-socket]]
===== `mpo_set_socket_peer_from_socket`
[source,c]
----
-void mpo_set_socket_peer_from_socket( oldsocket,
- oldsocketlabel,
- newsocket,
- newsocketpeerlabel);
+void mpo_set_socket_peer_from_socket( oldsocket,
+ oldsocketlabel,
+ newsocket,
+ newsocketpeerlabel);
struct socket *oldsocket;
struct label *oldsocketlabel;
struct socket *newsocket;
@@ -2418,7 +2618,8 @@ struct label *newsocketpeerlabel;
|
|===
-Set the peer label on a stream UNIX domain socket from the passed remote socket endpoint. This call will be made when the socket pair is connected, and will be made for both endpoints.
+Set the peer label on a stream UNIX domain socket from the passed remote socket endpoint.
+This call will be made when the socket pair is connected, and will be made for both endpoints.
[[mac-net-labeling-event-ops]]
==== Network Object Labeling Event Operations
@@ -2428,9 +2629,9 @@ Set the peer label on a stream UNIX domain socket from the passed remote socket
[source,c]
----
-void mpo_create_bpfdesc( cred,
- bpf_d,
- bpflabel);
+void mpo_create_bpfdesc( cred,
+ bpf_d,
+ bpflabel);
struct ucred *cred;
struct bpf_d *bpf_d;
struct label *bpflabel;
@@ -2456,15 +2657,16 @@ struct label *bpflabel;
|
|===
-Set the label on a newly created BPF descriptor from the passed subject credential. This call will be made when a BPF device node is opened by a process with the passed subject credential.
+Set the label on a newly created BPF descriptor from the passed subject credential.
+This call will be made when a BPF device node is opened by a process with the passed subject credential.
[[mac-mpo-create-ifnet]]
===== `mpo_create_ifnet`
[source,c]
----
-void mpo_create_ifnet( ifnet,
- ifnetlabel);
+void mpo_create_ifnet( ifnet,
+ ifnetlabel);
struct ifnet *ifnet;
struct label *ifnetlabel;
----
@@ -2485,17 +2687,18 @@ struct label *ifnetlabel;
|
|===
-Set the label on a newly created interface. This call may be made when a new physical interface becomes available to the system, or when a pseudo-interface is instantiated during the boot or as a result of a user action.
+Set the label on a newly created interface.
+This call may be made when a new physical interface becomes available to the system, or when a pseudo-interface is instantiated during the boot or as a result of a user action.
[[mac-mpo-create-ipq]]
===== `mpo_create_ipq`
[source,c]
----
-void mpo_create_ipq( fragment,
- fragmentlabel,
- ipq,
- ipqlabel);
+void mpo_create_ipq( fragment,
+ fragmentlabel,
+ ipq,
+ ipqlabel);
struct mbuf *fragment;
struct label *fragmentlabel;
struct ipq *ipq;
@@ -2533,10 +2736,10 @@ Set the label on a newly created IP fragment reassembly queue from the mbuf head
[source,c]
----
-void mpo_create_create_datagram_from_ipq( ipq,
- ipqlabel,
- datagram,
- datagramlabel);
+void mpo_create_create_datagram_from_ipq( ipq,
+ ipqlabel,
+ datagram,
+ datagramlabel);
struct ipq *ipq;
struct label *ipqlabel;
struct mbuf *datagram;
@@ -2574,10 +2777,10 @@ Set the label on a newly reassembled IP datagram from the IP fragment reassembly
[source,c]
----
-void mpo_create_fragment( datagram,
- datagramlabel,
- fragment,
- fragmentlabel);
+void mpo_create_fragment( datagram,
+ datagramlabel,
+ fragment,
+ fragmentlabel);
struct mbuf *datagram;
struct label *datagramlabel;
struct mbuf *fragment;
@@ -2615,10 +2818,10 @@ Set the label on the mbuf header of a newly created IP fragment from the label o
[source,c]
----
-void mpo_create_mbuf_from_mbuf( oldmbuf,
- oldmbuflabel,
- newmbuf,
- newmbuflabel);
+void mpo_create_mbuf_from_mbuf( oldmbuf,
+ oldmbuflabel,
+ newmbuf,
+ newmbuflabel);
struct mbuf *oldmbuf;
struct label *oldmbuflabel;
struct mbuf *newmbuf;
@@ -2649,17 +2852,18 @@ struct label *newmbuflabel;
|
|===
-Set the label on the mbuf header of a newly created datagram from the mbuf header of an existing datagram. This call may be made in a number of situations, including when an mbuf is re-allocated for alignment purposes.
+Set the label on the mbuf header of a newly created datagram from the mbuf header of an existing datagram.
+This call may be made in a number of situations, including when an mbuf is re-allocated for alignment purposes.
[[mac-mpo-create-mbuf-linklayer]]
===== `mpo_create_mbuf_linklayer`
[source,c]
----
-void mpo_create_mbuf_linklayer( ifnet,
- ifnetlabel,
- mbuf,
- mbuflabel);
+void mpo_create_mbuf_linklayer( ifnet,
+ ifnetlabel,
+ mbuf,
+ mbuflabel);
struct ifnet *ifnet;
struct label *ifnetlabel;
struct mbuf *mbuf;
@@ -2690,17 +2894,18 @@ struct label *mbuflabel;
|
|===
-Set the label on the mbuf header of a newly created datagram generated for the purposes of a link layer response for the passed interface. This call may be made in a number of situations, including for ARP or ND6 responses in the IPv4 and IPv6 stacks.
+Set the label on the mbuf header of a newly created datagram generated for the purposes of a link layer response for the passed interface.
+This call may be made in a number of situations, including for ARP or ND6 responses in the IPv4 and IPv6 stacks.
[[mac-mpo-create-mbuf-from-bpfdesc]]
===== `mpo_create_mbuf_from_bpfdesc`
[source,c]
----
-void mpo_create_mbuf_from_bpfdesc( bpf_d,
- bpflabel,
- mbuf,
- mbuflabel);
+void mpo_create_mbuf_from_bpfdesc( bpf_d,
+ bpflabel,
+ mbuf,
+ mbuflabel);
struct bpf_d *bpf_d;
struct label *bpflabel;
struct mbuf *mbuf;
@@ -2731,17 +2936,18 @@ struct label *mbuflabel;
|
|===
-Set the label on the mbuf header of a newly created datagram generated using the passed BPF descriptor. This call is made when a write is performed to the BPF device associated with the passed BPF descriptor.
+Set the label on the mbuf header of a newly created datagram generated using the passed BPF descriptor.
+This call is made when a write is performed to the BPF device associated with the passed BPF descriptor.
[[mac-mpo-create-mbuf-from-ifnet]]
===== `mpo_create_mbuf_from_ifnet`
[source,c]
----
-void mpo_create_mbuf_from_ifnet( ifnet,
- ifnetlabel,
- mbuf,
- mbuflabel);
+void mpo_create_mbuf_from_ifnet( ifnet,
+ ifnetlabel,
+ mbuf,
+ mbuflabel);
struct ifnet *ifnet;
struct label *ifnetlabel;
struct mbuf *mbuf;
@@ -2779,12 +2985,12 @@ Set the label on the mbuf header of a newly created datagram generated from the
[source,c]
----
-void mpo_create_mbuf_multicast_encap( oldmbuf,
- oldmbuflabel,
- ifnet,
- ifnetlabel,
- newmbuf,
- newmbuflabel);
+void mpo_create_mbuf_multicast_encap( oldmbuf,
+ oldmbuflabel,
+ ifnet,
+ ifnetlabel,
+ newmbuf,
+ newmbuflabel);
struct mbuf *oldmbuf;
struct label *oldmbuflabel;
struct ifnet *ifnet;
@@ -2825,17 +3031,18 @@ struct label *newmbuflabel;
|
|===
-Set the label on the mbuf header of a newly created datagram generated from the existing passed datagram when it is processed by the passed multicast encapsulation interface. This call is made when an mbuf is to be delivered using the virtual interface.
+Set the label on the mbuf header of a newly created datagram generated from the existing passed datagram when it is processed by the passed multicast encapsulation interface.
+This call is made when an mbuf is to be delivered using the virtual interface.
[[mac-mpo-create-mbuf-netlayer]]
===== `mpo_create_mbuf_netlayer`
[source,c]
----
-void mpo_create_mbuf_netlayer( oldmbuf,
- oldmbuflabel,
- newmbuf,
- newmbuflabel);
+void mpo_create_mbuf_netlayer( oldmbuf,
+ oldmbuflabel,
+ newmbuf,
+ newmbuflabel);
struct mbuf *oldmbuf;
struct label *oldmbuflabel;
struct mbuf *newmbuf;
@@ -2866,17 +3073,18 @@ struct label *newmbuflabel;
|
|===
-Set the label on the mbuf header of a newly created datagram generated by the IP stack in response to an existing received datagram (`oldmbuf`). This call may be made in a number of situations, including when responding to ICMP request datagrams.
+Set the label on the mbuf header of a newly created datagram generated by the IP stack in response to an existing received datagram (`oldmbuf`).
+This call may be made in a number of situations, including when responding to ICMP request datagrams.
[[mac-mpo-fragment-match]]
===== `mpo_fragment_match`
[source,c]
----
-int mpo_fragment_match( fragment,
- fragmentlabel,
- ipq,
- ipqlabel);
+int mpo_fragment_match( fragment,
+ fragmentlabel,
+ ipq,
+ ipqlabel);
struct mbuf *fragment;
struct label *fragmentlabel;
struct ipq *ipq;
@@ -2907,17 +3115,20 @@ struct label *ipqlabel;
|
|===
-Determine whether an mbuf header containing an IP datagram (`fragment`) fragment matches the label of the passed IP fragment reassembly queue (`ipq`). Return (1) for a successful match, or (0) for no match. This call is made when the IP stack attempts to find an existing fragment reassembly queue for a newly received fragment; if this fails, a new fragment reassembly queue may be instantiated for the fragment. Policies may use this entry point to prevent the reassembly of otherwise matching IP fragments if policy does not permit them to be reassembled based on the label or other information.
+Determine whether an mbuf header containing an IP datagram (`fragment`) fragment matches the label of the passed IP fragment reassembly queue (`ipq`).
+Return (1) for a successful match, or (0) for no match.
+This call is made when the IP stack attempts to find an existing fragment reassembly queue for a newly received fragment; if this fails, a new fragment reassembly queue may be instantiated for the fragment.
+Policies may use this entry point to prevent the reassembly of otherwise matching IP fragments if policy does not permit them to be reassembled based on the label or other information.
[[mac-mpo-ifnet-relabel]]
===== `mpo_relabel_ifnet`
[source,c]
----
-void mpo_relabel_ifnet( cred,
- ifnet,
- ifnetlabel,
- newlabel);
+void mpo_relabel_ifnet( cred,
+ ifnet,
+ ifnetlabel,
+ newlabel);
struct ucred *cred;
struct ifnet *ifnet;
struct label *ifnetlabel;
@@ -2955,10 +3166,10 @@ Update the label of network interface, `ifnet`, based on the passed update label
[source,c]
----
-void mpo_update_ipq( fragment,
- fragmentlabel,
- ipq,
- ipqlabel);
+void mpo_update_ipq( fragment,
+ fragmentlabel,
+ ipq,
+ ipqlabel);
struct mbuf *fragment;
struct label *fragmentlabel;
struct ipq *ipq;
@@ -2999,8 +3210,8 @@ Update the label on an IP fragment reassembly queue (`ipq`) based on the accepta
[source,c]
----
-void mpo_create_cred( parent_cred,
- child_cred);
+void mpo_create_cred( parent_cred,
+ child_cred);
struct ucred *parent_cred;
struct ucred *child_cred;
----
@@ -3021,17 +3232,19 @@ struct ucred *child_cred;
|
|===
-Set the label of a newly created subject credential from the passed subject credential. This call will be made when man:crcopy[9] is invoked on a newly created struct ucred. This call should not be confused with a process forking or creation event.
+Set the label of a newly created subject credential from the passed subject credential.
+This call will be made when man:crcopy[9] is invoked on a newly created `struct ucred`.
+This call should not be confused with a process forking or creation event.
[[mac-mpo-execve-transition]]
===== `mpo_execve_transition`
[source,c]
----
-void mpo_execve_transition( old,
- new,
- vp,
- vnodelabel);
+void mpo_execve_transition( old,
+ new,
+ vp,
+ vnodelabel);
struct ucred *old;
struct ucred *new;
struct vnode *vp;
@@ -3063,16 +3276,19 @@ struct label *vnodelabel;
|
|===
-Update the label of a newly created subject credential (`new`) from the passed existing subject credential (`old`) based on a label transition caused by executing the passed vnode (`vp`). This call occurs when a process executes the passed vnode and one of the policies returns a success from the `mpo_execve_will_transition` entry point. Policies may choose to implement this call simply by invoking `mpo_create_cred` and passing the two subject credentials so as not to implement a transitioning event. Policies should not leave this entry point unimplemented if they implement `mpo_create_cred`, even if they do not implement `mpo_execve_will_transition`.
+Update the label of a newly created subject credential (`new`) from the passed existing subject credential (`old`) based on a label transition caused by executing the passed vnode (`vp`).
+This call occurs when a process executes the passed vnode and one of the policies returns a success from the `mpo_execve_will_transition` entry point.
+Policies may choose to implement this call simply by invoking `mpo_create_cred` and passing the two subject credentials so as not to implement a transitioning event.
+Policies should not leave this entry point unimplemented if they implement `mpo_create_cred`, even if they do not implement `mpo_execve_will_transition`.
[[mac-mpo-execve-will-transition]]
===== `mpo_execve_will_transition`
[source,c]
----
-int mpo_execve_will_transition( old,
- vp,
- vnodelabel);
+int mpo_execve_will_transition( old,
+ vp,
+ vnodelabel);
struct ucred *old;
struct vnode *vp;
struct label *vnodelabel;
@@ -3098,14 +3314,16 @@ struct label *vnodelabel;
|
|===
-Determine whether the policy will want to perform a transition event as a result of the execution of the passed vnode by the passed subject credential. Return 1 if a transition is required, 0 if not. Even if a policy returns 0, it should behave correctly in the presence of an unexpected invocation of `mpo_execve_transition`, as that call may happen as a result of another policy requesting a transition.
+Determine whether the policy will want to perform a transition event as a result of the execution of the passed vnode by the passed subject credential.
+Return 1 if a transition is required, 0 if not.
+Even if a policy returns 0, it should behave correctly in the presence of an unexpected invocation of `mpo_execve_transition`, as that call may happen as a result of another policy requesting a transition.
[[mac-mpo-create-proc0]]
===== `mpo_create_proc0`
[source,c]
----
-void mpo_create_proc0( cred);
+void mpo_create_proc0( cred);
struct ucred *cred;
----
@@ -3128,7 +3346,7 @@ Create the subject credential of process 0, the parent of all kernel processes.
[source,c]
----
-void mpo_create_proc1( cred);
+void mpo_create_proc1( cred);
struct ucred *cred;
----
@@ -3151,8 +3369,8 @@ Create the subject credential of process 1, the parent of all user processes.
[source,c]
----
-void mpo_relabel_cred( cred,
- newlabel);
+void mpo_relabel_cred( cred,
+ newlabel);
struct ucred *cred;
struct label *newlabel;
----
@@ -3178,7 +3396,12 @@ Update the label on a subject credential from the passed update label.
[[mac-access-control-checks]]
=== Access Control Checks
-Access control entry points permit policy modules to influence access control decisions made by the kernel. Generally, although not always, arguments to an access control entry point will include one or more authorizing credentials, information (possibly including a label) for any other objects involved in the operation. An access control entry point may return 0 to permit the operation, or an man:errno[2] error value. The results of invoking the entry point across various registered policy modules will be composed as follows: if all modules permit the operation to succeed, success will be returned. If one or modules returns a failure, a failure will be returned. If more than one module returns a failure, the errno value to return to the user will be selected using the following precedence, implemented by the `error_select()` function in [.filename]#kern_mac.c#:
+Access control entry points permit policy modules to influence access control decisions made by the kernel.
+Generally, although not always, arguments to an access control entry point will include one or more authorizing credentials, information (possibly including a label) for any other objects involved in the operation.
+An access control entry point may return 0 to permit the operation, or an man:errno[2] error value.
+The results of invoking the entry point across various registered policy modules will be composed as follows: if all modules permit the operation to succeed, success will be returned.
+If one or modules returns a failure, a failure will be returned.
+If more than one module returns a failure, the errno value to return to the user will be selected using the following precedence, implemented by the `error_select()` function in [.filename]#kern_mac.c#:
[.informaltable]
[cols="1,1", frame="none"]
@@ -3200,17 +3423,18 @@ Access control entry points permit policy modules to influence access control de
|EPERM
|===
-If none of the error values returned by all modules are listed in the precedence chart then an arbitrarily selected value from the set will be returned. In general, the rules provide precedence to errors in the following order: kernel failures, invalid arguments, object not present, access not permitted, other.
+If none of the error values returned by all modules are listed in the precedence chart then an arbitrarily selected value from the set will be returned.
+In general, the rules provide precedence to errors in the following order: kernel failures, invalid arguments, object not present, access not permitted, other.
[[mac-mpo-bpfdesc-check-receive-from-ifnet]]
==== `mpo_check_bpfdesc_receive`
[source,c]
----
-int mpo_check_bpfdesc_receive( bpf_d,
- bpflabel,
- ifnet,
- ifnetlabel);
+int mpo_check_bpfdesc_receive( bpf_d,
+ bpflabel,
+ ifnet,
+ ifnetlabel);
struct bpf_d *bpf_d;
struct label *bpflabel;
struct ifnet *ifnet;
@@ -3241,14 +3465,15 @@ struct label *ifnetlabel;
|
|===
-Determine whether the MAC framework should permit datagrams from the passed interface to be delivered to the buffers of the passed BPF descriptor. Return (0) for success, or an `errno` value for failure Suggested failure: EACCES for label mismatches, EPERM for lack of privilege.
+Determine whether the MAC framework should permit datagrams from the passed interface to be delivered to the buffers of the passed BPF descriptor.
+Return (0) for success, or an `errno` value for failure Suggested failure: EACCES for label mismatches, EPERM for lack of privilege.
[[mac-mpo-check-kenv-dump]]
==== `mpo_check_kenv_dump`
[source,c]
----
-int mpo_check_kenv_dump( cred);
+int mpo_check_kenv_dump( cred);
struct ucred *cred;
----
@@ -3271,8 +3496,8 @@ Determine whether the subject should be allowed to retrieve the kernel environme
[source,c]
----
-int mpo_check_kenv_get( cred,
- name);
+int mpo_check_kenv_get( cred,
+ name);
struct ucred *cred;
char *name;
----
@@ -3300,8 +3525,8 @@ Determine whether the subject should be allowed to retrieve the value of the spe
[source,c]
----
-int mpo_check_kenv_set( cred,
- name);
+int mpo_check_kenv_set( cred,
+ name);
struct ucred *cred;
char *name;
----
@@ -3329,8 +3554,8 @@ Determine whether the subject should be allowed to set the specified kernel envi
[source,c]
----
-int mpo_check_kenv_unset( cred,
- name);
+int mpo_check_kenv_unset( cred,
+ name);
struct ucred *cred;
char *name;
----
@@ -3358,9 +3583,9 @@ Determine whether the subject should be allowed to unset the specified kernel en
[source,c]
----
-int mpo_check_kld_load( cred,
- vp,
- vlabel);
+int mpo_check_kld_load( cred,
+ vp,
+ vlabel);
struct ucred *cred;
struct vnode *vp;
struct label *vlabel;
@@ -3393,7 +3618,7 @@ Determine whether the subject should be allowed to load the specified module fil
[source,c]
----
-int mpo_check_kld_stat( cred);
+int mpo_check_kld_stat( cred);
struct ucred *cred;
----
@@ -3416,7 +3641,7 @@ Determine whether the subject should be allowed to retrieve a list of loaded ker
[source,c]
----
-int mpo_check_kld_unload( cred);
+int mpo_check_kld_unload( cred);
struct ucred *cred;
----
@@ -3439,11 +3664,11 @@ Determine whether the subject should be allowed to unload a kernel module.
[source,c]
----
-int mpo_check_pipe_ioctl( cred,
- pipe,
- pipelabel,
- cmd,
- data);
+int mpo_check_pipe_ioctl( cred,
+ pipe,
+ pipelabel,
+ cmd,
+ data);
struct ucred *cred;
struct pipe *pipe;
struct label *pipelabel;
@@ -3486,9 +3711,9 @@ Determine whether the subject should be allowed to make the specified man:ioctl[
[source,c]
----
-int mpo_check_pipe_poll( cred,
- pipe,
- pipelabel);
+int mpo_check_pipe_poll( cred,
+ pipe,
+ pipelabel);
struct ucred *cred;
struct pipe *pipe;
struct label *pipelabel;
@@ -3521,9 +3746,9 @@ Determine whether the subject should be allowed to poll `pipe`.
[source,c]
----
-int mpo_check_pipe_read( cred,
- pipe,
- pipelabel);
+int mpo_check_pipe_read( cred,
+ pipe,
+ pipelabel);
struct ucred *cred;
struct pipe *pipe;
struct label *pipelabel;
@@ -3556,10 +3781,10 @@ Determine whether the subject should be allowed read access to `pipe`.
[source,c]
----
-int mpo_check_pipe_relabel( cred,
- pipe,
- pipelabel,
- newlabel);
+int mpo_check_pipe_relabel( cred,
+ pipe,
+ pipelabel,
+ newlabel);
struct ucred *cred;
struct pipe *pipe;
struct label *pipelabel;
@@ -3597,9 +3822,9 @@ Determine whether the subject should be allowed to relabel `pipe`.
[source,c]
----
-int mpo_check_pipe_stat( cred,
- pipe,
- pipelabel);
+int mpo_check_pipe_stat( cred,
+ pipe,
+ pipelabel);
struct ucred *cred;
struct pipe *pipe;
struct label *pipelabel;
@@ -3632,9 +3857,9 @@ Determine whether the subject should be allowed to retrieve statistics related t
[source,c]
----
-int mpo_check_pipe_write( cred,
- pipe,
- pipelabel);
+int mpo_check_pipe_write( cred,
+ pipe,
+ pipelabel);
struct ucred *cred;
struct pipe *pipe;
struct label *pipelabel;
@@ -3667,10 +3892,10 @@ Determine whether the subject should be allowed to write to `pipe`.
[source,c]
----
-int mpo_check_socket_bind( cred,
- socket,
- socketlabel,
- sockaddr);
+int mpo_check_socket_bind( cred,
+ socket,
+ socketlabel,
+ sockaddr);
struct ucred *cred;
struct socket *socket;
struct label *socketlabel;
@@ -3706,10 +3931,10 @@ struct sockaddr *sockaddr;
[source,c]
----
-int mpo_check_socket_connect( cred,
- socket,
- socketlabel,
- sockaddr);
+int mpo_check_socket_connect( cred,
+ socket,
+ socketlabel,
+ sockaddr);
struct ucred *cred;
struct socket *socket;
struct label *socketlabel;
@@ -3740,16 +3965,18 @@ struct sockaddr *sockaddr;
|
|===
-Determine whether the subject credential (`cred`) can connect the passed socket (`socket`) to the passed socket address (`sockaddr`). Return 0 for success, or an `errno` value for failure. Suggested failure: EACCES for label mismatches, EPERM for lack of privilege.
+Determine whether the subject credential (`cred`) can connect the passed socket (`socket`) to the passed socket address (`sockaddr`).
+Return 0 for success, or an `errno` value for failure.
+Suggested failure: EACCES for label mismatches, EPERM for lack of privilege.
[[mac-mpo-check-socket-receive]]
==== `mpo_check_socket_receive`
[source,c]
----
-int mpo_check_socket_receive( cred,
- so,
- socketlabel);
+int mpo_check_socket_receive( cred,
+ so,
+ socketlabel);
struct ucred *cred;
struct socket *so;
struct label *socketlabel;
@@ -3782,9 +4009,9 @@ Determine whether the subject should be allowed to receive information from the
[source,c]
----
-int mpo_check_socket_send( cred,
- so,
- socketlabel);
+int mpo_check_socket_send( cred,
+ so,
+ socketlabel);
struct ucred *cred;
struct socket *so;
struct label *socketlabel;
@@ -3817,8 +4044,8 @@ Determine whether the subject should be allowed to send information across the s
[source,c]
----
-int mpo_check_cred_visible( u1,
- u2);
+int mpo_check_cred_visible( u1,
+ u2);
struct ucred *u1;
struct ucred *u2;
----
@@ -3839,16 +4066,19 @@ struct ucred *u2;
|
|===
-Determine whether the subject credential `u1` can "see" other subjects with the passed subject credential `u2`. Return 0 for success, or an `errno` value for failure. Suggested failure: EACCES for label mismatches, EPERM for lack of privilege, or ESRCH to hide visibility. This call may be made in a number of situations, including inter-process status sysctl's used by `ps`, and in procfs lookups.
+Determine whether the subject credential `u1` can "see" other subjects with the passed subject credential `u2`.
+Return 0 for success, or an `errno` value for failure.
+Suggested failure: EACCES for label mismatches, EPERM for lack of privilege, or ESRCH to hide visibility.
+This call may be made in a number of situations, including inter-process status sysctl's used by `ps`, and in procfs lookups.
[[mac-mpo-cred-check-socket-visible]]
==== `mpo_check_socket_visible`
[source,c]
----
-int mpo_check_socket_visible( cred,
- socket,
- socketlabel);
+int mpo_check_socket_visible( cred,
+ socket,
+ socketlabel);
struct ucred *cred;
struct socket *socket;
struct label *socketlabel;
@@ -3879,10 +4109,10 @@ struct label *socketlabel;
[source,c]
----
-int mpo_check_ifnet_relabel( cred,
- ifnet,
- ifnetlabel,
- newlabel);
+int mpo_check_ifnet_relabel( cred,
+ ifnet,
+ ifnetlabel,
+ newlabel);
struct ucred *cred;
struct ifnet *ifnet;
struct label *ifnetlabel;
@@ -3920,10 +4150,10 @@ Determine whether the subject credential can relabel the passed network interfac
[source,c]
----
-int mpo_check_socket_relabel( cred,
- socket,
- socketlabel,
- newlabel);
+int mpo_check_socket_relabel( cred,
+ socket,
+ socketlabel,
+ newlabel);
struct ucred *cred;
struct socket *socket;
struct label *socketlabel;
@@ -3961,8 +4191,8 @@ Determine whether the subject credential can relabel the passed socket to the pa
[source,c]
----
-int mpo_check_cred_relabel( cred,
- newlabel);
+int mpo_check_cred_relabel( cred,
+ newlabel);
struct ucred *cred;
struct label *newlabel;
----
@@ -3990,10 +4220,10 @@ Determine whether the subject credential can relabel itself to the passed label
[source,c]
----
-int mpo_check_vnode_relabel( cred,
- vp,
- vnodelabel,
- newlabel);
+int mpo_check_vnode_relabel( cred,
+ vp,
+ vnodelabel,
+ newlabel);
struct ucred *cred;
struct vnode *vp;
struct label *vnodelabel;
@@ -4031,9 +4261,9 @@ Determine whether the subject credential can relabel the passed vnode to the pas
[source,c]
----
-int mpo_check_mount_stat( cred,
- mp,
- mountlabel);
+int mpo_check_mount_stat( cred,
+ mp,
+ mountlabel);
struct ucred *cred;
struct mount *mp;
struct label *mountlabel;
@@ -4059,15 +4289,18 @@ struct label *mountlabel;
|
|===
-Determine whether the subject credential can see the results of a statfs performed on the file system. Return 0 for success, or an `errno` value for failure. Suggested failure: EACCES for label mismatches or EPERM for lack of privilege. This call may be made in a number of situations, including during invocations of man:statfs[2] and related calls, as well as to determine what file systems to exclude from listings of file systems, such as when man:getfsstat[2] is invoked.
+Determine whether the subject credential can see the results of a statfs performed on the file system.
+Return 0 for success, or an `errno` value for failure.
+Suggested failure: EACCES for label mismatches or EPERM for lack of privilege.
+This call may be made in a number of situations, including during invocations of man:statfs[2] and related calls, as well as to determine what file systems to exclude from listings of file systems, such as when man:getfsstat[2] is invoked.
[[mac-mpo-cred-check-proc-debug]]
==== `mpo_check_proc_debug`
[source,c]
----
-int mpo_check_proc_debug( cred,
- proc);
+int mpo_check_proc_debug( cred,
+ proc);
struct ucred *cred;
struct proc *proc;
----
@@ -4088,17 +4321,20 @@ struct proc *proc;
|
|===
-Determine whether the subject credential can debug the passed process. Return 0 for success, or an `errno` value for failure. Suggested failure: EACCES for label mismatch, EPERM for lack of privilege, or ESRCH to hide visibility of the target. This call may be made in a number of situations, including use of the man:ptrace[2] and man:ktrace[2] APIs, as well as for some types of procfs operations.
+Determine whether the subject credential can debug the passed process.
+Return 0 for success, or an `errno` value for failure.
+Suggested failure: EACCES for label mismatch, EPERM for lack of privilege, or ESRCH to hide visibility of the target.
+This call may be made in a number of situations, including use of the man:ptrace[2] and man:ktrace[2] APIs, as well as for some types of procfs operations.
[[mac-mpo-cred-check-vnode-access]]
==== `mpo_check_vnode_access`
[source,c]
----
-int mpo_check_vnode_access( cred,
- vp,
- label,
- flags);
+int mpo_check_vnode_access( cred,
+ vp,
+ label,
+ flags);
struct ucred *cred;
struct vnode *vp;
struct label *label;
@@ -4129,16 +4365,19 @@ int flags;
|
|===
-Determine how invocations of man:access[2] and related calls by the subject credential should return when performed on the passed vnode using the passed access flags. This should generally be implemented using the same semantics used in `mpo_check_vnode_open`. Return 0 for success, or an `errno` value for failure. Suggested failure: EACCES for label mismatches or EPERM for lack of privilege.
+Determine how invocations of man:access[2] and related calls by the subject credential should return when performed on the passed vnode using the passed access flags.
+This should generally be implemented using the same semantics used in `mpo_check_vnode_open`.
+Return 0 for success, or an `errno` value for failure.
+Suggested failure: EACCES for label mismatches or EPERM for lack of privilege.
[[mac-mpo-cred-check-vnode-chdir]]
==== `mpo_check_vnode_chdir`
[source,c]
----
-int mpo_check_vnode_chdir( cred,
- dvp,
- dlabel);
+int mpo_check_vnode_chdir( cred,
+ dvp,
+ dlabel);
struct ucred *cred;
struct vnode *dvp;
struct label *dlabel;
@@ -4164,16 +4403,18 @@ struct label *dlabel;
|
|===
-Determine whether the subject credential can change the process working directory to the passed vnode. Return 0 for success, or an `errno` value for failure. Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
+Determine whether the subject credential can change the process working directory to the passed vnode.
+Return 0 for success, or an `errno` value for failure.
+Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
[[mac-mpo-check-vnode-chroot]]
==== `mpo_check_vnode_chroot`
[source,c]
----
-int mpo_check_vnode_chroot( cred,
- dvp,
- dlabel);
+int mpo_check_vnode_chroot( cred,
+ dvp,
+ dlabel);
struct ucred *cred;
struct vnode *dvp;
struct label *dlabel;
@@ -4206,11 +4447,11 @@ Determine whether the subject should be allowed to man:chroot[2] into the specif
[source,c]
----
-int mpo_check_vnode_create( cred,
- dvp,
- dlabel,
- cnp,
- vap);
+int mpo_check_vnode_create( cred,
+ dvp,
+ dlabel,
+ cnp,
+ vap);
struct ucred *cred;
struct vnode *dvp;
struct label *dlabel;
@@ -4246,19 +4487,22 @@ struct vattr *vap;
|
|===
-Determine whether the subject credential can create a vnode with the passed parent directory, passed name information, and passed attribute information. Return 0 for success, or an `errno` value for failure. Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege. This call may be made in a number of situations, including as a result of calls to man:open[2] with O_CREAT, man:mkfifo[2], and others.
+Determine whether the subject credential can create a vnode with the passed parent directory, passed name information, and passed attribute information.
+Return 0 for success, or an `errno` value for failure.
+Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
+This call may be made in a number of situations, including as a result of calls to man:open[2] with O_CREAT, man:mkfifo[2], and others.
[[mac-mpo-cred-check-vnode-delete]]
==== `mpo_check_vnode_delete`
[source,c]
----
-int mpo_check_vnode_delete( cred,
- dvp,
- dlabel,
- vp,
- label,
- cnp);
+int mpo_check_vnode_delete( cred,
+ dvp,
+ dlabel,
+ vp,
+ label,
+ cnp);
struct ucred *cred;
struct vnode *dvp;
struct label *dlabel;
@@ -4299,17 +4543,21 @@ struct componentname *cnp;
|
|===
-Determine whether the subject credential can delete a vnode from the passed parent directory and passed name information. Return 0 for success, or an `errno` value for failure. Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege. This call may be made in a number of situations, including as a result of calls to man:unlink[2] and man:rmdir[2]. Policies implementing this entry point should also implement `mpo_check_rename_to` to authorize deletion of objects as a result of being the target of a rename.
+Determine whether the subject credential can delete a vnode from the passed parent directory and passed name information.
+Return 0 for success, or an `errno` value for failure.
+Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
+This call may be made in a number of situations, including as a result of calls to man:unlink[2] and man:rmdir[2].
+Policies implementing this entry point should also implement `mpo_check_rename_to` to authorize deletion of objects as a result of being the target of a rename.
[[mac-mpo-cred-check-vnode-deleteacl]]
==== `mpo_check_vnode_deleteacl`
[source,c]
----
-int mpo_check_vnode_deleteacl( cred,
- vp,
- label,
- type);
+int mpo_check_vnode_deleteacl( cred,
+ vp,
+ label,
+ type);
struct ucred *cred;
struct vnode *vp;
struct label *label;
@@ -4340,16 +4588,18 @@ acl_type_t type;
|
|===
-Determine whether the subject credential can delete the ACL of passed type from the passed vnode. Return 0 for success, or an `errno` value for failure. Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
+Determine whether the subject credential can delete the ACL of passed type from the passed vnode.
+Return 0 for success, or an `errno` value for failure.
+Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
[[mac-mpo-cred-check-vnode-exec]]
==== `mpo_check_vnode_exec`
[source,c]
----
-int mpo_check_vnode_exec( cred,
- vp,
- label);
+int mpo_check_vnode_exec( cred,
+ vp,
+ label);
struct ucred *cred;
struct vnode *vp;
struct label *label;
@@ -4375,17 +4625,20 @@ struct label *label;
|
|===
-Determine whether the subject credential can execute the passed vnode. Determination of execute privilege is made separately from decisions about any transitioning event. Return 0 for success, or an `errno` value for failure. Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
+Determine whether the subject credential can execute the passed vnode.
+Determination of execute privilege is made separately from decisions about any transitioning event.
+Return 0 for success, or an `errno` value for failure.
+Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
[[mpo-cred-check-vnode-getacl]]
==== `mpo_check_vnode_getacl`
[source,c]
----
-int mpo_check_vnode_getacl( cred,
- vp,
- label,
- type);
+int mpo_check_vnode_getacl( cred,
+ vp,
+ label,
+ type);
struct ucred *cred;
struct vnode *vp;
struct label *label;
@@ -4416,19 +4669,21 @@ acl_type_t type;
|
|===
-Determine whether the subject credential can retrieve the ACL of passed type from the passed vnode. Return 0 for success, or an `errno` value for failure. Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
+Determine whether the subject credential can retrieve the ACL of passed type from the passed vnode.
+Return 0 for success, or an `errno` value for failure.
+Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
[[mac-mpo-cred-check-vnode-getextattr]]
==== `mpo_check_vnode_getextattr`
[source,c]
----
-int mpo_check_vnode_getextattr( cred,
- vp,
- label,
- attrnamespace,
- name,
- uio);
+int mpo_check_vnode_getextattr( cred,
+ vp,
+ label,
+ attrnamespace,
+ name,
+ uio);
struct ucred *cred;
struct vnode *vp;
struct label *label;
@@ -4469,19 +4724,22 @@ struct uio *uio;
|
|===
-Determine whether the subject credential can retrieve the extended attribute with the passed namespace and name from the passed vnode. Policies implementing labeling using extended attributes may be interested in special handling of operations on those extended attributes. Return 0 for success, or an `errno` value for failure. Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
+Determine whether the subject credential can retrieve the extended attribute with the passed namespace and name from the passed vnode.
+Policies implementing labeling using extended attributes may be interested in special handling of operations on those extended attributes.
+Return 0 for success, or an `errno` value for failure.
+Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
[[mac-mpo-check-vnode-link]]
==== `mpo_check_vnode_link`
[source,c]
----
-int mpo_check_vnode_link( cred,
- dvp,
- dlabel,
- vp,
- label,
- cnp);
+int mpo_check_vnode_link( cred,
+ dvp,
+ dlabel,
+ vp,
+ label,
+ cnp);
struct ucred *cred;
struct vnode *dvp;
struct label *dlabel;
@@ -4529,10 +4787,10 @@ Determine whether the subject should be allowed to create a link to the vnode `v
[source,c]
----
-int mpo_check_vnode_mmap( cred,
- vp,
- label,
- prot);
+int mpo_check_vnode_mmap( cred,
+ vp,
+ label,
+ prot);
struct ucred *cred;
struct vnode *vp;
struct label *label;
@@ -4570,10 +4828,10 @@ Determine whether the subject should be allowed to map the vnode `vp` with the p
[source,c]
----
-void mpo_check_vnode_mmap_downgrade( cred,
- vp,
- label,
- prot);
+void mpo_check_vnode_mmap_downgrade( cred,
+ vp,
+ label,
+ prot);
struct ucred *cred;
struct vnode *vp;
struct label *label;
@@ -4611,10 +4869,10 @@ Downgrade the mmap protections based on the subject and object labels.
[source,c]
----
-int mpo_check_vnode_mprotect( cred,
- vp,
- label,
- prot);
+int mpo_check_vnode_mprotect( cred,
+ vp,
+ label,
+ prot);
struct ucred *cred;
struct vnode *vp;
struct label *label;
@@ -4648,10 +4906,10 @@ Determine whether the subject should be allowed to set the specified memory prot
[source,c]
----
-int mpo_check_vnode_poll( active_cred,
- file_cred,
- vp,
- label);
+int mpo_check_vnode_poll( active_cred,
+ file_cred,
+ vp,
+ label);
struct ucred *active_cred;
struct ucred *file_cred;
struct vnode *vp;
@@ -4689,12 +4947,12 @@ Determine whether the subject should be allowed to poll the vnode `vp`.
[source,c]
----
-int mpo_vnode_rename_from( cred,
- dvp,
- dlabel,
- vp,
- label,
- cnp);
+int mpo_vnode_rename_from( cred,
+ dvp,
+ dlabel,
+ vp,
+ label,
+ cnp);
struct ucred *cred;
struct vnode *dvp;
struct label *dlabel;
@@ -4742,13 +5000,13 @@ Determine whether the subject should be allowed to rename the vnode `vp` to some
[source,c]
----
-int mpo_check_vnode_rename_to( cred,
- dvp,
- dlabel,
- vp,
- label,
- samedir,
- cnp);
+int mpo_check_vnode_rename_to( cred,
+ dvp,
+ dlabel,
+ vp,
+ label,
+ samedir,
+ cnp);
struct ucred *cred;
struct vnode *dvp;
struct label *dlabel;
@@ -4794,16 +5052,17 @@ struct componentname *cnp;
|
|===
-Determine whether the subject should be allowed to rename to the vnode `vp`, into the directory `dvp`, or to the name represented by `cnp`. If there is no existing file to overwrite, `vp` and `label` will be NULL.
+Determine whether the subject should be allowed to rename to the vnode `vp`, into the directory `dvp`, or to the name represented by `cnp`.
+If there is no existing file to overwrite, `vp` and `label` will be NULL.
[[mac-mpo-cred-check-socket-listen]]
==== `mpo_check_socket_listen`
[source,c]
----
-int mpo_check_socket_listen( cred,
- socket,
- socketlabel);
+int mpo_check_socket_listen( cred,
+ socket,
+ socketlabel);
struct ucred *cred;
struct socket *socket;
struct label *socketlabel;
@@ -4829,17 +5088,19 @@ struct label *socketlabel;
|
|===
-Determine whether the subject credential can listen on the passed socket. Return 0 for success, or an `errno` value for failure. Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
+Determine whether the subject credential can listen on the passed socket.
+Return 0 for success, or an `errno` value for failure.
+Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
[[mac-mpo-cred-check-vnode-lookup]]
==== `mpo_check_vnode_lookup`
[source,c]
----
-int mpo_check_vnode_lookup( ,
- ,
- ,
- cnp);
+int mpo_check_vnode_lookup( ,
+ ,
+ ,
+ cnp);
struct ucred *cred;
struct vnode *dvp;
struct label *dlabel;
@@ -4870,17 +5131,19 @@ struct componentname *cnp;
|
|===
-Determine whether the subject credential can perform a lookup in the passed directory vnode for the passed name. Return 0 for success, or an `errno` value for failure. Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
+Determine whether the subject credential can perform a lookup in the passed directory vnode for the passed name.
+Return 0 for success, or an `errno` value for failure.
+Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
[[mac-mpo-cred-check-vnode-open]]
==== `mpo_check_vnode_open`
[source,c]
----
-int mpo_check_vnode_open( cred,
- vp,
- label,
- acc_mode);
+int mpo_check_vnode_open( cred,
+ vp,
+ label,
+ acc_mode);
struct ucred *cred;
struct vnode *vp;
struct label *label;
@@ -4911,16 +5174,18 @@ int acc_mode;
|
|===
-Determine whether the subject credential can perform an open operation on the passed vnode with the passed access mode. Return 0 for success, or an errno value for failure. Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
+Determine whether the subject credential can perform an open operation on the passed vnode with the passed access mode.
+Return 0 for success, or an errno value for failure.
+Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
[[mac-mpo-cred-check-vnode-readdir]]
==== `mpo_check_vnode_readdir`
[source,c]
----
-int mpo_check_vnode_readdir( ,
- ,
- );
+int mpo_check_vnode_readdir( ,
+ ,
+ );
struct ucred *cred;
struct vnode *dvp;
struct label *dlabel;
@@ -4946,16 +5211,18 @@ struct label *dlabel;
|
|===
-Determine whether the subject credential can perform a `readdir` operation on the passed directory vnode. Return 0 for success, or an `errno` value for failure. Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
+Determine whether the subject credential can perform a `readdir` operation on the passed directory vnode.
+Return 0 for success, or an `errno` value for failure.
+Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
[[mac-mpo-cred-check-vnode-readlink]]
==== `mpo_check_vnode_readlink`
[source,c]
----
-int mpo_check_vnode_readlink( cred,
- vp,
- label);
+int mpo_check_vnode_readlink( cred,
+ vp,
+ label);
struct ucred *cred;
struct vnode *vp;
struct label *label;
@@ -4981,16 +5248,19 @@ struct label *label;
|
|===
-Determine whether the subject credential can perform a `readlink` operation on the passed symlink vnode. Return 0 for success, or an `errno` value for failure. Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege. This call may be made in a number of situations, including an explicit `readlink` call by the user process, or as a result of an implicit `readlink` during a name lookup by the process.
+Determine whether the subject credential can perform a `readlink` operation on the passed symlink vnode.
+Return 0 for success, or an `errno` value for failure.
+Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
+This call may be made in a number of situations, including an explicit `readlink` call by the user process, or as a result of an implicit `readlink` during a name lookup by the process.
[[mac-mpo-cred-check-vnode-revoke]]
==== `mpo_check_vnode_revoke`
[source,c]
----
-int mpo_check_vnode_revoke( cred,
- vp,
- label);
+int mpo_check_vnode_revoke( cred,
+ vp,
+ label);
struct ucred *cred;
struct vnode *vp;
struct label *label;
@@ -5016,18 +5286,20 @@ struct label *label;
|
|===
-Determine whether the subject credential can revoke access to the passed vnode. Return 0 for success, or an `errno` value for failure. Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
+Determine whether the subject credential can revoke access to the passed vnode.
+Return 0 for success, or an `errno` value for failure.
+Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
[[mac-mpo-cred-check-vnode-setacl]]
==== `mpo_check_vnode_setacl`
[source,c]
----
-int mpo_check_vnode_setacl( cred,
- vp,
- label,
- type,
- acl);
+int mpo_check_vnode_setacl( cred,
+ vp,
+ label,
+ type,
+ acl);
struct ucred *cred;
struct vnode *vp;
struct label *label;
@@ -5063,19 +5335,21 @@ struct acl *acl;
|
|===
-Determine whether the subject credential can set the passed ACL of passed type on the passed vnode. Return 0 for success, or an `errno` value for failure. Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
+Determine whether the subject credential can set the passed ACL of passed type on the passed vnode.
+Return 0 for success, or an `errno` value for failure.
+Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
[[mac-mpo-cred-check-vnode-setextattr]]
==== `mpo_check_vnode_setextattr`
[source,c]
----
-int mpo_check_vnode_setextattr( cred,
- vp,
- label,
- attrnamespace,
- name,
- uio);
+int mpo_check_vnode_setextattr( cred,
+ vp,
+ label,
+ attrnamespace,
+ name,
+ uio);
struct ucred *cred;
struct vnode *vp;
struct label *label;
@@ -5116,17 +5390,22 @@ struct uio *uio;
|
|===
-Determine whether the subject credential can set the extended attribute of passed name and passed namespace on the passed vnode. Policies implementing security labels backed into extended attributes may want to provide additional protections for those attributes. Additionally, policies should avoid making decisions based on the data referenced from `uio`, as there is a potential race condition between this check and the actual operation. The `uio` may also be `NULL` if a delete operation is being performed. Return 0 for success, or an `errno` value for failure. Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
+Determine whether the subject credential can set the extended attribute of passed name and passed namespace on the passed vnode.
+Policies implementing security labels backed into extended attributes may want to provide additional protections for those attributes.
+Additionally, policies should avoid making decisions based on the data referenced from `uio`, as there is a potential race condition between this check and the actual operation.
+The `uio` may also be `NULL` if a delete operation is being performed.
+Return 0 for success, or an `errno` value for failure.
+Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
[[mac-mpo-cred-check-vnode-setflags]]
==== `mpo_check_vnode_setflags`
[source,c]
----
-int mpo_check_vnode_setflags( cred,
- vp,
- label,
- flags);
+int mpo_check_vnode_setflags( cred,
+ vp,
+ label,
+ flags);
struct ucred *cred;
struct vnode *vp;
struct label *label;
@@ -5157,17 +5436,19 @@ u_long flags;
|
|===
-Determine whether the subject credential can set the passed flags on the passed vnode. Return 0 for success, or an `errno` value for failure. Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
+Determine whether the subject credential can set the passed flags on the passed vnode.
+Return 0 for success, or an `errno` value for failure.
+Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
[[mac-mpo-cred-check-vnode-setmode]]
==== `mpo_check_vnode_setmode`
[source,c]
----
-int mpo_check_vnode_setmode( cred,
- vp,
- label,
- mode);
+int mpo_check_vnode_setmode( cred,
+ vp,
+ label,
+ mode);
struct ucred *cred;
struct vnode *vp;
struct label *label;
@@ -5198,18 +5479,20 @@ mode_t mode;
|
|===
-Determine whether the subject credential can set the passed mode on the passed vnode. Return 0 for success, or an `errno` value for failure. Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
+Determine whether the subject credential can set the passed mode on the passed vnode.
+Return 0 for success, or an `errno` value for failure.
+Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
[[mac-mpo-cred-check-vnode-setowner]]
==== `mpo_check_vnode_setowner`
[source,c]
----
-int mpo_check_vnode_setowner( cred,
- vp,
- label,
- uid,
- gid);
+int mpo_check_vnode_setowner( cred,
+ vp,
+ label,
+ uid,
+ gid);
struct ucred *cred;
struct vnode *vp;
struct label *label;
@@ -5245,18 +5528,21 @@ gid_t gid;
|
|===
-Determine whether the subject credential can set the passed uid and passed gid as file uid and file gid on the passed vnode. The IDs may be set to (`-1`) to request no update. Return 0 for success, or an `errno` value for failure. Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
+Determine whether the subject credential can set the passed uid and passed gid as file uid and file gid on the passed vnode.
+The IDs may be set to (`-1`) to request no update.
+Return 0 for success, or an `errno` value for failure.
+Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
[[mac-mpo-cred-check-vnode-setutimes]]
==== `mpo_check_vnode_setutimes`
[source,c]
----
-int mpo_check_vnode_setutimes( ,
- ,
- ,
- ,
- );
+int mpo_check_vnode_setutimes( ,
+ ,
+ ,
+ ,
+ );
struct ucred *cred;
struct vnode *vp;
struct label *label;
@@ -5292,15 +5578,17 @@ struct timespec mtime;
|
|===
-Determine whether the subject credential can set the passed access timestamps on the passed vnode. Return 0 for success, or an `errno` value for failure. Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
+Determine whether the subject credential can set the passed access timestamps on the passed vnode.
+Return 0 for success, or an `errno` value for failure.
+Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
[[mac-mpo-cred-check-proc-sched]]
==== `mpo_check_proc_sched`
[source,c]
----
-int mpo_check_proc_sched( ucred,
- proc);
+int mpo_check_proc_sched( ucred,
+ proc);
struct ucred *ucred;
struct proc *proc;
----
@@ -5321,7 +5609,9 @@ struct proc *proc;
|
|===
-Determine whether the subject credential can change the scheduling parameters of the passed process. Return 0 for success, or an `errno` value for failure. Suggested failure: EACCES for label mismatch, EPERM for lack of privilege, or ESRCH to limit visibility.
+Determine whether the subject credential can change the scheduling parameters of the passed process.
+Return 0 for success, or an `errno` value for failure.
+Suggested failure: EACCES for label mismatch, EPERM for lack of privilege, or ESRCH to limit visibility.
See man:setpriority[2] for more information.
@@ -5330,9 +5620,9 @@ See man:setpriority[2] for more information.
[source,c]
----
-int mpo_check_proc_signal( cred,
- proc,
- signal);
+int mpo_check_proc_signal( cred,
+ proc,
+ signal);
struct ucred *cred;
struct proc *proc;
int signal;
@@ -5358,16 +5648,18 @@ int signal;
|
|===
-Determine whether the subject credential can deliver the passed signal to the passed process. Return 0 for success, or an `errno` value for failure. Suggested failure: EACCES for label mismatch, EPERM for lack of privilege, or ESRCH to limit visibility.
+Determine whether the subject credential can deliver the passed signal to the passed process.
+Return 0 for success, or an `errno` value for failure.
+Suggested failure: EACCES for label mismatch, EPERM for lack of privilege, or ESRCH to limit visibility.
[[mac-mpo-cred-check-vnode-stat]]
==== `mpo_check_vnode_stat`
[source,c]
----
-int mpo_check_vnode_stat( cred,
- vp,
- label);
+int mpo_check_vnode_stat( cred,
+ vp,
+ label);
struct ucred *cred;
struct vnode *vp;
struct label *label;
@@ -5393,7 +5685,9 @@ struct label *label;
|
|===
-Determine whether the subject credential can `stat` the passed vnode. Return 0 for success, or an `errno` value for failure. Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
+Determine whether the subject credential can `stat` the passed vnode.
+Return 0 for success, or an `errno` value for failure.
+Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
See man:stat[2] for more information.
@@ -5402,11 +5696,11 @@ See man:stat[2] for more information.
[source,c]
----
-int mpo_check_ifnet_transmit( cred,
- ifnet,
- ifnetlabel,
- mbuf,
- mbuflabel);
+int mpo_check_ifnet_transmit( cred,
+ ifnet,
+ ifnetlabel,
+ mbuf,
+ mbuflabel);
struct ucred *cred;
struct ifnet *ifnet;
struct label *ifnetlabel;
@@ -5442,18 +5736,20 @@ struct label *mbuflabel;
|
|===
-Determine whether the network interface can transmit the passed mbuf. Return 0 for success, or an `errno` value for failure. Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
+Determine whether the network interface can transmit the passed mbuf.
+Return 0 for success, or an `errno` value for failure.
+Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege.
[[mac-mpo-cred-check-socket-deliver]]
==== `mpo_check_socket_deliver`
[source,c]
----
-int mpo_check_socket_deliver( cred,
- ifnet,
- ifnetlabel,
- mbuf,
- mbuflabel);
+int mpo_check_socket_deliver( cred,
+ ifnet,
+ ifnetlabel,
+ mbuf,
+ mbuflabel);
struct ucred *cred;
struct ifnet *ifnet;
struct label *ifnetlabel;
@@ -5489,16 +5785,18 @@ struct label *mbuflabel;
|
|===
-Determine whether the socket may receive the datagram stored in the passed mbuf header. Return 0 for success, or an `errno` value for failure. Suggested failures: EACCES for label mismatch, or EPERM for lack of privilege.
+Determine whether the socket may receive the datagram stored in the passed mbuf header.
+Return 0 for success, or an `errno` value for failure.
+Suggested failures: EACCES for label mismatch, or EPERM for lack of privilege.
[[mac-mpo-check-socket-visible]]
==== `mpo_check_socket_visible`
[source,c]
----
-int mpo_check_socket_visible( cred,
- so,
- socketlabel);
+int mpo_check_socket_visible( cred,
+ so,
+ socketlabel);
struct ucred *cred;
struct socket *so;
struct label *socketlabel;
@@ -5524,16 +5822,18 @@ struct label *socketlabel;
|
|===
-Determine whether the subject credential cred can "see" the passed socket (`socket`) using system monitoring functions, such as those employed by man:netstat[8] and man:sockstat[1]. Return 0 for success, or an `errno` value for failure. Suggested failure: EACCES for label mismatches, EPERM for lack of privilege, or ESRCH to hide visibility.
+Determine whether the subject credential cred can "see" the passed socket (`socket`) using system monitoring functions, such as those employed by man:netstat[8] and man:sockstat[1].
+Return 0 for success, or an `errno` value for failure.
+Suggested failure: EACCES for label mismatches, EPERM for lack of privilege, or ESRCH to hide visibility.
[[mac-mpo-check-system-acct]]
==== `mpo_check_system_acct`
[source,c]
----
-int mpo_check_system_acct( ucred,
- vp,
- vlabel);
+int mpo_check_system_acct( ucred,
+ vp,
+ vlabel);
struct ucred *ucred;
struct vnode *vp;
struct label *vlabel;
@@ -5566,7 +5866,7 @@ Determine whether the subject should be allowed to enable accounting, based on i
[source,c]
----
-int mpo_check_system_nfsd( cred);
+int mpo_check_system_nfsd( cred);
struct ucred *cred;
----
@@ -5589,8 +5889,8 @@ Determine whether the subject should be allowed to call man:nfssvc[2].
[source,c]
----
-int mpo_check_system_reboot( cred,
- howto);
+int mpo_check_system_reboot( cred,
+ howto);
struct ucred *cred;
int howto;
----
@@ -5618,7 +5918,7 @@ Determine whether the subject should be allowed to reboot the system in the spec
[source,c]
----
-int mpo_check_system_settime( cred);
+int mpo_check_system_settime( cred);
struct ucred *cred;
----
@@ -5641,9 +5941,9 @@ Determine whether the user should be allowed to set the system clock.
[source,c]
----
-int mpo_check_system_swapon( cred,
- vp,
- vlabel);
+int mpo_check_system_swapon( cred,
+ vp,
+ vlabel);
struct ucred *cred;
struct vnode *vp;
struct label *vlabel;
@@ -5676,14 +5976,14 @@ Determine whether the subject should be allowed to add `vp` as a swap device.
[source,c]
----
-int mpo_check_system_sysctl( cred,
- name,
- namelen,
- old,
- oldlenp,
- inkernel,
- new,
- newlen);
+int mpo_check_system_sysctl( cred,
+ name,
+ namelen,
+ old,
+ oldlenp,
+ inkernel,
+ new,
+ newlen);
struct ucred *cred;
int *name;
u_int *namelen;
@@ -5739,36 +6039,56 @@ Determine whether the subject should be allowed to make the specified man:sysctl
[[mac-label-management]]
=== Label Management Calls
-Relabel events occur when a user process has requested that the label on an object be modified. A two-phase update occurs: first, an access control check will be performed to determine if the update is both valid and permitted, and then the update itself is performed via a separate entry point. Relabel entry points typically accept the object, object label reference, and an update label submitted by the process. Memory allocation during relabel is discouraged, as relabel calls are not permitted to fail (failure should be reported earlier in the relabel check).
+Relabel events occur when a user process has requested that the label on an object be modified.
+A two-phase update occurs: first, an access control check will be performed to determine if the update is both valid and permitted, and then the update itself is performed via a separate entry point.
+Relabel entry points typically accept the object, object label reference, and an update label submitted by the process.
+Memory allocation during relabel is discouraged, as relabel calls are not permitted to fail (failure should be reported earlier in the relabel check).
[[mac-userland-arch]]
== Userland Architecture
-The TrustedBSD MAC Framework includes a number of policy-agnostic elements, including MAC library interfaces for abstractly managing labels, modifications to the system credential management and login libraries to support the assignment of MAC labels to users, and a set of tools to monitor and modify labels on processes, files, and network interfaces. More details on the user architecture will be added to this section in the near future.
+The TrustedBSD MAC Framework includes a number of policy-agnostic elements, including MAC library interfaces for abstractly managing labels, modifications to the system credential management and login libraries to support the assignment of MAC labels to users, and a set of tools to monitor and modify labels on processes, files, and network interfaces.
+More details on the user architecture will be added to this section in the near future.
[[mac-userland-labels]]
=== APIs for Policy-Agnostic Label Management
-The TrustedBSD MAC Framework provides a number of library and system calls permitting applications to manage MAC labels on objects using a policy-agnostic interface. This permits applications to manipulate labels for a variety of policies without being written to support specific policies. These interfaces are used by general-purpose tools such as man:ifconfig[8], man:ls[1] and man:ps[1] to view labels on network interfaces, files, and processes. The APIs also support MAC management tools including man:getfmac[8], man:getpmac[8], man:setfmac[8], man:setfsmac[8], and man:setpmac[8]. The MAC APIs are documented in man:mac[3].
+The TrustedBSD MAC Framework provides a number of library and system calls permitting applications to manage MAC labels on objects using a policy-agnostic interface.
+This permits applications to manipulate labels for a variety of policies without being written to support specific policies.
+These interfaces are used by general-purpose tools such as man:ifconfig[8], man:ls[1] and man:ps[1] to view labels on network interfaces, files, and processes.
+The APIs also support MAC management tools including man:getfmac[8], man:getpmac[8], man:setfmac[8], man:setfsmac[8], and man:setpmac[8].
+The MAC APIs are documented in man:mac[3].
-Applications handle MAC labels in two forms: an internalized form used to return and set labels on processes and objects (`mac_t`), and externalized form based on C strings appropriate for storage in configuration files, display to the user, or input from the user. Each MAC label contains a number of elements, each consisting of a name and value pair. Policy modules in the kernel bind to specific names and interpret the values in policy-specific ways. In the externalized string form, labels are represented by a comma-delimited list of name and value pairs separated by the `/` character. Labels may be directly converted to and from text using provided APIs; when retrieving labels from the kernel, internalized label storage must first be prepared for the desired label element set. Typically, this is done in one of two ways: using man:mac_prepare[3] and an arbitrary list of desired label elements, or one of the variants of the call that loads a default element set from the man:mac.conf[5] configuration file. Per-object defaults permit application writers to usefully display labels associated with objects without being aware of the policies present in the system.
+Applications handle MAC labels in two forms: an internalized form used to return and set labels on processes and objects (`mac_t`), and externalized form based on C strings appropriate for storage in configuration files, display to the user, or input from the user.
+Each MAC label contains a number of elements, each consisting of a name and value pair.
+Policy modules in the kernel bind to specific names and interpret the values in policy-specific ways.
+In the externalized string form, labels are represented by a comma-delimited list of name and value pairs separated by the `/` character.
+Labels may be directly converted to and from text using provided APIs; when retrieving labels from the kernel, internalized label storage must first be prepared for the desired label element set.
+Typically, this is done in one of two ways: using man:mac_prepare[3] and an arbitrary list of desired label elements, or one of the variants of the call that loads a default element set from the man:mac.conf[5] configuration file.
+Per-object defaults permit application writers to usefully display labels associated with objects without being aware of the policies present in the system.
[NOTE]
====
-Currently, direct manipulation of label elements other than by conversion to a text string, string editing, and conversion back to an internalized label is not supported by the MAC library. Such interfaces may be added in the future if they prove necessary for application writers.
+Currently, direct manipulation of label elements other than by conversion to a text string, string editing, and conversion back to an internalized label is not supported by the MAC library.
+Such interfaces may be added in the future if they prove necessary for application writers.
====
[[mac-userland-credentials]]
=== Binding of Labels to Users
-The standard user context management interface, man:setusercontext[3], has been modified to retrieve MAC labels associated with a user's class from man:login.conf[5]. These labels are then set along with other user context when either `LOGIN_SETALL` is specified, or when `LOGIN_SETMAC` is explicitly specified.
+The standard user context management interface, man:setusercontext[3], has been modified to retrieve MAC labels associated with a user's class from man:login.conf[5].
+These labels are then set along with other user context when either `LOGIN_SETALL` is specified, or when `LOGIN_SETMAC` is explicitly specified.
[NOTE]
====
-It is expected that, in a future version of FreeBSD, the MAC label database will be separated from the [.filename]#login.conf# user class abstraction, and be maintained in a separate database. However, the man:setusercontext[3] API should remain the same following such a change.
+It is expected that, in a future version of FreeBSD, the MAC label database will be separated from the [.filename]#login.conf# user class abstraction, and be maintained in a separate database.
+However, the man:setusercontext[3] API should remain the same following such a change.
====
[[mac-conclusion]]
== Conclusion
-The TrustedBSD MAC framework permits kernel modules to augment the system security policy in a highly integrated manner. They may do this based on existing object properties, or based on label data that is maintained with the assistance of the MAC framework. The framework is sufficiently flexible to implement a variety of policy types, including information flow security policies such as MLS and Biba, as well as policies based on existing BSD credentials or file protections. Policy authors may wish to consult this documentation as well as existing security modules when implementing a new security service.
+The TrustedBSD MAC framework permits kernel modules to augment the system security policy in a highly integrated manner.
+They may do this based on existing object properties, or based on label data that is maintained with the assistance of the MAC framework.
+The framework is sufficiently flexible to implement a variety of policy types, including information flow security policies such as MLS and Biba, as well as policies based on existing BSD credentials or file protections.
+Policy authors may wish to consult this documentation as well as existing security modules when implementing a new security service.
diff --git a/documentation/content/en/books/arch-handbook/mac/_index.po b/documentation/content/en/books/arch-handbook/mac/_index.po
new file mode 100644
index 0000000000..27b55eeaac
--- /dev/null
+++ b/documentation/content/en/books/arch-handbook/mac/_index.po
@@ -0,0 +1,8170 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-05-21 14:43-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:18
+#, no-wrap
+msgid "The TrustedBSD MAC Framework"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1
+#, no-wrap
+msgid "Chapter 6. The TrustedBSD MAC Framework"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:56
+#, no-wrap
+msgid "MAC Documentation Copyright"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:59
+msgid ""
+"This documentation was developed for the FreeBSD Project by Chris Costello "
+"at Safeport Network Services 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."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:61
+msgid ""
+"Redistribution and use in source (SGML DocBook) and 'compiled' forms (SGML, "
+"HTML, PDF, PostScript, RTF and so forth) with or without modification, are "
+"permitted provided that the following conditions are met:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:63
+msgid ""
+"Redistributions of source code (SGML DocBook) must retain the above "
+"copyright notice, this list of conditions and the following disclaimer as "
+"the first lines of this file unmodified."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:64
+msgid ""
+"Redistributions in compiled form (transformed to other DTDs, converted to "
+"PDF, PostScript, RTF and other formats) 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."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:69
+msgid ""
+"THIS DOCUMENTATION IS PROVIDED BY THE NETWORKS ASSOCIATES TECHNOLOGY, INC "
+"\"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 NETWORKS ASSOCIATES TECHNOLOGY, "
+"INC 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 DOCUMENTATION, EVEN IF ADVISED OF "
+"THE POSSIBILITY OF SUCH DAMAGE."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:72
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:77
+msgid ""
+"FreeBSD includes experimental support for several mandatory access control "
+"policies, as well as a framework for kernel security extensibility, the "
+"TrustedBSD MAC Framework. The MAC Framework is a pluggable access control "
+"framework, permitting new security policies to be easily linked into the "
+"kernel, loaded at boot, or loaded dynamically at run-time. The framework "
+"provides a variety of features to make it easier to implement new security "
+"policies, including the ability to easily tag security labels (such as "
+"confidentiality information) onto system objects."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:79
+msgid ""
+"This chapter introduces the MAC policy framework and provides documentation "
+"for a sample MAC policy module."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:81
+#, no-wrap
+msgid "Introduction"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:87
+msgid ""
+"The TrustedBSD MAC framework provides a mechanism to allow the compile-time "
+"or run-time extension of the kernel access control model. New system "
+"policies may be implemented as kernel modules and linked to the kernel; if "
+"multiple policy modules are present, their results will be composed. The "
+"MAC Framework provides a variety of access control infrastructure services "
+"to assist policy writers, including support for transient and persistent "
+"policy-agnostic object security labels. This support is currently "
+"considered experimental."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:89
+msgid ""
+"This chapter provides information appropriate for developers of policy "
+"modules, as well as potential consumers of MAC-enabled environments, to "
+"learn about how the MAC Framework supports access control extension of the "
+"kernel."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:91
+#, no-wrap
+msgid "Policy Background"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:98
+msgid ""
+"Mandatory Access Control (MAC), refers to a set of access control policies "
+"that are mandatorily enforced on users by the operating system. MAC "
+"policies may be contrasted with Discretionary Access Control (DAC) "
+"protections, by which non-administrative users may (at their discretion) "
+"protect objects. In traditional UNIX systems, DAC protections include file "
+"permissions and access control lists; MAC protections include process "
+"controls preventing inter-user debugging and firewalls. A variety of MAC "
+"policies have been formulated by operating system designers and security "
+"researches, including the Multi-Level Security (MLS) confidentiality policy, "
+"the Biba integrity policy, Role-Based Access Control (RBAC), Domain and Type "
+"Enforcement (DTE), and Type Enforcement (TE). Each model bases decisions on "
+"a variety of factors, including user identity, role, and security clearance, "
+"as well as security labels on objects representing concepts such as data "
+"sensitivity and integrity."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:101
+msgid ""
+"The TrustedBSD MAC Framework is capable of supporting policy modules that "
+"implement all of these policies, as well as a broad class of system "
+"hardening policies, which may use existing security attributes, such as user "
+"and group IDs, as well as extended attributes on files, and other system "
+"properties. In addition, despite the name, the MAC Framework can also be "
+"used to implement purely discretionary policies, as policy modules are given "
+"substantial flexibility in how they authorize protections."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:103
+#, no-wrap
+msgid "MAC Framework Kernel Architecture"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:107
+msgid ""
+"The TrustedBSD MAC Framework permits kernel modules to extend the operating "
+"system security policy, as well as providing infrastructure functionality "
+"required by many access control modules. If multiple policies are "
+"simultaneously loaded, the MAC Framework will usefully (for some definition "
+"of useful) compose the results of the policies."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:109
+#, no-wrap
+msgid "Kernel Elements"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:112
+msgid "The MAC Framework contains a number of kernel elements:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:114
+msgid "Framework management interfaces"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:115
+msgid "Concurrency and synchronization primitives."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:116
+msgid "Policy registration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:117
+msgid "Extensible security label for kernel objects"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:118
+msgid "Policy entry point composition operators"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:119
+msgid "Label management primitives"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:120
+msgid "Entry point API invoked by kernel services"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:121
+msgid "Entry point API to policy modules"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:122
+msgid ""
+"Entry points implementations (policy life cycle, object life cycle/label "
+"management, access control checks)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:123
+msgid "Policy-agnostic label-management system calls"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:124
+msgid "`mac_syscall()` multiplex system call"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:125
+msgid "Various security policies implemented as MAC policy modules"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:127
+#, no-wrap
+msgid "Framework Management Interfaces"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:130
+msgid ""
+"The TrustedBSD MAC Framework may be directly managed using sysctl's, loader "
+"tunables, and system calls."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:135
+msgid ""
+"In most cases, sysctl's and loader tunables of the same name modify the same "
+"parameters, and control behavior such as enforcement of protections relating "
+"to various kernel subsystems. In addition, if MAC debugging support is "
+"compiled into the kernel, several counters will be maintained tracking label "
+"allocation. It is generally advisable that per-subsystem enforcement "
+"controls not be used to control policy behavior in production environments, "
+"as they broadly impact the operation of all active policies. Instead, per-"
+"policy controls should be preferred, as they provide greater granularity and "
+"greater operational consistency for policy modules."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:137
+msgid ""
+"Loading and unloading of policy modules is performed using the system module "
+"management system calls and other system interfaces, including boot loader "
+"variables; policy modules will have the opportunity to influence load and "
+"unload events, including preventing undesired unloading of the policy."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:139
+#, no-wrap
+msgid "Policy List Concurrency and Synchronization"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:146
+msgid ""
+"As the set of active policies may change at run-time, and the invocation of "
+"entry points is non-atomic, synchronization is required to prevent loading "
+"or unloading of policies while an entry point invocation is in progress, "
+"freezing the set of active policies for the duration. This is accomplished "
+"by means of a framework busy count: whenever an entry point is entered, the "
+"busy count is incremented; whenever it is exited, the busy count is "
+"decremented. While the busy count is elevated, policy list changes are not "
+"permitted, and threads attempting to modify the policy list will sleep until "
+"the list is not busy. The busy count is protected by a mutex, and a "
+"condition variable is used to wake up sleepers waiting on policy list "
+"modifications. One side effect of this synchronization model is that "
+"recursion into the MAC Framework from within a policy module is permitted, "
+"although not generally used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:149
+msgid ""
+"Various optimizations are used to reduce the overhead of the busy count, "
+"including avoiding the full cost of incrementing and decrementing if the "
+"list is empty or contains only static entries (policies that are loaded "
+"before the system starts, and cannot be unloaded). A compile-time option is "
+"also provided which prevents any change in the set of loaded policies at run-"
+"time, which eliminates the mutex locking costs associated with supporting "
+"dynamically loaded and unloaded policies as synchronization is no longer "
+"required."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:151
+msgid ""
+"As the MAC Framework is not permitted to block in some entry points, a "
+"normal sleep lock cannot be used; as a result, it is possible for the load "
+"or unload attempt to block for a substantial period of time waiting for the "
+"framework to become idle."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:153
+#, no-wrap
+msgid "Label Synchronization"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:160
+msgid ""
+"As kernel objects of interest may generally be accessed from more than one "
+"thread at a time, and simultaneous entry of more than one thread into the "
+"MAC Framework is permitted, security attribute storage maintained by the MAC "
+"Framework is carefully synchronized. In general, existing kernel "
+"synchronization on kernel object data is used to protect MAC Framework "
+"security labels on the object: for example, MAC labels on sockets are "
+"protected using the existing socket mutex. Likewise, semantics for "
+"concurrent access are generally identical to those of the container objects: "
+"for credentials, copy-on-write semantics are maintained for label contents "
+"as with the remainder of the credential structure. The MAC Framework "
+"asserts necessary locks on objects when invoked with an object reference. "
+"Policy authors must be aware of these synchronization semantics, as they "
+"will sometimes limit the types of accesses permitted on labels: for example, "
+"when a read-only reference to a credential is passed to a policy via an "
+"entry point, only read operations are permitted on the label state attached "
+"to the credential."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:162
+#, no-wrap
+msgid "Policy Synchronization and Concurrency"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:168
+msgid ""
+"Policy modules must be written to assume that many kernel threads may "
+"simultaneously enter one more policy entry points due to the parallel and "
+"preemptive nature of the FreeBSD kernel. If the policy module makes use of "
+"mutable state, this may require the use of synchronization primitives within "
+"the policy to prevent inconsistent views on that state resulting in "
+"incorrect operation of the policy. Policies will generally be able to make "
+"use of existing FreeBSD synchronization primitives for this purpose, "
+"including mutexes, sleep locks, condition variables, and counting "
+"semaphores. However, policies should be written to employ these primitives "
+"carefully, respecting existing kernel lock orders, and recognizing that some "
+"entry points are not permitted to sleep, limiting the use of primitives in "
+"those entry points to mutexes and wakeup operations."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:171
+msgid ""
+"When policy modules call out to other kernel subsystems, they will generally "
+"need to release any in-policy locks in order to avoid violating the kernel "
+"lock order or risking lock recursion. This will maintain policy locks as "
+"leaf locks in the global lock order, helping to avoid deadlock."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:173
+#, no-wrap
+msgid "Policy Registration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:180
+msgid ""
+"The MAC Framework maintains two lists of active policies: a static list, and "
+"a dynamic list. The lists differ only with regards to their locking "
+"semantics: an elevated reference count is not required to make use of the "
+"static list. When kernel modules containing MAC Framework policies are "
+"loaded, the policy module will use `SYSINIT` to invoke a registration "
+"function; when a policy module is unloaded, `SYSINIT` will likewise invoke a "
+"de-registration function. Registration may fail if a policy module is "
+"loaded more than once, if insufficient resources are available for the "
+"registration (for example, the policy might require labeling and "
+"insufficient labeling state might be available), or other policy "
+"prerequisites might not be met (some policies may only be loaded prior to "
+"boot). Likewise, de-registration may fail if a policy is flagged as not "
+"unloadable."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:182
+#, no-wrap
+msgid "Entry Points"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:189
+msgid ""
+"Kernel services interact with the MAC Framework in two ways: they invoke a "
+"series of APIs to notify the framework of relevant events, and they provide "
+"a policy-agnostic label structure pointer in security-relevant objects. The "
+"label pointer is maintained by the MAC Framework via label management entry "
+"points, and permits the Framework to offer a labeling service to policy "
+"modules through relatively non-invasive changes to the kernel subsystem "
+"maintaining the object. For example, label pointers have been added to "
+"processes, process credentials, sockets, pipes, vnodes, Mbufs, network "
+"interfaces, IP reassembly queues, and a variety of other security-relevant "
+"structures. Kernel services also invoke the MAC Framework when they perform "
+"important security decisions, permitting policy modules to augment those "
+"decisions based on their own criteria (possibly including data stored in "
+"security labels). Most of these security critical decisions will be "
+"explicit access control checks; however, some affect more general decision "
+"functions such as packet matching for sockets and label transition at "
+"program execution."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:191
+#, no-wrap
+msgid "Policy Composition"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:199
+msgid ""
+"When more than one policy module is loaded into the kernel at a time, the "
+"results of the policy modules will be composed by the framework using a "
+"composition operator. This operator is currently hard-coded, and requires "
+"that all active policies must approve a request for it to return success. "
+"As policies may return a variety of error conditions (success, access "
+"denied, object does not exist, ...), a precedence operator selects the "
+"resulting error from the set of errors returned by policies. In general, "
+"errors indicating that an object does not exist will be preferred to errors "
+"indicating that access to an object is denied. While it is not guaranteed "
+"that the resulting composition will be useful or secure, we have found that "
+"it is for many useful selections of policies. For example, traditional "
+"trusted systems often ship with two or more policies using a similar "
+"composition."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:201
+#, no-wrap
+msgid "Labeling Support"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:207
+msgid ""
+"As many interesting access control extensions rely on security labels on "
+"objects, the MAC Framework provides a set of policy-agnostic label "
+"management system calls covering a variety of user-exposed objects. Common "
+"label types include partition identifiers, sensitivity labels, integrity "
+"labels, compartments, domains, roles, and types. By policy agnostic, we "
+"mean that policy modules are able to completely define the semantics of meta-"
+"data associated with an object. Policy modules participate in the "
+"internalization and externalization of string-based labels provides by user "
+"applications, and can expose multiple label elements to applications if "
+"desired."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:215
+msgid ""
+"In-memory labels are stored in slab-allocated `struct label`, which consists "
+"of a fixed-length array of unions, each holding a `void *` pointer and a "
+"`long`. Policies registering for label storage will be assigned a \"slot\" "
+"identifier, which may be used to dereference the label storage. The "
+"semantics of the storage are left entirely up to the policy module: modules "
+"are provided with a variety of entry points associated with the kernel "
+"object life cycle, including initialization, association/creation, and "
+"destruction. Using these interfaces, it is possible to implement reference "
+"counting and other storage models. Direct access to the object structure is "
+"generally not required by policy modules to retrieve a label, as the MAC "
+"Framework generally passes both a pointer to the object and a direct pointer "
+"to the object's label into entry points. The primary exception to this rule "
+"is the process credential, which must be manually dereferenced to access the "
+"credential label. This may change in future revisions of the MAC Framework."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:222
+msgid ""
+"Initialization entry points frequently include a sleeping disposition flag "
+"indicating whether or not an initialization is permitted to sleep; if "
+"sleeping is not permitted, a failure may be returned to cancel allocation of "
+"the label (and hence object). This may occur, for example, in the network "
+"stack during interrupt handling, where sleeping is not permitted, or while "
+"the caller holds a mutex. Due to the performance cost of maintaining labels "
+"on in-flight network packets (Mbufs), policies must specifically declare a "
+"requirement that Mbuf labels be allocated. Dynamically loaded policies "
+"making use of labels must be able to handle the case where their init "
+"function has not been called on an object, as objects may already exist when "
+"the policy is loaded. The MAC Framework guarantees that uninitialized label "
+"slots will hold a 0 or NULL value, which policies may use to detect "
+"uninitialized values. However, as allocation of Mbuf labels is conditional, "
+"policies must also be able to handle a NULL label pointer for Mbufs if they "
+"have been loaded dynamically."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:228
+msgid ""
+"In the case of file system labels, special support is provided for the "
+"persistent storage of security labels in extended attributes. Where "
+"available, extended attribute transactions are used to permit consistent "
+"compound updates of security labels on vnodes--currently this support is "
+"present only in the UFS2 file system. Policy authors may choose to "
+"implement multilabel file system object labels using one (or more) extended "
+"attributes. For efficiency reasons, the vnode label (`v_label`) is a cache "
+"of any on-disk label; policies are able to load values into the cache when "
+"the vnode is instantiated, and update the cache as needed. As a result, the "
+"extended attribute need not be directly accessed with every access control "
+"check."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:232
+msgid ""
+"Currently, if a labeled policy permits dynamic unloading, its state slot "
+"cannot be reclaimed, which places a strict (and relatively low) bound on the "
+"number of unload-reload operations for labeled policies."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:235
+#, no-wrap
+msgid "System Calls"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:238
+msgid ""
+"The MAC Framework implements a number of system calls: most of these calls "
+"support the policy-agnostic label retrieval and manipulation APIs exposed to "
+"user applications."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:244
+msgid ""
+"The label management calls accept a label description structure, `struct "
+"mac`, which contains a series of MAC label elements. Each element contains "
+"a character string name, and character string value. Each policy will be "
+"given the chance to claim a particular element name, permitting policies to "
+"expose multiple independent elements if desired. Policy modules perform the "
+"internalization and externalization between kernel labels and user-provided "
+"labels via entry points, permitting a variety of semantics. Label "
+"management system calls are generally wrapped by user library functions to "
+"perform memory allocation and error handling, simplifying user applications "
+"that must manage labels."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:246
+msgid ""
+"The following MAC-related system calls are present in the FreeBSD kernel:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:248
+msgid ""
+"`mac_get_proc()` may be used to retrieve the label of the current process."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:249
+msgid ""
+"`mac_set_proc()` may be used to request a change in the label of the current "
+"process."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:250
+msgid ""
+"`mac_get_fd()` may be used to retrieve the label of an object (file, socket, "
+"pipe, ...) referenced by a file descriptor."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:251
+msgid ""
+"`mac_get_file()` may be used to retrieve the label of an object referenced "
+"by a file system path."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:252
+msgid ""
+"`mac_set_fd()` may be used to request a change in the label of an object "
+"(file, socket, pipe, ...) referenced by a file descriptor."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:253
+msgid ""
+"`mac_set_file()` may be used to request a change in the label of an object "
+"referenced by a file system path."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:254
+msgid ""
+"`mac_syscall()` permits policy modules to create new system calls without "
+"modifying the system call table; it accepts a target policy name, operation "
+"number, and opaque argument for use by the policy."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:255
+msgid ""
+"`mac_get_pid()` may be used to request the label of another process by "
+"process id."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:256
+msgid ""
+"`mac_get_link()` is identical to `mac_get_file()`, only it will not follow a "
+"symbolic link if it is the final entry in the path, so may be used to "
+"retrieve the label on a symlink."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:257
+msgid ""
+"`mac_set_link()` is identical to `mac_set_file()`, only it will not follow a "
+"symbolic link if it is the final entry in a path, so may be used to "
+"manipulate the label on a symlink."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:259
+msgid ""
+"`mac_execve()` is identical to the `execve()` system call, only it also "
+"accepts a requested label to set the process label to when beginning "
+"execution of a new program. This change in label on execution is referred "
+"to as a \"transition\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:260
+msgid ""
+"`mac_get_peer()`, actually implemented via a socket option, retrieves the "
+"label of a remote peer on a socket, if available."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:262
+msgid ""
+"In addition to these system calls, the `SIOCSIGMAC` and `SIOCSIFMAC` network "
+"interface ioctls permit the labels on network interfaces to be retrieved and "
+"set."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:264
+#, no-wrap
+msgid "MAC Policy Architecture"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:269
+msgid ""
+"Security policies are either linked directly into the kernel, or compiled "
+"into loadable kernel modules that may be loaded at boot, or dynamically "
+"using the module loading system calls at runtime. Policy modules interact "
+"with the system through a set of declared entry points, providing access to "
+"a stream of system events and permitting the policy to influence access "
+"control decisions. Each policy contains a number of elements:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:271
+msgid "Optional configuration parameters for policy."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:272
+msgid "Centralized implementation of the policy logic and parameters."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:273
+msgid ""
+"Optional implementation of policy life cycle events, such as initialization "
+"and destruction."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:274
+msgid ""
+"Optional support for initializing, maintaining, and destroying labels on "
+"selected kernel objects."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:275
+msgid ""
+"Optional support for user process inspection and modification of labels on "
+"selected objects."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:276
+msgid ""
+"Implementation of selected access control entry points that are of interest "
+"to the policy."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:277
+msgid ""
+"Declaration of policy identity, module entry points, and policy properties."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:279
+#, no-wrap
+msgid "Policy Declaration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:282
+msgid ""
+"Modules may be declared using the `MAC_POLICY_SET()` macro, which names the "
+"policy, provides a reference to the MAC entry point vector, provides load-"
+"time flags determining how the policy framework should handle the policy, "
+"and optionally requests the allocation of label state by the framework."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:296
+#, no-wrap
+msgid ""
+"static struct mac_policy_ops mac_policy_ops =\n"
+"{\n"
+" .mpo_destroy = mac_policy_destroy,\n"
+" .mpo_init = mac_policy_init,\n"
+" .mpo_init_bpfdesc_label = mac_policy_init_bpfdesc_label,\n"
+" .mpo_init_cred_label = mac_policy_init_label,\n"
+"/* ... */\n"
+" .mpo_check_vnode_setutimes = mac_policy_check_vnode_setutimes,\n"
+" .mpo_check_vnode_stat = mac_policy_check_vnode_stat,\n"
+" .mpo_check_vnode_write = mac_policy_check_vnode_write,\n"
+"};\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:301
+msgid ""
+"The MAC policy entry point vector, `mac__policy__ops` in this example, "
+"associates functions defined in the module with specific entry points. A "
+"complete listing of available entry points and their prototypes may be found "
+"in the MAC entry point reference section. Of specific interest during "
+"module registration are the .mpo_destroy and .mpo_init entry points."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:301
+#, no-wrap
+msgid "mpo_init will be invoked once a policy is successfully registered with the module framework but prior to any other entry points becoming active."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:303
+msgid ""
+"This permits the policy to perform any policy-specific allocation and "
+"initialization, such as initialization of any data or locks."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:303
+#, no-wrap
+msgid "mpo_destroy will be invoked when a policy module is unloaded to permit releasing of any allocated memory and destruction of locks."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:305
+msgid ""
+"Currently, these two entry points are invoked with the MAC policy list mutex "
+"held to prevent any other entry points from being invoked: this will be "
+"changed, but in the mean time, policies should be careful about what kernel "
+"primitives they invoke so as to avoid lock ordering or sleeping problems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:309
+msgid ""
+"The policy declaration's module name field exists so that the module may be "
+"uniquely identified for the purposes of module dependencies. An appropriate "
+"string should be selected. The full string name of the policy is displayed "
+"to the user via the kernel log during load and unload events, and also "
+"exported when providing status information to userland processes."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:311
+#, no-wrap
+msgid "Policy Flags"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:315
+msgid ""
+"The policy declaration flags field permits the module to provide the "
+"framework with information about its capabilities at the time the module is "
+"loaded. Currently, three flags are defined:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:316
+#, no-wrap
+msgid "MPC_LOADTIME_FLAG_UNLOADOK"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:320
+msgid ""
+"This flag indicates that the policy module may be unloaded. If this flag is "
+"not provided, then the policy framework will reject requests to unload the "
+"module. This flag might be used by modules that allocate label state and "
+"are unable to free that state at runtime."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:321
+#, no-wrap
+msgid "MPC_LOADTIME_FLAG_NOTLATE"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:325
+msgid ""
+"This flag indicates that the policy module must be loaded and initialized "
+"early in the boot process. If the flag is specified, attempts to register "
+"the module following boot will be rejected. The flag may be used by "
+"policies that require pervasive labeling of all system objects, and cannot "
+"handle objects that have not been properly initialized by the policy."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:326
+#, no-wrap
+msgid "MPC_LOADTIME_FLAG_LABELMBUFS"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:331
+msgid ""
+"This flag indicates that the policy module requires labeling of Mbufs, and "
+"that memory should always be allocated for the storage of Mbuf labels. By "
+"default, the MAC Framework will not allocate label storage for Mbufs unless "
+"at least one loaded policy has this flag set. This measurably improves "
+"network performance when policies do not require Mbuf labeling. A kernel "
+"option, `MAC_ALWAYS_LABEL_MBUF`, exists to force the MAC Framework to "
+"allocate Mbuf label storage regardless of the setting of this flag, and may "
+"be useful in some environments."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:337
+msgid ""
+"Policies using the `MPC_LOADTIME_FLAG_LABELMBUFS` without the "
+"`MPC_LOADTIME_FLAG_NOTLATE` flag set must be able to correctly handle `NULL` "
+"Mbuf label pointers passed into entry points. This is necessary as in-"
+"flight Mbufs without label storage may persist after a policy enabling Mbuf "
+"labeling has been loaded. If a policy is loaded before the network "
+"subsystem is active (i.e., the policy is not being loaded late), then all "
+"Mbufs are guaranteed to have label storage."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:340
+#, no-wrap
+msgid "Policy Entry Points"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:344
+msgid ""
+"Four classes of entry points are offered to policies registered with the "
+"framework: entry points associated with the registration and management of "
+"policies, entry points denoting initialization, creation, destruction, and "
+"other life cycle events for kernel objects, events associated with access "
+"control decisions that the policy module may influence, and calls associated "
+"with the management of labels on objects. In addition, a `mac_syscall()` "
+"entry point is provided so that policies may extend the kernel interface "
+"without registering new system calls."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:349
+msgid ""
+"Policy module writers should be aware of the kernel locking strategy, as "
+"well as what object locks are available during which entry points. Writers "
+"should attempt to avoid deadlock scenarios by avoiding grabbing non-leaf "
+"locks inside of entry points, and also follow the locking protocol for "
+"object access and modification. In particular, writers should be aware that "
+"while necessary locks to access objects and their labels are generally held, "
+"sufficient locks to modify an object or its label may not be present for all "
+"entry points. Locking information for arguments is documented in the MAC "
+"framework entry point document."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:353
+msgid ""
+"Policy entry points will pass a reference to the object label along with the "
+"object itself. This permits labeled policies to be unaware of the internals "
+"of the object yet still make decisions based on the label. The exception to "
+"this is the process credential, which is assumed to be understood by "
+"policies as a first class security object in the kernel."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:355
+#, no-wrap
+msgid "MAC Policy Entry Point Reference"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:358
+#, no-wrap
+msgid "General-Purpose Module Entry Points"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:361
+#, no-wrap
+msgid "`mpo_init`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:367
+#, no-wrap
+msgid ""
+"void mpo_init(\tconf);\n"
+"struct mac_policy_conf *conf;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:373
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:398
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:426
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:465
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:495
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:519
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:543
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:567
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:593
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:625
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:657
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:685
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:709
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:735
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:765
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:793
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:817
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:841
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:865
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:889
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:913
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:937
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:961
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:985
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1011
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1039
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1063
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1087
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1111
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1135
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1161
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1190
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1219
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1252
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1298
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1344
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1390
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1436
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1482
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1528
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1571
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1614
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1657
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1700
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1794
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1843
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1887
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1926
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1964
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2006
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2063
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2122
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2164
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2192
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2233
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2275
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2322
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2362
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2398
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2436
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2477
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2518
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2559
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2601
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2644
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2678
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2712
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2753
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2794
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2835
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2877
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2919
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2961
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3006
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3056
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3098
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3142
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3183
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3223
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3259
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3301
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3334
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3357
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3382
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3448
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3484
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3509
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3538
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3567
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3598
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3629
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3652
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3683
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3726
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3761
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3798
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3837
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3872
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3909
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3948
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3989
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4024
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4057
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4091
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4126
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4167
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4204
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4237
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4276
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4312
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4348
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4390
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4427
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4466
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4518
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4571
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4612
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4652
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4699
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4755
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4804
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4845
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4886
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4923
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4968
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5023
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5075
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5114
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5157
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5198
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5235
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5273
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5314
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5365
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5419
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5462
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5507
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5557
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5600
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5635
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5672
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5715
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5764
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5809
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5846
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5877
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5902
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5929
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5956
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:6001
+#, no-wrap
+msgid "Parameter"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:374
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:399
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:427
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:466
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:496
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:520
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:544
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:568
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:594
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:626
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:658
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:686
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:710
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:736
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:766
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:794
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:818
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:842
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:866
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:890
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:914
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:938
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:962
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:986
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1012
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1040
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1064
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1088
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1112
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1136
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1162
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1191
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1220
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1253
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1299
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1345
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1391
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1437
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1483
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1529
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1572
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1615
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1658
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1701
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1795
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1844
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1888
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1927
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1965
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2007
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2064
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2123
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2165
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2193
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2234
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2276
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2323
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2363
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2399
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2437
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2478
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2519
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2560
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2602
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2645
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2679
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2713
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2754
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2795
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2836
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2878
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2920
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2962
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3007
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3057
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3099
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3143
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3184
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3224
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3260
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3302
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3335
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3358
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3383
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3449
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3485
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3510
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3539
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3568
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3599
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3630
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3653
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3684
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3727
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3762
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3799
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3838
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3873
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3910
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3949
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3990
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4025
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4058
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4092
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4127
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4168
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4205
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4238
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4277
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4313
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4349
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4391
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4428
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4467
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4519
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4572
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4613
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4653
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4700
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4756
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4805
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4846
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4887
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4924
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4969
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5024
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5076
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5115
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5158
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5199
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5236
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5274
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5315
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5366
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5420
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5463
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5508
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5558
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5601
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5636
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5673
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5716
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5765
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5810
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5847
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5878
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5903
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5930
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5957
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:6002
+#, no-wrap
+msgid "Description"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:376
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:401
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:429
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:468
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:498
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:522
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:546
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:570
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:596
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:628
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:660
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:688
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:712
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:738
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:768
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:796
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:820
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:844
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:868
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:892
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:916
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:940
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:964
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:988
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1014
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1042
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1066
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1090
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1114
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1138
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1164
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1193
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1222
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1255
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1301
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1347
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1393
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1439
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1485
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1531
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1574
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1617
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1660
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1703
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1797
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1846
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1890
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1929
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1967
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2009
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2066
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2125
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2167
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2195
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2236
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2278
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2325
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2365
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2401
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2439
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2480
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2521
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2562
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2604
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2647
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2681
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2715
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2756
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2797
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2838
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2880
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2922
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2964
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3009
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3059
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3101
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3145
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3186
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3226
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3262
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3304
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3337
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3360
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3385
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3451
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3487
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3512
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3541
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3570
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3601
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3632
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3655
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3686
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3729
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3764
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3801
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3840
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3875
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3912
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3951
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3992
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4027
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4060
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4094
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4129
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4170
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4207
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4240
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4279
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4315
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4351
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4393
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4430
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4469
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4521
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4574
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4615
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4655
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4702
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4758
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4807
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4848
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4889
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4926
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4971
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5026
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5078
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5117
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5160
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5201
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5238
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5276
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5317
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5368
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5422
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5465
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5510
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5560
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5603
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5638
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5675
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5718
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5767
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5812
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5849
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5880
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5905
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5932
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5959
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:6004
+#, no-wrap
+msgid "Locking"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:377
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:402
+#, no-wrap
+msgid "`conf`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:378
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:403
+#, no-wrap
+msgid "MAC policy definition"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:384
+msgid ""
+"Policy load event. The policy list mutex is held, so sleep operations "
+"cannot be performed, and calls out to other kernel subsystems must be made "
+"with caution. If potentially sleeping memory allocations are required "
+"during policy initialization, they should be made using a separate module "
+"SYSINIT()."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:386
+#, no-wrap
+msgid "`mpo_destroy`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:392
+#, no-wrap
+msgid ""
+"void mpo_destroy(\tconf);\n"
+"struct mac_policy_conf *conf;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:408
+msgid ""
+"Policy load event. The policy list mutex is held, so caution should be "
+"applied."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:410
+#, no-wrap
+msgid "`mpo_syscall`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:420
+#, no-wrap
+msgid ""
+"int mpo_syscall(\ttd,\n"
+" \tcall,\n"
+" \targ);\n"
+"struct thread *td;\n"
+"int call;\n"
+"void *arg;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:430
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:469
+#, no-wrap
+msgid "`td`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:431
+#, no-wrap
+msgid "Calling thread"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:434
+#, no-wrap
+msgid "`call`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:435
+#, no-wrap
+msgid "Policy-specific syscall number"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:438
+#, no-wrap
+msgid "`arg`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:439
+#, no-wrap
+msgid "Pointer to syscall arguments"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:446
+msgid ""
+"This entry point provides a policy-multiplexed system call so that policies "
+"may provide additional services to user processes without registering "
+"specific system calls. The policy name provided during registration is used "
+"to demultiplexer calls from userland, and the arguments will be forwarded to "
+"this entry point. When implementing new services, security modules should "
+"be sure to invoke appropriate access control checks from the MAC framework "
+"as needed. For example, if a policy implements an augmented signal "
+"functionality, it should call the necessary signal access control checks to "
+"invoke the MAC framework and other registered policies."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:450
+msgid ""
+"Modules must currently perform the `copyin()` of the syscall data on their "
+"own."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:453
+#, no-wrap
+msgid "`mpo_thread_userret`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:459
+#, no-wrap
+msgid ""
+"void mpo_thread_userret(\ttd);\n"
+"struct thread *td;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:470
+#, no-wrap
+msgid "Returning thread"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:478
+msgid ""
+"This entry point permits policy modules to perform MAC-related events when a "
+"thread returns to user space, via a system call return, trap return, or "
+"otherwise. This is required for policies that have floating process labels, "
+"as it is not always possible to acquire the process lock at arbitrary points "
+"in the stack during system call processing; process labels might represent "
+"traditional authentication data, process history information, or other "
+"data. To employ this mechanism, intended changes to the process credential "
+"label may be stored in the `p_label` protected by a per-policy spin lock, "
+"and then set the per-thread `TDF_ASTPENDING` flag and per-process "
+"`PS_MACPENDM` flag to schedule a call to the `userret` entry point. From "
+"this entry point, the policy may create a replacement credential with less "
+"concern about the locking context. Policy writers are cautioned that event "
+"ordering relating to scheduling an AST and the AST being performed may be "
+"complex and interlaced in multithreaded applications."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:480
+#, no-wrap
+msgid "Label Operations"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:483
+#, no-wrap
+msgid "`mpo_init_bpfdesc_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:489
+#, no-wrap
+msgid ""
+"void mpo_init_bpfdesc_label(\tlabel);\n"
+"struct label *label;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:499
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:523
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:547
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:571
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:597
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:633
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:689
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:713
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:739
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:769
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:797
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:821
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:845
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:869
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:893
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:917
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:941
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:965
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:989
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1043
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1091
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1115
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1139
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1256
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1302
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1348
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1394
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1440
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1486
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1532
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1575
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1618
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1661
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1704
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1938
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2075
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4360
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4538
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4583
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4624
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4664
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4711
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4775
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4816
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4857
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4939
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4988
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5043
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5169
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5247
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5285
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5326
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5377
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5431
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5474
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5519
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5569
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5684
+#, no-wrap
+msgid "`label`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:500
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:548
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:572
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:598
+#, no-wrap
+msgid "New label to apply"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:505
+msgid ""
+"Initialize the label on a newly instantiated bpfdesc (BPF descriptor). "
+"Sleeping is permitted."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:507
+#, no-wrap
+msgid "`mpo_init_cred_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:513
+#, no-wrap
+msgid ""
+"void mpo_init_cred_label(\tlabel);\n"
+"struct label *label;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:524
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:740
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:770
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:798
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:822
+#, no-wrap
+msgid "New label to initialize"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:529
+msgid ""
+"Initialize the label for a newly instantiated user credential. Sleeping is "
+"permitted."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:531
+#, no-wrap
+msgid "`mpo_init_devfsdirent_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:537
+#, no-wrap
+msgid ""
+"void mpo_init_devfsdirent_label(\tlabel);\n"
+"struct label *label;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:553
+msgid ""
+"Initialize the label on a newly instantiated devfs entry. Sleeping is "
+"permitted."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:555
+#, no-wrap
+msgid "`mpo_init_ifnet_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:561
+#, no-wrap
+msgid ""
+"void mpo_init_ifnet_label(\tlabel);\n"
+"struct label *label;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:577
+msgid ""
+"Initialize the label on a newly instantiated network interface. Sleeping is "
+"permitted."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:579
+#, no-wrap
+msgid "`mpo_init_ipq_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:587
+#, no-wrap
+msgid ""
+"void mpo_init_ipq_label(\tlabel,\n"
+" \tflag);\n"
+"struct label *label;\n"
+"int flag;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:601
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:629
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:743
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:773
+#, no-wrap
+msgid "`flag`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:602
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:630
+#, no-wrap
+msgid "Sleeping/non-sleeping man:malloc[9]; see below"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:609
+msgid ""
+"Initialize the label on a newly instantiated IP fragment reassembly queue. "
+"The `flag` field may be one of M_WAITOK and M_NOWAIT, and should be employed "
+"to avoid performing a sleeping man:malloc[9] during this initialization "
+"call. IP fragment reassembly queue allocation frequently occurs in "
+"performance sensitive environments, and the implementation should be careful "
+"to avoid sleeping or long-lived operations. This entry point is permitted "
+"to fail resulting in the failure to allocate the IP fragment reassembly "
+"queue."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:611
+#, no-wrap
+msgid "`mpo_init_mbuf_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:619
+#, no-wrap
+msgid ""
+"void mpo_init_mbuf_label(\tflag,\n"
+" \tlabel);\n"
+"int flag;\n"
+"struct label *label;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:634
+#, no-wrap
+msgid "Policy label to initialize"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:641
+msgid ""
+"Initialize the label on a newly instantiated mbuf packet header (`mbuf`). "
+"The `flag` field may be one of M_WAITOK and M_NOWAIT, and should be employed "
+"to avoid performing a sleeping man:malloc[9] during this initialization "
+"call. Mbuf allocation frequently occurs in performance sensitive "
+"environments, and the implementation should be careful to avoid sleeping or "
+"long-lived operations. This entry point is permitted to fail resulting in "
+"the failure to allocate the mbuf header."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:643
+#, no-wrap
+msgid "`mpo_init_mount_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:651
+#, no-wrap
+msgid ""
+"void mpo_init_mount_label(\tmntlabel,\n"
+" \tfslabel);\n"
+"struct label *mntlabel;\n"
+"struct label *fslabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:661
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1015
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2134
+#, no-wrap
+msgid "`mntlabel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:662
+#, no-wrap
+msgid "Policy label to be initialized for the mount itself"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:665
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1019
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1802
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1851
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1895
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2138
+#, no-wrap
+msgid "`fslabel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:666
+#, no-wrap
+msgid "Policy label to be initialized for the file system"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:671
+msgid ""
+"Initialize the labels on a newly instantiated mount point. Sleeping is "
+"permitted."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:673
+#, no-wrap
+msgid "`mpo_init_mount_fs_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:679
+#, no-wrap
+msgid ""
+"void mpo_init_mount_fs_label(\tlabel);\n"
+"struct label *label;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:690
+#, no-wrap
+msgid "Label to be initialized"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:695
+msgid ""
+"Initialize the label on a newly mounted file system. Sleeping is permitted"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:697
+#, no-wrap
+msgid "`mpo_init_pipe_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:703
+#, no-wrap
+msgid ""
+"void mpo_init_pipe_label(\tlabel);\n"
+"struct label*label;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:714
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1533
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1576
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1619
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1662
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1705
+#, no-wrap
+msgid "Label to be filled in"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:719
+msgid ""
+"Initialize a label for a newly instantiated pipe. Sleeping is permitted."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:721
+#, no-wrap
+msgid "`mpo_init_socket_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:729
+#, no-wrap
+msgid ""
+"void mpo_init_socket_label(\tlabel,\n"
+" \tflag);\n"
+"struct label *label;\n"
+"int flag;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:744
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:774
+#, no-wrap
+msgid "man:malloc[9] flags"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:749
+msgid ""
+"Initialize a label for a newly instantiated socket. The `flag` field may be "
+"one of M_WAITOK and M_NOWAIT, and should be employed to avoid performing a "
+"sleeping man:malloc[9] during this initialization call."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:751
+#, no-wrap
+msgid "`mpo_init_socket_peer_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:759
+#, no-wrap
+msgid ""
+"void mpo_init_socket_peer_label(\tlabel,\n"
+" \tflag);\n"
+"struct label *label;\n"
+"int flag;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:779
+msgid ""
+"Initialize the peer label for a newly instantiated socket. The `flag` field "
+"may be one of M_WAITOK and M_NOWAIT, and should be employed to avoid "
+"performing a sleeping man:malloc[9] during this initialization call."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:781
+#, no-wrap
+msgid "`mpo_init_proc_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:787
+#, no-wrap
+msgid ""
+"void mpo_init_proc_label(\tlabel);\n"
+"struct label *label;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:803
+msgid ""
+"Initialize the label for a newly instantiated process. Sleeping is "
+"permitted."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:805
+#, no-wrap
+msgid "`mpo_init_vnode_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:811
+#, no-wrap
+msgid ""
+"void mpo_init_vnode_label(\tlabel);\n"
+"struct label *label;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:827
+msgid ""
+"Initialize the label on a newly instantiated vnode. Sleeping is permitted."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:829
+#, no-wrap
+msgid "`mpo_destroy_bpfdesc_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:835
+#, no-wrap
+msgid ""
+"void mpo_destroy_bpfdesc_label(\tlabel);\n"
+"struct label *label;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:846
+#, no-wrap
+msgid "bpfdesc label"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:851
+msgid ""
+"Destroy the label on a BPF descriptor. In this entry point a policy should "
+"free any internal storage associated with `label` so that it may be "
+"destroyed."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:853
+#, no-wrap
+msgid "`mpo_destroy_cred_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:859
+#, no-wrap
+msgid ""
+"void mpo_destroy_cred_label(\tlabel);\n"
+"struct label *label;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:870
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:894
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:918
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:942
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:966
+#, no-wrap
+msgid "Label being destroyed"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:875
+msgid ""
+"Destroy the label on a credential. In this entry point, a policy module "
+"should free any internal storage associated with `label` so that it may be "
+"destroyed."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:877
+#, no-wrap
+msgid "`mpo_destroy_devfsdirent_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:883
+#, no-wrap
+msgid ""
+"void mpo_destroy_devfsdirent_label(\tlabel);\n"
+"struct label *label;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:899
+msgid ""
+"Destroy the label on a devfs entry. In this entry point, a policy module "
+"should free any internal storage associated with `label` so that it may be "
+"destroyed."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:901
+#, no-wrap
+msgid "`mpo_destroy_ifnet_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:907
+#, no-wrap
+msgid ""
+"void mpo_destroy_ifnet_label(\tlabel);\n"
+"struct label *label;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:923
+msgid ""
+"Destroy the label on a removed interface. In this entry point, a policy "
+"module should free any internal storage associated with `label` so that it "
+"may be destroyed."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:925
+#, no-wrap
+msgid "`mpo_destroy_ipq_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:931
+#, no-wrap
+msgid ""
+"void mpo_destroy_ipq_label(\tlabel);\n"
+"struct label *label;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:947
+msgid ""
+"Destroy the label on an IP fragment queue. In this entry point, a policy "
+"module should free any internal storage associated with `label` so that it "
+"may be destroyed."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:949
+#, no-wrap
+msgid "`mpo_destroy_mbuf_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:955
+#, no-wrap
+msgid ""
+"void mpo_destroy_mbuf_label(\tlabel);\n"
+"struct label *label;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:971
+msgid ""
+"Destroy the label on an mbuf header. In this entry point, a policy module "
+"should free any internal storage associated with `label` so that it may be "
+"destroyed."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:973
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:997
+#, no-wrap
+msgid "`mpo_destroy_mount_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:979
+#, no-wrap
+msgid ""
+"void mpo_destroy_mount_label(\tlabel);\n"
+"struct label *label;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:990
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1016
+#, no-wrap
+msgid "Mount point label being destroyed"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:995
+msgid ""
+"Destroy the labels on a mount point. In this entry point, a policy module "
+"should free the internal storage associated with `mntlabel` so that they may "
+"be destroyed."
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1005
+#, no-wrap
+msgid ""
+"void mpo_destroy_mount_label(\tmntlabel,\n"
+" \tfslabel);\n"
+"struct label *mntlabel;\n"
+"struct label *fslabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1020
+#, no-wrap
+msgid "File system label being destroyed>"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1025
+msgid ""
+"Destroy the labels on a mount point. In this entry point, a policy module "
+"should free the internal storage associated with `mntlabel` and `fslabel` so "
+"that they may be destroyed."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1027
+#, no-wrap
+msgid "`mpo_destroy_socket_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1033
+#, no-wrap
+msgid ""
+"void mpo_destroy_socket_label(\tlabel);\n"
+"struct label *label;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1044
+#, no-wrap
+msgid "Socket label being destroyed"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1049
+msgid ""
+"Destroy the label on a socket. In this entry point, a policy module should "
+"free any internal storage associated with `label` so that it may be "
+"destroyed."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1051
+#, no-wrap
+msgid "`mpo_destroy_socket_peer_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1057
+#, no-wrap
+msgid ""
+"void mpo_destroy_socket_peer_label(\tpeerlabel);\n"
+"struct label *peerlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1067
+#, no-wrap
+msgid "`peerlabel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1068
+#, no-wrap
+msgid "Socket peer label being destroyed"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1073
+msgid ""
+"Destroy the peer label on a socket. In this entry point, a policy module "
+"should free any internal storage associated with `label` so that it may be "
+"destroyed."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1075
+#, no-wrap
+msgid "`mpo_destroy_pipe_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1081
+#, no-wrap
+msgid ""
+"void mpo_destroy_pipe_label(\tlabel);\n"
+"struct label *label;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1092
+#, no-wrap
+msgid "Pipe label"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1097
+msgid ""
+"Destroy the label on a pipe. In this entry point, a policy module should "
+"free any internal storage associated with `label` so that it may be "
+"destroyed."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1099
+#, no-wrap
+msgid "`mpo_destroy_proc_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1105
+#, no-wrap
+msgid ""
+"void mpo_destroy_proc_label(\tlabel);\n"
+"struct label *label;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1116
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1140
+#, no-wrap
+msgid "Process label"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1121
+msgid ""
+"Destroy the label on a process. In this entry point, a policy module should "
+"free any internal storage associated with `label` so that it may be "
+"destroyed."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1123
+#, no-wrap
+msgid "`mpo_destroy_vnode_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1129
+#, no-wrap
+msgid ""
+"void mpo_destroy_vnode_label(\tlabel);\n"
+"struct label *label;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1145
+msgid ""
+"Destroy the label on a vnode. In this entry point, a policy module should "
+"free any internal storage associated with `label` so that it may be "
+"destroyed."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1147
+#, no-wrap
+msgid "`mpo_copy_mbuf_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1155
+#, no-wrap
+msgid ""
+"void mpo_copy_mbuf_label(\tsrc,\n"
+" \tdest);\n"
+"struct label *src;\n"
+"struct label *dest;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1165
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1194
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1223
+#, no-wrap
+msgid "`src`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1166
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1195
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1224
+#, no-wrap
+msgid "Source label"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1169
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1198
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1227
+#, no-wrap
+msgid "`dest`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1170
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1199
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1228
+#, no-wrap
+msgid "Destination label"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1174
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1203
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1232
+msgid "Copy the label information in `src` into `dest`."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1176
+#, no-wrap
+msgid "`mpo_copy_pipe_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1184
+#, no-wrap
+msgid ""
+"void mpo_copy_pipe_label(\tsrc,\n"
+" \tdest);\n"
+"struct label *src;\n"
+"struct label *dest;\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1205
+#, no-wrap
+msgid "`mpo_copy_vnode_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1213
+#, no-wrap
+msgid ""
+"void mpo_copy_vnode_label(\tsrc,\n"
+" \tdest);\n"
+"struct label *src;\n"
+"struct label *dest;\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1234
+#, no-wrap
+msgid "`mpo_externalize_cred_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1246
+#, no-wrap
+msgid ""
+"int mpo_externalize_cred_label(\tlabel,\n"
+" \telement_name,\n"
+" \tsb,\n"
+" \t*claimed);\n"
+"struct label *label;\n"
+"char *element_name;\n"
+"struct sbuf *sb;\n"
+"int *claimed;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1257
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1303
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1349
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1395
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1441
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1487
+#, no-wrap
+msgid "Label to be externalized"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1260
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1306
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1352
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1398
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1444
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1490
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1536
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1579
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1622
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1665
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1708
+#, no-wrap
+msgid "`element_name`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1261
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1307
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1353
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1399
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1445
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1491
+#, no-wrap
+msgid "Name of the policy whose label should be externalized"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1264
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1310
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1356
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1402
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1448
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1494
+#, no-wrap
+msgid "`sb`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1265
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1311
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1357
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1403
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1449
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1495
+#, no-wrap
+msgid "String buffer to be filled with a text representation of label"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1268
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1314
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1360
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1406
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1452
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1498
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1544
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1587
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1630
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1673
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1716
+#, no-wrap
+msgid "`claimed`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1269
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1315
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1361
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1407
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1453
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1499
+#, no-wrap
+msgid "Should be incremented when `element_data` can be filled in."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1278
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1324
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1370
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1416
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1462
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1508
+msgid ""
+"Produce an externalized label based on the label structure passed. An "
+"externalized label consists of a text representation of the label contents "
+"that can be used with userland applications and read by the user. "
+"Currently, all policies' `externalize` entry points will be called, so the "
+"implementation should check the contents of `element_name` before attempting "
+"to fill in `sb`. If `element_name` does not match the name of your policy, "
+"simply return 0. Only return nonzero if an error occurs while externalizing "
+"the label data. Once the policy fills in `element_data`, `*claimed` should "
+"be incremented."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1280
+#, no-wrap
+msgid "`mpo_externalize_ifnet_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1292
+#, no-wrap
+msgid ""
+"int mpo_externalize_ifnet_label(\tlabel,\n"
+" \telement_name,\n"
+" \tsb,\n"
+" \t*claimed);\n"
+"struct label *label;\n"
+"char *element_name;\n"
+"struct sbuf *sb;\n"
+"int *claimed;\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1326
+#, no-wrap
+msgid "`mpo_externalize_pipe_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1338
+#, no-wrap
+msgid ""
+"int mpo_externalize_pipe_label(\tlabel,\n"
+" \telement_name,\n"
+" \tsb,\n"
+" \t*claimed);\n"
+"struct label *label;\n"
+"char *element_name;\n"
+"struct sbuf *sb;\n"
+"int *claimed;\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1372
+#, no-wrap
+msgid "`mpo_externalize_socket_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1384
+#, no-wrap
+msgid ""
+"int mpo_externalize_socket_label(\tlabel,\n"
+" \telement_name,\n"
+" \tsb,\n"
+" \t*claimed);\n"
+"struct label *label;\n"
+"char *element_name;\n"
+"struct sbuf *sb;\n"
+"int *claimed;\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1418
+#, no-wrap
+msgid "`mpo_externalize_socket_peer_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1430
+#, no-wrap
+msgid ""
+"int mpo_externalize_socket_peer_label(\tlabel,\n"
+" \telement_name,\n"
+" \tsb,\n"
+" \t*claimed);\n"
+"struct label *label;\n"
+"char *element_name;\n"
+"struct sbuf *sb;\n"
+"int *claimed;\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1464
+#, no-wrap
+msgid "`mpo_externalize_vnode_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1476
+#, no-wrap
+msgid ""
+"int mpo_externalize_vnode_label(\tlabel,\n"
+" \telement_name,\n"
+" \tsb,\n"
+" \t*claimed);\n"
+"struct label *label;\n"
+"char *element_name;\n"
+"struct sbuf *sb;\n"
+"int *claimed;\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1510
+#, no-wrap
+msgid "`mpo_internalize_cred_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1522
+#, no-wrap
+msgid ""
+"int mpo_internalize_cred_label(\tlabel,\n"
+" \telement_name,\n"
+" \telement_data,\n"
+" \tclaimed);\n"
+"struct label *label;\n"
+"char *element_name;\n"
+"char *element_data;\n"
+"int *claimed;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1537
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1580
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1623
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1666
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1709
+#, no-wrap
+msgid "Name of the policy whose label should be internalized"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1540
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1583
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1626
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1669
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1712
+#, no-wrap
+msgid "`element_data`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1541
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1584
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1627
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1670
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1713
+#, no-wrap
+msgid "Text data to be internalized"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1545
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1588
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1631
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1674
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1717
+#, no-wrap
+msgid "Should be incremented when data can be successfully internalized."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1551
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1594
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1637
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1680
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1723
+msgid ""
+"Produce an internal label structure based on externalized label data in text "
+"format. Currently, all policies' `internalize` entry points are called when "
+"internalization is requested, so the implementation should compare the "
+"contents of `element_name` to its own name in order to be sure it should be "
+"internalizing the data in `element_data`. Just as in the `externalize` "
+"entry points, the entry point should return 0 if `element_name` does not "
+"match its own name, or when data can successfully be internalized, in which "
+"case `*claimed` should be incremented."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1553
+#, no-wrap
+msgid "`mpo_internalize_ifnet_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1565
+#, no-wrap
+msgid ""
+"int mpo_internalize_ifnet_label(\tlabel,\n"
+" \telement_name,\n"
+" \telement_data,\n"
+" \tclaimed);\n"
+"struct label *label;\n"
+"char *element_name;\n"
+"char *element_data;\n"
+"int *claimed;\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1596
+#, no-wrap
+msgid "`mpo_internalize_pipe_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1608
+#, no-wrap
+msgid ""
+"int mpo_internalize_pipe_label(\tlabel,\n"
+" \telement_name,\n"
+" \telement_data,\n"
+" \tclaimed);\n"
+"struct label *label;\n"
+"char *element_name;\n"
+"char *element_data;\n"
+"int *claimed;\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1639
+#, no-wrap
+msgid "`mpo_internalize_socket_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1651
+#, no-wrap
+msgid ""
+"int mpo_internalize_socket_label(\tlabel,\n"
+" \telement_name,\n"
+" \telement_data,\n"
+" \tclaimed);\n"
+"struct label *label;\n"
+"char *element_name;\n"
+"char *element_data;\n"
+"int *claimed;\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1682
+#, no-wrap
+msgid "`mpo_internalize_vnode_label`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1694
+#, no-wrap
+msgid ""
+"int mpo_internalize_vnode_label(\tlabel,\n"
+" \telement_name,\n"
+" \telement_data,\n"
+" \tclaimed);\n"
+"struct label *label;\n"
+"char *element_name;\n"
+"char *element_data;\n"
+"int *claimed;\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1725
+#, no-wrap
+msgid "Label Events"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1733
+msgid ""
+"This class of entry points is used by the MAC framework to permit policies "
+"to maintain label information on kernel objects. For each labeled kernel "
+"object of interest to a MAC policy, entry points may be registered for "
+"relevant life cycle events. All objects implement initialization, creation, "
+"and destruction hooks. Some objects will also implement relabeling, "
+"allowing user processes to change the labels on objects. Some objects will "
+"also implement object-specific events, such as label events associated with "
+"IP reassembly. A typical labeled object will have the following life cycle "
+"of entry points:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1745
+#, no-wrap
+msgid ""
+"Label initialization o\n"
+"(object-specific wait) \\\n"
+"Label creation o\n"
+" \\\n"
+"Relabel events, o--<--.\n"
+"Various object-specific, | |\n"
+"Access control events ~-->--o\n"
+" \\\n"
+"Label destruction o\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1749
+msgid ""
+"Label initialization permits policies to allocate memory and set initial "
+"values for labels without context for the use of the object. The label slot "
+"allocated to a policy will be zeroed by default, so some policies may not "
+"need to perform initialization."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1756
+msgid ""
+"Label creation occurs when the kernel structure is associated with an actual "
+"kernel object. For example, Mbufs may be allocated and remain unused in a "
+"pool until they are required. mbuf allocation causes label initialization "
+"on the mbuf to take place, but mbuf creation occurs when the mbuf is "
+"associated with a datagram. Typically, context will be provided for a "
+"creation event, including the circumstances of the creation, and labels of "
+"other relevant objects in the creation process. For example, when an mbuf "
+"is created from a socket, the socket and its label will be presented to "
+"registered policies in addition to the new mbuf and its label. Memory "
+"allocation in creation events is discouraged, as it may occur in performance "
+"sensitive ports of the kernel; in addition, creation calls are not permitted "
+"to fail so a failure to allocate memory cannot be reported."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1759
+msgid ""
+"Object specific events do not generally fall into the other broad classes of "
+"label events, but will generally provide an opportunity to modify or update "
+"the label on an object based on additional context. For example, the label "
+"on an IP fragment reassembly queue may be updated during the MAC_UPDATE_IPQ "
+"entry point as a result of the acceptance of an additional mbuf to that "
+"queue."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1761
+msgid "Access control events are discussed in detail in the following section."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1763
+msgid ""
+"Label destruction permits policies to release storage or state associated "
+"with a label during its association with an object so that the kernel data "
+"structures supporting the object may be reused or released."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1767
+msgid ""
+"In addition to labels associated with specific kernel objects, an additional "
+"class of labels exists: temporary labels. These labels are used to store "
+"update information submitted by user processes. These labels are "
+"initialized and destroyed as with other label types, but the creation event "
+"is MAC_INTERNALIZE, which accepts a user label to be converted to an in-"
+"kernel representation."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1769
+#, no-wrap
+msgid "File System Object Labeling Event Operations"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1772
+#, no-wrap
+msgid "`mpo_associate_vnode_devfs`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1788
+#, no-wrap
+msgid ""
+"void mpo_associate_vnode_devfs(\tmp,\n"
+" \tfslabel,\n"
+" \tde,\n"
+" \tdelabel,\n"
+" \tvp,\n"
+" \tvlabel);\n"
+"struct mount *mp;\n"
+"struct label *fslabel;\n"
+"struct devfs_dirent *de;\n"
+"struct label *delabel;\n"
+"struct vnode *vp;\n"
+"struct label *vlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1798
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1847
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1891
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2014
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2130
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4284
+#, no-wrap
+msgid "`mp`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1799
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2015
+#, no-wrap
+msgid "Devfs mount point"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1803
+#, no-wrap
+msgid "Devfs file system label (`mp->mnt_fslabel`)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1806
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2026
+#, no-wrap
+msgid "`de`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1807
+#, no-wrap
+msgid "Devfs directory entry"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1810
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2030
+#, no-wrap
+msgid "`delabel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1811
+#, no-wrap
+msgid "Policy label associated with `de`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1814
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1855
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1899
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2087
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2200
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2241
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2287
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3271
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3309
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3606
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4245
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4356
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4534
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4579
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4620
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4660
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4707
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4771
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4812
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4853
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4894
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4935
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4984
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5039
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5165
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5243
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5281
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5322
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5373
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5427
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5470
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5515
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5565
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5680
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5854
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5964
+#, no-wrap
+msgid "`vp`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1815
+#, no-wrap
+msgid "vnode associated with `de`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1818
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1859
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1903
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2091
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2245
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3610
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5858
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5968
+#, no-wrap
+msgid "`vlabel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1819
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1860
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1904
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2092
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2246
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4776
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4817
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4940
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4989
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5044
+#, no-wrap
+msgid "Policy label associated with `vp`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1823
+msgid ""
+"Fill in the label (`vlabel`) for a newly created devfs vnode based on the "
+"devfs directory entry passed in `de` and its label."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1825
+#, no-wrap
+msgid "`mpo_associate_vnode_extattr`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1837
+#, no-wrap
+msgid ""
+"int mpo_associate_vnode_extattr(\tmp,\n"
+" \tfslabel,\n"
+" \tvp,\n"
+" \tvlabel);\n"
+"struct mount *mp;\n"
+"struct label *fslabel;\n"
+"struct vnode *vp;\n"
+"struct label *vlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1848
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1892
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2072
+#, no-wrap
+msgid "File system mount point"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1852
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1896
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2076
+#, no-wrap
+msgid "File system label"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1856
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1900
+#, no-wrap
+msgid "Vnode to label"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1867
+msgid ""
+"Attempt to retrieve the label for `vp` from the file system extended "
+"attributes. Upon success, the value `0` is returned. Should extended "
+"attribute retrieval not be supported, an accepted fallback is to copy "
+"`fslabel` into `vlabel`. In the event of an error, an appropriate value for "
+"`errno` should be returned."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1869
+#, no-wrap
+msgid "`mpo_associate_vnode_singlelabel`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1881
+#, no-wrap
+msgid ""
+"void mpo_associate_vnode_singlelabel(\tmp,\n"
+" \tfslabel,\n"
+" \tvp,\n"
+" \tvlabel);\n"
+"struct mount *mp;\n"
+"struct label *fslabel;\n"
+"struct vnode *vp;\n"
+"struct label *vlabel;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1908
+msgid ""
+"On non-multilabel file systems, this entry point is called to set the policy "
+"label for `vp` based on the file system label, `fslabel`."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1910
+#, no-wrap
+msgid "`mpo_create_devfs_device`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1920
+#, no-wrap
+msgid ""
+"void mpo_create_devfs_device(\tdev,\n"
+" \tdevfs_dirent,\n"
+" \tlabel);\n"
+"dev_t dev;\n"
+"struct devfs_dirent *devfs_dirent;\n"
+"struct label *label;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1930
+#, no-wrap
+msgid "`dev`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1931
+#, no-wrap
+msgid "Device corresponding with `devfs_dirent`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1934
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1976
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2279
+#, no-wrap
+msgid "`devfs_dirent`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1935
+#, no-wrap
+msgid "Devfs directory entry to be labeled."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1939
+#, no-wrap
+msgid "Label for `devfs_dirent` to be filled in."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1944
+msgid ""
+"Fill out the label on a devfs_dirent being created for the passed device. "
+"This call will be made when the device file system is mounted, regenerated, "
+"or a new device is made available."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1946
+#, no-wrap
+msgid "`mpo_create_devfs_directory`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1958
+#, no-wrap
+msgid ""
+"void mpo_create_devfs_directory(\tdirname,\n"
+" \tdirnamelen,\n"
+" \tdevfs_dirent,\n"
+" \tlabel);\n"
+"char *dirname;\n"
+"int dirnamelen;\n"
+"struct devfs_dirent *devfs_dirent;\n"
+"struct label *label;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1968
+#, no-wrap
+msgid "`dirname`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1969
+#, no-wrap
+msgid "Name of directory being created"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1972
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:6013
+#, no-wrap
+msgid "`namelen`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1973
+#, no-wrap
+msgid "Length of string `dirname`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1977
+#, no-wrap
+msgid "Devfs directory entry for directory being created."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1982
+msgid ""
+"Fill out the label on a devfs_dirent being created for the passed "
+"directory. This call will be made when the device file system is mounted, "
+"regenerated, or a new device requiring a specific directory hierarchy is "
+"made available."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1984
+#, no-wrap
+msgid "`mpo_create_devfs_symlink`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2000
+#, no-wrap
+msgid ""
+"void mpo_create_devfs_symlink(\tcred,\n"
+" \tmp,\n"
+" \tdd,\n"
+" \tddlabel,\n"
+" \tde,\n"
+" \tdelabel);\n"
+"struct ucred *cred;\n"
+"struct mount *mp;\n"
+"struct devfs_dirent *dd;\n"
+"struct label *ddlabel;\n"
+"struct devfs_dirent *de;\n"
+"struct label *delabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2010
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2067
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2126
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2196
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2237
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2366
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2402
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2481
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2522
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2648
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3146
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3338
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3361
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3386
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3488
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3513
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3542
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3571
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3602
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3633
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3656
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3687
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3730
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3765
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3802
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3841
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3876
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3913
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3952
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3993
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4028
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4095
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4130
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4171
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4208
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4241
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4280
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4316
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4352
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4394
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4431
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4470
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4522
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4575
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4616
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4656
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4703
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4759
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4808
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4849
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4890
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4972
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5027
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5079
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5118
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5161
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5202
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5239
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5277
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5318
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5369
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5423
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5466
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5511
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5561
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5604
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5639
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5676
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5719
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5768
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5813
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5881
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5906
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5933
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5960
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:6005
+#, no-wrap
+msgid "`cred`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2011
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2068
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2127
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2197
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2238
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2367
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2403
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2482
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2523
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2649
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3147
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3387
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3489
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3514
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3543
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3572
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3603
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3634
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3657
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3688
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3731
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3766
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3803
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3842
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3877
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3914
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3953
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3994
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4029
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4062
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4096
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4131
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4172
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4209
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4242
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4281
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4317
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4353
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4395
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4432
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4471
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4523
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4576
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4617
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4657
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4704
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4760
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4809
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4891
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4928
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4973
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5028
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5080
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5119
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5162
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5203
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5240
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5278
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5319
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5370
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5424
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5467
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5512
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5562
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5605
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5640
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5677
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5720
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5769
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5814
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5851
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5882
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5907
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5934
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5961
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:6006
+#, no-wrap
+msgid "Subject credential"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2018
+#, no-wrap
+msgid "`dd`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2019
+#, no-wrap
+msgid "Link destination"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2022
+#, no-wrap
+msgid "`ddlabel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2023
+#, no-wrap
+msgid "Label associated with `dd`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2027
+#, no-wrap
+msgid "Symlink entry"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2031
+#, no-wrap
+msgid "Label associated with `de`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2035
+msgid ""
+"Fill in the label (`delabel`) for a newly created man:devfs[5] symbolic link "
+"entry."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2037
+#, no-wrap
+msgid "`mpo_create_vnode_extattr`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2057
+#, no-wrap
+msgid ""
+"int mpo_create_vnode_extattr(\tcred,\n"
+" \tmp,\n"
+" \tfslabel,\n"
+" \tdvp,\n"
+" \tdlabel,\n"
+" \tvp,\n"
+" \tvlabel,\n"
+" \tcnp);\n"
+"struct ucred *cred;\n"
+"struct mount *mp;\n"
+"struct label *fslabel;\n"
+"struct vnode *dvp;\n"
+"struct label *dlabel;\n"
+"struct vnode *vp;\n"
+"struct label *vlabel;\n"
+"struct componentname *cnp;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2071
+#, no-wrap
+msgid "`mount`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2079
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4398
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4435
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4474
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4526
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4763
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4976
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5031
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5122
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5206
+#, no-wrap
+msgid "`dvp`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2080
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4527
+#, no-wrap
+msgid "Parent directory vnode"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2083
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4402
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4439
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4478
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4530
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4767
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4980
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5035
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5126
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5210
+#, no-wrap
+msgid "`dlabel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2084
+#, no-wrap
+msgid "Label associated with `dvp`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2088
+#, no-wrap
+msgid "Newly created vnode"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2095
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4482
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4542
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4779
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4992
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5051
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5130
+#, no-wrap
+msgid "`cnp`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2096
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4543
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4993
+#, no-wrap
+msgid "Component name for `vp`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2102
+msgid ""
+"Write out the label for `vp` to the appropriate extended attribute. If the "
+"write succeeds, fill in `vlabel` with the label, and return 0. Otherwise, "
+"return an appropriate error."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2104
+#, no-wrap
+msgid "`mpo_create_mount`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2116
+#, no-wrap
+msgid ""
+"void mpo_create_mount(\tcred,\n"
+" \tmp,\n"
+" \tmnt,\n"
+" \tfslabel);\n"
+"struct ucred *cred;\n"
+"struct mount *mp;\n"
+"struct label *mnt;\n"
+"struct label *fslabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2131
+#, no-wrap
+msgid "Object; file system being mounted"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2135
+#, no-wrap
+msgid "Policy label to be filled in for `mp`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2139
+#, no-wrap
+msgid "Policy label for the file system `mp` mounts."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2144
+msgid ""
+"Fill out the labels on the mount point being created by the passed subject "
+"credential. This call will be made when a new file system is mounted."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2146
+#, no-wrap
+msgid "`mpo_create_root_mount`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2158
+#, no-wrap
+msgid ""
+"void mpo_create_root_mount(\tcred,\n"
+" \tmp,\n"
+" \tmntlabel,\n"
+" \tfslabel);\n"
+"struct ucred *cred;\n"
+"struct mount *mp;\n"
+"struct label *mntlabel;\n"
+"struct label *fslabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2168
+#, no-wrap
+msgid "See <<mac-mpo-create-mount>>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2172
+msgid ""
+"Fill out the labels on the mount point being created by the passed subject "
+"credential. This call will be made when the root file system is mounted, "
+"after `mpo_create_mount;`."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2174
+#, no-wrap
+msgid "`mpo_relabel_vnode`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2186
+#, no-wrap
+msgid ""
+"void mpo_relabel_vnode(\tcred,\n"
+" \tvp,\n"
+" \tvnodelabel,\n"
+" \tnewlabel);\n"
+"struct ucred *cred;\n"
+"struct vnode *vp;\n"
+"struct label *vnodelabel;\n"
+"struct label *newlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2201
+#, no-wrap
+msgid "vnode to relabel"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2204
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2292
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3275
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3313
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4249
+#, no-wrap
+msgid "`vnodelabel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2205
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4250
+#, no-wrap
+msgid "Existing policy label for `vp`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2208
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2493
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2534
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2575
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3158
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3390
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3814
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4142
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4183
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4212
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4253
+#, no-wrap
+msgid "`newlabel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2209
+#, no-wrap
+msgid "New, possibly partial label to replace `vnodelabel`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2213
+msgid ""
+"Update the label on the passed vnode given the passed update vnode label and "
+"the passed subject credential."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2215
+#, no-wrap
+msgid "`mpo_setlabel_vnode_extattr`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2227
+#, no-wrap
+msgid ""
+"int mpo_setlabel_vnode_extattr(\tcred,\n"
+" \tvp,\n"
+" \tvlabel,\n"
+" \tintlabel);\n"
+"struct ucred *cred;\n"
+"struct vnode *vp;\n"
+"struct label *vlabel;\n"
+"struct label *intlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2242
+#, no-wrap
+msgid "Vnode for which the label is being written"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2249
+#, no-wrap
+msgid "`intlabel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2250
+#, no-wrap
+msgid "Label to write out"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2255
+msgid ""
+"Write out the policy from `intlabel` to an extended attribute. This is "
+"called from `vop_stdcreatevnode_ea`."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2257
+#, no-wrap
+msgid "`mpo_update_devfsdirent`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2269
+#, no-wrap
+msgid ""
+"void mpo_update_devfsdirent(\tdevfs_dirent,\n"
+" \tdirentlabel,\n"
+" \tvp,\n"
+" \tvnodelabel);\n"
+"struct devfs_dirent *devfs_dirent;\n"
+"struct label *direntlabel;\n"
+"struct vnode *vp;\n"
+"struct label *vnodelabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2280
+#, no-wrap
+msgid "Object; devfs directory entry"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2283
+#, no-wrap
+msgid "`direntlabel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2284
+#, no-wrap
+msgid "Policy label for `devfs_dirent` to be updated."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2288
+#, no-wrap
+msgid "Parent vnode"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2289
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3274
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4248
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4582
+#, no-wrap
+msgid "Locked"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2293
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3276
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3314
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4361
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4539
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4584
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4625
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4665
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4712
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5170
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5248
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5286
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5327
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5378
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5432
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5475
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5520
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5570
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5685
+#, no-wrap
+msgid "Policy label for `vp`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2299
+msgid ""
+"Update the `devfs_dirent` label from the passed devfs vnode label. This "
+"call will be made when a devfs vnode has been successfully relabeled to "
+"commit the label change such that it lasts even if the vnode is recycled. "
+"It will also be made when a symlink is created in devfs, following a call to "
+"`mac_vnode_create_from_vnode` to initialize the vnode label."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2301
+#, no-wrap
+msgid "IPC Object Labeling Event Operations"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2304
+#, no-wrap
+msgid "`mpo_create_mbuf_from_socket`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2316
+#, no-wrap
+msgid ""
+"void mpo_create_mbuf_from_socket(\tso,\n"
+" \tsocketlabel,\n"
+" \tm,\n"
+" \tmbuflabel);\n"
+"struct socket *so;\n"
+"struct label *socketlabel;\n"
+"struct mbuf *m;\n"
+"struct label *mbuflabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2326
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3917
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3956
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4099
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4175
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5083
+#, no-wrap
+msgid "`socket`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2327
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3998
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4033
+#, no-wrap
+msgid "Socket"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2329
+#, no-wrap
+msgid "Socket locking WIP"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2330
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2410
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3921
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3960
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4001
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4036
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4103
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4179
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5087
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5821
+#, no-wrap
+msgid "`socketlabel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2331
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3922
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3961
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4104
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5088
+#, no-wrap
+msgid "Policy label for `socket`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2334
+#, no-wrap
+msgid "`m`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2335
+#, no-wrap
+msgid "Object; mbuf"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2338
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2567
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2893
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2935
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2977
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3191
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5735
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5784
+#, no-wrap
+msgid "`mbuflabel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2339
+#, no-wrap
+msgid "Policy label to fill in for `m`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2344
+msgid ""
+"Set the label on a newly created mbuf header from the passed socket label. "
+"This call is made when a new datagram or message is generated by the socket "
+"and stored in the passed mbuf."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2346
+#, no-wrap
+msgid "`mpo_create_pipe`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2356
+#, no-wrap
+msgid ""
+"void mpo_create_pipe(\tcred,\n"
+" \tpipe,\n"
+" \tpipelabel);\n"
+"struct ucred *cred;\n"
+"struct pipe *pipe;\n"
+"struct label *pipelabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2370
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2485
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3691
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3734
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3769
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3806
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3845
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3880
+#, no-wrap
+msgid "`pipe`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2371
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2486
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3692
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3735
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3770
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3807
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3846
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3881
+#, no-wrap
+msgid "Pipe"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2374
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3695
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3738
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3773
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3810
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3849
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3884
+#, no-wrap
+msgid "`pipelabel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2375
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3696
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3739
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3774
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3850
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3885
+#, no-wrap
+msgid "Policy label associated with `pipe`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2380
+msgid ""
+"Set the label on a newly created pipe from the passed subject credential. "
+"This call is made when a new pipe is created."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2382
+#, no-wrap
+msgid "`mpo_create_socket`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2392
+#, no-wrap
+msgid ""
+"void mpo_create_socket(\tcred,\n"
+" \tso,\n"
+" \tsocketlabel);\n"
+"struct ucred *cred;\n"
+"struct socket *so;\n"
+"struct label *socketlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2405
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2525
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2651
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3266
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3308
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4244
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4319
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4578
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5816
+#, no-wrap
+msgid "Immutable"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2406
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2526
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3997
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4032
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5817
+#, no-wrap
+msgid "`so`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2407
+#, no-wrap
+msgid "Object; socket to label"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2411
+#, no-wrap
+msgid "Label to fill in for `so`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2416
+msgid ""
+"Set the label on a newly created socket from the passed subject credential. "
+"This call is made when a socket is created."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2418
+#, no-wrap
+msgid "`mpo_create_socket_from_socket`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2430
+#, no-wrap
+msgid ""
+"void mpo_create_socket_from_socket(\toldsocket,\n"
+" \toldsocketlabel,\n"
+" \tnewsocket,\n"
+" \tnewsocketlabel);\n"
+"struct socket *oldsocket;\n"
+"struct label *oldsocketlabel;\n"
+"struct socket *newsocket;\n"
+"struct label *newsocketlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2440
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2605
+#, no-wrap
+msgid "`oldsocket`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2441
+#, no-wrap
+msgid "Listening socket"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2444
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2609
+#, no-wrap
+msgid "`oldsocketlabel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2445
+#, no-wrap
+msgid "Policy label associated with `oldsocket`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2448
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2613
+#, no-wrap
+msgid "`newsocket`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2449
+#, no-wrap
+msgid "New socket"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2452
+#, no-wrap
+msgid "`newsocketlabel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2453
+#, no-wrap
+msgid "Policy label associated with `newsocketlabel`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2457
+msgid ""
+"Label a socket, `newsocket`, newly man:accept[2]ed, based on the man:"
+"listen[2] socket, `oldsocket`."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2459
+#, no-wrap
+msgid "`mpo_relabel_pipe`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2471
+#, no-wrap
+msgid ""
+"void mpo_relabel_pipe(\tcred,\n"
+" \tpipe,\n"
+" \toldlabel,\n"
+" \tnewlabel);\n"
+"struct ucred *cred;\n"
+"struct pipe *pipe;\n"
+"struct label *oldlabel;\n"
+"struct label *newlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2489
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2530
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2571
+#, no-wrap
+msgid "`oldlabel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2490
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3811
+#, no-wrap
+msgid "Current policy label associated with `pipe`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2494
+#, no-wrap
+msgid "Policy label update to apply to `pipe`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2498
+msgid "Apply a new label, `newlabel`, to `pipe`."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2500
+#, no-wrap
+msgid "`mpo_relabel_socket`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2512
+#, no-wrap
+msgid ""
+"void mpo_relabel_socket(\tcred,\n"
+" \tso,\n"
+" \toldlabel,\n"
+" \tnewlabel);\n"
+"struct ucred *cred;\n"
+"struct socket *so;\n"
+"struct label *oldlabel;\n"
+"struct label *newlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2527
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4100
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4176
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5084
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5818
+#, no-wrap
+msgid "Object; socket"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2531
+#, no-wrap
+msgid "Current label for `so`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2535
+#, no-wrap
+msgid "Label update for `so`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2539
+msgid "Update the label on a socket from the passed socket label update."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2541
+#, no-wrap
+msgid "`mpo_set_socket_peer_from_mbuf`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2553
+#, no-wrap
+msgid ""
+"void mpo_set_socket_peer_from_mbuf(\tmbuf,\n"
+" \tmbuflabel,\n"
+" \toldlabel,\n"
+" \tnewlabel);\n"
+"struct mbuf *mbuf;\n"
+"struct label *mbuflabel;\n"
+"struct label *oldlabel;\n"
+"struct label *newlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2563
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2889
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2931
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2973
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3187
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5731
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5780
+#, no-wrap
+msgid "`mbuf`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2564
+#, no-wrap
+msgid "First datagram received over socket"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2568
+#, no-wrap
+msgid "Label for `mbuf`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2572
+#, no-wrap
+msgid "Current label for the socket"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2576
+#, no-wrap
+msgid "Policy label to be filled out for the socket"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2581
+msgid ""
+"Set the peer label on a stream socket from the passed mbuf label. This call "
+"will be made when the first datagram is received by the stream socket, with "
+"the exception of Unix domain sockets."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2583
+#, no-wrap
+msgid "`mpo_set_socket_peer_from_socket`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2595
+#, no-wrap
+msgid ""
+"void mpo_set_socket_peer_from_socket(\toldsocket,\n"
+" \toldsocketlabel,\n"
+" \tnewsocket,\n"
+" \tnewsocketpeerlabel);\n"
+"struct socket *oldsocket;\n"
+"struct label *oldsocketlabel;\n"
+"struct socket *newsocket;\n"
+"struct label *newsocketpeerlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2606
+#, no-wrap
+msgid "Local socket"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2610
+#, no-wrap
+msgid "Policy label for `oldsocket`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2614
+#, no-wrap
+msgid "Peer socket"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2617
+#, no-wrap
+msgid "`newsocketpeerlabel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2618
+#, no-wrap
+msgid "Policy label to fill in for `newsocket`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2623
+msgid ""
+"Set the peer label on a stream UNIX domain socket from the passed remote "
+"socket endpoint. This call will be made when the socket pair is connected, "
+"and will be made for both endpoints."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2625
+#, no-wrap
+msgid "Network Object Labeling Event Operations"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2628
+#, no-wrap
+msgid "`mpo_create_bpfdesc`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2638
+#, no-wrap
+msgid ""
+"void mpo_create_bpfdesc(\tcred,\n"
+" \tbpf_d,\n"
+" \tbpflabel);\n"
+"struct ucred *cred;\n"
+"struct bpf_d *bpf_d;\n"
+"struct label *bpflabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2652
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2923
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3452
+#, no-wrap
+msgid "`bpf_d`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2653
+#, no-wrap
+msgid "Object; bpf descriptor"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2656
+#, no-wrap
+msgid "`bpf`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2657
+#, no-wrap
+msgid "Policy label to be filled in for `bpf_d`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2662
+msgid ""
+"Set the label on a newly created BPF descriptor from the passed subject "
+"credential. This call will be made when a BPF device node is opened by a "
+"process with the passed subject credential."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2664
+#, no-wrap
+msgid "`mpo_create_ifnet`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2672
+#, no-wrap
+msgid ""
+"void mpo_create_ifnet(\tifnet,\n"
+" \tifnetlabel);\n"
+"struct ifnet *ifnet;\n"
+"struct label *ifnetlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2682
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2881
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2965
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3018
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3150
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3460
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4134
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5723
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5772
+#, no-wrap
+msgid "`ifnet`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2683
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2882
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2966
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3019
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5724
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5773
+#, no-wrap
+msgid "Network interface"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2686
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2885
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2969
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3022
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3154
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3464
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4138
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5727
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5776
+#, no-wrap
+msgid "`ifnetlabel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2687
+#, no-wrap
+msgid "Policy label to fill in for `ifnet`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2692
+msgid ""
+"Set the label on a newly created interface. This call may be made when a "
+"new physical interface becomes available to the system, or when a pseudo-"
+"interface is instantiated during the boot or as a result of a user action."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2694
+#, no-wrap
+msgid "`mpo_create_ipq`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2706
+#, no-wrap
+msgid ""
+"void mpo_create_ipq(\tfragment,\n"
+" \tfragmentlabel,\n"
+" \tipq,\n"
+" \tipqlabel);\n"
+"struct mbuf *fragment;\n"
+"struct label *fragmentlabel;\n"
+"struct ipq *ipq;\n"
+"struct label *ipqlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2716
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2806
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3102
+#, no-wrap
+msgid "`fragment`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2717
+#, no-wrap
+msgid "First received IP fragment"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2720
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2810
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3106
+#, no-wrap
+msgid "`fragmentlabel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2721
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3107
+#, no-wrap
+msgid "Policy label for `fragment`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2724
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2757
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3110
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3195
+#, no-wrap
+msgid "`ipq`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2725
+#, no-wrap
+msgid "IP reassembly queue to be labeled"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2728
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2761
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3114
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3199
+#, no-wrap
+msgid "`ipqlabel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2729
+#, no-wrap
+msgid "Policy label to be filled in for `ipq`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2733
+msgid ""
+"Set the label on a newly created IP fragment reassembly queue from the mbuf "
+"header of the first received fragment."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2735
+#, no-wrap
+msgid "`mpo_create_datagram_from_ipq`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2747
+#, no-wrap
+msgid ""
+"void mpo_create_create_datagram_from_ipq(\tipq,\n"
+" \tipqlabel,\n"
+" \tdatagram,\n"
+" \tdatagramlabel);\n"
+"struct ipq *ipq;\n"
+"struct label *ipqlabel;\n"
+"struct mbuf *datagram;\n"
+"struct label *datagramlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2758
+#, no-wrap
+msgid "IP reassembly queue"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2762
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3115
+#, no-wrap
+msgid "Policy label for `ipq`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2765
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2798
+#, no-wrap
+msgid "`datagram`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2766
+#, no-wrap
+msgid "Datagram to be labeled"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2769
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2802
+#, no-wrap
+msgid "`datagramlabel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2770
+#, no-wrap
+msgid "Policy label to be filled in for `datagramlabel`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2774
+msgid ""
+"Set the label on a newly reassembled IP datagram from the IP fragment "
+"reassembly queue from which it was generated."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2776
+#, no-wrap
+msgid "`mpo_create_fragment`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2788
+#, no-wrap
+msgid ""
+"void mpo_create_fragment(\tdatagram,\n"
+" \tdatagramlabel,\n"
+" \tfragment,\n"
+" \tfragmentlabel);\n"
+"struct mbuf *datagram;\n"
+"struct label *datagramlabel;\n"
+"struct mbuf *fragment;\n"
+"struct label *fragmentlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2799
+#, no-wrap
+msgid "Datagram"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2803
+#, no-wrap
+msgid "Policy label for `datagram`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2807
+#, no-wrap
+msgid "Fragment to be labeled"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2811
+#, no-wrap
+msgid "Policy label to be filled in for `datagram`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2815
+msgid ""
+"Set the label on the mbuf header of a newly created IP fragment from the "
+"label on the mbuf header of the datagram it was generate from."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2817
+#, no-wrap
+msgid "`mpo_create_mbuf_from_mbuf`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2829
+#, no-wrap
+msgid ""
+"void mpo_create_mbuf_from_mbuf(\toldmbuf,\n"
+" \toldmbuflabel,\n"
+" \tnewmbuf,\n"
+" \tnewmbuflabel);\n"
+"struct mbuf *oldmbuf;\n"
+"struct label *oldmbuflabel;\n"
+"struct mbuf *newmbuf;\n"
+"struct label *newmbuflabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2839
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3010
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3060
+#, no-wrap
+msgid "`oldmbuf`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2840
+#, no-wrap
+msgid "Existing (source) mbuf"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2843
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3014
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3064
+#, no-wrap
+msgid "`oldmbuflabel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2844
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3015
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3065
+#, no-wrap
+msgid "Policy label for `oldmbuf`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2847
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3026
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3068
+#, no-wrap
+msgid "`newmbuf`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2848
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2932
+#, no-wrap
+msgid "New mbuf to be labeled"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2851
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3030
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3072
+#, no-wrap
+msgid "`newmbuflabel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2852
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3031
+#, no-wrap
+msgid "Policy label to be filled in for `newmbuf`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2857
+msgid ""
+"Set the label on the mbuf header of a newly created datagram from the mbuf "
+"header of an existing datagram. This call may be made in a number of "
+"situations, including when an mbuf is re-allocated for alignment purposes."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2859
+#, no-wrap
+msgid "`mpo_create_mbuf_linklayer`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2871
+#, no-wrap
+msgid ""
+"void mpo_create_mbuf_linklayer(\tifnet,\n"
+" \tifnetlabel,\n"
+" \tmbuf,\n"
+" \tmbuflabel);\n"
+"struct ifnet *ifnet;\n"
+"struct label *ifnetlabel;\n"
+"struct mbuf *mbuf;\n"
+"struct label *mbuflabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2886
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3023
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3155
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3465
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5728
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5777
+#, no-wrap
+msgid "Policy label for `ifnet`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2890
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2974
+#, no-wrap
+msgid "mbuf header for new datagram"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2894
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2978
+#, no-wrap
+msgid "Policy label to be filled in for `mbuf`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2899
+msgid ""
+"Set the label on the mbuf header of a newly created datagram generated for "
+"the purposes of a link layer response for the passed interface. This call "
+"may be made in a number of situations, including for ARP or ND6 responses in "
+"the IPv4 and IPv6 stacks."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2901
+#, no-wrap
+msgid "`mpo_create_mbuf_from_bpfdesc`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2913
+#, no-wrap
+msgid ""
+"void mpo_create_mbuf_from_bpfdesc(\tbpf_d,\n"
+" \tbpflabel,\n"
+" \tmbuf,\n"
+" \tmbuflabel);\n"
+"struct bpf_d *bpf_d;\n"
+"struct label *bpflabel;\n"
+"struct mbuf *mbuf;\n"
+"struct label *mbuflabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2924
+#, no-wrap
+msgid "BPF descriptor"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2927
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3456
+#, no-wrap
+msgid "`bpflabel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2928
+#, no-wrap
+msgid "Policy label for `bpflabel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2936
+#, no-wrap
+msgid "Policy label to fill in for `mbuf`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2941
+msgid ""
+"Set the label on the mbuf header of a newly created datagram generated using "
+"the passed BPF descriptor. This call is made when a write is performed to "
+"the BPF device associated with the passed BPF descriptor."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2943
+#, no-wrap
+msgid "`mpo_create_mbuf_from_ifnet`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2955
+#, no-wrap
+msgid ""
+"void mpo_create_mbuf_from_ifnet(\tifnet,\n"
+" \tifnetlabel,\n"
+" \tmbuf,\n"
+" \tmbuflabel);\n"
+"struct ifnet *ifnet;\n"
+"struct label *ifnetlabel;\n"
+"struct mbuf *mbuf;\n"
+"struct label *mbuflabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2970
+#, no-wrap
+msgid "Policy label for `ifnetlabel`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2982
+msgid ""
+"Set the label on the mbuf header of a newly created datagram generated from "
+"the passed network interface."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2984
+#, no-wrap
+msgid "`mpo_create_mbuf_multicast_encap`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3000
+#, no-wrap
+msgid ""
+"void mpo_create_mbuf_multicast_encap(\toldmbuf,\n"
+" \toldmbuflabel,\n"
+" \tifnet,\n"
+" \tifnetlabel,\n"
+" \tnewmbuf,\n"
+" \tnewmbuflabel);\n"
+"struct mbuf *oldmbuf;\n"
+"struct label *oldmbuflabel;\n"
+"struct ifnet *ifnet;\n"
+"struct label *ifnetlabel;\n"
+"struct mbuf *newmbuf;\n"
+"struct label *newmbuflabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3011
+#, no-wrap
+msgid "mbuf header for existing datagram"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3027
+#, no-wrap
+msgid "mbuf header to be labeled for new datagram"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3036
+msgid ""
+"Set the label on the mbuf header of a newly created datagram generated from "
+"the existing passed datagram when it is processed by the passed multicast "
+"encapsulation interface. This call is made when an mbuf is to be delivered "
+"using the virtual interface."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3038
+#, no-wrap
+msgid "`mpo_create_mbuf_netlayer`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3050
+#, no-wrap
+msgid ""
+"void mpo_create_mbuf_netlayer(\toldmbuf,\n"
+" \toldmbuflabel,\n"
+" \tnewmbuf,\n"
+" \tnewmbuflabel);\n"
+"struct mbuf *oldmbuf;\n"
+"struct label *oldmbuflabel;\n"
+"struct mbuf *newmbuf;\n"
+"struct label *newmbuflabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3061
+#, no-wrap
+msgid "Received datagram"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3069
+#, no-wrap
+msgid "Newly created datagram"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3073
+#, no-wrap
+msgid "Policy label for `newmbuf`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3078
+msgid ""
+"Set the label on the mbuf header of a newly created datagram generated by "
+"the IP stack in response to an existing received datagram (`oldmbuf`). This "
+"call may be made in a number of situations, including when responding to "
+"ICMP request datagrams."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3080
+#, no-wrap
+msgid "`mpo_fragment_match`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3092
+#, no-wrap
+msgid ""
+"int mpo_fragment_match(\tfragment,\n"
+" \tfragmentlabel,\n"
+" \tipq,\n"
+" \tipqlabel);\n"
+"struct mbuf *fragment;\n"
+"struct label *fragmentlabel;\n"
+"struct ipq *ipq;\n"
+"struct label *ipqlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3103
+#, no-wrap
+msgid "IP datagram fragment"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3111
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3196
+#, no-wrap
+msgid "IP fragment reassembly queue"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3122
+msgid ""
+"Determine whether an mbuf header containing an IP datagram (`fragment`) "
+"fragment matches the label of the passed IP fragment reassembly queue "
+"(`ipq`). Return (1) for a successful match, or (0) for no match. This call "
+"is made when the IP stack attempts to find an existing fragment reassembly "
+"queue for a newly received fragment; if this fails, a new fragment "
+"reassembly queue may be instantiated for the fragment. Policies may use "
+"this entry point to prevent the reassembly of otherwise matching IP "
+"fragments if policy does not permit them to be reassembled based on the "
+"label or other information."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3124
+#, no-wrap
+msgid "`mpo_relabel_ifnet`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3136
+#, no-wrap
+msgid ""
+"void mpo_relabel_ifnet(\tcred,\n"
+" \tifnet,\n"
+" \tifnetlabel,\n"
+" \tnewlabel);\n"
+"struct ucred *cred;\n"
+"struct ifnet *ifnet;\n"
+"struct label *ifnetlabel;\n"
+"struct label *newlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3151
+#, no-wrap
+msgid "Object; Network interface"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3159
+#, no-wrap
+msgid "Label update to apply to `ifnet`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3163
+msgid ""
+"Update the label of network interface, `ifnet`, based on the passed update "
+"label, `newlabel`, and the passed subject credential, `cred`."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3165
+#, no-wrap
+msgid "`mpo_update_ipq`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3177
+#, no-wrap
+msgid ""
+"void mpo_update_ipq(\tfragment,\n"
+" \tfragmentlabel,\n"
+" \tipq,\n"
+" \tipqlabel);\n"
+"struct mbuf *fragment;\n"
+"struct label *fragmentlabel;\n"
+"struct ipq *ipq;\n"
+"struct label *ipqlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3188
+#, no-wrap
+msgid "IP fragment"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3192
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5736
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5785
+#, no-wrap
+msgid "Policy label for `mbuf`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3200
+#, no-wrap
+msgid "Policy label to be updated for `ipq`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3204
+msgid ""
+"Update the label on an IP fragment reassembly queue (`ipq`) based on the "
+"acceptance of the passed IP fragment mbuf header (`mbuf`)."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3206
+#, no-wrap
+msgid "Process Labeling Event Operations"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3209
+#, no-wrap
+msgid "`mpo_create_cred`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3217
+#, no-wrap
+msgid ""
+"void mpo_create_cred(\tparent_cred,\n"
+" \tchild_cred);\n"
+"struct ucred *parent_cred;\n"
+"struct ucred *child_cred;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3227
+#, no-wrap
+msgid "`parent_cred`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3228
+#, no-wrap
+msgid "Parent subject credential"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3231
+#, no-wrap
+msgid "`child_cred`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3232
+#, no-wrap
+msgid "Child subject credential"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3238
+msgid ""
+"Set the label of a newly created subject credential from the passed subject "
+"credential. This call will be made when man:crcopy[9] is invoked on a newly "
+"created `struct ucred`. This call should not be confused with a process "
+"forking or creation event."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3240
+#, no-wrap
+msgid "`mpo_execve_transition`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3252
+#, no-wrap
+msgid ""
+"void mpo_execve_transition(\told,\n"
+" \tnew,\n"
+" \tvp,\n"
+" \tvnodelabel);\n"
+"struct ucred *old;\n"
+"struct ucred *new;\n"
+"struct vnode *vp;\n"
+"struct label *vnodelabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3263
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3305
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:6017
+#, no-wrap
+msgid "`old`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3264
+#, no-wrap
+msgid "Existing subject credential"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3267
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:6029
+#, no-wrap
+msgid "`new`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3268
+#, no-wrap
+msgid "New subject credential to be labeled"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3272
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3310
+#, no-wrap
+msgid "File to execute"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3283
+msgid ""
+"Update the label of a newly created subject credential (`new`) from the "
+"passed existing subject credential (`old`) based on a label transition "
+"caused by executing the passed vnode (`vp`). This call occurs when a "
+"process executes the passed vnode and one of the policies returns a success "
+"from the `mpo_execve_will_transition` entry point. Policies may choose to "
+"implement this call simply by invoking `mpo_create_cred` and passing the two "
+"subject credentials so as not to implement a transitioning event. Policies "
+"should not leave this entry point unimplemented if they implement "
+"`mpo_create_cred`, even if they do not implement "
+"`mpo_execve_will_transition`."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3285
+#, no-wrap
+msgid "`mpo_execve_will_transition`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3295
+#, no-wrap
+msgid ""
+"int mpo_execve_will_transition(\told,\n"
+" \tvp,\n"
+" \tvnodelabel);\n"
+"struct ucred *old;\n"
+"struct vnode *vp;\n"
+"struct label *vnodelabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3306
+#, no-wrap
+msgid "Subject credential prior to man:execve[2]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3320
+msgid ""
+"Determine whether the policy will want to perform a transition event as a "
+"result of the execution of the passed vnode by the passed subject "
+"credential. Return 1 if a transition is required, 0 if not. Even if a "
+"policy returns 0, it should behave correctly in the presence of an "
+"unexpected invocation of `mpo_execve_transition`, as that call may happen as "
+"a result of another policy requesting a transition."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3322
+#, no-wrap
+msgid "`mpo_create_proc0`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3328
+#, no-wrap
+msgid ""
+"void mpo_create_proc0(\tcred);\n"
+"struct ucred *cred;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3339
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3362
+#, no-wrap
+msgid "Subject credential to be filled in"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3343
+msgid ""
+"Create the subject credential of process 0, the parent of all kernel "
+"processes."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3345
+#, no-wrap
+msgid "`mpo_create_proc1`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3351
+#, no-wrap
+msgid ""
+"void mpo_create_proc1(\tcred);\n"
+"struct ucred *cred;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3366
+msgid ""
+"Create the subject credential of process 1, the parent of all user processes."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3368
+#, no-wrap
+msgid "`mpo_relabel_cred`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3376
+#, no-wrap
+msgid ""
+"void mpo_relabel_cred(\tcred,\n"
+" \tnewlabel);\n"
+"struct ucred *cred;\n"
+"struct label *newlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3391
+#, no-wrap
+msgid "Label update to apply to `cred`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3395
+msgid "Update the label on a subject credential from the passed update label."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3397
+#, no-wrap
+msgid "Access Control Checks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3405
+msgid ""
+"Access control entry points permit policy modules to influence access "
+"control decisions made by the kernel. Generally, although not always, "
+"arguments to an access control entry point will include one or more "
+"authorizing credentials, information (possibly including a label) for any "
+"other objects involved in the operation. An access control entry point may "
+"return 0 to permit the operation, or an man:errno[2] error value. The "
+"results of invoking the entry point across various registered policy modules "
+"will be composed as follows: if all modules permit the operation to succeed, "
+"success will be returned. If one or modules returns a failure, a failure "
+"will be returned. If more than one module returns a failure, the errno "
+"value to return to the user will be selected using the following precedence, "
+"implemented by the `error_select()` function in [.filename]#kern_mac.c#:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3411
+#, no-wrap
+msgid "Most precedence"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3413
+#, no-wrap
+msgid "EDEADLK"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3416
+#, no-wrap
+msgid "EINVAL"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3419
+#, no-wrap
+msgid "ESRCH"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3422
+#, no-wrap
+msgid "EACCES"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3423
+#, no-wrap
+msgid "Least precedence"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3424
+#, no-wrap
+msgid "EPERM"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3428
+msgid ""
+"If none of the error values returned by all modules are listed in the "
+"precedence chart then an arbitrarily selected value from the set will be "
+"returned. In general, the rules provide precedence to errors in the "
+"following order: kernel failures, invalid arguments, object not present, "
+"access not permitted, other."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3430
+#, no-wrap
+msgid "`mpo_check_bpfdesc_receive`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3442
+#, no-wrap
+msgid ""
+"int mpo_check_bpfdesc_receive(\tbpf_d,\n"
+" \tbpflabel,\n"
+" \tifnet,\n"
+" \tifnetlabel);\n"
+"struct bpf_d *bpf_d;\n"
+"struct label *bpflabel;\n"
+"struct ifnet *ifnet;\n"
+"struct label *ifnetlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3453
+#, no-wrap
+msgid "Subject; BPF descriptor"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3457
+#, no-wrap
+msgid "Policy label for `bpf_d`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3461
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4135
+#, no-wrap
+msgid "Object; network interface"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3470
+msgid ""
+"Determine whether the MAC framework should permit datagrams from the passed "
+"interface to be delivered to the buffers of the passed BPF descriptor. "
+"Return (0) for success, or an `errno` value for failure Suggested failure: "
+"EACCES for label mismatches, EPERM for lack of privilege."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3472
+#, no-wrap
+msgid "`mpo_check_kenv_dump`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3478
+#, no-wrap
+msgid ""
+"int mpo_check_kenv_dump(\tcred);\n"
+"struct ucred *cred;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3493
+msgid ""
+"Determine whether the subject should be allowed to retrieve the kernel "
+"environment (see man:kenv[2])."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3495
+#, no-wrap
+msgid "`mpo_check_kenv_get`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3503
+#, no-wrap
+msgid ""
+"int mpo_check_kenv_get(\tcred,\n"
+" \tname);\n"
+"struct ucred *cred;\n"
+"char *name;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3517
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3546
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3575
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4719
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5385
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:6009
+#, no-wrap
+msgid "`name`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3518
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3547
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3576
+#, no-wrap
+msgid "Kernel environment variable name"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3522
+msgid ""
+"Determine whether the subject should be allowed to retrieve the value of the "
+"specified kernel environment variable."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3524
+#, no-wrap
+msgid "`mpo_check_kenv_set`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3532
+#, no-wrap
+msgid ""
+"int mpo_check_kenv_set(\tcred,\n"
+" \tname);\n"
+"struct ucred *cred;\n"
+"char *name;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3551
+msgid ""
+"Determine whether the subject should be allowed to set the specified kernel "
+"environment variable."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3553
+#, no-wrap
+msgid "`mpo_check_kenv_unset`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3561
+#, no-wrap
+msgid ""
+"int mpo_check_kenv_unset(\tcred,\n"
+" \tname);\n"
+"struct ucred *cred;\n"
+"char *name;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3580
+msgid ""
+"Determine whether the subject should be allowed to unset the specified "
+"kernel environment variable."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3582
+#, no-wrap
+msgid "`mpo_check_kld_load`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3592
+#, no-wrap
+msgid ""
+"int mpo_check_kld_load(\tcred,\n"
+" \tvp,\n"
+" \tvlabel);\n"
+"struct ucred *cred;\n"
+"struct vnode *vp;\n"
+"struct label *vlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3607
+#, no-wrap
+msgid "Kernel module vnode"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3611
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5859
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5969
+#, no-wrap
+msgid "Label associated with `vp`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3615
+msgid ""
+"Determine whether the subject should be allowed to load the specified module "
+"file."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3617
+#, no-wrap
+msgid "`mpo_check_kld_stat`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3623
+#, no-wrap
+msgid ""
+"int mpo_check_kld_stat(\tcred);\n"
+"struct ucred *cred;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3638
+msgid ""
+"Determine whether the subject should be allowed to retrieve a list of loaded "
+"kernel module files and associated statistics."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3640
+#, no-wrap
+msgid "`mpo_check_kld_unload`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3646
+#, no-wrap
+msgid ""
+"int mpo_check_kld_unload(\tcred);\n"
+"struct ucred *cred;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3661
+msgid ""
+"Determine whether the subject should be allowed to unload a kernel module."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3663
+#, no-wrap
+msgid "`mpo_check_pipe_ioctl`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3677
+#, no-wrap
+msgid ""
+"int mpo_check_pipe_ioctl(\tcred,\n"
+" \tpipe,\n"
+" \tpipelabel,\n"
+" \tcmd,\n"
+" \tdata);\n"
+"struct ucred *cred;\n"
+"struct pipe *pipe;\n"
+"struct label *pipelabel;\n"
+"unsigned long cmd;\n"
+"void *data;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3699
+#, no-wrap
+msgid "`cmd`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3700
+#, no-wrap
+msgid "man:ioctl[2] command"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3703
+#, no-wrap
+msgid "`data`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3704
+#, no-wrap
+msgid "man:ioctl[2] data"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3708
+msgid ""
+"Determine whether the subject should be allowed to make the specified man:"
+"ioctl[2] call."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3710
+#, no-wrap
+msgid "`mpo_check_pipe_poll`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3720
+#, no-wrap
+msgid ""
+"int mpo_check_pipe_poll(\tcred,\n"
+" \tpipe,\n"
+" \tpipelabel);\n"
+"struct ucred *cred;\n"
+"struct pipe *pipe;\n"
+"struct label *pipelabel;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3743
+msgid "Determine whether the subject should be allowed to poll `pipe`."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3745
+#, no-wrap
+msgid "`mpo_check_pipe_read`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3755
+#, no-wrap
+msgid ""
+"int mpo_check_pipe_read(\tcred,\n"
+" \tpipe,\n"
+" \tpipelabel);\n"
+"struct ucred *cred;\n"
+"struct pipe *pipe;\n"
+"struct label *pipelabel;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3778
+msgid "Determine whether the subject should be allowed read access to `pipe`."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3780
+#, no-wrap
+msgid "`mpo_check_pipe_relabel`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3792
+#, no-wrap
+msgid ""
+"int mpo_check_pipe_relabel(\tcred,\n"
+" \tpipe,\n"
+" \tpipelabel,\n"
+" \tnewlabel);\n"
+"struct ucred *cred;\n"
+"struct pipe *pipe;\n"
+"struct label *pipelabel;\n"
+"struct label *newlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3815
+#, no-wrap
+msgid "Label update to `pipelabel`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3819
+msgid "Determine whether the subject should be allowed to relabel `pipe`."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3821
+#, no-wrap
+msgid "`mpo_check_pipe_stat`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3831
+#, no-wrap
+msgid ""
+"int mpo_check_pipe_stat(\tcred,\n"
+" \tpipe,\n"
+" \tpipelabel);\n"
+"struct ucred *cred;\n"
+"struct pipe *pipe;\n"
+"struct label *pipelabel;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3854
+msgid ""
+"Determine whether the subject should be allowed to retrieve statistics "
+"related to `pipe`."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3856
+#, no-wrap
+msgid "`mpo_check_pipe_write`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3866
+#, no-wrap
+msgid ""
+"int mpo_check_pipe_write(\tcred,\n"
+" \tpipe,\n"
+" \tpipelabel);\n"
+"struct ucred *cred;\n"
+"struct pipe *pipe;\n"
+"struct label *pipelabel;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3889
+msgid "Determine whether the subject should be allowed to write to `pipe`."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3891
+#, no-wrap
+msgid "`mpo_check_socket_bind`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3903
+#, no-wrap
+msgid ""
+"int mpo_check_socket_bind(\tcred,\n"
+" \tsocket,\n"
+" \tsocketlabel,\n"
+" \tsockaddr);\n"
+"struct ucred *cred;\n"
+"struct socket *socket;\n"
+"struct label *socketlabel;\n"
+"struct sockaddr *sockaddr;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3918
+#, no-wrap
+msgid "Socket to be bound"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3925
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3964
+#, no-wrap
+msgid "`sockaddr`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3926
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3965
+#, no-wrap
+msgid "Address of `socket`"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3930
+#, no-wrap
+msgid "`mpo_check_socket_connect`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3942
+#, no-wrap
+msgid ""
+"int mpo_check_socket_connect(\tcred,\n"
+" \tsocket,\n"
+" \tsocketlabel,\n"
+" \tsockaddr);\n"
+"struct ucred *cred;\n"
+"struct socket *socket;\n"
+"struct label *socketlabel;\n"
+"struct sockaddr *sockaddr;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3957
+#, no-wrap
+msgid "Socket to be connected"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3971
+msgid ""
+"Determine whether the subject credential (`cred`) can connect the passed "
+"socket (`socket`) to the passed socket address (`sockaddr`). Return 0 for "
+"success, or an `errno` value for failure. Suggested failure: EACCES for "
+"label mismatches, EPERM for lack of privilege."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3973
+#, no-wrap
+msgid "`mpo_check_socket_receive`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3983
+#, no-wrap
+msgid ""
+"int mpo_check_socket_receive(\tcred,\n"
+" \tso,\n"
+" \tsocketlabel);\n"
+"struct ucred *cred;\n"
+"struct socket *so;\n"
+"struct label *socketlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4002
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4037
+#, no-wrap
+msgid "Policy label associated with `so`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4006
+msgid ""
+"Determine whether the subject should be allowed to receive information from "
+"the socket `so`."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4008
+#, no-wrap
+msgid "`mpo_check_socket_send`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4018
+#, no-wrap
+msgid ""
+"int mpo_check_socket_send(\tcred,\n"
+" \tso,\n"
+" \tsocketlabel);\n"
+"struct ucred *cred;\n"
+"struct socket *so;\n"
+"struct label *socketlabel;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4041
+msgid ""
+"Determine whether the subject should be allowed to send information across "
+"the socket `so`."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4043
+#, no-wrap
+msgid "`mpo_check_cred_visible`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4051
+#, no-wrap
+msgid ""
+"int mpo_check_cred_visible(\tu1,\n"
+" \tu2);\n"
+"struct ucred *u1;\n"
+"struct ucred *u2;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4061
+#, no-wrap
+msgid "`u1`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4065
+#, no-wrap
+msgid "`u2`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4066
+#, no-wrap
+msgid "Object credential"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4073
+msgid ""
+"Determine whether the subject credential `u1` can \"see\" other subjects "
+"with the passed subject credential `u2`. Return 0 for success, or an "
+"`errno` value for failure. Suggested failure: EACCES for label mismatches, "
+"EPERM for lack of privilege, or ESRCH to hide visibility. This call may be "
+"made in a number of situations, including inter-process status sysctl's used "
+"by `ps`, and in procfs lookups."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4075
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5793
+#, no-wrap
+msgid "`mpo_check_socket_visible`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4085
+#, no-wrap
+msgid ""
+"int mpo_check_socket_visible(\tcred,\n"
+" \tsocket,\n"
+" \tsocketlabel);\n"
+"struct ucred *cred;\n"
+"struct socket *socket;\n"
+"struct label *socketlabel;\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4108
+#, no-wrap
+msgid "`mpo_check_ifnet_relabel`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4120
+#, no-wrap
+msgid ""
+"int mpo_check_ifnet_relabel(\tcred,\n"
+" \tifnet,\n"
+" \tifnetlabel,\n"
+" \tnewlabel);\n"
+"struct ucred *cred;\n"
+"struct ifnet *ifnet;\n"
+"struct label *ifnetlabel;\n"
+"struct label *newlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4139
+#, no-wrap
+msgid "Existing policy label for `ifnet`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4143
+#, no-wrap
+msgid "Policy label update to later be applied to `ifnet`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4147
+msgid ""
+"Determine whether the subject credential can relabel the passed network "
+"interface to the passed label update."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4149
+#, no-wrap
+msgid "`mpo_check_socket_relabel`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4161
+#, no-wrap
+msgid ""
+"int mpo_check_socket_relabel(\tcred,\n"
+" \tsocket,\n"
+" \tsocketlabel,\n"
+" \tnewlabel);\n"
+"struct ucred *cred;\n"
+"struct socket *socket;\n"
+"struct label *socketlabel;\n"
+"struct label *newlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4180
+#, no-wrap
+msgid "Existing policy label for `socket`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4184
+#, no-wrap
+msgid "Label update to later be applied to `socketlabel`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4188
+msgid ""
+"Determine whether the subject credential can relabel the passed socket to "
+"the passed label update."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4190
+#, no-wrap
+msgid "`mpo_check_cred_relabel`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4198
+#, no-wrap
+msgid ""
+"int mpo_check_cred_relabel(\tcred,\n"
+" \tnewlabel);\n"
+"struct ucred *cred;\n"
+"struct label *newlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4213
+#, no-wrap
+msgid "Label update to later be applied to `cred`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4217
+msgid ""
+"Determine whether the subject credential can relabel itself to the passed "
+"label update."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4219
+#, no-wrap
+msgid "`mpo_check_vnode_relabel`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4231
+#, no-wrap
+msgid ""
+"int mpo_check_vnode_relabel(\tcred,\n"
+" \tvp,\n"
+" \tvnodelabel,\n"
+" \tnewlabel);\n"
+"struct ucred *cred;\n"
+"struct vnode *vp;\n"
+"struct label *vnodelabel;\n"
+"struct label *newlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4246
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4357
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4475
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4580
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4661
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4708
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5123
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5166
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5244
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5282
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5323
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5374
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5428
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5471
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5516
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5681
+#, no-wrap
+msgid "Object; vnode"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4254
+#, no-wrap
+msgid "Policy label update to later be applied to `vp`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4258
+msgid ""
+"Determine whether the subject credential can relabel the passed vnode to the "
+"passed label update."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4260
+#, no-wrap
+msgid "`mpo_check_mount_stat`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4270
+#, no-wrap
+msgid ""
+"int mpo_check_mount_stat(\tcred,\n"
+" \tmp,\n"
+" \tmountlabel);\n"
+"struct ucred *cred;\n"
+"struct mount *mp;\n"
+"struct label *mountlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4285
+#, no-wrap
+msgid "Object; file system mount"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4288
+#, no-wrap
+msgid "`mountlabel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4289
+#, no-wrap
+msgid "Policy label for `mp`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4296
+msgid ""
+"Determine whether the subject credential can see the results of a statfs "
+"performed on the file system. Return 0 for success, or an `errno` value for "
+"failure. Suggested failure: EACCES for label mismatches or EPERM for lack "
+"of privilege. This call may be made in a number of situations, including "
+"during invocations of man:statfs[2] and related calls, as well as to "
+"determine what file systems to exclude from listings of file systems, such "
+"as when man:getfsstat[2] is invoked."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4298
+#, no-wrap
+msgid "`mpo_check_proc_debug`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4306
+#, no-wrap
+msgid ""
+"int mpo_check_proc_debug(\tcred,\n"
+" \tproc);\n"
+"struct ucred *cred;\n"
+"struct proc *proc;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4320
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5608
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5643
+#, no-wrap
+msgid "`proc`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4321
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5609
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5644
+#, no-wrap
+msgid "Object; process"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4328
+msgid ""
+"Determine whether the subject credential can debug the passed process. "
+"Return 0 for success, or an `errno` value for failure. Suggested failure: "
+"EACCES for label mismatch, EPERM for lack of privilege, or ESRCH to hide "
+"visibility of the target. This call may be made in a number of situations, "
+"including use of the man:ptrace[2] and man:ktrace[2] APIs, as well as for "
+"some types of procfs operations."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4330
+#, no-wrap
+msgid "`mpo_check_vnode_access`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4342
+#, no-wrap
+msgid ""
+"int mpo_check_vnode_access(\tcred,\n"
+" \tvp,\n"
+" \tlabel,\n"
+" \tflags);\n"
+"struct ucred *cred;\n"
+"struct vnode *vp;\n"
+"struct label *label;\n"
+"int flags;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4364
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5435
+#, no-wrap
+msgid "`flags`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4365
+#, no-wrap
+msgid "man:access[2] flags"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4372
+msgid ""
+"Determine how invocations of man:access[2] and related calls by the subject "
+"credential should return when performed on the passed vnode using the passed "
+"access flags. This should generally be implemented using the same semantics "
+"used in `mpo_check_vnode_open`. Return 0 for success, or an `errno` value "
+"for failure. Suggested failure: EACCES for label mismatches or EPERM for "
+"lack of privilege."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4374
+#, no-wrap
+msgid "`mpo_check_vnode_chdir`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4384
+#, no-wrap
+msgid ""
+"int mpo_check_vnode_chdir(\tcred,\n"
+" \tdvp,\n"
+" \tdlabel);\n"
+"struct ucred *cred;\n"
+"struct vnode *dvp;\n"
+"struct label *dlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4399
+#, no-wrap
+msgid "Object; vnode to man:chdir[2] into"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4403
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4479
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4531
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5127
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5211
+#, no-wrap
+msgid "Policy label for `dvp`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4409
+msgid ""
+"Determine whether the subject credential can change the process working "
+"directory to the passed vnode. Return 0 for success, or an `errno` value "
+"for failure. Suggested failure: EACCES for label mismatch, or EPERM for "
+"lack of privilege."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4411
+#, no-wrap
+msgid "`mpo_check_vnode_chroot`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4421
+#, no-wrap
+msgid ""
+"int mpo_check_vnode_chroot(\tcred,\n"
+" \tdvp,\n"
+" \tdlabel);\n"
+"struct ucred *cred;\n"
+"struct vnode *dvp;\n"
+"struct label *dlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4436
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4764
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4977
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5032
+#, no-wrap
+msgid "Directory vnode"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4440
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4768
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4981
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5036
+#, no-wrap
+msgid "Policy label associated with `dvp`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4444
+msgid ""
+"Determine whether the subject should be allowed to man:chroot[2] into the "
+"specified directory (`dvp`)."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4446
+#, no-wrap
+msgid "`mpo_check_vnode_create`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4460
+#, no-wrap
+msgid ""
+"int mpo_check_vnode_create(\tcred,\n"
+" \tdvp,\n"
+" \tdlabel,\n"
+" \tcnp,\n"
+" \tvap);\n"
+"struct ucred *cred;\n"
+"struct vnode *dvp;\n"
+"struct label *dlabel;\n"
+"struct componentname *cnp;\n"
+"struct vattr *vap;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4483
+#, no-wrap
+msgid "Component name for `dvp`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4486
+#, no-wrap
+msgid "`vap`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4487
+#, no-wrap
+msgid "vnode attributes for `vap`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4494
+msgid ""
+"Determine whether the subject credential can create a vnode with the passed "
+"parent directory, passed name information, and passed attribute "
+"information. Return 0 for success, or an `errno` value for failure. "
+"Suggested failure: EACCES for label mismatch, or EPERM for lack of "
+"privilege. This call may be made in a number of situations, including as a "
+"result of calls to man:open[2] with O_CREAT, man:mkfifo[2], and others."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4496
+#, no-wrap
+msgid "`mpo_check_vnode_delete`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4512
+#, no-wrap
+msgid ""
+"int mpo_check_vnode_delete(\tcred,\n"
+" \tdvp,\n"
+" \tdlabel,\n"
+" \tvp,\n"
+" \tlabel,\n"
+" \tcnp);\n"
+"struct ucred *cred;\n"
+"struct vnode *dvp;\n"
+"struct label *dlabel;\n"
+"struct vnode *vp;\n"
+"void *label;\n"
+"struct componentname *cnp;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4535
+#, no-wrap
+msgid "Object; vnode to delete"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4551
+msgid ""
+"Determine whether the subject credential can delete a vnode from the passed "
+"parent directory and passed name information. Return 0 for success, or an "
+"`errno` value for failure. Suggested failure: EACCES for label mismatch, or "
+"EPERM for lack of privilege. This call may be made in a number of "
+"situations, including as a result of calls to man:unlink[2] and man:"
+"rmdir[2]. Policies implementing this entry point should also implement "
+"`mpo_check_rename_to` to authorize deletion of objects as a result of being "
+"the target of a rename."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4553
+#, no-wrap
+msgid "`mpo_check_vnode_deleteacl`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4565
+#, no-wrap
+msgid ""
+"int mpo_check_vnode_deleteacl(\tcred,\n"
+" \tvp,\n"
+" \tlabel,\n"
+" \ttype);\n"
+"struct ucred *cred;\n"
+"struct vnode *vp;\n"
+"struct label *label;\n"
+"acl_type_t type;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4587
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4668
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5330
+#, no-wrap
+msgid "`type`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4588
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4669
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5331
+#, no-wrap
+msgid "ACL type"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4594
+msgid ""
+"Determine whether the subject credential can delete the ACL of passed type "
+"from the passed vnode. Return 0 for success, or an `errno` value for "
+"failure. Suggested failure: EACCES for label mismatch, or EPERM for lack of "
+"privilege."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4596
+#, no-wrap
+msgid "`mpo_check_vnode_exec`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4606
+#, no-wrap
+msgid ""
+"int mpo_check_vnode_exec(\tcred,\n"
+" \tvp,\n"
+" \tlabel);\n"
+"struct ucred *cred;\n"
+"struct vnode *vp;\n"
+"struct label *label;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4621
+#, no-wrap
+msgid "Object; vnode to execute"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4632
+msgid ""
+"Determine whether the subject credential can execute the passed vnode. "
+"Determination of execute privilege is made separately from decisions about "
+"any transitioning event. Return 0 for success, or an `errno` value for "
+"failure. Suggested failure: EACCES for label mismatch, or EPERM for lack of "
+"privilege."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4634
+#, no-wrap
+msgid "`mpo_check_vnode_getacl`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4646
+#, no-wrap
+msgid ""
+"int mpo_check_vnode_getacl(\tcred,\n"
+" \tvp,\n"
+" \tlabel,\n"
+" \ttype);\n"
+"struct ucred *cred;\n"
+"struct vnode *vp;\n"
+"struct label *label;\n"
+"acl_type_t type;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4675
+msgid ""
+"Determine whether the subject credential can retrieve the ACL of passed type "
+"from the passed vnode. Return 0 for success, or an `errno` value for "
+"failure. Suggested failure: EACCES for label mismatch, or EPERM for lack of "
+"privilege."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4677
+#, no-wrap
+msgid "`mpo_check_vnode_getextattr`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4693
+#, no-wrap
+msgid ""
+"int mpo_check_vnode_getextattr(\tcred,\n"
+" \tvp,\n"
+" \tlabel,\n"
+" \tattrnamespace,\n"
+" \tname,\n"
+" \tuio);\n"
+"struct ucred *cred;\n"
+"struct vnode *vp;\n"
+"struct label *label;\n"
+"int attrnamespace;\n"
+"const char *name;\n"
+"struct uio *uio;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4715
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5381
+#, no-wrap
+msgid "`attrnamespace`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4716
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5382
+#, no-wrap
+msgid "Extended attribute namespace"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4720
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5386
+#, no-wrap
+msgid "Extended attribute name"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4723
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5389
+#, no-wrap
+msgid "`uio`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4724
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5390
+#, no-wrap
+msgid "I/O structure pointer; see man:uio[9]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4731
+msgid ""
+"Determine whether the subject credential can retrieve the extended attribute "
+"with the passed namespace and name from the passed vnode. Policies "
+"implementing labeling using extended attributes may be interested in special "
+"handling of operations on those extended attributes. Return 0 for success, "
+"or an `errno` value for failure. Suggested failure: EACCES for label "
+"mismatch, or EPERM for lack of privilege."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4733
+#, no-wrap
+msgid "`mpo_check_vnode_link`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4749
+#, no-wrap
+msgid ""
+"int mpo_check_vnode_link(\tcred,\n"
+" \tdvp,\n"
+" \tdlabel,\n"
+" \tvp,\n"
+" \tlabel,\n"
+" \tcnp);\n"
+"struct ucred *cred;\n"
+"struct vnode *dvp;\n"
+"struct label *dlabel;\n"
+"struct vnode *vp;\n"
+"struct label *label;\n"
+"struct componentname *cnp;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4772
+#, no-wrap
+msgid "Link destination vnode"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4780
+#, no-wrap
+msgid "Component name for the link being created"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4784
+msgid ""
+"Determine whether the subject should be allowed to create a link to the "
+"vnode `vp` with the name specified by `cnp`."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4786
+#, no-wrap
+msgid "`mpo_check_vnode_mmap`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4798
+#, no-wrap
+msgid ""
+"int mpo_check_vnode_mmap(\tcred,\n"
+" \tvp,\n"
+" \tlabel,\n"
+" \tprot);\n"
+"struct ucred *cred;\n"
+"struct vnode *vp;\n"
+"struct label *label;\n"
+"int prot;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4813
+#, no-wrap
+msgid "Vnode to map"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4820
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4861
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4898
+#, no-wrap
+msgid "`prot`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4821
+#, no-wrap
+msgid "Mmap protections (see man:mmap[2])"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4825
+msgid ""
+"Determine whether the subject should be allowed to map the vnode `vp` with "
+"the protections specified in `prot`."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4827
+#, no-wrap
+msgid "`mpo_check_vnode_mmap_downgrade`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4839
+#, no-wrap
+msgid ""
+"void mpo_check_vnode_mmap_downgrade(\tcred,\n"
+" \tvp,\n"
+" \tlabel,\n"
+" \tprot);\n"
+"struct ucred *cred;\n"
+"struct vnode *vp;\n"
+"struct label *label;\n"
+"int *prot;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4850
+#, no-wrap
+msgid "See <<mac-mpo-check-vnode-mmap>>."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4862
+#, no-wrap
+msgid "Mmap protections to be downgraded"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4866
+msgid "Downgrade the mmap protections based on the subject and object labels."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4868
+#, no-wrap
+msgid "`mpo_check_vnode_mprotect`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4880
+#, no-wrap
+msgid ""
+"int mpo_check_vnode_mprotect(\tcred,\n"
+" \tvp,\n"
+" \tlabel,\n"
+" \tprot);\n"
+"struct ucred *cred;\n"
+"struct vnode *vp;\n"
+"struct label *label;\n"
+"int prot;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4895
+#, no-wrap
+msgid "Mapped vnode"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4899
+#, no-wrap
+msgid "Memory protections"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4903
+msgid ""
+"Determine whether the subject should be allowed to set the specified memory "
+"protections on memory mapped from the vnode `vp`."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4905
+#, no-wrap
+msgid "`mpo_check_vnode_poll`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4917
+#, no-wrap
+msgid ""
+"int mpo_check_vnode_poll(\tactive_cred,\n"
+" \tfile_cred,\n"
+" \tvp,\n"
+" \tlabel);\n"
+"struct ucred *active_cred;\n"
+"struct ucred *file_cred;\n"
+"struct vnode *vp;\n"
+"struct label *label;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4927
+#, no-wrap
+msgid "`active_cred`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4931
+#, no-wrap
+msgid "`file_cred`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4932
+#, no-wrap
+msgid "Credential associated with the struct file"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4936
+#, no-wrap
+msgid "Polled vnode"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4944
+msgid "Determine whether the subject should be allowed to poll the vnode `vp`."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4946
+#, no-wrap
+msgid "`mpo_check_vnode_rename_from`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4962
+#, no-wrap
+msgid ""
+"int mpo_vnode_rename_from(\tcred,\n"
+" \tdvp,\n"
+" \tdlabel,\n"
+" \tvp,\n"
+" \tlabel,\n"
+" \tcnp);\n"
+"struct ucred *cred;\n"
+"struct vnode *dvp;\n"
+"struct label *dlabel;\n"
+"struct vnode *vp;\n"
+"struct label *label;\n"
+"struct componentname *cnp;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4985
+#, no-wrap
+msgid "Vnode to be renamed"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4997
+msgid ""
+"Determine whether the subject should be allowed to rename the vnode `vp` to "
+"something else."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4999
+#, no-wrap
+msgid "`mpo_check_vnode_rename_to`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5017
+#, no-wrap
+msgid ""
+"int mpo_check_vnode_rename_to(\tcred,\n"
+" \tdvp,\n"
+" \tdlabel,\n"
+" \tvp,\n"
+" \tlabel,\n"
+" \tsamedir,\n"
+" \tcnp);\n"
+"struct ucred *cred;\n"
+"struct vnode *dvp;\n"
+"struct label *dlabel;\n"
+"struct vnode *vp;\n"
+"struct label *label;\n"
+"int samedir;\n"
+"struct componentname *cnp;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5040
+#, no-wrap
+msgid "Overwritten vnode"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5047
+#, no-wrap
+msgid "`samedir`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5048
+#, no-wrap
+msgid "Boolean; `1` if the source and destination directories are the same"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5052
+#, no-wrap
+msgid "Destination component name"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5057
+msgid ""
+"Determine whether the subject should be allowed to rename to the vnode `vp`, "
+"into the directory `dvp`, or to the name represented by `cnp`. If there is "
+"no existing file to overwrite, `vp` and `label` will be NULL."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5059
+#, no-wrap
+msgid "`mpo_check_socket_listen`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5069
+#, no-wrap
+msgid ""
+"int mpo_check_socket_listen(\tcred,\n"
+" \tsocket,\n"
+" \tsocketlabel);\n"
+"struct ucred *cred;\n"
+"struct socket *socket;\n"
+"struct label *socketlabel;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5094
+msgid ""
+"Determine whether the subject credential can listen on the passed socket. "
+"Return 0 for success, or an `errno` value for failure. Suggested failure: "
+"EACCES for label mismatch, or EPERM for lack of privilege."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5096
+#, no-wrap
+msgid "`mpo_check_vnode_lookup`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5108
+#, no-wrap
+msgid ""
+"int mpo_check_vnode_lookup(\t,\n"
+" \t,\n"
+" \t,\n"
+" \tcnp);\n"
+"struct ucred *cred;\n"
+"struct vnode *dvp;\n"
+"struct label *dlabel;\n"
+"struct componentname *cnp;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5131
+#, no-wrap
+msgid "Component name being looked up"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5137
+msgid ""
+"Determine whether the subject credential can perform a lookup in the passed "
+"directory vnode for the passed name. Return 0 for success, or an `errno` "
+"value for failure. Suggested failure: EACCES for label mismatch, or EPERM "
+"for lack of privilege."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5139
+#, no-wrap
+msgid "`mpo_check_vnode_open`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5151
+#, no-wrap
+msgid ""
+"int mpo_check_vnode_open(\tcred,\n"
+" \tvp,\n"
+" \tlabel,\n"
+" \tacc_mode);\n"
+"struct ucred *cred;\n"
+"struct vnode *vp;\n"
+"struct label *label;\n"
+"int acc_mode;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5173
+#, no-wrap
+msgid "`acc_mode`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5174
+#, no-wrap
+msgid "man:open[2] access mode"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5180
+msgid ""
+"Determine whether the subject credential can perform an open operation on "
+"the passed vnode with the passed access mode. Return 0 for success, or an "
+"errno value for failure. Suggested failure: EACCES for label mismatch, or "
+"EPERM for lack of privilege."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5182
+#, no-wrap
+msgid "`mpo_check_vnode_readdir`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5192
+#, no-wrap
+msgid ""
+"int mpo_check_vnode_readdir(\t,\n"
+" \t,\n"
+" \t);\n"
+"struct ucred *cred;\n"
+"struct vnode *dvp;\n"
+"struct label *dlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5207
+#, no-wrap
+msgid "Object; directory vnode"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5217
+msgid ""
+"Determine whether the subject credential can perform a `readdir` operation "
+"on the passed directory vnode. Return 0 for success, or an `errno` value "
+"for failure. Suggested failure: EACCES for label mismatch, or EPERM for "
+"lack of privilege."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5219
+#, no-wrap
+msgid "`mpo_check_vnode_readlink`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5229
+#, no-wrap
+msgid ""
+"int mpo_check_vnode_readlink(\tcred,\n"
+" \tvp,\n"
+" \tlabel);\n"
+"struct ucred *cred;\n"
+"struct vnode *vp;\n"
+"struct label *label;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5255
+msgid ""
+"Determine whether the subject credential can perform a `readlink` operation "
+"on the passed symlink vnode. Return 0 for success, or an `errno` value for "
+"failure. Suggested failure: EACCES for label mismatch, or EPERM for lack of "
+"privilege. This call may be made in a number of situations, including an "
+"explicit `readlink` call by the user process, or as a result of an implicit "
+"`readlink` during a name lookup by the process."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5257
+#, no-wrap
+msgid "`mpo_check_vnode_revoke`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5267
+#, no-wrap
+msgid ""
+"int mpo_check_vnode_revoke(\tcred,\n"
+" \tvp,\n"
+" \tlabel);\n"
+"struct ucred *cred;\n"
+"struct vnode *vp;\n"
+"struct label *label;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5292
+msgid ""
+"Determine whether the subject credential can revoke access to the passed "
+"vnode. Return 0 for success, or an `errno` value for failure. Suggested "
+"failure: EACCES for label mismatch, or EPERM for lack of privilege."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5294
+#, no-wrap
+msgid "`mpo_check_vnode_setacl`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5308
+#, no-wrap
+msgid ""
+"int mpo_check_vnode_setacl(\tcred,\n"
+" \tvp,\n"
+" \tlabel,\n"
+" \ttype,\n"
+" \tacl);\n"
+"struct ucred *cred;\n"
+"struct vnode *vp;\n"
+"struct label *label;\n"
+"acl_type_t type;\n"
+"struct acl *acl;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5334
+#, no-wrap
+msgid "`acl`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5335
+#, no-wrap
+msgid "ACL"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5341
+msgid ""
+"Determine whether the subject credential can set the passed ACL of passed "
+"type on the passed vnode. Return 0 for success, or an `errno` value for "
+"failure. Suggested failure: EACCES for label mismatch, or EPERM for lack of "
+"privilege."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5343
+#, no-wrap
+msgid "`mpo_check_vnode_setextattr`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5359
+#, no-wrap
+msgid ""
+"int mpo_check_vnode_setextattr(\tcred,\n"
+" \tvp,\n"
+" \tlabel,\n"
+" \tattrnamespace,\n"
+" \tname,\n"
+" \tuio);\n"
+"struct ucred *cred;\n"
+"struct vnode *vp;\n"
+"struct label *label;\n"
+"int attrnamespace;\n"
+"const char *name;\n"
+"struct uio *uio;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5399
+msgid ""
+"Determine whether the subject credential can set the extended attribute of "
+"passed name and passed namespace on the passed vnode. Policies implementing "
+"security labels backed into extended attributes may want to provide "
+"additional protections for those attributes. Additionally, policies should "
+"avoid making decisions based on the data referenced from `uio`, as there is "
+"a potential race condition between this check and the actual operation. The "
+"`uio` may also be `NULL` if a delete operation is being performed. Return 0 "
+"for success, or an `errno` value for failure. Suggested failure: EACCES for "
+"label mismatch, or EPERM for lack of privilege."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5401
+#, no-wrap
+msgid "`mpo_check_vnode_setflags`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5413
+#, no-wrap
+msgid ""
+"int mpo_check_vnode_setflags(\tcred,\n"
+" \tvp,\n"
+" \tlabel,\n"
+" \tflags);\n"
+"struct ucred *cred;\n"
+"struct vnode *vp;\n"
+"struct label *label;\n"
+"u_long flags;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5436
+#, no-wrap
+msgid "File flags; see man:chflags[2]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5442
+msgid ""
+"Determine whether the subject credential can set the passed flags on the "
+"passed vnode. Return 0 for success, or an `errno` value for failure. "
+"Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5444
+#, no-wrap
+msgid "`mpo_check_vnode_setmode`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5456
+#, no-wrap
+msgid ""
+"int mpo_check_vnode_setmode(\tcred,\n"
+" \tvp,\n"
+" \tlabel,\n"
+" \tmode);\n"
+"struct ucred *cred;\n"
+"struct vnode *vp;\n"
+"struct label *label;\n"
+"mode_t mode;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5478
+#, no-wrap
+msgid "`mode`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5479
+#, no-wrap
+msgid "File mode; see man:chmod[2]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5485
+msgid ""
+"Determine whether the subject credential can set the passed mode on the "
+"passed vnode. Return 0 for success, or an `errno` value for failure. "
+"Suggested failure: EACCES for label mismatch, or EPERM for lack of privilege."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5487
+#, no-wrap
+msgid "`mpo_check_vnode_setowner`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5501
+#, no-wrap
+msgid ""
+"int mpo_check_vnode_setowner(\tcred,\n"
+" \tvp,\n"
+" \tlabel,\n"
+" \tuid,\n"
+" \tgid);\n"
+"struct ucred *cred;\n"
+"struct vnode *vp;\n"
+"struct label *label;\n"
+"uid_t uid;\n"
+"gid_t gid;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5523
+#, no-wrap
+msgid "`uid`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5524
+#, no-wrap
+msgid "User ID"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5527
+#, no-wrap
+msgid "`gid`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5528
+#, no-wrap
+msgid "Group ID"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5535
+msgid ""
+"Determine whether the subject credential can set the passed uid and passed "
+"gid as file uid and file gid on the passed vnode. The IDs may be set to "
+"(`-1`) to request no update. Return 0 for success, or an `errno` value for "
+"failure. Suggested failure: EACCES for label mismatch, or EPERM for lack of "
+"privilege."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5537
+#, no-wrap
+msgid "`mpo_check_vnode_setutimes`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5551
+#, no-wrap
+msgid ""
+"int mpo_check_vnode_setutimes(\t,\n"
+" \t,\n"
+" \t,\n"
+" \t,\n"
+" \t);\n"
+"struct ucred *cred;\n"
+"struct vnode *vp;\n"
+"struct label *label;\n"
+"struct timespec atime;\n"
+"struct timespec mtime;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5566
+#, no-wrap
+msgid "Object; vp"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5573
+#, no-wrap
+msgid "`atime`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5574
+#, no-wrap
+msgid "Access time; see man:utimes[2]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5577
+#, no-wrap
+msgid "`mtime`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5578
+#, no-wrap
+msgid "Modification time; see man:utimes[2]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5584
+msgid ""
+"Determine whether the subject credential can set the passed access "
+"timestamps on the passed vnode. Return 0 for success, or an `errno` value "
+"for failure. Suggested failure: EACCES for label mismatch, or EPERM for "
+"lack of privilege."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5586
+#, no-wrap
+msgid "`mpo_check_proc_sched`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5594
+#, no-wrap
+msgid ""
+"int mpo_check_proc_sched(\tucred,\n"
+" \tproc);\n"
+"struct ucred *ucred;\n"
+"struct proc *proc;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5615
+msgid ""
+"Determine whether the subject credential can change the scheduling "
+"parameters of the passed process. Return 0 for success, or an `errno` value "
+"for failure. Suggested failure: EACCES for label mismatch, EPERM for lack "
+"of privilege, or ESRCH to limit visibility."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5617
+msgid "See man:setpriority[2] for more information."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5619
+#, no-wrap
+msgid "`mpo_check_proc_signal`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5629
+#, no-wrap
+msgid ""
+"int mpo_check_proc_signal(\tcred,\n"
+" \tproc,\n"
+" \tsignal);\n"
+"struct ucred *cred;\n"
+"struct proc *proc;\n"
+"int signal;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5647
+#, no-wrap
+msgid "`signal`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5648
+#, no-wrap
+msgid "Signal; see man:kill[2]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5654
+msgid ""
+"Determine whether the subject credential can deliver the passed signal to "
+"the passed process. Return 0 for success, or an `errno` value for failure. "
+"Suggested failure: EACCES for label mismatch, EPERM for lack of privilege, "
+"or ESRCH to limit visibility."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5656
+#, no-wrap
+msgid "`mpo_check_vnode_stat`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5666
+#, no-wrap
+msgid ""
+"int mpo_check_vnode_stat(\tcred,\n"
+" \tvp,\n"
+" \tlabel);\n"
+"struct ucred *cred;\n"
+"struct vnode *vp;\n"
+"struct label *label;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5691
+msgid ""
+"Determine whether the subject credential can `stat` the passed vnode. "
+"Return 0 for success, or an `errno` value for failure. Suggested failure: "
+"EACCES for label mismatch, or EPERM for lack of privilege."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5693
+msgid "See man:stat[2] for more information."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5695
+#, no-wrap
+msgid "`mpo_check_ifnet_transmit`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5709
+#, no-wrap
+msgid ""
+"int mpo_check_ifnet_transmit(\tcred,\n"
+" \tifnet,\n"
+" \tifnetlabel,\n"
+" \tmbuf,\n"
+" \tmbuflabel);\n"
+"struct ucred *cred;\n"
+"struct ifnet *ifnet;\n"
+"struct label *ifnetlabel;\n"
+"struct mbuf *mbuf;\n"
+"struct label *mbuflabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5732
+#, no-wrap
+msgid "Object; mbuf to be sent"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5742
+msgid ""
+"Determine whether the network interface can transmit the passed mbuf. "
+"Return 0 for success, or an `errno` value for failure. Suggested failure: "
+"EACCES for label mismatch, or EPERM for lack of privilege."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5744
+#, no-wrap
+msgid "`mpo_check_socket_deliver`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5758
+#, no-wrap
+msgid ""
+"int mpo_check_socket_deliver(\tcred,\n"
+" \tifnet,\n"
+" \tifnetlabel,\n"
+" \tmbuf,\n"
+" \tmbuflabel);\n"
+"struct ucred *cred;\n"
+"struct ifnet *ifnet;\n"
+"struct label *ifnetlabel;\n"
+"struct mbuf *mbuf;\n"
+"struct label *mbuflabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5781
+#, no-wrap
+msgid "Object; mbuf to be delivered"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5791
+msgid ""
+"Determine whether the socket may receive the datagram stored in the passed "
+"mbuf header. Return 0 for success, or an `errno` value for failure. "
+"Suggested failures: EACCES for label mismatch, or EPERM for lack of "
+"privilege."
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5803
+#, no-wrap
+msgid ""
+"int mpo_check_socket_visible(\tcred,\n"
+" \tso,\n"
+" \tsocketlabel);\n"
+"struct ucred *cred;\n"
+"struct socket *so;\n"
+"struct label *socketlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5822
+#, no-wrap
+msgid "Policy label for `so`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5828
+msgid ""
+"Determine whether the subject credential cred can \"see\" the passed socket "
+"(`socket`) using system monitoring functions, such as those employed by man:"
+"netstat[8] and man:sockstat[1]. Return 0 for success, or an `errno` value "
+"for failure. Suggested failure: EACCES for label mismatches, EPERM for lack "
+"of privilege, or ESRCH to hide visibility."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5830
+#, no-wrap
+msgid "`mpo_check_system_acct`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5840
+#, no-wrap
+msgid ""
+"int mpo_check_system_acct(\tucred,\n"
+" \tvp,\n"
+" \tvlabel);\n"
+"struct ucred *ucred;\n"
+"struct vnode *vp;\n"
+"struct label *vlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5850
+#, no-wrap
+msgid "`ucred`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5855
+#, no-wrap
+msgid "Accounting file; man:acct[5]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5863
+msgid ""
+"Determine whether the subject should be allowed to enable accounting, based "
+"on its label and the label of the accounting log file."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5865
+#, no-wrap
+msgid "`mpo_check_system_nfsd`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5871
+#, no-wrap
+msgid ""
+"int mpo_check_system_nfsd(\tcred);\n"
+"struct ucred *cred;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5886
+msgid "Determine whether the subject should be allowed to call man:nfssvc[2]."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5888
+#, no-wrap
+msgid "`mpo_check_system_reboot`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5896
+#, no-wrap
+msgid ""
+"int mpo_check_system_reboot(\tcred,\n"
+" \thowto);\n"
+"struct ucred *cred;\n"
+"int howto;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5910
+#, no-wrap
+msgid "`howto`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5911
+#, no-wrap
+msgid "`howto` parameter from man:reboot[2]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5915
+msgid ""
+"Determine whether the subject should be allowed to reboot the system in the "
+"specified manner."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5917
+#, no-wrap
+msgid "`mpo_check_system_settime`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5923
+#, no-wrap
+msgid ""
+"int mpo_check_system_settime(\tcred);\n"
+"struct ucred *cred;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5938
+msgid "Determine whether the user should be allowed to set the system clock."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5940
+#, no-wrap
+msgid "`mpo_check_system_swapon`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5950
+#, no-wrap
+msgid ""
+"int mpo_check_system_swapon(\tcred,\n"
+" \tvp,\n"
+" \tvlabel);\n"
+"struct ucred *cred;\n"
+"struct vnode *vp;\n"
+"struct label *vlabel;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5965
+#, no-wrap
+msgid "Swap device"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5973
+msgid ""
+"Determine whether the subject should be allowed to add `vp` as a swap device."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5975
+#, no-wrap
+msgid "`mpo_check_system_sysctl`"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5995
+#, no-wrap
+msgid ""
+"int mpo_check_system_sysctl(\tcred,\n"
+" \tname,\n"
+" \tnamelen,\n"
+" \told,\n"
+" \toldlenp,\n"
+" \tinkernel,\n"
+" \tnew,\n"
+" \tnewlen);\n"
+"struct ucred *cred;\n"
+"int *name;\n"
+"u_int *namelen;\n"
+"void *old;\n"
+"size_t *oldlenp;\n"
+"int inkernel;\n"
+"void *new;\n"
+"size_t newlen;\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:6010
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:6030
+#, no-wrap
+msgid "See man:sysctl[3]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:6021
+#, no-wrap
+msgid "`oldlenp`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:6025
+#, no-wrap
+msgid "`inkernel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:6026
+#, no-wrap
+msgid "Boolean; `1` if called from kernel"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:6033
+#, no-wrap
+msgid "`newlen`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:6038
+msgid ""
+"Determine whether the subject should be allowed to make the specified man:"
+"sysctl[3] transaction."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:6040
+#, no-wrap
+msgid "Label Management Calls"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:6046
+msgid ""
+"Relabel events occur when a user process has requested that the label on an "
+"object be modified. A two-phase update occurs: first, an access control "
+"check will be performed to determine if the update is both valid and "
+"permitted, and then the update itself is performed via a separate entry "
+"point. Relabel entry points typically accept the object, object label "
+"reference, and an update label submitted by the process. Memory allocation "
+"during relabel is discouraged, as relabel calls are not permitted to fail "
+"(failure should be reported earlier in the relabel check)."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:6048
+#, no-wrap
+msgid "Userland Architecture"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:6052
+msgid ""
+"The TrustedBSD MAC Framework includes a number of policy-agnostic elements, "
+"including MAC library interfaces for abstractly managing labels, "
+"modifications to the system credential management and login libraries to "
+"support the assignment of MAC labels to users, and a set of tools to monitor "
+"and modify labels on processes, files, and network interfaces. More details "
+"on the user architecture will be added to this section in the near future."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:6054
+#, no-wrap
+msgid "APIs for Policy-Agnostic Label Management"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:6061
+msgid ""
+"The TrustedBSD MAC Framework provides a number of library and system calls "
+"permitting applications to manage MAC labels on objects using a policy-"
+"agnostic interface. This permits applications to manipulate labels for a "
+"variety of policies without being written to support specific policies. "
+"These interfaces are used by general-purpose tools such as man:ifconfig[8], "
+"man:ls[1] and man:ps[1] to view labels on network interfaces, files, and "
+"processes. The APIs also support MAC management tools including man:"
+"getfmac[8], man:getpmac[8], man:setfmac[8], man:setfsmac[8], and man:"
+"setpmac[8]. The MAC APIs are documented in man:mac[3]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:6069
+msgid ""
+"Applications handle MAC labels in two forms: an internalized form used to "
+"return and set labels on processes and objects (`mac_t`), and externalized "
+"form based on C strings appropriate for storage in configuration files, "
+"display to the user, or input from the user. Each MAC label contains a "
+"number of elements, each consisting of a name and value pair. Policy "
+"modules in the kernel bind to specific names and interpret the values in "
+"policy-specific ways. In the externalized string form, labels are "
+"represented by a comma-delimited list of name and value pairs separated by "
+"the `/` character. Labels may be directly converted to and from text using "
+"provided APIs; when retrieving labels from the kernel, internalized label "
+"storage must first be prepared for the desired label element set. "
+"Typically, this is done in one of two ways: using man:mac_prepare[3] and an "
+"arbitrary list of desired label elements, or one of the variants of the call "
+"that loads a default element set from the man:mac.conf[5] configuration "
+"file. Per-object defaults permit application writers to usefully display "
+"labels associated with objects without being aware of the policies present "
+"in the system."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:6074
+msgid ""
+"Currently, direct manipulation of label elements other than by conversion to "
+"a text string, string editing, and conversion back to an internalized label "
+"is not supported by the MAC library. Such interfaces may be added in the "
+"future if they prove necessary for application writers."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:6077
+#, no-wrap
+msgid "Binding of Labels to Users"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:6081
+msgid ""
+"The standard user context management interface, man:setusercontext[3], has "
+"been modified to retrieve MAC labels associated with a user's class from man:"
+"login.conf[5]. These labels are then set along with other user context when "
+"either `LOGIN_SETALL` is specified, or when `LOGIN_SETMAC` is explicitly "
+"specified."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:6086
+msgid ""
+"It is expected that, in a future version of FreeBSD, the MAC label database "
+"will be separated from the [.filename]#login.conf# user class abstraction, "
+"and be maintained in a separate database. However, the man:"
+"setusercontext[3] API should remain the same following such a change."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:6089
+#, no-wrap
+msgid "Conclusion"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/mac/_index.adoc:6094
+msgid ""
+"The TrustedBSD MAC framework permits kernel modules to augment the system "
+"security policy in a highly integrated manner. They may do this based on "
+"existing object properties, or based on label data that is maintained with "
+"the assistance of the MAC framework. The framework is sufficiently flexible "
+"to implement a variety of policy types, including information flow security "
+"policies such as MLS and Biba, as well as policies based on existing BSD "
+"credentials or file protections. Policy authors may wish to consult this "
+"documentation as well as existing security modules when implementing a new "
+"security service."
+msgstr ""
diff --git a/documentation/content/en/books/arch-handbook/newbus/_index.adoc b/documentation/content/en/books/arch-handbook/newbus/_index.adoc
index 4457a08aca..55e6784392 100644
--- a/documentation/content/en/books/arch-handbook/newbus/_index.adoc
+++ b/documentation/content/en/books/arch-handbook/newbus/_index.adoc
@@ -11,7 +11,7 @@ description: Newbus
tags: ["Newbus", "overview", "API"]
showBookMenu: true
weight: 16
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/newbus/"
---
[[newbus]]
diff --git a/documentation/content/en/books/arch-handbook/newbus/_index.po b/documentation/content/en/books/arch-handbook/newbus/_index.po
new file mode 100644
index 0000000000..d69158c5ab
--- /dev/null
+++ b/documentation/content/en/books/arch-handbook/newbus/_index.po
@@ -0,0 +1,531 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:20-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:1
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:18
+#, no-wrap
+msgid "Newbus"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:1
+#, no-wrap
+msgid "Chapter 14. Newbus"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:56
+msgid ""
+"_Special thanks to Matthew N. Dodd, Warner Losh, Bill Paul, Doug Rabson, "
+"Mike Smith, Peter Wemm and Scott Long_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:58
+msgid "This chapter explains the Newbus device framework in detail."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:60
+#, no-wrap
+msgid "Device Drivers"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:62
+#, no-wrap
+msgid "Purpose of a Device Driver"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:65
+msgid ""
+"A device driver is a software component which provides the interface between "
+"the kernel's generic view of a peripheral (e.g., disk, network adapter) and "
+"the actual implementation of the peripheral. The _device driver interface "
+"(DDI)_ is the defined interface between the kernel and the device driver "
+"component."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:66
+#, no-wrap
+msgid "Types of Device Drivers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:69
+msgid ""
+"There used to be days in UNIX(R), and thus FreeBSD, in which there were four "
+"types of devices defined:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:71
+msgid "block device drivers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:72
+msgid "character device drivers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:73
+msgid "network device drivers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:74
+msgid "pseudo-device drivers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:76
+msgid ""
+"_Block devices_ performed in a way that used fixed size blocks [of data]. "
+"This type of driver depended on the so-called _buffer cache_, which had "
+"cached accessed blocks of data in a dedicated part of memory. Often this "
+"buffer cache was based on write-behind, which meant that when data was "
+"modified in memory it got synced to disk whenever the system did its "
+"periodical disk flushing, thus optimizing writes."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:77
+#, no-wrap
+msgid "Character Devices"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:80
+msgid ""
+"However, in the versions of FreeBSD 4.0 and onward the distinction between "
+"block and character devices became non-existent."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:82
+#, no-wrap
+msgid "Overview of Newbus"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:85
+msgid ""
+"_Newbus_ is the implementation of a new bus architecture based on "
+"abstraction layers which saw its introduction in FreeBSD 3.0 when the Alpha "
+"port was imported into the source tree. It was not until 4.0 before it "
+"became the default system to use for device drivers. Its goals are to "
+"provide a more object-oriented means of interconnecting the various busses "
+"and devices which a host system provides to the _Operating System_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:87
+msgid "Its main features include amongst others:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:89
+msgid "dynamic attaching"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:90
+msgid "easy modularization of drivers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:91
+msgid "pseudo-busses"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:93
+msgid ""
+"One of the most prominent changes is the migration from the flat and ad-hoc "
+"system to a device tree layout."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:95
+msgid ""
+"At the top level resides the _\"root\"_ device which is the parent to hang "
+"all other devices on. For each architecture, there is typically a single "
+"child of \"root\" which has such things as _host-to-PCI bridges_, etc. "
+"attached to it. For x86, this \"root\" device is the _\"nexus\"_ device. For "
+"Alpha, various different models of Alpha have different top-level devices "
+"corresponding to the different hardware chipsets, including _lca_, _apecs_, "
+"_cia_ and _tsunami_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:97
+msgid ""
+"A device in the Newbus context represents a single hardware entity in the "
+"system. For instance each PCI device is represented by a Newbus device. Any "
+"device in the system can have children; a device which has children is often "
+"called a _\"bus\"_. Examples of common busses in the system are ISA and PCI, "
+"which manage lists of devices attached to ISA and PCI busses respectively."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:99
+msgid ""
+"Often, a connection between different kinds of bus is represented by a _"
+"\"bridge\"_ device, which normally has one child for the attached bus. An "
+"example of this is a _PCI-to-PCI bridge_ which is represented by a device _[."
+"filename]#pcibN#_ on the parent PCI bus and has a child _[.filename]#pciN#_ "
+"for the attached bus. This layout simplifies the implementation of the PCI "
+"bus tree, allowing common code to be used for both top-level and bridged "
+"busses."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:101
+msgid ""
+"Each device in the Newbus architecture asks its parent to map its resources. "
+"The parent then asks its own parent until the nexus is reached. So, "
+"basically the nexus is the only part of the Newbus system which knows about "
+"all resources."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:105
+msgid ""
+"An ISA device might want to map its IO port at `0x230`, so it asks its "
+"parent, in this case the ISA bus. The ISA bus hands it over to the PCI-to-"
+"ISA bridge which in its turn asks the PCI bus, which reaches the host-to-PCI "
+"bridge and finally the nexus. The beauty of this transition upwards is that "
+"there is room to translate the requests. For example, the `0x230` IO port "
+"request might become memory-mapped at `0xb0000230` on a MIPS box by the PCI "
+"bridge."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:108
+msgid ""
+"Resource allocation can be controlled at any place in the device tree. For "
+"instance on many Alpha platforms, ISA interrupts are managed separately from "
+"PCI interrupts and resource allocations for ISA interrupts are managed by "
+"the Alpha's ISA bus device. On IA-32, ISA and PCI interrupts are both "
+"managed by the top-level nexus device. For both ports, memory and port "
+"address space is managed by a single entity - nexus for IA-32 and the "
+"relevant chipset driver on Alpha (e.g., CIA or tsunami)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:110
+msgid ""
+"In order to normalize access to memory and port mapped resources, Newbus "
+"integrates the `bus_space` APIs from NetBSD. These provide a single API to "
+"replace inb/outb and direct memory reads/writes. The advantage of this is "
+"that a single driver can easily use either memory-mapped registers or port-"
+"mapped registers (some hardware supports both)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:112
+msgid ""
+"This support is integrated into the resource allocation mechanism. When a "
+"resource is allocated, a driver can retrieve the associated "
+"`bus_space_tag_t` and `bus_space_handle_t` from the resource."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:114
+msgid ""
+"Newbus also allows for definitions of interface methods in files dedicated "
+"to this purpose. These are the [.filename]#.m# files that are found under "
+"the [.filename]#src/sys# hierarchy."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:116
+msgid ""
+"The core of the Newbus system is an extensible \"object-based programming\" "
+"model. Each device in the system has a table of methods which it supports. "
+"The system and other devices uses those methods to control the device and "
+"request services. The different methods supported by a device are defined by "
+"a number of \"interfaces\". An \"interface\" is simply a group of related "
+"methods which can be implemented by a device."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:118
+msgid ""
+"In the Newbus system, the methods for a device are provided by the various "
+"device drivers in the system. When a device is attached to a driver during "
+"_auto-configuration_, it uses the method table declared by the driver. A "
+"device can later _detach_ from its driver and _re-attach_ to a new driver "
+"with a new method table. This allows dynamic replacement of drivers which "
+"can be useful for driver development."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:120
+msgid ""
+"The interfaces are described by an interface definition language similar to "
+"the language used to define vnode operations for file systems. The interface "
+"would be stored in a methods file (which would normally be named [."
+"filename]#foo_if.m#)."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:121
+#, no-wrap
+msgid "Newbus Methods"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:127
+#, no-wrap
+msgid " # Foo subsystem/driver (a comment...)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:129
+#, no-wrap
+msgid "\t INTERFACE foo\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:133
+#, no-wrap
+msgid ""
+"\tMETHOD int doit {\n"
+"\t\tdevice_t dev;\n"
+"\t};\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:136
+#, no-wrap
+msgid ""
+"\t# DEFAULT is the method that will be used, if a method was not\n"
+"\t# provided via: DEVMETHOD()\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:141
+#, no-wrap
+msgid ""
+"\tMETHOD void doit_to_child {\n"
+"\t\tdevice_t dev;\n"
+"\t\tdriver_t child;\n"
+"\t} DEFAULT doit_generic_to_child;\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:145
+msgid ""
+"When this interface is compiled, it generates a header file \"[."
+"filename]#foo_if.h#\" which contains function declarations:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:150
+#, no-wrap
+msgid ""
+" int FOO_DOIT(device_t dev);\n"
+" int FOO_DOIT_TO_CHILD(device_t dev, device_t child);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:153
+msgid ""
+"A source file, \"[.filename]#foo_if.c#\" is also created to accompany the "
+"automatically generated header file; it contains implementations of those "
+"functions which look up the location of the relevant functions in the "
+"object's method table and call that function."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:155
+msgid ""
+"The system defines two main interfaces. The first fundamental interface is "
+"called _\"device\"_ and includes methods which are relevant to all devices. "
+"Methods in the _\"device\"_ interface include _\"probe\"_, _\"attach\"_ and _"
+"\"detach\"_ to control detection of hardware and _\"shutdown\"_, _\"suspend"
+"\"_ and _\"resume\"_ for critical event notification."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:157
+msgid ""
+"The second, more complex interface is _\"bus\"_. This interface contains "
+"methods suitable for devices which have children, including methods to "
+"access bus specific per-device information footnote:[man:"
+"bus_generic_read_ivar[9] and man:bus_generic_write_ivar[9]], event "
+"notification (`_child_detached_`, `_driver_added_`) and resource management "
+"(`_alloc_resource_`, `_activate_resource_`, `_deactivate_resource_`, "
+"`_release_resource_`)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:159
+msgid ""
+"Many methods in the \"bus\" interface are performing services for some child "
+"of the bus device. These methods would normally use the first two arguments "
+"to specify the bus providing the service and the child device which is "
+"requesting the service. To simplify driver code, many of these methods have "
+"accessor functions which lookup the parent and call a method on the parent. "
+"For instance the method `BUS_TEARDOWN_INTR(device_t dev, device_t "
+"child, ...)` can be called using the function `bus_teardown_intr(device_t "
+"child, ...)`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:161
+msgid ""
+"Some bus types in the system define additional interfaces to provide access "
+"to bus-specific functionality. For instance, the PCI bus driver defines the "
+"\"pci\" interface which has two methods `_read_config_` and `_write_config_` "
+"for accessing the configuration registers of a PCI device."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:163
+#, no-wrap
+msgid "Newbus API"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:166
+msgid ""
+"As the Newbus API is huge, this section makes some effort at documenting it. "
+"More information to come in the next revision of this document."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:167
+#, no-wrap
+msgid "Important Locations in the Source Hierarchy"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:170
+msgid ""
+"[.filename]#src/sys/[arch]/[arch]# - Kernel code for a specific machine "
+"architecture resides in this directory. For example, the `i386` "
+"architecture, or the `SPARC64` architecture."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:172
+msgid ""
+"[.filename]#src/sys/dev/[bus]# - device support for a specific `[bus]` "
+"resides in this directory."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:174
+msgid ""
+"[.filename]#src/sys/dev/pci# - PCI bus support code resides in this "
+"directory."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:176
+msgid ""
+"[.filename]#src/sys/[isa|pci]# - PCI/ISA device drivers reside in this "
+"directory. The PCI/ISA bus support code used to exist in this directory in "
+"FreeBSD version `4.0`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:177
+#, no-wrap
+msgid "Important Structures and Type Definitions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:180
+msgid ""
+"`devclass_t` - This is a type definition of a pointer to a `struct devclass`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:182
+msgid ""
+"`device_method_t` - This is the same as `kobj_method_t` (see [.filename]#src/"
+"sys/kobj.h#)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:184
+msgid ""
+"`device_t` - This is a type definition of a pointer to a `struct device`. "
+"`device_t` represents a device in the system. It is a kernel object. See [."
+"filename]#src/sys/sys/bus_private.h# for implementation details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:186
+msgid ""
+"`driver_t` - This is a type definition which references `struct driver`. The "
+"`driver` struct is a class of the `device` kernel object; it also holds data "
+"private to the driver."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:188
+#, no-wrap
+msgid "*_driver_t_ Implementation*\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:194
+#, no-wrap
+msgid ""
+"\t struct driver {\n"
+"\t\tKOBJ_CLASS_FIELDS;\n"
+"\t\tvoid\t*priv;\t\t\t/* driver private data */\n"
+"\t };\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:197
+msgid ""
+"A `device_state_t` type, which is an enumeration, `device_state`. It "
+"contains the possible states of a Newbus device before and after the "
+"autoconfiguration process."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:199
+#, no-wrap
+msgid "*Device States _device_state_t*\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/newbus/_index.adoc:210
+#, no-wrap
+msgid ""
+"\t /*\n"
+"\t * src/sys/sys/bus.h\n"
+"\t */\n"
+"\t typedef enum device_state {\n"
+"\t\tDS_NOTPRESENT,\t/* not probed or probe failed */\n"
+"\t\tDS_ALIVE,\t\t/* probe succeeded */\n"
+"\t\tDS_ATTACHED,\t/* attach method called */\n"
+"\t\tDS_BUSY\t\t\t/* device is open */\n"
+"\t } device_state_t;\n"
+msgstr ""
diff --git a/documentation/content/en/books/arch-handbook/parti.adoc b/documentation/content/en/books/arch-handbook/parti.adoc
index b86632b2be..4cb6eaec0d 100644
--- a/documentation/content/en/books/arch-handbook/parti.adoc
+++ b/documentation/content/en/books/arch-handbook/parti.adoc
@@ -4,7 +4,8 @@ prev: books/arch-handbook
next: books/arch-handbook/boot
showBookMenu: true
weight: 1
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/parti/"
+BundleType: branch
---
[[kernel]]
diff --git a/documentation/content/en/books/arch-handbook/parti.po b/documentation/content/en/books/arch-handbook/parti.po
new file mode 100644
index 0000000000..474d4ae54c
--- /dev/null
+++ b/documentation/content/en/books/arch-handbook/parti.po
@@ -0,0 +1,29 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-01-08 11:34-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/arch-handbook/parti.adoc:1
+#, no-wrap
+msgid "Part I. Kernel"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/arch-handbook/parti.adoc:11
+#, no-wrap
+msgid "Kernel"
+msgstr ""
diff --git a/documentation/content/en/books/arch-handbook/partii.adoc b/documentation/content/en/books/arch-handbook/partii.adoc
index 0203b4e249..d741b3393f 100644
--- a/documentation/content/en/books/arch-handbook/partii.adoc
+++ b/documentation/content/en/books/arch-handbook/partii.adoc
@@ -4,7 +4,7 @@ prev: books/arch-handbook/smp
next: books/arch-handbook/driverbasics
showBookMenu: true
weight: 10
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/partii/"
---
[[devicedrivers]]
diff --git a/documentation/content/en/books/arch-handbook/partii.po b/documentation/content/en/books/arch-handbook/partii.po
new file mode 100644
index 0000000000..47ab358ab0
--- /dev/null
+++ b/documentation/content/en/books/arch-handbook/partii.po
@@ -0,0 +1,29 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-01-08 11:34-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/arch-handbook/partii.adoc:1
+#, no-wrap
+msgid "Part II. Device Drivers"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/arch-handbook/partii.adoc:11
+#, no-wrap
+msgid "Device Drivers"
+msgstr ""
diff --git a/documentation/content/en/books/arch-handbook/partiii.adoc b/documentation/content/en/books/arch-handbook/partiii.adoc
index 67152e4836..9d5d9dca73 100644
--- a/documentation/content/en/books/arch-handbook/partiii.adoc
+++ b/documentation/content/en/books/arch-handbook/partiii.adoc
@@ -4,7 +4,7 @@ prev: books/arch-handbook/pccard
next: books/arch-handbook/bibliography
showBookMenu: true
weight: 19
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/partiii/"
---
[[appendices]]
diff --git a/documentation/content/en/books/arch-handbook/partiii.po b/documentation/content/en/books/arch-handbook/partiii.po
new file mode 100644
index 0000000000..fd08ac0d84
--- /dev/null
+++ b/documentation/content/en/books/arch-handbook/partiii.po
@@ -0,0 +1,29 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-01-08 11:34-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/arch-handbook/partiii.adoc:1
+#, no-wrap
+msgid "Part III. Appendices"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/arch-handbook/partiii.adoc:11
+#, no-wrap
+msgid "Appendices"
+msgstr ""
diff --git a/documentation/content/en/books/arch-handbook/pccard/_index.adoc b/documentation/content/en/books/arch-handbook/pccard/_index.adoc
index 26df7323b9..2354897ed6 100644
--- a/documentation/content/en/books/arch-handbook/pccard/_index.adoc
+++ b/documentation/content/en/books/arch-handbook/pccard/_index.adoc
@@ -6,7 +6,7 @@ description: PC Card
tags: ["pc card", "overview"]
showBookMenu: true
weight: 18
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/pccard/"
---
[[pccard]]
diff --git a/documentation/content/en/books/arch-handbook/pccard/_index.po b/documentation/content/en/books/arch-handbook/pccard/_index.po
new file mode 100644
index 0000000000..320a14ef65
--- /dev/null
+++ b/documentation/content/en/books/arch-handbook/pccard/_index.po
@@ -0,0 +1,483 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:20-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:1
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:13
+#, no-wrap
+msgid "PC Card"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:1
+#, no-wrap
+msgid "Chapter 16. PC Card"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:51
+msgid ""
+"This chapter will talk about the FreeBSD mechanisms for writing a device "
+"driver for a PC Card or CardBus device. However, at present it just "
+"documents how to add a new device to an existing pccard driver."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:53
+#, no-wrap
+msgid "Adding a Device"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:56
+msgid ""
+"Device drivers know what devices they support. There is a table of supported "
+"devices in the kernel that drivers use to attach to a device."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:58
+#, no-wrap
+msgid "Overview"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:61
+msgid ""
+"PC Cards are identified in one of two ways, both based on the _Card "
+"Information Structure_ (CIS) stored on the card. The first method is to use "
+"numeric manufacturer and product numbers. The second method is to use the "
+"human readable strings that are also contained in the CIS. The PC Card bus "
+"uses a centralized database and some macros to facilitate a design pattern "
+"to help the driver writer match devices to his driver."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:63
+msgid ""
+"Original equipment manufacturers (OEMs) often develop a reference design for "
+"a PC Card product, then sell this design to other companies to market. Those "
+"companies refine the design, market the product to their target audience or "
+"geographic area, and put their own name plate onto the card. The refinements "
+"to the physical card are typically very minor, if any changes are made at "
+"all. To strengthen their brand, these vendors place their company name in "
+"the human readable strings in the CIS space, but leave the manufacturer and "
+"product IDs unchanged."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:65
+msgid ""
+"Due to this practice, FreeBSD drivers usually rely on numeric IDs for device "
+"identification. Using numeric IDs and a centralized database complicates "
+"adding IDs and support for cards to the system. One must carefully check to "
+"see who really made the card, especially when it appears that the vendor who "
+"made the card might already have a different manufacturer ID listed in the "
+"central database. Linksys, D-Link, and NetGear are a number of US "
+"manufacturers of LAN hardware that often sell the same design. These same "
+"designs can be sold in Japan under names such as Buffalo and Corega. Often, "
+"these devices will all have the same manufacturer and product IDs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:67
+msgid ""
+"The PC Card bus code keeps a central database of card information, but not "
+"which driver is associated with them, in [.filename]#/sys/dev/pccard/"
+"pccarddevs#. It also provides a set of macros that allow one to easily "
+"construct simple entries in the table the driver uses to claim devices."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:69
+msgid ""
+"Finally, some really low end devices do not contain manufacturer "
+"identification at all. These devices must be detected by matching the human "
+"readable CIS strings. While it would be nice if we did not need this method "
+"as a fallback, it is necessary for some very low end CD-ROM players and "
+"Ethernet cards. This method should generally be avoided, but a number of "
+"devices are listed in this section because they were added prior to the "
+"recognition of the OEM nature of the PC Card business. When adding new "
+"devices, prefer using the numeric method."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:71
+#, no-wrap
+msgid "Format of [.filename]#pccarddevs#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:74
+msgid ""
+"There are four sections in the [.filename]#pccarddevs# files. The first "
+"section lists the manufacturer numbers for vendors that use them. This "
+"section is sorted in numerical order. The next section has all of the "
+"products that are used by these vendors, along with their product ID numbers "
+"and a description string. The description string typically is not used "
+"(instead we set the device's description based on the human readable CIS, "
+"even if we match on the numeric version). These two sections are then "
+"repeated for devices that use the string matching method. Finally, C-style "
+"comments enclosed in `/*` and `*/` characters are allowed anywhere in the "
+"file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:76
+msgid ""
+"The first section of the file contains the vendor IDs. Please keep this list "
+"sorted in numeric order. Also, please coordinate changes to this file "
+"because we share it with NetBSD to help facilitate a common clearing house "
+"for this information. For example, here are the first few vendor IDs:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:83
+#, no-wrap
+msgid ""
+"vendor FUJITSU\t\t\t0x0004 Fujitsu Corporation\n"
+"vendor NETGEAR_2\t\t0x000b Netgear\n"
+"vendor PANASONIC\t\t0x0032\tMatsushita Electric Industrial Co.\n"
+"vendor SANDISK\t\t\t0x0045\tSandisk Corporation\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:86
+msgid ""
+"Chances are very good that the `NETGEAR_2` entry is really an OEM that "
+"NETGEAR purchased cards from and the author of support for those cards was "
+"unaware at the time that Netgear was using someone else's ID. These entries "
+"are fairly straightforward. The vendor keyword denotes the kind of line that "
+"this is, followed by the name of the vendor. This name will be repeated "
+"later in [.filename]#pccarddevs#, as well as used in the driver's match "
+"tables, so keep it short and a valid C identifier. A numeric ID in hex "
+"identifies the manufacturer. Do not add IDs of the form `0xffffffff` or "
+"`0xffff` because these are reserved IDs (the former is \"no ID set\" while "
+"the latter is sometimes seen in extremely poor quality cards to try to "
+"indicate \"none\"). Finally there is a string description of the company "
+"that makes the card. This string is not used in FreeBSD for anything but "
+"commentary purposes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:88
+msgid ""
+"The second section of the file contains the products. As shown in this "
+"example, the format is similar to the vendor lines:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:93
+#, no-wrap
+msgid ""
+"/* Allied Telesis K.K. */\n"
+"product ALLIEDTELESIS LA_PCM\t0x0002 Allied Telesis LA-PCM\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:96
+#, no-wrap
+msgid ""
+"/* Archos */\n"
+"product\tARCHOS ARC_ATAPI\t0x0043 MiniCD\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:99
+msgid ""
+"The `product` keyword is followed by the vendor name, repeated from above. "
+"This is followed by the product name, which is used by the driver and should "
+"be a valid C identifier, but may also start with a number. As with the "
+"vendors, the hex product ID for this card follows the same convention for "
+"`0xffffffff` and `0xffff`. Finally, there is a string description of the "
+"device itself. This string typically is not used in FreeBSD, since FreeBSD's "
+"pccard bus driver will construct a string from the human readable CIS "
+"entries, but it can be used in the rare cases where this is somehow "
+"insufficient. The products are in alphabetical order by manufacturer, then "
+"numerical order by product ID. They have a C comment before each "
+"manufacturer's entries and there is a blank line between entries."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:101
+msgid ""
+"The third section is like the previous vendor section, but with all of the "
+"manufacturer numeric IDs set to `-1`, meaning \"match anything found\" in "
+"the FreeBSD pccard bus code. Since these are C identifiers, their names must "
+"be unique. Otherwise the format is identical to the first section of the "
+"file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:103
+msgid ""
+"The final section contains the entries for those cards that must be "
+"identified by string entries. This section's format is a little different "
+"from the generic section:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:108
+#, no-wrap
+msgid ""
+"product ADDTRON AWP100\t\t{ \"Addtron\", \"AWP-100&spWireless&spPCMCIA\", \"Version&sp01.02\", NULL }\n"
+"product ALLIEDTELESIS WR211PCM\t{ \"Allied&spTelesis&spK.K.\", \"WR211PCM\", NULL, NULL } Allied Telesis WR211PCM\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:111
+msgid ""
+"The familiar `product` keyword is followed by the vendor name and the card "
+"name, just as in the second section of the file. Here the format deviates "
+"from that used earlier. There is a {} grouping, followed by a number of "
+"strings. These strings correspond to the vendor, product, and extra "
+"information that is defined in a CIS_INFO tuple. These strings are filtered "
+"by the program that generates [.filename]#pccarddevs.h# to replace &sp with "
+"a real space. NULL strings mean that the corresponding part of the entry "
+"should be ignored. The example shown here contains a bad entry. It should "
+"not contain the version number unless that is critical for the operation of "
+"the card. Sometimes vendors will have many different versions of the card in "
+"the field that all work, in which case that information only makes it harder "
+"for someone with a similar card to use it with FreeBSD. Sometimes it is "
+"necessary when a vendor wishes to sell many different parts under the same "
+"brand due to market considerations (availability, price, and so forth). Then "
+"it can be critical to disambiguating the card in those rare cases where the "
+"vendor kept the same manufacturer/product pair. Regular expression matching "
+"is not available at this time."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:113
+#, no-wrap
+msgid "Sample Probe Routine"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:116
+msgid ""
+"To understand how to add a device to the list of supported devices, one must "
+"understand the probe and/or match routines that many drivers have. It is "
+"complicated a little in FreeBSD 5.x because there is a compatibility layer "
+"for OLDCARD present as well. Since only the window-dressing is different, an "
+"idealized version will be presented here."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:126
+#, no-wrap
+msgid ""
+"static const struct pccard_product wi_pccard_products[] = {\n"
+"\tPCMCIA_CARD(3COM, 3CRWE737A, 0),\n"
+"\tPCMCIA_CARD(BUFFALO, WLI_PCM_S11, 0),\n"
+"\tPCMCIA_CARD(BUFFALO, WLI_CF_S11G, 0),\n"
+"\tPCMCIA_CARD(TDK, LAK_CD011WL, 0),\n"
+"\t{ NULL }\n"
+"};\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:132
+#, no-wrap
+msgid ""
+"static int\n"
+"wi_pccard_probe(dev)\n"
+"\tdevice_t\tdev;\n"
+"{\n"
+"\tconst struct pccard_product *pp;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:141
+#, no-wrap
+msgid ""
+"\tif ((pp = pccard_product_lookup(dev, wi_pccard_products,\n"
+"\t sizeof(wi_pccard_products[0]), NULL)) != NULL) {\n"
+"\t\tif (pp->pp_name != NULL)\n"
+"\t\t\tdevice_set_desc(dev, pp->pp_name);\n"
+"\t\treturn (0);\n"
+"\t}\n"
+"\treturn (ENXIO);\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:144
+msgid ""
+"Here we have a simple pccard probe routine that matches a few devices. As "
+"stated above, the name may vary (if it is not `foo_pccard_probe()` it will "
+"be `foo_pccard_match()`). The function `pccard_product_lookup()` is a "
+"generalized function that walks the table and returns a pointer to the first "
+"entry that it matches. Some drivers may use this mechanism to convey "
+"additional information about some cards to the rest of the driver, so there "
+"may be some variance in the table. The only requirement is that each row of "
+"the table must have a `struct pccard_product` as the first element."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:146
+msgid ""
+"Looking at the table `wi_pccard_products`, one notices that all the entries "
+"are of the form `PCMCIA_CARD(_foo_, _bar_, _baz_)`. The _foo_ part is the "
+"manufacturer ID from [.filename]#pccarddevs#. The _bar_ part is the product "
+"ID. _baz_ is the expected function number for this card. Many pccards can "
+"have multiple functions, and some way to disambiguate function 1 from "
+"function 0 is needed. You may see `PCMCIA_CARD_D`, which includes the device "
+"description from [.filename]#pccarddevs#. You may also see `PCMCIA_CARD2` "
+"and `PCMCIA_CARD2_D` which are used when you need to match both CIS strings "
+"and manufacturer numbers, in the \"use the default description\" and \"take "
+"the description from pccarddevs\" flavors."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:148
+#, no-wrap
+msgid "Putting it All Together"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:151
+msgid ""
+"To add a new device, one must first obtain the identification information "
+"from the device. The easiest way to do this is to insert the device into a "
+"PC Card or CF slot and issue `devinfo -v`. Sample output:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:158
+#, no-wrap
+msgid ""
+" cbb1 pnpinfo vendor=0x104c device=0xac51 subvendor=0x1265 subdevice=0x0300 class=0x060700 at slot=10 function=1\n"
+" cardbus1\n"
+" pccard1\n"
+" unknown pnpinfo manufacturer=0x026f product=0x030c cisvendor=\"BUFFALO\" cisproduct=\"WLI2-CF-S11\" function_type=6 at function=0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:161
+msgid ""
+"`manufacturer` and `product` are the numeric IDs for this product, while "
+"`cisvendor` and `cisproduct` are the product description strings from the "
+"CIS."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:163
+msgid ""
+"Since we first want to prefer the numeric option, first try to construct an "
+"entry based on that. The above card has been slightly fictionalized for the "
+"purpose of this example. The vendor is BUFFALO, which we see already has an "
+"entry:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:167
+#, no-wrap
+msgid "vendor BUFFALO\t\t\t0x026f\tBUFFALO (Melco Corporation)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:170
+msgid "But there is no entry for this particular card. Instead we find:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:178
+#, no-wrap
+msgid ""
+"/* BUFFALO */\n"
+"product BUFFALO WLI_PCM_S11\t0x0305\tBUFFALO AirStation 11Mbps WLAN\n"
+"product BUFFALO LPC_CF_CLT\t0x0307\tBUFFALO LPC-CF-CLT\n"
+"product\tBUFFALO\tLPC3_CLT\t0x030a\tBUFFALO LPC3-CLT Ethernet Adapter\n"
+"product BUFFALO WLI_CF_S11G\t0x030b\tBUFFALO AirStation 11Mbps CF WLAN\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:181
+msgid ""
+"To add the device, we can just add this entry to [.filename]#pccarddevs#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:185
+#, no-wrap
+msgid "product BUFFALO WLI2_CF_S11G\t0x030c\tBUFFALO AirStation ultra 802.11b CF\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:188
+msgid ""
+"Once these steps are complete, the card can be added to the driver. That is "
+"a simple operation of adding one line:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:199
+#, no-wrap
+msgid ""
+"static const struct pccard_product wi_pccard_products[] = {\n"
+"\tPCMCIA_CARD(3COM, 3CRWE737A, 0),\n"
+"\tPCMCIA_CARD(BUFFALO, WLI_PCM_S11, 0),\n"
+"\tPCMCIA_CARD(BUFFALO, WLI_CF_S11G, 0),\n"
+"+\tPCMCIA_CARD(BUFFALO, WLI_CF2_S11G, 0),\n"
+"\tPCMCIA_CARD(TDK, LAK_CD011WL, 0),\n"
+"\t{ NULL }\n"
+"};\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:202
+msgid ""
+"Note that I have included a '`+`' in the line before the line that I added, "
+"but that is simply to highlight the line. Do not add it to the actual "
+"driver. Once you have added the line, you can recompile your kernel or "
+"module and test it. If the device is recognized and works, please submit a "
+"patch. If it does not work, please figure out what is needed to make it work "
+"and submit a patch. If the device is not recognized at all, you have done "
+"something wrong and should recheck each step."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:204
+msgid ""
+"If you are a FreeBSD src committer, and everything appears to be working, "
+"then you can commit the changes to the tree. However, there are some minor "
+"tricky things to be considered. [.filename]#pccarddevs# must be committed to "
+"the tree first. Then [.filename]#pccarddevs.h# must be regenerated and "
+"committed as a second step, ensuring that the right $FreeBSD$ tag is in the "
+"latter file. Finally, commit the additions to the driver."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:206
+#, no-wrap
+msgid "Submitting a New Device"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pccard/_index.adoc:208
+msgid ""
+"Please do not send entries for new devices to the author directly. Instead, "
+"submit them as a PR and send the author the PR number for his records. This "
+"ensures that entries are not lost. When submitting a PR, it is unnecessary "
+"to include the [.filename]#pccardevs.h# diffs in the patch, since those will "
+"be regenerated. It is necessary to include a description of the device, as "
+"well as the patches to the client driver. If you do not know the name, use "
+"OEM99 as the name, and the author will adjust OEM99 accordingly after "
+"investigation. Committers should not commit OEM99, but instead find the "
+"highest OEM entry and commit one more than that."
+msgstr ""
diff --git a/documentation/content/en/books/arch-handbook/pci/_index.adoc b/documentation/content/en/books/arch-handbook/pci/_index.adoc
index f5dd920f9b..6a68d8e97d 100644
--- a/documentation/content/en/books/arch-handbook/pci/_index.adoc
+++ b/documentation/content/en/books/arch-handbook/pci/_index.adoc
@@ -6,7 +6,7 @@ description: PCI Devices
tags: ["PCI", "Devices", "example", "guide"]
showBookMenu: true
weight: 13
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/pci/"
---
[[pci]]
diff --git a/documentation/content/en/books/arch-handbook/pci/_index.po b/documentation/content/en/books/arch-handbook/pci/_index.po
new file mode 100644
index 0000000000..f80e3c3376
--- /dev/null
+++ b/documentation/content/en/books/arch-handbook/pci/_index.po
@@ -0,0 +1,787 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:20-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:1
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:13
+#, no-wrap
+msgid "PCI Devices"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:1
+#, no-wrap
+msgid "Chapter 11. PCI Devices"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:51
+msgid ""
+"This chapter will talk about the FreeBSD mechanisms for writing a device "
+"driver for a device on a PCI bus."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:53
+#, no-wrap
+msgid "Probe and Attach"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:56
+msgid ""
+"Information here about how the PCI bus code iterates through the unattached "
+"devices and see if a newly loaded kld will attach to any of them."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:57
+#, no-wrap
+msgid "Sample Driver Source ([.filename]#mypci.c#)"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:66
+#, no-wrap
+msgid ""
+"/*\n"
+" * Simple KLD to play with the PCI functions.\n"
+" *\n"
+" * Murray Stokely\n"
+" */\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:76
+#, no-wrap
+msgid ""
+"#include <sys/param.h>\t\t/* defines used in kernel.h */\n"
+"#include <sys/module.h>\n"
+"#include <sys/systm.h>\n"
+"#include <sys/errno.h>\n"
+"#include <sys/kernel.h>\t\t/* types used in module initialization */\n"
+"#include <sys/conf.h>\t\t/* cdevsw struct */\n"
+"#include <sys/uio.h>\t\t/* uio struct */\n"
+"#include <sys/malloc.h>\n"
+"#include <sys/bus.h>\t\t/* structs, prototypes for pci bus stuff and DEVMETHOD macros! */\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:80
+#, no-wrap
+msgid ""
+"#include <machine/bus.h>\n"
+"#include <sys/rman.h>\n"
+"#include <machine/resource.h>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:83
+#, no-wrap
+msgid ""
+"#include <dev/pci/pcivar.h>\t/* For pci_get macros! */\n"
+"#include <dev/pci/pcireg.h>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:89
+#, no-wrap
+msgid ""
+"/* The softc holds our per-instance data. */\n"
+"struct mypci_softc {\n"
+"\tdevice_t\tmy_dev;\n"
+"\tstruct cdev\t*my_cdev;\n"
+"};\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:95
+#, no-wrap
+msgid ""
+"/* Function prototypes */\n"
+"static d_open_t\t\tmypci_open;\n"
+"static d_close_t\tmypci_close;\n"
+"static d_read_t\t\tmypci_read;\n"
+"static d_write_t\tmypci_write;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:97
+#, no-wrap
+msgid "/* Character device entry points */\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:106
+#, no-wrap
+msgid ""
+"static struct cdevsw mypci_cdevsw = {\n"
+"\t.d_version =\tD_VERSION,\n"
+"\t.d_open =\tmypci_open,\n"
+"\t.d_close =\tmypci_close,\n"
+"\t.d_read =\tmypci_read,\n"
+"\t.d_write =\tmypci_write,\n"
+"\t.d_name =\t\"mypci\",\n"
+"};\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:112
+#, no-wrap
+msgid ""
+"/*\n"
+" * In the cdevsw routines, we find our softc by using the si_drv1 member\n"
+" * of struct cdev. We set this variable to point to our softc in our\n"
+" * attach routine when we create the /dev entry.\n"
+" */\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:117
+#, no-wrap
+msgid ""
+"int\n"
+"mypci_open(struct cdev *dev, int oflags, int devtype, struct thread *td)\n"
+"{\n"
+"\tstruct mypci_softc *sc;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:123
+#, no-wrap
+msgid ""
+"\t/* Look up our softc. */\n"
+"\tsc = dev->si_drv1;\n"
+"\tdevice_printf(sc->my_dev, \"Opened successfully.\\n\");\n"
+"\treturn (0);\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:128
+#, no-wrap
+msgid ""
+"int\n"
+"mypci_close(struct cdev *dev, int fflag, int devtype, struct thread *td)\n"
+"{\n"
+"\tstruct mypci_softc *sc;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:134
+#, no-wrap
+msgid ""
+"\t/* Look up our softc. */\n"
+"\tsc = dev->si_drv1;\n"
+"\tdevice_printf(sc->my_dev, \"Closed.\\n\");\n"
+"\treturn (0);\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:139
+#, no-wrap
+msgid ""
+"int\n"
+"mypci_read(struct cdev *dev, struct uio *uio, int ioflag)\n"
+"{\n"
+"\tstruct mypci_softc *sc;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:145
+#, no-wrap
+msgid ""
+"\t/* Look up our softc. */\n"
+"\tsc = dev->si_drv1;\n"
+"\tdevice_printf(sc->my_dev, \"Asked to read %zd bytes.\\n\", uio->uio_resid);\n"
+"\treturn (0);\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:150
+#, no-wrap
+msgid ""
+"int\n"
+"mypci_write(struct cdev *dev, struct uio *uio, int ioflag)\n"
+"{\n"
+"\tstruct mypci_softc *sc;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:156
+#, no-wrap
+msgid ""
+"\t/* Look up our softc. */\n"
+"\tsc = dev->si_drv1;\n"
+"\tdevice_printf(sc->my_dev, \"Asked to write %zd bytes.\\n\", uio->uio_resid);\n"
+"\treturn (0);\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:158
+#, no-wrap
+msgid "/* PCI Support Functions */\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:166
+#, no-wrap
+msgid ""
+"/*\n"
+" * Compare the device ID of this device against the IDs that this driver\n"
+" * supports. If there is a match, set the description and return success.\n"
+" */\n"
+"static int\n"
+"mypci_probe(device_t dev)\n"
+"{\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:169
+#, no-wrap
+msgid ""
+"\tdevice_printf(dev, \"MyPCI Probe\\nVendor ID : 0x%x\\nDevice ID : 0x%x\\n\",\n"
+"\t pci_get_vendor(dev), pci_get_device(dev));\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:177
+#, no-wrap
+msgid ""
+"\tif (pci_get_vendor(dev) == 0x11c1) {\n"
+"\t\tprintf(\"We've got the Winmodem, probe successful!\\n\");\n"
+"\t\tdevice_set_desc(dev, \"WinModem\");\n"
+"\t\treturn (BUS_PROBE_DEFAULT);\n"
+"\t}\n"
+"\treturn (ENXIO);\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:179
+#, no-wrap
+msgid "/* Attach function is only called if the probe is successful. */\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:184
+#, no-wrap
+msgid ""
+"static int\n"
+"mypci_attach(device_t dev)\n"
+"{\n"
+"\tstruct mypci_softc *sc;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:186
+#, no-wrap
+msgid "\tprintf(\"MyPCI Attach for : deviceID : 0x%x\\n\", pci_get_devid(dev));\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:190
+#, no-wrap
+msgid ""
+"\t/* Look up our softc and initialize its fields. */\n"
+"\tsc = device_get_softc(dev);\n"
+"\tsc->my_dev = dev;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:203
+#, no-wrap
+msgid ""
+"\t/*\n"
+"\t * Create a /dev entry for this device. The kernel will assign us\n"
+"\t * a major number automatically. We use the unit number of this\n"
+"\t * device as the minor number and name the character device\n"
+"\t * \"mypci<unit>\".\n"
+"\t */\n"
+"\tsc->my_cdev = make_dev(&mypci_cdevsw, device_get_unit(dev),\n"
+"\t UID_ROOT, GID_WHEEL, 0600, \"mypci%u\", device_get_unit(dev));\n"
+"\tsc->my_cdev->si_drv1 = sc;\n"
+"\tprintf(\"Mypci device loaded.\\n\");\n"
+"\treturn (0);\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:205
+#, no-wrap
+msgid "/* Detach device. */\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:210
+#, no-wrap
+msgid ""
+"static int\n"
+"mypci_detach(device_t dev)\n"
+"{\n"
+"\tstruct mypci_softc *sc;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:217
+#, no-wrap
+msgid ""
+"\t/* Teardown the state in our softc created in our attach routine. */\n"
+"\tsc = device_get_softc(dev);\n"
+"\tdestroy_dev(sc->my_cdev);\n"
+"\tprintf(\"Mypci detach!\\n\");\n"
+"\treturn (0);\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:219
+#, no-wrap
+msgid "/* Called during system shutdown after sync. */\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:223
+#, no-wrap
+msgid ""
+"static int\n"
+"mypci_shutdown(device_t dev)\n"
+"{\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:227
+#, no-wrap
+msgid ""
+"\tprintf(\"Mypci shutdown!\\n\");\n"
+"\treturn (0);\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:234
+#, no-wrap
+msgid ""
+"/*\n"
+" * Device suspend routine.\n"
+" */\n"
+"static int\n"
+"mypci_suspend(device_t dev)\n"
+"{\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:238
+#, no-wrap
+msgid ""
+"\tprintf(\"Mypci suspend!\\n\");\n"
+"\treturn (0);\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:245
+#, no-wrap
+msgid ""
+"/*\n"
+" * Device resume routine.\n"
+" */\n"
+"static int\n"
+"mypci_resume(device_t dev)\n"
+"{\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:249
+#, no-wrap
+msgid ""
+"\tprintf(\"Mypci resume!\\n\");\n"
+"\treturn (0);\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:258
+#, no-wrap
+msgid ""
+"static device_method_t mypci_methods[] = {\n"
+"\t/* Device interface */\n"
+"\tDEVMETHOD(device_probe,\t\tmypci_probe),\n"
+"\tDEVMETHOD(device_attach,\tmypci_attach),\n"
+"\tDEVMETHOD(device_detach,\tmypci_detach),\n"
+"\tDEVMETHOD(device_shutdown,\tmypci_shutdown),\n"
+"\tDEVMETHOD(device_suspend,\tmypci_suspend),\n"
+"\tDEVMETHOD(device_resume,\tmypci_resume),\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:261
+#, no-wrap
+msgid ""
+"\tDEVMETHOD_END\n"
+"};\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:263
+#, no-wrap
+msgid "static devclass_t mypci_devclass;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:266
+#, no-wrap
+msgid ""
+"DEFINE_CLASS_0(mypci, mypci_driver, mypci_methods, sizeof(struct mypci_softc));\n"
+"DRIVER_MODULE(mypci, pci, mypci_driver, mypci_devclass, 0, 0);\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:268
+#, no-wrap
+msgid "[.filename]#Makefile# for Sample Driver"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:273
+#, no-wrap
+msgid "# Makefile for mypci driver\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:277
+#, no-wrap
+msgid ""
+"KMOD=\tmypci\n"
+"SRCS=\tmypci.c\n"
+"SRCS+=\tdevice_if.h bus_if.h pci_if.h\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:279
+#, no-wrap
+msgid ".include <bsd.kmod.mk>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:282
+msgid ""
+"If you place the above source file and [.filename]#Makefile# into a "
+"directory, you may run `make` to compile the sample driver. Additionally, "
+"you may run `make load` to load the driver into the currently running kernel "
+"and `make unload` to unload the driver after it is loaded."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:283
+#, no-wrap
+msgid "Additional Resources"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:286
+msgid "http://www.pcisig.org/[PCI Special Interest Group]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:287
+msgid "PCI System Architecture, Fourth Edition by Tom Shanley, et al."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:289
+#, no-wrap
+msgid "Bus Resources"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:292
+msgid ""
+"FreeBSD provides an object-oriented mechanism for requesting resources from "
+"a parent bus. Almost all devices will be a child member of some sort of bus "
+"(PCI, ISA, USB, SCSI, etc) and these devices need to acquire resources from "
+"their parent bus (such as memory segments, interrupt lines, or DMA channels)."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:293
+#, no-wrap
+msgid "Base Address Registers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:296
+msgid ""
+"To do anything particularly useful with a PCI device you will need to obtain "
+"the _Base Address Registers_ (BARs) from the PCI Configuration space. The "
+"PCI-specific details of obtaining the BAR are abstracted in the "
+"`bus_alloc_resource()` function."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:298
+msgid ""
+"For example, a typical driver might have something similar to this in the "
+"`attach()` function:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:309
+#, no-wrap
+msgid ""
+" sc->bar0id = PCIR_BAR(0);\n"
+" sc->bar0res = bus_alloc_resource(dev, SYS_RES_MEMORY, &sc->bar0id,\n"
+"\t\t\t\t 0, ~0, 1, RF_ACTIVE);\n"
+" if (sc->bar0res == NULL) {\n"
+" printf(\"Memory allocation of PCI base register 0 failed!\\n\");\n"
+" error = ENXIO;\n"
+" goto fail1;\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:322
+#, no-wrap
+msgid ""
+" sc->bar1id = PCIR_BAR(1);\n"
+" sc->bar1res = bus_alloc_resource(dev, SYS_RES_MEMORY, &sc->bar1id,\n"
+"\t\t\t\t 0, ~0, 1, RF_ACTIVE);\n"
+" if (sc->bar1res == NULL) {\n"
+" printf(\"Memory allocation of PCI base register 1 failed!\\n\");\n"
+" error = ENXIO;\n"
+" goto fail2;\n"
+" }\n"
+" sc->bar0_bt = rman_get_bustag(sc->bar0res);\n"
+" sc->bar0_bh = rman_get_bushandle(sc->bar0res);\n"
+" sc->bar1_bt = rman_get_bustag(sc->bar1res);\n"
+" sc->bar1_bh = rman_get_bushandle(sc->bar1res);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:325
+msgid ""
+"Handles for each base address register are kept in the `softc` structure so "
+"that they can be used to write to the device later."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:327
+msgid ""
+"These handles can then be used to read or write from the device registers "
+"with the `bus_space_*` functions. For example, a driver might contain a "
+"shorthand function to read from a board specific register like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:335
+#, no-wrap
+msgid ""
+"uint16_t\n"
+"board_read(struct ni_softc *sc, uint16_t address)\n"
+"{\n"
+" return bus_space_read_2(sc->bar1_bt, sc->bar1_bh, address);\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:338
+msgid "Similarly, one could write to the registers with:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:346
+#, no-wrap
+msgid ""
+"void\n"
+"board_write(struct ni_softc *sc, uint16_t address, uint16_t value)\n"
+"{\n"
+" bus_space_write_2(sc->bar1_bt, sc->bar1_bh, address, value);\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:349
+msgid ""
+"These functions exist in 8bit, 16bit, and 32bit versions and you should use "
+"`bus_space_{read|write}_{1|2|4}` accordingly."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:353
+msgid ""
+"In FreeBSD 7.0 and later, you can use the `bus_*` functions instead of "
+"`bus_space_*`. The `bus_*` functions take a struct resource * pointer "
+"instead of a bus tag and handle. Thus, you could drop the bus tag and bus "
+"handle members from the `softc` and rewrite the `board_read()` function as:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:361
+#, no-wrap
+msgid ""
+"uint16_t\n"
+"board_read(struct ni_softc *sc, uint16_t address)\n"
+"{\n"
+"\treturn (bus_read(sc->bar1res, address));\n"
+"}\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:365
+#, no-wrap
+msgid "Interrupts"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:368
+msgid ""
+"Interrupts are allocated from the object-oriented bus code in a way similar "
+"to the memory resources. First an IRQ resource must be allocated from the "
+"parent bus, and then the interrupt handler must be set up to deal with this "
+"IRQ."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:370
+msgid "Again, a sample from a device `attach()` function says more than words."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:374
+#, no-wrap
+msgid "/* Get the IRQ resource */\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:383
+#, no-wrap
+msgid ""
+" sc->irqid = 0x0;\n"
+" sc->irqres = bus_alloc_resource(dev, SYS_RES_IRQ, &(sc->irqid),\n"
+"\t\t\t\t 0, ~0, 1, RF_SHAREABLE | RF_ACTIVE);\n"
+" if (sc->irqres == NULL) {\n"
+"\tprintf(\"IRQ allocation failed!\\n\");\n"
+"\terror = ENXIO;\n"
+"\tgoto fail3;\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:385
+#, no-wrap
+msgid " /* Now we should set up the interrupt handler */\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:392
+#, no-wrap
+msgid ""
+" error = bus_setup_intr(dev, sc->irqres, INTR_TYPE_MISC,\n"
+"\t\t\t my_handler, sc, &(sc->handler));\n"
+" if (error) {\n"
+"\tprintf(\"Couldn't set up irq\\n\");\n"
+"\tgoto fail4;\n"
+" }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:395
+msgid ""
+"Some care must be taken in the detach routine of the driver. You must "
+"quiesce the device's interrupt stream, and remove the interrupt handler. "
+"Once `bus_teardown_intr()` has returned, you know that your interrupt "
+"handler will no longer be called and that all threads that might have been "
+"executing this interrupt handler have returned. Since this function can "
+"sleep, you must not hold any mutexes when calling this function."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:396
+#, no-wrap
+msgid "DMA"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:399
+msgid ""
+"This section is obsolete, and present only for historical reasons. The "
+"proper methods for dealing with these issues is to use the "
+"`bus_space_dma*()` functions instead. This paragraph can be removed when "
+"this section is updated to reflect that usage. However, at the moment, the "
+"API is in a bit of flux, so once that settles down, it would be good to "
+"update this section to reflect that."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:401
+msgid ""
+"On the PC, peripherals that want to do bus-mastering DMA must deal with "
+"physical addresses. This is a problem since FreeBSD uses virtual memory and "
+"deals almost exclusively with virtual addresses. Fortunately, there is a "
+"function, `vtophys()` to help."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:406
+#, no-wrap
+msgid ""
+"#include <vm/vm.h>\n"
+"#include <vm/pmap.h>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:408
+#, no-wrap
+msgid "#define vtophys(virtual_address) (...)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:411
+msgid ""
+"The solution is a bit different on the alpha however, and what we really "
+"want is a function called `vtobus()`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:419
+#, no-wrap
+msgid ""
+"#if defined(__alpha__)\n"
+"#define vtobus(va) alpha_XXX_dmamap((vm_offset_t)va)\n"
+"#else\n"
+"#define vtobus(va) vtophys(va)\n"
+"#endif\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:421
+#, no-wrap
+msgid "Deallocating Resources"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/pci/_index.adoc:423
+msgid ""
+"It is very important to deallocate all of the resources that were allocated "
+"during `attach()`. Care must be taken to deallocate the correct stuff even "
+"on a failure condition so that the system will remain usable while your "
+"driver dies."
+msgstr ""
diff --git a/documentation/content/en/books/arch-handbook/scsi/_index.adoc b/documentation/content/en/books/arch-handbook/scsi/_index.adoc
index 61dfcd6c45..ca88b761a2 100644
--- a/documentation/content/en/books/arch-handbook/scsi/_index.adoc
+++ b/documentation/content/en/books/arch-handbook/scsi/_index.adoc
@@ -6,7 +6,7 @@ description: Common Access Method SCSI Controllers
tags: ["SCSI", "Controller", "Architecture"]
showBookMenu: true
weight: 14
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/scsi/"
---
[[scsi]]
diff --git a/documentation/content/en/books/arch-handbook/scsi/_index.po b/documentation/content/en/books/arch-handbook/scsi/_index.po
new file mode 100644
index 0000000000..beb351e2f5
--- /dev/null
+++ b/documentation/content/en/books/arch-handbook/scsi/_index.po
@@ -0,0 +1,3093 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:20-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:13
+#, no-wrap
+msgid "Common Access Method SCSI Controllers"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1
+#, no-wrap
+msgid "Chapter 12. Common Access Method SCSI Controllers"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:51
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:55
+msgid ""
+"This document assumes that the reader has a general understanding of device "
+"drivers in FreeBSD and of the SCSI protocol. Much of the information in "
+"this document was extracted from the drivers:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:57
+msgid ""
+"ncr ([.filename]#/sys/pci/ncr.c#) by Wolfgang Stanglmeier and Stefan Esser"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:58
+msgid "sym ([.filename]#/sys/dev/sym/sym_hipd.c#) by Gerard Roudier"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:59
+msgid "aic7xxx ([.filename]#/sys/dev/aic7xxx/aic7xxx.c#) by Justin T. Gibbs"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:62
+msgid ""
+"and from the CAM code itself (by Justin T. Gibbs, see [.filename]#/sys/cam/"
+"*#). When some solution looked the most logical and was essentially "
+"verbatim extracted from the code by Justin T. Gibbs, I marked it as "
+"\"recommended\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:70
+msgid ""
+"The document is illustrated with examples in pseudo-code. Although "
+"sometimes the examples have many details and look like real code, it is "
+"still pseudo-code. It was written to demonstrate the concepts in an "
+"understandable way. For a real driver other approaches may be more modular "
+"and efficient. It also abstracts from the hardware details, as well as "
+"issues that would cloud the demonstrated concepts or that are supposed to be "
+"described in the other chapters of the developers handbook. Such details "
+"are commonly shown as calls to functions with descriptive names, comments or "
+"pseudo-statements. Fortunately real life full-size examples with all the "
+"details can be found in the real drivers."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:72
+#, no-wrap
+msgid "General Architecture"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:78
+msgid ""
+"CAM stands for Common Access Method. It is a generic way to address the I/O "
+"buses in a SCSI-like way. This allows a separation of the generic device "
+"drivers from the drivers controlling the I/O bus: for example the disk "
+"driver becomes able to control disks on both SCSI, IDE, and/or any other bus "
+"so the disk driver portion does not have to be rewritten (or copied and "
+"modified) for every new I/O bus. Thus the two most important active "
+"entities are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:80
+msgid ""
+"_Peripheral Modules_ - a driver for peripheral devices (disk, tape, CD-ROM, "
+"etc.)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:81
+msgid ""
+"_SCSI Interface Modules_ (SIM) - a Host Bus Adapter drivers for connecting "
+"to an I/O bus such as SCSI or IDE."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:84
+msgid ""
+"A peripheral driver receives requests from the OS, converts them to a "
+"sequence of SCSI commands and passes these SCSI commands to a SCSI Interface "
+"Module. The SCSI Interface Module is responsible for passing these commands "
+"to the actual hardware (or if the actual hardware is not SCSI but, for "
+"example, IDE then also converting the SCSI commands to the native commands "
+"of the hardware)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:86
+msgid ""
+"As we are interested in writing a SCSI adapter driver here, from this point "
+"on we will consider everything from the SIM standpoint."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:87
+#, no-wrap
+msgid "Globals and Boilerplate"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:90
+msgid ""
+"A typical SIM driver needs to include the following CAM-related header files:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:99
+#, no-wrap
+msgid ""
+"#include <cam/cam.h>\n"
+"#include <cam/cam_ccb.h>\n"
+"#include <cam/cam_sim.h>\n"
+"#include <cam/cam_xpt_sim.h>\n"
+"#include <cam/cam_debug.h>\n"
+"#include <cam/scsi/scsi_all.h>\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:101
+#, no-wrap
+msgid "Device configuration: xxx_attach"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:106
+msgid ""
+"The first thing each SIM driver must do is register itself with the CAM "
+"subsystem. This is done during the driver's `xxx_attach()` function (here "
+"and further xxx_ is used to denote the unique driver name prefix). The "
+"`xxx_attach()` function itself is called by the system bus auto-"
+"configuration code which we do not describe here."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:108
+msgid ""
+"This is achieved in multiple steps: first it is necessary to allocate the "
+"queue of requests associated with this SIM:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:112
+#, no-wrap
+msgid " struct cam_devq *devq;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:116
+#, no-wrap
+msgid ""
+" if ((devq = cam_simq_alloc(SIZE)) == NULL) {\n"
+" error; /* some code to handle the error */\n"
+" }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:121
+msgid ""
+"Here `SIZE` is the size of the queue to be allocated, maximal number of "
+"requests it could contain. It is the number of requests that the SIM driver "
+"can handle in parallel on one SCSI card. Commonly it can be calculated as:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:125
+#, no-wrap
+msgid "SIZE = NUMBER_OF_SUPPORTED_TARGETS * MAX_SIMULTANEOUS_COMMANDS_PER_TARGET\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:128
+msgid "Next we create a descriptor of our SIM:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:132
+#, no-wrap
+msgid " struct cam_sim *sim;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:139
+#, no-wrap
+msgid ""
+" if ((sim = cam_sim_alloc(action_func, poll_func, driver_name,\n"
+" softc, unit, mtx, max_dev_transactions,\n"
+" max_tagged_dev_transactions, devq)) == NULL) {\n"
+" cam_simq_free(devq);\n"
+" error; /* some code to handle the error */\n"
+" }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:142
+msgid ""
+"Note that if we are not able to create a SIM descriptor we free the `devq` "
+"also because we can do nothing else with it and we want to conserve memory."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:144
+msgid ""
+"If a SCSI card has multiple SCSI buses on it then each bus requires its own "
+"`cam_sim` structure."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:147
+msgid ""
+"An interesting question is what to do if a SCSI card has more than one SCSI "
+"bus, do we need one `devq` structure per card or per SCSI bus? The answer "
+"given in the comments to the CAM code is: either way, as the driver's author "
+"prefers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:149
+msgid "The arguments are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:151
+msgid "`action_func` - pointer to the driver's `xxx_action` function."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:155
+#, no-wrap
+msgid "static void xxx_action(struct cam_sim *, union ccb *);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:157
+msgid "`poll_func` - pointer to the driver's `xxx_poll()`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:161
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1019
+#, no-wrap
+msgid "static void xxx_poll(struct cam_sim *);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:163
+msgid ""
+"driver_name - the name of the actual driver, such as \"ncr\" or \"wds\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:165
+msgid ""
+"`softc` - pointer to the driver's internal descriptor for this SCSI card. "
+"This pointer will be used by the driver in future to get private data."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:166
+msgid ""
+"unit - the controller unit number, for example for controller \"mps0\" this "
+"number will be 0"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:170
+msgid ""
+"mtx - Lock associated with this SIM. For SIMs that don't know about "
+"locking, pass in Giant. For SIMs that do, pass in the lock used to guard "
+"this SIM's data structures. This lock will be held when xxx_action and "
+"xxx_poll are called."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:173
+msgid ""
+"max_dev_transactions - maximal number of simultaneous transactions per SCSI "
+"target in the non-tagged mode. This value will be almost universally equal "
+"to 1, with possible exceptions only for the non-SCSI cards. Also the "
+"drivers that hope to take advantage by preparing one transaction while "
+"another one is executed may set it to 2 but this does not seem to be worth "
+"the complexity."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:178
+msgid ""
+"max_tagged_dev_transactions - the same thing, but in the tagged mode. Tags "
+"are the SCSI way to initiate multiple transactions on a device: each "
+"transaction is assigned a unique tag and the transaction is sent to the "
+"device. When the device completes some transaction it sends back the result "
+"together with the tag so that the SCSI adapter (and the driver) can tell "
+"which transaction was completed. This argument is also known as the maximal "
+"tag depth. It depends on the abilities of the SCSI adapter."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:180
+msgid "Finally we register the SCSI buses associated with our SCSI adapter:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:187
+#, no-wrap
+msgid ""
+" if (xpt_bus_register(sim, softc, bus_number) != CAM_SUCCESS) {\n"
+" cam_sim_free(sim, /*free_devq*/ TRUE);\n"
+" error; /* some code to handle the error */\n"
+" }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:191
+msgid ""
+"If there is one `devq` structure per SCSI bus (i.e., we consider a card with "
+"multiple buses as multiple cards with one bus each) then the bus number will "
+"always be 0, otherwise each bus on the SCSI card should be get a distinct "
+"number. Each bus needs its own separate structure cam_sim."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:194
+msgid ""
+"After that our controller is completely hooked to the CAM system. The value "
+"of `devq` can be discarded now: sim will be passed as an argument in all "
+"further calls from CAM and devq can be derived from it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:198
+msgid ""
+"CAM provides the framework for such asynchronous events. Some events "
+"originate from the lower levels (the SIM drivers), some events originate "
+"from the peripheral drivers, some events originate from the CAM subsystem "
+"itself. Any driver can register callbacks for some types of the "
+"asynchronous events, so that it would be notified if these events occur."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:206
+msgid ""
+"A typical example of such an event is a device reset. Each transaction and "
+"event identifies the devices to which it applies by the means of \"path\". "
+"The target-specific events normally occur during a transaction with this "
+"device. So the path from that transaction may be re-used to report this "
+"event (this is safe because the event path is copied in the event reporting "
+"routine but not deallocated nor passed anywhere further). Also it is safe "
+"to allocate paths dynamically at any time including the interrupt routines, "
+"although that incurs certain overhead, and a possible problem with this "
+"approach is that there may be no free memory at that time. For a bus reset "
+"event we need to define a wildcard path including all devices on the bus. "
+"So we can create the path for the future bus reset events in advance and "
+"avoid problems with the future memory shortage:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:210
+#, no-wrap
+msgid " struct cam_path *path;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:218
+#, no-wrap
+msgid ""
+" if (xpt_create_path(&path, /*periph*/NULL,\n"
+" cam_sim_path(sim), CAM_TARGET_WILDCARD,\n"
+" CAM_LUN_WILDCARD) != CAM_REQ_CMP) {\n"
+" xpt_bus_deregister(cam_sim_path(sim));\n"
+" cam_sim_free(sim, /*free_devq*/TRUE);\n"
+" error; /* some code to handle the error */\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:221
+#, no-wrap
+msgid ""
+" softc->wpath = path;\n"
+" softc->sim = sim;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:224
+msgid "As you can see the path includes:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:226
+msgid "ID of the peripheral driver (NULL here because we have none)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:227
+msgid "ID of the SIM driver (`cam_sim_path(sim)`)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:228
+msgid ""
+"SCSI target number of the device (CAM_TARGET_WILDCARD means \"all devices\")"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:229
+msgid "SCSI LUN number of the subdevice (CAM_LUN_WILDCARD means \"all LUNs\")"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:231
+msgid ""
+"If the driver can not allocate this path it will not be able to work "
+"normally, so in that case we dismantle that SCSI bus."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:234
+msgid ""
+"And we save the path pointer in the `softc` structure for future use. After "
+"that we save the value of sim (or we can also discard it on the exit from "
+"`xxx_probe()` if we wish)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:237
+msgid ""
+"That is all for a minimalistic initialization. To do things right there is "
+"one more issue left."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:242
+msgid ""
+"For a SIM driver there is one particularly interesting event: when a target "
+"device is considered lost. In this case resetting the SCSI negotiations "
+"with this device may be a good idea. So we register a callback for this "
+"event with CAM. The request is passed to CAM by requesting CAM action on a "
+"CAM control block for this type of request:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:246
+#, no-wrap
+msgid " struct ccb_setasync csa;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:253
+#, no-wrap
+msgid ""
+" xpt_setup_ccb(&csa.ccb_h, path, /*priority*/5);\n"
+" csa.ccb_h.func_code = XPT_SASYNC_CB;\n"
+" csa.event_enable = AC_LOST_DEVICE;\n"
+" csa.callback = xxx_async;\n"
+" csa.callback_arg = sim;\n"
+" xpt_action((union ccb *)&csa);\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:255
+#, no-wrap
+msgid "Processing CAM messages: xxx_action"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:260
+#, no-wrap
+msgid "static void xxx_action(struct cam_sim *sim, union ccb *ccb);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:267
+msgid ""
+"Do some action on request of the CAM subsystem. Sim describes the SIM for "
+"the request, CCB is the request itself. CCB stands for \"CAM Control Block"
+"\". It is a union of many specific instances, each describing arguments for "
+"some type of transactions. All of these instances share the CCB header "
+"where the common part of arguments is stored."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:270
+msgid ""
+"CAM supports the SCSI controllers working in both initiator (\"normal\") "
+"mode and target (simulating a SCSI device) mode. Here we only consider the "
+"part relevant to the initiator mode."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:272
+msgid ""
+"There are a few function and macros (in other words, methods) defined to "
+"access the public data in the struct sim:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:274
+msgid "`cam_sim_path(sim)` - the path ID (see above)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:275
+msgid "`cam_sim_name(sim)` - the name of the sim"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:276
+msgid ""
+"`cam_sim_softc(sim)` - the pointer to the softc (driver private data) "
+"structure"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:277
+msgid "`cam_sim_unit(sim)` - the unit number"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:278
+msgid "`cam_sim_bus(sim)` - the bus ID"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:280
+msgid ""
+"To identify the device, `xxx_action()` can get the unit number and pointer "
+"to its structure softc using these functions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:283
+msgid ""
+"The type of request is stored in `ccb->ccb_h.func_code`. So generally "
+"`xxx_action()` consists of a big switch:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:290
+#, no-wrap
+msgid ""
+" struct xxx_softc *softc = (struct xxx_softc *) cam_sim_softc(sim);\n"
+" struct ccb_hdr *ccb_h = &ccb->ccb_h;\n"
+" int unit = cam_sim_unit(sim);\n"
+" int bus = cam_sim_bus(sim);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:299
+#, no-wrap
+msgid ""
+" switch (ccb_h->func_code) {\n"
+" case ...:\n"
+" ...\n"
+" default:\n"
+" ccb_h->status = CAM_REQ_INVALID;\n"
+" xpt_done(ccb);\n"
+" break;\n"
+" }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:302
+msgid ""
+"As can be seen from the default case (if an unknown command was received) "
+"the return code of the command is set into `ccb->ccb_h.status` and the "
+"completed CCB is returned back to CAM by calling `xpt_done(ccb)`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:305
+msgid ""
+"`xpt_done()` does not have to be called from `xxx_action()`: For example an "
+"I/O request may be enqueued inside the SIM driver and/or its SCSI "
+"controller. Then when the device would post an interrupt signaling that the "
+"processing of this request is complete `xpt_done()` may be called from the "
+"interrupt handling routine."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:313
+msgid ""
+"Actually, the CCB status is not only assigned as a return code but a CCB has "
+"some status all the time. Before CCB is passed to the `xxx_action()` "
+"routine it gets the status CCB_REQ_INPROG meaning that it is in progress. "
+"There are a surprising number of status values defined in [.filename]#/sys/"
+"cam/cam.h# which should be able to represent the status of a request in "
+"great detail. More interesting yet, the status is in fact a \"bitwise or\" "
+"of an enumerated status value (the lower 6 bits) and possible additional "
+"flag-like bits (the upper bits). The enumerated values will be discussed "
+"later in more detail. The summary of them can be found in the Errors "
+"Summary section. The possible status flags are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:316
+msgid ""
+"_CAM_DEV_QFRZN_ - if the SIM driver gets a serious error (for example, the "
+"device does not respond to the selection or breaks the SCSI protocol) when "
+"processing a CCB it should freeze the request queue by calling "
+"`xpt_freeze_simq()`, return the other enqueued but not processed yet CCBs "
+"for this device back to the CAM queue, then set this flag for the "
+"troublesome CCB and call `xpt_done()`. This flag causes the CAM subsystem "
+"to unfreeze the queue after it handles the error."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:318
+msgid ""
+"_CAM_AUTOSNS_VALID_ - if the device returned an error condition and the flag "
+"CAM_DIS_AUTOSENSE is not set in CCB the SIM driver must execute the REQUEST "
+"SENSE command automatically to extract the sense (extended error "
+"information) data from the device. If this attempt was successful the sense "
+"data should be saved in the CCB and this flag set."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:321
+msgid ""
+"_CAM_RELEASE_SIMQ_ - like CAM_DEV_QFRZN but used in case there is some "
+"problem (or resource shortage) with the SCSI controller itself. Then all "
+"the future requests to the controller should be stopped by "
+"`xpt_freeze_simq()`. The controller queue will be restarted after the SIM "
+"driver overcomes the shortage and informs CAM by returning some CCB with "
+"this flag set."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:323
+msgid ""
+"_CAM_SIM_QUEUED_ - when SIM puts a CCB into its request queue this flag "
+"should be set (and removed when this CCB gets dequeued before being returned "
+"back to CAM). This flag is not used anywhere in the CAM code now, so its "
+"purpose is purely diagnostic."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:324
+msgid "_CAM_QOS_VALID_ - The QOS data is now valid."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:327
+msgid ""
+"The function `xxx_action()` is not allowed to sleep, so all the "
+"synchronization for resource access must be done using SIM or device queue "
+"freezing. Besides the aforementioned flags the CAM subsystem provides "
+"functions `xpt_release_simq()` and `xpt_release_devq()` to unfreeze the "
+"queues directly, without passing a CCB to CAM."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:329
+msgid "The CCB header contains the following fields:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:331
+msgid "_path_ - path ID for the request"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:332
+msgid "_target_id_ - target device ID for the request"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:333
+msgid "_target_lun_ - LUN ID of the target device"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:334
+msgid "_timeout_ - timeout interval for this command, in milliseconds"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:335
+msgid ""
+"_timeout_ch_ - a convenience place for the SIM driver to store the timeout "
+"handle (the CAM subsystem itself does not make any assumptions about it)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:336
+msgid ""
+"_flags_ - various bits of information about the request spriv_ptr0, "
+"spriv_ptr1 - fields reserved for private use by the SIM driver (such as "
+"linking to the SIM queues or SIM private control blocks); actually, they "
+"exist as unions: spriv_ptr0 and spriv_ptr1 have the type (void *), "
+"spriv_field0 and spriv_field1 have the type unsigned long, sim_priv."
+"entries[0].bytes and sim_priv.entries[1].bytes are byte arrays of the size "
+"consistent with the other incarnations of the union and sim_priv.bytes is "
+"one array, twice bigger."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:338
+msgid ""
+"The recommended way of using the SIM private fields of CCB is to define some "
+"meaningful names for them and use these meaningful names in the driver, like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:343
+#, no-wrap
+msgid ""
+"#define ccb_some_meaningful_name sim_priv.entries[0].bytes\n"
+"#define ccb_hcb spriv_ptr1 /* for hardware control block */\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:346
+msgid "The most common initiator mode requests are:"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:347
+#, no-wrap
+msgid "_XPT_SCSI_IO_ - execute an I/O transaction"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:351
+msgid ""
+"The instance \"struct ccb_scsiio csio\" of the union ccb is used to transfer "
+"the arguments. They are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:353
+msgid "_cdb_io_ - pointer to the SCSI command buffer or the buffer itself"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:354
+msgid "_cdb_len_ - SCSI command length"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:355
+msgid ""
+"_data_ptr_ - pointer to the data buffer (gets a bit complicated if scatter/"
+"gather is used)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:356
+msgid "_dxfer_len_ - length of the data to transfer"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:357
+msgid "_sglist_cnt_ - counter of the scatter/gather segments"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:358
+msgid "_scsi_status_ - place to return the SCSI status"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:359
+msgid ""
+"_sense_data_ - buffer for the SCSI sense information if the command returns "
+"an error (the SIM driver is supposed to run the REQUEST SENSE command "
+"automatically in this case if the CCB flag CAM_DIS_AUTOSENSE is not set)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:360
+msgid ""
+"_sense_len_ - the length of that buffer (if it happens to be higher than "
+"size of sense_data the SIM driver must silently assume the smaller value)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:363
+msgid ""
+"_resid_, _sense_resid_ - if the transfer of data or SCSI sense returned an "
+"error these are the returned counters of the residual (not transferred) "
+"data. They do not seem to be especially meaningful, so in a case when they "
+"are difficult to compute (say, counting bytes in the SCSI controller's FIFO "
+"buffer) an approximate value will do as well. For a successfully completed "
+"transfer they must be set to zero."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:364
+msgid "_tag_action_ - the kind of tag to use:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:365
+msgid "CAM_TAG_ACTION_NONE - do not use tags for this transaction"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:366
+msgid ""
+"MSG_SIMPLE_Q_TAG, MSG_HEAD_OF_Q_TAG, MSG_ORDERED_Q_TAG - value equal to the "
+"appropriate tag message (see /sys/cam/scsi/scsi_message.h); this gives only "
+"the tag type, the SIM driver must assign the tag value itself"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:368
+msgid "The general logic of handling this request is the following:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:370
+msgid ""
+"The first thing to do is to check for possible races, to make sure that the "
+"command did not get aborted when it was sitting in the queue:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:374
+#, no-wrap
+msgid " struct ccb_scsiio *csio = &ccb->csio;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:379
+#, no-wrap
+msgid ""
+" if ((ccb_h->status & CAM_STATUS_MASK) != CAM_REQ_INPROG) {\n"
+" xpt_done(ccb);\n"
+" return;\n"
+" }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:382
+msgid "Also we check that the device is supported at all by our controller:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:396
+#, no-wrap
+msgid ""
+" if (ccb_h->target_id > OUR_MAX_SUPPORTED_TARGET_ID\n"
+" || cch_h->target_id == OUR_SCSI_CONTROLLERS_OWN_ID) {\n"
+" ccb_h->status = CAM_TID_INVALID;\n"
+" xpt_done(ccb);\n"
+" return;\n"
+" }\n"
+" if (ccb_h->target_lun > OUR_MAX_SUPPORTED_LUN) {\n"
+" ccb_h->status = CAM_LUN_INVALID;\n"
+" xpt_done(ccb);\n"
+" return;\n"
+" }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:402
+msgid ""
+"Then allocate whatever data structures (such as card-dependent hardware "
+"control block) we need to process this request. If we can not then freeze "
+"the SIM queue and remember that we have a pending operation, return the CCB "
+"back and ask CAM to re-queue it. Later when the resources become available "
+"the SIM queue must be unfrozen by returning a ccb with the "
+"`CAM_SIMQ_RELEASE` bit set in its status. Otherwise, if all went well, link "
+"the CCB with the hardware control block (HCB) and mark it as queued."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:406
+#, no-wrap
+msgid " struct xxx_hcb *hcb = allocate_hcb(softc, unit, bus);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:414
+#, no-wrap
+msgid ""
+" if (hcb == NULL) {\n"
+" softc->flags |= RESOURCE_SHORTAGE;\n"
+" xpt_freeze_simq(sim, /*count*/1);\n"
+" ccb_h->status = CAM_REQUEUE_REQ;\n"
+" xpt_done(ccb);\n"
+" return;\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:417
+#, no-wrap
+msgid ""
+" hcb->ccb = ccb; ccb_h->ccb_hcb = (void *)hcb;\n"
+" ccb_h->status |= CAM_SIM_QUEUED;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:422
+msgid ""
+"Extract the target data from CCB into the hardware control block. Check if "
+"we are asked to assign a tag and if yes then generate an unique tag and "
+"build the SCSI tag messages. The SIM driver is also responsible for "
+"negotiations with the devices to set the maximal mutually supported bus "
+"width, synchronous rate and offset."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:431
+#, no-wrap
+msgid ""
+" hcb->target = ccb_h->target_id; hcb->lun = ccb_h->target_lun;\n"
+" generate_identify_message(hcb);\n"
+" if (ccb_h->tag_action != CAM_TAG_ACTION_NONE)\n"
+" generate_unique_tag_message(hcb, ccb_h->tag_action);\n"
+" if (!target_negotiated(hcb))\n"
+" generate_negotiation_messages(hcb);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:437
+msgid ""
+"Then set up the SCSI command. The command storage may be specified in the "
+"CCB in many interesting ways, specified by the CCB flags. The command "
+"buffer can be contained in CCB or pointed to, in the latter case the pointer "
+"may be physical or virtual. Since the hardware commonly needs physical "
+"address we always convert the address to the physical one, typically using "
+"the busdma API."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:440
+msgid ""
+"In case if a physical address is requested it is OK to return the CCB with "
+"the status `CAM_REQ_INVALID`, the current drivers do that. If necessary a "
+"physical address can be also converted or mapped back to a virtual address "
+"but with big pain, so we do not do that."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:457
+#, no-wrap
+msgid ""
+" if (ccb_h->flags & CAM_CDB_POINTER) {\n"
+" /* CDB is a pointer */\n"
+" if (!(ccb_h->flags & CAM_CDB_PHYS)) {\n"
+" /* CDB pointer is virtual */\n"
+" hcb->cmd = vtobus(csio->cdb_io.cdb_ptr);\n"
+" } else {\n"
+" /* CDB pointer is physical */\n"
+" hcb->cmd = csio->cdb_io.cdb_ptr ;\n"
+" }\n"
+" } else {\n"
+" /* CDB is in the ccb (buffer) */\n"
+" hcb->cmd = vtobus(csio->cdb_io.cdb_bytes);\n"
+" }\n"
+" hcb->cmdlen = csio->cdb_len;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:463
+msgid ""
+"Now it is time to set up the data. Again, the data storage may be specified "
+"in the CCB in many interesting ways, specified by the CCB flags. First we "
+"get the direction of the data transfer. The simplest case is if there is no "
+"data to transfer:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:467
+#, no-wrap
+msgid " int dir = (ccb_h->flags & CAM_DIR_MASK);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:470
+#, no-wrap
+msgid ""
+" if (dir == CAM_DIR_NONE)\n"
+" goto end_data;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:481
+msgid ""
+"Then we check if the data is in one chunk or in a scatter-gather list, and "
+"the addresses are physical or virtual. The SCSI controller may be able to "
+"handle only a limited number of chunks of limited length. If the request "
+"hits this limitation we return an error. We use a special function to "
+"return the CCB to handle in one place the HCB resource shortages. The "
+"functions to add chunks are driver-dependent, and here we leave them without "
+"detailed implementation. See description of the SCSI command (CDB) handling "
+"for the details on the address-translation issues. If some variation is too "
+"difficult or impossible to implement with a particular card it is OK to "
+"return the status `CAM_REQ_INVALID`. Actually, it seems like the scatter-"
+"gather ability is not used anywhere in the CAM code now. But at least the "
+"case for a single non-scattered virtual buffer must be implemented, it is "
+"actively used by CAM."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:485
+#, no-wrap
+msgid " int rv;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:487
+#, no-wrap
+msgid " initialize_hcb_for_data(hcb);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:500
+#, no-wrap
+msgid ""
+" if ((!(ccb_h->flags & CAM_SCATTER_VALID)) {\n"
+" /* single buffer */\n"
+" if (!(ccb_h->flags & CAM_DATA_PHYS)) {\n"
+" rv = add_virtual_chunk(hcb, csio->data_ptr, csio->dxfer_len, dir);\n"
+" }\n"
+" } else {\n"
+" rv = add_physical_chunk(hcb, csio->data_ptr, csio->dxfer_len, dir);\n"
+" }\n"
+" } else {\n"
+" int i;\n"
+" struct bus_dma_segment *segs;\n"
+" segs = (struct bus_dma_segment *)csio->data_ptr;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:532
+#, no-wrap
+msgid ""
+" if ((ccb_h->flags & CAM_SG_LIST_PHYS) != 0) {\n"
+" /* The SG list pointer is physical */\n"
+" rv = setup_hcb_for_physical_sg_list(hcb, segs, csio->sglist_cnt);\n"
+" } else if (!(ccb_h->flags & CAM_DATA_PHYS)) {\n"
+" /* SG buffer pointers are virtual */\n"
+" for (i = 0; i < csio->sglist_cnt; i++) {\n"
+" rv = add_virtual_chunk(hcb, segs[i].ds_addr,\n"
+" segs[i].ds_len, dir);\n"
+" if (rv != CAM_REQ_CMP)\n"
+" break;\n"
+" }\n"
+" } else {\n"
+" /* SG buffer pointers are physical */\n"
+" for (i = 0; i < csio->sglist_cnt; i++) {\n"
+" rv = add_physical_chunk(hcb, segs[i].ds_addr,\n"
+" segs[i].ds_len, dir);\n"
+" if (rv != CAM_REQ_CMP)\n"
+" break;\n"
+" }\n"
+" }\n"
+" }\n"
+" if (rv != CAM_REQ_CMP) {\n"
+" /* we expect that add_*_chunk() functions return CAM_REQ_CMP\n"
+" * if they added a chunk successfully, CAM_REQ_TOO_BIG if\n"
+" * the request is too big (too many bytes or too many chunks),\n"
+" * CAM_REQ_INVALID in case of other troubles\n"
+" */\n"
+" free_hcb_and_ccb_done(hcb, ccb, rv);\n"
+" return;\n"
+" }\n"
+" end_data:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:535
+msgid ""
+"If disconnection is disabled for this CCB we pass this information to the "
+"hcb:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:540
+#, no-wrap
+msgid ""
+" if (ccb_h->flags & CAM_DIS_DISCONNECT)\n"
+" hcb_disable_disconnect(hcb);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:543
+msgid ""
+"If the controller is able to run REQUEST SENSE command all by itself then "
+"the value of the flag CAM_DIS_AUTOSENSE should also be passed to it, to "
+"prevent automatic REQUEST SENSE if the CAM subsystem does not want it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:545
+msgid ""
+"The only thing left is to set up the timeout, pass our hcb to the hardware "
+"and return, the rest will be done by the interrupt handler (or timeout "
+"handler)."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:552
+#, no-wrap
+msgid ""
+" ccb_h->timeout_ch = timeout(xxx_timeout, (caddr_t) hcb,\n"
+" (ccb_h->timeout * hz) / 1000); /* convert milliseconds to ticks */\n"
+" put_hcb_into_hardware_queue(hcb);\n"
+" return;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:555
+msgid "And here is a possible implementation of the function returning CCB:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:562
+#, no-wrap
+msgid ""
+" static void\n"
+" free_hcb_and_ccb_done(struct xxx_hcb *hcb, union ccb *ccb, u_int32_t status)\n"
+" {\n"
+" struct xxx_softc *softc = hcb->softc;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:577
+#, no-wrap
+msgid ""
+" ccb->ccb_h.ccb_hcb = 0;\n"
+" if (hcb != NULL) {\n"
+" untimeout(xxx_timeout, (caddr_t) hcb, ccb->ccb_h.timeout_ch);\n"
+" /* we're about to free a hcb, so the shortage has ended */\n"
+" if (softc->flags & RESOURCE_SHORTAGE) {\n"
+" softc->flags &= ~RESOURCE_SHORTAGE;\n"
+" status |= CAM_RELEASE_SIMQ;\n"
+" }\n"
+" free_hcb(hcb); /* also removes hcb from any internal lists */\n"
+" }\n"
+" ccb->ccb_h.status = status |\n"
+" (ccb->ccb_h.status & ~(CAM_STATUS_MASK|CAM_SIM_QUEUED));\n"
+" xpt_done(ccb);\n"
+" }\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:579
+#, no-wrap
+msgid "_XPT_RESET_DEV_ - send the SCSI \"BUS DEVICE RESET\" message to a device"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:584
+msgid ""
+"There is no data transferred in CCB except the header and the most "
+"interesting argument of it is target_id. Depending on the controller "
+"hardware a hardware control block just like for the XPT_SCSI_IO request may "
+"be constructed (see XPT_SCSI_IO request description) and sent to the "
+"controller or the SCSI controller may be immediately programmed to send this "
+"RESET message to the device or this request may be just not supported (and "
+"return the status `CAM_REQ_INVALID`). Also on completion of the request all "
+"the disconnected transactions for this target must be aborted (probably in "
+"the interrupt routine)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:587
+msgid ""
+"Also all the current negotiations for the target are lost on reset, so they "
+"might be cleaned too. Or they clearing may be deferred, because anyway the "
+"target would request re-negotiation on the next transaction."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:588
+#, no-wrap
+msgid "_XPT_RESET_BUS_ - send the RESET signal to the SCSI bus"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:591
+msgid ""
+"No arguments are passed in the CCB, the only interesting argument is the "
+"SCSI bus indicated by the struct sim pointer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:593
+msgid ""
+"A minimalistic implementation would forget the SCSI negotiations for all the "
+"devices on the bus and return the status CAM_REQ_CMP."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:596
+msgid ""
+"The proper implementation would in addition actually reset the SCSI bus "
+"(possible also reset the SCSI controller) and mark all the CCBs being "
+"processed, both those in the hardware queue and those being disconnected, as "
+"done with the status CAM_SCSI_BUS_RESET. Like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:602
+#, no-wrap
+msgid ""
+" int targ, lun;\n"
+" struct xxx_hcb *h, *hh;\n"
+" struct ccb_trans_settings neg;\n"
+" struct cam_path *path;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:608
+#, no-wrap
+msgid ""
+" /* The SCSI bus reset may take a long time, in this case its completion\n"
+" * should be checked by interrupt or timeout. But for simplicity\n"
+" * we assume here that it is really fast.\n"
+" */\n"
+" reset_scsi_bus(softc);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:614
+#, no-wrap
+msgid ""
+" /* drop all enqueued CCBs */\n"
+" for (h = softc->first_queued_hcb; h != NULL; h = hh) {\n"
+" hh = h->next;\n"
+" free_hcb_and_ccb_done(h, h->ccb, CAM_SCSI_BUS_RESET);\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:620
+#, no-wrap
+msgid ""
+" /* the clean values of negotiations to report */\n"
+" neg.bus_width = 8;\n"
+" neg.sync_period = neg.sync_offset = 0;\n"
+" neg.valid = (CCB_TRANS_BUS_WIDTH_VALID\n"
+" | CCB_TRANS_SYNC_RATE_VALID | CCB_TRANS_SYNC_OFFSET_VALID);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:624
+#, no-wrap
+msgid ""
+" /* drop all disconnected CCBs and clean negotiations */\n"
+" for (targ=0; targ <= OUR_MAX_SUPPORTED_TARGET; targ++) {\n"
+" clean_negotiations(softc, targ);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:632
+#, no-wrap
+msgid ""
+" /* report the event if possible */\n"
+" if (xpt_create_path(&path, /*periph*/NULL,\n"
+" cam_sim_path(sim), targ,\n"
+" CAM_LUN_WILDCARD) == CAM_REQ_CMP) {\n"
+" xpt_async(AC_TRANSFER_NEG, path, &neg);\n"
+" xpt_free_path(path);\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:639
+#, no-wrap
+msgid ""
+" for (lun=0; lun <= OUR_MAX_SUPPORTED_LUN; lun++)\n"
+" for (h = softc->first_discon_hcb[targ][lun]; h != NULL; h = hh) {\n"
+" hh=h->next;\n"
+" free_hcb_and_ccb_done(h, h->ccb, CAM_SCSI_BUS_RESET);\n"
+" }\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:642
+#, no-wrap
+msgid ""
+" ccb->ccb_h.status = CAM_REQ_CMP;\n"
+" xpt_done(ccb);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:646
+#, no-wrap
+msgid ""
+" /* report the event */\n"
+" xpt_async(AC_BUS_RESET, softc->wpath, NULL);\n"
+" return;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:649
+msgid ""
+"Implementing the SCSI bus reset as a function may be a good idea because it "
+"would be re-used by the timeout function as a last resort if the things go "
+"wrong."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:650
+#, no-wrap
+msgid "_XPT_ABORT_ - abort the specified CCB"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:654
+msgid ""
+"The arguments are transferred in the instance \"struct ccb_abort cab\" of "
+"the union ccb. The only argument field in it is:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:656
+msgid "_abort_ccb_ - pointer to the CCB to be aborted"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:659
+msgid ""
+"If the abort is not supported just return the status CAM_UA_ABORT. This is "
+"also the easy way to minimally implement this call, return CAM_UA_ABORT in "
+"any case."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:662
+msgid ""
+"The hard way is to implement this request honestly. First check that abort "
+"applies to a SCSI transaction:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:667
+#, no-wrap
+msgid ""
+" struct ccb *abort_ccb;\n"
+" abort_ccb = ccb->cab.abort_ccb;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:673
+#, no-wrap
+msgid ""
+" if (abort_ccb->ccb_h.func_code != XPT_SCSI_IO) {\n"
+" ccb->ccb_h.status = CAM_UA_ABORT;\n"
+" xpt_done(ccb);\n"
+" return;\n"
+" }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:677
+msgid ""
+"Then it is necessary to find this CCB in our queue. This can be done by "
+"walking the list of all our hardware control blocks in search for one "
+"associated with this CCB:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:681
+#, no-wrap
+msgid " struct xxx_hcb *hcb, *h;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:683
+#, no-wrap
+msgid " hcb = NULL;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:694
+#, no-wrap
+msgid ""
+" /* We assume that softc->first_hcb is the head of the list of all\n"
+" * HCBs associated with this bus, including those enqueued for\n"
+" * processing, being processed by hardware and disconnected ones.\n"
+" */\n"
+" for (h = softc->first_hcb; h != NULL; h = h->next) {\n"
+" if (h->ccb == abort_ccb) {\n"
+" hcb = h;\n"
+" break;\n"
+" }\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:701
+#, no-wrap
+msgid ""
+" if (hcb == NULL) {\n"
+" /* no such CCB in our queue */\n"
+" ccb->ccb_h.status = CAM_PATH_INVALID;\n"
+" xpt_done(ccb);\n"
+" return;\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:703
+#, no-wrap
+msgid " hcb=found_hcb;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:708
+msgid ""
+"Now we look at the current processing status of the HCB. It may be either "
+"sitting in the queue waiting to be sent to the SCSI bus, being transferred "
+"right now, or disconnected and waiting for the result of the command, or "
+"actually completed by hardware but not yet marked as done by software. To "
+"make sure that we do not get in any races with hardware we mark the HCB as "
+"being aborted, so that if this HCB is about to be sent to the SCSI bus the "
+"SCSI controller will see this flag and skip it."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:712
+#, no-wrap
+msgid " int hstatus;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:717
+#, no-wrap
+msgid ""
+" /* shown as a function, in case special action is needed to make\n"
+" * this flag visible to hardware\n"
+" */\n"
+" set_hcb_flags(hcb, HCB_BEING_ABORTED);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:719
+#, no-wrap
+msgid " abort_again:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:729
+#, no-wrap
+msgid ""
+" hstatus = get_hcb_status(hcb);\n"
+" switch (hstatus) {\n"
+" case HCB_SITTING_IN_QUEUE:\n"
+" remove_hcb_from_hardware_queue(hcb);\n"
+" /* FALLTHROUGH */\n"
+" case HCB_COMPLETED:\n"
+" /* this is an easy case */\n"
+" free_hcb_and_ccb_done(hcb, abort_ccb, CAM_REQ_ABORTED);\n"
+" break;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:736
+msgid ""
+"If the CCB is being transferred right now we would like to signal to the "
+"SCSI controller in some hardware-dependent way that we want to abort the "
+"current transfer. The SCSI controller would set the SCSI ATTENTION signal "
+"and when the target responds to it send an ABORT message. We also reset the "
+"timeout to make sure that the target is not sleeping forever. If the "
+"command would not get aborted in some reasonable time like 10 seconds the "
+"timeout routine would go ahead and reset the whole SCSI bus. Since the "
+"command will be aborted in some reasonable time we can just return the abort "
+"request now as successfully completed, and mark the aborted CCB as aborted "
+"(but not mark it as done yet)."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:752
+#, no-wrap
+msgid ""
+" case HCB_BEING_TRANSFERRED:\n"
+" untimeout(xxx_timeout, (caddr_t) hcb, abort_ccb->ccb_h.timeout_ch);\n"
+" abort_ccb->ccb_h.timeout_ch =\n"
+" timeout(xxx_timeout, (caddr_t) hcb, 10 * hz);\n"
+" abort_ccb->ccb_h.status = CAM_REQ_ABORTED;\n"
+" /* ask the controller to abort that HCB, then generate\n"
+" * an interrupt and stop\n"
+" */\n"
+" if (signal_hardware_to_abort_hcb_and_stop(hcb) < 0) {\n"
+" /* oops, we missed the race with hardware, this transaction\n"
+" * got off the bus before we aborted it, try again */\n"
+" goto abort_again;\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:754
+#, no-wrap
+msgid " break;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:758
+msgid ""
+"If the CCB is in the list of disconnected then set it up as an abort request "
+"and re-queue it at the front of hardware queue. Reset the timeout and "
+"report the abort request to be completed."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:772
+#, no-wrap
+msgid ""
+" case HCB_DISCONNECTED:\n"
+" untimeout(xxx_timeout, (caddr_t) hcb, abort_ccb->ccb_h.timeout_ch);\n"
+" abort_ccb->ccb_h.timeout_ch =\n"
+" timeout(xxx_timeout, (caddr_t) hcb, 10 * hz);\n"
+" put_abort_message_into_hcb(hcb);\n"
+" put_hcb_at_the_front_of_hardware_queue(hcb);\n"
+" break;\n"
+" }\n"
+" ccb->ccb_h.status = CAM_REQ_CMP;\n"
+" xpt_done(ccb);\n"
+" return;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:777
+msgid ""
+"That is all for the ABORT request, although there is one more issue. As the "
+"ABORT message cleans all the ongoing transactions on a LUN we have to mark "
+"all the other active transactions on this LUN as aborted. That should be "
+"done in the interrupt routine, after the transaction gets aborted."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:781
+msgid ""
+"Implementing the CCB abort as a function may be quite a good idea, this "
+"function can be re-used if an I/O transaction times out. The only "
+"difference would be that the timed out transaction would return the status "
+"CAM_CMD_TIMEOUT for the timed out request. Then the case XPT_ABORT would be "
+"small, like that:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:787
+#, no-wrap
+msgid ""
+" case XPT_ABORT:\n"
+" struct ccb *abort_ccb;\n"
+" abort_ccb = ccb->cab.abort_ccb;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:800
+#, no-wrap
+msgid ""
+" if (abort_ccb->ccb_h.func_code != XPT_SCSI_IO) {\n"
+" ccb->ccb_h.status = CAM_UA_ABORT;\n"
+" xpt_done(ccb);\n"
+" return;\n"
+" }\n"
+" if (xxx_abort_ccb(abort_ccb, CAM_REQ_ABORTED) < 0)\n"
+" /* no such CCB in our queue */\n"
+" ccb->ccb_h.status = CAM_PATH_INVALID;\n"
+" else\n"
+" ccb->ccb_h.status = CAM_REQ_CMP;\n"
+" xpt_done(ccb);\n"
+" return;\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:802
+#, no-wrap
+msgid "_XPT_SET_TRAN_SETTINGS_ - explicitly set values of SCSI transfer settings"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:805
+msgid ""
+"The arguments are transferred in the instance \"struct ccb_trans_setting cts"
+"\" of the union ccb:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:807
+msgid "_valid_ - a bitmask showing which settings should be updated:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:808
+msgid "_CCB_TRANS_SYNC_RATE_VALID_ - synchronous transfer rate"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:809
+msgid "_CCB_TRANS_SYNC_OFFSET_VALID_ - synchronous offset"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:810
+msgid "_CCB_TRANS_BUS_WIDTH_VALID_ - bus width"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:811
+msgid "_CCB_TRANS_DISC_VALID_ - set enable/disable disconnection"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:812
+msgid "_CCB_TRANS_TQ_VALID_ - set enable/disable tagged queuing"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:814
+msgid ""
+"_flags_ - consists of two parts, binary arguments and identification of sub-"
+"operations. The binary arguments are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:815
+msgid "_CCB_TRANS_DISC_ENB_ - enable disconnection"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:816
+msgid "_CCB_TRANS_TAG_ENB_ - enable tagged queuing"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:817
+msgid "the sub-operations are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:818
+msgid "_CCB_TRANS_CURRENT_SETTINGS_ - change the current negotiations"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:819
+msgid ""
+"_CCB_TRANS_USER_SETTINGS_ - remember the desired user values sync_period, "
+"sync_offset - self-explanatory, if sync_offset==0 then the asynchronous mode "
+"is requested bus_width - bus width, in bits (not bytes)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:824
+msgid ""
+"Two sets of negotiated parameters are supported, the user settings and the "
+"current settings. The user settings are not really used much in the SIM "
+"drivers, this is mostly just a piece of memory where the upper levels can "
+"store (and later recall) its ideas about the parameters. Setting the user "
+"parameters does not cause re-negotiation of the transfer rates. But when "
+"the SCSI controller does a negotiation it must never set the values higher "
+"than the user parameters, so it is essentially the top boundary."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:829
+msgid ""
+"The current settings are, as the name says, current. Changing them means "
+"that the parameters must be re-negotiated on the next transfer. Again, "
+"these \"new current settings\" are not supposed to be forced on the device, "
+"just they are used as the initial step of negotiations. Also they must be "
+"limited by actual capabilities of the SCSI controller: for example, if the "
+"SCSI controller has 8-bit bus and the request asks to set 16-bit wide "
+"transfers this parameter must be silently truncated to 8-bit transfers "
+"before sending it to the device."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:831
+msgid ""
+"One caveat is that the bus width and synchronous parameters are per target "
+"while the disconnection and tag enabling parameters are per lun."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:833
+msgid ""
+"The recommended implementation is to keep 3 sets of negotiated (bus width "
+"and synchronous transfer) parameters:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:835
+msgid "_user_ - the user set, as above"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:836
+msgid "_current_ - those actually in effect"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:837
+msgid "_goal_ - those requested by setting of the \"current\" parameters"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:839
+msgid "The code looks like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:845
+#, no-wrap
+msgid ""
+" struct ccb_trans_settings *cts;\n"
+" int targ, lun;\n"
+" int flags;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:857
+#, no-wrap
+msgid ""
+" cts = &ccb->cts;\n"
+" targ = ccb_h->target_id;\n"
+" lun = ccb_h->target_lun;\n"
+" flags = cts->flags;\n"
+" if (flags & CCB_TRANS_USER_SETTINGS) {\n"
+" if (flags & CCB_TRANS_SYNC_RATE_VALID)\n"
+" softc->user_sync_period[targ] = cts->sync_period;\n"
+" if (flags & CCB_TRANS_SYNC_OFFSET_VALID)\n"
+" softc->user_sync_offset[targ] = cts->sync_offset;\n"
+" if (flags & CCB_TRANS_BUS_WIDTH_VALID)\n"
+" softc->user_bus_width[targ] = cts->bus_width;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:876
+#, no-wrap
+msgid ""
+" if (flags & CCB_TRANS_DISC_VALID) {\n"
+" softc->user_tflags[targ][lun] &= ~CCB_TRANS_DISC_ENB;\n"
+" softc->user_tflags[targ][lun] |= flags & CCB_TRANS_DISC_ENB;\n"
+" }\n"
+" if (flags & CCB_TRANS_TQ_VALID) {\n"
+" softc->user_tflags[targ][lun] &= ~CCB_TRANS_TQ_ENB;\n"
+" softc->user_tflags[targ][lun] |= flags & CCB_TRANS_TQ_ENB;\n"
+" }\n"
+" }\n"
+" if (flags & CCB_TRANS_CURRENT_SETTINGS) {\n"
+" if (flags & CCB_TRANS_SYNC_RATE_VALID)\n"
+" softc->goal_sync_period[targ] =\n"
+" max(cts->sync_period, OUR_MIN_SUPPORTED_PERIOD);\n"
+" if (flags & CCB_TRANS_SYNC_OFFSET_VALID)\n"
+" softc->goal_sync_offset[targ] =\n"
+" min(cts->sync_offset, OUR_MAX_SUPPORTED_OFFSET);\n"
+" if (flags & CCB_TRANS_BUS_WIDTH_VALID)\n"
+" softc->goal_bus_width[targ] = min(cts->bus_width, OUR_BUS_WIDTH);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:889
+#, no-wrap
+msgid ""
+" if (flags & CCB_TRANS_DISC_VALID) {\n"
+" softc->current_tflags[targ][lun] &= ~CCB_TRANS_DISC_ENB;\n"
+" softc->current_tflags[targ][lun] |= flags & CCB_TRANS_DISC_ENB;\n"
+" }\n"
+" if (flags & CCB_TRANS_TQ_VALID) {\n"
+" softc->current_tflags[targ][lun] &= ~CCB_TRANS_TQ_ENB;\n"
+" softc->current_tflags[targ][lun] |= flags & CCB_TRANS_TQ_ENB;\n"
+" }\n"
+" }\n"
+" ccb->ccb_h.status = CAM_REQ_CMP;\n"
+" xpt_done(ccb);\n"
+" return;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:893
+msgid ""
+"Then when the next I/O request will be processed it will check if it has to "
+"re-negotiate, for example by calling the function target_negotiated(hcb). "
+"It can be implemented like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:901
+#, no-wrap
+msgid ""
+" int\n"
+" target_negotiated(struct xxx_hcb *hcb)\n"
+" {\n"
+" struct softc *softc = hcb->softc;\n"
+" int targ = hcb->targ;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:909
+#, no-wrap
+msgid ""
+" if (softc->current_sync_period[targ] != softc->goal_sync_period[targ]\n"
+" || softc->current_sync_offset[targ] != softc->goal_sync_offset[targ]\n"
+" || softc->current_bus_width[targ] != softc->goal_bus_width[targ])\n"
+" return 0; /* FALSE */\n"
+" else\n"
+" return 1; /* TRUE */\n"
+" }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:913
+msgid ""
+"After the values are re-negotiated the resulting values must be assigned to "
+"both current and goal parameters, so for future I/O transactions the current "
+"and goal parameters would be the same and `target_negotiated()` would return "
+"TRUE. When the card is initialized (in `xxx_attach()`) the current "
+"negotiation values must be initialized to narrow asynchronous mode, the goal "
+"and current values must be initialized to the maximal values supported by "
+"controller."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:914
+#, no-wrap
+msgid "_XPT_GET_TRAN_SETTINGS_ - get values of SCSI transfer settings"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:919
+msgid ""
+"This operations is the reverse of XPT_SET_TRAN_SETTINGS. Fill up the CCB "
+"instance \"struct ccb_trans_setting cts\" with data as requested by the "
+"flags CCB_TRANS_CURRENT_SETTINGS or CCB_TRANS_USER_SETTINGS (if both are set "
+"then the existing drivers return the current settings). Set all the bits in "
+"the valid field."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:920
+#, no-wrap
+msgid "_XPT_CALC_GEOMETRY_ - calculate logical (BIOS) geometry of the disk"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:923
+msgid ""
+"The arguments are transferred in the instance \"struct ccb_calc_geometry ccg"
+"\" of the union ccb:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:925
+msgid "_block_size_ - input, block (A.K.A sector) size in bytes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:926
+msgid "_volume_size_ - input, volume size in bytes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:927
+msgid "_cylinders_ - output, logical cylinders"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:928
+msgid "_heads_ - output, logical heads"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:929
+msgid "_secs_per_track_ - output, logical sectors per track"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:932
+msgid ""
+"If the returned geometry differs much enough from what the SCSI controller "
+"BIOS thinks and a disk on this SCSI controller is used as bootable the "
+"system may not be able to boot. The typical calculation example taken from "
+"the aic7xxx driver is:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:939
+#, no-wrap
+msgid ""
+" struct ccb_calc_geometry *ccg;\n"
+" u_int32_t size_mb;\n"
+" u_int32_t secs_per_cylinder;\n"
+" int extended;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:944
+#, no-wrap
+msgid ""
+" ccg = &ccb->ccg;\n"
+" size_mb = ccg->volume_size\n"
+" / ((1024L * 1024L) / ccg->block_size);\n"
+" extended = check_cards_EEPROM_for_extended_geometry(softc);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:957
+#, no-wrap
+msgid ""
+" if (size_mb > 1024 && extended) {\n"
+" ccg->heads = 255;\n"
+" ccg->secs_per_track = 63;\n"
+" } else {\n"
+" ccg->heads = 64;\n"
+" ccg->secs_per_track = 32;\n"
+" }\n"
+" secs_per_cylinder = ccg->heads * ccg->secs_per_track;\n"
+" ccg->cylinders = ccg->volume_size / secs_per_cylinder;\n"
+" ccb->ccb_h.status = CAM_REQ_CMP;\n"
+" xpt_done(ccb);\n"
+" return;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:962
+msgid ""
+"This gives the general idea, the exact calculation depends on the quirks of "
+"the particular BIOS. If BIOS provides no way set the \"extended translation"
+"\" flag in EEPROM this flag should normally be assumed equal to 1. Other "
+"popular geometries are:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:967
+#, no-wrap
+msgid ""
+" 128 heads, 63 sectors - Symbios controllers\n"
+" 16 heads, 63 sectors - old controllers\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:970
+msgid ""
+"Some system BIOSes and SCSI BIOSes fight with each other with variable "
+"success, for example a combination of Symbios 875/895 SCSI and Phoenix BIOS "
+"can give geometry 128/63 after power up and 255/63 after a hard reset or "
+"soft reboot."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:971
+#, no-wrap
+msgid "_XPT_PATH_INQ_ - path inquiry, in other words get the SIM driver and SCSI controller (also known as HBA - Host Bus Adapter) properties"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:974
+msgid ""
+"The properties are returned in the instance \"struct ccb_pathinq cpi\" of "
+"the union ccb:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:976
+msgid "version_num - the SIM driver version number, now all drivers use 1"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:977
+msgid "hba_inquiry - bitmask of features supported by the controller:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:978
+msgid "PI_MDP_ABLE - supports MDP message (something from SCSI3?)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:979
+msgid "PI_WIDE_32 - supports 32 bit wide SCSI"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:980
+msgid "PI_WIDE_16 - supports 16 bit wide SCSI"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:981
+msgid "PI_SDTR_ABLE - can negotiate synchronous transfer rate"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:982
+msgid "PI_LINKED_CDB - supports linked commands"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:983
+msgid "PI_TAG_ABLE - supports tagged commands"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:984
+msgid ""
+"PI_SOFT_RST - supports soft reset alternative (hard reset and soft reset are "
+"mutually exclusive within a SCSI bus)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:985
+msgid "target_sprt - flags for target mode support, 0 if unsupported"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:986
+msgid "hba_misc - miscellaneous controller features:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:987
+msgid "PIM_SCANHILO - bus scans from high ID to low ID"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:988
+msgid "PIM_NOREMOVE - removable devices not included in scan"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:989
+msgid "PIM_NOINITIATOR - initiator role not supported"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:990
+msgid "PIM_NOBUSRESET - user has disabled initial BUS RESET"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:991
+msgid ""
+"hba_eng_cnt - mysterious HBA engine count, something related to compression, "
+"now is always set to 0"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:992
+msgid "vuhba_flags - vendor-unique flags, unused now"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:993
+msgid ""
+"max_target - maximal supported target ID (7 for 8-bit bus, 15 for 16-bit "
+"bus, 127 for Fibre Channel)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:994
+msgid ""
+"max_lun - maximal supported LUN ID (7 for older SCSI controllers, 63 for "
+"newer ones)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:995
+msgid "async_flags - bitmask of installed Async handler, unused now"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:996
+msgid "hpath_id - highest Path ID in the subsystem, unused now"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:997
+msgid "unit_number - the controller unit number, cam_sim_unit(sim)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:998
+msgid "bus_id - the bus number, cam_sim_bus(sim)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:999
+msgid "initiator_id - the SCSI ID of the controller itself"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1000
+msgid ""
+"base_transfer_speed - nominal transfer speed in KB/s for asynchronous narrow "
+"transfers, equals to 3300 for SCSI"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1001
+msgid ""
+"sim_vid - SIM driver's vendor id, a zero-terminated string of maximal length "
+"SIM_IDLEN including the terminating zero"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1002
+msgid ""
+"hba_vid - SCSI controller's vendor id, a zero-terminated string of maximal "
+"length HBA_IDLEN including the terminating zero"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1003
+msgid ""
+"dev_name - device driver name, a zero-terminated string of maximal length "
+"DEV_IDLEN including the terminating zero, equal to cam_sim_name(sim)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1005
+msgid ""
+"The recommended way of setting the string fields is using strncpy, like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1009
+#, no-wrap
+msgid " strncpy(cpi->dev_name, cam_sim_name(sim), DEV_IDLEN);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1012
+msgid ""
+"After setting the values set the status to CAM_REQ_CMP and mark the CCB as "
+"done."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1014
+#, no-wrap
+msgid "Polling xxx_poll"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1028
+msgid ""
+"The poll function is used to simulate the interrupts when the interrupt "
+"subsystem is not functioning (for example, when the system has crashed and "
+"is creating the system dump). The CAM subsystem sets the proper interrupt "
+"level before calling the poll routine. So all it needs to do is to call the "
+"interrupt routine (or the other way around, the poll routine may be doing "
+"the real action and the interrupt routine would just call the poll "
+"routine). Why bother about a separate function then? This has to do with "
+"different calling conventions. The `xxx_poll` routine gets the struct "
+"cam_sim pointer as its argument while the PCI interrupt routine by common "
+"convention gets pointer to the struct `xxx_softc` and the ISA interrupt "
+"routine gets just the device unit number. So the poll routine would "
+"normally look as:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1036
+#, no-wrap
+msgid ""
+"static void\n"
+"xxx_poll(struct cam_sim *sim)\n"
+"{\n"
+" xxx_intr((struct xxx_softc *)cam_sim_softc(sim)); /* for PCI device */\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1039
+msgid "or"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1047
+#, no-wrap
+msgid ""
+"static void\n"
+"xxx_poll(struct cam_sim *sim)\n"
+"{\n"
+" xxx_intr(cam_sim_unit(sim)); /* for ISA device */\n"
+"}\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1050
+#, no-wrap
+msgid "Asynchronous Events"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1053
+msgid ""
+"If an asynchronous event callback has been set up then the callback function "
+"should be defined."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1058
+#, no-wrap
+msgid ""
+"static void\n"
+"ahc_async(void *callback_arg, u_int32_t code, struct cam_path *path, void *arg)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1061
+msgid "callback_arg - the value supplied when registering the callback"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1062
+msgid "code - identifies the type of event"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1063
+msgid "path - identifies the devices to which the event applies"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1064
+msgid "arg - event-specific argument"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1066
+msgid "Implementation for a single type of event, AC_LOST_DEVICE, looks like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1073
+#, no-wrap
+msgid ""
+" struct xxx_softc *softc;\n"
+" struct cam_sim *sim;\n"
+" int targ;\n"
+" struct ccb_trans_settings neg;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1092
+#, no-wrap
+msgid ""
+" sim = (struct cam_sim *)callback_arg;\n"
+" softc = (struct xxx_softc *)cam_sim_softc(sim);\n"
+" switch (code) {\n"
+" case AC_LOST_DEVICE:\n"
+" targ = xpt_path_target_id(path);\n"
+" if (targ <= OUR_MAX_SUPPORTED_TARGET) {\n"
+" clean_negotiations(softc, targ);\n"
+" /* send indication to CAM */\n"
+" neg.bus_width = 8;\n"
+" neg.sync_period = neg.sync_offset = 0;\n"
+" neg.valid = (CCB_TRANS_BUS_WIDTH_VALID\n"
+" | CCB_TRANS_SYNC_RATE_VALID | CCB_TRANS_SYNC_OFFSET_VALID);\n"
+" xpt_async(AC_TRANSFER_NEG, path, &neg);\n"
+" }\n"
+" break;\n"
+" default:\n"
+" break;\n"
+" }\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1095
+#, no-wrap
+msgid "Interrupts"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1098
+msgid ""
+"The exact type of the interrupt routine depends on the type of the "
+"peripheral bus (PCI, ISA and so on) to which the SCSI controller is "
+"connected."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1105
+msgid ""
+"The interrupt routines of the SIM drivers run at the interrupt level "
+"splcam. So `splcam()` should be used in the driver to synchronize activity "
+"between the interrupt routine and the rest of the driver (for a "
+"multiprocessor-aware driver things get yet more interesting but we ignore "
+"this case here). The pseudo-code in this document happily ignores the "
+"problems of synchronization. The real code must not ignore them. A simple-"
+"minded approach is to set `splcam()` on the entry to the other routines and "
+"reset it on return thus protecting them by one big critical section. To "
+"make sure that the interrupt level will be always restored a wrapper "
+"function can be defined, like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1116
+#, no-wrap
+msgid ""
+" static void\n"
+" xxx_action(struct cam_sim *sim, union ccb *ccb)\n"
+" {\n"
+" int s;\n"
+" s = splcam();\n"
+" xxx_action1(sim, ccb);\n"
+" splx(s);\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1122
+#, no-wrap
+msgid ""
+" static void\n"
+" xxx_action1(struct cam_sim *sim, union ccb *ccb)\n"
+" {\n"
+" ... process the request ...\n"
+" }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1126
+msgid ""
+"This approach is simple and robust but the problem with it is that "
+"interrupts may get blocked for a relatively long time and this would "
+"negatively affect the system's performance. On the other hand the functions "
+"of the `spl()` family have rather high overhead, so vast amount of tiny "
+"critical sections may not be good either."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1129
+msgid ""
+"The conditions handled by the interrupt routine and the details depend very "
+"much on the hardware. We consider the set of \"typical\" conditions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1134
+msgid ""
+"First, we check if a SCSI reset was encountered on the bus (probably caused "
+"by another SCSI controller on the same SCSI bus). If so we drop all the "
+"enqueued and disconnected requests, report the events and re-initialize our "
+"SCSI controller. It is important that during this initialization the "
+"controller will not issue another reset or else two controllers on the same "
+"SCSI bus could ping-pong resets forever. The case of fatal controller error/"
+"hang could be handled in the same place, but it will probably need also "
+"sending RESET signal to the SCSI bus to reset the status of the connections "
+"with the SCSI devices."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1140
+#, no-wrap
+msgid ""
+" int fatal=0;\n"
+" struct ccb_trans_settings neg;\n"
+" struct cam_path *path;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1145
+#, no-wrap
+msgid ""
+" if (detected_scsi_reset(softc)\n"
+" || (fatal = detected_fatal_controller_error(softc))) {\n"
+" int targ, lun;\n"
+" struct xxx_hcb *h, *hh;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1151
+#, no-wrap
+msgid ""
+" /* drop all enqueued CCBs */\n"
+" for(h = softc->first_queued_hcb; h != NULL; h = hh) {\n"
+" hh = h->next;\n"
+" free_hcb_and_ccb_done(h, h->ccb, CAM_SCSI_BUS_RESET);\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1157
+#, no-wrap
+msgid ""
+" /* the clean values of negotiations to report */\n"
+" neg.bus_width = 8;\n"
+" neg.sync_period = neg.sync_offset = 0;\n"
+" neg.valid = (CCB_TRANS_BUS_WIDTH_VALID\n"
+" | CCB_TRANS_SYNC_RATE_VALID | CCB_TRANS_SYNC_OFFSET_VALID);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1161
+#, no-wrap
+msgid ""
+" /* drop all disconnected CCBs and clean negotiations */\n"
+" for (targ=0; targ <= OUR_MAX_SUPPORTED_TARGET; targ++) {\n"
+" clean_negotiations(softc, targ);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1169
+#, no-wrap
+msgid ""
+" /* report the event if possible */\n"
+" if (xpt_create_path(&path, /*periph*/NULL,\n"
+" cam_sim_path(sim), targ,\n"
+" CAM_LUN_WILDCARD) == CAM_REQ_CMP) {\n"
+" xpt_async(AC_TRANSFER_NEG, path, &neg);\n"
+" xpt_free_path(path);\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1179
+#, no-wrap
+msgid ""
+" for (lun=0; lun <= OUR_MAX_SUPPORTED_LUN; lun++)\n"
+" for (h = softc->first_discon_hcb[targ][lun]; h != NULL; h = hh) {\n"
+" hh=h->next;\n"
+" if (fatal)\n"
+" free_hcb_and_ccb_done(h, h->ccb, CAM_UNREC_HBA_ERROR);\n"
+" else\n"
+" free_hcb_and_ccb_done(h, h->ccb, CAM_SCSI_BUS_RESET);\n"
+" }\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1182
+#, no-wrap
+msgid ""
+" /* report the event */\n"
+" xpt_async(AC_BUS_RESET, softc->wpath, NULL);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1196
+#, no-wrap
+msgid ""
+" /* re-initialization may take a lot of time, in such case\n"
+" * its completion should be signaled by another interrupt or\n"
+" * checked on timeout - but for simplicity we assume here that\n"
+" * it is really fast\n"
+" */\n"
+" if (!fatal) {\n"
+" reinitialize_controller_without_scsi_reset(softc);\n"
+" } else {\n"
+" reinitialize_controller_with_scsi_reset(softc);\n"
+" }\n"
+" schedule_next_hcb(softc);\n"
+" return;\n"
+" }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1201
+msgid ""
+"If interrupt is not caused by a controller-wide condition then probably "
+"something has happened to the current hardware control block. Depending on "
+"the hardware there may be other non-HCB-related events, we just do not "
+"consider them here. Then we analyze what happened to this HCB:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1209
+#, no-wrap
+msgid ""
+" struct xxx_hcb *hcb, *h, *hh;\n"
+" int hcb_status, scsi_status;\n"
+" int ccb_status;\n"
+" int targ;\n"
+" int lun_to_freeze;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1218
+#, no-wrap
+msgid ""
+" hcb = get_current_hcb(softc);\n"
+" if (hcb == NULL) {\n"
+" /* either stray interrupt or something went very wrong\n"
+" * or this is something hardware-dependent\n"
+" */\n"
+" handle as necessary;\n"
+" return;\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1221
+#, no-wrap
+msgid ""
+" targ = hcb->target;\n"
+" hcb_status = get_status_of_current_hcb(softc);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1224
+msgid ""
+"First we check if the HCB has completed and if so we check the returned SCSI "
+"status."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1229
+#, no-wrap
+msgid ""
+" if (hcb_status == COMPLETED) {\n"
+" scsi_status = get_completion_status(hcb);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1232
+msgid ""
+"Then look if this status is related to the REQUEST SENSE command and if so "
+"handle it in a simple way."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1246
+#, no-wrap
+msgid ""
+" if (hcb->flags & DOING_AUTOSENSE) {\n"
+" if (scsi_status == GOOD) { /* autosense was successful */\n"
+" hcb->ccb->ccb_h.status |= CAM_AUTOSNS_VALID;\n"
+" free_hcb_and_ccb_done(hcb, hcb->ccb, CAM_SCSI_STATUS_ERROR);\n"
+" } else {\n"
+" autosense_failed:\n"
+" free_hcb_and_ccb_done(hcb, hcb->ccb, CAM_AUTOSENSE_FAIL);\n"
+" }\n"
+" schedule_next_hcb(softc);\n"
+" return;\n"
+" }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1250
+msgid ""
+"Else the command itself has completed, pay more attention to details. If "
+"auto-sense is not disabled for this CCB and the command has failed with "
+"sense data then run REQUEST SENSE command to receive that data."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1255
+#, no-wrap
+msgid ""
+" hcb->ccb->csio.scsi_status = scsi_status;\n"
+" calculate_residue(hcb);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1272
+#, no-wrap
+msgid ""
+" if ((hcb->ccb->ccb_h.flags & CAM_DIS_AUTOSENSE)==0\n"
+" && (scsi_status == CHECK_CONDITION\n"
+" || scsi_status == COMMAND_TERMINATED)) {\n"
+" /* start auto-SENSE */\n"
+" hcb->flags |= DOING_AUTOSENSE;\n"
+" setup_autosense_command_in_hcb(hcb);\n"
+" restart_current_hcb(softc);\n"
+" return;\n"
+" }\n"
+" if (scsi_status == GOOD)\n"
+" free_hcb_and_ccb_done(hcb, hcb->ccb, CAM_REQ_CMP);\n"
+" else\n"
+" free_hcb_and_ccb_done(hcb, hcb->ccb, CAM_SCSI_STATUS_ERROR);\n"
+" schedule_next_hcb(softc);\n"
+" return;\n"
+" }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1275
+msgid ""
+"One typical thing would be negotiation events: negotiation messages received "
+"from a SCSI target (in answer to our negotiation attempt or by target's "
+"initiative) or the target is unable to negotiate (rejects our negotiation "
+"messages or does not answer them)."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1291
+#, no-wrap
+msgid ""
+" switch (hcb_status) {\n"
+" case TARGET_REJECTED_WIDE_NEG:\n"
+" /* revert to 8-bit bus */\n"
+" softc->current_bus_width[targ] = softc->goal_bus_width[targ] = 8;\n"
+" /* report the event */\n"
+" neg.bus_width = 8;\n"
+" neg.valid = CCB_TRANS_BUS_WIDTH_VALID;\n"
+" xpt_async(AC_TRANSFER_NEG, hcb->ccb.ccb_h.path_id, &neg);\n"
+" continue_current_hcb(softc);\n"
+" return;\n"
+" case TARGET_ANSWERED_WIDE_NEG:\n"
+" {\n"
+" int wd;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1297
+#, no-wrap
+msgid ""
+" wd = get_target_bus_width_request(softc);\n"
+" if (wd <= softc->goal_bus_width[targ]) {\n"
+" /* answer is acceptable */\n"
+" softc->current_bus_width[targ] =\n"
+" softc->goal_bus_width[targ] = neg.bus_width = wd;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1310
+#, no-wrap
+msgid ""
+" /* report the event */\n"
+" neg.valid = CCB_TRANS_BUS_WIDTH_VALID;\n"
+" xpt_async(AC_TRANSFER_NEG, hcb->ccb.ccb_h.path_id, &neg);\n"
+" } else {\n"
+" prepare_reject_message(hcb);\n"
+" }\n"
+" }\n"
+" continue_current_hcb(softc);\n"
+" return;\n"
+" case TARGET_REQUESTED_WIDE_NEG:\n"
+" {\n"
+" int wd;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1314
+#, no-wrap
+msgid ""
+" wd = get_target_bus_width_request(softc);\n"
+" wd = min (wd, OUR_BUS_WIDTH);\n"
+" wd = min (wd, softc->user_bus_width[targ]);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1319
+#, no-wrap
+msgid ""
+" if (wd != softc->current_bus_width[targ]) {\n"
+" /* the bus width has changed */\n"
+" softc->current_bus_width[targ] =\n"
+" softc->goal_bus_width[targ] = neg.bus_width = wd;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1329
+#, no-wrap
+msgid ""
+" /* report the event */\n"
+" neg.valid = CCB_TRANS_BUS_WIDTH_VALID;\n"
+" xpt_async(AC_TRANSFER_NEG, hcb->ccb.ccb_h.path_id, &neg);\n"
+" }\n"
+" prepare_width_nego_rsponse(hcb, wd);\n"
+" }\n"
+" continue_current_hcb(softc);\n"
+" return;\n"
+" }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1333
+msgid ""
+"Then we handle any errors that could have happened during auto-sense in the "
+"same simple-minded way as before. Otherwise we look closer at the details "
+"again."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1338
+#, no-wrap
+msgid ""
+" if (hcb->flags & DOING_AUTOSENSE)\n"
+" goto autosense_failed;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1340
+#, no-wrap
+msgid " switch (hcb_status) {\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1344
+msgid ""
+"The next event we consider is unexpected disconnect. Which is considered "
+"normal after an ABORT or BUS DEVICE RESET message and abnormal in other "
+"cases."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1360
+#, no-wrap
+msgid ""
+" case UNEXPECTED_DISCONNECT:\n"
+" if (requested_abort(hcb)) {\n"
+" /* abort affects all commands on that target+LUN, so\n"
+" * mark all disconnected HCBs on that target+LUN as aborted too\n"
+" */\n"
+" for (h = softc->first_discon_hcb[hcb->target][hcb->lun];\n"
+" h != NULL; h = hh) {\n"
+" hh=h->next;\n"
+" free_hcb_and_ccb_done(h, h->ccb, CAM_REQ_ABORTED);\n"
+" }\n"
+" ccb_status = CAM_REQ_ABORTED;\n"
+" } else if (requested_bus_device_reset(hcb)) {\n"
+" int lun;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1364
+#, no-wrap
+msgid ""
+" /* reset affects all commands on that target, so\n"
+" * mark all disconnected HCBs on that target+LUN as reset\n"
+" */\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1371
+#, no-wrap
+msgid ""
+" for (lun=0; lun <= OUR_MAX_SUPPORTED_LUN; lun++)\n"
+" for (h = softc->first_discon_hcb[hcb->target][lun];\n"
+" h != NULL; h = hh) {\n"
+" hh=h->next;\n"
+" free_hcb_and_ccb_done(h, h->ccb, CAM_SCSI_BUS_RESET);\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1374
+#, no-wrap
+msgid ""
+" /* send event */\n"
+" xpt_async(AC_SENT_BDR, hcb->ccb->ccb_h.path_id, NULL);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1385
+#, no-wrap
+msgid ""
+" /* this was the CAM_RESET_DEV request itself, it is completed */\n"
+" ccb_status = CAM_REQ_CMP;\n"
+" } else {\n"
+" calculate_residue(hcb);\n"
+" ccb_status = CAM_UNEXP_BUSFREE;\n"
+" /* request the further code to freeze the queue */\n"
+" hcb->ccb->ccb_h.status |= CAM_DEV_QFRZN;\n"
+" lun_to_freeze = hcb->lun;\n"
+" }\n"
+" break;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1388
+msgid ""
+"If the target refuses to accept tags we notify CAM about that and return "
+"back all commands for this LUN:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1396
+#, no-wrap
+msgid ""
+" case TAGS_REJECTED:\n"
+" /* report the event */\n"
+" neg.flags = 0 & ~CCB_TRANS_TAG_ENB;\n"
+" neg.valid = CCB_TRANS_TQ_VALID;\n"
+" xpt_async(AC_TRANSFER_NEG, hcb->ccb.ccb_h.path_id, &neg);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1402
+#, no-wrap
+msgid ""
+" ccb_status = CAM_MSG_REJECT_REC;\n"
+" /* request the further code to freeze the queue */\n"
+" hcb->ccb->ccb_h.status |= CAM_DEV_QFRZN;\n"
+" lun_to_freeze = hcb->lun;\n"
+" break;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1405
+msgid ""
+"Then we check a number of other conditions, with processing basically "
+"limited to setting the CCB status:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1429
+#, no-wrap
+msgid ""
+" case SELECTION_TIMEOUT:\n"
+" ccb_status = CAM_SEL_TIMEOUT;\n"
+" /* request the further code to freeze the queue */\n"
+" hcb->ccb->ccb_h.status |= CAM_DEV_QFRZN;\n"
+" lun_to_freeze = CAM_LUN_WILDCARD;\n"
+" break;\n"
+" case PARITY_ERROR:\n"
+" ccb_status = CAM_UNCOR_PARITY;\n"
+" break;\n"
+" case DATA_OVERRUN:\n"
+" case ODD_WIDE_TRANSFER:\n"
+" ccb_status = CAM_DATA_RUN_ERR;\n"
+" break;\n"
+" default:\n"
+" /* all other errors are handled in a generic way */\n"
+" ccb_status = CAM_REQ_CMP_ERR;\n"
+" /* request the further code to freeze the queue */\n"
+" hcb->ccb->ccb_h.status |= CAM_DEV_QFRZN;\n"
+" lun_to_freeze = CAM_LUN_WILDCARD;\n"
+" break;\n"
+" }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1432
+msgid ""
+"Then we check if the error was serious enough to freeze the input queue "
+"until it gets proceeded and do so if it is:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1438
+#, no-wrap
+msgid ""
+" if (hcb->ccb->ccb_h.status & CAM_DEV_QFRZN) {\n"
+" /* freeze the queue */\n"
+" xpt_freeze_devq(ccb->ccb_h.path, /*count*/1);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1440
+#, no-wrap
+msgid " /* re-queue all commands for this target/LUN back to CAM */\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1443
+#, no-wrap
+msgid ""
+" for (h = softc->first_queued_hcb; h != NULL; h = hh) {\n"
+" hh = h->next;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1452
+#, no-wrap
+msgid ""
+" if (targ == h->targ\n"
+" && (lun_to_freeze == CAM_LUN_WILDCARD || lun_to_freeze == h->lun))\n"
+" free_hcb_and_ccb_done(h, h->ccb, CAM_REQUEUE_REQ);\n"
+" }\n"
+" }\n"
+" free_hcb_and_ccb_done(hcb, hcb->ccb, ccb_status);\n"
+" schedule_next_hcb(softc);\n"
+" return;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1455
+msgid ""
+"This concludes the generic interrupt handling although specific controllers "
+"may require some additions."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1457
+#, no-wrap
+msgid "Errors Summary"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1463
+msgid ""
+"When executing an I/O request many things may go wrong. The reason of error "
+"can be reported in the CCB status with great detail. Examples of use are "
+"spread throughout this document. For completeness here is the summary of "
+"recommended responses for the typical error conditions:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1466
+msgid ""
+"_CAM_RESRC_UNAVAIL_ - some resource is temporarily unavailable and the SIM "
+"driver cannot generate an event when it will become available. An example "
+"of this resource would be some intra-controller hardware resource for which "
+"the controller does not generate an interrupt when it becomes available."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1467
+msgid "_CAM_UNCOR_PARITY_ - unrecovered parity error occurred"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1468
+msgid ""
+"_CAM_DATA_RUN_ERR_ - data overrun or unexpected data phase (going in other "
+"direction than specified in CAM_DIR_MASK) or odd transfer length for wide "
+"transfer"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1469
+msgid ""
+"_CAM_SEL_TIMEOUT_ - selection timeout occurred (target does not respond)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1470
+msgid "_CAM_CMD_TIMEOUT_ - command timeout occurred (the timeout function ran)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1471
+msgid "_CAM_SCSI_STATUS_ERROR_ - the device returned error"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1472
+msgid ""
+"_CAM_AUTOSENSE_FAIL_ - the device returned error and the REQUEST SENSE "
+"COMMAND failed"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1473
+msgid "_CAM_MSG_REJECT_REC_ - MESSAGE REJECT message was received"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1474
+msgid "_CAM_SCSI_BUS_RESET_ - received SCSI bus reset"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1475
+msgid ""
+"_CAM_REQ_CMP_ERR_ - \"impossible\" SCSI phase occurred or something else as "
+"weird or just a generic error if further detail is not available"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1476
+msgid "_CAM_UNEXP_BUSFREE_ - unexpected disconnect occurred"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1477
+msgid "_CAM_BDR_SENT_ - BUS DEVICE RESET message was sent to the target"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1478
+msgid "_CAM_UNREC_HBA_ERROR_ - unrecoverable Host Bus Adapter Error"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1479
+msgid "_CAM_REQ_TOO_BIG_ - the request was too large for this controller"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1483
+msgid ""
+"_CAM_REQUEUE_REQ_ - this request should be re-queued to preserve transaction "
+"ordering. This typically occurs when the SIM recognizes an error that "
+"should freeze the queue and must place other queued requests for the target "
+"at the sim level back into the XPT queue. Typical cases of such errors are "
+"selection timeouts, command timeouts and other like conditions. In such "
+"cases the troublesome command returns the status indicating the error, the "
+"and the other commands which have not be sent to the bus yet get re-queued."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1484
+msgid ""
+"_CAM_LUN_INVALID_ - the LUN ID in the request is not supported by the SCSI "
+"controller"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1485
+msgid ""
+"_CAM_TID_INVALID_ - the target ID in the request is not supported by the "
+"SCSI controller"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1487
+#, no-wrap
+msgid "Timeout Handling"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1495
+msgid ""
+"When the timeout for an HCB expires that request should be aborted, just "
+"like with an XPT_ABORT request. The only difference is that the returned "
+"status of aborted request should be CAM_CMD_TIMEOUT instead of "
+"CAM_REQ_ABORTED (that is why implementation of the abort better be done as a "
+"function). But there is one more possible problem: what if the abort "
+"request itself will get stuck? In this case the SCSI bus should be reset, "
+"just like with an XPT_RESET_BUS request (and the idea about implementing it "
+"as a function called from both places applies here too). Also we should "
+"reset the whole SCSI bus if a device reset request got stuck. So after all "
+"the timeout function would look like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1504
+#, no-wrap
+msgid ""
+"static void\n"
+"xxx_timeout(void *arg)\n"
+"{\n"
+" struct xxx_hcb *hcb = (struct xxx_hcb *)arg;\n"
+" struct xxx_softc *softc;\n"
+" struct ccb_hdr *ccb_h;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1507
+#, no-wrap
+msgid ""
+" softc = hcb->softc;\n"
+" ccb_h = &hcb->ccb->ccb_h;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1514
+#, no-wrap
+msgid ""
+" if (hcb->flags & HCB_BEING_ABORTED || ccb_h->func_code == XPT_RESET_DEV) {\n"
+" xxx_reset_bus(softc);\n"
+" } else {\n"
+" xxx_abort_ccb(hcb->ccb, CAM_CMD_TIMEOUT);\n"
+" }\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:1519
+msgid ""
+"When we abort a request all the other disconnected requests to the same "
+"target/LUN get aborted too. So there appears a question, should we return "
+"them with status CAM_REQ_ABORTED or CAM_CMD_TIMEOUT? The current drivers use "
+"CAM_CMD_TIMEOUT. This seems logical because if one request got timed out "
+"then probably something really bad is happening to the device, so if they "
+"would not be disturbed they would time out by themselves."
+msgstr ""
diff --git a/documentation/content/en/books/arch-handbook/smp/_index.adoc b/documentation/content/en/books/arch-handbook/smp/_index.adoc
index 5336f5fb73..8419661da6 100644
--- a/documentation/content/en/books/arch-handbook/smp/_index.adoc
+++ b/documentation/content/en/books/arch-handbook/smp/_index.adoc
@@ -6,7 +6,7 @@ description: SMPng Design Document
tags: ["SMPng", "introduction", "locks"]
showBookMenu: true
weight: 9
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/smp/"
---
[[smp]]
diff --git a/documentation/content/en/books/arch-handbook/smp/_index.po b/documentation/content/en/books/arch-handbook/smp/_index.po
new file mode 100644
index 0000000000..ed0bdf9bac
--- /dev/null
+++ b/documentation/content/en/books/arch-handbook/smp/_index.po
@@ -0,0 +1,1395 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:20-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:1
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:13
+#, no-wrap
+msgid "SMPng Design Document"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:1
+#, no-wrap
+msgid "Chapter 8. SMPng Design Document"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:51
+#, no-wrap
+msgid "Introduction"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:54
+msgid ""
+"This document presents the current design and implementation of the SMPng "
+"Architecture. First, the basic primitives and tools are introduced. Next, a "
+"general architecture for the FreeBSD kernel's synchronization and execution "
+"model is laid out. Then, locking strategies for specific subsystems are "
+"discussed, documenting the approaches taken to introduce fine-grained "
+"synchronization and parallelism for each subsystem. Finally, detailed "
+"implementation notes are provided to motivate design choices, and make the "
+"reader aware of important implications involving the use of specific "
+"primitives."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:56
+msgid ""
+"This document is a work-in-progress, and will be updated to reflect on-going "
+"design and implementation activities associated with the SMPng Project. Many "
+"sections currently exist only in outline form, but will be fleshed out as "
+"work proceeds. Updates or suggestions regarding the document may be directed "
+"to the document editors."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:58
+msgid ""
+"The goal of SMPng is to allow concurrency in the kernel. The kernel is "
+"basically one rather large and complex program. To make the kernel multi-"
+"threaded we use some of the same tools used to make other programs multi-"
+"threaded. These include mutexes, shared/exclusive locks, semaphores, and "
+"condition variables. For the definitions of these and other SMP-related "
+"terms, please see the <<smp-glossary>> section of this article."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:60
+#, no-wrap
+msgid "Basic Tools and Locking Fundamentals"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:62
+#, no-wrap
+msgid "Atomic Instructions and Memory Barriers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:65
+msgid ""
+"There are several existing treatments of memory barriers and atomic "
+"instructions, so this section will not include a lot of detail. To put it "
+"simply, one can not go around reading variables without a lock if a lock is "
+"used to protect writes to that variable. This becomes obvious when you "
+"consider that memory barriers simply determine relative order of memory "
+"operations; they do not make any guarantee about timing of memory "
+"operations. That is, a memory barrier does not force the contents of a CPU's "
+"local cache or store buffer to flush. Instead, the memory barrier at lock "
+"release simply ensures that all writes to the protected data will be visible "
+"to other CPU's or devices if the write to release the lock is visible. The "
+"CPU is free to keep that data in its cache or store buffer as long as it "
+"wants. However, if another CPU performs an atomic instruction on the same "
+"datum, the first CPU must guarantee that the updated value is made visible "
+"to the second CPU along with any other operations that memory barriers may "
+"require."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:67
+msgid ""
+"For example, assuming a simple model where data is considered visible when "
+"it is in main memory (or a global cache), when an atomic instruction is "
+"triggered on one CPU, other CPU's store buffers and caches must flush any "
+"writes to that same cache line along with any pending operations behind a "
+"memory barrier."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:69
+msgid ""
+"This requires one to take special care when using an item protected by "
+"atomic instructions. For example, in the sleep mutex implementation, we have "
+"to use an `atomic_cmpset` rather than an `atomic_set` to turn on the "
+"`MTX_CONTESTED` bit. The reason is that we read the value of `mtx_lock` into "
+"a variable and then make a decision based on that read. However, the value "
+"we read may be stale, or it may change while we are making our decision. "
+"Thus, when the `atomic_set` executed, it may end up setting the bit on "
+"another value than the one we made the decision on. Thus, we have to use an "
+"`atomic_cmpset` to set the value only if the value we made the decision on "
+"is up-to-date and valid."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:71
+msgid ""
+"Finally, atomic instructions only allow one item to be updated or read. If "
+"one needs to atomically update several items, then a lock must be used "
+"instead. For example, if two counters must be read and have values that are "
+"consistent relative to each other, then those counters must be protected by "
+"a lock rather than by separate atomic instructions."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:72
+#, no-wrap
+msgid "Read Locks Versus Write Locks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:75
+msgid ""
+"Read locks do not need to be as strong as write locks. Both types of locks "
+"need to ensure that the data they are accessing is not stale. However, only "
+"write access requires exclusive access. Multiple threads can safely read a "
+"value. Using different types of locks for reads and writes can be "
+"implemented in a number of ways."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:77
+msgid ""
+"First, sx locks can be used in this manner by using an exclusive lock when "
+"writing and a shared lock when reading. This method is quite straightforward."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:79
+msgid ""
+"A second method is a bit more obscure. You can protect a datum with multiple "
+"locks. Then for reading that data you simply need to have a read lock of one "
+"of the locks. However, to write to the data, you need to have a write lock "
+"of all of the locks. This can make writing rather expensive but can be "
+"useful when data is accessed in various ways. For example, the parent "
+"process pointer is protected by both the `proctree_lock` sx lock and the per-"
+"process mutex. Sometimes the proc lock is easier as we are just checking to "
+"see who a parent of a process is that we already have locked. However, other "
+"places such as `inferior` need to walk the tree of processes via parent "
+"pointers and locking each process would be prohibitive as well as a pain to "
+"guarantee that the condition you are checking remains valid for both the "
+"check and the actions taken as a result of the check."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:80
+#, no-wrap
+msgid "Locking Conditions and Results"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:83
+msgid ""
+"If you need a lock to check the state of a variable so that you can take an "
+"action based on the state you read, you can not just hold the lock while "
+"reading the variable and then drop the lock before you act on the value you "
+"read. Once you drop the lock, the variable can change rendering your "
+"decision invalid. Thus, you must hold the lock both while reading the "
+"variable and while performing the action as a result of the test."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:85
+#, no-wrap
+msgid "General Architecture and Design"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:87
+#, no-wrap
+msgid "Interrupt Handling"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:90
+msgid ""
+"Following the pattern of several other multi-threaded UNIX(R) kernels, "
+"FreeBSD deals with interrupt handlers by giving them their own thread "
+"context. Providing a context for interrupt handlers allows them to block on "
+"locks. To help avoid latency, however, interrupt threads run at real-time "
+"kernel priority. Thus, interrupt handlers should not execute for very long "
+"to avoid starving other kernel threads. In addition, since multiple handlers "
+"may share an interrupt thread, interrupt handlers should not sleep or use a "
+"sleepable lock to avoid starving another interrupt handler."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:92
+msgid ""
+"The interrupt threads currently in FreeBSD are referred to as heavyweight "
+"interrupt threads. They are called this because switching to an interrupt "
+"thread involves a full context switch. In the initial implementation, the "
+"kernel was not preemptive and thus interrupts that interrupted a kernel "
+"thread would have to wait until the kernel thread blocked or returned to "
+"userland before they would have an opportunity to run."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:94
+msgid ""
+"To deal with the latency problems, the kernel in FreeBSD has been made "
+"preemptive. Currently, we only preempt a kernel thread when we release a "
+"sleep mutex or when an interrupt comes in. However, the plan is to make the "
+"FreeBSD kernel fully preemptive as described below."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:96
+msgid ""
+"Not all interrupt handlers execute in a thread context. Instead, some "
+"handlers execute directly in primary interrupt context. These interrupt "
+"handlers are currently misnamed \"fast\" interrupt handlers since the "
+"`INTR_FAST` flag used in earlier versions of the kernel is used to mark "
+"these handlers. The only interrupts which currently use these types of "
+"interrupt handlers are clock interrupts and serial I/O device interrupts. "
+"Since these handlers do not have their own context, they may not acquire "
+"blocking locks and thus may only use spin mutexes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:98
+msgid ""
+"Finally, there is one optional optimization that can be added in MD code "
+"called lightweight context switches. Since an interrupt thread executes in a "
+"kernel context, it can borrow the vmspace of any process. Thus, in a "
+"lightweight context switch, the switch to the interrupt thread does not "
+"switch vmspaces but borrows the vmspace of the interrupted thread. In order "
+"to ensure that the vmspace of the interrupted thread does not disappear out "
+"from under us, the interrupted thread is not allowed to execute until the "
+"interrupt thread is no longer borrowing its vmspace. This can happen when "
+"the interrupt thread either blocks or finishes. If an interrupt thread "
+"blocks, then it will use its own context when it is made runnable again. "
+"Thus, it can release the interrupted thread."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:100
+msgid ""
+"The cons of this optimization are that they are very machine specific and "
+"complex and thus only worth the effort if their is a large performance "
+"improvement. At this point it is probably too early to tell, and in fact, "
+"will probably hurt performance as almost all interrupt handlers will "
+"immediately block on Giant and require a thread fix-up when they block. "
+"Also, an alternative method of interrupt handling has been proposed by Mike "
+"Smith that works like so:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:102
+msgid ""
+"Each interrupt handler has two parts: a predicate which runs in primary "
+"interrupt context and a handler which runs in its own thread context."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:103
+msgid ""
+"If an interrupt handler has a predicate, then when an interrupt is "
+"triggered, the predicate is run. If the predicate returns true then the "
+"interrupt is assumed to be fully handled and the kernel returns from the "
+"interrupt. If the predicate returns false or there is no predicate, then the "
+"threaded handler is scheduled to run."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:105
+msgid ""
+"Fitting light weight context switches into this scheme might prove rather "
+"complicated. Since we may want to change to this scheme at some point in the "
+"future, it is probably best to defer work on light weight context switches "
+"until we have settled on the final interrupt handling architecture and "
+"determined how light weight context switches might or might not fit into it."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:106
+#, no-wrap
+msgid "Kernel Preemption and Critical Sections"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:108
+#, no-wrap
+msgid "Kernel Preemption in a Nutshell"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:111
+msgid ""
+"Kernel preemption is fairly simple. The basic idea is that a CPU should "
+"always be doing the highest priority work available. Well, that is the ideal "
+"at least. There are a couple of cases where the expense of achieving the "
+"ideal is not worth being perfect."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:113
+msgid ""
+"Implementing full kernel preemption is very straightforward: when you "
+"schedule a thread to be executed by putting it on a run queue, you check to "
+"see if its priority is higher than the currently executing thread. If so, "
+"you initiate a context switch to that thread."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:115
+msgid ""
+"While locks can protect most data in the case of a preemption, not all of "
+"the kernel is preemption safe. For example, if a thread holding a spin mutex "
+"preempted and the new thread attempts to grab the same spin mutex, the new "
+"thread may spin forever as the interrupted thread may never get a chance to "
+"execute. Also, some code such as the code to assign an address space number "
+"for a process during `exec` on the Alpha needs to not be preempted as it "
+"supports the actual context switch code. Preemption is disabled for these "
+"code sections by using a critical section."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:116
+#, no-wrap
+msgid "Critical Sections"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:119
+msgid ""
+"The responsibility of the critical section API is to prevent context "
+"switches inside of a critical section. With a fully preemptive kernel, every "
+"`setrunqueue` of a thread other than the current thread is a preemption "
+"point. One implementation is for `critical_enter` to set a per-thread flag "
+"that is cleared by its counterpart. If `setrunqueue` is called with this "
+"flag set, it does not preempt regardless of the priority of the new thread "
+"relative to the current thread. However, since critical sections are used in "
+"spin mutexes to prevent context switches and multiple spin mutexes can be "
+"acquired, the critical section API must support nesting. For this reason the "
+"current implementation uses a nesting count instead of a single per-thread "
+"flag."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:121
+msgid ""
+"In order to minimize latency, preemptions inside of a critical section are "
+"deferred rather than dropped. If a thread that would normally be preempted "
+"to is made runnable while the current thread is in a critical section, then "
+"a per-thread flag is set to indicate that there is a pending preemption. "
+"When the outermost critical section is exited, the flag is checked. If the "
+"flag is set, then the current thread is preempted to allow the higher "
+"priority thread to run."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:123
+msgid ""
+"Interrupts pose a problem with regards to spin mutexes. If a low-level "
+"interrupt handler needs a lock, it needs to not interrupt any code needing "
+"that lock to avoid possible data structure corruption. Currently, providing "
+"this mechanism is piggybacked onto critical section API by means of the "
+"`cpu_critical_enter` and `cpu_critical_exit` functions. Currently this API "
+"disables and re-enables interrupts on all of FreeBSD's current platforms. "
+"This approach may not be purely optimal, but it is simple to understand and "
+"simple to get right. Theoretically, this second API need only be used for "
+"spin mutexes that are used in primary interrupt context. However, to make "
+"the code simpler, it is used for all spin mutexes and even all critical "
+"sections. It may be desirable to split out the MD API from the MI API and "
+"only use it in conjunction with the MI API in the spin mutex implementation. "
+"If this approach is taken, then the MD API likely would need a rename to "
+"show that it is a separate API."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:124
+#, no-wrap
+msgid "Design Tradeoffs"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:127
+msgid ""
+"As mentioned earlier, a couple of trade-offs have been made to sacrifice "
+"cases where perfect preemption may not always provide the best performance."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:129
+msgid ""
+"The first trade-off is that the preemption code does not take other CPUs "
+"into account. Suppose we have a two CPU's A and B with the priority of A's "
+"thread as 4 and the priority of B's thread as 2. If CPU B makes a thread "
+"with priority 1 runnable, then in theory, we want CPU A to switch to the new "
+"thread so that we will be running the two highest priority runnable threads. "
+"However, the cost of determining which CPU to enforce a preemption on as "
+"well as actually signaling that CPU via an IPI along with the "
+"synchronization that would be required would be enormous. Thus, the current "
+"code would instead force CPU B to switch to the higher priority thread. Note "
+"that this still puts the system in a better position as CPU B is executing a "
+"thread of priority 1 rather than a thread of priority 2."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:131
+msgid ""
+"The second trade-off limits immediate kernel preemption to real-time "
+"priority kernel threads. In the simple case of preemption defined above, a "
+"thread is always preempted immediately (or as soon as a critical section is "
+"exited) if a higher priority thread is made runnable. However, many threads "
+"executing in the kernel only execute in a kernel context for a short time "
+"before either blocking or returning to userland. Thus, if the kernel "
+"preempts these threads to run another non-realtime kernel thread, the kernel "
+"may switch out the executing thread just before it is about to sleep or "
+"execute. The cache on the CPU must then adjust to the new thread. When the "
+"kernel returns to the preempted thread, it must refill all the cache "
+"information that was lost. In addition, two extra context switches are "
+"performed that could be avoided if the kernel deferred the preemption until "
+"the first thread blocked or returned to userland. Thus, by default, the "
+"preemption code will only preempt immediately if the higher priority thread "
+"is a real-time priority thread."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:133
+msgid ""
+"Turning on full kernel preemption for all kernel threads has value as a "
+"debugging aid since it exposes more race conditions. It is especially useful "
+"on UP systems were many races are hard to simulate otherwise. Thus, there is "
+"a kernel option `FULL_PREEMPTION` to enable preemption for all kernel "
+"threads that can be used for debugging purposes."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:134
+#, no-wrap
+msgid "Thread Migration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:137
+msgid ""
+"Simply put, a thread migrates when it moves from one CPU to another. In a "
+"non-preemptive kernel this can only happen at well-defined points such as "
+"when calling `msleep` or returning to userland. However, in the preemptive "
+"kernel, an interrupt can force a preemption and possible migration at any "
+"time. This can have negative affects on per-CPU data since with the "
+"exception of `curthread` and `curpcb` the data can change whenever you "
+"migrate. Since you can potentially migrate at any time this renders "
+"unprotected per-CPU data access rather useless. Thus it is desirable to be "
+"able to disable migration for sections of code that need per-CPU data to be "
+"stable."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:139
+msgid ""
+"Critical sections currently prevent migration since they do not allow "
+"context switches. However, this may be too strong of a requirement to "
+"enforce in some cases since a critical section also effectively blocks "
+"interrupt threads on the current processor. As a result, another API has "
+"been provided to allow the current thread to indicate that if it preempted "
+"it should not migrate to another CPU."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:141
+msgid ""
+"This API is known as thread pinning and is provided by the scheduler. The "
+"API consists of two functions: `sched_pin` and `sched_unpin`. These "
+"functions manage a per-thread nesting count `td_pinned`. A thread is pinned "
+"when its nesting count is greater than zero and a thread starts off unpinned "
+"with a nesting count of zero. Each scheduler implementation is required to "
+"ensure that pinned threads are only executed on the CPU that they were "
+"executing on when the `sched_pin` was first called. Since the nesting count "
+"is only written to by the thread itself and is only read by other threads "
+"when the pinned thread is not executing but while `sched_lock` is held, then "
+"`td_pinned` does not need any locking. The `sched_pin` function increments "
+"the nesting count and `sched_unpin` decrements the nesting count. Note that "
+"these functions only operate on the current thread and bind the current "
+"thread to the CPU it is executing on at the time. To bind an arbitrary "
+"thread to a specific CPU, the `sched_bind` and `sched_unbind` functions "
+"should be used instead."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:142
+#, no-wrap
+msgid "Callouts"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:145
+msgid ""
+"The `timeout` kernel facility permits kernel services to register functions "
+"for execution as part of the `softclock` software interrupt. Events are "
+"scheduled based on a desired number of clock ticks, and callbacks to the "
+"consumer-provided function will occur at approximately the right time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:147
+msgid ""
+"The global list of pending timeout events is protected by a global spin "
+"mutex, `callout_lock`; all access to the timeout list must be performed with "
+"this mutex held. When `softclock` is woken up, it scans the list of pending "
+"timeouts for those that should fire. In order to avoid lock order reversal, "
+"the `softclock` thread will release the `callout_lock` mutex when invoking "
+"the provided `timeout` callback function. If the `CALLOUT_MPSAFE` flag was "
+"not set during registration, then Giant will be grabbed before invoking the "
+"callout, and then released afterwards. The `callout_lock` mutex will be re-"
+"grabbed before proceeding. The `softclock` code is careful to leave the list "
+"in a consistent state while releasing the mutex. If `DIAGNOSTIC` is enabled, "
+"then the time taken to execute each function is measured, and a warning is "
+"generated if it exceeds a threshold."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:149
+#, no-wrap
+msgid "Specific Locking Strategies"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:151
+#, no-wrap
+msgid "Credentials"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:154
+msgid ""
+"`struct ucred` is the kernel's internal credential structure, and is "
+"generally used as the basis for process-driven access control within the "
+"kernel. BSD-derived systems use a \"copy-on-write\" model for credential "
+"data: multiple references may exist for a credential structure, and when a "
+"change needs to be made, the structure is duplicated, modified, and then the "
+"reference replaced. Due to wide-spread caching of the credential to "
+"implement access control on open, this results in substantial memory "
+"savings. With a move to fine-grained SMP, this model also saves "
+"substantially on locking operations by requiring that modification only "
+"occur on an unshared credential, avoiding the need for explicit "
+"synchronization when consuming a known-shared credential."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:156
+msgid ""
+"Credential structures with a single reference are considered mutable; shared "
+"credential structures must not be modified or a race condition is risked. A "
+"mutex, `cr_mtxp` protects the reference count of `struct ucred` so as to "
+"maintain consistency. Any use of the structure requires a valid reference "
+"for the duration of the use, or the structure may be released out from under "
+"the illegitimate consumer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:158
+msgid ""
+"The `struct ucred` mutex is a leaf mutex and is implemented via a mutex pool "
+"for performance reasons."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:160
+msgid ""
+"Usually, credentials are used in a read-only manner for access control "
+"decisions, and in this case `td_ucred` is generally preferred because it "
+"requires no locking. When a process' credential is updated the `proc` lock "
+"must be held across the check and update operations thus avoid races. The "
+"process credential `p_ucred` must be used for check and update operations to "
+"prevent time-of-check, time-of-use races."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:162
+msgid ""
+"If system call invocations will perform access control after an update to "
+"the process credential, the value of `td_ucred` must also be refreshed to "
+"the current process value. This will prevent use of a stale credential "
+"following a change. The kernel automatically refreshes the `td_ucred` "
+"pointer in the thread structure from the process `p_ucred` whenever a "
+"process enters the kernel, permitting use of a fresh credential for kernel "
+"access control."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:163
+#, no-wrap
+msgid "File Descriptors and File Descriptor Tables"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:166
+msgid "Details to follow."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:167
+#, no-wrap
+msgid "Jail Structures"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:170
+msgid ""
+"`struct prison` stores administrative details pertinent to the maintenance "
+"of jails created using the man:jail[2] API. This includes the per-jail "
+"hostname, IP address, and related settings. This structure is reference-"
+"counted since pointers to instances of the structure are shared by many "
+"credential structures. A single mutex, `pr_mtx` protects read and write "
+"access to the reference count and all mutable variables inside the struct "
+"jail. Some variables are set only when the jail is created, and a valid "
+"reference to the `struct prison` is sufficient to read these values. The "
+"precise locking of each entry is documented via comments in [.filename]#sys/"
+"jail.h#."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:171
+#, no-wrap
+msgid "MAC Framework"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:174
+msgid ""
+"The TrustedBSD MAC Framework maintains data in a variety of kernel objects, "
+"in the form of `struct label`. In general, labels in kernel objects are "
+"protected by the same lock as the remainder of the kernel object. For "
+"example, the `v_label` label in `struct vnode` is protected by the vnode "
+"lock on the vnode."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:176
+msgid ""
+"In addition to labels maintained in standard kernel objects, the MAC "
+"Framework also maintains a list of registered and active policies. The "
+"policy list is protected by a global mutex (`mac_policy_list_lock`) and a "
+"busy count (also protected by the mutex). Since many access control checks "
+"may occur in parallel, entry to the framework for a read-only access to the "
+"policy list requires holding the mutex while incrementing (and later "
+"decrementing) the busy count. The mutex need not be held for the duration of "
+"the MAC entry operation--some operations, such as label operations on file "
+"system objects--are long-lived. To modify the policy list, such as during "
+"policy registration and de-registration, the mutex must be held and the "
+"reference count must be zero, to prevent modification of the list while it "
+"is in use."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:178
+msgid ""
+"A condition variable, `mac_policy_list_not_busy`, is available to threads "
+"that need to wait for the list to become unbusy, but this condition variable "
+"must only be waited on if the caller is holding no other locks, or a lock "
+"order violation may be possible. The busy count, in effect, acts as a form "
+"of shared/exclusive lock over access to the framework: the difference is "
+"that, unlike with an sx lock, consumers waiting for the list to become "
+"unbusy may be starved, rather than permitting lock order problems with "
+"regards to the busy count and other locks that may be held on entry to (or "
+"inside) the MAC Framework."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:179
+#, no-wrap
+msgid "Modules"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:182
+msgid ""
+"For the module subsystem there exists a single lock that is used to protect "
+"the shared data. This lock is a shared/exclusive (SX) lock and has a good "
+"chance of needing to be acquired (shared or exclusively), therefore there "
+"are a few macros that have been added to make access to the lock more easy. "
+"These macros can be located in [.filename]#sys/module.h# and are quite basic "
+"in terms of usage. The main structures protected under this lock are the "
+"`module_t` structures (when shared) and the global `modulelist_t` structure, "
+"modules. One should review the related source code in [.filename]#kern/"
+"kern_module.c# to further understand the locking strategy."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:183
+#, no-wrap
+msgid "Newbus Device Tree"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:186
+msgid ""
+"The newbus system will have one sx lock. Readers will hold a shared (read) "
+"lock (man:sx_slock[9]) and writers will hold an exclusive (write) lock (man:"
+"sx_xlock[9]). Internal functions will not do locking at all. Externally "
+"visible ones will lock as needed. Those items that do not matter if the race "
+"is won or lost will not be locked, since they tend to be read all over the "
+"place (e.g., man:device_get_softc[9]). There will be relatively few changes "
+"to the newbus data structures, so a single lock should be sufficient and not "
+"impose a performance penalty."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:187
+#, no-wrap
+msgid "Pipes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:190
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:212
+msgid "..."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:191
+#, no-wrap
+msgid "Processes and Threads"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:194
+msgid "process hierarchy"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:196
+msgid "proc locks, references"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:198
+msgid ""
+"thread-specific copies of proc entries to freeze during system calls, "
+"including td_ucred"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:200
+msgid "inter-process operations"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:202
+msgid "process groups and sessions"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:203
+#, no-wrap
+msgid "Scheduler"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:206
+msgid ""
+"Lots of references to `sched_lock` and notes pointing at specific primitives "
+"and related magic elsewhere in the document."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:207
+#, no-wrap
+msgid "Select and Poll"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:210
+msgid ""
+"The `select` and `poll` functions permit threads to block waiting on events "
+"on file descriptors--most frequently, whether or not the file descriptors "
+"are readable or writable."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:213
+#, no-wrap
+msgid "SIGIO"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:216
+msgid ""
+"The SIGIO service permits processes to request the delivery of a SIGIO "
+"signal to its process group when the read/write status of specified file "
+"descriptors changes. At most one process or process group is permitted to "
+"register for SIGIO from any given kernel object, and that process or group "
+"is referred to as the owner. Each object supporting SIGIO registration "
+"contains pointer field that is `NULL` if the object is not registered, or "
+"points to a `struct sigio` describing the registration. This field is "
+"protected by a global mutex, `sigio_lock`. Callers to SIGIO maintenance "
+"functions must pass in this field \"by reference\" so that local register "
+"copies of the field are not made when unprotected by the lock."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:218
+msgid ""
+"One `struct sigio` is allocated for each registered object associated with "
+"any process or process group, and contains back-pointers to the object, "
+"owner, signal information, a credential, and the general disposition of the "
+"registration. Each process or progress group contains a list of registered "
+"`struct sigio` structures, `p_sigiolst` for processes, and `pg_sigiolst` for "
+"process groups. These lists are protected by the process or process group "
+"locks respectively. Most fields in each `struct sigio` are constant for the "
+"duration of the registration, with the exception of the `sio_pgsigio` field "
+"which links the `struct sigio` into the process or process group list. "
+"Developers implementing new kernel objects supporting SIGIO will, in "
+"general, want to avoid holding structure locks while invoking SIGIO "
+"supporting functions, such as `fsetown` or `funsetown` to avoid defining a "
+"lock order between structure locks and the global SIGIO lock. This is "
+"generally possible through use of an elevated reference count on the "
+"structure, such as reliance on a file descriptor reference to a pipe during "
+"a pipe operation."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:219
+#, no-wrap
+msgid "Sysctl"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:222
+msgid ""
+"The `sysctl` MIB service is invoked from both within the kernel and from "
+"userland applications using a system call. At least two issues are raised in "
+"locking: first, the protection of the structures maintaining the namespace, "
+"and second, interactions with kernel variables and functions that are "
+"accessed by the sysctl interface. Since sysctl permits the direct export "
+"(and modification) of kernel statistics and configuration parameters, the "
+"sysctl mechanism must become aware of appropriate locking semantics for "
+"those variables. Currently, sysctl makes use of a single global sx lock to "
+"serialize use of `sysctl`; however, it is assumed to operate under Giant and "
+"other protections are not provided. The remainder of this section speculates "
+"on locking and semantic changes to sysctl."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:224
+msgid ""
+"Need to change the order of operations for sysctl's that update values from "
+"read old, copyin and copyout, write new to copyin, lock, read old and write "
+"new, unlock, copyout. Normal sysctl's that just copyout the old value and "
+"set a new value that they copyin may still be able to follow the old model. "
+"However, it may be cleaner to use the second model for all of the sysctl "
+"handlers to avoid lock operations."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:226
+msgid ""
+"To allow for the common case, a sysctl could embed a pointer to a mutex in "
+"the SYSCTL_FOO macros and in the struct. This would work for most sysctl's. "
+"For values protected by sx locks, spin mutexes, or other locking strategies "
+"besides a single sleep mutex, SYSCTL_PROC nodes could be used to get the "
+"locking right."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:227
+#, no-wrap
+msgid "Taskqueue"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:230
+msgid ""
+"The taskqueue's interface has two basic locks associated with it in order to "
+"protect the related shared data. The `taskqueue_queues_mutex` is meant to "
+"serve as a lock to protect the `taskqueue_queues` TAILQ. The other mutex "
+"lock associated with this system is the one in the `struct taskqueue` data "
+"structure. The use of the synchronization primitive here is to protect the "
+"integrity of the data in the `struct taskqueue`. It should be noted that "
+"there are no separate macros to assist the user in locking down his/her own "
+"work since these locks are most likely not going to be used outside of [."
+"filename]#kern/subr_taskqueue.c#."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:232
+#, no-wrap
+msgid "Implementation Notes"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:234
+#, no-wrap
+msgid "Sleep Queues"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:237
+msgid ""
+"A sleep queue is a structure that holds the list of threads asleep on a wait "
+"channel. Each thread that is not asleep on a wait channel carries a sleep "
+"queue structure around with it. When a thread blocks on a wait channel, it "
+"donates its sleep queue structure to that wait channel. Sleep queues "
+"associated with a wait channel are stored in a hash table."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:239
+msgid ""
+"The sleep queue hash table holds sleep queues for wait channels that have at "
+"least one blocked thread. Each entry in the hash table is called a "
+"sleepqueue chain. The chain contains a linked list of sleep queues and a "
+"spin mutex. The spin mutex protects the list of sleep queues as well as the "
+"contents of the sleep queue structures on the list. Only one sleep queue is "
+"associated with a given wait channel. If multiple threads block on a wait "
+"channel than the sleep queues associated with all but the first thread are "
+"stored on a list of free sleep queues in the master sleep queue. When a "
+"thread is removed from the sleep queue it is given one of the sleep queue "
+"structures from the master queue's free list if it is not the only thread "
+"asleep on the queue. The last thread is given the master sleep queue when it "
+"is resumed. Since threads may be removed from the sleep queue in a different "
+"order than they are added, a thread may depart from a sleep queue with a "
+"different sleep queue structure than the one it arrived with."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:241
+msgid ""
+"The `sleepq_lock` function locks the spin mutex of the sleep queue chain "
+"that maps to a specific wait channel. The `sleepq_lookup` function looks in "
+"the hash table for the master sleep queue associated with a given wait "
+"channel. If no master sleep queue is found, it returns `NULL`. The "
+"`sleepq_release` function unlocks the spin mutex associated with a given "
+"wait channel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:243
+msgid ""
+"A thread is added to a sleep queue via the `sleepq_add`. This function "
+"accepts the wait channel, a pointer to the mutex that protects the wait "
+"channel, a wait message description string, and a mask of flags. The sleep "
+"queue chain should be locked via `sleepq_lock` before this function is "
+"called. If no mutex protects the wait channel (or it is protected by Giant), "
+"then the mutex pointer argument should be `NULL`. The flags argument "
+"contains a type field that indicates the kind of sleep queue that the thread "
+"is being added to and a flag to indicate if the sleep is interruptible "
+"(`SLEEPQ_INTERRUPTIBLE`). Currently there are only two types of sleep "
+"queues: traditional sleep queues managed via the `msleep` and `wakeup` "
+"functions (`SLEEPQ_MSLEEP`) and condition variable sleep queues "
+"(`SLEEPQ_CONDVAR`). The sleep queue type and lock pointer argument are used "
+"solely for internal assertion checking. Code that calls `sleepq_add` should "
+"explicitly unlock any interlock protecting the wait channel after the "
+"associated sleepqueue chain has been locked via `sleepq_lock` and before "
+"blocking on the sleep queue via one of the waiting functions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:245
+msgid ""
+"A timeout for a sleep is set by invoking `sleepq_set_timeout`. The function "
+"accepts the wait channel and the timeout time as a relative tick count as "
+"its arguments. If a sleep should be interrupted by arriving signals, the "
+"`sleepq_catch_signals` function should be called as well. This function "
+"accepts the wait channel as its only parameter. If there is already a signal "
+"pending for this thread, then `sleepq_catch_signals` will return a signal "
+"number; otherwise, it will return 0."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:247
+msgid ""
+"Once a thread has been added to a sleep queue, it blocks using one of the "
+"`sleepq_wait` functions. There are four wait functions depending on whether "
+"or not the caller wishes to use a timeout or have the sleep aborted by "
+"caught signals or an interrupt from the userland thread scheduler. The "
+"`sleepq_wait` function simply waits until the current thread is explicitly "
+"resumed by one of the wakeup functions. The `sleepq_timedwait` function "
+"waits until either the thread is explicitly resumed or the timeout set by an "
+"earlier call to `sleepq_set_timeout` expires. The `sleepq_wait_sig` function "
+"waits until either the thread is explicitly resumed or its sleep is aborted. "
+"The `sleepq_timedwait_sig` function waits until either the thread is "
+"explicitly resumed, the timeout set by an earlier call to "
+"`sleepq_set_timeout` expires, or the thread's sleep is aborted. All of the "
+"wait functions accept the wait channel as their first parameter. In "
+"addition, the `sleepq_timedwait_sig` function accepts a second boolean "
+"parameter to indicate if the earlier call to `sleepq_catch_signals` found a "
+"pending signal."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:249
+msgid ""
+"If the thread is explicitly resumed or is aborted by a signal, then a value "
+"of zero is returned by the wait function to indicate a successful sleep. If "
+"the thread is resumed by either a timeout or an interrupt from the userland "
+"thread scheduler then an appropriate errno value is returned instead. Note "
+"that since `sleepq_wait` can only return 0 it does not return anything and "
+"the caller should assume a successful sleep. Also, if a thread's sleep times "
+"out and is aborted simultaneously then `sleepq_timedwait_sig` will return an "
+"error indicating that a timeout occurred. If an error value of 0 is returned "
+"and either `sleepq_wait_sig` or `sleepq_timedwait_sig` was used to block, "
+"then the function `sleepq_calc_signal_retval` should be called to check for "
+"any pending signals and calculate an appropriate return value if any are "
+"found. The signal number returned by the earlier call to "
+"`sleepq_catch_signals` should be passed as the sole argument to "
+"`sleepq_calc_signal_retval`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:251
+msgid ""
+"Threads asleep on a wait channel are explicitly resumed by the "
+"`sleepq_broadcast` and `sleepq_signal` functions. Both functions accept the "
+"wait channel from which to resume threads, a priority to raise resumed "
+"threads to, and a flags argument to indicate which type of sleep queue is "
+"being resumed. The priority argument is treated as a minimum priority. If a "
+"thread being resumed already has a higher priority (numerically lower) than "
+"the priority argument then its priority is not adjusted. The flags argument "
+"is used for internal assertions to ensure that sleep queues are not being "
+"treated as the wrong type. For example, the condition variable functions "
+"should not resume threads on a traditional sleep queue. The "
+"`sleepq_broadcast` function resumes all threads that are blocked on the "
+"specified wait channel while `sleepq_signal` only resumes the highest "
+"priority thread blocked on the wait channel. The sleep queue chain should "
+"first be locked via the `sleepq_lock` function before calling these "
+"functions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:253
+msgid ""
+"A sleeping thread may have its sleep interrupted by calling the "
+"`sleepq_abort` function. This function must be called with `sched_lock` held "
+"and the thread must be queued on a sleep queue. A thread may also be removed "
+"from a specific sleep queue via the `sleepq_remove` function. This function "
+"accepts both a thread and a wait channel as an argument and only awakens the "
+"thread if it is on the sleep queue for the specified wait channel. If the "
+"thread is not on a sleep queue or it is on a sleep queue for a different "
+"wait channel, then this function does nothing."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:254
+#, no-wrap
+msgid "Turnstiles"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:257
+msgid "Compare/contrast with sleep queues."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:259
+msgid "Lookup/wait/release. - Describe TDF_TSNOBLOCK race."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:261
+msgid "Priority propagation."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:262
+#, no-wrap
+msgid "Details of the Mutex Implementation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:265
+msgid ""
+"Should we require mutexes to be owned for mtx_destroy() since we can not "
+"safely assert that they are unowned by anyone else otherwise?"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:266
+#, no-wrap
+msgid "Spin Mutexes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:269
+msgid "Use a critical section..."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:270
+#, no-wrap
+msgid "Sleep Mutexes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:273
+msgid "Describe the races with contested mutexes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:275
+msgid ""
+"Why it is safe to read mtx_lock of a contested mutex when holding the "
+"turnstile chain lock."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:276
+#, no-wrap
+msgid "Witness"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:279
+msgid "What does it do"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:281
+msgid "How does it work"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:283
+#, no-wrap
+msgid "Miscellaneous Topics"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:285
+#, no-wrap
+msgid "Interrupt Source and ICU Abstractions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:288
+msgid "struct isrc"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:290
+msgid "pic drivers"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:291
+#, no-wrap
+msgid "Other Random Questions/Topics"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:294
+msgid "Should we pass an interlock into `sema_wait`?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:296
+msgid "Should we have non-sleepable sx locks?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:298
+msgid "Add some info about proper use of reference counts."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:303
+#, no-wrap
+msgid "Glossary"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:306
+#, no-wrap
+msgid "atomic"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:308
+msgid ""
+"An operation is atomic if all of its effects are visible to other CPUs "
+"together when the proper access protocol is followed. In the degenerate case "
+"are atomic instructions provided directly by machine architectures. At a "
+"higher level, if several members of a structure are protected by a lock, "
+"then a set of operations are atomic if they are all performed while holding "
+"the lock without releasing the lock in between any of the operations."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:310
+msgid "See Also operation."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:311
+#, no-wrap
+msgid "block"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:313
+msgid ""
+"A thread is blocked when it is waiting on a lock, resource, or condition. "
+"Unfortunately this term is a bit overloaded as a result."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:315
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:352
+msgid "See Also sleep."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:316
+#, no-wrap
+msgid "critical section"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:318
+msgid ""
+"A section of code that is not allowed to be preempted. A critical section is "
+"entered and exited using the man:critical_enter[9] API."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:319
+#, no-wrap
+msgid "MD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:321
+msgid "Machine dependent."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:323
+msgid "See Also MI."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:324
+#, no-wrap
+msgid "memory operation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:326
+msgid "A memory operation reads and/or writes to a memory location."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:327
+#, no-wrap
+msgid "MI"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:329
+msgid "Machine independent."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:331
+msgid "See Also MD."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:332
+#, no-wrap
+msgid "operation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:334
+msgid "See memory operation."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:335
+#, no-wrap
+msgid "primary interrupt context"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:337
+msgid ""
+"Primary interrupt context refers to the code that runs when an interrupt "
+"occurs. This code can either run an interrupt handler directly or schedule "
+"an asynchronous interrupt thread to execute the interrupt handlers for a "
+"given interrupt source."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:338
+#, no-wrap
+msgid "realtime kernel thread"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:340
+msgid ""
+"A high priority kernel thread. Currently, the only realtime priority kernel "
+"threads are interrupt threads."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:342
+msgid "See Also thread."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:343
+#, no-wrap
+msgid "sleep"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:345
+msgid ""
+"A thread is asleep when it is blocked on a condition variable or a sleep "
+"queue via msleep or tsleep."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:347
+msgid "See Also block."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:348
+#, no-wrap
+msgid "sleepable lock"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:350
+msgid ""
+"A sleepable lock is a lock that can be held by a thread which is asleep. "
+"Lockmgr locks and sx locks are currently the only sleepable locks in "
+"FreeBSD. Eventually, some sx locks such as the allproc and proctree locks "
+"may become non-sleepable locks."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:353
+#, no-wrap
+msgid "thread"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:355
+msgid ""
+"A kernel thread represented by a struct thread. Threads own locks and hold a "
+"single execution context."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:356
+#, no-wrap
+msgid "wait channel"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/smp/_index.adoc:358
+msgid "A kernel virtual address that threads may sleep on."
+msgstr ""
diff --git a/documentation/content/en/books/arch-handbook/sound/_index.adoc b/documentation/content/en/books/arch-handbook/sound/_index.adoc
index 98e7f618b1..2098fa8590 100644
--- a/documentation/content/en/books/arch-handbook/sound/_index.adoc
+++ b/documentation/content/en/books/arch-handbook/sound/_index.adoc
@@ -6,7 +6,7 @@ description: FreeBSD Sound Subsystem
tags: ["Sound", "OSS", "pcm", "mixer"]
showBookMenu: true
weight: 17
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/sound/"
---
[[oss]]
diff --git a/documentation/content/en/books/arch-handbook/sound/_index.po b/documentation/content/en/books/arch-handbook/sound/_index.po
new file mode 100644
index 0000000000..dfbbf4a40a
--- /dev/null
+++ b/documentation/content/en/books/arch-handbook/sound/_index.po
@@ -0,0 +1,855 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:20-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:1
+#, no-wrap
+msgid "FreeBSD Sound Subsystem"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:1
+#, no-wrap
+msgid "Chapter 15. Sound Subsystem"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:13
+#, no-wrap
+msgid "Sound Subsystem"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:51
+#, no-wrap
+msgid "Introduction"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:54
+msgid ""
+"The FreeBSD sound subsystem cleanly separates generic sound handling issues "
+"from device-specific ones. This makes it easier to add support for new "
+"hardware."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:56
+msgid ""
+"The man:pcm[4] framework is the central piece of the sound subsystem. It "
+"mainly implements the following elements:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:58
+msgid ""
+"A system call interface (read, write, ioctls) to digitized sound and mixer "
+"functions. The ioctl command set is compatible with the legacy _OSS_ or "
+"_Voxware_ interface, allowing common multimedia applications to be ported "
+"without modification."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:59
+msgid ""
+"Common code for processing sound data (format conversions, virtual channels)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:60
+msgid ""
+"A uniform software interface to hardware-specific audio interface modules."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:61
+msgid ""
+"Additional support for some common hardware interfaces (ac97), or shared "
+"hardware-specific code (ex: ISA DMA routines)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:63
+msgid ""
+"The support for specific sound cards is implemented by hardware-specific "
+"drivers, which provide channel and mixer interfaces to plug into the generic "
+"[.filename]#pcm# code."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:65
+msgid ""
+"In this chapter, the term [.filename]#pcm# will refer to the central, common "
+"part of the sound driver, as opposed to the hardware-specific modules."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:67
+msgid ""
+"The prospective driver writer will of course want to start from an existing "
+"module and use the code as the ultimate reference. But, while the sound code "
+"is nice and clean, it is also mostly devoid of comments. This document tries "
+"to give an overview of the framework interface and answer some questions "
+"that may arise while adapting the existing code."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:69
+msgid ""
+"As an alternative, or in addition to starting from a working example, you "
+"can find a commented driver template at https://people.FreeBSD.org/~cg/"
+"template.c[ https://people.FreeBSD.org/~cg/template.c]"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:71
+#, no-wrap
+msgid "Files"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:74
+msgid ""
+"All the relevant code lives in [.filename]#/usr/src/sys/dev/sound/#, except "
+"for the public ioctl interface definitions, found in [.filename]#/usr/src/"
+"sys/sys/soundcard.h#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:76
+msgid ""
+"Under [.filename]#/usr/src/sys/dev/sound/#, the [.filename]#pcm/# directory "
+"holds the central code, while the [.filename]#pci/#, [.filename]#isa/# and [."
+"filename]#usb/# directories have the drivers for PCI and ISA boards, and for "
+"USB audio devices."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:78
+#, no-wrap
+msgid "Probing, Attaching, etc."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:81
+msgid ""
+"Sound drivers probe and attach in almost the same way as any hardware driver "
+"module. You might want to look at the crossref:isa-driver[isa-driver,ISA] or "
+"crossref:pci[pci,PCI] specific sections of the handbook for more information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:83
+msgid "However, sound drivers differ in some ways:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:85
+msgid ""
+"They declare themselves as [.filename]#pcm# class devices, with a `struct "
+"snddev_info` device private structure:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:93
+#, no-wrap
+msgid ""
+" static driver_t xxx_driver = {\n"
+" \"pcm\",\n"
+" xxx_methods,\n"
+" sizeof(struct snddev_info)\n"
+" };\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:96
+#, no-wrap
+msgid ""
+" DRIVER_MODULE(snd_xxxpci, pci, xxx_driver, pcm_devclass, 0, 0);\n"
+" MODULE_DEPEND(snd_xxxpci, snd_pcm, PCM_MINVER, PCM_PREFVER,PCM_MAXVER);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:99
+msgid ""
+"Most sound drivers need to store additional private information about their "
+"device. A private data structure is usually allocated in the attach routine. "
+"Its address is passed to [.filename]#pcm# by the calls to `pcm_register()` "
+"and `mixer_init()`. [.filename]#pcm# later passes back this address as a "
+"parameter in calls to the sound driver interfaces."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:100
+msgid ""
+"The sound driver attach routine should declare its MIXER or AC97 interface "
+"to [.filename]#pcm# by calling `mixer_init()`. For a MIXER interface, this "
+"causes in turn a call to <<xxxmixer-init,`xxxmixer_init()`>>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:101
+msgid ""
+"The sound driver attach routine declares its general CHANNEL configuration "
+"to [.filename]#pcm# by calling `pcm_register(dev, sc, nplay, nrec)`, where "
+"`sc` is the address for the device data structure, used in further calls "
+"from [.filename]#pcm#, and `nplay` and `nrec` are the number of play and "
+"record channels."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:102
+msgid ""
+"The sound driver attach routine declares each of its channel objects by "
+"calls to `pcm_addchan()`. This sets up the channel glue in [.filename]#pcm# "
+"and causes in turn a call to <<xxxchannel-init,`xxxchannel_init()`>>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:103
+msgid ""
+"The sound driver detach routine should call `pcm_unregister()` before "
+"releasing its resources."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:105
+msgid "There are two possible methods to handle non-PnP devices:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:107
+msgid ""
+"Use a `device_identify()` method (example: [.filename]#sound/isa/es1888.c#). "
+"The `device_identify()` method probes for the hardware at known addresses "
+"and, if it finds a supported device, creates a new pcm device which is then "
+"passed to probe/attach."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:108
+msgid ""
+"Use a custom kernel configuration with appropriate hints for pcm devices "
+"(example: [.filename]#sound/isa/mss.c#)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:110
+msgid ""
+"[.filename]#pcm# drivers should implement `device_suspend`, `device_resume` "
+"and `device_shutdown` routines, so that power management and module "
+"unloading function correctly."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:112
+#, no-wrap
+msgid "Interfaces"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:115
+msgid ""
+"The interface between the [.filename]#pcm# core and the sound drivers is "
+"defined in terms of <<kernel-objects,kernel objects>>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:117
+msgid ""
+"There are two main interfaces that a sound driver will usually provide: "
+"_CHANNEL_ and either _MIXER_ or _AC97_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:119
+msgid ""
+"The _AC97_ interface is a very small hardware access (register read/write) "
+"interface, implemented by drivers for hardware with an AC97 codec. In this "
+"case, the actual MIXER interface is provided by the shared AC97 code in [."
+"filename]#pcm#."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:120
+#, no-wrap
+msgid "The CHANNEL Interface"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:122
+#, no-wrap
+msgid "Common Notes for Function Parameters"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:125
+msgid ""
+"Sound drivers usually have a private data structure to describe their "
+"device, and one structure for each play and record data channel that it "
+"supports."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:127
+msgid ""
+"For all CHANNEL interface functions, the first parameter is an opaque "
+"pointer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:129
+msgid ""
+"The second parameter is a pointer to the private channel data structure, "
+"except for `channel_init()` which has a pointer to the private device "
+"structure (and returns the channel pointer for further use by [."
+"filename]#pcm#)."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:130
+#, no-wrap
+msgid "Overview of Data Transfer Operations"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:133
+msgid ""
+"For sound data transfers, the [.filename]#pcm# core and the sound drivers "
+"communicate through a shared memory area, described by a `struct snd_dbuf`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:135
+msgid ""
+"`struct snd_dbuf` is private to [.filename]#pcm#, and sound drivers obtain "
+"values of interest by calls to accessor functions (`sndbuf_getxxx()`)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:137
+msgid ""
+"The shared memory area has a size of `sndbuf_getsize()` and is divided into "
+"fixed size blocks of `sndbuf_getblksz()` bytes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:139
+msgid ""
+"When playing, the general transfer mechanism is as follows (reverse the idea "
+"for recording):"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:141
+msgid ""
+"[.filename]#pcm# initially fills up the buffer, then calls the sound "
+"driver's <<channel-trigger,`xxxchannel_trigger()`>> function with a "
+"parameter of PCMTRIG_START."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:142
+msgid ""
+"The sound driver then arranges to repeatedly transfer the whole memory area "
+"(`sndbuf_getbuf()`, `sndbuf_getsize()`) to the device, in blocks of "
+"`sndbuf_getblksz()` bytes. It calls back the `chn_intr()`[.filename]#pcm# "
+"function for each transferred block (this will typically happen at interrupt "
+"time)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:143
+msgid ""
+"`chn_intr()` arranges to copy new data to the area that was transferred to "
+"the device (now free), and make appropriate updates to the `snd_dbuf` "
+"structure."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:145
+#, no-wrap
+msgid "channel_init"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:148
+msgid ""
+"`xxxchannel_init()` is called to initialize each of the play or record "
+"channels. The calls are initiated from the sound driver attach routine. (See "
+"the <<pcm-probe-and-attach,probe and attach section>>)."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:160
+#, no-wrap
+msgid ""
+" static void *\n"
+" xxxchannel_init(kobj_t obj, void *data,\n"
+" struct snd_dbuf *b, struct pcm_channel *c, int dir) <.>\n"
+" {\n"
+" struct xxx_info *sc = data;\n"
+" struct xxx_chinfo *ch;\n"
+" ...\n"
+" return ch; <.>\n"
+" }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:163
+msgid ""
+"`b` is the address for the channel `struct snd_dbuf`. It should be "
+"initialized in the function by calling `sndbuf_alloc()`. The buffer size to "
+"use is normally a small multiple of the 'typical' unit transfer size for "
+"your device.`c` is the [.filename]#pcm# channel control structure pointer. "
+"This is an opaque object. The function should store it in the local channel "
+"structure, to be used in later calls to [.filename]#pcm# (ie: `chn_intr(c)`)."
+"`dir` indicates the channel direction (`PCMDIR_PLAY` or `PCMDIR_REC`)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:165
+msgid ""
+"The function should return a pointer to the private area used to control "
+"this channel. This will be passed as a parameter to other channel interface "
+"calls."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:166
+#, no-wrap
+msgid "channel_setformat"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:169
+msgid ""
+"`xxxchannel_setformat()` should set up the hardware for the specified "
+"channel for the specified sound format."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:179
+#, no-wrap
+msgid ""
+" static int\n"
+" xxxchannel_setformat(kobj_t obj, void *data, u_int32_t format) <.>\n"
+" {\n"
+" struct xxx_chinfo *ch = data;\n"
+" ...\n"
+" return 0;\n"
+" }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:182
+msgid ""
+"`format` is specified as an `AFMT_XXX value` ([.filename]#soundcard.h#)."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:183
+#, no-wrap
+msgid "channel_setspeed"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:186
+msgid ""
+"`xxxchannel_setspeed()` sets up the channel hardware for the specified "
+"sampling speed, and returns the possibly adjusted speed."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:196
+#, no-wrap
+msgid ""
+" static int\n"
+" xxxchannel_setspeed(kobj_t obj, void *data, u_int32_t speed)\n"
+" {\n"
+" struct xxx_chinfo *ch = data;\n"
+" ...\n"
+" return speed;\n"
+" }\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:198
+#, no-wrap
+msgid "channel_setblocksize"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:201
+msgid ""
+"`xxxchannel_setblocksize()` sets the block size, which is the size of unit "
+"transactions between [.filename]#pcm# and the sound driver, and between the "
+"sound driver and the device. Typically, this would be the number of bytes "
+"transferred before an interrupt occurs. During a transfer, the sound driver "
+"should call [.filename]#pcm#'s `chn_intr()` every time this size has been "
+"transferred."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:203
+msgid ""
+"Most sound drivers only take note of the block size here, to be used when an "
+"actual transfer will be started."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:213
+#, no-wrap
+msgid ""
+" static int\n"
+" xxxchannel_setblocksize(kobj_t obj, void *data, u_int32_t blocksize)\n"
+" {\n"
+" struct xxx_chinfo *ch = data;\n"
+" ...\n"
+" return blocksize; <.>\n"
+" }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:216
+msgid ""
+"The function returns the possibly adjusted block size. In case the block "
+"size is indeed changed, `sndbuf_resize()` should be called to adjust the "
+"buffer."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:218
+#, no-wrap
+msgid "channel_trigger"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:221
+msgid ""
+"`xxxchannel_trigger()` is called by [.filename]#pcm# to control data "
+"transfer operations in the driver."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:231
+#, no-wrap
+msgid ""
+" static int\n"
+" xxxchannel_trigger(kobj_t obj, void *data, int go) <.>\n"
+" {\n"
+" struct xxx_chinfo *ch = data;\n"
+" ...\n"
+" return 0;\n"
+" }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:234
+msgid "`go` defines the action for the current call. The possible values are:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:238
+msgid ""
+"If the driver uses ISA DMA, `sndbuf_isadma()` should be called before "
+"performing actions on the device, and will take care of the DMA chip side of "
+"things."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:240
+#, no-wrap
+msgid "channel_getptr"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:243
+msgid ""
+"`xxxchannel_getptr()` returns the current offset in the transfer buffer. "
+"This will typically be called by `chn_intr()`, and this is how [."
+"filename]#pcm# knows where it can transfer new data."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:244
+#, no-wrap
+msgid "channel_free"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:247
+msgid ""
+"`xxxchannel_free()` is called to free up channel resources, for example when "
+"the driver is unloaded, and should be implemented if the channel data "
+"structures are dynamically allocated or if `sndbuf_alloc()` was not used for "
+"buffer allocation."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:248
+#, no-wrap
+msgid "channel_getcaps"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:257
+#, no-wrap
+msgid ""
+" struct pcmchan_caps *\n"
+" xxxchannel_getcaps(kobj_t obj, void *data)\n"
+" {\n"
+" return &xxx_caps; <.>\n"
+" }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:260
+msgid ""
+"The routine returns a pointer to a (usually statically-defined) "
+"`pcmchan_caps` structure (defined in [.filename]#sound/pcm/channel.h#. The "
+"structure holds the minimum and maximum sampling frequencies, and the "
+"accepted sound formats. Look at any sound driver for an example."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:261
+#, no-wrap
+msgid "More Functions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:264
+msgid ""
+"`channel_reset()`, `channel_resetdone()`, and `channel_notify()` are for "
+"special purposes and should not be implemented in a driver without "
+"discussing it on the {freebsd-multimedia}."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:266
+msgid "`channel_setdir()` is deprecated."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:267
+#, no-wrap
+msgid "The MIXER Interface"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:270
+#, no-wrap
+msgid "mixer_init"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:273
+msgid ""
+"`xxxmixer_init()` initializes the hardware and tells [.filename]#pcm# what "
+"mixer devices are available for playing and recording"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:281
+#, no-wrap
+msgid ""
+" static int\n"
+" xxxmixer_init(struct snd_mixer *m)\n"
+" {\n"
+" struct xxx_info *sc = mix_getdevinfo(m);\n"
+" u_int32_t v;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:283
+#, no-wrap
+msgid " [Initialize hardware]\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:288
+#, no-wrap
+msgid ""
+" [Set appropriate bits in v for play mixers] <.>\n"
+" mix_setdevs(m, v);\n"
+" [Set appropriate bits in v for record mixers]\n"
+" mix_setrecdevs(m, v)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:291
+#, no-wrap
+msgid ""
+" return 0;\n"
+" }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:294
+msgid ""
+"Set bits in an integer value and call `mix_setdevs()` and `mix_setrecdevs()` "
+"to tell [.filename]#pcm# what devices exist."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:296
+msgid ""
+"Mixer bits definitions can be found in [.filename]#soundcard.h# "
+"(`SOUND_MASK_XXX` values and `SOUND_MIXER_XXX` bit shifts)."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:297
+#, no-wrap
+msgid "mixer_set"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:300
+msgid "`xxxmixer_set()` sets the volume level for one mixer device."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:311
+#, no-wrap
+msgid ""
+" static int\n"
+" xxxmixer_set(struct snd_mixer *m, unsigned dev,\n"
+" unsigned left, unsigned right) <.>\n"
+" {\n"
+" struct sc_info *sc = mix_getdevinfo(m);\n"
+" [set volume level]\n"
+" return left | (right << 8); <.>\n"
+" }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:314
+msgid ""
+"The device is specified as a `SOUND_MIXER_XXX` value. The volume values are "
+"specified in range [0-100]. A value of zero should mute the device."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:315
+msgid ""
+"As the hardware levels probably will not match the input scale, and some "
+"rounding will occur, the routine returns the actual level values (in range "
+"0-100) as shown."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:316
+#, no-wrap
+msgid "mixer_setrecsrc"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:319
+msgid "`xxxmixer_setrecsrc()` sets the recording source device."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:326
+#, no-wrap
+msgid ""
+" static int\n"
+" xxxmixer_setrecsrc(struct snd_mixer *m, u_int32_t src) <.>\n"
+" {\n"
+" struct xxx_info *sc = mix_getdevinfo(m);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:328
+#, no-wrap
+msgid " [look for non zero bit(s) in src, set up hardware]\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:332
+#, no-wrap
+msgid ""
+" [update src to reflect actual action]\n"
+" return src; <.>\n"
+" }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:335
+msgid "The desired recording devices are specified as a bit field"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:336
+msgid ""
+"The actual devices set for recording are returned. Some drivers can only set "
+"one device for recording. The function should return -1 if an error occurs."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:337
+#, no-wrap
+msgid "mixer_uninit, mixer_reinit"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:340
+msgid ""
+"`xxxmixer_uninit()` should ensure that all sound is muted and if possible "
+"mixer hardware should be powered down."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:342
+msgid ""
+"`xxxmixer_reinit()` should ensure that the mixer hardware is powered up and "
+"any settings not controlled by `mixer_set()` or `mixer_setrecsrc()` are "
+"restored."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:343
+#, no-wrap
+msgid "The AC97 Interface"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:346
+msgid ""
+"The _AC97_ interface is implemented by drivers with an AC97 codec. It only "
+"has three methods:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:348
+msgid "`xxxac97_init()` returns the number of ac97 codecs found."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:349
+msgid "`ac97_read()` and `ac97_write()` read or write a specified register."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sound/_index.adoc:350
+msgid ""
+"The _AC97_ interface is used by the AC97 code in [.filename]#pcm# to perform "
+"higher level operations. Look at [.filename]#sound/pci/maestro3.c# or many "
+"others under [.filename]#sound/pci/# for an example."
+msgstr ""
diff --git a/documentation/content/en/books/arch-handbook/sysinit/_index.adoc b/documentation/content/en/books/arch-handbook/sysinit/_index.adoc
index 5d0809fda8..a4c65902fb 100644
--- a/documentation/content/en/books/arch-handbook/sysinit/_index.adoc
+++ b/documentation/content/en/books/arch-handbook/sysinit/_index.adoc
@@ -6,7 +6,7 @@ description: The SYSINIT Framework
tags: ["SYSINIT", "framework", "Terminology"]
showBookMenu: true
weight: 6
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/sysinit/"
---
[[sysinit]]
diff --git a/documentation/content/en/books/arch-handbook/sysinit/_index.po b/documentation/content/en/books/arch-handbook/sysinit/_index.po
new file mode 100644
index 0000000000..26e22dfcc5
--- /dev/null
+++ b/documentation/content/en/books/arch-handbook/sysinit/_index.po
@@ -0,0 +1,299 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:20-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:1
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:13
+#, no-wrap
+msgid "The SYSINIT Framework"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:1
+#, no-wrap
+msgid "Chapter 5. The SYSINIT Framework"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:51
+msgid ""
+"SYSINIT is the framework for a generic call sort and dispatch mechanism. "
+"FreeBSD currently uses it for the dynamic initialization of the kernel. "
+"SYSINIT allows FreeBSD's kernel subsystems to be reordered, and added, "
+"removed, and replaced at kernel link time when the kernel or one of its "
+"modules is loaded without having to edit a statically ordered initialization "
+"routing and recompile the kernel. This system also allows kernel modules, "
+"currently called _KLD's_, to be separately compiled, linked, and initialized "
+"at boot time and loaded even later while the system is already running. This "
+"is accomplished using the \"kernel linker\" and \"linker sets\"."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:53
+#, no-wrap
+msgid "Terminology"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:55
+#, no-wrap
+msgid "Linker Set"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:57
+msgid ""
+"A linker technique in which the linker gathers statically declared data "
+"throughout a program's source files into a single contiguously addressable "
+"unit of data."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:59
+#, no-wrap
+msgid "SYSINIT Operation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:62
+msgid ""
+"SYSINIT relies on the ability of the linker to take static data declared at "
+"multiple locations throughout a program's source and group it together as a "
+"single contiguous chunk of data. This linker technique is called a \"linker "
+"set\". SYSINIT uses two linker sets to maintain two data sets containing "
+"each consumer's call order, function, and a pointer to the data to pass to "
+"that function."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:64
+msgid ""
+"SYSINIT uses two priorities when ordering the functions for execution. The "
+"first priority is a subsystem ID giving an overall order for SYSINIT's "
+"dispatch of functions. Current predeclared ID's are in [.filename]#<sys/"
+"kernel.h># in the enum list `sysinit_sub_id`. The second priority used is an "
+"element order within the subsystem. Current predeclared subsystem element "
+"orders are in [.filename]#<sys/kernel.h># in the enum list "
+"`sysinit_elem_order`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:66
+msgid ""
+"There are currently two uses for SYSINIT. Function dispatch at system "
+"startup and kernel module loads, and function dispatch at system shutdown "
+"and kernel module unload. Kernel subsystems often use system startup "
+"SYSINIT's to initialize data structures, for example the process scheduling "
+"subsystem uses a SYSINIT to initialize the run queue data structure. Device "
+"drivers should avoid using `SYSINIT()` directly. Instead drivers for real "
+"devices that are part of a bus structure should use `DRIVER_MODULE()` to "
+"provide a function that detects the device and, if it is present, "
+"initializes the device. It will do a few things specific to devices and then "
+"call `SYSINIT()` itself. For pseudo-devices, which are not part of a bus "
+"structure, use `DEV_MODULE()`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:68
+#, no-wrap
+msgid "Using SYSINIT"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:70
+#, no-wrap
+msgid "Interface"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:72
+#, no-wrap
+msgid "Headers"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:77
+#, no-wrap
+msgid "<sys/kernel.h>\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:79
+#, no-wrap
+msgid "Macros"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:85
+#, no-wrap
+msgid ""
+"SYSINIT(uniquifier, subsystem, order, func, ident)\n"
+"SYSUNINIT(uniquifier, subsystem, order, func, ident)\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:87
+#, no-wrap
+msgid "Startup"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:90
+msgid ""
+"The `SYSINIT()` macro creates the necessary SYSINIT data in SYSINIT's "
+"startup data set for SYSINIT to sort and dispatch a function at system "
+"startup and module load. `SYSINIT()` takes a uniquifier that SYSINIT uses to "
+"identify the particular function dispatch data, the subsystem order, the "
+"subsystem element order, the function to call, and the data to pass the "
+"function. All functions must take a constant pointer argument."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:91
+#, no-wrap
+msgid "Example of a `SYSINIT()`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:97
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:147
+#, no-wrap
+msgid "#include <sys/kernel.h>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:103
+#, no-wrap
+msgid ""
+"void foo_null(void *unused)\n"
+"{\n"
+" foo_doo();\n"
+"}\n"
+"SYSINIT(foo, SI_SUB_FOO, SI_ORDER_FOO, foo_null, NULL);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:107
+#, no-wrap
+msgid ""
+"struct foo foo_voodoo = {\n"
+" FOO_VOODOO;\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:114
+#, no-wrap
+msgid ""
+"void foo_arg(void *vdata)\n"
+"{\n"
+" struct foo *foo = (struct foo *)vdata;\n"
+" foo_data(foo);\n"
+"}\n"
+"SYSINIT(bar, SI_SUB_FOO, SI_ORDER_FOO, foo_arg, &foo_voodoo);\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:118
+msgid ""
+"Note that `SI_SUB_FOO` and `SI_ORDER_FOO` need to be in the `sysinit_sub_id` "
+"and `sysinit_elem_order` enum's as mentioned above. Either use existing ones "
+"or add your own to the enum's. You can also use math for fine-tuning the "
+"order a SYSINIT will run in. This example shows a SYSINIT that needs to be "
+"run just barely before the SYSINIT's that handle tuning kernel parameters."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:119
+#, no-wrap
+msgid "Example of Adjusting `SYSINIT()` Order"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:127
+#, no-wrap
+msgid ""
+"static void\n"
+"mptable_register(void *dummy __unused)\n"
+"{\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:130
+#, no-wrap
+msgid ""
+"\tapic_register_enumerator(&mptable_enumerator);\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:133
+#, no-wrap
+msgid ""
+"SYSINIT(mptable_register, SI_SUB_TUNABLES - 1, SI_ORDER_FIRST,\n"
+" mptable_register, NULL);\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:137
+#, no-wrap
+msgid "Shutdown"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:140
+msgid ""
+"The `SYSUNINIT()` macro behaves similarly to the `SYSINIT()` macro except "
+"that it adds the SYSINIT data to SYSINIT's shutdown data set."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:141
+#, no-wrap
+msgid "Example of a `SYSUNINIT()`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:153
+#, no-wrap
+msgid ""
+"void foo_cleanup(void *unused)\n"
+"{\n"
+" foo_kill();\n"
+"}\n"
+"SYSUNINIT(foobar, SI_SUB_FOO, SI_ORDER_FOO, foo_cleanup, NULL);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:157
+#, no-wrap
+msgid ""
+"struct foo_stack foo_stack = {\n"
+" FOO_STACK_VOODOO;\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/sysinit/_index.adoc:162
+#, no-wrap
+msgid ""
+"void foo_flush(void *vdata)\n"
+"{\n"
+"}\n"
+"SYSUNINIT(barfoo, SI_SUB_FOO, SI_ORDER_FOO, foo_flush, &foo_stack);\n"
+msgstr ""
diff --git a/documentation/content/en/books/arch-handbook/usb/_index.adoc b/documentation/content/en/books/arch-handbook/usb/_index.adoc
index f88db60bc8..fac5f9776f 100644
--- a/documentation/content/en/books/arch-handbook/usb/_index.adoc
+++ b/documentation/content/en/books/arch-handbook/usb/_index.adoc
@@ -6,7 +6,7 @@ description: USB Devices in FreeBSD
tags: ["USB", "Structure", "UHCI", "OHCI"]
showBookMenu: true
weight: 15
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/usb/"
---
[[usb]]
@@ -93,7 +93,7 @@ The UHCI host controller maintains a framelist with 1024 pointers to per frame d
Each transfer consists of one or more packets. The UHCI driver splits large transfers into multiple packets. For every transfer, apart from isochronous transfers, a QH is allocated. For every type of transfer these QHs are collected at a QH for that type. Isochronous transfers have to be executed first because of the fixed latency requirement and are directly referred to by the pointer in the framelist. The last isochronous TD refers to the QH for interrupt transfers for that frame. All QHs for interrupt transfers point at the QH for control transfers, which in turn points at the QH for bulk transfers. The following diagram gives a graphical overview of this:
-This results in the following schedule being run in each frame. After fetching the pointer for the current frame from the framelist the controller first executes the TDs for all the isochronous packets in that frame. The last of these TDs refers to the QH for the interrupt transfers for thatframe. The host controller will then descend from that QH to the QHs for the individual interrupt transfers. After finishing that queue, the QH for the interrupt transfers will refer the controller to the QH for all control transfers. It will execute all the subqueues scheduled there, followed by all the transfers queued at the bulk QH. To facilitate the handling of finished or failed transfers different types of interrupts are generated by the hardware at the end of each frame. In the last TD for a transfer the Interrupt-On Completion bit is set by the HC driver to flag an interrupt when the transfer has completed. An error interrupt is flagged if a TD reaches its maximum error count. If the short packet detect bit is set in a TD and less than the set packet length is transferred this interrupt is flagged to notify the controller driver of the completed transfer. It is the host controller driver's task to find out which transfer has completed or produced an error. When called the interrupt service routine will locate all the finished transfers and call their callbacks.
+This results in the following schedule being run in each frame. After fetching the pointer for the current frame from the framelist the controller first executes the TDs for all the isochronous packets in that frame. The last of these TDs refers to the QH for the interrupt transfers for that frame. The host controller will then descend from that QH to the QHs for the individual interrupt transfers. After finishing that queue, the QH for the interrupt transfers will refer the controller to the QH for all control transfers. It will execute all the subqueues scheduled there, followed by all the transfers queued at the bulk QH. To facilitate the handling of finished or failed transfers different types of interrupts are generated by the hardware at the end of each frame. In the last TD for a transfer the Interrupt-On Completion bit is set by the HC driver to flag an interrupt when the transfer has completed. An error interrupt is flagged if a TD reaches its maximum error count. If the short packet detect bit is set in a TD and less than the set packet length is transferred this interrupt is flagged to notify the controller driver of the completed transfer. It is the host controller driver's task to find out which transfer has completed or produced an error. When called the interrupt service routine will locate all the finished transfers and call their callbacks.
Refer to the UHCI Specification for a more elaborate description.
diff --git a/documentation/content/en/books/arch-handbook/usb/_index.po b/documentation/content/en/books/arch-handbook/usb/_index.po
new file mode 100644
index 0000000000..25408b33b1
--- /dev/null
+++ b/documentation/content/en/books/arch-handbook/usb/_index.po
@@ -0,0 +1,797 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:20-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:1
+#, no-wrap
+msgid "USB Devices in FreeBSD"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:1
+#, no-wrap
+msgid "Chapter 13. USB Devices"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:13
+#, no-wrap
+msgid "USB Devices"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:51
+#, no-wrap
+msgid "Introduction"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:54
+msgid ""
+"The Universal Serial Bus (USB) is a new way of attaching devices to personal "
+"computers. The bus architecture features two-way communication and has been "
+"developed as a response to devices becoming smarter and requiring more "
+"interaction with the host. USB support is included in all current PC "
+"chipsets and is therefore available in all recently built PCs. Apple's "
+"introduction of the USB-only iMac has been a major incentive for hardware "
+"manufacturers to produce USB versions of their devices. The future PC "
+"specifications specify that all legacy connectors on PCs should be replaced "
+"by one or more USB connectors, providing generic plug and play capabilities. "
+"Support for USB hardware was available at a very early stage in NetBSD and "
+"was developed by Lennart Augustsson for the NetBSD project. The code has "
+"been ported to FreeBSD and we are currently maintaining a shared code base. "
+"For the implementation of the USB subsystem a number of features of USB are "
+"important."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:56
+msgid ""
+"_Lennart Augustsson has done most of the implementation of the USB support "
+"for the NetBSD project. Many thanks for this incredible amount of work. Many "
+"thanks also to Ardy and Dirk for their comments and proofreading of this "
+"paper._"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:58
+msgid ""
+"Devices connect to ports on the computer directly or on devices called hubs, "
+"forming a treelike device structure."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:59
+msgid "The devices can be connected and disconnected at run time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:60
+msgid "Devices can suspend themselves and trigger resumes of the host system"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:61
+msgid ""
+"As the devices can be powered from the bus, the host software has to keep "
+"track of power budgets for each hub."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:62
+msgid ""
+"Different quality of service requirements by the different device types "
+"together with the maximum of 126 devices that can be connected to the same "
+"bus, require proper scheduling of transfers on the shared bus to take full "
+"advantage of the 12Mbps bandwidth available. (over 400Mbps with USB 2.0)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:63
+msgid ""
+"Devices are intelligent and contain easily accessible information about "
+"themselves"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:65
+msgid ""
+"The development of drivers for the USB subsystem and devices connected to it "
+"is supported by the specifications that have been developed and will be "
+"developed. These specifications are publicly available from the USB home "
+"pages. Apple has been very strong in pushing for standards based drivers, by "
+"making drivers for the generic classes available in their operating system "
+"MacOS and discouraging the use of separate drivers for each new device. This "
+"chapter tries to collate essential information for a basic understanding of "
+"the USB 2.0 implementation stack in FreeBSD/NetBSD. It is recommended "
+"however to read it together with the relevant 2.0 specifications and other "
+"developer resources:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:67
+msgid ""
+"USB 2.0 Specification (http://www.usb.org/developers/docs/usb20_docs/[http://"
+"www.usb.org/developers/docs/usb20_docs/])"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:68
+msgid ""
+"Universal Host Controller Interface (UHCI) Specification (link:ftp://ftp."
+"netbsd.org/pub/NetBSD/misc/blymn/uhci11d.pdf[ftp://ftp.netbsd.org/pub/NetBSD/"
+"misc/blymn/uhci11d.pdf)]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:69
+msgid ""
+"Open Host Controller Interface (OHCI) Specification(link:ftp://ftp.compaq."
+"com/pub/supportinformation/papers/hcir1_0a.pdf[ftp://ftp.compaq.com/pub/"
+"supportinformation/papers/hcir1_0a.pdf])"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:70
+msgid ""
+"Developer section of USB home page (http://www.usb.org/developers/[http://"
+"www.usb.org/developers/])"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:71
+#, no-wrap
+msgid "Structure of the USB Stack"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:74
+msgid ""
+"The USB support in FreeBSD can be split into three layers. The lowest layer "
+"contains the host controller driver, providing a generic interface to the "
+"hardware and its scheduling facilities. It supports initialisation of the "
+"hardware, scheduling of transfers and handling of completed and/or failed "
+"transfers. Each host controller driver implements a virtual hub providing "
+"hardware independent access to the registers controlling the root ports on "
+"the back of the machine."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:76
+msgid ""
+"The middle layer handles the device connection and disconnection, basic "
+"initialisation of the device, driver selection, the communication channels "
+"(pipes) and does resource management. This services layer also controls the "
+"default pipes and the device requests transferred over them."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:78
+msgid ""
+"The top layer contains the individual drivers supporting specific (classes "
+"of) devices. These drivers implement the protocol that is used over the "
+"pipes other than the default pipe. They also implement additional "
+"functionality to make the device available to other parts of the kernel or "
+"userland. They use the USB driver interface (USBDI) exposed by the services "
+"layer."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:80
+#, no-wrap
+msgid "Host Controllers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:83
+msgid ""
+"The host controller (HC) controls the transmission of packets on the bus. "
+"Frames of 1 millisecond are used. At the start of each frame the host "
+"controller generates a Start of Frame (SOF) packet."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:85
+msgid ""
+"The SOF packet is used to synchronise to the start of the frame and to keep "
+"track of the frame number. Within each frame packets are transferred, either "
+"from host to device (out) or from device to host (in). Transfers are always "
+"initiated by the host (polled transfers). Therefore there can only be one "
+"host per USB bus. Each transfer of a packet has a status stage in which the "
+"recipient of the data can return either ACK (acknowledge reception), NAK "
+"(retry), STALL (error condition) or nothing (garbled data stage, device not "
+"available or disconnected). Section 8.5 of the USB 2.0 Specification "
+"explains the details of packets in more detail. Four different types of "
+"transfers can occur on a USB bus: control, bulk, interrupt and isochronous. "
+"The types of transfers and their characteristics are described below."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:87
+msgid ""
+"Large transfers between the device on the USB bus and the device driver are "
+"split up into multiple packets by the host controller or the HC driver."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:89
+msgid ""
+"Device requests (control transfers) to the default endpoints are special. "
+"They consist of two or three phases: SETUP, DATA (optional) and STATUS. The "
+"set-up packet is sent to the device. If there is a data phase, the direction "
+"of the data packet(s) is given in the set-up packet. The direction in the "
+"status phase is the opposite of the direction during the data phase, or IN "
+"if there was no data phase. The host controller hardware also provides "
+"registers with the current status of the root ports and the changes that "
+"have occurred since the last reset of the status change register. Access to "
+"these registers is provided through a virtualised hub as suggested in the "
+"USB specification. The virtual hub must comply with the hub device class "
+"given in chapter 11 of that specification. It must provide a default pipe "
+"through which device requests can be sent to it. It returns the standard "
+"andhub class specific set of descriptors. It should also provide an "
+"interrupt pipe that reports changes happening at its ports. There are "
+"currently two specifications for host controllers available: Universal Host "
+"Controller Interface (UHCI) from Intel and Open Host Controller Interface "
+"(OHCI) from Compaq, Microsoft, and National Semiconductor. The UHCI "
+"specification has been designed to reduce hardware complexity by requiring "
+"the host controller driver to supply a complete schedule of the transfers "
+"for each frame. OHCI type controllers are much more independent by providing "
+"a more abstract interface doing a lot of work themselves."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:90
+#, no-wrap
+msgid "UHCI"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:93
+msgid ""
+"The UHCI host controller maintains a framelist with 1024 pointers to per "
+"frame data structures. It understands two different data types: transfer "
+"descriptors (TD) and queue heads (QH). Each TD represents a packet to be "
+"communicated to or from a device endpoint. QHs are a means to groupTDs (and "
+"QHs) together."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:95
+msgid ""
+"Each transfer consists of one or more packets. The UHCI driver splits large "
+"transfers into multiple packets. For every transfer, apart from isochronous "
+"transfers, a QH is allocated. For every type of transfer these QHs are "
+"collected at a QH for that type. Isochronous transfers have to be executed "
+"first because of the fixed latency requirement and are directly referred to "
+"by the pointer in the framelist. The last isochronous TD refers to the QH "
+"for interrupt transfers for that frame. All QHs for interrupt transfers "
+"point at the QH for control transfers, which in turn points at the QH for "
+"bulk transfers. The following diagram gives a graphical overview of this:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:97
+msgid ""
+"This results in the following schedule being run in each frame. After "
+"fetching the pointer for the current frame from the framelist the controller "
+"first executes the TDs for all the isochronous packets in that frame. The "
+"last of these TDs refers to the QH for the interrupt transfers for "
+"thatframe. The host controller will then descend from that QH to the QHs for "
+"the individual interrupt transfers. After finishing that queue, the QH for "
+"the interrupt transfers will refer the controller to the QH for all control "
+"transfers. It will execute all the subqueues scheduled there, followed by "
+"all the transfers queued at the bulk QH. To facilitate the handling of "
+"finished or failed transfers different types of interrupts are generated by "
+"the hardware at the end of each frame. In the last TD for a transfer the "
+"Interrupt-On Completion bit is set by the HC driver to flag an interrupt "
+"when the transfer has completed. An error interrupt is flagged if a TD "
+"reaches its maximum error count. If the short packet detect bit is set in a "
+"TD and less than the set packet length is transferred this interrupt is "
+"flagged to notify the controller driver of the completed transfer. It is the "
+"host controller driver's task to find out which transfer has completed or "
+"produced an error. When called the interrupt service routine will locate all "
+"the finished transfers and call their callbacks."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:99
+msgid "Refer to the UHCI Specification for a more elaborate description."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:100
+#, no-wrap
+msgid "OHCI"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:103
+msgid ""
+"Programming an OHCI host controller is much simpler. The controller assumes "
+"that a set of endpoints is available, and is aware of scheduling priorities "
+"and the ordering of the types of transfers in a frame. The main data "
+"structure used by the host controller is the endpoint descriptor (ED) to "
+"which a queue of transfer descriptors (TDs) is attached. The ED contains the "
+"maximum packet size allowed for an endpoint and the controller hardware does "
+"the splitting into packets. The pointers to the data buffers are updated "
+"after each transfer and when the start and end pointer are equal, the TD is "
+"retired to the done-queue. The four types of endpoints (interrupt, "
+"isochronous, control, and bulk) have their own queues. Control and bulk "
+"endpoints are queued each at their own queue. Interrupt EDs are queued in a "
+"tree, with the level in the tree defining the frequency at which they run."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:105
+msgid ""
+"The schedule being run by the host controller in each frame looks as "
+"follows. The controller will first run the non-periodic control and bulk "
+"queues, up to a time limit set by the HC driver. Then the interrupt "
+"transfers for that frame number are run, by using the lower five bits of the "
+"frame number as an index into level 0 of the tree of interrupts EDs. At the "
+"end of this tree the isochronous EDs are connected and these are traversed "
+"subsequently. The isochronous TDs contain the frame number of the first "
+"frame the transfer should be run in. After all the periodic transfers have "
+"been run, the control and bulk queues are traversed again. Periodically the "
+"interrupt service routine is called to process the done queue and call the "
+"callbacks for each transfer and reschedule interrupt and isochronous "
+"endpoints."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:107
+msgid ""
+"See the UHCI Specification for a more elaborate description. The middle "
+"layer provides access to the device in a controlled way and maintains "
+"resources in use by the different drivers and the services layer. The layer "
+"takes care of the following aspects:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:109
+msgid "The device configuration information"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:110
+msgid "The pipes to communicate with a device"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:111
+msgid "Probing and attaching and detaching form a device."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:113
+#, no-wrap
+msgid "USB Device Information"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:115
+#, no-wrap
+msgid "Device Configuration Information"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:118
+msgid ""
+"Each device provides different levels of configuration information. Each "
+"device has one or more configurations, of which one is selected during probe/"
+"attach. A configuration provides power and bandwidth requirements. Within "
+"each configuration there can be multiple interfaces. A device interface is a "
+"collection of endpoints. For example USB speakers can have an interface for "
+"the audio data (Audio Class) and an interface for the knobs, dials and "
+"buttons (HID Class). All interfaces in a configuration are active at the "
+"same time and can be attached to by different drivers. Each interface can "
+"have alternates, providing different quality of service parameters. In for "
+"example cameras this is used to provide different frame sizes and numbers of "
+"frames per second."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:120
+msgid ""
+"Within each interface, 0 or more endpoints can be specified. Endpoints are "
+"the unidirectional access points for communicating with a device. They "
+"provide buffers to temporarily store incoming or outgoing data from the "
+"device. Each endpoint has a unique address within a configuration, the "
+"endpoint's number plus its direction. The default endpoint, endpoint 0, is "
+"not part of any interface and available in all configurations. It is managed "
+"by the services layer and not directly available to device drivers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:122
+msgid ""
+"This hierarchical configuration information is described in the device by a "
+"standard set of descriptors (see section 9.6 of the USB specification). They "
+"can be requested through the Get Descriptor Request. The services layer "
+"caches these descriptors to avoid unnecessary transfers on the USB bus. "
+"Access to the descriptors is provided through function calls."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:124
+msgid ""
+"Device descriptors: General information about the device, like Vendor, "
+"Product and Revision Id, supported device class, subclass and protocol if "
+"applicable, maximum packet size for the default endpoint, etc."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:125
+msgid ""
+"Configuration descriptors: The number of interfaces in this configuration, "
+"suspend and resume functionality supported and power requirements."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:126
+msgid ""
+"Interface descriptors: interface class, subclass and protocol if applicable, "
+"number of alternate settings for the interface and the number of endpoints."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:127
+msgid ""
+"Endpoint descriptors: Endpoint address, direction and type, maximum packet "
+"size supported and polling frequency if type is interrupt endpoint. There is "
+"no descriptor for the default endpoint (endpoint 0) and it is never counted "
+"in an interface descriptor."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:128
+msgid ""
+"String descriptors: In the other descriptors string indices are supplied for "
+"some fields.These can be used to retrieve descriptive strings, possibly in "
+"multiple languages."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:130
+msgid ""
+"Class specifications can add their own descriptor types that are available "
+"through the GetDescriptor Request."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:132
+msgid ""
+"Pipes Communication to end points on a device flows through so-called pipes. "
+"Drivers submit transfers to endpoints to a pipe and provide a callback to be "
+"called on completion or failure of the transfer (asynchronous transfers) or "
+"wait for completion (synchronous transfer). Transfers to an endpoint are "
+"serialised in the pipe. A transfer can either complete, fail or time-out (if "
+"a time-out has been set). There are two types of time-outs for transfers. "
+"Time-outs can happen due to time-out on the USBbus (milliseconds). These "
+"time-outs are seen as failures and can be due to disconnection of the "
+"device. A second form of time-out is implemented in software and is "
+"triggered when a transfer does not complete within a specified amount of "
+"time (seconds). These are caused by a device acknowledging negatively (NAK) "
+"the transferred packets. The cause for this is the device not being ready to "
+"receive data, buffer under- or overrun or protocol errors."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:134
+msgid ""
+"If a transfer over a pipe is larger than the maximum packet size specified "
+"in the associated endpoint descriptor, the host controller (OHCI) or the HC "
+"driver (UHCI) will split the transfer into packets of maximum packet size, "
+"with the last packet possibly smaller than the maximum packet size."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:136
+msgid ""
+"Sometimes it is not a problem for a device to return less data than "
+"requested. For example abulk-in-transfer to a modem might request 200 bytes "
+"of data, but the modem has only 5 bytes available at that time. The driver "
+"can set the short packet (SPD) flag. It allows the host controller to accept "
+"a packet even if the amount of data transferred is less than requested. This "
+"flag is only valid for in-transfers, as the amount of data to be sent to a "
+"device is always known beforehand. If an unrecoverable error occurs in a "
+"device during a transfer the pipe is stalled. Before any more data is "
+"accepted or sent the driver needs to resolve the cause of the stall and "
+"clear the endpoint stall condition through send the clear endpoint halt "
+"device request over the default pipe. The default endpoint should never "
+"stall."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:138
+msgid ""
+"There are four different types of endpoints and corresponding pipes: - "
+"Control pipe / default pipe: There is one control pipe per device, connected "
+"to the default endpoint (endpoint 0). The pipe carries the device requests "
+"and associated data. The difference between transfers over the default pipe "
+"and other pipes is that the protocol for the transfers is described in the "
+"USB specification. These requests are used to reset and configure the "
+"device. A basic set of commands that must be supported by each device is "
+"provided in chapter 9 of the USB specification. The commands supported on "
+"this pipe can be extended by a device class specification to support "
+"additional functionality."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:140
+msgid "Bulk pipe: This is the USB equivalent to a raw transmission medium."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:141
+msgid ""
+"Interrupt pipe: The host sends a request for data to the device and if the "
+"device has nothing to send, it will NAK the data packet. Interrupt transfers "
+"are scheduled at a frequency specified when creating the pipe."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:142
+msgid ""
+"Isochronous pipe: These pipes are intended for isochronous data, for example "
+"video or audio streams, with fixed latency, but no guaranteed delivery. Some "
+"support for pipes of this type is available in the current implementation. "
+"Packets in control, bulk and interrupt transfers are retried if an error "
+"occurs during transmission or the device acknowledges the packet negatively "
+"(NAK) due to for example lack of buffer space to store the incoming data. "
+"Isochronous packets are however not retried in case of failed delivery or "
+"NAK of a packet as this might violate the timing constraints."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:144
+msgid ""
+"The availability of the necessary bandwidth is calculated during the "
+"creation of the pipe. Transfers are scheduled within frames of 1 "
+"millisecond. The bandwidth allocation within a frame is prescribed by the "
+"USB specification, section 5.6 [ 2]. Isochronous and interrupt transfers are "
+"allowed to consume up to 90% of the bandwidth within a frame. Packets for "
+"control and bulk transfers are scheduled after all isochronous and interrupt "
+"packets and will consume all the remaining bandwidth."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:146
+msgid ""
+"More information on scheduling of transfers and bandwidth reclamation can be "
+"found in chapter 5 of the USB specification, section 1.3 of the UHCI "
+"specification, and section 3.4.2 of the OHCI specification."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:148
+#, no-wrap
+msgid "Device Probe and Attach"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:151
+msgid ""
+"After the notification by the hub that a new device has been connected, the "
+"service layer switches on the port, providing the device with 100 mA of "
+"current. At this point the device is in its default state and listening to "
+"device address 0. The services layer will proceed to retrieve the various "
+"descriptors through the default pipe. After that it will send a Set Address "
+"request to move the device away from the default device address (address 0). "
+"Multiple device drivers might be able to support the device. For example a "
+"modem driver might be able to support an ISDN TA through the AT "
+"compatibility interface. A driver for that specific model of the ISDN "
+"adapter might however be able to provide much better support for this "
+"device. To support this flexibility, the probes return priorities indicating "
+"their level of support. Support for a specific revision of a product ranks "
+"the highest and the generic driver the lowest priority. It might also be "
+"that multiple drivers could attach to one device if there are multiple "
+"interfaces within one configuration. Each driver only needs to support a "
+"subset of the interfaces."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:153
+msgid ""
+"The probing for a driver for a newly attached device checks first for device "
+"specific drivers. If not found, the probe code iterates over all supported "
+"configurations until a driver attaches in a configuration. To support "
+"devices with multiple drivers on different interfaces, the probe iterates "
+"over all interfaces in a configuration that have not yet been claimed by a "
+"driver. Configurations that exceed the power budget for the hub are ignored. "
+"During attach the driver should initialise the device to its proper state, "
+"but not reset it, as this will make the device disconnect itself from the "
+"bus and restart the probing process for it. To avoid consuming unnecessary "
+"bandwidth should not claim the interrupt pipe at attach time, but should "
+"postpone allocating the pipe until the file is opened and the data is "
+"actually used. When the file is closed the pipe should be closed again, even "
+"though the device might still be attached."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:154
+#, no-wrap
+msgid "Device Disconnect and Detach"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:157
+msgid ""
+"A device driver should expect to receive errors during any transaction with "
+"the device. The design of USB supports and encourages the disconnection of "
+"devices at any point in time. Drivers should make sure that they do the "
+"right thing when the device disappears."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:159
+msgid ""
+"Furthermore a device that has been disconnected and reconnected will not be "
+"reattached at the same device instance. This might change in the future when "
+"more devices support serial numbers (see the device descriptor) or other "
+"means of defining an identity for a device have been developed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:161
+msgid ""
+"The disconnection of a device is signaled by a hub in the interrupt packet "
+"delivered to the hub driver. The status change information indicates which "
+"port has seen a connection change. The device detach method for all device "
+"drivers for the device connected on that port are called and the structures "
+"cleaned up. If the port status indicates that in the mean time a device has "
+"been connected to that port, the procedure for probing and attaching the "
+"device will be started. A device reset will produce a disconnect-connect "
+"sequence on the hub and will be handled as described above."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:163
+#, no-wrap
+msgid "USB Drivers Protocol Information"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:166
+msgid ""
+"The protocol used over pipes other than the default pipe is undefined by the "
+"USB specification. Information on this can be found from various sources. "
+"The most accurate source is the developer's section on the USB home pages. "
+"From these pages, a growing number of deviceclass specifications are "
+"available. These specifications specify what a compliant device should look "
+"like from a driver perspective, basic functionality it needs to provide and "
+"the protocol that is to be used over the communication channels. The USB "
+"specification includes the description of the Hub Class. A class "
+"specification for Human Interface Devices (HID) has been created to cater "
+"for keyboards, tablets, bar-code readers, buttons, knobs, switches, etc. A "
+"third example is the class specification for mass storage devices. For a "
+"full list of device classes see the developers section on the USB home pages."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:168
+msgid ""
+"For many devices the protocol information has not yet been published "
+"however. Information on the protocol being used might be available from the "
+"company making the device. Some companies will require you to sign a Non -"
+"Disclosure Agreement (NDA) before giving you the specifications. This in "
+"most cases precludes making the driver open source."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:170
+msgid ""
+"Another good source of information is the Linux driver sources, as a number "
+"of companies have started to provide drivers for Linux for their devices. It "
+"is always a good idea to contact the authors of those drivers for their "
+"source of information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:172
+msgid ""
+"Example: Human Interface Devices The specification for the Human Interface "
+"Devices like keyboards, mice, tablets, buttons, dials,etc. is referred to in "
+"other device class specifications and is used in many devices."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:174
+msgid ""
+"For example audio speakers provide endpoints to the digital to analogue "
+"converters and possibly an extra pipe for a microphone. They also provide a "
+"HID endpoint in a separate interface for the buttons and dials on the front "
+"of the device. The same is true for the monitor control class. It is "
+"straightforward to build support for these interfaces through the available "
+"kernel and userland libraries together with the HID class driver or the "
+"generic driver. Another device that serves as an example for interfaces "
+"within one configuration driven by different device drivers is a cheap "
+"keyboard with built-in legacy mouse port. To avoid having the cost of "
+"including the hardware for a USB hub in the device, manufacturers combined "
+"the mouse data received from the PS/2 port on the back of the keyboard and "
+"the key presses from the keyboard into two separate interfaces in the same "
+"configuration. The mouse and keyboard drivers each attach to the appropriate "
+"interface and allocate the pipes to the two independent endpoints."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:176
+msgid ""
+"Example: Firmware download Many devices that have been developed are based "
+"on a general purpose processor with an additional USB core added to it. "
+"Since the development of drivers and firmware for USB devices is still very "
+"new, many devices require the downloading of the firmware after they have "
+"been connected."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:178
+msgid ""
+"The procedure followed is straightforward. The device identifies itself "
+"through a vendor and product Id. The first driver probes and attaches to it "
+"and downloads the firmware into it. After that the device soft resets itself "
+"and the driver is detached. After a short pause the device announces its "
+"presence on the bus. The device will have changed its vendor/product/"
+"revision Id to reflect the fact that it has been supplied with firmware and "
+"as a consequence a second driver will probe it and attach to it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:180
+msgid ""
+"An example of these types of devices is the ActiveWire I/O board, based on "
+"the EZ-USB chip. For this chip a generic firmware downloader is available. "
+"The firmware downloaded into the ActiveWire board changes the revision Id. "
+"It will then perform a soft reset of the USB part of the EZ-USB chip to "
+"disconnect from the USB bus and again reconnect."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:182
+msgid ""
+"Example: Mass Storage Devices Support for mass storage devices is mainly "
+"built around existing protocols. The Iomega USB Zipdrive is based on the "
+"SCSI version of their drive. The SCSI commands and status messages are "
+"wrapped in blocks and transferred over the bulk pipes to and from the "
+"device, emulating a SCSI controller over the USB wire. ATAPI and UFI "
+"commands are supported in a similar fashion."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:184
+msgid ""
+"The Mass Storage Specification supports 2 different types of wrapping of the "
+"command block.The initial attempt was based on sending the command and "
+"status through the default pipe and using bulk transfers for the data to be "
+"moved between the host and the device. Based on experience a second approach "
+"was designed that was based on wrapping the command and status blocks and "
+"sending them over the bulk out and in endpoint. The specification specifies "
+"exactly what has to happen when and what has to be done in case an error "
+"condition is encountered. The biggest challenge when writing drivers for "
+"these devices is to fit USB based protocol into the existing support for "
+"mass storage devices. CAM provides hooks to do this in a fairly straight "
+"forward way. ATAPI is less simple as historically the IDE interface has "
+"never had many different appearances."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/usb/_index.adoc:185
+msgid ""
+"The support for the USB floppy from Y-E Data is again less straightforward "
+"as a new command set has been designed."
+msgstr ""
diff --git a/documentation/content/en/books/arch-handbook/vm/_index.adoc b/documentation/content/en/books/arch-handbook/vm/_index.adoc
index 31a24a33b2..386dcd6070 100644
--- a/documentation/content/en/books/arch-handbook/vm/_index.adoc
+++ b/documentation/content/en/books/arch-handbook/vm/_index.adoc
@@ -6,7 +6,7 @@ description: Virtual Memory System in FreeBSD
tags: ["Virtual memory", "vm_page_t", "vm_object_t", "I/O", "KVM"]
showBookMenu: true
weight: 8
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/vm/"
---
[[vm]]
diff --git a/documentation/content/en/books/arch-handbook/vm/_index.po b/documentation/content/en/books/arch-handbook/vm/_index.po
new file mode 100644
index 0000000000..e07ad431f2
--- /dev/null
+++ b/documentation/content/en/books/arch-handbook/vm/_index.po
@@ -0,0 +1,366 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:20-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:1
+#, no-wrap
+msgid "Virtual Memory System in FreeBSD"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:1
+#, no-wrap
+msgid "Chapter 7. Virtual Memory System"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:13
+#, no-wrap
+msgid "Virtual Memory System"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:51
+#, no-wrap
+msgid "Management of Physical Memory `vm_page_t`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:54
+msgid ""
+"Physical memory is managed on a page-by-page basis through the `vm_page_t` "
+"structure. Pages of physical memory are categorized through the placement of "
+"their respective `vm_page_t` structures on one of several paging queues."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:56
+msgid ""
+"A page can be in a wired, active, inactive, cache, or free state. Except for "
+"the wired state, the page is typically placed in a doubly link list queue "
+"representing the state that it is in. Wired pages are not placed on any "
+"queue."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:58
+msgid ""
+"FreeBSD implements a more involved paging queue for cached and free pages in "
+"order to implement page coloring. Each of these states involves multiple "
+"queues arranged according to the size of the processor's L1 and L2 caches. "
+"When a new page needs to be allocated, FreeBSD attempts to obtain one that "
+"is reasonably well aligned from the point of view of the L1 and L2 caches "
+"relative to the VM object the page is being allocated for."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:60
+msgid ""
+"Additionally, a page may be held with a reference count or locked with a "
+"busy count. The VM system also implements an \"ultimate locked\" state for a "
+"page using the PG_BUSY bit in the page's flags."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:62
+msgid ""
+"In general terms, each of the paging queues operates in a LRU fashion. A "
+"page is typically placed in a wired or active state initially. When wired, "
+"the page is usually associated with a page table somewhere. The VM system "
+"ages the page by scanning pages in a more active paging queue (LRU) in order "
+"to move them to a less-active paging queue. Pages that get moved into the "
+"cache are still associated with a VM object but are candidates for immediate "
+"reuse. Pages in the free queue are truly free. FreeBSD attempts to minimize "
+"the number of pages in the free queue, but a certain minimum number of truly "
+"free pages must be maintained in order to accommodate page allocation at "
+"interrupt time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:64
+msgid ""
+"If a process attempts to access a page that does not exist in its page table "
+"but does exist in one of the paging queues (such as the inactive or cache "
+"queues), a relatively inexpensive page reactivation fault occurs which "
+"causes the page to be reactivated. If the page does not exist in system "
+"memory at all, the process must block while the page is brought in from disk."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:66
+msgid ""
+"FreeBSD dynamically tunes its paging queues and attempts to maintain "
+"reasonable ratios of pages in the various queues as well as attempts to "
+"maintain a reasonable breakdown of clean versus dirty pages. The amount of "
+"rebalancing that occurs depends on the system's memory load. This "
+"rebalancing is implemented by the pageout daemon and involves laundering "
+"dirty pages (syncing them with their backing store), noticing when pages are "
+"activity referenced (resetting their position in the LRU queues or moving "
+"them between queues), migrating pages between queues when the queues are out "
+"of balance, and so forth. FreeBSD's VM system is willing to take a "
+"reasonable number of reactivation page faults to determine how active or how "
+"idle a page actually is. This leads to better decisions being made as to "
+"when to launder or swap-out a page."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:68
+#, no-wrap
+msgid "The Unified Buffer Cache `vm_object_t`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:71
+msgid ""
+"FreeBSD implements the idea of a generic \"VM object\". VM objects can be "
+"associated with backing store of various typesunbacked, swap-backed, "
+"physical device-backed, or file-backed storage. Since the filesystem uses "
+"the same VM objects to manage in-core data relating to files, the result is "
+"a unified buffer cache."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:73
+msgid ""
+"VM objects can be _shadowed_. That is, they can be stacked on top of each "
+"other. For example, you might have a swap-backed VM object stacked on top of "
+"a file-backed VM object in order to implement a MAP_PRIVATE mmap()ing. This "
+"stacking is also used to implement various sharing properties, including "
+"copy-on-write, for forked address spaces."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:75
+msgid ""
+"It should be noted that a `vm_page_t` can only be associated with one VM "
+"object at a time. The VM object shadowing implements the perceived sharing "
+"of the same page across multiple instances."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:77
+#, no-wrap
+msgid "Filesystem I/O `struct buf`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:80
+msgid ""
+"vnode-backed VM objects, such as file-backed objects, generally need to "
+"maintain their own clean/dirty info independent from the VM system's idea of "
+"clean/dirty. For example, when the VM system decides to synchronize a "
+"physical page to its backing store, the VM system needs to mark the page "
+"clean before the page is actually written to its backing store. "
+"Additionally, filesystems need to be able to map portions of a file or file "
+"metadata into KVM in order to operate on it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:82
+msgid ""
+"The entities used to manage this are known as filesystem buffers, ``struct "
+"buf``'s, or ``bp``'s. When a filesystem needs to operate on a portion of a "
+"VM object, it typically maps part of the object into a struct buf and then "
+"maps the pages in the struct buf into KVM. In the same manner, disk I/O is "
+"typically issued by mapping portions of objects into buffer structures and "
+"then issuing the I/O on the buffer structures. The underlying vm_page_t's "
+"are typically busied for the duration of the I/O. Filesystem buffers also "
+"have their own notion of being busy, which is useful to filesystem driver "
+"code which would rather operate on filesystem buffers instead of hard VM "
+"pages."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:84
+msgid ""
+"FreeBSD reserves a limited amount of KVM to hold mappings from struct bufs, "
+"but it should be made clear that this KVM is used solely to hold mappings "
+"and does not limit the ability to cache data. Physical data caching is "
+"strictly a function of ``vm_page_t``'s, not filesystem buffers. However, "
+"since filesystem buffers are used to placehold I/O, they do inherently limit "
+"the amount of concurrent I/O possible. However, as there are usually a few "
+"thousand filesystem buffers available, this is not usually a problem."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:86
+#, no-wrap
+msgid "Mapping Page Tables `vm_map_t, vm_entry_t`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:89
+msgid ""
+"FreeBSD separates the physical page table topology from the VM system. All "
+"hard per-process page tables can be reconstructed on the fly and are usually "
+"considered throwaway. Special page tables such as those managing KVM are "
+"typically permanently preallocated. These page tables are not throwaway."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:91
+msgid ""
+"FreeBSD associates portions of vm_objects with address ranges in virtual "
+"memory through `vm_map_t` and `vm_entry_t` structures. Page tables are "
+"directly synthesized from the `vm_map_t`/`vm_entry_t`/ `vm_object_t` "
+"hierarchy. Recall that I mentioned that physical pages are only directly "
+"associated with a `vm_object`; that is not quite true. ``vm_page_t``'s are "
+"also linked into page tables that they are actively associated with. One "
+"`vm_page_t` can be linked into several _pmaps_, as page tables are called. "
+"However, the hierarchical association holds, so all references to the same "
+"page in the same object reference the same `vm_page_t` and thus give us "
+"buffer cache unification across the board."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:93
+#, no-wrap
+msgid "KVM Memory Mapping"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:96
+msgid ""
+"FreeBSD uses KVM to hold various kernel structures. The single largest "
+"entity held in KVM is the filesystem buffer cache. That is, mappings "
+"relating to `struct buf` entities."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:98
+msgid ""
+"Unlike Linux, FreeBSD does _not_ map all of physical memory into KVM. This "
+"means that FreeBSD can handle memory configurations up to 4G on 32 bit "
+"platforms. In fact, if the mmu were capable of it, FreeBSD could "
+"theoretically handle memory configurations up to 8TB on a 32 bit platform. "
+"However, since most 32 bit platforms are only capable of mapping 4GB of ram, "
+"this is a moot point."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:100
+msgid ""
+"KVM is managed through several mechanisms. The main mechanism used to manage "
+"KVM is the _zone allocator_. The zone allocator takes a chunk of KVM and "
+"splits it up into constant-sized blocks of memory in order to allocate a "
+"specific type of structure. You can use `vmstat -m` to get an overview of "
+"current KVM utilization broken down by zone."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:102
+#, no-wrap
+msgid "Tuning the FreeBSD VM System"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:105
+msgid ""
+"A concerted effort has been made to make the FreeBSD kernel dynamically tune "
+"itself. Typically you do not need to mess with anything beyond the "
+"`maxusers` and `NMBCLUSTERS` kernel config options. That is, kernel "
+"compilation options specified in (typically) [.filename]#/usr/src/sys/i386/"
+"conf/CONFIG_FILE#. A description of all available kernel configuration "
+"options can be found in [.filename]#/usr/src/sys/i386/conf/LINT#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:107
+msgid ""
+"In a large system configuration you may wish to increase `maxusers`. Values "
+"typically range from 10 to 128. Note that raising `maxusers` too high can "
+"cause the system to overflow available KVM resulting in unpredictable "
+"operation. It is better to leave `maxusers` at some reasonable number and "
+"add other options, such as `NMBCLUSTERS`, to increase specific resources."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:109
+msgid ""
+"If your system is going to use the network heavily, you may want to increase "
+"`NMBCLUSTERS`. Typical values range from 1024 to 4096."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:111
+msgid ""
+"The `NBUF` parameter is also traditionally used to scale the system. This "
+"parameter determines the amount of KVA the system can use to map filesystem "
+"buffers for I/O. Note that this parameter has nothing whatsoever to do with "
+"the unified buffer cache! This parameter is dynamically tuned in 3.0-CURRENT "
+"and later kernels and should generally not be adjusted manually. We "
+"recommend that you _not_ try to specify an `NBUF` parameter. Let the system "
+"pick it. Too small a value can result in extremely inefficient filesystem "
+"operation while too large a value can starve the page queues by causing too "
+"many pages to become wired down."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:113
+msgid ""
+"By default, FreeBSD kernels are not optimized. You can set debugging and "
+"optimization flags with the `makeoptions` directive in the kernel "
+"configuration. Note that you should not use `-g` unless you can accommodate "
+"the large (typically 7 MB+) kernels that result."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:118
+#, no-wrap
+msgid ""
+"makeoptions DEBUG=\"-g\"\n"
+"makeoptions COPTFLAGS=\"-O -pipe\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:121
+msgid ""
+"Sysctl provides a way to tune kernel parameters at run-time. You typically "
+"do not need to mess with any of the sysctl variables, especially the VM "
+"related ones."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:123
+msgid ""
+"Run time VM and system tuning is relatively straightforward. First, use Soft "
+"Updates on your UFS/FFS filesystems whenever possible. [.filename]#/usr/src/"
+"sys/ufs/ffs/README.softupdates# contains instructions (and restrictions) on "
+"how to configure it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:125
+msgid ""
+"Second, configure sufficient swap. You should have a swap partition "
+"configured on each physical disk, up to four, even on your \"work\" disks. "
+"You should have at least 2x the swap space as you have main memory, and "
+"possibly even more if you do not have a lot of memory. You should also size "
+"your swap partition based on the maximum memory configuration you ever "
+"intend to put on the machine so you do not have to repartition your disks "
+"later on. If you want to be able to accommodate a crash dump, your first "
+"swap partition must be at least as large as main memory and [.filename]#/var/"
+"crash# must have sufficient free space to hold the dump."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/arch-handbook/vm/_index.adoc:126
+msgid ""
+"NFS-based swap is perfectly acceptable on 4.X or later systems, but you must "
+"be aware that the NFS server will take the brunt of the paging load."
+msgstr ""
diff --git a/documentation/content/en/books/design-44bsd/_index.adoc b/documentation/content/en/books/design-44bsd/_index.adoc
index bc3b0057ea..bbfe3a1c00 100644
--- a/documentation/content/en/books/design-44bsd/_index.adoc
+++ b/documentation/content/en/books/design-44bsd/_index.adoc
@@ -10,6 +10,7 @@ description: Donated by Addison-Wesley, provides a design overview of 4.4BSD, fr
trademarks: ["design-44bsd"]
bookOrder: 60
tags: ["4.4BSD", "design", "operating system", "BSD", "UNIX"]
+layout: single
---
= The Design and Implementation of the 4.4BSD Operating System
@@ -284,7 +285,7 @@ The detailed design and implementation of signals is described in Section 4.7.
Processes are organized into _process groups_.
Process groups are used to control access to terminals and to provide a means of distributing signals to collections of related processes.
A process inherits its process group from its parent process.
-Mechanisms are provided by the kernel to allow a process to alter its process group or the process group of its descendents.
+Mechanisms are provided by the kernel to allow a process to alter its process group or the process group of its descendants.
Creating a new process group is easy; the value of a new process group is ordinarily the process identifier of the creating process.
The group of processes in a process group is sometimes referred to as a _job_ and is manipulated by high-level system software, such as the shell.
@@ -303,7 +304,7 @@ By changing the process-group identifier of the terminal, a shell can arbitrate
This arbitration is called _job control_ and is described, with process groups, in Section 4.8.
Just as a set of related processes can be collected into a process group, a set of process groups can be collected into a _session_.
-The main uses for sessions are to create an isolated environment for a daemon process and its children, and to collect together a user's login shell and the jobs that that shell spawns.
+The main uses for sessions are to create an isolated environment for a daemon process and its children, and to collect together a user's login shell and the jobs that shell spawns.
[[overview-memory-management]]
=== Memory Management
diff --git a/documentation/content/en/books/design-44bsd/_index.po b/documentation/content/en/books/design-44bsd/_index.po
new file mode 100644
index 0000000000..15849e1dfc
--- /dev/null
+++ b/documentation/content/en/books/design-44bsd/_index.po
@@ -0,0 +1,2591 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/design-44bsd/_index.adoc:1
+#, no-wrap
+msgid "Donated by Addison-Wesley, provides a design overview of 4.4BSD, from which FreeBSD was originally derived"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/design-44bsd/_index.adoc:1
+#: documentation/content/en/books/design-44bsd/_index.adoc:16
+#, no-wrap
+msgid "The Design and Implementation of the 4.4BSD Operating System"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:50
+msgid "'''"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/design-44bsd/_index.adoc:54
+#, no-wrap
+msgid "Design Overview of 4.4BSD"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/design-44bsd/_index.adoc:57
+#, no-wrap
+msgid "4.4BSD Facilities and the Kernel"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:61
+msgid ""
+"The 4.4BSD kernel provides four basic facilities: processes, a filesystem, "
+"communications, and system startup. This section outlines where each of "
+"these four basic services is described in this book."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:63
+msgid ""
+"Processes constitute a thread of control in an address space. Mechanisms for "
+"creating, terminating, and otherwise controlling processes are described in "
+"Chapter 4. The system multiplexes separate virtual-address spaces for each "
+"process; this memory management is discussed in Chapter 5."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:64
+msgid ""
+"The user interface to the filesystem and devices is similar; common aspects "
+"are discussed in Chapter 6. The filesystem is a set of named files, "
+"organized in a tree-structured hierarchy of directories, and of operations "
+"to manipulate them, as presented in Chapter 7. Files reside on physical "
+"media such as disks. 4.4BSD supports several organizations of data on the "
+"disk, as set forth in Chapter 8. Access to files on remote machines is the "
+"subject of Chapter 9. Terminals are used to access the system; their "
+"operation is the subject of Chapter 10."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:65
+msgid ""
+"Communication mechanisms provided by traditional UNIX systems include "
+"simplex reliable byte streams between related processes (see pipes, Section "
+"11.1), and notification of exceptional events (see signals, Section 4.7). "
+"4.4BSD also has a general interprocess-communication facility. This "
+"facility, described in Chapter 11, uses access mechanisms distinct from "
+"those of the filesystem, but, once a connection is set up, a process can "
+"access it as though it were a pipe. There is a general networking framework, "
+"discussed in Chapter 12, that is normally used as a layer underlying the IPC "
+"facility. Chapter 13 describes a particular networking implementation in "
+"detail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:66
+msgid ""
+"Any real operating system has operational issues, such as how to start it "
+"running. Startup and operational issues are described in Chapter 14."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:70
+msgid ""
+"Sections 2.3 through 2.14 present introductory material related to Chapters "
+"3 through 14. We shall define terms, mention basic system calls, and "
+"explore historical developments. Finally, we shall give the reasons for "
+"many major design decisions."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/design-44bsd/_index.adoc:71
+#, no-wrap
+msgid "The Kernel"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:78
+msgid ""
+"The _kernel_ is the part of the system that runs in protected mode and "
+"mediates access by all user programs to the underlying hardware (e.g., CPU, "
+"disks, terminals, network links) and software constructs (e.g., filesystem, "
+"network protocols). The kernel provides the basic system facilities; it "
+"creates and manages processes, and provides functions to access the "
+"filesystem and communication facilities. These functions, called _system "
+"calls_ appear to user processes as library subroutines. These system calls "
+"are the only interface that processes have to these facilities. Details of "
+"the system-call mechanism are given in Chapter 3, as are descriptions of "
+"several kernel mechanisms that do not execute as the direct result of a "
+"process doing a system call."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:82
+msgid ""
+"A _kernel_ in traditional operating-system terminology, is a small nucleus "
+"of software that provides only the minimal facilities necessary for "
+"implementing additional operating-system services. In contemporary research "
+"operating systems -- such as Chorus <<biblio-rozier, [Rozier et al, 1988]>>, "
+"Mach <<biblio-accetta, [Accetta et al, 1986]>>, Tunis <<biblio-ewens, [Ewens "
+"et al, 1985]>>, and the V Kernel <<biblio-cheriton, [Cheriton, 1988]>> -- "
+"this division of functionality is more than just a logical one. Services "
+"such as filesystems and networking protocols are implemented as client "
+"application processes of the nucleus or kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:90
+msgid ""
+"The 4.4BSD kernel is not partitioned into multiple processes. This basic "
+"design decision was made in the earliest versions of UNIX. The first two "
+"implementations by Ken Thompson had no memory mapping, and thus made no "
+"hardware-enforced distinction between user and kernel space <<biblio-"
+"ritchie, [Ritchie, 1988]>>. A message-passing system could have been "
+"implemented as readily as the actually implemented model of kernel and user "
+"processes. The monolithic kernel was chosen for simplicity and "
+"performance. And the early kernels were small; the inclusion of facilities "
+"such as networking into the kernel has increased its size. The current "
+"trend in operating-systems research is to reduce the kernel size by placing "
+"such services in user space."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:94
+msgid ""
+"Users ordinarily interact with the system through a command-language "
+"interpreter, called a _shell_, and perhaps through additional user "
+"application programs. Such programs and the shell are implemented with "
+"processes. Details of such programs are beyond the scope of this book, "
+"which instead concentrates almost exclusively on the kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:97
+msgid ""
+"Sections 2.3 and 2.4 describe the services provided by the 4.4BSD kernel, "
+"and give an overview of the latter's design. Later chapters describe the "
+"detailed design and implementation of these services as they appear in "
+"4.4BSD."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/design-44bsd/_index.adoc:99
+#, no-wrap
+msgid "Kernel Organization"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:102
+msgid ""
+"In this section, we view the organization of the 4.4BSD kernel in two ways:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:105
+msgid ""
+"As a static body of software, categorized by the functionality offered by "
+"the modules that make up the kernel"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:106
+msgid ""
+"By its dynamic operation, categorized according to the services provided to "
+"users"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:109
+msgid ""
+"The largest part of the kernel implements the system services that "
+"applications access through system calls. In 4.4BSD, this software has been "
+"organized according to the following:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:111
+msgid ""
+"Basic kernel facilities: timer and system-clock handling, descriptor "
+"management, and process management"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:112
+msgid "Memory-management support: paging and swapping"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:113
+msgid ""
+"Generic system interfaces: the I/O, control, and multiplexing operations "
+"performed on descriptors"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:114
+msgid ""
+"The filesystem: files, directories, pathname translation, file locking, and "
+"I/O buffer management"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:115
+msgid ""
+"Terminal-handling support: the terminal-interface driver and terminal line "
+"disciplines"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:116
+msgid "Interprocess-communication facilities: sockets"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:117
+msgid ""
+"Support for network communication: communication protocols and generic "
+"network facilities, such as routing"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/design-44bsd/_index.adoc:118
+#, no-wrap
+msgid "Machine-independent software in the 4.4BSD kernel"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:122
+#: documentation/content/en/books/design-44bsd/_index.adoc:162
+#, no-wrap
+msgid "Category"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:122
+#: documentation/content/en/books/design-44bsd/_index.adoc:162
+#, no-wrap
+msgid "Lines of code"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:123
+#: documentation/content/en/books/design-44bsd/_index.adoc:163
+#, no-wrap
+msgid "Percentage of kernel"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:123
+#, no-wrap
+msgid "headers"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:123
+#, no-wrap
+msgid "9,393"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:124
+#, no-wrap
+msgid "4.6"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:124
+#, no-wrap
+msgid "initialization"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:124
+#, no-wrap
+msgid "1,107"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:125
+#, no-wrap
+msgid "0.6"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:125
+#, no-wrap
+msgid "kernel facilities"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:125
+#, no-wrap
+msgid "8,793"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:126
+#, no-wrap
+msgid "4.4"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:126
+#, no-wrap
+msgid "generic interfaces"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:126
+#, no-wrap
+msgid "4,782"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:127
+#, no-wrap
+msgid "2.4"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:127
+#, no-wrap
+msgid "interprocess communication"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:127
+#, no-wrap
+msgid "4,540"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:128
+#: documentation/content/en/books/design-44bsd/_index.adoc:133
+#, no-wrap
+msgid "2.2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:128
+#, no-wrap
+msgid "terminal handling"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:128
+#, no-wrap
+msgid "3,911"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:129
+#, no-wrap
+msgid "1.9"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:129
+#: documentation/content/en/books/design-44bsd/_index.adoc:166
+#, no-wrap
+msgid "virtual memory"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:129
+#, no-wrap
+msgid "11,813"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:130
+#, no-wrap
+msgid "5.8"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:130
+#, no-wrap
+msgid "vnode management"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:130
+#, no-wrap
+msgid "7,954"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:131
+#, no-wrap
+msgid "3.9"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:131
+#, no-wrap
+msgid "filesystem naming"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:131
+#, no-wrap
+msgid "6,550"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:132
+#, no-wrap
+msgid "3.2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:132
+#, no-wrap
+msgid "fast filestore"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:132
+#, no-wrap
+msgid "4,365"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:133
+#, no-wrap
+msgid "log-structure filestore"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:133
+#, no-wrap
+msgid "4,337"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:134
+#: documentation/content/en/books/design-44bsd/_index.adoc:136
+#, no-wrap
+msgid "2.1"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:134
+#, no-wrap
+msgid "memory-based filestore"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:134
+#, no-wrap
+msgid "645"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:135
+#, no-wrap
+msgid "0.3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:135
+#, no-wrap
+msgid "cd9660 filesystem"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:135
+#, no-wrap
+msgid "4,177"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:136
+#, no-wrap
+msgid "miscellaneous filesystems (10)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:136
+#, no-wrap
+msgid "12,695"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:137
+#, no-wrap
+msgid "6.3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:137
+#, no-wrap
+msgid "network filesystem"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:137
+#, no-wrap
+msgid "17,199"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:138
+#, no-wrap
+msgid "8.5"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:138
+#, no-wrap
+msgid "network communication"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:138
+#, no-wrap
+msgid "8,630"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:139
+#, no-wrap
+msgid "4.3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:139
+#, no-wrap
+msgid "internet protocols"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:139
+#, no-wrap
+msgid "11,984"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:140
+#, no-wrap
+msgid "5.9"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:140
+#, no-wrap
+msgid "ISO protocols"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:140
+#, no-wrap
+msgid "23,924"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:141
+#, no-wrap
+msgid "11.8"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:141
+#, no-wrap
+msgid "X.25 protocols"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:141
+#, no-wrap
+msgid "10,626"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:142
+#, no-wrap
+msgid "5.3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:142
+#, no-wrap
+msgid "XNS protocols"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:142
+#, no-wrap
+msgid "5,192"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:143
+#, no-wrap
+msgid "2.6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:146
+msgid ""
+"Most of the software in these categories is machine independent and is "
+"portable across different hardware architectures."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:151
+msgid ""
+"The machine-dependent aspects of the kernel are isolated from the mainstream "
+"code. In particular, none of the machine-independent code contains "
+"conditional code for specific architecture. When an architecture-dependent "
+"action is needed, the machine-independent code calls an architecture-"
+"dependent function that is located in the machine-dependent code. The "
+"software that is machine dependent includes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:153
+msgid "Low-level system-startup actions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:154
+msgid "Trap and fault handling"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:155
+msgid "Low-level manipulation of the run-time context of a process"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:156
+msgid "Configuration and initialization of hardware devices"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:157
+msgid "Run-time support for I/O devices"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/design-44bsd/_index.adoc:158
+#, no-wrap
+msgid "Machine-dependent software for the HP300 in the 4.4BSD kernel"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:163
+#, no-wrap
+msgid "machine dependent headers"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:163
+#, no-wrap
+msgid "1,562"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:164
+#, no-wrap
+msgid "0.8"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:164
+#, no-wrap
+msgid "device driver headers"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:164
+#, no-wrap
+msgid "3,495"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:165
+#, no-wrap
+msgid "1.7"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:165
+#, no-wrap
+msgid "device driver source"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:165
+#, no-wrap
+msgid "17,506"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:166
+#, no-wrap
+msgid "8.7"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:166
+#, no-wrap
+msgid "3,087"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:167
+#: documentation/content/en/books/design-44bsd/_index.adoc:169
+#, no-wrap
+msgid "1.5"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:167
+#, no-wrap
+msgid "other machine dependent"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:167
+#, no-wrap
+msgid "6,287"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:168
+#, no-wrap
+msgid "3.1"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:168
+#, no-wrap
+msgid "routines in assembly language"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:168
+#, no-wrap
+msgid "3,014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:169
+#, no-wrap
+msgid "HP/UX compatibility"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:169
+#, no-wrap
+msgid "4,683"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/design-44bsd/_index.adoc:170
+#, no-wrap
+msgid "2.3"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:176
+msgid ""
+"<<table-mach-indep>> summarizes the machine-independent software that "
+"constitutes the 4.4BSD kernel for the HP300. The numbers in column 2 are "
+"for lines of C source code, header files, and assembly language. Virtually "
+"all the software in the kernel is written in the C programming language; "
+"less than 2 percent is written in assembly language. As the statistics in "
+"<<table-mach-dep>> show, the machine-dependent software, excluding HP/UX and "
+"device support, accounts for a minuscule 6.9 percent of the kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:182
+msgid ""
+"Only a small part of the kernel is devoted to initializing the system. This "
+"code is used when the system is _bootstrapped_ into operation and is "
+"responsible for setting up the kernel hardware and software environment (see "
+"Chapter 14). Some operating systems (especially those with limited physical "
+"memory) discard or _overlay_ the software that performs these functions "
+"after that software has been executed. The 4.4BSD kernel does not reclaim "
+"the memory used by the startup code because that memory space is barely 0.5 "
+"percent of the kernel resources used on a typical machine. Also, the "
+"startup code does not appear in one place in the kernel -- it is scattered "
+"throughout, and it usually appears in places logically associated with what "
+"is being initialized."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/design-44bsd/_index.adoc:184
+#, no-wrap
+msgid "Kernel Services"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:194
+msgid ""
+"The boundary between the kernel- and user-level code is enforced by hardware-"
+"protection facilities provided by the underlying hardware. The kernel "
+"operates in a separate address space that is inaccessible to user "
+"processes. Privileged operations -- such as starting I/O and halting the "
+"central processing unit (CPU) -- are available to only the kernel. "
+"Applications request services from the kernel with _system calls_. System "
+"calls are used to cause the kernel to execute complicated operations, such "
+"as writing data to secondary storage, and simple operations, such as "
+"returning the current time of day. All system calls appear _synchronous_ to "
+"applications: The application does not run while the kernel does the actions "
+"associated with a system call. The kernel may finish some operations "
+"associated with a system call after it has returned. For example, a _write_ "
+"system call will copy the data to be written from the user process to a "
+"kernel buffer while the process waits, but will usually return from the "
+"system call before the kernel buffer is written to the disk."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:203
+msgid ""
+"A system call usually is implemented as a hardware trap that changes the "
+"CPU's execution mode and the current address-space mapping. Parameters "
+"supplied by users in system calls are validated by the kernel before being "
+"used. Such checking ensures the integrity of the system. All parameters "
+"passed into the kernel are copied into the kernel's address space, to ensure "
+"that validated parameters are not changed as a side effect of the system "
+"call. System-call results are returned by the kernel, either in hardware "
+"registers or by their values being copied to user-specified memory "
+"addresses. Like parameters passed into the kernel, addresses used for the "
+"return of results must be validated to ensure that they are part of an "
+"application's address space. If the kernel encounters an error while "
+"processing a system call, it returns an error code to the user. For the C "
+"programming language, this error code is stored in the global variable "
+"_errno_, and the function that executed the system call returns the value -1."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:208
+msgid ""
+"User applications and the kernel operate independently of each other. "
+"4.4BSD does not store I/O control blocks or other operating-system-related "
+"data structures in the application's address space. Each user-level "
+"application is provided an independent address space in which it executes. "
+"The kernel makes most state changes, such as suspending a process while "
+"another is running, invisible to the processes involved."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/design-44bsd/_index.adoc:210
+#, no-wrap
+msgid "Process Management"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:219
+msgid ""
+"4.4BSD supports a multitasking environment. Each task or thread of "
+"execution is termed a _process_. The _context_ of a 4.4BSD process consists "
+"of user-level state, including the contents of its address space and the run-"
+"time environment, and kernel-level state, which includes scheduling "
+"parameters, resource controls, and identification information. The context "
+"includes everything used by the kernel in providing services for the "
+"process. Users can create processes, control the processes' execution, and "
+"receive notification when the processes' execution status changes. Every "
+"process is assigned a unique value, termed a _process identifier_ (PID). "
+"This value is used by the kernel to identify a process when reporting status "
+"changes to a user, and by a user when referencing a process in a system call."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:224
+msgid ""
+"The kernel creates a process by duplicating the context of another process. "
+"The new process is termed a _child process_ of the original _parent process_ "
+"The context duplicated in process creation includes both the user-level "
+"execution state of the process and the process's system state managed by the "
+"kernel. Important components of the kernel state are described in Chapter 4."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/design-44bsd/_index.adoc:226
+#, no-wrap
+msgid "Process lifecycle"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:228
+msgid "image:fig1.png[Process lifecycle]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:234
+msgid ""
+"The process lifecycle is depicted in <<fig-process-lifecycle>>. A process "
+"may create a new process that is a copy of the original by using the _fork_ "
+"system call. The _fork_ call returns twice: once in the parent process, "
+"where the return value is the process identifier of the child, and once in "
+"the child process, where the return value is 0. The parent-child "
+"relationship induces a hierarchical structure on the set of processes in the "
+"system. The new process shares all its parent's resources, such as file "
+"descriptors, signal-handling status, and memory layout."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:238
+msgid ""
+"Although there are occasions when the new process is intended to be a copy "
+"of the parent, the loading and execution of a different program is a more "
+"useful and typical action. A process can overlay itself with the memory "
+"image of another program, passing to the newly created image a set of "
+"parameters, using the system call _execve_. One parameter is the name of a "
+"file whose contents are in a format recognized by the system -- either a "
+"binary-executable file or a file that causes the execution of a specified "
+"interpreter program to process its contents."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:242
+msgid ""
+"A process may terminate by executing an _exit_ system call, sending 8 bits "
+"of exit status to its parent. If a process wants to communicate more than a "
+"single byte of information with its parent, it must either set up an "
+"interprocess-communication channel using pipes or sockets, or use an "
+"intermediate file. Interprocess communication is discussed extensively in "
+"Chapter 11."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:247
+msgid ""
+"A process can suspend execution until any of its child processes terminate "
+"using the _wait_ system call, which returns the PID and exit status of the "
+"terminated child process. A parent process can arrange to be notified by a "
+"signal when a child process exits or terminates abnormally. Using the "
+"_wait4_ system call, the parent can retrieve information about the event "
+"that caused termination of the child process and about resources consumed by "
+"the process during its lifetime. If a process is orphaned because its "
+"parent exits before it is finished, then the kernel arranges for the child's "
+"exit status to be passed back to a special system process _init_: see "
+"Sections 3.1 and 14.6)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:249
+msgid ""
+"The details of how the kernel creates and destroys processes are given in "
+"Chapter 5."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:253
+msgid ""
+"Processes are scheduled for execution according to a _process-priority_ "
+"parameter. This priority is managed by a kernel-based scheduling "
+"algorithm. Users can influence the scheduling of a process by specifying a "
+"parameter (_nice_) that weights the overall scheduling priority, but are "
+"still obligated to share the underlying CPU resources according to the "
+"kernel's scheduling policy."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/design-44bsd/_index.adoc:254
+#, no-wrap
+msgid "Signals"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:263
+msgid ""
+"The system defines a set of _signals_ that may be delivered to a process. "
+"Signals in 4.4BSD are modeled after hardware interrupts. A process may "
+"specify a user-level subroutine to be a _handler_ to which a signal should "
+"be delivered. When a signal is generated, it is blocked from further "
+"occurrence while it is being _caught_ by the handler. Catching a signal "
+"involves saving the current process context and building a new one in which "
+"to run the handler. The signal is then delivered to the handler, which can "
+"either abort the process or return to the executing process (perhaps after "
+"setting a global variable). If the handler returns, the signal is unblocked "
+"and can be generated (and caught) again."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:267
+msgid ""
+"Alternatively, a process may specify that a signal is to be _ignored_, or "
+"that a default action, as determined by the kernel, is to be taken. The "
+"default action of certain signals is to terminate the process. This "
+"termination may be accompanied by creation of a _core file_ that contains "
+"the current memory image of the process for use in postmortem debugging."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:270
+msgid ""
+"Some signals cannot be caught or ignored. These signals include _SIGKILL_, "
+"which kills runaway processes, and the job-control signal _SIGSTOP_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:275
+msgid ""
+"A process may choose to have signals delivered on a special stack so that "
+"sophisticated software stack manipulations are possible. For example, a "
+"language supporting coroutines needs to provide a stack for each coroutine. "
+"The language run-time system can allocate these stacks by dividing up the "
+"single stack provided by 4.4BSD. If the kernel does not support a separate "
+"signal stack, the space allocated for each coroutine must be expanded by the "
+"amount of space required to catch a signal."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:280
+msgid ""
+"All signals have the same _priority_. If multiple signals are pending "
+"simultaneously, the order in which signals are delivered to a process is "
+"implementation specific. Signal handlers execute with the signal that "
+"caused their invocation to be blocked, but other signals may yet occur. "
+"Mechanisms are provided so that processes can protect critical sections of "
+"code against the occurrence of specified signals."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:282
+msgid ""
+"The detailed design and implementation of signals is described in Section "
+"4.7."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/design-44bsd/_index.adoc:283
+#, no-wrap
+msgid "Process Groups and Sessions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:290
+msgid ""
+"Processes are organized into _process groups_. Process groups are used to "
+"control access to terminals and to provide a means of distributing signals "
+"to collections of related processes. A process inherits its process group "
+"from its parent process. Mechanisms are provided by the kernel to allow a "
+"process to alter its process group or the process group of its descendants. "
+"Creating a new process group is easy; the value of a new process group is "
+"ordinarily the process identifier of the creating process."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:294
+msgid ""
+"The group of processes in a process group is sometimes referred to as a "
+"_job_ and is manipulated by high-level system software, such as the shell. "
+"A common kind of job created by a shell is a _pipeline_ of several processes "
+"connected by pipes, such that the output of the first process is the input "
+"of the second, the output of the second is the input of the third, and so "
+"forth. The shell creates such a job by forking a process for each stage of "
+"the pipeline, then putting all those processes into a separate process group."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:297
+msgid ""
+"A user process can send a signal to each process in a process group, as well "
+"as to a single process. A process in a specific process group may receive "
+"software interrupts affecting the group, causing the group to suspend or "
+"resume execution, or to be interrupted or terminated."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:305
+msgid ""
+"A terminal has a process-group identifier assigned to it. This identifier "
+"is normally set to the identifier of a process group associated with the "
+"terminal. A job-control shell may create a number of process groups "
+"associated with the same terminal; the terminal is the _controlling "
+"terminal_ for each process in these groups. A process may read from a "
+"descriptor for its controlling terminal only if the terminal's process-group "
+"identifier matches that of the process. If the identifiers do not match, "
+"the process will be blocked if it attempts to read from the terminal. By "
+"changing the process-group identifier of the terminal, a shell can arbitrate "
+"a terminal among several different jobs. This arbitration is called _job "
+"control_ and is described, with process groups, in Section 4.8."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:308
+msgid ""
+"Just as a set of related processes can be collected into a process group, a "
+"set of process groups can be collected into a _session_. The main uses for "
+"sessions are to create an isolated environment for a daemon process and its "
+"children, and to collect together a user's login shell and the jobs that "
+"shell spawns."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/design-44bsd/_index.adoc:310
+#, no-wrap
+msgid "Memory Management"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:320
+msgid ""
+"Each process has its own private address space. The address space is "
+"initially divided into three logical segments: _text_, _data_, and _stack_. "
+"The text segment is read-only and contains the machine instructions of a "
+"program. The data and stack segments are both readable and writable. The "
+"data segment contains the initialized and uninitialized data portions of a "
+"program, whereas the stack segment holds the application's run-time stack. "
+"On most machines, the stack segment is extended automatically by the kernel "
+"as the process executes. A process can expand or contract its data segment "
+"by making a system call, whereas a process can change the size of its text "
+"segment only when the segment's contents are overlaid with data from the "
+"filesystem, or when debugging takes place. The initial contents of the "
+"segments of a child process are duplicates of the segments of a parent "
+"process."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:328
+msgid ""
+"The entire contents of a process address space do not need to be resident "
+"for a process to execute. If a process references a part of its address "
+"space that is not resident in main memory, the system _pages_ the necessary "
+"information into memory. When system resources are scarce, the system uses "
+"a two-level approach to maintain available resources. If a modest amount of "
+"memory is available, the system will take memory resources away from "
+"processes if these resources have not been used recently. Should there be a "
+"severe resource shortage, the system will resort to _swapping_ the entire "
+"context of a process to secondary storage. The _demand paging_ and "
+"_swapping_ done by the system are effectively transparent to processes. A "
+"process may, however, advise the system about expected future memory "
+"utilization as a performance aid."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/design-44bsd/_index.adoc:329
+#, no-wrap
+msgid "BSD Memory-Management Design Decisions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:335
+msgid ""
+"The support of large sparse address spaces, mapped files, and shared memory "
+"was a requirement for 4.2BSD. An interface was specified, called _mmap_, "
+"that allowed unrelated processes to request a shared mapping of a file into "
+"their address spaces. If multiple processes mapped the same file into their "
+"address spaces, changes to the file's portion of an address space by one "
+"process would be reflected in the area mapped by the other processes, as "
+"well as in the file itself. Ultimately, 4.2BSD was shipped without the "
+"_mmap_ interface, because of pressure to make other features, such as "
+"networking, available."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:339
+msgid ""
+"Further development of the _mmap_ interface continued during the work on "
+"4.3BSD. Over 40 companies and research groups participated in the "
+"discussions leading to the revised architecture that was described in the "
+"Berkeley Software Architecture Manual <<biblio-mckusick-1, [McKusick et al, "
+"1994]>>. Several of the companies have implemented the revised interface "
+"<<biblio-gingell, [Gingell et al, 1987]>>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:346
+msgid ""
+"Once again, time pressure prevented 4.3BSD from providing an implementation "
+"of the interface. Although the latter could have been built into the "
+"existing 4.3BSD virtual-memory system, the developers decided not to put it "
+"in because that implementation was nearly 10 years old. Furthermore, the "
+"original virtual-memory design was based on the assumption that computer "
+"memories were small and expensive, whereas disks were locally connected, "
+"fast, large, and inexpensive. Thus, the virtual-memory system was designed "
+"to be frugal with its use of memory at the expense of generating extra disk "
+"traffic. In addition, the 4.3BSD implementation was riddled with VAX memory-"
+"management hardware dependencies that impeded its portability to other "
+"computer architectures. Finally, the virtual-memory system was not designed "
+"to support the tightly coupled multiprocessors that are becoming "
+"increasingly common and important today."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:356
+msgid ""
+"Attempts to improve the old implementation incrementally seemed doomed to "
+"failure. A completely new design, on the other hand, could take advantage "
+"of large memories, conserve disk transfers, and have the potential to run on "
+"multiprocessors. Consequently, the virtual-memory system was completely "
+"replaced in 4.4BSD. The 4.4BSD virtual-memory system is based on the Mach "
+"2.0 VM system <<biblio-tevanian, [Tevanian, 1987]>>. with updates from Mach "
+"2.5 and Mach 3.0. It features efficient support for sharing, a clean "
+"separation of machine-independent and machine-dependent features, as well as "
+"(currently unused) multiprocessor support. Processes can map files anywhere "
+"in their address space. They can share parts of their address space by "
+"doing a shared mapping of the same file. Changes made by one process are "
+"visible in the address space of the other process, and also are written back "
+"to the file itself. Processes can also request private mappings of a file, "
+"which prevents any changes that they make from being visible to other "
+"processes mapping the file or being written back to the file itself."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:362
+msgid ""
+"Another issue with the virtual-memory system is the way that information is "
+"passed into the kernel when a system call is made. 4.4BSD always copies "
+"data from the process address space into a buffer in the kernel. For read "
+"or write operations that are transferring large quantities of data, doing "
+"the copy can be time consuming. An alternative to doing the copying is to "
+"remap the process memory into the kernel. The 4.4BSD kernel always copies "
+"the data for several reasons:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:364
+msgid ""
+"Often, the user data are not page aligned and are not a multiple of the "
+"hardware page length."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:365
+msgid ""
+"If the page is taken away from the process, it will no longer be able to "
+"reference that page. Some programs depend on the data remaining in the "
+"buffer even after those data have been written."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:366
+msgid ""
+"If the process is allowed to keep a copy of the page (as it is in current "
+"4.4BSD semantics), the page must be made _copy-on-write_. A copy-on-write "
+"page is one that is protected against being written by being made read-only. "
+"If the process attempts to modify the page, the kernel gets a write fault. "
+"The kernel then makes a copy of the page that the process can modify. "
+"Unfortunately, the typical process will immediately try to write new data to "
+"its output buffer, forcing the data to be copied anyway."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:367
+msgid ""
+"When pages are remapped to new virtual-memory addresses, most memory-"
+"management hardware requires that the hardware address-translation cache be "
+"purged selectively. The cache purges are often slow. The net effect is that "
+"remapping is slower than copying for blocks of data less than 4 to 8 Kbyte."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:370
+msgid ""
+"The biggest incentives for memory mapping are the needs for accessing big "
+"files and for passing large quantities of data between processes. The "
+"_mmap_ interface provides a way for both of these tasks to be done without "
+"copying."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/design-44bsd/_index.adoc:371
+#, no-wrap
+msgid "Memory Management Inside the Kernel"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:380
+msgid ""
+"The kernel often does allocations of memory that are needed for only the "
+"duration of a single system call. In a user process, such short-term memory "
+"would be allocated on the run-time stack. Because the kernel has a limited "
+"run-time stack, it is not feasible to allocate even moderate-sized blocks of "
+"memory on it. Consequently, such memory must be allocated through a more "
+"dynamic mechanism. For example, when the system must translate a pathname, "
+"it must allocate a 1-Kbyte buffer to hold the name. Other blocks of memory "
+"must be more persistent than a single system call, and thus could not be "
+"allocated on the stack even if there was space. An example is protocol-"
+"control blocks that remain throughout the duration of a network connection."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:388
+msgid ""
+"Demands for dynamic memory allocation in the kernel have increased as more "
+"services have been added. A generalized memory allocator reduces the "
+"complexity of writing code inside the kernel. Thus, the 4.4BSD kernel has a "
+"single memory allocator that can be used by any part of the system. It has "
+"an interface similar to the C library routines _malloc_ and _free_ that "
+"provide memory allocation to application programs <<biblio-mckusick-2, "
+"[McKusick & Karels, 1988]>>. Like the C library interface, the allocation "
+"routine takes a parameter specifying the size of memory that is needed. The "
+"range of sizes for memory requests is not constrained; however, physical "
+"memory is allocated and is not paged. The free routine takes a pointer to "
+"the storage being freed, but does not require the size of the piece of "
+"memory being freed."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/design-44bsd/_index.adoc:390
+#, no-wrap
+msgid "I/O System"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:394
+msgid ""
+"The basic model of the UNIX I/O system is a sequence of bytes that can be "
+"accessed either randomly or sequentially. There are no _access methods_ and "
+"no _control blocks_ in a typical UNIX user process."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:401
+msgid ""
+"Different programs expect various levels of structure, but the kernel does "
+"not impose structure on I/O. For instance, the convention for text files is "
+"lines of ASCII characters separated by a single newline character (the ASCII "
+"line-feed character), but the kernel knows nothing about this convention. "
+"For the purposes of most programs, the model is further simplified to being "
+"a stream of data bytes, or an _I/O stream_. It is this single common data "
+"form that makes the characteristic UNIX tool-based approach work <<biblio-"
+"kernighan, [Kernighan & Pike, 1984]>>. An I/O stream from one program can "
+"be fed as input to almost any other program. (This kind of traditional UNIX "
+"I/O stream should not be confused with the Eighth Edition stream I/O system "
+"or with the System V, Release 3 STREAMS, both of which can be accessed as "
+"traditional I/O streams.)"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/design-44bsd/_index.adoc:402
+#, no-wrap
+msgid "Descriptors and I/O"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:410
+msgid ""
+"UNIX processes use _descriptors_ to reference I/O streams. Descriptors are "
+"small unsigned integers obtained from the _open_ and _socket_ system calls. "
+"The _open_ system call takes as arguments the name of a file and a "
+"permission mode to specify whether the file should be open for reading or "
+"for writing, or for both. This system call also can be used to create a "
+"new, empty file. A _read_ or _write_ system call can be applied to a "
+"descriptor to transfer data. The _close_ system call can be used to "
+"deallocate any descriptor."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:413
+msgid ""
+"Descriptors represent underlying objects supported by the kernel, and are "
+"created by system calls specific to the type of object. In 4.4BSD, three "
+"kinds of objects can be represented by descriptors: files, pipes, and "
+"sockets."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:415
+msgid ""
+"A _file_ is a linear array of bytes with at least one name. A file exists "
+"until all its names are deleted explicitly and no process holds a descriptor "
+"for it. A process acquires a descriptor for a file by opening that file's "
+"name with the _open_ system call. I/O devices are accessed as files."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:416
+msgid ""
+"A _pipe_ is a linear array of bytes, as is a file, but it is used solely as "
+"an I/O stream, and it is unidirectional. It also has no name, and thus "
+"cannot be opened with _open_. Instead, it is created by the _pipe_ system "
+"call, which returns two descriptors, one of which accepts input that is sent "
+"to the other descriptor reliably, without duplication, and in order. The "
+"system also supports a named pipe or FIFO. A FIFO has properties identical "
+"to a pipe, except that it appears in the filesystem; thus, it can be opened "
+"using the _open_ system call. Two processes that wish to communicate each "
+"open the FIFO: One opens it for reading, the other for writing."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:417
+msgid ""
+"A _socket_ is a transient object that is used for interprocess "
+"communication; it exists only as long as some process holds a descriptor "
+"referring to it. A socket is created by the _socket_ system call, which "
+"returns a descriptor for it. There are different kinds of sockets that "
+"support various communication semantics, such as reliable delivery of data, "
+"preservation of message ordering, and preservation of message boundaries."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:419
+msgid ""
+"In systems before 4.2BSD, pipes were implemented using the filesystem; when "
+"sockets were introduced in 4.2BSD, pipes were reimplemented as sockets."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:425
+msgid ""
+"The kernel keeps for each process a _descriptor table_, which is a table "
+"that the kernel uses to translate the external representation of a "
+"descriptor into an internal representation. (The descriptor is merely an "
+"index into this table.) The descriptor table of a process is inherited from "
+"that process's parent, and thus access to the objects to which the "
+"descriptors refer also is inherited. The main ways that a process can "
+"obtain a descriptor are by opening or creation of an object, and by "
+"inheritance from the parent process. In addition, socket IPC allows passing "
+"of descriptors in messages between unrelated processes on the same machine."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:431
+msgid ""
+"Every valid descriptor has an associated _file offset_ in bytes from the "
+"beginning of the object. Read and write operations start at this offset, "
+"which is updated after each data transfer. For objects that permit random "
+"access, the file offset also may be set with the _lseek_ system call. "
+"Ordinary files permit random access, and some devices do, as well. Pipes "
+"and sockets do not."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:434
+msgid ""
+"When a process terminates, the kernel reclaims all the descriptors that were "
+"in use by that process. If the process was holding the final reference to "
+"an object, the object's manager is notified so that it can do any necessary "
+"cleanup actions, such as final deletion of a file or deallocation of a "
+"socket."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/design-44bsd/_index.adoc:435
+#, no-wrap
+msgid "Descriptor Management"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:442
+msgid ""
+"Most processes expect three descriptors to be open already when they start "
+"running. These descriptors are 0, 1, 2, more commonly known as _standard "
+"input_, _standard output_, and _standard error_, respectively. Usually, all "
+"three are associated with the user's terminal by the login process (see "
+"Section 14.6) and are inherited through _fork_ and _exec_ by processes run "
+"by the user. Thus, a program can read what the user types by reading "
+"standard input, and the program can send output to the user's screen by "
+"writing to standard output. The standard error descriptor also is open for "
+"writing and is used for error output, whereas standard output is used for "
+"ordinary output."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:446
+msgid ""
+"These (and other) descriptors can be mapped to objects other than the "
+"terminal; such mapping is called _I/O redirection_, and all the standard "
+"shells permit users to do it. The shell can direct the output of a program "
+"to a file by closing descriptor 1 (standard output) and opening the desired "
+"output file to produce a new descriptor 1. It can similarly redirect "
+"standard input to come from a file by closing descriptor 0 and opening the "
+"file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:452
+msgid ""
+"Pipes allow the output of one program to be input to another program without "
+"rewriting or even relinking of either program. Instead of descriptor 1 "
+"(standard output) of the source program being set up to write to the "
+"terminal, it is set up to be the input descriptor of a pipe. Similarly, "
+"descriptor 0 (standard input) of the sink program is set up to reference the "
+"output of the pipe, instead of the terminal keyboard. The resulting set of "
+"two processes and the connecting pipe is known as a _pipeline_. Pipelines "
+"can be arbitrarily long series of processes connected by pipes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:459
+msgid ""
+"The _open_, _pipe_, and _socket_ system calls produce new descriptors with "
+"the lowest unused number usable for a descriptor. For pipelines to work, "
+"some mechanism must be provided to map such descriptors into 0 and 1. The "
+"_dup_ system call creates a copy of a descriptor that points to the same "
+"file-table entry. The new descriptor is also the lowest unused one, but if "
+"the desired descriptor is closed first, _dup_ can be used to do the desired "
+"mapping. Care is required, however: If descriptor 1 is desired, and "
+"descriptor 0 happens also to have been closed, descriptor 0 will be the "
+"result. To avoid this problem, the system provides the _dup2_ system call; "
+"it is like _dup_, but it takes an additional argument specifying the number "
+"of the desired descriptor (if the desired descriptor was already open, "
+"_dup2_ closes it before reusing it)."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/design-44bsd/_index.adoc:460
+#, no-wrap
+msgid "Devices"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:466
+msgid ""
+"Hardware devices have filenames, and may be accessed by the user via the "
+"same system calls used for regular files. The kernel can distinguish a "
+"_device special file_ or _special file_, and can determine to what device it "
+"refers, but most processes do not need to make this determination. "
+"Terminals, printers, and tape drives are all accessed as though they were "
+"streams of bytes, like 4.4BSD disk files. Thus, device dependencies and "
+"peculiarities are kept in the kernel as much as possible, and even in the "
+"kernel most of them are segregated in the device drivers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:471
+msgid ""
+"Hardware devices can be categorized as either _structured_ or "
+"_unstructured_; they are known as _block_ or _character_ devices, "
+"respectively. Processes typically access devices through _special files_ in "
+"the filesystem. I/O operations to these files are handled by kernel-"
+"resident software modules termed _device drivers_. Most network-"
+"communication hardware devices are accessible through only the interprocess-"
+"communication facilities, and do not have special files in the filesystem "
+"name space, because the _raw-socket_ interface provides a more natural "
+"interface than does a special file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:475
+msgid ""
+"Structured or block devices are typified by disks and magnetic tapes, and "
+"include most random-access devices. The kernel supports read-modify-write-"
+"type buffering actions on block-oriented structured devices to allow the "
+"latter to be read and written in a totally random byte-addressed fashion, "
+"like regular files. Filesystems are created on block devices."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:479
+msgid ""
+"Unstructured devices are those devices that do not support a block "
+"structure. Familiar unstructured devices are communication lines, raster "
+"plotters, and unbuffered magnetic tapes and disks. Unstructured devices "
+"typically support large block I/O transfers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:482
+msgid ""
+"Unstructured files are called _character devices_ because the first of these "
+"to be implemented were terminal device drivers. The kernel interface to the "
+"driver for these devices proved convenient for other devices that were not "
+"block structured."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:488
+msgid ""
+"Device special files are created by the _mknod_ system call. There is an "
+"additional system call, _ioctl_, for manipulating the underlying device "
+"parameters of special files. The operations that can be done differ for "
+"each device. This system call allows the special characteristics of devices "
+"to be accessed, rather than overloading the semantics of other system "
+"calls. For example, there is an _ioctl_ on a tape drive to write an end-of-"
+"tape mark, instead of there being a special or modified version of _write_."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/design-44bsd/_index.adoc:489
+#, no-wrap
+msgid "Socket IPC"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:498
+msgid ""
+"The 4.2BSD kernel introduced an IPC mechanism more flexible than pipes, "
+"based on _sockets_. A socket is an endpoint of communication referred to by "
+"a descriptor, just like a file or a pipe. Two processes can each create a "
+"socket, and then connect those two endpoints to produce a reliable byte "
+"stream. Once connected, the descriptors for the sockets can be read or "
+"written by processes, just as the latter would do with a pipe. The "
+"transparency of sockets allows the kernel to redirect the output of one "
+"process to the input of another process residing on another machine. A "
+"major difference between pipes and sockets is that pipes require a common "
+"parent process to set up the communications channel. A connection between "
+"sockets can be set up by two unrelated processes, possibly residing on "
+"different machines."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:505
+msgid ""
+"System V provides local interprocess communication through FIFOs (also known "
+"as _named pipes_). FIFOs appear as an object in the filesystem that "
+"unrelated processes can open and send data through in the same way as they "
+"would communicate through a pipe. Thus, FIFOs do not require a common "
+"parent to set them up; they can be connected after a pair of processes are "
+"up and running. Unlike sockets, FIFOs can be used on only a local machine; "
+"they cannot be used to communicate between processes on different machines. "
+"FIFOs are implemented in 4.4BSD only because they are required by the "
+"POSIX.1 standard. Their functionality is a subset of the socket interface."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:512
+msgid ""
+"The socket mechanism requires extensions to the traditional UNIX I/O system "
+"calls to provide the associated naming and connection semantics. Rather "
+"than overloading the existing interface, the developers used the existing "
+"interfaces to the extent that the latter worked without being changed, and "
+"designed new interfaces to handle the added semantics. The _read_ and "
+"_write_ system calls were used for byte-stream type connections, but six new "
+"system calls were added to allow sending and receiving addressed messages "
+"such as network datagrams. The system calls for writing messages include "
+"_send_, _sendto_, and _sendmsg_. The system calls for reading messages "
+"include _recv_, _recvfrom_, and _recvmsg_. In retrospect, the first two in "
+"each class are special cases of the others; _recvfrom_ and _sendto_ probably "
+"should have been added as library interfaces to _recvmsg_ and _sendmsg_, "
+"respectively."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/design-44bsd/_index.adoc:513
+#, no-wrap
+msgid "Scatter/Gather I/O"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:519
+msgid ""
+"In addition to the traditional _read_ and _write_ system calls, 4.2BSD "
+"introduced the ability to do scatter/gather I/O. Scatter input uses the "
+"_readv_ system call to allow a single read to be placed in several different "
+"buffers. Conversely, the _writev_ system call allows several different "
+"buffers to be written in a single atomic write. Instead of passing a single "
+"buffer and length parameter, as is done with _read_ and _write_, the process "
+"passes in a pointer to an array of buffers and lengths, along with a count "
+"describing the size of the array."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:524
+msgid ""
+"This facility allows buffers in different parts of a process address space "
+"to be written atomically, without the need to copy them to a single "
+"contiguous buffer. Atomic writes are necessary in the case where the "
+"underlying abstraction is record based, such as tape drives that output a "
+"tape block on each write request. It is also convenient to be able to read "
+"a single request into several different buffers (such as a record header "
+"into one place and the data into another). Although an application can "
+"simulate the ability to scatter data by reading the data into a large buffer "
+"and then copying the pieces to their intended destinations, the cost of "
+"memory-to-memory copying in such cases often would more than double the "
+"running time of the affected application."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:527
+msgid ""
+"Just as _send_ and _recv_ could have been implemented as library interfaces "
+"to _sendto_ and _recvfrom_, it also would have been possible to simulate "
+"_read_ with _readv_ and _write_ with _writev_. However, _read_ and _write_ "
+"are used so much more frequently that the added cost of simulating them "
+"would not have been worthwhile."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/design-44bsd/_index.adoc:528
+#, no-wrap
+msgid "Multiple Filesystem Support"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:534
+msgid ""
+"With the expansion of network computing, it became desirable to support both "
+"local and remote filesystems. To simplify the support of multiple "
+"filesystems, the developers added a new virtual node or _vnode_ interface to "
+"the kernel. The set of operations exported from the vnode interface appear "
+"much like the filesystem operations previously supported by the local "
+"filesystem. However, they may be supported by a wide range of filesystem "
+"types:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:536
+msgid "Local disk-based filesystems"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:537
+msgid "Files imported using a variety of remote filesystem protocols"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:538
+msgid "Read-only CD-ROM filesystems"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:539
+msgid ""
+"Filesystems providing special-purpose interfaces -- for example, the `/proc` "
+"filesystem"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:542
+msgid ""
+"A few variants of 4.4BSD, such as FreeBSD, allow filesystems to be loaded "
+"dynamically when the filesystems are first referenced by the _mount_ system "
+"call. The vnode interface is described in Section 6.5; its ancillary "
+"support routines are described in Section 6.6; several of the special-"
+"purpose filesystems are described in Section 6.7."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/design-44bsd/_index.adoc:544
+#, no-wrap
+msgid "Filesystems"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:549
+msgid ""
+"A regular file is a linear array of bytes, and can be read and written "
+"starting at any byte in the file. The kernel distinguishes no record "
+"boundaries in regular files, although many programs recognize line-feed "
+"characters as distinguishing the ends of lines, and other programs may "
+"impose other structure. No system-related information about a file is kept "
+"in the file itself, but the filesystem stores a small amount of ownership, "
+"protection, and usage information with each file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:554
+msgid ""
+"A _filename_ component is a string of up to 255 characters. These filenames "
+"are stored in a type of file called a _directory_. The information in a "
+"directory about a file is called a _directory entry_ and includes, in "
+"addition to the filename, a pointer to the file itself. Directory entries "
+"may refer to other directories, as well as to plain files. A hierarchy of "
+"directories and files is thus formed, and is called a _filesystem_;"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/design-44bsd/_index.adoc:555
+#, no-wrap
+msgid "A small filesystem"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:558
+msgid "image:fig2.png[A small filesystem]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:563
+msgid ""
+"a small one is shown in <<fig-small-fs>>. Directories may contain "
+"subdirectories, and there is no inherent limitation to the depth with which "
+"directory nesting may occur. To protect the consistency of the filesystem, "
+"the kernel does not permit processes to write directly into directories. A "
+"filesystem may include not only plain files and directories, but also "
+"references to other objects, such as devices and sockets."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:568
+msgid ""
+"The filesystem forms a tree, the beginning of which is the _root directory_, "
+"sometimes referred to by the name _slash_, spelled with a single solidus "
+"character (/). The root directory contains files; in our example in Fig "
+"2.2, it contains `vmunix`, a copy of the kernel-executable object file. It "
+"also contains directories; in this example, it contains the `usr` "
+"directory. Within the `usr` directory is the `bin` directory, which mostly "
+"contains executable object code of programs, such as the files `ls` and `vi`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:573
+msgid ""
+"A process identifies a file by specifying that file's _pathname_, which is a "
+"string composed of zero or more filenames separated by slash (/) "
+"characters. The kernel associates two directories with each process for use "
+"in interpreting pathnames. A process's _root directory_ is the topmost "
+"point in the filesystem that the process can access; it is ordinarily set to "
+"the root directory of the entire filesystem. A pathname beginning with a "
+"slash is called an _absolute pathname_, and is interpreted by the kernel "
+"starting with the process's root directory."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:579
+msgid ""
+"A pathname that does not begin with a slash is called a _relative pathname_, "
+"and is interpreted relative to the _current working directory_ of the "
+"process. (This directory also is known by the shorter names _current "
+"directory_ or _working directory_.) The current directory itself may be "
+"referred to directly by the name _dot_, spelled with a single period (`.`) "
+"The filename _dot-dot_ (`..`) refers to a directory's parent directory. The "
+"root directory is its own parent."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:583
+msgid ""
+"A process may set its root directory with the _chroot_ system call, and its "
+"current directory with the _chdir_ system call. Any process may do _chdir_ "
+"at any time, but _chroot_ is permitted only a process with superuser "
+"privileges. _Chroot_ is normally used to set up restricted access to the "
+"system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:585
+msgid ""
+"Using the filesystem shown in Fig. 2.2, if a process has the root of the "
+"filesystem as its root directory, and has `/usr` as its current directory, "
+"it can refer to the file `vi` either from the root with the absolute "
+"pathname `/usr/bin/vi`, or from its current directory with the relative "
+"pathname `bin/vi`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:591
+msgid ""
+"System utilities and databases are kept in certain well-known directories. "
+"Part of the well-defined hierarchy includes a directory that contains the "
+"_home directory_ for each user -- for example, `/usr/staff/mckusick` and `/"
+"usr/staff/karels` in Fig. 2.2. When users log in, the current working "
+"directory of their shell is set to the home directory. Within their home "
+"directories, users can create directories as easily as they can regular "
+"files. Thus, a user can build arbitrarily complex subhierarchies."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:598
+msgid ""
+"The user usually knows of only one filesystem, but the system may know that "
+"this one virtual filesystem is really composed of several physical "
+"filesystems, each on a different device. A physical filesystem may not span "
+"multiple hardware devices. Since most physical disk devices are divided "
+"into several logical devices, there may be more than one filesystem per "
+"physical device, but there will be no more than one per logical device. One "
+"filesystem -- the filesystem that anchors all absolute pathnames -- is "
+"called the _root filesystem_, and is always available. Others may be "
+"mounted; that is, they may be integrated into the directory hierarchy of the "
+"root filesystem. References to a directory that has a filesystem mounted on "
+"it are converted transparently by the kernel into references to the root "
+"directory of the mounted filesystem."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:603
+msgid ""
+"The _link_ system call takes the name of an existing file and another name "
+"to create for that file. After a successful _link_, the file can be "
+"accessed by either filename. A filename can be removed with the _unlink_ "
+"system call. When the final name for a file is removed (and the final "
+"process that has the file open closes it), the file is deleted."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:610
+msgid ""
+"Files are organized hierarchically in _directories_. A directory is a type "
+"of file, but, in contrast to regular files, a directory has a structure "
+"imposed on it by the system. A process can read a directory as it would an "
+"ordinary file, but only the kernel is permitted to modify a directory. "
+"Directories are created by the _mkdir_ system call and are removed by the "
+"_rmdir_ system call. Before 4.2BSD, the _mkdir_ and _rmdir_ system calls "
+"were implemented by a series of _link_ and _unlink_ system calls being "
+"done. There were three reasons for adding systems calls explicitly to "
+"create and delete directories:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:613
+msgid ""
+"The operation could be made atomic. If the system crashed, the directory "
+"would not be left half-constructed, as could happen when a series of link "
+"operations were used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:614
+msgid ""
+"When a networked filesystem is being run, the creation and deletion of files "
+"and directories need to be specified atomically so that they can be "
+"serialized."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:615
+msgid ""
+"When supporting non-UNIX filesystems, such as an MS-DOS filesystem, on "
+"another partition of the disk, the other filesystem may not support link "
+"operations. Although other filesystems might support the concept of "
+"directories, they probably would not create and delete the directories with "
+"links, as the UNIX filesystem does. Consequently, they could create and "
+"delete directories only if explicit directory create and delete requests "
+"were presented."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:622
+msgid ""
+"The _chown_ system call sets the owner and group of a file, and _chmod_ "
+"changes protection attributes. _Stat_ applied to a filename can be used to "
+"read back such properties of a file. The _fchown_, _fchmod_, and _fstat_ "
+"system calls are applied to a descriptor, instead of to a filename, to do "
+"the same set of operations. The _rename_ system call can be used to give a "
+"file a new name in the filesystem, replacing one of the file's old names. "
+"Like the directory-creation and directory-deletion operations, the _rename_ "
+"system call was added to 4.2BSD to provide atomicity to name changes in the "
+"local filesystem. Later, it proved useful explicitly to export renaming "
+"operations to foreign filesystems and over the network."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:627
+msgid ""
+"The _truncate_ system call was added to 4.2BSD to allow files to be "
+"shortened to an arbitrary offset. The call was added primarily in support "
+"of the Fortran run-time library, which has the semantics such that the end "
+"of a random-access file is set to be wherever the program most recently "
+"accessed that file. Without the _truncate_ system call, the only way to "
+"shorten a file was to copy the part that was desired to a new file, to "
+"delete the old file, then to rename the copy to the original name. As well "
+"as this algorithm being slow, the library could potentially fail on a full "
+"filesystem."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:630
+msgid ""
+"Once the filesystem had the ability to shorten files, the kernel took "
+"advantage of that ability to shorten large empty directories. The advantage "
+"of shortening empty directories is that it reduces the time spent in the "
+"kernel searching them when names are being created or deleted."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:634
+msgid ""
+"Newly created files are assigned the user identifier of the process that "
+"created them and the group identifier of the directory in which they were "
+"created. A three-level access-control mechanism is provided for the "
+"protection of files. These three levels specify the accessibility of a file "
+"to"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:637
+msgid "The user who owns the file"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:638
+msgid "The group that owns the file"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:639
+msgid "Everyone else"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:641
+msgid ""
+"Each level of access has separate indicators for read permission, write "
+"permission, and execute permission."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:651
+msgid ""
+"Files are created with zero length, and may grow when they are written. "
+"While a file is open, the system maintains a pointer into the file "
+"indicating the current location in the file associated with the descriptor. "
+"This pointer can be moved about in the file in a random-access fashion. "
+"Processes sharing a file descriptor through a _fork_ or _dup_ system call "
+"share the current location pointer. Descriptors created by separate _open_ "
+"system calls have separate current location pointers. Files may have "
+"_holes_ in them. Holes are void areas in the linear extent of the file "
+"where data have never been written. A process can create these holes by "
+"positioning the pointer past the current end-of-file and writing. When "
+"read, holes are treated by the system as zero-valued bytes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:657
+msgid ""
+"Earlier UNIX systems had a limit of 14 characters per filename component. "
+"This limitation was often a problem. For example, in addition to the "
+"natural desire of users to give files long descriptive names, a common way "
+"of forming filenames is as `basename.extension`, where the extension "
+"(indicating the kind of file, such as `.c` for C source or `.o` for "
+"intermediate binary object) is one to three characters, leaving 10 to 12 "
+"characters for the basename. Source-code-control systems and editors "
+"usually take up another two characters, either as a prefix or a suffix, for "
+"their purposes, leaving eight to 10 characters. It is easy to use 10 or 12 "
+"characters in a single English word as a basename (e.g., `multiplexer`)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:662
+msgid ""
+"It is possible to keep within these limits, but it is inconvenient or even "
+"dangerous, because other UNIX systems accept strings longer than the limit "
+"when creating files, but then _truncate_ to the limit. A C language source "
+"file named `multiplexer.c` (already 13 characters) might have a source-code-"
+"control file with `s.` prepended, producing a filename `s.multiplexer` that "
+"is indistinguishable from the source-code-control file for `multiplexer.ms`, "
+"a file containing `troff` source for documentation for the C program. The "
+"contents of the two original files could easily get confused with no warning "
+"from the source-code-control system. Careful coding can detect this "
+"problem, but the long filenames first introduced in 4.2BSD practically "
+"eliminate it."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/design-44bsd/_index.adoc:664
+#, no-wrap
+msgid "Filestores"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:669
+msgid ""
+"The operations defined for local filesystems are divided into two parts. "
+"Common to all local filesystems are hierarchical naming, locking, quotas, "
+"attribute management, and protection. These features are independent of how "
+"the data will be stored. 4.4BSD has a single implementation to provide these "
+"semantics."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:672
+msgid ""
+"The other part of the local filesystem is the organization and management of "
+"the data on the storage media. Laying out the contents of files on the "
+"storage media is the responsibility of the filestore. 4.4BSD supports three "
+"different filestore layouts:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:674
+msgid "The traditional Berkeley Fast Filesystem"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:675
+msgid ""
+"The log-structured filesystem, based on the Sprite operating-system design "
+"<<biblio-rosenblum, [Rosenblum & Ousterhout, 1992]>>"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:676
+msgid "A memory-based filesystem"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:678
+msgid ""
+"Although the organizations of these filestores are completely different, "
+"these differences are indistinguishable to the processes using the "
+"filestores."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:683
+msgid ""
+"The Fast Filesystem organizes data into cylinder groups. Files that are "
+"likely to be accessed together, based on their locations in the filesystem "
+"hierarchy, are stored in the same cylinder group. Files that are not "
+"expected to accessed together are moved into different cylinder groups. "
+"Thus, files written at the same time may be placed far apart on the disk."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:688
+msgid ""
+"The log-structured filesystem organizes data as a log. All data being "
+"written at any point in time are gathered together, and are written at the "
+"same disk location. Data are never overwritten; instead, a new copy of the "
+"file is written that replaces the old one. The old files are reclaimed by a "
+"garbage-collection process that runs when the filesystem becomes full and "
+"additional free space is needed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:692
+msgid ""
+"The memory-based filesystem is designed to store data in virtual memory. It "
+"is used for filesystems that need to support fast but temporary data, such "
+"as `/tmp`. The goal of the memory-based filesystem is to keep the storage "
+"packed as compactly as possible to minimize the usage of virtual-memory "
+"resources."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/design-44bsd/_index.adoc:694
+#, no-wrap
+msgid "Network Filesystem"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:700
+msgid ""
+"Initially, networking was used to transfer data from one machine to "
+"another. Later, it evolved to allowing users to log in remotely to another "
+"machine. The next logical step was to bring the data to the user, instead "
+"of having the user go to the data -- and network filesystems were born. "
+"Users working locally do not experience the network delays on each "
+"keystroke, so they have a more responsive environment."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:706
+msgid ""
+"Bringing the filesystem to a local machine was among the first of the major "
+"client-server applications. The _server_ is the remote machine that exports "
+"one or more of its filesystems. The _client_ is the local machine that "
+"imports those filesystems. From the local client's point of view, a "
+"remotely mounted filesystem appears in the file-tree name space just like "
+"any other locally mounted filesystem. Local clients can change into "
+"directories on the remote filesystem, and can read, write, and execute "
+"binaries within that remote filesystem identically to the way that they can "
+"do these operations on a local filesystem."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:711
+msgid ""
+"When the local client does an operation on a remote filesystem, the request "
+"is packaged and is sent to the server. The server does the requested "
+"operation and returns either the requested information or an error "
+"indicating why the request was denied. To get reasonable performance, the "
+"client must cache frequently accessed data. The complexity of remote "
+"filesystems lies in maintaining cache consistency between the server and its "
+"many clients."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:715
+msgid ""
+"Although many remote-filesystem protocols have been developed over the "
+"years, the most pervasive one in use among UNIX systems is the Network "
+"Filesystem (NFS), whose protocol and most widely used implementation were "
+"done by Sun Microsystems. The 4.4BSD kernel supports the NFS protocol, "
+"although the implementation was done independently from the protocol "
+"specification <<biblio-macklem, [Macklem, 1994]>>. The NFS protocol is "
+"described in Chapter 9."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/design-44bsd/_index.adoc:717
+#, no-wrap
+msgid "Terminals"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:722
+msgid ""
+"Terminals support the standard system I/O operations, as well as a "
+"collection of terminal-specific operations to control input-character "
+"editing and output delays. At the lowest level are the terminal device "
+"drivers that control the hardware terminal ports. Terminal input is handled "
+"according to the underlying communication characteristics, such as baud "
+"rate, and according to a set of software-controllable parameters, such as "
+"parity checking."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:726
+msgid ""
+"Layered above the terminal device drivers are line disciplines that provide "
+"various degrees of character processing. The default line discipline is "
+"selected when a port is being used for an interactive login. The line "
+"discipline is run in _canonical mode_; input is processed to provide "
+"standard line-oriented editing functions, and input is presented to a "
+"process on a line-by-line basis."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:730
+msgid ""
+"Screen editors and programs that communicate with other computers generally "
+"run in _noncanonical mode_ (also commonly referred to as _raw mode_ or "
+"_character-at-a-time mode_). In this mode, input is passed through to the "
+"reading process immediately and without interpretation. All special-"
+"character input processing is disabled, no erase or other line editing "
+"processing is done, and all characters are passed to the program that is "
+"reading from the terminal."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:733
+msgid ""
+"It is possible to configure the terminal in thousands of combinations "
+"between these two extremes. For example, a screen editor that wanted to "
+"receive user interrupts asynchronously might enable the special characters "
+"that generate signals and enable output flow control, but otherwise run in "
+"noncanonical mode; all other characters would be passed through to the "
+"process uninterpreted."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:735
+msgid ""
+"On output, the terminal handler provides simple formatting services, "
+"including"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:737
+msgid ""
+"Converting the line-feed character to the two-character carriage-return-line-"
+"feed sequence"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:738
+msgid "Inserting delays after certain standard control characters"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:739
+msgid "Expanding tabs"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:740
+msgid ""
+"Displaying echoed nongraphic ASCII characters as a two-character sequence of "
+"the form `^C` (i.e., the ASCII caret character followed by the ASCII "
+"character that is the character's value offset from the ASCII `@` character)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:742
+msgid ""
+"Each of these formatting services can be disabled individually by a process "
+"through control requests."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/design-44bsd/_index.adoc:744
+#, no-wrap
+msgid "Interprocess Communication"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:748
+msgid ""
+"Interprocess communication in 4.4BSD is organized in _communication "
+"domains_. Domains currently supported include the _local domain_, for "
+"communication between processes executing on the same machine; the _internet "
+"domain_, for communication between processes using the TCP/IP protocol suite "
+"(perhaps within the Internet); the ISO/OSI protocol family for communication "
+"between sites required to run them; and the _XNS domain_, for communication "
+"between processes using the XEROX Network Systems (XNS) protocols."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:752
+msgid ""
+"Within a domain, communication takes place between communication endpoints "
+"known as _sockets_. As mentioned in Section 2.6, the _socket_ system call "
+"creates a socket and returns a descriptor; other IPC system calls are "
+"described in Chapter 11. Each socket has a type that defines its "
+"communications semantics; these semantics include properties such as "
+"reliability, ordering, and prevention of duplication of messages."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:756
+msgid ""
+"Each socket has associated with it a _communication protocol_. This "
+"protocol provides the semantics required by the socket according to the "
+"latter's type. Applications may request a specific protocol when creating a "
+"socket, or may allow the system to select a protocol that is appropriate for "
+"the type of socket being created."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:760
+msgid ""
+"Sockets may have addresses bound to them. The form and meaning of socket "
+"addresses are dependent on the communication domain in which the socket is "
+"created. Binding a name to a socket in the local domain causes a file to be "
+"created in the filesystem."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:765
+msgid ""
+"Normal data transmitted and received through sockets are untyped. Data-"
+"representation issues are the responsibility of libraries built on top of "
+"the interprocess-communication facilities. In addition to transporting "
+"normal data, communication domains may support the transmission and "
+"reception of specially typed data, termed _access rights_. The local "
+"domain, for example, uses this facility to pass descriptors between "
+"processes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:771
+msgid ""
+"Networking implementations on UNIX before 4.2BSD usually worked by "
+"overloading the character-device interfaces. One goal of the socket "
+"interface was for naive programs to be able to work without change on stream-"
+"style connections. Such programs can work only if the _read_ and _write_ "
+"systems calls are unchanged. Consequently, the original interfaces were "
+"left intact, and were made to work on stream-type sockets. A new interface "
+"was added for more complicated sockets, such as those used to send "
+"datagrams, with which a destination address must be presented with each "
+"_send_ call."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:776
+msgid ""
+"Another benefit is that the new interface is highly portable. Shortly after "
+"a test release was available from Berkeley, the socket interface had been "
+"ported to System III by a UNIX vendor (although AT&T did not support the "
+"socket interface until the release of System V Release 4, deciding instead "
+"to use the Eighth Edition stream mechanism). The socket interface was also "
+"ported to run in many Ethernet boards by vendors, such as Excelan and "
+"Interlan, that were selling into the PC market, where the machines were too "
+"small to run networking in the main processor. More recently, the socket "
+"interface was used as the basis for Microsoft's Winsock networking interface "
+"for Windows."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/design-44bsd/_index.adoc:778
+#, no-wrap
+msgid "Network Communication"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:783
+msgid ""
+"Some of the communication domains supported by the _socket_ IPC mechanism "
+"provide access to network protocols. These protocols are implemented as a "
+"separate software layer logically below the socket software in the kernel. "
+"The kernel provides many ancillary services, such as buffer management, "
+"message routing, standardized interfaces to the protocols, and interfaces to "
+"the network interface drivers for the use of the various network protocols."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:792
+msgid ""
+"At the time that 4.2BSD was being implemented, there were many networking "
+"protocols in use or under development, each with its own strengths and "
+"weaknesses. There was no clearly superior protocol or protocol suite. By "
+"supporting multiple protocols, 4.2BSD could provide interoperability and "
+"resource sharing among the diverse set of machines that was available in the "
+"Berkeley environment. Multiple-protocol support also provides for future "
+"changes. Today's protocols designed for 10- to 100-Mbit-per-second "
+"Ethernets are likely to be inadequate for tomorrow's 1- to 10-Gbit-per-"
+"second fiber-optic networks. Consequently, the network-communication layer "
+"is designed to support multiple protocols. New protocols are added to the "
+"kernel without the support for older protocols being affected. Older "
+"applications can continue to operate using the old protocol over the same "
+"physical network as is used by newer applications running with a newer "
+"network protocol."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/design-44bsd/_index.adoc:794
+#, no-wrap
+msgid "Network Implementation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:801
+msgid ""
+"The first protocol suite implemented in 4.2BSD was DARPA's Transmission "
+"Control Protocol/Internet Protocol (TCP/IP). The CSRG chose TCP/IP as the "
+"first network to incorporate into the socket IPC framework, because a 4.1BSD-"
+"based implementation was publicly available from a DARPA-sponsored project "
+"at Bolt, Beranek, and Newman (BBN). That was an influential choice: The "
+"4.2BSD implementation is the main reason for the extremely widespread use of "
+"this protocol suite. Later performance and capability improvements to the "
+"TCP/IP implementation have also been widely adopted. The TCP/IP "
+"implementation is described in detail in Chapter 13."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:804
+msgid ""
+"The release of 4.3BSD added the Xerox Network Systems (XNS) protocol suite, "
+"partly building on work done at the University of Maryland and at Cornell "
+"University. This suite was needed to connect isolated machines that could "
+"not communicate using TCP/IP."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:810
+msgid ""
+"The release of 4.4BSD added the ISO protocol suite because of the latter's "
+"increasing visibility both within and outside the United States. Because of "
+"the somewhat different semantics defined for the ISO protocols, some minor "
+"changes were required in the socket interface to accommodate these "
+"semantics. The changes were made such that they were invisible to clients "
+"of other existing protocols. The ISO protocols also required extensive "
+"addition to the two-level routing tables provided by the kernel in 4.3BSD. "
+"The greatly expanded routing capabilities of 4.4BSD include arbitrary levels "
+"of routing with variable-length addresses and network masks."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/design-44bsd/_index.adoc:812
+#, no-wrap
+msgid "System Operation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:820
+msgid ""
+"Bootstrapping mechanisms are used to start the system running. First, the "
+"4.4BSD kernel must be loaded into the main memory of the processor. Once "
+"loaded, it must go through an initialization phase to set the hardware into "
+"a known state. Next, the kernel must do autoconfiguration, a process that "
+"finds and configures the peripherals that are attached to the processor. "
+"The system begins running in single-user mode while a start-up script does "
+"disk checks and starts the accounting and quota checking. Finally, the "
+"start-up script starts the general system services and brings up the system "
+"to full multiuser operation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:824
+msgid ""
+"During multiuser operation, processes wait for login requests on the "
+"terminal lines and network ports that have been configured for user access. "
+"When a login request is detected, a login process is spawned and user "
+"validation is done. When the login validation is successful, a login shell "
+"is created from which the user can run additional processes."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/design-44bsd/_index.adoc:829
+#, no-wrap
+msgid "References"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:832
+msgid ""
+"[[biblio-accetta]] Accetta et al, 1986 Mach: A New Kernel Foundation for "
+"UNIX Development\" M.Accetta R.Baron W.Bolosky D.Golub R.Rashid A.Tevanian M."
+"Young 93-113 USENIX Association Conference Proceedings USENIX Association "
+"June 1986"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:834
+msgid ""
+"[[biblio-cheriton]] Cheriton, 1988 The V Distributed System D. R.Cheriton "
+"314-333 Comm ACM, 31, 3 March 1988"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:836
+msgid ""
+"[[biblio-ewens]] Ewens et al, 1985 Tunis: A Distributed Multiprocessor "
+"Operating System P.Ewens D. R.Blythe M.Funkenhauser R. C.Holt 247-254 USENIX "
+"Assocation Conference Proceedings USENIX Association June 1985"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:838
+msgid ""
+"[[biblio-gingell]] Gingell et al, 1987 Virtual Memory Architecture in SunOS "
+"R.Gingell J.Moran W.Shannon 81-94 USENIX Association Conference Proceedings "
+"USENIX Association June 1987"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:840
+msgid ""
+"[[biblio-kernighan]] Kernighan & Pike, 1984 The UNIX Programming Environment "
+"B. W.Kernighan R.Pike Prentice-Hall Englewood Cliffs NJ 1984"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:842
+msgid ""
+"[[biblio-macklem]] Macklem, 1994 The 4.4BSD NFS Implementation R.Macklem "
+"6:1-14 4.4BSD System Manager's Manual O'Reilly & Associates, Inc. Sebastopol "
+"CA 1994"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:844
+msgid ""
+"[[biblio-mckusick-2]] McKusick & Karels, 1988 Design of a General Purpose "
+"Memory Allocator for the 4.3BSD UNIX Kernel M. K.McKusick M. J.Karels "
+"295-304 USENIX Assocation Conference Proceedings USENIX Assocation June 1998"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:846
+msgid ""
+"[[biblio-mckusick-1]] McKusick et al, 1994 Berkeley Software Architecture "
+"Manual, 4.4BSD Edition M. K.McKusick M. J.Karels S. J.Leffler W. N.Joy R. S."
+"Faber 5:1-42 4.4BSD Programmer's Supplementary Documents O'Reilly & "
+"Associates, Inc. Sebastopol CA 1994"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:848
+msgid ""
+"[[biblio-ritchie]] Ritchie, 1988 Early Kernel Design private communication "
+"D. M.Ritchie March 1988"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:850
+msgid ""
+"[[biblio-rosenblum]] Rosenblum & Ousterhout, 1992 The Design and "
+"Implementation of a Log-Structured File System M.Rosenblum K.Ousterhout "
+"26-52 ACM Transactions on Computer Systems, 10, 1 Association for Computing "
+"Machinery February 1992"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:852
+msgid ""
+"[[biblio-rozier]] Rozier et al, 1988 Chorus Distributed Operating Systems M."
+"Rozier V.Abrossimov F.Armand I.Boule M.Gien M.Guillemont F.Herrmann C.Kaiser "
+"S.Langlois P.Leonard W.Neuhauser 305-370 USENIX Computing Systems, 1, 4 Fall "
+"1988"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/design-44bsd/_index.adoc:853
+msgid ""
+"[[biblio-tevanian]] Tevanian, 1987 Architecture-Independent Virtual Memory "
+"Management for Parallel and Distributed Environments: The Mach Approach "
+"Technical Report CMU-CS-88-106, A.Tevanian Department of Computer Science, "
+"Carnegie-Mellon University Pittsburgh PA December 1987"
+msgstr ""
diff --git a/documentation/content/en/books/dev-model/_index.adoc b/documentation/content/en/books/dev-model/_index.adoc
index 374e9b484a..68b248eeb3 100644
--- a/documentation/content/en/books/dev-model/_index.adoc
+++ b/documentation/content/en/books/dev-model/_index.adoc
@@ -1,12 +1,13 @@
---
title: A project model for the FreeBSD Project
-authors:
+authors:
- author: Niklas Saers
-copyright: Copyright © 2002-2005 Niklas Saers
+copyright: 2002-2005 Niklas Saers
description: A formal study of the organization of the FreeBSD project
-trademarks: ["freebsd", "ibm", "ieee", "adobe", "intel", "linux", "microsoft", "opengroup", "sun", "netbsd", "general"]
+trademarks: ["freebsd", "ibm", "ieee", "adobe", "intel", "linux", "microsoft", "opengroup", "sun", "netbsd", "general"]
bookOrder: 45
tags: ["model", "project model", "FreeBSD"]
+layout: single
---
////
@@ -102,25 +103,25 @@ I would like to thank the following people for taking the time to explain things
[[overview]]
== Overview
A project model is a means to reduce the communications overhead in a project.
-As shown by [<<brooks, Brooks, 1995>>], increasing the number of project participants increases the communication in the project exponentionally.
+As shown by [<<brooks, Brooks, 1995>>], increasing the number of project participants increases the communication in the project exponentionally.
FreeBSD has during the past few years increased both its mass of active users and committers, and the communication in the project has risen accordingly.
-This project model will serve to reduce this overhead by providing an up-to-date description of the project.
+This project model will serve to reduce this overhead by providing an up-to-date description of the project.
During the Core elections in 2002, Mark Murray stated "I am opposed to a long rule-book, as that satisfies lawyer-tendencies, and is counter to the technocentricity that the project so badly needs."
[<<bsd-election2002, FreeBSD, 2002B>>].
This project model is not meant to be a tool to justify creating impositions for developers, but as a tool to facilitate coordination.
It is meant as a description of the project, with an overview of how the different processes are executed.
-It is an introduction to how the FreeBSD project works.
+It is an introduction to how the FreeBSD project works.
The FreeBSD project model will be described as of July 1st, 2004.
-It is based on the Niels Jørgensen's paper [<<jorgensen2001, Jørgensen, 2001>>], FreeBSD's official documents, discussions on FreeBSD mailing lists and interviews with developers.
+It is based on the Niels Jørgensen's paper [<<jorgensen2001, Jørgensen, 2001>>], FreeBSD's official documents, discussions on FreeBSD mailing lists and interviews with developers.
After providing definitions of terms used, this document will outline the organisational structure (including role descriptions and communication lines), discuss the methodology model and after presenting the tools used for process control, it will present the defined processes.
-Finally it will outline major sub-projects of the FreeBSD project.
+Finally it will outline major sub-projects of the FreeBSD project.
[<<freebsd-developer-handbook, FreeBSD, 2002A>>] Section 1.2 and 1.3 give the vision and the architectural guidelines for the project.
The vision is "To produce the best UNIX-like operating system package possible, with due respect to the original software tools ideology as well as usability, performance and stability."
-The architectural guidelines help determine whether a problem that someone wants to be solved is within the scope of the project
+The architectural guidelines help determine whether a problem that someone wants to be solved is within the scope of the project
[[definitions]]
== Definitions
@@ -130,14 +131,14 @@ The architectural guidelines help determine whether a problem that someone wants
An "activity" is an element of work performed during the course of a project [<<ref-pmbok, PMI, 2000>>].
It has an output and leads towards an outcome.
-Such an output can either be an input to another activity or a part of the process' delivery.
+Such an output can either be an input to another activity or a part of the process' delivery.
[[def-process]]
=== Process
A "process" is a series of activities that lead towards a particular outcome.
A process can consist of one or more sub-processes.
-An example of a process is software design.
+An example of a process is software design.
[[ref-hat]]
=== Hat
@@ -145,7 +146,7 @@ An example of a process is software design.
A "hat" is synonymous with role.
A hat has certain responsibilities in a process and for the process outcome.
The hat executes activities.
-It is well defined what issues the hat should be contacted about by the project members and people outside the project.
+It is well defined what issues the hat should be contacted about by the project members and people outside the project.
[[ref-outcome]]
=== Outcome
@@ -153,7 +154,7 @@ It is well defined what issues the hat should be contacted about by the project
An "outcome" is the final output of the process.
This is synonymous with deliverable, that is defined as "any measurable, tangible, verifiable outcome, result or item that must be produced to complete a project or part of a project.
Often used more narrowly in reference to an external deliverable, which is a deliverable that is subject to approval by the project sponsor or customer" by [<<ref-pmbok, PMI, 2000>>].
-Examples of outcomes are a piece of software, a decision made or a report written.
+Examples of outcomes are a piece of software, a decision made or a report written.
[[ref-freebsd]]
=== FreeBSD
@@ -163,9 +164,9 @@ When saying "FreeBSD" we will mean the BSD derivative UNIX-like operating system
[[model-orgstruct]]
== Organisational structure
-While no-one takes ownership of FreeBSD, the FreeBSD organisation is divided into core, committers and contributors and is part of the FreeBSD community that lives around it.
+While no-one takes ownership of FreeBSD, the FreeBSD organisation is divided into core, committers and contributors and is part of the FreeBSD community that lives around it.
-The FreeBSD Project's structure (in order of descending authority)
+The FreeBSD Project's structure (in order of descending authority)
[.informaltable]
[cols="1,1", options="header"]
@@ -177,30 +178,30 @@ The FreeBSD Project's structure (in order of descending authority)
|9
|Committers
-|269
+|318
|Contributors
|~3000
|===
-Number of committers has been determined by going through CVS logs from January 1st, 2004 to December 31st, 2004 and contributors by going through the list of contributions and problem reports.
+Number of committers has been determined by going through CVS logs from January 1st, 2004 to December 31st, 2004 and contributors by going through the list of contributions and problem reports.
The main resource in the FreeBSD community is its developers: the committers and contributors.
It is with their contributions that the project can move forward.
Regular developers are referred to as contributors.
-As of January 1st, 2003, there are an estimated 5500 contributors on the project.
+As of January 1st, 2003, there are an estimated 5500 contributors on the project.
Committers are developers with the privilege of being able to commit changes.
These are usually the most active developers who are willing to spend their time not only integrating their own code but integrating code submitted by the developers who do not have this privilege.
-They are also the developers who elect the core team, and they have access to closed discussions.
+They are also the developers who elect the core team, and they have access to closed discussions.
The project can be grouped into four distinct separate parts, and most developers will focus their involvement in one part of FreeBSD.
The four parts are kernel development, userland development, ports and documentation.
-When referring to the base system, both kernel and userland is meant.
+When referring to the base system, both kernel and userland is meant.
-This split changes our table to look like this:
+This split changes our table to look like this:
-The FreeBSD Project's structure with committers in categories
+The FreeBSD Project's structure with committers in categories
[.informaltable]
[cols="1,1,1", options="header"]
@@ -214,24 +215,20 @@ The FreeBSD Project's structure with committers in categories
|9
|Committers
-|Kernel
-|56
-
-|
-|Userland
-|50
+|Base
+|164
|
|Docs
-|9
+|45
|
|Ports
-|120
+|166
|
|Total
-|269
+|374
|Contributors
|
@@ -240,30 +237,30 @@ The FreeBSD Project's structure with committers in categories
Number of committers per area has been determined by going through CVS logs from January 1st, 2004 to December 31st, 2004.
Note that many committers work in multiple areas, making the total number higher than the real number of committers.
-The total number of committers at that time was 269.
+The total number of active unique committers on June 2022 was 317.
Committers fall into three groups: committers who are only concerned with one area of the project (for instance file systems), committers who are involved only with one sub-project, and committers who commit to different parts of the code, including sub-projects.
-Because some committers work on different parts, the total number in the committers section of the table is higher than in the above table.
+Because some committers work on different parts, the total number in the committers section of the table is higher than in the above table.
The kernel is the main building block of FreeBSD.
While the userland applications are protected against faults in other userland applications, the entire system is vulnerable to errors in the kernel.
This, combined with the vast amount of dependencies in the kernel and that it is not easy to see all the consequences of a kernel change, demands developers with a relative full understanding of the kernel.
-Multiple development efforts in the kernel also require a closer coordination than userland applications do.
+Multiple development efforts in the kernel also require a closer coordination than userland applications do.
The core utilities, known as userland, provide the interface that identifies FreeBSD, both user interface, shared libraries and external interfaces to connecting clients.
Currently, 162 people are involved in userland development and maintenance, many being maintainers for their own part of the code.
-Maintainership will be discussed in the <<role-maintainer>> section.
+Maintainership will be discussed in the <<role-maintainer>> section.
-Documentation is handled by <<sub-project-documentation>> and includes all documents surrounding the FreeBSD project, including the web pages.
-There were during 2004 101 people making commits to the FreeBSD Documentation Project.
+Documentation is handled by <<sub-project-documentation>> and includes all documents surrounding the FreeBSD project, including the web pages.
+There were during 2004 101 people making commits to the FreeBSD Documentation Project.
Ports is the collection of meta-data that is needed to make software packages build correctly on FreeBSD.
An example of a port is the port for the web-browser Mozilla.
It contains information about where to fetch the source, what patches to apply and how, and how the package should be installed on the system.
This allows automated tools to fetch, build and install the package.
As of this writing, there are more than 12600 ports available.
-footnote:[Statistics are generated by counting the number of entries in the file fetched by portsdb by April 1st, 2005. portsdb is a part of the port sysutils/portupgrade.] , ranging from web servers to games, programming languages and most of the application types that are in use on modern computers.
-Ports will be discussed further in the section <<sub-project-ports>>.
+footnote:[Statistics are generated by counting the number of entries in the file fetched by portsdb by April 1st, 2005. portsdb is a part of the port sysutils/portupgrade.] , ranging from web servers to games, programming languages and most of the application types that are in use on modern computers.
+Ports will be discussed further in the section <<sub-project-ports>>.
[[methodology-model]]
== Methodology model
@@ -272,9 +269,9 @@ Ports will be discussed further in the section <<sub-project-ports>>.
=== Development model
There is no defined model for how people write code in FreeBSD.
-However, Niels Jørgenssen has suggested a model of how written code is integrated into the project.
+However, Niels Jørgenssen has suggested a model of how written code is integrated into the project.
-Jørgenssen's model for change integration
+Jørgenssen's model for change integration
[.informaltable]
[cols="1,1,1", options="header"]
@@ -308,60 +305,60 @@ Jørgenssen's model for change integration
|code
|===
-The "development release" is the FreeBSD-CURRENT ("-CURRENT") branch and the "production release" is the FreeBSD-STABLE branch ("-STABLE") [<<jorgensen2001, Jørgensen, 2001>>].
+The "development release" is the FreeBSD-CURRENT ("-CURRENT") branch and the "production release" is the FreeBSD-STABLE branch ("-STABLE") [<<jorgensen2001, Jørgensen, 2001>>].
This is a model for one change, and shows that after coding, developers seek community review and try integrating it with their own systems.
After integrating the change into the development release, called FreeBSD-CURRENT, it is tested by many users and developers in the FreeBSD community.
After it has gone through enough testing, it is merged into the production release, called FreeBSD-STABLE.
Unless each stage is finished successfully, the developer needs to go back and make modifications in the code and restart the process.
-To integrate a change with either -CURRENT or -STABLE is called making a commit.
+To integrate a change with either -CURRENT or -STABLE is called making a commit.
Jørgensen found that most FreeBSD developers work individually, meaning that this model is used in parallel by many developers on the different ongoing development efforts.
-A developer can also be working on multiple changes, so that while they are waiting for review or people to test one or more of their changes, they may be writing another change.
+A developer can also be working on multiple changes, so that while they are waiting for review or people to test one or more of their changes, they may be writing another change.
As each commit represents an increment, this is a massively incremental model.
-The commits are in fact so frequent that during one year footnote:[The period from January 1st, 2004 to December 31st, 2004 was examined to find this number.] , 85427 commits were made, making a daily average of 233 commits.
+The commits are in fact so frequent that during one year footnote:[The period from January 1st, 2004 to December 31st, 2004 was examined to find this number.] , 85427 commits were made, making a daily average of 233 commits.
Within the "code" bracket in Jørgensen's model, each programmer has their own working style and follows their own development models.
The bracket could very well have been called "development" as it includes requirements gathering and analysis, system and detailed design, implementation and verification.
-However, the only output from these stages is the source code or system documentation.
+However, the only output from these stages is the source code or system documentation.
From a stepwise model's perspective (such as the waterfall model), the other brackets can be seen as further verification and system integration.
This system integration is also important to see if a change is accepted by the community.
Up until the code is committed, the developer is free to choose how much to communicate about it to the rest of the project.
In order for -CURRENT to work as a buffer (so that bright ideas that had some undiscovered drawbacks can be backed out) the minimum time a commit should be in -CURRENT before merging it to -STABLE is 3 days.
-Such a merge is referred to as an MFC (Merge From Current).
+Such a merge is referred to as an MFC (Merge From Current).
It is important to notice the word "change".
-Most commits do not contain radical new features, but are maintenance updates.
+Most commits do not contain radical new features, but are maintenance updates.
The only exceptions from this model are security fixes and changes to features that are deprecated in the -CURRENT branch.
-In these cases, changes can be committed directly to the -STABLE branch.
+In these cases, changes can be committed directly to the -STABLE branch.
In addition to many people working on the project, there are many related projects to the FreeBSD Project.
These are either projects developing brand new features, sub-projects or projects whose outcome is incorporated into FreeBSD footnote:[For instance, the development of the Bluetooth stack started as a sub-project until it was deemed stable enough to be merged into the -CURRENT branch. Now it is a part of the core FreeBSD system.].
These projects fit into the FreeBSD Project just like regular development efforts: they produce code that is integrated with the FreeBSD Project.
-However, some of them (like Ports and Documentation) have the privilege of being applicable to both branches or commit directly to both -CURRENT and -STABLE.
+However, some of them (like Ports and Documentation) have the privilege of being applicable to both branches or commit directly to both -CURRENT and -STABLE.
There is no standards to how design should be done, nor is design collected in a centralised repository.
The main design is that of 4.4BSD.
footnote:[According to Kirk McKusick, after 20 years of developing UNIX operating systems, the interfaces are for the most part figured out. There is therefore no need for much design. However, new applications of the system and new hardware leads to some implementations being more beneficial than those that used to be preferred. One example is the introduction of web browsing that made the normal TCP/IP connection a short burst of data rather than a steady stream over a longer period of time.]
As design is a part of the "Code" bracket in Jørgenssen's model, it is up to every developer or sub-project how this should be done.
Even if the design should be stored in a central repository, the output from the design stages would be of limited use as the differences of methodologies would make them poorly if at all interoperable.
-For the overall design of the project, the project relies on the sub-projects to negotiate fit interfaces between each other rather than to dictate interfacing.
+For the overall design of the project, the project relies on the sub-projects to negotiate fit interfaces between each other rather than to dictate interfacing.
[[release-branches]]
=== Release branches
The releases of FreeBSD are best illustrated by a tree with many branches where each major branch represents a major version.
-Minor versions are represented by branches of the major branches.
+Minor versions are represented by branches of the major branches.
In the following release tree, arrows that follow one-another in a particular direction represent a branch.
Boxes with full lines and diamonds represent official releases.
Boxes with dotted lines represent the development branch at that time.
Security branches are represented by ovals.
Diamonds differ from boxes in that they represent a fork, meaning a place where a branch splits into two branches where one of the branches becomes a sub-branch.
-For example, at 4.0-RELEASE the 4.0-CURRENT branch split into 4-STABLE and 5.0-CURRENT. At 4.5-RELEASE, the branch forked off a security branch called RELENG_4_5.
+For example, at 4.0-RELEASE the 4.0-CURRENT branch split into 4-STABLE and 5.0-CURRENT. At 4.5-RELEASE, the branch forked off a security branch called RELENG_4_5.
.The FreeBSD release tree
image::branches.png[Refer to table below for a screen-reader friendly version.]
@@ -379,15 +376,15 @@ image::branches.png[Refer to table below for a screen-reader friendly version.]
|3.0 Current (development branch)
|
-|Releng 3 branches: 3.0 Release to 3.5 Release, leading to 3.5.1 Release and the subsequent 3 Stable branch
+|Releng 3 branches: 3.0 Release to 3.5 Release, leading to 3.5.1 Release and the subsequent 3 Stable branch
|4.0 Current (development branch)
|3.1 Release
-|Releng 4 branches: 4.1 Release to 4.6 Release (and 4.6.2 Release), then 4.7 Release to 4.11 Release (all starting at 4.3 Release also leading to a Releng_4_n branch), and the subsequent 4 Release branch
+|Releng 4 branches: 4.1 Release to 4.6 Release (and 4.6.2 Release), then 4.7 Release to 4.11 Release (all starting at 4.3 Release also leading to a Releng_4_n branch), and the subsequent 4 Release branch
|5.0 Current (development branch)
|4.0 Release
-|Releng 5 branches: 5.0 Release to 5.4 Release (all except 5.0 and 5.3 also leading to a Releng_5_n branch), and the subsequent 5 Release branch
+|Releng 5 branches: 5.0 Release to 5.4 Release (all except 5.0 and 5.3 also leading to a Releng_5_n branch), and the subsequent 5 Release branch
|6.0 Current (development branch)
|5.3 Release
@@ -407,9 +404,9 @@ However, the -CURRENT branch does not need to fork at that point in time, but ca
An example of this is that following 3.0-RELEASE, 3.1-RELEASE was also a continuation of the -CURRENT-branch, and -CURRENT did not become a true development branch until this version was released and the 3-STABLE branch was forked.
When -CURRENT returns to becoming a development branch, it can only be followed by a major release.
5-STABLE is predicted to be forked off 5.0-CURRENT at around 5.3-RELEASE.
-It is not until 5-STABLE is forked that the development branch will be branded 6.0-CURRENT.
+It is not until 5-STABLE is forked that the development branch will be branded 6.0-CURRENT.
-A "minor release" is made from the -CURRENT branch following a major release, or from the -STABLE branch.
+A "minor release" is made from the -CURRENT branch following a major release, or from the -STABLE branch.
Following and including, 4.3-RELEASEfootnote:[The first release this actually happened for was 4.5-RELEASE, but security branches were at the same time created for 4.3-RELEASE and 4.4-RELEASE.], when a minor release has been made, it becomes a "security branch".
This is meant for organisations that do not want to follow the -STABLE branch and the potential new/changed features it offers, but instead require an absolutely stable environment, only updating to implement security updates. footnote:[There is a terminology overlap with respect to the word "stable", which leads to some confusion. The -STABLE branch is still a development branch, whose goal is to be useful for most people. If it is never acceptable for a system to get changes that are not announced at the time it is deployed, that system should run a security branch.]
@@ -417,25 +414,25 @@ This is meant for organisations that do not want to follow the -STABLE branch an
Each update to a security branch is called a "patchlevel".
For every security enhancement that is done, the patchlevel number is increased, making it easy for people tracking the branch to see what security enhancements they have implemented.
In cases where there have been especially serious security flaws, an entire new release can be made from a security branch.
-An example of this is 4.6.2-RELEASE.
+An example of this is 4.6.2-RELEASE.
[[model-summary]]
=== Model summary
-To summarise, the development model of FreeBSD can be seen as the following tree:
+To summarise, the development model of FreeBSD can be seen as the following tree:
.The overall development model
image::freebsd-code-model.png[Refer to paragraphs below for a screen-reader friendly version.]
-The tree of the FreeBSD development with ongoing development efforts and continuous integration.
+The tree of the FreeBSD development with ongoing development efforts and continuous integration.
The tree symbolises the release versions with major versions spawning new main branches and minor versions being versions of the main branch.
The top branch is the -CURRENT branch where all new development is integrated, and the -STABLE branch is the branch directly below it.
-Below the -STABLE branch are old, unsupported versions.
+Below the -STABLE branch are old, unsupported versions.
Clouds of development efforts hang over the project where developers use the development models they see fit.
-The product of their work is then integrated into -CURRENT where it undergoes parallel debugging and is finally merged from -CURRENT into -STABLE.
-Security fixes are merged from -STABLE to the security branches.
+The product of their work is then integrated into -CURRENT where it undergoes parallel debugging and is finally merged from -CURRENT into -STABLE.
+Security fixes are merged from -STABLE to the security branches.
Many committers have a special area of responsibility.
These roles are called hats.
@@ -447,7 +444,7 @@ The other option is to have the role held by a group.
Many of these hats are not formalised.
Formalised hats have a charter stating the exact purpose of the hat along with its privileges and responsibilities.
The writing of such charters is a new part of the project, and has thus yet to be completed for all hats.
-These hat descriptions are not such a formalisation, rather a summary of the role with links to the charter where available and contact addresses.
+These hat descriptions are not such a formalisation, rather a summary of the role with links to the charter where available and contact addresses.
[[sect-hats]]
== Hats
@@ -463,12 +460,12 @@ A Contributor contributes to the FreeBSD project either as a developer, as an au
[[role-committer]]
==== Committer
-A person who has the required privileges to add their code or documentation to the repository.
+A person who has the required privileges to add their code or documentation to the repository.
A committer has made a commit within the past 12 months.
-[<<freebsd-developer-handbook, FreeBSD, 2000A>>] An active committer is a committer who has made an average of one commit per month during that time.
+[<<freebsd-developer-handbook, FreeBSD, 2000A>>] An active committer is a committer who has made an average of one commit per month during that time.
It is worth noting that there are no technical barriers to prevent someone, once having gained commit privileges to the main- or a sub-project, to make commits in parts of that project's source the committer did not specifically get permission to modify.
-However, when wanting to make modifications to parts a committer has not been involved in before, they should read the logs to see what has happened in this area before, and also read the MAINTAINERS file to see if the maintainer of this part has any special requests on how changes in the code should be made.
+However, when wanting to make modifications to parts a committer has not been involved in before, they should read the logs to see what has happened in this area before, and also read the MAINTAINERS file to see if the maintainer of this part has any special requests on how changes in the code should be made.
[[role-core]]
==== Core Team
@@ -476,91 +473,91 @@ However, when wanting to make modifications to parts a committer has not been in
The core team is elected by the committers from the pool of committers and serves as the board of directors of the FreeBSD project.
It promotes active contributors to committers, assigns people to well-defined hats, and is the final arbiter of decisions involving which way the project should be heading.
As of July 1st, 2004, core consisted of 9 members.
-Elections are held every two years.
+Elections are held every two years.
[[role-maintainer]]
==== Maintainership
-Maintainership means that that person is responsible for what is allowed to go into that area of the code and has the final say should disagreements over the code occur.
-This involves proactive work aimed at stimulating contributions and reactive work in reviewing commits.
+Maintainership means that the person is responsible for what is allowed to go into that area of the code and has the final say should disagreements over the code occur.
+This involves proactive work aimed at stimulating contributions and reactive work in reviewing commits.
-With the FreeBSD source comes the MAINTAINERS file that contains a one-line summary of how each maintainer would like contributions to be made.
-Having this notice and contact information enables developers to focus on the development effort rather than being stuck in a slow correspondence should the maintainer be unavailable for some time.
+With the FreeBSD source comes the MAINTAINERS file that contains a one-line summary of how each maintainer would like contributions to be made.
+Having this notice and contact information enables developers to focus on the development effort rather than being stuck in a slow correspondence should the maintainer be unavailable for some time.
If the maintainer is unavailable for an unreasonably long period of time, and other people do a significant amount of work, maintainership may be switched without the maintainer's approval.
-This is based on the stance that maintainership should be demonstrated, not declared.
+This is based on the stance that maintainership should be demonstrated, not declared.
-Maintainership of a particular piece of code is a hat that is not held as a group.
+Maintainership of a particular piece of code is a hat that is not held as a group.
[[official-hats]]
=== Official Hats
The official hats in the FreeBSD Project are hats that are more or less formalised and mainly administrative roles.
They have the authority and responsibility for their area.
-The following list shows the responsibility lines and gives a description of each hat, including who it is held by.
+The following list shows the responsibility lines and gives a description of each hat, including who it is held by.
[[role-doc-manager]]
==== Documentation project manager
-<<sub-project-documentation>> architect is responsible for defining and following up documentation goals for the committers in the Documentation project, which they supervise.
+<<sub-project-documentation>> architect is responsible for defining and following up documentation goals for the committers in the Documentation project, which they supervise.
Hat held by: The DocEng team mailto:doceng@FreeBSD.org[doceng@FreeBSD.org].
-The https://www.freebsd.org/internal/doceng/[ DocEng Charter].
+The https://www.freebsd.org/internal/doceng/[ DocEng Charter].
[[role-postmaster]]
==== Postmaster
The Postmaster is responsible for mail being correctly delivered to the committers' email address.
-They are also responsible for ensuring that the mailing lists work and should take measures against possible disruptions of mail such as having troll-, spam- and virus-filters.
+They are also responsible for ensuring that the mailing lists work and should take measures against possible disruptions of mail such as having troll-, spam- and virus-filters.
-Hat currently held by: the Postmaster Team mailto:postmaster@FreeBSD.org[postmaster@FreeBSD.org].
+Hat currently held by: the Postmaster Team mailto:postmaster@FreeBSD.org[postmaster@FreeBSD.org].
[[role-release-coordination]]
==== Release Coordination
-The responsibilities of the Release Engineering Team are
+The responsibilities of the Release Engineering Team are
-* Setting, publishing and following a release schedule for official releases
-* Documenting and formalising release engineering procedures
-* Creation and maintenance of code branches
-* Coordinating with the Ports and Documentation teams to have an updated set of packages and documentation released with the new releases
-* Coordinating with the Security team so that pending releases are not affected by recently disclosed vulnerabilities.
+* Setting, publishing and following a release schedule for official releases
+* Documenting and formalising release engineering procedures
+* Creation and maintenance of code branches
+* Coordinating with the Ports and Documentation teams to have an updated set of packages and documentation released with the new releases
+* Coordinating with the Security team so that pending releases are not affected by recently disclosed vulnerabilities.
-Further information about the development process is available in the <<process-release-engineering>> section.
+Further information about the development process is available in the <<process-release-engineering>> section.
[[role-releng]]
Hat held by: the Release Engineering team mailto:re@FreeBSD.org[re@FreeBSD.org].
-The https://www.freebsd.org/releng/charter/[ Release Engineering Charter].
+The https://www.freebsd.org/releng/charter/[ Release Engineering Charter].
[[role-pr-cr]]
==== Public Relations & Corporate Liaison
-The Public Relations & Corporate Liaison's responsibilities are:
+The Public Relations & Corporate Liaison's responsibilities are:
-* Making press statements when happenings that are important to the FreeBSD Project happen.
-* Being the official contact person for corporations that are working close with the FreeBSD Project.
-* Take steps to promote FreeBSD within both the Open Source community and the corporate world.
-* Handle the "freebsd-advocacy" mailing list.
+* Making press statements when happenings that are important to the FreeBSD Project happen.
+* Being the official contact person for corporations that are working close with the FreeBSD Project.
+* Take steps to promote FreeBSD within both the Open Source community and the corporate world.
+* Handle the "freebsd-advocacy" mailing list.
-This hat is currently not occupied.
+This hat is currently not occupied.
[[role-security-officer]]
==== Security Officer
The Security Officer's main responsibility is to coordinate information exchange with others in the security community and in the FreeBSD project.
-The Security Officer is also responsible for taking action when security problems are reported and promoting proactive development behavior when it comes to security.
+The Security Officer is also responsible for taking action when security problems are reported and promoting proactive development behavior when it comes to security.
Because of the fear that information about vulnerabilities may leak out to people with malicious intent before a patch is available, only the Security Officer, consisting of an officer, a deputy and two <<role-core>> members, receive sensitive information about security issues.
-However, to create or implement a patch, the Security Officer has the Security Officer Team mailto:security-team@FreeBSD.org[security-team@FreeBSD.org] to help do the work.
+However, to create or implement a patch, the Security Officer has the Security Officer Team mailto:security-team@FreeBSD.org[security-team@FreeBSD.org] to help do the work.
[[role-repo-manager]]
==== Source Repository Manager
-The Source Repository Manager is the only one who is allowed to directly modify the repository without using the <<tool-svn>> tool.
+The Source Repository Manager is the only one who is allowed to directly modify the repository without using the <<tool-git>> tool.
It is their responsibility to ensure that technical problems that arise in the repository are resolved quickly.
-The source repository manager has the authority to back out commits if this is necessary to resolve a SVN technical problem.
+The source repository manager has the authority to back out commits if this is necessary to resolve a Git technical problem.
-Hat held by: the Source Repository Manager mailto:clusteradm@FreeBSD.org[clusteradm@FreeBSD.org].
+Hat held by: the Source Repository Manager mailto:clusteradm@FreeBSD.org[clusteradm@FreeBSD.org].
[[role-election-manager]]
==== Election Manager
@@ -569,64 +566,64 @@ The Election Manager is responsible for the <<process-core-election>> process.
The manager is responsible for running and maintaining the election system, and is the final authority should minor unforeseen events happen in the election process.
Major unforeseen events have to be discussed with the <<role-core>>
-Hat held only during elections.
+Hat held only during elections.
[[role-webmaster]]
==== Web site Management
The Web site Management hat is responsible for coordinating the rollout of updated web pages on mirrors around the world, for the overall structure of the primary web site and the system it is running upon.
-The management needs to coordinate the content with <<sub-project-documentation>> and acts as maintainer for the "www" tree.
+The management needs to coordinate the content with <<sub-project-documentation>> and acts as maintainer for the "www" tree.
-Hat held by: the FreeBSD Webmasters mailto:www@FreeBSD.org[www@FreeBSD.org].
+Hat held by: the FreeBSD Webmasters mailto:www@FreeBSD.org[www@FreeBSD.org].
[[role-ports-manager]]
==== Ports Manager
-The Ports Manager acts as a liaison between <<sub-project-ports>> and the core project, and all requests from the project should go to the ports manager.
+The Ports Manager acts as a liaison between <<sub-project-ports>> and the core project, and all requests from the project should go to the ports manager.
Hat held by: the Ports Management Team mailto:portmgr@FreeBSD.org[portmgr@FreeBSD.org].
-The https://www.freebsd.org/portmgr/charter/[Portmgr charter].
+The https://www.freebsd.org/portmgr/charter/[Portmgr charter].
[[role-standards]]
==== Standards
-The Standards hat is responsible for ensuring that FreeBSD complies with the standards it is committed to , keeping up to date on the development of these standards and notifying FreeBSD developers of important changes that allows them to take a proactive role and decrease the time between a standards update and FreeBSD's compliancy.
+The Standards hat is responsible for ensuring that FreeBSD complies with the standards it is committed to , keeping up to date on the development of these standards and notifying FreeBSD developers of important changes that allows them to take a proactive role and decrease the time between a standards update and FreeBSD's compliancy.
-Hat currently held by: Garrett Wollman mailto:wollman@FreeBSD.org[wollman@FreeBSD.org].
+Hat currently held by: Garrett Wollman mailto:wollman@FreeBSD.org[wollman@FreeBSD.org].
[[role-core-secretary]]
==== Core Secretary
The Core Secretary's main responsibility is to write drafts to and publish the final Core Reports.
-The secretary also keeps the core agenda, thus ensuring that no balls are dropped unresolved.
+The secretary also keeps the core agenda, thus ensuring that no balls are dropped unresolved.
-Hat currently held by: {bofh}.
+Hat currently held by: {carlavilla}.
[[role-bugmeister]]
==== Bugmeister
The Bugmeister is responsible for ensuring that the maintenance database is in working order, that the entries are correctly categorised and that there are no invalid entries.
-They supervise bugbusters.
+They supervise bugbusters.
-Hat currently held by: the Bugmeister Team mailto:bugmeister@FreeBSD.org[bugmeister@FreeBSD.org].
+Hat currently held by: the Bugmeister Team mailto:bugmeister@FreeBSD.org[bugmeister@FreeBSD.org].
[[role-donations]]
==== Donations Liaison Officer
-The task of the donations liaison officer is to match the developers with needs with people or organisations willing to make a donation.
+The task of the donations liaison officer is to match the developers with needs with people or organisations willing to make a donation.
Hat held by: the Donations Liaison Office mailto:donations@FreeBSD.org[donations@FreeBSD.org].
-The https://www.freebsd.org/donations/[ Donations Liaison Charter].
+The https://www.freebsd.org/donations/[ Donations Liaison Charter].
[[role-admin]]
==== Admin
-(Also called "FreeBSD Cluster Admin")
+(Also called "FreeBSD Cluster Admin")
The admin team consists of the people responsible for administrating the computers that the project relies on for its distributed work and communication to be synchronised.
-It consists mainly of those people who have physical access to the servers.
+It consists mainly of those people who have physical access to the servers.
-Hat held by: the Admin team mailto:admin@FreeBSD.org[admin@FreeBSD.org].
+Hat held by: the Admin team mailto:admin@FreeBSD.org[admin@FreeBSD.org].
[[proc-depend-hats]]
=== Process dependent hats
@@ -634,27 +631,27 @@ Hat held by: the Admin team mailto:admin@FreeBSD.org[admin@FreeBSD.org].
[[role-problem-originator]]
==== Report originator
-The person originally responsible for filing a Problem Report.
+The person originally responsible for filing a Problem Report.
[[role-bugbuster]]
==== Bugbuster
-A person who will either find the right person to solve the problem, or close the PR if it is a duplicate or otherwise not an interesting one.
+A person who will either find the right person to solve the problem, or close the PR if it is a duplicate or otherwise not an interesting one.
[[role-mentor]]
==== Mentor
-A mentor is a committer who takes it upon them to introduce a new committer to the project, both in terms of ensuring the new committer's setup is valid, that the new committer knows the available tools required in their work, and that the new committer knows what is expected of them in terms of behavior.
+A mentor is a committer who takes it upon them to introduce a new committer to the project, both in terms of ensuring the new committer's setup is valid, that the new committer knows the available tools required in their work, and that the new committer knows what is expected of them in terms of behavior.
[[role-vendor]]
==== Vendor
-The person(s) or organisation whom external code comes from and whom patches are sent to.
+The person(s) or organisation whom external code comes from and whom patches are sent to.
[[role-reviewer]]
==== Reviewers
-People on the mailing list where the request for review is posted.
+People on the mailing list where the request for review is posted.
The following section will describe the defined project processes.
Issues that are not handled by these processes happen on an ad-hoc basis based on what has been customary to do in similar cases.
@@ -667,20 +664,20 @@ Issues that are not handled by these processes happen on an ad-hoc basis based o
The Core team has the responsibility of giving and removing commit privileges to contributors.
This can only be done through a vote on the core mailing list.
-The ports and documentation sub-projects can give commit privileges to people working on these projects, but have to date not removed such privileges.
+The ports and documentation sub-projects can give commit privileges to people working on these projects, but have to date not removed such privileges.
Normally a contributor is recommended to core by a committer.
-For contributors or outsiders to contact core asking to be a committer is not well thought of and is usually rejected.
+For contributors or outsiders to contact core asking to be a committer is not well thought of and is usually rejected.
If the area of particular interest for the developer potentially overlaps with other committers' area of maintainership, the opinion of those maintainers is sought.
-However, it is frequently this committer that recommends the developer.
+However, it is frequently this committer that recommends the developer.
When a contributor is given committer status, they are assigned a mentor.
-The committer who recommended the new committer will, in the general case, take it upon themselves to be the new committers mentor.
+The committer who recommended the new committer will, in the general case, take it upon themselves to be the new committers mentor.
When a contributor is given their commit bit, a <<tool-pgp>>-signed email is sent from either <<role-core-secretary>>, <<role-ports-manager>>, or nik@freebsd.org to both admins@freebsd.org, the assigned mentor, the new committer, and core confirming the approval of a new account.
The mentor then gathers a password line, <<tool-ssh2>> public key, and PGP key from the new committer and sends them to <<role-admin>>.
-When the new account is created, the mentor activates the commit bit and guides the new committer through the rest of the initial process.
+When the new account is created, the mentor activates the commit bit and guides the new committer through the rest of the initial process.
.Process summary: adding a new committer
image::proc-add-committer.png[Refer to paragraph below for a screen-reader friendly version.]
@@ -689,24 +686,24 @@ When a contributor sends a piece of code, the receiving committer may choose to
If they recommend this to core, core will vote on this recommendation.
If the vote is in favour, a mentor is assigned the new committer and the new committer has to email their details to the administrators for an account to be created.
After this, the new committer is all set to make their first commit.
-By tradition, this is by adding their name to the committers list.
+By tradition, this is by adding their name to the committers list.
Recall that a committer is considered to be someone who has committed code during the past 12 months.
However, it is not until after 18 months of inactivity have passed that commit privileges are eligible to be revoked.
[<<freebsd-expiration-policy, FreeBSD, 2002H>>]
There are, however, no automatic procedures for doing this.
-For reactions concerning commit privileges not triggered by time, see <<process-reactions,section 1.5.8>>.
+For reactions concerning commit privileges not triggered by time, see <<process-reactions,section 1.5.8>>.
.Process summary: removing a committer
image::proc-rm-committer.png[Refer to paragraph below for a screen-reader friendly version.]
When Core decides to clean up the committers list, they check who has not made a commit for the past 18 months.
-Committers who have not done so have their commit bits revoked and their account removed by the administrators.
+Committers who have not done so have their commit bits revoked and their account removed by the administrators.
It is also possible for committers to request that their commit bit be retired if for some reason they are no longer going to be actively committing to the project.
-In this case, it can also be restored at a later time by core, should the committer ask.
+In this case, it can also be restored at a later time by core, should the committer ask.
-Roles in this process:
+Roles in this process:
. <<role-core>>
. <<role-contributor>>
@@ -719,26 +716,26 @@ Roles in this process:
[[committing]]
=== Committing code
-The committing of new or modified code is one of the most frequent processes in the FreeBSD project and will usually happen many times a day.
+The committing of new or modified code is one of the most frequent processes in the FreeBSD project and will usually happen many times a day.
Committing of code can only be done by a "committer".
-Committers commit either code written by themselves, code submitted to them, or code submitted through a <<model-pr,problem report>>.
+Committers commit either code written by themselves, code submitted to them, or code submitted through a <<model-pr,problem report>>.
When code is written by the developer that is non-trivial, they should seek a code review from the community.
This is done by sending mail to the relevant list asking for review.
Before submitting the code for review, they should ensure it compiles correctly with the entire tree and that all relevant tests run.
This is called "pre-commit test".
-When contributed code is received, it should be reviewed by the committer and tested the same way.
+When contributed code is received, it should be reviewed by the committer and tested the same way.
When a change is committed to a part of the source that has been contributed from an outside <<role-vendor>>, the maintainer should ensure that the patch is contributed back to the vendor.
-This is in line with the open source philosophy and makes it easier to stay in sync with outside projects as the patches do not have to be reapplied every time a new release is made.
+This is in line with the open source philosophy and makes it easier to stay in sync with outside projects as the patches do not have to be reapplied every time a new release is made.
After the code has been available for review and no further changes are necessary, the code is committed into the development branch, -CURRENT.
If the change applies for the -STABLE branch or the other branches as well, a "Merge From Current" ("MFC") countdown is set by the committer.
After the number of days the committer chose when setting the MFC have passed, an email will automatically be sent to the committer reminding them to commit it to the -STABLE branch (and possibly security branches as well).
-Only security critical changes should be merged to security branches.
+Only security critical changes should be merged to security branches.
Delaying the commit to -STABLE and other branches allows for "parallel debugging" where the committed code is tested on a wide range of configurations.
-This makes changes to -STABLE to contain fewer faults and thus giving the branch its name.
+This makes changes to -STABLE to contain fewer faults and thus giving the branch its name.
.Process summary: A committer commits code
image::proc-commit.png[Refer to paragraph below for a screen-reader friendly version.]
@@ -748,63 +745,63 @@ If the code is trivial or has been reviewed and the committer is not the maintai
If the code is contributed by an outside vendor, the maintainer should create a patch that is sent back to the vendor.
The code is then committed and then deployed by the users.
Should they find problems with the code, this will be reported and the committer can go back to writing a patch.
-If a vendor is affected, they can choose to implement or ignore the patch.
+If a vendor is affected, they can choose to implement or ignore the patch.
.Process summary: A contributor commits code
image::proc-contrib.png[Refer to paragraphs below and above for a screen-reader friendly version.]
The difference when a contributor makes a code contribution is that they submit the code through the Bugzilla interface.
-This report is picked up by the maintainer who reviews the code and commits it.
+This report is picked up by the maintainer who reviews the code and commits it.
-Hats included in this process are:
+Hats included in this process are:
. <<role-committer>>
. <<role-contributor>>
. <<role-vendor>>
. <<role-reviewer>>
-[<<freebsd-committer, FreeBSD, 2001>>] [<<jorgensen2001, Jørgensen, 2001>>]
+[<<freebsd-committer, FreeBSD, 2001>>] [<<jorgensen2001, Jørgensen, 2001>>]
[[process-core-election]]
=== Core election
Core elections are held at least every two years. footnote:[The first Core election was held September 2000] Nine core members are elected.
New elections are held if the number of core members drops below seven.
-New elections can also be held should at least 1/3 of the active committers demand this.
+New elections can also be held should at least 1/3 of the active committers demand this.
-When an election is to take place, core announces this at least 6 weeks in advance, and appoints an election manager to run the elections.
+When an election is to take place, core announces this at least 6 weeks in advance, and appoints an election manager to run the elections.
Only committers can be elected into core.
The candidates need to submit their candidacy at least one week before the election starts, but can refine their statements until the voting starts.
They are presented in the http://election.uk.freebsd.org/candidates.html[candidates list].
-When writing their election statements, the candidates must answer a few standard questions submitted by the election manager.
+When writing their election statements, the candidates must answer a few standard questions submitted by the election manager.
During elections, the rule that a committer must have committed during the 12 past months is followed strictly.
-Only these committers are eligible to vote.
+Only these committers are eligible to vote.
When voting, the committer may vote once in support of up to nine nominees.
-The voting is done over a period of four weeks with reminders being posted on "developers" mailing list that is available to all committers.
+The voting is done over a period of four weeks with reminders being posted on "developers" mailing list that is available to all committers.
-The election results are released one week after the election ends, and the new core team takes office one week after the results have been posted.
+The election results are released one week after the election ends, and the new core team takes office one week after the results have been posted.
-Should there be a voting tie, this will be resolved by the new, unambiguously elected core members.
+Should there be a voting tie, this will be resolved by the new, unambiguously elected core members.
-Votes and candidate statements are archived, but the archives are not publicly available.
+Votes and candidate statements are archived, but the archives are not publicly available.
.Process summary: Core elections
image::proc-elections.png[Refer to paragraph below for a screen-reader friendly version.]
Core announces the election and selects an election manager who prepares the elections, and when ready, candidates can announce their candidacies through submitting their statements.
The committers then vote.
-After the vote is over, the election results are announced and the new core team takes office.
+After the vote is over, the election results are announced and the new core team takes office.
-Hats in core elections are:
+Hats in core elections are:
* <<role-core>>
* <<role-committer>>
* <<role-election-manager>>
-[<<freebsd-bylaws, FreeBSD, 2000A>>] [<<bsd-election2002, FreeBSD, 2002B>>] [<<freebsd-election, FreeBSD, 2002G>>]
+[<<freebsd-bylaws, FreeBSD, 2000A>>] [<<bsd-election2002, FreeBSD, 2002B>>] [<<freebsd-election, FreeBSD, 2002G>>]
[[new-features]]
=== Development of new features
@@ -813,21 +810,21 @@ Within the project there are sub-projects that are working on new features.
These projects are generally done by one person [<<jorgensen2001, Jørgensen, 2001>>].
Every project is free to organise development as it sees fit.
However, when the project is merged to the -CURRENT branch it must follow the project guidelines.
-When the code has been well tested in the -CURRENT branch and deemed stable enough and relevant to the -STABLE branch, it is merged to the -STABLE branch.
+When the code has been well tested in the -CURRENT branch and deemed stable enough and relevant to the -STABLE branch, it is merged to the -STABLE branch.
The requirements of the project are given by developer wishes, requests from the community in terms of direct requests by mail, Problem Reports, commercial funding for the development of features, or contributions by the scientific community.
-The wishes that come within the responsibility of a developer are given to that developer who prioritises their time between the request and their wishes.
+The wishes that come within the responsibility of a developer are given to that developer who prioritises their time between the request and their wishes.
A common way to do this is maintain a TODO-list maintained by the project.
Items that do not come within someone's responsibility are collected on TODO-lists unless someone volunteers to take the responsibility.
-All requests, their distribution and follow-up are handled by the <<tool-bugzilla>> tool.
+All requests, their distribution and follow-up are handled by the <<tool-bugzilla>> tool.
Requirements analysis happens in two ways.
The requests that come in are discussed on mailing lists, both within the main project and in the sub-project that the request belongs to or is spawned by the request.
Furthermore, individual developers on the sub-project will evaluate the feasibility of the requests and determine the prioritisation between them.
-Other than archives of the discussions that have taken place, no outcome is created by this phase that is merged into the main project.
+Other than archives of the discussions that have taken place, no outcome is created by this phase that is merged into the main project.
As the requests are prioritised by the individual developers on the basis of doing what they find interesting, necessary, or are funded to do, there is no overall strategy or prioritisation of what requests to regard as requirements and following up their correct implementation.
-However, most developers have some shared vision of what issues are more important, and they can ask for guidelines from the release engineering team.
+However, most developers have some shared vision of what issues are more important, and they can ask for guidelines from the release engineering team.
The verification phase of the project is two-fold.
Before committing code to the current-branch, developers request their code to be reviewed by their peers.
@@ -843,12 +840,12 @@ It is an advantage to the project to for each area of the source have at least o
Some parts of the code have designated maintainers. Others have de-facto maintainers, and some parts of the system do not have maintainers.
The maintainer is usually a person from the sub-project that wrote and integrated the code, or someone who has ported it from the platform it was written for.
footnote:[sendmail and named are examples of code that has been merged from other platforms.]
-The maintainer's job is to make sure the code is in sync with the project the code comes from if it is contributed code, and apply patches submitted by the community or write fixes to issues that are discovered.
+The maintainer's job is to make sure the code is in sync with the project the code comes from if it is contributed code, and apply patches submitted by the community or write fixes to issues that are discovered.
The main bulk of work that is put into the FreeBSD project is maintenance.
-[<<jorgensen2001, Jørgensen, 2001>>] has made a figure showing the life cycle of changes.
+[<<jorgensen2001, Jørgensen, 2001>>] has made a figure showing the life cycle of changes.
-Jørgenssen's model for change integration
+Jørgenssen's model for change integration
[.informaltable]
[cols="1,1,1", options="header"]
@@ -883,24 +880,24 @@ Jørgenssen's model for change integration
|===
Here "development release" refers to the -CURRENT branch while "production release" refers to the -STABLE branch.
-The "pre-commit test" is the functional testing by peer developers when asked to do so or trying out the code to determine the status of the sub-project.
-"Parallel debugging" is the functional testing that can trigger more review, and debugging when the code is included in the -CURRENT branch.
+The "pre-commit test" is the functional testing by peer developers when asked to do so or trying out the code to determine the status of the sub-project.
+"Parallel debugging" is the functional testing that can trigger more review, and debugging when the code is included in the -CURRENT branch.
As of this writing, there were 269 committers in the project.
When they commit a change to a branch, that constitutes a new release.
It is very common for users in the community to track a particular branch.
The immediate existence of a new release makes the changes widely available right away and allows for rapid feedback from the community.
This also gives the community the response time they expect on issues that are of importance to them.
-This makes the community more engaged, and thus allows for more and better feedback that again spurs more maintenance and ultimately should create a better product.
+This makes the community more engaged, and thus allows for more and better feedback that again spurs more maintenance and ultimately should create a better product.
-Before making changes to code in parts of the tree that has a history unknown to the committer, the committer is required to read the commit logs to see why certain features are implemented the way they are in order not to make mistakes that have previously either been thought through or resolved.
+Before making changes to code in parts of the tree that has a history unknown to the committer, the committer is required to read the commit logs to see why certain features are implemented the way they are in order not to make mistakes that have previously either been thought through or resolved.
[[model-pr]]
=== Problem reporting
Before FreeBSD 10, FreeBSD included a problem reporting tool called `send-pr`.
-Problems include bug reports, feature requests, feature enhancements and notices of new versions of external software that are included in the project.
-Although `send-pr` is available, users and developers are encouraged to submit issues using our https://bugs.freebsd.org/submit/[ problem report form].
+Problems include bug reports, feature requests, feature enhancements and notices of new versions of external software that are included in the project.
+Although `send-pr` is available, users and developers are encouraged to submit issues using our https://bugs.freebsd.org/submit/[ problem report form].
Problem reports are sent to an email address where it is inserted into the Problem Reports maintenance database.
A <<role-bugbuster>> classifies the problem and sends it to the correct group or maintainer within the project.
@@ -911,7 +908,7 @@ Once a patch for the problem is made, the originator may be asked to try it out.
Finally, the working patch is integrated into the project, and documented if applicable.
It there goes through the regular maintenance cycle as described in section <<model-maintenance>>.
These are the states a problem report can be in: open, analyzed, feedback, patched, suspended and closed.
-The suspended state is for when further progress is not possible due to the lack of information or for when the task would require so much work that nobody is working on it at the moment.
+The suspended state is for when further progress is not possible due to the lack of information or for when the task would require so much work that nobody is working on it at the moment.
.Process summary: problem reporting
image::proc-pr.png[Refer to paragraph below for a screen-reader friendly version.]
@@ -919,15 +916,15 @@ image::proc-pr.png[Refer to paragraph below for a screen-reader friendly version
A problem is reported by the report originator.
It is then classified by a bugbuster and handed to the correct maintainer.
They verify the problem and discuss the problem with the originator until they have enough information to create a working patch.
-This patch is then committed and the problem report is closed.
+This patch is then committed and the problem report is closed.
-The roles included in this process are:
+The roles included in this process are:
. <<role-problem-originator>>
. <<role-maintainer>>
. <<role-bugbuster>>
-[<<freebsd-handle-pr, FreeBSD, 2002C>>]. [<<freebsd-send-pr, FreeBSD, 2002D>>]
+[<<freebsd-handle-pr, FreeBSD, 2002C>>]. [<<freebsd-send-pr, FreeBSD, 2002D>>]
[[process-reactions]]
=== Reacting to misbehavior
@@ -935,24 +932,24 @@ The roles included in this process are:
[<<freebsd-committer, FreeBSD, 2001>>] has a number of rules that committers should follow.
However, it happens that these rules are broken.
The following rules exist in order to be able to react to misbehavior.
-They specify what actions will result in how long a suspension of the committer's commit privileges.
+They specify what actions will result in how long a suspension of the committer's commit privileges.
-* Committing during code freezes without the approval of the Release Engineering team - 2 days
-* Committing to a security branch without approval - 2 days
-* Commit wars - 5 days to all participating parties
-* Impolite or inappropriate behavior - 5 days
+* Committing during code freezes without the approval of the Release Engineering team - 2 days
+* Committing to a security branch without approval - 2 days
+* Commit wars - 5 days to all participating parties
+* Impolite or inappropriate behavior - 5 days
[<<ref-freebsd-trenches, Lehey, 2002>>]
For the suspensions to be efficient, any single core member can implement a suspension before discussing it on the "core" mailing list.
Repeat offenders can, with a 2/3 vote by core, receive harsher penalties, including permanent removal of commit privileges.
(However, the latter is always viewed as a last resort, due to its inherent tendency to create controversy.)
-All suspensions are posted to the "developers" mailing list, a list available to committers only.
+All suspensions are posted to the "developers" mailing list, a list available to committers only.
It is important that you cannot be suspended for making technical errors.
-All penalties come from breaking social etiquette.
+All penalties come from breaking social etiquette.
-Hats involved in this process:
+Hats involved in this process:
* <<role-core>>
* <<role-committer>>
@@ -963,20 +960,20 @@ Hats involved in this process:
The FreeBSD project has a Release Engineering team with a principal release engineer that is responsible for creating releases of FreeBSD that can be brought out to the user community via the net or sold in retail outlets.
Since FreeBSD is available on multiple platforms and releases for the different architectures are made available at the same time, the team has one person in charge of each architecture.
Also, there are roles in the team responsible for coordinating quality assurance efforts, building a package set and for having an updated set of documents.
-When referring to the release engineer, a representative for the release engineering team is meant.
+When referring to the release engineer, a representative for the release engineering team is meant.
When a release is coming, the FreeBSD project changes shape somewhat.
A release schedule is made containing feature- and code-freezes, release of interim releases and the final release.
A feature-freeze means no new features are allowed to be committed to the branch without the release engineers' explicit consent.
Code-freeze means no changes to the code (like bugs-fixes) are allowed to be committed without the release engineers' explicit consent.
This feature- and code-freeze is known as stabilising.
-During the release process, the release engineer has the full authority to revert to older versions of code and thus "back out" changes should they find that the changes are not suitable to be included in the release.
+During the release process, the release engineer has the full authority to revert to older versions of code and thus "back out" changes should they find that the changes are not suitable to be included in the release.
-There are three different kinds of releases:
+There are three different kinds of releases:
-. .0 releases are the first release of a major version. These are branched of the -CURRENT branch and have a significantly longer release engineering cycle due to the unstable nature of the -CURRENT branch
-. .X releases are releases of the -STABLE branch. They are scheduled to come out every 4 months.
-. .X.Y releases are security releases that follow the .X branch. These come out only when sufficient security fixes have been merged since the last release on that branch. New features are rarely included, and the security team is far more involved in these than in regular releases.
+. .0 releases are the first release of a major version. These are branched of the -CURRENT branch and have a significantly longer release engineering cycle due to the unstable nature of the -CURRENT branch
+. .X releases are releases of the -STABLE branch. They are scheduled to come out every 4 months.
+. .X.Y releases are security releases that follow the .X branch. These come out only when sufficient security fixes have been merged since the last release on that branch. New features are rarely included, and the security team is far more involved in these than in regular releases.
For releases of the -STABLE-branch, the release process starts 45 days before the anticipated release date.
During the first phase, the first 15 days, the developers merge what changes they have had in -CURRENT that they want to have in the release to the release branch.
@@ -985,47 +982,47 @@ These changes must be approved by the release engineer in advance. At the beginn
Updates are less likely to be allowed during this period, except for important bug fixes and security updates.
In this final period, all releases are considered release candidates.
At the end of the release process, a release is created with the new version number, including binary distributions on web sites and the creation of CD-ROM images.
-However, the release is not considered "really released" until a <<tool-pgp>>-signed message stating exactly that, is sent to the mailing list freebsd-announce; anything labelled as a "release" before that may well be in-process and subject to change before the PGP-signed message is sent. footnote:[Many commercial vendors use these images to create CD-ROMs that are sold in retail outlets.].
+However, the release is not considered "really released" until a <<tool-pgp>>-signed message stating exactly that, is sent to the mailing list freebsd-announce; anything labelled as a "release" before that may well be in-process and subject to change before the PGP-signed message is sent. footnote:[Many commercial vendors use these images to create CD-ROMs that are sold in retail outlets.].
The releases of the -CURRENT-branch (that is, all releases that end with ".0") are very similar, but with twice as long timeframe.
It starts 8 weeks prior to the release with announcement of the release time line.
Two weeks into the release process, the feature freeze is initiated and performance tweaks should be kept to a minimum.
-Four weeks prior to the release, an official beta version is made available.
+Four weeks prior to the release, an official beta version is made available.
Two weeks prior to release, the code is officially branched into a new version.
-This version is given release candidate status, and as with the release engineering of -STABLE, the code freeze of the release candidate is hardened.
+This version is given release candidate status, and as with the release engineering of -STABLE, the code freeze of the release candidate is hardened.
However, development on the main development branch can continue.
-Other than these differences, the release engineering processes are alike.
+Other than these differences, the release engineering processes are alike.
-*.0 releases go into their own branch and are aimed mainly at early adopters. The branch then goes through a period of stabilisation, and it is not until the <<role-releng, Release Engineering Team>> decides the demands to stability have been satisfied that the branch becomes -STABLE and -CURRENT targets the next major version. While this for the majority has been with *.1 versions, this is not a demand.
+*.0 releases go into their own branch and are aimed mainly at early adopters. The branch then goes through a period of stabilisation, and it is not until the <<role-releng, Release Engineering Team>> decides the demands to stability have been satisfied that the branch becomes -STABLE and -CURRENT targets the next major version. While this for the majority has been with *.1 versions, this is not a demand.
Most releases are made when a given date that has been deemed a long enough time since the previous release comes.
A target is set for having major releases every 18 months and minor releases every 4 months.
The user community has made it very clear that security and stability cannot be sacrificed by self-imposed deadlines and target release dates.
-For slips of time not to become too long with regards to security and stability issues, extra discipline is required when committing changes to -STABLE.
+For slips of time not to become too long with regards to security and stability issues, extra discipline is required when committing changes to -STABLE.
. Make release schedule
. Feature freeze
. Code freeze
. Make branch
. Release candidate
-. Stabilize release (loop back to previous step as many times as necessary; when release is considered stable, proceed with next step)
+. Stabilize release (loop back to previous step as many times as necessary; when release is considered stable, proceed with next step)
. Build packages
. Warn mirrors
. Publish release
-[<<freebsd-releng, FreeBSD, 2002E>>]
+[<<freebsd-releng, FreeBSD, 2002E>>]
[[tools]]
== Tools
The major support tools for supporting the development process are Bugzilla, Mailman, and OpenSSH.
-These are externally developed tools and are commonly used in the open source world.
+These are externally developed tools and are commonly used in the open source world.
-[[tool-svn]]
-=== Subversion (SVN)
+[[tool-git]]
+=== Git
-Subversion ("SVN") is a system to handle multiple versions of text files and tracking who committed what changes and why.
-A project lives within a "repository" and different versions are considered different "branches".
+Git is a system to handle multiple versions of text files and tracking who committed what changes and why.
+A project lives within a "repository" and different versions are considered different "branches".
[[tool-bugzilla]]
=== Bugzilla
@@ -1033,23 +1030,23 @@ A project lives within a "repository" and different versions are considered diff
Bugzilla is a maintenance database consisting of a set of tools to track bugs at a central site.
It supports the bug tracking process for sending and handling bugs as well as querying and updating the database and editing bug reports.
The project uses its web interface to send "Problem Reports" to the project's central Bugzilla server.
-The committers also have web and command-line clients.
+The committers also have web and command-line clients.
[[model-mailman]]
=== Mailman
Mailman is a program that automates the management of mailing lists.
-The FreeBSD Project uses it to run 16 general lists, 60 technical lists, 4 limited lists and 5 lists with SVN commit logs.
+The FreeBSD Project uses it to run 16 general lists, 60 technical lists, 4 limited lists and 5 lists with Git commit logs.
It is also used for many mailing lists set up and used by other people and projects in the FreeBSD community.
General lists are lists for the general public, technical lists are mainly for the development of specific areas of interest, and closed lists are for internal communication not intended for the general public.
-The majority of all the communication in the project goes through these 85 lists [<<ref-bsd-handbook, FreeBSD, 2003A>>, Appendix C].
+The majority of all the communication in the project goes through these 85 lists [<<ref-bsd-handbook, FreeBSD, 2003A>>, Appendix C].
[[tool-pgp]]
=== Pretty Good Privacy
Pretty Good Privacy, better known as PGP, is a cryptosystem using a public key architecture to allow people to digitally sign and/or encrypt information in order to ensure secure communication between two parties.
A signature is used when sending information out to many recipients, enabling them to verify that the information has not been tampered with before they received it.
-In the FreeBSD Project this is the primary means of ensuring that information has been written by the person who claims to have written it, and not altered in transit.
+In the FreeBSD Project this is the primary means of ensuring that information has been written by the person who claims to have written it, and not altered in transit.
[[tool-ssh2]]
=== Secure Shell
@@ -1058,7 +1055,7 @@ Secure Shell is a standard for securely logging into a remote system and for exe
It allows other connections, called tunnels, to be established and protected between the two involved systems.
This standard exists in two primary versions, and only version two is used for the FreeBSD Project.
The most common implementation of the standard is OpenSSH that is a part of the project's main distribution.
-Since its source is updated more often than FreeBSD releases, the latest version is also available in the ports tree.
+Since its source is updated more often than FreeBSD releases, the latest version is also available in the ports tree.
[[sub-projects]]
== Sub-projects
@@ -1069,159 +1066,48 @@ When a problem area is sufficiently isolated, most communication would be within
=== The Ports Subproject
A "port" is a set of meta-data and patches that are needed to fetch, compile and install correctly an external piece of software on a FreeBSD system.
-The amount of ports has grown at a tremendous rate, as shown by the following figure.
-
-.Number of ports added between 1996 and 2008 [[fig-ports]]
-image::portsstatus.png[Refer to tables below for a screen-reader friendly version.]
-
-<<fig-ports>> shows the number of ports available to FreeBSD in the period 1995 to 2008.
-It looks like the curve has first grown exponentially, and then from the middle of 2001 to the middle of 2007 grown linearly at a rate of about 2000 ports/year, before its growth rate gets lower.
-
-Approximate dates each multiple of 1000 ports is reached
-
-[.informaltable]
-[cols="1,1", options="header"]
-|===
-| Number of ports
-| Approximate date
-
-|1000
-|Late 1997
-
-|2000
-|Late 1998
-
-|3000
-|Early 2000
-
-|4000
-|Late 2000
-
-|5000
-|Mid 2001
-
-|6000
-|4th quarter of 2001
-
-|7000
-|Mid 2002
-
-|8000
-|4th quarter of 2002
-
-|9000
-|Mid 2003
-
-|10000
-|End of 2003
-
-|11000
-|Mid 2004
-
-|12000
-|End of 2004
-
-|13000
-|Mid 2005
+The amount of ports has grown at a tremendous rate, as shown by the following figure.
-|14000
-|Early 2006
+.Number of ports added between 1995 and 2022 [[fig-ports]]
+image::portsstatus.svg
-|15000
-|Mid 2006
-
-|16000
-|3rd quarter 2006
-
-|17000
-|2nd quarter 2007
-|===
-
-Approximate number of ports at the start of each year
-
-[.informaltable]
-[cols="1,1", options="header"]
-|===
-| Year
-| Approximate number of ports
-
-|1995
-|100
-
-|1996
-|300
-
-|1997
-|700
-
-|1998
-|1200
-
-|1999
-|2000
-
-|2000
-|2900
-
-|2001
-|4300
-
-|2002
-|6200
-
-|2003
-|8100
-
-|2004
-|10050
-
-|2005
-|12100
-
-|2006
-|14000
-
-|2007
-|16200
-
-|2008
-|17900
-|===
+<<fig-ports>> shows the number of ports available to FreeBSD in the period 1995 to 2022.
+It looks like the curve has first grown exponentially, and then from the middle of 2001 to the middle of 2007 grown linearly at a rate of about 2000 ports/year, before its growth rate gets lower.
As the external software described by the port often is under continued development, the amount of work required to maintain the ports is already large, and increasing.
-This has led to the ports part of the FreeBSD project gaining a more empowered structure, and is more and more becoming a sub-project of the FreeBSD project.
+This has led to the ports part of the FreeBSD project gaining a more empowered structure, and is more and more becoming a sub-project of the FreeBSD project.
-Ports has its own core team with the <<role-ports-manager>> as its leader, and this team can appoint committers without FreeBSD Core's approval.
-Unlike in the FreeBSD Project, where a lot of maintenance frequently is rewarded with a commit bit, the ports sub-project contains many active maintainers that are not committers.
+Ports has its own core team with the <<role-ports-manager>> as its leader, and this team can appoint committers without FreeBSD Core's approval.
+Unlike in the FreeBSD Project, where a lot of maintenance frequently is rewarded with a commit bit, the ports sub-project contains many active maintainers that are not committers.
Unlike the main project, the ports tree is not branched.
Every release of FreeBSD follows the current ports collection and has thus available updated information on where to find programs and how to build them.
-This, however, means that a port that makes dependencies on the system may need to have variations depending on what version of FreeBSD it runs on.
+This, however, means that a port that makes dependencies on the system may need to have variations depending on what version of FreeBSD it runs on.
With an unbranched ports repository it is not possible to guarantee that any port will run on anything other than -CURRENT and -STABLE, in particular older, minor releases.
-There is neither the infrastructure nor volunteer time needed to guarantee this.
+There is neither the infrastructure nor volunteer time needed to guarantee this.
-For efficiency of communication, teams depending on Ports, such as the release engineering team, have their own ports liaisons.
+For efficiency of communication, teams depending on Ports, such as the release engineering team, have their own ports liaisons.
[[sub-project-documentation]]
=== The FreeBSD Documentation Project
The FreeBSD Documentation project was started January 1995.
From the initial group of a project leader, four team leaders and 16 members, they are now a total of 44 committers.
-The documentation mailing list has just under 300 members, indicating that there is quite a large community around it.
+The documentation mailing list has just under 300 members, indicating that there is quite a large community around it.
-The goal of the Documentation project is to provide good and useful documentation of the FreeBSD project, thus making it easier for new users to get familiar with the system and detailing advanced features for the users.
+The goal of the Documentation project is to provide good and useful documentation of the FreeBSD project, thus making it easier for new users to get familiar with the system and detailing advanced features for the users.
-The main tasks in the Documentation project are to work on current projects in the "FreeBSD Documentation Set", and translate the documentation to other languages.
+The main tasks in the Documentation project are to work on current projects in the "FreeBSD Documentation Set", and translate the documentation to other languages.
Like the FreeBSD Project, documentation is split in the same branches.
This is done so that there is always an updated version of the documentation for each version.
-Only documentation errors are corrected in the security branches.
+Only documentation errors are corrected in the security branches.
Like the ports sub-project, the Documentation project can appoint documentation committers without FreeBSD Core's approval. [<<freebsd-doceng-charter, FreeBSD, 2003B>>].
The Documentation project has extref:{fdp-primer}[a primer].
-This is used both to introduce new project members to the standard tools and syntaxes and to act as a reference when working on the project.
+This is used both to introduce new project members to the standard tools and syntaxes and to act as a reference when working on the project.
:sectnums!:
diff --git a/documentation/content/en/books/dev-model/_index.po b/documentation/content/en/books/dev-model/_index.po
new file mode 100644
index 0000000000..081f3c2f88
--- /dev/null
+++ b/documentation/content/en/books/dev-model/_index.po
@@ -0,0 +1,2874 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-04-20 20:56-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/dev-model/_index.adoc:1
+#, no-wrap
+msgid "A formal study of the organization of the FreeBSD project"
+msgstr ""
+
+#. Copyright (c) 2002-2005 Niklas Saers
+#. All rights reserved.
+#. 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.
+#. type: Title =
+#: documentation/content/en/books/dev-model/_index.adoc:1
+#: documentation/content/en/books/dev-model/_index.adoc:39
+#, no-wrap
+msgid "A project model for the FreeBSD Project"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:72
+msgid "'''"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:78
+msgid "Foreword"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:84
+msgid ""
+"Up until now, the FreeBSD project has released a number of described "
+"techniques to do different parts of work. However, a project model "
+"summarising how the project is structured is needed because of the "
+"increasing amount of project members. footnote:[This goes hand-in-hand with "
+"Brooks' law that adding another person to a late project will make it later "
+"since it will increase the communication needs . A project model is a tool "
+"to reduce the communication needs.] This paper will provide such a project "
+"model and is donated to the FreeBSD Documentation project where it can "
+"evolve together with the project so that it can at any point in time reflect "
+"the way the project works. It is based on [<<thesis, Saers,2003>>]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:86
+msgid ""
+"I would like to thank the following people for taking the time to explain "
+"things that were unclear to me and for proofreading the document."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:88
+msgid "Andrey A. Chernov mailto:ache@freebsd.org[ache@freebsd.org]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:89
+msgid "Bruce A. Mah mailto:bmah@freebsd.org[bmah@freebsd.org]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:90
+msgid "Dag-Erling Smørgrav mailto:des@freebsd.org[des@freebsd.org]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:91
+msgid "Giorgos Keramidas mailto:keramida@freebsd.org[keramida@freebsd.org]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:92
+msgid ""
+"Ingvil Hovig mailto:ingvil.hovig@skatteetaten.no[ingvil.hovig@skatteetaten."
+"no]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:93
+msgid "Jesper Holck mailto:jeh.inf@cbs.dk[jeh.inf@cbs.dk]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:94
+msgid "John Baldwin mailto:jhb@freebsd.org[jhb@freebsd.org]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:95
+msgid "John Polstra mailto:jdp@freebsd.org[jdp@freebsd.org]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:96
+msgid "Kirk McKusick mailto:mckusick@freebsd.org[mckusick@freebsd.org]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:97
+msgid "Mark Linimon mailto:linimon@freebsd.org[linimon@freebsd.org]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:98
+msgid "Marleen Devos"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:99
+msgid "Niels Jørgenssen mailto:nielsj@ruc.dk[nielsj@ruc.dk]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:100
+msgid "Nik Clayton mailto:nik@freebsd.org[nik@freebsd.org]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:101
+msgid "Poul-Henning Kamp mailto:phk@freebsd.org[phk@freebsd.org]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:102
+msgid "Simon L. Nielsen mailto:simon@freebsd.org[simon@freebsd.org]"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/dev-model/_index.adoc:104
+#, no-wrap
+msgid "Overview"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:109
+msgid ""
+"A project model is a means to reduce the communications overhead in a "
+"project. As shown by [<<brooks, Brooks, 1995>>], increasing the number of "
+"project participants increases the communication in the project "
+"exponentionally. FreeBSD has during the past few years increased both its "
+"mass of active users and committers, and the communication in the project "
+"has risen accordingly. This project model will serve to reduce this "
+"overhead by providing an up-to-date description of the project."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:115
+msgid ""
+"During the Core elections in 2002, Mark Murray stated \"I am opposed to a "
+"long rule-book, as that satisfies lawyer-tendencies, and is counter to the "
+"technocentricity that the project so badly needs.\" [<<bsd-election2002, "
+"FreeBSD, 2002B>>]. This project model is not meant to be a tool to justify "
+"creating impositions for developers, but as a tool to facilitate "
+"coordination. It is meant as a description of the project, with an overview "
+"of how the different processes are executed. It is an introduction to how "
+"the FreeBSD project works."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:118
+msgid ""
+"The FreeBSD project model will be described as of July 1st, 2004. It is "
+"based on the Niels Jørgensen's paper [<<jorgensen2001, Jørgensen, 2001>>], "
+"FreeBSD's official documents, discussions on FreeBSD mailing lists and "
+"interviews with developers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:121
+msgid ""
+"After providing definitions of terms used, this document will outline the "
+"organisational structure (including role descriptions and communication "
+"lines), discuss the methodology model and after presenting the tools used "
+"for process control, it will present the defined processes. Finally it will "
+"outline major sub-projects of the FreeBSD project."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:125
+msgid ""
+"[<<freebsd-developer-handbook, FreeBSD, 2002A>>] Section 1.2 and 1.3 give "
+"the vision and the architectural guidelines for the project. The vision is "
+"\"To produce the best UNIX-like operating system package possible, with due "
+"respect to the original software tools ideology as well as usability, "
+"performance and stability.\" The architectural guidelines help determine "
+"whether a problem that someone wants to be solved is within the scope of the "
+"project"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/dev-model/_index.adoc:127
+#, no-wrap
+msgid "Definitions"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:130
+#, no-wrap
+msgid "Activity"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:135
+msgid ""
+"An \"activity\" is an element of work performed during the course of a "
+"project [<<ref-pmbok, PMI, 2000>>]. It has an output and leads towards an "
+"outcome. Such an output can either be an input to another activity or a "
+"part of the process' delivery."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:137
+#, no-wrap
+msgid "Process"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:142
+msgid ""
+"A \"process\" is a series of activities that lead towards a particular "
+"outcome. A process can consist of one or more sub-processes. An example of "
+"a process is software design."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:144
+#, no-wrap
+msgid "Hat"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:150
+msgid ""
+"A \"hat\" is synonymous with role. A hat has certain responsibilities in a "
+"process and for the process outcome. The hat executes activities. It is "
+"well defined what issues the hat should be contacted about by the project "
+"members and people outside the project."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:152
+#, no-wrap
+msgid "Outcome"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:158
+msgid ""
+"An \"outcome\" is the final output of the process. This is synonymous with "
+"deliverable, that is defined as \"any measurable, tangible, verifiable "
+"outcome, result or item that must be produced to complete a project or part "
+"of a project. Often used more narrowly in reference to an external "
+"deliverable, which is a deliverable that is subject to approval by the "
+"project sponsor or customer\" by [<<ref-pmbok, PMI, 2000>>]. Examples of "
+"outcomes are a piece of software, a decision made or a report written."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:160
+#, no-wrap
+msgid "FreeBSD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:163
+msgid ""
+"When saying \"FreeBSD\" we will mean the BSD derivative UNIX-like operating "
+"system FreeBSD, whereas when saying \"the FreeBSD Project\" we will mean the "
+"project organisation."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/dev-model/_index.adoc:165
+#, no-wrap
+msgid "Organisational structure"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:168
+msgid ""
+"While no-one takes ownership of FreeBSD, the FreeBSD organisation is divided "
+"into core, committers and contributors and is part of the FreeBSD community "
+"that lives around it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:170
+msgid "The FreeBSD Project's structure (in order of descending authority)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:175
+#: documentation/content/en/books/dev-model/_index.adoc:210
+#, no-wrap
+msgid "Group"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:177
+#: documentation/content/en/books/dev-model/_index.adoc:213
+#, no-wrap
+msgid "Number of people"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:178
+#: documentation/content/en/books/dev-model/_index.adoc:214
+#, no-wrap
+msgid "Core members"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:180
+#: documentation/content/en/books/dev-model/_index.adoc:217
+#, no-wrap
+msgid "9"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:181
+#: documentation/content/en/books/dev-model/_index.adoc:218
+#, no-wrap
+msgid "Committers"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:183
+#, no-wrap
+msgid "318"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:184
+#: documentation/content/en/books/dev-model/_index.adoc:234
+#, no-wrap
+msgid "Contributors"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:185
+#: documentation/content/en/books/dev-model/_index.adoc:236
+#, no-wrap
+msgid "~3000"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:188
+msgid ""
+"Number of committers has been determined by going through CVS logs from "
+"January 1st, 2004 to December 31st, 2004 and contributors by going through "
+"the list of contributions and problem reports."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:193
+msgid ""
+"The main resource in the FreeBSD community is its developers: the committers "
+"and contributors. It is with their contributions that the project can move "
+"forward. Regular developers are referred to as contributors. As of January "
+"1st, 2003, there are an estimated 5500 contributors on the project."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:197
+msgid ""
+"Committers are developers with the privilege of being able to commit "
+"changes. These are usually the most active developers who are willing to "
+"spend their time not only integrating their own code but integrating code "
+"submitted by the developers who do not have this privilege. They are also "
+"the developers who elect the core team, and they have access to closed "
+"discussions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:201
+msgid ""
+"The project can be grouped into four distinct separate parts, and most "
+"developers will focus their involvement in one part of FreeBSD. The four "
+"parts are kernel development, userland development, ports and "
+"documentation. When referring to the base system, both kernel and userland "
+"is meant."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:203
+msgid "This split changes our table to look like this:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:205
+msgid "The FreeBSD Project's structure with committers in categories"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:211
+#, no-wrap
+msgid "Category"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:219
+#, no-wrap
+msgid "Base"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:221
+#, no-wrap
+msgid "164"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:223
+#, no-wrap
+msgid "Docs"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:225
+#, no-wrap
+msgid "45"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:227
+#, no-wrap
+msgid "Ports"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:229
+#, no-wrap
+msgid "166"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:231
+#, no-wrap
+msgid "Total"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:233
+#, no-wrap
+msgid "374"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:241
+msgid ""
+"Number of committers per area has been determined by going through CVS logs "
+"from January 1st, 2004 to December 31st, 2004. Note that many committers "
+"work in multiple areas, making the total number higher than the real number "
+"of committers. The total number of active unique committers on June 2022 "
+"was 317."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:244
+msgid ""
+"Committers fall into three groups: committers who are only concerned with "
+"one area of the project (for instance file systems), committers who are "
+"involved only with one sub-project, and committers who commit to different "
+"parts of the code, including sub-projects. Because some committers work on "
+"different parts, the total number in the committers section of the table is "
+"higher than in the above table."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:249
+msgid ""
+"The kernel is the main building block of FreeBSD. While the userland "
+"applications are protected against faults in other userland applications, "
+"the entire system is vulnerable to errors in the kernel. This, combined "
+"with the vast amount of dependencies in the kernel and that it is not easy "
+"to see all the consequences of a kernel change, demands developers with a "
+"relative full understanding of the kernel. Multiple development efforts in "
+"the kernel also require a closer coordination than userland applications do."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:253
+msgid ""
+"The core utilities, known as userland, provide the interface that identifies "
+"FreeBSD, both user interface, shared libraries and external interfaces to "
+"connecting clients. Currently, 162 people are involved in userland "
+"development and maintenance, many being maintainers for their own part of "
+"the code. Maintainership will be discussed in the <<role-maintainer>> "
+"section."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:256
+msgid ""
+"Documentation is handled by <<sub-project-documentation>> and includes all "
+"documents surrounding the FreeBSD project, including the web pages. There "
+"were during 2004 101 people making commits to the FreeBSD Documentation "
+"Project."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:264
+msgid ""
+"Ports is the collection of meta-data that is needed to make software "
+"packages build correctly on FreeBSD. An example of a port is the port for "
+"the web-browser Mozilla. It contains information about where to fetch the "
+"source, what patches to apply and how, and how the package should be "
+"installed on the system. This allows automated tools to fetch, build and "
+"install the package. As of this writing, there are more than 12600 ports "
+"available. footnote:[Statistics are generated by counting the number of "
+"entries in the file fetched by portsdb by April 1st, 2005. portsdb is a part "
+"of the port sysutils/portupgrade.] , ranging from web servers to games, "
+"programming languages and most of the application types that are in use on "
+"modern computers. Ports will be discussed further in the section <<sub-"
+"project-ports>>."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/dev-model/_index.adoc:266
+#, no-wrap
+msgid "Methodology model"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:269
+#, no-wrap
+msgid "Development model"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:273
+msgid ""
+"There is no defined model for how people write code in FreeBSD. However, "
+"Niels Jørgenssen has suggested a model of how written code is integrated "
+"into the project."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:275
+#: documentation/content/en/books/dev-model/_index.adoc:849
+msgid "Jørgenssen's model for change integration"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:280
+#: documentation/content/en/books/dev-model/_index.adoc:854
+#, no-wrap
+msgid "Stage"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:281
+#: documentation/content/en/books/dev-model/_index.adoc:855
+#, no-wrap
+msgid "Next if successful"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:283
+#: documentation/content/en/books/dev-model/_index.adoc:857
+#, no-wrap
+msgid "Next if unsuccessful"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:284
+#: documentation/content/en/books/dev-model/_index.adoc:291
+#: documentation/content/en/books/dev-model/_index.adoc:295
+#: documentation/content/en/books/dev-model/_index.adoc:299
+#: documentation/content/en/books/dev-model/_index.adoc:303
+#: documentation/content/en/books/dev-model/_index.adoc:306
+#: documentation/content/en/books/dev-model/_index.adoc:858
+#: documentation/content/en/books/dev-model/_index.adoc:865
+#: documentation/content/en/books/dev-model/_index.adoc:869
+#: documentation/content/en/books/dev-model/_index.adoc:873
+#: documentation/content/en/books/dev-model/_index.adoc:877
+#: documentation/content/en/books/dev-model/_index.adoc:880
+#, no-wrap
+msgid "code"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:285
+#: documentation/content/en/books/dev-model/_index.adoc:288
+#: documentation/content/en/books/dev-model/_index.adoc:859
+#: documentation/content/en/books/dev-model/_index.adoc:862
+#, no-wrap
+msgid "review"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:289
+#: documentation/content/en/books/dev-model/_index.adoc:292
+#: documentation/content/en/books/dev-model/_index.adoc:863
+#: documentation/content/en/books/dev-model/_index.adoc:866
+#, no-wrap
+msgid "pre-commit test"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:293
+#: documentation/content/en/books/dev-model/_index.adoc:296
+#: documentation/content/en/books/dev-model/_index.adoc:867
+#: documentation/content/en/books/dev-model/_index.adoc:870
+#, no-wrap
+msgid "development release"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:297
+#: documentation/content/en/books/dev-model/_index.adoc:300
+#: documentation/content/en/books/dev-model/_index.adoc:871
+#: documentation/content/en/books/dev-model/_index.adoc:874
+#, no-wrap
+msgid "parallel debugging"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:301
+#: documentation/content/en/books/dev-model/_index.adoc:304
+#: documentation/content/en/books/dev-model/_index.adoc:875
+#: documentation/content/en/books/dev-model/_index.adoc:878
+#, no-wrap
+msgid "production release"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:309
+msgid ""
+"The \"development release\" is the FreeBSD-CURRENT (\"-CURRENT\") branch and "
+"the \"production release\" is the FreeBSD-STABLE branch (\"-STABLE\") "
+"[<<jorgensen2001, Jørgensen, 2001>>]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:315
+msgid ""
+"This is a model for one change, and shows that after coding, developers seek "
+"community review and try integrating it with their own systems. After "
+"integrating the change into the development release, called FreeBSD-CURRENT, "
+"it is tested by many users and developers in the FreeBSD community. After "
+"it has gone through enough testing, it is merged into the production "
+"release, called FreeBSD-STABLE. Unless each stage is finished successfully, "
+"the developer needs to go back and make modifications in the code and "
+"restart the process. To integrate a change with either -CURRENT or -STABLE "
+"is called making a commit."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:318
+msgid ""
+"Jørgensen found that most FreeBSD developers work individually, meaning that "
+"this model is used in parallel by many developers on the different ongoing "
+"development efforts. A developer can also be working on multiple changes, "
+"so that while they are waiting for review or people to test one or more of "
+"their changes, they may be writing another change."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:321
+msgid ""
+"As each commit represents an increment, this is a massively incremental "
+"model. The commits are in fact so frequent that during one year footnote:"
+"[The period from January 1st, 2004 to December 31st, 2004 was examined to "
+"find this number.] , 85427 commits were made, making a daily average of 233 "
+"commits."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:325
+msgid ""
+"Within the \"code\" bracket in Jørgensen's model, each programmer has their "
+"own working style and follows their own development models. The bracket "
+"could very well have been called \"development\" as it includes requirements "
+"gathering and analysis, system and detailed design, implementation and "
+"verification. However, the only output from these stages is the source code "
+"or system documentation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:331
+msgid ""
+"From a stepwise model's perspective (such as the waterfall model), the other "
+"brackets can be seen as further verification and system integration. This "
+"system integration is also important to see if a change is accepted by the "
+"community. Up until the code is committed, the developer is free to choose "
+"how much to communicate about it to the rest of the project. In order for -"
+"CURRENT to work as a buffer (so that bright ideas that had some undiscovered "
+"drawbacks can be backed out) the minimum time a commit should be in -CURRENT "
+"before merging it to -STABLE is 3 days. Such a merge is referred to as an "
+"MFC (Merge From Current)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:334
+msgid ""
+"It is important to notice the word \"change\". Most commits do not contain "
+"radical new features, but are maintenance updates."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:337
+msgid ""
+"The only exceptions from this model are security fixes and changes to "
+"features that are deprecated in the -CURRENT branch. In these cases, "
+"changes can be committed directly to the -STABLE branch."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:342
+msgid ""
+"In addition to many people working on the project, there are many related "
+"projects to the FreeBSD Project. These are either projects developing brand "
+"new features, sub-projects or projects whose outcome is incorporated into "
+"FreeBSD footnote:[For instance, the development of the Bluetooth stack "
+"started as a sub-project until it was deemed stable enough to be merged into "
+"the -CURRENT branch. Now it is a part of the core FreeBSD system.]. These "
+"projects fit into the FreeBSD Project just like regular development efforts: "
+"they produce code that is integrated with the FreeBSD Project. However, "
+"some of them (like Ports and Documentation) have the privilege of being "
+"applicable to both branches or commit directly to both -CURRENT and -STABLE."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:349
+msgid ""
+"There is no standards to how design should be done, nor is design collected "
+"in a centralised repository. The main design is that of 4.4BSD. footnote:"
+"[According to Kirk McKusick, after 20 years of developing UNIX operating "
+"systems, the interfaces are for the most part figured out. There is "
+"therefore no need for much design. However, new applications of the system "
+"and new hardware leads to some implementations being more beneficial than "
+"those that used to be preferred. One example is the introduction of web "
+"browsing that made the normal TCP/IP connection a short burst of data rather "
+"than a steady stream over a longer period of time.] As design is a part of "
+"the \"Code\" bracket in Jørgenssen's model, it is up to every developer or "
+"sub-project how this should be done. Even if the design should be stored in "
+"a central repository, the output from the design stages would be of limited "
+"use as the differences of methodologies would make them poorly if at all "
+"interoperable. For the overall design of the project, the project relies on "
+"the sub-projects to negotiate fit interfaces between each other rather than "
+"to dictate interfacing."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:351
+#, no-wrap
+msgid "Release branches"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:355
+msgid ""
+"The releases of FreeBSD are best illustrated by a tree with many branches "
+"where each major branch represents a major version. Minor versions are "
+"represented by branches of the major branches."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:362
+msgid ""
+"In the following release tree, arrows that follow one-another in a "
+"particular direction represent a branch. Boxes with full lines and diamonds "
+"represent official releases. Boxes with dotted lines represent the "
+"development branch at that time. Security branches are represented by "
+"ovals. Diamonds differ from boxes in that they represent a fork, meaning a "
+"place where a branch splits into two branches where one of the branches "
+"becomes a sub-branch. For example, at 4.0-RELEASE the 4.0-CURRENT branch "
+"split into 4-STABLE and 5.0-CURRENT. At 4.5-RELEASE, the branch forked off a "
+"security branch called RELENG_4_5."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/dev-model/_index.adoc:363
+#, no-wrap
+msgid "The FreeBSD release tree"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/dev-model/_index.adoc:364
+#, no-wrap
+msgid "Refer to table below for a screen-reader friendly version."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/dev-model/_index.adoc:364
+#, no-wrap
+msgid "branches.png"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:370
+#, no-wrap
+msgid "Major release"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:371
+#, no-wrap
+msgid "Forked from"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:373
+#, no-wrap
+msgid "Following minor releases"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:374
+#: documentation/content/en/books/dev-model/_index.adoc:394
+#, no-wrap
+msgid "..."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:378
+#, no-wrap
+msgid "3.0 Current (development branch)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:381
+#, no-wrap
+msgid "Releng 3 branches: 3.0 Release to 3.5 Release, leading to 3.5.1 Release and the subsequent 3 Stable branch"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:382
+#, no-wrap
+msgid "4.0 Current (development branch)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:383
+#, no-wrap
+msgid "3.1 Release"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:385
+#, no-wrap
+msgid "Releng 4 branches: 4.1 Release to 4.6 Release (and 4.6.2 Release), then 4.7 Release to 4.11 Release (all starting at 4.3 Release also leading to a Releng_4_n branch), and the subsequent 4 Release branch"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:386
+#, no-wrap
+msgid "5.0 Current (development branch)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:387
+#, no-wrap
+msgid "4.0 Release"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:389
+#, no-wrap
+msgid "Releng 5 branches: 5.0 Release to 5.4 Release (all except 5.0 and 5.3 also leading to a Releng_5_n branch), and the subsequent 5 Release branch"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:390
+#, no-wrap
+msgid "6.0 Current (development branch)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/dev-model/_index.adoc:391
+#, no-wrap
+msgid "5.3 Release"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:401
+msgid ""
+"The latest -CURRENT version is always referred to as -CURRENT, while the "
+"latest -STABLE release is always referred to as -STABLE. In this figure, -"
+"STABLE refers to 4-STABLE while -CURRENT refers to 5.0-CURRENT following 5.0-"
+"RELEASE. [<<freebsd-releng, FreeBSD, 2002E>>]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:408
+msgid ""
+"A \"major release\" is always made from the -CURRENT branch. However, the -"
+"CURRENT branch does not need to fork at that point in time, but can focus on "
+"stabilising. An example of this is that following 3.0-RELEASE, 3.1-RELEASE "
+"was also a continuation of the -CURRENT-branch, and -CURRENT did not become "
+"a true development branch until this version was released and the 3-STABLE "
+"branch was forked. When -CURRENT returns to becoming a development branch, "
+"it can only be followed by a major release. 5-STABLE is predicted to be "
+"forked off 5.0-CURRENT at around 5.3-RELEASE. It is not until 5-STABLE is "
+"forked that the development branch will be branded 6.0-CURRENT."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:410
+msgid ""
+"A \"minor release\" is made from the -CURRENT branch following a major "
+"release, or from the -STABLE branch."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:413
+msgid ""
+"Following and including, 4.3-RELEASEfootnote:[The first release this "
+"actually happened for was 4.5-RELEASE, but security branches were at the "
+"same time created for 4.3-RELEASE and 4.4-RELEASE.], when a minor release "
+"has been made, it becomes a \"security branch\". This is meant for "
+"organisations that do not want to follow the -STABLE branch and the "
+"potential new/changed features it offers, but instead require an absolutely "
+"stable environment, only updating to implement security updates. footnote:"
+"[There is a terminology overlap with respect to the word \"stable\", which "
+"leads to some confusion. The -STABLE branch is still a development branch, "
+"whose goal is to be useful for most people. If it is never acceptable for a "
+"system to get changes that are not announced at the time it is deployed, "
+"that system should run a security branch.]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:418
+msgid ""
+"Each update to a security branch is called a \"patchlevel\". For every "
+"security enhancement that is done, the patchlevel number is increased, "
+"making it easy for people tracking the branch to see what security "
+"enhancements they have implemented. In cases where there have been "
+"especially serious security flaws, an entire new release can be made from a "
+"security branch. An example of this is 4.6.2-RELEASE."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:420
+#, no-wrap
+msgid "Model summary"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:423
+msgid ""
+"To summarise, the development model of FreeBSD can be seen as the following "
+"tree:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/dev-model/_index.adoc:424
+#, no-wrap
+msgid "The overall development model"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/dev-model/_index.adoc:425
+#, no-wrap
+msgid "Refer to paragraphs below for a screen-reader friendly version."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/dev-model/_index.adoc:425
+#, no-wrap
+msgid "freebsd-code-model.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:428
+msgid ""
+"The tree of the FreeBSD development with ongoing development efforts and "
+"continuous integration."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:432
+msgid ""
+"The tree symbolises the release versions with major versions spawning new "
+"main branches and minor versions being versions of the main branch. The top "
+"branch is the -CURRENT branch where all new development is integrated, and "
+"the -STABLE branch is the branch directly below it. Below the -STABLE "
+"branch are old, unsupported versions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:436
+msgid ""
+"Clouds of development efforts hang over the project where developers use the "
+"development models they see fit. The product of their work is then "
+"integrated into -CURRENT where it undergoes parallel debugging and is "
+"finally merged from -CURRENT into -STABLE. Security fixes are merged from -"
+"STABLE to the security branches."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:443
+msgid ""
+"Many committers have a special area of responsibility. These roles are "
+"called hats. These hats can be either project roles, such as public "
+"relations officer, or maintainer for a certain area of the code. Because "
+"this is a project where people give voluntarily of their spare time, people "
+"with assigned hats are not always available. They must therefore appoint a "
+"deputy that can perform the hat's role in their absence. The other option "
+"is to have the role held by a group."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:448
+msgid ""
+"Many of these hats are not formalised. Formalised hats have a charter "
+"stating the exact purpose of the hat along with its privileges and "
+"responsibilities. The writing of such charters is a new part of the "
+"project, and has thus yet to be completed for all hats. These hat "
+"descriptions are not such a formalisation, rather a summary of the role with "
+"links to the charter where available and contact addresses."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/dev-model/_index.adoc:450
+#, no-wrap
+msgid "Hats"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:453
+#, no-wrap
+msgid "General Hats"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:456
+#, no-wrap
+msgid "Contributor"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:459
+msgid ""
+"A Contributor contributes to the FreeBSD project either as a developer, as "
+"an author, by sending problem reports, or in other ways contributing to the "
+"progress of the project. A contributor has no special privileges in the "
+"FreeBSD project. [<<freebsd-contributors, FreeBSD, 2002F>>]"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:461
+#, no-wrap
+msgid "Committer"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:466
+msgid ""
+"A person who has the required privileges to add their code or documentation "
+"to the repository. A committer has made a commit within the past 12 "
+"months. [<<freebsd-developer-handbook, FreeBSD, 2000A>>] An active "
+"committer is a committer who has made an average of one commit per month "
+"during that time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:469
+msgid ""
+"It is worth noting that there are no technical barriers to prevent someone, "
+"once having gained commit privileges to the main- or a sub-project, to make "
+"commits in parts of that project's source the committer did not specifically "
+"get permission to modify. However, when wanting to make modifications to "
+"parts a committer has not been involved in before, they should read the logs "
+"to see what has happened in this area before, and also read the MAINTAINERS "
+"file to see if the maintainer of this part has any special requests on how "
+"changes in the code should be made."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:471
+#, no-wrap
+msgid "Core Team"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:477
+msgid ""
+"The core team is elected by the committers from the pool of committers and "
+"serves as the board of directors of the FreeBSD project. It promotes active "
+"contributors to committers, assigns people to well-defined hats, and is the "
+"final arbiter of decisions involving which way the project should be "
+"heading. As of July 1st, 2004, core consisted of 9 members. Elections are "
+"held every two years."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:479
+#, no-wrap
+msgid "Maintainership"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:483
+msgid ""
+"Maintainership means that the person is responsible for what is allowed to "
+"go into that area of the code and has the final say should disagreements "
+"over the code occur. This involves proactive work aimed at stimulating "
+"contributions and reactive work in reviewing commits."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:486
+msgid ""
+"With the FreeBSD source comes the MAINTAINERS file that contains a one-line "
+"summary of how each maintainer would like contributions to be made. Having "
+"this notice and contact information enables developers to focus on the "
+"development effort rather than being stuck in a slow correspondence should "
+"the maintainer be unavailable for some time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:489
+msgid ""
+"If the maintainer is unavailable for an unreasonably long period of time, "
+"and other people do a significant amount of work, maintainership may be "
+"switched without the maintainer's approval. This is based on the stance "
+"that maintainership should be demonstrated, not declared."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:491
+msgid ""
+"Maintainership of a particular piece of code is a hat that is not held as a "
+"group."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:493
+#, no-wrap
+msgid "Official Hats"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:498
+msgid ""
+"The official hats in the FreeBSD Project are hats that are more or less "
+"formalised and mainly administrative roles. They have the authority and "
+"responsibility for their area. The following list shows the responsibility "
+"lines and gives a description of each hat, including who it is held by."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:500
+#, no-wrap
+msgid "Documentation project manager"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:503
+msgid ""
+"<<sub-project-documentation>> architect is responsible for defining and "
+"following up documentation goals for the committers in the Documentation "
+"project, which they supervise."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:506
+msgid ""
+"Hat held by: The DocEng team mailto:doceng@FreeBSD.org[doceng@FreeBSD.org]. "
+"The https://www.freebsd.org/internal/doceng/[ DocEng Charter]."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:508
+#, no-wrap
+msgid "Postmaster"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:512
+msgid ""
+"The Postmaster is responsible for mail being correctly delivered to the "
+"committers' email address. They are also responsible for ensuring that the "
+"mailing lists work and should take measures against possible disruptions of "
+"mail such as having troll-, spam- and virus-filters."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:514
+msgid ""
+"Hat currently held by: the Postmaster Team mailto:postmaster@FreeBSD."
+"org[postmaster@FreeBSD.org]."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:516
+#, no-wrap
+msgid "Release Coordination"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:519
+msgid "The responsibilities of the Release Engineering Team are"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:521
+msgid ""
+"Setting, publishing and following a release schedule for official releases"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:522
+msgid "Documenting and formalising release engineering procedures"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:523
+msgid "Creation and maintenance of code branches"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:524
+msgid ""
+"Coordinating with the Ports and Documentation teams to have an updated set "
+"of packages and documentation released with the new releases"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:525
+msgid ""
+"Coordinating with the Security team so that pending releases are not "
+"affected by recently disclosed vulnerabilities."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:527
+msgid ""
+"Further information about the development process is available in the "
+"<<process-release-engineering>> section."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:531
+msgid ""
+"Hat held by: the Release Engineering team mailto:re@FreeBSD.org[re@FreeBSD."
+"org]. The https://www.freebsd.org/releng/charter/[ Release Engineering "
+"Charter]."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:533
+#, no-wrap
+msgid "Public Relations & Corporate Liaison"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:536
+msgid "The Public Relations & Corporate Liaison's responsibilities are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:538
+msgid ""
+"Making press statements when happenings that are important to the FreeBSD "
+"Project happen."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:539
+msgid ""
+"Being the official contact person for corporations that are working close "
+"with the FreeBSD Project."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:540
+msgid ""
+"Take steps to promote FreeBSD within both the Open Source community and the "
+"corporate world."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:541
+msgid "Handle the \"freebsd-advocacy\" mailing list."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:543
+msgid "This hat is currently not occupied."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:545
+#, no-wrap
+msgid "Security Officer"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:549
+msgid ""
+"The Security Officer's main responsibility is to coordinate information "
+"exchange with others in the security community and in the FreeBSD project. "
+"The Security Officer is also responsible for taking action when security "
+"problems are reported and promoting proactive development behavior when it "
+"comes to security."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:552
+msgid ""
+"Because of the fear that information about vulnerabilities may leak out to "
+"people with malicious intent before a patch is available, only the Security "
+"Officer, consisting of an officer, a deputy and two <<role-core>> members, "
+"receive sensitive information about security issues. However, to create or "
+"implement a patch, the Security Officer has the Security Officer Team mailto:"
+"security-team@FreeBSD.org[security-team@FreeBSD.org] to help do the work."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:554
+#, no-wrap
+msgid "Source Repository Manager"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:559
+msgid ""
+"The Source Repository Manager is the only one who is allowed to directly "
+"modify the repository without using the <<tool-git>> tool. It is their "
+"responsibility to ensure that technical problems that arise in the "
+"repository are resolved quickly. The source repository manager has the "
+"authority to back out commits if this is necessary to resolve a Git "
+"technical problem."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:561
+msgid ""
+"Hat held by: the Source Repository Manager mailto:clusteradm@FreeBSD."
+"org[clusteradm@FreeBSD.org]."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:563
+#, no-wrap
+msgid "Election Manager"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:568
+msgid ""
+"The Election Manager is responsible for the <<process-core-election>> "
+"process. The manager is responsible for running and maintaining the "
+"election system, and is the final authority should minor unforeseen events "
+"happen in the election process. Major unforeseen events have to be "
+"discussed with the <<role-core>>"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:570
+msgid "Hat held only during elections."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:572
+#, no-wrap
+msgid "Web site Management"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:576
+msgid ""
+"The Web site Management hat is responsible for coordinating the rollout of "
+"updated web pages on mirrors around the world, for the overall structure of "
+"the primary web site and the system it is running upon. The management "
+"needs to coordinate the content with <<sub-project-documentation>> and acts "
+"as maintainer for the \"www\" tree."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:578
+msgid ""
+"Hat held by: the FreeBSD Webmasters mailto:www@FreeBSD.org[www@FreeBSD.org]."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:580
+#, no-wrap
+msgid "Ports Manager"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:583
+msgid ""
+"The Ports Manager acts as a liaison between <<sub-project-ports>> and the "
+"core project, and all requests from the project should go to the ports "
+"manager."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:586
+msgid ""
+"Hat held by: the Ports Management Team mailto:portmgr@FreeBSD."
+"org[portmgr@FreeBSD.org]. The https://www.freebsd.org/portmgr/charter/"
+"[Portmgr charter]."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:588
+#, no-wrap
+msgid "Standards"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:591
+msgid ""
+"The Standards hat is responsible for ensuring that FreeBSD complies with the "
+"standards it is committed to , keeping up to date on the development of "
+"these standards and notifying FreeBSD developers of important changes that "
+"allows them to take a proactive role and decrease the time between a "
+"standards update and FreeBSD's compliancy."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:593
+msgid ""
+"Hat currently held by: Garrett Wollman mailto:wollman@FreeBSD."
+"org[wollman@FreeBSD.org]."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:595
+#, no-wrap
+msgid "Core Secretary"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:599
+msgid ""
+"The Core Secretary's main responsibility is to write drafts to and publish "
+"the final Core Reports. The secretary also keeps the core agenda, thus "
+"ensuring that no balls are dropped unresolved."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:601
+msgid "Hat currently held by: {carlavilla}."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:603
+#, no-wrap
+msgid "Bugmeister"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:607
+msgid ""
+"The Bugmeister is responsible for ensuring that the maintenance database is "
+"in working order, that the entries are correctly categorised and that there "
+"are no invalid entries. They supervise bugbusters."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:609
+msgid ""
+"Hat currently held by: the Bugmeister Team mailto:bugmeister@FreeBSD."
+"org[bugmeister@FreeBSD.org]."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:611
+#, no-wrap
+msgid "Donations Liaison Officer"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:614
+msgid ""
+"The task of the donations liaison officer is to match the developers with "
+"needs with people or organisations willing to make a donation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:617
+msgid ""
+"Hat held by: the Donations Liaison Office mailto:donations@FreeBSD."
+"org[donations@FreeBSD.org]. The https://www.freebsd.org/donations/"
+"[ Donations Liaison Charter]."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:619
+#, no-wrap
+msgid "Admin"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:622
+msgid "(Also called \"FreeBSD Cluster Admin\")"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:625
+msgid ""
+"The admin team consists of the people responsible for administrating the "
+"computers that the project relies on for its distributed work and "
+"communication to be synchronised. It consists mainly of those people who "
+"have physical access to the servers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:627
+msgid ""
+"Hat held by: the Admin team mailto:admin@FreeBSD.org[admin@FreeBSD.org]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:629
+#, no-wrap
+msgid "Process dependent hats"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:632
+#, no-wrap
+msgid "Report originator"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:635
+msgid "The person originally responsible for filing a Problem Report."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:637
+#, no-wrap
+msgid "Bugbuster"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:640
+msgid ""
+"A person who will either find the right person to solve the problem, or "
+"close the PR if it is a duplicate or otherwise not an interesting one."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:642
+#, no-wrap
+msgid "Mentor"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:645
+msgid ""
+"A mentor is a committer who takes it upon them to introduce a new committer "
+"to the project, both in terms of ensuring the new committer's setup is "
+"valid, that the new committer knows the available tools required in their "
+"work, and that the new committer knows what is expected of them in terms of "
+"behavior."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:647
+#, no-wrap
+msgid "Vendor"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:650
+msgid ""
+"The person(s) or organisation whom external code comes from and whom patches "
+"are sent to."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/dev-model/_index.adoc:652
+#, no-wrap
+msgid "Reviewers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:655
+msgid "People on the mailing list where the request for review is posted."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:658
+msgid ""
+"The following section will describe the defined project processes. Issues "
+"that are not handled by these processes happen on an ad-hoc basis based on "
+"what has been customary to do in similar cases."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/dev-model/_index.adoc:660
+#, no-wrap
+msgid "Processes"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:663
+#, no-wrap
+msgid "Adding new and removing old committers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:668
+msgid ""
+"The Core team has the responsibility of giving and removing commit "
+"privileges to contributors. This can only be done through a vote on the "
+"core mailing list. The ports and documentation sub-projects can give commit "
+"privileges to people working on these projects, but have to date not removed "
+"such privileges."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:671
+msgid ""
+"Normally a contributor is recommended to core by a committer. For "
+"contributors or outsiders to contact core asking to be a committer is not "
+"well thought of and is usually rejected."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:674
+msgid ""
+"If the area of particular interest for the developer potentially overlaps "
+"with other committers' area of maintainership, the opinion of those "
+"maintainers is sought. However, it is frequently this committer that "
+"recommends the developer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:677
+msgid ""
+"When a contributor is given committer status, they are assigned a mentor. "
+"The committer who recommended the new committer will, in the general case, "
+"take it upon themselves to be the new committers mentor."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:681
+msgid ""
+"When a contributor is given their commit bit, a <<tool-pgp>>-signed email is "
+"sent from either <<role-core-secretary>>, <<role-ports-manager>>, or "
+"nik@freebsd.org to both admins@freebsd.org, the assigned mentor, the new "
+"committer, and core confirming the approval of a new account. The mentor "
+"then gathers a password line, <<tool-ssh2>> public key, and PGP key from the "
+"new committer and sends them to <<role-admin>>. When the new account is "
+"created, the mentor activates the commit bit and guides the new committer "
+"through the rest of the initial process."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/dev-model/_index.adoc:682
+#, no-wrap
+msgid "Process summary: adding a new committer"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/dev-model/_index.adoc:683
+#: documentation/content/en/books/dev-model/_index.adoc:698
+#: documentation/content/en/books/dev-model/_index.adoc:741
+#: documentation/content/en/books/dev-model/_index.adoc:792
+#: documentation/content/en/books/dev-model/_index.adoc:914
+#, no-wrap
+msgid "Refer to paragraph below for a screen-reader friendly version."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/dev-model/_index.adoc:683
+#, no-wrap
+msgid "proc-add-committer.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:690
+msgid ""
+"When a contributor sends a piece of code, the receiving committer may choose "
+"to recommend that the contributor is given commit privileges. If they "
+"recommend this to core, core will vote on this recommendation. If the vote "
+"is in favour, a mentor is assigned the new committer and the new committer "
+"has to email their details to the administrators for an account to be "
+"created. After this, the new committer is all set to make their first "
+"commit. By tradition, this is by adding their name to the committers list."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:693
+msgid ""
+"Recall that a committer is considered to be someone who has committed code "
+"during the past 12 months. However, it is not until after 18 months of "
+"inactivity have passed that commit privileges are eligible to be revoked."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:696
+msgid ""
+"There are, however, no automatic procedures for doing this. For reactions "
+"concerning commit privileges not triggered by time, see <<process-reactions,"
+"section 1.5.8>>."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/dev-model/_index.adoc:697
+#, no-wrap
+msgid "Process summary: removing a committer"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/dev-model/_index.adoc:698
+#, no-wrap
+msgid "proc-rm-committer.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:702
+msgid ""
+"When Core decides to clean up the committers list, they check who has not "
+"made a commit for the past 18 months. Committers who have not done so have "
+"their commit bits revoked and their account removed by the administrators."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:705
+msgid ""
+"It is also possible for committers to request that their commit bit be "
+"retired if for some reason they are no longer going to be actively "
+"committing to the project. In this case, it can also be restored at a later "
+"time by core, should the committer ask."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:707
+msgid "Roles in this process:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:709
+#: documentation/content/en/books/dev-model/_index.adoc:801
+#: documentation/content/en/books/dev-model/_index.adoc:955
+msgid "<<role-core>>"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:710
+#: documentation/content/en/books/dev-model/_index.adoc:760
+msgid "<<role-contributor>>"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:711
+#: documentation/content/en/books/dev-model/_index.adoc:759
+#: documentation/content/en/books/dev-model/_index.adoc:802
+#: documentation/content/en/books/dev-model/_index.adoc:956
+msgid "<<role-committer>>"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:712
+#: documentation/content/en/books/dev-model/_index.adoc:925
+msgid "<<role-maintainer>>"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:713
+msgid "<<role-mentor>>"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:717
+#, no-wrap
+msgid "Committing code"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:722
+msgid ""
+"The committing of new or modified code is one of the most frequent processes "
+"in the FreeBSD project and will usually happen many times a day. Committing "
+"of code can only be done by a \"committer\". Committers commit either code "
+"written by themselves, code submitted to them, or code submitted through a "
+"<<model-pr,problem report>>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:728
+msgid ""
+"When code is written by the developer that is non-trivial, they should seek "
+"a code review from the community. This is done by sending mail to the "
+"relevant list asking for review. Before submitting the code for review, "
+"they should ensure it compiles correctly with the entire tree and that all "
+"relevant tests run. This is called \"pre-commit test\". When contributed "
+"code is received, it should be reviewed by the committer and tested the same "
+"way."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:731
+msgid ""
+"When a change is committed to a part of the source that has been contributed "
+"from an outside <<role-vendor>>, the maintainer should ensure that the patch "
+"is contributed back to the vendor. This is in line with the open source "
+"philosophy and makes it easier to stay in sync with outside projects as the "
+"patches do not have to be reapplied every time a new release is made."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:736
+msgid ""
+"After the code has been available for review and no further changes are "
+"necessary, the code is committed into the development branch, -CURRENT. If "
+"the change applies for the -STABLE branch or the other branches as well, a "
+"\"Merge From Current\" (\"MFC\") countdown is set by the committer. After "
+"the number of days the committer chose when setting the MFC have passed, an "
+"email will automatically be sent to the committer reminding them to commit "
+"it to the -STABLE branch (and possibly security branches as well). Only "
+"security critical changes should be merged to security branches."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:739
+msgid ""
+"Delaying the commit to -STABLE and other branches allows for \"parallel "
+"debugging\" where the committed code is tested on a wide range of "
+"configurations. This makes changes to -STABLE to contain fewer faults and "
+"thus giving the branch its name."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/dev-model/_index.adoc:740
+#, no-wrap
+msgid "Process summary: A committer commits code"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/dev-model/_index.adoc:741
+#, no-wrap
+msgid "proc-commit.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:749
+msgid ""
+"When a committer has written a piece of code and wants to commit it, they "
+"first need to determine if it is trivial enough to go in without prior "
+"review or if it should first be reviewed by the developer community. If the "
+"code is trivial or has been reviewed and the committer is not the "
+"maintainer, they should consult the maintainer before proceeding. If the "
+"code is contributed by an outside vendor, the maintainer should create a "
+"patch that is sent back to the vendor. The code is then committed and then "
+"deployed by the users. Should they find problems with the code, this will "
+"be reported and the committer can go back to writing a patch. If a vendor "
+"is affected, they can choose to implement or ignore the patch."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/dev-model/_index.adoc:750
+#, no-wrap
+msgid "Process summary: A contributor commits code"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/dev-model/_index.adoc:751
+#, no-wrap
+msgid "Refer to paragraphs below and above for a screen-reader friendly version."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/dev-model/_index.adoc:751
+#, no-wrap
+msgid "proc-contrib.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:755
+msgid ""
+"The difference when a contributor makes a code contribution is that they "
+"submit the code through the Bugzilla interface. This report is picked up by "
+"the maintainer who reviews the code and commits it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:757
+msgid "Hats included in this process are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:761
+msgid "<<role-vendor>>"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:762
+msgid "<<role-reviewer>>"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:766
+#, no-wrap
+msgid "Core election"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:771
+msgid ""
+"Core elections are held at least every two years. footnote:[The first Core "
+"election was held September 2000] Nine core members are elected. New "
+"elections are held if the number of core members drops below seven. New "
+"elections can also be held should at least 1/3 of the active committers "
+"demand this."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:773
+msgid ""
+"When an election is to take place, core announces this at least 6 weeks in "
+"advance, and appoints an election manager to run the elections."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:778
+msgid ""
+"Only committers can be elected into core. The candidates need to submit "
+"their candidacy at least one week before the election starts, but can refine "
+"their statements until the voting starts. They are presented in the http://"
+"election.uk.freebsd.org/candidates.html[candidates list]. When writing "
+"their election statements, the candidates must answer a few standard "
+"questions submitted by the election manager."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:781
+msgid ""
+"During elections, the rule that a committer must have committed during the "
+"12 past months is followed strictly. Only these committers are eligible to "
+"vote."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:784
+msgid ""
+"When voting, the committer may vote once in support of up to nine nominees. "
+"The voting is done over a period of four weeks with reminders being posted "
+"on \"developers\" mailing list that is available to all committers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:786
+msgid ""
+"The election results are released one week after the election ends, and the "
+"new core team takes office one week after the results have been posted."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:788
+msgid ""
+"Should there be a voting tie, this will be resolved by the new, "
+"unambiguously elected core members."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:790
+msgid ""
+"Votes and candidate statements are archived, but the archives are not "
+"publicly available."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/dev-model/_index.adoc:791
+#, no-wrap
+msgid "Process summary: Core elections"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/dev-model/_index.adoc:792
+#, no-wrap
+msgid "proc-elections.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:797
+msgid ""
+"Core announces the election and selects an election manager who prepares the "
+"elections, and when ready, candidates can announce their candidacies through "
+"submitting their statements. The committers then vote. After the vote is "
+"over, the election results are announced and the new core team takes office."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:799
+msgid "Hats in core elections are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:803
+msgid "<<role-election-manager>>"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:807
+#, no-wrap
+msgid "Development of new features"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:814
+msgid ""
+"Within the project there are sub-projects that are working on new features. "
+"These projects are generally done by one person [<<jorgensen2001, Jørgensen, "
+"2001>>]. Every project is free to organise development as it sees fit. "
+"However, when the project is merged to the -CURRENT branch it must follow "
+"the project guidelines. When the code has been well tested in the -CURRENT "
+"branch and deemed stable enough and relevant to the -STABLE branch, it is "
+"merged to the -STABLE branch."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:820
+msgid ""
+"The requirements of the project are given by developer wishes, requests from "
+"the community in terms of direct requests by mail, Problem Reports, "
+"commercial funding for the development of features, or contributions by the "
+"scientific community. The wishes that come within the responsibility of a "
+"developer are given to that developer who prioritises their time between the "
+"request and their wishes. A common way to do this is maintain a TODO-list "
+"maintained by the project. Items that do not come within someone's "
+"responsibility are collected on TODO-lists unless someone volunteers to take "
+"the responsibility. All requests, their distribution and follow-up are "
+"handled by the <<tool-bugzilla>> tool."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:825
+msgid ""
+"Requirements analysis happens in two ways. The requests that come in are "
+"discussed on mailing lists, both within the main project and in the sub-"
+"project that the request belongs to or is spawned by the request. "
+"Furthermore, individual developers on the sub-project will evaluate the "
+"feasibility of the requests and determine the prioritisation between them. "
+"Other than archives of the discussions that have taken place, no outcome is "
+"created by this phase that is merged into the main project."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:828
+msgid ""
+"As the requests are prioritised by the individual developers on the basis of "
+"doing what they find interesting, necessary, or are funded to do, there is "
+"no overall strategy or prioritisation of what requests to regard as "
+"requirements and following up their correct implementation. However, most "
+"developers have some shared vision of what issues are more important, and "
+"they can ask for guidelines from the release engineering team."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:835
+msgid ""
+"The verification phase of the project is two-fold. Before committing code "
+"to the current-branch, developers request their code to be reviewed by their "
+"peers. This review is for the most part done by functional testing, but "
+"also code review is important. When the code is committed to the branch, a "
+"broader functional testing will happen, that may trigger further code review "
+"and debugging should the code not behave as expected. This second "
+"verification form may be regarded as structural verification. Although the "
+"sub-projects themselves may write formal tests such as unit tests, these are "
+"usually not collected by the main project and are usually removed before the "
+"code is committed to the current branch. footnote:[More and more tests are "
+"however performed when building the system (make world). These tests are "
+"however a very new addition and no systematic framework for these tests have "
+"yet been created.]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:837
+#, no-wrap
+msgid "Maintenance"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:844
+msgid ""
+"It is an advantage to the project to for each area of the source have at "
+"least one person that knows this area well. Some parts of the code have "
+"designated maintainers. Others have de-facto maintainers, and some parts of "
+"the system do not have maintainers. The maintainer is usually a person from "
+"the sub-project that wrote and integrated the code, or someone who has "
+"ported it from the platform it was written for. footnote:[sendmail and "
+"named are examples of code that has been merged from other platforms.] The "
+"maintainer's job is to make sure the code is in sync with the project the "
+"code comes from if it is contributed code, and apply patches submitted by "
+"the community or write fixes to issues that are discovered."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:847
+msgid ""
+"The main bulk of work that is put into the FreeBSD project is maintenance. "
+"[<<jorgensen2001, Jørgensen, 2001>>] has made a figure showing the life "
+"cycle of changes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:885
+msgid ""
+"Here \"development release\" refers to the -CURRENT branch while "
+"\"production release\" refers to the -STABLE branch. The \"pre-commit "
+"test\" is the functional testing by peer developers when asked to do so or "
+"trying out the code to determine the status of the sub-project. \"Parallel "
+"debugging\" is the functional testing that can trigger more review, and "
+"debugging when the code is included in the -CURRENT branch."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:892
+msgid ""
+"As of this writing, there were 269 committers in the project. When they "
+"commit a change to a branch, that constitutes a new release. It is very "
+"common for users in the community to track a particular branch. The "
+"immediate existence of a new release makes the changes widely available "
+"right away and allows for rapid feedback from the community. This also "
+"gives the community the response time they expect on issues that are of "
+"importance to them. This makes the community more engaged, and thus allows "
+"for more and better feedback that again spurs more maintenance and "
+"ultimately should create a better product."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:894
+msgid ""
+"Before making changes to code in parts of the tree that has a history "
+"unknown to the committer, the committer is required to read the commit logs "
+"to see why certain features are implemented the way they are in order not to "
+"make mistakes that have previously either been thought through or resolved."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:896
+#, no-wrap
+msgid "Problem reporting"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:901
+msgid ""
+"Before FreeBSD 10, FreeBSD included a problem reporting tool called `send-"
+"pr`. Problems include bug reports, feature requests, feature enhancements "
+"and notices of new versions of external software that are included in the "
+"project. Although `send-pr` is available, users and developers are "
+"encouraged to submit issues using our https://bugs.freebsd.org/submit/"
+"[ problem report form]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:912
+msgid ""
+"Problem reports are sent to an email address where it is inserted into the "
+"Problem Reports maintenance database. A <<role-bugbuster>> classifies the "
+"problem and sends it to the correct group or maintainer within the project. "
+"After someone has taken responsibility for the report, the report is being "
+"analysed. This analysis includes verifying the problem and thinking out a "
+"solution for the problem. Often feedback is required from the report "
+"originator or even from the FreeBSD community. Once a patch for the problem "
+"is made, the originator may be asked to try it out. Finally, the working "
+"patch is integrated into the project, and documented if applicable. It "
+"there goes through the regular maintenance cycle as described in section "
+"<<model-maintenance>>. These are the states a problem report can be in: "
+"open, analyzed, feedback, patched, suspended and closed. The suspended "
+"state is for when further progress is not possible due to the lack of "
+"information or for when the task would require so much work that nobody is "
+"working on it at the moment."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/dev-model/_index.adoc:913
+#, no-wrap
+msgid "Process summary: problem reporting"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/dev-model/_index.adoc:914
+#, no-wrap
+msgid "proc-pr.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:920
+msgid ""
+"A problem is reported by the report originator. It is then classified by a "
+"bugbuster and handed to the correct maintainer. They verify the problem and "
+"discuss the problem with the originator until they have enough information "
+"to create a working patch. This patch is then committed and the problem "
+"report is closed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:922
+msgid "The roles included in this process are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:924
+msgid "<<role-problem-originator>>"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:926
+msgid "<<role-bugbuster>>"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:930
+#, no-wrap
+msgid "Reacting to misbehavior"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:936
+msgid ""
+"[<<freebsd-committer, FreeBSD, 2001>>] has a number of rules that committers "
+"should follow. However, it happens that these rules are broken. The "
+"following rules exist in order to be able to react to misbehavior. They "
+"specify what actions will result in how long a suspension of the committer's "
+"commit privileges."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:938
+msgid ""
+"Committing during code freezes without the approval of the Release "
+"Engineering team - 2 days"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:939
+msgid "Committing to a security branch without approval - 2 days"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:940
+msgid "Commit wars - 5 days to all participating parties"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:941
+msgid "Impolite or inappropriate behavior - 5 days"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:948
+msgid ""
+"For the suspensions to be efficient, any single core member can implement a "
+"suspension before discussing it on the \"core\" mailing list. Repeat "
+"offenders can, with a 2/3 vote by core, receive harsher penalties, including "
+"permanent removal of commit privileges. (However, the latter is always "
+"viewed as a last resort, due to its inherent tendency to create "
+"controversy.) All suspensions are posted to the \"developers\" mailing "
+"list, a list available to committers only."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:951
+msgid ""
+"It is important that you cannot be suspended for making technical errors. "
+"All penalties come from breaking social etiquette."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:953
+msgid "Hats involved in this process:"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:958
+#, no-wrap
+msgid "Release engineering"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:964
+msgid ""
+"The FreeBSD project has a Release Engineering team with a principal release "
+"engineer that is responsible for creating releases of FreeBSD that can be "
+"brought out to the user community via the net or sold in retail outlets. "
+"Since FreeBSD is available on multiple platforms and releases for the "
+"different architectures are made available at the same time, the team has "
+"one person in charge of each architecture. Also, there are roles in the "
+"team responsible for coordinating quality assurance efforts, building a "
+"package set and for having an updated set of documents. When referring to "
+"the release engineer, a representative for the release engineering team is "
+"meant."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:971
+msgid ""
+"When a release is coming, the FreeBSD project changes shape somewhat. A "
+"release schedule is made containing feature- and code-freezes, release of "
+"interim releases and the final release. A feature-freeze means no new "
+"features are allowed to be committed to the branch without the release "
+"engineers' explicit consent. Code-freeze means no changes to the code (like "
+"bugs-fixes) are allowed to be committed without the release engineers' "
+"explicit consent. This feature- and code-freeze is known as stabilising. "
+"During the release process, the release engineer has the full authority to "
+"revert to older versions of code and thus \"back out\" changes should they "
+"find that the changes are not suitable to be included in the release."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:973
+msgid "There are three different kinds of releases:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:975
+msgid ""
+".0 releases are the first release of a major version. These are branched of "
+"the -CURRENT branch and have a significantly longer release engineering "
+"cycle due to the unstable nature of the -CURRENT branch"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:976
+msgid ""
+".X releases are releases of the -STABLE branch. They are scheduled to come "
+"out every 4 months."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:977
+msgid ""
+".X.Y releases are security releases that follow the .X branch. These come "
+"out only when sufficient security fixes have been merged since the last "
+"release on that branch. New features are rarely included, and the security "
+"team is far more involved in these than in regular releases."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:986
+msgid ""
+"For releases of the -STABLE-branch, the release process starts 45 days "
+"before the anticipated release date. During the first phase, the first 15 "
+"days, the developers merge what changes they have had in -CURRENT that they "
+"want to have in the release to the release branch. When this period is "
+"over, the code enters a 15 day code freeze in which only bug fixes, "
+"documentation updates, security-related fixes and minor device driver "
+"changes are allowed. These changes must be approved by the release engineer "
+"in advance. At the beginning of the last 15 day period a release candidate "
+"is created for widespread testing. Updates are less likely to be allowed "
+"during this period, except for important bug fixes and security updates. In "
+"this final period, all releases are considered release candidates. At the "
+"end of the release process, a release is created with the new version "
+"number, including binary distributions on web sites and the creation of CD-"
+"ROM images. However, the release is not considered \"really released\" "
+"until a <<tool-pgp>>-signed message stating exactly that, is sent to the "
+"mailing list freebsd-announce; anything labelled as a \"release\" before "
+"that may well be in-process and subject to change before the PGP-signed "
+"message is sent. footnote:[Many commercial vendors use these images to "
+"create CD-ROMs that are sold in retail outlets.]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:995
+msgid ""
+"The releases of the -CURRENT-branch (that is, all releases that end with "
+"\".0\") are very similar, but with twice as long timeframe. It starts 8 "
+"weeks prior to the release with announcement of the release time line. Two "
+"weeks into the release process, the feature freeze is initiated and "
+"performance tweaks should be kept to a minimum. Four weeks prior to the "
+"release, an official beta version is made available. Two weeks prior to "
+"release, the code is officially branched into a new version. This version "
+"is given release candidate status, and as with the release engineering of -"
+"STABLE, the code freeze of the release candidate is hardened. However, "
+"development on the main development branch can continue. Other than these "
+"differences, the release engineering processes are alike."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:997
+#, no-wrap
+msgid "*.0 releases go into their own branch and are aimed mainly at early adopters. The branch then goes through a period of stabilisation, and it is not until the <<role-releng, Release Engineering Team>> decides the demands to stability have been satisfied that the branch becomes -STABLE and -CURRENT targets the next major version. While this for the majority has been with *.1 versions, this is not a demand.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1002
+msgid ""
+"Most releases are made when a given date that has been deemed a long enough "
+"time since the previous release comes. A target is set for having major "
+"releases every 18 months and minor releases every 4 months. The user "
+"community has made it very clear that security and stability cannot be "
+"sacrificed by self-imposed deadlines and target release dates. For slips of "
+"time not to become too long with regards to security and stability issues, "
+"extra discipline is required when committing changes to -STABLE."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1004
+msgid "Make release schedule"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1005
+msgid "Feature freeze"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1006
+msgid "Code freeze"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1007
+msgid "Make branch"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1008
+msgid "Release candidate"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1009
+msgid ""
+"Stabilize release (loop back to previous step as many times as necessary; "
+"when release is considered stable, proceed with next step)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1010
+msgid "Build packages"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1011
+msgid "Warn mirrors"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1012
+msgid "Publish release"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/dev-model/_index.adoc:1016
+#, no-wrap
+msgid "Tools"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1020
+msgid ""
+"The major support tools for supporting the development process are Bugzilla, "
+"Mailman, and OpenSSH. These are externally developed tools and are commonly "
+"used in the open source world."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:1022
+#, no-wrap
+msgid "Git"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1026
+msgid ""
+"Git is a system to handle multiple versions of text files and tracking who "
+"committed what changes and why. A project lives within a \"repository\" and "
+"different versions are considered different \"branches\"."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:1028
+#, no-wrap
+msgid "Bugzilla"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1034
+msgid ""
+"Bugzilla is a maintenance database consisting of a set of tools to track "
+"bugs at a central site. It supports the bug tracking process for sending "
+"and handling bugs as well as querying and updating the database and editing "
+"bug reports. The project uses its web interface to send \"Problem Reports\" "
+"to the project's central Bugzilla server. The committers also have web and "
+"command-line clients."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:1036
+#, no-wrap
+msgid "Mailman"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1043
+msgid ""
+"Mailman is a program that automates the management of mailing lists. The "
+"FreeBSD Project uses it to run 16 general lists, 60 technical lists, 4 "
+"limited lists and 5 lists with Git commit logs. It is also used for many "
+"mailing lists set up and used by other people and projects in the FreeBSD "
+"community. General lists are lists for the general public, technical lists "
+"are mainly for the development of specific areas of interest, and closed "
+"lists are for internal communication not intended for the general public. "
+"The majority of all the communication in the project goes through these 85 "
+"lists [<<ref-bsd-handbook, FreeBSD, 2003A>>, Appendix C]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:1045
+#, no-wrap
+msgid "Pretty Good Privacy"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1050
+msgid ""
+"Pretty Good Privacy, better known as PGP, is a cryptosystem using a public "
+"key architecture to allow people to digitally sign and/or encrypt "
+"information in order to ensure secure communication between two parties. A "
+"signature is used when sending information out to many recipients, enabling "
+"them to verify that the information has not been tampered with before they "
+"received it. In the FreeBSD Project this is the primary means of ensuring "
+"that information has been written by the person who claims to have written "
+"it, and not altered in transit."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:1052
+#, no-wrap
+msgid "Secure Shell"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1059
+msgid ""
+"Secure Shell is a standard for securely logging into a remote system and for "
+"executing commands on the remote system. It allows other connections, "
+"called tunnels, to be established and protected between the two involved "
+"systems. This standard exists in two primary versions, and only version two "
+"is used for the FreeBSD Project. The most common implementation of the "
+"standard is OpenSSH that is a part of the project's main distribution. "
+"Since its source is updated more often than FreeBSD releases, the latest "
+"version is also available in the ports tree."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/dev-model/_index.adoc:1061
+#, no-wrap
+msgid "Sub-projects"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1064
+msgid ""
+"Sub-projects are formed to reduce the amount of communication needed to "
+"coordinate the group of developers. When a problem area is sufficiently "
+"isolated, most communication would be within the group focusing on the "
+"problem, requiring less communication with the groups they communicate with "
+"than were the group not isolated."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:1066
+#, no-wrap
+msgid "The Ports Subproject"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1070
+msgid ""
+"A \"port\" is a set of meta-data and patches that are needed to fetch, "
+"compile and install correctly an external piece of software on a FreeBSD "
+"system. The amount of ports has grown at a tremendous rate, as shown by the "
+"following figure."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/dev-model/_index.adoc:1071
+#, no-wrap
+msgid "Number of ports added between 1995 and 2022 [[fig-ports]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1073
+msgid "image::portsstatus.svg"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1076
+msgid ""
+"<<fig-ports>> shows the number of ports available to FreeBSD in the period "
+"1995 to 2022. It looks like the curve has first grown exponentially, and "
+"then from the middle of 2001 to the middle of 2007 grown linearly at a rate "
+"of about 2000 ports/year, before its growth rate gets lower."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1079
+msgid ""
+"As the external software described by the port often is under continued "
+"development, the amount of work required to maintain the ports is already "
+"large, and increasing. This has led to the ports part of the FreeBSD "
+"project gaining a more empowered structure, and is more and more becoming a "
+"sub-project of the FreeBSD project."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1082
+msgid ""
+"Ports has its own core team with the <<role-ports-manager>> as its leader, "
+"and this team can appoint committers without FreeBSD Core's approval. "
+"Unlike in the FreeBSD Project, where a lot of maintenance frequently is "
+"rewarded with a commit bit, the ports sub-project contains many active "
+"maintainers that are not committers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1086
+msgid ""
+"Unlike the main project, the ports tree is not branched. Every release of "
+"FreeBSD follows the current ports collection and has thus available updated "
+"information on where to find programs and how to build them. This, however, "
+"means that a port that makes dependencies on the system may need to have "
+"variations depending on what version of FreeBSD it runs on."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1089
+msgid ""
+"With an unbranched ports repository it is not possible to guarantee that any "
+"port will run on anything other than -CURRENT and -STABLE, in particular "
+"older, minor releases. There is neither the infrastructure nor volunteer "
+"time needed to guarantee this."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1091
+msgid ""
+"For efficiency of communication, teams depending on Ports, such as the "
+"release engineering team, have their own ports liaisons."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/dev-model/_index.adoc:1093
+#, no-wrap
+msgid "The FreeBSD Documentation Project"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1098
+msgid ""
+"The FreeBSD Documentation project was started January 1995. From the "
+"initial group of a project leader, four team leaders and 16 members, they "
+"are now a total of 44 committers. The documentation mailing list has just "
+"under 300 members, indicating that there is quite a large community around "
+"it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1100
+msgid ""
+"The goal of the Documentation project is to provide good and useful "
+"documentation of the FreeBSD project, thus making it easier for new users to "
+"get familiar with the system and detailing advanced features for the users."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1102
+msgid ""
+"The main tasks in the Documentation project are to work on current projects "
+"in the \"FreeBSD Documentation Set\", and translate the documentation to "
+"other languages."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1106
+msgid ""
+"Like the FreeBSD Project, documentation is split in the same branches. This "
+"is done so that there is always an updated version of the documentation for "
+"each version. Only documentation errors are corrected in the security "
+"branches."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1108
+msgid ""
+"Like the ports sub-project, the Documentation project can appoint "
+"documentation committers without FreeBSD Core's approval. [<<freebsd-doceng-"
+"charter, FreeBSD, 2003B>>]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1111
+msgid ""
+"The Documentation project has extref:{fdp-primer}[a primer]. This is used "
+"both to introduce new project members to the standard tools and syntaxes and "
+"to act as a reference when working on the project."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/dev-model/_index.adoc:1116
+#, no-wrap
+msgid "References"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1120
+msgid ""
+"[Brooks, 1995] Frederick P. Brooks. Copyright © 1975, 1995 Pearson Education "
+"Limited. 0201835959. Addison-Wesley Pub Co. The Mythical Man-Month. Essays "
+"on Software Engineering, Anniversary Edition (2nd Edition)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1123
+msgid ""
+"[Saers, 2003] Niklas Saers. Copyright © 2003. A project model for the "
+"FreeBSD Project. Candidatus Scientiarum thesis. http://niklas.saers.com/"
+"thesis."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1126
+msgid ""
+"[Jørgensen, 2001] Niels Jørgensen. Copyright © 2001. Putting it All in the "
+"Trunk. Incremental Software Development in the FreeBSD Open Source Project. "
+"http://www.dat.ruc.dk/~nielsj/research/papers/freebsd.pdf."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1129
+msgid ""
+"[PMI, 2000] Project Management Institute. Copyright © 1996, 2000 Project "
+"Management Institute. 1-880410-23-0. Project Management Institute. Newtown "
+"Square Pennsylvania USA . PMBOK Guide. A Guide to the Project Management "
+"Body of Knowledge, 2000 Edition."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1132
+msgid ""
+"[FreeBSD, 2000A] Copyright © 2002 The FreeBSD Project. Core Bylaws. https://"
+"www.freebsd.org/internal/bylaws/."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1135
+msgid ""
+"[FreeBSD, 2002A] Copyright © 2002 The FreeBSD Documentation Project. FreeBSD "
+"Developer's Handbook. extref:{developers-handbook}[Developers Handbook]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1138
+msgid ""
+"[FreeBSD, 2002B] Copyright © 2002 The FreeBSD Project. Core team election "
+"2002. http://election.uk.freebsd.org/candidates.html."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1141
+msgid ""
+"[FreeBSD, 2002C] Dag-Erling Smørgrav and Hiten Pandya. Copyright © 2002 The "
+"FreeBSD Documentation Project. The FreeBSD Documentation Project. Problem "
+"Report Handling Guidelines. extref:{pr-guidelines}[Problem Report Handling "
+"Guidelines]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1144
+msgid ""
+"[FreeBSD, 2002D] Dag-Erling Smørgrav. Copyright © 2002 The FreeBSD "
+"Documentation Project. The FreeBSD Documentation Project. Writing FreeBSD "
+"Problem Reports. extref:{problem-reports}[Writing FreeBSD Problem Reports]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1147
+msgid ""
+"[FreeBSD, 2001] Copyright © 2001 The FreeBSD Documentation Project. The "
+"FreeBSD Documentation Project. Committers Guide. extref:{committers-guide}"
+"[Committer's Guide]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1150
+msgid ""
+"[FreeBSD, 2002E] Murray Stokely. Copyright © 2002 The FreeBSD Documentation "
+"Project. The FreeBSD Documentation Project. FreeBSD Release Engineering. "
+"extref:{releng}[FreeBSD Release Engineering]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1153
+msgid ""
+"[FreeBSD, 2003A] The FreeBSD Documentation Project. FreeBSD Handbook. extref:"
+"{handbook}[FreeBSD Handbook]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1156
+msgid ""
+"[FreeBSD, 2002F] Copyright © 2002 The FreeBSD Documentation Project. The "
+"FreeBSD Documentation Project. Contributors to FreeBSD. extref:{contributors}"
+"[Contributors to FreeBSD]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1159
+msgid ""
+"[FreeBSD, 2002G] Copyright © 2002 The FreeBSD Project. The FreeBSD Project. "
+"Core team elections 2002. http://election.uk.freebsd.org."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1162
+msgid ""
+"[FreeBSD, 2002H] Copyright © 2002 The FreeBSD Project. The FreeBSD Project. "
+"Commit Bit Expiration Policy. 2002/04/06 15:35:30. https://www.freebsd.org/"
+"internal/expire-bits/."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1165
+msgid ""
+"[FreeBSD, 2002I] Copyright © 2002 The FreeBSD Project. The FreeBSD Project. "
+"New Account Creation Procedure. 2002/08/19 17:11:27. https://www.freebsd.org/"
+"internal/new-account/."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1168
+msgid ""
+"[FreeBSD, 2003B] Copyright © 2002 The FreeBSD Documentation Project. The "
+"FreeBSD Documentation Project. FreeBSD DocEng Team Charter. 2003/03/16 "
+"12:17. https://www.freebsd.org/internal/doceng/."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/dev-model/_index.adoc:1170
+msgid ""
+"[Lehey, 2002] Greg Lehey. Copyright © 2002 Greg Lehey. Greg Lehey. Two years "
+"in the trenches. The evolution of a software project. http://www.lemis.com/"
+"grog/In-the-trenches.pdf."
+msgstr ""
diff --git a/documentation/content/en/books/developers-handbook/_index.adoc b/documentation/content/en/books/developers-handbook/_index.adoc
index 503fd905f8..c8de6b25da 100644
--- a/documentation/content/en/books/developers-handbook/_index.adoc
+++ b/documentation/content/en/books/developers-handbook/_index.adoc
@@ -2,7 +2,7 @@
title: FreeBSD Developers' Handbook
authors:
- author: The FreeBSD Documentation Project
-copyright: 1995-2021 The FreeBSD Documentation Project
+copyright: 1995-2023 The FreeBSD Documentation Project
description: For people who want to develop software for FreeBSD (and not just people who are developing FreeBSD itself)
trademarks: ["freebsd", "apple", "ibm", "ieee", "intel", "linux", "microsoft", "opengroup", "sun", "general"]
next: books/developers-handbook/parti
diff --git a/documentation/content/en/books/developers-handbook/_index.po b/documentation/content/en/books/developers-handbook/_index.po
new file mode 100644
index 0000000000..f0e9b26e16
--- /dev/null
+++ b/documentation/content/en/books/developers-handbook/_index.po
@@ -0,0 +1,59 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-07-07 23:23-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/developers-handbook/_index.adoc:1
+#, no-wrap
+msgid "For people who want to develop software for FreeBSD (and not just people who are developing FreeBSD itself)"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/developers-handbook/_index.adoc:1
+#: documentation/content/en/books/developers-handbook/_index.adoc:17
+#, no-wrap
+msgid "FreeBSD Developers' Handbook"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/_index.adoc:50
+msgid "Abstract"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/_index.adoc:55
+msgid ""
+"Welcome to the Developers' Handbook. This manual is a _work in progress_ "
+"and is the work of many individuals. Many sections do not yet exist and "
+"some of those that do exist need to be updated. If you are interested in "
+"helping with this project, send email to the {freebsd-doc}."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/_index.adoc:58
+msgid ""
+"The latest version of this document is always available from the link:"
+"https://www.FreeBSD.org[FreeBSD World Wide Web server]. It may also be "
+"downloaded in a variety of formats and compression options from the link:"
+"https://download.freebsd.org/doc/[FreeBSD download server] or one of the "
+"numerous extref:{handbook}[mirror sites, mirrors]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/_index.adoc:59
+msgid "'''"
+msgstr ""
diff --git a/documentation/content/en/books/developers-handbook/bibliography/_index.adoc b/documentation/content/en/books/developers-handbook/bibliography/_index.adoc
index 07de2384a8..18ded77fb3 100644
--- a/documentation/content/en/books/developers-handbook/bibliography/_index.adoc
+++ b/documentation/content/en/books/developers-handbook/bibliography/_index.adoc
@@ -1,16 +1,16 @@
---
-title: Appendices
+title: Bibliography
prev: books/developers-handbook/partv
description: FreeBSD Developers Handbook Bibliography
tags: ["FreeBSD Developers' Handbook", "bibliography"]
showBookMenu: true
weight: 17
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/bibliography/"
---
[appendix]
[[bibliography]]
-= Appendices
+= Bibliography
:doctype: book
:toc: macro
:toclevels: 1
diff --git a/documentation/content/en/books/developers-handbook/bibliography/_index.po b/documentation/content/en/books/developers-handbook/bibliography/_index.po
new file mode 100644
index 0000000000..c56abf3d9c
--- /dev/null
+++ b/documentation/content/en/books/developers-handbook/bibliography/_index.po
@@ -0,0 +1,75 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:34-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/developers-handbook/bibliography/_index.adoc:1
+#, no-wrap
+msgid "FreeBSD Developers Handbook Bibliography"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/developers-handbook/bibliography/_index.adoc:1
+#: documentation/content/en/books/developers-handbook/bibliography/_index.adoc:13
+#, no-wrap
+msgid "Bibliography"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/bibliography/_index.adoc:51
+msgid ""
+"[[COD,1]] [1] Dave A Patterson and John L Hennessy. Copyright(R) 1998 Morgan "
+"Kaufmann Publishers, Inc. 1-55860-428-6. Morgan Kaufmann Publishers, Inc. "
+"Computer Organization and Design. The Hardware / Software Interface. 1-2."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/bibliography/_index.adoc:53
+msgid ""
+"[[APUE, 2]] [2] W. Richard Stevens. Copyright(R) 1993 Addison Wesley "
+"Longman, Inc. 0-201-56317-7. Addison Wesley Longman, Inc. Advanced "
+"Programming in the Unix Environment. 1-2."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/bibliography/_index.adoc:55
+msgid ""
+"[[DIFOS, 3]] [3] Marshall Kirk McKusick and George Neville-Neil. "
+"Copyright(R) 2004 Addison-Wesley. 0-201-70245-2. Addison-Wesley. The Design "
+"and Implementation of the FreeBSD Operating System. 1-2."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/bibliography/_index.adoc:57
+msgid ""
+"[[Phrack, 4]] [4] Aleph One. Phrack 49; \"Smashing the Stack for Fun and "
+"Profit\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/bibliography/_index.adoc:59
+msgid ""
+"[[StackGuard, 5]] [5] Chrispin Cowan, Calton Pu, and Dave Maier. StackGuard; "
+"Automatic Adaptive Detection and Prevention of Buffer-Overflow Attacks."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/bibliography/_index.adoc:61
+msgid ""
+"[[OpenBSD, 6]] [6] Todd Miller and Theo de Raadt. strlcpy and strlcat -- "
+"consistent, safe string copy and concatenation."
+msgstr ""
diff --git a/documentation/content/en/books/developers-handbook/book.adoc b/documentation/content/en/books/developers-handbook/book.adoc
index 3cb4f7ccca..63a89edddc 100644
--- a/documentation/content/en/books/developers-handbook/book.adoc
+++ b/documentation/content/en/books/developers-handbook/book.adoc
@@ -2,7 +2,7 @@
title: FreeBSD Developers' Handbook
authors:
- author: The FreeBSD Documentation Project
-copyright: 1995-2021 The FreeBSD Documentation Project
+copyright: 1995-2023 The FreeBSD Documentation Project
description: For people who want to develop software for FreeBSD (and not just people who are developing FreeBSD itself)
trademarks: ["freebsd", "apple", "ibm", "ieee", "intel", "linux", "microsoft", "opengroup", "sun", "general"]
tags: ["FreeBSD Developers' Handbook"]
diff --git a/documentation/content/en/books/developers-handbook/book.po b/documentation/content/en/books/developers-handbook/book.po
new file mode 100644
index 0000000000..3cf61902ab
--- /dev/null
+++ b/documentation/content/en/books/developers-handbook/book.po
@@ -0,0 +1,59 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-07-07 23:23-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/developers-handbook/book.adoc:1
+#, no-wrap
+msgid "For people who want to develop software for FreeBSD (and not just people who are developing FreeBSD itself)"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/developers-handbook/book.adoc:1
+#: documentation/content/en/books/developers-handbook/book.adoc:12
+#, no-wrap
+msgid "FreeBSD Developers' Handbook"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/book.adoc:49
+msgid "Abstract"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/book.adoc:54
+msgid ""
+"Welcome to the Developers' Handbook. This manual is a _work in progress_ "
+"and is the work of many individuals. Many sections do not yet exist and "
+"some of those that do exist need to be updated. If you are interested in "
+"helping with this project, send email to the {freebsd-doc}."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/book.adoc:57
+msgid ""
+"The latest version of this document is always available from the link:"
+"https://www.FreeBSD.org[FreeBSD World Wide Web server]. It may also be "
+"downloaded in a variety of formats and compression options from the link:"
+"https://download.freebsd.org/doc/[FreeBSD download server] or one of the "
+"numerous extref:{handbook}[mirror sites, mirrors]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/book.adoc:59
+msgid "'''"
+msgstr ""
diff --git a/documentation/content/en/books/developers-handbook/introduction/_index.adoc b/documentation/content/en/books/developers-handbook/introduction/_index.adoc
index e98ecf0934..29f1dbdd5f 100644
--- a/documentation/content/en/books/developers-handbook/introduction/_index.adoc
+++ b/documentation/content/en/books/developers-handbook/introduction/_index.adoc
@@ -9,7 +9,7 @@ description: Introduction to the FreeBSD Developers Handbook
tags: ["introduction", "Developing on FreeBSD", "BSD Vision", "Architectural Guidelines"]
showBookMenu: true
weight: 2
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/introduction/"
---
[[introduction]]
@@ -86,72 +86,6 @@ From Scheifler & Gettys: "X Window System"
[[introduction-layout]]
== The Layout of /usr/src
-The complete source code to FreeBSD is available from our public repository.
-The source code is normally installed in [.filename]#/usr/src# which contains the following subdirectories:
-
-[.informaltable]
-[cols="1,1", frame="none", options="header"]
-|===
-| Directory
-| Description
-
-|[.filename]#bin/#
-|Source for files in [.filename]#/bin#
-
-|[.filename]#cddl/#
-|Utilities covered by the Common Development and Distribution License
-
-|[.filename]#contrib/#
-|Source for files from contributed software
-
-|[.filename]#crypto/#
-|Cryptographical sources
-
-|[.filename]#etc/#
-|Source for files in [.filename]#/etc#
-
-|[.filename]#gnu/#
-|Utilities covered by the GNU Public License
-
-|[.filename]#include/#
-|Source for files in [.filename]#/usr/include#
-
-|[.filename]#kerberos5/#
-|Source for Kerberos version 5
-
-|[.filename]#lib/#
-|Source for files in [.filename]#/usr/lib#
-
-|[.filename]#libexec/#
-|Source for files in [.filename]#/usr/libexec#
-
-|[.filename]#release/#
-|Files required to produce a FreeBSD release
-
-|[.filename]#rescue/#
-|Build system for the [.filename]#/rescue# utilities
-
-|[.filename]#sbin/#
-|Source for files in [.filename]#/sbin#
-
-|[.filename]#secure/#
-|Contributed cryptographic sources
-
-|[.filename]#share/#
-|Source for files in [.filename]#/usr/share#
-
-|[.filename]#sys/#
-|Kernel source files
-
-|[.filename]#tests/#
-|The FreeBSD test suite
-
-|[.filename]#tools/#
-|Tools used for maintenance and testing of FreeBSD
-
-|[.filename]#usr.bin/#
-|Source for files in [.filename]#/usr/bin#
-
-|[.filename]#usr.sbin/#
-|Source for files in [.filename]#/usr/sbin#
-|===
+The complete source code for FreeBSD is available from our link:https://cgit.freebsd.org/src/[public Git repository].
+The source code is normally installed in [.filename]#/usr/src#.
+The layout of the source tree is described by the top-level link:https://cgit.freebsd.org/src/tree/README.md[README.md] file.
diff --git a/documentation/content/en/books/developers-handbook/introduction/_index.po b/documentation/content/en/books/developers-handbook/introduction/_index.po
new file mode 100644
index 0000000000..a489b85abe
--- /dev/null
+++ b/documentation/content/en/books/developers-handbook/introduction/_index.po
@@ -0,0 +1,153 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-06-19 21:08-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/developers-handbook/introduction/_index.adoc:1
+#, no-wrap
+msgid "Introduction to the FreeBSD Developers Handbook"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/developers-handbook/introduction/_index.adoc:1
+#, no-wrap
+msgid "Chapter 1. Introduction"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/developers-handbook/introduction/_index.adoc:16
+#, no-wrap
+msgid "Introduction"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/introduction/_index.adoc:54
+#, no-wrap
+msgid "Developing on FreeBSD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/introduction/_index.adoc:59
+msgid ""
+"So here we are. System all installed and you are ready to start "
+"programming. But where to start? What does FreeBSD provide? What can it do "
+"for me, as a programmer?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/introduction/_index.adoc:65
+msgid ""
+"These are some questions which this chapter tries to answer. Of course, "
+"programming has different levels of proficiency like any other trade. For "
+"some it is a hobby, for others it is their profession. The information in "
+"this chapter might be aimed toward the beginning programmer; indeed, it "
+"could serve useful for the programmer unfamiliar with the FreeBSD platform."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/introduction/_index.adoc:67
+#, no-wrap
+msgid "The BSD Vision"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/introduction/_index.adoc:70
+msgid ""
+"To produce the best UNIX(R) like operating system package possible, with due "
+"respect to the original software tools ideology as well as usability, "
+"performance and stability."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/introduction/_index.adoc:72
+#, no-wrap
+msgid "Architectural Guidelines"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/introduction/_index.adoc:75
+msgid "Our ideology can be described by the following guidelines"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/introduction/_index.adoc:77
+msgid ""
+"Do not add new functionality unless an implementor cannot complete a real "
+"application without it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/introduction/_index.adoc:78
+msgid ""
+"It is as important to decide what a system is not as to decide what it is. "
+"Do not serve all the world's needs; rather, make the system extensible so "
+"that additional needs can be met in an upwardly compatible fashion."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/introduction/_index.adoc:79
+msgid ""
+"The only thing worse than generalizing from one example is generalizing from "
+"no examples at all."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/introduction/_index.adoc:80
+msgid ""
+"If a problem is not completely understood, it is probably best to provide no "
+"solution at all."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/introduction/_index.adoc:81
+msgid ""
+"If you can get 90 percent of the desired effect for 10 percent of the work, "
+"use the simpler solution."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/introduction/_index.adoc:82
+msgid "Isolate complexity as much as possible."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/introduction/_index.adoc:83
+msgid ""
+"Provide mechanism, rather than policy. In particular, place user interface "
+"policy in the client's hands."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/introduction/_index.adoc:85
+msgid "From Scheifler & Gettys: \"X Window System\""
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/introduction/_index.adoc:87
+#, no-wrap
+msgid "The Layout of /usr/src"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/introduction/_index.adoc:91
+msgid ""
+"The complete source code for FreeBSD is available from our link:https://cgit."
+"freebsd.org/src/[public Git repository]. The source code is normally "
+"installed in [.filename]#/usr/src#. The layout of the source tree is "
+"described by the top-level link:https://cgit.freebsd.org/src/tree/README."
+"md[README.md] file."
+msgstr ""
diff --git a/documentation/content/en/books/developers-handbook/ipv6/_index.adoc b/documentation/content/en/books/developers-handbook/ipv6/_index.adoc
index ffad0eae89..e24d7321b0 100644
--- a/documentation/content/en/books/developers-handbook/ipv6/_index.adoc
+++ b/documentation/content/en/books/developers-handbook/ipv6/_index.adoc
@@ -8,7 +8,7 @@ description: IPv6 Internals
tags: ["IPv6", "FreeBSD"]
showBookMenu: true
weight: 10
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/ipv6/"
---
[[ipv6]]
@@ -220,7 +220,7 @@ Programs that use these APIs have to be prepared about differences in kernels an
When you specify scoped address to the command line, NEVER write the embedded form (such as ff02:1::1 or fe80:2::fedc).
This is not supposed to work.
-Always use standard form, like ff02::1 or fe80::fedc, with command line option for specifying interface (like `ping6 -I ne0 ff02::1`).
+Always use standard form, like ff02::1 or fe80::fedc, with command line option for specifying interface (like `ping -6 -I ne0 ff02::1`).
In general, if a command does not have command line option to specify outgoing interface, that command is not ready to accept scoped address.
This may seem to be opposite from IPv6's premise to support "dentist office" situation.
We believe that specifications need some improvements for this.
@@ -380,13 +380,13 @@ If you want to try jumbo payloads, you first have to reconfigure the kernel so t
and recompile the new kernel.
-Then you can test jumbo payloads by the man:ping6[8] command with -b and -s options.
+Then you can test jumbo payloads by the man:ping[8] command with -6, -b and -s options.
The -b option must be specified to enlarge the size of the socket buffer and the -s option specifies the length of the packet, which should be more than 65,535.
For example, type as follows:
[source,bash]
....
-% ping6 -b 70000 -s 68000 ::1
+% ping -6 -b 70000 -s 68000 ::1
....
The IPv6 specification requires that the Jumbo Payload option must not be used in a packet that carries a fragment header.
diff --git a/documentation/content/en/books/developers-handbook/ipv6/_index.po b/documentation/content/en/books/developers-handbook/ipv6/_index.po
new file mode 100644
index 0000000000..d49d33461f
--- /dev/null
+++ b/documentation/content/en/books/developers-handbook/ipv6/_index.po
@@ -0,0 +1,2133 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-04-20 20:56-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:1
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:15
+#, no-wrap
+msgid "IPv6 Internals"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:1
+#, no-wrap
+msgid "Chapter 8. IPv6 Internals"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:53
+#, no-wrap
+msgid "IPv6/IPsec Implementation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:57
+msgid ""
+"This section should explain IPv6 and IPsec related implementation "
+"internals. These functionalities are derived from http://www.kame.net/[KAME "
+"project]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:59
+#, no-wrap
+msgid "IPv6"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:61
+#, no-wrap
+msgid "Conformance"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:65
+msgid ""
+"The IPv6 related functions conforms, or tries to conform to the latest set "
+"of IPv6 specifications. For future reference we list some of the relevant "
+"documents below (_NOTE_: this is not a complete list - this is too hard to "
+"maintain...)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:67
+msgid ""
+"For details please refer to specific chapter in the document, RFCs, manual "
+"pages, or comments in the source code."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:71
+msgid ""
+"Conformance tests have been performed on the KAME STABLE kit at TAHI "
+"project. Results can be viewed at http://www.tahi.org/report/KAME/[http://"
+"www.tahi.org/report/KAME/]. We also attended University of New Hampshire "
+"IOL tests (http://www.iol.unh.edu/[http://www.iol.unh.edu/]) in the past, "
+"with our past snapshots."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:73
+msgid "RFC1639: FTP Operation Over Big Address Records (FOOBAR)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:75
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:111
+msgid ""
+"RFC2428 is preferred over RFC1639. FTP clients will first try RFC2428, then "
+"RFC1639 if failed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:77
+msgid "RFC1886: DNS Extensions to support IPv6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:78
+msgid "RFC1933: Transition Mechanisms for IPv6 Hosts and Routers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:80
+msgid "IPv4 compatible address is not supported."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:81
+msgid "automatic tunneling (described in 4.3 of this RFC) is not supported."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:82
+msgid ""
+"man:gif[4] interface implements IPv[46]-over-IPv[46] tunnel in a generic "
+"way, and it covers \"configured tunnel\" described in the spec. See "
+"<<gif,23.5.1.5>> in this document for details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:84
+msgid "RFC1981: Path MTU Discovery for IPv6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:85
+msgid "RFC2080: RIPng for IPv6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:87
+msgid "usr.sbin/route6d support this."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:89
+msgid "RFC2292: Advanced Sockets API for IPv6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:91
+msgid ""
+"For supported library functions/kernel APIs, see [.filename]#sys/netinet6/"
+"ADVAPI#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:93
+msgid "RFC2362: Protocol Independent Multicast-Sparse Mode (PIM-SM)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:95
+msgid ""
+"RFC2362 defines packet formats for PIM-SM. [.filename]#draft-ietf-pim-"
+"ipv6-01.txt# is written based on this."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:97
+msgid "RFC2373: IPv6 Addressing Architecture"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:99
+msgid ""
+"supports node required addresses, and conforms to the scope requirement."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:101
+msgid "RFC2374: An IPv6 Aggregatable Global Unicast Address Format"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:103
+msgid "supports 64-bit length of Interface ID."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:105
+msgid "RFC2375: IPv6 Multicast Address Assignments"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:107
+msgid "Userland applications use the well-known addresses assigned in the RFC."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:109
+msgid "RFC2428: FTP Extensions for IPv6 and NATs"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:113
+msgid "RFC2460: IPv6 specification"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:114
+msgid "RFC2461: Neighbor discovery for IPv6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:116
+msgid "See <<neighbor-discovery,23.5.1.2>> in this document for details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:118
+msgid "RFC2462: IPv6 Stateless Address Autoconfiguration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:120
+msgid "See <<ipv6-pnp,23.5.1.4>> in this document for details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:122
+msgid "RFC2463: ICMPv6 for IPv6 specification"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:124
+msgid "See <<icmpv6,23.5.1.9>> in this document for details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:126
+msgid "RFC2464: Transmission of IPv6 Packets over Ethernet Networks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:127
+msgid "RFC2465: MIB for IPv6: Textual Conventions and General Group"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:129
+msgid ""
+"Necessary statistics are gathered by the kernel. Actual IPv6 MIB support is "
+"provided as a patchkit for ucd-snmp."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:131
+msgid "RFC2466: MIB for IPv6: ICMPv6 group"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:133
+msgid ""
+"Necessary statistics are gathered by the kernel. Actual IPv6 MIB support is "
+"provided as patchkit for ucd-snmp."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:135
+msgid "RFC2467: Transmission of IPv6 Packets over FDDI Networks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:136
+msgid "RFC2497: Transmission of IPv6 packet over ARCnet Networks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:137
+msgid "RFC2553: Basic Socket Interface Extensions for IPv6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:139
+msgid ""
+"IPv4 mapped address (3.7) and special behavior of IPv6 wildcard bind socket "
+"(3.8) are supported. See <<ipv6-wildcard-socket,23.5.1.12>> in this document "
+"for details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:141
+msgid "RFC2675: IPv6 Jumbograms"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:143
+msgid "See <<ipv6-jumbo,23.5.1.7>> in this document for details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:145
+msgid "RFC2710: Multicast Listener Discovery for IPv6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:146
+msgid "RFC2711: IPv6 router alert option"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:147
+msgid ""
+"[.filename]#draft-ietf-ipngwg-router-renum-08#: Router renumbering for IPv6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:148
+msgid ""
+"[.filename]#draft-ietf-ipngwg-icmp-namelookups-02#: IPv6 Name Lookups "
+"Through ICMP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:149
+msgid ""
+"[.filename]#draft-ietf-ipngwg-icmp-name-lookups-03#: IPv6 Name Lookups "
+"Through ICMP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:150
+msgid "[.filename]#draft-ietf-pim-ipv6-01.txt#: PIM for IPv6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:152
+msgid ""
+"man:pim6dd[8] implements dense mode. man:pim6sd[8] implements sparse mode."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:154
+msgid ""
+"[.filename]#draft-itojun-ipv6-tcp-to-anycast-00#: Disconnecting TCP "
+"connection toward IPv6 anycast address"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:155
+msgid "[.filename]#draft-yamamoto-wideipv6-comm-model-00#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:157
+msgid "See <<ipv6-sas,23.5.1.6>> in this document for details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:159
+msgid ""
+"[.filename]#draft-ietf-ipngwg-scopedaddr-format-00.txt#: An Extension of "
+"Format for IPv6 Scoped Addresses"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:161
+#, no-wrap
+msgid "Neighbor Discovery"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:166
+msgid ""
+"Neighbor Discovery is fairly stable. Currently Address Resolution, "
+"Duplicated Address Detection, and Neighbor Unreachability Detection are "
+"supported. In the near future we will be adding Proxy Neighbor "
+"Advertisement support in the kernel and Unsolicited Neighbor Advertisement "
+"transmission command as admin tool."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:171
+msgid ""
+"If DAD fails, the address will be marked \"duplicated\" and message will be "
+"generated to syslog (and usually to console). The \"duplicated\" mark can "
+"be checked with man:ifconfig[8]. It is administrators' responsibility to "
+"check for and recover from DAD failures. The behavior should be improved in "
+"the near future."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:175
+msgid ""
+"Some of the network driver loops multicast packets back to itself, even if "
+"instructed not to do so (especially in promiscuous mode). In such cases DAD "
+"may fail, because DAD engine sees inbound NS packet (actually from the node "
+"itself) and considers it as a sign of duplicate. You may want to look at "
+"#if condition marked \"heuristics\" in sys/netinet6/nd6_nbr.c:"
+"nd6_dad_timer() as workaround (note that the code fragment in \"heuristics\" "
+"section is not spec conformant)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:177
+msgid ""
+"Neighbor Discovery specification (RFC2461) does not talk about neighbor "
+"cache handling in the following cases:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:179
+msgid ""
+"when there was no neighbor cache entry, node received unsolicited RS/NS/NA/"
+"redirect packet without link-layer address"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:180
+msgid ""
+"neighbor cache handling on medium without link-layer address (we need a "
+"neighbor cache entry for IsRouter bit)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:183
+msgid ""
+"For first case, we implemented workaround based on discussions on IETF "
+"ipngwg mailing list. For more details, see the comments in the source code "
+"and email thread started from (IPng 7155), dated Feb 6 1999."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:186
+msgid ""
+"IPv6 on-link determination rule (RFC2461) is quite different from "
+"assumptions in BSD network code. At this moment, no on-link determination "
+"rule is supported where default router list is empty (RFC2461, section 5.2, "
+"last sentence in 2nd paragraph - note that the spec misuse the word \"host\" "
+"and \"node\" in several places in the section)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:191
+msgid ""
+"To avoid possible DoS attacks and infinite loops, only 10 options on ND "
+"packet is accepted now. Therefore, if you have 20 prefix options attached "
+"to RA, only the first 10 prefixes will be recognized. If this troubles you, "
+"please ask it on FREEBSD-CURRENT mailing list and/or modify nd6_maxndopt in "
+"[.filename]#sys/netinet6/nd6.c#. If there are high demands we may provide "
+"sysctl knob for the variable."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:193
+#, no-wrap
+msgid "Scope Index"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:198
+msgid ""
+"IPv6 uses scoped addresses. Therefore, it is very important to specify "
+"scope index (interface index for link-local address, or site index for site-"
+"local address) with an IPv6 address. Without scope index, scoped IPv6 "
+"address is ambiguous to the kernel, and kernel will not be able to determine "
+"the outbound interface for a packet."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:203
+msgid ""
+"Ordinary userland applications should use advanced API (RFC2292) to specify "
+"scope index, or interface index. For similar purpose, sin6_scope_id member "
+"in sockaddr_in6 structure is defined in RFC2553. However, the semantics for "
+"sin6_scope_id is rather vague. If you care about portability of your "
+"application, we suggest you to use advanced API rather than sin6_scope_id."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:206
+msgid ""
+"In the kernel, an interface index for link-local scoped address is embedded "
+"into 2nd 16bit-word (3rd and 4th byte) in IPv6 address. For example, you "
+"may see something like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:210
+#, no-wrap
+msgid "\tfe80:1::200:f8ff:fe01:6317\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:215
+msgid ""
+"in the routing table and interface address structure (struct in6_ifaddr). "
+"The address above is a link-local unicast address which belongs to a network "
+"interface whose interface identifier is 1. The embedded index enables us to "
+"identify IPv6 link local addresses over multiple interfaces effectively and "
+"with only a little code change."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:220
+msgid ""
+"Routing daemons and configuration programs, like man:route6d[8] and man:"
+"ifconfig[8], will need to manipulate the \"embedded\" scope index. These "
+"programs use routing sockets and ioctls (like SIOCGIFADDR_IN6) and the "
+"kernel API will return IPv6 addresses with 2nd 16bit-word filled in. The "
+"APIs are for manipulating kernel internal structure. Programs that use "
+"these APIs have to be prepared about differences in kernels anyway."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:227
+msgid ""
+"When you specify scoped address to the command line, NEVER write the "
+"embedded form (such as ff02:1::1 or fe80:2::fedc). This is not supposed to "
+"work. Always use standard form, like ff02::1 or fe80::fedc, with command "
+"line option for specifying interface (like `ping -6 -I ne0 ff02::1`). In "
+"general, if a command does not have command line option to specify outgoing "
+"interface, that command is not ready to accept scoped address. This may "
+"seem to be opposite from IPv6's premise to support \"dentist office\" "
+"situation. We believe that specifications need some improvements for this."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:231
+msgid ""
+"Some of the userland tools support extended numeric IPv6 syntax, as "
+"documented in [.filename]#draft-ietf-ipngwg-scopedaddr-format-00.txt#. You "
+"can specify outgoing link, by using name of the outgoing interface like "
+"\"fe80::1%ne0\". This way you will be able to specify link-local scoped "
+"address without much trouble."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:234
+msgid ""
+"To use this extension in your program, you will need to use man:"
+"getaddrinfo[3], and man:getnameinfo[3] with NI_WITHSCOPEID. The "
+"implementation currently assumes 1-to-1 relationship between a link and an "
+"interface, which is stronger than what specs say."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:236
+#, no-wrap
+msgid "Plug and Play"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:242
+msgid ""
+"Most of the IPv6 stateless address autoconfiguration is implemented in the "
+"kernel. Neighbor Discovery functions are implemented in the kernel as a "
+"whole. Router Advertisement (RA) input for hosts is implemented in the "
+"kernel. Router Solicitation (RS) output for endhosts, RS input for routers, "
+"and RA output for routers are implemented in the userland."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:243
+#, no-wrap
+msgid "Assignment of link-local, and special addresses"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:248
+msgid ""
+"IPv6 link-local address is generated from IEEE802 address (Ethernet MAC "
+"address). Each of interface is assigned an IPv6 link-local address "
+"automatically, when the interface becomes up (IFF_UP). Also, direct route "
+"for the link-local address is added to routing table."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:250
+msgid "Here is an output of netstat command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:257
+#, no-wrap
+msgid ""
+"Internet6:\n"
+"Destination Gateway Flags Netif Expire\n"
+"fe80:1::%ed0/64 link#1 UC ed0\n"
+"fe80:2::%ep0/64 link#2 UC ep0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:262
+msgid ""
+"Interfaces that has no IEEE802 address (pseudo interfaces like tunnel "
+"interfaces, or ppp interfaces) will borrow IEEE802 address from other "
+"interfaces, such as Ethernet interfaces, whenever possible. If there is no "
+"IEEE802 hardware attached, a last resort pseudo-random value, MD5(hostname), "
+"will be used as source of link-local address. If it is not suitable for "
+"your usage, you will need to configure the link-local address manually."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:265
+msgid ""
+"If an interface is not capable of handling IPv6 (such as lack of multicast "
+"support), link-local address will not be assigned to that interface. See "
+"section 2 for details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:269
+msgid ""
+"Each interface joins the solicited multicast address and the link-local all-"
+"nodes multicast addresses (e.g., fe80::1:ff01:6317 and ff02::1, "
+"respectively, on the link the interface is attached). In addition to a link-"
+"local address, the loopback address (::1) will be assigned to the loopback "
+"interface. Also, ::1/128 and ff01::/32 are automatically added to routing "
+"table, and loopback interface joins node-local multicast group ff01::1."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:270
+#, no-wrap
+msgid "Stateless address autoconfiguration on Hosts"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:274
+msgid ""
+"In IPv6 specification, nodes are separated into two categories: _routers_ "
+"and _hosts_. Routers forward packets addressed to others, hosts does not "
+"forward the packets. net.inet6.ip6.forwarding defines whether this node is "
+"router or host (router if it is 1, host if it is 0)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:283
+msgid ""
+"When a host hears Router Advertisement from the router, a host may "
+"autoconfigure itself by stateless address autoconfiguration. This behavior "
+"can be controlled by net.inet6.ip6.accept_rtadv (host autoconfigures itself "
+"if it is set to 1). By autoconfiguration, network address prefix for the "
+"receiving interface (usually global address prefix) is added. Default route "
+"is also configured. Routers periodically generate Router Advertisement "
+"packets. To request an adjacent router to generate RA packet, a host can "
+"transmit Router Solicitation. To generate a RS packet at any time, use the "
+"_rtsol_ command. man:rtsold[8] daemon is also available. man:rtsold[8] "
+"generates Router Solicitation whenever necessary, and it works great for "
+"nomadic usage (notebooks/laptops). If one wishes to ignore Router "
+"Advertisements, use sysctl to set net.inet6.ip6.accept_rtadv to 0."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:285
+msgid ""
+"To generate Router Advertisement from a router, use the man:rtadvd[8] daemon."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:287
+msgid ""
+"Note that, IPv6 specification assumes the following items, and nonconforming "
+"cases are left unspecified:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:289
+msgid "Only hosts will listen to router advertisements"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:290
+msgid "Hosts have single network interface (except loopback)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:293
+msgid ""
+"Therefore, this is unwise to enable net.inet6.ip6.accept_rtadv on routers, "
+"or multi-interface host. A misconfigured node can behave strange "
+"(nonconforming configuration allowed for those who would like to do some "
+"experiments)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:295
+msgid "To summarize the sysctl knob:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:309
+#, no-wrap
+msgid ""
+"\taccept_rtadv\tforwarding\trole of the node\n"
+"\t---\t\t---\t\t---\n"
+"\t0\t\t0\t\thost (to be manually configured)\n"
+"\t0\t\t1\t\trouter\n"
+"\t1\t\t0\t\tautoconfigured host\n"
+"\t\t\t\t\t(spec assumes that host has single\n"
+"\t\t\t\t\tinterface only, autoconfigured host\n"
+"\t\t\t\t\twith multiple interface is\n"
+"\t\t\t\t\tout-of-scope)\n"
+"\t1\t\t1\t\tinvalid, or experimental\n"
+"\t\t\t\t\t(out-of-scope of spec)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:314
+msgid ""
+"RFC2462 has validation rule against incoming RA prefix information option, "
+"in 5.5.3 (e). This is to protect hosts from malicious (or misconfigured) "
+"routers that advertise very short prefix lifetime. There was an update from "
+"Jim Bound to ipngwg mailing list (look for \"(ipng 6712)\" in the archive) "
+"and it is implemented Jim's update."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:316
+msgid ""
+"See <<neighbor-discovery,23.5.1.2>> in the document for relationship between "
+"DAD and autoconfiguration."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:318
+#, no-wrap
+msgid "Generic Tunnel Interface"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:322
+msgid ""
+"GIF (Generic InterFace) is a pseudo interface for configured tunnel. "
+"Details are described in man:gif[4]. Currently"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:324
+msgid "v6 in v6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:325
+msgid "v6 in v4"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:326
+msgid "v4 in v6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:327
+msgid "v4 in v4"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:332
+msgid ""
+"are available. Use man:gifconfig[8] to assign physical (outer) source and "
+"destination address to gif interfaces. Configuration that uses same address "
+"family for inner and outer IP header (v4 in v4, or v6 in v6) is dangerous. "
+"It is very easy to configure interfaces and routing tables to perform "
+"infinite level of tunneling. _Please be warned_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:335
+msgid ""
+"gif can be configured to be ECN-friendly. See <<ipsec-ecn,23.5.4.5>> for "
+"ECN-friendliness of tunnels, and man:gif[4] for how to configure."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:338
+msgid ""
+"If you would like to configure an IPv4-in-IPv6 tunnel with gif interface, "
+"read man:gif[4] carefully. You will need to remove IPv6 link-local address "
+"automatically assigned to the gif interface."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:340
+#, no-wrap
+msgid "Source Address Selection"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:344
+msgid ""
+"Current source selection rule is scope oriented (there are some exceptions - "
+"see below). For a given destination, a source IPv6 address is selected by "
+"the following rule:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:346
+msgid ""
+"If the source address is explicitly specified by the user (e.g., via the "
+"advanced API), the specified address is used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:347
+msgid ""
+"If there is an address assigned to the outgoing interface (which is usually "
+"determined by looking up the routing table) that has the same scope as the "
+"destination address, the address is used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:349
+msgid "This is the most typical case."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:350
+msgid ""
+"If there is no address that satisfies the above condition, choose a global "
+"address assigned to one of the interfaces on the sending node."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:351
+msgid ""
+"If there is no address that satisfies the above condition, and destination "
+"address is site local scope, choose a site local address assigned to one of "
+"the interfaces on the sending node."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:352
+msgid ""
+"If there is no address that satisfies the above condition, choose the "
+"address associated with the routing table entry for the destination. This is "
+"the last resort, which may cause scope violation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:357
+msgid ""
+"For instance, ::1 is selected for ff01::1, fe80:1::200:f8ff:fe01:6317 for "
+"fe80:1::2a0:24ff:feab:839b (note that embedded interface index - described "
+"in <<ipv6-scope-index,23.5.1.3>> - helps us choose the right source "
+"address. Those embedded indices will not be on the wire). If the outgoing "
+"interface has multiple address for the scope, a source is selected longest "
+"match basis (rule 3). Suppose 2001:0DB8:808:1:200:f8ff:fe01:6317 and "
+"2001:0DB8:9:124:200:f8ff:fe01:6317 are given to the outgoing interface. "
+"2001:0DB8:808:1:200:f8ff:fe01:6317 is chosen as the source for the "
+"destination 2001:0DB8:800::1."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:364
+msgid ""
+"Note that the above rule is not documented in the IPv6 spec. It is "
+"considered \"up to implementation\" item. There are some cases where we do "
+"not use the above rule. One example is connected TCP session, and we use "
+"the address kept in tcb as the source. Another example is source address "
+"for Neighbor Advertisement. Under the spec (RFC2461 7.2.2) NA's source "
+"should be the target address of the corresponding NS's target. In this case "
+"we follow the spec rather than the above longest-match rule."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:370
+msgid ""
+"For new connections (when rule 1 does not apply), deprecated addresses "
+"(addresses with preferred lifetime = 0) will not be chosen as source address "
+"if other choices are available. If no other choices are available, "
+"deprecated address will be used as a last resort. If there are multiple "
+"choice of deprecated addresses, the above scope rule will be used to choose "
+"from those deprecated addresses. If you would like to prohibit the use of "
+"deprecated address for some reason, configure net.inet6.ip6.use_deprecated "
+"to 0. The issue related to deprecated address is described in RFC2462 5.5.4 "
+"(NOTE: there is some debate underway in IETF ipngwg on how to use "
+"\"deprecated\" address)."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:372
+#, no-wrap
+msgid "Jumbo Payload"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:376
+msgid ""
+"The Jumbo Payload hop-by-hop option is implemented and can be used to send "
+"IPv6 packets with payloads longer than 65,535 octets. But currently no "
+"physical interface whose MTU is more than 65,535 is supported, so such "
+"payloads can be seen only on the loopback interface (i.e., lo0)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:378
+msgid ""
+"If you want to try jumbo payloads, you first have to reconfigure the kernel "
+"so that the MTU of the loopback interface is more than 65,535 bytes; add the "
+"following to the kernel configuration file:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:380
+msgid "`options \"LARGE_LOMTU\" #To test jumbo payload`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:382
+msgid "and recompile the new kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:386
+msgid ""
+"Then you can test jumbo payloads by the man:ping[8] command with -6, -b and -"
+"s options. The -b option must be specified to enlarge the size of the "
+"socket buffer and the -s option specifies the length of the packet, which "
+"should be more than 65,535. For example, type as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:390
+#, no-wrap
+msgid "% ping -6 -b 70000 -s 68000 ::1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:395
+msgid ""
+"The IPv6 specification requires that the Jumbo Payload option must not be "
+"used in a packet that carries a fragment header. If this condition is "
+"broken, an ICMPv6 Parameter Problem message must be sent to the sender. "
+"specification is followed, but you cannot usually see an ICMPv6 error caused "
+"by this requirement."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:399
+msgid ""
+"When an IPv6 packet is received, the frame length is checked and compared to "
+"the length specified in the payload length field of the IPv6 header or in "
+"the value of the Jumbo Payload option, if any. If the former is shorter "
+"than the latter, the packet is discarded and statistics are incremented. "
+"You can see the statistics as output of man:netstat[8] command with `-s -p "
+"ip6' option:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:406
+#, no-wrap
+msgid ""
+"% netstat -s -p ip6\n"
+"\t ip6:\n"
+"\t\t(snip)\n"
+"\t\t1 with data size < data length\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:410
+msgid ""
+"So, kernel does not send an ICMPv6 error unless the erroneous packet is an "
+"actual Jumbo Payload, that is, its packet size is more than 65,535 bytes. "
+"As described above, currently no physical interface with such a huge MTU is "
+"supported, so it rarely returns an ICMPv6 error."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:413
+msgid ""
+"TCP/UDP over jumbogram is not supported at this moment. This is because we "
+"have no medium (other than loopback) to test this. Contact us if you need "
+"this."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:416
+msgid ""
+"IPsec does not work on jumbograms. This is due to some specification twists "
+"in supporting AH with jumbograms (AH header size influences payload length, "
+"and this makes it real hard to authenticate inbound packet with jumbo "
+"payload option as well as AH)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:420
+msgid ""
+"There are fundamental issues in *BSD support for jumbograms. We would like "
+"to address those, but we need more time to finalize these. To name a few:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:424
+msgid ""
+"mbuf pkthdr.len field is typed as \"int\" in 4.4BSD, so it will not hold "
+"jumbogram with len > 2G on 32bit architecture CPUs. If we would like to "
+"support jumbogram properly, the field must be expanded to hold 4G + IPv6 "
+"header + link-layer header. Therefore, it must be expanded to at least "
+"int64_t (u_int32_t is NOT enough)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:426
+msgid ""
+"We mistakingly use \"int\" to hold packet length in many places. We need to "
+"convert them into larger integral type. It needs a great care, as we may "
+"experience overflow during packet length computation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:427
+msgid ""
+"We mistakingly check for ip6_plen field of IPv6 header for packet payload "
+"length in various places. We should be checking mbuf pkthdr.len instead. "
+"ip6_input() will perform sanity check on jumbo payload option on input, and "
+"we can safely use mbuf pkthdr.len afterwards."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:428
+msgid "TCP code needs a careful update in bunch of places, of course."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:429
+#, no-wrap
+msgid "Loop Prevention in Header Processing"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:440
+msgid ""
+"IPv6 specification allows arbitrary number of extension headers to be placed "
+"onto packets. If we implement IPv6 packet processing code in the way BSD "
+"IPv4 code is implemented, kernel stack may overflow due to long function "
+"call chain. sys/netinet6 code is carefully designed to avoid kernel stack "
+"overflow, so sys/netinet6 code defines its own protocol switch structure, as "
+"\"struct ip6protosw\" (see [.filename]#netinet6/ip6protosw.h#). There is no "
+"such update to IPv4 part (sys/netinet) for compatibility, but small change "
+"is added to its pr_input() prototype. So \"struct ipprotosw\" is also "
+"defined. As a result, if you receive IPsec-over-IPv4 packet with massive "
+"number of IPsec headers, kernel stack may blow up. IPsec-over-IPv6 is "
+"okay. (Of-course, for those all IPsec headers to be processed, each such "
+"IPsec header must pass each IPsec check. So an anonymous attacker will not "
+"be able to do such an attack.)"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:442
+#, no-wrap
+msgid "ICMPv6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:446
+msgid ""
+"After RFC2463 was published, IETF ipngwg has decided to disallow ICMPv6 "
+"error packet against ICMPv6 redirect, to prevent ICMPv6 storm on a network "
+"medium. This is already implemented into the kernel."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:447
+#, no-wrap
+msgid "Applications"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:450
+msgid ""
+"For userland programming, we support IPv6 socket API as specified in "
+"RFC2553, RFC2292 and upcoming Internet drafts."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:455
+msgid ""
+"TCP/UDP over IPv6 is available and quite stable. You can enjoy man:"
+"telnet[1], man:ftp[1], man:rlogin[1], man:rsh[1], man:ssh[1], etc. These "
+"applications are protocol independent. That is, they automatically chooses "
+"IPv4 or IPv6 according to DNS."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:456
+#, no-wrap
+msgid "Kernel Internals"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:459
+msgid ""
+"While ip_forward() calls ip_output(), ip6_forward() directly calls "
+"if_output() since routers must not divide IPv6 packets into fragments."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:463
+msgid ""
+"ICMPv6 should contain the original packet as long as possible up to 1280. "
+"UDP6/IP6 port unreach, for instance, should contain all extension headers "
+"and the *unchanged* UDP6 and IP6 headers. So, all IP6 functions except TCP "
+"never convert network byte order into host byte order, to save the original "
+"packet."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:467
+msgid ""
+"tcp_input(), udp6_input() and icmp6_input() can not assume that IP6 header "
+"is preceding the transport headers due to extension headers. So, "
+"in6_cksum() was implemented to handle packets whose IP6 header and transport "
+"header is not continuous. TCP/IP6 nor UDP6/IP6 header structures do not "
+"exist for checksum calculation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:470
+msgid ""
+"To process IP6 header, extension headers and transport headers easily, "
+"network drivers are now required to store packets in one internal mbuf or "
+"one or more external mbufs. A typical old driver prepares two internal "
+"mbufs for 96 - 204 bytes data, however, now such packet data is stored in "
+"one external mbuf."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:474
+msgid ""
+"`netstat -s -p ip6` tells you whether or not your driver conforms such "
+"requirement. In the following example, \"cce0\" violates the requirement. "
+"(For more information, refer to Section 2.)"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:484
+#, no-wrap
+msgid ""
+"Mbuf statistics:\n"
+" 317 one mbuf\n"
+" two or more mbuf::\n"
+" lo0 = 8\n"
+"\t\t\tcce0 = 10\n"
+" 3282 one ext mbuf\n"
+" 0 two or more ext mbuf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:489
+msgid ""
+"Each input function calls IP6_EXTHDR_CHECK in the beginning to check if the "
+"region between IP6 and its header is continuous. IP6_EXTHDR_CHECK calls "
+"m_pullup() only if the mbuf has M_LOOP flag, that is, the packet comes from "
+"the loopback interface. m_pullup() is never called for packets coming from "
+"physical network interfaces."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:491
+msgid "Both IP and IP6 reassemble functions never call m_pullup()."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:493
+#, no-wrap
+msgid "IPv4 Mapped Address and IPv6 Wildcard Socket"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:497
+msgid ""
+"RFC2553 describes IPv4 mapped address (3.7) and special behavior of IPv6 "
+"wildcard bind socket (3.8). The spec allows you to:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:499
+msgid "Accept IPv4 connections by AF_INET6 wildcard bind socket."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:500
+msgid ""
+"Transmit IPv4 packet over AF_INET6 socket by using special form of the "
+"address like ::ffff:10.1.1.1."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:503
+msgid ""
+"but the spec itself is very complicated and does not specify how the socket "
+"layer should behave. Here we call the former one \"listening side\" and the "
+"latter one \"initiating side\", for reference purposes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:505
+msgid ""
+"You can perform wildcard bind on both of the address families, on the same "
+"port."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:507
+msgid "The following table show the behavior of FreeBSD 4.x."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:516
+#, no-wrap
+msgid ""
+"listening side initiating side\n"
+" (AF_INET6 wildcard (connection to ::ffff:10.1.1.1)\n"
+" socket gets IPv4 conn.)\n"
+" --- ---\n"
+"FreeBSD 4.x configurable supported\n"
+" default: enabled\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:519
+msgid ""
+"The following sections will give you more details, and how you can configure "
+"the behavior."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:521
+msgid "Comments on listening side:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:528
+msgid ""
+"It looks that RFC2553 talks too little on wildcard bind issue, especially on "
+"the port space issue, failure mode and relationship between AF_INET/INET6 "
+"wildcard bind. There can be several separate interpretation for this RFC "
+"which conform to it but behaves differently. So, to implement portable "
+"application you should assume nothing about the behavior in the kernel. "
+"Using man:getaddrinfo[3] is the safest way. Port number space and wildcard "
+"bind issues were discussed in detail on ipv6imp mailing list, in mid March "
+"1999 and it looks that there is no concrete consensus (means, up to "
+"implementers). You may want to check the mailing list archives."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:530
+msgid ""
+"If a server application would like to accept IPv4 and IPv6 connections, "
+"there will be two alternatives."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:535
+msgid ""
+"One is using AF_INET and AF_INET6 socket (you will need two sockets). Use "
+"man:getaddrinfo[3] with AI_PASSIVE into ai_flags, and man:socket[2] and man:"
+"bind[2] to all the addresses returned. By opening multiple sockets, you can "
+"accept connections onto the socket with proper address family. IPv4 "
+"connections will be accepted by AF_INET socket, and IPv6 connections will be "
+"accepted by AF_INET6 socket."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:541
+msgid ""
+"Another way is using one AF_INET6 wildcard bind socket. Use man:"
+"getaddrinfo[3] with AI_PASSIVE into ai_flags and with AF_INET6 into "
+"ai_family, and set the 1st argument hostname to NULL. And man:socket[2] and "
+"man:bind[2] to the address returned. (should be IPv6 unspecified addr). "
+"You can accept either of IPv4 and IPv6 packet via this one socket."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:545
+msgid ""
+"To support only IPv6 traffic on AF_INET6 wildcard binded socket portably, "
+"always check the peer address when a connection is made toward AF_INET6 "
+"listening socket. If the address is IPv4 mapped address, you may want to "
+"reject the connection. You can check the condition by using "
+"IN6_IS_ADDR_V4MAPPED() macro."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:547
+msgid ""
+"To resolve this issue more easily, there is system dependent man:"
+"setsockopt[2] option, IPV6_BINDV6ONLY, used like below."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:551
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:598
+#, no-wrap
+msgid "\tint on;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:554
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:601
+#, no-wrap
+msgid ""
+"\tsetsockopt(s, IPPROTO_IPV6, IPV6_BINDV6ONLY,\n"
+"\t\t (char *)&on, sizeof (on)) < 0));\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:557
+msgid "When this call succeed, then this socket only receive IPv6 packets."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:559
+msgid "Comments on initiating side:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:561
+msgid ""
+"Advise to application implementers: to implement a portable IPv6 application "
+"(which works on multiple IPv6 kernels), we believe that the following is the "
+"key to the success:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:563
+msgid "NEVER hardcode AF_INET nor AF_INET6."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:564
+msgid ""
+"Use man:getaddrinfo[3] and man:getnameinfo[3] throughout the system. Never "
+"use gethostby*(), getaddrby*(), inet_*() or getipnodeby*(). (To update "
+"existing applications to be IPv6 aware easily, sometime getipnodeby*() will "
+"be useful. But if possible, try to rewrite the code to use man:"
+"getaddrinfo[3] and man:getnameinfo[3].)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:565
+msgid ""
+"If you would like to connect to destination, use man:getaddrinfo[3] and try "
+"all the destination returned, like man:telnet[1] does."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:566
+msgid ""
+"Some of the IPv6 stack is shipped with buggy man:getaddrinfo[3]. Ship a "
+"minimal working version with your application and use that as last resort."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:572
+msgid ""
+"If you would like to use AF_INET6 socket for both IPv4 and IPv6 outgoing "
+"connection, you will need to use man:getipnodebyname[3]. When you would "
+"like to update your existing application to be IPv6 aware with minimal "
+"effort, this approach might be chosen. But please note that it is a "
+"temporal solution, because man:getipnodebyname[3] itself is not recommended "
+"as it does not handle scoped IPv6 addresses at all. For IPv6 name "
+"resolution, man:getaddrinfo[3] is the preferred API. So you should rewrite "
+"your application to use man:getaddrinfo[3], when you get the time to do it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:576
+msgid ""
+"When writing applications that make outgoing connections, story goes much "
+"simpler if you treat AF_INET and AF_INET6 as totally separate address "
+"family. {set,get}sockopt issue goes simpler, DNS issue will be made "
+"simpler. We do not recommend you to rely upon IPv4 mapped address."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:577
+#, no-wrap
+msgid "unified tcp and inpcb code"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:581
+msgid ""
+"FreeBSD 4.x uses shared tcp code between IPv4 and IPv6 (from sys/netinet/"
+"tcp*) and separate udp4/6 code. It uses unified inpcb structure."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:584
+msgid ""
+"The platform can be configured to support IPv4 mapped address. Kernel "
+"configuration is summarized as follows:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:586
+msgid ""
+"By default, AF_INET6 socket will grab IPv4 connections in certain condition, "
+"and can initiate connection to IPv4 destination embedded in IPv4 mapped IPv6 "
+"address."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:587
+msgid "You can disable it on entire system with sysctl like below."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:589
+msgid "`sysctl net.inet6.ip6.mapped_addr=0`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:591
+msgid "====== Listening Side"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:594
+msgid ""
+"Each socket can be configured to support special AF_INET6 wildcard bind "
+"(enabled by default). You can disable it on each socket basis with man:"
+"setsockopt[2] like below."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:604
+msgid ""
+"Wildcard AF_INET6 socket grabs IPv4 connection if and only if the following "
+"conditions are satisfied:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:606
+msgid "there is no AF_INET socket that matches the IPv4 connection"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:607
+msgid ""
+"the AF_INET6 socket is configured to accept IPv4 traffic, i.e., "
+"getsockopt(IPV6_BINDV6ONLY) returns 0."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:609
+msgid "There is no problem with open/close ordering."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:611
+msgid "====== Initiating Side"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:613
+msgid ""
+"FreeBSD 4.x supports outgoing connection to IPv4 mapped address (::"
+"ffff:10.1.1.1), if the node is configured to support IPv4 mapped address."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:614
+#, no-wrap
+msgid "sockaddr_storage"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:620
+msgid ""
+"When RFC2553 was about to be finalized, there was discussion on how struct "
+"sockaddr_storage members are named. One proposal is to prepend \"__\" to "
+"the members (like \"__ss_len\") as they should not be touched. The other "
+"proposal was not to prepend it (like \"ss_len\") as we need to touch those "
+"members directly. There was no clear consensus on it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:622
+msgid "As a result, RFC2553 defines struct sockaddr_storage as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:630
+#, no-wrap
+msgid ""
+"\tstruct sockaddr_storage {\n"
+"\t\tu_char\t__ss_len;\t/* address length */\n"
+"\t\tu_char\t__ss_family;\t/* address family */\n"
+"\t\t/* and bunch of padding */\n"
+"\t};\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:633
+msgid "On the contrary, XNET draft defines as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:641
+#, no-wrap
+msgid ""
+"\tstruct sockaddr_storage {\n"
+"\t\tu_char\tss_len;\t\t/* address length */\n"
+"\t\tu_char\tss_family;\t/* address family */\n"
+"\t\t/* and bunch of padding */\n"
+"\t};\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:644
+msgid ""
+"In December 1999, it was agreed that RFC2553bis should pick the latter "
+"(XNET) definition."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:646
+msgid ""
+"Current implementation conforms to XNET definition, based on RFC2553bis "
+"discussion."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:649
+msgid ""
+"If you look at multiple IPv6 implementations, you will be able to see both "
+"definitions. As an userland programmer, the most portable way of dealing "
+"with it is to:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:651
+msgid ""
+"ensure ss_family and/or ss_len are available on the platform, by using GNU "
+"autoconf,"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:652
+msgid ""
+"have -Dss_family=__ss_family to unify all occurrences (including header "
+"file) into __ss_family, or"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:653
+msgid "never touch __ss_family. cast to sockaddr * and use sa_family like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:658
+#, no-wrap
+msgid ""
+"\tstruct sockaddr_storage ss;\n"
+"\tfamily = ((struct sockaddr *)&ss)->sa_family\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:660
+#, no-wrap
+msgid "Network Drivers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:663
+msgid ""
+"Now following two items are required to be supported by standard drivers:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:665
+msgid ""
+"mbuf clustering requirement. In this stable release, we changed MINCLSIZE "
+"into MHLEN+1 for all the operating systems in order to make all the drivers "
+"behave as we expect."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:666
+msgid ""
+"multicast. If man:ifmcstat[8] yields no multicast group for a interface, "
+"that interface has to be patched."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:669
+msgid ""
+"If any of the drivers do not support the requirements, then the drivers "
+"cannot be used for IPv6 and/or IPsec communication. If you find any problem "
+"with your card using IPv6/IPsec, then, please report it to the {freebsd-"
+"bugs}."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:672
+msgid ""
+"(NOTE: In the past we required all PCMCIA drivers to have a call to "
+"in6_ifattach(). We have no such requirement any more)"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:673
+#, no-wrap
+msgid "Translator"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:676
+msgid "We categorize IPv4/IPv6 translator into 4 types:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:678
+msgid ""
+"_Translator A_ --- It is used in the early stage of transition to make it "
+"possible to establish a connection from an IPv6 host in an IPv6 island to an "
+"IPv4 host in the IPv4 ocean."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:679
+msgid ""
+"_Translator B_ --- It is used in the early stage of transition to make it "
+"possible to establish a connection from an IPv4 host in the IPv4 ocean to an "
+"IPv6 host in an IPv6 island."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:680
+msgid ""
+"_Translator C_ --- It is used in the late stage of transition to make it "
+"possible to establish a connection from an IPv4 host in an IPv4 island to an "
+"IPv6 host in the IPv6 ocean."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:681
+msgid ""
+"_Translator D_ --- It is used in the late stage of transition to make it "
+"possible to establish a connection from an IPv6 host in the IPv6 ocean to an "
+"IPv4 host in an IPv4 island."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:683
+#, no-wrap
+msgid "IPsec"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:686
+msgid "IPsec is mainly organized by three components."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:688
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:691
+#, no-wrap
+msgid "Policy Management"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:689
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:701
+#, no-wrap
+msgid "Key Management"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:690
+msgid "AH and ESP handling"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:698
+msgid ""
+"The kernel implements experimental policy management code. There are two "
+"way to manage security policy. One is to configure per-socket policy using "
+"man:setsockopt[2]. In this cases, policy configuration is described in man:"
+"ipsec_set_policy[3]. The other is to configure kernel packet filter-based "
+"policy using PF_KEY interface, via man:setkey[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:700
+msgid ""
+"The policy entry is not re-ordered with its indexes, so the order of entry "
+"when you add is very significant."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:705
+msgid ""
+"The key management code implemented in this kit (sys/netkey) is a home-brew "
+"PFKEY v2 implementation. This conforms to RFC2367."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:709
+msgid ""
+"The home-brew IKE daemon, \"racoon\" is included in the kit (kame/kame/"
+"racoon). Basically you will need to run racoon as daemon, then set up a "
+"policy to require keys (like `ping -P 'out ipsec esp/transport//use'`). The "
+"kernel will contact racoon daemon as necessary to exchange keys."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:710
+#, no-wrap
+msgid "AH and ESP Handling"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:718
+msgid ""
+"IPsec module is implemented as \"hooks\" to the standard IPv4/IPv6 "
+"processing. When sending a packet, ip{,6}_output() checks if ESP/AH "
+"processing is required by checking if a matching SPD (Security Policy "
+"Database) is found. If ESP/AH is needed, {esp,ah}{4,6}_output() will be "
+"called and mbuf will be updated accordingly. When a packet is received, "
+"{esp,ah}4_input() will be called based on protocol number, i.e., "
+"(*inetsw[proto])(). {esp,ah}4_input() will decrypt/check authenticity of "
+"the packet, and strips off daisy-chained header and padding for ESP/AH. It "
+"is safe to strip off the ESP/AH header on packet reception, since we will "
+"never use the received packet in \"as is\" form."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:721
+msgid ""
+"By using ESP/AH, TCP4/6 effective data segment size will be affected by "
+"extra daisy-chained headers inserted by ESP/AH. Our code takes care of the "
+"case."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:725
+msgid ""
+"Basic crypto functions can be found in directory \"sys/crypto\". ESP/AH "
+"transform are listed in {esp,ah}_core.c with wrapper functions. If you wish "
+"to add some algorithm, add wrapper function in {esp,ah}_core.c, and add your "
+"crypto algorithm code into sys/crypto."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:727
+msgid ""
+"Tunnel mode is partially supported in this release, with the following "
+"restrictions:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:729
+msgid ""
+"IPsec tunnel is not combined with GIF generic tunneling interface. It needs "
+"a great care because we may create an infinite loop between ip_output() and "
+"tunnelifp->if_output(). Opinion varies if it is better to unify them, or not."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:730
+msgid ""
+"MTU and Don't Fragment bit (IPv4) considerations need more checking, but "
+"basically works fine."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:731
+msgid ""
+"Authentication model for AH tunnel must be revisited. We will need to "
+"improve the policy management engine, eventually."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:732
+#, no-wrap
+msgid "Conformance to RFCs and IDs"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:735
+msgid ""
+"The IPsec code in the kernel conforms (or, tries to conform) to the "
+"following standards:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:737
+msgid "\"old IPsec\" specification documented in [.filename]#rfc182[5-9].txt#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:740
+msgid ""
+"\"new IPsec\" specification documented in [.filename]#rfc240[1-6].txt#, [."
+"filename]#rfc241[01].txt#, [.filename]#rfc2451.txt# and [.filename]#draft-"
+"mcdonald-simple-ipsec-api-01.txt# (draft expired, but you can take from link:"
+"ftp://ftp.kame.net/pub/internet-drafts/[ ftp://ftp.kame.net/pub/internet-"
+"drafts/]). (NOTE: IKE specifications, [.filename]#rfc241[7-9].txt# are "
+"implemented in userland, as \"racoon\" IKE daemon)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:742
+msgid "Currently supported algorithms are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:744
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:781
+msgid "old IPsec AH"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:746
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:759
+msgid "null crypto checksum (no document, just for debugging)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:747
+msgid "keyed MD5 with 128bit crypto checksum ([.filename]#rfc1828.txt#)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:748
+msgid "keyed SHA1 with 128bit crypto checksum (no document)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:749
+msgid "HMAC MD5 with 128bit crypto checksum ([.filename]#rfc2085.txt#)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:750
+msgid "HMAC SHA1 with 128bit crypto checksum (no document)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:752
+msgid "old IPsec ESP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:754
+msgid "null encryption (no document, similar to [.filename]#rfc2410.txt#)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:755
+msgid "DES-CBC mode ([.filename]#rfc1829.txt#)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:757
+msgid "new IPsec AH"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:760
+msgid "keyed MD5 with 96bit crypto checksum (no document)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:761
+msgid "keyed SHA1 with 96bit crypto checksum (no document)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:762
+msgid "HMAC MD5 with 96bit crypto checksum ([.filename]#rfc2403.txt#)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:763
+msgid "HMAC SHA1 with 96bit crypto checksum ([.filename]#rfc2404.txt#)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:765
+msgid "new IPsec ESP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:767
+msgid "null encryption ([.filename]#rfc2410.txt#)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:768
+msgid ""
+"DES-CBC with derived IV ([.filename]#draft-ietf-ipsec-ciph-des-derived-01."
+"txt#, draft expired)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:769
+msgid "DES-CBC with explicit IV ([.filename]#rfc2405.txt#)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:770
+msgid "3DES-CBC with explicit IV ([.filename]#rfc2451.txt#)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:771
+msgid "BLOWFISH CBC ([.filename]#rfc2451.txt#)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:772
+msgid "CAST128 CBC ([.filename]#rfc2451.txt#)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:773
+msgid "RC5 CBC ([.filename]#rfc2451.txt#)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:774
+msgid "each of the above can be combined with:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:776
+msgid "ESP authentication with HMAC-MD5(96bit)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:777
+msgid "ESP authentication with HMAC-SHA1(96bit)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:779
+msgid "The following algorithms are NOT supported:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:783
+msgid ""
+"HMAC MD5 with 128bit crypto checksum + 64bit replay prevention ([."
+"filename]#rfc2085.txt#)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:784
+msgid ""
+"keyed SHA1 with 160bit crypto checksum + 32bit padding ([.filename]#rfc1852."
+"txt#)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:787
+msgid ""
+"IPsec (in kernel) and IKE (in userland as \"racoon\") has been tested at "
+"several interoperability test events, and it is known to interoperate with "
+"many other implementations well. Also, current IPsec implementation as "
+"quite wide coverage for IPsec crypto algorithms documented in RFC (we cover "
+"algorithms without intellectual property issues only)."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:789
+#, no-wrap
+msgid "ECN Consideration on IPsec Tunnels"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:792
+msgid ""
+"ECN-friendly IPsec tunnel is supported as described in [.filename]#draft-"
+"ipsec-ecn-00.txt#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:797
+msgid ""
+"Normal IPsec tunnel is described in RFC2401. On encapsulation, IPv4 TOS "
+"field (or, IPv6 traffic class field) will be copied from inner IP header to "
+"outer IP header. On decapsulation outer IP header will be simply dropped. "
+"The decapsulation rule is not compatible with ECN, since ECN bit on the "
+"outer IP TOS/traffic class field will be lost."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:800
+msgid ""
+"To make IPsec tunnel ECN-friendly, we should modify encapsulation and "
+"decapsulation procedure. This is described in http://www.aciri.org/floyd/"
+"papers/draft-ipsec-ecn-00.txt[ http://www.aciri.org/floyd/papers/draft-ipsec-"
+"ecn-00.txt], chapter 3."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:802
+msgid ""
+"IPsec tunnel implementation can give you three behaviors, by setting net."
+"inet.ipsec.ecn (or net.inet6.ipsec6.ecn) to some value:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:804
+msgid "RFC2401: no consideration for ECN (sysctl value -1)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:805
+msgid "ECN forbidden (sysctl value 0)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:806
+msgid "ECN allowed (sysctl value 1)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:808
+msgid ""
+"Note that the behavior is configurable in per-node manner, not per-SA manner "
+"(draft-ipsec-ecn-00 wants per-SA configuration, but it looks too much for "
+"me)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:810
+msgid ""
+"The behavior is summarized as follows (see source code for more detail):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:817
+#, no-wrap
+msgid ""
+"encapsulate decapsulate\n"
+" --- ---\n"
+"RFC2401 copy all TOS bits drop TOS bits on outer\n"
+" from inner to outer. (use inner TOS bits as is)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:821
+#, no-wrap
+msgid ""
+"ECN forbidden copy TOS bits except for ECN drop TOS bits on outer\n"
+" (masked with 0xfc) from inner (use inner TOS bits as is)\n"
+" to outer. set ECN bits to 0.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:826
+#, no-wrap
+msgid ""
+"ECN allowed copy TOS bits except for ECN use inner TOS bits with some\n"
+" CE (masked with 0xfe) from change. if outer ECN CE bit\n"
+" inner to outer. is 1, enable ECN CE bit on\n"
+" set ECN CE bit to 0. the inner.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:829
+msgid "General strategy for configuration is as follows:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:831
+msgid ""
+"if both IPsec tunnel endpoint are capable of ECN-friendly behavior, you "
+"should better configure both end to \"ECN allowed\" (sysctl value 1)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:832
+msgid ""
+"if the other end is very strict about TOS bit, use \"RFC2401\" (sysctl value "
+"-1)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:833
+msgid "in other cases, use \"ECN forbidden\" (sysctl value 0)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:835
+msgid "The default behavior is \"ECN forbidden\" (sysctl value 0)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:837
+msgid "For more information, please refer to:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:839
+msgid ""
+"http://www.aciri.org/floyd/papers/draft-ipsec-ecn-00.txt[ http://www.aciri."
+"org/floyd/papers/draft-ipsec-ecn-00.txt], RFC2481 (Explicit Congestion "
+"Notification), src/sys/netinet6/{ah,esp}_input.c"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:841
+msgid ""
+"(Thanks goes to Kenjiro Cho mailto:kjc@csl.sony.co.jp[kjc@csl.sony.co.jp] "
+"for detailed analysis)"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:842
+#, no-wrap
+msgid "Interoperability"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:846
+msgid ""
+"Here are (some of) platforms that KAME code have tested IPsec/IKE "
+"interoperability in the past. Note that both ends may have modified their "
+"implementation, so use the following list just for reference purposes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:847
+msgid ""
+"Altiga, Ashley-laurent (vpcom.com), Data Fellows (F-Secure), Ericsson ACC, "
+"FreeS/WAN, HITACHI, IBM AIX(R), IIJ, Intel, Microsoft(R) Windows NT(R), NIST "
+"(linux IPsec + plutoplus), Netscreen, OpenBSD, RedCreek, Routerware, SSH, "
+"Secure Computing, Soliton, Toshiba, VPNet, Yamaha RT100i"
+msgstr ""
diff --git a/documentation/content/en/books/developers-handbook/kernelbuild/_index.adoc b/documentation/content/en/books/developers-handbook/kernelbuild/_index.adoc
index 17865d2606..1d8bee3169 100644
--- a/documentation/content/en/books/developers-handbook/kernelbuild/_index.adoc
+++ b/documentation/content/en/books/developers-handbook/kernelbuild/_index.adoc
@@ -7,7 +7,7 @@ description: Building and Installing a FreeBSD Kernel
tags: ["building", "installing", "kernel", "FreeBSD"]
showBookMenu: true
weight: 12
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/kernelbuild/"
---
[[kernelbuild]]
@@ -52,11 +52,11 @@ Being a kernel developer requires understanding of the kernel build process.
To debug the FreeBSD kernel it is required to be able to build one.
There are two known ways to do so:
-The supported procedure to build and install a kernel is documented in the extref:{handbook}[Building and Installing a Custom Kernel, kernelconfig-building] chapter of the FreeBSD Handbook.
+The supported procedure to build and install a kernel is documented in the extref:{handbook}kernelconfig/[Building and Installing a Custom Kernel, kernelconfig-building] chapter of the FreeBSD Handbook.
[NOTE]
====
-It is supposed that the reader of this chapter is familiar with the information described in the extref:{handbook}[Building and Installing a Custom Kernel, kernelconfig-building] chapter of the FreeBSD Handbook.
+It is supposed that the reader of this chapter is familiar with the information described in the extref:{handbook}kernelconfig/[Building and Installing a Custom Kernel, kernelconfig-building] chapter of the FreeBSD Handbook.
If this is not the case, please read through the above mentioned chapter to understand how the build process works.
====
diff --git a/documentation/content/en/books/developers-handbook/kernelbuild/_index.po b/documentation/content/en/books/developers-handbook/kernelbuild/_index.po
new file mode 100644
index 0000000000..96a084e16f
--- /dev/null
+++ b/documentation/content/en/books/developers-handbook/kernelbuild/_index.po
@@ -0,0 +1,119 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-07-15 16:42-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: documentation/content/en/books/developers-handbook/kernelbuild/_index.adoc:1
+#: documentation/content/en/books/developers-handbook/kernelbuild/_index.adoc:14
+#, no-wrap
+msgid "Building and Installing a FreeBSD Kernel"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/developers-handbook/kernelbuild/_index.adoc:1
+#, no-wrap
+msgid "Chapter 9. Building and Installing a FreeBSD Kernel"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kernelbuild/_index.adoc:54
+msgid ""
+"Being a kernel developer requires understanding of the kernel build "
+"process. To debug the FreeBSD kernel it is required to be able to build "
+"one. There are two known ways to do so:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kernelbuild/_index.adoc:56
+msgid ""
+"The supported procedure to build and install a kernel is documented in the "
+"extref:{handbook}kernelconfig/[Building and Installing a Custom Kernel, "
+"kernelconfig-building] chapter of the FreeBSD Handbook."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/kernelbuild/_index.adoc:61
+msgid ""
+"It is supposed that the reader of this chapter is familiar with the "
+"information described in the extref:{handbook}kernelconfig/[Building and "
+"Installing a Custom Kernel, kernelconfig-building] chapter of the FreeBSD "
+"Handbook. If this is not the case, please read through the above mentioned "
+"chapter to understand how the build process works."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/kernelbuild/_index.adoc:64
+#, no-wrap
+msgid "Building the Faster but Brittle Way"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kernelbuild/_index.adoc:68
+msgid ""
+"Building the kernel this way may be useful when working on the kernel code "
+"and it may actually be faster than the documented procedure when only a "
+"single option or two were tweaked in the kernel configuration file. On the "
+"other hand, it might lead to unexpected kernel build breakage."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kernelbuild/_index.adoc:71
+msgid "Run man:config[8] to generate the kernel source code:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kernelbuild/_index.adoc:75
+#, no-wrap
+msgid "# /usr/sbin/config MYKERNEL\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kernelbuild/_index.adoc:78
+msgid ""
+"Change into the build directory. man:config[8] will print the name of this "
+"directory after being run as above."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kernelbuild/_index.adoc:82
+#, no-wrap
+msgid "# cd ../compile/MYKERNEL\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kernelbuild/_index.adoc:85
+msgid "Compile the kernel:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kernelbuild/_index.adoc:90
+#, no-wrap
+msgid ""
+"# make depend\n"
+"# make\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kernelbuild/_index.adoc:93
+msgid "Install the new kernel:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kernelbuild/_index.adoc:97
+#, no-wrap
+msgid "# make install\n"
+msgstr ""
diff --git a/documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc b/documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc
index ed0a698d96..f56cd4cd0a 100644
--- a/documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc
+++ b/documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc
@@ -10,7 +10,7 @@ description: FreeBSD Kernel Debugging
tags: ["Debugging", "Dump", "kgdb", "DDB", "GDB"]
showBookMenu: true
weight: 13
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/kerneldebug/"
---
[[kerneldebug]]
diff --git a/documentation/content/en/books/developers-handbook/kerneldebug/_index.po b/documentation/content/en/books/developers-handbook/kerneldebug/_index.po
new file mode 100644
index 0000000000..4dae2e378f
--- /dev/null
+++ b/documentation/content/en/books/developers-handbook/kerneldebug/_index.po
@@ -0,0 +1,1681 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 10:28-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:1
+#, no-wrap
+msgid "FreeBSD Kernel Debugging"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:1
+#, no-wrap
+msgid "Chapter 10. Kernel Debugging"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:17
+#, no-wrap
+msgid "Kernel Debugging"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:55
+#, no-wrap
+msgid "Obtaining a Kernel Crash Dump"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:60
+msgid ""
+"When running a development kernel (e.g., FreeBSD-CURRENT), such as a kernel "
+"under extreme conditions (e.g., very high load averages, tens of thousands "
+"of connections, exceedingly high number of concurrent users, hundreds of man:"
+"jail[8]s, etc.), or using a new feature or device driver on FreeBSD-STABLE "
+"(e.g., PAE), sometimes a kernel will panic. In the event that it does, this "
+"chapter will demonstrate how to extract useful information out of a crash."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:65
+msgid ""
+"A system reboot is inevitable once a kernel panics. Once a system is "
+"rebooted, the contents of a system's physical memory (RAM) is lost, as well "
+"as any bits that are on the swap device before the panic. To preserve the "
+"bits in physical memory, the kernel makes use of the swap device as a "
+"temporary place to store the bits that are in RAM across a reboot after a "
+"crash. In doing this, when FreeBSD boots after a crash, a kernel image can "
+"now be extracted and debugging can take place."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:71
+msgid ""
+"A swap device that has been configured as a dump device still acts as a swap "
+"device. Dumps to non-swap devices (such as tapes or CDRWs, for example) are "
+"not supported at this time. A \"swap device\" is synonymous with a \"swap "
+"partition.\""
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:74
+msgid "Several types of kernel crash dumps are available:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:75
+#, no-wrap
+msgid "Full memory dumps"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:77
+msgid "Hold the complete contents of physical memory."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:78
+#, no-wrap
+msgid "Minidumps"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:80
+msgid "Hold only memory pages in use by the kernel (FreeBSD 6.2 and higher)."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:81
+#, no-wrap
+msgid "Textdumps"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:83
+msgid ""
+"Hold captured, scripted, or interactive debugger output (FreeBSD 7.1 and "
+"higher)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:85
+msgid ""
+"Minidumps are the default dump type as of FreeBSD 7.0, and in most cases "
+"will capture all necessary information present in a full memory dump, as "
+"most problems can be isolated only using kernel state."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:87
+#, no-wrap
+msgid "Configuring the Dump Device"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:95
+msgid ""
+"Before the kernel will dump the contents of its physical memory to a dump "
+"device, a dump device must be configured. A dump device is specified by "
+"using the man:dumpon[8] command to tell the kernel where to save kernel "
+"crash dumps. The man:dumpon[8] program must be called after the swap "
+"partition has been configured with man:swapon[8]. This is normally handled "
+"by setting the `dumpdev` variable in man:rc.conf[5] to the path of the swap "
+"device (the recommended way to extract a kernel dump) or `AUTO` to use the "
+"first configured swap device. The default for `dumpdev` is `AUTO` in HEAD, "
+"and changed to `NO` on RELENG_* branches (except for RELENG_7, which was "
+"left set to `AUTO`). On FreeBSD 9.0-RELEASE and later versions, bsdinstall "
+"will ask whether crash dumps should be enabled on the target system during "
+"the install process."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:99
+msgid ""
+"Check [.filename]#/etc/fstab# or man:swapinfo[8] for a list of swap devices."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:104
+msgid ""
+"Make sure the `dumpdir` specified in man:rc.conf[5] exists before a kernel "
+"crash!"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:109
+#, no-wrap
+msgid ""
+"# mkdir /var/crash\n"
+"# chmod 700 /var/crash\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:112
+msgid ""
+"Also, remember that the contents of [.filename]#/var/crash# is sensitive and "
+"very likely contains confidential information such as passwords."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:115
+#, no-wrap
+msgid "Extracting a Kernel Dump"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:121
+msgid ""
+"Once a dump has been written to a dump device, the dump must be extracted "
+"before the swap device is mounted. To extract a dump from a dump device, "
+"use the man:savecore[8] program. If `dumpdev` has been set in man:rc."
+"conf[5], man:savecore[8] will be called automatically on the first multi-"
+"user boot after the crash and before the swap device is mounted. The "
+"location of the extracted core is placed in the man:rc.conf[5] value "
+"`dumpdir`, by default [.filename]#/var/crash# and will be named [."
+"filename]#vmcore.0#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:125
+msgid ""
+"In the event that there is already a file called [.filename]#vmcore.0# in [."
+"filename]#/var/crash# (or whatever `dumpdir` is set to), the kernel will "
+"increment the trailing number for every crash to avoid overwriting an "
+"existing [.filename]#vmcore# (e.g., [.filename]#vmcore.1#). man:savecore[8] "
+"will always create a symbolic link to named [.filename]#vmcore.last# in [."
+"filename]#/var/crash# after a dump is saved. This symbolic link can be used "
+"to locate the name of the most recent dump."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:129
+msgid ""
+"The man:crashinfo[8] utility generates a text file containing a summary of "
+"information from a full memory dump or minidump. If `dumpdev` has been set "
+"in man:rc.conf[5], man:crashinfo[8] will be invoked automatically after man:"
+"savecore[8]. The output is saved to a file in `dumpdir` named [."
+"filename]#core.txt.N#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:134
+msgid ""
+"If you are testing a new kernel but need to boot a different one in order to "
+"get your system up and running again, boot it only into single user mode "
+"using the `-s` flag at the boot prompt, and then perform the following steps:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:141
+#, no-wrap
+msgid ""
+"# fsck -p\n"
+"# mount -a -t ufs # make sure /var/crash is writable\n"
+"# savecore /var/crash /dev/ad0s1b\n"
+"# exit # exit to multi-user\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:146
+msgid ""
+"This instructs man:savecore[8] to extract a kernel dump from [.filename]#/"
+"dev/ad0s1b# and place the contents in [.filename]#/var/crash#. Do not "
+"forget to make sure the destination directory [.filename]#/var/crash# has "
+"enough space for the dump. Also, do not forget to specify the correct path "
+"to your swap device as it is likely different than [.filename]#/dev/ad0s1b#!"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:148
+#, no-wrap
+msgid "Testing Kernel Dump Configuration"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:153
+msgid ""
+"The kernel includes a man:sysctl[8] node that requests a kernel panic. This "
+"can be used to verify that your system is properly configured to save kernel "
+"crash dumps. You may wish to remount existing file systems as read-only in "
+"single user mode before triggering the crash to avoid data loss."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:163
+#, no-wrap
+msgid ""
+"# shutdown now\n"
+"...\n"
+"Enter full pathname of shell or RETURN for /bin/sh:\n"
+"# mount -a -u -r\n"
+"# sysctl debug.kdb.panic=1\n"
+"debug.kdb.panic:panic: kdb_sysctl_panic\n"
+"...\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:166
+msgid ""
+"After rebooting, your system should save a dump in [.filename]#/var/crash# "
+"along with a matching summary from man:crashinfo[8]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:168
+#, no-wrap
+msgid "Debugging a Kernel Crash Dump with `kgdb`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:175
+msgid ""
+"This section covers man:kgdb[1]. The latest version is included in the "
+"package:devel/gdb[]. An older version is also present in FreeBSD 11 and "
+"earlier."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:178
+msgid ""
+"To enter into the debugger and begin getting information from the dump, "
+"start kgdb:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:182
+#, no-wrap
+msgid "# kgdb -n N\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:186
+msgid ""
+"Where _N_ is the suffix of the [.filename]#vmcore.N# to examine. To open "
+"the most recent dump use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:190
+#, no-wrap
+msgid "# kgdb -n last\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:194
+msgid ""
+"Normally, man:kgdb[1] should be able to locate the kernel running at the "
+"time the dump was generated. If it is not able to locate the correct "
+"kernel, pass the pathname of the kernel and dump as two arguments to kgdb:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:198
+#, no-wrap
+msgid "# kgdb /boot/kernel/kernel /var/crash/vmcore.0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:201
+msgid ""
+"You can debug the crash dump using the kernel sources just like you can for "
+"any other program."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:208
+msgid ""
+"This dump is from a 5.2-BETA kernel and the crash comes from deep within the "
+"kernel. The output below has been modified to include line numbers on the "
+"left. This first trace inspects the instruction pointer and obtains a back "
+"trace. The address that is used on line 41 for the `list` command is the "
+"instruction pointer and can be found on line 17. Most developers will "
+"request having at least this information sent to them if you are unable to "
+"debug the problem yourself. If, however, you do solve the problem, make "
+"sure that your patch winds its way into the source tree via a problem "
+"report, mailing lists, or by being able to commit it!"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:301
+#, no-wrap
+msgid ""
+" 1:# cd /usr/obj/usr/src/sys/KERNCONF\n"
+" 2:# kgdb kernel.debug /var/crash/vmcore.0\n"
+" 3:GNU gdb 5.2.1 (FreeBSD)\n"
+" 4:Copyright 2002 Free Software Foundation, Inc.\n"
+" 5:GDB is free software, covered by the GNU General Public License, and you are\n"
+" 6:welcome to change it and/or distribute copies of it under certain conditions.\n"
+" 7:Type \"show copying\" to see the conditions.\n"
+" 8:There is absolutely no warranty for GDB. Type \"show warranty\" for details.\n"
+" 9:This GDB was configured as \"i386-undermydesk-freebsd\"...\n"
+"10:panic: page fault\n"
+"11:panic messages:\n"
+"12:---\n"
+"13:Fatal trap 12: page fault while in kernel mode\n"
+"14:cpuid = 0; apic id = 00\n"
+"15:fault virtual address = 0x300\n"
+"16:fault code: = supervisor read, page not present\n"
+"17:instruction pointer = 0x8:0xc0713860\n"
+"18:stack pointer = 0x10:0xdc1d0b70\n"
+"19:frame pointer = 0x10:0xdc1d0b7c\n"
+"20:code segment = base 0x0, limit 0xfffff, type 0x1b\n"
+"21: = DPL 0, pres 1, def32 1, gran 1\n"
+"22:processor eflags = resume, IOPL = 0\n"
+"23:current process = 14394 (uname)\n"
+"24:trap number = 12\n"
+"25:panic: page fault\n"
+"26 cpuid = 0;\n"
+"27:Stack backtrace:\n"
+"28\n"
+"29:syncing disks, buffers remaining... 2199 2199 panic: mi_switch: switch in a critical section\n"
+"30:cpuid = 0;\n"
+"31:Uptime: 2h43m19s\n"
+"32:Dumping 255 MB\n"
+"33: 16 32 48 64 80 96 112 128 144 160 176 192 208 224 240\n"
+"34:---\n"
+"35:Reading symbols from /boot/kernel/snd_maestro3.ko...done.\n"
+"36:Loaded symbols for /boot/kernel/snd_maestro3.ko\n"
+"37:Reading symbols from /boot/kernel/snd_pcm.ko...done.\n"
+"38:Loaded symbols for /boot/kernel/snd_pcm.ko\n"
+"39:#0 doadump () at /usr/src/sys/kern/kern_shutdown.c:240\n"
+"40:240 dumping++;\n"
+"41:(kgdb) list *0xc0713860\n"
+"42:0xc0713860 is in lapic_ipi_wait (/usr/src/sys/i386/i386/local_apic.c:663).\n"
+"43:658 incr = 0;\n"
+"44:659 delay = 1;\n"
+"45:660 } else\n"
+"46:661 incr = 1;\n"
+"47:662 for (x = 0; x < delay; x += incr) {\n"
+"48:663 if ((lapic->icr_lo & APIC_DELSTAT_MASK) == APIC_DELSTAT_IDLE)\n"
+"49:664 return (1);\n"
+"50:665 ia32_pause();\n"
+"51:666 }\n"
+"52:667 return (0);\n"
+"53:(kgdb) backtrace\n"
+"54:#0 doadump () at /usr/src/sys/kern/kern_shutdown.c:240\n"
+"55:#1 0xc055fd9b in boot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:372\n"
+"56:#2 0xc056019d in panic () at /usr/src/sys/kern/kern_shutdown.c:550\n"
+"57:#3 0xc0567ef5 in mi_switch () at /usr/src/sys/kern/kern_synch.c:470\n"
+"58:#4 0xc055fa87 in boot (howto=256) at /usr/src/sys/kern/kern_shutdown.c:312\n"
+"59:#5 0xc056019d in panic () at /usr/src/sys/kern/kern_shutdown.c:550\n"
+"60:#6 0xc0720c66 in trap_fatal (frame=0xdc1d0b30, eva=0)\n"
+"61: at /usr/src/sys/i386/i386/trap.c:821\n"
+"62:#7 0xc07202b3 in trap (frame=\n"
+"63: {tf_fs = -1065484264, tf_es = -1065484272, tf_ds = -1065484272, tf_edi = 1, tf_esi = 0, tf_ebp = -602076292, tf_isp = -602076324, tf_ebx = 0, tf_edx = 0, tf_ecx = 1000000, tf_eax = 243, tf_trapno = 12, tf_err = 0, tf_eip = -1066321824, tf_cs = 8, tf_eflags = 65671, tf_esp = 243, tf_ss = 0})\n"
+"64: at /usr/src/sys/i386/i386/trap.c:250\n"
+"65:#8 0xc070c9f8 in calltrap () at {standard input}:94\n"
+"66:#9 0xc07139f3 in lapic_ipi_vectored (vector=0, dest=0)\n"
+"67: at /usr/src/sys/i386/i386/local_apic.c:733\n"
+"68:#10 0xc0718b23 in ipi_selected (cpus=1, ipi=1)\n"
+"69: at /usr/src/sys/i386/i386/mp_machdep.c:1115\n"
+"70:#11 0xc057473e in kseq_notify (ke=0xcc05e360, cpu=0)\n"
+"71: at /usr/src/sys/kern/sched_ule.c:520\n"
+"72:#12 0xc0575cad in sched_add (td=0xcbcf5c80)\n"
+"73: at /usr/src/sys/kern/sched_ule.c:1366\n"
+"74:#13 0xc05666c6 in setrunqueue (td=0xcc05e360)\n"
+"75: at /usr/src/sys/kern/kern_switch.c:422\n"
+"76:#14 0xc05752f4 in sched_wakeup (td=0xcbcf5c80)\n"
+"77: at /usr/src/sys/kern/sched_ule.c:999\n"
+"78:#15 0xc056816c in setrunnable (td=0xcbcf5c80)\n"
+"79: at /usr/src/sys/kern/kern_synch.c:570\n"
+"80:#16 0xc0567d53 in wakeup (ident=0xcbcf5c80)\n"
+"81: at /usr/src/sys/kern/kern_synch.c:411\n"
+"82:#17 0xc05490a8 in exit1 (td=0xcbcf5b40, rv=0)\n"
+"83: at /usr/src/sys/kern/kern_exit.c:509\n"
+"84:#18 0xc0548011 in sys_exit () at /usr/src/sys/kern/kern_exit.c:102\n"
+"85:#19 0xc0720fd0 in syscall (frame=\n"
+"86: {tf_fs = 47, tf_es = 47, tf_ds = 47, tf_edi = 0, tf_esi = -1, tf_ebp = -1077940712, tf_isp = -602075788, tf_ebx = 672411944, tf_edx = 10, tf_ecx = 672411600, tf_eax = 1, tf_trapno = 12, tf_err = 2, tf_eip = 671899563, tf_cs = 31, tf_eflags = 642, tf_esp = -1077940740, tf_ss = 47})\n"
+"87: at /usr/src/sys/i386/i386/trap.c:1010\n"
+"88:#20 0xc070ca4d in Xint0x80_syscall () at {standard input}:136\n"
+"89:---Can't read userspace from dump, or kernel process---\n"
+"90:(kgdb) quit\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:307
+msgid ""
+"If your system is crashing regularly and you are running out of disk space, "
+"deleting old [.filename]#vmcore# files in [.filename]#/var/crash# could save "
+"a considerable amount of disk space!"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:310
+#, no-wrap
+msgid "On-Line Kernel Debugging Using DDB"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:314
+msgid ""
+"While `kgdb` as an off-line debugger provides a very high level of user "
+"interface, there are some things it cannot do. The most important ones "
+"being breakpointing and single-stepping kernel code."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:318
+msgid ""
+"If you need to do low-level debugging on your kernel, there is an on-line "
+"debugger available called DDB. It allows setting of breakpoints, single-"
+"stepping kernel functions, examining and changing kernel variables, etc. "
+"However, it cannot access kernel source files, and only has access to the "
+"global and static symbols, not to the full debug information like `kgdb` "
+"does."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:320
+msgid "To configure your kernel to include DDB, add the options"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:323
+#, no-wrap
+msgid "options KDB\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:328
+#, no-wrap
+msgid "options DDB\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:332
+msgid ""
+"to your config file, and rebuild. (See extref:{handbook}[The FreeBSD "
+"Handbook] for details on configuring the FreeBSD kernel)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:338
+msgid ""
+"Once your DDB kernel is running, there are several ways to enter DDB. The "
+"first, and earliest way is to use the boot flag `-d`. The kernel will start "
+"up in debug mode and enter DDB prior to any device probing. Hence you can "
+"even debug the device probe/attach functions. To use this, exit the "
+"loader's boot menu and enter `boot -d` at the loader prompt."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:342
+msgid ""
+"The second scenario is to drop to the debugger once the system has booted. "
+"There are two simple ways to accomplish this. If you would like to break to "
+"the debugger from the command prompt, simply type the command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:346
+#, no-wrap
+msgid "# sysctl debug.kdb.enter=1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:353
+msgid ""
+"Alternatively, if you are at the system console, you may use a hot-key on "
+"the keyboard. The default break-to-debugger sequence is kbd:[Ctrl+Alt"
+"+ESC]. For syscons, this sequence can be remapped and some of the "
+"distributed maps out there do this, so check to make sure you know the right "
+"sequence to use. There is an option available for serial consoles that "
+"allows the use of a serial line BREAK on the console line to enter DDB "
+"(`options BREAK_TO_DEBUGGER` in the kernel config file). It is not the "
+"default since there are a lot of serial adapters around that gratuitously "
+"generate a BREAK condition, for example when pulling the cable."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:356
+msgid ""
+"The third way is that any panic condition will branch to DDB if the kernel "
+"is configured to use it. For this reason, it is not wise to configure a "
+"kernel with DDB for a machine running unattended."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:358
+msgid "To obtain the unattended functionality, add:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:362
+#, no-wrap
+msgid "options\tKDB_UNATTENDED\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:365
+msgid "to the kernel configuration file and rebuild/reinstall."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:368
+msgid ""
+"The DDB commands roughly resemble some `gdb` commands. The first thing you "
+"probably need to do is to set a breakpoint:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:372
+#, no-wrap
+msgid " break function-name address\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:377
+msgid ""
+"Numbers are taken hexadecimal by default, but to make them distinct from "
+"symbol names; hexadecimal numbers starting with the letters `a-f` need to be "
+"preceded with `0x` (this is optional for other numbers). Simple expressions "
+"are allowed, for example: `function-name + 0x103`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:379
+msgid "To exit the debugger and continue execution, type:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:383
+#, no-wrap
+msgid " continue\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:386
+msgid "To get a stack trace of the current thread, use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:390
+#, no-wrap
+msgid " trace\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:393
+msgid ""
+"To get a stack trace of an arbitrary thread, specify a process ID or thread "
+"ID as a second argument to `trace`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:395
+msgid "If you want to remove a breakpoint, use"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:400
+#, no-wrap
+msgid ""
+" del\n"
+" del address-expression\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:404
+msgid ""
+"The first form will be accepted immediately after a breakpoint hit, and "
+"deletes the current breakpoint. The second form can remove any breakpoint, "
+"but you need to specify the exact address; this can be obtained from:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:408
+#, no-wrap
+msgid " show b\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:411
+msgid "or:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:415
+#, no-wrap
+msgid " show break\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:418
+msgid "To single-step the kernel, try:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:422
+#, no-wrap
+msgid " s\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:425
+msgid ""
+"This will step into functions, but you can make DDB trace them until the "
+"matching return statement is reached by:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:429
+#, no-wrap
+msgid " n\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:435
+msgid ""
+"This is different from ``gdb``'s `next` statement; it is like ``gdb``'s "
+"`finish`. Pressing kbd:[n] more than once will cause a continue."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:438
+msgid "To examine data from memory, use (for example):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:445
+#, no-wrap
+msgid ""
+" x/wx 0xf0133fe0,40\n"
+" x/hd db_symtab_space\n"
+" x/bc termbuf,10\n"
+" x/s stringbuf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:450
+msgid ""
+"for word/halfword/byte access, and hexadecimal/decimal/character/ string "
+"display. The number after the comma is the object count. To display the "
+"next 0x10 items, simply use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:454
+#, no-wrap
+msgid " x ,10\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:457
+msgid "Similarly, use"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:461
+#, no-wrap
+msgid " x/ia foofunc,10\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:464
+msgid ""
+"to disassemble the first 0x10 instructions of `foofunc`, and display them "
+"along with their offset from the beginning of `foofunc`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:466
+msgid "To modify memory, use the write command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:471
+#, no-wrap
+msgid ""
+" w/b termbuf 0xa 0xb 0\n"
+" w/w 0xf0010030 0 0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:475
+msgid ""
+"The command modifier (`b`/`h`/`w`) specifies the size of the data to be "
+"written, the first following expression is the address to write to and the "
+"remainder is interpreted as data to write to successive memory locations."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:477
+msgid "If you need to know the current registers, use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:481
+#, no-wrap
+msgid " show reg\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:484
+msgid "Alternatively, you can display a single register value by e.g."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:488
+#, no-wrap
+msgid " p $eax\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:491
+msgid "and modify it by:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:495
+#, no-wrap
+msgid " set $eax new-value\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:498
+msgid "Should you need to call some kernel functions from DDB, simply say:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:502
+#, no-wrap
+msgid " call func(arg1, arg2, ...)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:505
+msgid "The return value will be printed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:507
+msgid "For a man:ps[1] style summary of all running processes, use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:511
+#, no-wrap
+msgid " ps\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:516
+msgid ""
+"Now you have examined why your kernel failed, and you wish to reboot. "
+"Remember that, depending on the severity of previous malfunctioning, not all "
+"parts of the kernel might still be working as expected. Perform one of the "
+"following actions to shut down and reboot your system:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:520
+#, no-wrap
+msgid " panic\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:523
+msgid ""
+"This will cause your kernel to dump core and reboot, so you can later "
+"analyze the core on a higher level with man:kgdb[1]."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:527
+#, no-wrap
+msgid " call boot(0)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:531
+msgid ""
+"Might be a good way to cleanly shut down the running system, `sync()` all "
+"disks, and finally, in some cases, reboot. As long as the disk and "
+"filesystem interfaces of the kernel are not damaged, this could be a good "
+"way for an almost clean shutdown."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:535
+#, no-wrap
+msgid " reset\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:538
+msgid ""
+"This is the final way out of disaster and almost the same as hitting the Big "
+"Red Button."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:540
+msgid "If you need a short command summary, simply type:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:544
+#, no-wrap
+msgid " help\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:548
+msgid ""
+"It is highly recommended to have a printed copy of the man:ddb[4] manual "
+"page ready for a debugging session. Remember that it is hard to read the on-"
+"line manual while single-stepping the kernel."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:550
+#, no-wrap
+msgid "On-Line Kernel Debugging Using Remote GDB"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:554
+msgid ""
+"The FreeBSD kernel provides a second KDB backend for on-line debugging: man:"
+"gdb[4]. This feature has been supported since FreeBSD 2.2, and it is "
+"actually a very neat one."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:560
+msgid ""
+"GDB has supported _remote debugging_ for a long time. This is done using a "
+"very simple protocol along a serial line. Unlike the other debugging "
+"methods described above, you will need two machines for doing this. One is "
+"the host providing the debugging environment, including all the sources, and "
+"a copy of the kernel binary with all the symbols in it. The other is the "
+"target machine that runs a copy of the very same kernel (optionally stripped "
+"of the debugging information)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:562
+msgid ""
+"In order to use remote GDB, ensure that the following options are present in "
+"your kernel configuration:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:567
+#, no-wrap
+msgid ""
+"makeoptions DEBUG=-g\n"
+"options KDB\n"
+"options GDB\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:570
+msgid ""
+"Note that the `GDB` option is turned off by default in `GENERIC` kernels on -"
+"STABLE and -RELEASE branches, but enabled on -CURRENT."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:574
+msgid ""
+"Once built, copy the kernel to the target machine, and boot it. Connect the "
+"serial line of the target machine that has \"flags 080\" set on its uart "
+"device to any serial line of the debugging host. See man:uart[4] for "
+"information on how to set the flags on a uart device."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:577
+msgid ""
+"The target machine must be made to enter the GDB backend, either due to a "
+"panic or by taking a purposeful trap into the debugger. Before doing this, "
+"select the GDB debugger backend:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:581
+#, no-wrap
+msgid ""
+"# sysctl debug.kdb.current=gdb\n"
+"debug.kdb.current: ddb -> gdb\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:588
+msgid ""
+"The supported backends can be listed by the `debug.kdb.available` sysctl. "
+"If the kernel configuration includes `options DDB`, then man:ddb[4] will be "
+"selected by default. If `gdb` does not appear in the list of available "
+"backends, then the debug serial port may not have been configured correctly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:591
+msgid "Then, force entry to the debugger:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:595
+#, no-wrap
+msgid ""
+"# sysctl debug.kdb.enter=1\n"
+"debug.kdb.enter: 0KDB: enter: sysctl debug.kdb.enter\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:599
+msgid ""
+"The target machine now awaits connection from a remote GDB client. On the "
+"debugging machine, go to the compile directory of the target kernel, and "
+"start `gdb`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:610
+#, no-wrap
+msgid ""
+"# cd /usr/obj/usr/src/amd64.amd64/sys/GENERIC/\n"
+"# kgdb kernel\n"
+"GNU gdb (GDB) 10.2 [GDB v10.2 for FreeBSD]\n"
+"Copyright (C) 2021 Free Software Foundation, Inc.\n"
+"...\n"
+"Reading symbols from kernel...\n"
+"Reading symbols from /usr/obj/usr/src/amd64.amd64/sys/GENERIC/kernel.debug...\n"
+"(kgdb)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:613
+msgid ""
+"Initialize the remote debugging session (assuming the first serial port is "
+"being used) by:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:617
+#, no-wrap
+msgid "(kgdb) target remote /dev/cuau0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:620
+msgid "Your hosting GDB will now gain control over the target kernel:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:627
+#, no-wrap
+msgid ""
+"Remote debugging using /dev/cuau0\n"
+"kdb_enter (why=<optimized out>, msg=<optimized out>) at /usr/src/sys/kern/subr_kdb.c:506\n"
+"506 kdb_why = KDB_WHY_UNSET;\n"
+"(kgdb)\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:635
+msgid ""
+"Depending on the compiler used, some local variables may appear as "
+"`<optimized out>`, preventing them from being inspected directly by `gdb`. "
+"If this causes problems while debugging, it is possible to build the kernel "
+"at a decreased optimization level, which may improve the visibility of some "
+"variables. This can be done by passing `COPTFLAGS=-O1` to man:make[1]. "
+"However, certain classes of kernel bugs may manifest differently (or not at "
+"all) when the optimization level is changed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:639
+msgid ""
+"You can use this session almost as any other GDB session, including full "
+"access to the source, running it in gud-mode inside an Emacs window (which "
+"gives you an automatic source code display in another Emacs window), etc."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:641
+#, no-wrap
+msgid "Debugging a Console Driver"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:647
+msgid ""
+"Since you need a console driver to run DDB on, things are more complicated "
+"if the console driver itself is failing. You might remember the use of a "
+"serial console (either with modified boot blocks, or by specifying `-h` at "
+"the `Boot:` prompt), and hook up a standard terminal onto your first serial "
+"port. DDB works on any configured console driver, including a serial "
+"console."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:649
+#, no-wrap
+msgid "Debugging Deadlocks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:654
+msgid ""
+"You may experience so called deadlocks, a situation where a system stops "
+"doing useful work. To provide a helpful bug report in this situation, use "
+"man:ddb[4] as described in the previous section. Include the output of `ps` "
+"and `trace` for suspected processes in the report."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:658
+msgid ""
+"If possible, consider doing further investigation. The recipe below is "
+"especially useful if you suspect that a deadlock occurs in the VFS layer. "
+"Add these options to the kernel configuration file."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:669
+#, no-wrap
+msgid ""
+"makeoptions \tDEBUG=-g\n"
+"options \tINVARIANTS\n"
+"options \tINVARIANT_SUPPORT\n"
+"options \tWITNESS\n"
+"options \tWITNESS_SKIPSPIN\n"
+"options \tDEBUG_LOCKS\n"
+"options \tDEBUG_VFS_LOCKS\n"
+"options \tDIAGNOSTIC\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:672
+msgid ""
+"When a deadlock occurs, in addition to the output of the `ps` command, "
+"provide information from the `show pcpu`, `show allpcpu`, `show locks`, "
+"`show alllocks`, `show lockedvnods` and `alltrace`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:674
+msgid ""
+"To obtain meaningful backtraces for threaded processes, use `thread thread-"
+"id` to switch to the thread stack, and do a backtrace with `where`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:676
+#, no-wrap
+msgid "Kernel debugging with Dcons"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:682
+msgid ""
+"man:dcons[4] is a very simple console driver that is not directly connected "
+"with any physical devices. It just reads and writes characters from and to "
+"a buffer in a kernel or loader. Due to its simple nature, it is very useful "
+"for kernel debugging, especially with a FireWire(R) device. Currently, "
+"FreeBSD provides two ways to interact with the buffer from outside of the "
+"kernel using man:dconschat[8]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:683
+#, no-wrap
+msgid "Dcons over FireWire(R)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:691
+msgid ""
+"Most FireWire(R) (IEEE1394) host controllers are based on the OHCI "
+"specification that supports physical access to the host memory. This means "
+"that once the host controller is initialized, we can access the host memory "
+"without the help of software (kernel). We can exploit this facility for "
+"interaction with man:dcons[4]. man:dcons[4] provides similar functionality "
+"as a serial console. It emulates two serial ports, one for the console and "
+"DDB, the other for GDB. Since remote memory access is fully handled by the "
+"hardware, the man:dcons[4] buffer is accessible even when the system crashes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:694
+msgid ""
+"FireWire(R) devices are not limited to those integrated into motherboards. "
+"PCI cards exist for desktops, and a cardbus interface can be purchased for "
+"laptops."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:695
+#, no-wrap
+msgid "Enabling FireWire(R) and Dcons support on the target machine"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:698
+msgid ""
+"To enable FireWire(R) and Dcons support in the kernel of the _target "
+"machine_:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:700
+msgid ""
+"Make sure your kernel supports `dcons`, `dcons_crom` and `firewire`. `Dcons` "
+"should be statically linked with the kernel. For `dcons_crom` and "
+"`firewire`, modules should be OK."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:701
+msgid ""
+"Make sure physical DMA is enabled. You may need to add `hw.firewire."
+"phydma_enable=1` to [.filename]#/boot/loader.conf#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:702
+msgid "Add options for debugging."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:703
+msgid ""
+"Add `dcons_gdb=1` in [.filename]#/boot/loader.conf# if you use GDB over "
+"FireWire(R)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:704
+msgid "Enable `dcons` in [.filename]#/etc/ttys#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:705
+msgid ""
+"Optionally, to force `dcons` to be the high-level console, add `hw.firewire."
+"dcons_crom.force_console=1` to [.filename]#loader.conf#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:707
+msgid ""
+"To enable FireWire(R) and Dcons support in man:loader[8] on i386 or amd64:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:709
+msgid ""
+"Add `LOADER_FIREWIRE_SUPPORT=YES` in [.filename]#/etc/make.conf# and rebuild "
+"man:loader[8]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:713
+#, no-wrap
+msgid "# cd /sys/boot/i386 && make clean && make && make install\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:716
+msgid ""
+"To enable man:dcons[4] as an active low-level console, add `boot_multicons="
+"\"YES\"` to [.filename]#/boot/loader.conf#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:719
+msgid ""
+"Here are a few configuration examples. A sample kernel configuration file "
+"would contain:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:728
+#, no-wrap
+msgid ""
+"device dcons\n"
+"device dcons_crom\n"
+"options KDB\n"
+"options DDB\n"
+"options GDB\n"
+"options ALT_BREAK_TO_DEBUGGER\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:731
+msgid "And a sample [.filename]#/boot/loader.conf# would contain:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:739
+#, no-wrap
+msgid ""
+"dcons_crom_load=\"YES\"\n"
+"dcons_gdb=1\n"
+"boot_multicons=\"YES\"\n"
+"hw.firewire.phydma_enable=1\n"
+"hw.firewire.dcons_crom.force_console=1\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:741
+#, no-wrap
+msgid "Enabling FireWire(R) and Dcons support on the host machine"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:744
+msgid "To enable FireWire(R) support in the kernel on the _host machine_:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:748
+#, no-wrap
+msgid "# kldload firewire\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:751
+msgid ""
+"Find out the EUI64 (the unique 64 bit identifier) of the FireWire(R) host "
+"controller, and use man:fwcontrol[8] or `dmesg` to find the EUI64 of the "
+"target machine."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:753
+msgid "Run man:dconschat[8], with:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:757
+#, no-wrap
+msgid "# dconschat -e \\# -br -G 12345 -t 00-11-22-33-44-55-66-77\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:760
+msgid ""
+"The following key combinations can be used once man:dconschat[8] is running:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:766
+#, no-wrap
+msgid "kbd:[~+.]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:768
+#, no-wrap
+msgid "Disconnect"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:769
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:772
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:775
+#, no-wrap
+msgid "kbd:[~]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:771
+#, no-wrap
+msgid "ALT BREAK"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:774
+#, no-wrap
+msgid "RESET target"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:776
+#, no-wrap
+msgid "Suspend dconschat"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:779
+msgid ""
+"Attach remote GDB by starting man:kgdb[1] with a remote debugging session:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:783
+#, no-wrap
+msgid " kgdb -r :12345 kernel\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:785
+#, no-wrap
+msgid "Some general tips"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:788
+msgid "Here are some general tips:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:790
+msgid ""
+"To take full advantage of the speed of FireWire(R), disable other slow "
+"console drivers:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:795
+#, no-wrap
+msgid ""
+"# conscontrol delete ttyd0\t # serial console\n"
+"# conscontrol delete consolectl\t# video/keyboard\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:798
+msgid ""
+"There exists a GDB mode for man:emacs[1]; this is what you will need to add "
+"to your [.filename]#.emacs#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:805
+#, no-wrap
+msgid ""
+"(setq gud-gdba-command-name \"kgdb -a -a -a -r :12345\")\n"
+"(setq gdb-many-windows t)\n"
+"(xterm-mouse-mode 1)\n"
+"M-x gdba\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:808
+msgid "And for DDD ([.filename]#devel/ddd#):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:815
+#, no-wrap
+msgid ""
+"# remote serial protocol\n"
+"LANG=C ddd --debugger kgdb -r :12345 kernel\n"
+"# live core debug\n"
+"LANG=C ddd --debugger kgdb kernel /dev/fwmem0.2\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:817
+#, no-wrap
+msgid "Dcons with KVM"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:821
+msgid ""
+"We can directly read the man:dcons[4] buffer via [.filename]#/dev/mem# for "
+"live systems, and in the core dump for crashed systems. These give you "
+"similar output to `dmesg -a`, but the man:dcons[4] buffer includes more "
+"information."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:822
+#, no-wrap
+msgid "Using Dcons with KVM"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:825
+msgid "To use man:dcons[4] with KVM:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:827
+msgid "Dump a man:dcons[4] buffer of a live system:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:831
+#, no-wrap
+msgid "# dconschat -1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:834
+msgid "Dump a man:dcons[4] buffer of a crash dump:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:838
+#, no-wrap
+msgid "# dconschat -1 -M vmcore.XX\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:841
+msgid "Live core debugging can be done via:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:846
+#, no-wrap
+msgid ""
+"# fwcontrol -m target_eui64\n"
+"# kgdb kernel /dev/fwmem0.2\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:849
+#, no-wrap
+msgid "Glossary of Kernel Options for Debugging"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:852
+msgid ""
+"This section provides a brief glossary of compile-time kernel options used "
+"for debugging:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:854
+msgid ""
+"`options KDB`: compiles in the kernel debugger framework. Required for "
+"`options DDB` and `options GDB`. Little or no performance overhead. By "
+"default, the debugger will be entered on panic instead of an automatic "
+"reboot."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:855
+msgid ""
+"`options KDB_UNATTENDED`: change the default value of the `debug."
+"debugger_on_panic` sysctl to 0, which controls whether the debugger is "
+"entered on panic. When `options KDB` is not compiled into the kernel, the "
+"behavior is to automatically reboot on panic; when it is compiled into the "
+"kernel, the default behavior is to drop into the debugger unless `options "
+"KDB_UNATTENDED` is compiled in. If you want to leave the kernel debugger "
+"compiled into the kernel but want the system to come back up unless you're "
+"on-hand to use the debugger for diagnostics, use this option."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:856
+msgid ""
+"`options KDB_TRACE`: change the default value of the `debug.trace_on_panic` "
+"sysctl to 1, which controls whether the debugger automatically prints a "
+"stack trace on panic. Especially if running with `options KDB_UNATTENDED`, "
+"this can be helpful to gather basic debugging information on the serial or "
+"firewire console while still rebooting to recover."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:857
+msgid ""
+"`options DDB`: compile in support for the console debugger, DDB. This "
+"interactive debugger runs on whatever the active low-level console of the "
+"system is, which includes the video console, serial console, or firewire "
+"console. It provides basic integrated debugging facilities, such as stack "
+"tracing, process and thread listing, dumping of lock state, VM state, file "
+"system state, and kernel memory management. DDB does not require software "
+"running on a second machine or being able to generate a core dump or full "
+"debugging kernel symbols, and provides detailed diagnostics of the kernel at "
+"run-time. Many bugs can be fully diagnosed using only DDB output. This "
+"option depends on `options KDB`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:858
+msgid ""
+"`options GDB`: compile in support for the remote debugger, GDB, which can "
+"operate over serial cable or firewire. When the debugger is entered, GDB may "
+"be attached to inspect structure contents, generate stack traces, etc. Some "
+"kernel state is more awkward to access than in DDB, which is able to "
+"generate useful summaries of kernel state automatically, such as "
+"automatically walking lock debugging or kernel memory management structures, "
+"and a second machine running the debugger is required. On the other hand, "
+"GDB combines information from the kernel source and full debugging symbols, "
+"and is aware of full data structure definitions, local variables, and is "
+"scriptable. This option is not required to run GDB on a kernel core dump. "
+"This option depends on `options KDB`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:859
+msgid ""
+"`options BREAK_TO_DEBUGGER`, `options ALT_BREAK_TO_DEBUGGER`: allow a break "
+"signal or alternative signal on the console to enter the debugger. If the "
+"system hangs without a panic, this is a useful way to reach the debugger. "
+"Due to the current kernel locking, a break signal generated on a serial "
+"console is significantly more reliable at getting into the debugger, and is "
+"generally recommended. This option has little or no performance impact."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:860
+msgid ""
+"`options INVARIANTS`: compile into the kernel a large number of run-time "
+"assertion checks and tests, which constantly test the integrity of kernel "
+"data structures and the invariants of kernel algorithms. These tests can be "
+"expensive, so are not compiled in by default, but help provide useful \"fail "
+"stop\" behavior, in which certain classes of undesired behavior enter the "
+"debugger before kernel data corruption occurs, making them easier to debug. "
+"Tests include memory scrubbing and use-after-free testing, which is one of "
+"the more significant sources of overhead. This option depends on `options "
+"INVARIANT_SUPPORT`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:861
+msgid ""
+"`options INVARIANT_SUPPORT`: many of the tests present in `options "
+"INVARIANTS` require modified data structures or additional kernel symbols to "
+"be defined."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:862
+msgid ""
+"`options WITNESS`: this option enables run-time lock order tracking and "
+"verification, and is an invaluable tool for deadlock diagnosis. WITNESS "
+"maintains a graph of acquired lock orders by lock type, and checks the graph "
+"at each acquire for cycles (implicit or explicit). If a cycle is detected, a "
+"warning and stack trace are generated to the console, indicating that a "
+"potential deadlock might have occurred. WITNESS is required in order to use "
+"the `show locks`, `show witness` and `show alllocks` DDB commands. This "
+"debug option has significant performance overhead, which may be somewhat "
+"mitigated through the use of `options WITNESS_SKIPSPIN`. Detailed "
+"documentation may be found in man:witness[4]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:863
+msgid ""
+"`options WITNESS_SKIPSPIN`: disable run-time checking of spinlock lock order "
+"with WITNESS. As spin locks are acquired most frequently in the scheduler, "
+"and scheduler events occur often, this option can significantly speed up "
+"systems running with WITNESS. This option depends on `options WITNESS`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:864
+msgid ""
+"`options WITNESS_KDB`: change the default value of the `debug.witness.kdb` "
+"sysctl to 1, which causes WITNESS to enter the debugger when a lock order "
+"violation is detected, rather than simply printing a warning. This option "
+"depends on `options WITNESS`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:865
+msgid ""
+"`options SOCKBUF_DEBUG`: perform extensive run-time consistency checking on "
+"socket buffers, which can be useful for debugging both socket bugs and race "
+"conditions in protocols and device drivers that interact with sockets. This "
+"option significantly impacts network performance, and may change the timing "
+"in device driver races."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:866
+msgid ""
+"`options DEBUG_VFS_LOCKS`: track lock acquisition points for lockmgr/vnode "
+"locks, expanding the amount of information displayed by `show lockedvnods` "
+"in DDB. This option has a measurable performance impact."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:867
+msgid ""
+"`options DEBUG_MEMGUARD`: a replacement for the man:malloc[9] kernel memory "
+"allocator that uses the VM system to detect reads or writes from allocated "
+"memory after free. Details may be found in man:memguard[9]. This option has "
+"a significant performance impact, but can be very helpful in debugging "
+"kernel memory corruption bugs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:868
+msgid ""
+"`options DIAGNOSTIC`: enable additional, more expensive diagnostic tests "
+"along the lines of `options INVARIANTS`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:869
+msgid ""
+"`options KASAN`: enable the Kernel Address Sanitizer. This enables compiler "
+"instrumentation which can be used to detect invalid memory accesses in the "
+"kernel, such as use-after-frees and buffer overflows. This largely "
+"supersedes `options DEBUG_MEMGUARD`. See man:kasan[9] for details, and for "
+"the currently supported platforms."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:869
+msgid ""
+"`options KMSAN`: enable the Kernel Memory Sanitizer. This enables compiler "
+"instrumentation which can be used to detect uses of uninitialized memory. "
+"See man:kmsan[9] for details, and for the currently supported platforms."
+msgstr ""
diff --git a/documentation/content/en/books/developers-handbook/l10n/_index.adoc b/documentation/content/en/books/developers-handbook/l10n/_index.adoc
index 1cb5226179..de7e83b655 100644
--- a/documentation/content/en/books/developers-handbook/l10n/_index.adoc
+++ b/documentation/content/en/books/developers-handbook/l10n/_index.adoc
@@ -7,7 +7,7 @@ description: Localization and Internationalization - L10N and I18N in FreeBSD
tags: ["L10N", "I18N", "Localization", "Internationalization", "FreeBSD"]
showBookMenu: true
weight: 5
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/l10n/"
---
[[l10n]]
diff --git a/documentation/content/en/books/developers-handbook/l10n/_index.po b/documentation/content/en/books/developers-handbook/l10n/_index.po
new file mode 100644
index 0000000000..92fe40e244
--- /dev/null
+++ b/documentation/content/en/books/developers-handbook/l10n/_index.po
@@ -0,0 +1,487 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:1
+#, no-wrap
+msgid "Localization and Internationalization - L10N and I18N in FreeBSD"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:1
+#, no-wrap
+msgid "Chapter 4. Localization and Internationalization - L10N and I18N"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:14
+#, no-wrap
+msgid "Localization and Internationalization - L10N and I18N"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:52
+#, no-wrap
+msgid "Programming I18N Compliant Applications"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:59
+msgid ""
+"To make your application more useful for speakers of other languages, we "
+"hope that you will program I18N compliant. The GNU gcc compiler and GUI "
+"libraries like QT and GTK support I18N through special handling of strings. "
+"Making a program I18N compliant is very easy. It allows contributors to "
+"port your application to other languages quickly. Refer to the library "
+"specific I18N documentation for more details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:63
+msgid ""
+"In contrast with common perception, I18N compliant code is easy to write. "
+"Usually, it only involves wrapping your strings with library specific "
+"functions. In addition, please be sure to allow for wide or multibyte "
+"character support."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:64
+#, no-wrap
+msgid "A Call to Unify the I18N Effort"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:69
+msgid ""
+"It has come to our attention that the individual I18N/L10N efforts for each "
+"country has been repeating each others' efforts. Many of us have been "
+"reinventing the wheel repeatedly and inefficiently. We hope that the "
+"various major groups in I18N could congregate into a group effort similar to "
+"the Core Team's responsibility."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:72
+msgid ""
+"Currently, we hope that, when you write or port I18N programs, you would "
+"send it out to each country's related FreeBSD mailing list for testing. In "
+"the future, we hope to create applications that work in all the languages "
+"out-of-the-box without dirty hacks."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:75
+msgid ""
+"The {freebsd-i18n} has been established. If you are an I18N/L10N developer, "
+"please send your comments, ideas, questions, and anything you deem related "
+"to it."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:76
+#, no-wrap
+msgid "Perl and Python"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:80
+msgid ""
+"Perl and Python have I18N and wide character handling libraries. Please use "
+"them for I18N compliance."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:82
+#, no-wrap
+msgid "Localized Messages with POSIX.1 Native Language Support (NLS)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:86
+msgid ""
+"Beyond the basic I18N functions, like supporting various input encodings or "
+"supporting national conventions, such as the different decimal separators, "
+"at a higher level of I18N, it is possible to localize the messages written "
+"to the output by the various programs. A common way of doing this is using "
+"the POSIX.1 NLS functions, which are provided as a part of the FreeBSD base "
+"system."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:88
+#, no-wrap
+msgid "Organizing Localized Messages into Catalog Files"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:94
+msgid ""
+"POSIX.1 NLS is based on catalog files, which contain the localized messages "
+"in the desired encoding. The messages are organized into sets and each "
+"message is identified by an integer number in the containing set. The "
+"catalog files are conventionally named after the locale they contain "
+"localized messages for, followed by the `.msg` extension. For instance, the "
+"Hungarian messages for ISO8859-2 encoding should be stored in a file called "
+"[.filename]#hu_HU.ISO8859-2#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:99
+msgid ""
+"These catalog files are common text files that contain the numbered "
+"messages. It is possible to write comments by starting the line with a `$` "
+"sign. Set boundaries are also separated by special comments, where the "
+"keyword `set` must directly follow the `$` sign. The `set` keyword is then "
+"followed by the set number. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:103
+#, no-wrap
+msgid "$set 1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:107
+msgid ""
+"The actual message entries start with the message number and followed by the "
+"localized message. The well-known modifiers from man:printf[3] are accepted:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:111
+#, no-wrap
+msgid "15 \"File not found: %s\\n\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:117
+msgid ""
+"The language catalog files have to be compiled into a binary form before "
+"they can be opened from the program. This conversion is done with the man:"
+"gencat[1] utility. Its first argument is the filename of the compiled "
+"catalog and its further arguments are the input catalogs. The localized "
+"messages can also be organized into more catalog files and then all of them "
+"can be processed with man:gencat[1]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:119
+#, no-wrap
+msgid "Using the Catalog Files from the Source Code"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:130
+msgid ""
+"Using the catalog files is simple. To use the related functions, [."
+"filename]#nl_types.h# must be included. Before using a catalog, it has to "
+"be opened with man:catopen[3]. The function takes two arguments. The first "
+"parameter is the name of the installed and compiled catalog. Usually, the "
+"name of the program is used, such as grep. This name will be used when "
+"looking for the compiled catalog file. The man:catopen[3] call looks for "
+"this file in [.filename]#/usr/share/nls/locale/catname# and in [.filename]#/"
+"usr/local/share/nls/locale/catname#, where `locale` is the locale set and "
+"`catname` is the catalog name being discussed. The second parameter is a "
+"constant, which can have two values:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:132
+msgid ""
+"`NL_CAT_LOCALE`, which means that the used catalog file will be based on "
+"`LC_MESSAGES`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:133
+msgid "`0`, which means that `LANG` has to be used to open the proper catalog."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:136
+msgid ""
+"The man:catopen[3] call returns a catalog identifier of type `nl_catd`. "
+"Please refer to the manual page for a list of possible returned error codes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:139
+msgid ""
+"After opening a catalog man:catgets[3] can be used to retrieve a message. "
+"The first parameter is the catalog identifier returned by man:catopen[3], "
+"the second one is the number of the set, the third one is the number of the "
+"messages, and the fourth one is a fallback message, which will be returned "
+"if the requested message cannot be retrieved from the catalog file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:141
+msgid ""
+"After using the catalog file, it must be closed by calling man:catclose[3], "
+"which has one argument, the catalog id."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:143
+#, no-wrap
+msgid "A Practical Example"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:146
+msgid ""
+"The following example will demonstrate an easy solution on how to use NLS "
+"catalogs in a flexible way."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:148
+msgid ""
+"The below lines need to be put into a common header file of the program, "
+"which is included into all source files where localized messages are "
+"necessary:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:155
+#, no-wrap
+msgid ""
+"#ifdef WITHOUT_NLS\n"
+"#define getstr(n)\t nlsstr[n]\n"
+"#else\n"
+"#include nl_types.h\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:159
+#, no-wrap
+msgid ""
+"extern nl_catd\t\t catalog;\n"
+"#define getstr(n)\t catgets(catalog, 1, n, nlsstr[n])\n"
+"#endif\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:161
+#, no-wrap
+msgid "extern char\t\t*nlsstr[];\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:164
+msgid ""
+"Next, put these lines into the global declaration part of the main source "
+"file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:171
+#, no-wrap
+msgid ""
+"#ifndef WITHOUT_NLS\n"
+"#include nl_types.h\n"
+"nl_catd\t catalog;\n"
+"#endif\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:181
+#, no-wrap
+msgid ""
+"/*\n"
+" * Default messages to use when NLS is disabled or no catalog\n"
+" * is found.\n"
+" */\n"
+"char *nlsstr[] = {\n"
+" \"\",\n"
+"/* 1*/ \"some random message\",\n"
+"/* 2*/ \"some other message\"\n"
+"};\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:184
+msgid ""
+"Next come the real code snippets, which open, read, and close the catalog:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:190
+#, no-wrap
+msgid ""
+"#ifndef WITHOUT_NLS\n"
+"\tcatalog = catopen(\"myapp\", NL_CAT_LOCALE);\n"
+"#endif\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:192
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:196
+#, no-wrap
+msgid "...\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:194
+#, no-wrap
+msgid "printf(getstr(1));\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:200
+#, no-wrap
+msgid ""
+"#ifndef WITHOUT_NLS\n"
+"\tcatclose(catalog);\n"
+"#endif\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:202
+#, no-wrap
+msgid "Reducing Strings to Localize"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:206
+msgid ""
+"There is a good way of reducing the strings that need to be localized by "
+"using libc error messages. This is also useful to just avoid duplication "
+"and provide consistent error messages for the common errors that can be "
+"encountered by a great many of programs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:208
+msgid "First, here is an example that does not use libc error messages:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:215
+#, no-wrap
+msgid ""
+"#include err.h\n"
+"...\n"
+"if (!S_ISDIR(st.st_mode))\n"
+"\terrx(1, \"argument is not a directory\");\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:218
+msgid ""
+"This can be transformed to print an error message by reading `errno` and "
+"printing an error message accordingly:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:228
+#, no-wrap
+msgid ""
+"#include err.h\n"
+"#include errno.h\n"
+"...\n"
+"if (!S_ISDIR(st.st_mode)) {\n"
+"\terrno = ENOTDIR;\n"
+"\terr(1, NULL);\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:233
+msgid ""
+"In this example, the custom string is eliminated, thus translators will have "
+"less work when localizing the program and users will see the usual \"Not a "
+"directory\" error message when they encounter this error. This message will "
+"probably seem more familiar to them. Please note that it was necessary to "
+"include [.filename]#errno.h# in order to directly access `errno`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:235
+msgid ""
+"It is worth to note that there are cases when `errno` is set automatically "
+"by a preceding call, so it is not necessary to set it explicitly:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:242
+#, no-wrap
+msgid ""
+"#include err.h\n"
+"...\n"
+"if ((p = malloc(size)) == NULL)\n"
+"\terr(1, NULL);\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:245
+#, no-wrap
+msgid "Making use of [.filename]#bsd.nls.mk#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:250
+msgid ""
+"Using the catalog files requires few repeatable steps, such as compiling the "
+"catalogs and installing them to the proper location. In order to simplify "
+"this process even more, [.filename]#bsd.nls.mk# introduces some macros. It "
+"is not necessary to include [.filename]#bsd.nls.mk# explicitly, it is pulled "
+"in from the common Makefiles, such as [.filename]#bsd.prog.mk# or [."
+"filename]#bsd.lib.mk#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:254
+msgid ""
+"Usually it is enough to define `NLSNAME`, which should have the catalog name "
+"mentioned as the first argument of man:catopen[3] and list the catalog files "
+"in `NLS` without their `.msg` extension. Here is an example, which makes it "
+"possible to to disable NLS when used with the code examples before. The "
+"`WITHOUT_NLS` man:make[1] variable has to be defined in order to build the "
+"program without NLS support."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:264
+#, no-wrap
+msgid ""
+".if !defined(WITHOUT_NLS)\n"
+"NLS=\tes_ES.ISO8859-1\n"
+"NLS+=\thu_HU.ISO8859-2\n"
+"NLS+=\tpt_BR.ISO8859-1\n"
+".else\n"
+"CFLAGS+=\t-DWITHOUT_NLS\n"
+".endif\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:271
+msgid ""
+"Conventionally, the catalog files are placed under the [.filename]#nls# "
+"subdirectory and this is the default behavior of [.filename]#bsd.nls.mk#. "
+"It is possible, though to override the location of the catalogs with the "
+"`NLSSRCDIR` man:make[1] variable. The default name of the precompiled "
+"catalog files also follow the naming convention mentioned before. It can be "
+"overridden by setting the `NLSNAME` variable. There are other options to "
+"fine tune the processing of the catalog files but usually it is not needed, "
+"thus they are not described here. For further information on [."
+"filename]#bsd.nls.mk#, please refer to the file itself, it is short and easy "
+"to understand."
+msgstr ""
diff --git a/documentation/content/en/books/developers-handbook/parti.adoc b/documentation/content/en/books/developers-handbook/parti.adoc
index c4339b493f..1f36ff7945 100644
--- a/documentation/content/en/books/developers-handbook/parti.adoc
+++ b/documentation/content/en/books/developers-handbook/parti.adoc
@@ -4,7 +4,7 @@ prev: books/developers-handbook
next: books/developers-handbook/introduction
showBookMenu: true
weight: 1
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/parti/"
---
[[basics]]
diff --git a/documentation/content/en/books/developers-handbook/parti.po b/documentation/content/en/books/developers-handbook/parti.po
new file mode 100644
index 0000000000..2633ca0fc2
--- /dev/null
+++ b/documentation/content/en/books/developers-handbook/parti.po
@@ -0,0 +1,29 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-01-08 11:34-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/developers-handbook/parti.adoc:1
+#, no-wrap
+msgid "Part I. Basics"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/developers-handbook/parti.adoc:11
+#, no-wrap
+msgid "Basics"
+msgstr ""
diff --git a/documentation/content/en/books/developers-handbook/partii.adoc b/documentation/content/en/books/developers-handbook/partii.adoc
index 21b05ff266..51ee82ebbe 100644
--- a/documentation/content/en/books/developers-handbook/partii.adoc
+++ b/documentation/content/en/books/developers-handbook/partii.adoc
@@ -4,7 +4,7 @@ prev: books/developers-handbook/testing
next: books/developers-handbook/sockets
showBookMenu: true
weight: 8
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/partii/"
---
[[ipc]]
diff --git a/documentation/content/en/books/developers-handbook/partii.po b/documentation/content/en/books/developers-handbook/partii.po
new file mode 100644
index 0000000000..38000c08ae
--- /dev/null
+++ b/documentation/content/en/books/developers-handbook/partii.po
@@ -0,0 +1,29 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-01-08 11:34-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/developers-handbook/partii.adoc:1
+#, no-wrap
+msgid "Part II. Interprocess Communication"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/developers-handbook/partii.adoc:11
+#, no-wrap
+msgid "Interprocess Communication"
+msgstr ""
diff --git a/documentation/content/en/books/developers-handbook/partiii.adoc b/documentation/content/en/books/developers-handbook/partiii.adoc
index 2af9e4e133..78849f8149 100644
--- a/documentation/content/en/books/developers-handbook/partiii.adoc
+++ b/documentation/content/en/books/developers-handbook/partiii.adoc
@@ -4,7 +4,7 @@ prev: books/developers-handbook/ipv6
next: books/developers-handbook/kernelbuild
showBookMenu: true
weight: 11
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/partiii/"
---
[[kernel]]
diff --git a/documentation/content/en/books/developers-handbook/partiii.po b/documentation/content/en/books/developers-handbook/partiii.po
new file mode 100644
index 0000000000..ae1194a66e
--- /dev/null
+++ b/documentation/content/en/books/developers-handbook/partiii.po
@@ -0,0 +1,29 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-01-08 11:34-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/developers-handbook/partiii.adoc:1
+#, no-wrap
+msgid "Part III. Kernel"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/developers-handbook/partiii.adoc:11
+#, no-wrap
+msgid "Kernel"
+msgstr ""
diff --git a/documentation/content/en/books/developers-handbook/partiv.adoc b/documentation/content/en/books/developers-handbook/partiv.adoc
index a577253ab8..8b2993bf88 100644
--- a/documentation/content/en/books/developers-handbook/partiv.adoc
+++ b/documentation/content/en/books/developers-handbook/partiv.adoc
@@ -4,7 +4,7 @@ prev: books/developers-handbook/kerneldebug
next: books/developers-handbook/x86
showBookMenu: true
weight: 14
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/partiv/"
---
[[architectures]]
diff --git a/documentation/content/en/books/developers-handbook/partiv.po b/documentation/content/en/books/developers-handbook/partiv.po
new file mode 100644
index 0000000000..9731bd3d63
--- /dev/null
+++ b/documentation/content/en/books/developers-handbook/partiv.po
@@ -0,0 +1,29 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-01-08 11:34-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/developers-handbook/partiv.adoc:1
+#, no-wrap
+msgid "Part IV. Architectures"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/developers-handbook/partiv.adoc:11
+#, no-wrap
+msgid "Architectures"
+msgstr ""
diff --git a/documentation/content/en/books/developers-handbook/partv.adoc b/documentation/content/en/books/developers-handbook/partv.adoc
index 8c1d1474e1..4794f4bd89 100644
--- a/documentation/content/en/books/developers-handbook/partv.adoc
+++ b/documentation/content/en/books/developers-handbook/partv.adoc
@@ -4,7 +4,7 @@ prev: books/developers-handbook/x86
next: books/developers-handbook/bibliography
showBookMenu: true
weight: 16
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/partv/"
---
[[appendices]]
diff --git a/documentation/content/en/books/developers-handbook/partv.po b/documentation/content/en/books/developers-handbook/partv.po
new file mode 100644
index 0000000000..c1d910f5c0
--- /dev/null
+++ b/documentation/content/en/books/developers-handbook/partv.po
@@ -0,0 +1,29 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-01-08 11:34-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/developers-handbook/partv.adoc:1
+#, no-wrap
+msgid "Part V. Appendices"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/developers-handbook/partv.adoc:11
+#, no-wrap
+msgid "Appendices"
+msgstr ""
diff --git a/documentation/content/en/books/developers-handbook/policies/_index.adoc b/documentation/content/en/books/developers-handbook/policies/_index.adoc
index 8a82420765..11c72b163b 100644
--- a/documentation/content/en/books/developers-handbook/policies/_index.adoc
+++ b/documentation/content/en/books/developers-handbook/policies/_index.adoc
@@ -9,7 +9,7 @@ description: Source Tree Guidelines and Policies
tags: ["Style Guidelines", "MAINTAINER", "Makefiles", "Contributed Software", "Shared libraries"]
showBookMenu: true
weight: 6
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/policies/"
---
[[policies]]
@@ -87,191 +87,28 @@ The role of the maintainer is as follows:
Some parts of the FreeBSD distribution consist of software that is actively being maintained outside the FreeBSD project.
For historical reasons, we call this _contributed_ software.
-Some examples are sendmail, gcc and patch.
+Some examples are LLVM, man:zlib[3], and man:awk[1].
-Over the last couple of years, various methods have been used in dealing with this type of software and all have some number of advantages and drawbacks.
-No clear winner has emerged.
+The accepted procedure for managing contributed software involves creating a _vendor branch_, where the software can be imported cleanly (without modification) and updates can be tracked in a versioned manner.
+Then, the content of the vendor branch is applied to the source tree, possibly with local modifications.
+FreeBSD-specific build glue is maintained in the source tree, not in the vendor branch.
-Since this is the case, after some debate one of these methods has been selected as the "official" method and will be required for future imports of software of this kind.
-Furthermore, it is strongly suggested that existing contributed software converge on this model over time, as it has significant advantages over the old method, including the ability to easily obtain diffs relative to the "official" versions of the source by everyone (even without direct repository access).
-This will make it significantly easier to return changes to the primary developers of the contributed software.
+Depending on their needs and complexity, individual software projects may deviate from this procedure, at the discretion of the maintainer.
+The exact steps required to update a particular piece of contributed software should be recorded in a file named `FREEBSD-upgrade`;
+for example, link:https://cgit.freebsd.org/src/tree/contrib/libarchive/FREEBSD-upgrade[libarchive's FREEBSD-upgrade file].
-Ultimately, however, it comes down to the people actually doing the work.
-If using this model is particularly unsuited to the package being dealt with, exceptions to these rules may be granted only with the approval of the core team and with the general consensus of the other developers.
-The ability to maintain the package in the future will be a key issue in the decisions.
+Contributed software is usually placed in the [.filepath]#contrib/# subdirectory of the source tree, with some exceptions.
+Contributed software used only by the kernel lives under [.filepath]#sys/contrib/#.
[NOTE]
====
Because it makes it harder to import future versions minor, trivial and/or cosmetic changes are _strongly discouraged_ on files that are still tracking the vendor branch.
====
-[[vendor-import-svn]]
-=== Vendor Imports with SVN
-
-This section describes the vendor import procedure with Subversion in details.
-
-[.procedure]
-. *Preparing the Tree*
-+
-If this is your first import after the switch to SVN, you will have to flatten and clean up the vendor tree, and bootstrap merge history in the main tree.
-If not, you can safely omit this step.
-+
-During the conversion from CVS to SVN, vendor branches were imported with the same layout as the main tree.
-For example, the foo vendor sources ended up in [.filename]#vendor/foo/dist/contrib/foo#, but it is pointless and rather inconvenient.
-What we really want is to have the vendor source directly in [.filename]#vendor/foo/dist#, like this:
-+
-[source,bash]
-....
-% cd vendor/foo/dist/contrib/foo
-% svn move $(svn list) ../..
-% cd ../..
-% svn remove contrib
-% svn propdel -R svn:mergeinfo
-% svn commit
-....
-+
-Note that, the `propdel` bit is necessary because starting with 1.5, Subversion will automatically add `svn:mergeinfo` to any directory you copy or move.
-In this case, you will not need this information, since you are not going to merge anything from the tree you deleted.
-+
-[NOTE]
-====
-You may want to flatten the tags as well.
-The procedure is exactly the same.
-If you do this, put off the commit until the end.
-====
-+
-Check the [.filename]#dist# tree and perform any cleanup that is deemed to be necessary.
-You may want to disable keyword expansion, as it makes no sense on unmodified vendor code.
-In some cases, it can be even be harmful.
-+
-[source,bash]
-....
-% svn propdel svn:keywords -R .
-% svn commit
-....
-+
-Bootstrapping of `svn:mergeinfo` on the target directory (in the main tree) to the revision that corresponds to the last change was made to the vendor tree prior to importing new sources is also needed:
-+
-[source,bash]
-....
-% cd head/contrib/foo
-% svn merge --record-only ^/vendor/foo/dist@12345678 .
-% svn commit
-....
-+
-With some shells, the `^` in the above command may need to be escaped with a backslash.
-. *Importing New Sources*
-+
-Prepare a full, clean tree of the vendor sources.
-With SVN, we can keep a full distribution in the vendor tree without bloating the main tree.
-Import everything but merge only what is needed.
-+
-Note that you will need to add any files that were added since the last vendor import, and remove any that were removed.
-To facilitate this, you should prepare sorted lists of the contents of the vendor tree and of the sources you are about to import:
-+
-[source,bash]
-....
-% cd vendor/foo/dist
-% svn list -R | grep -v '/$' | sort > ../old
-% cd ../foo-9.9
-% find . -type f | cut -c 3- | sort > ../new
-....
-+
-With these two files, the following command will list removed files (files only in [.filename]#old#):
-+
-[source,bash]
-....
-% comm -23 ../old ../new
-....
-+
-While the command below will list added files (files only in [.filename]#new#):
-+
-[source,bash]
-....
-% comm -13 ../old ../new
-....
-+
-Let us put this together:
-+
-[source,bash]
-....
-% cd vendor/foo/foo-9.9
-% tar cf - . | tar xf - -C ../dist
-% cd ../dist
-% comm -23 ../old ../new | xargs svn remove
-% comm -13 ../old ../new | xargs svn add
-....
-+
-[WARNING]
-====
-If there are new directories in the new distribution, the last command will fail.
-You will have to add the directories, and run it again.
-Conversely, if any directories were removed, you will have to remove them manually.
-====
-+
-Check properties on any new files:
-
-** All text files should have `svn:eol-style` set to `native`.
-** All binary files should have `svn:mime-type` set to `application/octet-stream`, unless there is a more appropriate media type.
-** Executable files should have `svn:executable` set to `*`.
-** There should be no other properties on any file in the tree.
-+
-[NOTE]
-====
-You are ready to commit, but you should first check the output of `svn stat` and `svn diff` to make sure everything is in order.
-====
-+
-Once you have committed the new vendor release, you should tag it for future reference.
-The best and quickest way is to do it directly in the repository:
-+
-[source,bash]
-....
-% svn copy ^/vendor/foo/dist svn_base/vendor/foo/9.9
-....
-+
-To get the new tag, you can update your working copy of [.filename]#vendor/foo#.
-+
-[NOTE]
-====
-If you choose to do the copy in the checkout instead, do not forget to remove the generated `svn:mergeinfo` as described above.
-====
+[[vendor-import]]
+=== Vendor Imports
-. *Merging to __-HEAD__*
-+
-After you have prepared your import, it is time to merge.
-Option `--accept=postpone` tells SVN not to handle merge conflicts yet, because they will be taken care of manually:
-+
-[source,bash]
-....
-% cd head/contrib/foo
-% svn update
-% svn merge --accept=postpone ^/vendor/foo/dist
-....
-+
-Resolve any conflicts, and make sure that any files that were added or removed in the vendor tree have been properly added or removed in the main tree. It is always a good idea to check differences against the vendor branch:
-+
-[source,bash]
-....
-% svn diff --no-diff-deleted --old=^/vendor/foo/dist --new=.
-....
-+
-`--no-diff-deleted` tells SVN not to check files that are in the vendor tree but not in the main tree.
-+
-[NOTE]
-====
-With SVN, there is no concept of on or off the vendor branch.
-If a file that previously had local modifications no longer does, just remove any left-over cruft, such as FreeBSD version tags,
-so it no longer shows up in diffs against the vendor tree.
-====
-+
-If any changes are required for the world to build with the new sources, make them now - and test until you are satisfied that everything build and runs correctly.
-. *Commit*
-+
-Now, you are ready to commit.
-Make sure you get everything in one go.
-Ideally, you would have done all steps in a clean tree, in which case you can just commit from the top of that tree.
-That is the best way to avoid surprises.
-If you do it properly, the tree will move atomically from a consistent state with the old code to a consistent state with the new code.
+The standard process for managing contributed software and vendor branches is described in detail by the extref:{committers-guide}#vendor-import-git[Committer's Guide].
[[policies-encumbered]]
== Encumbered Files
diff --git a/documentation/content/en/books/developers-handbook/policies/_index.po b/documentation/content/en/books/developers-handbook/policies/_index.po
new file mode 100644
index 0000000000..d2a1565eec
--- /dev/null
+++ b/documentation/content/en/books/developers-handbook/policies/_index.po
@@ -0,0 +1,396 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:34-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:1
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:16
+#, no-wrap
+msgid "Source Tree Guidelines and Policies"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:1
+#, no-wrap
+msgid "Chapter 5. Source Tree Guidelines and Policies"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:54
+msgid ""
+"This chapter documents various guidelines and policies in force for the "
+"FreeBSD source tree."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:56
+#, no-wrap
+msgid "Style Guidelines"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:60
+msgid ""
+"Consistent coding style is extremely important, particularly with large "
+"projects like FreeBSD. Code should follow the FreeBSD coding styles "
+"described in man:style[9] and man:style.Makefile[5]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:62
+#, no-wrap
+msgid "`MAINTAINER` on Makefiles"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:66
+msgid ""
+"If a particular portion of the FreeBSD [.filename]#src/# distribution is "
+"being maintained by a person or group of persons, this is communicated "
+"through an entry in [.filename]#src/MAINTAINERS#. Maintainers of ports "
+"within the Ports Collection express their maintainership to the world by "
+"adding a `MAINTAINER` line to the [.filename]#Makefile# of the port in "
+"question:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:70
+#, no-wrap
+msgid "MAINTAINER= email-addresses\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:77
+msgid ""
+"For other parts of the repository, or for sections not listed as having a "
+"maintainer, or when you are unsure who the active maintainer is, try looking "
+"at the recent commit history of the relevant parts of the source tree. It "
+"is quite often the case that a maintainer is not explicitly named, but the "
+"people who are actively working in a part of the source tree for, say, the "
+"last couple of years are interested in reviewing changes. Even if this is "
+"not specifically mentioned in the documentation or the source itself, asking "
+"for a review as a form of courtesy is a very reasonable thing to do."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:80
+msgid "The role of the maintainer is as follows:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:82
+msgid ""
+"The maintainer owns and is responsible for that code. This means that he or "
+"she is responsible for fixing bugs and answering problem reports pertaining "
+"to that piece of the code, and in the case of contributed software, for "
+"tracking new versions, as appropriate."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:83
+msgid ""
+"Changes to directories which have a maintainer defined shall be sent to the "
+"maintainer for review before being committed. Only if the maintainer does "
+"not respond for an unacceptable period of time, to several emails, will it "
+"be acceptable to commit changes without review by the maintainer. However, "
+"it is suggested that you try to have the changes reviewed by someone else if "
+"at all possible."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:84
+msgid ""
+"It is of course not acceptable to add a person or group as maintainer unless "
+"they agree to assume this duty. On the other hand it does not have to be a "
+"committer and it can easily be a group of people."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:86
+#, no-wrap
+msgid "Contributed Software"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:91
+msgid ""
+"Some parts of the FreeBSD distribution consist of software that is actively "
+"being maintained outside the FreeBSD project. For historical reasons, we "
+"call this _contributed_ software. Some examples are LLVM, man:zlib[3], and "
+"man:awk[1]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:95
+msgid ""
+"The accepted procedure for managing contributed software involves creating a "
+"_vendor branch_, where the software can be imported cleanly (without "
+"modification) and updates can be tracked in a versioned manner. Then, the "
+"content of the vendor branch is applied to the source tree, possibly with "
+"local modifications. FreeBSD-specific build glue is maintained in the "
+"source tree, not in the vendor branch."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:99
+msgid ""
+"Depending on their needs and complexity, individual software projects may "
+"deviate from this procedure, at the discretion of the maintainer. The exact "
+"steps required to update a particular piece of contributed software should "
+"be recorded in a file named `FREEBSD-upgrade`; for example, link:https://"
+"cgit.freebsd.org/src/tree/contrib/libarchive/FREEBSD-upgrade[libarchive's "
+"FREEBSD-upgrade file]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:102
+msgid ""
+"Contributed software is usually placed in the [.filepath]#contrib/# "
+"subdirectory of the source tree, with some exceptions. Contributed software "
+"used only by the kernel lives under [.filepath]#sys/contrib/#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:106
+msgid ""
+"Because it makes it harder to import future versions minor, trivial and/or "
+"cosmetic changes are _strongly discouraged_ on files that are still tracking "
+"the vendor branch."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:109
+#, no-wrap
+msgid "Vendor Imports"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:112
+msgid ""
+"The standard process for managing contributed software and vendor branches "
+"is described in detail by the extref:{committers-guide}#vendor-import-"
+"git[Committer's Guide]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:114
+#, no-wrap
+msgid "Encumbered Files"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:120
+msgid ""
+"It might occasionally be necessary to include an encumbered file in the "
+"FreeBSD source tree. For example, if a device requires a small piece of "
+"binary code to be loaded to it before the device will operate, and we do not "
+"have the source to that code, then the binary file is said to be "
+"encumbered. The following policies apply to including encumbered files in "
+"the FreeBSD source tree."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:122
+msgid ""
+"Any file which is interpreted or executed by the system CPU(s) and not in "
+"source format is encumbered."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:123
+msgid "Any file with a license more restrictive than BSD or GNU is encumbered."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:124
+msgid ""
+"A file which contains downloadable binary data for use by the hardware is "
+"not encumbered, unless (1) or (2) apply to it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:125
+msgid ""
+"Any encumbered file requires specific approval from the link:https://www."
+"FreeBSD.org/administration/#t-core[Core Team] before it is added to the "
+"repository."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:126
+msgid ""
+"Encumbered files go in [.filename]#src/contrib# or [.filename]#src/sys/"
+"contrib#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:127
+msgid ""
+"The entire module should be kept together. There is no point in splitting "
+"it, unless there is code-sharing with non-encumbered code."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:129
+msgid ""
+"In the past binary files were typically uuencoded, and named [."
+"filename]#arch/filename.o.uu#. This is no longer necessary, and binary "
+"files may be added to the repository unchanged."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:130
+msgid "Kernel files:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:131
+msgid ""
+"Should always be referenced in [.filename]#conf/files.*# (for build "
+"simplicity)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:132
+msgid ""
+"Should always be in [.filename]#LINT#, but the link:https://www.FreeBSD.org/"
+"administration/#t-core[Core Team] decides per case if it should be commented "
+"out or not. The link:https://www.FreeBSD.org/administration/#t-core[Core "
+"Team] can, of course, change their minds later on."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:133
+msgid "The _Release Engineer_ decides whether or not it goes into the release."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:135
+msgid "User-land files:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:136
+msgid ""
+"The link:https://www.FreeBSD.org/administration/#t-core[Core team] decides "
+"if the code should be part of `make world`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:137
+msgid ""
+"The link:https://www.FreeBSD.org/administration/#t-re[Release Engineering] "
+"decides if it goes into the release."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:139
+#, no-wrap
+msgid "Shared Libraries"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:143
+msgid ""
+"If you are adding shared library support to a port or other piece of "
+"software that does not have one, the version numbers should follow these "
+"rules. Generally, the resulting numbers will have nothing to do with the "
+"release version of the software."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:145
+msgid "For ports:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:147
+msgid "Prefer using the number already selected by upstream"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:148
+msgid "If upstream provides symbol versioning, ensure that we use their script"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:150
+msgid "For the base system:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:152
+msgid "Start library version from 1"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:153
+msgid "It is strongly recommended to add symbol versioning to the new library"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:154
+msgid ""
+"If there is an incompatible change, handle it with symbol versioning, "
+"maintaining backward ABI compatibility"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:155
+msgid ""
+"If this is impossible, or the library does not use symbol versioning, bump "
+"the library version"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:156
+msgid ""
+"Before even considering bumping library version for symbol-versioned "
+"library, consult with Release Engineering team, providing reasons why the "
+"change is so important that it should be allowed despite breaking the ABI"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:158
+msgid ""
+"For instance, added functions and bugfixes not changing the interfaces are "
+"fine, while deleted functions, changed function call syntax, etc. should "
+"either provide backward-compat symbols, or will force the major version "
+"number to change."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:160
+msgid ""
+"It is the duty of the committer making the change to handle library "
+"versioning."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/policies/_index.adoc:165
+msgid ""
+"The ELF dynamic linker matches library names literally. There is a popular "
+"convention where library version is written in the form `libexample.so.x.y`, "
+"where x is the major version, and y is minor. Common practice is to set the "
+"library' soname (`DT_SONAME` ELF tag) to `libexample.so.x`, and set up "
+"symlinks `libexample.so.x->libexample.so.x.y`, `libexample.so->libexample.so."
+"x` on library installation for the latest minor version y. Then, since the "
+"static linker searches for `libexample.so` when the `-lexample` command line "
+"option is specified, objects linked with libexample get a dependency on the "
+"right library. Almost all popular build systems use this scheme "
+"automatically."
+msgstr ""
diff --git a/documentation/content/en/books/developers-handbook/secure/_index.adoc b/documentation/content/en/books/developers-handbook/secure/_index.adoc
index 8450244ebb..b320e0fad0 100644
--- a/documentation/content/en/books/developers-handbook/secure/_index.adoc
+++ b/documentation/content/en/books/developers-handbook/secure/_index.adoc
@@ -8,7 +8,7 @@ description: Secure Programming in FreeBSD
tags: ["secure programming", "Buffer Overflows", "SetUID issues"]
showBookMenu: true
weight: 4
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/secure/"
---
[[secure]]
diff --git a/documentation/content/en/books/developers-handbook/secure/_index.po b/documentation/content/en/books/developers-handbook/secure/_index.po
new file mode 100644
index 0000000000..c298451c7b
--- /dev/null
+++ b/documentation/content/en/books/developers-handbook/secure/_index.po
@@ -0,0 +1,624 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 10:28-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:1
+#, no-wrap
+msgid "Secure Programming in FreeBSD"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:1
+#, no-wrap
+msgid "Chapter 3. Secure Programming"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:15
+#, no-wrap
+msgid "Secure Programming"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:53
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:56
+msgid ""
+"This chapter describes some of the security issues that have plagued UNIX(R) "
+"programmers for decades and some of the new tools available to help "
+"programmers avoid writing exploitable code."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:58
+#, no-wrap
+msgid "Secure Design Methodology"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:63
+msgid ""
+"Writing secure applications takes a very scrutinous and pessimistic outlook "
+"on life. Applications should be run with the principle of \"least privilege"
+"\" so that no process is ever running with more than the bare minimum access "
+"that it needs to accomplish its function. Previously tested code should be "
+"reused whenever possible to avoid common mistakes that others may have "
+"already fixed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:67
+msgid ""
+"One of the pitfalls of the UNIX(R) environment is how easy it is to make "
+"assumptions about the sanity of the environment. Applications should never "
+"trust user input (in all its forms), system resources, inter-process "
+"communication, or the timing of events. UNIX(R) processes do not execute "
+"synchronously so logical operations are rarely atomic."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:69
+#, no-wrap
+msgid "Buffer Overflows"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:75
+msgid ""
+"Buffer Overflows have been around since the very beginnings of the von "
+"Neumann crossref:bibliography[cod,1] architecture. They first gained "
+"widespread notoriety in 1988 with the Morris Internet worm. Unfortunately, "
+"the same basic attack remains effective today. By far the most common type "
+"of buffer overflow attack is based on corrupting the stack."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:84
+msgid ""
+"Most modern computer systems use a stack to pass arguments to procedures and "
+"to store local variables. A stack is a last in first out (LIFO) buffer in "
+"the high memory area of a process image. When a program invokes a function "
+"a new \"stack frame\" is created. This stack frame consists of the "
+"arguments passed to the function as well as a dynamic amount of local "
+"variable space. The \"stack pointer\" is a register that holds the current "
+"location of the top of the stack. Since this value is constantly changing "
+"as new values are pushed onto the top of the stack, many implementations "
+"also provide a \"frame pointer\" that is located near the beginning of a "
+"stack frame so that local variables can more easily be addressed relative to "
+"this value. crossref:bibliography[cod,1] The return address for function "
+"calls is also stored on the stack, and this is the cause of stack-overflow "
+"exploits since overflowing a local variable in a function can overwrite the "
+"return address of that function, potentially allowing a malicious user to "
+"execute any code he or she wants."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:87
+msgid ""
+"Although stack-based attacks are by far the most common, it would also be "
+"possible to overrun the stack with a heap-based (malloc/free) attack."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:90
+msgid ""
+"The C programming language does not perform automatic bounds checking on "
+"arrays or pointers as many other languages do. In addition, the standard C "
+"library is filled with a handful of very dangerous functions."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:96
+#, no-wrap
+msgid "`strcpy`(char *dest, const char *src)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:100
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:105
+#, no-wrap
+msgid "May overflow the dest buffer"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:101
+#, no-wrap
+msgid "`strcat`(char *dest, const char *src)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:106
+#, no-wrap
+msgid "`getwd`(char *buf)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:110
+#, no-wrap
+msgid "May overflow the buf buffer"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:111
+#, no-wrap
+msgid "`gets`(char *s)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:115
+#, no-wrap
+msgid "May overflow the s buffer"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:116
+#, no-wrap
+msgid "`[vf]scanf`(const char *format, ...)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:120
+#, no-wrap
+msgid "May overflow its arguments."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:121
+#, no-wrap
+msgid "`realpath`(char *path, char resolved_path[])"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:125
+#, no-wrap
+msgid "May overflow the path buffer"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:126
+#, no-wrap
+msgid "`[v]sprintf`(char *str, const char *format, ...)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:129
+#, no-wrap
+msgid "May overflow the str buffer."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:131
+#, no-wrap
+msgid "Example Buffer Overflow"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:134
+msgid ""
+"The following example code contains a buffer overflow designed to overwrite "
+"the return address and skip the instruction immediately following the "
+"function call. (Inspired by crossref:bibliography[Phrack,4])"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:138
+#, no-wrap
+msgid "#include <stdio.h>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:143
+#, no-wrap
+msgid ""
+"void manipulate(char *buffer) {\n"
+" char newbuffer[80];\n"
+" strcpy(newbuffer,buffer);\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:147
+#, no-wrap
+msgid ""
+"int main() {\n"
+" char ch,buffer[4096];\n"
+" int i=0;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:149
+#, no-wrap
+msgid " while ((buffer[i++] = getchar()) != '\\n') {};\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:156
+#, no-wrap
+msgid ""
+" i=1;\n"
+" manipulate(buffer);\n"
+" i=2;\n"
+" printf(\"The value of i is : %d\\n\",i);\n"
+" return 0;\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:159
+msgid ""
+"Let us examine what the memory image of this process would look like if we "
+"were to input 160 spaces into our little program before hitting return."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:163
+msgid ""
+"Obviously more malicious input can be devised to execute actual compiled "
+"instructions (such as exec(/bin/sh))."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:164
+#, no-wrap
+msgid "Avoiding Buffer Overflows"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:174
+msgid ""
+"The most straightforward solution to the problem of stack-overflows is to "
+"always use length restricted memory and string copy functions. `strncpy` "
+"and `strncat` are part of the standard C library. These functions accept a "
+"length value as a parameter which should be no larger than the size of the "
+"destination buffer. These functions will then copy up to 'length' bytes "
+"from the source to the destination. However there are a number of problems "
+"with these functions. Neither function guarantees NUL termination if the "
+"size of the input buffer is as large as the destination. The length "
+"parameter is also used inconsistently between strncpy and strncat so it is "
+"easy for programmers to get confused as to their proper usage. There is "
+"also a significant performance loss compared to `strcpy` when copying a "
+"short string into a large buffer since `strncpy` NUL fills up the size "
+"specified."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:177
+msgid ""
+"Another memory copy implementation exists to get around these problems. The "
+"`strlcpy` and `strlcat` functions guarantee that they will always null "
+"terminate the destination string when given a non-zero length argument."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:178
+#, no-wrap
+msgid "Compiler based run-time bounds checking"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:182
+msgid ""
+"Unfortunately there is still a very large assortment of code in public use "
+"which blindly copies memory around without using any of the bounded copy "
+"routines we just discussed. Fortunately, there is a way to help prevent "
+"such attacks - run-time bounds checking, which is implemented by several C/C+"
+"+ compilers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:185
+msgid ""
+"ProPolice is one such compiler feature, and is integrated into man:gcc[1] "
+"versions 4.1 and later. It replaces and extends the earlier StackGuard man:"
+"gcc[1] extension."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:189
+msgid ""
+"ProPolice helps to protect against stack-based buffer overflows and other "
+"attacks by laying pseudo-random numbers in key areas of the stack before "
+"calling any function. When a function returns, these \"canaries\" are "
+"checked and if they are found to have been changed the executable is "
+"immediately aborted. Thus any attempt to modify the return address or other "
+"variable stored on the stack in an attempt to get malicious code to run is "
+"unlikely to succeed, as the attacker would have to also manage to leave the "
+"pseudo-random canaries untouched."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:191
+msgid ""
+"Recompiling your application with ProPolice is an effective means of "
+"stopping most buffer-overflow attacks, but it can still be compromised."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:192
+#, no-wrap
+msgid "Library based run-time bounds checking"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:196
+msgid ""
+"Compiler-based mechanisms are completely useless for binary-only software "
+"for which you cannot recompile. For these situations there are a number of "
+"libraries which re-implement the unsafe functions of the C-library "
+"(`strcpy`, `fscanf`, `getwd`, etc..) and ensure that these functions can "
+"never write past the stack pointer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:198
+msgid "libsafe"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:199
+msgid "libverify"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:200
+msgid "libparanoia"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:205
+msgid ""
+"Unfortunately these library-based defenses have a number of shortcomings. "
+"These libraries only protect against a very small set of security related "
+"issues and they neglect to fix the actual problem. These defenses may fail "
+"if the application was compiled with -fomit-frame-pointer. Also, the "
+"LD_PRELOAD and LD_LIBRARY_PATH environment variables can be overwritten/"
+"unset by the user."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:207
+#, no-wrap
+msgid "SetUID issues"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:211
+msgid ""
+"There are at least 6 different IDs associated with any given process, and "
+"you must therefore be very careful with the access that your process has at "
+"any given time. In particular, all seteuid applications should give up "
+"their privileges as soon as it is no longer required."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:214
+msgid ""
+"The real user ID can only be changed by a superuser process. The login "
+"program sets this when a user initially logs in and it is seldom changed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:218
+msgid ""
+"The effective user ID is set by the `exec()` functions if a program has its "
+"seteuid bit set. An application can call `seteuid()` at any time to set the "
+"effective user ID to either the real user ID or the saved set-user-ID. When "
+"the effective user ID is set by `exec()` functions, the previous value is "
+"saved in the saved set-user-ID."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:220
+#, no-wrap
+msgid "Limiting your program's environment"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:228
+msgid ""
+"The traditional method of restricting a process is with the `chroot()` "
+"system call. This system call changes the root directory from which all "
+"other paths are referenced for a process and any child processes. For this "
+"call to succeed the process must have execute (search) permission on the "
+"directory being referenced. The new environment does not actually take "
+"effect until you `chdir()` into your new environment. It should also be "
+"noted that a process can easily break out of a chroot environment if it has "
+"root privilege. This could be accomplished by creating device nodes to read "
+"kernel memory, attaching a debugger to a process outside of the man:"
+"chroot[8] environment, or in many other creative ways."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:233
+msgid ""
+"The behavior of the `chroot()` system call can be controlled somewhat with "
+"the kern.chroot_allow_open_directories `sysctl` variable. When this value "
+"is set to 0, `chroot()` will fail with EPERM if there are any directories "
+"open. If set to the default value of 1, then `chroot()` will fail with "
+"EPERM if there are any directories open and the process is already subject "
+"to a `chroot()` call. For any other value, the check for open directories "
+"will be bypassed completely."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:234
+#, no-wrap
+msgid "FreeBSD's jail functionality"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:238
+msgid ""
+"The concept of a Jail extends upon the `chroot()` by limiting the powers of "
+"the superuser to create a true `virtual server'. Once a prison is set up "
+"all network communication must take place through the specified IP address, "
+"and the power of \"root privilege\" in this jail is severely constrained."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:242
+msgid ""
+"While in a prison, any tests of superuser power within the kernel using the "
+"`suser()` call will fail. However, some calls to `suser()` have been "
+"changed to a new interface `suser_xxx()`. This function is responsible for "
+"recognizing or denying access to superuser power for imprisoned processes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:244
+msgid "A superuser process within a jailed environment has the power to:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:246
+msgid ""
+"Manipulate credential with `setuid`, `seteuid`, `setgid`, `setegid`, "
+"`setgroups`, `setreuid`, `setregid`, `setlogin`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:247
+msgid "Set resource limits with `setrlimit`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:248
+msgid "Modify some sysctl nodes (kern.hostname)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:249
+msgid "`chroot()`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:250
+msgid "Set flags on a vnode: `chflags`, `fchflags`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:251
+msgid ""
+"Set attributes of a vnode such as file permission, owner, group, size, "
+"access time, and modification time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:252
+msgid "Bind to privileged ports in the Internet domain (ports < 1024)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:256
+msgid ""
+"`Jail` is a very useful tool for running applications in a secure "
+"environment but it does have some shortcomings. Currently, the IPC "
+"mechanisms have not been converted to the `suser_xxx` so applications such "
+"as MySQL cannot be run within a jail. Superuser access may have a very "
+"limited meaning within a jail, but there is no way to specify exactly what "
+"\"very limited\" means."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:257
+#, no-wrap
+msgid "POSIX(R).1e Process Capabilities"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:260
+msgid ""
+"POSIX(R) has released a working draft that adds event auditing, access "
+"control lists, fine grained privileges, information labeling, and mandatory "
+"access control."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:263
+msgid ""
+"This is a work in progress and is the focus of the http://www.trustedbsd.org/"
+"[TrustedBSD] project. Some of the initial work has been committed to "
+"FreeBSD-CURRENT (cap_set_proc(3))."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:265
+#, no-wrap
+msgid "Trust"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:269
+msgid ""
+"An application should never assume that anything about the users environment "
+"is sane. This includes (but is certainly not limited to): user input, "
+"signals, environment variables, resources, IPC, mmaps, the filesystem "
+"working directory, file descriptors, the # of open files, etc."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:274
+msgid ""
+"You should never assume that you can catch all forms of invalid input that a "
+"user might supply. Instead, your application should use positive filtering "
+"to only allow a specific subset of inputs that you deem safe. Improper data "
+"validation has been the cause of many exploits, especially with CGI scripts "
+"on the world wide web. For filenames you need to be extra careful about "
+"paths (\"../\", \"/\"), symbolic links, and shell escape characters."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:277
+msgid ""
+"Perl has a really cool feature called \"Taint\" mode which can be used to "
+"prevent scripts from using data derived outside the program in an unsafe "
+"way. This mode will check command line arguments, environment variables, "
+"locale information, the results of certain syscalls (`readdir()`, "
+"`readlink()`, `getpwxxx()`), and all file input."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:279
+#, no-wrap
+msgid "Race Conditions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:283
+msgid ""
+"A race condition is anomalous behavior caused by the unexpected dependence "
+"on the relative timing of events. In other words, a programmer incorrectly "
+"assumed that a particular event would always happen before another."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/secure/_index.adoc:289
+msgid ""
+"Some of the common causes of race conditions are signals, access checks, and "
+"file opens. Signals are asynchronous events by nature so special care must "
+"be taken in dealing with them. Checking access with `access(2)` then "
+"`open(2)` is clearly non-atomic. Users can move files in between the two "
+"calls. Instead, privileged applications should `seteuid()` and then call "
+"`open()` directly. Along the same lines, an application should always set a "
+"proper umask before `open()` to obviate the need for spurious `chmod()` "
+"calls."
+msgstr ""
diff --git a/documentation/content/en/books/developers-handbook/sockets/_index.adoc b/documentation/content/en/books/developers-handbook/sockets/_index.adoc
index 640f4524da..1a4d4cd522 100644
--- a/documentation/content/en/books/developers-handbook/sockets/_index.adoc
+++ b/documentation/content/en/books/developers-handbook/sockets/_index.adoc
@@ -8,7 +8,7 @@ description: FreeBSD Sockets
tags: ["Sockets", "Protocols"]
showBookMenu: true
weight: 9
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/sockets/"
---
[[sockets]]
@@ -559,6 +559,7 @@ We now know enough to write a very simple client, one that will get current time
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
+#include <unistd.h>
int main() {
register int s;
diff --git a/documentation/content/en/books/developers-handbook/sockets/_index.po b/documentation/content/en/books/developers-handbook/sockets/_index.po
new file mode 100644
index 0000000000..f09822ceaa
--- /dev/null
+++ b/documentation/content/en/books/developers-handbook/sockets/_index.po
@@ -0,0 +1,2247 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-04-20 20:56-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1
+#, no-wrap
+msgid "FreeBSD Sockets"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1
+#, no-wrap
+msgid "Chapter 7. Sockets"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:15
+#, no-wrap
+msgid "Sockets"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:53
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:58
+msgid ""
+"BSD sockets take interprocess communications to a new level. It is no "
+"longer necessary for the communicating processes to run on the same "
+"machine. They still _can_, but they do not have to."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:61
+msgid ""
+"Not only do these processes not have to run on the same machine, they do not "
+"have to run under the same operating system. Thanks to BSD sockets, your "
+"FreeBSD software can smoothly cooperate with a program running on a "
+"Macintosh(R), another one running on a Sun(TM) workstation, yet another one "
+"running under Windows(R) 2000, all connected with an Ethernet-based local "
+"area network."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:63
+msgid ""
+"But your software can equally well cooperate with processes running in "
+"another building, or on another continent, inside a submarine, or a space "
+"shuttle."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:66
+msgid ""
+"It can also cooperate with processes that are not part of a computer (at "
+"least not in the strict sense of the word), but of such devices as printers, "
+"digital cameras, medical equipment. Just about anything capable of digital "
+"communications."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:68
+#, no-wrap
+msgid "Networking and Diversity"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:74
+msgid ""
+"We have already hinted on the _diversity_ of networking. Many different "
+"systems have to talk to each other. And they have to speak the same "
+"language. They also have to _understand_ the same language the same way."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:79
+msgid ""
+"People often think that _body language_ is universal. But it is not. Back "
+"in my early teens, my father took me to Bulgaria. We were sitting at a "
+"table in a park in Sofia, when a vendor approached us trying to sell us some "
+"roasted almonds."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:82
+msgid ""
+"I had not learned much Bulgarian by then, so, instead of saying no, I shook "
+"my head from side to side, the \"universal\" body language for _no_. The "
+"vendor quickly started serving us some almonds."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:90
+msgid ""
+"I then remembered I had been told that in Bulgaria shaking your head "
+"sideways meant _yes_. Quickly, I started nodding my head up and down. The "
+"vendor noticed, took his almonds, and walked away. To an uninformed "
+"observer, I did not change the body language: I continued using the language "
+"of shaking and nodding my head. What changed was the _meaning_ of the body "
+"language. At first, the vendor and I interpreted the same language as "
+"having completely different meaning. I had to adjust my own interpretation "
+"of that language so the vendor would understand."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:94
+msgid ""
+"It is the same with computers: The same symbols may have different, even "
+"outright opposite meaning. Therefore, for two computers to understand each "
+"other, they must not only agree on the same _language_, but on the same "
+"_interpretation_ of the language."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:96
+#, no-wrap
+msgid "Protocols"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:103
+msgid ""
+"While various programming languages tend to have complex syntax and use a "
+"number of multi-letter reserved words (which makes them easy for the human "
+"programmer to understand), the languages of data communications tend to be "
+"very terse. Instead of multi-byte words, they often use individual _bits_. "
+"There is a very convincing reason for it: While data travels _inside_ your "
+"computer at speeds approaching the speed of light, it often travels "
+"considerably slower between two computers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:105
+msgid ""
+"As the languages used in data communications are so terse, we usually refer "
+"to them as _protocols_ rather than languages."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:110
+msgid ""
+"As data travels from one computer to another, it always uses more than one "
+"protocol. These protocols are _layered_. The data can be compared to the "
+"inside of an onion: You have to peel off several layers of \"skin\" to get "
+"to the data. This is best illustrated with a picture:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:111
+#, no-wrap
+msgid "Protocol Layers"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:112
+#, no-wrap
+msgid "layers.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:115
+msgid ""
+"In this example, we are trying to get an image from a web page we are "
+"connected to via an Ethernet."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:118
+msgid ""
+"The image consists of raw data, which is simply a sequence of RGB values "
+"that our software can process, i.e., convert into an image and display on "
+"our monitor."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:123
+msgid ""
+"Alas, our software has no way of knowing how the raw data is organized: Is "
+"it a sequence of RGB values, or a sequence of grayscale intensities, or "
+"perhaps of CMYK encoded colors? Is the data represented by 8-bit quanta, or "
+"are they 16 bits in size, or perhaps 4 bits? How many rows and columns does "
+"the image consist of? Should certain pixels be transparent?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:125
+msgid "I think you get the picture..."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:128
+msgid ""
+"To inform our software how to handle the raw data, it is encoded as a PNG "
+"file. It could be a GIF, or a JPEG, but it is a PNG."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:130
+msgid "And PNG is a protocol."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:132
+msgid ""
+"At this point, I can hear some of you yelling, _\"No, it is not! It is a "
+"file format!\"_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:137
+msgid ""
+"Well, of course it is a file format. But from the perspective of data "
+"communications, a file format is a protocol: The file structure is a "
+"_language_, a terse one at that, communicating to our _process_ how the data "
+"is organized. Ergo, it is a _protocol_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:140
+msgid ""
+"Alas, if all we received was the PNG file, our software would be facing a "
+"serious problem: How is it supposed to know the data is representing an "
+"image, as opposed to some text, or perhaps a sound, or what not? Secondly, "
+"how is it supposed to know the image is in the PNG format as opposed to GIF, "
+"or JPEG, or some other image format?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:144
+msgid ""
+"To obtain that information, we are using another protocol: HTTP. This "
+"protocol can tell us exactly that the data represents an image, and that it "
+"uses the PNG protocol. It can also tell us some other things, but let us "
+"stay focused on protocol layers here."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:147
+msgid ""
+"So, now we have some data wrapped in the PNG protocol, wrapped in the HTTP "
+"protocol. How did we get it from the server?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:151
+msgid ""
+"By using TCP/IP over Ethernet, that is how. Indeed, that is three more "
+"protocols. Instead of continuing inside out, I am now going to talk about "
+"Ethernet, simply because it is easier to explain the rest that way."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:155
+msgid ""
+"Ethernet is an interesting system of connecting computers in a _local area "
+"network_ (LAN). Each computer has a _network interface card_ (NIC), which "
+"has a unique 48-bit ID called its _address_. No two Ethernet NICs in the "
+"world have the same address."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:161
+msgid ""
+"These NICs are all connected with each other. Whenever one computer wants "
+"to communicate with another in the same Ethernet LAN, it sends a message "
+"over the network. Every NIC sees the message. But as part of the Ethernet "
+"_protocol_, the data contains the address of the destination NIC (among "
+"other things). So, only one of all the network interface cards will pay "
+"attention to it, the rest will ignore it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:165
+msgid ""
+"But not all computers are connected to the same network. Just because we "
+"have received the data over our Ethernet does not mean it originated in our "
+"own local area network. It could have come to us from some other network "
+"(which may not even be Ethernet based) connected with our own network via "
+"the Internet."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:169
+msgid ""
+"All data is transferred over the Internet using IP, which stands for "
+"_Internet Protocol_. Its basic role is to let us know where in the world "
+"the data has arrived from, and where it is supposed to go to. It does not "
+"_guarantee_ we will receive the data, only that we will know where it came "
+"from _if_ we do receive it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:172
+msgid ""
+"Even if we do receive the data, IP does not guarantee we will receive "
+"various chunks of data in the same order the other computer has sent it to "
+"us. So, we can receive the center of our image before we receive the upper "
+"left corner and after the lower right, for example."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:174
+msgid ""
+"It is TCP (_Transmission Control Protocol_) that asks the sender to resend "
+"any lost data and that places it all into the proper order."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:177
+msgid ""
+"All in all, it took _five_ different protocols for one computer to "
+"communicate to another what an image looks like. We received the data "
+"wrapped into the PNG protocol, which was wrapped into the HTTP protocol, "
+"which was wrapped into the TCP protocol, which was wrapped into the IP "
+"protocol, which was wrapped into the Ethernet protocol."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:181
+msgid ""
+"Oh, and by the way, there probably were several other protocols involved "
+"somewhere on the way. For example, if our LAN was connected to the Internet "
+"through a dial-up call, it used the PPP protocol over the modem which used "
+"one (or several) of the various modem protocols, et cetera, et cetera, et "
+"cetera..."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:183
+msgid ""
+"As a developer you should be asking by now, _\"How am I supposed to handle "
+"it all?\"_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:188
+msgid ""
+"Luckily for you, you are _not_ supposed to handle it all. You _are_ "
+"supposed to handle some of it, but not all of it. Specifically, you need "
+"not worry about the physical connection (in our case Ethernet and possibly "
+"PPP, etc). Nor do you need to handle the Internet Protocol, or the "
+"Transmission Control Protocol."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:191
+msgid ""
+"In other words, you do not have to do anything to receive the data from the "
+"other computer. Well, you do have to _ask_ for it, but that is almost as "
+"simple as opening a file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:194
+msgid ""
+"Once you have received the data, it is up to you to figure out what to do "
+"with it. In our case, you would need to understand the HTTP protocol and "
+"the PNG file structure."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:198
+msgid ""
+"To use an analogy, all the internetworking protocols become a gray area: Not "
+"so much because we do not understand how it works, but because we are no "
+"longer concerned about it. The sockets interface takes care of this gray "
+"area for us:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:199
+#, no-wrap
+msgid "Sockets Covered Protocol Layers"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:200
+#, no-wrap
+msgid "slayers.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:203
+msgid ""
+"We only need to understand any protocols that tell us how to _interpret the "
+"data_, not how to _receive_ it from another process, nor how to _send_ it to "
+"another process."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:205
+#, no-wrap
+msgid "The Sockets Model"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:210
+msgid ""
+"BSD sockets are built on the basic UNIX(R) model: _Everything is a file._ In "
+"our example, then, sockets would let us receive an _HTTP file_, so to "
+"speak. It would then be up to us to extract the _PNG file_ from it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:213
+msgid ""
+"Due to the complexity of internetworking, we cannot just use the `open` "
+"system call, or the `open()` C function. Instead, we need to take several "
+"steps to \"opening\" a socket."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:216
+msgid ""
+"Once we do, however, we can start treating the _socket_ the same way we "
+"treat any _file descriptor_: We can `read` from it, `write` to it, `pipe` "
+"it, and, eventually, `close` it."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:218
+#, no-wrap
+msgid "Essential Socket Functions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:222
+msgid ""
+"While FreeBSD offers different functions to work with sockets, we only "
+"_need_ four to \"open\" a socket. And in some cases we only need two."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:224
+#, no-wrap
+msgid "The Client-Server Difference"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:227
+msgid ""
+"Typically, one of the ends of a socket-based data communication is a "
+"_server_, the other is a _client_."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:229
+#, no-wrap
+msgid "The Common Elements"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:232
+#, no-wrap
+msgid "`socket`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:236
+msgid ""
+"The one function used by both, clients and servers, is man:socket[2]. It is "
+"declared this way:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:240
+#, no-wrap
+msgid "int socket(int domain, int type, int protocol);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:245
+msgid ""
+"The return value is of the same type as that of `open`, an integer. FreeBSD "
+"allocates its value from the same pool as that of file handles. That is "
+"what allows sockets to be treated the same way as files."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:249
+msgid ""
+"The `domain` argument tells the system what _protocol family_ you want it to "
+"use. Many of them exist, some are vendor specific, others are very common. "
+"They are declared in [.filename]#sys/socket.h#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:251
+msgid "Use `PF_INET` for UDP, TCP and other Internet protocols (IPv4)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:255
+msgid ""
+"Five values are defined for the `type` argument, again, in [.filename]#sys/"
+"socket.h#. All of them start with \"`SOCK_`\". The most common one is "
+"`SOCK_STREAM`, which tells the system you are asking for a _reliable stream "
+"delivery service_ (which is TCP when used with `PF_INET`)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:257
+msgid ""
+"If you asked for `SOCK_DGRAM`, you would be requesting a _connectionless "
+"datagram delivery service_ (in our case, UDP)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:259
+msgid ""
+"If you wanted to be in charge of the low-level protocols (such as IP), or "
+"even network interfaces (e.g., the Ethernet), you would need to specify "
+"`SOCK_RAW`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:262
+msgid ""
+"Finally, the `protocol` argument depends on the previous two arguments, and "
+"is not always meaningful. In that case, use `0` for its value."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:264
+#, no-wrap
+msgid "The Unconnected Socket"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:268
+msgid ""
+"Nowhere, in the `socket` function have we specified to what other system we "
+"should be connected. Our newly created socket remains _unconnected_."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:271
+msgid ""
+"This is on purpose: To use a telephone analogy, we have just attached a "
+"modem to the phone line. We have neither told the modem to make a call, nor "
+"to answer if the phone rings."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:274
+#, no-wrap
+msgid "`sockaddr`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:279
+msgid ""
+"Various functions of the sockets family expect the address of (or pointer "
+"to, to use C terminology) a small area of the memory. The various C "
+"declarations in the [.filename]#sys/socket.h# refer to it as `struct "
+"sockaddr`. This structure is declared in the same file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:292
+#, no-wrap
+msgid ""
+"/*\n"
+" * Structure used by kernel to store most\n"
+" * addresses.\n"
+" */\n"
+"struct sockaddr {\n"
+"\tunsigned char\tsa_len;\t\t/* total length */\n"
+"\tsa_family_t\tsa_family;\t/* address family */\n"
+"\tchar\t\tsa_data[14];\t/* actually longer; address value */\n"
+"};\n"
+"#define\tSOCK_MAXADDRLEN\t255\t\t/* longest possible addresses */\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:296
+msgid ""
+"Please note the _vagueness_ with which the `sa_data` field is declared, just "
+"as an array of `14` bytes, with the comment hinting there can be more than "
+"`14` of them."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:299
+msgid ""
+"This vagueness is quite deliberate. Sockets is a very powerful interface. "
+"While most people perhaps think of it as nothing more than the Internet "
+"interface-and most applications probably use it for that nowadays-sockets "
+"can be used for just about _any_ kind of interprocess communications, of "
+"which the Internet (or, more precisely, IP) is only one."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:302
+msgid ""
+"The [.filename]#sys/socket.h# refers to the various types of protocols "
+"sockets will handle as _address families_, and lists them right before the "
+"definition of `sockaddr`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:351
+#, no-wrap
+msgid ""
+"/*\n"
+" * Address families.\n"
+" */\n"
+"#define\tAF_UNSPEC\t0\t\t/* unspecified */\n"
+"#define\tAF_LOCAL\t1\t\t/* local to host (pipes, portals) */\n"
+"#define\tAF_UNIX\t\tAF_LOCAL\t/* backward compatibility */\n"
+"#define\tAF_INET\t\t2\t\t/* internetwork: UDP, TCP, etc. */\n"
+"#define\tAF_IMPLINK\t3\t\t/* arpanet imp addresses */\n"
+"#define\tAF_PUP\t\t4\t\t/* pup protocols: e.g. BSP */\n"
+"#define\tAF_CHAOS\t5\t\t/* mit CHAOS protocols */\n"
+"#define\tAF_NS\t\t6\t\t/* XEROX NS protocols */\n"
+"#define\tAF_ISO\t\t7\t\t/* ISO protocols */\n"
+"#define\tAF_OSI\t\tAF_ISO\n"
+"#define\tAF_ECMA\t\t8\t\t/* European computer manufacturers */\n"
+"#define\tAF_DATAKIT\t9\t\t/* datakit protocols */\n"
+"#define\tAF_CCITT\t10\t\t/* CCITT protocols, X.25 etc */\n"
+"#define\tAF_SNA\t\t11\t\t/* IBM SNA */\n"
+"#define AF_DECnet\t12\t\t/* DECnet */\n"
+"#define AF_DLI\t\t13\t\t/* DEC Direct data link interface */\n"
+"#define AF_LAT\t\t14\t\t/* LAT */\n"
+"#define\tAF_HYLINK\t15\t\t/* NSC Hyperchannel */\n"
+"#define\tAF_APPLETALK\t16\t\t/* Apple Talk */\n"
+"#define\tAF_ROUTE\t17\t\t/* Internal Routing Protocol */\n"
+"#define\tAF_LINK\t\t18\t\t/* Link layer interface */\n"
+"#define\tpseudo_AF_XTP\t19\t\t/* eXpress Transfer Protocol (no AF) */\n"
+"#define\tAF_COIP\t\t20\t\t/* connection-oriented IP, aka ST II */\n"
+"#define\tAF_CNT\t\t21\t\t/* Computer Network Technology */\n"
+"#define pseudo_AF_RTIP\t22\t\t/* Help Identify RTIP packets */\n"
+"#define\tAF_IPX\t\t23\t\t/* Novell Internet Protocol */\n"
+"#define\tAF_SIP\t\t24\t\t/* Simple Internet Protocol */\n"
+"#define\tpseudo_AF_PIP\t25\t\t/* Help Identify PIP packets */\n"
+"#define\tAF_ISDN\t\t26\t\t/* Integrated Services Digital Network*/\n"
+"#define\tAF_E164\t\tAF_ISDN\t\t/* CCITT E.164 recommendation */\n"
+"#define\tpseudo_AF_KEY\t27\t\t/* Internal key-management function */\n"
+"#define\tAF_INET6\t28\t\t/* IPv6 */\n"
+"#define\tAF_NATM\t\t29\t\t/* native ATM access */\n"
+"#define\tAF_ATM\t\t30\t\t/* ATM */\n"
+"#define pseudo_AF_HDRCMPLT 31\t\t/* Used by BPF to not rewrite headers\n"
+"\t\t\t\t\t * in interface output routine\n"
+"\t\t\t\t\t */\n"
+"#define\tAF_NETGRAPH\t32\t\t/* Netgraph sockets */\n"
+"#define\tAF_SLOW\t\t33\t\t/* 802.3ad slow protocol */\n"
+"#define\tAF_SCLUSTER\t34\t\t/* Sitara cluster protocol */\n"
+"#define\tAF_ARP\t\t35\n"
+"#define\tAF_BLUETOOTH\t36\t\t/* Bluetooth sockets */\n"
+"#define\tAF_MAX\t\t37\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:355
+msgid "The one used for IP is AF_INET. It is a symbol for the constant `2`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:357
+msgid ""
+"It is the _address family_ listed in the `sa_family` field of `sockaddr` "
+"that decides how exactly the vaguely named bytes of `sa_data` will be used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:359
+msgid ""
+"Specifically, whenever the _address family_ is AF_INET, we can use `struct "
+"sockaddr_in` found in [.filename]#netinet/in.h#, wherever `sockaddr` is "
+"expected:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:372
+#, no-wrap
+msgid ""
+"/*\n"
+" * Socket address, internet style.\n"
+" */\n"
+"struct sockaddr_in {\n"
+"\tuint8_t\t\tsin_len;\n"
+"\tsa_family_t\tsin_family;\n"
+"\tin_port_t\tsin_port;\n"
+"\tstruct\tin_addr sin_addr;\n"
+"\tchar\tsin_zero[8];\n"
+"};\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:375
+msgid "We can visualize its organization this way:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:376
+#, no-wrap
+msgid "sockaddr_in structure"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:377
+#, no-wrap
+msgid "sain.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:380
+msgid ""
+"The three important fields are `sin_family`, which is byte 1 of the "
+"structure, `sin_port`, a 16-bit value found in bytes 2 and 3, and "
+"`sin_addr`, a 32-bit integer representation of the IP address, stored in "
+"bytes 4-7."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:386
+msgid ""
+"Now, let us try to fill it out. Let us assume we are trying to write a "
+"client for the _daytime_ protocol, which simply states that its server will "
+"write a text string representing the current date and time to port 13. We "
+"want to use TCP/IP, so we need to specify `AF_INET` in the address family "
+"field. `AF_INET` is defined as `2`. Let us use the IP address of "
+"`192.43.244.18`, which is the time server of US federal government (`time."
+"nist.gov`)."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:387
+#, no-wrap
+msgid "Specific example of sockaddr_in"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:388
+#, no-wrap
+msgid "sainfill.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:391
+msgid ""
+"By the way the `sin_addr` field is declared as being of the `struct in_addr` "
+"type, which is defined in [.filename]#netinet/in.h#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:400
+#, no-wrap
+msgid ""
+"/*\n"
+" * Internet address (a structure for historical reasons)\n"
+" */\n"
+"struct in_addr {\n"
+"\tin_addr_t s_addr;\n"
+"};\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:403
+msgid "In addition, `in_addr_t` is a 32-bit integer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:405
+msgid ""
+"The `192.43.244.18` is just a convenient notation of expressing a 32-bit "
+"integer by listing all of its 8-bit bytes, starting with the _most "
+"significant_ one."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:409
+msgid ""
+"So far, we have viewed `sockaddr` as an abstraction. Our computer does not "
+"store `short` integers as a single 16-bit entity, but as a sequence of 2 "
+"bytes. Similarly, it stores 32-bit integers as a sequence of 4 bytes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:411
+msgid "Suppose we coded something like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:417
+#, no-wrap
+msgid ""
+"sa.sin_family = AF_INET;\n"
+"sa.sin_port = 13;\n"
+"sa.sin_addr.s_addr = (((((192 << 8) | 43) << 8) | 244) << 8) | 18;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:420
+msgid "What would the result look like?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:423
+msgid ""
+"Well, that depends, of course. On a Pentium(R), or other x86, based "
+"computer, it would look like this:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:424
+#, no-wrap
+msgid "sockaddr_in on an Intel system"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:425
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:471
+#, no-wrap
+msgid "sainlsb.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:428
+msgid "On a different system, it might look like this:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:429
+#, no-wrap
+msgid "sockaddr_in on an MSB system"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:430
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:476
+#, no-wrap
+msgid "sainmsb.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:434
+msgid ""
+"And on a PDP it might look different yet. But the above two are the most "
+"common ways in use today."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:438
+msgid ""
+"Ordinarily, wanting to write portable code, programmers pretend that these "
+"differences do not exist. And they get away with it (except when they code "
+"in assembly language). Alas, you cannot get away with it that easily when "
+"coding for sockets."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:440
+msgid "Why?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:442
+msgid ""
+"Because when communicating with another computer, you usually do not know "
+"whether it stores data _most significant byte_ (MSB) or _least significant "
+"byte_ (LSB) first."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:444
+msgid "You might be wondering, _\"So, will sockets not handle it for me?\"_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:446
+msgid "It will not."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:449
+msgid ""
+"While that answer may surprise you at first, remember that the general "
+"sockets interface only understands the `sa_len` and `sa_family` fields of "
+"the `sockaddr` structure. You do not have to worry about the byte order "
+"there (of course, on FreeBSD `sa_family` is only 1 byte anyway, but many "
+"other UNIX(R) systems do not have `sa_len` and use 2 bytes for `sa_family`, "
+"and expect the data in whatever order is native to the computer)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:452
+msgid ""
+"But the rest of the data is just `sa_data[14]` as far as sockets goes. "
+"Depending on the _address family_, sockets just forwards that data to its "
+"destination."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:457
+msgid ""
+"Indeed, when we enter a port number, it is because we want the other "
+"computer to know what service we are asking for. And, when we are the "
+"server, we read the port number so we know what service the other computer "
+"is expecting from us. Either way, sockets only has to forward the port "
+"number as data. It does not interpret it in any way."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:460
+msgid ""
+"Similarly, we enter the IP address to tell everyone on the way where to send "
+"our data to. Sockets, again, only forwards it as data."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:462
+msgid ""
+"That is why, we (the _programmers_, not the _sockets_) have to distinguish "
+"between the byte order used by our computer and a conventional byte order to "
+"send the data in to the other computer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:464
+msgid ""
+"We will call the byte order our computer uses the _host byte order_, or just "
+"the _host order_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:467
+msgid ""
+"There is a convention of sending the multi-byte data over IP _MSB first_. "
+"This, we will refer to as the _network byte order_, or simply the _network "
+"order_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:469
+msgid ""
+"Now, if we compiled the above code for an Intel based computer, our _host "
+"byte order_ would produce:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:470
+#, no-wrap
+msgid "Host byte order on an Intel system"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:474
+msgid "But the _network byte order_ requires that we store the data MSB first:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:475
+#, no-wrap
+msgid "Network byte order"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:479
+msgid ""
+"Unfortunately, our _host order_ is the exact opposite of the _network order_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:482
+msgid ""
+"We have several ways of dealing with it. One would be to _reverse_ the "
+"values in our code:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:488
+#, no-wrap
+msgid ""
+"sa.sin_family = AF_INET;\n"
+"sa.sin_port = 13 << 8;\n"
+"sa.sin_addr.s_addr = (((((18 << 8) | 244) << 8) | 43) << 8) | 192;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:493
+msgid ""
+"This will _trick_ our compiler into storing the data in the _network byte "
+"order_. In some cases, this is exactly the way to do it (e.g., when "
+"programming in assembly language). In most cases, however, it can cause a "
+"problem."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:497
+msgid ""
+"Suppose, you wrote a sockets-based program in C. You know it is going to "
+"run on a Pentium(R), so you enter all your constants in reverse and force "
+"them to the _network byte order_. It works well."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:502
+msgid ""
+"Then, some day, your trusted old Pentium(R) becomes a rusty old Pentium(R). "
+"You replace it with a system whose _host order_ is the same as the _network "
+"order_. You need to recompile all your software. All of your software "
+"continues to perform well, except the one program you wrote."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:506
+msgid ""
+"You have since forgotten that you had forced all of your constants to the "
+"opposite of the _host order_. You spend some quality time tearing out your "
+"hair, calling the names of all gods you ever heard of (and some you made "
+"up), hitting your monitor with a nerf bat, and performing all the other "
+"traditional ceremonies of trying to figure out why something that has worked "
+"so well is suddenly not working at all."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:508
+msgid ""
+"Eventually, you figure it out, say a couple of swear words, and start "
+"rewriting your code."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:511
+msgid ""
+"Luckily, you are not the first one to face the problem. Someone else has "
+"created the man:htons[3] and man:htonl[3] C functions to convert a `short` "
+"and `long` respectively from the _host byte order_ to the _network byte "
+"order_, and the man:ntohs[3] and man:ntohl[3] C functions to go the other "
+"way."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:514
+msgid ""
+"On _MSB-first_ systems these functions do nothing. On _LSB-first_ systems "
+"they convert values to the proper order."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:516
+msgid ""
+"So, regardless of what system your software is compiled on, your data will "
+"end up in the correct order if you use these functions."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:518
+#, no-wrap
+msgid "Client Functions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:523
+msgid ""
+"Typically, the client initiates the connection to the server. The client "
+"knows which server it is about to call: It knows its IP address, and it "
+"knows the _port_ the server resides at. It is akin to you picking up the "
+"phone and dialing the number (the _address_), then, after someone answers, "
+"asking for the person in charge of wingdings (the _port_)."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:525
+#, no-wrap
+msgid "`connect`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:528
+msgid ""
+"Once a client has created a socket, it needs to connect it to a specific "
+"port on a remote system. It uses man:connect[2]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:532
+#, no-wrap
+msgid "int connect(int s, const struct sockaddr *name, socklen_t namelen);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:537
+msgid ""
+"The `s` argument is the socket, i.e., the value returned by the `socket` "
+"function. The `name` is a pointer to `sockaddr`, the structure we have "
+"talked about extensively. Finally, `namelen` informs the system how many "
+"bytes are in our `sockaddr` structure."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:540
+msgid ""
+"If `connect` is successful, it returns `0`. Otherwise it returns `-1` and "
+"stores the error code in `errno`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:544
+msgid ""
+"There are many reasons why `connect` may fail. For example, with an attempt "
+"to an Internet connection, the IP address may not exist, or it may be down, "
+"or just too busy, or it may not have a server listening at the specified "
+"port. Or it may outright _refuse_ any request for specific code."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:546
+#, no-wrap
+msgid "Our First Client"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:549
+msgid ""
+"We now know enough to write a very simple client, one that will get current "
+"time from `192.43.244.18` and print it to [.filename]#stdout#."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:563
+#, no-wrap
+msgid ""
+"/*\n"
+" * daytime.c\n"
+" *\n"
+" * Programmed by G. Adam Stanislav\n"
+" */\n"
+"#include <stdio.h>\n"
+"#include <string.h>\n"
+"#include <sys/types.h>\n"
+"#include <sys/socket.h>\n"
+"#include <netinet/in.h>\n"
+"#include <unistd.h>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:569
+#, no-wrap
+msgid ""
+"int main() {\n"
+" register int s;\n"
+" register int bytes;\n"
+" struct sockaddr_in sa;\n"
+" char buffer[BUFSIZ+1];\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:574
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:996
+#, no-wrap
+msgid ""
+" if ((s = socket(PF_INET, SOCK_STREAM, 0)) < 0) {\n"
+" perror(\"socket\");\n"
+" return 1;\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:576
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:998
+#, no-wrap
+msgid " bzero(&sa, sizeof sa);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:585
+#, no-wrap
+msgid ""
+" sa.sin_family = AF_INET;\n"
+" sa.sin_port = htons(13);\n"
+" sa.sin_addr.s_addr = htonl((((((192 << 8) | 43) << 8) | 244) << 8) | 18);\n"
+" if (connect(s, (struct sockaddr *)&sa, sizeof sa) < 0) {\n"
+" perror(\"connect\");\n"
+" close(s);\n"
+" return 2;\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:588
+#, no-wrap
+msgid ""
+" while ((bytes = read(s, buffer, BUFSIZ)) > 0)\n"
+" write(1, buffer, bytes);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:592
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1022
+#, no-wrap
+msgid ""
+" close(s);\n"
+" return 0;\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:595
+msgid ""
+"Go ahead, enter it in your editor, save it as [.filename]#daytime.c#, then "
+"compile and run it:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:600
+#, no-wrap
+msgid ""
+"% cc -O3 -o daytime daytime.c\n"
+"% ./daytime\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:603
+#, no-wrap
+msgid ""
+"52079 01-06-19 02:29:25 50 0 1 543.9 UTC(NIST) *\n"
+"%\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:607
+msgid ""
+"In this case, the date was June 19, 2001, the time was 02:29:25 UTC. "
+"Naturally, your results will vary."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:609
+#, no-wrap
+msgid "Server Functions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:615
+msgid ""
+"The typical server does not initiate the connection. Instead, it waits for "
+"a client to call it and request services. It does not know when the client "
+"will call, nor how many clients will call. It may be just sitting there, "
+"waiting patiently, one moment, The next moment, it can find itself swamped "
+"with requests from a number of clients, all calling in at the same time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:617
+msgid "The sockets interface offers three basic functions to handle this."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:619
+#, no-wrap
+msgid "`bind`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:622
+msgid ""
+"Ports are like extensions to a phone line: After you dial a number, you dial "
+"the extension to get to a specific person or department."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:626
+msgid ""
+"There are 65535 IP ports, but a server usually processes requests that come "
+"in on only one of them. It is like telling the phone room operator that we "
+"are now at work and available to answer the phone at a specific extension. "
+"We use man:bind[2] to tell sockets which port we want to serve."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:630
+#, no-wrap
+msgid "int bind(int s, const struct sockaddr *addr, socklen_t addrlen);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:635
+msgid ""
+"Beside specifying the port in `addr`, the server may include its IP "
+"address. However, it can just use the symbolic constant INADDR_ANY to "
+"indicate it will serve all requests to the specified port regardless of what "
+"its IP address is. This symbol, along with several similar ones, is "
+"declared in [.filename]#netinet/in.h#"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:639
+#, no-wrap
+msgid "#define\tINADDR_ANY\t\t(u_int32_t)0x00000000\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:644
+msgid ""
+"Suppose we were writing a server for the _daytime_ protocol over TCP/IP. "
+"Recall that it uses port 13. Our `sockaddr_in` structure would look like "
+"this:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:645
+#, no-wrap
+msgid "Example Server sockaddr_in"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:646
+#, no-wrap
+msgid "sainserv.png"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:649
+#, no-wrap
+msgid "`listen`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:653
+msgid ""
+"To continue our office phone analogy, after you have told the phone central "
+"operator what extension you will be at, you now walk into your office, and "
+"make sure your own phone is plugged in and the ringer is turned on. Plus, "
+"you make sure your call waiting is activated, so you can hear the phone ring "
+"even while you are talking to someone."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:655
+msgid "The server ensures all of that with the man:listen[2] function."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:659
+#, no-wrap
+msgid "int listen(int s, int backlog);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:663
+msgid ""
+"In here, the `backlog` variable tells sockets how many incoming requests to "
+"accept while you are busy processing the last request. In other words, it "
+"determines the maximum size of the queue of pending connections."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:665
+#, no-wrap
+msgid "`accept`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:670
+msgid ""
+"After you hear the phone ringing, you accept the call by answering the "
+"call. You have now established a connection with your client. This "
+"connection remains active until either you or your client hang up."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:672
+msgid "The server accepts the connection by using the man:accept[2] function."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:676
+#, no-wrap
+msgid "int accept(int s, struct sockaddr *addr, socklen_t *addrlen);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:680
+msgid ""
+"Note that this time `addrlen` is a pointer. This is necessary because in "
+"this case it is the socket that fills out `addr`, the `sockaddr_in` "
+"structure."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:684
+msgid ""
+"The return value is an integer. Indeed, the `accept` returns a _new "
+"socket_. You will use this new socket to communicate with the client."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:686
+msgid ""
+"What happens to the old socket? It continues to listen for more requests "
+"(remember the `backlog` variable we passed to `listen`?) until we `close` it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:690
+msgid ""
+"Now, the new socket is meant only for communications. It is fully "
+"connected. We cannot pass it to `listen` again, trying to accept additional "
+"connections."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:692
+#, no-wrap
+msgid "Our First Server"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:696
+msgid ""
+"Our first server will be somewhat more complex than our first client was: "
+"Not only do we have more sockets functions to use, but we need to write it "
+"as a daemon."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:699
+msgid ""
+"This is best achieved by creating a _child process_ after binding the port. "
+"The main process then exits and returns control to the shell (or whatever "
+"program invoked it)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:701
+msgid ""
+"The child calls `listen`, then starts an endless loop, which accepts a "
+"connection, serves it, and eventually closes its socket."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:717
+#, no-wrap
+msgid ""
+"/*\n"
+" * daytimed - a port 13 server\n"
+" *\n"
+" * Programmed by G. Adam Stanislav\n"
+" * June 19, 2001\n"
+" */\n"
+"#include <stdio.h>\n"
+"#include <string.h>\n"
+"#include <time.h>\n"
+"#include <unistd.h>\n"
+"#include <sys/types.h>\n"
+"#include <sys/socket.h>\n"
+"#include <netinet/in.h>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:719
+#, no-wrap
+msgid "#define BACKLOG 4\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:727
+#, no-wrap
+msgid ""
+"int main() {\n"
+" register int s, c;\n"
+" int b;\n"
+" struct sockaddr_in sa;\n"
+" time_t t;\n"
+" struct tm *tm;\n"
+" FILE *client;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:732
+#, no-wrap
+msgid ""
+" if ((s = socket(PF_INET, SOCK_STREAM, 0)) < 0) {\n"
+" perror(\"socket\");\n"
+" return 1;\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:734
+#, no-wrap
+msgid " bzero(&sa, sizeof sa);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:737
+#, no-wrap
+msgid ""
+" sa.sin_family = AF_INET;\n"
+" sa.sin_port = htons(13);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:740
+#, no-wrap
+msgid ""
+" if (INADDR_ANY)\n"
+" sa.sin_addr.s_addr = htonl(INADDR_ANY);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:745
+#, no-wrap
+msgid ""
+" if (bind(s, (struct sockaddr *)&sa, sizeof sa) < 0) {\n"
+" perror(\"bind\");\n"
+" return 2;\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:758
+#, no-wrap
+msgid ""
+" switch (fork()) {\n"
+" case -1:\n"
+" perror(\"fork\");\n"
+" return 3;\n"
+" break;\n"
+" default:\n"
+" close(s);\n"
+" return 0;\n"
+" break;\n"
+" case 0:\n"
+" break;\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:760
+#, no-wrap
+msgid " listen(s, BACKLOG);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:763
+#, no-wrap
+msgid ""
+" for (;;) {\n"
+" b = sizeof sa;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:768
+#, no-wrap
+msgid ""
+" if ((c = accept(s, (struct sockaddr *)&sa, &b)) < 0) {\n"
+" perror(\"daytimed accept\");\n"
+" return 4;\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:773
+#, no-wrap
+msgid ""
+" if ((client = fdopen(c, \"w\")) == NULL) {\n"
+" perror(\"daytimed fdopen\");\n"
+" return 5;\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:776
+#, no-wrap
+msgid ""
+" if ((t = time(NULL)) < 0) {\n"
+" perror(\"daytimed time\");\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:779
+#, no-wrap
+msgid ""
+" return 6;\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:788
+#, no-wrap
+msgid ""
+" tm = gmtime(&t);\n"
+" fprintf(client, \"%.4i-%.2i-%.2iT%.2i:%.2i:%.2iZ\\n\",\n"
+" tm->tm_year + 1900,\n"
+" tm->tm_mon + 1,\n"
+" tm->tm_mday,\n"
+" tm->tm_hour,\n"
+" tm->tm_min,\n"
+" tm->tm_sec);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:792
+#, no-wrap
+msgid ""
+" fclose(client);\n"
+" }\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:797
+msgid ""
+"We start by creating a socket. Then we fill out the `sockaddr_in` structure "
+"in `sa`. Note the conditional use of INADDR_ANY:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:802
+#, no-wrap
+msgid ""
+"if (INADDR_ANY)\n"
+" sa.sin_addr.s_addr = htonl(INADDR_ANY);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:809
+msgid ""
+"Its value is `0`. Since we have just used `bzero` on the entire structure, "
+"it would be redundant to set it to `0` again. But if we port our code to "
+"some other system where INADDR_ANY is perhaps not a zero, we need to assign "
+"it to `sa.sin_addr.s_addr`. Most modern C compilers are clever enough to "
+"notice that INADDR_ANY is a constant. As long as it is a zero, they will "
+"optimize the entire conditional statement out of the code."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:813
+msgid ""
+"After we have called `bind` successfully, we are ready to become a _daemon_: "
+"We use `fork` to create a child process. In both, the parent and the child, "
+"the `s` variable is our socket. The parent process will not need it, so it "
+"calls `close`, then it returns `0` to inform its own parent it had "
+"terminated successfully."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:818
+msgid ""
+"Meanwhile, the child process continues working in the background. It calls "
+"`listen` and sets its backlog to `4`. It does not need a large value here "
+"because _daytime_ is not a protocol many clients request all the time, and "
+"because it can process each request instantly anyway."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:820
+msgid ""
+"Finally, the daemon starts an endless loop, which performs the following "
+"steps:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:823
+msgid ""
+"Call `accept`. It waits here until a client contacts it. At that point, it "
+"receives a new socket, `c`, which it can use to communicate with this "
+"particular client."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:824
+msgid ""
+"It uses the C function `fdopen` to turn the socket from a low-level _file "
+"descriptor_ to a C-style `FILE` pointer. This will allow the use of "
+"`fprintf` later on."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:825
+msgid ""
+"It checks the time, and prints it in the _ISO 8601_ format to the `client` "
+"\"file\". It then uses `fclose` to close the file. That will automatically "
+"close the socket as well."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:827
+msgid "We can _generalize_ this, and use it as a model for many other servers:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:828
+#, no-wrap
+msgid "Sequential Server"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:829
+#, no-wrap
+msgid "serv.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:835
+msgid ""
+"This flowchart is good for _sequential servers_, i.e., servers that can "
+"serve one client at a time, just as we were able to with our _daytime_ "
+"server. This is only possible whenever there is no real \"conversation\" "
+"going on between the client and the server: As soon as the server detects a "
+"connection to the client, it sends out some data and closes the connection. "
+"The entire operation may take nanoseconds, and it is finished."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:838
+msgid ""
+"The advantage of this flowchart is that, except for the brief moment after "
+"the parent ``fork``s and before it exits, there is always only one _process_ "
+"active: Our server does not take up much memory and other system resources."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:842
+msgid ""
+"Note that we have added _initialize daemon_ in our flowchart. We did not "
+"need to initialize our own daemon, but this is a good place in the flow of "
+"the program to set up any `signal` handlers, open any files we may need, etc."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:846
+msgid ""
+"Just about everything in the flow chart can be used literally on many "
+"different servers. The _serve_ entry is the exception. We think of it as a "
+"_\"black box\"_, i.e., something you design specifically for your own "
+"server, and just \"plug it into the rest.\""
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:852
+msgid ""
+"Not all protocols are that simple. Many receive a request from the client, "
+"reply to it, then receive another request from the same client. As a "
+"result, they do not know in advance how long they will be serving the "
+"client. Such servers usually start a new process for each client. While "
+"the new process is serving its client, the daemon can continue listening for "
+"more connections."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:855
+msgid ""
+"Now, go ahead, save the above source code as [.filename]#daytimed.c# (it is "
+"customary to end the names of daemons with the letter `d`). After you have "
+"compiled it, try running it:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:861
+#, no-wrap
+msgid ""
+"% ./daytimed\n"
+"bind: Permission denied\n"
+"%\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:865
+msgid ""
+"What happened here? As you will recall, the _daytime_ protocol uses port "
+"13. But all ports below 1024 are reserved to the superuser (otherwise, "
+"anyone could start a daemon pretending to serve a commonly used port, while "
+"causing a security breach)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:867
+msgid "Try again, this time as the superuser:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:872
+#, no-wrap
+msgid ""
+"# ./daytimed\n"
+"#\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:875
+msgid "What... Nothing? Let us try again:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:879
+#, no-wrap
+msgid "# ./daytimed\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:882
+#, no-wrap
+msgid ""
+"bind: Address already in use\n"
+"#\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:887
+msgid ""
+"Every port can only be bound by one program at a time. Our first attempt "
+"was indeed successful: It started the child daemon and returned quietly. It "
+"is still running and will continue to run until you either kill it, or any "
+"of its system calls fail, or you reboot the system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:890
+msgid ""
+"Fine, we know it is running in the background. But is it working? How do we "
+"know it is a proper _daytime_ server? Simple:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:894
+#, no-wrap
+msgid "% telnet localhost 13\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:903
+#, no-wrap
+msgid ""
+"Trying ::1...\n"
+"telnet: connect to address ::1: Connection refused\n"
+"Trying 127.0.0.1...\n"
+"Connected to localhost.\n"
+"Escape character is '^]'.\n"
+"2001-06-19T21:04:42Z\n"
+"Connection closed by foreign host.\n"
+"%\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:908
+msgid ""
+"telnet tried the new IPv6, and failed. It retried with IPv4 and succeeded. "
+"The daemon works."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:911
+msgid ""
+"If you have access to another UNIX(R) system via telnet, you can use it to "
+"test accessing the server remotely. My computer does not have a static IP "
+"address, so this is what I did:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:915
+#, no-wrap
+msgid "% who\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:919
+#, no-wrap
+msgid ""
+"whizkid ttyp0 Jun 19 16:59 (216.127.220.143)\n"
+"xxx ttyp1 Jun 19 16:06 (xx.xx.xx.xx)\n"
+"% telnet 216.127.220.143 13\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:926
+#, no-wrap
+msgid ""
+"Trying 216.127.220.143...\n"
+"Connected to r47.bfm.org.\n"
+"Escape character is '^]'.\n"
+"2001-06-19T21:31:11Z\n"
+"Connection closed by foreign host.\n"
+"%\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:929
+msgid "Again, it worked. Will it work using the domain name?"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:933
+#, no-wrap
+msgid "% telnet r47.bfm.org 13\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:940
+#, no-wrap
+msgid ""
+"Trying 216.127.220.143...\n"
+"Connected to r47.bfm.org.\n"
+"Escape character is '^]'.\n"
+"2001-06-19T21:31:40Z\n"
+"Connection closed by foreign host.\n"
+"%\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:944
+msgid ""
+"By the way, telnet prints the _Connection closed by foreign host_ message "
+"after our daemon has closed the socket. This shows us that, indeed, using "
+"`fclose(client);` in our code works as advertised."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:946
+#, no-wrap
+msgid "Helper Functions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:952
+msgid ""
+"FreeBSD C library contains many helper functions for sockets programming. "
+"For example, in our sample client we hard coded the `time.nist.gov` IP "
+"address. But we do not always know the IP address. Even if we do, our "
+"software is more flexible if it allows the user to enter the IP address, or "
+"even the domain name."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:954
+#, no-wrap
+msgid "`gethostbyname`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:957
+msgid ""
+"While there is no way to pass the domain name directly to any of the sockets "
+"functions, the FreeBSD C library comes with the man:gethostbyname[3] and man:"
+"gethostbyname2[3] functions, declared in [.filename]#netdb.h#."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:962
+#, no-wrap
+msgid ""
+"struct hostent * gethostbyname(const char *name);\n"
+"struct hostent * gethostbyname2(const char *name, int af);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:966
+msgid ""
+"Both return a pointer to the `hostent` structure, with much information "
+"about the domain. For our purposes, the `h_addr_list[0]` field of the "
+"structure points at `h_length` bytes of the correct address, already stored "
+"in the _network byte order_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:968
+msgid ""
+"This allows us to create a much more flexible-and much more useful-version "
+"of our daytime program:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:983
+#, no-wrap
+msgid ""
+"/*\n"
+" * daytime.c\n"
+" *\n"
+" * Programmed by G. Adam Stanislav\n"
+" * 19 June 2001\n"
+" */\n"
+"#include <stdio.h>\n"
+"#include <string.h>\n"
+"#include <sys/types.h>\n"
+"#include <sys/socket.h>\n"
+"#include <netinet/in.h>\n"
+"#include <netdb.h>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:991
+#, no-wrap
+msgid ""
+"int main(int argc, char *argv[]) {\n"
+" register int s;\n"
+" register int bytes;\n"
+" struct sockaddr_in sa;\n"
+" struct hostent *he;\n"
+" char buf[BUFSIZ+1];\n"
+" char *host;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1001
+#, no-wrap
+msgid ""
+" sa.sin_family = AF_INET;\n"
+" sa.sin_port = htons(13);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1003
+#, no-wrap
+msgid " host = (argc > 1) ? (char *)argv[1] : \"time.nist.gov\";\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1008
+#, no-wrap
+msgid ""
+" if ((he = gethostbyname(host)) == NULL) {\n"
+" herror(host);\n"
+" return 2;\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1010
+#, no-wrap
+msgid " bcopy(he->h_addr_list[0],&sa.sin_addr, he->h_length);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1015
+#, no-wrap
+msgid ""
+" if (connect(s, (struct sockaddr *)&sa, sizeof sa) < 0) {\n"
+" perror(\"connect\");\n"
+" return 3;\n"
+" }\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1018
+#, no-wrap
+msgid ""
+" while ((bytes = read(s, buf, BUFSIZ)) > 0)\n"
+" write(1, buf, bytes);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1028
+msgid ""
+"We now can type a domain name (or an IP address, it works both ways) on the "
+"command line, and the program will try to connect to its _daytime_ server. "
+"Otherwise, it will still default to `time.nist.gov`. However, even in this "
+"case we will use `gethostbyname` rather than hard coding `192.43.244.18`. "
+"That way, even if its IP address changes in the future, we will still find "
+"it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1032
+msgid ""
+"Since it takes virtually no time to get the time from your local server, you "
+"could run daytime twice in a row: First to get the time from `time.nist."
+"gov`, the second time from your own system. You can then compare the "
+"results and see how exact your system clock is:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1036
+#, no-wrap
+msgid "% daytime ; daytime localhost\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1040
+#, no-wrap
+msgid ""
+"52080 01-06-20 04:02:33 50 0 0 390.2 UTC(NIST) *\n"
+"2001-06-20T04:02:35Z\n"
+"%\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1043
+msgid "As you can see, my system was two seconds ahead of the NIST time."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1045
+#, no-wrap
+msgid "`getservbyname`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1049
+msgid ""
+"Sometimes you may not be sure what port a certain service uses. The man:"
+"getservbyname[3] function, also declared in [.filename]#netdb.h# comes in "
+"very handy in those cases:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1053
+#, no-wrap
+msgid "struct servent * getservbyname(const char *name, const char *proto);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1056
+msgid ""
+"The `servent` structure contains the `s_port`, which contains the proper "
+"port, already in _network byte order_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1058
+msgid ""
+"Had we not known the correct port for the _daytime_ service, we could have "
+"found it this way:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1068
+#, no-wrap
+msgid ""
+"struct servent *se;\n"
+" ...\n"
+" if ((se = getservbyname(\"daytime\", \"tcp\")) == NULL {\n"
+" fprintf(stderr, \"Cannot determine which port to use.\\n\");\n"
+" return 7;\n"
+" }\n"
+" sa.sin_port = se->s_port;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1075
+msgid ""
+"You usually do know the port. But if you are developing a new protocol, you "
+"may be testing it on an unofficial port. Some day, you will register the "
+"protocol and its port (if nowhere else, at least in your [.filename]#/etc/"
+"services#, which is where `getservbyname` looks). Instead of returning an "
+"error in the above code, you just use the temporary port number. Once you "
+"have listed the protocol in [.filename]#/etc/services#, your software will "
+"find its port without you having to rewrite the code."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1077
+#, no-wrap
+msgid "Concurrent Servers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1081
+msgid ""
+"Unlike a sequential server, a _concurrent server_ has to be able to serve "
+"more than one client at a time. For example, a _chat server_ may be serving "
+"a specific client for hours-it cannot wait till it stops serving a client "
+"before it serves the next one."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1083
+msgid "This requires a significant change in our flowchart:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1084
+#, no-wrap
+msgid "Concurrent Server"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1085
+#, no-wrap
+msgid "serv2.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1089
+msgid ""
+"We moved the _serve_ from the _daemon process_ to its own _server process_. "
+"However, because each child process inherits all open files (and a socket is "
+"treated just like a file), the new process inherits not only the _\"accepted "
+"handle,\"_ i.e., the socket returned by the `accept` call, but also the _top "
+"socket_, i.e., the one opened by the top process right at the beginning."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1092
+msgid ""
+"However, the _server process_ does not need this socket and should `close` "
+"it immediately. Similarly, the _daemon process_ no longer needs the "
+"_accepted socket_, and not only should, but _must_ `close` it-otherwise, it "
+"will run out of available _file descriptors_ sooner or later."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1095
+msgid ""
+"After the _server process_ is done serving, it should close the _accepted "
+"socket_. Instead of returning to `accept`, it now exits."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1102
+msgid ""
+"Under UNIX(R), a process does not really _exit_. Instead, it _returns_ to "
+"its parent. Typically, a parent process ``wait``s for its child process, "
+"and obtains a return value. However, our _daemon process_ cannot simply "
+"stop and wait. That would defeat the whole purpose of creating additional "
+"processes. But if it never does `wait`, its children will become _zombies_-"
+"no longer functional but still roaming around."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1105
+msgid ""
+"For that reason, the _daemon process_ needs to set _signal handlers_ in its "
+"_initialize daemon_ phase. At least a SIGCHLD signal has to be processed, "
+"so the daemon can remove the zombie return values from the system and "
+"release the system resources they are taking up."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1108
+msgid ""
+"That is why our flowchart now contains a _process signals_ box, which is not "
+"connected to any other box. By the way, many servers also process SIGHUP, "
+"and typically interpret as the signal from the superuser that they should "
+"reread their configuration files. This allows us to change settings without "
+"having to kill and restart these servers."
+msgstr ""
diff --git a/documentation/content/en/books/developers-handbook/testing/_index.adoc b/documentation/content/en/books/developers-handbook/testing/_index.adoc
index 72d039d239..4aae09a4ad 100644
--- a/documentation/content/en/books/developers-handbook/testing/_index.adoc
+++ b/documentation/content/en/books/developers-handbook/testing/_index.adoc
@@ -7,7 +7,7 @@ description: Regression and Performance Testing
tags: ["Regression", "Performance Testing", "Testing", "Tinderbox"]
showBookMenu: true
weight: 7
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/testing/"
---
[[testing]]
diff --git a/documentation/content/en/books/developers-handbook/testing/_index.po b/documentation/content/en/books/developers-handbook/testing/_index.po
new file mode 100644
index 0000000000..c1d21ea137
--- /dev/null
+++ b/documentation/content/en/books/developers-handbook/testing/_index.po
@@ -0,0 +1,614 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:1
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:14
+#, no-wrap
+msgid "Regression and Performance Testing"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:1
+#, no-wrap
+msgid "Chapter 6. Regression and Performance Testing"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:52
+msgid ""
+"Regression tests are used to exercise a particular bit of the system to "
+"check that it works as expected, and to make sure that old bugs are not "
+"reintroduced."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:54
+msgid ""
+"The FreeBSD regression testing tools can be found in the FreeBSD source tree "
+"in the directory [.filename]#src/tools/regression#."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:56
+#, no-wrap
+msgid "Micro Benchmark Checklist"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:59
+msgid ""
+"This section contains hints for doing proper micro-benchmarking on FreeBSD "
+"or of FreeBSD itself."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:61
+msgid ""
+"It is not possible to use all of the suggestions below every single time, "
+"but the more used, the better the benchmark's ability to test small "
+"differences will be."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:63
+msgid "Disable APM and any other kind of clock fiddling (ACPI ?)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:64
+msgid ""
+"Run in single user mode. E.g., man:cron[8], and other daemons only add "
+"noise. The man:sshd[8] daemon can also cause problems. If ssh access is "
+"required during testing either disable the SSHv1 key regeneration, or kill "
+"the parent `sshd` daemon during the tests."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:65
+msgid "Do not run man:ntpd[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:66
+msgid ""
+"If man:syslog[3] events are generated, run man:syslogd[8] with an empty [."
+"filename]#/etc/syslogd.conf#, otherwise, do not run it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:67
+msgid "Minimize disk-I/O, avoid it entirely if possible."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:68
+msgid "Do not mount file systems that are not needed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:69
+msgid ""
+"Mount [.filename]#/#, [.filename]#/usr#, and any other file system as read-"
+"only if possible. This removes atime updates to disk (etc.) from the I/O "
+"picture."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:70
+msgid ""
+"Reinitialize the read/write test file system with man:newfs[8] and populate "
+"it from a man:tar[1] or man:dump[8] file before every run. Unmount and mount "
+"it before starting the test. This results in a consistent file system "
+"layout. For a worldstone test this would apply to [.filename]#/usr/obj# "
+"(just reinitialize with `newfs` and mount). To get 100% reproducibility, "
+"populate the file system from a man:dd[1] file (i.e.: `dd if=myimage of=/dev/"
+"ad0s1h bs=1m`)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:71
+msgid "Use malloc backed or preloaded man:md[4] partitions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:72
+msgid ""
+"Reboot between individual iterations of the test, this gives a more "
+"consistent state."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:73
+msgid ""
+"Remove all non-essential device drivers from the kernel. For instance if USB "
+"is not needed for the test, do not put USB in the kernel. Drivers which "
+"attach often have timeouts ticking away."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:74
+msgid ""
+"Unconfigure hardware that are not in use. Detach disks with man:"
+"atacontrol[8] and man:camcontrol[8] if the disks are not used for the test."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:75
+msgid ""
+"Do not configure the network unless it is being tested, or wait until after "
+"the test has been performed to ship the results off to another computer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:77
+msgid ""
+"If the system must be connected to a public network, watch out for spikes of "
+"broadcast traffic. Even though it is hardly noticeable, it will take up CPU "
+"cycles. Multicast has similar caveats."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:78
+msgid ""
+"Put each file system on its own disk. This minimizes jitter from head-seek "
+"optimizations."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:79
+msgid ""
+"Minimize output to serial or VGA consoles. Running output into files gives "
+"less jitter. (Serial consoles easily become a bottleneck.) Do not touch "
+"keyboard while the test is running, even kbd:[space] or kbd:[back-space] "
+"shows up in the numbers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:80
+msgid ""
+"Make sure the test is long enough, but not too long. If the test is too "
+"short, timestamping is a problem. If it is too long temperature changes and "
+"drift will affect the frequency of the quartz crystals in the computer. Rule "
+"of thumb: more than a minute, less than an hour."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:81
+msgid ""
+"Try to keep the temperature as stable as possible around the machine. This "
+"affects both quartz crystals and disk drive algorithms. To get real stable "
+"clock, consider stabilized clock injection. E.g., get a OCXO + PLL, inject "
+"output into clock circuits instead of motherboard xtal. Contact {phk} for "
+"more information about this."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:82
+msgid ""
+"Run the test at least 3 times but it is better to run more than 20 times "
+"both for \"before\" and \"after\" code. Try to interleave if possible (i.e.: "
+"do not run 20 times before then 20 times after), this makes it possible to "
+"spot environmental effects. Do not interleave 1:1, but 3:3, this makes it "
+"possible to spot interaction effects."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:85
+msgid ""
+"A good pattern is: `bababa{bbbaaa}*`. This gives hint after the first 1+1 "
+"runs (so it is possible to stop the test if it goes entirely the wrong way), "
+"a standard deviation after the first 3+3 (gives a good indication if it is "
+"going to be worth a long run) and trending and interaction numbers later on."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:86
+msgid ""
+"Use man:ministat[1] to see if the numbers are significant. Consider buying "
+"\"Cartoon guide to statistics\" ISBN: 0062731025, highly recommended, if you "
+"have forgotten or never learned about standard deviation and Student's T."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:87
+msgid ""
+"Do not use background man:fsck[8] unless the test is a benchmark of "
+"background `fsck`. Also, disable `background_fsck` in [.filename]#/etc/rc."
+"conf# unless the benchmark is not started at least 60+\"``fsck`` runtime\" "
+"seconds after the boot, as man:rc[8] wakes up and checks if `fsck` needs to "
+"run on any file systems when background `fsck` is enabled. Likewise, make "
+"sure there are no snapshots lying around unless the benchmark is a test with "
+"snapshots."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:88
+msgid ""
+"If the benchmark show unexpected bad performance, check for things like high "
+"interrupt volume from an unexpected source. Some versions of ACPI have been "
+"reported to \"misbehave\" and generate excess interrupts. To help diagnose "
+"odd test results, take a few snapshots of `vmstat -i` and look for anything "
+"unusual."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:89
+msgid ""
+"Make sure to be careful about optimization parameters for kernel and "
+"userspace, likewise debugging. It is easy to let something slip through and "
+"realize later the test was not comparing the same thing."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:90
+msgid ""
+"Do not ever benchmark with the `WITNESS` and `INVARIANTS` kernel options "
+"enabled unless the test is interested to benchmarking those features. "
+"`WITNESS` can cause 400%+ drops in performance. Likewise, userspace man:"
+"malloc[3] parameters default differently in -CURRENT from the way they ship "
+"in production releases."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:92
+#, no-wrap
+msgid "The FreeBSD Source Tinderbox"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:95
+msgid "The source Tinderbox consists of:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:97
+msgid ""
+"A build script, [.filename]#tinderbox#, that automates checking out a "
+"specific version of the FreeBSD source tree and building it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:98
+msgid ""
+"A supervisor script, [.filename]#tbmaster#, that monitors individual "
+"Tinderbox instances, logs their output, and emails failure notices."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:99
+msgid ""
+"A CGI script named [.filename]#index.cgi# that reads a set of tbmaster logs "
+"and presents an easy-to-read HTML summary of them."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:100
+msgid ""
+"A set of build servers that continually test the tip of the most important "
+"FreeBSD code branches."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:101
+msgid ""
+"A webserver that keeps a complete set of Tinderbox logs and displays an up-"
+"to-date summary."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:104
+msgid ""
+"The scripts are maintained and were developed by {des}, and are now written "
+"in Perl, a move on from their original incarnation as shell scripts. All "
+"scripts and configuration files are kept in https://www.freebsd.org/cgi/"
+"cvsweb.cgi/projects/tinderbox/[/projects/tinderbox/]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:106
+msgid ""
+"For more information about the tinderbox and tbmaster scripts at this stage, "
+"see their respective man pages: tinderbox(1) and tbmaster(1)."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:107
+#, no-wrap
+msgid "The index.cgi Script"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:114
+msgid ""
+"The [.filename]#index.cgi# script generates the HTML summary of tinderbox "
+"and tbmaster logs. Although originally intended to be used as a CGI script, "
+"as indicated by its name, this script can also be run from the command line "
+"or from a man:cron[8] job, in which case it will look for logs in the "
+"directory where the script is located. It will automatically detect "
+"context, generating HTTP headers when it is run as a CGI script. It "
+"conforms to XHTML standards and is styled using CSS."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:117
+msgid ""
+"The script starts in the `main()` block by attempting to verify that it is "
+"running on the official Tinderbox website. If it is not, a page indicating "
+"it is not an official website is produced, and a URL to the official site is "
+"provided."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:120
+msgid ""
+"Next, it scans the log directory to get an inventory of configurations, "
+"branches and architectures for which log files exist, to avoid hard-coding a "
+"list into the script and potentially ending up with blank rows or columns. "
+"This information is derived from the names of the log files matching the "
+"following pattern:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:124
+#, no-wrap
+msgid "tinderbox-$config-$branch-$arch-$machine.{brief,full}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:128
+msgid ""
+"The configurations used on the official Tinderbox build servers are named "
+"for the branches they build. For example, the `releng_8` configuration is "
+"used to build `RELENG_8` as well as all still-supported release branches."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:130
+msgid ""
+"Once all of this startup procedure has been successfully completed, "
+"`do_config()` is called for each configuration."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:132
+msgid ""
+"The `do_config()` function generates HTML for a single Tinderbox "
+"configuration."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:135
+msgid ""
+"It works by first generating a header row, then iterating over each branch "
+"build with the specified configuration, producing a single row of results "
+"for each in the following manner:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:137
+msgid "For each item:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:139
+msgid "For each machine within that architecture:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:141
+msgid "If a brief log file exists, then:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:143
+msgid "Call `success()` to determine the outcome of the build."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:144
+msgid "Output the modification size."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:145
+msgid ""
+"Output the size of the brief log file with a link to the log file itself."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:146
+msgid "If a full log file also exists, then:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:148
+msgid ""
+"Output the size of the full log file with a link to the log file itself."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:150
+msgid "Otherwise:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:152
+msgid "No output."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:154
+msgid ""
+"The `success()` function mentioned above scans a brief log file for the "
+"string \"tinderbox run completed\" in order to determine whether the build "
+"was successful."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:157
+msgid ""
+"Configurations and branches are sorted according to their branch rank. This "
+"is computed as follows:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:159
+msgid "`HEAD` and `CURRENT` have rank 9999."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:160
+msgid "`RELENG_x` has rank __``xx``__99."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:161
+msgid "`RELENG_x_y` has rank _xxyy_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:164
+msgid ""
+"This means that `HEAD` always ranks highest, and `RELENG` branches are "
+"ranked in numerical order, with each `STABLE` branch ranking higher than the "
+"release branches forked off of it. For instance, for FreeBSD 8, the order "
+"from highest to lowest would be:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:166
+msgid "`RELENG_8` (branch rank 899)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:167
+msgid "`RELENG_8_3` (branch rank 803)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:168
+msgid "`RELENG_8_2` (branch rank 802)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:169
+msgid "`RELENG_8_1` (branch rank 801)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:170
+msgid "`RELENG_8_0` (branch rank 800)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:174
+msgid ""
+"The colors that Tinderbox uses for each cell in the table are defined by "
+"CSS. Successful builds are displayed with green text; unsuccessful builds "
+"are displayed with red text. The color fades as time passes since the "
+"corresponding build, with every half an hour bringing the color closer to "
+"grey."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:175
+#, no-wrap
+msgid "Official Build Servers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:178
+msgid ""
+"The official Tinderbox build servers are hosted by http://www.sentex."
+"ca[Sentex Data Communications], who also host the FreeBSD Netperf Cluster."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:180
+msgid "Three build servers currently exist:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:182
+msgid "_freebsd-current.sentex.ca_ builds:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:184
+msgid ""
+"`HEAD` for amd64, arm, i386, i386/pc98, ia64, mips, powerpc, powerpc64, and "
+"sparc64."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:185
+msgid ""
+"`RELENG_9` and supported 9._X_ branches for amd64, arm, i386, i386/pc98, "
+"ia64, mips, powerpc, powerpc64, and sparc64."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:187
+msgid "_freebsd-stable.sentex.ca_ builds:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:189
+msgid ""
+"`RELENG_8` and supported 8._X_ branches for amd64, i386, i386/pc98, ia64, "
+"mips, powerpc and sparc64."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:191
+msgid "_freebsd-legacy.sentex.ca_ builds:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:193
+msgid ""
+"`RELENG_7` and supported 7._X_ branches for amd64, i386, i386/pc98, ia64, "
+"powerpc, and sparc64."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:194
+#, no-wrap
+msgid "Official Summary Site"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:197
+msgid ""
+"Summaries and logs from the official build servers are available online at "
+"http://tinderbox.FreeBSD.org[http://tinderbox.FreeBSD.org], hosted by {des} "
+"and set up as follows:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:199
+msgid ""
+"A man:cron[8] job checks the build servers at regular intervals and "
+"downloads any new log files using man:rsync[1]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:199
+msgid "Apache is set up to use [.filename]#index.cgi# as `DirectoryIndex`."
+msgstr ""
diff --git a/documentation/content/en/books/developers-handbook/tools/_index.adoc b/documentation/content/en/books/developers-handbook/tools/_index.adoc
index e94ebd62cb..c1dbec7094 100644
--- a/documentation/content/en/books/developers-handbook/tools/_index.adoc
+++ b/documentation/content/en/books/developers-handbook/tools/_index.adoc
@@ -9,7 +9,7 @@ description: Programming Tools
tags: ["tools", "Interpreters", "Compilers", "cc", "make", "Debugging", "lldb", "gdb", "clang", "Emacs"]
showBookMenu: true
weight: 3
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/tools/"
---
[[tools]]
@@ -158,14 +158,14 @@ Ruby::
Ruby is an interpreter, pure object-oriented programming language.
It has become widely popular because of its easy to understand syntax, flexibility when writing code, and the ability to easily develop and maintain large, complex programs.
+
-Ruby is available from the Ports Collection as package:lang/ruby25[].
+Ruby is available from the Ports Collection as package:lang/ruby32[].
Tcl and Tk::
Tcl is an embeddable, interpreted language, that has become widely used and became popular mostly because of its portability to many platforms.
It can be used both for quickly writing small, prototype applications, or (when combined with Tk, a GUI toolkit) fully-fledged, featureful programs.
+
Various versions of Tcl are available as ports for FreeBSD.
-The latest version, Tcl 8.5, can be found in package:lang/tcl87[].
+The latest version, Tcl 8.7, can be found in package:lang/tcl87[].
=== Compilers
@@ -434,7 +434,7 @@ free(foo);
Making one of these mistakes will not always lead to an error, but they are always bad practice.
Some systems and compilers are more tolerant than others,
-which is why programs that ran well on one system can crash when you try them on an another.
+which is why programs that run well on one system can crash when you try them on another.
==== Sometimes when I get a core dump it says bus error. It says in my UNIX(R) book that this means a hardware problem, but the computer still seems to be working. Is this true?
@@ -655,16 +655,7 @@ as they are very complicated (and if you do look at them, make sure you have a f
`Make` is a very powerful tool, and can do much more than the simple example above shows.
Unfortunately, there are several different versions of `make`, and they all differ considerably.
The best way to learn what they can do is probably to read the documentation-hopefully this introduction will have given you a base from which you can do this.
-
-The version of make that comes with FreeBSD is the Berkeley make; there is a tutorial for it in [.filename]#/usr/src/share/doc/psd/12.make#.
-To view it, do
-
-[source,bash]
-....
-% zmore paper.ascii.gz
-....
-
-in that directory.
+The man:make[1] manual page offers a comprehensive discussion of variables, arguments, and how to use make.
Many applications in the ports use GNU make, which has a very good set of "info" pages.
If you have installed any of these ports, GNU make will automatically have been installed as `gmake`.
@@ -688,28 +679,25 @@ to the file. Once you have done this, you can type `info` and then select [.guim
Using a debugger allows running the program under more controlled circumstances.
Typically, it is possible to step through the program a line at a time, inspect the value of variables, change them, tell the debugger to run up to a certain point and then stop, and so on.
It is also possible to attach to a program that is already running, or load a core file to investigate why the program crashed.
-It is even possible to debug the kernel, though that is a little trickier than the user applications we will be discussing in this section.
This section is intended to be a quick introduction to using debuggers and does not cover specialized topics such as debugging the kernel.
For more information about that, refer to crossref:kerneldebug[kerneldebug,Kernel Debugging].
-The standard debugger supplied with FreeBSD {rel121-current} is called `lldb` (LLVM debugger).
+The standard debugger supplied with FreeBSD is called `lldb` (LLVM debugger).
As it is part of the standard installation for that release, there is no need to do anything special to use it.
It has good command help, accessible via the `help` command, as well as https://lldb.llvm.org/[a web tutorial and documentation].
[NOTE]
====
-The `lldb` command is available for FreeBSD {rel113-current} extref:{handbook}[from ports or packages, ports-using] as package:devel/llvm[].
-This will install the default version of lldb (currently 9.0).
+The `lldb` command is also available extref:{handbook}ports/[from ports or packages, ports-using] as package:devel/llvm[].
====
The other debugger available with FreeBSD is called `gdb` (GNU debugger).
-Unlike lldb, it is not installed by default on FreeBSD {rel121-current};
+Unlike lldb, it is not installed by default on FreeBSD;
to use it, extref:{handbook}#ports-using/[install] package:devel/gdb[] from ports or packages.
-The version installed by default on FreeBSD {rel113-current} is old; instead, install package:devel/gdb[] there as well.
-It has quite good on-line help, as well as a set of info pages.
+It has excellent on-line help, as well as a set of info pages.
-Which one to use is largely a matter of taste.
+The two debuggers have a similar feature set, so which one to use is largely a matter of taste.
If familiar with one only, use that one.
People familiar with neither or both but wanting to use one from inside Emacs will need to use `gdb` as `lldb` is unsupported by Emacs.
Otherwise, try both and see which one you prefer.
@@ -884,7 +872,7 @@ In "the good old days", programmers had to print out hex listings of core files
Incidentally, under FreeBSD and other 4.4BSD systems, a core file is called [.filename]#progname.core# instead of just [.filename]#core#, to make it clearer which program a core file belongs to.
To examine a core file, specify the name of the core file in addition to the program itself.
-Instead of starting up `lldb` in the usual way, type `lldb -c _progname_.core -- _progname_`
+Instead of starting up `lldb` in the usual way, type `lldb -c _progname_.core \-- _progname_`.
The debugger will display something like this:
@@ -1260,7 +1248,7 @@ Instead of using a proprietary macro language for configuration, Emacs uses a ve
Working with Emacs Lisp can be quite helpful if you want to go on and learn something like Common Lisp.
Emacs Lisp has many features of Common Lisp, although it is considerably smaller (and thus easier to master).
-The best way to learn Emacs Lisp is to download the link:ftp://ftp.gnu.org/old-gnu/emacs/elisp-manual-19-2.4.tar.gz[Emacs Tutorial]
+The best way to learn Emacs Lisp is to read the online link:https://www.gnu.org/software/emacs/manual/elisp.html[Emacs Reference] manual.
However, there is no need to actually know any Lisp to get started with configuring Emacs,
as I have included a sample [.filename]#.emacs#, which should be enough to get you started.
diff --git a/documentation/content/en/books/developers-handbook/tools/_index.po b/documentation/content/en/books/developers-handbook/tools/_index.po
new file mode 100644
index 0000000000..c1ccabc167
--- /dev/null
+++ b/documentation/content/en/books/developers-handbook/tools/_index.po
@@ -0,0 +1,3356 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:34-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:16
+#, no-wrap
+msgid "Programming Tools"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1
+#, no-wrap
+msgid "Chapter 2. Programming Tools"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:56
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:63
+msgid ""
+"This chapter is an introduction to using some of the programming tools "
+"supplied with FreeBSD, although much of it will be applicable to many other "
+"versions of UNIX(R). It does _not_ attempt to describe coding in any "
+"detail. Most of the chapter assumes little or no previous programming "
+"knowledge, although it is hoped that most programmers will find something of "
+"value in it."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:65
+#, no-wrap
+msgid "Introduction"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:72
+msgid ""
+"FreeBSD offers an excellent development environment. Compilers for C and C+"
+"+ and an assembler come with the basic system, not to mention classic "
+"UNIX(R) tools such as `sed` and `awk`. If that is not enough, there are "
+"many more compilers and interpreters in the Ports collection. The following "
+"section, <<tools-programming,Introduction to Programming>>, lists some of "
+"the available options. FreeBSD is very compatible with standards such as "
+"POSIX(R) and ANSI C, as well with its own BSD heritage, so it is possible to "
+"write applications that will compile and run with little or no modification "
+"on a wide range of platforms."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:76
+msgid ""
+"However, all this power can be rather overwhelming at first if you have "
+"never written programs on a UNIX(R) platform before. This document aims to "
+"help you get up and running, without getting too deeply into more advanced "
+"topics. The intention is that this document should give you enough of the "
+"basics to be able to make some sense of the documentation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:78
+msgid ""
+"Most of the document requires little or no knowledge of programming, "
+"although it does assume a basic competence with using UNIX(R) and a "
+"willingness to learn!"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:80
+#, no-wrap
+msgid "Introduction to Programming"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:86
+msgid ""
+"A program is a set of instructions that tell the computer to do various "
+"things; sometimes the instruction it has to perform depends on what happened "
+"when it performed a previous instruction. This section gives an overview of "
+"the two main ways in which you can give these instructions, or \"commands\" "
+"as they are usually called. One way uses an _interpreter_, the other a "
+"_compiler_. As human languages are too difficult for a computer to "
+"understand in an unambiguous way, commands are usually written in one or "
+"other languages specially designed for the purpose."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:87
+#, no-wrap
+msgid "Interpreters"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:92
+msgid ""
+"With an interpreter, the language comes as an environment, where you type in "
+"commands at a prompt and the environment executes them for you. For more "
+"complicated programs, you can type the commands into a file and get the "
+"interpreter to load the file and execute the commands in it. If anything "
+"goes wrong, many interpreters will drop you into a debugger to help you "
+"track down the problem."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:97
+msgid ""
+"The advantage of this is that you can see the results of your commands "
+"immediately, and mistakes can be corrected readily. The biggest "
+"disadvantage comes when you want to share your programs with someone. They "
+"must have the same interpreter, or you must have some way of giving it to "
+"them, and they need to understand how to use it. Also users may not "
+"appreciate being thrown into a debugger if they press the wrong key! From a "
+"performance point of view, interpreters can use up a lot of memory, and "
+"generally do not generate code as efficiently as compilers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:102
+msgid ""
+"In my opinion, interpreted languages are the best way to start if you have "
+"not done any programming before. This kind of environment is typically "
+"found with languages like Lisp, Smalltalk, Perl and Basic. It could also be "
+"argued that the UNIX(R) shell (`sh`, `csh`) is itself an interpreter, and "
+"many people do in fact write shell \"scripts\" to help with various "
+"\"housekeeping\" tasks on their machine. Indeed, part of the original "
+"UNIX(R) philosophy was to provide lots of small utility programs that could "
+"be linked together in shell scripts to perform useful tasks."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:103
+#, no-wrap
+msgid "Interpreters Available with FreeBSD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:106
+msgid ""
+"Here is a list of interpreters that are available from the FreeBSD Ports "
+"Collection, with a brief discussion of some of the more popular interpreted "
+"languages."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:108
+msgid ""
+"Instructions on how to get and install applications from the Ports "
+"Collection can be found in the extref:{handbook}[Ports section, ports-using] "
+"of the handbook."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:109
+#, no-wrap
+msgid "BASIC"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:113
+msgid ""
+"Short for Beginner's All-purpose Symbolic Instruction Code. Developed in "
+"the 1950s for teaching University students to program and provided with "
+"every self-respecting personal computer in the 1980s, BASIC has been the "
+"first programming language for many programmers. It is also the foundation "
+"for Visual Basic."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:115
+msgid ""
+"The Bywater Basic Interpreter can be found in the Ports Collection as "
+"package:lang/bwbasic[] and the Phil Cockroft's Basic Interpreter (formerly "
+"Rabbit Basic) is available as package:lang/pbasic[]."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:116
+#, no-wrap
+msgid "Lisp"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:120
+msgid ""
+"A language that was developed in the late 1950s as an alternative to the "
+"\"number-crunching\" languages that were popular at the time. Instead of "
+"being based on numbers, Lisp is based on lists; in fact, the name is short "
+"for \"List Processing\". It is very popular in AI (Artificial Intelligence) "
+"circles."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:122
+msgid ""
+"Lisp is an extremely powerful and sophisticated language, but can be rather "
+"large and unwieldy."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:127
+msgid ""
+"Various implementations of Lisp that can run on UNIX(R) systems are "
+"available in the Ports Collection for FreeBSD. GNU Common Lisp can be found "
+"as package:lang/gcl[]. CLISP by Bruno Haible and Michael Stoll is available "
+"as package:lang/clisp[]. For CMUCL, which includes a highly-optimizing "
+"compiler too, or simpler Lisp implementations like SLisp, which implements "
+"most of the Common Lisp constructs in a few hundred lines of C code, package:"
+"lang/cmucl[] and package:lang/slisp[] are available respectively."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:128
+#, no-wrap
+msgid "Perl"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:130
+msgid ""
+"Very popular with system administrators for writing scripts; also often used "
+"on World Wide Web servers for writing CGI scripts."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:132
+msgid ""
+"Perl is available in the Ports Collection as package:lang/perl5.24[] for all "
+"FreeBSD releases."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:133
+#, no-wrap
+msgid "Scheme"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:137
+msgid ""
+"A dialect of Lisp that is rather more compact and cleaner than Common Lisp. "
+"Popular in Universities as it is simple enough to teach to undergraduates as "
+"a first language, while it has a high enough level of abstraction to be used "
+"in research work."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:140
+msgid ""
+"Scheme is available from the Ports Collection as package:lang/elk[] for the "
+"Elk Scheme Interpreter. The MIT Scheme Interpreter can be found in package:"
+"lang/mit-scheme[] and the SCM Scheme Interpreter in package:lang/scm[]."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:141
+#, no-wrap
+msgid "Icon"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:144
+msgid ""
+"Icon is a high-level language with extensive facilities for processing "
+"strings and structures. The version of Icon for FreeBSD can be found in the "
+"Ports Collection as package:lang/icon[]."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:145
+#, no-wrap
+msgid "Logo"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:148
+msgid ""
+"Logo is a language that is easy to learn, and has been used as an "
+"introductory programming language in various courses. It is an excellent "
+"tool to work with when teaching programming to smaller age groups, as it "
+"makes creation of elaborate geometric shapes an easy task."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:150
+msgid ""
+"The latest version of Logo for FreeBSD is available from the Ports "
+"Collection in package:lang/logo[]."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:151
+#, no-wrap
+msgid "Python"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:154
+msgid ""
+"Python is an Object-Oriented, interpreted language. Its advocates argue "
+"that it is one of the best languages to start programming with, since it is "
+"relatively easy to start with, but is not limited in comparison to other "
+"popular interpreted languages that are used for the development of large, "
+"complex applications (Perl and Tcl are two other languages that are popular "
+"for such tasks)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:156
+msgid ""
+"The latest version of Python is available from the Ports Collection in "
+"package:lang/python[]."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:157
+#, no-wrap
+msgid "Ruby"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:160
+msgid ""
+"Ruby is an interpreter, pure object-oriented programming language. It has "
+"become widely popular because of its easy to understand syntax, flexibility "
+"when writing code, and the ability to easily develop and maintain large, "
+"complex programs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:162
+msgid "Ruby is available from the Ports Collection as package:lang/ruby32[]."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:163
+#, no-wrap
+msgid "Tcl and Tk"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:166
+msgid ""
+"Tcl is an embeddable, interpreted language, that has become widely used and "
+"became popular mostly because of its portability to many platforms. It can "
+"be used both for quickly writing small, prototype applications, or (when "
+"combined with Tk, a GUI toolkit) fully-fledged, featureful programs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:169
+msgid ""
+"Various versions of Tcl are available as ports for FreeBSD. The latest "
+"version, Tcl 8.5, can be found in package:lang/tcl87[]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:170
+#, no-wrap
+msgid "Compilers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:177
+msgid ""
+"Compilers are rather different. First of all, you write your code in a file "
+"(or files) using an editor. You then run the compiler and see if it accepts "
+"your program. If it did not compile, grit your teeth and go back to the "
+"editor; if it did compile and gave you a program, you can run it either at a "
+"shell command prompt or in a debugger to see if it works properly.footnote:"
+"[If you run it in the shell, you may get a core dump.]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:184
+msgid ""
+"Obviously, this is not quite as direct as using an interpreter. However it "
+"allows you to do a lot of things which are very difficult or even impossible "
+"with an interpreter, such as writing code which interacts closely with the "
+"operating system-or even writing your own operating system! It is also "
+"useful if you need to write very efficient code, as the compiler can take "
+"its time and optimize the code, which would not be acceptable in an "
+"interpreter. Moreover, distributing a program written for a compiler is "
+"usually more straightforward than one written for an interpreter-you can "
+"just give them a copy of the executable, assuming they have the same "
+"operating system as you."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:188
+msgid ""
+"As the edit-compile-run-debug cycle is rather tedious when using separate "
+"programs, many commercial compiler makers have produced Integrated "
+"Development Environments (IDEs for short). FreeBSD does not include an IDE "
+"in the base system, but package:devel/kdevelop[] is available in the Ports "
+"Collection and many use Emacs for this purpose. Using Emacs as an IDE is "
+"discussed in <<emacs>>."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:190
+#, no-wrap
+msgid "Compiling with `cc`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:195
+msgid ""
+"This section deals with the clang compiler for C and C++, as it's installed "
+"with the FreeBSD base system. Starting with FreeBSD 10.X `clang` is "
+"installed as `cc`; the GNU compiler package:lang/gcc[gcc] is available in "
+"the Ports Collection. The details of producing a program with an "
+"interpreter vary considerably between interpreters, and are usually well "
+"covered in the documentation and on-line help for the interpreter."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:198
+msgid ""
+"Once you have written your masterpiece, the next step is to convert it into "
+"something that will (hopefully!) run on FreeBSD. This usually involves "
+"several steps, each of which is done by a separate program."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:201
+msgid ""
+"Pre-process your source code to remove comments and do other tricks like "
+"expanding macros in C."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:202
+msgid ""
+"Check the syntax of your code to see if you have obeyed the rules of the "
+"language. If you have not, it will complain!"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:203
+msgid ""
+"Convert the source code into assembly language-this is very close to machine "
+"code, but still understandable by humans. Allegedly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:204
+msgid ""
+"Convert the assembly language into machine code-yep, we are talking bits and "
+"bytes, ones and zeros here."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:205
+msgid ""
+"Check that you have used things like functions and global variables in a "
+"consistent way. For example, if you have called a non-existent function, it "
+"will complain."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:206
+msgid ""
+"If you are trying to produce an executable from several source code files, "
+"work out how to fit them all together."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:207
+msgid ""
+"Work out how to produce something that the system's run-time loader will be "
+"able to load into memory and run."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:208
+msgid "Finally, write the executable on the filesystem."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:211
+msgid ""
+"The word _compiling_ is often used to refer to just steps 1 to 4-the others "
+"are referred to as _linking_. Sometimes step 1 is referred to as _pre-"
+"processing_ and steps 3-4 as _assembling_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:213
+msgid ""
+"Fortunately, almost all this detail is hidden from you, as `cc` is a front "
+"end that manages calling all these programs with the right arguments for "
+"you; simply typing"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:217
+#, no-wrap
+msgid "% cc foobar.c\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:221
+msgid ""
+"will cause [.filename]#foobar.c# to be compiled by all the steps above. If "
+"you have more than one file to compile, just do something like"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:225
+#, no-wrap
+msgid "% cc foo.c bar.c\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:230
+msgid ""
+"Note that the syntax checking is just that - checking the syntax. It will "
+"not check for any logical mistakes you may have made, like putting the "
+"program into an infinite loop, or using a bubble sort when you meant to use "
+"a binary sort.footnote:[In case you did not know, a binary sort is an "
+"efficient way of sorting things into order and a bubble sort is not.]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:233
+msgid ""
+"There are lots and lots of options for `cc`, which are all in the manual "
+"page. Here are a few of the most important ones, with examples of how to "
+"use them."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:234
+#, no-wrap
+msgid "`-o _filename_`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:236
+msgid ""
+"The output name of the file. If you do not use this option, `cc` will "
+"produce an executable called [.filename]#a.out#.footnote:[The reasons for "
+"this are buried in the mists of history.]"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:241
+#, no-wrap
+msgid ""
+"% cc foobar.c executable is a.out\n"
+"% cc -o foobar foobar.c executable is foobar\n"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:243
+#, no-wrap
+msgid "`-c`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:246
+msgid ""
+"Just compile the file, do not link it. Useful for toy programs where you "
+"just want to check the syntax, or if you are using a [.filename]#Makefile#."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:250
+#, no-wrap
+msgid "% cc -c foobar.c\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:254
+msgid ""
+"This will produce an _object file_ (not an executable) called [."
+"filename]#foobar.o#. This can be linked together with other object files "
+"into an executable."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:255
+#, no-wrap
+msgid "`-g`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:261
+msgid ""
+"Create a debug version of the executable. This makes the compiler put "
+"information into the executable about which line of which source file "
+"corresponds to which function call. A debugger can use this information to "
+"show the source code as you step through the program, which is _very_ "
+"useful; the disadvantage is that all this extra information makes the "
+"program much bigger. Normally, you compile with `-g` while you are "
+"developing a program and then compile a \"release version\" without `-g` "
+"when you are satisfied it works properly."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:266
+#, no-wrap
+msgid "% cc -g foobar.c\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:269
+msgid ""
+"This will produce a debug version of the program. footnote:[Note, we did not "
+"use the -o flag to specify the executable name, so we will get an executable "
+"called a.out. Producing a debug version called foobar is left as an exercise "
+"for the reader!]"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:270
+#, no-wrap
+msgid "`-O`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:274
+msgid ""
+"Create an optimized version of the executable. The compiler performs "
+"various clever tricks to try to produce an executable that runs faster than "
+"normal. You can add a number after the `-O` to specify a higher level of "
+"optimization, but this often exposes bugs in the compiler's optimizer."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:278
+#, no-wrap
+msgid "% cc -O -o foobar foobar.c\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:281
+msgid "This will produce an optimized version of [.filename]#foobar#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:284
+msgid ""
+"The following three flags will force `cc` to check that your code complies "
+"to the relevant international standard, often referred to as the ANSI "
+"standard, though strictly speaking it is an ISO standard."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:285
+#, no-wrap
+msgid "`-Wall`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:288
+msgid ""
+"Enable all the warnings which the authors of `cc` believe are worthwhile. "
+"Despite the name, it will not enable all the warnings `cc` is capable of."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:289
+#, no-wrap
+msgid "`-ansi`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:292
+msgid ""
+"Turn off most, but not all, of the non-ANSI C features provided by `cc`. "
+"Despite the name, it does not guarantee strictly that your code will comply "
+"to the standard."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:293
+#, no-wrap
+msgid "`-pedantic`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:295
+msgid "Turn off _all_ ``cc``'s non-ANSI C features."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:300
+msgid ""
+"Without these flags, `cc` will allow you to use some of its non-standard "
+"extensions to the standard. Some of these are very useful, but will not "
+"work with other compilers - in fact, one of the main aims of the standard is "
+"to allow people to write code that will work with any compiler on any "
+"system. This is known as _portable code_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:303
+msgid ""
+"Generally, you should try to make your code as portable as possible, as "
+"otherwise you may have to completely rewrite the program later to get it to "
+"work somewhere else - and who knows what you may be using in a few years "
+"time?"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:307
+#, no-wrap
+msgid "% cc -Wall -ansi -pedantic -o foobar foobar.c\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:310
+msgid ""
+"This will produce an executable [.filename]#foobar# after checking [."
+"filename]#foobar.c# for standard compliance."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:311
+#, no-wrap
+msgid "`-l__library__`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:313
+msgid "Specify a function library to be used at link time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:316
+msgid ""
+"The most common example of this is when compiling a program that uses some "
+"of the mathematical functions in C. Unlike most other platforms, these are "
+"in a separate library from the standard C one and you have to tell the "
+"compiler to add it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:320
+msgid ""
+"The rule is that if the library is called [.filename]#libsomething.a#, you "
+"give `cc` the argument `-l__something__`. For example, the math library is "
+"[.filename]#libm.a#, so you give `cc` the argument `-lm`. A common "
+"\"gotcha\" with the math library is that it has to be the last library on "
+"the command line."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:324
+#, no-wrap
+msgid "% cc -o foobar foobar.c -lm\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:327
+msgid "This will link the math library functions into [.filename]#foobar#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:330
+msgid ""
+"If you are compiling C++ code, use {c-plus-plus-command}. {c-plus-plus-"
+"command} can also be invoked as {clang-plus-plus-command} on FreeBSD."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:334
+#, no-wrap
+msgid "% c++ -o foobar foobar.cc\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:337
+msgid ""
+"This will both produce an executable [.filename]#foobar# from the C++ source "
+"file [.filename]#foobar.cc#."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:338
+#, no-wrap
+msgid "Common `cc` Queries and Problems"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:340
+#, no-wrap
+msgid "I compiled a file called foobar.c and I cannot find an executable called foobar. Where has it gone?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:344
+msgid ""
+"Remember, `cc` will call the executable [.filename]#a.out# unless you tell "
+"it differently. Use the `-o _filename_` option:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:348
+#, no-wrap
+msgid "% cc -o foobar foobar.c\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:350
+#, no-wrap
+msgid "OK, I have an executable called foobar, I can see it when I run ls, but when I type in foobar at the command prompt it tells me there is no such file. Why can it not find it?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:354
+msgid ""
+"Unlike MS-DOS(R), UNIX(R) does not look in the current directory when it is "
+"trying to find out which executable you want it to run, unless you tell it "
+"to. Type `./foobar`, which means \"run the file called [.filename]#foobar# "
+"in the current directory.\""
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:355
+#, no-wrap
+msgid "I called my executable test, but nothing happens when I run it. What is going on?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:359
+msgid ""
+"Most UNIX(R) systems have a program called `test` in [.filename]#/usr/bin# "
+"and the shell is picking that one up before it gets to checking the current "
+"directory. Either type:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:363
+#, no-wrap
+msgid "% ./test\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:366
+msgid "or choose a better name for your program!"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:367
+#, no-wrap
+msgid "I compiled my program and it seemed to run all right at first, then there was an error and it said something about core dumped. What does that mean?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:371
+msgid ""
+"The name _core dump_ dates back to the very early days of UNIX(R), when the "
+"machines used core memory for storing data. Basically, if the program "
+"failed under certain conditions, the system would write the contents of core "
+"memory to disk in a file called [.filename]#core#, which the programmer "
+"could then pore over to find out what went wrong."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:372
+#, no-wrap
+msgid "Fascinating stuff, but what I am supposed to do now?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:375
+msgid "Use a debugger to analyze the core (see <<debugging>>)."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:376
+#, no-wrap
+msgid "When my program dumped core, it said something about a segmentation fault. What is that?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:380
+msgid ""
+"This basically means that your program tried to perform some sort of illegal "
+"operation on memory; UNIX(R) is designed to protect the operating system and "
+"other programs from rogue programs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:382
+msgid "Common causes for this are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:384
+msgid "Trying to write to a NULL pointer, eg"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:389
+#, no-wrap
+msgid ""
+"char *foo = NULL;\n"
+"strcpy(foo, \"bang!\");\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:392
+msgid "Using a pointer that has not been initialized, eg"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:397
+#, no-wrap
+msgid ""
+"char *foo;\n"
+"strcpy(foo, \"bang!\");\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:401
+msgid ""
+"The pointer will have some random value that, with luck, will point into an "
+"area of memory that is not available to your program and the kernel will "
+"kill your program before it can do any damage. If you are unlucky, it will "
+"point somewhere inside your own program and corrupt one of your data "
+"structures, causing the program to fail mysteriously."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:402
+msgid "Trying to access past the end of an array, eg"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:407
+#, no-wrap
+msgid ""
+"int bar[20];\n"
+"bar[27] = 6;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:410
+msgid "Trying to store something in read-only memory, eg"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:415
+#, no-wrap
+msgid ""
+"char *foo = \"My string\";\n"
+"strcpy(foo, \"bang!\");\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:418
+msgid ""
+"UNIX(R) compilers often put string literals like `\"My string\"` into read-"
+"only areas of memory."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:419
+msgid "Doing naughty things with `malloc()` and `free()`, eg"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:424
+#, no-wrap
+msgid ""
+"char bar[80];\n"
+"free(bar);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:427
+msgid "or"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:433
+#, no-wrap
+msgid ""
+"char *foo = malloc(27);\n"
+"free(foo);\n"
+"free(foo);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:438
+msgid ""
+"Making one of these mistakes will not always lead to an error, but they are "
+"always bad practice. Some systems and compilers are more tolerant than "
+"others, which is why programs that ran well on one system can crash when you "
+"try them on an another."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:439
+#, no-wrap
+msgid "Sometimes when I get a core dump it says bus error. It says in my UNIX(R) book that this means a hardware problem, but the computer still seems to be working. Is this true?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:443
+msgid ""
+"No, fortunately not (unless of course you really do have a hardware "
+"problem...). This is usually another way of saying that you accessed memory "
+"in a way you should not have."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:444
+#, no-wrap
+msgid "This dumping core business sounds as though it could be quite useful, if I can make it happen when I want to. Can I do this, or do I have to wait until there is an error?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:447
+msgid "Yes, just go to another console or xterm, do"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:451
+#, no-wrap
+msgid "% ps\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:454
+msgid "to find out the process ID of your program, and do"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:458
+#, no-wrap
+msgid "% kill -ABRT pid\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:461
+msgid "where `_pid_` is the process ID you looked up."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:464
+msgid ""
+"This is useful if your program has got stuck in an infinite loop, for "
+"instance. If your program happens to trap SIGABRT, there are several other "
+"signals which have a similar effect."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:467
+msgid ""
+"Alternatively, you can create a core dump from inside your program, by "
+"calling the `abort()` function. See the manual page of man:abort[3] to "
+"learn more."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:470
+msgid ""
+"If you want to create a core dump from outside your program, but do not want "
+"the process to terminate, you can use the `gcore` program. See the manual "
+"page of man:gcore[1] for more information."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:472
+#, no-wrap
+msgid "Make"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:474
+#, no-wrap
+msgid "What is `make`?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:477
+msgid ""
+"When you are working on a simple program with only one or two source files, "
+"typing in"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:481
+#, no-wrap
+msgid "% cc file1.c file2.c\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:484
+msgid ""
+"is not too bad, but it quickly becomes very tedious when there are several "
+"files-and it can take a while to compile, too."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:487
+msgid ""
+"One way to get around this is to use object files and only recompile the "
+"source file if the source code has changed. So we could have something like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:491
+#, no-wrap
+msgid "% cc file1.o file2.o … file37.c …\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:495
+msgid ""
+"if we had changed [.filename]#file37.c#, but not any of the others, since "
+"the last time we compiled. This may speed up the compilation quite a bit, "
+"but does not solve the typing problem."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:497
+msgid ""
+"Or we could write a shell script to solve the typing problem, but it would "
+"have to re-compile everything, making it very inefficient on a large project."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:499
+msgid ""
+"What happens if we have hundreds of source files lying about? What if we are "
+"working in a team with other people who forget to tell us when they have "
+"changed one of their source files that we use?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:502
+msgid ""
+"Perhaps we could put the two solutions together and write something like a "
+"shell script that would contain some kind of magic rule saying when a source "
+"file needs compiling. Now all we need now is a program that can understand "
+"these rules, as it is a bit too complicated for the shell."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:507
+msgid ""
+"This program is called `make`. It reads in a file, called a _makefile_, "
+"that tells it how different files depend on each other, and works out which "
+"files need to be re-compiled and which ones do not. For example, a rule "
+"could say something like \"if [.filename]#fromboz.o# is older than [."
+"filename]#fromboz.c#, that means someone must have changed [."
+"filename]#fromboz.c#, so it needs to be re-compiled.\" The makefile also has "
+"rules telling make _how_ to re-compile the source file, making it a much "
+"more powerful tool."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:510
+msgid ""
+"Makefiles are typically kept in the same directory as the source they apply "
+"to, and can be called [.filename]#makefile#, [.filename]#Makefile# or [."
+"filename]#MAKEFILE#. Most programmers use the name [.filename]#Makefile#, "
+"as this puts it near the top of a directory listing, where it can easily be "
+"seen.footnote:[They do not use the MAKEFILE form as block capitals are often "
+"used for documentation files like README.]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:511
+#, no-wrap
+msgid "Example of Using `make`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:514
+msgid "Here is a very simple make file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:519
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:545
+#, no-wrap
+msgid ""
+"foo: foo.c\n"
+"\tcc -o foo foo.c\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:522
+msgid "It consists of two lines, a dependency line and a creation line."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:529
+msgid ""
+"The dependency line here consists of the name of the program (known as the "
+"_target_), followed by a colon, then whitespace, then the name of the source "
+"file. When `make` reads this line, it looks to see if [.filename]#foo# "
+"exists; if it exists, it compares the time [.filename]#foo# was last "
+"modified to the time [.filename]#foo.c# was last modified. If [."
+"filename]#foo# does not exist, or is older than [.filename]#foo.c#, it then "
+"looks at the creation line to find out what to do. In other words, this is "
+"the rule for working out when [.filename]#foo.c# needs to be re-compiled."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:533
+msgid ""
+"The creation line starts with a tab (press kbd:[tab]) and then the command "
+"you would type to create [.filename]#foo# if you were doing it at a command "
+"prompt. If [.filename]#foo# is out of date, or does not exist, `make` then "
+"executes this command to create it. In other words, this is the rule which "
+"tells make how to re-compile [.filename]#foo.c#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:537
+msgid ""
+"So, when you type `make`, it will make sure that [.filename]#foo# is up to "
+"date with respect to your latest changes to [.filename]#foo.c#. This "
+"principle can be extended to [.filename]#Makefile#'s with hundreds of "
+"targets-in fact, on FreeBSD, it is possible to compile the entire operating "
+"system just by typing `make world` in the appropriate directory!"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:540
+msgid ""
+"Another useful property of makefiles is that the targets do not have to be "
+"programs. For instance, we could have a make file that looks like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:548
+#, no-wrap
+msgid ""
+"install:\n"
+"\tcp foo /home/me\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:551
+msgid "We can tell make which target we want to make by typing:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:555
+#, no-wrap
+msgid "% make target\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:559
+msgid ""
+"`make` will then only look at that target and ignore any others. For "
+"example, if we type `make foo` with the makefile above, make will ignore the "
+"`install` target."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:562
+msgid ""
+"If we just type `make` on its own, make will always look at the first target "
+"and then stop without looking at any others. So if we typed `make` here, it "
+"will just go to the `foo` target, re-compile [.filename]#foo# if necessary, "
+"and then stop without going on to the `install` target."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:566
+msgid ""
+"Notice that the `install` target does not actually depend on anything! This "
+"means that the command on the following line is always executed when we try "
+"to make that target by typing `make install`. In this case, it will copy [."
+"filename]#foo# into the user's home directory. This is often used by "
+"application makefiles, so that the application can be installed in the "
+"correct directory when it has been correctly compiled."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:571
+msgid ""
+"This is a slightly confusing subject to try to explain. If you do not quite "
+"understand how `make` works, the best thing to do is to write a simple "
+"program like \"hello world\" and a make file like the one above and "
+"experiment. Then progress to using more than one source file, or having the "
+"source file include a header file. `touch` is very useful here-it changes "
+"the date on a file without you having to edit it."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:572
+#, no-wrap
+msgid "Make and include-files"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:576
+msgid ""
+"C code often starts with a list of files to include, for example stdio.h. "
+"Some of these files are system-include files, some of them are from the "
+"project you are now working on:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:581
+#, no-wrap
+msgid ""
+"#include <stdio.h>\n"
+"#include \"foo.h\"\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:583
+#, no-wrap
+msgid "int main(....\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:586
+msgid ""
+"To make sure that this file is recompiled the moment [.filename]#foo.h# is "
+"changed, you have to add it in your [.filename]#Makefile#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:590
+#, no-wrap
+msgid "foo: foo.c foo.h\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:597
+msgid ""
+"The moment your project is getting bigger and you have more and more own "
+"include-files to maintain, it will be a pain to keep track of all include "
+"files and the files which are depending on it. If you change an include-"
+"file but forget to recompile all the files which are depending on it, the "
+"results will be devastating. `clang` has an option to analyze your files "
+"and to produce a list of include-files and their dependencies: `-MM`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:599
+msgid "If you add this to your Makefile:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:604
+#, no-wrap
+msgid ""
+"depend:\n"
+"\tcc -E -MM *.c > .depend\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:607
+msgid ""
+"and run `make depend`, the file [.filename]#.depend# will appear with a list "
+"of object-files, C-files and the include-files:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:611
+#, no-wrap
+msgid "foo.o: foo.c foo.h\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:614
+msgid ""
+"If you change [.filename]#foo.h#, next time you run `make` all files "
+"depending on [.filename]#foo.h# will be recompiled."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:616
+msgid ""
+"Do not forget to run `make depend` each time you add an include-file to one "
+"of your files."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:617
+#, no-wrap
+msgid "FreeBSD Makefiles"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:623
+msgid ""
+"Makefiles can be rather complicated to write. Fortunately, BSD-based "
+"systems like FreeBSD come with some very powerful ones as part of the "
+"system. One very good example of this is the FreeBSD ports system. Here is "
+"the essential part of a typical ports [.filename]#Makefile#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:628
+#, no-wrap
+msgid ""
+"MASTER_SITES= ftp://freefall.cdrom.com/pub/FreeBSD/LOCAL_PORTS/\n"
+"DISTFILES= scheme-microcode+dist-7.3-freebsd.tgz\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:630
+#, no-wrap
+msgid ".include <bsd.port.mk>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:633
+msgid ""
+"Now, if we go to the directory for this port and type `make`, the following "
+"happens:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:636
+msgid ""
+"A check is made to see if the source code for this port is already on the "
+"system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:637
+msgid ""
+"If it is not, an FTP connection to the URL in MASTER_SITES is set up to "
+"download the source."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:638
+msgid ""
+"The checksum for the source is calculated and compared it with one for a "
+"known, good, copy of the source. This is to make sure that the source was "
+"not corrupted while in transit."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:639
+msgid ""
+"Any changes required to make the source work on FreeBSD are applied-this is "
+"known as _patching_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:640
+msgid ""
+"Any special configuration needed for the source is done. (Many UNIX(R) "
+"program distributions try to work out which version of UNIX(R) they are "
+"being compiled on and which optional UNIX(R) features are present-this is "
+"where they are given the information in the FreeBSD ports scenario)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:641
+msgid ""
+"The source code for the program is compiled. In effect, we change to the "
+"directory where the source was unpacked and do `make`-the program's own make "
+"file has the necessary information to build the program."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:642
+msgid ""
+"We now have a compiled version of the program. If we wish, we can test it "
+"now; when we feel confident about the program, we can type `make install`. "
+"This will cause the program and any supporting files it needs to be copied "
+"into the correct location; an entry is also made into a `package database`, "
+"so that the port can easily be uninstalled later if we change our mind about "
+"it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:644
+msgid ""
+"Now I think you will agree that is rather impressive for a four line script!"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:648
+msgid ""
+"The secret lies in the last line, which tells `make` to look in the system "
+"makefile called [.filename]#bsd.port.mk#. It is easy to overlook this line, "
+"but this is where all the clever stuff comes from-someone has written a "
+"makefile that tells `make` to do all the things above (plus a couple of "
+"other things I did not mention, including handling any errors that may "
+"occur) and anyone can get access to that just by putting a single line in "
+"their own make file!"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:652
+msgid ""
+"If you want to have a look at these system makefiles, they are in [."
+"filename]#/usr/share/mk#, but it is probably best to wait until you have had "
+"a bit of practice with makefiles, as they are very complicated (and if you "
+"do look at them, make sure you have a flask of strong coffee handy!)"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:653
+#, no-wrap
+msgid "More Advanced Uses of `make`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:659
+msgid ""
+"`Make` is a very powerful tool, and can do much more than the simple example "
+"above shows. Unfortunately, there are several different versions of `make`, "
+"and they all differ considerably. The best way to learn what they can do is "
+"probably to read the documentation-hopefully this introduction will have "
+"given you a base from which you can do this. The man:make[1] manual page "
+"offers a comprehensive discussion of variables, arguments, and how to use "
+"make."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:663
+msgid ""
+"Many applications in the ports use GNU make, which has a very good set of "
+"\"info\" pages. If you have installed any of these ports, GNU make will "
+"automatically have been installed as `gmake`. It is also available as a "
+"port and package in its own right."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:666
+msgid ""
+"To view the info pages for GNU make, you will have to edit [.filename]#dir# "
+"in the [.filename]#/usr/local/info# directory to add an entry for it. This "
+"involves adding a line like"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:670
+#, no-wrap
+msgid " * Make: (make). The GNU Make utility.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:673
+msgid ""
+"to the file. Once you have done this, you can type `info` and then select [."
+"guimenuitem]#make# from the menu (or in Emacs, do `C-h i`)."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:675
+#, no-wrap
+msgid "Debugging"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:677
+#, no-wrap
+msgid "Introduction to Available Debuggers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:682
+msgid ""
+"Using a debugger allows running the program under more controlled "
+"circumstances. Typically, it is possible to step through the program a line "
+"at a time, inspect the value of variables, change them, tell the debugger to "
+"run up to a certain point and then stop, and so on. It is also possible to "
+"attach to a program that is already running, or load a core file to "
+"investigate why the program crashed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:685
+msgid ""
+"This section is intended to be a quick introduction to using debuggers and "
+"does not cover specialized topics such as debugging the kernel. For more "
+"information about that, refer to crossref:kerneldebug[kerneldebug,Kernel "
+"Debugging]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:689
+msgid ""
+"The standard debugger supplied with FreeBSD is called `lldb` (LLVM "
+"debugger). As it is part of the standard installation for that release, "
+"there is no need to do anything special to use it. It has good command "
+"help, accessible via the `help` command, as well as https://lldb.llvm.org/[a "
+"web tutorial and documentation]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:693
+msgid ""
+"The `lldb` command is also available extref:{handbook}ports/[from ports or "
+"packages, ports-using] as package:devel/llvm[]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:699
+msgid ""
+"The other debugger available with FreeBSD is called `gdb` (GNU debugger). "
+"Unlike lldb, it is not installed by default on FreeBSD; to use it, extref:"
+"{handbook}#ports-using/[install] package:devel/gdb[] from ports or "
+"packages. It has excellent on-line help, as well as a set of info pages."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:704
+msgid ""
+"The two debuggers have a similar feature set, so which one to use is largely "
+"a matter of taste. If familiar with one only, use that one. People "
+"familiar with neither or both but wanting to use one from inside Emacs will "
+"need to use `gdb` as `lldb` is unsupported by Emacs. Otherwise, try both "
+"and see which one you prefer."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:705
+#, no-wrap
+msgid "Using lldb"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:707
+#, no-wrap
+msgid "Starting lldb"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:710
+msgid "Start up lldb by typing"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:714
+#, no-wrap
+msgid "% lldb -- progname\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:716
+#, no-wrap
+msgid "Running a Program with lldb"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:721
+msgid ""
+"Compile the program with `-g` to get the most out of using `lldb`. It will "
+"work without, but will only display the name of the function currently "
+"running, instead of the source code. If it displays a line like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:725
+#, no-wrap
+msgid "Breakpoint 1: where = temp`main, address = …\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:728
+msgid ""
+"(without an indication of source code filename and line number) when setting "
+"a breakpoint, this means that the program was not compiled with `-g`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:733
+msgid ""
+"Most `lldb` commands have shorter forms that can be used instead. The "
+"longer forms are used here for clarity."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:738
+msgid ""
+"At the `lldb` prompt, type `breakpoint set -n main`. This will tell the "
+"debugger not to display the preliminary set-up code in the program being run "
+"and to stop execution at the beginning of the program's code. Now type "
+"`process launch` to actually start the program- it will start at the "
+"beginning of the set-up code and then get stopped by the debugger when it "
+"calls `main()`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:742
+msgid ""
+"To step through the program a line at a time, type `thread step-over`. When "
+"the program gets to a function call, step into it by typing `thread step-"
+"in`. Once in a function call, return from it by typing `thread step-out` or "
+"use `up` and `down` to take a quick look at the caller."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:745
+msgid ""
+"Here is a simple example of how to spot a mistake in a program with `lldb`. "
+"This is our program (with a deliberate mistake):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:749
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1023
+#, no-wrap
+msgid "#include <stdio.h>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:751
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1025
+#, no-wrap
+msgid "int bazz(int anint);\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:754
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1028
+#, no-wrap
+msgid ""
+"main() {\n"
+"\tint i;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:759
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1033
+#, no-wrap
+msgid ""
+"\tprintf(\"This is my program\\n\");\n"
+"\tbazz(i);\n"
+"\treturn 0;\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:764
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1038
+#, no-wrap
+msgid ""
+"int bazz(int anint) {\n"
+"\tprintf(\"You gave me %d\\n\", anint);\n"
+"\treturn anint;\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:767
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1041
+msgid ""
+"This program sets i to be `5` and passes it to a function `bazz()` which "
+"prints out the number we gave it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:769
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1043
+msgid "Compiling and running the program displays"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:776
+#, no-wrap
+msgid ""
+"% cc -g -o temp temp.c\n"
+"% ./temp\n"
+"This is my program\n"
+"anint = -5360\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:779
+msgid "That is not what was expected! Time to see what is going on!"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:790
+#, no-wrap
+msgid ""
+"% lldb -- temp\n"
+"(lldb) target create \"temp\"\n"
+"Current executable set to 'temp' (x86_64).\n"
+"(lldb) breakpoint set -n main\t\t\t\tSkip the set-up code\n"
+"Breakpoint 1: where = temp`main + 15 at temp.c:8:2, address = 0x00000000002012ef\tlldb puts breakpoint at main()\n"
+"(lldb) process launch\t\t\t\t\tRun as far as main()\n"
+"Process 9992 launching\n"
+"Process 9992 launched: '/home/pauamma/tmp/temp' (x86_64)\tProgram starts running\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:824
+#, no-wrap
+msgid ""
+"Process 9992 stopped\n"
+"* thread #1, name = 'temp', stop reason = breakpoint 1.1\tlldb stops at main()\n"
+" frame #0: 0x00000000002012ef temp`main at temp.c:8:2\n"
+" 5\tmain() {\n"
+" 6\t\tint i;\n"
+" 7\n"
+"-> 8\t\tprintf(\"This is my program\\n\");\t\t\tIndicates the line where it stopped\n"
+" 9\t\tbazz(i);\n"
+" 10\t\treturn 0;\n"
+" 11\t}\n"
+"(lldb) thread step-over\t\t\tGo to next line\n"
+"This is my program\t\t\t\t\t\tProgram prints out\n"
+"Process 9992 stopped\n"
+"* thread #1, name = 'temp', stop reason = step over\n"
+" frame #0: 0x0000000000201300 temp`main at temp.c:9:7\n"
+" 6\t\tint i;\n"
+" 7\n"
+" 8\t\tprintf(\"This is my program\\n\");\n"
+"-> 9\t\tbazz(i);\n"
+" 10\t\treturn 0;\n"
+" 11\t}\n"
+" 12\n"
+"(lldb) thread step-in\t\t\tstep into bazz()\n"
+"Process 9992 stopped\n"
+"* thread #1, name = 'temp', stop reason = step in\n"
+" frame #0: 0x000000000020132b temp`bazz(anint=-5360) at temp.c:14:29\tlldb displays stack frame\n"
+" 11\t}\n"
+" 12\n"
+" 13\tint bazz(int anint) {\n"
+"-> 14\t\tprintf(\"You gave me %d\\n\", anint);\n"
+" 15\t\treturn anint;\n"
+" 16\t}\n"
+"(lldb)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:827
+msgid ""
+"Hang on a minute! How did anint get to be `-5360`? Was it not set to `5` in "
+"`main()`? Let us move up to `main()` and have a look."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:841
+#, no-wrap
+msgid ""
+"(lldb) up\t\tMove up call stack\n"
+"frame #1: 0x000000000020130b temp`main at temp.c:9:2\t\tlldb displays stack frame\n"
+" 6\t\tint i;\n"
+" 7\n"
+" 8\t\tprintf(\"This is my program\\n\");\n"
+"-> 9\t\tbazz(i);\n"
+" 10\t\treturn 0;\n"
+" 11\t}\n"
+" 12\n"
+"(lldb) frame variable i\t\t\tShow us the value of i\n"
+"(int) i = -5360\t\t\t\t\t\t\tlldb displays -5360\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:845
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1086
+msgid ""
+"Oh dear! Looking at the code, we forgot to initialize i. We meant to put"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:851
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1092
+#, no-wrap
+msgid ""
+"...\n"
+"main() {\n"
+"\tint i;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:855
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1096
+#, no-wrap
+msgid ""
+"\ti = 5;\n"
+"\tprintf(\"This is my program\\n\");\n"
+"...\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:860
+msgid ""
+"but we left the `i=5;` line out. As we did not initialize i, it had "
+"whatever number happened to be in that area of memory when the program ran, "
+"which in this case happened to be `-5360`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:866
+msgid ""
+"The `lldb` command displays the stack frame every time we go into or out of "
+"a function, even if we are using `up` and `down` to move around the call "
+"stack. This shows the name of the function and the values of its arguments, "
+"which helps us keep track of where we are and what is going on. (The stack "
+"is a storage area where the program stores information about the arguments "
+"passed to functions and where to go when it returns from a function call.)"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:868
+#, no-wrap
+msgid "Examining a Core File with lldb"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:873
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1114
+msgid ""
+"A core file is basically a file which contains the complete state of the "
+"process when it crashed. In \"the good old days\", programmers had to print "
+"out hex listings of core files and sweat over machine code manuals, but now "
+"life is a bit easier. Incidentally, under FreeBSD and other 4.4BSD systems, "
+"a core file is called [.filename]#progname.core# instead of just [."
+"filename]#core#, to make it clearer which program a core file belongs to."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:876
+msgid ""
+"To examine a core file, specify the name of the core file in addition to the "
+"program itself. Instead of starting up `lldb` in the usual way, type `lldb -"
+"c _progname_.core \\-- _progname_`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:878
+msgid "The debugger will display something like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:885
+#, no-wrap
+msgid ""
+"% lldb -c [.filename]#progname.core# -- [.filename]#progname#\n"
+"(lldb) target create \"[.filename]#progname#\" --core \"[.filename]#progname#.core\"\n"
+"Core file '/home/pauamma/tmp/[.filename]#progname.core#' (x86_64) was loaded.\n"
+"(lldb)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:891
+msgid ""
+"In this case, the program was called [.filename]#progname#, so the core file "
+"is called [.filename]#progname.core#. The debugger does not display why the "
+"program crashed or where. For this, use `thread backtrace all`. This will "
+"also show how the function where the program dumped core was called."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:900
+#, no-wrap
+msgid ""
+"(lldb) thread backtrace all\n"
+"* thread #1, name = 'progname', stop reason = signal SIGSEGV\n"
+" * frame #0: 0x0000000000201347 progname`bazz(anint=5) at temp2.c:17:10\n"
+" frame #1: 0x0000000000201312 progname`main at temp2.c:10:2\n"
+" frame #2: 0x000000000020110f progname`_start(ap=<unavailable>, cleanup=<unavailable>) at crt1.c:76:7\n"
+"(lldb)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:905
+msgid ""
+"`SIGSEGV` indicates that the program tried to access memory (run code or "
+"read/write data usually) at a location that does not belong to it, but does "
+"not give any specifics. For that, look at the source code at line 10 of "
+"file temp2.c, in `bazz()`. The backtrace also says that in this case, "
+"`bazz()` was called from `main()`."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:906
+#, no-wrap
+msgid "Attaching to a Running Program with lldb"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:911
+msgid ""
+"One of the neatest features about `lldb` is that it can attach to a program "
+"that is already running. Of course, that requires sufficient permissions to "
+"do so. A common problem is stepping through a program that forks and "
+"wanting to trace the child, but the debugger will only trace the parent."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:913
+msgid ""
+"To do that, start up another `lldb`, use `ps` to find the process ID for the "
+"child, and do"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:917
+#, no-wrap
+msgid "(lldb) process attach -p pid\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:920
+msgid "in `lldb`, and then debug as usual."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:922
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1177
+msgid ""
+"For that to work well, the code that calls `fork` to create the child needs "
+"to do something like the following (courtesy of the `gdb` info pages):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:930
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1185
+#, no-wrap
+msgid ""
+"...\n"
+"if ((pid = fork()) < 0)\t\t/* _Always_ check this */\n"
+"\terror();\n"
+"else if (pid == 0) {\t\t/* child */\n"
+"\tint PauseMode = 1;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:936
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1191
+#, no-wrap
+msgid ""
+"\twhile (PauseMode)\n"
+"\t\tsleep(10);\t/* Wait until someone attaches to us */\n"
+"\t...\n"
+"} else {\t\t\t/* parent */\n"
+"\t...\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:939
+msgid ""
+"Now all that is needed is to attach to the child, set PauseMode to `0` with "
+"`expr PauseMode = 0` and wait for the `sleep()` call to return."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:940
+#, no-wrap
+msgid "Remote Debugging Using LLDB"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:946
+msgid ""
+"The described functionality is available starting with LLDB version 12.0.0. "
+"Users of FreeBSD releases containing an earlier LLDB version may wish to use "
+"the snapshot available in extref:{handbook}[ports or packages, ports-using], "
+"as package:devel/llvm-devel[]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:950
+msgid ""
+"Starting with LLDB 12.0.0, remote debugging is supported on FreeBSD. This "
+"means that `lldb-server` can be started to debug a program on one host, "
+"while the interactive `lldb` client connects to it from another one."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:952
+msgid ""
+"To launch a new process to be debugged remotely, run `lldb-server` on the "
+"remote server by typing"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:956
+#, no-wrap
+msgid "% lldb-server g host:port -- progname\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:959
+msgid ""
+"The process will be stopped immediately after launching, and `lldb-server` "
+"will wait for the client to connect."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:961
+msgid ""
+"Start `lldb` locally and type the following command to connect to the remote "
+"server:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:965
+#, no-wrap
+msgid "(lldb) gdb-remote host:port\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:969
+msgid ""
+"`lldb-server` can also attach to a running process. To do that, type the "
+"following on the remote server:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:973
+#, no-wrap
+msgid "% lldb-server g host:port --attach pid-or-name\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:975
+#, no-wrap
+msgid "Using gdb"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:977
+#, no-wrap
+msgid "Starting gdb"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:980
+msgid "Start up gdb by typing"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:984
+#, no-wrap
+msgid "% gdb progname\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:988
+msgid "although many people prefer to run it inside Emacs. To do this, type:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:992
+#, no-wrap
+msgid " M-x gdb RET progname RET\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:995
+msgid ""
+"Finally, for those finding its text-based command-prompt style off-putting, "
+"there is a graphical front-end for it (package:devel/xxgdb[]) in the Ports "
+"Collection."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:996
+#, no-wrap
+msgid "Running a Program with gdb"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1001
+msgid ""
+"Compile the program with `-g` to get the most out of using `gdb`. It will "
+"work without, but will only display the name of the function currently "
+"running, instead of the source code. A line like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1005
+#, no-wrap
+msgid "... (no debugging symbols found) ...\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1008
+msgid "when `gdb` starts up means that the program was not compiled with `-g`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1012
+msgid ""
+"At the `gdb` prompt, type `break main`. This will tell the debugger to skip "
+"the preliminary set-up code in the program being run and to stop execution "
+"at the beginning of the program's code. Now type `run` to start the "
+"program- it will start at the beginning of the set-up code and then get "
+"stopped by the debugger when it calls `main()`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1016
+msgid ""
+"To step through the program a line at a time, press `n`. When at a function "
+"call, step into it by pressing `s`. Once in a function call, return from it "
+"by pressing `f`, or use `up` and `down` to take a quick look at the caller."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1019
+msgid ""
+"Here is a simple example of how to spot a mistake in a program with `gdb`. "
+"This is our program (with a deliberate mistake):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1050
+#, no-wrap
+msgid ""
+"% cc -g -o temp temp.c\n"
+"% ./temp\n"
+"This is my program\n"
+"anint = 4231\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1053
+msgid "That was not what we expected! Time to see what is going on!"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1065
+#, no-wrap
+msgid ""
+"% gdb temp\n"
+"GDB is free software and you are welcome to distribute copies of it\n"
+" under certain conditions; type \"show copying\" to see the conditions.\n"
+"There is absolutely no warranty for GDB; type \"show warranty\" for details.\n"
+"GDB 4.13 (i386-unknown-freebsd), Copyright 1994 Free Software Foundation, Inc.\n"
+"(gdb) break main\t\t\t\tSkip the set-up code\n"
+"Breakpoint 1 at 0x160f: file temp.c, line 9.\tgdb puts breakpoint at main()\n"
+"(gdb) run\t\t\t\t\tRun as far as main()\n"
+"Starting program: /home/james/tmp/temp\t\tProgram starts running\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1072
+#, no-wrap
+msgid ""
+"Breakpoint 1, main () at temp.c:9\t\tgdb stops at main()\n"
+"(gdb) n\t\t\t\t\t\tGo to next line\n"
+"This is my program\t\t\t\tProgram prints out\n"
+"(gdb) s\t\t\t\t\t\tstep into bazz()\n"
+"bazz (anint=4231) at temp.c:17\t\t\tgdb displays stack frame\n"
+"(gdb)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1075
+msgid ""
+"Hang on a minute! How did anint get to be `4231`? Was it not set to `5` in "
+"`main()`? Let us move up to `main()` and have a look."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1082
+#, no-wrap
+msgid ""
+"(gdb) up\t\t\t\t\tMove up call stack\n"
+"#1 0x1625 in main () at temp.c:11\t\tgdb displays stack frame\n"
+"(gdb) p i\t\t\t\t\tShow us the value of i\n"
+"$1 = 4231\t\t\t\t\tgdb displays 4231\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1101
+msgid ""
+"but we left the `i=5;` line out. As we did not initialize i, it had "
+"whatever number happened to be in that area of memory when the program ran, "
+"which in this case happened to be `4231`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1107
+msgid ""
+"The `gdb` command displays the stack frame every time we go into or out of a "
+"function, even if we are using `up` and `down` to move around the call "
+"stack. This shows the name of the function and the values of its arguments, "
+"which helps us keep track of where we are and what is going on. (The stack "
+"is a storage area where the program stores information about the arguments "
+"passed to functions and where to go when it returns from a function call.)"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1109
+#, no-wrap
+msgid "Examining a Core File with gdb"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1117
+msgid ""
+"To examine a core file, start up `gdb` in the usual way. Instead of typing "
+"`break` or `run`, type"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1121
+#, no-wrap
+msgid "(gdb) core progname.core\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1124
+msgid ""
+"If the core file is not in the current directory, type `dir /path/to/core/"
+"file` first."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1126
+msgid "The debugger should display something like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1140
+#, no-wrap
+msgid ""
+"% gdb [.filename]#progname#\n"
+"GDB is free software and you are welcome to distribute copies of it\n"
+" under certain conditions; type \"show copying\" to see the conditions.\n"
+"There is absolutely no warranty for GDB; type \"show warranty\" for details.\n"
+"GDB 4.13 (i386-unknown-freebsd), Copyright 1994 Free Software Foundation, Inc.\n"
+"(gdb) core [.filename]#progname.core#\n"
+"Core was generated by `[.filename]#progname#'.\n"
+"Program terminated with signal 11, Segmentation fault.\n"
+"Cannot access memory at address 0x7020796d.\n"
+"#0 0x164a in bazz (anint=0x5) at temp.c:17\n"
+"(gdb)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1144
+msgid ""
+"In this case, the program was called [.filename]#progname#, so the core file "
+"is called [.filename]#progname.core#. We can see that the program crashed "
+"due to trying to access an area in memory that was not available to it in a "
+"function called `bazz`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1148
+msgid ""
+"Sometimes it is useful to be able to see how a function was called, as the "
+"problem could have occurred a long way up the call stack in a complex "
+"program. `bt` causes `gdb` to print out a back-trace of the call stack:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1156
+#, no-wrap
+msgid ""
+"(gdb) bt\n"
+"#0 0x164a in bazz (anint=0x5) at temp.c:17\n"
+"#1 0xefbfd888 in end ()\n"
+"#2 0x162c in main () at temp.c:11\n"
+"(gdb)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1160
+msgid ""
+"The `end()` function is called when a program crashes; in this case, the "
+"`bazz()` function was called from `main()`."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1161
+#, no-wrap
+msgid "Attaching to a Running Program with gdb"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1166
+msgid ""
+"One of the neatest features about `gdb` is that it can attach to a program "
+"that is already running. Of course, that requires sufficient permissions to "
+"do so. A common problem is stepping through a program that forks and "
+"wanting to trace the child, but the debugger will only trace the parent."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1168
+msgid ""
+"To do that, start up another `gdb`, use `ps` to find the process ID for the "
+"child, and do"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1172
+#, no-wrap
+msgid "(gdb) attach pid\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1175
+msgid "in `gdb`, and then debug as usual."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1194
+msgid ""
+"Now all that is needed is to attach to the child, set PauseMode to `0`, and "
+"wait for the `sleep()` call to return!"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1196
+#, no-wrap
+msgid "Using Emacs as a Development Environment"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1198
+#, no-wrap
+msgid "Emacs"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1202
+msgid ""
+"Emacs is a highly customizable editor-indeed, it has been customized to the "
+"point where it is more like an operating system than an editor! Many "
+"developers and sysadmins do in fact spend practically all their time working "
+"inside Emacs, leaving it only to log out."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1204
+msgid ""
+"It is impossible even to summarize everything Emacs can do here, but here "
+"are some of the features of interest to developers:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1206
+msgid ""
+"Very powerful editor, allowing search-and-replace on both strings and "
+"regular expressions (patterns), jumping to start/end of block expression, "
+"etc, etc."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1207
+msgid "Pull-down menus and online help."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1208
+msgid "Language-dependent syntax highlighting and indentation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1209
+msgid "Completely customizable."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1210
+msgid "You can compile and debug programs within Emacs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1211
+msgid ""
+"On a compilation error, you can jump to the offending line of source code."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1212
+msgid ""
+"Friendly-ish front-end to the `info` program used for reading GNU hypertext "
+"documentation, including the documentation on Emacs itself."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1213
+msgid ""
+"Friendly front-end to `gdb`, allowing you to look at the source code as you "
+"step through your program."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1215
+msgid "And doubtless many more that have been overlooked."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1217
+msgid ""
+"Emacs can be installed on FreeBSD using the package:editors/emacs[] port."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1220
+msgid ""
+"Once it is installed, start it up and do `C-h t` to read an Emacs tutorial-"
+"that means hold down kbd:[control], press kbd:[h], let go of kbd:[control], "
+"and then press kbd:[t]. (Alternatively, you can use the mouse to select [."
+"guimenuitem]#Emacs Tutorial# from the menu:Help[] menu.)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1225
+msgid ""
+"Although Emacs does have menus, it is well worth learning the key bindings, "
+"as it is much quicker when you are editing something to press a couple of "
+"keys than to try to find the mouse and then click on the right place. And, "
+"when you are talking to seasoned Emacs users, you will find they often "
+"casually throw around expressions like \"`M-x replace-s RET foo RET bar "
+"RET`\" so it is useful to know what they mean. And in any case, Emacs has "
+"far too many useful functions for them to all fit on the menu bars."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1229
+msgid ""
+"Fortunately, it is quite easy to pick up the key-bindings, as they are "
+"displayed next to the menu item. My advice is to use the menu item for, "
+"say, opening a file until you understand how it works and feel confident "
+"with it, then try doing C-x C-f. When you are happy with that, move on to "
+"another menu command."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1232
+msgid ""
+"If you cannot remember what a particular combination of keys does, select [."
+"guimenuitem]#Describe Key# from the menu:Help[] menu and type it in-Emacs "
+"will tell you what it does. You can also use the [.guimenuitem]#Command "
+"Apropos# menu item to find out all the commands which contain a particular "
+"word in them, with the key binding next to it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1235
+msgid ""
+"By the way, the expression above means hold down the kbd:[Meta] key, press "
+"kbd:[x], release the kbd:[Meta] key, type `replace-s` (short for `replace-"
+"string`-another feature of Emacs is that you can abbreviate commands), press "
+"the kbd:[return] key, type `foo` (the string you want replaced), press the "
+"kbd:[return] key, type bar (the string you want to replace `foo` with) and "
+"press kbd:[return] again. Emacs will then do the search-and-replace "
+"operation you have just requested."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1238
+msgid ""
+"If you are wondering what on earth kbd:[Meta] is, it is a special key that "
+"many UNIX(R) workstations have. Unfortunately, PC's do not have one, so it "
+"is usually kbd:[alt] (or if you are unlucky, the kbd:[escape] key)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1242
+msgid ""
+"Oh, and to get out of Emacs, do `C-x C-c` (that means hold down the kbd:"
+"[control] key, press kbd:[x], press kbd:[c] and release the kbd:[control] "
+"key). If you have any unsaved files open, Emacs will ask you if you want to "
+"save them. (Ignore the bit in the documentation where it says `C-z` is the "
+"usual way to leave Emacs-that leaves Emacs hanging around in the background, "
+"and is only really useful if you are on a system which does not have virtual "
+"terminals)."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1243
+#, no-wrap
+msgid "Configuring Emacs"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1246
+msgid ""
+"Emacs does many wonderful things; some of them are built in, some of them "
+"need to be configured."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1250
+msgid ""
+"Instead of using a proprietary macro language for configuration, Emacs uses "
+"a version of Lisp specially adapted for editors, known as Emacs Lisp. "
+"Working with Emacs Lisp can be quite helpful if you want to go on and learn "
+"something like Common Lisp. Emacs Lisp has many features of Common Lisp, "
+"although it is considerably smaller (and thus easier to master)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1252
+msgid ""
+"The best way to learn Emacs Lisp is to download the link:ftp://ftp.gnu.org/"
+"old-gnu/emacs/elisp-manual-19-2.4.tar.gz[Emacs Tutorial]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1257
+msgid ""
+"However, there is no need to actually know any Lisp to get started with "
+"configuring Emacs, as I have included a sample [.filename]#.emacs#, which "
+"should be enough to get you started. Just copy it into your home directory "
+"and restart Emacs if it is already running; it will read the commands from "
+"the file and (hopefully) give you a useful basic setup."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1258
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1276
+#, no-wrap
+msgid "A Sample [.filename]#.emacs#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1261
+msgid ""
+"Unfortunately, there is far too much here to explain it in detail; however "
+"there are one or two points worth mentioning."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1263
+msgid "Everything beginning with a `;` is a comment and is ignored by Emacs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1264
+msgid ""
+"In the first line, the `-*- Emacs-Lisp -*-` is so that we can edit [."
+"filename]#.emacs# itself within Emacs and get all the fancy features for "
+"editing Emacs Lisp. Emacs usually tries to guess this based on the filename, "
+"and may not get it right for [.filename]#.emacs#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1265
+msgid ""
+"The kbd:[tab] key is bound to an indentation function in some modes, so when "
+"you press the tab key, it will indent the current line of code. If you want "
+"to put a tab character in whatever you are writing, hold the kbd:[control] "
+"key down while you are pressing the kbd:[tab] key."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1266
+msgid ""
+"This file supports syntax highlighting for C, C++, Perl, Lisp and Scheme, by "
+"guessing the language from the filename."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1267
+msgid ""
+"Emacs already has a pre-defined function called `next-error`. In a "
+"compilation output window, this allows you to move from one compilation "
+"error to the next by doing `M-n`; we define a complementary function, "
+"`previous-error`, that allows you to go to a previous error by doing `M-p`. "
+"The nicest feature of all is that `C-c C-c` will open up the source file in "
+"which the error occurred and jump to the appropriate line."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1268
+msgid ""
+"We enable Emacs's ability to act as a server, so that if you are doing "
+"something outside Emacs and you want to edit a file, you can just type in"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1272
+#, no-wrap
+msgid "% emacsclient filename\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1275
+msgid ""
+"and then you can edit the file in your Emacs!footnote:[Many Emacs users set "
+"their EDITOR environment to emacsclient so this happens every time they need "
+"to edit a file.]"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1281
+#, no-wrap
+msgid ";; -*-Emacs-Lisp-*-\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1286
+#, no-wrap
+msgid ""
+";; This file is designed to be re-evaled; use the variable first-time\n"
+";; to avoid any problems with this.\n"
+"(defvar first-time t\n"
+" \"Flag signifying this is the first time that .emacs has been evaled\")\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1294
+#, no-wrap
+msgid ""
+";; Meta\n"
+"(global-set-key \"\\M- \" 'set-mark-command)\n"
+"(global-set-key \"\\M-\\C-h\" 'backward-kill-word)\n"
+"(global-set-key \"\\M-\\C-r\" 'query-replace)\n"
+"(global-set-key \"\\M-r\" 'replace-string)\n"
+"(global-set-key \"\\M-g\" 'goto-line)\n"
+"(global-set-key \"\\M-h\" 'help-command)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1315
+#, no-wrap
+msgid ""
+";; Function keys\n"
+"(global-set-key [f1] 'manual-entry)\n"
+"(global-set-key [f2] 'info)\n"
+"(global-set-key [f3] 'repeat-complex-command)\n"
+"(global-set-key [f4] 'advertised-undo)\n"
+"(global-set-key [f5] 'eval-current-buffer)\n"
+"(global-set-key [f6] 'buffer-menu)\n"
+"(global-set-key [f7] 'other-window)\n"
+"(global-set-key [f8] 'find-file)\n"
+"(global-set-key [f9] 'save-buffer)\n"
+"(global-set-key [f10] 'next-error)\n"
+"(global-set-key [f11] 'compile)\n"
+"(global-set-key [f12] 'grep)\n"
+"(global-set-key [C-f1] 'compile)\n"
+"(global-set-key [C-f2] 'grep)\n"
+"(global-set-key [C-f3] 'next-error)\n"
+"(global-set-key [C-f4] 'previous-error)\n"
+"(global-set-key [C-f5] 'display-faces)\n"
+"(global-set-key [C-f8] 'dired)\n"
+"(global-set-key [C-f10] 'kill-compilation)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1333
+#, no-wrap
+msgid ""
+";; Keypad bindings\n"
+"(global-set-key [up] \"\\C-p\")\n"
+"(global-set-key [down] \"\\C-n\")\n"
+"(global-set-key [left] \"\\C-b\")\n"
+"(global-set-key [right] \"\\C-f\")\n"
+"(global-set-key [home] \"\\C-a\")\n"
+"(global-set-key [end] \"\\C-e\")\n"
+"(global-set-key [prior] \"\\M-v\")\n"
+"(global-set-key [next] \"\\C-v\")\n"
+"(global-set-key [C-up] \"\\M-\\C-b\")\n"
+"(global-set-key [C-down] \"\\M-\\C-f\")\n"
+"(global-set-key [C-left] \"\\M-b\")\n"
+"(global-set-key [C-right] \"\\M-f\")\n"
+"(global-set-key [C-home] \"\\M-<\")\n"
+"(global-set-key [C-end] \"\\M->\")\n"
+"(global-set-key [C-prior] \"\\M-<\")\n"
+"(global-set-key [C-next] \"\\M->\")\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1336
+#, no-wrap
+msgid ""
+";; Mouse\n"
+"(global-set-key [mouse-3] 'imenu)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1340
+#, no-wrap
+msgid ""
+";; Misc\n"
+"(global-set-key [C-tab] \"\\C-q\\t\")\t; Control tab quotes a tab.\n"
+"(setq backup-by-copying-when-mismatch t)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1345
+#, no-wrap
+msgid ""
+";; Treat 'y' or <CR> as yes, 'n' as no.\n"
+"(fset 'yes-or-no-p 'y-or-n-p)\n"
+"(define-key query-replace-map [return] 'act)\n"
+"(define-key query-replace-map [?\\C-m] 'act)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1349
+#, no-wrap
+msgid ""
+";; Load packages\n"
+"(require 'desktop)\n"
+"(require 'tar-mode)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1355
+#, no-wrap
+msgid ""
+";; Pretty diff mode\n"
+"(autoload 'ediff-buffers \"ediff\" \"Intelligent Emacs interface to diff\" t)\n"
+"(autoload 'ediff-files \"ediff\" \"Intelligent Emacs interface to diff\" t)\n"
+"(autoload 'ediff-files-remote \"ediff\"\n"
+" \"Intelligent Emacs interface to diff\")\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1364
+#, no-wrap
+msgid ""
+"(if first-time\n"
+" (setq auto-mode-alist\n"
+"\t (append '((\"\\\\.cpp$\" . c++-mode)\n"
+"\t\t (\"\\\\.hpp$\" . c++-mode)\n"
+"\t\t (\"\\\\.lsp$\" . lisp-mode)\n"
+"\t\t (\"\\\\.scm$\" . scheme-mode)\n"
+"\t\t (\"\\\\.pl$\" . perl-mode)\n"
+"\t\t ) auto-mode-alist)))\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1369
+#, no-wrap
+msgid ""
+";; Auto font lock mode\n"
+"(defvar font-lock-auto-mode-list\n"
+" (list 'c-mode 'c++-mode 'c++-c-mode 'emacs-lisp-mode 'lisp-mode 'perl-mode 'scheme-mode)\n"
+" \"List of modes to always start in font-lock-mode\")\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1374
+#, no-wrap
+msgid ""
+"(defvar font-lock-mode-keyword-alist\n"
+" '((c++-c-mode . c-font-lock-keywords)\n"
+" (perl-mode . perl-font-lock-keywords))\n"
+" \"Associations between modes and keywords\")\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1382
+#, no-wrap
+msgid ""
+"(defun font-lock-auto-mode-select ()\n"
+" \"Automatically select font-lock-mode if the current major mode is in font-lock-auto-mode-list\"\n"
+" (if (memq major-mode font-lock-auto-mode-list)\n"
+" (progn\n"
+"\t(font-lock-mode t))\n"
+" )\n"
+" )\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1384
+#, no-wrap
+msgid "(global-set-key [M-f1] 'font-lock-fontify-buffer)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1401
+#, no-wrap
+msgid ""
+";; New dabbrev stuff\n"
+";(require 'new-dabbrev)\n"
+"(setq dabbrev-always-check-other-buffers t)\n"
+"(setq dabbrev-abbrev-char-regexp \"\\\\sw\\\\|\\\\s_\")\n"
+"(add-hook 'emacs-lisp-mode-hook\n"
+"\t '(lambda ()\n"
+"\t (set (make-local-variable 'dabbrev-case-fold-search) nil)\n"
+"\t (set (make-local-variable 'dabbrev-case-replace) nil)))\n"
+"(add-hook 'c-mode-hook\n"
+"\t '(lambda ()\n"
+"\t (set (make-local-variable 'dabbrev-case-fold-search) nil)\n"
+"\t (set (make-local-variable 'dabbrev-case-replace) nil)))\n"
+"(add-hook 'text-mode-hook\n"
+"\t '(lambda ()\n"
+"\t (set (make-local-variable 'dabbrev-case-fold-search) t)\n"
+"\t (set (make-local-variable 'dabbrev-case-replace) t)))\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1413
+#, no-wrap
+msgid ""
+";; C++ and C mode...\n"
+"(defun my-c++-mode-hook ()\n"
+" (setq tab-width 4)\n"
+" (define-key c++-mode-map \"\\C-m\" 'reindent-then-newline-and-indent)\n"
+" (define-key c++-mode-map \"\\C-ce\" 'c-comment-edit)\n"
+" (setq c++-auto-hungry-initial-state 'none)\n"
+" (setq c++-delete-function 'backward-delete-char)\n"
+" (setq c++-tab-always-indent t)\n"
+" (setq c-indent-level 4)\n"
+" (setq c-continued-statement-offset 4)\n"
+" (setq c++-empty-arglist-indent 4))\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1427
+#, no-wrap
+msgid ""
+"(defun my-c-mode-hook ()\n"
+" (setq tab-width 4)\n"
+" (define-key c-mode-map \"\\C-m\" 'reindent-then-newline-and-indent)\n"
+" (define-key c-mode-map \"\\C-ce\" 'c-comment-edit)\n"
+" (setq c-auto-hungry-initial-state 'none)\n"
+" (setq c-delete-function 'backward-delete-char)\n"
+" (setq c-tab-always-indent t)\n"
+";; BSD-ish indentation style\n"
+" (setq c-indent-level 4)\n"
+" (setq c-continued-statement-offset 4)\n"
+" (setq c-brace-offset -4)\n"
+" (setq c-argdecl-indent 0)\n"
+" (setq c-label-offset -4))\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1434
+#, no-wrap
+msgid ""
+";; Perl mode\n"
+"(defun my-perl-mode-hook ()\n"
+" (setq tab-width 4)\n"
+" (define-key c++-mode-map \"\\C-m\" 'reindent-then-newline-and-indent)\n"
+" (setq perl-indent-level 4)\n"
+" (setq perl-continued-statement-offset 4))\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1438
+#, no-wrap
+msgid ""
+";; Scheme mode...\n"
+"(defun my-scheme-mode-hook ()\n"
+" (define-key scheme-mode-map \"\\C-m\" 'reindent-then-newline-and-indent))\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1444
+#, no-wrap
+msgid ""
+";; Emacs-Lisp mode...\n"
+"(defun my-lisp-mode-hook ()\n"
+" (define-key lisp-mode-map \"\\C-m\" 'reindent-then-newline-and-indent)\n"
+" (define-key lisp-mode-map \"\\C-i\" 'lisp-indent-line)\n"
+" (define-key lisp-mode-map \"\\C-j\" 'eval-print-last-sexp))\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1452
+#, no-wrap
+msgid ""
+";; Add all of the hooks...\n"
+"(add-hook 'c++-mode-hook 'my-c++-mode-hook)\n"
+"(add-hook 'c-mode-hook 'my-c-mode-hook)\n"
+"(add-hook 'scheme-mode-hook 'my-scheme-mode-hook)\n"
+"(add-hook 'emacs-lisp-mode-hook 'my-lisp-mode-hook)\n"
+"(add-hook 'lisp-mode-hook 'my-lisp-mode-hook)\n"
+"(add-hook 'perl-mode-hook 'my-perl-mode-hook)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1458
+#, no-wrap
+msgid ""
+";; Complement to next-error\n"
+"(defun previous-error (n)\n"
+" \"Visit previous compilation error message and corresponding source code.\"\n"
+" (interactive \"p\")\n"
+" (next-error (- n)))\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1471
+#, no-wrap
+msgid ""
+";; Misc...\n"
+"(transient-mark-mode 1)\n"
+"(setq mark-even-if-inactive t)\n"
+"(setq visible-bell nil)\n"
+"(setq next-line-add-newlines nil)\n"
+"(setq compile-command \"make\")\n"
+"(setq suggest-key-bindings nil)\n"
+"(put 'eval-expression 'disabled nil)\n"
+"(put 'narrow-to-region 'disabled nil)\n"
+"(put 'set-goal-column 'disabled nil)\n"
+"(if (>= emacs-major-version 21)\n"
+"\t(setq show-trailing-whitespace t))\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1477
+#, no-wrap
+msgid ""
+";; Elisp archive searching\n"
+"(autoload 'format-lisp-code-directory \"lispdir\" nil t)\n"
+"(autoload 'lisp-dir-apropos \"lispdir\" nil t)\n"
+"(autoload 'lisp-dir-retrieve \"lispdir\" nil t)\n"
+"(autoload 'lisp-dir-verify \"lispdir\" nil t)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1486
+#, no-wrap
+msgid ""
+";; Font lock mode\n"
+"(defun my-make-face (face color &optional bold)\n"
+" \"Create a face from a color and optionally make it bold\"\n"
+" (make-face face)\n"
+" (copy-face 'default face)\n"
+" (set-face-foreground face color)\n"
+" (if bold (make-face-bold face))\n"
+" )\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1499
+#, no-wrap
+msgid ""
+"(if (eq window-system 'x)\n"
+" (progn\n"
+" (my-make-face 'blue \"blue\")\n"
+" (my-make-face 'red \"red\")\n"
+" (my-make-face 'green \"dark green\")\n"
+" (setq font-lock-comment-face 'blue)\n"
+" (setq font-lock-string-face 'bold)\n"
+" (setq font-lock-type-face 'bold)\n"
+" (setq font-lock-keyword-face 'bold)\n"
+" (setq font-lock-function-name-face 'red)\n"
+" (setq font-lock-doc-string-face 'green)\n"
+" (add-hook 'find-file-hooks 'font-lock-auto-mode-select)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1507
+#, no-wrap
+msgid ""
+" (setq baud-rate 1000000)\n"
+" (global-set-key \"\\C-cmm\" 'menu-bar-mode)\n"
+" (global-set-key \"\\C-cms\" 'scroll-bar-mode)\n"
+" (global-set-key [backspace] 'backward-delete-char)\n"
+"\t\t\t\t\t; (global-set-key [delete] 'delete-char)\n"
+" (standard-display-european t)\n"
+" (load-library \"iso-transl\")))\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1524
+#, no-wrap
+msgid ""
+";; X11 or PC using direct screen writes\n"
+"(if window-system\n"
+" (progn\n"
+" ;; (global-set-key [M-f1] 'hilit-repaint-command)\n"
+" ;; (global-set-key [M-f2] [?\\C-u M-f1])\n"
+" (setq hilit-mode-enable-list\n"
+"\t '(not text-mode c-mode c++-mode emacs-lisp-mode lisp-mode\n"
+"\t\t scheme-mode)\n"
+"\t hilit-auto-highlight nil\n"
+"\t hilit-auto-rehighlight 'visible\n"
+"\t hilit-inhibit-hooks nil\n"
+"\t hilit-inhibit-rebinding t)\n"
+" (require 'hilit19)\n"
+" (require 'paren))\n"
+" (setq baud-rate 2400)\t\t\t; For slow serial connections\n"
+" )\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1533
+#, no-wrap
+msgid ""
+";; TTY type terminal\n"
+"(if (and (not window-system)\n"
+"\t (not (equal system-type 'ms-dos)))\n"
+" (progn\n"
+" (if first-time\n"
+"\t (progn\n"
+"\t (keyboard-translate ?\\C-h ?\\C-?)\n"
+"\t (keyboard-translate ?\\C-? ?\\C-h)))))\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1539
+#, no-wrap
+msgid ""
+";; Under UNIX\n"
+"(if (not (equal system-type 'ms-dos))\n"
+" (progn\n"
+" (if first-time\n"
+"\t (server-start))))\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1547
+#, no-wrap
+msgid ""
+";; Add any face changes here\n"
+"(add-hook 'term-setup-hook 'my-term-setup-hook)\n"
+"(defun my-term-setup-hook ()\n"
+" (if (eq window-system 'pc)\n"
+" (progn\n"
+";;\t(set-face-background 'default \"red\")\n"
+"\t)))\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1553
+#, no-wrap
+msgid ""
+";; Restore the \"desktop\" - do this as late as possible\n"
+"(if first-time\n"
+" (progn\n"
+" (desktop-load-default)\n"
+" (desktop-read)))\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1556
+#, no-wrap
+msgid ""
+";; Indicate that this file has been read at least once\n"
+"(setq first-time nil)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1558
+#, no-wrap
+msgid ";; No need to debug anything now\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1560
+#, no-wrap
+msgid "(setq debug-on-error nil)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1563
+#, no-wrap
+msgid ""
+";; All done\n"
+"(message \"All done, %s%s\" (user-login-name) \".\")\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1566
+#, no-wrap
+msgid "Extending the Range of Languages Emacs Understands"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1569
+msgid ""
+"Now, this is all very well if you only want to program in the languages "
+"already catered for in [.filename]#.emacs# (C, C++, Perl, Lisp and Scheme), "
+"but what happens if a new language called \"whizbang\" comes out, full of "
+"exciting features?"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1573
+msgid ""
+"The first thing to do is find out if whizbang comes with any files that tell "
+"Emacs about the language. These usually end in [.filename]#.el#, short for "
+"\"Emacs Lisp\". For example, if whizbang is a FreeBSD port, we can locate "
+"these files by doing"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1577
+#, no-wrap
+msgid "% find /usr/ports/lang/whizbang -name \"*.el\" -print\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1581
+msgid ""
+"and install them by copying them into the Emacs site Lisp directory. On "
+"FreeBSD, this is [.filename]#/usr/local/share/emacs/site-lisp#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1583
+msgid "So for example, if the output from the find command was"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1587
+#, no-wrap
+msgid "/usr/ports/lang/whizbang/work/misc/whizbang.el\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1590
+msgid "we would do"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1594
+#, no-wrap
+msgid "# cp /usr/ports/lang/whizbang/work/misc/whizbang.el /usr/local/share/emacs/site-lisp\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1599
+msgid ""
+"Next, we need to decide what extension whizbang source files have. Let us "
+"say for the sake of argument that they all end in [.filename]#.wiz#. We "
+"need to add an entry to our [.filename]#.emacs# to make sure Emacs will be "
+"able to use the information in [.filename]#whizbang.el#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1601
+msgid ""
+"Find the auto-mode-alist entry in [.filename]#.emacs# and add a line for "
+"whizbang, such as:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1609
+#, no-wrap
+msgid ""
+"...\n"
+"(\"\\\\.lsp$\" . lisp-mode)\n"
+"(\"\\\\.wiz$\" . whizbang-mode)\n"
+"(\"\\\\.scm$\" . scheme-mode)\n"
+"...\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1612
+msgid ""
+"This means that Emacs will automatically go into `whizbang-mode` when you "
+"edit a file ending in [.filename]#.wiz#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1615
+msgid ""
+"Just below this, you will find the font-lock-auto-mode-list entry. Add "
+"`whizbang-mode` to it like so:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1622
+#, no-wrap
+msgid ""
+";; Auto font lock mode\n"
+"(defvar font-lock-auto-mode-list\n"
+" (list 'c-mode 'c++-mode 'c++-c-mode 'emacs-lisp-mode 'whizbang-mode 'lisp-mode 'perl-mode 'scheme-mode)\n"
+" \"List of modes to always start in font-lock-mode\")\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1625
+msgid ""
+"This means that Emacs will always enable `font-lock-mode` (ie syntax "
+"highlighting) when editing a [.filename]#.wiz# file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1628
+msgid ""
+"And that is all that is needed. If there is anything else you want done "
+"automatically when you open up [.filename]#.wiz#, you can add a `whizbang-"
+"mode hook` (see `my-scheme-mode-hook` for a simple example that adds `auto-"
+"indent`)."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1630
+#, no-wrap
+msgid "Further Reading"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1633
+msgid ""
+"For information about setting up a development environment for contributing "
+"fixes to FreeBSD itself, please see man:development[7]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1635
+msgid ""
+"Brian Harvey and Matthew Wright _Simply Scheme_ MIT 1994. ISBN 0-262-08226-8"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1636
+msgid "Randall Schwartz _Learning Perl_ O'Reilly 1993 ISBN 1-56592-042-2"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1637
+msgid ""
+"Patrick Henry Winston and Berthold Klaus Paul Horn _Lisp (3rd Edition)_ "
+"Addison-Wesley 1989 ISBN 0-201-08319-1"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1638
+msgid ""
+"Brian W. Kernighan and Rob Pike _The Unix Programming Environment_ Prentice-"
+"Hall 1984 ISBN 0-13-937681-X"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1639
+msgid ""
+"Brian W. Kernighan and Dennis M. Ritchie _The C Programming Language (2nd "
+"Edition)_ Prentice-Hall 1988 ISBN 0-13-110362-8"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1640
+msgid ""
+"Bjarne Stroustrup _The C++ Programming Language_ Addison-Wesley 1991 ISBN "
+"0-201-53992-6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1641
+msgid ""
+"W. Richard Stevens _Advanced Programming in the Unix Environment_ Addison-"
+"Wesley 1992 ISBN 0-201-56317-7"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1641
+msgid ""
+"W. Richard Stevens _Unix Network Programming_ Prentice-Hall 1990 ISBN "
+"0-13-949876-1"
+msgstr ""
diff --git a/documentation/content/en/books/developers-handbook/x86/_index.adoc b/documentation/content/en/books/developers-handbook/x86/_index.adoc
index 77b14e450d..b80e79bbec 100644
--- a/documentation/content/en/books/developers-handbook/x86/_index.adoc
+++ b/documentation/content/en/books/developers-handbook/x86/_index.adoc
@@ -7,7 +7,7 @@ description: x86 Assembly Language Programming
tags: ["x86", "guide"]
showBookMenu: true
weight: 15
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/x86/"
---
[[x86]]
@@ -79,14 +79,11 @@ Copyright (R) 2000-2001 G. Adam Stanislav. All rights reserved.
The most important tool for assembly language programming is the assembler, the software that converts assembly language code into machine language.
-Two very different assemblers are available for FreeBSD.
-One is man:as[1], which uses the traditional UNIX(R) assembly language syntax.
-It comes with the system.
+Three very different assemblers are available for FreeBSD.
+Both man:llvm-as[1] (included in package:devel/llvm[]) and man:as[1] (included in package:devel/binutils[]) use the traditional UNIX(R) assembly language syntax.
-The other is /usr/ports/devel/nasm.
-It uses the Intel syntax.
+On the other hand, man:nasm[1] (installed through package:devel/nasm[]) uses the Intel syntax.
Its main advantage is that it can assemble code for many operating systems.
-It needs to be installed separately, but is completely free.
This chapter uses nasm syntax because most assembly language programmers coming to FreeBSD from other operating systems will find it easier to understand.
And, because, quite frankly, that is what I am used to.
@@ -544,22 +541,22 @@ We are now ready for our first program, the mandatory Hello, World!
[.programlisting]
....
-1: %include 'system.inc'
- 2:
- 3: section .data
- 4: hello db 'Hello, World!', 0Ah
- 5: hbytes equ $-hello
- 6:
- 7: section .text
- 8: global _start
- 9: _start:
-10: push dword hbytes
-11: push dword hello
-12: push dword stdout
-13: sys.write
-14:
-15: push dword 0
-16: sys.exit
+ %include 'system.inc'
+
+ section .data
+ hello db 'Hello, World!', 0Ah
+ hbytes equ $-hello
+
+ section .text
+ global _start
+_start:
+ push dword hbytes
+ push dword hello
+ push dword stdout
+ sys.write
+
+ push dword 0
+ sys.exit
....
Here is what it does: Line 1 includes the defines, the macros, and the code from [.filename]#system.inc#.
@@ -589,7 +586,7 @@ Which one it is, is for the system to figure out.
[[x86-assemble-1]]
=== Assembling the Code
-Type the code (except the line numbers) in an editor, and save it in a file named [.filename]#hello.asm#.
+Type the code in an editor, and save it in a file named [.filename]#hello.asm#.
You need nasm to assemble it.
[[x86-get-nasm]]
@@ -2898,7 +2895,7 @@ Syntax error: best
Et cetera, et cetera, et cetera.
-Secondly, I like the `#` character to denote the start of a comment which extends to the end of the line.
+Secondly, I like the `+#+` character to denote the start of a comment which extends to the end of the line.
This does not take too much effort to code, and lets me treat input files for my software as executable scripts.
In our case, we also need to decide what units the input should come in: We choose _millimeters_ because that is how most photographers measure the focus length.
@@ -3063,7 +3060,7 @@ Now, while we are taking these three steps, we also need to watch out for one of
* If the counter grows above 18, we stop appending to the buffer. We continue reading the digits and sending them to the output.
* If, or rather _when_, the next input character is not a digit, we are done inputting for now.
+
-Incidentally, we can simply discard the non-digit, unless it is a `#`, which we must return to the input stream.
+Incidentally, we can simply discard the non-digit, unless it is a `+#+`, which we must return to the input stream.
It starts a comment, so we must see it after we are done producing output and start looking for more input.
That still leaves one possibility uncovered: If all the user enters is a zero (or several zeros), we will never find a non-zero to display.
@@ -4107,7 +4104,7 @@ We have found that while for the focal length of 150, our pinhole diameter shoul
[[x86-pinhole-scripting]]
=== Scripting
-Because we have chosen the `#` character to denote the start of a comment, we can treat our pinhole software as a _scripting language_.
+Because we have chosen the `+#+` character to denote the start of a comment, we can treat our pinhole software as a _scripting language_.
You have probably seen shell _scripts_ that start with:
diff --git a/documentation/content/en/books/developers-handbook/x86/_index.po b/documentation/content/en/books/developers-handbook/x86/_index.po
new file mode 100644
index 0000000000..23cfaca453
--- /dev/null
+++ b/documentation/content/en/books/developers-handbook/x86/_index.po
@@ -0,0 +1,8103 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:34-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:14
+#, no-wrap
+msgid "x86 Assembly Language Programming"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1
+#, no-wrap
+msgid "Chapter 11. x86 Assembly Language Programming"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:52
+msgid "_This chapter was written by {stanislav}._"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:54
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:58
+msgid ""
+"Assembly language programming under UNIX(R) is highly undocumented. It is "
+"generally assumed that no one would ever want to use it because various "
+"UNIX(R) systems run on different microprocessors, so everything should be "
+"written in C for portability."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:62
+msgid ""
+"In reality, C portability is quite a myth. Even C programs need to be "
+"modified when ported from one UNIX(R) to another, regardless of what "
+"processor each runs on. Typically, such a program is full of conditional "
+"statements depending on the system it is compiled for."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:64
+msgid ""
+"Even if we believe that all of UNIX(R) software should be written in C, or "
+"some other high-level language, we still need assembly language programmers: "
+"Who else would write the section of C library that accesses the kernel?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:66
+msgid ""
+"In this chapter I will attempt to show you how you can use assembly language "
+"writing UNIX(R) programs, specifically under FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:71
+msgid ""
+"This chapter does not explain the basics of assembly language. There are "
+"enough resources about that (for a complete online course in assembly "
+"language, see Randall Hyde's http://webster.cs.ucr.edu/[Art of Assembly "
+"Language]; or if you prefer a printed book, take a look at Jeff Duntemann's "
+"Assembly Language Step-by-Step (ISBN: 0471375233). However, once the "
+"chapter is finished, any assembly language programmer will be able to write "
+"programs for FreeBSD quickly and efficiently."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:73
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4310
+msgid "Copyright (R) 2000-2001 G. Adam Stanislav. All rights reserved."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:75
+#, no-wrap
+msgid "The Tools"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:78
+#, no-wrap
+msgid "The Assembler"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:81
+msgid ""
+"The most important tool for assembly language programming is the assembler, "
+"the software that converts assembly language code into machine language."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:84
+msgid ""
+"Three very different assemblers are available for FreeBSD. Both man:llvm-"
+"as[1] (included in package:devel/llvm[]) and man:as[1] (included in package:"
+"devel/binutils[]) use the traditional UNIX(R) assembly language syntax."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:87
+msgid ""
+"On the other hand, man:nasm[1] (installed through package:devel/nasm[]) uses "
+"the Intel syntax. Its main advantage is that it can assemble code for many "
+"operating systems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:90
+msgid ""
+"This chapter uses nasm syntax because most assembly language programmers "
+"coming to FreeBSD from other operating systems will find it easier to "
+"understand. And, because, quite frankly, that is what I am used to."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:92
+#, no-wrap
+msgid "The Linker"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:95
+msgid ""
+"The output of the assembler, like that of any compiler, needs to be linked "
+"to form an executable file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:98
+msgid ""
+"The standard man:ld[1] linker comes with FreeBSD. It works with the code "
+"assembled with either assembler."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:100
+#, no-wrap
+msgid "System Calls"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:103
+#, no-wrap
+msgid "Default Calling Convention"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:107
+msgid ""
+"By default, the FreeBSD kernel uses the C calling convention. Further, "
+"although the kernel is accessed using `int 80h`, it is assumed the program "
+"will call a function that issues `int 80h`, rather than issuing `int 80h` "
+"directly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:110
+msgid ""
+"This convention is very convenient, and quite superior to the Microsoft(R) "
+"convention used by MS-DOS(R). Why? Because the UNIX(R) convention allows "
+"any program written in any language to access the kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:113
+msgid ""
+"An assembly language program can do that as well. For example, we could "
+"open a file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:119
+#, no-wrap
+msgid ""
+"kernel:\n"
+"\tint\t80h\t; Call kernel\n"
+"\tret\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:128
+#, no-wrap
+msgid ""
+"open:\n"
+"\tpush\tdword mode\n"
+"\tpush\tdword flags\n"
+"\tpush\tdword path\n"
+"\tmov\teax, 5\n"
+"\tcall\tkernel\n"
+"\tadd\tesp, byte 12\n"
+"\tret\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:132
+msgid ""
+"This is a very clean and portable way of coding. If you need to port the "
+"code to a UNIX(R) system which uses a different interrupt, or a different "
+"way of passing parameters, all you need to change is the kernel procedure."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:136
+msgid ""
+"But assembly language programmers like to shave off cycles. The above "
+"example requires a `call/ret` combination. We can eliminate it by "
+"``push``ing an extra dword:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:147
+#, no-wrap
+msgid ""
+"open:\n"
+"\tpush\tdword mode\n"
+"\tpush\tdword flags\n"
+"\tpush\tdword path\n"
+"\tmov\teax, 5\n"
+"\tpush\teax\t\t; Or any other dword\n"
+"\tint\t80h\n"
+"\tadd\tesp, byte 16\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:150
+msgid ""
+"The `5` that we have placed in `EAX` identifies the kernel function, in this "
+"case `open`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:152
+#, no-wrap
+msgid "Alternate Calling Convention"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:157
+msgid ""
+"FreeBSD is an extremely flexible system. It offers other ways of calling "
+"the kernel. For it to work, however, the system must have Linux emulation "
+"installed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:162
+msgid ""
+"Linux is a UNIX(R) like system. However, its kernel uses the same system-"
+"call convention of passing parameters in registers MS-DOS(R) does. As with "
+"the UNIX(R) convention, the function number is placed in `EAX`. The "
+"parameters, however, are not passed on the stack but in `EBX, ECX, EDX, ESI, "
+"EDI, EBP`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:171
+#, no-wrap
+msgid ""
+"open:\n"
+"\tmov\teax, 5\n"
+"\tmov\tebx, path\n"
+"\tmov\tecx, flags\n"
+"\tmov\tedx, mode\n"
+"\tint\t80h\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:177
+msgid ""
+"This convention has a great disadvantage over the UNIX(R) way, at least as "
+"far as assembly language programming is concerned: Every time you make a "
+"kernel call you must `push` the registers, then `pop` them later. This "
+"makes your code bulkier and slower. Nevertheless, FreeBSD gives you a "
+"choice."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:180
+msgid ""
+"If you do choose the Linux convention, you must let the system know about "
+"it. After your program is assembled and linked, you need to brand the "
+"executable:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:184
+#, no-wrap
+msgid "% brandelf -t Linux filename\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:187
+#, no-wrap
+msgid "Which Convention Should You Use?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:192
+msgid ""
+"If you are coding specifically for FreeBSD, you should always use the "
+"UNIX(R) convention: It is faster, you can store global variables in "
+"registers, you do not have to brand the executable, and you do not impose "
+"the installation of the Linux emulation package on the target system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:195
+msgid ""
+"If you want to create portable code that can also run on Linux, you will "
+"probably still want to give the FreeBSD users as efficient a code as "
+"possible. I will show you how you can accomplish that after I have "
+"explained the basics."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:197
+#, no-wrap
+msgid "Call Numbers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:201
+msgid ""
+"To tell the kernel which system service you are calling, place its number in "
+"`EAX`. Of course, you need to know what the number is."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:203
+#, no-wrap
+msgid "The [.filename]#syscalls# File"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:207
+msgid ""
+"The numbers are listed in [.filename]#syscalls#. `locate syscalls` finds "
+"this file in several different formats, all produced automatically from [."
+"filename]#syscalls.master#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:210
+msgid ""
+"You can find the master file for the default UNIX(R) calling convention in [."
+"filename]#/usr/src/sys/kern/syscalls.master#. If you need to use the other "
+"convention implemented in the Linux emulation mode, read [.filename]#/usr/"
+"src/sys/i386/linux/syscalls.master#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:214
+msgid ""
+"Not only do FreeBSD and Linux use different calling conventions, they "
+"sometimes use different numbers for the same functions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:217
+msgid "[.filename]#syscalls.master# describes how the call is to be made:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:228
+#, no-wrap
+msgid ""
+"0\tSTD\tNOHIDE\t{ int nosys(void); } syscall nosys_args int\n"
+"1\tSTD\tNOHIDE\t{ void exit(int rval); } exit rexit_args void\n"
+"2\tSTD\tPOSIX\t{ int fork(void); }\n"
+"3\tSTD\tPOSIX\t{ ssize_t read(int fd, void *buf, size_t nbyte); }\n"
+"4\tSTD\tPOSIX\t{ ssize_t write(int fd, const void *buf, size_t nbyte); }\n"
+"5\tSTD\tPOSIX\t{ int open(char *path, int flags, int mode); }\n"
+"6\tSTD\tPOSIX\t{ int close(int fd); }\n"
+"etc...\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:231
+msgid "It is the leftmost column that tells us the number to place in `EAX`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:234
+msgid ""
+"The rightmost column tells us what parameters to `push`. They are "
+"``push``ed _from right to left_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:236
+msgid ""
+"For example, to `open` a file, we need to `push` the `mode` first, then "
+"`flags`, then the address at which the `path` is stored."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:238
+#, no-wrap
+msgid "Return Values"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:242
+msgid ""
+"A system call would not be useful most of the time if it did not return some "
+"kind of a value: The file descriptor of an open file, the number of bytes "
+"read to a buffer, the system time, etc."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:245
+msgid ""
+"Additionally, the system needs to inform us if an error occurs: A file does "
+"not exist, system resources are exhausted, we passed an invalid parameter, "
+"etc."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:247
+#, no-wrap
+msgid "Man Pages"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:251
+msgid ""
+"The traditional place to look for information about various system calls "
+"under UNIX(R) systems are the manual pages. FreeBSD describes its system "
+"calls in section 2, sometimes in section 3."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:253
+msgid "For example, man:open[2] says:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:257
+msgid ""
+"If successful, `open()` returns a non-negative integer, termed a file "
+"descriptor. It returns `-1` on failure, and sets `errno` to indicate the "
+"error."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:259
+msgid ""
+"The assembly language programmer new to UNIX(R) and FreeBSD will immediately "
+"ask the puzzling question: Where is `errno` and how do I get to it?"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:264
+msgid ""
+"The information presented in the manual pages applies to C programs. The "
+"assembly language programmer needs additional information."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:267
+#, no-wrap
+msgid "Where Are the Return Values?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:272
+msgid ""
+"Unfortunately, it depends... For most system calls it is in `EAX`, but not "
+"for all. A good rule of thumb, when working with a system call for the "
+"first time, is to look for the return value in `EAX`. If it is not there, "
+"you need further research."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:278
+msgid ""
+"I am aware of one system call that returns the value in `EDX`: `SYS_fork`. "
+"All others I have worked with use `EAX`. But I have not worked with them "
+"all yet."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:283
+msgid ""
+"If you cannot find the answer here or anywhere else, study libc source code "
+"and see how it interfaces with the kernel."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:286
+#, no-wrap
+msgid "Where Is `errno`?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:289
+msgid "Actually, nowhere..."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:292
+msgid ""
+"`errno` is part of the C language, not the UNIX(R) kernel. When accessing "
+"kernel services directly, the error code is returned in `EAX`, the same "
+"register the proper return value generally ends up in."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:296
+msgid ""
+"This makes perfect sense. If there is no error, there is no error code. If "
+"there is an error, there is no return value. One register can contain "
+"either."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:298
+#, no-wrap
+msgid "Determining an Error Occurred"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:301
+msgid ""
+"When using the standard FreeBSD calling convention, the `carry flag` is "
+"cleared upon success, set upon failure."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:304
+msgid ""
+"When using the Linux emulation mode, the signed value in `EAX` is non-"
+"negative upon success, and contains the return value. In case of an error, "
+"the value is negative, i.e., `-errno`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:306
+#, no-wrap
+msgid "Creating Portable Code"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:311
+msgid ""
+"Portability is generally not one of the strengths of assembly language. "
+"Yet, writing assembly language programs for different platforms is possible, "
+"especially with nasm. I have written assembly language libraries that can "
+"be assembled for such different operating systems as Windows(R) and FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:313
+msgid ""
+"It is all the more possible when you want your code to run on two platforms "
+"which, while different, are based on similar architectures."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:317
+msgid ""
+"For example, FreeBSD is UNIX(R), Linux is UNIX(R) like. I only mentioned "
+"three differences between them (from an assembly language programmer's "
+"perspective): The calling convention, the function numbers, and the way of "
+"returning values."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:319
+#, no-wrap
+msgid "Dealing with Function Numbers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:324
+msgid ""
+"In many cases the function numbers are the same. However, even when they "
+"are not, the problem is easy to deal with: Instead of using numbers in your "
+"code, use constants which you have declared differently depending on the "
+"target architecture:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:332
+#, no-wrap
+msgid ""
+"%ifdef\tLINUX\n"
+"%define\tSYS_execve\t11\n"
+"%else\n"
+"%define\tSYS_execve\t59\n"
+"%endif\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:335
+#, no-wrap
+msgid "Dealing with Conventions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:338
+msgid ""
+"Both, the calling convention, and the return value (the `errno` problem) can "
+"be resolved with macros:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:342
+#, no-wrap
+msgid "%ifdef\tLINUX\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:346
+#, no-wrap
+msgid ""
+"%macro\tsystem\t0\n"
+"\tcall\tkernel\n"
+"%endmacro\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:355
+#, no-wrap
+msgid ""
+"align 4\n"
+"kernel:\n"
+"\tpush\tebx\n"
+"\tpush\tecx\n"
+"\tpush\tedx\n"
+"\tpush\tesi\n"
+"\tpush\tedi\n"
+"\tpush\tebp\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:362
+#, no-wrap
+msgid ""
+"\tmov\tebx, [esp+32]\n"
+"\tmov\tecx, [esp+36]\n"
+"\tmov\tedx, [esp+40]\n"
+"\tmov\tesi, [esp+44]\n"
+"\tmov\tebp, [esp+48]\n"
+"\tint\t80h\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:369
+#, no-wrap
+msgid ""
+"\tpop\tebp\n"
+"\tpop\tedi\n"
+"\tpop\tesi\n"
+"\tpop\tedx\n"
+"\tpop\tecx\n"
+"\tpop\tebx\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:374
+#, no-wrap
+msgid ""
+"\tor\teax, eax\n"
+"\tjs\t.errno\n"
+"\tclc\n"
+"\tret\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:379
+#, no-wrap
+msgid ""
+".errno:\n"
+"\tneg\teax\n"
+"\tstc\n"
+"\tret\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:381
+#, no-wrap
+msgid "%else\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:385
+#, no-wrap
+msgid ""
+"%macro\tsystem\t0\n"
+"\tint\t80h\n"
+"%endmacro\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:387
+#, no-wrap
+msgid "%endif\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:390
+#, no-wrap
+msgid "Dealing with Other Portability Issues"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:394
+msgid ""
+"The above solutions can handle most cases of writing code portable between "
+"FreeBSD and Linux. Nevertheless, with some kernel services the differences "
+"are deeper."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:397
+msgid ""
+"In that case, you need to write two different handlers for those particular "
+"system calls, and use conditional assembly. Luckily, most of your code does "
+"something other than calling the kernel, so usually you will only need a few "
+"such conditional sections in your code."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:399
+#, no-wrap
+msgid "Using a Library"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:403
+msgid ""
+"You can avoid portability issues in your main code altogether by writing a "
+"library of system calls. Create a separate library for FreeBSD, a different "
+"one for Linux, and yet other libraries for more operating systems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:408
+msgid ""
+"In your library, write a separate function (or procedure, if you prefer the "
+"traditional assembly language terminology) for each system call. Use the C "
+"calling convention of passing parameters. But still use `EAX` to pass the "
+"call number in. In that case, your FreeBSD library can be very simple, as "
+"many seemingly different functions can be just labels to the same code:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:416
+#, no-wrap
+msgid ""
+"sys.open:\n"
+"sys.close:\n"
+"[etc...]\n"
+"\tint\t80h\n"
+"\tret\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:420
+msgid ""
+"Your Linux library will require more different functions. But even here you "
+"can group system calls using the same number of parameters:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:431
+#, no-wrap
+msgid ""
+"sys.exit:\n"
+"sys.close:\n"
+"[etc... one-parameter functions]\n"
+"\tpush\tebx\n"
+"\tmov\tebx, [esp+12]\n"
+"\tint\t80h\n"
+"\tpop\tebx\n"
+"\tjmp\tsys.return\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:433
+#, no-wrap
+msgid "...\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:439
+#, no-wrap
+msgid ""
+"sys.return:\n"
+"\tor\teax, eax\n"
+"\tjs\tsys.err\n"
+"\tclc\n"
+"\tret\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:444
+#, no-wrap
+msgid ""
+"sys.err:\n"
+"\tneg\teax\n"
+"\tstc\n"
+"\tret\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:451
+msgid ""
+"The library approach may seem inconvenient at first because it requires you "
+"to produce a separate file your code depends on. But it has many "
+"advantages: For one, you only need to write it once and can use it for all "
+"your programs. You can even let other assembly language programmers use it, "
+"or perhaps use one written by someone else. But perhaps the greatest "
+"advantage of the library is that your code can be ported to other systems, "
+"even by other programmers, by simply writing a new library without any "
+"changes to your code."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:453
+msgid ""
+"If you do not like the idea of having a library, you can at least place all "
+"your system calls in a separate assembly language file and link it with your "
+"main program. Here, again, all porters have to do is create a new object "
+"file to link with your main program."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:455
+#, no-wrap
+msgid "Using an Include File"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:458
+msgid ""
+"If you are releasing your software as (or with) source code, you can use "
+"macros and place them in a separate file, which you include in your code."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:461
+msgid ""
+"Porters of your software will simply write a new include file. No library "
+"or external object file is necessary, yet your code is portable without any "
+"need to edit the code."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:466
+msgid ""
+"This is the approach we will use throughout this chapter. We will name our "
+"include file [.filename]#system.inc#, and add to it whenever we deal with a "
+"new system call."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:469
+msgid ""
+"We can start our [.filename]#system.inc# by declaring the standard file "
+"descriptors:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:475
+#, no-wrap
+msgid ""
+"%define\tstdin\t0\n"
+"%define\tstdout\t1\n"
+"%define\tstderr\t2\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:478
+msgid "Next, we create a symbolic name for each system call:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:487
+#, no-wrap
+msgid ""
+"%define\tSYS_nosys\t0\n"
+"%define\tSYS_exit\t1\n"
+"%define\tSYS_fork\t2\n"
+"%define\tSYS_read\t3\n"
+"%define\tSYS_write\t4\n"
+"; [etc...]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:490
+msgid ""
+"We add a short, non-global procedure with a long name, so we do not "
+"accidentally reuse the name in our code:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:498
+#, no-wrap
+msgid ""
+"section\t.text\n"
+"align 4\n"
+"access.the.bsd.kernel:\n"
+"\tint\t80h\n"
+"\tret\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:501
+msgid "We create a macro which takes one argument, the syscall number:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:508
+#, no-wrap
+msgid ""
+"%macro\tsystem\t1\n"
+"\tmov\teax, %1\n"
+"\tcall\taccess.the.bsd.kernel\n"
+"%endmacro\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:512
+msgid ""
+"Finally, we create macros for each syscall. These macros take no arguments."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:518
+#, no-wrap
+msgid ""
+"%macro\tsys.exit\t0\n"
+"\tsystem\tSYS_exit\n"
+"%endmacro\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:522
+#, no-wrap
+msgid ""
+"%macro\tsys.fork\t0\n"
+"\tsystem\tSYS_fork\n"
+"%endmacro\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:526
+#, no-wrap
+msgid ""
+"%macro\tsys.read\t0\n"
+"\tsystem\tSYS_read\n"
+"%endmacro\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:530
+#, no-wrap
+msgid ""
+"%macro\tsys.write\t0\n"
+"\tsystem\tSYS_write\n"
+"%endmacro\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:532
+#, no-wrap
+msgid "; [etc...]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:536
+msgid ""
+"Go ahead, enter it into your editor and save it as [.filename]#system.inc#. "
+"We will add more to it as we discuss more syscalls."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:538
+#, no-wrap
+msgid "Our First Program"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:541
+msgid "We are now ready for our first program, the mandatory Hello, World!"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:560
+#, no-wrap
+msgid ""
+"1:\t%include\t'system.inc'\n"
+" 2:\n"
+" 3:\tsection\t.data\n"
+" 4:\thello\tdb\t'Hello, World!', 0Ah\n"
+" 5:\thbytes\tequ\t$-hello\n"
+" 6:\n"
+" 7:\tsection\t.text\n"
+" 8:\tglobal\t_start\n"
+" 9:\t_start:\n"
+"10:\tpush\tdword hbytes\n"
+"11:\tpush\tdword hello\n"
+"12:\tpush\tdword stdout\n"
+"13:\tsys.write\n"
+"14:\n"
+"15:\tpush\tdword 0\n"
+"16:\tsys.exit\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:563
+msgid ""
+"Here is what it does: Line 1 includes the defines, the macros, and the code "
+"from [.filename]#system.inc#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:567
+msgid ""
+"Lines 3-5 are the data: Line 3 starts the data section/segment. Line 4 "
+"contains the string \"Hello, World!\" followed by a new line (`0Ah`). Line "
+"5 creates a constant that contains the length of the string from line 4 in "
+"bytes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:571
+msgid ""
+"Lines 7-16 contain the code. Note that FreeBSD uses the _elf_ file format "
+"for its executables, which requires every program to start at the point "
+"labeled `_start` (or, more precisely, the linker expects that). This label "
+"has to be global."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:573
+msgid ""
+"Lines 10-13 ask the system to write `hbytes` bytes of the `hello` string to "
+"`stdout`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:576
+msgid ""
+"Lines 15-16 ask the system to end the program with the return value of `0`. "
+"The `SYS_exit` syscall never returns, so the code ends there."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:584
+msgid ""
+"If you have come to UNIX(R) from MS-DOS(R) assembly language background, you "
+"may be used to writing directly to the video hardware. You will never have "
+"to worry about this in FreeBSD, or any other flavor of UNIX(R). As far as "
+"you are concerned, you are writing to a file known as [.filename]#stdout#. "
+"This can be the video screen, or a telnet terminal, or an actual file, or "
+"even the input of another program. Which one it is, is for the system to "
+"figure out."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:587
+#, no-wrap
+msgid "Assembling the Code"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:591
+msgid ""
+"Type the code (except the line numbers) in an editor, and save it in a file "
+"named [.filename]#hello.asm#. You need nasm to assemble it."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:593
+#, no-wrap
+msgid "Installing nasm"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:596
+msgid "If you do not have nasm, type:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:605
+#, no-wrap
+msgid ""
+"% su\n"
+"Password:your root password\n"
+"# cd /usr/ports/devel/nasm\n"
+"# make install\n"
+"# exit\n"
+"%\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:608
+msgid ""
+"You may type `make install clean` instead of just `make install` if you do "
+"not want to keep nasm source code."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:610
+msgid ""
+"Either way, FreeBSD will automatically download nasm from the Internet, "
+"compile it, and install it on your system."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:615
+msgid ""
+"If your system is not FreeBSD, you need to get nasm from its https://"
+"sourceforge.net/projects/nasm[home page]. You can still use it to assemble "
+"FreeBSD code."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:618
+msgid "Now you can assemble, link, and run the code:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:626
+#, no-wrap
+msgid ""
+"% nasm -f elf hello.asm\n"
+"% ld -s -o hello hello.o\n"
+"% ./hello\n"
+"Hello, World!\n"
+"%\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:629
+#, no-wrap
+msgid "Writing UNIX(R) Filters"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:632
+msgid ""
+"A common type of UNIX(R) application is a filter-a program that reads data "
+"from the [.filename]#stdin#, processes it somehow, then writes the result to "
+"[.filename]#stdout#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:635
+msgid ""
+"In this chapter, we shall develop a simple filter, and learn how to read "
+"from [.filename]#stdin# and write to [.filename]#stdout#. This filter will "
+"convert each byte of its input into a hexadecimal number followed by a blank "
+"space."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:639
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:733
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:823
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:951
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1218
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2336
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3334
+#, no-wrap
+msgid "%include\t'system.inc'\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:643
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:737
+#, no-wrap
+msgid ""
+"section\t.data\n"
+"hex\tdb\t'0123456789ABCDEF'\n"
+"buffer\tdb\t0, 0, ' '\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:655
+#, no-wrap
+msgid ""
+"section\t.text\n"
+"global\t_start\n"
+"_start:\n"
+"\t; read a byte from stdin\n"
+"\tpush\tdword 1\n"
+"\tpush\tdword buffer\n"
+"\tpush\tdword stdin\n"
+"\tsys.read\n"
+"\tadd\tesp, byte 12\n"
+"\tor\teax, eax\n"
+"\tje\t.done\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:665
+#, no-wrap
+msgid ""
+"\t; convert it to hex\n"
+"\tmovzx\teax, byte [buffer]\n"
+"\tmov\tedx, eax\n"
+"\tshr\tdl, 4\n"
+"\tmov\tdl, [hex+edx]\n"
+"\tmov\t[buffer], dl\n"
+"\tand\tal, 0Fh\n"
+"\tmov\tal, [hex+eax]\n"
+"\tmov\t[buffer+1], al\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:673
+#, no-wrap
+msgid ""
+"\t; print it\n"
+"\tpush\tdword 3\n"
+"\tpush\tdword buffer\n"
+"\tpush\tdword stdout\n"
+"\tsys.write\n"
+"\tadd\tesp, byte 12\n"
+"\tjmp\tshort _start\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:677
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:780
+#, no-wrap
+msgid ""
+".done:\n"
+"\tpush\tdword 0\n"
+"\tsys.exit\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:685
+msgid ""
+"In the data section we create an array called `hex`. It contains the 16 "
+"hexadecimal digits in ascending order. The array is followed by a buffer "
+"which we will use for both input and output. The first two bytes of the "
+"buffer are initially set to `0`. This is where we will write the two "
+"hexadecimal digits (the first byte also is where we will read the input). "
+"The third byte is a space."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:687
+msgid ""
+"The code section consists of four parts: Reading the byte, converting it to "
+"a hexadecimal number, writing the result, and eventually exiting the program."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:693
+msgid ""
+"To read the byte, we ask the system to read one byte from [."
+"filename]#stdin#, and store it in the first byte of the `buffer`. The "
+"system returns the number of bytes read in `EAX`. This will be `1` while "
+"data is coming, or `0`, when no more input data is available. Therefore, we "
+"check the value of `EAX`. If it is `0`, we jump to `.done`, otherwise we "
+"continue."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:697
+msgid ""
+"For simplicity sake, we are ignoring the possibility of an error condition "
+"at this time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:702
+msgid ""
+"The hexadecimal conversion reads the byte from the `buffer` into `EAX`, or "
+"actually just `AL`, while clearing the remaining bits of `EAX` to zeros. We "
+"also copy the byte to `EDX` because we need to convert the upper four bits "
+"(nibble) separately from the lower four bits. We store the result in the "
+"first two bytes of the buffer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:705
+msgid ""
+"Next, we ask the system to write the three bytes of the buffer, i.e., the "
+"two hexadecimal digits and the blank space, to [.filename]#stdout#. We then "
+"jump back to the beginning of the program and process the next byte."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:707
+msgid ""
+"Once there is no more input left, we ask the system to exit our program, "
+"returning a zero, which is the traditional value meaning the program was "
+"successful."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:709
+msgid ""
+"Go ahead, and save the code in a file named [.filename]#hex.asm#, then type "
+"the following (the `^D` means press the control key and type `D` while "
+"holding the control key down):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:718
+#, no-wrap
+msgid ""
+"% nasm -f elf hex.asm\n"
+"% ld -s -o hex hex.o\n"
+"% ./hex\n"
+"Hello, World!\n"
+"48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 0A Here I come!\n"
+"48 65 72 65 20 49 20 63 6F 6D 65 21 0A ^D %\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:724
+msgid ""
+"If you are migrating to UNIX(R) from MS-DOS(R), you may be wondering why "
+"each line ends with `0A` instead of `0D 0A`. This is because UNIX(R) does "
+"not use the cr/lf convention, but a \"new line\" convention, which is `0A` "
+"in hexadecimal."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:729
+msgid ""
+"Can we improve this? Well, for one, it is a bit confusing because once we "
+"have converted a line of text, our input no longer starts at the beginning "
+"of the line. We can modify it to print a new line instead of a space after "
+"each `0A`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:742
+#, no-wrap
+msgid ""
+"section\t.text\n"
+"global\t_start\n"
+"_start:\n"
+"\tmov\tcl, ' '\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:752
+#, no-wrap
+msgid ""
+".loop:\n"
+"\t; read a byte from stdin\n"
+"\tpush\tdword 1\n"
+"\tpush\tdword buffer\n"
+"\tpush\tdword stdin\n"
+"\tsys.read\n"
+"\tadd\tesp, byte 12\n"
+"\tor\teax, eax\n"
+"\tje\t.done\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:759
+#, no-wrap
+msgid ""
+"\t; convert it to hex\n"
+"\tmovzx\teax, byte [buffer]\n"
+"\tmov\t[buffer+2], cl\n"
+"\tcmp\tal, 0Ah\n"
+"\tjne\t.hex\n"
+"\tmov\t[buffer+2], al\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:768
+#, no-wrap
+msgid ""
+".hex:\n"
+"\tmov\tedx, eax\n"
+"\tshr\tdl, 4\n"
+"\tmov\tdl, [hex+edx]\n"
+"\tmov\t[buffer], dl\n"
+"\tand\tal, 0Fh\n"
+"\tmov\tal, [hex+eax]\n"
+"\tmov\t[buffer+1], al\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:776
+#, no-wrap
+msgid ""
+"\t; print it\n"
+"\tpush\tdword 3\n"
+"\tpush\tdword buffer\n"
+"\tpush\tdword stdout\n"
+"\tsys.write\n"
+"\tadd\tesp, byte 12\n"
+"\tjmp\tshort .loop\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:784
+msgid ""
+"We have stored the space in the `CL` register. We can do this safely "
+"because, unlike Microsoft(R) Windows(R), UNIX(R) system calls do not modify "
+"the value of any register they do not use to return a value in."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:788
+msgid ""
+"That means we only need to set `CL` once. We have, therefore, added a new "
+"label `.loop` and jump to it for the next byte instead of jumping at "
+"`_start`. We have also added the `.hex` label so we can either have a blank "
+"space or a new line as the third byte of the `buffer`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:790
+msgid ""
+"Once you have changed [.filename]#hex.asm# to reflect these changes, type:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:801
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1060
+#, no-wrap
+msgid ""
+"% nasm -f elf hex.asm\n"
+"% ld -s -o hex hex.o\n"
+"% ./hex\n"
+"Hello, World!\n"
+"48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 0A\n"
+"Here I come!\n"
+"48 65 72 65 20 49 20 63 6F 6D 65 21 0A\n"
+"^D %\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:805
+msgid ""
+"That looks better. But this code is quite inefficient! We are making a "
+"system call for every single byte twice (once to read it, another time to "
+"write the output)."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:807
+#, no-wrap
+msgid "Buffered Input and Output"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:812
+msgid ""
+"We can improve the efficiency of our code by buffering our input and "
+"output. We create an input buffer and read a whole sequence of bytes at one "
+"time. Then we fetch them one by one from the buffer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:815
+msgid ""
+"We also create an output buffer. We store our output in it until it is "
+"full. At that time we ask the kernel to write the contents of the buffer to "
+"[.filename]#stdout#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:819
+msgid ""
+"The program ends when there is no more input. But we still need to ask the "
+"kernel to write the contents of our output buffer to [.filename]#stdout# one "
+"last time, otherwise some of our output would make it to the output buffer, "
+"but never be sent out. Do not forget that, or you will be wondering why "
+"some of your output is missing."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:825
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:953
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1220
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2338
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3336
+#, no-wrap
+msgid "%define\tBUFSIZE\t2048\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:828
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:956
+#, no-wrap
+msgid ""
+"section\t.data\n"
+"hex\tdb\t'0123456789ABCDEF'\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:832
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:960
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1229
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2352
+#, no-wrap
+msgid ""
+"section .bss\n"
+"ibuffer\tresb\tBUFSIZE\n"
+"obuffer\tresb\tBUFSIZE\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:840
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:968
+#, no-wrap
+msgid ""
+"section\t.text\n"
+"global\t_start\n"
+"_start:\n"
+"\tsub\teax, eax\n"
+"\tsub\tebx, ebx\n"
+"\tsub\tecx, ecx\n"
+"\tmov\tedi, obuffer\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:844
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:972
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2500
+#, no-wrap
+msgid ""
+".loop:\n"
+"\t; read a byte from stdin\n"
+"\tcall\tgetchar\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:850
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:978
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1282
+#, no-wrap
+msgid ""
+"\t; convert it to hex\n"
+"\tmov\tdl, al\n"
+"\tshr\tal, 4\n"
+"\tmov\tal, [hex+eax]\n"
+"\tcall\tputchar\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:855
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:983
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1287
+#, no-wrap
+msgid ""
+"\tmov\tal, dl\n"
+"\tand\tal, 0Fh\n"
+"\tmov\tal, [hex+eax]\n"
+"\tcall\tputchar\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:860
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:988
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1292
+#, no-wrap
+msgid ""
+"\tmov\tal, ' '\n"
+"\tcmp\tdl, 0Ah\n"
+"\tjne\t.put\n"
+"\tmov\tal, dl\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:864
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2511
+#, no-wrap
+msgid ""
+".put:\n"
+"\tcall\tputchar\n"
+"\tjmp\tshort .loop\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:869
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1000
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1304
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2533
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3847
+#, no-wrap
+msgid ""
+"align 4\n"
+"getchar:\n"
+"\tor\tebx, ebx\n"
+"\tjne\t.fetch\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:871
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1002
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1306
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2535
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3849
+#, no-wrap
+msgid "\tcall\tread\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:876
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1007
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1311
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2540
+#, no-wrap
+msgid ""
+".fetch:\n"
+"\tlodsb\n"
+"\tdec\tebx\n"
+"\tret\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:889
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1020
+#, no-wrap
+msgid ""
+"read:\n"
+"\tpush\tdword BUFSIZE\n"
+"\tmov\tesi, ibuffer\n"
+"\tpush\tesi\n"
+"\tpush\tdword stdin\n"
+"\tsys.read\n"
+"\tadd\tesp, byte 12\n"
+"\tmov\tebx, eax\n"
+"\tor\teax, eax\n"
+"\tje\t.done\n"
+"\tsub\teax, eax\n"
+"\tret\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:895
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1026
+#, no-wrap
+msgid ""
+"align 4\n"
+".done:\n"
+"\tcall\twrite\t\t; flush output buffer\n"
+"\tpush\tdword 0\n"
+"\tsys.exit\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:903
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1034
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1347
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2580
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3886
+#, no-wrap
+msgid ""
+"align 4\n"
+"putchar:\n"
+"\tstosb\n"
+"\tinc\tecx\n"
+"\tcmp\tecx, BUFSIZE\n"
+"\tje\twrite\n"
+"\tret\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:915
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1046
+#, no-wrap
+msgid ""
+"align 4\n"
+"write:\n"
+"\tsub\tedi, ecx\t; start of buffer\n"
+"\tpush\tecx\n"
+"\tpush\tedi\n"
+"\tpush\tdword stdout\n"
+"\tsys.write\n"
+"\tadd\tesp, byte 12\n"
+"\tsub\teax, eax\n"
+"\tsub\tecx, ecx\t; buffer is empty now\n"
+"\tret\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:921
+msgid ""
+"We now have a third section in the source code, named `.bss`. This section "
+"is not included in our executable file, and, therefore, cannot be "
+"initialized. We use `resb` instead of `db`. It simply reserves the "
+"requested size of uninitialized memory for our use."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:925
+msgid ""
+"We take advantage of the fact that the system does not modify the registers: "
+"We use registers for what, otherwise, would have to be global variables "
+"stored in the `.data` section. This is also why the UNIX(R) convention of "
+"passing parameters to system calls on the stack is superior to the Microsoft "
+"convention of passing them in the registers: We can keep the registers for "
+"our own use."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:929
+msgid ""
+"We use `EDI` and `ESI` as pointers to the next byte to be read from or "
+"written to. We use `EBX` and `ECX` to keep count of the number of bytes in "
+"the two buffers, so we know when to dump the output to, or read more input "
+"from, the system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:931
+msgid "Let us see how it works now:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:942
+#, no-wrap
+msgid ""
+"% nasm -f elf hex.asm\n"
+"% ld -s -o hex hex.o\n"
+"% ./hex\n"
+"Hello, World!\n"
+"Here I come!\n"
+"48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 0A\n"
+"48 65 72 65 20 49 20 63 6F 6D 65 21 0A\n"
+"^D %\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:947
+msgid ""
+"Not what you expected? The program did not print the output until we pressed "
+"`^D`. That is easy to fix by inserting three lines of code to write the "
+"output every time we have converted a new line to `0A`. I have marked the "
+"three lines with > (do not copy the > in your [.filename]#hex.asm#)."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:995
+#, no-wrap
+msgid ""
+".put:\n"
+"\tcall\tputchar\n"
+">\tcmp\tal, 0Ah\n"
+">\tjne\t.loop\n"
+">\tcall\twrite\n"
+"\tjmp\tshort .loop\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1049
+msgid "Now, let us see how it works:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1063
+msgid "Not bad for a 644-byte executable, is it!"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1068
+msgid ""
+"This approach to buffered input/output still contains a hidden danger. I "
+"will discuss-and fix-it later, when I talk about the <<x86-buffered-dark-"
+"side,dark side of buffering>>."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1071
+#, no-wrap
+msgid "How to Unread a Character"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1077
+msgid ""
+"This may be a somewhat advanced topic, mostly of interest to programmers "
+"familiar with the theory of compilers. If you wish, you may <<x86-command-"
+"line,skip to the next section>>, and perhaps read this later."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1083
+msgid ""
+"While our sample program does not require it, more sophisticated filters "
+"often need to look ahead. In other words, they may need to see what the "
+"next character is (or even several characters). If the next character is of "
+"a certain value, it is part of the token currently being processed. "
+"Otherwise, it is not."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1087
+msgid ""
+"For example, you may be parsing the input stream for a textual string (e.g., "
+"when implementing a language compiler): If a character is followed by "
+"another character, or perhaps a digit, it is part of the token you are "
+"processing. If it is followed by white space, or some other value, then it "
+"is not part of the current token."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1089
+msgid ""
+"This presents an interesting problem: How to return the next character back "
+"to the input stream, so it can be read again later?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1093
+msgid ""
+"One possible solution is to store it in a character variable, then set a "
+"flag. We can modify `getchar` to check the flag, and if it is set, fetch "
+"the byte from that variable instead of the input buffer, and reset the "
+"flag. But, of course, that slows us down."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1098
+msgid ""
+"The C language has an `ungetc()` function, just for that purpose. Is there "
+"a quick way to implement it in our code? I would like you to scroll back up "
+"and take a look at the `getchar` procedure and see if you can find a nice "
+"and fast solution before reading the next paragraph. Then come back here "
+"and see my own solution."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1100
+msgid ""
+"The key to returning a character back to the stream is in how we are getting "
+"the characters to start with:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1103
+msgid ""
+"First we check if the buffer is empty by testing the value of `EBX`. If it "
+"is zero, we call the `read` procedure."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1106
+msgid ""
+"If we do have a character available, we use `lodsb`, then decrease the value "
+"of `EBX`. The `lodsb` instruction is effectively identical to:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1111
+#, no-wrap
+msgid ""
+"mov\tal, [esi]\n"
+"\tinc\tesi\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1116
+msgid ""
+"The byte we have fetched remains in the buffer until the next time `read` is "
+"called. We do not know when that happens, but we do know it will not happen "
+"until the next call to `getchar`. Hence, to \"return\" the last-read byte "
+"back to the stream, all we have to do is decrease the value of `ESI` and "
+"increase the value of `EBX`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1123
+#, no-wrap
+msgid ""
+"ungetc:\n"
+"\tdec\tesi\n"
+"\tinc\tebx\n"
+"\tret\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1127
+msgid ""
+"But, be careful! We are perfectly safe doing this if our look-ahead is at "
+"most one character at a time. If we are examining more than one upcoming "
+"character and call `ungetc` several times in a row, it will work most of the "
+"time, but not all the time (and will be tough to debug). Why?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1130
+msgid ""
+"Because as long as `getchar` does not have to call `read`, all of the pre-"
+"read bytes are still in the buffer, and our `ungetc` works without a "
+"glitch. But the moment `getchar` calls `read`, the contents of the buffer "
+"change."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1132
+msgid ""
+"We can always rely on `ungetc` working properly on the last character we "
+"have read with `getchar`, but not on anything we have read before that."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1134
+msgid ""
+"If your program reads more than one byte ahead, you have at least two "
+"choices:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1137
+msgid ""
+"If possible, modify the program so it only reads one byte ahead. This is "
+"the simplest solution."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1141
+msgid ""
+"If that option is not available, first of all determine the maximum number "
+"of characters your program needs to return to the input stream at one time. "
+"Increase that number slightly, just to be sure, preferably to a multiple of "
+"16-so it aligns nicely. Then modify the `.bss` section of your code, and "
+"create a small \"spare\" buffer right before your input buffer, something "
+"like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1148
+#, no-wrap
+msgid ""
+"section\t.bss\n"
+"\tresb\t16\t; or whatever the value you came up with\n"
+"ibuffer\tresb\tBUFSIZE\n"
+"obuffer\tresb\tBUFSIZE\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1151
+msgid ""
+"You also need to modify your `ungetc` to pass the value of the byte to unget "
+"in `AL`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1159
+#, no-wrap
+msgid ""
+"ungetc:\n"
+"\tdec\tesi\n"
+"\tinc\tebx\n"
+"\tmov\t[esi], al\n"
+"\tret\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1162
+msgid ""
+"With this modification, you can call `ungetc` up to 17 times in a row safely "
+"(the first call will still be within the buffer, the remaining 16 may be "
+"either within the buffer or within the \"spare\")."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1164
+#, no-wrap
+msgid "Command Line Arguments"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1168
+msgid ""
+"Our hex program will be more useful if it can read the names of an input and "
+"output file from its command line, i.e., if it can process the command line "
+"arguments. But... Where are they?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1172
+msgid ""
+"Before a UNIX(R) system starts a program, it ``push``es some data on the "
+"stack, then jumps at the `_start` label of the program. Yes, I said jumps, "
+"not calls. That means the data can be accessed by reading `[esp+offset]`, "
+"or by simply ``pop``ping it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1175
+msgid ""
+"The value at the top of the stack contains the number of command line "
+"arguments. It is traditionally called `argc`, for \"argument count.\""
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1180
+msgid ""
+"Command line arguments follow next, all `argc` of them. These are typically "
+"referred to as `argv`, for \"argument value(s).\" That is, we get `argv[0]`, "
+"`argv[1]`, `...`, `argv[argc-1]`. These are not the actual arguments, but "
+"pointers to arguments, i.e., memory addresses of the actual arguments. The "
+"arguments themselves are NUL-terminated character strings."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1182
+msgid ""
+"The `argv` list is followed by a NULL pointer, which is simply a `0`. There "
+"is more, but this is enough for our purposes right now."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1187
+msgid ""
+"If you have come from the MS-DOS(R) programming environment, the main "
+"difference is that each argument is in a separate string. The second "
+"difference is that there is no practical limit on how many arguments there "
+"can be."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1191
+msgid ""
+"Armed with this knowledge, we are almost ready for the next version of [."
+"filename]#hex.asm#. First, however, we need to add a few lines to [."
+"filename]#system.inc#:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1193
+msgid ""
+"First, we need to add two new entries to our list of system call numbers:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1198
+#, no-wrap
+msgid ""
+"%define\tSYS_open\t5\n"
+"%define\tSYS_close\t6\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1201
+msgid "Then we add two new macros at the end of the file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1207
+#, no-wrap
+msgid ""
+"%macro\tsys.open\t0\n"
+"\tsystem\tSYS_open\n"
+"%endmacro\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1211
+#, no-wrap
+msgid ""
+"%macro\tsys.close\t0\n"
+"\tsystem\tSYS_close\n"
+"%endmacro\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1214
+msgid "Here, then, is our modified source code:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1225
+#, no-wrap
+msgid ""
+"section\t.data\n"
+"fd.in\tdd\tstdin\n"
+"fd.out\tdd\tstdout\n"
+"hex\tdb\t'0123456789ABCDEF'\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1235
+#, no-wrap
+msgid ""
+"section\t.text\n"
+"align 4\n"
+"err:\n"
+"\tpush\tdword 1\t\t; return failure\n"
+"\tsys.exit\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1240
+#, no-wrap
+msgid ""
+"align 4\n"
+"global\t_start\n"
+"_start:\n"
+"\tadd\tesp, byte 8\t; discard argc and argv[0]\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1243
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1255
+#, no-wrap
+msgid ""
+"\tpop\tecx\n"
+"\tjecxz\t.init\t\t; no more arguments\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1249
+#, no-wrap
+msgid ""
+"\t; ECX contains the path to input file\n"
+"\tpush\tdword 0\t\t; O_RDONLY\n"
+"\tpush\tecx\n"
+"\tsys.open\n"
+"\tjc\terr\t\t; open failed\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1252
+#, no-wrap
+msgid ""
+"\tadd\tesp, byte 8\n"
+"\tmov\t[fd.in], eax\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1263
+#, no-wrap
+msgid ""
+"\t; ECX contains the path to output file\n"
+"\tpush\tdword 420\t; file mode (644 octal)\n"
+"\tpush\tdword 0200h | 0400h | 01h\n"
+"\t; O_CREAT | O_TRUNC | O_WRONLY\n"
+"\tpush\tecx\n"
+"\tsys.open\n"
+"\tjc\terr\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1266
+#, no-wrap
+msgid ""
+"\tadd\tesp, byte 12\n"
+"\tmov\t[fd.out], eax\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1272
+#, no-wrap
+msgid ""
+".init:\n"
+"\tsub\teax, eax\n"
+"\tsub\tebx, ebx\n"
+"\tsub\tecx, ecx\n"
+"\tmov\tedi, obuffer\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1276
+#, no-wrap
+msgid ""
+".loop:\n"
+"\t; read a byte from input file or stdin\n"
+"\tcall\tgetchar\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1299
+#, no-wrap
+msgid ""
+".put:\n"
+"\tcall\tputchar\n"
+"\tcmp\tal, dl\n"
+"\tjne\t.loop\n"
+"\tcall\twrite\n"
+"\tjmp\tshort .loop\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1324
+#, no-wrap
+msgid ""
+"read:\n"
+"\tpush\tdword BUFSIZE\n"
+"\tmov\tesi, ibuffer\n"
+"\tpush\tesi\n"
+"\tpush\tdword [fd.in]\n"
+"\tsys.read\n"
+"\tadd\tesp, byte 12\n"
+"\tmov\tebx, eax\n"
+"\tor\teax, eax\n"
+"\tje\t.done\n"
+"\tsub\teax, eax\n"
+"\tret\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1328
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2561
+#, no-wrap
+msgid ""
+"align 4\n"
+".done:\n"
+"\tcall\twrite\t\t; flush output buffer\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1332
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2565
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3819
+#, no-wrap
+msgid ""
+"\t; close files\n"
+"\tpush\tdword [fd.in]\n"
+"\tsys.close\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1335
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2568
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3822
+#, no-wrap
+msgid ""
+"\tpush\tdword [fd.out]\n"
+"\tsys.close\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1339
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2572
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3828
+#, no-wrap
+msgid ""
+"\t; return success\n"
+"\tpush\tdword 0\n"
+"\tsys.exit\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1359
+#, no-wrap
+msgid ""
+"align 4\n"
+"write:\n"
+"\tsub\tedi, ecx\t; start of buffer\n"
+"\tpush\tecx\n"
+"\tpush\tedi\n"
+"\tpush\tdword [fd.out]\n"
+"\tsys.write\n"
+"\tadd\tesp, byte 12\n"
+"\tsub\teax, eax\n"
+"\tsub\tecx, ecx\t; buffer is empty now\n"
+"\tret\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1363
+msgid ""
+"In our `.data` section we now have two new variables, `fd.in` and `fd.out`. "
+"We store the input and output file descriptors here."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1365
+msgid ""
+"In the `.text` section we have replaced the references to `stdin` and "
+"`stdout` with `[fd.in]` and `[fd.out]`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1368
+msgid ""
+"The `.text` section now starts with a simple error handler, which does "
+"nothing but exit the program with a return value of `1`. The error handler "
+"is before `_start` so we are within a short distance from where the errors "
+"occur."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1371
+msgid ""
+"Naturally, the program execution still begins at `_start`. First, we remove "
+"`argc` and `argv[0]` from the stack: They are of no interest to us (in this "
+"program, that is)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1377
+msgid ""
+"We pop `argv[1]` to `ECX`. This register is particularly suited for "
+"pointers, as we can handle NULL pointers with `jecxz`. If `argv[1]` is not "
+"NULL, we try to open the file named in the first argument. Otherwise, we "
+"continue the program as before: Reading from `stdin`, writing to `stdout`. "
+"If we fail to open the input file (e.g., it does not exist), we jump to the "
+"error handler and quit."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1382
+msgid ""
+"If all went well, we now check for the second argument. If it is there, we "
+"open the output file. Otherwise, we send the output to `stdout`. If we "
+"fail to open the output file (e.g., it exists and we do not have the write "
+"permission), we, again, jump to the error handler."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1384
+msgid ""
+"The rest of the code is the same as before, except we close the input and "
+"output files before exiting, and, as mentioned, we use `[fd.in]` and `[fd."
+"out]`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1386
+msgid "Our executable is now a whopping 768 bytes long."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1389
+msgid ""
+"Can we still improve it? Of course! Every program can be improved. Here are "
+"a few ideas of what we could do:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1391
+msgid "Have our error handler print a message to `stderr`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1392
+msgid "Add error handlers to the `read` and `write` functions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1393
+msgid ""
+"Close `stdin` when we open an input file, `stdout` when we open an output "
+"file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1394
+msgid ""
+"Add command line switches, such as `-i` and `-o`, so we can list the input "
+"and output files in any order, or perhaps read from `stdin` and write to a "
+"file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1395
+msgid "Print a usage message if command line arguments are incorrect."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1397
+msgid ""
+"I shall leave these enhancements as an exercise to the reader: You already "
+"know everything you need to know to implement them."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1399
+#, no-wrap
+msgid "UNIX(R) Environment"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1403
+msgid ""
+"An important UNIX(R) concept is the environment, which is defined by "
+"_environment variables_. Some are set by the system, others by you, yet "
+"others by the shell, or any program that loads another program."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1405
+#, no-wrap
+msgid "How to Find Environment Variables"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1410
+msgid ""
+"I said earlier that when a program starts executing, the stack contains "
+"`argc` followed by the NULL-terminated `argv` array, followed by something "
+"else. The \"something else\" is the _environment_, or, to be more precise, "
+"a NULL-terminated array of pointers to _environment variables_. This is "
+"often referred to as `env`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1413
+msgid ""
+"The structure of `env` is the same as that of `argv`, a list of memory "
+"addresses followed by a NULL (`0`). In this case, there is no `\"envc\"`-we "
+"figure out where the array ends by searching for the final NULL."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1416
+msgid ""
+"The variables usually come in the `name=value` format, but sometimes the "
+"`=value` part may be missing. We need to account for that possibility."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1418
+#, no-wrap
+msgid "webvars"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1422
+msgid ""
+"I could just show you some code that prints the environment the same way the "
+"UNIX(R) env command does. But I thought it would be more interesting to "
+"write a simple assembly language CGI utility."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1424
+#, no-wrap
+msgid "CGI: a Quick Overview"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1427
+msgid ""
+"I have a http://www.whizkidtech.redprince.net/cgi-bin/tutorial[detailed CGI "
+"tutorial] on my web site, but here is a very quick overview of CGI:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1429
+msgid ""
+"The web server communicates with the CGI program by setting _environment "
+"variables_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1430
+msgid ""
+"The CGI program sends its output to [.filename]#stdout#. The web server "
+"reads it from there."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1431
+msgid "It must start with an HTTP header followed by two blank lines."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1432
+msgid ""
+"It then prints the HTML code, or whatever other type of data it is producing."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1437
+msgid ""
+"While certain _environment variables_ use standard names, others vary, "
+"depending on the web server. That makes webvars quite a useful diagnostic "
+"tool."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1440
+#, no-wrap
+msgid "The Code"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1444
+msgid ""
+"Our webvars program, then, must send out the HTTP header followed by some "
+"HTML mark-up. It then must read the _environment variables_ one by one and "
+"send them out as part of the HTML page."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1447
+msgid ""
+"The code follows. I placed comments and explanations right inside the code:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1484
+#, no-wrap
+msgid ""
+";;;;;;; webvars.asm ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
+";\n"
+"; Copyright (c) 2000 G. Adam Stanislav\n"
+"; All rights reserved.\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"
+";\n"
+"; Version 1.0\n"
+";\n"
+"; Started:\t 8-Dec-2000\n"
+"; Updated:\t 8-Dec-2000\n"
+";\n"
+";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
+"%include\t'system.inc'\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1521
+#, no-wrap
+msgid ""
+"section\t.data\n"
+"http\tdb\t'Content-type: text/html', 0Ah, 0Ah\n"
+"\tdb\t'<?xml version=\"1.0\" encoding=\"utf-8\"?>', 0Ah\n"
+"\tdb\t'<!DOCTYPE html PUBLIC \"-//W3C/DTD XHTML Strict//EN\" '\n"
+"\tdb\t'\"DTD/xhtml1-strict.dtd\">', 0Ah\n"
+"\tdb\t'<html xmlns=\"http://www.w3.org/1999/xhtml\" '\n"
+"\tdb\t'xml.lang=\"en\" lang=\"en\">', 0Ah\n"
+"\tdb\t'<head>', 0Ah\n"
+"\tdb\t'<title>Web Environment</title>', 0Ah\n"
+"\tdb\t'<meta name=\"author\" content=\"G. Adam Stanislav\" />', 0Ah\n"
+"\tdb\t'</head>', 0Ah, 0Ah\n"
+"\tdb\t'<body bgcolor=\"#ffffff\" text=\"#000000\" link=\"#0000ff\" '\n"
+"\tdb\t'vlink=\"#840084\" alink=\"#0000ff\">', 0Ah\n"
+"\tdb\t'<div class=\"webvars\">', 0Ah\n"
+"\tdb\t'<h1>Web Environment</h1>', 0Ah\n"
+"\tdb\t'<p>The following <b>environment variables</b> are defined '\n"
+"\tdb\t'on this web server:</p>', 0Ah, 0Ah\n"
+"\tdb\t'<table align=\"center\" width=\"80\" border=\"0\" cellpadding=\"10\" '\n"
+"\tdb\t'cellspacing=\"0\" class=\"webvars\">', 0Ah\n"
+"httplen\tequ\t$-http\n"
+"left\tdb\t'<tr>', 0Ah\n"
+"\tdb\t'<td class=\"name\"><tt>'\n"
+"leftlen\tequ\t$-left\n"
+"middle\tdb\t'</tt></td>', 0Ah\n"
+"\tdb\t'<td class=\"value\"><tt><b>'\n"
+"midlen\tequ\t$-middle\n"
+"undef\tdb\t'<i>(undefined)</i>'\n"
+"undeflen\tequ\t$-undef\n"
+"right\tdb\t'</b></tt></td>', 0Ah\n"
+"\tdb\t'</tr>', 0Ah\n"
+"rightlen\tequ\t$-right\n"
+"wrap\tdb\t'</table>', 0Ah\n"
+"\tdb\t'</div>', 0Ah\n"
+"\tdb\t'</body>', 0Ah\n"
+"\tdb\t'</html>', 0Ah, 0Ah\n"
+"wraplen\tequ\t$-wrap\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1531
+#, no-wrap
+msgid ""
+"section\t.text\n"
+"global\t_start\n"
+"_start:\n"
+"\t; First, send out all the http and xhtml stuff that is\n"
+"\t; needed before we start showing the environment\n"
+"\tpush\tdword httplen\n"
+"\tpush\tdword http\n"
+"\tpush\tdword stdout\n"
+"\tsys.write\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1535
+#, no-wrap
+msgid ""
+"\t; Now find how far on the stack the environment pointers\n"
+"\t; are. We have 12 bytes we have pushed before \"argc\"\n"
+"\tmov\teax, [esp+12]\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1550
+#, no-wrap
+msgid ""
+"\t; We need to remove the following from the stack:\n"
+"\t;\n"
+"\t;\tThe 12 bytes we pushed for sys.write\n"
+"\t;\tThe 4 bytes of argc\n"
+"\t;\tThe EAX*4 bytes of argv\n"
+"\t;\tThe 4 bytes of the NULL after argv\n"
+"\t;\n"
+"\t; Total:\n"
+"\t;\t20 + eax * 4\n"
+"\t;\n"
+"\t; Because stack grows down, we need to ADD that many bytes\n"
+"\t; to ESP.\n"
+"\tlea\tesp, [esp+20+eax*4]\n"
+"\tcld\t\t; This should already be the case, but let's be sure.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1556
+#, no-wrap
+msgid ""
+"\t; Loop through the environment, printing it out\n"
+".loop:\n"
+"\tpop\tedi\n"
+"\tor\tedi, edi\t; Done yet?\n"
+"\tje\tnear .wrap\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1562
+#, no-wrap
+msgid ""
+"\t; Print the left part of HTML\n"
+"\tpush\tdword leftlen\n"
+"\tpush\tdword left\n"
+"\tpush\tdword stdout\n"
+"\tsys.write\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1573
+#, no-wrap
+msgid ""
+"\t; It may be tempting to search for the '=' in the env string next.\n"
+"\t; But it is possible there is no '=', so we search for the\n"
+"\t; terminating NUL first.\n"
+"\tmov\tesi, edi\t; Save start of string\n"
+"\tsub\tecx, ecx\n"
+"\tnot\tecx\t\t; ECX = FFFFFFFF\n"
+"\tsub\teax, eax\n"
+"repne\tscasb\n"
+"\tnot\tecx\t\t; ECX = string length + 1\n"
+"\tmov\tebx, ecx\t; Save it in EBX\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1580
+#, no-wrap
+msgid ""
+"\t; Now is the time to find '='\n"
+"\tmov\tedi, esi\t; Start of string\n"
+"\tmov\tal, '='\n"
+"repne\tscasb\n"
+"\tnot\tecx\n"
+"\tadd\tecx, ebx\t; Length of name\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1585
+#, no-wrap
+msgid ""
+"\tpush\tecx\n"
+"\tpush\tesi\n"
+"\tpush\tdword stdout\n"
+"\tsys.write\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1591
+#, no-wrap
+msgid ""
+"\t; Print the middle part of HTML table code\n"
+"\tpush\tdword midlen\n"
+"\tpush\tdword middle\n"
+"\tpush\tdword stdout\n"
+"\tsys.write\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1595
+#, no-wrap
+msgid ""
+"\t; Find the length of the value\n"
+"\tnot\tecx\n"
+"\tlea\tebx, [ebx+ecx-1]\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1599
+#, no-wrap
+msgid ""
+"\t; Print \"undefined\" if 0\n"
+"\tor\tebx, ebx\n"
+"\tjne\t.value\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1602
+#, no-wrap
+msgid ""
+"\tmov\tebx, undeflen\n"
+"\tmov\tedi, undef\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1608
+#, no-wrap
+msgid ""
+".value:\n"
+"\tpush\tebx\n"
+"\tpush\tedi\n"
+"\tpush\tdword stdout\n"
+"\tsys.write\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1614
+#, no-wrap
+msgid ""
+"\t; Print the right part of the table row\n"
+"\tpush\tdword rightlen\n"
+"\tpush\tdword right\n"
+"\tpush\tdword stdout\n"
+"\tsys.write\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1617
+#, no-wrap
+msgid ""
+"\t; Get rid of the 60 bytes we have pushed\n"
+"\tadd\tesp, byte 60\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1620
+#, no-wrap
+msgid ""
+"\t; Get the next variable\n"
+"\tjmp\t.loop\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1627
+#, no-wrap
+msgid ""
+".wrap:\n"
+"\t; Print the rest of HTML\n"
+"\tpush\tdword wraplen\n"
+"\tpush\tdword wrap\n"
+"\tpush\tdword stdout\n"
+"\tsys.write\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1631
+#, no-wrap
+msgid ""
+"\t; Return success\n"
+"\tpush\tdword 0\n"
+"\tsys.exit\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1635
+msgid ""
+"This code produces a 1,396-byte executable. Most of it is data, i.e., the "
+"HTML mark-up we need to send out."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1637
+msgid "Assemble and link it as usual:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1642
+#, no-wrap
+msgid ""
+"% nasm -f elf webvars.asm\n"
+"% ld -s -o webvars webvars.o\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1646
+msgid ""
+"To use it, you need to upload [.filename]#webvars# to your web server. "
+"Depending on how your web server is set up, you may have to store it in a "
+"special [.filename]#cgi-bin# directory, or perhaps rename it with a [."
+"filename]#.cgi# extension."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1650
+msgid ""
+"Then you need to use your browser to view its output. To see its output on "
+"my web server, please go to http://www.int80h.org/webvars/[http://www.int80h."
+"org/webvars/]. If curious about the additional environment variables "
+"present in a password protected web directory, go to http://www.int80h.org/"
+"private/[http://www.int80h.org/private/], using the name `asm` and password "
+"`programmer`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1652
+#, no-wrap
+msgid "Working with Files"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1657
+msgid ""
+"We have already done some basic file work: We know how to open and close "
+"them, how to read and write them using buffers. But UNIX(R) offers much "
+"more functionality when it comes to files. We will examine some of it in "
+"this section, and end up with a nice file conversion utility."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1660
+msgid ""
+"Indeed, let us start at the end, that is, with the file conversion utility. "
+"It always makes programming easier when we know from the start what the end "
+"product is supposed to do."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1666
+msgid ""
+"One of the first programs I wrote for UNIX(R) was link:ftp://ftp.int80h.org/"
+"unix/tuc/[tuc], a text-to-UNIX(R) file converter. It converts a text file "
+"from other operating systems to a UNIX(R) text file. In other words, it "
+"changes from different kind of line endings to the newline convention of "
+"UNIX(R). It saves the output in a different file. Optionally, it converts "
+"a UNIX(R) text file to a DOS text file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1670
+msgid ""
+"I have used tuc extensively, but always only to convert from some other OS "
+"to UNIX(R), never the other way. I have always wished it would just "
+"overwrite the file instead of me having to send the output to a different "
+"file. Most of the time, I end up using it like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1675
+#, no-wrap
+msgid ""
+"% tuc myfile tempfile\n"
+"% mv tempfile myfile\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1678
+msgid ""
+"It would be nice to have a ftuc, i.e., _fast tuc_, and use it like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1682
+#, no-wrap
+msgid "% ftuc myfile\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1685
+msgid ""
+"In this chapter, then, we will write ftuc in assembly language (the original "
+"tuc is in C), and study various file-oriented kernel services in the process."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1687
+msgid ""
+"At first sight, such a file conversion is very simple: All you have to do is "
+"strip the carriage returns, right?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1689
+msgid ""
+"If you answered yes, think again: That approach will work most of the time "
+"(at least with MS DOS text files), but will fail occasionally."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1694
+msgid ""
+"The problem is that not all non UNIX(R) text files end their line with the "
+"carriage return / line feed sequence. Some use carriage returns without "
+"line feeds. Others combine several blank lines into a single carriage "
+"return followed by several line feeds. And so on."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1696
+msgid ""
+"A text file converter, then, must be able to handle any possible line "
+"endings:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1698
+msgid "carriage return / line feed"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1699
+msgid "carriage return"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1700
+msgid "line feed / carriage return"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1701
+msgid "line feed"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1703
+msgid ""
+"It should also handle files that use some kind of a combination of the above "
+"(e.g., carriage return followed by several line feeds)."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1705
+#, no-wrap
+msgid "Finite State Machine"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1712
+msgid ""
+"The problem is easily solved by the use of a technique called _finite state "
+"machine_, originally developed by the designers of digital electronic "
+"circuits. A _finite state machine_ is a digital circuit whose output is "
+"dependent not only on its input but on its previous input, i.e., on its "
+"state. The microprocessor is an example of a _finite state machine_: Our "
+"assembly language code is assembled to machine language in which some "
+"assembly language code produces a single byte of machine language, while "
+"others produce several bytes. As the microprocessor fetches the bytes from "
+"the memory one by one, some of them simply change its state rather than "
+"produce some output. When all the bytes of the op code are fetched, the "
+"microprocessor produces some output, or changes the value of a register, etc."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1715
+msgid ""
+"Because of that, all software is essentially a sequence of state "
+"instructions for the microprocessor. Nevertheless, the concept of _finite "
+"state machine_ is useful in software design as well."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1718
+msgid ""
+"Our text file converter can be designer as a _finite state machine_ with "
+"three possible states. We could call them states 0-2, but it will make our "
+"life easier if we give them symbolic names:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1720
+msgid "ordinary"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1721
+msgid "cr"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1722
+msgid "lf"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1724
+msgid ""
+"Our program will start in the ordinary state. During this state, the program "
+"action depends on its input as follows:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1727
+msgid ""
+"If the input is anything other than a carriage return or line feed, the "
+"input is simply passed on to the output. The state remains unchanged."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1729
+msgid ""
+"If the input is a carriage return, the state is changed to cr. The input is "
+"then discarded, i.e., no output is made."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1731
+msgid ""
+"If the input is a line feed, the state is changed to lf. The input is then "
+"discarded."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1734
+msgid ""
+"Whenever we are in the cr state, it is because the last input was a carriage "
+"return, which was unprocessed. What our software does in this state again "
+"depends on the current input:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1736
+msgid ""
+"If the input is anything other than a carriage return or line feed, output a "
+"line feed, then output the input, then change the state to ordinary."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1737
+msgid ""
+"If the input is a carriage return, we have received two (or more) carriage "
+"returns in a row. We discard the input, we output a line feed, and leave the "
+"state unchanged."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1738
+msgid ""
+"If the input is a line feed, we output the line feed and change the state to "
+"ordinary. Note that this is not the same as the first case above - if we "
+"tried to combine them, we would be outputting two line feeds instead of one."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1742
+msgid ""
+"Finally, we are in the lf state after we have received a line feed that was "
+"not preceded by a carriage return. This will happen when our file already "
+"is in UNIX(R) format, or whenever several lines in a row are expressed by a "
+"single carriage return followed by several line feeds, or when line ends "
+"with a line feed / carriage return sequence. Here is how we need to handle "
+"our input in this state:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1744
+msgid ""
+"If the input is anything other than a carriage return or line feed, we "
+"output a line feed, then output the input, then change the state to "
+"ordinary. This is exactly the same action as in the cr state upon receiving "
+"the same kind of input."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1745
+msgid ""
+"If the input is a carriage return, we discard the input, we output a line "
+"feed, then change the state to ordinary."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1746
+msgid ""
+"If the input is a line feed, we output the line feed, and leave the state "
+"unchanged."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1748
+#, no-wrap
+msgid "The Final State"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1753
+msgid ""
+"The above _finite state machine_ works for the entire file, but leaves the "
+"possibility that the final line end will be ignored. That will happen "
+"whenever the file ends with a single carriage return or a single line feed. "
+"I did not think of it when I wrote tuc, just to discover that occasionally "
+"it strips the last line ending."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1756
+msgid ""
+"This problem is easily fixed by checking the state after the entire file was "
+"processed. If the state is not ordinary, we simply need to output one last "
+"line feed."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1762
+msgid ""
+"Now that we have expressed our algorithm as a _finite state machine_, we "
+"could easily design a dedicated digital electronic circuit (a \"chip\") to "
+"do the conversion for us. Of course, doing so would be considerably more "
+"expensive than writing an assembly language program."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1765
+#, no-wrap
+msgid "The Output Counter"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1770
+msgid ""
+"Because our file conversion program may be combining two characters into "
+"one, we need to use an output counter. We initialize it to `0`, and "
+"increase it every time we send a character to the output. At the end of the "
+"program, the counter will tell us what size we need to set the file to."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1772
+#, no-wrap
+msgid "Implementing FSM in Software"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1776
+msgid ""
+"The hardest part of working with a _finite state machine_ is analyzing the "
+"problem and expressing it as a _finite state machine_. That accomplished, "
+"the software almost writes itself."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1779
+msgid ""
+"In a high-level language, such as C, there are several main approaches. One "
+"is to use a `switch` statement which chooses what function should be run. "
+"For example,"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1794
+#, no-wrap
+msgid ""
+"switch (state) {\n"
+"\tdefault:\n"
+"\tcase REGULAR:\n"
+"\t\tregular(inputchar);\n"
+"\t\tbreak;\n"
+"\tcase CR:\n"
+"\t\tcr(inputchar);\n"
+"\t\tbreak;\n"
+"\tcase LF:\n"
+"\t\tlf(inputchar);\n"
+"\t\tbreak;\n"
+"\t}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1797
+msgid ""
+"Another approach is by using an array of function pointers, something like "
+"this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1801
+#, no-wrap
+msgid "(output[state])(inputchar);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1804
+msgid ""
+"Yet another is to have `state` be a function pointer, set to point at the "
+"appropriate function:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1808
+#, no-wrap
+msgid "(*state)(inputchar);\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1812
+msgid ""
+"This is the approach we will use in our program because it is very easy to "
+"do in assembly language, and very fast, too. We will simply keep the "
+"address of the right procedure in `EBX`, and then just issue:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1816
+#, no-wrap
+msgid "call\tebx\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1820
+msgid ""
+"This is possibly faster than hardcoding the address in the code because the "
+"microprocessor does not have to fetch the address from the memory-it is "
+"already stored in one of its registers. I said _possibly_ because with the "
+"caching modern microprocessors do, either way may be equally fast."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1822
+#, no-wrap
+msgid "Memory Mapped Files"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1826
+msgid ""
+"Because our program works on a single file, we cannot use the approach that "
+"worked for us before, i.e., to read from an input file and to write to an "
+"output file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1834
+msgid ""
+"UNIX(R) allows us to map a file, or a section of a file, into memory. To do "
+"that, we first need to open the file with the appropriate read/write flags. "
+"Then we use the `mmap` system call to map it into the memory. One nice "
+"thing about `mmap` is that it automatically works with virtual memory: We "
+"can map more of the file into the memory than we have physical memory "
+"available, yet still access it through regular memory op codes, such as "
+"`mov`, `lods`, and `stos`. Whatever changes we make to the memory image of "
+"the file will be written to the file by the system. We do not even have to "
+"keep the file open: As long as it stays mapped, we can read from it and "
+"write to it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1837
+msgid ""
+"The 32-bit Intel microprocessors can access up to four gigabytes of memory - "
+"physical or virtual. The FreeBSD system allows us to use up to a half of it "
+"for file mapping."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1841
+msgid ""
+"For simplicity sake, in this tutorial we will only convert files that can be "
+"mapped into the memory in their entirety. There are probably not too many "
+"text files that exceed two gigabytes in size. If our program encounters "
+"one, it will simply display a message suggesting we use the original tuc "
+"instead."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1847
+msgid ""
+"If you examine your copy of [.filename]#syscalls.master#, you will find two "
+"separate syscalls named `mmap`. This is because of evolution of UNIX(R): "
+"There was the traditional BSD `mmap`, syscall 71. That one was superseded "
+"by the POSIX(R) `mmap`, syscall 197. The FreeBSD system supports both "
+"because older programs were written by using the original BSD version. But "
+"new software uses the POSIX(R) version, which is what we will use."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1849
+msgid "The [.filename]#syscalls.master# lists the POSIX(R) version like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1854
+#, no-wrap
+msgid ""
+"197\tSTD\tBSD\t{ caddr_t mmap(caddr_t addr, size_t len, int prot, \\\n"
+"\t\t\t int flags, int fd, long pad, off_t pos); }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1858
+msgid ""
+"This differs slightly from what man:mmap[2] says. That is because man:"
+"mmap[2] describes the C version."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1862
+msgid ""
+"The difference is in the `long pad` argument, which is not present in the C "
+"version. However, the FreeBSD syscalls add a 32-bit pad after ``push``ing a "
+"64-bit argument. In this case, `off_t` is a 64-bit value."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1864
+msgid ""
+"When we are finished working with a memory-mapped file, we unmap it with the "
+"`munmap` syscall:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1868
+msgid ""
+"For an in-depth treatment of `mmap`, see W. Richard Stevens' http://www."
+"int80h.org/cgi-bin/isbn?isbn=0130810819[Unix Network Programming, Volume 2, "
+"Chapter 12]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1871
+#, no-wrap
+msgid "Determining File Size"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1874
+msgid ""
+"Because we need to tell `mmap` how many bytes of the file to map into the "
+"memory, and because we want to map the entire file, we need to determine the "
+"size of the file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1877
+msgid ""
+"We can use the `fstat` syscall to get all the information about an open file "
+"that the system can give us. That includes the file size."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1880
+msgid ""
+"Again, [.filename]#syscalls.master# lists two versions of `fstat`, a "
+"traditional one (syscall 62), and a POSIX(R) one (syscall 189). Naturally, "
+"we will use the POSIX(R) version:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1884
+#, no-wrap
+msgid "189\tSTD\tPOSIX\t{ int fstat(int fd, struct stat *sb); }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1888
+msgid ""
+"This is a very straightforward call: We pass to it the address of a `stat` "
+"structure and the descriptor of an open file. It will fill out the contents "
+"of the `stat` structure."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1891
+msgid ""
+"I do, however, have to say that I tried to declare the `stat` structure in "
+"the `.bss` section, and `fstat` did not like it: It set the carry flag "
+"indicating an error. After I changed the code to allocate the structure on "
+"the stack, everything was working fine."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1893
+#, no-wrap
+msgid "Changing the File Size"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1897
+msgid ""
+"Because our program may combine carriage return / line feed sequences into "
+"straight line feeds, our output may be smaller than our input. However, "
+"since we are placing our output into the same file we read the input from, "
+"we may have to change the size of the file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1900
+msgid ""
+"The `ftruncate` system call allows us to do just that. Despite its somewhat "
+"misleading name, the `ftruncate` system call can be used to both truncate "
+"the file (make it smaller) and to grow it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1903
+msgid ""
+"And yes, we will find two versions of `ftruncate` in [.filename]#syscalls."
+"master#, an older one (130), and a newer one (201). We will use the newer "
+"one:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1907
+#, no-wrap
+msgid "201\tSTD\tBSD\t{ int ftruncate(int fd, int pad, off_t length); }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1910
+msgid "Please note that this one contains a `int pad` again."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1912
+#, no-wrap
+msgid "ftuc"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1917
+msgid ""
+"We now know everything we need to write ftuc. We start by adding some new "
+"lines in [.filename]#system.inc#. First, we define some constants and "
+"structures, somewhere at or near the beginning of the file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1924
+#, no-wrap
+msgid ""
+";;;;;;; open flags\n"
+"%define\tO_RDONLY\t0\n"
+"%define\tO_WRONLY\t1\n"
+"%define\tO_RDWR\t2\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1933
+#, no-wrap
+msgid ""
+";;;;;;; mmap flags\n"
+"%define\tPROT_NONE\t0\n"
+"%define\tPROT_READ\t1\n"
+"%define\tPROT_WRITE\t2\n"
+"%define\tPROT_EXEC\t4\n"
+";;\n"
+"%define\tMAP_SHARED\t0001h\n"
+"%define\tMAP_PRIVATE\t0002h\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1957
+#, no-wrap
+msgid ""
+";;;;;;; stat structure\n"
+"struc\tstat\n"
+"st_dev\t\tresd\t1\t; = 0\n"
+"st_ino\t\tresd\t1\t; = 4\n"
+"st_mode\t\tresw\t1\t; = 8, size is 16 bits\n"
+"st_nlink\tresw\t1\t; = 10, ditto\n"
+"st_uid\t\tresd\t1\t; = 12\n"
+"st_gid\t\tresd\t1\t; = 16\n"
+"st_rdev\t\tresd\t1\t; = 20\n"
+"st_atime\tresd\t1\t; = 24\n"
+"st_atimensec\tresd\t1\t; = 28\n"
+"st_mtime\tresd\t1\t; = 32\n"
+"st_mtimensec\tresd\t1\t; = 36\n"
+"st_ctime\tresd\t1\t; = 40\n"
+"st_ctimensec\tresd\t1\t; = 44\n"
+"st_size\t\tresd\t2\t; = 48, size is 64 bits\n"
+"st_blocks\tresd\t2\t; = 56, ditto\n"
+"st_blksize\tresd\t1\t; = 64\n"
+"st_flags\tresd\t1\t; = 68\n"
+"st_gen\t\tresd\t1\t; = 72\n"
+"st_lspare\tresd\t1\t; = 76\n"
+"st_qspare\tresd\t4\t; = 80\n"
+"endstruc\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1960
+msgid "We define the new syscalls:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1967
+#, no-wrap
+msgid ""
+"%define\tSYS_mmap\t197\n"
+"%define\tSYS_munmap\t73\n"
+"%define\tSYS_fstat\t189\n"
+"%define\tSYS_ftruncate\t201\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1970
+msgid "We add the macros for their use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1976
+#, no-wrap
+msgid ""
+"%macro\tsys.mmap\t0\n"
+"\tsystem\tSYS_mmap\n"
+"%endmacro\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1980
+#, no-wrap
+msgid ""
+"%macro\tsys.munmap\t0\n"
+"\tsystem\tSYS_munmap\n"
+"%endmacro\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1984
+#, no-wrap
+msgid ""
+"%macro\tsys.ftruncate\t0\n"
+"\tsystem\tSYS_ftruncate\n"
+"%endmacro\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1988
+#, no-wrap
+msgid ""
+"%macro\tsys.fstat\t0\n"
+"\tsystem\tSYS_fstat\n"
+"%endmacro\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1991
+msgid "And here is our code:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2004
+#, no-wrap
+msgid ""
+";;;;;;; Fast Text-to-Unix Conversion (ftuc.asm) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
+";;\n"
+";; Started:\t21-Dec-2000\n"
+";; Updated:\t22-Dec-2000\n"
+";;\n"
+";; Copyright 2000 G. Adam Stanislav.\n"
+";; All rights reserved.\n"
+";;\n"
+";;;;;;; v.1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
+"%include\t'system.inc'\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2018
+#, no-wrap
+msgid ""
+"section\t.data\n"
+"\tdb\t'Copyright 2000 G. Adam Stanislav.', 0Ah\n"
+"\tdb\t'All rights reserved.', 0Ah\n"
+"usg\tdb\t'Usage: ftuc filename', 0Ah\n"
+"usglen\tequ\t$-usg\n"
+"co\tdb\t\"ftuc: Can't open file.\", 0Ah\n"
+"colen\tequ\t$-co\n"
+"fae\tdb\t'ftuc: File access error.', 0Ah\n"
+"faelen\tequ\t$-fae\n"
+"ftl\tdb\t'ftuc: File too long, use regular tuc instead.', 0Ah\n"
+"ftllen\tequ\t$-ftl\n"
+"mae\tdb\t'ftuc: Memory allocation error.', 0Ah\n"
+"maelen\tequ\t$-mae\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2020
+#, no-wrap
+msgid "section\t.text\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2026
+#, no-wrap
+msgid ""
+"align 4\n"
+"memerr:\n"
+"\tpush\tdword maelen\n"
+"\tpush\tdword mae\n"
+"\tjmp\tshort error\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2032
+#, no-wrap
+msgid ""
+"align 4\n"
+"toolong:\n"
+"\tpush\tdword ftllen\n"
+"\tpush\tdword ftl\n"
+"\tjmp\tshort error\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2038
+#, no-wrap
+msgid ""
+"align 4\n"
+"facerr:\n"
+"\tpush\tdword faelen\n"
+"\tpush\tdword fae\n"
+"\tjmp\tshort error\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2044
+#, no-wrap
+msgid ""
+"align 4\n"
+"cantopen:\n"
+"\tpush\tdword colen\n"
+"\tpush\tdword co\n"
+"\tjmp\tshort error\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2049
+#, no-wrap
+msgid ""
+"align 4\n"
+"usage:\n"
+"\tpush\tdword usglen\n"
+"\tpush\tdword usg\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2053
+#, no-wrap
+msgid ""
+"error:\n"
+"\tpush\tdword stderr\n"
+"\tsys.write\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2056
+#, no-wrap
+msgid ""
+"\tpush\tdword 1\n"
+"\tsys.exit\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2064
+#, no-wrap
+msgid ""
+"align 4\n"
+"global\t_start\n"
+"_start:\n"
+"\tpop\teax\t\t; argc\n"
+"\tpop\teax\t\t; program name\n"
+"\tpop\tecx\t\t; file to convert\n"
+"\tjecxz\tusage\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2068
+#, no-wrap
+msgid ""
+"\tpop\teax\n"
+"\tor\teax, eax\t; Too many arguments?\n"
+"\tjne\tusage\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2074
+#, no-wrap
+msgid ""
+"\t; Open the file\n"
+"\tpush\tdword O_RDWR\n"
+"\tpush\tecx\n"
+"\tsys.open\n"
+"\tjc\tcantopen\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2076
+#, no-wrap
+msgid "\tmov\tebp, eax\t; Save fd\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2079
+#, no-wrap
+msgid ""
+"\tsub\tesp, byte stat_size\n"
+"\tmov\tebx, esp\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2085
+#, no-wrap
+msgid ""
+"\t; Find file size\n"
+"\tpush\tebx\n"
+"\tpush\tebp\t\t; fd\n"
+"\tsys.fstat\n"
+"\tjc\tfacerr\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2087
+#, no-wrap
+msgid "\tmov\tedx, [ebx + st_size + 4]\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2095
+#, no-wrap
+msgid ""
+"\t; File is too long if EDX != 0 ...\n"
+"\tor\tedx, edx\n"
+"\tjne\tnear toolong\n"
+"\tmov\tecx, [ebx + st_size]\n"
+"\t; ... or if it is above 2 GB\n"
+"\tor\tecx, ecx\n"
+"\tjs\tnear toolong\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2098
+#, no-wrap
+msgid ""
+"\t; Do nothing if the file is 0 bytes in size\n"
+"\tjecxz\t.quit\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2110
+#, no-wrap
+msgid ""
+"\t; Map the entire file in memory\n"
+"\tpush\tedx\n"
+"\tpush\tedx\t\t; starting at offset 0\n"
+"\tpush\tedx\t\t; pad\n"
+"\tpush\tebp\t\t; fd\n"
+"\tpush\tdword MAP_SHARED\n"
+"\tpush\tdword PROT_READ | PROT_WRITE\n"
+"\tpush\tecx\t\t; entire file size\n"
+"\tpush\tedx\t\t; let system decide on the address\n"
+"\tsys.mmap\n"
+"\tjc\tnear memerr\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2115
+#, no-wrap
+msgid ""
+"\tmov\tedi, eax\n"
+"\tmov\tesi, eax\n"
+"\tpush\tecx\t\t; for SYS_munmap\n"
+"\tpush\tedi\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2120
+#, no-wrap
+msgid ""
+"\t; Use EBX for state machine\n"
+"\tmov\tebx, ordinary\n"
+"\tmov\tah, 0Ah\n"
+"\tcld\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2125
+#, no-wrap
+msgid ""
+".loop:\n"
+"\tlodsb\n"
+"\tcall\tebx\n"
+"\tloop\t.loop\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2128
+#, no-wrap
+msgid ""
+"\tcmp\tebx, ordinary\n"
+"\tje\t.filesize\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2133
+#, no-wrap
+msgid ""
+"\t; Output final lf\n"
+"\tmov\tal, ah\n"
+"\tstosb\n"
+"\tinc\tedx\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2141
+#, no-wrap
+msgid ""
+".filesize:\n"
+"\t; truncate file to new size\n"
+"\tpush\tdword 0\t\t; high dword\n"
+"\tpush\tedx\t\t; low dword\n"
+"\tpush\teax\t\t; pad\n"
+"\tpush\tebp\n"
+"\tsys.ftruncate\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2144
+#, no-wrap
+msgid ""
+"\t; close it (ebp still pushed)\n"
+"\tsys.close\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2147
+#, no-wrap
+msgid ""
+"\tadd\tesp, byte 16\n"
+"\tsys.munmap\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2151
+#, no-wrap
+msgid ""
+".quit:\n"
+"\tpush\tdword 0\n"
+"\tsys.exit\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2156
+#, no-wrap
+msgid ""
+"align 4\n"
+"ordinary:\n"
+"\tcmp\tal, 0Dh\n"
+"\tje\t.cr\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2159
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2181
+#, no-wrap
+msgid ""
+"\tcmp\tal, ah\n"
+"\tje\t.lf\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2163
+#, no-wrap
+msgid ""
+"\tstosb\n"
+"\tinc\tedx\n"
+"\tret\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2168
+#, no-wrap
+msgid ""
+"align 4\n"
+".cr:\n"
+"\tmov\tebx, cr\n"
+"\tret\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2173
+#, no-wrap
+msgid ""
+"align 4\n"
+".lf:\n"
+"\tmov\tebx, lf\n"
+"\tret\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2178
+#, no-wrap
+msgid ""
+"align 4\n"
+"cr:\n"
+"\tcmp\tal, 0Dh\n"
+"\tje\t.cr\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2185
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2213
+#, no-wrap
+msgid ""
+"\txchg\tal, ah\n"
+"\tstosb\n"
+"\tinc\tedx\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2188
+#, no-wrap
+msgid ""
+"\txchg\tal, ah\n"
+"\t; fall through\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2194
+#, no-wrap
+msgid ""
+".lf:\n"
+"\tstosb\n"
+"\tinc\tedx\n"
+"\tmov\tebx, ordinary\n"
+"\tret\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2201
+#, no-wrap
+msgid ""
+"align 4\n"
+".cr:\n"
+"\tmov\tal, ah\n"
+"\tstosb\n"
+"\tinc\tedx\n"
+"\tret\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2206
+#, no-wrap
+msgid ""
+"align 4\n"
+"lf:\n"
+"\tcmp\tal, ah\n"
+"\tje\t.lf\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2209
+#, no-wrap
+msgid ""
+"\tcmp\tal, 0Dh\n"
+"\tje\t.cr\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2219
+#, no-wrap
+msgid ""
+"\txchg\tal, ah\n"
+"\tstosb\n"
+"\tinc\tedx\n"
+"\tmov\tebx, ordinary\n"
+"\tret\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2225
+#, no-wrap
+msgid ""
+"align 4\n"
+".cr:\n"
+"\tmov\tebx, ordinary\n"
+"\tmov\tal, ah\n"
+"\t; fall through\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2230
+#, no-wrap
+msgid ""
+".lf:\n"
+"\tstosb\n"
+"\tinc\tedx\n"
+"\tret\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2237
+msgid ""
+"Do not use this program on files stored on a disk formatted by MS-DOS(R) or "
+"Windows(R). There seems to be a subtle bug in the FreeBSD code when using "
+"`mmap` on these drives mounted under FreeBSD: If the file is over a certain "
+"size, `mmap` will just fill the memory with zeros, and then copy them to the "
+"file overwriting its contents."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2240
+#, no-wrap
+msgid "One-Pointed Mind"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2243
+msgid ""
+"As a student of Zen, I like the idea of a one-pointed mind: Do one thing at "
+"a time, and do it well."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2246
+msgid ""
+"This, indeed, is very much how UNIX(R) works as well. While a typical "
+"Windows(R) application is attempting to do everything imaginable (and is, "
+"therefore, riddled with bugs), a typical UNIX(R) program does only one "
+"thing, and it does it well."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2248
+msgid ""
+"The typical UNIX(R) user then essentially assembles his own applications by "
+"writing a shell script which combines the various existing programs by "
+"piping the output of one program to the input of another."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2250
+msgid ""
+"When writing your own UNIX(R) software, it is generally a good idea to see "
+"what parts of the problem you need to solve can be handled by existing "
+"programs, and only write your own programs for that part of the problem that "
+"you do not have an existing solution for."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2252
+#, no-wrap
+msgid "CSV"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2255
+msgid ""
+"I will illustrate this principle with a specific real-life example I was "
+"faced with recently:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2259
+msgid ""
+"I needed to extract the 11th field of each record from a database I "
+"downloaded from a web site. The database was a CSV file, i.e., a list of "
+"_comma-separated values_. That is quite a standard format for sharing data "
+"among people who may be using different database software."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2262
+msgid ""
+"The first line of the file contains the list of various fields separated by "
+"commas. The rest of the file contains the data listed line by line, with "
+"values separated by commas."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2264
+msgid ""
+"I tried awk, using the comma as a separator. But because several lines "
+"contained a quoted comma, awk was extracting the wrong field from those "
+"lines."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2267
+msgid ""
+"Therefore, I needed to write my own software to extract the 11th field from "
+"the CSV file. However, going with the UNIX(R) spirit, I only needed to "
+"write a simple filter that would do the following:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2269
+msgid "Remove the first line from the file;"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2270
+msgid "Change all unquoted commas to a different character;"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2271
+msgid "Remove all quotation marks."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2273
+msgid ""
+"Strictly speaking, I could use sed to remove the first line from the file, "
+"but doing so in my own program was very easy, so I decided to do it and "
+"reduce the size of the pipeline."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2277
+msgid ""
+"At any rate, writing a program like this took me about 20 minutes. Writing "
+"a program that extracts the 11th field from the CSV file would take a lot "
+"longer, and I could not reuse it to extract some other field from some other "
+"database."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2279
+msgid ""
+"This time I decided to let it do a little more work than a typical tutorial "
+"program would:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2281
+msgid "It parses its command line for options;"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2282
+msgid "It displays proper usage if it finds wrong arguments;"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2283
+msgid "It produces meaningful error messages."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2285
+msgid "Here is its usage message:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2289
+#, no-wrap
+msgid "Usage: csv [-t<delim>] [-c<comma>] [-p] [-o <outfile>] [-i <infile>]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2292
+msgid "All parameters are optional, and can appear in any order."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2296
+msgid ""
+"The `-t` parameter declares what to replace the commas with. The `tab` is "
+"the default here. For example, `-t;` will replace all unquoted commas with "
+"semicolons."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2300
+msgid ""
+"I did not need the `-c` option, but it may come in handy in the future. It "
+"lets me declare that I want a character other than a comma replaced with "
+"something else. For example, `-c@` will replace all at signs (useful if you "
+"want to split a list of email addresses to their user names and domains)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2303
+msgid ""
+"The `-p` option preserves the first line, i.e., it does not delete it. By "
+"default, we delete the first line because in a CSV file it contains the "
+"field names rather than data."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2306
+msgid ""
+"The `-i` and `-o` options let me specify the input and the output files. "
+"Defaults are [.filename]#stdin# and [.filename]#stdout#, so this is a "
+"regular UNIX(R) filter."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2309
+msgid ""
+"I made sure that both `-i filename` and `-ifilename` are accepted. I also "
+"made sure that only one input and one output files may be specified."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2311
+msgid "To get the 11th field of each record, I can now do:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2315
+#, no-wrap
+msgid "% csv '-t;' data.csv | awk '-F;' '{print $11}'\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2318
+msgid ""
+"The code stores the options (except for the file descriptors) in `EDX`: The "
+"comma in `DH`, the new separator in `DL`, and the flag for the `-p` option "
+"in the highest bit of `EDX`, so a check for its sign will give us a quick "
+"decision what to do."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2320
+msgid "Here is the code:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2334
+#, no-wrap
+msgid ""
+";;;;;;; csv.asm ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
+";\n"
+"; Convert a comma-separated file to a something-else separated file.\n"
+";\n"
+"; Started:\t31-May-2001\n"
+"; Updated:\t 1-Jun-2001\n"
+";\n"
+"; Copyright (c) 2001 G. Adam Stanislav\n"
+"; All rights reserved.\n"
+";\n"
+";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2348
+#, no-wrap
+msgid ""
+"section\t.data\n"
+"fd.in\tdd\tstdin\n"
+"fd.out\tdd\tstdout\n"
+"usg\tdb\t'Usage: csv [-t<delim>] [-c<comma>] [-p] [-o <outfile>] [-i <infile>]', 0Ah\n"
+"usglen\tequ\t$-usg\n"
+"iemsg\tdb\t\"csv: Can't open input file\", 0Ah\n"
+"iemlen\tequ\t$-iemsg\n"
+"oemsg\tdb\t\"csv: Can't create output file\", 0Ah\n"
+"oemlen\tequ\t$-oemsg\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2362
+#, no-wrap
+msgid ""
+"section\t.text\n"
+"align 4\n"
+"ierr:\n"
+"\tpush\tdword iemlen\n"
+"\tpush\tdword iemsg\n"
+"\tpush\tdword stderr\n"
+"\tsys.write\n"
+"\tpush\tdword 1\t\t; return failure\n"
+"\tsys.exit\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2371
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3420
+#, no-wrap
+msgid ""
+"align 4\n"
+"oerr:\n"
+"\tpush\tdword oemlen\n"
+"\tpush\tdword oemsg\n"
+"\tpush\tdword stderr\n"
+"\tsys.write\n"
+"\tpush\tdword 2\n"
+"\tsys.exit\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2380
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3429
+#, no-wrap
+msgid ""
+"align 4\n"
+"usage:\n"
+"\tpush\tdword usglen\n"
+"\tpush\tdword usg\n"
+"\tpush\tdword stderr\n"
+"\tsys.write\n"
+"\tpush\tdword 3\n"
+"\tsys.exit\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2386
+#, no-wrap
+msgid ""
+"align 4\n"
+"global\t_start\n"
+"_start:\n"
+"\tadd\tesp, byte 8\t; discard argc and argv[0]\n"
+"\tmov\tedx, (',' << 8) | 9\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2391
+#, no-wrap
+msgid ""
+".arg:\n"
+"\tpop\tecx\n"
+"\tor\tecx, ecx\n"
+"\tje\tnear .init\t\t; no more arguments\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2395
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3444
+#, no-wrap
+msgid ""
+"\t; ECX contains the pointer to an argument\n"
+"\tcmp\tbyte [ecx], '-'\n"
+"\tjne\tusage\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2398
+#, no-wrap
+msgid ""
+"\tinc\tecx\n"
+"\tmov\tax, [ecx]\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2402
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3452
+#, no-wrap
+msgid ""
+".o:\n"
+"\tcmp\tal, 'o'\n"
+"\tjne\t.i\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2406
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3456
+#, no-wrap
+msgid ""
+"\t; Make sure we are not asked for the output file twice\n"
+"\tcmp\tdword [fd.out], stdout\n"
+"\tjne\tusage\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2411
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3461
+#, no-wrap
+msgid ""
+"\t; Find the path to output file - it is either at [ECX+1],\n"
+"\t; i.e., -ofile --\n"
+"\t; or in the next argument,\n"
+"\t; i.e., -o file\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2417
+#, no-wrap
+msgid ""
+"\tinc\tecx\n"
+"\tor\tah, ah\n"
+"\tjne\t.openoutput\n"
+"\tpop\tecx\n"
+"\tjecxz\tusage\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2425
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3474
+#, no-wrap
+msgid ""
+".openoutput:\n"
+"\tpush\tdword 420\t; file mode (644 octal)\n"
+"\tpush\tdword 0200h | 0400h | 01h\n"
+"\t; O_CREAT | O_TRUNC | O_WRONLY\n"
+"\tpush\tecx\n"
+"\tsys.open\n"
+"\tjc\tnear oerr\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2429
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3478
+#, no-wrap
+msgid ""
+"\tadd\tesp, byte 12\n"
+"\tmov\t[fd.out], eax\n"
+"\tjmp\tshort .arg\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2433
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3482
+#, no-wrap
+msgid ""
+".i:\n"
+"\tcmp\tal, 'i'\n"
+"\tjne\t.p\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2437
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3486
+#, no-wrap
+msgid ""
+"\t; Make sure we are not asked twice\n"
+"\tcmp\tdword [fd.in], stdin\n"
+"\tjne\tnear usage\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2445
+#, no-wrap
+msgid ""
+"\t; Find the path to the input file\n"
+"\tinc\tecx\n"
+"\tor\tah, ah\n"
+"\tjne\t.openinput\n"
+"\tpop\tecx\n"
+"\tor\tecx, ecx\n"
+"\tje near usage\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2451
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3499
+#, no-wrap
+msgid ""
+".openinput:\n"
+"\tpush\tdword 0\t\t; O_RDONLY\n"
+"\tpush\tecx\n"
+"\tsys.open\n"
+"\tjc\tnear ierr\t\t; open failed\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2455
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3503
+#, no-wrap
+msgid ""
+"\tadd\tesp, byte 8\n"
+"\tmov\t[fd.in], eax\n"
+"\tjmp\t.arg\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2463
+#, no-wrap
+msgid ""
+".p:\n"
+"\tcmp\tal, 'p'\n"
+"\tjne\t.t\n"
+"\tor\tah, ah\n"
+"\tjne\tnear usage\n"
+"\tor\tedx, 1 << 31\n"
+"\tjmp\t.arg\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2471
+#, no-wrap
+msgid ""
+".t:\n"
+"\tcmp\tal, 't'\t\t; redefine output delimiter\n"
+"\tjne\t.c\n"
+"\tor\tah, ah\n"
+"\tje\tnear usage\n"
+"\tmov\tdl, ah\n"
+"\tjmp\t.arg\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2479
+#, no-wrap
+msgid ""
+".c:\n"
+"\tcmp\tal, 'c'\n"
+"\tjne\tnear usage\n"
+"\tor\tah, ah\n"
+"\tje\tnear usage\n"
+"\tmov\tdh, ah\n"
+"\tjmp\t.arg\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2486
+#, no-wrap
+msgid ""
+"align 4\n"
+".init:\n"
+"\tsub\teax, eax\n"
+"\tsub\tebx, ebx\n"
+"\tsub\tecx, ecx\n"
+"\tmov\tedi, obuffer\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2490
+#, no-wrap
+msgid ""
+"\t; See if we are to preserve the first line\n"
+"\tor\tedx, edx\n"
+"\tjs\t.loop\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2496
+#, no-wrap
+msgid ""
+".firstline:\n"
+"\t; get rid of the first line\n"
+"\tcall\tgetchar\n"
+"\tcmp\tal, 0Ah\n"
+"\tjne\t.firstline\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2504
+#, no-wrap
+msgid ""
+"\t; is it a comma (or whatever the user asked for)?\n"
+"\tcmp\tal, dh\n"
+"\tjne\t.quote\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2507
+#, no-wrap
+msgid ""
+"\t; Replace the comma with a tab (or whatever the user wants)\n"
+"\tmov\tal, dl\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2515
+#, no-wrap
+msgid ""
+".quote:\n"
+"\tcmp\tal, '\"'\n"
+"\tjne\t.put\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2522
+#, no-wrap
+msgid ""
+"\t; Print everything until you get another quote or EOL. If it\n"
+"\t; is a quote, skip it. If it is EOL, print it.\n"
+".qloop:\n"
+"\tcall\tgetchar\n"
+"\tcmp\tal, '\"'\n"
+"\tje\t.loop\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2525
+#, no-wrap
+msgid ""
+"\tcmp\tal, 0Ah\n"
+"\tje\t.put\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2528
+#, no-wrap
+msgid ""
+"\tcall\tputchar\n"
+"\tjmp\tshort .qloop\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2544
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3859
+#, no-wrap
+msgid ""
+"read:\n"
+"\tjecxz\t.read\n"
+"\tcall\twrite\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2557
+#, no-wrap
+msgid ""
+".read:\n"
+"\tpush\tdword BUFSIZE\n"
+"\tmov\tesi, ibuffer\n"
+"\tpush\tesi\n"
+"\tpush\tdword [fd.in]\n"
+"\tsys.read\n"
+"\tadd\tesp, byte 12\n"
+"\tmov\tebx, eax\n"
+"\tor\teax, eax\n"
+"\tje\t.done\n"
+"\tsub\teax, eax\n"
+"\tret\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2594
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3900
+#, no-wrap
+msgid ""
+"align 4\n"
+"write:\n"
+"\tjecxz\t.ret\t; nothing to write\n"
+"\tsub\tedi, ecx\t; start of buffer\n"
+"\tpush\tecx\n"
+"\tpush\tedi\n"
+"\tpush\tdword [fd.out]\n"
+"\tsys.write\n"
+"\tadd\tesp, byte 12\n"
+"\tsub\teax, eax\n"
+"\tsub\tecx, ecx\t; buffer is empty now\n"
+".ret:\n"
+"\tret\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2599
+msgid ""
+"Much of it is taken from [.filename]#hex.asm# above. But there is one "
+"important difference: I no longer call `write` whenever I am outputting a "
+"line feed. Yet, the code can be used interactively."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2603
+msgid ""
+"I have found a better solution for the interactive problem since I first "
+"started writing this chapter. I wanted to make sure each line is printed "
+"out separately only when needed. After all, there is no need to flush out "
+"every line when used non-interactively."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2607
+msgid ""
+"The new solution I use now is to call `write` every time I find the input "
+"buffer empty. That way, when running in the interactive mode, the program "
+"reads one line from the user's keyboard, processes it, and sees its input "
+"buffer is empty. It flushes its output and reads the next line."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2609
+#, no-wrap
+msgid "The Dark Side of Buffering"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2613
+msgid ""
+"This change prevents a mysterious lockup in a very specific case. I refer "
+"to it as the _dark side of buffering_, mostly because it presents a danger "
+"that is not quite obvious."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2617
+msgid ""
+"It is unlikely to happen with a program like the csv above, so let us "
+"consider yet another filter: In this case we expect our input to be raw data "
+"representing color values, such as the _red_, _green_, and _blue_ "
+"intensities of a pixel. Our output will be the negative of our input."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2620
+msgid ""
+"Such a filter would be very simple to write. Most of it would look just "
+"like all the other filters we have written so far, so I am only going to "
+"show you its inner loop:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2628
+#, no-wrap
+msgid ""
+".loop:\n"
+"\tcall\tgetchar\n"
+"\tnot\tal\t\t; Create a negative\n"
+"\tcall\tputchar\n"
+"\tjmp\tshort .loop\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2631
+msgid ""
+"Because this filter works with raw data, it is unlikely to be used "
+"interactively."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2634
+msgid ""
+"But it could be called by image manipulation software. And, unless it calls "
+"`write` before each call to `read`, chances are it will lock up."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2636
+msgid "Here is what might happen:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2639
+msgid "The image editor will load our filter using the C function `popen()`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2640
+msgid "It will read the first row of pixels from a bitmap or pixmap."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2641
+msgid ""
+"It will write the first row of pixels to the _pipe_ leading to the `fd.in` "
+"of our filter."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2642
+msgid ""
+"Our filter will read each pixel from its input, turn it to a negative, and "
+"write it to its output buffer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2643
+msgid "Our filter will call `getchar` to fetch the next pixel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2644
+msgid "`getchar` will find an empty input buffer, so it will call `read`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2645
+msgid "`read` will call the `SYS_read` system call."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2646
+msgid ""
+"The _kernel_ will suspend our filter until the image editor sends more data "
+"to the pipe."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2647
+msgid ""
+"The image editor will read from the other pipe, connected to the `fd.out` of "
+"our filter so it can set the first row of the output image _before_ it sends "
+"us the second row of the input."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2648
+msgid ""
+"The _kernel_ suspends the image editor until it receives some output from "
+"our filter, so it can pass it on to the image editor."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2652
+msgid ""
+"At this point our filter waits for the image editor to send it more data to "
+"process, while the image editor is waiting for our filter to send it the "
+"result of the processing of the first row. But the result sits in our "
+"output buffer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2655
+msgid ""
+"The filter and the image editor will continue waiting for each other forever "
+"(or, at least, until they are killed). Our software has just entered a "
+"crossref:secure[secure-race-conditions,race condition]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2657
+msgid ""
+"This problem does not exist if our filter flushes its output buffer _before_ "
+"asking the _kernel_ for more input data."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2659
+#, no-wrap
+msgid "Using the FPU"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2662
+msgid ""
+"Strangely enough, most of assembly language literature does not even mention "
+"the existence of the FPU, or _floating point unit_, let alone discuss "
+"programming it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2664
+msgid ""
+"Yet, never does assembly language shine more than when we create highly "
+"optimized FPU code by doing things that can be done _only_ in assembly "
+"language."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2666
+#, no-wrap
+msgid "Organization of the FPU"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2670
+msgid ""
+"The FPU consists of 8 80-bit floating-point registers. These are organized "
+"in a stack fashion-you can `push` a value on TOS (_top of stack_) and you "
+"can `pop` it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2672
+msgid ""
+"That said, the assembly language op codes are not `push` and `pop` because "
+"those are already taken."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2675
+msgid ""
+"You can `push` a value on TOS by using `fld`, `fild`, and `fbld`. Several "
+"other op codes let you `push` many common _constants_-such as _pi_-on the "
+"TOS."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2678
+msgid ""
+"Similarly, you can `pop` a value by using `fst`, `fstp`, `fist`, `fistp`, "
+"and `fbstp`. Actually, only the op codes that end with a _p_ will literally "
+"`pop` the value, the rest will `store` it somewhere else without removing it "
+"from the TOS."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2680
+msgid ""
+"We can transfer the data between the TOS and the computer memory either as a "
+"32-bit, 64-bit, or 80-bit _real_, a 16-bit, 32-bit, or 64-bit _integer_, or "
+"an 80-bit _packed decimal_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2683
+msgid ""
+"The 80-bit _packed decimal_ is a special case of _binary coded decimal_ "
+"which is very convenient when converting between the ASCII representation of "
+"data and the internal data of the FPU. It allows us to use 18 significant "
+"digits."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2685
+msgid ""
+"No matter how we represent data in the memory, the FPU always stores it in "
+"the 80-bit _real_ format in its registers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2687
+msgid ""
+"Its internal precision is at least 19 decimal digits, so even if we choose "
+"to display results as ASCII in the full 18-digit precision, we are still "
+"showing correct results."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2689
+msgid ""
+"We can perform mathematical operations on the TOS: We can calculate its "
+"_sine_, we can _scale_ it (i.e., we can multiply or divide it by a power of "
+"2), we can calculate its base-2 _logarithm_, and many other things."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2691
+msgid ""
+"We can also _multiply_ or _divide_ it by, _add_ it to, or _subtract_ it "
+"from, any of the FPU registers (including itself)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2694
+msgid ""
+"The official Intel op code for the TOS is `st`, and for the _registers_ "
+"`st(0)`-`st(7)`. `st` and `st(0)`, then, refer to the same register."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2697
+msgid ""
+"For whatever reasons, the original author of nasm has decided to use "
+"different op codes, namely `st0`-`st7`. In other words, there are no "
+"parentheses, and the TOS is always `st0`, never just `st`."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2699
+#, no-wrap
+msgid "The Packed Decimal Format"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2703
+msgid ""
+"The _packed decimal_ format uses 10 bytes (80 bits) of memory to represent "
+"18 digits. The number represented there is always an _integer_."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2707
+msgid ""
+"You can use it to get decimal places by multiplying the TOS by a power of 10 "
+"first."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2711
+msgid ""
+"The highest bit of the highest byte (byte 9) is the _sign bit_: If it is "
+"set, the number is _negative_, otherwise, it is _positive_. The rest of the "
+"bits of this byte are unused/ignored."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2713
+msgid ""
+"The remaining 9 bytes store the 18 digits of the number: 2 digits per byte."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2715
+msgid ""
+"The _more significant digit_ is stored in the high _nibble_ (4 bits), the "
+"_less significant digit_ in the low _nibble_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2717
+msgid ""
+"That said, you might think that `-1234567` would be stored in the memory "
+"like this (using hexadecimal notation):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2721
+#, no-wrap
+msgid "80 00 00 00 00 00 01 23 45 67\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2724
+msgid ""
+"Alas it is not! As with everything else of Intel make, even the _packed "
+"decimal_ is _little-endian_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2726
+msgid "That means our `-1234567` is stored like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2730
+#, no-wrap
+msgid "67 45 23 01 00 00 00 00 00 80\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2733
+msgid "Remember that, or you will be pulling your hair out in desperation!"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2739
+msgid ""
+"The book to read-if you can find it-is Richard Startz' http://www.amazon.com/"
+"exec/obidos/ASIN/013246604X/whizkidtechnomag[8087/80287/80387 for the IBM PC "
+"& Compatibles]. Though it does seem to take the fact about the little-"
+"endian storage of the _packed decimal_ for granted. I kid you not about the "
+"desperation of trying to figure out what was wrong with the filter I show "
+"below _before_ it occurred to me I should try the little-endian order even "
+"for this type of data."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2742
+#, no-wrap
+msgid "Excursion to Pinhole Photography"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2745
+msgid ""
+"To write meaningful software, we must not only understand our programming "
+"tools, but also the field we are creating software for."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2747
+msgid ""
+"Our next filter will help us whenever we want to build a _pinhole camera_, "
+"so, we need some background in _pinhole photography_ before we can continue."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2749
+#, no-wrap
+msgid "The Camera"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2752
+msgid ""
+"The easiest way to describe any camera ever built is as some empty space "
+"enclosed in some lightproof material, with a small hole in the enclosure."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2757
+msgid ""
+"The enclosure is usually sturdy (e.g., a box), though sometimes it is "
+"flexible (the bellows). It is quite dark inside the camera. However, the "
+"hole lets light rays in through a single point (though in some cases there "
+"may be several). These light rays form an image, a representation of "
+"whatever is outside the camera, in front of the hole."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2759
+msgid ""
+"If some light sensitive material (such as film) is placed inside the camera, "
+"it can capture the image."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2761
+msgid ""
+"The hole often contains a _lens_, or a lens assembly, often called the "
+"_objective_."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2763
+#, no-wrap
+msgid "The Pinhole"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2767
+msgid ""
+"But, strictly speaking, the lens is not necessary: The original cameras did "
+"not use a lens but a _pinhole_. Even today, _pinholes_ are used, both as a "
+"tool to study how cameras work, and to achieve a special kind of image."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2771
+msgid ""
+"The image produced by the _pinhole_ is all equally sharp. Or _blurred_. "
+"There is an ideal size for a pinhole: If it is either larger or smaller, the "
+"image loses its sharpness."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2773
+#, no-wrap
+msgid "Focal Length"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2776
+msgid ""
+"This ideal pinhole diameter is a function of the square root of _focal "
+"length_, which is the distance of the pinhole from the film."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2780
+#, no-wrap
+msgid "D = PC * sqrt(FL)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2786
+msgid ""
+"In here, `D` is the ideal diameter of the pinhole, `FL` is the focal length, "
+"and `PC` is a pinhole constant. According to Jay Bender, its value is "
+"`0.04`, while Kenneth Connors has determined it to be `0.037`. Others have "
+"proposed other values. Plus, this value is for the daylight only: Other "
+"types of light will require a different constant, whose value can only be "
+"determined by experimentation."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2788
+#, no-wrap
+msgid "The F-Number"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2792
+msgid ""
+"The f-number is a very useful measure of how much light reaches the film. A "
+"light meter can determine that, for example, to expose a film of specific "
+"sensitivity with f5.6 mkay require the exposure to last 1/1000 sec."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2795
+msgid ""
+"It does not matter whether it is a 35-mm camera, or a 6x9cm camera, etc. As "
+"long as we know the f-number, we can determine the proper exposure."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2797
+msgid "The f-number is easy to calculate:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2801
+#, no-wrap
+msgid "F = FL / D\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2806
+msgid ""
+"In other words, the f-number equals the focal length divided by the diameter "
+"of the pinhole. It also means a higher f-number either implies a smaller "
+"pinhole or a larger focal distance, or both. That, in turn, implies, the "
+"higher the f-number, the longer the exposure has to be."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2809
+msgid ""
+"Furthermore, while pinhole diameter and focal distance are one-dimensional "
+"measurements, both, the film and the pinhole, are two-dimensional. That "
+"means that if you have measured the exposure at f-number `A` as `t`, then "
+"the exposure at f-number `B` is:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2813
+#, no-wrap
+msgid "t * (B / A)²\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2816
+#, no-wrap
+msgid "Normalized F-Number"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2819
+msgid ""
+"While many modern cameras can change the diameter of their pinhole, and thus "
+"their f-number, quite smoothly and gradually, such was not always the case."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2821
+msgid ""
+"To allow for different f-numbers, cameras typically contained a metal plate "
+"with several holes of different sizes drilled to them."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2824
+msgid ""
+"Their sizes were chosen according to the above formula in such a way that "
+"the resultant f-number was one of standard f-numbers used on all cameras "
+"everywhere. For example, a very old Kodak Duaflex IV camera in my "
+"possession has three such holes for f-numbers 8, 11, and 16."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2827
+msgid ""
+"A more recently made camera may offer f-numbers of 2.8, 4, 5.6, 8, 11, 16, "
+"22, and 32 (as well as others). These numbers were not chosen arbitrarily: "
+"They all are powers of the square root of 2, though they may be rounded "
+"somewha."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2829
+#, no-wrap
+msgid "The F-Stop"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2833
+msgid ""
+"A typical camera is designed in such a way that setting any of the "
+"normalized f-numbers changes the feel of the dial. It will naturally _stop_ "
+"in that position. Because of that, these positions of the dial are called f-"
+"stops."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2837
+msgid ""
+"Since the f-numbers at each stop are powers of the square root of 2, moving "
+"the dial by 1 stop will double the amount of light required for proper "
+"exposure. Moving it by 2 stops will quadruple the required exposure. "
+"Moving the dial by 3 stops will require the increase in exposure 8 times, "
+"etc."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2839
+#, no-wrap
+msgid "Designing the Pinhole Software"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2842
+msgid ""
+"We are now ready to decide what exactly we want our pinhole software to do."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2844
+#, no-wrap
+msgid "Processing Program Input"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2848
+msgid ""
+"Since its main purpose is to help us design a working pinhole camera, we "
+"will use the _focal length_ as the input to the program. This is something "
+"we can determine without software: Proper focal length is determined by the "
+"size of the film and by the need to shoot \"regular\" pictures, wide angle "
+"pictures, or telephoto pictures."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2850
+msgid ""
+"Most of the programs we have written so far worked with individual "
+"characters, or bytes, as their input: The hex program converted individual "
+"bytes into a hexadecimal number, the csv program either let a character "
+"through, or deleted it, or changed it to a different character, etc."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2852
+msgid ""
+"One program, ftuc used the state machine to consider at most two input bytes "
+"at a time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2854
+msgid ""
+"But our pinhole program cannot just work with individual characters, it has "
+"to deal with larger syntactic units."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2856
+msgid ""
+"For example, if we want the program to calculate the pinhole diameter (and "
+"other values we will discuss later) at the focal lengths of `100 mm`, `150 "
+"mm`, and `210 mm`, we may want to enter something like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2860
+#, no-wrap
+msgid " 100, 150, 210\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2865
+msgid ""
+"Our program needs to consider more than a single byte of input at a time. "
+"When it sees the first `1`, it must understand it is seeing the first digit "
+"of a decimal number. When it sees the `0` and the other `0`, it must know "
+"it is seeing more digits of the same number."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2870
+msgid ""
+"When it encounters the first comma, it must know it is no longer receiving "
+"the digits of the first number. It must be able to convert the digits of "
+"the first number into the value of `100`. And the digits of the second "
+"number into the value of `150`. And, of course, the digits of the third "
+"number into the numeric value of `210`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2872
+msgid ""
+"We need to decide what delimiters to accept: Do the input numbers have to be "
+"separated by a comma? If so, how do we treat two numbers separated by "
+"something else?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2877
+msgid ""
+"Personally, I like to keep it simple. Something either is a number, so I "
+"process it. Or it is not a number, so I discard it. I do not like the "
+"computer complaining about me typing in an extra character when it is "
+"_obvious_ that it is an extra character. Duh!"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2879
+msgid ""
+"Plus, it allows me to break up the monotony of computing and type in a query "
+"instead of just a number:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2884
+#, no-wrap
+msgid ""
+"What is the best pinhole diameter for the\n"
+"\t focal length of 150?\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2887
+msgid "There is no reason for the computer to spit out a number of complaints:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2894
+#, no-wrap
+msgid ""
+"Syntax error: What\n"
+"Syntax error: is\n"
+"Syntax error: the\n"
+"Syntax error: best\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2897
+msgid "Et cetera, et cetera, et cetera."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2900
+msgid ""
+"Secondly, I like the `+#+` character to denote the start of a comment which "
+"extends to the end of the line. This does not take too much effort to code, "
+"and lets me treat input files for my software as executable scripts."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2902
+msgid ""
+"In our case, we also need to decide what units the input should come in: We "
+"choose _millimeters_ because that is how most photographers measure the "
+"focus length."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2904
+msgid ""
+"Finally, we need to decide whether to allow the use of the decimal point (in "
+"which case we must also consider the fact that much of the world uses a "
+"decimal _comma_)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2908
+msgid ""
+"In our case allowing for the decimal point/comma would offer a false sense "
+"of precision: There is little if any noticeable difference between the focus "
+"lengths of `50` and `51`, so allowing the user to input something like "
+"`50.5` is not a good idea. This is my opinion, mind you, but I am the one "
+"writing this program. You can make other choices in yours, of course."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2910
+#, no-wrap
+msgid "Offering Options"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2915
+msgid ""
+"The most important thing we need to know when building a pinhole camera is "
+"the diameter of the pinhole. Since we want to shoot sharp images, we will "
+"use the above formula to calculate the pinhole diameter from focal length. "
+"As experts are offering several different values for the `PC` constant, we "
+"will need to have the choice."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2917
+msgid ""
+"It is traditional in UNIX(R) programming to have two main ways of choosing "
+"program parameters, plus to have a default for the time the user does not "
+"make a choice."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2919
+msgid "Why have two ways of choosing?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2921
+msgid ""
+"One is to allow a (relatively) _permanent_ choice that applies automatically "
+"each time the software is run without us having to tell it over and over "
+"what we want it to do."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2926
+msgid ""
+"The permanent choices may be stored in a configuration file, typically found "
+"in the user's home directory. The file usually has the same name as the "
+"application but is started with a dot. Often _\"rc\"_ is added to the file "
+"name. So, ours could be [.filename]#~/.pinhole# or [.filename]#~/."
+"pinholerc#. (The [.filename]#~/# means current user's home directory.)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2931
+msgid ""
+"The configuration file is used mostly by programs that have many "
+"configurable parameters. Those that have only one (or a few) often use a "
+"different method: They expect to find the parameter in an _environment "
+"variable_. In our case, we might look at an environment variable named "
+"`PINHOLE`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2934
+msgid ""
+"Usually, a program uses one or the other of the above methods. Otherwise, "
+"if a configuration file said one thing, but an environment variable another, "
+"the program might get confused (or just too complicated)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2936
+msgid ""
+"Because we only need to choose _one_ such parameter, we will go with the "
+"second method and search the environment for a variable named `PINHOLE`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2939
+msgid ""
+"The other way allows us to make _ad hoc_ decisions: _\"Though I usually want "
+"you to use 0.039, this time I want 0.03872.\"_ In other words, it allows us "
+"to _override_ the permanent choice."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2941
+msgid "This type of choice is usually done with command line parameters."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2949
+msgid ""
+"Finally, a program _always_ needs a _default_. The user may not make any "
+"choices. Perhaps he does not know what to choose. Perhaps he is \"just "
+"browsing.\" Preferably, the default will be the value most users would "
+"choose anyway. That way they do not need to choose. Or, rather, they can "
+"choose the default without an additional effort."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2951
+msgid ""
+"Given this system, the program may find conflicting options, and handle them "
+"this way:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2954
+msgid ""
+"If it finds an _ad hoc_ choice (e.g., command line parameter), it should "
+"accept that choice. It must ignore any permanent choice and any default."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2955
+msgid ""
+"_Otherwise_, if it finds a permanent option (e.g., an environment variable), "
+"it should accept it, and ignore the default."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2956
+msgid "_Otherwise_, it should use the default."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2958
+msgid "We also need to decide what _format_ our `PC` option should have."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2960
+msgid ""
+"At first site, it seems obvious to use the `PINHOLE=0.04` format for the "
+"environment variable, and `-p0.04` for the command line."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2964
+msgid ""
+"Allowing that is actually a security risk. The `PC` constant is a very small "
+"number. Naturally, we will test our software using various small values of "
+"`PC`. But what will happen if someone runs the program choosing a huge "
+"value?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2966
+msgid ""
+"It may crash the program because we have not designed it to handle huge "
+"numbers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2969
+msgid ""
+"Or, we may spend more time on the program so it can handle huge numbers. We "
+"might do that if we were writing commercial software for computer illiterate "
+"audience."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2971
+msgid "Or, we might say, _\"Tough! The user should know better.\"\"_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2974
+msgid ""
+"Or, we just may make it impossible for the user to enter a huge number. "
+"This is the approach we will take: We will use an _implied 0._ prefix."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2977
+msgid ""
+"In other words, if the user wants `0.04`, we will expect him to type `-p04`, "
+"or set `PINHOLE=04` in his environment. So, if he says `-p9999999`, we will "
+"interpret it as ``0.9999999``-still ridiculous but at least safer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2980
+msgid ""
+"Secondly, many users will just want to go with either Bender's constant or "
+"Connors' constant. To make it easier on them, we will interpret `-b` as "
+"identical to `-p04`, and `-c` as identical to `-p037`."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2982
+#, no-wrap
+msgid "The Output"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2985
+msgid ""
+"We need to decide what we want our software to send to the output, and in "
+"what format."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2987
+msgid ""
+"Since our input allows for an unspecified number of focal length entries, it "
+"makes sense to use a traditional database-style output of showing the result "
+"of the calculation for each focal length on a separate line, while "
+"separating all values on one line by a `tab` character."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2990
+msgid ""
+"Optionally, we should also allow the user to specify the use of the CSV "
+"format we have studied earlier. In this case, we will print out a line of "
+"comma-separated names describing each field of every line, then show our "
+"results as before, but substituting a `comma` for the `tab`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2995
+msgid ""
+"We need a command line option for the CSV format. We cannot use `-c` "
+"because that already means _use Connors' constant_. For some strange "
+"reason, many web sites refer to CSV files as _\"Excel spreadsheet\"_ (though "
+"the CSV format predates Excel). We will, therefore, use the `-e` switch to "
+"inform our software we want the output in the CSV format."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2999
+msgid ""
+"We will start each line of the output with the focal length. This may sound "
+"repetitious at first, especially in the interactive mode: The user types in "
+"the focal length, and we are repeating it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3003
+msgid ""
+"But the user can type several focal lengths on one line. The input can also "
+"come in from a file or from the output of another program. In that case the "
+"user does not see the input at all."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3005
+msgid ""
+"By the same token, the output can go to a file which we will want to examine "
+"later, or it could go to the printer, or become the input of another program."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3007
+msgid ""
+"So, it makes perfect sense to start each line with the focal length as "
+"entered by the user."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3010
+msgid ""
+"No, wait! Not as entered by the user. What if the user types in something "
+"like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3014
+#, no-wrap
+msgid " 00000000150\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3017
+msgid "Clearly, we need to strip those leading zeros."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3019
+msgid ""
+"So, we might consider reading the user input as is, converting it to binary "
+"inside the FPU, and printing it out from there."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3021
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3206
+msgid "But..."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3023
+msgid "What if the user types something like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3027
+#, no-wrap
+msgid " 17459765723452353453534535353530530534563507309676764423\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3032
+msgid ""
+"Ha! The packed decimal FPU format lets us input 18-digit numbers. But the "
+"user has entered more than 18 digits. How do we handle that?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3034
+msgid ""
+"Well, we _could_ modify our code to read the first 18 digits, enter it to "
+"the FPU, then read more, multiply what we already have on the TOS by 10 "
+"raised to the number of additional digits, then `add` to it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3038
+msgid ""
+"Yes, we could do that. But in _this_ program it would be ridiculous (in a "
+"different one it may be just the thing to do): Even the circumference of the "
+"Earth expressed in millimeters only takes 11 digits. Clearly, we cannot "
+"build a camera that large (not yet, anyway)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3040
+msgid ""
+"So, if the user enters such a huge number, he is either bored, or testing "
+"us, or trying to break into the system, or playing games-doing anything but "
+"designing a pinhole camera."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3042
+msgid "What will we do?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3044
+msgid "We will slap him in the face, in a manner of speaking:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3048
+#, no-wrap
+msgid "17459765723452353453534535353530530534563507309676764423\t???\t???\t???\t???\t???\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3052
+msgid ""
+"To achieve that, we will simply ignore any leading zeros. Once we find a "
+"non-zero digit, we will initialize a counter to `0` and start taking three "
+"steps:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3055
+msgid "Send the digit to the output."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3056
+msgid ""
+"Append the digit to a buffer we will use later to produce the packed decimal "
+"we can send to the FPU."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3057
+msgid "Increase the counter."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3059
+msgid ""
+"Now, while we are taking these three steps, we also need to watch out for "
+"one of two conditions:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3061
+msgid ""
+"If the counter grows above 18, we stop appending to the buffer. We continue "
+"reading the digits and sending them to the output."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3062
+msgid ""
+"If, or rather _when_, the next input character is not a digit, we are done "
+"inputting for now."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3065
+msgid ""
+"Incidentally, we can simply discard the non-digit, unless it is a `+#+`, "
+"which we must return to the input stream. It starts a comment, so we must "
+"see it after we are done producing output and start looking for more input."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3067
+msgid ""
+"That still leaves one possibility uncovered: If all the user enters is a "
+"zero (or several zeros), we will never find a non-zero to display."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3070
+msgid ""
+"We can determine this has happened whenever our counter stays at `0`. In "
+"that case we need to send `0` to the output, and perform another \"slap in "
+"the face\":"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3074
+#, no-wrap
+msgid "0\t???\t???\t???\t???\t???\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3077
+msgid ""
+"Once we have displayed the focal length and determined it is valid (greater "
+"than `0` but not exceeding 18 digits), we can calculate the pinhole diameter."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3080
+msgid ""
+"It is not by coincidence that _pinhole_ contains the word _pin_. Indeed, "
+"many a pinhole literally is a _pin hole_, a hole carefully punched with the "
+"tip of a pin."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3083
+msgid ""
+"That is because a typical pinhole is very small. Our formula gets the result "
+"in millimeters. We will multiply it by `1000`, so we can output the result "
+"in _microns_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3085
+msgid "At this point we have yet another trap to face: _Too much precision._"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3089
+msgid ""
+"Yes, the FPU was designed for high precision mathematics. But we are not "
+"dealing with high precision mathematics. We are dealing with physics "
+"(optics, specifically)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3093
+msgid ""
+"Suppose we want to convert a truck into a pinhole camera (we would not be "
+"the first ones to do that!). Suppose its box is `12` meters long, so we "
+"have the focal length of `12000`. Well, using Bender's constant, it gives "
+"us square root of `12000` multiplied by `0.04`, which is `4.381780460` "
+"millimeters, or `4381.780460` microns."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3098
+msgid ""
+"Put either way, the result is absurdly precise. Our truck is not _exactly_ "
+"`12000` millimeters long. We did not measure its length with such a "
+"precision, so stating we need a pinhole with the diameter of `4.381780460` "
+"millimeters is, well, deceiving. `4.4` millimeters would do just fine."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3103
+msgid ""
+"I \"only\" used ten digits in the above example. Imagine the absurdity of "
+"going for all 18!"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3109
+msgid ""
+"We need to limit the number of significant digits of our result. One way of "
+"doing it is by using an integer representing microns. So, our truck would "
+"need a pinhole with the diameter of `4382` microns. Looking at that number, "
+"we still decide that `4400` microns, or `4.4` millimeters is close enough."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3112
+msgid ""
+"Additionally, we can decide that no matter how big a result we get, we only "
+"want to display four significant digits (or any other number of them, of "
+"course). Alas, the FPU does not offer rounding to a specific number of "
+"digits (after all, it does not view the numbers as decimal but as binary)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3114
+msgid ""
+"We, therefore, must devise an algorithm to reduce the number of significant "
+"digits."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3116
+msgid ""
+"Here is mine (I think it is awkward-if you know a better one, _please_, let "
+"me know):"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3119
+msgid "Initialize a counter to `0`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3120
+msgid ""
+"While the number is greater than or equal to `10000`, divide it by `10` and "
+"increase the counter."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3121
+msgid "Output the result."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3122
+msgid ""
+"While the counter is greater than `0`, output `0` and decrease the counter."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3127
+msgid ""
+"The `10000` is only good if you want _four_ significant digits. For any "
+"other number of significant digits, replace `10000` with `10` raised to the "
+"number of significant digits."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3130
+msgid ""
+"We will, then, output the pinhole diameter in microns, rounded off to four "
+"significant digits."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3133
+msgid ""
+"At this point, we know the _focal length_ and the _pinhole diameter_. That "
+"means we have enough information to also calculate the _f-number_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3137
+msgid ""
+"We will display the f-number, rounded to four significant digits. Chances "
+"are the f-number will tell us very little. To make it more meaningful, we "
+"can find the nearest _normalized f-number_, i.e., the nearest power of the "
+"square root of 2."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3143
+msgid ""
+"We do that by multiplying the actual f-number by itself, which, of course, "
+"will give us its `square`. We will then calculate its base-2 logarithm, "
+"which is much easier to do than calculating the base-square-root-of-2 "
+"logarithm! We will round the result to the nearest integer. Next, we will "
+"raise 2 to the result. Actually, the FPU gives us a good shortcut to do "
+"that: We can use the `fscale` op code to \"scale\" 1, which is analogous to "
+"``shift``ing an integer left. Finally, we calculate the square root of it "
+"all, and we have the nearest normalized f-number."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3146
+msgid ""
+"If all that sounds overwhelming-or too much work, perhaps-it may become much "
+"clearer if you see the code. It takes 9 op codes altogether:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3158
+#, no-wrap
+msgid ""
+"fmul\tst0, st0\n"
+"\tfld1\n"
+"\tfld\tst1\n"
+"\tfyl2x\n"
+"\tfrndint\n"
+"\tfld1\n"
+"\tfscale\n"
+"\tfsqrt\n"
+"\tfstp\tst1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3162
+msgid ""
+"The first line, `fmul st0, st0`, squares the contents of the TOS (top of the "
+"stack, same as `st`, called `st0` by nasm). The `fld1` pushes `1` on the "
+"TOS."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3166
+msgid ""
+"The next line, `fld st1`, pushes the square back to the TOS. At this point "
+"the square is both in `st` and `st(2)` (it will become clear why we leave a "
+"second copy on the stack in a moment). `st(1)` contains `1`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3169
+msgid ""
+"Next, `fyl2x` calculates base-2 logarithm of `st` multiplied by `st(1)`. "
+"That is why we placed `1` on `st(1)` before."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3171
+msgid ""
+"At this point, `st` contains the logarithm we have just calculated, `st(1)` "
+"contains the square of the actual f-number we saved for later."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3175
+msgid ""
+"`frndint` rounds the TOS to the nearest integer. `fld1` pushes a `1`. "
+"`fscale` shifts the `1` we have on the TOS by the value in `st(1)`, "
+"effectively raising 2 to `st(1)`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3177
+msgid ""
+"Finally, `fsqrt` calculates the square root of the result, i.e., the nearest "
+"normalized f-number."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3180
+msgid ""
+"We now have the nearest normalized f-number on the TOS, the base-2 logarithm "
+"rounded to the nearest integer in `st(1)`, and the square of the actual f-"
+"number in `st(2)`. We are saving the value in `st(2)` for later."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3186
+msgid ""
+"But we do not need the contents of `st(1)` anymore. The last line, `fstp "
+"st1`, places the contents of `st` to `st(1)`, and pops. As a result, what "
+"was `st(1)` is now `st`, what was `st(2)` is now `st(1)`, etc. The new `st` "
+"contains the normalized f-number. The new `st(1)` contains the square of "
+"the actual f-number we have stored there for posterity."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3189
+msgid ""
+"At this point, we are ready to output the normalized f-number. Because it "
+"is normalized, we will not round it off to four significant digits, but will "
+"send it out in its full precision."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3192
+msgid ""
+"The normalized f-number is useful as long as it is reasonably small and can "
+"be found on our light meter. Otherwise we need a different method of "
+"determining proper exposure."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3194
+msgid ""
+"Earlier we have figured out the formula of calculating proper exposure at an "
+"arbitrary f-number from that measured at a different f-number."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3197
+msgid ""
+"Every light meter I have ever seen can determine proper exposure at f5.6. "
+"We will, therefore, calculate an _\"f5.6 multiplier,\"_ i.e., by how much we "
+"need to multiply the exposure measured at f5.6 to determine the proper "
+"exposure for our pinhole camera."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3199
+msgid ""
+"From the above formula we know this factor can be calculated by dividing our "
+"f-number (the actual one, not the normalized one) by `5.6`, and squaring the "
+"result."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3201
+msgid ""
+"Mathematically, dividing the square of our f-number by the square of `5.6` "
+"will give us the same result."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3204
+msgid ""
+"Computationally, we do not want to square two numbers when we can only "
+"square one. So, the first solution seems better at first."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3212
+msgid ""
+"`5.6` is a _constant_. We do not have to have our FPU waste precious "
+"cycles. We can just tell it to divide the square of the f-number by "
+"whatever `5.6²` equals to. Or we can divide the f-number by `5.6`, and then "
+"square the result. The two ways now seem equal."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3214
+msgid "But, they are not!"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3218
+msgid ""
+"Having studied the principles of photography above, we remember that the "
+"`5.6` is actually square root of 2 raised to the fifth power. An "
+"_irrational_ number. The square of this number is _exactly_ `32`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3224
+msgid ""
+"Not only is `32` an integer, it is a power of 2. We do not need to divide "
+"the square of the f-number by `32`. We only need to use `fscale` to shift "
+"it right by five positions. In the FPU lingo it means we will `fscale` it "
+"with `st(1)` equal to `-5`. That is _much faster_ than a division."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3227
+msgid ""
+"So, now it has become clear why we have saved the square of the f-number on "
+"the top of the FPU stack. The calculation of the f5.6 multiplier is the "
+"easiest calculation of this entire program! We will output it rounded to "
+"four significant digits."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3230
+msgid ""
+"There is one more useful number we can calculate: The number of stops our f-"
+"number is from f5.6. This may help us if our f-number is just outside the "
+"range of our light meter, but we have a shutter which lets us set various "
+"speeds, and this shutter uses stops."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3233
+msgid ""
+"Say, our f-number is 5 stops from f5.6, and the light meter says we should "
+"use 1/1000 sec. Then we can set our shutter speed to 1/1000 first, then "
+"move the dial by 5 stops."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3238
+msgid ""
+"This calculation is quite easy as well. All we have to do is to calculate "
+"the base-2 logarithm of the f5.6 multiplier we had just calculated (though "
+"we need its value from before we rounded it off). We then output the result "
+"rounded to the nearest integer. We do not need to worry about having more "
+"than four significant digits in this one: The result is most likely to have "
+"only one or two digits anyway."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3240
+#, no-wrap
+msgid "FPU Optimizations"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3243
+msgid ""
+"In assembly language we can optimize the FPU code in ways impossible in high "
+"languages, including C."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3247
+msgid ""
+"Whenever a C function needs to calculate a floating-point value, it loads "
+"all necessary variables and constants into FPU registers. It then does "
+"whatever calculation is required to get the correct result. Good C "
+"compilers can optimize that part of the code really well."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3251
+msgid ""
+"It \"returns\" the value by leaving the result on the TOS. However, before "
+"it returns, it cleans up. Any variables and constants it used in its "
+"calculation are now gone from the FPU."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3253
+msgid ""
+"It cannot do what we just did above: We calculated the square of the f-"
+"number and kept it on the stack for later use by another function."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3256
+msgid ""
+"We _knew_ we would need that value later on. We also knew we had enough "
+"room on the stack (which only has room for 8 numbers) to store it there."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3258
+msgid ""
+"A C compiler has no way of knowing that a value it has on the stack will be "
+"required again in the very near future."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3261
+msgid ""
+"Of course, the C programmer may know it. But the only recourse he has is to "
+"store the value in a memory variable."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3263
+msgid ""
+"That means, for one, the value will be changed from the 80-bit precision "
+"used internally by the FPU to a C _double_ (64 bits) or even _single_ (32 "
+"bits)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3266
+msgid ""
+"That also means that the value must be moved from the TOS into the memory, "
+"and then back again. Alas, of all FPU operations, the ones that access the "
+"computer memory are the slowest."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3268
+msgid ""
+"So, whenever programming the FPU in assembly language, look for the ways of "
+"keeping intermediate results on the FPU stack."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3270
+msgid ""
+"We can take that idea even further! In our program we are using a _constant_ "
+"(the one we named `PC`)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3273
+msgid ""
+"It does not matter how many pinhole diameters we are calculating: 1, 10, 20, "
+"1000, we are always using the same constant. Therefore, we can optimize our "
+"program by keeping the constant on the stack all the time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3276
+msgid ""
+"Early on in our program, we are calculating the value of the above "
+"constant. We need to divide our input by `10` for every digit in the "
+"constant."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3279
+msgid ""
+"It is much faster to multiply than to divide. So, at the start of our "
+"program, we divide `10` into `1` to obtain `0.1`, which we then keep on the "
+"stack: Instead of dividing the input by `10` for every digit, we multiply it "
+"by `0.1`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3283
+msgid ""
+"By the way, we do not input `0.1` directly, even though we could. We have a "
+"reason for that: While `0.1` can be expressed with just one decimal place, "
+"we do not know how many _binary_ places it takes. We, therefore, let the "
+"FPU calculate its binary value to its own high precision."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3288
+msgid ""
+"We are using other constants: We multiply the pinhole diameter by `1000` to "
+"convert it from millimeters to microns. We compare numbers to `10000` when "
+"we are rounding them off to four significant digits. So, we keep both, "
+"`1000` and `10000`, on the stack. And, of course, we reuse the `0.1` when "
+"rounding off numbers to four digits."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3294
+msgid ""
+"Last but not least, we keep `-5` on the stack. We need it to scale the "
+"square of the f-number, instead of dividing it by `32`. It is not by "
+"coincidence we load this constant last. That makes it the top of the stack "
+"when only the constants are on it. So, when the square of the f-number is "
+"being scaled, the `-5` is at `st(1)`, precisely where `fscale` expects it to "
+"be."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3297
+msgid ""
+"It is common to create certain constants from scratch instead of loading "
+"them from the memory. That is what we are doing with `-5`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3306
+#, no-wrap
+msgid ""
+"\tfld1\t\t\t; TOS = 1\n"
+"\tfadd\tst0, st0\t; TOS = 2\n"
+"\tfadd\tst0, st0\t; TOS = 4\n"
+"\tfld1\t\t\t; TOS = 1\n"
+"\tfaddp\tst1, st0\t; TOS = 5\n"
+"\tfchs\t\t\t; TOS = -5\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3309
+msgid ""
+"We can generalize all these optimizations into one rule: _Keep repeat values "
+"on the stack!_"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3314
+msgid ""
+"_PostScript(R)_ is a stack-oriented programming language. There are many "
+"more books available about PostScript(R) than about the FPU assembly "
+"language: Mastering PostScript(R) will help you master the FPU."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3317
+#, no-wrap
+msgid "pinhole-The Code"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3332
+#, no-wrap
+msgid ""
+";;;;;;; pinhole.asm ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
+";\n"
+"; Find various parameters of a pinhole camera construction and use\n"
+";\n"
+"; Started:\t 9-Jun-2001\n"
+"; Updated:\t10-Jun-2001\n"
+";\n"
+"; Copyright (c) 2001 G. Adam Stanislav\n"
+"; All rights reserved.\n"
+";\n"
+";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3367
+#, no-wrap
+msgid ""
+"section\t.data\n"
+"align 4\n"
+"ten\tdd\t10\n"
+"thousand\tdd\t1000\n"
+"tthou\tdd\t10000\n"
+"fd.in\tdd\tstdin\n"
+"fd.out\tdd\tstdout\n"
+"envar\tdb\t'PINHOLE='\t; Exactly 8 bytes, or 2 dwords long\n"
+"pinhole\tdb\t'04,', \t\t; Bender's constant (0.04)\n"
+"connors\tdb\t'037', 0Ah\t; Connors' constant\n"
+"usg\tdb\t'Usage: pinhole [-b] [-c] [-e] [-p <value>] [-o <outfile>] [-i <infile>]', 0Ah\n"
+"usglen\tequ\t$-usg\n"
+"iemsg\tdb\t\"pinhole: Can't open input file\", 0Ah\n"
+"iemlen\tequ\t$-iemsg\n"
+"oemsg\tdb\t\"pinhole: Can't create output file\", 0Ah\n"
+"oemlen\tequ\t$-oemsg\n"
+"pinmsg\tdb\t\"pinhole: The PINHOLE constant must not be 0\", 0Ah\n"
+"pinlen\tequ\t$-pinmsg\n"
+"toobig\tdb\t\"pinhole: The PINHOLE constant may not exceed 18 decimal places\", 0Ah\n"
+"biglen\tequ\t$-toobig\n"
+"huhmsg\tdb\t9, '???'\n"
+"separ\tdb\t9, '???'\n"
+"sep2\tdb\t9, '???'\n"
+"sep3\tdb\t9, '???'\n"
+"sep4\tdb\t9, '???', 0Ah\n"
+"huhlen\tequ\t$-huhmsg\n"
+"header\tdb\t'focal length in millimeters,pinhole diameter in microns,'\n"
+"\tdb\t'F-number,normalized F-number,F-5.6 multiplier,stops '\n"
+"\tdb\t'from F-5.6', 0Ah\n"
+"headlen\tequ\t$-header\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3373
+#, no-wrap
+msgid ""
+"section .bss\n"
+"ibuffer\tresb\tBUFSIZE\n"
+"obuffer\tresb\tBUFSIZE\n"
+"dbuffer\tresb\t20\t\t; decimal input buffer\n"
+"bbuffer\tresb\t10\t\t; BCD buffer\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3384
+#, no-wrap
+msgid ""
+"section\t.text\n"
+"align 4\n"
+"huh:\n"
+"\tcall\twrite\n"
+"\tpush\tdword huhlen\n"
+"\tpush\tdword huhmsg\n"
+"\tpush\tdword [fd.out]\n"
+"\tsys.write\n"
+"\tadd\tesp, byte 12\n"
+"\tret\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3393
+#, no-wrap
+msgid ""
+"align 4\n"
+"perr:\n"
+"\tpush\tdword pinlen\n"
+"\tpush\tdword pinmsg\n"
+"\tpush\tdword stderr\n"
+"\tsys.write\n"
+"\tpush\tdword 4\t\t; return failure\n"
+"\tsys.exit\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3402
+#, no-wrap
+msgid ""
+"align 4\n"
+"consttoobig:\n"
+"\tpush\tdword biglen\n"
+"\tpush\tdword toobig\n"
+"\tpush\tdword stderr\n"
+"\tsys.write\n"
+"\tpush\tdword 5\t\t; return failure\n"
+"\tsys.exit\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3411
+#, no-wrap
+msgid ""
+"align 4\n"
+"ierr:\n"
+"\tpush\tdword iemlen\n"
+"\tpush\tdword iemsg\n"
+"\tpush\tdword stderr\n"
+"\tsys.write\n"
+"\tpush\tdword 1\t\t; return failure\n"
+"\tsys.exit\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3435
+#, no-wrap
+msgid ""
+"align 4\n"
+"global\t_start\n"
+"_start:\n"
+"\tadd\tesp, byte 8\t; discard argc and argv[0]\n"
+"\tsub\tesi, esi\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3440
+#, no-wrap
+msgid ""
+".arg:\n"
+"\tpop\tecx\n"
+"\tor\tecx, ecx\n"
+"\tje\tnear .getenv\t\t; no more arguments\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3448
+#, no-wrap
+msgid ""
+"\tinc\tecx\n"
+"\tmov\tax, [ecx]\n"
+"\tinc\tecx\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3466
+#, no-wrap
+msgid ""
+"\tor\tah, ah\n"
+"\tjne\t.openoutput\n"
+"\tpop\tecx\n"
+"\tjecxz\tusage\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3493
+#, no-wrap
+msgid ""
+"\t; Find the path to the input file\n"
+"\tor\tah, ah\n"
+"\tjne\t.openinput\n"
+"\tpop\tecx\n"
+"\tor\tecx, ecx\n"
+"\tje near usage\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3509
+#, no-wrap
+msgid ""
+".p:\n"
+"\tcmp\tal, 'p'\n"
+"\tjne\t.c\n"
+"\tor\tah, ah\n"
+"\tjne\t.pcheck\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3513
+#, no-wrap
+msgid ""
+"\tpop\tecx\n"
+"\tor\tecx, ecx\n"
+"\tje\tnear usage\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3515
+#, no-wrap
+msgid "\tmov\tah, [ecx]\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3523
+#, no-wrap
+msgid ""
+".pcheck:\n"
+"\tcmp\tah, '0'\n"
+"\tjl\tnear usage\n"
+"\tcmp\tah, '9'\n"
+"\tja\tnear usage\n"
+"\tmov\tesi, ecx\n"
+"\tjmp\t.arg\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3531
+#, no-wrap
+msgid ""
+".c:\n"
+"\tcmp\tal, 'c'\n"
+"\tjne\t.b\n"
+"\tor\tah, ah\n"
+"\tjne\tnear usage\n"
+"\tmov\tesi, connors\n"
+"\tjmp\t.arg\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3539
+#, no-wrap
+msgid ""
+".b:\n"
+"\tcmp\tal, 'b'\n"
+"\tjne\t.e\n"
+"\tor\tah, ah\n"
+"\tjne\tnear usage\n"
+"\tmov\tesi, pinhole\n"
+"\tjmp\t.arg\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3552
+#, no-wrap
+msgid ""
+".e:\n"
+"\tcmp\tal, 'e'\n"
+"\tjne\tnear usage\n"
+"\tor\tah, ah\n"
+"\tjne\tnear usage\n"
+"\tmov\tal, ','\n"
+"\tmov\t[huhmsg], al\n"
+"\tmov\t[separ], al\n"
+"\tmov\t[sep2], al\n"
+"\tmov\t[sep3], al\n"
+"\tmov\t[sep4], al\n"
+"\tjmp\t.arg\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3559
+#, no-wrap
+msgid ""
+"align 4\n"
+".getenv:\n"
+"\t; If ESI = 0, we did not have a -p argument,\n"
+"\t; and need to check the environment for \"PINHOLE=\"\n"
+"\tor\tesi, esi\n"
+"\tjne\t.init\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3561
+#, no-wrap
+msgid "\tsub\tecx, ecx\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3566
+#, no-wrap
+msgid ""
+".nextenv:\n"
+"\tpop\tesi\n"
+"\tor\tesi, esi\n"
+"\tje\t.default\t; no PINHOLE envar found\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3572
+#, no-wrap
+msgid ""
+"\t; check if this envar starts with 'PINHOLE='\n"
+"\tmov\tedi, envar\n"
+"\tmov\tcl, 2\t\t; 'PINHOLE=' is 2 dwords long\n"
+"rep\tcmpsd\n"
+"\tjne\t.nextenv\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3580
+#, no-wrap
+msgid ""
+"\t; Check if it is followed by a digit\n"
+"\tmov\tal, [esi]\n"
+"\tcmp\tal, '0'\n"
+"\tjl\t.default\n"
+"\tcmp\tal, '9'\n"
+"\tjbe\t.init\n"
+"\t; fall through\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3587
+#, no-wrap
+msgid ""
+"align 4\n"
+".default:\n"
+"\t; We got here because we had no -p argument,\n"
+"\t; and did not find the PINHOLE envar.\n"
+"\tmov\tesi, pinhole\n"
+"\t; fall through\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3596
+#, no-wrap
+msgid ""
+"align 4\n"
+".init:\n"
+"\tsub\teax, eax\n"
+"\tsub\tebx, ebx\n"
+"\tsub\tecx, ecx\n"
+"\tsub\tedx, edx\n"
+"\tmov\tedi, dbuffer+1\n"
+"\tmov\tbyte [dbuffer], '0'\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3605
+#, no-wrap
+msgid ""
+"\t; Convert the pinhole constant to real\n"
+".constloop:\n"
+"\tlodsb\n"
+"\tcmp\tal, '9'\n"
+"\tja\t.setconst\n"
+"\tcmp\tal, '0'\n"
+"\tje\t.processconst\n"
+"\tjb\t.setconst\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3607
+#, no-wrap
+msgid "\tinc\tdl\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3614
+#, no-wrap
+msgid ""
+".processconst:\n"
+"\tinc\tcl\n"
+"\tcmp\tcl, 18\n"
+"\tja\tnear consttoobig\n"
+"\tstosb\n"
+"\tjmp\tshort .constloop\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3619
+#, no-wrap
+msgid ""
+"align 4\n"
+".setconst:\n"
+"\tor\tdl, dl\n"
+"\tje\tnear perr\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3622
+#, no-wrap
+msgid ""
+"\tfinit\n"
+"\tfild\tdword [tthou]\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3626
+#, no-wrap
+msgid ""
+"\tfld1\n"
+"\tfild\tdword [ten]\n"
+"\tfdivp\tst1, st0\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3629
+#, no-wrap
+msgid ""
+"\tfild\tdword [thousand]\n"
+"\tmov\tedi, obuffer\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3632
+#, no-wrap
+msgid ""
+"\tmov\tebp, ecx\n"
+"\tcall\tbcdload\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3636
+#, no-wrap
+msgid ""
+".constdiv:\n"
+"\tfmul\tst0, st2\n"
+"\tloop\t.constdiv\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3643
+#, no-wrap
+msgid ""
+"\tfld1\n"
+"\tfadd\tst0, st0\n"
+"\tfadd\tst0, st0\n"
+"\tfld1\n"
+"\tfaddp\tst1, st0\n"
+"\tfchs\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3648
+#, no-wrap
+msgid ""
+"\t; If we are creating a CSV file,\n"
+"\t; print header\n"
+"\tcmp\tbyte [separ], ','\n"
+"\tjne\t.bigloop\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3653
+#, no-wrap
+msgid ""
+"\tpush\tdword headlen\n"
+"\tpush\tdword header\n"
+"\tpush\tdword [fd.out]\n"
+"\tsys.write\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3657
+#, no-wrap
+msgid ""
+".bigloop:\n"
+"\tcall\tgetchar\n"
+"\tjc\tnear done\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3663
+#, no-wrap
+msgid ""
+"\t; Skip to the end of the line if you got '#'\n"
+"\tcmp\tal, '#'\n"
+"\tjne\t.num\n"
+"\tcall\tskiptoeol\n"
+"\tjmp\tshort .bigloop\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3670
+#, no-wrap
+msgid ""
+".num:\n"
+"\t; See if you got a number\n"
+"\tcmp\tal, '0'\n"
+"\tjl\t.bigloop\n"
+"\tcmp\tal, '9'\n"
+"\tja\t.bigloop\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3674
+#, no-wrap
+msgid ""
+"\t; Yes, we have a number\n"
+"\tsub\tebp, ebp\n"
+"\tsub\tedx, edx\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3679
+#, no-wrap
+msgid ""
+".number:\n"
+"\tcmp\tal, '0'\n"
+"\tje\t.number0\n"
+"\tmov\tdl, 1\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3690
+#, no-wrap
+msgid ""
+".number0:\n"
+"\tor\tdl, dl\t\t; Skip leading 0's\n"
+"\tje\t.nextnumber\n"
+"\tpush\teax\n"
+"\tcall\tputchar\n"
+"\tpop\teax\n"
+"\tinc\tebp\n"
+"\tcmp\tebp, 19\n"
+"\tjae\t.nextnumber\n"
+"\tmov\t[dbuffer+ebp], al\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3701
+#, no-wrap
+msgid ""
+".nextnumber:\n"
+"\tcall\tgetchar\n"
+"\tjc\t.work\n"
+"\tcmp\tal, '#'\n"
+"\tje\t.ungetc\n"
+"\tcmp\tal, '0'\n"
+"\tjl\t.work\n"
+"\tcmp\tal, '9'\n"
+"\tja\t.work\n"
+"\tjmp\tshort .number\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3705
+#, no-wrap
+msgid ""
+".ungetc:\n"
+"\tdec\tesi\n"
+"\tinc\tebx\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3710
+#, no-wrap
+msgid ""
+".work:\n"
+"\t; Now, do all the work\n"
+"\tor\tdl, dl\n"
+"\tje\tnear .work0\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3713
+#, no-wrap
+msgid ""
+"\tcmp\tebp, 19\n"
+"\tjae\tnear .toobig\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3715
+#, no-wrap
+msgid "\tcall\tbcdload\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3717
+#, no-wrap
+msgid "\t; Calculate pinhole diameter\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3724
+#, no-wrap
+msgid ""
+"\tfld\tst0\t; save it\n"
+"\tfsqrt\n"
+"\tfmul\tst0, st3\n"
+"\tfld\tst0\n"
+"\tfmul\tst5\n"
+"\tsub\tebp, ebp\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3734
+#, no-wrap
+msgid ""
+"\t; Round off to 4 significant digits\n"
+".diameter:\n"
+"\tfcom\tst0, st7\n"
+"\tfstsw\tax\n"
+"\tsahf\n"
+"\tjb\t.printdiameter\n"
+"\tfmul\tst0, st6\n"
+"\tinc\tebp\n"
+"\tjmp\tshort .diameter\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3737
+#, no-wrap
+msgid ""
+".printdiameter:\n"
+"\tcall\tprintnumber\t; pinhole diameter\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3739
+#, no-wrap
+msgid "\t; Calculate F-number\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3742
+#, no-wrap
+msgid ""
+"\tfdivp\tst1, st0\n"
+"\tfld\tst0\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3744
+#, no-wrap
+msgid "\tsub\tebp, ebp\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3753
+#, no-wrap
+msgid ""
+".fnumber:\n"
+"\tfcom\tst0, st6\n"
+"\tfstsw\tax\n"
+"\tsahf\n"
+"\tjb\t.printfnumber\n"
+"\tfmul\tst0, st5\n"
+"\tinc\tebp\n"
+"\tjmp\tshort .fnumber\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3756
+#, no-wrap
+msgid ""
+".printfnumber:\n"
+"\tcall\tprintnumber\t; F number\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3767
+#, no-wrap
+msgid ""
+"\t; Calculate normalized F-number\n"
+"\tfmul\tst0, st0\n"
+"\tfld1\n"
+"\tfld\tst1\n"
+"\tfyl2x\n"
+"\tfrndint\n"
+"\tfld1\n"
+"\tfscale\n"
+"\tfsqrt\n"
+"\tfstp\tst1\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3770
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3798
+#, no-wrap
+msgid ""
+"\tsub\tebp, ebp\n"
+"\tcall\tprintnumber\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3772
+#, no-wrap
+msgid "\t; Calculate time multiplier from F-5.6\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3775
+#, no-wrap
+msgid ""
+"\tfscale\n"
+"\tfld\tst0\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3781
+#, no-wrap
+msgid ""
+"\t; Round off to 4 significant digits\n"
+".fmul:\n"
+"\tfcom\tst0, st6\n"
+"\tfstsw\tax\n"
+"\tsahf\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3786
+#, no-wrap
+msgid ""
+"\tjb\t.printfmul\n"
+"\tinc\tebp\n"
+"\tfmul\tst0, st5\n"
+"\tjmp\tshort .fmul\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3789
+#, no-wrap
+msgid ""
+".printfmul:\n"
+"\tcall\tprintnumber\t; F multiplier\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3791
+#, no-wrap
+msgid "\t; Calculate F-stops from 5.6\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3795
+#, no-wrap
+msgid ""
+"\tfld1\n"
+"\tfxch\tst1\n"
+"\tfyl2x\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3802
+#, no-wrap
+msgid ""
+"\tmov\tal, 0Ah\n"
+"\tcall\tputchar\n"
+"\tjmp\t.bigloop\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3806
+#, no-wrap
+msgid ""
+".work0:\n"
+"\tmov\tal, '0'\n"
+"\tcall\tputchar\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3811
+#, no-wrap
+msgid ""
+"align 4\n"
+".toobig:\n"
+"\tcall\thuh\n"
+"\tjmp\t.bigloop\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3815
+#, no-wrap
+msgid ""
+"align 4\n"
+"done:\n"
+"\tcall\twrite\t\t; flush output buffer\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3824
+#, no-wrap
+msgid "\tfinit\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3837
+#, no-wrap
+msgid ""
+"align 4\n"
+"skiptoeol:\n"
+"\t; Keep reading until you come to cr, lf, or eof\n"
+"\tcall\tgetchar\n"
+"\tjc\tdone\n"
+"\tcmp\tal, 0Ah\n"
+"\tjne\t.cr\n"
+"\tret\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3842
+#, no-wrap
+msgid ""
+".cr:\n"
+"\tcmp\tal, 0Dh\n"
+"\tjne\tskiptoeol\n"
+"\tret\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3855
+#, no-wrap
+msgid ""
+".fetch:\n"
+"\tlodsb\n"
+"\tdec\tebx\n"
+"\tclc\n"
+"\tret\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3872
+#, no-wrap
+msgid ""
+".read:\n"
+"\tpush\tdword BUFSIZE\n"
+"\tmov\tesi, ibuffer\n"
+"\tpush\tesi\n"
+"\tpush\tdword [fd.in]\n"
+"\tsys.read\n"
+"\tadd\tesp, byte 12\n"
+"\tmov\tebx, eax\n"
+"\tor\teax, eax\n"
+"\tje\t.empty\n"
+"\tsub\teax, eax\n"
+"\tret\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3878
+#, no-wrap
+msgid ""
+"align 4\n"
+".empty:\n"
+"\tadd\tesp, byte 4\n"
+"\tstc\n"
+"\tret\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3907
+#, no-wrap
+msgid ""
+"align 4\n"
+"bcdload:\n"
+"\t; EBP contains the number of chars in dbuffer\n"
+"\tpush\tecx\n"
+"\tpush\tesi\n"
+"\tpush\tedi\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3911
+#, no-wrap
+msgid ""
+"\tlea\tecx, [ebp+1]\n"
+"\tlea\tesi, [dbuffer+ebp-1]\n"
+"\tshr\tecx, 1\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3913
+#, no-wrap
+msgid "\tstd\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3919
+#, no-wrap
+msgid ""
+"\tmov\tedi, bbuffer\n"
+"\tsub\teax, eax\n"
+"\tmov\t[edi], eax\n"
+"\tmov\t[edi+4], eax\n"
+"\tmov\t[edi+2], ax\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3928
+#, no-wrap
+msgid ""
+".loop:\n"
+"\tlodsw\n"
+"\tsub\tax, 3030h\n"
+"\tshl\tal, 4\n"
+"\tor\tal, ah\n"
+"\tmov\t[edi], al\n"
+"\tinc\tedi\n"
+"\tloop\t.loop\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3930
+#, no-wrap
+msgid "\tfbld\t[bbuffer]\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3937
+#, no-wrap
+msgid ""
+"\tcld\n"
+"\tpop\tedi\n"
+"\tpop\tesi\n"
+"\tpop\tecx\n"
+"\tsub\teax, eax\n"
+"\tret\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3943
+#, no-wrap
+msgid ""
+"align 4\n"
+"printnumber:\n"
+"\tpush\tebp\n"
+"\tmov\tal, [separ]\n"
+"\tcall\tputchar\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3947
+#, no-wrap
+msgid ""
+"\t; Print the integer at the TOS\n"
+"\tmov\tebp, bbuffer+9\n"
+"\tfbstp\t[bbuffer]\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3953
+#, no-wrap
+msgid ""
+"\t; Check the sign\n"
+"\tmov\tal, [ebp]\n"
+"\tdec\tebp\n"
+"\tor\tal, al\n"
+"\tjns\t.leading\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3957
+#, no-wrap
+msgid ""
+"\t; We got a negative number (should never happen)\n"
+"\tmov\tal, '-'\n"
+"\tcall\tputchar\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3966
+#, no-wrap
+msgid ""
+".leading:\n"
+"\t; Skip leading zeros\n"
+"\tmov\tal, [ebp]\n"
+"\tdec\tebp\n"
+"\tor\tal, al\n"
+"\tjne\t.first\n"
+"\tcmp\tebp, bbuffer\n"
+"\tjae\t.leading\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3971
+#, no-wrap
+msgid ""
+"\t; We are here because the result was 0.\n"
+"\t; Print '0' and return\n"
+"\tmov\tal, '0'\n"
+"\tjmp\tputchar\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3983
+#, no-wrap
+msgid ""
+".first:\n"
+"\t; We have found the first non-zero.\n"
+"\t; But it is still packed\n"
+"\ttest\tal, 0F0h\n"
+"\tjz\t.second\n"
+"\tpush\teax\n"
+"\tshr\tal, 4\n"
+"\tadd\tal, '0'\n"
+"\tcall\tputchar\n"
+"\tpop\teax\n"
+"\tand\tal, 0Fh\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3987
+#, no-wrap
+msgid ""
+".second:\n"
+"\tadd\tal, '0'\n"
+"\tcall\tputchar\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3991
+#, no-wrap
+msgid ""
+".next:\n"
+"\tcmp\tebp, bbuffer\n"
+"\tjb\t.done\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4001
+#, no-wrap
+msgid ""
+"\tmov\tal, [ebp]\n"
+"\tpush\teax\n"
+"\tshr\tal, 4\n"
+"\tadd\tal, '0'\n"
+"\tcall\tputchar\n"
+"\tpop\teax\n"
+"\tand\tal, 0Fh\n"
+"\tadd\tal, '0'\n"
+"\tcall\tputchar\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4004
+#, no-wrap
+msgid ""
+"\tdec\tebp\n"
+"\tjmp\tshort .next\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4009
+#, no-wrap
+msgid ""
+".done:\n"
+"\tpop\tebp\n"
+"\tor\tebp, ebp\n"
+"\tje\t.ret\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4015
+#, no-wrap
+msgid ""
+".zeros:\n"
+"\tmov\tal, '0'\n"
+"\tcall\tputchar\n"
+"\tdec\tebp\n"
+"\tjne\t.zeros\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4018
+#, no-wrap
+msgid ""
+".ret:\n"
+"\tret\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4021
+msgid ""
+"The code follows the same format as all the other filters we have seen "
+"before, with one subtle exception:"
+msgstr ""
+
+#. type: delimited block _ 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4024
+msgid ""
+"We are no longer assuming that the end of input implies the end of things to "
+"do, something we took for granted in the _character-oriented_ filters."
+msgstr ""
+
+#. type: delimited block _ 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4026
+msgid ""
+"This filter does not process characters. It processes a _language_ (albeit a "
+"very simple one, consisting only of numbers)."
+msgstr ""
+
+#. type: delimited block _ 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4028
+msgid "When we have no more input, it can mean one of two things:"
+msgstr ""
+
+#. type: delimited block _ 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4030
+msgid "We are done and can quit. This is the same as before."
+msgstr ""
+
+#. type: delimited block _ 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4031
+msgid ""
+"The last character we have read was a digit. We have stored it at the end of "
+"our ASCII-to-float conversion buffer. We now need to convert the contents of "
+"that buffer into a number and write the last line of our output."
+msgstr ""
+
+#. type: delimited block _ 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4033
+msgid ""
+"For that reason, we have modified our `getchar` and our `read` routines to "
+"return with the `carry flag` _clear_ whenever we are fetching another "
+"character from the input, or the `carry flag` _set_ whenever there is no "
+"more input."
+msgstr ""
+
+#. type: delimited block _ 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4036
+msgid ""
+"Of course, we are still using assembly language magic to do that! Take a "
+"good look at `getchar`. It _always_ returns with the `carry flag` _clear_."
+msgstr ""
+
+#. type: delimited block _ 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4038
+msgid ""
+"Yet, our main code relies on the `carry flag` to tell it when to quit-and it "
+"works."
+msgstr ""
+
+#. type: delimited block _ 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4041
+msgid ""
+"The magic is in `read`. Whenever it receives more input from the system, it "
+"just returns to `getchar`, which fetches a character from the input buffer, "
+"_clears_ the `carry flag` and returns."
+msgstr ""
+
+#. type: delimited block _ 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4044
+msgid ""
+"But when `read` receives no more input from the system, it does _not_ return "
+"to `getchar` at all. Instead, the `add esp, byte 4` op code adds `4` to "
+"`ESP`, _sets_ the `carry flag`, and returns."
+msgstr ""
+
+#. type: delimited block _ 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4048
+msgid ""
+"So, where does it return to? Whenever a program uses the `call` op code, the "
+"microprocessor ``push``es the return address, i.e., it stores it on the top "
+"of the stack (not the FPU stack, the system stack, which is in the memory). "
+"When a program uses the `ret` op code, the microprocessor ``pop``s the "
+"return value from the stack, and jumps to the address that was stored there."
+msgstr ""
+
+#. type: delimited block _ 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4050
+msgid ""
+"But since we added `4` to `ESP` (which is the stack pointer register), we "
+"have effectively given the microprocessor a minor case of _amnesia_: It no "
+"longer remembers it was `getchar` that ``call``ed `read`."
+msgstr ""
+
+#. type: delimited block _ 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4052
+msgid ""
+"And since `getchar` never ``push``ed anything before ``call``ing `read`, the "
+"top of the stack now contains the return address to whatever or whoever "
+"``call``ed `getchar`. As far as that caller is concerned, he ``call``ed "
+"`getchar`, which ``ret``urned with the `carry flag` set!"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4055
+msgid ""
+"Other than that, the `bcdload` routine is caught up in the middle of a "
+"Lilliputian conflict between the Big-Endians and the Little-Endians."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4057
+msgid ""
+"It is converting the text representation of a number into that number: The "
+"text is stored in the big-endian order, but the _packed decimal_ is little-"
+"endian."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4060
+msgid ""
+"To solve the conflict, we use the `std` op code early on. We cancel it with "
+"`cld` later on: It is quite important we do not `call` anything that may "
+"depend on the default setting of the _direction flag_ while `std` is active."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4062
+msgid ""
+"Everything else in this code should be quit eclear, providing you have read "
+"the entire chapter that precedes it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4065
+msgid ""
+"It is a classical example of the adage that programming requires a lot of "
+"thought and only a little coding. Once we have thought through every tiny "
+"detail, the code almost writes itself."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4067
+#, no-wrap
+msgid "Using pinhole"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4071
+msgid ""
+"Because we have decided to make the program _ignore_ any input except for "
+"numbers (and even those inside a comment), we can actually perform _textual "
+"queries_. We do not _have to_, but we _can_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4073
+msgid ""
+"In my humble opinion, forming a textual query, instead of having to follow a "
+"very strict syntax, makes software much more user friendly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4079
+msgid ""
+"Suppose we want to build a pinhole camera to use the 4x5 inch film. The "
+"standard focal length for that film is about 150mm. We want to _fine-tune_ "
+"our focal length so the pinhole diameter is as round a number as possible. "
+"Let us also suppose we are quite comfortable with cameras but somewhat "
+"intimidated by computers. Rather than just have to type in a bunch of "
+"numbers, we want to _ask_ a couple of questions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4081
+msgid "Our session might look like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4085
+#, no-wrap
+msgid "% pinhole\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4087
+#, no-wrap
+msgid "Computer,\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4100
+#, no-wrap
+msgid ""
+"What size pinhole do I need for the focal length of 150?\n"
+"150\t490\t306\t362\t2930\t12\n"
+"Hmmm... How about 160?\n"
+"160\t506\t316\t362\t3125\t12\n"
+"Let's make it 155, please.\n"
+"155\t498\t311\t362\t3027\t12\n"
+"Ah, let's try 157...\n"
+"157\t501\t313\t362\t3066\t12\n"
+"156?\n"
+"156\t500\t312\t362\t3047\t12\n"
+"That's it! Perfect! Thank you very much!\n"
+"^D\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4103
+msgid ""
+"We have found that while for the focal length of 150, our pinhole diameter "
+"should be 490 microns, or 0.49 mm, if we go with the almost identical focal "
+"length of 156 mm, we can get away with a pinhole diameter of exactly one "
+"half of a millimeter."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4105
+#, no-wrap
+msgid "Scripting"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4108
+msgid ""
+"Because we have chosen the `+#+` character to denote the start of a comment, "
+"we can treat our pinhole software as a _scripting language_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4110
+msgid "You have probably seen shell _scripts_ that start with:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4114
+#, no-wrap
+msgid "#! /bin/sh\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4117
+msgid "...or..."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4121
+#, no-wrap
+msgid "#!/bin/sh\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4124
+msgid "...because the blank space after the `#!` is optional."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4127
+msgid ""
+"Whenever UNIX(R) is asked to run an executable file which starts with the `#!"
+"`, it assumes the file is a script. It adds the command to the rest of the "
+"first line of the script, and tries to execute that."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4129
+msgid ""
+"Suppose now that we have installed pinhole in /usr/local/bin/, we can now "
+"write a script to calculate various pinhole diameters suitable for various "
+"focal lengths commonly used with the 120 film."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4131
+msgid "The script might look something like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4137
+#, no-wrap
+msgid ""
+"#! /usr/local/bin/pinhole -b -i\n"
+"# Find the best pinhole diameter\n"
+"# for the 120 film\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4140
+#, no-wrap
+msgid ""
+"### Standard\n"
+"80\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4143
+#, no-wrap
+msgid ""
+"### Wide angle\n"
+"30, 40, 50, 60, 70\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4146
+#, no-wrap
+msgid ""
+"### Telephoto\n"
+"100, 120, 140\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4149
+msgid "Because 120 is a medium size film, we may name this file medium."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4151
+msgid ""
+"We can set its permissions to execute, and run it as if it were a program:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4156
+#, no-wrap
+msgid ""
+"% chmod 755 medium\n"
+"% ./medium\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4159
+msgid "UNIX(R) will interpret that last command as:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4163
+#, no-wrap
+msgid "% /usr/local/bin/pinhole -b -i ./medium\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4166
+msgid "It will run that command and display:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4178
+#, no-wrap
+msgid ""
+"80\t358\t224\t256\t1562\t11\n"
+"30\t219\t137\t128\t586\t9\n"
+"40\t253\t158\t181\t781\t10\n"
+"50\t283\t177\t181\t977\t10\n"
+"60\t310\t194\t181\t1172\t10\n"
+"70\t335\t209\t181\t1367\t10\n"
+"100\t400\t250\t256\t1953\t11\n"
+"120\t438\t274\t256\t2344\t11\n"
+"140\t473\t296\t256\t2734\t11\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4181
+msgid "Now, let us enter:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4185
+#, no-wrap
+msgid "% ./medium -c\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4188
+msgid "UNIX(R) will treat that as:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4192
+#, no-wrap
+msgid "% /usr/local/bin/pinhole -b -i ./medium -c\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4196
+msgid ""
+"That gives it two conflicting options: `-b` and `-c` (Use Bender's constant "
+"and use Connors' constant). We have programmed it so later options override "
+"early ones-our program will calculate everything using Connors' constant:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4208
+#, no-wrap
+msgid ""
+"80\t331\t242\t256\t1826\t11\n"
+"30\t203\t148\t128\t685\t9\n"
+"40\t234\t171\t181\t913\t10\n"
+"50\t262\t191\t181\t1141\t10\n"
+"60\t287\t209\t181\t1370\t10\n"
+"70\t310\t226\t256\t1598\t11\n"
+"100\t370\t270\t256\t2283\t11\n"
+"120\t405\t296\t256\t2739\t11\n"
+"140\t438\t320\t362\t3196\t12\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4212
+msgid ""
+"We decide we want to go with Bender's constant after all. We want to save "
+"its values as a comma-separated file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4228
+#, no-wrap
+msgid ""
+"% ./medium -b -e > bender\n"
+"% cat bender\n"
+"focal length in millimeters,pinhole diameter in microns,F-number,normalized F-number,F-5.6 multiplier,stops from F-5.6\n"
+"80,358,224,256,1562,11\n"
+"30,219,137,128,586,9\n"
+"40,253,158,181,781,10\n"
+"50,283,177,181,977,10\n"
+"60,310,194,181,1172,10\n"
+"70,335,209,181,1367,10\n"
+"100,400,250,256,1953,11\n"
+"120,438,274,256,2344,11\n"
+"140,473,296,256,2734,11\n"
+"%\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4231
+#, no-wrap
+msgid "Caveats"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4235
+msgid ""
+"Assembly language programmers who \"grew up\" under MS-DOS(R) and Windows(R) "
+"often tend to take shortcuts. Reading the keyboard scan codes and writing "
+"directly to video memory are two classical examples of practices which, "
+"under MS-DOS(R) are not frowned upon but considered the right thing to do."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4237
+msgid ""
+"The reason? Both the PC BIOS and MS-DOS(R) are notoriously slow when "
+"performing these operations."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4240
+msgid ""
+"You may be tempted to continue similar practices in the UNIX(R) "
+"environment. For example, I have seen a web site which explains how to "
+"access the keyboard scan codes on a popular UNIX(R) clone."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4242
+msgid ""
+"That is generally a _very bad idea_ in UNIX(R) environment! Let me explain "
+"why."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4244
+#, no-wrap
+msgid "UNIX(R) Is Protected"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4251
+msgid ""
+"For one thing, it may simply not be possible. UNIX(R) runs in protected "
+"mode. Only the kernel and device drivers are allowed to access hardware "
+"directly. Perhaps a particular UNIX(R) clone will let you read the keyboard "
+"scan codes, but chances are a real UNIX(R) operating system will not. And "
+"even if one version may let you do it, the next one may not, so your "
+"carefully crafted software may become a dinosaur overnight."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4253
+#, no-wrap
+msgid "UNIX(R) Is an Abstraction"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4256
+msgid ""
+"But there is a much more important reason not to try accessing the hardware "
+"directly (unless, of course, you are writing a device driver), even on the "
+"UNIX(R) like systems that let you do it:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4258
+msgid "_UNIX(R) is an abstraction!_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4264
+msgid ""
+"There is a major difference in the philosophy of design between MS-DOS(R) "
+"and UNIX(R). MS-DOS(R) was designed as a single-user system. It is run on "
+"a computer with a keyboard and a video screen attached directly to that "
+"computer. User input is almost guaranteed to come from that keyboard. Your "
+"program's output virtually always ends up on that screen."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4267
+msgid ""
+"This is NEVER guaranteed under UNIX(R). It is quite common for a UNIX(R) "
+"user to pipe and redirect program input and output:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4271
+#, no-wrap
+msgid "% program1 | program2 | program3 > file1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4275
+msgid ""
+"If you have written program2, your input does not come from the keyboard but "
+"from the output of program1. Similarly, your output does not go to the "
+"screen but becomes the input for program3 whose output, in turn, goes to [."
+"filename]#file1#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4278
+msgid ""
+"But there is more! Even if you made sure that your input comes from, and "
+"your output goes to, the terminal, there is no guarantee the terminal is a "
+"PC: It may not have its video memory where you expect it, nor may its "
+"keyboard be producing PC-style scan codes. It may be a Macintosh(R), or any "
+"other computer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4280
+msgid ""
+"Now you may be shaking your head: My software is in PC assembly language, "
+"how can it run on a Macintosh(R)? But I did not say your software would be "
+"running on a Macintosh(R), only that its terminal may be a Macintosh(R)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4284
+msgid ""
+"Under UNIX(R), the terminal does not have to be directly attached to the "
+"computer that runs your software, it can even be on another continent, or, "
+"for that matter, on another planet. It is perfectly possible that a "
+"Macintosh(R) user in Australia connects to a UNIX(R) system in North America "
+"(or anywhere else) via telnet. The software then runs on one computer, "
+"while the terminal is on a different computer: If you try to read the scan "
+"codes, you will get the wrong input!"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4287
+msgid ""
+"Same holds true about any other hardware: A file you are reading may be on a "
+"disk you have no direct access to. A camera you are reading images from may "
+"be on a space shuttle, connected to you via satellites."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4290
+msgid ""
+"That is why under UNIX(R) you must never make any assumptions about where "
+"your data is coming from and going to. Always let the system handle the "
+"physical access to the hardware."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4298
+msgid ""
+"These are caveats, not absolute rules. Exceptions are possible. For "
+"example, if a text editor has determined it is running on a local machine, "
+"it may want to read the scan codes directly for improved control. I am not "
+"mentioning these caveats to tell you what to do or what not to do, just to "
+"make you aware of certain pitfalls that await you if you have just arrived "
+"to UNIX(R) form MS-DOS(R). Of course, creative people often break rules, "
+"and it is OK as long as they know they are breaking them and why."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4301
+#, no-wrap
+msgid "Acknowledgements"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4304
+msgid ""
+"This tutorial would never have been possible without the help of many "
+"experienced FreeBSD programmers from the {freebsd-hackers}, many of whom "
+"have patiently answered my questions, and pointed me in the right direction "
+"in my attempts to explore the inner workings of UNIX(R) system programming "
+"in general and FreeBSD in particular."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4307
+msgid ""
+"Thomas M. Sommers opened the door for me . His https://web.archive.org/"
+"web/20090914064615/http://www.codebreakers-journal.com/content/"
+"view/262/27[How do I write \"Hello, world\" in FreeBSD assembler?] web page "
+"was my first encounter with an example of assembly language programming "
+"under FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4309
+msgid ""
+"Jake Burkholder has kept the door open by willingly answering all of my "
+"questions and supplying me with example assembly language source code."
+msgstr ""
diff --git a/documentation/content/en/books/faq/_index.adoc b/documentation/content/en/books/faq/_index.adoc
index de3500ff6e..c973d8a3ac 100644
--- a/documentation/content/en/books/faq/_index.adoc
+++ b/documentation/content/en/books/faq/_index.adoc
@@ -1,15 +1,16 @@
---
-title: Frequently Asked Questions for FreeBSD 12.X and 13.X
-authors:
+title: Frequently Asked Questions for FreeBSD
+authors:
- author: The FreeBSD Documentation Project
-copyright: 1995-2022 The FreeBSD Documentation Project
-description: Frequently Asked Questions, and answers, covering all aspects of FreeBSD
-trademarks: ["freebsd", "ibm", "ieee", "adobe", "intel", "linux", "microsoft", "opengroup", "sun", "netbsd", "general"]
+copyright: 1995-2023 The FreeBSD Documentation Project
+description: Frequently Asked Questions for FreeBSD
+trademarks: ["freebsd", "ieee", "linux", "microsoft", "openbsd", "netbsd", "general"]
bookOrder: 5
tags: ["FAQ", "FreeBSD FAQ"]
+layout: single
---
-= Frequently Asked Questions for FreeBSD {rel2-relx} and {rel-relx}
+= Frequently Asked Questions for FreeBSD
:doctype: book
:toc: macro
:toclevels: 1
@@ -20,18 +21,6 @@ tags: ["FAQ", "FreeBSD FAQ"]
:source-highlighter: rouge
:experimental:
:images-path: books/faq/
-:rel-numbranch: 4
-:rel-head: 14-CURRENT
-:rel-head-relx: 14.X
-:rel-head-releng: head/
-:rel-relx: 13.X
-:rel-stable: 13-STABLE
-:rel-releng: stable/13/
-:rel-relengdate: December 2018
-:rel2-relx: 12.X
-:rel2-stable: 12-STABLE
-:rel2-releng: stable/12/
-:rel2-relengdate: December 2018
ifdef::env-beastie[]
ifdef::backend-html5[]
@@ -55,11 +44,8 @@ endif::[]
[.abstract-title]
Abstract
-This is the Frequently Asked Questions (FAQ) for FreeBSD versions {rel-relx} and {rel2-relx}.
-Every effort has been made to make this FAQ as informative as possible; if you have any suggestions as to how it may be improved, send them to the {freebsd-doc}.
-
-The latest version of this document is always available from the extref:{faq}[FreeBSD website].
-It may also be downloaded as one large link:.[HTML] file with HTTP or as a variety of other formats from the https://download.freebsd.org/doc/[FreeBSD FTP server].
+This is the Frequently Asked Questions (FAQ) for FreeBSD.
+Every effort has been made to make this FAQ as informative as possible.
'''
@@ -68,1717 +54,392 @@ toc::[]
[[introduction]]
== Introduction
-[[what-is-FreeBSD]]
-=== What is FreeBSD?
-
-FreeBSD is a modern operating system for desktops, laptops, servers, and embedded systems with support for a large number of https://www.FreeBSD.org/platforms/[platforms].
-
-It is based on U.C. Berkeley's "4.4BSD-Lite" release, with some "4.4BSD-Lite2" enhancements.
-It is also based indirectly on William Jolitz's port of U.C. Berkeley's "Net/2" to the i386(TM), known as "386BSD",
-though very little of the 386BSD code remains.
-
-FreeBSD is used by companies, Internet Service Providers, researchers, computer professionals, students and home users all over the world in their work, education and recreation.
-
-For more detailed information on FreeBSD, refer to the extref:{handbook}[FreeBSD Handbook].
-
-[[FreeBSD-goals]]
-=== What is the goal of the FreeBSD Project?
-
-The goal of the FreeBSD Project is to provide a stable and fast general purpose operating system that may be used for any purpose without strings attached.
-
-[[bsd-license-restrictions]]
-=== Does the FreeBSD license have any restrictions?
-
-Yes. Those restrictions do not control how the code is used, but how to treat the FreeBSD Project itself.
-The license itself is available at https://www.FreeBSD.org/copyright/freebsd-license/[license] and can be summarized like this:
-
-* Do not claim that you wrote this.
-* Do not sue us if it breaks.
-* Do not remove or modify the license.
-
-Many of us have a significant investment in the project and would certainly not mind a little financial compensation now and then,
-but we definitely do not insist on it.
-We believe that our first and foremost "mission" is to provide code to any and all comers, and for whatever purpose, so that the code gets the widest possible use and provides the widest possible benefit.
-This, we believe, is one of the most fundamental goals of Free Software and one that we enthusiastically support.
+Welcome to the world of FreeBSD!
+In this section, we provide a comprehensive overview of what FreeBSD is, its origins, goals, use cases, and the community behind it.
-Code in our source tree which falls under the https://www.FreeBSD.org/copyright/COPYING[GNU General Public License (GPL)] or https://www.FreeBSD.org/copyright/COPYING.LIB[GNU Library General Public License (LGPL)] comes with slightly more strings attached, though at least on the side of enforced access rather than the usual opposite.
-Due to the additional complexities that can evolve in the commercial use of GPL software, we do, however, endeavor to replace such software with submissions under the more relaxed https://www.FreeBSD.org/copyright/freebsd-license/[FreeBSD license] whenever possible.
+Discover the reasons behind its name, learn how to contribute to this project, and explore the rich ecosystem of FreeBSD within the context of open-source operating systems.
-[[replace-current-OS]]
-=== Can FreeBSD replace my current operating system?
-
-For most people, yes. But this question is not quite that cut-and-dried.
+[[what-is-FreeBSD]]
+=== What is FreeBSD?
-Most people do not actually use an operating system.
-They use applications.
-The applications are what really use the operating system.
-FreeBSD is designed to provide a robust and full-featured environment for applications.
-It supports a wide variety of web browsers, office suites, email readers, graphics programs, programming environments, network servers, and much more.
-Most of these applications can be managed through the https://www.FreeBSD.org/ports/[Ports Collection].
+FreeBSD is a versatile and open-source UNIX(R)-like operating system known for its exceptional stability, security, and performance.
+Developed by a dedicated community of volunteers, it's based on the Berkeley Software Distribution (BSD) UNIX operating system.
-If an application is only available on one operating system, that operating system cannot just be replaced.
-Chances are, there is a very similar application on FreeBSD, however.
-As a solid office or Internet server or a reliable workstation, FreeBSD will almost certainly do everything you need.
-Many computer users across the world, including both novices and experienced UNIX(R) administrators, use FreeBSD as their only desktop operating system.
-
-Users migrating to FreeBSD from another UNIX(R)-like environment will find FreeBSD to be similar.
-Windows(R) and Mac OS(R) users may be interested in instead using https://www.ghostbsd.org/[GhostBSD], https://www.midnightbsd.org/[MidnightBSD] or https://www.nomadbsd.org/[NomadBSD] three FreeBSD-based desktop distributions.
-Non-UNIX(R) users should expect to invest some additional time learning the UNIX(R) way of doing things.
-This FAQ and the extref:{handbook}[FreeBSD Handbook] are excellent places to start.
+FreeBSD offers a powerful and customizable environment suitable for a wide range of applications, from servers and embedded systems to desktops and networking equipment.
+Its commitment to open source principles ensures a transparent and collaborative development process, making FreeBSD a trusted choice for those seeking a reliable and highly adaptable operating system.
[[why-called-FreeBSD]]
=== Why is it called FreeBSD?
-* It may be used free of charge, even by commercial users.
-* Full source for the operating system is freely available, and the minimum possible restrictions have been placed upon its use, distribution and incorporation into other work (commercial or non-commercial).
-* Anyone who has an improvement or bug fix is free to submit their code and have it added to the source tree (subject to one or two obvious provisions).
+The name "FreeBSD" stems from its roots in the Berkeley Software Distribution (BSD) UNIX operating system, renowned for its contributions to the world of open-source software.
+The "Free" in FreeBSD signifies its commitment to the principles of free and open-source software, which grant users the freedom to study, modify, and distribute the code.
It is worth pointing out that the word "free" is being used in two ways here: one meaning "at no cost" and the other meaning "do whatever you like".
-Apart from one or two things you _cannot_ do with the FreeBSD code, for example pretending you wrote it, you can really do whatever you like with it.
-
-[[differences-to-other-bsds]]
-=== What are the differences between FreeBSD and NetBSD, OpenBSD, and other open source BSD operating systems?
-
-James Howard wrote a good explanation of the history and differences between the various projects,
-called https://jameshoward.us/archive/bsd-family-tree/[The BSD Family Tree] which goes a fair way to answering this question.
-Some of the information is out of date, but the history portion in particular remains accurate.
-
-Most of the BSDs share patches and code, even today.
-All of the BSDs have common ancestry.
-
-The design goals of FreeBSD are described in <<FreeBSD-goals>>, above.
-The design goals of the other most popular BSDs may be summarized as follows:
-
-* OpenBSD aims for operating system security above all else. The OpenBSD team wrote man:ssh[1] and man:pf[4], which have both been ported to FreeBSD.
-* NetBSD aims to be easily ported to other hardware platforms.
-* DragonFly BSD is a fork of FreeBSD 4.8 that has since developed many interesting features of its own, including the HAMMER file system and support for user-mode "vkernels".
-
-[[latest-version]]
-=== What is the latest version of FreeBSD?
-At any point in the development of FreeBSD, there can be multiple parallel branches.
-{rel-relx} releases are made from the {rel-stable} branch, and {rel2-relx} releases are made from the {rel2-stable} branch.
-
-Up until the release of 12.0, the {rel2-relx} series was the one known as _-STABLE_.
-However, as of {rel-head-relx}, the {rel2-relx} branch will be designated for an "extended support" status and receive only fixes for major problems, such as security-related fixes.
-
-Releases are made <<release-freq,every few months>>.
-While many people stay more up-to-date with the FreeBSD sources (see the questions on <<current,FreeBSD-CURRENT>> and <<stable,FreeBSD-STABLE>>) than that, doing so is more of a commitment, as the sources are a moving target.
-
-More information on FreeBSD releases can be found on the https://www.FreeBSD.org/releng/#release-build[Release Engineering page] and in man:release[7].
-
-[[current]]
-=== What is _FreeBSD-CURRENT_?
-
-extref:{handbook}[FreeBSD-CURRENT, current] is the development version of the operating system, which will in due course become the new FreeBSD-STABLE branch.
-As such, it is really only of interest to developers working on the system and die-hard hobbyists.
-See the extref:{handbook}[relevant section, current] in the extref:{handbook}[Handbook] for details on running _-CURRENT_.
-
-Users not familiar with FreeBSD should not use FreeBSD-CURRENT.
-This branch sometimes evolves quite quickly and due to mistake can be un-buildable at times.
-People that use FreeBSD-CURRENT are expected to be able to analyze, debug, and report problems.
-
-[[stable]]
-=== What is the FreeBSD-STABLE concept?
-
-_FreeBSD-STABLE_ is the development branch from which major releases are made.
-Changes go into this branch at a slower pace and with the general assumption that they have first been tested in FreeBSD-CURRENT.
-However, at any given time, the sources for FreeBSD-STABLE may or may not be suitable for general use,
-as it may uncover bugs and corner cases that were not yet found in FreeBSD-CURRENT.
-Users who do not have the resources to perform testing should instead run the most recent release of FreeBSD.
-_FreeBSD-CURRENT_, on the other hand, has been one unbroken line since 2.0 was released.
-
-For more detailed information on branches see "extref:{releng}[FreeBSD Release Engineering: Creating the Release Branch, rel-branch]",
-the status of the branches and the upcoming release schedule can be found on the https://www.FreeBSD.org/releng[Release Engineering Information] page.
-
-Version {u-rel123-announce}[{rel123-current}] is the latest release from the {rel2-stable} branch; it was released on {rel123-current-date}.
-Version {u-rel131-announce}[{rel131-current}] is the latest release from the {rel-stable} branch; it was released on {rel131-current-date}.
-
-[[release-freq]]
-=== When are FreeBSD releases made?
-
-The {re} releases a new major version of FreeBSD about every 18 months and a new minor version about every 8 months, on average.
-Release dates are announced well in advance, so that the people working on the system know when their projects need to be finished and tested.
-A testing period precedes each release, to ensure that the addition of new features does not compromise the stability of the release.
-Many users regard this caution as one of the best things about FreeBSD, even though waiting for all the latest goodies to reach _-STABLE_ can be a little frustrating.
-
-More information on the release engineering process (including a schedule of upcoming releases) can be found on the https://www.FreeBSD.org/releng/[release engineering] pages on the FreeBSD Web site.
-
-For people who need or want a little more excitement, binary snapshots are made weekly as discussed above.
-
-[[snapshot-freq]]
-=== When are FreeBSD snapshots made?
-
-FreeBSD link:https://www.FreeBSD.org/snapshots/[snapshot] releases are made based on the current state of the _-CURRENT_ and _-STABLE_ branches.
-The goals behind each snapshot release are:
+[[FreeBSD-goals]]
+=== What is the goal of the FreeBSD Project?
-* To test the latest version of the installation software.
-* To give people who would like to run _-CURRENT_ or _-STABLE_ but who do not have the time or bandwidth to follow it on a day-to-day basis an easy way of bootstrapping it onto their systems.
-* To preserve a fixed reference point for the code in question, just in case we break something really badly later. (Although Subversion normally prevents anything horrible like this happening.)
-* To ensure that all new features and fixes in need of testing have the greatest possible number of potential testers.
+The FreeBSD Project has a clear and unwavering goal: to provide a high-quality, open-source UNIX-like operating system that excels in terms of performance, security, and stability.
-No claims are made that any _-CURRENT_ snapshot can be considered "production quality" for any purpose.
-If a stable and fully tested system is needed, stick to full releases.
+It aims to offer a versatile platform suitable for a wide range of computing needs, from servers and workstations to embedded systems and beyond.
+FreeBSD is developed with a strong commitment to open source principles, fostering a collaborative environment where contributions from a global community of developers help shape and refine the operating system.
+This dedication to quality, freedom, and reliability is what sets FreeBSD apart and drives its ongoing success as an open-source project.
-Snapshot releases are directly available from link:https://www.FreeBSD.org/snapshots/[snapshot].
+[[FreeBSD-usecases]]
+=== What uses cases is FreeBSD good for?
-Official snapshots are generated on a regular basis for all actively developed branches.
+FreeBSD is a versatile operating system that excels in various use cases.
+It is particularly well-suited for server environments, where its stability and performance make it a popular choice for web hosting, databases, and networking applications.
+FreeBSD's robust security features also position it as a strong candidate for firewall and security appliance deployments.
+Beyond servers, FreeBSD can be tailored to function in specialized environments, including embedded systems and game console devices.
+Its adaptability, reliability, and open-source nature make FreeBSD a compelling choice for a wide range of computing needs.
[[responsible]]
=== Who is responsible for FreeBSD?
-The key decisions concerning the FreeBSD project, such as the overall direction of the project and who is allowed to add code to the source tree,
-are made by a link:https://www.FreeBSD.org/administration#t-core[core team] of 9 people.
-There is a much larger team of more than 350 extref:{contributors}[committers, staff-committers] who are authorized to make changes directly to the FreeBSD source tree.
-
-However, most non-trivial changes are discussed in advance in the <<mailing,mailing lists>>,
-and there are no restrictions on who may take part in the discussion.
-
-[[where-get]]
-=== Where can I get FreeBSD?
-
-Every supported release of FreeBSD is available from the https://www.freebsd.org/where/[FreeBSD release locator page]:
-
-* For the latest {rel-stable} release, {rel131-current}-RELEASE, follow the link for link:https://www.freebsd.org/where/#download-rel131[the appropriate architecture and installation mode for {rel131-current}-RELEASE].
-* For the latest {rel2-stable} release, {rel123-current}-RELEASE, follow the link for link:https://www.freebsd.org/where/#download-rel123[the appropriate architecture and installation mode for {rel123-current}-RELEASE].
-* link:https://www.FreeBSD.org/snapshots/[Snapshot] releases are made monthly for the <<current,-CURRENT>> and <<stable,-STABLE>> branches, these being of service purely to bleeding-edge testers and developers.
+FreeBSD is a community-driven open-source project with a decentralized structure.
+Its development and maintenance are carried out by a global community of dedicated volunteers, developers, and organizations who collaborate to enhance and expand the operating system.
-Information about obtaining FreeBSD on CD, DVD, and other media can be found in extref:{handbook}[the Handbook, mirrors].
+The key decisions concerning the FreeBSD project, such as the overall direction of the project or who is allowed to add code to the source tree, are made by a elected Core Team of 9 people.
-[[access-pr]]
-=== How do I access the Problem Report database?
+This collaborative and community-driven approach has been fundamental to FreeBSD's success and longevity as a reliable and robust UNIX-like operating system.
-The Problem Report database of all user change requests may be queried by using our web-based PR https://bugs.FreeBSD.org/search/[query] interface.
-
-The link:https://www.FreeBSD.org/support/bugreports[web-based problem report submission interface] can be used to submit problem reports through a web browser.
-
-Before submitting a problem report, read extref:{problem-reports}[Writing FreeBSD Problem Reports], an article on how to write good problem reports.
-
-[[support]]
-== Documentation and Support
-
-[[books]]
-=== What good books are there about FreeBSD?
-
-The project produces a wide range of documentation, available online from this link: https://www.FreeBSD.org/docs/[https://www.FreeBSD.org/docs/].
-
-[[doc-formats]]
-=== Is the documentation available in other formats, such as plain text (ASCII), or PDF?
-
-Yes. The documentation is available in a number of different formats and compression schemes on the FreeBSD FTP site,
-in the https://download.freebsd.org/doc/[/doc/] directory.
-
-The documentation is categorized in a number of different ways.
-These include:
-
-* The document's name, such as `faq`, or `handbook`.
-* The document's language and encoding. These are based on the locale names found under [.filename]#/usr/share/locale# on a FreeBSD system. The current languages and encodings are as follows:
-+
-[.informaltable]
-[cols="1,1", frame="none", options="header"]
-|===
-| Name
-| Meaning
-
-|`en_US.ISO8859-1`
-|English (United States)
-
-|`bn_BD.ISO10646-1`
-|Bengali or Bangla (Bangladesh)
-
-|`da_DK.ISO8859-1`
-|Danish (Denmark)
-
-|`de_DE.ISO8859-1`
-|German (Germany)
-
-|`el_GR.ISO8859-7`
-|Greek (Greece)
-
-|`es_ES.ISO8859-1`
-|Spanish (Spain)
-
-|`fr_FR.ISO8859-1`
-|French (France)
-
-|`hu_HU.ISO8859-2`
-|Hungarian (Hungary)
-
-|`it_IT.ISO8859-15`
-|Italian (Italy)
-
-|`ja_JP.eucJP`
-|Japanese (Japan, EUC encoding)
-
-|`ko_KR.UTF-8`
-|Korean (Korea, UTF-8 encoding)
-
-|`mn_MN.UTF-8`
-|Mongolian (Mongolia, UTF-8 encoding)
-
-|`nl_NL.ISO8859-1`
-|Dutch (Netherlands)
-
-|`pl_PL.ISO8859-2`
-|Polish (Poland)
+[[how-to-contribute]]
+=== How can I contribute to FreeBSD? What can I do to help?
-|`pt_BR.ISO8859-1`
-|Portuguese (Brazil)
+We accept all types of contributions: documentation, code, and even art.
+See the article on extref:{contributing}[Contributing to FreeBSD] for specific advice on how to do this.
-|`ru_RU.KOI8-R`
-|Russian (Russia, KOI8-R encoding)
+And thanks for the thought!
-|`tr_TR.ISO8859-9`
-|Turkish (Turkey)
+[[bsd-license-restrictions]]
+=== Does the FreeBSD license have any restrictions?
-|`zh_CN.UTF-8`
-|Simplified Chinese (China, UTF-8 encoding)
+FreeBSD is distributed under the https://www.FreeBSD.org/copyright/freebsd-license/[BSD License], which is known for its permissive nature.
-|`zh_TW.UTF-8`
-|Traditional Chinese (Taiwan, UTF-8 encoding)
-|===
-+
-[NOTE]
-====
-Some documents may not be available in all languages.
-====
+This license places very few restrictions on how you can use FreeBSD:
-* The document's format. We produce the documentation in a number of different output formats. Each format has its own advantages and disadvantages. Some formats are better suited for online reading, while others are meant to be aesthetically pleasing when printed on paper. Having the documentation available in any of these formats ensures that our readers will be able to read the parts they are interested in, either on their monitor, or on paper after printing the documents. The currently available formats are:
-+
-[.informaltable]
-[cols="1,1", frame="none", options="header"]
-|===
-| Format
-| Meaning
-
-|`html-split`
-|A collection of small, linked, HTML files.
-
-|`html`
-|One large HTML file containing the entire document
-
-|`pdf`
-|Adobe's Portable Document Format
-
-|`txt`
-|Plain text
-|===
-* The compression and packaging scheme.
-.. Where the format is `html-split`, the files are bundled up using man:tar[1]. The resulting [.filename]#.tar# is then compressed using the compression schemes detailed in the next point.
-.. All the other formats generate one file. For example, [.filename]#article.pdf#, [.filename]#book.html#, and so on.
-+
-These files are then compressed using either the `zip` or `bz2` compression schemes.
-man:tar[1] can be used to uncompress these files.
-+
-So the PDF version of the Handbook, compressed using `bzip2` will be stored in a file called [.filename]#book.pdf.bz2# in the [.filename]#handbook/# directory.
-
-After choosing the format and compression mechanism, download the compressed files, uncompress them, and then copy the appropriate documents into place.
-
-For example, the split HTML version of the FAQ, compressed using man:bzip2[1],
-can be found in [.filename]#doc/en_US.ISO8859-1/books/faq/book.html-split.tar.bz2# To download and uncompress that file, type:
-
-[source,shell]
-....
-# fetch https://download.freebsd.org/doc/en_US.ISO8859-1/books/faq/book.html-split.tar.bz2
-# tar xvf book.html-split.tar.bz2
-....
+* Do not claim that you wrote this.
+* Do not sue us if it breaks.
+* Do not remove or modify the license.
-If the file is compressed, tar will automatically detect the appropriate format and decompress it correctly,
-resulting in a collection of [.filename]#.html# files.
-The main one is called [.filename]#index.html#, which will contain the table of contents, introductory material, and links to the other parts of the document.
+The license means you are free to modify, distribute, and even sell FreeBSD without *being required to release your modifications as open source*.
+However, there are some minimal conditions, such as retaining the original copyright notice and disclaimers when distributing FreeBSD.
+Overall, the BSD License provides a high degree of freedom and flexibility, making FreeBSD an attractive choice for a wide range of applications and projects.
-[[mailing]]
-=== Where do I find info on the FreeBSD mailing lists? What FreeBSD news groups are available?
+Code in our source tree which falls under the https://www.FreeBSD.org/copyright/COPYING[GNU General Public License (GPL)] or https://www.FreeBSD.org/copyright/COPYING.LIB[GNU Library General Public License (LGPL)] comes with slightly more strings attached though, at least on the side of enforced access rather than the usual opposite.
-Refer to the extref:{handbook}[Handbook entry on mailing-lists, eresources-mail] and the extref:{handbook}[Handbook entry on newsgroups, eresources-news].
+[[replace-current-OS]]
+=== Can FreeBSD replace my current operating system?
-[[irc]]
-=== Are there FreeBSD IRC (Internet Relay Chat) channels?
+For many users and administrators, yes.
+But this question is not quite that cut-and-dried.
-Yes, most major IRC networks host a FreeBSD chat channel and the FreeBSD wiki holds an up to date https://wiki.freebsd.org/IRC/Channels[list of IRC channels].
+FreeBSD is a powerful and versatile operating system that can replace or coexist with many other operating systems, depending on users and administrators specific needs.
+However, whether FreeBSD can replace your current operating system depends on factors such as your hardware, software requirements, and familiarity with FreeBSD.
-Each of these channels are distinct and are not connected to each other.
-Since their chat styles differ, try each to find one suited to your chat style.
+While it offers a robust and feature-rich alternative, it's essential to evaluate your specific use case and compatibility requirements before making the switch.
-[[forums]]
-=== Are there any web based forums to discuss FreeBSD?
+If an application is only available on one operating system, that operating system cannot just be replaced.
-The official FreeBSD forums are located at https://forums.FreeBSD.org/[https://forums.FreeBSD.org/].
+Users migrating to FreeBSD from another UNIX-like environment will find FreeBSD to be similar.
+Non-UNIX users, like Windows(R) users, should expect to invest some additional time learning the UNIX way of doing things.
-[[training]]
-=== Where can I get commercial FreeBSD training and support?
+[[run-popular-software]]
+=== Can FreeBSD run popular open source software?
-http://www.ixsystems.com[iXsystems, Inc.], parent company of the http://www.freebsdmall.com/[FreeBSD Mall],
-provides commercial FreeBSD and TrueOS software http://www.ixsystems.com/support[support],
-in addition to FreeBSD development and tuning solutions.
+Yes, FreeBSD is well-suited for running popular open source software.
+Its compatibility with a wide range of applications and libraries makes it a favorable choice for those looking to deploy and use open source software packages.
+FreeBSD provides a robust and stable environment that supports various programming languages, databases, web servers, and other software commonly used in the open source community.
+Its ports and packages system simplifies the installation and management of such software, ensuring that users can easily access and run their favorite open source tools and applications on FreeBSD with minimal hassle.
-BSD Certification Group, Inc. provides system administration certifications for DragonFly BSD, FreeBSD, NetBSD, and OpenBSD.
-Refer to http://www.BSDCertification.org[their site] for more information.
+[[install-software]]
+=== How can I install software in FreeBSD?
-Any other organizations providing training and support should contact the Project to be listed here.
+FreeBSD offers multiple methods for software installation.
+One of the most common methods involves using the built-in man:pkg[8] package manager, which simplifies the process by fetching and installing pre-built binary packages.
+Another approach is to compile and install software from source code using the man:ports[7] collection, providing a flexible and customizable way to install software.
-[[install]]
-== Installation
+FreeBSD's documentation offer detailed guidance on both methods, ensuring that users can easily expand their system's capabilities with the software they need.
-[[which-architecture]]
-=== Which platform should I download? I have a 64 bit capable Intel(R) CPU, but I only see amd64.
+[[differences-to-other-bsds]]
+=== What are the differences between FreeBSD, NetBSD, OpenBSD, and other open source BSD operating systems?
-amd64 is the term FreeBSD uses for 64-bit compatible x86 architectures (also known as "x86-64" or "x64").
-Most modern computers should use amd64.
-Older hardware should use i386.
-When installing on a non-x86-compatible architecture, select the platform which best matches the hardware.
+FreeBSD, NetBSD, OpenBSD and DragonFly BSD are all part of the open source BSD family, sharing common UNIX-like foundations, but each has its own distinct focus and priorities.
+These differences reflect the unique goals of each project, and while they share similarities, their specific strengths and emphases cater to different use cases and preferences within the BSD ecosystem.
-[[floppy-download]]
-=== Which file do I download to get FreeBSD?
+[[freebsd-linux-distribution]]
+=== Is FreeBSD a Linux(R) distribution?
-On the https://www.freebsd.org/where/[Getting FreeBSD] page, select `[iso]` next to the architecture that matches the hardware.
+No, FreeBSD is *not* a Linux distribution.
-Any of the following can be used:
+While both FreeBSD and Linux are UNIX-like operating systems and share many similarities, they have distinct kernels.
+Linux uses the Linux kernel, whereas FreeBSD uses the FreeBSD kernel, which is based on the Berkeley Software Distribution (BSD) UNIX operating system.
-[.informaltable]
-[cols="1,1", frame="none", options="header"]
-|===
-| file
-| description
+FreeBSD and Linux each have their own unique development communities, release cycles, and system architectures, making them separate and independent operating systems.
-|[.filename]#disc1.iso#
-|Contains enough to install FreeBSD and a minimal set of packages.
+FreeBSD provides its own set of advantages, including a different licensing model, system design, and userland utilities compared to Linux distributions.
-|[.filename]#dvd1.iso#
-|Similar to [.filename]#disc1.iso# but with additional packages.
+[[run-linux-programs-freebsd]]
+=== Is it possible to run Linux programs on FreeBSD?
-|[.filename]#memstick.img#
-|A bootable image sufficient for writing to a USB stick.
+Yes, FreeBSD provides a compatibility layer known as _linuxulator_ (man:linux[4]), allowing many Linux programs to function on FreeBSD.
+This feature facilitates the execution of a broad spectrum of Linux binaries without the necessity of a dedicated Linux environment.
-|[.filename]#bootonly.iso#
-|A minimal image that requires network access during installation to completely install FreeBSD.
-|===
+Nevertheless, it's important to note that numerous widely used open-source software *have native FreeBSD versions available* through the ports and packages system.
-Full instructions on this procedure and a little bit more about installation issues in general can be found in the extref:{handbook}[Handbook entry on installing FreeBSD, bsdinstall].
+[[installing-freebsd]]
+== Installing FreeBSD
-[[floppy-image-too-large]]
-=== What do I do if the install image does not boot?
+The process of installing FreeBSD is the initial step toward harnessing the power of this robust open-source operating system.
+This section provides essential information on where to obtain FreeBSD, detailed installation instructions, and insights into concepts like FreeBSD-CURRENT and FreeBSD-STABLE.
+It also delves into the release and snapshot schedules, post-installation configuration tools, package search methods, and addresses common questions regarding package updates.
-This can be caused by not downloading the image in _binary_ mode when using FTP.
+[[where-get]]
+=== Where can I get FreeBSD?
-Some FTP clients default their transfer mode to _ascii_ and attempt to change any end-of-line characters received to match the conventions used by the client's system.
-This will almost invariably corrupt the boot image.
-Check the SHA-256 checksum of the downloaded boot image: if it is not _exactly_ that on the server, then the download process is suspect.
+FreeBSD is freely available for download from the link:https://www.FreeBSD.org/where/[official FreeBSD website].
-When using a command line FTP client, type _binary_ at the FTP command prompt after getting connected to the server and before starting the download of the image.
+Additionally, FreeBSD may also be available through various mirror sites, ensuring accessibility to users worldwide.
+The link:https://www.FreeBSD.org/where/[official website] is the primary and most reliable source for obtaining the latest FreeBSD releases and updates, making it the ideal starting point for a FreeBSD journey.
[[install-instructions-location]]
=== Where are the instructions for installing FreeBSD?
-Installation instructions can be found at extref:{handbook}[Handbook entry on installing FreeBSD, bsdinstall].
-
-[[custom-boot-floppy]]
-=== How can I make my own custom release or install disk?
-
-Customized FreeBSD installation media can be created by building a custom release.
-Follow the instructions in the extref:{releng}[Release Engineering] article.
-
-[[windows-coexist]]
-=== Can Windows(R) co-exist with FreeBSD? (x86-specific)
-
-If Windows(R) is installed first, then yes.
-FreeBSD's boot manager will then manage to boot Windows(R) and FreeBSD.
-If Windows(R) is installed afterwards, it will overwrite the boot manager.
-If that happens, see the next section.
-
-[[bootmanager-restore]]
-=== Another operating system destroyed my Boot Manager. How do I get it back? (x86-specific)
-
-This depends upon the boot manager.
-The FreeBSD boot selection menu can be reinstalled using man:boot0cfg[8].
-For example, to restore the boot menu onto the disk _ada0_:
-
-[source,shell]
-....
-# boot0cfg -B ada0
-....
-
-The non-interactive MBR bootloader can be installed using man:gpart[8]:
-
-[source,shell]
-....
-# gpart bootcode -b /boot/mbr ada0
-....
-
-For more complex situations, including GPT disks, see man:gpart[8].
-
-[[need-complete-sources]]
-=== Do I need to install the source?
-
-In general, no.
-There is nothing in the base system which requires the presence of the source to operate.
-Some ports, like package:sysutils/lsof[], will not build unless the source is installed.
-In particular, if the port builds a kernel module or directly operates on kernel structures, the source must be installed.
+Installation instructions can be found at the extref:{handbook}bsdinstall/[Installing FreeBSD Chapter of the Handbook].
-[[need-kernel]]
-=== Do I need to build a kernel?
-
-Usually not.
-The supplied `GENERIC` kernel contains the drivers an ordinary computer will need.
-man:freebsd-update[8], the FreeBSD binary upgrade tool, cannot upgrade custom kernels,
-another reason to stick with the `GENERIC` kernel when possible.
-For computers with very limited RAM, such as embedded systems,
-it may be worthwhile to build a smaller custom kernel containing just the required drivers.
+[[current]]
+=== What is the FreeBSD-CURRENT concept?
-[[password-encryption]]
-=== Should I use DES, Blowfish, or MD5 passwords and how do I specify which form my users receive?
+FreeBSD-CURRENT represents the development branch of the FreeBSD operating system.
+It is the most cutting-edge version of FreeBSD, where active development takes place.
-FreeBSD uses _SHA512_ by default.
-DES passwords are still available for backwards compatibility with operating systems that still use the less secure password format.
-FreeBSD also supports the Blowfish and MD5 password formats.
-Which password format to use for new passwords is controlled by the `passwd_format` login capability in [.filename]#/etc/login.conf#,
-which takes values of `des`, `blf` (if these are available) or `md5`.
-See the man:login.conf[5] manual page for more information about login capabilities.
+While it incorporates the latest features, improvements, and experimental changes, it may not always be as stable as the FreeBSD-STABLE or release versions.
-[[ffs-limits]]
-=== What are the limits for FFS file systems?
+FreeBSD-CURRENT serves as a platform for developers and enthusiasts who want to contribute to the future of FreeBSD and stay on the leading edge of its development, even though it may occasionally undergo significant changes and *is not recommended for production systems*.
-For FFS file systems, the largest file system is practically limited by the amount of memory required to man:fsck[8] the file system.
-man:fsck[8] requires one bit per fragment, which with the default fragment size of 4 KB equates to 32 MB of memory per TB of disk.
-This does mean that on architectures which limit userland processes to 2 GB (e.g., i386(TM)), the maximum man:fsck[8]'able filesystem is ~60 TB.
+[[stable]]
+=== What is the FreeBSD-STABLE concept?
-If there was not a man:fsck[8] memory limit the maximum filesystem size would be 2 ^ 64 (blocks) * 32 KB => 16 Exa * 32 KB => 512 ZettaBytes.
+The FreeBSD-STABLE branch is a more stable development branch compared to CURRENT.
+It contains code that is undergoing further testing and refinement before being merged into the RELEASE branch.
+STABLE is a good choice for those who want to track FreeBSD's development but prefer a more stable environment than CURRENT.
-The maximum size of a single FFS file is approximately 2 PB with the default block size of 32 KB.
-Each 32 KB block can point to 4096 blocks.
-With triple indirect blocks, the calculation is 32 KB * 12 + 32 KB * 4096 + 32 KB * 4096^2 + 32 KB * 4096^3.
-Increasing the block size to 64 KB will increase the max file size by a factor of 16.
+[[release-freq]]
+=== When are FreeBSD releases made of?
-[[archsw-readin-failed-error]]
-=== Why do I get an error message, readin failed after compiling and booting a new kernel?
+The {re} releases a new major version of FreeBSD about every 18 months and a new minor version about every 8 months, on average.
+Release dates are announced well in advance, so that the people working on the system know when their projects need to be finished and tested.
+A testing period precedes each release, to ensure that the addition of new features does not compromise the stability of the release.
-The world and kernel are out of sync.
-This is not supported.
-Be sure to use `make buildworld` and `make buildkernel` to update the kernel.
+[[snapshot-freq]]
+=== When are FreeBSD snapshots made?
-Boot the system by specifying the kernel directly at the second stage, pressing any key when the `|` shows up before loader is started.
+FreeBSD snapshots are typically generated at regular intervals for all actively developed branches.
+These snapshots capture a moment in time of the FreeBSD source code and associated binary packages.
+The frequency of these snapshots may vary but is often done on a weekly or bi-weekly basis.
+These snapshots provide users with an opportunity to access the latest developments and changes in FreeBSD, helping them stay up-to-date with the project's progress.
[[general-configuration-tool]]
=== Is there a tool to perform post-installation configuration tasks?
-Yes.
-bsdconfig provides a nice interface to configure FreeBSD post-installation.
-
-[[hardware]]
-== Hardware Compatibility
-
-[[compatibility-general]]
-=== General
-
-[[which-hardware-to-get]]
-==== I want to get a piece of hardware for my FreeBSD system. Which model/brand/type is best?
-
-This is discussed continually on the FreeBSD mailing lists but is to be expected since hardware changes so quickly.
-Read through the Hardware Notes for FreeBSD link:{u-rel123-hardware}[{rel123-current}] or link:{u-rel131-hardware}[{rel131-current}] and search the https://www.FreeBSD.org/search/#mailinglists[mailing list archives] before asking about the latest and greatest hardware.
-Chances are a discussion about that type of hardware took place just last week.
+Yes. man:bsdconfig[8] provides a nice interface to configure FreeBSD post-installation.
-Before purchasing a laptop, check the archives for {freebsd-questions},
-or possibly a specific mailing list for a particular hardware type.
+[[search-software-freebsd]]
+=== How can I search for software to install in FreeBSD?
-[[memory-upper-limitation]]
-==== What are the limits for memory?
-
-FreeBSD as an operating system generally supports as much physical memory (RAM) as the platform it is running on does.
-Keep in mind that different platforms have different limits for memory;
-for example i386(TM) without PAE supports at most 4 GB of memory (and usually less than that because of PCI address space) and i386(TM) with PAE supports at most 64 GB memory.
-As of FreeBSD 10, AMD64 platforms support up to 4 TB of physical memory.
-
-[[memory-i386-over-4gb]]
-==== Why does FreeBSD report less than 4 GB memory when installed on an i386(TM) machine?
-
-The total address space on i386(TM) machines is 32-bit, meaning that at most 4 GB of memory is addressable (can be accessed).
-Furthermore, some addresses in this range are reserved by hardware for different purposes,
-for example for using and controlling PCI devices, for accessing video memory, and so on.
-Therefore, the total amount of memory usable by the operating system for its kernel and applications is limited to significantly less than 4 GB.
-Usually, 3.2 GB to 3.7 GB is the maximum usable physical memory in this configuration.
-
-To access more than 3.2 GB to 3.7 GB of installed memory (meaning up to 4 GB but also more than 4 GB),
-a special tweak called PAE must be used.
-PAE stands for Physical Address Extension and is a way for 32-bit x86 CPUs to address more than 4 GB of memory.
-It remaps the memory that would otherwise be overlaid by address reservations for hardware devices above the 4 GB range and uses it as additional physical memory (see man:pae[4]).
-Using PAE has some drawbacks; this mode of memory access is a little bit slower than the normal (without PAE) mode and loadable modules (see man:kld[4]) are not supported.
-This means all drivers must be compiled into the kernel.
-
-The most common way to enable PAE is to build a new kernel with the special ready-provided kernel configuration file called [.filename]#PAE#,
-which is already configured to build a safe kernel.
-Note that some entries in this kernel configuration file are too conservative and some drivers marked as unready to be used with PAE are actually usable.
-A rule of thumb is that if the driver is usable on 64-bit architectures (like AMD64), it is also usable with PAE.
-When creating a custom kernel configuration file, PAE can be enabled by adding the following line:
-
-[.programlisting]
-....
-options PAE
-....
+Searching for software to install in FreeBSD is made easy through the man:pkg[8] package manager and the `pkg search` command.
-PAE is not much used nowadays because most new x86 hardware also supports running in 64-bit mode, known as AMD64 or Intel(R) 64.
-It has a much larger address space and does not need such tweaks.
-FreeBSD supports AMD64 and it is recommended that this version of FreeBSD be used instead of the i386(TM) version if 4 GB or more memory is required.
+Users can utilize this command to search for available packages using keywords, package names, or descriptions.
+This feature helps users quickly locate the software they need within the extensive FreeBSD ports and packages collection, simplifying the process of adding new applications and tools to their FreeBSD systems.
-[[compatibility-processors]]
-=== Architectures and Processors
+[[latest-packages-freebsd]]
+=== Why am I not getting the latest packages in my FreeBSD system?
-[[architectures]]
-==== Does FreeBSD support architectures other than the x86?
+The availability of the latest packages in FreeBSD can be influenced by various factors, including the package repository's update frequency and the specific version of FreeBSD being used.
-Yes.
-FreeBSD divides support into multiple tiers.
-Tier 1 architectures, such as i386 or amd64; are fully supported.
-Tiers 2 and 3 are supported on a best-effort basis.
-A full explanation of the tier system is available in the extref:{committers-guide}[Committer's Guide., archs]
+It should also be added that there are two branches for the FreeBSD ports.
+The most updated is called `latest` and the most stable is called `quarterly`.
+To use the latest packages it will be necessary to configure the `latest` branch.
+Information on how to configure branches can be found in the link:{handbook}ports/[Ports chapter of the Handbook].
-A complete list of supported architectures can be found on the https://www.FreeBSD.org/platforms/[platforms page.]
-
-[[smp-support]]
-==== Does FreeBSD support Symmetric Multiprocessing (SMP)?
-
-FreeBSD supports symmetric multi-processor (SMP) on all non-embedded platforms (e.g, i386, amd64, etc.).
-SMP is also supported in arm and MIPS kernels, although some CPUs may not support this.
-FreeBSD's SMP implementation uses fine-grained locking, and performance scales nearly linearly with number of CPUs.
-
-man:smp[4] has more details.
-
-[[microcode]]
-==== What is microcode? How do I install Intel(R) CPU microcode updates?
-
-Microcode is a method of programmatically implementing hardware level instructions.
-This allows for CPU bugs to be fixed without replacing the on board chip.
-
-Install package:sysutils/devcpu-data[], then add:
-
-[.programlisting]
-....
-microcode_update_enable="YES"
-....
-
-to [.filename]#/etc/rc.conf#
-
-[[compatibility-peripherals]]
-=== Peripherals
-
-[[supported-peripherals]]
-==== What kind of peripherals does FreeBSD support?
-
-See a list of hardware known to work and any applicable restrictions in the Hardware Notes for FreeBSD link:{u-rel123-hardware}[{rel123-current}] or link:{u-rel131-hardware}[{rel131-current}].
-
-[[compatibility-kbd-mice]]
-=== Keyboards and Mice
-
-[[moused]]
-==== Is it possible to use a mouse outside the X Window system?
-
-The default console driver, man:vt[4], provides the ability to use a mouse pointer in text consoles to cut & paste text.
-Run the mouse daemon, man:moused[8], and turn on the mouse pointer in the virtual console:
-
-[source,shell]
-....
-# moused -p /dev/xxxx -t yyyy
-# vidcontrol -m on
-....
-
-Where _xxxx_ is the mouse device name and _yyyy_ is a protocol type for the mouse.
-The mouse daemon can automatically determine the protocol type of most mice, except old serial mice.
-Specify the `auto` protocol to invoke automatic detection.
-If automatic detection does not work, see the man:moused[8] manual page for a list of supported protocol types.
-
-For a PS/2 mouse, add `moused_enable="YES"` to [.filename]#/etc/rc.conf# to start the mouse daemon at boot time.
-Additionally, to use the mouse daemon on all virtual terminals instead of just the console, add `allscreens_flags="-m on"` to [.filename]#/etc/rc.conf#.
-
-When the mouse daemon is running, access to the mouse must be coordinated between the mouse daemon and other programs such as X Windows.
-Refer to the FAQ <<x-and-moused,Why does my mouse not work with X?>> for more details on this issue.
-
-[[text-mode-cut-paste]]
-==== How do I cut and paste text with a mouse in the text console?
-
-It is not possible to remove data using the mouse.
-However, it is possible to copy and paste.
-Once the mouse daemon is running as described in the <<moused,previous question>>,
-hold down button 1 (left button) and move the mouse to select a region of text.
-Then, press button 2 (middle button) to paste it at the text cursor.
-Pressing button 3 (right button) will "extend" the selected region of text.
-
-If the mouse does not have a middle button, it is possible to emulate one or remap buttons using mouse daemon options.
-See the man:moused[8] manual page for details.
-
-[[mouse-wheel-buttons]]
-==== My mouse has a fancy wheel and buttons. Can I use them in FreeBSD?
-
-The answer is, unfortunately, "It depends".
-These mice with additional features require specialized driver in most cases.
-Unless the mouse device driver or the user program has specific support for the mouse,
-it will act just like a standard two, or three button mouse.
-
-For the possible usage of wheels in the X Window environment, refer to <<x-and-wheel,that section>>.
-
-[[keyboard-delete-key]]
-==== How do I use my delete key in sh and csh?
-
-For the Bourne Shell, add the following lines to [.filename]#~/.shrc#.
-See man:sh[1] and man:editrc[5].
-
-[.programlisting]
-....
-bind ^[[3~ ed-delete-next-char # for xterm
-....
-
-For the C Shell, add the following lines to [.filename]#~/.cshrc#.
-See man:csh[1].
-
-[.programlisting]
-....
-bindkey ^[[3~ delete-char # for xterm
-....
-
-[[compatibility-other]]
-=== Other Hardware
-
-[[es1370-silent-pcm]]
-==== Workarounds for no sound from my man:pcm[4] sound card?
-
-Some sound cards set their output volume to 0 at every boot.
-On FreeBSD 13 and earlier, run the following command every time the machine boots:
-
-[source,shell]
-....
-# mixer pcm 100 vol 100 cd 100
-....
-
-Use the following command on FreeBSD 14 and later:
-
-[source,shell]
-....
-# mixer pcm.volume=100 vol.volume=100 cd.volume=100
-....
-
-[[power-management-support]]
-==== Does FreeBSD support power management on my laptop?
-
-FreeBSD supports the ACPI features found in modern hardware.
-Further information can be found in man:acpi[4].
-
-[[troubleshoot]]
-== Troubleshooting
-
-[[pae]]
-=== Why is FreeBSD finding the wrong amount of memory on i386(TM) hardware?
-
-The most likely reason is the difference between physical memory addresses and virtual addresses.
-
-The convention for most PC hardware is to use the memory area between 3.5 GB and 4 GB for a special purpose (usually for PCI).
-This address space is used to access PCI hardware.
-As a result real, physical memory cannot be accessed by that address space.
-
-What happens to the memory that should appear in that location is hardware dependent.
-Unfortunately, some hardware does nothing and the ability to use that last 500 MB of RAM is entirely lost.
-
-Luckily, most hardware remaps the memory to a higher location so that it can still be used.
-However, this can cause some confusion when watching the boot messages.
-
-On a 32-bit version of FreeBSD, the memory appears lost, since it will be remapped above 4 GB, which a 32-bit kernel is unable to access.
-In this case, the solution is to build a PAE enabled kernel.
-See the entry on memory limits for more information.
-
-On a 64-bit version of FreeBSD, or when running a PAE-enabled kernel, FreeBSD will correctly detect and remap the memory so it is usable.
-During boot, however, it may seem as if FreeBSD is detecting more memory than the system really has, due to the described remapping.
-This is normal and the available memory will be corrected as the boot process completes.
-
-[[signal11]]
-=== Why do my programs occasionally die with Signal 11 errors?
-
-Signal 11 errors are caused when a process has attempted to access memory which the operating system has not granted it access to.
-If something like this is happening at seemingly random intervals, start investigating the cause.
-
-These problems can usually be attributed to either:
-
-. If the problem is occurring only in a specific custom application, it is probably a bug in the code.
-. If it is a problem with part of the base FreeBSD system, it may also be buggy code, but more often than not these problems are found and fixed long before us general FAQ readers get to use these bits of code (that is what -CURRENT is for).
-
-It is probably not a FreeBSD bug if the problem occurs compiling a program, but the activity that the compiler is carrying out changes each time.
-
-For example, if `make buildworld` fails while trying to compile [.filename]#ls.c# into [.filename]#ls.o# and, when run again, it fails in the same place, this is a broken build.
-Try updating source and try again.
-If the compile fails elsewhere, it is almost certainly due to hardware.
-
-In the first case, use a debugger such as man:gdb[1] to find the point in the program which is attempting to access a bogus address and fix it.
-
-In the second case, verify which piece of hardware is at fault.
-
-Common causes of this include:
-
-. The hard disks might be overheating: Check that the fans are still working, as the disk and other hardware might be overheating.
-. The processor running is overheating: This might be because the processor has been overclocked, or the fan on the processor might have died. In either case, ensure that the hardware is running at what it is specified to run at, at least while trying to solve this problem. If it is not, clock it back to the default settings.)
-+
-Regarding overclocking, it is far cheaper to have a slow system than a fried system that needs replacing! Also the community is not sympathetic to problems on overclocked systems.
-. Dodgy memory: if multiple memory SIMMS/DIMMS are installed, pull them all out and try running the machine with each SIMM or DIMM individually to narrow the problem down to either the problematic DIMM/SIMM or perhaps even a combination.
-. Over-optimistic motherboard settings: the BIOS settings, and some motherboard jumpers, provide options to set various timings. The defaults are often sufficient, but sometimes setting the wait states on RAM too low, or setting the "RAM Speed: Turbo" option will cause strange behavior. A possible idea is to set to BIOS defaults, after noting the current settings first.
-. Unclean or insufficient power to the motherboard. Remove any unused I/O boards, hard disks, or CD-ROMs, or disconnect the power cable from them, to see if the power supply can manage a smaller load. Or try another power supply, preferably one with a little more power. For instance, if the current power supply is rated at 250 Watts, try one rated at 300 Watts.
-
-Read the section on <<signal11,Signal 11>> for a further explanation and a discussion on how memory testing software or hardware can still pass faulty memory.
-There is an extensive FAQ on this at http://www.bitwizard.nl/sig11/[the SIG11 problem FAQ].
-
-Finally, if none of this has helped, it is possibly a bug in FreeBSD.
-Follow <<access-pr,these instructions>> to send a problem report.
-
-[[trap-12-panic]]
-=== My system crashes with either Fatal trap 12: page fault in kernel mode, or panic:, and spits out a bunch of information. What should I do?
-
-The FreeBSD developers are interested in these errors, but need more information than just the error message.
-Copy the full crash message.
-Then consult the FAQ section on <<kernel-panic-troubleshooting,kernel panics>>, build a debugging kernel, and get a backtrace.
-This might sound difficult, but does not require any programming skills.
-Just follow the instructions.
-
-[[proc-table-full]]
-=== What is the meaning of the error maxproc limit exceeded by uid %i, please see tuning(7) and login.conf(5)?
-
-The FreeBSD kernel will only allow a certain number of processes to exist at one time.
-The number is based on the `kern.maxusers` man:sysctl[8] variable.
-`kern.maxusers` also affects various other in-kernel limits, such as network buffers.
-If the machine is heavily loaded, increase `kern.maxusers`.
-This will increase these other system limits in addition to the maximum number of processes.
-
-To adjust the `kern.maxusers` value, see the extref:{handbook}[File/Process Limits, kern-maxfiles] section of the Handbook.
-While that section refers to open files, the same limits apply to processes.
-
-If the machine is lightly loaded but running a very large number of processes, adjust the `kern.maxproc` tunable by defining it in [.filename]#/boot/loader.conf#.
-The tunable will not get adjusted until the system is rebooted.
-For more information about tuning tunables, see man:loader.conf[5].
-If these processes are being run by a single user, adjust `kern.maxprocperuid` to be one less than the new `kern.maxproc` value.
-It must be at least one less because one system program, man:init[8], must always be running.
-
-[[remote-fullscreen]]
-=== Why do full screen applications on remote machines misbehave?
-
-The remote machine may be setting the terminal type to something other than `xterm` which is required by the FreeBSD console.
-Alternatively the kernel may have the wrong values for the width and height of the terminal.
-
-Check the value of the `TERM` environment variable is `xterm`.
-If the remote machine does not support that try `vt100`.
-
-Run `stty -a` to check what the kernel thinks the terminal dimensions are.
-If they are incorrect, they can be changed by running `stty rows _RR_ cols _CC_`.
-
-Alternatively, if the client machine has package:x11/xterm[] installed,
-then running `resize` will query the terminal for the correct dimensions and set them.
-
-[[connection-delay]]
-=== Why does it take so long to connect to my computer via ssh or telnet?
-
-The symptom: there is a long delay between the time the TCP connection is established and the time when the client software asks for a password (or, in man:telnet[1]'s case, when a login prompt appears).
-
-The problem: more likely than not, the delay is caused by the server software trying to resolve the client's IP address into a hostname.
-Many servers, including the Telnet and SSH servers that come with FreeBSD,
-do this to store the hostname in a log file for future reference by the administrator.
-
-The remedy: if the problem occurs whenever connecting the client computer to any server, the problem is with the client.
-If the problem only occurs when someone connects to the server computer, the problem is with the server.
-
-If the problem is with the client, the only remedy is to fix the DNS so the server can resolve it.
-If this is on a local network, consider it a server problem and keep reading.
-If this is on the Internet, contact your ISP.
-
-If the problem is with the server on a local network, configure the server to resolve address-to-hostname queries for the local address range.
-See man:hosts[5] and man:named[8] for more information.
-If this is on the Internet, the problem may be that the local server's resolver is not functioning correctly.
-To check, try to look up another host such as `www.yahoo.com`.
-If it does not work, that is the problem.
-
-Following a fresh install of FreeBSD, it is also possible that domain and name server information is missing from [.filename]#/etc/resolv.conf#.
-This will often cause a delay in SSH, as the option `UseDNS` is set to `yes` by default in [.filename]#/etc/ssh/sshd_config#.
-If this is causing the problem, either fill in the missing information in [.filename]#/etc/resolv.conf# or set `UseDNS` to `no` in [.filename]#sshd_config# as a temporary workaround.
-
-[[file-table-full]]
-=== Why does file: table is full show up repeatedly in man:dmesg[8]?
-
-This error message indicates that the number of available file descriptors have been exhausted on the system.
-Refer to the extref:{handbook}[kern.maxfiles, kern-maxfiles] section of the extref:{handbook}[Tuning Kernel Limits, configtuning-kernel-limits] section of the Handbook for a discussion and solution.
-
-[[computer-clock-skew]]
-=== Why does the clock on my computer keep incorrect time?
+[[hardware]]
+== Hardware
-The computer has two or more clocks, and FreeBSD has chosen to use the wrong one.
+The Hardware section explores FreeBSD's compatibility with various hardware configurations.
+It covers a range of topics, including supported architectures, maximum RAM capacity, processor scalability, graphics card compatibility, Wi-Fi card support, and the inclusion of 10 Gigabit Ethernet network card support.
+Whether planning to deploy FreeBSD on servers, workstations, or specialized hardware, this section provides insights into FreeBSD's capabilities and limitations, offering information about hardware choices and configurations.
-Run man:dmesg[8], and check for lines that contain `Timecounter`.
-The one with the highest quality value that FreeBSD chose.
+[[architectures-support]]
+=== What architectures does FreeBSD support?
-[source,shell]
-....
-# dmesg | grep Timecounter
-Timecounter "i8254" frequency 1193182 Hz quality 0
-Timecounter "ACPI-fast" frequency 3579545 Hz quality 1000
-Timecounter "TSC" frequency 2998570050 Hz quality 800
-Timecounters tick every 1.000 msec
-....
+FreeBSD boasts a versatile range of supported architectures, making it a flexible choice for a variety of hardware environments.
+Its compatibility extends to architectures such as `amd64`, `arm64`, `riscv` and more.
-Confirm this by checking the `kern.timecounter.hardware` man:sysctl[3].
+A complete list of supported architectures can be found on the link:https://www.FreeBSD.org/platforms/[platforms page].
-[source,shell]
-....
-# sysctl kern.timecounter.hardware
-kern.timecounter.hardware: ACPI-fast
-....
+[[ram-support]]
+=== How much RAM does FreeBSD support?
-It may be a broken ACPI timer.
-The simplest solution is to disable the ACPI timer in [.filename]#/boot/loader.conf#:
+FreeBSD as an operating system generally supports as much physical memory (RAM) as the platform it is running on does.
+Keep in mind that different platforms have different limits for memory.
-[.programlisting]
-....
-debug.acpi.disabled="timer"
-....
+For example, `amd64` platforms support up to 4TB of physical memory.
-Or the BIOS may modify the TSC clock-perhaps to change the speed of the processor when running from batteries,
-or going into a power saving mode, but FreeBSD is unaware of these adjustments, and appears to gain or lose time.
+[[cpu-support]]
+=== How many processors does FreeBSD support?
-In this example, the `i8254` clock is also available, and can be selected by writing its name to the `kern.timecounter.hardware` man:sysctl[3].
+FreeBSD's processor support varies across different architectures.
+On amd64 and arm64 systems, FreeBSD can efficiently harness the power of up to 1024 processors.
+For powerpc-based systems, FreeBSD supports up to 256 processors, while on risc-v systems, it can effectively utilize up to 16 processors.
-[source,shell]
-....
-# sysctl kern.timecounter.hardware=i8254
-kern.timecounter.hardware: TSC -> i8254
-....
+[[graphics-cards-support]]
+=== What graphics cards does FreeBSD support?
-The computer should now start keeping more accurate time.
+Popular graphics vendors like Intel(R), AMD(R) or NVIDIA(R) are well-supported.
-To have this change automatically run at boot time, add the following line to [.filename]#/etc/sysctl.conf#:
+A list of supported graphics cards from link:https://wiki.freebsd.org/Graphics/Intel-GPU-Matrix[Intel] and link:https://wiki.freebsd.org/Graphics/AMD-GPU-Matrix[AMD] can be found in the FreeBSD Wiki.
-[.programlisting]
-....
-kern.timecounter.hardware=i8254
-....
+[[wifi-support]]
+=== What Wi-Fi cards does FreeBSD support?
-[[indefinite-wait-buffer]]
-=== What does the error swap_pager: indefinite wait buffer: mean?
+Discover FreeBSD's compatibility with various Wi-Fi cards, making it easy to connect your system to wireless networks.
-This means that a process is trying to page memory from disk, and the page attempt has hung trying to access the disk for more than 20 seconds.
-It might be caused by bad blocks on the disk drive, disk wiring, cables, or any other disk I/O-related hardware.
-If the drive itself is bad, disk errors will appear in [.filename]#/var/log/messages# and in the output of `dmesg`.
-Otherwise, check the cables and connections.
+The list of USB Wi-Fi devices that are known to work well on FreeBSD:
-[[lock-order-reversal]]
-=== What is a lock order reversal?
+* RT5370 USB dongles (supports hostap mode)
+* TP-Link TL-WDN3200 (RT5592, man:if_run[4])
+* TP-Link TL-WN725N v2 (RTL8188EU, man:rtwn[4])
+* TP-Link Archer T4U (RTL8812AU, man:rtwn[4])
+* D-Link DWA-131 (RTL8192CU, man:rtwn[4])
+* D-Link DWA-171 rev A1 (RTL8821AU, man:rtwn[4])
+* ASUS USB-N10 NANO (RTL8188CUS, man:rtwn[4])
-The FreeBSD kernel uses a number of resource locks to arbitrate contention for certain resources.
-When multiple kernel threads try to obtain multiple resource locks, there's always the potential for a deadlock,
-where two threads have each obtained one of the locks and blocks forever waiting for the other thread to release one of the other locks.
-This sort of locking problem can be avoided if all threads obtain the locks in the same order.
+The list of Mini PCIe Wi-Fi devices that are known to work well on FreeBSD:
-A run-time lock diagnostic system called man:witness[4], enabled in FreeBSD-CURRENT and disabled by default for stable branches and releases,
-detects the potential for deadlocks due to locking errors, including errors caused by obtaining multiple resource locks with a different order from different parts of the kernel.
-The man:witness[4] framework tries to detect this problem as it happens,
-and reports it by printing a message to the system console about a `lock order reversal` (often referred to also as LOR).
+* Realtek RTL8188CE Mini PCIe
-It is possible to get false positives, as man:witness[4] is conservative.
-A true positive report _does not_ mean that a system is dead-locked;
-instead it should be understood as a warning that a deadlock could have happened here.
+[[gigabit-ethernet-network-support]]
+=== Does FreeBSD support 10 Gigabit Ethernet network cards?
-[NOTE]
-====
-Problematic LORs tend to get fixed quickly, so check the {freebsd-current} before posting to it.
-====
+FreeBSD provides robust support for 10 Gigabit Ethernet network cards, making it a viable choice for high-speed networking environments.
+The FreeBSD kernel includes drivers for a wide range of 10 Gigabit Ethernet adapters from various manufacturers, ensuring seamless integration and optimal network performance.
-[[called-with-non-sleepable-locks-held]]
-=== What does Called ... with the following non-sleepable locks held mean?
+More information can be obtained at the link:https://wiki.freebsd.org/Networking/10GbE[FreeBSD Wiki].
-This means that a function that may sleep was called while a mutex (or other unsleepable) lock was held.
+[[documentation-support]]
+== Documentation and Support
-The reason this is an error is because mutexes are not intended to be held for long periods of time;
-they are supposed to only be held to maintain short periods of synchronization.
-This programming contract allows device drivers to use mutexes to synchronize with the rest of the kernel during interrupts.
-Interrupts (under FreeBSD) may not sleep.
-Hence it is imperative that no subsystem in the kernel block for an extended period while holding a mutex.
+This section provides valuable resources for those seeking to deepen their knowledge of FreeBSD.
+It covers a range of topics, including recommended books for learning FreeBSD, avenues for commercial training and support, insights into understanding FreeBSD's internals, and where to find assistance within the FreeBSD community.
-To catch such errors, assertions may be added to the kernel that interact with the man:witness[4] subsystem to emit a warning or fatal error (depending on the system configuration) when a potentially blocking call is made while holding a mutex.
+[[books]]
+=== What good books are there about FreeBSD?
-In summary, such warnings are non-fatal,
-however with unfortunate timing they could cause undesirable effects ranging from a minor blip in the system's responsiveness to a complete system lockup.
+FreeBSD enthusiasts and learners can explore a variety of informative books dedicated to the operating system.
+These books cover topics ranging from FreeBSD basics to advanced system administration and development.
-For additional information about locking in FreeBSD see man:locking[9].
+Some notable titles include "Absolute FreeBSD: The Complete Guide To FreeBSD" by Michael W. Lucas, and the "FreeBSD Mastery series" also by Michael W. Lucas, among others.
+These resources offer valuable insights and knowledge to help users of all levels master FreeBSD and maximize its potential.
-[[touch-not-found]]
-=== Why does buildworld/installworld die with the message touch: not found?
+Apart from the books, The FreeBSD Project produces a wide range of documentation, available online in the link:https://docs.FreeBSD.org/[Documentation Portal].
-This error does not mean that the man:touch[1] utility is missing.
-The error is instead probably due to the dates of the files being set sometime in the future.
-If the CMOS clock is set to local time, run `adjkerntz -i` to adjust the kernel clock when booting into single-user mode.
+[[training]]
+=== Where can I get commercial FreeBSD training and support?
-[[applications]]
-== User Applications
+For those seeking professional training and support for FreeBSD, several commercial providers offer tailored services.
+The FreeBSD project maintains a link:https://www.freebsd.org/commercial/[list of companies] from which support can be requested.
-[[user-apps]]
-=== Where are all the user applications?
+[[learn-advanced]]
+=== How can I learn more about FreeBSD's internals?
-Refer to link:https://www.FreeBSD.org/ports/[the ports page] for info on software packages ported to FreeBSD.
+To delve deeper into the inner workings of FreeBSD, interested individuals can explore resources like "The Design And Implementation Of The FreeBSD Operating System".
+The extref:{arch-handbook}[FreeBSD Architecture Handbook]. is another valuable resource that provides detailed information about FreeBSD's architecture, system organization, and design principles
-Most ports should work on all supported versions of FreeBSD.
-Those that do not are specifically marked as such.
-Each time a FreeBSD release is made, a snapshot of the ports tree at the time of release is also included in the [.filename]#ports/# directory.
+Additionally, reviewing the FreeBSD source code, available through the FreeBSD source repository, provides valuable insights into the operating system's core components.
-FreeBSD supports compressed binary packages to easily install and uninstall ports.
-Use man:pkg[7] to control the installation of packages.
+[[help-freebsd-system]]
+=== How can I get help in a FreeBSD system?
-[[how-do-download-ports-tree]]
-=== How do I download the Ports tree? Should I be using Git?
+Getting assistance within a FreeBSD system is straightforward.
+FreeBSD offers a wealth of built-in documentation, accessible through the man:man[1] command,
+which provides comprehensive information about various commands and system components.
-See crossref:handbook[ports-using-installation-methods,Installing the Ports Collection].
+Additionally, the extref:{handbook}[FreeBSD Handbook], available both online and locally on the system, serves as a valuable resource for in-depth guidance.
-[[ports-4x]]
-=== Why can I not build this port on my {rel2-relx} -, or {rel-relx} -STABLE machine?
+If specific issues arise, seeking help from the FreeBSD community via mailing lists, forums, or IRC can provide timely solutions and insights from experienced FreeBSD users and developers.
-If the installed FreeBSD version lags significantly behind _-CURRENT_ or _-STABLE_, update the Ports Collection using the instructions in extref:{handbook}[Using the Ports Collection, ports-using].
-If the system is up-to-date, someone might have committed a change to the port which works for _-CURRENT_ but which broke the port for _-STABLE_.
-https://bugs.FreeBSD.org/submit/[Submit] a bug report, since the Ports Collection is supposed to work for both the _-CURRENT_ and _-STABLE_ branches.
+[[community-questions]]
+== Community Questions
-[[make-index]]
-=== I just tried to build INDEX using make index, and it failed. Why?
+Explore this section to discover ways to engage with the FreeBSD community.
-First, make sure that the Ports Collection is up-to-date.
-Errors that affect building [.filename]#INDEX# from an up-to-date copy of the Ports Collection are high-visibility and are thus almost always fixed immediately.
+Learn about FreeBSD IRC channels for real-time discussions, web-based forums for sharing insights,
+and access to FreeBSD mailing lists and news groups for in-depth discussions and news updates.
-There are rare cases where [.filename]#INDEX# will not build due to odd cases involving `OPTIONS_SET` being set in [.filename]#make.conf#.
-If you suspect that this is the case, try to make [.filename]#INDEX# with those variables turned off before reporting it to {freebsd-ports}.
+[[irc]]
+=== Are there FreeBSD IRC (Internet Relay Chat) channels?
-[[ports-update]]
-=== I updated the sources, now how do I update my installed ports?
+Yes, most major IRC networks host a FreeBSD chat channel and the FreeBSD wiki holds an up to date link:https://wiki.freebsd.org/IRC/Channels[list of IRC channels].
-FreeBSD does not include a port upgrading tool, but it does have some tools to make the upgrade process somewhat easier.
-Additional tools are available to simplify port handling and are described the extref:{handbook}[Upgrading Ports, ports-using] section in the FreeBSD Handbook.
+Each of these channels are distinct and are not connected to each other.
+Since their chat styles differ, try each to find one suited to your chat style.
-[[ports-major-upgrade]]
-=== Do I need to recompile every port each time I perform a major version update?
+[[forums]]
+=== Are there any web based forums to discuss FreeBSD?
-Yes! While a recent system will run with software compiled under an older release,
-things will randomly crash and fail to work once other ports are installed or updated.
+The official FreeBSD forums are located at the link:https://forums.FreeBSD.org/[FreeBSD Forums homepage].
-When the system is upgraded, various shared libraries, loadable modules, and other parts of the system will be replaced with newer versions.
-Applications linked against the older versions may fail to start or, in other cases, fail to function properly.
+[[mailing]]
+=== Where do I find info on the FreeBSD mailing lists?
-For more information, see extref:{handbook}[the section on upgrades, freebsdupdate-upgrade] in the FreeBSD Handbook.
+The public mailing lists can be found at the link:https://lists.freebsd.org/[FreeBSD mailing lists].
-[[ports-minor-upgrade]]
-=== Do I need to recompile every port each time I perform a minor version update?
+[[misc]]
+== Miscellaneous Questions
-In general, no. FreeBSD developers do their utmost to guarantee binary compatibility across all releases with the same major version number.
-Any exceptions will be documented in the Release Notes, and advice given there should be followed.
+Explore a variety of intriguing and practical queries about FreeBSD, covering topics from shell choices to system quirks and even the FreeBSD pet's name.
[[minimal-sh]]
=== Why is /bin/sh so minimal? Why does FreeBSD not use bash or another shell?
Many people need to write shell scripts which will be portable across many systems.
That is why POSIX(R) specifies the shell and utility commands in great detail.
-Most scripts are written in Bourne shell (man:sh[1]), and because several important programming interfaces (man:make[1], man:system[3], man:popen[3], and analogues in higher-level scripting languages like Perl and Tcl) are specified to use the Bourne shell to interpret commands.
+Most scripts are written in Bourne shell (man:sh[1]), and because several important programming interfaces are specified to use the Bourne shell to interpret commands.
As the Bourne shell is so often and widely used, it is important for it to be quick to start, be deterministic in its behavior, and have a small memory footprint.
The existing implementation is our best effort at meeting as many of these requirements simultaneously as we can.
To keep `/bin/sh` small, we have not provided many of the convenience features that other shells have.
-That is why other more featureful shells like `bash`, `scsh`, man:tcsh[1], and `zsh` are available.
-Compare the memory utilization of these shells by looking at the "VSZ" and "RSS" columns in a `ps -u` listing.
-
-[[kernelconfig]]
-== Kernel Configuration
-
-[[make-kernel]]
-=== I would like to customize my kernel. Is it difficult?
-
-Not at all! Check out the extref:{handbook}[kernel config section of the Handbook, kernelconfig].
-
-[NOTE]
-====
-The new [.filename]#kernel# will be installed to the [.filename]#/boot/kernel# directory along with its modules,
-while the old kernel and its modules will be moved to the [.filename]#/boot/kernel.old# directory.
-If a mistake is made in the configuration, simply boot the previous version of the kernel.
-====
-
-[[why-kernel-big]]
-=== Why is my kernel so big?
-
-`GENERIC` kernels shipped with FreeBSD are compiled in _debug mode_.
-Kernels built in debug mode contain debug data in separate files that are used for debugging.
-FreeBSD releases prior to 11.0 store these debug files in the same directory as the kernel itself, [.filename]#/boot/kernel/#.
-In FreeBSD 11.0 and later the debug files are stored in [.filename]#/usr/lib/debug/boot/kernel/#.
-Note that there will be little or no performance loss from running a debug kernel, and it is useful to keep one around in case of a system panic.
-
-When running low on disk space, there are different options to reduce the size of [.filename]#/boot/kernel/# and [.filename]#/usr/lib/debug/#.
-
-To not install the symbol files, make sure the following line exists in [.filename]#/etc/src.conf#:
-
-[.programlisting]
-....
-WITHOUT_KERNEL_SYMBOLS=yes
-....
-
-For more information see man:src.conf[5].
-
-If you want to avoid building debug files altogether, make sure that both of the following are true:
-
-* This line does not exist in the kernel configuration file:
-+
-[.programlisting]
-....
-makeoptions DEBUG=-g
-....
-
-* Do not run man:config[8] with `-g`.
-
-Either of the above settings will cause the kernel to be built in debug mode.
-
-To build and install only the specified modules, list them in [.filename]#/etc/make.conf#:
-
-[.programlisting]
-....
-MODULES_OVERRIDE= accf_http ipfw
-....
-
-Replace _accf_httpd ipfw_ with a list of needed modules.
-Only the listed modules will be built.
-This reduces the size of the kernel directory and decreases the amount of time needed to build the kernel.
-For more information, read [.filename]#/usr/share/examples/etc/make.conf#.
-
-Unneeded devices can be removed from the kernel to further reduce the size.
-See <<make-kernel>> for more information.
-
-To put any of these options into effect, follow the instructions to extref:{handbook}[build and install, kernelconfig-building] the new kernel.
-
-For reference, the FreeBSD 11 amd64 kernel ([.filename]#/boot/kernel/kernel#) is approximately 25 MB.
-
-[[generic-kernel-build-failure]]
-=== Why does every kernel I try to build fail to compile, even GENERIC?
-
-There are a number of possible causes for this problem:
-
-* The source tree is different from the one used to build the currently running system. When attempting an upgrade, read [.filename]#/usr/src/UPDATING#, paying particular attention to the "COMMON ITEMS" section at the end.
-* The `make buildkernel` did not complete successfully. The `make buildkernel` target relies on files generated by the `make buildworld` target to complete its job correctly.
-* Even when building <<stable,FreeBSD-STABLE>>, it is possible that the source tree was fetched at a time when it was either being modified or it was broken. Only releases are guaranteed to be buildable, although <<stable,FreeBSD-STABLE>> builds fine the majority of the time. Try re-fetching the source tree and see if the problem goes away. Try using a different mirror in case the previous one is having problems.
-
-[[scheduler-in-use]]
-=== Which scheduler is in use on a running system?
-
-The name of the scheduler currently being used is directly available as the value of the `kern.sched.name` sysctl:
-
-[source,shell]
-....
-% sysctl kern.sched.name
-kern.sched.name: ULE
-....
-
-[[scheduler-kern-quantum]]
-=== What is kern.sched.quantum?
-
-`kern.sched.quantum` is the maximum number of ticks a process can run without being preempted in the 4BSD scheduler.
-
-[[disks]]
-== Disks, File Systems, and Boot Loaders
-
-[[adding-disks]]
-=== How can I add my new hard disk to my FreeBSD system?
-
-See the extref:{handbook}[Adding Disks, disks-adding] section in the FreeBSD Handbook.
-
-[[new-huge-disk]]
-=== How do I move my system over to my huge new disk?
-
-The best way is to reinstall the operating system on the new disk, then move the user data over.
-This is highly recommended when tracking _-STABLE_ for more than one release or when updating a release instead of installing a new one.
-Install booteasy on both disks with man:boot0cfg[8] and dual boot until you are happy with the new configuration.
-Skip the next paragraph to find out how to move the data after doing this.
-
-Alternatively, partition and label the new disk with either man:sade[8] or man:gpart[8].
-If the disks are MBR-formatted, booteasy can be installed on both disks with man:boot0cfg[8] so that the computer can dual boot to the old or new system after the copying is done.
-
-Once the new disk set up, the data cannot just be copied.
-Instead, use tools that understand device files and system flags, such as man:dump[8].
-Although it is recommended to move the data while in single-user mode, it is not required.
-
-When the disks are formatted with UFS, never use anything but man:dump[8] and man:restore[8] to move the root file system.
-These commands should also be used when moving a single partition to another empty partition.
-The sequence of steps to use `dump` to move the data from one UFS partitions to a new partition is:
-
-[.procedure]
-====
-. `newfs` the new partition.
-. `mount` it on a temporary mount point.
-. `cd` to that directory.
-. `dump` the old partition, piping output to the new one.
-====
-
-For example, to move [.filename]#/dev/ada1s1a# with [.filename]#/mnt# as the temporary mount point, type:
-
-[source,shell]
-....
-# newfs /dev/ada1s1a
-# mount /dev/ada1s1a /mnt
-# cd /mnt
-# dump 0af - / | restore rf -
-....
-
-Rearranging partitions with `dump` takes a bit more work.
-To merge a partition like [.filename]#/var# into its parent, create the new partition large enough for both, move the parent partition as described above, then move the child partition into the empty directory that the first move created:
-
-[source,shell]
-....
-# newfs /dev/ada1s1a
-# mount /dev/ada1s1a /mnt
-# cd /mnt
-# dump 0af - / | restore rf -
-# cd var
-# dump 0af - /var | restore rf -
-....
-
-To split a directory from its parent, say putting [.filename]#/var# on its own partition when it was not before, create both partitions, then mount the child partition on the appropriate directory in the temporary mount point, then move the old single partition:
-
-[source,shell]
-....
-# newfs /dev/ada1s1a
-# newfs /dev/ada1s1d
-# mount /dev/ada1s1a /mnt
-# mkdir /mnt/var
-# mount /dev/ada1s1d /mnt/var
-# cd /mnt
-# dump 0af - / | restore rf -
-....
-
-The man:cpio[1] and man:pax[1] utilities are also available for moving user data.
-These are known to lose file flag information, so use them with caution.
-
-[[safe-softupdates]]
-=== Which partitions can safely use Soft Updates? I have heard that Soft Updates on / can cause problems. What about Journaled Soft Updates?
-
-Short answer: Soft Updates can usually be safely used on all partitions.
-
-Long answer: Soft Updates has two characteristics that may be undesirable on certain partitions.
-First, a Soft Updates partition has a small chance of losing data during a system crash.
-The partition will not be corrupted as the data will simply be lost.
-Second, Soft Updates can cause temporary space shortages.
-
-When using Soft Updates, the kernel can take up to thirty seconds to write changes to the physical disk.
-When a large file is deleted the file still resides on disk until the kernel actually performs the deletion.
-This can cause a very simple race condition.
-Suppose one large file is deleted and another large file is immediately created.
-The first large file is not yet actually removed from the physical disk, so the disk might not have enough room for the second large file.
-This will produce an error that the partition does not have enough space, even though a large chunk of space has just been released.
-A few seconds later, the file creation works as expected.
-
-If a system should crash after the kernel accepts a chunk of data for writing to disk, but before that data is actually written out, data could be lost.
-This risk is extremely small, but generally manageable.
-
-These issues affect all partitions using Soft Updates.
-So, what does this mean for the root partition?
-
-Vital information on the root partition changes very rarely.
-If the system crashed during the thirty-second window after such a change is made, it is possible that data could be lost.
-This risk is negligible for most applications, but be aware that it exists.
-If the system cannot tolerate this much risk, do not use Soft Updates on the root file system!
-
-[.filename]#/# is traditionally one of the smallest partitions.
-If [.filename]#/tmp# is on [.filename]#/#, there may be intermittent space problems.
-Symlinking [.filename]#/tmp# to [.filename]#/var/tmp# will solve this problem.
-
-Finally, man:dump[8] does not work in live mode (-L) on a filesystem, with Journaled Soft Updates (SU+J).
-
-[[mount-foreign-fs]]
-=== Can I mount other foreign file systems under FreeBSD?
-
-FreeBSD supports a variety of other file systems.
-
-UFS::
-UFS CD-ROMs can be mounted directly on FreeBSD.
-Mounting disk partitions from Digital UNIX and other systems that support UFS may be more complex,
-depending on the details of the disk partitioning for the operating system in question.
-
-ext2/ext3::
-FreeBSD supports `ext2fs`, `ext3fs`, and `ext4fs` partitions.
-See man:ext2fs[5] for more information.
-
-NTFS::
-FUSE based NTFS support is available as a port (package:sysutils/fusefs-ntfs[]).
-For more information, see man:ntfs-3g[8].
-
-FAT::
-FreeBSD includes a read-write FAT driver.
-For more information, see man:mount_msdosfs[8].
-
-ZFS::
-FreeBSD includes a port of Sun(TM)'s ZFS driver.
-The current recommendation is to use it only on amd64 platforms with sufficient memory.
-For more information, see man:zfs[8].
-
-FreeBSD includes the Network File System NFS and the FreeBSD Ports Collection provides several FUSE applications to support many other file systems.
-
-[[mount-dos]]
-=== How do I mount a secondary DOS partition?
-
-The secondary DOS partitions are found after _all_ the primary partitions.
-For example, if `E` is the second DOS partition on the second SCSI drive,
-there will be a device file for "slice 5" in [.filename]#/dev#. To mount it:
-
-[source,shell]
-....
-# mount -t msdosfs /dev/da1s5 /dos/e
-....
-
-[[crypto-file-system]]
-=== Is there a cryptographic file system for FreeBSD?
-
-Yes, man:gbde[8] and man:geli[8].
-See the extref:{handbook}[Encrypting Disk Partitions, disks-encrypting] section of the FreeBSD Handbook.
-
-[[grub-loader]]
-=== How do I boot FreeBSD and Linux(R) using GRUB?
-
-To boot FreeBSD using GRUB, add the following to either [.filename]#/boot/grub/menu.lst# or [.filename]#/boot/grub/grub.conf#,
-depending upon which is used by the Linux(R) distribution.
-
-[.programlisting]
-....
-title FreeBSD 9.1
- root (hd0,a)
- kernel /boot/loader
-....
-
-Where _hd0,a_ points to the root partition on the first disk.
-To specify the slice number, use something like this _(hd0,2,a)_.
-By default, if the slice number is omitted, GRUB searches the first slice which has the `a` partition.
-
-[[booteasy-loader]]
-=== How do I boot FreeBSD and Linux(R) using BootEasy?
-
-Install LILO at the start of the Linux(R) boot partition instead of in the Master Boot Record.
-Then boot LILO from BootEasy.
-
-This is recommended when running Windows(R) and Linux(R) as it makes it simpler to get Linux(R) booting again if Windows(R) is reinstalled.
-
-[[changing-bootprompt]]
-=== How do I change the boot prompt from ??? to something more meaningful?
-
-This cannot be accomplished with the standard boot manager without rewriting it.
-There are a number of other boot managers in the [.filename]#sysutils# category of the Ports Collection.
-
-[[removable-drives]]
-=== How do I use a new removable drive?
-
-If the drive already has a file system on it, use a command like this:
-
-[source,shell]
-....
-# mount -t msdosfs /dev/da0s1 /mnt
-....
-
-If the drive will only be used with FreeBSD systems, partition it with UFS or ZFS.
-This will provide long filename support, improvement in performance, and stability.
-If the drive will be used by other operating systems, a more portable choice, such as msdosfs, is better.
-
-[source,shell]
-....
-# dd if=/dev/zero of=/dev/da0 count=2
-# gpart create -s GPT /dev/da0
-# gpart add -t freebsd-ufs /dev/da0
-....
-
-Finally, create a new file system:
-[source,shell]
-....
-# newfs /dev/da0p1
-....
-
-and mount it:
-
-[source,shell]
-....
-# mount /dev/da0s1 /mnt
-....
-
-It is a good idea to add a line to [.filename]#/etc/fstab# (see man:fstab[5]) so you can just type `mount /mnt` in the future:
-
-[.programlisting]
-....
-/dev/da0p1 /mnt ufs rw,noauto 0 0
-....
-
-[[mount-cd-superblock]]
-=== Why do I get Incorrect super block when mounting a CD?
-
-The type of device to mount must be specified.
-This is described in the Handbook section on extref:{handbook}[Using Data CDs, mounting-cd].
-
-[[cdrom-not-configured]]
-=== Why do I get Device not configured when mounting a CD?
-
-This generally means that there is no CD in the drive, or the drive is not visible on the bus.
-Refer to the extref:{handbook}[Using Data CDs, mounting-cd] section of the Handbook for a detailed discussion of this issue.
-
-[[cdrom-unicode-filenames]]
-=== Why do all non-English characters in filenames show up as ? on my CDs when mounted in FreeBSD?
-
-The CD probably uses the "Joliet" extension for storing information about files and directories.
-This is discussed in the Handbook section on extref:{handbook}[Using Data CD-ROMs, mounting-cd].
-
-[[burncd-isofs]]
-=== A CD burned under FreeBSD cannot be read under any other operating system. Why?
-
-This means a raw file was burned to the CD, rather than creating an ISO 9660 file system.
-Take a look at the Handbook section on extref:{handbook}[Using Data CDs].
-
-[[copy-cd]]
-=== How can I create an image of a data CD?
-
-This is discussed in the Handbook section on extref:{handbook}[Writing Data to an ISO File System, mkisofs].
-For more on working with CD-ROMs, see the extref:{handbook}[Creating CDs Section, creating-cds] in the Storage chapter in the Handbook.
-
-[[mount-audio-CD]]
-=== Why can I not mount an audio CD?
-
-Trying to mount an audio CD will produce an error like `cd9660: /dev/cd0: Invalid argument`.
-This is because `mount` only works on file systems.
-Audio CDs do not have file systems; they just have data.
-Instead, use a program that reads audio CDs, such as the package:audio/xmcd[] package or port.
-
-[[multi-session-CD]]
-=== How do I mount a multi-session CD?
-
-By default, man:mount[8] will attempt to mount the last data track (session) of a CD.
-To load an earlier session, use the `-s` command line argument.
-Refer to man:mount_cd9660[8] for specific examples.
-
-[[user-floppymount]]
-=== How do I let ordinary users mount CD-ROMs, DVDs, USB drives, and other removable media?
-
-As `root` set the sysctl variable `vfs.usermount` to `1`.
-
-[source,shell]
-....
-# sysctl vfs.usermount=1
-....
-
-To make this persist across reboots, add the line `vfs.usermount=1` to [.filename]#/etc/sysctl.conf# so that it is reset at system boot time.
-
-Users can only mount devices they have read permissions to.
-To allow users to mount a device permissions must be set in [.filename]#/etc/devfs.conf#.
-
-For example, to allow users to mount the first USB drive add:
-
-[.programlisting]
-....
-# Allow all users to mount a USB drive.
- own /dev/da0 root:operator
- perm /dev/da0 0666
-....
-
-All users can now mount devices they could read onto a directory that they own:
-
-[source,shell]
-....
-% mkdir ~/my-mount-point
-% mount -t msdosfs /dev/da0 ~/my-mount-point
-....
-
-Unmounting the device is simple:
-
-[source,shell]
-....
-% umount ~/my-mount-point
-....
-
-Enabling `vfs.usermount`, however, has negative security implications.
-A better way to access MS-DOS(R) formatted media is to use the package:emulators/mtools[] package in the Ports Collection.
-
-[NOTE]
-====
-The device name used in the previous examples must be changed according to the configuration.
-====
-
-[[du-vs-df]]
-=== The du and df commands show different amounts of disk space available. What is going on?
-
-This is due to how these commands actually work.
-`du` goes through the directory tree, measures how large each file is, and presents the totals.
-`df` just asks the file system how much space it has left.
-They seem to be the same thing, but a file without a directory entry will affect `df` but not `du`.
-
-When a program is using a file, and the file is deleted, the file is not really removed from the file system until the program stops using it.
-The file is immediately deleted from the directory listing, however.
-As an example, consider a file large enough to affect the output of `du` and `df`.
-A file being viewed with `more` can be deleted without causing an error.
-The entry is removed from the directory so no other program or user can access it.
-However, `du` shows that it is gone as it has walked the directory tree and the file is not listed.
-`df` shows that it is still there, as the file system knows that `more` is still using that space.
-Once the `more` session ends, `du` and `df` will agree.
-
-This situation is common on web servers.
-Many people set up a FreeBSD web server and forget to rotate the log files.
-The access log fills up [.filename]#/var#. The new administrator deletes the file, but the system still complains that the partition is full.
-Stopping and restarting the web server program would free the file, allowing the system to release the disk space.
-To prevent this from happening, set up man:newsyslog[8].
-
-Note that Soft Updates can delay the freeing of disk space and it can take up to 30 seconds for the change to be visible.
-
-[[add-swap-space]]
-=== How can I add more swap space?
-
-This section extref:{handbook}[of the Handbook, adding-swap-space] describes how to do this.
-
-[[manufacturer-disk-size]]
-=== Why does FreeBSD see my disk as smaller than the manufacturer says it is?
-
-Disk manufacturers calculate gigabytes as a billion bytes each, whereas FreeBSD calculates them as 1,073,741,824 bytes each.
-This explains why, for example, FreeBSD's boot messages will report a disk that supposedly has 80 GB as holding 76,319 MB.
-
-Also note that FreeBSD will (by default) <<disk-more-than-full,reserve>> 8% of the disk space.
-
-[[disk-more-than-full]]
-=== How is it possible for a partition to be more than 100% full?
-
-A portion of each UFS partition (8%, by default) is reserved for use by the operating system and the `root` user.
-man:df[1] does not count that space when calculating the `Capacity` column, so it can exceed 100%.
-Notice that the `Blocks` column is always greater than the sum of the `Used` and `Avail` columns, usually by a factor of 8%.
-
-For more details, look up `-m` in man:tunefs[8].
-
-[[all-about-zfs]]
-== ZFS
-
-[[how-much-ram-for-zfs]]
-=== What is the minimum amount of RAM one should have to run ZFS?
-
-A minimum of 4GB of RAM is required for comfortable usage, but individual workloads can vary widely.
-
-[[what-is-zil]]
-=== What is the ZIL and when does it get used?
-
-The ZIL (ZFS intent log) is a write log used to implement posix write commitment semantics across crashes.
-Normally writes are bundled up into transaction groups and written to disk when filled ("Transaction Group Commit").
-However syscalls like man:fsync[2] require a commitment that the data is written to stable storage before returning.
-The ZIL is needed for writes that have been acknowledged as written but which are not yet on disk as part of a transaction.
-The transaction groups are timestamped.
-In the event of a crash the last valid timestamp is found and missing data is merged in from the ZIL.
-
-[[need-ssd-for-zil]]
-=== Do I need a SSD for ZIL?
-
-By default, ZFS stores the ZIL in the pool with all the data.
-If an application has a heavy write load, storing the ZIL in a separate device that has very fast synchronous, sequential write performance can improve overall system performance.
-For other workloads, a SSD is unlikely to make much of an improvement.
-
-[[what-is-l2arc]]
-=== What is the L2ARC?
-
-The L2ARC is a read cache stored on a fast device such as an SSD.
-This cache is not persistent across reboots.
-Note that RAM is used as the first layer of cache and the L2ARC is only needed if there is insufficient RAM.
-
-L2ARC needs space in the ARC to index it.
-So, perversely, a working set that fits perfectly in the ARC will not fit perfectly any more if a L2ARC is used because part of the ARC is holding the L2ARC index,
-pushing part of the working set into the L2ARC which is slower than RAM.
-
-[[should-enable-dedup]]
-=== Is enabling deduplication advisable?
-
-Generally speaking, no.
-
-Deduplication takes up a significant amount of RAM and may slow down read and write disk access times.
-Unless one is storing data that is very heavily duplicated, such as virtual machine images or user backups,
-it is possible that deduplication will do more harm than good.
-Another consideration is the inability to revert deduplication status.
-If data is written when deduplication is enabled, disabling dedup will not cause those blocks which were deduplicated to be replicated until they are next modified.
-
-Deduplication can also lead to some unexpected situations. In particular, deleting files may become much slower.
-
-[[zpool-fully-full]]
-=== I cannot delete or create files on my ZFS pool. How can I fix this?
-
-This could happen because the pool is 100% full.
-ZFS requires space on the disk to write transaction metadata.
-To restore the pool to a usable state, truncate the file to delete:
-
-[source,shell]
-....
-% truncate -s 0 unimportant-file
-....
-
-File truncation works because a new transaction is not started, new spare blocks are created instead.
-
-[NOTE]
-====
-On systems with additional ZFS dataset tuning, such as deduplication, the space may not be immediately available
-====
-
-[[zfs-ssd-trim]]
-=== Does ZFS support TRIM for Solid State Drives?
+That is why other more featureful shells like `bash`, `scsh`, man:tcsh[1], and `zsh` are available.
-ZFS TRIM support was added to FreeBSD 10-CURRENT with revision link:https://svnweb.freebsd.org/changeset/base/240868[r240868].
-ZFS TRIM support was added to all FreeBSD-STABLE branches in link:https://svnweb.freebsd.org/changeset/base/252162[r252162] and link:https://svnweb.freebsd.org/changeset/base/251419[r251419], respectively.
+[[keyboard-delete-key]]
+=== How do I use my delete key in sh and csh?
-ZFS TRIM is enabled by default, and can be turned off by adding this line to [.filename]#/etc/sysctl.conf#:
+For the Bourne Shell, add the following lines to [.filename]#~/.shrc#:
[.programlisting]
....
-vfs.zfs.trim.enabled=0
-....
-
-[NOTE]
-====
-ZFS TRIM support was added to GELI as of link:https://svnweb.freebsd.org/changeset/base/286444[r286444].
-Please see man:geli[8] and the `-T` switch.
-====
-
-[[admin]]
-== System Administration
-
-[[startup-config-files]]
-=== Where are the system start-up configuration files?
-
-The primary configuration file is [.filename]#/etc/defaults/rc.conf# which is described in man:rc.conf[5].
-System startup scripts such as [.filename]#/etc/rc# and [.filename]#/etc/rc.d#, which are described in man:rc[8], include this file.
-_Do not edit this file!_ Instead, to edit an entry in [.filename]#/etc/defaults/rc.conf#, copy the line into [.filename]#/etc/rc.conf# and change it there.
-
-For example, to start man:sshd[8], the included OpenSSH daemon:
-
-[source,shell]
-....
-# echo 'sshd_enable="YES"' >> /etc/rc.conf
-....
-
-Alternatively, use man:sysrc[8] to modify [.filename]#/etc/rc.conf#:
-
-[source,shell]
-....
-# sysrc sshd_enable="YES"
-....
-
-To start up local services, place shell scripts in the [.filename]#/usr/local/etc/rc.d# directory.
-These shell scripts should be set executable, the default file mode is `555`.
-
-[[adding-users]]
-=== How do I add a user easily?
-
-Use the man:adduser[8] command, or the man:pw[8] command for more complicated situations.
-
-To remove the user, use the man:rmuser[8] command or, if necessary, man:pw[8].
-
-[[root-not-found-cron-errors]]
-=== Why do I keep getting messages like root: not found after editing /etc/crontab?
-
-This is normally caused by editing the system crontab.
-This is not the correct way to do things as the system crontab has a different format to the per-user crontabs.
-The system crontab has an extra field, specifying which user to run the command as.
-man:cron[8] assumes this user is the first word of the command to execute.
-Since no such command exists, this error message is displayed.
-
-To delete the extra, incorrect crontab:
-
-[source,shell]
-....
-# crontab -r
-....
-
-[[su-wheel-group]]
-=== Why do I get the error, you are not in the correct group to su root when I try to su to root?
-
-This is a security feature.
-In order to `su` to `root`, or any other account with superuser privileges, the user account must be a member of the `wheel` group.
-If this feature were not there, anybody with an account on a system who also found out ``root``'s password would be able to gain superuser level access to the system.
-
-To allow someone to `su` to `root`, put them in the `wheel` group using `pw`:
-
-[source,shell]
-....
-# pw groupmod wheel -m lisa
+bind ^[[3~ ed-delete-next-char # for xterm
....
-The above example will add user `lisa` to the group `wheel`.
-
-[[rcconf-readonly]]
-=== I made a mistake in rc.conf, or another startup file, and now I cannot edit it because the file system is read-only. What should I do?
-
-Restart the system using `boot -s` at the loader prompt to enter single-user mode.
-When prompted for a shell pathname, press kbd:[Enter] and run `mount -urw /` to re-mount the root file system in read/write mode.
-You may also need to run `mount -a -t ufs` to mount the file system where your favorite editor is defined.
-If that editor is on a network file system, either configure the network manually before mounting the network file systems,
-or use an editor which resides on a local file system, such as man:ed[1].
-
-In order to use a full screen editor such as man:vi[1] or man:emacs[1],
-run `export TERM=xterm` so that these editors can load the correct data from the man:termcap[5] database.
-
-After performing these steps, edit [.filename]#/etc/rc.conf# to fix the syntax error.
-The error message displayed immediately after the kernel boot messages should indicate the number of the line in the file which is at fault.
-
-[[printer-setup]]
-=== Why am I having trouble setting up my printer?
-
-See the extref:{handbook}[Handbook entry on printing, printing] for troubleshooting tips.
-
-[[keyboard-mappings]]
-=== How can I correct the keyboard mappings for my system?
+For the C Shell, add the following lines to [.filename]#~/.cshrc#:
-Refer to the Handbook section on extref:{handbook}[using localization, using-localization],
-specifically the section on extref:{handbook}[console setup, setting-console].
-
-[[user-quotas]]
-=== Why can I not get user quotas to work properly?
-
-. It is possible that the kernel is not configured to use quotas.
-In this case, add the following line to the kernel configuration file and recompile the kernel:
-+
[.programlisting]
....
-options QUOTA
-....
-+
-Refer to the extref:{handbook}[Handbook entry on quotas, quotas] for full details.
-. Do not turn on quotas on [.filename]#/#.
-. Put the quota file on the file system that the quotas are to be enforced on:
-+
-[.informaltable]
-[cols="1,1", frame="none", options="header"]
-|===
-| File System
-| Quota file
-
-|[.filename]#/usr#
-|[.filename]#/usr/admin/quotas#
-
-|[.filename]#/home#
-|[.filename]#/home/admin/quotas#
-
-|...
-|...
-|===
-
-[[sysv-ipc]]
-=== Does FreeBSD support System V IPC primitives?
-
-Yes, FreeBSD supports System V-style IPC, including shared memory, messages and semaphores, in the [.filename]#GENERIC# kernel.
-With a custom kernel, support may be loaded with the [.filename]#sysvshm.ko#, [.filename]#sysvsem.ko# and [.filename]#sysvmsg.ko# kernel modules,
-or enabled in the custom kernel by adding the following lines to the kernel configuration file:
-
-[.programlisting]
-....
-options SYSVSHM # enable shared memory
-options SYSVSEM # enable for semaphores
-options SYSVMSG # enable for messaging
+bindkey ^[[3~ delete-char # for xterm
....
-Recompile and install the kernel.
-
-[[sendmail-alternative]]
-=== What other mail-server software can I use instead of Sendmail?
-
-The http://www.sendmail.org/[Sendmail] server is the default mail-server software for FreeBSD, but it can be replaced with another MTA installed from the Ports Collection.
-Available ports include package:mail/exim[], package:mail/postfix[], and package:mail/qmail[].
-Search the mailing lists for discussions regarding the advantages and disadvantages of the available MTAs.
-
[[forgot-root-pw]]
=== I have forgotten the root password! What do I do?
-Do not panic! Restart the system, type `boot -s` at the `Boot:` prompt to enter single-user mode.
+Do not panic!
+Restart the system, type `boot -s` at the `Boot:` prompt to enter single-user mode.
At the question about the shell to use, hit kbd:[Enter] which will display a # prompt.
Enter `mount -urw /` to remount the root file system read/write, then run `mount -a` to remount all the file systems.
Run `passwd root` to change the `root` password then run man:exit[1] to continue booting.
-[NOTE]
+[TIP]
====
If you are still prompted to give the `root` password when entering the single-user mode, it means that the console has been marked as `insecure` in [.filename]#/etc/ttys#.
In this case, it will be required to boot from a FreeBSD installation disk, choose the [.guimenuitem]#Live CD# or [.guimenuitem]#Shell# at the beginning of the install process and issue the commands mentioned above.
@@ -1786,162 +447,24 @@ Mount the specific partition in this case and then chroot to it.
For example, replace `mount -urw /` with `mount /dev/ada0p1 /mnt; chroot /mnt` for a system on _ada0p1_.
====
-[NOTE]
+[TIP]
====
-If the root partition cannot be mounted from single-user mode,
-it is possible that the partitions are encrypted and it is impossible to mount them without the access keys.
-For more information see the section about encrypted disks in the FreeBSD extref:{handbook}[Handbook, disks-encrypting].
+If the root partition cannot be mounted from single-user mode, it is possible that the partitions are encrypted and it is impossible to mount them without the access keys.
+For more information see the section about encrypted disks in the FreeBSD extref:{handbook}disks/[Handbook, disks-encrypting].
====
-[[CAD-reboot]]
-=== How do I keep kbd:[Control] + kbd:[Alt] + kbd:[Delete] from rebooting the system?
-
-When using man:vt[4], the default console driver, this can be done by setting the following man:sysctl[8]:
-
-[source,shell]
-....
-# sysctl kern.vt.kbd_reboot=0
-....
-
-[[dos-to-unix-txt]]
-=== How do I reformat DOS text files to UNIX(R) ones?
-
-Use this man:perl[1] command:
-
-[source,shell]
-....
-% perl -i.bak -npe 's/\r\n/\n/g' file(s)
-....
-
-where _file(s)_ is one or more files to process.
-The modification is done in-place, with the original file stored with a [.filename]#.bak# extension.
-
-Alternatively, use man:tr[1]:
-
-[source,shell]
-....
-% tr -d '\r' < dos-text-file > unix-file
-....
-
-_dos-text-file_ is the file containing DOS text while _unix-file_ will contain the converted output.
-This can be quite a bit faster than using `perl`.
-
-Yet another way to reformat DOS text files is to use the package:converters/dosunix[] port from the Ports Collection.
-Consult its documentation about the details.
-
-[[reread-rc]]
-=== How do I re-read [.filename]#/etc/rc.conf# and re-start [.filename]#/etc/rc# without a reboot?
-
-Go into single-user mode and then back to multi-user mode:
-
-[source,shell]
-....
-# shutdown now
-# return
-# exit
-....
-
-[[release-candidate]]
-=== I tried to update my system to the latest _-STABLE_, but got _-BETAx_, _-RC_ or __-PRERELEASE__! What is going on?
-
-Short answer: it is just a name.
-_RC_ stands for "Release Candidate".
-It signifies that a release is imminent.
-In FreeBSD, _-PRERELEASE_ is typically synonymous with the code freeze before a release.
-(For some releases, the _-BETA_ label was used in the same way as _-PRERELEASE_.)
-
-Long answer: FreeBSD derives its releases from one of two places.
-Major, dot-zero, releases, such as 9.0-RELEASE are branched from the head of the development stream, commonly referred to as <<current,-CURRENT>>.
-Minor releases, such as 6.3-RELEASE or 5.2-RELEASE, have been snapshots of the active <<stable,-STABLE>> branch.
-Starting with 4.3-RELEASE, each release also now has its own branch which can be tracked by people requiring an extremely conservative rate of development (typically only security advisories).
-
-When a release is about to be made, the branch from which it will be derived from has to undergo a certain process.
-Part of this process is a code freeze.
-When a code freeze is initiated, the name of the branch is changed to reflect that it is about to become a release.
-For example, if the branch used to be called 6.2-STABLE, its name will be changed to 6.3-PRERELEASE to signify the code freeze and signify that extra pre-release testing should be happening.
-Bug fixes can still be committed to be part of the release.
-When the source code is in shape for the release the name will be changed to 6.3-RC to signify that a release is about to be made from it.
-Once in the RC stage, only the most critical bugs found can be fixed.
-Once the release (6.3-RELEASE in this example) and release branch have been made, the branch will be renamed to 6.3-STABLE.
-
-For more information on version numbers and the various Subversion branches, refer to the extref:{releng}[Release Engineering] article.
-
-[[kernel-chflag-failure]]
-=== I tried to install a new kernel, and the man:chflags[1] failed. How do I get around this?
-
-Short answer: the security level is greater than 0.
-Reboot directly to single-user mode to install the kernel.
-
-Long answer: FreeBSD disallows changing system flags at security levels greater than 0.
-To check the current security level:
-
-[source,shell]
-....
-# sysctl kern.securelevel
-....
-
-The security level cannot be lowered in multi-user mode, so boot to single-user mode to install the kernel, or change the security level in [.filename]#/etc/rc.conf# then reboot.
-See the man:init[8] manual page for details on `securelevel`, and see [.filename]#/etc/defaults/rc.conf# and the man:rc.conf[5] manual page for more information on [.filename]#rc.conf#.
-
-[[kernel-securelevel-time]]
-=== I cannot change the time on my system by more than one second! How do I get around this?
-
-Short answer: the system is at a security level greater than 1.
-Reboot directly to single-user mode to change the date.
-
-Long answer: FreeBSD disallows changing the time by more that one second at security levels greater than 1.
-To check the security level:
-
-[source,shell]
-....
-# sysctl kern.securelevel
-....
-
-The security level cannot be lowered in multi-user mode.
-Either boot to single-user mode to change the date or change the security level in [.filename]#/etc/rc.conf# and reboot.
-See the man:init[8] manual page for details on `securelevel`, and see [.filename]#/etc/defaults/rc.conf# and the man:rc.conf[5] manual page for more information on [.filename]#rc.conf#.
-
-[[statd-mem-leak]]
-=== Why is rpc.statd using 256 MB of memory?
-
-No, there is no memory leak, and it is not using 256 MB of memory.
-For convenience, `rpc.statd` maps a large amount of memory into its address space.
-There is nothing terribly wrong with this from a technical standpoint; it just throws off things like man:top[1] and man:ps[1].
-
-man:rpc.statd[8] maps its status file ([.filename]#/var/db/statd.status#) into its address space;
-to save worrying about remapping the status file later when it needs to grow, it maps the status file with a generous size.
-
-[[unsetting-schg]]
-=== Why can I not unset the schg file flag?
-
-The system is running at securelevel greater than 0.
-Lower the securelevel and try again.
-For more information, see <<securelevel,the FAQ entry on securelevel>> and the man:init[8] manual page.
-
-[[vnlru]]
-=== What is vnlru?
-
-`vnlru` flushes and frees vnodes when the system hits the `kern.maxvnodes` limit.
-This kernel thread sits mostly idle, and only activates when there is a huge amount of RAM and users are accessing tens of thousands of tiny files.
-
-[[top-memory-states]]
-=== What do the various memory states displayed by top mean?
+[[rcconf-readonly]]
+=== I made a mistake in rc.conf, or another startup file, and now I cannot edit it because the file system is read-only. What should I do?
-* `Active`: pages recently statistically used.
-* `Inactive`: pages recently statistically unused.
-* `Laundry`: pages recently statistically unused but known to be dirty, that is, whose contents needs to be paged out before they can be reused.
-* `Free`: pages without data content, which can be immediately reused.
-* `Wired`: pages that are fixed into memory, usually for kernel purposes, but also sometimes for special use in processes.
+Restart the system using `boot -s` at the loader prompt to enter single-user mode.
+When prompted for a shell pathname, press kbd:[Enter] and run `mount -urw /` to re-mount the root file system in read/write mode.
+You may also need to run `mount -a -t ufs` to mount the file system where your favorite editor is defined.
+If that editor is on a network file system, either configure the network manually before mounting the network file systems, or use an editor which resides on a local file system, such as man:ed[1].
-Pages are most often written to disk (sort of a VM sync) when they are in the laundry state, but active or inactive pages can also be synced.
-This depends upon the CPU tracking of the modified bit being available,
-and in certain situations there can be an advantage for a block of VM pages to be synced, regardless of the queue they belong to.
-In most common cases, it is best to think of the laundry queue as a queue of relatively unused pages that might or might not be in the process of being written to disk.
-The inactive queue contains a mix of clean and dirty pages;
-clean pages near the head of the queue are reclaimed immediately to alleviate a free page shortage,
-and dirty pages are moved to the laundry queue for deferred processing.
+In order to use a full screen editor such as man:vi[1] or man:emacs[1], run `export TERM=xterm` so that these editors can load the correct data from the man:termcap[5] database.
-There are some other flags (e.g., busy flag or busy count) that might modify some of the described rules.
+After performing these steps, edit [.filename]#/etc/rc.conf# to fix the syntax error.
+The error message displayed immediately after the kernel boot messages should indicate the number of the line in the file which is at fault.
[[free-memory-amount]]
=== How much free memory is available?
@@ -1950,782 +473,14 @@ There are a couple of kinds of "free memory".
The most common is the amount of memory immediately available without reclaiming memory already in use.
That is the size of the free pages queue plus some other reserved pages.
This amount is exported by the `vm.stats.vm.v_free_count` man:sysctl[8], shown, for instance, by man:top[1].
-Another kind of "free memory" is the total amount of virtual memory available to userland processes,
-which depends on the sum of swap space and usable memory.
-Other kinds of "free memory" descriptions are also possible, but it is relatively useless to define these,
-but rather it is important to make sure that the paging rate is kept low, and to avoid running out of swap space.
-
-[[var-empty]]
-=== What is [.filename]#/var/empty#?
-
-[.filename]#/var/empty# is a directory that the man:sshd[8] program uses when performing privilege separation.
-The [.filename]#/var/empty# directory is empty, owned by `root` and has the `schg` flag set.
-This directory should not be deleted.
-
-[[newsyslog-expectations]]
-=== I just changed [.filename]#/etc/newsyslog.conf#. How can I check if it does what I expect?
-
-To see what man:newsyslog[8] will do, use the following:
-
-[source,shell]
-....
-% newsyslog -nrvv
-....
+Another kind of "free memory" is the total amount of virtual memory available to userland processes, which depends on the sum of swap space and usable memory.
+Other kinds of "free memory" descriptions are also possible, but it is relatively useless to define these, but rather it is important to make sure that the paging rate is kept low, and to avoid running out of swap space.
[[timezone]]
=== My time is wrong, how can I change the timezone?
Use man:tzsetup[8].
-[[X11]]
-== The X Window System and Virtual Consoles
-
-[[whatis-X]]
-=== What is the X Window System?
-
-The X Window System (commonly `X11`) is the most widely available windowing system capable of running on UNIX(R) or UNIX(R) like systems, including FreeBSD.
-http://www.x.org/wiki/[The X.Org Foundation] administers the http://en.wikipedia.org/wiki/X_Window_System_core_protocol[X protocol standards], with the current reference implementation, version 11 release 7.7, so references are often shortened to `X11`.
-
-Many implementations are available for different architectures and operating systems.
-An implementation of the server-side code is properly known as an `X server`.
-
-[[running-X]]
-=== I want to run Xorg, how do I go about it?
-
-To install Xorg do one of the following:
-
-Use the package:x11/xorg[] meta-port, which builds and installs every Xorg component.
-
-Use package:x11/xorg-minimal[], which builds and installs only the necessary Xorg components.
-
-Install Xorg from FreeBSD packages:
-
-[source,shell]
-....
-# pkg install xorg
-....
-
-After the installation of Xorg, follow the instructions from the extref:{handbook}[X11 Configuration, x-config] section of the FreeBSD Handbook.
-
-[[running-X-securelevels]]
-=== I tried to run X, but I get a No devices detected. error when I type startx. What do I do now?
-
-The system is probably running at a raised `securelevel`.
-It is not possible to start X at a raised `securelevel` because X requires write access to man:io[4].
-For more information, see at the man:init[8] manual page.
-
-There are two solutions to the problem:
-set the `securelevel` back down to zero or run man:xdm[8] (or an alternative display manager) at boot time before the `securelevel` is raised.
-
-See <<xdm-boot>> for more information about running man:xdm[8] at boot time.
-
-[[x-and-moused]]
-=== Why does my mouse not work with X?
-
-When using man:vt[4], the default console driver, FreeBSD can be configured to support a mouse pointer on each virtual screen.
-To avoid conflicting with X, man:vt[4] supports a virtual device called [.filename]#/dev/sysmouse#.
-All mouse events received from the real mouse device are written to the man:sysmouse[4] device via man:moused[8].
-To use the mouse on one or more virtual consoles, _and_ use X, see <<moused>> and set up man:moused[8].
-
-Then edit [.filename]#/etc/X11/xorg.conf# and make sure the following lines exist:
-
-[.programlisting]
-....
-Section "InputDevice"
- Option "Protocol" "SysMouse"
- Option "Device" "/dev/sysmouse"
-.....
-....
-
-Starting with Xorg version 7.4, the `InputDevice` sections in [.filename]#xorg.conf# are ignored in favor of autodetected devices.
-To restore the old behavior, add the following line to the `ServerLayout` or `ServerFlags` section:
-
-[.programlisting]
-....
-Option "AutoAddDevices" "false"
-....
-
-Some people prefer to use [.filename]#/dev/mouse# under X.
-To make this work, [.filename]#/dev/mouse# should be linked to [.filename]#/dev/sysmouse# (see man:sysmouse[4]) by adding the following line to [.filename]#/etc/devfs.conf# (see man:devfs.conf[5]):
-
-[.programlisting]
-....
-link sysmouse mouse
-....
-
-This link can be created by restarting man:devfs[5] with the following command (as `root`):
-
-[source,shell]
-....
-# service devfs restart
-....
-
-[[x-and-wheel]]
-=== My mouse has a fancy wheel. Can I use it in X?
-
-Yes, if X is configured for a 5 button mouse.
-To do this, add the lines `Buttons 5` and `ZAxisMapping 4 5` to the "InputDevice" section of [.filename]#/etc/X11/xorg.conf#, as seen in this example:
-
-[.programlisting]
-....
-Section "InputDevice"
- Identifier "Mouse1"
- Driver "mouse"
- Option "Protocol" "auto"
- Option "Device" "/dev/sysmouse"
- Option "Buttons" "5"
- Option "ZAxisMapping" "4 5"
-EndSection
-....
-
-The mouse can be enabled in Emacs by adding these lines to [.filename]#~/.emacs#:
-
-[.programlisting]
-....
-;; wheel mouse
-(global-set-key [mouse-4] 'scroll-down)
-(global-set-key [mouse-5] 'scroll-up)
-....
-
-[[x-and-synaptic]]
-=== My laptop has a Synaptics touchpad. Can I use it in X?
-
-Yes, after configuring a few things to make it work.
-
-In order to use the Xorg synaptics driver, first remove `moused_enable` from [.filename]#rc.conf#.
-
-To enable synaptics, add the following line to [.filename]#/boot/loader.conf#:
-
-[.programlisting]
-....
-hw.psm.synaptics_support="1"
-....
-
-Add the following to [.filename]#/etc/X11/xorg.conf#:
-
-[.programlisting]
-....
-Section "InputDevice"
-Identifier "Touchpad0"
-Driver "synaptics"
-Option "Protocol" "psm"
-Option "Device" "/dev/psm0"
-EndSection
-....
-
-And be sure to add the following into the "ServerLayout" section:
-
-[.programlisting]
-....
-InputDevice "Touchpad0" "SendCoreEvents"
-....
-
-[[no-remote-x11]]
-=== How do I use remote X displays?
-
-For security reasons, the default setting is to not allow a machine to remotely open a window.
-
-To enable this feature, start X with the optional `-listen_tcp` argument:
-
-[source,shell]
-....
-% startx -listen_tcp
-....
-
-[[virtual-console]]
-=== What is a virtual console and how do I make more?
-
-Virtual consoles provide several simultaneous sessions on the same machine without doing anything complicated like setting up a network or running X.
-
-When the system starts, it will display a login prompt on the monitor after displaying all the boot messages.
-Type in your login name and password to start working on the first virtual console.
-
-To start another session, perhaps to look at documentation for a program or to read mail while waiting for an FTP transfer to finish, hold down kbd:[Alt] and press kbd:[F2].
-This will display the login prompt for the second virtual console.
-To go back to the original session, press kbd:[Alt+F1].
-
-The default FreeBSD installation has eight virtual consoles enabled.
-kbd:[Alt+F1], kbd:[Alt+F2], kbd:[Alt+F3], and so on will switch between these virtual consoles.
-
-To enable more of virtual consoles, edit [.filename]#/etc/ttys# (see man:ttys[5]) and add entries for [.filename]#ttyv8# to [.filename]#ttyvc#, after the comment on "Virtual terminals":
-
-[.programlisting]
-....
-# Edit the existing entry for ttyv8 in /etc/ttys and change
-# "off" to "on".
-ttyv8 "/usr/libexec/getty Pc" xterm on secure
-ttyv9 "/usr/libexec/getty Pc" xterm on secure
-ttyva "/usr/libexec/getty Pc" xterm on secure
-ttyvb "/usr/libexec/getty Pc" xterm on secure
-....
-
-The more virtual terminals, the more resources that are used.
-This can be problematic on systems with 8 MB RAM or less.
-Consider changing `secure` to `insecure`.
-
-[IMPORTANT]
-====
-In order to run an X server, at least one virtual terminal must be left to `off` for it to use.
-This means that only eleven of the Alt-function keys can be used as virtual consoles so that one is left for the X server.
-====
-
-For example, to run X and eleven virtual consoles, the setting for virtual terminal 12 should be:
-
-[.programlisting]
-....
-ttyvb "/usr/libexec/getty Pc" xterm off secure
-....
-
-The easiest way to activate the virtual consoles is to reboot.
-
-[[vty-from-x]]
-=== How do I access the virtual consoles from X?
-
-Use kbd:[Ctrl+Alt+Fn] to switch back to a virtual console.
-Press kbd:[Ctrl+Alt+F1] to return to the first virtual console.
-
-Once at a text console, use kbd:[Alt+Fn] to move between them.
-
-To return to the X session, switch to the virtual console running X.
-If X was started from the command line using `startx`,
-the X session will attach to the next unused virtual console,
-not the text console from which it was invoked.
-For eight active virtual terminals, X will run on the ninth, so use kbd:[Alt+F9].
-
-[[xdm-boot]]
-=== How do I start XDM on boot?
-
-There are two schools of thought on how to start man:xdm[8].
-One school starts `xdm` from [.filename]#/etc/ttys# (see man:ttys[5]) using the supplied example, while the other sets `xdm_enable=yes` in [.filename]#/etc/rc.conf#.
-Both are equally valid, and one may work in situations where the other does not.
-In both cases the result is the same: X will pop up a graphical login prompt.
-
-The man:ttys[5] method has the advantage of documenting which vty X will start on and passing the responsibility of restarting the X server on logout to man:init[8].
-The man:rc[8] method makes it easy to `kill xdm` if there is a problem starting the X server.
-
-When using the man:rc[8] method, `xdm_tty` (default `ttyv8`) can be set in [.filename]#/etc/rc.conf# to choose which vty man:xdm[8] opens on.
-
-[[xconsole-failure]]
-=== Why do I get Couldn't open console when I run xconsole?
-
-When X is started with `startx`, the permissions on [.filename]#/dev/console# will _not_ get changed, resulting in things like `xterm -C` and `xconsole` not working.
-
-This is because of the way console permissions are set by default.
-On a multi-user system, one does not necessarily want just any user to be able to write on the system console.
-For users who are logging directly onto a machine with a VTY, the man:fbtab[5] file exists to solve such problems.
-
-In a nutshell, make sure an uncommented line of the form is in [.filename]#/etc/fbtab# (see man:fbtab[5]):
-
-[.programlisting]
-....
-/dev/ttyv0 0600 /dev/console
-....
-
-It will ensure that whomever logs in on [.filename]#/dev/ttyv0# will own the console.
-
-[[ps2-x]]
-=== Why does my PS/2 mouse misbehave under X?
-
-The mouse and the mouse driver may have become out of synchronization.
-In rare cases, the driver may also erroneously report synchronization errors:
-
-[.programlisting]
-....
-psmintr: out of sync (xxxx != yyyy)
-....
-
-If this happens, disable the synchronization check code by setting the driver flags for the PS/2 mouse driver to `0x100`.
-This can be easiest achieved by adding `hint.psm.0.flags="0x100"` to [.filename]#/boot/loader.conf# and rebooting.
-
-[[mouse-button-reverse]]
-=== How do I reverse the mouse buttons?
-
-Type `xmodmap -e "pointer = 3 2 1"`.
-Add this command to [.filename]#~/.xinitrc# or [.filename]#~/.xsession# to make it happen automatically.
-
-[[install-splash]]
-=== How do I install a splash screen and where do I find them?
-
-The detailed answer for this question can be found in the extref:{handbook}[Boot Time Splash Screens, boot-splash] section of the FreeBSD Handbook.
-
-[[windows-keys]]
-=== Can I use the kbd:[Windows] keys on my keyboard in X?
-
-Yes. Use man:xmodmap[1] to define which functions the keys should perform.
-
-Assuming all Windows keyboards are standard, the keycodes for these three keys are the following:
-
-* 115 - kbd:[Windows] key, between the left-hand kbd:[Ctrl] and kbd:[Alt] keys
-* 116 - kbd:[Windows] key, to the right of kbd:[AltGr]
-* 117 - kbd:[Menu], to the left of the right-hand kbd:[Ctrl]
-
-To have the left kbd:[Windows] key print a comma, try this.
-
-[source,shell]
-....
-# xmodmap -e "keycode 115 = comma"
-....
-
-To have the kbd:[Windows] key-mappings enabled automatically every time X is started,
-either put the `xmodmap` commands in [.filename]#~/.xinitrc# or, preferably,
-create a [.filename]#~/.xmodmaprc# and include the `xmodmap` options,
-one per line, then add the following line to [.filename]#~/.xinitrc#:
-
-[.programlisting]
-....
-xmodmap $HOME/.xmodmaprc
-....
-
-For example, to map the 3 keys to be kbd:[F13], kbd:[F14], and kbd:[F15], respectively.
-This would make it easy to map them to useful functions within applications or the window manager.
-
-To do this, put the following in [.filename]#~/.xmodmaprc#.
-
-[.programlisting]
-....
-keycode 115 = F13
-keycode 116 = F14
-keycode 117 = F15
-....
-
-For the package:x11-wm/fvwm2[] desktop manager,
-one could map the keys so that kbd:[F13] iconifies or de-iconifies the window the cursor is in,
-kbd:[F14] brings the window the cursor is in to the front or, if it is already at the front, pushes it to the back,
-and kbd:[F15] pops up the main Workplace menu even if the cursor is not on the desktop,
-which is useful when no part of the desktop is visible.
-
-The following entries in [.filename]#~/.fvwmrc# implement the aforementioned setup:
-
-[.programlisting]
-....
-Key F13 FTIWS A Iconify
-Key F14 FTIWS A RaiseLower
-Key F15 A A Menu Workplace Nop
-....
-
-[[x-3d-acceleration]]
-=== How can I get 3D hardware acceleration for OpenGL(R)?
-
-The availability of 3D acceleration depends on the version of Xorg and the type of video chip.
-For an nVidia chip, use the binary drivers provided for FreeBSD by installing one of the following ports:
-
-The latest versions of nVidia cards are supported by the package:x11/nvidia-driver[] port.
-
-Older drivers are available as:
-
-* package:x11/nvidia-driver-390[]
-* package:x11/nvidia-driver-340[]
-* package:x11/nvidia-driver-304[]
-
-nVidia provides detailed information on which card is supported by which driver on their web site: http://www.nvidia.com/object/IO_32667.html[http://www.nvidia.com/object/IO_32667.html].
-
-For Matrox G200/G400, check the package:x11-drivers/xf86-video-mga[] port.
-
-For ATI Rage 128 and Radeon see man:ati[4], man:r128[4] and man:radeon[4].
-
-[[networking]]
-== Networking
-
-[[diskless-booting]]
-=== Where can I get information on diskless booting?
-
-"Diskless booting" means that the FreeBSD box is booted over a network, and reads the necessary files from a server instead of its hard disk.
-For full details, see extref:{handbook}[the Handbook entry on diskless booting, network-diskless].
-
-[[router]]
-=== Can a FreeBSD box be used as a dedicated network router?
-
-Yes. Refer to the Handbook entry on extref:{handbook}[advanced networking, advanced-networking],
-specifically the section on extref:{handbook}[routing and gateways, network-routing].
-
-[[natd]]
-=== Does FreeBSD support NAT or Masquerading?
-
-Yes. For instructions on how to use NAT over a PPP connection, see the extref:{handbook}[Handbook entry on PPP, userppp].
-To use NAT over some other sort of network connection, look at the extref:{handbook}[natd, network-natd] section of the Handbook.
-
-[[ethernet-aliases]]
-=== How can I set up Ethernet aliases?
-
-If the alias is on the same subnet as an address already configured on the interface, add `netmask 0xffffffff` to this command:
-
-[source,shell]
-....
-# ifconfig ed0 alias 192.0.2.2 netmask 0xffffffff
-....
-
-Otherwise, specify the network address and netmask as usual:
-
-[source,shell]
-....
-# ifconfig ed0 alias 172.16.141.5 netmask 0xffffff00
-....
-
-More information can be found in the FreeBSD extref:{handbook}[Handbook, configtuning-virtual-hosts].
-
-[[nfs-linux]]
-=== Why can I not NFS-mount from a Linux(R) box?
-
-Some versions of the Linux(R) NFS code only accept mount requests from a privileged port; try to issue the following command:
-
-[source,shell]
-....
-# mount -o -P linuxbox:/blah /mnt
-....
-
-[[exports-errors]]
-=== Why does mountd keep telling me it can't change attributes and that I have a bad exports list on my FreeBSD NFS server?
-
-The most frequent problem is not understanding the correct format of [.filename]#/etc/exports#.
-Review man:exports[5] and the extref:{handbook}[NFS, network-nfs] entry in the Handbook,
-especially the section on extref:{handbook}[configuring NFS, configuring-nfs].
-
-[[ip-multicast]]
-=== How do I enable IP multicast support?
-
-Install the package:net/mrouted[] package or port and add `mrouted_enable="YES"` to [.filename]#/etc/rc.conf# start this service at boot time.
-
-[[fqdn-hosts]]
-=== Why do I have to use the FQDN for hosts on my site?
-
-See the answer in the FreeBSD extref:{handbook}[Handbook, mail-trouble].
-
-[[network-permission-denied]]
-=== Why do I get an error, Permission denied, for all networking operations?
-
-If the kernel is compiled with the `IPFIREWALL` option,
-be aware that the default policy is to deny all packets that are not explicitly allowed.
-
-If the firewall is unintentionally misconfigured, restore network operability by typing the following as `root`:
-
-[source,shell]
-....
-# ipfw add 65534 allow all from any to any
-....
-
-Consider setting `firewall_type="open"` in [.filename]#/etc/rc.conf#.
-
-For further information on configuring this firewall, see the extref:{handbook}[Handbook chapter, firewalls-ipfw].
-
-[[ipfw-fwd]]
-=== Why is my `ipfw` “fwd” rule to redirect a service to another machine not working?
-
-Possibly because network address translation (NAT) is needed instead of just forwarding packets.
-A "fwd" rule only forwards packets, it does not actually change the data inside the packet. Consider this rule:
-
-[source,shell]
-....
-01000 fwd 10.0.0.1 from any to foo 21
-....
-
-When a packet with a destination address of _foo_ arrives at the machine with this rule,
-the packet is forwarded to _10.0.0.1_, but it still has the destination address of _foo_.
-The destination address of the packet is not changed to _10.0.0.1_.
-Most machines would probably drop a packet that they receive with a destination address that is not their own.
-Therefore, using a "fwd" rule does not often work the way the user expects.
-This behavior is a feature and not a bug.
-
-See the <<service-redirect,FAQ about redirecting services>>, the man:natd[8] manual,
-or one of the several port redirecting utilities in the link:https://www.FreeBSD.org/ports/[Ports Collection] for a correct way to do this.
-
-[[service-redirect]]
-=== How can I redirect service requests from one machine to another?
-
-FTP and other service requests can be redirected with the package:sysutils/socket[] package or port.
-Replace the entry for the service in [.filename]#/etc/inetd.conf# to call `socket`, as seen in this example for ftpd:
-
-[.programlisting]
-....
-ftp stream tcp nowait nobody /usr/local/bin/socket socket ftp.example.com ftp
-....
-
-where _ftp.example.com_ and _ftp_ are the host and port to redirect to, respectively.
-
-[[bandwidth-mgr-tool]]
-=== Where can I get a bandwidth management tool?
-
-There are three bandwidth management tools available for FreeBSD.
-man:dummynet[4] is integrated into FreeBSD as part of man:ipfw[4].
-http://www.sonycsl.co.jp/person/kjc/programs.html[ALTQ] has been integrated into FreeBSD as part of man:pf[4].
-Bandwidth Manager from http://www.etinc.com/[Emerging Technologies] is a commercial product.
-
-[[bpf-not-configured]]
-=== Why do I get /dev/bpf0: device not configured?
-
-The running application requires the Berkeley Packet Filter (man:bpf[4]), but it was removed from a custom kernel.
-Add this to the kernel config file and build a new kernel:
-
-[.programlisting]
-....
-device bpf # Berkeley Packet Filter
-....
-
-[[mount-smb-share]]
-=== How do I mount a disk from a Windows(R) machine that is on my network, like smbmount in Linux(R)?
-
-Use the SMBFS toolset.
-It includes a set of kernel modifications and a set of userland programs.
-The programs and information are available as man:mount_smbfs[8] in the base system.
-
-[[icmp-response-bw-limit]]
-=== What are these messages about: Limiting icmp/open port/closed port response in my log files?
-
-This kernel message indicates that some activity is provoking it to send a large amount of ICMP or TCP reset (RST) responses.
-ICMP responses are often generated as a result of attempted connections to unused UDP ports.
-TCP resets are generated as a result of attempted connections to unopened TCP ports.
-Among others, these are the kinds of activities which may cause these messages:
-
-* Brute-force denial of service (DoS) attacks (as opposed to single-packet attacks which exploit a specific vulnerability).
-* Port scans which attempt to connect to a large number of ports (as opposed to only trying a few well-known ports).
-
-The first number in the message indicates how many packets the kernel would have sent if the limit was not in place, and the second indicates the limit. This limit is controlled using `net.inet.icmp.icmplim`.
-This example sets the limit to `300` packets per second:
-
-[source,shell]
-....
-# sysctl net.inet.icmp.icmplim=300
-....
-
-To disable these messages without disabling response limiting, use `net.inet.icmp.icmplim_output` to disable the output:
-
-[source,shell]
-....
-# sysctl net.inet.icmp.icmplim_output=0
-....
-
-Finally, to disable response limiting completely, set `net.inet.icmp.icmplim` to `0`.
-Disabling response limiting is discouraged for the reasons listed above.
-
-[[unknown-hw-addr-format]]
-=== What are these arp: unknown hardware address format error messages?
-
-This means that some device on the local Ethernet is using a MAC address in a format that FreeBSD does not recognize.
-This is probably caused by someone experimenting with an Ethernet card somewhere else on the network.
-This is most commonly seen on cable modem networks.
-It is harmless, and should not affect the performance of the FreeBSD system.
-
-[[arp-wrong-iface]]
-=== Why do I keep seeing messages like: 192.168.0.10 is on fxp1 but got reply from 00:15:17:67:cf:82 on rl0, and how do I disable it?
-
-A packet is coming from outside the network unexpectedly.
-To disable them, set `net.link.ether.inet.log_arp_wrong_iface` to `0`.
-
-[[ipv6-only]]
-=== How do I compile an IPv6 only kernel?
-
-Configure your kernel with these settings:
-
-[source,shell]
-....
-include GENERIC
-ident GENERIC-IPV6ONLY
-makeoptions MKMODULESENV+="WITHOUT_INET_SUPPORT="
-nooptions INET
-nodevice gre
-....
-
-[[security]]
-== Security
-
-[[sandbox]]
-=== What is a sandbox?
-
-"Sandbox" is a security term.
-It can mean two things:
-
-* A process which is placed inside a set of virtual walls that are designed to prevent someone who breaks into the process from being able to break into the wider system.
-+
-The process is only able to run inside the walls.
-Since nothing the process does in regards to executing code is supposed to be able to breach the walls,
-a detailed audit of its code is not needed in order to be able to say certain things about its security.
-+
-The walls might be a user ID, for example.
-This is the definition used in the man:security[7] and man:named[8] man pages.
-+
-Take the `ntalk` service, for example (see man:inetd[8]).
-This service used to run as user ID `root`.
-Now it runs as user ID `tty`.
-The `tty` user is a sandbox designed to make it more difficult for someone who has successfully hacked into the system via `ntalk` from being able to hack beyond that user ID.
-* A process which is placed inside a simulation of the machine. It means that someone who is able to break into the process may believe that he can break into the wider machine but is, in fact, only breaking into a simulation of that machine and not modifying any real data.
-+
-The most common way to accomplish this is to build a simulated environment in a subdirectory and then run the processes in that directory chrooted so that [.filename]#/# for that process is this directory, not the real [.filename]#/# of the system).
-+
-Another common use is to mount an underlying file system read-only and then create a file system layer on top of it that gives a process a seemingly writeable view into that file system.
-The process may believe it is able to write to those files, but only the process sees the effects - other processes in the system do not, necessarily.
-+
-An attempt is made to make this sort of sandbox so transparent that the user (or hacker) does not realize that he is sitting in it.
-
-UNIX(R) implements two core sandboxes.
-One is at the process level, and one is at the userid level.
-
-Every UNIX(R) process is completely firewalled off from every other UNIX(R) process.
-One process cannot modify the address space of another.
-
-A UNIX(R) process is owned by a particular userid.
-If the user ID is not the `root` user, it serves to firewall the process off from processes owned by other users.
-The user ID is also used to firewall off on-disk data.
-
-[[securelevel]]
-=== What is securelevel?
-
-`securelevel` is a security mechanism implemented in the kernel.
-When the securelevel is positive, the kernel restricts certain tasks;
-not even the superuser (`root`) is allowed to do them.
-The securelevel mechanism limits the ability to:
-
-* Unset certain file flags, such as `schg` (the system immutable flag).
-* Write to kernel memory via [.filename]#/dev/mem# and [.filename]#/dev/kmem#.
-* Load kernel modules.
-* Alter firewall rules.
-
-To check the status of the securelevel on a running system:
-
-[source,shell]
-....
-# sysctl -n kern.securelevel
-....
-
-The output contains the current value of the securelevel.
-If it is greater than 0, at least some of the securelevel's protections are enabled.
-
-The securelevel of a running system cannot be lowered as this would defeat its purpose.
-If a task requires that the securelevel be non-positive,
-change the `kern_securelevel` and `kern_securelevel_enable` variables in [.filename]#/etc/rc.conf# and reboot.
-
-For more information on securelevel and the specific things all the levels do, consult man:init[8].
-
-[WARNING]
-====
-Securelevel is not a silver bullet; it has many known deficiencies.
-More often than not, it provides a false sense of security.
-
-One of its biggest problems is that in order for it to be at all effective, all files used in the boot process up until the securelevel is set must be protected.
-If an attacker can get the system to execute their code prior to the securelevel being set (which happens quite late in the boot process since some things the system must do at start-up cannot be done at an elevated securelevel), its protections are invalidated.
-While this task of protecting all files used in the boot process is not technically impossible, if it is achieved,
-system maintenance will become a nightmare since one would have to take the system down, at least to single-user mode, to modify a configuration file.
-
-This point and others are often discussed on the mailing lists, particularly the {freebsd-security}.
-Search the archives link:https://www.FreeBSD.org/search/[here] for an extensive discussion.
-A more fine-grained mechanism is preferred.
-====
-
-[[toor-account]]
-=== What is this UID 0 toor account? Have I been compromised?
-
-Do not worry.
-`toor` is an "alternative" superuser account, where toor is root spelled backwards.
-It is intended to be used with a non-standard shell so the default shell for `root` does not need to change.
-This is important as shells which are not part of the base distribution, but are instead installed from ports or packages, are installed in [.filename]#/usr/local/bin# which, by default, resides on a different file system.
-If ``root``'s shell is located in [.filename]#/usr/local/bin# and the file system containing [.filename]#/usr/local/bin#) is not mounted,
-`root` will not be able to log in to fix a problem and will have to reboot into single-user mode in order to enter the path to a shell.
-
-Some people use `toor` for day-to-day `root` tasks with a non-standard shell, leaving `root`,
-with a standard shell, for single-user mode or emergencies.
-By default, a user cannot log in using `toor` as it does not have a password,
-so log in as `root` and set a password for `toor` before using it to login.
-
-[[serial]]
-== Serial Communications
-
-This section answers common questions about serial communications with FreeBSD.
-
-[[serial-console-prompt]]
-=== How do I get the boot: prompt to show on the serial console?
-
-See extref:{handbook}[this section of the Handbook, serialconsole-setup].
-
-[[found-serial]]
-=== How do I tell if FreeBSD found my serial ports or modem cards?
-
-As the FreeBSD kernel boots, it will probe for the serial ports for which the kernel is configured.
-Either watch the boot messages closely or run this command after the system is up and running:
-
-[source,shell]
-....
-% grep -E '^(sio|uart)[0-9]' < /var/run/dmesg.boot
-uart0: <16550 or compatible> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0
-uart0: console (115200,n,8,1)
-uart1: <16550 or compatible> port 0x2f8-2x3ff irq 3 on acpi0
-....
-
-This example shows two serial ports.
-The first is on IRQ4, port address `0x3f8`, and has a 16550-type UART chip.
-The second uses the same kind of chip but is on IRQ3 and is at port address `0x2f8`.
-Internal modem cards are treated just like serial ports, except that they always have a modem attached to the port.
-
-The [.filename]#GENERIC# kernel includes support for two serial ports using the same IRQ and port address settings in the above example.
-If these settings are not right for the system, or if there are more modem cards or serial ports than the kernel is configured for, reconfigure using the instructions in <<make-kernel,building a kernel>> for more details.
-
-[[access-serial-ports]]
-=== How do I access the serial ports on FreeBSD? (x86-specific)
-
-The third serial port, [.filename]#sio2#, or [.filename]#COM3#, is on [.filename]#/dev/cuad2# for dial-out devices, and on [.filename]#/dev/ttyd2# for dial-in devices.
-What is the difference between these two classes of devices?
-
-When opening [.filename]#/dev/ttydX# in blocking mode, a process will wait for the corresponding [.filename]#cuadX# device to become inactive, and then wait for the carrier detect line to go active.
-When the [.filename]#cuadX# device is opened, it makes sure the serial port is not already in use by the [.filename]#ttydX# device.
-If the port is available, it steals it from the [.filename]#ttydX# device.
-Also, the [.filename]#cuadX# device does not care about carrier detect.
-With this scheme and an auto-answer modem, remote users can log in and local users can still dial out with the same modem and the system will take care of all the conflicts.
-
-[[enable-multiport-serial]]
-=== How do I enable support for a multi-port serial card?
-
-The section on kernel configuration provides information about configuring the kernel.
-For a multi-port serial card, place an man:sio[4] line for each serial port on the card in the man:device.hints[5] file.
-But place the IRQ specifiers on only one of the entries.
-All of the ports on the card should share one IRQ.
-For consistency, use the last serial port to specify the IRQ.
-Also, specify the following option in the kernel configuration file:
-
-[.programlisting]
-....
-options COM_MULTIPORT
-....
-
-The following [.filename]#/boot/device.hints# example is for an AST 4-port serial card on IRQ 12:
-
-[.programlisting]
-....
-hint.sio.4.at="isa"
-hint.sio.4.port="0x2a0"
-hint.sio.4.flags="0x701"
-hint.sio.5.at="isa"
-hint.sio.5.port="0x2a8"
-hint.sio.5.flags="0x701"
-hint.sio.6.at="isa"
-hint.sio.6.port="0x2b0"
-hint.sio.6.flags="0x701"
-hint.sio.7.at="isa"
-hint.sio.7.port="0x2b8"
-hint.sio.7.flags="0x701"
-hint.sio.7.irq="12"
-....
-
-The flags indicate that the master port has minor number `7` (`0x700`), and all the ports share an IRQ (`0x001`).
-
-[[default-serial-params]]
-=== Can I set the default serial parameters for a port?
-
-See the extref:{handbook}serialcomms[Serial Communications, serial-hw-config] section in the FreeBSD Handbook.
-
-[[cannot-tip]]
-=== Why can I not run tip or cu?
-
-The built-in man:tip[1] and man:cu[1] utilities can only access the [.filename]#/var/spool/lock# directory via user `uucp` and group `dialer`.
-Use the `dialer` group to control who has access to the modem or remote systems by adding user accounts to `dialer`.
-
-Alternatively, everyone can be configured to run man:tip[1] and man:cu[1] by typing:
-
-[source,shell]
-....
-# chmod 4511 /usr/bin/cu
-# chmod 4511 /usr/bin/tip
-....
-
-[[misc]]
-== Miscellaneous Questions
-
[[more-swap]]
=== FreeBSD uses a lot of swap space even when the computer has free memory left. Why?
@@ -2739,117 +494,32 @@ Thus, the system will not be all paged out after leaving it idle overnight.
=== Why does top show very little free memory even when I have very few programs running?
The simple answer is that free memory is wasted memory.
+
Any memory that programs do not actively allocate is used within the FreeBSD kernel as disk cache.
The values shown by man:top[1] labeled as `Inact` and `Laundry` are cached data at different aging levels.
This cached data means the system does not have to access a slow disk again for data it has accessed recently, thus increasing overall performance.
In general, a low value shown for `Free` memory in man:top[1] is good, provided it is not _very_ low.
-[[chmod-symlinks]]
-=== Why will `chmod` not change the permissions on symlinks?
-
-Symlinks do not have permissions, and by default, man:chmod[1] will follow symlinks to change the permissions on the source file, if possible.
-For the file, [.filename]#foo# with a symlink named [.filename]#bar#, this command will always succeed.
-
-[source,shell]
-....
-% chmod g-w bar
-....
-
-However, the permissions on [.filename]#bar# will not have changed.
-
-When changing modes of the file hierarchies rooted in the files instead of the files themselves, use either `-H` or `-L` together with `-R` to make this work.
-See man:chmod[1] and man:symlink[7] for more information.
-
-[WARNING]
-====
-`-R` does a _recursive_ man:chmod[1].
-Be careful about specifying directories or symlinks to directories to man:chmod[1].
-To change the permissions of a directory referenced by a symlink, use man:chmod[1] without any options and follow the symlink with a trailing slash ([.filename]#/#).
-For example, if [.filename]#foo# is a symlink to directory [.filename]#bar#, to change the permissions of [.filename]#foo# (actually [.filename]#bar#), do something like:
-
-[source,shell]
-....
-% chmod 555 foo/
-....
-
-With the trailing slash, man:chmod[1] will follow the symlink, [.filename]#foo#, to change the permissions of the directory, [.filename]#bar#.
-====
-
-[[dos-binaries]]
-=== Can I run DOS binaries under FreeBSD?
-
-Yes. A DOS emulation program, package:emulators/doscmd[], is available in the FreeBSD Ports Collection.
-
-If doscmd will not suffice, package:emulators/pcemu[] emulates an 8088 and enough BIOS services to run many DOS text-mode applications.
-It requires the X Window System.
-
-The Ports Collection also has package:emulators/dosbox[].
-The main focus of this application is emulating old DOS games using the local file system for files.
-
-[[translation]]
-=== What do I need to do to translate a FreeBSD document into my native language?
-
-See the extref:{fdp-primer}[Translation FAQ, translations] in the FreeBSD Documentation Project Primer.
-
-[[freebsd-mail-bounces]]
-=== Why does my email to any address at FreeBSD.org bounce?
-
-The `FreeBSD.org` mail system implements some Postfix checks on incoming mail and rejects mail that is either from misconfigured relays or otherwise appears likely to be spam.
-Some of the specific requirements are:
-
-* The IP address of the SMTP client must "reverse-resolve" to a forward confirmed hostname.
-* The fully-qualified hostname given in the SMTP conversation (either HELO or EHLO) must resolve to the IP address of the client.
-
-Other advice to help mail reach its destination include:
-
-* Mail should be sent in plain text, and messages sent to mailing lists should generally be no more than 200KB in length.
-* Avoid excessive cross posting. Choose _one_ mailing list which seems most relevant and send it there.
-
-If you still have trouble with email infrastructure at `FreeBSD.org`, send a note with the details to mailto:postmaster@freebsd.org[postmaster@freebsd.org];
-Include a date/time interval so that logs may be reviewed - and note that we only keep one week's worth of mail logs.
-(Be sure to specify the time zone or offset from UTC.)
-
-[[free-account]]
-=== Where can I find a free FreeBSD account?
-
-While FreeBSD does not provide open access to any of their servers, others do provide open access UNIX(R) systems.
-The charge varies and limited services may be available.
-
-http://www.arbornet.org/[Arbornet, Inc], also known as _M-Net_, has been providing open access to UNIX(R) systems since 1983.
-Starting on an Altos running System III, the site switched to BSD/OS in 1991.
-In June of 2000, the site switched again to FreeBSD.
-_M-Net_ can be accessed via telnet and SSH and provides basic access to the entire FreeBSD software suite.
-However, network access is limited to members and patrons who donate to the system, which is run as a non-profit organization.
-_M-Net_ also provides an bulletin board system and interactive chat.
-
[[daemon-name]]
=== What is the cute little red guy's name?
He does not have one, and is just called "the BSD daemon".
-If you insist upon using a name, call him "beastie". Note that "beastie" is pronounced "BSD".
+If you insist upon using a name, call him "beastie".
+Note that "beastie" is pronounced "BSD".
More about the BSD daemon is available on his http://www.mckusick.com/beastie/index.html[home page].
[[use-beastie]]
=== Can I use the BSD daemon image?
-Perhaps. The BSD daemon is copyrighted by Marshall Kirk McKusick.
+Perhaps.
+The BSD daemon is copyrighted by Marshall Kirk McKusick.
Check his http://www.mckusick.com/beastie/mainpage/copyright.html[Statement on the Use of the BSD Daemon Figure] for detailed usage terms.
In summary, the image can be used in a tasteful manner, for personal use, so long as appropriate credit is given.
Before using the logo commercially, contact {mckusick} for permission.
More details are available on the http://www.mckusick.com/beastie/index.html[BSD Daemon's home page].
-[[daemon-images]]
-=== Do you have any BSD daemon images I could use?
-
-Xfig and eps drawings are available under [.filename]#/usr/share/examples/BSD_daemon/#.
-
-[[glossary]]
-=== I have seen an acronym or other term on the mailing lists and I do not understand what it means. Where should I look?
-
-Refer to the extref:{handbook}[FreeBSD Glossary, freebsd-glossary].
-
[[bikeshed-painting]]
=== Why should I care what color the bikeshed is?
@@ -2858,356 +528,40 @@ The somewhat longer answer is that just because you are capable of building a bi
This is a metaphor indicating that you need not argue about every little feature just because you know enough to do so.
Some people have commented that the amount of noise generated by a change is inversely proportional to the complexity of the change.
-The longer and more complete answer is that after a very long argument about whether man:sleep[1] should take fractional second arguments, {phk} posted a long message entitled link:http://www.bikeshed.com[A bike shed (any color will do) on greener grass...].
-The appropriate portions of that message are quoted below.
-
-****
-“What is it about this bike shed?” Some of you have asked me.
-
-It is a long story, or rather it is an old story, but it is quite short actually.
-C. Northcote Parkinson wrote a book in the early 1960s, called “Parkinson's Law”,
-which contains a lot of insight into the dynamics of management.
-
-[snip a bit of commentary on the book]
-
-In the specific example involving the bike shed, the other vital component is an atomic power-plant, I guess that illustrates the age of the book.
-
-Parkinson shows how you can go into the board of directors and get approval for building a multi-million or even billion dollar atomic power plant, but if you want to build a bike shed you will be tangled up in endless discussions.
-
-Parkinson explains that this is because an atomic plant is so vast, so expensive and so complicated that people cannot grasp it, and rather than try, they fall back on the assumption that somebody else checked all the details before it got this far.
-Richard P. Feynmann gives a couple of interesting, and very much to the point, examples relating to Los Alamos in his books.
-
-A bike shed on the other hand.
-Anyone can build one of those over a weekend, and still have time to watch the game on TV.
-So no matter how well prepared, no matter how reasonable you are with your proposal,
-somebody will seize the chance to show that he is doing his job, that he is paying attention, that he is here.
-
-In Denmark we call it “setting your fingerprint”.
-It is about personal pride and prestige, it is about being able to point somewhere and say “There! I did that.”
-It is a strong trait in politicians, but present in most people given the chance.
-Just think about footsteps in wet cement.
-
---Poul-Henning Kamp <phk@FreeBSD.org> on freebsd-hackers, October 2, 1999
-****
+The longer and complete answer is that after a very long argument about whether man:sleep[1] should take fractional second arguments, {phk} posted a long message entitled link:http://www.bikeshed.com[A bike shed (any color will do) on greener grass...].
[[funnies]]
== The FreeBSD Funnies
+Take a break from technicalities and dive into the playful side of FreeBSD.
+
[[very-very-cool]]
=== How cool is FreeBSD?
-_Q._ Has anyone done any temperature testing while running FreeBSD? I know Linux(R) runs cooler than DOS, but have never seen a mention of FreeBSD. It seems to run really hot.
-
-_A._ No, but we have done numerous taste tests on blindfolded volunteers who have also had 250 micrograms of LSD-25 administered beforehand. 35% of the volunteers said that FreeBSD tasted sort of orange, whereas Linux(R) tasted like purple haze. Neither group mentioned any significant variances in temperature. We eventually had to throw the results of this survey out entirely anyway when we found that too many volunteers were wandering out of the room during the tests, thus skewing the results. We think most of the volunteers are at Apple now, working on their new "scratch and sniff" GUI. It is a funny old business we are in!
-
-Seriously, FreeBSD uses the HLT (halt) instruction when the system is idle thus lowering its energy consumption and therefore the heat it generates. Also if you have ACPI (Advanced Configuration and Power Interface) configured, then FreeBSD can also put the CPU into a low power mode.
-
-[[letmeoutofhere]]
-=== Who is scratching in my memory banks??
-
-_Q._ Is there anything "odd" that FreeBSD does when compiling the kernel which would cause the memory to make a scratchy sound? When compiling (and for a brief moment after recognizing the floppy drive upon startup, as well), a strange scratchy sound emanates from what appears to be the memory banks.
-
-_A._ Yes! You will see frequent references to "daemons" in the BSD documentation, and what most people do not know is that this refers to genuine, non-corporeal entities that now possess your computer. The scratchy sound coming from your memory is actually high-pitched whispering exchanged among the daemons as they best decide how to deal with various system administration tasks.
-
-If the noise gets to you, a good `fdisk /mbr` from DOS will get rid of them, but do not be surprised if they react adversely and try to stop you. In fact, if at any point during the exercise you hear the satanic voice of Bill Gates coming from the built-in speaker, take off running and do not ever look back! Freed from the counterbalancing influence of the BSD daemons, the twin demons of DOS and Windows(R) are often able to re-assert total control over your machine to the eternal damnation of your soul. Now that you know, given a choice you would probably prefer to get used to the scratchy noises, no?
-
-[[changing-lightbulbs]]
-=== How many FreeBSD hackers does it take to change a lightbulb?
-
-One thousand, one hundred and sixty-nine:
-
-Twenty-three to complain to -CURRENT about the lights being out;
-
-Four to claim that it is a configuration problem, and that such matters really belong on -questions;
-
-Three to submit PRs about it, one of which is misfiled under doc and consists only of "it's dark";
-
-One to commit an untested lightbulb which breaks buildworld, then back it out five minutes later;
-
-Eight to flame the PR originators for not including patches in their PRs;
-
-Five to complain about buildworld being broken;
-
-Thirty-one to answer that it works for them, and they must have updated at a bad time;
-
-One to post a patch for a new lightbulb to -hackers;
-
-One to complain that he had patches for this three years ago, but when he sent them to -CURRENT they were just ignored, and he has had bad experiences with the PR system; besides, the proposed new lightbulb is non-reflexive;
-
-Thirty-seven to scream that lightbulbs do not belong in the base system, that committers have no right to do things like this without consulting the Community, and WHAT IS -CORE DOING ABOUT IT!?
-
-Two hundred to complain about the color of the bicycle shed;
-
-Three to point out that the patch breaks man:style[9];
-
-Seventeen to complain that the proposed new lightbulb is under GPL;
-
-Five hundred and eighty-six to engage in a flame war about the comparative advantages of the GPL, the BSD license, the MIT license, the NPL, and the personal hygiene of unnamed FSF founders;
-
-Seven to move various portions of the thread to -chat and -advocacy;
-
-One to commit the suggested lightbulb, even though it shines dimmer than the old one;
-
-Two to back it out with a furious flame of a commit message, arguing that FreeBSD is better off in the dark than with a dim lightbulb;
-
-Forty-six to argue vociferously about the backing out of the dim lightbulb and demanding a statement from -core;
-
-Eleven to request a smaller lightbulb so it will fit their Tamagotchi if we ever decide to port FreeBSD to that platform;
-
-Seventy-three to complain about the SNR on -hackers and -chat and unsubscribe in protest;
-
-Thirteen to post "unsubscribe", "How do I unsubscribe?", or "Please remove me from the list", followed by the usual footer;
+[qanda]
+Has anyone done any temperature testing while running FreeBSD?::
+No, but we have done numerous taste tests on blindfolded volunteers who have also had 250 micrograms of LSD-25 administered beforehand.
+35% of the volunteers said that FreeBSD tasted sort of orange, whereas GNU/Linux(R) tasted like purple haze.
+Neither group mentioned any significant variances in temperature.
-One to commit a working lightbulb while everybody is too busy flaming everybody else to notice;
-
-Thirty-one to point out that the new lightbulb would shine 0.364% brighter if compiled with TenDRA (although it will have to be reshaped into a cube), and that FreeBSD should therefore switch to TenDRA instead of GCC;
-
-One to complain that the new lightbulb lacks fairings;
-
-Nine (including the PR originators) to ask "what is MFC?";
-
-Fifty-seven to complain about the lights being out two weeks after the bulb has been changed.
-
-_{nik} adds:_
-
-_I was laughing quite hard at this._
-
-_And then I thought, "Hang on, shouldn't there be '1 to document it.' in that list somewhere?"_
-
-_And then I was enlightened :-)_
-
-_{tabthorpe}_ says: "None, _real_ FreeBSD hackers are not afraid of the dark!"
+Seriously, FreeBSD uses ACPI (Advanced Configuration and Power Interface), therefore FreeBSD can put the CPU into low power mode.
[[dev-null]]
-=== Where does data written to [.filename]#/dev/null# go?
+=== Where does data written to /dev/null go?
It goes into a special data sink in the CPU where it is converted to heat which is vented through the heatsink / fan assembly.
This is why CPU cooling is increasingly important; as people get used to faster processors, they become careless with their data and more and more of it ends up in [.filename]#/dev/null#, overheating their CPUs.
-If you delete [.filename]#/dev/null# (which effectively disables the CPU data sink) your CPU may run cooler but your system will quickly become constipated with all that excess data and start to behave erratically.
-If you have a fast network connection you can cool down your CPU by reading data out of [.filename]#/dev/random# and sending it off somewhere; however you run the risk of overheating your network connection and [.filename]#/# or angering your ISP, as most of the data will end up getting converted to heat by their equipment, but they generally have good cooling, so if you do not overdo it you should be OK.
-
-_Paul Robinson adds:_
-
-There are other methods.
-As every good sysadmin knows, it is part of standard practice to send data to the screen of interesting variety to keep all the pixies that make up your picture happy.
-Screen pixies (commonly mis-typed or re-named as "pixels") are categorized by the type of hat they wear (red, green or blue) and will hide or appear (thereby showing the color of their hat) whenever they receive a little piece of food.
-Video cards turn data into pixie-food, and then send them to the pixies - the more expensive the card, the better the food, so the better behaved the pixies are.
-They also need constant stimulation - this is why screen savers exist.
-To take your suggestions further, you could just throw the random data to console, thereby letting the pixies consume it.
-This causes no heat to be produced at all, keeps the pixies happy and gets rid of your data quite quickly,
-even if it does make things look a bit messy on your screen.
+If you delete [.filename]#/dev/null# (which effectively disables the CPU data sink) your CPU may run cooler but your system will quickly become constipated with all that excess data and start to behave erratically.
-Incidentally, as an ex-admin of a large ISP who experienced many problems attempting to maintain a stable temperature in a server room,
-I would strongly discourage people sending the data they do not want out to the network.
-The fairies who do the packet switching and routing get annoyed by it as well.
+If you have a fast network connection you can cool down your CPU by reading data out of [.filename]#/dev/random# and sending it off somewhere; however you run the risk of overheating your network connection and [.filename]#/# or angering your ISP, as most of the data will end up getting converted to heat by their equipment, but they generally have good cooling, so if you do not overdo it you should be OK.
[[punk-my-friend]]
-=== My colleague sits at the computer too much, how can I prank her?
-
-Install package:games/sl[] and wait for her to mistype `sl` for `ls`.
-
-[[advanced]]
-== Advanced Topics
-
-[[learn-advanced]]
-=== How can I learn more about FreeBSD's internals?
-
-See the extref:{arch-handbook}[FreeBSD Architecture Handbook].
-
-Additionally, much general UNIX(R) knowledge is directly applicable to FreeBSD.
-
-[[how-to-contribute]]
-=== How can I contribute to FreeBSD? What can I do to help?
-
-We accept all types of contributions: documentation, code, and even art.
-See the article on extref:{contributing}[Contributing to FreeBSD] for specific advice on how to do this.
-
-And thanks for the thought!
-
-[[define-snap-release]]
-=== What are snapshots and releases?
-
-There are currently {rel-numbranch} active/semi-active branches in the FreeBSD http://svnweb.FreeBSD.org/base/[Subversion Repository].
-(Earlier branches are only changed very rarely, which is why there are only {rel-numbranch} active branches of development):
-
-* {rel2-releng} AKA {rel2-stable}
-* {rel-releng} AKA {rel-stable}
-* {rel-head-releng} AKA _-CURRENT_ AKA {rel-head}
+=== My colleague sits at the computer too much, how can I prank them?
-`HEAD` is not an actual branch tag.
-It is a symbolic constant for the current, non-branched development stream known as _-CURRENT_.
-
-Right now, _-CURRENT_ is the {rel-head-relx} development stream; the {rel-stable} branch, {rel-releng}, forked off from _-CURRENT_ in {rel-relengdate} and the {rel2-stable} branch, {rel2-releng}, forked off from _-CURRENT_ in {rel2-relengdate}.
-
-[[kernel-panic-troubleshooting]]
-=== How can I make the most of the data I see when my kernel panics?
-
-Here is typical kernel panic:
-
-[.programlisting]
-....
-Fatal trap 12: page fault while in kernel mode
-fault virtual address = 0x40
-fault code = supervisor read, page not present
-instruction pointer = 0x8:0xf014a7e5
-stack pointer = 0x10:0xf4ed6f24
-frame pointer = 0x10:0xf4ed6f28
-code segment = base 0x0, limit 0xfffff, type 0x1b
- = DPL 0, pres 1, def32 1, gran 1
-processor eflags = interrupt enabled, resume, IOPL = 0
-current process = 80 (mount)
-interrupt mask =
-trap number = 12
-panic: page fault
-....
-
-This message is not enough.
-While the instruction pointer value is important, it is also configuration dependent as it varies depending on the kernel image.
-If it is a [.filename]#GENERIC# kernel image from one of the snapshots,
-it is possible for somebody else to track down the offending function, but for a custom kernel, only you can tell us where the fault occurred.
-
-To proceed:
-
-[.procedure]
-====
-. Write down the instruction pointer value. Note that the `0x8:` part at the beginning is not significant in this case: it is the `0xf0xxxxxx` part that we want.
-. When the system reboots, do the following:
-+
-[source,shell]
-....
-% nm -n kernel.that.caused.the.panic | grep f0xxxxxx
-....
-+
-where `f0xxxxxx` is the instruction pointer value.
-The odds are you will not get an exact match since the symbols in the kernel symbol table are for the entry points of functions and the instruction pointer address will be somewhere inside a function, not at the start.
-If you do not get an exact match, omit the last digit from the instruction pointer value and try again:
-+
-[source,shell]
-....
-% nm -n kernel.that.caused.the.panic | grep f0xxxxx
-....
-+
-If that does not yield any results, chop off another digit.
-Repeat until there is some sort of output.
-The result will be a possible list of functions which caused the panic.
-This is a less than exact mechanism for tracking down the point of failure, but it is better than nothing.
-====
-
-However, the best way to track down the cause of a panic is by capturing a crash dump,
-then using man:kgdb[1] to generate a stack trace on the crash dump.
-
-In any case, the method is this:
-
-[.procedure]
-====
-. Make sure that the following line is included in the kernel configuration file:
-+
-[.programlisting]
-....
-makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols
-....
-
-. Change to the [.filename]#/usr/src# directory:
-+
-[source,shell]
-....
-# cd /usr/src
-....
-
-. Compile the kernel:
-+
-[source,shell]
-....
-# make buildkernel KERNCONF=MYKERNEL
-....
-
-. Wait for man:make[1] to finish compiling.
-+
-[source,shell]
-....
-# make installkernel KERNCONF=MYKERNEL
-....
-
-. Reboot.
-====
-
-[NOTE]
-====
-If `KERNCONF` is not included, the [.filename]#GENERIC# kernel will instead be built and installed.
-====
-
-The man:make[1] process will have built two kernels.
-[.filename]#/usr/obj/usr/src/sys/MYKERNEL/kernel# and [.filename]#/usr/obj/usr/src/sys/MYKERNEL/kernel.debug#. [.filename]#kernel# was installed as [.filename]#/boot/kernel/kernel#, while [.filename]#kernel.debug# can be used as the source of debugging symbols for man:kgdb[1].
-
-To capture a crash dump, edit [.filename]#/etc/rc.conf# and set `dumpdev` to point to either the swap partition or `AUTO`.
-This will cause the man:rc[8] scripts to use the man:dumpon[8] command to enable crash dumps.
-This command can also be run manually.
-After a panic, the crash dump can be recovered using man:savecore[8]; if `dumpdev` is set in [.filename]#/etc/rc.conf#,
-the man:rc[8] scripts will run man:savecore[8] automatically and put the crash dump in [.filename]#/var/crash#.
-
-[NOTE]
-====
-FreeBSD crash dumps are usually the same size as physical RAM.
-Therefore, make sure there is enough space in [.filename]#/var/crash# to hold the dump.
-Alternatively, run man:savecore[8] manually and have it recover the crash dump to another directory with more room.
-It is possible to limit the size of the crash dump by using `options MAXMEM=N` where _N_ is the size of kernel's memory usage in KBs.
-For example, for 1 GB of RAM, limit the kernel's memory usage to 128 MB, so that the crash dump size will be 128 MB instead of 1 GB.
-====
-
-Once the crash dump has been recovered , get a stack trace as follows:
-
-[source,shell]
-....
-% kgdb /usr/obj/usr/src/sys/MYKERNEL/kernel.debug /var/crash/vmcore.0
-(kgdb) backtrace
-....
-
-Note that there may be several screens worth of information.
-Ideally, use man:script[1] to capture all of them.
-Using the unstripped kernel image with all the debug symbols should show the exact line of kernel source code where the panic occurred.
-The stack trace is usually read from the bottom up to trace the exact sequence of events that lead to the crash.
-man:kgdb[1] can also be used to print out the contents of various variables or structures to examine the system state at the time of the crash.
-
-[TIP]
-====
-If a second computer is available, man:kgdb[1] can be configured to do remote debugging,
-including setting breakpoints and single-stepping through the kernel code.
-====
-
-[NOTE]
-====
-If `DDB` is enabled and the kernel drops into the debugger, a panic and a crash dump can be forced by typing `panic` at the `ddb` prompt.
-It may stop in the debugger again during the panic phase.
-If it does, type `continue` and it will finish the crash dump.
-====
-
-[[dlsym-failure]]
-=== Why has dlsym() stopped working for ELF executables?
-
-The ELF toolchain does not, by default, make the symbols defined in an executable visible to the dynamic linker.
-Consequently `dlsym()` searches on handles obtained from calls to `dlopen(NULL, flags)` will fail to find such symbols.
-
-To search, using `dlsym()`, for symbols present in the main executable of a process, link the executable using the `--export-dynamic` option to the ELF linker (man:ld[1]).
-
-[[change-kernel-address-space]]
-=== How can I increase or reduce the kernel address space on i386?
-
-By default, the kernel address space is 1 GB (2 GB for PAE) for i386.
-When running a network-intensive server or using ZFS, this will probably not be enough.
-
-Add the following line to the kernel configuration file to increase available space and rebuild the kernel:
-
-[.programlisting]
-....
-options KVA_PAGES=N
-....
-
-To find the correct value of _N_, divide the desired address space size (in megabytes) by four. (For example, it is `512` for 2 GB.)
+Install package:games/sl[] and wait for they to mistype `sl` for `ls`.
[[acknowledgments]]
== Acknowledgments
-This innocent little Frequently Asked Questions document has been written, rewritten, edited, folded, spindled, mutilated, eviscerated, contemplated, discombobulated, cogitated, regurgitated, rebuilt, castigated, and reinvigorated over the last decade, by a cast of hundreds if not thousands. Repeatedly.
-
-We wish to thank every one of the people responsible, and we encourage you to extref:{contributing}[join them] in making this FAQ even better.
+This FAQ has undergone countless revisions and improvements by a diverse group of contributors over the past decades.
diff --git a/documentation/content/en/books/faq/_index.po b/documentation/content/en/books/faq/_index.po
new file mode 100644
index 0000000000..972e11c249
--- /dev/null
+++ b/documentation/content/en/books/faq/_index.po
@@ -0,0 +1,1391 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: documentation/content/en/books/faq/_index.adoc:1
+#: documentation/content/en/books/faq/_index.adoc:13
+#, no-wrap
+msgid "Frequently Asked Questions for FreeBSD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:46
+msgid "Abstract"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:49
+msgid ""
+"This is the Frequently Asked Questions (FAQ) for FreeBSD. Every effort has "
+"been made to make this FAQ as informative as possible."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:51
+msgid "'''"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/faq/_index.adoc:55
+#, no-wrap
+msgid "Introduction"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:59
+msgid ""
+"Welcome to the world of FreeBSD! In this section, we provide a comprehensive "
+"overview of what FreeBSD is, its origins, goals, use cases, and the "
+"community behind it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:61
+msgid ""
+"Discover the reasons behind its name, learn how to contribute to this "
+"project, and explore the rich ecosystem of FreeBSD within the context of "
+"open-source operating systems."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:63
+#, no-wrap
+msgid "What is FreeBSD?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:67
+msgid ""
+"FreeBSD is a versatile and open-source UNIX(R)-like operating system known "
+"for its exceptional stability, security, and performance. Developed by a "
+"dedicated community of volunteers, it's based on the Berkeley Software "
+"Distribution (BSD) UNIX operating system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:70
+msgid ""
+"FreeBSD offers a powerful and customizable environment suitable for a wide "
+"range of applications, from servers and embedded systems to desktops and "
+"networking equipment. Its commitment to open source principles ensures a "
+"transparent and collaborative development process, making FreeBSD a trusted "
+"choice for those seeking a reliable and highly adaptable operating system."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:72
+#, no-wrap
+msgid "Why is it called FreeBSD?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:76
+msgid ""
+"The name \"FreeBSD\" stems from its roots in the Berkeley Software "
+"Distribution (BSD) UNIX operating system, renowned for its contributions to "
+"the world of open-source software. The \"Free\" in FreeBSD signifies its "
+"commitment to the principles of free and open-source software, which grant "
+"users the freedom to study, modify, and distribute the code."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:78
+msgid ""
+"It is worth pointing out that the word \"free\" is being used in two ways "
+"here: one meaning \"at no cost\" and the other meaning \"do whatever you "
+"like\"."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:80
+#, no-wrap
+msgid "What is the goal of the FreeBSD Project?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:83
+msgid ""
+"The FreeBSD Project has a clear and unwavering goal: to provide a high-"
+"quality, open-source UNIX-like operating system that excels in terms of "
+"performance, security, and stability."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:87
+msgid ""
+"It aims to offer a versatile platform suitable for a wide range of computing "
+"needs, from servers and workstations to embedded systems and beyond. "
+"FreeBSD is developed with a strong commitment to open source principles, "
+"fostering a collaborative environment where contributions from a global "
+"community of developers help shape and refine the operating system. This "
+"dedication to quality, freedom, and reliability is what sets FreeBSD apart "
+"and drives its ongoing success as an open-source project."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:89
+#, no-wrap
+msgid "What uses cases is FreeBSD good for?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:96
+msgid ""
+"FreeBSD is a versatile operating system that excels in various use cases. "
+"It is particularly well-suited for server environments, where its stability "
+"and performance make it a popular choice for web hosting, databases, and "
+"networking applications. FreeBSD's robust security features also position "
+"it as a strong candidate for firewall and security appliance deployments. "
+"Beyond servers, FreeBSD can be tailored to function in specialized "
+"environments, including embedded systems and game console devices. Its "
+"adaptability, reliability, and open-source nature make FreeBSD a compelling "
+"choice for a wide range of computing needs."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:98
+#, no-wrap
+msgid "Who is responsible for FreeBSD?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:102
+msgid ""
+"FreeBSD is a community-driven open-source project with a decentralized "
+"structure. Its development and maintenance are carried out by a global "
+"community of dedicated volunteers, developers, and organizations who "
+"collaborate to enhance and expand the operating system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:104
+msgid ""
+"The key decisions concerning the FreeBSD project, such as the overall "
+"direction of the project or who is allowed to add code to the source tree, "
+"are made by a elected Core Team of 9 people."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:106
+msgid ""
+"This collaborative and community-driven approach has been fundamental to "
+"FreeBSD's success and longevity as a reliable and robust UNIX-like operating "
+"system."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:108
+#, no-wrap
+msgid "How can I contribute to FreeBSD? What can I do to help?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:112
+msgid ""
+"We accept all types of contributions: documentation, code, and even art. "
+"See the article on extref:{contributing}[Contributing to FreeBSD] for "
+"specific advice on how to do this."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:114
+msgid "And thanks for the thought!"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:116
+#, no-wrap
+msgid "Does the FreeBSD license have any restrictions?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:119
+msgid ""
+"FreeBSD is distributed under the https://www.FreeBSD.org/copyright/freebsd-"
+"license/[BSD License], which is known for its permissive nature."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:121
+msgid "This license places very few restrictions on how you can use FreeBSD:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:123
+msgid "Do not claim that you wrote this."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:124
+msgid "Do not sue us if it breaks."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:125
+msgid "Do not remove or modify the license."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:129
+msgid ""
+"The license means you are free to modify, distribute, and even sell FreeBSD "
+"without *being required to release your modifications as open source*. "
+"However, there are some minimal conditions, such as retaining the original "
+"copyright notice and disclaimers when distributing FreeBSD. Overall, the "
+"BSD License provides a high degree of freedom and flexibility, making "
+"FreeBSD an attractive choice for a wide range of applications and projects."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:131
+msgid ""
+"Code in our source tree which falls under the https://www.FreeBSD.org/"
+"copyright/COPYING[GNU General Public License (GPL)] or https://www.FreeBSD."
+"org/copyright/COPYING.LIB[GNU Library General Public License (LGPL)] comes "
+"with slightly more strings attached though, at least on the side of enforced "
+"access rather than the usual opposite."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:133
+#, no-wrap
+msgid "Can FreeBSD replace my current operating system?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:137
+msgid ""
+"For many users and administrators, yes. But this question is not quite that "
+"cut-and-dried."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:140
+msgid ""
+"FreeBSD is a powerful and versatile operating system that can replace or "
+"coexist with many other operating systems, depending on users and "
+"administrators specific needs. However, whether FreeBSD can replace your "
+"current operating system depends on factors such as your hardware, software "
+"requirements, and familiarity with FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:142
+msgid ""
+"While it offers a robust and feature-rich alternative, it's essential to "
+"evaluate your specific use case and compatibility requirements before making "
+"the switch."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:144
+msgid ""
+"If an application is only available on one operating system, that operating "
+"system cannot just be replaced."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:147
+msgid ""
+"Users migrating to FreeBSD from another UNIX-like environment will find "
+"FreeBSD to be similar. Non-UNIX users, like Windows(R) users, should expect "
+"to invest some additional time learning the UNIX way of doing things."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:149
+#, no-wrap
+msgid "Can FreeBSD run popular open source software?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:155
+msgid ""
+"Yes, FreeBSD is well-suited for running popular open source software. Its "
+"compatibility with a wide range of applications and libraries makes it a "
+"favorable choice for those looking to deploy and use open source software "
+"packages. FreeBSD provides a robust and stable environment that supports "
+"various programming languages, databases, web servers, and other software "
+"commonly used in the open source community. Its ports and packages system "
+"simplifies the installation and management of such software, ensuring that "
+"users can easily access and run their favorite open source tools and "
+"applications on FreeBSD with minimal hassle."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:157
+#, no-wrap
+msgid "How can I install software in FreeBSD?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:162
+msgid ""
+"FreeBSD offers multiple methods for software installation. One of the most "
+"common methods involves using the built-in man:pkg[8] package manager, which "
+"simplifies the process by fetching and installing pre-built binary "
+"packages. Another approach is to compile and install software from source "
+"code using the man:ports[7] collection, providing a flexible and "
+"customizable way to install software."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:164
+msgid ""
+"FreeBSD's documentation offer detailed guidance on both methods, ensuring "
+"that users can easily expand their system's capabilities with the software "
+"they need."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:166
+#, no-wrap
+msgid "What are the differences between FreeBSD, NetBSD, OpenBSD, and other open source BSD operating systems?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:170
+msgid ""
+"FreeBSD, NetBSD, OpenBSD and DragonFly BSD are all part of the open source "
+"BSD family, sharing common UNIX-like foundations, but each has its own "
+"distinct focus and priorities. These differences reflect the unique goals "
+"of each project, and while they share similarities, their specific strengths "
+"and emphases cater to different use cases and preferences within the BSD "
+"ecosystem."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:172
+#, no-wrap
+msgid "Is FreeBSD a Linux(R) distribution?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:175
+msgid "No, FreeBSD is *not* a Linux distribution."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:178
+msgid ""
+"While both FreeBSD and Linux are UNIX-like operating systems and share many "
+"similarities, they have distinct kernels. Linux uses the Linux kernel, "
+"whereas FreeBSD uses the FreeBSD kernel, which is based on the Berkeley "
+"Software Distribution (BSD) UNIX operating system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:180
+msgid ""
+"FreeBSD and Linux each have their own unique development communities, "
+"release cycles, and system architectures, making them separate and "
+"independent operating systems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:182
+msgid ""
+"FreeBSD provides its own set of advantages, including a different licensing "
+"model, system design, and userland utilities compared to Linux distributions."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:184
+#, no-wrap
+msgid "Is it possible to run Linux programs on FreeBSD?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:188
+msgid ""
+"Yes, FreeBSD provides a compatibility layer known as _linuxulator_ (man:"
+"linux[4]), allowing many Linux programs to function on FreeBSD. This "
+"feature facilitates the execution of a broad spectrum of Linux binaries "
+"without the necessity of a dedicated Linux environment."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:190
+msgid ""
+"Nevertheless, it's important to note that numerous widely used open-source "
+"software *have native FreeBSD versions available* through the ports and "
+"packages system."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/faq/_index.adoc:192
+#, no-wrap
+msgid "Installing FreeBSD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:197
+msgid ""
+"The process of installing FreeBSD is the initial step toward harnessing the "
+"power of this robust open-source operating system. This section provides "
+"essential information on where to obtain FreeBSD, detailed installation "
+"instructions, and insights into concepts like FreeBSD-CURRENT and FreeBSD-"
+"STABLE. It also delves into the release and snapshot schedules, post-"
+"installation configuration tools, package search methods, and addresses "
+"common questions regarding package updates."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:199
+#, no-wrap
+msgid "Where can I get FreeBSD?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:202
+msgid ""
+"FreeBSD is freely available for download from the link:https://www.FreeBSD."
+"org/where/[official FreeBSD website]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:205
+msgid ""
+"Additionally, FreeBSD may also be available through various mirror sites, "
+"ensuring accessibility to users worldwide. The link:https://www.FreeBSD.org/"
+"where/[official website] is the primary and most reliable source for "
+"obtaining the latest FreeBSD releases and updates, making it the ideal "
+"starting point for a FreeBSD journey."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:207
+#, no-wrap
+msgid "Where are the instructions for installing FreeBSD?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:210
+msgid ""
+"Installation instructions can be found at the extref:{handbook}bsdinstall/"
+"[Installing FreeBSD Chapter of the Handbook]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:212
+#, no-wrap
+msgid "What is the FreeBSD-CURRENT concept?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:216
+msgid ""
+"FreeBSD-CURRENT represents the development branch of the FreeBSD operating "
+"system. It is the most cutting-edge version of FreeBSD, where active "
+"development takes place."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:218
+msgid ""
+"While it incorporates the latest features, improvements, and experimental "
+"changes, it may not always be as stable as the FreeBSD-STABLE or release "
+"versions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:220
+msgid ""
+"FreeBSD-CURRENT serves as a platform for developers and enthusiasts who want "
+"to contribute to the future of FreeBSD and stay on the leading edge of its "
+"development, even though it may occasionally undergo significant changes and "
+"*is not recommended for production systems*."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:222
+#, no-wrap
+msgid "What is the FreeBSD-STABLE concept?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:227
+msgid ""
+"The FreeBSD-STABLE branch is a more stable development branch compared to "
+"CURRENT. It contains code that is undergoing further testing and refinement "
+"before being merged into the RELEASE branch. STABLE is a good choice for "
+"those who want to track FreeBSD's development but prefer a more stable "
+"environment than CURRENT."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:229
+#, no-wrap
+msgid "When are FreeBSD releases made of?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:234
+msgid ""
+"The {re} releases a new major version of FreeBSD about every 18 months and a "
+"new minor version about every 8 months, on average. Release dates are "
+"announced well in advance, so that the people working on the system know "
+"when their projects need to be finished and tested. A testing period "
+"precedes each release, to ensure that the addition of new features does not "
+"compromise the stability of the release."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:236
+#, no-wrap
+msgid "When are FreeBSD snapshots made?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:242
+msgid ""
+"FreeBSD snapshots are typically generated at regular intervals for all "
+"actively developed branches. These snapshots capture a moment in time of "
+"the FreeBSD source code and associated binary packages. The frequency of "
+"these snapshots may vary but is often done on a weekly or bi-weekly basis. "
+"These snapshots provide users with an opportunity to access the latest "
+"developments and changes in FreeBSD, helping them stay up-to-date with the "
+"project's progress."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:244
+#, no-wrap
+msgid "Is there a tool to perform post-installation configuration tasks?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:247
+msgid ""
+"Yes. man:bsdconfig[8] provides a nice interface to configure FreeBSD post-"
+"installation."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:249
+#, no-wrap
+msgid "How can I search for software to install in FreeBSD?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:252
+msgid ""
+"Searching for software to install in FreeBSD is made easy through the man:"
+"pkg[8] package manager and the `pkg search` command."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:255
+msgid ""
+"Users can utilize this command to search for available packages using "
+"keywords, package names, or descriptions. This feature helps users quickly "
+"locate the software they need within the extensive FreeBSD ports and "
+"packages collection, simplifying the process of adding new applications and "
+"tools to their FreeBSD systems."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:257
+#, no-wrap
+msgid "Why am I not getting the latest packages in my FreeBSD system?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:260
+msgid ""
+"The availability of the latest packages in FreeBSD can be influenced by "
+"various factors, including the package repository's update frequency and the "
+"specific version of FreeBSD being used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:265
+msgid ""
+"It should also be added that there are two branches for the FreeBSD ports. "
+"The most updated is called `latest` and the most stable is called "
+"`quarterly`. To use the latest packages it will be necessary to configure "
+"the `latest` branch. Information on how to configure branches can be found "
+"in the link:{handbook}ports/[Ports chapter of the Handbook]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/faq/_index.adoc:267
+#, no-wrap
+msgid "Hardware"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:272
+msgid ""
+"The Hardware section explores FreeBSD's compatibility with various hardware "
+"configurations. It covers a range of topics, including supported "
+"architectures, maximum RAM capacity, processor scalability, graphics card "
+"compatibility, Wi-Fi card support, and the inclusion of 10 Gigabit Ethernet "
+"network card support. Whether planning to deploy FreeBSD on servers, "
+"workstations, or specialized hardware, this section provides insights into "
+"FreeBSD's capabilities and limitations, offering information about hardware "
+"choices and configurations."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:274
+#, no-wrap
+msgid "What architectures does FreeBSD support?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:278
+msgid ""
+"FreeBSD boasts a versatile range of supported architectures, making it a "
+"flexible choice for a variety of hardware environments. Its compatibility "
+"extends to architectures such as `amd64`, `arm64`, `riscv` and more."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:280
+msgid ""
+"A complete list of supported architectures can be found on the link:https://"
+"www.FreeBSD.org/platforms/[platforms page]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:282
+#, no-wrap
+msgid "How much RAM does FreeBSD support?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:286
+msgid ""
+"FreeBSD as an operating system generally supports as much physical memory "
+"(RAM) as the platform it is running on does. Keep in mind that different "
+"platforms have different limits for memory."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:288
+msgid "For example, `amd64` platforms support up to 4TB of physical memory."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:290
+#, no-wrap
+msgid "How many processors does FreeBSD support?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:295
+msgid ""
+"FreeBSD's processor support varies across different architectures. On amd64 "
+"and arm64 systems, FreeBSD can efficiently harness the power of up to 1024 "
+"processors. For powerpc-based systems, FreeBSD supports up to 256 "
+"processors, while on risc-v systems, it can effectively utilize up to 16 "
+"processors."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:297
+#, no-wrap
+msgid "What graphics cards does FreeBSD support?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:300
+msgid ""
+"Popular graphics vendors like Intel(R), AMD(R) or NVIDIA(R) are well-"
+"supported."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:302
+msgid ""
+"A list of supported graphics cards from link:https://wiki.freebsd.org/"
+"Graphics/Intel-GPU-Matrix[Intel] and link:https://wiki.freebsd.org/Graphics/"
+"AMD-GPU-Matrix[AMD] can be found in the FreeBSD Wiki."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:304
+#, no-wrap
+msgid "What Wi-Fi cards does FreeBSD support?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:307
+msgid ""
+"Discover FreeBSD's compatibility with various Wi-Fi cards, making it easy to "
+"connect your system to wireless networks."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:309
+msgid "The list of USB Wi-Fi devices that are known to work well on FreeBSD:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:311
+msgid "RT5370 USB dongles (supports hostap mode)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:312
+msgid "TP-Link TL-WDN3200 (RT5592, man:if_run[4])"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:313
+msgid "TP-Link TL-WN725N v2 (RTL8188EU, man:rtwn[4])"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:314
+msgid "TP-Link Archer T4U (RTL8812AU, man:rtwn[4])"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:315
+msgid "D-Link DWA-131 (RTL8192CU, man:rtwn[4])"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:316
+msgid "D-Link DWA-171 rev A1 (RTL8821AU, man:rtwn[4])"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:317
+msgid "ASUS USB-N10 NANO (RTL8188CUS, man:rtwn[4])"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:319
+msgid ""
+"The list of Mini PCIe Wi-Fi devices that are known to work well on FreeBSD:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:321
+msgid "Realtek RTL8188CE Mini PCIe"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:323
+#, no-wrap
+msgid "Does FreeBSD support 10 Gigabit Ethernet network cards?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:327
+msgid ""
+"FreeBSD provides robust support for 10 Gigabit Ethernet network cards, "
+"making it a viable choice for high-speed networking environments. The "
+"FreeBSD kernel includes drivers for a wide range of 10 Gigabit Ethernet "
+"adapters from various manufacturers, ensuring seamless integration and "
+"optimal network performance."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:329
+msgid ""
+"More information can be obtained at the link:https://wiki.freebsd.org/"
+"Networking/10GbE[FreeBSD Wiki]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/faq/_index.adoc:331
+#, no-wrap
+msgid "Documentation and Support"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:335
+msgid ""
+"This section provides valuable resources for those seeking to deepen their "
+"knowledge of FreeBSD. It covers a range of topics, including recommended "
+"books for learning FreeBSD, avenues for commercial training and support, "
+"insights into understanding FreeBSD's internals, and where to find "
+"assistance within the FreeBSD community."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:337
+#, no-wrap
+msgid "What good books are there about FreeBSD?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:341
+msgid ""
+"FreeBSD enthusiasts and learners can explore a variety of informative books "
+"dedicated to the operating system. These books cover topics ranging from "
+"FreeBSD basics to advanced system administration and development."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:344
+msgid ""
+"Some notable titles include \"Absolute FreeBSD: The Complete Guide To "
+"FreeBSD\" by Michael W. Lucas, and the \"FreeBSD Mastery series\" also by "
+"Michael W. Lucas, among others. These resources offer valuable insights and "
+"knowledge to help users of all levels master FreeBSD and maximize its "
+"potential."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:346
+msgid ""
+"Apart from the books, The FreeBSD Project produces a wide range of "
+"documentation, available online in the link:https://docs.FreeBSD.org/"
+"[Documentation Portal]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:348
+#, no-wrap
+msgid "Where can I get commercial FreeBSD training and support?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:352
+msgid ""
+"For those seeking professional training and support for FreeBSD, several "
+"commercial providers offer tailored services. The FreeBSD project maintains "
+"a link:https://www.freebsd.org/commercial/[list of companies] from which "
+"support can be requested."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:354
+#, no-wrap
+msgid "How can I learn more about FreeBSD's internals?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:358
+msgid ""
+"To delve deeper into the inner workings of FreeBSD, interested individuals "
+"can explore resources like \"The Design And Implementation Of The FreeBSD "
+"Operating System\". The extref:{arch-handbook}[FreeBSD Architecture "
+"Handbook]. is another valuable resource that provides detailed information "
+"about FreeBSD's architecture, system organization, and design principles"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:360
+msgid ""
+"Additionally, reviewing the FreeBSD source code, available through the "
+"FreeBSD source repository, provides valuable insights into the operating "
+"system's core components."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:362
+#, no-wrap
+msgid "How can I get help in a FreeBSD system?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:367
+msgid ""
+"Getting assistance within a FreeBSD system is straightforward. FreeBSD "
+"offers a wealth of built-in documentation, accessible through the man:man[1] "
+"command, which provides comprehensive information about various commands and "
+"system components."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:369
+msgid ""
+"Additionally, the extref:{handbook}[FreeBSD Handbook], available both online "
+"and locally on the system, serves as a valuable resource for in-depth "
+"guidance."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:371
+msgid ""
+"If specific issues arise, seeking help from the FreeBSD community via "
+"mailing lists, forums, or IRC can provide timely solutions and insights from "
+"experienced FreeBSD users and developers."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/faq/_index.adoc:373
+#, no-wrap
+msgid "Community Questions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:376
+msgid ""
+"Explore this section to discover ways to engage with the FreeBSD community."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:379
+msgid ""
+"Learn about FreeBSD IRC channels for real-time discussions, web-based forums "
+"for sharing insights, and access to FreeBSD mailing lists and news groups "
+"for in-depth discussions and news updates."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:381
+#, no-wrap
+msgid "Are there FreeBSD IRC (Internet Relay Chat) channels?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:384
+msgid ""
+"Yes, most major IRC networks host a FreeBSD chat channel and the FreeBSD "
+"wiki holds an up to date link:https://wiki.freebsd.org/IRC/Channels[list of "
+"IRC channels]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:387
+msgid ""
+"Each of these channels are distinct and are not connected to each other. "
+"Since their chat styles differ, try each to find one suited to your chat "
+"style."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:389
+#, no-wrap
+msgid "Are there any web based forums to discuss FreeBSD?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:392
+msgid ""
+"The official FreeBSD forums are located at the link:https://forums.FreeBSD."
+"org/[FreeBSD Forums homepage]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:394
+#, no-wrap
+msgid "Where do I find info on the FreeBSD mailing lists?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:397
+msgid ""
+"The public mailing lists can be found at the link:https://lists.freebsd.org/"
+"[FreeBSD mailing lists]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/faq/_index.adoc:399
+#, no-wrap
+msgid "Miscellaneous Questions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:402
+msgid ""
+"Explore a variety of intriguing and practical queries about FreeBSD, "
+"covering topics from shell choices to system quirks and even the FreeBSD "
+"pet's name."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:404
+#, no-wrap
+msgid "Why is /bin/sh so minimal? Why does FreeBSD not use bash or another shell?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:410
+msgid ""
+"Many people need to write shell scripts which will be portable across many "
+"systems. That is why POSIX(R) specifies the shell and utility commands in "
+"great detail. Most scripts are written in Bourne shell (man:sh[1]), and "
+"because several important programming interfaces are specified to use the "
+"Bourne shell to interpret commands. As the Bourne shell is so often and "
+"widely used, it is important for it to be quick to start, be deterministic "
+"in its behavior, and have a small memory footprint."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:413
+msgid ""
+"The existing implementation is our best effort at meeting as many of these "
+"requirements simultaneously as we can. To keep `/bin/sh` small, we have not "
+"provided many of the convenience features that other shells have."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:415
+msgid ""
+"That is why other more featureful shells like `bash`, `scsh`, man:tcsh[1], "
+"and `zsh` are available."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:417
+#, no-wrap
+msgid "How do I use my delete key in sh and csh?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:420
+msgid "For the Bourne Shell, add the following lines to [.filename]#~/.shrc#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/faq/_index.adoc:424
+#, no-wrap
+msgid "bind ^[[3~ ed-delete-next-char # for xterm\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:427
+msgid "For the C Shell, add the following lines to [.filename]#~/.cshrc#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/faq/_index.adoc:431
+#, no-wrap
+msgid "bindkey ^[[3~ delete-char # for xterm\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:434
+#, no-wrap
+msgid "I have forgotten the root password! What do I do?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:441
+msgid ""
+"Do not panic! Restart the system, type `boot -s` at the `Boot:` prompt to "
+"enter single-user mode. At the question about the shell to use, hit kbd:"
+"[Enter] which will display a # prompt. Enter `mount -urw /` to remount the "
+"root file system read/write, then run `mount -a` to remount all the file "
+"systems. Run `passwd root` to change the `root` password then run man:"
+"exit[1] to continue booting."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/faq/_index.adoc:448
+msgid ""
+"If you are still prompted to give the `root` password when entering the "
+"single-user mode, it means that the console has been marked as `insecure` in "
+"[.filename]#/etc/ttys#. In this case, it will be required to boot from a "
+"FreeBSD installation disk, choose the [.guimenuitem]#Live CD# or [."
+"guimenuitem]#Shell# at the beginning of the install process and issue the "
+"commands mentioned above. Mount the specific partition in this case and "
+"then chroot to it. For example, replace `mount -urw /` with `mount /dev/"
+"ada0p1 /mnt; chroot /mnt` for a system on _ada0p1_."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/faq/_index.adoc:454
+msgid ""
+"If the root partition cannot be mounted from single-user mode, it is "
+"possible that the partitions are encrypted and it is impossible to mount "
+"them without the access keys. For more information see the section about "
+"encrypted disks in the FreeBSD extref:{handbook}disks/[Handbook, disks-"
+"encrypting]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:457
+#, no-wrap
+msgid "I made a mistake in rc.conf, or another startup file, and now I cannot edit it because the file system is read-only. What should I do?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:463
+msgid ""
+"Restart the system using `boot -s` at the loader prompt to enter single-user "
+"mode. When prompted for a shell pathname, press kbd:[Enter] and run `mount -"
+"urw /` to re-mount the root file system in read/write mode. You may also "
+"need to run `mount -a -t ufs` to mount the file system where your favorite "
+"editor is defined. If that editor is on a network file system, either "
+"configure the network manually before mounting the network file systems, or "
+"use an editor which resides on a local file system, such as man:ed[1]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:465
+msgid ""
+"In order to use a full screen editor such as man:vi[1] or man:emacs[1], run "
+"`export TERM=xterm` so that these editors can load the correct data from the "
+"man:termcap[5] database."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:468
+msgid ""
+"After performing these steps, edit [.filename]#/etc/rc.conf# to fix the "
+"syntax error. The error message displayed immediately after the kernel boot "
+"messages should indicate the number of the line in the file which is at "
+"fault."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:470
+#, no-wrap
+msgid "How much free memory is available?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:478
+msgid ""
+"There are a couple of kinds of \"free memory\". The most common is the "
+"amount of memory immediately available without reclaiming memory already in "
+"use. That is the size of the free pages queue plus some other reserved "
+"pages. This amount is exported by the `vm.stats.vm.v_free_count` man:"
+"sysctl[8], shown, for instance, by man:top[1]. Another kind of \"free "
+"memory\" is the total amount of virtual memory available to userland "
+"processes, which depends on the sum of swap space and usable memory. Other "
+"kinds of \"free memory\" descriptions are also possible, but it is "
+"relatively useless to define these, but rather it is important to make sure "
+"that the paging rate is kept low, and to avoid running out of swap space."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:480
+#, no-wrap
+msgid "My time is wrong, how can I change the timezone?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:483
+msgid "Use man:tzsetup[8]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:485
+#, no-wrap
+msgid "FreeBSD uses a lot of swap space even when the computer has free memory left. Why?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:489
+msgid ""
+"FreeBSD will proactively move entirely idle, unused pages of main memory "
+"into swap in order to make more main memory available for active use. This "
+"heavy use of swap is balanced by using the extra free memory for caching."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:492
+msgid ""
+"Note that while FreeBSD is proactive in this regard, it does not arbitrarily "
+"decide to swap pages when the system is truly idle. Thus, the system will "
+"not be all paged out after leaving it idle overnight."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:494
+#, no-wrap
+msgid "Why does top show very little free memory even when I have very few programs running?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:497
+msgid "The simple answer is that free memory is wasted memory."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:502
+msgid ""
+"Any memory that programs do not actively allocate is used within the FreeBSD "
+"kernel as disk cache. The values shown by man:top[1] labeled as `Inact` and "
+"`Laundry` are cached data at different aging levels. This cached data means "
+"the system does not have to access a slow disk again for data it has "
+"accessed recently, thus increasing overall performance. In general, a low "
+"value shown for `Free` memory in man:top[1] is good, provided it is not "
+"_very_ low."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:504
+#, no-wrap
+msgid "What is the cute little red guy's name?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:509
+msgid ""
+"He does not have one, and is just called \"the BSD daemon\". If you insist "
+"upon using a name, call him \"beastie\". Note that \"beastie\" is "
+"pronounced \"BSD\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:511
+msgid ""
+"More about the BSD daemon is available on his http://www.mckusick.com/"
+"beastie/index.html[home page]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:513
+#, no-wrap
+msgid "Can I use the BSD daemon image?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:518
+msgid ""
+"Perhaps. The BSD daemon is copyrighted by Marshall Kirk McKusick. Check "
+"his http://www.mckusick.com/beastie/mainpage/copyright.html[Statement on the "
+"Use of the BSD Daemon Figure] for detailed usage terms."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:522
+msgid ""
+"In summary, the image can be used in a tasteful manner, for personal use, so "
+"long as appropriate credit is given. Before using the logo commercially, "
+"contact {mckusick} for permission. More details are available on the http://"
+"www.mckusick.com/beastie/index.html[BSD Daemon's home page]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:524
+#, no-wrap
+msgid "Why should I care what color the bikeshed is?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:530
+msgid ""
+"The really, really short answer is that you should not. The somewhat longer "
+"answer is that just because you are capable of building a bikeshed does not "
+"mean you should stop others from building one just because you do not like "
+"the color they plan to paint it. This is a metaphor indicating that you "
+"need not argue about every little feature just because you know enough to do "
+"so. Some people have commented that the amount of noise generated by a "
+"change is inversely proportional to the complexity of the change."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:532
+msgid ""
+"The longer and complete answer is that after a very long argument about "
+"whether man:sleep[1] should take fractional second arguments, {phk} posted a "
+"long message entitled link:http://www.bikeshed.com[A bike shed (any color "
+"will do) on greener grass...]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/faq/_index.adoc:534
+#, no-wrap
+msgid "The FreeBSD Funnies"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:537
+msgid ""
+"Take a break from technicalities and dive into the playful side of FreeBSD."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:539
+#, no-wrap
+msgid "How cool is FreeBSD?"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/faq/_index.adoc:542
+#, no-wrap
+msgid "Has anyone done any temperature testing while running FreeBSD?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:546
+msgid ""
+"No, but we have done numerous taste tests on blindfolded volunteers who have "
+"also had 250 micrograms of LSD-25 administered beforehand. 35% of the "
+"volunteers said that FreeBSD tasted sort of orange, whereas GNU/Linux(R) "
+"tasted like purple haze. Neither group mentioned any significant variances "
+"in temperature."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:548
+msgid ""
+"Seriously, FreeBSD uses ACPI (Advanced Configuration and Power Interface), "
+"therefore FreeBSD can put the CPU into low power mode."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:550
+#, no-wrap
+msgid "Where does data written to/dev/null go?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:554
+msgid ""
+"It goes into a special data sink in the CPU where it is converted to heat "
+"which is vented through the heatsink / fan assembly. This is why CPU "
+"cooling is increasingly important; as people get used to faster processors, "
+"they become careless with their data and more and more of it ends up in [."
+"filename]#/dev/null#, overheating their CPUs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:556
+msgid ""
+"If you delete [.filename]#/dev/null# (which effectively disables the CPU "
+"data sink) your CPU may run cooler but your system will quickly become "
+"constipated with all that excess data and start to behave erratically."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:558
+msgid ""
+"If you have a fast network connection you can cool down your CPU by reading "
+"data out of [.filename]#/dev/random# and sending it off somewhere; however "
+"you run the risk of overheating your network connection and [.filename]#/# "
+"or angering your ISP, as most of the data will end up getting converted to "
+"heat by their equipment, but they generally have good cooling, so if you do "
+"not overdo it you should be OK."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/faq/_index.adoc:560
+#, no-wrap
+msgid "My colleague sits at the computer too much, how can I prank them?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:563
+msgid "Install package:games/sl[] and wait for they to mistype `sl` for `ls`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/faq/_index.adoc:565
+#, no-wrap
+msgid "Acknowledgments"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/faq/_index.adoc:567
+msgid ""
+"This FAQ has undergone countless revisions and improvements by a diverse "
+"group of contributors over the past decades."
+msgstr ""
diff --git a/documentation/content/en/books/fdp-primer/_index.adoc b/documentation/content/en/books/fdp-primer/_index.adoc
index d0ea71bfba..98409c970e 100644
--- a/documentation/content/en/books/fdp-primer/_index.adoc
+++ b/documentation/content/en/books/fdp-primer/_index.adoc
@@ -2,8 +2,8 @@
title: FreeBSD Documentation Project Primer for New Contributors
authors:
- author: The FreeBSD Documentation Project
-copyright: 1998-2021 DocEng
-trademarks: ["general"]
+copyright: 1998-2023 The FreeBSD Documentation Project
+trademarks: ["freebsd", "general", "git"]
description: Everything you need to know in order to start contributing to the FreeBSD Documentation Project
next: books/fdp-primer/preface
tags: ["FDP", "documentation", "FreeBSD", "Index"]
diff --git a/documentation/content/en/books/fdp-primer/_index.po b/documentation/content/en/books/fdp-primer/_index.po
new file mode 100644
index 0000000000..ae1139d104
--- /dev/null
+++ b/documentation/content/en/books/fdp-primer/_index.po
@@ -0,0 +1,61 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:20-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/fdp-primer/_index.adoc:1
+#, no-wrap
+msgid "Everything you need to know in order to start contributing to the FreeBSD Documentation Project"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/_index.adoc:1
+#: documentation/content/en/books/fdp-primer/_index.adoc:17
+#, no-wrap
+msgid "FreeBSD Documentation Project Primer for New Contributors"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/_index.adoc:50
+msgid "Abstract"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/_index.adoc:53
+msgid ""
+"Thank you for becoming a part of the FreeBSD Documentation Project. Your "
+"contribution is extremely valuable, and we appreciate it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/_index.adoc:55
+msgid ""
+"This primer covers details needed to start contributing to the FreeBSD "
+"Documentation Project, or FDP, including tools, software, and the philosophy "
+"behind the Documentation Project."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/_index.adoc:58
+msgid ""
+"This is a work in progress. Corrections and additions are always welcome."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/_index.adoc:59
+msgid "'''"
+msgstr ""
diff --git a/documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc b/documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc
index 3ad0e15b60..55ebe5b6dd 100644
--- a/documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc
+++ b/documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc
@@ -1,16 +1,16 @@
---
-title: Chapter 6. AsciiDoctor Primer
+title: Chapter 6. Asciidoctor Primer
prev: books/fdp-primer/doc-build
next: books/fdp-primer/rosetta
-description: A brief introduction to AsciiDoctor
-tags: ["AsciiDoc", "AsciiDoctor", "Primer", "Introduction", "Guide"]
+description: A brief introduction to Asciidoctor
+tags: ["AsciiDoc", "Asciidoctor", "Primer", "Introduction", "Guide"]
showBookMenu: true
weight: 7
-path: "/books/fdp-primer/"
+path: "/books/fdp-primer/asciidoctor-primer/"
---
[[asciidoctor-primer]]
-= AsciiDoctor Primer
+= Asciidoctor Primer
:doctype: book
:toc: macro
:toclevels: 1
@@ -49,7 +49,7 @@ endif::[]
Most FDP documentation is written with AsciiDoc.
This chapter explains what that means, how to read and understand the documentation source, and the techniques used.
-To get a complete reference of the AsciiDoctor capabilities please consult the link:https://docs.asciidoctor.org/home/[Asciidoctor documentation].
+To get a complete reference of the Asciidoctor capabilities please consult the link:https://docs.asciidoctor.org/home/[Asciidoctor documentation].
Some of the examples used in this chapter have been taken from the link:https://docs.asciidoctor.org/asciidoc/latest/syntax-quick-reference[AsciiDoc Syntax Quick Reference].
[[asciidoctor-primer-overview]]
@@ -97,7 +97,7 @@ To remove */tmp/foo*, use man:rm[1].
[[asciidoctor-headings]]
== Headings
-AsciiDoctor supports six headings levels.
+Asciidoctor supports six headings levels.
If the document type is `article` only one level 0 (`=`) can be used.
If the document type is `book` then there can be multiple level 0 (`=`) headings.
@@ -128,9 +128,9 @@ The following syntax is not correct.
....
= Document Title
-== Level 2
+== Level 1
-==== Level 4
+==== Level 3
....
====
@@ -155,7 +155,7 @@ And this is the second paragraph.
[[asciidoctor-lists]]
== Lists
-AsciiDoctor supports a few types of lists, the most common are `ordered` and `unordered`.
+Asciidoctor supports a few types of lists, the most common are `ordered` and `unordered`.
To get more information about lists, see link:https://docs.asciidoctor.org/asciidoc/latest/syntax-quick-reference/#lists[AsciiDoc Syntax Quick Reference].
[[asciidoctor-ordered-lists]]
@@ -214,14 +214,14 @@ link:https://www.FreeBSD.org[FreeBSD]
[NOTE]
====
-As the AsciiDoctor documentation describes, the `link` macro is not required when the target starts with a URL scheme like `https`.
-However, it is a good practice to do this anyway to ensure that AsciiDoctor renders the link correctly, especially in non-latin languages like Japanese.
+As the Asciidoctor documentation describes, the `link` macro is not required when the target starts with a URL scheme like `https`.
+However, it is a good practice to do this anyway to ensure that Asciidoctor renders the link correctly, especially in non-latin languages like Japanese.
====
[[asciidoctor-links-internal]]
=== Internal link
-To point to another book or article the AsciiDoctor variables should be used.
+To point to another book or article the Asciidoctor variables should be used.
For example, if we are in the `cups` article and we want to point to `ipsec-must` these steps should be used.
. Include the [.filename]#urls.adoc# file from [.filename]#~/doc/shared# folder.
@@ -230,7 +230,7 @@ For example, if we are in the `cups` article and we want to point to `ipsec-must
\include::shared/{lang}/urls.adoc[]
....
+
-. Then create a link using the AsciiDoctor variable to the `ipsec-must` article.
+. Then create a link using the Asciidoctor variable to the `ipsec-must` article.
+
....
extref:{ipsec-must}[IPSec-Must article]
@@ -240,8 +240,91 @@ And this would be rendered as.
+
extref:{ipsec-must}[IPSec-Must article]
+[[asciidoctor-images-icons]]
+== Images and Icons
+
+Images and icons play a crucial role in enhancing the overall user experience.
+These visual elements are strategically integrated to convey information, clarify concepts, and provide a visually engaging interface.
+
+[[asciidoctor-images]]
+=== Images
+
+Images help illustrate complex concepts, making them more accessible to users.
+
+The first step will be to add the image in the images directory in the path:
+
+* [.filename]#~/website/static/images/# for the website.
+* [.filename]#~/documentation/static/images/# for the documentation.
+
+For example, to add a new image to the FreeBSD installation process, the image will be saved to the path [.filename]#~/documentation/static/images/books/handbook/bsdinstall/new-image3.png#.
+
+The next step will be to configure the Asciidoctor attributes `images-path` and `imagesdir`.
+
+We are going to use as an example the header of the extref:{freebsd-releng}[FreeBSD Release Engineering] article.
+
+[source,asciidoc]
+....
+= FreeBSD Release Engineering
+:doctype: article
+
+[...]
+
+:images-path: articles/freebsd-releng/ <1>
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+
+[...]
+
+:imagesdir: ../../../images/{images-path} <2>
+endif::[]
+
+[...]
+
+....
+
+<.> Makes reference to the path inside [.filename]#/static/images# folder.
+<.> Makes reference to the Asciidoctor attribute.
+
+Once the image is in the correct path and the Asciidoctor attributes have been configured in the document, the `image` macro can be used.
+
+This is an example:
+
+....
+image::new-image3.png[New step in the FreeBSD install process]
+....
+
+[TIP]
+====
+To improve accessibility, it is mandatory to add descriptive text to each image.
+====
+
+[[asciidoctor-icons]]
+=== Icons
+
+Icons serve as intuitive symbols for quick recognition and navigation.
+
+The first step to use icons is to add the `icons` property to the Asciidoctor properties section, at the top of each document.
+
+....
+:icons: font
+....
+
+Once the Asciidoctor icon property has been set an icon supported by link:https://fontawesome.com/v4/icons/[Font Awesome] can be added.
+
+This is an example about how to use the `envelope` icon:
+
+....
+icon:envelope[link=mailto:test@example.com, title="contact"]
+....
+
+[TIP]
+====
+To improve the accessibility of the website, the `title` attribute is mandatory.
+====
+
[[asciidoctor-conclusion]]
== Conclusion
-This is the conclusion of this AsciiDoctor primer.
+This is the conclusion of this Asciidoctor primer.
For reasons of space and complexity, several things have not been covered in depth (or at all).
diff --git a/documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.po b/documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.po
new file mode 100644
index 0000000000..138ad921ab
--- /dev/null
+++ b/documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.po
@@ -0,0 +1,624 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:34-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:1
+#, no-wrap
+msgid "A brief introduction to Asciidoctor"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:1
+#, no-wrap
+msgid "Chapter 6. Asciidoctor Primer"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:13
+#, no-wrap
+msgid "Asciidoctor Primer"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:54
+msgid ""
+"Most FDP documentation is written with AsciiDoc. This chapter explains what "
+"that means, how to read and understand the documentation source, and the "
+"techniques used. To get a complete reference of the Asciidoctor "
+"capabilities please consult the link:https://docs.asciidoctor.org/home/"
+"[Asciidoctor documentation]. Some of the examples used in this chapter have "
+"been taken from the link:https://docs.asciidoctor.org/asciidoc/latest/syntax-"
+"quick-reference[AsciiDoc Syntax Quick Reference]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:56
+#, no-wrap
+msgid "Overview"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:62
+msgid ""
+"In the original days of computers, electronic text was simple. There were a "
+"few character sets like ASCII or EBCDIC, but that was about it. Text was "
+"text, and what you saw really was what you got. No frills, no formatting, "
+"no intelligence."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:67
+msgid ""
+"Inevitably, this was not enough. When text is in a machine-usable format, "
+"machines are expected to be able to use and manipulate it intelligently. "
+"Authors want to indicate that certain phrases should be emphasized, or added "
+"to a glossary, or made into hyperlinks. Filenames could be shown in a "
+"“typewriter” style font for viewing on screen, but as “italics” when "
+"printed, or any of a myriad of other options for presentation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:71
+msgid ""
+"It was once hoped that Artificial Intelligence (AI) would make this easy. "
+"The computer would read the document and automatically identify key phrases, "
+"filenames, text that the reader should type in, examples, and more. "
+"Unfortunately, real life has not happened quite like that, and computers "
+"still require assistance before they can meaningfully process text."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:74
+msgid ""
+"More precisely, they need help identifying what is what. Consider this text:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:76
+msgid "To remove [.filename]#/tmp/foo#, use man:rm[1]."
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:80
+#, no-wrap
+msgid "% rm /tmp/foo\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:85
+msgid ""
+"It is easy for the reader to see which parts are filenames, which are "
+"commands to be typed in, which parts are references to manual pages, and so "
+"on. But the computer processing the document cannot reliably determine "
+"this. For this we need markup."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:87
+msgid ""
+"The previous example is actually represented in this document like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:90
+#, no-wrap
+msgid "To remove */tmp/foo*, use man:rm[1].\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:95
+#, no-wrap
+msgid ""
+"[source,shell]\n"
+"----\n"
+"% rm /tmp/foo\n"
+"----\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:98
+#, no-wrap
+msgid "Headings"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:103
+msgid ""
+"Asciidoctor supports six headings levels. If the document type is `article` "
+"only one level 0 (`=`) can be used. If the document type is `book` then "
+"there can be multiple level 0 (`=`) headings."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:105
+msgid "This is an example of headings in an `article`."
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:107
+#, no-wrap
+msgid "Document Title (Level 0)"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:109
+#, no-wrap
+msgid "Level 1 Section Title"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:111
+#, no-wrap
+msgid "Level 2 Section Title"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:113
+#, no-wrap
+msgid "Level 3 Section Title"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:115
+#, no-wrap
+msgid "Level 4 Section Title"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:118
+msgid "====== Level 5 Section Title"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:119
+#, no-wrap
+msgid "Another Level 1 Section Title"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:125
+msgid "Section levels cannot be skipped when nesting sections."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:127
+msgid "The following syntax is not correct."
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:129
+#, no-wrap
+msgid "Document Title"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:131
+#, no-wrap
+msgid "Level 2"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:133
+#, no-wrap
+msgid "Level 4"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:138
+#, no-wrap
+msgid "Paragraphs"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:143
+msgid ""
+"Paragraphs don't require special markup in AsciiDoc. A paragraph is defined "
+"by one or more consecutive lines of text. To create a new paragraph leave "
+"one blank line."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:145
+msgid "For example, this is a heading with two paragraphs."
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:147
+#, no-wrap
+msgid "This is the heading"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:151
+msgid "This is the first paragraph. This is also the first paragraph."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:153
+msgid "And this is the second paragraph."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:156
+#, no-wrap
+msgid "Lists"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:160
+msgid ""
+"Asciidoctor supports a few types of lists, the most common are `ordered` and "
+"`unordered`. To get more information about lists, see link:https://docs."
+"asciidoctor.org/asciidoc/latest/syntax-quick-reference/#lists[AsciiDoc "
+"Syntax Quick Reference]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:162
+#, no-wrap
+msgid "Ordered lists"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:165
+msgid "To create an ordered list use the `.` character."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:167
+msgid "For example, this is an ordered list."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:173
+#, no-wrap
+msgid ""
+". First item\n"
+". Second item\n"
+".. Subsecond item\n"
+". Third item\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:176
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:197
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:240
+msgid "And this would be rendered as."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:178
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:199
+msgid "First item"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:179
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:200
+msgid "Second item"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:180
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:201
+msgid "Subsecond item"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:181
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:202
+msgid "Third item"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:183
+#, no-wrap
+msgid "Unordered lists"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:186
+msgid "To create an unordered list use the `*` character."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:188
+msgid "For example, this is an unordered list."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:194
+#, no-wrap
+msgid ""
+"* First item\n"
+"* Second item\n"
+"** Subsecond item\n"
+"* Third item\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:204
+#, no-wrap
+msgid "Links"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:207
+#, no-wrap
+msgid "External links"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:210
+msgid "To point to another website the `link` macro should be used."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:213
+#, no-wrap
+msgid "link:https://www.FreeBSD.org[FreeBSD]\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:219
+msgid ""
+"As the Asciidoctor documentation describes, the `link` macro is not required "
+"when the target starts with a URL scheme like `https`. However, it is a "
+"good practice to do this anyway to ensure that Asciidoctor renders the link "
+"correctly, especially in non-latin languages like Japanese."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:222
+#, no-wrap
+msgid "Internal link"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:226
+msgid ""
+"To point to another book or article the Asciidoctor variables should be "
+"used. For example, if we are in the `cups` article and we want to point to "
+"`ipsec-must` these steps should be used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:228
+msgid ""
+"Include the [.filename]#urls.adoc# file from [.filename]#~/doc/shared# "
+"folder."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:231
+#, no-wrap
+msgid "\\include::shared/{lang}/urls.adoc[]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:234
+msgid ""
+"Then create a link using the Asciidoctor variable to the `ipsec-must` "
+"article."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:237
+#, no-wrap
+msgid "extref:{ipsec-must}[IPSec-Must article]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:242
+msgid "extref:{ipsec-must}[IPSec-Must article]"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:244
+#, no-wrap
+msgid "Images and Icons"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:248
+msgid ""
+"Images and icons play a crucial role in enhancing the overall user "
+"experience. These visual elements are strategically integrated to convey "
+"information, clarify concepts, and provide a visually engaging interface."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:250
+#, no-wrap
+msgid "Images"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:253
+msgid ""
+"Images help illustrate complex concepts, making them more accessible to "
+"users."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:255
+msgid ""
+"The first step will be to add the image in the images directory in the path:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:257
+msgid "[.filename]#~/website/static/images/# for the website."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:258
+msgid "[.filename]#~/documentation/static/images/# for the documentation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:260
+msgid ""
+"For example, to add a new image to the FreeBSD installation process, the "
+"image will be saved to the path [.filename]#~/documentation/static/images/"
+"books/handbook/bsdinstall/new-image3.png#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:262
+msgid ""
+"The next step will be to configure the Asciidoctor attributes `images-path` "
+"and `imagesdir`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:264
+msgid ""
+"We are going to use as an example the header of the extref:{freebsd-releng}"
+"[FreeBSD Release Engineering] article."
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:267
+#, no-wrap
+msgid "FreeBSD Release Engineering"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:269
+msgid ":doctype: article"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:271
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:278
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:283
+msgid "[...]"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:273
+msgid ":images-path: articles/freebsd-releng/ <1>"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:276
+msgid "ifdef::env-beastie[] ifdef::backend-html5[]"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:281
+msgid ":imagesdir: ../../../images/{images-path} <2> endif::[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:287
+msgid "Makes reference to the path inside [.filename]#/static/images# folder."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:288
+msgid "Makes reference to the Asciidoctor attribute."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:290
+msgid ""
+"Once the image is in the correct path and the Asciidoctor attributes have "
+"been configured in the document, the `image` macro can be used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:292
+msgid "This is an example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:295
+#, no-wrap
+msgid "image::new-image3.png[New step in the FreeBSD install process]\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:300
+msgid ""
+"To improve accessibility, it is mandatory to add descriptive text to each "
+"image."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:303
+#, no-wrap
+msgid "Icons"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:306
+msgid "Icons serve as intuitive symbols for quick recognition and navigation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:308
+msgid ""
+"The first step to use icons is to add the `icons` property to the "
+"Asciidoctor properties section, at the top of each document."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:311
+#, no-wrap
+msgid ":icons: font\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:314
+msgid ""
+"Once the Asciidoctor icon property has been set an icon supported by link:"
+"https://fontawesome.com/v4/icons/[Font Awesome] can be added."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:316
+msgid "This is an example about how to use the `envelope` icon:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:319
+#, no-wrap
+msgid "icon:envelope[link=mailto:test@example.com, title=\"contact\"]\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:324
+msgid ""
+"To improve the accessibility of the website, the `title` attribute is "
+"mandatory."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:327
+#, no-wrap
+msgid "Conclusion"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:330
+msgid ""
+"This is the conclusion of this Asciidoctor primer. For reasons of space and "
+"complexity, several things have not been covered in depth (or at all)."
+msgstr ""
diff --git a/documentation/content/en/books/fdp-primer/book.adoc b/documentation/content/en/books/fdp-primer/book.adoc
index 248a2ee0ee..e7bf44db97 100644
--- a/documentation/content/en/books/fdp-primer/book.adoc
+++ b/documentation/content/en/books/fdp-primer/book.adoc
@@ -2,9 +2,9 @@
title: FreeBSD Documentation Project Primer for New Contributors
authors:
- author: The FreeBSD Documentation Project
-copyright: 1998-2021 DocEng
+copyright: 1998-2023 The FreeBSD Documentation Project
description: Everything you need to know in order to start contributing to the FreeBSD Documentation Project
-trademarks: ["general"]
+trademarks: ["freebsd", "general", "git"]
tags: ["FDP", "documentation", "FreeBSD", "Index"]
add_split_page_link: true
---
@@ -82,12 +82,16 @@ include::{chapters-path}translations/_index.adoc[leveloffset=+1]
include::{chapters-path}po-translations/_index.adoc[leveloffset=+1]
+include::{chapters-path}weblate/_index.adoc[leveloffset=+1]
+
include::{chapters-path}manual-pages/_index.adoc[leveloffset=+1]
include::{chapters-path}writing-style/_index.adoc[leveloffset=+1]
include::{chapters-path}editor-config/_index.adoc[leveloffset=+1]
+include::{chapters-path}trademarks/_index.adoc[leveloffset=+1]
+
include::{chapters-path}see-also/_index.adoc[leveloffset=+1]
:sectnums!:
diff --git a/documentation/content/en/books/fdp-primer/book.po b/documentation/content/en/books/fdp-primer/book.po
new file mode 100644
index 0000000000..9fdf52a9d8
--- /dev/null
+++ b/documentation/content/en/books/fdp-primer/book.po
@@ -0,0 +1,61 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:20-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/fdp-primer/book.adoc:1
+#, no-wrap
+msgid "Everything you need to know in order to start contributing to the FreeBSD Documentation Project"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/book.adoc:1
+#: documentation/content/en/books/fdp-primer/book.adoc:12
+#, no-wrap
+msgid "FreeBSD Documentation Project Primer for New Contributors"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/book.adoc:50
+msgid "Abstract"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/book.adoc:52
+msgid ""
+"Thank you for becoming a part of the FreeBSD Documentation Project. Your "
+"contribution is extremely valuable, and we appreciate it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/book.adoc:54
+msgid ""
+"This primer covers details needed to start contributing to the FreeBSD "
+"Documentation Project, or FDP, including tools, software, and the philosophy "
+"behind the Documentation Project."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/book.adoc:56
+msgid ""
+"This is a work in progress. Corrections and additions are always welcome."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/book.adoc:58
+msgid "'''"
+msgstr ""
diff --git a/documentation/content/en/books/fdp-primer/doc-build/_index.adoc b/documentation/content/en/books/fdp-primer/doc-build/_index.adoc
index fe360864e5..3a3795aefe 100644
--- a/documentation/content/en/books/fdp-primer/doc-build/_index.adoc
+++ b/documentation/content/en/books/fdp-primer/doc-build/_index.adoc
@@ -6,7 +6,7 @@ description: Describes the FreeBSD Documentation Build Process
tags: ["build", "process", "make"]
showBookMenu: true
weight: 6
-path: "/books/fdp-primer/"
+path: "/books/fdp-primer/doc-build/"
---
[[doc-build]]
@@ -115,13 +115,13 @@ To render the documentation and the website to `html` use one of the following e
Advanced build examples are given below:
[[documentation-build-example-verbose]]
-.Build the documentation with verbose and debug messages
+.Build English and Spanish documentation with verbose and debug messages
[example]
====
[source,shell]
....
% cd ~/doc/documentation
-% make HUGO_ARGS="--verbose --debug --path-warnings"
+% make DOC_LANG="en es" HUGO_ARGS="--verbose --debug"
....
====
@@ -136,11 +136,11 @@ Advanced build examples are given below:
....
This webserver runs on `localhost`, port `1313` by default.
-To serve the content with Hugo’s internal webserver binding a specific IP address:
+To serve the content with Hugo’s internal webserver binding a specific IP address and port:
[source,shell]
....
-% make run BIND=192.168.15.10
+% make run BIND=192.168.15.10 HUGO_ARGS="-p 8080"
....
A `hostname` can also be set as base url to Hugo’s internal webserver:
@@ -151,6 +151,25 @@ A `hostname` can also be set as base url to Hugo’s internal webserver:
....
====
+[[documentation-build-example-offline]]
+.Build documentation in html for offline usage
+[example]
+====
+[source,shell]
+....
+% cd ~/doc/documentation
+% make html
+....
+
+To compress the html output, add `DOC_HTML_ARCHIVE=1`:
+
+[source,shell]
+....
+% cd ~/doc/documentation
+% DOC_HTML_ARCHIVE=1 make html
+....
+====
+
[[doc-build-rendering-pdf]]
=== Rendering to pdf
diff --git a/documentation/content/en/books/fdp-primer/doc-build/_index.po b/documentation/content/en/books/fdp-primer/doc-build/_index.po
new file mode 100644
index 0000000000..40be7f74c0
--- /dev/null
+++ b/documentation/content/en/books/fdp-primer/doc-build/_index.po
@@ -0,0 +1,1205 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-09-09 18:12-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:1
+#, no-wrap
+msgid "Describes the FreeBSD Documentation Build Process"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:1
+#, no-wrap
+msgid "Chapter 5. The FreeBSD Documentation Build Process"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:13
+#, no-wrap
+msgid "The FreeBSD Documentation Build Process"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:51
+msgid ""
+"This chapter covers organization of the documentation build process and how "
+"man:make[1] is used to control it."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:53
+#, no-wrap
+msgid "Rendering AsciiDoc into Output"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:56
+msgid ""
+"Different types of output can be produced from a single AsciiDoc source file."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:60
+#, no-wrap
+msgid "Formats"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:61
+#, no-wrap
+msgid "File Type"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:63
+#, no-wrap
+msgid "Description"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:64
+#, no-wrap
+msgid "`html`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:65
+#, no-wrap
+msgid "HTML"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:67
+#, no-wrap
+msgid "An `article` or `book` chapter."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:68
+#, no-wrap
+msgid "`pdf`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:69
+#, no-wrap
+msgid "PDF"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:71
+#, no-wrap
+msgid "Portable Document Format."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:72
+#, no-wrap
+msgid "`epub`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:73
+#, no-wrap
+msgid "EPUB"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:75
+#, no-wrap
+msgid ""
+"Electronic Publication.\n"
+"ePub file format."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:78
+#, no-wrap
+msgid "Rendering to html"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:81
+msgid ""
+"To render the documentation and the website to `html` use one of the "
+"following examples."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:83
+#, no-wrap
+msgid "Build the documentation"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:90
+#, no-wrap
+msgid ""
+"% cd ~/doc/documentation\n"
+"% make\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:94
+#, no-wrap
+msgid "Build the website"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:101
+#, no-wrap
+msgid ""
+"% cd ~/doc/website\n"
+"% make\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:105
+#, no-wrap
+msgid "Build the entire documentation project"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:112
+#, no-wrap
+msgid ""
+"% cd ~/doc\n"
+"% make -j2\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:116
+msgid "Advanced build examples are given below:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:118
+#, no-wrap
+msgid "Build English and Spanish documentation with verbose and debug messages"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:125
+#, no-wrap
+msgid ""
+"% cd ~/doc/documentation\n"
+"% make DOC_LANG=\"en es\" HUGO_ARGS=\"--verbose --debug\"\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:129
+#, no-wrap
+msgid "Build and serve the content with Hugo’s internal webserver"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:136
+#, no-wrap
+msgid ""
+"% cd ~/doc/documentation\n"
+"% make run\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:138
+msgid "This webserver runs on `localhost`, port `1313` by default."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:140
+msgid ""
+"To serve the content with Hugo’s internal webserver binding a specific IP "
+"address and port:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:144
+#, no-wrap
+msgid "% make run BIND=192.168.15.10 HUGO_ARGS=\"-p 8080\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:147
+msgid "A `hostname` can also be set as base url to Hugo’s internal webserver:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:151
+#, no-wrap
+msgid "% make run BIND=192.168.15.10 HOSTNAME=example.com\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:155
+#, no-wrap
+msgid "Build documentation in html for offline usage"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:162
+#, no-wrap
+msgid ""
+"% cd ~/doc/documentation\n"
+"% make html\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:165
+msgid "To compress the html output, add `DOC_HTML_ARCHIVE=1`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:170
+#, no-wrap
+msgid ""
+"% cd ~/doc/documentation\n"
+"% DOC_HTML_ARCHIVE=1 make html\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:174
+#, no-wrap
+msgid "Rendering to pdf"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:177
+msgid ""
+"To render the documentation to `pdf`, use one of the following examples."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:179
+#, no-wrap
+msgid "Build all documents in pdf"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:186
+#, no-wrap
+msgid ""
+"% cd ~/doc/documentation\n"
+"% make pdf\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:190
+#, no-wrap
+msgid "Build all articles in pdf"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:197
+#, no-wrap
+msgid ""
+"% cd ~/doc/documentation\n"
+"% make pdf-articles\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:201
+#, no-wrap
+msgid "Build all books in pdf"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:208
+#, no-wrap
+msgid ""
+"% cd ~/doc/documentation\n"
+"% make pdf-books\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:212
+#, no-wrap
+msgid "Build documents in pdf for specific languages"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:219
+#, no-wrap
+msgid ""
+"% cd ~/doc/documentation\n"
+"% make DOC_LANG=\"en\" pdf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:221
+msgid "This will build all English documents in pdf."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:226
+#, no-wrap
+msgid ""
+"% cd ~/doc/documentation\n"
+"% make DOC_LANG=\"en fr\" pdf-books\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:228
+msgid "This will build all English and French books in pdf."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:231
+#, no-wrap
+msgid "The FreeBSD Documentation Build Toolset"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:234
+msgid "These are the tools used to build and install the FDP documentation."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:236
+msgid "The primary build tool is man:make[1], specifically Berkeley Make."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:237
+msgid "Hugo"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:238
+msgid "AsciiDoctor"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:239
+msgid "Git"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:241
+#, no-wrap
+msgid "Understanding the Makefile in the Documentation Tree"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:244
+msgid ""
+"There are three [.filename]#Makefile# files for building some or all of the "
+"documentation project."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:246
+msgid ""
+"The [.filename]#Makefile# in the [.filename]#documentation# directory will "
+"build only the documentation."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:247
+msgid ""
+"The [.filename]#Makefile# in the [.filename]#website# directory will build "
+"only the website."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:248
+msgid ""
+"The [.filename]#Makefile# at the top of the tree will build both the "
+"documentation and the website."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:251
+msgid ""
+"The [.filename]#Makefile# appearing in subdirectories also support `make "
+"run` to serve built content with Hugo's internal webserver. This webserver "
+"runs on port 1313 by default."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:253
+#, no-wrap
+msgid "Documentation Makefile"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:256
+msgid "This [.filename]#Makefile# takes the following form:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:281
+#, no-wrap
+msgid ""
+"# Generate the FreeBSD documentation\n"
+"#\n"
+"# Copyright (c) 2020-2021, The FreeBSD Documentation Project\n"
+"# Copyright (c) 2020-2021, Sergio Carlavilla <carlavilla@FreeBSD.org>\n"
+"#\n"
+"# Targets intended for use on the command line\n"
+"#\n"
+"# all (default)\t-\tgenerate the books TOC and compile all the documentation\n"
+"# clean\t\t- \tremoves generated files\n"
+"# run\t\t-\tserves the built documentation site for local browsing\n"
+"# pdf\t\t-\tbuild PDF versions of the articles and books.\n"
+"# html\t\t-\tbuild HTML versions of the articles and books for\n"
+"#\t\t\toffline use.\n"
+"#\t\t\tIf variable DOC_HTML_ARCHIVE is set, all documents will be\n"
+"#\t\t\tarchived/compressed, and only these files will be kept in the public\n"
+"#\t\t\tdirectory.\n"
+"# epub\t\t-\tbuild EPUB versions of the articles and books (Experimental).\n"
+"#\n"
+"# The run target uses hugo's built-in webserver to make the documentation site\n"
+"# available for local browsing. The documentation should have been built prior\n"
+"# to attempting to use the `run` target. By default, hugo will start its\n"
+"# webserver on port 1313.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:283
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:565
+#, no-wrap
+msgid "MAINTAINER=carlavilla@FreeBSD.org <.>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:288
+#, no-wrap
+msgid ""
+"# List of languages without book translations\n"
+"ARTICLEONLY_LANGS=\tbn-bd da ko tr\n"
+"# List of languages without article translations\n"
+"BOOKONLY_LANGS=\t\tmn\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:291
+#, no-wrap
+msgid ""
+"# List of all languages we have content for\n"
+"ALL_LANGUAGES=\tbn-bd da de el en es fr hu it ja ko mn nl pl pt-br ru tr zh-cn zh-tw <.>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:293
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:570
+#, no-wrap
+msgid "LOCALBASE?=\t/usr/local\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:300
+#, no-wrap
+msgid ""
+"RUBY_CMD =\t${LOCALBASE}/bin/ruby <.>\n"
+"HUGO_CMD =\t${LOCALBASE}/bin/hugo <.>\n"
+"HUGO_ARGS?=\t--verbose --minify\n"
+"HUGO_OFFLINE_ARGS?= \t--environment offline --verbose --minify\n"
+"ASCIIDOCTOR_CMD=\t${LOCALBASE}/bin/asciidoctor\n"
+"ASCIIDOCTORPDF_CMD=\t${LOCALBASE}/bin/asciidoctor-pdf\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:310
+#, no-wrap
+msgid ""
+".if defined(DOC_LANG) && !empty(DOC_LANG)\n"
+"LANGUAGES=\t${DOC_LANG:S/,/ /g}\n"
+".if ${LANGUAGES:Men} == \"\" && ${.TARGETS:Mpdf*} == \"\" && ${.TARGETS:Mhtml*} == \"\"\n"
+".warning \"Warning: cannot skip 'en'; adding it back\"\n"
+"LANGUAGES+=\ten\n"
+".endif\n"
+".else\n"
+"LANGUAGES=\t${ALL_LANGUAGES}\n"
+".endif\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:313
+#, no-wrap
+msgid ""
+"RUBYLIB =\t../shared/lib\n"
+".export\tRUBYLIB\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:317
+#, no-wrap
+msgid ""
+"RUN_DEPENDS=\t${HUGO_CMD} \\\n"
+"\t\t${LOCALBASE}/bin/asciidoctor \\\n"
+"\t\t${LOCALBASE}/bin/rougify\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:327
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:586
+#, no-wrap
+msgid ""
+".ifndef HOSTNAME\n"
+". ifdef BIND\n"
+".HOST=$(BIND)\n"
+". else\n"
+".HOST=localhost\n"
+". endif\n"
+".else\n"
+".HOST=$(HOSTNAME)\n"
+".endif\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:334
+#, no-wrap
+msgid ""
+"# Strip the languages with only articles from the list of languages we\n"
+"# will use to build books.\n"
+"BOOK_LANGS= ${LANGUAGES}\n"
+".for a in ${ARTICLEONLY_LANGS}\n"
+"BOOK_LANGS:=\t${BOOK_LANGS:N${a}}\n"
+".endfor\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:341
+#, no-wrap
+msgid ""
+"# Strip the languages with only books from the list of languages we\n"
+"# will use to build articles.\n"
+"ARTICLE_LANGS= ${LANGUAGES}\n"
+".for a in ${BOOKONLY_LANGS}\n"
+"ARTICLE_LANGS:=\t${ARTICLE_LANGS:N${a}}\n"
+".endfor\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:350
+#, no-wrap
+msgid ""
+"# Take the list of all languages, and take out the ones we have been\n"
+"# asked for. We'll feed this to hugo.\n"
+"SKIP_LANGS=\n"
+".for a in ${ALL_LANGUAGES}\n"
+".if ${LANGUAGES:M${a}} == \"\"\n"
+"SKIP_LANGS+= ${a}\n"
+".endif\n"
+".endfor\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:352
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:607
+#, no-wrap
+msgid ".ORDER: all run <.>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:357
+#, no-wrap
+msgid ""
+".ORDER: requirements <.>\n"
+".ORDER: starting-message\n"
+".ORDER: starting-message build\n"
+".ORDER: build\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:360
+#, no-wrap
+msgid ""
+"all: requirements starting-message generate-pgpkeys-txt build\n"
+"run: requirements starting-message generate-pgpkeys-txt run-local\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:363
+#, no-wrap
+msgid ""
+"# clean does not call pdf-clean as that is a subset of hugo-clean\n"
+"clean: hugo-clean pgp-clean\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:370
+#, no-wrap
+msgid ""
+"requirements:\n"
+".for dep in ${RUN_DEPENDS}\n"
+".if !exists(${dep})\n"
+"\t@(echo ${dep} not found, please run 'pkg install docproj'; exit 1)\n"
+".endif\n"
+".endfor\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:375
+#, no-wrap
+msgid ""
+"requirements-pdf:\n"
+".if !exists(${LOCALBASE}/bin/asciidoctor-pdf)\n"
+"\t@(echo ${LOCALBASE}/bin/asciidoctor-pdf not found, please run 'pkg install rubygem-asciidoctor-pdf'; exit 1)\n"
+".endif\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:380
+#, no-wrap
+msgid ""
+"requirements-epub:\n"
+".if !exists(${LOCALBASE}/bin/asciidoctor-epub3)\n"
+"\t@(echo ${LOCALBASE}/bin/asciidoctor-epub3 not found, please run 'pkg install rubygem-asciidoctor-epub3'; exit 1)\n"
+".endif\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:387
+#, no-wrap
+msgid ""
+"starting-message: .PHONY <.>\n"
+"\t@echo ---------------------------------------------------------------\n"
+"\t@echo Building the documentation\n"
+"\t@echo included languages: ${LANGUAGES}\n"
+"\t@echo excluded languages: ${SKIP_LANGS}\n"
+"\t@echo ---------------------------------------------------------------\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:389
+#, no-wrap
+msgid "generate-pgpkeys-txt: static/pgpkeys/pgpkeys.txt\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:392
+#, no-wrap
+msgid ""
+"static/pgpkeys/pgpkeys.txt: static/pgpkeys/*key\n"
+"\t${RUBY_CMD} ./tools/global-pgpkeys-creator.rb\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:396
+#, no-wrap
+msgid ""
+"run-local: .PHONY <.>\n"
+"\tHUGO_DISABLELANGUAGES=\"${SKIP_LANGS}\" ${HUGO_CMD} server \\\n"
+"\t\t${HUGO_ARGS} -D $(BIND:D--bind=$(BIND)) --baseURL=\"http://$(.HOST):1313\"\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:399
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:641
+#, no-wrap
+msgid ""
+"build: .PHONY <.>\n"
+"\tHUGO_DISABLELANGUAGES=\"${SKIP_LANGS}\" ${HUGO_CMD} ${HUGO_ARGS}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:402
+#, no-wrap
+msgid ""
+"build-offline: .PHONY\n"
+"\tHUGO_DISABLELANGUAGES=\"${SKIP_LANGS}\" ${HUGO_CMD} ${HUGO_OFFLINE_ARGS}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:405
+#, no-wrap
+msgid ""
+"pgp-clean: .PHONY\n"
+"\trm -f static/pgpkeys/pgpkeys.txt\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:408
+#, no-wrap
+msgid ""
+"hugo-clean: .PHONY\n"
+"\trm -rf resources public\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:414
+#, no-wrap
+msgid ""
+"#\n"
+"# PDF targets\n"
+"# Use DOC_LANG to choose the language, e.g., make DOC_LANG=\"en fr\" pdf-books\n"
+"#\n"
+"pdf: pdf-articles pdf-books\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:419
+#, no-wrap
+msgid ""
+"pdf-books: requirements-pdf\n"
+".for _lang in ${BOOK_LANGS}\n"
+"\t./tools/asciidoctor.sh books ${_lang} pdf\n"
+".endfor\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:424
+#, no-wrap
+msgid ""
+"pdf-articles: requirements-pdf\n"
+".for _lang in ${ARTICLE_LANGS}\n"
+"\t./tools/asciidoctor.sh articles ${_lang} pdf\n"
+".endfor\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:426
+#, no-wrap
+msgid "pdf-clean: pdf-articles-clean pdf-books-clean\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:433
+#, no-wrap
+msgid ""
+"pdf-books-clean:\n"
+".for _lang in ${BOOK_LANGS}\n"
+"\trm -fr ${.CURDIR}/public/${_lang}/books\n"
+"\t-rmdir ${.CURDIR}/public/${_lang}\n"
+".endfor\n"
+"\t-rmdir ${.CURDIR}/public/\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:442
+#, no-wrap
+msgid ""
+"pdf-articles-clean:\n"
+".for _lang in ${ARTICLE_LANGS}\n"
+"\trm -fr ${.CURDIR}/public/${_lang}/articles\n"
+".if !exists(${.CURDIR}/public/${_lang}/books)\n"
+"\trm -fr ${.CURDIR}/public/${_lang}\n"
+".endif\n"
+".endfor\n"
+"\t-rmdir ${.CURDIR}/public\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:447
+#, no-wrap
+msgid ""
+"#\n"
+"# HTML targets\n"
+"#\n"
+"html: build-offline html-clean-global html-clean-articles html-clean-books html-archive html-archive-clean-files\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:449
+#, no-wrap
+msgid "html-clean: hugo-clean\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:453
+#, no-wrap
+msgid ""
+"html-clean-global:\n"
+"\trm -fr ${.CURDIR}/public/index.html\n"
+"\trm -rf pgpkeys js\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:459
+#, no-wrap
+msgid ""
+"html-clean-articles:\n"
+".for _lang in ${ARTICLE_LANGS}\n"
+"\trm -fr ${.CURDIR}/public/${_lang}/index.html\n"
+"\trm -fr ${.CURDIR}/public/${_lang}/articles/index.html\n"
+".endfor\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:464
+#, no-wrap
+msgid ""
+"html-clean-books:\n"
+".for _lang in ${BOOK_LANGS}\n"
+"\trm -fr ${.CURDIR}/public/${_lang}/books/index.html\n"
+".endfor\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:474
+#, no-wrap
+msgid ""
+"html-archive:\n"
+".if defined(DOC_HTML_ARCHIVE)\n"
+".for _lang in ${ARTICLE_LANGS}\n"
+"\t./tools/asciidoctor.sh articles ${_lang} archive\n"
+".endfor\n"
+".for _lang in ${BOOK_LANGS}\n"
+"\t./tools/asciidoctor.sh books ${_lang} archive\n"
+".endfor\n"
+".endif\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:480
+#, no-wrap
+msgid ""
+"html-archive-clean-files:\n"
+".if defined(DOC_HTML_ARCHIVE)\n"
+"\tfind ${.CURDIR}/public/ ! -name '*.pdf' ! -name '*.tar.gz' -type f -delete\n"
+"\tfind ${.CURDIR}/public/ -type d -empty -delete\n"
+".endif\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:486
+#, no-wrap
+msgid ""
+"#\n"
+"# EPUB targets\n"
+"# Use DOC_LANG to choose the language, e.g., make DOC_LANG=\"en fr\" epub-books\n"
+"#\n"
+"epub: epub-articles epub-books\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:499
+#, no-wrap
+msgid ""
+"epub-books: requirements-epub\n"
+"\t@echo ---------------------------------------------------------------\n"
+"\t@echo !!! EPUB output is experimental !!!\n"
+"\t@echo\n"
+"\t@echo Asciidoctor EPUB3 is currently alpha software. Use accordingly. Although the\n"
+"\t@echo bulk of AsciiDoc content is converted, there’s still work needed to fill in\n"
+"\t@echo gaps where conversion is incomplete or unstyled.\n"
+"\t@echo https://docs.asciidoctor.org/epub3-converter/latest/#project-status\n"
+"\t@echo ---------------------------------------------------------------\n"
+".for _lang in ${BOOK_LANGS}\n"
+"\t./tools/asciidoctor.sh books ${_lang} epub\n"
+".endfor\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:512
+#, no-wrap
+msgid ""
+"epub-articles: requirements-epub\n"
+"\t@echo ---------------------------------------------------------------\n"
+"\t@echo !!! EPUB output is experimental !!!\n"
+"\t@echo\n"
+"\t@echo Asciidoctor EPUB3 is currently alpha software. Use accordingly. Although the\n"
+"\t@echo bulk of AsciiDoc content is converted, there’s still work needed to fill in\n"
+"\t@echo gaps where conversion is incomplete or unstyled.\n"
+"\t@echo https://docs.asciidoctor.org/epub3-converter/latest/#project-status\n"
+"\t@echo ---------------------------------------------------------------\n"
+".for _lang in ${ARTICLE_LANGS}\n"
+"\t./tools/asciidoctor.sh articles ${_lang} epub\n"
+".endfor\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:514
+#, no-wrap
+msgid "epub-clean: epub-articles-clean epub-books-clean\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:521
+#, no-wrap
+msgid ""
+"epub-books-clean:\n"
+".for _lang in ${BOOK_LANGS}\n"
+"\trm -fr ${.CURDIR}/public/${_lang}/books\n"
+"\t-rmdir ${.CURDIR}/public/${_lang}\n"
+".endfor\n"
+"\t-rmdir ${.CURDIR}/public/\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:530
+#, no-wrap
+msgid ""
+"epub-articles-clean:\n"
+".for _lang in ${ARTICLE_LANGS}\n"
+"\trm -fr ${.CURDIR}/public/${_lang}/articles\n"
+".if !exists(${.CURDIR}/public/${_lang}/books)\n"
+"\trm -fr ${.CURDIR}/public/${_lang}\n"
+".endif\n"
+".endfor\n"
+"\t-rmdir ${.CURDIR}/public\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:533
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:655
+msgid "The `MAINTAINER` flag specifies who is the maintainer of this Makefile."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:534
+msgid ""
+"`ALL_LANGUAGES` flag specifies in which languages the table of contents has "
+"to be generated."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:535
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:656
+msgid "`RUBY_CMD` flag specifies the location of the Ruby binary."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:536
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:657
+msgid "`HUGO_CMD` flag specifies the location of the Hugo binary."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:537
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:658
+msgid ""
+"`.ORDER` directives are used to ensure multiple make jobs may run without "
+"problem."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:538
+msgid ""
+"`all` target builds the documentation and puts the result in *~/doc/"
+"documentation/public*."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:539
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:660
+msgid ""
+"`starting-message` shows a message in the CLI to show the user that the "
+"process is running."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:540
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:663
+msgid ""
+"`run-local` runs hugo webserver on port 1313, or a random free port if that "
+"is already in use."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:541
+msgid ""
+"`build` builds the documentation and puts the result in the *~/doc/"
+"documentation/public*."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:543
+#, no-wrap
+msgid "Website Makefile"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:546
+msgid "This [.filename]#Makefile# takes the form of:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:563
+#, no-wrap
+msgid ""
+"# Generate the FreeBSD website\n"
+"#\n"
+"# Copyright (c) 2020-2021, The FreeBSD Documentation Project\n"
+"# Copyright (c) 2020-2021, Sergio Carlavilla <carlavilla@FreeBSD.org>\n"
+"#\n"
+"# Targets intended for use on the command line\n"
+"#\n"
+"# all (default)\t-\tgenerate the releases.toml and compile all the website\n"
+"# run\t-\t\t\tserves the built website for local browsing\n"
+"#\n"
+"# The run target uses hugo's built-in webserver to make the built website\n"
+"# available for local browsing. The website should have been built prior\n"
+"# to attempting to use the `run` target. By default, hugo will start its\n"
+"# webserver on port 1313.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:568
+#, no-wrap
+msgid ""
+"# List of all languages we have content for\n"
+"ALL_LANGUAGES=\tde el en es fr hu it ja nl ru tr zh-cn zh-tw\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:576
+#, no-wrap
+msgid ""
+"RUBY_CMD =\t${LOCALBASE}/bin/ruby <.>\n"
+"HUGO_CMD =\t${LOCALBASE}/bin/hugo <.>\n"
+"HUGO_ARGS?=\t--verbose\n"
+"RUBYLIB =\t../shared/lib\n"
+".export\tRUBYLIB\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:596
+#, no-wrap
+msgid ""
+".if defined(DOC_LANG) && !empty(DOC_LANG)\n"
+"LANGUAGES= ${DOC_LANG:S/,/ /g}\n"
+".if ${LANGUAGES:Men} == \"\"\n"
+".warning \"Warning: cannot skip 'en'; adding it back\"\n"
+"LANGUAGES+=\ten\n"
+".endif\n"
+".else\n"
+"LANGUAGES=\t${ALL_LANGUAGES}\n"
+".endif\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:605
+#, no-wrap
+msgid ""
+"# Take the list of all languages, and take out the ones we have been\n"
+"# asked for via DOC_LANG. We'll feed this to hugo.\n"
+"SKIP_LANGS=\n"
+".for a in ${ALL_LANGUAGES}\n"
+".if ${LANGUAGES:M${a}} == \"\"\n"
+"SKIP_LANGS+=\t${a}\n"
+".endif\n"
+".endfor\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:613
+#, no-wrap
+msgid ""
+".ORDER: starting-message generate-releases\n"
+".ORDER: starting-message build\n"
+".ORDER: generate-releases build\n"
+".ORDER: build post-build\n"
+".ORDER: post-build end-message\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:617
+#, no-wrap
+msgid ""
+"all: starting-message generate-releases build post-build end-message <.>\n"
+"run: starting-message generate-releases run-local\n"
+"clean: hugo-clean releases-clean\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:624
+#, no-wrap
+msgid ""
+"starting-message: .PHONY <.>\n"
+"\t@echo \"---------------------------------------------------------------\"\n"
+"\t@echo \"Building the website started on $$(date)\"\n"
+"\t@echo \" included languages: ${LANGUAGES}\"\n"
+"\t@echo \" excluded languages: ${SKIP_LANGS}\"\n"
+"\t@echo \"---------------------------------------------------------------\"\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:629
+#, no-wrap
+msgid ""
+"end-message: .PHONY\n"
+"\t@echo \"---------------------------------------------------------------\"\n"
+"\t@echo \"Building the website completed on $$(date)\"\n"
+"\t@echo \"---------------------------------------------------------------\"\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:631
+#, no-wrap
+msgid "generate-releases: data/releases.toml <.>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:634
+#, no-wrap
+msgid ""
+"data/releases.toml:\n"
+"\t${RUBY_CMD} ./tools/releases-toml.rb\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:638
+#, no-wrap
+msgid ""
+"run-local: .PHONY <.>\n"
+"\tHUGO_DISABLELANGUAGES=\"${SKIP_LANGS}\" ${HUGO_CMD} server \\\n"
+"\t ${HUGO_ARGS} -D $(BIND:D--bind=$(BIND)) --baseURL=\"http://$(.HOST):1313\"\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:643
+#, no-wrap
+msgid "post-build: cgi-permissions\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:646
+#, no-wrap
+msgid ""
+"cgi-permissions:\n"
+"\t@chmod 555 ./public/cgi/*.cgi\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:649
+#, no-wrap
+msgid ""
+"hugo-clean:\n"
+"\trm -fr public resources\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:652
+#, no-wrap
+msgid ""
+"releases-clean:\n"
+"\trm -f data/releases.toml\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:659
+msgid ""
+"`all` target builds the website and puts the result in *~/doc/website/"
+"public*."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:662
+msgid ""
+"`generate-releases` calls the script used to convert from AsciiDoc variables "
+"to TOML variables. With this conversion, the releases variables can be used "
+"in AsciiDoc and in the Hugo custom templates."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:663
+msgid ""
+"`build` builds the website and puts the result in the *~/doc/website/public*."
+msgstr ""
diff --git a/documentation/content/en/books/fdp-primer/editor-config/_index.adoc b/documentation/content/en/books/fdp-primer/editor-config/_index.adoc
index 3c865efb2b..181bc6495c 100644
--- a/documentation/content/en/books/fdp-primer/editor-config/_index.adoc
+++ b/documentation/content/en/books/fdp-primer/editor-config/_index.adoc
@@ -1,12 +1,12 @@
---
-title: Chapter 12. Editor Configuration
+title: Chapter 13. Editor Configuration
prev: books/fdp-primer/writing-style
-next: books/fdp-primer/see-also
+next: books/fdp-primer/trademarks
description: Configuration used in the texts editors in the FreeBSD Documentation Project
tags: ["editor", "configuration", "vim", "emacs", "FreeBSD"]
showBookMenu: true
weight: 13
-path: "/books/fdp-primer/"
+path: "/books/fdp-primer/editor-config/"
---
[[editor-config]]
@@ -17,7 +17,7 @@ path: "/books/fdp-primer/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 12
+:sectnumoffset: 13
:partnums:
:source-highlighter: rouge
:experimental:
@@ -52,61 +52,124 @@ Adjusting your text editor configuration can make working on document files quic
[[editor-config-vim]]
== Vim
-Install from package:editors/vim[], package:editors/vim-console[], or package:editors/vim-tiny[] then follow the configuration instructions in <<editor-config-vim-config>>.
+Install from package:editors/vim[], then follow the configuration instructions in <<editor-config-vim-config>>.
+More advanced users can use a proper linter like link:https://github.com/dense-analysis/ale[Ale] which can also act as a Vim link:https://langserver.org/[Language Server Protocol] client.
[[editor-config-vim-use]]
=== Use
-Press kbd:[P] to reformat paragraphs or text that has been selected in Visual mode.
-Press kbd:[T] to replace groups of eight spaces with a tab.
+Manual page writers can use the following keyboard shortcuts to reformat:
+
+* Press kbd:[P] to reformat paragraphs or text that has been selected in Visual mode.
+* Press kbd:[T] to replace groups of eight spaces with a tab.
+
+A linter named link:https://vale.sh[Vale] has been introduced to check grammatical and cosmetic errors on the documents.
+Vale has support for various editors and IDEs.
+
+Vale may already be installed as a dependency of the package:textproc/docproj[] meta-port.
+If not, install package:textproc/vale[] with:
+
+[source,console]
+....
+$ pkg install vale
+....
+
+Install link:https://github.com/dense-analysis/ale[Ale] to integrate into package:editors/vim[], for using package:textproc/vale[].
+
+[source,console?prompt=%]
+....
+% mkdir -p ~/.vim/pack/vendor/start
+% git clone --depth 1 https://github.com/dense-analysis/ale.git ~/.vim/pack/vendor/start/ale
+....
+
+Users who are using plugin managers for package:editors/vim[] do not need the above and should follow the instructions of that plugin manager to install link:https://github.com/dense-analysis/ale[Ale].
+
+At this moment due to a bug in link:https://vale.sh[Vale] it is necessary to copy the link:https://vale.sh[Vale] configuration to the home directory.
+Considering the repository was cloned into [.filename]#~/doc# copy as following:
+
+[source,console?prompt=%]
+....
+% cp -R ~/doc/.vale* ~/
+....
[[editor-config-vim-config]]
=== Configuration
Edit [.filename]#~/.vimrc#, adding these lines to the end of the file:
-[.programlisting]
+[source.programlisting,viml]
+.`~/.vimrc`
....
if has("autocmd")
- au BufNewFile,BufRead *.sgml,*.ent,*.xsl,*.xml call Set_SGML()
- au BufNewFile,BufRead *.[1-9] call ShowSpecial()
+ au BufNewFile,BufRead *.adoc call Set_ADOC()
+ au BufNewFile,BufRead *.[1-9] call Set_MAN()
endif " has(autocmd)
function Set_Highlights()
- "match ExtraWhitespace /^\s* \s*\|\s\+$/
- highlight default link OverLength ErrorMsg
- match OverLength /\%71v.\+/
- return 0
-endfunction " Set_Highlights()
+ "match ExtraWhitespace /^\s* \s*\|\s\+$/
+ return 0
+endfunction " Set_Highlights_Adoc()
+
+function Set_Highlights_MAN()
+ highlight default link OverLength ErrorMsg
+ match OverLength /\%71v.\+/
+ return 0
+endfunction " Set_Highlights_MAN()
function ShowSpecial()
- setlocal list listchars=tab:>>,trail:*,eol:$
- hi def link nontext ErrorMsg
- return 0
+ setlocal list listchars=tab:>>,trail:*,eol:$
+ hi def link nontext ErrorMsg
+ return 0
endfunction " ShowSpecial()
-function Set_SGML()
- setlocal number
- syn match sgmlSpecial "&[^;]*;"
- setlocal syntax=sgml
- setlocal filetype=xml
- setlocal shiftwidth=2
- setlocal textwidth=70
- setlocal tabstop=8
- setlocal softtabstop=2
- setlocal formatprg="fmt -p"
- setlocal autoindent
- setlocal smartindent
- " Rewrap paragraphs
- noremap P gqj
- " Replace spaces with tabs
- noremap T :s/ /\t/<CR>
- call ShowSpecial()
- call Set_Highlights()
- return 0
-endfunction " Set_SGML()
+function Set_COMMON()
+ setlocal number
+ setlocal shiftwidth=2
+ setlocal tabstop=8
+ setlocal softtabstop=2
+ setlocal formatprg="fmt -p"
+ setlocal autoindent
+ setlocal smartindent
+ call ShowSpecial()
+ call Set_Highlights()
+ return 0
+endfunction " Set_COMMON()
+
+function Set_ADOC()
+ setlocal syntax=asciidoc
+ setlocal filetype=asciidoc
+ call Set_COMMON()
+ return 0
+endfunction " Set_ADOC()
+
+function Set_MAN()
+ setlocal syntax=man
+ setlocal filetype=man
+ setlocal textwidth=70
+ " Rewrap paragraphs
+ noremap P gqj
+ " Replace spaces with tabs
+ noremap T :s/ /\t/<CR>
+ call Set_COMMON()
+ call Set_Highlights_MAN()
+ return 0
+endfunction " Set_Man()
+
+let g:ale_fixers = {
+\ '*': ['remove_trailing_lines', 'trim_whitespace'],
+\}
+let g:ale_linters = {
+\ 'asciidoc': ['vale'],
+\}
+let g:ale_fix_on_save = 1
....
+[IMPORTANT]
+======
+Above configuration will automatically remove trailing line, trailing space and multiple spaces which might display additional unwanted changes in `git diff` output.
+In such cases properly mention that in the commit log.
+======
+
[[editor-config-emacs]]
== Emacs
@@ -119,22 +182,25 @@ Emacs's nxml-mode uses compact relax NG schemas for validating XML.
A compact relax NG schema for FreeBSD's extension to DocBook 5.0 is included in the documentation repository.
To configure nxml-mode to validate using this schema, create [.filename]#~/.emacs.d/schema/schemas.xml# and add these lines to the file:
+[source,xml]
+.`~/.emacs.d/schema/schemas.xml`
....
-locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0"
- documentElement localName="section" typeId="DocBook"
- documentElement localName="chapter" typeId="DocBook"
- documentElement localName="article" typeId="DocBook"
- documentElement localName="book" typeId="DocBook"
- typeId id="DocBook" uri="/usr/local/share/xml/docbook/5.0/rng/docbook.rnc"
-locatingRules
+<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0">
+ <documentElement localName="section" typeId="DocBook" />
+ <documentElement localName="chapter" typeId="DocBook" />
+ <documentElement localName="article" typeId="DocBook" />
+ <documentElement localName="book" typeId="DocBook" />
+ <typeId id="DocBook" uri="/usr/local/share/xml/docbook/5.0/rng/docbook.rnc" />
+</locatingRules>
....
[[editor-config-emacs-igor]]
=== Automated Proofreading with Flycheck and Igor
-The Flycheck package is available from Milkypostman's Emacs Lisp Package Archive (MELPA).
+The link:https://www.flycheck.org/[Flycheck] package is available from link:https://melpa.org/[Milkypostman's Emacs Lisp Package Archive] (MELPA).
If MELPA is not already in Emacs's packages-archives, it can be added by evaluating
+[source,emacs-lisp]
....
(add-to-list 'package-archives '("melpa" . "http://stable.melpa.org/packages/") t)
....
@@ -143,12 +209,14 @@ Add the line to Emacs's initialization file (one of [.filename]#~/.emacs#, [.fil
To install Flycheck, evaluate
+[source,emacs-lisp]
....
(package-install 'flycheck)
....
Create a Flycheck checker for package:textproc/igor[] by evaluating
+[source,emacs-lisp]
....
(flycheck-define-checker igor
"FreeBSD Documentation Project sanity checker.
@@ -170,6 +238,7 @@ Again, add these lines to Emacs's initialization file to make the changes perman
To apply settings specific to the FreeBSD documentation project, create [.filename]#.dir-locals.el# in the root directory of the documentation repository and add these lines to the file:
+[source,emacs-lisp]
....
;;; Directory Local Variables
;;; For more information see (info "(emacs) Directory Variables")
@@ -186,22 +255,56 @@ To apply settings specific to the FreeBSD documentation project, create [.filena
[[editor-config-nano]]
== nano
-Install from package:editors/nano[] or package:editors/nano-devel[].
+Install from package:editors/nano[].
[[editor-config-nano-config]]
=== Configuration
-Copy the sample XML syntax highlight file to the user's home directory:
+Currently there is no adoc/asciidoc syntax highlight file with nano distribution.
+So let's create one from scratch and use an editor to create new file or add lines in the [.filename]#~/.nanorc# with these contents:
-[source,shell]
-....
-% cp /usr/local/share/nano/xml.nanorc ~/.nanorc
+[source]
+.`~/.nanorc`
....
-
-Use an editor to replace the lines in the [.filename]#~/.nanorc# `syntax "xml"` block with these rules:
-
-....
-syntax "xml" "\.([jrs]html?|xml|xslt?)$"
+syntax "asciidoc" "\.(adoc|asc|asciidoc)$"
+# main header
+color red "^====+$"
+# h1
+color red "^==[[:space:]].*$"
+color red "^----+$"
+# h2
+color magenta "^===[[:space:]].*$"
+color magenta "^~~~~+$"
+# h4
+color green "^====[[:space:]].*$"
+color green "^\^\^\^\^+$"
+# h5
+color brightblue "^=====[[:space:]].*$"
+color brightblue "^\+\+\+\++$"
+# attributes
+color brightgreen ":.*:"
+color brightred "\{[a-z0-9]*\}"
+color red "\\\{[a-z0-9]*\}"
+color red "\+\+\+\{[a-z0-9]*\}\+\+\+"
+# Paragraph Title
+color yellow "^\..*$"
+# source
+color magenta "^\[(source,.+|NOTE|TIP|IMPORTANT|WARNING|CAUTION)\]"
+# Other markup
+color yellow ".*[[:space:]]\+$"
+color yellow "_[^_]+_"
+color yellow "\*[^\*]+\*"
+color yellow "\+[^\+]+\+"
+color yellow "`[^`]+`"
+color yellow "\^[^\^]+\^"
+color yellow "~[^~]+~"
+color yellow "'[^']+'"
+color cyan "`{1,2}[^']+'{1,2}"
+# bullets
+color brightmagenta "^[[:space:]]*[\*\.-]{1,5}[[:space:]]"
+# anchors
+color brightwhite "\[\[.*\]\]"
+color brightwhite "<<.*>>"
# trailing whitespace
color ,blue "[[:space:]]+$"
# multiples of eight spaces at the start a line
@@ -211,13 +314,11 @@ color ,blue "^([TAB]*[ ]{8})+"
color ,yellow "( )+TAB"
# highlight indents that have an odd number of spaces
color ,red "^(([ ]{2})+|(TAB+))*[ ]{1}[^ ]{1}"
-# lines longer than 70 characters
-color ,yellow "^(.{71})|(TAB.{63})|(TAB{2}.{55})|(TAB{3}.{47}).+$"
....
Process the file to create embedded tabs:
-[source,shell]
+[source,console?prompt=%]
....
% perl -i'' -pe 's/TAB/\t/g' ~/.nanorc
....
@@ -227,20 +328,21 @@ Process the file to create embedded tabs:
Specify additional helpful options when running the editor:
-[source,shell]
+[source,console?prompt=%]
....
-% nano -AKipwz -r 70 -T8 _index.adoc
+% nano -AKipwz -T8 _index.adoc
....
Users of man:csh[1] can define an alias in [.filename]#~/.cshrc# to automate these options:
+[source,shell]
....
alias nano "nano -AKipwz -r 70 -T8"
....
After the alias is defined, the options will be added automatically:
-[source,shell]
+[source,console?prompt=%]
....
% nano _index.adoc
....
diff --git a/documentation/content/en/books/fdp-primer/editor-config/_index.po b/documentation/content/en/books/fdp-primer/editor-config/_index.po
new file mode 100644
index 0000000000..0883f46132
--- /dev/null
+++ b/documentation/content/en/books/fdp-primer/editor-config/_index.po
@@ -0,0 +1,555 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-06-19 21:07-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:1
+#, no-wrap
+msgid "Configuration used in the texts editors in the FreeBSD Documentation Project"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:1
+#, no-wrap
+msgid "Chapter 13. Editor Configuration"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:13
+#, no-wrap
+msgid "Editor Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:51
+msgid ""
+"Adjusting your text editor configuration can make working on document files "
+"quicker and easier, and help documents conform to FDP guidelines."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:53
+#, no-wrap
+msgid "Vim"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:57
+msgid ""
+"Install from package:editors/vim[], or package:editors/vim-console[], then "
+"follow the configuration instructions in <<editor-config-vim-config>>. More "
+"advanced users can use a proper linter like link:https://github.com/dense-"
+"analysis/ale[Ale] which can also act as a Vim link:https://langserver.org/"
+"[Language Server Protocol] client."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:59
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:326
+#, no-wrap
+msgid "Use"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:62
+msgid ""
+"Manual page writers can use the following keyboard shortcuts to reformat:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:64
+msgid ""
+"Press kbd:[P] to reformat paragraphs or text that has been selected in "
+"Visual mode."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:65
+msgid "Press kbd:[T] to replace groups of eight spaces with a tab."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:68
+msgid ""
+"A linter named link:https://vale.sh[Vale] has been introduced to check "
+"grammatical and cosmetic errors on the documents. Vale has support for "
+"various editors and IDEs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:71
+msgid ""
+"Vale may already be installed as a dependency of the package:textproc/"
+"docproj[] meta-port. If not, install package:textproc/vale[] with:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:75
+#, no-wrap
+msgid "$ pkg install vale\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:78
+msgid ""
+"Install link:https://github.com/dense-analysis/ale[Ale] to integrate into "
+"package:editors/vim[], for using package:textproc/vale[]."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:83
+#, no-wrap
+msgid ""
+"% mkdir -p ~/.vim/pack/vendor/start\n"
+"% git clone --depth 1 https://github.com/dense-analysis/ale.git ~/.vim/pack/vendor/start/ale\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:86
+msgid ""
+"Users who are using plugin managers for package:editors/vim[] do not need "
+"the above and should follow the instructions of that plugin manager to "
+"install link:https://github.com/dense-analysis/ale[Ale]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:89
+msgid ""
+"At this moment due to a bug in link:https://vale.sh[Vale] it is necessary to "
+"copy the link:https://vale.sh[Vale] configuration to the home directory. "
+"Considering the repository was cloned into [.filename]#~/doc# copy as "
+"following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:93
+#, no-wrap
+msgid "% cp -R ~/doc/.vale* ~/\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:96
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:260
+#, no-wrap
+msgid "Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:99
+msgid "Edit [.filename]#~/.vimrc#, adding these lines to the end of the file:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:101
+#, no-wrap
+msgid "`~/.vimrc`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:107
+#, no-wrap
+msgid ""
+"if has(\"autocmd\")\n"
+" au BufNewFile,BufRead *.adoc call Set_ADOC()\n"
+" au BufNewFile,BufRead *.[1-9] call Set_MAN()\n"
+"endif \" has(autocmd)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:112
+#, no-wrap
+msgid ""
+"function Set_Highlights()\n"
+" \"match ExtraWhitespace /^\\s* \\s*\\|\\s\\+$/\n"
+" return 0\n"
+"endfunction \" Set_Highlights_Adoc()\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:118
+#, no-wrap
+msgid ""
+"function Set_Highlights_MAN()\n"
+" highlight default link OverLength ErrorMsg\n"
+" match OverLength /\\%71v.\\+/\n"
+" return 0\n"
+"endfunction \" Set_Highlights_MAN()\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:124
+#, no-wrap
+msgid ""
+"function ShowSpecial()\n"
+" setlocal list listchars=tab:>>,trail:*,eol:$\n"
+" hi def link nontext ErrorMsg\n"
+" return 0\n"
+"endfunction \" ShowSpecial()\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:137
+#, no-wrap
+msgid ""
+"function Set_COMMON()\n"
+" setlocal number\n"
+" setlocal shiftwidth=2\n"
+" setlocal tabstop=8\n"
+" setlocal softtabstop=2\n"
+" setlocal formatprg=\"fmt -p\"\n"
+" setlocal autoindent\n"
+" setlocal smartindent\n"
+" call ShowSpecial()\n"
+" call Set_Highlights()\n"
+" return 0\n"
+"endfunction \" Set_COMMON()\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:144
+#, no-wrap
+msgid ""
+"function Set_ADOC()\n"
+" setlocal syntax=asciidoc\n"
+" setlocal filetype=asciidoc\n"
+" call Set_COMMON()\n"
+" return 0\n"
+"endfunction \" Set_ADOC()\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:157
+#, no-wrap
+msgid ""
+"function Set_MAN()\n"
+" setlocal syntax=man\n"
+" setlocal filetype=man\n"
+" setlocal textwidth=70\n"
+" \" Rewrap paragraphs\n"
+" noremap P gqj\n"
+" \" Replace spaces with tabs\n"
+" noremap T :s/ /\\t/<CR>\n"
+" call Set_COMMON()\n"
+" call Set_Highlights_MAN()\n"
+" return 0\n"
+"endfunction \" Set_Man()\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:165
+#, no-wrap
+msgid ""
+"let g:ale_fixers = {\n"
+"\\ '*': ['remove_trailing_lines', 'trim_whitespace'],\n"
+"\\}\n"
+"let g:ale_linters = {\n"
+"\\ 'asciidoc': ['vale'],\n"
+"\\}\n"
+"let g:ale_fix_on_save = 1\n"
+msgstr ""
+
+#. type: delimited block = 6
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:171
+msgid ""
+"Above configuration will automatically remove trailing line, trailing space "
+"and multiple spaces which might display additional unwanted changes in `git "
+"diff` output. In such cases properly mention that in the commit log."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:174
+#, no-wrap
+msgid "Emacs"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:177
+msgid "Install from package:editors/emacs[] or package:editors/emacs-devel[]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:179
+#, no-wrap
+msgid "Validation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:184
+msgid ""
+"Emacs's nxml-mode uses compact relax NG schemas for validating XML. A "
+"compact relax NG schema for FreeBSD's extension to DocBook 5.0 is included "
+"in the documentation repository. To configure nxml-mode to validate using "
+"this schema, create [.filename]#~/.emacs.d/schema/schemas.xml# and add these "
+"lines to the file:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:186
+#, no-wrap
+msgid "`~/.emacs.d/schema/schemas.xml`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:195
+#, no-wrap
+msgid ""
+"<locatingRules xmlns=\"http://thaiopensource.com/ns/locating-rules/1.0\">\n"
+" <documentElement localName=\"section\" typeId=\"DocBook\" />\n"
+" <documentElement localName=\"chapter\" typeId=\"DocBook\" />\n"
+" <documentElement localName=\"article\" typeId=\"DocBook\" />\n"
+" <documentElement localName=\"book\" typeId=\"DocBook\" />\n"
+" <typeId id=\"DocBook\" uri=\"/usr/local/share/xml/docbook/5.0/rng/docbook.rnc\" />\n"
+"</locatingRules>\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:198
+#, no-wrap
+msgid "Automated Proofreading with Flycheck and Igor"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:202
+msgid ""
+"The link:https://www.flycheck.org/[Flycheck] package is available from link:"
+"https://melpa.org/[Milkypostman's Emacs Lisp Package Archive] (MELPA). If "
+"MELPA is not already in Emacs's packages-archives, it can be added by "
+"evaluating"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:206
+#, no-wrap
+msgid "(add-to-list 'package-archives '(\"melpa\" . \"http://stable.melpa.org/packages/\") t)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:209
+msgid ""
+"Add the line to Emacs's initialization file (one of [.filename]#~/.emacs#, [."
+"filename]#~/.emacs.el#, or [.filename]#~.emacs.d/init.el#) to make this "
+"change permanent."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:211
+msgid "To install Flycheck, evaluate"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:215
+#, no-wrap
+msgid "(package-install 'flycheck)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:218
+msgid "Create a Flycheck checker for package:textproc/igor[] by evaluating"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:223
+#, no-wrap
+msgid ""
+"(flycheck-define-checker igor\n"
+" \"FreeBSD Documentation Project sanity checker.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:230
+#, no-wrap
+msgid ""
+"See URLs https://www.freebsd.org/docproj/ and\n"
+"http://www.freshports.org/textproc/igor/.\"\n"
+" :command (\"igor\" \"-X\" source-inplace)\n"
+" :error-parser flycheck-parse-checkstyle\n"
+" :modes (nxml-mode)\n"
+" :standard-input t)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:232
+#, no-wrap
+msgid " (add-to-list 'flycheck-checkers 'igor 'append)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:235
+msgid ""
+"Again, add these lines to Emacs's initialization file to make the changes "
+"permanent."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:237
+#, no-wrap
+msgid "FreeBSD Documentation Specific Settings"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:240
+msgid ""
+"To apply settings specific to the FreeBSD documentation project, create [."
+"filename]#.dir-locals.el# in the root directory of the documentation "
+"repository and add these lines to the file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:244
+#, no-wrap
+msgid ""
+";;; Directory Local Variables\n"
+";;; For more information see (info \"(emacs) Directory Variables\")\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:252
+#, no-wrap
+msgid ""
+"((nxml-mode\n"
+" (eval . (turn-on-auto-fill))\n"
+" (fill-column . 70)\n"
+" (eval . (require 'flycheck))\n"
+" (eval . (flycheck-mode 1))\n"
+" (flycheck-checker . igor)\n"
+" (eval . (add-to-list 'rng-schema-locating-files \"~/.emacs.d/schema/schemas.xml\"))))\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:255
+#, no-wrap
+msgid "nano"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:258
+msgid "Install from package:editors/nano[] or package:editors/nano-devel[]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:264
+msgid ""
+"Currently there is no adoc/asciidoc syntax highlight file with nano "
+"distribution. So let's create one from scratch and use an editor to create "
+"new file or add lines in the [.filename]#~/.nanorc# with these contents:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:266
+#, no-wrap
+msgid "`~/.nanorc`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:316
+#, no-wrap
+msgid ""
+"syntax \"asciidoc\" \"\\.(adoc|asc|asciidoc)$\"\n"
+"# main header\n"
+"color red \"^====+$\"\n"
+"# h1\n"
+"color red \"^==[[:space:]].*$\"\n"
+"color red \"^----+$\"\n"
+"# h2\n"
+"color magenta \"^===[[:space:]].*$\"\n"
+"color magenta \"^~~~~+$\"\n"
+"# h4\n"
+"color green \"^====[[:space:]].*$\"\n"
+"color green \"^\\^\\^\\^\\^+$\"\n"
+"# h5\n"
+"color brightblue \"^=====[[:space:]].*$\"\n"
+"color brightblue \"^\\+\\+\\+\\++$\"\n"
+"# attributes\n"
+"color brightgreen \":.*:\"\n"
+"color brightred \"\\{[a-z0-9]*\\}\"\n"
+"color red \"\\\\\\{[a-z0-9]*\\}\"\n"
+"color red \"\\+\\+\\+\\{[a-z0-9]*\\}\\+\\+\\+\"\n"
+"# Paragraph Title\n"
+"color yellow \"^\\..*$\"\n"
+"# source\n"
+"color magenta \"^\\[(source,.+|NOTE|TIP|IMPORTANT|WARNING|CAUTION)\\]\"\n"
+"# Other markup\n"
+"color yellow \".*[[:space:]]\\+$\"\n"
+"color yellow \"_[^_]+_\"\n"
+"color yellow \"\\*[^\\*]+\\*\"\n"
+"color yellow \"\\+[^\\+]+\\+\"\n"
+"color yellow \"`[^`]+`\"\n"
+"color yellow \"\\^[^\\^]+\\^\"\n"
+"color yellow \"~[^~]+~\"\n"
+"color yellow \"'[^']+'\"\n"
+"color cyan \"`{1,2}[^']+'{1,2}\"\n"
+"# bullets\n"
+"color brightmagenta \"^[[:space:]]*[\\*\\.-]{1,5}[[:space:]]\"\n"
+"# anchors\n"
+"color brightwhite \"\\[\\[.*\\]\\]\"\n"
+"color brightwhite \"<<.*>>\"\n"
+"# trailing whitespace\n"
+"color ,blue \"[[:space:]]+$\"\n"
+"# multiples of eight spaces at the start a line\n"
+"# (after zero or more tabs) should be a tab\n"
+"color ,blue \"^([TAB]*[ ]{8})+\"\n"
+"# tabs after spaces\n"
+"color ,yellow \"( )+TAB\"\n"
+"# highlight indents that have an odd number of spaces\n"
+"color ,red \"^(([ ]{2})+|(TAB+))*[ ]{1}[^ ]{1}\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:319
+msgid "Process the file to create embedded tabs:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:323
+#, no-wrap
+msgid "% perl -i'' -pe 's/TAB/\\t/g' ~/.nanorc\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:329
+msgid "Specify additional helpful options when running the editor:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:333
+#, no-wrap
+msgid "% nano -AKipwz -T8 _index.adoc\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:336
+msgid ""
+"Users of man:csh[1] can define an alias in [.filename]#~/.cshrc# to automate "
+"these options:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:340
+#, no-wrap
+msgid "alias nano \"nano -AKipwz -r 70 -T8\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:343
+msgid "After the alias is defined, the options will be added automatically:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:347
+#, no-wrap
+msgid "% nano _index.adoc\n"
+msgstr ""
diff --git a/documentation/content/en/books/fdp-primer/examples/_index.adoc b/documentation/content/en/books/fdp-primer/examples/_index.adoc
index 55322389cf..709e7accc9 100644
--- a/documentation/content/en/books/fdp-primer/examples/_index.adoc
+++ b/documentation/content/en/books/fdp-primer/examples/_index.adoc
@@ -4,8 +4,8 @@ prev: books/fdp-primer/see-also/
description: Example of an article and a book used in the FreeBSD Documentation Project
tags: ["examples", "tutorial", "AsciiDoctor", "Book", "Article"]
showBookMenu: true
-weight: 15
-path: "/books/fdp-primer/"
+weight: 16
+path: "/books/fdp-primer/examples/"
---
[appendix]
@@ -154,7 +154,7 @@ toc::[]
This is the first section in my article.
-== My First Sub-Section
+=== My First Sub-Section
This is the first sub-section in my article.
diff --git a/documentation/content/en/books/fdp-primer/examples/_index.po b/documentation/content/en/books/fdp-primer/examples/_index.po
new file mode 100644
index 0000000000..b8051b7894
--- /dev/null
+++ b/documentation/content/en/books/fdp-primer/examples/_index.po
@@ -0,0 +1,206 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-04-20 20:56-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:1
+#, no-wrap
+msgid "Example of an article and a book used in the FreeBSD Documentation Project"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:1
+#, no-wrap
+msgid "Appendix A. Examples"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:13
+#, no-wrap
+msgid "Examples"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:52
+msgid ""
+"These examples are not exhaustive - they do not contain all the elements "
+"that might be desirable to use, particularly in a document's front matter. "
+"For more examples of AsciiDoctor, examine the AsciiDoc source for this and "
+"other documents available in the Git *doc* repository, or available online "
+"starting at link:https://cgit.freebsd.org/doc/[https://cgit.freebsd.org/"
+"doc/]."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:54
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:56
+#, no-wrap
+msgid "AsciiDoctor *book*"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:61
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:131
+#, no-wrap
+msgid "---\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:68
+#, no-wrap
+msgid ""
+"title: An Example Book\n"
+"authors:\n"
+" - author: The FreeBSD Documentation Project\n"
+"copyright: 1995-2021 The FreeBSD Documentation Project\n"
+"releaseinfo: \"\" \n"
+"trademarks: [\"general\"] \n"
+"---\n"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:70
+#, no-wrap
+msgid "An Example Book"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:88
+msgid ""
+":doctype: book :toc: macro :toclevels: 2 :icons: font :xrefstyle: basic :"
+"relfileprefix: ../ :outfilesuffix: :sectnums: :sectnumlevels: 6 :partnums: :"
+"chapter-signifier: Chapter :part-signifier: Part :source-highlighter: rouge :"
+"experimental: :skip-front-matter: :book: true :pdf: false"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:92
+msgid ""
+"ifeval::[\"{backend}\" == \"html5\"] :chapters-path: content/en/books/"
+"bookname/ endif::[]"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:96
+msgid "ifeval::[\"{backend}\" == \"pdf\"] :chapters-path: endif::[]"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:100
+msgid "ifeval::[\"{backend}\" == \"epub3\"] :chapters-path: endif::[]"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:103
+msgid "[abstract] Abstract"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:105
+msgid "Abstract section"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:107
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:150
+msgid "'''"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:109
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:152
+msgid "toc::[]"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:111
+msgid ":sectnums!:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:113
+msgid "\\include::{chapters-path}preface/_index.adoc[leveloffset=+1]"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:115
+msgid ":sectnums:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:117
+msgid "\\include::{chapters-path}parti.adoc[lines=7..18]"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:119
+msgid "\\include::{chapters-path}chapter-name/_index.adoc[leveloffset=+1]"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:124
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:126
+#, no-wrap
+msgid "AsciiDoctor *article*"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:137
+#, no-wrap
+msgid ""
+"title: An Example Article\n"
+"authors:\n"
+" - author: Your name and surname\n"
+" email: foo@example.com\n"
+"trademarks: [\"general\"]\n"
+"---\n"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:139
+#, no-wrap
+msgid "An Example Article"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:148
+msgid ""
+":doctype: article :toc: macro :toclevels: 1 :icons: font :sectnums: :"
+"sectnumlevels: 6 :source-highlighter: rouge :experimental:"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:153
+#, no-wrap
+msgid "My First Section"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:156
+msgid "This is the first section in my article."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:157
+#, no-wrap
+msgid "My First Sub-Section"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/examples/_index.adoc:160
+msgid "This is the first sub-section in my article."
+msgstr ""
diff --git a/documentation/content/en/books/fdp-primer/manual-pages/_index.adoc b/documentation/content/en/books/fdp-primer/manual-pages/_index.adoc
index c2336f5b14..cc6490b5fd 100644
--- a/documentation/content/en/books/fdp-primer/manual-pages/_index.adoc
+++ b/documentation/content/en/books/fdp-primer/manual-pages/_index.adoc
@@ -1,12 +1,12 @@
---
-title: Chapter 10. Manual Pages
-prev: books/fdp-primer/po-translations
+title: Chapter 11. Manual Pages
+prev: books/fdp-primer/weblate
next: books/fdp-primer/writing-style
description: How to work with the FreeBSD Manual Pages
tags: ["manual pages", "introduction", "guide", "reference"]
showBookMenu: true
weight: 11
-path: "/books/fdp-primer/"
+path: "/books/fdp-primer/manual-pages/"
---
[[manual-pages]]
@@ -17,7 +17,7 @@ path: "/books/fdp-primer/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 10
+:sectnumoffset: 11
:partnums:
:source-highlighter: rouge
:experimental:
@@ -501,6 +501,18 @@ Use package:textproc/igor[] to proofread the manual page:
% igor ./mynewmanpage.8
....
+Another useful tool is package:textproc/vale[].
+It does not support the man:mdoc[7] syntax but the rendered manual page can be
+read from standard input:
+
+[source,shell]
+....
+% man ls | vale
+....
+
+package:textproc/vale[] is highly configurable.
+It is advised to read its documentation.
+
Use man:man[1] to check the final result of your changes:
[source,shell]
diff --git a/documentation/content/en/books/fdp-primer/manual-pages/_index.po b/documentation/content/en/books/fdp-primer/manual-pages/_index.po
new file mode 100644
index 0000000000..07b83863d7
--- /dev/null
+++ b/documentation/content/en/books/fdp-primer/manual-pages/_index.po
@@ -0,0 +1,1202 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-09-09 18:12-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:1
+#, no-wrap
+msgid "How to work with the FreeBSD Manual Pages"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:1
+#, no-wrap
+msgid "Chapter 11. Manual Pages"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:13
+#, no-wrap
+msgid "Manual Pages"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:51
+#, no-wrap
+msgid "Introduction"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:55
+msgid ""
+"_Manual pages_, commonly shortened to _man pages_, were conceived as readily-"
+"available reminders for command syntax, device driver details, or "
+"configuration file formats. They have become an extremely valuable quick-"
+"reference from the command line for users, system administrators, and "
+"programmers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:57
+msgid ""
+"Although intended as reference material rather than tutorials, the EXAMPLES "
+"sections of manual pages often provide detailed use case."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:61
+msgid ""
+"Manual pages are generally shown interactively by the man:man[1] command. "
+"When the user types `man ls`, a search is performed for a manual page "
+"matching `ls`. The first matching result is displayed."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:63
+#, no-wrap
+msgid "Sections"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:67
+msgid ""
+"Manual pages are grouped into _sections_. Each section contains manual "
+"pages for a specific category of documentation:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:72
+#, no-wrap
+msgid "Section Number"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:75
+#, no-wrap
+msgid "Category"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:76
+#, no-wrap
+msgid "1"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:78
+#, no-wrap
+msgid "General Commands"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:79
+#, no-wrap
+msgid "2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:81
+#, no-wrap
+msgid "System Calls"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:82
+#, no-wrap
+msgid "3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:84
+#, no-wrap
+msgid "Library Functions"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:85
+#, no-wrap
+msgid "4"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:87
+#, no-wrap
+msgid "Kernel Interfaces"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:88
+#, no-wrap
+msgid "5"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:90
+#, no-wrap
+msgid "File Formats"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:91
+#, no-wrap
+msgid "6"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:93
+#, no-wrap
+msgid "Games"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:94
+#, no-wrap
+msgid "7"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:96
+#, no-wrap
+msgid "Miscellaneous"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:97
+#, no-wrap
+msgid "8"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:99
+#, no-wrap
+msgid "System Manager"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:100
+#, no-wrap
+msgid "9"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:101
+#, no-wrap
+msgid "Kernel Developer"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:104
+#, no-wrap
+msgid "Markup"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:112
+msgid ""
+"Various markup forms and rendering programs have been used for manual "
+"pages. FreeBSD has used man:groff[7] and the newer man:mandoc[1]. Most "
+"existing FreeBSD manual pages, and all new ones, use the man:mdoc[7] form of "
+"markup. This is a simple line-based markup that is reasonably expressive. "
+"It is mostly semantic: parts of text are marked up for what they are, rather "
+"than for how they should appear when rendered. There is some appearance-"
+"based markup which is usually best avoided."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:115
+msgid ""
+"Manual page source is usually interpreted and displayed to the screen "
+"interactively. The source files can be ordinary text files or compressed "
+"with man:gzip[1] to save space."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:118
+msgid ""
+"Manual pages can also be rendered to other formats, including PostScript for "
+"printing or PDF generation. See man:man[1]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:120
+#, no-wrap
+msgid "Manual Page Sections"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:125
+msgid ""
+"Manual pages are composed of several standard sections. Each section has a "
+"title in upper case, and the sections for a particular type of manual page "
+"appear in a specific order. For a category 1 General Command manual page, "
+"the sections are:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:130
+#, no-wrap
+msgid "Section Name"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:133
+#, no-wrap
+msgid "Description"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:134
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:136
+#, no-wrap
+msgid "Name of the command"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:137
+#, no-wrap
+msgid "SYNOPSIS"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:139
+#, no-wrap
+msgid "Format of options and arguments"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:140
+#, no-wrap
+msgid "DESCRIPTION"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:142
+#, no-wrap
+msgid "Description of purpose and usage"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:143
+#, no-wrap
+msgid "ENVIRONMENT"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:145
+#, no-wrap
+msgid "Environment settings that affect operation"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:146
+#, no-wrap
+msgid "EXIT STATUS"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:148
+#, no-wrap
+msgid "Error codes returned on exit"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:149
+#, no-wrap
+msgid "EXAMPLES"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:151
+#, no-wrap
+msgid "Examples of usage"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:152
+#, no-wrap
+msgid "COMPATIBILITY"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:154
+#, no-wrap
+msgid "Compatibility with other implementations"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:155
+#, no-wrap
+msgid "SEE ALSO"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:157
+#, no-wrap
+msgid "Cross-reference to related manual pages"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:158
+#, no-wrap
+msgid "STANDARDS"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:160
+#, no-wrap
+msgid "Compatibility with standards like POSIX"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:161
+#, no-wrap
+msgid "HISTORY"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:163
+#, no-wrap
+msgid "History of implementation"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:164
+#, no-wrap
+msgid "BUGS"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:166
+#, no-wrap
+msgid "Known bugs"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:167
+#, no-wrap
+msgid "AUTHORS"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:168
+#, no-wrap
+msgid "People who created the command or wrote the manual page."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:172
+msgid ""
+"Some sections are optional, and the combination of sections for a specific "
+"type of manual page vary. Examples of the most common types are shown later "
+"in this chapter."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:174
+#, no-wrap
+msgid "Macros"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:179
+msgid ""
+"man:mdoc[7] markup is based on _macros_. Lines that begin with a dot "
+"contain macro commands, each two or three letters long. For example, "
+"consider this portion of the man:ls[1] manual page:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:208
+#, no-wrap
+msgid ""
+".Dd December 1, 2015 <.>\n"
+".Dt LS 1\n"
+".Sh NAME <.>\n"
+".Nm ls\n"
+".Nd list directory contents\n"
+".Sh SYNOPSIS <.>\n"
+".Nm <.>\n"
+".Op Fl -libxo <.>\n"
+".Op Fl ABCFGHILPRSTUWZabcdfghiklmnopqrstuwxy1, <.>\n"
+".Op Fl D Ar format <.>\n"
+".Op Ar <.>\n"
+".Sh DESCRIPTION <.>\n"
+"For each operand that names a\n"
+".Ar file\n"
+"of a type other than\n"
+"directory,\n"
+".Nm\n"
+"displays its name as well as any requested,\n"
+"associated information.\n"
+"For each operand that names a\n"
+".Ar file\n"
+"of type directory,\n"
+".Nm\n"
+"displays the names of files contained\n"
+"within that directory, as well as any requested, associated\n"
+"information.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:211
+msgid "A _Document date_ and _Document title_ are defined."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:213
+msgid ""
+"A _Section header_ for the NAME section is defined. Then the _Name_ of the "
+"command and a one-line _Name description_ are defined."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:215
+msgid ""
+"The SYNOPSIS section begins. This section describes the command-line "
+"options and arguments accepted."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:216
+msgid ""
+"_Name_ (`.Nm`) has already been defined, and repeating it here just displays "
+"the defined value in the text."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:218
+msgid ""
+"An _Optional_ _Flag_ called `-libxo` is shown. The `Fl` macro adds a dash "
+"to the beginning of flags, so this appears in the manual page as `--libxo`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:219
+msgid "A long list of optional single-character flags are shown."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:223
+msgid ""
+"An optional `-D` flag is defined. If the `-D` flag is given, it must be "
+"followed by an _Argument_. The argument is a _format_, a string that tells "
+"man:ls[1] what to display and how to display it. Details on the format "
+"string are given later in the manual page."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:225
+msgid ""
+"A final optional argument is defined. Since no name is specified for the "
+"argument, the default of `file ...` is used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:226
+msgid "The _Section header_ for the DESCRIPTION section is defined."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:228
+msgid ""
+"When rendered with the command `man ls`, the result displayed on the screen "
+"looks like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:232
+#, no-wrap
+msgid "LS(1) FreeBSD General Commands Manual LS(1)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:235
+#, no-wrap
+msgid ""
+"NAME\n"
+" ls - list directory contents\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:239
+#, no-wrap
+msgid ""
+"SYNOPSIS\n"
+" ls [--libxo] [-ABCFGHILPRSTUWZabcdfghiklmnopqrstuwxy1,] [-D format]\n"
+" [file ...]\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:246
+#, no-wrap
+msgid ""
+"DESCRIPTION\n"
+" For each operand that names a file of a type other than directory, ls\n"
+" displays its name as well as any requested, associated information. For\n"
+" each operand that names a file of type directory, ls displays the names\n"
+" of files contained within that directory, as well as any requested,\n"
+" associated information.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:249
+msgid "Optional values are shown inside square brackets."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:251
+#, no-wrap
+msgid "Markup Guidelines"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:255
+msgid ""
+"The man:mdoc[7] markup language is not very strict. For clarity and "
+"consistency, the FreeBSD Documentation project adds some additional style "
+"guidelines:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:256
+#, no-wrap
+msgid "Only the first letter of macros is upper case"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:258
+msgid ""
+"Always use upper case for the first letter of a macro and lower case for the "
+"remaining letters."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:259
+#, no-wrap
+msgid "Begin new sentences on new lines"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:261
+msgid ""
+"Start a new sentence on a new line, do not begin it on the same line as an "
+"existing sentence."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:262
+#, no-wrap
+msgid "Update `.Dd` when making non-trivial changes to a manual page"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:266
+msgid ""
+"The _Document date_ informs the reader about the last time the manual page "
+"was updated. It is important to update whenever non-trivial changes are "
+"made to the manual pages. Trivial changes like spelling or punctuation "
+"fixes that do not affect usage can be made without updating `.Dd`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:267
+#, no-wrap
+msgid "Give examples"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:272
+msgid ""
+"Show the reader examples when possible. Even trivial examples are valuable, "
+"because what is trivial to the writer is not necessarily trivial to the "
+"reader. Three examples are a good goal. A trivial example shows the "
+"minimal requirements, a serious example shows actual use, and an in-depth "
+"example demonstrates unusual or non-obvious functionality."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:273
+#, no-wrap
+msgid "Include the BSD license"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:276
+msgid ""
+"Include the BSD license on new manual pages. The preferred license is "
+"available from the extref:{committers-guide}[Committer's Guide]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:278
+#, no-wrap
+msgid "Markup Tricks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:281
+msgid "Add a space before punctuation on a line with macros. Example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:289
+#, no-wrap
+msgid ""
+".Sh SEE ALSO\n"
+".Xr geom 4 ,\n"
+".Xr boot0cfg 8 ,\n"
+".Xr geom 8 ,\n"
+".Xr gptboot 8\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:295
+msgid ""
+"Note how the commas at the end of the `.Xr` lines have been placed after a "
+"space. The `.Xr` macro expects two parameters to follow it, the name of an "
+"external manual page, and a section number. The space separates the "
+"punctuation from the section number. Without the space, the external links "
+"would incorrectly point to section `4,` or `8,`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:297
+#, no-wrap
+msgid "Important Macros"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:302
+msgid ""
+"Some very common macros will be shown here. For more usage examples, see "
+"man:mdoc[7], man:groff_mdoc[7], or search for actual use in [.filename]#/usr/"
+"share/man/man*# directories. For example, to search for examples of the `."
+"Bd` _Begin display_ macro:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:306
+#, no-wrap
+msgid "% find /usr/share/man/man* | xargs zgrep '.Bd'\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:309
+#, no-wrap
+msgid "Organizational Macros"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:312
+msgid "Some macros are used to define logical blocks of a manual page."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:317
+#, no-wrap
+msgid "Organizational Macro"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:320
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:356
+#, no-wrap
+msgid "Use"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:321
+#, no-wrap
+msgid "`.Sh`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:325
+#, no-wrap
+msgid ""
+"Section header.\n"
+"Followed by the name of the section, traditionally all upper case.\n"
+"Think of these as chapter titles."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:326
+#, no-wrap
+msgid "`.Ss`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:330
+#, no-wrap
+msgid ""
+"Subsection header.\n"
+"Followed by the name of the subsection.\n"
+"Used to divide a `.Sh` section into subsections."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:331
+#, no-wrap
+msgid "`.Bl`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:333
+#, no-wrap
+msgid "Begin list. Start a list of items."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:334
+#, no-wrap
+msgid "`.El`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:336
+#, no-wrap
+msgid "End a list."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:337
+#, no-wrap
+msgid "`.Bd`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:340
+#, no-wrap
+msgid ""
+"Begin display.\n"
+"Begin a special area of text, like an indented area."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:341
+#, no-wrap
+msgid "`.Ed`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:342
+#, no-wrap
+msgid "End display."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:345
+#, no-wrap
+msgid "Inline Macros"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:348
+msgid "Many macros are used to mark up inline text."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:353
+#, no-wrap
+msgid "Inline Macro"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:357
+#, no-wrap
+msgid "`.Nm`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:360
+#, no-wrap
+msgid ""
+"Name.\n"
+"Called with a name as a parameter on the first use, then used later without the parameter to display the name that has already been defined."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:361
+#, no-wrap
+msgid "`.Pa`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:363
+#, no-wrap
+msgid ""
+"Path to a file.\n"
+"Used to mark up filenames and directory paths."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:366
+#, no-wrap
+msgid "Sample Manual Page Structures"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:369
+msgid ""
+"This section shows minimal desired man page contents for several common "
+"categories of manual pages."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:371
+#, no-wrap
+msgid "Section 1 or 8 Command"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:374
+msgid "The preferred basic structure for a section 1 or 8 command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:395
+#, no-wrap
+msgid ""
+".Dd August 25, 2017\n"
+".Dt EXAMPLECMD 8\n"
+".Os\n"
+".Sh NAME\n"
+".Nm examplecmd\n"
+".Nd \"command to demonstrate section 1 and 8 man pages\"\n"
+".Sh SYNOPSIS\n"
+".Nm\n"
+".Op Fl v\n"
+".Sh DESCRIPTION\n"
+"The\n"
+".Nm\n"
+"utility does nothing except demonstrate a trivial but complete\n"
+"manual page for a section 1 or 8 command.\n"
+".Sh SEE ALSO\n"
+".Xr exampleconf 5\n"
+".Sh AUTHORS\n"
+".An Firstname Lastname Aq Mt flastname@example.com\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:398
+#, no-wrap
+msgid "Section 4 Device Driver"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:401
+msgid "The preferred basic structure for a section 4 device driver:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:457
+#, no-wrap
+msgid ""
+".Dd August 25, 2017\n"
+".Dt EXAMPLEDRIVER 4\n"
+".Os\n"
+".Sh NAME\n"
+".Nm exampledriver\n"
+".Nd \"driver to demonstrate section 4 man pages\"\n"
+".Sh SYNOPSIS\n"
+"To compile this driver into the kernel, add this line to the\n"
+"kernel configuration file:\n"
+".Bd -ragged -offset indent\n"
+".Cd \"device exampledriver\"\n"
+".Ed\n"
+".Pp\n"
+"To load the driver as a module at boot, add this line to\n"
+".Xr loader.conf 5 :\n"
+".Bd -literal -offset indent\n"
+"exampledriver_load=\"YES\"\n"
+".Ed\n"
+".Sh DESCRIPTION\n"
+"The\n"
+".Nm\n"
+"driver provides an opportunity to show a skeleton or template\n"
+"file for section 4 manual pages.\n"
+".Sh HARDWARE\n"
+"The\n"
+".Nm\n"
+"driver supports these cards from the aptly-named Nonexistent\n"
+"Technologies:\n"
+".Pp\n"
+".Bl -bullet -compact\n"
+".It\n"
+"NT X149.2 (single and dual port)\n"
+".It\n"
+"NT X149.8 (single port)\n"
+".El\n"
+".Sh DIAGNOSTICS\n"
+".Bl -diag\n"
+".It \"flashing green light\"\n"
+"Something bad happened.\n"
+".It \"flashing red light\"\n"
+"Something really bad happened.\n"
+".It \"solid black light\"\n"
+"Power cord is unplugged.\n"
+".El\n"
+".Sh SEE ALSO\n"
+".Xr example 8\n"
+".Sh HISTORY\n"
+"The\n"
+".Nm\n"
+"device driver first appeared in\n"
+".Fx 49.2 .\n"
+".Sh AUTHORS\n"
+".An Firstname Lastname Aq Mt flastname@example.com\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:460
+#, no-wrap
+msgid "Section 5 Configuration File"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:463
+msgid "The preferred basic structure for a section 5 configuration file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:479
+#, no-wrap
+msgid ""
+".Dd August 25, 2017\n"
+".Dt EXAMPLECONF 5\n"
+".Os\n"
+".Sh NAME\n"
+".Nm example.conf\n"
+".Nd \"config file to demonstrate section 5 man pages\"\n"
+".Sh DESCRIPTION\n"
+".Nm\n"
+"is an example configuration file.\n"
+".Sh SEE ALSO\n"
+".Xr example 8\n"
+".Sh AUTHORS\n"
+".An Firstname Lastname Aq Mt flastname@example.com\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:482
+#, no-wrap
+msgid "Testing"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:489
+msgid ""
+"Testing a new manual page can be challenging. Fortunately there are some "
+"tools that can assist in the task. Some of them, like man:man[1], do not "
+"look in the current directory. It is a good idea to prefix the filename "
+"with `./` if the new manual page is in the current directory. An absolute "
+"path can also be used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:491
+msgid "Use man:mandoc[1]'s linter to check for parsing errors:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:495
+#, no-wrap
+msgid "% mandoc -T lint ./mynewmanpage.8\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:498
+msgid "Use package:textproc/igor[] to proofread the manual page:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:502
+#, no-wrap
+msgid "% igor ./mynewmanpage.8\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:507
+msgid ""
+"Another useful tool is package:textproc/vale[]. It does not support the man:"
+"mdoc[7] syntax but the rendered manual page can be read from standard input:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:511
+#, no-wrap
+msgid "% man ls | vale\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:515
+msgid ""
+"package:textproc/vale[] is highly configurable. It is advised to read its "
+"documentation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:517
+msgid "Use man:man[1] to check the final result of your changes:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:521
+#, no-wrap
+msgid "% man ./mynewmanpage.8\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:524
+msgid ""
+"You can use man:col[1] to filter the output of man:man[1] and get rid of the "
+"backspace characters before loading the result in your favorite editor for "
+"spell checking:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:528
+#, no-wrap
+msgid "% man ./mynewmanpage.8 | col -b | vim -R -\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:533
+msgid ""
+"Spell-checking with fully-featured dictionaries is encouraged, and can be "
+"accomplished by using package:textproc/hunspell[] or package:textproc/"
+"aspell[] combined with package:textproc/en-hunspell[] or package:textproc/en-"
+"aspell[], respectively. For instance:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:537
+#, no-wrap
+msgid "% aspell check --lang=en --mode=nroff ./mynewmanpage.8\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:540
+#, no-wrap
+msgid "Example Manual Pages to Use as Templates"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:543
+msgid "Some manual pages are suitable as in-depth examples."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:548
+#, no-wrap
+msgid "Manual Page"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:551
+#, no-wrap
+msgid "Path to Source Location"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:552
+#, no-wrap
+msgid "man:cp[1]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:554
+#, no-wrap
+msgid "[.filename]#/usr/src/bin/cp/cp.1#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:555
+#, no-wrap
+msgid "man:vt[4]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:557
+#, no-wrap
+msgid "[.filename]#/usr/src/share/man/man4/vt.4#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:558
+#, no-wrap
+msgid "man:crontab[5]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:560
+#, no-wrap
+msgid "[.filename]#/usr/src/usr.sbin/cron/crontab/crontab.5#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:561
+#, no-wrap
+msgid "man:gpart[8]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:562
+#, no-wrap
+msgid "[.filename]#/usr/src/sbin/geom/class/part/gpart.8#"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:565
+#, no-wrap
+msgid "Resources"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:568
+msgid "Resources for manual page writers:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:570
+msgid "man:man[1]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:571
+msgid "man:mandoc[1]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:572
+msgid "man:groff_mdoc[7]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:573
+msgid "http://manpages.bsd.lv/mdoc.html[Practical UNIX Manuals: mdoc]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:573
+msgid "http://manpages.bsd.lv/history.html[History of UNIX Manpages]"
+msgstr ""
diff --git a/documentation/content/en/books/fdp-primer/overview/_index.adoc b/documentation/content/en/books/fdp-primer/overview/_index.adoc
index c1a907a89f..20473f88a6 100644
--- a/documentation/content/en/books/fdp-primer/overview/_index.adoc
+++ b/documentation/content/en/books/fdp-primer/overview/_index.adoc
@@ -6,7 +6,7 @@ description: Overview about the FreeBSD Documentation Process
tags: ["overview", "FreeBSD Documentation Project", "quick start"]
showBookMenu: true
weight: 2
-path: "/books/fdp-primer/"
+path: "/books/fdp-primer/overview/"
---
[[overview]]
@@ -129,13 +129,24 @@ These people can help with questions or problems involving the documentation.
Review the output and edit the file to fix any problems shown, then rerun the command to find any remaining problems.
Repeat until all of the errors are resolved.
+
-. *_Always_* build and test the changes before submitting them. Running `make` in the top-level directory of the documentation will generate that documentation in HTML format.
+. *_Always_* build and review the changes before submitting them. Running `make` in the `documentation` or `website` subdirectories will generate the documentation in HTML format.
+
[source,shell]
....
% make
....
+
+To reduce compile time, only one language can be compiled:
++
+[source,shell]
+....
+% make DOC_LANG=en
+....
++
+The build output is stored in [.filename]#~/doc/documentation/public/en/articles/# and [.filename]#~/doc/documentation/public/en/books/#.
++
+. Review the build output and ensure the edits are free from typos, layout problems, or errors. If any errors are found during the build process, edit the problematic files to fix any issues that show up, then run the build command again until all errors are resolved.
++
. Add all the files with `git add .`, then review the diff with `git diff`. For example:
+
[source,shell]
@@ -163,7 +174,7 @@ please generate the [.filename]#.diff# from the base of your documentation tree.
+
In the example above, changes have been made to the *bsdinstall* portion of the Handbook.
+
-. Submit the diff file using the web-based https://bugs.FreeBSD.org/bugzilla/enter_bug.cgi?product=Documentation[Problem Report] system. If using the web form, enter a Summary of _[patch] short description of problem_. Select the Component `Documentation`. In the Description field, enter a short description of the changes and any important details about them. Use the btn:[Add an attachment] button to attach the diff file. Finally, use the btn:[Submit Bug] button to submit your diff to the problem report system.
+. Submit the patch or diff file using the web-based https://bugs.FreeBSD.org/bugzilla/enter_bug.cgi?product=Documentation[Problem Report] system. If using the web form, enter a Summary of _[patch] short description of problem_. Select the Component `Documentation`. In the Description field, enter a short description of the changes and any important details about them. Use the btn:[Add an attachment] button to attach the patch or diff file. Finally, use the btn:[Submit Bug] button to submit your diff to the problem report system.
====
[[gnu-linux-installation-process]]
@@ -171,11 +182,6 @@ In the example above, changes have been made to the *bsdinstall* portion of the
[.procedure]
====
-[TIP]
-======
-Hugo version 0.90 or higher must be used
-======
-
. Install these packages in apt-based systems like Debian or Ubuntu.
On other GNU/Linux distributions the package names may change.
Consult your distribution's package manager if in doubt.
@@ -197,7 +203,7 @@ Consult your distribution's package manager if in doubt.
Review the output and edit the files to fix any problems shown, then rerun the command to find any remaining problems.
Repeat until all of the errors are resolved.
+
-. Always build and test the changes before submitting them. Running `bmake` in the top-level directory of the documentation will generate that documentation in HTML format.
+. Always build and test the changes before submitting them. Running `bmake` in the `documentation` or `website` subdirectories will generate the documentation in HTML format.
+
[source,shell]
....
@@ -229,11 +235,11 @@ To make it easier for committers to apply the patch on their working copy of the
please generate the [.filename]#.diff# from the base of your documentation tree.
======
+
-. Submit the diff file using the web-based https://bugs.FreeBSD.org/bugzilla/enter_bug.cgi?product=Documentation[Problem Report] system.
+. Submit the patch or diff file using the web-based https://bugs.FreeBSD.org/bugzilla/enter_bug.cgi?product=Documentation[Problem Report] system.
If using the web form, enter a Summary of _short description of problem_.
Select the Component `Documentation`.
In the Description field, enter a short description of the problem in the _Summary_ field and add _patch_ to the _Keywords_ field.
-Use the btn:[Add an attachment] button to attach the diff file.
+Use the btn:[Add an attachment] button to attach the patch or diff file.
Finally, use the btn:[Submit Bug] button to submit your diff to the problem report system.
====
@@ -242,30 +248,35 @@ Finally, use the btn:[Submit Bug] button to submit your diff to the problem repo
[.procedure]
====
-[TIP]
-======
-Hugo version 0.90 or higher must be used
-======
. Install these packages using link:https://brew.sh/[Homebrew] and link:https://rubygems.org/[RubyGem].
+
[source,shell]
....
-$ brew install hugo ruby git bmake asciidoctor
+$ brew install hugo ruby git bmake
....
+
. Add Ruby to the Path.
+
[source,shell]
....
-$ echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.zshrc
+$ echo 'export GEM_PATH="$(gem environment gemdir)"' >> ~/.zshrc
+$ echo 'export PATH="$(brew --prefix ruby)/bin:$PATH"' >> ~/.zshrc
+$ source ~/.zshrc
....
+
+. Add git alias to Homebrew git since `git format-patch` from Apple-provided git won't work with Phabricator.
++
+[source,shell]
+....
+$ echo 'alias git=/usr/local/bin/git' >> ~/.zshrc
+$ source ~/.zshrc
+....
. Install the rouge package using RubyGem.
+
[source,shell]
....
-$ sudo gem install rouge
+$ sudo gem install rouge asciidoctor asciidoctor-pdf asciidoctor-epub3
....
+
. Install a local working copy of the documentation from the FreeBSD repository in [.filename]#~/doc# (see crossref:working-copy[working-copy,The Working Copy]).
@@ -280,11 +291,11 @@ $ git clone https://git.FreeBSD.org/doc.git ~/doc
Review the output and edit the files to fix any problems shown, then rerun the command to find any remaining problems.
Repeat until all of the errors are resolved.
+
-. Always build and test the changes before submitting them. Running `bmake` in the top-level directory of the documentation will generate that documentation in HTML format.
+. Always build and test the changes before submitting them. Running `bmake` in the `documentation` or `website` subdirectories will generate the documentation in HTML format.
+
[source,shell]
....
-$ bmake run LOCALBASE=/usr
+$ bmake run USE_RUBYGEMS=YES RUBY_CMD=$(brew --prefix ruby)/bin/ruby
....
. Add all the files with `git add .`, then review the diff with `git diff`. For example:
+
@@ -311,11 +322,11 @@ To make it easier for committers to apply the patch on their working copy of the
please generate the [.filename]#.diff# from the base of your documentation tree.
======
+
-. Submit the diff file using the web-based https://bugs.FreeBSD.org/bugzilla/enter_bug.cgi?product=Documentation[Problem Report] system.
+. Submit the patch or diff file using the web-based https://bugs.FreeBSD.org/bugzilla/enter_bug.cgi?product=Documentation[Problem Report] system.
If using the web form, enter a Summary of _short description of problem_.
Select the Component `Documentation`.
In the Description field, enter a short description of the problem in the _Summary_ field and add _patch_ to the _Keywords_ field.
-Use the btn:[Add an attachment] button to attach the diff file.
+Use the btn:[Add an attachment] button to attach the patch or diff file.
Finally, use the btn:[Submit Bug] button to submit your diff to the problem report system.
====
diff --git a/documentation/content/en/books/fdp-primer/overview/_index.po b/documentation/content/en/books/fdp-primer/overview/_index.po
new file mode 100644
index 0000000000..ec4c7dbeba
--- /dev/null
+++ b/documentation/content/en/books/fdp-primer/overview/_index.po
@@ -0,0 +1,608 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:34-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:1
+#, no-wrap
+msgid "Overview about the FreeBSD Documentation Process"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:1
+#, no-wrap
+msgid "Chapter 1. Overview"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:13
+#, no-wrap
+msgid "Overview"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:52
+msgid ""
+"Welcome to the FreeBSD Documentation Project (FDP). Quality documentation "
+"is crucial to the success of FreeBSD, and we value your contributions very "
+"highly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:54
+msgid ""
+"This document describes how the FDP is organized, how to write and submit "
+"documentation, and how to effectively use the available tools."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:57
+msgid ""
+"Everyone is welcome to contribute to the FDP. Willingness to contribute is "
+"the only membership requirement."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:59
+msgid "This primer shows how to:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:61
+msgid "Understand the role of documentation and its place in the ecosystem."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:62
+msgid "Identify which parts of FreeBSD are maintained by the FDP."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:63
+msgid "Install the required documentation tools and files."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:64
+msgid "Make changes to the documentation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:65
+msgid ""
+"Submit changes back for review and inclusion in the FreeBSD documentation."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:67
+#, no-wrap
+msgid "Documentation in the FreeBSD Ecosystem"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:71
+msgid ""
+"All documents are for the benefit of their readers, not their writers or "
+"caretakers. They should adapt to the reader and not expect the reader to "
+"adapt to them."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:73
+msgid "Never blame the reader for:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:75
+msgid "being unable to make use of a document easily or at all"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:76
+msgid "finding a document confusing"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:77
+msgid "not understanding a document or how to apply it"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:78
+msgid ""
+"not finding an explicit answer or successfully bridging gaps (or connecting "
+"dots) to reason their way to one"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:80
+msgid "Instead, acknowledge that the document is:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:82
+msgid "inaccessible"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:83
+msgid "confusing"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:84
+msgid "hard to understand or apply"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:85
+msgid "incomplete"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:87
+msgid "Then, make the document:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:89
+msgid "more accessible"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:90
+msgid "less confusing"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:91
+msgid "clearer"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:92
+msgid "more complete"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:94
+msgid "Use the following methods:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:96
+msgid ""
+"apply link:https://webaim.org/intro/#principles[accessibility best "
+"practices] to correct the problem reported and any similar ones you find"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:97
+msgid "rework or clarify the confusing structure or language"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:98
+msgid "add relevant examples to the part that is hard to understand or apply"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:99
+msgid "fill in the gaps or add the missing stepping stones"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:101
+#, no-wrap
+msgid "Quick Start"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:107
+msgid ""
+"Some preparatory steps must be taken before editing the FreeBSD "
+"documentation. First, subscribe to the {freebsd-doc}. Some team members "
+"also interact on the `#bsddocs` IRC channel on http://www.efnet.org/"
+"[EFnet]. These people can help with questions or problems involving the "
+"documentation."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:109
+#, no-wrap
+msgid "FreeBSD installation process"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:114
+msgid ""
+"Install these packages. The `docproj` _meta-port_ installs all the "
+"applications required to do useful work with the FreeBSD documentation."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:118
+#, no-wrap
+msgid "# pkg install docproj\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:121
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:195
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:283
+msgid ""
+"Install a local working copy of the documentation from the FreeBSD "
+"repository in [.filename]#~/doc# (see crossref:working-copy[working-copy,The "
+"Working Copy])."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:125
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:199
+#, no-wrap
+msgid "% git clone https://git.FreeBSD.org/doc.git ~/doc\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:128
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:202
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:290
+msgid ""
+"Edit the documentation files that require changes. If a file needs major "
+"changes, consult the mailing list for input."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:131
+msgid ""
+"Review the output and edit the file to fix any problems shown, then rerun "
+"the command to find any remaining problems. Repeat until all of the errors "
+"are resolved."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:133
+#, no-wrap
+msgid "*_Always_* build and review the changes before submitting them. Running `make` in the `documentation` or `website` subdirectories will generate the documentation in HTML format.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:137
+#, no-wrap
+msgid "% make\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:140
+msgid "To reduce compile time, only one language can be compiled:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:144
+#, no-wrap
+msgid "% make DOC_LANG=en\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:147
+msgid ""
+"The build output is stored in [.filename]#~/doc/documentation/public/en/"
+"articles/# and [.filename]#~/doc/documentation/public/en/books/#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:149
+msgid ""
+"Review the build output and ensure the edits are free from typos, layout "
+"problems, or errors. If any errors are found during the build process, edit "
+"the problematic files to fix any issues that show up, then run the build "
+"command again until all errors are resolved."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:151
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:214
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:301
+msgid ""
+"Add all the files with `git add .`, then review the diff with `git diff`. "
+"For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:156
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:219
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:306
+#, no-wrap
+msgid ""
+"% git add .\n"
+"% git diff --staged\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:159
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:222
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:309
+msgid ""
+"Make sure that all required files are included, then commit the change to "
+"your local branch and generate a patch with `git format-patch`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:164
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:227
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:314
+#, no-wrap
+msgid ""
+"% git commit\n"
+"% git format-patch origin/main\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:168
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:231
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:318
+msgid ""
+"Patch generated with `git format-patch` will include author identity and "
+"email addresses, making it easier for developers to apply (with `git am`) "
+"and give proper credit."
+msgstr ""
+
+#. type: delimited block = 6
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:173
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:236
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:323
+msgid ""
+"To make it easier for committers to apply the patch on their working copy of "
+"the documentation tree, please generate the [.filename]#.diff# from the base "
+"of your documentation tree."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:176
+msgid ""
+"In the example above, changes have been made to the *bsdinstall* portion of "
+"the Handbook."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:178
+msgid ""
+"Submit the patch or diff file using the web-based https://bugs.FreeBSD.org/"
+"bugzilla/enter_bug.cgi?product=Documentation[Problem Report] system. If "
+"using the web form, enter a Summary of _[patch] short description of "
+"problem_. Select the Component `Documentation`. In the Description field, "
+"enter a short description of the changes and any important details about "
+"them. Use the btn:[Add an attachment] button to attach the patch or diff "
+"file. Finally, use the btn:[Submit Bug] button to submit your diff to the "
+"problem report system."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:181
+#, no-wrap
+msgid "GNU/Linux installation process"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:188
+msgid ""
+"Install these packages in apt-based systems like Debian or Ubuntu. On other "
+"GNU/Linux distributions the package names may change. Consult your "
+"distribution's package manager if in doubt."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:192
+#, no-wrap
+msgid "# apt install hugo ruby-asciidoctor ruby-asciidoctor-pdf ruby-rouge git bmake\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:205
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:293
+msgid ""
+"Review the output and edit the files to fix any problems shown, then rerun "
+"the command to find any remaining problems. Repeat until all of the errors "
+"are resolved."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:207
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:295
+msgid ""
+"Always build and test the changes before submitting them. Running `bmake` in "
+"the `documentation` or `website` subdirectories will generate the "
+"documentation in HTML format."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:211
+#, no-wrap
+msgid "% bmake run LOCALBASE=/usr\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:244
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:331
+msgid ""
+"Submit the patch or diff file using the web-based https://bugs.FreeBSD.org/"
+"bugzilla/enter_bug.cgi?product=Documentation[Problem Report] system. If "
+"using the web form, enter a Summary of _short description of problem_. "
+"Select the Component `Documentation`. In the Description field, enter a "
+"short description of the problem in the _Summary_ field and add _patch_ to "
+"the _Keywords_ field. Use the btn:[Add an attachment] button to attach the "
+"patch or diff file. Finally, use the btn:[Submit Bug] button to submit your "
+"diff to the problem report system."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:247
+#, no-wrap
+msgid "macOS(R) installation process"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:253
+msgid ""
+"Install these packages using link:https://brew.sh/[Homebrew] and link:"
+"https://rubygems.org/[RubyGem]."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:257
+#, no-wrap
+msgid "$ brew install hugo ruby git bmake\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:260
+msgid "Add Ruby to the Path."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:266
+#, no-wrap
+msgid ""
+"$ echo 'export GEM_PATH=\"$(gem environment gemdir)\"' >> ~/.zshrc\n"
+"$ echo 'export PATH=\"$(brew --prefix ruby)/bin:$PATH\"' >> ~/.zshrc\n"
+"$ source ~/.zshrc\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:269
+msgid ""
+"Add git alias to Homebrew git since `git format-patch` from Apple-provided "
+"git won't work with Phabricator."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:274
+#, no-wrap
+msgid ""
+"$ echo 'alias git=/usr/local/bin/git' >> ~/.zshrc\n"
+"$ source ~/.zshrc\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:276
+msgid "Install the rouge package using RubyGem."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:280
+#, no-wrap
+msgid "$ sudo gem install rouge asciidoctor asciidoctor-pdf asciidoctor-epub3\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:287
+#, no-wrap
+msgid "$ git clone https://git.FreeBSD.org/doc.git ~/doc\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:299
+#, no-wrap
+msgid "$ bmake run USE_RUBYGEMS=YES RUBY_CMD=$(brew --prefix ruby)/bin/ruby\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:334
+#, no-wrap
+msgid "The FreeBSD Documentation Set"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:337
+msgid "The FDP is responsible for four categories of FreeBSD documentation."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:339
+msgid ""
+"_Handbook_: The Handbook is the comprehensive online resource and reference "
+"for FreeBSD users."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:340
+msgid ""
+"_FAQ_: The FAQ uses a short question and answer format to address questions "
+"that are frequently asked on the various mailing lists and forums devoted to "
+"FreeBSD. This format does not permit long and comprehensive answers."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:341
+msgid ""
+"_Manual pages_: The English language system manual pages are usually not "
+"written by the FDP, as they are part of the base system. However, the FDP "
+"can reword parts of existing manual pages to make them clearer or to correct "
+"inaccuracies."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:342
+msgid ""
+"_Web site_: This is the main FreeBSD presence on the web, visible at https://"
+"www.freebsd.org/[https://www.FreeBSD.org/] and many mirrors around the "
+"world. The web site is typically a new user's first exposure to FreeBSD."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:345
+msgid ""
+"Translation teams are responsible for translating the Handbook and web site "
+"into different languages. Manual pages are not translated at present."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:347
+msgid ""
+"Documentation source for the FreeBSD web site, Handbook, and FAQ is "
+"available in the documentation repository at `https://cgit.freebsd.org/doc/`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:349
+msgid ""
+"Source for manual pages is available in a separate source repository located "
+"at `https://cgit.freebsd.org/src/`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:352
+msgid ""
+"Documentation commit messages are visible with `git log`. Commit messages "
+"are also archived at link:{dev-commits-doc-all}."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:354
+msgid ""
+"Web frontends to both of these repositories are available at https://cgit."
+"freebsd.org/doc/[] and https://cgit.freebsd.org/src/[]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:358
+msgid ""
+"Many people have written tutorials or how-to articles about FreeBSD. Some "
+"are stored as part of the FDP files. In other cases, the author has decided "
+"to keep the documentation separate. The FDP endeavors to provide links to "
+"as much of this external documentation as possible."
+msgstr ""
diff --git a/documentation/content/en/books/fdp-primer/po-translations/_index.adoc b/documentation/content/en/books/fdp-primer/po-translations/_index.adoc
index fc6da5fcb8..279803ce06 100644
--- a/documentation/content/en/books/fdp-primer/po-translations/_index.adoc
+++ b/documentation/content/en/books/fdp-primer/po-translations/_index.adoc
@@ -1,12 +1,12 @@
---
title: Chapter 9. PO Translations
prev: books/fdp-primer/translations
-next: books/fdp-primer/manual-pages
+next: books/fdp-primer/weblate
description: How to work with PO translation in the FreeBSD Documentation Project
tags: ["po", "translations", "tutorial", "quick start"]
showBookMenu: true
-weight: 10
-path: "/books/fdp-primer/"
+weight: 9
+path: "/books/fdp-primer/po-translations/"
---
[[po-translations]]
@@ -93,13 +93,18 @@ The path is the same except for the name of the language directory.
% mkdir ~/doc/documentation/content/es/articles/leap-seconds
....
-. Copy the [.filename]#_index.adoc# from the original document into the translation directory:
+. Copy the [.filename]#_index.po# from the original document into the translation directory:
+
[source,shell]
....
-% cp ~/doc/documentation/content/en/articles/leap-seconds/_index.adoc \
+% cp ~/doc/documentation/content/en/articles/leap-seconds/_index.po \
~/doc/documentation/content/es/articles/leap-seconds/
....
+
+Suppose the document or language is also being translated via Weblate.
+In that case, it is good to get the `.po` file from there and upload the translation document back into the platform, centralizing the translating efforts via Weblate to avoid rework.
+
+See how to download the `.po` files in the crossref:weblate[weblate-translating-offline,Translating Offline on Weblate] chapter.
====
[[po-translations-quick-start-translation]]
@@ -107,27 +112,9 @@ The path is the same except for the name of the language directory.
====
.Procedure: Translation
-Translating a document consists of two steps: extracting translatable strings from the original document, and entering translations for those strings.
-These steps are repeated until the translator feels that enough of the document has been translated to produce a usable translated document.
+Use a PO editor to enter translations in the PO file.
+There are several different editors available. [.filename]#poedit# from package:editors/poedit[] is shown here.
-. Extract the translatable strings from the original English version into a PO file:
-+
-[source,shell]
-....
-% cd ~/doc
-% po4a-gettextize \
- --format asciidoc \
- --option compat=asciidoctor \
- --option yfm_keys=title,part,description \
- --master "documentation/content/en/articles/leap-seconds/_index.adoc" \
- --master-charset "UTF-8" \
- --copyright-holder "The FreeBSD Project" \
- --package-name "FreeBSD Documentation" \
- --po "documentation/content/es/articles/leap-seconds/_index.po"
-....
-+
-. Use a PO editor to enter translations in the PO file. There are several different editors available. [.filename]#poedit# from package:editors/poedit[] is shown here.
-+
[source,shell]
....
% poedit documentation/content/es/articles/leap-seconds/_index.po
@@ -143,16 +130,7 @@ These steps are repeated until the translator feels that enough of the document
[source,shell]
....
% cd ~/doc
-% po4a-translate \
- --format asciidoc \
- --option compat=asciidoctor \
- --option yfm_keys=title,part,description \
- --master "documentation/content/en/articles/leap-seconds/_index.adoc" \
- --master-charset "UTF-8" \
- --po "documentation/content/es/articles/leap-seconds/_index.po" \
- --localized "documentation/content/es/articles/leap-seconds/_index.adoc" \
- --localized-charset "UTF-8" \
- --keep 0
+% ./tools/translate.sh documentation es articles/leap-seconds
....
+
The name of the generated document matches the name of the English original, usually [.filename]#_index.adoc#.
@@ -319,39 +297,10 @@ The Ports Collection offers several of these editors, including package:devel/gt
It is important to preserve the PO file.
It contains all of the work that translators have done.
-[[po-translations-translating-example]]
-.Translating the Porter's Handbook to Spanish
-[example]
+[IMPORTANT]
====
-
-[.procedure]
-======
-. Change to the base directory and update all PO files.
-+
-[source,shell]
-....
-% cd ~/doc
-% po4a-gettextize \
- --format asciidoc \
- --option compat=asciidoctor \
- --option yfm_keys=title,part,description \
- --master "documentation/content/en/books/porters-handbook/_index.adoc" \
- --master-charset "UTF-8" \
- --copyright-holder "The FreeBSD Project" \
- --package-name "FreeBSD Documentation" \
- --po "documentation/content/es/books/porters-handbook/_index.po"
-....
-
-. Enter translations using a PO editor:
-+
-[source,shell]
-....
-% poedit documentation/content/es/books/porters-handbook/_index.po
-....
-======
-
-These steps are necessary for all `.adoc` files, excluding `chapters-order.adoc` and `toc-*.adoc`.
-
+Translating documents online proves to be the easiest method for document translation on FreeBSD, as it allows multiple users to collaborate on the same file, distributing the workload effectively.
+For more details, please refer to the next chapter, crossref:weblate[weblate-introduction,Weblate Translations].
====
[[po-translations-tips]]
@@ -414,6 +363,8 @@ Any untranslated portions of the original will be included in English in the res
Most PO editors have an indicator that shows how much of the translation has been completed.
This makes it easy for the translator to see when enough strings have been translated to make building the final document worthwhile.
+The Weblate chapter provides a complete example of how to crossref:weblate[weblate-building,Build the Translated Document].
+
[[po-translations-submitting]]
== Submitting the New Translation
@@ -438,4 +389,6 @@ The diff files created by these examples can be attached to a https://bugs.freeb
....
======
+The Weblate chapter provides a complete example of how to crossref:weblate[weblate-submitting-translations,Submit the New Translation].
+
====
diff --git a/documentation/content/en/books/fdp-primer/po-translations/_index.po b/documentation/content/en/books/fdp-primer/po-translations/_index.po
new file mode 100644
index 0000000000..282d21b676
--- /dev/null
+++ b/documentation/content/en/books/fdp-primer/po-translations/_index.po
@@ -0,0 +1,917 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-06-19 21:07-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:1
+#, no-wrap
+msgid "How to work with PO translation in the FreeBSD Documentation Project"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:1
+#, no-wrap
+msgid "Chapter 9. PO Translations"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:13
+#, no-wrap
+msgid "PO Translations"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:51
+#, no-wrap
+msgid "Introduction"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:57
+msgid ""
+"The http://www.gnu.org/software/gettext/[GNU gettext] system offers "
+"translators an easy way to create and maintain translations of documents. "
+"Translatable strings are extracted from the original document into a PO "
+"(Portable Object) file. Translated versions of the strings are entered with "
+"a separate editor. The strings can be used directly or built into a "
+"complete translated version of the original document."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:59
+#, no-wrap
+msgid "Quick Start"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:63
+msgid ""
+"The procedure shown in crossref:overview[overview-quick-start,Quick Start] "
+"is assumed to have already been performed. The `TRANSLATOR` option is "
+"required and already enabled by default in the package:textproc/docproj[] "
+"port."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:65
+msgid ""
+"This example shows the creation of a Spanish translation of the short extref:"
+"{leap-seconds}[Leap Seconds] article."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:70
+#, no-wrap
+msgid "Procedure: Install a PO Editor"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:72
+msgid ""
+"A PO editor is needed to edit translation files. This example uses package:"
+"editors/poedit[]."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:76
+#, no-wrap
+msgid "# pkg install poedit\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:82
+#, no-wrap
+msgid "Procedure: Initial Setup"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:85
+msgid ""
+"When a new translation is first created, the directory structure must be "
+"created or copied from the English original:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:90
+msgid ""
+"Create a directory for the new translation. The English article source is in "
+"[.filename]#~/doc/documentation/content/en/articles/leap-seconds/#. The "
+"Spanish translation will go in [.filename]#~/doc/documentation/content/es/"
+"articles/leap-seconds/#. The path is the same except for the name of the "
+"language directory. The English article source is in [.filename]#~/doc/en/"
+"articles/leap-seconds/#. The Spanish translation will go in [.filename]#~/"
+"doc/es/articles/leap-seconds/#. The path is the same except for the name of "
+"the language directory."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:94
+#, no-wrap
+msgid "% mkdir ~/doc/documentation/content/es/articles/leap-seconds\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:97
+msgid ""
+"Copy the [.filename]#_index.po# from the original document into the "
+"translation directory:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:102
+#, no-wrap
+msgid ""
+"% cp ~/doc/documentation/content/en/articles/leap-seconds/_index.po \\\n"
+" ~/doc/documentation/content/es/articles/leap-seconds/\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:106
+msgid ""
+"Suppose the document or language is also being translated via Weblate. In "
+"that case, it is good to get the `.po` file from there and upload the "
+"translation document back into the platform, centralizing the translating "
+"efforts via Weblate to avoid rework."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:108
+msgid ""
+"See how to download the `.po` files in the crossref:weblate[weblate-"
+"translating-offline,Translating Offline on Weblate] chapter."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:113
+#, no-wrap
+msgid "Procedure: Translation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:117
+msgid ""
+"Use a PO editor to enter translations in the PO file. There are several "
+"different editors available. [.filename]#poedit# from package:editors/"
+"poedit[] is shown here."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:121
+#, no-wrap
+msgid "% poedit documentation/content/es/articles/leap-seconds/_index.po\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:127
+#, no-wrap
+msgid "Procedure: Generating a Translated Document"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:129
+msgid "Generate the translated document:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:134
+#, no-wrap
+msgid ""
+"% cd ~/doc\n"
+"% ./tools/translate.sh documentation es articles/leap-seconds\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:137
+msgid ""
+"The name of the generated document matches the name of the English original, "
+"usually [.filename]#_index.adoc#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:139
+msgid ""
+"Check the generated file by rendering it to HTML and viewing it with a web "
+"browser:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:144
+#, no-wrap
+msgid ""
+"% cd ~/doc/documentation\n"
+"% make\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:148
+#, no-wrap
+msgid "Creating New Translations"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:153
+msgid ""
+"The first step to creating a new translated document is locating or creating "
+"a directory to hold it. FreeBSD puts translated documents in a subdirectory "
+"named for their language and region in the format [.filename]#lang#. _lang_ "
+"is a two-character lowercase code."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:155
+#, no-wrap
+msgid "Language Names"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:159
+#, no-wrap
+msgid "Language"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:160
+#, no-wrap
+msgid "Region"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:162
+#, no-wrap
+msgid "Translated Directory Name"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:163
+#, no-wrap
+msgid "English"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:164
+#, no-wrap
+msgid "United States"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:166
+#, no-wrap
+msgid "[.filename]#en#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:167
+#, no-wrap
+msgid "Bengali"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:168
+#, no-wrap
+msgid "Bangladesh"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:170
+#, no-wrap
+msgid "[.filename]#bn-bd#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:171
+#, no-wrap
+msgid "Danish"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:172
+#, no-wrap
+msgid "Denmark"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:174
+#, no-wrap
+msgid "[.filename]#da#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:175
+#, no-wrap
+msgid "German"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:176
+#, no-wrap
+msgid "Germany"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:178
+#, no-wrap
+msgid "[.filename]#de#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:179
+#, no-wrap
+msgid "Greek"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:180
+#, no-wrap
+msgid "Greece"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:182
+#, no-wrap
+msgid "[.filename]#el#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:183
+#, no-wrap
+msgid "Spanish"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:184
+#, no-wrap
+msgid "Spain"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:186
+#, no-wrap
+msgid "[.filename]#es#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:187
+#, no-wrap
+msgid "French"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:188
+#, no-wrap
+msgid "France"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:190
+#, no-wrap
+msgid "[.filename]#fr#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:191
+#, no-wrap
+msgid "Hungarian"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:192
+#, no-wrap
+msgid "Hungary"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:194
+#, no-wrap
+msgid "[.filename]#hu#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:195
+#, no-wrap
+msgid "Italian"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:196
+#, no-wrap
+msgid "Italy"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:198
+#, no-wrap
+msgid "[.filename]#it#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:199
+#, no-wrap
+msgid "Japanese"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:200
+#, no-wrap
+msgid "Japan"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:202
+#, no-wrap
+msgid "[.filename]#ja#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:203
+#, no-wrap
+msgid "Korean"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:204
+#, no-wrap
+msgid "Korea"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:206
+#, no-wrap
+msgid "[.filename]#ko#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:207
+#, no-wrap
+msgid "Mongolian"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:208
+#, no-wrap
+msgid "Mongolia"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:210
+#, no-wrap
+msgid "[.filename]#mn#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:211
+#, no-wrap
+msgid "Dutch"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:212
+#, no-wrap
+msgid "Netherlands"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:214
+#, no-wrap
+msgid "[.filename]#nl#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:215
+#, no-wrap
+msgid "Polish"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:216
+#, no-wrap
+msgid "Poland"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:218
+#, no-wrap
+msgid "[.filename]#pl#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:219
+#, no-wrap
+msgid "Portuguese"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:220
+#, no-wrap
+msgid "Brazil"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:222
+#, no-wrap
+msgid "[.filename]#pt-br#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:223
+#, no-wrap
+msgid "Russian"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:224
+#, no-wrap
+msgid "Russia"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:226
+#, no-wrap
+msgid "[.filename]#ru#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:227
+#, no-wrap
+msgid "Turkish"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:228
+#, no-wrap
+msgid "Turkey"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:230
+#, no-wrap
+msgid "[.filename]#tr#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:231
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:235
+#, no-wrap
+msgid "Chinese"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:232
+#, no-wrap
+msgid "China"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:234
+#, no-wrap
+msgid "[.filename]#zh-cn#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:236
+#, no-wrap
+msgid "Taiwan"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:237
+#, no-wrap
+msgid "[.filename]#zh-tw#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:243
+msgid ""
+"The translations are in subdirectories of the main documentation directory, "
+"here assumed to be [.filename]#~/doc/documentation/# as shown in crossref:"
+"overview[overview-quick-start, Quick Start]. For example, German "
+"translations are located in [.filename]#~/doc/documentation/content/de/#, "
+"and French translations are in [.filename]#~/doc/documentation/content/fr/#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:245
+msgid ""
+"Each language directory contains separate subdirectories named for the type "
+"of documents, usually [.filename]#articles/# and [.filename]#books/#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:249
+msgid ""
+"Combining these directory names gives the complete path to an article or "
+"book. For example, the French translation of the NanoBSD article is in [."
+"filename]#~/doc/documentation/content/fr/articles/nanobsd/#, and the "
+"Mongolian translation of the Handbook is in [.filename]#~/doc/documentation/"
+"content/mn/books/handbook/#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:252
+msgid ""
+"A new language directory must be created when translating a document to a "
+"new language. If the language directory already exists, only a subdirectory "
+"in the [.filename]#articles/# or [.filename]#books/# directory is needed."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:254
+#, no-wrap
+msgid "Creating a Spanish Translation of the Porter's Handbook"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:259
+msgid ""
+"Create a new Spanish translation of the extref:{porters-handbook}[Porter's "
+"Handbook]. The original is a book in [.filename]#~/doc/documentation/"
+"content/en/books/porters-handbook/#."
+msgstr ""
+
+#. type: delimited block = 6
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:264
+msgid ""
+"The Spanish language books directory [.filename]#~/doc/documentation/content/"
+"es/books/# already exists, so only a new subdirectory for the Porter's "
+"Handbook is needed:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:269
+#, no-wrap
+msgid ""
+"% cd ~/doc/documentation/content/es/books\n"
+"% mkdir porters-handbook\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:272
+msgid "Copy the content from the original book:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:277
+#, no-wrap
+msgid ""
+"% cd porters-handbook\n"
+"% cp -R ~/doc/documentation/content/en/books/porters-handbook/* .\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:280
+msgid ""
+"Now the document structure is ready for the translator to begin translating "
+"with `po4a` command."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:284
+#, no-wrap
+msgid "Translating"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:289
+msgid ""
+"The gettext system greatly reduces the number of things that must be tracked "
+"by a translator. Strings to be translated are extracted from the original "
+"document into a PO file. Then a PO editor is used to enter the translated "
+"versions of each string."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:291
+msgid ""
+"The FreeBSD PO translation system does not overwrite PO files, so the "
+"extraction step can be run at any time to update the PO file."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:296
+msgid ""
+"A PO editor is used to edit the file. package:editors/poedit[] is shown in "
+"these examples because it is simple and has minimal requirements. Other PO "
+"editors offer features to make the job of translating easier. The Ports "
+"Collection offers several of these editors, including package:devel/"
+"gtranslator[]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:299
+msgid ""
+"It is important to preserve the PO file. It contains all of the work that "
+"translators have done."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:304
+msgid ""
+"Translating documents online proves to be the easiest method for document "
+"translation on FreeBSD, as it allows multiple users to collaborate on the "
+"same file, distributing the workload effectively. For more details, please "
+"refer to the next chapter, crossref:weblate[weblate-introduction,Weblate "
+"Translations]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:307
+#, no-wrap
+msgid "Tips for Translators"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:310
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:314
+#, no-wrap
+msgid "Preserving AsciiDoc macros"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:313
+msgid "Preserve AsciiDoc macros that are shown in the English original."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:318
+msgid "English original:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:324
+#, no-wrap
+msgid ""
+"msgid \"\"\n"
+"\"This example shows the creation of a Spanish translation of the short \"\n"
+"\"extref:{leap-seconds}[Leap Seconds] article.\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:327
+msgid "Spanish translation:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:333
+#, no-wrap
+msgid ""
+"msgid \"\"\n"
+"\"Este ejemplo muestra la creación de un artículo con poco contenido como el artículo \"\n"
+"\"extref:{leap-seconds}[Leap Seconds].\"\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:338
+#, no-wrap
+msgid "Preserving Spaces"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:342
+msgid ""
+"Preserve existing spaces at the beginning and end of strings to be "
+"translated. The translated version must have these spaces also."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:344
+#, no-wrap
+msgid "Verbatim Tags"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:347
+msgid "The contents of some tags should be copied verbatim, not translated:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:349
+msgid "`man:man[1]`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:350
+msgid "`package:package[]`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:351
+msgid "`link`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:352
+msgid "`image`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:353
+msgid "`include`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:354
+msgid "`Admonitions`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:355
+msgid "`id's`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:356
+msgid "`Heading tags`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:357
+msgid "`source`"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:359
+#, no-wrap
+msgid "Building a Translated Document"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:365
+msgid ""
+"A translated version of the original document can be created at any time. "
+"Any untranslated portions of the original will be included in English in the "
+"resulting document. Most PO editors have an indicator that shows how much "
+"of the translation has been completed. This makes it easy for the "
+"translator to see when enough strings have been translated to make building "
+"the final document worthwhile."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:367
+msgid ""
+"The Weblate chapter provides a complete example of how to crossref:"
+"weblate[weblate-building,Build the Translated Document]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:369
+#, no-wrap
+msgid "Submitting the New Translation"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:373
+msgid ""
+"Prepare the new translation files for submission. This includes adding the "
+"files to the version control system, setting additional properties on them, "
+"then creating a diff for submission."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:375
+msgid ""
+"The diff files created by these examples can be attached to a https://bugs."
+"freebsd.org/bugzilla/enter_bug.cgi?product=Documentation[documentation bug "
+"report] or https://reviews.freebsd.org/[code review]."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:377
+#, no-wrap
+msgid "Spanish Translation of the NanoBSD Article"
+msgstr ""
+
+#. type: delimited block = 6
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:384
+msgid ""
+"Create a diff of the new files from the [.filename]#~/doc/# base directory "
+"so the full path is shown with the filenames. This helps committers identify "
+"the target language directory."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:389
+#, no-wrap
+msgid ""
+"% cd ~/doc\n"
+"% git diff documentation/content/es/articles/nanobsd/ > /tmp/es_nanobsd.diff\n"
+msgstr ""
+
+#. type: delimited block = 6
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:393
+msgid ""
+"The Weblate chapter provides a complete example of how to crossref:"
+"weblate[weblate-submitting-translations,Submit the New Translation]."
+msgstr ""
diff --git a/documentation/content/en/books/fdp-primer/preface/_index.adoc b/documentation/content/en/books/fdp-primer/preface/_index.adoc
index 207fc8ce9d..7e7698285f 100644
--- a/documentation/content/en/books/fdp-primer/preface/_index.adoc
+++ b/documentation/content/en/books/fdp-primer/preface/_index.adoc
@@ -6,7 +6,7 @@ description: Preface about the FreeBSD Documentation Project
tags: ["preface", "prompts", "conventions"]
showBookMenu: true
weight: 1
-path: "/books/fdp-primer/"
+path: "/books/fdp-primer/preface/"
---
[preface]
diff --git a/documentation/content/en/books/fdp-primer/preface/_index.po b/documentation/content/en/books/fdp-primer/preface/_index.po
new file mode 100644
index 0000000000..c6002cb534
--- /dev/null
+++ b/documentation/content/en/books/fdp-primer/preface/_index.po
@@ -0,0 +1,288 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 10:28-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:1
+#, no-wrap
+msgid "Preface about the FreeBSD Documentation Project"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:1
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:14
+#, no-wrap
+msgid "Preface"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:48
+#, no-wrap
+msgid "Shell Prompts"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:52
+msgid ""
+"This table shows the default system prompt and superuser prompt. The "
+"examples use these prompts to indicate which type of user is running the "
+"example."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:57
+#, no-wrap
+msgid "User"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:60
+#, no-wrap
+msgid "Prompt"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:61
+#, no-wrap
+msgid "Normal user"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:63
+#, no-wrap
+msgid "%"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:64
+#, no-wrap
+msgid "`root`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:65
+#, no-wrap
+msgid "#"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:68
+#, no-wrap
+msgid "Typographic Conventions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:71
+msgid "This table describes the typographic conventions used in this book."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:76
+#, no-wrap
+msgid "Meaning"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:79
+#, no-wrap
+msgid "Examples"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:80
+#, no-wrap
+msgid "The names of commands."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:82
+#, no-wrap
+msgid "Use `ls -l` to list all files."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:83
+#, no-wrap
+msgid "The names of files."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:85
+#, no-wrap
+msgid "Edit [.filename]#.login#."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:86
+#, no-wrap
+msgid "On-screen computer output."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:94
+#, no-wrap
+msgid ""
+"[source,shell]\n"
+"....\n"
+"You have mail.\n"
+"...."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:95
+#, no-wrap
+msgid "What the user types, contrasted with on-screen computer output."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:103
+#, no-wrap
+msgid ""
+"[source,shell]\n"
+"....\n"
+"% date +\"The time is %H:%M\"\n"
+"The time is 09:18\n"
+"...."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:104
+#, no-wrap
+msgid "Manual page references."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:106
+#, no-wrap
+msgid "Use man:su[1] to change user identity."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:107
+#, no-wrap
+msgid "User and group names."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:109
+#, no-wrap
+msgid "Only `root` can do this."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:110
+#, no-wrap
+msgid "Emphasis."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:112
+#, no-wrap
+msgid "The user _must_ do this."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:113
+#, no-wrap
+msgid "Text that the user is expected to replace with the actual text."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:115
+#, no-wrap
+msgid "To search for a keyword in the manual pages, type `man -k _keyword_`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:116
+#, no-wrap
+msgid "Environment variables."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:117
+#, no-wrap
+msgid "`$HOME` is set to the user's home directory."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:120
+#, no-wrap
+msgid "Notes, Tips, Important Information, Warnings, and Examples"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:123
+msgid "Notes, warnings, and examples appear within the text."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:127
+msgid ""
+"Notes are represented like this, and contain information to take note of, as "
+"it may affect what the user does."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:133
+msgid ""
+"Tips are represented like this, and contain information helpful to the user, "
+"such as showing an easier way to do something."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:139
+msgid ""
+"Important information is represented like this. Typically, these show extra "
+"steps the user may need to take."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:146
+msgid ""
+"Warnings are represented like this, and contain information warning about "
+"possible damage if the instructions are not followed. This damage may be "
+"physical, to the hardware or the user, or it may be non-physical, such as "
+"the inadvertent deletion of important files."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:148
+#, no-wrap
+msgid "A Sample Example"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:152
+msgid ""
+"Examples are represented like this, and typically contain examples showing a "
+"walkthrough, or the results of a particular action."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:155
+#, no-wrap
+msgid "Acknowledgments"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/preface/_index.adoc:157
+msgid ""
+"My thanks to Sue Blake, Patrick Durusau, Jon Hamilton, Peter Flynn, and "
+"Christopher Maden, who took the time to read early drafts of this document "
+"and offer many valuable comments and criticisms."
+msgstr ""
diff --git a/documentation/content/en/books/fdp-primer/rosetta/_index.adoc b/documentation/content/en/books/fdp-primer/rosetta/_index.adoc
index 1824fa5c29..e0da73c4d0 100644
--- a/documentation/content/en/books/fdp-primer/rosetta/_index.adoc
+++ b/documentation/content/en/books/fdp-primer/rosetta/_index.adoc
@@ -6,7 +6,7 @@ description: Rosetta Stone with the differences between Docbook and AsciiDoc
tags: ["rosetta", "docbook", "asciidoc", "comparison"]
showBookMenu: true
weight: 8
-path: "/books/fdp-primer/"
+path: "/books/fdp-primer/rosetta/"
---
[[rosetta]]
diff --git a/documentation/content/en/books/fdp-primer/rosetta/_index.po b/documentation/content/en/books/fdp-primer/rosetta/_index.po
new file mode 100644
index 0000000000..4205cdb3c6
--- /dev/null
+++ b/documentation/content/en/books/fdp-primer/rosetta/_index.po
@@ -0,0 +1,589 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 10:28-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:1
+#, no-wrap
+msgid "Rosetta Stone with the differences between Docbook and AsciiDoc"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:1
+#, no-wrap
+msgid "Chapter 7. Rosetta Stone"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:13
+#, no-wrap
+msgid "Rosetta Stone"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:51
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:55
+#, no-wrap
+msgid "Comparison between Docbook and AsciiDoc"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:54
+msgid ""
+"This rosetta stone tries to show the differences between Docbook and "
+"AsciiDoc."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:58
+#, no-wrap
+msgid "Language Feature"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:58
+#, no-wrap
+msgid "Docbook"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:60
+#, no-wrap
+msgid "AsciiDoc"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:61
+#, no-wrap
+msgid "*Bold*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:62
+#, no-wrap
+msgid "<strong>bold</strong>"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:64
+#, no-wrap
+msgid "\\*bold*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:65
+#, no-wrap
+msgid "*Italic*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:66
+#, no-wrap
+msgid "<emphasis>Italic</emphasis>"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:68
+#, no-wrap
+msgid "\\_Italic_"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:69
+#, no-wrap
+msgid "*Monospace*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:70
+#, no-wrap
+msgid "<literal>Monospace</literal>"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:72
+#, no-wrap
+msgid "\\`Monospace`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:73
+#, no-wrap
+msgid "*Paragraph*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:74
+#, no-wrap
+msgid "<para>This is a paragraph</para>"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:76
+#, no-wrap
+msgid "This is a paragraph"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:77
+#, no-wrap
+msgid "*Keycap*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:78
+#, no-wrap
+msgid "<keycap>F11</keycap>"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:80
+#, no-wrap
+msgid "\\kbd:[F11]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:81
+#, no-wrap
+msgid "*Links*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:86
+#, no-wrap
+msgid ""
+"[source,xml]\n"
+"----\n"
+"<link xlink:href=\"https://www.freebsd.org/where/\">Download FreeBSD</link>\n"
+"----"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:92
+#, no-wrap
+msgid ""
+"[source]\n"
+"----\n"
+"link:https://www.freebsd.org/where/[Download FreeBSD]\n"
+"----"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:93
+#, no-wrap
+msgid "*Sections*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:100
+#, no-wrap
+msgid ""
+"[source,xml]\n"
+"----\n"
+" <sect1 xml:id=\"id\">\n"
+" <title>Section 1</title>\n"
+" </sect1>\n"
+"----"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:107
+#, no-wrap
+msgid ""
+"[source]\n"
+"----\n"
+" [[id]]\n"
+" = Section 1\n"
+"----"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:108
+#, no-wrap
+msgid "*Unordered list*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:121
+#, no-wrap
+msgid ""
+"[source,xml]\n"
+"----\n"
+"<itemizedlist>\n"
+" <listitem>\n"
+" <para>When to build a custom kernel.</para>\n"
+" </listitem>\n"
+"\n"
+" <listitem>\n"
+" <para>How to take a hardware inventory.</para>\n"
+" </listitem>\n"
+"</itemizedlist>\n"
+"----"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:128
+#, no-wrap
+msgid ""
+"[source]\n"
+"----\n"
+"* When to build a custom kernel.\n"
+"* How to take a hardware inventory.\n"
+"----"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:129
+#, no-wrap
+msgid "*Ordered list*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:147
+#, no-wrap
+msgid ""
+"[source,xml]\n"
+"----\n"
+"<orderedlist>\n"
+" <listitem>\n"
+" <para>One</para>\n"
+" </listitem>\n"
+" <listitem>\n"
+" <para>Two</para>\n"
+" </listitem>\n"
+" <listitem>\n"
+" <para>Three</para>\n"
+" </listitem>\n"
+" <listitem>\n"
+" <para>Four</para>\n"
+" </listitem>\n"
+"</orderedlist>\n"
+"----"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:156
+#, no-wrap
+msgid ""
+"[source]\n"
+"----\n"
+". One\n"
+". Two\n"
+". Three\n"
+". Four\n"
+"----"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:157
+#, no-wrap
+msgid "*Variable list*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:169
+#, no-wrap
+msgid ""
+"[source,xml]\n"
+"----\n"
+"<variablelist>\n"
+" <varlistentry>\n"
+" <term>amd64</term>\n"
+" <listitem>\n"
+" <para>This is the most common desktop...</para>\n"
+" </listitem>\n"
+" </varlistentry>\n"
+"</variablelist>\n"
+"----"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:176
+#, no-wrap
+msgid ""
+"[source]\n"
+"----\n"
+"amd64::\n"
+"This is the most common desktop...\n"
+"----"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:177
+#, no-wrap
+msgid "*Source code*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:184
+#, no-wrap
+msgid ""
+"[source,xml]\n"
+"----\n"
+"<screen>\n"
+" &prompt.root; <userinput>mkdir -p /var/spool/lpd/lp</userinput>\n"
+"</screen>\n"
+"----"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:193
+#, no-wrap
+msgid ""
+"[source]\n"
+"....\n"
+"[source,shell]\n"
+"----\n"
+"# mkdir -p /var/spool/lpd/lp\n"
+"----\n"
+"...."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:194
+#, no-wrap
+msgid "*Literal block*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:207
+#, no-wrap
+msgid ""
+"[source,xml]\n"
+"----\n"
+"<programlisting>\n"
+"include GENERIC\n"
+"ident MYKERNEL\n"
+"\n"
+"options IPFIREWALL\n"
+"options DUMMYNET\n"
+"options IPFIREWALL_DEFAULT_TO_ACCEPT\n"
+"options IPDIVERT\n"
+"</programlisting>\n"
+"----"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:221
+#, no-wrap
+msgid ""
+"[source]\n"
+"----\n"
+"....\n"
+"include GENERIC\n"
+"ident MYKERNEL\n"
+"\n"
+"options IPFIREWALL\n"
+"options DUMMYNET\n"
+"options IPFIREWALL_DEFAULT_TO_ACCEPT\n"
+"options IPDIVERT\n"
+"....\n"
+"----"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:222
+#, no-wrap
+msgid "*Images*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:243
+#, no-wrap
+msgid ""
+"[source,xml]\n"
+"----\n"
+"<figure xml:id=\"bsdinstall-newboot-loader-menu\">\n"
+" <title>FreeBSD Boot Loader Menu</title>\n"
+"\n"
+" <mediaobject>\n"
+" <imageobject>\n"
+" <imagedata fileref=\"bsdinstall/bsdinstall-newboot-loader-menu\"/>\n"
+" </imageobject>\n"
+" <textobject>\n"
+" </literallayout>ASCII art replacement is no longer supported.</literallayout>\n"
+" </textobject>\n"
+" <textobject>\n"
+" <phrase>The FreeBSD loader menu, with options 1-6 to boot\n"
+" multi-user, boot single user, escape to loader prompt, reboot,\n"
+" select a kernel to load, and select boot options</phrase>\n"
+" </textobject>\n"
+" </mediaobject>\n"
+"</figure>\n"
+"----"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:251
+#, no-wrap
+msgid ""
+"[source]\n"
+"----\n"
+"[[bsdinstall-newboot-loader-menu]]\n"
+".FreeBSD Boot Loader Menu\n"
+"image::bsdinstall/bsdinstall-newboot-loader-menu[The FreeBSD loader menu, with options 1-6 to boot multi-user, boot single user, escape to loader prompt, reboot, select a kernel to load, and select boot options]\n"
+"----"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:252
+#, no-wrap
+msgid "*Includes*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:253
+#, no-wrap
+msgid "n/a"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:259
+#, no-wrap
+msgid ""
+"[source]\n"
+"----\n"
+"\\include::chapter.adoc[]\n"
+"----"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:260
+#, no-wrap
+msgid "*Tables*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:283
+#, no-wrap
+msgid ""
+"[source,xml]\n"
+"----\n"
+"<table xml:id=\"partition-schemes\" frame=\"none\" rowsep=\"1\" pgwide=\"1\">\n"
+" <title>Partitioning Schemes</title>\n"
+"\n"
+" <tgroup cols=\"2\" align=\"left\">\n"
+" <thead>\n"
+" <row>\n"
+" <entry align=\"left\">Abbreviation</entry>\n"
+" <entry align=\"left\">Description</entry>\n"
+" </row>\n"
+" </thead>\n"
+"\n"
+" <tbody>\n"
+" <row>\n"
+" <entry>APM</entry>\n"
+" <entry>Apple Partition Map, used by PowerPC(R).</entry>\n"
+" </row>\n"
+" </tbody>\n"
+" </tgroup>\n"
+"</table>\n"
+"----"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:289
+#, no-wrap
+msgid ""
+"[source]\n"
+"----\n"
+"[[partition-schemes]]\n"
+".Partitioning Schemes\n"
+"[cols=\"1,1\", frame=\"none\", options=\"header\"]\n"
+"\\"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:290
+#, no-wrap
+msgid ""
+"===\n"
+"\\"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:291
+#, no-wrap
+msgid ""
+"Abbreviation\n"
+"\\"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:293
+#, no-wrap
+msgid ""
+"Description\n"
+"\n"
+"\\"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:294
+#, no-wrap
+msgid ""
+"APM\n"
+"\\"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:296
+#, no-wrap
+msgid ""
+"Apple Partition Map, used by PowerPC(R).\n"
+"\n"
+"\\"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:299
+#, no-wrap
+msgid ""
+"===\n"
+"----"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:300
+#, no-wrap
+msgid "*Admonitions*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:307
+#, no-wrap
+msgid ""
+"[source,xml]\n"
+"----\n"
+"<tip>\n"
+" <para>This is a tip</para>\n"
+"</tip>\n"
+"----"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/rosetta/_index.adoc:316
+#, no-wrap
+msgid ""
+"[source]\n"
+"----\n"
+"[TIP]\n"
+"====\n"
+"This is a tip\n"
+"====\n"
+"----"
+msgstr ""
diff --git a/documentation/content/en/books/fdp-primer/see-also/_index.adoc b/documentation/content/en/books/fdp-primer/see-also/_index.adoc
index f41b9b6270..d3f1543b63 100644
--- a/documentation/content/en/books/fdp-primer/see-also/_index.adoc
+++ b/documentation/content/en/books/fdp-primer/see-also/_index.adoc
@@ -1,12 +1,12 @@
---
-title: Chapter 13. See Also
-prev: books/fdp-primer/editor-config/
+title: Chapter 15. See Also
+prev: books/fdp-primer/trademarks/
next: books/fdp-primer/examples
description: More information about the FreeBSD Documentation Project
tags: ["additional information", "AsciiDoctor", "HTML"]
showBookMenu: true
-weight: 14
-path: "/books/fdp-primer/"
+weight: 15
+path: "/books/fdp-primer/see-also/"
---
[[see-also]]
@@ -17,7 +17,7 @@ path: "/books/fdp-primer/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 13
+:sectnumoffset: 15
:partnums:
:source-highlighter: rouge
:experimental:
diff --git a/documentation/content/en/books/fdp-primer/see-also/_index.po b/documentation/content/en/books/fdp-primer/see-also/_index.po
new file mode 100644
index 0000000000..cd7cd25910
--- /dev/null
+++ b/documentation/content/en/books/fdp-primer/see-also/_index.po
@@ -0,0 +1,119 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-06-19 21:07-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:1
+#, no-wrap
+msgid "More information about the FreeBSD Documentation Project"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:1
+#, no-wrap
+msgid "Chapter 15. See Also"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:13
+#, no-wrap
+msgid "See Also"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:52
+msgid ""
+"This document is deliberately not an exhaustive discussion of AsciiDoc and "
+"the FreeBSD Documentation Project. For more information about these, you "
+"are encouraged to see the following web sites."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:54
+#, no-wrap
+msgid "The FreeBSD Documentation Project"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:57
+msgid ""
+"link:https://www.FreeBSD.org/docproj/[The FreeBSD Documentation Project web "
+"pages]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:58
+msgid "extref:{handbook}[The FreeBSD Handbook]"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:60
+#, no-wrap
+msgid "Hugo"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:63
+msgid "link:https://gohugo.io/[Hugo]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:64
+msgid "link:https://gohugo.io/documentation/[Hugo documentation]"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:66
+#, no-wrap
+msgid "AsciiDoctor"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:69
+msgid "link:https://asciidoctor.org/[AsciiDoctor]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:70
+msgid "link:https://docs.asciidoctor.org/[AsciiDoctor Documentation Portal]"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:72
+#, no-wrap
+msgid "HTML"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:75
+msgid "link:http://www.w3.org/[The World Wide Web Consortium]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:76
+msgid "link:https://dev.w3.org/html5/spec-LC/[The HTML 5 specification]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:77
+msgid "link:https://www.w3.org/Style/CSS/specs.en.html[CSS specification]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:77
+msgid "link:https://sass-lang.com/[Sass]"
+msgstr ""
diff --git a/documentation/content/en/books/fdp-primer/structure/_index.adoc b/documentation/content/en/books/fdp-primer/structure/_index.adoc
index d92af964e1..9287e4fd5f 100644
--- a/documentation/content/en/books/fdp-primer/structure/_index.adoc
+++ b/documentation/content/en/books/fdp-primer/structure/_index.adoc
@@ -6,7 +6,7 @@ description: Documentation Directory Structure explanation used in the FreeBSD D
tags: ["directory structure", "organization"]
showBookMenu: true
weight: 5
-path: "/books/fdp-primer/"
+path: "/books/fdp-primer/structure/"
---
[[structure]]
@@ -147,9 +147,16 @@ This section contains specific notes about particular documents managed by the F
The books are written in AsciiDoc.
-The books are organized as an AsciiDoc `book`.
-The books are divided into ``part``s, each of which contains several ``chapter``s.
-``chapter``s are further subdivided into sections (`=`) and subsections (`==`, `===`) and so on.
+For each FreeBSD book, the AsciiDoc document type (aka doctype) is `book`.
+Books have ``part``s, each of which contains several ``chapter``s.
+
+When the document is converted to HTML 5 (using the built-in `html5` backend):
+
+* AsciiDoc section level 0 (`=`) at the beginning of a ``chapter`` of a `book` will be `<h1>`
+* AsciiDoc section level 1 (`==`) must be used for the first logical section of a chapter, and will be `<h2>`
+* AsciiDoc section level 2 (`===`) must be used for the first logical subsection, and will be `<h3>`
+
+– and so on. Reference: link:https://docs.asciidoctor.org/asciidoc/latest/sections/titles-and-levels/[Section Titles and Levels | Asciidoctor Docs].
[[structure-document-books-physical]]
=== Physical Organization
@@ -159,17 +166,17 @@ There are a number of files and directories within the books directory, all with
[[structure-document-books-physical-index]]
==== _index.adoc
-The *_index.adoc* defines some AsciiDoc variables that affect how the AsciiDoc source is converted to other formats and list the Table of Contents, Table of Examples, Table of Figures, Table of Tables and the abstract section.
+The *_index.adoc* file defines some AsciiDoc variables that affect how the AsciiDoc source is converted to other formats and list the Table of Contents, Table of Examples, Table of Figures, Table of Tables and the abstract section.
[[structure-document-books-physical-book]]
==== book.adoc
-The *_index.adoc* defines some AsciiDoc variables that affect how the AsciiDoc source is converted to other formats and list the Table of Contents, Table of Examples, Table of Figures, Table of Tables, the abstract section and all the chapters.
+The *book.adoc* file defines some AsciiDoc variables that affect how the AsciiDoc source is converted to other formats and list the Table of Contents, Table of Examples, Table of Figures, Table of Tables, the abstract section and all the chapters.
This file is used to generate the PDF with `asciidoctor-pdf` and to generate the book in one `html` page.
[[structure-document-books-physical-part]]
==== part*.adoc
-The *part*.adoc* files stores a brief introduction of one part of the book.
+The **part*.adoc** files store a brief introduction of one part of the book.
[[structure-document-handbook-physical-chapters]]
==== directory/_index.adoc
@@ -178,7 +185,7 @@ Each chapter in the Handbook is stored in a file called *_index.adoc* in a separ
For example, this is an example of the header of one chapter:
-[.programlisting]
+[source.programlisting,asciidoc]
....
---
title: Chapter 8. Configuring the FreeBSD Kernel
@@ -223,7 +230,7 @@ The *_index.adoc* file contains all the AsciiDoc variables and the content.
For example, this is an example of one article, the structure is pretty similar to one book chapter:
-[.programlisting]
+[source.programlisting,asciidoc]
....
---
title: Why you should use a BSD style license for your Open Source Project
diff --git a/documentation/content/en/books/fdp-primer/structure/_index.po b/documentation/content/en/books/fdp-primer/structure/_index.po
new file mode 100644
index 0000000000..5168195a5d
--- /dev/null
+++ b/documentation/content/en/books/fdp-primer/structure/_index.po
@@ -0,0 +1,579 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-01-21 20:00-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:1
+#, no-wrap
+msgid "Documentation Directory Structure explanation used in the FreeBSD Documentation Project"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:1
+#, no-wrap
+msgid "Chapter 4. Documentation Directory Structure"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:13
+#, no-wrap
+msgid "Documentation Directory Structure"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:51
+msgid "Files and directories in the *doc/* tree follow a structure meant to:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:53
+msgid "Make it easy to automate converting the document to other formats."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:54
+msgid ""
+"Promote consistency between the different documentation organizations, to "
+"make it easier to switch between working on different documents."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:55
+msgid ""
+"Make it easy to decide where in the tree new documentation should be placed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:58
+msgid ""
+"In addition, the documentation tree must accommodate documents in many "
+"different languages. It is important that the documentation tree structure "
+"does not enforce any particular defaults or cultural preferences."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:60
+#, no-wrap
+msgid "The Top Level, doc/"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:63
+msgid ""
+"There are three sections under *doc/*, documentation and website share the "
+"same structure."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:67
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:96
+#, no-wrap
+msgid "Directory"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:69
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:99
+#, no-wrap
+msgid "Usage"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:70
+#, no-wrap
+msgid "*documentation*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:73
+#, no-wrap
+msgid ""
+"Contains all the articles and books in AsciiDoc format.\n"
+"Contains subdirectories to further categorize the information by languages."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:74
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:127
+#, no-wrap
+msgid "*tools*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:77
+#, no-wrap
+msgid ""
+"Contains a set of tools used to translate the documentation and the website using link:https://weblate.org/en/[Weblate].\n"
+"The Weblate instance can be found link:https://translate-dev.freebsd.org[here]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:78
+#, no-wrap
+msgid "*shared*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:82
+#, no-wrap
+msgid ""
+"Contains files that are not specific to the various translations of the documentation.\n"
+"Contains subdirectories to further categorize the information by languages and three files to store the authors, releases and mirrors information.\n"
+"This directory is shared between `documentation` and the `website`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:83
+#, no-wrap
+msgid "*website*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:85
+#, no-wrap
+msgid ""
+"Contains the link:https://www.FreeBSD.org[FreeBSD website] in AsciiDoc format.\n"
+"Contains subdirectories to further categorize the information by languages."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:88
+#, no-wrap
+msgid "The Directories"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:92
+msgid ""
+"These directories contain the documentation and the website. The "
+"documentation is organized into subdirectories below this level, following "
+"the link:https://gohugo.io/getting-started/directory-structure/[Hugo "
+"directory structure]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:100
+#, no-wrap
+msgid "*archetypes*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:103
+#, no-wrap
+msgid ""
+"Contain templates to create new articles, books and webpages.\n"
+"For more information take a look link:https://gohugo.io/content-management/archetypes/[here]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:104
+#, no-wrap
+msgid "*config*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:108
+#, no-wrap
+msgid ""
+"Contain the Hugo configuration files.\n"
+"One main file and one file per language.\n"
+"For more information take a look link:https://gohugo.io/getting-started/configuration/[here]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:109
+#, no-wrap
+msgid "*content*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:112
+#, no-wrap
+msgid ""
+"Contain the books, articles and webpages.\n"
+"One directory exists for each available translation of the documentation, for example `en` and `zh-tw`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:113
+#, no-wrap
+msgid "*data*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:117
+#, no-wrap
+msgid ""
+"Contain custom data for build the website in link:https://en.wikipedia.org/wiki/TOML[TOML] format.\n"
+"This directory is used to store the events, news, press, etc.\n"
+"For more information take a look link:https://gohugo.io/templates/data-templates/[here]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:118
+#, no-wrap
+msgid "*static*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:122
+#, no-wrap
+msgid ""
+"Contain static assets.\n"
+"Images, security advisories, the pgpkeys, etc.\n"
+"For more information take a look link:https://gohugo.io/content-management/static-files/[here]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:123
+#, no-wrap
+msgid "*themes*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:126
+#, no-wrap
+msgid ""
+"Contain the templates in the form of `.html` files that specify how the website looks.\n"
+"For more information take a look link:https://gohugo.io/templates/[here]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:130
+#, no-wrap
+msgid ""
+"Contain tools used to enhance the documentation build.\n"
+"For example to generate the Table of Contents of the books, etc."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:131
+#, no-wrap
+msgid "*beastie.png*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:133
+#, no-wrap
+msgid "This image doesn't need an introduction ;)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:134
+#, no-wrap
+msgid "*LICENSE*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:136
+#, no-wrap
+msgid "License of the documentation, shared and website. BSD 2-Clause License."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:137
+#, no-wrap
+msgid "*Makefile*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:138
+#, no-wrap
+msgid "The *Makefile* defines the build process of the documentation and the website."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:141
+#, no-wrap
+msgid "Document-Specific Information"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:144
+msgid ""
+"This section contains specific notes about particular documents managed by "
+"the FDP."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:146
+#, no-wrap
+msgid "The Books: books/"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:149
+msgid "The books are written in AsciiDoc."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:152
+msgid ""
+"For each FreeBSD book, the AsciiDoc document type (aka doctype) is `book`. "
+"Books have ``part``s, each of which contains several ``chapter``s."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:154
+msgid ""
+"When the document is converted to HTML 5 (using the built-in `html5` "
+"backend):"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:156
+msgid ""
+"AsciiDoc section level 0 (`=`) at the beginning of a ``chapter`` of a `book` "
+"will be `<h1>`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:157
+msgid ""
+"AsciiDoc section level 1 (`==`) must be used for the first logical section "
+"of a chapter, and will be `<h2>`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:158
+msgid ""
+"AsciiDoc section level 2 (`===`) must be used for the first logical "
+"subsection, and will be `<h3>`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:160
+msgid ""
+"– and so on. Reference: link:https://docs.asciidoctor.org/asciidoc/latest/"
+"sections/titles-and-levels/[Section Titles and Levels | Asciidoctor Docs]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:162
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:222
+#, no-wrap
+msgid "Physical Organization"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:165
+msgid ""
+"There are a number of files and directories within the books directory, all "
+"with the same structure."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:167
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:227
+#, no-wrap
+msgid "_index.adoc"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:170
+msgid ""
+"The *_index.adoc* file defines some AsciiDoc variables that affect how the "
+"AsciiDoc source is converted to other formats and list the Table of "
+"Contents, Table of Examples, Table of Figures, Table of Tables and the "
+"abstract section."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:172
+#, no-wrap
+msgid "book.adoc"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:176
+msgid ""
+"The *book.adoc* file defines some AsciiDoc variables that affect how the "
+"AsciiDoc source is converted to other formats and list the Table of "
+"Contents, Table of Examples, Table of Figures, Table of Tables, the abstract "
+"section and all the chapters. This file is used to generate the PDF with "
+"`asciidoctor-pdf` and to generate the book in one `html` page."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:178
+#, no-wrap
+msgid "part*.adoc"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:180
+msgid ""
+"The **part*.adoc** files store a brief introduction of one part of the book."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:182
+#, no-wrap
+msgid "directory/_index.adoc"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:185
+msgid ""
+"Each chapter in the Handbook is stored in a file called *_index.adoc* in a "
+"separate directory from the other chapters."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:187
+msgid "For example, this is an example of the header of one chapter:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:190
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:235
+#, no-wrap
+msgid "---\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:195
+#, no-wrap
+msgid ""
+"title: Chapter 8. Configuring the FreeBSD Kernel\n"
+"part: Part II. Common Tasks\n"
+"prev: books/handbook/multimedia\n"
+"next: books/handbook/printing\n"
+"---\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:198
+msgid "[[kernelconfig]]"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:198
+#, no-wrap
+msgid "Configuring the FreeBSD Kernel"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:200
+msgid "..."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:203
+msgid ""
+"When the HTML5 version of the Handbook is produced, this will yield "
+"*kernelconfig/index.html*."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:205
+msgid ""
+"A brief look will show that there are many directories with individual "
+"*_index.adoc* files, including *basics/_index.adoc*, *introduction/_index."
+"adoc*, and *printing/_index.adoc*."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:211
+msgid ""
+"Do not name chapters or directories after their ordering within the "
+"Handbook. This ordering can change as the content within the Handbook is "
+"reorganized. Reorganization should be possible without renaming files, "
+"unless entire chapters are being promoted or demoted within the hierarchy."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:214
+#, no-wrap
+msgid "The Articles: articles/"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:217
+msgid "The articles are written in AsciiDoc."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:220
+msgid ""
+"The articles are organized as an AsciiDoc `article`. The articles are "
+"divided into sections (`=`) and subsections (`==`, `===`) and so on."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:225
+msgid "There is one *_index.adoc* file per article."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:230
+msgid ""
+"The *_index.adoc* file contains all the AsciiDoc variables and the content."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:232
+msgid ""
+"For example, this is an example of one article, the structure is pretty "
+"similar to one book chapter:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:241
+#, no-wrap
+msgid ""
+"title: Why you should use a BSD style license for your Open Source Project\n"
+"authors:\n"
+" - author: Bruce Montague\n"
+" email: brucem@alumni.cse.ucsc.edu\n"
+"trademarks: [\"freebsd\", \"intel\", \"general\"]\n"
+"---\n"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:243
+#, no-wrap
+msgid "Why you should use a BSD style license for your Open Source Project"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:252
+msgid ""
+":doctype: article :toc: macro :toclevels: 1 :icons: font :sectnums: :"
+"sectnumlevels: 6 :source-highlighter: rouge :experimental:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:254
+msgid "'''"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:256
+msgid "toc::[]"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:258
+msgid "[[intro]]"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:258
+#, no-wrap
+msgid "Introduction"
+msgstr ""
diff --git a/documentation/content/en/books/fdp-primer/tools/_index.adoc b/documentation/content/en/books/fdp-primer/tools/_index.adoc
index 6d00511dde..3c543a75bc 100644
--- a/documentation/content/en/books/fdp-primer/tools/_index.adoc
+++ b/documentation/content/en/books/fdp-primer/tools/_index.adoc
@@ -6,7 +6,7 @@ description: Tools used in the FreeBSD Documentation Project
tags: ["tools", "required tools", "optional tools"]
showBookMenu: true
weight: 3
-path: "/books/fdp-primer/"
+path: "/books/fdp-primer/tools/"
---
[[tools]]
diff --git a/documentation/content/en/books/fdp-primer/tools/_index.po b/documentation/content/en/books/fdp-primer/tools/_index.po
new file mode 100644
index 0000000000..d54febb106
--- /dev/null
+++ b/documentation/content/en/books/fdp-primer/tools/_index.po
@@ -0,0 +1,104 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:20-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/fdp-primer/tools/_index.adoc:1
+#, no-wrap
+msgid "Tools used in the FreeBSD Documentation Project"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/fdp-primer/tools/_index.adoc:1
+#, no-wrap
+msgid "Chapter 2. Tools"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/tools/_index.adoc:13
+#, no-wrap
+msgid "Tools"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/tools/_index.adoc:53
+msgid ""
+"Several software tools are used to manage the FreeBSD documentation and "
+"render it to different output formats. Some of these tools are required and "
+"must be installed before working through the examples in the following "
+"chapters. Some are optional, adding capabilities or making the job of "
+"creating documentation less demanding."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/tools/_index.adoc:55
+#, no-wrap
+msgid "Required Tools"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/tools/_index.adoc:60
+msgid ""
+"Install `docproj` _meta-port_ as shown in crossref:overview[overview,the "
+"overview chapter] from the Ports Collection. These applications are "
+"required to do useful work with the FreeBSD documentation. Some further "
+"notes on particular components are given below."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/tools/_index.adoc:62
+#, no-wrap
+msgid "Optional Tools"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/tools/_index.adoc:65
+msgid ""
+"These applications are not required, but can make working on the "
+"documentation easier or add capabilities."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/tools/_index.adoc:67
+#, no-wrap
+msgid "Software"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/fdp-primer/tools/_index.adoc:69
+#, no-wrap
+msgid "Vim (package:editors/vim[])"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/tools/_index.adoc:71
+msgid "A popular editor for working with AsciiDoctor."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/fdp-primer/tools/_index.adoc:72
+#, no-wrap
+msgid "Emacs (package:editors/emacs[])"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/tools/_index.adoc:74
+msgid ""
+"Both of these editors include a special mode for editing documents. This "
+"mode includes commands to reduce the amount of typing needed, and help "
+"reduce the possibility of errors."
+msgstr ""
diff --git a/documentation/content/en/books/fdp-primer/trademarks/_index.adoc b/documentation/content/en/books/fdp-primer/trademarks/_index.adoc
new file mode 100644
index 0000000000..5579bb8951
--- /dev/null
+++ b/documentation/content/en/books/fdp-primer/trademarks/_index.adoc
@@ -0,0 +1,97 @@
+---
+title: Chapter 14. Trademarks
+prev: books/fdp-primer/editor-config/
+next: books/fdp-primer/see-also
+description: Guidelines for trademarks in the FreeBSD Documentation Project
+tags: ["trademarks", "AsciiDoctor", "HTML"]
+showBookMenu: true
+weight: 14
+path: "/books/fdp-primer/trademarks/"
+---
+
+[[trademarks]]
+= Trademarks
+:doctype: book
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:sectnumoffset: 14
+:partnums:
+:source-highlighter: rouge
+:experimental:
+:images-path: books/fdp-primer/
+
+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::[]
+
+For all documents on the FreeBSD Documentation Project, citing registered trademarks is necessary and other trademarks is customary, and that is a requirement for every writer and contributor.
+
+[[trademark-symbols]]
+== Trademark Symbols
+
+Append a trademark symbol ((TM), (R), or other) to the first occurrence of the trademarked name, and always when using logos.
+Use the extref:{fdp-primer}/writing-style/#writing-style-special-characters[equivalent ASCII sequence], which will be rendered as the actual Unicode character.
+Also, write the trademarked name following its trademark guidelines.
+
+When in doubt, research the trademark owner's website, the product's website, and or the link:https://www.uspto.gov/trademarks[United States Patent and Trademark Office trademark search website].
+
+[[trademark-citing]]
+== Trademark Citing
+
+The FreeBSD Documentation Project provides a template for citing trademarks, which also avoids duplicating trademarks in the documents.
+
+First, look for the trademark in the link:https://cgit.freebsd.org/doc/tree/documentation/themes/beastie/i18n/en.toml#n328[Copyright section in the project's template], then add it to the trademarks tag on the `Front Matter` section of the document, located at the beginning of each document.
+
+The following is an example of the `Front Matter` of the extref:{contributing}[Contributing to FreeBSD] article:
+
+....
+---
+title: Contributing to FreeBSD
+authors:
+ - author: Jordan Hubbard
+ - author: Sam Lawrance
+ - author: Mark Linimon
+description: How to contribute to the FreeBSD Project
+trademarks: ["freebsd", "ieee", "general"]
+weight: 15
+tags: ["Contributing", "FreeBSD", "Non-Programmer Tasks", "Programmer Tasks"]
+---
+....
+
+The trademark tags `freebsd`, `ieee`, and `general` will be automatically rendered when building the document like this:
+
+....
+FreeBSD is a registered trademark of the FreeBSD Foundation.
+
+IEEE, POSIX, and 802 are registered trademarks of Institute of Electrical and Electronics Engineers, Inc. in the United States.
+
+Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this document, and the FreeBSD Project was aware of the trademark claim, the designations have been followed by the “™” or the “®” symbol.
+....
+
+If a trademark is not present in the project's template, it must be submitted.
+Any developer or contributor can update the trademarks.
+
+The `freebsd` and `general` trademark tags are usually present in all documents.
diff --git a/documentation/content/en/books/fdp-primer/trademarks/_index.po b/documentation/content/en/books/fdp-primer/trademarks/_index.po
new file mode 100644
index 0000000000..83a99ae8e4
--- /dev/null
+++ b/documentation/content/en/books/fdp-primer/trademarks/_index.po
@@ -0,0 +1,157 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-06-19 21:07-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:1
+#, no-wrap
+msgid "Guidelines for trademarks in the FreeBSD Documentation Project"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:1
+#, no-wrap
+msgid "Chapter 14. Trademarks"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:13
+#, no-wrap
+msgid "Trademarks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:51
+msgid ""
+"For all documents on the FreeBSD Documentation Project, citing registered "
+"trademarks is necessary and other trademarks is customary, and that is a "
+"requirement for every writer and contributor."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:53
+#, no-wrap
+msgid "Trademark Symbols"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:58
+msgid ""
+"Append a trademark symbol ((TM), (R), or other) to the first occurrence of "
+"the trademarked name, and always when using logos. Use the extref:{fdp-"
+"primer}/writing-style/#writing-style-special-characters[equivalent ASCII "
+"sequence], which will be rendered as the actual Unicode character. Also, "
+"write the trademarked name following its trademark guidelines."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:60
+msgid ""
+"When in doubt, research the trademark owner's website, the product's "
+"website, and or the link:https://www.uspto.gov/trademarks[United States "
+"Patent and Trademark Office trademark search website]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:62
+#, no-wrap
+msgid "Trademark Citing"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:65
+msgid ""
+"The FreeBSD Documentation Project provides a template for citing trademarks, "
+"which also avoids duplicating trademarks in the documents."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:67
+msgid ""
+"First, look for the trademark in the link:https://cgit.freebsd.org/doc/tree/"
+"documentation/themes/beastie/i18n/en.toml#n328[Copyright section in the "
+"project's template], then add it to the trademarks tag on the `Front Matter` "
+"section of the document, located at the beginning of each document."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:69
+msgid ""
+"The following is an example of the `Front Matter` of the extref:"
+"{contributing}[Contributing to FreeBSD] article:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:71
+#, no-wrap
+msgid "---\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:81
+#, no-wrap
+msgid ""
+"title: Contributing to FreeBSD\n"
+"authors:\n"
+" - author: Jordan Hubbard\n"
+" - author: Sam Lawrance\n"
+" - author: Mark Linimon\n"
+"description: How to contribute to the FreeBSD Project\n"
+"trademarks: [\"freebsd\", \"ieee\", \"general\"]\n"
+"weight: 15\n"
+"tags: [\"Contributing\", \"FreeBSD\", \"Non-Programmer Tasks\", \"Programmer Tasks\"]\n"
+"---\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:85
+msgid ""
+"The trademark tags `freebsd`, `ieee`, and `general` will be automatically "
+"rendered when building the document like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:88
+#, no-wrap
+msgid "FreeBSD is a registered trademark of the FreeBSD Foundation.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:90
+#, no-wrap
+msgid "IEEE, POSIX, and 802 are registered trademarks of Institute of Electrical and Electronics Engineers, Inc. in the United States.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:92
+#, no-wrap
+msgid "Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this document, and the FreeBSD Project was aware of the trademark claim, the designations have been followed by the “™” or the “®” symbol.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:96
+msgid ""
+"If a trademark is not present in the project's template, it must be "
+"submitted. Any developer or contributor can update the trademarks."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:97
+msgid ""
+"The `freebsd` and `general` trademark tags are usually present in all "
+"documents."
+msgstr ""
diff --git a/documentation/content/en/books/fdp-primer/translations/_index.adoc b/documentation/content/en/books/fdp-primer/translations/_index.adoc
index 02e462bb88..fccad4fb12 100644
--- a/documentation/content/en/books/fdp-primer/translations/_index.adoc
+++ b/documentation/content/en/books/fdp-primer/translations/_index.adoc
@@ -6,7 +6,7 @@ description: FAQ about the translation process in the FreeBSD Documentation Proj
tags: ["FAQ", "i18n", "i10n", "translation"]
showBookMenu: true
weight: 9
-path: "/books/fdp-primer/"
+path: "/books/fdp-primer/translations/"
---
[[translations]]
diff --git a/documentation/content/en/books/fdp-primer/translations/_index.po b/documentation/content/en/books/fdp-primer/translations/_index.po
new file mode 100644
index 0000000000..7ec4500ea7
--- /dev/null
+++ b/documentation/content/en/books/fdp-primer/translations/_index.po
@@ -0,0 +1,544 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:20-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:1
+#, no-wrap
+msgid "FAQ about the translation process in the FreeBSD Documentation Project"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:1
+#, no-wrap
+msgid "Chapter 8. Translations"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:13
+#, no-wrap
+msgid "Translations"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:51
+msgid ""
+"This is the FAQ for people translating the FreeBSD documentation (FAQ, "
+"Handbook, tutorials, manual pages, and others) to different languages."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:55
+msgid ""
+"It is _very_ heavily based on the translation FAQ from the FreeBSD German "
+"Documentation Project, originally written by Frank Gründer mailto:"
+"elwood@mc5sys.in-berlin.de[elwood@mc5sys.in-berlin.de] and translated back "
+"to English by Bernd Warken mailto:bwarken@mayn.de[bwarken@mayn.de]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:56
+#, no-wrap
+msgid "What do i18n and l10n mean?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:60
+msgid ""
+"i18n means internationalization and l10n means localization. They are just "
+"a convenient shorthand."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:63
+msgid ""
+"i18n can be read as \"i\" followed by 18 letters, followed by \"n\". "
+"Similarly, l10n is \"l\" followed by 10 letters, followed by \"n\"."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:64
+#, no-wrap
+msgid "Is there a mailing list for translators?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:69
+msgid ""
+"Yes. Different translation groups have their own mailing lists. The https://"
+"www.freebsd.org/docproj/translations[list of translation projects] has more "
+"information about the mailing lists and web sites run by each translation "
+"project. In addition there is mailto:freebsd-translators@freebsd."
+"org[freebsd-translators@freebsd.org] for general translation discussion."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:70
+#, no-wrap
+msgid "Are more translators needed?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:73
+msgid ""
+"Yes. The more people that work on translation the faster it gets done, and "
+"the faster changes to the English documentation are mirrored in the "
+"translated documents."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:75
+msgid "You do not have to be a professional translator to be able to help."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:76
+#, no-wrap
+msgid "What languages do I need to know?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:79
+msgid ""
+"Ideally, you will have a good knowledge of written English, and obviously "
+"you will need to be fluent in the language you are translating to."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:82
+msgid ""
+"English is not strictly necessary. For example, you could do a Hungarian "
+"translation of the FAQ from the Spanish translation."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:83
+#, no-wrap
+msgid "What software do I need to know?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:87
+msgid ""
+"It is strongly recommended that you maintain a local copy of the FreeBSD Git "
+"repository (at least the documentation part). This can be done by running:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:91
+#, no-wrap
+msgid "% git clone https://git.FreeBSD.org/doc.git ~/doc\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:94
+msgid "https://git.FreeBSD.org/[git.FreeBSD.org] is a public `git` server."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:98
+msgid "This will require the package:git-lite[] package to be installed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:102
+msgid ""
+"You should be comfortable using git. This will allow you to see what has "
+"changed between different versions of the files that make up the "
+"documentation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:104
+msgid ""
+"For example, to view the differences between revisions `abff932fe8` and "
+"`2191c44469` of [.filename]#documentation/content/en/articles/committers-"
+"guide/_index.adoc#, run:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:108
+#, no-wrap
+msgid "% git diff abff932fe8 2191c44469 documentation/content/en/articles/committers-guide/_index.adoc\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:111
+msgid ""
+"Please see the complete explanation of using Git in FreeBSD in the extref:"
+"{handbook}mirrors[FreeBSD Handbook, git]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:112
+#, no-wrap
+msgid "How do I find out who else might be translating to the same language?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:117
+msgid ""
+"The https://www.FreeBSD.org/docproj/translations/[Documentation Project "
+"translations page] lists the translation efforts that are currently known "
+"about. If others are already working on translating documentation to your "
+"language, please do not duplicate their efforts. Instead, contact them to "
+"see how you can help."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:119
+msgid ""
+"If no one is listed on that page as translating for your language, then send "
+"a message to the {freebsd-doc} in case someone else is thinking of doing a "
+"translation, but has not announced it yet."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:120
+#, no-wrap
+msgid "No one else is translating to my language. What do I do?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:124
+msgid ""
+"Congratulations, you have just started the \"FreeBSD _your-language-here_ "
+"Documentation Translation Project\". Welcome aboard."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:127
+msgid ""
+"First, decide whether or not you have got the time to spare. Since you are "
+"the only person working on your language at the moment it is going to be "
+"your responsibility to publicize your work and coordinate any volunteers "
+"that might want to help you."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:129
+msgid ""
+"Write an email to the Documentation Project mailing list, announcing that "
+"you are going to translate the documentation, so the Documentation Project "
+"translations page can be maintained."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:131
+msgid ""
+"If there is already someone in your country providing FreeBSD mirroring "
+"services you should contact them and ask if you can have some webspace for "
+"your project, and possibly an email address or mailing list services."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:134
+msgid ""
+"Then pick a document and start translating. It is best to start with "
+"something fairly small - either the FAQ, or one of the tutorials."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:135
+#, no-wrap
+msgid "I have translated some documentation, where do I send it?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:139
+msgid ""
+"That depends. If you are already working with a translation team (such as "
+"the Japanese team, or the German team) then they will have their own "
+"procedures for handling submitted documentation, and these will be outlined "
+"on their web pages."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:141
+msgid ""
+"If you are the only person working on a particular language (or you are "
+"responsible for a translation project and want to submit your changes back "
+"to the FreeBSD project) then you should send your translation to the FreeBSD "
+"project (see the next question)."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:142
+#, no-wrap
+msgid "I am the only person working on translating to this language, how do I submit my translation?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:146
+msgid ""
+"First, make sure your translation is organized properly. This means that it "
+"should drop into the existing documentation tree and build straight away."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:149
+msgid ""
+"Directories below this are named according to the language code they are "
+"written in, as defined in ISO639 ([.filename]#/usr/share/misc/iso639# on a "
+"version of FreeBSD newer than 20th January 1999)."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:154
+msgid ""
+"Hugo need the language codes in lowercase. For example, instead of `pt_BR` "
+"Hugo uses `pt-br`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:158
+msgid ""
+"Currently, the FreeBSD documentation is stored in a top level directory "
+"called [.filename]#documentation/#. Directories below this are named "
+"according to the language code they are written in, as defined in ISO639 ([."
+"filename]#/usr/share/misc/iso639# on a version of FreeBSD newer than 20th "
+"January 1999)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:160
+msgid ""
+"If your language can be encoded in different ways (for example, Chinese) "
+"then there should be directories below this, one for each encoding format "
+"you have provided."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:162
+msgid "Finally, you should have directories for each document."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:164
+msgid "For example, a hypothetical Swedish translation might look like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:173
+#, no-wrap
+msgid ""
+"documentation/\n"
+" content/\n"
+" sv/\n"
+" books/\n"
+" faq/\n"
+" _index.adoc\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:177
+msgid ""
+"`sv` is the name of the translation, in [.filename]#lang# form. Note the "
+"two Makefiles, which will be used to build the documentation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:179
+msgid ""
+"Use git diff command to generate a diff and send it to the link:reviews."
+"freebsd.org/[reviews system]."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:183
+#, no-wrap
+msgid "% git diff > sv-faq.diff\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:187
+msgid ""
+"You should use Bugzilla to link:https://bugs.freebsd.org/bugzilla/enter_bug."
+"cgi[submit a report] indicating that you have submitted the documentation. "
+"It would be very helpful if you could get other people to look over your "
+"translation and double check it first, since it is unlikely that the person "
+"committing it will be fluent in the language."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:190
+msgid ""
+"Someone (probably the Documentation Project Manager, currently {doceng}) "
+"will then take your translation and confirm that it builds. In particular, "
+"the following things will be looked at:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:192
+msgid "Does `make` in the [.filename]#root# directory work correctly?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:194
+msgid ""
+"If there are any problems then whoever is looking at the submission will get "
+"back to you to work them out."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:196
+msgid ""
+"If there are no problems your translation will be committed as soon as "
+"possible."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:197
+#, no-wrap
+msgid "Can I include language or country specific text in my translation?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:200
+msgid "We would prefer that you did not."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:202
+msgid ""
+"For example, suppose that you are translating the Handbook to Korean, and "
+"want to include a section about retailers in Korea in your Handbook."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:206
+msgid ""
+"There is no real reason why that information should not be in the English "
+"(or German, or Spanish, or Japanese, or ...) versions as well. It is "
+"feasible that an English speaker in Korea might try to pick up a copy of "
+"FreeBSD whilst over there. It also helps increase FreeBSD's perceived "
+"presence around the globe, which is not a bad thing."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:208
+msgid ""
+"If you have country specific information, please submit it as a change to "
+"the English Handbook (using Bugzilla) and then translate the change back to "
+"your language in the translated Handbook."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:210
+msgid "Thanks."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:211
+#, no-wrap
+msgid "Addressing the reader"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:214
+msgid ""
+"In the English documents, the reader is addressed as \"you\", there is no "
+"formal/informal distinction as there is in some languages."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:217
+msgid ""
+"If you are translating to a language which does distinguish, use whichever "
+"form is typically used in other technical documentation in your language. "
+"If in doubt, use a mildly polite form."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:218
+#, no-wrap
+msgid "Do I need to include any additional information in my translations?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:221
+msgid "Yes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:223
+msgid ""
+"The header of the English version of each document will look something like "
+"this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:231
+#, no-wrap
+msgid ""
+" ---\n"
+" title: Why you should use a BSD style license for your Open Source Project\n"
+" releaseinfo: \"$FreeBSD: head/en_US.ISO8859-1/articles/bsdl-gpl/article.xml 53942 2020-03-01 12:23:40Z carlavilla $\"\n"
+" trademarks: [\"freebsd\", \"intel\", \"general\"]\n"
+" ---\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:233
+#, no-wrap
+msgid " = Why you should use a BSD style license for your Open Source Project\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:237
+msgid ""
+"The exact boilerplate may change, but it will always include a $FreeBSD$ "
+"line and the phrase `The FreeBSD Documentation Project`. Note that the "
+"$FreeBSD$ part is expanded automatically by Git, so it should be empty (just "
+"`$FreeBSD$`) for new files."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:239
+msgid ""
+"Your translated documents should include their own FreeBSD line, and change "
+"the `FreeBSD Documentation Project` line to `The FreeBSD _language_ "
+"Documentation Project`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:241
+msgid ""
+"In addition, you should add a third line which indicates which revision of "
+"the English text this is based on."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:243
+msgid "So, the Spanish version of this file might start:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:250
+#, no-wrap
+msgid ""
+" ---\n"
+" title: Soporte para segundos intercalares en FreeBSD\n"
+" releaseinfo: \"$FreeBSD: head/es_ES.ISO8859-1/articles/leap-seconds/article.xml 53090 2019-06-01 17:52:59Z carlavilla $\"\n"
+" ---\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/translations/_index.adoc:252
+#, no-wrap
+msgid " = Soporte para segundos intercalares en FreeBSD\n"
+msgstr ""
diff --git a/documentation/content/en/books/fdp-primer/weblate/_index.adoc b/documentation/content/en/books/fdp-primer/weblate/_index.adoc
new file mode 100644
index 0000000000..0a8243646f
--- /dev/null
+++ b/documentation/content/en/books/fdp-primer/weblate/_index.adoc
@@ -0,0 +1,487 @@
+---
+title: Chapter 10. Weblate Translations
+prev: books/fdp-primer/po-translations
+next: books/fdp-primer/manual-pages
+description: "How to join the FreeBSD translators team and translate online on Weblate"
+tags: ["weblate", "po", "translations", "tutorial", "quick start"]
+showBookMenu: true
+weight: 10
+path: "/books/fdp-primer/weblate/"
+---
+
+[[weblate-translations]]
+= Weblate Translations
+:doctype: book
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:sectnumoffset: 10
+:partnums:
+:source-highlighter: rouge
+:experimental:
+:images-path: books/fdp-primer/
+
+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::[]
+
+[[weblate-introduction]]
+== Introduction
+
+This chapter describes some basic steps for joining the FreeBSD translators team, translating online on Weblate or offline, and some simple suggestions on translating, proofreading, and testing.
+It's focused on the translation part.
+
+The original documents (articles and books) are in the {main-site}[documentation portal].
+
+https://weblate.org/en/[Weblate] is web-based open-source software focused on localization; the FreeBSD project runs a local instance.
+
+[[weblate-become-translator]]
+== How to Become a FreeBSD Translator
+
+Following are simple steps to start translating articles and books of the FreeBSD Documentation Project.
+
+. Create an account on the https://translate-dev.freebsd.org/[FreeBSD Weblate instance] with an email address or your GitHub account.
+. Subscribe to the {freebsd-translators}.
+. Introduce yourself and ask to join a language team.
+If the language team does not exist, ask to create it.
+The self-introduction is essential.
+It raises your chances of being approved for write access.
+. Login to https://translate-dev.freebsd.org/[Weblate] with the new account.
+. Find the language team and choose an initial document to translate.
+. Create a Bugzilla account to submit the translations after finishing a document.
+The Documentation project is also accepting GitHub Pull Requests with translation submissions.
+
+[WARNING]
+====
+All translation files and documents must follow https://www.freebsd.org/copyright/freebsd-doc-license/[The FreeBSD Documentation License]; if this is unacceptable, please do not sign up or send any patches or translations.
+====
+
+[[weblate-introduce-yourself]]
+== Introduce Yourself
+
+Please provide a brief self-introduction on the {freebsd-translators} to initiate the process of granting access.
+This will enable a language coordinator or administrator to provide the necessary permissions for the new user of Weblate to start translating.
+
+Following is an example of how such an email could look.
+
+[.programlisting]
+....
+Subject: Self-Introduction: Name and language
+
+Name: Name (use preferred name)
+Location: City, country (optional)
+Login: username or email (essential)
+Language: Language to translate (essential)
+Profession or student status: (optional)
+About You: (free format -- info which you feel comfortable sharing with
+ others: company, school, other affiliation, historical qualifications, other
+ projects you have worked on, level and type of computer skills, other relevant skills,
+ etc.)
+You and the FreeBSD Project: (free format: other FreeBSD projects of
+ interest, comments, etc.)
+....
+
+[[weblate-login]]
+== Login to Weblate
+
+Open https://translate-dev.freebsd.org/[] and `Sign in`.
+
+image::weblate-login.png[Weblate Login,800]
+
+Use a username, email address, or GitHub account to log in.
+
+The user profile contains your preferences, name, and email address.
+The name and address will be used in commits; keep this information accurate.
+
+On the FreeBSD Weblate instance, all translations will be committed to https://github.com/freebsd/freebsd-doc-translate[freebsd-doc-translate] (an intermediate repository on GitHub), not directly to https://github.com/freebsd/freebsd-doc[freebsd-doc].
+Translators must take the PO gettext files (`.po`), converting them to `.adoc` and submit it via https://bugs.freebsd.org/bugzilla/[Bugzilla] or https://github.com/freebsd/freebsd-doc/pulls[GitHub] to get the translated document published or updated in the documentation portal.
+See more in the following sections.
+
+Weblate will commit daily, at least to `freebsd-doc-translate`, if any new strings are translated.
+
+[[weblate-find-language-team]]
+== Find a Language Team to Join In
+
+Click `Projects`, choose `Documentation`, then click `Languages`, and see all the available languages.
+
+image::weblate-languages.png[Weblate Languages,500]
+
+Note that some languages and translated documents already exist in the documentation portal and repositories.
+
+If the desired language for translation is not available in Weblate, please contact the https://www.freebsd.org/docproj/translations/[language coordinators] before asking to create a new language.
+If there is no answer, then write to the {doceng}.
+
+[[weblate-translating-online]]
+== Translating Online on Weblate
+
+Translating documents online proves to be the easiest method for document translation on FreeBSD, as it allows users to collaborate on the same file, distributing the workload.
+
+Once a coordinator or administrator grants access to a specific language for a username, the save button will be enabled, so that this user can start translating.
+
+image::weblate-documents.png[Weblate Documents,800]
+image::weblate-translate.png[Weblate Translate,800]
+
+Weblate has a set of links that lead to actual translation.
+The translation is further divided into individual checks, like `Untranslated` or `Needing review`.
+If the whole document is translated without any error, `All translations` link is still available in case a review is necessary.
+Alternatively, the search field can be used to find a specific string or term.
+
+In the https://docs.weblate.org/en/latest/user/translating.html#translation-projects[Weblate documentation], there is more info about translations, like keyboard shortcuts and other tips about the translation tool.
+
+[[weblate-translating-offline]]
+== Translating Offline
+
+Weblate on FreeBSD uses PO gettext files for translations.
+Users familiar with PO gettext files that want to translate offline can download and upload the translations through the document page on Weblate by clicking in the `Files` section.
+
+image::weblate-offline.png[Weblate Offline,800]
+
+[[weblate-automatic-suggestions]]
+== Translation based on Automatic Suggestions
+
+Languages using Weblate before the migration to Hugo/Asciidoctor can use this feature from Weblate to save time.
+
+This feature from Weblate uses the Translation Memory generated by the other components and projects on the same server.
+The former Weblate translations are hosted on the same server as read-only for that.
+
+Strings that match `100/100` in similarity can be copied and saved directly.
+Other strings will need at least minor adjustment.
+
+Some examples:
+
+image::weblate_automatic_suggestion_01.png[Weblate Automatic Suggestions 01,800]
+
+With the migration to Hugo/Asciidoctor, documents use UTF-8.
+Some HTML entities should be replaced.
+Some strings, such as links, require changes to markup.
+
+image::weblate_automatic_suggestion_02.png[Weblate Automatic Suggestions 02,800]
+
+Links:
+
+image::weblate_automatic_suggestion_03.png[Weblate Automatic Suggestions 03,800]
+
+[[weblate-proofreading-qa]]
+== Proofreading and Weblate Quality Checks
+
+The document dashboard `Project/Language/Document` shows the translation status and string status for that document.
+This page is handy for proofreading and quality checks.
+
+image::weblate-revision1.png[Weblate Revision 01,800]
+
+In this example, two strings are missing the full stop; following that link will show only those strings to be revised/translated.
+
+image::weblate-revision2.png[Weblate Revision 02,800]
+
+Translators and reviewers often value observing translated strings in context.
+
+[[weblate-building]]
+== Building the Translated Document
+
+The project does not use continuous integration and continuous delivery to build translations.
+There are studies to make it available.
+
+[NOTE]
+====
+The following example uses GitHub, as Weblate is also on GitHub.
+Note that this repository is a read-only mirror, but Pull Requests are accepted.
+====
+
+To build the translation locally, follow these steps:
+
+[[weblate-clone-repositories]]
+
+[.procedure]
+====
+.Procedure: Clone the necessary repositories
+. Clone the `freebsd-doc` repository:
++
+[source,console?prompt=%]
+....
+% git clone https://github.com/freebsd/freebsd-doc.git ~/freebsd-doc
+....
+
+. Clone the `freebsd-doc-translate` repository:
++
+[source,console?prompt=%]
+....
+% git clone https://github.com/freebsd/freebsd-doc-translate.git ~/freebsd-doc-translate
+....
+====
+
+[[weblate-copy-translation]]
+
+[.procedure]
+====
+.Procedure: Copy a translation file to `freebsd-doc`
+
+With both repositories in place, copy the translation from `freebsd-doc-translate` to `freebsd-doc`.
+Example of the Committer's Guide article translation in Spanish.
+
+[source,console?prompt=%]
+....
+% cp ~/freebsd-doc-translate/documentation/content/es/articles/committers-guide/_index.po \
+~/freebsd-doc/documentation/content/es/articles/committers-guide/
+....
+====
+
+[[weblate-translate]]
+
+[.procedure]
+====
+.Procedure: Convert a translation file (`.po`) to `.adoc`
+
+Go to the root of `freebsd-doc`.
+
+[source,console?prompt=%]
+....
+% cd ~/freebsd-doc
+....
+
+Translate (convert) the `.po` file to `.adoc`
+
+[source,console?prompt=%]
+....
+% ./tools/translate.sh documentation es articles/committers-guide
+....
+
+By default: only files with more than eighty percent of strings translated will be converted to `.adoc`.
+
+To ignore that limit:
+
+[source,console?prompt=%]
+....
+% KEEP_ENV=0 ./tools/translate.sh documentation es articles/committers-guide
+....
+
+====
+
+Some documents, like books, have many PO gettext files.
+Always copy all of them when translating and building.
+Files that weren't translated will be converted with the source (English) strings.
+
+[WARNING]
+====
+The directory structure is fundamental.
+Always follow the English document directory structure.
+====
+
+[[weblate-build]]
+
+[.procedure]
+====
+.Procedure: Build the translated document
+
+Last, the building part.
+
+Enter the documentation directory because there is no need to build the FreeBSD website.
+
+[source,console?prompt=%]
+....
+% cd documentation
+....
+
+And build the documentation.
+Note that `en` is always added by default when building any other language.
+
+[source,console?prompt=%]
+....
+% DOC_LANG=es make
+....
+
+This command will build only the English and Spanish documents of the FreeBSD documentation portal.
+The output will be in the [.filename]#public# directory; open that in a browser.
+Note that some index files can redirect the browser to the online page.
+
+Another good option is to build and serve the content with Hugo's internal webserver:
+
+[source,console?prompt=%]
+....
+% DOC_LANG=es make run
+....
+
+By default, the webserver listens on `localhost`; To override this behavior, specify the desired IP address in the `BIND` parameter value.
+
+[source,console?prompt=%]
+....
+% DOC_LANG=es make run BIND=192.168.15.10
+....
+
+This builds and serves the content with Hugo's internal webserver and lets it open, and if any file changes, it rebuilds them automatically.
+====
+
+To make any necessary adjustments in the translation, follow the steps below to re-sync all components:
+
+- Fix the translation string on https://translate-dev.freebsd.org/[Weblate].
+- Force Weblate to commit the changes on `Document/Manage/Commit` section.
+- Sync the local Weblate repository `freebsd-doc-translate` with a `git pull origin main` command.
+- Copy the translation again to `freebsd-doc`.
+- Convert the translation to .adoc with the `./tools/translate.sh` script.
+- Hugo will rebuild the file and not build the entire set if `make run` was used; or re-execute `make`.
+
+[IMPORTANT]
+====
+Follow the previous steps as many times as is necessary until the document is ready to be published.
+====
+
+The crossref:doc-build[doc-build-rendering,Documentation Build Process] chapter includes information about rendering to HTML and PDF.
+
+[[weblate-submitting-translations]]
+== Submitting Translations
+
+Example of submitting an update to the Brazilian Portuguese article Committer's Guide.
+
+
+[[weblate-git-repo-status]]
+
+[.procedure]
+====
+.Check the repository
+
+After following the steps in crossref:weblate[weblate-building,Building the Translated Document], go to the root of `freebsd-doc` and preview what's to be committed.
+For an overview of files to be changed, and differences in file content:
+
+[source,console?prompt=%]
+....
+% git status
+% git diff
+....
+
+Review the output, and if any files unrelated to the Committer's Guide translation update were changed or added, take the appropriate action of reverting or removing them, respectively, before proceeding further.
+
+Always include the PO gettext file (`.po`) and the translated document in Hugo/Asciidoctor (`.adoc`).
+====
+
+[[weblate-git-new-branch]]
+
+[.procedure]
+====
+.Create a new branch and commit
+
+Create another branch to separate the work, which will help with future updates in the local repository.
+
+[source,console?prompt=%]
+....
+% git checkout -b committers-guide_pt-br
+....
+
+Register the local commit.
+
+[source,console?prompt=%]
+....
+% git add .
+% git commit
+....
+
+Example of commit messages for translations:
+
+[.programlisting]
+....
+pt-br/committers-guide: Sync with en XXXXXXX
+....
+
+Where `XXXXXXX` is the man:git[1] revision stored in the Weblate repository [.filename]#~/freebsd-doc-translate/revision.txt#.
+
+If it is the first translation of an article:
+
+[.programlisting]
+....
+Add Korean translation of Leap Seconds article
+....
+
+A message will be displayed after the commit if man:git[1] has not been configured previously.
+Please follow the instructions and provide the name and email address used on Weblate.
+This step is crucial to proper crediting of contributors.
+
+Then check the entire commit, review changes, and author name and email.
+
+[source,console?prompt=%]
+....
+% git show
+....
+====
+
+[[weblate-git-patch-submit]]
+
+[.procedure]
+====
+.Generate a patch
+
+Next, generate a man:git-format-patch[1] file.
+
+[source,console?prompt=%]
+....
+% git format-patch main
+0001-pt-br-committers-guide-Sync-with-en-XXXXXXX.patch
+....
+====
+
+Attach the patch [.filename]#0001-pt-br-committers-guide-Sync-with-en-XXXXXXX.patch# to a problem report in https://bugs.freebsd.org/bugzilla/[FreeBSD Bugzilla].
+
+Include the following information in the report:
+
+[[weblate-bugzilla-fields]]
+.Bugzilla Fields
+[cols="1,1", frame="none", options="header"]
+|===
+| Field
+| Value
+
+| *product*
+| Documentation
+
+| *Component*
+| Books & Articles
+
+| *Summary*
+| Same as the local commit
+
+| *Description*
+| State that instructions in this guide were followed, including proofreading and other necessary steps.
+Include things that may help with triage and progression of the report.
+
+
+| *CC* (Optional)
+| If the language has coordinators, include their email addresses in the CC field.
+|===
+
+For people familiar with man:git[1] and GitHub: instead of submitting the patch through https://bugs.freebsd.org/bugzilla/[Bugzilla], a https://github.com/freebsd/freebsd-doc/pulls[GitHub pull request] can be used (use the name and address that you use with Weblate).
+
+https://github.com/freebsd/freebsd-doc/ is a secondary mirror.
+Changes to the `doc` tree can be made only by people who have a `doc` commit bit.
+
+When translators keep sending good-quality patches, they can be nominated by other committers to receive write-access (a extref:{committers-guide}[doc commit bit, committer.types] for translations), a FreeBSD account, and associated perks.
+
+The list of extref:{contributors}[Additional FreeBSD Contributors, contrib-additional] includes non-committers whose contributions are committed to the `doc` tree.
+
+If in doubt about any procedure, write to the {freebsd-translators}.
+
+[[weblate-faq]]
+== FAQ (Frequently Asked Questions)
+
+[[weblate-copyrights]]
+=== Is it necessary to translate all the Copyright messages?
+
+Every language team decides this for their language; in `pt-br` (Brazilian Portuguese) team, it was decided not to translate those messages.
diff --git a/documentation/content/en/books/fdp-primer/weblate/_index.po b/documentation/content/en/books/fdp-primer/weblate/_index.po
new file mode 100644
index 0000000000..1e56f4cfb4
--- /dev/null
+++ b/documentation/content/en/books/fdp-primer/weblate/_index.po
@@ -0,0 +1,1064 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-09-09 18:12-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:1
+#, no-wrap
+msgid "How to join the FreeBSD translators team and translate online on Weblate"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:1
+#, no-wrap
+msgid "Chapter 10. Weblate Translations"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:13
+#, no-wrap
+msgid "Weblate Translations"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:51
+#, no-wrap
+msgid "Introduction"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:55
+msgid ""
+"This chapter describes some basic steps for joining the FreeBSD translators "
+"team, translating online on Weblate or offline, and some simple suggestions "
+"on translating, proofreading, and testing. It's focused on the translation "
+"part."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:57
+msgid ""
+"The original documents (articles and books) are in the {main-site}"
+"[documentation portal]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:59
+msgid ""
+"https://weblate.org/en/[Weblate] is web-based open-source software focused "
+"on localization; the FreeBSD project runs a local instance."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:61
+#, no-wrap
+msgid "How to Become a FreeBSD Translator"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:64
+msgid ""
+"Following are simple steps to start translating articles and books of the "
+"FreeBSD Documentation Project."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:66
+msgid ""
+"Create an account on the https://translate-dev.freebsd.org/[FreeBSD Weblate "
+"instance] with an email address or your GitHub account."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:67
+msgid "Subscribe to the {freebsd-translators}."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:71
+msgid ""
+"Introduce yourself and ask to join a language team. If the language team "
+"does not exist, ask to create it. The self-introduction is essential. It "
+"raises your chances of being approved for write access."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:72
+msgid ""
+"Login to https://translate-dev.freebsd.org/[Weblate] with the new account."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:73
+msgid "Find the language team and choose an initial document to translate."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:75
+msgid ""
+"Create a Bugzilla account to submit the translations after finishing a "
+"document. The Documentation project is also accepting GitHub Pull Requests "
+"with translation submissions."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:79
+msgid ""
+"All translation files and documents must follow https://www.freebsd.org/"
+"copyright/freebsd-doc-license/[The FreeBSD Documentation License]; if this "
+"is unacceptable, please do not sign up or send any patches or translations."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:82
+#, no-wrap
+msgid "Introduce Yourself"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:86
+msgid ""
+"Please provide a brief self-introduction on the {freebsd-translators} to "
+"initiate the process of granting access. This will enable a language "
+"coordinator or administrator to provide the necessary permissions for the "
+"new user of Weblate to start translating."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:88
+msgid "Following is an example of how such an email could look."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:92
+#, no-wrap
+msgid "Subject: Self-Introduction: Name and language\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:104
+#, no-wrap
+msgid ""
+"Name: Name (use preferred name)\n"
+"Location: City, country (optional)\n"
+"Login: username or email (essential)\n"
+"Language: Language to translate (essential)\n"
+"Profession or student status: (optional)\n"
+"About You: (free format -- info which you feel comfortable sharing with\n"
+" others: company, school, other affiliation, historical qualifications, other\n"
+" projects you have worked on, level and type of computer skills, other relevant skills,\n"
+" etc.)\n"
+"You and the FreeBSD Project: (free format: other FreeBSD projects of\n"
+" interest, comments, etc.)\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:107
+#, no-wrap
+msgid "Login to Weblate"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:110
+msgid "Open https://translate-dev.freebsd.org/[] and `Sign in`."
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:111
+#, no-wrap
+msgid "Weblate Login"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:111
+#, no-wrap
+msgid "weblate-login.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:114
+msgid "Use a username, email address, or GitHub account to log in."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:117
+msgid ""
+"The user profile contains your preferences, name, and email address. The "
+"name and address will be used in commits; keep this information accurate."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:121
+msgid ""
+"On the FreeBSD Weblate instance, all translations will be committed to "
+"https://github.com/freebsd/freebsd-doc-translate[freebsd-doc-translate] (an "
+"intermediate repository on GitHub), not directly to https://github.com/"
+"freebsd/freebsd-doc[freebsd-doc]. Translators must take the PO gettext "
+"files (`.po`), converting them to `.adoc` and submit it via https://bugs."
+"freebsd.org/bugzilla/[Bugzilla] or https://github.com/freebsd/freebsd-doc/"
+"pulls[GitHub] to get the translated document published or updated in the "
+"documentation portal. See more in the following sections."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:123
+msgid ""
+"Weblate will commit daily, at least to `freebsd-doc-translate`, if any new "
+"strings are translated."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:125
+#, no-wrap
+msgid "Find a Language Team to Join In"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:128
+msgid ""
+"Click `Projects`, choose `Documentation`, then click `Languages`, and see "
+"all the available languages."
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:129
+#, no-wrap
+msgid "Weblate Languages"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:129
+#, no-wrap
+msgid "weblate-languages.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:132
+msgid ""
+"Note that some languages and translated documents already exist in the "
+"documentation portal and repositories."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:135
+msgid ""
+"If the desired language for translation is not available in Weblate, please "
+"contact the https://www.freebsd.org/docproj/translations/[language "
+"coordinators] before asking to create a new language. If there is no "
+"answer, then write to the {doceng}."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:137
+#, no-wrap
+msgid "Translating Online on Weblate"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:140
+msgid ""
+"Translating documents online proves to be the easiest method for document "
+"translation on FreeBSD, as it allows users to collaborate on the same file, "
+"distributing the workload."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:142
+msgid ""
+"Once a coordinator or administrator grants access to a specific language for "
+"a username, the save button will be enabled, so that this user can start "
+"translating."
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:143
+#, no-wrap
+msgid "Weblate Documents"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:143
+#, no-wrap
+msgid "weblate-documents.png"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:144
+#, no-wrap
+msgid "Weblate Translate"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:144
+#, no-wrap
+msgid "weblate-translate.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:150
+msgid ""
+"Weblate has a set of links that lead to actual translation. The translation "
+"is further divided into individual checks, like `Untranslated` or `Needing "
+"review`. If the whole document is translated without any error, `All "
+"translations` link is still available in case a review is necessary. "
+"Alternatively, the search field can be used to find a specific string or "
+"term."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:152
+msgid ""
+"In the https://docs.weblate.org/en/latest/user/translating.html#translation-"
+"projects[Weblate documentation], there is more info about translations, like "
+"keyboard shortcuts and other tips about the translation tool."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:154
+#, no-wrap
+msgid "Translating Offline"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:158
+msgid ""
+"Weblate on FreeBSD uses PO gettext files for translations. Users familiar "
+"with PO gettext files that want to translate offline can download and upload "
+"the translations through the document page on Weblate by clicking in the "
+"`Files` section."
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:159
+#, no-wrap
+msgid "Weblate Offline"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:159
+#, no-wrap
+msgid "weblate-offline.png"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:162
+#, no-wrap
+msgid "Translation based on Automatic Suggestions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:165
+msgid ""
+"Languages using Weblate before the migration to Hugo/Asciidoctor can use "
+"this feature from Weblate to save time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:168
+msgid ""
+"This feature from Weblate uses the Translation Memory generated by the other "
+"components and projects on the same server. The former Weblate translations "
+"are hosted on the same server as read-only for that."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:171
+msgid ""
+"Strings that match `100/100` in similarity can be copied and saved "
+"directly. Other strings will need at least minor adjustment."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:173
+msgid "Some examples:"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:174
+#, no-wrap
+msgid "Weblate Automatic Suggestions 01"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:174
+#, no-wrap
+msgid "weblate_automatic_suggestion_01.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:179
+msgid ""
+"With the migration to Hugo/Asciidoctor, documents use UTF-8. Some HTML "
+"entities should be replaced. Some strings, such as links, require changes "
+"to markup."
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:180
+#, no-wrap
+msgid "Weblate Automatic Suggestions 02"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:180
+#, no-wrap
+msgid "weblate_automatic_suggestion_02.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:183
+msgid "Links:"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:184
+#, no-wrap
+msgid "Weblate Automatic Suggestions 03"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:184
+#, no-wrap
+msgid "weblate_automatic_suggestion_03.png"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:187
+#, no-wrap
+msgid "Proofreading and Weblate Quality Checks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:191
+msgid ""
+"The document dashboard `Project/Language/Document` shows the translation "
+"status and string status for that document. This page is handy for "
+"proofreading and quality checks."
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:192
+#, no-wrap
+msgid "Weblate Revision 01"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:192
+#, no-wrap
+msgid "weblate-revision1.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:195
+msgid ""
+"In this example, two strings are missing the full stop; following that link "
+"will show only those strings to be revised/translated."
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:196
+#, no-wrap
+msgid "Weblate Revision 02"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:196
+#, no-wrap
+msgid "weblate-revision2.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:199
+msgid ""
+"Translators and reviewers often value observing translated strings in "
+"context."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:201
+#, no-wrap
+msgid "Building the Translated Document"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:205
+msgid ""
+"The project does not use continuous integration and continuous delivery to "
+"build translations. There are studies to make it available."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:210
+msgid ""
+"The following example uses GitHub, as Weblate is also on GitHub. Note that "
+"this repository is a read-only mirror, but Pull Requests are accepted."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:213
+msgid "To build the translation locally, follow these steps:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:218
+#, no-wrap
+msgid "Procedure: Clone the necessary repositories"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:220
+msgid "Clone the `freebsd-doc` repository:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:224
+#, no-wrap
+msgid "% git clone https://github.com/freebsd/freebsd-doc.git ~/freebsd-doc\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:227
+msgid "Clone the `freebsd-doc-translate` repository:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:231
+#, no-wrap
+msgid "% git clone https://github.com/freebsd/freebsd-doc-translate.git ~/freebsd-doc-translate\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:238
+#, no-wrap
+msgid "Procedure: Copy a translation file to `freebsd-doc`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:242
+msgid ""
+"With both repositories in place, copy the translation from `freebsd-doc-"
+"translate` to `freebsd-doc`. Example of the Committer's Guide article "
+"translation in Spanish."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:247
+#, no-wrap
+msgid ""
+"% cp ~/freebsd-doc-translate/documentation/content/es/articles/committers-guide/_index.po \\\n"
+"~/freebsd-doc/documentation/content/es/articles/committers-guide/\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:254
+#, no-wrap
+msgid "Procedure: Convert a translation file (`.po`) to `.adoc`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:257
+msgid "Go to the root of `freebsd-doc`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:261
+#, no-wrap
+msgid "% cd ~/freebsd-doc\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:264
+msgid "Translate (convert) the `.po` file to `.adoc`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:268
+#, no-wrap
+msgid "% ./tools/translate.sh documentation es articles/committers-guide\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:271
+msgid ""
+"By default: only files with more than eighty percent of strings translated "
+"will be converted to `.adoc`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:273
+msgid "To ignore that limit:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:277
+#, no-wrap
+msgid "% KEEP_ENV=0 ./tools/translate.sh documentation es articles/committers-guide\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:284
+msgid ""
+"Some documents, like books, have many PO gettext files. Always copy all of "
+"them when translating and building. Files that weren't translated will be "
+"converted with the source (English) strings."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:289
+msgid ""
+"The directory structure is fundamental. Always follow the English document "
+"directory structure."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:295
+#, no-wrap
+msgid "Procedure: Build the translated document"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:298
+msgid "Last, the building part."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:300
+msgid ""
+"Enter the documentation directory because there is no need to build the "
+"FreeBSD website."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:304
+#, no-wrap
+msgid "% cd documentation\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:308
+msgid ""
+"And build the documentation. Note that `en` is always added by default when "
+"building any other language."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:312
+#, no-wrap
+msgid "% DOC_LANG=es make\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:317
+msgid ""
+"This command will build only the English and Spanish documents of the "
+"FreeBSD documentation portal. The output will be in the [.filename]#public# "
+"directory; open that in a browser. Note that some index files can redirect "
+"the browser to the online page."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:319
+msgid ""
+"Another good option is to build and serve the content with Hugo's internal "
+"webserver:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:323
+#, no-wrap
+msgid "% DOC_LANG=es make run\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:326
+msgid ""
+"By default, the webserver listens on `localhost`; To override this behavior, "
+"specify the desired IP address in the `BIND` parameter value."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:330
+#, no-wrap
+msgid "% DOC_LANG=es make run BIND=192.168.15.10\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:333
+msgid ""
+"This builds and serves the content with Hugo's internal webserver and lets "
+"it open, and if any file changes, it rebuilds them automatically."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:336
+msgid ""
+"To make any necessary adjustments in the translation, follow the steps below "
+"to re-sync all components:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:338
+msgid ""
+"Fix the translation string on https://translate-dev.freebsd.org/[Weblate]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:339
+msgid ""
+"Force Weblate to commit the changes on `Document/Manage/Commit` section."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:340
+msgid ""
+"Sync the local Weblate repository `freebsd-doc-translate` with a `git pull "
+"origin main` command."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:341
+msgid "Copy the translation again to `freebsd-doc`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:342
+msgid ""
+"Convert the translation to .adoc with the `./tools/translate.sh` script."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:343
+msgid ""
+"Hugo will rebuild the file and not build the entire set if `make run` was "
+"used; or re-execute `make`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:347
+msgid ""
+"Follow the previous steps as many times as is necessary until the document "
+"is ready to be published."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:350
+msgid ""
+"The crossref:doc-build[doc-build-rendering,Documentation Build Process] "
+"chapter includes information about rendering to HTML and PDF."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:352
+#, no-wrap
+msgid "Submitting Translations"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:355
+msgid ""
+"Example of submitting an update to the Brazilian Portuguese article "
+"Committer's Guide."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:361
+#, no-wrap
+msgid "Check the repository"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:365
+msgid ""
+"After following the steps in crossref:weblate[weblate-building,Building the "
+"Translated Document], go to the root of `freebsd-doc` and preview what's to "
+"be committed. For an overview of files to be changed, and differences in "
+"file content:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:370
+#, no-wrap
+msgid ""
+"% git status\n"
+"% git diff\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:373
+msgid ""
+"Review the output, and if any files unrelated to the Committer's Guide "
+"translation update were changed or added, take the appropriate action of "
+"reverting or removing them, respectively, before proceeding further."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:375
+msgid ""
+"Always include the PO gettext file (`.po`) and the translated document in "
+"Hugo/Asciidoctor (`.adoc`)."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:381
+#, no-wrap
+msgid "Create a new branch and commit"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:384
+msgid ""
+"Create another branch to separate the work, which will help with future "
+"updates in the local repository."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:388
+#, no-wrap
+msgid "% git checkout -b committers-guide_pt-br\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:391
+msgid "Register the local commit."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:396
+#, no-wrap
+msgid ""
+"% git add .\n"
+"% git commit\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:399
+msgid "Example of commit messages for translations:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:403
+#, no-wrap
+msgid "pt-br/committers-guide: Sync with en XXXXXXX\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:406
+msgid ""
+"Where `XXXXXXX` is the man:git[1] revision stored in the Weblate repository "
+"[.filename]#~/freebsd-doc-translate/revision.txt#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:408
+msgid "If it is the first translation of an article:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:412
+#, no-wrap
+msgid "Add Korean translation of Leap Seconds article\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:417
+msgid ""
+"A message will be displayed after the commit if man:git[1] has not been "
+"configured previously. Please follow the instructions and provide the name "
+"and email address used on Weblate. This step is crucial to proper crediting "
+"of contributors."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:419
+msgid ""
+"Then check the entire commit, review changes, and author name and email."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:423
+#, no-wrap
+msgid "% git show\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:430
+#, no-wrap
+msgid "Generate a patch"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:433
+msgid "Next, generate a man:git-format-patch[1] file."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:438
+#, no-wrap
+msgid ""
+"% git format-patch main\n"
+"0001-pt-br-committers-guide-Sync-with-en-XXXXXXX.patch\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:442
+msgid ""
+"Attach the patch [.filename]#0001-pt-br-committers-guide-Sync-with-en-"
+"XXXXXXX.patch# to a problem report in https://bugs.freebsd.org/bugzilla/"
+"[FreeBSD Bugzilla]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:444
+msgid "Include the following information in the report:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:446
+#, no-wrap
+msgid "Bugzilla Fields"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:450
+#, no-wrap
+msgid "Field"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:452
+#, no-wrap
+msgid "Value"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:453
+#, no-wrap
+msgid "*product*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:455
+#, no-wrap
+msgid "Documentation"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:456
+#, no-wrap
+msgid "*Component*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:458
+#, no-wrap
+msgid "Books & Articles"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:459
+#, no-wrap
+msgid "*Summary*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:461
+#, no-wrap
+msgid "Same as the local commit"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:462
+#, no-wrap
+msgid "*Description*"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:466
+#, no-wrap
+msgid ""
+"State that instructions in this guide were followed, including proofreading and other necessary steps.\n"
+"Include things that may help with triage and progression of the report."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:467
+#, no-wrap
+msgid "*CC* (Optional)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:468
+#, no-wrap
+msgid "If the language has coordinators, include their email addresses in the CC field."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:471
+msgid ""
+"For people familiar with man:git[1] and GitHub: instead of submitting the "
+"patch through https://bugs.freebsd.org/bugzilla/[Bugzilla], a https://github."
+"com/freebsd/freebsd-doc/pulls[GitHub pull request] can be used (use the name "
+"and address that you use with Weblate)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:474
+msgid ""
+"https://github.com/freebsd/freebsd-doc/ is a secondary mirror. Changes to "
+"the `doc` tree can be made only by people who have a `doc` commit bit."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:476
+msgid ""
+"When translators keep sending good-quality patches, they can be nominated by "
+"other committers to receive write-access (a extref:{committers-guide}[doc "
+"commit bit, committer.types] for translations), a FreeBSD account, and "
+"associated perks."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:478
+msgid ""
+"The list of extref:{contributors}[Additional FreeBSD Contributors, contrib-"
+"additional] includes non-committers whose contributions are committed to the "
+"`doc` tree."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:480
+msgid "If in doubt about any procedure, write to the {freebsd-translators}."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:482
+#, no-wrap
+msgid "FAQ (Frequently Asked Questions)"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:485
+#, no-wrap
+msgid "Is it necessary to translate all the Copyright messages?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:487
+msgid ""
+"Every language team decides this for their language; in `pt-br` (Brazilian "
+"Portuguese) team, it was decided not to translate those messages."
+msgstr ""
diff --git a/documentation/content/en/books/fdp-primer/working-copy/_index.adoc b/documentation/content/en/books/fdp-primer/working-copy/_index.adoc
index a729bf590d..b5a4bf25df 100644
--- a/documentation/content/en/books/fdp-primer/working-copy/_index.adoc
+++ b/documentation/content/en/books/fdp-primer/working-copy/_index.adoc
@@ -6,7 +6,7 @@ description: How to get a working copy of the FreeBSD Documentation Project
tags: ["working copy", "documentation", "manual pages", "git"]
showBookMenu: true
weight: 4
-path: "/books/fdp-primer/"
+path: "/books/fdp-primer/working-copy/"
---
[[working-copy]]
@@ -54,7 +54,7 @@ A full copy of the documentation tree can occupy 550 megabytes of disk space.
Allow for a full gigabyte of space to have room for temporary files and test versions of various output formats.
link:https://git-scm.com/[Git] is used to manage the FreeBSD documentation files.
-It is obtained by installing the Git package:
+It is obtained by installing the package:devel/git[] package, which also has a lighter flavor called git-lite:
[source,shell]
....
diff --git a/documentation/content/en/books/fdp-primer/working-copy/_index.po b/documentation/content/en/books/fdp-primer/working-copy/_index.po
new file mode 100644
index 0000000000..2cbe791b89
--- /dev/null
+++ b/documentation/content/en/books/fdp-primer/working-copy/_index.po
@@ -0,0 +1,264 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-05-21 14:43-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:1
+#, no-wrap
+msgid "How to get a working copy of the FreeBSD Documentation Project"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:1
+#, no-wrap
+msgid "Chapter 3. The Working Copy"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:13
+#, no-wrap
+msgid "The Working Copy"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:52
+msgid ""
+"The _working copy_ is a copy of the FreeBSD repository documentation tree "
+"downloaded onto the local computer. Changes are made to the local working "
+"copy, tested, and then submitted as patches to be committed to the main "
+"repository."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:55
+msgid ""
+"A full copy of the documentation tree can occupy 550 megabytes of disk "
+"space. Allow for a full gigabyte of space to have room for temporary files "
+"and test versions of various output formats."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:58
+msgid ""
+"link:https://git-scm.com/[Git] is used to manage the FreeBSD documentation "
+"files. It is obtained by installing the package:devel/git[] package, which "
+"also has a lighter flavor called git-lite:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:62
+#, no-wrap
+msgid "# pkg install git-lite\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:65
+#, no-wrap
+msgid "Documentation and Manual Pages"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:71
+msgid ""
+"FreeBSD documentation is not just books and articles. Manual pages for all "
+"the commands and configuration files are also part of the documentation, and "
+"part of the FDP's territory. Two repositories are involved: `doc` for the "
+"books and articles, and `src` for the operating system and manual pages. To "
+"edit manual pages, the `src` repository must be checked out separately."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:74
+msgid ""
+"Repositories may contain multiple versions of documentation and source "
+"code. New modifications are almost always made only to the latest version, "
+"called `main`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:76
+#, no-wrap
+msgid "Choosing a Directory"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:81
+msgid ""
+"FreeBSD documentation is traditionally stored in [.filename]#/usr/doc/#, and "
+"system source code with manual pages in [.filename]#/usr/src/#. These "
+"directory trees are relocatable, and users may want to put the working "
+"copies in other locations to avoid interfering with existing information in "
+"the main directories. The examples that follow use [.filename]#~/doc# and [."
+"filename]#~/src#, both subdirectories of the user's home directory."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:83
+#, no-wrap
+msgid "Checking Out a Copy"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:87
+msgid ""
+"A download of a working copy from the repository is called a _clone_, and "
+"done with `git clone`. This example clones a copy of the latest version "
+"(`main`) of the main documentation tree:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:91
+#, no-wrap
+msgid "% git clone https://git.FreeBSD.org/doc.git ~/doc\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:94
+msgid "A checkout of the source code to work on manual pages is very similar:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:98
+#, no-wrap
+msgid "% git clone https://git.FreeBSD.org/src.git ~/src\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:101
+#, no-wrap
+msgid "Updating a Working Copy"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:107
+msgid ""
+"The documents and files in the FreeBSD repository change daily. People "
+"modify files and commit changes frequently. Even a short time after an "
+"initial checkout, there will already be differences between the local "
+"working copy and the main FreeBSD repository. To update the local version "
+"with the changes that have been made to the main repository, use `git pull` "
+"on the directory containing the local working copy:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:112
+#, no-wrap
+msgid ""
+"% cd ~/doc\n"
+"% git pull --ff-only\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:117
+msgid ""
+"Get in the protective habit of using `git pull` before editing document "
+"files. Someone else may have edited that file very recently, and the local "
+"working copy will not include the latest changes until it has been updated. "
+"Editing the newest version of a file is much easier than trying to combine "
+"an older, edited local file with the newer version from the repository."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:119
+#, no-wrap
+msgid "Reverting Changes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:124
+msgid ""
+"Sometimes it turns out that changes were not necessary after all, or the "
+"writer just wants to start over. Files can be \"reset\" to their unchanged "
+"form with `git restore`. For example, to erase the edits made to [."
+"filename]#_index.adoc# and reset it to unmodified form:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:128
+#, no-wrap
+msgid "% git restore _index.adoc\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:131
+#, no-wrap
+msgid "Making a Diff"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:135
+msgid ""
+"After edits to a file or group of files are completed, the differences "
+"between the local working copy and the version on the FreeBSD repository "
+"must be collected into a single file for submission. These _diff_ files are "
+"produced by redirecting the output of `git diff` into a file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:140
+#, no-wrap
+msgid ""
+"% cd ~/doc\n"
+"% git diff > doc-fix-spelling.diff\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:144
+msgid ""
+"Give the file a meaningful name that identifies the contents. The example "
+"above is for spelling fixes to the whole documentation tree."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:146
+msgid ""
+"If the diff file is to be submitted with the web \"link:https://bugs.FreeBSD."
+"org/bugzilla/enter_bug.cgi[Submit a FreeBSD problem report]\" interface, add "
+"a [.filename]#.txt# extension to give the earnest and simple-minded web form "
+"a clue that the contents are plain text."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:149
+msgid ""
+"Be careful: `git diff` includes all changes made in the current directory "
+"and any subdirectories. If there are files in the working copy with edits "
+"that are not ready to be submitted yet, provide a list of only the files "
+"that are to be included:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:154
+#, no-wrap
+msgid ""
+"% cd ~/doc\n"
+"% git diff disks/_index.adoc printers/_index.adoc > disks-printers.diff\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:157
+#, no-wrap
+msgid "Git References"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:160
+msgid ""
+"These examples show very basic usage of Git. More detail is available in "
+"the https://git-scm.com/book/en/v2[Git Book] and the https://git-scm.com/"
+"doc[Git documentation]."
+msgstr ""
diff --git a/documentation/content/en/books/fdp-primer/writing-style/_index.adoc b/documentation/content/en/books/fdp-primer/writing-style/_index.adoc
index ba17cdf890..f3a47fc1ce 100644
--- a/documentation/content/en/books/fdp-primer/writing-style/_index.adoc
+++ b/documentation/content/en/books/fdp-primer/writing-style/_index.adoc
@@ -1,12 +1,12 @@
---
-title: Chapter 11. Writing Style
+title: Chapter 12. Writing Style
prev: books/fdp-primer/manual-pages
next: books/fdp-primer/editor-config
description: Writing Style and some conventions used in the FreeBSD Documentation Project
-tags: ["writing", "style", "tipos", "one sentence per line"]
+tags: ["writing", "style", "typos", "one sentence per line"]
showBookMenu: true
weight: 12
-path: "/books/fdp-primer/"
+path: "/books/fdp-primer/writing-style/"
---
[[writing-style]]
@@ -17,7 +17,7 @@ path: "/books/fdp-primer/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 11
+:sectnumoffset: 12
:partnums:
:source-highlighter: rouge
:experimental:
@@ -52,7 +52,8 @@ endif::[]
Technical documentation can be improved by consistent use of several principles.
Most of these can be classified into three goals: _be clear_, _be complete_, and _be concise_.
-These goals can conflict with each other. Good writing consists of a balance between them.
+These goals can conflict with each other.
+Good writing consists of a balance between them.
[[writing-style-be-clear]]
=== Be Clear
@@ -79,8 +80,7 @@ A trivial example is better than no example.
A good example is better yet.
Do not give bad examples, identifiable by apologies or sentences like "but really it should never be done that way".
Bad examples are worse than no examples.
-Give good examples, because _even when warned not to use the example as shown_,
-the reader will usually just use the example as shown.
+Give good examples, because _even when warned not to use the example as shown_, the reader will usually just use the example as shown.
Avoid _weasel words_ like "should", "might", "try", or "could".
These words imply that the speaker is unsure of the facts, and create doubt in the reader.
@@ -98,18 +98,14 @@ Put yourself in the reader's place, anticipate the questions they will ask, and
[[writing-style-be-concise]]
=== Be Concise
-While features should be documented completely,
-sometimes there is so much information that the reader cannot easily find the specific detail needed.
+While features should be documented completely, sometimes there is so much information that the reader cannot easily find the specific detail needed.
The balance between being complete and being concise is a challenge.
-One approach is to have an introduction,
-then a "quick start" section that describes the most common situation,
-followed by an in-depth reference section.
+One approach is to have an introduction, then a "quick start" section that describes the most common situation, followed by an in-depth reference section.
[[writing-style-guidelines]]
== Guidelines
-To promote consistency between the myriad authors of the FreeBSD documentation,
-some guidelines have been drawn up for authors to follow.
+To promote consistency between the myriad authors of the FreeBSD documentation, some guidelines have been drawn up for authors to follow.
Use American English Spelling::
There are several variants of English, with different spellings for the same word.
@@ -118,9 +114,8 @@ Where spellings differ, use the American English variant.
+
[NOTE]
====
-The use of British English may be accepted in the case of a contributed article,
-however the spelling must be consistent within the whole document.
-The other documents such as books, web site, manual pages, etc. will have to use American English.
+The use of British English may be accepted in the case of a contributed article, however the spelling must be consistent within the whole document.
+The other documents such as books, web site, manual pages, etc. must use American English.
====
Do not use contractions::
@@ -159,13 +154,13 @@ Wrong: ... in the filename [.filename]#/etc/rc.local#...
+
Right: ... in [.filename]#/etc/rc.local#...
+
-Manual page references (the second example uses `citerefentry` with the man:csh[1] entity):.
+Manual page references (the second example uses `man:[]` with the man:csh[1] entity):
+
Wrong: See `man csh` for more information.
+
Right: See man:csh[1].
-For more information about writing style, see http://www.bartleby.com/141/[Elements of Style], by William Strunk.
+For more information about writing style, see http://www.bartleby.com/141/[Elements of Style] by William Strunk.
[[writing-style-guide]]
== Style Guide
@@ -179,7 +174,7 @@ Use Semantic Line Breaks in the documentation, a technique called "one sentence
The idea of this technique is to help the users to write and read documentation.
To get more information about this technique read the link:https://sembr.org/[Semantic Line Breaks] page.
-This is an example which don't use "one sentence per line".
+This is an example which does not use "one sentence per line".
....
All human beings are born free and equal in dignity and rights. They are endowed with reason and conscience and should act towards one another in a spirit of brotherhood.
@@ -193,7 +188,7 @@ They are endowed with reason and conscience and should act towards one another i
....
[[writing-style-acronyms]]
-=== Acronyms
+== Acronyms
Acronyms should be defined the first time they appear in a document, as in: "Network Time Protocol (NTP)".
After the acronym has been defined, use the acronym alone unless it makes more sense contextually to use the whole term.
@@ -252,3 +247,131 @@ If a character is not on this list, ask about it on the {freebsd-doc}.
| <=
|===
+
+[[writing-style-linting-vale]]
+== Linting with Vale
+
+To maintain clarity and consistency across all documentation and website pages, link:https://vale.sh[Vale] styles have been introduced in the documentation tree.
+link:https://vale.sh[Vale] is a powerful linter for writing customized rules and can be used in multiple scenarios.
+Currently link:https://vale.sh[Vale] can be used as a command line tool, for CI/CD pipelines, and integrated into an editor of choice.
+
+The following table describes the current rule names and their respective severity.
+
+[.informaltable]
+[cols="1,1", frame="none", options="header"]
+|===
+| Name
+| Severity
+
+| FreeBSD.BrandTerms
+| error
+
+| FreeBSD.ConsciousLanguage
+| warning
+
+| FreeBSD.Contractions
+| suggestion
+
+| FreeBSD.EOLSpacing
+| warning
+
+| FreeBSD.Hang
+| warning
+
+| FreeBSD.Hyphens
+| warning
+
+| FreeBSD.Spacing
+| error
+
+| FreeBSD.SuperfluousOptArgInLinks
+| suggestion
+
+| Vale.Avoid
+| error
+
+| Vale.Repetition
+| error
+
+| Vale.Spelling
+| error
+
+| Vale.Terms
+| error
+
+|===
+
+[[writing-style-linting-vale-rules]]
+=== Current Vale Rules
+
+. FreeBSD.BrandTerms: According to the copyright rules of The FreeBSD Foundation, *freebsd* should be written as *FreeBSD*.
+Similarly, every major vendor and company has specific rules on writing their brand names and trademarks.
+Care should be taken to be respectful to the brand value of others and to take time to write PostgreSQL, Node.js, Let's Encrypt etc.
+Missing brand names should be added to the [.filename]#.vale/styles/FreeBSD/BrandTerms.yml# in the `doc` repository.
+
+. FreeBSD.ConsciousLanguage: This rule proposes use of conscious language so that sensitive words pointing to the color, age, race, or sexual orientation of people are avoided where possible.
+
+. FreeBSD.Contractions: Contracted words should not be used.
+This rule avoids all contractions and suggests full words.
+
+. FreeBSD.EOLSpacing: In most of the documents EOL spacing is present which is not the desirable situation.
+
+. FreeBSD.Hang: `Hang` is often used to mean that the application has stopped responding.
+This rule proposes better wording.
+
+. FreeBSD.Hyphens: Often adverbs ending with 'ly' are added with a hyphen which is wrong.
+
+. FreeBSD.Spacing: Often double spaces are hard to catch with the naked eye and this is addressed here.
+
+. FreeBSD.SuperfluousOptArgInLinks: Suggest to empty square brackets in `link:` macros when the displayed text coincides with the URL.
+
+. Vale.Avoid: Enforces the *DO NOT USE* vocabulary terms for The FreeBSD Project.
+If any word is found that should not be in the documentation, the word should be added to [.filename]#.vale/styles/Vocab/Terms/reject.txt# in the `doc` repository.
+The list is empty at the moment.
+
+. Vale.Repetition: Same words are often typed twice when leaving the keyboard and rejoining the work again.
+This rule finds repeated words and warns the users.
+
+. Vale.Spelling: At the moment there is a mix of en_US and en_GB spellings in the documentation and website.
+Vale comes with an in built dictionary from which uses strictly en_US and do not accept the en_GB variant of any words.
+
+. Vale.Terms: Enforces the *PREFERRED* vocabulary terms for The FreeBSD Project.
+At the moment the list of terms is empty and the FreeBSD specific terms will be added gradually.
+If any word is found to be correct and not available in the dictionary the word should be added to the [.filename]#.vale/styles/Vocab/Terms/accept.txt# in the `doc` repository.
+
+More rules will be introduced in the upcoming days when and where required.
+
+[[writing-style-using-vale]]
+=== Using Vale
+
+link:https://vale.sh[Vale] can be used from the command line and from within an editor or IDE.
+package:textproc/vale[] can be installed as following:
+
+[source, shell]
+....
+$ pkg install vale
+....
+
+[[writing-style-using-vale-commandline]]
+==== Using Vale on the command line
+
+Assuming that the `doc` repository was cloned into [.filename]#~/doc# the following commands are required to run:
+
+[source, shell]
+....
+% cd ~/doc
+% vale .
+....
+
+[NOTE]
+======
+link:https://vale.sh[Vale] is a CPU and memory intensive program due to the nature of the application and can take a while to show any output on the screen.
+A better way to run the application is on specific folders or files rather than the entire `doc` repository as that is already done in the CI pipeline.
+======
+
+[[writing-style-using-vale-editors]]
+==== Using Vale in editors
+
+link:https://vale.sh[Vale] works with major mainstream editors like package:editors/vim[], package:editors/emacs[], package:editors/vscode[].
+At the moment the necessary configuration for package:editors/vim[] is described in crossref:editor-config[editor-config-vim, Vim].
+A configuration for package:editors/emacs[] is being worked on.
diff --git a/documentation/content/en/books/fdp-primer/writing-style/_index.po b/documentation/content/en/books/fdp-primer/writing-style/_index.po
new file mode 100644
index 0000000000..586454bd51
--- /dev/null
+++ b/documentation/content/en/books/fdp-primer/writing-style/_index.po
@@ -0,0 +1,883 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-07-15 16:42-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:1
+#, no-wrap
+msgid "Writing Style and some conventions used in the FreeBSD Documentation Project"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:1
+#, no-wrap
+msgid "Chapter 12. Writing Style"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:13
+#, no-wrap
+msgid "Writing Style"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:51
+#, no-wrap
+msgid "Tips"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:57
+msgid ""
+"Technical documentation can be improved by consistent use of several "
+"principles. Most of these can be classified into three goals: _be clear_, "
+"_be complete_, and _be concise_. These goals can conflict with each other. "
+"Good writing consists of a balance between them."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:59
+#, no-wrap
+msgid "Be Clear"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:64
+msgid ""
+"Clarity is extremely important. The reader may be a novice, or reading the "
+"document in a second language. Strive for simple, uncomplicated text that "
+"clearly explains the concepts."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:68
+msgid ""
+"Avoid flowery or embellished speech, jokes, or colloquial expressions. "
+"Write as simply and clearly as possible. Simple text is easier to "
+"understand and translate."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:73
+msgid ""
+"Keep explanations as short, simple, and clear as possible. Avoid empty "
+"phrases like \"in order to\", which usually just means \"to\". Avoid "
+"potentially patronizing words like \"basically\". Avoid Latin terms like "
+"\"i.e.,\" or \"cf.\", which may be unknown outside of academic or scientific "
+"groups."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:77
+msgid ""
+"Write in a formal style. Avoid addressing the reader as \"you\". For "
+"example, say \"copy the file to [.filename]#/tmp#\" rather than \"you can "
+"copy the file to [.filename]#/tmp#\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:84
+msgid ""
+"Give clear, correct, _tested_ examples. A trivial example is better than no "
+"example. A good example is better yet. Do not give bad examples, "
+"identifiable by apologies or sentences like \"but really it should never be "
+"done that way\". Bad examples are worse than no examples. Give good "
+"examples, because _even when warned not to use the example as shown_, the "
+"reader will usually just use the example as shown."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:87
+msgid ""
+"Avoid _weasel words_ like \"should\", \"might\", \"try\", or \"could\". "
+"These words imply that the speaker is unsure of the facts, and create doubt "
+"in the reader."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:89
+msgid ""
+"Similarly, give instructions as imperative commands: not \"you should do "
+"this\", but merely \"do this\"."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:91
+#, no-wrap
+msgid "Be Complete"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:97
+msgid ""
+"Do not make assumptions about the reader's abilities or skill level. Tell "
+"them what they need to know. Give links to other documents to provide "
+"background information without having to recreate it. Put yourself in the "
+"reader's place, anticipate the questions they will ask, and answer them."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:99
+#, no-wrap
+msgid "Be Concise"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:104
+msgid ""
+"While features should be documented completely, sometimes there is so much "
+"information that the reader cannot easily find the specific detail needed. "
+"The balance between being complete and being concise is a challenge. One "
+"approach is to have an introduction, then a \"quick start\" section that "
+"describes the most common situation, followed by an in-depth reference "
+"section."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:106
+#, no-wrap
+msgid "Guidelines"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:109
+msgid ""
+"To promote consistency between the myriad authors of the FreeBSD "
+"documentation, some guidelines have been drawn up for authors to follow."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:110
+#, no-wrap
+msgid "Use American English Spelling"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:114
+msgid ""
+"There are several variants of English, with different spellings for the same "
+"word. Where spellings differ, use the American English variant. \"color\", "
+"not \"colour\", \"rationalize\", not \"rationalise\", and so on."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:119
+msgid ""
+"The use of British English may be accepted in the case of a contributed "
+"article, however the spelling must be consistent within the whole document. "
+"The other documents such as books, web site, manual pages, etc. must use "
+"American English."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:121
+#, no-wrap
+msgid "Do not use contractions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:125
+msgid ""
+"Do not use contractions. Always spell the phrase out in full. \"Don't use "
+"contractions\" is wrong."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:127
+msgid ""
+"Avoiding contractions makes for a more formal tone, is more precise, and is "
+"slightly easier for translators."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:128
+#, no-wrap
+msgid "Use the serial comma"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:131
+msgid ""
+"In a list of items within a paragraph, separate each item from the others "
+"with a comma. Separate the last item from the others with a comma and the "
+"word \"and\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:133
+msgid "For example:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:135
+msgid "This is a list of one, two and three items."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:137
+msgid ""
+"Is this a list of three items, \"one\", \"two\", and \"three\", or a list of "
+"two items, \"one\" and \"two and three\"?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:139
+msgid "It is better to be explicit and include a serial comma:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:141
+msgid "This is a list of one, two, and three items."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:141
+#, no-wrap
+msgid "Avoid redundant phrases"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:144
+msgid ""
+"Do not use redundant phrases. In particular, \"the command\", \"the file\", "
+"and \"man command\" are often redundant."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:146
+msgid "For example, commands:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:148
+msgid "Wrong: Use the `git` command to update sources."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:150
+msgid "Right: Use `git` to update sources."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:152
+msgid "Filenames:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:154
+msgid "Wrong: ... in the filename [.filename]#/etc/rc.local#..."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:156
+msgid "Right: ... in [.filename]#/etc/rc.local#..."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:158
+msgid ""
+"Manual page references (the second example uses `man:[]` with the man:csh[1] "
+"entity):"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:160
+msgid "Wrong: See `man csh` for more information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:162
+msgid "Right: See man:csh[1]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:164
+msgid ""
+"For more information about writing style, see http://www.bartleby.com/141/"
+"[Elements of Style] by William Strunk."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:166
+#, no-wrap
+msgid "Style Guide"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:169
+msgid ""
+"To keep the source for the documentation consistent when many different "
+"people are editing it, please follow these style conventions."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:171
+#, no-wrap
+msgid "One sentence per line"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:176
+msgid ""
+"Use Semantic Line Breaks in the documentation, a technique called \"one "
+"sentence per line\". The idea of this technique is to help the users to "
+"write and read documentation. To get more information about this technique "
+"read the link:https://sembr.org/[Semantic Line Breaks] page."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:178
+msgid "This is an example which does not use \"one sentence per line\"."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:181
+#, no-wrap
+msgid "All human beings are born free and equal in dignity and rights. They are endowed with reason and conscience and should act towards one another in a spirit of brotherhood.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:184
+msgid "And this is an example which uses the technique."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:188
+#, no-wrap
+msgid ""
+"All human beings are born free and equal in dignity and rights.\n"
+"They are endowed with reason and conscience and should act towards one another in a spirit of brotherhood.\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:191
+#, no-wrap
+msgid "Acronyms"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:196
+msgid ""
+"Acronyms should be defined the first time they appear in a document, as in: "
+"\"Network Time Protocol (NTP)\". After the acronym has been defined, use "
+"the acronym alone unless it makes more sense contextually to use the whole "
+"term. Acronyms are usually defined only once per chapter or per document."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:198
+msgid "All acronyms should be enclosed using the ` character."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:200
+#, no-wrap
+msgid "Special Character List"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:204
+msgid ""
+"This list of special characters shows the correct syntax and the output when "
+"used in FreeBSD documentation. If a character is not on this list, ask "
+"about it on the {freebsd-doc}."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:209
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:264
+#, no-wrap
+msgid "Name"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:210
+#, no-wrap
+msgid "Syntax"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:213
+#, no-wrap
+msgid "Rendered"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:214
+#, no-wrap
+msgid "Copyright"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:215
+#, no-wrap
+msgid "+(C)+"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:217
+#, no-wrap
+msgid "(C)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:218
+#, no-wrap
+msgid "Registered"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:219
+#, no-wrap
+msgid "+(R)+"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:221
+#, no-wrap
+msgid "(R)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:222
+#, no-wrap
+msgid "Trademark"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:223
+#, no-wrap
+msgid "+(TM)+"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:225
+#, no-wrap
+msgid "(TM)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:226
+#, no-wrap
+msgid "Em dash"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:227
+#, no-wrap
+msgid "+--+"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:229
+#, no-wrap
+msgid "--"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:230
+#, no-wrap
+msgid "Ellipses"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:231
+#, no-wrap
+msgid "+...+"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:233
+#, no-wrap
+msgid "..."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:234
+#, no-wrap
+msgid "Single right arrow"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:235
+#, no-wrap
+msgid "+->+"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:237
+#, no-wrap
+msgid "->"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:238
+#, no-wrap
+msgid "Double right arrow"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:239
+#, no-wrap
+msgid "+=>+"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:241
+#, no-wrap
+msgid "=>"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:242
+#, no-wrap
+msgid "Single left arrow"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:243
+#, no-wrap
+msgid "+<-+"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:245
+#, no-wrap
+msgid "<-"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:246
+#, no-wrap
+msgid "Double left arrow"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:247
+#, no-wrap
+msgid "+<=+"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:249
+#, no-wrap
+msgid "<="
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:252
+#, no-wrap
+msgid "Linting with Vale"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:257
+msgid ""
+"To maintain clarity and consistency across all documentation and website "
+"pages, link:https://vale.sh[Vale] styles have been introduced in the "
+"documentation tree. link:https://vale.sh[Vale] is a powerful linter for "
+"writing customized rules and can be used in multiple scenarios. Currently "
+"link:https://vale.sh[Vale] can be used as a command line tool, for CI/CD "
+"pipelines, and integrated into an editor of choice."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:259
+msgid ""
+"The following table describes the current rule names and their respective "
+"severity."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:266
+#, no-wrap
+msgid "Severity"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:267
+#, no-wrap
+msgid "FreeBSD.BrandTerms"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:269
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:287
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:293
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:296
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:299
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:302
+#, no-wrap
+msgid "error"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:270
+#, no-wrap
+msgid "FreeBSD.ConsciousLanguage"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:272
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:278
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:281
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:284
+#, no-wrap
+msgid "warning"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:273
+#, no-wrap
+msgid "FreeBSD.Contractions"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:275
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:290
+#, no-wrap
+msgid "suggestion"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:276
+#, no-wrap
+msgid "FreeBSD.EOLSpacing"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:279
+#, no-wrap
+msgid "FreeBSD.Hang"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:282
+#, no-wrap
+msgid "FreeBSD.Hyphens"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:285
+#, no-wrap
+msgid "FreeBSD.Spacing"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:288
+#, no-wrap
+msgid "FreeBSD.SuperfluousOptArgInLinks"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:291
+#, no-wrap
+msgid "Vale.Avoid"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:294
+#, no-wrap
+msgid "Vale.Repetition"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:297
+#, no-wrap
+msgid "Vale.Spelling"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:300
+#, no-wrap
+msgid "Vale.Terms"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:305
+#, no-wrap
+msgid "Current Vale Rules"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:311
+msgid ""
+"FreeBSD.BrandTerms: According to the copyright rules of The FreeBSD "
+"Foundation, *freebsd* should be written as *FreeBSD*. Similarly, every "
+"major vendor and company has specific rules on writing their brand names and "
+"trademarks. Care should be taken to be respectful to the brand value of "
+"others and to take time to write PostgreSQL, Node.js, Let's Encrypt etc. "
+"Missing brand names should be added to the [.filename]#.vale/styles/FreeBSD/"
+"BrandTerms.yml# in the `doc` repository."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:313
+msgid ""
+"FreeBSD.ConsciousLanguage: This rule proposes use of conscious language so "
+"that sensitive words pointing to the color, age, race, or sexual orientation "
+"of people are avoided where possible."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:316
+msgid ""
+"FreeBSD.Contractions: Contracted words should not be used. This rule avoids "
+"all contractions and suggests full words."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:318
+msgid ""
+"FreeBSD.EOLSpacing: In most of the documents EOL spacing is present which is "
+"not the desirable situation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:321
+msgid ""
+"FreeBSD.Hang: `Hang` is often used to mean that the application has stopped "
+"responding. This rule proposes better wording."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:323
+msgid ""
+"FreeBSD.Hyphens: Often adverbs ending with 'ly' are added with a hyphen "
+"which is wrong."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:325
+msgid ""
+"FreeBSD.Spacing: Often double spaces are hard to catch with the naked eye "
+"and this is addressed here."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:327
+msgid ""
+"FreeBSD.SuperfluousOptArgInLinks: Suggest to empty square brackets in `link:"
+"` macros when the displayed text coincides with the URL."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:331
+msgid ""
+"Vale.Avoid: Enforces the *DO NOT USE* vocabulary terms for The FreeBSD "
+"Project. If any word is found that should not be in the documentation, the "
+"word should be added to [.filename]#.vale/styles/Vocab/Terms/reject.txt# in "
+"the `doc` repository. The list is empty at the moment."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:334
+msgid ""
+"Vale.Repetition: Same words are often typed twice when leaving the keyboard "
+"and rejoining the work again. This rule finds repeated words and warns the "
+"users."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:337
+msgid ""
+"Vale.Spelling: At the moment there is a mix of en_US and en_GB spellings in "
+"the documentation and website. Vale comes with an in built dictionary from "
+"which uses strictly en_US and do not accept the en_GB variant of any words."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:341
+msgid ""
+"Vale.Terms: Enforces the *PREFERRED* vocabulary terms for The FreeBSD "
+"Project. At the moment the list of terms is empty and the FreeBSD specific "
+"terms will be added gradually. If any word is found to be correct and not "
+"available in the dictionary the word should be added to the [.filename]#."
+"vale/styles/Vocab/Terms/accept.txt# in the `doc` repository."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:343
+msgid ""
+"More rules will be introduced in the upcoming days when and where required."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:345
+#, no-wrap
+msgid "Using Vale"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:349
+msgid ""
+"link:https://vale.sh[Vale] can be used from the command line and from within "
+"an editor or IDE. package:textproc/vale[] can be installed as following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:353
+#, no-wrap
+msgid "$ pkg install vale\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:356
+#, no-wrap
+msgid "Using Vale on the command line"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:359
+msgid ""
+"Assuming that the `doc` repository was cloned into [.filename]#~/doc# the "
+"following commands are required to run:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:364
+#, no-wrap
+msgid ""
+"% cd ~/doc\n"
+"% vale .\n"
+msgstr ""
+
+#. type: delimited block = 6
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:370
+msgid ""
+"link:https://vale.sh[Vale] is a CPU and memory intensive program due to the "
+"nature of the application and can take a while to show any output on the "
+"screen. A better way to run the application is on specific folders or files "
+"rather than the entire `doc` repository as that is already done in the CI "
+"pipeline."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:373
+#, no-wrap
+msgid "Using Vale in editors"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:377
+msgid ""
+"link:https://vale.sh[Vale] works with major mainstream editors like package:"
+"editors/vim[], package:editors/emacs[], package:editors/vscode[]. At the "
+"moment the necessary configuration for package:editors/vim[] is described in "
+"crossref:editor-config[editor-config-vim, Vim]. A configuration for package:"
+"editors/emacs[] is being worked on."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/_index.adoc b/documentation/content/en/books/handbook/_index.adoc
index 62bedd2940..498a338793 100644
--- a/documentation/content/en/books/handbook/_index.adoc
+++ b/documentation/content/en/books/handbook/_index.adoc
@@ -2,7 +2,7 @@
title: FreeBSD Handbook
authors:
- author: The FreeBSD Documentation Project
-copyright: 1995-2022 The FreeBSD Documentation Project
+copyright: 1995-2024 The FreeBSD Documentation Project
description: A constantly evolving, comprehensive resource for FreeBSD users
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"]
tags: ["FreeBSD Handbook", "Handbook"]
diff --git a/documentation/content/en/books/handbook/_index.po b/documentation/content/en/books/handbook/_index.po
new file mode 100644
index 0000000000..bd90a267a8
--- /dev/null
+++ b/documentation/content/en/books/handbook/_index.po
@@ -0,0 +1,35 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-07-07 23:22-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/_index.adoc:1
+#, no-wrap
+msgid "A constantly evolving, comprehensive resource for FreeBSD users"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/_index.adoc:1
+#: documentation/content/en/books/handbook/_index.adoc:17
+#, no-wrap
+msgid "FreeBSD Handbook"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/_index.adoc:53
+msgid "'''"
+msgstr ""
diff --git a/documentation/content/en/books/handbook/advanced-networking/_index.adoc b/documentation/content/en/books/handbook/advanced-networking/_index.adoc
index 743e6d03a0..536aff16fa 100644
--- a/documentation/content/en/books/handbook/advanced-networking/_index.adoc
+++ b/documentation/content/en/books/handbook/advanced-networking/_index.adoc
@@ -1,13 +1,13 @@
---
-title: Chapter 32. Advanced Networking
+title: Chapter 34. Advanced Networking
part: IV. Network Communication
prev: books/handbook/firewalls
next: books/handbook/partv
description: "Advanced networking in FreeBSD: basics of gateways and routes, CARP, how to configure multiple VLANs on FreeBSD, etc"
-tags: ["Advanced Networking", "Handbook", "gateway", "routes", "wireless", "tethering", "bluetooth", "bridging", "ipv6", "CARP", "VLAN"]
+tags: ["Advanced Networking", "Handbook", "gateway", "routes", "wireless", "tethering", "bluetooth", "bridging", "CARP", "VLAN"]
showBookMenu: true
-weight: 37
-path: "/books/handbook/"
+weight: 39
+path: "/books/handbook/advanced-networking/"
---
[[advanced-networking]]
@@ -18,7 +18,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 32
+:sectnumoffset: 34
:partnums:
:source-highlighter: rouge
:experimental:
@@ -60,7 +60,6 @@ After reading this chapter, you will know:
* How to set up IEEE(R) 802.11 and Bluetooth(R) devices.
* How to make FreeBSD act as a bridge.
* How to set up network PXE booting.
-* How to set up IPv6 on a FreeBSD machine.
* How to enable and utilize the features of the Common Address Redundancy Protocol (CARP) in FreeBSD.
* How to configure multiple VLANs on FreeBSD.
* Configure bluetooth headset.
@@ -69,6 +68,7 @@ Before reading this chapter, you should:
* Understand the basics of the [.filename]#/etc/rc# scripts.
* Be familiar with basic network terminology.
+* Understand basic network configuration on FreeBSD (crossref:network[network,FreeBSD network]).
* Know how to configure and install a new FreeBSD kernel (crossref:kernelconfig[kernelconfig,Configuring the FreeBSD Kernel]).
* Know how to install additional third-party software (crossref:ports[ports,Installing Applications: Packages and Ports]).
@@ -160,7 +160,7 @@ Various attributes of each route can be seen in the `Flags` column.
.Commonly Seen Routing Table Flags
[cols="1,1", frame="none", options="header"]
|===
-| Command
+| Flag
| Purpose
|U
@@ -228,7 +228,7 @@ Static routes are appropriate for small networks and this section describes how
====
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/zebra[] package or port.
+Support for the BGP and OSPF routing protocols can be installed using the package:net/quagga[] package or port.
====
Consider the following network:
@@ -329,499 +329,65 @@ DVMRP has largely been replaced by the PIM protocol in many multicast installati
Refer to man:pim[4] for more information.
====
-[[network-wireless]]
-== Wireless Networking
+[[configtuning-virtual-hosts]]
+== Virtual Hosts
-=== Wireless Networking Basics
+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.
-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.
+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:
-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_.
-
-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.
-
-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.
-
-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.
-
-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.
-
-[[network-wireless-quick-start]]
-=== Quick Start
-
-Connecting a computer to an existing wireless network is a very common situation.
-This procedure shows the steps required.
-
-[.procedure]
-. Obtain the SSID (Service Set Identifier) and PSK (Pre-Shared Key) for the wireless network from the network administrator.
-. 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:
-+
[source,shell]
....
-% sysctl net.wlan.devices
-....
-+
-If a wireless adapter is not listed, an additional kernel module might be required, or it might be a model not supported by FreeBSD.
-+
-This example shows the Atheros `ath0` wireless adapter.
-. 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.
-+
-[.programlisting]
-....
-network={
- ssid="myssid"
- psk="mypsk"
-}
-....
-
-. Add entries to [.filename]#/etc/rc.conf# to configure the network on startup:
-+
-[.programlisting]
-....
-wlans_ath0="wlan0"
-ifconfig_wlan0="WPA SYNCDHCP"
-....
-
-. Restart the computer, or restart the network service to connect to the network:
-+
-[source,shell]
-....
-# service netif restart
-....
-
-[[network-wireless-basic]]
-=== Basic Setup
-
-==== Kernel Configuration
-
-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.
-
-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#:
-
-[.programlisting]
-....
-if_ath_load="YES"
-....
-
-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:
-
-[.programlisting]
-....
-if_wi_load="YES"
+# sysrc ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx"
....
-[NOTE]
-====
-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.
-====
+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.
-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#:
+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`.
-[.programlisting]
-....
-wlan_wep_load="YES"
-wlan_ccmp_load="YES"
-wlan_tkip_load="YES"
-....
+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`.
-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].
-
-[NOTE]
-====
-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:
-
-[.programlisting]
-....
-device wlan # 802.11 support
-device wlan_wep # 802.11 WEP support
-device wlan_ccmp # 802.11 CCMP support
-device wlan_tkip # 802.11 TKIP support
-device wlan_amrr # AMRR transmit rate control algorithm
-device ath # Atheros pci/cardbus NIC's
-device ath_hal # pci/cardbus chip support
-options AH_SUPPORT_AR5416 # enable AR5416 tx/rx descriptors
-device ath_rate_sample # SampleRate tx rate control for ath
-....
-
-With this information in the kernel configuration file, recompile the kernel and reboot the FreeBSD machine.
-====
-
-Information about the wireless device should appear in the boot messages, like this:
+The following [.filename]#/etc/rc.conf# entries configure the adapter correctly for this scenario:
[source,shell]
....
-ath0: <Atheros 5212> mem 0x88000000-0x8800ffff irq 11 at device 0.0 on cardbus1
-ath0: [ITHREAD]
-ath0: AR2413 mac 7.9 RF2413 phy 4.5
+# 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"
....
-==== Setting the Correct Region
-
-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.
-
-The available region definitions can be found in [.filename]#/etc/regdomain.xml#.
-To set the data at runtime, use `ifconfig`:
+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`.
[source,shell]
....
-# ifconfig wlan0 regdomain ETSI country AT
+# sysrc ifconfig_fxp0_aliases="inet 10.1.1.1-5/24 inet 202.0.75.17-20/28"
....
-To persist the settings, add it to [.filename]#/etc/rc.conf#:
+[[network-advanced-wireless]]
+== Wireless Advanced Authentication
-[source,shell]
-....
-# sysrc create_args_wlan0="country AT regdomain ETSI"
-....
+FreeBSD supports different ways of connecting to a wireless network.
+This section describes how to perform advanced authentication to a Wireless Network.
-=== Infrastructure Mode
-
-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.
-
-==== FreeBSD Clients
-
-===== How to Find Access Points
-
-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:
-
-[source,shell]
-....
-# ifconfig wlan0 create wlandev ath0
-# ifconfig wlan0 up scan
-SSID/MESH ID BSSID CHAN RATE S:N INT CAPS
-dlinkap 00:13:46:49:41:76 11 54M -90:96 100 EPS WPA WME
-freebsdap 00:11:95:c3:0d:ac 1 54M -83:96 100 EPS WPA
-....
-
-[NOTE]
-====
-The interface must be `up` before it can scan.
-Subsequent scan requests do not require the interface to be marked as up again.
-====
-
-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).
-
-One can also display the current list of known networks with:
-
-[source,shell]
-....
-# ifconfig wlan0 list scan
-....
-
-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.
-
-===== Basic Settings
-
-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.
-
-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.
-
-====== Selecting an Access Point
-
-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#:
-
-[.programlisting]
-....
-wlans_ath0="wlan0"
-ifconfig_wlan0="DHCP"
-....
-
-If there are multiple access points, a specific one can be selected by its SSID:
-
-[.programlisting]
-....
-wlans_ath0="wlan0"
-ifconfig_wlan0="ssid your_ssid_here DHCP"
-....
-
-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:
-
-[.programlisting]
-....
-wlans_ath0="wlan0"
-ifconfig_wlan0="ssid your_ssid_here bssid xx:xx:xx:xx:xx:xx DHCP"
-....
-
-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:
-
-[.programlisting]
-....
-wlans_ath0="wlan0"
-ifconfig_wlan0="mode 11g ssid your_ssid_here DHCP"
-....
-
-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].
-
-====== Authentication
-
-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>>.
-
-[NOTE]
-====
-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:
-
-[.programlisting]
-....
-wlans_ath0="wlan0"
-ifconfig_wlan0="authmode shared wepmode on weptxkey 1 wepkey 01234567 DHCP"
-....
-
-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>>.
-====
-
-====== Getting an IP Address with DHCP
-
-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:
-
-[.programlisting]
-....
-wlans_ath0="wlan0"
-ifconfig_wlan0="DHCP"
-....
-
-The wireless interface is now ready to bring up:
-
-[source,shell]
-....
-# service netif start
-....
-
-Once the interface is running, use man:ifconfig[8] to see the status of the interface [.filename]#ath0#:
-
-[source,shell]
-....
-# ifconfig wlan0
-wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
- ether 00:11:95:d5:43:62
- inet 192.168.1.100 netmask 0xffffff00 broadcast 192.168.1.255
- media: IEEE 802.11 Wireless Ethernet OFDM/54Mbps mode 11g
- status: associated
- ssid dlinkap channel 11 (2462 Mhz 11g) bssid 00:13:46:49:41:76
- 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
-....
-
-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.
-
-====== Static IP Address
-
-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:
-
-[.programlisting]
-....
-wlans_ath0="wlan0"
-ifconfig_wlan0="inet 192.168.1.100 netmask 255.255.255.0 ssid your_ssid_here"
-....
-
-[[network-wireless-wpa]]
-===== WPA
-
-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.
-
-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.
-
-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].
-
-[[network-wireless-wpa-wpa-psk]]
-====== WPA-PSK
-
-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.
-
-[WARNING]
-====
-Always use strong passwords that are sufficiently long and made from a rich alphabet so that they will not be easily guessed or attacked.
-====
-
-The first step is the configuration of [.filename]#/etc/wpa_supplicant.conf# with the SSID and the pre-shared key of the network:
-
-[.programlisting]
-....
-network={
- ssid="freebsdap"
- psk="freebsdmall"
-}
-....
-
-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:
-
-[.programlisting]
-....
-wlans_ath0="wlan0"
-ifconfig_wlan0="WPA DHCP"
-....
-
-Then, bring up the interface:
-
-[source,shell]
-....
-# service netif start
-Starting wpa_supplicant.
-DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 5
-DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 6
-DHCPOFFER from 192.168.0.1
-DHCPREQUEST on wlan0 to 255.255.255.255 port 67
-DHCPACK from 192.168.0.1
-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 OFDM/36Mbps 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
-....
-
-Or, try to configure the interface manually using the information in [.filename]#/etc/wpa_supplicant.conf#:
-
-[source,shell]
-....
-# wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf
-Trying to associate with 00:11:95:c3:0d:ac (SSID='freebsdap' freq=2412 MHz)
-Associated with 00:11:95:c3:0d:ac
-WPA: Key negotiation completed with 00:11:95:c3:0d:ac [PTK=CCMP GTK=CCMP]
-CTRL-EVENT-CONNECTED - Connection to 00:11:95:c3:0d:ac completed (auth) [id=0 id_str=]
-....
-
-The next operation is to launch man:dhclient[8] to get the IP address from the DHCP server:
-
-[source,shell]
-....
-# dhclient wlan0
-DHCPREQUEST on wlan0 to 255.255.255.255 port 67
-DHCPACK from 192.168.0.1
-bound to 192.168.0.254 -- renewal in 300 seconds.
-# ifconfig wlan0
-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 OFDM/36Mbps 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
-....
-
-[NOTE]
-====
-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.
-====
-
-If DHCP is not possible or desired, set a static IP address after man:wpa_supplicant[8] has authenticated the station:
-
-[source,shell]
-....
-# ifconfig wlan0 inet 192.168.0.100 netmask 255.255.255.0
-# ifconfig wlan0
-wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
- ether 00:11:95:d5:43:62
- inet 192.168.0.100 netmask 0xffffff00 broadcast 192.168.0.255
- media: IEEE 802.11 Wireless Ethernet OFDM/36Mbps 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
-....
-
-When DHCP is not used, the default gateway and the nameserver also have to be manually set:
-
-[source,shell]
-....
-# route add default your_default_router
-# echo "nameserver your_DNS_server" >> /etc/resolv.conf
-....
+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.
[[network-wireless-wpa-eap-tls]]
-====== WPA with EAP-TLS
+=== WPA with EAP-TLS
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.
@@ -895,7 +461,7 @@ wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
It is also possible to bring up the interface manually using man:wpa_supplicant[8] and man:ifconfig[8].
[[network-wireless-wpa-eap-ttls]]
-====== WPA with EAP-TTLS
+=== WPA with EAP-TTLS
With EAP-TLS, both the authentication server and the client need a certificate.
With EAP-TTLS, a client certificate is optional.
@@ -956,7 +522,7 @@ wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
....
[[network-wireless-wpa-eap-peap]]
-====== WPA with EAP-PEAP
+=== WPA with EAP-PEAP
[NOTE]
====
@@ -1026,54 +592,8 @@ wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
wme burst roaming MANUAL
....
-[[network-wireless-wep]]
-===== WEP
-
-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.
-
-WEP can be set up using man:ifconfig[8]:
-
-[source,shell]
-....
-# ifconfig wlan0 create wlandev ath0
-# ifconfig wlan0 inet 192.168.1.100 netmask 255.255.255.0 \
- ssid my_net wepmode on weptxkey 3 wepkey 3:0x3456789012
-....
-
-* 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.
-* 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.
-+
-[NOTE]
-====
-Replace the `0x3456789012` with the key configured for use on the access point.
-====
-
-Refer to man:ifconfig[8] for further information.
-
-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#:
-
-[.programlisting]
-....
-network={
- ssid="my_net"
- key_mgmt=NONE
- wep_key3=3456789012
- wep_tx_keyidx=3
-}
-....
-
-Then:
-
-[source,shell]
-....
-# wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf
-Trying to associate with 00:13:46:49:41:76 (SSID='dlinkap' freq=2437 MHz)
-Associated with 00:13:46:49:41:76
-....
-
-=== Ad-hoc Mode
+[[wireless-ad-hoc-mode]]
+== Wireless Ad-hoc Mode
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.
@@ -1307,85 +827,6 @@ 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`.
-==== WEP Host-based Access Point
-
-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.
-
-The wireless device can now be put into hostap mode and configured with the correct SSID and IP address:
-
-[source,shell]
-....
-# ifconfig wlan0 create wlandev ath0 wlanmode hostap
-# ifconfig wlan0 inet 192.168.0.1 netmask 255.255.255.0 \
- ssid freebsdap wepmode on weptxkey 3 wepkey 3:0x3456789012 mode 11g
-....
-
-* 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.
-* 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.
-
-Use man:ifconfig[8] to see the status of the [.filename]#wlan0# interface:
-
-[source,shell]
-....
-# 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 4 (2427 Mhz 11g) bssid 00:11:95:c3:0d:ac
- country US ecm authmode OPEN privacy ON deftxkey 3 wepkey 3:40-bit
- txpower 21.5 scanvalid 60 protmode CTS wme burst dtimperiod 1 -dfs
-....
-
-From another wireless machine, it is now possible to initiate a scan to find the AP:
-
-[source,shell]
-....
-# ifconfig wlan0 create wlandev ath0
-# ifconfig wlan0 up scan
-SSID BSSID CHAN RATE S:N INT CAPS
-freebsdap 00:11:95:c3:0d:ac 1 54M 22:1 100 EPS
-....
-
-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.
-
-=== Using Both Wired and Wireless Connections
-
-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.
-
-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.
-
-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>>.
-
-=== Troubleshooting
-
-This section describes a number of steps to help troubleshoot common wireless networking problems.
-
-* 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.
-* 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.
-+
-Debugging support is provided by man:wpa_supplicant[8]. Try running this utility manually with `-dd` and look at the system logs.
-* Once the system can associate with the access point, diagnose the network configuration using tools like man:ping[8].
-* 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:
-+
-[source,shell]
-....
-# wlandebug -i wlan0 +scan+auth+debug+assoc
- net.wlan.0.debug: 0 => 0xc80000<assoc,auth,scan>
-....
-+
-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.
-
-If the above information does not help to clarify the problem, submit a problem report and include output from the above tools.
-
[[network-usb-tethering]]
== USB Tethering
@@ -2130,7 +1571,7 @@ For example, to read the input from four network interfaces as one stream:
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.
-To enable monitoring on the bridge, uncomment this line in [.filename]#/etc/snmpd.config# by removing the beginning `#` symbol:
+To enable monitoring on the bridge, uncomment this line in [.filename]#/etc/snmpd.config# by removing the beginning `+#+` symbol:
[.programlisting]
....
@@ -2520,6 +1961,12 @@ After the host computer receives this information, it downloads 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].
+[NOTE]
+====
+For UEFI PXE based boot, the actual boot loader file to use is [.filename]#/boot/loader.efi#.
+See the below section crossref:advanced-networking[_debugging_pxe_problems,Debugging PXE Problems] on how to use [.filename]#/boot/loader.efi#.
+====
+
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.
@@ -2580,15 +2027,16 @@ nfs_server_enable="YES"
inetd_enable="YES"
....
-. Uncomment the following line in [.filename]#/etc/inetd.conf# by making sure it does not start with a `#` symbol:
+. Uncomment the following line in [.filename]#/etc/inetd.conf# by making sure it does not start with a `+#+` symbol:
+
[.programlisting]
....
-tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /b/tftpboot
+tftp dgram udp wait root /usr/libexec/tftpd tftpd blocksize 1468 -l -s /b/tftpboot
....
+
[NOTE]
====
+The specified tftp blocksize, e.g. 1468 bytes, replaces the default size 512 bytes.
Some PXE versions require the TCP version of TFTP.
In this case, uncomment the second `tftp` line which contains `stream tcp`.
====
@@ -2739,256 +2187,15 @@ The `BUGS` sections in man:tftpd[8] and man:tftp[1] document some limitations wi
....
# mount -t nfs 192.168.0.1:/b/tftpboot/FreeBSD/install /mnt
....
-****
-
-[[network-ipv6]]
-== IPv6
-
-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:
-
-* 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.
-* 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.
-
-* Address autoconfiguration (http://www.ietf.org/rfc/rfc2462.txt[RFC2462]).
-* Mandatory multicast addresses.
-* Built-in IPsec (IP security).
-* Simplified header structure.
-* Support for mobile IP.
-* IPv6-to-IPv4 transition mechanisms.
-
-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.
-
-=== Background on IPv6 Addresses
-
-There are three different types of IPv6 addresses:
-
-Unicast::
-A packet sent to a unicast address arrives at the interface belonging to the address.
-
-Anycast::
-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.
-
-Multicast::
-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.
-
-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`.
-
-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`.
-
-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`.
-
-To view a FreeBSD system's IPv6 address, use man:ifconfig[8]:
-
++
+. For UEFI PXE based booting, replace the [.filename]#boot/pxeboot# file with the [.filename]#boot/loader.efi# file:
[source,shell]
....
-# ifconfig
-....
-
-[.programlisting]
-....
-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
-....
-
-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.
-
-Some IPv6 addresses are reserved.
-A summary of these reserved addresses is seen in <<reservedip6>>:
-
-[[reservedip6]]
-.Reserved IPv6 Addresses
-[cols="1,1,1,1", frame="none", options="header"]
-|===
-| IPv6 address
-| Prefixlength (Bits)
-| Description
-| Notes
-
-|`::`
-|128 bits
-|unspecified
-|Equivalent to `0.0.0.0` in IPv4.
-
-|`::1`
-|128 bits
-|loopback address
-|Equivalent to `127.0.0.1` in IPv4.
-
-|`::00:xx:xx:xx:xx`
-|96 bits
-|embedded IPv4
-|The lower 32 bits are the compatible IPv4 address.
-
-|`::ff:xx:xx:xx:xx`
-|96 bits
-|IPv4 mapped IPv6 address
-|The lower 32 bits are the IPv4 address for hosts which do not support IPv6.
-
-|`fe80::/10`
-|10 bits
-|link-local
-|Equivalent to 169.254.0.0/16 in IPv4.
-
-|`fc00::/7`
-|7 bits
-|unique-local
-|Unique local addresses are intended for local communication and are only routable within a set of cooperating sites.
-
-|`ff00::`
-|8 bits
-|multicast
-|
-
-|``2000::-3fff::``
-|3 bits
-|global unicast
-|All global unicast addresses are assigned from this pool. The first 3 bits are `001`.
-|===
-
-For further information on the structure of IPv6 addresses, refer to http://www.ietf.org/rfc/rfc3513.txt[RFC3513].
-
-=== Configuring IPv6
-
-To configure a FreeBSD system as an IPv6 client, add these two lines to [.filename]#rc.conf#:
-
-[.programlisting]
-....
-ifconfig_rl0_ipv6="inet6 accept_rtadv"
-rtsold_enable="YES"
-....
-
-The first line enables the specified interface to receive router advertisement messages.
-The second line enables the router solicitation daemon, man:rtsol[8].
-
-If the interface needs a statically assigned IPv6 address, add an entry to specify the static address and associated prefix length:
-
-[.programlisting]
-....
-ifconfig_rl0_ipv6="inet6 2001:db8:4672:6565:2026:5043:2d42:5344 prefixlen 64"
-....
-
-To assign a default router, specify its address:
-
-[.programlisting]
-....
-ipv6_defaultrouter="2001:db8:4672:6565::1"
-....
-
-=== Connecting to a Provider
-
-In order to connect to other IPv6 networks, one must have a provider or a tunnel that supports IPv6:
-
-* Contact an Internet Service Provider to see if they offer IPv6.
-* http://www.tunnelbroker.net[Hurricane Electric] offers tunnels with end-points all around the globe.
-
-[NOTE]
-====
-Install the package:net/freenet6[] package or port for a dial-up connection.
-====
-
-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.
-
-The first [.filename]#/etc/rc.conf# entry creates the generic tunneling interface [.filename]#gif0#:
-
-[.programlisting]
-....
-cloned_interfaces="gif0"
-....
-
-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:
-
-[.programlisting]
-....
-create_args_gif0="tunnel MY_IPv4_ADDR REMOTE_IPv4_ADDR"
-....
-
-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:
-
-[.programlisting]
-....
-ifconfig_gif0_ipv6="inet6 MY_ASSIGNED_IPv6_TUNNEL_ENDPOINT_ADDR"
-....
-
-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:
-
-[.programlisting]
-....
-ipv6_defaultrouter="MY_IPv6_REMOTE_TUNNEL_ENDPOINT_ADDR"
-....
-
-If the FreeBSD system will route IPv6 packets between the rest of the network and the world, enable the gateway using this line:
-
-[.programlisting]
-....
-ipv6_gateway_enable="YES"
-....
-
-=== Router Advertisement and Host Auto Configuration
-
-This section demonstrates how to setup man:rtadvd[8] to advertise the IPv6 default route.
-
-To enable man:rtadvd[8], add the following to [.filename]#/etc/rc.conf#:
-
-[.programlisting]
-....
-rtadvd_enable="YES"
-....
-
-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#:
-
-[.programlisting]
-....
-rtadvd_interfaces="rl0"
-....
-
-Next, create the configuration file, [.filename]#/etc/rtadvd.conf# as seen in this example:
-
-[.programlisting]
-....
-rl0:\
- :addrs#1:addr="2001:db8:1f11:246::":prefixlen#64:tc=ether:
-....
-
-Replace [.filename]#rl0# with the interface to be used and `2001:db8:1f11:246::` with the prefix of the allocation.
-
-For a dedicated `/64` subnet, nothing else needs to be changed.
-Otherwise, change the `prefixlen#` to the correct value.
-
-=== IPv6 and IPv6 Address Mapping
-
-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.
-
-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#:
-
-[.programlisting]
-....
-ipv6_ipv4mapping="YES"
+# chroot ${NFSROOTDIR}
+# mv boot/pxeboot boot/pxeboot.original
+# cp boot/loader.efi boot/pxeboot
....
-
-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.
+****
[[carp]]
== Common Address Redundancy Protocol (CARP)
@@ -3014,7 +2221,7 @@ The backup machine has two additional CARP interfaces, one for each of the maste
When a failure occurs, the backup server will pick up the failed master machine's IP address.
[[carp-10x]]
-=== Using CARP on FreeBSD 10 and Later
+=== Using CARP
Enable boot-time support for CARP by adding an entry for the [.filename]#carp.ko# kernel module in [.filename]#/boot/loader.conf#:
@@ -3092,89 +2299,6 @@ High availability is now enabled.
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].
-[[carp-9x]]
-=== Using CARP on FreeBSD 9 and Earlier
-
-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.
-
-Enable boot-time support for CARP by loading the [.filename]#if_carp.ko# kernel module in [.filename]#/boot/loader.conf#:
-
-[.programlisting]
-....
-if_carp_load="YES"
-....
-
-To load the module now without rebooting:
-
-[source,shell]
-....
-# kldload carp
-....
-
-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]:
-
-[.programlisting]
-....
-device carp
-....
-
-Next, on each host, create a CARP device:
-
-[source,shell]
-....
-# ifconfig carp0 create
-....
-
-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`:
-
-[.programlisting]
-....
-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"
-....
-
-On `hostb.example.org`:
-
-[.programlisting]
-....
-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"
-....
-
-The third machine, `hostc.example.org`, is configured to handle failover from either of the master hosts:
-
-[.programlisting]
-....
-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]
-====
-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:
-
-[source,shell]
-....
-# ifconfig carp0 down && ifconfig carp0 up
-....
-
-This should be done on the [.filename]#carp# interface which corresponds to the correct host.
-====
-
-Once the configuration is complete, either restart networking or reboot each system.
-High availability is now enabled.
-
[[network-vlan]]
== VLANs
@@ -3199,6 +2323,17 @@ To configure VLANs at run time, with a NIC of `em0` and a VLAN tag of `5` the co
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.
====
+[NOTE]
+====
+When defining VLANs, ensure that the parent network interface is also configured and enabled.
+The minimum configuration for the above example would be:
+
+[source,shell]
+....
+# ifconfig em0 up
+....
+====
+
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:
@@ -3210,6 +2345,17 @@ ifconfig_em0_5="inet 192.168.20.20/24"
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.
+[NOTE]
+====
+When defining VLANs in [.filename]#/etc/rc.conf#, make sure that the parent network interface is configured and enabled as well.
+The minimum configuration for the above example would be:
+
+[.programlisting]
+....
+ifconfig_em0="up"
+....
+====
+
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`.
diff --git a/documentation/content/en/books/handbook/advanced-networking/_index.po b/documentation/content/en/books/handbook/advanced-networking/_index.po
new file mode 100644
index 0000000000..ac4a1f6aac
--- /dev/null
+++ b/documentation/content/en/books/handbook/advanced-networking/_index.po
@@ -0,0 +1,4727 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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 ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1
+#, no-wrap
+msgid "IV. Network Communication"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1
+#, no-wrap
+msgid "Chapter 34. Advanced Networking"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:14
+#, no-wrap
+msgid "Advanced Networking"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:55
+msgid "This chapter covers a number of advanced networking topics."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:57
+msgid "After reading this chapter, you will know:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:59
+msgid "The basics of gateways and routes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:60
+msgid "How to set up USB tethering."
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:62
+msgid "How to make FreeBSD act as a bridge."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:63
+msgid "How to set up network PXE booting."
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:65
+msgid "How to configure multiple VLANs on FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:66
+msgid "Configure bluetooth headset."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:68
+msgid "Before reading this chapter, you should:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:70
+msgid "Understand the basics of the [.filename]#/etc/rc# scripts."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:71
+msgid "Be familiar with basic network terminology."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:76
+#, no-wrap
+msgid "Gateways and Routes"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:90
+#, no-wrap
+msgid "Routing Basics"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:98
+#, no-wrap
+msgid ""
+"% netstat -r\n"
+"Routing tables\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:113
+msgid "The entries in this example are as follows:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:114
+#, no-wrap
+msgid "default"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:125
+#, no-wrap
+msgid "localhost"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:130
+#, no-wrap
+msgid "MAC address"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:137
+#, no-wrap
+msgid "subnet"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:145
+#, no-wrap
+msgid "host"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:153
+#, no-wrap
+msgid "224"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:155
+msgid "The final line (destination subnet `224`) deals with multicasting."
+msgstr ""
+
+#. 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 ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:160
+#, no-wrap
+msgid "Commonly Seen Routing Table Flags"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:164
+#, no-wrap
+msgid "Flag"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:166
+#, no-wrap
+msgid "Purpose"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:167
+#, no-wrap
+msgid "U"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:169
+#, no-wrap
+msgid "The route is active (up)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:170
+#, no-wrap
+msgid "H"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:172
+#, no-wrap
+msgid "The route destination is a single host."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:173
+#, no-wrap
+msgid "G"
+msgstr ""
+
+#. 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 ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:176
+#, no-wrap
+msgid "S"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:178
+#, no-wrap
+msgid "This route was statically configured."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:179
+#, no-wrap
+msgid "C"
+msgstr ""
+
+#. 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 ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:182
+#, no-wrap
+msgid "W"
+msgstr ""
+
+#. 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 ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:185
+#, no-wrap
+msgid "L"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:186
+#, no-wrap
+msgid "Route involves references to Ethernet (link) hardware."
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:193
+#, no-wrap
+msgid "defaultrouter=\"10.20.30.1\"\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:206
+#, no-wrap
+msgid "Configuring a Router with Static Routes"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:235
+msgid "Consider the following network:"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:236
+#, no-wrap
+msgid "static-routes.png"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:248
+#, no-wrap
+msgid ""
+"% netstat -nr\n"
+"Routing tables\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:310
+#, no-wrap
+msgid "Multicast Considerations"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:319
+#, no-wrap
+msgid "options MROUTING\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:333
+#, no-wrap
+msgid "Virtual Hosts"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:382
+#, no-wrap
+msgid "Wireless Advanced Authentication"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:390
+#, no-wrap
+msgid "WPA with EAP-TLS"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:422
+msgid "This field indicates the network name (SSID)."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:425
+msgid "This field indicates the EAP method for the connection."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:426
+msgid "The `identity` field contains the identity string for EAP."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:464
+#, no-wrap
+msgid "WPA with EAP-TTLS"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:525
+#, no-wrap
+msgid "WPA with EAP-PEAP"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:565
+msgid "Add the following to [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:573
+msgid "Then, bring up the interface:"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:596
+#, no-wrap
+msgid "Wireless Ad-hoc Mode"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:602
+msgid "On `A`:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:621
+msgid "`B` should now be able to detect `A`:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:650
+#, no-wrap
+msgid "FreeBSD Host Access Points"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:656
+#, no-wrap
+msgid "Basic Settings"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:687
+#, no-wrap
+msgid "# ifconfig wlan0 destroy\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:723
+#, no-wrap
+msgid "Host-based Access Point Without Authentication or Encryption"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:756
+#, no-wrap
+msgid "WPA2 Host-based Access Point"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:769
+#, no-wrap
+msgid "hostapd_enable=\"YES\"\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title =====
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:773
+#, no-wrap
+msgid "WPA2-PSK"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:778
+msgid "The configuration is done in [.filename]#/etc/hostapd.conf#:"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:793
+msgid "Wireless interface used for the access point."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:796
+msgid "The group allowed to access the control interface files."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:799
+msgid "ASCII passphrase for WPA authentication."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:803
+msgid "The next step is to start man:hostapd[8]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:807
+#, no-wrap
+msgid "# service hostapd forcestart\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:831
+#, no-wrap
+msgid "USB Tethering"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:838
+msgid "Apple(R) devices use the man:ipheth[4] driver."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:862
+#, no-wrap
+msgid "Bluetooth"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:871
+#, no-wrap
+msgid "Loading Bluetooth Support"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:885
+#, no-wrap
+msgid "# kldload ng_ubt\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:892
+#, no-wrap
+msgid "ng_ubt_load=\"YES\"\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:925
+#, no-wrap
+msgid "Finding Other Bluetooth Devices"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1002
+#, no-wrap
+msgid "Device Pairing"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1042
+#, no-wrap
+msgid "hcsecd_enable=\"YES\"\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1056
+#, no-wrap
+msgid "Network Access with PPP Profiles"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1090
+#, no-wrap
+msgid "Bluetooth Protocols"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1094
+#, no-wrap
+msgid "Logical Link Control and Adaptation Protocol (L2CAP)"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1155
+#, no-wrap
+msgid "Radio Frequency Communication (RFCOMM)"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1170
+#, no-wrap
+msgid "Service Discovery Protocol (SDP)"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1232
+#, no-wrap
+msgid "sdpd_enable=\"YES\"\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1239
+#, no-wrap
+msgid "# service sdpd start\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1250
+#, no-wrap
+msgid "# sdpcontrol -l browse\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1252
+#, no-wrap
+msgid "OBEX Object Push (OPUSH)"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1287
+#, no-wrap
+msgid "# obexapp -s -C 10\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1289
+#, no-wrap
+msgid "Serial Port Profile (SPP)"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1311
+#, no-wrap
+msgid "# cu -l /dev/pts/6\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1337
+#, no-wrap
+msgid "Bridging"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1348
+msgid "Bridging can be useful in the following situations:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1349
+#, no-wrap
+msgid "Connecting Networks"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1354
+#, no-wrap
+msgid "Filtering/Traffic Shaping Firewall"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1362
+#, no-wrap
+msgid "Network Tap"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1365
+#, no-wrap
+msgid "Layer 2 VPN"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1368
+#, no-wrap
+msgid "Layer 2 Redundancy"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1380
+#, no-wrap
+msgid "Enabling the Bridge"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1447
+#, no-wrap
+msgid "Enabling Spanning Tree"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1480
+msgid "Another bridge on the network also has STP enabled:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1499
+#, no-wrap
+msgid "Bridge Interface Parameters"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1505
+#, no-wrap
+msgid "private"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1510
+#, no-wrap
+msgid "span"
+msgstr ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1519
+#, no-wrap
+msgid "# ifconfig bridge0 span fxp4\n"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1521
+#, no-wrap
+msgid "sticky"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1556
+#, no-wrap
+msgid "# ifconfig bridge0 ifmaxaddr vlan100 10\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1569
+#, no-wrap
+msgid "SNMP Monitoring"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1588
+#, no-wrap
+msgid "bsnmpd_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1591
+msgid "Then, start man:bsnmpd[1]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1595
+#, no-wrap
+msgid "# service bsnmpd start\n"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1663
+#, no-wrap
+msgid "Link Aggregation and Failover"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1672
+#, no-wrap
+msgid "failover"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1678
+#, no-wrap
+msgid "loadbalance"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1682
+#, no-wrap
+msgid "lacp"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1691
+#, no-wrap
+msgid "roundrobin"
+msgstr ""
+
+#. 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 ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1695
+#, no-wrap
+msgid "broadcast"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1698
+#, no-wrap
+msgid "Configuration Examples"
+msgstr ""
+
+#. 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 ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1704
+#, no-wrap
+msgid "LACP Aggregation with a Cisco(R) Switch"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1738
+msgid "Next, verify the status of the virtual interface:"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1767
+#, no-wrap
+msgid "Channel group 1 neighbors\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1769
+#, no-wrap
+msgid "Partner's information:\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1777
+msgid "For more detail, type `show lacp neighbor detail`."
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1791
+#, no-wrap
+msgid "Failover Mode"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1840
+#, no-wrap
+msgid "Failover Mode Between Ethernet and Wireless Interfaces"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1929
+#, no-wrap
+msgid "# dhclient lagg0\n"
+msgstr ""
+
+#. 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 ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1946
+#, no-wrap
+msgid "Diskless Operation with PXE"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1958
+msgid "The file systems are loaded using NFS."
+msgstr ""
+
+#. 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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1968
+msgid ""
+"For UEFI PXE based boot, the actual boot loader file to use is [.filename]#/"
+"boot/loader.efi#. See the below section crossref:advanced-"
+"networking[_debugging_pxe_problems,Debugging PXE Problems] on how to use [."
+"filename]#/boot/loader.efi#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1972
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1977
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1980
+#, no-wrap
+msgid "Setting Up the PXE Environment"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1986
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1991
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:1995
+msgid ""
+"Create the root directory which will contain a FreeBSD installation to be "
+"NFS mounted:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2000
+#, no-wrap
+msgid ""
+"# export NFSROOTDIR=/b/tftpboot/FreeBSD/install\n"
+"# mkdir -p ${NFSROOTDIR}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2003
+msgid "Enable the NFS server by adding this line to [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2007
+#, no-wrap
+msgid "nfs_server_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2010
+msgid ""
+"Export the diskless root directory via NFS by adding the following to [."
+"filename]#/etc/exports#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2014
+#, no-wrap
+msgid "/b -ro -alldirs -maproot=root\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2017
+msgid "Start the NFS server:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2021
+#, no-wrap
+msgid "# service nfsd start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2024
+msgid ""
+"Enable man:inetd[8] by adding the following line to [.filename]#/etc/rc."
+"conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2028
+#, no-wrap
+msgid "inetd_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2031
+msgid ""
+"Uncomment the following line in [.filename]#/etc/inetd.conf# by making sure "
+"it does not start with a `+#+` symbol:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2035
+#, no-wrap
+msgid "tftp dgram udp wait root /usr/libexec/tftpd tftpd blocksize 1468 -l -s /b/tftpboot\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2042
+msgid ""
+"The specified tftp blocksize, e.g. 1468 bytes, replaces the default size 512 "
+"bytes. Some PXE versions require the TCP version of TFTP. In this case, "
+"uncomment the second `tftp` line which contains `stream tcp`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2045
+msgid "Start man:inetd[8]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2049
+#, no-wrap
+msgid "# service inetd start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2052
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2053
+msgid ""
+"Test that the TFTP server works and can download the boot loader which will "
+"be obtained via PXE:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2059
+#, no-wrap
+msgid ""
+"# tftp localhost\n"
+"tftp> get FreeBSD/install/boot/pxeboot\n"
+"Received 264951 bytes in 0.1 seconds\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2062
+msgid ""
+"Edit [.filename]#${NFSROOTDIR}/etc/fstab# and create an entry to mount the "
+"root file system over NFS:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2067
+#, no-wrap
+msgid ""
+"# Device Mountpoint FSType Options Dump Pass\n"
+"myhost.example.com:/b/tftpboot/FreeBSD/install / nfs ro 0 0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2071
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2072
+msgid ""
+"Set the root password in the PXE environment for client machines which are "
+"PXE booting :"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2077
+#, no-wrap
+msgid ""
+"# chroot ${NFSROOTDIR}\n"
+"# passwd\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2080
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2081
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2084
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2091
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2096
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2098
+#, no-wrap
+msgid "Configuring the DHCP Server"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2101
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2103
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2106
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2116
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2119
+#, no-wrap
+msgid ""
+" # IP address of TFTP server\n"
+" next-server 192.168.0.1 ;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2122
+#, no-wrap
+msgid ""
+" # path of boot loader obtained via tftp\n"
+" filename \"FreeBSD/install/boot/pxeboot\" ;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2125
+#, 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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2127
+#, no-wrap
+msgid "}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2130
+msgid ""
+"The `next-server` directive is used to specify the IP address of the TFTP "
+"server."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2133
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2135
+msgid "The `root-path` option defines the path to the NFS root file system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2137
+msgid ""
+"Once the edits are saved, enable DHCP at boot time by adding the following "
+"line to [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2141
+#, no-wrap
+msgid "dhcpd_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2144
+msgid "Then start the DHCP service:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2148
+#, no-wrap
+msgid "# service isc-dhcpd start\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2150
+#, no-wrap
+msgid "Debugging PXE Problems"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2154
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2156
+msgid ""
+"This section describes some troubleshooting tips for isolating the source of "
+"the configuration problem should no clients be able to PXE boot."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2160
+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 ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2161
+#, no-wrap
+msgid "PXE Booting Process with NFS Root Mount"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2162
+#, no-wrap
+msgid "pxe-nfs.png"
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2165
+msgid "Client broadcasts a DHCPDISCOVER message."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2167
+msgid ""
+"The DHCP server responds with the IP address, next-server, filename, and "
+"root-path values."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2169
+msgid ""
+"The client sends a TFTP request to next-server, asking to retrieve filename."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2171
+msgid "The TFTP server responds and sends filename to client."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2173
+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 ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2175
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2181
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2184
+msgid ""
+"The `BUGS` sections in man:tftpd[8] and man:tftp[1] document some "
+"limitations with TFTP."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2185
+msgid ""
+"Make sure that the root file system can be mounted via NFS. To test this "
+"example configuration:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2189
+#, no-wrap
+msgid "# mount -t nfs 192.168.0.1:/b/tftpboot/FreeBSD/install /mnt\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2192
+msgid ""
+"For UEFI PXE based booting, replace the [.filename]#boot/pxeboot# file with "
+"the [.filename]#boot/loader.efi# file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2197
+#, no-wrap
+msgid ""
+"# chroot ${NFSROOTDIR}\n"
+"# mv boot/pxeboot boot/pxeboot.original\n"
+"# cp boot/loader.efi boot/pxeboot\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2201
+#, no-wrap
+msgid "Common Address Redundancy Protocol (CARP)"
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2205
+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 ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2209
+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 ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2212
+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 ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2215
+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 ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2222
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2224
+#, no-wrap
+msgid "Using CARP on FreeBSD 10 and Later"
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2227
+msgid ""
+"Enable boot-time support for CARP by adding an entry for the [."
+"filename]#carp.ko# kernel module in [.filename]#/boot/loader.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2231
+#, no-wrap
+msgid "carp_load=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2234
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2315
+msgid "To load the module now without rebooting:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2238
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2319
+#, no-wrap
+msgid "# kldload carp\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2241
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2322
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2245
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2326
+#, no-wrap
+msgid "device\tcarp\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2248
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2254
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2259
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2265
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2270
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2277
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2281
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2288
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2292
+#, no-wrap
+msgid "# ifconfig em0 vhid 1 state backup\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2298
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2384
+msgid ""
+"Once the configuration is complete, either restart networking or reboot each "
+"system. High availability is now enabled."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2301
+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 ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2303
+#, no-wrap
+msgid "Using CARP on FreeBSD 9 and Earlier"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2306
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2308
+msgid ""
+"Enable boot-time support for CARP by loading the [.filename]#if_carp.ko# "
+"kernel module in [.filename]#/boot/loader.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2312
+#, no-wrap
+msgid "if_carp_load=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2329
+msgid "Next, on each host, create a CARP device:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2333
+#, no-wrap
+msgid "# ifconfig carp0 create\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2338
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2345
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2348
+msgid "On `hostb.example.org`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2355
+#, 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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2358
+msgid ""
+"The third machine, `hostc.example.org`, is configured to handle failover "
+"from either of the master hosts:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2366
+#, 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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2373
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2377
+#, no-wrap
+msgid "# ifconfig carp0 down && ifconfig carp0 up\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2380
+msgid ""
+"This should be done on the [.filename]#carp# interface which corresponds to "
+"the correct host."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2386
+#, no-wrap
+msgid "VLANs"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2390
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2393
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2396
+msgid ""
+"When configuring a VLAN, a couple pieces of information must be known. "
+"First, which network interface? Second, what is the VLAN tag?"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2398
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2402
+#, no-wrap
+msgid "# ifconfig em0.5 create vlan 5 vlandev em0 inet 192.168.20.20/24\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2407
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2411
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2416
+#, no-wrap
+msgid ""
+"vlans_em0=\"5\"\n"
+"ifconfig_em0_5=\"inet 192.168.20.20/24\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2419
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2423
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2425
+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 ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2429
+#, no-wrap
+msgid "# ifconfig em0.5 create vlan 5 vlandev em0 name cameras inet 192.168.20.20/24\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2432
+msgid "For an interface named `video`, use the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2436
+#, no-wrap
+msgid "# ifconfig video.5 create vlan 5 vlandev video name cameras inet 192.168.20.20/24\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2439
+msgid ""
+"To apply the changes at boot time, add the following lines to [.filename]#/"
+"etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/advanced-networking/_index.adoc:2445
+#, no-wrap
+msgid ""
+"vlans_video=\"cameras\"\n"
+"create_args_cameras=\"vlan 5\"\n"
+"ifconfig_cameras=\"inet 192.168.20.20/24\"\n"
+msgstr ""
diff --git a/documentation/content/en/books/handbook/audit/_index.adoc b/documentation/content/en/books/handbook/audit/_index.adoc
index ce045d5427..57669c6c04 100644
--- a/documentation/content/en/books/handbook/audit/_index.adoc
+++ b/documentation/content/en/books/handbook/audit/_index.adoc
@@ -1,13 +1,13 @@
---
-title: Chapter 17. Security Event Auditing
+title: Chapter 19. Security Event Auditing
part: Part III. System Administration
prev: books/handbook/mac
next: books/handbook/disks
description: FreeBSD security event auditing supports reliable, fine-grained, and configurable logging of a variety of security-relevant system events, including logins, configuration changes, and file and network access
tags: ["audit", "terms", "configuration", "guide", "audit trails"]
showBookMenu: true
-weight: 21
-path: "/books/handbook/"
+weight: 23
+path: "/books/handbook/audit/"
---
[[audit]]
@@ -18,7 +18,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 17
+:sectnumoffset: 19
:partnums:
:source-highlighter: rouge
:experimental:
diff --git a/documentation/content/en/books/handbook/audit/_index.po b/documentation/content/en/books/handbook/audit/_index.po
new file mode 100644
index 0000000000..cfcb9f5639
--- /dev/null
+++ b/documentation/content/en/books/handbook/audit/_index.po
@@ -0,0 +1,1212 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-07-15 16:41-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/audit/_index.adoc:1
+#, no-wrap
+msgid "FreeBSD security event auditing supports reliable, fine-grained, and configurable logging of a variety of security-relevant system events, including logins, configuration changes, and file and network access"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/audit/_index.adoc:1
+#, no-wrap
+msgid "Part III. System Administration"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/audit/_index.adoc:1
+#, no-wrap
+msgid "Chapter 19. Security Event Auditing"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/audit/_index.adoc:14
+#, no-wrap
+msgid "Security Event Auditing"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/audit/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:58
+msgid ""
+"The FreeBSD operating system includes support for security event auditing. "
+"Event auditing supports reliable, fine-grained, and configurable logging of "
+"a variety of security-relevant system events, including logins, "
+"configuration changes, and file and network access. These log records can "
+"be invaluable for live system monitoring, intrusion detection, and "
+"postmortem analysis. FreeBSD implements Sun(TM)'s published Basic Security "
+"Module (BSM) Application Programming Interface (API) and file format, and is "
+"interoperable with the Solaris(TM) and Mac OS(R) X audit implementations."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:61
+msgid ""
+"This chapter focuses on the installation and configuration of event "
+"auditing. It explains audit policies and provides an example audit "
+"configuration."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:63
+msgid "After reading this chapter, you will know:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:65
+msgid "What event auditing is and how it works."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:66
+msgid "How to configure event auditing on FreeBSD for users and processes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:67
+msgid ""
+"How to review the audit trail using the audit reduction and review tools."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:69
+msgid "Before reading this chapter, you should:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:71
+msgid ""
+"Understand UNIX(R) and FreeBSD basics (crossref:basics[basics,FreeBSD "
+"Basics])."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:72
+msgid ""
+"Be familiar with the basics of kernel configuration/compilation (crossref:"
+"kernelconfig[kernelconfig,Configuring the FreeBSD Kernel])."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:73
+msgid ""
+"Have some familiarity with security and how it pertains to FreeBSD (crossref:"
+"security[security,Security])."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/audit/_index.adoc:78
+msgid ""
+"The audit facility has some known limitations. Not all security-relevant "
+"system events are auditable and some login mechanisms, such as Xorg-based "
+"display managers and third-party daemons, do not properly configure auditing "
+"for user login sessions."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/audit/_index.adoc:83
+msgid ""
+"The security event auditing facility is able to generate very detailed logs "
+"of system activity. On a busy system, trail file data can be very large "
+"when configured for high detail, exceeding gigabytes a week in some "
+"configurations. Administrators should take into account the disk space "
+"requirements associated with high volume audit configurations. For example, "
+"it may be desirable to dedicate a file system to [.filename]#/var/audit# so "
+"that other file systems are not affected if the audit file system becomes "
+"full."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/audit/_index.adoc:86
+#, no-wrap
+msgid "Key Terms"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:89
+msgid "The following terms are related to security event auditing:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:91
+msgid ""
+"_event_: an auditable event is any event that can be logged using the audit "
+"subsystem. Examples of security-relevant events include the creation of a "
+"file, the building of a network connection, or a user logging in. Events are "
+"either \"attributable\", meaning that they can be traced to an authenticated "
+"user, or \"non-attributable\". Examples of non-attributable events are any "
+"events that occur before authentication in the login process, such as bad "
+"password attempts."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:92
+msgid ""
+"_class_: a named set of related events which are used in selection "
+"expressions. Commonly used classes of events include \"file creation\" (fc), "
+"\"exec\" (ex), and \"login_logout\" (lo)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:93
+msgid ""
+"_record_: an audit log entry describing a security event. Records contain a "
+"record event type, information on the subject (user) performing the action, "
+"date and time information, information on any objects or arguments, and a "
+"success or failure condition."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:94
+msgid ""
+"_trail_: a log file consisting of a series of audit records describing "
+"security events. Trails are in roughly chronological order with respect to "
+"the time events completed. Only authorized processes are allowed to commit "
+"records to the audit trail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:95
+msgid ""
+"_selection expression_: a string containing a list of prefixes and audit "
+"event class names used to match events."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:96
+msgid ""
+"_preselection_: the process by which the system identifies which events are "
+"of interest to the administrator. The preselection configuration uses a "
+"series of selection expressions to identify which classes of events to audit "
+"for which users, as well as global settings that apply to both authenticated "
+"and unauthenticated processes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:97
+msgid ""
+"_reduction_: the process by which records from existing audit trails are "
+"selected for preservation, printing, or analysis. Likewise, the process by "
+"which undesired audit records are removed from the audit trail. Using "
+"reduction, administrators can implement policies for the preservation of "
+"audit data. For example, detailed audit trails might be kept for one month, "
+"but after that, trails might be reduced in order to preserve only login "
+"information for archival purposes."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/audit/_index.adoc:99
+#, no-wrap
+msgid "Audit Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:103
+msgid ""
+"User space support for event auditing is installed as part of the base "
+"FreeBSD operating system. Kernel support is available in the [."
+"filename]#GENERIC# kernel by default, and man:auditd[8] can be enabled by "
+"adding the following line to [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/audit/_index.adoc:107
+#, no-wrap
+msgid "auditd_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:110
+msgid "Then, start the audit daemon:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/audit/_index.adoc:114
+#, no-wrap
+msgid "# service auditd start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:117
+msgid ""
+"Users who prefer to compile a custom kernel must include the following line "
+"in their custom kernel configuration file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/audit/_index.adoc:121
+#, no-wrap
+msgid "options\tAUDIT\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/audit/_index.adoc:123
+#, no-wrap
+msgid "Event Selection Expressions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:128
+msgid ""
+"Selection expressions are used in a number of places in the audit "
+"configuration to determine which events should be audited. Expressions "
+"contain a list of event classes to match. Selection expressions are "
+"evaluated from left to right, and two expressions are combined by appending "
+"one onto the other."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:130
+msgid "<<event-selection>> summarizes the default audit event classes:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/audit/_index.adoc:132
+#, no-wrap
+msgid "Default Audit Event Classes"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:136
+#, no-wrap
+msgid "Class Name"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:137
+#, no-wrap
+msgid "Description"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:139
+#: documentation/content/en/books/handbook/audit/_index.adoc:232
+#, no-wrap
+msgid "Action"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:140
+#: documentation/content/en/books/handbook/audit/_index.adoc:141
+#, no-wrap
+msgid "all"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:143
+#, no-wrap
+msgid "Match all event classes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:144
+#, no-wrap
+msgid "aa"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:145
+#, no-wrap
+msgid "authentication and authorization"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:148
+#, no-wrap
+msgid "ad"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:149
+#, no-wrap
+msgid "administrative"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:151
+#, no-wrap
+msgid "Administrative actions performed on the system as a whole."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:152
+#, no-wrap
+msgid "ap"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:153
+#, no-wrap
+msgid "application"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:155
+#, no-wrap
+msgid "Application defined action."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:156
+#, no-wrap
+msgid "cl"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:157
+#, no-wrap
+msgid "file close"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:159
+#, no-wrap
+msgid "Audit calls to the `close` system call."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:160
+#, no-wrap
+msgid "ex"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:161
+#, no-wrap
+msgid "exec"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:163
+#, no-wrap
+msgid "Audit program execution. Auditing of command line arguments and environmental variables is controlled via man:audit_control[5] using the `argv` and `envv` parameters to the `policy` setting."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:164
+#, no-wrap
+msgid "fa"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:165
+#, no-wrap
+msgid "file attribute access"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:167
+#, no-wrap
+msgid "Audit the access of object attributes such as man:stat[1] and man:pathconf[2]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:168
+#, no-wrap
+msgid "fc"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:169
+#, no-wrap
+msgid "file create"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:171
+#, no-wrap
+msgid "Audit events where a file is created as a result."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:172
+#, no-wrap
+msgid "fd"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:173
+#, no-wrap
+msgid "file delete"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:175
+#, no-wrap
+msgid "Audit events where file deletion occurs."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:176
+#, no-wrap
+msgid "fm"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:177
+#, no-wrap
+msgid "file attribute modify"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:179
+#, no-wrap
+msgid "Audit events where file attribute modification occurs, such as by man:chown[8], man:chflags[1], and man:flock[2]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:180
+#, no-wrap
+msgid "fr"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:181
+#, no-wrap
+msgid "file read"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:183
+#, no-wrap
+msgid "Audit events in which data is read or files are opened for reading."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:184
+#, no-wrap
+msgid "fw"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:185
+#, no-wrap
+msgid "file write"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:187
+#, no-wrap
+msgid "Audit events in which data is written or files are written or modified."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:188
+#, no-wrap
+msgid "io"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:189
+#, no-wrap
+msgid "ioctl"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:191
+#, no-wrap
+msgid "Audit use of the `ioctl` system call."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:192
+#, no-wrap
+msgid "ip"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:193
+#, no-wrap
+msgid "ipc"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:195
+#, no-wrap
+msgid "Audit various forms of Inter-Process Communication, including POSIX pipes and System V IPC operations."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:196
+#, no-wrap
+msgid "lo"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:197
+#, no-wrap
+msgid "login_logout"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:199
+#, no-wrap
+msgid "Audit man:login[1] and man:logout[1] events."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:200
+#, no-wrap
+msgid "na"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:201
+#, no-wrap
+msgid "non attributable"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:203
+#, no-wrap
+msgid "Audit non-attributable events."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:204
+#, no-wrap
+msgid "no"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:205
+#, no-wrap
+msgid "invalid class"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:207
+#, no-wrap
+msgid "Match no audit events."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:208
+#, no-wrap
+msgid "nt"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:209
+#, no-wrap
+msgid "network"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:211
+#, no-wrap
+msgid "Audit events related to network actions such as man:connect[2] and man:accept[2]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:212
+#, no-wrap
+msgid "ot"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:213
+#, no-wrap
+msgid "other"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:215
+#, no-wrap
+msgid "Audit miscellaneous events."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:216
+#, no-wrap
+msgid "pc"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:217
+#, no-wrap
+msgid "process"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:218
+#, no-wrap
+msgid "Audit process operations such as man:exec[3] and man:exit[3]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:221
+msgid ""
+"These audit event classes may be customized by modifying the [."
+"filename]#audit_class# and [.filename]#audit_event# configuration files."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:224
+msgid ""
+"Each audit event class may be combined with a prefix indicating whether "
+"successful/failed operations are matched, and whether the entry is adding or "
+"removing matching for the class and type. <<event-prefixes>> summarizes the "
+"available prefixes:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/audit/_index.adoc:226
+#, no-wrap
+msgid "Prefixes for Audit Event Classes"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:230
+#, no-wrap
+msgid "Prefix"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:233
+#, no-wrap
+msgid "+"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:235
+#, no-wrap
+msgid "Audit successful events in this class."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:236
+#, no-wrap
+msgid "-"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:238
+#, no-wrap
+msgid "Audit failed events in this class."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:239
+#, no-wrap
+msgid "^"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:241
+#, no-wrap
+msgid "Audit neither successful nor failed events in this class."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:242
+#, no-wrap
+msgid "^+"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:244
+#, no-wrap
+msgid "Do not audit successful events in this class."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:245
+#, no-wrap
+msgid "^-"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/audit/_index.adoc:246
+#, no-wrap
+msgid "Do not audit failed events in this class."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:249
+msgid ""
+"If no prefix is present, both successful and failed instances of the event "
+"will be audited."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:251
+msgid ""
+"The following example selection string selects both successful and failed "
+"login/logout events, but only successful execution events:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/audit/_index.adoc:255
+#, no-wrap
+msgid "lo,+ex\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/audit/_index.adoc:257
+#, no-wrap
+msgid "Configuration Files"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:260
+msgid ""
+"The following configuration files for security event auditing are found in [."
+"filename]#/etc/security#:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:262
+msgid ""
+"[.filename]#audit_class#: contains the definitions of the audit classes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:263
+msgid ""
+"[.filename]#audit_control#: controls aspects of the audit subsystem, such as "
+"default audit classes, minimum disk space to leave on the audit log volume, "
+"and maximum audit trail size."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:264
+msgid ""
+"[.filename]#audit_event#: textual names and descriptions of system audit "
+"events and a list of which classes each event is in."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:265
+msgid ""
+"[.filename]#audit_user#: user-specific audit requirements to be combined "
+"with the global defaults at login."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:266
+msgid ""
+"[.filename]#audit_warn#: a customizable shell script used by man:auditd[8] "
+"to generate warning messages in exceptional situations, such as when space "
+"for audit records is running low or when the audit trail file has been "
+"rotated."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/audit/_index.adoc:270
+msgid ""
+"Audit configuration files should be edited and maintained carefully, as "
+"errors in configuration may result in improper logging of events."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:274
+msgid ""
+"In most cases, administrators will only need to modify [."
+"filename]#audit_control# and [.filename]#audit_user#. The first file "
+"controls system-wide audit properties and policies and the second file may "
+"be used to fine-tune auditing by user."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/audit/_index.adoc:276
+#, no-wrap
+msgid "The [.filename]#audit_control# File"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:279
+msgid ""
+"A number of defaults for the audit subsystem are specified in [."
+"filename]#audit_control#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/audit/_index.adoc:290
+#, no-wrap
+msgid ""
+"dir:/var/audit\n"
+"dist:off\n"
+"flags:lo,aa\n"
+"minfree:5\n"
+"naflags:lo,aa\n"
+"policy:cnt,argv\n"
+"filesz:2M\n"
+"expire-after:10M\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:295
+msgid ""
+"The `dir` entry is used to set one or more directories where audit logs will "
+"be stored. If more than one directory entry appears, they will be used in "
+"order as they fill. It is common to configure audit so that audit logs are "
+"stored on a dedicated file system, in order to prevent interference between "
+"the audit subsystem and other subsystems if the file system fills."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:297
+msgid ""
+"If the `dist` field is set to `on` or `yes`, hard links will be created to "
+"all trail files in [.filename]#/var/audit/dist#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:300
+msgid ""
+"The `flags` field sets the system-wide default preselection mask for "
+"attributable events. In the example above, successful and failed login/"
+"logout events as well as authentication and authorization are audited for "
+"all users."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:302
+msgid ""
+"The `minfree` entry defines the minimum percentage of free space for the "
+"file system where the audit trail is stored."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:304
+msgid ""
+"The `naflags` entry specifies audit classes to be audited for non-attributed "
+"events, such as the login/logout process and authentication and "
+"authorization."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:308
+msgid ""
+"The `policy` entry specifies a comma-separated list of policy flags "
+"controlling various aspects of audit behavior. The `cnt` indicates that the "
+"system should continue running despite an auditing failure (this flag is "
+"highly recommended). The other flag, `argv`, causes command line arguments "
+"to the man:execve[2] system call to be audited as part of command execution."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:312
+msgid ""
+"The `filesz` entry specifies the maximum size for an audit trail before "
+"automatically terminating and rotating the trail file. A value of `0` "
+"disables automatic log rotation. If the requested file size is below the "
+"minimum of 512k, it will be ignored and a log message will be generated."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:314
+msgid ""
+"The `expire-after` field specifies when audit log files will expire and be "
+"removed."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/audit/_index.adoc:316
+#, no-wrap
+msgid "The [.filename]#audit_user# File"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:320
+msgid ""
+"The administrator can specify further audit requirements for specific users "
+"in [.filename]#audit_user#. Each line configures auditing for a user via "
+"two fields: the `alwaysaudit` field specifies a set of events that should "
+"always be audited for the user, and the `neveraudit` field specifies a set "
+"of events that should never be audited for the user."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:323
+msgid ""
+"The following example entries audit login/logout events and successful "
+"command execution for `root` and file creation and successful command "
+"execution for `www`. If used with the default [.filename]#audit_control#, "
+"the `lo` entry for `root` is redundant, and login/logout events will also be "
+"audited for `www`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/audit/_index.adoc:328
+#, no-wrap
+msgid ""
+"root:lo,+ex:no\n"
+"www:fc,+ex:no\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/audit/_index.adoc:331
+#, no-wrap
+msgid "Working with Audit Trails"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:337
+msgid ""
+"Since audit trails are stored in the BSM binary format, several built-in "
+"tools are available to modify or convert these trails to text. To convert "
+"trail files to a simple text format, use `praudit`. To reduce the audit "
+"trail file for analysis, archiving, or printing purposes, use "
+"`auditreduce`. This utility supports a variety of selection parameters, "
+"including event type, event class, user, date or time of the event, and the "
+"file path or object acted on."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:339
+msgid ""
+"For example, to dump the entire contents of a specified audit log in plain "
+"text:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/audit/_index.adoc:343
+#, no-wrap
+msgid "# praudit /var/audit/AUDITFILE\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:346
+msgid "Where _AUDITFILE_ is the audit log to dump."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:350
+msgid ""
+"Audit trails consist of a series of audit records made up of tokens, which "
+"`praudit` prints sequentially, one per line. Each token is of a specific "
+"type, such as `header` (an audit record header) or `path` (a file path from "
+"a name lookup). The following is an example of an `execve` event:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/audit/_index.adoc:360
+#, no-wrap
+msgid ""
+"header,133,10,execve(2),0,Mon Sep 25 15:58:03 2006, + 384 msec\n"
+"exec arg,finger,doug\n"
+"path,/usr/bin/finger\n"
+"attribute,555,root,wheel,90,24918,104944\n"
+"subject,robert,root,wheel,root,wheel,38439,38032,42086,128.232.9.100\n"
+"return,success,0\n"
+"trailer,133\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:369
+msgid ""
+"This audit represents a successful `execve` call, in which the command "
+"`finger doug` has been run. The `exec arg` token contains the processed "
+"command line presented by the shell to the kernel. The `path` token holds "
+"the path to the executable as looked up by the kernel. The `attribute` "
+"token describes the binary and includes the file mode. The `subject` token "
+"stores the audit user ID, effective user ID and group ID, real user ID and "
+"group ID, process ID, session ID, port ID, and login address. Notice that "
+"the audit user ID and real user ID differ as the user `robert` switched to "
+"the `root` account before running this command, but it is audited using the "
+"original authenticated user. The `return` token indicates the successful "
+"execution and the `trailer` concludes the record."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:371
+msgid ""
+"XML output format is also supported and can be selected by including `-x`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:374
+msgid ""
+"Since audit logs may be very large, a subset of records can be selected "
+"using `auditreduce`. This example selects all audit records produced for "
+"the user `trhodes` stored in [.filename]#AUDITFILE#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/audit/_index.adoc:378
+#, no-wrap
+msgid "# auditreduce -u trhodes /var/audit/AUDITFILE | praudit\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:384
+msgid ""
+"Members of the `audit` group have permission to read audit trails in [."
+"filename]#/var/audit#. By default, this group is empty, so only the `root` "
+"user can read audit trails. Users may be added to the `audit` group in "
+"order to delegate audit review rights. As the ability to track audit log "
+"contents provides significant insight into the behavior of users and "
+"processes, it is recommended that the delegation of audit review rights be "
+"performed with caution."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/audit/_index.adoc:385
+#, no-wrap
+msgid "Live Monitoring Using Audit Pipes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:391
+msgid ""
+"Audit pipes are cloning pseudo-devices which allow applications to tap the "
+"live audit record stream. This is primarily of interest to authors of "
+"intrusion detection and system monitoring applications. However, the audit "
+"pipe device is a convenient way for the administrator to allow live "
+"monitoring without running into problems with audit trail file ownership or "
+"log rotation interrupting the event stream. To track the live audit event "
+"stream:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/audit/_index.adoc:395
+#, no-wrap
+msgid "# praudit /dev/auditpipe\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:399
+msgid ""
+"By default, audit pipe device nodes are accessible only to the `root` user. "
+"To make them accessible to the members of the `audit` group, add a `devfs` "
+"rule to [.filename]#/etc/devfs.rules#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/audit/_index.adoc:403
+#, no-wrap
+msgid "add path 'auditpipe*' mode 0440 group audit\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:406
+msgid ""
+"See man:devfs.rules[5] for more information on configuring the devfs file "
+"system."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/audit/_index.adoc:412
+msgid ""
+"It is easy to produce audit event feedback cycles, in which the viewing of "
+"each audit event results in the generation of more audit events. For "
+"example, if all network I/O is audited, and `praudit` is run from an SSH "
+"session, a continuous stream of audit events will be generated at a high "
+"rate, as each event being printed will generate another event. For this "
+"reason, it is advisable to run `praudit` on an audit pipe device from "
+"sessions without fine-grained I/O auditing."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/audit/_index.adoc:414
+#, no-wrap
+msgid "Rotating and Compressing Audit Trail Files"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:421
+msgid ""
+"Audit trails are written to by the kernel and managed by the audit daemon, "
+"man:auditd[8]. Administrators should not attempt to use man:newsyslog."
+"conf[5] or other tools to directly rotate audit logs. Instead, `audit` "
+"should be used to shut down auditing, reconfigure the audit system, and "
+"perform log rotation. The following command causes the audit daemon to "
+"create a new audit log and signal the kernel to switch to using the new "
+"log. The old log will be terminated and renamed, at which point it may then "
+"be manipulated by the administrator:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/audit/_index.adoc:425
+#, no-wrap
+msgid "# audit -n\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:428
+msgid ""
+"If man:auditd[8] is not currently running, this command will fail and an "
+"error message will be produced."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:430
+msgid ""
+"Adding the following line to [.filename]#/etc/crontab# will schedule this "
+"rotation every twelve hours:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/audit/_index.adoc:434
+#, no-wrap
+msgid "0 */12 * * * root /usr/sbin/audit -n\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:437
+msgid "The change will take effect once [.filename]#/etc/crontab# is saved."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:439
+msgid ""
+"Automatic rotation of the audit trail file based on file size is possible "
+"using `filesz` in [.filename]#audit_control# as described in <<audit-"
+"auditcontrol>>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:443
+msgid ""
+"As audit trail files can become very large, it is often desirable to "
+"compress or otherwise archive trails once they have been closed by the audit "
+"daemon. The [.filename]#audit_warn# script can be used to perform "
+"customized operations for a variety of audit-related events, including the "
+"clean termination of audit trails when they are rotated. For example, the "
+"following may be added to [.filename]#/etc/security/audit_warn# to compress "
+"audit trails on close:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/audit/_index.adoc:452
+#, no-wrap
+msgid ""
+"#\n"
+"# Compress audit trail files on close.\n"
+"#\n"
+"if [ \"$1\" = closefile ]; then\n"
+" gzip -9 $2\n"
+"fi\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/audit/_index.adoc:456
+msgid ""
+"Other archiving activities might include copying trail files to a "
+"centralized server, deleting old trail files, or reducing the audit trail to "
+"remove unneeded records. This script will be run only when audit trail "
+"files are cleanly terminated. It will not be run on trails left "
+"unterminated following an improper shutdown."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/basics/_index.adoc b/documentation/content/en/books/handbook/basics/_index.adoc
index aa6583ca95..750ee1538a 100644
--- a/documentation/content/en/books/handbook/basics/_index.adoc
+++ b/documentation/content/en/books/handbook/basics/_index.adoc
@@ -7,7 +7,7 @@ description: Basic commands and functionality of the FreeBSD operating system
tags: ["basics", "virtual consoles", "users", "management", "permissions", "directory structure", "disk organization", "mounting", "processes", "daemons", "shell", "editor", "manual pages", "devices"]
showBookMenu: true
weight: 5
-path: "/books/handbook/"
+path: "/books/handbook/basics/"
---
[[basics]]
@@ -74,7 +74,7 @@ After reading this chapter, you will know:
Unless FreeBSD has been configured to automatically start a graphical environment during startup, the system will boot into a command line login prompt, as seen in this example:
-[source,shell]
+[.programlisting]
....
FreeBSD/amd64 (pc3.example.org) (ttyv0)
@@ -82,20 +82,20 @@ login:
....
The first line contains some information about the system.
-The `amd64` indicates that the system in this example is running a 64-bit version of FreeBSD.
-The hostname is `pc3.example.org`, and [.filename]#ttyv0# indicates that this is the "system console".
+The `amd64` indicates that FreeBSD is running on a 64-bit x86 system.
+The hostname is `pc3.example.org`, and `ttyv0` indicates that this is the "system console".
The second line is the login prompt.
Since FreeBSD is a multiuser system, it needs some way to distinguish between different users.
This is accomplished by requiring every user to log into the system before gaining access to the programs on the system.
-Every user has a unique name "username" and a personal "password".
+Every user has a unique "username" and a personal "password".
To log into the system console, type the username that was configured during system installation, as described in crossref:bsdinstall[bsdinstall-addusers,Add Users], and press kbd:[Enter].
Then enter the password associated with the username and press kbd:[Enter].
The password is _not echoed_ for security reasons.
Once the correct password is input, the message of the day (MOTD) will be displayed followed by a command prompt.
-Depending upon the shell that was selected when the user was created, this prompt will be a `#`, `$`, or `%` character.
+Depending upon the shell that was selected when the user was created, this prompt will be a `+#+`, `$`, or `%` character.
The prompt indicates that the user is now logged into the FreeBSD system console and ready to try the available commands.
[[consoles-virtual]]
@@ -110,7 +110,7 @@ Each virtual console has its own login prompt and shell and it is easy to switch
This essentially provides the command line equivalent of having several windows open at the same time in a graphical environment.
The key combinations kbd:[Alt+F1] through kbd:[Alt+F8] have been reserved by FreeBSD for switching between virtual consoles.
-Use kbd:[Alt+F1] to switch to the system console ([.filename]#ttyv0#), kbd:[Alt+F2] to access the first virtual console ([.filename]#ttyv1#), kbd:[Alt+F3] to access the second virtual console ([.filename]#ttyv2#), and so on.
+Use kbd:[Alt+F1] to switch to the system console (`ttyv0`), kbd:[Alt+F2] to access the first virtual console (`ttyv1`), kbd:[Alt+F3] to access the second virtual console (`ttyv2`), and so on.
When using Xorg as a graphical console, the combination becomes kbd:[Ctrl+Alt+F1] to return to a text-based virtual console.
When switching from one console to the next, FreeBSD manages the screen output.
@@ -119,7 +119,7 @@ The programs that are launched in one virtual console do not stop running when t
Refer to man:kbdcontrol[1], man:vidcontrol[1], man:atkbd[4], man:syscons[4], and man:vt[4] for a more technical description of the FreeBSD console and its keyboard drivers.
-In FreeBSD, the number of available virtual consoles is configured in this section of [.filename]#/etc/ttys#:
+In FreeBSD, the number of available virtual consoles is configured in this section of `/etc/ttys`:
[.programlisting]
....
@@ -137,10 +137,10 @@ ttyv7 "/usr/libexec/getty Pc" xterm on secure
ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure
....
-To disable a virtual console, put a comment symbol (`\#`) at the beginning of the line representing that virtual console.
-For example, to reduce the number of available virtual consoles from eight to four, put a `#` in front of the last four lines representing virtual consoles [.filename]#ttyv5# through [.filename]#ttyv8#.
-_Do not_ comment out the line for the system console [.filename]#ttyv0#.
-Note that the last virtual console ([.filename]#ttyv8#) is used to access the graphical environment if Xorg has been installed and configured as described in crossref:x11[x11,The X Window System].
+To disable a virtual console, put a comment symbol (`+#+`) at the beginning of the line representing that virtual console.
+For example, to reduce the number of available virtual consoles from eight to four, put a `+#+` in front of the last four lines representing virtual consoles `ttyv5` through `ttyv8`.
+_Do not_ comment out the line for the system console `ttyv0`.
+Note that the last virtual console (`ttyv8`) is used to access the graphical environment if Xorg has been installed and configured as described in crossref:x11[x11,The X Window System].
For a detailed description of every column in this file and the available options for the virtual consoles, refer to man:ttys[5].
@@ -154,7 +154,7 @@ While in single user mode, networking and other virtual consoles are not availab
However, full `root` access to the system is available, and by default, the `root` password is not needed.
For these reasons, physical access to the keyboard is needed to boot into this mode and determining who has physical access to the keyboard is something to consider when securing a FreeBSD system.
-The settings which control single user mode are found in this section of [.filename]#/etc/ttys#:
+The settings which control single user mode are found in this section of `/etc/ttys`:
[.programlisting]
....
@@ -202,7 +202,7 @@ To select a new video mode, specify the mode using man:vidcontrol[1] as the `roo
# vidcontrol MODE_279
....
-If the new video mode is acceptable, it can be permanently set on boot by adding it to [.filename]#/etc/rc.conf#:
+If the new video mode is acceptable, it can be permanently set on boot by adding it to `/etc/rc.conf`:
[.programlisting]
....
@@ -238,12 +238,6 @@ The reason for this is security; if all services ran as the superuser, they coul
Examples of system accounts are `daemon`, `operator`, `bind`, `news`, and `www`.
-[WARNING]
-====
-
-Care must be taken when using the operator group, as unintended superuser-like access privileges may be granted, including but not limited to shutdown, reboot, and access to all items in [.filename]#/dev# in the group.
-====
-
`nobody` is the generic unprivileged system account.
However, the more services that use `nobody`, the more files and processes that user will become associated with, and hence the more privileged that user becomes.
@@ -260,7 +254,7 @@ Every user account on a FreeBSD system has certain information associated with i
User name::
The user name is typed at the `login:` prompt.
-Each user must have a unique user name.
+Each user must have a unique user name.
There are a number of rules for creating valid user names which are documented in man:passwd[5].
It is recommended to use user names that consist of eight or fewer, all lower case characters in order to maintain backwards compatibility with applications.
@@ -268,7 +262,7 @@ Password::
Each account has an associated password.
User ID (UID)::
-The User ID (UID) is a number used to uniquely identify the user to the FreeBSD system.
+The User ID (UID) is a number used to uniquely identify the user to the FreeBSD system.
Commands that allow a user name to be specified will first convert it to the UID.
It is recommended to use a UID less than 65535, since higher values may cause compatibility issues with some software.
@@ -298,7 +292,7 @@ Similar to a comment, this information can contain spaces, uppercase characters,
Home directory::
The home directory is the full path to a directory on the system.
This is the user's starting directory when the user logs in.
-A common convention is to put all user home directories under [.filename]#/home/username# or [.filename]#/usr/home/username#.
+A common convention is to put all user home directories under `/home/username` or `/usr/home/username`.
Each user stores their personal files and subdirectories in their own home directory.
User shell::
@@ -355,7 +349,7 @@ See the manual page for each utility for more details and usage examples.
[[users-modifying-utilities]]
.Utilities for Managing User Accounts
-[cols="1,1", frame="none", options="header"]
+[cols="25h,~"]
|===
| Command
| Summary
@@ -374,14 +368,17 @@ See the manual page for each utility for more details and usage examples.
|man:pw[8]
|A powerful and flexible tool for modifying all aspects of user accounts.
+
+|man:bsdconfig[8]
+|A system configuration utility with account management support.
|===
[[users-adduser]]
-==== `adduser`
+==== Adding a user
The recommended program for adding new users is man:adduser[8].
-When a new user is added, this program automatically updates [.filename]#/etc/passwd# and [.filename]#/etc/group#.
-It also creates a home directory for the new user, copies in the default configuration files from [.filename]#/usr/share/skel#, and can optionally mail the new user a welcome message.
+When a new user is added, this program automatically updates `/etc/passwd` and `/etc/group`.
+It also creates a home directory for the new user, copies in the default configuration files from `/usr/share/skel`, and can optionally mail the new user a welcome message.
This utility must be run as the superuser.
The man:adduser[8] utility is interactive and walks through the steps for creating a new user account.
@@ -396,6 +393,12 @@ When finished, the utility will prompt to either create another user or to exit.
[source,shell]
....
# adduser
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
Username: jru
Full name: J. Random User
Uid (Leave empty for default):
@@ -424,7 +427,6 @@ OK? (yes/no): yes
adduser: INFO: Successfully added (jru) to the user database.
Add another user? (yes/no): no
Goodbye!
-#
....
====
@@ -434,20 +436,23 @@ Since the password is not echoed when typed, be careful to not mistype the passw
====
[[users-rmuser]]
-==== `rmuser`
+==== Removing a user
To completely remove a user from the system, run man:rmuser[8] as the superuser.
This command performs the following steps:
[.procedure]
+====
. Removes the user's man:crontab[1] entry, if one exists.
. Removes any man:at[1] jobs belonging to the user.
-. Kills all processes owned by the user.
+. Sends a SIGKILL signal to all processes owned by the user.
. Removes the user from the system's local password file.
-. Optionally removes the user's home directory, if it is owned by the user.
-. Removes the incoming mail files belonging to the user from [.filename]#/var/mail#.
-. Removes all files owned by the user from temporary file storage areas such as [.filename]#/tmp#.
-. Finally, removes the username from all groups to which it belongs in [.filename]#/etc/group#. If a group becomes empty and the group name is the same as the username, the group is removed. This complements the per-user unique groups created by man:adduser[8].
+. Removes the user's home directory (if it is owned by the user), including handling of symbolic links in the path to the actual home directory.
+. Removes the incoming mail files belonging to the user from `/var/mail`.
+. Removes all files owned by the user from `/tmp`, `/var/tmp`, and `/var/tmp/vi.recover`.
+. Removes the username from all groups to which it belongs in `/etc/group`. (If a group becomes empty and the group name is the same as the username, the group is removed; this complements man:adduser[8]'s per-user unique groups.)
+. Removes all message queues, shared memory segments and semaphores owned by the user.
+====
man:rmuser[8] cannot be used to remove superuser accounts since that is almost always an indication of massive destruction.
@@ -459,17 +464,23 @@ By default, an interactive mode is used, as shown in the following example.
[source,shell]
....
# rmuser jru
+
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
Matching password entry:
jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh
Is this the entry you wish to remove? y
Remove user's home directory (/home/jru)? y
Removing user (jru): mailspool home passwd.
-#
....
====
[[users-chpass]]
-==== `chpass`
+==== Change user information
Any user can use man:chpass[1] to change their default shell and personal information associated with their user account.
The superuser can use this utility to change additional account information for any user.
@@ -482,7 +493,7 @@ When the user exits from the editor, the user database is updated with the new i
This utility will prompt for the user's password when exiting the editor, unless the utility is run as the superuser.
====
-In <<users-modifying-chpass-su>>, the superuser has typed `chpass jru` and is now viewing the fields that can be changed for this user
+In <<users-modifying-chpass-su>>, the superuser has typed `chpass jru` and is now viewing the fields that can be changed for this user.
If `jru` runs this command instead, only the last six fields will be displayed and available for editing.
This is shown in <<users-modifying-chpass-ru>>.
@@ -492,7 +503,14 @@ This is shown in <<users-modifying-chpass-ru>>.
====
[source,shell]
....
-#Changing user database information for jru.
+# chpass
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
+# Changing user database information for jru.
Login: jru
Password: *
Uid [#]: 1001
@@ -534,7 +552,7 @@ How to configure NIS is covered in crossref:network-servers[network-servers,Netw
====
[[users-passwd]]
-==== `passwd`
+==== Change user password
Any user can easily change their password using man:passwd[1].
To prevent accidental or unauthorized changes, this command will prompt for the user's original password before a new password can be set:
@@ -545,6 +563,12 @@ To prevent accidental or unauthorized changes, this command will prompt for the
[source,shell]
....
% passwd
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
Changing local password for jru.
Old password:
New password:
@@ -564,6 +588,12 @@ This allows the password to be changed when a user cannot remember the original
[source,shell]
....
# passwd jru
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
Changing local password for jru.
New password:
Retype new password:
@@ -578,7 +608,7 @@ As with man:chpass[1], man:yppasswd[1] is a link to man:passwd[1], so NIS works
====
[[users-pw]]
-==== `pw`
+==== Create, remove, modify and display system users and groups
The man:pw[8] utility can create, remove, modify, and display users and groups.
It functions as a front end to the system user and group files.
@@ -591,15 +621,20 @@ A group is a list of users. A group is identified by its group name and GID.
In FreeBSD, the kernel uses the UID of a process, and the list of groups it belongs to, to determine what the process is allowed to do.
Most of the time, the GID of a user or process usually means the first group in the list.
-The group name to GID mapping is listed in [.filename]#/etc/group#.
+The group name to GID mapping is listed in `/etc/group`.
This is a plain text file with four colon-delimited fields.
The first field is the group name, the second is the encrypted password, the third the GID, and the fourth the comma-delimited list of members.
-For a more complete description of the syntax, refer to man:group[5].
+For a complete description of the syntax, refer to man:group[5].
-The superuser can modify [.filename]#/etc/group# using a text editor.
+The superuser can modify `/etc/group` using a text editor, although editing the group file using man:vigr[8] is preferred because it can catch some common mistakes.
Alternatively, man:pw[8] can be used to add and edit groups.
For example, to add a group called `teamtwo` and then confirm that it exists:
+[WARNING]
+====
+Care must be taken when using the operator group, as unintended superuser-like access privileges may be granted, including but not limited to shutdown, reboot, and access to all items in `/dev` in the group.
+====
+
.Adding a Group Using man:pw[8]
[example]
====
@@ -607,6 +642,12 @@ For example, to add a group called `teamtwo` and then confirm that it exists:
....
# pw groupadd teamtwo
# pw groupshow teamtwo
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
teamtwo:*:1100:
....
====
@@ -622,6 +663,12 @@ This command will add `jru` as a member of `teamtwo`.
....
# pw groupmod teamtwo -M jru
# pw groupshow teamtwo
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
teamtwo:*:1100:jru
....
====
@@ -629,7 +676,7 @@ teamtwo:*:1100:jru
The argument to `-M` is a comma-delimited list of users to be added to a new (empty) group or to replace the members of an existing group.
To the user, this group membership is different from (and in addition to) the user's primary group listed in the password file.
This means that the user will not show up as a member when using `groupshow` with man:pw[8], but will show up when the information is queried via man:id[1] or a similar tool.
-When man:pw[8] is used to add a user to a group, it only manipulates [.filename]#/etc/group# and does not attempt to read additional data from [.filename]#/etc/passwd#.
+When man:pw[8] is used to add a user to a group, it only manipulates `/etc/group` and does not attempt to read additional data from `/etc/passwd`.
.Adding a New Member to a Group Using man:pw[8]
[example]
@@ -638,6 +685,12 @@ When man:pw[8] is used to add a user to a group, it only manipulates [.filename]
....
# pw groupmod teamtwo -m db
# pw groupshow teamtwo
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
teamtwo:*:1100:jru,db
....
====
@@ -651,22 +704,28 @@ Unlike the previous example, these users are appended to the group and do not re
[source,shell]
....
% id jru
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
uid=1001(jru) gid=1001(jru) groups=1001(jru), 1100(teamtwo)
....
====
In this example, `jru` is a member of the groups `jru` and `teamtwo`.
-For more information about this command and the format of [.filename]#/etc/group#, refer to man:pw[8] and man:group[5].
+For more information about this command and the format of `/etc/group`, refer to man:pw[8] and man:group[5].
[[permissions]]
== Permissions
-In FreeBSD, every file and directory has an associated set of permissions and several utilities are available for viewing and modifying these permissions.
+In FreeBSD, every file and directory has an associated set of permissions and several utilities are available for viewing and modifying these permissions.
Understanding how permissions work is necessary to make sure that users are able to access the files that they need and are unable to improperly access the files used by the operating system or owned by other users.
This section discusses the traditional UNIX(R) permissions used in FreeBSD.
-For finer grained file system access control, refer to crossref:security[fs-acl,“Access Control Lists”].
+For finer-grained file system access control, refer to crossref:security[fs-acl,Access Control Lists].
In UNIX(R), basic permissions are assigned using three types of access: read, write, and execute.
These access types are used to determine file access to the file's owner, group, and others (everyone else).
@@ -717,19 +776,25 @@ When reading the "Directory Listing" column, a `-` is used to represent a permis
|`rwx`
|===
-Use the `-l` argument to man:ls[1] to view a long directory listing that includes a column of information about a file's permissions for the owner, group, and everyone else.
-For example, an `ls -l` in an arbitrary directory may show:
+Use the `-l` argument with man:ls[1] to view a long directory listing that includes a column of information about a file's permissions for the owner, group, and everyone else.
+For example, `ls -l` in an arbitrary directory may show:
[source,shell]
....
% ls -l
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
total 530
-rw-r--r-- 1 root wheel 512 Sep 5 12:31 myfile
-rw-r--r-- 1 root wheel 512 Sep 5 12:31 otherfile
-rw-r--r-- 1 root wheel 7680 Sep 5 12:31 email.txt
....
-The first (leftmost) character in the first column indicates whether this file is a regular file, a directory, a special character device, a socket, or any other special pseudo-file device.
+Focusing on the line for `myfile`, the first `(leftmost)` character indicates whether this file is a regular file, a directory, a special character device, a socket, or any other special pseudo-file device.
In this example, the `-` indicates a regular file.
The next three characters, `rw-` in this example, give the permissions for the owner of the file.
The next three characters, `r--`, give the permissions for the group that the file belongs to.
@@ -738,8 +803,8 @@ A dash means that the permission is turned off.
In this example, the permissions are set so the owner can read and write to the file, the group can read the file, and the rest of the world can only read the file.
According to the table above, the permissions for this file would be `644`, where each digit represents the three parts of the file's permission.
-How does the system control permissions on devices? FreeBSD treats most hardware devices as a file that programs can open, read, and write data to.
-These special device files are stored in [.filename]#/dev/#.
+How does the system control permissions on devices? FreeBSD treats most hardware devices as a file that programs can open, read, and write data to.
+These special device files are stored in `/dev/`.
Directories are also treated as files.
They have read, write, and execute permissions.
@@ -815,7 +880,7 @@ Symbolic permissions use the syntax of (who) (action) (permissions), where the f
|===
These values are used with man:chmod[1], but with letters instead of numbers.
-For example, the following command would block other users from accessing _FILE_:
+For example, the following command would block both members of the group associated with _FILE_ and all other users from accessing _FILE_:
[source,shell]
....
@@ -837,7 +902,7 @@ These flags add an additional level of security and control over files, but not
With file flags, even `root` can be prevented from removing or altering files.
File flags are modified using man:chflags[1].
-For example, to enable the system undeletable flag on the file [.filename]#file1#, issue the following command:
+For example, to enable the system undeletable flag on the file `file1`, issue the following command:
[source,shell]
....
@@ -867,7 +932,7 @@ Several file flags may only be added or removed by the `root` user.
In other cases, the file owner may set its file flags.
Refer to man:chflags[1] and man:chflags[2] for more information.
-=== The `setuid`, `setgid`, and `sticky` Permissions
+=== The setuid, setgid, and sticky Permissions
Other than the permissions already discussed, there are three other specific settings that all administrators should know about.
They are the `setuid`, `setgid`, and `sticky` permissions.
@@ -881,14 +946,21 @@ As an example, man:passwd[1] runs with the real user ID when a user changes thei
However, in order to update the password database, the command runs as the effective ID of the `root` user.
This allows users to change their passwords without seeing a `Permission Denied` error.
-The setuid permission may be set by prefixing a permission set with the number four (4) as shown in the following example:
+The setuid permission may be added symbolically by adding the `s` permission for the user as in the following example:
+
+[source,shell]
+....
+# chmod u+s suidexample.sh
+....
+
+The setuid permission may also be set by prefixing a permission set with the number four (4) as shown in the following example:
[source,shell]
....
# chmod 4755 suidexample.sh
....
-The permissions on [.filename]#suidexample.sh# now look like the following:
+The permissions on `suidexample.sh` now look like the following:
[.programlisting]
....
@@ -934,7 +1006,14 @@ Although man:passwd[1] is run as a normal user, it is using the effective UID of
The `setgid` permission performs the same function as the `setuid` permission; except that it alters the group settings.
When an application or utility executes with this setting, it will be granted the permissions based on the group that owns the file, not the user who started the process.
-To set the `setgid` permission on a file, provide man:chmod[1] with a leading two (2):
+To set the `setgid` permission on a file symbolically, add the `s` permission for the group with man:chmod[1]:
+
+[source,shell]
+....
+# chmod g+s sgidexample.sh
+....
+
+Alternatively, provide man:chmod[1] with a leading two (2):
[source,shell]
....
@@ -958,8 +1037,15 @@ The `setuid` and `setgid` permission bits may lower system security, by allowing
The third special permission, the `sticky bit`, can strengthen the security of a system.
When the `sticky bit` is set on a directory, it allows file deletion only by the file owner.
-This is useful to prevent file deletion in public directories, such as [.filename]#/tmp#, by users who do not own the file.
-To utilize this permission, prefix the permission set with a one (1):
+This is useful to prevent file deletion in public directories, such as `/tmp`, by users who do not own the file.
+To utilize this permission, add the `t` mode to the file:
+
+[source,shell]
+....
+# chmod +t /tmp
+....
+
+Alternatively, prefix the permission set with a one (1):
[source,shell]
....
@@ -983,134 +1069,128 @@ drwxrwxrwt 10 root wheel 512 Aug 31 01:49 tmp
The FreeBSD directory hierarchy is fundamental to obtaining an overall understanding of the system.
The most important directory is root or, "/".
-This directory is the first one mounted at boot time and it contains the base system necessary to prepare the operating system for multi-user operation.
+This directory is the first one mounted at boot time and it contains the base system necessary to prepare the operating system for multi-user operation.
The root directory also contains mount points for other file systems that are mounted during the transition to multi-user operation.
A mount point is a directory where additional file systems can be grafted onto a parent file system (usually the root file system).
This is further described in <<disk-organization>>.
-Standard mount points include [.filename]#/usr/#, [.filename]#/var/#, [.filename]#/tmp/#, [.filename]#/mnt/#, and [.filename]#/cdrom/#.
-These directories are usually referenced to entries in [.filename]#/etc/fstab#.
+Standard mount points include `/usr/`, `/var/`, `/tmp/`, `/mnt/`, and `/cdrom/`.
+These directories are usually referenced to entries in `/etc/fstab`.
This file is a table of various file systems and mount points and is read by the system.
-Most of the file systems in [.filename]#/etc/fstab# are mounted automatically at boot time from the script man:rc[8] unless their entry includes `noauto`.
+Most of the file systems in `/etc/fstab` are mounted automatically at boot time from the script man:rc[8] unless their entry includes `noauto`.
Details can be found in <<disks-fstab>>.
A complete description of the file system hierarchy is available in man:hier[7].
The following table provides a brief overview of the most common directories.
-[.informaltable]
-[cols="1,1", frame="none", options="header"]
+[cols="25h,~"]
|===
| Directory
| Description
-|[.filename]#/#
+|`/`
|Root directory of the file system.
-|[.filename]#/bin/#
+|`/bin/`
|User utilities fundamental to both single-user and multi-user environments.
-|[.filename]#/boot/#
+|`/boot/`
|Programs and configuration files used during operating system bootstrap.
-|[.filename]#/boot/defaults/#
+|`/boot/defaults/`
|Default boot configuration files. Refer to man:loader.conf[5] for details.
-|[.filename]#/dev/#
-|Device nodes. Refer to man:intro[4] for details.
+|`/dev/`
+|Device special files managed by man:devfs[5]
-|[.filename]#/etc/#
+|`/etc/`
|System configuration files and scripts.
-|[.filename]#/etc/defaults/#
+|`/etc/defaults/`
|Default system configuration files. Refer to man:rc[8] for details.
-|[.filename]#/etc/mail/#
-|Configuration files for mail transport agents such as man:sendmail[8].
-
-|[.filename]#/etc/periodic/#
+|`/etc/periodic/`
|Scripts that run daily, weekly, and monthly, via man:cron[8]. Refer to man:periodic[8] for details.
-|[.filename]#/etc/ppp/#
-|man:ppp[8] configuration files.
+|`/lib/`
+|Critical system libraries needed for binaries in `/bin` and `/sbin`
+
+|`/libexec/`
+|Critical system files
-|[.filename]#/mnt/#
+|`/media/`
+|Contains subdirectories to be used as mount points for removable media such as CDs, USB drives, and floppy disks
+
+|`/mnt/`
|Empty directory commonly used by system administrators as a temporary mount point.
-|[.filename]#/proc/#
+|`/net/`
+|Automounted NFS shares; see man:auto_master[5]
+
+|`/proc/`
|Process file system. Refer to man:procfs[5], man:mount_procfs[8] for details.
-|[.filename]#/rescue/#
+|`/rescue/`
|Statically linked programs for emergency recovery as described in man:rescue[8].
-|[.filename]#/root/#
+|`/root/`
|Home directory for the `root` account.
-|[.filename]#/sbin/#
+|`/sbin/`
|System programs and administration utilities fundamental to both single-user and multi-user environments.
-|[.filename]#/tmp/#
-|Temporary files which are usually _not_ preserved across a system reboot. A memory-based file system is often mounted at [.filename]#/tmp#. This can be automated using the tmpmfs-related variables of man:rc.conf[5] or with an entry in [.filename]#/etc/fstab#; refer to man:mdmfs[8] for details.
+|`/tmp/`
+|Temporary files which are usually _not_ preserved across a system reboot. A memory-based file system is often mounted at `/tmp`. This can be automated using the tmpmfs-related variables of man:rc.conf[5] or with an entry in `/etc/fstab`; refer to man:mdmfs[8] for details.
-|[.filename]#/usr/#
+|`/usr/`
|The majority of user utilities and applications.
-|[.filename]#/usr/bin/#
+|`/usr/bin/`
|Common utilities, programming tools, and applications.
-|[.filename]#/usr/include/#
+|`/usr/include/`
|Standard C include files.
-|[.filename]#/usr/lib/#
+|`/usr/lib/`
|Archive libraries.
-|[.filename]#/usr/libdata/#
+|`/usr/libdata/`
|Miscellaneous utility data files.
-|[.filename]#/usr/libexec/#
+|`/usr/libexec/`
|System daemons and system utilities executed by other programs.
-|[.filename]#/usr/local/#
-|Local executables and libraries. Also used as the default destination for the FreeBSD ports framework. Within [.filename]#/usr/local#, the general layout sketched out by man:hier[7] for [.filename]#/usr# should be used. Exceptions are the man directory, which is directly under [.filename]#/usr/local# rather than under [.filename]#/usr/local/share#, and the ports documentation is in [.filename]#share/doc/port#.
+|`/usr/local/`
+|Local executables and libraries. Also used as the default destination for the FreeBSD ports framework. Within `/usr/local`, the general layout sketched out by man:hier[7] for `/usr` should be used. Exceptions are the man directory, which is directly under `/usr/local` rather than under `/usr/local/share`, and the ports documentation is in `share/doc/port`.
-|[.filename]#/usr/obj/#
-|Architecture-specific target tree produced by building the [.filename]#/usr/src# tree.
-
-|[.filename]#/usr/ports/#
+|`/usr/ports/`
|The FreeBSD Ports Collection (optional).
-|[.filename]#/usr/sbin/#
+|`/usr/sbin/`
|System daemons and system utilities executed by users.
-|[.filename]#/usr/share/#
+|`/usr/share/`
|Architecture-independent files.
-|[.filename]#/usr/src/#
+|`/usr/src/`
|BSD and/or local source files.
-|[.filename]#/var/#
-|Multi-purpose log, temporary, transient, and spool files. A memory-based file system is sometimes mounted at [.filename]#/var#. This can be automated using the varmfs-related variables in man:rc.conf[5] or with an entry in [.filename]#/etc/fstab#; refer to man:mdmfs[8] for details.
+|`/var/`
+|Multi-purpose log, temporary, transient, and spool files.
-|[.filename]#/var/log/#
+|`/var/log/`
|Miscellaneous system log files.
-|[.filename]#/var/mail/#
-|User mailbox files.
-
-|[.filename]#/var/spool/#
-|Miscellaneous printer and mail system spooling directories.
-
-|[.filename]#/var/tmp/#
-|Temporary files which are usually preserved across a system reboot, unless [.filename]#/var# is a memory-based file system.
+|`/var/tmp/`
+|Temporary files which are usually preserved across a system reboot.
-|[.filename]#/var/yp/#
-|NIS maps.
|===
[[disk-organization]]
== Disk Organization
The smallest unit of organization that FreeBSD uses to find files is the filename.
-Filenames are case-sensitive, which means that [.filename]#readme.txt# and [.filename]#README.TXT# are two separate files.
+Filenames are case-sensitive, which means that `readme.txt` and `README.TXT` are two separate files.
FreeBSD does not use the extension of a file to determine whether the file is a program, document, or some other form of data.
Files are stored in directories.
@@ -1118,10 +1198,13 @@ A directory may contain no files, or it may contain many hundreds of files.
A directory can also contain other directories, allowing a hierarchy of directories within one another in order to organize data.
Files and directories are referenced by giving the file or directory name, followed by a forward slash, `/`, followed by any other directory names that are necessary.
-For example, if the directory [.filename]#foo# contains a directory [.filename]#bar# which contains the file [.filename]#readme.txt#, the full name, or _path_, to the file is [.filename]#foo/bar/readme.txt#.
+For example, if the directory `foo` contains a directory `bar` which contains the file `readme.txt`, the full name, or _path_, to the file is `foo/bar/readme.txt`.
Note that this is different from Windows(R) which uses `\` to separate file and directory names.
FreeBSD does not use drive letters, or other drive names in the path.
-For example, one would not type [.filename]#c:\foo\bar\readme.txt# on FreeBSD.
+For example, one would not type `c:\foo\bar\readme.txt` on FreeBSD.
+
+[[disks-file-systems]]
+=== File systems
Directories and files are stored in a file system.
Each file system contains exactly one directory at the very top level, called the _root directory_ for that file system.
@@ -1137,37 +1220,37 @@ Call `A` the root file system.
If man:ls[1] is used to view the contents of this directory, it will show two subdirectories, `A1` and `A2`.
The directory tree looks like this:
-image::example-dir1.png[]
+image::example-dir1.png[Directory tree with the root directory and two subdirectories, A1 and A2]
A file system must be mounted on to a directory in another file system.
When mounting file system `B` on to the directory `A1`, the root directory of `B` replaces `A1`, and the directories in `B` appear accordingly:
-image::example-dir2.png[]
+image::example-dir2.png[Directory tree with the root directory and two subdirectories, A1 and A2. And more subdirectories, B1 and B2 hanging from A1]
-Any files that are in the `B1` or `B2` directories can be reached with the path [.filename]#/A1/B1# or [.filename]#/A1/B2# as necessary.
-Any files that were in [.filename]#/A1# have been temporarily hidden.
+Any files that are in the `B1` or `B2` directories can be reached with the path `/A1/B1` or `/A1/B2` as necessary.
+Any files that were in `/A1` have been temporarily hidden.
They will reappear if `B` is _unmounted_ from `A`.
If `B` had been mounted on `A2` then the diagram would look like this:
-image::example-dir3.png[]
+image::example-dir3.png[Directory tree with the root directory and two subdirectories, A1 and A2. And more subdirectories, B1 and B2 hanging from A2]
-and the paths would be [.filename]#/A2/B1# and [.filename]#/A2/B2# respectively.
+and the paths would be `/A2/B1` and `/A2/B2` respectively.
File systems can be mounted on top of one another.
Continuing the last example, the `C` file system could be mounted on top of the `B1` directory in the `B` file system, leading to this arrangement:
-image::example-dir4.png[]
+image::example-dir4.png[A complex directory tree. With different subdirectories hanging from root.]
Or `C` could be mounted directly on to the `A` file system, under the `A1` directory:
-image::example-dir5.png[]
+image::example-dir5.png[A complex directory tree. With different subdirectories hanging from root.]
It is entirely possible to have one large root file system, and not need to create any others.
There are some drawbacks to this approach, and one advantage.
.Benefits of Multiple File Systems
-* Different file systems can have different _mount options_. For example, the root file system can be mounted read-only, making it impossible for users to inadvertently delete or edit a critical file. Separating user-writable file systems, such as [.filename]#/home#, from other file systems allows them to be mounted _nosuid_. This option prevents the _suid_/_guid_ bits on executables stored on the file system from taking effect, possibly improving security.
+* Different file systems can have different _mount options_. For example, the root file system can be mounted read-only, making it impossible for users to inadvertently delete or edit a critical file. Separating user-writable file systems, such as `/home`, from other file systems allows them to be mounted _nosuid_. This option prevents the _suid_/_guid_ bits on executables stored on the file system from taking effect, possibly improving security.
* FreeBSD automatically optimizes the layout of files on a file system, depending on how the file system is being used. So a file system that contains many small files that are written frequently will have a different optimization to one that contains fewer, larger files. By having one big file system this optimization breaks down.
* FreeBSD's file systems are robust if power is lost. However, a power loss at a critical point could still damage the structure of the file system. By splitting data over multiple file systems it is more likely that the system will still come up, making it easier to restore from backup as necessary.
@@ -1177,21 +1260,42 @@ There are some drawbacks to this approach, and one advantage.
[IMPORTANT]
====
FreeBSD features the man:growfs[8] command, which makes it possible to increase the size of file system on the fly, removing this limitation.
+A file system can only be expanded into free space in the partition in which it resides.
+If there is space after the partition, the partition can be expanded with man:gpart[8].
+If the partition is the last one on a virtual disk, and the disk is expanded, the partition can then be expanded.
====
-File systems are contained in partitions.
-This does not have the same meaning as the common usage of the term partition (for example, MS-DOS(R) partition), because of FreeBSD's UNIX(R) heritage.
-Each partition is identified by a letter from `a` through to `h`.
-Each partition can contain only one file system, which means that file systems are often described by either their typical mount point in the file system hierarchy, or the letter of the partition they are contained in.
+[[disks-partitions]]
+=== Disk partitions
+
+File systems are contained in _partitions_.
+Disks are divided into partitions using one of several partitioning schemes;
+see <<bsdinstall-part-manual>>.
+The newer scheme is GPT; older BIOS-based computers use MBR.
+GPT supports division of a disk into partitions with a size, offset, and type.
+It supports a large number of partitions and partition types, and is recommended whenever its use is possible.
+GPT partitions use the disk name with a suffix, where the suffix is `p1` for the first partition, `p2` for the second, and so on.
+MBR, however, supports only a small number of partitions.
+The MBR partitions are known in FreeBSD as `slices`.
+Slices may be used for different operating systems.
+FreeBSD slices are subdivided into partitions using BSD labels (see man:bsdlabel[8]).
+
+Slice numbers follow the device name, prefixed with an `s`, starting at 1.
+So "da0__s1__" is the first slice on the first SCSI drive.
+There can only be four physical slices on a disk, but there can be logical slices inside physical slices of the appropriate type.
+These extended slices are numbered starting at 5, so "ada0__s5__" is the first extended slice on the first SATA disk.
+These devices are used by file systems that expect to occupy a slice.
+
+Each GPT or BSD partition can contain only one file system, which means that file systems are often described by either their typical mount point in the file system hierarchy, or the name of the partition they are contained in.
FreeBSD also uses disk space for _swap space_ to provide _virtual memory_.
This allows your computer to behave as though it has much more memory than it actually does.
When FreeBSD runs out of memory, it moves some of the data that is not currently being used to the swap space, and moves it back in (moving something else out) when it needs it.
+This is called _paging_.
-Some partitions have certain conventions associated with them.
+Some BSD partitions have certain conventions associated with them.
-[.informaltable]
-[cols="1,1", frame="none", options="header"]
+[cols="25h,~"]
|===
| Partition
| Convention
@@ -1209,30 +1313,25 @@ Some partitions have certain conventions associated with them.
|Partition `d` used to have a special meaning associated with it, although that is now gone and `d` may work as any normal partition.
|===
-Disks in FreeBSD are divided into slices, referred to in Windows(R) as partitions, which are numbered from 1 to 4.
-These are then divided into partitions, which contain file systems, and are labeled using letters.
-
-Slice numbers follow the device name, prefixed with an `s`, starting at 1.
-So "da0__s1__" is the first slice on the first SCSI drive.
-There can only be four physical slices on a disk, but there can be logical slices inside physical slices of the appropriate type.
-These extended slices are numbered starting at 5, so "ada0__s5__" is the first extended slice on the first SATA disk.
-These devices are used by file systems that expect to occupy a slice.
-
-Slices, "dangerously dedicated" physical drives, and other drives contain _partitions_, which are represented as letters from `a` to `h`.
+Slices and "dangerously dedicated" physical drives contain BSD partitions, which are represented as letters from `a` to `h`.
This letter is appended to the device name, so "da0__a__" is the `a` partition on the first `da` drive, which is "dangerously dedicated".
"ada1s3__e__" is the fifth partition in the third slice of the second SATA disk drive.
Finally, each disk on the system is identified.
A disk name starts with a code that indicates the type of disk, and then a number, indicating which disk it is.
-Unlike slices, disk numbering starts at 0.
+Unlike partitions and slices, disk numbering starts at 0.
Common codes are listed in <<disks-naming>>.
-When referring to a partition, include the disk name, `s`, the slice number, and then the partition letter.
+When referring to a partition in a slice, include the disk name, `s`, the slice number, and then the partition letter.
Examples are shown in <<basics-disk-slice-part>>.
+GPT partitions include the disk name, `p`, and then the partition number.
-<<basics-concept-disk-model>> shows a conceptual model of a disk layout.
+<<basics-concept-disk-model>> shows a conceptual model of a disk layout using MBR slices.
-When installing FreeBSD, configure the disk slices, create partitions within the slice to be used for FreeBSD, create a file system or swap space in each partition, and decide where each file system will be mounted.
+When installing FreeBSD, configure the disk slices if using MBR, and create partitions within the slice to be used for FreeBSD.
+If using GPT, configure partitions for each file system.
+In either case, create a file system or swap space in each partition, and decide where each file system will be mounted.
+See man:gpart[8] for information on manipulating partitions.
[[disks-naming]]
.Disk Device Names
@@ -1253,7 +1352,7 @@ When installing FreeBSD, configure the disk slices, create partitions within the
|SATA and IDE CD-ROM drives
|`cd`
-|SCSICD-ROM drives
+|SCSI CD-ROM drives
|`cd`
|Floppy drives
@@ -1290,31 +1389,31 @@ When installing FreeBSD, configure the disk slices, create partitions within the
====
This diagram shows FreeBSD's view of the first SATA disk attached to the system.
Assume that the disk is 250 GB in size, and contains an 80 GB slice and a 170 GB slice (MS-DOS(R) partitions).
-The first slice contains a Windows(R) NTFS file system, [.filename]#C:#, and the second slice contains a FreeBSD installation.
+The first slice contains a Windows(R) NTFS file system, `C:`, and the second slice contains a FreeBSD installation.
This example FreeBSD installation has four data partitions and a swap partition.
The four partitions each hold a file system.
-Partition `a` is used for the root file system, `d` for [.filename]#/var/#, `e` for [.filename]#/tmp/#, and `f` for [.filename]#/usr/#.
+Partition `a` is used for the root file system, `d` for `/var/`, `e` for `/tmp/`, and `f` for `/usr/`.
Partition letter `c` refers to the entire slice, and so is not used for ordinary partitions.
-image::disk-layout.png[]
+image::disk-layout.png[Layout of a shared drive between Windows and FreeBSD]
====
[[mount-unmount]]
== Mounting and Unmounting File Systems
-The file system is best visualized as a tree, rooted, as it were, at [.filename]#/#. [.filename]#/dev#, [.filename]#/usr#, and the other directories in the root directory are branches, which may have their own branches, such as [.filename]#/usr/local#, and so on.
+The file system is best visualized as a tree, rooted, as it were, at `/`. `/dev`, `/usr`, and the other directories in the root directory are branches, which may have their own branches, such as `/usr/local`, and so on.
There are various reasons to house some of these directories on separate file systems.
-[.filename]#/var# contains the directories [.filename]#log/#, [.filename]#spool/#, and various types of temporary files, and as such, may get filled up.
-Filling up the root file system is not a good idea, so splitting [.filename]#/var# from [.filename]#/# is often favorable.
+`/var` contains the directories `log/`, `spool/`, and various types of temporary files, and as such, may get filled up.
+Filling up the root file system is not a good idea, so splitting `/var` from `/` is often favorable.
Another common reason to contain certain directory trees on other file systems is if they are to be housed on separate physical disks, or are separate virtual disks, such as Network File System mounts, described in crossref:network-servers[network-nfs,“Network File System (NFS)”], or CDROM drives.
[[disks-fstab]]
-=== The [.filename]#fstab# File
+=== The fstab File
-During the boot process (crossref:boot[boot,The FreeBSD Booting Process]), file systems listed in [.filename]#/etc/fstab# are automatically mounted except for the entries containing `noauto`.
+During the boot process (crossref:boot[boot,The FreeBSD Booting Process]), file systems listed in `/etc/fstab` are automatically mounted except for the entries containing `noauto`.
This file contains entries in the following format:
[.programlisting]
@@ -1342,13 +1441,13 @@ Used by man:dump[8] to determine which file systems require dumping.
If the field is missing, a value of zero is assumed.
`passno`::
-Determines the order in which file systems should be checked.
+Determines the order in which UFS file systems should be checked by man:fsck[8] after a reboot.
File systems that should be skipped should have their `passno` set to zero.
The root file system needs to be checked before everything else and should have its `passno` set to one.
The other file systems should be set to values greater than one.
If more than one file system has the same `passno`, man:fsck[8] will attempt to check file systems in parallel if possible.
-Refer to man:fstab[5] for more information on the format of [.filename]#/etc/fstab# and its options.
+Refer to man:fstab[5] for more information on the format of `/etc/fstab` and its options.
[[disks-mount]]
=== Using man:mount[8]
@@ -1364,11 +1463,14 @@ The most basic syntax is as follows:
....
====
-This command provides many options which are described in man:mount[8], The most commonly used options include:
+A file system listed in `/etc/fstab` can also be mounted by providing just the mountpoint.
+
+This command provides many options which are described in man:mount[8].
+The most commonly used options include:
.Mount Options
`-a`::
-Mount all the file systems listed in [.filename]#/etc/fstab#, except those marked as "noauto", excluded by the `-t` flag, or those that are already mounted.
+Mount all the file systems listed in `/etc/fstab`, except those marked as "noauto", excluded by the `-t` flag, or those that are already mounted.
`-d`::
Do everything except for the actual mount system call.
@@ -1450,6 +1552,12 @@ For example:
[source,shell]
....
% ps
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
PID TT STAT TIME COMMAND
8203 0 Ss 0:00.59 /bin/csh
8895 0 R+ 0:00.00 ps
@@ -1472,6 +1580,12 @@ The output from man:top[1] is similar:
[source,shell]
....
% top
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
last pid: 9609; load averages: 0.56, 0.45, 0.36 up 0+00:20:03 10:21:46
107 processes: 2 running, 104 sleeping, 1 zombie
CPU: 6.2% user, 0.1% nice, 8.2% system, 0.4% interrupt, 85.1% idle
@@ -1533,46 +1647,6 @@ Restarting `httpd` would result in a brief outage period on the web server.
Instead, send the daemon the `SIGHUP` signal.
Be aware that different daemons will have different behavior, so refer to the documentation for the daemon to determine if `SIGHUP` will achieve the desired results.
-[.procedure]
-****
-.Procedure: Sending a Signal to a Process
-
-This example shows how to send a signal to man:inetd[8].
-The man:inetd[8] configuration file is [.filename]#/etc/inetd.conf#, and man:inetd[8] will re-read this configuration file when it is sent a `SIGHUP`.
-
-. Find the PID of the process to send the signal to using man:pgrep[1]. In this example, the PID for man:inetd[8] is 198:
-+
-[source,shell]
-....
-% pgrep -l inetd
-198 inetd
-....
-+
-. Use man:kill[1] to send the signal. As man:inetd[8] is owned by `root`, use man:su[1] to become `root` first.
-+
-[source,shell]
-....
-% su
-Password:
-# /bin/kill -s HUP 198
-....
-
-Like most UNIX(R) commands, man:kill[1] will not print any output if it is successful.
-If a signal is sent to a process not owned by that user, the message `kill: _PID_: Operation not permitted` will be displayed.
-Mistyping the PID will either send the signal to the wrong process, which could have negative results, or will send the signal to a PID that is not currently in use, resulting in the error `kill: _PID_: No such process`.
-
-[NOTE]
-====
-*Why Use `/bin/kill`?:* +
-
-Many shells provide `kill` as a built in command, meaning that the shell will send the signal directly, rather than running [.filename]#/bin/kill#.
-Be aware that different shells have a different syntax for specifying the name of the signal to send.
-Rather than try to learn all of them, it can be simpler to specify `/bin/kill`.
-====
-****
-
-When sending other signals, substitute `TERM` or `KILL` with the name of the signal.
-
[IMPORTANT]
====
Killing a random process on the system is a bad idea.
@@ -1596,12 +1670,12 @@ A Linux(R) user might prefer `bash`.
Each shell has unique properties that may or may not work with a user's preferred working environment, which is why there is a choice of which shell to use.
One common shell feature is filename completion.
-After a user types the first few letters of a command or filename and presses kbd:[Tab], the shell completes the rest of the command or filename.
-Consider two files called [.filename]#foobar# and [.filename]#football#.
-To delete [.filename]#foobar#, the user might type `rm foo` and press kbd:[Tab] to complete the filename.
+After a user types the first few letters of a command or filename and presses kbd:[Tab], the shell completes the rest of the command or filename.
+Consider two files called `foobar` and `football`.
+To delete `foobar`, the user might type `rm foo` and press kbd:[Tab] to complete the filename.
But the shell only shows `rm foo`.
-It was unable to complete the filename because both [.filename]#foobar# and [.filename]#football# start with `foo`.
+It was unable to complete the filename because both `foobar` and `football` start with `foo`.
Some shells sound a beep or show all the choices if more than one name matches.
The user must then type more characters to identify the desired filename.
Typing a `t` and pressing kbd:[Tab] again is enough to let the shell determine which filename is desired and fill in the rest.
@@ -1614,7 +1688,7 @@ Note that the names of environment variables are always in uppercase.
[[shell-env-vars]]
.Common Environment Variables
-[cols="1,1", frame="none", options="header"]
+[cols="25h,~"]
|===
| Variable
| Description
@@ -1656,7 +1730,7 @@ Note that the names of environment variables are always in uppercase.
How to set an environment variable differs between shells.
In man:tcsh[1] and man:csh[1], use `setenv` to set environment variables.
In man:sh[1] and `bash`, use `export` to set the current environment variables.
-This example sets the default `EDITOR` to [.filename]#/usr/local/bin/emacs# for the man:tcsh[1] shell:
+This example sets the default `EDITOR` to `/usr/local/bin/emacs` for the man:tcsh[1] shell:
[source,shell]
....
@@ -1696,9 +1770,12 @@ For example, to change the shell to `bash`:
% chsh -s /usr/local/bin/bash
....
+Enter your password at the prompt and press kbd:[Return] to change your shell.
+Log off and log in again to start using the new shell.
+
[NOTE]
====
-The new shell _must_ be present in [.filename]#/etc/shells#.
+The new shell _must_ be present in `/etc/shells`.
If the shell was installed from the FreeBSD Ports Collection as described in crossref:ports[ports,Installing Applications: Packages and Ports], it should be automatically added to this file.
If it is missing, add it using this command, replacing the path with the path of the shell:
@@ -1723,7 +1800,7 @@ To capture the output of the man:ls[1] command, for example, into a file, redire
% ls > directory_listing.txt
....
-The directory contents will now be listed in [.filename]#directory_listing.txt#.
+The directory contents will now be listed in `directory_listing.txt`.
Some commands can be used to read input, such as man:sort[1].
To sort this listing, redirect the input:
@@ -1747,7 +1824,7 @@ Output could be a screen or paper in a printer.
And error would be anything that is used for diagnostic or error messages.
All three are considered I/O based file descriptors and sometimes considered streams.
-Through the use of these descriptors, the shell allows output and input to be passed around through various commands and redirected to or from a file.
+Through the use of these descriptors, the shell allows output and input to be passed around through various commands and redirected to or from a file.
Another method of redirection is the pipe operator.
The UNIX(R) pipe operator, "|" allows the output of one command to be directly passed or directed to another program.
@@ -1758,7 +1835,7 @@ Basically, a pipe allows the standard output of a command to be passed as standa
% cat directory_listing.txt | sort | less
....
-In that example, the contents of [.filename]#directory_listing.txt# will be sorted and the output passed to man:less[1].
+In that example, the contents of `directory_listing.txt` will be sorted and the output passed to man:less[1].
This allows the user to scroll through the output at their own pace and prevent it from scrolling off the screen.
[[editors]]
@@ -1787,12 +1864,12 @@ To change the default editor, set the `EDITOR` environment variable as described
A device is a term used mostly for hardware-related activities in a system, including disks, printers, graphics cards, and keyboards.
When FreeBSD boots, the majority of the boot messages refer to devices being detected.
-A copy of the boot messages are saved to [.filename]#/var/run/dmesg.boot#.
+A copy of the boot messages is saved to `/var/run/dmesg.boot`.
Each device has a device name and number.
-For example, [.filename]#ada0# is the first SATA hard drive, while [.filename]#kbd0# represents the keyboard.
+For example, `ada0` is the first SATA hard drive, while `kbd0` represents the keyboard.
-Most devices in FreeBSD must be accessed through special files called device nodes, which are located in [.filename]#/dev#.
+Most devices in FreeBSD must be accessed through special files called device nodes, which are located in `/dev`.
[[basics-more-information]]
== Manual Pages
@@ -1849,7 +1926,7 @@ If the name of the manual page is unknown, use `man -k` to search for keywords i
This command displays a list of commands that have the keyword "mail" in their descriptions.
This is equivalent to using man:apropos[1].
-To read the descriptions for all of the commands in [.filename]#/usr/sbin#, type:
+To read the descriptions for all of the commands in `/usr/sbin`, type:
[source,shell]
....
diff --git a/documentation/content/en/books/handbook/basics/_index.po b/documentation/content/en/books/handbook/basics/_index.po
new file mode 100644
index 0000000000..e923eb383d
--- /dev/null
+++ b/documentation/content/en/books/handbook/basics/_index.po
@@ -0,0 +1,4545 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/basics/_index.adoc:1
+#, no-wrap
+msgid "Basic commands and functionality of the FreeBSD operating system"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/basics/_index.adoc:1
+#, no-wrap
+msgid "Part I. Getting Started"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/basics/_index.adoc:1
+#, no-wrap
+msgid "Chapter 3. FreeBSD Basics"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/basics/_index.adoc:14
+#, no-wrap
+msgid "FreeBSD Basics"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/basics/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:57
+msgid ""
+"This chapter covers the basic commands and functionality of the FreeBSD "
+"operating system. Much of this material is relevant for any UNIX(R)-like "
+"operating system. New FreeBSD users are encouraged to read through this "
+"chapter carefully."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:59
+msgid "After reading this chapter, you will know:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:61
+msgid "How to use and configure virtual consoles."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:62
+msgid "How to create and manage users and groups on FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:63
+msgid "How UNIX(R) file permissions and FreeBSD file flags work."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:64
+msgid "The default FreeBSD file system layout."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:65
+msgid "The FreeBSD disk organization."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:66
+msgid "How to mount and unmount file systems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:67
+msgid "What processes, daemons, and signals are."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:68
+msgid "What a shell is, and how to change the default login environment."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:69
+msgid "How to use basic text editors."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:70
+msgid "What devices and device nodes are."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:71
+msgid "How to read manual pages for more information."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/basics/_index.adoc:73
+#, no-wrap
+msgid "Virtual Consoles and Terminals"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:76
+msgid ""
+"Unless FreeBSD has been configured to automatically start a graphical "
+"environment during startup, the system will boot into a command line login "
+"prompt, as seen in this example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:80
+#, no-wrap
+msgid "FreeBSD/amd64 (pc3.example.org) (ttyv0)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:82
+#, no-wrap
+msgid "login:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:88
+msgid ""
+"The first line contains some information about the system. The `amd64` "
+"indicates that FreeBSD is running on a 64-bit x86 system. The hostname is "
+"`pc3.example.org`, and `ttyv0` indicates that this is the \"system "
+"console\". The second line is the login prompt."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:92
+msgid ""
+"Since FreeBSD is a multiuser system, it needs some way to distinguish "
+"between different users. This is accomplished by requiring every user to "
+"log into the system before gaining access to the programs on the system. "
+"Every user has a unique \"username\" and a personal \"password\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:96
+msgid ""
+"To log into the system console, type the username that was configured during "
+"system installation, as described in crossref:bsdinstall[bsdinstall-addusers,"
+"Add Users], and press kbd:[Enter]. Then enter the password associated with "
+"the username and press kbd:[Enter]. The password is _not echoed_ for "
+"security reasons."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:100
+msgid ""
+"Once the correct password is input, the message of the day (MOTD) will be "
+"displayed followed by a command prompt. Depending upon the shell that was "
+"selected when the user was created, this prompt will be a `+#+`, `$`, or `%` "
+"character. The prompt indicates that the user is now logged into the "
+"FreeBSD system console and ready to try the available commands."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/basics/_index.adoc:102
+#, no-wrap
+msgid "Virtual Consoles"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:107
+msgid ""
+"While the system console can be used to interact with the system, a user "
+"working from the command line at the keyboard of a FreeBSD system will "
+"typically instead log into a virtual console. This is because system "
+"messages are configured by default to display on the system console. These "
+"messages will appear over the command or file that the user is working on, "
+"making it difficult to concentrate on the work at hand."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:111
+msgid ""
+"By default, FreeBSD is configured to provide several virtual consoles for "
+"inputting commands. Each virtual console has its own login prompt and shell "
+"and it is easy to switch between virtual consoles. This essentially "
+"provides the command line equivalent of having several windows open at the "
+"same time in a graphical environment."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:115
+msgid ""
+"The key combinations kbd:[Alt+F1] through kbd:[Alt+F8] have been reserved by "
+"FreeBSD for switching between virtual consoles. Use kbd:[Alt+F1] to switch "
+"to the system console (`ttyv0`), kbd:[Alt+F2] to access the first virtual "
+"console (`ttyv1`), kbd:[Alt+F3] to access the second virtual console "
+"(`ttyv2`), and so on. When using Xorg as a graphical console, the "
+"combination becomes kbd:[Ctrl+Alt+F1] to return to a text-based virtual "
+"console."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:119
+msgid ""
+"When switching from one console to the next, FreeBSD manages the screen "
+"output. The result is an illusion of having multiple virtual screens and "
+"keyboards that can be used to type commands for FreeBSD to run. The "
+"programs that are launched in one virtual console do not stop running when "
+"the user switches to a different virtual console."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:121
+msgid ""
+"Refer to man:kbdcontrol[1], man:vidcontrol[1], man:atkbd[4], man:syscons[4], "
+"and man:vt[4] for a more technical description of the FreeBSD console and "
+"its keyboard drivers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:123
+msgid ""
+"In FreeBSD, the number of available virtual consoles is configured in this "
+"section of `/etc/ttys`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:138
+#, no-wrap
+msgid ""
+"# name getty type status comments\n"
+"#\n"
+"ttyv0 \"/usr/libexec/getty Pc\" xterm on secure\n"
+"# Virtual terminals\n"
+"ttyv1 \"/usr/libexec/getty Pc\" xterm on secure\n"
+"ttyv2 \"/usr/libexec/getty Pc\" xterm on secure\n"
+"ttyv3 \"/usr/libexec/getty Pc\" xterm on secure\n"
+"ttyv4 \"/usr/libexec/getty Pc\" xterm on secure\n"
+"ttyv5 \"/usr/libexec/getty Pc\" xterm on secure\n"
+"ttyv6 \"/usr/libexec/getty Pc\" xterm on secure\n"
+"ttyv7 \"/usr/libexec/getty Pc\" xterm on secure\n"
+"ttyv8 \"/usr/X11R6/bin/xdm -nodaemon\" xterm off secure\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:144
+msgid ""
+"To disable a virtual console, put a comment symbol (`+#+`) at the beginning "
+"of the line representing that virtual console. For example, to reduce the "
+"number of available virtual consoles from eight to four, put a `+#+` in "
+"front of the last four lines representing virtual consoles `ttyv5` through "
+"`ttyv8`. _Do not_ comment out the line for the system console `ttyv0`. "
+"Note that the last virtual console (`ttyv8`) is used to access the graphical "
+"environment if Xorg has been installed and configured as described in "
+"crossref:x11[x11,The X Window System]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:146
+msgid ""
+"For a detailed description of every column in this file and the available "
+"options for the virtual consoles, refer to man:ttys[5]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/basics/_index.adoc:148
+#, no-wrap
+msgid "Single User Mode"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:156
+msgid ""
+"The FreeBSD boot menu provides an option labelled as \"Boot Single User\". "
+"If this option is selected, the system will boot into a special mode known "
+"as \"single user mode\". This mode is typically used to repair a system "
+"that will not boot or to reset the `root` password when it is not known. "
+"While in single user mode, networking and other virtual consoles are not "
+"available. However, full `root` access to the system is available, and by "
+"default, the `root` password is not needed. For these reasons, physical "
+"access to the keyboard is needed to boot into this mode and determining who "
+"has physical access to the keyboard is something to consider when securing a "
+"FreeBSD system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:158
+msgid ""
+"The settings which control single user mode are found in this section of `/"
+"etc/ttys`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:166
+#, no-wrap
+msgid ""
+"# name getty type status comments\n"
+"#\n"
+"# If console is marked \"insecure\", then init will ask for the root password\n"
+"# when going to single-user mode.\n"
+"console none unknown off secure\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:172
+msgid ""
+"By default, the status is set to `secure`. This assumes that who has "
+"physical access to the keyboard is either not important or it is controlled "
+"by a physical security policy. If this setting is changed to `insecure`, "
+"the assumption is that the environment itself is insecure because anyone can "
+"access the keyboard. When this line is changed to `insecure`, FreeBSD will "
+"prompt for the `root` password when a user selects to boot into single user "
+"mode."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:176
+msgid ""
+"_Be careful when changing this setting to `insecure`!_ If the `root` "
+"password is forgotten, booting into single user mode is still possible, but "
+"may be difficult for someone who is not familiar with the FreeBSD booting "
+"process."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/basics/_index.adoc:179
+#, no-wrap
+msgid "Changing Console Video Modes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:183
+msgid ""
+"The FreeBSD console default video mode may be adjusted to 1024x768, "
+"1280x1024, or any other size supported by the graphics chip and monitor. To "
+"use a different video mode load the `VESA` module:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:187
+#, no-wrap
+msgid "# kldload vesa\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:191
+msgid ""
+"To determine which video modes are supported by the hardware, use man:"
+"vidcontrol[1]. To get a list of supported video modes issue the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:195
+#, no-wrap
+msgid "# vidcontrol -i mode\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:199
+msgid ""
+"The output of this command lists the video modes that are supported by the "
+"hardware. To select a new video mode, specify the mode using man:"
+"vidcontrol[1] as the `root` user:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:203
+#, no-wrap
+msgid "# vidcontrol MODE_279\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:206
+msgid ""
+"If the new video mode is acceptable, it can be permanently set on boot by "
+"adding it to `/etc/rc.conf`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:210
+#, no-wrap
+msgid "allscreens_flags=\"MODE_279\"\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/basics/_index.adoc:213
+#, no-wrap
+msgid "Users and Basic Account Management"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:218
+msgid ""
+"FreeBSD allows multiple users to use the computer at the same time. While "
+"only one user can sit in front of the screen and use the keyboard at any one "
+"time, any number of users can log in to the system through the network. To "
+"use the system, each user should have their own user account."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:220
+msgid "This chapter describes:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:222
+msgid "The different types of user accounts on a FreeBSD system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:223
+msgid "How to add, remove, and modify user accounts."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:224
+msgid ""
+"How to set limits to control the resources that users and groups are allowed "
+"to access."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:225
+msgid "How to create groups and add users as members of a group."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/basics/_index.adoc:227
+#, no-wrap
+msgid "Account Types"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:230
+msgid ""
+"Since all access to the FreeBSD system is achieved using accounts and all "
+"processes are run by users, user and account management is important."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:232
+msgid ""
+"There are three main types of accounts: system accounts, user accounts, and "
+"the superuser account."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/basics/_index.adoc:234
+#, no-wrap
+msgid "System Accounts"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:238
+msgid ""
+"System accounts are used to run services such as DNS, mail, and web "
+"servers. The reason for this is security; if all services ran as the "
+"superuser, they could act without restriction."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:240
+msgid ""
+"Examples of system accounts are `daemon`, `operator`, `bind`, `news`, and "
+"`www`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:243
+msgid ""
+"`nobody` is the generic unprivileged system account. However, the more "
+"services that use `nobody`, the more files and processes that user will "
+"become associated with, and hence the more privileged that user becomes."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/basics/_index.adoc:245
+#, no-wrap
+msgid "User Accounts"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:250
+msgid ""
+"User accounts are assigned to real people and are used to log in and use the "
+"system. Every person accessing the system should have a unique user "
+"account. This allows the administrator to find out who is doing what and "
+"prevents users from clobbering the settings of other users."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:252
+msgid ""
+"Each user can set up their own environment to accommodate their use of the "
+"system, by configuring their default shell, editor, key bindings, and "
+"language settings."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:254
+msgid ""
+"Every user account on a FreeBSD system has certain information associated "
+"with it:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/basics/_index.adoc:255
+#, no-wrap
+msgid "User name"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:260
+msgid ""
+"The user name is typed at the `login:` prompt. Each user must have a unique "
+"user name. There are a number of rules for creating valid user names which "
+"are documented in man:passwd[5]. It is recommended to use user names that "
+"consist of eight or fewer, all lower case characters in order to maintain "
+"backwards compatibility with applications."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/basics/_index.adoc:261
+#, no-wrap
+msgid "Password"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:263
+msgid "Each account has an associated password."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/basics/_index.adoc:264
+#, no-wrap
+msgid "User ID (UID)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:268
+msgid ""
+"The User ID (UID) is a number used to uniquely identify the user to the "
+"FreeBSD system. Commands that allow a user name to be specified will first "
+"convert it to the UID. It is recommended to use a UID less than 65535, "
+"since higher values may cause compatibility issues with some software."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/basics/_index.adoc:269
+#, no-wrap
+msgid "Group ID (GID)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:274
+msgid ""
+"The Group ID (GID) is a number used to uniquely identify the primary group "
+"that the user belongs to. Groups are a mechanism for controlling access to "
+"resources based on a user's GID rather than their UID. This can "
+"significantly reduce the size of some configuration files and allows users "
+"to be members of more than one group. It is recommended to use a GID of "
+"65535 or lower as higher GIDs may break some software."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/basics/_index.adoc:275
+#, no-wrap
+msgid "Login class"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:278
+msgid ""
+"Login classes are an extension to the group mechanism that provide "
+"additional flexibility when tailoring the system to different users. Login "
+"classes are discussed further in crossref:security[users-limiting,"
+"Configuring Login Classes]."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/basics/_index.adoc:279
+#, no-wrap
+msgid "Password change time"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:282
+msgid ""
+"By default, passwords do not expire. However, password expiration can be "
+"enabled on a per-user basis, forcing some or all users to change their "
+"passwords after a certain amount of time has elapsed."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/basics/_index.adoc:283
+#, no-wrap
+msgid "Account expiration time"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:287
+msgid ""
+"By default, FreeBSD does not expire accounts. When creating accounts that "
+"need a limited lifespan, such as student accounts in a school, specify the "
+"account expiry date using man:pw[8]. After the expiry time has elapsed, the "
+"account cannot be used to log in to the system, although the account's "
+"directories and files will remain."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/basics/_index.adoc:288
+#, no-wrap
+msgid "User's full name"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:291
+msgid ""
+"The user name uniquely identifies the account to FreeBSD, but does not "
+"necessarily reflect the user's real name. Similar to a comment, this "
+"information can contain spaces, uppercase characters, and be more than 8 "
+"characters long."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/basics/_index.adoc:292
+#, no-wrap
+msgid "Home directory"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:297
+msgid ""
+"The home directory is the full path to a directory on the system. This is "
+"the user's starting directory when the user logs in. A common convention is "
+"to put all user home directories under `/home/username` or `/usr/home/"
+"username`. Each user stores their personal files and subdirectories in "
+"their own home directory."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/basics/_index.adoc:298
+#, no-wrap
+msgid "User shell"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:301
+msgid ""
+"The shell provides the user's default environment for interacting with the "
+"system. There are many different kinds of shells and experienced users will "
+"have their own preferences, which can be reflected in their account settings."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/basics/_index.adoc:303
+#, no-wrap
+msgid "The Superuser Account"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:307
+msgid ""
+"The superuser account, usually called `root`, is used to manage the system "
+"with no limitations on privileges. For this reason, it should not be used "
+"for day-to-day tasks like sending and receiving mail, general exploration of "
+"the system, or programming."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:310
+msgid ""
+"The superuser, unlike other user accounts, can operate without limits, and "
+"misuse of the superuser account may result in spectacular disasters. User "
+"accounts are unable to destroy the operating system by mistake, so it is "
+"recommended to login as a user account and to only become the superuser when "
+"a command requires extra privilege."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:312
+msgid ""
+"Always double and triple-check any commands issued as the superuser, since "
+"an extra space or missing character can mean irreparable data loss."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:315
+msgid ""
+"There are several ways to gain superuser privilege. While one can log in as "
+"`root`, this is highly discouraged."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:320
+msgid ""
+"Instead, use man:su[1] to become the superuser. If `-` is specified when "
+"running this command, the user will also inherit the root user's "
+"environment. The user running this command must be in the `wheel` group or "
+"else the command will fail. The user must also know the password for the "
+"`root` user account."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:323
+msgid ""
+"In this example, the user only becomes superuser in order to run `make "
+"install` as this step requires superuser privilege. Once the command "
+"completes, the user types `exit` to leave the superuser account and return "
+"to the privilege of their user account."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/basics/_index.adoc:324
+#, no-wrap
+msgid "Install a Program As the Superuser"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:336
+#, no-wrap
+msgid ""
+"% configure\n"
+"% make\n"
+"% su -\n"
+"Password:\n"
+"# make install\n"
+"# exit\n"
+"%\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:342
+msgid ""
+"The built-in man:su[1] framework works well for single systems or small "
+"networks with just one system administrator. An alternative is to install "
+"the package:security/sudo[] package or port. This software provides "
+"activity logging and allows the administrator to configure which users can "
+"run which commands as the superuser."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/basics/_index.adoc:344
+#, no-wrap
+msgid "Managing Accounts"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:349
+msgid ""
+"FreeBSD provides a variety of different commands to manage user accounts. "
+"The most common commands are summarized in <<users-modifying-utilities>>, "
+"followed by some examples of their usage. See the manual page for each "
+"utility for more details and usage examples."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/basics/_index.adoc:351
+#, no-wrap
+msgid "Utilities for Managing User Accounts"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:355
+#, no-wrap
+msgid "Command"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:357
+#, no-wrap
+msgid "Summary"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:358
+#, no-wrap
+msgid "man:adduser[8]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:360
+#, no-wrap
+msgid "The recommended command-line application for adding new users."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:361
+#, no-wrap
+msgid "man:rmuser[8]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:363
+#, no-wrap
+msgid "The recommended command-line application for removing users."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:364
+#, no-wrap
+msgid "man:chpass[1]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:366
+#, no-wrap
+msgid "A flexible tool for changing user database information."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:367
+#, no-wrap
+msgid "man:passwd[1]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:369
+#, no-wrap
+msgid "The command-line tool to change user passwords."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:370
+#, no-wrap
+msgid "man:pw[8]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:372
+#, no-wrap
+msgid "A powerful and flexible tool for modifying all aspects of user accounts."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:373
+#, no-wrap
+msgid "man:bsdconfig[8]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:374
+#, no-wrap
+msgid "A system configuration utility with account management support."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/basics/_index.adoc:377
+#, no-wrap
+msgid "Adding a user"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:383
+msgid ""
+"The recommended program for adding new users is man:adduser[8]. When a new "
+"user is added, this program automatically updates `/etc/passwd` and `/etc/"
+"group`. It also creates a home directory for the new user, copies in the "
+"default configuration files from `/usr/share/skel`, and can optionally mail "
+"the new user a welcome message. This utility must be run as the superuser."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:388
+msgid ""
+"The man:adduser[8] utility is interactive and walks through the steps for "
+"creating a new user account. As seen in <<users-modifying-adduser>>, either "
+"input the required information or press kbd:[Return] to accept the default "
+"value shown in square brackets. In this example, the user has been invited "
+"into the `wheel` group, allowing them to become the superuser with man:"
+"su[1]. When finished, the utility will prompt to either create another user "
+"or to exit."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/basics/_index.adoc:390
+#, no-wrap
+msgid "Adding a User on FreeBSD"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:396
+#, no-wrap
+msgid "# adduser\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:399
+#: documentation/content/en/books/handbook/basics/_index.adoc:471
+#: documentation/content/en/books/handbook/basics/_index.adoc:510
+#: documentation/content/en/books/handbook/basics/_index.adoc:569
+#: documentation/content/en/books/handbook/basics/_index.adoc:594
+#: documentation/content/en/books/handbook/basics/_index.adoc:648
+#: documentation/content/en/books/handbook/basics/_index.adoc:669
+#: documentation/content/en/books/handbook/basics/_index.adoc:691
+#: documentation/content/en/books/handbook/basics/_index.adoc:710
+#: documentation/content/en/books/handbook/basics/_index.adoc:788
+#: documentation/content/en/books/handbook/basics/_index.adoc:1558
+#: documentation/content/en/books/handbook/basics/_index.adoc:1586
+msgid "The output should be similar to the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:430
+#, no-wrap
+msgid ""
+"Username: jru\n"
+"Full name: J. Random User\n"
+"Uid (Leave empty for default):\n"
+"Login group [jru]:\n"
+"Login group is jru. Invite jru into other groups? []: wheel\n"
+"Login class [default]:\n"
+"Shell (sh csh tcsh zsh nologin) [sh]: zsh\n"
+"Home directory [/home/jru]:\n"
+"Home directory permissions (Leave empty for default):\n"
+"Use password-based authentication? [yes]:\n"
+"Use an empty password? (yes/no) [no]:\n"
+"Use a random password? (yes/no) [no]:\n"
+"Enter password:\n"
+"Enter password again:\n"
+"Lock out the account after creation? [no]:\n"
+"Username : jru\n"
+"Password : ****\n"
+"Full Name : J. Random User\n"
+"Uid : 1001\n"
+"Class :\n"
+"Groups : jru wheel\n"
+"Home : /home/jru\n"
+"Shell : /usr/local/bin/zsh\n"
+"Locked : no\n"
+"OK? (yes/no): yes\n"
+"adduser: INFO: Successfully added (jru) to the user database.\n"
+"Add another user? (yes/no): no\n"
+"Goodbye!\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:436
+msgid ""
+"Since the password is not echoed when typed, be careful to not mistype the "
+"password when creating the user account."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/basics/_index.adoc:439
+#, no-wrap
+msgid "Removing a user"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:443
+msgid ""
+"To completely remove a user from the system, run man:rmuser[8] as the "
+"superuser. This command performs the following steps:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:447
+msgid "Removes the user's man:crontab[1] entry, if one exists."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:448
+msgid "Removes any man:at[1] jobs belonging to the user."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:449
+msgid "Sends a SIGKILL signal to all processes owned by the user."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:450
+msgid "Removes the user from the system's local password file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:451
+msgid ""
+"Removes the user's home directory (if it is owned by the user), including "
+"handling of symbolic links in the path to the actual home directory."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:452
+msgid "Removes the incoming mail files belonging to the user from `/var/mail`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:453
+msgid ""
+"Removes all files owned by the user from `/tmp`, `/var/tmp`, and `/var/tmp/"
+"vi.recover`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:454
+msgid ""
+"Removes the username from all groups to which it belongs in `/etc/group`. "
+"(If a group becomes empty and the group name is the same as the username, "
+"the group is removed; this complements man:adduser[8]'s per-user unique "
+"groups.)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:455
+msgid ""
+"Removes all message queues, shared memory segments and semaphores owned by "
+"the user."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:458
+msgid ""
+"man:rmuser[8] cannot be used to remove superuser accounts since that is "
+"almost always an indication of massive destruction."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:460
+msgid ""
+"By default, an interactive mode is used, as shown in the following example."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/basics/_index.adoc:461
+#, no-wrap
+msgid "`rmuser` Interactive Account Removal"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:467
+#, no-wrap
+msgid "# rmuser jru\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:479
+#, no-wrap
+msgid ""
+"Matching password entry:\n"
+"jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh\n"
+"Is this the entry you wish to remove? y\n"
+"Remove user's home directory (/home/jru)? y\n"
+"Removing user (jru): mailspool home passwd.\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/basics/_index.adoc:483
+#, no-wrap
+msgid "Change user information"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:487
+msgid ""
+"Any user can use man:chpass[1] to change their default shell and personal "
+"information associated with their user account. The superuser can use this "
+"utility to change additional account information for any user."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:490
+msgid ""
+"When passed no options, aside from an optional username, man:chpass[1] "
+"displays an editor containing user information. When the user exits from "
+"the editor, the user database is updated with the new information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:494
+msgid ""
+"This utility will prompt for the user's password when exiting the editor, "
+"unless the utility is run as the superuser."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:499
+msgid ""
+"In <<users-modifying-chpass-su>>, the superuser has typed `chpass jru` and "
+"is now viewing the fields that can be changed for this user. If `jru` runs "
+"this command instead, only the last six fields will be displayed and "
+"available for editing. This is shown in <<users-modifying-chpass-ru>>."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/basics/_index.adoc:501
+#, no-wrap
+msgid "Using `chpass` as Superuser"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:507
+#, no-wrap
+msgid "# chpass\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:528
+#, no-wrap
+msgid ""
+"# Changing user database information for jru.\n"
+"Login: jru\n"
+"Password: *\n"
+"Uid [#]: 1001\n"
+"Gid [# or name]: 1001\n"
+"Change [month day year]:\n"
+"Expire [month day year]:\n"
+"Class:\n"
+"Home directory: /home/jru\n"
+"Shell: /usr/local/bin/zsh\n"
+"Full Name: J. Random User\n"
+"Office Location:\n"
+"Office Phone:\n"
+"Home Phone:\n"
+"Other information:\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/basics/_index.adoc:532
+#, no-wrap
+msgid "Using `chpass` as Regular User"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:544
+#, no-wrap
+msgid ""
+"#Changing user database information for jru.\n"
+"Shell: /usr/local/bin/zsh\n"
+"Full Name: J. Random User\n"
+"Office Location:\n"
+"Office Phone:\n"
+"Home Phone:\n"
+"Other information:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:552
+msgid ""
+"The commands man:chfn[1] and man:chsh[1] are links to man:chpass[1], as are "
+"man:ypchpass[1], man:ypchfn[1], and man:ypchsh[1]. Since NIS support is "
+"automatic, specifying the `yp` before the command is not necessary. How to "
+"configure NIS is covered in crossref:network-servers[network-servers,Network "
+"Servers]."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/basics/_index.adoc:555
+#, no-wrap
+msgid "Change user password"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:559
+msgid ""
+"Any user can easily change their password using man:passwd[1]. To prevent "
+"accidental or unauthorized changes, this command will prompt for the user's "
+"original password before a new password can be set:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/basics/_index.adoc:560
+#, no-wrap
+msgid "Changing Your Password"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:566
+#, no-wrap
+msgid "% passwd\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:578
+#, no-wrap
+msgid ""
+"Changing local password for jru.\n"
+"Old password:\n"
+"New password:\n"
+"Retype new password:\n"
+"passwd: updating the database...\n"
+"passwd: done\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:584
+msgid ""
+"The superuser can change any user's password by specifying the username when "
+"running man:passwd[1]. When this utility is run as the superuser, it will "
+"not prompt for the user's current password. This allows the password to be "
+"changed when a user cannot remember the original password."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/basics/_index.adoc:585
+#, no-wrap
+msgid "Changing Another User's Password as the Superuser"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:591
+#, no-wrap
+msgid "# passwd jru\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:602
+#, no-wrap
+msgid ""
+"Changing local password for jru.\n"
+"New password:\n"
+"Retype new password:\n"
+"passwd: updating the database...\n"
+"passwd: done\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:608
+msgid ""
+"As with man:chpass[1], man:yppasswd[1] is a link to man:passwd[1], so NIS "
+"works with either command."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/basics/_index.adoc:611
+#, no-wrap
+msgid "Create, remove, modify and display system users and groups"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:616
+msgid ""
+"The man:pw[8] utility can create, remove, modify, and display users and "
+"groups. It functions as a front end to the system user and group files. "
+"man:pw[8] has a very powerful set of command line options that make it "
+"suitable for use in shell scripts, but new users may find it more "
+"complicated than the other commands presented in this section."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/basics/_index.adoc:618
+#, no-wrap
+msgid "Managing Groups"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:623
+msgid ""
+"A group is a list of users. A group is identified by its group name and "
+"GID. In FreeBSD, the kernel uses the UID of a process, and the list of "
+"groups it belongs to, to determine what the process is allowed to do. Most "
+"of the time, the GID of a user or process usually means the first group in "
+"the list."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:628
+msgid ""
+"The group name to GID mapping is listed in `/etc/group`. This is a plain "
+"text file with four colon-delimited fields. The first field is the group "
+"name, the second is the encrypted password, the third the GID, and the "
+"fourth the comma-delimited list of members. For a complete description of "
+"the syntax, refer to man:group[5]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:632
+msgid ""
+"The superuser can modify `/etc/group` using a text editor, although editing "
+"the group file using man:vigr[8] is preferred because it can catch some "
+"common mistakes. Alternatively, man:pw[8] can be used to add and edit "
+"groups. For example, to add a group called `teamtwo` and then confirm that "
+"it exists:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:636
+msgid ""
+"Care must be taken when using the operator group, as unintended superuser-"
+"like access privileges may be granted, including but not limited to "
+"shutdown, reboot, and access to all items in `/dev` in the group."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/basics/_index.adoc:638
+#, no-wrap
+msgid "Adding a Group Using man:pw[8]"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:645
+#, no-wrap
+msgid ""
+"# pw groupadd teamtwo\n"
+"# pw groupshow teamtwo\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:652
+#, no-wrap
+msgid "teamtwo:*:1100:\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:658
+msgid ""
+"In this example, `1100` is the GID of `teamtwo`. Right now, `teamtwo` has "
+"no members. This command will add `jru` as a member of `teamtwo`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/basics/_index.adoc:659
+#, no-wrap
+msgid "Adding User Accounts to a New Group Using man:pw[8]"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:666
+#, no-wrap
+msgid ""
+"# pw groupmod teamtwo -M jru\n"
+"# pw groupshow teamtwo\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:673
+#, no-wrap
+msgid "teamtwo:*:1100:jru\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:680
+msgid ""
+"The argument to `-M` is a comma-delimited list of users to be added to a new "
+"(empty) group or to replace the members of an existing group. To the user, "
+"this group membership is different from (and in addition to) the user's "
+"primary group listed in the password file. This means that the user will "
+"not show up as a member when using `groupshow` with man:pw[8], but will show "
+"up when the information is queried via man:id[1] or a similar tool. When "
+"man:pw[8] is used to add a user to a group, it only manipulates `/etc/group` "
+"and does not attempt to read additional data from `/etc/passwd`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/basics/_index.adoc:681
+#, no-wrap
+msgid "Adding a New Member to a Group Using man:pw[8]"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:688
+#, no-wrap
+msgid ""
+"# pw groupmod teamtwo -m db\n"
+"# pw groupshow teamtwo\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:695
+#, no-wrap
+msgid "teamtwo:*:1100:jru,db\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:700
+msgid ""
+"In this example, the argument to `-m` is a comma-delimited list of users who "
+"are to be added to the group. Unlike the previous example, these users are "
+"appended to the group and do not replace existing users in the group."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/basics/_index.adoc:701
+#, no-wrap
+msgid "Using man:id[1] to Determine Group Membership"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:707
+#, no-wrap
+msgid "% id jru\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:714
+#, no-wrap
+msgid "uid=1001(jru) gid=1001(jru) groups=1001(jru), 1100(teamtwo)\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:718
+msgid "In this example, `jru` is a member of the groups `jru` and `teamtwo`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:720
+msgid ""
+"For more information about this command and the format of `/etc/group`, "
+"refer to man:pw[8] and man:group[5]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/basics/_index.adoc:722
+#, no-wrap
+msgid "Permissions"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:726
+msgid ""
+"In FreeBSD, every file and directory has an associated set of permissions "
+"and several utilities are available for viewing and modifying these "
+"permissions. Understanding how permissions work is necessary to make sure "
+"that users are able to access the files that they need and are unable to "
+"improperly access the files used by the operating system or owned by other "
+"users."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:729
+msgid ""
+"This section discusses the traditional UNIX(R) permissions used in FreeBSD. "
+"For finer-grained file system access control, refer to crossref:security[fs-"
+"acl,Access Control Lists]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:735
+msgid ""
+"In UNIX(R), basic permissions are assigned using three types of access: "
+"read, write, and execute. These access types are used to determine file "
+"access to the file's owner, group, and others (everyone else). The read, "
+"write, and execute permissions can be represented as the letters `r`, `w`, "
+"and `x`. They can also be represented as binary numbers as each permission "
+"is either on or off (`0`). When represented as a number, the order is "
+"always read as `rwx`, where `r` has an on value of `4`, `w` has an on value "
+"of `2` and `x` has an on value of `1`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:738
+msgid ""
+"Table 4.1 summarizes the possible numeric and alphabetic possibilities. "
+"When reading the \"Directory Listing\" column, a `-` is used to represent a "
+"permission that is set to off."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/basics/_index.adoc:739
+#, no-wrap
+msgid "UNIX(R) Permissions"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:743
+#, no-wrap
+msgid "Value"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:744
+#, no-wrap
+msgid "Permission"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:746
+#, no-wrap
+msgid "Directory Listing"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:747
+#, no-wrap
+msgid "0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:748
+#, no-wrap
+msgid "No read, no write, no execute"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:750
+#, no-wrap
+msgid "`---`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:751
+#, no-wrap
+msgid "1"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:752
+#, no-wrap
+msgid "No read, no write, execute"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:754
+#, no-wrap
+msgid "`--x`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:755
+#, no-wrap
+msgid "2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:756
+#, no-wrap
+msgid "No read, write, no execute"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:758
+#, no-wrap
+msgid "`-w-`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:759
+#, no-wrap
+msgid "3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:760
+#, no-wrap
+msgid "No read, write, execute"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:762
+#, no-wrap
+msgid "`-wx`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:763
+#, no-wrap
+msgid "4"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:764
+#, no-wrap
+msgid "Read, no write, no execute"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:766
+#, no-wrap
+msgid "`r--`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:767
+#, no-wrap
+msgid "5"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:768
+#, no-wrap
+msgid "Read, no write, execute"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:770
+#, no-wrap
+msgid "`r-x`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:771
+#, no-wrap
+msgid "6"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:772
+#, no-wrap
+msgid "Read, write, no execute"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:774
+#, no-wrap
+msgid "`rw-`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:775
+#, no-wrap
+msgid "7"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:776
+#, no-wrap
+msgid "Read, write, execute"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:777
+#, no-wrap
+msgid "`rwx`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:781
+msgid ""
+"Use the `-l` argument with man:ls[1] to view a long directory listing that "
+"includes a column of information about a file's permissions for the owner, "
+"group, and everyone else. For example, `ls -l` in an arbitrary directory "
+"may show:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:785
+#, no-wrap
+msgid "% ls -l\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:795
+#, no-wrap
+msgid ""
+"total 530\n"
+"-rw-r--r-- 1 root wheel 512 Sep 5 12:31 myfile\n"
+"-rw-r--r-- 1 root wheel 512 Sep 5 12:31 otherfile\n"
+"-rw-r--r-- 1 root wheel 7680 Sep 5 12:31 email.txt\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:805
+msgid ""
+"Focusing on the line for `myfile`, the first `(leftmost)` character "
+"indicates whether this file is a regular file, a directory, a special "
+"character device, a socket, or any other special pseudo-file device. In "
+"this example, the `-` indicates a regular file. The next three characters, "
+"`rw-` in this example, give the permissions for the owner of the file. The "
+"next three characters, `r--`, give the permissions for the group that the "
+"file belongs to. The final three characters, `r--`, give the permissions "
+"for the rest of the world. A dash means that the permission is turned off. "
+"In this example, the permissions are set so the owner can read and write to "
+"the file, the group can read the file, and the rest of the world can only "
+"read the file. According to the table above, the permissions for this file "
+"would be `644`, where each digit represents the three parts of the file's "
+"permission."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:808
+msgid ""
+"How does the system control permissions on devices? FreeBSD treats most "
+"hardware devices as a file that programs can open, read, and write data to. "
+"These special device files are stored in `/dev/`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:814
+msgid ""
+"Directories are also treated as files. They have read, write, and execute "
+"permissions. The executable bit for a directory has a slightly different "
+"meaning than that of files. When a directory is marked executable, it means "
+"it is possible to change into that directory using man:cd[1]. This also "
+"means that it is possible to access the files within that directory, subject "
+"to the permissions on the files themselves."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:817
+msgid ""
+"In order to perform a directory listing, the read permission must be set on "
+"the directory. In order to delete a file that one knows the name of, it is "
+"necessary to have write _and_ execute permissions to the directory "
+"containing the file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:820
+msgid ""
+"There are more permission bits, but they are primarily used in special "
+"circumstances such as setuid binaries and sticky directories. For more "
+"information on file permissions and how to set them, refer to man:chmod[1]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/basics/_index.adoc:821
+#, no-wrap
+msgid "Symbolic Permissions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:825
+msgid ""
+"Symbolic permissions use characters instead of octal values to assign "
+"permissions to files or directories. Symbolic permissions use the syntax of "
+"(who) (action) (permissions), where the following values are available:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:830
+#, no-wrap
+msgid "Option"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:831
+#, no-wrap
+msgid "Letter"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:833
+#, no-wrap
+msgid "Represents"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:834
+#: documentation/content/en/books/handbook/basics/_index.adoc:838
+#: documentation/content/en/books/handbook/basics/_index.adoc:842
+#: documentation/content/en/books/handbook/basics/_index.adoc:846
+#, no-wrap
+msgid "(who)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:835
+#, no-wrap
+msgid "u"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:837
+#, no-wrap
+msgid "User"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:839
+#, no-wrap
+msgid "g"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:841
+#, no-wrap
+msgid "Group owner"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:843
+#, no-wrap
+msgid "o"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:845
+#, no-wrap
+msgid "Other"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:847
+#, no-wrap
+msgid "a"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:849
+#, no-wrap
+msgid "All (\"world\")"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:850
+#: documentation/content/en/books/handbook/basics/_index.adoc:854
+#: documentation/content/en/books/handbook/basics/_index.adoc:858
+#, no-wrap
+msgid "(action)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:851
+#, no-wrap
+msgid "+"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:853
+#, no-wrap
+msgid "Adding permissions"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:855
+#, no-wrap
+msgid "-"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:857
+#, no-wrap
+msgid "Removing permissions"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:859
+#, no-wrap
+msgid "="
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:861
+#, no-wrap
+msgid "Explicitly set permissions"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:862
+#: documentation/content/en/books/handbook/basics/_index.adoc:866
+#: documentation/content/en/books/handbook/basics/_index.adoc:870
+#: documentation/content/en/books/handbook/basics/_index.adoc:874
+#: documentation/content/en/books/handbook/basics/_index.adoc:878
+#, no-wrap
+msgid "(permissions)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:863
+#, no-wrap
+msgid "r"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:865
+#, no-wrap
+msgid "Read"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:867
+#, no-wrap
+msgid "w"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:869
+#, no-wrap
+msgid "Write"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:871
+#, no-wrap
+msgid "x"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:873
+#, no-wrap
+msgid "Execute"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:875
+#, no-wrap
+msgid "t"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:877
+#, no-wrap
+msgid "Sticky bit"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:879
+#, no-wrap
+msgid "s"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:880
+#, no-wrap
+msgid "Set UID or GID"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:884
+msgid ""
+"These values are used with man:chmod[1], but with letters instead of "
+"numbers. For example, the following command would block both members of the "
+"group associated with _FILE_ and all other users from accessing _FILE_:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:888
+#, no-wrap
+msgid "% chmod go= FILE\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:892
+msgid ""
+"A comma separated list can be provided when more than one set of changes to "
+"a file must be made. For example, the following command removes the group "
+"and \"world\" write permission on _FILE_, and adds the execute permissions "
+"for everyone:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:896
+#, no-wrap
+msgid "% chmod go-w,a+x FILE\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/basics/_index.adoc:898
+#, no-wrap
+msgid "FreeBSD File Flags"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:903
+msgid ""
+"In addition to file permissions, FreeBSD supports the use of \"file "
+"flags\". These flags add an additional level of security and control over "
+"files, but not directories. With file flags, even `root` can be prevented "
+"from removing or altering files."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:906
+msgid ""
+"File flags are modified using man:chflags[1]. For example, to enable the "
+"system undeletable flag on the file `file1`, issue the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:910
+#, no-wrap
+msgid "# chflags sunlink file1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:913
+msgid ""
+"To disable the system undeletable flag, put a \"no\" in front of the "
+"`sunlink`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:917
+#, no-wrap
+msgid "# chflags nosunlink file1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:920
+msgid "To view the flags of a file, use `-lo` with man:ls[1]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:924
+#, no-wrap
+msgid "# ls -lo file1\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:929
+#, no-wrap
+msgid "-rw-r--r-- 1 trhodes trhodes sunlnk 0 Mar 1 05:54 file1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:934
+msgid ""
+"Several file flags may only be added or removed by the `root` user. In "
+"other cases, the file owner may set its file flags. Refer to man:chflags[1] "
+"and man:chflags[2] for more information."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/basics/_index.adoc:935
+#, no-wrap
+msgid "The setuid, setgid, and sticky Permissions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:939
+msgid ""
+"Other than the permissions already discussed, there are three other specific "
+"settings that all administrators should know about. They are the `setuid`, "
+"`setgid`, and `sticky` permissions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:942
+msgid ""
+"These settings are important for some UNIX(R) operations as they provide "
+"functionality not normally granted to normal users. To understand them, the "
+"difference between the real user ID and effective user ID must be noted."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:948
+msgid ""
+"The real user ID is the UID who owns or starts the process. The effective "
+"UID is the user ID the process runs as. As an example, man:passwd[1] runs "
+"with the real user ID when a user changes their password. However, in order "
+"to update the password database, the command runs as the effective ID of the "
+"`root` user. This allows users to change their passwords without seeing a "
+"`Permission Denied` error."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:950
+msgid ""
+"The setuid permission may be added symbolically by adding the `s` permission "
+"for the user as in the following example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:954
+#, no-wrap
+msgid "# chmod u+s suidexample.sh\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:957
+msgid ""
+"The setuid permission may also be set by prefixing a permission set with the "
+"number four (4) as shown in the following example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:961
+#, no-wrap
+msgid "# chmod 4755 suidexample.sh\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:964
+msgid "The permissions on `suidexample.sh` now look like the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:968
+#, no-wrap
+msgid "-rwsr-xr-x 1 trhodes trhodes 63 Aug 29 06:36 suidexample.sh\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:972
+msgid ""
+"Note that a `s` is now part of the permission set designated for the file "
+"owner, replacing the executable bit. This allows utilities which need "
+"elevated permissions, such as man:passwd[1]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:977
+msgid ""
+"The `nosuid` man:mount[8] option will cause such binaries to silently fail "
+"without alerting the user. That option is not completely reliable as a "
+"`nosuid` wrapper may be able to circumvent it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:982
+msgid ""
+"To view this in real time, open two terminals. On one, type `passwd` as a "
+"normal user. While it waits for a new password, check the process table and "
+"look at the user information for man:passwd[1]:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:984
+msgid "In terminal A:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:989
+#, no-wrap
+msgid ""
+"Changing local password for trhodes\n"
+"Old Password:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:992
+msgid "In terminal B:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:996
+#, no-wrap
+msgid "# ps aux | grep passwd\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1002
+#, no-wrap
+msgid ""
+"trhodes 5232 0.0 0.2 3420 1608 0 R+ 2:10AM 0:00.00 grep passwd\n"
+"root 5211 0.0 0.2 3620 1724 2 I+ 2:09AM 0:00.01 passwd\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1005
+msgid ""
+"Although man:passwd[1] is run as a normal user, it is using the effective "
+"UID of `root`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1008
+msgid ""
+"The `setgid` permission performs the same function as the `setuid` "
+"permission; except that it alters the group settings. When an application "
+"or utility executes with this setting, it will be granted the permissions "
+"based on the group that owns the file, not the user who started the process."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1010
+msgid ""
+"To set the `setgid` permission on a file symbolically, add the `s` "
+"permission for the group with man:chmod[1]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1014
+#, no-wrap
+msgid "# chmod g+s sgidexample.sh\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1017
+msgid "Alternatively, provide man:chmod[1] with a leading two (2):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1021
+#, no-wrap
+msgid "# chmod 2755 sgidexample.sh\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1024
+msgid ""
+"In the following listing, notice that the `s` is now in the field designated "
+"for the group permission settings:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1028
+#, no-wrap
+msgid "-rwxr-sr-x 1 trhodes trhodes 44 Aug 31 01:49 sgidexample.sh\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1034
+msgid ""
+"In these examples, even though the shell script in question is an executable "
+"file, it will not run with a different EUID or effective user ID. This is "
+"because shell scripts may not access the man:setuid[2] system calls."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1038
+msgid ""
+"The `setuid` and `setgid` permission bits may lower system security, by "
+"allowing for elevated permissions. The third special permission, the "
+"`sticky bit`, can strengthen the security of a system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1042
+msgid ""
+"When the `sticky bit` is set on a directory, it allows file deletion only by "
+"the file owner. This is useful to prevent file deletion in public "
+"directories, such as `/tmp`, by users who do not own the file. To utilize "
+"this permission, add the `t` mode to the file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1046
+#, no-wrap
+msgid "# chmod +t /tmp\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1049
+msgid "Alternatively, prefix the permission set with a one (1):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1053
+#, no-wrap
+msgid "# chmod 1777 /tmp\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1056
+msgid ""
+"The `sticky bit` permission will display as a `t` at the very end of the "
+"permission set:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1060
+#, no-wrap
+msgid "# ls -al / | grep tmp\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1065
+#, no-wrap
+msgid "drwxrwxrwt 10 root wheel 512 Aug 31 01:49 tmp\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/basics/_index.adoc:1068
+#, no-wrap
+msgid "Directory Structure"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1074
+msgid ""
+"The FreeBSD directory hierarchy is fundamental to obtaining an overall "
+"understanding of the system. The most important directory is root or, \"/"
+"\". This directory is the first one mounted at boot time and it contains "
+"the base system necessary to prepare the operating system for multi-user "
+"operation. The root directory also contains mount points for other file "
+"systems that are mounted during the transition to multi-user operation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1082
+msgid ""
+"A mount point is a directory where additional file systems can be grafted "
+"onto a parent file system (usually the root file system). This is further "
+"described in <<disk-organization>>. Standard mount points include `/usr/`, "
+"`/var/`, `/tmp/`, `/mnt/`, and `/cdrom/`. These directories are usually "
+"referenced to entries in `/etc/fstab`. This file is a table of various file "
+"systems and mount points and is read by the system. Most of the file "
+"systems in `/etc/fstab` are mounted automatically at boot time from the "
+"script man:rc[8] unless their entry includes `noauto`. Details can be found "
+"in <<disks-fstab>>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1085
+msgid ""
+"A complete description of the file system hierarchy is available in man:"
+"hier[7]. The following table provides a brief overview of the most common "
+"directories."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1089
+#, no-wrap
+msgid "Directory"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1091
+#: documentation/content/en/books/handbook/basics/_index.adoc:1696
+#, no-wrap
+msgid "Description"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1092
+#, no-wrap
+msgid "`/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1094
+#, no-wrap
+msgid "Root directory of the file system."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1095
+#, no-wrap
+msgid "`/bin/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1097
+#, no-wrap
+msgid "User utilities fundamental to both single-user and multi-user environments."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1098
+#, no-wrap
+msgid "`/boot/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1100
+#, no-wrap
+msgid "Programs and configuration files used during operating system bootstrap."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1101
+#, no-wrap
+msgid "`/boot/defaults/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1103
+#, no-wrap
+msgid "Default boot configuration files. Refer to man:loader.conf[5] for details."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1104
+#, no-wrap
+msgid "`/dev/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1106
+#, no-wrap
+msgid "Device special files managed by man:devfs[5]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1107
+#, no-wrap
+msgid "`/etc/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1109
+#, no-wrap
+msgid "System configuration files and scripts."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1110
+#, no-wrap
+msgid "`/etc/defaults/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1112
+#, no-wrap
+msgid "Default system configuration files. Refer to man:rc[8] for details."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1113
+#, no-wrap
+msgid "`/etc/periodic/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1115
+#, no-wrap
+msgid "Scripts that run daily, weekly, and monthly, via man:cron[8]. Refer to man:periodic[8] for details."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1116
+#, no-wrap
+msgid "`/lib/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1118
+#, no-wrap
+msgid "Critical system libraries needed for binaries in `/bin` and `/sbin`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1119
+#, no-wrap
+msgid "`/libexec/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1121
+#, no-wrap
+msgid "Critical system files"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1122
+#, no-wrap
+msgid "`/media/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1124
+#, no-wrap
+msgid "Contains subdirectories to be used as mount points for removable media such as CDs, USB drives, and floppy disks"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1125
+#, no-wrap
+msgid "`/mnt/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1127
+#, no-wrap
+msgid "Empty directory commonly used by system administrators as a temporary mount point."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1128
+#, no-wrap
+msgid "`/net/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1130
+#, no-wrap
+msgid "Automounted NFS shares; see man:auto_master[5]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1131
+#, no-wrap
+msgid "`/proc/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1133
+#, no-wrap
+msgid "Process file system. Refer to man:procfs[5], man:mount_procfs[8] for details."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1134
+#, no-wrap
+msgid "`/rescue/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1136
+#, no-wrap
+msgid "Statically linked programs for emergency recovery as described in man:rescue[8]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1137
+#, no-wrap
+msgid "`/root/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1139
+#, no-wrap
+msgid "Home directory for the `root` account."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1140
+#, no-wrap
+msgid "`/sbin/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1142
+#, no-wrap
+msgid "System programs and administration utilities fundamental to both single-user and multi-user environments."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1143
+#, no-wrap
+msgid "`/tmp/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1145
+#, no-wrap
+msgid "Temporary files which are usually _not_ preserved across a system reboot. A memory-based file system is often mounted at `/tmp`. This can be automated using the tmpmfs-related variables of man:rc.conf[5] or with an entry in `/etc/fstab`; refer to man:mdmfs[8] for details."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1146
+#, no-wrap
+msgid "`/usr/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1148
+#, no-wrap
+msgid "The majority of user utilities and applications."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1149
+#, no-wrap
+msgid "`/usr/bin/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1151
+#, no-wrap
+msgid "Common utilities, programming tools, and applications."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1152
+#, no-wrap
+msgid "`/usr/include/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1154
+#, no-wrap
+msgid "Standard C include files."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1155
+#, no-wrap
+msgid "`/usr/lib/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1157
+#, no-wrap
+msgid "Archive libraries."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1158
+#, no-wrap
+msgid "`/usr/libdata/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1160
+#, no-wrap
+msgid "Miscellaneous utility data files."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1161
+#, no-wrap
+msgid "`/usr/libexec/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1163
+#, no-wrap
+msgid "System daemons and system utilities executed by other programs."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1164
+#, no-wrap
+msgid "`/usr/local/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1166
+#, no-wrap
+msgid "Local executables and libraries. Also used as the default destination for the FreeBSD ports framework. Within `/usr/local`, the general layout sketched out by man:hier[7] for `/usr` should be used. Exceptions are the man directory, which is directly under `/usr/local` rather than under `/usr/local/share`, and the ports documentation is in `share/doc/port`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1167
+#, no-wrap
+msgid "`/usr/ports/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1169
+#, no-wrap
+msgid "The FreeBSD Ports Collection (optional)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1170
+#, no-wrap
+msgid "`/usr/sbin/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1172
+#, no-wrap
+msgid "System daemons and system utilities executed by users."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1173
+#, no-wrap
+msgid "`/usr/share/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1175
+#, no-wrap
+msgid "Architecture-independent files."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1176
+#, no-wrap
+msgid "`/usr/src/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1178
+#, no-wrap
+msgid "BSD and/or local source files."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1179
+#, no-wrap
+msgid "`/var/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1181
+#, no-wrap
+msgid "Multi-purpose log, temporary, transient, and spool files."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1182
+#, no-wrap
+msgid "`/var/log/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1184
+#, no-wrap
+msgid "Miscellaneous system log files."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1185
+#, no-wrap
+msgid "`/var/tmp/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1187
+#, no-wrap
+msgid "Temporary files which are usually preserved across a system reboot."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/basics/_index.adoc:1190
+#, no-wrap
+msgid "Disk Organization"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1195
+msgid ""
+"The smallest unit of organization that FreeBSD uses to find files is the "
+"filename. Filenames are case-sensitive, which means that `readme.txt` and "
+"`README.TXT` are two separate files. FreeBSD does not use the extension of "
+"a file to determine whether the file is a program, document, or some other "
+"form of data."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1199
+msgid ""
+"Files are stored in directories. A directory may contain no files, or it "
+"may contain many hundreds of files. A directory can also contain other "
+"directories, allowing a hierarchy of directories within one another in order "
+"to organize data."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1205
+msgid ""
+"Files and directories are referenced by giving the file or directory name, "
+"followed by a forward slash, `/`, followed by any other directory names that "
+"are necessary. For example, if the directory `foo` contains a directory "
+"`bar` which contains the file `readme.txt`, the full name, or _path_, to the "
+"file is `foo/bar/readme.txt`. Note that this is different from Windows(R) "
+"which uses `\\` to separate file and directory names. FreeBSD does not use "
+"drive letters, or other drive names in the path. For example, one would not "
+"type `c:\\foo\\bar\\readme.txt` on FreeBSD."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/basics/_index.adoc:1207
+#, no-wrap
+msgid "File systems"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1215
+msgid ""
+"Directories and files are stored in a file system. Each file system "
+"contains exactly one directory at the very top level, called the _root "
+"directory_ for that file system. This root directory can contain other "
+"directories. One file system is designated the _root file system_ or `/`. "
+"Every other file system is _mounted_ under the root file system. No matter "
+"how many disks are on the FreeBSD system, every directory appears to be part "
+"of the same disk."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1218
+msgid ""
+"Consider three file systems, called `A`, `B`, and `C`. Each file system has "
+"one root directory, which contains two other directories, called `A1`, `A2` "
+"(and likewise `B1`, `B2` and `C1`, `C2`)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1222
+msgid ""
+"Call `A` the root file system. If man:ls[1] is used to view the contents of "
+"this directory, it will show two subdirectories, `A1` and `A2`. The "
+"directory tree looks like this:"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/basics/_index.adoc:1223
+#: documentation/content/en/books/handbook/basics/_index.adoc:1228
+#: documentation/content/en/books/handbook/basics/_index.adoc:1236
+#, no-wrap
+msgid "Directory tree with the root directory and two subdirectories"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/basics/_index.adoc:1223
+#, no-wrap
+msgid "example-dir1.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1227
+msgid ""
+"A file system must be mounted on to a directory in another file system. "
+"When mounting file system `B` on to the directory `A1`, the root directory "
+"of `B` replaces `A1`, and the directories in `B` appear accordingly:"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/basics/_index.adoc:1228
+#, no-wrap
+msgid "example-dir2.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1233
+msgid ""
+"Any files that are in the `B1` or `B2` directories can be reached with the "
+"path `/A1/B1` or `/A1/B2` as necessary. Any files that were in `/A1` have "
+"been temporarily hidden. They will reappear if `B` is _unmounted_ from `A`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1235
+msgid "If `B` had been mounted on `A2` then the diagram would look like this:"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/basics/_index.adoc:1236
+#, no-wrap
+msgid "example-dir3.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1239
+msgid "and the paths would be `/A2/B1` and `/A2/B2` respectively."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1242
+msgid ""
+"File systems can be mounted on top of one another. Continuing the last "
+"example, the `C` file system could be mounted on top of the `B1` directory "
+"in the `B` file system, leading to this arrangement:"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/basics/_index.adoc:1243
+#: documentation/content/en/books/handbook/basics/_index.adoc:1247
+#, no-wrap
+msgid "A complex directory tree. With different subdirectories hanging from root."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/basics/_index.adoc:1243
+#, no-wrap
+msgid "example-dir4.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1246
+msgid ""
+"Or `C` could be mounted directly on to the `A` file system, under the `A1` "
+"directory:"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/basics/_index.adoc:1247
+#, no-wrap
+msgid "example-dir5.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1251
+msgid ""
+"It is entirely possible to have one large root file system, and not need to "
+"create any others. There are some drawbacks to this approach, and one "
+"advantage."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/basics/_index.adoc:1252
+#, no-wrap
+msgid "Benefits of Multiple File Systems"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1254
+msgid ""
+"Different file systems can have different _mount options_. For example, the "
+"root file system can be mounted read-only, making it impossible for users to "
+"inadvertently delete or edit a critical file. Separating user-writable file "
+"systems, such as `/home`, from other file systems allows them to be mounted "
+"_nosuid_. This option prevents the _suid_/_guid_ bits on executables stored "
+"on the file system from taking effect, possibly improving security."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1255
+msgid ""
+"FreeBSD automatically optimizes the layout of files on a file system, "
+"depending on how the file system is being used. So a file system that "
+"contains many small files that are written frequently will have a different "
+"optimization to one that contains fewer, larger files. By having one big "
+"file system this optimization breaks down."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1256
+msgid ""
+"FreeBSD's file systems are robust if power is lost. However, a power loss at "
+"a critical point could still damage the structure of the file system. By "
+"splitting data over multiple file systems it is more likely that the system "
+"will still come up, making it easier to restore from backup as necessary."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/basics/_index.adoc:1257
+#, no-wrap
+msgid "Benefit of a Single File System"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1259
+msgid ""
+"File systems are a fixed size. If you create a file system when you install "
+"FreeBSD and give it a specific size, you may later discover that you need to "
+"make the partition bigger. This is not easily accomplished without backing "
+"up, recreating the file system with the new size, and then restoring the "
+"backed up data."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1266
+msgid ""
+"FreeBSD features the man:growfs[8] command, which makes it possible to "
+"increase the size of file system on the fly, removing this limitation. A "
+"file system can only be expanded into free space in the partition in which "
+"it resides. If there is space after the partition, the partition can be "
+"expanded with man:gpart[8]. If the partition is the last one on a virtual "
+"disk, and the disk is expanded, the partition can then be expanded."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/basics/_index.adoc:1269
+#, no-wrap
+msgid "Disk partitions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1282
+msgid ""
+"File systems are contained in _partitions_. Disks are divided into "
+"partitions using one of several partitioning schemes; see <<bsdinstall-part-"
+"manual>>. The newer scheme is GPT; older BIOS-based computers use MBR. GPT "
+"supports division of a disk into partitions with a size, offset, and type. "
+"It supports a large number of partitions and partition types, and is "
+"recommended whenever its use is possible. GPT partitions use the disk name "
+"with a suffix, where the suffix is `p1` for the first partition, `p2` for "
+"the second, and so on. MBR, however, supports only a small number of "
+"partitions. The MBR partitions are known in FreeBSD as `slices`. Slices "
+"may be used for different operating systems. FreeBSD slices are subdivided "
+"into partitions using BSD labels (see man:bsdlabel[8])."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1288
+msgid ""
+"Slice numbers follow the device name, prefixed with an `s`, starting at 1. "
+"So \"da0__s1__\" is the first slice on the first SCSI drive. There can only "
+"be four physical slices on a disk, but there can be logical slices inside "
+"physical slices of the appropriate type. These extended slices are numbered "
+"starting at 5, so \"ada0__s5__\" is the first extended slice on the first "
+"SATA disk. These devices are used by file systems that expect to occupy a "
+"slice."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1290
+msgid ""
+"Each GPT or BSD partition can contain only one file system, which means that "
+"file systems are often described by either their typical mount point in the "
+"file system hierarchy, or the name of the partition they are contained in."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1295
+msgid ""
+"FreeBSD also uses disk space for _swap space_ to provide _virtual memory_. "
+"This allows your computer to behave as though it has much more memory than "
+"it actually does. When FreeBSD runs out of memory, it moves some of the "
+"data that is not currently being used to the swap space, and moves it back "
+"in (moving something else out) when it needs it. This is called _paging_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1297
+msgid "Some BSD partitions have certain conventions associated with them."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1301
+#, no-wrap
+msgid "Partition"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1303
+#, no-wrap
+msgid "Convention"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1304
+#, no-wrap
+msgid "`a`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1306
+#, no-wrap
+msgid "Normally contains the root file system."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1307
+#, no-wrap
+msgid "`b`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1309
+#, no-wrap
+msgid "Normally contains swap space."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1310
+#, no-wrap
+msgid "`c`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1312
+#, no-wrap
+msgid "Normally the same size as the enclosing slice. This allows utilities that need to work on the entire slice, such as a bad block scanner, to work on the `c` partition. A file system would not normally be created on this partition."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1313
+#, no-wrap
+msgid "`d`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1314
+#, no-wrap
+msgid "Partition `d` used to have a special meaning associated with it, although that is now gone and `d` may work as any normal partition."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1319
+msgid ""
+"Slices and \"dangerously dedicated\" physical drives contain BSD partitions, "
+"which are represented as letters from `a` to `h`. This letter is appended "
+"to the device name, so \"da0__a__\" is the `a` partition on the first `da` "
+"drive, which is \"dangerously dedicated\". \"ada1s3__e__\" is the fifth "
+"partition in the third slice of the second SATA disk drive."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1324
+msgid ""
+"Finally, each disk on the system is identified. A disk name starts with a "
+"code that indicates the type of disk, and then a number, indicating which "
+"disk it is. Unlike partitions and slices, disk numbering starts at 0. "
+"Common codes are listed in <<disks-naming>>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1328
+msgid ""
+"When referring to a partition in a slice, include the disk name, `s`, the "
+"slice number, and then the partition letter. Examples are shown in <<basics-"
+"disk-slice-part>>. GPT partitions include the disk name, `p`, and then the "
+"partition number."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1330
+msgid ""
+"<<basics-concept-disk-model>> shows a conceptual model of a disk layout "
+"using MBR slices."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1335
+msgid ""
+"When installing FreeBSD, configure the disk slices if using MBR, and create "
+"partitions within the slice to be used for FreeBSD. If using GPT, configure "
+"partitions for each file system. In either case, create a file system or "
+"swap space in each partition, and decide where each file system will be "
+"mounted. See man:gpart[8] for information on manipulating partitions."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/basics/_index.adoc:1337
+#, no-wrap
+msgid "Disk Device Names"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1341
+#, no-wrap
+msgid "Drive Type"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1343
+#, no-wrap
+msgid "Drive Device Name"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1344
+#, no-wrap
+msgid "SATA and IDE hard drives"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1346
+#, no-wrap
+msgid "`ada`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1347
+#, no-wrap
+msgid "SCSI hard drives and USB storage devices"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1349
+#, no-wrap
+msgid "`da`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1350
+#, no-wrap
+msgid "NVMe storage"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1352
+#, no-wrap
+msgid "`nvd` or `nda`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1353
+#, no-wrap
+msgid "SATA and IDE CD-ROM drives"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1355
+#: documentation/content/en/books/handbook/basics/_index.adoc:1358
+#, no-wrap
+msgid "`cd`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1356
+#, no-wrap
+msgid "SCSI CD-ROM drives"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1359
+#, no-wrap
+msgid "Floppy drives"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1361
+#, no-wrap
+msgid "`fd`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1362
+#, no-wrap
+msgid "SCSI tape drives"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1364
+#, no-wrap
+msgid "`sa`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1365
+#, no-wrap
+msgid "RAID drives"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1366
+#, no-wrap
+msgid "Examples include `aacd` for Adaptec(R) AdvancedRAID, `mlxd` and `mlyd` for Mylex(R), `amrd` for AMI MegaRAID(R), `idad` for Compaq Smart RAID, `twed` for 3ware(R) RAID."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/basics/_index.adoc:1371
+#, no-wrap
+msgid "Sample Disk, Slice, and Partition Names"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1376
+#, no-wrap
+msgid "Name"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1378
+#, no-wrap
+msgid "Meaning"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1379
+#, no-wrap
+msgid "`ada0s1a`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1381
+#, no-wrap
+msgid "The first partition (`a`) on the first slice (`s1`) on the first SATA disk (`ada0`)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1382
+#, no-wrap
+msgid "`da1s2e`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1383
+#, no-wrap
+msgid "The fifth partition (`e`) on the second slice (`s2`) on the second SCSI disk (`da1`)."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/basics/_index.adoc:1387
+#, no-wrap
+msgid "Conceptual Model of a Disk"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1394
+msgid ""
+"This diagram shows FreeBSD's view of the first SATA disk attached to the "
+"system. Assume that the disk is 250 GB in size, and contains an 80 GB slice "
+"and a 170 GB slice (MS-DOS(R) partitions). The first slice contains a "
+"Windows(R) NTFS file system, `C:`, and the second slice contains a FreeBSD "
+"installation. This example FreeBSD installation has four data partitions "
+"and a swap partition."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1398
+msgid ""
+"The four partitions each hold a file system. Partition `a` is used for the "
+"root file system, `d` for `/var/`, `e` for `/tmp/`, and `f` for `/usr/`. "
+"Partition letter `c` refers to the entire slice, and so is not used for "
+"ordinary partitions."
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/basics/_index.adoc:1399
+#, no-wrap
+msgid "Layout of a shared drive between Windows and FreeBSD"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/basics/_index.adoc:1399
+#, no-wrap
+msgid "disk-layout.png"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/basics/_index.adoc:1403
+#, no-wrap
+msgid "Mounting and Unmounting File Systems"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1406
+msgid ""
+"The file system is best visualized as a tree, rooted, as it were, at `/`. `/"
+"dev`, `/usr`, and the other directories in the root directory are branches, "
+"which may have their own branches, such as `/usr/local`, and so on."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1410
+msgid ""
+"There are various reasons to house some of these directories on separate "
+"file systems. `/var` contains the directories `log/`, `spool/`, and various "
+"types of temporary files, and as such, may get filled up. Filling up the "
+"root file system is not a good idea, so splitting `/var` from `/` is often "
+"favorable."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1412
+msgid ""
+"Another common reason to contain certain directory trees on other file "
+"systems is if they are to be housed on separate physical disks, or are "
+"separate virtual disks, such as Network File System mounts, described in "
+"crossref:network-servers[network-nfs,“Network File System (NFS)”], or CDROM "
+"drives."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/basics/_index.adoc:1414
+#, no-wrap
+msgid "The fstab File"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1418
+msgid ""
+"During the boot process (crossref:boot[boot,The FreeBSD Booting Process]), "
+"file systems listed in `/etc/fstab` are automatically mounted except for the "
+"entries containing `noauto`. This file contains entries in the following "
+"format:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1422
+#, no-wrap
+msgid "device /mount-point fstype options dumpfreq passno\n"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/basics/_index.adoc:1424
+#, no-wrap
+msgid "`device`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1426
+msgid "An existing device name as explained in <<disks-naming>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/basics/_index.adoc:1427
+#, no-wrap
+msgid "`mount-point`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1429
+msgid "An existing directory on which to mount the file system."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/basics/_index.adoc:1430
+#, no-wrap
+msgid "`fstype`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1433
+msgid ""
+"The file system type to pass to man:mount[8]. The default FreeBSD file "
+"system is `ufs`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/basics/_index.adoc:1434
+#, no-wrap
+msgid "`options`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1438
+msgid ""
+"Either `rw` for read-write file systems, or `ro` for read-only file systems, "
+"followed by any other options that may be needed. A common option is "
+"`noauto` for file systems not normally mounted during the boot sequence. "
+"Other options are listed in man:mount[8]."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/basics/_index.adoc:1439
+#, no-wrap
+msgid "`dumpfreq`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1442
+msgid ""
+"Used by man:dump[8] to determine which file systems require dumping. If the "
+"field is missing, a value of zero is assumed."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/basics/_index.adoc:1443
+#, no-wrap
+msgid "`passno`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1449
+msgid ""
+"Determines the order in which UFS file systems should be checked by man:"
+"fsck[8] after a reboot. File systems that should be skipped should have "
+"their `passno` set to zero. The root file system needs to be checked before "
+"everything else and should have its `passno` set to one. The other file "
+"systems should be set to values greater than one. If more than one file "
+"system has the same `passno`, man:fsck[8] will attempt to check file systems "
+"in parallel if possible."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1451
+msgid ""
+"Refer to man:fstab[5] for more information on the format of `/etc/fstab` and "
+"its options."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/basics/_index.adoc:1453
+#, no-wrap
+msgid "Using man:mount[8]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1457
+msgid ""
+"File systems are mounted using man:mount[8]. The most basic syntax is as "
+"follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1463
+#, no-wrap
+msgid "# mount device mountpoint\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1467
+msgid ""
+"A file system listed in `/etc/fstab` can also be mounted by providing just "
+"the mountpoint."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1470
+msgid ""
+"This command provides many options which are described in man:mount[8]. The "
+"most commonly used options include:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/basics/_index.adoc:1471
+#, no-wrap
+msgid "Mount Options"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/basics/_index.adoc:1472
+#, no-wrap
+msgid "`-a`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1474
+msgid ""
+"Mount all the file systems listed in `/etc/fstab`, except those marked as "
+"\"noauto\", excluded by the `-t` flag, or those that are already mounted."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/basics/_index.adoc:1475
+#, no-wrap
+msgid "`-d`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1478
+msgid ""
+"Do everything except for the actual mount system call. This option is "
+"useful in conjunction with the `-v` flag to determine what man:mount[8] is "
+"actually trying to do."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/basics/_index.adoc:1479
+#, no-wrap
+msgid "`-f`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1481
+msgid ""
+"Force the mount of an unclean file system (dangerous), or the revocation of "
+"write access when downgrading a file system's mount status from read-write "
+"to read-only."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/basics/_index.adoc:1482
+#, no-wrap
+msgid "`-r`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1485
+msgid "Mount the file system read-only. This is identical to using `-o ro`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/basics/_index.adoc:1486
+#, no-wrap
+msgid "``-t _fstype_``"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1489
+msgid ""
+"Mount the specified file system type or mount only file systems of the given "
+"type, if `-a` is included. \"ufs\" is the default file system type."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/basics/_index.adoc:1490
+#, no-wrap
+msgid "`-u`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1492
+msgid "Update mount options on the file system."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/basics/_index.adoc:1493
+#, no-wrap
+msgid "`-v`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1495
+msgid "Be verbose."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/basics/_index.adoc:1496
+#, no-wrap
+msgid "`-w`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1498
+msgid "Mount the file system read-write."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1500
+msgid "The following options can be passed to `-o` as a comma-separated list:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/basics/_index.adoc:1501
+#, no-wrap
+msgid "nosuid"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1504
+msgid ""
+"Do not interpret setuid or setgid flags on the file system. This is also a "
+"useful security option."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/basics/_index.adoc:1506
+#, no-wrap
+msgid "Using man:umount[8]"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1510
+msgid ""
+"To unmount a file system use man:umount[8]. This command takes one "
+"parameter which can be a mountpoint, device name, `-a` or `-A`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1513
+msgid ""
+"All forms take `-f` to force unmounting, and `-v` for verbosity. Be warned "
+"that `-f` is not generally a good idea as it might crash the computer or "
+"damage data on the file system."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1516
+msgid ""
+"To unmount all mounted file systems, or just the file system types listed "
+"after `-t`, use `-a` or `-A`. Note that `-A` does not attempt to unmount "
+"the root file system."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/basics/_index.adoc:1518
+#, no-wrap
+msgid "Processes and Daemons"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1523
+msgid ""
+"FreeBSD is a multi-tasking operating system. Each program running at any "
+"one time is called a _process_. Every running command starts at least one "
+"new process and there are a number of system processes that are run by "
+"FreeBSD."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1529
+msgid ""
+"Each process is uniquely identified by a number called a _process ID_ "
+"(PID). Similar to files, each process has one owner and group, and the "
+"owner and group permissions are used to determine which files and devices "
+"the process can open. Most processes also have a parent process that "
+"started them. For example, the shell is a process, and any command started "
+"in the shell is a process which has the shell as its parent process. The "
+"exception is a special process called man:init[8] which is always the first "
+"process to start at boot time and which always has a PID of `1`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1536
+msgid ""
+"Some programs are not designed to be run with continuous user input and "
+"disconnect from the terminal at the first opportunity. For example, a web "
+"server responds to web requests, rather than user input. Mail servers are "
+"another example of this type of application. These types of programs are "
+"known as _daemons_. The term daemon comes from Greek mythology and "
+"represents an entity that is neither good nor evil, and which invisibly "
+"performs useful tasks. This is why the BSD mascot is the cheerful-looking "
+"daemon with sneakers and a pitchfork."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1542
+msgid ""
+"There is a convention to name programs that normally run as daemons with a "
+"trailing \"d\". For example, BIND is the Berkeley Internet Name Domain, but "
+"the actual program that executes is `named`. The Apache web server program "
+"is `httpd` and the line printer spooling daemon is `lpd`. This is only a "
+"naming convention. For example, the main mail daemon for the Sendmail "
+"application is `sendmail`, and not `maild`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/basics/_index.adoc:1543
+#, no-wrap
+msgid "Viewing Processes"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1548
+msgid ""
+"To see the processes running on the system, use man:ps[1] or man:top[1]. To "
+"display a static list of the currently running processes, their PIDs, how "
+"much memory they are using, and the command they were started with, use man:"
+"ps[1]. To display all the running processes and update the display every "
+"few seconds in order to interactively see what the computer is doing, use "
+"man:top[1]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1551
+msgid ""
+"By default, man:ps[1] only shows the commands that are running and owned by "
+"the user. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1555
+#, no-wrap
+msgid "% ps\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1564
+#, no-wrap
+msgid ""
+" PID TT STAT TIME COMMAND\n"
+"8203 0 Ss 0:00.59 /bin/csh\n"
+"8895 0 R+ 0:00.00 ps\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1574
+msgid ""
+"The output from man:ps[1] is organized into a number of columns. The `PID` "
+"column displays the process ID. PIDs are assigned starting at 1, go up to "
+"99999, then wrap around back to the beginning. However, a PID is not "
+"reassigned if it is already in use. The `TT` column shows the tty the "
+"program is running on and `STAT` shows the program's state. `TIME` is the "
+"amount of time the program has been running on the CPU. This is usually not "
+"the elapsed time since the program was started, as most programs spend a lot "
+"of time waiting for things to happen before they need to spend time on the "
+"CPU. Finally, `COMMAND` is the command that was used to start the program."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1577
+msgid ""
+"A number of different options are available to change the information that "
+"is displayed. One of the most useful sets is `auxww`, where `a` displays "
+"information about all the running processes of all users, `u` displays the "
+"username and memory usage of the process' owner, `x` displays information "
+"about daemon processes, and `ww` causes man:ps[1] to display the full "
+"command line for each process, rather than truncating it once it gets too "
+"long to fit on the screen."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1579
+msgid "The output from man:top[1] is similar:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1583
+#, no-wrap
+msgid "% top\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1595
+#, no-wrap
+msgid ""
+"last pid: 9609; load averages: 0.56, 0.45, 0.36 up 0+00:20:03 10:21:46\n"
+"107 processes: 2 running, 104 sleeping, 1 zombie\n"
+"CPU: 6.2% user, 0.1% nice, 8.2% system, 0.4% interrupt, 85.1% idle\n"
+"Mem: 541M Active, 450M Inact, 1333M Wired, 4064K Cache, 1498M Free\n"
+"ARC: 992M Total, 377M MFU, 589M MRU, 250K Anon, 5280K Header, 21M Other\n"
+"Swap: 2048M Total, 2048M Free\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1608
+#, no-wrap
+msgid ""
+" PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND\n"
+" 557 root 1 -21 r31 136M 42296K select 0 2:20 9.96% Xorg\n"
+" 8198 dru 2 52 0 449M 82736K select 3 0:08 5.96% kdeinit4\n"
+" 8311 dru 27 30 0 1150M 187M uwait 1 1:37 0.98% firefox\n"
+" 431 root 1 20 0 14268K 1728K select 0 0:06 0.98% moused\n"
+" 9551 dru 1 21 0 16600K 2660K CPU3 3 0:01 0.98% top\n"
+" 2357 dru 4 37 0 718M 141M select 0 0:21 0.00% kdeinit4\n"
+" 8705 dru 4 35 0 480M 98M select 2 0:20 0.00% kdeinit4\n"
+" 8076 dru 6 20 0 552M 113M uwait 0 0:12 0.00% soffice.bin\n"
+" 2623 root 1 30 10 12088K 1636K select 3 0:09 0.00% powerd\n"
+" 2338 dru 1 20 0 440M 84532K select 1 0:06 0.00% kwin\n"
+" 1427 dru 5 22 0 605M 86412K select 1 0:05 0.00% kdeinit4\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1614
+msgid ""
+"The output is split into two sections. The header (the first five or six "
+"lines) shows the PID of the last process to run, the system load averages "
+"(which are a measure of how busy the system is), the system uptime (time "
+"since the last reboot) and the current time. The other figures in the "
+"header relate to how many processes are running, how much memory and swap "
+"space has been used, and how much time the system is spending in different "
+"CPU states. If the ZFS file system module has been loaded, an `ARC` line "
+"indicates how much data was read from the memory cache instead of from disk."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1619
+msgid ""
+"Below the header is a series of columns containing similar information to "
+"the output from man:ps[1], such as the PID, username, amount of CPU time, "
+"and the command that started the process. By default, man:top[1] also "
+"displays the amount of memory space taken by the process. This is split "
+"into two columns: one for total size and one for resident size. Total size "
+"is how much memory the application has needed and the resident size is how "
+"much it is actually using now."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1622
+msgid ""
+"man:top[1] automatically updates the display every two seconds. A different "
+"interval can be specified with `-s`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/basics/_index.adoc:1624
+#, no-wrap
+msgid "Killing Processes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1630
+msgid ""
+"One way to communicate with any running process or daemon is to send a "
+"_signal_ using man:kill[1]. There are a number of different signals; some "
+"have a specific meaning while others are described in the application's "
+"documentation. A user can only send a signal to a process they own and "
+"sending a signal to someone else's process will result in a permission "
+"denied error. The exception is the `root` user, who can send signals to "
+"anyone's processes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1634
+msgid ""
+"The operating system can also send a signal to a process. If an application "
+"is badly written and tries to access memory that it is not supposed to, "
+"FreeBSD will send the process the \"Segmentation Violation\" signal "
+"(`SIGSEGV`). If an application has been written to use the man:alarm[3] "
+"system call to be alerted after a period of time has elapsed, it will be "
+"sent the \"Alarm\" signal (`SIGALRM`)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1638
+msgid ""
+"Two signals can be used to stop a process: `SIGTERM` and `SIGKILL`. "
+"`SIGTERM` is the polite way to kill a process as the process can read the "
+"signal, close any log files it may have open, and attempt to finish what it "
+"is doing before shutting down. In some cases, a process may ignore "
+"`SIGTERM` if it is in the middle of some task that cannot be interrupted."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1641
+msgid ""
+"`SIGKILL` cannot be ignored by a process. Sending a `SIGKILL` to a process "
+"will usually stop that process there and then. footnote:[There are a few "
+"tasks that cannot be interrupted. For example, if the process is trying to "
+"read from a file that is on another computer on the network, and the other "
+"computer is unavailable, the process is said to be uninterruptible. "
+"Eventually the process will time out, typically after two minutes. As soon "
+"as this time out occurs the process will be killed.]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1644
+msgid ""
+"Other commonly used signals are `SIGHUP`, `SIGUSR1`, and `SIGUSR2`. Since "
+"these are general purpose signals, different applications will respond "
+"differently."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1649
+msgid ""
+"For example, after changing a web server's configuration file, the web "
+"server needs to be told to re-read its configuration. Restarting `httpd` "
+"would result in a brief outage period on the web server. Instead, send the "
+"daemon the `SIGHUP` signal. Be aware that different daemons will have "
+"different behavior, so refer to the documentation for the daemon to "
+"determine if `SIGHUP` will achieve the desired results."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1656
+msgid ""
+"Killing a random process on the system is a bad idea. In particular, man:"
+"init[8], PID 1, is special. Running `/bin/kill -s KILL 1` is a quick, and "
+"unrecommended, way to shutdown the system. _Always_ double check the "
+"arguments to man:kill[1] _before_ pressing kbd:[Return]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/basics/_index.adoc:1659
+#, no-wrap
+msgid "Shells"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1666
+msgid ""
+"A _shell_ provides a command line interface for interacting with the "
+"operating system. A shell receives commands from the input channel and "
+"executes them. Many shells provide built in functions to help with everyday "
+"tasks such as file management, file globbing, command line editing, command "
+"macros, and environment variables. FreeBSD comes with several shells, "
+"including the Bourne shell (man:sh[1]) and the extended C shell (man:"
+"tcsh[1]). Other shells are available from the FreeBSD Ports Collection, "
+"such as `zsh` and `bash`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1671
+msgid ""
+"The shell that is used is really a matter of taste. A C programmer might "
+"feel more comfortable with a C-like shell such as man:tcsh[1]. A Linux(R) "
+"user might prefer `bash`. Each shell has unique properties that may or may "
+"not work with a user's preferred working environment, which is why there is "
+"a choice of which shell to use."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1676
+msgid ""
+"One common shell feature is filename completion. After a user types the "
+"first few letters of a command or filename and presses kbd:[Tab], the shell "
+"completes the rest of the command or filename. Consider two files called "
+"`foobar` and `football`. To delete `foobar`, the user might type `rm foo` "
+"and press kbd:[Tab] to complete the filename."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1682
+msgid ""
+"But the shell only shows `rm foo`. It was unable to complete the filename "
+"because both `foobar` and `football` start with `foo`. Some shells sound a "
+"beep or show all the choices if more than one name matches. The user must "
+"then type more characters to identify the desired filename. Typing a `t` "
+"and pressing kbd:[Tab] again is enough to let the shell determine which "
+"filename is desired and fill in the rest."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1688
+msgid ""
+"Another feature of the shell is the use of environment variables. "
+"Environment variables are a variable/key pair stored in the shell's "
+"environment. This environment can be read by any program invoked by the "
+"shell, and thus contains a lot of program configuration. <<shell-env-vars>> "
+"provides a list of common environment variables and their meanings. Note "
+"that the names of environment variables are always in uppercase."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/basics/_index.adoc:1690
+#, no-wrap
+msgid "Common Environment Variables"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1694
+#, no-wrap
+msgid "Variable"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1697
+#, no-wrap
+msgid "`USER`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1699
+#, no-wrap
+msgid "Current logged in user's name."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1700
+#, no-wrap
+msgid "`PATH`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1702
+#, no-wrap
+msgid "Colon-separated list of directories to search for binaries."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1703
+#, no-wrap
+msgid "`DISPLAY`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1705
+#, no-wrap
+msgid "Network name of the Xorg display to connect to, if available."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1706
+#, no-wrap
+msgid "`SHELL`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1708
+#, no-wrap
+msgid "The current shell."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1709
+#, no-wrap
+msgid "`TERM`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1711
+#, no-wrap
+msgid "The name of the user's type of terminal. Used to determine the capabilities of the terminal."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1712
+#, no-wrap
+msgid "`TERMCAP`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1714
+#, no-wrap
+msgid "Database entry of the terminal escape codes to perform various terminal functions."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1715
+#, no-wrap
+msgid "`OSTYPE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1717
+#, no-wrap
+msgid "Type of operating system."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1718
+#, no-wrap
+msgid "`MACHTYPE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1720
+#, no-wrap
+msgid "The system's CPU architecture."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1721
+#, no-wrap
+msgid "`EDITOR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1723
+#, no-wrap
+msgid "The user's preferred text editor."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1724
+#, no-wrap
+msgid "`PAGER`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1726
+#, no-wrap
+msgid "The user's preferred utility for viewing text one page at a time."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1727
+#, no-wrap
+msgid "`MANPATH`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/basics/_index.adoc:1728
+#, no-wrap
+msgid "Colon-separated list of directories to search for manual pages."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1734
+msgid ""
+"How to set an environment variable differs between shells. In man:tcsh[1] "
+"and man:csh[1], use `setenv` to set environment variables. In man:sh[1] and "
+"`bash`, use `export` to set the current environment variables. This example "
+"sets the default `EDITOR` to `/usr/local/bin/emacs` for the man:tcsh[1] "
+"shell:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1738
+#, no-wrap
+msgid "% setenv EDITOR /usr/local/bin/emacs\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1741
+msgid "The equivalent command for `bash` would be:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1745
+#, no-wrap
+msgid "% export EDITOR=\"/usr/local/bin/emacs\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1749
+msgid ""
+"To expand an environment variable in order to see its current setting, type "
+"a `$` character in front of its name on the command line. For example, "
+"`echo $TERM` displays the current `$TERM` setting."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1754
+msgid ""
+"Shells treat special characters, known as meta-characters, as special "
+"representations of data. The most common meta-character is `\\*`, which "
+"represents any number of characters in a filename. Meta-characters can be "
+"used to perform filename globbing. For example, `echo *` is equivalent to "
+"`ls` because the shell takes all the files that match `*` and `echo` lists "
+"them on the command line."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1757
+msgid ""
+"To prevent the shell from interpreting a special character, escape it from "
+"the shell by starting it with a backslash (`\\`). For example, `echo $TERM` "
+"prints the terminal setting whereas `echo \\$TERM` literally prints the "
+"string `$TERM`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/basics/_index.adoc:1759
+#, no-wrap
+msgid "Changing the Shell"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1764
+msgid ""
+"The easiest way to permanently change the default shell is to use `chsh`. "
+"Running this command will open the editor that is configured in the `EDITOR` "
+"environment variable, which by default is set to man:vi[1]. Change the "
+"`Shell:` line to the full path of the new shell."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1767
+msgid ""
+"Alternately, use `chsh -s` which will set the specified shell without "
+"opening an editor. For example, to change the shell to `bash`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1771
+#, no-wrap
+msgid "% chsh -s /usr/local/bin/bash\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1775
+msgid ""
+"Enter your password at the prompt and press kbd:[Return] to change your "
+"shell. Log off and log in again to start using the new shell."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1781
+msgid ""
+"The new shell _must_ be present in `/etc/shells`. If the shell was "
+"installed from the FreeBSD Ports Collection as described in crossref:"
+"ports[ports,Installing Applications: Packages and Ports], it should be "
+"automatically added to this file. If it is missing, add it using this "
+"command, replacing the path with the path of the shell:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1785
+#, no-wrap
+msgid "# echo /usr/local/bin/bash >> /etc/shells\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1788
+msgid "Then, rerun man:chsh[1]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/basics/_index.adoc:1790
+#, no-wrap
+msgid "Advanced Shell Techniques"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1794
+msgid ""
+"The UNIX(R) shell is not just a command interpreter, it acts as a powerful "
+"tool which allows users to execute commands, redirect their output, redirect "
+"their input and chain commands together to improve the final command "
+"output. When this functionality is mixed with built in commands, the user "
+"is provided with an environment that can maximize efficiency."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1797
+msgid ""
+"Shell redirection is the action of sending the output or the input of a "
+"command into another command or into a file. To capture the output of the "
+"man:ls[1] command, for example, into a file, redirect the output:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1801
+#, no-wrap
+msgid "% ls > directory_listing.txt\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1806
+msgid ""
+"The directory contents will now be listed in `directory_listing.txt`. Some "
+"commands can be used to read input, such as man:sort[1]. To sort this "
+"listing, redirect the input:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1810
+#, no-wrap
+msgid "% sort < directory_listing.txt\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1814
+msgid ""
+"The input will be sorted and placed on the screen. To redirect that input "
+"into another file, one could redirect the output of man:sort[1] by mixing "
+"the direction:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1818
+#, no-wrap
+msgid "% sort < directory_listing.txt > sorted.txt\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1826
+msgid ""
+"In all of the previous examples, the commands are performing redirection "
+"using file descriptors. Every UNIX(R) system has file descriptors, which "
+"include standard input (stdin), standard output (stdout), and standard error "
+"(stderr). Each one has a purpose, where input could be a keyboard or a "
+"mouse, something that provides input. Output could be a screen or paper in "
+"a printer. And error would be anything that is used for diagnostic or error "
+"messages. All three are considered I/O based file descriptors and sometimes "
+"considered streams."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1829
+msgid ""
+"Through the use of these descriptors, the shell allows output and input to "
+"be passed around through various commands and redirected to or from a file. "
+"Another method of redirection is the pipe operator."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1832
+msgid ""
+"The UNIX(R) pipe operator, \"|\" allows the output of one command to be "
+"directly passed or directed to another program. Basically, a pipe allows "
+"the standard output of a command to be passed as standard input to another "
+"command, for example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1836
+#, no-wrap
+msgid "% cat directory_listing.txt | sort | less\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1840
+msgid ""
+"In that example, the contents of `directory_listing.txt` will be sorted and "
+"the output passed to man:less[1]. This allows the user to scroll through "
+"the output at their own pace and prevent it from scrolling off the screen."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/basics/_index.adoc:1842
+#, no-wrap
+msgid "Text Editors"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1846
+msgid ""
+"Most FreeBSD configuration is done by editing text files, so it is a good "
+"idea to become familiar with a text editor. FreeBSD comes with a few as "
+"part of the base system, and many more are available in the Ports Collection."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1853
+msgid ""
+"A simple editor to learn is man:ee[1], which stands for easy editor. To "
+"start this editor, type `ee _filename_` where _filename_ is the name of the "
+"file to be edited. Once inside the editor, all of the commands for "
+"manipulating the editor's functions are listed at the top of the display. "
+"The caret (`^`) represents kbd:[Ctrl], so `^e` expands to kbd:[Ctrl+e]. To "
+"leave man:ee[1], press kbd:[Esc], then choose the \"leave editor\" option "
+"from the main menu. The editor will prompt to save any changes if the file "
+"has been modified."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1858
+msgid ""
+"FreeBSD also comes with more powerful text editors, such as man:vi[1], as "
+"part of the base system. Other editors, like package:editors/emacs[] and "
+"package:editors/vim[], are part of the FreeBSD Ports Collection. These "
+"editors offer more functionality at the expense of being more complicated to "
+"learn. Learning a more powerful editor such as vim or Emacs can save more "
+"time in the long run."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1861
+msgid ""
+"Many applications which modify files or require typed input will "
+"automatically open a text editor. To change the default editor, set the "
+"`EDITOR` environment variable as described in <<shells>>."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/basics/_index.adoc:1863
+#, no-wrap
+msgid "Devices and Device Nodes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1868
+msgid ""
+"A device is a term used mostly for hardware-related activities in a system, "
+"including disks, printers, graphics cards, and keyboards. When FreeBSD "
+"boots, the majority of the boot messages refer to devices being detected. A "
+"copy of the boot messages is saved to `/var/run/dmesg.boot`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1871
+msgid ""
+"Each device has a device name and number. For example, `ada0` is the first "
+"SATA hard drive, while `kbd0` represents the keyboard."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1873
+msgid ""
+"Most devices in FreeBSD must be accessed through special files called device "
+"nodes, which are located in `/dev`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/basics/_index.adoc:1875
+#, no-wrap
+msgid "Manual Pages"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1880
+msgid ""
+"The most comprehensive documentation on FreeBSD is in the form of manual "
+"pages. Nearly every program on the system comes with a short reference "
+"manual explaining the basic operation and available arguments. These "
+"manuals can be viewed using `man`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1884
+#, no-wrap
+msgid "% man command\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1888
+msgid ""
+"where _command_ is the name of the command to learn about. For example, to "
+"learn more about man:ls[1], type:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1892
+#, no-wrap
+msgid "% man ls\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1896
+msgid ""
+"Manual pages are divided into sections which represent the type of topic. "
+"In FreeBSD, the following sections are available:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1898
+msgid "User commands."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1899
+msgid "System calls and error numbers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1900
+msgid "Functions in the C libraries."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1901
+msgid "Device drivers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1902
+msgid "File formats."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1903
+msgid "Games and other diversions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1904
+msgid "Miscellaneous information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1905
+msgid "System maintenance and operation commands."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1906
+msgid "System kernel interfaces."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1910
+msgid ""
+"In some cases, the same topic may appear in more than one section of the "
+"online manual. For example, there is a `chmod` user command and a `chmod()` "
+"system call. To tell man:man[1] which section to display, specify the "
+"section number:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1914
+#, no-wrap
+msgid "% man 1 chmod\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1918
+msgid ""
+"This will display the manual page for the user command man:chmod[1]. "
+"References to a particular section of the online manual are traditionally "
+"placed in parenthesis in written documentation, so man:chmod[1] refers to "
+"the user command and man:chmod[2] refers to the system call."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1920
+msgid ""
+"If the name of the manual page is unknown, use `man -k` to search for "
+"keywords in the manual page descriptions:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1924
+#, no-wrap
+msgid "% man -k mail\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1928
+msgid ""
+"This command displays a list of commands that have the keyword \"mail\" in "
+"their descriptions. This is equivalent to using man:apropos[1]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1930
+msgid "To read the descriptions for all of the commands in `/usr/sbin`, type:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1935
+#, no-wrap
+msgid ""
+"% cd /usr/sbin\n"
+"% man -f * | more\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1938
+msgid "or"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1943
+#, no-wrap
+msgid ""
+"% cd /usr/sbin\n"
+"% whatis * |more\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/basics/_index.adoc:1946
+#, no-wrap
+msgid "GNU Info Files"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1951
+msgid ""
+"FreeBSD includes several applications and utilities produced by the Free "
+"Software Foundation (FSF). In addition to manual pages, these programs may "
+"include hypertext documents called `info` files. These can be viewed using "
+"man:info[1] or, if package:editors/emacs[] is installed, the info mode of "
+"emacs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1953
+msgid "To use man:info[1], type:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/basics/_index.adoc:1957
+#, no-wrap
+msgid "% info\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/basics/_index.adoc:1960
+msgid ""
+"For a brief introduction, type `h`. For a quick command reference, type `?`."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/bibliography/_index.adoc b/documentation/content/en/books/handbook/bibliography/_index.adoc
index b5373676ae..201ee7bbdb 100644
--- a/documentation/content/en/books/handbook/bibliography/_index.adoc
+++ b/documentation/content/en/books/handbook/bibliography/_index.adoc
@@ -6,8 +6,8 @@ next: books/handbook/eresources
description: FreeBSD Handbook Bibliography
tags: ["appendix", "bibliography", "handbook", "books", "guides", "security", "periodicals", "journals", "magazines"]
showBookMenu: true
-weight: 40
-path: "/books/handbook/"
+weight: 42
+path: "/books/handbook/bibliography/"
---
[appendix]
@@ -53,102 +53,25 @@ While manual pages provide a definitive reference for individual pieces of the F
For this, there is no substitute for a good book or users' manual on UNIX(R) system administration.
[[bibliography-freebsd]]
-== Books Specific to FreeBSD
-
-International books:
-
-* http://jdli.tw.FreeBSD.org/publication/book/freebsd2/index.htm[Using FreeBSD] (in Traditional Chinese), published by http://www.drmaster.com.tw/[Drmaster], 1997. ISBN 9-578-39435-7.
-* FreeBSD Unleashed (Simplified Chinese translation), published by http://www.hzbook.com/[China Machine Press]. ISBN 7-111-10201-0.
-* FreeBSD From Scratch Second Edition (in Simplified Chinese), published by China Machine Press. ISBN 7-111-10286-X.
-* FreeBSD Handbook Second Edition (Simplified Chinese translation), published by http://www.ptpress.com.cn/[Posts & Telecom Press]. ISBN 7-115-10541-3.
-* FreeBSD & Windows (in Simplified Chinese), published by http://www.tdpress.com/[China Railway Publishing House]. ISBN 7-113-03845-X
-* FreeBSD Internet Services HOWTO (in Simplified Chinese), published by China Railway Publishing House. ISBN 7-113-03423-3
-* FreeBSD (in Japanese), published by CUTT. ISBN 4-906391-22-2 C3055 P2400E.
-* http://www.shoeisha.com/book/Detail.asp?bid=650[Complete Introduction to FreeBSD] (in Japanese), published by http://www.shoeisha.co.jp/[Shoeisha Co., Ltd]. ISBN 4-88135-473-6 P3600E.
-* http://www.ascii.co.jp/pb/book1/shinkan/detail/1322785.html[Personal UNIX Starter Kit FreeBSD] (in Japanese), published by http://www.ascii.co.jp/[ASCII]. ISBN 4-7561-1733-3 P3000E.
-* FreeBSD Handbook (Japanese translation), published by http://www.ascii.co.jp/[ASCII]. ISBN 4-7561-1580-2 P3800E.
-* FreeBSD mit Methode (in German), published by http://www.cul.de[Computer und Literatur Verlag]/Vertrieb Hanser, 1998. ISBN 3-932311-31-0.
-* http://www.mitp.de/vmi/mitp/detail/pWert/1343/[FreeBSD de Luxe] (in German), published by http://www.mitp.de[Verlag Modere Industrie], 2003. ISBN 3-8266-1343-0.
-* http://www.pc.mycom.co.jp/FreeBSD/install-manual.html[FreeBSD Install and Utilization Manual] (in Japanese), published by http://www.pc.mycom.co.jp/[Mainichi Communications Inc.], 1998. ISBN 4-8399-0112-0.
-* Onno W Purbo, Dodi Maryanto, Syahrial Hubbany, Widjil Widodo _http://maxwell.itb.ac.id/[Building Internet Server with FreeBSD]_ (in Indonesia Language), published by http://www.elexmedia.co.id/[Elex Media Komputindo].
-* Absolute BSD: The Ultimate Guide to FreeBSD (Traditional Chinese translation), published by http://www.grandtech.com.tw/[GrandTech Press], 2003. ISBN 986-7944-92-5.
-* http://www.twbsd.org/cht/book/[The FreeBSD 6.0 Book] (in Traditional Chinese), published by Drmaster, 2006. ISBN 9-575-27878-X.
-
-English language books:
-
-* Absolute FreeBSD: The Complete Guide To FreeBSD, Third Edition, published by http://www.nostarch.com/[No Starch Press], 2018. ISBN: 9781593278922
-* The Complete FreeBSD, published by http://www.oreilly.com/[O'Reilly], 2003. ISBN: 0596005164
-* http://www.freebsdmall.com/cgi-bin/fm/bsdcomp[The Complete FreeBSD], published by http://www.oreilly.com/[O'Reilly], 2003. ISBN: 0596005164
-* http://www.freebsd-corp-net-guide.com/[The FreeBSD Corporate Networker's Guide], published by http://www.awl.com/aw/[Addison-Wesley], 2000. ISBN: 0201704811
-* FreeBSD: An Open-Source Operating System for Your Personal Computer, published by The Bit Tree Press, 2001. ISBN: 0971204500
-* Teach Yourself FreeBSD in 24 Hours, published by http://www.samspublishing.com/[Sams], 2002. ISBN: 0672324245
-* FreeBSD 6 Unleashed, published by http://www.samspublishing.com/[Sams], 2006. ISBN: 0672328755
-* FreeBSD: The Complete Reference, published by http://books.mcgraw-hill.com[McGrawHill], 2003. ISBN: 0072224096
-
-[[bibliography-userguides]]
-== Users' Guides
-
-* Ohio State University has written a http://www.cs.duke.edu/csl/docs/unix_course/[UNIX Introductory Course] which is available online in HTML and PostScript format.
-+
-An Italian https://www.FreeBSD.org/doc/it_IT.ISO8859-15/books/unix-introduction/[translation] of this document is available as part of the FreeBSD Italian Documentation Project.
-* http://www.jp.FreeBSD.org/[Jpman Project, Japan FreeBSD Users Group]. FreeBSD User's Reference Manual (Japanese translation). http://www.pc.mycom.co.jp/[Mainichi Communications Inc.], 1998. ISBN4-8399-0088-4 P3800E.
-* http://www.ed.ac.uk/[Edinburgh University] has written an http://www.ed.ac.uk/information-services/help-consultancy/is-skills/catalogue/program-op-sys-catalogue/unix1[Online Guide] for newcomers to the UNIX environment.
-
-[[bibliography-adminguides]]
-== Administrators' Guides
-
-* http://www.jp.FreeBSD.org/[Jpman Project, Japan FreeBSD Users Group]. FreeBSD System Administrator's Manual (Japanese translation). http://www.pc.mycom.co.jp/[Mainichi Communications Inc.], 1998. ISBN4-8399-0109-0 P3300E.
-* Dreyfus, Emmanuel. http://www.eyrolles.com/Informatique/Livre/9782212114638/[Cahiers de l'Admin: BSD] 2nd Ed. (in French), Eyrolles, 2004. ISBN 2-212-11463-X
-
-[[bibliography-programmers]]
-== Programmers' Guides
-
-* Computer Systems Research Group, UC Berkeley. _4.4BSD Programmer's Reference Manual_. O'Reilly & Associates, Inc., 1994. ISBN 1-56592-078-3
-* Computer Systems Research Group, UC Berkeley. _4.4BSD Programmer's Supplementary Documents_. O'Reilly & Associates, Inc., 1994. ISBN 1-56592-079-1
-* Harbison, Samuel P. and Steele, Guy L. Jr. _C: A Reference Manual_. 4th Ed. Prentice Hall, 1995. ISBN 0-13-326224-3
-* Kernighan, Brian and Dennis M. Ritchie. _The C Programming Language_. 2nd Ed. PTR Prentice Hall, 1988. ISBN 0-13-110362-8
-* Lehey, Greg. _Porting UNIX Software_. O'Reilly & Associates, Inc., 1995. ISBN 1-56592-126-7
-* Plauger, P. J. _The Standard C Library_. Prentice Hall, 1992. ISBN 0-13-131509-9
-* Spinellis, Diomidis. http://www.spinellis.gr/codereading/[Code Reading: The Open Source Perspective]. Addison-Wesley, 2003. ISBN 0-201-79940-5
-* Spinellis, Diomidis. http://www.spinellis.gr/codequality/[Code Quality: The Open Source Perspective]. Addison-Wesley, 2006. ISBN 0-321-16607-8
-* Stevens, W. Richard and Stephen A. Rago. _Advanced Programming in the UNIX Environment_. 2nd Ed. Reading, Mass. : Addison-Wesley, 2005. ISBN 0-201-43307-9
-* Stevens, W. Richard. _UNIX Network Programming_. 2nd Ed, PTR Prentice Hall, 1998. ISBN 0-13-490012-X
-
-[[bibliography-osinternals]]
-== Operating System Internals
-
-* Andleigh, Prabhat K. _UNIX System Architecture_. Prentice-Hall, Inc., 1990. ISBN 0-13-949843-5
-* Jolitz, William. "Porting UNIX to the 386". _Dr. Dobb's Journal_. January 1991-July 1992.
-* Leffler, Samuel J., Marshall Kirk McKusick, Michael J Karels and John Quarterman _The Design and Implementation of the 4.3BSD UNIX Operating System_. Reading, Mass. : Addison-Wesley, 1989. ISBN 0-201-06196-1
-* Leffler, Samuel J., Marshall Kirk McKusick, _The Design and Implementation of the 4.3BSD UNIX Operating System: Answer Book_. Reading, Mass. : Addison-Wesley, 1991. ISBN 0-201-54629-9
-* McKusick, Marshall Kirk, Keith Bostic, Michael J Karels, and John Quarterman. _The Design and Implementation of the 4.4BSD Operating System_. Reading, Mass. : Addison-Wesley, 1996. ISBN 0-201-54979-4
-+
-(Chapter 2 of this book is available extref:{design-44bsd}[online] as part of the FreeBSD Documentation Project.)
-* Marshall Kirk McKusick, George V. Neville-Neil _The Design and Implementation of the FreeBSD Operating System_. Boston, Mass. : Addison-Wesley, 2004. ISBN 0-201-70245-2
-* Marshall Kirk McKusick, George V. Neville-Neil, Robert N. M. Watson _The Design and Implementation of the FreeBSD Operating System, 2nd Ed._. Westford, Mass. : Pearson Education, Inc., 2014. ISBN 0-321-96897-2
-* Stevens, W. Richard. _TCP/IP Illustrated, Volume 1: The Protocols_. Reading, Mass. : Addison-Wesley, 1996. ISBN 0-201-63346-9
-* Schimmel, Curt. _Unix Systems for Modern Architectures_. Reading, Mass. : Addison-Wesley, 1994. ISBN 0-201-63338-8
-* Stevens, W. Richard. _TCP/IP Illustrated, Volume 3: TCP for Transactions, HTTP, NNTP and the UNIX Domain Protocols_. Reading, Mass. : Addison-Wesley, 1996. ISBN 0-201-63495-3
-* Vahalia, Uresh. _UNIX Internals -- The New Frontiers_. Prentice Hall, 1996. ISBN 0-13-101908-2
-* Wright, Gary R. and W. Richard Stevens. _TCP/IP Illustrated, Volume 2: The Implementation_. Reading, Mass. : Addison-Wesley, 1995. ISBN 0-201-63354-X
+== FreeBSD Bibliography
+
+* *Absolute FreeBSD: The Complete Guide To FreeBSD*, Third Edition, published by link:https://nostarch.com/absfreebsd3[No Starch Press], 2018. ISBN: 978-1593278922
+* *FreeBSD Mastery: Storage Essentials*, published by link:https://www.tiltedwindmillpress.com/product/freebsd-mastery-storage-essentials/[Tilted Windmill Press], 2014. ISBN: 978-1642350098
+* *FreeBSD Mastery: Specialty Filesystems*, published by link:https://www.tiltedwindmillpress.com/product/fmspf/[Tilted Windmill Press], 2015. ISBN: 978-1642350111
+* *FreeBSD Mastery: ZFS*, published by link:https://www.tiltedwindmillpress.com/product/fmzfs/[Tilted Windmill Press], 2015. ISBN: 978-1642350005
+* *FreeBSD Mastery: Advanced ZFS*, published by link:https://www.tiltedwindmillpress.com/product/fmaz/[Tilted Windmill Press], 2016. ISBN: 978-0692688687
+* *FreeBSD Mastery: Jails*, published by link:https://www.tiltedwindmillpress.com/product/fmjail/[Tilted Windmill Press], 2019. ISBN: 978-1642350241
+* *FreeBSD Device Drivers: A Guide for the Intrepid*, published by link:https://nostarch.com/bsddrivers.htm[No Starch Press], 2012. ISBN: 978-1593272043
+* *The Design And Implementation Of The Freebsd Operating System*, Second Edition, published by link:https://www.pearson.com/store/p/design-and-implementation-of-the-freebsd-operating-system-the/P200000000463/9780321968975[Pearson Education, Inc.], 2014. ISBN: 978-0321968975
+* *UNIX and Linux System Administration Handbook*, Fifth Edition, published by link:https://www.pearson.com/en-us/subject-catalog/p/unix-and-linux-system-administration-handbook/P200000000513/9780137460359[Pearson Education, Inc.], 2017. ISBN: 978-0134277554
+* *Designing BSD Rootkits*, published by link:https://nostarch.com/rootkits.htm[No Starch Press], 2007. ISBN: 978-1593271428
+* *FreeBSD Jails using VNETs*, published in link:https://rderik.gumroad.com/l/uwOLZ[gumroad]
[[bibliography-security]]
== Security Reference
-* Cheswick, William R. and Steven M. Bellovin. _Firewalls and Internet Security: Repelling the Wily Hacker_. Reading, Mass. : Addison-Wesley, 1995. ISBN 0-201-63357-4
-* Garfinkel, Simson. _PGP Pretty Good Privacy_ O'Reilly & Associates, Inc., 1995. ISBN 1-56592-098-8
-
-[[bibliography-hardware]]
-== Hardware Reference
-
-* Anderson, Don and Tom Shanley. _Pentium Processor System Architecture_. 2nd Ed. Reading, Mass. : Addison-Wesley, 1995. ISBN 0-201-40992-5
-* Ferraro, Richard F. _Programmer's Guide to the EGA, VGA, and Super VGA Cards_. 3rd ed. Reading, Mass. : Addison-Wesley, 1995. ISBN 0-201-62490-7
-* Intel Corporation publishes documentation on their CPUs, chipsets and standards on their http://developer.intel.com/[developer web site], usually as PDF files.
-* Shanley, Tom. _80486 System Architecture_. 3rd Ed. Reading, Mass. : Addison-Wesley, 1995. ISBN 0-201-40994-1
-* Shanley, Tom. _ISA System Architecture_. 3rd Ed. Reading, Mass. : Addison-Wesley, 1995. ISBN 0-201-40996-8
-* Shanley, Tom. _PCI System Architecture_. 4th Ed. Reading, Mass. : Addison-Wesley, 1999. ISBN 0-201-30974-2
-* Van Gilluwe, Frank. _The Undocumented PC_, 2nd Ed. Reading, Mass: Addison-Wesley Pub. Co., 1996. ISBN 0-201-47950-8
-* Messmer, Hans-Peter. _The Indispensable PC Hardware Book_, 4th Ed. Reading, Mass : Addison-Wesley Pub. Co., 2002. ISBN 0-201-59616-4
+* *The Book of PF: A No-Nonsense Guide to the OpenBSD Firewall*, Third Edition, published by link:https://nostarch.com/pf3[No Starch Press], 2014. ISBN: 978-1593275891
+* *SSH Mastery: OpenSSH, PuTTY, Tunnels, and Keys*, Second Edition, 2018. ISBN: 978-1642350029
[[bibliography-history]]
== UNIX(R) History
@@ -166,8 +89,6 @@ An Italian https://www.FreeBSD.org/doc/it_IT.ISO8859-15/books/unix-introduction/
[[bibliography-journals]]
== Periodicals, Journals, and Magazines
-* http://www.admin-magazin.de/[Admin Magazin] (in German), published by Medialinx AG. ISSN: 2190-1066
-* http://www.bsdmag.org/[BSD Magazine], published by Software Press Sp. z o.o. SK. ISSN: 1898-9144
-* http://www.bsdnow.tv/[BSD Now - Video Podcast], published by Jupiter Broadcasting LLC
-* http://bsdtalk.blogspot.com/[BSD Talk Podcast], by Will Backman
-* http://freebsdjournal.com/[FreeBSD Journal], published by S&W Publishing, sponsored by The FreeBSD Foundation. ISBN: 978-0-615-88479-0
+* https://www.admin-magazin.de/[Admin Magazin] (in German), published by Medialinx AG. ISSN: 2190-1066
+* https://www.bsdnow.tv/[BSD Now - Video Podcast], published by Jupiter Broadcasting LLC
+* https://freebsdfoundation.org/our-work/journal/[FreeBSD Journal], published by S&W Publishing, sponsored by The FreeBSD Foundation. ISBN: 978-0-615-88479-0
diff --git a/documentation/content/en/books/handbook/bibliography/_index.po b/documentation/content/en/books/handbook/bibliography/_index.po
new file mode 100644
index 0000000000..d64c1c111d
--- /dev/null
+++ b/documentation/content/en/books/handbook/bibliography/_index.po
@@ -0,0 +1,243 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-04-20 20:56-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:1
+#, no-wrap
+msgid "FreeBSD Handbook Bibliography"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:1
+#, no-wrap
+msgid "Part V. Appendices"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:1
+#, no-wrap
+msgid "Appendix B. Bibliography"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:15
+#, no-wrap
+msgid "Bibliography"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:54
+msgid ""
+"While manual pages provide a definitive reference for individual pieces of "
+"the FreeBSD operating system, they seldom illustrate how to put the pieces "
+"together to make the whole operating system run smoothly. For this, there "
+"is no substitute for a good book or users' manual on UNIX(R) system "
+"administration."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:56
+#, no-wrap
+msgid "FreeBSD Bibliography"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:59
+#, no-wrap
+msgid "*Absolute FreeBSD: The Complete Guide To FreeBSD*, Third Edition, published by link:https://nostarch.com/absfreebsd3[No Starch Press], 2018. ISBN: 978-1593278922\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:60
+#, no-wrap
+msgid "*FreeBSD Mastery: Storage Essentials*, published by link:https://www.tiltedwindmillpress.com/product/freebsd-mastery-storage-essentials/[Tilted Windmill Press], 2014. ISBN: 978-1642350098\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:61
+#, no-wrap
+msgid "*FreeBSD Mastery: Specialty Filesystems*, published by link:https://www.tiltedwindmillpress.com/product/fmspf/[Tilted Windmill Press], 2015. ISBN: 978-1642350111\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:62
+#, no-wrap
+msgid "*FreeBSD Mastery: ZFS*, published by link:https://www.tiltedwindmillpress.com/product/fmzfs/[Tilted Windmill Press], 2015. ISBN: 978-1642350005\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:63
+#, no-wrap
+msgid "*FreeBSD Mastery: Advanced ZFS*, published by link:https://www.tiltedwindmillpress.com/product/fmaz/[Tilted Windmill Press], 2016. ISBN: 978-0692688687\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:64
+#, no-wrap
+msgid "*FreeBSD Mastery: Jails*, published by link:https://www.tiltedwindmillpress.com/product/fmjail/[Tilted Windmill Press], 2019. ISBN: 978-1642350241\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:65
+#, no-wrap
+msgid "*FreeBSD Device Drivers: A Guide for the Intrepid*, published by link:https://nostarch.com/bsddrivers.htm[No Starch Press], 2012. ISBN: 978-1593272043\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:66
+#, no-wrap
+msgid "*The Design And Implementation Of The Freebsd Operating System*, Second Edition, published by link:https://www.pearson.com/store/p/design-and-implementation-of-the-freebsd-operating-system-the/P200000000463/9780321968975[Pearson Education, Inc.], 2014. ISBN: 978-0321968975\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:67
+#, no-wrap
+msgid "*UNIX and Linux System Administration Handbook*, Fifth Edition, published by link:https://www.pearson.com/en-us/subject-catalog/p/unix-and-linux-system-administration-handbook/P200000000513/9780137460359[Pearson Education, Inc.], 2017. ISBN: 978-0134277554\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:68
+#, no-wrap
+msgid "*Designing BSD Rootkits*, published by link:https://nostarch.com/rootkits.htm[No Starch Press], 2007. ISBN: 978-1593271428\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:69
+#, no-wrap
+msgid "*FreeBSD Jails using VNETs*, published in link:https://rderik.gumroad.com/l/uwOLZ[gumroad]\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:71
+#, no-wrap
+msgid "Security Reference"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:74
+#, no-wrap
+msgid "*The Book of PF: A No-Nonsense Guide to the OpenBSD Firewall*, Third Edition, published by link:https://nostarch.com/pf3[No Starch Press], 2014. ISBN: 978-1593275891\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:75
+#, no-wrap
+msgid "*SSH Mastery: OpenSSH, PuTTY, Tunnels, and Keys*, Second Edition, 2018. ISBN: 978-1642350029\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:77
+#, no-wrap
+msgid "UNIX(R) History"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:80
+msgid ""
+"Lion, John _Lion's Commentary on UNIX, 6th Ed. With Source Code_. ITP Media "
+"Group, 1996. ISBN 1573980137"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:81
+msgid ""
+"Raymond, Eric S. _The New Hacker's Dictionary, 3rd edition_. MIT Press, "
+"1996. ISBN 0-262-68092-0. Also known as the http://www.catb.org/~esr/jargon/"
+"html/index.html[Jargon File]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:82
+msgid ""
+"Salus, Peter H. _A quarter century of UNIX_. Addison-Wesley Publishing "
+"Company, Inc., 1994. ISBN 0-201-54777-5"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:83
+msgid ""
+"Simon Garfinkel, Daniel Weise, Steven Strassmann. _The UNIX-HATERS "
+"Handbook_. IDG Books Worldwide, Inc., 1994. ISBN 1-56884-203-1. Out of "
+"print, but available http://www.simson.net/ref/ugh.pdf[online]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:84
+msgid ""
+"Don Libes, Sandy Ressler _Life with UNIX_ - special edition. Prentice-Hall, "
+"Inc., 1989. ISBN 0-13-536657-7"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:85
+msgid ""
+"_The BSD family tree_. https://cgit.freebsd.org/src/tree/share/misc/bsd-"
+"family-tree[https://cgit.freebsd.org/src/tree/share/misc/bsd-family-tree] or "
+"link:file://localhost/usr/share/misc/bsd-family-tree[/usr/share/misc/bsd-"
+"family-tree] on a FreeBSD machine."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:86
+msgid "_Networked Computer Science Technical Reports Library_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:87
+msgid ""
+"_Old BSD releases from the Computer Systems Research group (CSRG)_. http://"
+"www.mckusick.com/csrg/[http://www.mckusick.com/csrg/]: The 4CD set covers "
+"all BSD versions from 1BSD to 4.4BSD and 4.4BSD-Lite2 (but not 2.11BSD, "
+"unfortunately). The last disk also holds the final sources plus the SCCS "
+"files."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:88
+msgid ""
+"Kernighan, Brian _Unix: A History and a Memoir_. Kindle Direct Publishing, "
+"2020. ISBN 978-169597855-3"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:90
+#, no-wrap
+msgid "Periodicals, Journals, and Magazines"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:93
+msgid ""
+"https://www.admin-magazin.de/[Admin Magazin] (in German), published by "
+"Medialinx AG. ISSN: 2190-1066"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:94
+msgid ""
+"https://www.bsdnow.tv/[BSD Now - Video Podcast], published by Jupiter "
+"Broadcasting LLC"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bibliography/_index.adoc:94
+msgid ""
+"https://freebsdfoundation.org/our-work/journal/[FreeBSD Journal], published "
+"by S&W Publishing, sponsored by The FreeBSD Foundation. ISBN: "
+"978-0-615-88479-0"
+msgstr ""
diff --git a/documentation/content/en/books/handbook/book.adoc b/documentation/content/en/books/handbook/book.adoc
index 48e624eb9c..9d2b9980cb 100644
--- a/documentation/content/en/books/handbook/book.adoc
+++ b/documentation/content/en/books/handbook/book.adoc
@@ -2,7 +2,7 @@
title: FreeBSD Handbook
authors:
- author: The FreeBSD Documentation Project
-copyright: 1995-2022 The FreeBSD Documentation Project
+copyright: 1995-2024 The FreeBSD Documentation Project
description: A constantly evolving, comprehensive resource for FreeBSD users
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"]
tags: ["FreeBSD Handbook", "Handbook"]
@@ -70,6 +70,10 @@ include::{chapters-path}ports/_index.adoc[leveloffset=+1]
include::{chapters-path}x11/_index.adoc[leveloffset=+1]
+include::{chapters-path}wayland/_index.adoc[leveloffset=+1]
+
+include::{chapters-path}network/_index.adoc[leveloffset=+1]
+
// Section two
include::{chapters-path}partii.adoc[]
diff --git a/documentation/content/en/books/handbook/book.po b/documentation/content/en/books/handbook/book.po
new file mode 100644
index 0000000000..d63fc6074a
--- /dev/null
+++ b/documentation/content/en/books/handbook/book.po
@@ -0,0 +1,35 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-07-07 23:22-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/book.adoc:1
+#, no-wrap
+msgid "A constantly evolving, comprehensive resource for FreeBSD users"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/book.adoc:1
+#: documentation/content/en/books/handbook/book.adoc:12
+#, no-wrap
+msgid "FreeBSD Handbook"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/book.adoc:51
+msgid "'''"
+msgstr ""
diff --git a/documentation/content/en/books/handbook/boot/_index.adoc b/documentation/content/en/books/handbook/boot/_index.adoc
index ebf35c8079..88e5211209 100644
--- a/documentation/content/en/books/handbook/boot/_index.adoc
+++ b/documentation/content/en/books/handbook/boot/_index.adoc
@@ -1,13 +1,13 @@
---
-title: Chapter 13. The FreeBSD Booting Process
+title: Chapter 15. The FreeBSD Booting Process
part: Part III. System Administration
prev: books/handbook/config
next: books/handbook/security
description: An introduction to the FreeBSD Booting Process, demonstrates how to customize the FreeBSD boot process, including everything that happens until the FreeBSD kernel has started, probed for devices, and started init
tags: ["boot", "boot process", "device hints", "x86", "amd64", "MBR", "GPT", "UEFI", "bsdlabel", "boot0", "Single-User Mode", "Multi-User Mode"]
showBookMenu: true
-weight: 17
-path: "/books/handbook/"
+weight: 19
+path: "/books/handbook/boot/"
---
[[boot]]
@@ -18,7 +18,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 13
+:sectnumoffset: 15
:partnums:
:source-highlighter: rouge
:experimental:
@@ -97,7 +97,13 @@ Work is under way to provide direct UEFI booting.
The code within the MBR is typically referred to as a _boot manager_, especially when it interacts with the user.
The boot manager usually has more code in the first track of the disk or within the file system.
-Examples of boot managers include the standard FreeBSD boot manager boot0, also called Boot Easy, and Grub, which is used by many Linux(R) distributions.
+Examples of boot managers include the standard FreeBSD boot manager boot0, also called Boot Easy, and GNU GRUB, which is used by many Linux(R) distributions.
+
+[NOTE]
+====
+// There is extref:{faq}[a frequently asked question] about GRUB. Beyond the answer there, //
+Users of GRUB should refer to https://www.gnu.org/software/grub/grub-documentation.html[GNU-provided documentation].
+====
If only one operating system is installed, the MBR searches for the first bootable (active) slice on the disk, and then runs the code on that slice to load the remainder of the operating system.
When multiple operating systems are present, a different boot manager can be installed to display a list of operating systems so the user can select one to boot.
@@ -262,7 +268,7 @@ For a complete discussion of all available commands, refer to man:loader[8].
|===
Here are some practical examples of loader usage.
-To boot the usual kernel in single-user mode :
+To boot the usual kernel in single-user mode:
[source,shell]
....
diff --git a/documentation/content/en/books/handbook/boot/_index.po b/documentation/content/en/books/handbook/boot/_index.po
new file mode 100644
index 0000000000..4e293c341d
--- /dev/null
+++ b/documentation/content/en/books/handbook/boot/_index.po
@@ -0,0 +1,1005 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-07-15 16:41-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/boot/_index.adoc:1
+#, no-wrap
+msgid "An introduction to the FreeBSD Booting Process, demonstrates how to customize the FreeBSD boot process, including everything that happens until the FreeBSD kernel has started, probed for devices, and started init"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/boot/_index.adoc:1
+#, no-wrap
+msgid "Part III. System Administration"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/boot/_index.adoc:1
+#, no-wrap
+msgid "Chapter 15. The FreeBSD Booting Process"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/boot/_index.adoc:14
+#, no-wrap
+msgid "The FreeBSD Booting Process"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/boot/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:56
+msgid ""
+"The process of starting a computer and loading the operating system is "
+"referred to as \"the bootstrap process\", or \"booting\". FreeBSD's boot "
+"process provides a great deal of flexibility in customizing what happens "
+"when the system starts, including the ability to select from different "
+"operating systems installed on the same computer, different versions of the "
+"same operating system, or a different installed kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:60
+msgid ""
+"This chapter details the configuration options that can be set. It "
+"demonstrates how to customize the FreeBSD boot process, including everything "
+"that happens until the FreeBSD kernel has started, probed for devices, and "
+"started man:init[8]. This occurs when the text color of the boot messages "
+"changes from bright white to grey."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:62
+msgid "After reading this chapter, you will recognize:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:64
+msgid "The components of the FreeBSD bootstrap system and how they interact."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:65
+msgid ""
+"The options that can be passed to the components in the FreeBSD bootstrap in "
+"order to control the boot process."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:66
+msgid "The basics of setting device hints."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:67
+msgid ""
+"How to boot into single- and multi-user mode and how to properly shut down a "
+"FreeBSD system."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/boot/_index.adoc:71
+msgid ""
+"This chapter only describes the boot process for FreeBSD running on x86 and "
+"amd64 systems."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/boot/_index.adoc:74
+#, no-wrap
+msgid "FreeBSD Boot Process"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:80
+msgid ""
+"Turning on a computer and starting the operating system poses an interesting "
+"dilemma. By definition, the computer does not know how to do anything until "
+"the operating system is started. This includes running programs from the "
+"disk. If the computer can not run a program from the disk without the "
+"operating system, and the operating system programs are on the disk, how is "
+"the operating system started?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:85
+msgid ""
+"This problem parallels one in the book The Adventures of Baron Munchausen. "
+"A character had fallen part way down a manhole, and pulled himself out by "
+"grabbing his bootstraps and lifting. In the early days of computing, the "
+"term _bootstrap_ was applied to the mechanism used to load the operating "
+"system. It has since become shortened to \"booting\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:89
+msgid ""
+"On x86 hardware, the Basic Input/Output System (BIOS) is responsible for "
+"loading the operating system. The BIOS looks on the hard disk for the "
+"Master Boot Record (MBR), which must be located in a specific place on the "
+"disk. The BIOS has enough knowledge to load and run the MBR, and assumes "
+"that the MBR can then carry out the rest of the tasks involved in loading "
+"the operating system, possibly with the help of the BIOS."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/boot/_index.adoc:96
+msgid ""
+"FreeBSD provides for booting from both the older MBR standard, and the newer "
+"GUID Partition Table (GPT). GPT partitioning is often found on computers "
+"with the Unified Extensible Firmware Interface (UEFI). However, FreeBSD can "
+"boot from GPT partitions even on machines with only a legacy BIOS with man:"
+"gptboot[8]. Work is under way to provide direct UEFI booting."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:101
+msgid ""
+"The code within the MBR is typically referred to as a _boot manager_, "
+"especially when it interacts with the user. The boot manager usually has "
+"more code in the first track of the disk or within the file system. "
+"Examples of boot managers include the standard FreeBSD boot manager boot0, "
+"also called Boot Easy, and GNU GRUB, which is used by many Linux(R) "
+"distributions."
+msgstr ""
+
+#. There is extref:{faq}[a frequently asked question] about GRUB. Beyond the answer there, //
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/boot/_index.adoc:106
+msgid ""
+"Users of GRUB should refer to https://www.gnu.org/software/grub/grub-"
+"documentation.html[GNU-provided documentation]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:110
+msgid ""
+"If only one operating system is installed, the MBR searches for the first "
+"bootable (active) slice on the disk, and then runs the code on that slice to "
+"load the remainder of the operating system. When multiple operating systems "
+"are present, a different boot manager can be installed to display a list of "
+"operating systems so the user can select one to boot."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:117
+msgid ""
+"The remainder of the FreeBSD bootstrap system is divided into three stages. "
+"The first stage knows just enough to get the computer into a specific state "
+"and run the second stage. The second stage can do a little bit more, before "
+"running the third stage. The third stage finishes the task of loading the "
+"operating system. The work is split into three stages because the MBR puts "
+"limits on the size of the programs that can be run at stages one and two. "
+"Chaining the tasks together allows FreeBSD to provide a more flexible loader."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:120
+msgid ""
+"The kernel is then started and begins to probe for devices and initialize "
+"them for use. Once the kernel boot process is finished, the kernel passes "
+"control to the user process man:init[8], which makes sure the disks are in a "
+"usable state, starts the user-level resource configuration which mounts file "
+"systems, sets up network cards to communicate on the network, and starts the "
+"processes which have been configured to run at startup."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:122
+msgid ""
+"This section describes these stages in more detail and demonstrates how to "
+"interact with the FreeBSD boot process."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/boot/_index.adoc:124
+#, no-wrap
+msgid "The Boot Manager"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:128
+msgid ""
+"The boot manager code in the MBR is sometimes referred to as _stage zero_ of "
+"the boot process. By default, FreeBSD uses the boot0 boot manager."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:132
+msgid ""
+"The MBR installed by the FreeBSD installer is based on [.filename]#/boot/"
+"boot0#. The size and capability of boot0 is restricted to 446 bytes due to "
+"the slice table and `0x55AA` identifier at the end of the MBR. If boot0 and "
+"multiple operating systems are installed, a message similar to this example "
+"will be displayed at boot time:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/boot/_index.adoc:134
+#, no-wrap
+msgid "[.filename]#boot0# Screenshot"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/boot/_index.adoc:142
+#, no-wrap
+msgid ""
+"F1 Win\n"
+"F2 FreeBSD\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/boot/_index.adoc:144
+#, no-wrap
+msgid "Default: F2\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/boot/_index.adoc:150
+msgid ""
+"Other operating systems will overwrite an existing MBR if they are installed "
+"after FreeBSD. If this happens, or to replace the existing MBR with the "
+"FreeBSD MBR, use the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/boot/_index.adoc:154
+#, no-wrap
+msgid "# fdisk -B -b /boot/boot0 device\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:158
+msgid ""
+"where _device_ is the boot disk, such as [.filename]#ad0# for the first IDE "
+"disk, [.filename]#ad2# for the first IDE disk on a second IDE controller, or "
+"[.filename]#da0# for the first SCSI disk. To create a custom configuration "
+"of the MBR, refer to man:boot0cfg[8]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/boot/_index.adoc:160
+#, no-wrap
+msgid "Stage One and Stage Two"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:165
+msgid ""
+"Conceptually, the first and second stages are part of the same program on "
+"the same area of the disk. Due to space constraints, they have been split "
+"into two, but are always installed together. They are copied from the "
+"combined [.filename]#/boot/boot# by the FreeBSD installer or `bsdlabel`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:168
+msgid ""
+"These two stages are located outside file systems, in the first track of the "
+"boot slice, starting with the first sector. This is where boot0, or any "
+"other boot manager, expects to find a program to run which will continue the "
+"boot process."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:171
+msgid ""
+"The first stage, [.filename]#boot1#, is very simple, since it can only be "
+"512 bytes in size. It knows just enough about the FreeBSD _bsdlabel_, which "
+"stores information about the slice, to find and execute [.filename]#boot2#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:176
+msgid ""
+"Stage two, [.filename]#boot2#, is slightly more sophisticated, and "
+"understands the FreeBSD file system enough to find files. It can provide a "
+"simple interface to choose the kernel or loader to run. It runs loader, "
+"which is much more sophisticated and provides a boot configuration file. If "
+"the boot process is interrupted at stage two, the following interactive "
+"screen is displayed:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/boot/_index.adoc:178
+#, no-wrap
+msgid "[.filename]#boot2# Screenshot"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/boot/_index.adoc:187
+#, no-wrap
+msgid ""
+">> FreeBSD/i386 BOOT\n"
+"Default: 0:ad(0,a)/boot/loader\n"
+"boot:\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/boot/_index.adoc:192
+msgid ""
+"To replace the installed [.filename]#boot1# and [.filename]#boot2#, use "
+"`bsdlabel`, where _diskslice_ is the disk and slice to boot from, such as [."
+"filename]#ad0s1# for the first slice on the first IDE disk:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/boot/_index.adoc:196
+#, no-wrap
+msgid "# bsdlabel -B diskslice\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/boot/_index.adoc:202
+msgid ""
+"If just the disk name is used, such as [.filename]#ad0#, `bsdlabel` will "
+"create the disk in \"dangerously dedicated mode\", without slices. This is "
+"probably not the desired action, so double check the _diskslice_ before "
+"pressing kbd:[Return]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/boot/_index.adoc:205
+#, no-wrap
+msgid "Stage Three"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:209
+msgid ""
+"The loader is the final stage of the three-stage bootstrap process. It is "
+"located on the file system, usually as [.filename]#/boot/loader#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:211
+msgid ""
+"The loader is intended as an interactive method for configuration, using a "
+"built-in command set, backed up by a more powerful interpreter which has a "
+"more complex command set."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:214
+msgid ""
+"During initialization, loader will probe for a console and for disks, and "
+"figure out which disk it is booting from. It will set variables "
+"accordingly, and an interpreter is started where user commands can be passed "
+"from a script or interactively."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:217
+msgid ""
+"The loader will then read [.filename]#/boot/loader.rc#, which by default "
+"reads in [.filename]#/boot/defaults/loader.conf# which sets reasonable "
+"defaults for variables and reads [.filename]#/boot/loader.conf# for local "
+"changes to those variables. [.filename]#loader.rc# then acts on these "
+"variables, loading whichever modules and kernel are selected."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:222
+msgid ""
+"Finally, by default, loader issues a 10 second wait for key presses, and "
+"boots the kernel if it is not interrupted. If interrupted, the user is "
+"presented with a prompt which understands the command set, where the user "
+"may adjust variables, unload all modules, load modules, and then finally "
+"boot or reboot. <<boot-loader-commands>> lists the most commonly used "
+"loader commands. For a complete discussion of all available commands, refer "
+"to man:loader[8]."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/boot/_index.adoc:224
+#, no-wrap
+msgid "Loader Built-In Commands"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:228
+#, no-wrap
+msgid "Variable"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:230
+#: documentation/content/en/books/handbook/boot/_index.adoc:319
+#, no-wrap
+msgid "Description"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:231
+#, no-wrap
+msgid "autoboot _seconds_"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:233
+#, no-wrap
+msgid "Proceeds to boot the kernel if not interrupted within the time span given, in seconds. It displays a countdown, and the default time span is 10 seconds."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:234
+#, no-wrap
+msgid "boot [`-options`] [`kernelname`]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:236
+#, no-wrap
+msgid "Immediately proceeds to boot the kernel, with any specified options or kernel name. Providing a kernel name on the command-line is only applicable after an `unload` has been issued. Otherwise, the previously-loaded kernel will be used. If _kernelname_ is not qualified, it will be searched under _/boot/kernel_ and _/boot/modules_."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:237
+#, no-wrap
+msgid "boot-conf"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:239
+#, no-wrap
+msgid "Goes through the same automatic configuration of modules based on specified variables, most commonly `kernel`. This only makes sense if `unload` is used first, before changing some variables."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:240
+#, no-wrap
+msgid "help [`_topic_`]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:242
+#, no-wrap
+msgid "Shows help messages read from [.filename]#/boot/loader.help#. If the topic given is `index`, the list of available topics is displayed."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:243
+#, no-wrap
+msgid "include `_filename_` ..."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:245
+#, no-wrap
+msgid "Reads the specified file and interprets it line by line. An error immediately stops the `include`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:246
+#, no-wrap
+msgid "load [-t ``_type_``] `_filename_`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:248
+#, no-wrap
+msgid "Loads the kernel, kernel module, or file of the type given, with the specified filename. Any arguments after _filename_ are passed to the file. If _filename_ is not qualified, it will be searched under _/boot/kernel_ and _/boot/modules_."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:249
+#, no-wrap
+msgid "ls [-l] [``_path_``]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:251
+#, no-wrap
+msgid "Displays a listing of files in the given path, or the root directory, if the path is not specified. If `-l` is specified, file sizes will also be shown."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:252
+#, no-wrap
+msgid "lsdev [`-v`]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:254
+#, no-wrap
+msgid "Lists all of the devices from which it may be possible to load modules. If `-v` is specified, more details are printed."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:255
+#, no-wrap
+msgid "lsmod [`-v`]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:257
+#, no-wrap
+msgid "Displays loaded modules. If `-v` is specified, more details are shown."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:258
+#, no-wrap
+msgid "more `_filename_`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:260
+#, no-wrap
+msgid "Displays the files specified, with a pause at each `LINES` displayed."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:261
+#, no-wrap
+msgid "reboot"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:263
+#, no-wrap
+msgid "Immediately reboots the system."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:264
+#, no-wrap
+msgid "set `_variable_`, set `_variable=value_`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:266
+#, no-wrap
+msgid "Sets the specified environment variables."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:267
+#, no-wrap
+msgid "unload"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:268
+#, no-wrap
+msgid "Removes all loaded modules."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:272
+msgid ""
+"Here are some practical examples of loader usage. To boot the usual kernel "
+"in single-user mode:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/boot/_index.adoc:276
+#, no-wrap
+msgid " boot -s\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:279
+msgid ""
+"To unload the usual kernel and modules and then load the previous or "
+"another, specified kernel:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/boot/_index.adoc:284
+#, no-wrap
+msgid ""
+" unload\n"
+" load /path/to/kernelfile\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:287
+msgid ""
+"Use the qualified [.filename]#/boot/GENERIC/kernel# to refer to the default "
+"kernel that comes with an installation, or [.filename]#/boot/kernel.old/"
+"kernel#, to refer to the previously installed kernel before a system upgrade "
+"or before configuring a custom kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:290
+msgid ""
+"Use the following to load the usual modules with another kernel. Note that "
+"in this case it is not necessary the qualified name:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/boot/_index.adoc:296
+#, no-wrap
+msgid ""
+"unload\n"
+"set kernel=\"mykernel\"\n"
+"boot-conf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:299
+msgid "To load an automated kernel configuration script:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/boot/_index.adoc:303
+#, no-wrap
+msgid " load -t userconfig_script /boot/kernel.conf\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/boot/_index.adoc:306
+#, no-wrap
+msgid "Last Stage"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:311
+msgid ""
+"Once the kernel is loaded by either loader or by boot2, which bypasses "
+"loader, it examines any boot flags and adjusts its behavior as necessary. "
+"<<boot-kernel>> lists the commonly used boot flags. Refer to man:boot[8] "
+"for more information on the other boot flags."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/boot/_index.adoc:313
+#, no-wrap
+msgid "Kernel Interaction During Boot"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:317
+#, no-wrap
+msgid "Option"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:320
+#, no-wrap
+msgid "`-a`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:322
+#, no-wrap
+msgid "During kernel initialization, ask for the device to mount as the root file system."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:323
+#, no-wrap
+msgid "`-C`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:325
+#, no-wrap
+msgid "Boot the root file system from a CDROM."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:326
+#, no-wrap
+msgid "`-s`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:328
+#, no-wrap
+msgid "Boot into single-user mode."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:329
+#, no-wrap
+msgid "`-v`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/boot/_index.adoc:330
+#, no-wrap
+msgid "Be more verbose during kernel startup."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:334
+msgid ""
+"Once the kernel has finished booting, it passes control to the user process "
+"man:init[8], which is located at [.filename]#/sbin/init#, or the program "
+"path specified in the `init_path` variable in `loader`. This is the last "
+"stage of the boot process."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:338
+msgid ""
+"The boot sequence makes sure that the file systems available on the system "
+"are consistent. If a UFS file system is not, and `fsck` cannot fix the "
+"inconsistencies, init drops the system into single-user mode so that the "
+"system administrator can resolve the problem directly. Otherwise, the "
+"system boots into multi-user mode."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/boot/_index.adoc:340
+#, no-wrap
+msgid "Single-User Mode"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:345
+msgid ""
+"A user can specify this mode by booting with `-s` or by setting the "
+"`boot_single` variable in loader. It can also be reached by running "
+"`shutdown now` from multi-user mode. Single-user mode begins with this "
+"message:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/boot/_index.adoc:349
+#, no-wrap
+msgid "Enter full pathname of shell or RETURN for /bin/sh:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:353
+msgid ""
+"If the user presses kbd:[Enter], the system will enter the default Bourne "
+"shell. To specify a different shell, input the full path to the shell."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:358
+msgid ""
+"Single-user mode is usually used to repair a system that will not boot due "
+"to an inconsistent file system or an error in a boot configuration file. It "
+"can also be used to reset the `root` password when it is unknown. These "
+"actions are possible as the single-user mode prompt gives full, local access "
+"to the system and its configuration files. There is no networking in this "
+"mode."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:361
+msgid ""
+"While single-user mode is useful for repairing a system, it poses a security "
+"risk unless the system is in a physically secure location. By default, any "
+"user who can gain physical access to a system will have full control of that "
+"system after booting into single-user mode."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:364
+msgid ""
+"If the system `console` is changed to `insecure` in [.filename]#/etc/ttys#, "
+"the system will first prompt for the `root` password before initiating "
+"single-user mode. This adds a measure of security while removing the "
+"ability to reset the `root` password when it is unknown."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/boot/_index.adoc:366
+#, no-wrap
+msgid "Configuring an Insecure Console in [.filename]#/etc/ttys#"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/boot/_index.adoc:376
+#, no-wrap
+msgid ""
+"# name getty type status comments\n"
+"#\n"
+"# If console is marked \"insecure\", then init will ask for the root password\n"
+"# when going to single-user mode.\n"
+"console none unknown off insecure\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/boot/_index.adoc:381
+msgid ""
+"An `insecure` console means that physical security to the console is "
+"considered to be insecure, so only someone who knows the `root` password may "
+"use single-user mode."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/boot/_index.adoc:383
+#, no-wrap
+msgid "Multi-User Mode"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/boot/_index.adoc:386
+msgid ""
+"If init finds the file systems to be in order, or once the user has finished "
+"their commands in single-user mode and has typed `exit` to leave single-user "
+"mode, the system enters multi-user mode, in which it starts the resource "
+"configuration of the system."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/boot/_index.adoc:390
+msgid ""
+"The resource configuration system reads in configuration defaults from [."
+"filename]#/etc/defaults/rc.conf# and system-specific details from [."
+"filename]#/etc/rc.conf#. It then proceeds to mount the system file systems "
+"listed in [.filename]#/etc/fstab#. It starts up networking services, "
+"miscellaneous system daemons, then the startup scripts of locally installed "
+"packages."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/boot/_index.adoc:392
+msgid ""
+"To learn more about the resource configuration system, refer to man:rc[8] "
+"and examine the scripts located in [.filename]#/etc/rc.d#."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/boot/_index.adoc:394
+#, no-wrap
+msgid "Device Hints"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/boot/_index.adoc:399
+msgid ""
+"During initial system startup, the boot man:loader[8] reads man:device."
+"hints[5]. This file stores kernel boot information known as variables, "
+"sometimes referred to as \"device hints\". These \"device hints\" are used "
+"by device drivers for device configuration."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/boot/_index.adoc:404
+msgid ""
+"Device hints may also be specified at the Stage 3 boot loader prompt, as "
+"demonstrated in <<boot-loader>>. Variables can be added using `set`, "
+"removed with `unset`, and viewed `show`. Variables set in [.filename]#/boot/"
+"device.hints# can also be overridden. Device hints entered at the boot "
+"loader are not permanent and will not be applied on the next reboot."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/boot/_index.adoc:406
+msgid ""
+"Once the system is booted, man:kenv[1] can be used to dump all of the "
+"variables."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/boot/_index.adoc:409
+msgid ""
+"The syntax for [.filename]#/boot/device.hints# is one variable per line, "
+"using the hash \"#\" as comment markers. Lines are constructed as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/boot/_index.adoc:413
+#, no-wrap
+msgid " hint.driver.unit.keyword=\"value\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:416
+msgid "The syntax for the Stage 3 boot loader is:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/boot/_index.adoc:420
+#, no-wrap
+msgid " set hint.driver.unit.keyword=value\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:424
+msgid ""
+"where `driver` is the device driver name, `unit` is the device driver unit "
+"number, and `keyword` is the hint keyword. The keyword may consist of the "
+"following options:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:426
+msgid "`at`: specifies the bus which the device is attached to."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:427
+msgid "`port`: specifies the start address of the I/O to be used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:428
+msgid "`irq`: specifies the interrupt request number to be used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:429
+msgid "`drq`: specifies the DMA channel number."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:430
+msgid "`maddr`: specifies the physical memory address occupied by the device."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:431
+msgid "`flags`: sets various flag bits for the device."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:432
+msgid "`disabled`: if set to `1` the device is disabled."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:435
+msgid ""
+"Since device drivers may accept or require more hints not listed here, "
+"viewing a driver's manual page is recommended. For more information, refer "
+"to man:device.hints[5], man:kenv[1], man:loader.conf[5], and man:loader[8]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/boot/_index.adoc:437
+#, no-wrap
+msgid "Shutdown Sequence"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:440
+msgid ""
+"Upon controlled shutdown using man:shutdown[8], man:init[8] will attempt to "
+"run the script [.filename]#/etc/rc.shutdown#, and then proceed to send all "
+"processes the `TERM` signal, and subsequently the `KILL` signal to any that "
+"do not terminate in a timely manner."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:446
+msgid ""
+"To power down a FreeBSD machine on architectures and systems that support "
+"power management, use `shutdown -p now` to turn the power off immediately. "
+"To reboot a FreeBSD system, use `shutdown -r now`. One must be `root` or a "
+"member of `operator` in order to run man:shutdown[8]. One can also use man:"
+"halt[8] and man:reboot[8]. Refer to their manual pages and to man:"
+"shutdown[8] for more information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/boot/_index.adoc:448
+msgid ""
+"Modify group membership by referring to crossref:basics[users-"
+"synopsis,“Users and Basic Account Management”]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/boot/_index.adoc:452
+msgid ""
+"Power management requires man:acpi[4] to be loaded as a module or statically "
+"compiled into a custom kernel."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/bsdinstall/_index.adoc b/documentation/content/en/books/handbook/bsdinstall/_index.adoc
index 625462331d..8c5920c0c1 100644
--- a/documentation/content/en/books/handbook/bsdinstall/_index.adoc
+++ b/documentation/content/en/books/handbook/bsdinstall/_index.adoc
@@ -7,7 +7,7 @@ description: Guide about how to install FreeBSD, the minimum hardware requiremen
tags: ["bsdinstall", "installing FreeBSD", "requirements", "tutorial", "guide"]
showBookMenu: true
weight: 4
-path: "/books/handbook/"
+path: "/books/handbook/bsdinstall/"
---
[[bsdinstall]]
@@ -51,93 +51,50 @@ endif::[]
[[bsdinstall-synopsis]]
== Synopsis
-There are several different ways of getting FreeBSD to run, depending on the environment.
-Those are:
+FreeBSD supports different architectures including amd64, ARM(R), RISC-V(R), and PowerPC(R).
+Depending on the architecture and platform, different images can be link:https://www.freebsd.org/where/[downloaded] to install or directly run FreeBSD.
-* Virtual Machine images, to download and import on a virtual environment of choice. These can be downloaded from the https://www.freebsd.org/where/[Download FreeBSD] page. There are images for KVM ("qcow2"), VMWare ("vmdk"), Hyper-V ("vhd"), and raw device images that are universally supported. These are not installation images, but rather the preconfigured ("already installed") instances, ready to run and perform post-installation tasks.
-* Virtual Machine images available at Amazon's https://aws.amazon.com/marketplace/pp/prodview-ukzmy5dzc6nbq[AWS Marketplace], https://azuremarketplace.microsoft.com/en-US/marketplace/apps/thefreebsdfoundation.freebsd-13_0[Microsoft Azure Marketplace], and https://console.cloud.google.com/marketplace/product/freebsd-cloud/freebsd-13[Google Cloud Platform], to run on their respective hosting services. For more information on deploying FreeBSD on Azure please consult the relevant chapter in the https://docs.microsoft.com/en-us/azure/virtual-machines/linux/freebsd-intro-on-azure[Azure Documentation].
-* SD card images, for embedded systems such as Raspberry Pi or BeagleBone Black. These can be downloaded from the https://www.freebsd.org/where/[Download FreeBSD] page. These files must be uncompressed and written as a raw image to an SD card, from which the board will then boot.
-* Installation images, to install FreeBSD on a hard drive for the usual desktop, laptop, or server systems.
+The image types are:
-The rest of this chapter describes the fourth case, explaining how to install FreeBSD using the text-based installation program named bsdinstall.
+* Virtual Machine disk images, such as `qcow2`, `vmdk`, `vhd`, and raw device images. These are not installation images, but images that have FreeBSD preinstalled and ready for post-installation tasks. Virtual machine images are also commonly used in cloud environments.
+* SD card images, for embedded systems such as Raspberry Pi. These files must be uncompressed and written as a raw image to an SD card, from which the board will boot.
+* Installation images to boot from an ISO or USB device to install FreeBSD on a drive for the usual desktop, laptop, or server system.
-In general, the installation instructions in this chapter are written for the i386(TM) and AMD64 architectures.
-Where applicable, instructions specific to other platforms will be listed.
+The rest of this chapter describes the third case, explaining how to install FreeBSD using the text-based installation program named bsdinstall.
There may be minor differences between the installer and what is shown here, so use this chapter as a general guide rather than as a set of literal instructions.
-[NOTE]
-====
-Users who prefer to install FreeBSD using a graphical installer may be interested in https://ghostbsd.org[GhostBSD], https://www.midnightbsd.org[MidnightBSD] or https://nomadbsd.org[NomadBSD].
-====
-
After reading this chapter, you will know:
-* The minimum hardware requirements and FreeBSD supported architectures.
-* How to create the FreeBSD installation media.
+* How to obtain FreeBSD images and create FreeBSD installation media.
* How to start bsdinstall.
* The questions bsdinstall will ask, what they mean, and how to answer them.
* How to troubleshoot a failed installation.
* How to access a live version of FreeBSD before committing to an installation.
-Before reading this chapter, you should:
-
-* Read the supported hardware list that shipped with the version of FreeBSD to be installed and verify that the system's hardware is supported.
-
[[bsdinstall-hardware]]
== Minimum Hardware Requirements
-The hardware requirements to install FreeBSD vary by architecture.
+The hardware requirements to install FreeBSD vary by architecture and version.
Hardware architectures and devices supported by a FreeBSD release are listed on the link:https://www.FreeBSD.org/releases/[FreeBSD Release Information] page.
The link:https://www.FreeBSD.org/where/[FreeBSD download page] also has recommendations for choosing the correct image for different architectures.
-A FreeBSD installation requires a minimum of 96 MB of RAM and 1.5 GB of free hard drive space.
-However, such small amounts of memory and disk space are really only suitable for custom applications like embedded appliances.
-General-purpose desktop systems need more resources.
-2-4 GB RAM and at least 8 GB hard drive space is a good starting point.
-
-These are the processor requirements for each architecture:
-
-amd64::
-This is the most common desktop and laptop processor type, used in most modern systems.
-Intel(R) calls it Intel64.
-Other manufacturers sometimes call it x86-64.
-+
-Examples of amd64 compatible processors include: AMD Athlon(TM)64, AMD Opteron(TM), multi-core Intel(R) Xeon(TM), and Intel(R) Core(TM) 2 and later processors.
-
-i386::
-Older desktops and laptops often use this 32-bit, x86 architecture.
-+
-Almost all i386-compatible processors with a floating point unit are supported.
-All Intel(R) processors 486 or higher are supported.
-However, binaries released by the project are compiled for the 686 processor, so a special build will be needed for 486 and 586 systems.
-+
-FreeBSD will take advantage of Physical Address Extensions (PAE) support on CPUs with this feature.
-A kernel with the PAE feature enabled will detect memory above 4 GB and allow it to be used by the system.
-However, using PAE places constraints on device drivers and other features of FreeBSD.
-
-arm64::
-Most embedded boards are 64-bit ARM computers.
-A number of arm64 servers are supported.
-
-arm::
-Older armv7 boards are supported.
-
-powerpc::
-All New World ROM Apple(R) Mac(R) systems with built-in USB are supported.
-SMP is supported on machines with multiple CPUs.
-+
-A 32-bit kernel can only use the first 2 GB of RAM.
-
[[bsdinstall-pre]]
== Pre-Installation Tasks
Once it has been determined that the system meets the minimum hardware requirements for installing FreeBSD, the installation file should be downloaded and the installation media prepared.
-Before doing this, check that the system is ready for an installation by verifying the items in this checklist:
+
+[TIP]
+====
+Consider using crossref:virtualization[virtualization,virtualization] if you want to use FreeBSD on a system that already has another operating system installed.
+====
+
+Before moving on to the installation, check that the system is ready by verifying the items in this checklist:
[.procedure]
+====
. *Back Up Important Data*
+
-Before installing any operating system, _always_ backup all important data first.
+Before installing any operating system, *always* backup all important data first.
Do not store the backup on the system being installed.
Instead, save the data to a removable disk such as a USB drive, another system on the network, or an online backup service.
Test the backup before starting the installation to make sure it contains all of the needed files.
@@ -158,18 +115,18 @@ The FreeBSD boot loader requires either a primary or GPT partition.
If all of the primary or GPT partitions are already in use, one must be freed for FreeBSD.
To create a partition without deleting existing data, use a partition resizing tool to shrink an existing partition and create a new partition using the freed space.
+
-A variety of free and commercial partition resizing tools are listed at http://en.wikipedia.org/wiki/List_of_disk_partitioning_software[http://en.wikipedia.org/wiki/List_of_disk_partitioning_software].
-GParted Live (https://gparted.org/livecd.php[https://gparted.org/livecd.php]) is a free live CD which includes the GParted partition editor.
-GParted is also included with many other Linux live CD distributions.
+An alternative to modifying the system's existing disk partitions is to use crossref:virtualization[virtualization,virtualization], which allows multiple operating systems to run at the same time without having to alter partitions.
++
+A variety of free and commercial partition resizing tools are listed at link:https://en.wikipedia.org/wiki/List_of_disk_partitioning_software[List of disk partitioning software wikipedia entry].
+link:https://gparted.org/livecd.php[GParted Live] is a free live CD which includes the GParted partition editor.
+
[WARNING]
-====
+======
When used properly, disk shrinking utilities can safely create space for creating a new partition.
Since the possibility of selecting the wrong partition exists, always backup any important data and verify the integrity of the backup before modifying disk partitions.
-====
+======
+
Disk partitions containing different operating systems make it possible to install multiple operating systems on one computer.
-An alternative is to use virtualization (crossref:virtualization[virtualization,Virtualization]) which allows multiple operating systems to run at the same time without modifying any disk partitions.
. *Collect Network Information*
+
Some FreeBSD installation methods require a network connection in order to download the installation files.
@@ -191,10 +148,11 @@ Required Network Information
+
Although the FreeBSD Project strives to ensure that each release of FreeBSD is as stable as possible, bugs occasionally creep into the process.
On very rare occasions those bugs affect the installation process.
-As these problems are discovered and fixed, they are noted in the FreeBSD Errata (link:https://www.FreeBSD.org/releases/{rel130-current}R/errata/[https://www.freebsd.org/releases/{rel130-current}R/errata/]) on the FreeBSD web site.
+As these problems are discovered and fixed, they are noted in the FreeBSD Errata page of each version.
Check the errata before installing to make sure that there are no problems that might affect the installation.
+
-Information and errata for all the releases can be found on the release information section of the FreeBSD web site (link:https://www.FreeBSD.org/releases/[https://www.freebsd.org/releases/]).
+Information and errata for all the releases can be found on the link:https://www.FreeBSD.org/releases/[FreeBSD Release Information] page.
+====
[[bsdinstall-installation-media]]
=== Prepare the Installation Media
@@ -202,40 +160,46 @@ Information and errata for all the releases can be found on the release informat
The FreeBSD installer is not an application that can be run from within another operating system.
Instead, download a FreeBSD installation file, burn it to the media associated with its file type and size (CD, DVD, or USB), and boot the system to install from the inserted media.
-FreeBSD installation files are available at link:https://www.FreeBSD.org/where/[www.freebsd.org/where/].
+FreeBSD installation files are available at the link:https://www.FreeBSD.org/where/[FreeBSD download page].
Each installation file's name includes the release version of FreeBSD, the architecture, and the type of file.
-For example, to install FreeBSD 13.0 on an amd64 system from a DVD, download [.filename]#FreeBSD-13.0-RELEASE-amd64-dvd1.iso#, burn this file to a DVD, and boot the system with the DVD inserted.
-Installation files are available in several formats.
+Installation files are available in several formats, compressed with man:xz[1] or uncompressed.
The formats vary depending on computer architecture and media type.
-[[bsdinstall-installation-media-uefi]]
-Additional installation files are included for computers that boot with UEFI (Unified Extensible Firmware Interface).
-The names of these files include the string [.filename]#uefi#.
+Installation file types:
-File types:
+* `*-bootonly.iso*`: This is the smallest installation file as it only contains the installer. A working Internet connection is required during installation as the installer will download the files it needs to complete the FreeBSD installation. This file should be burned to optical media.
+* `*-disc1.iso*`: This file contains all of the files needed to install FreeBSD, its source, and the Ports Collection. This file should be burned to optical media.
+* `*-dvd1.iso*`: This file contains all of the files needed to install FreeBSD, its source, and the Ports Collection. It also contains a set of popular binary packages for installing a window manager and some applications so that a complete system can be installed from media without requiring a connection to the Internet. This file should be burned to optical media.
+* `*-memstick.img*`: This file contains all of the files needed to install FreeBSD, its source, and the Ports Collection. Write this file to a USB stick as shown in <<bsdinstall-usb>>.
+* `*-mini-memstick.img*`: Like `*-bootonly.iso*`, does not include installation files, but downloads them as needed. A working internet connection is required during installation. It should be written to a USB stick as shown in <<bsdinstall-usb>>.
-* `-bootonly.iso`: This is the smallest installation file as it only contains the installer. A working Internet connection is required during installation as the installer will download the files it needs to complete the FreeBSD installation. This file should be burned to a CD using a CD burning application.
-* `-disc1.iso`: This file contains all of the files needed to install FreeBSD, its source, and the Ports Collection. It should be burned to a CD using a CD burning application.
-* `-dvd1.iso`: This file contains all of the files needed to install FreeBSD, its source, and the Ports Collection. It also contains a set of popular binary packages for installing a window manager and some applications so that a complete system can be installed from media without requiring a connection to the Internet. This file should be burned to a DVD using a DVD burning application.
-* `-memstick.img`: This file contains all of the files needed to install FreeBSD, its source, and the Ports Collection. It should be burned to a USB stick using the instructions below.
-* `-mini-memstick.img`: Like `-bootonly.iso`, does not include installation files, but downloads them as needed. A working internet connection is required during installation. Write this file to a USB stick as shown in <<bsdinstall-usb>>.
+After downloading the image file, download at least one _checksum_ file from the same directory.
+There are two _checksum_ files available, named after the release number and the architecture name.
+For example: `CHECKSUM.SHA256-FreeBSD-13.1-RELEASE-amd64` and `CHECKSUM.SHA512-FreeBSD-13.1-RELEASE-amd64`.
-After downloading the image file, download [.filename]#CHECKSUM.SHA256# from the same directory.
-Calculate a _checksum_ for the image file.
-FreeBSD provides man:sha256[1] for this, used as `sha256 _imagefilename_`.
+After downloading one of the files (or both), calculate the _checksum_ for the image file and compare it with the one shown in the _checksum_ file.
+Note that you need to compare the calculated _checksum_ against the correct file, as they correspond to two different algorithms: SHA256 and SHA512.
+FreeBSD provides man:sha256[1] and man:sha512[1] that can be used for calculating the _checksum_.
Other operating systems have similar programs.
-Compare the calculated checksum with the one shown in [.filename]#CHECKSUM.SHA256#.
+Verifying the _checksum_ in FreeBSD can be done automatically using man:sha256sum[1] (and man:sha512sum[1]) by executing:
+
+[source,shell]
+....
+% sha256sum -c CHECKSUM.SHA256-FreeBSD-13.1-RELEASE-amd64 FreeBSD-13.1-RELEASE-amd64-dvd1.iso
+FreeBSD-13.1-RELEASE-amd64-dvd1.iso: OK
+....
+
The checksums must match exactly.
If the checksums do not match, the image file is corrupt and must be downloaded again.
[[bsdinstall-usb]]
==== Writing an Image File to USB
-The [.filename]#\*.img# file is an _image_ of the complete contents of a memory stick.
+The `\*memstick.img` file is an _image_ of the complete contents of a memory stick.
It _cannot_ be copied to the target device as a file.
-Several applications are available for writing the [.filename]#*.img# to a USB stick.
+Several applications are available for writing the `*.img` to a USB stick.
This section describes two of these utilities.
[IMPORTANT]
@@ -246,42 +210,43 @@ This procedure will erase the existing data on the stick.
[[bsdinstall-usb-dd]]
[.procedure]
-****
-*Procedure. Using `dd` to Write the Image* +
+====
+*Procedure. Using `dd` to write the image* +
[WARNING]
-====
-This example uses [.filename]#/dev/da0# as the target device where the image will be written.
-Be _very careful_ that the correct device is used as this command will destroy the existing data on the specified target device.
-====
+======
+This example uses `/dev/da0` as the target device where the image will be written.
+Be *very careful* that the correct device is used as this command will destroy the existing data on the specified target device.
+======
. The command-line utility is available on BSD, Linux(R), and Mac OS(R) systems. To burn the image using `dd`, insert the USB stick and determine its device name. Then, specify the name of the downloaded installation file and the device name for the USB stick. This example burns the amd64 installation image to the first USB device on an existing FreeBSD system.
+
[source,shell]
....
-# dd if=FreeBSD-13.0-RELEASE-amd64-memstick.img of=/dev/da0 bs=1M conv=sync
+# dd if=FreeBSD-13.1-RELEASE-amd64-memstick.img of=/dev/da0 bs=1M conv=sync
....
+
If this command fails, verify that the USB stick is not mounted and that the device name is for the disk, not a partition.
++
Some operating systems might require this command to be run with man:sudo[8].
The man:dd[1] syntax varies slightly across different platforms; for example, Mac OS(R) requires a lower-case `bs=1m`.
Systems like Linux(R) might buffer writes.
To force all writes to complete, use man:sync[8].
-****
+====
[.procedure]
-****
+====
*Procedure. Using Windows(R) to Write the Image* +
[WARNING]
-====
-
+======
Be sure to give the correct drive letter as the existing data on the specified drive will be overwritten and destroyed.
-====
+======
+
. *Obtaining Image Writer for Windows(R)*
+
Image Writer for Windows(R) is a free application that can correctly write an image file to a memory stick.
-Download it from https://sourceforge.net/projects/win32diskimager/[https://sourceforge.net/projects/win32diskimager/] and extract it into a folder.
+Download it from https://sourceforge.net/projects/win32diskimager/[win32diskimager home page] and extract it into a folder.
. *Writing the Image with Image Writer*
+
@@ -291,9 +256,7 @@ Click the folder icon and select the image to be written to the memory stick.
Click btn:[Save] to accept the image file name.
Verify that everything is correct, and that no folders on the memory stick are open in other windows.
When everything is ready, click btn:[Write] to write the image file to the memory stick.
-****
-
-You are now ready to start installing FreeBSD.
+====
[[bsdinstall-start]]
== Starting the Installation
@@ -319,31 +282,6 @@ When using a bootable USB stick, plug in the USB stick before turning on the com
When booting from CD or DVD, turn on the computer and insert the media at the first opportunity.
How to configure the system to boot from the inserted media depends upon the architecture.
-[[bsdinstall-starting-i386]]
-=== Booting on i386(TM) and amd64
-
-These architectures provide a BIOS menu for selecting the boot device.
-Depending upon the installation media being used, select the CD/DVD or USB device as the first boot device.
-Most systems also provide a key for selecting the boot device during startup without having to enter the BIOS.
-Typically, the key is either kbd:[F10], kbd:[F11], kbd:[F12], or kbd:[Escape].
-
-If the computer loads the existing operating system instead of the FreeBSD installer, then either:
-
-. The installation media was not inserted early enough in the boot process. Leave the media inserted and try restarting the computer.
-. The BIOS changes were incorrect or not saved. Double-check that the right boot device is selected as the first boot device.
-. This system is too old to support booting from the chosen media. In this case, the Plop Boot Manager (http://www.plop.at/en/bootmanagers.html[]) can be used to boot the system from the selected media.
-
-=== Booting on PowerPC(R)
-
-On most machines, holding kbd:[C] on the keyboard during boot will boot from the CD.
-Otherwise, hold kbd:[Command+Option+O+F], or kbd:[Windows+Alt+O+F] on non-Apple(R) keyboards.
-At the `0 >` prompt, enter
-
-[source,shell]
-....
- boot cd:,\ppc\loader cd:0
-....
-
[[bsdinstall-view-probe]]
=== FreeBSD Boot Menu
@@ -351,7 +289,7 @@ Once the system boots from the installation media, a menu similar to the followi
[[bsdinstall-newboot-loader-menu]]
.FreeBSD Boot Loader Menu
-image::bsdinstall-newboot-loader-menu.png[]
+image::bsdinstall-newboot-loader-menu.png[FreeBSD boot loader menu]
By default, the menu will wait ten seconds for user input before booting into the FreeBSD installer or, if FreeBSD is already installed, before booting into FreeBSD.
To pause the boot timer in order to review the selections, press kbd:[Space].
@@ -362,12 +300,13 @@ The following options are available.
* `Boot Single User`: This mode can be used to fix an existing FreeBSD installation as described in crossref:boot[boot-singleuser,“Single-User Mode”]. Press kbd:[2] or the upper- or lower-case kbd:[S] to enter this mode.
* `Escape to loader prompt`: This will boot the system into a repair prompt that contains a limited number of low-level commands. This prompt is described in crossref:boot[boot-loader,“Stage Three”]. Press kbd:[3] or kbd:[Esc] to boot into this prompt.
* `Reboot`: Reboots the system.
+* `Cons`: Allow to continue the installation by `video`, `serial`, `Dual (serial primary)` or `Dual (Video primary)`
* `Kernel`: Loads a different kernel.
-* `Configure Boot Options`: Opens the menu shown in, and described under, <<bsdinstall-boot-options-menu>>.
+* `Boot Options`: Opens the menu shown in, and described under, <<bsdinstall-boot-options-menu>>.
[[bsdinstall-boot-options-menu]]
.FreeBSD Boot Options Menu
-image::bsdinstall-boot-options-menu.png[]
+image::bsdinstall-boot-options-menu.png[Menu showing the different boot options supported]
The boot options menu is divided into two sections.
The first section can be used to either return to the main boot menu or to reset any toggled options back to their defaults.
@@ -376,7 +315,7 @@ The next section is used to toggle the available options to `On` or `Off` by pre
The system will always boot using the settings for these options until they are modified.
Several options can be toggled using this menu:
-* `ACPI Support`: If the system hangs during boot, try toggling this option to `Off`.
+* `ACPI Support`: If the system hangs during boot, try toggling this option to `Off`. This option is only present when ACPI support is available but not required.
* `Safe Mode`: If the system still hangs during boot even with `ACPI Support` set to `Off`, try setting this option to `On`.
* `Single User`: Toggle this option to `On` to fix an existing FreeBSD installation as described in crossref:boot[boot-singleuser,“Single-User Mode”]. Once the problem is fixed, set it back to `Off`.
* `Verbose`: Toggle this option to `On` to see more detailed messages during the boot process. This can be useful when troubleshooting a piece of hardware.
@@ -387,7 +326,7 @@ Once the boot is complete, the welcome menu shown in <<bsdinstall-choose-mode>>
[[bsdinstall-choose-mode]]
.Welcome Menu
-image::bsdinstall-choose-mode.png[]
+image::bsdinstall-choose-mode.png[FreeBSD installation welcome menu]
Press kbd:[Enter] to select the default of btn:[Install] to enter the installer.
The rest of this chapter describes how to use this installer.
@@ -413,19 +352,19 @@ When finished, press kbd:[Enter] to save the selection and move onto the next sc
[[bsdinstall-keymap]]
=== Selecting the Keymap Menu
-Before starting the process, bsdinstall will load the keymap files as show in <<bsdinstall-keymap-loading>>.
+Before starting the process, bsdinstall will load the keymap files as shown in <<bsdinstall-keymap-loading>>.
[[bsdinstall-keymap-loading]]
.Keymap Loading
-image::bsdinstall-keymap-loading.png[]
+image::bsdinstall-keymap-loading.png[Keymap loading]
-After the keymaps have been loaded bsdinstall displays the menu shown in <<bsdinstall-keymap-10>>.
+After the keymaps have been loaded, bsdinstall displays the menu shown in <<bsdinstall-keymap-10>>.
Use the up and down arrows to select the keymap that most closely represents the mapping of the keyboard attached to the system.
Press kbd:[Enter] to save the selection.
[[bsdinstall-keymap-10]]
.Keymap Selection Menu
-image::bsdinstall-keymap-10.png[]
+image::bsdinstall-keymap-10.png[Keymap selection menu showing all supported keyboards]
[NOTE]
====
@@ -433,11 +372,11 @@ Pressing kbd:[Esc] will exit this menu and use the default keymap.
If the choice of keymap is not clear, [.guimenuitem]#United States of America ISO-8859-1# is also a safe option.
====
-In addition, when selecting a different keymap, the user can try the keymap and ensure it is correct before proceeding as shown in <<bsdinstall-keymap-testing>>.
+In addition, when selecting a different keymap, the user can try the keymap and ensure it is correct before proceeding, as shown in <<bsdinstall-keymap-testing>>.
[[bsdinstall-keymap-testing]]
.Keymap Testing Menu
-image::bsdinstall-keymap-testing.png[]
+image::bsdinstall-keymap-testing.png[Keymap testing menu]
[[bsdinstall-hostname]]
=== Setting the Hostname
@@ -446,7 +385,7 @@ The next bsdinstall menu is used to set the hostname for the newly installed sys
[[bsdinstall-config-hostname]]
.Setting the Hostname
-image::bsdinstall-config-hostname.png[]
+image::bsdinstall-config-hostname.png[Setting the hostname]
Type in a hostname that is unique for the network.
It should be a fully-qualified hostname, such as `machine3.example.com`.
@@ -458,13 +397,13 @@ Next, bsdinstall will prompt to select optional components to install.
[[bsdinstall-config-components]]
.Selecting Components to Install
-image::bsdinstall-config-components.png[]
+image::bsdinstall-config-components.png[Different components that can be installed. Example: base-dbg, lib32, ports, etc.]
Deciding which components to install will depend largely on the intended use of the system and the amount of disk space available.
The FreeBSD kernel and userland, collectively known as the _base system_, are always installed.
Depending on the architecture, some of these components may not appear:
-* `base-dbg` - Base tools like cat, ls among many others with debug symbols activated.
+* `base-dbg` - Base tools like cat and ls, among many others, with debug symbols activated.
* `kernel-dbg` - Kernel and modules with debug symbols activated.
* `lib32-dbg` - Compatibility libraries for running 32-bit applications on a 64-bit version of FreeBSD with debug symbols activated.
* `lib32` - Compatibility libraries for running 32-bit applications on a 64-bit version of FreeBSD.
@@ -483,13 +422,13 @@ The FreeBSD Ports Collection takes up about {ports-size} of disk space.
[[bsdinstall-netinstall]]
=== Installing from the Network
-The menu shown in <<bsdinstall-netinstall-notify>> only appears when installing from a [.filename]#-bootonly.iso# or [.filename]#-mini-memstick.img# as this installation media does not hold copies of the installation files.
+The menu shown in <<bsdinstall-netinstall-notify>> only appears when installing from a `-bootonly.iso` or `-mini-memstick.img`, as this installation media does not hold copies of the installation files.
Since the installation files must be retrieved over a network connection, this menu indicates that the network interface must be configured first.
-If this menu is shown in any step of the process remember to follow the instructions in <<bsdinstall-config-network-dev>>.
+If this menu is shown in any step of the process, remember to follow the instructions in <<bsdinstall-config-network-dev>>.
[[bsdinstall-netinstall-notify]]
.Installing from the Network
-image::bsdinstall-netinstall-files.png[]
+image::bsdinstall-netinstall-files.png[Indicates that certain components have not been found and will be downloaded using the network.]
[[bsdinstall-partitioning]]
== Allocating Disk Space
@@ -498,14 +437,14 @@ The next menu is used to determine the method for allocating disk space.
[[bsdinstall-zfs-partmenu]]
.Partitioning Choices
-image::bsdinstall-zfs-partmenu.png[]
+image::bsdinstall-zfs-partmenu.png[Shows the different partition options. Example: Manual, Shell, etc.]
bsdinstall gives the user four methods for allocating disk space:
+* `Auto (ZFS)` partitioning creates a root-on-ZFS system with optional GELI encryption support for _boot environments_.
* `Auto (UFS)` partitioning automatically sets up the disk partitions using the `UFS` file system.
* `Manual` partitioning allows advanced users to create customized partitions from menu options.
* `Shell` opens a shell prompt where advanced users can create customized partitions using command-line utilities like man:gpart[8], man:fdisk[8], and man:bsdlabel[8].
-* `Auto (ZFS)` partitioning creates a root-on-ZFS system with optional GELI encryption support for _boot environments_.
This section describes what to consider when laying out the disk partitions.
It then demonstrates how to use the different partitioning methods.
@@ -513,42 +452,47 @@ It then demonstrates how to use the different partitioning methods.
[[configtuning-initial]]
=== Designing the Partition Layout
+The default partition layout for file systems includes one file system for the entire system.
+When using `UFS` it may be worth considering the use of multiple file systems if you have sufficient disk space or multiple disks.
When laying out file systems, remember that hard drives transfer data faster from the outer tracks to the inner.
-Thus, smaller and heavier-accessed file systems should be closer to the outside of the drive, while larger partitions like [.filename]#/usr# should be placed toward the inner parts of the disk.
-It is a good idea to create partitions in an order similar to: [.filename]#/#, swap, [.filename]#/var#, and [.filename]#/usr#.
+Thus, smaller and heavier-accessed file systems should be closer to the outside of the drive, while larger partitions like `/usr` should be placed toward the inner parts of the disk.
+It is a good idea to create partitions in an order similar to: `/`, swap, `/var`, and `/usr`.
-The size of the [.filename]#/var# partition reflects the intended machine's usage.
+The size of the `/var` partition reflects the intended machine's usage.
This partition is used to hold mailboxes, log files, and printer spools.
Mailboxes and log files can grow to unexpected sizes depending on the number of users and how long log files are kept.
-On average, most users rarely need more than about a gigabyte of free disk space in [.filename]#/var#.
+On average, most users rarely need more than about a gigabyte of free disk space in `/var`.
[NOTE]
====
-Sometimes, a lot of disk space is required in [.filename]#/var/tmp#.
-When new software is installed, the packaging tools extract a temporary copy of the packages under [.filename]#/var/tmp#.
-Large software packages, like Firefox or LibreOffice may be tricky to install if there is not enough disk space under [.filename]#/var/tmp#.
+Sometimes, a lot of disk space is required in `/var/tmp`.
+When new software is installed, the packaging tools extract a temporary copy of the packages under `/var/tmp`.
+Large software packages, like Firefox or LibreOffice may be tricky to install if there is not enough disk space under `/var/tmp`.
====
-The [.filename]#/usr# partition holds many of the files which support the system, including the FreeBSD Ports Collection and system source code.
+The `/usr` partition holds many of the files which support the system, including the FreeBSD Ports Collection and system source code.
At least 2 gigabytes of space is recommended for this partition.
+Also, note that home directories for users are placed in `/usr/home` by default, but can be placed on another partition.
+By default, `/home` is a symbolic link to `/usr/home`.
When selecting partition sizes, keep the space requirements in mind.
Running out of space in one partition while barely using another can be a hassle.
As a rule of thumb, the swap partition should be about double the size of physical memory (RAM).
-Systems with minimal RAM may perform better with more swap.
+Systems with minimal RAM (less for larger-memory configurations) may perform better with more swap.
Configuring too little swap can lead to inefficiencies in the VM page scanning code and might create issues later if more memory is added.
On larger systems with multiple SCSI disks or multiple IDE disks operating on different controllers, it is recommended that swap be configured on each drive, up to four drives.
The swap partitions should be approximately the same size.
-The kernel can handle arbitrary sizes but internal data structures scale to 4 times the largest swap partition.
+The kernel can handle arbitrary sizes, but internal data structures scale to 4 times the largest swap partition.
Keeping the swap partitions near the same size will allow the kernel to optimally stripe swap space across disks.
-Large swap sizes are fine, even if swap is not used much.
+Large swap sizes may elicit a kernel warning message about the total configured swap.
+The limit is raised by increasing the amount of memory allowed for keeping track of swap allocations, as instructed by the warning message.
It might be easier to recover from a runaway program before being forced to reboot.
-By properly partitioning a system, fragmentation introduced in the smaller write heavy partitions will not bleed over into the mostly read partitions.
-Keeping the write loaded partitions closer to the disk's edge will increase I/O performance in the partitions where it occurs the most.
-While I/O performance in the larger partitions may be needed, shifting them more toward the edge of the disk will not lead to a significant performance improvement over moving [.filename]#/var# to the edge.
+By properly partitioning a system, fragmentation introduced in the smaller write-heavy partitions will not bleed over into the mostly read partitions.
+Keeping the write-loaded partitions closer to the disk's edge will increase I/O performance in the partitions where it occurs the most.
+While I/O performance in the larger partitions may be needed, shifting them more toward the edge of the disk will not lead to a significant performance improvement over moving `/var` to the edge.
[[bsdinstall-part-guided]]
=== Guided Partitioning Using UFS
@@ -558,7 +502,7 @@ If multiple disks are connected, choose the one where FreeBSD is to be installed
[[bsdinstall-part-guided-disk]]
.Selecting from Multiple Disks
-image::bsdinstall-part-guided-disk.png[]
+image::bsdinstall-part-guided-disk.png[Shows the list of disks on which FreeBSD can be installed]
Once the disk is selected, the next menu prompts to install to either the entire disk or to create a partition using free space.
If btn:[Entire Disk] is chosen, a general partition layout filling the whole disk is automatically created.
@@ -566,15 +510,15 @@ Selecting btn:[Partition] creates a partition layout from the unused space on th
[[bsdinstall-part-entire-part]]
.Selecting Entire Disk or Partition
-image::bsdinstall-part-entire-part.png[]
+image::bsdinstall-part-entire-part.png[Menu asking the user if he wants to use all the available space on the disk or wants to make a partition]
-After btn:[Entire Disk] is chosen bsdinstall displays a dialog indicating that the disk will be erased.
+After the btn:[Entire Disk] option is chosen, bsdinstall displays a dialog indicating that the disk will be erased.
[[bsdinstall-ufs-warning]]
.Confirmation
-image::bsdinstall-ufs-warning.png[]
+image::bsdinstall-ufs-warning.png[Menu indicating the user that all data on the disk will be deleted and asking for confirmation]
-The next menu shows a list with the partition schemes types.
+The next menu shows a list with the available partition scheme types.
GPT is usually the most appropriate choice for amd64 computers.
Older computers that are not compatible with GPT should use MBR.
The other partition schemes are generally used for uncommon or older computers.
@@ -582,27 +526,27 @@ More information is available in <<partition-schemes>>.
[[bsdinstall-ufs-scheme]]
.Select Partition Scheme
-image::bsdinstall-part-manual-partscheme.png[]
+image::bsdinstall-part-manual-partscheme.png[Menu showing the user the different the different types of partition that exist and requesting one of them]
After the partition layout has been created, review it to ensure it meets the needs of the installation.
-Selecting btn:[Revert] will reset the partitions to their original values and pressing btn:[Auto] will recreate the automatic FreeBSD partitions.
+Selecting btn:[Revert] will reset the partitions to their original values. Pressing btn:[Auto] will recreate the automatic FreeBSD partitions.
Partitions can also be manually created, modified, or deleted.
When the partitioning is correct, select btn:[Finish] to continue with the installation.
[[bsdinstall-part-review]]
.Review Created Partitions
-image::bsdinstall-part-review.png[]
+image::bsdinstall-part-review.png[Menu showing created partitions]
Once the disks are configured, the next menu provides the last chance to make changes before the selected drives are formatted.
If changes need to be made, select btn:[Back] to return to the main partitioning menu.
btn:[Revert & Exit] exits the installer without making any changes to the drive.
-Select btn:[Commit] to start the installation process.
+Otherwise, select btn:[Commit] to start the installation process.
[[bsdinstall-ufs-final-confirmation]]
.Final Confirmation
-image::bsdinstall-final-confirmation.png[]
+image::bsdinstall-final-confirmation.png[Menu indicating to the user that all changes will be written to disk and informing that if he decides to continue the existing data will be permanently deleted.]
-To continue with the installation process go to <<bsdinstall-fetching-distribution>>.
+To continue with the installation process, go to <<bsdinstall-fetching-distribution>>.
[[bsdinstall-part-manual]]
=== Manual Partitioning
@@ -611,13 +555,13 @@ Selecting this method opens the partition editor:
[[bsdinstall-part-manual-create]]
.Manually Create Partitions
-image::bsdinstall-part-manual-create.png[]
+image::bsdinstall-part-manual-create.png[Menu showing the Partition Editor.]
-Highlight the installation drive ([.filename]#ada0# in this example) and select btn:[Create] to display a menu of available partition schemes:
+Highlight the installation drive (`ada0` in this example) and select btn:[Create] to display a menu of available partition schemes:
[[bsdinstall-part-manual-partscheme]]
.Manually Create Partitions
-image::bsdinstall-part-manual-partscheme.png[]
+image::bsdinstall-part-manual-partscheme.png[Menu showing the different kind of partition schemes]
GPT is usually the most appropriate choice for amd64 computers.
Older computers that are not compatible with GPT should use MBR.
@@ -625,7 +569,7 @@ The other partition schemes are generally used for uncommon or older computers.
[[partition-schemes]]
.Partitioning Schemes
-[cols="1,1", frame="none", options="header"]
+[cols="25h,~", frame="none", options="header"]
|===
<| Abbreviation
<| Description
@@ -637,29 +581,35 @@ The other partition schemes are generally used for uncommon or older computers.
|BSD label without an MBR, sometimes called _dangerously dedicated mode_ as non-BSD disk utilities may not recognize it.
|GPT
-|GUID Partition Table (http://en.wikipedia.org/wiki/GUID_Partition_Table[http://en.wikipedia.org/wiki/GUID_Partition_Table]).
+|link:https://en.wikipedia.org/wiki/GUID_Partition_Table[GUID Partition Table].
|MBR
-|Master Boot Record (http://en.wikipedia.org/wiki/Master_boot_record[http://en.wikipedia.org/wiki/Master_boot_record]).
+|link:https://en.wikipedia.org/wiki/Master_boot_record[Master Boot Record].
|===
After the partitioning scheme has been selected and created, select btn:[Create] again to create the partitions.
-The kbd:[Tab] key is used to move the cursor between fields.
+The kbd:[Tab] key is used to give focus to the fields (after cycling through btn:[<OK>], btn:[<Options>], and btn:[<Cancel>]).
[[bsdinstall-part-manual-addpart]]
.Manually Create Partitions
-image::bsdinstall-part-manual-addpart.png[]
+image::bsdinstall-part-manual-addpart.png[Menu requesting type, size, mountpoint and label for the new partition.]
-A standard FreeBSD GPT installation uses at least three partitions:
+A standard FreeBSD GPT installation uses at least three partitions, including either UFS or ZFS:
-* `freebsd-boot` - Holds the FreeBSD boot code.
+* `freebsd-boot` or `efi` - Holds the FreeBSD boot code.
* `freebsd-ufs` - A FreeBSD UFS file system.
* `freebsd-zfs` - A FreeBSD ZFS file system. More information about ZFS is available in crossref:zfs[zfs,The Z File System (ZFS)].
* `freebsd-swap` - FreeBSD swap space.
Refer to man:gpart[8] for descriptions of the available GPT partition types.
-Multiple file system partitions can be created and some people prefer a traditional layout with separate partitions for [.filename]#/#, [.filename]#/var#, [.filename]#/tmp#, and [.filename]#/usr#.
+Multiple file system partitions can be created. Some people prefer a traditional layout with separate partitions for `/`, `/var`, `/tmp`, and `/usr`.
+
+[TIP]
+====
+Note that `/tmp` can be added later as a memory-based file system (man:tmpfs[5]) on systems with sufficient memory.
+====
+
See <<bsdinstall-part-manual-splitfs>> for an example.
The `Size` may be entered with common abbreviations: _K_ for kilobytes, _M_ for megabytes, or _G_ for gigabytes.
@@ -672,13 +622,13 @@ There is one exception: the _freebsd-boot_ partition should be no larger than 51
====
A `Mountpoint` is needed if the partition will contain a file system.
-If only a single UFS partition will be created, the mountpoint should be [.filename]#/#.
+If only a single UFS partition will be created, the mountpoint should be `/`.
The `Label` is a name by which the partition will be known.
Drive names or numbers can change if the drive is connected to a different controller or port, but the partition label does not change.
-Referring to labels instead of drive names and partition numbers in files like [.filename]#/etc/fstab# makes the system more tolerant to hardware changes.
-GPT labels appear in [.filename]#/dev/gpt/# when a disk is attached.
-Other partitioning schemes have different label capabilities and their labels appear in different directories in [.filename]#/dev/#.
+Referring to labels instead of drive names and partition numbers in files like `/etc/fstab` makes the system more tolerant to hardware changes.
+GPT labels appear in `/dev/gpt/` when a disk is attached.
+Other partitioning schemes have different label capabilities and their labels appear in different directories in `/dev/`.
[TIP]
====
@@ -691,12 +641,12 @@ For instance, use `labroot` or `rootfslab` for the UFS root partition on the com
.Creating Traditional Split File System Partitions
[example]
====
-For a traditional partition layout where the [.filename]#/#, [.filename]#/var#, [.filename]#/tmp#, and [.filename]#/usr# directories are separate file systems on their own partitions, create a GPT partitioning scheme, then create the partitions as shown.
+For a traditional partition layout where the `/`, `/var`, `/tmp`, and `/usr` directories are separate file systems on their own partitions, create a GPT partitioning scheme, then create the partitions as shown.
Partition sizes shown are typical for a 20G target disk.
-If more space is available on the target disk, larger swap or [.filename]#/var# partitions may be useful.
+If more space is available on the target disk, larger swap or `/var` partitions may be useful.
Labels shown here are prefixed with `ex` for "example", but readers should use other unique label values as described above.
-By default, FreeBSD's [.filename]#gptboot# expects the first UFS partition to be the [.filename]#/# partition.
+By default, FreeBSD's `gptboot` expects the first UFS partition to be the `/` partition.
[.informaltable]
[cols="1,1,1,1", frame="none", options="header"]
@@ -713,7 +663,7 @@ By default, FreeBSD's [.filename]#gptboot# expects the first UFS partition to be
|`freebsd-ufs`
|`2G`
-|[.filename]#/#
+|`/`
|`exrootfs`
|`freebsd-swap`
@@ -723,17 +673,17 @@ By default, FreeBSD's [.filename]#gptboot# expects the first UFS partition to be
|`freebsd-ufs`
|`2G`
-|[.filename]#/var#
+|`/var`
|`exvarfs`
|`freebsd-ufs`
|`1G`
-|[.filename]#/tmp#
+|`/tmp`
|`extmpfs`
|`freebsd-ufs`
|accept the default (remainder of the disk)
-|[.filename]#/usr#
+|`/usr`
|`exusrfs`
|===
====
@@ -748,101 +698,101 @@ The main ZFS configuration menu offers a number of options to control the creati
[[bsdinstall-zfs-menu]]
.ZFS Partitioning Menu
-image::bsdinstall-zfs-menu.png[]
+image::bsdinstall-zfs-menu.png[Menu showing the different options to configure the ZFS pool]
-Here is a summary of the options which can be used in this menu:
+Here is a summary of the options in this menu:
* `Install` - Proceed with the installation with the selected options.
-* `Pool Type/Disks` - Allow to configure the `Pool Type` and the disk(s) that will constitute the pool. The automatic ZFS installer currently only supports the creation of a single top level vdev, except in stripe mode. To create more complex pools, use the instructions in <<bsdinstall-part-shell>> to create the pool.
+* `Pool Type/Disks` - Configure the `Pool Type` and the disk(s) that will constitute the pool. The automatic ZFS installer currently only supports the creation of a single top level vdev, except in stripe mode. To create more complex pools, use the instructions in <<bsdinstall-part-shell>> to create the pool.
* `Rescan Devices` - Repopulate the list of available disks.
-* `Disk Info` - Disk Info menu can be used to inspect each disk, including its partition table and various other information such as the device model number and serial number, if available.
+* `Disk Info` - This menu can be used to inspect each disk, including its partition table and various other information such as the device model number and serial number, if available.
* `Pool Name` - Establish the name of the pool. The default name is _zroot_.
* `Force 4K Sectors?` - Force the use of 4K sectors. By default, the installer will automatically create partitions aligned to 4K boundaries and force ZFS to use 4K sectors. This is safe even with 512 byte sector disks, and has the added benefit of ensuring that pools created on 512 byte disks will be able to have 4K sector disks added in the future, either as additional storage space or as replacements for failed disks. Press the kbd:[Enter] key to chose to activate it or not.
-* `Encrypt Disks?` - Encrypting the disks allows the user to encrypt the disks using GELI. More information about disk encryption is available in crossref:disks[disks-encrypting-geli,“Disk Encryption with geli”]. Press the kbd:[Enter] key to chose activate it or not.
-* `Partition Scheme` - Allow to choose the partition scheme. GPT is the recommended option in most cases. Press the kbd:[Enter] key to chose between the different options.
+* `Encrypt Disks?` - Encrypting the disks allows the user to encrypt the disks using GELI. More information about disk encryption is available in crossref:disks[disks-encrypting-geli,“Disk Encryption with geli”]. Press the kbd:[Enter] key to choose whether to activate it or not.
+* `Partition Scheme` - Choose the partition scheme. GPT is the recommended option in most cases. Press the kbd:[Enter] key to chose between the different options.
* `Swap Size` - Establish the amount of swap space.
-* `Mirror Swap?` - Allows the user to mirror the swap between the disks. Be aware, enabling mirror swap will break crash dumps. Press the kbd:[Enter] key to activate it or not.
-* `Encrypt Swap?` - Allow the user the possibility to encrypt the swap. Encrypts the swap with a temporary key each time that the system boots and discards it on reboot. Press the kbd:[Enter] key to chose activate it or not. More information about swap encryption in crossref:disks[swap-encrypting,“Encrypting Swap”].
+* `Mirror Swap?` - Whether to mirror the swap between the disks. Be aware that enabling mirror swap will break crash dumps. Press the kbd:[Enter] key to activate it or not.
+* `Encrypt Swap?` - Whether to encrypt the swap. This will encrypt the swap with a temporary key each time the system boots, and discards it on reboot. Press the kbd:[Enter] key to choose to activate it or not. More information about swap encryption in crossref:disks[swap-encrypting,“Encrypting Swap”].
Select kbd:[T] to configure the `Pool Type` and the disk(s) that will constitute the pool.
[[bsdinstall-zfs-vdev_type]]
.ZFS Pool Type
-image::bsdinstall-zfs-vdev_type.png[]
+image::bsdinstall-zfs-vdev_type.png[Menu requesting the Virtual Device type. Ex: stripe, mirror, raidz1]
-Here is a summary of the `Pool Type` which can be selected in this menu:
+Here is a summary of the `Pool Type` that can be selected in this menu:
* `stripe` - Striping provides maximum storage of all connected devices, but no redundancy. If just one disk fails the data on the pool is lost irrevocably.
-* `mirror` - Mirroring stores a complete copy of all data on every disk. Mirroring provides a good read performance because data is read from all disks in parallel. Write performance is slower as the data must be written to all disks in the pool. Allows all but one disk to fail. This option requires at least two disks.
+* `mirror` - Mirroring stores a complete copy of all data on every disk. Mirroring provides good read performance because data is read from all disks in parallel. Write performance is slower as the data must be written to all disks in the pool. Allows all but one disk to fail. This option requires at least two disks.
* `raid10` - Striped mirrors. Provides the best performance, but the least storage. This option needs at least an even number of disks and a minimum of four disks.
* `raidz1` - Single Redundant RAID. Allow one disk to fail concurrently. This option needs at least three disks.
* `raidz2` - Double Redundant RAID. Allows two disks to fail concurrently. This option needs at least four disks.
* `raidz3` - Triple Redundant RAID. Allows three disks to fail concurrently. This option needs at least five disks.
Once a `Pool Type` has been selected, a list of available disks is displayed, and the user is prompted to select one or more disks to make up the pool.
-The configuration is then validated, to ensure enough disks are selected.
-If not, select btn:[<Change Selection>] to return to the list of disks, or btn:[<Back>] to change the `Pool Type`.
+The configuration is then validated to ensure that enough disks are selected.
+If validation fails, select btn:[<Change Selection>] to return to the list of disks or btn:[<Back>] to change the `Pool Type`.
[[bsdinstall-zfs-disk_select]]
.Disk Selection
-image::bsdinstall-zfs-disk_select.png[]
+image::bsdinstall-zfs-disk_select.png[Menu requesting how many disks will be added to the pool]
[[bsdinstall-zfs-vdev_invalid]]
.Invalid Selection
-image::bsdinstall-zfs-vdev_invalid.png[]
+image::bsdinstall-zfs-vdev_invalid.png[Menu indicating that not enough disks have been selected.]
If one or more disks are missing from the list, or if disks were attached after the installer was started, select btn:[- Rescan Devices] to repopulate the list of available disks.
[[bsdinstall-zfs-rescan-devices]]
.Rescan Devices
-image::bsdinstall-zfs-rescan-devices.png[]
+image::bsdinstall-zfs-rescan-devices.png[Device rescan]
To avoid accidentally erasing the wrong disk, the btn:[- Disk Info] menu can be used to inspect each disk, including its partition table and various other information such as the device model number and serial number, if available.
[[bsdinstall-zfs-disk_info]]
.Analyzing a Disk
-image::bsdinstall-zfs-disk_info.png[]
+image::bsdinstall-zfs-disk_info.png[Menu showing the information of the partitions.]
Select kbd:[N] to configure the `Pool Name`.
-Enter the desired name then select btn:[<OK>] to establish it or btn:[<Cancel>] to return to the main menu and leave the default name.
+Enter the desired name, then select btn:[<OK>] to establish it or btn:[<Cancel>] to return to the main menu and leave the default name.
[[bsdinstall-zfs-pool-name]]
.Pool Name
-image::bsdinstall-zfs-pool-name.png[]
+image::bsdinstall-zfs-pool-name.png[Menu requesting the name of the pool.]
Select kbd:[S] to set the amount of swap.
-Enter the desired amount of swap and then select btn:[<OK>] to establish it or btn:[<Cancel>] to return to the main menu and let the default amount.
+Enter the desired amount of swap, then select btn:[<OK>] to establish it or btn:[<Cancel>] to return to the main menu and let the default amount.
[[bsdinstall-zfs-swap-amount]]
.Swap Amount
-image::bsdinstall-zfs-swap-amount.png[]
+image::bsdinstall-zfs-swap-amount.png[Menu requesting the amount of swap memory]
Once all options have been set to the desired values, select the btn:[>>> Install] option at the top of the menu.
The installer then offers a last chance to cancel before the contents of the selected drives are destroyed to create the ZFS pool.
[[bsdinstall-zfs-warning]]
.Last Chance
-image::bsdinstall-zfs-warning.png[]
+image::bsdinstall-zfs-warning.png[Menu indicating to the user that the data will be lost]
If GELI disk encryption was enabled, the installer will prompt twice for the passphrase to be used to encrypt the disks.
-And after that the initializing of the encryption begins.
+Initialization of the encryption then begins.
[[bsdinstall-zfs-geli_password]]
.Disk Encryption Password
-image::bsdinstall-zfs-geli_password.png[]
+image::bsdinstall-zfs-geli_password.png[Menu requesting the password to encrypt the devices.]
[[bsdinstall-zfs-init-encription]]
.Initializing Encryption
-image::bsdinstall-zfs-init-encription.png[]
+image::bsdinstall-zfs-init-encription.png[Menu showing that the encryption is initializing.]
The installation then proceeds normally.
-To continue with the installation go to <<bsdinstall-fetching-distribution>>.
+To continue with the installation, go to <<bsdinstall-fetching-distribution>>.
[[bsdinstall-part-shell]]
=== Shell Mode Partitioning
When creating advanced installations, the bsdinstall partitioning menus may not provide the level of flexibility required.
-Advanced users can select the btn:[Shell] option from the partitioning menu in order to manually partition the drives, create the file system(s), populate [.filename]#/tmp/bsdinstall_etc/fstab#, and mount the file systems under [.filename]#/mnt#.
+Advanced users can select the btn:[Shell] option from the partitioning menu in order to manually partition the drives, create the file system(s), populate `/tmp/bsdinstall_etc/fstab`, and mount the file systems under `/mnt`.
Once this is done, type `exit` to return to bsdinstall and continue the installation.
[[bsdinstall-fetching-distribution]]
@@ -856,37 +806,154 @@ Next, in the case of a `bootonly media` or `mini memstick`, it downloads the sel
[[bsdinstall-distfile-fetching]]
.Fetching Distribution Files
-image::bsdinstall-distfile-fetching.png[]
+image::bsdinstall-distfile-fetching.png[Menu showing the download of the different components.]
Next, the integrity of the distribution files is verified to ensure they have not been corrupted during download or misread from the installation media:
[[bsdinstall-distfile-verify]]
.Verifying Distribution Files
-image::bsdinstall-distfile-verifying.png[]
+image::bsdinstall-distfile-verifying.png[Menu showing the verification of the different components.]
Finally, the verified distribution files are extracted to the disk:
[[bsdinstall-distfile-extract]]
.Extracting Distribution Files
-image::bsdinstall-distfile-extracting.png[]
+image::bsdinstall-distfile-extracting.png[Menu showing the extraction of the different components.]
Once all requested distribution files have been extracted, bsdinstall displays the first post-installation configuration screen.
The available post-configuration options are described in the next section.
[[bsdinstall-post]]
-== Accounts, Time Zone, Services and Hardening
+== Network Interfaces, Accounts, Time Zone, Services and Hardening
[[bsdinstall-post-root]]
=== Setting the `root` Password
First, the `root` password must be set.
While entering the password, the characters being typed are not displayed on the screen.
-After the password has been entered, it must be entered again.
-This helps prevent typing errors.
+The password must be entered twice to prevent typing errors.
[[bsdinstall-post-set-root-passwd]]
.Setting the `root` Password
-image::bsdinstall-post-root-passwd.png[]
+image::bsdinstall-post-root-passwd.png[Menu showing requesting the password for the root user.]
+
+[[bsdinstall-config-network-dev]]
+=== Configuring Network Interfaces
+
+Next, a list of the network interfaces found on the computer is shown.
+Select the interface to configure.
+
+[[bsdinstall-configure-net-interface]]
+.Choose a Network Interface
+image::bsdinstall-configure-network-interface.png[Menu showing the different network interfaces to configure.]
+
+If an Ethernet interface is selected, the installer will skip ahead to the menu shown in <<bsdinstall-configure-net-ipv4>>.
+If a wireless network interface is chosen, the system will instead scan for wireless access points:
+
+[[bsdinstall-wireless-scan]]
+.Scanning for Wireless Access Points
+image::bsdinstall-configure-wireless-scan.png[Menu showing wireless network scanning.]
+
+Wireless networks are identified by a Service Set Identifier (SSID); a short, unique name given to each network.
+SSIDs found during the scan are listed, followed by a description of the encryption types available for that network.
+If the desired SSID does not appear in the list, select btn:[Rescan] to scan again.
+If the desired network still does not appear, check for problems with antenna connections or try moving the computer closer to the access point.
+Rescan after each change is made.
+
+[[bsdinstall-wireless-accesspoints]]
+.Choosing a Wireless Network
+image::bsdinstall-configure-wireless-accesspoints.png[Menu showing the different wireless networks to connect to.]
+
+Next, enter the encryption information for connecting to the selected wireless network.
+WPA2 encryption is strongly recommended over older encryption types such as WEP, which offer little security.
+If the network uses WPA2, input the password, also known as the Pre-Shared Key (PSK).
+For security reasons, the characters typed into the input box are displayed as asterisks.
+
+[[bsdinstall-wireless-wpa2]]
+.WPA2 Setup
+image::bsdinstall-configure-wireless-wpa2setup.png[Menu requesting the wireless network password.]
+
+Next, choose whether or not an IPv4 address should be configured on the Ethernet or wireless interface:
+
+[[bsdinstall-configure-net-ipv4]]
+.Choose IPv4 Networking
+image::bsdinstall-configure-network-interface-ipv4.png[Menu indicating if IPv4 wants to be configured for the selected interface.]
+
+There are two methods of IPv4 configuration.
+DHCP will automatically configure the network interface correctly and should be used if the network provides a DHCP server.
+Otherwise, the addressing information needs to be input manually as a static configuration.
+
+[NOTE]
+====
+Do not enter random network information as it will not work.
+If a DHCP server is not available, obtain the information listed in <<bsdinstall-collect-network-information, Required Network Information>> from the network administrator or Internet service provider.
+====
+
+If a DHCP server is available, select btn:[Yes] in the next menu to automatically configure the network interface.
+The installer will appear to pause for a minute or so as it finds the DHCP server and obtains the addressing information for the system.
+
+[[bsdinstall-net-ipv4-dhcp]]
+.Choose IPv4 DHCP Configuration
+image::bsdinstall-configure-network-interface-ipv4-dhcp.png[Menu indicating if DHCP wants to be configured for the selected interface.]
+
+If a DHCP server is not available, select btn:[No] and input the following addressing information in this menu:
+
+[[bsdinstall-net-ipv4-static]]
+.IPv4 Static Configuration
+image::bsdinstall-configure-network-interface-ipv4-static.png[Menu requesting data to configure IPv4 network.]
+
+* `IP Address` - The IPv4 address assigned to this computer. The address must be unique and not already in use by another device on the local network.
+* `Subnet Mask` - The subnet mask for the network.
+* `Default Router` - The IP address of the network's default gateway.
+
+The next screen will ask if the interface should be configured for IPv6. If IPv6 is available and desired, choose btn:[Yes] to select it.
+
+[[bsdinstall-net-ipv6]]
+.Choose IPv6 Networking
+image::bsdinstall-configure-network-interface-ipv6.png[Menu indicating if IPv6 wants to be configured for the selected interface.]
+
+IPv6 also has two methods of configuration.
+StateLess Address AutoConfiguration (SLAAC) will automatically request the correct configuration information from a local router.
+Refer to http://tools.ietf.org/html/rfc4862[rfc4862] for more information.
+Static configuration requires manual entry of network information.
+
+If an IPv6 router is available, select btn:[Yes] in the next menu to automatically configure the network interface.
+The installer will appear to pause for a minute or so as it finds the router and obtains the addressing information for the system.
+
+[[bsdinstall-net-ipv6-slaac]]
+.Choose IPv6 SLAAC Configuration
+image::bsdinstall-configure-network-interface-slaac.png[Menu indicating if SLAAC wants to be configured for the selected interface.]
+
+If an IPv6 router is not available, select btn:[No] and input the following addressing information in this menu:
+
+[[bsdinstall-net-ipv6-static]]
+.IPv6 Static Configuration
+image::bsdinstall-configure-network-interface-ipv6-static.png[Menu requesting data to configure IPv6 network.]
+
+* `IPv6 Address` - The IPv6 address assigned to this computer. The address must be unique and not already in use by another device on the local network.
+* `Default Router` - The IPv6 address of the network's default gateway.
+
+The last network configuration menu is used to configure the Domain Name System (DNS) resolver, which converts hostnames to and from network addresses.
+If DHCP or SLAAC was used to autoconfigure the network interface, the `Resolver Configuration` values may already be filled in.
+Otherwise, enter the local network's domain name in the `Search` field.
+`DNS #1` and `DNS #2` are the IPv4 and/or IPv6 addresses of the DNS servers.
+At least one DNS server is required.
+
+[[bsdinstall-net-dns-config]]
+.DNS Configuration
+image::bsdinstall-configure-network-ipv4-dns.png[Menu requesting data to configure DNS for the network.]
+
+Once the interface is configured, select a mirror site that is located in the same region of the world as the computer on which FreeBSD is being installed.
+Files can be retrieved more quickly when the mirror is close to the target computer, reducing installation time.
+
+[TIP]
+====
+Selecting `ftp://download.freebsd.org (Main Site)` will automatically route to the nearest mirror.
+====
+
+[[bsdinstall-netinstall-mirror]]
+.Choosing a Mirror
+image::bsdinstall-netinstall-mirrorselect.png[Menu requesting a network mirror.]
[[bsdinstall-timezone]]
=== Setting the Time Zone
@@ -899,38 +966,38 @@ The selections will vary according to the geographical location.
[[bsdinstall-timezone-region]]
.Select a Region
-image::bsdinstall-timezone-region.png[]
+image::bsdinstall-timezone-region.png[Menu requesting the timezone region.]
The appropriate region is selected using the arrow keys and then pressing kbd:[Enter].
[[bsdinstall-timezone-country]]
.Select a Country
-image::bsdinstall-timezone-country.png[]
+image::bsdinstall-timezone-country.png[Menu requesting the timezone country.]
Select the appropriate country using the arrow keys and press kbd:[Enter].
[[bsdinstall-timezone-zone]]
.Select a Time Zone
-image::bsdinstall-timezone-zone.png[]
+image::bsdinstall-timezone-zone.png[Menu requesting the timezone zone.]
The appropriate time zone is selected using the arrow keys and pressing kbd:[Enter].
[[bsdinstall-timezone-confirmation]]
.Confirm Time Zone
-image::bsdinstall-timezone-confirm.png[]
+image::bsdinstall-timezone-confirm.png[Menu requesting confirmation of the selected timezone.]
Confirm the abbreviation for the time zone is correct.
[[bsdinstall-timezone-date]]
.Select Date
-image::bsdinstall-timezone-date.png[]
+image::bsdinstall-timezone-date.png[Menu requesting the system date.]
The appropriate date is selected using the arrow keys and then pressing btn:[Set Date].
Otherwise, the date selection can be skipped by pressing btn:[Skip].
[[bsdinstall-timezone-time]]
.Select Time
-image::bsdinstall-timezone-time.png[]
+image::bsdinstall-timezone-time.png[Menu requesting the system time.]
The appropriate time is selected using the arrow keys and then pressing btn:[Set Time].
Otherwise, the time selection can be skipped by pressing btn:[Skip].
@@ -944,17 +1011,17 @@ Only start the services that are needed for the system to function.
[[bsdinstall-config-serv]]
.Selecting Additional Services to Enable
-image::bsdinstall-config-services.png[]
+image::bsdinstall-config-services.png[Menu showing the different services available.]
-Here is a summary of the services which can be enabled in this menu:
+Here is a summary of the services that can be enabled in this menu:
-* `local_unbound` - Enable the DNS local unbound. It is necessary to keep in mind that this is the unbound of the base system and is only meant for use as a local caching forwarding resolver. If the objective is to set up a resolver for the entire network install package:dns/unbound[].
+* `local_unbound` - Enable the DNS local unbound. It is necessary to keep in mind that this is a configuration only meant for use as a local caching forwarding resolver. If the objective is to set up a resolver for the entire network, install package:dns/unbound[].
* `sshd` - The Secure Shell (SSH) daemon is used to remotely access a system over an encrypted connection. Only enable this service if the system should be available for remote logins.
* `moused` - Enable this service if the mouse will be used from the command-line system console.
-* `ntpdate` - Enable the automatic clock synchronization at boot time. The functionality of this program is now available in the man:ntpd[8] daemon. After a suitable period of mourning, the man:ntpdate[8] utility will be retired.
-* `ntpd` - The Network Time Protocol (NTP) daemon for automatic clock synchronization. Enable this service if there is a Windows(R), Kerberos, or LDAP server on the network.
+* `ntpdate` - Enable automatic clock synchronization at boot time. Note that the functionality of this program is now available in the man:ntpd[8] daemon and the man:ntpdate[8] utility will soon be retired.
+* `ntpd` - The Network Time Protocol (NTP) daemon for automatic clock synchronization. Enable this service if you wish to synchronise your system clock with a remote time server or pool.
* `powerd` - System power control utility for power control and energy saving.
-* `dumpdev` - Enabling crash dumps is useful in debugging issues with the system, so users are encouraged to enable crash dumps.
+* `dumpdev` - Crash dumps are useful when debugging issues with the system, so users are encouraged to enable them.
[[bsdinstall-hardening]]
=== Enabling Hardening Security Options
@@ -965,27 +1032,28 @@ But their use is encouraged.
[[bsdinstall-hardening-options]]
.Selecting Hardening Security Options
-image::bsdinstall-hardening.png[]
-
-Here is a summary of the options which can be enabled in this menu:
-
-* `hide_uids` - Hide processes running as other users to prevent the unprivileged users to see other running processes in execution by other users (UID) preventing information leakage.
-* `hide_gids` - Hide processes running as other groups to prevent the unprivileged users to see other running processes in execution by other groups (GID) preventing information leakage.
-* `hide_jail` - Hide processes running in jails to prevent the unprivileged users to see processes running inside the jails.
-* `read_msgbuf` - Disabling reading kernel message buffer for unprivileged users prevent from using man:dmesg[8] to view messages from the kernel's log buffer.
-* `proc_debug` - Disabling process debugging facilities for unprivileged users disables a variety of unprivileged inter-process debugging services, including some procfs functionality, ptrace(), and ktrace(). Please note that this will also prevent debugging tools, for instance man:lldb[1], man:truss[1], man:procstat[1], as well as some built-in debugging facilities in certain scripting language like PHP, etc., from working for unprivileged users.
-* `random_pid` - Randomize the PID of newly created processes.
-* `clear_tmp` - Clean [.filename]#/tmp# when the system starts up.
-* `disable_syslogd` - Disable opening syslogd network socket. By default FreeBSD runs syslogd in a secure way with `-s`. That prevents the daemon from listening for incoming UDP requests at port 514. With this option enabled syslogd will run with the flag `-ss` which prevents syslogd from opening any port. To get more information consult man:syslogd[8].
+image::bsdinstall-hardening.png[Menu shoring the different hardening security options.]
+
+Here is a summary of the options that can be enabled in this menu:
+
+* `hide_uids` - Hide processes running as other users (UID). This prevents unprivileged users from seeing running processes from other users.
+* `hide_gids` - Hide processes running as other groups (GID). This prevents unprivileged users from seeing running processes from other groups.
+* `hide_jail` - Hide processes running in jails. This prevents unprivileged users from seeing processes running inside jails.
+* `read_msgbuf` - Disable reading kernel message buffer for unprivileged users. Prevent unprivileged users from using man:dmesg[8] to view messages from the kernel's log buffer.
+* `proc_debug` - Disable process debugging facilities for unprivileged users. Disables a variety of unprivileged inter-process debugging services, including some procfs functionality, `ptrace()`, and `ktrace()`. Please note that this will also prevent debugging tools such as man:lldb[1], man:truss[1] and man:procstat[1], as well as some built-in debugging facilities in certain scripting languages like PHP.
+* `random_pid` - Randomize the PID of processes.
+* `clear_tmp` - Clean `/tmp` when the system starts up.
+* `disable_syslogd` - Disable opening the syslogd network socket. By default, FreeBSD runs syslogd in a secure way with `-s`. This prevents the daemon from listening for incoming UDP requests on port 514. With this option enabled, syslogd will instead run with `-ss`, which prevents syslogd from opening any port. For more information, see man:syslogd[8].
* `disable_sendmail` - Disable the sendmail mail transport agent.
-* `secure_console` - When this option is enabled, the prompt requests the `root` password when entering single-user mode.
-* `disable_ddtrace` - DTrace can run in a mode that will actually affect the running kernel. Destructive actions may not be used unless they have been explicitly enabled. To enable this option when using DTrace use `-w`. To get more information consult man:dtrace[1].
+* `secure_console` - Make the command prompt request the `root` password when entering single-user mode.
+* `disable_ddtrace` - DTrace can run in a mode that affects the running kernel. Destructive actions may not be used unless explicitly enabled. Use `-w` to enable this option when using DTrace. For more information, see man:dtrace[1].
+* `enable_aslr` - Enable address layout randomization. For more information about address layout randomization the link:https://en.wikipedia.org/wiki/Address_space_layout_randomization[Wikipedia article] can be consulted.
[[bsdinstall-addusers]]
=== Add Users
The next menu prompts to create at least one user account.
-It is recommended to login to the system using a user account rather than as `root`.
+It is recommended to log into the system using a user account rather than as `root`.
When logged in as `root`, there are essentially no limits or protection on what can be done.
Logging in as a normal user is safer and more secure.
@@ -993,45 +1061,45 @@ Select btn:[Yes] to add new users.
[[bsdinstall-add-user1]]
.Add User Accounts
-image::bsdinstall-adduser1.png[]
+image::bsdinstall-adduser1.png[Menu requesting if a user want to be added to the system.]
Follow the prompts and input the requested information for the user account.
The example shown in <<bsdinstall-add-user2>> creates the `asample` user account.
[[bsdinstall-add-user2]]
.Enter User Information
-image::bsdinstall-adduser2.png[]
+image::bsdinstall-adduser2.png[Menu requesting different information for the new user.]
Here is a summary of the information to input:
* `Username` - The name the user will enter to log in. A common convention is to use the first letter of the first name combined with the last name, as long as each username is unique for the system. The username is case sensitive and should not contain any spaces.
* `Full name` - The user's full name. This can contain spaces and is used as a description for the user account.
-* `Uid` - User ID. Typically, this is left blank so the system will assign a value.
-* `Login group` - The user's group. Typically this is left blank to accept the default.
+* `Uid` - User ID. This is typically left blank so the system automatically assigns a value.
+* `Login group` - The user's group. This is typically left blank to accept the default.
* `Invite _user_ into other groups?` - Additional groups to which the user will be added as a member. If the user needs administrative access, type `wheel` here.
* `Login class` - Typically left blank for the default.
-* `Shell` - Type in one of the listed values to set the interactive shell for the user. Refer to crossref:basics[shells,“Shells”] for more information about shells.
+* `Shell` - Type in one of the listed values to set the interactive shell for the user. Refer to crossref:basics[shells,Shells] for more information about shells.
* `Home directory` - The user's home directory. The default is usually correct.
* `Home directory permissions` - Permissions on the user's home directory. The default is usually correct.
* `Use password-based authentication?` - Typically `yes` so that the user is prompted to input their password at login.
-* `Use an empty password?` - Typically `no` as it is insecure to have a blank password.
+* `Use an empty password?` - Typically `no` as empty or blank passwords are insecure.
* `Use a random password?` - Typically `no` so that the user can set their own password in the next prompt.
-* `Enter password` - The password for this user. Characters typed will not show on the screen.
+* `Enter password` - The password for this user. Typed-in characters will not be shown on the screen.
* `Enter password again` - The password must be typed again for verification.
-* `Lock out the account after creation?` - Typically `no` so that the user can login.
+* `Lock out the account after creation?` - Typically `no` so that the user can log in.
-After entering everything, a summary is shown for review.
-If a mistake was made, enter `no` and try again.
-If everything is correct, enter `yes` to create the new user.
+After entering all the details, a summary is shown for review.
+If a mistake was made, enter `no` to correct it.
+Once everything is correct, enter `yes` to create the new user.
[[bsdinstall-add-user3]]
.Exit User and Group Management
-image::bsdinstall-adduser3.png[]
+image::bsdinstall-adduser3.png[Menu showing the information of the new user and requesting if everything is correct.]
If there are more users to add, answer the `Add another user?` question with `yes`.
Enter `no` to finish adding users and continue the installation.
-For more information on adding users and user management, see crossref:basics[users-synopsis,“Users and Basic Account Management”].
+For more information on adding users and user management, see crossref:basics[users-synopsis,Users and Basic Account Management].
[[bsdinstall-final-conf]]
=== Final Configuration
@@ -1040,9 +1108,9 @@ After everything has been installed and configured, a final chance is provided t
[[bsdinstall-final-config]]
.Final Configuration
-image::bsdinstall-finalconfiguration.png[]
+image::bsdinstall-finalconfiguration.png[Menu showing different options to perform before finishing the installation. Ex: Add user, Time Zone, etc.]
-Use this menu to make any changes or do any additional configuration before completing the installation.
+Use this menu to make any changes or to do any additional configuration before completing the installation.
* `Add User` - Described in <<bsdinstall-addusers>>.
* `Root Password` - Described in <<bsdinstall-post-root>>.
@@ -1053,39 +1121,39 @@ Use this menu to make any changes or do any additional configuration before comp
* `Time Zone` - Described in <<bsdinstall-timezone>>.
* `Handbook` - Download and install the FreeBSD Handbook.
-After any final configuration is complete, select btn:[Exit].
+Once configuration is complete, select btn:[Exit].
[[bsdinstall-final-modification-shell]]
.Manual Configuration
-image::bsdinstall-final-modification-shell.png[]
+image::bsdinstall-final-modification-shell.png[Menu showing that the installation has finished. And asking if you want to open a shell to make manual changes.]
-bsdinstall will prompt if there are any additional configuration that needs to be done before rebooting into the new system.
+bsdinstall will prompt for any additional configuration that needs to be done before rebooting into the new system.
Select btn:[Yes] to exit to a shell within the new system or btn:[No] to proceed to the last step of the installation.
[[bsdinstall-final-main]]
.Complete the Installation
-image::bsdinstall-mainexit.png[]
+image::bsdinstall-mainexit.png[Menu showing that the installation has finished and asking whether to reboot the system or access the Live CD.]
If further configuration or special setup is needed, select btn:[Live CD] to boot the install media into Live CD mode.
If the installation is complete, select btn:[Reboot] to reboot the computer and start the new FreeBSD system.
-Do not forget to remove the FreeBSD install media or the computer may boot from it again.
+Do not forget to remove the FreeBSD install media or the computer might boot from it again.
As FreeBSD boots, informational messages are displayed.
After the system finishes booting, a login prompt is displayed.
At the `login:` prompt, enter the username added during the installation.
Avoid logging in as `root`.
-Refer to crossref:basics[users-superuser,“The Superuser Account”] for instructions on how to become the superuser when administrative access is needed.
+Refer to crossref:basics[users-superuser,The Superuser Account] for instructions on how to become the superuser when administrative access is needed.
-The messages that appeared during boot can be reviewed by pressing kbd:[Scroll-Lock] to turn on the scroll-back buffer.
+The messages that appear during boot can be reviewed by pressing kbd:[Scroll-Lock] to turn on the scroll-back buffer.
The kbd:[PgUp], kbd:[PgDn], and arrow keys can be used to scroll back through the messages.
When finished, press kbd:[Scroll-Lock] again to unlock the display and return to the console.
To review these messages once the system has been up for some time, type `less /var/run/dmesg.boot` from a command prompt.
Press kbd:[q] to return to the command line after viewing.
-If sshd was enabled in <<bsdinstall-config-serv>>, the first boot may be a bit slower as the system will generate the RSA and DSA keys.
+If sshd was enabled in <<bsdinstall-config-serv>>, the first boot might be a bit slower as the system generates SSH host keys.
Subsequent boots will be faster.
-The fingerprints of the keys will be displayed, as seen in this example:
+The fingerprints of the keys are then displayed as in the following example:
[source,shell]
....
@@ -1133,137 +1201,18 @@ Refer to crossref:x11[x11,The X Window System] for more information about instal
Proper shutdown of a FreeBSD computer helps protect data and hardware from damage.
_Do not turn off the power before the system has been properly shut down!_ If the user is a member of the `wheel` group, become the superuser by typing `su` at the command line and entering the `root` password.
-Then, type `shutdown -p now` and the system will shut down cleanly, and if the hardware supports it, turn itself off.
-
-[[bsdinstall-network]]
-== Network Interfaces
-
-[[bsdinstall-config-network-dev]]
-=== Configuring Network Interfaces
-
-Next, a list of the network interfaces found on the computer is shown.
-Select the interface to configure.
-
-[[bsdinstall-configure-net-interface]]
-.Choose a Network Interface
-image::bsdinstall-configure-network-interface.png[]
-
-If an Ethernet interface is selected, the installer will skip ahead to the menu shown in <<bsdinstall-configure-net-ipv4>>.
-If a wireless network interface is chosen, the system will instead scan for wireless access points:
-
-[[bsdinstall-wireless-scan]]
-.Scanning for Wireless Access Points
-image::bsdinstall-configure-wireless-scan.png[]
-
-Wireless networks are identified by a Service Set Identifier (SSID), a short, unique name given to each network.
-SSIDs found during the scan are listed, followed by a description of the encryption types available for that network.
-If the desired SSID does not appear in the list, select btn:[Rescan] to scan again.
-If the desired network still does not appear, check for problems with antenna connections or try moving the computer closer to the access point.
-Rescan after each change is made.
-
-[[bsdinstall-wireless-accesspoints]]
-.Choosing a Wireless Network
-image::bsdinstall-configure-wireless-accesspoints.png[]
-
-Next, enter the encryption information for connecting to the selected wireless network.
-WPA2 encryption is strongly recommended as older encryption types, like WEP, offer little security.
-If the network uses WPA2, input the password, also known as the Pre-Shared Key (PSK).
-For security reasons, the characters typed into the input box are displayed as asterisks.
-
-[[bsdinstall-wireless-wpa2]]
-.WPA2 Setup
-image::bsdinstall-configure-wireless-wpa2setup.png[]
-
-Next, choose whether or not an IPv4 address should be configured on the Ethernet or wireless interface:
-
-[[bsdinstall-configure-net-ipv4]]
-.Choose IPv4 Networking
-image::bsdinstall-configure-network-interface-ipv4.png[]
-
-There are two methods of IPv4 configuration.
-DHCP will automatically configure the network interface correctly and should be used if the network provides a DHCP server.
-Otherwise, the addressing information needs to be input manually as a static configuration.
-
-[NOTE]
-====
-Do not enter random network information as it will not work.
-If a DHCP server is not available, obtain the information listed in <<bsdinstall-collect-network-information, Required Network Information>> from the network administrator or Internet service provider.
-====
-
-If a DHCP server is available, select btn:[Yes] in the next menu to automatically configure the network interface.
-The installer will appear to pause for a minute or so as it finds the DHCP server and obtains the addressing information for the system.
-
-[[bsdinstall-net-ipv4-dhcp]]
-.Choose IPv4DHCP Configuration
-image::bsdinstall-configure-network-interface-ipv4-dhcp.png[]
-
-If a DHCP server is not available, select btn:[No] and input the following addressing information in this menu:
-
-[[bsdinstall-net-ipv4-static]]
-.IPv4 Static Configuration
-image::bsdinstall-configure-network-interface-ipv4-static.png[]
-
-* `IP Address` - The IPv4 address assigned to this computer. The address must be unique and not already in use by another piece of equipment on the local network.
-* `Subnet Mask` - The subnet mask for the network.
-* `Default Router` - The IP address of the network's default gateway.
-
-The next screen will ask if the interface should be configured for IPv6. If IPv6 is available and desired, choose btn:[Yes] to select it.
-
-[[bsdinstall-net-ipv6]]
-.Choose IPv6 Networking
-image::bsdinstall-configure-network-interface-ipv6.png[]
-
-IPv6 also has two methods of configuration.
-StateLess Address AutoConfiguration (SLAAC) will automatically request the correct configuration information from a local router.
-Refer to http://tools.ietf.org/html/rfc4862[rfc4862] for more information.
-Static configuration requires manual entry of network information.
-
-If an IPv6 router is available, select btn:[Yes] in the next menu to automatically configure the network interface.
-The installer will appear to pause for a minute or so as it finds the router and obtains the addressing information for the system.
-
-[[bsdinstall-net-ipv6-slaac]]
-.Choose IPv6 SLAAC Configuration
-image::bsdinstall-configure-network-interface-slaac.png[]
-
-If an IPv6 router is not available, select btn:[No] and input the following addressing information in this menu:
-
-[[bsdinstall-net-ipv6-static]]
-.IPv6 Static Configuration
-image::bsdinstall-configure-network-interface-ipv6-static.png[]
-
-* `IPv6 Address` - The IPv6 address assigned to this computer. The address must be unique and not already in use by another piece of equipment on the local network.
-* `Default Router` - The IPv6 address of the network's default gateway.
-
-The last network configuration menu is used to configure the Domain Name System (DNS) resolver, which converts hostnames to and from network addresses.
-If DHCP or SLAAC was used to autoconfigure the network interface, the `Resolver Configuration` values may already be filled in.
-Otherwise, enter the local network's domain name in the `Search` field.
-`DNS #1` and `DNS #2` are the IPv4 and/or IPv6 addresses of the DNS servers.
-At least one DNS server is required.
-
-[[bsdinstall-net-dns-config]]
-.DNS Configuration
-image::bsdinstall-configure-network-ipv4-dns.png[]
-
-Once the interface is configured, select a mirror site that is located in the same region of the world as the computer on which FreeBSD is being installed.
-Files can be retrieved more quickly when the mirror is close to the target computer, reducing installation time.
-
-[[bsdinstall-netinstall-mirror]]
-.Choosing a Mirror
-image::bsdinstall-netinstall-mirrorselect.png[]
+Then, type `shutdown -p now` and the system will shut down cleanly, and, if the hardware supports it, turn itself off.
[[bsdinstall-install-trouble]]
== Troubleshooting
This section covers basic installation troubleshooting, such as common problems people have reported.
-Check the Hardware Notes (link:https://www.FreeBSD.org/releases/[https://www.freebsd.org/releases/]) document for the version of FreeBSD to make sure the hardware is supported.
-If the hardware is supported and lock-ups or other problems occur, build a custom kernel using the instructions in crossref:kernelconfig[kernelconfig,Configuring the FreeBSD Kernel] to add support for devices which are not present in the [.filename]#GENERIC# kernel.
-The default kernel assumes that most hardware devices are in their factory default configuration in terms of IRQs, I/O addresses, and DMA channels.
-If the hardware has been reconfigured, a custom kernel configuration file can tell FreeBSD where to find things.
+Check the Hardware Notes listed on the link:https://www.FreeBSD.org/releases/[FreeBSD Release Information] page for the version of FreeBSD to make sure the hardware is supported.
[NOTE]
====
-Some installation problems can be avoided or alleviated by updating the firmware on various hardware components, most notably the motherboard.
+Some installation problems can be avoided or alleviated by updating the firmware on various hardware components, most notably the motherboard.
Motherboard firmware is usually referred to as the BIOS.
Most motherboard and computer manufacturers have a website for upgrades and upgrade information.
@@ -1271,17 +1220,17 @@ Manufacturers generally advise against upgrading the motherboard BIOS unless the
The upgrade process _can_ go wrong, leaving the BIOS incomplete and the computer inoperative.
====
-If the system hangs while probing hardware during boot, or it behaves strangely during install, ACPI may be the culprit.
-FreeBSD makes extensive use of the system ACPI service on the i386 and amd64 platforms to aid in system configuration if it is detected during boot.
+If the system hangs while probing hardware during boot or behaves strangely during the installation process, ACPI may be the culprit.
+FreeBSD makes extensive use of the system ACPI service on the i386 and amd64 platforms to aid in system configuration if it is detected during boot.
Unfortunately, some bugs still exist in both the ACPI driver and within system motherboards and BIOS firmware.
ACPI can be disabled by setting the `hint.acpi.0.disabled` hint in the third stage boot loader:
[source,shell]
....
- set hint.acpi.0.disabled="1"
+set hint.acpi.0.disabled="1"
....
-This is reset each time the system is booted, so it is necessary to add `hint.acpi.0.disabled="1"` to the file [.filename]#/boot/loader.conf#.
+This is reset each time the system is booted, so it is necessary to add `hint.acpi.0.disabled="1"` to the file `/boot/loader.conf`.
More information about the boot loader can be found in crossref:boot[boot-synopsis,“Synopsis”].
[[using-live-cd]]
diff --git a/documentation/content/en/books/handbook/bsdinstall/_index.po b/documentation/content/en/books/handbook/bsdinstall/_index.po
new file mode 100644
index 0000000000..c7db5669a2
--- /dev/null
+++ b/documentation/content/en/books/handbook/bsdinstall/_index.po
@@ -0,0 +1,3731 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1
+#, no-wrap
+msgid "Guide about how to install FreeBSD, the minimum hardware requirements and supported architectures, how to create the installation media, etc"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1
+#, no-wrap
+msgid "Part I. Getting Started"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1
+#, no-wrap
+msgid "Chapter 2. Installing FreeBSD"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:14
+#, no-wrap
+msgid "Installing FreeBSD"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:56
+msgid ""
+"FreeBSD supports different architectures including amd64, ARM(R), RISC-V(R), "
+"and PowerPC(R). Depending on the architecture and platform, different "
+"images can be link:https://www.freebsd.org/where/[downloaded] to install or "
+"directly run FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:58
+msgid "The image types are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:60
+msgid ""
+"Virtual Machine disk images, such as `qcow2`, `vmdk`, `vhd`, and raw device "
+"images. These are not installation images, but images that have FreeBSD "
+"preinstalled and ready for post-installation tasks. Virtual machine images "
+"are also commonly used in cloud environments."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:61
+msgid ""
+"SD card images, for embedded systems such as Raspberry Pi. These files must "
+"be uncompressed and written as a raw image to an SD card, from which the "
+"board will boot."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:62
+msgid ""
+"Installation images to boot from an ISO or USB device to install FreeBSD on "
+"a drive for the usual desktop, laptop, or server system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:65
+msgid ""
+"The rest of this chapter describes the third case, explaining how to install "
+"FreeBSD using the text-based installation program named bsdinstall. There "
+"may be minor differences between the installer and what is shown here, so "
+"use this chapter as a general guide rather than as a set of literal "
+"instructions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:67
+msgid "After reading this chapter, you will know:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:69
+msgid "How to obtain FreeBSD images and create FreeBSD installation media."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:70
+msgid "How to start bsdinstall."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:71
+msgid ""
+"The questions bsdinstall will ask, what they mean, and how to answer them."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:72
+msgid "How to troubleshoot a failed installation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:73
+msgid ""
+"How to access a live version of FreeBSD before committing to an installation."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:75
+#, no-wrap
+msgid "Minimum Hardware Requirements"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:80
+msgid ""
+"The hardware requirements to install FreeBSD vary by architecture and "
+"version. Hardware architectures and devices supported by a FreeBSD release "
+"are listed on the link:https://www.FreeBSD.org/releases/[FreeBSD Release "
+"Information] page. The link:https://www.FreeBSD.org/where/[FreeBSD download "
+"page] also has recommendations for choosing the correct image for different "
+"architectures."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:82
+#, no-wrap
+msgid "Pre-Installation Tasks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:86
+msgid ""
+"Once it has been determined that the system meets the minimum hardware "
+"requirements for installing FreeBSD, the installation file should be "
+"downloaded and the installation media prepared. Before doing this, check "
+"that the system is ready for an installation by verifying the items in this "
+"checklist:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:90
+#, no-wrap
+msgid "*Back Up Important Data*\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:96
+msgid ""
+"Before installing any operating system, *always* backup all important data "
+"first. Do not store the backup on the system being installed. Instead, "
+"save the data to a removable disk such as a USB drive, another system on the "
+"network, or an online backup service. Test the backup before starting the "
+"installation to make sure it contains all of the needed files. Once the "
+"installer formats the system's disk, all data stored on that disk will be "
+"lost."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:97
+#, no-wrap
+msgid "*Decide Where to Install FreeBSD*\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:100
+msgid ""
+"If FreeBSD will be the only operating system installed, this step can be "
+"skipped. But if FreeBSD will share the disk with another operating system, "
+"decide which disk or partition will be used for FreeBSD."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:107
+msgid ""
+"In the i386 and amd64 architectures, disks can be divided into multiple "
+"partitions using one of two partitioning schemes. A traditional _Master "
+"Boot Record_ (MBR) holds a partition table defining up to four _primary "
+"partitions_. For historical reasons, FreeBSD calls these primary partition "
+"_slices_. One of these primary partitions can be made into an _extended "
+"partition_ containing multiple _logical partitions_. The _GUID Partition "
+"Table_ (GPT) is a newer and simpler method of partitioning a disk. Common "
+"GPT implementations allow up to 128 partitions per disk, eliminating the "
+"need for logical partitions."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:111
+msgid ""
+"The FreeBSD boot loader requires either a primary or GPT partition. If all "
+"of the primary or GPT partitions are already in use, one must be freed for "
+"FreeBSD. To create a partition without deleting existing data, use a "
+"partition resizing tool to shrink an existing partition and create a new "
+"partition using the freed space."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:114
+msgid ""
+"A variety of free and commercial partition resizing tools are listed at link:"
+"https://en.wikipedia.org/wiki/List_of_disk_partitioning_software[List of "
+"disk partitioning software wikipedia entry]. link:https://gparted.org/"
+"livecd.php[GParted Live] is a free live CD which includes the GParted "
+"partition editor."
+msgstr ""
+
+#. type: delimited block = 6
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:119
+msgid ""
+"When used properly, disk shrinking utilities can safely create space for "
+"creating a new partition. Since the possibility of selecting the wrong "
+"partition exists, always backup any important data and verify the integrity "
+"of the backup before modifying disk partitions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:123
+msgid ""
+"Disk partitions containing different operating systems make it possible to "
+"install multiple operating systems on one computer. An alternative is to "
+"use crossref:virtualization[virtualization,virtualization] which allows "
+"multiple operating systems to run at the same time without modifying any "
+"disk partitions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:124
+#, no-wrap
+msgid "*Collect Network Information*\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:127
+msgid ""
+"Some FreeBSD installation methods require a network connection in order to "
+"download the installation files. After any installation, the installer will "
+"offer to setup the system's network interfaces."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:130
+msgid ""
+"If the network has a DHCP server, it can be used to provide automatic "
+"network configuration. If DHCP is not available, the following network "
+"information for the system must be obtained from the local network "
+"administrator or Internet service provider:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:133
+msgid "Required Network Information"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:135
+msgid "IP address"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:136
+msgid "Subnet mask"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:137
+msgid "IP address of default gateway"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:138
+msgid "Domain name of the network"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:139
+msgid "IP addresses of the network's DNS servers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:141
+#, no-wrap
+msgid "*Check for FreeBSD Errata*\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:146
+msgid ""
+"Although the FreeBSD Project strives to ensure that each release of FreeBSD "
+"is as stable as possible, bugs occasionally creep into the process. On very "
+"rare occasions those bugs affect the installation process. As these "
+"problems are discovered and fixed, they are noted in the FreeBSD Errata page "
+"of each version. Check the errata before installing to make sure that there "
+"are no problems that might affect the installation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:148
+msgid ""
+"Information and errata for all the releases can be found on the link:https://"
+"www.FreeBSD.org/releases/[FreeBSD Release Information] page."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:151
+#, no-wrap
+msgid "Prepare the Installation Media"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:155
+msgid ""
+"The FreeBSD installer is not an application that can be run from within "
+"another operating system. Instead, download a FreeBSD installation file, "
+"burn it to the media associated with its file type and size (CD, DVD, or "
+"USB), and boot the system to install from the inserted media."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:158
+msgid ""
+"FreeBSD installation files are available at the link:https://www.FreeBSD.org/"
+"where/[FreeBSD download page]. Each installation file's name includes the "
+"release version of FreeBSD, the architecture, and the type of file."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:161
+msgid ""
+"Installation files are available in several formats, compressed with man:"
+"xz[1] or uncompressed. The formats vary depending on computer architecture "
+"and media type."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:163
+msgid "Installation file types:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:165
+msgid ""
+"`*-bootonly.iso*`: This is the smallest installation file as it only "
+"contains the installer. A working Internet connection is required during "
+"installation as the installer will download the files it needs to complete "
+"the FreeBSD installation. This file should be burned to optical media."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:166
+msgid ""
+"`*-disc1.iso*`: This file contains all of the files needed to install "
+"FreeBSD, its source, and the Ports Collection. This file should be burned to "
+"optical media."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:167
+msgid ""
+"`*-dvd1.iso*`: This file contains all of the files needed to install "
+"FreeBSD, its source, and the Ports Collection. It also contains a set of "
+"popular binary packages for installing a window manager and some "
+"applications so that a complete system can be installed from media without "
+"requiring a connection to the Internet. This file should be burned to "
+"optical media."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:168
+msgid ""
+"`*-memstick.img*`: This file contains all of the files needed to install "
+"FreeBSD, its source, and the Ports Collection. Write this file to a USB "
+"stick as shown in <<bsdinstall-usb>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:169
+msgid ""
+"`*-mini-memstick.img*`: Like `*-bootonly.iso*`, does not include "
+"installation files, but downloads them as needed. A working internet "
+"connection is required during installation. It should be written to a USB "
+"stick as shown in <<bsdinstall-usb>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:173
+msgid ""
+"After downloading the image file, download at least one _checksum_ file from "
+"the same directory. There are two _checksum_ files available, named after "
+"the release number and the architecture name. For example: `CHECKSUM.SHA256-"
+"FreeBSD-13.1-RELEASE-amd64` and `CHECKSUM.SHA512-FreeBSD-13.1-RELEASE-amd64`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:178
+msgid ""
+"After downloading one of the files (or both), calculate the _checksum_ for "
+"the image file and compare it with the one shown in the _checksum_ file. "
+"Note that you need to compare the calculated _checksum_ against the correct "
+"file, as they correspond to two different algorithms: SHA256 and SHA512. "
+"FreeBSD provides man:sha256[1] and man:sha512[1] that can be used for "
+"calculating the _checksum_. Other operating systems have similar programs."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:180
+msgid ""
+"Verifying the _checksum_ in FreeBSD can be done automatically using man:"
+"sha256sum[1] (and man:sha512sum[1]) by executing:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:185
+#, no-wrap
+msgid ""
+"% sha256sum -c CHECKSUM.SHA256-FreeBSD-13.1-RELEASE-amd64 FreeBSD-13.1-RELEASE-amd64-dvd1.iso\n"
+"FreeBSD-13.1-RELEASE-amd64-dvd1.iso: OK\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:189
+msgid ""
+"The checksums must match exactly. If the checksums do not match, the image "
+"file is corrupt and must be downloaded again."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:191
+#, no-wrap
+msgid "Writing an Image File to USB"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:197
+msgid ""
+"The `\\*memstick.img` file is an _image_ of the complete contents of a "
+"memory stick. It _cannot_ be copied to the target device as a file. "
+"Several applications are available for writing the `*.img` to a USB stick. "
+"This section describes two of these utilities."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:202
+msgid ""
+"Before proceeding, back up any important data on the USB stick. This "
+"procedure will erase the existing data on the stick."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:208
+#, no-wrap
+msgid "*Procedure. Using `dd` to write the image* +\n"
+msgstr ""
+
+#. type: delimited block = 6
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:213
+msgid ""
+"This example uses `/dev/da0` as the target device where the image will be "
+"written. Be *very careful* that the correct device is used as this command "
+"will destroy the existing data on the specified target device."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:216
+msgid ""
+"The command-line utility is available on BSD, Linux(R), and Mac OS(R) "
+"systems. To burn the image using `dd`, insert the USB stick and determine "
+"its device name. Then, specify the name of the downloaded installation file "
+"and the device name for the USB stick. This example burns the amd64 "
+"installation image to the first USB device on an existing FreeBSD system."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:220
+#, no-wrap
+msgid "# dd if=FreeBSD-13.1-RELEASE-amd64-memstick.img of=/dev/da0 bs=1M conv=sync\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:223
+msgid ""
+"If this command fails, verify that the USB stick is not mounted and that the "
+"device name is for the disk, not a partition."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:228
+msgid ""
+"Some operating systems might require this command to be run with man:"
+"sudo[8]. The man:dd[1] syntax varies slightly across different platforms; "
+"for example, Mac OS(R) requires a lower-case `bs=1m`. Systems like Linux(R) "
+"might buffer writes. To force all writes to complete, use man:sync[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:233
+#, no-wrap
+msgid "*Procedure. Using Windows(R) to Write the Image* +\n"
+msgstr ""
+
+#. type: delimited block = 6
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:237
+msgid ""
+"Be sure to give the correct drive letter as the existing data on the "
+"specified drive will be overwritten and destroyed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:240
+#, no-wrap
+msgid "*Obtaining Image Writer for Windows(R)*\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:243
+msgid ""
+"Image Writer for Windows(R) is a free application that can correctly write "
+"an image file to a memory stick. Download it from https://sourceforge.net/"
+"projects/win32diskimager/[win32diskimager home page] and extract it into a "
+"folder."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:245
+#, no-wrap
+msgid "*Writing the Image with Image Writer*\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:252
+msgid ""
+"Double-click the Win32DiskImager icon to start the program. Verify that the "
+"drive letter shown under `Device` is the drive with the memory stick. Click "
+"the folder icon and select the image to be written to the memory stick. "
+"Click btn:[Save] to accept the image file name. Verify that everything is "
+"correct, and that no folders on the memory stick are open in other windows. "
+"When everything is ready, click btn:[Write] to write the image file to the "
+"memory stick."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:255
+#, no-wrap
+msgid "Starting the Installation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:260
+msgid ""
+"By default, the installation will not make any changes to the disk(s) before "
+"the following message:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:267
+#, no-wrap
+msgid ""
+"Your changes will now be written to disk. If you\n"
+"have chosen to overwrite existing data, it will\n"
+"be PERMANENTLY ERASED. Are you sure you want to\n"
+"commit your changes?\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:271
+msgid ""
+"The install can be exited at any time prior to this warning. If there is a "
+"concern that something is incorrectly configured, just turn the computer off "
+"before this point and no changes will be made to the system's disks."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:277
+msgid ""
+"This section describes how to boot the system from the installation media "
+"which was prepared using the instructions in <<bsdinstall-installation-"
+"media>>. When using a bootable USB stick, plug in the USB stick before "
+"turning on the computer. When booting from CD or DVD, turn on the computer "
+"and insert the media at the first opportunity. How to configure the system "
+"to boot from the inserted media depends upon the architecture."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:279
+#, no-wrap
+msgid "FreeBSD Boot Menu"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:282
+msgid ""
+"Once the system boots from the installation media, a menu similar to the "
+"following will be displayed:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:284
+#, no-wrap
+msgid "FreeBSD Boot Loader Menu"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:285
+#, no-wrap
+msgid "FreeBSD boot loader menu"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:285
+#, no-wrap
+msgid "bsdinstall-newboot-loader-menu.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:291
+msgid ""
+"By default, the menu will wait ten seconds for user input before booting "
+"into the FreeBSD installer or, if FreeBSD is already installed, before "
+"booting into FreeBSD. To pause the boot timer in order to review the "
+"selections, press kbd:[Space]. To select an option, press its highlighted "
+"number, character, or key. The following options are available."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:293
+msgid ""
+"`Boot Multi User`: This will continue the FreeBSD boot process. If the boot "
+"timer has been paused, press kbd:[1], upper- or lower-case kbd:[B], or kbd:"
+"[Enter]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:294
+msgid ""
+"`Boot Single User`: This mode can be used to fix an existing FreeBSD "
+"installation as described in crossref:boot[boot-singleuser,“Single-User "
+"Mode”]. Press kbd:[2] or the upper- or lower-case kbd:[S] to enter this mode."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:295
+msgid ""
+"`Escape to loader prompt`: This will boot the system into a repair prompt "
+"that contains a limited number of low-level commands. This prompt is "
+"described in crossref:boot[boot-loader,“Stage Three”]. Press kbd:[3] or kbd:"
+"[Esc] to boot into this prompt."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:296
+msgid "`Reboot`: Reboots the system."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:297
+msgid ""
+"`Cons`: Allow to continue the installation by `video`, `serial`, `Dual "
+"(serial primary)` or `Dual (Video primary)`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:298
+msgid "`Kernel`: Loads a different kernel."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:299
+msgid ""
+"`Boot Options`: Opens the menu shown in, and described under, <<bsdinstall-"
+"boot-options-menu>>."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:301
+#, no-wrap
+msgid "FreeBSD Boot Options Menu"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:302
+#, no-wrap
+msgid "Menu showing the different boot options supported"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:302
+#, no-wrap
+msgid "bsdinstall-boot-options-menu.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:306
+msgid ""
+"The boot options menu is divided into two sections. The first section can "
+"be used to either return to the main boot menu or to reset any toggled "
+"options back to their defaults."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:310
+msgid ""
+"The next section is used to toggle the available options to `On` or `Off` by "
+"pressing the option's highlighted number or character. The system will "
+"always boot using the settings for these options until they are modified. "
+"Several options can be toggled using this menu:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:312
+msgid ""
+"`ACPI Support`: If the system hangs during boot, try toggling this option to "
+"`Off`. This option is only present when ACPI support is available but not "
+"required."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:313
+msgid ""
+"`Safe Mode`: If the system still hangs during boot even with `ACPI Support` "
+"set to `Off`, try setting this option to `On`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:314
+msgid ""
+"`Single User`: Toggle this option to `On` to fix an existing FreeBSD "
+"installation as described in crossref:boot[boot-singleuser,“Single-User "
+"Mode”]. Once the problem is fixed, set it back to `Off`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:315
+msgid ""
+"`Verbose`: Toggle this option to `On` to see more detailed messages during "
+"the boot process. This can be useful when troubleshooting a piece of "
+"hardware."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:319
+msgid ""
+"After making the needed selections, press kbd:[1] or kbd:[Backspace] to "
+"return to the main boot menu, then press kbd:[Enter] to continue booting "
+"into FreeBSD. A series of boot messages will appear as FreeBSD carries out "
+"its hardware device probes and loads the installation program. Once the "
+"boot is complete, the welcome menu shown in <<bsdinstall-choose-mode>> will "
+"be displayed."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:321
+#, no-wrap
+msgid "Welcome Menu"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:322
+#, no-wrap
+msgid "FreeBSD installation welcome menu"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:322
+#, no-wrap
+msgid "bsdinstall-choose-mode.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:330
+msgid ""
+"Press kbd:[Enter] to select the default of btn:[Install] to enter the "
+"installer. The rest of this chapter describes how to use this installer. "
+"Otherwise, use the right or left arrows or the colorized letter to select "
+"the desired menu item. The btn:[Shell] can be used to access a FreeBSD "
+"shell in order to use command line utilities to prepare the disks before "
+"installation. The btn:[Live CD] option can be used to try out FreeBSD "
+"before installing it. The live version is described in <<using-live-cd>>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:336
+msgid ""
+"To review the boot messages, including the hardware device probe, press the "
+"upper- or lower-case kbd:[S] and then kbd:[Enter] to access a shell. At the "
+"shell prompt, type `more /var/run/dmesg.boot` and use the space bar to "
+"scroll through the messages. When finished, type `exit` to return to the "
+"welcome menu."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:339
+#, no-wrap
+msgid "Using bsdinstall"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:344
+msgid ""
+"This section shows the order of the bsdinstall menus and the type of "
+"information that will be asked before the system is installed. Use the "
+"arrow keys to highlight a menu option, then kbd:[Space] to select or "
+"deselect that menu item. When finished, press kbd:[Enter] to save the "
+"selection and move onto the next screen."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:346
+#, no-wrap
+msgid "Selecting the Keymap Menu"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:349
+msgid ""
+"Before starting the process, bsdinstall will load the keymap files as shown "
+"in <<bsdinstall-keymap-loading>>."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:351
+#, no-wrap
+msgid "Keymap Loading"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:352
+#, no-wrap
+msgid "Keymap loading"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:352
+#, no-wrap
+msgid "bsdinstall-keymap-loading.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:357
+msgid ""
+"After the keymaps have been loaded, bsdinstall displays the menu shown in "
+"<<bsdinstall-keymap-10>>. Use the up and down arrows to select the keymap "
+"that most closely represents the mapping of the keyboard attached to the "
+"system. Press kbd:[Enter] to save the selection."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:359
+#, no-wrap
+msgid "Keymap Selection Menu"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:360
+#, no-wrap
+msgid "Keymap selection menu showing all supported keyboards"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:360
+#, no-wrap
+msgid "bsdinstall-keymap-10.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:366
+msgid ""
+"Pressing kbd:[Esc] will exit this menu and use the default keymap. If the "
+"choice of keymap is not clear, [.guimenuitem]#United States of America "
+"ISO-8859-1# is also a safe option."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:369
+msgid ""
+"In addition, when selecting a different keymap, the user can try the keymap "
+"and ensure it is correct before proceeding, as shown in <<bsdinstall-keymap-"
+"testing>>."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:371
+#, no-wrap
+msgid "Keymap Testing Menu"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:372
+#, no-wrap
+msgid "Keymap testing menu"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:372
+#, no-wrap
+msgid "bsdinstall-keymap-testing.png"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:375
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:380
+#, no-wrap
+msgid "Setting the Hostname"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:378
+msgid ""
+"The next bsdinstall menu is used to set the hostname for the newly installed "
+"system."
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:381
+#, no-wrap
+msgid "Setting the hostname"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:381
+#, no-wrap
+msgid "bsdinstall-config-hostname.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:385
+msgid ""
+"Type in a hostname that is unique for the network. It should be a fully-"
+"qualified hostname, such as `machine3.example.com`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:387
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:392
+#, no-wrap
+msgid "Selecting Components to Install"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:390
+msgid "Next, bsdinstall will prompt to select optional components to install."
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:393
+#, no-wrap
+msgid "Different components that can be installed. Example: base-dbg"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:393
+#, no-wrap
+msgid "bsdinstall-config-components.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:398
+msgid ""
+"Deciding which components to install will depend largely on the intended use "
+"of the system and the amount of disk space available. The FreeBSD kernel "
+"and userland, collectively known as the _base system_, are always "
+"installed. Depending on the architecture, some of these components may not "
+"appear:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:400
+msgid ""
+"`base-dbg` - Base tools like cat and ls, among many others, with debug "
+"symbols activated."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:401
+msgid "`kernel-dbg` - Kernel and modules with debug symbols activated."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:402
+msgid ""
+"`lib32-dbg` - Compatibility libraries for running 32-bit applications on a "
+"64-bit version of FreeBSD with debug symbols activated."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:403
+msgid ""
+"`lib32` - Compatibility libraries for running 32-bit applications on a 64-"
+"bit version of FreeBSD."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:404
+msgid ""
+"`ports` - The FreeBSD Ports Collection is a collection of files which "
+"automates the downloading, compiling and installation of third-party "
+"software packages. crossref:ports[ports,Installing Applications: Packages "
+"and Ports] discusses how to use the Ports Collection."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:410
+msgid ""
+"The installation program does not check for adequate disk space. Select "
+"this option only if sufficient hard disk space is available. The FreeBSD "
+"Ports Collection takes up about {ports-size} of disk space."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:413
+msgid ""
+"`src` - The complete FreeBSD source code for both the kernel and the "
+"userland. Although not required for the majority of applications, it may be "
+"required to build device drivers, kernel modules, or some applications from "
+"the Ports Collection. It is also used for developing FreeBSD itself. The "
+"full source tree requires 1 GB of disk space and recompiling the entire "
+"FreeBSD system requires an additional 5 GB of space."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:414
+msgid "`tests` - FreeBSD Test Suite."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:416
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:423
+#, no-wrap
+msgid "Installing from the Network"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:421
+msgid ""
+"The menu shown in <<bsdinstall-netinstall-notify>> only appears when "
+"installing from a `-bootonly.iso` or `-mini-memstick.img`, as this "
+"installation media does not hold copies of the installation files. Since "
+"the installation files must be retrieved over a network connection, this "
+"menu indicates that the network interface must be configured first. If this "
+"menu is shown in any step of the process, remember to follow the "
+"instructions in <<bsdinstall-config-network-dev>>."
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:424
+#, no-wrap
+msgid "Indicates that certain components have not been found and will be downloaded using the network."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:424
+#, no-wrap
+msgid "bsdinstall-netinstall-files.png"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:427
+#, no-wrap
+msgid "Allocating Disk Space"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:430
+msgid ""
+"The next menu is used to determine the method for allocating disk space."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:432
+#, no-wrap
+msgid "Partitioning Choices"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:433
+#, no-wrap
+msgid "Shows the different partition options. Example: Manual"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:433
+#, no-wrap
+msgid "bsdinstall-zfs-partmenu.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:436
+msgid "bsdinstall gives the user four methods for allocating disk space:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:438
+msgid ""
+"`Auto (ZFS)` partitioning creates a root-on-ZFS system with optional GELI "
+"encryption support for _boot environments_."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:439
+msgid ""
+"`Auto (UFS)` partitioning automatically sets up the disk partitions using "
+"the `UFS` file system."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:440
+msgid ""
+"`Manual` partitioning allows advanced users to create customized partitions "
+"from menu options."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:441
+msgid ""
+"`Shell` opens a shell prompt where advanced users can create customized "
+"partitions using command-line utilities like man:gpart[8], man:fdisk[8], and "
+"man:bsdlabel[8]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:444
+msgid ""
+"This section describes what to consider when laying out the disk "
+"partitions. It then demonstrates how to use the different partitioning "
+"methods."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:446
+#, no-wrap
+msgid "Designing the Partition Layout"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:453
+msgid ""
+"The default partition layout for file systems includes one file system for "
+"the entire system. When using `UFS` it may be worth considering the use of "
+"multiple file systems if you have sufficient disk space or multiple disks. "
+"When laying out file systems, remember that hard drives transfer data faster "
+"from the outer tracks to the inner. Thus, smaller and heavier-accessed file "
+"systems should be closer to the outside of the drive, while larger "
+"partitions like `/usr` should be placed toward the inner parts of the disk. "
+"It is a good idea to create partitions in an order similar to: `/`, swap, `/"
+"var`, and `/usr`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:458
+msgid ""
+"The size of the `/var` partition reflects the intended machine's usage. "
+"This partition is used to hold mailboxes, log files, and printer spools. "
+"Mailboxes and log files can grow to unexpected sizes depending on the number "
+"of users and how long log files are kept. On average, most users rarely "
+"need more than about a gigabyte of free disk space in `/var`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:464
+msgid ""
+"Sometimes, a lot of disk space is required in `/var/tmp`. When new software "
+"is installed, the packaging tools extract a temporary copy of the packages "
+"under `/var/tmp`. Large software packages, like Firefox or LibreOffice may "
+"be tricky to install if there is not enough disk space under `/var/tmp`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:470
+msgid ""
+"The `/usr` partition holds many of the files which support the system, "
+"including the FreeBSD Ports Collection and system source code. At least 2 "
+"gigabytes of space is recommended for this partition. Also, note that home "
+"directories for users are placed in `/usr/home` by default, but can be "
+"placed on another partition. By default, `/home` is a symbolic link to `/"
+"usr/home`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:473
+msgid ""
+"When selecting partition sizes, keep the space requirements in mind. "
+"Running out of space in one partition while barely using another can be a "
+"hassle."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:477
+msgid ""
+"As a rule of thumb, the swap partition should be about double the size of "
+"physical memory (RAM). Systems with minimal RAM (less for larger-memory "
+"configurations) may perform better with more swap. Configuring too little "
+"swap can lead to inefficiencies in the VM page scanning code and might "
+"create issues later if more memory is added."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:485
+msgid ""
+"On larger systems with multiple SCSI disks or multiple IDE disks operating "
+"on different controllers, it is recommended that swap be configured on each "
+"drive, up to four drives. The swap partitions should be approximately the "
+"same size. The kernel can handle arbitrary sizes, but internal data "
+"structures scale to 4 times the largest swap partition. Keeping the swap "
+"partitions near the same size will allow the kernel to optimally stripe swap "
+"space across disks. Large swap sizes may elicit a kernel warning message "
+"about the total configured swap. The limit is raised by increasing the "
+"amount of memory allowed for keeping track of swap allocations, as "
+"instructed by the warning message. It might be easier to recover from a "
+"runaway program before being forced to reboot."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:489
+msgid ""
+"By properly partitioning a system, fragmentation introduced in the smaller "
+"write-heavy partitions will not bleed over into the mostly read partitions. "
+"Keeping the write-loaded partitions closer to the disk's edge will increase "
+"I/O performance in the partitions where it occurs the most. While I/O "
+"performance in the larger partitions may be needed, shifting them more "
+"toward the edge of the disk will not lead to a significant performance "
+"improvement over moving `/var` to the edge."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:491
+#, no-wrap
+msgid "Guided Partitioning Using UFS"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:495
+msgid ""
+"When this method is selected, a menu will display the available disk(s). If "
+"multiple disks are connected, choose the one where FreeBSD is to be "
+"installed."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:497
+#, no-wrap
+msgid "Selecting from Multiple Disks"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:498
+#, no-wrap
+msgid "Shows the list of disks on which FreeBSD can be installed"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:498
+#, no-wrap
+msgid "bsdinstall-part-guided-disk.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:503
+msgid ""
+"Once the disk is selected, the next menu prompts to install to either the "
+"entire disk or to create a partition using free space. If btn:[Entire Disk] "
+"is chosen, a general partition layout filling the whole disk is "
+"automatically created. Selecting btn:[Partition] creates a partition layout "
+"from the unused space on the disk."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:505
+#, no-wrap
+msgid "Selecting Entire Disk or Partition"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:506
+#, no-wrap
+msgid "Menu asking the user if he wants to use all the available space on the disk or wants to make a partition"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:506
+#, no-wrap
+msgid "bsdinstall-part-entire-part.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:509
+msgid ""
+"After the btn:[Entire Disk] option is chosen, bsdinstall displays a dialog "
+"indicating that the disk will be erased."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:511
+#, no-wrap
+msgid "Confirmation"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:512
+#, no-wrap
+msgid "Menu indicating the user that all data on the disk will be deleted and asking for confirmation"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:512
+#, no-wrap
+msgid "bsdinstall-ufs-warning.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:519
+msgid ""
+"The next menu shows a list with the available partition scheme types. GPT "
+"is usually the most appropriate choice for amd64 computers. Older computers "
+"that are not compatible with GPT should use MBR. The other partition "
+"schemes are generally used for uncommon or older computers. More "
+"information is available in <<partition-schemes>>."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:521
+#, no-wrap
+msgid "Select Partition Scheme"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:522
+#, no-wrap
+msgid "Menu showing the user the different the different types of partition that exist and requesting one of them"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:522
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:557
+#, no-wrap
+msgid "bsdinstall-part-manual-partscheme.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:528
+msgid ""
+"After the partition layout has been created, review it to ensure it meets "
+"the needs of the installation. Selecting btn:[Revert] will reset the "
+"partitions to their original values. Pressing btn:[Auto] will recreate the "
+"automatic FreeBSD partitions. Partitions can also be manually created, "
+"modified, or deleted. When the partitioning is correct, select btn:[Finish] "
+"to continue with the installation."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:530
+#, no-wrap
+msgid "Review Created Partitions"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:531
+#, no-wrap
+msgid "Menu showing created partitions"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:531
+#, no-wrap
+msgid "bsdinstall-part-review.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:537
+msgid ""
+"Once the disks are configured, the next menu provides the last chance to "
+"make changes before the selected drives are formatted. If changes need to "
+"be made, select btn:[Back] to return to the main partitioning menu. btn:"
+"[Revert & Exit] exits the installer without making any changes to the "
+"drive. Otherwise, select btn:[Commit] to start the installation process."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:539
+#, no-wrap
+msgid "Final Confirmation"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:540
+#, no-wrap
+msgid "Menu indicating to the user that all changes will be written to disk and informing that if he decides to continue the existing data will be permanently deleted."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:540
+#, no-wrap
+msgid "bsdinstall-final-confirmation.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:543
+msgid ""
+"To continue with the installation process, go to <<bsdinstall-fetching-"
+"distribution>>."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:545
+#, no-wrap
+msgid "Manual Partitioning"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:548
+msgid "Selecting this method opens the partition editor:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:550
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:556
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:587
+#, no-wrap
+msgid "Manually Create Partitions"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:551
+#, no-wrap
+msgid "Menu showing the Partition Editor."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:551
+#, no-wrap
+msgid "bsdinstall-part-manual-create.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:554
+msgid ""
+"Highlight the installation drive (`ada0` in this example) and select btn:"
+"[Create] to display a menu of available partition schemes:"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:557
+#, no-wrap
+msgid "Menu showing the different kind of partition schemes"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:562
+msgid ""
+"GPT is usually the most appropriate choice for amd64 computers. Older "
+"computers that are not compatible with GPT should use MBR. The other "
+"partition schemes are generally used for uncommon or older computers."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:564
+#, no-wrap
+msgid "Partitioning Schemes"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:568
+#, no-wrap
+msgid "Abbreviation"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:570
+#, no-wrap
+msgid "Description"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:571
+#, no-wrap
+msgid "APM"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:573
+#, no-wrap
+msgid "Apple Partition Map, used by PowerPC(R)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:574
+#, no-wrap
+msgid "BSD"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:576
+#, no-wrap
+msgid "BSD label without an MBR, sometimes called _dangerously dedicated mode_ as non-BSD disk utilities may not recognize it."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:577
+#, no-wrap
+msgid "GPT"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:579
+#, no-wrap
+msgid "link:https://en.wikipedia.org/wiki/GUID_Partition_Table[GUID Partition Table]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:580
+#, no-wrap
+msgid "MBR"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:581
+#, no-wrap
+msgid "link:https://en.wikipedia.org/wiki/Master_boot_record[Master Boot Record]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:585
+msgid ""
+"After the partitioning scheme has been selected and created, select btn:"
+"[Create] again to create the partitions. The kbd:[Tab] key is used to give "
+"focus to the fields (after cycling through btn:[<OK>], btn:[<Options>], and "
+"btn:[<Cancel>])."
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:588
+#, no-wrap
+msgid "Menu requesting type"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:588
+#, no-wrap
+msgid "bsdinstall-part-manual-addpart.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:591
+msgid ""
+"A standard FreeBSD GPT installation uses at least three partitions, "
+"including either UFS or ZFS:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:593
+msgid "`freebsd-boot` or `efi` - Holds the FreeBSD boot code."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:594
+msgid "`freebsd-ufs` - A FreeBSD UFS file system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:595
+msgid ""
+"`freebsd-zfs` - A FreeBSD ZFS file system. More information about ZFS is "
+"available in crossref:zfs[zfs,The Z File System (ZFS)]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:596
+msgid "`freebsd-swap` - FreeBSD swap space."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:598
+msgid ""
+"Refer to man:gpart[8] for descriptions of the available GPT partition types."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:600
+msgid ""
+"Multiple file system partitions can be created. Some people prefer a "
+"traditional layout with separate partitions for `/`, `/var`, `/tmp`, and `/"
+"usr`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:604
+msgid ""
+"Note that `/tmp` can be added later as a memory-based file system (man:"
+"tmpfs[5]) on systems with sufficient memory."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:607
+msgid "See <<bsdinstall-part-manual-splitfs>> for an example."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:609
+msgid ""
+"The `Size` may be entered with common abbreviations: _K_ for kilobytes, _M_ "
+"for megabytes, or _G_ for gigabytes."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:615
+msgid ""
+"Proper sector alignment provides the best performance, and making partition "
+"sizes even multiples of 4K bytes helps to ensure alignment on drives with "
+"either 512-byte or 4K-byte sectors. Generally, using partition sizes that "
+"are even multiples of 1M or 1G is the easiest way to make sure every "
+"partition starts at an even multiple of 4K. There is one exception: the "
+"_freebsd-boot_ partition should be no larger than 512K due to current boot "
+"code limitations."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:619
+msgid ""
+"A `Mountpoint` is needed if the partition will contain a file system. If "
+"only a single UFS partition will be created, the mountpoint should be `/`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:625
+msgid ""
+"The `Label` is a name by which the partition will be known. Drive names or "
+"numbers can change if the drive is connected to a different controller or "
+"port, but the partition label does not change. Referring to labels instead "
+"of drive names and partition numbers in files like `/etc/fstab` makes the "
+"system more tolerant to hardware changes. GPT labels appear in `/dev/gpt/` "
+"when a disk is attached. Other partitioning schemes have different label "
+"capabilities and their labels appear in different directories in `/dev/`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:631
+msgid ""
+"Use a unique label on every partition to avoid conflicts from identical "
+"labels. A few letters from the computer's name, use, or location can be "
+"added to the label. For instance, use `labroot` or `rootfslab` for the UFS "
+"root partition on the computer named `lab`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:634
+#, no-wrap
+msgid "Creating Traditional Split File System Partitions"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:641
+msgid ""
+"For a traditional partition layout where the `/`, `/var`, `/tmp`, and `/usr` "
+"directories are separate file systems on their own partitions, create a GPT "
+"partitioning scheme, then create the partitions as shown. Partition sizes "
+"shown are typical for a 20G target disk. If more space is available on the "
+"target disk, larger swap or `/var` partitions may be useful. Labels shown "
+"here are prefixed with `ex` for \"example\", but readers should use other "
+"unique label values as described above."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:643
+msgid ""
+"By default, FreeBSD's `gptboot` expects the first UFS partition to be the `/"
+"` partition."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:648
+#, no-wrap
+msgid "Partition Type"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:649
+#, no-wrap
+msgid "Size"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:650
+#, no-wrap
+msgid "Mountpoint"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:652
+#, no-wrap
+msgid "Label"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:653
+#, no-wrap
+msgid "`freebsd-boot`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:654
+#, no-wrap
+msgid "`512K`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:658
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:668
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:673
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:678
+#, no-wrap
+msgid "`freebsd-ufs`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:659
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:669
+#, no-wrap
+msgid "`2G`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:660
+#, no-wrap
+msgid "`/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:662
+#, no-wrap
+msgid "`exrootfs`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:663
+#, no-wrap
+msgid "`freebsd-swap`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:664
+#, no-wrap
+msgid "`4G`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:667
+#, no-wrap
+msgid "`exswap`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:670
+#, no-wrap
+msgid "`/var`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:672
+#, no-wrap
+msgid "`exvarfs`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:674
+#, no-wrap
+msgid "`1G`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:675
+#, no-wrap
+msgid "`/tmp`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:677
+#, no-wrap
+msgid "`extmpfs`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:679
+#, no-wrap
+msgid "accept the default (remainder of the disk)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:680
+#, no-wrap
+msgid "`/usr`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:681
+#, no-wrap
+msgid "`exusrfs`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:685
+msgid ""
+"After the custom partitions have been created, select btn:[Finish] to "
+"continue with the installation and go to <<bsdinstall-fetching-"
+"distribution>>."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:687
+#, no-wrap
+msgid "Guided Partitioning Using Root-on-ZFS"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:691
+msgid ""
+"This partitioning mode only works with whole disks and will erase the "
+"contents of the entire disk. The main ZFS configuration menu offers a "
+"number of options to control the creation of the pool."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:693
+#, no-wrap
+msgid "ZFS Partitioning Menu"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:694
+#, no-wrap
+msgid "Menu showing the different options to configure the ZFS pool"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:694
+#, no-wrap
+msgid "bsdinstall-zfs-menu.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:697
+msgid "Here is a summary of the options in this menu:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:699
+msgid "`Install` - Proceed with the installation with the selected options."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:700
+msgid ""
+"`Pool Type/Disks` - Configure the `Pool Type` and the disk(s) that will "
+"constitute the pool. The automatic ZFS installer currently only supports the "
+"creation of a single top level vdev, except in stripe mode. To create more "
+"complex pools, use the instructions in <<bsdinstall-part-shell>> to create "
+"the pool."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:701
+msgid "`Rescan Devices` - Repopulate the list of available disks."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:702
+msgid ""
+"`Disk Info` - This menu can be used to inspect each disk, including its "
+"partition table and various other information such as the device model "
+"number and serial number, if available."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:703
+msgid ""
+"`Pool Name` - Establish the name of the pool. The default name is _zroot_."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:704
+msgid ""
+"`Force 4K Sectors?` - Force the use of 4K sectors. By default, the installer "
+"will automatically create partitions aligned to 4K boundaries and force ZFS "
+"to use 4K sectors. This is safe even with 512 byte sector disks, and has the "
+"added benefit of ensuring that pools created on 512 byte disks will be able "
+"to have 4K sector disks added in the future, either as additional storage "
+"space or as replacements for failed disks. Press the kbd:[Enter] key to "
+"chose to activate it or not."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:705
+msgid ""
+"`Encrypt Disks?` - Encrypting the disks allows the user to encrypt the disks "
+"using GELI. More information about disk encryption is available in crossref:"
+"disks[disks-encrypting-geli,“Disk Encryption with geli”]. Press the kbd:"
+"[Enter] key to choose whether to activate it or not."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:706
+msgid ""
+"`Partition Scheme` - Choose the partition scheme. GPT is the recommended "
+"option in most cases. Press the kbd:[Enter] key to chose between the "
+"different options."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:707
+msgid "`Swap Size` - Establish the amount of swap space."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:708
+msgid ""
+"`Mirror Swap?` - Whether to mirror the swap between the disks. Be aware that "
+"enabling mirror swap will break crash dumps. Press the kbd:[Enter] key to "
+"activate it or not."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:709
+msgid ""
+"`Encrypt Swap?` - Whether to encrypt the swap. This will encrypt the swap "
+"with a temporary key each time the system boots, and discards it on reboot. "
+"Press the kbd:[Enter] key to choose to activate it or not. More information "
+"about swap encryption in crossref:disks[swap-encrypting,“Encrypting Swap”]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:711
+msgid ""
+"Select kbd:[T] to configure the `Pool Type` and the disk(s) that will "
+"constitute the pool."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:713
+#, no-wrap
+msgid "ZFS Pool Type"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:714
+#, no-wrap
+msgid "Menu requesting the Virtual Device type. Ex: stripe"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:714
+#, no-wrap
+msgid "bsdinstall-zfs-vdev_type.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:717
+msgid "Here is a summary of the `Pool Type` that can be selected in this menu:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:719
+msgid ""
+"`stripe` - Striping provides maximum storage of all connected devices, but "
+"no redundancy. If just one disk fails the data on the pool is lost "
+"irrevocably."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:720
+msgid ""
+"`mirror` - Mirroring stores a complete copy of all data on every disk. "
+"Mirroring provides good read performance because data is read from all disks "
+"in parallel. Write performance is slower as the data must be written to all "
+"disks in the pool. Allows all but one disk to fail. This option requires at "
+"least two disks."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:721
+msgid ""
+"`raid10` - Striped mirrors. Provides the best performance, but the least "
+"storage. This option needs at least an even number of disks and a minimum of "
+"four disks."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:722
+msgid ""
+"`raidz1` - Single Redundant RAID. Allow one disk to fail concurrently. This "
+"option needs at least three disks."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:723
+msgid ""
+"`raidz2` - Double Redundant RAID. Allows two disks to fail concurrently. "
+"This option needs at least four disks."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:724
+msgid ""
+"`raidz3` - Triple Redundant RAID. Allows three disks to fail concurrently. "
+"This option needs at least five disks."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:728
+msgid ""
+"Once a `Pool Type` has been selected, a list of available disks is "
+"displayed, and the user is prompted to select one or more disks to make up "
+"the pool. The configuration is then validated to ensure that enough disks "
+"are selected. If validation fails, select btn:[<Change Selection>] to "
+"return to the list of disks or btn:[<Back>] to change the `Pool Type`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:730
+#, no-wrap
+msgid "Disk Selection"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:731
+#, no-wrap
+msgid "Menu requesting how many disks will be added to the pool"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:731
+#, no-wrap
+msgid "bsdinstall-zfs-disk_select.png"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:734
+#, no-wrap
+msgid "Invalid Selection"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:735
+#, no-wrap
+msgid "Menu indicating that not enough disks have been selected."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:735
+#, no-wrap
+msgid "bsdinstall-zfs-vdev_invalid.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:738
+msgid ""
+"If one or more disks are missing from the list, or if disks were attached "
+"after the installer was started, select btn:[- Rescan Devices] to repopulate "
+"the list of available disks."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:740
+#, no-wrap
+msgid "Rescan Devices"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:741
+#, no-wrap
+msgid "Device rescan"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:741
+#, no-wrap
+msgid "bsdinstall-zfs-rescan-devices.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:744
+msgid ""
+"To avoid accidentally erasing the wrong disk, the btn:[- Disk Info] menu can "
+"be used to inspect each disk, including its partition table and various "
+"other information such as the device model number and serial number, if "
+"available."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:746
+#, no-wrap
+msgid "Analyzing a Disk"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:747
+#, no-wrap
+msgid "Menu showing the information of the partitions."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:747
+#, no-wrap
+msgid "bsdinstall-zfs-disk_info.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:751
+msgid ""
+"Select kbd:[N] to configure the `Pool Name`. Enter the desired name, then "
+"select btn:[<OK>] to establish it or btn:[<Cancel>] to return to the main "
+"menu and leave the default name."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:753
+#, no-wrap
+msgid "Pool Name"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:754
+#, no-wrap
+msgid "Menu requesting the name of the pool."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:754
+#, no-wrap
+msgid "bsdinstall-zfs-pool-name.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:758
+msgid ""
+"Select kbd:[S] to set the amount of swap. Enter the desired amount of swap, "
+"then select btn:[<OK>] to establish it or btn:[<Cancel>] to return to the "
+"main menu and let the default amount."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:760
+#, no-wrap
+msgid "Swap Amount"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:761
+#, no-wrap
+msgid "Menu requesting the amount of swap memory"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:761
+#, no-wrap
+msgid "bsdinstall-zfs-swap-amount.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:765
+msgid ""
+"Once all options have been set to the desired values, select the btn:[>>> "
+"Install] option at the top of the menu. The installer then offers a last "
+"chance to cancel before the contents of the selected drives are destroyed to "
+"create the ZFS pool."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:767
+#, no-wrap
+msgid "Last Chance"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:768
+#, no-wrap
+msgid "Menu indicating to the user that the data will be lost"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:768
+#, no-wrap
+msgid "bsdinstall-zfs-warning.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:772
+msgid ""
+"If GELI disk encryption was enabled, the installer will prompt twice for the "
+"passphrase to be used to encrypt the disks. Initialization of the "
+"encryption then begins."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:774
+#, no-wrap
+msgid "Disk Encryption Password"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:775
+#, no-wrap
+msgid "Menu requesting the password to encrypt the devices."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:775
+#, no-wrap
+msgid "bsdinstall-zfs-geli_password.png"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:778
+#, no-wrap
+msgid "Initializing Encryption"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:779
+#, no-wrap
+msgid "Menu showing that the encryption is initializing."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:779
+#, no-wrap
+msgid "bsdinstall-zfs-init-encription.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:783
+msgid ""
+"The installation then proceeds normally. To continue with the installation, "
+"go to <<bsdinstall-fetching-distribution>>."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:785
+#, no-wrap
+msgid "Shell Mode Partitioning"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:790
+msgid ""
+"When creating advanced installations, the bsdinstall partitioning menus may "
+"not provide the level of flexibility required. Advanced users can select "
+"the btn:[Shell] option from the partitioning menu in order to manually "
+"partition the drives, create the file system(s), populate `/tmp/"
+"bsdinstall_etc/fstab`, and mount the file systems under `/mnt`. Once this "
+"is done, type `exit` to return to bsdinstall and continue the installation."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:792
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:801
+#, no-wrap
+msgid "Fetching Distribution Files"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:796
+msgid ""
+"Installation time will vary depending on the distributions chosen, "
+"installation media, and speed of the computer. A series of messages will "
+"indicate the progress."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:799
+msgid ""
+"First, the installer formats the selected disk(s) and initializes the "
+"partitions. Next, in the case of a `bootonly media` or `mini memstick`, it "
+"downloads the selected components:"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:802
+#, no-wrap
+msgid "Menu showing the download of the different components."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:802
+#, no-wrap
+msgid "bsdinstall-distfile-fetching.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:805
+msgid ""
+"Next, the integrity of the distribution files is verified to ensure they "
+"have not been corrupted during download or misread from the installation "
+"media:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:807
+#, no-wrap
+msgid "Verifying Distribution Files"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:808
+#, no-wrap
+msgid "Menu showing the verification of the different components."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:808
+#, no-wrap
+msgid "bsdinstall-distfile-verifying.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:811
+msgid "Finally, the verified distribution files are extracted to the disk:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:813
+#, no-wrap
+msgid "Extracting Distribution Files"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:814
+#, no-wrap
+msgid "Menu showing the extraction of the different components."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:814
+#, no-wrap
+msgid "bsdinstall-distfile-extracting.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:818
+msgid ""
+"Once all requested distribution files have been extracted, bsdinstall "
+"displays the first post-installation configuration screen. The available "
+"post-configuration options are described in the next section."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:820
+#, no-wrap
+msgid "Network Interfaces, Accounts, Time Zone, Services and Hardening"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:823
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:830
+#, no-wrap
+msgid "Setting the `root` Password"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:828
+msgid ""
+"First, the `root` password must be set. While entering the password, the "
+"characters being typed are not displayed on the screen. The password must "
+"be entered twice to prevent typing errors."
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:831
+#, no-wrap
+msgid "Menu showing requesting the password for the root user."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:831
+#, no-wrap
+msgid "bsdinstall-post-root-passwd.png"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:834
+#, no-wrap
+msgid "Configuring Network Interfaces"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:838
+msgid ""
+"Next, a list of the network interfaces found on the computer is shown. "
+"Select the interface to configure."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:840
+#, no-wrap
+msgid "Choose a Network Interface"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:841
+#, no-wrap
+msgid "Menu showing the different network interfaces to configure."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:841
+#, no-wrap
+msgid "bsdinstall-configure-network-interface.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:845
+msgid ""
+"If an Ethernet interface is selected, the installer will skip ahead to the "
+"menu shown in <<bsdinstall-configure-net-ipv4>>. If a wireless network "
+"interface is chosen, the system will instead scan for wireless access points:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:847
+#, no-wrap
+msgid "Scanning for Wireless Access Points"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:848
+#, no-wrap
+msgid "Menu showing wireless network scanning."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:848
+#, no-wrap
+msgid "bsdinstall-configure-wireless-scan.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:855
+msgid ""
+"Wireless networks are identified by a Service Set Identifier (SSID); a "
+"short, unique name given to each network. SSIDs found during the scan are "
+"listed, followed by a description of the encryption types available for that "
+"network. If the desired SSID does not appear in the list, select btn:"
+"[Rescan] to scan again. If the desired network still does not appear, check "
+"for problems with antenna connections or try moving the computer closer to "
+"the access point. Rescan after each change is made."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:857
+#, no-wrap
+msgid "Choosing a Wireless Network"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:858
+#, no-wrap
+msgid "Menu showing the different wireless networks to connect to."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:858
+#, no-wrap
+msgid "bsdinstall-configure-wireless-accesspoints.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:864
+msgid ""
+"Next, enter the encryption information for connecting to the selected "
+"wireless network. WPA2 encryption is strongly recommended over older "
+"encryption types such as WEP, which offer little security. If the network "
+"uses WPA2, input the password, also known as the Pre-Shared Key (PSK). For "
+"security reasons, the characters typed into the input box are displayed as "
+"asterisks."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:866
+#, no-wrap
+msgid "WPA2 Setup"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:867
+#, no-wrap
+msgid "Menu requesting the wireless network password."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:867
+#, no-wrap
+msgid "bsdinstall-configure-wireless-wpa2setup.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:870
+msgid ""
+"Next, choose whether or not an IPv4 address should be configured on the "
+"Ethernet or wireless interface:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:872
+#, no-wrap
+msgid "Choose IPv4 Networking"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:873
+#, no-wrap
+msgid "Menu indicating if IPv4 wants to be configured for the selected interface."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:873
+#, no-wrap
+msgid "bsdinstall-configure-network-interface-ipv4.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:878
+msgid ""
+"There are two methods of IPv4 configuration. DHCP will automatically "
+"configure the network interface correctly and should be used if the network "
+"provides a DHCP server. Otherwise, the addressing information needs to be "
+"input manually as a static configuration."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:883
+msgid ""
+"Do not enter random network information as it will not work. If a DHCP "
+"server is not available, obtain the information listed in <<bsdinstall-"
+"collect-network-information, Required Network Information>> from the network "
+"administrator or Internet service provider."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:887
+msgid ""
+"If a DHCP server is available, select btn:[Yes] in the next menu to "
+"automatically configure the network interface. The installer will appear to "
+"pause for a minute or so as it finds the DHCP server and obtains the "
+"addressing information for the system."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:889
+#, no-wrap
+msgid "Choose IPv4 DHCP Configuration"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:890
+#, no-wrap
+msgid "Menu indicating if DHCP wants to be configured for the selected interface."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:890
+#, no-wrap
+msgid "bsdinstall-configure-network-interface-ipv4-dhcp.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:893
+msgid ""
+"If a DHCP server is not available, select btn:[No] and input the following "
+"addressing information in this menu:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:895
+#, no-wrap
+msgid "IPv4 Static Configuration"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:896
+#, no-wrap
+msgid "Menu requesting data to configure IPv4 network."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:896
+#, no-wrap
+msgid "bsdinstall-configure-network-interface-ipv4-static.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:899
+msgid ""
+"`IP Address` - The IPv4 address assigned to this computer. The address must "
+"be unique and not already in use by another device on the local network."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:900
+msgid "`Subnet Mask` - The subnet mask for the network."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:901
+msgid "`Default Router` - The IP address of the network's default gateway."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:903
+msgid ""
+"The next screen will ask if the interface should be configured for IPv6. If "
+"IPv6 is available and desired, choose btn:[Yes] to select it."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:905
+#, no-wrap
+msgid "Choose IPv6 Networking"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:906
+#, no-wrap
+msgid "Menu indicating if IPv6 wants to be configured for the selected interface."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:906
+#, no-wrap
+msgid "bsdinstall-configure-network-interface-ipv6.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:912
+msgid ""
+"IPv6 also has two methods of configuration. StateLess Address "
+"AutoConfiguration (SLAAC) will automatically request the correct "
+"configuration information from a local router. Refer to http://tools.ietf."
+"org/html/rfc4862[rfc4862] for more information. Static configuration "
+"requires manual entry of network information."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:915
+msgid ""
+"If an IPv6 router is available, select btn:[Yes] in the next menu to "
+"automatically configure the network interface. The installer will appear to "
+"pause for a minute or so as it finds the router and obtains the addressing "
+"information for the system."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:917
+#, no-wrap
+msgid "Choose IPv6 SLAAC Configuration"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:918
+#, no-wrap
+msgid "Menu indicating if SLAAC wants to be configured for the selected interface."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:918
+#, no-wrap
+msgid "bsdinstall-configure-network-interface-slaac.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:921
+msgid ""
+"If an IPv6 router is not available, select btn:[No] and input the following "
+"addressing information in this menu:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:923
+#, no-wrap
+msgid "IPv6 Static Configuration"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:924
+#, no-wrap
+msgid "Menu requesting data to configure IPv6 network."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:924
+#, no-wrap
+msgid "bsdinstall-configure-network-interface-ipv6-static.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:927
+msgid ""
+"`IPv6 Address` - The IPv6 address assigned to this computer. The address "
+"must be unique and not already in use by another device on the local network."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:928
+msgid "`Default Router` - The IPv6 address of the network's default gateway."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:934
+msgid ""
+"The last network configuration menu is used to configure the Domain Name "
+"System (DNS) resolver, which converts hostnames to and from network "
+"addresses. If DHCP or SLAAC was used to autoconfigure the network "
+"interface, the `Resolver Configuration` values may already be filled in. "
+"Otherwise, enter the local network's domain name in the `Search` field. "
+"`DNS #1` and `DNS #2` are the IPv4 and/or IPv6 addresses of the DNS "
+"servers. At least one DNS server is required."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:936
+#, no-wrap
+msgid "DNS Configuration"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:937
+#, no-wrap
+msgid "Menu requesting data to configure DNS for the network."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:937
+#, no-wrap
+msgid "bsdinstall-configure-network-ipv4-dns.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:941
+msgid ""
+"Once the interface is configured, select a mirror site that is located in "
+"the same region of the world as the computer on which FreeBSD is being "
+"installed. Files can be retrieved more quickly when the mirror is close to "
+"the target computer, reducing installation time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:945
+msgid ""
+"Selecting `ftp://download.freebsd.org (Main Site)` will automatically route "
+"to the nearest mirror."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:948
+#, no-wrap
+msgid "Choosing a Mirror"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:949
+#, no-wrap
+msgid "Menu requesting a network mirror."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:949
+#, no-wrap
+msgid "bsdinstall-netinstall-mirrorselect.png"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:952
+#, no-wrap
+msgid "Setting the Time Zone"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:956
+msgid ""
+"The next series of menus are used to determine the correct local time by "
+"selecting the geographic region, country, and time zone. Setting the time "
+"zone allows the system to automatically correct for regional time changes, "
+"such as daylight savings time, and perform other time zone related functions "
+"properly."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:959
+msgid ""
+"The example shown here is for a machine located in the mainland time zone of "
+"Spain, Europe. The selections will vary according to the geographical "
+"location."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:961
+#, no-wrap
+msgid "Select a Region"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:962
+#, no-wrap
+msgid "Menu requesting the timezone region."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:962
+#, no-wrap
+msgid "bsdinstall-timezone-region.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:965
+msgid ""
+"The appropriate region is selected using the arrow keys and then pressing "
+"kbd:[Enter]."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:967
+#, no-wrap
+msgid "Select a Country"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:968
+#, no-wrap
+msgid "Menu requesting the timezone country."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:968
+#, no-wrap
+msgid "bsdinstall-timezone-country.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:971
+msgid ""
+"Select the appropriate country using the arrow keys and press kbd:[Enter]."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:973
+#, no-wrap
+msgid "Select a Time Zone"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:974
+#, no-wrap
+msgid "Menu requesting the timezone zone."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:974
+#, no-wrap
+msgid "bsdinstall-timezone-zone.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:977
+msgid ""
+"The appropriate time zone is selected using the arrow keys and pressing kbd:"
+"[Enter]."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:979
+#, no-wrap
+msgid "Confirm Time Zone"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:980
+#, no-wrap
+msgid "Menu requesting confirmation of the selected timezone."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:980
+#, no-wrap
+msgid "bsdinstall-timezone-confirm.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:983
+msgid "Confirm the abbreviation for the time zone is correct."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:985
+#, no-wrap
+msgid "Select Date"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:986
+#, no-wrap
+msgid "Menu requesting the system date."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:986
+#, no-wrap
+msgid "bsdinstall-timezone-date.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:990
+msgid ""
+"The appropriate date is selected using the arrow keys and then pressing btn:"
+"[Set Date]. Otherwise, the date selection can be skipped by pressing btn:"
+"[Skip]."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:992
+#, no-wrap
+msgid "Select Time"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:993
+#, no-wrap
+msgid "Menu requesting the system time."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:993
+#, no-wrap
+msgid "bsdinstall-timezone-time.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:997
+msgid ""
+"The appropriate time is selected using the arrow keys and then pressing btn:"
+"[Set Time]. Otherwise, the time selection can be skipped by pressing btn:"
+"[Skip]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:999
+#, no-wrap
+msgid "Enabling Services"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1004
+msgid ""
+"The next menu is used to configure which system services will be started "
+"whenever the system boots. All of these services are optional. Only start "
+"the services that are needed for the system to function."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1006
+#, no-wrap
+msgid "Selecting Additional Services to Enable"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1007
+#, no-wrap
+msgid "Menu showing the different services available."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1007
+#, no-wrap
+msgid "bsdinstall-config-services.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1010
+msgid "Here is a summary of the services that can be enabled in this menu:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1012
+msgid ""
+"`local_unbound` - Enable the DNS local unbound. It is necessary to keep in "
+"mind that this is a configuration only meant for use as a local caching "
+"forwarding resolver. If the objective is to set up a resolver for the entire "
+"network, install package:dns/unbound[]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1013
+msgid ""
+"`sshd` - The Secure Shell (SSH) daemon is used to remotely access a system "
+"over an encrypted connection. Only enable this service if the system should "
+"be available for remote logins."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1014
+msgid ""
+"`moused` - Enable this service if the mouse will be used from the command-"
+"line system console."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1015
+msgid ""
+"`ntpdate` - Enable automatic clock synchronization at boot time. Note that "
+"the functionality of this program is now available in the man:ntpd[8] daemon "
+"and the man:ntpdate[8] utility will soon be retired."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1016
+msgid ""
+"`ntpd` - The Network Time Protocol (NTP) daemon for automatic clock "
+"synchronization. Enable this service if you wish to synchronise your system "
+"clock with a remote time server or pool."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1017
+msgid ""
+"`powerd` - System power control utility for power control and energy saving."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1018
+msgid ""
+"`dumpdev` - Crash dumps are useful when debugging issues with the system, so "
+"users are encouraged to enable them."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1020
+#, no-wrap
+msgid "Enabling Hardening Security Options"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1025
+msgid ""
+"The next menu is used to configure which security options will be enabled. "
+"All of these options are optional. But their use is encouraged."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1027
+#, no-wrap
+msgid "Selecting Hardening Security Options"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1028
+#, no-wrap
+msgid "Menu shoring the different hardening security options."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1028
+#, no-wrap
+msgid "bsdinstall-hardening.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1031
+msgid "Here is a summary of the options that can be enabled in this menu:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1033
+msgid ""
+"`hide_uids` - Hide processes running as other users (UID). This prevents "
+"unprivileged users from seeing running processes from other users."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1034
+msgid ""
+"`hide_gids` - Hide processes running as other groups (GID). This prevents "
+"unprivileged users from seeing running processes from other groups."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1035
+msgid ""
+"`hide_jail` - Hide processes running in jails. This prevents unprivileged "
+"users from seeing processes running inside jails."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1036
+msgid ""
+"`read_msgbuf` - Disable reading kernel message buffer for unprivileged "
+"users. Prevent unprivileged users from using man:dmesg[8] to view messages "
+"from the kernel's log buffer."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1037
+msgid ""
+"`proc_debug` - Disable process debugging facilities for unprivileged users. "
+"Disables a variety of unprivileged inter-process debugging services, "
+"including some procfs functionality, `ptrace()`, and `ktrace()`. Please note "
+"that this will also prevent debugging tools such as man:lldb[1], man:"
+"truss[1] and man:procstat[1], as well as some built-in debugging facilities "
+"in certain scripting languages like PHP."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1038
+msgid "`random_pid` - Randomize the PID of processes."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1039
+msgid "`clear_tmp` - Clean `/tmp` when the system starts up."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1040
+msgid ""
+"`disable_syslogd` - Disable opening the syslogd network socket. By default, "
+"FreeBSD runs syslogd in a secure way with `-s`. This prevents the daemon "
+"from listening for incoming UDP requests on port 514. With this option "
+"enabled, syslogd will instead run with `-ss`, which prevents syslogd from "
+"opening any port. For more information, see man:syslogd[8]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1041
+msgid "`disable_sendmail` - Disable the sendmail mail transport agent."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1042
+msgid ""
+"`secure_console` - Make the command prompt request the `root` password when "
+"entering single-user mode."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1043
+msgid ""
+"`disable_ddtrace` - DTrace can run in a mode that affects the running "
+"kernel. Destructive actions may not be used unless explicitly enabled. Use `-"
+"w` to enable this option when using DTrace. For more information, see man:"
+"dtrace[1]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1044
+msgid ""
+"`enable_aslr` - Enable address layout randomization. For more information "
+"about address layout randomization the link:https://en.wikipedia.org/wiki/"
+"Address_space_layout_randomization[Wikipedia article] can be consulted."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1046
+#, no-wrap
+msgid "Add Users"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1052
+msgid ""
+"The next menu prompts to create at least one user account. It is "
+"recommended to log into the system using a user account rather than as "
+"`root`. When logged in as `root`, there are essentially no limits or "
+"protection on what can be done. Logging in as a normal user is safer and "
+"more secure."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1054
+msgid "Select btn:[Yes] to add new users."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1056
+#, no-wrap
+msgid "Add User Accounts"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1057
+#, no-wrap
+msgid "Menu requesting if a user want to be added to the system."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1057
+#, no-wrap
+msgid "bsdinstall-adduser1.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1061
+msgid ""
+"Follow the prompts and input the requested information for the user "
+"account. The example shown in <<bsdinstall-add-user2>> creates the "
+"`asample` user account."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1063
+#, no-wrap
+msgid "Enter User Information"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1064
+#, no-wrap
+msgid "Menu requesting different information for the new user."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1064
+#, no-wrap
+msgid "bsdinstall-adduser2.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1067
+msgid "Here is a summary of the information to input:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1069
+msgid ""
+"`Username` - The name the user will enter to log in. A common convention is "
+"to use the first letter of the first name combined with the last name, as "
+"long as each username is unique for the system. The username is case "
+"sensitive and should not contain any spaces."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1070
+msgid ""
+"`Full name` - The user's full name. This can contain spaces and is used as a "
+"description for the user account."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1071
+msgid ""
+"`Uid` - User ID. This is typically left blank so the system automatically "
+"assigns a value."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1072
+msgid ""
+"`Login group` - The user's group. This is typically left blank to accept the "
+"default."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1073
+msgid ""
+"`Invite _user_ into other groups?` - Additional groups to which the user "
+"will be added as a member. If the user needs administrative access, type "
+"`wheel` here."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1074
+msgid "`Login class` - Typically left blank for the default."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1075
+msgid ""
+"`Shell` - Type in one of the listed values to set the interactive shell for "
+"the user. Refer to crossref:basics[shells,Shells] for more information about "
+"shells."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1076
+msgid ""
+"`Home directory` - The user's home directory. The default is usually correct."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1077
+msgid ""
+"`Home directory permissions` - Permissions on the user's home directory. The "
+"default is usually correct."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1078
+msgid ""
+"`Use password-based authentication?` - Typically `yes` so that the user is "
+"prompted to input their password at login."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1079
+msgid ""
+"`Use an empty password?` - Typically `no` as empty or blank passwords are "
+"insecure."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1080
+msgid ""
+"`Use a random password?` - Typically `no` so that the user can set their own "
+"password in the next prompt."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1081
+msgid ""
+"`Enter password` - The password for this user. Typed-in characters will not "
+"be shown on the screen."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1082
+msgid ""
+"`Enter password again` - The password must be typed again for verification."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1083
+msgid ""
+"`Lock out the account after creation?` - Typically `no` so that the user can "
+"log in."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1087
+msgid ""
+"After entering all the details, a summary is shown for review. If a mistake "
+"was made, enter `no` to correct it. Once everything is correct, enter `yes` "
+"to create the new user."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1089
+#, no-wrap
+msgid "Exit User and Group Management"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1090
+#, no-wrap
+msgid "Menu showing the information of the new user and requesting if everything is correct."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1090
+#, no-wrap
+msgid "bsdinstall-adduser3.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1094
+msgid ""
+"If there are more users to add, answer the `Add another user?` question with "
+"`yes`. Enter `no` to finish adding users and continue the installation."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1096
+msgid ""
+"For more information on adding users and user management, see crossref:"
+"basics[users-synopsis,Users and Basic Account Management]."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1098
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1103
+#, no-wrap
+msgid "Final Configuration"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1101
+msgid ""
+"After everything has been installed and configured, a final chance is "
+"provided to modify settings."
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1104
+#, no-wrap
+msgid "Menu showing different options to perform before finishing the installation. Ex: Add user"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1104
+#, no-wrap
+msgid "bsdinstall-finalconfiguration.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1107
+msgid ""
+"Use this menu to make any changes or to do any additional configuration "
+"before completing the installation."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1109
+msgid "`Add User` - Described in <<bsdinstall-addusers>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1110
+msgid "`Root Password` - Described in <<bsdinstall-post-root>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1111
+msgid "`Hostname` - Described in <<bsdinstall-hostname>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1112
+msgid "`Network` - Described in <<bsdinstall-config-network-dev>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1113
+msgid "`Services` - Described in <<bsdinstall-sysconf>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1114
+msgid "`System Hardening` - Described in <<bsdinstall-hardening>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1115
+msgid "`Time Zone` - Described in <<bsdinstall-timezone>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1116
+msgid "`Handbook` - Download and install the FreeBSD Handbook."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1118
+msgid "Once configuration is complete, select btn:[Exit]."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1120
+#, no-wrap
+msgid "Manual Configuration"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1121
+#, no-wrap
+msgid "Menu showing that the installation has finished. And asking if you want to open a shell to make manual changes."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1121
+#, no-wrap
+msgid "bsdinstall-final-modification-shell.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1125
+msgid ""
+"bsdinstall will prompt for any additional configuration that needs to be "
+"done before rebooting into the new system. Select btn:[Yes] to exit to a "
+"shell within the new system or btn:[No] to proceed to the last step of the "
+"installation."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1127
+#, no-wrap
+msgid "Complete the Installation"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1128
+#, no-wrap
+msgid "Menu showing that the installation has finished and asking whether to reboot the system or access the Live CD."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1128
+#, no-wrap
+msgid "bsdinstall-mainexit.png"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1131
+msgid ""
+"If further configuration or special setup is needed, select btn:[Live CD] to "
+"boot the install media into Live CD mode."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1134
+msgid ""
+"If the installation is complete, select btn:[Reboot] to reboot the computer "
+"and start the new FreeBSD system. Do not forget to remove the FreeBSD "
+"install media or the computer might boot from it again."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1140
+msgid ""
+"As FreeBSD boots, informational messages are displayed. After the system "
+"finishes booting, a login prompt is displayed. At the `login:` prompt, "
+"enter the username added during the installation. Avoid logging in as "
+"`root`. Refer to crossref:basics[users-superuser,The Superuser Account] for "
+"instructions on how to become the superuser when administrative access is "
+"needed."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1146
+msgid ""
+"The messages that appear during boot can be reviewed by pressing kbd:[Scroll-"
+"Lock] to turn on the scroll-back buffer. The kbd:[PgUp], kbd:[PgDn], and "
+"arrow keys can be used to scroll back through the messages. When finished, "
+"press kbd:[Scroll-Lock] again to unlock the display and return to the "
+"console. To review these messages once the system has been up for some "
+"time, type `less /var/run/dmesg.boot` from a command prompt. Press kbd:[q] "
+"to return to the command line after viewing."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1150
+msgid ""
+"If sshd was enabled in <<bsdinstall-config-serv>>, the first boot might be a "
+"bit slower as the system generates SSH host keys. Subsequent boots will be "
+"faster. The fingerprints of the keys are then displayed as in the following "
+"example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1188
+#, no-wrap
+msgid ""
+"Generating public/private rsa1 key pair.\n"
+"Your identification has been saved in /etc/ssh/ssh_host_key.\n"
+"Your public key has been saved in /etc/ssh/ssh_host_key.pub.\n"
+"The key fingerprint is:\n"
+"10:a0:f5:af:93:ae:a3:1a:b2:bb:3c:35:d9:5a:b3:f3 root@machine3.example.com\n"
+"The key's randomart image is:\n"
+"+--[RSA1 1024]----+\n"
+"| o.. |\n"
+"| o . . |\n"
+"| . o |\n"
+"| o |\n"
+"| o S |\n"
+"| + + o |\n"
+"|o . + * |\n"
+"|o+ ..+ . |\n"
+"|==o..o+E |\n"
+"+-----------------+\n"
+"Generating public/private dsa key pair.\n"
+"Your identification has been saved in /etc/ssh/ssh_host_dsa_key.\n"
+"Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub.\n"
+"The key fingerprint is:\n"
+"7e:1c:ce:dc:8a:3a:18:13:5b:34:b5:cf:d9:d1:47:b2 root@machine3.example.com\n"
+"The key's randomart image is:\n"
+"+--[ DSA 1024]----+\n"
+"| .. . .|\n"
+"| o . . + |\n"
+"| . .. . E .|\n"
+"| . . o o . . |\n"
+"| + S = . |\n"
+"| + . = o |\n"
+"| + . * . |\n"
+"| . . o . |\n"
+"| .o. . |\n"
+"+-----------------+\n"
+"Starting sshd.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1191
+msgid ""
+"Refer to crossref:security[openssh,\"OpenSSH\"] for more information about "
+"fingerprints and SSH."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1194
+msgid ""
+"FreeBSD does not install a graphical environment by default. Refer to "
+"crossref:x11[x11,The X Window System] for more information about installing "
+"and configuring a graphical window manager."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1198
+msgid ""
+"Proper shutdown of a FreeBSD computer helps protect data and hardware from "
+"damage. _Do not turn off the power before the system has been properly shut "
+"down!_ If the user is a member of the `wheel` group, become the superuser by "
+"typing `su` at the command line and entering the `root` password. Then, "
+"type `shutdown -p now` and the system will shut down cleanly, and, if the "
+"hardware supports it, turn itself off."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1200
+#, no-wrap
+msgid "Troubleshooting"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1203
+msgid ""
+"This section covers basic installation troubleshooting, such as common "
+"problems people have reported."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1205
+msgid ""
+"Check the Hardware Notes listed on the link:https://www.FreeBSD.org/releases/"
+"[FreeBSD Release Information] page for the version of FreeBSD to make sure "
+"the hardware is supported."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1211
+msgid ""
+"Some installation problems can be avoided or alleviated by updating the "
+"firmware on various hardware components, most notably the motherboard. "
+"Motherboard firmware is usually referred to as the BIOS. Most motherboard "
+"and computer manufacturers have a website for upgrades and upgrade "
+"information."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1214
+msgid ""
+"Manufacturers generally advise against upgrading the motherboard BIOS unless "
+"there is a good reason for doing so, like a critical update. The upgrade "
+"process _can_ go wrong, leaving the BIOS incomplete and the computer "
+"inoperative."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1220
+msgid ""
+"If the system hangs while probing hardware during boot or behaves strangely "
+"during the installation process, ACPI may be the culprit. FreeBSD makes "
+"extensive use of the system ACPI service on the i386 and amd64 platforms to "
+"aid in system configuration if it is detected during boot. Unfortunately, "
+"some bugs still exist in both the ACPI driver and within system motherboards "
+"and BIOS firmware. ACPI can be disabled by setting the `hint.acpi.0."
+"disabled` hint in the third stage boot loader:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1224
+#, no-wrap
+msgid "set hint.acpi.0.disabled=\"1\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1228
+msgid ""
+"This is reset each time the system is booted, so it is necessary to add "
+"`hint.acpi.0.disabled=\"1\"` to the file `/boot/loader.conf`. More "
+"information about the boot loader can be found in crossref:boot[boot-"
+"synopsis,“Synopsis”]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1230
+#, no-wrap
+msgid "Using the Live CD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1234
+msgid ""
+"The welcome menu of bsdinstall, shown in <<bsdinstall-choose-mode>>, "
+"provides a btn:[Live CD] option. This is useful for those who are still "
+"wondering whether FreeBSD is the right operating system for them and want to "
+"test some of the features before installing."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1236
+msgid "The following points should be noted before using the btn:[Live CD]:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1238
+msgid ""
+"To gain access to the system, authentication is required. The username is "
+"`root` and the password is blank."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1239
+msgid ""
+"As the system runs directly from the installation media, performance will be "
+"significantly slower than that of a system installed on a hard disk."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/bsdinstall/_index.adoc:1239
+msgid ""
+"This option only provides a command prompt and not a graphical interface."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/colophon.adoc b/documentation/content/en/books/handbook/colophon.adoc
index 576df53fd4..4cb4dfa005 100644
--- a/documentation/content/en/books/handbook/colophon.adoc
+++ b/documentation/content/en/books/handbook/colophon.adoc
@@ -3,8 +3,8 @@ title: Colophon
prev: books/handbook/glossary
description: FreeBSD Handbook Colophon
showBookMenu: true
-weight: 44
-path: "/books/handbook/"
+weight: 46
+path: "/books/handbook/colophon/"
---
[colophon]
diff --git a/documentation/content/en/books/handbook/colophon.po b/documentation/content/en/books/handbook/colophon.po
new file mode 100644
index 0000000000..badc4ed6fc
--- /dev/null
+++ b/documentation/content/en/books/handbook/colophon.po
@@ -0,0 +1,37 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:20-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/colophon.adoc:1
+#, no-wrap
+msgid "FreeBSD Handbook Colophon"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/colophon.adoc:1
+#: documentation/content/en/books/handbook/colophon.adoc:12
+#, no-wrap
+msgid "Colophon"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/colophon.adoc:48
+msgid ""
+"This book is the combined work of hundreds of contributors to \"The FreeBSD "
+"Documentation Project\". The text is authored in AsciiDoc."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/config/_index.adoc b/documentation/content/en/books/handbook/config/_index.adoc
index 57e8faf96f..2e77ef70bf 100644
--- a/documentation/content/en/books/handbook/config/_index.adoc
+++ b/documentation/content/en/books/handbook/config/_index.adoc
@@ -1,24 +1,24 @@
---
-title: Chapter 12. Configuration and Tuning
+title: Chapter 14. Configuration, Services, Logging and Power Management
part: Part III. System Administration
prev: books/handbook/partiii
next: books/handbook/boot
-description: This chapter explains much of the FreeBSD configuration process, including some of the parameters which can be set to tune a FreeBSD system.
-tags: ["configuration", "tuning", "services", "cron", "virtual hosts", "logging", "configuration files", "sysctl", "tuning disks", "kernel limits", "swap", "power management"]
+description: This chapter explains much of the FreeBSD configuration files, how to enable or disable a service, how to configure the logging system and the power management area.
+tags: ["configuration", "services", "cron", "periodic", "logging", "configuration files", "sysctl", "swap", "power management"]
showBookMenu: true
-weight: 16
-path: "/books/handbook/"
+weight: 18
+path: "/books/handbook/config/"
---
[[config-tuning]]
-= Configuration and Tuning
+= Configuration, Services, Logging and Power Management
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 12
+:sectnumoffset: 14
:partnums:
:source-highlighter: rouge
:experimental:
@@ -54,301 +54,285 @@ endif::[]
One of the important aspects of FreeBSD is proper system configuration.
This chapter explains much of the FreeBSD configuration process, including some of the parameters which can be set to tune a FreeBSD system.
+Before reading this chapter, you should:
+
+* Understand UNIX(R) and FreeBSD basics (crossref:basics[basics,FreeBSD Basics]).
+
After reading this chapter, you will know:
-* The basics of [.filename]#rc.conf# configuration and [.filename]#/usr/local/etc/rc.d# startup scripts.
-* How to configure and test a network card.
-* How to configure virtual hosts on network devices.
* How to use the various configuration files in [.filename]#/etc#.
+* The basics of [.filename]#rc.conf# configuration and [.filename]#/usr/local/etc/rc.d# startup scripts.
* How to tune FreeBSD using man:sysctl[8] variables.
-* How to tune disk performance and modify kernel limitations.
+* How to configure the power management in FreeBSD.
-Before reading this chapter, you should:
+[[configtuning-configfiles]]
+== Configuration Files
-* Understand UNIX(R) and FreeBSD basics (crossref:basics[basics,FreeBSD Basics]).
-* Be familiar with the basics of kernel configuration and compilation (crossref:kernelconfig[kernelconfig,Configuring the FreeBSD Kernel]).
+FreeBSD maintains a clear separation between the base system and third party applications and therefore this affects where the configuration files of these applications are located.
-[[configtuning-starting-services]]
-== Starting Services
+FreeBSD base system configuration is located at the [.filename]#/etc# directory,
+and the [.filename]#/usr/local/etc# directory contains all the configuration files of the applications installed on the system through the ports collection and packages.
-Many users install third party software on FreeBSD from the Ports Collection and require the installed services to be started upon system initialization.
-Services, such as package:mail/postfix[] or package:www/apache22[] are just two of the many software packages which may be started during system initialization.
-This section explains the procedures available for starting third party software.
+The kernel state configuration is located in [.filename]#/etc/sysctl.conf#.
+In the section <<configtuning-sysctl>>, the operation of man:sysctl[8] will be explained in more detail.
-In FreeBSD, most included services, such as man:cron[8], are started through the system startup scripts.
+For more information about the FreeBSD file system structure refer to man:hier[7].
-=== Extended Application Configuration
+As a general rule, configuration files do not use a standard on what syntax they must follow.
+Although it is true that the `#` character is normally used to comment a line and that each line has a configuration variable.
-Now that FreeBSD includes [.filename]#rc.d#, configuration of application startup is easier and provides more features.
-Using the key words discussed in <<configtuning-rcd>>, applications can be set to start after certain other services and extra flags can be passed through [.filename]#/etc/rc.conf# in place of hard coded flags in the startup script.
-A basic script may look similar to the following:
+[NOTE]
+====
+Some applications like man:pkg[8] are starting to use the link:https://github.com/vstakhov/libucl[Universal Configuration Language (UCL)].
+====
-[.programlisting]
-....
-#!/bin/sh
-#
-# PROVIDE: utility
-# REQUIRE: DAEMON
-# KEYWORD: shutdown
+=== The [.filename]#/etc# directory
-. /etc/rc.subr
+The [.filename]#/etc# directory contains all of the FreeBSD base system configuration files that are responsible for configuring FreeBSD.
-name=utility
-rcvar=utility_enable
+[CAUTION]
+====
+*Extreme* caution must be taken when modifying files in the [.filename]#/etc# directory; misconfiguration could make FreeBSD unbootable or malfunction.
+====
-command="/usr/local/sbin/utility"
+[.informaltable]
+[cols="1,1", frame="none"]
+|===
-load_rc_config $name
+|[.filename]#/etc#
+|System configuration files and scripts.
-#
-# DO NOT CHANGE THESE DEFAULT VALUES HERE
-# SET THEM IN THE /etc/rc.conf FILE
-#
-utility_enable=${utility_enable-"NO"}
-pidfile=${utility_pidfile-"/var/run/utility.pid"}
+|[.filename]#/etc/defaults#
+|Default system configuration files, see man:rc[8] for more information.
-run_rc_command "$1"
-....
+|[.filename]#/etc/fstab#
+|man:fstab[5] contains descriptive information about the various file systems.
-This script will ensure that the provided `utility` will be started after the `DAEMON` pseudo-service.
-It also provides a method for setting and tracking the process ID (PID).
+|[.filename]#/etc/mail#
+|Extra man:sendmail[8] configuration and other MTA configuration files.
-This application could then have the following line placed in [.filename]#/etc/rc.conf#:
+|[.filename]#/etc/mtree#
+|mtree configuration files, see man: mtree[8] for more information.
-[.programlisting]
-....
-utility_enable="YES"
-....
+|[.filename]#/etc/pam.d#
+|Configuration files for the Pluggable Authentication Modules (PAM) library.
-This method allows for easier manipulation of command line arguments, inclusion of the default functions provided in [.filename]#/etc/rc.subr#, compatibility with man:rcorder[8], and provides for easier configuration via [.filename]#rc.conf#.
+|[.filename]#/etc/periodic#
+|Scripts that are run daily, weekly, and monthly, via man:cron[8], see man:periodic[8] for more information.
-=== Using Services to Start Services
+|[.filename]#/etc/rc.d#
+|System and daemon startup/control scripts, see man:rc[8] for more information.
-Other services can be started using man:inetd[8].
-Working with man:inetd[8] and its configuration is described in depth in crossref:network-servers[network-inetd,“The inetd Super-Server”].
+|[.filename]#/etc/rc.conf#
+|Contains descriptive information about the local host name, configuration details for any potential network interfaces and which services should be started up at system initial boot time. More information in <<configtuning-core-configuration>>
-In some cases, it may make more sense to use man:cron[8] to start system services.
-This approach has a number of advantages as man:cron[8] runs these processes as the owner of the man:crontab[5].
-This allows regular users to start and maintain their own applications.
+|[.filename]#/etc/security#
+|OpenBSM audit configuration files, see man:audit[8] for more information.
-The `@reboot` feature of man:cron[8], may be used in place of the time specification.
-This causes the job to run when man:cron[8] is started, normally during system initialization.
+|[.filename]#/etc/ppp#
+|ppp configuration files, see man:ppp[8] for more information.
-[[configtuning-cron]]
-== Configuring man:cron[8]
+|[.filename]#/etc/ssh#
+|OpenSSH configuration files, see man:ssh[1] for more information.
-One of the most useful utilities in FreeBSD is cron.
-This utility runs in the background and regularly checks [.filename]#/etc/crontab# for tasks to execute and searches [.filename]#/var/cron/tabs# for custom crontab files.
-These files are used to schedule tasks which cron runs at the specified times.
-Each entry in a crontab defines a task to run and is known as a _cron job_.
+|[.filename]#/etc/ssl#
+|OpenSSL configuration files.
-Two different types of configuration files are used: the system crontab, which should not be modified, and user crontabs, which can be created and edited as needed.
-The format used by these files is documented in man:crontab[5].
-The format of the system crontab, [.filename]#/etc/crontab# includes a `who` column which does not exist in user crontabs.
-In the system crontab, cron runs the command as the user specified in this column.
-In a user crontab, all commands run as the user who created the crontab.
+|[.filename]#/etc/sysctl.conf#
+|Contains settings for the kernel. More information in <<configtuning-sysctl>>
-User crontabs allow individual users to schedule their own tasks.
-The `root` user can also have a user [.filename]#crontab# which can be used to schedule tasks that do not exist in the system [.filename]#crontab#.
+|===
-Here is a sample entry from the system crontab, [.filename]#/etc/crontab#:
+[[configtuning-sysctl]]
+=== The sysctl utility
-[.programlisting]
-....
-# /etc/crontab - root's crontab for FreeBSD
-#
-# $FreeBSD$
-# <.>
-SHELL=/bin/sh
-PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin <.>
-#
-#minute hour mday month wday who command <.>
-#
-*/5 * * * * root /usr/libexec/atrun <.>
-....
+The man:sysctl[8] utility is used to make changes to a running FreeBSD system.
-<.> Lines that begin with the `#` character are comments. A comment can be placed in the file as a reminder of what and why a desired action is performed. Comments cannot be on the same line as a command or else they will be interpreted as part of the command; they must be on a new line. Blank lines are ignored.
+The man:sysctl[8] utility retrieves kernel state and allows processes with appropriate privilege to set kernel state.
+The state to be retrieved or set is described using a "Management Information Base" ("MIB") style name, described as a dotted set of components.
-<.> The equals (`=`) character is used to define any environment settings. In this example, it is used to define the `SHELL` and `PATH`. If the `SHELL` is omitted, cron will use the default Bourne shell. If the `PATH` is omitted, the full path must be given to the command or script to run.
+.Management Information Base
+[.informaltable]
+[cols="1,1", frame="none"]
+|===
-<.> This line defines the seven fields used in a system crontab: `minute`, `hour`, `mday`, `month`, `wday`, `who`, and `command`. The `minute` field is the time in minutes when the specified command will be run, the `hour` is the hour when the specified command will be run, the `mday` is the day of the month, `month` is the month, and `wday` is the day of the week. These fields must be numeric values, representing the twenty-four hour clock, or a `*`, representing all values for that field. The `who` field only exists in the system crontab and specifies which user the command should be run as. The last field is the command to be executed.
+|sysctl
+|"Magic" numbers
-<.> This entry defines the values for this cron job. The `\*/5`, followed by several more `*` characters, specifies that `/usr/libexec/atrun` is invoked by `root` every five minutes of every hour, of every day and day of the week, of every month.Commands can include any number of switches. However, commands which extend to multiple lines need to be broken with the backslash "\" continuation character.
+|kern
+|Kernel functions and features
-[[configtuning-installcrontab]]
-=== Creating a User Crontab
+|vm
+|virtual memory
-To create a user crontab, invoke `crontab` in editor mode:
+|vfs
+|Filesystem
-[source,shell]
-....
-% crontab -e
-....
+|net
+|Network
-This will open the user's crontab using the default text editor.
-The first time a user runs this command, it will open an empty file.
-Once a user creates a crontab, this command will open that file for editing.
+|debug
+|Debugging parameters
-It is useful to add these lines to the top of the crontab file in order to set the environment variables and to remember the meanings of the fields in the crontab:
+|hw
+|Hardware
-[.programlisting]
-....
-SHELL=/bin/sh
-PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
-# Order of crontab fields
-# minute hour mday month wday command
-....
+|machdep
+|Machine dependent
-Then add a line for each command or script to run, specifying the time to run the command.
-This example runs the specified custom Bourne shell script every day at two in the afternoon.
-Since the path to the script is not specified in `PATH`, the full path to the script is given:
+|user
+|Userland
-[.programlisting]
+|p1003_1b
+|POSIX 1003.1B
+
+|===
+
+At its core, man:sysctl[8] serves two functions: to read and to modify system settings.
+
+To view all readable variables:
+
+[source,shell]
....
-0 14 * * * /usr/home/dru/bin/mycustomscript.sh
+% sysctl -a
....
-[TIP]
-====
-
-Before using a custom script, make sure it is executable and test it with the limited set of environment variables set by cron.
-To replicate the environment that would be used to run the above cron entry, use:
+The output should be similar to the following:
[.programlisting]
....
-env -i SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin HOME=/home/dru LOGNAME=dru /usr/home/dru/bin/mycustomscript.sh
+kern.ostype: FreeBSD
+...
+vm.swap_enabled: 1
+vm.overcommit: 0
+vm.domain.0.pidctrl.kdd: 8
+vm.domain.0.pidctrl.kid: 4
+vm.domain.0.pidctrl.kpd: 3
+...
+vfs.zfs.sync_pass_rewrite: 2
+vfs.zfs.sync_pass_dont_compress: 8
+vfs.zfs.sync_pass_deferred_free: 2
....
-The environment set by cron is discussed in man:crontab[5].
-Checking that scripts operate correctly in a cron environment is especially important if they include any commands that delete files using wildcards.
-====
-
-When finished editing the crontab, save the file.
-It will automatically be installed and cron will read the crontab and run its cron jobs at their specified times.
-To list the cron jobs in a crontab, use this command:
+To read a particular variable, specify its name:
[source,shell]
....
-% crontab -l
-0 14 * * * /usr/home/dru/bin/mycustomscript.sh
+% sysctl kern.maxproc
....
-To remove all of the cron jobs in a user crontab:
+The output should be similar to the following:
-[source,shell]
+[.programlisting]
....
-% crontab -r
-remove crontab for dru? y
+kern.maxproc: 1044
....
-[[configtuning-rcd]]
-== Managing Services in FreeBSD
-
-FreeBSD uses the man:rc[8] system of startup scripts during system initialization and for managing services.
-The scripts listed in [.filename]#/etc/rc.d# provide basic services which can be controlled with the `start`, `stop`, and `restart` options to man:service[8].
-For instance, man:sshd[8] can be restarted with the following command:
+The Management Information Base (MIB) is hierarchical and hence, specifying a prefix prints all the nodes hanging from it:
[source,shell]
....
-# service sshd restart
+% sysctl net
....
-This procedure can be used to start services on a running system.
-Services will be started automatically at boot time as specified in man:rc.conf[5].
-For example, to enable man:natd[8] at system startup, add the following line to [.filename]#/etc/rc.conf#:
+The output should be similar to the following:
[.programlisting]
....
-natd_enable="YES"
+net.local.stream.recvspace: 8192
+net.local.stream.sendspace: 8192
+net.local.dgram.recvspace: 16384
+net.local.dgram.maxdgram: 2048
+net.local.seqpacket.recvspace: 8192
+net.local.seqpacket.maxseqpacket: 8192
+net.local.sockcount: 60
+net.local.taskcount: 25
+net.local.recycled: 0
+net.local.deferred: 0
+net.local.inflight: 0
+net.inet.ip.portrange.randomtime: 1
+net.inet.ip.portrange.randomcps: 9999
+[...]
....
-If a `natd_enable="NO"` line is already present, change the `NO` to `YES`.
-The man:rc[8] scripts will automatically load any dependent services during the next boot, as described below.
-
-Since the man:rc[8] system is primarily intended to start and stop services at system startup and shutdown time, the `start`, `stop` and `restart` options will only perform their action if the appropriate [.filename]#/etc/rc.conf# variable is set.
-For instance, `sshd restart` will only work if `sshd_enable` is set to `YES` in [.filename]#/etc/rc.conf#.
-To `start`, `stop` or `restart` a service regardless of the settings in [.filename]#/etc/rc.conf#, these commands should be prefixed with "one".
-For instance, to restart man:sshd[8] regardless of the current [.filename]#/etc/rc.conf# setting, execute the following command:
+To set a particular variable, use the _variable_=_value_ syntax:
[source,shell]
....
-# service sshd onerestart
+# sysctl kern.maxfiles=5000
....
-To check if a service is enabled in [.filename]#/etc/rc.conf#, run the appropriate man:rc[8] script with `rcvar`.
-This example checks to see if man:sshd[8] is enabled in [.filename]#/etc/rc.conf#:
+The output should be similar to the following:
-[source,shell]
+[.programlisting]
....
-# service sshd rcvar
-# sshd
-#
-sshd_enable="YES"
-# (default: "")
+kern.maxfiles: 2088 -> 5000
....
[NOTE]
====
-The `# sshd` line is output from the above command, not a `root` console.
+To keep the configuration after a reboot it is necessary to add these variables to the [.filename]#/etc/sysctl.conf# file as explained below.
====
-To determine whether or not a service is running, use `status`.
-For instance, to verify that man:sshd[8] is running:
-
-[source,shell]
-....
-# service sshd status
-sshd is running as pid 433.
-....
-
-In some cases, it is also possible to `reload` a service.
-This attempts to send a signal to an individual service, forcing the service to reload its configuration files.
-In most cases, this means sending the service a `SIGHUP` signal.
-Support for this feature is not included for every service.
+[[configtuning-sysctlconf]]
+=== The [.filename]#/etc/sysctl.conf# file
-The man:rc[8] system is used for network services and it also contributes to most of the system initialization.
-For instance, when the [.filename]#/etc/rc.d/bgfsck# script is executed, it prints out the following message:
+The configuration file for man:sysctl[8], [.filename]#/etc/sysctl.conf#, looks much like [.filename]#/etc/rc.conf#.
-[source,shell]
-....
-Starting background file system checks in 60 seconds.
-....
+Values are set using a `variable=value` syntax.
-This script is used for background file system checks, which occur only during system initialization.
+[NOTE]
+====
+The specified values are set after the system goes into multi-user mode.
+Not all variables are settable in this mode.
+====
-Many system services depend on other services to function properly.
-For example, man:yp[8] and other RPC-based services may fail to start until after the man:rpcbind[8] service has started.
-To resolve this issue, information about dependencies and other meta-data is included in the comments at the top of each startup script.
-The man:rcorder[8] program is used to parse these comments during system initialization to determine the order in which system services should be invoked to satisfy the dependencies.
+For example, to turn off logging of fatal signal exits and prevent users from seeing processes started by other users, the following tunables can be set in [.filename]#/etc/sysctl.conf#:
-The following key word must be included in all startup scripts as it is required by man:rc.subr[8] to "enable" the startup script:
+[.programlisting]
+....
+# Do not log fatal signal exits (e.g., sig 11)
+kern.logsigexit=0
-* `PROVIDE`: Specifies the services this file provides.
+# Prevent users from seeing information about processes that
+# are being run under another UID.
+security.bsd.see_other_uids=0
+....
-The following key words may be included at the top of each startup script.
-They are not strictly necessary, but are useful as hints to man:rcorder[8]:
+To obtain more information about what function a particular sysctl has, the following command can be executed:
-* `REQUIRE`: Lists services which are required for this service. The script containing this key word will run _after_ the specified services.
-* `BEFORE`: Lists services which depend on this service. The script containing this key word will run _before_ the specified services.
+[source,shell]
+....
+% sysctl -d kern.dfldsiz
+....
-By carefully setting these keywords for each startup script, an administrator has a fine-grained level of control of the startup order of the scripts, without the need for "runlevels" used by some UNIX(R) operating systems.
+The output should be similar to the following:
-Additional information can be found in man:rc[8] and man:rc.subr[8].
-Refer to extref:{rc-scripting}[this article] for instructions on how to create custom man:rc[8] scripts.
+[.programlisting]
+....
+kern.dfldsiz: Initial data size limit
+....
[[configtuning-core-configuration]]
=== Managing System-Specific Configuration
The principal location for system configuration information is [.filename]#/etc/rc.conf#.
+
This file contains a wide range of configuration information and it is read at system startup to configure the system.
It provides the configuration information for the [.filename]#rc*# files.
The entries in [.filename]#/etc/rc.conf# override the default settings in [.filename]#/etc/defaults/rc.conf#.
-The file containing the default settings should not be edited.
+
+[TIP]
+====
+The file [.filename]#/etc/defaults/rc.conf# containing the default settings should not be edited.
Instead, all system-specific changes should be made to [.filename]#/etc/rc.conf#.
+====
A number of strategies may be applied in clustered applications to separate site-wide configuration from system-specific configuration in order to reduce administration overhead.
+
The recommended approach is to place system-specific configuration into [.filename]#/etc/rc.conf.local#.
+
For example, these entries in [.filename]#/etc/rc.conf# apply to all systems:
[.programlisting]
@@ -372,382 +356,337 @@ Upgrading the system will not overwrite [.filename]#/etc/rc.conf#, so system con
[TIP]
====
-
Both [.filename]#/etc/rc.conf# and [.filename]#/etc/rc.conf.local# are parsed by man:sh[1].
This allows system operators to create complex configuration scenarios.
Refer to man:rc.conf[5] for further information on this topic.
====
-[[config-network-setup]]
-== Setting Up Network Interface Cards
+[[configtuning-rcd]]
+== Managing Services in FreeBSD
-Adding and configuring a network interface card (NIC) is a common task for any FreeBSD administrator.
+FreeBSD uses the man:rc[8] system of startup scripts during system initialization and for managing services.
-=== Locating the Correct Driver
+The scripts listed in [.filename]#/etc/rc.d# provide basic services which can be controlled with the `start`, `stop`, and `restart` options to man:service[8].
-First, determine the model of the NIC and the chip it uses.
-FreeBSD supports a wide variety of NICs.
-Check the Hardware Compatibility List for the FreeBSD release to see if the NIC is supported.
+A basic script may look similar to the following:
-If the NIC is supported, determine the name of the FreeBSD driver for the NIC.
-Refer to [.filename]#/usr/src/sys/conf/NOTES# and [.filename]#/usr/src/sys/arch/conf/NOTES# for the list of NIC drivers with some information about the supported chipsets.
-When in doubt, read the manual page of the driver as it will provide more information about the supported hardware and any known limitations of the driver.
+[.programlisting]
+....
+#!/bin/sh
+#
+# PROVIDE: utility
+# REQUIRE: DAEMON
+# KEYWORD: shutdown
-The drivers for common NICs are already present in the [.filename]#GENERIC# kernel, meaning the NIC should be probed during boot.
-The system's boot messages can be viewed by typing `more /var/run/dmesg.boot` and using the spacebar to scroll through the text.
-In this example, two Ethernet NICs using the man:dc[4] driver are present on the system:
+. /etc/rc.subr
-[source,shell]
-....
-dc0: <82c169 PNIC 10/100BaseTX> port 0xa000-0xa0ff mem 0xd3800000-0xd38
-000ff irq 15 at device 11.0 on pci0
-miibus0: <MII bus> on dc0
-bmtphy0: <BCM5201 10/100baseTX PHY> PHY 1 on miibus0
-bmtphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
-dc0: Ethernet address: 00:a0:cc:da:da:da
-dc0: [ITHREAD]
-dc1: <82c169 PNIC 10/100BaseTX> port 0x9800-0x98ff mem 0xd3000000-0xd30
-000ff irq 11 at device 12.0 on pci0
-miibus1: <MII bus> on dc1
-bmtphy1: <BCM5201 10/100baseTX PHY> PHY 1 on miibus1
-bmtphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
-dc1: Ethernet address: 00:a0:cc:da:da:db
-dc1: [ITHREAD]
-....
+name=utility
+rcvar=utility_enable
-If the driver for the NIC is not present in [.filename]#GENERIC#, but a driver is available, the driver will need to be loaded before the NIC can be configured and used.
-This may be accomplished in one of two ways:
+command="/usr/local/sbin/utility"
-* The easiest way is to load a kernel module for the NIC using man:kldload[8]. To also automatically load the driver at boot time, add the appropriate line to [.filename]#/boot/loader.conf#. Not all NIC drivers are available as modules.
-* Alternatively, statically compile support for the NIC into a custom kernel. Refer to [.filename]#/usr/src/sys/conf/NOTES#, [.filename]#/usr/src/sys/arch/conf/NOTES# and the manual page of the driver to determine which line to add to the custom kernel configuration file. For more information about recompiling the kernel, refer to crossref:kernelconfig[kernelconfig,Configuring the FreeBSD Kernel]. If the NIC was detected at boot, the kernel does not need to be recompiled.
+load_rc_config $name
-[[config-network-ndis]]
-==== Using Windows(R) NDIS Drivers
+#
+# DO NOT CHANGE THESE DEFAULT VALUES HERE
+# SET THEM IN THE /etc/rc.conf FILE
+#
+utility_enable=${utility_enable-"NO"}
+pidfile=${utility_pidfile-"/var/run/utility.pid"}
-Unfortunately, there are still many vendors that do not provide schematics for their drivers to the open source community because they regard such information as trade secrets.
-Consequently, the developers of FreeBSD and other operating systems are left with two choices: develop the drivers by a long and pain-staking process of reverse engineering or using the existing driver binaries available for Microsoft(R) Windows(R) platforms.
+run_rc_command "$1"
+....
-FreeBSD provides "native" support for the Network Driver Interface Specification (NDIS).
-It includes man:ndisgen[8] which can be used to convert a Windows(R) XP driver into a format that can be used on FreeBSD.
-As the man:ndis[4] driver uses a Windows(R) XP binary, it only runs on i386(TM) and amd64 systems.
-PCI, CardBus, PCMCIA, and USB devices are supported.
+Refer to extref:{rc-scripting}[this article] for instructions on how to create custom man:rc[8] scripts.
-To use man:ndisgen[8], three things are needed:
+[[configtuning-starting-services]]
+=== Starting Services
-. FreeBSD kernel sources.
-. A Windows(R) XP driver binary with a [.filename]#.SYS# extension.
-. A Windows(R) XP driver configuration file with a [.filename]#.INF# extension.
+Many users install third party software on FreeBSD from the Ports Collection and require the installed services to be started upon system initialization.
-Download the [.filename]#.SYS# and [.filename]#.INF# files for the specific NIC.
-Generally, these can be found on the driver CD or at the vendor's website.
-The following examples use [.filename]#W32DRIVER.SYS# and [.filename]#W32DRIVER.INF#.
+Services, such as package:security/openssh-portable[] or package:www/nginx[] are just two of the many software packages which may be started during system initialization.
+This section explains the procedures available for starting services.
-The driver bit width must match the version of FreeBSD.
-For FreeBSD/i386, use a Windows(R) 32-bit driver.
-For FreeBSD/amd64, a Windows(R) 64-bit driver is needed.
+Since the man:rc[8] system is primarily intended to start and stop services at system startup and shutdown time, the `start`, `stop` and `restart` options will only perform their action if the appropriate [.filename]#/etc/rc.conf# variable is set.
-The next step is to compile the driver binary into a loadable kernel module.
-As `root`, use man:ndisgen[8]:
+So the first step to start a service, like for example package:www/nginx[] is to add it to [.filename]#/etc/rc.conf# by executing the following command:
[source,shell]
....
-# ndisgen /path/to/W32DRIVER.INF /path/to/W32DRIVER.SYS
+# sysrc nginx_enable="YES"
....
-This command is interactive and prompts for any extra information it requires.
-A new kernel module will be generated in the current directory.
-Use man:kldload[8] to load the new module:
+Then nginx can be started executing the following command:
[source,shell]
....
-# kldload ./W32DRIVER_SYS.ko
+# service nginx start
....
-In addition to the generated kernel module, the [.filename]#ndis.ko# and [.filename]#if_ndis.ko# modules must be loaded.
-This should happen automatically when any module that depends on man:ndis[4] is loaded.
-If not, load them manually, using the following commands:
+[TIP]
+====
+To `start`, `stop` or `restart` a service regardless of the settings in [.filename]#/etc/rc.conf#, these commands should be prefixed with "one".
+For instance, to start package:www/nginx[] regardless of the current [.filename]#/etc/rc.conf# setting, execute the following command:
[source,shell]
....
-# kldload ndis
-# kldload if_ndis
+# service nginx onestart
....
+====
+
+[[configtuning-status-services]]
+=== Status of a Service
-The first command loads the man:ndis[4] miniport driver wrapper and the second loads the generated NIC driver.
+To determine if a service is running, use the `status` subcommand.
-Check man:dmesg[8] to see if there were any load errors.
-If all went well, the output should be similar to the following:
+For example, to verify that package:www/nginx[] is running:
[source,shell]
....
-ndis0: <Wireless-G PCI Adapter> mem 0xf4100000-0xf4101fff irq 3 at device 8.0 on pci1
-ndis0: NDIS API version: 5.0
-ndis0: Ethernet address: 0a:b1:2c:d3:4e:f5
-ndis0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
-ndis0: 11g rates: 6Mbps 9Mbps 12Mbps 18Mbps 36Mbps 48Mbps 54Mbps
+# service nginx status
....
-From here, [.filename]#ndis0# can be configured like any other NIC.
-
-To configure the system to load the man:ndis[4] modules at boot time, copy the generated module, [.filename]#W32DRIVER_SYS.ko#, to [.filename]#/boot/modules#.
-Then, add the following line to [.filename]#/boot/loader.conf#:
+The output should be similar to the following:
[.programlisting]
....
-W32DRIVER_SYS_load="YES"
+nginx is running as pid 27871.
....
-=== Configuring the Network Card
+[[configtuning-reload-services]]
+=== Reload a Service
+
+In some cases, it is also possible to `reload` a service.
+This attempts to send a signal to an individual service, forcing the service to reload its configuration files.
-Once the right driver is loaded for the NIC, the card needs to be configured.
-It may have been configured at installation time by man:bsdinstall[8].
+In most cases, this means sending the service a `SIGHUP` signal.
-To display the NIC configuration, enter the following command:
+*Not all services support this feature.*
-[source,shell]
-....
-% ifconfig
-dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
- options=80008<VLAN_MTU,LINKSTATE>
- ether 00:a0:cc:da:da:da
- inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255
- media: Ethernet autoselect (100baseTX <full-duplex>)
- status: active
-dc1: flags=8802<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
- options=80008<VLAN_MTU,LINKSTATE>
- ether 00:a0:cc:da:da:db
- inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
- media: Ethernet 10baseT/UTP
- status: no carrier
-lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
- options=3<RXCSUM,TXCSUM>
- inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
- inet6 ::1 prefixlen 128
- inet 127.0.0.1 netmask 0xff000000
- nd6 options=3<PERFORMNUD,ACCEPT_RTADV>
-....
-
-In this example, the following devices were displayed:
-
-* [.filename]#dc0#: The first Ethernet interface.
-* [.filename]#dc1#: The second Ethernet interface.
-* [.filename]#lo0#: The loopback device.
-
-FreeBSD uses the driver name followed by the order in which the card is detected at boot to name the NIC.
-For example, [.filename]#sis2# is the third NIC on the system using the man:sis[4] driver.
-
-In this example, [.filename]#dc0# is up and running.
-The key indicators are:
-
-. `UP` means that the card is configured and ready.
-. The card has an Internet (`inet`) address, `192.168.1.3`.
-. It has a valid subnet mask (`netmask`), where `0xffffff00` is the same as `255.255.255.0`.
-. It has a valid broadcast address, `192.168.1.255`.
-. The MAC address of the card (`ether`) is `00:a0:cc:da:da:da`.
-. The physical media selection is on autoselection mode (`media: Ethernet autoselect (100baseTX <full-duplex>)`). In this example, [.filename]#dc1# is configured to run with `10baseT/UTP` media. For more information on available media types for a driver, refer to its manual page.
-. The status of the link (`status`) is `active`, indicating that the carrier signal is detected. For [.filename]#dc1#, the `status: no carrier` status is normal when an Ethernet cable is not plugged into the card.
-
-If the man:ifconfig[8] output had shown something similar to:
+The man:rc[8] system is used for network services and it also contributes to most of the system initialization.
+For instance, when the [.filename]#/etc/rc.d/bgfsck# script is executed, it prints out the following message:
[source,shell]
....
-dc0: flags=8843<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
- options=80008<VLAN_MTU,LINKSTATE>
- ether 00:a0:cc:da:da:da
- media: Ethernet autoselect (100baseTX <full-duplex>)
- status: active
+Starting background file system checks in 60 seconds.
....
-it would indicate the card has not been configured.
+This script is used for background file system checks, which occur only during system initialization.
-The card must be configured as `root`.
-The NIC configuration can be performed from the command line with man:ifconfig[8] but will not persist after a reboot unless the configuration is also added to [.filename]#/etc/rc.conf#.
-If a DHCP server is present on the LAN, just add this line:
+Many system services depend on other services to function properly.
+For example, man:yp[8] and other RPC-based services may fail to start until after the man:rpcbind[8] service has started.
-[.programlisting]
-....
-ifconfig_dc0="DHCP"
-....
+Additional information can be found in man:rc[8] and man:rc.subr[8].
-Replace _dc0_ with the correct value for the system.
+=== Using Services to Start Services
-The line added, then, follow the instructions given in <<config-network-testing>>.
+Other services can be started using man:inetd[8].
+Working with man:inetd[8] and its configuration is described in depth in crossref:network-servers[network-inetd,“The inetd Super-Server”].
-[NOTE]
-====
-If the network was configured during installation, some entries for the NIC(s) may be already present.
-Double check [.filename]#/etc/rc.conf# before adding any lines.
-====
+In some cases, it may make more sense to use man:cron[8] to start system services.
+This approach has a number of advantages as man:cron[8] runs these processes as the owner of the man:crontab[5].
+This allows regular users to start and maintain their own applications.
+
+The `@reboot` feature of man:cron[8], may be used in place of the time specification.
+This causes the job to run when man:cron[8] is started, normally during system initialization.
+
+[[cron-periodic]]
+== Cron and Periodic
+
+Scheduling tasks to run at a certain day or time is a very common task on FreeBSD.
+The tool in charge of performing this task is man:cron[8].
+
+In addition to tasks that can be scheduled by the user via man:cron[8], FreeBSD performs routine background tasks managed by man:periodic[8].
+
+[[configtuning-cron]]
+=== Cron
+
+The man:cron[8] utility runs in the background and regularly checks [.filename]#/etc/crontab# for tasks to execute and searches [.filename]#/var/cron/tabs# for custom crontab files.
-If there is no DHCP server, the NIC(s) must be configured manually.
-Add a line for each NIC present on the system, as seen in this example:
+These files are used to schedule tasks which cron runs at the specified times.
+
+Each entry in a crontab defines a task to run and is known as a _cron job_.
+
+Two different types of configuration files are used: the system crontab, which should not be modified, and user crontabs, which can be created and edited as needed.
+The format used by these files is documented in man:crontab[5].
+The format of the system crontab, [.filename]#/etc/crontab# includes a `who` column which does not exist in user crontabs.
+In the system crontab, cron runs the command as the user specified in this column.
+In a user crontab, all commands run as the user who created the crontab.
+
+User crontabs allow individual users to schedule their own tasks.
+The `root` user can also have a user [.filename]#crontab# which can be used to schedule tasks that do not exist in the system [.filename]#crontab#.
+
+Here is a sample entry from the system crontab, [.filename]#/etc/crontab#:
[.programlisting]
....
-ifconfig_dc0="inet 192.168.1.3 netmask 255.255.255.0"
-ifconfig_dc1="inet 10.0.0.1 netmask 255.255.255.0 media 10baseT/UTP"
+# /etc/crontab - root's crontab for FreeBSD
+#
+# <.>
+#
+SHELL=/bin/sh
+PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin <.>
+#
+#minute hour mday month wday who command <.>
+#
+# Save some entropy so that /dev/random can re-seed on boot.
+*/11 * * * * operator /usr/libexec/save-entropy <.>
+#
+# Rotate log files every hour, if necessary.
+0 * * * * root newsyslog
+#
+# Perform daily/weekly/monthly maintenance.
+1 3 * * * root periodic daily
+15 4 * * 6 root periodic weekly
+30 5 1 * * root periodic monthly
+#
+# Adjust the time zone if the CMOS clock keeps local time, as opposed to
+# UTC time. See adjkerntz(8) for details.
+1,31 0-5 * * * root adjkerntz -a
+
....
-Replace [.filename]#dc0# and [.filename]#dc1# and the IP address information with the correct values for the system.
-Refer to the man page for the driver, man:ifconfig[8], and man:rc.conf[5] for more details about the allowed options and the syntax of [.filename]#/etc/rc.conf#.
+<.> Lines that begin with the `+#+` character are comments. A comment can be placed in the file as a reminder of what and why a desired action is performed. Comments cannot be on the same line as a command or else they will be interpreted as part of the command; they must be on a new line. Blank lines are ignored.
-If the network is not using DNS, edit [.filename]#/etc/hosts# to add the names and IP addresses of the hosts on the LAN, if they are not already there.
-For more information, refer to man:hosts[5] and to [.filename]#/usr/share/examples/etc/hosts#.
+<.> The equals (`=`) character is used to define any environment settings. In this example, it is used to define the `SHELL` and `PATH`. If the `SHELL` is omitted, cron will use the default Bourne shell. If the `PATH` is omitted, the full path must be given to the command or script to run.
-[NOTE]
-====
-If there is no DHCP server and access to the Internet is needed, manually configure the default gateway and the nameserver:
+<.> This line defines the seven fields used in a system crontab: `minute`, `hour`, `mday`, `month`, `wday`, `who`, and `command`. The `minute` field is the time in minutes when the specified command will be run, the `hour` is the hour when the specified command will be run, the `mday` is the day of the month, `month` is the month, and `wday` is the day of the week. These fields must be numeric values, representing the twenty-four hour clock, or a `*`, representing all values for that field. The `who` field only exists in the system crontab and specifies which user the command should be run as. The last field is the command to be executed.
+
+<.> This entry defines the values for this cron job. The `\*/11`, followed by several more `*` characters, specifies that `/usr/libexec/save-entropy` is invoked by `operator` every eleven minutes of every hour, of every day and day of the week, of every month. Commands can include any number of switches. However, commands which extend to multiple lines need to be broken with the backslash "\" continuation character.
+
+[[configtuning-installcrontab]]
+=== Creating a User Crontab
+
+To create a user crontab, invoke `crontab` in editor mode:
[source,shell]
....
-# sysrc defaultrouter="your_default_router"
-# echo 'nameserver your_DNS_server' >> /etc/resolv.conf
+% crontab -e
....
-====
-
-[[config-network-testing]]
-=== Testing and Troubleshooting
+This will open the user's crontab using the default text editor.
+The first time a user runs this command, it will open an empty file.
+Once a user creates a crontab, this command will open that file for editing.
-Once the necessary changes to [.filename]#/etc/rc.conf# are saved, a reboot can be used to test the network configuration and to verify that the system restarts without any configuration errors.
-Alternatively, apply the settings to the networking system with this command:
+It is useful to add these lines to the top of the crontab file in order to set the environment variables and to remember the meanings of the fields in the crontab:
-[source,shell]
+[.programlisting]
....
-# service netif restart
+SHELL=/bin/sh
+PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
+# Order of crontab fields
+# minute hour mday month wday command
....
-[NOTE]
-====
-If a default gateway has been set in [.filename]#/etc/rc.conf#, also issue this command:
+Then add a line for each command or script to run, specifying the time to run the command.
+This example runs the specified custom Bourne shell script every day at two in the afternoon.
+Since the path to the script is not specified in `PATH`, the full path to the script is given:
-[source,shell]
+[.programlisting]
....
-# service routing restart
+0 14 * * * /home/user/bin/mycustomscript.sh
....
+[TIP]
====
+Before using a custom script, make sure it is executable and test it with the limited set of environment variables set by cron.
+To replicate the environment that would be used to run the above cron entry, use:
-Once the networking system has been relaunched, test the NICs.
+[.programlisting]
+....
+env -i SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin HOME=/home/user LOGNAME=user /home/user/bin/mycustomscript.sh
+....
-==== Testing the Ethernet Card
+The environment set by cron is discussed in man:crontab[5].
+Checking that scripts operate correctly in a cron environment is especially important if they include any commands that delete files using wildcards.
+====
-To verify that an Ethernet card is configured correctly, man:ping[8] the interface itself, and then man:ping[8] another machine on the LAN:
+When finished editing the crontab, save the file.
+It will automatically be installed, and cron will read the crontab and run its cron jobs at their specified times.
+To list the cron jobs in a crontab, use this command:
[source,shell]
....
-% ping -c5 192.168.1.3
-PING 192.168.1.3 (192.168.1.3): 56 data bytes
-64 bytes from 192.168.1.3: icmp_seq=0 ttl=64 time=0.082 ms
-64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.074 ms
-64 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.076 ms
-64 bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.108 ms
-64 bytes from 192.168.1.3: icmp_seq=4 ttl=64 time=0.076 ms
+% crontab -l
+....
+
+The output should be similar to the following:
---- 192.168.1.3 ping statistics ---
-5 packets transmitted, 5 packets received, 0% packet loss
-round-trip min/avg/max/stddev = 0.074/0.083/0.108/0.013 ms
+[.programlisting]
+....
+0 14 * * * /home/user/bin/mycustomscript.sh
....
+To remove all of the cron jobs in a user crontab:
+
[source,shell]
....
-% ping -c5 192.168.1.2
-PING 192.168.1.2 (192.168.1.2): 56 data bytes
-64 bytes from 192.168.1.2: icmp_seq=0 ttl=64 time=0.726 ms
-64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.766 ms
-64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.700 ms
-64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.747 ms
-64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.704 ms
-
---- 192.168.1.2 ping statistics ---
-5 packets transmitted, 5 packets received, 0% packet loss
-round-trip min/avg/max/stddev = 0.700/0.729/0.766/0.025 ms
+% crontab -r
....
-To test network resolution, use the host name instead of the IP address.
-If there is no DNS server on the network, [.filename]#/etc/hosts# must first be configured.
-To this purpose, edit [.filename]#/etc/hosts# to add the names and IP addresses of the hosts on the LAN, if they are not already there.
-For more information, refer to man:hosts[5] and to [.filename]#/usr/share/examples/etc/hosts#.
-
-==== Troubleshooting
+The output should be similar to the following:
-When troubleshooting hardware and software configurations, check the simple things first.
-Is the network cable plugged in? Are the network services properly configured? Is the firewall configured correctly? Is the NIC supported by FreeBSD? Before sending a bug report, always check the Hardware Notes, update the version of FreeBSD to the latest STABLE version, check the mailing list archives, and search the Internet.
+[.programlisting]
+....
+remove crontab for user? y
+....
-If the card works, yet performance is poor, read through man:tuning[7].
-Also, check the network configuration as incorrect network settings can cause slow connections.
+[[configtuning-periodic]]
+=== Periodic
-Some users experience one or two `device timeout` messages, which is normal for some cards.
-If they continue, or are bothersome, determine if the device is conflicting with another device.
-Double check the cable connections.
-Consider trying another card.
+FreeBSD provides a set of system management scripts to check status of various subsystems, perform security-related checks, rotate log files, etc.
+These scripts are run on a periodic basis: daily. weekly, or monthly.
+The management of these tasks is performed by man:periodic[8] and its configuration resides in man:periodic.conf[5].
+The periodic tasks are initiated by entries in the system crontab, shown above.
-To resolve `watchdog timeout` errors, first check the network cable.
-Many cards require a PCI slot which supports bus mastering.
-On some old motherboards, only one PCI slot allows it, usually slot 0.
-Check the NIC and the motherboard documentation to determine if that may be the problem.
+Scripts executed by man:periodic[8] are located in [.filename]#/etc/periodic/# for base utilities and in [.filename]#/usr/local/etc/periodic/# for third-party software.
-`No route to host` messages occur if the system is unable to route a packet to the destination host.
-This can happen if no default route is specified or if a cable is unplugged.
-Check the output of `netstat -rn` and make sure there is a valid route to the host.
-If there is not, read crossref:advanced-networking[network-routing,“Gateways and Routes”].
+They are organized in 4 subdirectories, daily, weekly, monthly and security.
-`ping: sendto: Permission denied` error messages are often caused by a misconfigured firewall.
-If a firewall is enabled on FreeBSD but no rules have been defined, the default policy is to deny all traffic, even man:ping[8].
-Refer to crossref:firewalls[firewalls,Firewalls] for more information.
+[[enable-disable-periodic]]
+=== Enable or Disable Periodic Tasks
-Sometimes performance of the card is poor or below average.
-In these cases, try setting the media selection mode from `autoselect` to the correct media selection.
-While this works for most hardware, it may or may not resolve the issue.
-Again, check all the network settings, and refer to man:tuning[7].
+FreeBSD has some scripts enabled by default to run periodically.
-[[configtuning-virtual-hosts]]
-== Virtual Hosts
+To enable or disable a task, the first step is to edit [.filename]#/etc/periodic.conf# executing the following command:
-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.
+[source,shell]
+....
+# ee /etc/periodic.conf
+....
-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:
+And then to enable, for example, `daily_status_zfs_enable` put the following content in the file:
[.programlisting]
....
-ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx"
+daily_status_zfs_enable="YES"
....
-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.
+To disable a task that is active by default, all that needs to be done is to change `YES` to `NO`.
-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`.
+[[configuring-output-periodic-tasks]]
+=== Configuring the Output of Periodic Tasks
-For example, consider the case where the [.filename]#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`.
+In [.filename]#/etc/periodic.conf# the variables `daily_output`, `weekly_output` and `monthly_output` specifies where to send the results of the script execution.
-The following [.filename]#/etc/rc.conf# entries configure the adapter correctly for this scenario:
+By default the output of the periodic scripts are emailed to root, and therefore it is best to read root's mail or alias root to a mailbox that is monitored.
+
+To send the results to another email or to other emails, add the email addresses separated by spaces to [.filename]#/etc/periodic.conf#:
[.programlisting]
....
-ifconfig_fxp0="inet 10.1.1.1 netmask 255.255.255.0"
-ifconfig_fxp0_alias0="inet 10.1.1.2 netmask 255.255.255.255"
-ifconfig_fxp0_alias1="inet 10.1.1.3 netmask 255.255.255.255"
-ifconfig_fxp0_alias2="inet 10.1.1.4 netmask 255.255.255.255"
-ifconfig_fxp0_alias3="inet 10.1.1.5 netmask 255.255.255.255"
-ifconfig_fxp0_alias4="inet 202.0.75.17 netmask 255.255.255.240"
-ifconfig_fxp0_alias5="inet 202.0.75.18 netmask 255.255.255.255"
-ifconfig_fxp0_alias6="inet 202.0.75.19 netmask 255.255.255.255"
-ifconfig_fxp0_alias7="inet 202.0.75.20 netmask 255.255.255.255"
+daily_output="email1@example.com email2@example.com"
+weekly_output="email1@example.com email2@example.com"
+monthly_output="email1@example.com email2@example.com"
....
-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`.
+To log periodic output instead of receiving it as email, add the following lines to [.filename]#/etc/periodic.conf#. man:newsyslog[8] will rotate these files at the appropriate times:
[.programlisting]
....
-ifconfig_fxp0_aliases="inet 10.1.1.1-5/24 inet 202.0.75.17-20/28"
+daily_output=/var/log/daily.log
+weekly_output=/var/log/weekly.log
+monthly_output=/var/log/monthly.log
....
[[configtuning-syslog]]
@@ -758,11 +697,8 @@ The information in system logs can be used to detect hardware and software issue
This information also plays an important role in security auditing and incident response.
Most system daemons and applications will generate log entries.
-FreeBSD provides a system logger, syslogd, to manage logging.
-By default, syslogd is started when the system boots.
-This is controlled by the variable `syslogd_enable` in [.filename]#/etc/rc.conf#.
-There are numerous application arguments that can be set using `syslogd_flags` in [.filename]#/etc/rc.conf#.
-Refer to man:syslogd[8] for more information on the available arguments.
+FreeBSD provides a system logger, man:syslogd[8], to manage logging.
+By default, syslogd is enabled and started when the system boots.
This section describes how to configure the FreeBSD system logger for both local and remote logging and how to perform log rotation and log management.
@@ -780,29 +716,28 @@ It is also possible to add an optional comparison flag before the level to speci
Multiple selector fields can be used for the same action, and are separated with a semicolon (`;`).
Using `*` will match everything.
The action field denotes where to send the log message, such as to a file or remote log host.
-As an example, here is the default [.filename]#syslog.conf# from FreeBSD:
+
+As an example, here is the default [.filename]#/etc/syslog.conf# from FreeBSD:
[.programlisting]
....
-# $FreeBSD$
-#
# Spaces ARE valid field separators in this file. However,
# other *nix-like systems still insist on using tabs as field
# separators. If you are sharing this file between systems, you
# may want to use only tabs as field separators here.
# Consult the syslog.conf(5) manpage.
-*.err;kern.warning;auth.notice;mail.crit /dev/console
+*.err;kern.warning;auth.notice;mail.crit /dev/console <.>
*.notice;authpriv.none;kern.debug;lpr.info;mail.crit;news.err /var/log/messages
security.* /var/log/security
auth.info;authpriv.info /var/log/auth.log
-mail.info /var/log/maillog
-lpr.info /var/log/lpd-errs
-ftp.info /var/log/xferlog
+mail.info /var/log/maillog <.>
cron.* /var/log/cron
!-devd
-*.=debug /var/log/debug.log
+*.=debug /var/log/debug.log <.>
*.emerg *
+daemon.info /var/log/daemon.log
# uncomment this to log all writes to /dev/console to /var/log/console.log
+# touch /var/log/console.log and chmod it to mode 600 before it will work
#console.info /var/log/console.log
# uncomment this to enable logging of all log messages to /var/log/all.log
# touch /var/log/all.log and chmod it to mode 600 before it will work
@@ -815,53 +750,181 @@ cron.* /var/log/cron
# news.notice /var/log/news/news.notice
# Uncomment this if you wish to see messages produced by devd
# !devd
-# *.>=info
-!ppp
-*.* /var/log/ppp.log
+# *.>=notice /var/log/devd.log <.>
!*
+include /etc/syslog.d
+include /usr/local/etc/syslog.d
....
-In this example:
+<.> Matches all messages with a level of `err` or higher, as well as `kern.warning`, `auth.notice` and `mail.crit`, and sends these log messages to the console ([.filename]#/dev/console#).
+<.> Matches all messages from the `mail` facility at level `info` or above and logs the messages to [.filename]#/var/log/maillog#.
+<.> Uses a comparison flag (`=`) to only match messages at level `debug` and logs them to [.filename]#/var/log/debug.log#.
+<.> Is an example usage of a program specification. This makes the rules following it only valid for the specified program. In this case, only the messages generated by man:devd[8] are logged to [.filename]#/var/log/devd.log#.
+
+For more information about [.filename]#/etc/syslog.conf#, its syntax, and more advanced usage examples, see man:syslog.conf[5].
+
+[[logging-facilities]]
+=== Logging Facilities
+
+A facility describes the part of the system generating the message.
+Facilities are a way of separating the different messages so that it is easier for the user to consult the logs.
+
+.syslog facilities
+[options="header", cols="1,1"]
+|===
+| Name | Description
+
+| auth
+| The authorization system: man:login[1], man:su[1], man:getty[8], etc.
+
+| authpriv
+| The same as auth, but logged to a file readable only by root.
+
+| console
+| Messages written to [.filename]#/dev/console# by the kernel console output driver.
+
+| cron
+| Messages written by the man:cron[8] daemon.
+
+| daemon
+| System daemons, such as man:routed[8], that are not provided for explicitly by other facilities.
+
+| ftp
+| The file transfer protocol daemons: man:ftpd[8], man:tftpd[8].
+
+| kern
+| Messages generated by the kernel. These cannot be generated by any user processes.
+
+| lpr
+| The line printer spooling system: man:lpr[1], man:lpc[8], man:lpd[8], etc.
+
+| mail
+| The mail system.
+
+| mark
+| This facility adds a record every 20 minutes.
+
+| news
+| The network news system.
+
+| ntp
+| The network time protocol system.
+
+| security
+| Security subsystems, such as man:ipfw[4].
+
+| syslog
+| Messages generated internally by syslogd(8).
+
+| user
+| Messages generated by random user processes. *This is the default facility identifier if none is specified*.
+
+| uucp
+| The Unix-to-Unix Copy system. An ancient protocol. Really weird to see messages from this facility.
+
+| local0 through local7
+| Reserved for local use.
+
+|===
+
+[[logging-levels]]
+=== Logging Levels
+
+The level describes the severity of the message, and is a keyword from the following ordered list (higher to lower):
+
+.syslog levels
+[options="header", cols="1,1"]
+|===
+| Name | Description
+
+| emerg
+| A panic condition. This is normally broadcast to all users.
+
+| alert
+| A condition that should be corrected immediately, such as a corrupted system database.
+
+| crit
+| Critical conditions, e.g., hard device errors.
+
+| err
+| Errors.
+
+| warning
+| Warning messages.
-* Line 8 matches all messages with a level of `err` or higher, as well as `kern.warning`, `auth.notice` and `mail.crit`, and sends these log messages to the console ([.filename]#/dev/console#).
-* Line 12 matches all messages from the `mail` facility at level `info` or above and logs the messages to [.filename]#/var/log/maillog#.
-* Line 17 uses a comparison flag (`=`) to only match messages at level `debug` and logs them to [.filename]#/var/log/debug.log#.
-* Line 33 is an example usage of a program specification. This makes the rules following it only valid for the specified program. In this case, only the messages generated by ppp are logged to [.filename]#/var/log/ppp.log#.
+| notice
+| Conditions that are not error conditions, but should possibly be handled specially.
-The available levels, in order from most to least critical are `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, and `debug`.
+| info
+| Informational messages.
-The facilities, in no particular order, are `auth`, `authpriv`, `console`, `cron`, `daemon`, `ftp`, `kern`, `lpr`, `mail`, `mark`, `news`, `security`, `syslog`, `user`, `uucp`, and `local0` through `local7`.
-Be aware that other operating systems might have different facilities.
+| debug
+| Messages that contain information normally of use only when debugging a program.
-To log everything of level `notice` and higher to [.filename]#/var/log/daemon.log#, add the following entry:
+| none
+| This special level disables a particular facility.
+
+|===
+
+[[read-log-messages]]
+=== Read Log Messages
+
+By default FreeBSD log files use the format link:https://datatracker.ietf.org/doc/html/rfc3164[rfc3164], also known as The BSD syslog Protocol.
+Learn more about other formats and how to use them at man:syslog[8].
+
+Typically the logs have the following syntax:
[.programlisting]
....
-daemon.notice /var/log/daemon.log
+date time hostname program[pid]: the message
....
-For more information about the different levels and facilities, refer to man:syslog[3] and man:syslogd[8].
-For more information about [.filename]#/etc/syslog.conf#, its syntax, and more advanced usage examples, see man:syslog.conf[5].
+The output of the [.filename]#/var/log/cron# file will be used as an example:
+
+[.programlisting]
+....
+[...]
+Jul 16 12:40:00 FreeBSD /usr/sbin/cron[81519]: (root) CMD (/usr/libexec/atrun)
+Jul 16 12:44:00 FreeBSD /usr/sbin/cron[83072]: (operator) CMD (/usr/libexec/save-entropy)
+[...]
+....
+
+Verbose logging, so the facility and the level on each message will be added, can be enabled in man:syslog[8] by running the following command:
+
+[source,shell]
+....
+# sysrc syslogd_flags="-vv"
+....
+
+Once the function is activated, the facility and the level will be displayed in the log as shown in the following example:
+
+[.programlisting]
+....
+[...]
+Jul 16 17:40:00 <cron.info> FreeBSD /usr/sbin/cron[1016]: (root) CMD (/usr/libexec/atrun)
+Jul 16 17:44:00 <cron.info> FreeBSD /usr/sbin/cron[1030]: (operator) CMD (/usr/libexec/save-entropy)
+[...]
+....
=== Log Management and Rotation
Log files can grow quickly, taking up disk space and making it more difficult to locate useful information.
-Log management attempts to mitigate this.
-In FreeBSD, newsyslog is used to manage log files.
-This built-in program periodically rotates and compresses log files, and optionally creates missing log files and signals programs when log files are moved.
-The log files may be generated by syslogd or by any other program which generates log files.
-While newsyslog is normally run from man:cron[8], it is not a system daemon.
+
+In FreeBSD, man:newsyslog[8] is used to manage log files and attempt to mitigate this.
+
+This built-in program periodically rotates and compresses log files, and optionally creates missing log files and signals programs when log files are moved.
+
+[NOTE]
+====
+Since newsyslog is run from man:cron[8], it cannot rotate files more often than it is scheduled to run from man:cron[8].
In the default configuration, it runs every hour.
+====
-To know which actions to take, newsyslog reads its configuration file, [.filename]#/etc/newsyslog.conf#.
-This file contains one line for each log file that newsyslog manages.
-Each line states the file owner, permissions, when to rotate that file, optional flags that affect log rotation, such as compression, and programs to signal when the log is rotated.
-Here is the default configuration in FreeBSD:
+Here is the default configuration in FreeBSD, more information in man:newsyslog.conf[5]:
[.programlisting]
....
# configuration file for newsyslog
-# $FreeBSD$
#
# Entries which do not specify the '/pid_file' field will cause the
# syslogd process to be signalled when that log file is rotated. This
@@ -870,8 +933,6 @@ Here is the default configuration in FreeBSD:
# is no process which needs to be signalled when a given log file is
# rotated, then the entry for that file should include the 'N' flag.
#
-# The 'flags' field is one or more of the letters: BCDGJNUXZ or a '-'.
-#
# Note: some sites will want to select more restrictive protections than the
# defaults. In particular, it may be desirable to switch many of the 644
# entries to 640 or 600. For example, some sites will consider the
@@ -880,37 +941,40 @@ Here is the default configuration in FreeBSD:
#
# logfilename [owner:group] mode count size when flags [/pid_file] [sig_num]
/var/log/all.log 600 7 * @T00 J
-/var/log/amd.log 644 7 100 * J
-/var/log/auth.log 600 7 100 @0101T JC
-/var/log/console.log 600 5 100 * J
-/var/log/cron 600 3 100 * JC
+/var/log/auth.log 600 7 1000 @0101T JC
+/var/log/console.log 600 5 1000 * J
+/var/log/cron 600 3 1000 * JC
/var/log/daily.log 640 7 * @T00 JN
-/var/log/debug.log 600 7 100 * JC
-/var/log/kerberos.log 600 7 100 * J
-/var/log/lpd-errs 644 7 100 * JC
+/var/log/debug.log 600 7 1000 * JC
+/var/log/init.log 644 3 1000 * J
+/var/log/kerberos.log 600 7 1000 * J
/var/log/maillog 640 7 * @T00 JC
-/var/log/messages 644 5 100 @0101T JC
+/var/log/messages 644 5 1000 @0101T JC
/var/log/monthly.log 640 12 * $M1D0 JN
-/var/log/pflog 600 3 100 * JB /var/run/pflogd.pid
-/var/log/ppp.log root:network 640 3 100 * JC
-/var/log/devd.log 644 3 100 * JC
-/var/log/security 600 10 100 * JC
-/var/log/sendmail.st 640 10 * 168 B
+/var/log/devd.log 644 3 1000 * JC
+/var/log/security 600 10 1000 * JC
/var/log/utx.log 644 3 * @01T05 B
-/var/log/weekly.log 640 5 1 $W6D0 JN
-/var/log/xferlog 600 7 100 * JC
+/var/log/weekly.log 640 5 * $W6D0 JN
+/var/log/daemon.log 644 5 1000 @0101T JC
+
+<include> /etc/newsyslog.conf.d/[!.]*.conf
+<include> /usr/local/etc/newsyslog.conf.d/[!.]*.conf
....
-Each line starts with the name of the log to be rotated, optionally followed by an owner and group for both rotated and newly created files.
-The `mode` field sets the permissions on the log file and `count` denotes how many rotated log files should be kept.
-The `size` and `when` fields tell newsyslog when to rotate the file.
-A log file is rotated when either its size is larger than the `size` field or when the time in the `when` field has passed.
-An asterisk (`*`) means that this field is ignored.
-The _flags_ field gives further instructions, such as how to compress the rotated file or to create the log file if it is missing.
-The last two fields are optional and specify the name of the Process ID (PID) file of a process and a signal number to send to that process when the file is rotated.
+. `logfilename` - Name of the system log file to be archived.
+. `[owner:group]` - This optional field specifies the owner and group for the archive file.
+. `mode` - Specify the file mode of the log file and archives. Valid mode bits are 0666. (That is, read and write permissions for the rotated log may be specified for the owner, group, and others.)
+. `count` - Specify the maximum number of archive files which may exist.
+. `size` - When the size of the log file reaches size in kilobytes, the log file will be trimmed as described above. If this field contains an asterisk ('*'), the log file will not be trimmed based on size.
+. `when` - Consist of an interval, a specific time, or both. Supported options in man:newsyslog.conf[5].
+. `flags` - Indicates the flags that newsyslog accepts, supported options in man:newsyslog.conf[5].
+. `[/pid_file]` - This optional field specifies the file name containing a daemon's process ID or to find a group process ID.
+. `[sig_num]` - This optional field specifies the signal that will be sent to the daemon process.
-For more information on all fields, valid flags, and how to specify the rotation time, refer to man:newsyslog.conf[5].
-Since newsyslog is run from man:cron[8], it cannot rotate files more often than it is scheduled to run from man:cron[8].
+[NOTE]
+====
+The last two fields are optional and specify the name of the Process ID (PID) file of a process and a signal number to send to that process when the file is rotated.
+====
[[network-syslogd]]
=== Configuring Remote Logging
@@ -919,12 +983,15 @@ Monitoring the log files of multiple hosts can become unwieldy as the number of
Configuring centralized logging can reduce some of the administrative burden of log file administration.
In FreeBSD, centralized log file aggregation, merging, and rotation can be configured using syslogd and newsyslog.
+
This section demonstrates an example configuration, where host `A`, named `logserv.example.com`, will collect logging information for the local network.
+
Host `B`, named `logclient.example.com`, will be configured to pass logging information to the logging server.
==== Log Server Configuration
A log server is a system that has been configured to accept logging information from other hosts.
+
Before configuring a log server, check the following:
* If there is a firewall between the logging server and any logging clients, ensure that the firewall ruleset allows UDP port 514 for both the clients and the server.
@@ -948,12 +1015,12 @@ This example adds the hostname of `B`, logs all facilities, and stores the log e
When adding multiple log clients, add a similar two-line entry for each client.
More information about the available facilities may be found in man:syslog.conf[5].
-Next, configure [.filename]#/etc/rc.conf#:
+Next, execute the following commands:
-[.programlisting]
+[source,shell]
....
-syslogd_enable="YES"
-syslogd_flags="-a logclient.example.com -v -v"
+# sysrc syslogd_enable="YES"
+# sysrc syslogd_flags="-a logclient.example.com -v -v"
....
The first entry starts syslogd at system boot.
@@ -988,12 +1055,12 @@ If the server did not restart, consult [.filename]#/var/log/messages# for the er
A logging client sends log entries to a logging server on the network.
The client also keeps a local copy of its own logs.
-Once a logging server has been configured, edit [.filename]#/etc/rc.conf# on the logging client:
+Once a logging server has been configured, execute the following commands on the logging client:
-[.programlisting]
+[source,shell]
....
-syslogd_enable="YES"
-syslogd_flags="-s -v -v"
+# sysrc syslogd_enable="YES"
+# sysrc syslogd_flags="-s -v -v"
....
The first entry enables syslogd on boot up.
@@ -1004,7 +1071,7 @@ In this example, all logged facilities are sent to a remote system, denoted by t
[.programlisting]
....
-*.* @logserv.example.com
+*.* @logserv.example.com
....
After saving the edit, restart syslogd for the changes to take effect:
@@ -1032,11 +1099,12 @@ Repeat until the `ping` is successful from both hosts.
If the `ping` succeeds on both hosts but log messages are still not being received, temporarily increase logging verbosity to narrow down the configuration issue.
In the following example, [.filename]#/var/log/logclient.log# on the logging server is empty and [.filename]#/var/log/messages# on the logging client does not indicate a reason for the failure.
+
To increase debugging output, edit the `syslogd_flags` entry on the logging server and issue a restart:
-[.programlisting]
+[source,shell]
....
-syslogd_flags="-d -a logclient.example.com -v -v"
+sysrc syslogd_flags="-d -a logclient.example.com -v -v"
....
[source,shell]
@@ -1046,7 +1114,7 @@ syslogd_flags="-d -a logclient.example.com -v -v"
Debugging data similar to the following will flash on the console immediately after the restart:
-[source,shell]
+[.programlisting]
....
logmsg: pri 56, flags 4, from logserv.example.com, msg syslogd: restart
syslogd: restarted
@@ -1065,6 +1133,12 @@ Fix the typo, issue a restart, and verify the results:
[source,shell]
....
# service syslogd restart
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
logmsg: pri 56, flags 4, from logserv.example.com, msg syslogd: restart
syslogd: restarted
logmsg: pri 6, flags 4, from logserv.example.com, msg syslogd: kernel boot file is /boot/kernel/kernel
@@ -1096,886 +1170,417 @@ The built-in log rotator, newsyslog, supports setting permissions on newly creat
Setting log files to mode `600` should prevent unwanted access by local users.
Refer to man:newsyslog.conf[5] for additional information.
-[[configtuning-configfiles]]
-== Configuration Files
-
-=== [.filename]#/etc# Layout
-
-There are a number of directories in which configuration information is kept.
-These include:
-
-[.informaltable]
-[cols="1,1", frame="none"]
-|===
-
-|[.filename]#/etc#
-|Generic system-specific configuration information.
-
-|[.filename]#/etc/defaults#
-|Default versions of system configuration files.
-
-|[.filename]#/etc/mail#
-|Extra man:sendmail[8] configuration and other MTA configuration files.
-
-|[.filename]#/etc/ppp#
-|Configuration for both user- and kernel-ppp programs.
-
-|[.filename]#/usr/local/etc#
-|Configuration files for installed applications. May contain per-application subdirectories.
-
-|[.filename]#/usr/local/etc/rc.d#
-|man:rc[8] scripts for installed applications.
-
-|[.filename]#/var/db#
-|Automatically generated system-specific database files, such as the package database and the man:locate[1] database.
-|===
-
-=== Hostnames
-
-==== [.filename]#/etc/resolv.conf#
-
-How a FreeBSD system accesses the Internet Domain Name System (DNS) is controlled by man:resolv.conf[5].
-
-The most common entries to [.filename]#/etc/resolv.conf# are:
-
-[.informaltable]
-[cols="1,1", frame="none"]
-|===
-
-|`nameserver`
-|The IP address of a name server the resolver should query. The servers are queried in the order listed with a maximum of three.
-
-|`search`
-|Search list for hostname lookup. This is normally determined by the domain of the local hostname.
+[[acpi-overview]]
+== Power and Resource Management
-|`domain`
-|The local domain name.
-|===
+It is important to utilize hardware resources in an efficient manner.
+Power and resource management allows the operating system to monitor system limits and to possibly run some actions triggered by events related to those limits.
-A typical [.filename]#/etc/resolv.conf# looks like this:
+[[acpi-config]]
+=== ACPI configuration
-[.programlisting]
-....
-search example.com
-nameserver 147.11.1.11
-nameserver 147.11.100.30
-....
+On FreeBSD the management of these resources is managed by the man:acpi[4] kernel device.
[NOTE]
====
-Only one of the `search` and `domain` options should be used.
-====
-
-When using DHCP, man:dhclient[8] usually rewrites [.filename]#/etc/resolv.conf# with information received from the DHCP server.
-
-==== [.filename]#/etc/hosts#
+In FreeBSD the man:acpi[4] driver is loaded by default at system boot.
-[.filename]#/etc/hosts# is a simple text database which works in conjunction with DNS and NIS to provide host name to IP address mappings.
-Entries for local computers connected via a LAN can be added to this file for simplistic naming purposes instead of setting up a man:named[8] server.
-Additionally, [.filename]#/etc/hosts# can be used to provide a local record of Internet names, reducing the need to query external DNS servers for commonly accessed names.
+This driver *cannot be unloaded after boot* because the system bus uses it for various hardware interactions.
+====
-[.programlisting]
-....
-# $FreeBSD$
-#
-#
-# Host Database
-#
-# This file should contain the addresses and aliases for local hosts that
-# share this file. Replace 'my.domain' below with the domainname of your
-# machine.
-#
-# In the presence of the domain name service or NIS, this file may
-# not be consulted at all; see /etc/nsswitch.conf for the resolution order.
-#
-#
-::1 localhost localhost.my.domain
-127.0.0.1 localhost localhost.my.domain
-#
-# Imaginary network.
-#10.0.0.2 myname.my.domain myname
-#10.0.0.3 myfriend.my.domain myfriend
-#
-# According to RFC 1918, you can use the following IP networks for
-# private nets which will never be connected to the Internet:
-#
-# 10.0.0.0 - 10.255.255.255
-# 172.16.0.0 - 172.31.255.255
-# 192.168.0.0 - 192.168.255.255
-#
-# In case you want to be able to connect to the Internet, you need
-# real official assigned numbers. Do not try to invent your own network
-# numbers but instead get one from your network provider (if any) or
-# from your regional registry (ARIN, APNIC, LACNIC, RIPE NCC, or AfriNIC.)
-#
-....
+In addition to man:acpi[4], FreeBSD has several dedicated kernel modules for various ACPI vendor subsystems.
+These modules will add some extra functionality like fan speed, keyboard backlit or screen brightness.
-The format of [.filename]#/etc/hosts# is as follows:
+The list can be obtained by running the following command:
-[.programlisting]
+[source,shell]
....
-[Internet address] [official hostname] [alias1] [alias2] ...
+% ls /boot/kernel | grep acpi
....
-For example:
+The output should be similar to the following:
[.programlisting]
....
-10.0.0.1 myRealHostname.example.com myRealHostname foobar1 foobar2
+acpi_asus.ko
+acpi_asus_wmi.ko
+acpi_dock.ko
+acpi_fujitsu.ko
+acpi_hp.ko
+acpi_ibm.ko
+acpi_panasonic.ko
+acpi_sony.ko
+acpi_toshiba.ko
+acpi_video.ko
+acpi_wmi.ko
+sdhci_acpi.ko
+uacpi.ko
....
-Consult man:hosts[5] for more information.
-
-[[configtuning-sysctl]]
-== Tuning with man:sysctl[8]
-
-man:sysctl[8] is used to make changes to a running FreeBSD system.
-This includes many advanced options of the TCP/IP stack and virtual memory system that can dramatically improve performance for an experienced system administrator.
-Over five hundred system variables can be read and set using man:sysctl[8].
-
-At its core, man:sysctl[8] serves two functions: to read and to modify system settings.
-
-To view all readable variables:
+In the event that, for example, an IBM/Lenovo laptop is used, it will be necessary to load the module man:acpi_ibm[4] by executing the following command:
[source,shell]
....
-% sysctl -a
+# kldload acpi_ibm
....
-To read a particular variable, specify its name:
+And add this line to [.filename]#/boot/loader.conf# to load it at boot:
-[source,shell]
+[.programlisting]
....
-% sysctl kern.maxproc
-kern.maxproc: 1044
+acpi_ibm_load="YES"
....
-To set a particular variable, use the _variable_=_value_ syntax:
+An alternative to the man:acpi_video[4] module is the man:backlight[9] driver.
+It provides a generic way for handling a panel backlight.
+The default GENERIC kernel includes this driver.
+The man:backlight[8] utility can be used to query and adjust the brightness of
+the panel backlight.
+In this example the brightness is decreased by 10%:
[source,shell]
....
-# sysctl kern.maxfiles=5000
-kern.maxfiles: 2088 -> 5000
-....
-
-Settings of sysctl variables are usually either strings, numbers, or booleans, where a boolean is `1` for yes or `0` for no.
-
-To automatically set some variables each time the machine boots, add them to [.filename]#/etc/sysctl.conf#.
-For more information, refer to man:sysctl.conf[5] and <<configtuning-sysctlconf>>.
-
-[[configtuning-sysctlconf]]
-=== [.filename]#sysctl.conf#
-
-The configuration file for man:sysctl[8], [.filename]#/etc/sysctl.conf#, looks much like [.filename]#/etc/rc.conf#.
-Values are set in a `variable=value` form.
-The specified values are set after the system goes into multi-user mode.
-Not all variables are settable in this mode.
-
-For example, to turn off logging of fatal signal exits and prevent users from seeing processes started by other users, the following tunables can be set in [.filename]#/etc/sysctl.conf#:
-
-[.programlisting]
+% backlight decr 10
....
-# Do not log fatal signal exits (e.g., sig 11)
-kern.logsigexit=0
-# Prevent users from seeing information about processes that
-# are being run under another UID.
-security.bsd.see_other_uids=0
-....
+[[cpu-power-management]]
+=== CPU Power Management
-[[sysctl-readonly]]
-=== man:sysctl[8] Read-only
+CPU is the most consuming part of the system.
+Knowing how to improve CPU efficiency is a fundamental part of our system in order to save energy.
-In some cases it may be desirable to modify read-only man:sysctl[8] values, which will require a reboot of the system.
+In order to make proper use of the machine's resources in a correct way, FreeBSD supports technologies such as Intel Turbo Boost, AMD Turbo Core, Intel Speed Shift among others through the use of man:powerd[8] and man:cpufreq[4].
-For instance, on some laptop models the man:cardbus[4] device will not probe memory ranges and will fail with errors similar to:
+The first step will be to obtain the CPU information by executing the following command:
[source,shell]
....
-cbb0: Could not map register memory
-device_probe_and_attach: cbb0 attach returned 12
+% sysctl dev.cpu.0 <.>
....
-The fix requires the modification of a read-only man:sysctl[8] setting.
-Add `hw.pci.allow_unsupported_io_range=1` to [.filename]#/boot/loader.conf# and reboot.
-Now man:cardbus[4] should work properly.
-
-[[configtuning-disk]]
-== Tuning Disks
-
-The following section will discuss various tuning mechanisms and options which may be applied to disk devices.
-In many cases, disks with mechanical parts, such as SCSI drives, will be the bottleneck driving down the overall system performance.
-While a solution is to install a drive without mechanical parts, such as a solid state drive, mechanical drives are not going away anytime in the near future.
-When tuning disks, it is advisable to utilize the features of the man:iostat[8] command to test various changes to the system.
-This command will allow the user to obtain valuable information on system IO.
-
-=== Sysctl Variables
+<.> In this case the `0` digit represents the first core of the CPU.
-==== `vfs.vmiodirenable`
+The output should be similar to the following:
-The `vfs.vmiodirenable` man:sysctl[8] variable may be set to either `0` (off) or `1` (on).
-It is set to `1` by default. This variable controls how directories are cached by the system.
-Most directories are small, using just a single fragment (typically 1 K) in the file system and typically 512 bytes in the buffer cache.
-With this variable turned off, the buffer cache will only cache a fixed number of directories, even if the system has a huge amount of memory.
-When turned on, this man:sysctl[8] allows the buffer cache to use the VM page cache to cache the directories, making all the memory available for caching directories.
-However, the minimum in-core memory used to cache a directory is the physical page size (typically 4 K) rather than 512 bytes.
-Keeping this option enabled is recommended if the system is running any services which manipulate large numbers of files.
-Such services can include web caches, large mail systems, and news systems.
-Keeping this option on will generally not reduce performance, even with the wasted memory, but one should experiment to find out.
-
-==== `vfs.write_behind`
-
-The `vfs.write_behind` man:sysctl[8] variable defaults to `1` (on).
-This tells the file system to issue media writes as full clusters are collected, which typically occurs when writing large sequential files.
-This avoids saturating the buffer cache with dirty buffers when it would not benefit I/O performance.
-However, this may stall processes and under certain circumstances should be turned off.
-
-==== `vfs.hirunningspace`
-
-The `vfs.hirunningspace` man:sysctl[8] variable determines how much outstanding write I/O may be queued to disk controllers system-wide at any given instance.
-The default is usually sufficient, but on machines with many disks, try bumping it up to four or five _megabytes_.
-Setting too high a value which exceeds the buffer cache's write threshold can lead to bad clustering performance.
-Do not set this value arbitrarily high as higher write values may add latency to reads occurring at the same time.
-
-There are various other buffer cache and VM page cache related man:sysctl[8] values.
-Modifying these values is not recommended as the VM system does a good job of automatically tuning itself.
-
-==== `vm.swap_idle_enabled`
-
-The `vm.swap_idle_enabled` man:sysctl[8] variable is useful in large multi-user systems with many active login users and lots of idle processes.
-Such systems tend to generate continuous pressure on free memory reserves.
-Turning this feature on and tweaking the swapout hysteresis (in idle seconds) via `vm.swap_idle_threshold1` and `vm.swap_idle_threshold2` depresses the priority of memory pages associated with idle processes more quickly then the normal pageout algorithm.
-This gives a helping hand to the pageout daemon.
-Only turn this option on if needed, because the tradeoff is essentially pre-page memory sooner rather than later which eats more swap and disk bandwidth.
-In a small system this option will have a determinable effect, but in a large system that is already doing moderate paging, this option allows the VM system to stage whole processes into and out of memory easily.
-
-==== `hw.ata.wc`
-
-Turning off IDE write caching reduces write bandwidth to IDE disks, but may sometimes be necessary due to data consistency issues introduced by hard drive vendors.
-The problem is that some IDE drives lie about when a write completes.
-With IDE write caching turned on, IDE hard drives write data to disk out of order and will sometimes delay writing some blocks indefinitely when under heavy disk load.
-A crash or power failure may cause serious file system corruption.
-Check the default on the system by observing the `hw.ata.wc` man:sysctl[8] variable.
-If IDE write caching is turned off, one can set this read-only variable to `1` in [.filename]#/boot/loader.conf# in order to enable it at boot time.
-
-For more information, refer to man:ata[4].
-
-==== `SCSI_DELAY` (`kern.cam.scsi_delay`)
-
-The `SCSI_DELAY` kernel configuration option may be used to reduce system boot times.
-The defaults are fairly high and can be responsible for `15` seconds of delay in the boot process.
-Reducing it to `5` seconds usually works with modern drives.
-The `kern.cam.scsi_delay` boot time tunable should be used.
-The tunable and kernel configuration option accept values in terms of _milliseconds_ and _not seconds_.
-
-[[soft-updates]]
-=== Soft Updates
-
-To fine-tune a file system, use man:tunefs[8].
-This program has many different options.
-To toggle Soft Updates on and off, use:
-
-[source,shell]
+[.programlisting]
....
-# tunefs -n enable /filesystem
-# tunefs -n disable /filesystem
-....
-
-A file system cannot be modified with man:tunefs[8] while it is mounted.
-A good time to enable Soft Updates is before any partitions have been mounted, in single-user mode.
-
-Soft Updates is recommended for UFS file systems as it drastically improves meta-data performance, mainly file creation and deletion, through the use of a memory cache.
-There are two downsides to Soft Updates to be aware of.
-First, Soft Updates guarantee file system consistency in the case of a crash, but could easily be several seconds or even a minute behind updating the physical disk.
-If the system crashes, unwritten data may be lost.
-Secondly, Soft Updates delay the freeing of file system blocks.
-If the root file system is almost full, performing a major update, such as `make installworld`, can cause the file system to run out of space and the update to fail.
-
-==== More Details About Soft Updates
-
-Meta-data updates are updates to non-content data like inodes or directories.
-There are two traditional approaches to writing a file system's meta-data back to disk.
-
-Historically, the default behavior was to write out meta-data updates synchronously.
-If a directory changed, the system waited until the change was actually written to disk.
-The file data buffers (file contents) were passed through the buffer cache and backed up to disk later on asynchronously.
-The advantage of this implementation is that it operates safely.
-If there is a failure during an update, meta-data is always in a consistent state.
-A file is either created completely or not at all.
-If the data blocks of a file did not find their way out of the buffer cache onto the disk by the time of the crash, man:fsck[8] recognizes this and repairs the file system by setting the file length to `0`.
-Additionally, the implementation is clear and simple.
-The disadvantage is that meta-data changes are slow.
-For example, `rm -r` touches all the files in a directory sequentially, but each directory change will be written synchronously to the disk.
-This includes updates to the directory itself, to the inode table, and possibly to indirect blocks allocated by the file.
-Similar considerations apply for unrolling large hierarchies using `tar -x`.
-
-The second approach is to use asynchronous meta-data updates.
-This is the default for a UFS file system mounted with `mount -o async`.
-Since all meta-data updates are also passed through the buffer cache, they will be intermixed with the updates of the file content data.
-The advantage of this implementation is there is no need to wait until each meta-data update has been written to disk, so all operations which cause huge amounts of meta-data updates work much faster than in the synchronous case.
-This implementation is still clear and simple, so there is a low risk for bugs creeping into the code.
-The disadvantage is that there is no guarantee for a consistent state of the file system
-If there is a failure during an operation that updated large amounts of meta-data, like a power failure or someone pressing the reset button, the file system will be left in an unpredictable state.
-There is no opportunity to examine the state of the file system when the system comes up again as the data blocks of a file could already have been written to the disk while the updates of the inode table or the associated directory were not.
-It is impossible to implement a man:fsck[8] which is able to clean up the resulting chaos because the necessary information is not available on the disk.
-If the file system has been damaged beyond repair, the only choice is to reformat it and restore from backup.
-
-The usual solution for this problem is to implement _dirty region logging_, which is also referred to as _journaling_.
-Meta-data updates are still written synchronously, but only into a small region of the disk.
-Later on, they are moved to their proper location.
-Since the logging area is a small, contiguous region on the disk, there are no long distances for the disk heads to move, even during heavy operations, so these operations are quicker than synchronous updates.
-Additionally, the complexity of the implementation is limited, so the risk of bugs being present is low.
-A disadvantage is that all meta-data is written twice, once into the logging region and once to the proper location, so performance "pessimization" might result.
-On the other hand, in case of a crash, all pending meta-data operations can be either quickly rolled back or completed from the logging area after the system comes up again, resulting in a fast file system startup.
-
-Kirk McKusick, the developer of Berkeley FFS, solved this problem with Soft Updates.
-All pending meta-data updates are kept in memory and written out to disk in a sorted sequence ("ordered meta-data updates").
-This has the effect that, in case of heavy meta-data operations, later updates to an item "catch" the earlier ones which are still in memory and have not already been written to disk.
-All operations are generally performed in memory before the update is written to disk and the data blocks are sorted according to their position so that they will not be on the disk ahead of their meta-data.
-If the system crashes, an implicit "log rewind" causes all operations which were not written to the disk appear as if they never happened.
-A consistent file system state is maintained that appears to be the one of 30 to 60 seconds earlier.
-The algorithm used guarantees that all resources in use are marked as such in their blocks and inodes.
-After a crash, the only resource allocation error that occurs is that resources are marked as "used" which are actually "free".
-man:fsck[8] recognizes this situation, and frees the resources that are no longer used.
-It is safe to ignore the dirty state of the file system after a crash by forcibly mounting it with `mount -f`.
-In order to free resources that may be unused, man:fsck[8] needs to be run at a later time.
-This is the idea behind the _background man:fsck[8]_: at system startup time, only a _snapshot_ of the file system is recorded and man:fsck[8] is run afterwards.
-All file systems can then be mounted "dirty", so the system startup proceeds in multi-user mode.
-Then, background man:fsck[8] is scheduled for all file systems where this is required, to free resources that may be unused.
-File systems that do not use Soft Updates still need the usual foreground man:fsck[8].
-
-The advantage is that meta-data operations are nearly as fast as asynchronous updates and are faster than _logging_, which has to write the meta-data twice.
-The disadvantages are the complexity of the code, a higher memory consumption, and some idiosyncrasies.
-After a crash, the state of the file system appears to be somewhat "older".
-In situations where the standard synchronous approach would have caused some zero-length files to remain after the man:fsck[8], these files do not exist at all with Soft Updates because neither the meta-data nor the file contents have been written to disk.
-Disk space is not released until the updates have been written to disk, which may take place some time after running man:rm[1].
-This may cause problems when installing large amounts of data on a file system that does not have enough free space to hold all the files twice.
-
-[[configtuning-kernel-limits]]
-== Tuning Kernel Limits
-
-[[file-process-limits]]
-=== File/Process Limits
-
-[[kern-maxfiles]]
-==== `kern.maxfiles`
-
-The `kern.maxfiles` man:sysctl[8] variable can be raised or lowered based upon system requirements.
-This variable indicates the maximum number of file descriptors on the system.
-When the file descriptor table is full, `file: table is full` will show up repeatedly in the system message buffer, which can be viewed using man:dmesg[8].
-
-Each open file, socket, or fifo uses one file descriptor.
-A large-scale production server may easily require many thousands of file descriptors, depending on the kind and number of services running concurrently.
-
-In older FreeBSD releases, the default value of `kern.maxfiles` is derived from `maxusers` in the kernel configuration file.
-`kern.maxfiles` grows proportionally to the value of `maxusers`.
-When compiling a custom kernel, consider setting this kernel configuration option according to the use of the system.
-From this number, the kernel is given most of its pre-defined limits.
-Even though a production machine may not have 256 concurrent users, the resources needed may be similar to a high-scale web server.
-
-The read-only man:sysctl[8] variable `kern.maxusers` is automatically sized at boot based on the amount of memory available in the system, and may be determined at run-time by inspecting the value of `kern.maxusers`.
-Some systems require larger or smaller values of `kern.maxusers` and values of `64`, `128`, and `256` are not uncommon.
-Going above `256` is not recommended unless a huge number of file descriptors is needed.
-Many of the tunable values set to their defaults by `kern.maxusers` may be individually overridden at boot-time or run-time in [.filename]#/boot/loader.conf#.
-Refer to man:loader.conf[5] and [.filename]#/boot/defaults/loader.conf# for more details and some hints.
-
-In older releases, the system will auto-tune `maxusers` if it is set to `0`. footnote:[The auto-tuning algorithm sets maxusers equal to the amount of memory in the system, with a minimum of 32, and a maximum of 384.].
-When setting this option, set `maxusers` to at least `4`, especially if the system runs Xorg or is used to compile software.
-The most important table set by `maxusers` is the maximum number of processes, which is set to `20 + 16 * maxusers`.
-If `maxusers` is set to `1`, there can only be `36` simultaneous processes, including the `18` or so that the system starts up at boot time and the `15` or so used by Xorg.
-Even a simple task like reading a manual page will start up nine processes to filter, decompress, and view it.
-Setting `maxusers` to `64` allows up to `1044` simultaneous processes, which should be enough for nearly all uses.
-If, however, the error is displayed when trying to start another program, or a server is running with a large number of simultaneous users, increase the number and rebuild.
+dev.cpu.0.cx_method: C1/mwait/hwc C2/mwait/hwc C3/mwait/hwc/bma
+dev.cpu.0.cx_usage_counters: 3507294 0 0
+dev.cpu.0.cx_usage: 100.00% 0.00% 0.00% last 3804us
+dev.cpu.0.cx_lowest: C3 <1>
+dev.cpu.0.cx_supported: C1/1/1 C2/2/1 C3/3/57 <2>
+dev.cpu.0.freq_levels: 2267/35000 2266/35000 1600/15000 800/12000 <3>
+dev.cpu.0.freq: 1600 <4>
+dev.cpu.0.temperature: 40.0C <5>
+dev.cpu.0.coretemp.throttle_log: 0
+dev.cpu.0.coretemp.tjmax: 105.0C
+dev.cpu.0.coretemp.resolution: 1
+dev.cpu.0.coretemp.delta: 65
+dev.cpu.0.%parent: acpi0
+dev.cpu.0.%pnpinfo: _HID=none _UID=0 _CID=none
+dev.cpu.0.%location: handle=\_PR_.CPU0
+dev.cpu.0.%driver: cpu
+dev.cpu.0.%desc: ACPI CPU
+....
+
+<1> Lowest Cx state to use for idling the CPU.
+<2> CPU supported Cx states.
+<3> Currently available levels for the CPU (frequency/power usage).
+<4> Current active CPU frequency in MHz.
+<5> Current temperature of the CPU.
[NOTE]
====
-`maxusers` does _not_ limit the number of users which can log into the machine.
-It instead sets various table sizes to reasonable values considering the maximum number of users on the system and how many processes each user will be running.
+If the temperature information is not displayed, load the man:coretemp[4] module.
+In case of using an AMD CPU, load the man:amdtemp[4] module.
====
-==== `kern.ipc.soacceptqueue`
-
-The `kern.ipc.soacceptqueue` man:sysctl[8] variable limits the size of the listen queue for accepting new `TCP` connections.
-The default value of `128` is typically too low for robust handling of new connections on a heavily loaded web server.
-For such environments, it is recommended to increase this value to `1024` or higher.
-A service such as man:sendmail[8], or Apache may itself limit the listen queue size, but will often have a directive in its configuration file to adjust the queue size.
-Large listen queues do a better job of avoiding Denial of Service (DoS) attacks.
-
-[[nmbclusters]]
-=== Network Limits
-
-The `NMBCLUSTERS` kernel configuration option dictates the amount of network Mbufs available to the system.
-A heavily-trafficked server with a low number of Mbufs will hinder performance.
-Each cluster represents approximately 2 K of memory, so a value of `1024` represents `2` megabytes of kernel memory reserved for network buffers.
-A simple calculation can be done to figure out how many are needed.
-A web server which maxes out at `1000` simultaneous connections where each connection uses a 6 K receive and 16 K send buffer, requires approximately 32 MB worth of network buffers to cover the web server.
-A good rule of thumb is to multiply by `2`, so 2x32 MB / 2 KB = 64 MB / 2 kB = `32768`.
-Values between `4096` and `32768` are recommended for machines with greater amounts of memory.
-Never specify an arbitrarily high value for this parameter as it could lead to a boot time crash.
-To observe network cluster usage, use `-m` with man:netstat[1].
-
-The `kern.ipc.nmbclusters` loader tunable should be used to tune this at boot time.
-Only older versions of FreeBSD will require the use of the `NMBCLUSTERS` kernel man:config[8] option.
+Once the CPU information is available the easiest way to configure power saving is to let man:powerd[8] take over.
-For busy servers that make extensive use of the man:sendfile[2] system call, it may be necessary to increase the number of man:sendfile[2] buffers via the `NSFBUFS` kernel configuration option or by setting its value in [.filename]#/boot/loader.conf# (see man:loader[8] for details).
-A common indicator that this parameter needs to be adjusted is when processes are seen in the `sfbufa` state.
-The man:sysctl[8] variable `kern.ipc.nsfbufs` is read-only.
-This parameter nominally scales with `kern.maxusers`, however it may be necessary to tune accordingly.
-
-[IMPORTANT]
-====
-Even though a socket has been marked as non-blocking, calling man:sendfile[2] on the non-blocking socket may result in the man:sendfile[2] call blocking until enough ``struct sf_buf``'s are made available.
-====
-
-==== `net.inet.ip.portrange.*`
-
-The `net.inet.ip.portrange.*` man:sysctl[8] variables control the port number ranges automatically bound to `TCP` and `UDP` sockets.
-There are three ranges: a low range, a default range, and a high range.
-Most network programs use the default range which is controlled by `net.inet.ip.portrange.first` and `net.inet.ip.portrange.last`, which default to `1024` and `5000`, respectively.
-Bound port ranges are used for outgoing connections and it is possible to run the system out of ports under certain circumstances.
-This most commonly occurs when running a heavily loaded web proxy.
-The port range is not an issue when running a server which handles mainly incoming connections, such as a web server, or has a limited number of outgoing connections, such as a mail relay.
-For situations where there is a shortage of ports, it is recommended to increase `net.inet.ip.portrange.last` modestly.
-A value of `10000`, `20000` or `30000` may be reasonable. Consider firewall effects when changing the port range.
-Some firewalls may block large ranges of ports, usually low-numbered ports, and expect systems to use higher ranges of ports for outgoing connections.
-For this reason, it is not recommended that the value of `net.inet.ip.portrange.first` be lowered.
-
-=== Virtual Memory
-
-==== `kern.maxvnodes`
-
-A vnode is the internal representation of a file or directory.
-Increasing the number of vnodes available to the operating system reduces disk I/O.
-Normally, this is handled by the operating system and does not need to be changed.
-In some cases where disk I/O is a bottleneck and the system is running out of vnodes, this setting needs to be increased.
-The amount of inactive and free RAM will need to be taken into account.
-
-To see the current number of vnodes in use:
+Enable man:powerd[8] service in [.filename]#/etc/rc.conf# to start at system boot:
[source,shell]
....
-# sysctl vfs.numvnodes
-vfs.numvnodes: 91349
+# sysrc powerd_enable=YES
....
-To see the maximum vnodes:
+It will also be necessary to indicate certain parameters to man:powerd[8] to tell it how to manage the state of the CPU executing the following command:
[source,shell]
....
-# sysctl kern.maxvnodes
-kern.maxvnodes: 100000
+# sysrc powerd_flags="-a hiadaptive -i 25 -r 85 -N"
....
-If the current vnode usage is near the maximum, try increasing `kern.maxvnodes` by a value of `1000`.
-Keep an eye on the number of `vfs.numvnodes`.
-If it climbs up to the maximum again, `kern.maxvnodes` will need to be increased further.
-Otherwise, a shift in memory usage as reported by man:top[1] should be visible and more memory should be active.
+. `-a`: Selects the mode to use while on AC power.
+. `hiadaptive`: Operation mode. More info at man:powerd[8].
+. `-i`: Specifies the CPU load percent level when adaptive mode should begin to degrade performance to save power.
+. `-r`: Specifies the CPU load percent level where adaptive mode should consider the CPU running and increase performance.
+. `-N`: Treat "nice" time as idle for the purpose of load calculation; i.e., do not increase the CPU frequency if the CPU is only busy with "nice" processes.
-[[adding-swap-space]]
-== Adding Swap Space
+And then enable the service executing the following command:
-Sometimes a system requires more swap space.
-This section describes two methods to increase swap space: adding swap to an existing partition or new hard drive, and creating a swap file on an existing partition.
+[source,shell]
+....
+# service powerd start
+....
-For information on how to encrypt swap space, which options exist, and why it should be done, refer to crossref:disks[swap-encrypting,“Encrypting Swap”].
+[[cpufreq]]
+=== CPU Frequency Control
-[[new-drive-swap]]
-=== Swap on a New Hard Drive or Existing Partition
+FreeBSD includes a generic man:cpufreq[4] driver to allow the administrator, or software such as man:powerd[8] and package:sysutils/powerdxx[], to manage the frequency of the CPU to achieve the desired balance between performance and economy.
+A lower setting will save power while reducing the heat generated by the CPU.
+A higher setting will increase performance at the cost of using additional power and generating more heat.
+
+[[est]]
+=== Intel(R) Enhanced Speed Step(TM)
-Adding a new hard drive for swap gives better performance than using a partition on an existing drive.
-Setting up partitions and hard drives is explained in crossref:disks[disks-adding,“Adding Disks”] while crossref:bsdinstall[configtuning-initial,“Designing the Partition Layout”] discusses partition layouts and swap partition size considerations.
+The Intel(R) Enhanced Speed Step(TM) driver, man:est[4], replaces the generic man:cpufreq[4] driver for CPUs that provide this feature.
+The CPU frequency can be statically adjusted using man:sysctl[8], or with the `/etc/rc.d/power_profile` startup script.
+Additional software, such as man:powerd[8] or package:sysutils/powerdxx[], can be used to automatically adjust the CPU frequency based on processor utilization.
-Use `swapon` to add a swap partition to the system.
-For example:
+Each supported frequency, along with its expected power consumption, can be listed by examining the man:sysctl[3] tree:
[source,shell]
....
-# swapon /dev/ada1s1b
+# sysctl dev.cpufreq.0.freq_driver dev.cpu.0.freq_levels dev.cpu.0.freq
....
-[WARNING]
-====
-
-It is possible to use any partition not currently mounted, even if it already contains data.
-Using `swapon` on a partition that contains data will overwrite and destroy that data.
-Make sure that the partition to be added as swap is really the intended partition before running `swapon`.
-====
-
-To automatically add this swap partition on boot, add an entry to [.filename]#/etc/fstab#:
+The output should be similar to the following:
[.programlisting]
....
-/dev/ada1s1b none swap sw 0 0
+dev.cpufreq.0.freq_driver: est0
+dev.cpu.0.freq_levels: 3001/53000 3000/53000 2900/50301 2700/46082 2600/43525 2400/39557 2300/37137 2100/33398 2000/31112 1800/27610 1700/25455 1500/22171 1400/20144 1200/17084 1100/15181 900/12329 800/10550
+dev.cpu.0.freq: 800
....
-See man:fstab[5] for an explanation of the entries in [.filename]#/etc/fstab#.
-More information about `swapon` can be found in man:swapon[8].
+A frequency 1 MHz higher than the maximum frequency of the CPU indicates the Intel(R) Turbo Boost(TM) feature.
-[[create-swapfile]]
-=== Creating a Swap File
+[[hwpstate_intel]]
+=== Intel Speed Shift(TM)
-These examples create a 512M swap file called [.filename]#/usr/swap0# instead of using a partition.
+Users running newer Intel(R) CPUs may find some differences in dynamic frequency control when upgrading to FreeBSD 13.
+A new driver for the Intel(R) Speed Shift(TM) feature set, available on certain SKUs, exposes the ability for the hardware to dynamically vary the core frequencies, including on a per core basis.
+FreeBSD 13 comes with the man:hwpstate_intel[4] driver to automatically enable Speed Shift(TM) control on equipped CPUs, replacing the older Enhanced Speed Step(TM) man:est[4] driver.
+The man:sysctl[8] `dev.cpufreq.%d.freq_driver` will indicate if the system is using Speed Shift.
-Using swap files requires that the module needed by man:md[4] has either been built into the kernel or has been loaded before swap is enabled.
-See crossref:kernelconfig[kernelconfig,Configuring the FreeBSD Kernel] for information about building a custom kernel.
+To determine which frequency control driver is being used, examining the `dev.cpufreq.0.freq_driver` oid.
-[[swapfile-10-and-later]]
-.Creating a Swap File
-[example]
-====
-[.procedure]
-. Create the swap file:
-+
[source,shell]
....
-# dd if=/dev/zero of=/usr/swap0 bs=1m count=512
+# sysctl dev.cpufreq.0.freq_driver
....
-. Set the proper permissions on the new file:
-+
-[source,shell]
-....
-# chmod 0600 /usr/swap0
-....
+The output should be similar to the following:
-. Inform the system about the swap file by adding a line to [.filename]#/etc/fstab#:
-+
[.programlisting]
....
-md none swap sw,file=/usr/swap0,late 0 0
+dev.cpufreq.0.freq_driver: hwpstate_intel0
....
-+
-. Swap space will be added on system startup. To add swap space immediately, use man:swapon[8]:
-+
+
+This indicates that the new man:hwpstate_intel[4] driver is in use.
+On such systems, the oid `dev.cpu.%d.freq_levels` will show only the maximum CPU frequency, and will indicate a power consumption level of `-1`.
+
+The current CPU frequency can be determined by examining the `dev.cpu.%d.freq` oid.
+
[source,shell]
....
-# swapon -aL
+# sysctl dev.cpu.0.freq_levels dev.cpu.0.freq
....
-====
-
-[[acpi-overview]]
-== Power and Resource Management
-
-It is important to utilize hardware resources in an efficient manner.
-Power and resource management allows the operating system to monitor system limits and to possibly provide an alert if the system temperature increases unexpectedly.
-An early specification for providing power management was the Advanced Power Management (APM) facility.
-APM controls the power usage of a system based on its activity.
-However, it was difficult and inflexible for operating systems to manage the power usage and thermal properties of a system.
-The hardware was managed by the BIOS and the user had limited configurability and visibility into the power management settings.
-The APMBIOS is supplied by the vendor and is specific to the hardware platform.
-An APM driver in the operating system mediates access to the APM Software Interface, which allows management of power levels.
-
-There are four major problems in APM.
-First, power management is done by the vendor-specific BIOS, separate from the operating system.
-For example, the user can set idle-time values for a hard drive in the APMBIOS so that, when exceeded, the BIOS spins down the hard drive without the consent of the operating system.
-Second, the APM logic is embedded in the BIOS, and it operates outside the scope of the operating system.
-This means that users can only fix problems in the APMBIOS by flashing a new one into the ROM, which is a dangerous procedure with the potential to leave the system in an unrecoverable state if it fails.
-Third, APM is a vendor-specific technology, meaning that there is a lot of duplication of efforts and bugs found in one vendor's BIOS may not be solved in others.
-Lastly, the APMBIOS did not have enough room to implement a sophisticated power policy or one that can adapt well to the purpose of the machine.
-
-The Plug and Play BIOS (PNPBIOS) was unreliable in many situations.
-PNPBIOS is 16-bit technology, so the operating system has to use 16-bit emulation in order to interface with PNPBIOS methods.
-FreeBSD provides an APM driver as APM should still be used for systems manufactured at or before the year 2000.
-The driver is documented in man:apm[4].
-
-The successor to APM is the Advanced Configuration and Power Interface (ACPI).
-ACPI is a standard written by an alliance of vendors to provide an interface for hardware resources and power management.
-It is a key element in _Operating System-directed configuration and Power Management_ as it provides more control and flexibility to the operating system.
-
-This chapter demonstrates how to configure ACPI on FreeBSD.
-It then offers some tips on how to debug ACPI and how to submit a problem report containing debugging information so that developers can diagnosis and fix ACPI issues.
+The output should be similar to the following:
-[[acpi-config]]
-=== Configuring ACPI
+[.programlisting]
+....
+dev.cpu.0.freq_levels: 3696/-1
+dev.cpu.0.freq: 898
+....
-In FreeBSD the man:acpi[4] driver is loaded by default at system boot and should _not_ be compiled into the kernel.
-This driver cannot be unloaded after boot because the system bus uses it for various hardware interactions.
-However, if the system is experiencing problems, ACPI can be disabled altogether by rebooting after setting `hint.acpi.0.disabled="1"` in [.filename]#/boot/loader.conf# or by setting this variable at the loader prompt, as described in crossref:boot[boot-loader,“Stage Three”].
+For more information, including on how to balance performance and energy use, and on how to disable this driver, refer to the man page man:hwpstate_intel[4].
[NOTE]
====
-ACPI and APM cannot coexist and should be used separately.
-The last one to load will terminate if the driver notices the other is running.
+Users accustomed to using man:powerd[8] or package:sysutils/powerdxx[] will find these utilities have been superseded by the man:hwpstate_intel[4] driver and no longer work as expected.
====
-ACPI can be used to put the system into a sleep mode with `acpiconf`, the `-s` flag, and a number from `1` to `5`.
-Most users only need `1` (quick suspend to RAM) or `3` (suspend to RAM).
-Option `5` performs a soft-off which is the same as running `halt -p`.
+[[graphics-card-power-management]]
+=== Graphics Card Power Management
-The man:acpi_video[4] driver uses link:https://uefi.org/specs/ACPI/6.4/Apx_B_Video_Extensions/Apx_B_Video_Extensions.html[ACPI Video Extensions] to control display switching and backlight brightness.
-It must be loaded after any of the DRM kernel modules.
-After loading the driver, the kbd:[Fn] brightness keys will change the brightness of the screen.
-It is possible to check the ACPI events by inspecting [.filename]#/var/run/devd.pipe#:
+Graphics cards have become a fundamental part of computing in recent years.
+Some graphics cards may have excessive power consumption.
+FreeBSD allows certain configurations to improve power consumption.
-[source,shell]
-...
-# cat /var/run/devd.pipe
-!system=ACPI subsystem=Video type=brightness notify=62
-!system=ACPI subsystem=Video type=brightness notify=63
-!system=ACPI subsystem=Video type=brightness notify=64
-...
+In case of using a Intel(R) graphics card with the package:graphics/drm-kmod[] driver these options can be added to [.filename]#/boot/loader.conf#:
-Other options are available using `sysctl`.
-Refer to man:acpi[4] and man:acpiconf[8] for more information.
+[.programlisting]
+....
+compat.linuxkpi.fastboot=1 <.>
+compat.linuxkpi.enable_dc=2 <.>
+compat.linuxkpi.enable_fbc=1 <.>
+....
-[[ACPI-comprob]]
-=== Common Problems
+<.> Try to skip unnecessary mode sets at boot time.
+<.> Enable power-saving display C-states.
+<.> Enable frame buffer compression for power savings
-ACPI is present in all modern computers that conform to the ia32 (x86) and amd64 (AMD) architectures.
-The full standard has many features including CPU performance management, power planes control, thermal zones, various battery systems, embedded controllers, and bus enumeration.
-Most systems implement less than the full standard.
-For instance, a desktop system usually only implements bus enumeration while a laptop might have cooling and battery management support as well.
-Laptops also have suspend and resume, with their own associated complexity.
+=== Suspend/Resume
-An ACPI-compliant system has various components.
-The BIOS and chipset vendors provide various fixed tables, such as FADT, in memory that specify things like the APIC map (used for SMP), config registers, and simple configuration values.
-Additionally, a bytecode table, the Differentiated System Description Table DSDT, specifies a tree-like name space of devices and methods.
+The suspend/resume function allows the machine to be kept in a state in which there is no a big energy consumption and allows the system to be resumed without having to lose the state of the running programs.
-The ACPI driver must parse the fixed tables, implement an interpreter for the bytecode, and modify device drivers and the kernel to accept information from the ACPI subsystem.
-For FreeBSD, Intel(R) has provided an interpreter (ACPI-CA) that is shared with Linux(R) and NetBSD.
-The path to the ACPI-CA source code is [.filename]#src/sys/contrib/dev/acpica#.
-The glue code that allows ACPI-CA to work on FreeBSD is in [.filename]#src/sys/dev/acpica/Osd#.
-Finally, drivers that implement various ACPI devices are found in [.filename]#src/sys/dev/acpica#.
+[NOTE]
+====
+In order for the suspend/resume functionality to work correctly the graphics drivers must be loaded on the system.
+In non-KMS-supported graphics cards man:sc[4] must be used not to break the suspend/resume functionality.
-For ACPI to work correctly, all the parts have to work correctly.
-Here are some common problems, in order of frequency of appearance, and some possible workarounds or fixes.
-If a fix does not resolve the issue, refer to <<ACPI-submitdebug>> for instructions on how to submit a bug report.
+More information about which driver to use and how to configure it can be found at the crossref:x11[x11, The X Window System chapter].
+====
-==== Mouse Issues
+man:acpi[4] supports the next list of sleep states:
-In some cases, resuming from a suspend operation will cause the mouse to fail.
-A known work around is to add `hint.psm.0.flags="0x3000"` to [.filename]#/boot/loader.conf#.
+.Supported Sleep States
+[options="header", cols="1,1"]
+|===
-==== Suspend/Resume
+|S1
+|Quick suspend to RAM. The CPU enters a lower power state, but most peripherals are left running.
-ACPI has three suspend to RAM (STR) states, `S1`-`S3`, and one suspend to disk state (STD), called `S4`.
-STD can be implemented in two separate ways.
-The ``S4``BIOS is a BIOS-assisted suspend to disk and ``S4``OS is implemented entirely by the operating system.
-The normal state the system is in when plugged in but not powered up is "soft off" (`S5`).
+|S2
+|Lower power state than S1, but with the same basic characteristics. Not supported by many systems.
-Use `sysctl hw.acpi` to check for the suspend-related items.
-These example results are from a Thinkpad:
+|S3 (Sleep mode)
+|Suspend to RAM. Most devices are powered off, and the system stops running except for memory refresh.
-[source,shell]
-....
-hw.acpi.supported_sleep_state: S3 S4 S5
-hw.acpi.s4bios: 0
-....
+|S4 (Hibernation)
+|Suspend to disk. All devices are powered off, and the system stops running. When resuming, the system starts as if from a cold power on. *Not yet supported by FreeBSD*.
+
+|S5
+|System shuts down cleanly and powers off.
-Use `acpiconf -s` to test `S3`, `S4`, and `S5`.
-An `s4bios` of one (`1`) indicates ``S4``BIOS support instead of `S4` operating system support.
+|===
-When testing suspend/resume, start with `S1`, if supported.
-This state is most likely to work since it does not require much driver support.
-No one has implemented `S2`, which is similar to `S1`.
-Next, try `S3`.
-This is the deepest STR state and requires a lot of driver support to properly reinitialize the hardware.
+[[configure-suspend-resume]]
+==== Configuring Suspend/Resume
-A common problem with suspend/resume is that many device drivers do not save, restore, or reinitialize their firmware, registers, or device memory properly.
-As a first attempt at debugging the problem, try:
+The first step will be to know which type of sleep states supports the hardware we are using executing the following command:
[source,shell]
....
-# sysctl debug.bootverbose=1
-# sysctl debug.acpi.suspend_bounce=1
-# acpiconf -s 3
+% sysctl hw.acpi.supported_sleep_state
....
-This test emulates the suspend/resume cycle of all device drivers without actually going into `S3` state.
-In some cases, problems such as losing firmware state, device watchdog time out, and retrying forever, can be captured with this method.
-Note that the system will not really enter `S3` state, which means devices may not lose power, and many will work fine even if suspend/resume methods are totally missing, unlike real `S3` state.
-
-If the previous test worked, on a laptop it is possible to configure the system to suspend into `S3` on lid close and resume when it is open back again:
+The output should be similar to the following:
-[source,shell]
+[.programlisting]
....
-# sysctl hw.acpi.lid_switch_state=S3
+hw.acpi.supported_sleep_state: S3 S4 S5
....
-This change can be made persistent across reboots:
+[WARNING]
+====
+As stated above FreeBSD does *not* yet support the `S4` state.
+====
+
+man:acpiconf[8] can be used to check if the `S3` state works correctly by running the following command, if it succeeds, the screen should go black and the machine will turn off:
[source,shell]
....
-# echo 'hw.acpi.lid_switch_state=S3' >> /etc/sysctl.conf
+# acpiconf -s 3
....
-Harder cases require additional hardware, such as a serial port and cable for debugging through a serial console, a Firewire port and cable for using man:dcons[4], and kernel debugging skills.
+In the vast majority of cases the Suspend/Resume functionality wants to be used on a laptop.
-To help isolate the problem, unload as many drivers as possible.
-If it works, narrow down which driver is the problem by loading drivers until it fails again.
-Typically, binary drivers like [.filename]#nvidia.ko#, display drivers, and USB will have the most problems while Ethernet interfaces usually work fine.
-If drivers can be properly loaded and unloaded, automate this by putting the appropriate commands in [.filename]#/etc/rc.suspend# and [.filename]#/etc/rc.resume#.
-Try setting `hw.acpi.reset_video` to `1` if the display is messed up after resume.
-Try setting longer or shorter values for `hw.acpi.sleep_delay` to see if that helps.
+FreeBSD can be configured to enter the `S3` state when closing the lid by adding the following line to the [.filename]#/etc/sysctl.conf# file.
-Try loading a recent Linux(R) distribution to see if suspend/resume works on the same hardware.
-If it works on Linux(R), it is likely a FreeBSD driver problem.
-Narrowing down which driver causes the problem will assist developers in fixing the problem.
-Since the ACPI maintainers rarely maintain other drivers, such as sound or ATA, any driver problems should also be posted to the {freebsd-current} and mailed to the driver maintainer.
-Advanced users can include debugging man:printf[3]s in a problematic driver to track down where in its resume function it hangs.
+[.programlisting]
+....
+hw.acpi.lid_switch_state=S3
+....
-Finally, try disabling ACPI and enabling APM instead.
-If suspend/resume works with APM, stick with APM, especially on older hardware (pre-2000).
-It took vendors a while to get ACPI support correct and older hardware is more likely to have BIOS problems with ACPI.
+[[troubleshooting-suspend-resume]]
+==== Troubleshooting in Suspend/Resume
-==== System Hangs
+A lot of effort has been made to make the Suspend and Resume functions work properly and in the best way on FreeBSD.
+But currently the Suspend and Resume functions only work properly on some specific laptops.
-Most system hangs are a result of lost interrupts or an interrupt storm.
-Chipsets may have problems based on boot, how the BIOS configures interrupts before correctness of the APIC (MADT) table, and routing of the System Control Interrupt (SCI).
+Some checks can be done in case it doesn't work properly.
-Interrupt storms can be distinguished from lost interrupts by checking the output of `vmstat -i` and looking at the line that has `acpi0`.
-If the counter is increasing at more than a couple per second, there is an interrupt storm.
-If the system appears hung, try breaking to DDB (kbd:[CTRL+ALT+ESC] on console) and type `show interrupts`.
+In some cases it is enough to turn off the bluetooth.
+In others it is enough loading the correct driver for the graphics card, etc.
-When dealing with interrupt problems, try disabling APIC support with `hint.apic.0.disabled="1"` in [.filename]#/boot/loader.conf#.
+In case it doesn't work correctly, some tips can be found on the FreeBSD Wiki in the section link:https://wiki.freebsd.org/SuspendResume[Suspend/Resume].
-==== Panics
+[[adding-swap-space]]
+== Adding Swap Space
-Panics are relatively rare for ACPI and are the top priority to be fixed.
-The first step is to isolate the steps to reproduce the panic, if possible, and get a backtrace.
-Follow the advice for enabling `options DDB` and setting up a serial console in crossref:serialcomms[serialconsole-ddb,“Entering the DDB Debugger from the Serial Line”] or setting up a dump partition.
-To get a backtrace in DDB, use `tr`.
-When handwriting the backtrace, get at least the last five and the top five lines in the trace.
+Sometimes a FreeBSD system requires more swap space.
+This section describes two methods to increase swap space: adding swap to an existing partition or new hard drive, and creating a swap file on an existing file system.
-Then, try to isolate the problem by booting with ACPI disabled.
-If that works, isolate the ACPI subsystem by using various values of `debug.acpi.disable`.
-See man:acpi[4] for some examples.
+For information on how to encrypt swap space, which options exist, and why it should be done, refer to crossref:disks[swap-encrypting,“Encrypting Swap”].
-==== System Powers Up After Suspend or Shutdown
+[[new-drive-swap]]
+=== Swap on a New Hard Drive or Existing Partition
-First, try setting `hw.acpi.disable_on_poweroff="0"` in [.filename]#/boot/loader.conf#.
-This keeps ACPI from disabling various events during the shutdown process.
-Some systems need this value set to `1` (the default) for the same reason.
-This usually fixes the problem of a system powering up spontaneously after a suspend or poweroff.
+Adding a new drive for swap gives better performance than using a partition on an existing drive.
+Setting up partitions and drives is explained in crossref:disks[disks-adding,"Adding Disks"] while crossref:bsdinstall[configtuning-initial,"Designing the Partition Layout"] discusses partition layouts and swap partition size considerations.
-[[ACPI-aslanddump]]
-==== BIOS Contains Buggy Bytecode
+[WARNING]
+====
+It is possible to use any partition not currently mounted, even if it already contains data.
+Using `swapon` on a partition that contains data will overwrite and destroy that data.
+Make sure that the partition to be added as swap is really the intended partition before running `swapon`.
+====
-Some BIOS vendors provide incorrect or buggy bytecode.
-This is usually manifested by kernel console messages like this:
+man:swapon[8] can be used to add a swap partition to the system executing the following command:
[source,shell]
....
-ACPI-1287: *** Error: Method execution failed [\\_SB_.PCI0.LPC0.FIGD._STA] \\
-(Node 0xc3f6d160), AE_NOT_FOUND
+# swapon /dev/ada1p2
....
-Often, these problems may be resolved by updating the BIOS to the latest revision.
-Most console messages are harmless, but if there are other problems, like the battery status is not working, these messages are a good place to start looking for problems.
-
-=== Overriding the Default AML
-
-The BIOS bytecode, known as ACPI Machine Language (AML), is compiled from a source language called ACPI Source Language (ASL).
-The AML is found in the table known as the Differentiated System Description Table (DSDT).
-
-The goal of FreeBSD is for everyone to have working ACPI without any user intervention.
-Workarounds are still being developed for common mistakes made by BIOS vendors.
-The Microsoft(R) interpreter ([.filename]#acpi.sys# and [.filename]#acpiec.sys#) does not strictly check for adherence to the standard, and thus many BIOS vendors who only test ACPI under Windows(R) never fix their ASL.
-FreeBSD developers continue to identify and document which non-standard behavior is allowed by Microsoft(R)'s interpreter and replicate it so that FreeBSD can work without forcing users to fix the ASL.
-
-To help identify buggy behavior and possibly fix it manually, a copy can be made of the system's ASL.
-To copy the system's ASL to a specified file name, use `acpidump` with `-t`, to show the contents of the fixed tables, and `-d`, to disassemble the AML:
+To automatically add this swap partition on boot, add an entry to [.filename]#/etc/fstab#:
-[source,shell]
+[.programlisting]
....
-# acpidump -td > my.asl
+/dev/ada1p2 none swap sw 0 0
....
-Some AML versions assume the user is running Windows(R).
-To override this, set `hw.acpi.osname=_"Windows 2009"_` in [.filename]#/boot/loader.conf#, using the most recent Windows(R) version listed in the ASL.
+See man:fstab[5] for an explanation of the entries in [.filename]#/etc/fstab#.
-Other workarounds may require [.filename]#my.asl# to be customized.
-If this file is edited, compile the new ASL using the following command.
-Warnings can usually be ignored, but errors are bugs that will usually prevent ACPI from working correctly.
+[[create-swapfile]]
+=== Creating a Swap File
-[source,shell]
-....
-# iasl -f my.asl
-....
+[[swapfile-10-and-later]]
+These examples create a 512M swap file called [.filename]#/usr/swap0#.
-Including `-f` forces creation of the AML, even if there are errors during compilation.
-Some errors, such as missing return statements, are automatically worked around by the FreeBSD interpreter.
+[WARNING]
+====
+Swap files on ZFS file systems are strongly discouraged, as swapping can lead to system hangs.
+====
-The default output filename for `iasl` is [.filename]#DSDT.aml#.
-Load this file instead of the BIOS's buggy copy, which is still present in flash memory, by editing [.filename]#/boot/loader.conf# as follows:
+The first step is to create the swap file:
-[.programlisting]
+[source,shell]
....
-acpi_dsdt_load="YES"
-acpi_dsdt_name="/boot/DSDT.aml"
+# dd if=/dev/zero of=/usr/swap0 bs=1m count=512
....
-Be sure to copy [.filename]#DSDT.aml# to [.filename]#/boot#, then reboot the system.
-If this fixes the problem, send a man:diff[1] of the old and new ASL to {freebsd-acpi} so that developers can work around the buggy behavior in [.filename]#acpica#.
-
-[[ACPI-submitdebug]]
-=== Getting and Submitting Debugging Info
-
-The ACPI driver has a flexible debugging facility. A set of subsystems and the level of verbosity can be specified.
-The subsystems to debug are specified as layers and are broken down into components (`ACPI_ALL_COMPONENTS`) and ACPI hardware support (`ACPI_ALL_DRIVERS`).
-The verbosity of debugging output is specified as the level and ranges from just report errors (`ACPI_LV_ERROR`) to everything (`ACPI_LV_VERBOSE`).
-The level is a bitmask so multiple options can be set at once, separated by spaces.
-In practice, a serial console should be used to log the output so it is not lost as the console message buffer flushes.
-A full list of the individual layers and levels is found in man:acpi[4].
-
-Debugging output is not enabled by default. To enable it, add `options ACPI_DEBUG` to the custom kernel configuration file if ACPI is compiled into the kernel.
-Add `ACPI_DEBUG=1` to [.filename]#/etc/make.conf# to enable it globally.
-If a module is used instead of a custom kernel, recompile just the [.filename]#acpi.ko# module as follows:
+The second step is to put the proper permissions on the new file:
[source,shell]
....
-# cd /sys/modules/acpi/acpi && make clean && make ACPI_DEBUG=1
+# chmod 0600 /usr/swap0
....
-Copy the compiled [.filename]#acpi.ko# to [.filename]#/boot/kernel# and add the desired level and layer to [.filename]#/boot/loader.conf#.
-The entries in this example enable debug messages for all ACPI components and hardware drivers and output error messages at the least verbose level:
+The third step is to inform the system about the swap file by adding a line to [.filename]#/etc/fstab#:
[.programlisting]
....
-debug.acpi.layer="ACPI_ALL_COMPONENTS ACPI_ALL_DRIVERS"
-debug.acpi.level="ACPI_LV_ERROR"
+md none swap sw,file=/usr/swap0,late 0 0
....
-If the required information is triggered by a specific event, such as a suspend and then resume, do not modify [.filename]#/boot/loader.conf#.
-Instead, use `sysctl` to specify the layer and level after booting and preparing the system for the specific event.
-The variables which can be set using `sysctl` are named the same as the tunables in [.filename]#/boot/loader.conf#.
-
-Once the debugging information is gathered, it can be sent to {freebsd-acpi} so that it can be used by the FreeBSD ACPI maintainers to identify the root cause of the problem and to develop a solution.
+Swap space will be added on system startup. To add swap space immediately, use man:swapon[8]:
-[NOTE]
-====
-Before submitting debugging information to this mailing list, ensure the latest BIOS version is installed and, if available, the embedded controller firmware version.
-====
-
-When submitting a problem report, include the following information:
-
-* Description of the buggy behavior, including system type, model, and anything that causes the bug to appear. Note as accurately as possible when the bug began occurring if it is new.
-* The output of `dmesg` after running `boot -v`, including any error messages generated by the bug.
-* The `dmesg` output from `boot -v` with ACPI disabled, if disabling ACPI helps to fix the problem.
-* Output from `sysctl hw.acpi`. This lists which features the system offers.
-* The URL to a pasted version of the system's ASL. Do _not_ send the ASL directly to the list as it can be very large. Generate a copy of the ASL by running this command:
-+
[source,shell]
....
-# acpidump -dt > name-system.asl
+# swapon -aL
....
-+
-Substitute the login name for _name_ and manufacturer/model for _system_.
-For example, use [.filename]#njl-FooCo6000.asl#.
-
-Most FreeBSD developers watch the {freebsd-current}, but one should submit problems to {freebsd-acpi} to be sure it is seen.
-Be patient when waiting for a response.
-If the bug is not immediately apparent, submit a bug report.
-When entering a PR, include the same information as requested above.
-This helps developers to track the problem and resolve it.
-Do not send a PR without emailing {freebsd-acpi} first as it is likely that the problem has been reported before.
-
-[[ACPI-References]]
-=== References
-
-More information about ACPI may be found in the following locations:
-
-* The FreeBSD ACPI Mailing List Archives (https://lists.freebsd.org/pipermail/freebsd-acpi/[https://lists.freebsd.org/pipermail/freebsd-acpi/])
-* The ACPI 2.0 Specification (http://acpi.info/spec.htm[http://acpi.info/spec.htm])
-* man:acpi[4], man:acpi_thermal[4], man:acpidump[8], man:iasl[8], and man:acpidb[8]
diff --git a/documentation/content/en/books/handbook/config/_index.po b/documentation/content/en/books/handbook/config/_index.po
new file mode 100644
index 0000000000..6364c6e4aa
--- /dev/null
+++ b/documentation/content/en/books/handbook/config/_index.po
@@ -0,0 +1,3378 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/config/_index.adoc:1
+#, no-wrap
+msgid "This chapter explains much of the FreeBSD configuration files, how to enable or disable a service, how to configure the logging system and the power management area."
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/config/_index.adoc:1
+#, no-wrap
+msgid "Part III. System Administration"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/config/_index.adoc:1
+#, no-wrap
+msgid "Chapter 14. Configuration, Services, Logging and Power Management"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/config/_index.adoc:14
+#, no-wrap
+msgid "Configuration, Services, Logging and Power Management"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/config/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:56
+msgid ""
+"One of the important aspects of FreeBSD is proper system configuration. "
+"This chapter explains much of the FreeBSD configuration process, including "
+"some of the parameters which can be set to tune a FreeBSD system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:58
+msgid "Before reading this chapter, you should:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:60
+msgid ""
+"Understand UNIX(R) and FreeBSD basics (crossref:basics[basics,FreeBSD "
+"Basics])."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:62
+msgid "After reading this chapter, you will know:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:64
+msgid "How to use the various configuration files in [.filename]#/etc#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:65
+msgid ""
+"The basics of [.filename]#rc.conf# configuration and [.filename]#/usr/local/"
+"etc/rc.d# startup scripts."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:66
+msgid "How to tune FreeBSD using man:sysctl[8] variables."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:67
+msgid "How to configure the power management in FreeBSD."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/config/_index.adoc:69
+#, no-wrap
+msgid "Configuration Files"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:72
+msgid ""
+"FreeBSD maintains a clear separation between the base system and third party "
+"applications and therefore this affects where the configuration files of "
+"these applications are located."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:75
+msgid ""
+"FreeBSD base system configuration is located at the [.filename]#/etc# "
+"directory, and the [.filename]#/usr/local/etc# directory contains all the "
+"configuration files of the applications installed on the system through the "
+"ports collection and packages."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:78
+msgid ""
+"The kernel state configuration is located in [.filename]#/etc/sysctl.conf#. "
+"In the section <<configtuning-sysctl>>, the operation of man:sysctl[8] will "
+"be explained in more detail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:80
+msgid ""
+"For more information about the FreeBSD file system structure refer to man:"
+"hier[7]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:83
+msgid ""
+"As a general rule, configuration files do not use a standard on what syntax "
+"they must follow. Although it is true that the `#` character is normally "
+"used to comment a line and that each line has a configuration variable."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/config/_index.adoc:87
+msgid ""
+"Some applications like man:pkg[8] are starting to use the link:https://"
+"github.com/vstakhov/libucl[Universal Configuration Language (UCL)]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/config/_index.adoc:89
+#, no-wrap
+msgid "The [.filename]#/etc# directory"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:92
+msgid ""
+"The [.filename]#/etc# directory contains all of the FreeBSD base system "
+"configuration files that are responsible for configuring FreeBSD."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/config/_index.adoc:96
+#, no-wrap
+msgid "*Extreme* caution must be taken when modifying files in the [.filename]#/etc# directory; misconfiguration could make FreeBSD unbootable or malfunction.\n"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:103
+#, no-wrap
+msgid "[.filename]#/etc#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:105
+#, no-wrap
+msgid "System configuration files and scripts."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:106
+#, no-wrap
+msgid "[.filename]#/etc/defaults#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:108
+#, no-wrap
+msgid "Default system configuration files, see man:rc[8] for more information."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:109
+#, no-wrap
+msgid "[.filename]#/etc/fstab#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:111
+#, no-wrap
+msgid "man:fstab[5] contains descriptive information about the various file systems."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:112
+#, no-wrap
+msgid "[.filename]#/etc/mail#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:114
+#, no-wrap
+msgid "Extra man:sendmail[8] configuration and other MTA configuration files."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:115
+#, no-wrap
+msgid "[.filename]#/etc/mtree#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:117
+#, no-wrap
+msgid "mtree configuration files, see man: mtree[8] for more information."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:118
+#, no-wrap
+msgid "[.filename]#/etc/pam.d#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:120
+#, no-wrap
+msgid "Configuration files for the Pluggable Authentication Modules (PAM) library."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:121
+#, no-wrap
+msgid "[.filename]#/etc/periodic#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:123
+#, no-wrap
+msgid "Scripts that are run daily, weekly, and monthly, via man:cron[8], see man:periodic[8] for more information."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:124
+#, no-wrap
+msgid "[.filename]#/etc/rc.d#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:126
+#, no-wrap
+msgid "System and daemon startup/control scripts, see man:rc[8] for more information."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:127
+#, no-wrap
+msgid "[.filename]#/etc/rc.conf#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:129
+#, no-wrap
+msgid "Contains descriptive information about the local host name, configuration details for any potential network interfaces and which services should be started up at system initial boot time. More information in <<configtuning-core-configuration>>"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:130
+#, no-wrap
+msgid "[.filename]#/etc/security#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:132
+#, no-wrap
+msgid "OpenBSM audit configuration files, see man:audit[8] for more information."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:133
+#, no-wrap
+msgid "[.filename]#/etc/ppp#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:135
+#, no-wrap
+msgid "ppp configuration files, see man:ppp[8] for more information."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:136
+#, no-wrap
+msgid "[.filename]#/etc/ssh#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:138
+#, no-wrap
+msgid "OpenSSH configuration files, see man:ssh[1] for more information."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:139
+#, no-wrap
+msgid "[.filename]#/etc/ssl#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:141
+#, no-wrap
+msgid "OpenSSL configuration files."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:142
+#, no-wrap
+msgid "[.filename]#/etc/sysctl.conf#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:144
+#, no-wrap
+msgid "Contains settings for the kernel. More information in <<configtuning-sysctl>>"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/config/_index.adoc:147
+#, no-wrap
+msgid "The sysctl utility"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:150
+msgid ""
+"The man:sysctl[8] utility is used to make changes to a running FreeBSD "
+"system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:153
+msgid ""
+"The man:sysctl[8] utility retrieves kernel state and allows processes with "
+"appropriate privilege to set kernel state. The state to be retrieved or set "
+"is described using a \"Management Information Base\" (\"MIB\") style name, "
+"described as a dotted set of components."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/config/_index.adoc:154
+#, no-wrap
+msgid "Management Information Base"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:160
+#, no-wrap
+msgid "sysctl"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:162
+#, no-wrap
+msgid "\"Magic\" numbers"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:163
+#: documentation/content/en/books/handbook/config/_index.adoc:798
+#, no-wrap
+msgid "kern"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:165
+#, no-wrap
+msgid "Kernel functions and features"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:166
+#, no-wrap
+msgid "vm"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:168
+#, no-wrap
+msgid "virtual memory"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:169
+#, no-wrap
+msgid "vfs"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:171
+#, no-wrap
+msgid "Filesystem"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:172
+#, no-wrap
+msgid "net"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:174
+#, no-wrap
+msgid "Network"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:175
+#: documentation/content/en/books/handbook/config/_index.adoc:864
+#, no-wrap
+msgid "debug"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:177
+#, no-wrap
+msgid "Debugging parameters"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:178
+#, no-wrap
+msgid "hw"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:180
+#, no-wrap
+msgid "Hardware"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:181
+#, no-wrap
+msgid "machdep"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:183
+#, no-wrap
+msgid "Machine dependent"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:184
+#: documentation/content/en/books/handbook/config/_index.adoc:822
+#, no-wrap
+msgid "user"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:186
+#, no-wrap
+msgid "Userland"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:187
+#, no-wrap
+msgid "p1003_1b"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:189
+#, no-wrap
+msgid "POSIX 1003.1B"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:192
+msgid ""
+"At its core, man:sysctl[8] serves two functions: to read and to modify "
+"system settings."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:194
+msgid "To view all readable variables:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:198
+#, no-wrap
+msgid "% sysctl -a\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:201
+#: documentation/content/en/books/handbook/config/_index.adoc:225
+#: documentation/content/en/books/handbook/config/_index.adoc:239
+#: documentation/content/en/books/handbook/config/_index.adoc:266
+#: documentation/content/en/books/handbook/config/_index.adoc:310
+#: documentation/content/en/books/handbook/config/_index.adoc:450
+#: documentation/content/en/books/handbook/config/_index.adoc:614
+#: documentation/content/en/books/handbook/config/_index.adoc:628
+#: documentation/content/en/books/handbook/config/_index.adoc:1142
+#: documentation/content/en/books/handbook/config/_index.adoc:1205
+#: documentation/content/en/books/handbook/config/_index.adoc:1267
+#: documentation/content/en/books/handbook/config/_index.adoc:1352
+#: documentation/content/en/books/handbook/config/_index.adoc:1378
+#: documentation/content/en/books/handbook/config/_index.adoc:1395
+#: documentation/content/en/books/handbook/config/_index.adoc:1475
+msgid "The output should be similar to the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:215
+#, no-wrap
+msgid ""
+"kern.ostype: FreeBSD\n"
+"...\n"
+"vm.swap_enabled: 1\n"
+"vm.overcommit: 0\n"
+"vm.domain.0.pidctrl.kdd: 8\n"
+"vm.domain.0.pidctrl.kid: 4\n"
+"vm.domain.0.pidctrl.kpd: 3\n"
+"...\n"
+"vfs.zfs.sync_pass_rewrite: 2\n"
+"vfs.zfs.sync_pass_dont_compress: 8\n"
+"vfs.zfs.sync_pass_deferred_free: 2\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:218
+msgid "To read a particular variable, specify its name:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:222
+#, no-wrap
+msgid "% sysctl kern.maxproc\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:229
+#, no-wrap
+msgid "kern.maxproc: 1044\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:232
+msgid ""
+"The Management Information Base (MIB) is hierarchical and hence, specifying "
+"a prefix prints all the nodes hanging from it:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:236
+#, no-wrap
+msgid "% sysctl net\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:256
+#, no-wrap
+msgid ""
+"net.local.stream.recvspace: 8192\n"
+"net.local.stream.sendspace: 8192\n"
+"net.local.dgram.recvspace: 16384\n"
+"net.local.dgram.maxdgram: 2048\n"
+"net.local.seqpacket.recvspace: 8192\n"
+"net.local.seqpacket.maxseqpacket: 8192\n"
+"net.local.sockcount: 60\n"
+"net.local.taskcount: 25\n"
+"net.local.recycled: 0\n"
+"net.local.deferred: 0\n"
+"net.local.inflight: 0\n"
+"net.inet.ip.portrange.randomtime: 1\n"
+"net.inet.ip.portrange.randomcps: 9999\n"
+"[...]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:259
+msgid "To set a particular variable, use the _variable_=_value_ syntax:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:263
+#, no-wrap
+msgid "# sysctl kern.maxfiles=5000\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:270
+#, no-wrap
+msgid "kern.maxfiles: 2088 -> 5000\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/config/_index.adoc:275
+msgid ""
+"To keep the configuration after a reboot it is necessary to add these "
+"variables to the [.filename]#/etc/sysctl.conf# file as explained below."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/config/_index.adoc:278
+#, no-wrap
+msgid "The [.filename]#/etc/sysctl.conf# file"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:281
+msgid ""
+"The configuration file for man:sysctl[8], [.filename]#/etc/sysctl.conf#, "
+"looks much like [.filename]#/etc/rc.conf#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:283
+msgid "Values are set using a `variable=value` syntax."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/config/_index.adoc:288
+msgid ""
+"The specified values are set after the system goes into multi-user mode. "
+"Not all variables are settable in this mode."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:291
+msgid ""
+"For example, to turn off logging of fatal signal exits and prevent users "
+"from seeing processes started by other users, the following tunables can be "
+"set in [.filename]#/etc/sysctl.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:296
+#, no-wrap
+msgid ""
+"# Do not log fatal signal exits (e.g., sig 11)\n"
+"kern.logsigexit=0\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:300
+#, no-wrap
+msgid ""
+"# Prevent users from seeing information about processes that\n"
+"# are being run under another UID.\n"
+"security.bsd.see_other_uids=0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:303
+msgid ""
+"To obtain more information about what function a particular sysctl has, the "
+"following command can be executed:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:307
+#, no-wrap
+msgid "% sysctl -d kern.dfldsiz\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:314
+#, no-wrap
+msgid "kern.dfldsiz: Initial data size limit\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/config/_index.adoc:317
+#, no-wrap
+msgid "Managing System-Specific Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:320
+msgid ""
+"The principal location for system configuration information is [.filename]#/"
+"etc/rc.conf#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:323
+msgid ""
+"This file contains a wide range of configuration information and it is read "
+"at system startup to configure the system. It provides the configuration "
+"information for the [.filename]#rc*# files."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:325
+msgid ""
+"The entries in [.filename]#/etc/rc.conf# override the default settings in [."
+"filename]#/etc/defaults/rc.conf#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/config/_index.adoc:330
+msgid ""
+"The file [.filename]#/etc/defaults/rc.conf# containing the default settings "
+"should not be edited. Instead, all system-specific changes should be made "
+"to [.filename]#/etc/rc.conf#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:333
+msgid ""
+"A number of strategies may be applied in clustered applications to separate "
+"site-wide configuration from system-specific configuration in order to "
+"reduce administration overhead."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:335
+msgid ""
+"The recommended approach is to place system-specific configuration into [."
+"filename]#/etc/rc.conf.local#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:337
+msgid ""
+"For example, these entries in [.filename]#/etc/rc.conf# apply to all systems:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:343
+#, no-wrap
+msgid ""
+"sshd_enable=\"YES\"\n"
+"keyrate=\"fast\"\n"
+"defaultrouter=\"10.1.1.254\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:346
+msgid ""
+"Whereas these entries in [.filename]#/etc/rc.conf.local# apply to this "
+"system only:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:351
+#, no-wrap
+msgid ""
+"hostname=\"node1.example.org\"\n"
+"ifconfig_fxp0=\"inet 10.1.1.1/8\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:354
+msgid ""
+"Distribute [.filename]#/etc/rc.conf# to every system using an application "
+"such as rsync or puppet, while [.filename]#/etc/rc.conf.local# remains "
+"unique."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:356
+msgid ""
+"Upgrading the system will not overwrite [.filename]#/etc/rc.conf#, so system "
+"configuration information will not be lost."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/config/_index.adoc:362
+msgid ""
+"Both [.filename]#/etc/rc.conf# and [.filename]#/etc/rc.conf.local# are "
+"parsed by man:sh[1]. This allows system operators to create complex "
+"configuration scenarios. Refer to man:rc.conf[5] for further information on "
+"this topic."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/config/_index.adoc:365
+#, no-wrap
+msgid "Managing Services in FreeBSD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:368
+msgid ""
+"FreeBSD uses the man:rc[8] system of startup scripts during system "
+"initialization and for managing services."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:370
+msgid ""
+"The scripts listed in [.filename]#/etc/rc.d# provide basic services which "
+"can be controlled with the `start`, `stop`, and `restart` options to man:"
+"service[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:372
+msgid "A basic script may look similar to the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:380
+#, no-wrap
+msgid ""
+"#!/bin/sh\n"
+"#\n"
+"# PROVIDE: utility\n"
+"# REQUIRE: DAEMON\n"
+"# KEYWORD: shutdown\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:382
+#, no-wrap
+msgid ". /etc/rc.subr\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:385
+#, no-wrap
+msgid ""
+"name=utility\n"
+"rcvar=utility_enable\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:387
+#, no-wrap
+msgid "command=\"/usr/local/sbin/utility\"\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:389
+#, no-wrap
+msgid "load_rc_config $name\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:396
+#, no-wrap
+msgid ""
+"#\n"
+"# DO NOT CHANGE THESE DEFAULT VALUES HERE\n"
+"# SET THEM IN THE /etc/rc.conf FILE\n"
+"#\n"
+"utility_enable=${utility_enable-\"NO\"}\n"
+"pidfile=${utility_pidfile-\"/var/run/utility.pid\"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:398
+#, no-wrap
+msgid "run_rc_command \"$1\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:401
+msgid ""
+"Refer to extref:{rc-scripting}[this article] for instructions on how to "
+"create custom man:rc[8] scripts."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/config/_index.adoc:403
+#, no-wrap
+msgid "Starting Services"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:406
+msgid ""
+"Many users install third party software on FreeBSD from the Ports Collection "
+"and require the installed services to be started upon system initialization."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:409
+msgid ""
+"Services, such as package:security/openssh-portable[] or package:www/nginx[] "
+"are just two of the many software packages which may be started during "
+"system initialization. This section explains the procedures available for "
+"starting services."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:411
+msgid ""
+"Since the man:rc[8] system is primarily intended to start and stop services "
+"at system startup and shutdown time, the `start`, `stop` and `restart` "
+"options will only perform their action if the appropriate [.filename]#/etc/"
+"rc.conf# variable is set."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:413
+msgid ""
+"So the first step to start a service, like for example package:www/nginx[] "
+"is to add it to [.filename]#/etc/rc.conf# by executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:417
+#, no-wrap
+msgid "# sysrc nginx_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:420
+msgid "Then nginx can be started executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:424
+#, no-wrap
+msgid "# service nginx start\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/config/_index.adoc:430
+msgid ""
+"To `start`, `stop` or `restart` a service regardless of the settings in [."
+"filename]#/etc/rc.conf#, these commands should be prefixed with \"one\". "
+"For instance, to start package:www/nginx[] regardless of the current [."
+"filename]#/etc/rc.conf# setting, execute the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:434
+#, no-wrap
+msgid "# service nginx onestart\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/config/_index.adoc:438
+#, no-wrap
+msgid "Status of a Service"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/config/_index.adoc:441
+msgid "To determine if a service is running, use the `status` subcommand."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/config/_index.adoc:443
+msgid "For example, to verify that package:www/nginx[] is running:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:447
+#, no-wrap
+msgid "# service nginx status\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:454
+#, no-wrap
+msgid "nginx is running as pid 27871.\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/config/_index.adoc:457
+#, no-wrap
+msgid "Reload a Service"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:461
+msgid ""
+"In some cases, it is also possible to `reload` a service. This attempts to "
+"send a signal to an individual service, forcing the service to reload its "
+"configuration files."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:463
+msgid "In most cases, this means sending the service a `SIGHUP` signal."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:465
+#, no-wrap
+msgid "*Not all services support this feature.*\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:468
+msgid ""
+"The man:rc[8] system is used for network services and it also contributes to "
+"most of the system initialization. For instance, when the [.filename]#/etc/"
+"rc.d/bgfsck# script is executed, it prints out the following message:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:472
+#, no-wrap
+msgid "Starting background file system checks in 60 seconds.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:475
+msgid ""
+"This script is used for background file system checks, which occur only "
+"during system initialization."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:478
+msgid ""
+"Many system services depend on other services to function properly. For "
+"example, man:yp[8] and other RPC-based services may fail to start until "
+"after the man:rpcbind[8] service has started."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:480
+msgid "Additional information can be found in man:rc[8] and man:rc.subr[8]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/config/_index.adoc:481
+#, no-wrap
+msgid "Using Services to Start Services"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:485
+msgid ""
+"Other services can be started using man:inetd[8]. Working with man:inetd[8] "
+"and its configuration is described in depth in crossref:network-"
+"servers[network-inetd,“The inetd Super-Server”]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:489
+msgid ""
+"In some cases, it may make more sense to use man:cron[8] to start system "
+"services. This approach has a number of advantages as man:cron[8] runs "
+"these processes as the owner of the man:crontab[5]. This allows regular "
+"users to start and maintain their own applications."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:492
+msgid ""
+"The `@reboot` feature of man:cron[8], may be used in place of the time "
+"specification. This causes the job to run when man:cron[8] is started, "
+"normally during system initialization."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/config/_index.adoc:494
+#, no-wrap
+msgid "Cron and Periodic"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:498
+msgid ""
+"Scheduling tasks to run at a certain day or time is a very common task on "
+"FreeBSD. The tool in charge of performing this task is man:cron[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:500
+msgid ""
+"In addition to tasks that can be scheduled by the user via man:cron[8], "
+"FreeBSD performs routine background tasks managed by man:periodic[8]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/config/_index.adoc:502
+#, no-wrap
+msgid "Cron"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:505
+msgid ""
+"The man:cron[8] utility runs in the background and regularly checks [."
+"filename]#/etc/crontab# for tasks to execute and searches [.filename]#/var/"
+"cron/tabs# for custom crontab files."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:507
+msgid ""
+"These files are used to schedule tasks which cron runs at the specified "
+"times."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:509
+msgid ""
+"Each entry in a crontab defines a task to run and is known as a _cron job_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:515
+msgid ""
+"Two different types of configuration files are used: the system crontab, "
+"which should not be modified, and user crontabs, which can be created and "
+"edited as needed. The format used by these files is documented in man:"
+"crontab[5]. The format of the system crontab, [.filename]#/etc/crontab# "
+"includes a `who` column which does not exist in user crontabs. In the "
+"system crontab, cron runs the command as the user specified in this column. "
+"In a user crontab, all commands run as the user who created the crontab."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:518
+msgid ""
+"User crontabs allow individual users to schedule their own tasks. The "
+"`root` user can also have a user [.filename]#crontab# which can be used to "
+"schedule tasks that do not exist in the system [.filename]#crontab#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:520
+msgid ""
+"Here is a sample entry from the system crontab, [.filename]#/etc/crontab#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:546
+#, no-wrap
+msgid ""
+"# /etc/crontab - root's crontab for FreeBSD\n"
+"#\n"
+"# $FreeBSD$ <.>\n"
+"#\n"
+"SHELL=/bin/sh\n"
+"PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin <.>\n"
+"#\n"
+"#minute hour mday month wday who command <.>\n"
+"#\n"
+"# Save some entropy so that /dev/random can re-seed on boot.\n"
+"*/11 * * * * operator /usr/libexec/save-entropy <.>\n"
+"#\n"
+"# Rotate log files every hour, if necessary.\n"
+"0 * * * * root newsyslog\n"
+"#\n"
+"# Perform daily/weekly/monthly maintenance.\n"
+"1 3 * * * root periodic daily\n"
+"15 4 * * 6 root periodic weekly\n"
+"30 5 1 * * root periodic monthly\n"
+"#\n"
+"# Adjust the time zone if the CMOS clock keeps local time, as opposed to\n"
+"# UTC time. See adjkerntz(8) for details.\n"
+"1,31 0-5 * * * root adjkerntz -a\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:550
+msgid ""
+"Lines that begin with the `+#+` character are comments. A comment can be "
+"placed in the file as a reminder of what and why a desired action is "
+"performed. Comments cannot be on the same line as a command or else they "
+"will be interpreted as part of the command; they must be on a new line. "
+"Blank lines are ignored."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:552
+msgid ""
+"The equals (`=`) character is used to define any environment settings. In "
+"this example, it is used to define the `SHELL` and `PATH`. If the `SHELL` is "
+"omitted, cron will use the default Bourne shell. If the `PATH` is omitted, "
+"the full path must be given to the command or script to run."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:554
+msgid ""
+"This line defines the seven fields used in a system crontab: `minute`, "
+"`hour`, `mday`, `month`, `wday`, `who`, and `command`. The `minute` field is "
+"the time in minutes when the specified command will be run, the `hour` is "
+"the hour when the specified command will be run, the `mday` is the day of "
+"the month, `month` is the month, and `wday` is the day of the week. These "
+"fields must be numeric values, representing the twenty-four hour clock, or a "
+"`*`, representing all values for that field. The `who` field only exists in "
+"the system crontab and specifies which user the command should be run as. "
+"The last field is the command to be executed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:556
+msgid ""
+"This entry defines the values for this cron job. The `\\*/11`, followed by "
+"several more `*` characters, specifies that `/usr/libexec/save-entropy` is "
+"invoked by `operator` every eleven minutes of every hour, of every day and "
+"day of the week, of every month. Commands can include any number of "
+"switches. However, commands which extend to multiple lines need to be broken "
+"with the backslash \"\\\" continuation character."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/config/_index.adoc:558
+#, no-wrap
+msgid "Creating a User Crontab"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:561
+msgid "To create a user crontab, invoke `crontab` in editor mode:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:565
+#, no-wrap
+msgid "% crontab -e\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:570
+msgid ""
+"This will open the user's crontab using the default text editor. The first "
+"time a user runs this command, it will open an empty file. Once a user "
+"creates a crontab, this command will open that file for editing."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:572
+msgid ""
+"It is useful to add these lines to the top of the crontab file in order to "
+"set the environment variables and to remember the meanings of the fields in "
+"the crontab:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:579
+#, no-wrap
+msgid ""
+"SHELL=/bin/sh\n"
+"PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin\n"
+"# Order of crontab fields\n"
+"# minute hour mday month wday command\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:584
+msgid ""
+"Then add a line for each command or script to run, specifying the time to "
+"run the command. This example runs the specified custom Bourne shell script "
+"every day at two in the afternoon. Since the path to the script is not "
+"specified in `PATH`, the full path to the script is given:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:588
+#: documentation/content/en/books/handbook/config/_index.adoc:618
+#, no-wrap
+msgid "0 14 * * * /home/user/bin/mycustomscript.sh\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/config/_index.adoc:594
+msgid ""
+"Before using a custom script, make sure it is executable and test it with "
+"the limited set of environment variables set by cron. To replicate the "
+"environment that would be used to run the above cron entry, use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:598
+#, no-wrap
+msgid "env -i SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin HOME=/home/user LOGNAME=user /home/user/bin/mycustomscript.sh\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:602
+msgid ""
+"The environment set by cron is discussed in man:crontab[5]. Checking that "
+"scripts operate correctly in a cron environment is especially important if "
+"they include any commands that delete files using wildcards."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/config/_index.adoc:607
+msgid ""
+"When finished editing the crontab, save the file. It will automatically be "
+"installed, and cron will read the crontab and run its cron jobs at their "
+"specified times. To list the cron jobs in a crontab, use this command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:611
+#, no-wrap
+msgid "% crontab -l\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:621
+msgid "To remove all of the cron jobs in a user crontab:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:625
+#, no-wrap
+msgid "% crontab -r\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:632
+#, no-wrap
+msgid "remove crontab for user? y\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/config/_index.adoc:635
+#, no-wrap
+msgid "Periodic"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:641
+msgid ""
+"FreeBSD provides a set of system management scripts to check status of "
+"various subsystems, perform security-related checks, rotate log files, etc. "
+"These scripts are run on a periodic basis: daily. weekly, or monthly. The "
+"management of these tasks is performed by man:periodic[8] and its "
+"configuration resides in man:periodic.conf[5]. The periodic tasks are "
+"initiated by entries in the system crontab, shown above."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:643
+msgid ""
+"Scripts executed by man:periodic[8] are located in [.filename]#/etc/periodic/"
+"# for base utilities and in [.filename]#/usr/local/etc/periodic/# for third-"
+"party software."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:645
+msgid ""
+"They are organized in 4 subdirectories, daily, weekly, monthly and security."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/config/_index.adoc:647
+#, no-wrap
+msgid "Enable or Disable Periodic Tasks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:650
+msgid "FreeBSD has some scripts enabled by default to run periodically."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:652
+msgid ""
+"To enable or disable a task, the first step is to edit [.filename]#/etc/"
+"periodic.conf# executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:656
+#, no-wrap
+msgid "# ee /etc/periodic.conf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:659
+msgid ""
+"And then to enable, for example, `daily_status_zfs_enable` put the following "
+"content in the file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:663
+#, no-wrap
+msgid "daily_status_zfs_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:666
+msgid ""
+"To disable a task that is active by default, all that needs to be done is to "
+"change `YES` to `NO`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/config/_index.adoc:668
+#, no-wrap
+msgid "Configuring the Output of Periodic Tasks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:671
+msgid ""
+"In [.filename]#/etc/periodic.conf# the variables `daily_output`, "
+"`weekly_output` and `monthly_output` specifies where to send the results of "
+"the script execution."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:673
+msgid ""
+"By default the output of the periodic scripts are emailed to root, and "
+"therefore it is best to read root's mail or alias root to a mailbox that is "
+"monitored."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:675
+msgid ""
+"To send the results to another email or to other emails, add the email "
+"addresses separated by spaces to [.filename]#/etc/periodic.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:681
+#, no-wrap
+msgid ""
+"daily_output=\"email1@example.com email2@example.com\"\n"
+"weekly_output=\"email1@example.com email2@example.com\"\n"
+"monthly_output=\"email1@example.com email2@example.com\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:684
+msgid ""
+"To log periodic output instead of receiving it as email, add the following "
+"lines to [.filename]#/etc/periodic.conf#. man:newsyslog[8] will rotate these "
+"files at the appropriate times:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:690
+#, no-wrap
+msgid ""
+"daily_output=/var/log/daily.log\n"
+"weekly_output=/var/log/weekly.log\n"
+"monthly_output=/var/log/monthly.log\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/config/_index.adoc:693
+#, no-wrap
+msgid "Configuring System Logging"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:699
+msgid ""
+"Generating and reading system logs is an important aspect of system "
+"administration. The information in system logs can be used to detect "
+"hardware and software issues as well as application and system configuration "
+"errors. This information also plays an important role in security auditing "
+"and incident response. Most system daemons and applications will generate "
+"log entries."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:702
+msgid ""
+"FreeBSD provides a system logger, man:syslogd[8], to manage logging. By "
+"default, syslogd is enabled and started when the system boots."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:704
+msgid ""
+"This section describes how to configure the FreeBSD system logger for both "
+"local and remote logging and how to perform log rotation and log management."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/config/_index.adoc:705
+#, no-wrap
+msgid "Configuring Local Logging"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:712
+msgid ""
+"The configuration file, [.filename]#/etc/syslog.conf#, controls what syslogd "
+"does with log entries as they are received. There are several parameters to "
+"control the handling of incoming events. The _facility_ describes which "
+"subsystem generated the message, such as the kernel or a daemon, and the "
+"_level_ describes the severity of the event that occurred. This makes it "
+"possible to configure if and where a log message is logged, depending on the "
+"facility and level. It is also possible to take action depending on the "
+"application that sent the message, and in the case of remote logging, the "
+"hostname of the machine generating the logging event."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:719
+msgid ""
+"This configuration file contains one line per action, where the syntax for "
+"each line is a selector field followed by an action field. The syntax of "
+"the selector field is _facility.level_ which will match log messages from "
+"_facility_ at level _level_ or higher. It is also possible to add an "
+"optional comparison flag before the level to specify more precisely what is "
+"logged. Multiple selector fields can be used for the same action, and are "
+"separated with a semicolon (`;`). Using `*` will match everything. The "
+"action field denotes where to send the log message, such as to a file or "
+"remote log host."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:721
+msgid ""
+"As an example, here is the default [.filename]#/etc/syslog.conf# from "
+"FreeBSD:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:759
+#, no-wrap
+msgid ""
+"# $FreeBSD$\n"
+"#\n"
+"# Spaces ARE valid field separators in this file. However,\n"
+"# other *nix-like systems still insist on using tabs as field\n"
+"# separators. If you are sharing this file between systems, you\n"
+"# may want to use only tabs as field separators here.\n"
+"# Consult the syslog.conf(5) manpage.\n"
+"*.err;kern.warning;auth.notice;mail.crit /dev/console <.>\n"
+"*.notice;authpriv.none;kern.debug;lpr.info;mail.crit;news.err /var/log/messages\n"
+"security.* /var/log/security\n"
+"auth.info;authpriv.info /var/log/auth.log\n"
+"mail.info /var/log/maillog <.>\n"
+"cron.* /var/log/cron\n"
+"!-devd\n"
+"*.=debug /var/log/debug.log <.>\n"
+"*.emerg *\n"
+"daemon.info /var/log/daemon.log\n"
+"# uncomment this to log all writes to /dev/console to /var/log/console.log\n"
+"# touch /var/log/console.log and chmod it to mode 600 before it will work\n"
+"#console.info /var/log/console.log\n"
+"# uncomment this to enable logging of all log messages to /var/log/all.log\n"
+"# touch /var/log/all.log and chmod it to mode 600 before it will work\n"
+"#*.* /var/log/all.log\n"
+"# uncomment this to enable logging to a remote loghost named loghost\n"
+"#*.* @loghost\n"
+"# uncomment these if you're running inn\n"
+"# news.crit /var/log/news/news.crit\n"
+"# news.err /var/log/news/news.err\n"
+"# news.notice /var/log/news/news.notice\n"
+"# Uncomment this if you wish to see messages produced by devd\n"
+"# !devd\n"
+"# *.>=notice /var/log/devd.log <.>\n"
+"!*\n"
+"include /etc/syslog.d\n"
+"include /usr/local/etc/syslog.d\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:762
+msgid ""
+"Matches all messages with a level of `err` or higher, as well as `kern."
+"warning`, `auth.notice` and `mail.crit`, and sends these log messages to the "
+"console ([.filename]#/dev/console#)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:763
+msgid ""
+"Matches all messages from the `mail` facility at level `info` or above and "
+"logs the messages to [.filename]#/var/log/maillog#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:764
+msgid ""
+"Uses a comparison flag (`=`) to only match messages at level `debug` and "
+"logs them to [.filename]#/var/log/debug.log#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:765
+msgid ""
+"Is an example usage of a program specification. This makes the rules "
+"following it only valid for the specified program. In this case, only the "
+"messages generated by man:devd[8] are logged to [.filename]#/var/log/devd."
+"log#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:767
+msgid ""
+"For more information about [.filename]#/etc/syslog.conf#, its syntax, and "
+"more advanced usage examples, see man:syslog.conf[5]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/config/_index.adoc:769
+#, no-wrap
+msgid "Logging Facilities"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:773
+msgid ""
+"A facility describes the part of the system generating the message. "
+"Facilities are a way of separating the different messages so that it is "
+"easier for the user to consult the logs."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/config/_index.adoc:774
+#, no-wrap
+msgid "syslog facilities"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:777
+#: documentation/content/en/books/handbook/config/_index.adoc:840
+#, no-wrap
+msgid "Name"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:779
+#: documentation/content/en/books/handbook/config/_index.adoc:842
+#, no-wrap
+msgid "Description"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:780
+#, no-wrap
+msgid "auth"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:782
+#, no-wrap
+msgid "The authorization system: man:login[1], man:su[1], man:getty[8], etc."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:783
+#, no-wrap
+msgid "authpriv"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:785
+#, no-wrap
+msgid "The same as auth, but logged to a file readable only by root."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:786
+#, no-wrap
+msgid "console"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:788
+#, no-wrap
+msgid "Messages written to [.filename]#/dev/console# by the kernel console output driver."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:789
+#, no-wrap
+msgid "cron"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:791
+#, no-wrap
+msgid "Messages written by the man:cron[8] daemon."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:792
+#, no-wrap
+msgid "daemon"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:794
+#, no-wrap
+msgid "System daemons, such as man:routed[8], that are not provided for explicitly by other facilities."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:795
+#, no-wrap
+msgid "ftp"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:797
+#, no-wrap
+msgid "The file transfer protocol daemons: man:ftpd[8], man:tftpd[8]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:800
+#, no-wrap
+msgid "Messages generated by the kernel. These cannot be generated by any user processes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:801
+#, no-wrap
+msgid "lpr"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:803
+#, no-wrap
+msgid "The line printer spooling system: man:lpr[1], man:lpc[8], man:lpd[8], etc."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:804
+#, no-wrap
+msgid "mail"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:806
+#, no-wrap
+msgid "The mail system."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:807
+#, no-wrap
+msgid "mark"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:809
+#, no-wrap
+msgid "This facility adds a record every 20 minutes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:810
+#, no-wrap
+msgid "news"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:812
+#, no-wrap
+msgid "The network news system."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:813
+#, no-wrap
+msgid "ntp"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:815
+#, no-wrap
+msgid "The network time protocol system."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:816
+#, no-wrap
+msgid "security"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:818
+#, no-wrap
+msgid "Security subsystems, such as man:ipfw[4]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:819
+#, no-wrap
+msgid "syslog"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:821
+#, no-wrap
+msgid "Messages generated internally by syslogd(8)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:824
+#, no-wrap
+msgid "Messages generated by random user processes. *This is the default facility identifier if none is specified*."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:825
+#, no-wrap
+msgid "uucp"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:827
+#, no-wrap
+msgid "The Unix-to-Unix Copy system. An ancient protocol. Really weird to see messages from this facility."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:828
+#, no-wrap
+msgid "local0 through local7"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:830
+#, no-wrap
+msgid "Reserved for local use."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/config/_index.adoc:833
+#, no-wrap
+msgid "Logging Levels"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:836
+msgid ""
+"The level describes the severity of the message, and is a keyword from the "
+"following ordered list (higher to lower):"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/config/_index.adoc:837
+#, no-wrap
+msgid "syslog levels"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:843
+#, no-wrap
+msgid "emerg"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:845
+#, no-wrap
+msgid "A panic condition. This is normally broadcast to all users."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:846
+#, no-wrap
+msgid "alert"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:848
+#, no-wrap
+msgid "A condition that should be corrected immediately, such as a corrupted system database."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:849
+#, no-wrap
+msgid "crit"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:851
+#, no-wrap
+msgid "Critical conditions, e.g., hard device errors."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:852
+#, no-wrap
+msgid "err"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:854
+#, no-wrap
+msgid "Errors."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:855
+#, no-wrap
+msgid "warning"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:857
+#, no-wrap
+msgid "Warning messages."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:858
+#, no-wrap
+msgid "notice"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:860
+#, no-wrap
+msgid "Conditions that are not error conditions, but should possibly be handled specially."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:861
+#, no-wrap
+msgid "info"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:863
+#, no-wrap
+msgid "Informational messages."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:866
+#, no-wrap
+msgid "Messages that contain information normally of use only when debugging a program."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:867
+#, no-wrap
+msgid "none"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:869
+#, no-wrap
+msgid "This special level disables a particular facility."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/config/_index.adoc:872
+#, no-wrap
+msgid "Read Log Messages"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:876
+msgid ""
+"By default FreeBSD log files use the format link:https://datatracker.ietf."
+"org/doc/html/rfc3164[rfc3164], also known as The BSD syslog Protocol. Learn "
+"more about other formats and how to use them at man:syslog[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:878
+msgid "Typically the logs have the following syntax:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:882
+#, no-wrap
+msgid "date time hostname program[pid]: the message\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:885
+msgid ""
+"The output of the [.filename]#/var/log/cron# file will be used as an example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:892
+#, no-wrap
+msgid ""
+"[...]\n"
+"Jul 16 12:40:00 FreeBSD /usr/sbin/cron[81519]: (root) CMD (/usr/libexec/atrun)\n"
+"Jul 16 12:44:00 FreeBSD /usr/sbin/cron[83072]: (operator) CMD (/usr/libexec/save-entropy)\n"
+"[...]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:895
+msgid ""
+"Verbose logging, so the facility and the level on each message will be "
+"added, can be enabled in man:syslog[8] by running the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:899
+#, no-wrap
+msgid "# sysrc syslogd_flags=\"-vv\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:902
+msgid ""
+"Once the function is activated, the facility and the level will be displayed "
+"in the log as shown in the following example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:909
+#, no-wrap
+msgid ""
+"[...]\n"
+"Jul 16 17:40:00 <cron.info> FreeBSD /usr/sbin/cron[1016]: (root) CMD (/usr/libexec/atrun)\n"
+"Jul 16 17:44:00 <cron.info> FreeBSD /usr/sbin/cron[1030]: (operator) CMD (/usr/libexec/save-entropy)\n"
+"[...]\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/config/_index.adoc:911
+#, no-wrap
+msgid "Log Management and Rotation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:914
+msgid ""
+"Log files can grow quickly, taking up disk space and making it more "
+"difficult to locate useful information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:916
+msgid ""
+"In FreeBSD, man:newsyslog[8] is used to manage log files and attempt to "
+"mitigate this."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:918
+msgid ""
+"This built-in program periodically rotates and compresses log files, and "
+"optionally creates missing log files and signals programs when log files are "
+"moved."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/config/_index.adoc:923
+msgid ""
+"Since newsyslog is run from man:cron[8], it cannot rotate files more often "
+"than it is scheduled to run from man:cron[8]. In the default configuration, "
+"it runs every hour."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:926
+msgid ""
+"Here is the default configuration in FreeBSD, more information in man:"
+"newsyslog.conf[5]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:962
+#, no-wrap
+msgid ""
+"# configuration file for newsyslog\n"
+"# $FreeBSD$\n"
+"#\n"
+"# Entries which do not specify the '/pid_file' field will cause the\n"
+"# syslogd process to be signalled when that log file is rotated. This\n"
+"# action is only appropriate for log files which are written to by the\n"
+"# syslogd process (ie, files listed in /etc/syslog.conf). If there\n"
+"# is no process which needs to be signalled when a given log file is\n"
+"# rotated, then the entry for that file should include the 'N' flag.\n"
+"#\n"
+"# Note: some sites will want to select more restrictive protections than the\n"
+"# defaults. In particular, it may be desirable to switch many of the 644\n"
+"# entries to 640 or 600. For example, some sites will consider the\n"
+"# contents of maillog, messages, and lpd-errs to be confidential. In the\n"
+"# future, these defaults may change to more conservative ones.\n"
+"#\n"
+"# logfilename [owner:group] mode count size when flags [/pid_file] [sig_num]\n"
+"/var/log/all.log 600 7 * @T00 J\n"
+"/var/log/auth.log 600 7 1000 @0101T JC\n"
+"/var/log/console.log 600 5 1000 * J\n"
+"/var/log/cron 600 3 1000 * JC\n"
+"/var/log/daily.log 640 7 * @T00 JN\n"
+"/var/log/debug.log 600 7 1000 * JC\n"
+"/var/log/init.log 644 3 1000 * J\n"
+"/var/log/kerberos.log 600 7 1000 * J\n"
+"/var/log/maillog 640 7 * @T00 JC\n"
+"/var/log/messages 644 5 1000 @0101T JC\n"
+"/var/log/monthly.log 640 12 * $M1D0 JN\n"
+"/var/log/devd.log 644 3 1000 * JC\n"
+"/var/log/security 600 10 1000 * JC\n"
+"/var/log/utx.log 644 3 * @01T05 B\n"
+"/var/log/weekly.log 640 5 * $W6D0 JN\n"
+"/var/log/daemon.log 644 5 1000 @0101T JC\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:965
+#, no-wrap
+msgid ""
+"<include> /etc/newsyslog.conf.d/[!.]*.conf\n"
+"<include> /usr/local/etc/newsyslog.conf.d/[!.]*.conf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:968
+msgid "`logfilename` - Name of the system log file to be archived."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:969
+msgid ""
+"`[owner:group]` - This optional field specifies the owner and group for the "
+"archive file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:970
+msgid ""
+"`mode` - Specify the file mode of the log file and archives. Valid mode bits "
+"are 0666. (That is, read and write permissions for the rotated log may be "
+"specified for the owner, group, and others.)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:971
+msgid "`count` - Specify the maximum number of archive files which may exist."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:972
+msgid ""
+"`size` - When the size of the log file reaches size in kilobytes, the log "
+"file will be trimmed as described above. If this field contains an asterisk "
+"('*'), the log file will not be trimmed based on size."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:973
+msgid ""
+"`when` - Consist of an interval, a specific time, or both. Supported options "
+"in man:newsyslog.conf[5]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:974
+msgid ""
+"`flags` - Indicates the flags that newsyslog accepts, supported options in "
+"man:newsyslog.conf[5]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:975
+msgid ""
+"`[/pid_file]` - This optional field specifies the file name containing a "
+"daemon's process ID or to find a group process ID."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:976
+msgid ""
+"`[sig_num]` - This optional field specifies the signal that will be sent to "
+"the daemon process."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/config/_index.adoc:980
+msgid ""
+"The last two fields are optional and specify the name of the Process ID "
+"(PID) file of a process and a signal number to send to that process when the "
+"file is rotated."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/config/_index.adoc:983
+#, no-wrap
+msgid "Configuring Remote Logging"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:987
+msgid ""
+"Monitoring the log files of multiple hosts can become unwieldy as the number "
+"of systems increases. Configuring centralized logging can reduce some of "
+"the administrative burden of log file administration."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:989
+msgid ""
+"In FreeBSD, centralized log file aggregation, merging, and rotation can be "
+"configured using syslogd and newsyslog."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:991
+msgid ""
+"This section demonstrates an example configuration, where host `A`, named "
+"`logserv.example.com`, will collect logging information for the local "
+"network."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:993
+msgid ""
+"Host `B`, named `logclient.example.com`, will be configured to pass logging "
+"information to the logging server."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/config/_index.adoc:994
+#, no-wrap
+msgid "Log Server Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:997
+msgid ""
+"A log server is a system that has been configured to accept logging "
+"information from other hosts."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:999
+msgid "Before configuring a log server, check the following:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1001
+msgid ""
+"If there is a firewall between the logging server and any logging clients, "
+"ensure that the firewall ruleset allows UDP port 514 for both the clients "
+"and the server."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1002
+msgid ""
+"The logging server and all client machines must have forward and reverse "
+"entries in the local DNS. If the network does not have a DNS server, create "
+"entries in each system's [.filename]#/etc/hosts#. Proper name resolution is "
+"required so that log entries are not rejected by the logging server."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1005
+msgid ""
+"On the log server, edit [.filename]#/etc/syslog.conf# to specify the name of "
+"the client to receive log entries from, the logging facility to be used, and "
+"the name of the log to store the host's log entries. This example adds the "
+"hostname of `B`, logs all facilities, and stores the log entries in [."
+"filename]#/var/log/logclient.log#."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/config/_index.adoc:1006
+#, no-wrap
+msgid "Sample Log Server Configuration"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1014
+#, no-wrap
+msgid ""
+"+logclient.example.com\n"
+"*.* /var/log/logclient.log\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1020
+msgid ""
+"When adding multiple log clients, add a similar two-line entry for each "
+"client. More information about the available facilities may be found in man:"
+"syslog.conf[5]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1022
+msgid "Next, execute the following commands:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1027
+#, no-wrap
+msgid ""
+"# sysrc syslogd_enable=\"YES\"\n"
+"# sysrc syslogd_flags=\"-a logclient.example.com -v -v\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1033
+msgid ""
+"The first entry starts syslogd at system boot. The second entry allows log "
+"entries from the specified client. The `-v -v` increases the verbosity of "
+"logged messages. This is useful for tweaking facilities as administrators "
+"are able to see what type of messages are being logged under each facility."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1037
+msgid ""
+"Multiple `-a` options may be specified to allow logging from multiple "
+"clients. IP addresses and whole netblocks may also be specified. Refer to "
+"man:syslogd[8] for a full list of possible options."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1039
+msgid "Finally, create the log file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1043
+#, no-wrap
+msgid "# touch /var/log/logclient.log\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1046
+msgid "At this point, syslogd should be restarted and verified:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1051
+#, no-wrap
+msgid ""
+"# service syslogd restart\n"
+"# pgrep syslog\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1055
+msgid ""
+"If a PID is returned, the server restarted successfully, and client "
+"configuration can begin. If the server did not restart, consult [."
+"filename]#/var/log/messages# for the error."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/config/_index.adoc:1056
+#, no-wrap
+msgid "Log Client Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1060
+msgid ""
+"A logging client sends log entries to a logging server on the network. The "
+"client also keeps a local copy of its own logs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1062
+msgid ""
+"Once a logging server has been configured, execute the following commands on "
+"the logging client:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1067
+#, no-wrap
+msgid ""
+"# sysrc syslogd_enable=\"YES\"\n"
+"# sysrc syslogd_flags=\"-s -v -v\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1071
+msgid ""
+"The first entry enables syslogd on boot up. The second entry prevents logs "
+"from being accepted by this client from other hosts (`-s`) and increases the "
+"verbosity of logged messages."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1074
+msgid ""
+"Next, define the logging server in the client's [.filename]#/etc/syslog."
+"conf#. In this example, all logged facilities are sent to a remote system, "
+"denoted by the `@` symbol, with the specified hostname:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1078
+#, no-wrap
+msgid "*.* @logserv.example.com\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1081
+msgid "After saving the edit, restart syslogd for the changes to take effect:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1085
+#: documentation/content/en/books/handbook/config/_index.adoc:1116
+#: documentation/content/en/books/handbook/config/_index.adoc:1139
+#, no-wrap
+msgid "# service syslogd restart\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1088
+msgid ""
+"To test that log messages are being sent across the network, use man:"
+"logger[1] on the client to send a message to syslogd:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1092
+#, no-wrap
+msgid "# logger \"Test message from logclient\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1095
+msgid ""
+"This message should now exist both in [.filename]#/var/log/messages# on the "
+"client and [.filename]#/var/log/logclient.log# on the log server."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/config/_index.adoc:1096
+#, no-wrap
+msgid "Debugging Log Servers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1102
+msgid ""
+"If no messages are being received on the log server, the cause is most "
+"likely a network connectivity issue, a hostname resolution issue, or a typo "
+"in a configuration file. To isolate the cause, ensure that both the logging "
+"server and the logging client are able to `ping` each other using the "
+"hostname specified in their [.filename]#/etc/rc.conf#. If this fails, check "
+"the network cabling, the firewall ruleset, and the hostname entries in the "
+"DNS server or [.filename]#/etc/hosts# on both the logging server and "
+"clients. Repeat until the `ping` is successful from both hosts."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1105
+msgid ""
+"If the `ping` succeeds on both hosts but log messages are still not being "
+"received, temporarily increase logging verbosity to narrow down the "
+"configuration issue. In the following example, [.filename]#/var/log/"
+"logclient.log# on the logging server is empty and [.filename]#/var/log/"
+"messages# on the logging client does not indicate a reason for the failure."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1107
+msgid ""
+"To increase debugging output, edit the `syslogd_flags` entry on the logging "
+"server and issue a restart:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1111
+#, no-wrap
+msgid "sysrc syslogd_flags=\"-d -a logclient.example.com -v -v\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1119
+msgid ""
+"Debugging data similar to the following will flash on the console "
+"immediately after the restart:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1130
+#, no-wrap
+msgid ""
+"logmsg: pri 56, flags 4, from logserv.example.com, msg syslogd: restart\n"
+"syslogd: restarted\n"
+"logmsg: pri 6, flags 4, from logserv.example.com, msg syslogd: kernel boot file is /boot/kernel/kernel\n"
+"Logging to FILE /var/log/messages\n"
+"syslogd: kernel boot file is /boot/kernel/kernel\n"
+"cvthname(192.168.1.10)\n"
+"validate: dgram from IP 192.168.1.10, port 514, name logclient.example.com;\n"
+"rejected in rule 0 due to name mismatch.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1135
+msgid ""
+"In this example, the log messages are being rejected due to a typo which "
+"results in a hostname mismatch. The client's hostname should be "
+"`logclient`, not `logclien`. Fix the typo, issue a restart, and verify the "
+"results:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1157
+#, no-wrap
+msgid ""
+"logmsg: pri 56, flags 4, from logserv.example.com, msg syslogd: restart\n"
+"syslogd: restarted\n"
+"logmsg: pri 6, flags 4, from logserv.example.com, msg syslogd: kernel boot file is /boot/kernel/kernel\n"
+"syslogd: kernel boot file is /boot/kernel/kernel\n"
+"logmsg: pri 166, flags 17, from logserv.example.com,\n"
+"msg Dec 10 20:55:02 <syslog.err> logserv.example.com syslogd: exiting on signal 2\n"
+"cvthname(192.168.1.10)\n"
+"validate: dgram from IP 192.168.1.10, port 514, name logclient.example.com;\n"
+"accepted in rule 0.\n"
+"logmsg: pri 15, flags 0, from logclient.example.com, msg Dec 11 02:01:28 trhodes: Test message 2\n"
+"Logging to FILE /var/log/logclient.log\n"
+"Logging to FILE /var/log/messages\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1160
+msgid ""
+"At this point, the messages are being properly received and placed in the "
+"correct file."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/config/_index.adoc:1161
+#, no-wrap
+msgid "Security Considerations"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1167
+msgid ""
+"As with any network service, security requirements should be considered "
+"before implementing a logging server. Log files may contain sensitive data "
+"about services enabled on the local host, user accounts, and configuration "
+"data. Network data sent from the client to the server will not be encrypted "
+"or password protected. If a need for encryption exists, consider using "
+"package:security/stunnel[], which will transmit the logging data over an "
+"encrypted tunnel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1175
+msgid ""
+"Local security is also an issue. Log files are not encrypted during use or "
+"after log rotation. Local users may access log files to gain additional "
+"insight into system configuration. Setting proper permissions on log files "
+"is critical. The built-in log rotator, newsyslog, supports setting "
+"permissions on newly created and rotated log files. Setting log files to "
+"mode `600` should prevent unwanted access by local users. Refer to man:"
+"newsyslog.conf[5] for additional information."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/config/_index.adoc:1177
+#, no-wrap
+msgid "Power and Resource Management"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1181
+msgid ""
+"It is important to utilize hardware resources in an efficient manner. Power "
+"and resource management allows the operating system to monitor system limits "
+"and to possibly run some actions triggered by events related to those limits."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/config/_index.adoc:1183
+#, no-wrap
+msgid "ACPI configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1186
+msgid ""
+"On FreeBSD the management of these resources is managed by the man:acpi[4] "
+"kernel device."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1190
+msgid "In FreeBSD the man:acpi[4] driver is loaded by default at system boot."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1192
+msgid ""
+"This driver *cannot be unloaded after boot* because the system bus uses it "
+"for various hardware interactions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1196
+msgid ""
+"In addition to man:acpi[4], FreeBSD has several dedicated kernel modules for "
+"various ACPI vendor subsystems. These modules will add some extra "
+"functionality like fan speed, keyboard backlit or screen brightness."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1198
+msgid "The list can be obtained by running the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1202
+#, no-wrap
+msgid "% ls /boot/kernel | grep acpi\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1221
+#, no-wrap
+msgid ""
+"acpi_asus.ko\n"
+"acpi_asus_wmi.ko\n"
+"acpi_dock.ko\n"
+"acpi_fujitsu.ko\n"
+"acpi_hp.ko\n"
+"acpi_ibm.ko\n"
+"acpi_panasonic.ko\n"
+"acpi_sony.ko\n"
+"acpi_toshiba.ko\n"
+"acpi_video.ko\n"
+"acpi_wmi.ko\n"
+"sdhci_acpi.ko\n"
+"uacpi.ko\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1224
+msgid ""
+"In the event that, for example, an IBM/Lenovo laptop is used, it will be "
+"necessary to load the module man:acpi_ibm[4] by executing the following "
+"command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1228
+#, no-wrap
+msgid "# kldload acpi_ibm\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1231
+msgid "And add this line to [.filename]#/boot/loader.conf# to load it at boot:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1235
+#, no-wrap
+msgid "acpi_ibm_load=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1243
+msgid ""
+"An alternative to the man:acpi_video[4] module is the man:backlight[9] "
+"driver. It provides a generic way for handling a panel backlight. The "
+"default GENERIC kernel includes this driver. The man:backlight[8] utility "
+"can be used to query and adjust the brightness of the panel backlight. In "
+"this example the brightness is decreased by 10%:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1247
+#, no-wrap
+msgid "% backlight decr 10\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/config/_index.adoc:1250
+#, no-wrap
+msgid "CPU Power Management"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1254
+msgid ""
+"CPU is the most consuming part of the system. Knowing how to improve CPU "
+"efficiency is a fundamental part of our system in order to save energy."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1256
+msgid ""
+"In order to make proper use of the machine's resources in a correct way, "
+"FreeBSD supports technologies such as Intel Turbo Boost, AMD Turbo Core, "
+"Intel Speed Shift among others through the use of man:powerd[8] and "
+"cpufreq[4]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1258
+msgid ""
+"The first step will be to obtain the CPU information by executing the "
+"following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1262
+#, no-wrap
+msgid "% sysctl dev.cpu.0 <.>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1265
+msgid "In this case the `0` digit represents the first core of the CPU."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1287
+#, no-wrap
+msgid ""
+"dev.cpu.0.cx_method: C1/mwait/hwc C2/mwait/hwc C3/mwait/hwc/bma\n"
+"dev.cpu.0.cx_usage_counters: 3507294 0 0\n"
+"dev.cpu.0.cx_usage: 100.00% 0.00% 0.00% last 3804us\n"
+"dev.cpu.0.cx_lowest: C3 <1>\n"
+"dev.cpu.0.cx_supported: C1/1/1 C2/2/1 C3/3/57 <2>\n"
+"dev.cpu.0.freq_levels: 2267/35000 2266/35000 1600/15000 800/12000 <3>\n"
+"dev.cpu.0.freq: 1600 <4>\n"
+"dev.cpu.0.temperature: 40.0C <5>\n"
+"dev.cpu.0.coretemp.throttle_log: 0\n"
+"dev.cpu.0.coretemp.tjmax: 105.0C\n"
+"dev.cpu.0.coretemp.resolution: 1\n"
+"dev.cpu.0.coretemp.delta: 65\n"
+"dev.cpu.0.%parent: acpi0\n"
+"dev.cpu.0.%pnpinfo: _HID=none _UID=0 _CID=none\n"
+"dev.cpu.0.%location: handle=\\_PR_.CPU0\n"
+"dev.cpu.0.%driver: cpu\n"
+"dev.cpu.0.%desc: ACPI CPU\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1290
+msgid "Lowest Cx state to use for idling the CPU."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1291
+msgid "CPU supported Cx states."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1292
+msgid "Currently available levels for the CPU (frequency/power usage)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1293
+msgid "Current active CPU frequency in MHz."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1294
+msgid "Current temperature of the CPU."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1299
+msgid ""
+"If the temperature information is not displayed, load the man:coretemp[4] "
+"module. In case of using an AMD CPU, load the man:amdtemp[4] module."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1302
+msgid ""
+"Once the CPU information is available the easiest way to configure power "
+"saving is to let man:powerd[8] take over."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1304
+msgid ""
+"Enable man:powerd[8] service in [.filename]#/etc/rc.conf# to start at system "
+"boot:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1308
+#, no-wrap
+msgid "# sysrc powerd_enable=YES\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1311
+msgid ""
+"It will also be necessary to indicate certain parameters to man:powerd[8] to "
+"tell it how to manage the state of the CPU executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1315
+#, no-wrap
+msgid "# sysrc powerd_flags=\"-a hiadaptive -i 25 -r 85 -N\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1318
+msgid "`-a`: Selects the mode to use while on AC power."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1319
+msgid "`hiadaptive`: Operation mode. More info at man:powerd[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1320
+msgid ""
+"`-i`: Specifies the CPU load percent level when adaptive mode should begin "
+"to degrade performance to save power."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1321
+msgid ""
+"`-r`: Specifies the CPU load percent level where adaptive mode should "
+"consider the CPU running and increase performance."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1322
+msgid ""
+"`-N`: Treat \"nice\" time as idle for the purpose of load calculation; i.e., "
+"do not increase the CPU frequency if the CPU is only busy with \"nice\" "
+"processes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1324
+msgid "And then enable the service executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1328
+#, no-wrap
+msgid "# service powerd start\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/config/_index.adoc:1331
+#, no-wrap
+msgid "CPU Frequency Control"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1336
+msgid ""
+"FreeBSD includes a generic man:cpufreq[4] driver to allow the administrator, "
+"or software such as man:powerd[8] and package:sysutils/powerdxx[], to manage "
+"the frequency of the CPU to achieve the desired balance between performance "
+"and economy. A lower setting will save power while reducing the heat "
+"generated by the CPU. A higher setting will increase performance at the "
+"cost of using additional power and generating more heat."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/config/_index.adoc:1338
+#, no-wrap
+msgid "Intel(R) Enhanced Speed Step(TM)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1343
+msgid ""
+"The Intel(R) Enhanced Speed Step(TM) driver, man:est[4], replaces the "
+"generic man:cpufreq[4] driver for CPUs that provide this feature. The CPU "
+"frequency can be statically adjusted using man:sysctl[8], or with the `/etc/"
+"rc.d/power_profile` startup script. Additional software, such as man:"
+"powerd[8] or package:sysutils/powerdxx[], can be used to automatically "
+"adjust the CPU frequency based on processor utilization."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1345
+msgid ""
+"Each supported frequency, along with its expected power consumption, can be "
+"listed by examining the man:sysctl[3] tree:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1349
+#, no-wrap
+msgid "# sysctl dev.cpufreq.0.freq_driver dev.cpu.0.freq_levels dev.cpu.0.freq\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1358
+#, no-wrap
+msgid ""
+"dev.cpufreq.0.freq_driver: est0\n"
+"dev.cpu.0.freq_levels: 3001/53000 3000/53000 2900/50301 2700/46082 2600/43525 2400/39557 2300/37137 2100/33398 2000/31112 1800/27610 1700/25455 1500/22171 1400/20144 1200/17084 1100/15181 900/12329 800/10550\n"
+"dev.cpu.0.freq: 800\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1361
+msgid ""
+"A frequency 1 MHz higher than the maximum frequency of the CPU indicates the "
+"Intel(R) Turbo Boost(TM) feature."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/config/_index.adoc:1363
+#, no-wrap
+msgid "Intel Speed Shift(TM)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1369
+msgid ""
+"Users running newer Intel(R) CPUs may find some differences in dynamic "
+"frequency control when upgrading to FreeBSD 13. A new driver for the "
+"Intel(R) Speed Shift(TM) feature set, available on certain SKUs, exposes the "
+"ability for the hardware to dynamically vary the core frequencies, including "
+"on a per core basis. FreeBSD 13 comes with the man:hwpstate_intel[4] driver "
+"to automatically enable Speed Shift(TM) control on equipped CPUs, replacing "
+"the older Enhanced Speed Step(TM) man:est[4] driver. The man:sysctl[8] `dev."
+"cpufreq.%d.freq_driver` will indicate if the system is using Speed Shift."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1371
+msgid ""
+"To determine which frequency control driver is being used, examining the "
+"`dev.cpufreq.0.freq_driver` oid."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1375
+#, no-wrap
+msgid "# sysctl dev.cpufreq.0.freq_driver\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1382
+#, no-wrap
+msgid "dev.cpufreq.0.freq_driver: hwpstate_intel0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1386
+msgid ""
+"This indicates that the new man:hwpstate_intel[4] driver is in use. On such "
+"systems, the oid `dev.cpu.%d.freq_levels` will show only the maximum CPU "
+"frequency, and will indicate a power consumption level of `-1`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1388
+msgid ""
+"The current CPU frequency can be determined by examining the `dev.cpu.%d."
+"freq` oid."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1392
+#, no-wrap
+msgid "# sysctl dev.cpu.0.freq_levels dev.cpu.0.freq\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1400
+#, no-wrap
+msgid ""
+"dev.cpu.0.freq_levels: 3696/-1\n"
+"dev.cpu.0.freq: 898\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1403
+msgid ""
+"For more information, including on how to balance performance and energy "
+"use, and on how to disable this driver, refer to the man page man:"
+"hwpstate_intel[4]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1407
+msgid ""
+"Users accustomed to using man:powerd[8] or package:sysutils/powerdxx[] will "
+"find these utilities have been superseded by the man:hwpstate_intel[4] "
+"driver and no longer work as expected."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/config/_index.adoc:1410
+#, no-wrap
+msgid "Graphics Card Power Management"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1415
+msgid ""
+"Graphics cards have become a fundamental part of computing in recent years. "
+"Some graphics cards may have excessive power consumption. FreeBSD allows "
+"certain configurations to improve power consumption."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1417
+msgid ""
+"In case of using a Intel(R) graphics card with the package:graphics/drm-"
+"kmod[] driver these options can be added to [.filename]#/boot/loader.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1423
+#, no-wrap
+msgid ""
+"compat.linuxkpi.fastboot=1 <.>\n"
+"compat.linuxkpi.enable_dc=2 <.>\n"
+"compat.linuxkpi.enable_fbc=1 <.>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1426
+msgid "Try to skip unnecessary mode sets at boot time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1427
+msgid "Enable power-saving display C-states."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1428
+msgid "Enable frame buffer compression for power savings"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/config/_index.adoc:1429
+#, no-wrap
+msgid "Suspend/Resume"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1432
+msgid ""
+"The suspend/resume function allows the machine to be kept in a state in "
+"which there is no a big energy consumption and allows the system to be "
+"resumed without having to lose the state of the running programs."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1437
+msgid ""
+"In order for the suspend/resume functionality to work correctly the graphics "
+"drivers must be loaded on the system. In non-KMS-supported graphics cards "
+"man:sc[4] must be used not to break the suspend/resume functionality."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1439
+msgid ""
+"More information about which driver to use and how to configure it can be "
+"found at the crossref:x11[x11, The X Window System chapter]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1442
+msgid "man:acpi[4] supports the next list of sleep states:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/config/_index.adoc:1443
+#, no-wrap
+msgid "Supported Sleep States"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:1448
+#, no-wrap
+msgid "S1"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:1450
+#, no-wrap
+msgid "Quick suspend to RAM. The CPU enters a lower power state, but most peripherals are left running."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:1451
+#, no-wrap
+msgid "S2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:1453
+#, no-wrap
+msgid "Lower power state than S1, but with the same basic characteristics. Not supported by many systems."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:1454
+#, no-wrap
+msgid "S3 (Sleep mode)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:1456
+#, no-wrap
+msgid "Suspend to RAM. Most devices are powered off, and the system stops running except for memory refresh."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:1457
+#, no-wrap
+msgid "S4 (Hibernation)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:1459
+#, no-wrap
+msgid "Suspend to disk. All devices are powered off, and the system stops running. When resuming, the system starts as if from a cold power on. *Not yet supported by FreeBSD*."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:1460
+#, no-wrap
+msgid "S5"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/config/_index.adoc:1462
+#, no-wrap
+msgid "System shuts down cleanly and powers off."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/config/_index.adoc:1465
+#, no-wrap
+msgid "Configuring Suspend/Resume"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1468
+msgid ""
+"The first step will be to know which type of sleep states supports the "
+"hardware we are using executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1472
+#, no-wrap
+msgid "% sysctl hw.acpi.supported_sleep_state\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1479
+#, no-wrap
+msgid "hw.acpi.supported_sleep_state: S3 S4 S5\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1484
+msgid "As stated above FreeBSD does *not* yet support the `S4` state."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1487
+msgid ""
+"man:acpiconf[8] can be used to check if the `S3` state works correctly by "
+"running the following command, if it succeeds, the screen should go black "
+"and the machine will turn off:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1491
+#, no-wrap
+msgid "# acpiconf -s 3\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1494
+msgid ""
+"In the vast majority of cases the Suspend/Resume functionality wants to be "
+"used on a laptop."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1496
+msgid ""
+"FreeBSD can be configured to enter the `S3` state when closing the lid by "
+"adding the following line to the [.filename]#/etc/sysctl.conf# file."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1500
+#, no-wrap
+msgid "hw.acpi.lid_switch_state=S3\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/config/_index.adoc:1503
+#, no-wrap
+msgid "Troubleshooting in Suspend/Resume"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1507
+msgid ""
+"A lot of effort has been made to make the Suspend and Resume functions work "
+"properly and in the best way on FreeBSD. But currently the Suspend and "
+"Resume functions only work properly on some specific laptops."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1509
+msgid "Some checks can be done in case it doesn't work properly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1512
+msgid ""
+"In some cases it is enough to turn off the bluetooth. In others it is "
+"enough loading the correct driver for the graphics card, etc."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1514
+msgid ""
+"In case it doesn't work correctly, some tips can be found on the FreeBSD "
+"Wiki in the section link:https://wiki.freebsd.org/SuspendResume[Suspend/"
+"Resume]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/config/_index.adoc:1516
+#, no-wrap
+msgid "Adding Swap Space"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1520
+msgid ""
+"Sometimes a FreeBSD system requires more swap space. This section describes "
+"two methods to increase swap space: adding swap to an existing partition or "
+"new hard drive, and creating a swap file on an existing file system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1522
+msgid ""
+"For information on how to encrypt swap space, which options exist, and why "
+"it should be done, refer to crossref:disks[swap-encrypting,“Encrypting "
+"Swap”]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/config/_index.adoc:1524
+#, no-wrap
+msgid "Swap on a New Hard Drive or Existing Partition"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1528
+msgid ""
+"Adding a new drive for swap gives better performance than using a partition "
+"on an existing drive. Setting up partitions and drives is explained in "
+"crossref:disks[disks-adding,\"Adding Disks\"] while crossref:"
+"bsdinstall[configtuning-initial,\"Designing the Partition Layout\"] "
+"discusses partition layouts and swap partition size considerations."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1534
+msgid ""
+"It is possible to use any partition not currently mounted, even if it "
+"already contains data. Using `swapon` on a partition that contains data "
+"will overwrite and destroy that data. Make sure that the partition to be "
+"added as swap is really the intended partition before running `swapon`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1537
+msgid ""
+"man:swapon[8] can be used to add a swap partition to the system executing "
+"the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1541
+#, no-wrap
+msgid "# swapon /dev/ada1p2\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1544
+msgid ""
+"To automatically add this swap partition on boot, add an entry to [."
+"filename]#/etc/fstab#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1548
+#, no-wrap
+msgid "/dev/ada1p2 none swap sw 0 0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1551
+msgid ""
+"See man:fstab[5] for an explanation of the entries in [.filename]#/etc/"
+"fstab#."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/config/_index.adoc:1553
+#, no-wrap
+msgid "Creating a Swap File"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1557
+msgid "These examples create a 512M swap file called [.filename]#/usr/swap0#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1561
+msgid ""
+"Swap files on ZFS file systems are strongly discouraged, as swapping can "
+"lead to system hangs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1564
+msgid "The first step is to create the swap file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1568
+#, no-wrap
+msgid "# dd if=/dev/zero of=/usr/swap0 bs=1m count=512\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1571
+msgid "The second step is to put the proper permissions on the new file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1575
+#, no-wrap
+msgid "# chmod 0600 /usr/swap0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1578
+msgid ""
+"The third step is to inform the system about the swap file by adding a line "
+"to [.filename]#/etc/fstab#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1582
+#, no-wrap
+msgid "md none swap sw,file=/usr/swap0,late 0 0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/config/_index.adoc:1585
+msgid ""
+"Swap space will be added on system startup. To add swap space immediately, "
+"use man:swapon[8]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/config/_index.adoc:1589
+#, no-wrap
+msgid "# swapon -aL\n"
+msgstr ""
diff --git a/documentation/content/en/books/handbook/cutting-edge/_index.adoc b/documentation/content/en/books/handbook/cutting-edge/_index.adoc
index 2dc1343ef9..00997b38aa 100644
--- a/documentation/content/en/books/handbook/cutting-edge/_index.adoc
+++ b/documentation/content/en/books/handbook/cutting-edge/_index.adoc
@@ -1,13 +1,13 @@
---
-title: Chapter 24. Updating and Upgrading FreeBSD
+title: Chapter 26. Updating and Upgrading FreeBSD
part: Part III. System Administration
prev: books/handbook/l10n
next: books/handbook/dtrace
description: Information about how to keep a FreeBSD system up-to-date with freebsd-update or Git, how to rebuild and reinstall the entire base system, etc
tags: ["updating", "upgrading", "documentation", "FreeBSD-STABLE", "FreeBSD-CURRENT", "Security Patches"]
showBookMenu: true
-weight: 28
-path: "/books/handbook/"
+weight: 30
+path: "/books/handbook/cutting-edge/"
---
[[updating-upgrading]]
@@ -18,7 +18,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 24
+:sectnumoffset: 26
:partnums:
:source-highlighter: rouge
:experimental:
@@ -146,10 +146,9 @@ MergeChanges /etc/ /var/named/etc/ /boot/device.hints
....
List of directories with configuration files that `freebsd-update` should attempt to merge.
-The file merge process is a series of man:diff[1] patches similar to man:mergemaster[8], but with fewer options.
+The file merge process is a series of man:diff[1] patches.
Merges are either accepted, open an editor, or cause `freebsd-update` to abort.
When in doubt, backup [.filename]#/etc# and just accept the merges.
-See man:mergemaster[8] for more information about `mergemaster`.
[.programlisting]
....
@@ -173,6 +172,8 @@ In cases where the user is doing a version upgrade, this location should have at
When this option is set to `yes`, `freebsd-update` will assume that the `Components` list is complete and will not attempt to make changes outside of the list.
Effectively, `freebsd-update` will attempt to update every file which belongs to the `Components` list.
+Refer to man:freebsd-update.conf[5] for more details.
+
[[freebsdupdate-security-patches]]
=== Applying Security Patches
@@ -180,7 +181,7 @@ The process of applying FreeBSD security patches has been simplified, allowing a
More information about FreeBSD security advisories can be found in crossref:security[security-advisories,"FreeBSD Security Advisories"].
FreeBSD security patches may be downloaded and installed using the following commands.
-The first command will determine if any outstanding patches are available, and if so, will list the files that will be modifed if the patches are applied.
+The first command will determine if any outstanding patches are available, and if so, will list the files that will be modified if the patches are applied.
The second command will apply the patches.
[source,shell]
@@ -243,11 +244,35 @@ Rebuilding a custom kernel, even if nothing else changed, allows `uname` to accu
This is particularly helpful when maintaining multiple systems, as it allows for a quick assessment of the updates installed in each one.
[[freebsdupdate-upgrade]]
-=== Performing Major and Minor Version Upgrades
+=== Performing Minor and Major Version Upgrades
+
+Upgrades from one minor version of FreeBSD to another are called _minor version_ upgrades. An example:
+
+- FreeBSD 13.1 to 13.2.
+
+_Major version_ upgrades increase the major version number. An example:
+
+- FreeBSD 13.2 to 14.0.
+
+Both types of upgrade can be performed by providing `freebsd-update` with a release version target.
+
+[WARNING]
+====
+After each new `RELEASE`, FreeBSD package build servers will, for a limited period, *not* use the newer version of the operating system.
+This provides continuity for the many users who do not upgrade immediately after a release announcement.
+For example:
+
+* packages for users of 13.1 and 13.2 will be built on a server running 13.1, until 13.1 reaches end of life
+
+-- and, critically:
+
+* a kernel module that is built on 13.1 might *not* be suitable for 13.2.
+
+So, with any minor or major OS upgrade, if your package requirements include any kernel module:
-Upgrades from one minor version of FreeBSD to another, like from FreeBSD 9.0 to FreeBSD 9.1, are called _minor version_ upgrades.
-_Major version_ upgrades occur when FreeBSD is upgraded from one major version to another, like from FreeBSD 9.X to FreeBSD 10.X.
-Both types of upgrades can be performed by providing `freebsd-update` with a release version target.
+* *be prepared to build the module from source*.
+
+====
[NOTE]
====
@@ -255,11 +280,19 @@ If the system is running a custom kernel, make sure that a copy of the [.filenam
Refer to <<freebsd-update-custom-kernel-9x>> for instructions on how to get a copy of the [.filename]#GENERIC# kernel.
====
-The following command, when run on a FreeBSD 9.0 system, will upgrade it to FreeBSD 9.1:
+Before upgrading to a new version, ensure the existing FreeBSD installation is up to date with respect to security and errata patches:
[source,shell]
....
-# freebsd-update -r 9.1-RELEASE upgrade
+# freebsd-update fetch
+# freebsd-update install
+....
+
+The following command, when run on a FreeBSD 13.1 system, will upgrade it to FreeBSD 13.2:
+
+[source,shell]
+....
+# freebsd-update -r 13.2-RELEASE upgrade
....
After the command has been received, `freebsd-update` will evaluate the configuration file and current system in an attempt to gather the information necessary to perform the upgrade.
@@ -269,7 +302,7 @@ For example:
[source,shell]
....
Looking up update.FreeBSD.org mirrors... 1 mirrors found.
-Fetching metadata signature for 9.0-RELEASE from update1.FreeBSD.org... done.
+Fetching metadata signature for 13.1-RELEASE from update1.FreeBSD.org... done.
Fetching metadata index... done.
Inspecting system... done.
@@ -294,7 +327,7 @@ When using a custom kernel, the above step will produce a warning similar to the
[source,shell]
....
WARNING: This system is running a "MYKERNEL" kernel, which is not a
-kernel configuration distributed as part of FreeBSD 9.0-RELEASE.
+kernel configuration distributed as part of FreeBSD 13.1-RELEASE.
This kernel will not be updated: you MUST update the kernel manually
before running "/usr/sbin/freebsd-update install"
....
@@ -604,7 +637,7 @@ In order to track changes for the whole source tree, subscribe to {dev-commits-s
. To install a new FreeBSD-STABLE system, install the most recent FreeBSD-STABLE release from the crossref:mirrors[mirrors,FreeBSD mirror sites] or use a monthly snapshot built from FreeBSD-STABLE. Refer to link:https://www.FreeBSD.org/snapshots/[www.freebsd.org/snapshots] for more information about snapshots.
+
To compile or upgrade an existing FreeBSD system to FreeBSD-STABLE, use `git` to check out the source for the desired branch.
-Branch names, such as `stable/9`, are listed at link:https://www.FreeBSD.org/releng/[www.freebsd.org/releng].
+Branch names, such as `stable/13`, are listed at link:https://www.FreeBSD.org/releng/[www.freebsd.org/releng].
. Before compiling or upgrading to FreeBSD-STABLE , read [.filename]#/usr/src/Makefile# carefully and follow the instructions in <<makeworld>>. Read the {freebsd-stable} and [.filename]#/usr/src/UPDATING# to keep up-to-date on other bootstrapping procedures that sometimes become necessary on the road to the next release.
[[translate-n-number]]
@@ -614,9 +647,10 @@ FreeBSD provides version information compiled into the kernel.
man:uname[1] retrieves this information, for example:
[source,shell]
....
-% uname -a
+% uname -v
FreeBSD 14.0-CURRENT #112 main-n247514-031260d64c18: Tue Jun 22 20:43:19 MDT 2021 fred@machine:/usr/home/fred/obj/usr/home/fred/git/head/amd64.amd64/sys/FRED
....
+The final field gives information regarding the kernel name, the person that built it, and the location that it was compiled in.
Looking at the 4th field, it is made up of several parts:
[source,shell]
....
@@ -665,13 +699,29 @@ The build process takes longer to update a system than just installing binary up
This is a quick reference for the typical steps used to update FreeBSD by building from source.
Later sections describe the process in more detail.
+[WARNING]
+====
+When switching from man:mergemaster[8] to man:etcupdate[8], the first run might merge changes incorrectly generating spurious conflicts.
+To prevent this, perform the following steps *before* updating sources and building the new world:
+
+[source,shell]
+....
+# etcupdate extract <.>
+# etcupdate diff <.>
+....
+
+<.> Bootstrap the database of stock [.filename]#/etc# files; for more information see man:etcupdate[8].
+
+<.> Check the diff after bootstrapping. Trim any local changes that are no longer needed to reduce the chance of conflicts in future updates.
+====
+
[.procedure]
====
* Update and Build
+
[source,shell]
....
-# git pull /usr/src <.>
+# git pull -C /usr/src <.>
check /usr/src/UPDATING <.>
# cd /usr/src <.>
# make -j4 buildworld <.>
@@ -732,7 +782,7 @@ This indicates that [.filename]#/usr/src/# is under version control and can be u
[[synching]]
[source,shell]
....
-# git pull /usr/src
+# git pull -C /usr/src
....
The update process can take some time if the directory has not been updated recently.
@@ -740,16 +790,17 @@ After it finishes, the source code is up to date and the build process described
[NOTE]
====
-*Obtaining the Source:* +
+Obtaining the source:
If the output says `fatal: not a git repository`, the files there are missing or were installed with a different method.
A new checkout of the source is required.
+====
[[updating-src-obtaining-src-repopath]]
.FreeBSD Versions and Repository Branches
[cols="10%,10%,80%", options="header"]
|===
-| uname -r Output
+| uname&#160;&#8209;r Output
| Repository Path
| Description
@@ -775,21 +826,21 @@ Determine which version of FreeBSD is being used with man:uname[1]:
[source,shell]
....
# uname -r
-10.3-RELEASE
+13.2-RELEASE
....
-Based on <<updating-src-obtaining-src-repopath>>, the source used to update `10.3-RELEASE` has a repository path of `releng/10.3`. That path is used when checking out the source:
+Based on <<updating-src-obtaining-src-repopath>>, the source used to update `13.2-RELEASE` has a repository path of `releng/13.2`.
+That path is used when checking out the source:
[source,shell]
....
# mv /usr/src /usr/src.bak <.>
-# git clone --branch releng/10.3 https://git.FreeBSD.org/src.git /usr/src <.>
+# git clone --branch releng/13.2 https://git.FreeBSD.org/src.git /usr/src <.>
....
<.> Move the old directory out of the way. If there are no local modifications in this directory, it can be deleted.
<.> The path from <<updating-src-obtaining-src-repopath>> is added to the repository URL. The third parameter is the destination directory for the source code on the local system.
-====
[[updating-src-building]]
=== Building from Source
@@ -933,7 +984,7 @@ Any modified configuration files are merged with the new versions, outdated libr
man:etcupdate[8] is a tool for managing updates to files that are not updated as part of an installworld such as files located in [.filename]#/etc/#.
It manages updates by doing a three-way merge of changes made to these files against the local versions.
-It is also designed to minimize the amount of user intervention, in contrast to man:mergemaster[8]'s interactive prompts.
+man:etcupdate[8] is designed to minimize the amount of user intervention.
[NOTE]
====
@@ -966,26 +1017,11 @@ To prevent this, perform the following steps *before* updating sources and build
# etcupdate diff <.>
....
-<.> Bootstrap the database of stock [.filename]#/etc# files, for more information see man:etcupdate[8].
+<.> Bootstrap the database of stock [.filename]#/etc# files; for more information see man:etcupdate[8].
<.> Check the diff after bootstrapping. Trim any local changes that are no longer needed to reduce the chance of conflicts in future updates.
====
-[[updating-src-completing-merge-mergemaster]]
-==== Merging Configuration Files with man:mergemaster[8]
-
-man:mergemaster[8] provides a way to merge changes that have been made to system configuration files with new versions of those files.
-man:mergemaster[8] is an alternative to the preferred man:etcupdate[8]
-With `-Ui`, man:mergemaster[8] automatically updates files that have not been user-modified and installs new files that are not already present:
-
-[source,shell]
-....
-# mergemaster -Ui
-....
-
-If a file must be manually merged, an interactive display allows the user to choose which portions of the files are kept.
-See man:mergemaster[8] for more information.
-
[[updating-src-completing-check-old]]
==== Checking for Outdated Files and Libraries
@@ -1077,7 +1113,7 @@ On the build machine, build the kernel and world as described in <<makeworld>>,
but do not install anything on the build machine.
Instead, install the built kernel on the test machine.
On the test machine, mount [.filename]#/usr/src# and [.filename]#/usr/obj# via NFS.
-Then, run `shutdown now` to go to single-user mode in order to install the new kernel and world and run `mergemaster` as usual.
+Then, run `shutdown now` to go to single-user mode in order to install the new kernel and world and run `etcupdate` as usual.
When done, reboot to return to normal multi-user operations.
After verifying that everything on the test machine is working properly,
@@ -1090,3 +1126,49 @@ set `DISTDIR` to a common shared directory that is writable by whichever user `r
Each machine should set `WRKDIRPREFIX` to a local build directory, if ports are to be built locally.
Alternately, if the build system is to build and distribute packages to the machines in the build set,
set `PACKAGES` on the build system to a directory similar to `DISTDIR`.
+
+[[building-on-non-freebsd-hosts]]
+== Building on non-FreeBSD Hosts
+
+Historically, building FreeBSD required a FreeBSD host.
+Nowadays, the FreeBSD can be build on Linux distributions and macOS.
+
+To build FreeBSD on non-FreeBSD hosts, the recommendation is to use the `tools/build/make.py` script.
+This script acts as a wrapper around `bmake`, which is the make implementation used by FreeBSD.
+It ensures that the necessary tooling, including the actual FreeBSD's man:make[1], is bootstrapped and that the build environment is properly configured.
+In particular, it sets the external toolchain variables, such as `XCC`, `XLD`, and others.
+Additionally, the script can pass any additional command arguments, such as `-j 4` for parallel builds or specific make targets, to `bmake`.
+
+[NOTE]
+====
+A recent version of `bmake` can be used instead of the `tools/build/make.py` script as well.
+In that case, however, required environment variables need to be set manually (the easiest way to obtain a list of them is by running `tools/build/make.py --debug`).
+====
+
+Otherwise, the list of prerequisites for building FreeBSD is rather short.
+In fact, it boils down to installing a couple of dependencies.
+
+On macOS, the only dependency LLVM.
+The necessary dependencies can be installed with package manager (e.g., link:https://brew.sh/[Homebrew]):
+
+[source,shell]
+....
+brew install llvm
+....
+
+On a Linux distributions, install link:https://clang.llvm.org/[Clang] version 10.0 or newer and the headers for libarchive and libbz2 (often packaged as libarchive-dev and libbz2-dev).
+
+Once the dependencies are installed, the host should be able to build FreeBSD.
+
+For example, the following `tools/build/make.py` invocation builds the world:
+
+[source,shell]
+....
+MAKEOBJDIRPREFIX=/tmp/obj tools/build/make.py -j 8 TARGET=arm64 TARGET_ARCH=aarch64 buildworld
+....
+
+It builds the world for target `aarch64:arm64` on 8 CPUs and uses [.filename]#/tmp/obj# for object files.
+Note that the variables `MAKEOBJDIRPREFIX`, `TARGET`, and `TARGET_ARCH` are mandatory when building on non-FreeBSD hosts.
+Also, make sure to create the object directory pointed to by the `MAKEOBJDIRPREFIX` environment variable.
+
+Refer to man:arch[7] and man:build[7] for more details.
diff --git a/documentation/content/en/books/handbook/cutting-edge/_index.po b/documentation/content/en/books/handbook/cutting-edge/_index.po
new file mode 100644
index 0000000000..54542ba87f
--- /dev/null
+++ b/documentation/content/en/books/handbook/cutting-edge/_index.po
@@ -0,0 +1,2380 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1
+#, no-wrap
+msgid "Information about how to keep a FreeBSD system up-to-date with freebsd-update or Git, how to rebuild and reinstall the entire base system, etc"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1
+#, no-wrap
+msgid "Part III. System Administration"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1
+#, no-wrap
+msgid "Chapter 26. Updating and Upgrading FreeBSD"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:14
+#, no-wrap
+msgid "Updating and Upgrading FreeBSD"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:59
+msgid ""
+"FreeBSD is under constant development between releases. Some people prefer "
+"to use the officially released versions, while others prefer to keep in sync "
+"with the latest developments. However, even official releases are often "
+"updated with security and other critical fixes. Regardless of the version "
+"used, FreeBSD provides all the necessary tools to keep the system updated, "
+"and allows for easy upgrades between versions. This chapter describes how "
+"to track the development system and the basic tools for keeping a FreeBSD "
+"system up-to-date."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:61
+msgid "After reading this chapter, you will know:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:63
+msgid "How to keep a FreeBSD system up-to-date with freebsd-update or Git."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:64
+msgid ""
+"How to compare the state of an installed system against a known pristine "
+"copy."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:65
+msgid ""
+"How to keep the installed documentation up-to-date with Git or documentation "
+"ports."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:66
+msgid ""
+"The difference between the two development branches: FreeBSD-STABLE and "
+"FreeBSD-CURRENT."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:67
+msgid "How to rebuild and reinstall the entire base system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:69
+msgid "Before reading this chapter, you should:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:71
+msgid ""
+"Properly set up the network connection (crossref:advanced-"
+"networking[advanced-networking,Advanced Networking])."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:72
+msgid ""
+"Know how to install additional third-party software (crossref:ports[ports,"
+"Installing Applications: Packages and Ports])."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:77
+msgid ""
+"Throughout this chapter, `git` is used to obtain and update FreeBSD "
+"sources. Optionally, the package:devel/git[] port or package may be used."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:80
+#, no-wrap
+msgid "FreeBSD Update"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:84
+msgid ""
+"Applying security patches in a timely manner and upgrading to a newer "
+"release of an operating system are important aspects of ongoing system "
+"administration. FreeBSD includes a utility called `freebsd-update` which "
+"can be used to perform both these tasks."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:88
+msgid ""
+"This utility supports binary security and errata updates to FreeBSD, without "
+"the need to manually compile and install the patch or a new kernel. Binary "
+"updates are available for all architectures and releases currently supported "
+"by the security team. The list of supported releases and their estimated "
+"end-of-life dates are listed at https://www.FreeBSD.org/security/[https://"
+"www.FreeBSD.org/security/]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:92
+msgid ""
+"This utility also supports operating system upgrades to minor point releases "
+"as well as upgrades to another release branch. Before upgrading to a new "
+"release, review its release announcement as it contains important "
+"information pertinent to the release. Release announcements are available "
+"from https://www.FreeBSD.org/releases/[https://www.FreeBSD.org/releases/]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:96
+msgid ""
+"If a man:crontab[5] utilizing the features of man:freebsd-update[8] exists, "
+"it must be disabled before upgrading the operating system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:99
+msgid ""
+"This section describes the configuration file used by `freebsd-update`, "
+"demonstrates how to apply a security patch and how to upgrade to a minor or "
+"major operating system release, and discusses some of the considerations "
+"when upgrading the operating system."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:101
+#, no-wrap
+msgid "The Configuration File"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:106
+msgid ""
+"The default configuration file for `freebsd-update` works as-is. Some users "
+"may wish to tweak the default configuration in [.filename]#/etc/freebsd-"
+"update.conf#, allowing better control of the process. The comments in this "
+"file explain the available options, but the following may require a bit more "
+"explanation:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:111
+#, no-wrap
+msgid ""
+"# Components of the base system which should be kept updated.\n"
+"Components world kernel\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:118
+msgid ""
+"This parameter controls which parts of FreeBSD will be kept up-to-date. The "
+"default is to update the entire base system and the kernel. Individual "
+"components can instead be specified, such as `src/base` or `src/sys`. "
+"However, the best option is to leave this at the default as changing it to "
+"include specific items requires every needed item to be listed. Over time, "
+"this could have disastrous consequences as source code and binaries may "
+"become out of sync."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:124
+#, no-wrap
+msgid ""
+"# Paths which start with anything matching an entry in an IgnorePaths\n"
+"# statement will be ignored.\n"
+"IgnorePaths /boot/kernel/linker.hints\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:128
+msgid ""
+"To leave specified directories, such as [.filename]#/bin# or [.filename]#/"
+"sbin#, untouched during the update process, add their paths to this "
+"statement. This option may be used to prevent `freebsd-update` from "
+"overwriting local modifications."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:135
+#, no-wrap
+msgid ""
+"# Paths which start with anything matching an entry in an UpdateIfUnmodified\n"
+"# statement will only be updated if the contents of the file have not been\n"
+"# modified by the user (unless changes are merged; see below).\n"
+"UpdateIfUnmodified /etc/ /var/ /root/ /.cshrc /.profile\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:140
+msgid ""
+"This option will only update unmodified configuration files in the specified "
+"directories. Any changes made by the user will prevent the automatic "
+"updating of these files. There is another option, `KeepModifiedMetadata`, "
+"which will instruct `freebsd-update` to save the changes during the merge."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:146
+#, no-wrap
+msgid ""
+"# When upgrading to a new FreeBSD release, files which match MergeChanges\n"
+"# will have any local changes merged into the version from the new release.\n"
+"MergeChanges /etc/ /var/named/etc/ /boot/device.hints\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:153
+msgid ""
+"List of directories with configuration files that `freebsd-update` should "
+"attempt to merge. The file merge process is a series of man:diff[1] patches "
+"similar to man:mergemaster[8], but with fewer options. Merges are either "
+"accepted, open an editor, or cause `freebsd-update` to abort. When in "
+"doubt, backup [.filename]#/etc# and just accept the merges. See man:"
+"mergemaster[8] for more information about `mergemaster`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:159
+#, no-wrap
+msgid ""
+"# Directory in which to store downloaded updates and temporary\n"
+"# files used by FreeBSD Update.\n"
+"# WorkDir /var/db/freebsd-update\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:163
+msgid ""
+"This directory is where all patches and temporary files are placed. In "
+"cases where the user is doing a version upgrade, this location should have "
+"at least a gigabyte of disk space available."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:171
+#, no-wrap
+msgid ""
+"# When upgrading between releases, should the list of Components be\n"
+"# read strictly (StrictComponents yes) or merely as a list of components\n"
+"# which *might* be installed of which FreeBSD Update should figure out\n"
+"# which actually are installed and upgrade those (StrictComponents no)?\n"
+"# StrictComponents no\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:175
+msgid ""
+"When this option is set to `yes`, `freebsd-update` will assume that the "
+"`Components` list is complete and will not attempt to make changes outside "
+"of the list. Effectively, `freebsd-update` will attempt to update every "
+"file which belongs to the `Components` list."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:177
+msgid "Refer to man:freebsd-update.conf[5] for more details."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:179
+#, no-wrap
+msgid "Applying Security Patches"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:183
+msgid ""
+"The process of applying FreeBSD security patches has been simplified, "
+"allowing an administrator to keep a system fully patched using `freebsd-"
+"update`. More information about FreeBSD security advisories can be found in "
+"crossref:security[security-advisories,\"FreeBSD Security Advisories\"]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:187
+msgid ""
+"FreeBSD security patches may be downloaded and installed using the following "
+"commands. The first command will determine if any outstanding patches are "
+"available, and if so, will list the files that will be modified if the "
+"patches are applied. The second command will apply the patches."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:192
+#, no-wrap
+msgid ""
+"# freebsd-update fetch\n"
+"# freebsd-update install\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:196
+msgid ""
+"If the update applies any kernel patches, the system will need a reboot in "
+"order to boot into the patched kernel. If the patch was applied to any "
+"running binaries, the affected applications should be restarted so that the "
+"patched version of the binary is used."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:202
+msgid ""
+"Usually, the user needs to be prepared to reboot the system. To know if the "
+"system requires a reboot due to a kernel update, execute the commands "
+"`freebsd-version -k` and `uname -r`. Reboot the system if the outputs "
+"differ."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:205
+msgid ""
+"The system can be configured to automatically check for updates once every "
+"day by adding this entry to [.filename]#/etc/crontab#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:209
+#, no-wrap
+msgid "@daily root freebsd-update cron\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:213
+msgid ""
+"If patches exist, they will automatically be downloaded but will not be "
+"applied. The `root` user will be sent an email so that the patches may be "
+"reviewed and manually installed with `freebsd-update install`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:215
+msgid ""
+"If anything goes wrong, `freebsd-update` has the ability to roll back the "
+"last set of changes with the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:220
+#, no-wrap
+msgid ""
+"# freebsd-update rollback\n"
+"Uninstalling updates... done.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:223
+msgid ""
+"Again, the system should be restarted if the kernel or any kernel modules "
+"were modified and any affected binaries should be restarted."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:228
+msgid ""
+"Only the [.filename]#GENERIC# kernel can be automatically updated by "
+"`freebsd-update`. If a custom kernel is installed, it will have to be "
+"rebuilt and reinstalled after `freebsd-update` finishes installing the "
+"updates. The default kernel name is _GENERIC_. The man:uname[1] command "
+"may be used to verify its installation."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:234
+msgid ""
+"Always keep a copy of the [.filename]#GENERIC# kernel in [.filename]#/boot/"
+"GENERIC#. It will be helpful in diagnosing a variety of problems and in "
+"performing version upgrades. Refer to <<freebsd-update-custom-kernel-9x>> "
+"for instructions on how to get a copy of the [.filename]#GENERIC# kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:239
+msgid ""
+"Unless the default configuration in [.filename]#/etc/freebsd-update.conf# "
+"has been changed, `freebsd-update` will install the updated kernel sources "
+"along with the rest of the updates. Rebuilding and reinstalling a new "
+"custom kernel can then be performed in the usual way."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:246
+msgid ""
+"The updates distributed by `freebsd-update` do not always involve the "
+"kernel. It is not necessary to rebuild a custom kernel if the kernel "
+"sources have not been modified by `freebsd-update install`. However, "
+"`freebsd-update` will always update [.filename]#/usr/src/sys/conf/newvers."
+"sh#. The current patch level, as indicated by the `-p` number reported by "
+"`uname -r`, is obtained from this file. Rebuilding a custom kernel, even if "
+"nothing else changed, allows `uname` to accurately report the current patch "
+"level of the system. This is particularly helpful when maintaining multiple "
+"systems, as it allows for a quick assessment of the updates installed in "
+"each one."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:248
+#, no-wrap
+msgid "Performing Minor and Major Version Upgrades"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:251
+msgid ""
+"Upgrades from one minor version of FreeBSD to another are called _minor "
+"version_ upgrades. An example:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:253
+msgid "FreeBSD 13.1 to 13.2."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:255
+msgid "_Major version_ upgrades increase the major version number. An example:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:257
+msgid "FreeBSD 13.2 to 14.0."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:259
+msgid ""
+"Both types of upgrade can be performed by providing `freebsd-update` with a "
+"release version target."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:265
+msgid ""
+"After each new `RELEASE`, FreeBSD package build servers will, for a limited "
+"period, *not* use the newer version of the operating system. This provides "
+"continuity for the many users who do not upgrade immediately after a release "
+"announcement. For example:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:267
+msgid ""
+"packages for users of 13.1 and 13.2 will be built on a server running 13.1, "
+"until 13.1 reaches end of life"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:269
+msgid "and, critically:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:271
+msgid "a kernel module that is built on 13.1 might *not* be suitable for 13.2."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:273
+msgid ""
+"So, with any minor or major OS upgrade, if your package requirements include "
+"any kernel module:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:275
+#, no-wrap
+msgid "*be prepared to build the module from source*.\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:282
+msgid ""
+"If the system is running a custom kernel, make sure that a copy of the [."
+"filename]#GENERIC# kernel exists in [.filename]#/boot/GENERIC# before "
+"starting the upgrade. Refer to <<freebsd-update-custom-kernel-9x>> for "
+"instructions on how to get a copy of the [.filename]#GENERIC# kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:285
+msgid ""
+"The following command, when run on a FreeBSD 13.1 system, will upgrade it to "
+"FreeBSD 13.2:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:289
+#, no-wrap
+msgid "# freebsd-update -r 13.2-RELEASE upgrade\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:294
+msgid ""
+"After the command has been received, `freebsd-update` will evaluate the "
+"configuration file and current system in an attempt to gather the "
+"information necessary to perform the upgrade. A screen listing will display "
+"which components have and have not been detected. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:301
+#, no-wrap
+msgid ""
+"Looking up update.FreeBSD.org mirrors... 1 mirrors found.\n"
+"Fetching metadata signature for 13.1-RELEASE from update1.FreeBSD.org... done.\n"
+"Fetching metadata index... done.\n"
+"Inspecting system... done.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:307
+#, no-wrap
+msgid ""
+"The following components of FreeBSD seem to be installed:\n"
+"kernel/smp src/base src/bin src/contrib src/crypto src/etc src/games\n"
+"src/gnu src/include src/krb5 src/lib src/libexec src/release src/rescue\n"
+"src/sbin src/secure src/share src/sys src/tools src/ubin src/usbin\n"
+"world/base world/info world/lib32 world/manpages\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:311
+#, no-wrap
+msgid ""
+"The following components of FreeBSD do not seem to be installed:\n"
+"kernel/generic world/catpages world/dict world/doc world/games\n"
+"world/proflibs\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:313
+#, no-wrap
+msgid "Does this look reasonable (y/n)? y\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:317
+msgid ""
+"At this point, `freebsd-update` will attempt to download all files required "
+"for the upgrade. In some cases, the user may be prompted with questions "
+"regarding what to install or how to proceed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:319
+msgid ""
+"When using a custom kernel, the above step will produce a warning similar to "
+"the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:326
+#, no-wrap
+msgid ""
+"WARNING: This system is running a \"MYKERNEL\" kernel, which is not a\n"
+"kernel configuration distributed as part of FreeBSD 13.1-RELEASE.\n"
+"This kernel will not be updated: you MUST update the kernel manually\n"
+"before running \"/usr/sbin/freebsd-update install\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:330
+msgid ""
+"This warning may be safely ignored at this point. The updated [."
+"filename]#GENERIC# kernel will be used as an intermediate step in the "
+"upgrade process."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:339
+msgid ""
+"Once all the patches have been downloaded to the local system, they will be "
+"applied. This process may take a while, depending on the speed and workload "
+"of the machine. Configuration files will then be merged. The merging "
+"process requires some user intervention as a file may be merged or an editor "
+"may appear on screen for a manual merge. The results of every successful "
+"merge will be shown to the user as the process continues. A failed or "
+"ignored merge will cause the process to abort. Users may wish to make a "
+"backup of [.filename]#/etc# and manually merge important files, such as [."
+"filename]#master.passwd# or [.filename]#group# at a later time."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:346
+msgid ""
+"The system is not being altered yet as all patching and merging is happening "
+"in another directory. Once all patches have been applied successfully, all "
+"configuration files have been merged and it seems the process will go "
+"smoothly, the changes can be committed to disk by the user using the "
+"following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:350
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:386
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:462
+#, no-wrap
+msgid "# freebsd-update install\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:357
+msgid ""
+"The kernel and kernel modules will be patched first. If the system is "
+"running with a custom kernel, use man:nextboot[8] to set the kernel for the "
+"next boot to the updated [.filename]#/boot/GENERIC#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:361
+#, no-wrap
+msgid "# nextboot -k GENERIC\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:370
+msgid ""
+"Before rebooting with the [.filename]#GENERIC# kernel, make sure it contains "
+"all the drivers required for the system to boot properly and connect to the "
+"network, if the machine being updated is accessed remotely. In particular, "
+"if the running custom kernel contains built-in functionality usually "
+"provided by kernel modules, make sure to temporarily load these modules into "
+"the [.filename]#GENERIC# kernel using the [.filename]#/boot/loader.conf# "
+"facility. It is recommended to disable non-essential services as well as "
+"any disk and network mounts until the upgrade process is complete."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:373
+msgid "The machine should now be restarted with the updated kernel:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:377
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1097
+#, no-wrap
+msgid "# shutdown -r now\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:382
+msgid ""
+"Once the system has come back online, restart `freebsd-update` using the "
+"following command. Since the state of the process has been saved, `freebsd-"
+"update` will not start from the beginning, but will instead move on to the "
+"next phase and remove all old shared libraries and object files."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:391
+msgid ""
+"Depending upon whether any library version numbers were bumped, there may "
+"only be two install phases instead of three."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:395
+msgid ""
+"The upgrade is now complete. If this was a major version upgrade, reinstall "
+"all ports and packages as described in <<freebsdupdate-portsrebuild>>."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:397
+#, no-wrap
+msgid "Custom Kernels with FreeBSD 9.X and Later"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:402
+msgid ""
+"Before using `freebsd-update`, ensure that a copy of the [."
+"filename]#GENERIC# kernel exists in [.filename]#/boot/GENERIC#. If a custom "
+"kernel has only been built once, the kernel in [.filename]#/boot/kernel.old# "
+"is the `GENERIC` kernel. Simply rename this directory to [.filename]#/boot/"
+"GENERIC#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:406
+msgid ""
+"If a custom kernel has been built more than once or if it is unknown how "
+"many times the custom kernel has been built, obtain a copy of the `GENERIC` "
+"kernel that matches the current version of the operating system. If "
+"physical access to the system is available, a copy of the `GENERIC` kernel "
+"can be installed from the installation media:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:412
+#, no-wrap
+msgid ""
+"# mount /cdrom\n"
+"# cd /cdrom/usr/freebsd-dist\n"
+"# tar -C/ -xvf kernel.txz boot/kernel/kernel\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:415
+msgid ""
+"Alternately, the `GENERIC` kernel may be rebuilt and installed from source:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:420
+#, no-wrap
+msgid ""
+"# cd /usr/src\n"
+"# make kernel __MAKE_CONF=/dev/null SRCCONF=/dev/null\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:425
+msgid ""
+"For this kernel to be identified as the `GENERIC` kernel by `freebsd-"
+"update`, the [.filename]#GENERIC# configuration file must not have been "
+"modified in any way. It is also suggested that the kernel is built without "
+"any other special options."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:427
+msgid ""
+"Rebooting into the [.filename]#GENERIC# kernel is not required as `freebsd-"
+"update` only needs [.filename]#/boot/GENERIC# to exist."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:429
+#, no-wrap
+msgid "Upgrading Packages After a Major Version Upgrade"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:436
+msgid ""
+"Generally, installed applications will continue to work without problems "
+"after minor version upgrades. Major versions use different Application "
+"Binary Interfaces (ABIs), which will break most third-party applications. "
+"After a major version upgrade, all installed packages and ports need to be "
+"upgraded. Packages can be upgraded using `pkg upgrade`. To upgrade "
+"installed ports, use a utility such as package:ports-mgmt/portmaster[]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:440
+msgid ""
+"A forced upgrade of all installed packages will replace the packages with "
+"fresh versions from the repository even if the version number has not "
+"increased. This is required because of the ABI version change when "
+"upgrading between major versions of FreeBSD. The forced upgrade can be "
+"accomplished by performing:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:444
+#, no-wrap
+msgid "# pkg-static upgrade -f\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:447
+msgid ""
+"A rebuild of all installed applications can be accomplished with this "
+"command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:451
+#, no-wrap
+msgid "# portmaster -af\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:455
+msgid ""
+"This command will display the configuration screens for each application "
+"that has configurable options and wait for the user to interact with those "
+"screens. To prevent this behavior, and use only the default options, "
+"include `-G` in the above command."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:458
+msgid ""
+"Once the software upgrades are complete, finish the upgrade process with a "
+"final call to `freebsd-update` in order to tie up all the loose ends in the "
+"upgrade process:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:466
+msgid ""
+"If the [.filename]#GENERIC# kernel was temporarily used, this is the time to "
+"build and install a new custom kernel using the instructions in crossref:"
+"kernelconfig[kernelconfig,Configuring the FreeBSD Kernel]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:469
+msgid ""
+"Reboot the machine into the new FreeBSD version. The upgrade process is now "
+"complete."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:471
+#, no-wrap
+msgid "System State Comparison"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:475
+msgid ""
+"The state of the installed FreeBSD version against a known good copy can be "
+"tested using `freebsd-update IDS`. This command evaluates the current "
+"version of system utilities, libraries, and configuration files and can be "
+"used as a built-in Intrusion Detection System (IDS)."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:483
+msgid ""
+"This command is not a replacement for a real IDS such as package:security/"
+"snort[]. As `freebsd-update` stores data on disk, the possibility of "
+"tampering is evident. While this possibility may be reduced using `kern."
+"securelevel` and by storing the `freebsd-update` data on a read-only file "
+"system when not in use, a better solution would be to compare the system "
+"against a secure disk, such as a DVD or securely stored external USB disk "
+"device. An alternative method for providing IDS functionality using a built-"
+"in utility is described in crossref:security[security-ids,\"Binary "
+"Verification\"]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:486
+msgid ""
+"To begin the comparison, specify the output file to save the results to:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:490
+#, no-wrap
+msgid "# freebsd-update IDS >> outfile.ids\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:493
+msgid ""
+"The system will now be inspected and a lengthy listing of files, along with "
+"the SHA256 hash values for both the known value in the release and the "
+"current installation, will be sent to the specified output file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:496
+msgid ""
+"The entries in the listing are extremely long, but the output format may be "
+"easily parsed. For instance, to obtain a list of all files which differ "
+"from those in the release, issue the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:504
+#, no-wrap
+msgid ""
+"# cat outfile.ids | awk '{ print $1 }' | more\n"
+"/etc/master.passwd\n"
+"/etc/motd\n"
+"/etc/passwd\n"
+"/etc/pf.conf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:511
+msgid ""
+"This sample output has been truncated as many more files exist. Some files "
+"have natural modifications. For example, [.filename]#/etc/passwd# will be "
+"modified if users have been added to the system. Kernel modules may differ "
+"as `freebsd-update` may have updated them. To exclude specific files or "
+"directories, add them to the `IDSIgnorePaths` option in [.filename]#/etc/"
+"freebsd-update.conf#."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:513
+#, no-wrap
+msgid "Updating Bootcode"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:516
+msgid ""
+"The following manuals describe the upgrade process of bootcode and boot "
+"loaders: man:gpart[8], man:gptboot[8], man:gptzfsboot[8], and man:loader."
+"efi[8]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:518
+#, no-wrap
+msgid "Updating the Documentation Set"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:522
+msgid ""
+"Documentation is an integral part of the FreeBSD operating system. While an "
+"up-to-date version of the FreeBSD documentation is always available on the "
+"FreeBSD web site (link:https://docs.FreeBSD.org[Documentation Portal]), it "
+"can be handy to have an up-to-date, local copy of the FreeBSD website, "
+"handbooks, FAQ, and articles."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:524
+msgid ""
+"This section describes how to use either source or the FreeBSD Ports "
+"Collection to keep a local copy of the FreeBSD documentation up-to-date."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:527
+msgid ""
+"For information on editing and submitting corrections to the documentation, "
+"refer to the FreeBSD Documentation Project Primer for New Contributors "
+"(extref:{fdp-primer}[FreeBSD Documentation Project Primer for New "
+"Contributors])."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:529
+#, no-wrap
+msgid "Updating Documentation from Source"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:533
+msgid ""
+"Rebuilding the FreeBSD documentation from source requires a collection of "
+"tools which are not part of the FreeBSD base system. The required tools can "
+"be installed following extref:{fdp-primer}[these steps, overview-quick-"
+"start] from the FreeBSD Documentation Project Primer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:535
+msgid ""
+"Once installed, use `git` to fetch a clean copy of the documentation source:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:539
+#, no-wrap
+msgid "# git clone https://git.FreeBSD.org/doc.git /usr/doc\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:543
+msgid ""
+"The initial download of the documentation sources may take a while. Let it "
+"run until it completes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:545
+msgid "Future updates of the documentation sources may be fetched by running:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:549
+#, no-wrap
+msgid "# git pull\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:553
+msgid ""
+"Once an up-to-date snapshot of the documentation sources has been fetched to "
+"[.filename]#/usr/doc#, everything is ready for an update of the installed "
+"documentation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:555
+msgid "A full update may be performed by typing:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:560
+#, no-wrap
+msgid ""
+"# cd /usr/doc\n"
+"# make\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:563
+#, no-wrap
+msgid "Tracking a Development Branch"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:566
+msgid ""
+"FreeBSD has two development branches: FreeBSD-CURRENT and FreeBSD-STABLE."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:568
+msgid ""
+"This section provides an explanation of each branch and its intended "
+"audience, as well as how to keep a system up-to-date with each respective "
+"branch."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:570
+#, no-wrap
+msgid "Using FreeBSD-CURRENT"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:574
+msgid ""
+"FreeBSD-CURRENT is the \"bleeding edge\" of FreeBSD development and FreeBSD-"
+"CURRENT users are expected to have a high degree of technical skill. Less "
+"technical users who wish to track a development branch should track FreeBSD-"
+"STABLE instead."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:578
+msgid ""
+"FreeBSD-CURRENT is the very latest source code for FreeBSD and includes "
+"works in progress, experimental changes, and transitional mechanisms that "
+"might or might not be present in the next official release. While many "
+"FreeBSD developers compile the FreeBSD-CURRENT source code daily, there are "
+"short periods of time when the source may not be buildable. These problems "
+"are resolved as quickly as possible, but whether or not FreeBSD-CURRENT "
+"brings disaster or new functionality can be a matter of when the source code "
+"was synced."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:580
+msgid "FreeBSD-CURRENT is made available for three primary interest groups:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:582
+msgid ""
+"Members of the FreeBSD community who are actively working on some part of "
+"the source tree."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:583
+msgid ""
+"Members of the FreeBSD community who are active testers. They are willing to "
+"spend time solving problems, making topical suggestions on changes and the "
+"general direction of FreeBSD, and submitting patches."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:584
+msgid ""
+"Users who wish to keep an eye on things, use the current source for "
+"reference purposes, or make the occasional comment or code contribution."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:588
+msgid ""
+"FreeBSD-CURRENT should _not_ be considered a fast-track to getting new "
+"features before the next release as pre-release features are not yet fully "
+"tested and most likely contain bugs. It is not a quick way of getting bug "
+"fixes as any given commit is just as likely to introduce new bugs as to fix "
+"existing ones. FreeBSD-CURRENT is not in any way \"officially supported\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:590
+msgid "To track FreeBSD-CURRENT:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:592
+msgid ""
+"Join the {freebsd-current} and the {dev-commits-src-main} lists. This is "
+"_essential_ in order to see the comments that people are making about the "
+"current state of the system and to receive important bulletins about the "
+"current state of FreeBSD-CURRENT."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:594
+msgid ""
+"The {dev-commits-src-main} list records the commit log entry for each change "
+"as it is made, along with any pertinent information on possible side effects."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:597
+msgid ""
+"To join these lists, go to {mailing-lists}, click on the list to subscribe "
+"to, and follow the instructions. In order to track changes to the whole "
+"source tree, not just the changes to FreeBSD-CURRENT, subscribe to the {dev-"
+"commits-src-all}."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:598
+msgid ""
+"Synchronize with the FreeBSD-CURRENT sources. Typically, `git` is used to "
+"check out the -CURRENT code from the `main` branch of the FreeBSD Git "
+"repository (see crossref:mirrors[git,“Using Git”] for details)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:599
+msgid ""
+"Due to the size of the repository, some users choose to only synchronize the "
+"sections of source that interest them or which they are contributing patches "
+"to. However, users that plan to compile the operating system from source "
+"must download _all_ of FreeBSD-CURRENT, not just selected portions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:602
+msgid ""
+"Before compiling FreeBSD-CURRENT, read [.filename]#/usr/src/Makefile# very "
+"carefully and follow the instructions in <<makeworld>>. Read the {freebsd-"
+"current} and [.filename]#/usr/src/UPDATING# to stay up-to-date on other "
+"bootstrapping procedures that sometimes become necessary on the road to the "
+"next release."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:603
+msgid ""
+"Be active! FreeBSD-CURRENT users are encouraged to submit their suggestions "
+"for enhancements or bug fixes. Suggestions with accompanying code are always "
+"welcome."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:605
+#, no-wrap
+msgid "Using FreeBSD-STABLE"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:612
+msgid ""
+"FreeBSD-STABLE is the development branch from which major releases are "
+"made. Changes go into this branch at a slower pace and with the general "
+"assumption that they have first been tested in FreeBSD-CURRENT. This is "
+"_still_ a development branch and, at any given time, the sources for FreeBSD-"
+"STABLE may or may not be suitable for general use. It is simply another "
+"engineering development track, not a resource for end-users. Users who do "
+"not have the resources to perform testing should instead run the most recent "
+"release of FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:614
+msgid ""
+"Those interested in tracking or contributing to the FreeBSD development "
+"process, especially as it relates to the next release of FreeBSD, should "
+"consider following FreeBSD-STABLE."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:619
+msgid ""
+"While the FreeBSD-STABLE branch should compile and run at all times, this "
+"cannot be guaranteed. Since more people run FreeBSD-STABLE than FreeBSD-"
+"CURRENT, it is inevitable that bugs and corner cases will sometimes be found "
+"in FreeBSD-STABLE that were not apparent in FreeBSD-CURRENT. For this "
+"reason, one should not blindly track FreeBSD-STABLE. It is particularly "
+"important _not_ to update any production servers to FreeBSD-STABLE without "
+"thoroughly testing the code in a development or testing environment."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:621
+msgid "To track FreeBSD-STABLE:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:623
+msgid ""
+"Join the {freebsd-stable} in order to stay informed of build dependencies "
+"that may appear in FreeBSD-STABLE or any other issues requiring special "
+"attention. Developers will also make announcements in this mailing list when "
+"they are contemplating some controversial fix or update, giving the users a "
+"chance to respond if they have any issues to raise concerning the proposed "
+"change."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:627
+msgid ""
+"Join the relevant git list for the branch being tracked. For example, users "
+"tracking the {betarel-current-major}-STABLE branch should join the {dev-"
+"commits-src-branches}. This list records the commit log entry for each "
+"change as it is made, along with any pertinent information on possible side "
+"effects."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:630
+msgid ""
+"To join these lists, go to {mailing-lists}, click on the list to subscribe "
+"to, and follow the instructions. In order to track changes for the whole "
+"source tree, subscribe to {dev-commits-src-all}."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:631
+msgid ""
+"To install a new FreeBSD-STABLE system, install the most recent FreeBSD-"
+"STABLE release from the crossref:mirrors[mirrors,FreeBSD mirror sites] or "
+"use a monthly snapshot built from FreeBSD-STABLE. Refer to link:https://www."
+"FreeBSD.org/snapshots/[www.freebsd.org/snapshots] for more information about "
+"snapshots."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:634
+msgid ""
+"To compile or upgrade an existing FreeBSD system to FreeBSD-STABLE, use "
+"`git` to check out the source for the desired branch. Branch names, such as "
+"`stable/13`, are listed at link:https://www.FreeBSD.org/releng/[www.freebsd."
+"org/releng]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:635
+msgid ""
+"Before compiling or upgrading to FreeBSD-STABLE , read [.filename]#/usr/src/"
+"Makefile# carefully and follow the instructions in <<makeworld>>. Read the "
+"{freebsd-stable} and [.filename]#/usr/src/UPDATING# to keep up-to-date on "
+"other bootstrapping procedures that sometimes become necessary on the road "
+"to the next release."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:637
+#, no-wrap
+msgid "The N-number"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:641
+msgid ""
+"When tracking down bugs it is important to know which versions of the source "
+"code have been used to create the system exhibiting an issue. FreeBSD "
+"provides version information compiled into the kernel. man:uname[1] "
+"retrieves this information, for example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:645
+#, no-wrap
+msgid ""
+"% uname -v\n"
+"FreeBSD 14.0-CURRENT #112 main-n247514-031260d64c18: Tue Jun 22 20:43:19 MDT 2021 fred@machine:/usr/home/fred/obj/usr/home/fred/git/head/amd64.amd64/sys/FRED\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:648
+msgid ""
+"The final field gives information regarding the kernel name, the person that "
+"built it, and the location that it was compiled in. Looking at the 4th "
+"field, it is made up of several parts:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:651
+#, no-wrap
+msgid "main-n247514-031260d64c18\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:656
+#, no-wrap
+msgid ""
+"main\t\t<.>\n"
+"n247514\t\t<.>\n"
+"031260d64c18\t<.>\n"
+"\t\t<.>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:660
+msgid ""
+"Git branch name. Note: comparisons of n-numbers are only valid on branches "
+"published by the project (`main`, `stable/XX` and `releng/XX`). Local "
+"branches will have n-numbers that will overlap commits of their parent "
+"branch."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:661
+msgid ""
+"The n-number is a linear count of commits back to the start of the Git "
+"repository starting with the Git hash included in the line."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:662
+msgid "Git hash of the checked out tree"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:664
+msgid ""
+"Sometimes a suffix of `-dirty` is present when the kernel was built in a "
+"tree with uncommitted changes. It is absent in this example because the "
+"FRED kernel was built from a pristine checkout."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:667
+msgid ""
+"The `git rev-list` command is used to find the n-number corresponding to a "
+"Git hash. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:671
+#, no-wrap
+msgid ""
+"% git rev-list --first-parent --count 031260d64c18 <.>\n"
+"247514 <.>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:673
+msgid "git hash to translate (the hash from the above example is reused)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:674
+msgid "The n-number."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:680
+msgid ""
+"Usually this number is not all that important. However, when bug fixes are "
+"committed, this number makes it easy to quickly determine whether the fix is "
+"present in the currently running system. Developers will often refer to the "
+"hash of the commit (or provide a URL which has that hash), but not the n-"
+"number since the hash is the easily visible identifier for a change while "
+"the n-number is not. Security advisories and errata notices will also note "
+"an n-number, which can be directly compared against your system. When you "
+"need to use shallow Git clones, you cannot compare n-numbers reliably as the "
+"`git rev-list` command counts all the revisions in the repository which a "
+"shallow clone omits."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:682
+#, no-wrap
+msgid "Updating FreeBSD from Source"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:688
+msgid ""
+"Updating FreeBSD by compiling from source offers several advantages over "
+"binary updates. Code can be built with options to take advantage of "
+"specific hardware. Parts of the base system can be built with non-default "
+"settings, or left out entirely where they are not needed or desired. The "
+"build process takes longer to update a system than just installing binary "
+"updates, but allows complete customization to produce a tailored version of "
+"FreeBSD."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:690
+#, no-wrap
+msgid "Quick Start"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:694
+msgid ""
+"This is a quick reference for the typical steps used to update FreeBSD by "
+"building from source. Later sections describe the process in more detail."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:699
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1006
+msgid ""
+"When switching from man:mergemaster[8] to man:etcupdate[8], the first run "
+"might merge changes incorrectly generating spurious conflicts. To prevent "
+"this, perform the following steps *before* updating sources and building the "
+"new world:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:704
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1011
+#, no-wrap
+msgid ""
+"# etcupdate extract <.>\n"
+"# etcupdate diff <.>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:707
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1014
+msgid ""
+"Bootstrap the database of stock [.filename]#/etc# files; for more "
+"information see man:etcupdate[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:709
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1016
+msgid ""
+"Check the diff after bootstrapping. Trim any local changes that are no "
+"longer needed to reduce the chance of conflicts in future updates."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:714
+msgid "Update and Build"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:728
+#, no-wrap
+msgid ""
+"# git pull -C /usr/src <.>\n"
+"check /usr/src/UPDATING <.>\n"
+"# cd /usr/src <.>\n"
+"# make -j4 buildworld <.>\n"
+"# make -j4 kernel <.>\n"
+"# shutdown -r now <.>\n"
+"# etcupdate -p <.>\n"
+"# cd /usr/src <.>\n"
+"# make installworld <.>\n"
+"# etcupdate -B <.>\n"
+"# shutdown -r now <.>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:731
+msgid ""
+"Get the latest version of the source. See <<updating-src-obtaining-src>> for "
+"more information on obtaining and updating source."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:733
+msgid ""
+"Check [.filename]#/usr/src/UPDATING# for any manual steps required before or "
+"after building from source."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:735
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:745
+msgid "Go to the source directory."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:737
+msgid "Compile the world, everything except the kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:739
+msgid ""
+"Compile and install the kernel. This is equivalent to `make buildkernel "
+"installkernel`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:741
+msgid "Reboot the system to the new kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:743
+msgid ""
+"Update and merge configuration files in [.filename]#/etc/# required before "
+"installworld."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:747
+msgid "Install the world."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:749
+msgid "Update and merge configuration files in [.filename]#/etc/#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:751
+msgid "Restart the system to use the newly-built world and kernel."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:754
+#, no-wrap
+msgid "Preparing for a Source Update"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:757
+msgid ""
+"Read [.filename]#/usr/src/UPDATING#. Any manual steps that must be performed "
+"before or after an update are described in this file."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:759
+#, no-wrap
+msgid "Updating the Source"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:764
+msgid ""
+"FreeBSD source code is located in [.filename]#/usr/src/#. The preferred "
+"method of updating this source is through the Git version control system. "
+"Verify that the source code is under version control:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:771
+#, no-wrap
+msgid ""
+"# cd /usr/src\n"
+"# git remote --v\n"
+"origin https://git.freebsd.org/src.git (fetch)\n"
+"origin https://git.freebsd.org/src.git (push)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:774
+msgid ""
+"This indicates that [.filename]#/usr/src/# is under version control and can "
+"be updated with man:git[1]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:779
+#, no-wrap
+msgid "# git pull -C /usr/src\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:783
+msgid ""
+"The update process can take some time if the directory has not been updated "
+"recently. After it finishes, the source code is up to date and the build "
+"process described in the next section can begin."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:787
+msgid "Obtaining the source:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:790
+msgid ""
+"If the output says `fatal: not a git repository`, the files there are "
+"missing or were installed with a different method. A new checkout of the "
+"source is required."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:793
+#, no-wrap
+msgid "FreeBSD Versions and Repository Branches"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:797
+#, no-wrap
+msgid "uname&#160;&#8209;r Output"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:798
+#, no-wrap
+msgid "Repository Path"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:800
+#, no-wrap
+msgid "Description"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:801
+#, no-wrap
+msgid "`_X.Y_-RELEASE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:802
+#, no-wrap
+msgid "`releng/_X.Y_`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:804
+#, no-wrap
+msgid "The Release version plus only critical security and bug fix patches. This branch is recommended for most users."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:805
+#, no-wrap
+msgid "`_X.Y_-STABLE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:806
+#, no-wrap
+msgid "`stable/_X_`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:812
+#, no-wrap
+msgid ""
+"The Release version plus all additional development on that branch. _STABLE_ refers to the Applications Binary Interface (ABI) not changing, so software compiled for earlier versions still runs. For example, software compiled to run on FreeBSD 10.1 will still run on FreeBSD 10-STABLE compiled later.\n"
+"\n"
+"STABLE branches occasionally have bugs or incompatibilities which might affect users, although these are typically fixed quickly."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:813
+#, no-wrap
+msgid "`_X_-CURRENT`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:814
+#, no-wrap
+msgid "`main`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:815
+#, no-wrap
+msgid "The latest unreleased development version of FreeBSD. The CURRENT branch can have major bugs or incompatibilities and is recommended only for advanced users."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:818
+msgid "Determine which version of FreeBSD is being used with man:uname[1]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:823
+#, no-wrap
+msgid ""
+"# uname -r\n"
+"13.2-RELEASE\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:827
+msgid ""
+"Based on <<updating-src-obtaining-src-repopath>>, the source used to update "
+"`13.2-RELEASE` has a repository path of `releng/13.2`. That path is used "
+"when checking out the source:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:832
+#, no-wrap
+msgid ""
+"# mv /usr/src /usr/src.bak <.>\n"
+"# git clone --branch releng/13.2 https://git.FreeBSD.org/src.git /usr/src <.>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:835
+msgid ""
+"Move the old directory out of the way. If there are no local modifications "
+"in this directory, it can be deleted."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:837
+msgid ""
+"The path from <<updating-src-obtaining-src-repopath>> is added to the "
+"repository URL. The third parameter is the destination directory for the "
+"source code on the local system."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:839
+#, no-wrap
+msgid "Building from Source"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:844
+msgid ""
+"The _world_, or all of the operating system except the kernel, is compiled. "
+"This is done first to provide up-to-date tools to build the kernel. Then "
+"the kernel itself is built:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:850
+#, no-wrap
+msgid ""
+"# cd /usr/src\n"
+"# make buildworld\n"
+"# make buildkernel\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:853
+msgid "The compiled code is written to [.filename]#/usr/obj#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:856
+msgid ""
+"These are the basic steps. Additional options to control the build are "
+"described below."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:858
+#, no-wrap
+msgid "Performing a Clean Build"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:863
+msgid ""
+"Some versions of the FreeBSD build system leave previously-compiled code in "
+"the temporary object directory, [.filename]#/usr/obj#. This can speed up "
+"later builds by avoiding recompiling code that has not changed. To force a "
+"clean rebuild of everything, use `cleanworld` before starting a build:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:867
+#, no-wrap
+msgid "# make cleanworld\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:870
+#, no-wrap
+msgid "Setting the Number of Jobs"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:877
+msgid ""
+"Increasing the number of build jobs on multi-core processors can improve "
+"build speed. Determine the number of cores with `sysctl hw.ncpu`. "
+"Processors vary, as do the build systems used with different versions of "
+"FreeBSD, so testing is the only sure method to tell how a different number "
+"of jobs affects the build speed. For a starting point, consider values "
+"between half and double the number of cores. The number of jobs is "
+"specified with `-j`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:879
+#, no-wrap
+msgid "Increasing the Number of Build Jobs"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:883
+msgid "Building the world and kernel with four jobs:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:887
+#, no-wrap
+msgid "# make -j4 buildworld buildkernel\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:892
+#, no-wrap
+msgid "Building Only the Kernel"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:897
+msgid ""
+"A `buildworld` must be completed if the source code has changed. After "
+"that, a `buildkernel` to build a kernel can be run at any time. To build "
+"just the kernel:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:902
+#, no-wrap
+msgid ""
+"# cd /usr/src\n"
+"# make buildkernel\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:905
+#, no-wrap
+msgid "Building a Custom Kernel"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:910
+msgid ""
+"The standard FreeBSD kernel is based on a _kernel config file_ called [."
+"filename]#GENERIC#. The [.filename]#GENERIC# kernel includes the most "
+"commonly-needed device drivers and options. Sometimes it is useful or "
+"necessary to build a custom kernel, adding or removing device drivers or "
+"options to fit a specific need."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:912
+msgid ""
+"For example, someone developing a small embedded computer with severely "
+"limited RAM could remove unneeded device drivers or options to make the "
+"kernel slightly smaller."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:915
+msgid ""
+"Kernel config files are located in [.filename]#/usr/src/sys/arch/conf/#, "
+"where _arch_ is the output from `uname -m`. On most computers, that is "
+"`amd64`, giving a config file directory of [.filename]#/usr/src/sys/amd64/"
+"conf/#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:921
+msgid ""
+"[.filename]#/usr/src# can be deleted or recreated, so it is preferable to "
+"keep custom kernel config files in a separate directory, like [.filename]#/"
+"root#. Link the kernel config file into the [.filename]#conf# directory. "
+"If that directory is deleted or overwritten, the kernel config can be re-"
+"linked into the new one."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:925
+msgid ""
+"A custom config file can be created by copying the [.filename]#GENERIC# "
+"config file. In this example, the new custom kernel is for a storage "
+"server, so is named [.filename]#STORAGESERVER#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:931
+#, no-wrap
+msgid ""
+"# cp /usr/src/sys/amd64/conf/GENERIC /root/STORAGESERVER\n"
+"# cd /usr/src/sys/amd64/conf\n"
+"# ln -s /root/STORAGESERVER .\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:934
+msgid ""
+"[.filename]#/root/STORAGESERVER# is then edited, adding or removing devices "
+"or options as shown in man:config[5]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:936
+msgid ""
+"The custom kernel is built by setting `KERNCONF` to the kernel config file "
+"on the command line:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:940
+#, no-wrap
+msgid "# make buildkernel KERNCONF=STORAGESERVER\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:943
+#, no-wrap
+msgid "Installing the Compiled Code"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:946
+msgid ""
+"After the `buildworld` and `buildkernel` steps have been completed, the new "
+"kernel and world are installed:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:955
+#, no-wrap
+msgid ""
+"# cd /usr/src\n"
+"# make installkernel\n"
+"# shutdown -r now\n"
+"# cd /usr/src\n"
+"# make installworld\n"
+"# shutdown -r now\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:958
+msgid ""
+"If a custom kernel was built, `KERNCONF` must also be set to use the new "
+"custom kernel:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:967
+#, no-wrap
+msgid ""
+"# cd /usr/src\n"
+"# make installkernel KERNCONF=STORAGESERVER\n"
+"# shutdown -r now\n"
+"# cd /usr/src\n"
+"# make installworld\n"
+"# shutdown -r now\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:970
+#, no-wrap
+msgid "Completing the Update"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:974
+msgid ""
+"A few final tasks complete the update. Any modified configuration files are "
+"merged with the new versions, outdated libraries are located and removed, "
+"then the system is restarted."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:976
+#, no-wrap
+msgid "Merging Configuration Files with man:etcupdate[8]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:981
+msgid ""
+"man:etcupdate[8] is a tool for managing updates to files that are not "
+"updated as part of an installworld such as files located in [.filename]#/etc/"
+"#. It manages updates by doing a three-way merge of changes made to these "
+"files against the local versions. It is also designed to minimize the "
+"amount of user intervention, in contrast to man:mergemaster[8]'s interactive "
+"prompts."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:986
+msgid ""
+"In general, man:etcupdate[8] does not need any specific arguments for its "
+"job. There is however a handy in between command for sanity checking what "
+"will be done the first time man:etcupdate[8] is used:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:990
+#, no-wrap
+msgid "# etcupdate diff\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:993
+msgid "This command allows the user to audit configuration changes."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:996
+msgid ""
+"If man:etcupdate[8] is not able to merge a file automatically, the merge "
+"conflicts can be resolved with manual interaction by issuing:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1000
+#, no-wrap
+msgid "# etcupdate resolve\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1019
+#, no-wrap
+msgid "Merging Configuration Files with man:mergemaster[8]"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1024
+msgid ""
+"man:mergemaster[8] provides a way to merge changes that have been made to "
+"system configuration files with new versions of those files. man:"
+"mergemaster[8] is an alternative to the preferred man:etcupdate[8] With `-"
+"Ui`, man:mergemaster[8] automatically updates files that have not been user-"
+"modified and installs new files that are not already present:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1028
+#, no-wrap
+msgid "# mergemaster -Ui\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1032
+msgid ""
+"If a file must be manually merged, an interactive display allows the user to "
+"choose which portions of the files are kept. See man:mergemaster[8] for "
+"more information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1034
+msgid ""
+"If the standard [.filename]#/usr/src# was not used, another parameter must "
+"be passed to man:mergemaster[8]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1038
+#, no-wrap
+msgid "# mergemaster -Ui PATH_TO_SRC\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1041
+#, no-wrap
+msgid "Checking for Outdated Files and Libraries"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1045
+msgid ""
+"Some obsolete files or directories can remain after an update. These files "
+"can be located:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1049
+#, no-wrap
+msgid "# make check-old\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1052
+msgid "and deleted:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1056
+#, no-wrap
+msgid "# make delete-old\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1060
+msgid "Some obsolete libraries can also remain. These can be detected with:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1064
+#, no-wrap
+msgid "# make check-old-libs\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1067
+msgid "and deleted with"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1071
+#, no-wrap
+msgid "# make delete-old-libs\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1075
+msgid ""
+"Programs which were still using those old libraries will stop working when "
+"the library has been deleted. These programs must be rebuilt or replaced "
+"after deleting the old libraries."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1081
+msgid ""
+"When all the old files or directories are known to be safe to delete, "
+"pressing kbd:[y] and kbd:[Enter] to delete each file can be avoided by "
+"setting `BATCH_DELETE_OLD_FILES` in the command. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1085
+#, no-wrap
+msgid "# make BATCH_DELETE_OLD_FILES=yes delete-old-libs\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1090
+#, no-wrap
+msgid "Restarting After the Update"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1093
+msgid ""
+"The last step after updating is to restart the computer so all the changes "
+"take effect:"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1100
+#, no-wrap
+msgid "Tracking for Multiple Machines"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1108
+msgid ""
+"When multiple machines need to track the same source tree, it is a waste of "
+"disk space, network bandwidth, and CPU cycles to have each system download "
+"the sources and rebuild everything. The solution is to have one machine do "
+"most of the work, while the rest of the machines mount that work via NFS. "
+"This section outlines a method of doing so. For more information about "
+"using NFS, refer to crossref:network-servers[network-nfs,\"Network File "
+"System (NFS)\"]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1113
+msgid ""
+"First, identify a set of machines which will run the same set of binaries, "
+"known as a _build set_. Each machine can have a custom kernel, but will run "
+"the same userland binaries. From that set, choose a machine to be the "
+"_build machine_ that the world and kernel are built on. Ideally, this is a "
+"fast machine that has sufficient spare CPU to run `make buildworld` and "
+"`make buildkernel`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1117
+msgid ""
+"Select a machine to be the _test machine_, which will test software updates "
+"before they are put into production. This _must_ be a machine that can "
+"afford to be down for an extended period of time. It can be the build "
+"machine, but need not be."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1120
+msgid ""
+"All the machines in this build set need to mount [.filename]#/usr/obj# and [."
+"filename]#/usr/src# from the build machine via NFS. For multiple build "
+"sets, [.filename]#/usr/src# should be on one build machine, and NFS mounted "
+"on the rest."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1126
+msgid ""
+"Ensure that [.filename]#/etc/make.conf# and [.filename]#/etc/src.conf# on "
+"all the machines in the build set agree with the build machine. That means "
+"that the build machine must build all the parts of the base system that any "
+"machine in the build set is going to install. Also, each build machine "
+"should have its kernel name set with `KERNCONF` in [.filename]#/etc/make."
+"conf#, and the build machine should list them all in its `KERNCONF`, listing "
+"its own kernel first. The build machine must have the kernel configuration "
+"files for each machine in its [.filename]#/usr/src/sys/arch/conf#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1133
+msgid ""
+"On the build machine, build the kernel and world as described in "
+"<<makeworld>>, but do not install anything on the build machine. Instead, "
+"install the built kernel on the test machine. On the test machine, mount [."
+"filename]#/usr/src# and [.filename]#/usr/obj# via NFS. Then, run `shutdown "
+"now` to go to single-user mode in order to install the new kernel and world "
+"and run `mergemaster` as usual. When done, reboot to return to normal multi-"
+"user operations."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1136
+msgid ""
+"After verifying that everything on the test machine is working properly, use "
+"the same procedure to install the new software on each of the other machines "
+"in the build set."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1144
+msgid ""
+"The same methodology can be used for the ports tree. The first step is to "
+"share [.filename]#/usr/ports# via NFS to all the machines in the build set. "
+"To configure [.filename]#/etc/make.conf# to share distfiles, set `DISTDIR` "
+"to a common shared directory that is writable by whichever user `root` is "
+"mapped to by the NFS mount. Each machine should set `WRKDIRPREFIX` to a "
+"local build directory, if ports are to be built locally. Alternately, if "
+"the build system is to build and distribute packages to the machines in the "
+"build set, set `PACKAGES` on the build system to a directory similar to "
+"`DISTDIR`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1146
+#, no-wrap
+msgid "Building on non-FreeBSD Hosts"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1150
+msgid ""
+"Historically, building FreeBSD required a FreeBSD host. Nowadays, the "
+"FreeBSD can be build on Linux distributions and macOS."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1156
+msgid ""
+"To build FreeBSD on non-FreeBSD hosts, the recommendation is to use the "
+"`tools/build/make.py` script. This script acts as a wrapper around `bmake`, "
+"which is the make implementation used by FreeBSD. It ensures that the "
+"necessary tooling, including the actual FreeBSD's man:make[1], is "
+"bootstrapped and that the build environment is properly configured. In "
+"particular, it sets the external toolchain variables, such as `XCC`, `XLD`, "
+"and others. Additionally, the script can pass any additional command "
+"arguments, such as `-j 4` for parallel builds or specific make targets, to "
+"`bmake`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1161
+msgid ""
+"A recent version of `bmake` can be used instead of the `tools/build/make.py` "
+"script as well. In that case, however, required environment variables need "
+"to be set manually (the easiest way to obtain a list of them is by running "
+"`tools/build/make.py --debug`)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1165
+msgid ""
+"Otherwise, the list of prerequisites for building FreeBSD is rather short. "
+"In fact, it boils down to installing a couple of dependencies."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1168
+msgid ""
+"On macOS, the only dependency LLVM. The necessary dependencies can be "
+"installed with package manager (e.g., link:https://brew.sh/[Homebrew]):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1172
+#, no-wrap
+msgid "brew install llvm\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1175
+msgid ""
+"On a Linux distributions, install link:https://clang.llvm.org/[Clang] "
+"version 10.0 or newer and the headers for libarchive and libbz2 (often "
+"packaged as libarchive-dev and libbz2-dev)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1177
+msgid ""
+"Once the dependencies are installed, the host should be able to build "
+"FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1179
+msgid ""
+"For example, the following `tools/build/make.py` invocation builds the world:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1183
+#, no-wrap
+msgid "MAKEOBJDIRPREFIX=/tmp/obj tools/build/make.py -j 8 TARGET=arm64 TARGET_ARCH=aarch64 buildworld\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1188
+msgid ""
+"It builds the world for target `aarch64:arm64` on 8 CPUs and uses [."
+"filename]#/tmp/obj# for object files. Note that the variables "
+"`MAKEOBJDIRPREFIX`, `TARGET`, and `TARGET_ARCH` are mandatory when building "
+"on non-FreeBSD hosts. Also, make sure to create the object directory "
+"pointed to by the `MAKEOBJDIRPREFIX` environment variable."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1189
+msgid "Refer to man:arch[7] and man:build[7] for more details."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/desktop/_index.adoc b/documentation/content/en/books/handbook/desktop/_index.adoc
index bca4dffdf0..648deeac3f 100644
--- a/documentation/content/en/books/handbook/desktop/_index.adoc
+++ b/documentation/content/en/books/handbook/desktop/_index.adoc
@@ -1,24 +1,24 @@
---
-title: Chapter 6. Desktop Applications
+title: Chapter 8. Desktop Environments
part: Part II. Common Tasks
prev: books/handbook/partii
next: books/handbook/multimedia
-description: This chapter demonstrates how to install numerous desktop applications, including web browsers, productivity software, document viewers, and financial software
-tags: ["desktop", "browsers", "firefox", "chromium", "productivity", "calligra", "AbiWord", "LibreOffice", "GIMP", "Xpdf", "gv", "Geeqie", "ePDFView", "okular", "Finance", "GnuCash", "Gnumeric", "KMyMoney"]
+description: This chapter demonstrates how to install numerous desktop environments, including web browsers, productivity software, document viewers, and financial software
+tags: ["desktop", "KDE Plasma", "GNOME", "XFCE", "MATE", "Cinnamon", "LXQT", "browsers", "Firefox", "Chromium", "Iridium", "Falkon", "Konqueror", "Epiphany", "qutebrowser", "Dillo", "Links", "w3m", "Development tools", "Visual Studio Code", "Qt Creator", "Kdevelop", "Eclipse IDE", "Vim", "Neovim", "GNU Emacs", "Productivity", "LibreOffice", "Calligra", "AbiWord", "Viewers", "Okular", "Evince", "ePDFView", "Xpdf", "Finance", "KMyMoney", "GnuCash"]
showBookMenu: true
-weight: 9
-path: "/books/handbook/"
+weight: 11
+path: "/books/handbook/desktop/"
---
[[desktop]]
-= Desktop Applications
+= Desktop Environments
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 6
+:sectnumoffset: 8
:partnums:
:source-highlighter: rouge
:experimental:
@@ -51,570 +51,1068 @@ endif::[]
[[desktop-synopsis]]
== Synopsis
-While FreeBSD is popular as a server for its performance and stability, it is also suited for day-to-day use as a desktop.
-With over {numports} applications available as FreeBSD packages or ports, it is easy to build a customized desktop that runs a wide variety of desktop applications.
-This chapter demonstrates how to install numerous desktop applications, including web browsers, productivity software, document viewers, and financial software.
+While FreeBSD is popular as a server for its performance and stability, it is also well suited for day-to-day use as a desktop.
+With over {numports} applications available in the FreeBSD ports tree, it is straightforward to build a customized desktop that can run a wide variety of desktop applications.
+This chapter demonstrates how to install popular desktop environments as well as desktop applications such as web browsers, productivity software, document viewers, and financial software.
-[NOTE]
+Prerequisites:
+
+* Readers of this chapter should already understand how to install either the crossref:x11[x11,X Window System] or crossref:wayland[wayland,Wayland] on FreeBSD.
+* Readers are instructed throughout this chapter to install official packages.
+Refer to the section on crossref:ports[ports-using,using the ports collection] to build customized packages from ports.
+
+[[desktop-environments]]
+== Desktop Environments
+
+This section describes how to install and configure some popular desktop environments on a FreeBSD system.
+A desktop environment can range from a simple window manager to a complete suite of desktop applications.
+
+.Supported desktop environments
+[options="header", cols="1,1,1"]
+|===
+| Name | License | Package
+
+| KDE Plasma
+| GPL 2.0 or later
+| x11/kde5
+
+| GNOME
+| GPL 2.0 or later
+| x11/gnome
+
+| XFCE
+| GPL, LGPL, BSD
+| x11-wm/xfce4
+
+| MATE
+| GPL 2.0, LGPL 2.0
+| x11/mate
+
+| Cinnamon
+| GPL 2.0 or later
+| x11/cinnamon
+
+| LXQT
+| GPL, LGPL
+| x11-wm/lxqt
+
+|===
+
+[[kde-environment]]
+=== KDE Plasma
+
+KDE Plasma is an easy-to-use desktop environment.
+This desktop provides a suite of applications with a consistent look and feel, a standardized menu and toolbars, keybindings, color-schemes, internationalization, and a centralized, dialog-driven desktop configuration.
+More information on KDE can be found at the link:https://kde.org/[KDE homepage].
+For FreeBSD-specific information, consult the link:https://freebsd.kde.org/[FreeBSD homepage at KDE].
+
+[[kde-meta-install]]
+==== Install KDE Plasma meta package
+
+To install the KDE Plasma meta package with KDE Frameworks, Plasma Desktop and Applications execute:
+
+[source,shell]
+....
+# pkg install kde5
+....
+
+[[kde-minimal-install]]
+==== Minimal KDE Plasma installation
+
+To install a minimal KDE Plasma execute:
+
+[source,shell]
+....
+# pkg install plasma5-plasma
+....
+
+[TIP]
====
-Users who prefer to install a pre-built desktop version of FreeBSD rather than configuring one from scratch should refer to https://ghostbsd.org[GhostBSD], https://www.midnightbsd.org[MidnightBSD] or https://nomadbsd.org[NomadBSD].
+This installation is *really* minimal.
+Konsole must be installed separately executing:
+
+[source,shell]
+....
+# pkg install konsole
+....
====
-Readers of this chapter should know how to:
+[[kde-configuration]]
+==== Configure KDE Plasma
-* Install additional software using packages or ports as described in crossref:ports[ports,Installing Applications: Packages and Ports].
-* Install X and a window manager as described in crossref:x11[x11,The X Window System].
+KDE Plasma uses man:dbus-daemon[1] for a message bus and hardware abstraction.
+This application is automatically installed as a dependency of KDE Plasma.
-For information on how to configure a multimedia environment, refer to crossref:multimedia[multimedia,Multimedia].
+Enable D-BUS service in `/etc/rc.conf` to start at system boot:
-[[desktop-browsers]]
-== Browsers
+[source,shell]
+....
+# sysrc dbus_enable="YES"
+....
-FreeBSD does not come with a pre-installed web browser.
-Instead, the https://www.FreeBSD.org/ports/[www] category of the Ports Collection contains many browsers which can be installed as a package or compiled from the Ports Collection.
+To increase messages size execute:
-The KDE and GNOME desktop environments include their own HTML browser.
-Refer to crossref:x11[x11-wm,“Desktop Environments”] for more information on how to set up these complete desktops.
+[source,shell]
+....
+sysctl net.local.stream.recvspace=65536
+sysctl net.local.stream.sendspace=65536
+....
-Some lightweight browsers include package:www/dillo2[], package:www/links[], and package:www/w3m[].
+[[kde-start]]
+==== Start KDE Plasma
-This section demonstrates how to install the following popular web browsers and indicates if the application is resource-heavy, takes time to compile from ports, or has any major dependencies.
+The preferred KDE Plasma display manager is package:x11/sddm[].
+To install package:x11/sddm[], execute:
-[.informaltable]
-[cols="1,1,1,1", frame="none", options="header"]
-|===
-| Application Name
-| Resources Needed
-| Installation from Ports
-| Notes
-
-|Firefox
-|medium
-|heavy
-|FreeBSD, Linux(R), and localized versions are available
-
-|Konqueror
-|medium
-|heavy
-|Requires KDE libraries
-
-|Chromium
-|medium
-|heavy
-|Requires Gtk+
-|===
+[source,shell]
+....
+# pkg install sddm
+....
-=== Firefox
+Enable SDDM service in `/etc/rc.conf` to start at system boot:
-Firefox is an open source browser that features a standards-compliant HTML display engine, tabbed browsing, popup blocking, extensions, improved security, and more.
-Firefox is based on the Mozilla codebase.
+[source,shell]
+....
+# sysrc sddm_enable="YES"
+....
-To install the package of the latest release version of Firefox, type:
+The keyboard language can be set in SDDM by running the following command (for Spanish, for example):
[source,shell]
....
-# pkg install firefox
+# sysrc sddm_lang="es_ES"
....
-To instead install Firefox Extended Support Release (ESR) version, use:
+A second method to start KDE Plasma is by manually invoking man:startx[1].
+For this to work, the following line is needed in ~/.xinitrc:
[source,shell]
....
-# pkg install firefox-esr
+% echo "exec dbus-launch --exit-with-x11 ck-launch-session startplasma-x11" > ~/.xinitrc
....
-The Ports Collection can instead be used to compile the desired version of Firefox from source code.
-This example builds package:www/firefox[], where `firefox` can be replaced with the ESR or localized version to install.
+[[gnome-environment]]
+=== GNOME
+
+GNOME is a user-friendly desktop environment.
+It includes a panel for starting applications and displaying status, a desktop, a set of tools and applications, and a set of conventions that make it easy for applications to cooperate and be consistent with each other.
+
+[[gnome-meta-install]]
+==== Install GNOME meta package
+
+To install the GNOME meta package with GNOME Desktop and Applications, execute:
[source,shell]
....
-# cd /usr/ports/www/firefox
-# make install clean
+# pkg install gnome
....
-=== Konqueror
+[[gnome-minimal-install]]
+==== Minimal GNOME installation
-Konqueror is more than a web browser as it is also a file manager and a multimedia viewer.
-Supports WebKit as well as its own KHTML.
-WebKit is a rendering engine used by many modern browsers including Chromium.
+To install the GNOME-lite meta package with a GNOME desktop slimmed down for only the basics, execute:
+
+[source,shell]
+....
+# pkg install gnome-lite
+....
+
+[[gnome-configuration]]
+==== Configure GNOME
+
+GNOME requires `/proc` to be mounted.
+Add this line to `/etc/fstab` to mount this file system automatically during system startup:
+
+[.programlisting]
+....
+# Device Mountpoint FStype Options Dump Pass#
+proc /proc procfs rw 0 0
+....
+
+GNOME uses man:dbus-daemon[1] for a message bus and hardware abstraction.
+This application is automatically installed as a dependency of GNOME.
-Konqueror can be installed as a package by typing:
+Enable D-BUS service in `/etc/rc.conf` to start at system boot:
[source,shell]
....
-# pkg install konqueror
+# sysrc dbus_enable="YES"
+....
+
+[[gnome-start]]
+==== Start GNOME
+
+GNOME Display Manager is the preferred display manager for GNOME.
+GDM is installed as part of the GNOME package.
+
+Enable GDM in `/etc/rc.conf` to start at system boot:
+
+[source,shell]
+....
+# sysrc gdm_enable="YES"
....
-To install from the Ports Collection:
+A second method to start GNOME is by manually invoking man:startx[1].
+For this to work, the following line is needed in `~/.xinitrc`:
[source,shell]
....
-# cd /usr/ports/x11-fm/konqueror/
-# make install clean
+% echo "exec gnome-session" > ~/.xinitrc
....
-=== Chromium
+[[xfce-environment]]
+=== XFCE
-Chromium is an open source browser project that aims to build a safer, faster, and more stable web browsing experience.
-Chromium features tabbed browsing, popup blocking, extensions, and much more.
-Chromium is the open source project upon which the Google Chrome web browser is based.
+XFCE is a desktop environment based on the GTK+, lightweight and provides a simple, efficient, easy-to-use desktop.
+It is fully configurable, has a main panel with menus, applets, and application launchers, provides a file manager and sound manager, and is themeable.
+Since it is fast, light, and efficient, it is ideal for older or slower machines with memory limitations.
-Chromium can be installed as a package by typing:
+[[xfce-install]]
+==== Install XFCE
+
+To install the XFCE meta package, execute:
[source,shell]
....
-# pkg install chromium
+# pkg install xfce
+....
+
+[[xfce-configuration]]
+==== Configure XFCE
+
+XFCE requires `/proc` to be mounted.
+Add this line to `/etc/fstab` to mount this file system automatically during system startup:
+
+[.programlisting]
....
+# Device Mountpoint FStype Options Dump Pass#
+proc /proc procfs rw 0 0
+....
+
+XFCE uses man:dbus-daemon[1] for a message bus and hardware abstraction.
+This application is automatically installed as a dependency of XFCE.
-Alternatively, Chromium can be compiled from source using the Ports Collection:
+Enable D-BUS in `/etc/rc.conf` to start at system boot:
[source,shell]
....
-# cd /usr/ports/www/chromium
-# make install clean
+# sysrc dbus_enable="YES"
....
-[NOTE]
-====
-The executable for Chromium is [.filename]#/usr/local/bin/chrome#, not [.filename]#/usr/local/bin/chromium#.
-====
+[[xfce-start]]
+==== Start XFCE
-[[desktop-productivity]]
-== Productivity
+package:x11/lightdm[] is a display manager that supports different display technologies and is a good choice as it is very lightweight, requires little memory usage, and has fast performance.
-When it comes to productivity, users often look for an office suite or an easy-to-use word processor.
-While some <<x11-wm,desktop environments>> like KDE provide an office suite, there is no default productivity package.
-Several office suites and graphical word processors are available for FreeBSD, regardless of the installed window manager.
+To install it, execute:
-This section demonstrates how to install the following popular productivity software and indicates if the application is resource-heavy, takes time to compile from ports, or has any major dependencies.
+[source,shell]
+....
+# pkg install lightdm lightdm-gtk-greeter
+....
-[.informaltable]
-[cols="1,1,1,1", frame="none", options="header"]
-|===
-| Application Name
-| Resources Needed
-| Installation from Ports
-| Major Dependencies
-
-|Calligra
-|light
-|heavy
-|KDE
-
-|AbiWord
-|light
-|light
-|Gtk+ or GNOME
-
-|The Gimp
-|light
-|heavy
-|Gtk+
-
-|Apache OpenOffice
-|heavy
-|huge
-|JDK(TM) and Mozilla
-
-|LibreOffice
-|somewhat heavy
-|huge
-|Gtk+, or KDE/ GNOME, or JDK(TM)
-|===
+Enable lightdm in `/etc/rc.conf` to start at system boot:
-=== Calligra
+[source,shell]
+....
+# sysrc lightdm_enable="YES"
+....
-The KDE desktop environment includes an office suite which can be installed separately from KDE.
-Calligra includes standard components that can be found in other office suites.
-Words is the word processor, Sheets is the spreadsheet program, Stage manages slide presentations, and Karbon is used to draw graphical documents.
+A second method to start XFCE is by manually invoking man:startx[1].
+For this to work, the following line is needed in `~/.xinitrc`:
+
+[source,shell]
+....
+% echo '. /usr/local/etc/xdg/xfce4/xinitrc' > ~/.xinitrc
+....
+
+[[mate-environment]]
+=== MATE
+
+The MATE Desktop Environment is the continuation of GNOME 2.
+It provides an intuitive and attractive desktop environment using traditional metaphors.
+
+[[mate-meta-install]]
+==== Install MATE meta package
-In FreeBSD, package:editors/calligra[] can be installed as a package or a port.
-To install the package:
+To install the MATE meta package that includes the MATE Desktop with some extra applications such as text editor, archiver manager, etc., execute:
[source,shell]
....
-# pkg install calligra
+# pkg install mate
....
-If the package is not available, use the Ports Collection instead:
+[[mate-minimal-install]]
+==== Minimal MATE installation
+
+To install the MATE lite meta package with MATE desktop slimmed down for only the basics, execute:
[source,shell]
....
-# cd /usr/ports/editors/calligra
-# make install clean
+# pkg install mate-base
....
-=== AbiWord
+[[mate-configuration]]
+==== Configure MATE
-AbiWord is a free word processing program similar in look and feel to Microsoft(R) Word.
-It is fast, contains many features, and is user-friendly.
+MATE requires `/proc` to be mounted.
+Add this line to `/etc/fstab` to mount this file system automatically during system startup:
-AbiWord can import or export many file formats, including some proprietary ones like Microsoft(R) [.filename]#.rtf#.
+[.programlisting]
+....
+# Device Mountpoint FStype Options Dump Pass#
+proc /proc procfs rw 0 0
+....
-To install the AbiWord package:
+MATE uses man:dbus-daemon[1] for a message bus and hardware abstraction.
+This application is automatically installed as a dependency of MATE.
+Enable D-BUS in `/etc/rc.conf` to start at system boot:
[source,shell]
....
-# pkg install abiword
+# sysrc dbus_enable="YES"
....
-If the package is not available, it can be compiled from the Ports Collection:
+[[mate-start]]
+==== Start MATE
+
+package:x11/lightdm[] is a display manager that supports different display technologies and is a good choice as it is very lightweight, requires little memory usage, and has fast performance.
+
+To install it, execute:
[source,shell]
....
-# cd /usr/ports/editors/abiword
-# make install clean
+# pkg install lightdm lightdm-gtk-greeter
....
-=== The GIMP
+Enable lightdm in `/etc/rc.conf` to start at system boot:
-For image authoring or picture retouching, The GIMP provides a sophisticated image manipulation program.
-It can be used as a simple paint program or as a quality photo retouching suite.
-It supports a large number of plugins and features a scripting interface.
-The GIMP can read and write a wide range of file formats and supports interfaces with scanners and tablets.
+[source,shell]
+....
+# sysrc lightdm_enable="YES"
+....
-To install the package:
+A second method to start MATE is by manually invoking man:startx[1].
+For this to work, the following line is needed in `~/.xinitrc`:
[source,shell]
....
-# pkg install gimp
+% echo "exec dbus-launch --exit-with-x11 ck-launch-session mate-session" > ~/.xinitrc
....
-Alternately, use the Ports Collection:
+[[cinnamon-environment]]
+=== Cinnamon
+
+Cinnamon is a UNIX(R) desktop which provides advanced innovative features and a traditional user experience.
+The desktop layout is similar to Gnome 2.
+The underlying technology is forked from Gnome Shell.
+The emphasis is put on making users feel at home and providing them with an easy to use and comfortable desktop experience.
+
+[[cinnamon-install]]
+==== Install Cinnamon
+
+To install the Cinnamon package, execute:
[source,shell]
....
-# cd /usr/ports/graphics/gimp
-# make install clean
+# pkg install cinnamon
....
-The graphics category (https://www.FreeBSD.org/ports/graphics/[freebsd.org/ports/graphics/]) of the Ports Collection contains several GIMP-related plugins, help files, and user manuals.
+[[cinnamon-configuration]]
+==== Configure Cinnamon
-=== Apache OpenOffice
+Cinnamon requires `/proc` to be mounted.
+Add this line to `/etc/fstab` to mount this file system automatically during system startup:
-Apache OpenOffice is an open source office suite which is developed under the wing of the Apache Software Foundation's Incubator.
-It includes all of the applications found in a complete office productivity suite: a word processor, spreadsheet, presentation manager, and drawing program.
-Its user interface is similar to other office suites, and it can import and export in various popular file formats.
-It is available in a number of different languages and internationalization has been extended to interfaces, spell checkers, and dictionaries.
+[.programlisting]
+....
+# Device Mountpoint FStype Options Dump Pass#
+proc /proc procfs rw 0 0
+....
+
+Cinnamon uses man:dbus-daemon[1] for a message bus and hardware abstraction.
+This application is automatically installed as a dependency of Cinnamon.
+Enable D-BUS in `/etc/rc.conf` to start at system boot:
+
+[source,shell]
+....
+# sysrc dbus_enable="YES"
+....
+
+[[cinnamon-start]]
+==== Start Cinnamon
+
+package:x11/lightdm[] is a display manager that supports different display technologies and is a good choice as it is very lightweight, requires little memory usage, and has fast performance.
+
+To install it execute:
+
+[source,shell]
+....
+# pkg install lightdm lightdm-gtk-greeter
+....
+
+Enable lightdm in `/etc/rc.conf` to start at system boot:
-The word processor of Apache OpenOffice uses a native XML file format for increased portability and flexibility.
-The spreadsheet program features a macro language which can be interfaced with external databases.
-Apache OpenOffice is stable and runs natively on Windows(R), Solaris(TM), Linux(R), FreeBSD, and Mac OS(R) X.
-More information about Apache OpenOffice can be found at http://openoffice.org/[openoffice.org].
-For FreeBSD specific information refer to http://porting.openoffice.org/freebsd/[porting.openoffice.org/freebsd/].
+[source,shell]
+....
+# sysrc lightdm_enable="YES"
+....
-To install the Apache OpenOffice package:
+A second method to start Cinnamon is by manually invoking man:startx[1].
+For this to work, the following line is needed in `~/.xinitrc`:
[source,shell]
....
-# pkg install apache-openoffice
+% echo "exec dbus-launch --exit-with-x11 ck-launch-session cinnamon-session" > ~/.xinitrc
....
-Once the package is installed, type the following command to launch Apache OpenOffice:
+[[lxqt-environment]]
+=== LXQT
+
+LXQt is an advanced, easy-to-use, and fast desktop environment based on Qt technologies.
+It has been tailored for users who value simplicity, speed, and an intuitive interface.
+Unlike most desktop environments, LXQt also works fine with less powerful machines.
+
+[[lxqt-install]]
+==== Install LXQT
+
+To install the LXQT meta package, execute:
[source,shell]
....
-% openoffice-X.Y.Z
+# pkg install lxqt
+....
+
+[[lxqt-configuration]]
+==== Configure LXQT
+
+LXQT requires `/proc` to be mounted.
+Add this line to `/etc/fstab` to mount this file system automatically during system startup:
+
+[.programlisting]
+....
+# Device Mountpoint FStype Options Dump Pass#
+proc /proc procfs rw 0 0
....
-where _X.Y.Z_ is the version number of the installed version of Apache OpenOffice.
-The first time Apache OpenOffice launches, some questions will be asked and a [.filename]#.openoffice.org# folder will be created in the user's home directory.
+LXQT uses man:dbus-daemon[1] for a message bus and hardware abstraction.
+This application is automatically installed as a dependency of LXQT.
-If the desired Apache OpenOffice package is not available, compiling the port is still an option.
-However, this requires a lot of disk space and a fairly long time to compile:
+Enable D-BUS in `/etc/rc.conf` to start at system boot:
[source,shell]
....
-# cd /usr/ports/editors/openoffice-4
-# make install clean
+# sysrc dbus_enable="YES"
....
-[NOTE]
-====
-To build a localized version, replace the previous command with:
+[[lxqt-start]]
+==== Start LXQT
+
+The preferred LXQT display manager is package:x11/sddm[].
+To install package:x11/sddm[], execute:
[source,shell]
....
-# make LOCALIZED_LANG=your_language install clean
+# pkg install sddm
....
-Replace _your_language_ with the correct language ISO-code.
-A list of supported language codes is available in [.filename]#files/Makefile.localized#, located in the port's directory.
-====
+Enable SDDM service in `/etc/rc.conf` to start at system boot:
-=== LibreOffice
+[source,shell]
+....
+# sysrc sddm_enable="YES"
+....
-LibreOffice is a free software office suite developed by http://www.documentfoundation.org/[documentfoundation.org].
-It is compatible with other major office suites and available on a variety of platforms.
-It is a rebranded fork of Apache OpenOffice and includes applications found in a complete office productivity suite: a word processor, spreadsheet, presentation manager, drawing program, database management program, and a tool for creating and editing mathematical formulæ.
-It is available in a number of different languages and internationalization has been extended to interfaces, spell checkers, and dictionaries.
+The keyboard language can be set in SDDM by running the following command (for example, for Spanish):
-The word processor of LibreOffice uses a native XML file format for increased portability and flexibility.
-The spreadsheet program features a macro language which can be interfaced with external databases.
-LibreOffice is stable and runs natively on Windows(R), Linux(R), FreeBSD, and Mac OS(R) X.
-More information about LibreOffice can be found at http://www.libreoffice.org/[libreoffice.org].
+[source,shell]
+....
+# sysrc sddm_lang="es_ES"
+....
-To install the English version of the LibreOffice package:
+A second method to start LXQT is by manually invoking man:startx[1].
+For this to work, the following line is needed in `~/.xinitrc`:
[source,shell]
....
-# pkg install libreoffice
+% echo "exec dbus-launch --exit-with-x11 ck-launch-session startlxqt" > ~/.xinitrc
....
-The editors category (https://www.FreeBSD.org/ports/editors/[freebsd.org/ports/editors/]) of the Ports Collection contains several localizations for LibreOffice.
-When installing a localized package, replace `libreoffice` with the name of the localized package.
+[[desktop-browsers]]
+== Browsers
+
+This section describes how to install and configure some popular web browsers on a FreeBSD system, from full web browsers with high resource consumption to command line web browsers with reduced resource usage.
+
+.Supported browsers
+[options="header", cols="1,1,1,1"]
+|===
+| Name | License | Package | Resources Needed
+
+| Firefox
+| MPL 2.0
+| package:www/firefox[]
+| Heavy
+
+| Chromium
+| BSD-3 and others
+| package:www/chromium[]
+| Heavy
+
+| Iridium browser
+| BSD-3 and others
+| package:www/iridium-browser[]
+| Heavy
+
+| Falkon
+| MPL 2.0
+| package:www/falkon-qtonly[]
+| Heavy
+
+| Konqueror
+| GPL 2.0 or later
+| package:x11-fm/konqueror[]
+| Medium
+
+| Gnome Web (Epiphany)
+| GPL 3.0 or later
+| package:www/epiphany[]
+| Medium
+
+| qutebrowser
+| GPL 3.0 or later
+| package:www/qutebrowser[]
+| Medium
+
+| Dillo
+| GPL 3.0 or later
+| package:www/dillo2[]
+| Light
+
+| Links
+| GPL 2.0 or later
+| package:www/links[]
+| Light
+
+| w3m
+| MIT
+| package:www/w3m[]
+| Light
+
+|===
+
+[[firefox]]
+=== Firefox
+
+Firefox is an open source browser that features a standards-compliant HTML display engine, tabbed browsing, popup blocking, extensions, improved security, and more.
+Firefox is based on the Mozilla codebase.
+
+To install the package of the latest release version of Firefox, execute:
+
+[source,shell]
+....
+# pkg install firefox
+....
-Once the package is installed, type the following command to run LibreOffice:
+To instead install Firefox Extended Support Release (ESR) version, execute:
[source,shell]
....
-% libreoffice
+# pkg install firefox-esr
....
-During the first launch, some questions will be asked and a [.filename]#.libreoffice# folder will be created in the user's home directory.
+[[chromium]]
+=== Chromium
+
+Chromium is an open source browser project that aims to build a safer, faster, and more stable web browsing experience.
+Chromium features tabbed browsing, popup blocking, extensions, and much more.
+Chromium is the open source project upon which the Google Chrome web browser is based.
-If the desired LibreOffice package is not available, compiling the port is still an option.
-However, this requires a lot of disk space and a fairly long time to compile.
-This example compiles the English version:
+To install Chromium, execute:
[source,shell]
....
-# cd /usr/ports/editors/libreoffice
-# make install clean
+# pkg install chromium
....
[NOTE]
====
-To build a localized version, `cd` into the port directory of the desired language.
-Supported languages can be found in the editors category (https://www.FreeBSD.org/ports/editors/[freebsd.org/ports/editors/]) of the Ports Collection.
+The executable for Chromium is [.filename]#/usr/local/bin/chrome#, not [.filename]#/usr/local/bin/chromium#.
====
-[[desktop-viewers]]
-== Document Viewers
+[[iridium]]
+=== Iridium browser
-Some new document formats have gained popularity since the advent of UNIX(R) and the viewers they require may not be available in the base system.
-This section demonstrates how to install the following document viewers:
+Iridium is a free, open, and libre browser modification of the Chromium code base, with privacy being enhanced in several key areas.
+Automatic transmission of partial queries, keywords, metrics to central services is inhibited and only occurs with consent.
+
+To install Iridium, execute:
+
+[source,shell]
+....
+# pkg install iridium-browser
+....
+
+[[falkon]]
+=== Falkon
+
+Falkon is a new-ish and very fast QtWebEngine browser.
+It aims to be a lightweight web browser available on all major platforms.
+Falkon has all standard functions someone can expect from a web browser.
+It includes bookmarks, history (both also in sidebar) and tabs.
+Beyond that, AdBlock plugin can block ads, Click2Flash can block Flash content and SSL Manager can edit the local CA Certificates database.
+
+To install Falkon, execute:
+
+[source,shell]
+....
+# pkg install falkon
+....
+
+[[konqueror]]
+=== Konqueror
+
+Konqueror is more than a web browser as it is also a file manager and a multimedia viewer.
+It supports WebKit, a rendering engine used by many modern browsers including Chromium, as well as its own KHTML engine.
+
+To install Konqueror, execute:
+
+[source,shell]
+....
+# pkg install konqueror
+....
+
+[[gnome-web-epiphany]]
+=== Gnome Web (Epiphany)
+
+Gnome Web (Epiphany) is a web browser designed to be as lightweight and fast as possible, at the expense of many of the features found in other browsers.
+
+To install Gnome Web (Epiphany), execute:
+
+[source,shell]
+....
+# pkg install epiphany
+....
+
+[[qutebrowser]]
+=== qutebrowser
+
+Qutebrowser is a keyboard-focused browser with a minimal GUI.
+It is based on Python and PyQt5 and free software, licensed under the GPL.
+
+To install qutebrowser, execute:
+
+[source,shell]
+....
+# pkg install qutebrowser
+....
+
+[[dillo]]
+=== Dillo
-[.informaltable]
-[cols="1,1,1,1", frame="none", options="header"]
+Dillo aims to be a multiplatform alternative browser that is small, stable, developer-friendly, usable, fast, and extensible.
+This new, experimental version of Dillo is based upon FLTK toolkit, rather than GTK1, and has been substantially rewritten.
+
+To install Dillo, execute:
+
+[source,shell]
+....
+# pkg install dillo2
+....
+
+[[links]]
+=== Links
+
+A lynx-like web browser with text and graphics modes with many features like displaying tables, menus, etc.
+
+To install Links, execute:
+
+[source,shell]
+....
+# pkg install links
+....
+
+[[w3m]]
+=== w3m
+
+w3m is a pager/text-based web browser.
+It is a similar application to Lynx, but it has several features Lynx does not have like rendering tables and rendering frames.
+
+To install w3m, execute:
+
+[source,shell]
+....
+# pkg install w3m
+....
+
+[[desktop-development]]
+== Development tools
+
+This section describes how to install and configure some popular development tools on a FreeBSD system.
+
+.Supported development tools
+[options="header", cols="1,1,1,1"]
|===
-| Application Name
-| Resources Needed
-| Installation from Ports
-| Major Dependencies
-
-|Xpdf
-|light
-|light
-|FreeType
-
-|gv
-|light
-|light
-|Xaw3d
-
-|Geeqie
-|light
-|light
-|Gtk+ or GNOME
-
-|ePDFView
-|light
-|light
-|Gtk+
-
-|Okular
-|light
-|heavy
-|KDE
+| Name | License | Package | Resources Needed
+
+| Visual Studio Code
+| MIT
+| package:editors/vscode[]
+| Heavy
+
+| Qt Creator
+| QtGPL
+| package:devel/qtcreator[]
+| Heavy
+
+| Kdevelop
+| GPL 2.0 or later and LGPL 2.0 or later
+| package:devel/kdevelop[]
+| Heavy
+
+| Eclipse IDE
+| EPL
+| package:java/eclipse[]
+| Heavy
+
+| Vim
+| VIM
+| package:editors/vim[]
+| Light
+
+| Neovim
+| Apache 2.0
+| package:editors/neovim[]
+| Light
+
+| GNU Emacs
+| GPL 3.0 or later
+| package:editors/emacs[]
+| Light
+
|===
-=== Xpdf
+[[vs-code]]
+=== Visual Studio Code
-For users that prefer a small FreeBSD PDF viewer, Xpdf provides a light-weight and efficient viewer which requires few resources.
-It uses the standard X fonts and does not require any additional toolkits.
+Visual Studio Code is a type of tool that combines the simplicity of a code editor with what developers need for their core edit-build-debug cycle.
+It provides comprehensive editing and debugging support, an extensibility model, and lightweight integration with existing tools.
-To install the Xpdf package:
+To install Visual Studio Code, execute:
[source,shell]
....
-# pkg install xpdf
+# pkg install vscode
....
-If the package is not available, use the Ports Collection:
+[[qt-creator]]
+=== Qt Creator
+
+Qt Creator is a cross-platform IDE (integrated development environment) tailored to the needs of Qt developers.
+Functionalities included with Qt Creator are:
+
+* code editor with C++, QML and ECMAscript support;
+* rapid code navigation tools;
+* static code checking and style hints as you type;
+* context sensitive help;
+* visual debugger;
+* integrated GUI layout and forms designer.
+
+To install Qt Creator, execute:
[source,shell]
....
-# cd /usr/ports/graphics/xpdf
-# make install clean
+# pkg install qtcreator
....
-Once the installation is complete, launch `xpdf` and use the right mouse button to activate the menu.
+[[kdevelop]]
+=== kdevelop
+
+Open source, feature-full, plugin extensible IDE for C/C++ and other programming languages.
+It is based on KDevPlatform and the KDE and Qt libraries, and it has been under development since 1998.
-=== gv
+To install kdevelop, execute:
-gv is a PostScript(R) and PDF viewer.
-It is based on ghostview, but has a nicer look as it is based on the Xaw3d widget toolkit.
-gv has many configurable features, such as orientation, paper size, scale, and anti-aliasing.
-Almost any operation can be performed with either the keyboard or the mouse.
+[source,shell]
+....
+# pkg install kdevelop
+....
-To install gv as a package:
+[[eclipse]]
+=== Eclipse IDE
+
+The Eclipse Platform is an open extensible IDE for anything and yet nothing in particular.
+The Eclipse Platform provides building blocks and a foundation for constructing and running integrated software-development tools.
+The Eclipse Platform allows tool builders to independently develop tools that integrate with other people's tools.
+
+To install Eclipse IDE, execute:
[source,shell]
....
-# pkg install gv
+# pkg install eclipse
....
-If a package is unavailable, use the Ports Collection:
+[[vim]]
+=== Vim
+
+Vim is a highly configurable text editor built to enable efficient text editing.
+It is an improved version of the vi editor distributed with most UNIX systems.
+
+Vim is often called a "programmer's editor," and so useful for programming that many consider it an entire IDE.
+It is not just for programmers, though.
+Vim is perfect for all kinds of text editing, from composing email to editing configuration files.
+
+To install Vim, execute:
[source,shell]
....
-# cd /usr/ports/print/gv
-# make install clean
+# pkg install vim
....
-=== Geeqie
+[[neovim]]
+=== Neovim
-Geeqie is a fork from the unmaintained GQView project, in an effort to move development forward and integrate the existing patches.
-Geeqie is an image manager which supports viewing a file with a single click, launching an external editor, and thumbnail previews.
-It also features a slideshow mode and some basic file operations, making it easy to manage image collections and to find duplicate files.
-Geeqie supports full screen viewing and internationalization.
+Neovim is an aggressive refactor of package:editors/vim[].
+It represents a complete overhaul of the codebase with many sanity improvements, including sensible defaults, a built-in terminal emulator, asynchronous plugin architecture, and powerful APIs designed for speed and extensibility.
+It retains full compatibility with almost all Vim plugins and scripts.
-To install the Geeqie package:
+To install Neovim, execute:
[source,shell]
....
-# pkg install geeqie
+# pkg install neovim
....
-If the package is not available, use the Ports Collection:
+[[gnu-emacs]]
+=== GNU Emacs
+
+GNU Emacs is an extensible, customizable, free/libre text editor.
+At its core is an interpreter for Emacs Lisp, a dialect of the Lisp programming language with extensions to support text editing.
+
+To install GNU Emacs, execute:
[source,shell]
....
-# cd /usr/ports/graphics/geeqie
-# make install clean
+# pkg install emacs
....
-=== ePDFView
+[[desktop-productivity]]
+== Desktop office productivity
+
+When it comes to productivity, users often look for an office suite or an easy-to-use word processor.
+While some desktop environments like <<kde-environment, KDE Plasma>> provide an office suite, there is no default productivity package.
+Several office suites and graphical word processors are available for FreeBSD, regardless of the installed desktop environments.
+
+This section demonstrates how to install the following popular productivity software and indicates if the application is resource-heavy, takes time to compile from ports, or has any major dependencies.
+
+.Supported Desktop office productivity suites
+[options="header", cols="1,1,1,1"]
+|===
+| Name | License | Package | Resources Needed
-ePDFView is a lightweight `PDF` document viewer that only uses the Gtk+ and Poppler libraries.
-It is currently under development, but already opens most `PDF` files (even encrypted), save copies of documents, and has support for printing using CUPS.
+| LibreOffice
+| MPL 2.0
+| package:editors/libreoffice[]
+| Heavy
-To install ePDFView as a package:
+| Calligra Suite
+| LGPL and GPL
+| package:editors/calligra[]
+| Medium
+
+| AbiWord
+| GPL 2.0 or later
+| package:editors/abiword[]
+| Medium
+
+|===
+
+[[libreoffice]]
+=== LibreOffice
+
+LibreOffice is a free software office suite developed by http://www.documentfoundation.org/[The Document Foundation].
+It is compatible with other major office suites and available on a variety of platforms.
+It is a rebranded fork of Apache OpenOffice and includes applications found in a complete office productivity suite: a word processor, spreadsheet, presentation manager, drawing program, database management program, and a tool for creating and editing mathematical formulæ.
+It is available in a number of different languages and internationalization has been extended to interfaces, spell checkers, and dictionaries.
+More information about LibreOffice can be found at http://www.libreoffice.org/[libreoffice.org].
+
+To install LibreOffice, execute:
[source,shell]
....
-# pkg install epdfview
+# pkg install libreoffice
....
-If a package is unavailable, use the Ports Collection:
+The LibreOffice package comes by default only in English.
+To have a localized version of LibreOffice it is necessary to install a language pack.
+For example, for the version localized in Spanish, it is necessary to install the package package:editors/libreoffice-es[] with the command:
[source,shell]
....
-# cd /usr/ports/graphics/epdfview
-# make install clean
+# pkg install libreoffice-es
....
-=== Okular
+[[calligra]]
+=== Calligra
-Okular is a universal document viewer based on KPDF for KDE.
-It can open many document formats, including `PDF`, PostScript(R), DjVu, `CHM`, `XPS`, and ePub.
+The KDE Plasma desktop environment includes an office suite which can be installed separately from KDE Plasma.
+Calligra includes standard components that can be found in other office suites.
+Words is the word processor, Sheets is the spreadsheet program, Stage manages slide presentations, and Karbon is used to draw graphical documents.
-To install Okular as a package:
+To install Calligra, execute:
[source,shell]
....
-# pkg install okular
+# pkg install calligra
....
-If a package is unavailable, use the Ports Collection:
+[[abiword]]
+=== AbiWord
+
+AbiWord is a free word processing program similar in look and feel to Microsoft(R) Word.
+It is fast, contains many features, and is user-friendly.
+
+AbiWord can import or export many file formats, including some proprietary ones like Microsoft(R) [.filename]#.rtf#.
+
+To install AbiWord, execute:
[source,shell]
....
-# cd /usr/ports/graphics/okular
-# make install clean
+# pkg install abiword
....
-[[desktop-finance]]
-== Finance
-
-For managing personal finances on a FreeBSD desktop, some powerful and easy-to-use applications can be installed.
-Some are compatible with widespread file formats, such as the formats used by Quicken and Excel.
+[[desktop-viewers]]
+== Document Viewers
-This section covers these programs:
+Some new document formats have gained popularity since the advent of UNIX(R) and the viewers they require may not be available in the base system.
+This section demonstrates how to install the following document viewers:
-[.informaltable]
-[cols="1,1,1,1", frame="none", options="header"]
+.Supported Document Viewers
+[options="header", cols="1,1,1,1"]
|===
-| Application Name
-| Resources Needed
-| Installation from Ports
-| Major Dependencies
-
-|GnuCash
-|light
-|heavy
-|GNOME
-
-|Gnumeric
-|light
-|heavy
-|GNOME
-
-|KMyMoney
-|light
-|heavy
-|KDE
+| Name | License | Package | Resources Needed
+
+| Okular
+| GPL 2.0
+| package:graphics/okular[]
+| Heavy
+
+| Evince
+| GPL 2.0
+| package:graphics/evince[]
+| Medium
+
+| ePDFView
+| GPL 2.0
+| package:graphics/epdfview[]
+| Medium
+
+| Xpdf
+| GPL 2.0
+| package:graphics/xpdf[]
+| light
+
+| Zathura
+| Zlib
+| package:graphics/zathura[]
+| light
+
|===
-=== GnuCash
+[[okular]]
+=== Okular
-GnuCash is part of the GNOME effort to provide user-friendly, yet powerful, applications to end-users.
-GnuCash can be used to keep track of income and expenses, bank accounts, and stocks.
-It features an intuitive interface while remaining professional.
+Okular is a universal document viewer, part of the KDE Plasma project.
-GnuCash provides a smart register, a hierarchical system of accounts, and many keyboard accelerators and auto-completion methods.
-It can split a single transaction into several more detailed pieces.
-GnuCash can import and merge Quicken QIF files.
-It also handles most international date and currency formats.
+Okular combines excellent functionality with the versatility of supporting different kind of documents, like PDF, Postscript, DjVu, CHM, XPS, ePub and others.
-To install the GnuCash package:
+To install Okular, execute:
[source,shell]
....
-# pkg install gnucash
+# pkg install okular
+....
+
+[[evince]]
+=== Evince
+
+Evince is a document viewer for multiple document formats including PDF and Postscript.
+Part of the GNOME project.
+The goal of evince is to replace document viewers such as ggv and gpdf with a single, simple application.
+
+To install Evince, execute:
+
+[source,shell]
+....
+# pkg install evince
....
-If the package is not available, use the Ports Collection:
+[[epdfview]]
+=== ePDFView
+
+ePDFView is a lightweight PDF document viewer that only uses the Gtk+ and Poppler libraries.
+The aim of ePDFView is to make a simple PDF document viewer, similar to Evince but without using the GNOME libraries.
+
+To install ePDFView, execute:
[source,shell]
....
-# cd /usr/ports/finance/gnucash
-# make install clean
+# pkg install epdfview
....
-=== Gnumeric
+[[xpdf]]
+=== Xpdf
-Gnumeric is a spreadsheet program developed by the GNOME community.
-It features convenient automatic guessing of user input according to the cell format with an autofill system for many sequences.
-It can import files in a number of popular formats, including Excel, Lotus 1-2-3, and Quattro Pro.
-It has a large number of built-in functions and allows all of the usual cell formats such as number, currency, date, time, and much more.
+For users that prefer a small FreeBSD PDF viewer, Xpdf provides a light-weight and efficient viewer which requires few resources.
+It uses the standard X fonts and does not require any additional toolkit.
-To install Gnumeric as a package:
+To install Xpdf, execute:
[source,shell]
....
-# pkg install gnumeric
+# pkg install xpdf
....
-If the package is not available, use the Ports Collection:
+[[zathura]]
+=== Zathura
+
+Zathura is a highly customizable and functional document viewer. It provides a minimalistic and space saving interface as well
+as an easy usage that mainly focuses on keyboard interaction.
+
+To install zathura, with PDF support, execute:
[source,shell]
....
-# cd /usr/ports/math/gnumeric
-# make install clean
+# pkg install zathura zathura-pdf-mupdf
....
+Additionally, one can install package:graphics/zathura-pdf-poppler[] for alternative PDF support, package:graphics/zathura-ps[] for PostScript support, package:graphics/zathura-djvu[] for DjVu support, and package:graphics/zathura-cb[] for comic book support.
+
+[[desktop-finance]]
+== Finance
+
+For managing personal finances on a FreeBSD desktop, some powerful and easy-to-use applications can be installed.
+Some are compatible with widespread file formats, such as the formats used by Quicken and Excel.
+
+This section covers these programs:
+
+.Supported Finance programs
+[options="header", cols="1,1,1,1"]
+|===
+| Name | License | Package | Resources Needed
+
+| KMyMoney
+| GPL 2.0
+| package:finance/kmymoney[]
+| Heavy
+
+| GnuCash
+| GPL 2.0 and GPL 3.0
+| package:finance/gnucash[]
+| Heavy
+
+|===
+
+[[kmymoney]]
=== KMyMoney
KMyMoney is a personal finance application created by the KDE community.
@@ -622,17 +1120,28 @@ KMyMoney aims to provide the important features found in commercial personal fin
It also highlights ease-of-use and proper double-entry accounting among its features.
KMyMoney imports from standard Quicken QIF files, tracks investments, handles multiple currencies, and provides a wealth of reports.
-To install KMyMoney as a package:
+To install KMyMoney, execute:
[source,shell]
....
-# pkg install kmymoney-kde4
+# pkg install kmymoney
....
-If the package is not available, use the Ports Collection:
+[[gnucash]]
+=== GnuCash
+
+GnuCash is part of the GNOME effort to provide user-friendly, yet powerful, applications to end-users.
+GnuCash can be used to keep track of income and expenses, bank accounts, and stocks.
+It features an intuitive interface while remaining professional.
+
+GnuCash provides a smart register, a hierarchical system of accounts, and many keyboard accelerators and auto-completion methods.
+It can split a single transaction into several more detailed pieces.
+GnuCash can import and merge Quicken QIF files.
+It also handles most international date and currency formats.
+
+To install GnuCash, execute:
[source,shell]
....
-# cd /usr/ports/finance/kmymoney-kde4
-# make install clean
+# pkg install gnucash
....
diff --git a/documentation/content/en/books/handbook/desktop/_index.po b/documentation/content/en/books/handbook/desktop/_index.po
new file mode 100644
index 0000000000..9a1211ad25
--- /dev/null
+++ b/documentation/content/en/books/handbook/desktop/_index.po
@@ -0,0 +1,2074 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1
+#, no-wrap
+msgid "This chapter demonstrates how to install numerous desktop environments, including web browsers, productivity software, document viewers, and financial software"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1
+#, no-wrap
+msgid "Part II. Common Tasks"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1
+#, no-wrap
+msgid "Chapter 8. Desktop Environments"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/desktop/_index.adoc:14
+#: documentation/content/en/books/handbook/desktop/_index.adoc:65
+#, no-wrap
+msgid "Desktop Environments"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/desktop/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:57
+msgid ""
+"While FreeBSD is popular as a server for its performance and stability, it "
+"is also well suited for day-to-day use as a desktop. With over {numports} "
+"applications available in the FreeBSD ports tree, it is straightforward to "
+"build a customized desktop that can run a wide variety of desktop "
+"applications. This chapter demonstrates how to install popular desktop "
+"environments as well as desktop applications such as web browsers, "
+"productivity software, document viewers, and financial software."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:59
+msgid "Prerequisites:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:61
+msgid ""
+"Readers of this chapter should already understand how to install either the "
+"crossref:x11[x11,X Window System] or crossref:wayland[wayland,Wayland] on "
+"FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:63
+msgid ""
+"Readers are instructed throughout this chapter to install official "
+"packages. Refer to the section on crossref:ports[ports-using,using the "
+"ports collection] to build customized packages from ports."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:69
+msgid ""
+"This section describes how to install and configure some popular desktop "
+"environments on a FreeBSD system. A desktop environment can range from a "
+"simple window manager to a complete suite of desktop applications."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/desktop/_index.adoc:70
+#, no-wrap
+msgid "Supported desktop environments"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:73
+#: documentation/content/en/books/handbook/desktop/_index.adoc:549
+#: documentation/content/en/books/handbook/desktop/_index.adoc:755
+#: documentation/content/en/books/handbook/desktop/_index.adoc:910
+#: documentation/content/en/books/handbook/desktop/_index.adoc:992
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1081
+#, no-wrap
+msgid "Name"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:73
+#: documentation/content/en/books/handbook/desktop/_index.adoc:549
+#: documentation/content/en/books/handbook/desktop/_index.adoc:755
+#: documentation/content/en/books/handbook/desktop/_index.adoc:910
+#: documentation/content/en/books/handbook/desktop/_index.adoc:992
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1081
+#, no-wrap
+msgid "License"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:75
+#: documentation/content/en/books/handbook/desktop/_index.adoc:549
+#: documentation/content/en/books/handbook/desktop/_index.adoc:755
+#: documentation/content/en/books/handbook/desktop/_index.adoc:910
+#: documentation/content/en/books/handbook/desktop/_index.adoc:992
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1081
+#, no-wrap
+msgid "Package"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:76
+#: documentation/content/en/books/handbook/desktop/_index.adoc:102
+#, no-wrap
+msgid "KDE Plasma"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:77
+#: documentation/content/en/books/handbook/desktop/_index.adoc:81
+#: documentation/content/en/books/handbook/desktop/_index.adoc:93
+#: documentation/content/en/books/handbook/desktop/_index.adoc:573
+#: documentation/content/en/books/handbook/desktop/_index.adoc:593
+#: documentation/content/en/books/handbook/desktop/_index.adoc:924
+#, no-wrap
+msgid "GPL 2.0 or later"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:79
+#, no-wrap
+msgid "x11/kde5"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:80
+#: documentation/content/en/books/handbook/desktop/_index.adoc:195
+#, no-wrap
+msgid "GNOME"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:83
+#, no-wrap
+msgid "x11/gnome"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:84
+#: documentation/content/en/books/handbook/desktop/_index.adoc:264
+#, no-wrap
+msgid "XFCE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:85
+#, no-wrap
+msgid "GPL, LGPL, BSD"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:87
+#, no-wrap
+msgid "x11-wm/xfce4"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:88
+#: documentation/content/en/books/handbook/desktop/_index.adoc:330
+#, no-wrap
+msgid "MATE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:89
+#, no-wrap
+msgid "GPL 2.0, LGPL 2.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:91
+#, no-wrap
+msgid "x11/mate"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:92
+#: documentation/content/en/books/handbook/desktop/_index.adoc:404
+#, no-wrap
+msgid "Cinnamon"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:95
+#, no-wrap
+msgid "x11/cinnamon"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:96
+#: documentation/content/en/books/handbook/desktop/_index.adoc:470
+#, no-wrap
+msgid "LXQT"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:97
+#, no-wrap
+msgid "GPL, LGPL"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:99
+#, no-wrap
+msgid "x11-wm/lxqt"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:108
+msgid ""
+"KDE Plasma is an easy-to-use desktop environment. This desktop provides a "
+"suite of applications with a consistent look and feel, a standardized menu "
+"and toolbars, keybindings, color-schemes, internationalization, and a "
+"centralized, dialog-driven desktop configuration. More information on KDE "
+"can be found at the link:https://kde.org/[KDE homepage]. For FreeBSD-"
+"specific information, consult the link:https://freebsd.kde.org/[FreeBSD "
+"homepage at KDE]."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/desktop/_index.adoc:110
+#, no-wrap
+msgid "Install KDE Plasma meta package"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:113
+msgid ""
+"To install the KDE Plasma meta package with KDE Frameworks, Plasma Desktop "
+"and Applications execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:117
+#, no-wrap
+msgid "# pkg install kde5\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/desktop/_index.adoc:120
+#, no-wrap
+msgid "Minimal KDE Plasma installation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:123
+msgid "To install a minimal KDE Plasma execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:127
+#, no-wrap
+msgid "# pkg install plasma5-plasma\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:133
+msgid ""
+"This installation is *really* minimal. Konsole must be installed separately "
+"executing:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:137
+#, no-wrap
+msgid "# pkg install konsole\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/desktop/_index.adoc:141
+#, no-wrap
+msgid "Configure KDE Plasma"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:145
+msgid ""
+"KDE Plasma uses man:dbus-daemon[1] for a message bus and hardware "
+"abstraction. This application is automatically installed as a dependency of "
+"KDE Plasma."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:147
+#: documentation/content/en/books/handbook/desktop/_index.adoc:236
+msgid "Enable D-BUS service in `/etc/rc.conf` to start at system boot:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:151
+#: documentation/content/en/books/handbook/desktop/_index.adoc:240
+#: documentation/content/en/books/handbook/desktop/_index.adoc:300
+#: documentation/content/en/books/handbook/desktop/_index.adoc:374
+#: documentation/content/en/books/handbook/desktop/_index.adoc:440
+#: documentation/content/en/books/handbook/desktop/_index.adoc:506
+#, no-wrap
+msgid "# sysrc dbus_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:154
+msgid "To increase messages size execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:159
+#, no-wrap
+msgid ""
+"sysctl net.local.stream.recvspace=65536\n"
+"sysctl net.local.stream.sendspace=65536\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/desktop/_index.adoc:162
+#, no-wrap
+msgid "Start KDE Plasma"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:166
+msgid ""
+"The preferred KDE Plasma display manager is package:x11/sddm[]. To install "
+"package:x11/sddm[], execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:170
+#: documentation/content/en/books/handbook/desktop/_index.adoc:517
+#, no-wrap
+msgid "# pkg install sddm\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:173
+#: documentation/content/en/books/handbook/desktop/_index.adoc:520
+msgid "Enable SDDM service in `/etc/rc.conf` to start at system boot:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:177
+#: documentation/content/en/books/handbook/desktop/_index.adoc:524
+#, no-wrap
+msgid "# sysrc sddm_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:180
+msgid ""
+"The keyboard language can be set in SDDM by running the following command "
+"(for Spanish, for example):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:184
+#: documentation/content/en/books/handbook/desktop/_index.adoc:531
+#, no-wrap
+msgid "# sysrc sddm_lang=\"es_ES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:188
+msgid ""
+"A second method to start KDE Plasma is by manually invoking man:startx[1]. "
+"For this to work, the following line is needed in ~/.xinitrc:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:192
+#, no-wrap
+msgid "% echo \"exec dbus-launch --exit-with-x11 ck-launch-session startplasma-x11\" > ~/.xinitrc\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:199
+msgid ""
+"GNOME is a user-friendly desktop environment. It includes a panel for "
+"starting applications and displaying status, a desktop, a set of tools and "
+"applications, and a set of conventions that make it easy for applications to "
+"cooperate and be consistent with each other."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/desktop/_index.adoc:201
+#, no-wrap
+msgid "Install GNOME meta package"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:204
+msgid ""
+"To install the GNOME meta package with GNOME Desktop and Applications, "
+"execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:208
+#, no-wrap
+msgid "# pkg install gnome\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/desktop/_index.adoc:211
+#, no-wrap
+msgid "Minimal GNOME installation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:214
+msgid ""
+"To install the GNOME-lite meta package with a GNOME desktop slimmed down for "
+"only the basics, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:218
+#, no-wrap
+msgid "# pkg install gnome-lite\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/desktop/_index.adoc:221
+#, no-wrap
+msgid "Configure GNOME"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:225
+msgid ""
+"GNOME requires `/proc` to be mounted. Add this line to `/etc/fstab` to "
+"mount this file system automatically during system startup:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:230
+#: documentation/content/en/books/handbook/desktop/_index.adoc:290
+#: documentation/content/en/books/handbook/desktop/_index.adoc:365
+#: documentation/content/en/books/handbook/desktop/_index.adoc:431
+#: documentation/content/en/books/handbook/desktop/_index.adoc:496
+#, no-wrap
+msgid ""
+"# Device Mountpoint FStype Options Dump Pass#\n"
+"proc /proc procfs rw 0 0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:234
+msgid ""
+"GNOME uses man:dbus-daemon[1] for a message bus and hardware abstraction. "
+"This application is automatically installed as a dependency of GNOME."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/desktop/_index.adoc:243
+#, no-wrap
+msgid "Start GNOME"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:247
+msgid ""
+"GNOME Display Manager is the preferred display manager for GNOME. GDM is "
+"installed as part of the GNOME package."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:249
+msgid "Enable GDM in `/etc/rc.conf` to start at system boot:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:253
+#, no-wrap
+msgid "# sysrc gdm_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:257
+msgid ""
+"A second method to start GNOME is by manually invoking man:startx[1]. For "
+"this to work, the following line is needed in `~/.xinitrc`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:261
+#, no-wrap
+msgid "% echo \"exec gnome-session\" > ~/.xinitrc\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:269
+msgid ""
+"XFCE is a desktop environment based on the GTK+, lightweight and provides a "
+"simple, efficient, easy-to-use desktop. It is fully configurable, has a "
+"main panel with menus, applets, and application launchers, provides a file "
+"manager and sound manager, and is themeable. Since it is fast, light, and "
+"efficient, it is ideal for older or slower machines with memory limitations."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/desktop/_index.adoc:271
+#, no-wrap
+msgid "Install XFCE"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:274
+msgid "To install the XFCE meta package, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:278
+#, no-wrap
+msgid "# pkg install xfce\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/desktop/_index.adoc:281
+#, no-wrap
+msgid "Configure XFCE"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:285
+msgid ""
+"XFCE requires `/proc` to be mounted. Add this line to `/etc/fstab` to mount "
+"this file system automatically during system startup:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:294
+msgid ""
+"XFCE uses man:dbus-daemon[1] for a message bus and hardware abstraction. "
+"This application is automatically installed as a dependency of XFCE."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:296
+#: documentation/content/en/books/handbook/desktop/_index.adoc:502
+msgid "Enable D-BUS in `/etc/rc.conf` to start at system boot:"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/desktop/_index.adoc:303
+#, no-wrap
+msgid "Start XFCE"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:306
+#: documentation/content/en/books/handbook/desktop/_index.adoc:380
+#: documentation/content/en/books/handbook/desktop/_index.adoc:446
+msgid ""
+"package:x11/lightdm[] is a display manager that supports different display "
+"technologies and is a good choice as it is very lightweight, requires little "
+"memory usage, and has fast performance."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:308
+#: documentation/content/en/books/handbook/desktop/_index.adoc:382
+msgid "To install it, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:312
+#: documentation/content/en/books/handbook/desktop/_index.adoc:386
+#: documentation/content/en/books/handbook/desktop/_index.adoc:452
+#, no-wrap
+msgid "# pkg install lightdm lightdm-gtk-greeter\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:315
+#: documentation/content/en/books/handbook/desktop/_index.adoc:389
+#: documentation/content/en/books/handbook/desktop/_index.adoc:455
+msgid "Enable lightdm in `/etc/rc.conf` to start at system boot:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:319
+#: documentation/content/en/books/handbook/desktop/_index.adoc:393
+#: documentation/content/en/books/handbook/desktop/_index.adoc:459
+#, no-wrap
+msgid "# sysrc lightdm_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:323
+msgid ""
+"A second method to start XFCE is by manually invoking man:startx[1]. For "
+"this to work, the following line is needed in `~/.xinitrc`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:327
+#, no-wrap
+msgid "% echo '. /usr/local/etc/xdg/xfce4/xinitrc' > ~/.xinitrc\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:334
+msgid ""
+"The MATE Desktop Environment is the continuation of GNOME 2. It provides an "
+"intuitive and attractive desktop environment using traditional metaphors."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/desktop/_index.adoc:336
+#, no-wrap
+msgid "Install MATE meta package"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:339
+msgid ""
+"To install the MATE meta package that includes the MATE Desktop with some "
+"extra applications such as text editor, archiver manager, etc., execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:343
+#, no-wrap
+msgid "# pkg install mate\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/desktop/_index.adoc:346
+#, no-wrap
+msgid "Minimal MATE installation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:349
+msgid ""
+"To install the MATE lite meta package with MATE desktop slimmed down for "
+"only the basics, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:353
+#, no-wrap
+msgid "# pkg install mate-base\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/desktop/_index.adoc:356
+#, no-wrap
+msgid "Configure MATE"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:360
+msgid ""
+"MATE requires `/proc` to be mounted. Add this line to `/etc/fstab` to mount "
+"this file system automatically during system startup:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:370
+msgid ""
+"MATE uses man:dbus-daemon[1] for a message bus and hardware abstraction. "
+"This application is automatically installed as a dependency of MATE. Enable "
+"D-BUS in `/etc/rc.conf` to start at system boot:"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/desktop/_index.adoc:377
+#, no-wrap
+msgid "Start MATE"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:397
+msgid ""
+"A second method to start MATE is by manually invoking man:startx[1]. For "
+"this to work, the following line is needed in `~/.xinitrc`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:401
+#, no-wrap
+msgid "% echo \"exec dbus-launch --exit-with-x11 ck-launch-session mate-session\" > ~/.xinitrc\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:410
+msgid ""
+"Cinnamon is a UNIX(R) desktop which provides advanced innovative features "
+"and a traditional user experience. The desktop layout is similar to Gnome "
+"2. The underlying technology is forked from Gnome Shell. The emphasis is "
+"put on making users feel at home and providing them with an easy to use and "
+"comfortable desktop experience."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/desktop/_index.adoc:412
+#, no-wrap
+msgid "Install Cinnamon"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:415
+msgid "To install the Cinnamon package, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:419
+#, no-wrap
+msgid "# pkg install cinnamon\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/desktop/_index.adoc:422
+#, no-wrap
+msgid "Configure Cinnamon"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:426
+msgid ""
+"Cinnamon requires `/proc` to be mounted. Add this line to `/etc/fstab` to "
+"mount this file system automatically during system startup:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:436
+msgid ""
+"Cinnamon uses man:dbus-daemon[1] for a message bus and hardware "
+"abstraction. This application is automatically installed as a dependency of "
+"Cinnamon. Enable D-BUS in `/etc/rc.conf` to start at system boot:"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/desktop/_index.adoc:443
+#, no-wrap
+msgid "Start Cinnamon"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:448
+msgid "To install it execute:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:463
+msgid ""
+"A second method to start Cinnamon is by manually invoking man:startx[1]. "
+"For this to work, the following line is needed in `~/.xinitrc`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:467
+#, no-wrap
+msgid "% echo \"exec dbus-launch --exit-with-x11 ck-launch-session cinnamon-session\" > ~/.xinitrc\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:475
+msgid ""
+"LXQt is an advanced, easy-to-use, and fast desktop environment based on Qt "
+"technologies. It has been tailored for users who value simplicity, speed, "
+"and an intuitive interface. Unlike most desktop environments, LXQt also "
+"works fine with less powerful machines."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/desktop/_index.adoc:477
+#, no-wrap
+msgid "Install LXQT"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:480
+msgid "To install the LXQT meta package, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:484
+#, no-wrap
+msgid "# pkg install lxqt\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/desktop/_index.adoc:487
+#, no-wrap
+msgid "Configure LXQT"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:491
+msgid ""
+"LXQT requires `/proc` to be mounted. Add this line to `/etc/fstab` to mount "
+"this file system automatically during system startup:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:500
+msgid ""
+"LXQT uses man:dbus-daemon[1] for a message bus and hardware abstraction. "
+"This application is automatically installed as a dependency of LXQT."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/desktop/_index.adoc:509
+#, no-wrap
+msgid "Start LXQT"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:513
+msgid ""
+"The preferred LXQT display manager is package:x11/sddm[]. To install "
+"package:x11/sddm[], execute:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:527
+msgid ""
+"The keyboard language can be set in SDDM by running the following command "
+"(for example, for Spanish):"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:535
+msgid ""
+"A second method to start LXQT is by manually invoking man:startx[1]. For "
+"this to work, the following line is needed in `~/.xinitrc`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:539
+#, no-wrap
+msgid "% echo \"exec dbus-launch --exit-with-x11 ck-launch-session startlxqt\" > ~/.xinitrc\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/desktop/_index.adoc:542
+#, no-wrap
+msgid "Browsers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:545
+msgid ""
+"This section describes how to install and configure some popular web "
+"browsers on a FreeBSD system, from full web browsers with high resource "
+"consumption to command line web browsers with reduced resource usage."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/desktop/_index.adoc:546
+#, no-wrap
+msgid "Supported browsers"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:551
+#: documentation/content/en/books/handbook/desktop/_index.adoc:757
+#: documentation/content/en/books/handbook/desktop/_index.adoc:912
+#: documentation/content/en/books/handbook/desktop/_index.adoc:994
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1083
+#, no-wrap
+msgid "Resources Needed"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:552
+#: documentation/content/en/books/handbook/desktop/_index.adoc:604
+#, no-wrap
+msgid "Firefox"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:553
+#: documentation/content/en/books/handbook/desktop/_index.adoc:568
+#: documentation/content/en/books/handbook/desktop/_index.adoc:914
+#, no-wrap
+msgid "MPL 2.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:554
+#, no-wrap
+msgid "package:www/firefox[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:556
+#: documentation/content/en/books/handbook/desktop/_index.adoc:561
+#: documentation/content/en/books/handbook/desktop/_index.adoc:566
+#: documentation/content/en/books/handbook/desktop/_index.adoc:571
+#: documentation/content/en/books/handbook/desktop/_index.adoc:762
+#: documentation/content/en/books/handbook/desktop/_index.adoc:767
+#: documentation/content/en/books/handbook/desktop/_index.adoc:772
+#: documentation/content/en/books/handbook/desktop/_index.adoc:777
+#: documentation/content/en/books/handbook/desktop/_index.adoc:917
+#: documentation/content/en/books/handbook/desktop/_index.adoc:999
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1088
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1093
+#, no-wrap
+msgid "Heavy"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:557
+#: documentation/content/en/books/handbook/desktop/_index.adoc:624
+#, no-wrap
+msgid "Chromium"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:558
+#: documentation/content/en/books/handbook/desktop/_index.adoc:563
+#, no-wrap
+msgid "BSD-3 and others"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:559
+#, no-wrap
+msgid "package:www/chromium[]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:562
+#: documentation/content/en/books/handbook/desktop/_index.adoc:643
+#, no-wrap
+msgid "Iridium browser"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:564
+#, no-wrap
+msgid "package:www/iridium-browser[]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:567
+#: documentation/content/en/books/handbook/desktop/_index.adoc:656
+#, no-wrap
+msgid "Falkon"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:569
+#, no-wrap
+msgid "package:www/falkon-qtonly[]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:572
+#: documentation/content/en/books/handbook/desktop/_index.adoc:672
+#, no-wrap
+msgid "Konqueror"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:574
+#, no-wrap
+msgid "package:x11-fm/konqueror[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:576
+#: documentation/content/en/books/handbook/desktop/_index.adoc:581
+#: documentation/content/en/books/handbook/desktop/_index.adoc:586
+#: documentation/content/en/books/handbook/desktop/_index.adoc:922
+#: documentation/content/en/books/handbook/desktop/_index.adoc:927
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1004
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1009
+#, no-wrap
+msgid "Medium"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:577
+#: documentation/content/en/books/handbook/desktop/_index.adoc:685
+#, no-wrap
+msgid "Gnome Web (Epiphany)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:578
+#: documentation/content/en/books/handbook/desktop/_index.adoc:583
+#: documentation/content/en/books/handbook/desktop/_index.adoc:588
+#: documentation/content/en/books/handbook/desktop/_index.adoc:789
+#, no-wrap
+msgid "GPL 3.0 or later"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:579
+#, no-wrap
+msgid "package:www/epiphany[]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:582
+#: documentation/content/en/books/handbook/desktop/_index.adoc:697
+#, no-wrap
+msgid "qutebrowser"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:584
+#, no-wrap
+msgid "package:www/qutebrowser[]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:587
+#: documentation/content/en/books/handbook/desktop/_index.adoc:710
+#, no-wrap
+msgid "Dillo"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:589
+#, no-wrap
+msgid "package:www/dillo2[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:591
+#: documentation/content/en/books/handbook/desktop/_index.adoc:596
+#: documentation/content/en/books/handbook/desktop/_index.adoc:601
+#: documentation/content/en/books/handbook/desktop/_index.adoc:782
+#: documentation/content/en/books/handbook/desktop/_index.adoc:787
+#: documentation/content/en/books/handbook/desktop/_index.adoc:792
+#, no-wrap
+msgid "Light"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:592
+#: documentation/content/en/books/handbook/desktop/_index.adoc:723
+#, no-wrap
+msgid "Links"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:594
+#, no-wrap
+msgid "package:www/links[]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:597
+#: documentation/content/en/books/handbook/desktop/_index.adoc:735
+#, no-wrap
+msgid "w3m"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:598
+#: documentation/content/en/books/handbook/desktop/_index.adoc:759
+#, no-wrap
+msgid "MIT"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:599
+#, no-wrap
+msgid "package:www/w3m[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:608
+msgid ""
+"Firefox is an open source browser that features a standards-compliant HTML "
+"display engine, tabbed browsing, popup blocking, extensions, improved "
+"security, and more. Firefox is based on the Mozilla codebase."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:610
+msgid ""
+"To install the package of the latest release version of Firefox, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:614
+#, no-wrap
+msgid "# pkg install firefox\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:617
+msgid ""
+"To instead install Firefox Extended Support Release (ESR) version, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:621
+#, no-wrap
+msgid "# pkg install firefox-esr\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:629
+msgid ""
+"Chromium is an open source browser project that aims to build a safer, "
+"faster, and more stable web browsing experience. Chromium features tabbed "
+"browsing, popup blocking, extensions, and much more. Chromium is the open "
+"source project upon which the Google Chrome web browser is based."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:631
+msgid "To install Chromium, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:635
+#, no-wrap
+msgid "# pkg install chromium\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:640
+msgid ""
+"The executable for Chromium is [.filename]#/usr/local/bin/chrome#, not [."
+"filename]#/usr/local/bin/chromium#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:647
+msgid ""
+"Iridium is a free, open, and libre browser modification of the Chromium code "
+"base, with privacy being enhanced in several key areas. Automatic "
+"transmission of partial queries, keywords, metrics to central services is "
+"inhibited and only occurs with consent."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:649
+msgid "To install Iridium, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:653
+#, no-wrap
+msgid "# pkg install iridium-browser\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:663
+msgid ""
+"Falkon is a new-ish and very fast QtWebEngine browser. It aims to be a "
+"lightweight web browser available on all major platforms. Falkon has all "
+"standard functions someone can expect from a web browser. It includes "
+"bookmarks, history (both also in sidebar) and tabs. Beyond that, AdBlock "
+"plugin can block ads, Click2Flash can block Flash content and SSL Manager "
+"can edit the local CA Certificates database."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:665
+msgid "To install Falkon, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:669
+#, no-wrap
+msgid "# pkg install falkon\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:676
+msgid ""
+"Konqueror is more than a web browser as it is also a file manager and a "
+"multimedia viewer. It supports WebKit, a rendering engine used by many "
+"modern browsers including Chromium, as well as its own KHTML engine."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:678
+msgid "To install Konqueror, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:682
+#, no-wrap
+msgid "# pkg install konqueror\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:688
+msgid ""
+"Gnome Web (Epiphany) is a web browser designed to be as lightweight and fast "
+"as possible, at the expense of many of the features found in other browsers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:690
+msgid "To install Gnome Web (Epiphany), execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:694
+#, no-wrap
+msgid "# pkg install epiphany\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:701
+msgid ""
+"Qutebrowser is a keyboard-focused browser with a minimal GUI. It is based "
+"on Python and PyQt5 and free software, licensed under the GPL."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:703
+msgid "To install qutebrowser, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:707
+#, no-wrap
+msgid "# pkg install qutebrowser\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:714
+msgid ""
+"Dillo aims to be a multiplatform alternative browser that is small, stable, "
+"developer-friendly, usable, fast, and extensible. This new, experimental "
+"version of Dillo is based upon FLTK toolkit, rather than GTK1, and has been "
+"substantially rewritten."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:716
+msgid "To install Dillo, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:720
+#, no-wrap
+msgid "# pkg install dillo2\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:726
+msgid ""
+"A lynx-like web browser with text and graphics modes with many features like "
+"displaying tables, menus, etc."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:728
+msgid "To install Links, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:732
+#, no-wrap
+msgid "# pkg install links\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:739
+msgid ""
+"w3m is a pager/text-based web browser. It is a similar application to Lynx, "
+"but it has several features Lynx does not have like rendering tables and "
+"rendering frames."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:741
+msgid "To install w3m, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:745
+#, no-wrap
+msgid "# pkg install w3m\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/desktop/_index.adoc:748
+#, no-wrap
+msgid "Development tools"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:751
+msgid ""
+"This section describes how to install and configure some popular development "
+"tools on a FreeBSD system."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/desktop/_index.adoc:752
+#, no-wrap
+msgid "Supported development tools"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:758
+#: documentation/content/en/books/handbook/desktop/_index.adoc:795
+#, no-wrap
+msgid "Visual Studio Code"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:760
+#, no-wrap
+msgid "package:editors/vscode[]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:763
+#: documentation/content/en/books/handbook/desktop/_index.adoc:808
+#, no-wrap
+msgid "Qt Creator"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:764
+#, no-wrap
+msgid "QtGPL"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:765
+#, no-wrap
+msgid "package:devel/qtcreator[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:768
+#, no-wrap
+msgid "Kdevelop"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:769
+#, no-wrap
+msgid "GPL 2.0 or later and LGPL 2.0 or later"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:770
+#, no-wrap
+msgid "package:devel/kdevelop[]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:773
+#: documentation/content/en/books/handbook/desktop/_index.adoc:841
+#, no-wrap
+msgid "Eclipse IDE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:774
+#, no-wrap
+msgid "EPL"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:775
+#, no-wrap
+msgid "package:java/eclipse[]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:778
+#: documentation/content/en/books/handbook/desktop/_index.adoc:855
+#, no-wrap
+msgid "Vim"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:779
+#, no-wrap
+msgid "VIM"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:780
+#, no-wrap
+msgid "package:editors/vim[]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:783
+#: documentation/content/en/books/handbook/desktop/_index.adoc:872
+#, no-wrap
+msgid "Neovim"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:784
+#, no-wrap
+msgid "Apache 2.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:785
+#, no-wrap
+msgid "package:editors/neovim[]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:788
+#: documentation/content/en/books/handbook/desktop/_index.adoc:886
+#, no-wrap
+msgid "GNU Emacs"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:790
+#, no-wrap
+msgid "package:editors/emacs[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:799
+msgid ""
+"Visual Studio Code is a type of tool that combines the simplicity of a code "
+"editor with what developers need for their core edit-build-debug cycle. It "
+"provides comprehensive editing and debugging support, an extensibility "
+"model, and lightweight integration with existing tools."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:801
+msgid "To install Visual Studio Code, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:805
+#, no-wrap
+msgid "# pkg install vscode\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:812
+msgid ""
+"Qt Creator is a cross-platform IDE (integrated development environment) "
+"tailored to the needs of Qt developers. Functionalities included with Qt "
+"Creator are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:814
+msgid "code editor with C++, QML and ECMAscript support;"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:815
+msgid "rapid code navigation tools;"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:816
+msgid "static code checking and style hints as you type;"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:817
+msgid "context sensitive help;"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:818
+msgid "visual debugger;"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:819
+msgid "integrated GUI layout and forms designer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:821
+msgid "To install Qt Creator, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:825
+#, no-wrap
+msgid "# pkg install qtcreator\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:828
+#, no-wrap
+msgid "kdevelop"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:832
+msgid ""
+"Open source, feature-full, plugin extensible IDE for C/C++ and other "
+"programming languages. It is based on KDevPlatform and the KDE and Qt "
+"libraries, and it has been under development since 1998."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:834
+msgid "To install kdevelop, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:838
+#, no-wrap
+msgid "# pkg install kdevelop\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:846
+msgid ""
+"The Eclipse Platform is an open extensible IDE for anything and yet nothing "
+"in particular. The Eclipse Platform provides building blocks and a "
+"foundation for constructing and running integrated software-development "
+"tools. The Eclipse Platform allows tool builders to independently develop "
+"tools that integrate with other people's tools."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:848
+msgid "To install Eclipse IDE, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:852
+#, no-wrap
+msgid "# pkg install eclipse\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:859
+msgid ""
+"Vim is a highly configurable text editor built to enable efficient text "
+"editing. It is an improved version of the vi editor distributed with most "
+"UNIX systems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:863
+msgid ""
+"Vim is often called a \"programmer's editor,\" and so useful for programming "
+"that many consider it an entire IDE. It is not just for programmers, "
+"though. Vim is perfect for all kinds of text editing, from composing email "
+"to editing configuration files."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:865
+msgid "To install Vim, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:869
+#, no-wrap
+msgid "# pkg install vim\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:877
+msgid ""
+"Neovim is an aggressive refactor of package:editors/vim[]. It represents a "
+"complete overhaul of the codebase with many sanity improvements, including "
+"sensible defaults, a built-in terminal emulator, asynchronous plugin "
+"architecture, and powerful APIs designed for speed and extensibility. It "
+"retains full compatibility with almost all Vim plugins and scripts."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:879
+msgid "To install Neovim, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:883
+#, no-wrap
+msgid "# pkg install neovim\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:890
+msgid ""
+"GNU Emacs is an extensible, customizable, free/libre text editor. At its "
+"core is an interpreter for Emacs Lisp, a dialect of the Lisp programming "
+"language with extensions to support text editing."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:892
+msgid "To install GNU Emacs, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:896
+#, no-wrap
+msgid "# pkg install emacs\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/desktop/_index.adoc:899
+#, no-wrap
+msgid "Desktop office productivity"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:904
+msgid ""
+"When it comes to productivity, users often look for an office suite or an "
+"easy-to-use word processor. While some desktop environments like <<kde-"
+"environment, KDE Plasma>> provide an office suite, there is no default "
+"productivity package. Several office suites and graphical word processors "
+"are available for FreeBSD, regardless of the installed desktop environments."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:906
+msgid ""
+"This section demonstrates how to install the following popular productivity "
+"software and indicates if the application is resource-heavy, takes time to "
+"compile from ports, or has any major dependencies."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/desktop/_index.adoc:907
+#, no-wrap
+msgid "Supported Desktop office productivity suites"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:913
+#: documentation/content/en/books/handbook/desktop/_index.adoc:930
+#, no-wrap
+msgid "LibreOffice"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:915
+#, no-wrap
+msgid "package:editors/libreoffice[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:918
+#, no-wrap
+msgid "Calligra Suite"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:919
+#, no-wrap
+msgid "LGPL and GPL"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:920
+#, no-wrap
+msgid "package:editors/calligra[]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:923
+#: documentation/content/en/books/handbook/desktop/_index.adoc:969
+#, no-wrap
+msgid "AbiWord"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:925
+#, no-wrap
+msgid "package:editors/abiword[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:937
+msgid ""
+"LibreOffice is a free software office suite developed by http://www."
+"documentfoundation.org/[The Document Foundation]. It is compatible with "
+"other major office suites and available on a variety of platforms. It is a "
+"rebranded fork of Apache OpenOffice and includes applications found in a "
+"complete office productivity suite: a word processor, spreadsheet, "
+"presentation manager, drawing program, database management program, and a "
+"tool for creating and editing mathematical formulæ. It is available in a "
+"number of different languages and internationalization has been extended to "
+"interfaces, spell checkers, and dictionaries. More information about "
+"LibreOffice can be found at http://www.libreoffice.org/[libreoffice.org]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:939
+msgid "To install LibreOffice, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:943
+#, no-wrap
+msgid "# pkg install libreoffice\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:948
+msgid ""
+"The LibreOffice package comes by default only in English. To have a "
+"localized version of LibreOffice it is necessary to install a language "
+"pack. For example, for the version localized in Spanish, it is necessary to "
+"install the package package:editors/libreoffice-es[] with the command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:952
+#, no-wrap
+msgid "# pkg install libreoffice-es\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:955
+#, no-wrap
+msgid "Calligra"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:960
+msgid ""
+"The KDE Plasma desktop environment includes an office suite which can be "
+"installed separately from KDE Plasma. Calligra includes standard components "
+"that can be found in other office suites. Words is the word processor, "
+"Sheets is the spreadsheet program, Stage manages slide presentations, and "
+"Karbon is used to draw graphical documents."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:962
+msgid "To install Calligra, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:966
+#, no-wrap
+msgid "# pkg install calligra\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:973
+msgid ""
+"AbiWord is a free word processing program similar in look and feel to "
+"Microsoft(R) Word. It is fast, contains many features, and is user-friendly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:975
+msgid ""
+"AbiWord can import or export many file formats, including some proprietary "
+"ones like Microsoft(R) [.filename]#.rtf#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:977
+msgid "To install AbiWord, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:981
+#, no-wrap
+msgid "# pkg install abiword\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/desktop/_index.adoc:984
+#, no-wrap
+msgid "Document Viewers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:988
+msgid ""
+"Some new document formats have gained popularity since the advent of UNIX(R) "
+"and the viewers they require may not be available in the base system. This "
+"section demonstrates how to install the following document viewers:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/desktop/_index.adoc:989
+#, no-wrap
+msgid "Supported Document Viewers"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:995
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1017
+#, no-wrap
+msgid "Okular"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:996
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1001
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1006
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1011
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1085
+#, no-wrap
+msgid "GPL 2.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:997
+#, no-wrap
+msgid "package:graphics/okular[]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1000
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1031
+#, no-wrap
+msgid "Evince"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1002
+#, no-wrap
+msgid "package:graphics/evince[]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1005
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1045
+#, no-wrap
+msgid "ePDFView"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1007
+#, no-wrap
+msgid "package:graphics/epdfview[]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1010
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1058
+#, no-wrap
+msgid "Xpdf"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1012
+#, no-wrap
+msgid "package:graphics/xpdf[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1014
+#, no-wrap
+msgid "light"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1020
+msgid "Okular is a universal document viewer, part of the KDE Plasma project."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1022
+msgid ""
+"Okular combines excellent functionality with the versatility of supporting "
+"different kind of documents, like PDF, Postscript, DjVu, CHM, XPS, ePub and "
+"others."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1024
+msgid "To install Okular, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1028
+#, no-wrap
+msgid "# pkg install okular\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1036
+msgid ""
+"Evince is a document viewer for multiple document formats including PDF and "
+"Postscript. Part of the GNOME project. The goal of evince is to replace "
+"document viewers such as ggv and gpdf with a single, simple application."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1038
+msgid "To install Evince, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1042
+#, no-wrap
+msgid "# pkg install evince\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1049
+msgid ""
+"ePDFView is a lightweight PDF document viewer that only uses the Gtk+ and "
+"Poppler libraries. The aim of ePDFView is to make a simple PDF document "
+"viewer, similar to Evince but without using the GNOME libraries."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1051
+msgid "To install ePDFView, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1055
+#, no-wrap
+msgid "# pkg install epdfview\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1062
+msgid ""
+"For users that prefer a small FreeBSD PDF viewer, Xpdf provides a light-"
+"weight and efficient viewer which requires few resources. It uses the "
+"standard X fonts and does not require any additional toolkit."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1064
+msgid "To install Xpdf, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1068
+#, no-wrap
+msgid "# pkg install xpdf\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1071
+#, no-wrap
+msgid "Finance"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1075
+msgid ""
+"For managing personal finances on a FreeBSD desktop, some powerful and easy-"
+"to-use applications can be installed. Some are compatible with widespread "
+"file formats, such as the formats used by Quicken and Excel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1077
+msgid "This section covers these programs:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1078
+#, no-wrap
+msgid "Supported Finance programs"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1084
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1096
+#, no-wrap
+msgid "KMyMoney"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1086
+#, no-wrap
+msgid "package:finance/kmymoney[]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1089
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1111
+#, no-wrap
+msgid "GnuCash"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1090
+#, no-wrap
+msgid "GPL 2.0 and GPL 3.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1091
+#, no-wrap
+msgid "package:finance/gnucash[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1102
+msgid ""
+"KMyMoney is a personal finance application created by the KDE community. "
+"KMyMoney aims to provide the important features found in commercial personal "
+"finance manager applications. It also highlights ease-of-use and proper "
+"double-entry accounting among its features. KMyMoney imports from standard "
+"Quicken QIF files, tracks investments, handles multiple currencies, and "
+"provides a wealth of reports."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1104
+msgid "To install KMyMoney, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1108
+#, no-wrap
+msgid "# pkg install kmymoney\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1116
+msgid ""
+"GnuCash is part of the GNOME effort to provide user-friendly, yet powerful, "
+"applications to end-users. GnuCash can be used to keep track of income and "
+"expenses, bank accounts, and stocks. It features an intuitive interface "
+"while remaining professional."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1121
+msgid ""
+"GnuCash provides a smart register, a hierarchical system of accounts, and "
+"many keyboard accelerators and auto-completion methods. It can split a "
+"single transaction into several more detailed pieces. GnuCash can import "
+"and merge Quicken QIF files. It also handles most international date and "
+"currency formats."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1123
+msgid "To install GnuCash, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/desktop/_index.adoc:1127
+#, no-wrap
+msgid "# pkg install gnucash\n"
+msgstr ""
diff --git a/documentation/content/en/books/handbook/disks/_index.adoc b/documentation/content/en/books/handbook/disks/_index.adoc
index 20272d58bb..cf11fbd70f 100644
--- a/documentation/content/en/books/handbook/disks/_index.adoc
+++ b/documentation/content/en/books/handbook/disks/_index.adoc
@@ -1,13 +1,13 @@
---
-title: Chapter 18. Storage
+title: Chapter 20. Storage
part: Part III. System Administration
prev: books/handbook/audit
next: books/handbook/geom
description: This chapter covers the use of disks and storage media in FreeBSD. This includes SCSI and IDE disks, CD and DVD media, memory-backed disks, and USB storage devices.
tags: ["storage", "disks", "gpart", "mount", "quotas", "encrypt", "GPT", "cdrecord", "NTFS", "quotas", "swap", "HAST", "CD", "DVD", "resizing", "growing"]
showBookMenu: true
-weight: 22
-path: "/books/handbook/"
+weight: 24
+path: "/books/handbook/disks/"
---
[[disks]]
@@ -18,7 +18,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 18
+:sectnumoffset: 20
:partnums:
:source-highlighter: rouge
:experimental:
@@ -1245,21 +1245,21 @@ Instead of writing files and directories, `dump` writes the raw data blocks that
[NOTE]
====
-If `dump` is used on the root directory, it will not back up [.filename]#/home#, [.filename]#/usr# or many other directories since these are typically mount points for other file systems or symbolic links into those file systems.
+If `dump` is used on the root directory, it will not back up [.filename]#/home#, [.filename]#/usr#, or many other directories since these are typically mount points for other file systems or symbolic links into those file systems.
====
When used to restore data, `restore` stores temporary files in [.filename]#/tmp/# by default.
-When using a recovery disk with a small [.filename]#/tmp#, set `TMPDIR` to a directory with more free space in order for the restore to succeed.
+When using a recovery disk with a small [.filename]#/tmp#, set `TMPDIR` to a directory with more free space for the restore to succeed.
When using `dump`, be aware that some quirks remain from its early days in Version 6 of AT&T UNIX(R),circa 1975.
The default parameters assume a backup to a 9-track tape, rather than to another type of media or to the high-density tapes available today.
These defaults must be overridden on the command line.
-It is possible to backup a file system across the network to a another system or to a tape drive attached to another computer.
+It is possible to backup a file system across the network to another system or a tape drive attached to another computer.
While the man:rdump[8] and man:rrestore[8] utilities can be used for this purpose, they are not considered to be secure.
-Instead, one can use `dump` and `restore` in a more secure fashion over an SSH connection.
-This example creates a full, compressed backup of [.filename]#/usr# and sends the backup file to the specified host over a SSH connection.
+Instead, one can use `dump` and `restore` more securely over an SSH connection.
+This example creates a full, compressed backup of [.filename]#/usr# and sends the backup file to the specified host over an SSH connection.
.Using `dump` over ssh
[example]
@@ -1271,7 +1271,7 @@ This example creates a full, compressed backup of [.filename]#/usr# and sends th
....
====
-This example sets `RSH` in order to write the backup to a tape drive on a remote system over a SSH connection:
+This example sets `RSH` in order to write the backup to a tape drive on a remote system over an SSH connection:
.Using `dump` over ssh with `RSH` Set
[example]
@@ -1282,6 +1282,11 @@ This example sets `RSH` in order to write the backup to a tape drive on a remote
....
====
+[TIP]
+====
+Systems using the crossref:zfs[,Z file system (ZFS)] can make use of man:zfs[8] for creating snapshots, as well as crossref:zfs[zfs-zfs-send,sending and receiving] them to/from remote systems.
+====
+
=== Directory Backups
Several built-in utilities are available for backing up and restoring specified files and directories as needed.
@@ -1404,7 +1409,14 @@ To interactively restore files from a `dump` file on tape into the current direc
The FreeBSD Ports Collection provides many third-party utilities which can be used to schedule the creation of backups, simplify tape backup, and make backups easier and more convenient.
Many of these applications are client/server based and can be used to automate the backups of a single system or all of the computers in a network.
-Popular utilities include Amanda, Bacula, rsync, and duplicity.
+Popular utilities include:
+
+ * Amanda (package:misc/amanda-server[] and package:misc/amanda-client[]),
+ * Bacula (package:sysutils/bacula13-server[] and package:sysutils/bacula13-client[]),
+ * Bareos (package:sysutils/bareos-server[] and package:sysutils/bareos-client[]),
+ * package:net/rsync[],
+ * package:sysutils/duply[], and
+ * package:sysutils/duplicity[].
=== Emergency Recovery
@@ -1414,18 +1426,13 @@ Create a print copy of the output of the following commands:
* `gpart show`
* `more /etc/fstab`
+* `pkg prime-list`
* `dmesg`
Store this printout and a copy of the installation media in a secure location.
Should an emergency restore be needed, boot into the installation media and select `Live CD` to access a rescue shell.
This rescue mode can be used to view the current state of the system, and if needed, to reformat disks and restore data from backups.
-[NOTE]
-====
-The installation media for FreeBSD/i386 {rel112-current}-RELEASE does not include a rescue shell.
-For this version, instead download and burn a Livefs CD image from link:ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/ISO-IMAGES/{rel112-current}/FreeBSD-{rel112-current}-RELEASE-i386-livefs.iso[ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/ISO-IMAGES/{rel112-current}/FreeBSD-{rel112-current}-RELEASE-i386-livefs.iso].
-====
-
Next, test the rescue shell and the backups.
Make notes of the procedure.
Store these notes with the media, the printouts, and the backups.
@@ -1556,7 +1563,8 @@ For more details about `mdmfs`, refer to man:mdmfs[8].
FreeBSD offers a feature in conjunction with crossref:config[soft-updates,Soft Updates]: file system snapshots.
-UFS snapshots allow a user to create images of specified file systems, and treat them as a file.
+UFS snapshots allow a user to create images of specified file systems, and treat them as a file. If you are using the crossref:zfs[,Z file system (ZFS)], refer to crossref:zfs[zfs-zfs-snapshot,"Managing Snapshots"] on how to use snapshots.
+
Snapshot files must be created in the file system that the action is performed on, and a user may create no more than 20 snapshots per file system.
Active snapshots are recorded in the superblock so they are persistent across unmount and remount operations along with system reboots.
When a snapshot is no longer required, it can be removed using man:rm[1].
@@ -1774,7 +1782,7 @@ The asterisk `*` indicates that the user is currently over the quota limit.
Quotas are enforced by the quota subsystem on the NFS server.
The man:rpc.rquotad[8] daemon makes quota information available to `quota` on NFS clients, allowing users on those machines to see their quota statistics.
-On the NFS server, enable `rpc.rquotad` by removing the `#` from this line in [.filename]*/etc/inetd.conf*:
+On the NFS server, enable `rpc.rquotad` by removing the `+#+` from this line in [.filename]*/etc/inetd.conf*:
[.programlisting]
....
@@ -1861,7 +1869,6 @@ For use with the UFS file system, set the sector_size to 2048:
[source,shell]
....
# gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c.lock
-# $FreeBSD: src/sbin/gbde/template.txt,v 1.1.36.1 2009/08/03 08:13:06 kensmith Exp $
#
# Sector size is the smallest unit of data which can be read or written.
# Making it too small decreases performance and decreases available space.
@@ -1976,7 +1983,7 @@ This control utility adds some features and uses a different scheme for doing cr
It provides the following features:
* Utilizes the man:crypto[9] framework and automatically uses cryptographic hardware when it is available.
-* Supports multiple cryptographic algorithms such as AES, Blowfish, and 3DES.
+* Supports multiple cryptographic algorithms such as AES-XTS, AES-CBC, and Camellia-CBCAES.
* Allows the root partition to be encrypted. The passphrase used to access the encrypted root partition will be requested during system boot.
* Allows the use of two independent keys.
* It is fast as it performs simple sector-to-sector encryption.
@@ -2171,12 +2178,12 @@ The size of the blocks data is broken into before it is encrypted.
Larger sector sizes increase performance at the cost of higher storage overhead.
The recommended size is 4096 bytes.
-This example configures an encrypted swap partition using the Blowfish algorithm with a key length of 128 bits and a sectorsize of 4 kilobytes:
+This example configures an encrypted swap partition using the AES-XTS algorithm with a key length of 128 bits and a sectorsize of 4 kilobytes:
[.programlisting]
....
# Device Mountpoint FStype Options Dump Pass#
-/dev/ada0s1b.eli none swap sw,ealgo=blowfish,keylen=128,sectorsize=4096 0 0
+/dev/ada0s1b.eli none swap sw,ealgo=AES-XTS,keylen=128,sectorsize=4096 0 0
....
=== Encrypted Swap Verification
@@ -2387,30 +2394,25 @@ In the event of CARP interfaces going up or down, the FreeBSD operating system g
A state change on the CARP interface is an indication that one of the nodes failed or came back online.
These state change events make it possible to run a script which will automatically handle the HAST failover.
-To catch state changes on the CARP interfaces, add this configuration to [.filename]#/etc/devd.conf# on each node:
+To catch state changes on the CARP interfaces, add this configuration to [.filename]#/etc/devd.conf# on each node, while replacing `<vhid>` with the virtual host id and `<ifname>` with the associated interface name:
[.programlisting]
....
notify 30 {
- match "system" "IFNET";
- match "subsystem" "carp0";
- match "type" "LINK_UP";
+ match "system" "CARP";
+ match "subsystem" "<vhid>@<ifname>";
+ match "type" "MASTER";
action "/usr/local/sbin/carp-hast-switch primary";
};
notify 30 {
- match "system" "IFNET";
- match "subsystem" "carp0";
- match "type" "LINK_DOWN";
+ match "system" "CARP";
+ match "subsystem" "<vhid>@<ifname>";
+ match "type" "BACKUP";
action "/usr/local/sbin/carp-hast-switch secondary";
};
....
-[NOTE]
-====
-If the systems are running FreeBSD 10 or higher, replace [.filename]#carp0# with the name of the CARP-configured interface.
-====
-
Restart man:devd[8] on both nodes to put the new configuration into effect:
[source,shell]
@@ -2532,6 +2534,8 @@ For this example, a standard UFS file system was used.
To reduce the time needed for recovery, a journal-enabled UFS or ZFS file system can be used instead.
====
+Instead of using the highly available storage locally, it can also be shared to other computers on a network via crossref:network-servers[network-nfs,NFS], crossref:network-servers[network-iscsi,iSCSI], man:sshfs[1], or programs in ports (i.e. package:net/samba419[]).
+
More detailed information with additional examples can be found at http://wiki.FreeBSD.org/HAST[http://wiki.FreeBSD.org/HAST].
=== Troubleshooting
diff --git a/documentation/content/en/books/handbook/disks/_index.po b/documentation/content/en/books/handbook/disks/_index.po
new file mode 100644
index 0000000000..1124a6ec62
--- /dev/null
+++ b/documentation/content/en/books/handbook/disks/_index.po
@@ -0,0 +1,5018 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/disks/_index.adoc:1
+#, no-wrap
+msgid "This chapter covers the use of disks and storage media in FreeBSD. This includes SCSI and IDE disks, CD and DVD media, memory-backed disks, and USB storage devices."
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/disks/_index.adoc:1
+#, no-wrap
+msgid "Part III. System Administration"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/disks/_index.adoc:1
+#, no-wrap
+msgid "Chapter 20. Storage"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/disks/_index.adoc:14
+#, no-wrap
+msgid "Storage"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/disks/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:56
+msgid ""
+"This chapter covers the use of disks and storage media in FreeBSD. This "
+"includes SCSI and IDE disks, CD and DVD media, memory-backed disks, and USB "
+"storage devices."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:58
+msgid "After reading this chapter, you will know:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:60
+msgid "How to add additional hard disks to a FreeBSD system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:61
+msgid "How to grow the size of a disk's partition on FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:62
+msgid "How to configure FreeBSD to use USB storage devices."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:63
+msgid "How to use CD and DVD media on a FreeBSD system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:64
+msgid "How to use the backup programs available under FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:65
+msgid "How to set up memory disks."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:66
+msgid "What file system snapshots are and how to use them efficiently."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:67
+msgid "How to use quotas to limit disk space usage."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:68
+msgid "How to encrypt disks and swap to secure them against attackers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:69
+msgid "How to configure a highly available storage network."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:71
+msgid "Before reading this chapter, you should:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:73
+msgid ""
+"Know how to crossref:kernelconfig[kernelconfig,configure and install a new "
+"FreeBSD kernel]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/disks/_index.adoc:75
+#, no-wrap
+msgid "Adding Disks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:80
+msgid ""
+"This section describes how to add a new SATA disk to a machine that "
+"currently only has a single drive. First, turn off the computer and install "
+"the drive in the computer following the instructions of the computer, "
+"controller, and drive manufacturers. Reboot the system and become `root`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:83
+msgid ""
+"Inspect [.filename]#/var/run/dmesg.boot# to ensure the new disk was found. "
+"In this example, the newly added SATA drive will appear as [.filename]#ada1#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:86
+msgid ""
+"For this example, a single large partition will be created on the new disk. "
+"The http://en.wikipedia.org/wiki/GUID_Partition_Table[GPT] partitioning "
+"scheme will be used in preference to the older and less versatile MBR scheme."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:91
+msgid ""
+"If the disk to be added is not blank, old partition information can be "
+"removed with `gpart delete`. See man:gpart[8] for details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:95
+msgid ""
+"The partition scheme is created, and then a single partition is added. To "
+"improve performance on newer disks with larger hardware block sizes, the "
+"partition is aligned to one megabyte boundaries:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:100
+#, no-wrap
+msgid ""
+"# gpart create -s GPT ada1\n"
+"# gpart add -t freebsd-ufs -a 1M ada1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:104
+msgid ""
+"Depending on use, several smaller partitions may be desired. See man:"
+"gpart[8] for options to create partitions smaller than a whole disk."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:106
+msgid "The disk partition information can be viewed with `gpart show`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:114
+#, no-wrap
+msgid ""
+"% gpart show ada1\n"
+"=> 34 1465146988 ada1 GPT (699G)\n"
+" 34 2014 - free - (1.0M)\n"
+" 2048 1465143296 1 freebsd-ufs (699G)\n"
+" 1465145344 1678 - free - (839K)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:117
+msgid "A file system is created in the new partition on the new disk:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:121
+#, no-wrap
+msgid "# newfs -U /dev/ada1p1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:124
+msgid ""
+"An empty directory is created as a _mountpoint_, a location for mounting the "
+"new disk in the original disk's file system:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:128
+#, no-wrap
+msgid "# mkdir /newdisk\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:131
+msgid ""
+"Finally, an entry is added to [.filename]#/etc/fstab# so the new disk will "
+"be mounted automatically at startup:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:135
+#, no-wrap
+msgid "/dev/ada1p1\t/newdisk\tufs\trw\t2\t2\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:138
+msgid "The new disk can be mounted manually, without restarting the system:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:142
+#, no-wrap
+msgid "# mount /newdisk\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/disks/_index.adoc:145
+#, no-wrap
+msgid "Resizing and Growing Disks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:151
+msgid ""
+"A disk's capacity can increase without any changes to the data already "
+"present. This happens commonly with virtual machines, when the virtual disk "
+"turns out to be too small and is enlarged. Sometimes a disk image is "
+"written to a USB memory stick, but does not use the full capacity. Here we "
+"describe how to resize or _grow_ disk contents to take advantage of "
+"increased capacity."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:154
+msgid ""
+"Determine the device name of the disk to be resized by inspecting [."
+"filename]#/var/run/dmesg.boot#. In this example, there is only one SATA "
+"disk in the system, so the drive will appear as [.filename]#ada0#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:156
+msgid "List the partitions on the disk to see the current configuration:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:165
+#, no-wrap
+msgid ""
+"# gpart show ada0\n"
+"=> 34 83886013 ada0 GPT (48G) [CORRUPT]\n"
+" 34 128 1 freebsd-boot (64k)\n"
+" 162 79691648 2 freebsd-ufs (38G)\n"
+" 79691810 4194236 3 freebsd-swap (2G)\n"
+" 83886046 1 - free - (512B)\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:171
+msgid ""
+"If the disk was formatted with the http://en.wikipedia.org/wiki/"
+"GUID_Partition_Table[GPT] partitioning scheme, it may show as \"corrupted\" "
+"because the GPT backup partition table is no longer at the end of the "
+"drive. Fix the backup partition table with `gpart`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:176
+#, no-wrap
+msgid ""
+"# gpart recover ada0\n"
+"ada0 recovered\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:181
+msgid ""
+"Now the additional space on the disk is available for use by a new "
+"partition, or an existing partition can be expanded:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:190
+#, no-wrap
+msgid ""
+"# gpart show ada0\n"
+"=> 34 102399933 ada0 GPT (48G)\n"
+" 34 128 1 freebsd-boot (64k)\n"
+" 162 79691648 2 freebsd-ufs (38G)\n"
+" 79691810 4194236 3 freebsd-swap (2G)\n"
+" 83886046 18513921 - free - (8.8G)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:195
+msgid ""
+"Partitions can only be resized into contiguous free space. Here, the last "
+"partition on the disk is the swap partition, but the second partition is the "
+"one that needs to be resized. Swap partitions only contain temporary data, "
+"so it can safely be unmounted, deleted, and then recreate the third "
+"partition after resizing the second partition."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:197
+msgid "Disable the swap partition:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:201
+#, no-wrap
+msgid "# swapoff /dev/ada0p3\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:204
+msgid ""
+"Delete the third partition, specified by the `-i` flag, from the disk _ada0_."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:214
+#, no-wrap
+msgid ""
+"# gpart delete -i 3 ada0\n"
+"ada0p3 deleted\n"
+"# gpart show ada0\n"
+"=> 34 102399933 ada0 GPT (48G)\n"
+" 34 128 1 freebsd-boot (64k)\n"
+" 162 79691648 2 freebsd-ufs (38G)\n"
+" 79691810 22708157 - free - (10G)\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:222
+msgid ""
+"There is risk of data loss when modifying the partition table of a mounted "
+"file system. It is best to perform the following steps on an unmounted file "
+"system while running from a live CD-ROM or USB device. However, if "
+"absolutely necessary, a mounted file system can be resized after disabling "
+"GEOM safety features:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:226
+#, no-wrap
+msgid "# sysctl kern.geom.debugflags=16\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:235
+msgid ""
+"Resize the partition, leaving room to recreate a swap partition of the "
+"desired size. The partition to resize is specified with `-i`, and the new "
+"desired size with `-s`. Optionally, alignment of the partition is "
+"controlled with `-a`. This only modifies the size of the partition. The "
+"file system in the partition will be expanded in a separate step."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:245
+#, no-wrap
+msgid ""
+"# gpart resize -i 2 -s 47G -a 4k ada0\n"
+"ada0p2 resized\n"
+"# gpart show ada0\n"
+"=> 34 102399933 ada0 GPT (48G)\n"
+" 34 128 1 freebsd-boot (64k)\n"
+" 162 98566144 2 freebsd-ufs (47G)\n"
+" 98566306 3833661 - free - (1.8G)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:249
+msgid ""
+"Recreate the swap partition and activate it. If no size is specified with `-"
+"s`, all remaining space is used:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:260
+#, no-wrap
+msgid ""
+"# gpart add -t freebsd-swap -a 4k ada0\n"
+"ada0p3 added\n"
+"# gpart show ada0\n"
+"=> 34 102399933 ada0 GPT (48G)\n"
+" 34 128 1 freebsd-boot (64k)\n"
+" 162 98566144 2 freebsd-ufs (47G)\n"
+" 98566306 3833661 3 freebsd-swap (1.8G)\n"
+"# swapon /dev/ada0p3\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:263
+msgid ""
+"Grow the UFS file system to use the new capacity of the resized partition:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:273
+#, no-wrap
+msgid ""
+"# growfs /dev/ada0p2\n"
+"Device is mounted read-write; resizing will result in temporary write suspension for /.\n"
+"It's strongly recommended to make a backup before growing the file system.\n"
+"OK to grow file system on /dev/ada0p2, mounted on /, from 38GB to 47GB? [Yes/No] Yes\n"
+"super-block backups (for fsck -b #) at:\n"
+" 80781312, 82063552, 83345792, 84628032, 85910272, 87192512, 88474752,\n"
+" 89756992, 91039232, 92321472, 93603712, 94885952, 96168192, 97450432\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:276
+msgid ""
+"If the file system is ZFS, the resize is triggered by running the `online` "
+"subcommand with `-e`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:280
+#, no-wrap
+msgid "# zpool online -e zroot /dev/ada0p2\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:283
+msgid ""
+"Both the partition and the file system on it have now been resized to use "
+"the newly-available disk space."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/disks/_index.adoc:285
+#, no-wrap
+msgid "USB Storage Devices"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:289
+msgid ""
+"Many external storage solutions, such as hard drives, USB thumbdrives, and "
+"CD and DVD burners, use the Universal Serial Bus (USB). FreeBSD provides "
+"support for USB 1.x, 2.0, and 3.0 devices."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:294
+msgid ""
+"USB 3.0 support is not compatible with some hardware, including Haswell "
+"(Lynx point) chipsets. If FreeBSD boots with a `failed with error 19` "
+"message, disable xHCI/USB3 in the system BIOS."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:298
+msgid ""
+"Support for USB storage devices is built into the [.filename]#GENERIC# "
+"kernel. For a custom kernel, be sure that the following lines are present "
+"in the kernel configuration file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:311
+#, no-wrap
+msgid ""
+"device scbus\t# SCSI bus (required for ATA/SCSI)\n"
+"device da\t# Direct Access (disks)\n"
+"device pass\t# Passthrough device (direct ATA/SCSI access)\n"
+"device uhci\t# provides USB 1.x support\n"
+"device ohci\t# provides USB 1.x support\n"
+"device ehci\t# provides USB 2.0 support\n"
+"device xhci\t# provides USB 3.0 support\n"
+"device usb\t# USB Bus (required)\n"
+"device umass\t# Disks/Mass storage - Requires scbus and da\n"
+"device cd\t# needed for CD and DVD burners\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:315
+msgid ""
+"FreeBSD uses the man:umass[4] driver which uses the SCSI subsystem to access "
+"USB storage devices. Since any USB device will be seen as a SCSI device by "
+"the system, if the USB device is a CD or DVD burner, do _not_ include "
+"`device atapicam` in a custom kernel configuration file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:317
+msgid ""
+"The rest of this section demonstrates how to verify that a USB storage "
+"device is recognized by FreeBSD and how to configure the device so that it "
+"can be used."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:318
+#, no-wrap
+msgid "Device Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:323
+msgid ""
+"To test the USB configuration, plug in the USB device. Use `dmesg` to "
+"confirm that the drive appears in the system message buffer. It should look "
+"something like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:335
+#, no-wrap
+msgid ""
+"umass0: <STECH Simple Drive, class 0/0, rev 2.00/1.04, addr 3> on usbus0\n"
+"umass0: SCSI over Bulk-Only; quirks = 0x0100\n"
+"umass0:4:0:-1: Attached to scbus4\n"
+"da0 at umass-sim0 bus 0 scbus4 target 0 lun 0\n"
+"da0: <STECH Simple Drive 1.04> Fixed Direct Access SCSI-4 device\n"
+"da0: Serial Number WD-WXE508CAN263\n"
+"da0: 40.000MB/s transfers\n"
+"da0: 152627MB (312581808 512 byte sectors: 255H 63S/T 19457C)\n"
+"da0: quirks=0x2<NO_6_BYTE>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:338
+msgid ""
+"The brand, device node ([.filename]#da0#), speed, and size will differ "
+"according to the device."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:340
+msgid ""
+"Since the USB device is seen as a SCSI one, `camcontrol` can be used to list "
+"the USB storage devices attached to the system:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:345
+#, no-wrap
+msgid ""
+"# camcontrol devlist\n"
+"<STECH Simple Drive 1.04> at scbus4 target 0 lun 0 (pass3,da0)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:349
+msgid ""
+"Alternately, `usbconfig` can be used to list the device. Refer to man:"
+"usbconfig[8] for more information about this command."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:354
+#, no-wrap
+msgid ""
+"# usbconfig\n"
+"ugen0.3: <Simple Drive STECH> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (2mA)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:358
+msgid ""
+"If the device has not been formatted, refer to <<disks-adding>> for "
+"instructions on how to format and create partitions on the USB drive. If "
+"the drive comes with a file system, it can be mounted by `root` using the "
+"instructions in crossref:basics[mount-unmount,“Mounting and Unmounting File "
+"Systems”]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:363
+msgid ""
+"Allowing untrusted users to mount arbitrary media, by enabling `vfs."
+"usermount` as described below, should not be considered safe from a security "
+"point of view. Most file systems were not built to safeguard against "
+"malicious devices."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:367
+msgid ""
+"To make the device mountable as a normal user, one solution is to make all "
+"users of the device a member of the `operator` group using man:pw[8]. Next, "
+"ensure that `operator` is able to read and write the device by adding these "
+"lines to [.filename]#/etc/devfs.rules#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:372
+#, no-wrap
+msgid ""
+"[localrules=5]\n"
+"add path 'da*' mode 0660 group operator\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:377
+msgid ""
+"If internal SCSI disks are also installed in the system, change the second "
+"line as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:381
+#, no-wrap
+msgid "add path 'da[3-9]*' mode 0660 group operator\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:386
+msgid ""
+"This will exclude the first three SCSI disks ([.filename]#da0# to [."
+"filename]#da2#) from belonging to the `operator` group. Replace _3_ with "
+"the number of internal SCSI disks. Refer to man:devfs.rules[5] for more "
+"information about this file."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:389
+msgid "Next, enable the ruleset in [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:393
+#, no-wrap
+msgid "devfs_system_ruleset=\"localrules\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:396
+msgid ""
+"Then, instruct the system to allow regular users to mount file systems by "
+"adding the following line to [.filename]#/etc/sysctl.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:400
+#, no-wrap
+msgid "vfs.usermount=1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:403
+msgid ""
+"Since this only takes effect after the next reboot, use `sysctl` to set this "
+"variable now:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:408
+#, no-wrap
+msgid ""
+"# sysctl vfs.usermount=1\n"
+"vfs.usermount: 0 -> 1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:414
+msgid ""
+"The final step is to create a directory where the file system is to be "
+"mounted. This directory needs to be owned by the user that is to mount the "
+"file system. One way to do that is for `root` to create a subdirectory "
+"owned by that user as [.filename]#/mnt/username#. In the following example, "
+"replace _username_ with the login name of the user and _usergroup_ with the "
+"user's primary group:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:419
+#, no-wrap
+msgid ""
+"# mkdir /mnt/username\n"
+"# chown username:usergroup /mnt/username\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:423
+msgid ""
+"Suppose a USB thumbdrive is plugged in, and a device [.filename]#/dev/da0s1# "
+"appears. If the device is formatted with a FAT file system, the user can "
+"mount it using:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:427
+#, no-wrap
+msgid "% mount -t msdosfs -o -m=644,-M=755 /dev/da0s1 /mnt/username\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:430
+msgid "Before the device can be unplugged, it _must_ be unmounted first:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:434
+#, no-wrap
+msgid "% umount /mnt/username\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:437
+msgid ""
+"After device removal, the system message buffer will show messages similar "
+"to the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:444
+#, no-wrap
+msgid ""
+"umass0: at uhub3, port 2, addr 3 (disconnected)\n"
+"da0 at umass-sim0 bus 0 scbus4 target 0 lun 0\n"
+"da0: <STECH Simple Drive 1.04> s/n WD-WXE508CAN263 detached\n"
+"(da0:umass-sim0:0:0:0): Periph destroyed\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:446
+#, no-wrap
+msgid "Automounting Removable Media"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:449
+msgid ""
+"USB devices can be automatically mounted by uncommenting this line in [."
+"filename]#/etc/auto_master#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:453
+#, no-wrap
+msgid "/media\t\t-media\t\t-nosuid\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:456
+msgid "Then add these lines to [.filename]#/etc/devd.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:464
+#, no-wrap
+msgid ""
+"notify 100 {\n"
+"\tmatch \"system\" \"GEOM\";\n"
+"\tmatch \"subsystem\" \"DEV\";\n"
+"\taction \"/usr/sbin/automount -c\";\n"
+"};\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:467
+msgid ""
+"Reload the configuration if man:autofs[5] and man:devd[8] are already "
+"running:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:472
+#, no-wrap
+msgid ""
+"# service automount restart\n"
+"# service devd restart\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:475
+msgid ""
+"man:autofs[5] can be set to start at boot by adding this line to [."
+"filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:479
+#, no-wrap
+msgid "autofs_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:482
+msgid "man:autofs[5] requires man:devd[8] to be enabled, as it is by default."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:484
+msgid "Start the services immediately with:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:491
+#, no-wrap
+msgid ""
+"# service automount start\n"
+"# service automountd start\n"
+"# service autounmountd start\n"
+"# service devd start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:496
+msgid ""
+"Each file system that can be automatically mounted appears as a directory in "
+"[.filename]#/media/#. The directory is named after the file system label. "
+"If the label is missing, the directory is named after the device node."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:499
+msgid ""
+"The file system is transparently mounted on the first access, and unmounted "
+"after a period of inactivity. Automounted drives can also be unmounted "
+"manually:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:503
+#, no-wrap
+msgid "# automount -fu\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:507
+msgid ""
+"This mechanism is typically used for memory cards and USB memory sticks. It "
+"can be used with any block device, including optical drives or iSCSILUNs."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/disks/_index.adoc:509
+#, no-wrap
+msgid "Creating and Using CD Media"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:515
+msgid ""
+"Compact Disc (CD) media provide a number of features that differentiate them "
+"from conventional disks. They are designed so that they can be read "
+"continuously without delays to move the head between tracks. While CD media "
+"do have tracks, these refer to a section of data to be read continuously, "
+"and not a physical property of the disk. The ISO 9660 file system was "
+"designed to deal with these differences."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:519
+msgid ""
+"The FreeBSD Ports Collection provides several utilities for burning and "
+"duplicating audio and data CDs. This chapter demonstrates the use of "
+"several command line utilities. For CD burning software with a graphical "
+"utility, consider installing the package:sysutils/xcdroast[] or package:"
+"sysutils/k3b[] packages or ports."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:521
+#, no-wrap
+msgid "Supported Devices"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:525
+msgid ""
+"The [.filename]#GENERIC# kernel provides support for SCSI, USB, and ATAPICD "
+"readers and burners. If a custom kernel is used, the options that need to "
+"be present in the kernel configuration file vary by the type of device."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:527
+msgid "For a SCSI burner, make sure these options are present:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:534
+#, no-wrap
+msgid ""
+"device scbus\t# SCSI bus (required for ATA/SCSI)\n"
+"device da\t# Direct Access (disks)\n"
+"device pass\t# Passthrough device (direct ATA/SCSI access)\n"
+"device cd\t# needed for CD and DVD burners\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:537
+msgid "For a USB burner, make sure these options are present:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:550
+#, no-wrap
+msgid ""
+"device scbus\t# SCSI bus (required for ATA/SCSI)\n"
+"device da\t# Direct Access (disks)\n"
+"device pass\t# Passthrough device (direct ATA/SCSI access)\n"
+"device cd\t# needed for CD and DVD burners\n"
+"device uhci\t# provides USB 1.x support\n"
+"device ohci\t# provides USB 1.x support\n"
+"device ehci\t# provides USB 2.0 support\n"
+"device xhci\t# provides USB 3.0 support\n"
+"device usb\t# USB Bus (required)\n"
+"device umass\t# Disks/Mass storage - Requires scbus and da\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:553
+msgid "For an ATAPI burner, make sure these options are present:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:560
+#, no-wrap
+msgid ""
+"device ata\t# Legacy ATA/SATA controllers\n"
+"device scbus\t# SCSI bus (required for ATA/SCSI)\n"
+"device pass\t# Passthrough device (direct ATA/SCSI access)\n"
+"device cd\t# needed for CD and DVD burners\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:565
+msgid ""
+"On FreeBSD versions prior to 10.x, this line is also needed in the kernel "
+"configuration file if the burner is an ATAPI device:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:569
+#, no-wrap
+msgid "device atapicam\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:572
+msgid ""
+"Alternately, this driver can be loaded at boot time by adding the following "
+"line to [.filename]#/boot/loader.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:576
+#, no-wrap
+msgid "atapicam_load=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:579
+msgid ""
+"This will require a reboot of the system as this driver can only be loaded "
+"at boot time."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:583
+msgid ""
+"To verify that FreeBSD recognizes the device, run `dmesg` and look for an "
+"entry for the device. On systems prior to 10.x, the device name in the "
+"first line of the output will be [.filename]#acd0# instead of [."
+"filename]#cd0#."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:592
+#, no-wrap
+msgid ""
+"% dmesg | grep cd\n"
+"cd0 at ahcich1 bus 0 scbus1 target 0 lun 0\n"
+"cd0: <HL-DT-ST DVDRAM GU70N LT20> Removable CD-ROM SCSI-0 device\n"
+"cd0: Serial Number M3OD3S34152\n"
+"cd0: 150.000MB/s transfers (SATA 1.x, UDMA6, ATAPI 12bytes, PIO 8192bytes)\n"
+"cd0: Attempt to query device size failed: NOT READY, Medium not present - tray closed\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:595
+#, no-wrap
+msgid "Burning a CD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:599
+msgid ""
+"In FreeBSD, `cdrecord` can be used to burn CDs. This command is installed "
+"with the package:sysutils/cdrtools[] package or port."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:602
+msgid ""
+"While `cdrecord` has many options, basic usage is simple. Specify the name "
+"of the ISO file to burn and, if the system has multiple burner devices, "
+"specify the name of the device to use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:606
+#, no-wrap
+msgid "# cdrecord dev=device imagefile.iso\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:609
+msgid ""
+"To determine the device name of the burner, use `-scanbus` which might "
+"produce results like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:633
+#, no-wrap
+msgid ""
+"# cdrecord -scanbus\n"
+"ProDVD-ProBD-Clone 3.00 (amd64-unknown-freebsd10.0) Copyright (C) 1995-2010 Jörg Schilling\n"
+"Using libscg version 'schily-0.9'\n"
+"scsibus0:\n"
+" 0,0,0 0) 'SEAGATE ' 'ST39236LW ' '0004' Disk\n"
+" 0,1,0 1) 'SEAGATE ' 'ST39173W ' '5958' Disk\n"
+" 0,2,0 2) *\n"
+" 0,3,0 3) 'iomega ' 'jaz 1GB ' 'J.86' Removable Disk\n"
+" 0,4,0 4) 'NEC ' 'CD-ROM DRIVE:466' '1.26' Removable CD-ROM\n"
+" 0,5,0 5) *\n"
+" 0,6,0 6) *\n"
+" 0,7,0 7) *\n"
+"scsibus1:\n"
+" 1,0,0 100) *\n"
+" 1,1,0 101) *\n"
+" 1,2,0 102) *\n"
+" 1,3,0 103) *\n"
+" 1,4,0 104) *\n"
+" 1,5,0 105) 'YAMAHA ' 'CRW4260 ' '1.0q' Removable CD-ROM\n"
+" 1,6,0 106) 'ARTEC ' 'AM12S ' '1.06' Scanner\n"
+" 1,7,0 107) *\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:638
+msgid ""
+"Locate the entry for the CD burner and use the three numbers separated by "
+"commas as the value for `dev`. In this case, the Yamaha burner device is "
+"`1,5,0`, so the appropriate input to specify that device is `dev=1,5,0`. "
+"Refer to the manual page for `cdrecord` for other ways to specify this value "
+"and for information on writing audio tracks and controlling the write speed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:640
+msgid ""
+"Alternately, run the following command to get the device address of the "
+"burner:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:645
+#, no-wrap
+msgid ""
+"# camcontrol devlist\n"
+"<MATSHITA CDRW/DVD UJDA740 1.00> at scbus1 target 0 lun 0 (cd0,pass0)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:649
+msgid ""
+"Use the numeric values for `scbus`, `target`, and `lun`. For this example, "
+"`1,0,0` is the device name to use."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:651
+#, no-wrap
+msgid "Writing Data to an ISO File System"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:656
+msgid ""
+"In order to produce a data CD, the data files that are going to make up the "
+"tracks on the CD must be prepared before they can be burned to the CD. In "
+"FreeBSD, package:sysutils/cdrtools[] installs `mkisofs`, which can be used "
+"to produce an ISO 9660 file system that is an image of a directory tree "
+"within a UNIX(R) file system. The simplest usage is to specify the name of "
+"the ISO file to create and the path to the files to place into the ISO 9660 "
+"file system:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:660
+#, no-wrap
+msgid "# mkisofs -o imagefile.iso /path/to/tree\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:663
+msgid ""
+"This command maps the file names in the specified path to names that fit the "
+"limitations of the standard ISO 9660 file system, and will exclude files "
+"that do not meet the standard for ISO file systems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:666
+msgid ""
+"A number of options are available to overcome the restrictions imposed by "
+"the standard. In particular, `-R` enables the Rock Ridge extensions common "
+"to UNIX(R) systems and `-J` enables Joliet extensions used by Microsoft(R) "
+"systems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:669
+msgid ""
+"For CDs that are going to be used only on FreeBSD systems, `-U` can be used "
+"to disable all filename restrictions. When used with `-R`, it produces a "
+"file system image that is identical to the specified FreeBSD tree, even if "
+"it violates the ISO 9660 standard."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:677
+msgid ""
+"The last option of general use is `-b`. This is used to specify the "
+"location of a boot image for use in producing an \"El Torito\" bootable CD. "
+"This option takes an argument which is the path to a boot image from the top "
+"of the tree being written to the CD. By default, `mkisofs` creates an ISO "
+"image in \"floppy disk emulation\" mode, and thus expects the boot image to "
+"be exactly 1200, 1440 or 2880 KB in size. Some boot loaders, like the one "
+"used by the FreeBSD distribution media, do not use emulation mode. In this "
+"case, `-no-emul-boot` should be used. So, if [.filename]#/tmp/myboot# holds "
+"a bootable FreeBSD system with the boot image in [.filename]#/tmp/myboot/"
+"boot/cdboot#, this command would produce [.filename]#/tmp/bootable.iso#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:681
+#, no-wrap
+msgid "# mkisofs -R -no-emul-boot -b boot/cdboot -o /tmp/bootable.iso /tmp/myboot\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:684
+msgid "The resulting ISO image can be mounted as a memory disk with:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:689
+#, no-wrap
+msgid ""
+"# mdconfig -a -t vnode -f /tmp/bootable.iso -u 0\n"
+"# mount -t cd9660 /dev/md0 /mnt\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:692
+msgid ""
+"One can then verify that [.filename]#/mnt# and [.filename]#/tmp/myboot# are "
+"identical."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:695
+msgid ""
+"There are many other options available for `mkisofs` to fine-tune its "
+"behavior. Refer to man:mkisofs[8] for details."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:700
+msgid ""
+"It is possible to copy a data CD to an image file that is functionally "
+"equivalent to the image file created with `mkisofs`. To do so, use [."
+"filename]#dd# with the device name as the input file and the name of the ISO "
+"to create as the output file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:704
+#, no-wrap
+msgid "# dd if=/dev/cd0 of=file.iso bs=2048\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:707
+msgid ""
+"The resulting image file can be burned to CD as described in <<cdrecord>>."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:710
+#, no-wrap
+msgid "Using Data CDs"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:713
+msgid ""
+"Once an ISO has been burned to a CD, it can be mounted by specifying the "
+"file system type, the name of the device containing the CD, and an existing "
+"mount point:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:717
+#, no-wrap
+msgid "# mount -t cd9660 /dev/cd0 /mnt\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:720
+msgid ""
+"Since `mount` assumes that a file system is of type `ufs`, an `Incorrect "
+"super block` error will occur if `-t cd9660` is not included when mounting a "
+"data CD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:725
+msgid ""
+"While any data CD can be mounted this way, disks with certain ISO 9660 "
+"extensions might behave oddly. For example, Joliet disks store all "
+"filenames in two-byte Unicode characters. If some non-English characters "
+"show up as question marks, specify the local charset with `-C`. For more "
+"information, refer to man:mount_cd9660[8]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:730
+msgid ""
+"In order to do this character conversion with the help of `-C`, the kernel "
+"requires the [.filename]#cd9660_iconv.ko# module to be loaded. This can be "
+"done either by adding this line to [.filename]#loader.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:734
+#, no-wrap
+msgid "cd9660_iconv_load=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:737
+msgid ""
+"and then rebooting the machine, or by directly loading the module with "
+"`kldload`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:742
+msgid ""
+"Occasionally, `Device not configured` will be displayed when trying to mount "
+"a data CD. This usually means that the CD drive has not detected a disk in "
+"the tray, or that the drive is not visible on the bus. It can take a couple "
+"of seconds for a CD drive to detect media, so be patient."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:746
+msgid ""
+"Sometimes, a SCSICD drive may be missed because it did not have enough time "
+"to answer the bus reset. To resolve this, a custom kernel can be created "
+"which increases the default SCSI delay. Add the following option to the "
+"custom kernel configuration file and rebuild the kernel using the "
+"instructions in crossref:kernelconfig[kernelconfig-building,“Building and "
+"Installing a Custom Kernel”]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:750
+#, no-wrap
+msgid "options SCSI_DELAY=15000\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:753
+msgid ""
+"This tells the SCSI bus to pause 15 seconds during boot, to give the CD "
+"drive every possible chance to answer the bus reset."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:758
+msgid ""
+"It is possible to burn a file directly to CD, without creating an ISO 9660 "
+"file system. This is known as burning a raw data CD and some people do this "
+"for backup purposes."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:762
+msgid ""
+"This type of disk can not be mounted as a normal data CD. In order to "
+"retrieve the data burned to such a CD, the data must be read from the raw "
+"device node. For example, this command will extract a compressed tar file "
+"located on the second CD device into the current working directory:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:766
+#, no-wrap
+msgid "# tar xzvf /dev/cd1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:769
+msgid "In order to mount a data CD, the data must be written using `mkisofs`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:772
+#, no-wrap
+msgid "Duplicating Audio CDs"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:775
+msgid ""
+"To duplicate an audio CD, extract the audio data from the CD to a series of "
+"files, then write these files to a blank CD."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:778
+msgid ""
+"<<using-cdrecord>> describes how to duplicate and burn an audio CD. If the "
+"FreeBSD version is less than 10.0 and the device is ATAPI, the `atapicam` "
+"module must be first loaded using the instructions in <<atapicam>>."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/disks/_index.adoc:781
+#, no-wrap
+msgid "Procedure: Duplicating an Audio CD"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:783
+msgid ""
+"The package:sysutils/cdrtools[] package or port installs `cdda2wav`. This "
+"command can be used to extract all of the audio tracks, with each track "
+"written to a separate WAV file in the current working directory:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:787
+#, no-wrap
+msgid "% cdda2wav -vall -B -Owav\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:791
+msgid ""
+"A device name does not need to be specified if there is only one CD device "
+"on the system. Refer to the `cdda2wav` manual page for instructions on how "
+"to specify a device and to learn more about the other options available for "
+"this command."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:792
+msgid "Use `cdrecord` to write the [.filename]#.wav# files:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:796
+#, no-wrap
+msgid "% cdrecord -v dev=2,0 -dao -useinfo *.wav\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:799
+msgid ""
+"Make sure that _2,0_ is set appropriately, as described in <<cdrecord>>."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/disks/_index.adoc:801
+#, no-wrap
+msgid "Creating and Using DVD Media"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:805
+msgid ""
+"Compared to the CD, the DVD is the next generation of optical media storage "
+"technology. The DVD can hold more data than any CD and is the standard for "
+"video publishing."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:807
+msgid "Five physical recordable formats can be defined for a recordable DVD:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:809
+msgid ""
+"DVD-R: This was the first DVD recordable format available. The DVD-R "
+"standard is defined by the http://www.dvdforum.org/forum.shtml[DVD Forum]. "
+"This format is write once."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:810
+msgid ""
+"DVD-RW: This is the rewritable version of the DVD-R standard. A DVD-RW can "
+"be rewritten about 1000 times."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:811
+msgid ""
+"DVD-RAM: This is a rewritable format which can be seen as a removable hard "
+"drive. However, this media is not compatible with most DVD-ROM drives and "
+"DVD-Video players as only a few DVD writers support the DVD-RAM format. "
+"Refer to <<creating-dvd-ram>> for more information on DVD-RAM use."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:812
+msgid ""
+"DVD+RW: This is a rewritable format defined by the https://en.wikipedia.org/"
+"wiki/DVD%2BRW_Alliance[DVD+RW Alliance]. A DVD+RW can be rewritten about "
+"1000 times."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:813
+msgid "DVD+R: This format is the write once variation of the DVD+RW format."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:815
+msgid ""
+"A single layer recordable DVD can hold up to 4,700,000,000 bytes which is "
+"actually 4.38 GB or 4485 MB as 1 kilobyte is 1024 bytes."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:821
+msgid ""
+"A distinction must be made between the physical media and the application. "
+"For example, a DVD-Video is a specific file layout that can be written on "
+"any recordable DVD physical media such as DVD-R, DVD+R, or DVD-RW. Before "
+"choosing the type of media, ensure that both the burner and the DVD-Video "
+"player are compatible with the media under consideration."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:823
+#, no-wrap
+msgid "Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:827
+msgid ""
+"To perform DVD recording, use man:growisofs[1]. This command is part of the "
+"package:sysutils/dvd+rw-tools[] utilities which support all DVD media types."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:831
+msgid ""
+"These tools use the SCSI subsystem to access the devices, therefore "
+"<<atapicam,ATAPI/CAM support>> must be loaded or statically compiled into "
+"the kernel. This support is not needed if the burner uses the USB "
+"interface. Refer to <<usb-disks>> for more details on USB device "
+"configuration."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:833
+msgid ""
+"DMA access must also be enabled for ATAPI devices, by adding the following "
+"line to [.filename]#/boot/loader.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:837
+#: documentation/content/en/books/handbook/disks/_index.adoc:1070
+#, no-wrap
+msgid "hw.ata.atapi_dma=\"1\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:840
+msgid ""
+"Before attempting to use dvd+rw-tools, consult the http://fy.chalmers.se/"
+"~appro/linux/DVD+RW/hcn.html[Hardware Compatibility Notes]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:844
+msgid ""
+"For a graphical user interface, consider using package:sysutils/k3b[] which "
+"provides a user friendly interface to man:growisofs[1] and many other "
+"burning tools."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:846
+#, no-wrap
+msgid "Burning Data DVDs"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:850
+msgid ""
+"Since man:growisofs[1] is a front-end to <<mkisofs,mkisofs>>, it will invoke "
+"man:mkisofs[8] to create the file system layout and perform the write on the "
+"DVD. This means that an image of the data does not need to be created "
+"before the burning process."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:852
+msgid ""
+"To burn to a DVD+R or a DVD-R the data in [.filename]#/path/to/data#, use "
+"the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:856
+#, no-wrap
+msgid "# growisofs -dvd-compat -Z /dev/cd0 -J -R /path/to/data\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:860
+msgid ""
+"In this example, `-J -R` is passed to man:mkisofs[8] to create an ISO 9660 "
+"file system with Joliet and Rock Ridge extensions. Refer to man:mkisofs[8] "
+"for more details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:865
+msgid ""
+"For the initial session recording, `-Z` is used for both single and multiple "
+"sessions. Replace _/dev/cd0_, with the name of the DVD device. Using `-dvd-"
+"compat` indicates that the disk will be closed and that the recording will "
+"be unappendable. This should also provide better media compatibility with "
+"DVD-ROM drives."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:867
+msgid "To burn a pre-mastered image, such as _imagefile.iso_, use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:871
+#, no-wrap
+msgid "# growisofs -dvd-compat -Z /dev/cd0=imagefile.iso\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:875
+msgid ""
+"The write speed should be detected and automatically set according to the "
+"media and the drive being used. To force the write speed, use `-speed=`. "
+"Refer to man:growisofs[1] for example usage."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:882
+msgid ""
+"In order to support working files larger than 4.38GB, an UDF/ISO-9660 hybrid "
+"file system must be created by passing `-udf -iso-level 3` to man:mkisofs[8] "
+"and all related programs, such as man:growisofs[1]. This is required only "
+"when creating an ISO image file or when writing files directly to a disk. "
+"Since a disk created this way must be mounted as an UDF file system with man:"
+"mount_udf[8], it will be usable only on an UDF aware operating system. "
+"Otherwise it will look as if it contains corrupted files."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:884
+msgid "To create this type of ISO file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:888
+#, no-wrap
+msgid "% mkisofs -R -J -udf -iso-level 3 -o imagefile.iso /path/to/data\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:891
+msgid "To burn files directly to a disk:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:895
+#, no-wrap
+msgid "# growisofs -dvd-compat -udf -iso-level 3 -Z /dev/cd0 -J -R /path/to/data\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:898
+msgid ""
+"When an ISO image already contains large files, no additional options are "
+"required for man:growisofs[1] to burn that image on a disk."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:901
+msgid ""
+"Be sure to use an up-to-date version of package:sysutils/cdrtools[], which "
+"contains man:mkisofs[8], as an older version may not contain large files "
+"support. If the latest version does not work, install package:sysutils/"
+"cdrtools-devel[] and read its man:mkisofs[8]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:903
+#, no-wrap
+msgid "Burning a DVD-Video"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:907
+msgid ""
+"A DVD-Video is a specific file layout based on the ISO 9660 and micro-UDF (M-"
+"UDF) specifications. Since DVD-Video presents a specific data structure "
+"hierarchy, a particular program such as package:multimedia/dvdauthor[] is "
+"needed to author the DVD."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:910
+msgid ""
+"If an image of the DVD-Video file system already exists, it can be burned in "
+"the same way as any other image. If `dvdauthor` was used to make the DVD "
+"and the result is in [.filename]#/path/to/video#, the following command "
+"should be used to burn the DVD-Video:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:914
+#, no-wrap
+msgid "# growisofs -Z /dev/cd0 -dvd-video /path/to/video\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:918
+msgid ""
+"`-dvd-video` is passed to man:mkisofs[8] to instruct it to create a DVD-"
+"Video file system layout. This option implies the `-dvd-compat` man:"
+"growisofs[1] option."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:919
+#, no-wrap
+msgid "Using a DVD+RW"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:924
+msgid ""
+"Unlike CD-RW, a virgin DVD+RW needs to be formatted before first use. It is "
+"_recommended_ to let man:growisofs[1] take care of this automatically "
+"whenever appropriate. However, it is possible to use `dvd+rw-format` to "
+"format the DVD+RW:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:928
+#: documentation/content/en/books/handbook/disks/_index.adoc:1018
+#, no-wrap
+msgid "# dvd+rw-format /dev/cd0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:932
+msgid ""
+"Only perform this operation once and keep in mind that only virgin DVD+RW "
+"medias need to be formatted. Once formatted, the DVD+RW can be burned as "
+"usual."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:935
+msgid ""
+"To burn a totally new file system and not just append some data onto a "
+"DVD+RW, the media does not need to be blanked first. Instead, write over "
+"the previous recording like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:939
+#, no-wrap
+msgid "# growisofs -Z /dev/cd0 -J -R /path/to/newdata\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:944
+msgid ""
+"The DVD+RW format supports appending data to a previous recording. This "
+"operation consists of merging a new session to the existing one as it is not "
+"considered to be multi-session writing. man:growisofs[1] will _grow_ the "
+"ISO 9660 file system present on the media."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:946
+msgid "For example, to append data to a DVD+RW, use the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:950
+#: documentation/content/en/books/handbook/disks/_index.adoc:1038
+#, no-wrap
+msgid "# growisofs -M /dev/cd0 -J -R /path/to/nextdata\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:953
+msgid ""
+"The same man:mkisofs[8] options used to burn the initial session should be "
+"used during next writes."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:958
+msgid ""
+"Use `-dvd-compat` for better media compatibility with DVD-ROM drives. When "
+"using DVD+RW, this option will not prevent the addition of data."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:961
+msgid "To blank the media, use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:965
+#, no-wrap
+msgid "# growisofs -Z /dev/cd0=/dev/zero\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:967
+#, no-wrap
+msgid "Using a DVD-RW"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:971
+msgid ""
+"A DVD-RW accepts two disc formats: incremental sequential and restricted "
+"overwrite. By default, DVD-RW discs are in sequential format."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:974
+msgid ""
+"A virgin DVD-RW can be directly written without being formatted. However, a "
+"non-virgin DVD-RW in sequential format needs to be blanked before writing a "
+"new initial session."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:976
+msgid "To blank a DVD-RW in sequential mode:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:980
+#: documentation/content/en/books/handbook/disks/_index.adoc:1025
+#, no-wrap
+msgid "# dvd+rw-format -blank=full /dev/cd0\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:987
+msgid ""
+"A full blanking using `-blank=full` will take about one hour on a 1x media. "
+"A fast blanking can be performed using `-blank`, if the DVD-RW will be "
+"recorded in Disk-At-Once (DAO) mode. To burn the DVD-RW in DAO mode, use "
+"the command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:991
+#, no-wrap
+msgid "# growisofs -use-the-force-luke=dao -Z /dev/cd0=imagefile.iso\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:994
+msgid ""
+"Since man:growisofs[1] automatically attempts to detect fast blanked media "
+"and engage DAO write, `-use-the-force-luke=dao` should not be required."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:996
+msgid ""
+"One should instead use restricted overwrite mode with any DVD-RW as this "
+"format is more flexible than the default of incremental sequential."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:999
+msgid ""
+"To write data on a sequential DVD-RW, use the same instructions as for the "
+"other DVD formats:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1003
+#, no-wrap
+msgid "# growisofs -Z /dev/cd0 -J -R /path/to/data\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1007
+msgid ""
+"To append some data to a previous recording, use `-M` with man:"
+"growisofs[1]. However, if data is appended on a DVD-RW in incremental "
+"sequential mode, a new session will be created on the disc and the result "
+"will be a multi-session disc."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1012
+msgid ""
+"A DVD-RW in restricted overwrite format does not need to be blanked before a "
+"new initial session. Instead, overwrite the disc with `-Z`. It is also "
+"possible to grow an existing ISO 9660 file system written on the disc with `-"
+"M`. The result will be a one-session DVD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1014
+msgid ""
+"To put a DVD-RW in restricted overwrite format, the following command must "
+"be used:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1021
+msgid "To change back to sequential format, use:"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:1027
+#, no-wrap
+msgid "Multi-Session"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1032
+msgid ""
+"Few DVD-ROM drives support multi-session DVDs and most of the time only read "
+"the first session. DVD+R, DVD-R and DVD-RW in sequential format can accept "
+"multiple sessions. The notion of multiple sessions does not exist for the "
+"DVD+RW and the DVD-RW restricted overwrite formats."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1034
+msgid ""
+"Using the following command after an initial non-closed session on a DVD+R, "
+"DVD-R, or DVD-RW in sequential format, will add a new session to the disc:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1043
+msgid ""
+"Using this command with a DVD+RW or a DVD-RW in restricted overwrite mode "
+"will append data while merging the new session to the existing one. The "
+"result will be a single-session disc. Use this method to add data after an "
+"initial write on these types of media."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1048
+msgid ""
+"Since some space on the media is used between each session to mark the end "
+"and start of sessions, one should add sessions with a large amount of data "
+"to optimize media space. The number of sessions is limited to 154 for a "
+"DVD+R, about 2000 for a DVD-R, and 127 for a DVD+R Double Layer."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:1050
+#, no-wrap
+msgid "For More Information"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1053
+msgid ""
+"To obtain more information about a DVD, use `dvd+rw-mediainfo _/dev/cd0_` "
+"while the disc in the specified drive."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1055
+msgid ""
+"More information about dvd+rw-tools can be found in man:growisofs[1], on the "
+"http://fy.chalmers.se/~appro/linux/DVD+RW/[dvd+rw-tools web site], and in "
+"the http://lists.debian.org/cdwrite/[cdwrite mailing list] archives."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1059
+msgid ""
+"When creating a problem report related to the use of dvd+rw-tools, always "
+"include the output of `dvd+rw-mediainfo`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:1062
+#, no-wrap
+msgid "Using a DVD-RAM"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1066
+msgid ""
+"DVD-RAM writers can use either a SCSI or ATAPI interface. For ATAPI "
+"devices, DMA access has to be enabled by adding the following line to [."
+"filename]#/boot/loader.conf#:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1075
+msgid ""
+"A DVD-RAM can be seen as a removable hard drive. Like any other hard drive, "
+"the DVD-RAM must be formatted before it can be used. In this example, the "
+"whole disk space will be formatted with a standard UFS2 file system:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1081
+#, no-wrap
+msgid ""
+"# dd if=/dev/zero of=/dev/acd0 bs=2k count=1\n"
+"# bsdlabel -Bw acd0\n"
+"# newfs /dev/acd0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1084
+msgid ""
+"The DVD device, [.filename]#acd0#, must be changed according to the "
+"configuration."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1086
+msgid ""
+"Once the DVD-RAM has been formatted, it can be mounted as a normal hard "
+"drive:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1090
+#, no-wrap
+msgid "# mount /dev/acd0 /mnt\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1093
+msgid "Once mounted, the DVD-RAM will be both readable and writeable."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/disks/_index.adoc:1095
+#, no-wrap
+msgid "Creating and Using Floppy Disks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1098
+msgid "This section explains how to format a 3.5 inch floppy disk in FreeBSD."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1102
+#, no-wrap
+msgid "*Procedure: Steps to Format a Floppy*\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1107
+msgid ""
+"A floppy disk needs to be low-level formatted before it can be used. This "
+"is usually done by the vendor, but formatting is a good way to check media "
+"integrity. To low-level format the floppy disk on FreeBSD, use man:"
+"fdformat[1]. When using this utility, make note of any error messages, as "
+"these can help determine if the disk is good or bad."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1109
+msgid ""
+"To format the floppy, insert a new 3.5 inch floppy disk into the first "
+"floppy drive and issue:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1113
+#, no-wrap
+msgid "# /usr/sbin/fdformat -f 1440 /dev/fd0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1116
+msgid ""
+"After low-level formatting the disk, create a disk label as it is needed by "
+"the system to determine the size of the disk and its geometry. The supported "
+"geometry values are listed in [.filename]#/etc/disktab#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1118
+msgid "To write the disk label, use man:bsdlabel[8]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1122
+#, no-wrap
+msgid "# /sbin/bsdlabel -B -w /dev/fd0 fd1440\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1125
+msgid ""
+"The floppy is now ready to be high-level formatted with a file system. The "
+"floppy's file system can be either UFS or FAT, where FAT is generally a "
+"better choice for floppies."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1127
+msgid "To format the floppy with FAT, issue:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1131
+#, no-wrap
+msgid "# /sbin/newfs_msdos /dev/fd0\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1137
+msgid ""
+"The disk is now ready for use. To use the floppy, mount it with man:"
+"mount_msdosfs[8]. One can also install and use package:emulators/mtools[] "
+"from the Ports Collection."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/disks/_index.adoc:1139
+#, no-wrap
+msgid "Using NTFS Disks"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1142
+msgid "This section explains how to mount NTFS disks in FreeBSD."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1147
+msgid ""
+"NTFS (New Technology File System) is a proprietary journaling file system "
+"developed by Microsoft(R). It has been the default file system in Microsoft "
+"Windows(R) for many years. FreeBSD can mount NTFS volumes using a FUSE file "
+"system. These file systems are implemented as user space programs which "
+"interact with the man:fusefs[5] kernel module via a well defined interface."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1151
+#, no-wrap
+msgid "*Procedure: Steps to Mount a NTFS Disk*\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1154
+msgid ""
+"Before using a FUSE file system we need to load the man:fusefs[5] kernel "
+"module:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1158
+#, no-wrap
+msgid "# kldload fusefs\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1161
+msgid "Use man:sysrc[8] to load the module at startup:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1165
+#, no-wrap
+msgid "# sysrc kld_list+=fusefs\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1168
+msgid ""
+"Install the actual NTFS file system from packages as in the example (see "
+"crossref:ports[pkgng-intro,Using pkg for Binary Package Management]) or from "
+"ports (see crossref:ports[ports-using,Using the Ports Collection]):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1172
+#, no-wrap
+msgid "# pkg install fusefs-ntfs\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1175
+msgid ""
+"Last we need to create a directory where the file system will be mounted:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1179
+#, no-wrap
+msgid "# mkdir /mnt/usb\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1182
+msgid ""
+"Suppose a USB disk is plugged in. The disk partition information can be "
+"viewed with man:gpart[8]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1188
+#, no-wrap
+msgid ""
+"# gpart show da0\n"
+"=>\t 63 1953525105 da0 MBR (932G)\n"
+"\t 63 1953525105 1 ntfs (932G)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1191
+msgid "We can mount the disk using the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1195
+#, no-wrap
+msgid "# ntfs-3g /dev/da0s1 /mnt/usb/\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1197
+msgid "The disk is now ready to use."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1199
+msgid "Additionally, an entry can be added to /etc/fstab:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1203
+#, no-wrap
+msgid "/dev/da0s1 /mnt/usb\tntfs mountprog=/usr/local/bin/ntfs-3g,noauto,rw 0 0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1206
+msgid "Now the disk can be now mounted with:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1210
+#, no-wrap
+msgid "# mount /mnt/usb\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1213
+msgid "The disk can be unmounted with:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1217
+#, no-wrap
+msgid "# umount /mnt/usb/\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/disks/_index.adoc:1221
+#, no-wrap
+msgid "Backup Basics"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1224
+msgid ""
+"Implementing a backup plan is essential in order to have the ability to "
+"recover from disk failure, accidental file deletion, random file corruption, "
+"or complete machine destruction, including destruction of on-site backups."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1227
+msgid ""
+"The backup type and schedule will vary, depending upon the importance of the "
+"data, the granularity needed for file restores, and the amount of acceptable "
+"downtime. Some possible backup techniques include:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1229
+msgid ""
+"Archives of the whole system, backed up onto permanent, off-site media. This "
+"provides protection against all of the problems listed above, but is slow "
+"and inconvenient to restore from, especially for non-privileged users."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1230
+msgid ""
+"File system snapshots, which are useful for restoring deleted files or "
+"previous versions of files."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1231
+msgid ""
+"Copies of whole file systems or disks which are synchronized with another "
+"system on the network using a scheduled package:net/rsync[]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1232
+msgid ""
+"Hardware or software RAID, which minimizes or avoids downtime when a disk "
+"fails."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1236
+msgid ""
+"Typically, a mix of backup techniques is used. For example, one could "
+"create a schedule to automate a weekly, full system backup that is stored "
+"off-site and to supplement this backup with hourly ZFS snapshots. In "
+"addition, one could make a manual backup of individual directories or files "
+"before making file edits or deletions."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1238
+msgid ""
+"This section describes some of the utilities which can be used to create and "
+"manage backups on a FreeBSD system."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:1239
+#, no-wrap
+msgid "File System Backups"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1245
+msgid ""
+"The traditional UNIX(R) programs for backing up a file system are man:"
+"dump[8], which creates the backup, and man:restore[8], which restores the "
+"backup. These utilities work at the disk block level, below the "
+"abstractions of the files, links, and directories that are created by file "
+"systems. Unlike other backup software, `dump` backs up an entire file "
+"system and is unable to backup only part of a file system or a directory "
+"tree that spans multiple file systems. Instead of writing files and "
+"directories, `dump` writes the raw data blocks that comprise files and "
+"directories."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1249
+msgid ""
+"If `dump` is used on the root directory, it will not back up [.filename]#/"
+"home#, [.filename]#/usr# or many other directories since these are typically "
+"mount points for other file systems or symbolic links into those file "
+"systems."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1253
+msgid ""
+"When used to restore data, `restore` stores temporary files in [.filename]#/"
+"tmp/# by default. When using a recovery disk with a small [.filename]#/"
+"tmp#, set `TMPDIR` to a directory with more free space in order for the "
+"restore to succeed."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1257
+msgid ""
+"When using `dump`, be aware that some quirks remain from its early days in "
+"Version 6 of AT&T UNIX(R),circa 1975. The default parameters assume a "
+"backup to a 9-track tape, rather than to another type of media or to the "
+"high-density tapes available today. These defaults must be overridden on "
+"the command line."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1260
+msgid ""
+"It is possible to backup a file system across the network to a another "
+"system or to a tape drive attached to another computer. While the man:"
+"rdump[8] and man:rrestore[8] utilities can be used for this purpose, they "
+"are not considered to be secure."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1263
+msgid ""
+"Instead, one can use `dump` and `restore` in a more secure fashion over an "
+"SSH connection. This example creates a full, compressed backup of [."
+"filename]#/usr# and sends the backup file to the specified host over a SSH "
+"connection."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/disks/_index.adoc:1264
+#, no-wrap
+msgid "Using `dump` over ssh"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1271
+#, no-wrap
+msgid ""
+"# /sbin/dump -0uan -f - /usr | gzip -2 | ssh -c blowfish \\\n"
+" targetuser@targetmachine.example.com dd of=/mybigfiles/dump-usr-l0.gz\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1275
+msgid ""
+"This example sets `RSH` in order to write the backup to a tape drive on a "
+"remote system over a SSH connection:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/disks/_index.adoc:1276
+#, no-wrap
+msgid "Using `dump` over ssh with `RSH` Set"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1282
+#, no-wrap
+msgid "# env RSH=/usr/bin/ssh /sbin/dump -0uan -f targetuser@targetmachine.example.com:/dev/sa0 /usr\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:1285
+#, no-wrap
+msgid "Directory Backups"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1288
+msgid ""
+"Several built-in utilities are available for backing up and restoring "
+"specified files and directories as needed."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1292
+msgid ""
+"A good choice for making a backup of all of the files in a directory is man:"
+"tar[1]. This utility dates back to Version 6 of AT&T UNIX(R) and by default "
+"assumes a recursive backup to a local tape device. Switches can be used to "
+"instead specify the name of a backup file."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1295
+msgid ""
+"This example creates a compressed backup of the current directory and saves "
+"it to [.filename]#/tmp/mybackup.tgz#. When creating a backup file, make "
+"sure that the backup is not saved to the same directory that is being backed "
+"up."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/disks/_index.adoc:1296
+#, no-wrap
+msgid "Backing Up the Current Directory with `tar`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1302
+#, no-wrap
+msgid "# tar czvf /tmp/mybackup.tgz .\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1308
+msgid ""
+"To restore the entire backup, `cd` into the directory to restore into and "
+"specify the name of the backup. Note that this will overwrite any newer "
+"versions of files in the restore directory. When in doubt, restore to a "
+"temporary directory or specify the name of the file within the backup to "
+"restore."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/disks/_index.adoc:1309
+#, no-wrap
+msgid "Restoring Up the Current Directory with `tar`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1315
+#, no-wrap
+msgid "# tar xzvf /tmp/mybackup.tgz\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1320
+msgid ""
+"There are dozens of available switches which are described in man:tar[1]. "
+"This utility also supports the use of exclude patterns to specify which "
+"files should not be included when backing up the specified directory or "
+"restoring files from a backup."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1323
+msgid ""
+"To create a backup using a specified list of files and directories, man:"
+"cpio[1] is a good choice. Unlike `tar`, `cpio` does not know how to walk "
+"the directory tree and it must be provided the list of files to backup."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1326
+msgid ""
+"For example, a list of files can be created using `ls` or `find`. This "
+"example creates a recursive listing of the current directory which is then "
+"piped to `cpio` in order to create an output backup file named [.filename]#/"
+"tmp/mybackup.cpio#."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/disks/_index.adoc:1327
+#, no-wrap
+msgid "Using `ls` and `cpio` to Make a Recursive Backup of the Current Directory"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1333
+#, no-wrap
+msgid "# ls -R | cpio -ovF /tmp/mybackup.cpio\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1339
+msgid ""
+"A backup utility which tries to bridge the features provided by `tar` and "
+"`cpio` is man:pax[1]. Over the years, the various versions of `tar` and "
+"`cpio` became slightly incompatible. POSIX(R) created `pax` which attempts "
+"to read and write many of the various `cpio` and `tar` formats, plus new "
+"formats of its own."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1341
+msgid "The `pax` equivalent to the previous examples would be:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/disks/_index.adoc:1342
+#, no-wrap
+msgid "Backing Up the Current Directory with `pax`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1348
+#, no-wrap
+msgid "# pax -wf /tmp/mybackup.pax .\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:1352
+#, no-wrap
+msgid "Using Data Tapes for Backups"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1357
+msgid ""
+"While tape technology has continued to evolve, modern backup systems tend to "
+"combine off-site backups with local removable media. FreeBSD supports any "
+"tape drive that uses SCSI, such as LTO or DAT. There is limited support for "
+"SATA and USB tape drives."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1361
+msgid ""
+"For SCSI tape devices, FreeBSD uses the man:sa[4] driver and the [."
+"filename]#/dev/sa0#, [.filename]#/dev/nsa0#, and [.filename]#/dev/esa0# "
+"devices. The physical device name is [.filename]#/dev/sa0#. When [."
+"filename]#/dev/nsa0# is used, the backup application will not rewind the "
+"tape after writing a file, which allows writing more than one file to a "
+"tape. Using [.filename]#/dev/esa0# ejects the tape after the device is "
+"closed."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1364
+msgid ""
+"In FreeBSD, `mt` is used to control operations of the tape drive, such as "
+"seeking through files on a tape or writing tape control marks to the tape. "
+"For example, the first three files on a tape can be preserved by skipping "
+"past them before writing a new file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1368
+#, no-wrap
+msgid "# mt -f /dev/nsa0 fsf 3\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1371
+msgid "This utility supports many operations. Refer to man:mt[1] for details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1373
+msgid ""
+"To write a single file to tape using `tar`, specify the name of the tape "
+"device and the file to backup:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1377
+#, no-wrap
+msgid "# tar cvf /dev/sa0 file\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1380
+msgid ""
+"To recover files from a `tar` archive on tape into the current directory:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1384
+#, no-wrap
+msgid "# tar xvf /dev/sa0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1388
+msgid ""
+"To backup a UFS file system, use `dump`. This examples backs up [."
+"filename]#/usr# without rewinding the tape when finished:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1392
+#, no-wrap
+msgid "# dump -0aL -b64 -f /dev/nsa0 /usr\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1395
+msgid ""
+"To interactively restore files from a `dump` file on tape into the current "
+"directory:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1399
+#, no-wrap
+msgid "# restore -i -f /dev/nsa0\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:1402
+#, no-wrap
+msgid "Third-Party Backup Utilities"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1406
+msgid ""
+"The FreeBSD Ports Collection provides many third-party utilities which can "
+"be used to schedule the creation of backups, simplify tape backup, and make "
+"backups easier and more convenient. Many of these applications are client/"
+"server based and can be used to automate the backups of a single system or "
+"all of the computers in a network."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1408
+msgid "Popular utilities include Amanda, Bacula, rsync, and duplicity."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:1409
+#, no-wrap
+msgid "Emergency Recovery"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1412
+msgid ""
+"In addition to regular backups, it is recommended to perform the following "
+"steps as part of an emergency preparedness plan."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1414
+msgid "Create a print copy of the output of the following commands:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1416
+msgid "`gpart show`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1417
+msgid "`more /etc/fstab`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1418
+msgid "`dmesg`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1422
+msgid ""
+"Store this printout and a copy of the installation media in a secure "
+"location. Should an emergency restore be needed, boot into the installation "
+"media and select `Live CD` to access a rescue shell. This rescue mode can "
+"be used to view the current state of the system, and if needed, to reformat "
+"disks and restore data from backups."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1427
+msgid ""
+"Next, test the rescue shell and the backups. Make notes of the procedure. "
+"Store these notes with the media, the printouts, and the backups. These "
+"notes may prevent the inadvertent destruction of the backups while under the "
+"stress of performing an emergency recovery."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1429
+msgid ""
+"For an added measure of security, store the latest backup at a remote "
+"location which is physically separated from the computers and disk drives by "
+"a significant distance."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/disks/_index.adoc:1431
+#, no-wrap
+msgid "Memory Disks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1435
+msgid ""
+"In addition to physical disks, FreeBSD also supports the creation and use of "
+"memory disks. One possible use for a memory disk is to access the contents "
+"of an ISO file system without the overhead of first burning it to a CD or "
+"DVD, then mounting the CD/DVD media."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1439
+msgid ""
+"In FreeBSD, the man:md[4] driver is used to provide support for memory "
+"disks. The [.filename]#GENERIC# kernel includes this driver. When using a "
+"custom kernel configuration file, ensure it includes this line:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1443
+#, no-wrap
+msgid "device md\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:1446
+#, no-wrap
+msgid "Attaching and Detaching Existing Images"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1452
+msgid ""
+"To mount an existing file system image, use `mdconfig` to specify the name "
+"of the ISO file and a free unit number. Then, refer to that unit number to "
+"mount it on an existing mount point. Once mounted, the files in the ISO "
+"will appear in the mount point. This example attaches _diskimage.iso_ to "
+"the memory device [.filename]#/dev/md0# then mounts that memory device on [."
+"filename]#/mnt#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1457
+#, no-wrap
+msgid ""
+"# mdconfig -f diskimage.iso -u 0\n"
+"# mount -t cd9660 /dev/md0 /mnt\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1462
+msgid ""
+"Notice that `-t cd9660` was used to mount an ISO format. If a unit number "
+"is not specified with `-u`, `mdconfig` will automatically allocate an unused "
+"memory device and output the name of the allocated unit, such as [."
+"filename]#md4#. Refer to man:mdconfig[8] for more details about this "
+"command and its options."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1466
+msgid ""
+"When a memory disk is no longer in use, its resources should be released "
+"back to the system. First, unmount the file system, then use `mdconfig` to "
+"detach the disk from the system and release its resources. To continue this "
+"example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1471
+#, no-wrap
+msgid ""
+"# umount /mnt\n"
+"# mdconfig -d -u 0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1474
+msgid ""
+"To determine if any memory disks are still attached to the system, type "
+"`mdconfig -l`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:1476
+#, no-wrap
+msgid "Creating a File- or Memory-Backed Memory Disk"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1481
+msgid ""
+"FreeBSD also supports memory disks where the storage to use is allocated "
+"from either a hard disk or an area of memory. The first method is commonly "
+"referred to as a file-backed file system and the second method as a memory-"
+"backed file system. Both types can be created using `mdconfig`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1486
+msgid ""
+"To create a new memory-backed file system, specify a type of `swap` and the "
+"size of the memory disk to create. Then, format the memory disk with a file "
+"system and mount as usual. This example creates a 5M memory disk on unit "
+"`1`. That memory disk is then formatted with the UFS file system before it "
+"is mounted:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1500
+#, no-wrap
+msgid ""
+"# mdconfig -a -t swap -s 5m -u 1\n"
+"# newfs -U md1\n"
+"/dev/md1: 5.0MB (10240 sectors) block size 16384, fragment size 2048\n"
+" using 4 cylinder groups of 1.27MB, 81 blks, 192 inodes.\n"
+" with soft updates\n"
+"super-block backups (for fsck -b #) at:\n"
+" 160, 2752, 5344, 7936\n"
+"# mount /dev/md1 /mnt\n"
+"# df /mnt\n"
+"Filesystem 1K-blocks Used Avail Capacity Mounted on\n"
+"/dev/md1 4718 4 4338 0% /mnt\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1504
+msgid ""
+"To create a new file-backed memory disk, first allocate an area of disk to "
+"use. This example creates an empty 5MB file named [.filename]#newimage#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1510
+#, no-wrap
+msgid ""
+"# dd if=/dev/zero of=newimage bs=1k count=5k\n"
+"5120+0 records in\n"
+"5120+0 records out\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1513
+msgid ""
+"Next, attach that file to a memory disk, label the memory disk and format it "
+"with the UFS file system, mount the memory disk, and verify the size of the "
+"file-backed disk:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1527
+#, no-wrap
+msgid ""
+"# mdconfig -f newimage -u 0\n"
+"# bsdlabel -w md0 auto\n"
+"# newfs -U md0a\n"
+"/dev/md0a: 5.0MB (10224 sectors) block size 16384, fragment size 2048\n"
+" using 4 cylinder groups of 1.25MB, 80 blks, 192 inodes.\n"
+"super-block backups (for fsck -b #) at:\n"
+" 160, 2720, 5280, 7840\n"
+"# mount /dev/md0a /mnt\n"
+"# df /mnt\n"
+"Filesystem 1K-blocks Used Avail Capacity Mounted on\n"
+"/dev/md0a 4710 4 4330 0% /mnt\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1532
+msgid ""
+"It takes several commands to create a file- or memory-backed file system "
+"using `mdconfig`. FreeBSD also comes with `mdmfs` which automatically "
+"configures a memory disk, formats it with the UFS file system, and mounts "
+"it. For example, after creating _newimage_ with `dd`, this one command is "
+"equivalent to running the `bsdlabel`, `newfs`, and `mount` commands shown "
+"above:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1536
+#, no-wrap
+msgid "# mdmfs -F newimage -s 5m md0 /mnt\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1539
+msgid ""
+"To instead create a new memory-based memory disk with `mdmfs`, use this one "
+"command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1543
+#, no-wrap
+msgid "# mdmfs -s 5m md1 /mnt\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1547
+msgid ""
+"If the unit number is not specified, `mdmfs` will automatically select an "
+"unused memory device. For more details about `mdmfs`, refer to man:mdmfs[8]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/disks/_index.adoc:1549
+#, no-wrap
+msgid "File System Snapshots"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1552
+msgid ""
+"FreeBSD offers a feature in conjunction with crossref:config[soft-updates,"
+"Soft Updates]: file system snapshots."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1558
+msgid ""
+"UFS snapshots allow a user to create images of specified file systems, and "
+"treat them as a file. Snapshot files must be created in the file system "
+"that the action is performed on, and a user may create no more than 20 "
+"snapshots per file system. Active snapshots are recorded in the superblock "
+"so they are persistent across unmount and remount operations along with "
+"system reboots. When a snapshot is no longer required, it can be removed "
+"using man:rm[1]. While snapshots may be removed in any order, all the used "
+"space may not be acquired because another snapshot will possibly claim some "
+"of the released blocks."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1561
+msgid ""
+"The un-alterable `snapshot` file flag is set by man:mksnap_ffs[8] after "
+"initial creation of a snapshot file. man:unlink[1] makes an exception for "
+"snapshot files since it allows them to be removed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1564
+msgid ""
+"Snapshots are created using man:mount[8]. To place a snapshot of [."
+"filename]#/var# in the file [.filename]#/var/snapshot/snap#, use the "
+"following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1568
+#, no-wrap
+msgid "# mount -u -o snapshot /var/snapshot/snap /var\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1571
+msgid "Alternatively, use man:mksnap_ffs[8] to create the snapshot:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1575
+#, no-wrap
+msgid "# mksnap_ffs /var /var/snapshot/snap\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1578
+msgid ""
+"One can find snapshot files on a file system, such as [.filename]#/var#, "
+"using man:find[1]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1582
+#, no-wrap
+msgid "# find /var -flags snapshot\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1585
+msgid "Once a snapshot has been created, it has several uses:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1587
+msgid ""
+"Some administrators will use a snapshot file for backup purposes, because "
+"the snapshot can be transferred to CDs or tape."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1588
+msgid ""
+"The file system integrity checker, man:fsck[8], may be run on the snapshot. "
+"Assuming that the file system was clean when it was mounted, this should "
+"always provide a clean and unchanging result."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1589
+msgid ""
+"Running man:dump[8] on the snapshot will produce a dump file that is "
+"consistent with the file system and the timestamp of the snapshot. man:"
+"dump[8] can also take a snapshot, create a dump image, and then remove the "
+"snapshot in one command by using `-L`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1590
+msgid ""
+"The snapshot can be mounted as a frozen image of the file system. To man:"
+"mount[8] the snapshot [.filename]#/var/snapshot/snap# run:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1595
+#, no-wrap
+msgid ""
+"# mdconfig -a -t vnode -o readonly -f /var/snapshot/snap -u 4\n"
+"# mount -r /dev/md4 /mnt\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1601
+msgid ""
+"The frozen [.filename]#/var# is now available through [.filename]#/mnt#. "
+"Everything will initially be in the same state it was during the snapshot "
+"creation time. The only exception is that any earlier snapshots will appear "
+"as zero length files. To unmount the snapshot, use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1606
+#, no-wrap
+msgid ""
+"# umount /mnt\n"
+"# mdconfig -d -u 4\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1609
+msgid ""
+"For more information about `softupdates` and file system snapshots, "
+"including technical papers, visit Marshall Kirk McKusick's website at http://"
+"www.mckusick.com/[http://www.mckusick.com/]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/disks/_index.adoc:1611
+#, no-wrap
+msgid "Disk Quotas"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1615
+msgid ""
+"Disk quotas can be used to limit the amount of disk space or the number of "
+"files a user or members of a group may allocate on a per-file system basis. "
+"This prevents one user or group of users from consuming all of the available "
+"disk space."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1618
+msgid ""
+"This section describes how to configure disk quotas for the UFS file "
+"system. To configure quotas on the ZFS file system, refer to crossref:"
+"zfs[zfs-zfs-quota,\"Dataset, User, and Group Quotas\"]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:1619
+#, no-wrap
+msgid "Enabling Disk Quotas"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1622
+msgid "To determine if the FreeBSD kernel provides support for disk quotas:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1627
+#, no-wrap
+msgid ""
+"% sysctl kern.features.ufs_quota\n"
+"kern.features.ufs_quota: 1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1631
+msgid ""
+"In this example, the `1` indicates quota support. If the value is instead "
+"`0`, add the following line to a custom kernel configuration file and "
+"rebuild the kernel using the instructions in crossref:"
+"kernelconfig[kernelconfig,Configuring the FreeBSD Kernel]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1635
+#, no-wrap
+msgid "options QUOTA\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1638
+msgid "Next, enable disk quotas in [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1642
+#, no-wrap
+msgid "quota_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1648
+msgid ""
+"Normally on bootup, the quota integrity of each file system is checked by "
+"man:quotacheck[8]. This program insures that the data in the quota database "
+"properly reflects the data on the file system. This is a time consuming "
+"process that will significantly affect the time the system takes to boot. "
+"To skip this step, add this variable to [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1652
+#, no-wrap
+msgid "check_quotas=\"NO\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1657
+msgid ""
+"Finally, edit [.filename]#/etc/fstab# to enable disk quotas on a per-file "
+"system basis. To enable per-user quotas on a file system, add `userquota` "
+"to the options field in the [.filename]#/etc/fstab# entry for the file "
+"system to enable quotas on. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1661
+#, no-wrap
+msgid "/dev/da1s2g /home ufs rw,userquota 1 2\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1665
+msgid ""
+"To enable group quotas, use `groupquota` instead. To enable both user and "
+"group quotas, separate the options with a comma:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1669
+#, no-wrap
+msgid "/dev/da1s2g /home ufs rw,userquota,groupquota 1 2\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1674
+msgid ""
+"By default, quota files are stored in the root directory of the file system "
+"as [.filename]#quota.user# and [.filename]#quota.group#. Refer to man:"
+"fstab[5] for more information. Specifying an alternate location for the "
+"quota files is not recommended."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1676
+msgid ""
+"Once the configuration is complete, reboot the system and [.filename]#/etc/"
+"rc# will automatically run the appropriate commands to create the initial "
+"quota files for all of the quotas enabled in [.filename]#/etc/fstab#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1679
+msgid ""
+"In the normal course of operations, there should be no need to manually run "
+"man:quotacheck[8], man:quotaon[8], or man:quotaoff[8]. However, one should "
+"read these manual pages to be familiar with their operation."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:1680
+#, no-wrap
+msgid "Setting Quota Limits"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1683
+msgid "To verify that quotas are enabled, run:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1687
+#, no-wrap
+msgid "# quota -v\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1690
+msgid ""
+"There should be a one line summary of disk usage and current quota limits "
+"for each file system that quotas are enabled on."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1692
+msgid "The system is now ready to be assigned quota limits with `edquota`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1696
+msgid ""
+"Several options are available to enforce limits on the amount of disk space "
+"a user or group may allocate, and how many files they may create. "
+"Allocations can be limited based on disk space (block quotas), number of "
+"files (inode quotas), or a combination of both. Each limit is further "
+"broken down into two categories: hard and soft limits."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1701
+msgid ""
+"A hard limit may not be exceeded. Once a user reaches a hard limit, no "
+"further allocations can be made on that file system by that user. For "
+"example, if the user has a hard limit of 500 kbytes on a file system and is "
+"currently using 490 kbytes, the user can only allocate an additional 10 "
+"kbytes. Attempting to allocate an additional 11 kbytes will fail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1705
+msgid ""
+"Soft limits can be exceeded for a limited amount of time, known as the grace "
+"period, which is one week by default. If a user stays over their limit "
+"longer than the grace period, the soft limit turns into a hard limit and no "
+"further allocations are allowed. When the user drops back below the soft "
+"limit, the grace period is reset."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1709
+msgid ""
+"In the following example, the quota for the `test` account is being edited. "
+"When `edquota` is invoked, the editor specified by `EDITOR` is opened in "
+"order to edit the quota limits. The default editor is set to vi."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1718
+#, no-wrap
+msgid ""
+"# edquota -u test\n"
+"Quotas for user test:\n"
+"/usr: kbytes in use: 65, limits (soft = 50, hard = 75)\n"
+" inodes in use: 7, limits (soft = 50, hard = 60)\n"
+"/usr/var: kbytes in use: 0, limits (soft = 50, hard = 75)\n"
+" inodes in use: 0, limits (soft = 50, hard = 60)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1724
+msgid ""
+"There are normally two lines for each file system that has quotas enabled. "
+"One line represents the block limits and the other represents the inode "
+"limits. Change the value to modify the quota limit. For example, to raise "
+"the block limit on [.filename]#/usr# to a soft limit of `500` and a hard "
+"limit of `600`, change the values in that line as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1728
+#, no-wrap
+msgid "/usr: kbytes in use: 65, limits (soft = 500, hard = 600)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1731
+msgid "The new quota limits take effect upon exiting the editor."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1736
+msgid ""
+"Sometimes it is desirable to set quota limits on a range of users. This can "
+"be done by first assigning the desired quota limit to a user. Then, use `-"
+"p` to duplicate that quota to a specified range of user IDs (UIDs). The "
+"following command will duplicate those quota limits for UIDs `10,000` "
+"through `19,999`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1740
+#, no-wrap
+msgid "# edquota -p test 10000-19999\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1743
+msgid "For more information, refer to man:edquota[8]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:1744
+#, no-wrap
+msgid "Checking Quota Limits and Disk Usage"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1750
+msgid ""
+"To check individual user or group quotas and disk usage, use man:quota[1]. "
+"A user may only examine their own quota and the quota of a group they are a "
+"member of. Only the superuser may view all user and group quotas. To get a "
+"summary of all quotas and disk usage for file systems with quotas enabled, "
+"use man:repquota[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1754
+msgid ""
+"Normally, file systems that the user is not using any disk space on will not "
+"show in the output of `quota`, even if the user has a quota limit assigned "
+"for that file system. Use `-v` to display those file systems. The "
+"following is sample output from `quota -v` for a user that has quota limits "
+"on two file systems."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1761
+#, no-wrap
+msgid ""
+"Disk quotas for user test (uid 1002):\n"
+" Filesystem usage quota limit grace files quota limit grace\n"
+" /usr 65* 50 75 5days 7 50 60\n"
+" /usr/var 0 50 75 0 50 60\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1765
+msgid ""
+"In this example, the user is currently 15 kbytes over the soft limit of 50 "
+"kbytes on [.filename]#/usr# and has 5 days of grace period left. The "
+"asterisk `*` indicates that the user is currently over the quota limit."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:1766
+#, no-wrap
+msgid "Quotas over NFS"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1770
+msgid ""
+"Quotas are enforced by the quota subsystem on the NFS server. The man:rpc."
+"rquotad[8] daemon makes quota information available to `quota` on NFS "
+"clients, allowing users on those machines to see their quota statistics."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1772
+msgid ""
+"On the NFS server, enable `rpc.rquotad` by removing the `+#+` from this line "
+"in [.filename]*/etc/inetd.conf*:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1776
+#, no-wrap
+msgid "rquotad/1 dgram rpc/udp wait root /usr/libexec/rpc.rquotad rpc.rquotad\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1779
+msgid "Then, restart `inetd`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1783
+#, no-wrap
+msgid "# service inetd restart\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/disks/_index.adoc:1786
+#, no-wrap
+msgid "Encrypting Disk Partitions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1791
+msgid ""
+"FreeBSD offers excellent online protections against unauthorized data "
+"access. File permissions and crossref:mac[mac,Mandatory Access Control] "
+"(MAC) help prevent unauthorized users from accessing data while the "
+"operating system is active and the computer is powered up. However, the "
+"permissions enforced by the operating system are irrelevant if an attacker "
+"has physical access to a computer and can move the computer's hard drive to "
+"another system to copy and analyze the data."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1795
+msgid ""
+"Regardless of how an attacker may have come into possession of a hard drive "
+"or powered-down computer, the GEOM-based cryptographic subsystems built into "
+"FreeBSD are able to protect the data on the computer's file systems against "
+"even highly-motivated attackers with significant resources. Unlike "
+"encryption methods that encrypt individual files, the built-in `gbde` and "
+"`geli` utilities can be used to transparently encrypt entire file systems. "
+"No cleartext ever touches the hard drive's platter."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1798
+msgid ""
+"This chapter demonstrates how to create an encrypted file system on "
+"FreeBSD. It first demonstrates the process using `gbde` and then "
+"demonstrates the same example using `geli`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:1799
+#, no-wrap
+msgid "Disk Encryption with gbde"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1804
+msgid ""
+"The objective of the man:gbde[4] facility is to provide a formidable "
+"challenge for an attacker to gain access to the contents of a _cold_ storage "
+"device. However, if the computer is compromised while up and running and "
+"the storage device is actively attached, or the attacker has access to a "
+"valid passphrase, it offers no protection to the contents of the storage "
+"device. Thus, it is important to provide physical security while the system "
+"is running and to protect the passphrase used by the encryption mechanism."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1809
+msgid ""
+"This facility provides several barriers to protect the data stored in each "
+"disk sector. It encrypts the contents of a disk sector using 128-bit AES in "
+"CBC mode. Each sector on the disk is encrypted with a different AES key. "
+"For more information on the cryptographic design, including how the sector "
+"keys are derived from the user-supplied passphrase, refer to man:gbde[4]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1811
+msgid ""
+"FreeBSD provides a kernel module for gbde which can be loaded with this "
+"command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1815
+#, no-wrap
+msgid "# kldload geom_bde\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1818
+msgid ""
+"If using a custom kernel configuration file, ensure it contains this line:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1820
+msgid "`options GEOM_BDE`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1822
+msgid ""
+"The following example demonstrates adding a new hard drive to a system that "
+"will hold a single encrypted partition that will be mounted as [.filename]#/"
+"private#."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/disks/_index.adoc:1824
+#, no-wrap
+msgid "Procedure: Encrypting a Partition with gbde"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1826
+msgid "Add the New Hard Drive"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1829
+msgid ""
+"Install the new drive to the system as explained in <<disks-adding>>. For "
+"the purposes of this example, a new hard drive partition has been added as [."
+"filename]#/dev/ad4s1c# and [.filename]#/dev/ad0s1*# represents the existing "
+"standard FreeBSD partitions."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1836
+#, no-wrap
+msgid ""
+"# ls /dev/ad*\n"
+"/dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1\n"
+"/dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c\n"
+"/dev/ad0s1a /dev/ad0s1d /dev/ad4\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1839
+msgid "Create a Directory to Hold `gbde` Lock Files"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1843
+#, no-wrap
+msgid "# mkdir /etc/gbde\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1848
+msgid ""
+"The gbde lock file contains information that gbde requires to access "
+"encrypted partitions. Without access to the lock file, gbde will not be "
+"able to decrypt the data contained in the encrypted partition without "
+"significant manual intervention which is not supported by the software. "
+"Each encrypted partition uses a separate lock file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1849
+msgid "Initialize the `gbde` Partition"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1854
+msgid ""
+"A gbde partition must be initialized before it can be used. This "
+"initialization needs to be performed only once. This command will open the "
+"default editor, in order to set various configuration options in a "
+"template. For use with the UFS file system, set the sector_size to 2048:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1867
+#, no-wrap
+msgid ""
+"# gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c.lock\n"
+"# $FreeBSD: src/sbin/gbde/template.txt,v 1.1.36.1 2009/08/03 08:13:06 kensmith Exp $\n"
+"#\n"
+"# Sector size is the smallest unit of data which can be read or written.\n"
+"# Making it too small decreases performance and decreases available space.\n"
+"# Making it too large may prevent filesystems from working. 512 is the\n"
+"# minimum and always safe. For UFS, use the fragment size\n"
+"#\n"
+"sector_size\t=\t2048\n"
+"[...]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1873
+msgid ""
+"Once the edit is saved, the user will be asked twice to type the passphrase "
+"used to secure the data. The passphrase must be the same both times. The "
+"ability of gbde to protect data depends entirely on the quality of the "
+"passphrase. For tips on how to select a secure passphrase that is easy to "
+"remember, see http://world.std.com/\\~reinhold/diceware.html[http://world."
+"std.com/~reinhold/diceware.htm]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1877
+msgid ""
+"This initialization creates a lock file for the gbde partition. In this "
+"example, it is stored as [.filename]#/etc/gbde/ad4s1c.lock#. Lock files "
+"must end in \".lock\" in order to be correctly detected by the [.filename]#/"
+"etc/rc.d/gbde# start up script."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1882
+msgid ""
+"Lock files _must_ be backed up together with the contents of any encrypted "
+"partitions. Without the lock file, the legitimate owner will be unable to "
+"access the data on the encrypted partition."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1885
+msgid "Attach the Encrypted Partition to the Kernel"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1889
+#, no-wrap
+msgid "# gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c.lock\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1893
+msgid ""
+"This command will prompt to input the passphrase that was selected during "
+"the initialization of the encrypted partition. The new encrypted device "
+"will appear in [.filename]#/dev# as [.filename]#/dev/device_name.bde#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1900
+#, no-wrap
+msgid ""
+"# ls /dev/ad*\n"
+"/dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1\n"
+"/dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c\n"
+"/dev/ad0s1a /dev/ad0s1d /dev/ad4 /dev/ad4s1c.bde\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1903
+msgid "Create a File System on the Encrypted Device"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1907
+msgid ""
+"Once the encrypted device has been attached to the kernel, a file system can "
+"be created on the device. This example creates a UFS file system with soft "
+"updates enabled. Be sure to specify the partition which has a [.filename]#*."
+"bde# extension:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1911
+#, no-wrap
+msgid "# newfs -U /dev/ad4s1c.bde\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1914
+msgid "Mount the Encrypted Partition"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1916
+msgid "Create a mount point and mount the encrypted file system:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1921
+#, no-wrap
+msgid ""
+"# mkdir /private\n"
+"# mount /dev/ad4s1c.bde /private\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1924
+msgid "Verify That the Encrypted File System is Available"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1926
+msgid "The encrypted file system should now be visible and available for use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1937
+#, no-wrap
+msgid ""
+"% df -H\n"
+"Filesystem Size Used Avail Capacity Mounted on\n"
+"/dev/ad0s1a 1037M 72M 883M 8% /\n"
+"/devfs 1.0K 1.0K 0B 100% /dev\n"
+"/dev/ad0s1f 8.1G 55K 7.5G 0% /home\n"
+"/dev/ad0s1e 1037M 1.1M 953M 0% /tmp\n"
+"/dev/ad0s1d 6.1G 1.9G 3.7G 35% /usr\n"
+"/dev/ad4s1c.bde 150G 4.1K 138G 0% /private\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1941
+msgid ""
+"After each boot, any encrypted file systems must be manually re-attached to "
+"the kernel, checked for errors, and mounted, before the file systems can be "
+"used. To configure these steps, add the following lines to [.filename]#/etc/"
+"rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1947
+#, no-wrap
+msgid ""
+"gbde_autoattach_all=\"YES\"\n"
+"gbde_devices=\"ad4s1c\"\n"
+"gbde_lockdir=\"/etc/gbde\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:1952
+msgid ""
+"This requires that the passphrase be entered at the console at boot time. "
+"After typing the correct passphrase, the encrypted partition will be mounted "
+"automatically. Additional gbde boot options are available and listed in man:"
+"rc.conf[5]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1958
+msgid ""
+"sysinstall is incompatible with gbde-encrypted devices. All [.filename]#*."
+"bde# devices must be detached from the kernel before starting sysinstall or "
+"it will crash during its initial probing for devices. To detach the "
+"encrypted device used in the example, use the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1962
+#, no-wrap
+msgid "# gbde detach /dev/ad4s1c\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:1966
+#, no-wrap
+msgid "Disk Encryption with `geli`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1971
+msgid ""
+"An alternative cryptographic GEOM class is available using `geli`. This "
+"control utility adds some features and uses a different scheme for doing "
+"cryptographic work. It provides the following features:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1973
+msgid ""
+"Utilizes the man:crypto[9] framework and automatically uses cryptographic "
+"hardware when it is available."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1974
+msgid ""
+"Supports multiple cryptographic algorithms such as AES, Blowfish, and 3DES."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1975
+msgid ""
+"Allows the root partition to be encrypted. The passphrase used to access the "
+"encrypted root partition will be requested during system boot."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1976
+msgid "Allows the use of two independent keys."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1977
+msgid "It is fast as it performs simple sector-to-sector encryption."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1978
+msgid ""
+"Allows backup and restore of master keys. If a user destroys their keys, it "
+"is still possible to get access to the data by restoring keys from the "
+"backup."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1979
+msgid ""
+"Allows a disk to attach with a random, one-time key which is useful for swap "
+"partitions and temporary file systems."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1981
+msgid "More features and usage examples can be found in man:geli[8]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1987
+msgid ""
+"The following example describes how to generate a key file which will be "
+"used as part of the master key for the encrypted provider mounted under [."
+"filename]#/private#. The key file will provide some random data used to "
+"encrypt the master key. The master key will also be protected by a "
+"passphrase. The provider's sector size will be 4kB. The example describes "
+"how to attach to the `geli` provider, create a file system on it, mount it, "
+"work with it, and finally, how to detach it."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/disks/_index.adoc:1989
+#, no-wrap
+msgid "Procedure: Encrypting a Partition with `geli`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1991
+msgid "Load `geli` Support"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1993
+msgid ""
+"Support for `geli` is available as a loadable kernel module. To configure "
+"the system to automatically load the module at boot time, add the following "
+"line to [.filename]#/boot/loader.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:1997
+#, no-wrap
+msgid "geom_eli_load=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2000
+msgid "To load the kernel module now:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2004
+#, no-wrap
+msgid "# kldload geom_eli\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2007
+msgid ""
+"For a custom kernel, ensure the kernel configuration file contains these "
+"lines:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2012
+#, no-wrap
+msgid ""
+"options GEOM_ELI\n"
+"device crypto\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2015
+msgid "Generate the Master Key"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2022
+msgid ""
+"The following commands generate a master key that all data will be encrypted "
+"with. This key can never be changed. Rather than using it directly, it is "
+"encrypted with one or more user keys. The user keys are made up of an "
+"optional combination of random bytes from a file, [.filename]#/root/da2."
+"key#, and/or a passphrase. In this case, the data source for the key file "
+"is [.filename]#/dev/random#. This command also configures the sector size "
+"of the provider ([.filename]#/dev/da2.eli#) as 4kB, for better performance:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2029
+#, no-wrap
+msgid ""
+"# dd if=/dev/random of=/root/da2.key bs=64 count=1\n"
+"# geli init -K /root/da2.key -s 4096 /dev/da2\n"
+"Enter new passphrase:\n"
+"Reenter new passphrase:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2032
+msgid ""
+"It is not mandatory to use both a passphrase and a key file as either method "
+"of securing the master key can be used in isolation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2035
+msgid ""
+"If the key file is given as \"-\", standard input will be used. For "
+"example, this command generates three key files:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2039
+#, no-wrap
+msgid "# cat keyfile1 keyfile2 keyfile3 | geli init -K - /dev/da2\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2042
+msgid "Attach the Provider with the Generated Key"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2044
+msgid ""
+"To attach the provider, specify the key file, the name of the disk, and the "
+"passphrase:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2049
+#, no-wrap
+msgid ""
+"# geli attach -k /root/da2.key /dev/da2\n"
+"Enter passphrase:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2052
+msgid "This creates a new device with an [.filename]#.eli# extension:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2057
+#, no-wrap
+msgid ""
+"# ls /dev/da2*\n"
+"/dev/da2 /dev/da2.eli\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2060
+msgid "Create the New File System"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2062
+msgid ""
+"Next, format the device with the UFS file system and mount it on an existing "
+"mount point:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2068
+#, no-wrap
+msgid ""
+"# dd if=/dev/random of=/dev/da2.eli bs=1m\n"
+"# newfs /dev/da2.eli\n"
+"# mount /dev/da2.eli /private\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2071
+msgid "The encrypted file system should now be available for use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2082
+#, no-wrap
+msgid ""
+"# df -H\n"
+"Filesystem Size Used Avail Capacity Mounted on\n"
+"/dev/ad0s1a 248M 89M 139M 38% /\n"
+"/devfs 1.0K 1.0K 0B 100% /dev\n"
+"/dev/ad0s1f 7.7G 2.3G 4.9G 32% /usr\n"
+"/dev/ad0s1d 989M 1.5M 909M 0% /tmp\n"
+"/dev/ad0s1e 3.9G 1.3G 2.3G 35% /var\n"
+"/dev/da2.eli 150G 4.1K 138G 0% /private\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2085
+msgid ""
+"Once the work on the encrypted partition is done, and the [.filename]#/"
+"private# partition is no longer needed, it is prudent to put the device into "
+"cold storage by unmounting and detaching the `geli` encrypted partition from "
+"the kernel:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2090
+#, no-wrap
+msgid ""
+"# umount /private\n"
+"# geli detach da2.eli\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2093
+msgid ""
+"An [.filename]#rc.d# script is provided to simplify the mounting of `geli`-"
+"encrypted devices at boot time. For this example, add these lines to [."
+"filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2098
+#, no-wrap
+msgid ""
+"geli_devices=\"da2\"\n"
+"geli_da2_flags=\"-k /root/da2.key\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2108
+msgid ""
+"This configures [.filename]#/dev/da2# as a `geli` provider with a master key "
+"of [.filename]#/root/da2.key#. The system will automatically detach the "
+"provider from the kernel before the system shuts down. During the startup "
+"process, the script will prompt for the passphrase before attaching the "
+"provider. Other kernel messages might be shown before and after the "
+"password prompt. If the boot process seems to stall, look carefully for the "
+"password prompt among the other messages. Once the correct passphrase is "
+"entered, the provider is attached. The file system is then mounted, "
+"typically by an entry in [.filename]#/etc/fstab#. Refer to crossref:"
+"basics[mount-unmount,“Mounting and Unmounting File Systems”] for "
+"instructions on how to configure a file system to mount at boot time."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/disks/_index.adoc:2110
+#, no-wrap
+msgid "Encrypting Swap"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2117
+msgid ""
+"Like the encryption of disk partitions, encryption of swap space is used to "
+"protect sensitive information. Consider an application that deals with "
+"passwords. As long as these passwords stay in physical memory, they are not "
+"written to disk and will be cleared after a reboot. However, if FreeBSD "
+"starts swapping out memory pages to free space, the passwords may be written "
+"to the disk unencrypted. Encrypting swap space can be a solution for this "
+"scenario."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2120
+msgid ""
+"This section demonstrates how to configure an encrypted swap partition using "
+"man:gbde[8] or man:geli[8] encryption. It assumes that [.filename]#/dev/"
+"ada0s1b# is the swap partition."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:2121
+#, no-wrap
+msgid "Configuring Encrypted Swap"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2125
+msgid ""
+"Swap partitions are not encrypted by default and should be cleared of any "
+"sensitive data before continuing. To overwrite the current swap partition "
+"with random garbage, execute the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2129
+#, no-wrap
+msgid "# dd if=/dev/random of=/dev/ada0s1b bs=1m\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2132
+msgid ""
+"To encrypt the swap partition using man:gbde[8], add the `.bde` suffix to "
+"the swap line in [.filename]#/etc/fstab#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2137
+#, no-wrap
+msgid ""
+"# Device\t\tMountpoint\tFStype\tOptions\t\tDump\tPass#\n"
+"/dev/ada0s1b.bde\tnone\t\tswap\tsw\t\t0\t0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2140
+msgid ""
+"To instead encrypt the swap partition using man:geli[8], use the `.eli` "
+"suffix:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2145
+#, no-wrap
+msgid ""
+"# Device\t\tMountpoint\tFStype\tOptions\t\tDump\tPass#\n"
+"/dev/ada0s1b.eli\tnone\t\tswap\tsw\t\t0\t0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2150
+msgid ""
+"By default, man:geli[8] uses the AES algorithm with a key length of 128 "
+"bits. Normally the default settings will suffice. If desired, these "
+"defaults can be altered in the options field in [.filename]#/etc/fstab#. The "
+"possible flags are:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/disks/_index.adoc:2151
+#, no-wrap
+msgid "aalgo"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2154
+msgid ""
+"Data integrity verification algorithm used to ensure that the encrypted data "
+"has not been tampered with. See man:geli[8] for a list of supported "
+"algorithms."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/disks/_index.adoc:2155
+#, no-wrap
+msgid "ealgo"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2158
+msgid ""
+"Encryption algorithm used to protect the data. See man:geli[8] for a list "
+"of supported algorithms."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/disks/_index.adoc:2159
+#, no-wrap
+msgid "keylen"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2162
+msgid ""
+"The length of the key used for the encryption algorithm. See man:geli[8] "
+"for the key lengths that are supported by each encryption algorithm."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/disks/_index.adoc:2163
+#, no-wrap
+msgid "sectorsize"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2167
+msgid ""
+"The size of the blocks data is broken into before it is encrypted. Larger "
+"sector sizes increase performance at the cost of higher storage overhead. "
+"The recommended size is 4096 bytes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2169
+msgid ""
+"This example configures an encrypted swap partition using the Blowfish "
+"algorithm with a key length of 128 bits and a sectorsize of 4 kilobytes:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2174
+#, no-wrap
+msgid ""
+"# Device\t\tMountpoint\tFStype\tOptions\t\t\t\tDump\tPass#\n"
+"/dev/ada0s1b.eli\tnone\t\tswap\tsw,ealgo=blowfish,keylen=128,sectorsize=4096\t0\t0\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:2176
+#, no-wrap
+msgid "Encrypted Swap Verification"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2179
+msgid ""
+"Once the system has rebooted, proper operation of the encrypted swap can be "
+"verified using `swapinfo`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2181
+msgid "If man:gbde[8] is being used:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2187
+#, no-wrap
+msgid ""
+"% swapinfo\n"
+"Device 1K-blocks Used Avail Capacity\n"
+"/dev/ada0s1b.bde 542720 0 542720 0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2190
+msgid "If man:geli[8] is being used:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2196
+#, no-wrap
+msgid ""
+"% swapinfo\n"
+"Device 1K-blocks Used Avail Capacity\n"
+"/dev/ada0s1b.eli 542720 0 542720 0\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/disks/_index.adoc:2199
+#, no-wrap
+msgid "Highly Available Storage (HAST)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2205
+msgid ""
+"High availability is one of the main requirements in serious business "
+"applications and highly-available storage is a key component in such "
+"environments. In FreeBSD, the Highly Available STorage (HAST) framework "
+"allows transparent storage of the same data across several physically "
+"separated machines connected by a TCP/IP network. HAST can be understood as "
+"a network-based RAID1 (mirror), and is similar to the DRBD(R) storage system "
+"used in the GNU/Linux(R) platform. In combination with other high-"
+"availability features of FreeBSD like CARP, HAST makes it possible to build "
+"a highly-available storage cluster that is resistant to hardware failures."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2207
+msgid "The following are the main features of HAST:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2209
+msgid "Can be used to mask I/O errors on local hard drives."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2210
+msgid ""
+"File system agnostic as it works with any file system supported by FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2211
+msgid ""
+"Efficient and quick resynchronization as only the blocks that were modified "
+"during the downtime of a node are synchronized."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2212
+msgid ""
+"Can be used in an already deployed environment to add additional redundancy."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2213
+msgid ""
+"Together with CARP, Heartbeat, or other tools, it can be used to build a "
+"robust and durable storage system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2215
+msgid "After reading this section, you will know:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2217
+msgid "What HAST is, how it works, and which features it provides."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2218
+msgid "How to set up and use HAST on FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2219
+msgid "How to integrate CARP and man:devd[8] to build a robust storage system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2221
+msgid "Before reading this section, you should:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2223
+msgid ""
+"Understand UNIX(R) and FreeBSD basics (crossref:basics[basics,FreeBSD "
+"Basics])."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2224
+msgid ""
+"Know how to configure network interfaces and other core FreeBSD subsystems "
+"(crossref:config[config-tuning,Configuration and Tuning])."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2225
+msgid ""
+"Have a good understanding of FreeBSD networking (crossref:partiv[network-"
+"communication,\"Network Communication\"])."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2227
+msgid ""
+"The HAST project was sponsored by The FreeBSD Foundation with support from "
+"http://www.omc.net/[http://www.omc.net/] and http://www.transip.nl/[http://"
+"www.transip.nl/]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:2228
+#, no-wrap
+msgid "HAST Operation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2232
+msgid ""
+"HAST provides synchronous block-level replication between two physical "
+"machines: the _primary_ node and the _secondary_ node. These two machines "
+"together are referred to as a cluster."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2236
+msgid ""
+"Since HAST works in a primary-secondary configuration, it allows only one of "
+"the cluster nodes to be active at any given time. The primary node, also "
+"called _active_, is the one which will handle all the I/O requests to HAST-"
+"managed devices. The secondary node is automatically synchronized from the "
+"primary node."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2238
+msgid ""
+"The physical components of the HAST system are the local disk on primary "
+"node, and the disk on the remote, secondary node."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2242
+msgid ""
+"HAST operates synchronously on a block level, making it transparent to file "
+"systems and applications. HAST provides regular GEOM providers in [."
+"filename]#/dev/hast/# for use by other tools or applications. There is no "
+"difference between using HAST-provided devices and raw disks or partitions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2246
+msgid ""
+"Each write, delete, or flush operation is sent to both the local disk and to "
+"the remote disk over TCP/IP. Each read operation is served from the local "
+"disk, unless the local disk is not up-to-date or an I/O error occurs. In "
+"such cases, the read operation is sent to the secondary node."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2250
+msgid ""
+"HAST tries to provide fast failure recovery. For this reason, it is "
+"important to reduce synchronization time after a node's outage. To provide "
+"fast synchronization, HAST manages an on-disk bitmap of dirty extents and "
+"only synchronizes those during a regular synchronization, with an exception "
+"of the initial sync."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2253
+msgid ""
+"There are many ways to handle synchronization. HAST implements several "
+"replication modes to handle different synchronization methods:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2255
+msgid ""
+"_memsync_: This mode reports a write operation as completed when the local "
+"write operation is finished and when the remote node acknowledges data "
+"arrival, but before actually storing the data. The data on the remote node "
+"will be stored directly after sending the acknowledgement. This mode is "
+"intended to reduce latency, but still provides good reliability. This mode "
+"is the default."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2256
+msgid ""
+"_fullsync_: This mode reports a write operation as completed when both the "
+"local write and the remote write complete. This is the safest and the "
+"slowest replication mode."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2257
+msgid ""
+"_async_: This mode reports a write operation as completed when the local "
+"write completes. This is the fastest and the most dangerous replication "
+"mode. It should only be used when replicating to a distant node where "
+"latency is too high for other modes."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:2258
+#, no-wrap
+msgid "HAST Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2261
+msgid "The HAST framework consists of several components:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2263
+msgid ""
+"The man:hastd[8] daemon which provides data synchronization. When this "
+"daemon is started, it will automatically load `geom_gate.ko`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2264
+msgid "The userland management utility, man:hastctl[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2265
+msgid ""
+"The man:hast.conf[5] configuration file. This file must exist before "
+"starting hastd."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2267
+msgid ""
+"Users who prefer to statically build `GEOM_GATE` support into the kernel "
+"should add this line to the custom kernel configuration file, then rebuild "
+"the kernel using the instructions in crossref:kernelconfig[kernelconfig,"
+"Configuring the FreeBSD Kernel]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2271
+#, no-wrap
+msgid "options\tGEOM_GATE\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2277
+msgid ""
+"The following example describes how to configure two nodes in primary-"
+"secondary operation using HAST to replicate the data between the two. The "
+"nodes will be called `hasta`, with an IP address of `172.16.0.1`, and "
+"`hastb`, with an IP address of `172.16.0.2`. Both nodes will have a "
+"dedicated hard drive [.filename]#/dev/ad6# of the same size for HAST "
+"operation. The HAST pool, sometimes referred to as a resource or the GEOM "
+"provider in [.filename]#/dev/hast/#, will be called `test`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2281
+msgid ""
+"Configuration of HAST is done using [.filename]#/etc/hast.conf#. This file "
+"should be identical on both nodes. The simplest configuration is:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2294
+#, no-wrap
+msgid ""
+"resource test {\n"
+"\ton hasta {\n"
+"\t\tlocal /dev/ad6\n"
+"\t\tremote 172.16.0.2\n"
+"\t}\n"
+"\ton hastb {\n"
+"\t\tlocal /dev/ad6\n"
+"\t\tremote 172.16.0.1\n"
+"\t}\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2297
+msgid "For more advanced configuration, refer to man:hast.conf[5]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2301
+msgid ""
+"It is also possible to use host names in the `remote` statements if the "
+"hosts are resolvable and defined either in [.filename]#/etc/hosts# or in the "
+"local DNS."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2305
+msgid ""
+"Once the configuration exists on both nodes, the HAST pool can be created. "
+"Run these commands on both nodes to place the initial metadata onto the "
+"local disk and to start man:hastd[8]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2310
+#, no-wrap
+msgid ""
+"# hastctl create test\n"
+"# service hastd onestart\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2316
+msgid ""
+"It is _not_ possible to use GEOM providers with an existing file system or "
+"to convert an existing storage to a HAST-managed pool. This procedure needs "
+"to store some metadata on the provider and there will not be enough required "
+"space available on an existing provider."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2320
+msgid ""
+"A HAST node's `primary` or `secondary` role is selected by an administrator, "
+"or software like Heartbeat, using man:hastctl[8]. On the primary node, "
+"`hasta`, issue this command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2324
+#, no-wrap
+msgid "# hastctl role primary test\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2327
+msgid "Run this command on the secondary node, `hastb`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2331
+#, no-wrap
+msgid "# hastctl role secondary test\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2334
+msgid "Verify the result by running `hastctl` on each node:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2338
+#, no-wrap
+msgid "# hastctl status test\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2344
+msgid ""
+"Check the `status` line in the output. If it says `degraded`, something is "
+"wrong with the configuration file. It should say `complete` on each node, "
+"meaning that the synchronization between the nodes has started. The "
+"synchronization completes when `hastctl status` reports 0 bytes of `dirty` "
+"extents."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2349
+msgid ""
+"The next step is to create a file system on the GEOM provider and mount it. "
+"This must be done on the `primary` node. Creating the file system can take "
+"a few minutes, depending on the size of the hard drive. This example "
+"creates a UFS file system on [.filename]#/dev/hast/test#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2355
+#, no-wrap
+msgid ""
+"# newfs -U /dev/hast/test\n"
+"# mkdir /hast/test\n"
+"# mount /dev/hast/test /hast/test\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2359
+msgid ""
+"Once the HAST framework is configured properly, the final step is to make "
+"sure that HAST is started automatically during system boot. Add this line "
+"to [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2363
+#, no-wrap
+msgid "hastd_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/disks/_index.adoc:2365
+#, no-wrap
+msgid "Failover Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2369
+msgid ""
+"The goal of this example is to build a robust storage system which is "
+"resistant to the failure of any given node. If the primary node fails, the "
+"secondary node is there to take over seamlessly, check and mount the file "
+"system, and continue to work without missing a single bit of data."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2375
+msgid ""
+"To accomplish this task, the Common Address Redundancy Protocol (CARP) is "
+"used to provide for automatic failover at the IP layer. CARP allows "
+"multiple hosts on the same network segment to share an IP address. Set up "
+"CARP on both nodes of the cluster according to the documentation available "
+"in crossref:advanced-networking[carp,“Common Address Redundancy Protocol "
+"(CARP)”]. In this example, each node will have its own management IP "
+"address and a shared IP address of _172.16.0.254_. The primary HAST node of "
+"the cluster must be the primary CARP node."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2379
+msgid ""
+"The HAST pool created in the previous section is now ready to be exported to "
+"the other hosts on the network. This can be accomplished by exporting it "
+"through NFS or Samba, using the shared IP address _172.16.0.254_. The only "
+"problem which remains unresolved is an automatic failover should the primary "
+"node fail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2383
+msgid ""
+"In the event of CARP interfaces going up or down, the FreeBSD operating "
+"system generates a man:devd[8] event, making it possible to watch for state "
+"changes on the CARP interfaces. A state change on the CARP interface is an "
+"indication that one of the nodes failed or came back online. These state "
+"change events make it possible to run a script which will automatically "
+"handle the HAST failover."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2385
+msgid ""
+"To catch state changes on the CARP interfaces, add this configuration to [."
+"filename]#/etc/devd.conf# on each node:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2394
+#, no-wrap
+msgid ""
+"notify 30 {\n"
+"\tmatch \"system\" \"IFNET\";\n"
+"\tmatch \"subsystem\" \"carp0\";\n"
+"\tmatch \"type\" \"LINK_UP\";\n"
+"\taction \"/usr/local/sbin/carp-hast-switch primary\";\n"
+"};\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2401
+#, no-wrap
+msgid ""
+"notify 30 {\n"
+"\tmatch \"system\" \"IFNET\";\n"
+"\tmatch \"subsystem\" \"carp0\";\n"
+"\tmatch \"type\" \"LINK_DOWN\";\n"
+"\taction \"/usr/local/sbin/carp-hast-switch secondary\";\n"
+"};\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2406
+msgid ""
+"If the systems are running FreeBSD 10 or higher, replace [.filename]#carp0# "
+"with the name of the CARP-configured interface."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2409
+msgid ""
+"Restart man:devd[8] on both nodes to put the new configuration into effect:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2413
+#, no-wrap
+msgid "# service devd restart\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2417
+msgid ""
+"When the specified interface state changes by going up or down , the system "
+"generates a notification, allowing the man:devd[8] subsystem to run the "
+"specified automatic failover script, [.filename]#/usr/local/sbin/carp-hast-"
+"switch#. For further clarification about this configuration, refer to man:"
+"devd.conf[5]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2419
+msgid "Here is an example of an automated failover script:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2423
+#, no-wrap
+msgid "#!/bin/sh\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2427
+#, no-wrap
+msgid ""
+"# Original script by Freddie Cash <fjwcash@gmail.com>\n"
+"# Modified by Michael W. Lucas <mwlucas@BlackHelicopters.org>\n"
+"# and Viktor Petersson <vpetersson@wireload.net>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2430
+#, no-wrap
+msgid ""
+"# The names of the HAST resources, as listed in /etc/hast.conf\n"
+"resources=\"test\"\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2434
+#, no-wrap
+msgid ""
+"# delay in mounting HAST resource after becoming primary\n"
+"# make your best guess\n"
+"delay=3\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2438
+#, no-wrap
+msgid ""
+"# logging\n"
+"log=\"local0.debug\"\n"
+"name=\"carp-hast\"\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2440
+#, no-wrap
+msgid "# end of user configurable stuff\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2445
+#, no-wrap
+msgid ""
+"case \"$1\" in\n"
+"\tprimary)\n"
+"\t\tlogger -p $log -t $name \"Switching to primary provider for ${resources}.\"\n"
+"\t\tsleep ${delay}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2451
+#, no-wrap
+msgid ""
+"\t\t# Wait for any \"hastd secondary\" processes to stop\n"
+"\t\tfor disk in ${resources}; do\n"
+"\t\t\twhile $( pgrep -lf \"hastd: ${disk} \\(secondary\\)\" > /dev/null 2>&1 ); do\n"
+"\t\t\t\tsleep 1\n"
+"\t\t\tdone\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2459
+#, no-wrap
+msgid ""
+"\t\t\t# Switch role for each disk\n"
+"\t\t\thastctl role primary ${disk}\n"
+"\t\t\tif [ $? -ne 0 ]; then\n"
+"\t\t\t\tlogger -p $log -t $name \"Unable to change role to primary for resource ${disk}.\"\n"
+"\t\t\t\texit 1\n"
+"\t\t\tfi\n"
+"\t\tdone\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2466
+#, no-wrap
+msgid ""
+"\t\t# Wait for the /dev/hast/* devices to appear\n"
+"\t\tfor disk in ${resources}; do\n"
+"\t\t\tfor I in $( jot 60 ); do\n"
+"\t\t\t\t[ -c \"/dev/hast/${disk}\" ] && break\n"
+"\t\t\t\tsleep 0.5\n"
+"\t\t\tdone\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2472
+#, no-wrap
+msgid ""
+"\t\t\tif [ ! -c \"/dev/hast/${disk}\" ]; then\n"
+"\t\t\t\tlogger -p $log -t $name \"GEOM provider /dev/hast/${disk} did not appear.\"\n"
+"\t\t\t\texit 1\n"
+"\t\t\tfi\n"
+"\t\tdone\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2474
+#, no-wrap
+msgid "\t\tlogger -p $log -t $name \"Role for HAST resources ${resources} switched to primary.\"\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2481
+#, no-wrap
+msgid ""
+"\t\tlogger -p $log -t $name \"Mounting disks.\"\n"
+"\t\tfor disk in ${resources}; do\n"
+"\t\t\tmkdir -p /hast/${disk}\n"
+"\t\t\tfsck -p -y -t ufs /dev/hast/${disk}\n"
+"\t\t\tmount /dev/hast/${disk} /hast/${disk}\n"
+"\t\tdone\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2483
+#, no-wrap
+msgid "\t;;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2486
+#, no-wrap
+msgid ""
+"\tsecondary)\n"
+"\t\tlogger -p $log -t $name \"Switching to secondary provider for ${resources}.\"\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2504
+#, no-wrap
+msgid ""
+"\t\t# Switch roles for the HAST resources\n"
+"\t\tfor disk in ${resources}; do\n"
+"\t\t\tif ! mount | grep -q \"^/dev/hast/${disk} on \"\n"
+"\t\t\tthen\n"
+"\t\t\telse\n"
+"\t\t\t\tumount -f /hast/${disk}\n"
+"\t\t\tfi\n"
+"\t\t\tsleep $delay\n"
+"\t\t\thastctl role secondary ${disk} 2>&1\n"
+"\t\t\tif [ $? -ne 0 ]; then\n"
+"\t\t\t\tlogger -p $log -t $name \"Unable to switch role to secondary for resource ${disk}.\"\n"
+"\t\t\t\texit 1\n"
+"\t\t\tfi\n"
+"\t\t\tlogger -p $log -t $name \"Role switched to secondary for resource ${disk}.\"\n"
+"\t\tdone\n"
+"\t;;\n"
+"esac\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2507
+msgid ""
+"In a nutshell, the script takes these actions when a node becomes primary:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2509
+msgid "Promotes the HAST pool to primary on the other node."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2510
+msgid "Checks the file system under the HAST pool."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2511
+msgid "Mounts the pool."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2513
+msgid "When a node becomes secondary:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2515
+msgid "Unmounts the HAST pool."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2516
+msgid "Degrades the HAST pool to secondary."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2521
+msgid ""
+"This is just an example script which serves as a proof of concept. It does "
+"not handle all the possible scenarios and can be extended or altered in any "
+"way, for example, to start or stop required services."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2527
+msgid ""
+"For this example, a standard UFS file system was used. To reduce the time "
+"needed for recovery, a journal-enabled UFS or ZFS file system can be used "
+"instead."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2530
+msgid ""
+"More detailed information with additional examples can be found at http://"
+"wiki.FreeBSD.org/HAST[http://wiki.FreeBSD.org/HAST]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/disks/_index.adoc:2531
+#, no-wrap
+msgid "Troubleshooting"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2536
+msgid ""
+"HAST should generally work without issues. However, as with any other "
+"software product, there may be times when it does not work as supposed. The "
+"sources of the problems may be different, but the rule of thumb is to ensure "
+"that the time is synchronized between the nodes of the cluster."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2540
+msgid ""
+"When troubleshooting HAST, the debugging level of man:hastd[8] should be "
+"increased by starting `hastd` with `-d`. This argument may be specified "
+"multiple times to further increase the debugging level. Consider also using "
+"`-F`, which starts `hastd` in the foreground."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/disks/_index.adoc:2542
+#, no-wrap
+msgid "Recovering from the Split-brain Condition"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2547
+msgid ""
+"_Split-brain_ occurs when the nodes of the cluster are unable to communicate "
+"with each other, and both are configured as primary. This is a dangerous "
+"condition because it allows both nodes to make incompatible changes to the "
+"data. This problem must be corrected manually by the system administrator."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/disks/_index.adoc:2551
+msgid ""
+"The administrator must either decide which node has more important changes, "
+"or perform the merge manually. Then, let HAST perform full synchronization "
+"of the node which has the broken data. To do this, issue these commands on "
+"the node which needs to be resynchronized:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/disks/_index.adoc:2557
+#, no-wrap
+msgid ""
+"# hastctl role init test\n"
+"# hastctl create test\n"
+"# hastctl role secondary test\n"
+msgstr ""
diff --git a/documentation/content/en/books/handbook/dtrace/_index.adoc b/documentation/content/en/books/handbook/dtrace/_index.adoc
index bb97869511..cf6e5e1c42 100644
--- a/documentation/content/en/books/handbook/dtrace/_index.adoc
+++ b/documentation/content/en/books/handbook/dtrace/_index.adoc
@@ -1,13 +1,13 @@
---
-title: Chapter 25. DTrace
+title: Chapter 27. DTrace
part: Part III. System Administration
prev: books/handbook/cutting-edge
next: books/handbook/usb-device-mode
description: This chapter explains how to use DTrace in FreeBSD
tags: ["DTrace", "features", "guide", "tutorial", "kldload"]
showBookMenu: true
-weight: 29
-path: "/books/handbook/"
+weight: 31
+path: "/books/handbook/dtrace/"
---
[[dtrace]]
@@ -18,7 +18,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 25
+:sectnumoffset: 27
:partnums:
:source-highlighter: rouge
:experimental:
diff --git a/documentation/content/en/books/handbook/dtrace/_index.po b/documentation/content/en/books/handbook/dtrace/_index.po
new file mode 100644
index 0000000000..587e19f5c6
--- /dev/null
+++ b/documentation/content/en/books/handbook/dtrace/_index.po
@@ -0,0 +1,477 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-07-15 16:41-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:1
+#, no-wrap
+msgid "This chapter explains how to use DTrace in FreeBSD"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:1
+#, no-wrap
+msgid "Part III. System Administration"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:1
+#, no-wrap
+msgid "Chapter 27. DTrace"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:14
+#, no-wrap
+msgid "DTrace"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:56
+msgid ""
+"DTrace, also known as Dynamic Tracing, was developed by Sun(TM) as a tool "
+"for locating performance bottlenecks in production and pre-production "
+"systems. In addition to diagnosing performance problems, DTrace can be used "
+"to help investigate and debug unexpected behavior in both the FreeBSD kernel "
+"and in userland programs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:60
+msgid ""
+"DTrace is a remarkable profiling tool, with an impressive array of features "
+"for diagnosing system issues. It may also be used to run pre-written "
+"scripts to take advantage of its capabilities. Users can author their own "
+"utilities using the DTrace D Language, allowing them to customize their "
+"profiling based on specific needs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:64
+msgid ""
+"The FreeBSD implementation provides full support for kernel DTrace and "
+"experimental support for userland DTrace. Userland DTrace allows users to "
+"perform function boundary tracing for userland programs using the `pid` "
+"provider, and to insert static probes into userland programs for later "
+"tracing. Some ports, such as package:databases/postgresql12-server[] and "
+"package:lang/php74[] have a DTrace option to enable static probes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:66
+msgid ""
+"The official guide to DTrace is maintained by the Illumos project at http://"
+"dtrace.org/guide[DTrace Guide]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:68
+msgid "After reading this chapter, you will know:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:70
+msgid "What DTrace is and what features it provides."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:71
+msgid ""
+"Differences between the Solaris(TM) DTrace implementation and the one "
+"provided by FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:72
+msgid "How to enable and use DTrace on FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:74
+msgid "Before reading this chapter, you should:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:76
+msgid ""
+"Understand UNIX(R) and FreeBSD basics (crossref:basics[basics,FreeBSD "
+"Basics])."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:77
+msgid ""
+"Have some familiarity with security and how it pertains to FreeBSD (crossref:"
+"security[security,Security])."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:79
+#, no-wrap
+msgid "Implementation Differences"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:84
+msgid ""
+"While the DTrace in FreeBSD is similar to that found in Solaris(TM), "
+"differences do exist. The primary difference is that in FreeBSD, DTrace is "
+"implemented as a set of kernel modules and DTrace can not be used until the "
+"modules are loaded. To load all of the necessary modules:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:88
+#, no-wrap
+msgid "# kldload dtraceall\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:91
+msgid ""
+"Beginning with FreeBSD 10.0-RELEASE, the modules are automatically loaded "
+"when `dtrace` is run."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:96
+msgid ""
+"FreeBSD uses the `DDB_CTF` kernel option to enable support for loading `CTF` "
+"data from kernel modules and the kernel itself. `CTF` is the Solaris(TM) "
+"Compact C Type Format which encapsulates a reduced form of debugging "
+"information similar to `DWARF` and the venerable stabs. `CTF` data is added "
+"to binaries by the `ctfconvert` and `ctfmerge` build tools. The "
+"`ctfconvert` utility parses `DWARF``ELF` debug sections created by the "
+"compiler and `ctfmerge` merges `CTF``ELF` sections from objects into either "
+"executables or shared libraries."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:103
+msgid ""
+"Some different providers exist for FreeBSD than for Solaris(TM). Most "
+"notable is the `dtmalloc` provider, which allows tracing `malloc()` by type "
+"in the FreeBSD kernel. Some of the providers found in Solaris(TM), such as "
+"`cpc` and `mib`, are not present in FreeBSD. These may appear in future "
+"versions of FreeBSD. Moreover, some of the providers available in both "
+"operating systems are not compatible, in the sense that their probes have "
+"different argument types. Thus, `D` scripts written on Solaris(TM) may or "
+"may not work unmodified on FreeBSD, and vice versa."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:107
+msgid ""
+"Due to security differences, only `root` may use DTrace on FreeBSD. "
+"Solaris(TM) has a few low level security checks which do not yet exist in "
+"FreeBSD. As such, the [.filename]#/dev/dtrace/dtrace# is strictly limited "
+"to `root`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:111
+msgid ""
+"DTrace falls under the Common Development and Distribution License (`CDDL`) "
+"license. To view this license on FreeBSD, see [.filename]#/usr/src/cddl/"
+"contrib/opensolaris/OPENSOLARIS.LICENSE# or view it online at http://"
+"opensource.org/licenses/CDDL-1.0[http://opensource.org/licenses/CDDL-1.0]. "
+"While a FreeBSD kernel with DTrace support is `BSD` licensed, the `CDDL` is "
+"used when the modules are distributed in binary form or the binaries are "
+"loaded."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:113
+#, no-wrap
+msgid "Enabling DTrace Support"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:117
+msgid ""
+"In FreeBSD 9.2 and 10.0, DTrace support is built into the [."
+"filename]#GENERIC# kernel. Users of earlier versions of FreeBSD or who "
+"prefer to statically compile in DTrace support should add the following "
+"lines to a custom kernel configuration file and recompile the kernel using "
+"the instructions in crossref:kernelconfig[kernelconfig,Configuring the "
+"FreeBSD Kernel]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:124
+#, no-wrap
+msgid ""
+"options KDTRACE_HOOKS\n"
+"options DDB_CTF\n"
+"makeoptions\tDEBUG=-g\n"
+"makeoptions\tWITH_CTF=1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:127
+msgid "Users of the AMD64 architecture should also add this line:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:131
+#, no-wrap
+msgid "options KDTRACE_FRAME\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:135
+msgid ""
+"This option provides support for `FBT`. While DTrace will work without this "
+"option, there will be limited support for function boundary tracing."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:139
+msgid ""
+"Once the FreeBSD system has rebooted into the new kernel, or the DTrace "
+"kernel modules have been loaded using `kldload dtraceall`, the system will "
+"need support for the Korn shell as the DTrace Toolkit has several utilities "
+"written in `ksh`. Make sure that the package:shells/ksh93[] package or port "
+"is installed. It is also possible to run these tools under package:shells/"
+"pdksh[] or package:shells/mksh[]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:144
+msgid ""
+"Finally, install the current DTrace Toolkit, a collection of ready-made "
+"scripts for collecting system information. There are scripts to check open "
+"files, memory, `CPU` usage, and a lot more. FreeBSD 10 installs a few of "
+"these scripts into [.filename]#/usr/share/dtrace#. On other FreeBSD "
+"versions, or to install the full DTrace Toolkit, use the package:sysutils/"
+"dtrace-toolkit[] package or port."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:149
+msgid ""
+"The scripts found in [.filename]#/usr/share/dtrace# have been specifically "
+"ported to FreeBSD. Not all of the scripts found in the DTrace Toolkit will "
+"work as-is on FreeBSD and some scripts may require some effort in order for "
+"them to work on FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:155
+msgid ""
+"The DTrace Toolkit includes many scripts in the special language of DTrace. "
+"This language is called the D language and it is very similar to C++. An in "
+"depth discussion of the language is beyond the scope of this document. It "
+"is covered extensively in the http://www.dtrace.org/guide[Illumos Dynamic "
+"Tracing Guide]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:157
+#, no-wrap
+msgid "Using DTrace"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:164
+msgid ""
+"DTrace scripts consist of a list of one or more _probes_, or instrumentation "
+"points, where each probe is associated with an action. Whenever the "
+"condition for a probe is met, the associated action is executed. For "
+"example, an action may occur when a file is opened, a process is started, or "
+"a line of code is executed. The action might be to log some information or "
+"to modify context variables. The reading and writing of context variables "
+"allows probes to share information and to cooperatively analyze the "
+"correlation of different events."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:166
+msgid ""
+"To view all probes, the administrator can execute the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:170
+#, no-wrap
+msgid "# dtrace -l | more\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:174
+msgid ""
+"Each probe has an `ID`, a `PROVIDER` (dtrace or fbt), a `MODULE`, and a "
+"`FUNCTION NAME`. Refer to man:dtrace[1] for more information about this "
+"command."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:176
+msgid ""
+"The examples in this section provide an overview of how to use two of the "
+"fully supported scripts from the DTrace Toolkit: the [.filename]#hotkernel# "
+"and [.filename]#procsystime# scripts."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:179
+msgid ""
+"The [.filename]#hotkernel# script is designed to identify which function is "
+"using the most kernel time. It will produce output similar to the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:185
+#, no-wrap
+msgid ""
+"# cd /usr/local/share/dtrace-toolkit\n"
+"# ./hotkernel\n"
+"Sampling... Hit Ctrl-C to end.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:189
+msgid ""
+"As instructed, use the kbd:[Ctrl+C] key combination to stop the process. "
+"Upon termination, the script will display a list of kernel functions and "
+"timing information, sorting the output in increasing order of time:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:218
+#, no-wrap
+msgid ""
+"kernel`_thread_lock_flags 2 0.0%\n"
+"0xc1097063 2 0.0%\n"
+"kernel`sched_userret 2 0.0%\n"
+"kernel`kern_select 2 0.0%\n"
+"kernel`generic_copyin 3 0.0%\n"
+"kernel`_mtx_assert 3 0.0%\n"
+"kernel`vm_fault 3 0.0%\n"
+"kernel`sopoll_generic 3 0.0%\n"
+"kernel`fixup_filename 4 0.0%\n"
+"kernel`_isitmyx 4 0.0%\n"
+"kernel`find_instance 4 0.0%\n"
+"kernel`_mtx_unlock_flags 5 0.0%\n"
+"kernel`syscall 5 0.0%\n"
+"kernel`DELAY 5 0.0%\n"
+"0xc108a253 6 0.0%\n"
+"kernel`witness_lock 7 0.0%\n"
+"kernel`read_aux_data_no_wait 7 0.0%\n"
+"kernel`Xint0x80_syscall 7 0.0%\n"
+"kernel`witness_checkorder 7 0.0%\n"
+"kernel`sse2_pagezero 8 0.0%\n"
+"kernel`strncmp 9 0.0%\n"
+"kernel`spinlock_exit 10 0.0%\n"
+"kernel`_mtx_lock_flags 11 0.0%\n"
+"kernel`witness_unlock 15 0.0%\n"
+"kernel`sched_idletd 137 0.3%\n"
+"0xc10981a5 42139 99.3%\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:222
+msgid ""
+"This script will also work with kernel modules. To use this feature, run "
+"the script with `-m`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:241
+#, no-wrap
+msgid ""
+"# ./hotkernel -m\n"
+"Sampling... Hit Ctrl-C to end.\n"
+"^C\n"
+"MODULE COUNT PCNT\n"
+"0xc107882e 1 0.0%\n"
+"0xc10e6aa4 1 0.0%\n"
+"0xc1076983 1 0.0%\n"
+"0xc109708a 1 0.0%\n"
+"0xc1075a5d 1 0.0%\n"
+"0xc1077325 1 0.0%\n"
+"0xc108a245 1 0.0%\n"
+"0xc107730d 1 0.0%\n"
+"0xc1097063 2 0.0%\n"
+"0xc108a253 73 0.0%\n"
+"kernel 874 0.4%\n"
+"0xc10981a5 213781 99.6%\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:247
+msgid ""
+"The [.filename]#procsystime# script captures and prints the system call time "
+"usage for a given process `ID` (`PID`) or process name. In the following "
+"example, a new instance of [.filename]#/bin/csh# was spawned. Then, [."
+"filename]#procsystime# was executed and remained waiting while a few "
+"commands were typed on the other incarnation of `csh`. These are the "
+"results of this test:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:253
+#, no-wrap
+msgid ""
+"# ./procsystime -n csh\n"
+"Tracing... Hit Ctrl-C to end...\n"
+"^C\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:255
+#, no-wrap
+msgid "Elapsed Times for processes csh,\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:275
+#, no-wrap
+msgid ""
+" SYSCALL TIME (ns)\n"
+" getpid 6131\n"
+" sigreturn 8121\n"
+" close 19127\n"
+" fcntl 19959\n"
+" dup 26955\n"
+" setpgid 28070\n"
+" stat 31899\n"
+" setitimer 40938\n"
+" wait4 62717\n"
+" sigaction 67372\n"
+" sigprocmask 119091\n"
+" gettimeofday 183710\n"
+" write 263242\n"
+" execve 492547\n"
+" ioctl 770073\n"
+" vfork 3258923\n"
+" sigsuspend 6985124\n"
+" read 3988049784\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/dtrace/_index.adoc:277
+msgid ""
+"As shown, the `read()` system call used the most time in nanoseconds while "
+"the `getpid()` system call used the least amount of time."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/eresources/_index.adoc b/documentation/content/en/books/handbook/eresources/_index.adoc
index a8a14644e1..e195dfe962 100644
--- a/documentation/content/en/books/handbook/eresources/_index.adoc
+++ b/documentation/content/en/books/handbook/eresources/_index.adoc
@@ -6,8 +6,8 @@ next: books/handbook/pgpkeys
description: FreeBSD additional resources on internet like websites, mailing lists, mirrors, etc
tags: ["eresources", "Websites", "Mailing Lists", "Usenet", "Newsgroups"]
showBookMenu: true
-weight: 41
-path: "/books/handbook/"
+weight: 43
+path: "/books/handbook/eresources/"
---
[appendix]
@@ -49,21 +49,23 @@ toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
-The rapid pace of FreeBSD progress makes print media impractical as a means of following the latest developments.
-Electronic resources are the best, if not often the only, way to stay informed of the latest advances.
-Since FreeBSD is a volunteer effort, the user community itself also generally serves as a "technical support department" of sorts, with electronic mail, web forums, and USENET news being the most effective way of reaching that community.
+Development of FreeBSD is too rapid for print media to be practical for keeping people informed.
+For awareness of developments: electronic alternatives to print are best.
-The most important points of contact with the FreeBSD user community are outlined below.
-There is a possibly more up to date list on the link:https://wiki.freebsd.org/Community[community portal on the FreeBSD Wiki].
-Please send other resources not mentioned here to the {freebsd-doc} so that they may also be included.
+The FreeBSD user community provides much technical support -- with forums, chat and email amongst the most popular and effective means of communication.
+
+The most important points of contact are outlined below.
+The link:https://wiki.freebsd.org/Community[Community wiki area] may be more up-to-date.
+
+Please make the {freebsd-doc} aware of any resource that is either redundant, or not yet listed below.
[[eresources-www]]
== Websites
* The link:https://forums.FreeBSD.org/[FreeBSD Forums] provide a web based discussion forum for FreeBSD questions and technical discussion.
* The link:https://wiki.FreeBSD.org/[FreeBSD Wiki] provides various bits of information that hadn't yet made it into the Handbook.
-* The link:https://docs.FreeBSD.org/[FreeBSD Documentation website] doesn't provide just the Users's Handbook; there are other handbooks and articles that are worth a read.
-* The link:https://freebsdfoundation.org/our-work/journal/browser-based-edition/[FreeBSD Journal] is a free, professionally-edited, bi-monthly technical magazine released by link:https://freebsdfoundation.org[FreeBSD Foundation].
+* The link:https://docs.FreeBSD.org/[Documentation Portal] offers much more than the FreeBSD Handbook alone; there are more than forty books and articles.
+* The link:https://freebsdfoundation.org/our-work/journal/browser-based-edition/[FreeBSD Journal] is a free, professionally-edited, bi-monthly technical magazine released by link:https://freebsdfoundation.org[The FreeBSD Foundation].
* The link:http://www.youtube.com/bsdconferences[BSDConferences YouTube Channel] provides a collection of high quality videos from BSD conferences around the world. This is a great way to watch key developers give presentations about new work in FreeBSD.
* link:https://www.freebsd.org/status/[FreeBSD Status Reports] are released every three months and track progress of FreeBSD development.
* There's a link:https://www.reddit.com/r/freebsd/[FreeBSD-focused Reddit group] at r/freebsd.
@@ -78,548 +80,50 @@ The mailing lists are the most direct way of addressing questions or opening a t
There are a wide variety of lists on a number of different FreeBSD topics.
Sending questions to the most appropriate mailing list will invariably assure a faster and more accurate response.
-The charters for the various lists are given at the bottom of this document.
-_Please read the charter before joining or sending mail to any list_.
-Most list subscribers receive many hundreds of FreeBSD related messages every day, and the charters and rules for use are meant to keep the signal-to-noise ratio of the lists high.
-To do less would see the mailing lists ultimately fail as an effective communications medium for the Project.
+Technical list threads should remain technical.
+
+All users and developers of FreeBSD should subscribe to the {freebsd-announce}.
[NOTE]
====
-_To test the ability to send email to FreeBSD lists, send a test message to {freebsd-test}._
+To test FreeBSD mailing list capabilities, aim for the {freebsd-test}.
Please do not send test messages to any other list.
====
When in doubt about what list to post a question to, see extref:{freebsd-questions-article}[How to get best results from the FreeBSD-questions mailing list].
-Before posting to any list, please learn about how to best use the mailing lists, such as how to help avoid frequently-repeated discussions, by reading the extref:{mailing-list-faq}[Mailing List Frequently Asked Questions] (FAQ) document.
-
-Archives are kept for all of the mailing lists and can be searched using the link:https://www.FreeBSD.org/search/[FreeBSD World Wide Web server].
-The keyword searchable archive offers an excellent way of finding answers to frequently asked questions and should be consulted before posting a question.
-Note that this also means that messages sent to FreeBSD mailing lists are archived in perpetuity.
-When protecting privacy is a concern, consider using a disposable secondary email address and posting only public information.
-
-[[eresources-summary]]
-=== List Summary
-
-_General lists:_ The following are general lists which anyone is free (and encouraged) to join:
-
-[.informaltable]
-[cols="20%,80%", frame="none", options="header"]
-|===
-| List
-| Purpose
-
-|link:{freebsd-accessibility-url}[freebsd-accessibility]
-|FreeBSD accessibility discussions
-
-|link:{freebsd-advocacy-url}[freebsd-advocacy]
-|FreeBSD Evangelism
-
-|link:{freebsd-announce-url}[freebsd-announce]
-|Important events and Project milestones (moderated)
-
-|link:{freebsd-arch-url}[freebsd-arch]
-|Architecture and design discussions
-
-|link:{freebsd-bugbusters-url}[freebsd-bugbusters]
-|Discussions pertaining to the maintenance of the FreeBSD problem report database and related tools
-
-|link:{freebsd-bugs-url}[freebsd-bugs]
-|Bug reports
-
-|link:{freebsd-chat-url}[freebsd-chat]
-|Non-technical items related to the FreeBSD community
-
-|link:{freebsd-chromium-url}[freebsd-chromium]
-|FreeBSD-specific Chromium issues
-
-|link:{freebsd-current-url}[freebsd-current]
-|Discussion concerning the use of FreeBSD-CURRENT
-
-|link:{freebsd-isp-url}[freebsd-isp]
-|Issues for Internet Service Providers using FreeBSD
-
-|link:{freebsd-jobs-url}[freebsd-jobs]
-|FreeBSD employment and consulting opportunities
-
-|link:{freebsd-quarterly-calls-url}[freebsd-quarterly-calls]
-|Calls for quarterly status reports (moderated)
-
-|link:{freebsd-questions-url}[freebsd-questions]
-|User questions and technical support
-
-|link:{freebsd-security-notifications-url}[freebsd-security-notifications]
-|Security notifications (moderated)
-
-|link:{freebsd-stable-url}[freebsd-stable]
-|Discussion concerning the use of FreeBSD-STABLE
-
-|link:{freebsd-test-url}[freebsd-test]
-|Where to send test messages instead of to one of the actual lists
-
-|link:{freebsd-women-url}[freebsd-women]
-|FreeBSD advocacy for women
-|===
-
-_Technical lists:_ The following lists are for technical discussion.
-Read the charter for each list carefully before joining or sending mail to one as there are firm guidelines for their use and content.
-
-[.informaltable]
-[cols="20%,80%", frame="none", options="header"]
-|===
-| List
-| Purpose
-
-|link:{freebsd-acpi-url}[freebsd-acpi]
-|ACPI and power management development
-
-|link:{freebsd-amd64-url}[freebsd-amd64]
-|Porting FreeBSD to AMD64 systems (moderated)
-
-|link:{freebsd-apache-url}[freebsd-apache]
-|Discussion about Apache related ports
-
-|link:{freebsd-arm-url}[freebsd-arm]
-|Porting FreeBSD to ARM(R) processors
-
-|link:{freebsd-atm-url}[freebsd-atm]
-|Using ATM networking with FreeBSD
-
-|link:{freebsd-bluetooth-url}[freebsd-bluetooth]
-|Using Bluetooth(R) technology in FreeBSD
-
-|link:{freebsd-cloud-url}[freebsd-cloud]
-|FreeBSD on cloud platforms (EC2, GCE, Azure, etc.)
-
-|link:{freebsd-cluster-url}[freebsd-cluster]
-|Using FreeBSD in a clustered environment
-
-|link:{freebsd-database-url}[freebsd-database]
-|Discussing database use and development under FreeBSD
-
-|link:{freebsd-desktop-url}[freebsd-desktop]
-|Using and improving FreeBSD on the desktop
-
-|link:{dev-ci-url}[dev-ci]
-|Build and test reports from the Continuous Integration servers
-
-|link:{dev-reviews-url}[dev-reviews]
-|Notifications of the FreeBSD review system
-
-|link:{freebsd-doc-url}[freebsd-doc]
-|Creating FreeBSD related documents
-
-|link:{freebsd-drivers-url}[freebsd-drivers]
-|Writing device drivers for FreeBSD
-
-|link:{freebsd-dtrace-url}[freebsd-dtrace]
-|Using and working on DTrace in FreeBSD
-
-|link:{freebsd-eclipse-url}[freebsd-eclipse]
-|FreeBSD users of Eclipse IDE, tools, rich client applications and ports.
-
-|link:{freebsd-elastic-url}[freebsd-elastic]
-|FreeBSD-specific ElasticSearch discussions
-
-|link:{freebsd-embedded-url}[freebsd-embedded]
-|Using FreeBSD in embedded applications
-
-|link:{freebsd-emulation-url}[freebsd-emulation]
-|Emulation of other systems such as Linux/MS-DOS(R)/Windows(R)
-
-|link:{freebsd-enlightenment-url}[freebsd-enlightenment]
-|Porting Enlightenment and Enlightenment applications
-
-|link:{freebsd-erlang-url}[freebsd-erlang]
-|FreeBSD-specific Erlang discussions
-
-|link:{freebsd-firewire-url}[freebsd-firewire]
-|FreeBSD FireWire(R) (iLink, IEEE 1394) technical discussion
-
-|link:{freebsd-fortran-url}[freebsd-fortran]
-|Fortran on FreeBSD
-
-|link:{freebsd-fs-url}[freebsd-fs]
-|File systems
-
-|link:{freebsd-games-url}[freebsd-games]
-|Support for Games on FreeBSD
-
-|link:{freebsd-gecko-url}[freebsd-gecko]
-|Gecko Rendering Engine issues
-
-|link:{freebsd-geom-url}[freebsd-geom]
-|GEOM-specific discussions and implementations
-
-|link:{freebsd-git-url}[freebsd-git]
-|Discussion of git use in the FreeBSD project
-
-|link:{freebsd-gnome-url}[freebsd-gnome]
-|Porting GNOME and GNOME applications
-
-|link:{freebsd-hackers-url}[freebsd-hackers]
-|General technical discussion
-
-|link:{freebsd-haskell-url}[freebsd-haskell]
-|FreeBSD-specific Haskell issues and discussions
-
-|link:{freebsd-hardware-url}[freebsd-hardware]
-|General discussion of hardware for running FreeBSD
-
-|link:{freebsd-i18n-url}[freebsd-i18n]
-|FreeBSD Internationalization
-
-|link:{freebsd-infiniband-url}[freebsd-infiniband]
-|Infiniband on FreeBSD
-
-|link:{freebsd-ipfw-url}[freebsd-ipfw]
-|Technical discussion concerning the redesign of the IP firewall code
-
-|link:{freebsd-isdn-url}[freebsd-isdn]
-|ISDN developers
-
-|link:{freebsd-jail-url}[freebsd-jail]
-|Discussion about the man:jail[8] facility
-
-|link:{freebsd-java-url}[freebsd-java]
-|Java(TM) developers and people porting JDK(TM)s to FreeBSD
-
-|link:{freebsd-kde-url}[freebsd-kde]
-|Porting KDE and KDE applications
-
-|link:{freebsd-mips-url}[freebsd-mips]
-|Porting FreeBSD to MIPS(R)
-
-|link:{freebsd-mono-url}[freebsd-mono]
-|Mono and C# applications on FreeBSD
-
-|link:{freebsd-multimedia-url}[freebsd-multimedia]
-|Multimedia applications
-
-|link:{freebsd-new-bus-url}[freebsd-new-bus]
-|Technical discussions about bus architecture
-
-|link:{freebsd-net-url}[freebsd-net]
-|Networking discussion and TCP/IP source code
-
-|link:{freebsd-numerics-url}[freebsd-numerics]
-|Discussions of high quality implementation of libm functions
-
-|link:{freebsd-ocaml-url}[freebsd-ocaml]
-|FreeBSD-specific OCaml discussions
-
-|link:{freebsd-office-url}[freebsd-office]
-|Office applications on FreeBSD
-
-|link:{freebsd-performance-url}[freebsd-performance]
-|Performance tuning questions for high performance/load installations
-
-|link:{freebsd-perl-url}[freebsd-perl]
-|Maintenance of a number of Perl-related ports
-
-|link:{freebsd-pf-url}[freebsd-pf]
-|Discussion and questions about the packet filter firewall system
-
-|link:{freebsd-pkg-url}[freebsd-pkg]
-|Binary package management and package tools discussion
-
-|link:{freebsd-pkg-fallout-url}[freebsd-pkg-fallout]
-|Fallout logs from package building
-
-|link:{freebsd-pkgbase-url}[freebsd-pkgbase]
-|Packaging the FreeBSD base system
-
-|link:{freebsd-platforms-url}[freebsd-platforms]
-|Concerning ports to non Intel(R) architecture platforms
-
-|link:{freebsd-ports-url}[freebsd-ports]
-|Discussion of the Ports Collection
-
-|link:{freebsd-ports-announce-url}[freebsd-ports-announce]
-|Important news and instructions about the Ports Collection (moderated)
-
-|link:{freebsd-ports-bugs-url}[freebsd-ports-bugs]
-|Discussion of the ports bugs/PRs
-
-|link:{freebsd-ppc-url}[freebsd-ppc]
-|Porting FreeBSD to the PowerPC(R)
-
-|link:{freebsd-proliant-url}[freebsd-proliant]
-|Technical discussion of FreeBSD on HP ProLiant server platforms
-
-|link:{freebsd-python-url}[freebsd-python]
-|FreeBSD-specific Python issues
-
-|link:{freebsd-rc-url}[freebsd-rc]
-|Discussion related to the [.filename]#rc.d# system and its development
-
-|link:{freebsd-realtime-url}[freebsd-realtime]
-|Development of realtime extensions to FreeBSD
-
-|link:{freebsd-risc-url}[freebsd-risc]
-|Porting FreeBSD to RISC-V(R) systems
-
-|link:{freebsd-ruby-url}[freebsd-ruby]
-|FreeBSD-specific Ruby discussions
-
-|link:{freebsd-scsi-url}[freebsd-scsi]
-|The SCSI subsystem
-
-|link:{freebsd-security-url}[freebsd-security]
-|Security issues affecting FreeBSD
-
-|link:{freebsd-snapshots-url}[freebsd-snapshots]
-|FreeBSD Development Snapshot Announcements
-
-|link:{freebsd-sparc64-url}[freebsd-sparc64]
-|Porting FreeBSD to SPARC(R) based systems
-
-|link:{freebsd-standards-url}[freebsd-standards]
-|FreeBSD's conformance to the C99 and the POSIX(R) standards
-
-|link:{freebsd-sysinstall-url}[freebsd-sysinstall]
-|man:sysinstall[8] development
-
-|link:{freebsd-tcltk-url}[freebsd-tcltk]
-|FreeBSD-specific Tcl/Tk discussions
-
-|link:{freebsd-testing-url}[freebsd-testing]
-|Testing on FreeBSD
-
-|link:{freebsd-tex-url}[freebsd-tex]
-|Porting TeX and its applications to FreeBSD
-
-|link:{freebsd-threads-url}[freebsd-threads]
-|Threading in FreeBSD
-
-|link:{freebsd-tokenring-url}[freebsd-tokenring]
-|Support Token Ring in FreeBSD
-
-|link:{freebsd-toolchain-url}[freebsd-toolchain]
-|Maintenance of FreeBSD's integrated toolchain
-
-|link:{freebsd-translators-url}[freebsd-translators]
-|Translating FreeBSD documents and programs
-
-|link:{freebsd-transport-url}[freebsd-transport]
-|Discussions of transport level network protocols in FreeBSD
-
-|link:{freebsd-usb-url}[freebsd-usb]
-|Discussing FreeBSD support for USB
-
-|link:{freebsd-virtualization-url}[freebsd-virtualization]
-|Discussion of various virtualization techniques supported by FreeBSD
-
-|link:{freebsd-vuxml-url}[freebsd-vuxml]
-|Discussion on VuXML infrastructure
-
-|link:{freebsd-x11-url}[freebsd-x11]
-|Maintenance and support of X11 on FreeBSD
-
-|link:{freebsd-xen-url}[freebsd-xen]
-|Discussion of the FreeBSD port to Xen(TM) - implementation and usage
-
-|link:{freebsd-xfce-url}[freebsd-xfce]
-|XFCE for FreeBSD - porting and maintaining
-
-|link:{freebsd-zope-url}[freebsd-zope]
-|Zope for FreeBSD - porting and maintaining
-|===
-
-_Limited lists:_ The following lists are for more specialized (and demanding) audiences and are probably not of interest to the general public.
-It is also a good idea to establish a presence in the technical lists before joining one of these limited lists in order to understand the communications etiquette involved.
-
-[.informaltable]
-[cols="20%,80%", frame="none", options="header"]
-|===
-| List
-| Purpose
-
-|link:{freebsd-hubs-url}[freebsd-hubs]
-|People running mirror sites (infrastructural support)
-
-|link:{freebsd-user-groups-url}[freebsd-user-groups]
-|User group coordination
-
-|link:{freebsd-wip-status-url}[freebsd-wip-status]
-|FreeBSD Work-In-Progress Status
-
-|link:{freebsd-wireless-url}[freebsd-wireless]
-|Discussions of 802.11 stack, tools, device driver development
-|===
-
-_Digest lists:_ All of the above lists are available in a digest format.
-Once subscribed to a list, the digest options can be changed in the account options section.
+Before posting to any list, please:
-_Commit message lists:_ The following lists are for people interested in seeing the log messages for changes to various areas of the source tree.
+* learn about how to best use the mailing lists, such as how to help avoid frequently-repeated discussions, by reading the extref:{mailing-list-faq}[Mailing List Frequently Asked Questions] (FAQ) document
+* search the archives, to tell whether someone else has already posted what you intend to post.
-[.informaltable]
-[cols="1,1,1", frame="none", options="header"]
-|===
-| List
-| Source area
-| Area Description (source for)
+Archive search interfaces include:
+
+- https://lists.freebsd.org/search[] (FreeBSD, experimental)
+- https://www.freebsd.org/search/[] (DuckDuckGo)
+Note that this also means that messages sent to FreeBSD mailing lists are archived in perpetuity.
+When protecting privacy is a concern, consider using a disposable secondary email address and posting only public information.
-|{dev-commits-doc-all-url}[dev-commits-doc-all]
-|[.filename]#/usr/doc#
-|All changes to the doc repository
-
-|{dev-commits-ports-all-url}[dev-commits-ports-all]
-|[.filename]#/usr/ports#
-|All changes to the ports repository
-
-|{dev-commits-ports-main-url}[dev-commits-ports-main]
-|[.filename]#/usr/ports#
-|All changes to the "main" branch of the ports repository
-
-|{dev-commits-ports-branches-url}[dev-commits-ports-branches]
-|[.filename]#/usr/ports#
-|All changes to the quarterly branches of the ports repository
-
-|{dev-commits-src-all-url}[dev-commits-src-all]
-|[.filename]#/usr/src#
-|All changes to the src repository
-
-|{dev-commits-src-main-url}[dev-commits-src-main]
-|[.filename]#/usr/src#
-|All changes to the "main" branch of the src repository (the FreeBSD-CURRENT branch)
-
-|{dev-commits-src-branches-url}[dev-commits-src-branches]
-|[.filename]#/usr/src#
-|All changes to all stable branches of the src repository
-|===
-
-_SVN lists:_ The following lists are for people interested in seeing the SVN log messages for changes to various areas of the source tree.
-
-[NOTE]
-====
-Only SVN log messages are sent to SVN lists.
-After the SVN to Git Migration, the following lists no longer receive new commit messages and are unavailable for subscribing.
-The lists' addresses are pointing to their respective archives.
-====
-
-[.informaltable]
-[cols="20%,20%,60%", frame="none", options="header"]
-|===
-| List
-| Source area
-| Area Description (source for)
-
-|link:{svn-doc-all-url}[svn-doc-all]
-|[.filename]#/usr/doc#
-|All changes to the doc Subversion repository (except for [.filename]#user#, [.filename]#projects# and [.filename]#translations#)
-
-|link:{svn-doc-head-url}[svn-doc-head]
-|[.filename]#/usr/doc#
-|All changes to the "head" branch of the doc Subversion repository
-
-|link:{svn-doc-projects-url}[svn-doc-projects]
-|[.filename]#/usr/doc/projects#
-|All changes to the [.filename]#projects# area of the doc Subversion repository
-
-|link:{svn-doc-svnadmin-url}[svn-doc-svnadmin]
-|[.filename]#/usr/doc#
-|All changes to the administrative scripts, hooks, and other configuration data of the doc Subversion repository
-
-|link:{svn-ports-all-url}[svn-ports-all]
-|[.filename]#/usr/ports#
-|All changes to the ports Subversion repository
-
-|link:{svn-ports-head-url}[svn-ports-head]
-|[.filename]#/usr/ports#
-|All changes to the "head" branch of the ports Subversion repository
-
-|link:{svn-ports-svnadmin-url}[svn-ports-svnadmin]
-|[.filename]#/usr/ports#
-|All changes to the administrative scripts, hooks, and other configuration data of the ports Subversion repository
-
-|link:{svn-src-all-url}[svn-src-all]
-|[.filename]#/usr/src#
-|All changes to the src Subversion repository (except for [.filename]#user# and [.filename]#projects#)
-
-|link:{svn-src-head-url}[svn-src-head]
-|[.filename]#/usr/src#
-|All changes to the "head" branch of the src Subversion repository (the FreeBSD-CURRENT branch)
-
-|link:{svn-src-projects-url}[svn-src-projects]
-|[.filename]#/usr/projects#
-|All changes to the [.filename]#projects# area of the src Subversion repository
-
-|link:{svn-src-release-url}[svn-src-release]
-|[.filename]#/usr/src#
-|All changes to the [.filename]#releases# area of the src Subversion repository
-
-|link:{svn-src-releng-url}[svn-src-releng]
-|[.filename]#/usr/src#
-|All changes to the [.filename]#releng# branches of the src Subversion repository (the security / release engineering branches)
-
-|link:{svn-src-stable-url}[svn-src-stable]
-|[.filename]#/usr/src#
-|All changes to the all stable branches of the src Subversion repository
-
-|link:{svn-src-stable-6-url}[svn-src-stable-6]
-|[.filename]#/usr/src#
-|All changes to the [.filename]#stable/6# branch of the src Subversion repository
-
-|link:{svn-src-stable-7-url}[svn-src-stable-7]
-|[.filename]#/usr/src#
-|All changes to the [.filename]#stable/7# branch of the src Subversion repository
-
-|link:{svn-src-stable-8-url}[svn-src-stable-8]
-|[.filename]#/usr/src#
-|All changes to the [.filename]#stable/8# branch of the src Subversion repository
-
-|link:{svn-src-stable-9-url}[svn-src-stable-9]
-|[.filename]#/usr/src#
-|All changes to the [.filename]#stable/9# branch of the src Subversion repository
-
-|link:{svn-src-stable-10-url}[svn-src-stable-10]
-|[.filename]#/usr/src#
-|All changes to the [.filename]#stable/10# branch of the src Subversion repository
-
-|link:{svn-src-stable-11-url}[svn-src-stable-11]
-|[.filename]#/usr/src#
-|All changes to the [.filename]#stable/11# branch of the src Subversion repository
-
-|link:{svn-src-stable-12-url}[svn-src-stable-12]
-|[.filename]#/usr/src#
-|All changes to the [.filename]#stable/12# branch of the src Subversion repository
-
-|link:{svn-src-stable-other-url}[svn-src-stable-other]
-|[.filename]#/usr/src#
-|All changes to the older [.filename]#stable# branches of the src Subversion repository
-
-|link:{svn-src-svnadmin-url}[svn-src-svnadmin]
-|[.filename]#/usr/src#
-|All changes to the administrative scripts, hooks, and other configuration data of the src Subversion repository
-
-|link:{svn-src-user-url}[svn-src-user]
-|[.filename]#/usr/src#
-|All changes to the experimental [.filename]#user# area of the src Subversion repository
+FreeBSD-provided archives:
+
+* do not present links as links
+* do not present inline images
+* do not present HTML content of HTML messages.
-|link:{svn-src-vendor-url}[svn-src-vendor]
-|[.filename]#/usr/src#
-|All changes to the vendor work area of the src Subversion repository
-|===
+[[eresources-summary]]
+The FreeBSD public mailing lists can be consulted link:{mailing-lists-url}[here].
[[eresources-subscribe]]
-=== How to Subscribe
-
-To subscribe to a list, click the list name at {mailing-lists-url}.
-The page that is displayed should contain all of the necessary subscription instructions for that list.
+=== How to Subscribe or Unsubscribe
-To actually post to a given list, send mail to mailto:listname@FreeBSD.org[listname@FreeBSD.org].
-It will then be redistributed to mailing list members world-wide.
+At {mailing-lists-url}, click the name of a list to reveal its options.
-To unsubscribe from a list, click on the URL found at the bottom of every email received from the list.
-It is also possible to send an email to mailto:listname+unsubscribe@FreeBSD.org[listname+unsubscribe@FreeBSD.org] to unsubscribe.
-
-It is important to keep discussion in the technical mailing lists on a technical track.
-To only receive important announcements, instead join the {freebsd-announce}, which is intended for infrequent traffic.
+To post, after subscribing, send mail to `listname@FreeBSD.org`.
+The message will be redistributed to list members.
[[eresources-charters]]
-=== List Charters
+=== Lists Basic Rules
_All_ FreeBSD mailing lists have certain basic rules which must be adhered to by anyone using them.
Failure to comply with these guidelines will result in two (2) written warnings from the FreeBSD Postmaster mailto:postmaster@FreeBSD.org[postmaster@FreeBSD.org], after which, on a third offense, the poster will removed from all FreeBSD mailing lists and filtered from further posting to them.
@@ -627,501 +131,11 @@ We regret that such rules and measures are necessary at all, but today's Interne
Rules of the road:
-* The topic of any posting should adhere to the basic charter of the list it is posted to. If the list is about technical issues, the posting should contain technical discussion. Ongoing irrelevant chatter or flaming only detracts from the value of the mailing list for everyone on it and will not be tolerated. For free-form discussion on no particular topic, the {freebsd-chat} is freely available and should be used instead.
+* The topic of any posting should adhere to the basic description of the list it is posted to. If the list is about technical issues, the posting should contain technical discussion. Ongoing irrelevant chatter or flaming only detracts from the value of the mailing list for everyone on it and will not be tolerated. For free-form discussion on no particular topic, the {freebsd-chat} is freely available and should be used instead.
* No posting should be made to more than 2 mailing lists, and only to 2 when a clear and obvious need to post to both lists exists. For most lists, there is already a great deal of subscriber overlap and except for the most esoteric mixes (say "-stable & -scsi"), there really is no reason to post to more than one list at a time. If a message is received with multiple mailing lists on the `Cc` line, trim the `Cc` line before replying. _The person who replies is still responsible for cross-posting, no matter who the originator might have been._
-* Personal attacks and profanity (in the context of an argument) are not allowed, and that includes users and developers alike. Gross breaches of netiquette, like excerpting or reposting private mail when permission to do so was not and would not be forthcoming, are frowned upon but not specifically enforced. _However_, there are also very few cases where such content would fit within the charter of a list and it would therefore probably rate a warning (or ban) on that basis alone.
+* Personal attacks and profanity (in the context of an argument) are not allowed, and that includes users and developers alike. Gross breaches of netiquette, like excerpting or reposting private mail when permission to do so was not and would not be forthcoming, are frowned upon but not specifically enforced.
* Advertising of non-FreeBSD related products or services is strictly prohibited and will result in an immediate ban if it is clear that the offender is advertising by spam.
-_Individual list charters:_
-
-link:{freebsd-acpi-url}[freebsd-acpi]::
-_ACPI and power management development_
-
-link:{freebsd-announce-url}[freebsd-announce]::
-_Important events / milestones_
-+
-This is the mailing list for people interested only in occasional announcements of significant FreeBSD events.
-This includes announcements about snapshots and other releases.
-It contains announcements of new FreeBSD capabilities.
-It may contain calls for volunteers etc.
-This is a low volume, strictly moderated mailing list.
-
-link:{freebsd-arch-url}[freebsd-arch]::
-_Architecture and design discussions_
-+
-This list is for discussion of the FreeBSD architecture.
-Messages will mostly be kept strictly technical in nature.
-Examples of suitable topics are:
-
-** How to re-vamp the build system to have several customized builds running at the same time.
-** What needs to be fixed with VFS to make Heidemann layers work.
-** How do we change the device driver interface to be able to use the same drivers cleanly on many buses and architectures.
-** How to write a network driver.
-
-link:{freebsd-bluetooth-url}[freebsd-bluetooth]::
-_Bluetooth(R) in FreeBSD_
-+
-This is the forum where FreeBSD's Bluetooth(R) users congregate.
-Design issues, implementation details, patches, bug reports, status reports, feature requests, and all matters related to Bluetooth(R) are fair game.
-
-link:{freebsd-bugbusters-url}[freebsd-bugbusters]::
-_Coordination of the Problem Report handling effort_
-+
-The purpose of this list is to serve as a coordination and discussion forum for the Bugmeister, his Bugbusters, and any other parties who have a genuine interest in the PR database.
-This list is not for discussions about specific bugs, patches or PRs.
-
-link:{freebsd-bugs-url}[freebsd-bugs]::
-_Bug reports_
-+
-This is the mailing list for reporting bugs in FreeBSD.
-Whenever possible, bugs should be submitted using the link:https://bugs.freebsd.org/bugzilla/enter_bug.cgi[web interface].
-
-link:{freebsd-chat-url}[freebsd-chat]::
-_Non technical items related to the FreeBSD community_
-+
-This list contains the overflow from the other lists about non-technical, social information.
-It includes discussion about whether Jordan looks like a toon ferret or not, whether or not to type in capitals, who is drinking too much coffee, where the best beer is brewed, who is brewing beer in their basement, and so on.
-Occasional announcements of important events (such as upcoming parties, weddings, births, new jobs, etc) can be made to the technical lists, but the follow ups should be directed to this -chat list.
-
-link:{freebsd-chromium-url}[freebsd-chromium]::
-_FreeBSD-specific Chromium issues_
-+
-This is a list for the discussion of Chromium support for FreeBSD. This is a technical list to discuss development and installation of Chromium.
-
-link:{freebsd-cloud-url}[freebsd-cloud]::
-_Running FreeBSD on various cloud platforms_
-+
-This list discusses running FreeBSD on Amazon EC2, Google Compute Engine, Microsoft Azure, and other cloud computing platforms.
-
-_FreeBSD core team_::
-This is an internal mailing list for use by the core members.
-Messages can be sent to it when a serious FreeBSD-related matter requires arbitration or high-level scrutiny.
-
-link:{freebsd-current-url}[freebsd-current]::
-_Discussions about the use of FreeBSD-CURRENT_
-+
-This is the mailing list for users of FreeBSD-CURRENT.
-It includes warnings about new features coming out in -CURRENT that will affect the users, and instructions on steps that must be taken to remain -CURRENT.
-Anyone running "CURRENT" must subscribe to this list.
-This is a technical mailing list for which strictly technical content is expected.
-
-link:{freebsd-desktop-url}[freebsd-desktop]::
-_Using and improving FreeBSD on the desktop_
-+
-This is a forum for discussion of FreeBSD on the desktop.
-It is primarily a place for desktop porters and users to discuss issues and improve FreeBSD's desktop support.
-
-link:{dev-ci-url}[dev-ci]::
-_Continuous Integration reports of build and test results_
-+
-All Continuous Integration reports of build and test results
-
-link:{dev-reviews-url}[dev-reviews]::
-_Notifications of work in progress in FreeBSD's review tool_
-+
-Automated notifications of work in progress for review in FreeBSD's review tools, including patches.
-
-link:{freebsd-doc-url}[freebsd-doc]::
-_Documentation Project_
-+
-This mailing list is for the discussion of issues and projects related to the creation of documentation for FreeBSD.
-The members of this mailing list are collectively referred to as "The FreeBSD Documentation Project".
-It is an open list; feel free to join and contribute!
-
-link:{freebsd-drivers-url}[freebsd-drivers]::
-_Writing device drivers for FreeBSD_
-+
-This is a forum for technical discussions related to device drivers on FreeBSD.
-It is primarily a place for device driver writers to ask questions about how to write device drivers using the APIs in the FreeBSD kernel.
-
-link:{freebsd-dtrace-url}[freebsd-dtrace]::
-_Using and working on DTrace in FreeBSD_
-+
-DTrace is an integrated component of FreeBSD that provides a framework for understanding the kernel as well as user space programs at run time.
-The mailing list is an archived discussion for developers of the code as well as those using it.
-
-link:{freebsd-eclipse-url}[freebsd-eclipse]::
-_FreeBSD users of Eclipse IDE, tools, rich client applications and ports._
-+
-The intention of this list is to provide mutual support for everything to do with choosing, installing, using, developing and maintaining the Eclipse IDE, tools, rich client applications on the FreeBSD platform and assisting with the porting of Eclipse IDE and plugins to the FreeBSD environment.
-+
-The intention is also to facilitate exchange of information between the Eclipse community and the FreeBSD community to the mutual benefit of both.
-+
-Although this list is focused primarily on the needs of Eclipse users it will also provide a forum for those who would like to develop FreeBSD specific applications using the Eclipse framework.
-
-link:{freebsd-embedded-url}[freebsd-embedded]::
-_Using FreeBSD in embedded applications_
-+
-This list discusses topics related to using FreeBSD in embedded systems.
-This is a technical mailing list for which strictly technical content is expected.
-For the purpose of this list, embedded systems are those computing devices which are not desktops and which usually serve a single purpose as opposed to being general computing environments.
-Examples include, but are not limited to, all kinds of phone handsets, network equipment such as routers, switches and PBXs, remote measuring equipment, PDAs, Point Of Sale systems, and so on.
-
-link:{freebsd-emulation-url}[freebsd-emulation]::
-_Emulation of other systems such as Linux/MS-DOS(R)/Windows(R)_
-+
-This is a forum for technical discussions related to running programs written for other operating systems on FreeBSD.
-
-link:{freebsd-enlightenment-url}[freebsd-enlightenment]::
-_Enlightenment_
-+
-Discussions concerning the Enlightenment Desktop Environment for FreeBSD systems.
-This is a technical mailing list for which strictly technical content is expected.
-
-link:{freebsd-firewire-url}[freebsd-firewire]::
-_FireWire(R) (iLink, IEEE 1394)_
-+
-This is a mailing list for discussion of the design and implementation of a FireWire(R) (aka IEEE 1394 aka iLink) subsystem for FreeBSD.
-Relevant topics specifically include the standards, bus devices and their protocols, adapter boards/cards/chips sets, and the architecture and implementation of code for their proper support.
-
-link:{freebsd-fortran-url}[freebsd-fortran]::
-_Fortran on FreeBSD_
-+
-This is the mailing list for discussion of Fortran related ports on FreeBSD: compilers, libraries, scientific and engineering applications from laptops to HPC clusters.
-
-link:{freebsd-fs-url}[freebsd-fs]::
-_File systems_
-+
-Discussions concerning FreeBSD filesystems.
-This is a technical mailing list for which strictly technical content is expected.
-
-link:{freebsd-games-url}[freebsd-games]::
-_Games on FreeBSD_
-+
-This is a technical list for discussions related to bringing games to FreeBSD.
-It is for individuals actively working on porting games to FreeBSD, to bring up problems or discuss alternative solutions.
-Individuals interested in following the technical discussion are also welcome.
-
-link:{freebsd-gecko-url}[freebsd-gecko]::
-_Gecko Rendering Engine_
-+
-This is a forum about Gecko applications using FreeBSD.
-+
-Discussion centers around Gecko Ports applications, their installation, their development and their support within FreeBSD.
-
-link:{freebsd-geom-url}[freebsd-geom]::
-_GEOM_
-+
-Discussions specific to GEOM and related implementations.
-This is a technical mailing list for which strictly technical content is expected.
-
-link:{freebsd-git-url}[freebsd-git]::
-_Use of git in the FreeBSD project_
-+
-Discussions of how to use git in FreeBSD infrastructure including the github mirror and other uses of git for project collaboration.
-Discussion area for people using git against the FreeBSD github mirror.
-People wanting to get started with the mirror or git in general on FreeBSD can ask here.
-
-link:{freebsd-gnome-url}[freebsd-gnome]::
-_GNOME_
-+
-Discussions concerning The GNOME Desktop Environment for FreeBSD systems.
-This is a technical mailing list for which strictly technical content is expected.
-
-link:{freebsd-infiniband-url}[freebsd-infiniband]::
-_Infiniband on FreeBSD_
-+
-Technical mailing list discussing Infiniband, OFED, and OpenSM on FreeBSD.
-
-link:{freebsd-ipfw-url}[freebsd-ipfw]::
-_IP Firewall_
-+
-This is the forum for technical discussions concerning the redesign of the IP firewall code in FreeBSD.
-This is a technical mailing list for which strictly technical content is expected.
-
-link:{freebsd-isdn-url}[freebsd-isdn]::
-_ISDN Communications_
-+
-This is the mailing list for people discussing the development of ISDN support for FreeBSD.
-
-link:{freebsd-java-url}[freebsd-java]::
-_Java(TM) Development_
-+
-This is the mailing list for people discussing the development of significant Java(TM) applications for FreeBSD and the porting and maintenance of JDK(TM)s.
-
-[[eresources-charters-jobs]]
-link:{freebsd-jobs-url}[freebsd-jobs]::
-_Jobs offered and sought_
-+
-This is a forum for posting employment notices specifically related to FreeBSD and resumes from those seeking FreeBSD-related employment.
-This is _not_ a mailing list for general employment issues since adequate forums for that already exist elsewhere.
-+
-Note that this list, like other `FreeBSD.org` mailing lists, is distributed worldwide.
-Be clear about the geographic location and the extent to which telecommuting or assistance with relocation is available.
-+
-Email should use open formats only - preferably plain text, but basic Portable Document Format (PDF), HTML, and a few others are acceptable to many readers.
-Closed formats such as Microsoft(R) Word ([.filename]#.doc#) will be rejected by the mailing list server.
-
-link:{freebsd-kde-url}[freebsd-kde]::
-_KDE_
-+
-Discussions concerning KDE on FreeBSD systems.
-This is a technical mailing list for which strictly technical content is expected.
-
-link:{freebsd-hackers-url}[freebsd-hackers]::
-_Technical discussions_
-+
-This is a forum for technical discussions related to FreeBSD.
-This is the primary technical mailing list.
-It is for individuals actively working on FreeBSD, to bring up problems or discuss alternative solutions.
-Individuals interested in following the technical discussion are also welcome.
-This is a technical mailing list for which strictly technical content is expected.
-
-link:{freebsd-hardware-url}[freebsd-hardware]::
-_General discussion of FreeBSD hardware_
-+
-General discussion about the types of hardware that FreeBSD runs on, various problems and suggestions concerning what to buy or avoid.
-
-link:{freebsd-hubs-url}[freebsd-hubs]::
-_Mirror sites_
-+
-Announcements and discussion for people who run FreeBSD mirror sites.
-
-link:{freebsd-isp-url}[freebsd-isp]::
-_Issues for Internet Service Providers_
-+
-This mailing list is for discussing topics relevant to Internet Service Providers (ISPs) using FreeBSD.
-This is a technical mailing list for which strictly technical content is expected.
-
-link:{freebsd-mono-url}[freebsd-mono]::
-_Mono and C# applications on FreeBSD_
-+
-This is a list for discussions related to the Mono development framework on FreeBSD. This is a technical mailing list. It is for individuals actively working on porting Mono or C# applications to FreeBSD, to bring up problems or discuss alternative solutions. Individuals interested in following the technical discussion are also welcome.
-
-link:{freebsd-ocaml-url}[freebsd-ocaml]::
-_FreeBSD-specific OCaml discussions_
-+
-This is a list for discussions related to the OCaml support on FreeBSD.
-This is a technical mailing list.
-It is for individuals working on OCaml ports, 3rd party libraries and frameworks.
-Individuals interested in the technical discussion are also welcome.
-
-link:{freebsd-office-url}[freebsd-office]::
-_Office applications on FreeBSD_
-+
-Discussion centers around office applications, their installation, their development and their support within FreeBSD.
-
-link:{freebsd-ops-announce-url}[freebsd-ops-announce]::
-_Project Infrastructure Announcements_
-+
-This is the mailing list for people interested in changes and issues related to the FreeBSD.org Project infrastructure.
-+
-This moderated list is strictly for announcements: no replies, requests, discussions, or opinions.
-
-link:{freebsd-performance-url}[freebsd-performance]::
-_Discussions about tuning or speeding up FreeBSD_
-+
-This mailing list exists to provide a place for hackers, administrators, and/or concerned parties to discuss performance related topics pertaining to FreeBSD.
-Acceptable topics includes talking about FreeBSD installations that are either under high load, are experiencing performance problems, or are pushing the limits of FreeBSD.
-Concerned parties that are willing to work toward improving the performance of FreeBSD are highly encouraged to subscribe to this list.
-This is a highly technical list ideally suited for experienced FreeBSD users, hackers, or administrators interested in keeping FreeBSD fast, robust, and scalable.
-This list is not a question-and-answer list that replaces reading through documentation, but it is a place to make contributions or inquire about unanswered performance related topics.
-
-link:{freebsd-pf-url}[freebsd-pf]::
-_Discussion and questions about the packet filter firewall system_
-+
-Discussion concerning the packet filter (pf) firewall system in terms of FreeBSD.
-Technical discussion and user questions are both welcome.
-This list is also a place to discuss the ALTQ QoS framework.
-
-link:{freebsd-pkg-url}[freebsd-pkg]::
-_Binary package management and package tools discussion_
-+
-Discussion of all aspects of managing FreeBSD systems by using binary packages to install software, including binary package toolkits and formats, their development and support within FreeBSD, package repository management, and third party packages.
-+
-Note that discussion of ports which fail to generate packages correctly should generally be considered as ports problems, and so inappropriate for this list.
-
-link:{freebsd-pkg-fallout-url}[freebsd-pkg-fallout]::
-_Fallout logs from package building_
-+
-All packages building failures logs from the package building clusters
-
-link:{freebsd-pkgbase-url}[freebsd-pkgbase]::
-_Packaging the FreeBSD base system._
-+
-Discussions surrounding implementation and issues regarding packaging the FreeBSD base system.
-
-link:{freebsd-platforms-url}[freebsd-platforms]::
-_Porting to Non Intel(R) platforms_
-+
-Cross-platform FreeBSD issues, general discussion and proposals for non Intel(R) FreeBSD ports.
-This is a technical mailing list for which strictly technical content is expected.
-
-link:{freebsd-ports-url}[freebsd-ports]::
-_Discussion of "ports"_
-+
-Discussions concerning FreeBSD's "ports collection" ([.filename]#/usr/ports#), ports infrastructure, and general ports coordination efforts.
-This is a technical mailing list for which strictly technical content is expected.
-
-link:{freebsd-ports-announce-url}[freebsd-ports-announce]::
-_Important news and instructions about the FreeBSD "Ports Collection"_
-+
-Important news for developers, porters, and users of the "Ports Collection" ([.filename]#/usr/ports#), including architecture/infrastructure changes, new capabilities, critical upgrade instructions, and release engineering information.
-This is a low-volume mailing list, intended for announcements.
-
-link:{freebsd-ports-bugs-url}[freebsd-ports-bugs]::
-_Discussion of "ports" bugs_
-+
-Discussions concerning problem reports for FreeBSD's "ports collection" ([.filename]#/usr/ports#), proposed ports, or modifications to ports.
-This is a technical mailing list for which strictly technical content is expected.
-
-link:{freebsd-proliant-url}[freebsd-proliant]::
-_Technical discussion of FreeBSD on HP ProLiant server platforms_
-+
-This mailing list is to be used for the technical discussion of the usage of FreeBSD on HP ProLiant servers, including the discussion of ProLiant-specific drivers, management software, configuration tools, and BIOS updates.
-As such, this is the primary place to discuss the hpasmd, hpasmcli, and hpacucli modules.
-
-link:{freebsd-python-url}[freebsd-python]::
-_Python on FreeBSD_
-+
-This is a list for discussions related to improving Python-support on FreeBSD.
-This is a technical mailing list.
-It is for individuals working on porting Python, its third party modules and Zope stuff to FreeBSD.
-Individuals interested in following the technical discussion are also welcome.
-
-link:{freebsd-questions-url}[freebsd-questions]::
-_User questions_
-+
-This is the mailing list for questions about FreeBSD.
-Do not send "how to" questions to the technical lists unless the question is quite technical.
-
-link:{freebsd-ruby-url}[freebsd-ruby]::
-_FreeBSD-specific Ruby discussions_
-+
-This is a list for discussions related to the Ruby support on FreeBSD.
-This is a technical mailing list.
-It is for individuals working on Ruby ports, third party libraries and frameworks.
-+
-Individuals interested in the technical discussion are also welcome.
-
-link:{freebsd-scsi-url}[freebsd-scsi]::
-_SCSI subsystem_
-+
-This is the mailing list for people working on the SCSI subsystem for FreeBSD.
-This is a technical mailing list for which strictly technical content is expected.
-
-link:{freebsd-security-url}[freebsd-security]::
-_Security issues_
-+
-FreeBSD computer security issues (DES, Kerberos, known security holes and fixes, etc).
-This is a technical mailing list for which strictly technical discussion is expected.
-Note that this is not a question-and-answer list, but that contributions (BOTH question AND answer) to the FAQ are welcome.
-
-link:{freebsd-security-notifications-url}[freebsd-security-notifications]::
-_Security Notifications_
-+
-Notifications of FreeBSD security problems and fixes.
-This is not a discussion list.
-The discussion list is FreeBSD-security.
-
-link:{freebsd-snapshots-url}[freebsd-snapshots]::
-_FreeBSD Development Snapshot Announcements_
-+
-This list provides notifications about the availability of new FreeBSD development snapshots for the head/ and stable/ branches.
-
-link:{freebsd-stable-url}[freebsd-stable]::
-_Discussions about the use of FreeBSD-STABLE_
-+
-This is the mailing list for users of FreeBSD-STABLE.
-"STABLE" is the branch where development continues after a RELEASE, including bug fixes and new features.
-The ABI is kept stable for binary compatibility.
-It includes warnings about new features coming out in -STABLE that will affect the users, and instructions on steps that must be taken to remain -STABLE.
-Anyone running "STABLE" should subscribe to this list.
-This is a technical mailing list for which strictly technical content is expected.
-
-link:{freebsd-standards-url}[freebsd-standards]::
-_C99 POSIX Conformance_
-+
-This is a forum for technical discussions related to FreeBSD Conformance to the C99 and the POSIX standards.
-
-link:{freebsd-teaching-url}[freebsd-teaching]::
-_Teaching with FreeBSD_
-+
-Non technical mailing list discussing teaching with FreeBSD.
-
-link:{freebsd-testing-url}[freebsd-testing]::
-_Testing on FreeBSD_
-+
-Technical mailing list discussing testing on FreeBSD, including ATF/Kyua, test build infrastructure, port tests to FreeBSD from other operating systems (NetBSD, ...), etc.
-
-link:{freebsd-tex-url}[freebsd-tex]::
-_Porting TeX and its applications to FreeBSD_
-+
-This is a technical mailing list for discussions related to TeX and its applications on FreeBSD.
-It is for individuals actively working on porting TeX to FreeBSD, to bring up problems or discuss alternative solutions.
-Individuals interested in following the technical discussion are also welcome.
-
-link:{freebsd-toolchain-url}[freebsd-toolchain]::
-_Maintenance of FreeBSD's integrated toolchain_
-+
-This is the mailing list for discussions related to the maintenance of the toolchain shipped with FreeBSD.
-This could include the state of Clang and GCC, but also pieces of software such as assemblers, linkers and debuggers.
-
-link:{freebsd-transport-url}[freebsd-transport]::
-_Discussions of transport level network protocols in FreeBSD_
-+
-The transport mailing list exists for the discussion of issues and designs around the transport level protocols in the FreeBSD network stack, including TCP, SCTP and UDP.
-Other networking topics, including driver specific and network protocol issues should be discussed on the {freebsd-net}.
-
-link:{freebsd-translators-url}[freebsd-translators]::
-_Translating FreeBSD documents and programs_
-+
-A discussion list where translators of FreeBSD documents from English into other languages can talk about translation methods and tools.
-New members are asked to introduce themselves and mention the languages they are interested in translating.
-
-link:{freebsd-usb-url}[freebsd-usb]::
-_Discussing FreeBSD support for USB_
-+
-This is a mailing list for technical discussions related to FreeBSD support for USB.
-
-link:{freebsd-user-groups-url}[freebsd-user-groups]::
-_User Group Coordination List_
-+
-This is the mailing list for the coordinators from each of the local area Users Groups to discuss matters with each other and a designated individual from the Core Team.
-This mail list should be limited to meeting synopsis and coordination of projects that span User Groups.
-
-link:{freebsd-virtualization-url}[freebsd-virtualization]::
-_Discussion of various virtualization techniques supported by FreeBSD_
-+
-A list to discuss the various virtualization techniques supported by FreeBSD.
-On one hand the focus will be on the implementation of the basic functionality as well as adding new features.
-On the other hand users will have a forum to ask for help in case of problems or to discuss their use cases.
-
-link:{freebsd-wip-status-url}[freebsd-wip-status]::
-_FreeBSD Work-In-Progress Status_
-+
-This mailing list can be used by developers to announce the creation and progress of FreeBSD related work.
-Messages will be moderated. It is suggested to send the message "To:" a more topical FreeBSD list and only "BCC:" this list.
-This way the WIP can also be discussed on the topical list, as no discussion is allowed on this list.
-
-link:{freebsd-wireless-url}[freebsd-wireless]::
-_Discussions of 802.11 stack, tools device driver development_
-+
-The FreeBSD-wireless list focuses on 802.11 stack (sys/net80211), device driver and tools development.
-This includes bugs, new features and maintenance.
-
-link:{freebsd-xen-url}[freebsd-xen]::
-_Discussion of the FreeBSD port to Xen(TM) - implementation and usage_
-+
-A list that focuses on the FreeBSD Xen(TM) port.
-The anticipated traffic level is small enough that it is intended as a forum for both technical discussions of the implementation and design details as well as administrative deployment issues.
-
-link:{freebsd-xfce-url}[freebsd-xfce]::
-_XFCE_
-+
-This is a forum for discussions related to bring the XFCE environment to FreeBSD.
-This is a technical mailing list.
-It is for individuals actively working on porting XFCE to FreeBSD, to bring up problems or discuss alternative solutions.
-Individuals interested in following the technical discussion are also welcome.
-
-link:{freebsd-zope-url}[freebsd-zope]::
-_Zope_
-+
-This is a forum for discussions related to bring the Zope environment to FreeBSD.
-This is a technical mailing list.
-It is for individuals actively working on porting Zope to FreeBSD, to bring up problems or discuss alternative solutions.
-Individuals interested in following the technical discussion are also welcome.
-
[[eresources-mailfiltering]]
=== Filtering on the Mailing Lists
@@ -1149,8 +163,14 @@ All attachments with a MIME content type not found in the list below will be str
Some of the mailing lists might allow attachments of other MIME content types, but the above list should be applicable for most of the mailing lists.
====
-If an email contains both an HTML and a plain text version, the HTML version will be removed.
-If an email contains only an HTML version, it will be converted to plain text.
+If a multi-part message includes text/plain and text/html parts:
+
+- addressees will receive both parts
+- lists.freebsd.org will present text/plain with an option to view original text (source, with raw HTML amongst the parts).
+
+If text/plain does not accompany text/html:
+
+- there will be conversion from HTML to plain text.
[[eresources-news]]
== Usenet Newsgroups
diff --git a/documentation/content/en/books/handbook/eresources/_index.po b/documentation/content/en/books/handbook/eresources/_index.po
new file mode 100644
index 0000000000..ef3e41382a
--- /dev/null
+++ b/documentation/content/en/books/handbook/eresources/_index.po
@@ -0,0 +1,562 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-09-09 18:12-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/eresources/_index.adoc:1
+#, no-wrap
+msgid "FreeBSD additional resources on internet like websites, mailing lists, mirrors, etc"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/eresources/_index.adoc:1
+#, no-wrap
+msgid "Part V. Appendices"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/eresources/_index.adoc:1
+#, no-wrap
+msgid "Appendix C. Resources on the Internet"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/eresources/_index.adoc:15
+#, no-wrap
+msgid "Resources on the Internet"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:54
+msgid ""
+"Development of FreeBSD is too rapid for print media to be practical for "
+"keeping people informed. For awareness of developments: electronic "
+"alternatives to print are best."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:56
+msgid ""
+"The FreeBSD user community provides much technical support -- with forums, "
+"chat and email amongst the most popular and effective means of communication."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:59
+msgid ""
+"The most important points of contact are outlined below. The link:https://"
+"wiki.freebsd.org/Community[Community wiki area] may be more up-to-date."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:61
+msgid ""
+"Please make the {freebsd-doc} aware of any resource that is either "
+"redundant, or not yet listed below."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/eresources/_index.adoc:63
+#, no-wrap
+msgid "Websites"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:66
+msgid ""
+"The link:https://forums.FreeBSD.org/[FreeBSD Forums] provide a web based "
+"discussion forum for FreeBSD questions and technical discussion."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:67
+msgid ""
+"The link:https://wiki.FreeBSD.org/[FreeBSD Wiki] provides various bits of "
+"information that hadn't yet made it into the Handbook."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:68
+msgid ""
+"The link:https://docs.FreeBSD.org/[Documentation Portal] offers much more "
+"than the FreeBSD Handbook alone; there are more than forty books and "
+"articles."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:69
+msgid ""
+"The link:https://freebsdfoundation.org/our-work/journal/browser-based-"
+"edition/[FreeBSD Journal] is a free, professionally-edited, bi-monthly "
+"technical magazine released by link:https://freebsdfoundation.org[The "
+"FreeBSD Foundation]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:70
+msgid ""
+"The link:http://www.youtube.com/bsdconferences[BSDConferences YouTube "
+"Channel] provides a collection of high quality videos from BSD conferences "
+"around the world. This is a great way to watch key developers give "
+"presentations about new work in FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:71
+msgid ""
+"link:https://www.freebsd.org/status/[FreeBSD Status Reports] are released "
+"every three months and track progress of FreeBSD development."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:72
+msgid ""
+"There's a link:https://www.reddit.com/r/freebsd/[FreeBSD-focused Reddit "
+"group] at r/freebsd."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:73
+msgid ""
+"link:https://superuser.com/questions/tagged/freebsd[Super User] and link:"
+"https://serverfault.com/questions/tagged/freebsd[Server Fault], the Stack "
+"Exchange services for system administrators."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:74
+msgid ""
+"link:https://wiki.freebsd.org/Discord[FreeBSD Discord server], a "
+"communications and community-building service, where FreeBSD community "
+"members can socialise, obtain support or support others, learn, contribute, "
+"collaborate, and stay up to date with all things FreeBSD-related."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:75
+msgid ""
+"link:https://wiki.freebsd.org/IRC/Channels[IRC channels], a widely "
+"implemented, technically mature, open standard text chat."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/eresources/_index.adoc:77
+#, no-wrap
+msgid "Mailing Lists"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:82
+msgid ""
+"The mailing lists are the most direct way of addressing questions or opening "
+"a technical discussion to a concentrated FreeBSD audience. There are a wide "
+"variety of lists on a number of different FreeBSD topics. Sending questions "
+"to the most appropriate mailing list will invariably assure a faster and "
+"more accurate response."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:84
+msgid "Technical list threads should remain technical."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:86
+msgid ""
+"All users and developers of FreeBSD should subscribe to the {freebsd-"
+"announce}."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/eresources/_index.adoc:91
+msgid ""
+"To test FreeBSD mailing list capabilities, aim for the {freebsd-test}. "
+"Please do not send test messages to any other list."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:94
+msgid ""
+"When in doubt about what list to post a question to, see extref:{freebsd-"
+"questions-article}[How to get best results from the FreeBSD-questions "
+"mailing list]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:96
+msgid "Before posting to any list, please:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:98
+msgid ""
+"learn about how to best use the mailing lists, such as how to help avoid "
+"frequently-repeated discussions, by reading the extref:{mailing-list-faq}"
+"[Mailing List Frequently Asked Questions] (FAQ) document"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:99
+msgid ""
+"search the archives, to tell whether someone else has already posted what "
+"you intend to post."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:101
+msgid "Archive search interfaces include:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:103
+msgid "https://lists.freebsd.org/search[] (FreeBSD, experimental)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:104
+msgid "https://www.freebsd.org/search/[] (DuckDuckGo)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:107
+msgid ""
+"Note that this also means that messages sent to FreeBSD mailing lists are "
+"archived in perpetuity. When protecting privacy is a concern, consider "
+"using a disposable secondary email address and posting only public "
+"information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:109
+msgid "FreeBSD-provided archives:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:111
+msgid "do not present links as links"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:112
+msgid "do not present inline images"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:113
+msgid "do not present HTML content of HTML messages."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:116
+msgid ""
+"The FreeBSD public mailing lists can be consulted link:{mailing-lists-url}"
+"[here]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/eresources/_index.adoc:118
+#, no-wrap
+msgid "How to Subscribe or Unsubscribe"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:121
+msgid "At {mailing-lists-url}, click the name of a list to reveal its options."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:124
+msgid ""
+"To post, after subscribing, send mail to `listname@FreeBSD.org`. The "
+"message will be redistributed to list members."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/eresources/_index.adoc:126
+#, no-wrap
+msgid "Lists Basic Rules"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:131
+msgid ""
+"_All_ FreeBSD mailing lists have certain basic rules which must be adhered "
+"to by anyone using them. Failure to comply with these guidelines will "
+"result in two (2) written warnings from the FreeBSD Postmaster mailto:"
+"postmaster@FreeBSD.org[postmaster@FreeBSD.org], after which, on a third "
+"offense, the poster will removed from all FreeBSD mailing lists and filtered "
+"from further posting to them. We regret that such rules and measures are "
+"necessary at all, but today's Internet is a pretty harsh environment, it "
+"would seem, and many fail to appreciate just how fragile some of its "
+"mechanisms are."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:133
+msgid "Rules of the road:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:135
+msgid ""
+"The topic of any posting should adhere to the basic description of the list "
+"it is posted to. If the list is about technical issues, the posting should "
+"contain technical discussion. Ongoing irrelevant chatter or flaming only "
+"detracts from the value of the mailing list for everyone on it and will not "
+"be tolerated. For free-form discussion on no particular topic, the {freebsd-"
+"chat} is freely available and should be used instead."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:136
+msgid ""
+"No posting should be made to more than 2 mailing lists, and only to 2 when a "
+"clear and obvious need to post to both lists exists. For most lists, there "
+"is already a great deal of subscriber overlap and except for the most "
+"esoteric mixes (say \"-stable & -scsi\"), there really is no reason to post "
+"to more than one list at a time. If a message is received with multiple "
+"mailing lists on the `Cc` line, trim the `Cc` line before replying. _The "
+"person who replies is still responsible for cross-posting, no matter who the "
+"originator might have been._"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:137
+msgid ""
+"Personal attacks and profanity (in the context of an argument) are not "
+"allowed, and that includes users and developers alike. Gross breaches of "
+"netiquette, like excerpting or reposting private mail when permission to do "
+"so was not and would not be forthcoming, are frowned upon but not "
+"specifically enforced."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:138
+msgid ""
+"Advertising of non-FreeBSD related products or services is strictly "
+"prohibited and will result in an immediate ban if it is clear that the "
+"offender is advertising by spam."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/eresources/_index.adoc:140
+#, no-wrap
+msgid "Filtering on the Mailing Lists"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:144
+msgid ""
+"The FreeBSD mailing lists are filtered in multiple ways to avoid the "
+"distribution of spam, viruses, and other unwanted emails. The filtering "
+"actions described in this section do not include all those used to protect "
+"the mailing lists."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:147
+msgid ""
+"Only certain types of attachments are allowed on the mailing lists. All "
+"attachments with a MIME content type not found in the list below will be "
+"stripped before an email is distributed on the mailing lists."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:149
+msgid "application/octet-stream"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:150
+msgid "application/pdf"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:151
+msgid "application/pgp-signature"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:152
+msgid "application/x-pkcs7-signature"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:153
+msgid "message/rfc822"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:154
+msgid "multipart/alternative"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:155
+msgid "multipart/related"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:156
+msgid "multipart/signed"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:157
+msgid "text/html"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:158
+msgid "text/plain"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:159
+msgid "text/x-diff"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:160
+msgid "text/x-patch"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/eresources/_index.adoc:164
+msgid ""
+"Some of the mailing lists might allow attachments of other MIME content "
+"types, but the above list should be applicable for most of the mailing lists."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:167
+msgid "If a multi-part message includes text/plain and text/html parts:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:169
+msgid "addressees will receive both parts"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:170
+msgid ""
+"lists.freebsd.org will present text/plain with an option to view original "
+"text (source, with raw HTML amongst the parts)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:172
+msgid "If text/plain does not accompany text/html:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:174
+msgid "there will be conversion from HTML to plain text."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/eresources/_index.adoc:176
+#, no-wrap
+msgid "Usenet Newsgroups"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:179
+msgid ""
+"In addition to two FreeBSD specific newsgroups, there are many others in "
+"which FreeBSD is discussed or are otherwise relevant to FreeBSD users."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/eresources/_index.adoc:180
+#, no-wrap
+msgid "BSD Specific Newsgroups"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:183
+msgid ""
+"link:news:comp.unix.bsd.freebsd.announce[comp.unix.bsd.freebsd.announce]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:184
+msgid "link:news:comp.unix.bsd.freebsd.misc[comp.unix.bsd.freebsd.misc]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:185
+msgid "link:news:de.comp.os.unix.bsd[de.comp.os.unix.bsd] (German)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:186
+msgid "link:news:fr.comp.os.bsd[fr.comp.os.bsd] (French)"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/eresources/_index.adoc:187
+#, no-wrap
+msgid "Other UNIX(R) Newsgroups of Interest"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:190
+msgid "link:news:comp.unix[comp.unix]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:191
+msgid "link:news:comp.unix.questions[comp.unix.questions]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:192
+msgid "link:news:comp.unix.admin[comp.unix.admin]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:193
+msgid "link:news:comp.unix.programmer[comp.unix.programmer]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:194
+msgid "link:news:comp.unix.shell[comp.unix.shell]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:195
+msgid "link:news:comp.unix.misc[comp.unix.misc]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:196
+msgid "link:news:comp.unix.bsd[comp.unix.bsd]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/eresources/_index.adoc:197
+#, no-wrap
+msgid "X Window System"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/eresources/_index.adoc:199
+msgid "link:news:comp.windows.x[comp.windows.x]"
+msgstr ""
diff --git a/documentation/content/en/books/handbook/filesystems/_index.adoc b/documentation/content/en/books/handbook/filesystems/_index.adoc
index 59132d0636..a735a241d8 100644
--- a/documentation/content/en/books/handbook/filesystems/_index.adoc
+++ b/documentation/content/en/books/handbook/filesystems/_index.adoc
@@ -1,13 +1,13 @@
---
-title: Chapter 21. Other File Systems
+title: Chapter 23. Other File Systems
part: Part III. System Administration
prev: books/handbook/zfs
next: books/handbook/virtualization
description: This chapter shows the other filesystems supported by FreeBSD
tags: ["filesystem", "ext2", "ext3", "ext4", "ext2fs"]
showBookMenu: true
-weight: 25
-path: "/books/handbook/"
+weight: 27
+path: "/books/handbook/filesystems/"
---
[[filesystems]]
@@ -18,7 +18,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 21
+:sectnumoffset: 23
:partnums:
:source-highlighter: rouge
:experimental:
@@ -95,9 +95,9 @@ Journalling and encryption are not supported yet.
====
To access an ext file system, mount the ext volume by specifying its FreeBSD partition name and an existing mount point.
-This example mounts [.filename]#/dev/ad1s1# on [.filename]#/mnt#:
+This example mounts [.filename]#/dev/ada1s1# on [.filename]#/mnt#:
[source,shell]
....
-# mount -t ext2fs /dev/ad1s1 /mnt
+# mount -t ext2fs /dev/ada1s1 /mnt
....
diff --git a/documentation/content/en/books/handbook/filesystems/_index.po b/documentation/content/en/books/handbook/filesystems/_index.po
new file mode 100644
index 0000000000..51a15eadac
--- /dev/null
+++ b/documentation/content/en/books/handbook/filesystems/_index.po
@@ -0,0 +1,175 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-07-15 16:41-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/filesystems/_index.adoc:1
+#, no-wrap
+msgid "This chapter shows the other filesystems supported by FreeBSD"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/filesystems/_index.adoc:1
+#, no-wrap
+msgid "Part III. System Administration"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/filesystems/_index.adoc:1
+#, no-wrap
+msgid "Chapter 23. Other File Systems"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/filesystems/_index.adoc:14
+#, no-wrap
+msgid "Other File Systems"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/filesystems/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/filesystems/_index.adoc:60
+msgid ""
+"File systems are an integral part of any operating system. They allow users "
+"to upload and store files, provide access to data, and make hard drives "
+"useful. Different operating systems differ in their native file system. "
+"Traditionally, the native FreeBSD file system has been the Unix File System "
+"UFS which has been modernized as UFS2. Since FreeBSD 7.0, the Z File System "
+"(ZFS) is also available as a native file system. See crossref:zfs[zfs,The Z "
+"File System (ZFS)] for more information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/filesystems/_index.adoc:63
+msgid ""
+"In addition to its native file systems, FreeBSD supports a multitude of "
+"other file systems so that data from other operating systems can be accessed "
+"locally, such as data stored on locally attached USB storage devices, flash "
+"drives, and hard disks. This includes support for the Linux(R) Extended "
+"File System (EXT)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/filesystems/_index.adoc:67
+msgid ""
+"There are different levels of FreeBSD support for the various file systems. "
+"Some require a kernel module to be loaded and others may require a toolset "
+"to be installed. Some non-native file system support is full read-write "
+"while others are read-only."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/filesystems/_index.adoc:69
+msgid "After reading this chapter, you will know:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/filesystems/_index.adoc:71
+msgid "The difference between native and supported file systems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/filesystems/_index.adoc:72
+msgid "Which file systems are supported by FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/filesystems/_index.adoc:73
+msgid ""
+"How to enable, configure, access, and make use of non-native file systems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/filesystems/_index.adoc:75
+msgid "Before reading this chapter, you should:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/filesystems/_index.adoc:77
+msgid "Understand UNIX(R) and crossref:basics[basics,FreeBSD basics]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/filesystems/_index.adoc:78
+msgid ""
+"Be familiar with the basics of crossref:kernelconfig[kernelconfig,kernel "
+"configuration and compilation]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/filesystems/_index.adoc:79
+msgid "Feel comfortable crossref:ports[ports,installing software] in FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/filesystems/_index.adoc:80
+msgid ""
+"Have some familiarity with crossref:disks[disks,disks], storage, and device "
+"names in FreeBSD."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/filesystems/_index.adoc:82
+#, no-wrap
+msgid "Linux(R) File Systems"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/filesystems/_index.adoc:86
+msgid ""
+"FreeBSD provides built-in support for several Linux(R) file systems. This "
+"section demonstrates how to load support for and how to mount the supported "
+"Linux(R) file systems."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/filesystems/_index.adoc:87
+#, no-wrap
+msgid "ext2 / ext3 / ext4"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/filesystems/_index.adoc:91
+msgid ""
+"Kernel support for ext2 file systems has been available since FreeBSD 2.2. "
+"The man:ext2fs[5] driver allows the FreeBSD kernel to both read and write to "
+"ext2, ext3, and ext4 file systems."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/filesystems/_index.adoc:95
+msgid "Journalling and encryption are not supported yet."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/filesystems/_index.adoc:99
+msgid ""
+"To access an ext file system, mount the ext volume by specifying its FreeBSD "
+"partition name and an existing mount point. This example mounts [."
+"filename]#/dev/ada1s1# on [.filename]#/mnt#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/filesystems/_index.adoc:103
+#, no-wrap
+msgid "# mount -t ext2fs /dev/ada1s1 /mnt\n"
+msgstr ""
diff --git a/documentation/content/en/books/handbook/firewalls/_index.adoc b/documentation/content/en/books/handbook/firewalls/_index.adoc
index 0d77039b67..6cd98bfd51 100644
--- a/documentation/content/en/books/handbook/firewalls/_index.adoc
+++ b/documentation/content/en/books/handbook/firewalls/_index.adoc
@@ -1,13 +1,13 @@
---
-title: Chapter 31. Firewalls
+title: Chapter 33. Firewalls
part: IV. Network Communication
prev: books/handbook/network-servers
next: books/handbook/advanced-networking
description: "FreeBSD has three firewalls built into the base system: PF, IPFW, and IPFILTER. This chapter covers how to define packet filtering rules, the differences between the firewalls built into FreeBSD and how to use them"
tags: ["firewall", "pf", "ipfw", "ipfilter", "blacklistd", "filtering"]
showBookMenu: true
-weight: 36
-path: "/books/handbook/"
+weight: 38
+path: "/books/handbook/firewalls/"
---
[[firewalls]]
@@ -18,7 +18,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 31
+:sectnumoffset: 33
:partnums:
:source-highlighter: rouge
:experimental:
@@ -502,7 +502,7 @@ The most common points against using FTP include:
* The protocol demands the use of at least two TCP connections (control and data) on separate ports.
* When a session is established, data is communicated using randomly selected ports.
-All of these points present security challenges, even before considering any potential security weaknesses in client or server software.
+All of these points present security challenges, even before considering any potential security weaknesses in client or server software.
More secure alternatives for file transfer exist, such as man:sftp[1] or man:scp[1], which both feature authentication and data transfer over encrypted connections.
For those situations when FTP is required, PF provides redirection of FTP traffic to a small proxy program called man:ftp-proxy[8], which is included in the base system of FreeBSD.
@@ -850,7 +850,7 @@ SMTP traffic from an address listed in `<spamd>` but not in `<spamd-white>` is r
The installation of package:mail/spamd[] includes a sample configuration file ([.filename]#/usr/local/etc/spamd.conf.sample#) and a man page for [.filename]#spamd.conf#.
Refer to these for additional configuration options beyond those shown in this example.
+
-One of the first lines in the configuration file that does not begin with a `#` comment sign contains the block which defines the `all` list, which specifies the lists to use:
+One of the first lines in the configuration file that does not begin with a `+#+` comment sign contains the block which defines the `all` list, which specifies the lists to use:
+
[.programlisting]
....
@@ -1169,7 +1169,7 @@ Refer to man:ipfw[8] for details on how these keywords affect rule processing.
When creating an IPFW rule, keywords must be written in the following order.
Some keywords are mandatory while other keywords are optional.
The words shown in uppercase represent a variable and the words shown in lowercase must precede the variable that follows it.
-The `#` symbol is used to mark the start of a comment and may appear at the end of a rule or on its own line.
+The `+#+` symbol is used to mark the start of a comment and may appear at the end of a rule or on its own line.
Blank lines are ignored.
`_CMD RULE_NUMBER set SET_NUMBER ACTION log LOG_AMOUNT PROTO from SRC SRC_PORT to DST DST_PORT OPTIONS_`
@@ -1597,19 +1597,19 @@ Each LAN client can be assigned its own external IP address by man:ipfw[8], whic
This is also known as static NAT.
For example, if IP addresses `128.1.1.1`, `128.1.1.2`, and `128.1.1.3` are available, `128.1.1.1` can be used as the man:ipfw[8] machine's external IP address, while `128.1.1.2` and `128.1.1.3` are forwarded back to LAN clients `A` and `B`.
-The `redirect_address` syntax is as below, where `localIP` is the internal IP address of the LAN client, and `publicIP` the external IP address corresponding to the LAN client.
+The `redirect_addr` syntax is as below, where `localIP` is the internal IP address of the LAN client, and `publicIP` the external IP address corresponding to the LAN client.
[.programlisting]
....
-redirect_address localIP publicIP
+redirect_addr localIP publicIP
....
In the example, the arguments would read:
[.programlisting]
....
-redirect_address 192.168.0.2 128.1.1.2
-redirect_address 192.168.0.3 128.1.1.3
+redirect_addr 192.168.0.2 128.1.1.2
+redirect_addr 192.168.0.3 128.1.1.3
....
Like `redirect_port`, these arguments are placed in a NAT instance configuration.
@@ -1623,7 +1623,7 @@ Refer to man:rc.conf[5] for details.
Let us start with a statement: the userspace NAT implementation: man:natd[8], has more overhead than in-kernel NAT.
For man:natd[8] to translate packets, the packets have to be copied from the kernel to userspace and back which brings in extra overhead that is not present with in-kernel NAT.
-To enable the userpace NAT daemon man:natd[8] at boot time, the following is a minimum configuration in [.filename]#/etc/rc.conf#.
+To enable the userspace NAT daemon man:natd[8] at boot time, the following is a minimum configuration in [.filename]#/etc/rc.conf#.
Where `natd_interface` is set to the name of the NIC attached to the Internet.
The man:rc[8] script of man:natd[8] will automatically check if a dynamic IP address is used and configure itself to handle that.
@@ -1662,7 +1662,7 @@ Below are two example entries, one per line:
[.programlisting]
....
redirect_port tcp 192.168.0.2:6667 6667
-redirect_address 192.168.0.3 128.1.1.3
+redirect_addr 192.168.0.3 128.1.1.3
....
====
@@ -1923,7 +1923,7 @@ When creating rules, keep in mind that unless the `quick` keyword appears in a r
This means that even if the first rule to match a packet is a `pass`, if there is a later matching rule that is a `block`, the packet will be dropped.
Sample rulesets can be found in [.filename]#/usr/share/examples/ipfilter#.
-When creating rules, a `#` character is used to mark the start of a comment and may appear at the end of a rule, to explain that rule's function, or on its own line.
+When creating rules, a `+#+` character is used to mark the start of a comment and may appear at the end of a rule, to explain that rule's function, or on its own line.
Any blank lines are ignored.
The keywords which are used in rules must be written in a specific order, from left to right.
@@ -2245,7 +2245,7 @@ map dc0 192.168.1.0/24 -> 204.134.75.0/255.255.255.0
map dc0 192.168.1.0/24 -> 204.134.75.0/24
....
-A common practice is to have a publically accessible web server or mail server segregated to an internal network segment.
+A common practice is to have a publicly accessible web server or mail server segregated to an internal network segment.
The traffic from these servers still has to undergo NAT, but port redirection is needed to direct inbound traffic to the correct server.
For example, to map a web server using the internal address `10.0.10.25` to its public IP address of `20.20.20.5`, use this rule:
@@ -2452,7 +2452,7 @@ For example: `icmp 3/3` for a port unreachable message.
[[firewalls-blacklistd]]
== Blacklistd
-Blacklistd is a daemon listening to sockets to receive notifications from other daemons about connection attempts that failed or were successful.
+Blacklistd is a daemon listening to sockets awaiting to receive notifications from other daemons about connection attempts that failed or were successful.
It is most widely used in blocking too many connection attempts on open ports.
A prime example is SSH running on the internet getting a lot of requests from bots or scripts trying to guess passwords and gain access.
Using blacklistd, the daemon can notify the firewall to create a filter rule to block excessive connection attempts from a single source after a number of tries. Blacklistd was first developed on NetBSD and appeared there in version 7.
@@ -2501,7 +2501,7 @@ ssh stream * * * 3 24h
All rules that follow the `[local]` section are treated as local rules (which is the default), applying to the local machine.
When a `[remote]` section is encountered, all rules that follow it are handled as remote machine rules.
-Seven fields define a rule separated by either tabs or spaces.
+Seven fields separated by either tabs or spaces define a rule.
The first four fields identify the traffic that should be blocklisted.
The three fields that follow define backlistd's behavior.
Wildcards are denoted as asterisks (`*`), matching anything in this field.
@@ -2593,7 +2593,7 @@ To explain it, this example rule is used:
The address field can be an IP address (either v4 or v6), a port or both.
This allows setting special rules for a specific remote address range like in this example.
-The fields for type, protocol and owner are identically interpreted as in the local rule.
+The fields for socket type, protocol and owner are identically interpreted as in the local rule.
The name fields is different though: the equal sign (`=`) in a remote rule tells blacklistd to use the value from the matching local rule.
It means that the firewall rule entry is taken and the `/25` prefix (a netmask of `255.255.255.128`) is added.
@@ -2685,6 +2685,6 @@ After identifying the address to be unblocked from the list, the following comma
# pfctl -a blacklistd/22 -t port22 -T delete 213.0.123.128/25
....
-The address is now removed from PF, but will still show up in the blacklistctl list, since it does not know about any changes made in PF.
+The address is now removed from PF, but will still show up in the blacklistctl list, since it does not know about any changes made in PF.
The entry in blacklistd's database will eventually expire and be removed from its output.
The entry will be added again if the host is matching one of the block rules in blacklistd again.
diff --git a/documentation/content/en/books/handbook/firewalls/_index.po b/documentation/content/en/books/handbook/firewalls/_index.po
new file mode 100644
index 0000000000..5a06a1fd58
--- /dev/null
+++ b/documentation/content/en/books/handbook/firewalls/_index.po
@@ -0,0 +1,5621 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1
+#, no-wrap
+msgid "FreeBSD has three firewalls built into the base system: PF, IPFW, and IPFILTER. This chapter covers how to define packet filtering rules, the differences between the firewalls built into FreeBSD and how to use them"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1
+#, no-wrap
+msgid "IV. Network Communication"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1
+#, no-wrap
+msgid "Chapter 33. Firewalls"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:14
+#, no-wrap
+msgid "Firewalls"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:57
+msgid ""
+"Firewalls make it possible to filter the incoming and outgoing traffic that "
+"flows through a system. A firewall can use one or more sets of \"rules\" to "
+"inspect network packets as they come in or go out of network connections and "
+"either allows the traffic through or blocks it. The rules of a firewall can "
+"inspect one or more characteristics of the packets such as the protocol "
+"type, source or destination host address, and source or destination port."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:60
+msgid ""
+"Firewalls can enhance the security of a host or a network. They can be used "
+"to do one or more of the following:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:62
+msgid ""
+"Protect and insulate the applications, services, and machines of an internal "
+"network from unwanted traffic from the public Internet."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:63
+msgid ""
+"Limit or disable access from hosts of the internal network to services of "
+"the public Internet."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:64
+msgid ""
+"Support network address translation (NAT), which allows an internal network "
+"to use private IP addresses and share a single connection to the public "
+"Internet using either a single IP address or a shared pool of automatically "
+"assigned public addresses."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:69
+msgid ""
+"FreeBSD has three firewalls built into the base system: PF, IPFW, and "
+"IPFILTER, also known as IPF. FreeBSD also provides two traffic shapers for "
+"controlling bandwidth usage: man:altq[4] and man:dummynet[4]. ALTQ has "
+"traditionally been closely tied with PF and dummynet with IPFW. Each "
+"firewall uses rules to control the access of packets to and from a FreeBSD "
+"system, although they go about it in different ways and each has a different "
+"rule syntax."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:72
+msgid ""
+"FreeBSD provides multiple firewalls in order to meet the different "
+"requirements and preferences for a wide variety of users. Each user should "
+"evaluate which firewall best meets their needs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:74
+msgid "After reading this chapter, you will know:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:76
+msgid "How to define packet filtering rules."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:77
+msgid "The differences between the firewalls built into FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:78
+msgid "How to use and configure the PF firewall."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:79
+msgid "How to use and configure the IPFW firewall."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:80
+msgid "How to use and configure the IPFILTER firewall."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:82
+msgid "Before reading this chapter, you should:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:84
+msgid "Understand basic FreeBSD and Internet concepts."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:89
+msgid ""
+"Since all firewalls are based on inspecting the values of selected packet "
+"control fields, the creator of the firewall ruleset must have an "
+"understanding of how TCP/IP works, what the different values in the packet "
+"control fields are, and how these values are used in a normal session "
+"conversation. For a good introduction, refer to http://www.ipprimer."
+"com[Daryl's TCP/IP Primer]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:92
+#, no-wrap
+msgid "Firewall Concepts"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:100
+msgid ""
+"A ruleset contains a group of rules which pass or block packets based on the "
+"values contained in the packet. The bi-directional exchange of packets "
+"between hosts comprises a session conversation. The firewall ruleset "
+"processes both the packets arriving from the public Internet, as well as the "
+"packets produced by the system as a response to them. Each TCP/IP service "
+"is predefined by its protocol and listening port. Packets destined for a "
+"specific service originate from the source address using an unprivileged "
+"port and target the specific service port on the destination address. All "
+"the above parameters can be used as selection criteria to create rules which "
+"will pass or block services."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:103
+msgid ""
+"To lookup unknown port numbers, refer to [.filename]#/etc/services#. "
+"Alternatively, visit http://en.wikipedia.org/wiki/"
+"List_of_TCP_and_UDP_port_numbers[http://en.wikipedia.org/wiki/"
+"List_of_TCP_and_UDP_port_numbers] and do a port number lookup to find the "
+"purpose of a particular port number."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:105
+msgid ""
+"Check out this link for http://web.archive.org/web/20150803024617/http://www."
+"sans.org/security-resources/idfaq/oddports.php[port numbers used by Trojans]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:110
+msgid ""
+"FTP has two modes: active mode and passive mode. The difference is in how "
+"the data channel is acquired. Passive mode is more secure as the data "
+"channel is acquired by the ordinal ftp session requester. For a good "
+"explanation of FTP and the different modes, see http://www.slacksite.com/"
+"other/ftp.html[http://www.slacksite.com/other/ftp.html]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:114
+msgid ""
+"A firewall ruleset can be either \"exclusive\" or \"inclusive\". An "
+"exclusive firewall allows all traffic through except for the traffic "
+"matching the ruleset. An inclusive firewall does the reverse as it only "
+"allows traffic matching the rules through and blocks everything else."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:119
+msgid ""
+"An inclusive firewall offers better control of the outgoing traffic, making "
+"it a better choice for systems that offer services to the public Internet. "
+"It also controls the type of traffic originating from the public Internet "
+"that can gain access to a private network. All traffic that does not match "
+"the rules is blocked and logged. Inclusive firewalls are generally safer "
+"than exclusive firewalls because they significantly reduce the risk of "
+"allowing unwanted traffic."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:123
+msgid ""
+"Unless noted otherwise, all configuration and example rulesets in this "
+"chapter create inclusive firewall rulesets."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:127
+msgid ""
+"Security can be tightened further using a \"stateful firewall\". This type "
+"of firewall keeps track of open connections and only allows traffic which "
+"either matches an existing connection or opens a new, allowed connection."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:132
+msgid ""
+"Stateful filtering treats traffic as a bi-directional exchange of packets "
+"comprising a session. When state is specified on a matching rule the "
+"firewall dynamically generates internal rules for each anticipated packet "
+"being exchanged during the session. It has sufficient matching capabilities "
+"to determine if a packet is valid for a session. Any packets that do not "
+"properly fit the session template are automatically rejected."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:134
+msgid "When the session completes, it is removed from the dynamic state table."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:139
+msgid ""
+"Stateful filtering allows one to focus on blocking/passing new sessions. If "
+"the new session is passed, all its subsequent packets are allowed "
+"automatically and any impostor packets are automatically rejected. If a new "
+"session is blocked, none of its subsequent packets are allowed. Stateful "
+"filtering provides advanced matching abilities capable of defending against "
+"the flood of different attack methods employed by attackers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:143
+msgid ""
+"NAT stands for _Network Address Translation_. NAT function enables the "
+"private LAN behind the firewall to share a single ISP-assigned IP address, "
+"even if that address is dynamically assigned. NAT allows each computer in "
+"the LAN to have Internet access, without having to pay the ISP for multiple "
+"Internet accounts or IP addresses."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:146
+msgid ""
+"NAT will automatically translate the private LAN IP address for each system "
+"on the LAN to the single public IP address as packets exit the firewall "
+"bound for the public Internet. It also performs the reverse translation for "
+"returning packets."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:148
+msgid ""
+"According to RFC 1918, the following IP address ranges are reserved for "
+"private networks which will never be routed directly to the public Internet, "
+"and therefore are available for use with NAT:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:150
+msgid "`10.0.0.0/8`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:151
+msgid "`172.16.0.0/12`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:152
+msgid "`192.168.0.0/16`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:158
+msgid ""
+"When working with the firewall rules, be _very careful_. Some "
+"configurations _can lock the administrator out_ of the server. To be on the "
+"safe side, consider performing the initial firewall configuration from the "
+"local console rather than doing it remotely over ssh."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:161
+#, no-wrap
+msgid "PF"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:165
+msgid ""
+"Since FreeBSD 5.3, a ported version of OpenBSD's PF firewall has been "
+"included as an integrated part of the base system. PF is a complete, full-"
+"featured firewall that has optional support for ALTQ (Alternate Queuing), "
+"which provides Quality of Service (QoS)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:168
+msgid ""
+"The OpenBSD Project maintains the definitive reference for PF in the http://"
+"www.openbsd.org/faq/pf/[PF FAQ]. Peter Hansteen maintains a thorough PF "
+"tutorial at http://home.nuug.no/\\~peter/pf/[http://home.nuug.no/~peter/pf/]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:173
+msgid ""
+"When reading the http://www.openbsd.org/faq/pf/[PF FAQ], keep in mind that "
+"FreeBSD's version of PF has diverged substantially from the upstream OpenBSD "
+"version over the years. Not all features work the same way on FreeBSD as "
+"they do in OpenBSD and vice versa."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:177
+msgid ""
+"The {freebsd-pf} is a good place to ask questions about configuring and "
+"running the PF firewall. Check the mailing list archives before asking a "
+"question as it may have already been answered."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:181
+msgid ""
+"This section of the Handbook focuses on PF as it pertains to FreeBSD. It "
+"demonstrates how to enable PF and ALTQ. It also provides several examples "
+"for creating rulesets on a FreeBSD system."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:182
+#, no-wrap
+msgid "Enabling PF"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:186
+msgid ""
+"To use PF, its kernel module must be first loaded. This section describes "
+"the entries that can be added to [.filename]#/etc/rc.conf# to enable PF."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:188
+msgid "Start by adding `pf_enable=yes` to [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:192
+#, no-wrap
+msgid "# sysrc pf_enable=yes\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:196
+msgid ""
+"Additional options, described in man:pfctl[8], can be passed to PF when it "
+"is started. Add or change this entry in [.filename]#/etc/rc.conf# and "
+"specify any required flags between the two quotes (`\"\"`):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:200
+#, no-wrap
+msgid "pf_flags=\"\" # additional flags for pfctl startup\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:206
+msgid ""
+"PF will not start if it cannot find its ruleset configuration file. By "
+"default, FreeBSD does not ship with a ruleset and there is no [.filename]#/"
+"etc/pf.conf#. Example rulesets can be found in [.filename]#/usr/share/"
+"examples/pf/#. If a custom ruleset has been saved somewhere else, add a "
+"line to [.filename]#/etc/rc.conf# which specifies the full path to the file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:210
+#, no-wrap
+msgid "pf_rules=\"/path/to/pf.conf\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:214
+msgid ""
+"Logging support for PF is provided by man:pflog[4]. To enable logging "
+"support, add `pflog_enable=yes` to [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:218
+#, no-wrap
+msgid "# sysrc pflog_enable=yes\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:221
+msgid ""
+"The following lines can also be added to change the default location of the "
+"log file or to specify any additional flags to pass to man:pflog[4] when it "
+"is started:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:226
+#, no-wrap
+msgid ""
+"pflog_logfile=\"/var/log/pflog\" # where pflogd should store the logfile\n"
+"pflog_flags=\"\" # additional flags for pflogd startup\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:229
+msgid ""
+"Finally, if there is a LAN behind the firewall and packets need to be "
+"forwarded for the computers on the LAN, or NAT is required, enable the "
+"following option:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:233
+#, no-wrap
+msgid "gateway_enable=\"YES\" # Enable as LAN gateway\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:236
+msgid ""
+"After saving the needed edits, PF can be started with logging support by "
+"typing:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:241
+#, no-wrap
+msgid ""
+"# service pf start\n"
+"# service pflog start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:246
+msgid ""
+"By default, PF reads its configuration rules from [.filename]#/etc/pf.conf# "
+"and modifies, drops, or passes packets according to the rules or definitions "
+"specified in this file. The FreeBSD installation includes several sample "
+"files located in [.filename]#/usr/share/examples/pf/#. Refer to the http://"
+"www.openbsd.org/faq/pf/[PF FAQ] for complete coverage of PF rulesets."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:250
+msgid ""
+"To control PF, use `pfctl`. <<pfctl>> summarizes some useful options to "
+"this command. Refer to man:pfctl[8] for a description of all available "
+"options:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:251
+#, no-wrap
+msgid "Useful `pfctl` Options"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:255
+#, no-wrap
+msgid "Command"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:257
+#, no-wrap
+msgid "Purpose"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:258
+#, no-wrap
+msgid "`pfctl -e`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:260
+#, no-wrap
+msgid "Enable PF."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:261
+#, no-wrap
+msgid "`pfctl -d`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:263
+#, no-wrap
+msgid "Disable PF."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:264
+#, no-wrap
+msgid "`pfctl -F all -f /etc/pf.conf`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:266
+#, no-wrap
+msgid "Flush all NAT, filter, state, and table rules and reload [.filename]#/etc/pf.conf#."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:266
+#, no-wrap
+msgid "`pfctl -s [ rules \\"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:266
+#, no-wrap
+msgid "nat \\"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:267
+#, no-wrap
+msgid "states ]`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:269
+#, no-wrap
+msgid "Report on the filter rules, NAT rules, or state table."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:270
+#, no-wrap
+msgid "`pfctl -vnf /etc/pf.conf`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:271
+#, no-wrap
+msgid "Check [.filename]#/etc/pf.conf# for errors, but do not load ruleset."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:277
+msgid ""
+"package:security/sudo[] is useful for running commands like `pfctl` that "
+"require elevated privileges. It can be installed from the Ports Collection."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:281
+msgid ""
+"To keep an eye on the traffic that passes through the PF firewall, consider "
+"installing the package:sysutils/pftop[] package or port. Once installed, "
+"pftop can be run to view a running snapshot of traffic in a format which is "
+"similar to man:top[1]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:283
+#, no-wrap
+msgid "PF Rulesets"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:287
+msgid ""
+"This section demonstrates how to create a customized ruleset. It starts "
+"with the simplest of rulesets and builds upon its concepts using several "
+"examples to demonstrate real-world usage of PF's many features."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:290
+msgid ""
+"The simplest possible ruleset is for a single machine that does not run any "
+"services and which needs access to one network, which may be the Internet. "
+"To create this minimal ruleset, edit [.filename]#/etc/pf.conf# so it looks "
+"like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:295
+#, no-wrap
+msgid ""
+"block in all\n"
+"pass out all keep state\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:301
+msgid ""
+"The first rule denies all incoming traffic by default. The second rule "
+"allows connections created by this system to pass out, while retaining state "
+"information on those connections. This state information allows return "
+"traffic for those connections to pass back and should only be used on "
+"machines that can be trusted. The ruleset can be loaded with:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:305
+#, no-wrap
+msgid "# pfctl -e ; pfctl -f /etc/pf.conf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:310
+msgid ""
+"In addition to keeping state, PF provides _lists_ and _macros_ which can be "
+"defined for use when creating rules. Macros can include lists and need to "
+"be defined before use. As an example, insert these lines at the very top of "
+"the ruleset:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:315
+#, no-wrap
+msgid ""
+"tcp_services = \"{ ssh, smtp, domain, www, pop3, auth, pop3s }\"\n"
+"udp_services = \"{ domain }\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:322
+msgid ""
+"PF understands port names as well as port numbers, as long as the names are "
+"listed in [.filename]#/etc/services#. This example creates two macros. The "
+"first is a list of seven TCP port names and the second is one UDP port "
+"name. Once defined, macros can be used in rules. In this example, all "
+"traffic is blocked except for the connections initiated by this system for "
+"the seven specified TCP services and the one specified UDP service:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:330
+#, no-wrap
+msgid ""
+"tcp_services = \"{ ssh, smtp, domain, www, pop3, auth, pop3s }\"\n"
+"udp_services = \"{ domain }\"\n"
+"block all\n"
+"pass out proto tcp to any port $tcp_services keep state\n"
+"pass proto udp to any port $udp_services keep state\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:334
+msgid ""
+"Even though UDP is considered to be a stateless protocol, PF is able to "
+"track some state information. For example, when a UDP request is passed "
+"which asks a name server about a domain name, PF will watch for the response "
+"to pass it back."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:336
+msgid ""
+"Whenever an edit is made to a ruleset, the new rules must be loaded so they "
+"can be used:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:340
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:558
+#, no-wrap
+msgid "# pfctl -f /etc/pf.conf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:344
+msgid ""
+"If there are no syntax errors, `pfctl` will not output any messages during "
+"the rule load. Rules can also be tested before attempting to load them:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:348
+#, no-wrap
+msgid "# pfctl -nf /etc/pf.conf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:353
+msgid ""
+"Including `-n` causes the rules to be interpreted only, but not loaded. "
+"This provides an opportunity to correct any errors. At all times, the last "
+"valid ruleset loaded will be enforced until either PF is disabled or a new "
+"ruleset is loaded."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:358
+msgid ""
+"Adding `-v` to a `pfctl` ruleset verify or load will display the fully "
+"parsed rules exactly the way they will be loaded. This is extremely useful "
+"when debugging rules."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:361
+#, no-wrap
+msgid "A Simple Gateway with NAT"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:366
+msgid ""
+"This section demonstrates how to configure a FreeBSD system running PF to "
+"act as a gateway for at least one other machine. The gateway needs at least "
+"two network interfaces, each connected to a separate network. In this "
+"example, [.filename]#xl0# is connected to the Internet and [.filename]#xl1# "
+"is connected to the internal network."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:369
+msgid ""
+"First, enable the gateway to let the machine forward the network traffic it "
+"receives on one interface to another interface. This sysctl setting will "
+"forward IPv4 packets:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:373
+#, no-wrap
+msgid "# sysctl net.inet.ip.forwarding=1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:376
+msgid "To forward IPv6 traffic, use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:380
+#, no-wrap
+msgid "# sysctl net.inet6.ip6.forwarding=1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:383
+msgid ""
+"To enable these settings at system boot, use man:sysrc[8] to add them to [."
+"filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:388
+#, no-wrap
+msgid ""
+"# sysrc gateway_enable=yes\n"
+"# sysrc ipv6_gateway_enable=yes\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:391
+msgid "Verify with `ifconfig` that both of the interfaces are up and running."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:394
+msgid ""
+"Next, create the PF rules to allow the gateway to pass traffic. While the "
+"following rule allows stateful traffic from hosts of the internal network to "
+"pass to the gateway, the `to` keyword does not guarantee passage all the way "
+"from source to destination:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:398
+#, no-wrap
+msgid "pass in on xl1 from xl1:network to xl0:network port $ports keep state\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:402
+msgid ""
+"That rule only lets the traffic pass in to the gateway on the internal "
+"interface. To let the packets go further, a matching rule is needed:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:406
+#, no-wrap
+msgid "pass out on xl0 from xl1:network to xl0:network port $ports keep state\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:412
+msgid ""
+"While these two rules will work, rules this specific are rarely needed. For "
+"a busy network admin, a readable ruleset is a safer ruleset. The remainder "
+"of this section demonstrates how to keep the rules as simple as possible for "
+"readability. For example, those two rules could be replaced with one rule:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:416
+#, no-wrap
+msgid "pass from xl1:network to any port $ports keep state\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:421
+msgid ""
+"The `interface:network` notation can be replaced with a macro to make the "
+"ruleset even more readable. For example, a `$localnet` macro could be "
+"defined as the network directly attached to the internal interface (`$xl1:"
+"network`). Alternatively, the definition of `$localnet` could be changed to "
+"an _IP address/netmask_ notation to denote a network, such as "
+"`192.168.100.1/24` for a subnet of private addresses."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:424
+msgid ""
+"If required, `$localnet` could even be defined as a list of networks. "
+"Whatever the specific needs, a sensible `$localnet` definition could be used "
+"in a typical pass rule as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:428
+#, no-wrap
+msgid "pass from $localnet to any port $ports keep state\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:432
+msgid ""
+"The following sample ruleset allows all traffic initiated by machines on the "
+"internal network. It first defines two macros to represent the external and "
+"internal 3COM interfaces of the gateway."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:437
+msgid ""
+"For dialup users, the external interface will use [.filename]#tun0#. For an "
+"ADSL connection, specifically those using PPP over Ethernet (PPPoE), the "
+"correct external interface is [.filename]#tun0#, not the physical Ethernet "
+"interface."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:448
+#, no-wrap
+msgid ""
+"ext_if = \"xl0\"\t# macro for external interface - use tun0 for PPPoE\n"
+"int_if = \"xl1\"\t# macro for internal interface\n"
+"localnet = $int_if:network\n"
+"# ext_if IP address could be dynamic, hence ($ext_if)\n"
+"nat on $ext_if from $localnet to any -> ($ext_if)\n"
+"block all\n"
+"pass from { lo0, $localnet } to any keep state\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:453
+msgid ""
+"This ruleset introduces the `nat` rule which is used to handle the network "
+"address translation from the non-routable addresses inside the internal "
+"network to the IP address assigned to the external interface. The "
+"parentheses surrounding the last part of the nat rule `($ext_if)` is "
+"included when the IP address of the external interface is dynamically "
+"assigned. It ensures that network traffic runs without serious "
+"interruptions even if the external IP address changes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:456
+msgid ""
+"Note that this ruleset probably allows more traffic to pass out of the "
+"network than is needed. One reasonable setup could create this macro:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:461
+#, no-wrap
+msgid ""
+"client_out = \"{ ftp-data, ftp, ssh, domain, pop3, auth, nntp, http, \\\n"
+" https, cvspserver, 2628, 5999, 8000, 8080 }\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:464
+msgid "to use in the main pass rule:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:469
+#, no-wrap
+msgid ""
+"pass inet proto tcp from $localnet to any port $client_out \\\n"
+" flags S/SA keep state\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:473
+msgid ""
+"A few other pass rules may be needed. This one enables SSH on the external "
+"interface:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:477
+#, no-wrap
+msgid "pass in inet proto tcp to $ext_if port ssh\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:480
+msgid "This macro definition and rule allows DNS and NTP for internal clients:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:485
+#, no-wrap
+msgid ""
+"udp_services = \"{ domain, ntp }\"\n"
+"pass quick inet proto { tcp, udp } to any port $udp_services keep state\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:493
+msgid ""
+"Note the `quick` keyword in this rule. Since the ruleset consists of "
+"several rules, it is important to understand the relationships between the "
+"rules in a ruleset. Rules are evaluated from top to bottom, in the sequence "
+"they are written. For each packet or connection evaluated by PF, _the last "
+"matching rule_ in the ruleset is the one which is applied. However, when a "
+"packet matches a rule which contains the `quick` keyword, the rule "
+"processing stops and the packet is treated according to that rule. This is "
+"very useful when an exception to the general rules is needed."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:495
+#, no-wrap
+msgid "Creating an FTP Proxy"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:500
+msgid ""
+"Configuring working FTP rules can be problematic due to the nature of the "
+"FTP protocol. FTP pre-dates firewalls by several decades and is insecure in "
+"its design. The most common points against using FTP include:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:502
+msgid "Passwords are transferred in the clear."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:503
+msgid ""
+"The protocol demands the use of at least two TCP connections (control and "
+"data) on separate ports."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:504
+msgid ""
+"When a session is established, data is communicated using randomly selected "
+"ports."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:507
+msgid ""
+"All of these points present security challenges, even before considering any "
+"potential security weaknesses in client or server software. More secure "
+"alternatives for file transfer exist, such as man:sftp[1] or man:scp[1], "
+"which both feature authentication and data transfer over encrypted "
+"connections."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:510
+msgid ""
+"For those situations when FTP is required, PF provides redirection of FTP "
+"traffic to a small proxy program called man:ftp-proxy[8], which is included "
+"in the base system of FreeBSD. The role of the proxy is to dynamically "
+"insert and delete rules in the ruleset, using a set of anchors, to correctly "
+"handle FTP traffic."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:512
+msgid "To enable the FTP proxy, add this line to [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:516
+#, no-wrap
+msgid "ftpproxy_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:519
+msgid "Then start the proxy by running:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:523
+#, no-wrap
+msgid "# service ftp-proxy start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:527
+msgid ""
+"For a basic configuration, three elements need to be added to [.filename]#/"
+"etc/pf.conf#. First, the anchors which the proxy will use to insert the "
+"rules it generates for the FTP sessions:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:532
+#, no-wrap
+msgid ""
+"nat-anchor \"ftp-proxy/*\"\n"
+"rdr-anchor \"ftp-proxy/*\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:535
+msgid "Second, a pass rule is needed to allow FTP traffic in to the proxy."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:538
+msgid ""
+"Third, redirection and NAT rules need to be defined before the filtering "
+"rules. Insert this `rdr` rule immediately after the `nat` rule:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:542
+#, no-wrap
+msgid "rdr pass on $int_if proto tcp from any to any port ftp -> 127.0.0.1 port 8021\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:545
+msgid "Finally, allow the redirected traffic to pass:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:549
+#, no-wrap
+msgid "pass out proto tcp from $proxy to any port ftp\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:552
+msgid "where `$proxy` expands to the address the proxy daemon is bound to."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:554
+msgid ""
+"Save [.filename]#/etc/pf.conf#, load the new rules, and verify from a client "
+"that FTP connections are working:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:564
+msgid ""
+"This example covers a basic setup where the clients in the local network "
+"need to contact FTP servers elsewhere. This basic configuration should work "
+"well with most combinations of FTP clients and servers. As shown in man:ftp-"
+"proxy[8], the proxy's behavior can be changed in various ways by adding "
+"options to the `ftpproxy_flags=` line. Some clients or servers may have "
+"specific quirks that must be compensated for in the configuration, or there "
+"may be a need to integrate the proxy in specific ways such as assigning FTP "
+"traffic to a specific queue."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:566
+msgid ""
+"For ways to run an FTP server protected by PF and man:ftp-proxy[8], "
+"configure a separate `ftp-proxy` in reverse mode, using `-R`, on a separate "
+"port with its own redirecting pass rule."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:568
+#, no-wrap
+msgid "Managing ICMP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:571
+msgid ""
+"Many of the tools used for debugging or troubleshooting a TCP/IP network "
+"rely on the Internet Control Message Protocol (ICMP), which was designed "
+"specifically with debugging in mind."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:574
+msgid ""
+"The ICMP protocol sends and receives _control messages_ between hosts and "
+"gateways, mainly to provide feedback to a sender about any unusual or "
+"difficult conditions enroute to the target host. Routers use ICMP to "
+"negotiate packet sizes and other transmission parameters in a process often "
+"referred to as _path MTU discovery_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:578
+msgid ""
+"From a firewall perspective, some ICMP control messages are vulnerable to "
+"known attack vectors. Also, letting all diagnostic traffic pass "
+"unconditionally makes debugging easier, but it also makes it easier for "
+"others to extract information about the network. For these reasons, the "
+"following rule may not be optimal:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:582
+#, no-wrap
+msgid "pass inet proto icmp from any to any\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:585
+msgid ""
+"One solution is to let all ICMP traffic from the local network through while "
+"stopping all probes from outside the network:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:590
+#, no-wrap
+msgid ""
+"pass inet proto icmp from $localnet to any keep state\n"
+"pass inet proto icmp from any to $ext_if keep state\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:595
+msgid ""
+"Additional options are available which demonstrate some of PF's "
+"flexibility. For example, rather than allowing all ICMP messages, one can "
+"specify the messages used by man:ping[8] and man:traceroute[8]. Start by "
+"defining a macro for that type of message:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:599
+#, no-wrap
+msgid "icmp_types = \"echoreq\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:602
+msgid "and a rule which uses the macro:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:606
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:646
+#, no-wrap
+msgid "pass inet proto icmp all icmp-type $icmp_types keep state\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:611
+msgid ""
+"If other types of ICMP packets are needed, expand `icmp_types` to a list of "
+"those packet types. Type `more /usr/src/sbin/pfctl/pfctl_parser.c` to see "
+"the list of ICMP message types supported by PF. Refer to http://www.iana."
+"org/assignments/icmp-parameters/icmp-parameters.xhtml[http://www.iana.org/"
+"assignments/icmp-parameters/icmp-parameters.xhtml] for an explanation of "
+"each message type."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:613
+msgid ""
+"Since Unix `traceroute` uses UDP by default, another rule is needed to allow "
+"Unix `traceroute`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:618
+#, no-wrap
+msgid ""
+"# allow out the default range for traceroute(8):\n"
+"pass out on $ext_if inet proto udp from any to any port 33433 >< 33626 keep state\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:623
+msgid ""
+"Since `TRACERT.EXE` on Microsoft Windows systems uses ICMP echo request "
+"messages, only the first rule is needed to allow network traces from those "
+"systems. Unix `traceroute` can be instructed to use other protocols as "
+"well, and will use ICMP echo request messages if `-I` is used. Check the "
+"man:traceroute[8] man page for details."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:625
+#, no-wrap
+msgid "Path MTU Discovery"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:630
+msgid ""
+"Internet protocols are designed to be device independent, and one "
+"consequence of device independence is that the optimal packet size for a "
+"given connection cannot always be predicted reliably. The main constraint "
+"on packet size is the _Maximum Transmission Unit_ (MTU) which sets the upper "
+"limit on the packet size for an interface. Type `ifconfig` to view the MTUs "
+"for a system's network interfaces."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:635
+msgid ""
+"TCP/IP uses a process known as path MTU discovery to determine the right "
+"packet size for a connection. This process sends packets of varying sizes "
+"with the \"Do not fragment\" flag set, expecting an ICMP return packet of "
+"\"type 3, code 4\" when the upper limit has been reached. Type 3 means "
+"\"destination unreachable\", and code 4 is short for \"fragmentation needed, "
+"but the do-not-fragment flag is set\". To allow path MTU discovery in order "
+"to support connections to other MTUs, add the `destination unreachable` type "
+"to the `icmp_types` macro:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:639
+#, no-wrap
+msgid "icmp_types = \"{ echoreq, unreach }\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:642
+msgid ""
+"Since the pass rule already uses that macro, it does not need to be modified "
+"to support the new ICMP type:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:650
+msgid ""
+"PF allows filtering on all variations of ICMP types and codes. The list of "
+"possible types and codes are documented in man:icmp[4] and man:icmp6[4]."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:652
+#, no-wrap
+msgid "Using Tables"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:657
+msgid ""
+"Some types of data are relevant to filtering and redirection at a given "
+"time, but their definition is too long to be included in the ruleset file. "
+"PF supports the use of tables, which are defined lists that can be "
+"manipulated without needing to reload the entire ruleset, and which can "
+"provide fast lookups. Table names are always enclosed within `< >`, like "
+"this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:661
+#, no-wrap
+msgid "table <clients> { 192.168.2.0/24, !192.168.2.5 }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:665
+msgid ""
+"In this example, the `192.168.2.0/24` network is part of the table, except "
+"for the address `192.168.2.5`, which is excluded using the `!` operator. It "
+"is also possible to load tables from files where each item is on a separate "
+"line, as seen in this example [.filename]#/etc/clients#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:670
+#, no-wrap
+msgid ""
+"192.168.2.0/24\n"
+"!192.168.2.5\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:673
+msgid "To refer to the file, define the table like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:677
+#, no-wrap
+msgid "table <clients> persist file \"/etc/clients\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:680
+msgid "Once the table is defined, it can be referenced by a rule:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:684
+#, no-wrap
+msgid "pass inet proto tcp from <clients> to any port $client_out flags S/SA keep state\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:688
+msgid ""
+"A table's contents can be manipulated live, using `pfctl`. This example "
+"adds another network to the table:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:692
+#, no-wrap
+msgid "# pfctl -t clients -T add 192.168.1.0/16\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:698
+msgid ""
+"Note that any changes made this way will take affect now, making them ideal "
+"for testing, but will not survive a power failure or reboot. To make the "
+"changes permanent, modify the definition of the table in the ruleset or edit "
+"the file that the table refers to. One can maintain the on-disk copy of the "
+"table using a man:cron[8] job which dumps the table's contents to disk at "
+"regular intervals, using a command such as `pfctl -t clients -T show >/etc/"
+"clients`. Alternatively, [.filename]#/etc/clients# can be updated with the "
+"in-memory table contents:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:702
+#, no-wrap
+msgid "# pfctl -t clients -T replace -f /etc/clients\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:705
+#, no-wrap
+msgid "Using Overload Tables to Protect SSH"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:708
+msgid ""
+"Those who run SSH on an external interface have probably seen something like "
+"this in the authentication logs:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:717
+#, no-wrap
+msgid ""
+"Sep 26 03:12:34 skapet sshd[25771]: Failed password for root from 200.72.41.31 port 40992 ssh2\n"
+"Sep 26 03:12:34 skapet sshd[5279]: Failed password for root from 200.72.41.31 port 40992 ssh2\n"
+"Sep 26 03:12:35 skapet sshd[5279]: Received disconnect from 200.72.41.31: 11: Bye Bye\n"
+"Sep 26 03:12:44 skapet sshd[29635]: Invalid user admin from 200.72.41.31\n"
+"Sep 26 03:12:44 skapet sshd[24703]: input_userauth_request: invalid user admin\n"
+"Sep 26 03:12:44 skapet sshd[24703]: Failed password for invalid user admin from 200.72.41.31 port 41484 ssh2\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:720
+msgid ""
+"This is indicative of a brute force attack where somebody or some program is "
+"trying to discover the user name and password which will let them into the "
+"system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:725
+msgid ""
+"If external SSH access is needed for legitimate users, changing the default "
+"port used by SSH can offer some protection. However, PF provides a more "
+"elegant solution. Pass rules can contain limits on what connecting hosts "
+"can do and violators can be banished to a table of addresses which are "
+"denied some or all access. It is even possible to drop all existing "
+"connections from machines which overreach the limits."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:727
+msgid ""
+"To configure this, create this table in the tables section of the ruleset:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:731
+#, no-wrap
+msgid "table <bruteforce> persist\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:734
+msgid ""
+"Then, somewhere early in the ruleset, add rules to block brute access while "
+"allowing legitimate access:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:742
+#, no-wrap
+msgid ""
+"block quick from <bruteforce>\n"
+"pass inet proto tcp from any to $localnet port $tcp_services \\\n"
+" flags S/SA keep state \\\n"
+" (max-src-conn 100, max-src-conn-rate 15/5, \\\n"
+" overload <bruteforce> flush global)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:746
+msgid ""
+"The part in parentheses defines the limits and the numbers should be changed "
+"to meet local requirements. It can be read as follows:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:748
+msgid ""
+"`max-src-conn` is the number of simultaneous connections allowed from one "
+"host."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:750
+msgid ""
+"`max-src-conn-rate` is the rate of new connections allowed from any single "
+"host (_15_) per number of seconds (_5_)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:753
+msgid ""
+"`overload <bruteforce>` means that any host which exceeds these limits gets "
+"its address added to the `bruteforce` table. The ruleset blocks all traffic "
+"from addresses in the `bruteforce` table."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:755
+msgid ""
+"Finally, `flush global` says that when a host reaches the limit, that all "
+"(`global`) of that host's connections will be terminated (`flush`)."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:759
+msgid ""
+"These rules will _not_ block slow bruteforcers, as described in http://home."
+"nuug.no/\\~peter/hailmary2013/[http://home.nuug.no/~peter/hailmary2013/]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:763
+msgid ""
+"This example ruleset is intended mainly as an illustration. For example, if "
+"a generous number of connections in general are wanted, but the desire is to "
+"be more restrictive when it comes to ssh, supplement the rule above with "
+"something like the one below, early on in the rule set:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:770
+#, no-wrap
+msgid ""
+"pass quick proto { tcp, udp } from any to any port ssh \\\n"
+" flags S/SA keep state \\\n"
+" (max-src-conn 15, max-src-conn-rate 5/3, \\\n"
+" overload <bruteforce> flush global)\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:775
+#, no-wrap
+msgid "*It May Not be Necessary to Block All Overloaders:* +\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:777
+msgid ""
+"It is worth noting that the overload mechanism is a general technique which "
+"does not apply exclusively to SSH, and it is not always optimal to entirely "
+"block all traffic from offenders."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:779
+msgid ""
+"For example, an overload rule could be used to protect a mail service or a "
+"web service, and the overload table could be used in a rule to assign "
+"offenders to a queue with a minimal bandwidth allocation or to redirect to a "
+"specific web page."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:783
+msgid ""
+"Over time, tables will be filled by overload rules and their size will grow "
+"incrementally, taking up more memory. Sometimes an IP address that is "
+"blocked is a dynamically assigned one, which has since been assigned to a "
+"host who has a legitimate reason to communicate with hosts in the local "
+"network."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:786
+msgid ""
+"For situations like these, pfctl provides the ability to expire table "
+"entries. For example, this command will remove `<bruteforce>` table entries "
+"which have not been referenced for `86400` seconds:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:790
+#, no-wrap
+msgid "# pfctl -t bruteforce -T expire 86400\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:793
+msgid ""
+"Similar functionality is provided by package:security/expiretable[], which "
+"removes table entries which have not been accessed for a specified period of "
+"time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:796
+msgid ""
+"Once installed, expiretable can be run to remove `<bruteforce>` table "
+"entries older than a specified age. This example removes all entries older "
+"than 24 hours:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:800
+#, no-wrap
+msgid "/usr/local/sbin/expiretable -v -d -t 24h bruteforce\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:803
+#, no-wrap
+msgid "Protecting Against SPAM"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:807
+msgid ""
+"Not to be confused with the spamd daemon which comes bundled with "
+"spamassassin, package:mail/spamd[] can be configured with PF to provide an "
+"outer defense against SPAM. This spamd hooks into the PF configuration "
+"using a set of redirections."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:809
+msgid ""
+"Spammers tend to send a large number of messages, and SPAM is mainly sent "
+"from a few spammer friendly networks and a large number of hijacked "
+"machines, both of which are reported to _blocklists_ fairly quickly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:813
+msgid ""
+"When an SMTP connection from an address in a blocklist is received, spamd "
+"presents its banner and immediately switches to a mode where it answers SMTP "
+"traffic one byte at a time. This technique, which is intended to waste as "
+"much time as possible on the spammer's end, is called _tarpitting_. The "
+"specific implementation which uses one byte SMTP replies is often referred "
+"to as _stuttering_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:816
+msgid ""
+"This example demonstrates the basic procedure for setting up spamd with "
+"automatically updated blocklists. Refer to the man pages which are "
+"installed with package:mail/spamd[] for more information."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:819
+#, no-wrap
+msgid "Procedure: Configuring spamd"
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:821
+msgid ""
+"Install the package:mail/spamd[] package or port. To use spamd's greylisting "
+"features, man:fdescfs[5] must be mounted at [.filename]#/dev/fd#. Add the "
+"following line to [.filename]#/etc/fstab#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:825
+#, no-wrap
+msgid " fdescfs /dev/fd fdescfs rw 0 0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:828
+msgid "Then, mount the filesystem:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:832
+#, no-wrap
+msgid "# mount fdescfs\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:835
+msgid "Next, edit the PF ruleset to include:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:844
+#, no-wrap
+msgid ""
+"table <spamd> persist\n"
+"table <spamd-white> persist\n"
+"rdr pass on $ext_if inet proto tcp from <spamd> to \\\n"
+" { $ext_if, $localnet } port smtp -> 127.0.0.1 port 8025\n"
+"rdr pass on $ext_if inet proto tcp from !<spamd-white> to \\\n"
+" { $ext_if, $localnet } port smtp -> 127.0.0.1 port 8025\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:848
+msgid ""
+"The two tables `<spamd>` and `<spamd-white>` are essential. SMTP traffic "
+"from an address listed in `<spamd>` but not in `<spamd-white>` is redirected "
+"to the spamd daemon listening at port 8025."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:849
+msgid ""
+"The next step is to configure spamd in [.filename]#/usr/local/etc/spamd."
+"conf# and to add some [.filename]#rc.conf# parameters."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:852
+msgid ""
+"The installation of package:mail/spamd[] includes a sample configuration "
+"file ([.filename]#/usr/local/etc/spamd.conf.sample#) and a man page for [."
+"filename]#spamd.conf#. Refer to these for additional configuration options "
+"beyond those shown in this example."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:854
+msgid ""
+"One of the first lines in the configuration file that does not begin with a "
+"`+#+` comment sign contains the block which defines the `all` list, which "
+"specifies the lists to use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:859
+#, no-wrap
+msgid ""
+"all:\\\n"
+" :traplist:allowlist:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:862
+msgid ""
+"This entry adds the desired blocklists, separated by colons (`:`). To use "
+"an allowlist to subtract addresses from a blocklist, add the name of the "
+"allowlist _immediately_ after the name of that blocklist. For example: `:"
+"blocklist:allowlist:`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:864
+msgid "This is followed by the specified blocklist's definition:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:872
+#, no-wrap
+msgid ""
+"traplist:\\\n"
+" :black:\\\n"
+" :msg=\"SPAM. Your address %A has sent spam within the last 24 hours\":\\\n"
+" :method=http:\\\n"
+" :file=www.openbsd.org/spamd/traplist.gz\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:878
+msgid ""
+"where the first line is the name of the blocklist and the second line "
+"specifies the list type. The `msg` field contains the message to display to "
+"blocklisted senders during the SMTP dialogue. The `method` field specifies "
+"how spamd-setup fetches the list data; supported methods are `http`, `ftp`, "
+"from a `file` in a mounted file system, and via `exec` of an external "
+"program. Finally, the `file` field specifies the name of the file spamd "
+"expects to receive."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:880
+msgid ""
+"The definition of the specified allowlist is similar, but omits the `msg` "
+"field since a message is not needed:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:887
+#, no-wrap
+msgid ""
+"allowlist:\\\n"
+" :white:\\\n"
+" :method=file:\\\n"
+" :file=/var/mail/allowlist.txt\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:892
+#, no-wrap
+msgid "*Choose Data Sources with Care:* +\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:895
+msgid ""
+"Using all the blocklists in the sample [.filename]#spamd.conf# will block "
+"large blocks of the Internet. Administrators need to edit the file to "
+"create an optimal configuration which uses applicable data sources and, when "
+"necessary, uses custom lists."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:899
+msgid ""
+"Next, add this entry to [.filename]#/etc/rc.conf#. Additional flags are "
+"described in the man page specified by the comment:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:903
+#, no-wrap
+msgid "spamd_flags=\"-v\" # use \"\" and see spamd-setup(8) for flags\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:907
+msgid ""
+"When finished, reload the ruleset, start spamd by typing `service obspamd "
+"start`, and complete the configuration using `spamd-setup`. Finally, create "
+"a man:cron[8] job which calls `spamd-setup` to update the tables at "
+"reasonable intervals."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:910
+msgid ""
+"On a typical gateway in front of a mail server, hosts will soon start "
+"getting trapped within a few seconds to several minutes."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:914
+msgid ""
+"PF also supports _greylisting_, which temporarily rejects messages from "
+"unknown hosts with _45n_ codes. Messages from greylisted hosts which try "
+"again within a reasonable time are let through. Traffic from senders which "
+"are set up to behave within the limits set by RFC 1123 and RFC 2821 are "
+"immediately let through."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:918
+msgid ""
+"More information about greylisting as a technique can be found at the http://"
+"www.greylisting.org/[greylisting.org] web site. The most amazing thing "
+"about greylisting, apart from its simplicity, is that it still works. "
+"Spammers and malware writers have been very slow to adapt to bypass this "
+"technique."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:920
+msgid "The basic procedure for configuring greylisting is as follows:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:922
+#, no-wrap
+msgid "Procedure: Configuring Greylisting"
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:924
+msgid ""
+"Make sure that man:fdescfs[5] is mounted as described in Step 1 of the "
+"previous Procedure."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:925
+msgid ""
+"To run spamd in greylisting mode, add this line to [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:929
+#, no-wrap
+msgid "spamd_grey=\"YES\" # use spamd greylisting if YES\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:932
+msgid ""
+"Refer to the spamd man page for descriptions of additional related "
+"parameters."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:933
+msgid "To complete the greylisting setup:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:938
+#, no-wrap
+msgid ""
+"# service obspamd restart\n"
+"# service obspamlogd start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:942
+msgid ""
+"Behind the scenes, the spamdb database tool and the spamlogd whitelist "
+"updater perform essential functions for the greylisting feature. spamdb is "
+"the administrator's main interface to managing the block, grey, and allow "
+"lists via the contents of the [.filename]#/var/db/spamdb# database."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:944
+#, no-wrap
+msgid "Network Hygiene"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:947
+msgid ""
+"This section describes how `block-policy`, `scrub`, and `antispoof` can be "
+"used to make the ruleset behave sanely."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:951
+msgid ""
+"The `block-policy` is an option which can be set in the `options` part of "
+"the ruleset, which precedes the redirection and filtering rules. This "
+"option determines which feedback, if any, PF sends to hosts that are blocked "
+"by a rule. The option has two possible values: `drop` drops blocked packets "
+"with no feedback, and `return` returns a status code such as `Connection "
+"refused`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:954
+msgid ""
+"If not set, the default policy is `drop`. To change the `block-policy`, "
+"specify the desired value:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:958
+#, no-wrap
+msgid "set block-policy return\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:964
+msgid ""
+"In PF, `scrub` is a keyword which enables network packet normalization. "
+"This process reassembles fragmented packets and drops TCP packets that have "
+"invalid flag combinations. Enabling `scrub` provides a measure of "
+"protection against certain kinds of attacks based on incorrect handling of "
+"packet fragments. A number of options are available, but the simplest form "
+"is suitable for most configurations:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:968
+#, no-wrap
+msgid "scrub in all\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:972
+msgid ""
+"Some services, such as NFS, require specific fragment handling options. "
+"Refer to https://home.nuug.no/\\~peter/pf/en/scrub.html[https://home.nuug.no/"
+"~peter/pf/en/scrub.html] for more information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:974
+msgid ""
+"This example reassembles fragments, clears the \"do not fragment\" bit, and "
+"sets the maximum segment size to 1440 bytes:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:978
+#, no-wrap
+msgid "scrub in all fragment reassemble no-df max-mss 1440\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:981
+msgid ""
+"The `antispoof` mechanism protects against activity from spoofed or forged "
+"IP addresses, mainly by blocking packets appearing on interfaces and in "
+"directions which are logically not possible."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:983
+msgid ""
+"These rules weed out spoofed traffic coming in from the rest of the world as "
+"well as any spoofed packets which originate in the local network:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:988
+#, no-wrap
+msgid ""
+"antispoof for $ext_if\n"
+"antispoof for $int_if\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:991
+#, no-wrap
+msgid "Handling Non-Routable Addresses"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:996
+msgid ""
+"Even with a properly configured gateway to handle network address "
+"translation, one may have to compensate for other people's "
+"misconfigurations. A common misconfiguration is to let traffic with non-"
+"routable addresses out to the Internet. Since traffic from non-routeable "
+"addresses can play a part in several DoS attack techniques, consider "
+"explicitly blocking traffic from non-routeable addresses from entering the "
+"network through the external interface."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:999
+msgid ""
+"In this example, a macro containing non-routable addresses is defined, then "
+"used in blocking rules. Traffic to and from these addresses is quietly "
+"dropped on the gateway's external interface."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1005
+#, no-wrap
+msgid ""
+"martians = \"{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, \\\n"
+"\t 10.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, \\\n"
+"\t 0.0.0.0/8, 240.0.0.0/4 }\"\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1008
+#, no-wrap
+msgid ""
+"block drop in quick on $ext_if from $martians to any\n"
+"block drop out quick on $ext_if from any to $martians\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1010
+#, no-wrap
+msgid "Enabling ALTQ"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1014
+msgid ""
+"On FreeBSD, ALTQ can be used with PF to provide Quality of Service (QOS). "
+"Once ALTQ is enabled, queues can be defined in the ruleset which determine "
+"the processing priority of outbound packets."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1016
+msgid ""
+"Before enabling ALTQ, refer to man:altq[4] to determine if the drivers for "
+"the network cards installed on the system support it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1022
+msgid ""
+"ALTQ is not available as a loadable kernel module. If the system's "
+"interfaces support ALTQ, create a custom kernel using the instructions in "
+"crossref:kernelconfig[kernelconfig,Configuring the FreeBSD Kernel]. The "
+"following kernel options are available. The first is needed to enable "
+"ALTQ. At least one of the other options is necessary to specify the "
+"queueing scheduler algorithm:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1031
+#, no-wrap
+msgid ""
+"options ALTQ\n"
+"options ALTQ_CBQ # Class Based Queuing (CBQ)\n"
+"options ALTQ_RED # Random Early Detection (RED)\n"
+"options ALTQ_RIO # RED In/Out\n"
+"options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC)\n"
+"options ALTQ_PRIQ # Priority Queuing (PRIQ)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1034
+msgid "The following scheduler algorithms are available:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1035
+#, no-wrap
+msgid "CBQ"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1037
+msgid ""
+"Class Based Queuing (CBQ) is used to divide a connection's bandwidth into "
+"different classes or queues to prioritize traffic based on filter rules."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1038
+#, no-wrap
+msgid "RED"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1041
+msgid ""
+"Random Early Detection (RED) is used to avoid network congestion by "
+"measuring the length of the queue and comparing it to the minimum and "
+"maximum thresholds for the queue. When the queue is over the maximum, all "
+"new packets are randomly dropped."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1042
+#, no-wrap
+msgid "RIO"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1044
+msgid ""
+"In Random Early Detection In and Out (RIO) mode, RED maintains multiple "
+"average queue lengths and multiple threshold values, one for each QOS level."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1045
+#, no-wrap
+msgid "HFSC"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1047
+msgid ""
+"Hierarchical Fair Service Curve Packet Scheduler (HFSC) is described in "
+"http://www-2.cs.cmu.edu/\\~hzhang/HFSC/main.html[http://www-2.cs.cmu.edu/"
+"~hzhang/HFSC/main.html]."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1048
+#, no-wrap
+msgid "PRIQ"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1050
+msgid ""
+"Priority Queuing (PRIQ) always passes traffic that is in a higher queue "
+"first."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1052
+msgid ""
+"More information about the scheduling algorithms and example rulesets are "
+"available at the https://web.archive.org/web/20151109213426/http://www."
+"openbsd.org/faq/pf/queueing.html[OpenBSD's web archive]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1054
+#, no-wrap
+msgid "IPFW"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1058
+msgid ""
+"IPFW is a stateful firewall written for FreeBSD which supports both IPv4 and "
+"IPv6. It is comprised of several components: the kernel firewall filter "
+"rule processor and its integrated packet accounting facility, the logging "
+"facility, NAT, the man:dummynet[4] traffic shaper, a forward facility, a "
+"bridge facility, and an ipstealth facility."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1061
+msgid ""
+"FreeBSD provides a sample ruleset in [.filename]#/etc/rc.firewall# which "
+"defines several firewall types for common scenarios to assist novice users "
+"in generating an appropriate ruleset. IPFW provides a powerful syntax which "
+"advanced users can use to craft customized rulesets that meet the security "
+"requirements of a given environment."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1063
+msgid ""
+"This section describes how to enable IPFW, provides an overview of its rule "
+"syntax, and demonstrates several rulesets for common configuration scenarios."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1065
+#, no-wrap
+msgid "Enabling IPFW"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1068
+msgid ""
+"IPFW is included in the basic FreeBSD install as a kernel loadable module, "
+"meaning that a custom kernel is not needed in order to enable IPFW."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1070
+msgid ""
+"For those users who wish to statically compile IPFW support into a custom "
+"kernel, see <<firewalls-ipfw-kernelconfig>>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1072
+msgid ""
+"To configure the system to enable IPFW at boot time, add "
+"`firewall_enable=\"YES\"` to [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1076
+#, no-wrap
+msgid "# sysrc firewall_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1079
+msgid ""
+"To use one of the default firewall types provided by FreeBSD, add another "
+"line which specifies the type:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1083
+#, no-wrap
+msgid "# sysrc firewall_type=\"open\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1086
+msgid "The available types are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1088
+msgid "`open`: passes all traffic."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1089
+msgid "`client`: protects only this machine."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1090
+msgid "`simple`: protects the whole network."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1091
+msgid ""
+"`closed`: entirely disables IP traffic except for the loopback interface."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1092
+msgid "`workstation`: protects only this machine using stateful rules."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1093
+msgid "`UNKNOWN`: disables the loading of firewall rules."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1094
+msgid ""
+"[.filename]#filename#: full path of the file containing the firewall ruleset."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1096
+msgid ""
+"If `firewall_type` is set to either `client` or `simple`, modify the default "
+"rules found in [.filename]#/etc/rc.firewall# to fit the configuration of the "
+"system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1098
+msgid "Note that the `filename` type is used to load a custom ruleset."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1101
+msgid ""
+"An alternate way to load a custom ruleset is to set the `firewall_script` "
+"variable to the absolute path of an _executable script_ that includes IPFW "
+"commands. The examples used in this section assume that the "
+"`firewall_script` is set to [.filename]#/etc/ipfw.rules#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1105
+#, no-wrap
+msgid "# sysrc firewall_script=\"/etc/ipfw.rules\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1108
+msgid "To enable logging through man:syslogd[8], include this line:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1112
+#, no-wrap
+msgid "# sysrc firewall_logging=\"YES\"\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1120
+msgid ""
+"Only firewall rules with the `log` option will be logged. The default rules "
+"do not include this option and it must be manually added. Therefore it is "
+"advisable that the default ruleset is edited for logging. In addition, log "
+"rotation may be desired if the logs are stored in a separate file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1124
+msgid ""
+"There is no [.filename]#/etc/rc.conf# variable to set logging limits. To "
+"limit the number of times a rule is logged per connection attempt, specify "
+"the number using this line in [.filename]#/etc/sysctl.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1128
+#, no-wrap
+msgid "# echo \"net.inet.ip.fw.verbose_limit=5\" >> /etc/sysctl.conf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1131
+msgid ""
+"To enable logging through a dedicated interface named `ipfw0`, add this line "
+"to [.filename]#/etc/rc.conf# instead:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1135
+#, no-wrap
+msgid "# sysrc firewall_logif=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1138
+msgid "Then use tcpdump to see what is being logged:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1142
+#, no-wrap
+msgid "# tcpdump -t -n -i ipfw0\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1148
+msgid "There is no overhead due to logging unless tcpdump is attached."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1152
+msgid ""
+"After saving the needed edits, start the firewall. To enable logging limits "
+"now, also set the `sysctl` value specified above:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1157
+#, no-wrap
+msgid ""
+"# service ipfw start\n"
+"# sysctl net.inet.ip.fw.verbose_limit=5\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1160
+#, no-wrap
+msgid "IPFW Rule Syntax"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1168
+msgid ""
+"When a packet enters the IPFW firewall, it is compared against the first "
+"rule in the ruleset and progresses one rule at a time, moving from top to "
+"bottom in sequence. When the packet matches the selection parameters of a "
+"rule, the rule's action is executed and the search of the ruleset terminates "
+"for that packet. This is referred to as \"first match wins\". If the "
+"packet does not match any of the rules, it gets caught by the mandatory IPFW "
+"default rule number 65535, which denies all packets and silently discards "
+"them. However, if the packet matches a rule that contains the `count`, "
+"`skipto`, or `tee` keywords, the search continues. Refer to man:ipfw[8] for "
+"details on how these keywords affect rule processing."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1174
+msgid ""
+"When creating an IPFW rule, keywords must be written in the following "
+"order. Some keywords are mandatory while other keywords are optional. The "
+"words shown in uppercase represent a variable and the words shown in "
+"lowercase must precede the variable that follows it. The `+#+` symbol is "
+"used to mark the start of a comment and may appear at the end of a rule or "
+"on its own line. Blank lines are ignored."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1176
+msgid ""
+"`_CMD RULE_NUMBER set SET_NUMBER ACTION log LOG_AMOUNT PROTO from SRC "
+"SRC_PORT to DST DST_PORT OPTIONS_`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1180
+msgid ""
+"This section provides an overview of these keywords and their options. It "
+"is not an exhaustive list of every possible option. Refer to man:ipfw[8] "
+"for a complete description of the rule syntax that can be used when creating "
+"IPFW rules."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1181
+#, no-wrap
+msgid "CMD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1183
+msgid "Every rule must start with `ipfw add`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1184
+#, no-wrap
+msgid "RULE_NUMBER"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1188
+msgid ""
+"Each rule is associated with a number from `1` to `65534`. The number is "
+"used to indicate the order of rule processing. Multiple rules can have the "
+"same number, in which case they are applied according to the order in which "
+"they have been added."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1189
+#, no-wrap
+msgid "SET_NUMBER"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1193
+msgid ""
+"Each rule is associated with a set number from `0` to `31`. Sets can be "
+"individually disabled or enabled, making it possible to quickly add or "
+"delete a set of rules. If a SET_NUMBER is not specified, the rule will be "
+"added to set `0`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1194
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1940
+#, no-wrap
+msgid "ACTION"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1197
+msgid ""
+"A rule can be associated with one of the following actions. The specified "
+"action will be executed when the packet matches the selection criterion of "
+"the rule."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1199
+msgid ""
+"`allow | accept | pass | permit`: these keywords are equivalent and allow "
+"packets that match the rule."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1204
+msgid ""
+"`check-state`: checks the packet against the dynamic state table. If a "
+"match is found, execute the action associated with the rule which generated "
+"this dynamic rule, otherwise move to the next rule. A `check-state` rule "
+"does not have selection criterion. If no `check-state` rule is present in "
+"the ruleset, the dynamic rules table is checked at the first `keep-state` or "
+"`limit` rule."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1207
+msgid ""
+"`count`: updates counters for all packets that match the rule. The search "
+"continues with the next rule."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1209
+msgid ""
+"`deny | drop`: either word silently discards packets that match this rule."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1212
+msgid "Additional actions are available. Refer to man:ipfw[8] for details."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1213
+#, no-wrap
+msgid "LOG_AMOUNT"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1219
+msgid ""
+"When a packet matches a rule with the `log` keyword, a message will be "
+"logged to man:syslogd[8] with a facility name of `SECURITY`. Logging only "
+"occurs if the number of packets logged for that particular rule does not "
+"exceed a specified LOG_AMOUNT. If no LOG_AMOUNT is specified, the limit is "
+"taken from the value of `net.inet.ip.fw.verbose_limit`. A value of zero "
+"removes the logging limit. Once the limit is reached, logging can be re-"
+"enabled by clearing the logging counter or the packet counter for that rule, "
+"using `ipfw resetlog`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1224
+msgid ""
+"Logging is done after all other packet matching conditions have been met, "
+"and before performing the final action on the packet. The administrator "
+"decides which rules to enable logging on."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1226
+#, no-wrap
+msgid "PROTO"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1228
+msgid ""
+"This optional value can be used to specify any protocol name or number found "
+"in [.filename]#/etc/protocols#."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1229
+#, no-wrap
+msgid "SRC"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1234
+msgid ""
+"The `from` keyword must be followed by the source address or a keyword that "
+"represents the source address. An address can be represented by `any`, `me` "
+"(any address configured on an interface on this system), `me6`, (any IPv6 "
+"address configured on an interface on this system), or `table` followed by "
+"the number of a lookup table which contains a list of addresses. When "
+"specifying an IP address, it can be optionally followed by its CIDR mask or "
+"subnet mask. For example, `1.2.3.4/25` or `1.2.3.4:255.255.255.128`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1235
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2006
+#, no-wrap
+msgid "SRC_PORT"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1237
+msgid ""
+"An optional source port can be specified using the port number or name from "
+"[.filename]#/etc/services#."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1238
+#, no-wrap
+msgid "DST"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1241
+msgid ""
+"The `to` keyword must be followed by the destination address or a keyword "
+"that represents the destination address. The same keywords and addresses "
+"described in the SRC section can be used to describe the destination."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1242
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2019
+#, no-wrap
+msgid "DST_PORT"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1244
+msgid ""
+"An optional destination port can be specified using the port number or name "
+"from [.filename]#/etc/services#."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1245
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1970
+#, no-wrap
+msgid "OPTIONS"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1249
+msgid ""
+"Several keywords can follow the source and destination. As the name "
+"suggests, OPTIONS are optional. Commonly used options include `in` or "
+"`out`, which specify the direction of packet flow, `icmptypes` followed by "
+"the type of ICMP message, and `keep-state`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1251
+msgid ""
+"When a `keep-state` rule is matched, the firewall will create a dynamic rule "
+"which matches bidirectional traffic between the source and destination "
+"addresses and ports using the same protocol."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1256
+msgid ""
+"The dynamic rules facility is vulnerable to resource depletion from a SYN-"
+"flood attack which would open a huge number of dynamic rules. To counter "
+"this type of attack with IPFW, use `limit`. This option limits the number "
+"of simultaneous sessions by checking the open dynamic rules, counting the "
+"number of times this rule and IP address combination occurred. If this "
+"count is greater than the value specified by `limit`, the packet is "
+"discarded."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1259
+msgid ""
+"Dozens of OPTIONS are available. Refer to man:ipfw[8] for a description of "
+"each available option."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1260
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2047
+#, no-wrap
+msgid "Example Ruleset"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1265
+msgid ""
+"This section demonstrates how to create an example stateful firewall ruleset "
+"script named [.filename]#/etc/ipfw.rules#. In this example, all connection "
+"rules use `in` or `out` to clarify the direction. They also use `via` "
+"_interface-name_ to specify the interface the packet is traveling over."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1269
+msgid ""
+"When first creating or testing a firewall ruleset, consider temporarily "
+"setting this tunable:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1273
+#, no-wrap
+msgid "net.inet.ip.fw.default_to_accept=\"1\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1276
+msgid ""
+"This sets the default policy of man:ipfw[8] to be more permissive than the "
+"default `deny ip from any to any`, making it slightly more difficult to get "
+"locked out of the system right after a reboot."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1281
+msgid ""
+"The firewall script begins by indicating that it is a Bourne shell script "
+"and flushes any existing rules. It then creates the `cmd` variable so that "
+"`ipfw add` does not have to be typed at the beginning of every rule. It "
+"also defines the `pif` variable which represents the name of the interface "
+"that is attached to the Internet."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1287
+#, no-wrap
+msgid ""
+"#!/bin/sh\n"
+"# Flush out the list before we begin.\n"
+"ipfw -q -f flush\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1291
+#, no-wrap
+msgid ""
+"# Set rules command prefix\n"
+"cmd=\"ipfw -q add\"\n"
+"pif=\"dc0\" # interface name of NIC attached to Internet\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1294
+msgid ""
+"The first two rules allow all traffic on the trusted internal interface and "
+"on the loopback interface:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1299
+#, no-wrap
+msgid ""
+"# Change xl0 to LAN NIC interface name\n"
+"$cmd 00005 allow all from any to any via xl0\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1302
+#, no-wrap
+msgid ""
+"# No restrictions on Loopback Interface\n"
+"$cmd 00010 allow all from any to any via lo0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1305
+msgid ""
+"The next rule allows the packet through if it matches an existing entry in "
+"the dynamic rules table:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1309
+#, no-wrap
+msgid "$cmd 00101 check-state\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1312
+msgid ""
+"The next set of rules defines which stateful connections internal systems "
+"can create to hosts on the Internet:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1320
+#, no-wrap
+msgid ""
+"# Allow access to public DNS\n"
+"# Replace x.x.x.x with the IP address of a public DNS server\n"
+"# and repeat for each DNS server in /etc/resolv.conf\n"
+"$cmd 00110 allow tcp from any to x.x.x.x 53 out via $pif setup keep-state\n"
+"$cmd 00111 allow udp from any to x.x.x.x 53 out via $pif keep-state\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1326
+#, no-wrap
+msgid ""
+"# Allow access to ISP's DHCP server for cable/DSL configurations.\n"
+"# Use the first rule and check log for IP address.\n"
+"# Then, uncomment the second rule, input the IP address, and delete the first rule\n"
+"$cmd 00120 allow log udp from any to any 67 out via $pif keep-state\n"
+"#$cmd 00120 allow udp from any to x.x.x.x 67 out via $pif keep-state\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1330
+#, no-wrap
+msgid ""
+"# Allow outbound HTTP and HTTPS connections\n"
+"$cmd 00200 allow tcp from any to any 80 out via $pif setup keep-state\n"
+"$cmd 00220 allow tcp from any to any 443 out via $pif setup keep-state\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1334
+#, no-wrap
+msgid ""
+"# Allow outbound email connections\n"
+"$cmd 00230 allow tcp from any to any 25 out via $pif setup keep-state\n"
+"$cmd 00231 allow tcp from any to any 110 out via $pif setup keep-state\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1337
+#, no-wrap
+msgid ""
+"# Allow outbound ping\n"
+"$cmd 00250 allow icmp from any to any out via $pif keep-state\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1340
+#, no-wrap
+msgid ""
+"# Allow outbound NTP\n"
+"$cmd 00260 allow udp from any to any 123 out via $pif keep-state\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1343
+#, no-wrap
+msgid ""
+"# Allow outbound SSH\n"
+"$cmd 00280 allow tcp from any to any 22 out via $pif setup keep-state\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1346
+#, no-wrap
+msgid ""
+"# deny and log all other outbound connections\n"
+"$cmd 00299 deny log all from any to any out via $pif\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1351
+msgid ""
+"The next set of rules controls connections from Internet hosts to the "
+"internal network. It starts by denying packets typically associated with "
+"attacks and then explicitly allows specific types of connections. All the "
+"authorized services that originate from the Internet use `limit` to prevent "
+"flooding."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1364
+#, no-wrap
+msgid ""
+"# Deny all inbound traffic from non-routable reserved address spaces\n"
+"$cmd 00300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918 private IP\n"
+"$cmd 00301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918 private IP\n"
+"$cmd 00302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918 private IP\n"
+"$cmd 00303 deny all from 127.0.0.0/8 to any in via $pif #loopback\n"
+"$cmd 00304 deny all from 0.0.0.0/8 to any in via $pif #loopback\n"
+"$cmd 00305 deny all from 169.254.0.0/16 to any in via $pif #DHCP auto-config\n"
+"$cmd 00306 deny all from 192.0.2.0/24 to any in via $pif #reserved for docs\n"
+"$cmd 00307 deny all from 204.152.64.0/23 to any in via $pif #Sun cluster interconnect\n"
+"$cmd 00308 deny all from 224.0.0.0/3 to any in via $pif #Class D & E multicast\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1367
+#, no-wrap
+msgid ""
+"# Deny public pings\n"
+"$cmd 00310 deny icmp from any to any in via $pif\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1370
+#, no-wrap
+msgid ""
+"# Deny ident\n"
+"$cmd 00315 deny tcp from any to any 113 in via $pif\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1376
+#, no-wrap
+msgid ""
+"# Deny all Netbios services.\n"
+"$cmd 00320 deny tcp from any to any 137 in via $pif\n"
+"$cmd 00321 deny tcp from any to any 138 in via $pif\n"
+"$cmd 00322 deny tcp from any to any 139 in via $pif\n"
+"$cmd 00323 deny tcp from any to any 81 in via $pif\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1379
+#, no-wrap
+msgid ""
+"# Deny fragments\n"
+"$cmd 00330 deny all from any to any frag in via $pif\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1382
+#, no-wrap
+msgid ""
+"# Deny ACK packets that did not match the dynamic rule table\n"
+"$cmd 00332 deny tcp from any to any established in via $pif\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1386
+#, no-wrap
+msgid ""
+"# Allow traffic from ISP's DHCP server.\n"
+"# Replace x.x.x.x with the same IP address used in rule 00120.\n"
+"#$cmd 00360 allow udp from any to x.x.x.x 67 in via $pif keep-state\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1389
+#, no-wrap
+msgid ""
+"# Allow HTTP connections to internal web server\n"
+"$cmd 00400 allow tcp from any to me 80 in via $pif setup limit src-addr 2\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1392
+#, no-wrap
+msgid ""
+"# Allow inbound SSH connections\n"
+"$cmd 00410 allow tcp from any to me 22 in via $pif setup limit src-addr 2\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1395
+#, no-wrap
+msgid ""
+"# Reject and log all other incoming connections\n"
+"$cmd 00499 deny log all from any to any in via $pif\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1398
+msgid ""
+"The last rule logs all packets that do not match any of the rules in the "
+"ruleset:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1403
+#, no-wrap
+msgid ""
+"# Everything else is denied and logged\n"
+"$cmd 00999 deny log all from any to any\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1406
+#, no-wrap
+msgid "In-kernel NAT"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1411
+msgid ""
+"FreeBSD's IPFW firewall has two implementations of NAT: the userland "
+"implementation man:natd[8], and the more recent in-kernel NAT "
+"implementation. Both work in conjunction with IPFW to provide network "
+"address translation. This can be used to provide an Internet Connection "
+"Sharing solution so that several internal computers can connect to the "
+"Internet using a single public IP address."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1415
+msgid ""
+"To do this, the FreeBSD machine connected to the Internet must act as a "
+"gateway. This system must have two NICs, where one is connected to the "
+"Internet and the other is connected to the internal LAN. Each machine "
+"connected to the LAN should be assigned an IP address in the private network "
+"space, as defined by https://www.ietf.org/rfc/rfc1918.txt[RFC 1918]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1418
+msgid ""
+"Some additional configuration is needed in order to enable the in-kernel NAT "
+"facility of IPFW. To enable in-kernel NAT support at boot time, the "
+"following must be set in [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1424
+#, no-wrap
+msgid ""
+"gateway_enable=\"YES\"\n"
+"firewall_enable=\"YES\"\n"
+"firewall_nat_enable=\"YES\"\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1430
+msgid ""
+"When `firewall_nat_enable` is set but `firewall_enable` is not, it will have "
+"no effect and do nothing. This is because the in-kernel NAT implementation "
+"is only compatible with IPFW."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1437
+msgid ""
+"When the ruleset contains stateful rules, the positioning of the NAT rule is "
+"critical and the `skipto` action is used. The `skipto` action requires a "
+"rule number so that it knows which rule to jump to. The example below "
+"builds upon the firewall ruleset shown in the previous section. It adds "
+"some additional entries and modifies some existing rules in order to "
+"configure the firewall for in-kernel NAT. It starts by adding some "
+"additional variables which represent the rule number to skip to, the `keep-"
+"state` option, and a list of TCP ports which will be used to reduce the "
+"number of rules."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1447
+#, no-wrap
+msgid ""
+"#!/bin/sh\n"
+"ipfw -q -f flush\n"
+"cmd=\"ipfw -q add\"\n"
+"skip=\"skipto 1000\"\n"
+"pif=dc0\n"
+"ks=\"keep-state\"\n"
+"good_tcpo=\"22,25,37,53,80,443,110\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1452
+msgid ""
+"With in-kernel NAT it is necessary to disable TCP segmentation offloading "
+"(TSO) due to the architecture of man:libalias[3], a library implemented as a "
+"kernel module to provide the in-kernel NAT facility of IPFW. TSO can be "
+"disabled on a per network interface basis using man:ifconfig[8] or on a "
+"system wide basis using man:sysctl[8]. To disable TSO system wide, the "
+"following must be set it [.filename]#/etc/sysctl.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1456
+#, no-wrap
+msgid "net.inet.tcp.tso=\"0\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1465
+msgid ""
+"A NAT instance will also be configured. It is possible to have multiple NAT "
+"instances each with their own configuration. For this example only one NAT "
+"instance is needed, NAT instance number 1. The configuration can take a few "
+"options such as: `if` which indicates the public interface, `same_ports` "
+"which takes care that aliased ports and local port numbers are mapped the "
+"same, `unreg_only` will result in only unregistered (private) address spaces "
+"to be processed by the NAT instance, and `reset` which will help to keep a "
+"functioning NAT instance even when the public IP address of the IPFW machine "
+"changes. For all possible options that can be passed to a single NAT "
+"instance configuration consult man:ipfw[8]. When configuring a stateful "
+"NATing firewall, it is necessary to allow translated packets to be "
+"reinjected in the firewall for further processing. This can be achieved by "
+"disabling `one_pass` behavior at the start of the firewall script."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1470
+#, no-wrap
+msgid ""
+"ipfw disable one_pass\n"
+"ipfw -q nat 1 config if $pif same_ports unreg_only reset\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1476
+msgid ""
+"The inbound NAT rule is inserted _after_ the two rules which allow all "
+"traffic on the trusted and loopback interfaces and after the reassemble rule "
+"but _before_ the `check-state` rule. It is important that the rule number "
+"selected for this NAT rule, in this example `100`, is higher than the first "
+"three rules and lower than the `check-state` rule. Furthermore, because of "
+"the behavior of in-kernel NAT it is advised to place a reassemble rule just "
+"before the first NAT rule and after the rules that allow traffic on trusted "
+"interface. Normally, IP fragmentation should not happen, but when dealing "
+"with IPSEC/ESP/GRE tunneling traffic it might and the reassembling of "
+"fragments is necessary before handing the complete packet over to the in-"
+"kernel NAT facility."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1480
+msgid ""
+"The reassemble rule was not needed with userland man:natd[8] because the "
+"internal workings of the IPFW `divert` action already takes care of "
+"reassembling packets before delivery to the socket as also stated in man:"
+"ipfw[8]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1483
+msgid ""
+"The NAT instance and rule number used in this example does not match with "
+"the default NAT instance and rule number created by [.filename]#rc."
+"firewall#. [.filename]#rc.firewall# is a script that sets up the default "
+"firewall rules present in FreeBSD."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1493
+#, no-wrap
+msgid ""
+"$cmd 005 allow all from any to any via xl0 # exclude LAN traffic\n"
+"$cmd 010 allow all from any to any via lo0 # exclude loopback traffic\n"
+"$cmd 099 reass all from any to any in # reassemble inbound packets\n"
+"$cmd 100 nat 1 ip from any to any in via $pif # NAT any inbound packets\n"
+"# Allow the packet through if it has an existing entry in the dynamic rules table\n"
+"$cmd 101 check-state\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1497
+msgid ""
+"The outbound rules are modified to replace the `allow` action with the "
+"`$skip` variable, indicating that rule processing will continue at rule "
+"`1000`. The seven `tcp` rules have been replaced by rule `125` as the "
+"`$good_tcpo` variable contains the seven allowed outbound ports."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1501
+msgid ""
+"Remember that IPFW's performance is largely determined by the number of "
+"rules present in the ruleset."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1510
+#, no-wrap
+msgid ""
+"# Authorized outbound packets\n"
+"$cmd 120 $skip udp from any to x.x.x.x 53 out via $pif $ks\n"
+"$cmd 121 $skip udp from any to x.x.x.x 67 out via $pif $ks\n"
+"$cmd 125 $skip tcp from any to any $good_tcpo out via $pif setup $ks\n"
+"$cmd 130 $skip icmp from any to any out via $pif $ks\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1516
+msgid ""
+"The inbound rules remain the same, except for the very last rule which "
+"removes the `via $pif` in order to catch both inbound and outbound rules. "
+"The NAT rule must follow this last outbound rule, must have a higher number "
+"than that last rule, and the rule number must be referenced by the `skipto` "
+"action. In this ruleset, rule number `1000` handles passing all packets to "
+"our configured instance for NAT processing. The next rule allows any packet "
+"which has undergone NAT processing to pass."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1522
+#, no-wrap
+msgid ""
+"$cmd 999 deny log all from any to any\n"
+"$cmd 1000 nat 1 ip from any to any out via $pif # skipto location for outbound stateful rules\n"
+"$cmd 1001 allow ip from any to any\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1525
+msgid ""
+"In this example, rules `100`, `101`, `125`, `1000`, and `1001` control the "
+"address translation of the outbound and inbound packets so that the entries "
+"in the dynamic state table always register the private LANIP address."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1537
+msgid ""
+"Consider an internal web browser which initializes a new outbound HTTP "
+"session over port 80. When the first outbound packet enters the firewall, "
+"it does not match rule `100` because it is headed out rather than in. It "
+"passes rule `101` because this is the first packet and it has not been "
+"posted to the dynamic state table yet. The packet finally matches rule "
+"`125` as it is outbound on an allowed port and has a source IP address from "
+"the internal LAN. On matching this rule, two actions take place. First, "
+"the `keep-state` action adds an entry to the dynamic state table and the "
+"specified action, `skipto rule 1000`, is executed. Next, the packet "
+"undergoes NAT and is sent out to the Internet. This packet makes its way to "
+"the destination web server, where a response packet is generated and sent "
+"back. This new packet enters the top of the ruleset. It matches rule `100` "
+"and has its destination IP address mapped back to the original internal "
+"address. It then is processed by the `check-state` rule, is found in the "
+"table as an existing session, and is released to the LAN."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1542
+msgid ""
+"On the inbound side, the ruleset has to deny bad packets and allow only "
+"authorized services. A packet which matches an inbound rule is posted to "
+"the dynamic state table and the packet is released to the LAN. The packet "
+"generated as a response is recognized by the `check-state` rule as belonging "
+"to an existing session. It is then sent to rule `1000` to undergo NAT "
+"before being released to the outbound interface."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1550
+msgid ""
+"Transitioning from userland man:natd[8] to in-kernel NAT might appear "
+"seamless at first but there is small catch. When using the GENERIC kernel, "
+"IPFW will load the [.filename]#libalias.ko# kernel module, when "
+"`firewall_nat_enable` is enabled in [.filename]#/etc/rc.conf#. The [."
+"filename]#libalias.ko# kernel module only provides basic NAT functionality, "
+"whereas the userland implementation man:natd[8] has all NAT functionality "
+"available in its userland library without any extra configuration. All "
+"functionality refers to the following kernel modules that can additionally "
+"be loaded when needed besides the standard [.filename]#libalias.ko# kernel "
+"module: [.filename]#alias_ftp.ko#, [.filename]#alias_bbt.ko#, [."
+"filename]#skinny.ko#, [.filename]#irc.ko#, [.filename]#alias_pptp.ko# and [."
+"filename]#alias_smedia.ko# using the `kld_list` directive in [.filename]#/"
+"etc/rc.conf#. If a custom kernel is used, the full functionality of the "
+"userland library can be compiled in, in the kernel, using the `options "
+"LIBALIAS`."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1552
+#, no-wrap
+msgid "Port Redirection"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1558
+msgid ""
+"The drawback with NAT in general is that the LAN clients are not accessible "
+"from the Internet. Clients on the LAN can make outgoing connections to the "
+"world but cannot receive incoming ones. This presents a problem if trying "
+"to run Internet services on one of the LAN client machines. A simple way "
+"around this is to redirect selected Internet ports on the NAT providing "
+"machine to a LAN client."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1561
+msgid ""
+"For example, an IRC server runs on client `A` and a web server runs on "
+"client `B`. For this to work properly, connections received on ports 6667 "
+"(IRC) and 80 (HTTP) must be redirected to the respective machines."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1565
+msgid ""
+"With in-kernel NAT all configuration is done in the NAT instance "
+"configuration. For a full list of options that an in-kernel NAT instance "
+"can use, consult man:ipfw[8]. The IPFW syntax follows the syntax of natd. "
+"The syntax for `redirect_port` is as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1571
+#, no-wrap
+msgid ""
+"redirect_port proto targetIP:targetPORT[-targetPORT]\n"
+" [aliasIP:]aliasPORT[-aliasPORT]\n"
+" [remoteIP[:remotePORT[-remotePORT]]]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1574
+msgid "To configure the above example setup, the arguments should be:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1579
+#, no-wrap
+msgid ""
+"redirect_port tcp 192.168.0.2:6667 6667\n"
+"redirect_port tcp 192.168.0.3:80 80\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1582
+msgid ""
+"After adding these arguments to the configuration of NAT instance 1 in the "
+"above ruleset, the TCP ports will be port forwarded to the LAN client "
+"machines running the IRC and HTTP services."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1588
+#, no-wrap
+msgid ""
+"ipfw -q nat 1 config if $pif same_ports unreg_only reset \\\n"
+" redirect_port tcp 192.168.0.2:6667 6667 \\\n"
+" redirect_port tcp 192.168.0.3:80 80\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1592
+msgid ""
+"Port ranges over individual ports can be indicated with `redirect_port`. "
+"For example, _tcp 192.168.0.2:2000-3000 2000-3000_ would redirect all "
+"connections received on ports 2000 to 3000 to ports 2000 to 3000 on client "
+"`A`."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1593
+#, no-wrap
+msgid "Address Redirection"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1599
+msgid ""
+"Address redirection is useful if more than one IP address is available. "
+"Each LAN client can be assigned its own external IP address by man:ipfw[8], "
+"which will then rewrite outgoing packets from the LAN clients with the "
+"proper external IP address and redirects all traffic incoming on that "
+"particular IP address back to the specific LAN client. This is also known "
+"as static NAT. For example, if IP addresses `128.1.1.1`, `128.1.1.2`, and "
+"`128.1.1.3` are available, `128.1.1.1` can be used as the man:ipfw[8] "
+"machine's external IP address, while `128.1.1.2` and `128.1.1.3` are "
+"forwarded back to LAN clients `A` and `B`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1601
+msgid ""
+"The `redirect_addr` syntax is as below, where `localIP` is the internal IP "
+"address of the LAN client, and `publicIP` the external IP address "
+"corresponding to the LAN client."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1605
+#, no-wrap
+msgid "redirect_addr localIP publicIP\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1608
+msgid "In the example, the arguments would read:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1613
+#, no-wrap
+msgid ""
+"redirect_addr 192.168.0.2 128.1.1.2\n"
+"redirect_addr 192.168.0.3 128.1.1.3\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1617
+msgid ""
+"Like `redirect_port`, these arguments are placed in a NAT instance "
+"configuration. With address redirection, there is no need for port "
+"redirection, as all data received on a particular IP address is redirected."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1620
+msgid ""
+"The external IP addresses on the man:ipfw[8] machine must be active and "
+"aliased to the external interface. Refer to man:rc.conf[5] for details."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1621
+#, no-wrap
+msgid "Userspace NAT"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1625
+msgid ""
+"Let us start with a statement: the userspace NAT implementation: man:"
+"natd[8], has more overhead than in-kernel NAT. For man:natd[8] to translate "
+"packets, the packets have to be copied from the kernel to userspace and back "
+"which brings in extra overhead that is not present with in-kernel NAT."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1629
+msgid ""
+"To enable the userspace NAT daemon man:natd[8] at boot time, the following "
+"is a minimum configuration in [.filename]#/etc/rc.conf#. Where "
+"`natd_interface` is set to the name of the NIC attached to the Internet. "
+"The man:rc[8] script of man:natd[8] will automatically check if a dynamic IP "
+"address is used and configure itself to handle that."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1635
+#, no-wrap
+msgid ""
+"gateway_enable=\"YES\"\n"
+"natd_enable=\"YES\"\n"
+"natd_interface=\"rl0\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1640
+msgid ""
+"In general, the above ruleset as explained for in-kernel NAT can also be "
+"used together with man:natd[8]. The exceptions are the configuration of the "
+"in-kernel NAT instance `(ipfw -q nat 1 config ...)` which is not needed "
+"together with reassemble rule 99 because its functionality is included in "
+"the `divert` action. Rule number 100 and 1000 will have to change sligthly "
+"as shown below."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1645
+#, no-wrap
+msgid ""
+"$cmd 100 divert natd ip from any to any in via $pif\n"
+"$cmd 1000 divert natd ip from any to any out via $pif\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1650
+msgid ""
+"To configure port or address redirection, a similar syntax as with in-kernel "
+"NAT is used. Although, now, instead of specifying the configuration in our "
+"ruleset script like with in-kernel NAT, configuration of man:natd[8] is best "
+"done in a configuration file. To do this, an extra flag must be passed via "
+"[.filename]#/etc/rc.conf# which specifies the path of the configuration file."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1654
+#, no-wrap
+msgid "natd_flags=\"-f /etc/natd.conf\"\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1661
+msgid ""
+"The specified file must contain a list of configuration options, one per "
+"line. For more information about the configuration file and possible "
+"variables, consult man:natd[8]. Below are two example entries, one per line:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1666
+#, no-wrap
+msgid ""
+"redirect_port tcp 192.168.0.2:6667 6667\n"
+"redirect_addr 192.168.0.3 128.1.1.3\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1671
+#, no-wrap
+msgid "The IPFW Command"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1676
+msgid ""
+"`ipfw` can be used to make manual, single rule additions or deletions to the "
+"active firewall while it is running. The problem with using this method is "
+"that all the changes are lost when the system reboots. It is recommended to "
+"instead write all the rules in a file and to use that file to load the rules "
+"at boot time and to replace the currently running firewall rules whenever "
+"that file changes."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1680
+msgid ""
+"`ipfw` is a useful way to display the running firewall rules to the console "
+"screen. The IPFW accounting facility dynamically creates a counter for each "
+"rule that counts each packet that matches the rule. During the process of "
+"testing a rule, listing the rule with its counter is one way to determine if "
+"the rule is functioning as expected."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1682
+msgid "To list all the running rules in sequence:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1686
+#, no-wrap
+msgid "# ipfw list\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1689
+msgid ""
+"To list all the running rules with a time stamp of when the last time the "
+"rule was matched:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1693
+#, no-wrap
+msgid "# ipfw -t list\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1697
+msgid ""
+"The next example lists accounting information and the packet count for "
+"matched rules along with the rules themselves. The first column is the rule "
+"number, followed by the number of matched packets and bytes, followed by the "
+"rule itself."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1701
+#, no-wrap
+msgid "# ipfw -a list\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1704
+msgid "To list dynamic rules in addition to static rules:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1708
+#, no-wrap
+msgid "# ipfw -d list\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1711
+msgid "To also show the expired dynamic rules:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1715
+#, no-wrap
+msgid "# ipfw -d -e list\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1718
+msgid "To zero the counters:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1722
+#, no-wrap
+msgid "# ipfw zero\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1725
+msgid "To zero the counters for just the rule with number _NUM_:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1729
+#, no-wrap
+msgid "# ipfw zero NUM\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1731
+#, no-wrap
+msgid "Logging Firewall Messages"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1738
+msgid ""
+"Even with the logging facility enabled, IPFW will not generate any rule "
+"logging on its own. The firewall administrator decides which rules in the "
+"ruleset will be logged, and adds the `log` keyword to those rules. Normally "
+"only deny rules are logged. It is customary to duplicate the \"ipfw default "
+"deny everything\" rule with the `log` keyword included as the last rule in "
+"the ruleset. This way, it is possible to see all the packets that did not "
+"match any of the rules in the ruleset."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1742
+msgid ""
+"Logging is a two edged sword. If one is not careful, an over abundance of "
+"log data or a DoS attack can fill the disk with log files. Log messages are "
+"not only written to syslogd, but also are displayed on the root console "
+"screen and soon become annoying."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1747
+msgid ""
+"The `IPFIREWALL_VERBOSE_LIMIT=5` kernel option limits the number of "
+"consecutive messages sent to man:syslogd[8], concerning the packet matching "
+"of a given rule. When this option is enabled in the kernel, the number of "
+"consecutive messages concerning a particular rule is capped at the number "
+"specified. There is nothing to be gained from 200 identical log messages. "
+"With this option set to five, five consecutive messages concerning a "
+"particular rule would be logged to syslogd and the remainder identical "
+"consecutive messages would be counted and posted to syslogd with a phrase "
+"like the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1751
+#, no-wrap
+msgid "last message repeated 45 times\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1754
+msgid ""
+"All logged packets messages are written by default to [.filename]#/var/log/"
+"security#, which is defined in [.filename]#/etc/syslog.conf#."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1756
+#, no-wrap
+msgid "Building a Rule Script"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1762
+msgid ""
+"Most experienced IPFW users create a file containing the rules and code them "
+"in a manner compatible with running them as a script. The major benefit of "
+"doing this is the firewall rules can be refreshed in mass without the need "
+"of rebooting the system to activate them. This method is convenient in "
+"testing new rules as the procedure can be executed as many times as needed. "
+"Being a script, symbolic substitution can be used for frequently used values "
+"to be substituted into multiple rules."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1767
+msgid ""
+"This example script is compatible with the syntax used by the man:sh[1], man:"
+"csh[1], and man:tcsh[1] shells. Symbolic substitution fields are prefixed "
+"with a dollar sign ($). Symbolic fields do not have the $ prefix. The "
+"value to populate the symbolic field must be enclosed in double quotes "
+"(\"\")."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1769
+msgid "Start the rules file like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1787
+#, no-wrap
+msgid ""
+"############### start of example ipfw rules script #############\n"
+"#\n"
+"ipfw -q -f flush # Delete all rules\n"
+"# Set defaults\n"
+"oif=\"tun0\" # out interface\n"
+"odns=\"192.0.2.11\" # ISP's DNS server IP address\n"
+"cmd=\"ipfw -q add \" # build rule prefix\n"
+"ks=\"keep-state\" # just too lazy to key this each time\n"
+"$cmd 00500 check-state\n"
+"$cmd 00502 deny all from any to any frag\n"
+"$cmd 00501 deny tcp from any to any established\n"
+"$cmd 00600 allow tcp from any to any 80 out via $oif setup $ks\n"
+"$cmd 00610 allow tcp from any to $odns 53 out via $oif setup $ks\n"
+"$cmd 00611 allow udp from any to $odns 53 out via $oif $ks\n"
+"################### End of example ipfw rules script ############\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1790
+msgid ""
+"The rules are not important as the focus of this example is how the symbolic "
+"substitution fields are populated."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1792
+msgid ""
+"If the above example was in [.filename]#/etc/ipfw.rules#, the rules could be "
+"reloaded by the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1796
+#, no-wrap
+msgid "# sh /etc/ipfw.rules\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1799
+msgid ""
+"[.filename]#/etc/ipfw.rules# can be located anywhere and the file can have "
+"any name."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1801
+msgid "The same thing could be accomplished by running these commands by hand:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1811
+#, no-wrap
+msgid ""
+"# ipfw -q -f flush\n"
+"# ipfw -q add check-state\n"
+"# ipfw -q add deny all from any to any frag\n"
+"# ipfw -q add deny tcp from any to any established\n"
+"# ipfw -q add allow tcp from any to any 80 out via tun0 setup keep-state\n"
+"# ipfw -q add allow tcp from any to 192.0.2.11 53 out via tun0 setup keep-state\n"
+"# ipfw -q add 00611 allow udp from any to 192.0.2.11 53 out via tun0 keep-state\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1814
+#, no-wrap
+msgid "IPFW Kernel Options"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1818
+msgid ""
+"In order to statically compile IPFW support into a custom kernel, refer to "
+"the instructions in crossref:kernelconfig[kernelconfig,Configuring the "
+"FreeBSD Kernel]. The following options are available for the custom kernel "
+"configuration file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1831
+#, no-wrap
+msgid ""
+"options IPFIREWALL\t\t\t# enables IPFW\n"
+"options IPFIREWALL_VERBOSE\t\t# enables logging for rules with log keyword to syslogd(8)\n"
+"options IPFIREWALL_VERBOSE_LIMIT=5\t# limits number of logged packets per-entry\n"
+"options IPFIREWALL_DEFAULT_TO_ACCEPT # sets default policy to pass what is not explicitly denied\n"
+"options IPFIREWALL_NAT\t\t# enables basic in-kernel NAT support\n"
+"options LIBALIAS\t\t\t# enables full in-kernel NAT support\n"
+"options IPFIREWALL_NAT64\t\t# enables in-kernel NAT64 support\n"
+"options IPFIREWALL_NPTV6\t\t# enables in-kernel IPv6 NPT support\n"
+"options IPFIREWALL_PMOD\t\t# enables protocols modification module support\n"
+"options IPDIVERT\t\t\t# enables NAT through natd(8)\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1836
+msgid ""
+"IPFW can be loaded as a kernel module: options above are built by default as "
+"modules or can be set at runtime using tunables."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1839
+#, no-wrap
+msgid "IPFILTER (IPF)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1842
+msgid ""
+"IPFILTER, also known as IPF, is a cross-platform, open source firewall which "
+"has been ported to several operating systems, including FreeBSD, NetBSD, "
+"OpenBSD, and Solaris(TM)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1845
+msgid ""
+"IPFILTER is a kernel-side firewall and NAT mechanism that can be controlled "
+"and monitored by userland programs. Firewall rules can be set or deleted "
+"using ipf, NAT rules can be set or deleted using ipnat, run-time statistics "
+"for the kernel parts of IPFILTER can be printed using ipfstat, and ipmon can "
+"be used to log IPFILTER actions to the system log files."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1848
+msgid ""
+"IPF was originally written using a rule processing logic of \"the last "
+"matching rule wins\" and only used stateless rules. Since then, IPF has "
+"been enhanced to include the `quick` and `keep state` options."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1851
+msgid ""
+"The IPF FAQ is at http://www.phildev.net/ipf/index.html[http://www.phildev."
+"net/ipf/index.html]. A searchable archive of the IPFilter mailing list is "
+"available at http://marc.info/?l=ipfilter[http://marc.info/?l=ipfilter]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1854
+msgid ""
+"This section of the Handbook focuses on IPF as it pertains to FreeBSD. It "
+"provides examples of rules that contain the `quick` and `keep state` options."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1855
+#, no-wrap
+msgid "Enabling IPF"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1858
+msgid ""
+"IPF is included in the basic FreeBSD install as a kernel loadable module, "
+"meaning that a custom kernel is not needed in order to enable IPF."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1861
+msgid ""
+"For users who prefer to statically compile IPF support into a custom kernel, "
+"refer to the instructions in crossref:kernelconfig[kernelconfig,Configuring "
+"the FreeBSD Kernel]. The following kernel options are available:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1868
+#, no-wrap
+msgid ""
+"options IPFILTER\n"
+"options IPFILTER_LOG\n"
+"options IPFILTER_LOOKUP\n"
+"options IPFILTER_DEFAULT_BLOCK\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1871
+msgid ""
+"where `options IPFILTER` enables support for IPFILTER, `options "
+"IPFILTER_LOG` enables IPF logging using the [.filename]#ipl# packet logging "
+"pseudo-device for every rule that has the `log` keyword, `IPFILTER_LOOKUP` "
+"enables IP pools in order to speed up IP lookups, and `options "
+"IPFILTER_DEFAULT_BLOCK` changes the default behavior so that any packet not "
+"matching a firewall `pass` rule gets blocked."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1875
+msgid ""
+"To configure the system to enable IPF at boot time, add the following "
+"entries to [.filename]#/etc/rc.conf#. These entries will also enable "
+"logging and `default pass all`. To change the default policy to `block all` "
+"without compiling a custom kernel, remember to add a `block all` rule at the "
+"end of the ruleset."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1886
+#, no-wrap
+msgid ""
+"ipfilter_enable=\"YES\" # Start ipf firewall\n"
+"ipfilter_rules=\"/etc/ipf.rules\" # loads rules definition text file\n"
+"ipv6_ipfilter_rules=\"/etc/ipf6.rules\" # loads rules definition text file for IPv6\n"
+"ipmon_enable=\"YES\" # Start IP monitor log\n"
+"ipmon_flags=\"-Ds\" # D = start as daemon\n"
+" # s = log to syslog\n"
+" # v = log tcp window, ack, seq\n"
+" # n = map IP & port to names\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1889
+msgid "If NAT functionality is needed, also add these lines:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1895
+#, no-wrap
+msgid ""
+"gateway_enable=\"YES\" # Enable as LAN gateway\n"
+"ipnat_enable=\"YES\" # Start ipnat function\n"
+"ipnat_rules=\"/etc/ipnat.rules\" # rules definition file for ipnat\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1898
+msgid "Then, to start IPF now:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1902
+#, no-wrap
+msgid "# service ipfilter start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1906
+msgid ""
+"To load the firewall rules, specify the name of the ruleset file using "
+"`ipf`. The following command can be used to replace the currently running "
+"firewall rules:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1910
+#, no-wrap
+msgid "# ipf -Fa -f /etc/ipf.rules\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1913
+msgid ""
+"where `-Fa` flushes all the internal rules tables and `-f` specifies the "
+"file containing the rules to load."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1916
+msgid ""
+"This provides the ability to make changes to a custom ruleset and update the "
+"running firewall with a fresh copy of the rules without having to reboot the "
+"system. This method is convenient for testing new rules as the procedure "
+"can be executed as many times as needed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1918
+msgid ""
+"Refer to man:ipf[8] for details on the other flags available with this "
+"command."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1919
+#, no-wrap
+msgid "IPF Rule Syntax"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1925
+msgid ""
+"This section describes the IPF rule syntax used to create stateful rules. "
+"When creating rules, keep in mind that unless the `quick` keyword appears in "
+"a rule, every rule is read in order, with the _last matching rule_ being the "
+"one that is applied. This means that even if the first rule to match a "
+"packet is a `pass`, if there is a later matching rule that is a `block`, the "
+"packet will be dropped. Sample rulesets can be found in [.filename]#/usr/"
+"share/examples/ipfilter#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1928
+msgid ""
+"When creating rules, a `+#+` character is used to mark the start of a "
+"comment and may appear at the end of a rule, to explain that rule's "
+"function, or on its own line. Any blank lines are ignored."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1933
+msgid ""
+"The keywords which are used in rules must be written in a specific order, "
+"from left to right. Some keywords are mandatory while others are optional. "
+"Some keywords have sub-options which may be keywords themselves and also "
+"include more sub-options. The keyword order is as follows, where the words "
+"shown in uppercase represent a variable and the words shown in lowercase "
+"must precede the variable that follows it:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1935
+msgid ""
+"`_ACTION DIRECTION OPTIONS proto PROTO_TYPE from SRC_ADDR SRC_PORT to "
+"DST_ADDR DST_PORT TCP_FLAG|ICMP_TYPE keep state STATE_`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1939
+msgid ""
+"This section describes each of these keywords and their options. It is not "
+"an exhaustive list of every possible option. Refer to man:ipf[5] for a "
+"complete description of the rule syntax that can be used when creating IPF "
+"rules and examples for using each keyword."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1944
+msgid ""
+"The action keyword indicates what to do with the packet if it matches that "
+"rule. Every rule _must_ have an action. The following actions are "
+"recognized:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1946
+msgid "`block`: drops the packet."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1948
+msgid "`pass`: allows the packet."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1950
+msgid "`log`: generates a log record."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1952
+msgid ""
+"`count`: counts the number of packets and bytes which can provide an "
+"indication of how often a rule is used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1954
+msgid "`auth`: queues the packet for further processing by another program."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1956
+msgid ""
+"`call`: provides access to functions built into IPF that allow more complex "
+"actions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1958
+msgid ""
+"`decapsulate`: removes any headers in order to process the contents of the "
+"packet."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1959
+#, no-wrap
+msgid "DIRECTION"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1961
+msgid ""
+"Next, each rule must explicitly state the direction of traffic using one of "
+"these keywords:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1963
+msgid "`in`: the rule is applied against an inbound packet."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1965
+msgid "`out`: the rule is applied against an outbound packet."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1967
+msgid "`all`: the rule applies to either direction."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1969
+msgid ""
+"If the system has multiple interfaces, the interface can be specified along "
+"with the direction. An example would be `in on fxp0`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1973
+msgid ""
+"Options are optional. However, if multiple options are specified, they must "
+"be used in the order shown here."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1975
+msgid ""
+"`log`: when performing the specified ACTION, the contents of the packet's "
+"headers will be written to the man:ipl[4] packet log pseudo-device."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1977
+msgid ""
+"`quick`: if a packet matches this rule, the ACTION specified by the rule "
+"occurs and no further processing of any following rules will occur for this "
+"packet."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1980
+msgid ""
+"`on`: must be followed by the interface name as displayed by man:"
+"ifconfig[8]. The rule will only match if the packet is going through the "
+"specified interface in the specified direction."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1982
+msgid ""
+"When using the `log` keyword, the following qualifiers may be used in this "
+"order:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1984
+msgid ""
+"`body`: indicates that the first 128 bytes of the packet contents will be "
+"logged after the headers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1986
+msgid ""
+"`first`: if the `log` keyword is being used in conjunction with a `keep "
+"state` option, this option is recommended so that only the triggering packet "
+"is logged and not every packet which matches the stateful connection."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1989
+msgid ""
+"Additional options are available to specify error return messages. Refer to "
+"man:ipf[5] for more details."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1990
+#, no-wrap
+msgid "PROTO_TYPE"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1996
+msgid ""
+"The protocol type is optional. However, it is mandatory if the rule needs "
+"to specify a SRC_PORT or a DST_PORT as it defines the type of protocol. "
+"When specifying the type of protocol, use the `proto` keyword followed by "
+"either a protocol number or name from [.filename]#/etc/protocols#. Example "
+"protocol names include `tcp`, `udp`, or `icmp`. If PROTO_TYPE is specified "
+"but no SRC_PORT or DST_PORT is specified, all port numbers for that protocol "
+"will match that rule."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:1997
+#, no-wrap
+msgid "SRC_ADDR"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2001
+msgid ""
+"The `from` keyword is mandatory and is followed by a keyword which "
+"represents the source of the packet. The source can be a hostname, an IP "
+"address followed by the CIDR mask, an address pool, or the keyword `all`. "
+"Refer to man:ipf[5] for examples."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2005
+msgid ""
+"There is no way to match ranges of IP addresses which do not express "
+"themselves easily using the dotted numeric form / mask-length notation. The "
+"package:net-mgmt/ipcalc[] package or port may be used to ease the "
+"calculation of the CIDR mask. Additional information is available at the "
+"utility's web page: http://jodies.de/ipcalc[http://jodies.de/ipcalc]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2010
+msgid ""
+"The port number of the source is optional. However, if it is used, it "
+"requires PROTO_TYPE to be first defined in the rule. The port number must "
+"also be preceded by the `proto` keyword."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2012
+msgid ""
+"A number of different comparison operators are supported: `=` (equal to), `!"
+"=` (not equal to), `<` (less than), `>` (greater than), `<=` (less than or "
+"equal to), and `>=` (greater than or equal to)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2014
+msgid ""
+"To specify port ranges, place the two port numbers between `<>` (less than "
+"and greater than ), `><` (greater than and less than ), or `:` (greater than "
+"or equal to and less than or equal to)."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2015
+#, no-wrap
+msgid "DST_ADDR"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2018
+msgid ""
+"The `to` keyword is mandatory and is followed by a keyword which represents "
+"the destination of the packet. Similar to SRC_ADDR, it can be a hostname, "
+"an IP address followed by the CIDR mask, an address pool, or the keyword "
+"`all`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2023
+msgid ""
+"Similar to SRC_PORT, the port number of the destination is optional. "
+"However, if it is used, it requires PROTO_TYPE to be first defined in the "
+"rule. The port number must also be preceded by the `proto` keyword."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2024
+#, no-wrap
+msgid "TCP_FLAG|ICMP_TYPE"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2027
+msgid ""
+"If `tcp` is specified as the PROTO_TYPE, flags can be specified as letters, "
+"where each letter represents one of the possible TCP flags used to determine "
+"the state of a connection. Possible values are: `S` (SYN), `A` (ACK), `P` "
+"(PSH), `F` (FIN), `U` (URG), `R` (RST), `C` (CWN), and `E` (ECN)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2030
+msgid ""
+"If `icmp` is specified as the PROTO_TYPE, the ICMP type to match can be "
+"specified. Refer to man:ipf[5] for the allowable types."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2031
+#, no-wrap
+msgid "STATE"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2035
+msgid ""
+"If a `pass` rule contains `keep state`, IPF will add an entry to its dynamic "
+"state table and allow subsequent packets that match the connection. IPF can "
+"track state for TCP, UDP, and ICMP sessions. Any packet that IPF can be "
+"certain is part of an active session, even if it is a different protocol, "
+"will be allowed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2042
+msgid ""
+"In IPF, packets destined to go out through the interface connected to the "
+"public Internet are first checked against the dynamic state table. If the "
+"packet matches the next expected packet comprising an active session "
+"conversation, it exits the firewall and the state of the session "
+"conversation flow is updated in the dynamic state table. Packets that do "
+"not belong to an already active session are checked against the outbound "
+"ruleset. Packets coming in from the interface connected to the public "
+"Internet are first checked against the dynamic state table. If the packet "
+"matches the next expected packet comprising an active session, it exits the "
+"firewall and the state of the session conversation flow is updated in the "
+"dynamic state table. Packets that do not belong to an already active "
+"session are checked against the inbound ruleset."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2046
+msgid ""
+"Several keywords can be added after `keep state`. If used, these keywords "
+"set various options that control stateful filtering, such as setting "
+"connection limits or connection age. Refer to man:ipf[5] for the list of "
+"available options and their descriptions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2050
+msgid ""
+"This section demonstrates how to create an example ruleset which only allows "
+"services matching `pass` rules and blocks all others."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2053
+msgid ""
+"FreeBSD uses the loopback interface ([.filename]#lo0#) and the IP address "
+"`127.0.0.1` for internal communication. The firewall ruleset must contain "
+"rules to allow free movement of these internally used packets:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2059
+#, no-wrap
+msgid ""
+"# no restrictions on loopback interface\n"
+"pass in quick on lo0 all\n"
+"pass out quick on lo0 all\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2064
+msgid ""
+"The public interface connected to the Internet is used to authorize and "
+"control access of all outbound and inbound connections. If one or more "
+"interfaces are cabled to private networks, those internal interfaces may "
+"require rules to allow packets originating from the LAN to flow between the "
+"internal networks or to the interface attached to the Internet. The ruleset "
+"should be organized into three major sections: any trusted internal "
+"interfaces, outbound connections through the public interface, and inbound "
+"connections through the public interface."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2066
+msgid ""
+"These two rules allow all traffic to pass through a trusted LAN interface "
+"named [.filename]#xl0#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2072
+#, no-wrap
+msgid ""
+"# no restrictions on inside LAN interface for private network\n"
+"pass out quick on xl0 all\n"
+"pass in quick on xl0 all\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2075
+msgid ""
+"The rules for the public interface's outbound and inbound sections should "
+"have the most frequently matched rules placed before less commonly matched "
+"rules, with the last rule in the section blocking and logging all packets "
+"for that interface and direction."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2079
+msgid ""
+"This set of rules defines the outbound section of the public interface named "
+"[.filename]#dc0#. These rules keep state and identify the specific services "
+"that internal systems are authorized for public Internet access. All the "
+"rules use `quick` and specify the appropriate port numbers and, where "
+"applicable, destination addresses."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2085
+#, no-wrap
+msgid ""
+"# interface facing Internet (outbound)\n"
+"# Matches session start requests originating from or behind the\n"
+"# firewall, destined for the Internet.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2091
+#, no-wrap
+msgid ""
+"# Allow outbound access to public DNS servers.\n"
+"# Replace x.x.x.x with address listed in /etc/resolv.conf.\n"
+"# Repeat for each DNS server.\n"
+"pass out quick on dc0 proto tcp from any to x.x.x.x port = 53 flags S keep state\n"
+"pass out quick on dc0 proto udp from any to x.x.x.x port = 53 keep state\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2098
+#, no-wrap
+msgid ""
+"# Allow access to ISP's specified DHCP server for cable or DSL networks.\n"
+"# Use the first rule, then check log for the IP address of DHCP server.\n"
+"# Then, uncomment the second rule, replace z.z.z.z with the IP address,\n"
+"# and comment out the first rule\n"
+"pass out log quick on dc0 proto udp from any to any port = 67 keep state\n"
+"#pass out quick on dc0 proto udp from any to z.z.z.z port = 67 keep state\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2102
+#, no-wrap
+msgid ""
+"# Allow HTTP and HTTPS\n"
+"pass out quick on dc0 proto tcp from any to any port = 80 flags S keep state\n"
+"pass out quick on dc0 proto tcp from any to any port = 443 flags S keep state\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2106
+#, no-wrap
+msgid ""
+"# Allow email\n"
+"pass out quick on dc0 proto tcp from any to any port = 110 flags S keep state\n"
+"pass out quick on dc0 proto tcp from any to any port = 25 flags S keep state\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2109
+#, no-wrap
+msgid ""
+"# Allow NTP\n"
+"pass out quick on dc0 proto tcp from any to any port = 37 flags S keep state\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2112
+#, no-wrap
+msgid ""
+"# Allow FTP\n"
+"pass out quick on dc0 proto tcp from any to any port = 21 flags S keep state\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2115
+#, no-wrap
+msgid ""
+"# Allow SSH\n"
+"pass out quick on dc0 proto tcp from any to any port = 22 flags S keep state\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2118
+#, no-wrap
+msgid ""
+"# Allow ping\n"
+"pass out quick on dc0 proto icmp from any to any icmp-type 8 keep state\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2121
+#, no-wrap
+msgid ""
+"# Block and log everything else\n"
+"block out log first quick on dc0 all\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2125
+msgid ""
+"This example of the rules in the inbound section of the public interface "
+"blocks all undesirable packets first. This reduces the number of packets "
+"that are logged by the last rule."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2139
+#, no-wrap
+msgid ""
+"# interface facing Internet (inbound)\n"
+"# Block all inbound traffic from non-routable or reserved address spaces\n"
+"block in quick on dc0 from 192.168.0.0/16 to any #RFC 1918 private IP\n"
+"block in quick on dc0 from 172.16.0.0/12 to any #RFC 1918 private IP\n"
+"block in quick on dc0 from 10.0.0.0/8 to any #RFC 1918 private IP\n"
+"block in quick on dc0 from 127.0.0.0/8 to any #loopback\n"
+"block in quick on dc0 from 0.0.0.0/8 to any #loopback\n"
+"block in quick on dc0 from 169.254.0.0/16 to any #DHCP auto-config\n"
+"block in quick on dc0 from 192.0.2.0/24 to any #reserved for docs\n"
+"block in quick on dc0 from 204.152.64.0/23 to any #Sun cluster interconnect\n"
+"block in quick on dc0 from 224.0.0.0/3 to any #Class D & E multicast\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2143
+#, no-wrap
+msgid ""
+"# Block fragments and too short tcp packets\n"
+"block in quick on dc0 all with frags\n"
+"block in quick on dc0 proto tcp all with short\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2147
+#, no-wrap
+msgid ""
+"# block source routed packets\n"
+"block in quick on dc0 all with opt lsrr\n"
+"block in quick on dc0 all with opt ssrr\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2150
+#, no-wrap
+msgid ""
+"# Block OS fingerprint attempts and log first occurrence\n"
+"block in log first quick on dc0 proto tcp from any to any flags FUP\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2153
+#, no-wrap
+msgid ""
+"# Block anything with special options\n"
+"block in quick on dc0 all with ipopts\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2157
+#, no-wrap
+msgid ""
+"# Block public pings and ident\n"
+"block in quick on dc0 proto icmp all icmp-type 8\n"
+"block in quick on dc0 proto tcp from any to any port = 113\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2163
+#, no-wrap
+msgid ""
+"# Block incoming Netbios services\n"
+"block in log first quick on dc0 proto tcp/udp from any to any port = 137\n"
+"block in log first quick on dc0 proto tcp/udp from any to any port = 138\n"
+"block in log first quick on dc0 proto tcp/udp from any to any port = 139\n"
+"block in log first quick on dc0 proto tcp/udp from any to any port = 81\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2167
+msgid ""
+"Any time there are logged messages on a rule with the `log first` option, "
+"run `ipfstat -hio` to evaluate how many times the rule has been matched. A "
+"large number of matches may indicate that the system is under attack."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2170
+msgid ""
+"The rest of the rules in the inbound section define which connections are "
+"allowed to be initiated from the Internet. The last rule denies all "
+"connections which were not explicitly allowed by previous rules in this "
+"section."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2176
+#, no-wrap
+msgid ""
+"# Allow traffic in from ISP's DHCP server. Replace z.z.z.z with\n"
+"# the same IP address used in the outbound section.\n"
+"pass in quick on dc0 proto udp from z.z.z.z to any port = 68 keep state\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2179
+#, no-wrap
+msgid ""
+"# Allow public connections to specified internal web server\n"
+"pass in quick on dc0 proto tcp from any to x.x.x.x port = 80 flags S keep state\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2182
+#, no-wrap
+msgid ""
+"# Block and log only first occurrence of all remaining traffic.\n"
+"block in log first quick on dc0 all\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2184
+#, no-wrap
+msgid "Configuring NAT"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2187
+msgid ""
+"To enable NAT, add these statements to [.filename]#/etc/rc.conf# and specify "
+"the name of the file containing the NAT rules:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2193
+#, no-wrap
+msgid ""
+"gateway_enable=\"YES\"\n"
+"ipnat_enable=\"YES\"\n"
+"ipnat_rules=\"/etc/ipnat.rules\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2198
+msgid ""
+"NAT rules are flexible and can accomplish many different things to fit the "
+"needs of both commercial and home users. The rule syntax presented here has "
+"been simplified to demonstrate common usage. For a complete rule syntax "
+"description, refer to man:ipnat[5]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2200
+msgid ""
+"The basic syntax for a NAT rule is as follows, where `map` starts the rule "
+"and _IF_ should be replaced with the name of the external interface:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2204
+#, no-wrap
+msgid "map IF LAN_IP_RANGE -> PUBLIC_ADDRESS\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2209
+msgid ""
+"The _LAN_IP_RANGE_ is the range of IP addresses used by internal clients. "
+"Usually, it is a private address range such as `192.168.1.0/24`. The "
+"_PUBLIC_ADDRESS_ can either be the static external IP address or the keyword "
+"`0/32` which represents the IP address assigned to _IF_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2216
+msgid ""
+"In IPF, when a packet arrives at the firewall from the LAN with a public "
+"destination, it first passes through the outbound rules of the firewall "
+"ruleset. Then, the packet is passed to the NAT ruleset which is read from "
+"the top down, where the first matching rule wins. IPF tests each NAT rule "
+"against the packet's interface name and source IP address. When a packet's "
+"interface name matches a NAT rule, the packet's source IP address in the "
+"private LAN is checked to see if it falls within the IP address range "
+"specified in _LAN_IP_RANGE_. On a match, the packet has its source IP "
+"address rewritten with the public IP address specified by _PUBLIC_ADDRESS_. "
+"IPF posts an entry in its internal NAT table so that when the packet returns "
+"from the Internet, it can be mapped back to its original private IP address "
+"before being passed to the firewall rules for further processing."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2219
+msgid ""
+"For networks that have large numbers of internal systems or multiple "
+"subnets, the process of funneling every private IP address into a single "
+"public IP address becomes a resource problem. Two methods are available to "
+"relieve this issue."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2222
+msgid ""
+"The first method is to assign a range of ports to use as source ports. By "
+"adding the `portmap` keyword, NAT can be directed to only use source ports "
+"in the specified range:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2226
+#, no-wrap
+msgid "map dc0 192.168.1.0/24 -> 0/32 portmap tcp/udp 20000:60000\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2229
+msgid ""
+"Alternately, use the `auto` keyword which tells NAT to determine the ports "
+"that are available for use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2233
+#, no-wrap
+msgid "map dc0 192.168.1.0/24 -> 0/32 portmap tcp/udp auto\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2238
+msgid ""
+"The second method is to use a pool of public addresses. This is useful when "
+"there are too many LAN addresses to fit into a single public address and a "
+"block of public IP addresses is available. These public addresses can be "
+"used as a pool from which NAT selects an IP address as a packet's address is "
+"mapped on its way out."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2241
+msgid ""
+"The range of public IP addresses can be specified using a netmask or CIDR "
+"notation. These two rules are equivalent:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2246
+#, no-wrap
+msgid ""
+"map dc0 192.168.1.0/24 -> 204.134.75.0/255.255.255.0\n"
+"map dc0 192.168.1.0/24 -> 204.134.75.0/24\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2251
+msgid ""
+"A common practice is to have a publicly accessible web server or mail server "
+"segregated to an internal network segment. The traffic from these servers "
+"still has to undergo NAT, but port redirection is needed to direct inbound "
+"traffic to the correct server. For example, to map a web server using the "
+"internal address `10.0.10.25` to its public IP address of `20.20.20.5`, use "
+"this rule:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2255
+#, no-wrap
+msgid "rdr dc0 20.20.20.5/32 port 80 -> 10.0.10.25 port 80\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2258
+msgid ""
+"If it is the only web server, this rule would also work as it redirects all "
+"external HTTP requests to `10.0.10.25`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2262
+#, no-wrap
+msgid "rdr dc0 0.0.0.0/0 port 80 -> 10.0.10.25 port 80\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2267
+msgid ""
+"IPF has a built in FTP proxy which can be used with NAT. It monitors all "
+"outbound traffic for active or passive FTP connection requests and "
+"dynamically creates temporary filter rules containing the port number used "
+"by the FTP data channel. This eliminates the need to open large ranges of "
+"high order ports for FTP connections."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2270
+msgid ""
+"In this example, the first rule calls the proxy for outbound FTP traffic "
+"from the internal LAN. The second rule passes the FTP traffic from the "
+"firewall to the Internet, and the third rule handles all non-FTP traffic "
+"from the internal LAN:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2276
+#, no-wrap
+msgid ""
+"map dc0 10.0.10.0/29 -> 0/32 proxy port 21 ftp/tcp\n"
+"map dc0 0.0.0.0/0 -> 0/32 proxy port 21 ftp/tcp\n"
+"map dc0 10.0.10.0/29 -> 0/32\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2280
+msgid ""
+"The FTP `map` rules go before the NAT rule so that when a packet matches an "
+"FTP rule, the FTP proxy creates temporary filter rules to let the FTP "
+"session packets pass and undergo NAT. All LAN packets that are not FTP will "
+"not match the FTP rules but will undergo NAT if they match the third rule."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2283
+msgid ""
+"Without the FTP proxy, the following firewall rules would instead be "
+"needed. Note that without the proxy, all ports above `1024` need to be "
+"allowed:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2289
+#, no-wrap
+msgid ""
+"# Allow out LAN PC client FTP to public Internet\n"
+"# Active and passive modes\n"
+"pass out quick on rl0 proto tcp from any to any port = 21 flags S keep state\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2292
+#, no-wrap
+msgid ""
+"# Allow out passive mode data channel high order port numbers\n"
+"pass out quick on rl0 proto tcp from any to any port > 1024 flags S keep state\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2295
+#, no-wrap
+msgid ""
+"# Active mode let data channel in from FTP server\n"
+"pass in quick on rl0 proto tcp from any to any port = 20 flags S keep state\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2299
+msgid ""
+"Whenever the file containing the NAT rules is edited, run `ipnat` with `-CF` "
+"to delete the current NAT rules and flush the contents of the dynamic "
+"translation table. Include `-f` and specify the name of the NAT ruleset to "
+"load:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2303
+#, no-wrap
+msgid "# ipnat -CF -f /etc/ipnat.rules\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2306
+msgid "To display the NAT statistics:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2310
+#, no-wrap
+msgid "# ipnat -s\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2313
+msgid "To list the NAT table's current mappings:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2317
+#, no-wrap
+msgid "# ipnat -l\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2320
+msgid ""
+"To turn verbose mode on and display information relating to rule processing "
+"and active rules and table entries:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2324
+#, no-wrap
+msgid "# ipnat -v\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2326
+#, no-wrap
+msgid "Viewing IPF Statistics"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2330
+msgid ""
+"IPF includes man:ipfstat[8] which can be used to retrieve and display "
+"statistics which are gathered as packets match rules as they go through the "
+"firewall. Statistics are accumulated since the firewall was last started or "
+"since the last time they were reset to zero using `ipf -Z`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2332
+msgid "The default `ipfstat` output looks like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2352
+#, no-wrap
+msgid ""
+"input packets: blocked 99286 passed 1255609 nomatch 14686 counted 0\n"
+" output packets: blocked 4200 passed 1284345 nomatch 14687 counted 0\n"
+" input packets logged: blocked 99286 passed 0\n"
+" output packets logged: blocked 0 passed 0\n"
+" packets logged: input 0 output 0\n"
+" log failures: input 3898 output 0\n"
+" fragment state(in): kept 0 lost 0\n"
+" fragment state(out): kept 0 lost 0\n"
+" packet state(in): kept 169364 lost 0\n"
+" packet state(out): kept 431395 lost 0\n"
+" ICMP replies: 0 TCP RSTs sent: 0\n"
+" Result cache hits(in): 1215208 (out): 1098963\n"
+" IN Pullups succeeded: 2 failed: 0\n"
+" OUT Pullups succeeded: 0 failed: 0\n"
+" Fastroute successes: 0 failures: 0\n"
+" TCP cksum fails(in): 0 (out): 0\n"
+" Packet log flags set: (0)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2358
+msgid ""
+"Several options are available. When supplied with either `-i` for inbound "
+"or `-o` for outbound, the command will retrieve and display the appropriate "
+"list of filter rules currently installed and in use by the kernel. To also "
+"see the rule numbers, include `-n`. For example, `ipfstat -on` displays the "
+"outbound rules table with rule numbers:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2364
+#, no-wrap
+msgid ""
+"@1 pass out on xl0 from any to any\n"
+"@2 block out on dc0 from any to any\n"
+"@3 pass out quick on dc0 proto tcp/udp from any to any keep state\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2368
+msgid ""
+"Include `-h` to prefix each rule with a count of how many times the rule was "
+"matched. For example, `ipfstat -oh` displays the outbound internal rules "
+"table, prefixing each rule with its usage count:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2374
+#, no-wrap
+msgid ""
+"2451423 pass out on xl0 from any to any\n"
+"354727 block out on dc0 from any to any\n"
+"430918 pass out quick on dc0 proto tcp/udp from any to any keep state\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2380
+msgid ""
+"To display the state table in a format similar to man:top[1], use `ipfstat -"
+"t`. When the firewall is under attack, this option provides the ability to "
+"identify and see the attacking packets. The optional sub-flags give the "
+"ability to select the destination or source IP, port, or protocol to be "
+"monitored in real time. Refer to man:ipfstat[8] for details."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2381
+#, no-wrap
+msgid "IPF Logging"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2385
+msgid ""
+"IPF provides `ipmon`, which can be used to write the firewall's logging "
+"information in a human readable format. It requires that `options "
+"IPFILTER_LOG` be first added to a custom kernel using the instructions in "
+"crossref:kernelconfig[kernelconfig,Configuring the FreeBSD Kernel]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2388
+msgid ""
+"This command is typically run in daemon mode in order to provide a "
+"continuous system log file so that logging of past events may be reviewed. "
+"Since FreeBSD has a built in man:syslogd[8] facility to automatically rotate "
+"system logs, the default [.filename]#rc.conf# `ipmon_flags` statement uses `-"
+"Ds`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2395
+#, no-wrap
+msgid ""
+"ipmon_flags=\"-Ds\" # D = start as daemon\n"
+" # s = log to syslog\n"
+" # v = log tcp window, ack, seq\n"
+" # n = map IP & port to names\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2399
+msgid ""
+"Logging provides the ability to review, after the fact, information such as "
+"which packets were dropped, what addresses they came from, and where they "
+"were going. This information is useful in tracking down attackers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2404
+msgid ""
+"Once the logging facility is enabled in [.filename]#rc.conf# and started "
+"with `service ipmon start`, IPF will only log the rules which contain the "
+"`log` keyword. The firewall administrator decides which rules in the "
+"ruleset should be logged and normally only deny rules are logged. It is "
+"customary to include the `log` keyword in the last rule in the ruleset. "
+"This makes it possible to see all the packets that did not match any of the "
+"rules in the ruleset."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2407
+msgid ""
+"By default, `ipmon -Ds` mode uses `local0` as the logging facility. The "
+"following logging levels can be used to further segregate the logged data:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2414
+#, no-wrap
+msgid ""
+"LOG_INFO - packets logged using the \"log\" keyword as the action rather than pass or block.\n"
+"LOG_NOTICE - packets logged which are also passed\n"
+"LOG_WARNING - packets logged which are also blocked\n"
+"LOG_ERR - packets which have been logged and which can be considered short due to an incomplete header\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2417
+msgid ""
+"In order to setup IPF to log all data to [.filename]#/var/log/ipfilter.log#, "
+"first create the empty file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2421
+#, no-wrap
+msgid "# touch /var/log/ipfilter.log\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2424
+msgid ""
+"Then, to write all logged messages to the specified file, add the following "
+"statement to [.filename]#/etc/syslog.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2428
+#, no-wrap
+msgid "local0.* /var/log/ipfilter.log\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2431
+msgid ""
+"To activate the changes and instruct man:syslogd[8] to read the modified [."
+"filename]#/etc/syslog.conf#, run `service syslogd reload`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2433
+msgid ""
+"Do not forget to edit [.filename]#/etc/newsyslog.conf# to rotate the new log "
+"file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2436
+msgid ""
+"Messages generated by `ipmon` consist of data fields separated by white "
+"space. Fields common to all messages are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2438
+msgid "The date of packet receipt."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2439
+msgid ""
+"The time of packet receipt. This is in the form HH:MM:SS.F, for hours, "
+"minutes, seconds, and fractions of a second."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2440
+msgid "The name of the interface that processed the packet."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2441
+msgid "The group and rule number of the rule in the format `@0:17`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2442
+msgid ""
+"The action: `p` for passed, `b` for blocked, `S` for a short packet, `n` did "
+"not match any rules, and `L` for a log rule."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2443
+msgid ""
+"The addresses written as three fields: the source address and port separated "
+"by a comma, the -> symbol, and the destination address and port. For "
+"example: `209.53.17.22,80 -> 198.73.220.17,1722`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2444
+msgid "`PR` followed by the protocol name or number: for example, `PR tcp`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2445
+msgid ""
+"`len` followed by the header length and total length of the packet: for "
+"example, `len 20 40`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2448
+msgid ""
+"If the packet is a TCP packet, there will be an additional field starting "
+"with a hyphen followed by letters corresponding to any flags that were set. "
+"Refer to man:ipf[5] for a list of letters and their flags."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2451
+msgid ""
+"If the packet is an ICMP packet, there will be two fields at the end: the "
+"first always being \"icmp\" and the next being the ICMP message and sub-"
+"message type, separated by a slash. For example: `icmp 3/3` for a port "
+"unreachable message."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2453
+#, no-wrap
+msgid "Blacklistd"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2460
+msgid ""
+"Blacklistd is a daemon listening to sockets awaiting to receive "
+"notifications from other daemons about connection attempts that failed or "
+"were successful. It is most widely used in blocking too many connection "
+"attempts on open ports. A prime example is SSH running on the internet "
+"getting a lot of requests from bots or scripts trying to guess passwords and "
+"gain access. Using blacklistd, the daemon can notify the firewall to create "
+"a filter rule to block excessive connection attempts from a single source "
+"after a number of tries. Blacklistd was first developed on NetBSD and "
+"appeared there in version 7. FreeBSD 11 imported blacklistd from NetBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2465
+msgid ""
+"This chapter describes how to set up blacklistd, configure it, and provides "
+"examples on how to use it. Readers should be familiar with basic firewall "
+"concepts like rules. For details, refer to the firewall chapter. PF is "
+"used in the examples, but other firewalls available on FreeBSD should be "
+"able to work with blacklistd, too."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2466
+#, no-wrap
+msgid "Enabling Blacklistd"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2472
+msgid ""
+"The main configuration for blacklistd is stored in man:blacklistd.conf[5]. "
+"Various command line options are also available to change blacklistd's run-"
+"time behavior. Persistent configuration across reboots should be stored in "
+"[.filename]#/etc/blacklistd.conf#. To enable the daemon during system boot, "
+"add a `blacklistd_enable` line to [.filename]#/etc/rc.conf# like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2476
+#, no-wrap
+msgid "# sysrc blacklistd_enable=yes\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2479
+msgid "To start the service manually, run this command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2483
+#, no-wrap
+msgid "# service blacklistd start\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2485
+#, no-wrap
+msgid "Creating a Blacklistd Ruleset"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2490
+msgid ""
+"Rules for blacklistd are configured in man:blacklistd.conf[5] with one entry "
+"per line. Each rule contains a tuple separated by spaces or tabs. Rules "
+"either belong to a `local` or a `remote`, which applies to the machine where "
+"blacklistd is running or an outside source, respectively."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2491
+#, no-wrap
+msgid "Local Rules"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2494
+msgid "An example blacklistd.conf entry for a local rule looks like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2499
+#, no-wrap
+msgid ""
+"[local]\n"
+"ssh stream * * * 3 24h\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2503
+msgid ""
+"All rules that follow the `[local]` section are treated as local rules "
+"(which is the default), applying to the local machine. When a `[remote]` "
+"section is encountered, all rules that follow it are handled as remote "
+"machine rules."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2511
+msgid ""
+"Seven fields separated by either tabs or spaces define a rule. The first "
+"four fields identify the traffic that should be blocklisted. The three "
+"fields that follow define backlistd's behavior. Wildcards are denoted as "
+"asterisks (`*`), matching anything in this field. The first field defines "
+"the location. In local rules, these are the network ports. The syntax for "
+"the location field is as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2515
+#, no-wrap
+msgid "[address|interface][/mask][:port]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2519
+msgid ""
+"Addresses can be specified as IPv4 in numeric format or IPv6 in square "
+"brackets. An interface name like `_em0_` can also be used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2523
+msgid ""
+"The socket type is defined by the second field. TCP sockets are of type "
+"`stream`, whereas UDP is denoted as `dgram`. The example above uses TCP, "
+"since SSH is using that protocol."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2527
+msgid ""
+"A protocol can be used in the third field of a blacklistd rule. The "
+"following protocols can be used: `tcp`, `udp`, `tcp6`, `udp6`, or numeric. "
+"A wildcard, like in the example, is typically used to match all protocols "
+"unless there is a reason to distinguish traffic by a certain protocol."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2530
+msgid ""
+"In the fourth field, the effective user or owner of the daemon process that "
+"is reporting the event is defined. The username or UID can be used here, as "
+"well as a wildcard (see example rule above)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2533
+msgid ""
+"The packet filter rule name is declared by the fifth field, which starts the "
+"behavior part of the rule. By default, blacklistd puts all blocks under a "
+"pf anchor called `blacklistd` in [.filename]#pf.conf# like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2539
+#, no-wrap
+msgid ""
+"anchor \"blacklistd/*\" in on $ext_if\n"
+"block in\n"
+"pass out\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2545
+msgid ""
+"For separate blocklists, an anchor name can be used in this field. In other "
+"cases, the wildcard will suffice. When a name starts with a hyphen (`-`) it "
+"means that an anchor with the default rule name prepended should be used. A "
+"modified example from the above using the hyphen would look like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2549
+#, no-wrap
+msgid "ssh stream * * -ssh 3 24h\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2552
+msgid ""
+"With such a rule, any new blocklist rules are added to an anchor called "
+"`blacklistd-ssh`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2556
+msgid ""
+"To block whole subnets for a single rule violation, a `/` in the rule name "
+"can be used. This causes the remaining portion of the name to be "
+"interpreted as the mask to be applied to the address specified in the rule. "
+"For example, this rule would block every address adjoining `/24`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2560
+#, no-wrap
+msgid "22 stream tcp * */24 3 24h\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2566
+msgid ""
+"It is important to specify the proper protocol here. IPv4 and IPv6 "
+"treat /24 differently, that is the reason why `*` cannot be used in the "
+"third field for this rule."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2569
+msgid ""
+"This rule defines that if any one host in that network is misbehaving, "
+"everything else on that network will be blocked, too."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2573
+msgid ""
+"The sixth field, called `nfail`, sets the number of login failures required "
+"to blocklist the remote IP in question. When a wildcard is used at this "
+"position, it means that blocks will never happen. In the example rule "
+"above, a limit of three is defined meaning that after three attempts to log "
+"into SSH on one connection, the IP is blocked."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2576
+msgid ""
+"The last field in a blacklistd rule definition specifies how long a host is "
+"blocklisted. The default unit is seconds, but suffixes like `m`, `h`, and "
+"`d` can also be specified for minutes, hours, and days, respectively."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2580
+msgid ""
+"The example rule in its entirety means that after three times authenticating "
+"to SSH will result in a new PF block rule for that host. Rule matches are "
+"performed by first checking local rules one after another, from most "
+"specific to least specific. When a match occurs, the `remote` rules are "
+"applied and the name, `nfail`, and disable fields are changed by the "
+"`remote` rule that matched."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2581
+#, no-wrap
+msgid "Remote Rules"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2587
+msgid ""
+"Remote rules are used to specify how blacklistd changes its behavior "
+"depending on the remote host currently being evaluated. Each field in a "
+"remote rule is the same as in a local rule. The only difference is in the "
+"way blacklistd is using them. To explain it, this example rule is used:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2592
+#, no-wrap
+msgid ""
+"[remote]\n"
+"203.0.113.128/25 * * * =/25 = 48h\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2597
+msgid ""
+"The address field can be an IP address (either v4 or v6), a port or both. "
+"This allows setting special rules for a specific remote address range like "
+"in this example. The fields for socket type, protocol and owner are "
+"identically interpreted as in the local rule."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2603
+msgid ""
+"The name fields is different though: the equal sign (`=`) in a remote rule "
+"tells blacklistd to use the value from the matching local rule. It means "
+"that the firewall rule entry is taken and the `/25` prefix (a netmask of "
+"`255.255.255.128`) is added. When a connection from that address range is "
+"blocklisted, the entire subnet is affected. A PF anchor name can also be "
+"used here, in which case blacklistd will add rules for this address block to "
+"the anchor of that name. The default table is used when a wildcard is "
+"specified."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2607
+msgid ""
+"A custom number of failures in the `nfail` column can be defined for an "
+"address. This is useful for exceptions to a specific rule, to maybe allow "
+"someone a less strict application of rules or a bit more leniency in login "
+"tries. Blocking is disabled when an asterisk is used in this sixth field."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2609
+msgid ""
+"Remote rules allow a stricter enforcement of limits on attempts to log in "
+"compared to attempts coming from a local network like an office."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2610
+#, no-wrap
+msgid "Blacklistd Client Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2615
+msgid ""
+"There are a few software packages in FreeBSD that can utilize blacklistd's "
+"functionality. The two most prominent ones are man:ftpd[8] and man:sshd[8] "
+"to block excessive connection attempts. To activate blacklistd in the SSH "
+"daemon, add the following line to [.filename]#/etc/ssh/sshd_config#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2619
+#, no-wrap
+msgid "UseBlacklist yes\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2622
+msgid "Restart sshd afterwards to make these changes take effect."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2624
+msgid ""
+"Blacklisting for man:ftpd[8] is enabled using `-B`, either in [.filename]#/"
+"etc/inetd.conf# or as a flag in [.filename]#/etc/rc.conf# like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2628
+#, no-wrap
+msgid "ftpd_flags=\"-B\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2631
+msgid "That is all that is needed to make these programs talk to blacklistd."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2632
+#, no-wrap
+msgid "Blacklistd Management"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2637
+msgid ""
+"Blacklistd provides the user with a management utility called man:"
+"blacklistctl[8]. It displays blocked addresses and networks that are "
+"blocklisted by the rules defined in man:blacklistd.conf[5]. To see the list "
+"of currently blocked hosts, use `dump` combined with `-b` like this."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2643
+#, no-wrap
+msgid ""
+"# blacklistctl dump -b\n"
+" address/ma:port id nfail last access\n"
+"213.0.123.128/25:22 OK 6/3 2019/06/08 14:30:19\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2649
+msgid ""
+"This example shows that there were 6 out of three permitted attempts on port "
+"22 coming from the address range `213.0.123.128/25`. There are more "
+"attempts listed than are allowed because SSH allows a client to try multiple "
+"logins on a single TCP connection. A connection that is currently going on "
+"is not stopped by blacklistd. The last connection attempt is listed in the "
+"`last access` column of the output."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2651
+msgid ""
+"To see the remaining time that this host will be on the blocklist, add `-r` "
+"to the previous command."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2657
+#, no-wrap
+msgid ""
+"# blacklistctl dump -br\n"
+" address/ma:port id nfail remaining time\n"
+"213.0.123.128/25:22 OK 6/3 36s\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2660
+msgid ""
+"In this example, there are 36s seconds left until this host will not be "
+"blocked any more."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2661
+#, no-wrap
+msgid "Removing Hosts from the Block List"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2672
+msgid ""
+"Sometimes it is necessary to remove a host from the block list before the "
+"remaining time expires. Unfortunately, there is no functionality in "
+"blacklistd to do that. However, it is possible to remove the address from "
+"the PF table using pfctl. For each blocked port, there is a child anchor "
+"inside the blacklistd anchor defined in [.filename]#/etc/pf.conf#. For "
+"example, if there is a child anchor for blocking port 22 it is called "
+"`blacklistd/22`. There is a table inside that child anchor that contains "
+"the blocked addresses. This table is called port followed by the port "
+"number. In this example, it would be called `port22`. With that "
+"information at hand, it is now possible to use man:pfctl[8] to display all "
+"addresses listed like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2679
+#, no-wrap
+msgid ""
+"# pfctl -a blacklistd/22 -t port22 -T show\n"
+"...\n"
+"213.0.123.128/25\n"
+"...\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2682
+msgid ""
+"After identifying the address to be unblocked from the list, the following "
+"command removes it from the list:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2686
+#, no-wrap
+msgid "# pfctl -a blacklistd/22 -t port22 -T delete 213.0.123.128/25\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/firewalls/_index.adoc:2690
+msgid ""
+"The address is now removed from PF, but will still show up in the "
+"blacklistctl list, since it does not know about any changes made in PF. The "
+"entry in blacklistd's database will eventually expire and be removed from "
+"its output. The entry will be added again if the host is matching one of "
+"the block rules in blacklistd again."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/geom/_index.adoc b/documentation/content/en/books/handbook/geom/_index.adoc
index 01a26d9ae5..04f4934ea1 100644
--- a/documentation/content/en/books/handbook/geom/_index.adoc
+++ b/documentation/content/en/books/handbook/geom/_index.adoc
@@ -1,13 +1,13 @@
---
-title: "Chapter 19. GEOM: Modular Disk Transformation Framework"
+title: "Chapter 21. GEOM: Modular Disk Transformation Framework"
part: Part III. System Administration
prev: books/handbook/disks
next: books/handbook/zfs
description: In FreeBSD, the GEOM framework permits access and control to classes, such as Master Boot Records and BSD labels, through the use of providers, or the disk devices in /dev.
tags: ["GEOM", "RAID", "RAID0", "RAID1", "RAID3", "Striping", "bsdlabel", "newfs", "labelling", "UFS", "journaling"]
showBookMenu: true
-weight: 23
-path: "/books/handbook/"
+weight: 25
+path: "/books/handbook/geom/"
---
[[geom]]
@@ -18,7 +18,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 19
+:sectnumoffset: 21
:partnums:
:source-highlighter: rouge
:experimental:
@@ -369,7 +369,7 @@ Check the media size of the original disk with `diskinfo`:
....
Create a mirror on the new disk.
-To make certain that the mirror capacity is not any larger than the original [.filename]#ada0# drive, man:gnop[8] is used to create a fake drive of the exact same size.
+To make certain that the mirror capacity is not any larger than the original [.filename]#ada0# drive, man:gnop[8] is used to create a fake drive of the same size.
This drive does not store any data, but is used only to limit the size of the mirror.
When man:gmirror[8] creates the mirror, it will restrict the capacity to the size of [.filename]#gzero.nop#, even if the new [.filename]#ada1# drive has more space.
Note that the _1000204821504_ in the second line is equal to [.filename]#ada0#'s media size as shown by `diskinfo` above.
diff --git a/documentation/content/en/books/handbook/geom/_index.po b/documentation/content/en/books/handbook/geom/_index.po
new file mode 100644
index 0000000000..614d5c4a67
--- /dev/null
+++ b/documentation/content/en/books/handbook/geom/_index.po
@@ -0,0 +1,2364 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/geom/_index.adoc:1
+#, no-wrap
+msgid "In FreeBSD, the GEOM framework permits access and control to classes, such as Master Boot Records and BSD labels, through the use of providers, or the disk devices in /dev."
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/geom/_index.adoc:1
+#, no-wrap
+msgid "Part III. System Administration"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/geom/_index.adoc:1
+#, no-wrap
+msgid "Chapter 21. GEOM: Modular Disk Transformation Framework"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/geom/_index.adoc:14
+#, no-wrap
+msgid "GEOM: Modular Disk Transformation Framework"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/geom/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:56
+msgid ""
+"In FreeBSD, the GEOM framework permits access and control to classes, such "
+"as Master Boot Records and BSD labels, through the use of providers, or the "
+"disk devices in [.filename]#/dev#. By supporting various software RAID "
+"configurations, GEOM transparently provides access to the operating system "
+"and operating system utilities."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:60
+msgid ""
+"This chapter covers the use of disks under the GEOM framework in FreeBSD. "
+"This includes the major RAID control utilities which use the framework for "
+"configuration. This chapter is not a definitive guide to RAID "
+"configurations and only GEOM-supported RAID classifications are discussed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:62
+msgid "After reading this chapter, you will know:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:64
+msgid "What type of RAID support is available through GEOM."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:65
+msgid ""
+"How to use the base utilities to configure, maintain, and manipulate the "
+"various RAID levels."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:66
+msgid ""
+"How to mirror, stripe, encrypt, and remotely connect disk devices through "
+"GEOM."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:67
+msgid "How to troubleshoot disks attached to the GEOM framework."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:69
+msgid "Before reading this chapter, you should:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:71
+msgid ""
+"Understand how FreeBSD treats disk devices (crossref:disks[disks,Storage])."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:72
+msgid ""
+"Know how to configure and install a new kernel (crossref:"
+"kernelconfig[kernelconfig,Configuring the FreeBSD Kernel])."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/geom/_index.adoc:74
+#, no-wrap
+msgid "RAID0 - Striping"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:79
+msgid ""
+"Striping combines several disk drives into a single volume. Striping can be "
+"performed through the use of hardware RAID controllers. The GEOM disk "
+"subsystem provides software support for disk striping, also known as RAID0, "
+"without the need for a RAID disk controller."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:83
+msgid ""
+"In RAID0, data is split into blocks that are written across all the drives "
+"in the array. As seen in the following illustration, instead of having to "
+"wait on the system to write 256k to one disk, RAID0 can simultaneously write "
+"64k to each of the four disks in the array, offering superior I/O "
+"performance. This performance can be enhanced further by using multiple "
+"disk controllers."
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/geom/_index.adoc:84
+#, no-wrap
+msgid "Disk Striping Illustration"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/geom/_index.adoc:84
+#, no-wrap
+msgid "striping.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:87
+msgid ""
+"Each disk in a RAID0 stripe must be of the same size, since I/O requests are "
+"interleaved to read or write to multiple disks in parallel."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:93
+msgid ""
+"RAID0 does _not_ provide any redundancy. This means that if one disk in the "
+"array fails, all of the data on the disks is lost. If the data is "
+"important, implement a backup strategy that regularly saves backups to a "
+"remote system or device."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:97
+msgid ""
+"The process for creating a software, GEOM-based RAID0 on a FreeBSD system "
+"using commodity disks is as follows. Once the stripe is created, refer to "
+"man:gstripe[8] for more information on how to control an existing stripe."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:101
+#, no-wrap
+msgid "*Procedure: Creating a Stripe of Unformatted ATA Disks*\n"
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:103
+msgid "Load the [.filename]#geom_stripe.ko# module:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:107
+#, no-wrap
+msgid "# kldload geom_stripe\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:110
+msgid ""
+"Ensure that a suitable mount point exists. If this volume will become a root "
+"partition, then temporarily use another mount point such as [.filename]#/"
+"mnt#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:111
+msgid ""
+"Determine the device names for the disks which will be striped, and create "
+"the new stripe device. For example, to stripe two unused and unpartitioned "
+"ATA disks with device names of [.filename]#/dev/ad2# and [.filename]#/dev/"
+"ad3#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:118
+#, no-wrap
+msgid ""
+"# gstripe label -v st0 /dev/ad2 /dev/ad3\n"
+"Metadata value stored on /dev/ad2.\n"
+"Metadata value stored on /dev/ad3.\n"
+"Done.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:121
+msgid ""
+"Write a standard label, also known as a partition table, on the new volume "
+"and install the default bootstrap code:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:125
+#, no-wrap
+msgid "# bsdlabel -wB /dev/stripe/st0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:128
+msgid ""
+"This process should create two other devices in [.filename]#/dev/stripe# in "
+"addition to [.filename]#st0#. Those include [.filename]#st0a# and [."
+"filename]#st0c#. At this point, a UFS file system can be created on [."
+"filename]#st0a# using `newfs`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:132
+#, no-wrap
+msgid "# newfs -U /dev/stripe/st0a\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:136
+msgid ""
+"Many numbers will glide across the screen, and after a few seconds, the "
+"process will be complete. The volume has been created and is ready to be "
+"mounted."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:137
+msgid "To manually mount the created disk stripe:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:141
+#, no-wrap
+msgid "# mount /dev/stripe/st0a /mnt\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:144
+msgid ""
+"To mount this striped file system automatically during the boot process, "
+"place the volume information in [.filename]#/etc/fstab#. In this example, a "
+"permanent mount point, named [.filename]#stripe#, is created:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:150
+#, no-wrap
+msgid ""
+"# mkdir /stripe\n"
+"# echo \"/dev/stripe/st0a /stripe ufs rw 2 2\" \\\n"
+">> /etc/fstab\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:153
+msgid ""
+"The [.filename]#geom_stripe.ko# module must also be automatically loaded "
+"during system initialization, by adding a line to [.filename]#/boot/loader."
+"conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:157
+#, no-wrap
+msgid "# echo 'geom_stripe_load=\"YES\"' >> /boot/loader.conf\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/geom/_index.adoc:161
+#, no-wrap
+msgid "RAID1 - Mirroring"
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:168
+msgid ""
+"RAID1, or _mirroring_, is the technique of writing the same data to more "
+"than one disk drive. Mirrors are usually used to guard against data loss "
+"due to drive failure. Each drive in a mirror contains an identical copy of "
+"the data. When an individual drive fails, the mirror continues to work, "
+"providing data from the drives that are still functioning. The computer "
+"keeps running, and the administrator has time to replace the failed drive "
+"without user interruption."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:173
+msgid ""
+"Two common situations are illustrated in these examples. The first creates "
+"a mirror out of two new drives and uses it as a replacement for an existing "
+"single drive. The second example creates a mirror on a single new drive, "
+"copies the old drive's data to it, then inserts the old drive into the "
+"mirror. While this procedure is slightly more complicated, it only requires "
+"one new drive."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:178
+msgid ""
+"Traditionally, the two drives in a mirror are identical in model and "
+"capacity, but man:gmirror[8] does not require that. Mirrors created with "
+"dissimilar drives will have a capacity equal to that of the smallest drive "
+"in the mirror. Extra space on larger drives will be unused. Drives "
+"inserted into the mirror later must have at least as much capacity as the "
+"smallest drive already in the mirror."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:182
+msgid ""
+"The mirroring procedures shown here are non-destructive, but as with any "
+"major disk operation, make a full backup first."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:188
+msgid ""
+"While man:dump[8] is used in these procedures to copy file systems, it does "
+"not work on file systems with soft updates journaling. See man:tunefs[8] "
+"for information on detecting and disabling soft updates journaling."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/geom/_index.adoc:191
+#, no-wrap
+msgid "Metadata Issues"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:196
+msgid ""
+"Many disk systems store metadata at the end of each disk. Old metadata "
+"should be erased before reusing the disk for a mirror. Most problems are "
+"caused by two particular types of leftover metadata: GPT partition tables "
+"and old metadata from a previous mirror."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:199
+msgid ""
+"GPT metadata can be erased with man:gpart[8]. This example erases both "
+"primary and backup GPT partition tables from disk [.filename]#ada8#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:203
+#, no-wrap
+msgid "# gpart destroy -F ada8\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:207
+msgid ""
+"A disk can be removed from an active mirror and the metadata erased in one "
+"step using man:gmirror[8]. Here, the example disk [.filename]#ada8# is "
+"removed from the active mirror [.filename]#gm4#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:211
+#, no-wrap
+msgid "# gmirror remove gm4 ada8\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:214
+msgid ""
+"If the mirror is not running, but old mirror metadata is still on the disk, "
+"use `gmirror clear` to remove it:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:218
+#, no-wrap
+msgid "# gmirror clear ada8\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:223
+msgid ""
+"man:gmirror[8] stores one block of metadata at the end of the disk. As GPT "
+"partition schemes also store metadata at the end of the disk, mirroring "
+"entire GPT disks with man:gmirror[8] is not recommended. MBR partitioning "
+"is used here because it only stores a partition table at the start of the "
+"disk and does not conflict with the mirror metadata."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/geom/_index.adoc:225
+#, no-wrap
+msgid "Creating a Mirror with Two New Disks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:230
+msgid ""
+"In this example, FreeBSD has already been installed on a single disk, [."
+"filename]#ada0#. Two new disks, [.filename]#ada1# and [.filename]#ada2#, "
+"have been connected to the system. A new mirror will be created on these "
+"two disks and used to replace the old single disk."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:233
+msgid ""
+"The [.filename]#geom_mirror.ko# kernel module must either be built into the "
+"kernel or loaded at boot- or run-time. Manually load the kernel module now:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:237
+#: documentation/content/en/books/handbook/geom/_index.adoc:359
+#, no-wrap
+msgid "# gmirror load\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:240
+msgid "Create the mirror with the two new drives:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:244
+#, no-wrap
+msgid "# gmirror label -v gm0 /dev/ada1 /dev/ada2\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:248
+msgid ""
+"[.filename]#gm0# is a user-chosen device name assigned to the new mirror. "
+"After the mirror has been started, this device name appears in [.filename]#/"
+"dev/mirror/#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:252
+msgid ""
+"MBR and bsdlabel partition tables can now be created on the mirror with man:"
+"gpart[8]. This example uses a traditional file system layout, with "
+"partitions for [.filename]#/#, swap, [.filename]#/var#, [.filename]#/tmp#, "
+"and [.filename]#/usr#. A single [.filename]#/# and a swap partition will "
+"also work."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:254
+msgid ""
+"Partitions on the mirror do not have to be the same size as those on the "
+"existing disk, but they must be large enough to hold all the data already "
+"present on [.filename]#ada0#."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:264
+#, no-wrap
+msgid ""
+"# gpart create -s MBR mirror/gm0\n"
+"# gpart add -t freebsd -a 4k mirror/gm0\n"
+"# gpart show mirror/gm0\n"
+"=> 63 156301423 mirror/gm0 MBR (74G)\n"
+" 63 63 - free - (31k)\n"
+" 126 156301299 1 freebsd (74G)\n"
+" 156301425 61 - free - (30k)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:283
+#, no-wrap
+msgid ""
+"# gpart create -s BSD mirror/gm0s1\n"
+"# gpart add -t freebsd-ufs -a 4k -s 2g mirror/gm0s1\n"
+"# gpart add -t freebsd-swap -a 4k -s 4g mirror/gm0s1\n"
+"# gpart add -t freebsd-ufs -a 4k -s 2g mirror/gm0s1\n"
+"# gpart add -t freebsd-ufs -a 4k -s 1g mirror/gm0s1\n"
+"# gpart add -t freebsd-ufs -a 4k mirror/gm0s1\n"
+"# gpart show mirror/gm0s1\n"
+"=> 0 156301299 mirror/gm0s1 BSD (74G)\n"
+" 0 2 - free - (1.0k)\n"
+" 2 4194304 1 freebsd-ufs (2.0G)\n"
+" 4194306 8388608 2 freebsd-swap (4.0G)\n"
+" 12582914 4194304 4 freebsd-ufs (2.0G)\n"
+" 16777218 2097152 5 freebsd-ufs (1.0G)\n"
+" 18874370 137426928 6 freebsd-ufs (65G)\n"
+" 156301298 1 - free - (512B)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:286
+#: documentation/content/en/books/handbook/geom/_index.adoc:504
+msgid ""
+"Make the mirror bootable by installing bootcode in the MBR and bsdlabel and "
+"setting the active slice:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:292
+#: documentation/content/en/books/handbook/geom/_index.adoc:510
+#, no-wrap
+msgid ""
+"# gpart bootcode -b /boot/mbr mirror/gm0\n"
+"# gpart set -a active -i 1 mirror/gm0\n"
+"# gpart bootcode -b /boot/boot mirror/gm0s1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:295
+msgid "Format the file systems on the new mirror, enabling soft-updates."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:302
+#, no-wrap
+msgid ""
+"# newfs -U /dev/mirror/gm0s1a\n"
+"# newfs -U /dev/mirror/gm0s1d\n"
+"# newfs -U /dev/mirror/gm0s1e\n"
+"# newfs -U /dev/mirror/gm0s1f\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:305
+msgid ""
+"File systems from the original [.filename]#ada0# disk can now be copied onto "
+"the mirror with man:dump[8] and man:restore[8]."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:316
+#, no-wrap
+msgid ""
+"# mount /dev/mirror/gm0s1a /mnt\n"
+"# dump -C16 -b64 -0aL -f - / | (cd /mnt && restore -rf -)\n"
+"# mount /dev/mirror/gm0s1d /mnt/var\n"
+"# mount /dev/mirror/gm0s1e /mnt/tmp\n"
+"# mount /dev/mirror/gm0s1f /mnt/usr\n"
+"# dump -C16 -b64 -0aL -f - /var | (cd /mnt/var && restore -rf -)\n"
+"# dump -C16 -b64 -0aL -f - /tmp | (cd /mnt/tmp && restore -rf -)\n"
+"# dump -C16 -b64 -0aL -f - /usr | (cd /mnt/usr && restore -rf -)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:319
+msgid ""
+"Edit [.filename]#/mnt/etc/fstab# to point to the new mirror file systems:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:328
+#, no-wrap
+msgid ""
+"# Device\t\tMountpoint\tFStype\tOptions\tDump\tPass#\n"
+"/dev/mirror/gm0s1a\t/\t\tufs\trw\t1\t1\n"
+"/dev/mirror/gm0s1b\tnone\t\tswap\tsw\t0\t0\n"
+"/dev/mirror/gm0s1d\t/var\t\tufs\trw\t2\t2\n"
+"/dev/mirror/gm0s1e\t/tmp\t\tufs\trw\t2\t2\n"
+"/dev/mirror/gm0s1f\t/usr\t\tufs\trw\t2\t2\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:331
+msgid ""
+"If the [.filename]#geom_mirror.ko# kernel module has not been built into the "
+"kernel, [.filename]#/mnt/boot/loader.conf# is edited to load the module at "
+"boot:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:335
+#: documentation/content/en/books/handbook/geom/_index.adoc:538
+#: documentation/content/en/books/handbook/geom/_index.adoc:651
+#, no-wrap
+msgid "geom_mirror_load=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:340
+msgid ""
+"Reboot the system to test the new mirror and verify that all data has been "
+"copied. The BIOS will see the mirror as two individual drives rather than a "
+"mirror. Since the drives are identical, it does not matter which is "
+"selected to boot."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:343
+msgid ""
+"See <<gmirror-troubleshooting>> if there are problems booting. Powering "
+"down and disconnecting the original [.filename]#ada0# disk will allow it to "
+"be kept as an offline backup."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:345
+msgid "In use, the mirror will behave just like the original single drive."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/geom/_index.adoc:347
+#, no-wrap
+msgid "Creating a Mirror with an Existing Drive"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:353
+msgid ""
+"In this example, FreeBSD has already been installed on a single disk, [."
+"filename]#ada0#. A new disk, [.filename]#ada1#, has been connected to the "
+"system. A one-disk mirror will be created on the new disk, the existing "
+"system copied onto it, and then the old disk will be inserted into the "
+"mirror. This slightly complex procedure is required because `gmirror` needs "
+"to put a 512-byte block of metadata at the end of each disk, and the "
+"existing [.filename]#ada0# has usually had all of its space already "
+"allocated."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:355
+msgid "Load the [.filename]#geom_mirror.ko# kernel module:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:362
+msgid "Check the media size of the original disk with `diskinfo`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:369
+#, no-wrap
+msgid ""
+"# diskinfo -v ada0 | head -n3\n"
+"/dev/ada0\n"
+" 512 # sectorsize\n"
+" 1000204821504 # mediasize in bytes (931G)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:376
+msgid ""
+"Create a mirror on the new disk. To make certain that the mirror capacity "
+"is not any larger than the original [.filename]#ada0# drive, man:gnop[8] is "
+"used to create a fake drive of the same size. This drive does not store any "
+"data, but is used only to limit the size of the mirror. When man:gmirror[8] "
+"creates the mirror, it will restrict the capacity to the size of [."
+"filename]#gzero.nop#, even if the new [.filename]#ada1# drive has more "
+"space. Note that the _1000204821504_ in the second line is equal to [."
+"filename]#ada0#'s media size as shown by `diskinfo` above."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:383
+#, no-wrap
+msgid ""
+"# geom zero load\n"
+"# gnop create -s 1000204821504 gzero\n"
+"# gmirror label -v gm0 gzero.nop ada1\n"
+"# gmirror forget gm0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:388
+msgid ""
+"Since [.filename]#gzero.nop# does not store any data, the mirror does not "
+"see it as connected. The mirror is told to \"forget\" unconnected "
+"components, removing references to [.filename]#gzero.nop#. The result is a "
+"mirror device containing only a single disk, [.filename]#ada1#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:392
+msgid ""
+"After creating [.filename]#gm0#, view the partition table on [."
+"filename]#ada0#. This output is from a 1 TB drive. If there is some "
+"unallocated space at the end of the drive, the contents may be copied "
+"directly from [.filename]#ada0# to the new mirror."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:394
+msgid ""
+"However, if the output shows that all of the space on the disk is allocated, "
+"as in the following listing, there is no space available for the 512-byte "
+"mirror metadata at the end of the disk."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:400
+#, no-wrap
+msgid ""
+"# gpart show ada0\n"
+"=> 63 1953525105 ada0 MBR (931G)\n"
+" 63 1953525105 1 freebsd [active] (931G)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:404
+msgid ""
+"In this case, the partition table must be edited to reduce the capacity by "
+"one sector on [.filename]#mirror/gm0#. The procedure will be explained "
+"later."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:406
+msgid ""
+"In either case, partition tables on the primary disk should be first copied "
+"using `gpart backup` and `gpart restore`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:411
+#, no-wrap
+msgid ""
+"# gpart backup ada0 > table.ada0\n"
+"# gpart backup ada0s1 > table.ada0s1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:415
+msgid ""
+"These commands create two files, [.filename]#table.ada0# and [."
+"filename]#table.ada0s1#. This example is from a 1 TB drive:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:421
+#, no-wrap
+msgid ""
+"# cat table.ada0\n"
+"MBR 4\n"
+"1 freebsd 63 1953525105 [active]\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:433
+#, no-wrap
+msgid ""
+"# cat table.ada0s1\n"
+"BSD 8\n"
+"1 freebsd-ufs 0 4194304\n"
+"2 freebsd-swap 4194304 33554432\n"
+"4 freebsd-ufs 37748736 50331648\n"
+"5 freebsd-ufs 88080384 41943040\n"
+"6 freebsd-ufs 130023424 838860800\n"
+"7 freebsd-ufs 968884224 984640881\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:438
+msgid ""
+"If no free space is shown at the end of the disk, the size of both the slice "
+"and the last partition must be reduced by one sector. Edit the two files, "
+"reducing the size of both the slice and last partition by one. These are "
+"the last numbers in each listing."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:444
+#, no-wrap
+msgid ""
+"# cat table.ada0\n"
+"MBR 4\n"
+"1 freebsd 63 1953525104 [active]\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:456
+#, no-wrap
+msgid ""
+"# cat table.ada0s1\n"
+"BSD 8\n"
+"1 freebsd-ufs 0 4194304\n"
+"2 freebsd-swap 4194304 33554432\n"
+"4 freebsd-ufs 37748736 50331648\n"
+"5 freebsd-ufs 88080384 41943040\n"
+"6 freebsd-ufs 130023424 838860800\n"
+"7 freebsd-ufs 968884224 984640880\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:459
+msgid ""
+"If at least one sector was unallocated at the end of the disk, these two "
+"files can be used without modification."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:461
+msgid "Now restore the partition table into [.filename]#mirror/gm0#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:466
+#, no-wrap
+msgid ""
+"# gpart restore mirror/gm0 < table.ada0\n"
+"# gpart restore mirror/gm0s1 < table.ada0s1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:470
+msgid ""
+"Check the partition table with `gpart show`. This example has [."
+"filename]#gm0s1a# for [.filename]#/#, [.filename]#gm0s1d# for [.filename]#/"
+"var#, [.filename]#gm0s1e# for [.filename]#/usr#, [.filename]#gm0s1f# for [."
+"filename]#/data1#, and [.filename]#gm0s1g# for [.filename]#/data2#."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:477
+#, no-wrap
+msgid ""
+"# gpart show mirror/gm0\n"
+"=> 63 1953525104 mirror/gm0 MBR (931G)\n"
+" 63 1953525042 1 freebsd [active] (931G)\n"
+" 1953525105 62 - free - (31k)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:487
+#, no-wrap
+msgid ""
+"# gpart show mirror/gm0s1\n"
+"=> 0 1953525042 mirror/gm0s1 BSD (931G)\n"
+" 0 2097152 1 freebsd-ufs (1.0G)\n"
+" 2097152 16777216 2 freebsd-swap (8.0G)\n"
+" 18874368 41943040 4 freebsd-ufs (20G)\n"
+" 60817408 20971520 5 freebsd-ufs (10G)\n"
+" 81788928 629145600 6 freebsd-ufs (300G)\n"
+" 710934528 1242590514 7 freebsd-ufs (592G)\n"
+" 1953525042 63 - free - (31k)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:490
+msgid ""
+"Both the slice and the last partition must have at least one free block at "
+"the end of the disk."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:493
+msgid ""
+"Create file systems on these new partitions. The number of partitions will "
+"vary to match the original disk, [.filename]#ada0#."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:501
+#, no-wrap
+msgid ""
+"# newfs -U /dev/mirror/gm0s1a\n"
+"# newfs -U /dev/mirror/gm0s1d\n"
+"# newfs -U /dev/mirror/gm0s1e\n"
+"# newfs -U /dev/mirror/gm0s1f\n"
+"# newfs -U /dev/mirror/gm0s1g\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:514
+msgid ""
+"Adjust [.filename]#/etc/fstab# to use the new partitions on the mirror. "
+"Back up this file first by copying it to [.filename]#/etc/fstab.orig#."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:518
+#, no-wrap
+msgid "# cp /etc/fstab /etc/fstab.orig\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:521
+msgid ""
+"Edit [.filename]#/etc/fstab#, replacing [.filename]#/dev/ada0# with [."
+"filename]#mirror/gm0#."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:531
+#, no-wrap
+msgid ""
+"# Device\t\tMountpoint\tFStype\tOptions\tDump\tPass#\n"
+"/dev/mirror/gm0s1a\t/\t\tufs\trw\t1\t1\n"
+"/dev/mirror/gm0s1b\tnone\t\tswap\tsw\t0\t0\n"
+"/dev/mirror/gm0s1d\t/var\t\tufs\trw\t2\t2\n"
+"/dev/mirror/gm0s1e\t/usr\t\tufs\trw\t2\t2\n"
+"/dev/mirror/gm0s1f\t/data1\t\tufs\trw\t2\t2\n"
+"/dev/mirror/gm0s1g\t/data2\t\tufs\trw\t2\t2\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:534
+msgid ""
+"If the [.filename]#geom_mirror.ko# kernel module has not been built into the "
+"kernel, edit [.filename]#/boot/loader.conf# to load it at boot:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:542
+msgid ""
+"File systems from the original disk can now be copied onto the mirror with "
+"man:dump[8] and man:restore[8]. Each file system dumped with `dump -L` will "
+"create a snapshot first, which can take some time."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:555
+#, no-wrap
+msgid ""
+"# mount /dev/mirror/gm0s1a /mnt\n"
+"# dump -C16 -b64 -0aL -f - / | (cd /mnt && restore -rf -)\n"
+"# mount /dev/mirror/gm0s1d /mnt/var\n"
+"# mount /dev/mirror/gm0s1e /mnt/usr\n"
+"# mount /dev/mirror/gm0s1f /mnt/data1\n"
+"# mount /dev/mirror/gm0s1g /mnt/data2\n"
+"# dump -C16 -b64 -0aL -f - /usr | (cd /mnt/usr && restore -rf -)\n"
+"# dump -C16 -b64 -0aL -f - /var | (cd /mnt/var && restore -rf -)\n"
+"# dump -C16 -b64 -0aL -f - /data1 | (cd /mnt/data1 && restore -rf -)\n"
+"# dump -C16 -b64 -0aL -f - /data2 | (cd /mnt/data2 && restore -rf -)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:560
+msgid ""
+"Restart the system, booting from [.filename]#ada1#. If everything is "
+"working, the system will boot from [.filename]#mirror/gm0#, which now "
+"contains the same data as [.filename]#ada0# had previously. See <<gmirror-"
+"troubleshooting>> if there are problems booting."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:562
+msgid ""
+"At this point, the mirror still consists of only the single [."
+"filename]#ada1# disk."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:564
+msgid ""
+"After booting from [.filename]#mirror/gm0# successfully, the final step is "
+"inserting [.filename]#ada0# into the mirror."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:570
+msgid ""
+"When [.filename]#ada0# is inserted into the mirror, its former contents will "
+"be overwritten by data from the mirror. Make certain that [."
+"filename]#mirror/gm0# has the same contents as [.filename]#ada0# before "
+"adding [.filename]#ada0# to the mirror. If the contents previously copied "
+"by man:dump[8] and man:restore[8] are not identical to what was on [."
+"filename]#ada0#, revert [.filename]#/etc/fstab# to mount the file systems on "
+"[.filename]#ada0#, reboot, and start the whole procedure again."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:576
+#, no-wrap
+msgid ""
+"# gmirror insert gm0 ada0\n"
+"GEOM_MIRROR: Device gm0: rebuilding provider ada0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:580
+msgid ""
+"Synchronization between the two disks will start immediately. Use `gmirror "
+"status` to view the progress."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:587
+#, no-wrap
+msgid ""
+"# gmirror status\n"
+" Name Status Components\n"
+"mirror/gm0 DEGRADED ada1 (ACTIVE)\n"
+" ada0 (SYNCHRONIZING, 64%)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:590
+msgid "After a while, synchronization will finish."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:598
+#, no-wrap
+msgid ""
+"GEOM_MIRROR: Device gm0: rebuilding provider ada0 finished.\n"
+"# gmirror status\n"
+" Name Status Components\n"
+"mirror/gm0 COMPLETE ada1 (ACTIVE)\n"
+" ada0 (ACTIVE)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:602
+msgid ""
+"[.filename]#mirror/gm0# now consists of the two disks [.filename]#ada0# and "
+"[.filename]#ada1#, and the contents are automatically synchronized with each "
+"other. In use, [.filename]#mirror/gm0# will behave just like the original "
+"single drive."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/geom/_index.adoc:604
+#, no-wrap
+msgid "Troubleshooting"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:608
+msgid ""
+"If the system no longer boots, BIOS settings may have to be changed to boot "
+"from one of the new mirrored drives. Either mirror drive can be used for "
+"booting, as they contain identical data."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:610
+msgid ""
+"If the boot stops with this message, something is wrong with the mirror "
+"device:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:614
+#, no-wrap
+msgid "Mounting from ufs:/dev/mirror/gm0s1a failed with error 19.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:618
+#, no-wrap
+msgid ""
+"Loader variables:\n"
+" vfs.root.mountfrom=ufs:/dev/mirror/gm0s1a\n"
+" vfs.root.mountfrom.options=rw\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:623
+#, no-wrap
+msgid ""
+"Manual root filesystem specification:\n"
+" <fstype>:<device> [options]\n"
+" Mount <device> using filesystem <fstype>\n"
+" and with the specified (optional) option list.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:628
+#, no-wrap
+msgid ""
+" e.g. ufs:/dev/da0s1a\n"
+" zfs:tank\n"
+" cd9660:/dev/acd0 ro\n"
+" (which is equivalent to: mount -t cd9660 -o ro /dev/acd0 /)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:632
+#, no-wrap
+msgid ""
+" ? List valid disk boot devices\n"
+" . Yield 1 second (for background tasks)\n"
+" <empty line> Abort manual input\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:634
+#, no-wrap
+msgid "mountroot>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:639
+msgid ""
+"Forgetting to load the [.filename]#geom_mirror.ko# module in [.filename]#/"
+"boot/loader.conf# can cause this problem. To fix it, boot from a FreeBSD "
+"installation media and choose `Shell` at the first prompt. Then load the "
+"mirror module and mount the mirror device:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:644
+#, no-wrap
+msgid ""
+"# gmirror load\n"
+"# mount /dev/mirror/gm0s1a /mnt\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:647
+msgid ""
+"Edit [.filename]#/mnt/boot/loader.conf#, adding a line to load the mirror "
+"module:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:654
+msgid "Save the file and reboot."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:660
+msgid ""
+"Other problems that cause `error 19` require more effort to fix. Although "
+"the system should boot from [.filename]#ada0#, another prompt to select a "
+"shell will appear if [.filename]#/etc/fstab# is incorrect. Enter `ufs:/dev/"
+"ada0s1a` at the boot loader prompt and press kbd:[Enter]. Undo the edits in "
+"[.filename]#/etc/fstab# then mount the file systems from the original disk "
+"([.filename]#ada0#) instead of the mirror. Reboot the system and try the "
+"procedure again."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:666
+#, no-wrap
+msgid ""
+"Enter full pathname of shell or RETURN for /bin/sh:\n"
+"# cp /etc/fstab.orig /etc/fstab\n"
+"# reboot\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/geom/_index.adoc:668
+#, no-wrap
+msgid "Recovering from Disk Failure"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:672
+msgid ""
+"The benefit of disk mirroring is that an individual disk can fail without "
+"causing the mirror to lose any data. In the above example, if [."
+"filename]#ada0# fails, the mirror will continue to work, providing data from "
+"the remaining working drive, [.filename]#ada1#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:676
+msgid ""
+"To replace the failed drive, shut down the system and physically replace the "
+"failed drive with a new drive of equal or greater capacity. Manufacturers "
+"use somewhat arbitrary values when rating drives in gigabytes, and the only "
+"way to really be sure is to compare the total count of sectors shown by "
+"`diskinfo -v`. A drive with larger capacity than the mirror will work, "
+"although the extra space on the new drive will not be used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:679
+msgid ""
+"After the computer is powered back up, the mirror will be running in a "
+"\"degraded\" mode with only one drive. The mirror is told to forget drives "
+"that are not currently connected:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:683
+#, no-wrap
+msgid "# gmirror forget gm0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:687
+msgid ""
+"Any old metadata should be cleared from the replacement disk using the "
+"instructions in <<geom-mirror-metadata>>. Then the replacement disk, [."
+"filename]#ada4# for this example, is inserted into the mirror:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:691
+#, no-wrap
+msgid "# gmirror insert gm0 /dev/ada4\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:696
+msgid ""
+"Resynchronization begins when the new drive is inserted into the mirror. "
+"This process of copying mirror data to a new drive can take a while. "
+"Performance of the mirror will be greatly reduced during the copy, so "
+"inserting new drives is best done when there is low demand on the computer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:699
+msgid ""
+"Progress can be monitored with `gmirror status`, which shows drives that are "
+"being synchronized and the percentage of completion. During "
+"resynchronization, the status will be `DEGRADED`, changing to `COMPLETE` "
+"when the process is finished."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/geom/_index.adoc:701
+#, no-wrap
+msgid "RAID3 - Byte-level Striping with Dedicated Parity"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:709
+msgid ""
+"RAID3 is a method used to combine several disk drives into a single volume "
+"with a dedicated parity disk. In a RAID3 system, data is split up into a "
+"number of bytes that are written across all the drives in the array except "
+"for one disk which acts as a dedicated parity disk. This means that disk "
+"reads from a RAID3 implementation access all disks in the array. "
+"Performance can be enhanced by using multiple disk controllers. The RAID3 "
+"array provides a fault tolerance of 1 drive, while providing a capacity of 1 "
+"- 1/n times the total capacity of all drives in the array, where n is the "
+"number of hard drives in the array. Such a configuration is mostly suitable "
+"for storing data of larger sizes such as multimedia files."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:713
+msgid ""
+"At least 3 physical hard drives are required to build a RAID3 array. Each "
+"disk must be of the same size, since I/O requests are interleaved to read or "
+"write to multiple disks in parallel. Also, due to the nature of RAID3, the "
+"number of drives must be equal to 3, 5, 9, 17, and so on, or 2^n + 1."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:715
+msgid ""
+"This section demonstrates how to create a software RAID3 on a FreeBSD system."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:719
+msgid ""
+"While it is theoretically possible to boot from a RAID3 array on FreeBSD, "
+"that configuration is uncommon and is not advised."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/geom/_index.adoc:721
+#, no-wrap
+msgid "Creating a Dedicated RAID3 Array"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:725
+msgid ""
+"In FreeBSD, support for RAID3 is implemented by the man:graid3[8] GEOM "
+"class. Creating a dedicated RAID3 array on FreeBSD requires the following "
+"steps."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:728
+msgid ""
+"First, load the [.filename]#geom_raid3.ko# kernel module by issuing one of "
+"the following commands:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:732
+#, no-wrap
+msgid "# graid3 load\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:735
+msgid "or:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:739
+#, no-wrap
+msgid "# kldload geom_raid3\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:742
+msgid ""
+"Ensure that a suitable mount point exists. This command creates a new "
+"directory to use as the mount point:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:746
+#, no-wrap
+msgid "# mkdir /multimedia\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:749
+msgid ""
+"Determine the device names for the disks which will be added to the array, "
+"and create the new RAID3 device. The final device listed will act as the "
+"dedicated parity disk. This example uses three unpartitioned ATA drives: [."
+"filename]#ada1# and [.filename]#ada2# for data, and [.filename]#ada3# for "
+"parity."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:757
+#, no-wrap
+msgid ""
+"# graid3 label -v gr0 /dev/ada1 /dev/ada2 /dev/ada3\n"
+"Metadata value stored on /dev/ada1.\n"
+"Metadata value stored on /dev/ada2.\n"
+"Metadata value stored on /dev/ada3.\n"
+"Done.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:760
+msgid ""
+"Partition the newly created [.filename]#gr0# device and put a UFS file "
+"system on it:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:766
+#, no-wrap
+msgid ""
+"# gpart create -s GPT /dev/raid3/gr0\n"
+"# gpart add -t freebsd-ufs /dev/raid3/gr0\n"
+"# newfs -j /dev/raid3/gr0p1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:770
+msgid ""
+"Many numbers will glide across the screen, and after a bit of time, the "
+"process will be complete. The volume has been created and is ready to be "
+"mounted:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:774
+#, no-wrap
+msgid "# mount /dev/raid3/gr0p1 /multimedia/\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:777
+msgid "The RAID3 array is now ready to use."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:779
+msgid ""
+"Additional configuration is needed to retain this setup across system "
+"reboots."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:782
+msgid ""
+"The [.filename]#geom_raid3.ko# module must be loaded before the array can be "
+"mounted. To automatically load the kernel module during system "
+"initialization, add the following line to [.filename]#/boot/loader.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:786
+#, no-wrap
+msgid "geom_raid3_load=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:789
+msgid ""
+"The following volume information must be added to [.filename]#/etc/fstab# in "
+"order to automatically mount the array's file system during the system boot "
+"process:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:793
+#, no-wrap
+msgid "/dev/raid3/gr0p1\t/multimedia\tufs\trw\t2\t2\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/geom/_index.adoc:796
+#, no-wrap
+msgid "Software RAID Devices"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:801
+msgid ""
+"Some motherboards and expansion cards add some simple hardware, usually just "
+"a ROM, that allows the computer to boot from a RAID array. After booting, "
+"access to the RAID array is handled by software running on the computer's "
+"main processor. This \"hardware-assisted software RAID\" gives RAID arrays "
+"that are not dependent on any particular operating system, and which are "
+"functional even before an operating system is loaded."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:804
+msgid ""
+"Several levels of RAID are supported, depending on the hardware in use. See "
+"man:graid[8] for a complete list."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:807
+msgid ""
+"man:graid[8] requires the [.filename]#geom_raid.ko# kernel module, which is "
+"included in the [.filename]#GENERIC# kernel starting with FreeBSD 9.1. If "
+"needed, it can be loaded manually with `graid load`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/geom/_index.adoc:809
+#, no-wrap
+msgid "Creating an Array"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:814
+msgid ""
+"Software RAID devices often have a menu that can be entered by pressing "
+"special keys when the computer is booting. The menu can be used to create "
+"and delete RAID arrays. man:graid[8] can also create arrays directly from "
+"the command line."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:818
+msgid ""
+"`graid label` is used to create a new array. The motherboard used for this "
+"example has an Intel software RAID chipset, so the Intel metadata format is "
+"specified. The new array is given a label of [.filename]#gm0#, it is a "
+"mirror (RAID1), and uses drives [.filename]#ada0# and [.filename]#ada1#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:823
+msgid ""
+"Some space on the drives will be overwritten when they are made into a new "
+"array. Back up existing data first!"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:837
+#, no-wrap
+msgid ""
+"# graid label Intel gm0 RAID1 ada0 ada1\n"
+"GEOM_RAID: Intel-a29ea104: Array Intel-a29ea104 created.\n"
+"GEOM_RAID: Intel-a29ea104: Disk ada0 state changed from NONE to ACTIVE.\n"
+"GEOM_RAID: Intel-a29ea104: Subdisk gm0:0-ada0 state changed from NONE to ACTIVE.\n"
+"GEOM_RAID: Intel-a29ea104: Disk ada1 state changed from NONE to ACTIVE.\n"
+"GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-ada1 state changed from NONE to ACTIVE.\n"
+"GEOM_RAID: Intel-a29ea104: Array started.\n"
+"GEOM_RAID: Intel-a29ea104: Volume gm0 state changed from STARTING to OPTIMAL.\n"
+"Intel-a29ea104 created\n"
+"GEOM_RAID: Intel-a29ea104: Provider raid/r0 for volume gm0 created.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:840
+msgid "A status check shows the new mirror is ready for use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:847
+#: documentation/content/en/books/handbook/geom/_index.adoc:1023
+#, no-wrap
+msgid ""
+"# graid status\n"
+" Name Status Components\n"
+"raid/r0 OPTIMAL ada0 (ACTIVE (ACTIVE))\n"
+" ada1 (ACTIVE (ACTIVE))\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:852
+msgid ""
+"The array device appears in [.filename]#/dev/raid/#. The first array is "
+"called [.filename]#r0#. Additional arrays, if present, will be [."
+"filename]#r1#, [.filename]#r2#, and so on."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:856
+msgid ""
+"The BIOS menu on some of these devices can create arrays with special "
+"characters in their names. To avoid problems with those special characters, "
+"arrays are given simple numbered names like [.filename]#r0#. To show the "
+"actual labels, like [.filename]#gm0# in the example above, use man:sysctl[8]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:860
+#, no-wrap
+msgid "# sysctl kern.geom.raid.name_format=1\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/geom/_index.adoc:863
+#, no-wrap
+msgid "Multiple Volumes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:869
+msgid ""
+"Some software RAID devices support more than one _volume_ on an array. "
+"Volumes work like partitions, allowing space on the physical drives to be "
+"split and used in different ways. For example, Intel software RAID devices "
+"support two volumes. This example creates a 40 G mirror for safely storing "
+"the operating system, followed by a 20 G RAID0 (stripe) volume for fast "
+"temporary storage:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:874
+#, no-wrap
+msgid ""
+"# graid label -S 40G Intel gm0 RAID1 ada0 ada1\n"
+"# graid add -S 20G gm0 RAID0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:878
+msgid ""
+"Volumes appear as additional [.filename]#rX# entries in [.filename]#/dev/"
+"raid/#. An array with two volumes will show [.filename]#r0# and [."
+"filename]#r1#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:880
+msgid ""
+"See man:graid[8] for the number of volumes supported by different software "
+"RAID devices."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/geom/_index.adoc:882
+#, no-wrap
+msgid "Converting a Single Drive to a Mirror"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:886
+msgid ""
+"Under certain specific conditions, it is possible to convert an existing "
+"single drive to a man:graid[8] array without reformatting. To avoid data "
+"loss during the conversion, the existing drive must meet these minimum "
+"requirements:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:888
+msgid ""
+"The drive must be partitioned with the MBR partitioning scheme. GPT or other "
+"partitioning schemes with metadata at the end of the drive will be "
+"overwritten and corrupted by the man:graid[8] metadata."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:889
+msgid ""
+"There must be enough unpartitioned and unused space at the end of the drive "
+"to hold the man:graid[8] metadata. This metadata varies in size, but the "
+"largest occupies 64 M, so at least that much free space is recommended."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:892
+msgid ""
+"If the drive meets these requirements, start by making a full backup. Then "
+"create a single-drive mirror with that drive:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:896
+#, no-wrap
+msgid "# graid label Intel gm0 RAID1 ada0 NONE\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:900
+msgid ""
+"man:graid[8] metadata was written to the end of the drive in the unused "
+"space. A second drive can now be inserted into the mirror:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:904
+#, no-wrap
+msgid "# graid insert raid/r0 ada1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:908
+msgid ""
+"Data from the original drive will immediately begin to be copied to the "
+"second drive. The mirror will operate in degraded status until the copy is "
+"complete."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/geom/_index.adoc:910
+#, no-wrap
+msgid "Inserting New Drives into the Array"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:915
+msgid ""
+"Drives can be inserted into an array as replacements for drives that have "
+"failed or are missing. If there are no failed or missing drives, the new "
+"drive becomes a spare. For example, inserting a new drive into a working "
+"two-drive mirror results in a two-drive mirror with one spare drive, not a "
+"three-drive mirror."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:918
+msgid ""
+"In the example mirror array, data immediately begins to be copied to the "
+"newly-inserted drive. Any existing information on the new drive will be "
+"overwritten."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:926
+#, no-wrap
+msgid ""
+"# graid insert raid/r0 ada1\n"
+"GEOM_RAID: Intel-a29ea104: Disk ada1 state changed from NONE to ACTIVE.\n"
+"GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-ada1 state changed from NONE to NEW.\n"
+"GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-ada1 state changed from NEW to REBUILD.\n"
+"GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-ada1 rebuild start at 0.\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/geom/_index.adoc:929
+#, no-wrap
+msgid "Removing Drives from the Array"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:932
+msgid ""
+"Individual drives can be permanently removed from a from an array and their "
+"metadata erased:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:939
+#, no-wrap
+msgid ""
+"# graid remove raid/r0 ada1\n"
+"GEOM_RAID: Intel-a29ea104: Disk ada1 state changed from ACTIVE to OFFLINE.\n"
+"GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-[unknown] state changed from ACTIVE to NONE.\n"
+"GEOM_RAID: Intel-a29ea104: Volume gm0 state changed from OPTIMAL to DEGRADED.\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/geom/_index.adoc:942
+#, no-wrap
+msgid "Stopping the Array"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:946
+msgid ""
+"An array can be stopped without removing metadata from the drives. The "
+"array will be restarted when the system is booted."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:950
+#, no-wrap
+msgid "# graid stop raid/r0\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/geom/_index.adoc:953
+#, no-wrap
+msgid "Checking Array Status"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:957
+msgid ""
+"Array status can be checked at any time. After a drive was added to the "
+"mirror in the example above, data is being copied from the original drive to "
+"the new drive:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:964
+#, no-wrap
+msgid ""
+"# graid status\n"
+" Name Status Components\n"
+"raid/r0 DEGRADED ada0 (ACTIVE (ACTIVE))\n"
+" ada1 (ACTIVE (REBUILD 28%))\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:968
+msgid ""
+"Some types of arrays, like `RAID0` or `CONCAT`, may not be shown in the "
+"status report if disks have failed. To see these partially-failed arrays, "
+"add `-ga`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:974
+#, no-wrap
+msgid ""
+"# graid status -ga\n"
+" Name Status Components\n"
+"Intel-e2d07d9a BROKEN ada6 (ACTIVE (ACTIVE))\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/geom/_index.adoc:977
+#, no-wrap
+msgid "Deleting Arrays"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:981
+msgid ""
+"Arrays are destroyed by deleting all of the volumes from them. When the "
+"last volume present is deleted, the array is stopped and metadata is removed "
+"from the drives:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:985
+#: documentation/content/en/books/handbook/geom/_index.adoc:1030
+#, no-wrap
+msgid "# graid delete raid/r0\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/geom/_index.adoc:988
+#, no-wrap
+msgid "Deleting Unexpected Arrays"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:993
+msgid ""
+"Drives may unexpectedly contain man:graid[8] metadata, either from previous "
+"use or manufacturer testing. man:graid[8] will detect these drives and "
+"create an array, interfering with access to the individual drive. To remove "
+"the unwanted metadata:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:996
+msgid ""
+"Boot the system. At the boot menu, select `2` for the loader prompt. Enter:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:1001
+#, no-wrap
+msgid ""
+"OK set kern.geom.raid.enable=0\n"
+"OK boot\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1004
+msgid "The system will boot with man:graid[8] disabled."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1005
+msgid "Back up all data on the affected drive."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1006
+msgid "As a workaround, man:graid[8] array detection can be disabled by adding"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:1010
+#, no-wrap
+msgid "kern.geom.raid.enable=0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1013
+msgid "to [.filename]#/boot/loader.conf#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1016
+msgid ""
+"To permanently remove the man:graid[8] metadata from the affected drive, "
+"boot a FreeBSD installation CD-ROM or memory stick, and select `Shell`. Use "
+"`status` to find the name of the array, typically `raid/r0`:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1026
+msgid "Delete the volume by name:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1034
+msgid ""
+"If there is more than one volume shown, repeat the process for each volume. "
+"After the last array has been deleted, the volume will be destroyed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1037
+msgid ""
+"Reboot and verify data, restoring from backup if necessary. After the "
+"metadata has been removed, the `kern.geom.raid.enable=0` entry in [."
+"filename]#/boot/loader.conf# can also be removed."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/geom/_index.adoc:1039
+#, no-wrap
+msgid "GEOM Gate Network"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1044
+msgid ""
+"GEOM provides a simple mechanism for providing remote access to devices such "
+"as disks, CDs, and file systems through the use of the GEOM Gate network "
+"daemon, ggated. The system with the device runs the server daemon which "
+"handles requests made by clients using ggatec. The devices should not "
+"contain any sensitive data as the connection between the client and the "
+"server is not encrypted."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1048
+msgid ""
+"Similar to NFS, which is discussed in crossref:network-servers[network-nfs,"
+"\"Network File System (NFS)\"], ggated is configured using an exports file. "
+"This file specifies which systems are permitted to access the exported "
+"resources and what level of access they are offered. For example, to give "
+"the client `192.168.1.5` read and write access to the fourth slice on the "
+"first SCSI disk, create [.filename]#/etc/gg.exports# with this line:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:1052
+#, no-wrap
+msgid "192.168.1.5 RW /dev/da0s4d\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1056
+msgid ""
+"Before exporting the device, ensure it is not currently mounted. Then, "
+"start ggated:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:1060
+#, no-wrap
+msgid "# ggated\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1064
+msgid ""
+"Several options are available for specifying an alternate listening port or "
+"changing the default location of the exports file. Refer to man:ggated[8] "
+"for details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1069
+msgid ""
+"To access the exported device on the client machine, first use `ggatec` to "
+"specify the IP address of the server and the device name of the exported "
+"device. If successful, this command will display a `ggate` device name to "
+"mount. Mount that specified device name on a free mount point. This "
+"example connects to the [.filename]#/dev/da0s4d# partition on `192.168.1.1`, "
+"then mounts [.filename]#/dev/ggate0# on [.filename]#/mnt#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:1075
+#, no-wrap
+msgid ""
+"# ggatec create -o rw 192.168.1.1 /dev/da0s4d\n"
+"ggate0\n"
+"# mount /dev/ggate0 /mnt\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1079
+msgid ""
+"The device on the server may now be accessed through [.filename]#/mnt# on "
+"the client. For more details about `ggatec` and a few usage examples, refer "
+"to man:ggatec[8]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:1084
+msgid ""
+"The mount will fail if the device is currently mounted on either the server "
+"or any other client on the network. If simultaneous access is needed to "
+"network resources, use NFS instead."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1087
+msgid ""
+"When the device is no longer needed, unmount it with `umount` so that the "
+"resource is available to other clients."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/geom/_index.adoc:1089
+#, no-wrap
+msgid "Labeling Disk Devices"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1095
+msgid ""
+"During system initialization, the FreeBSD kernel creates device nodes as "
+"devices are found. This method of probing for devices raises some issues. "
+"For instance, what if a new disk device is added via USB? It is likely that "
+"a flash device may be handed the device name of [.filename]#da0# and the "
+"original [.filename]#da0# shifted to [.filename]#da1#. This will cause "
+"issues mounting file systems if they are listed in [.filename]#/etc/fstab# "
+"which may also prevent the system from booting."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1100
+msgid ""
+"One solution is to chain SCSI devices in order so a new device added to the "
+"SCSI card will be issued unused device numbers. But what about USB devices "
+"which may replace the primary SCSI disk? This happens because USB devices "
+"are usually probed before the SCSI card. One solution is to only insert "
+"these devices after the system has been booted. Another method is to use "
+"only a single ATA drive and never list the SCSI devices in [.filename]#/etc/"
+"fstab#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1104
+msgid ""
+"A better solution is to use `glabel` to label the disk devices and use the "
+"labels in [.filename]#/etc/fstab#. Since `glabel` stores the label in the "
+"last sector of a given provider, the label will remain persistent across "
+"reboots. By using this label as a device, the file-system may always be "
+"mounted regardless of what device node it is accessed through."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:1109
+msgid ""
+"`glabel` can create both transient and permanent labels. Only permanent "
+"labels are consistent across reboots. Refer to man:glabel[8] for more "
+"information on the differences between labels."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/geom/_index.adoc:1111
+#, no-wrap
+msgid "Label Types and Examples"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1119
+msgid ""
+"Permanent labels can be a generic or a file system label. Permanent file "
+"system labels can be created with man:tunefs[8] or man:newfs[8]. These "
+"types of labels are created in a sub-directory of [.filename]#/dev#, and "
+"will be named according to the file system type. For example, UFS2 file "
+"system labels will be created in [.filename]#/dev/ufs#. Generic permanent "
+"labels can be created with `glabel label`. These are not file system "
+"specific and will be created in [.filename]#/dev/label#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1123
+msgid ""
+"Temporary labels are destroyed at the next reboot. These labels are created "
+"in [.filename]#/dev/label# and are suited to experimentation. A temporary "
+"label can be created using `glabel create`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1125
+msgid ""
+"To create a permanent label for a UFS2 file system without destroying any "
+"data, issue the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:1129
+#, no-wrap
+msgid "# tunefs -L home /dev/da3\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1132
+msgid ""
+"A label should now exist in [.filename]#/dev/ufs# which may be added to [."
+"filename]#/etc/fstab#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:1136
+#, no-wrap
+msgid "/dev/ufs/home\t\t/home ufs rw 2 2\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:1141
+msgid "The file system must not be mounted while attempting to run `tunefs`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1144
+msgid "Now the file system may be mounted:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:1148
+#, no-wrap
+msgid "# mount /home\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1151
+msgid ""
+"From this point on, so long as the [.filename]#geom_label.ko# kernel module "
+"is loaded at boot with [.filename]#/boot/loader.conf# or the `GEOM_LABEL` "
+"kernel option is present, the device node may change without any ill effect "
+"on the system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1154
+msgid ""
+"File systems may also be created with a default label by using the `-L` flag "
+"with `newfs`. Refer to man:newfs[8] for more information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1156
+msgid "The following command can be used to destroy the label:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:1160
+#, no-wrap
+msgid "# glabel destroy home\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1163
+msgid "The following example shows how to label the partitions of a boot disk."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/geom/_index.adoc:1164
+#, no-wrap
+msgid "Labeling Partitions on the Boot Disk"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:1170
+msgid ""
+"By permanently labeling the partitions on the boot disk, the system should "
+"be able to continue to boot normally, even if the disk is moved to another "
+"controller or transferred to a different system. For this example, it is "
+"assumed that a single ATA disk is used, which is currently recognized by the "
+"system as [.filename]#ad0#. It is also assumed that the standard FreeBSD "
+"partition scheme is used, with [.filename]#/#, [.filename]#/var#, [."
+"filename]#/usr# and [.filename]#/tmp#, as well as a swap partition."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:1173
+msgid ""
+"Reboot the system, and at the man:loader[8] prompt, press kbd:[4] to boot "
+"into single user mode. Then enter the following commands:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:1187
+#, no-wrap
+msgid ""
+"# glabel label rootfs /dev/ad0s1a\n"
+"GEOM_LABEL: Label for provider /dev/ad0s1a is label/rootfs\n"
+"# glabel label var /dev/ad0s1d\n"
+"GEOM_LABEL: Label for provider /dev/ad0s1d is label/var\n"
+"# glabel label usr /dev/ad0s1f\n"
+"GEOM_LABEL: Label for provider /dev/ad0s1f is label/usr\n"
+"# glabel label tmp /dev/ad0s1e\n"
+"GEOM_LABEL: Label for provider /dev/ad0s1e is label/tmp\n"
+"# glabel label swap /dev/ad0s1b\n"
+"GEOM_LABEL: Label for provider /dev/ad0s1b is label/swap\n"
+"# exit\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1192
+msgid ""
+"The system will continue with multi-user boot. After the boot completes, "
+"edit [.filename]#/etc/fstab# and replace the conventional device names, with "
+"their respective labels. The final [.filename]#/etc/fstab# will look like "
+"this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:1201
+#, no-wrap
+msgid ""
+"# Device Mountpoint FStype Options Dump Pass#\n"
+"/dev/label/swap none swap sw 0 0\n"
+"/dev/label/rootfs / ufs rw 1 1\n"
+"/dev/label/tmp /tmp ufs rw 2 2\n"
+"/dev/label/usr /usr ufs rw 2 2\n"
+"/dev/label/var /var ufs rw 2 2\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1205
+msgid ""
+"The system can now be rebooted. If everything went well, it will come up "
+"normally and `mount` will show:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:1214
+#, no-wrap
+msgid ""
+"# mount\n"
+"/dev/label/rootfs on / (ufs, local)\n"
+"devfs on /dev (devfs, local)\n"
+"/dev/label/tmp on /tmp (ufs, local, soft-updates)\n"
+"/dev/label/usr on /usr (ufs, local, soft-updates)\n"
+"/dev/label/var on /var (ufs, local, soft-updates)\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:1222
+msgid ""
+"The man:glabel[8] class supports a label type for UFS file systems, based on "
+"the unique file system id, `ufsid`. These labels may be found in [."
+"filename]#/dev/ufsid# and are created automatically during system startup. "
+"It is possible to use `ufsid` labels to mount partitions using [.filename]#/"
+"etc/fstab#. Use `glabel status` to receive a list of file systems and their "
+"corresponding `ufsid` labels:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:1229
+#, no-wrap
+msgid ""
+"% glabel status\n"
+" Name Status Components\n"
+"ufsid/486b6fc38d330916 N/A ad4s1d\n"
+"ufsid/486b6fc16926168e N/A ad4s1f\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1233
+msgid ""
+"In the above example, [.filename]#ad4s1d# represents [.filename]#/var#, "
+"while [.filename]#ad4s1f# represents [.filename]#/usr#. Using the `ufsid` "
+"values shown, these partitions may now be mounted with the following entries "
+"in [.filename]#/etc/fstab#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:1238
+#, no-wrap
+msgid ""
+"/dev/ufsid/486b6fc38d330916 /var ufs rw 2 2\n"
+"/dev/ufsid/486b6fc16926168e /usr ufs rw 2 2\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1241
+msgid ""
+"Any partitions with `ufsid` labels can be mounted in this way, eliminating "
+"the need to manually create permanent labels, while still enjoying the "
+"benefits of device name independent mounting."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/geom/_index.adoc:1243
+#, no-wrap
+msgid "UFS Journaling Through GEOM"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1249
+msgid ""
+"Support for journals on UFS file systems is available on FreeBSD. The "
+"implementation is provided through the GEOM subsystem and is configured "
+"using `gjournal`. Unlike other file system journaling implementations, the "
+"`gjournal` method is block based and not implemented as part of the file "
+"system. It is a GEOM extension."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1252
+msgid ""
+"Journaling stores a log of file system transactions, such as changes that "
+"make up a complete disk write operation, before meta-data and file writes "
+"are committed to the disk. This transaction log can later be replayed to "
+"redo file system transactions, preventing file system inconsistencies."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1257
+msgid ""
+"This method provides another mechanism to protect against data loss and "
+"inconsistencies of the file system. Unlike Soft Updates, which tracks and "
+"enforces meta-data updates, and snapshots, which create an image of the file "
+"system, a log is stored in disk space specifically for this task. For "
+"better performance, the journal may be stored on another disk. In this "
+"configuration, the journal provider or storage device should be listed after "
+"the device to enable journaling on."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1260
+msgid ""
+"The [.filename]#GENERIC# kernel provides support for `gjournal`. To "
+"automatically load the [.filename]#geom_journal.ko# kernel module at boot "
+"time, add the following line to [.filename]#/boot/loader.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:1264
+#, no-wrap
+msgid "geom_journal_load=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1267
+msgid ""
+"If a custom kernel is used, ensure the following line is in the kernel "
+"configuration file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:1271
+#, no-wrap
+msgid "options\tGEOM_JOURNAL\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1275
+msgid ""
+"Once the module is loaded, a journal can be created on a new file system "
+"using the following steps. In this example, [.filename]#da4# is a new SCSI "
+"disk:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:1280
+#, no-wrap
+msgid ""
+"# gjournal load\n"
+"# gjournal label /dev/da4\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1283
+msgid ""
+"This will load the module and create a [.filename]#/dev/da4.journal# device "
+"node on [.filename]#/dev/da4#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1285
+msgid ""
+"A UFS file system may now be created on the journaled device, then mounted "
+"on an existing mount point:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:1290
+#, no-wrap
+msgid ""
+"# newfs -O 2 -J /dev/da4.journal\n"
+"# mount /dev/da4.journal /mnt\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/geom/_index.adoc:1296
+msgid ""
+"In the case of several slices, a journal will be created for each individual "
+"slice. For instance, if [.filename]#ad4s1# and [.filename]#ad4s2# are both "
+"slices, then `gjournal` will create [.filename]#ad4s1.journal# and [."
+"filename]#ad4s2.journal#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1302
+msgid ""
+"Journaling may also be enabled on current file systems by using `tunefs`. "
+"However, _always_ make a backup before attempting to alter an existing file "
+"system. In most cases, `gjournal` will fail if it is unable to create the "
+"journal, but this does not protect against data loss incurred as a result of "
+"misusing `tunefs`. Refer to man:gjournal[8] and man:tunefs[8] for more "
+"information about these commands."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/geom/_index.adoc:1304
+msgid ""
+"It is possible to journal the boot disk of a FreeBSD system. Refer to the "
+"article extref:{gjournal-desktop}[Implementing UFS Journaling on a Desktop "
+"PC] for detailed instructions."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/glossary.adoc b/documentation/content/en/books/handbook/glossary.adoc
index b6fab1a47f..20a6795ac2 100644
--- a/documentation/content/en/books/handbook/glossary.adoc
+++ b/documentation/content/en/books/handbook/glossary.adoc
@@ -4,8 +4,8 @@ prev: books/handbook/pgpkeys
next: books/handbook/colophon
description: FreeBSD Handbook Glossary
showBookMenu: true
-weight: 43
-path: "/books/handbook/"
+weight: 45
+path: "/books/handbook/glossary/"
---
[glossary]
diff --git a/documentation/content/en/books/handbook/glossary.po b/documentation/content/en/books/handbook/glossary.po
new file mode 100644
index 0000000000..a77ff8c330
--- /dev/null
+++ b/documentation/content/en/books/handbook/glossary.po
@@ -0,0 +1,2992 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-07-15 16:41-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/glossary.adoc:1
+#, no-wrap
+msgid "FreeBSD Handbook Glossary"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/glossary.adoc:1
+#: documentation/content/en/books/handbook/glossary.adoc:13
+#, no-wrap
+msgid "FreeBSD Glossary"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:49
+msgid ""
+"This glossary contains terms and acronyms used within the FreeBSD community "
+"and documentation."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/glossary.adoc:51
+#, no-wrap
+msgid "A"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:53
+#, no-wrap
+msgid "ACL"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:55
+msgid "See <<acl-glossary,Access Control List>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:56
+#, no-wrap
+msgid "ACPI"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:58
+msgid "See <<acpi-glossary,Advanced Configuration and Power Interface>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:59
+#, no-wrap
+msgid "AMD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:61
+msgid "See <<amd-glossary,Automatic Mount Daemon>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:62
+#, no-wrap
+msgid "AML"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:64
+msgid "See <<aml-glossary,ACPI Machine Language>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:65
+#, no-wrap
+msgid "API"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:67
+msgid "See <<api-glossary,Application Programming Interface>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:68
+#, no-wrap
+msgid "APIC"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:70
+msgid "See <<apic-glossary,Advanced Programmable Interrupt Controller>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:71
+#, no-wrap
+msgid "APM"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:73
+msgid "See <<apm-glossary,Advanced Power Management>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:74
+#, no-wrap
+msgid "APOP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:76
+msgid "See <<apop-glossary,Authenticated Post Office Protocol>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:77
+#, no-wrap
+msgid "ASL"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:79
+msgid "See <<asl-glossary,ACPI Source Language>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:80
+#, no-wrap
+msgid "ATA"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:82
+msgid "See <<ata-glossary,Advanced Technology Attachment>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:83
+#, no-wrap
+msgid "ATM"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:85
+msgid "See <<atm-glossary,Asynchronous Transfer Mode>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:87
+#, no-wrap
+msgid "ACPI Machine Language"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:89
+msgid ""
+"Pseudocode, interpreted by a virtual machine within an ACPI-compliant "
+"operating system, providing a layer between the underlying hardware and the "
+"documented interface presented to the OS."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:91
+#, no-wrap
+msgid "ACPI Source Language"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:93
+msgid "The programming language AML is written in."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:95
+#, no-wrap
+msgid "Access Control List"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:97
+msgid ""
+"A list of permissions attached to an object, usually either a file or a "
+"network device."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:99
+#, no-wrap
+msgid "Advanced Configuration and Power Interface"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:102
+msgid ""
+"A specification which provides an abstraction of the interface the hardware "
+"presents to the operating system, so that the operating system should need "
+"to know nothing about the underlying hardware to make the most of it. ACPI "
+"evolves and supersedes the functionality provided previously by APM, PNPBIOS "
+"and other technologies, and provides facilities for controlling power "
+"consumption, machine suspension, device enabling and disabling, etc."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:104
+#, no-wrap
+msgid "Application Programming Interface"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:107
+msgid ""
+"A set of procedures, protocols and tools that specify the canonical "
+"interaction of one or more program parts; how, when and why they do work "
+"together, and what data they share or operate on."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:109
+#, no-wrap
+msgid "Advanced Power Management"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:112
+msgid ""
+"An API enabling the operating system to work in conjunction with the BIOS in "
+"order to achieve power management. APM has been superseded by the much more "
+"generic and powerful ACPI specification for most applications."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:114
+#, no-wrap
+msgid "Advanced Programmable Interrupt Controller"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:116
+#: documentation/content/en/books/handbook/glossary.adoc:120
+#: documentation/content/en/books/handbook/glossary.adoc:124
+#: documentation/content/en/books/handbook/glossary.adoc:128
+#: documentation/content/en/books/handbook/glossary.adoc:213
+#: documentation/content/en/books/handbook/glossary.adoc:223
+#: documentation/content/en/books/handbook/glossary.adoc:257
+#: documentation/content/en/books/handbook/glossary.adoc:283
+#: documentation/content/en/books/handbook/glossary.adoc:307
+#: documentation/content/en/books/handbook/glossary.adoc:311
+#: documentation/content/en/books/handbook/glossary.adoc:315
+#: documentation/content/en/books/handbook/glossary.adoc:334
+#: documentation/content/en/books/handbook/glossary.adoc:338
+#: documentation/content/en/books/handbook/glossary.adoc:346
+#: documentation/content/en/books/handbook/glossary.adoc:375
+#: documentation/content/en/books/handbook/glossary.adoc:413
+#: documentation/content/en/books/handbook/glossary.adoc:430
+#: documentation/content/en/books/handbook/glossary.adoc:444
+#: documentation/content/en/books/handbook/glossary.adoc:490
+#: documentation/content/en/books/handbook/glossary.adoc:494
+#: documentation/content/en/books/handbook/glossary.adoc:515
+#: documentation/content/en/books/handbook/glossary.adoc:578
+#: documentation/content/en/books/handbook/glossary.adoc:582
+#: documentation/content/en/books/handbook/glossary.adoc:603
+#: documentation/content/en/books/handbook/glossary.adoc:611
+#: documentation/content/en/books/handbook/glossary.adoc:615
+#: documentation/content/en/books/handbook/glossary.adoc:641
+#: documentation/content/en/books/handbook/glossary.adoc:665
+#: documentation/content/en/books/handbook/glossary.adoc:723
+#: documentation/content/en/books/handbook/glossary.adoc:727
+#: documentation/content/en/books/handbook/glossary.adoc:737
+#: documentation/content/en/books/handbook/glossary.adoc:741
+#: documentation/content/en/books/handbook/glossary.adoc:745
+#: documentation/content/en/books/handbook/glossary.adoc:753
+#: documentation/content/en/books/handbook/glossary.adoc:757
+#: documentation/content/en/books/handbook/glossary.adoc:767
+#: documentation/content/en/books/handbook/glossary.adoc:781
+#: documentation/content/en/books/handbook/glossary.adoc:785
+#: documentation/content/en/books/handbook/glossary.adoc:841
+#: documentation/content/en/books/handbook/glossary.adoc:870
+#: documentation/content/en/books/handbook/glossary.adoc:874
+#: documentation/content/en/books/handbook/glossary.adoc:891
+#: documentation/content/en/books/handbook/glossary.adoc:928
+#: documentation/content/en/books/handbook/glossary.adoc:932
+#: documentation/content/en/books/handbook/glossary.adoc:940
+#: documentation/content/en/books/handbook/glossary.adoc:944
+#: documentation/content/en/books/handbook/glossary.adoc:948
+#: documentation/content/en/books/handbook/glossary.adoc:956
+#: documentation/content/en/books/handbook/glossary.adoc:960
+#: documentation/content/en/books/handbook/glossary.adoc:964
+#: documentation/content/en/books/handbook/glossary.adoc:989
+#: documentation/content/en/books/handbook/glossary.adoc:1012
+msgid "{empty}"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:118
+#, no-wrap
+msgid "Advanced Technology Attachment"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:122
+#, no-wrap
+msgid "Asynchronous Transfer Mode"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:126
+#, no-wrap
+msgid "Authenticated Post Office Protocol"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:130
+#, no-wrap
+msgid "Automatic Mount Daemon"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:132
+msgid ""
+"A daemon that automatically mounts a filesystem when a file or directory "
+"within that filesystem is accessed."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/glossary.adoc:134
+#, no-wrap
+msgid "B"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:136
+#, no-wrap
+msgid "BAR"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:138
+msgid "See <<bar-glossary,Base Address Register>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:139
+#, no-wrap
+msgid "BIND"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:141
+msgid "See <<bind-glossary,Berkeley Internet Name Domain>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:142
+#, no-wrap
+msgid "BIOS"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:144
+msgid "See <<bios-glossary,Basic Input/Output System>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:145
+#, no-wrap
+msgid "BSD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:147
+msgid "See <<bsd-glossary,Berkeley Software Distribution>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:149
+#, no-wrap
+msgid "Base Address Register"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:151
+msgid ""
+"The registers that determine which address range a PCI device will respond "
+"to."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:153
+#, no-wrap
+msgid "Basic Input/Output System"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:159
+msgid ""
+"The definition of BIOS depends a bit on the context. Some people refer to "
+"it as the ROM chip with a basic set of routines to provide an interface "
+"between software and hardware. Others refer to it as the set of routines "
+"contained in the chip that help in bootstrapping the system. Some might "
+"also refer to it as the screen used to configure the bootstrapping process. "
+"The BIOS is PC-specific but other systems have something similar."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:161
+#, no-wrap
+msgid "Berkeley Internet Name Domain"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:163
+msgid "An implementation of the DNS protocols."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:165
+#, no-wrap
+msgid "Berkeley Software Distribution"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:168
+msgid ""
+"This is the name that the Computer Systems Research Group (CSRG) at link:"
+"http://www.berkeley.edu[The University of California at Berkeley] gave to "
+"their improvements and modifications to AT&T's 32V UNIX(R). FreeBSD is a "
+"descendant of the CSRG work."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:170
+#, no-wrap
+msgid "Bikeshed Building"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:173
+msgid ""
+"A phenomenon whereby many people will give an opinion on an uncomplicated "
+"topic, whilst a complex topic receives little or no discussion. See the "
+"extref:{faq}[FAQ, bikeshed-painting] for the origin of the term."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/glossary.adoc:175
+#, no-wrap
+msgid "C"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:177
+#, no-wrap
+msgid "CD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:179
+msgid "See <<cd-glossary,Carrier Detect>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:180
+#, no-wrap
+msgid "CHAP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:182
+msgid "See <<chap-glossary,Challenge Handshake Authentication Protocol>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:183
+#, no-wrap
+msgid "CLIP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:185
+msgid "See <<clip-glossary,Classical IP over ATM>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:186
+#, no-wrap
+msgid "COFF"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:188
+msgid "See <<coff-glossary,Common Object File Format>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:189
+#, no-wrap
+msgid "CPU"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:191
+msgid "See <<cpu-glossary,Central Processing Unit>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:192
+#, no-wrap
+msgid "CTS"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:194
+msgid "See <<cts-glossary,Clear To Send>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:196
+#, no-wrap
+msgid "Carrier Detect"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:198
+msgid "An RS232C signal indicating that a carrier has been detected."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:200
+#, no-wrap
+msgid "Central Processing Unit"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:205
+msgid ""
+"Also known as the processor. This is the brain of the computer where all "
+"calculations take place. There are a number of different architectures with "
+"different instruction sets. Among the more well-known are the Intel-x86 and "
+"derivatives, Arm, and PowerPC."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:207
+#, no-wrap
+msgid "Challenge Handshake Authentication Protocol"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:209
+msgid ""
+"A method of authenticating a user, based on a secret shared between client "
+"and server."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:211
+#, no-wrap
+msgid "Classical IP over ATM"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:215
+#, no-wrap
+msgid "Clear To Send"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:217
+msgid "An RS232C signal giving the remote system permission to send data."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:219
+msgid "See <<rts-glossary,Also Request To Send>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:221
+#, no-wrap
+msgid "Common Object File Format"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/glossary.adoc:225
+#, no-wrap
+msgid "D"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:227
+#, no-wrap
+msgid "DAC"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:229
+msgid "See <<dac-glossary,Discretionary Access Control>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:230
+#, no-wrap
+msgid "DDB"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:232
+msgid "See <<ddb-glossary,Debugger>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:233
+#, no-wrap
+msgid "DES"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:235
+msgid "See <<des-glossary,Data Encryption Standard>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:236
+#, no-wrap
+msgid "DHCP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:238
+msgid "See <<dhcp-glossary,Dynamic Host Configuration Protocol>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:239
+#, no-wrap
+msgid "DNS"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:241
+msgid "See <<dns-glossary,Domain Name System>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:242
+#, no-wrap
+msgid "DSDT"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:244
+msgid "See <<dsdt-glossary,Differentiated System Description Table>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:245
+#, no-wrap
+msgid "DSR"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:247
+msgid "See <<dsr-glossary,Data Set Ready>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:248
+#, no-wrap
+msgid "DTR"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:250
+msgid "See <<dtr-glossary,Data Terminal Ready>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:251
+#, no-wrap
+msgid "DVMRP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:253
+msgid "See <<dvmrp-glossary,Distance-Vector Multicast Routing Protocol>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:255
+#, no-wrap
+msgid "Discretionary Access Control"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:259
+#, no-wrap
+msgid "Data Encryption Standard"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:261
+msgid ""
+"A method of encrypting information, traditionally used as the method of "
+"encryption for UNIX(R) passwords and the man:crypt[3] function."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:263
+#, no-wrap
+msgid "Data Set Ready"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:265
+msgid ""
+"An RS232C signal sent from the modem to the computer or terminal indicating "
+"a readiness to send and receive data."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:267
+msgid "See <<dtr-glossary,Also Data Terminal Ready>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:269
+#, no-wrap
+msgid "Data Terminal Ready"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:271
+msgid ""
+"An RS232C signal sent from the computer or terminal to the modem indicating "
+"a readiness to send and receive data."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:273
+#, no-wrap
+msgid "Debugger"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:275
+msgid ""
+"An interactive in-kernel facility for examining the status of a system, "
+"often used after a system has crashed to establish the events surrounding "
+"the failure."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:277
+#, no-wrap
+msgid "Differentiated System Description Table"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:279
+msgid ""
+"An ACPI table, supplying basic configuration information about the base "
+"system."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:281
+#, no-wrap
+msgid "Distance-Vector Multicast Routing Protocol"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:285
+#, no-wrap
+msgid "Domain Name System"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:287
+msgid ""
+"The system that converts humanly readable hostnames (i.e., mail.example.net) "
+"to Internet addresses and vice versa."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:289
+#, no-wrap
+msgid "Dynamic Host Configuration Protocol"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:292
+msgid ""
+"A protocol that dynamically assigns IP addresses to a computer (host) when "
+"it requests one from the server. The address assignment is called a “lease”."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/glossary.adoc:294
+#, no-wrap
+msgid "E"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:296
+#, no-wrap
+msgid "ECOFF"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:298
+msgid "See <<ecoff-glossary,Extended COFF>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:299
+#, no-wrap
+msgid "ELF"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:301
+msgid "See <<elf-glossary,Executable and Linking Format>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:302
+#, no-wrap
+msgid "ESP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:304
+msgid "See <<esp-glossary,Encapsulated Security Payload>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:305
+#, no-wrap
+msgid "Encapsulated Security Payload"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:309
+#, no-wrap
+msgid "Executable and Linking Format"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:313
+#, no-wrap
+msgid "Extended COFF"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/glossary.adoc:317
+#, no-wrap
+msgid "F"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:319
+#, no-wrap
+msgid "FADT"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:321
+msgid "See <<fadt-glossary,Fixed ACPI Description Table>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:322
+#, no-wrap
+msgid "FAT"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:324
+msgid "See <<fat-glossary,File Allocation Table>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:325
+#, no-wrap
+msgid "FAT16"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:327
+msgid "See <<fat16-glossary,File Allocation Table (16-bit)>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:328
+#, no-wrap
+msgid "FTP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:330
+msgid "See <<ftp-glossary,File Transfer Protocol>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:332
+#, no-wrap
+msgid "File Allocation Table"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:336
+#, no-wrap
+msgid "File Allocation Table (16-bit)"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:340
+#, no-wrap
+msgid "File Transfer Protocol"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:342
+msgid ""
+"A member of the family of high-level protocols implemented on top of TCP "
+"which can be used to transfer files over a TCP/IP network."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:344
+#, no-wrap
+msgid "Fixed ACPI Description Table"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/glossary.adoc:348
+#, no-wrap
+msgid "G"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:350
+#, no-wrap
+msgid "GUI"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:352
+msgid "See <<gui-glossary,Graphical User Interface>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:354
+#, no-wrap
+msgid "Giant"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:358
+msgid ""
+"The name of a mutual exclusion mechanism (a sleep `mutex`) that protects a "
+"large set of kernel resources. Although a simple locking mechanism was "
+"adequate in the days where a machine might have only a few dozen processes, "
+"one networking card, and certainly only one processor, in current times it "
+"is an unacceptable performance bottleneck. FreeBSD developers are actively "
+"working to replace it with locks that protect individual resources, which "
+"will allow a much greater degree of parallelism for both single-processor "
+"and multi-processor machines."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:360
+#, no-wrap
+msgid "Graphical User Interface"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:362
+msgid "A system where the user and computer interact with graphics."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/glossary.adoc:364
+#, no-wrap
+msgid "H"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:366
+#, no-wrap
+msgid "HTML"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:368
+msgid "See <<html-glossary,HyperText Markup Language>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:369
+#, no-wrap
+msgid "HUP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:371
+msgid "See <<hup-glossary,HangUp>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:373
+#, no-wrap
+msgid "HangUp"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:377
+#, no-wrap
+msgid "HyperText Markup Language"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:379
+msgid "The markup language used to create web pages."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/glossary.adoc:381
+#, no-wrap
+msgid "I"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:383
+#, no-wrap
+msgid "I/O"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:385
+msgid "See <<io-glossary,Input/Output>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:386
+#, no-wrap
+msgid "IASL"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:388
+msgid "See <<iasl-glossary,Intel’s ASL compiler>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:389
+#, no-wrap
+msgid "IMAP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:391
+msgid "See <<imap-glossary,Internet Message Access Protocol>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:392
+#, no-wrap
+msgid "IP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:394
+msgid "See <<ip-glossary,Internet Protocol>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:395
+#, no-wrap
+msgid "IPFW"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:397
+msgid "See <<ipfw-glossary,IP Firewall>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:398
+#, no-wrap
+msgid "IPP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:400
+msgid "See <<ipp-glossary,Internet Printing Protocol>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:401
+#, no-wrap
+msgid "IPv4"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:403
+msgid "See <<ipv4-glossary,IP Version 4>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:404
+#, no-wrap
+msgid "IPv6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:406
+msgid "See <<ipv6-glossary,IP Version 6>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:407
+#, no-wrap
+msgid "ISP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:409
+msgid "See <<isp-glossary,Internet Service Provider>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:411
+#, no-wrap
+msgid "IP Firewall"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:415
+#, no-wrap
+msgid "IP Version 4"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:418
+msgid ""
+"The IP protocol version 4, which uses 32 bits for addressing. This version "
+"is still the most widely used, but it is slowly being replaced with IPv6."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:420
+msgid "See <<ipv6-glossary,Also IP Version 6>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:422
+#, no-wrap
+msgid "IP Version 6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:426
+msgid ""
+"The new IP protocol. Invented because the address space in IPv4 is running "
+"out. Uses 128 bits for addressing."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:428
+#, no-wrap
+msgid "Input/Output"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:432
+#, no-wrap
+msgid "Intel’s ASL compiler"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:434
+msgid "Intel’s compiler for converting ASL into AML."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:436
+#, no-wrap
+msgid "Internet Message Access Protocol"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:438
+msgid ""
+"A protocol for accessing email messages on a mail server, characterised by "
+"the messages usually being kept on the server as opposed to being downloaded "
+"to the mail reader client."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:440
+#: documentation/content/en/books/handbook/glossary.adoc:771
+msgid "See Also Post Office Protocol Version 3."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:442
+#, no-wrap
+msgid "Internet Printing Protocol"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:446
+#, no-wrap
+msgid "Internet Protocol"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:451
+msgid ""
+"The packet transmitting protocol that is the basic protocol on the "
+"Internet. Originally developed at the U.S. Department of Defense and an "
+"extremely important part of the TCP/IP stack. Without the Internet "
+"Protocol, the Internet would not have become what it is today. For more "
+"information, see link:ftp://ftp.rfc-editor.org/in-notes/rfc791.txt[RFC 791]."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:453
+#, no-wrap
+msgid "Internet Service Provider"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:455
+msgid "A company that provides access to the Internet."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/glossary.adoc:457
+#, no-wrap
+msgid "K"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:460
+#, no-wrap
+msgid "KAME"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:462
+msgid ""
+"Japanese for “turtle”, the term KAME is used in computing circles to refer "
+"to the link:http://www.kame.net/[KAME Project], who work on an "
+"implementation of IPv6."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:463
+#, no-wrap
+msgid "KDC"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:465
+msgid "See <<kdc-glossary,Key Distribution Center>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:466
+#, no-wrap
+msgid "KLD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:468
+msgid "See <<kld-glossary,Kernel ld(1)>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:469
+#, no-wrap
+msgid "KSE"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:471
+msgid "See <<kse-glossary,Kernel Scheduler Entities>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:472
+#, no-wrap
+msgid "KVA"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:474
+msgid "See <<kva-glossary,Kernel Virtual Address>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:475
+#, no-wrap
+msgid "Kbps"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:477
+msgid "See <<kbps-glossary,Kilo Bits Per Second>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:479
+#, no-wrap
+msgid "Kernel man:ld[1]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:481
+msgid ""
+"A method of dynamically loading functionality into a FreeBSD kernel without "
+"rebooting the system."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:483
+#, no-wrap
+msgid "Kernel Scheduler Entities"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:486
+msgid ""
+"A kernel-supported threading system. See the link:http://www.freebsd.org/"
+"kse[project home page] for further details."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:488
+#, no-wrap
+msgid "Kernel Virtual Address"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:492
+#, no-wrap
+msgid "Key Distribution Center"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:496
+#, no-wrap
+msgid "Kilo Bits Per Second"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:499
+msgid ""
+"Used to measure bandwidth (how much data can pass a given point at a "
+"specified amount of time). Alternates to the Kilo prefix include Mega, "
+"Giga, Tera, and so forth."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/glossary.adoc:501
+#, no-wrap
+msgid "L"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:503
+#, no-wrap
+msgid "LAN"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:505
+msgid "See <<lan-glossary,Local Area Network>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:506
+#, no-wrap
+msgid "LOR"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:508
+msgid "See <<lor-glossary,Lock Order Reversal>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:509
+#, no-wrap
+msgid "LPD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:511
+msgid "See <<lpd-glossary,Line Printer Daemon>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:513
+#, no-wrap
+msgid "Line Printer Daemon"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:517
+#, no-wrap
+msgid "Local Area Network"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:519
+msgid "A network used on a local area, e.g. office, home, or so forth."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:521
+#, no-wrap
+msgid "Lock Order Reversal"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:526
+msgid ""
+"The FreeBSD kernel uses a number of resource locks to arbitrate contention "
+"for those resources. A run-time lock diagnostic system found in FreeBSD-"
+"CURRENT kernels (but removed for releases), called man:witness[4], detects "
+"the potential for deadlocks due to locking errors. (man:witness[4] is "
+"actually slightly conservative, so it is possible to get false positives.) "
+"A true positive report indicates that “if you were unlucky, a deadlock would "
+"have happened here”."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:528
+msgid ""
+"True positive LORs tend to get fixed quickly, so check https://lists.FreeBSD."
+"org/subscription/freebsd-current and the link:http://sources.zabbadoz.net/"
+"freebsd/lor.html[LORs Seen] page before posting to the mailing lists."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/glossary.adoc:530
+#, no-wrap
+msgid "M"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:532
+#, no-wrap
+msgid "MAC"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:534
+msgid "See <<mac-glossary,Mandatory Access Control>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:535
+#, no-wrap
+msgid "MADT"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:537
+msgid "See <<madt-glossary,Multiple APIC Description Table>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:538
+#, no-wrap
+msgid "MFC"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:540
+msgid "See <<mfc-glossary,Merge From Current>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:541
+#, no-wrap
+msgid "MFH"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:543
+msgid "See <<mfh-glossary,Merge From Head>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:544
+#, no-wrap
+msgid "MFS"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:546
+msgid "See <<mfs-glossary,Merge From Stable>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:547
+#, no-wrap
+msgid "MFV"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:549
+msgid "See <<mfv-glossary,Merge From Vendor>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:550
+#, no-wrap
+msgid "MIT"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:552
+msgid "See <<mit-glossary,Massachusetts Institute of Technology>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:553
+#, no-wrap
+msgid "MLS"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:555
+msgid "See <<mls-glossary,Multi-Level Security>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:556
+#, no-wrap
+msgid "MOTD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:558
+msgid "See <<motd-glossary,Message Of The Day>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:559
+#, no-wrap
+msgid "MTA"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:561
+msgid "See <<mta-glossary,Mail Transfer Agent>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:562
+#, no-wrap
+msgid "MUA"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:564
+msgid "See <<mua-glossary,Mail User Agent>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:566
+#, no-wrap
+msgid "Mail Transfer Agent"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:570
+msgid ""
+"An application used to transfer email. An MTA has traditionally been part "
+"of the BSD base system. Today Sendmail is included in the base system, but "
+"there are many other MTAs, such as postfix, qmail and Exim."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:572
+#, no-wrap
+msgid "Mail User Agent"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:574
+msgid "An application used by users to display and write email."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:576
+#, no-wrap
+msgid "Mandatory Access Control"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:580
+#, no-wrap
+msgid "Massachusetts Institute of Technology"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:584
+#, no-wrap
+msgid "Merge From Current"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:586
+msgid ""
+"To merge functionality or a patch from the -CURRENT branch to another, most "
+"often -STABLE."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:588
+#, no-wrap
+msgid "Merge From Head"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:590
+msgid ""
+"To merge functionality or a patch from a repository HEAD to an earlier "
+"branch."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:592
+#, no-wrap
+msgid "Merge From Stable"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:595
+msgid ""
+"In the normal course of FreeBSD development, a change will be committed to "
+"the -CURRENT branch for testing before being merged to -STABLE. On rare "
+"occasions, a change will go into -STABLE first and then be merged to -"
+"CURRENT."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:597
+msgid ""
+"This term is also used when a patch is merged from -STABLE to a security "
+"branch."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:599
+msgid "See <<mfc-glossary,Also Merge From Current>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:601
+#, no-wrap
+msgid "Merge From Vendor"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:605
+#, no-wrap
+msgid "Message Of The Day"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:607
+msgid ""
+"A message, usually shown on login, often used to distribute information to "
+"users of the system."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:609
+#, no-wrap
+msgid "Multi-Level Security"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:613
+#, no-wrap
+msgid "Multiple APIC Description Table"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/glossary.adoc:617
+#, no-wrap
+msgid "N"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:619
+#, no-wrap
+msgid "NAT"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:621
+msgid "See <<nat-glossary,Network Address Translation>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:622
+#, no-wrap
+msgid "NDISulator"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:624
+msgid "See <<projectevil-glossary,Project Evil>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:625
+#, no-wrap
+msgid "NFS"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:627
+msgid "See <<nfs-glossary,Network File System>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:628
+#, no-wrap
+msgid "NTFS"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:630
+msgid "See <<ntfs-glossary,New Technology File System>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:631
+#, no-wrap
+msgid "NTP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:633
+msgid "See <<ntp-glossary,Network Time Protocol>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:635
+#, no-wrap
+msgid "Network Address Translation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:637
+msgid ""
+"A technique where IP packets are rewritten on the way through a gateway, "
+"enabling many machines behind the gateway to effectively share a single IP "
+"address."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:639
+#, no-wrap
+msgid "Network File System"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:643
+#, no-wrap
+msgid "New Technology File System"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:645
+msgid ""
+"A filesystem developed by Microsoft and available in its “New Technology” "
+"operating systems, such as Windows(R) 2000, Windows NT(R) and Windows(R) XP."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:647
+#, no-wrap
+msgid "Network Time Protocol"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:649
+msgid "A means of synchronizing clocks over a network."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/glossary.adoc:651
+#, no-wrap
+msgid "O"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:653
+#, no-wrap
+msgid "OBE"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:655
+msgid "See <<obe-glossary,Overtaken By Events>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:656
+#, no-wrap
+msgid "ODMR"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:658
+msgid "See <<odmr-glossary,On-Demand Mail Relay>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:659
+#, no-wrap
+msgid "OS"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:661
+msgid "See <<os-glossary,Operating System>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:663
+#, no-wrap
+msgid "On-Demand Mail Relay"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:667
+#, no-wrap
+msgid "Operating System"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:670
+msgid ""
+"A set of programs, libraries and tools that provide access to the hardware "
+"resources of a computer. Operating systems range today from simplistic "
+"designs that support only one program running at a time, accessing only one "
+"device to fully multi-user, multi-tasking and multi-process systems that can "
+"serve thousands of users simultaneously, each of them running dozens of "
+"different applications."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:672
+#, no-wrap
+msgid "Overtaken By Events"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:674
+msgid ""
+"Indicates a suggested change (such as a Problem Report or a feature request) "
+"which is no longer relevant or applicable due to such things as later "
+"changes to FreeBSD, changes in networking standards, the affected hardware "
+"having since become obsolete, and so forth."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/glossary.adoc:676
+#, no-wrap
+msgid "P"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:678
+#, no-wrap
+msgid "PAE"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:680
+msgid "See <<pae-glossary,Physical Address Extensions>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:681
+#, no-wrap
+msgid "PAM"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:683
+msgid "See <<pam-glossary,Pluggable Authentication Modules>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:684
+#, no-wrap
+msgid "PAP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:686
+msgid "See <<pap-glossary,Password Authentication Protocol>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:687
+#, no-wrap
+msgid "PC"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:689
+msgid "See <<pc-glossary,Personal Computer>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:690
+#, no-wrap
+msgid "PCNSFD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:692
+msgid "See <<pcnfsd-glossary,Personal Computer Network File System Daemon>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:693
+#, no-wrap
+msgid "PDF"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:695
+msgid "See <<pdf-glossary,Portable Document Format>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:696
+#, no-wrap
+msgid "PID"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:698
+msgid "See <<pid-glossary,Process ID>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:699
+#, no-wrap
+msgid "POLA"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:701
+msgid "See <<pola-glossary,Principle Of Least Astonishment>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:702
+#, no-wrap
+msgid "POP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:704
+msgid "See <<pop-glossary,Post Office Protocol>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:705
+#, no-wrap
+msgid "POP3"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:707
+msgid "See <<pop3-glossary,Post Office Protocol Version 3>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:708
+#, no-wrap
+msgid "PPD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:710
+msgid "See <<ppd-glossary,PostScript Printer Description>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:711
+#, no-wrap
+msgid "PPP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:713
+msgid "See <<ppp-glossary,Point-to-Point Protocol>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:714
+#, no-wrap
+msgid "PPPoA"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:716
+msgid "See <<pppoa-glossary,PPP over ATM>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:717
+#, no-wrap
+msgid "PPPoE"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:719
+msgid "See <<pppoe-glossary,PPP over Ethernet>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:721
+#, no-wrap
+msgid "PPP over ATM"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:725
+#, no-wrap
+msgid "PPP over Ethernet"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:728
+#, no-wrap
+msgid "PR"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:730
+msgid "See <<pr-glossary,Problem Report>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:731
+#, no-wrap
+msgid "PXE"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:733
+msgid "See <<pxe-glossary,Preboot eXecution Environment>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:735
+#, no-wrap
+msgid "Password Authentication Protocol"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:739
+#, no-wrap
+msgid "Personal Computer"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:743
+#, no-wrap
+msgid "Personal Computer Network File System Daemon"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:747
+#, no-wrap
+msgid "Physical Address Extensions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:749
+msgid ""
+"A method of enabling access to up to 64 GB of RAM on systems which only "
+"physically have a 32-bit wide address space (and would therefore be limited "
+"to 4 GB without PAE)."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:751
+#, no-wrap
+msgid "Pluggable Authentication Modules"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:755
+#, no-wrap
+msgid "Point-to-Point Protocol"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:759
+#, no-wrap
+msgid "Pointy Hat"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:763
+msgid ""
+"A mythical piece of headgear, much like a dunce cap, awarded to any FreeBSD "
+"committer who breaks the build, makes revision numbers go backwards, or "
+"creates any other kind of havoc in the source base. Any committer worth his "
+"or her salt will soon accumulate a large collection. The usage is (almost "
+"always?) humorous."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:765
+#, no-wrap
+msgid "Portable Document Format"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:769
+#, no-wrap
+msgid "Post Office Protocol"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:773
+#, no-wrap
+msgid "Post Office Protocol Version 3"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:775
+msgid ""
+"A protocol for accessing email messages on a mail server, characterised by "
+"the messages usually being downloaded from the server to the client, as "
+"opposed to remaining on the server."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:777
+msgid "See <<imap-glossary,Also Internet Message Access Protocol>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:779
+#, no-wrap
+msgid "PostScript Printer Description"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:783
+#, no-wrap
+msgid "Preboot eXecution Environment"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:787
+#, no-wrap
+msgid "Principle Of Least Astonishment"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:791
+msgid ""
+"As FreeBSD evolves, changes visible to the user should be kept as "
+"unsurprising as possible. For example, arbitrarily rearranging system "
+"startup variables in [.filename]#/etc/defaults/rc.conf# violates POLA. "
+"Developers consider POLA when contemplating user-visible system changes."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:793
+#, no-wrap
+msgid "Problem Report"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:796
+msgid ""
+"A description of some kind of problem that has been found in either the "
+"FreeBSD source or documentation. See extref:{problem-reports}[Writing "
+"FreeBSD Problem Reports]."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:798
+#, no-wrap
+msgid "Process ID"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:800
+msgid ""
+"A number, unique to a particular process on a system, which identifies it "
+"and allows actions to be taken against it."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:802
+#, no-wrap
+msgid "Project Evil"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:807
+msgid ""
+"The working title for the NDISulator, written by Bill Paul, who named it "
+"referring to how awful it is (from a philosophical standpoint) to need to "
+"have something like this in the first place. The NDISulator is a special "
+"compatibility module to allow Microsoft Windows(TM) NDIS miniport network "
+"drivers to be used with FreeBSD/i386. This is usually the only way to use "
+"cards where the driver is closed-source. See [.filename]#src/sys/compat/"
+"ndis/subr_ndis.c#."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/glossary.adoc:809
+#, no-wrap
+msgid "R"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:811
+#, no-wrap
+msgid "RA"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:813
+msgid "See <<ra-glossary,Router Advertisement>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:814
+#, no-wrap
+msgid "RAID"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:816
+msgid "See <<raid-glossary,Redundant Array of Inexpensive Disks>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:817
+#, no-wrap
+msgid "RAM"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:819
+msgid "See <<ram-glossary,Random Access Memory>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:820
+#, no-wrap
+msgid "RD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:822
+msgid "See <<rd-glossary,Received Data>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:823
+#, no-wrap
+msgid "RFC"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:825
+msgid "See <<rfc-glossary,Request For Comments>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:826
+#, no-wrap
+msgid "RISC"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:828
+msgid "See <<risc-glossary,Reduced Instruction Set Computer>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:829
+#, no-wrap
+msgid "RPC"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:831
+msgid "See <<rpc-glossary,Remote Procedure Call>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:832
+#, no-wrap
+msgid "RS232C"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:834
+msgid "See <<rs232c-glossary,Recommended Standard 232C>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:835
+#, no-wrap
+msgid "RTS"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:837
+msgid "See <<rts-glossary,Request To Send>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:839
+#, no-wrap
+msgid "Random Access Memory"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:843
+#, no-wrap
+msgid "Revision Control System"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:848
+msgid ""
+"The _Revision Control System (RCS)_ is one of the oldest software suites "
+"that implement “revision control” for plain files. It allows the storage, "
+"retrieval, archival, logging, identification and merging of multiple "
+"revisions for each file. RCS consists of many small tools that work "
+"together. It lacks some of the features found in more modern revision "
+"control systems, like Git, but it is very simple to install, configure, and "
+"start using for a small set of files."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:850
+msgid "See <<svn-glossary,Also Subversion>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:852
+#, no-wrap
+msgid "Received Data"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:854
+msgid "An RS232C pin or wire that data is received on."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:856
+msgid "See <<td-glossary,Also Transmitted Data>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:858
+#, no-wrap
+msgid "Recommended Standard 232C"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:860
+msgid "A standard for communications between serial devices."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:862
+#, no-wrap
+msgid "Reduced Instruction Set Computer"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:866
+msgid ""
+"An approach to processor design where the operations the hardware can "
+"perform are simplified but made as general purpose as possible. This can "
+"lead to lower power consumption, fewer transistors and in some cases, better "
+"performance and increased code density. Examples of RISC processors include "
+"the Alpha, SPARC(R), ARM(R) and PowerPC(R)."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:868
+#, no-wrap
+msgid "Redundant Array of Inexpensive Disks"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:872
+#, no-wrap
+msgid "Remote Procedure Call"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:876
+#, no-wrap
+msgid "Request For Comments"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:879
+msgid ""
+"A set of documents defining Internet standards, protocols, and so forth. "
+"See www.rfc-editor.org."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:881
+msgid ""
+"Also used as a general term when someone has a suggested change and wants "
+"feedback."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:883
+#, no-wrap
+msgid "Request To Send"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:885
+msgid ""
+"An RS232C signal requesting that the remote system commences transmission of "
+"data."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:887
+msgid "See <<cts-glossary,Also Clear To Send>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:889
+#, no-wrap
+msgid "Router Advertisement"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/glossary.adoc:893
+#, no-wrap
+msgid "S"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:895
+#, no-wrap
+msgid "SCI"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:897
+msgid "See <<sci-glossary,System Control Interrupt>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:898
+#, no-wrap
+msgid "SCSI"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:900
+msgid "See <<scsi-glossary,Small Computer System Interface>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:901
+#, no-wrap
+msgid "SG"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:903
+msgid "See <<sg-glossary,Signal Ground>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:904
+#, no-wrap
+msgid "SMB"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:906
+msgid "See <<smb-glossary,Server Message Block>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:907
+#, no-wrap
+msgid "SMP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:909
+msgid "See <<smp-glossary,Symmetric MultiProcessor>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:910
+#, no-wrap
+msgid "SMTP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:912
+msgid "See <<smtp-glossary,Simple Mail Transfer Protocol>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:913
+#, no-wrap
+msgid "SMTP AUTH"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:915
+msgid "See <<smtpauth-glossary,SMTP Authentication>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:916
+#, no-wrap
+msgid "SSH"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:918
+msgid "See <<ssh-glossary,Secure Shell>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:919
+#, no-wrap
+msgid "STR"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:921
+msgid "See <<str-glossary,Suspend To RAM>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:922
+#, no-wrap
+msgid "SVN"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:924
+msgid "See <<svn-glossary,Subversion>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:926
+#, no-wrap
+msgid "SMTP Authentication"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:930
+#, no-wrap
+msgid "Server Message Block"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:934
+#, no-wrap
+msgid "Signal Ground"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:936
+msgid "An RS232 pin or wire that is the ground reference for the signal."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:938
+#, no-wrap
+msgid "Simple Mail Transfer Protocol"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:942
+#, no-wrap
+msgid "Secure Shell"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:946
+#, no-wrap
+msgid "Small Computer System Interface"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:950
+#, no-wrap
+msgid "Subversion"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:952
+msgid ""
+"Subversion is a version control system currently used by the FreeBSD project."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:954
+#, no-wrap
+msgid "Suspend To RAM"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:958
+#, no-wrap
+msgid "Symmetric MultiProcessor"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:962
+#, no-wrap
+msgid "System Control Interrupt"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/glossary.adoc:966
+#, no-wrap
+msgid "T"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:968
+#, no-wrap
+msgid "TCP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:970
+msgid "See <<tcp-glossary,Transmission Control Protocol>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:971
+#, no-wrap
+msgid "TCP/IP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:973
+msgid "See <<tcpip-glossary,Transmission Control Protocol/Internet Protocol>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:974
+#, no-wrap
+msgid "TD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:976
+msgid "See <<td-glossary,Transmitted Data>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:977
+#, no-wrap
+msgid "TFTP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:979
+msgid "See <<tftp-glossary,Trivial FTP>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:980
+#, no-wrap
+msgid "TGT"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:982
+msgid "See <<tgt-glossary,Ticket-Granting Ticket>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:983
+#, no-wrap
+msgid "TSC"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:985
+msgid "See <<tsc-glossary,Time Stamp Counter>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:987
+#, no-wrap
+msgid "Ticket-Granting Ticket"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:991
+#, no-wrap
+msgid "Time Stamp Counter"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:993
+msgid ""
+"A profiling counter internal to modern Pentium(R) processors that counts "
+"core frequency clock ticks."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:995
+#, no-wrap
+msgid "Transmission Control Protocol"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:997
+msgid ""
+"A protocol that sits on top of (e.g.) the IP protocol and guarantees that "
+"packets are delivered in a reliable, ordered, fashion."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:999
+#, no-wrap
+msgid "Transmission Control Protocol/Internet Protocol"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:1002
+msgid ""
+"The term for the combination of the TCP protocol running over the IP "
+"protocol. Much of the Internet runs over TCP/IP."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:1004
+#, no-wrap
+msgid "Transmitted Data"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:1006
+msgid "An RS232C pin or wire that data is transmitted on."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:1008
+msgid "See <<rd-glossary,Also Received Data>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:1010
+#, no-wrap
+msgid "Trivial FTP"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/glossary.adoc:1014
+#, no-wrap
+msgid "U"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:1016
+#, no-wrap
+msgid "UDP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:1018
+msgid "See <<udp-glossary,User Datagram Protocol>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:1019
+#, no-wrap
+msgid "UFS1"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:1021
+msgid "See <<ufs1-glossary,Unix File System Version 1>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:1022
+#, no-wrap
+msgid "UFS2"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:1024
+msgid "See <<ufs2-glossary,Unix File System Version 2>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:1025
+#, no-wrap
+msgid "UID"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:1027
+msgid "See <<uid-glossary,User ID>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:1028
+#, no-wrap
+msgid "URL"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:1030
+msgid "See <<url-glossary,Uniform Resource Locator>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:1031
+#, no-wrap
+msgid "USB"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:1033
+msgid "See <<usb-glossary,Universal Serial Bus>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:1035
+#, no-wrap
+msgid "Uniform Resource Locator"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:1037
+msgid ""
+"A method of locating a resource, such as a document on the Internet and a "
+"means to identify that resource."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:1039
+#, no-wrap
+msgid "Unix File System Version 1"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:1041
+msgid ""
+"The original UNIX(R) file system, sometimes called the Berkeley Fast File "
+"System."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:1043
+#, no-wrap
+msgid "Unix File System Version 2"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:1046
+msgid ""
+"An extension to UFS1, introduced in FreeBSD 5-CURRENT. UFS2 adds 64 bit "
+"block pointers (breaking the 1T barrier), support for extended file storage "
+"and other features."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:1048
+#, no-wrap
+msgid "Universal Serial Bus"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:1050
+msgid ""
+"A hardware standard used to connect a wide variety of computer peripherals "
+"to a universal interface."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:1052
+#, no-wrap
+msgid "User ID"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:1054
+msgid ""
+"A unique number assigned to each user of a computer, by which the resources "
+"and permissions assigned to that user can be identified."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:1056
+#, no-wrap
+msgid "User Datagram Protocol"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:1059
+msgid ""
+"A simple, unreliable datagram protocol which is used for exchanging data on "
+"a TCP/IP network. UDP does not provide error checking and correction like "
+"TCP."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/glossary.adoc:1061
+#, no-wrap
+msgid "V"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:1063
+#, no-wrap
+msgid "VPN"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:1065
+msgid "See <<vpn-glossary,Virtual Private Network>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/glossary.adoc:1067
+#, no-wrap
+msgid "Virtual Private Network"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/glossary.adoc:1068
+msgid ""
+"A method of using a public telecommunication such as the Internet, to "
+"provide remote access to a localized network, such as a corporate LAN."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/introduction.adoc b/documentation/content/en/books/handbook/introduction.adoc
index f99c4ff117..92582fc1a2 100644
--- a/documentation/content/en/books/handbook/introduction.adoc
+++ b/documentation/content/en/books/handbook/introduction.adoc
@@ -1,7 +1,7 @@
[.abstract-title]
Abstract
-Welcome to FreeBSD! This handbook covers the installation and day to day use of _FreeBSD {rel131-current}-RELEASE_ and _FreeBSD {rel123-current}-RELEASE_.
+Welcome to FreeBSD! This handbook covers the installation and day to day use of _FreeBSD {rel140-current}-RELEASE_ and _{rel132-current}-RELEASE_.
This book is the result of ongoing work by many individuals.
Some sections might be outdated.
Those interested in helping to update and expand this document should send email to the {freebsd-doc}.
diff --git a/documentation/content/en/books/handbook/introduction.po b/documentation/content/en/books/handbook/introduction.po
new file mode 100644
index 0000000000..82c06d3665
--- /dev/null
+++ b/documentation/content/en/books/handbook/introduction.po
@@ -0,0 +1,44 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction.adoc:3
+msgid "Abstract"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction.adoc:8
+msgid ""
+"Welcome to FreeBSD! This handbook covers the installation and day to day use "
+"of _FreeBSD {rel140-current}-RELEASE_ and _{rel132-current}-RELEASE_. This "
+"book is the result of ongoing work by many individuals. Some sections might "
+"be outdated. Those interested in helping to update and expand this document "
+"should send email to the {freebsd-doc}."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction.adoc:12
+msgid ""
+"The latest version of this book is available from the https://www.FreeBSD."
+"org/[FreeBSD web site]. Previous versions can be obtained from https://docs."
+"FreeBSD.org/doc/[https://docs.FreeBSD.org/doc/]. The book can be downloaded "
+"in a variety of formats and compression options from the https://download."
+"freebsd.org/doc/[FreeBSD download server] or one of the numerous link:./"
+"mirrors#mirrors[mirror sites]. Searches can be performed on the handbook "
+"and other documents on the link:https://www.FreeBSD.org/search/[search page]."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/introduction/_index.adoc b/documentation/content/en/books/handbook/introduction/_index.adoc
index 209dc3fce0..1252f1bea2 100644
--- a/documentation/content/en/books/handbook/introduction/_index.adoc
+++ b/documentation/content/en/books/handbook/introduction/_index.adoc
@@ -7,7 +7,7 @@ description: This chapter covers various aspects of the FreeBSD Project, such as
tags: ["introduction", "synopsis", "about", "Who Uses FreeBSD", "goals", "history"]
showBookMenu: true
weight: 3
-path: "/books/handbook/"
+path: "/books/handbook/introduction/"
---
[[introduction]]
@@ -64,7 +64,7 @@ After reading this chapter you will know:
[[nutshell]]
== Welcome to FreeBSD!
-FreeBSD is an Open Source, standards-compliant Unix-like operating system for x86 (both 32 and 64 bit), ARM(R), AArch64, RISC-V(R), MIPS(R), POWER(R), PowerPC(R), and Sun UltraSPARC(R) computers.
+FreeBSD is an Open Source, standards-compliant Unix-like operating system for x86 (both 32 and 64 bit), ARM, AArch64, RISC-V, POWER, and PowerPC computers.
It provides all the features that are nowadays taken for granted, such as preemptive multitasking, memory protection, virtual memory, multi-user facilities, SMP support, all the Open Source development tools for different languages and frameworks, and desktop features centered around X Window System, KDE, or GNOME.
Its particular strengths are:
@@ -73,8 +73,8 @@ Its particular strengths are:
* _Fully integrated OpenZFS support_, including root-on-ZFS, ZFS Boot Environments, fault management, administrative delegation, support for jails, FreeBSD specific documentation, and system installer support.
* _Extensive security features_, from the Mandatory Access Control framework to Capsicum capability and sandbox mechanisms.
* _Over 30 thousand prebuilt packages_ for all supported architectures, and the Ports Collection which makes it easy to build your own, customized ones.
-* _Documentation_ - in addition to Handbook and books from different authors that cover topics ranging from system administration to kernel internals, there are also the man:man[1] pages, not only for userspace daemons, utilities, and configuration files, but also for kernel driver APIs (section 9) and individual drivers (section 4).
-* _Simple and consistent repository structure and build system_ - FreeBSD uses a single repository for all of its components, both kernel and userspace. This, along with an unified and easy to customize build system and a well thought out development process makes it easy to integrate FreeBSD with build infrastructure for your own product.
+* _Documentation_ - in addition to the Handbook and books from different authors that cover topics ranging from system administration to kernel internals, there are also the man:man[1] pages, not only for userspace daemons, utilities, and configuration files, but also for kernel driver APIs (section 9) and individual drivers (section 4).
+* _Simple and consistent repository structure and build system_ - FreeBSD uses a single repository for all of its components, both kernel and userspace. This, along with a unified and easy to customize build system and a well thought-out development process makes it easy to integrate FreeBSD with build infrastructure for your own product.
* _Staying true to Unix philosophy_, preferring composability instead of monolithic "all in one" daemons with hardcoded behavior.
* _Binary compatibility_ with Linux, which makes it possible to run many Linux binaries without the need for virtualisation.
@@ -86,9 +86,9 @@ FreeBSD offers performance and reliability on par with other Open Source and com
=== What Can FreeBSD Do?
The applications to which FreeBSD can be put are truly limited only by your own imagination.
-From software development to factory automation, inventory control to azimuth correction of remote satellite antennae; if it can be done with a commercial UNIX(R) product then it is more than likely that you can do it with FreeBSD too! FreeBSD also benefits significantly from literally thousands of high quality applications developed by research centers and universities around the world, often available at little to no cost.
+From software development to factory automation, inventory control to azimuth correction of remote satellite antenna; if it can be done with a commercial UNIX(R) product then it is more than likely that you can do it with FreeBSD too! FreeBSD also benefits significantly from literally thousands of high quality applications developed by research centers and universities around the world, often available at little to no cost.
-Because the source code for FreeBSD itself is freely available, the system can also be customized to an almost unheard of degree for special applications or projects, and in ways not generally possible with operating systems from most major commercial vendors.
+Because the source code for FreeBSD itself is freely available, the system can also be customized to an almost unheard-of degree for special applications or projects, and in ways not generally possible with operating systems from most major commercial vendors.
Here is just a sampling of some of the applications in which people are currently using FreeBSD:
* _Internet Services:_ The robust TCP/IP networking built into FreeBSD makes it an ideal platform for a variety of Internet services such as:
@@ -98,13 +98,15 @@ Here is just a sampling of some of the applications in which people are currentl
** Firewalls and NAT ("IP masquerading") gateways
** FTP servers
** Email servers
+** Storage servers
+** Virtualization servers
** And more...
-* _Education:_ Are you a student of computer science or a related engineering field? There is no better way of learning about operating systems, computer architecture and networking than the hands on, under the hood experience that FreeBSD can provide. A number of freely available CAD, mathematical and graphic design packages also make it highly useful to those whose primary interest in a computer is to get _other_ work done!
+* _Education:_ Are you a student of computer science or a related engineering field? There is no better way of learning about operating systems, computer architecture and networking than the hands-on, under-the-hood experience that FreeBSD can provide. A number of freely available CAD, mathematical and graphic design packages also make it highly useful to those whose primary interest in a computer is to get _other_ work done!
* _Research:_ With source code for the entire system available, FreeBSD is an excellent platform for research in operating systems as well as other branches of computer science. FreeBSD's freely available nature also makes it possible for remote groups to collaborate on ideas or shared development without having to worry about special licensing agreements or limitations on what may be discussed in open forums.
* _Networking:_ Need a new router? A name server (DNS)? A firewall to keep people out of your internal network? FreeBSD can easily turn that unused PC sitting in the corner into an advanced router with sophisticated packet-filtering capabilities.
-* _Embedded:_ FreeBSD makes an excellent platform to build embedded systems upon. With support for the ARM(R), MIPS(R) and PowerPC(R) platforms, coupled with a robust network stack, cutting edge features and the permissive extref:{faq}[BSD license, bsd-license-restrictions] FreeBSD makes an excellent foundation for building embedded routers, firewalls, and other devices.
-* _Desktop:_ FreeBSD makes a fine choice for an inexpensive desktop solution using the freely available X11 server. FreeBSD offers a choice from many open-source desktop environments, including the standard GNOME and KDE graphical user interfaces. FreeBSD can even boot "diskless" from a central server, making individual workstations even cheaper and easier to administer.
+* _Embedded:_ FreeBSD makes an excellent platform to build embedded systems upon. With support for the ARM, AArch64 and PowerPC platforms, coupled with a robust network stack, cutting edge features, and the permissive extref:{faq}[BSD license, bsd-license-restrictions], FreeBSD makes an excellent foundation for building embedded routers, firewalls, and other devices.
+* _Desktop:_ FreeBSD makes a fine choice for an inexpensive desktop solution using the freely available X11 server and Wayland display server. FreeBSD offers a choice from many open-source desktop environments, including the standard GNOME and KDE graphical user interfaces. FreeBSD can even boot "diskless" from a central server, making individual workstations even cheaper and easier to administer.
* _Software Development:_ The basic FreeBSD system comes with a full suite of development tools including a full C/C++ compiler and debugger suite. Support for many other languages are also available through the ports and packages collection.
FreeBSD is available to download free of charge, or can be obtained on either CD-ROM or DVD.
@@ -113,52 +115,14 @@ Please see crossref:mirrors[mirrors, Obtaining FreeBSD] for more information abo
[[introduction-nutshell-users]]
=== Who Uses FreeBSD?
-FreeBSD has been known for its web serving capabilities - sites that run on FreeBSD include link:https://news.ycombinator.com/[Hacker News], link:http://www.netcraft.com/[Netcraft], link:http://www.163.com/[NetEase], link:https://signup.netflix.com/openconnect[Netflix], link:http://www.sina.com/[Sina], link:http://www.sony.co.jp/[Sony Japan], link:http://www.rambler.ru/[Rambler], link:http://www.yahoo.com/[Yahoo!], and link:http://www.yandex.ru/[Yandex].
-
-FreeBSD's advanced features, proven security, predictable release cycle, and permissive license have led to its use as a platform for building many commercial and open source appliances, devices, and products.
-Many of the world's largest IT companies use FreeBSD:
-
-* link:http://www.apache.org/[Apache] - The Apache Software Foundation runs most of its public facing infrastructure, including possibly one of the largest SVN repositories in the world with over 1.4 million commits, on FreeBSD.
-* link:http://www.apple.com/[Apple] - OS X borrows heavily from FreeBSD for the network stack, virtual file system, and many userland components. Apple iOS also contains elements borrowed from FreeBSD.
-* link:http://www.cisco.com/[Cisco] - IronPort network security and anti-spam appliances run a modified FreeBSD kernel.
-* link:http://www.citrix.com/[Citrix] - The NetScaler line of security appliances provide layer 4-7 load balancing, content caching, application firewall, secure VPN, and mobile cloud network access, along with the power of a FreeBSD shell.
-* link:https://www.emc.com/isilon[Dell EMC Isilon] - Isilon's enterprise storage appliances are based on FreeBSD. The extremely liberal FreeBSD license allowed Isilon to integrate their intellectual property throughout the kernel and focus on building their product instead of an operating system.
-* link:http://www.quest.com/KACE[Quest KACE] - The KACE system management appliances run FreeBSD because of its reliability, scalability, and the community that supports its continued development.
-* link:http://www.ixsystems.com/[iXsystems] - The TrueNAS line of unified storage appliances is based on FreeBSD.
-* link:http://www.juniper.net/[Juniper] - The JunOS operating system that powers all Juniper networking gear (including routers, switches, and security and networking appliances) is based on FreeBSD. Juniper is one of many vendors that showcases the symbiotic relationship between the project and vendors of commercial products. Improvements generated at Juniper are upstreamed into FreeBSD to reduce the complexity of integrating new features from FreeBSD back into JunOS in the future.
-* link:http://www.mcafee.com/[McAfee] - SecurOS, the basis of McAfee enterprise firewall products including Sidewinder is based on FreeBSD.
-* link:http://www.netapp.com/[NetApp] - The Data ONTAP GX line of storage appliances are based on FreeBSD. In addition, NetApp has contributed back many features, including the new BSD licensed hypervisor, bhyve.
-* link:http://www.netflix.com/[Netflix] - The OpenConnect appliance that Netflix uses to stream movies to its customers is based on FreeBSD. Netflix has made extensive contributions to the codebase and works to maintain a zero delta from mainline FreeBSD. Netflix OpenConnect appliances are responsible for delivering more than 32% of all Internet traffic in North America.
-* link:http://www.sandvine.com/[Sandvine] - Sandvine uses FreeBSD as the basis of their high performance real-time network processing platforms that make up their intelligent network policy control products.
-* link:http://www.sony.com/[Sony] - The PlayStation Vita, PlayStation 4, and PlayStation 5 gaming consoles runs a modified version of FreeBSD.
-* link:http://www.sophos.com/[Sophos] - The Sophos Email Appliance product is based on a hardened FreeBSD and scans inbound mail for spam and viruses, while also monitoring outbound mail for malware as well as the accidental loss of sensitive information.
-* link:http://www.spectralogic.com/[Spectra Logic] - The nTier line of archive grade storage appliances run FreeBSD and OpenZFS.
-* link:https://www.stormshield.com[Stormshield] - Stormshield Network Security appliances are based on a hardened version of FreeBSD. The BSD license allows them to integrate their own intellectual property with the system while returning a great deal of interesting development to the community.
-* link:http://www.weather.com/[The Weather Channel] - The IntelliStar appliance that is installed at each local cable provider's headend and is responsible for injecting local weather forecasts into the cable TV network's programming runs FreeBSD.
-* link:http://www.verisign.com/[Verisign] - Verisign is responsible for operating the .com and .net root domain registries as well as the accompanying DNS infrastructure. They rely on a number of different network operating systems including FreeBSD to ensure there is no common point of failure in their infrastructure.
-* link:http://www.voxer.com/[Voxer] - Voxer powers their mobile voice messaging platform with ZFS on FreeBSD. Voxer switched from a Solaris derivative to FreeBSD because of its superior documentation, larger and more active community, and more developer friendly environment. In addition to critical features like ZFS and DTrace, FreeBSD also offers TRIM support for ZFS.
-* link:https://fudosecurity.com/en/[Fudo Security] - The FUDO security appliance allows enterprises to monitor, control, record, and audit contractors and administrators who work on their systems. Based on all of the best security features of FreeBSD including ZFS, GELI, Capsicum, HAST, and auditdistd.
-
-FreeBSD has also spawned a number of related open source projects:
-
-* link:http://bsdrp.net/[BSD Router] - A FreeBSD based replacement for large enterprise routers, designed to run on standard PC hardware.
-* link:https://www.truenas.com/[TrueNAS] is a Network Attached Storage (NAS) software that shares and protects data from modern-day threats like ransomware and malware. TrueNAS makes it easy for users and client devices to access shared data through virtually any sharing protocol.
-* link:https://ghostbsd.org/[GhostBSD] is derived from FreeBSD, uses the GTK environment to provide a beautiful look and comfortable experience on the modern BSD platform offering a natural and native UNIX(R) work environment.
-* link:http://mfsbsd.vx.sk/[mfsBSD] - A toolkit for building a FreeBSD system image that runs entirely from memory.
-* link:https://xigmanas.com/[XigmaNAS] - A file server distribution based on FreeBSD with a PHP powered web interface.
-* link:http://www.opnsense.org/[OPNSense] is an open source, easy-to-use and easy-to-build FreeBSD based firewall and routing platform. OPNsense includes most of the features available in expensive commercial firewalls, and more in many cases. It brings the rich feature set of commercial offerings with the benefits of open and verifiable sources.
-* link:https://www.midnightbsd.org[MidnightBSD] is a FreeBSD derived operating system developed with desktop users in mind. It includes all the software you'd expect for your daily tasks: mail, web browsing, word processing, gaming, and much more.
-* link:https://www.nomadbsd.org[NomadBSD] is a persistent live system for USB flash drives, based on FreeBSD. Together with automatic hardware detection and setup, it is configured to be used as a desktop system that works out of the box, but can also be used for data recovery, for educational purposes, or to test FreeBSD's hardware compatibility.
-* link:http://www.pfsense.org/[pfSense] - A firewall distribution based on FreeBSD with a huge array of features and extensive IPv6 support.
-* link:http://zrouter.org/[ZRouter] - An open source alternative firmware for embedded devices based on FreeBSD. Designed to replace the proprietary firmware on off-the-shelf routers.
-
-A list of link:https://www.freebsdfoundation.org/about/testimonials/[testimonials from companies basing their products and services on FreeBSD] can be found at the FreeBSD Foundation website.
+FreeBSD has been known for its web serving capabilities.
+A list of link:https://freebsdfoundation.org/about-us/testimonials/[testimonials from companies basing their products and services on FreeBSD] can be found at the FreeBSD Foundation website.
Wikipedia also maintains a link:https://en.wikipedia.org/wiki/List_of_products_based_on_FreeBSD[list of products based on FreeBSD].
[[history]]
== About the FreeBSD Project
-The following section provides some background information on the project, including a brief history, project goals, and the development model of the project.
+The following section provides some background information on the project, including a brief history, project goals, and the extref:{dev-model}[development model] of the project.
[[intro-history]]
=== A Brief History of FreeBSD
@@ -166,7 +130,7 @@ The following section provides some background information on the project, inclu
The FreeBSD Project had its genesis in the early part of 1993, partially as the brainchild of the Unofficial 386BSDPatchkit's last 3 coordinators: Nate Williams, Rod Grimes and Jordan Hubbard.
The original goal was to produce an intermediate snapshot of 386BSD in order to fix a number of problems that the patchkit mechanism was just not capable of solving.
-The early working title for the project was 386BSD 0.5 or 386BSD Interim in reference of that fact.
+The early working title for the project was 386BSD 0.5 or 386BSD Interim in reference to that fact.
386BSD was Bill Jolitz's operating system, which had been up to that point suffering rather severely from almost a year's worth of neglect.
As the patchkit swelled ever more uncomfortably with each passing day, they decided to assist Bill by providing this interim "cleanup" snapshot.
@@ -182,13 +146,13 @@ This was based on the 4.3BSD-Lite ("Net/2") tape from U.C. Berkeley, with many c
It was a fairly reasonable success for a first offering, and they followed it with the highly successful FreeBSD 1.1 release in May of 1994.
Around this time, some rather unexpected storm clouds formed on the horizon as Novell and U.C. Berkeley settled their long-running lawsuit over the legal status of the Berkeley Net/2 tape.
-A condition of that settlement was U.C. Berkeley's concession that large parts of Net/2 were "encumbered" code and the property of Novell, who had in turn acquired it from AT&T some time previously.
+A condition of that settlement was U.C. Berkeley's concession that three files of Net/2 were "encumbered" code and had to be removed as they were the property of Novell, who had in turn acquired it from AT&T some time previously.
What Berkeley got in return was Novell's "blessing" that the 4.4BSD-Lite release, when it was finally released, would be declared unencumbered and all existing Net/2 users would be strongly encouraged to switch.
This included FreeBSD, and the project was given until the end of July 1994 to stop shipping its own Net/2 based product.
Under the terms of that agreement, the project was allowed one last release before the deadline, that release being FreeBSD 1.1.5.1.
FreeBSD then set about the arduous task of literally re-inventing itself from a completely new and rather incomplete set of 4.4BSD-Lite bits.
-The "Lite" releases were light in part because Berkeley's CSRG had removed large chunks of code required for actually constructing a bootable running system (due to various legal requirements) and the fact that the Intel port of 4.4 was highly incomplete.
+Although only three files having to do with System V shared memory and semaphores were removed, many other changes and bug fixes had been made to the BSD distribution, so it was a huge task to merge all the FreeBSD developments into 4.4BSD-Lite.
It took the project until November of 1994 to make this transition, and in December it released FreeBSD 2.0 to the world.
Despite being still more than a little rough around the edges, the release was a significant success and was followed by the more robust and easier to install FreeBSD 2.0.5 release in June of 1995.
@@ -202,7 +166,7 @@ For now, long-term development projects continue to take place in the {rel-head}
The goals of the FreeBSD Project are to provide software that may be used for any purpose and without strings attached.
Many of us have a significant investment in the code (and project) and would certainly not mind a little financial compensation now and then, but we are definitely not prepared to insist on it.
We believe that our first and foremost "mission" is to provide code to any and all comers, and for whatever purpose, so that the code gets the widest possible use and provides the widest possible benefit.
-This is, I believe, one of the most fundamental goals of Free Software and one that we enthusiastically support.
+This is, we believe, one of the most fundamental goals of Free Software and one that we enthusiastically support.
That code in our source tree which falls under the GNU General Public License (GPL) or Library General Public License (LGPL) comes with slightly more strings attached, though at least on the side of enforced access rather than the usual opposite.
Due to the additional complexities that can evolve in the commercial use of GPL software we do, however, prefer software submitted under the more relaxed BSD license when it is a reasonable option to do so.
@@ -217,7 +181,7 @@ We are constantly on the lookout for new volunteers, and those interested in bec
Useful things to know about the FreeBSD Project and its development process, whether working independently or in close cooperation:
The Git repositories[[development-cvs-repository]]::
-For several years, the central source tree for FreeBSD was maintained by link:http://www.nongnu.org/cvs/[CVS] (Concurrent Versions System), a freely available source code control tool.
+For several years, the central source tree for FreeBSD was maintained by link:https://www.nongnu.org/cvs/[CVS] (Concurrent Versions System), a freely available source code control tool.
In June 2008, the Project switched to using link:https://subversion.apache.org/[SVN] (Subversion).
The switch was deemed necessary, as the technical limitations imposed by CVS were becoming obvious due to the rapid expansion of the source tree and the amount of history already stored.
The Documentation Project and Ports Collection repositories also moved from CVS to SVN in May 2012 and July 2012, respectively.
@@ -243,7 +207,7 @@ The "board of directors" analogy above is not very accurate, and it may be more
====
The FreeBSD Foundation[[development-foundation]]::
-The link:https://freebsdfoundation.org[FreeBSD Foundation] is a 501(c)(3), US-based, non-profit organization dedicated to supporting and promoting the FreeBSD Project and community worldwide.
+The link:https://freebsdfoundation.org/[FreeBSD Foundation] is a 501(c)(3), US-based, non-profit organization dedicated to supporting and promoting the FreeBSD Project and community worldwide.
The Foundation funds software development via project grants and provides staff to immediately respond to urgent problems and implement new features and functionality.
The Foundation purchases hardware to improve and maintain FreeBSD infrastructure, and funds staffing to improve test coverage, continuous integration and automation.
The Foundation advocates for FreeBSD by promoting FreeBSD at technical conferences and events around the world.
@@ -252,7 +216,7 @@ The Foundation also represents the FreeBSD Project in executing contracts, licen
Outside contributors::
Last, but definitely not least, the largest group of developers are the users themselves who provide feedback and bug fixes to us on an almost constant basis.
-The primary way of keeping in touch with development of FreeBSD base system is to subscribe to the {freebsd-hackers} where such things are discussed.
+The primary way of keeping in touch with the development of the FreeBSD base system is to subscribe to the {freebsd-hackers} where such things are discussed.
For porting third party applications, it would be the {freebsd-ports}.
For documentation - {freebsd-doc}.
See crossref:eresources[eresources, Resources on the Internet] for more information about the various FreeBSD mailing lists.
@@ -270,7 +234,7 @@ All we ask of those who would join us as FreeBSD developers is some of the same
=== Third Party Programs
In addition to the base distributions, FreeBSD offers a ported software collection with thousands of commonly sought-after programs.
-The list of ports ranges from HTTP servers, to games, languages, editors, and almost everything in between.
+The list of ports ranges from HTTP servers to games, languages, editors, and almost everything in between.
There are about {numports} ports; the entire Ports Collection requires approximately {ports-size}.
To compile a port, you simply change to the directory of the program you wish to install, type `make install`, and let the system do the rest.
The full original distribution for each port you build is retrieved dynamically so you need only enough disk space to build the ports you want.
@@ -282,19 +246,22 @@ More information on packages and ports can be found in crossref:ports[ports,Inst
All supported FreeBSD versions provide an option in the installer to install additional documentation under [.filename]#/usr/local/share/doc/freebsd# during the initial system setup.
Documentation may also be installed later using packages:
+
[source,shell]
....
# pkg install en-freebsd-doc
....
-For localized versions replace the "en" with language prefix of choice.
+For localized versions replace the "en" with the language prefix of choice.
Be aware that some of the localised versions might be out of date and might contain information that is no longer correct or relevant.
You may view the locally installed manuals with a web browser using the following URLs:
The FreeBSD Handbook::
-[.filename]#link:file:///usr/local/share/doc/freebsd/en/books/handbook/book.html[/usr/local/share/doc/freebsd/en/books/handbook/book.html]#
+`/usr/local/share/doc/freebsd/en/books/handbook/handbook_en.pdf`
The FreeBSD FAQ::
-[.filename]#link:file://localhost/usr/local/share/doc/freebsd/en/books/faq/book.html[/usr/local/share/doc/freebsd/en/books/faq/book.html]#
+`/usr/local/share/doc/freebsd/en/books/faq/faq_en.pdf`
+
+You can always find up to date documentation at link:https://docs.FreeBSD.org/[The Documentation Portal].
-You can always find up to date documentation at link:https://docs.FreeBSD.org/[https://docs.FreeBSD.org/].
+All trademarks are the property of their respective owners.
diff --git a/documentation/content/en/books/handbook/introduction/_index.po b/documentation/content/en/books/handbook/introduction/_index.po
new file mode 100644
index 0000000000..7b60f26f39
--- /dev/null
+++ b/documentation/content/en/books/handbook/introduction/_index.po
@@ -0,0 +1,777 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/introduction/_index.adoc:1
+#, no-wrap
+msgid "This chapter covers various aspects of the FreeBSD Project, such as its history, goals, development model, and so on"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/introduction/_index.adoc:1
+#, no-wrap
+msgid "Part I. Getting Started"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/introduction/_index.adoc:1
+#, no-wrap
+msgid "Chapter 1. Introduction"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/introduction/_index.adoc:14
+#, no-wrap
+msgid "Introduction"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/introduction/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:55
+msgid ""
+"Thank you for your interest in FreeBSD! The following chapter covers various "
+"aspects of the FreeBSD Project, such as its history, goals, development "
+"model, and so on."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:57
+msgid "After reading this chapter you will know:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:59
+msgid "How FreeBSD relates to other computer operating systems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:60
+msgid "The history of the FreeBSD Project."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:61
+msgid "The goals of the FreeBSD Project."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:62
+msgid "The basics of the FreeBSD open-source development model."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:63
+msgid "And of course: where the name \"FreeBSD\" comes from."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/introduction/_index.adoc:65
+#, no-wrap
+msgid "Welcome to FreeBSD!"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:70
+msgid ""
+"FreeBSD is an Open Source, standards-compliant Unix-like operating system "
+"for x86 (both 32 and 64 bit), ARM, AArch64, RISC-V, POWER, and PowerPC "
+"computers. It provides all the features that are nowadays taken for "
+"granted, such as preemptive multitasking, memory protection, virtual memory, "
+"multi-user facilities, SMP support, all the Open Source development tools "
+"for different languages and frameworks, and desktop features centered around "
+"X Window System, KDE, or GNOME. Its particular strengths are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:72
+msgid ""
+"_Liberal Open Source license_, which grants you rights to freely modify and "
+"extend its source code and incorporate it in both Open Source projects and "
+"closed products without imposing restrictions typical to copyleft licenses, "
+"as well as avoiding potential license incompatibility problems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:73
+msgid ""
+"_Strong TCP/IP networking_ - FreeBSD implements industry standard protocols "
+"with ever increasing performance and scalability. This makes it a good match "
+"in both server, and routing/firewalling roles - and indeed many companies "
+"and vendors use it precisely for that purpose."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:74
+msgid ""
+"_Fully integrated OpenZFS support_, including root-on-ZFS, ZFS Boot "
+"Environments, fault management, administrative delegation, support for "
+"jails, FreeBSD specific documentation, and system installer support."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:75
+msgid ""
+"_Extensive security features_, from the Mandatory Access Control framework "
+"to Capsicum capability and sandbox mechanisms."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:76
+msgid ""
+"_Over 30 thousand prebuilt packages_ for all supported architectures, and "
+"the Ports Collection which makes it easy to build your own, customized ones."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:77
+msgid ""
+"_Documentation_ - in addition to the Handbook and books from different "
+"authors that cover topics ranging from system administration to kernel "
+"internals, there are also the man:man[1] pages, not only for userspace "
+"daemons, utilities, and configuration files, but also for kernel driver APIs "
+"(section 9) and individual drivers (section 4)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:78
+msgid ""
+"_Simple and consistent repository structure and build system_ - FreeBSD uses "
+"a single repository for all of its components, both kernel and userspace. "
+"This, along with a unified and easy to customize build system and a well "
+"thought-out development process makes it easy to integrate FreeBSD with "
+"build infrastructure for your own product."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:79
+msgid ""
+"_Staying true to Unix philosophy_, preferring composability instead of "
+"monolithic \"all in one\" daemons with hardcoded behavior."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:80
+msgid ""
+"_Binary compatibility_ with Linux, which makes it possible to run many Linux "
+"binaries without the need for virtualisation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:84
+msgid ""
+"FreeBSD is based on the 4.4BSD-Lite release from Computer Systems Research "
+"Group (CSRG) at the University of California at Berkeley, and carries on the "
+"distinguished tradition of BSD systems development. In addition to the fine "
+"work provided by CSRG, the FreeBSD Project has put in many thousands of man-"
+"hours into extending the functionality and fine-tuning the system for "
+"maximum performance and reliability in real-life load situations. FreeBSD "
+"offers performance and reliability on par with other Open Source and "
+"commercial offerings, combined with cutting-edge features not available "
+"anywhere else."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/introduction/_index.adoc:86
+#, no-wrap
+msgid "What Can FreeBSD Do?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:90
+msgid ""
+"The applications to which FreeBSD can be put are truly limited only by your "
+"own imagination. From software development to factory automation, inventory "
+"control to azimuth correction of remote satellite antenna; if it can be done "
+"with a commercial UNIX(R) product then it is more than likely that you can "
+"do it with FreeBSD too! FreeBSD also benefits significantly from literally "
+"thousands of high quality applications developed by research centers and "
+"universities around the world, often available at little to no cost."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:93
+msgid ""
+"Because the source code for FreeBSD itself is freely available, the system "
+"can also be customized to an almost unheard-of degree for special "
+"applications or projects, and in ways not generally possible with operating "
+"systems from most major commercial vendors. Here is just a sampling of some "
+"of the applications in which people are currently using FreeBSD:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:95
+msgid ""
+"_Internet Services:_ The robust TCP/IP networking built into FreeBSD makes "
+"it an ideal platform for a variety of Internet services such as:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:97
+msgid "Web servers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:98
+msgid "IPv4 and IPv6 routing"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:99
+msgid "Firewalls and NAT (\"IP masquerading\") gateways"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:100
+msgid "FTP servers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:101
+msgid "Email servers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:102
+msgid "Storage servers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:103
+msgid "Virtualization servers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:104
+msgid "And more..."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:106
+msgid ""
+"_Education:_ Are you a student of computer science or a related engineering "
+"field? There is no better way of learning about operating systems, computer "
+"architecture and networking than the hands-on, under-the-hood experience "
+"that FreeBSD can provide. A number of freely available CAD, mathematical and "
+"graphic design packages also make it highly useful to those whose primary "
+"interest in a computer is to get _other_ work done!"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:107
+msgid ""
+"_Research:_ With source code for the entire system available, FreeBSD is an "
+"excellent platform for research in operating systems as well as other "
+"branches of computer science. FreeBSD's freely available nature also makes "
+"it possible for remote groups to collaborate on ideas or shared development "
+"without having to worry about special licensing agreements or limitations on "
+"what may be discussed in open forums."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:108
+msgid ""
+"_Networking:_ Need a new router? A name server (DNS)? A firewall to keep "
+"people out of your internal network? FreeBSD can easily turn that unused PC "
+"sitting in the corner into an advanced router with sophisticated packet-"
+"filtering capabilities."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:109
+msgid ""
+"_Embedded:_ FreeBSD makes an excellent platform to build embedded systems "
+"upon. With support for the ARM, AArch64 and PowerPC platforms, coupled with "
+"a robust network stack, cutting edge features, and the permissive extref:"
+"{faq}[BSD license, bsd-license-restrictions], FreeBSD makes an excellent "
+"foundation for building embedded routers, firewalls, and other devices."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:110
+msgid ""
+"_Desktop:_ FreeBSD makes a fine choice for an inexpensive desktop solution "
+"using the freely available X11 server and Wayland display server. FreeBSD "
+"offers a choice from many open-source desktop environments, including the "
+"standard GNOME and KDE graphical user interfaces. FreeBSD can even boot "
+"\"diskless\" from a central server, making individual workstations even "
+"cheaper and easier to administer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:111
+msgid ""
+"_Software Development:_ The basic FreeBSD system comes with a full suite of "
+"development tools including a full C/C++ compiler and debugger suite. "
+"Support for many other languages are also available through the ports and "
+"packages collection."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:114
+msgid ""
+"FreeBSD is available to download free of charge, or can be obtained on "
+"either CD-ROM or DVD. Please see crossref:mirrors[mirrors, Obtaining "
+"FreeBSD] for more information about obtaining FreeBSD."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/introduction/_index.adoc:116
+#, no-wrap
+msgid "Who Uses FreeBSD?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:121
+msgid ""
+"FreeBSD has been known for its web serving capabilities. A list of link:"
+"https://freebsdfoundation.org/about-us/testimonials/[testimonials from "
+"companies basing their products and services on FreeBSD] can be found at the "
+"FreeBSD Foundation website. Wikipedia also maintains a link:https://en."
+"wikipedia.org/wiki/List_of_products_based_on_FreeBSD[list of products based "
+"on FreeBSD]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/introduction/_index.adoc:123
+#, no-wrap
+msgid "About the FreeBSD Project"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:126
+msgid ""
+"The following section provides some background information on the project, "
+"including a brief history, project goals, and the extref:{dev-model}"
+"[development model] of the project."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/introduction/_index.adoc:128
+#, no-wrap
+msgid "A Brief History of FreeBSD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:131
+msgid ""
+"The FreeBSD Project had its genesis in the early part of 1993, partially as "
+"the brainchild of the Unofficial 386BSDPatchkit's last 3 coordinators: Nate "
+"Williams, Rod Grimes and Jordan Hubbard."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:134
+msgid ""
+"The original goal was to produce an intermediate snapshot of 386BSD in order "
+"to fix a number of problems that the patchkit mechanism was just not capable "
+"of solving. The early working title for the project was 386BSD 0.5 or "
+"386BSD Interim in reference to that fact."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:138
+msgid ""
+"386BSD was Bill Jolitz's operating system, which had been up to that point "
+"suffering rather severely from almost a year's worth of neglect. As the "
+"patchkit swelled ever more uncomfortably with each passing day, they decided "
+"to assist Bill by providing this interim \"cleanup\" snapshot. Those plans "
+"came to a rude halt when Bill Jolitz suddenly decided to withdraw his "
+"sanction from the project without any clear indication of what would be done "
+"instead."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:143
+msgid ""
+"The trio thought that the goal remained worthwhile, even without Bill's "
+"support, and so they adopted the name \"FreeBSD\" coined by David Greenman. "
+"The initial objectives were set after consulting with the system's current "
+"users and, once it became clear that the project was on the road to perhaps "
+"even becoming a reality, Jordan contacted Walnut Creek CDROM with an eye "
+"toward improving FreeBSD's distribution channels for those many unfortunates "
+"without easy access to the Internet. Walnut Creek CDROM not only supported "
+"the idea of distributing FreeBSD on CD but also went so far as to provide "
+"the project with a machine to work on and a fast Internet connection. "
+"Without Walnut Creek CDROM's almost unprecedented degree of faith in what "
+"was, at the time, a completely unknown project, it is quite unlikely that "
+"FreeBSD would have gotten as far, as fast, as it has today."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:147
+msgid ""
+"The first CD-ROM (and general net-wide) distribution was FreeBSD 1.0, "
+"released in December of 1993. This was based on the 4.3BSD-Lite (\"Net/2\") "
+"tape from U.C. Berkeley, with many components also provided by 386BSD and "
+"the Free Software Foundation. It was a fairly reasonable success for a "
+"first offering, and they followed it with the highly successful FreeBSD 1.1 "
+"release in May of 1994."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:153
+msgid ""
+"Around this time, some rather unexpected storm clouds formed on the horizon "
+"as Novell and U.C. Berkeley settled their long-running lawsuit over the "
+"legal status of the Berkeley Net/2 tape. A condition of that settlement was "
+"U.C. Berkeley's concession that three files of Net/2 were \"encumbered\" "
+"code and had to be removed as they were the property of Novell, who had in "
+"turn acquired it from AT&T some time previously. What Berkeley got in "
+"return was Novell's \"blessing\" that the 4.4BSD-Lite release, when it was "
+"finally released, would be declared unencumbered and all existing Net/2 "
+"users would be strongly encouraged to switch. This included FreeBSD, and "
+"the project was given until the end of July 1994 to stop shipping its own "
+"Net/2 based product. Under the terms of that agreement, the project was "
+"allowed one last release before the deadline, that release being FreeBSD "
+"1.1.5.1."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:158
+msgid ""
+"FreeBSD then set about the arduous task of literally re-inventing itself "
+"from a completely new and rather incomplete set of 4.4BSD-Lite bits. "
+"Although only three files having to do with System V shared memory and "
+"semaphores were removed, many other changes and bug fixes had been made to "
+"the BSD distribution, so it was a huge task to merge all the FreeBSD "
+"developments into 4.4BSD-Lite. It took the project until November of 1994 "
+"to make this transition, and in December it released FreeBSD 2.0 to the "
+"world. Despite being still more than a little rough around the edges, the "
+"release was a significant success and was followed by the more robust and "
+"easier to install FreeBSD 2.0.5 release in June of 1995."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:160
+msgid ""
+"Since that time, FreeBSD has made a series of releases each time improving "
+"the stability, speed, and feature set of the previous version."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:162
+msgid ""
+"For now, long-term development projects continue to take place in the {rel-"
+"head}-CURRENT (main) branch, and snapshot releases of {rel-head} are "
+"continually made available from link:https://download.freebsd.org/snapshots/"
+"[the snapshot server] as work progresses."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/introduction/_index.adoc:164
+#, no-wrap
+msgid "FreeBSD Project Goals"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:170
+msgid ""
+"The goals of the FreeBSD Project are to provide software that may be used "
+"for any purpose and without strings attached. Many of us have a significant "
+"investment in the code (and project) and would certainly not mind a little "
+"financial compensation now and then, but we are definitely not prepared to "
+"insist on it. We believe that our first and foremost \"mission\" is to "
+"provide code to any and all comers, and for whatever purpose, so that the "
+"code gets the widest possible use and provides the widest possible benefit. "
+"This is, we believe, one of the most fundamental goals of Free Software and "
+"one that we enthusiastically support."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:173
+msgid ""
+"That code in our source tree which falls under the GNU General Public "
+"License (GPL) or Library General Public License (LGPL) comes with slightly "
+"more strings attached, though at least on the side of enforced access rather "
+"than the usual opposite. Due to the additional complexities that can evolve "
+"in the commercial use of GPL software we do, however, prefer software "
+"submitted under the more relaxed BSD license when it is a reasonable option "
+"to do so."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/introduction/_index.adoc:175
+#, no-wrap
+msgid "The FreeBSD Development Model"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:180
+msgid ""
+"The development of FreeBSD is a extref:{dev-model}[very open and flexible "
+"process], being literally built from the contributions of thousands of "
+"people around the world, as can be seen from our extref:{contributors}[list "
+"of contributors]. FreeBSD's development infrastructure allows these "
+"thousands of contributors to collaborate over the Internet. We are "
+"constantly on the lookout for new volunteers, and those interested in "
+"becoming more closely involved should consult the article on extref:"
+"{contributing}[Contributing to FreeBSD]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:182
+msgid ""
+"Useful things to know about the FreeBSD Project and its development process, "
+"whether working independently or in close cooperation:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/introduction/_index.adoc:183
+#, no-wrap
+msgid "The Git repositories[[development-cvs-repository]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:190
+msgid ""
+"For several years, the central source tree for FreeBSD was maintained by "
+"link:https://www.nongnu.org/cvs/[CVS] (Concurrent Versions System), a freely "
+"available source code control tool. In June 2008, the Project switched to "
+"using link:https://subversion.apache.org/[SVN] (Subversion). The switch was "
+"deemed necessary, as the technical limitations imposed by CVS were becoming "
+"obvious due to the rapid expansion of the source tree and the amount of "
+"history already stored. The Documentation Project and Ports Collection "
+"repositories also moved from CVS to SVN in May 2012 and July 2012, "
+"respectively. In December 2020, the Project link:https://www.freebsd.org/"
+"status/report-2020-10-2020-12.html#Git-Migration-Working-Group[migrated "
+"Source and Documentation repositories] to link:https://git-scm.com/[Git], "
+"with link:https://www.freebsd.org/status/report-2021-04-2021-06/"
+"#_git_migration_working_group[Ports following suit] in April 2021. Please "
+"refer to the crossref:cutting-edge[synching, Obtaining the Source] section "
+"for more information on obtaining the FreeBSD `src/` repository and crossref:"
+"ports[ports-using, Using the Ports Collection] for details on obtaining the "
+"FreeBSD Ports Collection."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/introduction/_index.adoc:191
+#, no-wrap
+msgid "The committers list[[development-committers]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:195
+msgid ""
+"The _committers_ are the people who have _push_ access to the Git "
+"repository, and are authorized to make modifications to the FreeBSD source "
+"(the term \"committer\" comes from `commit`, the source control command "
+"which is used to bring new changes into the repository). Anyone can submit "
+"a bug to the link:https://bugs.FreeBSD.org/submit/[Bug Database]. Before "
+"submitting a bug report, the FreeBSD mailing lists, IRC channels, or forums "
+"can be used to help verify that an issue is actually a bug."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/introduction/_index.adoc:196
+#, no-wrap
+msgid "The FreeBSD core team[[development-core]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:202
+msgid ""
+"The _FreeBSD core team_ would be equivalent to the board of directors if the "
+"FreeBSD Project were a company. The primary task of the core team is to "
+"make sure the project, as a whole, is in good shape and is heading in the "
+"right directions. Inviting dedicated and responsible developers to join our "
+"group of committers is one of the functions of the core team, as is the "
+"recruitment of new core team members as others move on. The current core "
+"team was elected from a pool of committer candidates in May 2022. Elections "
+"are held every 2 years."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/introduction/_index.adoc:207
+msgid ""
+"Like most developers, most members of the core team are also volunteers when "
+"it comes to FreeBSD development and do not benefit from the project "
+"financially, so \"commitment\" should also not be misconstrued as meaning "
+"\"guaranteed support.\" The \"board of directors\" analogy above is not very "
+"accurate, and it may be more suitable to say that these are the people who "
+"gave up their lives in favor of FreeBSD against their better judgement!"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/introduction/_index.adoc:209
+#, no-wrap
+msgid "The FreeBSD Foundation[[development-foundation]]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:216
+msgid ""
+"The link:https://freebsdfoundation.org/[FreeBSD Foundation] is a 501(c)(3), "
+"US-based, non-profit organization dedicated to supporting and promoting the "
+"FreeBSD Project and community worldwide. The Foundation funds software "
+"development via project grants and provides staff to immediately respond to "
+"urgent problems and implement new features and functionality. The "
+"Foundation purchases hardware to improve and maintain FreeBSD "
+"infrastructure, and funds staffing to improve test coverage, continuous "
+"integration and automation. The Foundation advocates for FreeBSD by "
+"promoting FreeBSD at technical conferences and events around the world. The "
+"Foundation also provides workshops, educational material, and presentations "
+"to recruit more users and contributors to FreeBSD. The Foundation also "
+"represents the FreeBSD Project in executing contracts, license agreements, "
+"and other legal arrangements that require a recognized legal entity."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/introduction/_index.adoc:217
+#, no-wrap
+msgid "Outside contributors"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:223
+msgid ""
+"Last, but definitely not least, the largest group of developers are the "
+"users themselves who provide feedback and bug fixes to us on an almost "
+"constant basis. The primary way of keeping in touch with the development of "
+"the FreeBSD base system is to subscribe to the {freebsd-hackers} where such "
+"things are discussed. For porting third party applications, it would be the "
+"{freebsd-ports}. For documentation - {freebsd-doc}. See crossref:"
+"eresources[eresources, Resources on the Internet] for more information about "
+"the various FreeBSD mailing lists."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:226
+msgid ""
+"extref:{contributors}[The FreeBSD Contributors List] is a long and growing "
+"one, so why not join it by extref:{contributing}[contributing something back "
+"to FreeBSD] today? Providing code is not the only way!"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:230
+msgid ""
+"In summary, our development model is organized as a loose set of concentric "
+"circles. The centralized model is designed for the convenience of the "
+"_users_ of FreeBSD, who are provided with an easy way of tracking one "
+"central code base, not to keep potential contributors out! Our desire is to "
+"present a stable operating system with a large set of coherent crossref:"
+"ports[ports,application programs] that the users can easily install and use "
+"- this model works very well in accomplishing that."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:232
+msgid ""
+"All we ask of those who would join us as FreeBSD developers is some of the "
+"same dedication its current people have to its continued success!"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/introduction/_index.adoc:234
+#, no-wrap
+msgid "Third Party Programs"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:241
+msgid ""
+"In addition to the base distributions, FreeBSD offers a ported software "
+"collection with thousands of commonly sought-after programs. The list of "
+"ports ranges from HTTP servers to games, languages, editors, and almost "
+"everything in between. There are about {numports} ports; the entire Ports "
+"Collection requires approximately {ports-size}. To compile a port, you "
+"simply change to the directory of the program you wish to install, type "
+"`make install`, and let the system do the rest. The full original "
+"distribution for each port you build is retrieved dynamically so you need "
+"only enough disk space to build the ports you want."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:244
+msgid ""
+"Almost every port is also provided as a pre-compiled \"package\", which can "
+"be installed with a simple command (`pkg install`) by those who do not wish "
+"to compile their own ports from source. More information on packages and "
+"ports can be found in crossref:ports[ports,Installing Applications: Packages "
+"and Ports]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/introduction/_index.adoc:245
+#, no-wrap
+msgid "Additional Documentation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:249
+msgid ""
+"All supported FreeBSD versions provide an option in the installer to install "
+"additional documentation under [.filename]#/usr/local/share/doc/freebsd# "
+"during the initial system setup. Documentation may also be installed later "
+"using packages:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/introduction/_index.adoc:253
+#, no-wrap
+msgid "# pkg install en-freebsd-doc\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:258
+msgid ""
+"For localized versions replace the \"en\" with the language prefix of "
+"choice. Be aware that some of the localised versions might be out of date "
+"and might contain information that is no longer correct or relevant. You "
+"may view the locally installed manuals with a web browser using the "
+"following URLs:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/introduction/_index.adoc:259
+#, no-wrap
+msgid "The FreeBSD Handbook"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:261
+msgid "`/usr/local/share/doc/freebsd/en/books/handbook/handbook_en.pdf`"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/introduction/_index.adoc:262
+#, no-wrap
+msgid "The FreeBSD FAQ"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:264
+msgid "`/usr/local/share/doc/freebsd/en/books/faq/faq_en.pdf`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:266
+msgid ""
+"You can always find up to date documentation at link:https://docs.FreeBSD."
+"org/[The Documentation Portal]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/introduction/_index.adoc:267
+msgid "All trademarks are the property of their respective owners."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/jails/_index.adoc b/documentation/content/en/books/handbook/jails/_index.adoc
index 36c177926a..bf17248179 100644
--- a/documentation/content/en/books/handbook/jails/_index.adoc
+++ b/documentation/content/en/books/handbook/jails/_index.adoc
@@ -1,24 +1,24 @@
---
-title: Chapter 15. Jails
+title: Chapter 17. Jails and Containers
part: Part III. System Administration
prev: books/handbook/security
next: books/handbook/mac
description: Jails improve on the concept of the traditional chroot environment in several ways
-tags: ["jails", "creating", "managing", "updating", "ezjail"]
+tags: ["jails", "creating", "managing", "updating"]
showBookMenu: true
-weight: 19
-path: "/books/handbook/"
+weight: 21
+path: "/books/handbook/jails/"
---
[[jails]]
-= Jails
+= Jails and Containers
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 15
+:sectnumoffset: 17
:partnums:
:source-highlighter: rouge
:experimental:
@@ -60,1172 +60,1097 @@ Jails build upon the man:chroot[2] concept, which is used to change the root dir
This creates a safe environment, separate from the rest of the system.
Processes created in the chrooted environment can not access files or resources outside of it.
For that reason, compromising a service running in a chrooted environment should not allow the attacker to compromise the entire system.
+
However, a chroot has several limitations.
It is suited to easy tasks which do not require much flexibility or complex, advanced features.
Over time, many ways have been found to escape from a chrooted environment, making it a less than ideal solution for securing services.
Jails improve on the concept of the traditional chroot environment in several ways.
+
In a traditional chroot environment, processes are only limited in the part of the file system they can access.
The rest of the system resources, system users, running processes, and the networking subsystem are shared by the chrooted processes and the processes of the host system.
Jails expand this model by virtualizing access to the file system, the set of users, and the networking subsystem.
More fine-grained controls are available for tuning the access of a jailed environment.
Jails can be considered as a type of operating system-level virtualization.
-A jail is characterized by four elements:
+This chapter covers:
-* A directory subtree: the starting point from which a jail is entered. Once inside the jail, a process is not permitted to escape outside of this subtree.
-* A hostname: which will be used by the jail.
-* An IP address: which is assigned to the jail. The IP address of a jail is often an alias address for an existing network interface.
-* A command: the path name of an executable to run inside the jail. The path is relative to the root directory of the jail environment.
+* What a jail is and what purpose it may serve in FreeBSD installations.
+* The different types of jail.
+* The different ways to configure the network for a jail.
+* The jail configuration file.
+* How to create the different types of jail.
+* How to start, stop, and restart a jail.
+* The basics of jail administration, both from inside and outside the jail.
+* How to upgrade the different types of jail.
+* A incomplete list of the different FreeBSD jail managers.
-Jails have their own set of users and their own `root` account which are limited to the jail environment.
-The `root` account of a jail is not allowed to perform operations to the system outside of the associated jail environment.
+[[jail-types]]
+== Jail Types
-This chapter provides an overview of the terminology and commands for managing FreeBSD jails.
-Jails are a powerful tool for both system administrators, and advanced users.
+Some administrators divide jails into different types, although the underlying technology is the same.
+Each administrator will have to assess what type of jail to create in each case depending on the problem they have to solve.
-After reading this chapter, you will know:
+Below can be found a list of the different types, their characteristics, and considerations for use.
-* What a jail is and what purpose it may serve in FreeBSD installations.
-* How to build, start, and stop a jail.
-* The basics of jail administration, both from inside and outside the jail.
+[[thick-jails]]
+=== Thick Jails
-[IMPORTANT]
-====
-Jails are a powerful tool, but they are not a security panacea.
-While it is not possible for a jailed process to break out on its own, there are several ways in which an unprivileged user outside the jail can cooperate with a privileged user inside the jail to obtain elevated privileges in the host environment.
+A thick jail is a traditional form of FreeBSD Jail.
+In a thick jail, a complete copy of the base system is replicated within the jail's environment.
+This means that the jail has its own separate instance of the FreeBSD base system, including libraries, executables, and configuration files.
+The jail can be thought of as an almost complete standalone FreeBSD installation, but running within the confines of the host system.
+This isolation ensures that the processes within the jail are kept separate from those on the host and other jails.
-Most of these attacks can be mitigated by ensuring that the jail root is not accessible to unprivileged users in the host environment.
-As a general rule, untrusted users with privileged access to a jail should not be given access to the host environment.
-====
+Advantages of Thick Jails:
-[[jails-terms]]
-== Terms Related to Jails
+* High degree of isolation: Processes within the jail are isolated from the host system and other jails.
+* Independence: Thick jails can have different versions of libraries, configurations, and software than the host system or other jails.
+* Security: Since the jail contains its own base system, vulnerabilities or issues affecting the jail environment won't directly impact the host or other jails.
-To facilitate better understanding of parts of the FreeBSD system related to jails, their internals and the way they interact with the rest of FreeBSD, the following terms are used further in this chapter:
+Disadvantages of Thick Jails:
-man:chroot[8] (command)::
-Utility, which uses man:chroot[2] FreeBSD system call to change the root directory of a process and all its descendants.
+* Resource overhead: Because each jail maintains its own separate base system, thick jails consume more resources compared to thin jails.
+* Maintenance: Each jail requires its own maintenance and updates for its base system components.
-man:chroot[2] (environment)::
-The environment of processes running in a "chroot".
-This includes resources such as the part of the file system which is visible, user and group IDs which are available, network interfaces and other IPC mechanisms, etc.
+[[thin-jails]]
+=== Thin Jails
-man:jail[8] (command)::
-The system administration utility which allows launching of processes within a jail environment.
+A thin jail shares the base system using OpenZFS snapshots or NullFS mounts from a template.
+Only a minimal subset of base system is duplicated for each thin jail, resulting in less resource consumption compared to a thick jail.
+However, this also means that thin jails have less isolation and independence compared to thick jails.
+Changes in shared components could potentially affect multiple thin jails simultaneously.
-host (system, process, user, etc.)::
-The controlling system of a jail environment.
-The host system has access to all the hardware resources available, and can control processes both outside of and inside a jail environment.
-One of the important differences of the host system from a jail is that the limitations which apply to superuser processes inside a jail are not enforced for processes of the host system.
+In summary, a FreeBSD Thin Jail is a type of FreeBSD Jail that replicates a substantial portion, but not all, of the base system within the isolated environment.
-hosted (system, process, user, etc.)::
-A process, user or other entity, whose access to resources is restricted by a FreeBSD jail.
+Advantages of Thin Jails:
-[[jails-build]]
-== Creating and Controlling Jails
+* Resource Efficiency: Thin jails are more resource-efficient compared to thick jails. Since they share most of the base system, they consume less disk space and memory. This makes it possible to run more jails on the same hardware without consuming excessive resources.
+* Faster Deployment: Creating and launching thin jails is generally faster compared to thick jails. This can be particularly advantageous when you need to rapidly deploy multiple instances.
+* Unified Maintenance: Since thin jails share the majority of their base system with the host system, updates and maintenance of common base system components (such as libraries and binaries) only need to be done once on the host. This simplifies the maintenance process compared to maintaining an individual base system for each thick jail.
+* Shared Resources: Thin jails can more easily share common resources such as libraries and binaries with the host system. This can potentially lead to more efficient disk caching and improved performance for applications within the jail.
-Some administrators divide jails into the following two types: "complete" jails, which resemble a real FreeBSD system, and "service" jails, dedicated to one application or service, possibly running with privileges.
-This is only a conceptual division and the process of building a jail is not affected by it.
-When creating a "complete" jail there are two options for the source of the userland: use prebuilt binaries (such as those supplied on an install media) or build from source.
+Disadvantages of Thin Jails:
-=== Installing a Jail
+* Reduced Isolation: The primary disadvantage of thin jails is that they offer less isolation compared to thick jails. Since they share a significant portion of the template's base system, vulnerabilities or issues affecting shared components could potentially impact multiple jails simultaneously.
+* Security Concerns: The reduced isolation in thin jails could pose security risks, as a compromise in one jail might have a greater potential to affect other jails or the host system.
+* Dependency Conflicts: If multiple thin jails require different versions of the same libraries or software, managing dependencies can become complex. In some cases, this might require additional effort to ensure compatibility.
+* Compatibility Challenges: Applications within a thin jail might encounter compatibility issues if they assume a certain base system environment that differs from the shared components provided by the template.
-[[jails-install-internet]]
-==== To install a Jail from the Internet
+[[vnet-jails]]
+=== VNET Jails
-The man:bsdinstall[8] tool can be used to fetch and install the binaries needed for a jail.
-This will walk through the picking of a mirror, which distributions will be installed into the destination directory, and some basic configuration of the jail:
+A FreeBSD VNET jail is a virtualized environment that allows for the isolation and control of network resources for processes running within it.
+It provides a high level of network segmentation and security by creating a separate network stack for processes within the jail,
+ensuring that network traffic within the jail is isolated from the host system and other jails.
-[source,shell]
-....
-# bsdinstall jail /here/is/the/jail
-....
+In essence, FreeBSD VNET jails add a network configuration mechanism.
+This means a VNET jail can be created as a Thick or Thin Jail.
-Once the command is complete, the next step is configuring the host to run the jail.
+[[linux-jails]]
+=== Linux Jails
-[[jails-install-iso]]
-==== To install a Jail from an ISO
+A FreeBSD Linux Jail is a feature in the FreeBSD operating system that enables the use of Linux binaries and applications within a FreeBSD jail.
+This functionality is achieved by incorporating a compatibility layer that allows certain Linux system calls and libraries to be translated and executed on the FreeBSD kernel.
+The purpose of a Linux Jail is to facilitate the execution of Linux software on a FreeBSD system without needing a separate Linux virtual machine or environment.
-To install the userland from installation media, first create the root directory for the jail.
-This can be done by setting the `DESTDIR` variable to the proper location.
+[[host-configuration]]
+== Host Configuration
-Start a shell and define `DESTDIR`:
+Before creating any jail on the host system it is necessary to perform certain configuration and obtain some information from the host system.
-[source,shell]
-....
-# sh
-# export DESTDIR=/here/is/the/jail
-....
+It will be necessary to configure the man:jail[8] utility, create the necessary directories to configure and install jails, obtain information from the host's network, and check whether the host uses OpenZFS or UFS as its file system.
-Mount the install media as covered in man:mdconfig[8] when using the install ISO:
+[TIP]
+====
+The FreeBSD version running in the jail can not be newer than the version running in the host.
+====
-[source,shell]
-....
-# mount -t cd9660 /dev/`mdconfig -f cdimage.iso` /mnt
-# cd /mnt/usr/freebsd-dist/
-....
+[[host-configuration-jail-utility]]
+=== Jail Utility
-Extract the binaries from the tarballs on the install media into the declared destination.
-Minimally, only the base set needs to be extracted, but a complete install can be performed when preferred.
+The man:jail[8] utility manages jails.
-To install just the base system:
+To start jails when the system boots, run the following commands:
[source,shell]
....
-# tar -xf base.txz -C $DESTDIR
+# sysrc jail_enable="YES"
+# sysrc jail_parallel_start="YES"
....
-To install everything except the kernel:
+[TIP]
+====
+With `jail_parallel_start`, all configured jails will be started in the background.
+====
-[source,shell]
-....
-# for set in base ports; do tar -xf $set.txz -C $DESTDIR ; done
-....
+[[jails-networking]]
+=== Networking
-[[jails-install-source]]
-==== To build and install a Jail from source
+Networking for FreeBSD jails can be configured several different ways:
-The man:jail[8] manual page explains the procedure for building a jail:
+Host Networking Mode (IP Sharing)::
+In host networking mode, a jail shares the same networking stack as the host system.
+When a jail is created in host networking mode it uses the same network interface and IP address.
+This means that the jail doesn't have a separate IP address, and its network traffic is associated with the host's IP.
-[source,shell]
-....
-# setenv D /here/is/the/jail
-# mkdir -p $D <.>
-# cd /usr/src
-# make buildworld <.>
-# make installworld DESTDIR=$D <.>
-# make distribution DESTDIR=$D <.>
-# mount -t devfs devfs $D/dev <.>
-....
+Virtual Networks (VNET)::
+Virtual Networks are a feature of FreeBSD jails that offer more advanced and flexible networking solutions than a basic networking mode like host networking.
+VNET allows the creation of isolated network stacks for each jail, providing them with their own separate IP addresses, routing tables, and network interfaces.
+This offers a higher level of network isolation and allows jails to function as if they are running on separate virtual machines.
-<.> Selecting a location for a jail is the best starting point. This is where the jail will physically reside within the file system of the jail's host. A good choice can be [.filename]#/usr/jail/jailname#, where _jailname_ is the hostname identifying the jail. Usually, [.filename]#/usr/# has enough space for the jail file system, which for "complete" jails is, essentially, a replication of every file present in a default installation of the FreeBSD base system.
+The netgraph system::
+man:netgraph[4] is a versatile kernel framework for creating custom network configurations.
+It can be used to define how network traffic flows between jails and the host system and between different jails.
-<.> If you have already rebuilt your userland using `make world` or `make buildworld`, you can skip this step and install your existing userland into the new jail.
+[[host-configuration-directories]]
+=== Setting Up the Jail Directory Tree
-<.> This command will populate the directory subtree chosen as jail's physical location on the file system with the necessary binaries, libraries, manual pages and so on.
-<.> The `distribution` target for make installs every needed configuration file. In simple words, it installs every installable file of [.filename]#/usr/src/etc/# to the [.filename]#/etc# directory of the jail environment: [.filename]#$D/etc/#.
+There is no specific place to put the files for the jails.
-<.> Mounting the man:devfs[8] file system inside a jail is not required. On the other hand, any, or almost any application requires access to at least one device, depending on the purpose of the given application. It is very important to control access to devices from inside a jail, as improper settings could permit an attacker to do nasty things in the jail. Control over man:devfs[8] is managed through rulesets which are described in the man:devfs[8] and man:devfs.conf[5] manual pages.
+Some administrators use [.filename]#/jail#, others [.filename]#/usr/jail#, and still others [.filename]#/usr/local/jails#.
+In this chapter [.filename]#/usr/local/jails# will be used.
-=== Configuring the Host
+Apart from [.filename]#/usr/local/jails# other directories will be created:
-Once a jail is installed, it can be started by using the man:jail[8] utility.
-The man:jail[8] utility takes four mandatory arguments which are described in the <<jails-synopsis>>.
-Other arguments may be specified too, e.g., to run the jailed process with the credentials of a specific user.
-The `_command_` argument depends on the type of the jail; for a _virtual system_, [.filename]#/etc/rc# is a good choice, since it will replicate the startup sequence of a real FreeBSD system.
-For a _service_ jail, it depends on the service or application that will run within the jail.
+* [.filename]#media# will contain the compressed files of the downloaded userlands.
+* [.filename]#templates# will contain the templates when using Thin Jails.
+* [.filename]#containers# will contain the jails.
-Jails are often started at boot time and the FreeBSD [.filename]#rc# mechanism provides an easy way to do this.
+When using OpenZFS, execute the following commands to create datasets for these directories:
-[.procedure]
-* Configure jail parameters in [.filename]#jail.conf#:
-+
-[.programlisting]
+[source,shell]
....
-www {
- host.hostname = www.example.org; # Hostname
- ip4.addr = 192.168.0.10; # IP address of the jail
- path = "/usr/jail/www"; # Path to the jail
- devfs_ruleset = "www_ruleset"; # devfs ruleset
- mount.devfs; # Mount devfs inside the jail
- exec.start = "/bin/sh /etc/rc"; # Start command
- exec.stop = "/bin/sh /etc/rc.shutdown"; # Stop command
-}
+# zfs create -o mountpoint=/usr/local/jails zroot/jails
+# zfs create zroot/jails/media
+# zfs create zroot/jails/templates
+# zfs create zroot/jails/containers
....
-+
-Configure jails to start at boot time in [.filename]#rc.conf#:
-+
-[.programlisting]
-....
-jail_enable="YES" # Set to NO to disable starting of any jails
-....
-+
-The default startup of jails configured in man:jail.conf[5], will run the [.filename]#/etc/rc# script of the jail, which assumes the jail is a complete virtual system.
-For service jails, the default startup command of the jail should be changed, by setting the `exec.start` option appropriately.
-+
-[NOTE]
+[TIP]
====
-For a full list of available options, please see the man:jail.conf[5] manual page.
+In this case, `zroot` was used for the parent dataset, but other datasets could have been used.
====
-man:service[8] can be used to start or stop a jail by hand, if an entry for it exists in [.filename]#jail.conf#:
+When using UFS, execute the following commands to create the directories:
[source,shell]
....
-# service jail start www
-# service jail stop www
+# mkdir /usr/local/jails/
+# mkdir /usr/local/jails/media
+# mkdir /usr/local/jails/templates
+# mkdir /usr/local/jails/containers
....
-Jails can be shut down with man:jexec[8].
-Use man:jls[8] to identify the jail's `JID`, then use man:jexec[8] to run the shutdown script in that jail.
+[[jail-configuration-files]]
+=== Jail Configuration Files
-[source,shell]
+There are two ways to configure jails.
+
+The first one is to add an entry for each jail to the file [.filename]#/etc/jail.conf#.
+The other option is to create a file for each jail in the directory [.filename]#/etc/jail.conf.d/#.
+
+In case a host system has few jails, an entry for each jail can be added in the file [.filename]#/etc/jail.conf#.
+If the host system has many jails, it is a good idea to have one configuration file for each jail in the [.filename]#/etc/jail.conf.d/# directory.
+
+The files in [.filename]#/etc/jail.conf.d/# must have `.conf` as their extension and have to be included in [.filename]#/etc/jail.conf#:
+
+[.programlisting]
....
-# jls
- JID IP Address Hostname Path
- 3 192.168.0.10 www /usr/jail/www
-# jexec 3 /etc/rc.shutdown
+.include "/etc/jail.conf.d/*.conf";
....
-More information about this can be found in the man:jail[8] manual page.
+A typical jail entry would look like this:
+
+[.programlisting]
+....
+jailname { <.>
+ # STARTUP/LOGGING
+ exec.start = "/bin/sh /etc/rc"; <.>
+ exec.stop = "/bin/sh /etc/rc.shutdown"; <.>
+ exec.consolelog = "/var/log/jail_console_${name}.log"; <.>
+
+ # PERMISSIONS
+ allow.raw_sockets; <.>
+ exec.clean; <.>
+ mount.devfs; <.>
+
+ # HOSTNAME/PATH
+ host.hostname = "${name}"; <.>
+ path = "/usr/local/jails/containers/${name}"; <.>
+
+ # NETWORK
+ ip4.addr = 192.168.1.151; <.>
+ ip6.addr = ::ffff:c0a8:197 <.>
+ interface = em0; <.>
+}
+....
-[[jails-tuning]]
-== Fine Tuning and Administration
+<.> `jailname` - Name of the jail.
+<.> `exec.start` - Command(s) to run in the jail environment when a jail is created. A typical command to run is "/bin/sh /etc/rc".
+<.> `exec.stop` - Command(s) to run in the jail environment before a jail is removed. A typical command to run is "/bin/sh /etc/rc.shutdown".
+<.> `exec.consolelog` - A file to direct command output (stdout and stderr) to.
+<.> `allow.raw_sockets` - Allow creating raw sockets inside the jail. Setting this parameter allows utilities like man:ping[8] and man:traceroute[8] to operate inside the jail.
+<.> `exec.clean` - Run commands in a clean environment.
+<.> `mount.devfs` - Mount a man:devfs[5] filesystem on the chrooted [.filename]#/dev# directory, and apply the ruleset in the devfs_ruleset parameter to restrict the devices visible inside the jail.
+<.> `host.hostname` - The hostname of the jail.
+<.> `path` - The directory which is to be the root of the jail. Any commands that are run inside the jail, either by jail or from man:jexec[8], are run from this directory.
+<.> `ip4.addr` - IPv4 address. There are two configuration possibilities for IPv4. The first is to establish an IP or a list of IPs as has been done in the example. The other is to use `ip4` instead and set the `inherit` value to inherit the host's IP address.
+<.> `ip6.addr` - IPv6 address. There are two configuration possibilities for IPv6. The first is to establish an IP or a list of IPs as has been done in the example. The other is to use `ip6` instead and set the `inherit` value to inherit the host's IP address.
+<.> `interface` - A network interface to add the jail's IP addresses. Usually the host interface.
-There are several options which can be set for any jail, and various ways of combining a host FreeBSD system with jails, to produce higher level applications.
-This section presents:
+More information about configuration variables can be found in man:jail[8] and man:jail.conf[5].
-* Some of the options available for tuning the behavior and security restrictions implemented by a jail installation.
-* Some of the high-level applications for jail management, which are available through the FreeBSD Ports Collection, and can be used to implement overall jail-based solutions.
+[[classic-jail]]
+== Classic Jail (Thick Jail)
-[[jails-tuning-utilities]]
-=== System Tools for Jail Tuning in FreeBSD
+These jails resemble a real FreeBSD system.
+They can be managed more or less like a normal host system and updated independently.
-Fine tuning of a jail's configuration is mostly done by setting man:sysctl[8] variables.
-A special subtree of sysctl exists as a basis for organizing all the relevant options: the `security.jail.*` hierarchy of FreeBSD kernel options.
-Here is a list of the main jail-related sysctls, complete with their default value.
-Names should be self-explanatory, but for more information about them, please refer to the man:jail[8] and man:sysctl[8] manual pages.
+[[creating-classic-jail]]
+=== Creating a Classic Jail
-* `security.jail.set_hostname_allowed: 1`
-* `security.jail.socket_unixiproute_only: 1`
-* `security.jail.sysvipc_allowed: 0`
-* `security.jail.enforce_statfs: 2`
-* `security.jail.allow_raw_sockets: 0`
-* `security.jail.chflags_allowed: 0`
-* `security.jail.jailed: 0`
+In principle, a jail only needs a hostname, a root directory, an IP address, and a userland.
-These variables can be used by the system administrator of the _host system_ to add or remove some of the limitations imposed by default on the `root` user.
-Note that there are some limitations which cannot be removed.
-The `root` user is not allowed to mount or unmount file systems from within a man:jail[8].
-The `root` inside a jail may not load or unload man:devfs[8] rulesets, set firewall rules, or do many other administrative tasks which require modifications of in-kernel data, such as setting the `securelevel` of the kernel.
+The userland for the jail can be obtained from the official FreeBSD download servers.
-The base system of FreeBSD contains a basic set of tools for viewing information about the active jails, and attaching to a jail to run administrative commands.
-The man:jls[8] and man:jexec[8] commands are part of the base FreeBSD system, and can be used to perform the following simple tasks:
+Execute the following command to download the userland:
-* Print a list of active jails and their corresponding jail identifier (JID), IP address, hostname and path.
-* Attach to a running jail, from its host system, and run a command inside the jail or perform administrative tasks inside the jail itself. This is especially useful when the `root` user wants to cleanly shut down a jail. The man:jexec[8] utility can also be used to start a shell in a jail to do administration in it; for example:
-+
[source,shell]
....
-# jexec 1 tcsh
+# fetch https://download.freebsd.org/ftp/releases/amd64/amd64/13.2-RELEASE/base.txz -o /usr/local/jails/media/13.2-RELEASE-base.txz
....
-[[jails-tuning-admintools]]
-=== High-Level Administrative Tools in the FreeBSD Ports Collection
-
-Among the many third-party utilities for jail administration, one of the most complete and useful is package:sysutils/ezjail[].
-It is a set of scripts that contribute to man:jail[8] management.
-Please refer to <<jails-ezjail,the handbook section on ezjail>> for more information.
-
-[[jails-updating]]
-=== Keeping Jails Patched and up to Date
-
-Jails should be kept up to date from the host operating system as attempting to patch userland from within the jail may likely fail as the default behavior in FreeBSD is to disallow the use of man:chflags[1] in a jail which prevents the replacement of some files.
-It is possible to change this behavior but it is recommended to use man:freebsd-update[8] to maintain jails instead.
-Use `-b` to specify the path of the jail to be updated.
+Once the download is complete, it will be necessary to extract the contents into the jail directory.
-To update the jail to the latest patch release of the version of FreeBSD it is already running, then execute the following commands on the host:
+Execute the following commands to extract the userland into the jail's directory:
[source,shell]
....
-# freebsd-update -b /here/is/the/jail fetch
-# freebsd-update -b /here/is/the/jail install
+# mkdir -p /usr/local/jails/containers/classic
+# tar -xf /usr/local/jails/media/13.2-RELEASE-base.txz -C /usr/local/jails/containers/classic --unlink
....
-To upgrade the jail to a new major or minor version, first upgrade the host system as described in crossref:cutting-edge[freebsdupdate-upgrade,“Performing Major and Minor Version Upgrades”].
-Once the host has been upgraded and rebooted, the jail can then be upgraded.
-For example to upgrade from 12.0-RELEASE to 12.1-RELEASE, on the host run:
+With the userland extracted in the jail directory, it will be necessary to copy the timezone and DNS server files:
[source,shell]
....
-# freebsd-update -b /here/is/the/jail --currently-running 12.0-RELEASE -r 12.1-RELEASE upgrade
-# freebsd-update -b /here/is/the/jail install
-# service jail restart myjail
-# freebsd-update -b /here/is/the/jail install
+# cp /etc/resolv.conf /usr/local/jails/containers/classic/etc/resolv.conf
+# cp /etc/localtime /usr/local/jails/containers/classic/etc/localtime
....
-Then, if it was a major version upgrade, reinstall all installed packages and restart the jail again.
-This is required because the ABI version changes when upgrading between major versions of FreeBSD.
-From the host:
+With the files copied, the next thing to do is update to the latest patch level by executing the following command:
[source,shell]
....
-# pkg -j myjail upgrade -f
-# service jail restart myjail
+# freebsd-update -b /usr/local/jails/containers/classic/ fetch install
....
-[[jails-application]]
-== Updating Multiple Jails
+The last step is to configure the jail.
+It will be necessary to add an entry to the configuration file [.filename]#/etc/jail.conf# or in [.filename]#jail.conf.d# with the parameters of the jail.
-The management of multiple jails can become problematic because every jail has to be rebuilt from scratch whenever it is upgraded.
-This can be time consuming and tedious if a lot of jails are created and manually updated.
+An example would be the following:
-This section demonstrates one method to resolve this issue by safely sharing as much as is possible between jails using read-only man:mount_nullfs[8] mounts, so that updating is simpler.
-This makes it more attractive to put single services, such as HTTP, DNS, and SMTP, into individual jails.
-Additionally, it provides a simple way to add, remove, and upgrade jails.
+[.programlisting]
+....
+classic {
+ # STARTUP/LOGGING
+ exec.start = "/bin/sh /etc/rc";
+ exec.stop = "/bin/sh /etc/rc.shutdown";
+ exec.consolelog = "/var/log/jail_console_${name}.log";
-[NOTE]
-====
-Simpler solutions exist, such as ezjail, which provides an easier method of administering FreeBSD jails but is less versatile than this setup.
-ezjail is covered in more detail in <<jails-ezjail>>.
-====
+ # PERMISSIONS
+ allow.raw_sockets;
+ exec.clean;
+ mount.devfs;
-The goals of the setup described in this section are:
+ # HOSTNAME/PATH
+ host.hostname = "${name}";
+ path = "/usr/local/jails/containers/${name}";
+
+ # NETWORK
+ ip4.addr = 192.168.1.151;
+ interface = em0;
+}
+....
-* Create a simple and easy to understand jail structure that does not require running a full installworld on each and every jail.
-* Make it easy to add new jails or remove existing ones.
-* Make it easy to update or upgrade existing jails.
-* Make it possible to run a customized FreeBSD branch.
-* Be paranoid about security, reducing as much as possible the possibility of compromise.
-* Save space and inodes, as much as possible.
+Execute the following command to start the jail:
-This design relies on a single, read-only master template which is mounted into each jail and one read-write device per jail.
-A device can be a separate physical disc, a partition, or a vnode backed memory device.
-This example uses read-write nullfs mounts.
+[source,shell]
+....
+# service jail start classic
+....
-The file system layout is as follows:
+More information on how to manage jails can be found in the section <<jail-management>>.
-* The jails are based under the [.filename]#/home# partition.
-* Each jail will be mounted under the [.filename]#/home/j# directory.
-* The template for each jail and the read-only partition for all of the jails is [.filename]#/home/j/mroot#.
-* A blank directory will be created for each jail under the [.filename]#/home/j# directory.
-* Each jail will have a [.filename]#/s# directory that will be linked to the read-write portion of the system.
-* Each jail will have its own read-write system that is based upon [.filename]#/home/j/skel#.
-* The read-write portion of each jail will be created in [.filename]#/home/js#.
+[[thin-jail]]
+== Thin Jails
-[[jails-service-jails-template]]
-=== Creating the Template
+Although Thin Jails use the same technology as Thick Jails, the creation procedure is different.
+Thin jails can be created using OpenZFS snapshots or using templates and NullFS.
+The use of OpenZFS snapshots and templates using NullFS have certain advantages over classic jails,
+such as being able to create them faster from snapshots or being able to update multiple jails using NullFS.
-This section describes the steps needed to create the master template.
+[[creating-thin-jail-openzfs-snapshots]]
+=== Creating a Thin Jail Using OpenZFS Snapshots
-It is recommended to first update the host FreeBSD system to the latest -RELEASE branch using the instructions in crossref:cutting-edge[makeworld,“Updating FreeBSD from Source”].
-Additionally, this template uses the package:sysutils/cpdup[] package or port and portsnap will be used to download the FreeBSD Ports Collection.
+Due to the good integration between FreeBSD and OpenZFS it is very easy to create new Thin Jails using OpenZFS Snapshots.
+
+To create a Thin Jail using OpenZFS Snapshots the first step is to create a template.
+
+Templates will only be used to create new jails.
+For this reason they are created in "read-only" mode so that jails are created with an immutable base.
+
+To create the dataset for the template, execute the following command:
-[.procedure]
-. First, create a directory structure for the read-only file system which will contain the FreeBSD binaries for the jails. Then, change directory to the FreeBSD source tree and install the read-only file system to the jail template:
-+
[source,shell]
....
-# mkdir /home/j /home/j/mroot
-# cd /usr/src
-# make installworld DESTDIR=/home/j/mroot
+# zfs create -p zroot/jails/templates/13.2-RELEASE
....
-. Next, prepare a FreeBSD Ports Collection for the jails as well as a FreeBSD source tree, which is required for mergemaster:
-+
+Then execute the following command to download the userland:
+
[source,shell]
....
-# cd /home/j/mroot
-# mkdir usr/ports
-# portsnap -p /home/j/mroot/usr/ports fetch extract
-# cpdup /usr/src /home/j/mroot/usr/src
+# fetch https://download.freebsd.org/ftp/releases/amd64/amd64/13.2-RELEASE/base.txz -o /usr/local/jails/media/13.2-RELEASE-base.txz
....
-. Create a skeleton for the read-write portion of the system:
-+
+Once the download is complete, it will be necessary to extract the contents in the template directory by executing the following command:
+
[source,shell]
....
-# mkdir /home/j/skel /home/j/skel/home /home/j/skel/usr-X11R6 /home/j/skel/distfiles
-# mv etc /home/j/skel
-# mv usr/local /home/j/skel/usr-local
-# mv tmp /home/j/skel
-# mv var /home/j/skel
-# mv root /home/j/skel
+# tar -xf /usr/local/jails/media/13.2-RELEASE-base.txz -C /usr/local/jails/templates/13.2-RELEASE --unlink
....
-. Use mergemaster to install missing configuration files. Then, remove the extra directories that mergemaster creates:
-+
+With the userland extracted in the templates directory, it will be necessary to copy the timezone and DNS server files to the template directory by executing the following command:
+
[source,shell]
....
-# mergemaster -t /home/j/skel/var/tmp/temproot -D /home/j/skel -i
-# cd /home/j/skel
-# rm -R bin boot lib libexec mnt proc rescue sbin sys usr dev
+# cp /etc/resolv.conf /usr/local/jails/templates/13.2-RELEASE/etc/resolv.conf
+# cp /etc/localtime /usr/local/jails/templates/13.2-RELEASE/etc/localtime
....
-. Now, symlink the read-write file system to the read-only file system. Ensure that the symlinks are created in the correct [.filename]#s/# locations as the creation of directories in the wrong locations will cause the installation to fail.
-+
+The next thing to do is update to the latest patch level by executing the following command:
+
[source,shell]
....
-# cd /home/j/mroot
-# mkdir s
-# ln -s s/etc etc
-# ln -s s/home home
-# ln -s s/root root
-# ln -s ../s/usr-local usr/local
-# ln -s ../s/usr-X11R6 usr/X11R6
-# ln -s ../../s/distfiles usr/ports/distfiles
-# ln -s s/tmp tmp
-# ln -s s/var var
+# freebsd-update -b /usr/local/jails/templates/13.2-RELEASE/ fetch install
....
-. As a last step, create a generic [.filename]#/home/j/skel/etc/make.conf# containing this line:
-+
-[.programlisting]
+Once the update is finished, the template is ready.
+
+To create an OpenZFS Snapshot from the template, execute the following command:
+
+[source,shell]
....
-WRKDIRPREFIX?= /s/portbuild
+# zfs snapshot zroot/jails/templates/13.2-RELEASE@base
....
-+
-This makes it possible to compile FreeBSD ports inside each jail.
-Remember that the ports directory is part of the read-only system.
-The custom path for `WRKDIRPREFIX` allows builds to be done in the read-write portion of every jail.
-[[jails-service-jails-creating]]
-=== Creating Jails
+Once the OpenZFS Snapshot has been created, infinite jails can be created using the OpenZFS clone function.
-The jail template can now be used to setup and configure the jails in [.filename]#/etc/rc.conf#.
-This example demonstrates the creation of 3 jails: `NS`, `MAIL` and `WWW`.
+To create a Thin Jail named `thinjail`, execute the following command:
-[.procedure]
-. Add the following lines to [.filename]#/etc/fstab#, so that the read-only template for the jails and the read-write space will be available in the respective jails:
-+
-[.programlisting]
-....
-/home/j/mroot /home/j/ns nullfs ro 0 0
-/home/j/mroot /home/j/mail nullfs ro 0 0
-/home/j/mroot /home/j/www nullfs ro 0 0
-/home/js/ns /home/j/ns/s nullfs rw 0 0
-/home/js/mail /home/j/mail/s nullfs rw 0 0
-/home/js/www /home/j/www/s nullfs rw 0 0
-....
-+
-To prevent fsck from checking nullfs mounts during boot and dump from backing up the read-only nullfs mounts of the jails, the last two columns are both set to `0`.
-. Configure the jails in [.filename]#/etc/rc.conf#:
-+
-[.programlisting]
-....
-jail_enable="YES"
-jail_set_hostname_allow="NO"
-jail_list="ns mail www"
-jail_ns_hostname="ns.example.org"
-jail_ns_ip="192.168.3.17"
-jail_ns_rootdir="/usr/home/j/ns"
-jail_ns_devfs_enable="YES"
-jail_mail_hostname="mail.example.org"
-jail_mail_ip="192.168.3.18"
-jail_mail_rootdir="/usr/home/j/mail"
-jail_mail_devfs_enable="YES"
-jail_www_hostname="www.example.org"
-jail_www_ip="62.123.43.14"
-jail_www_rootdir="/usr/home/j/www"
-jail_www_devfs_enable="YES"
-....
-+
-The `jail__name__rootdir` variable is set to [.filename]#/usr/home# instead of [.filename]#/home# because the physical path of [.filename]#/home# on a default FreeBSD installation is [.filename]#/usr/home#.
-The `jail__name__rootdir` variable must _not_ be set to a path which includes a symbolic link, otherwise the jails will refuse to start.
-. Create the required mount points for the read-only file system of each jail:
-+
[source,shell]
....
-# mkdir /home/j/ns /home/j/mail /home/j/www
+# zfs clone zroot/jails/templates/13.2-RELEASE@base zroot/jails/containers/thinjail
....
-. Install the read-write template into each jail using package:sysutils/cpdup[]:
-+
-[source,shell]
+The last step is to configure the jail.
+It will be necessary to add an entry to the configuration file [.filename]#/etc/jail.conf# or in [.filename]#jail.conf.d# with the parameters of the jail.
+
+An example would be the following:
+
+[.programlisting]
....
-# mkdir /home/js
-# cpdup /home/j/skel /home/js/ns
-# cpdup /home/j/skel /home/js/mail
-# cpdup /home/j/skel /home/js/www
+thinjail {
+ # STARTUP/LOGGING
+ exec.start = "/bin/sh /etc/rc";
+ exec.stop = "/bin/sh /etc/rc.shutdown";
+ exec.consolelog = "/var/log/jail_console_${name}.log";
+
+ # PERMISSIONS
+ allow.raw_sockets;
+ exec.clean;
+ mount.devfs;
+
+ # HOSTNAME/PATH
+ host.hostname = "${name}";
+ path = "/usr/local/jails/containers/${name}";
+
+ # NETWORK
+ ip4 = inherit;
+ interface = em0;
+}
....
-. In this phase, the jails are built and prepared to run. First, mount the required file systems for each jail, and then start them:
-+
+Execute the following command to start the jail:
+
[source,shell]
....
-# mount -a
-# service jail start
+# service jail start thinjail
....
-The jails should be running now.
-To check if they have started correctly, use `jls`.
-Its output should be similar to the following:
+More information on how to manage jails can be found in the section <<jail-management>>.
+
+[[creating-thin-jail-nullfs]]
+=== Creating a Thin Jail Using NullFS
+
+A jail can be created with reduced duplication of system files by using the Thin Jail technique and using NullFS to selectively share specific directories from the host system into the jail.
+
+The first step is to create the dataset to save the template, execute the following command if using OpenZFS:
[source,shell]
....
-# jls
- JID IP Address Hostname Path
- 3 192.168.3.17 ns.example.org /home/j/ns
- 2 192.168.3.18 mail.example.org /home/j/mail
- 1 62.123.43.14 www.example.org /home/j/www
+# zfs create -p zroot/jails/templates/13.2-RELEASE-base
....
-At this point, it should be possible to log onto each jail, add new users, or configure daemons.
-The `JID` column indicates the jail identification number of each running jail.
-Use the following command to perform administrative tasks in the jail whose JID is `3`:
+Or this one if using UFS:
[source,shell]
....
-# jexec 3 tcsh
+# mkdir /usr/local/jails/templates/13.2-RELEASE-base
....
-[[jails-service-jails-upgrading]]
-=== Upgrading
-
-The design of this setup provides an easy way to upgrade existing jails while minimizing their downtime.
-Also, it provides a way to roll back to the older version should a problem occur.
+Then execute the following command to download the userland:
-[.procedure]
-. The first step is to upgrade the host system. Then, create a new temporary read-only template in [.filename]#/home/j/mroot2#.
-+
[source,shell]
....
-# mkdir /home/j/mroot2
-# cd /usr/src
-# make installworld DESTDIR=/home/j/mroot2
-# cd /home/j/mroot2
-# cpdup /usr/src usr/src
-# mkdir s
+# fetch https://download.freebsd.org/ftp/releases/amd64/amd64/13.2-RELEASE/base.txz -o /usr/local/jails/media/13.2-RELEASE-base.txz
....
-+
-The `installworld` creates a few unnecessary directories, which should be removed:
-+
+
+Once the download is complete, it will be necessary to extract the contents in the template directory by executing the following command:
+
[source,shell]
....
-# chflags -R 0 var
-# rm -R etc var root usr/local tmp
+# tar -xf /usr/local/jails/media/13.2-RELEASE-base.txz -C /usr/local/jails/templates/13.2-RELEASE-base --unlink
....
-. Recreate the read-write symlinks for the master file system:
-+
+Once the userland is extracted in the templates directory, it will be necessary to copy the timezone and DNS server files to the template directory by executing the following command:
+
[source,shell]
....
-# ln -s s/etc etc
-# ln -s s/root root
-# ln -s s/home home
-# ln -s ../s/usr-local usr/local
-# ln -s ../s/usr-X11R6 usr/X11R6
-# ln -s s/tmp tmp
-# ln -s s/var var
+# cp /etc/resolv.conf /usr/local/jails/templates/13.2-RELEASE-base/etc/resolv.conf
+# cp /etc/localtime /usr/local/jails/templates/13.2-RELEASE-base/etc/localtime
....
-. Next, stop the jails:
-+
+With the files moved to the template, the next thing to do is update to the latest patch level by executing the following command:
+
[source,shell]
....
-# service jail stop
+# freebsd-update -b /usr/local/jails/templates/13.2-RELEASE-base/ fetch install
....
-. Unmount the original file systems as the read-write systems are attached to the read-only system ([.filename]#/s#):
-+
+In addition to the base template, it is also necessary to create a directory where the `skeleton` will be located.
+Some directories will be copied from the template to the `skeleton`.
+
+Execute the following command to create the dataset for the `skeleton` in case of using OpenZFS:
+
[source,shell]
....
-# umount /home/j/ns/s
-# umount /home/j/ns
-# umount /home/j/mail/s
-# umount /home/j/mail
-# umount /home/j/www/s
-# umount /home/j/www
+# zfs create -p zroot/jails/templates/13.2-RELEASE-skeleton
....
-. Move the old read-only file system and replace it with the new one. This will serve as a backup and archive of the old read-only file system should something go wrong. The naming convention used here corresponds to when a new read-only file system has been created. Move the original FreeBSD Ports Collection over to the new file system to save some space and inodes:
-+
+Or this one in case of using UFS:
+
[source,shell]
....
-# cd /home/j
-# mv mroot mroot.20060601
-# mv mroot2 mroot
-# mv mroot.20060601/usr/ports mroot/usr
+# mkdir /usr/local/jails/templates/13.2-RELEASE-skeleton
....
-. At this point the new read-only template is ready, so the only remaining task is to remount the file systems and start the jails:
-+
+Then create the `skeleton` directories.
+The `skeleton` directories will hold the local directories of the jails.
+
+Execute the following commands to create the directories:
+
[source,shell]
....
-# mount -a
-# service jail start
+# mkdir -p /usr/local/jails/templates/13.2-RELEASE-skeleton/home
+# mkdir -p /usr/local/jails/templates/13.2-RELEASE-skeleton/usr
+# mv /usr/local/jails/templates/13.2-RELEASE-base/etc /usr/local/jails/templates/13.2-RELEASE-skeleton/etc
+# mv /usr/local/jails/templates/13.2-RELEASE-base/usr/local /usr/local/jails/templates/13.2-RELEASE-skeleton/usr/local
+# mv /usr/local/jails/templates/13.2-RELEASE-base/tmp /usr/local/jails/templates/13.2-RELEASE-skeleton/tmp
+# mv /usr/local/jails/templates/13.2-RELEASE-base/var /usr/local/jails/templates/13.2-RELEASE-skeleton/var
+# mv /usr/local/jails/templates/13.2-RELEASE-base/root /usr/local/jails/templates/13.2-RELEASE-skeleton/root
....
-Use `jls` to check if the jails started correctly.
-Run `mergemaster` in each jail to update the configuration files.
-
-[[jails-ezjail]]
-== Managing Jails with ezjail
-
-Creating and managing multiple jails can quickly become tedious and error-prone.
-Dirk Engling's ezjail automates and greatly simplifies many jail tasks.
-A _basejail_ is created as a template.
-Additional jails use man:mount_nullfs[8] to share many of the basejail directories without using additional disk space.
-Each additional jail takes only a few megabytes of disk space before applications are installed.
-Upgrading the copy of the userland in the basejail automatically upgrades all of the other jails.
+The next step is to create the symlinks to the `skeleton` by executing the following commands:
-Additional benefits and features are described in detail on the ezjail web site, https://erdgeist.org/arts/software/ezjail/[].
+[source,shell]
+....
+# cd /usr/local/jails/templates/13.2-RELEASE-base/
+# mkdir skeleton
+# ln -s skeleton/etc etc
+# ln -s skeleton/home home
+# ln -s skeleton/root root
+# ln -s ../skeleton/usr/local usr/local
+# ln -s skeleton/tmp tmp
+# ln -s skeleton/var var
+....
-[[jails-ezjail-install]]
-=== Installing ezjail
+With the `skeleton` ready, it will be necessary to copy the data to the jail directory.
-Installing ezjail consists of adding a loopback interface for use in jails, installing the port or package, and enabling the service.
+In case of using OpenZFS, OpenZFS snapshots can be used to easily create as many jails as necessary by executing the following commands:
-[[jails-ezjail-install-procedure]]
-[.procedure]
-. To keep jail loopback traffic off the host's loopback network interface `lo0`, a second loopback interface is created by adding an entry to [.filename]#/etc/rc.conf#:
-+
-[.programlisting]
-....
-cloned_interfaces="lo1"
-....
-+
-The second loopback interface `lo1` will be created when the system starts.
-It can also be created manually without a restart:
-+
-[source,shell]
-....
-# service netif cloneup
-Created clone interfaces: lo1.
-....
-+
-Jails can be allowed to use aliases of this secondary loopback interface without interfering with the host.
-+
-Inside a jail, access to the loopback address `127.0.0.1` is redirected to the first IP address assigned to the jail.
-To make the jail loopback correspond with the new `lo1` interface, that interface must be specified first in the list of interfaces and IP addresses given when creating a new jail.
-+
-Give each jail a unique loopback address in the `127.0.0.0/8` netblock.
-. Install package:sysutils/ezjail[]:
-+
[source,shell]
....
-# cd /usr/ports/sysutils/ezjail
-# make install clean
+# zfs snapshot zroot/jails/templates/13.2-RELEASE-skeleton@base
+# zfs clone zroot/jails/templates/13.2-RELEASE-skeleton@base zroot/jails/containers/thinjail
....
-. Enable ezjail by adding this line to [.filename]#/etc/rc.conf#:
-+
-[.programlisting]
+In case of using UFS the man:cp[1] program can be used by executing the following commands:
+
+[source,shell]
....
-ezjail_enable="YES"
+# mkdir /usr/local/jails/containers/thinjail
+# cp -R /usr/local/jails/templates/13.2-RELEASE-skeleton /usr/local/jails/containers/thinjail
....
-. The service will automatically start on system boot. It can be started immediately for the current session:
-+
+Then create the directory in which the base template and the skeleton will be mounted:
+
[source,shell]
....
-# service ezjail start
+# mkdir -p /usr/local/jails/thinjail-nullfs-base
....
-[[jails-ezjail-initialsetup]]
-=== Initial Setup
+Add a jail entry in [.filename]#/etc/jail.conf# or a file in [.filename]#jail.conf.d# as follows:
-With ezjail installed, the basejail directory structure can be created and populated.
-This step is only needed once on the jail host computer.
+[.programlisting]
+....
+thinjail {
+ # STARTUP/LOGGING
+ exec.start = "/bin/sh /etc/rc";
+ exec.stop = "/bin/sh /etc/rc.shutdown";
+ exec.consolelog = "/var/log/jail_console_${name}.log";
-In both of these examples, `-p` causes the ports tree to be retrieved with man:portsnap[8] into the basejail.
-That single copy of the ports directory will be shared by all the jails.
-Using a separate copy of the ports directory for jails isolates them from the host.
-The ezjailFAQ explains in more detail: http://erdgeist.org/arts/software/ezjail/#FAQ[].
+ # PERMISSIONS
+ allow.raw_sockets;
+ exec.clean;
+ mount.devfs;
-[[jails-ezjail-initialsetup-procedure]]
-[.procedure]
+ # HOSTNAME/PATH
+ host.hostname = "${name}";
+ path = "/usr/local/jails/${name}-nullfs-base";
-. To Populate the Jail with FreeBSD-RELEASE
-+
-For a basejail based on the FreeBSD RELEASE matching that of the host computer, use `install`.
-For example, on a host computer running FreeBSD 10-STABLE, the latest RELEASE version of FreeBSD -10 will be installed in the jail):
-+
-[source,shell]
-....
-# ezjail-admin install -p
+ # NETWORK
+ ip4.addr = 192.168.1.153;
+ interface = em0;
+
+ # MOUNT
+ mount.fstab = "/usr/local/jails/${name}-nullfs-base.fstab";
+}
....
-. To Populate the Jail with `installworld`
-+
-The basejail can be installed from binaries created by `buildworld` on the host with `ezjail-admin update`.
-+
-In this example, FreeBSD 10-STABLE has been built from source.
-The jail directories are created.
-Then `installworld` is executed, installing the host's [.filename]#/usr/obj# into the basejail.
-+
-[source,shell]
+Then the create the [.filename]#/usr/local/jails/thinjail-nullfs-base.fstab# file as follows:
+
+[.programlisting]
....
-# ezjail-admin update -i -p
+/usr/local/jails/templates/13.2-RELEASE-base /usr/local/jails/thinjail-nullfs-base/ nullfs ro 0 0
+/usr/local/jails/containers/thinjail /usr/local/jails/thinjail-nullfs-base/skeleton nullfs rw 0 0
....
-+
-The host's [.filename]#/usr/src# is used by default.
-A different source directory on the host can be specified with `-s` and a path, or set with `ezjail_sourcetree` in [.filename]#/usr/local/etc/ezjail.conf#.
-
-[TIP]
-====
-The basejail's ports tree is shared by other jails.
-However, downloaded distfiles are stored in the jail that downloaded them.
-By default, these files are stored in [.filename]#/var/ports/distfiles# within each jail.
-[.filename]#/var/ports# inside each jail is also used as a work directory when building ports.
-====
-[TIP]
-====
-The FTP protocol is used by default to download packages for the installation of the basejail.
-Firewall or proxy configurations can prevent or interfere with FTP transfers.
-The HTTP protocol works differently and avoids these problems.
-It can be chosen by specifying a full URL for a particular download mirror in [.filename]#/usr/local/etc/ezjail.conf#:
+Execute the following command to start the jail:
-[.programlisting]
+[source,shell]
....
-ezjail_ftphost=http://ftp.FreeBSD.org
+# service jail start thinjail
....
-See the crossref:mirrors[mirrors,mirrors] section for a list of sites.
-====
+[[creating-vnet-jail]]
+=== Creating a VNET Jail
-[[jails-ezjail-create]]
-=== Creating and Starting a New Jail
+FreeBSD VNET Jails have their own distinct networking stack, including interfaces, IP addresses, routing tables, and firewall rules.
-New jails are created with `ezjail-admin create`.
-In these examples, the `lo1` loopback interface is used as described above.
+The first step to create a VNET jail is to create the man:bridge[4] by executing the following command:
-[[jails-ezjail-create-steps]]
-[.procedure]
-.Procedure: Create and Start a New Jail
-. Create the jail, specifying a name and the loopback and network interfaces to use, along with their IP addresses. In this example, the jail is named `dnsjail`.
-+
[source,shell]
....
-# ezjail-admin create dnsjail 'lo1|127.0.1.1,em0|192.168.1.50'
+# ifconfig bridge create
....
-+
-[TIP]
-====
-Most network services run in jails without problems.
-A few network services, most notably man:ping[8], use _raw network sockets_.
-In jails, raw network sockets are disabled by default for security.
-Services that require them will not work.
-Occasionally, a jail genuinely needs raw sockets.
-For example, network monitoring applications often use man:ping[8] to check the availability of other computers.
-When raw network sockets are actually needed in a jail, they can be enabled by editing the ezjail configuration file for the individual jail, [.filename]#/usr/local/etc/ezjail/jailname#.
-Modify the `parameters` entry:
+The output should be similar to the following:
[.programlisting]
....
-export jail_jailname_parameters="allow.raw_sockets=1"
+bridge0
....
-Do not enable raw network sockets unless services in the jail actually require them.
-====
+With the `bridge` created, it will be necessary to attach it to the `em0` interface by executing the following command:
-. Start the jail:
-+
[source,shell]
....
-# ezjail-admin start dnsjail
+# ifconfig bridge0 addm em0
....
-. Use a console on the jail:
-+
-[source,shell]
+To make this setting persist across reboots, add the following lines to [.filename]#/etc/rc.conf#:
+
+[.programlisting]
....
-# ezjail-admin console dnsjail
+defaultrouter="192.168.1.1"
+cloned_interfaces="bridge0"
+ifconfig_bridge0="inet 192.168.1.150/24 addm em0 up"
....
-The jail is operating and additional configuration can be completed.
-Typical settings added at this point include:
+The next step is to create the jail as indicated above.
-[.procedure]
-. Set the `root` Password
-+
-Connect to the jail and set the `root` user's password:
-+
-[source,shell]
-....
-# ezjail-admin console dnsjail
-# passwd
-Changing local password for root
-New Password:
-Retype New Password:
-....
-
-. Time Zone Configuration
-+
-The jail's time zone can be set with man:tzsetup[8].
-To avoid spurious error messages, the man:adjkerntz[8] entry in [.filename]#/etc/crontab# can be commented or removed.
-This job attempts to update the computer's hardware clock with time zone changes, but jails are not allowed to access that hardware.
-. DNS Servers
-+
-Enter domain name server lines in [.filename]#/etc/resolv.conf# so DNS works in the jail.
-. Edit [.filename]#/etc/hosts#
-+
-Change the address and add the jail name to the `localhost` entries in [.filename]#/etc/hosts#.
-. Configure [.filename]#/etc/rc.conf#
-+
-Enter configuration settings in [.filename]#/etc/rc.conf#.
-This is much like configuring a full computer.
-The host name and IP address are not set here.
-Those values are already provided by the jail configuration.
-
-With the jail configured, the applications for which the jail was created can be installed.
+Either the <<classic-jail>> procedure and the <<thin-jail>> procedure can be used.
+The only thing that will change is the configuration in the [.filename]#/etc/jail.conf# file.
-[TIP]
-====
-Some ports must be built with special options to be used in a jail.
-For example, both of the network monitoring plugin packages package:net-mgmt/nagios-plugins[] and package:net-mgmt/monitoring-plugins[] have a `JAIL` option which must be enabled for them to work correctly inside a jail.
-====
+The path [.filename]#/usr/local/jails/containers/vnet# will be used as an example for the created jail.
-[[jails-ezjail-update]]
-=== Updating Jails
+The following is an example configuration for a VNET jail:
-[[jails-ezjail-update-os]]
-==== Updating the Operating System
+[.programlisting]
+....
+vnet {
+ # STARTUP/LOGGING
+ exec.start = "/bin/sh /etc/rc";
+ exec.stop = "/bin/sh /etc/rc.shutdown";
+ exec.consolelog = "/var/log/jail_console_${name}.log";
+
+ # PERMISSIONS
+ allow.raw_sockets;
+ exec.clean;
+ mount.devfs;
+ devfs_ruleset = 5;
+
+ # PATH/HOSTNAME
+ path = "/usr/local/jails/containers/${name}";
+ host.hostname = "${name}";
+
+ # VNET/VIMAGE
+ vnet;
+ vnet.interface = "${epair}b";
+
+ # NETWORKS/INTERFACES
+ $id = "154"; <.>
+ $ip = "192.168.1.${id}/24";
+ $gateway = "192.168.1.1";
+ $bridge = "bridge0"; <.>
+ $epair = "epair${id}";
+
+ # ADD TO bridge INTERFACE
+ exec.prestart += "ifconfig ${epair} create up";
+ exec.prestart += "ifconfig ${epair}a up descr jail:${name}";
+ exec.prestart += "ifconfig ${bridge} addm ${epair}a up";
+ exec.start += "ifconfig ${epair}b ${ip} up";
+ exec.start += "route add default ${gateway}";
+ exec.poststop = "ifconfig ${bridge} deletem ${epair}a";
+ exec.poststop += "ifconfig ${epair}a destroy";
+}
+....
+
+<.> Represents the IP of the Jail, it must be *unique*.
+<.> Refers to the bridge created previously.
-Because the basejail's copy of the userland is shared by the other jails, updating the basejail automatically updates all of the other jails.
-Either source or binary updates can be used.
+[[creating-linux-jail]]
+=== Creating a Linux Jail
-To build the world from source on the host, then install it in the basejail, use:
+FreeBSD can run Linux inside a jail using crossref:linuxemu[linuxemu,Linux Binary Compatibility] and man:debootstrap[8].
+Jails do not have a kernel.
+They run on the host's kernel.
+Therefore it is necessary to enable Linux Binary Compatibility in the host system.
+
+To enable the Linux ABI at boot time, execute the following command:
[source,shell]
....
-# ezjail-admin update -b
+# sysrc linux_enable="YES"
....
-If the world has already been compiled on the host, install it in the basejail with:
+Once enabled, it can be started without rebooting by executing the following command:
[source,shell]
....
-# ezjail-admin update -i
+# service linux start
....
-Binary updates use man:freebsd-update[8].
-These updates have the same limitations as if man:freebsd-update[8] were being run directly.
-The most important one is that only -RELEASE versions of FreeBSD are available with this method.
+The next step will be to create a jail as indicated above, for example in <<creating-thin-jail-openzfs-snapshots>>, but *without* performing the configuration.
+FreeBSD Linux jails require a specific configuration that will be detailed below.
-Update the basejail to the latest patched release of the version of FreeBSD on the host.
-For example, updating from RELEASE-p1 to RELEASE-p2.
+Once the jail has been created as explained above, execute the following command to perform required configuration for the jail and start it:
[source,shell]
....
-# ezjail-admin update -u
-....
-
-To upgrade the basejail to a new version, first upgrade the host system as described in crossref:cutting-edge[freebsdupdate-upgrade,“Performing Major and Minor Version Upgrades”].
-Once the host has been upgraded and rebooted, the basejail can then be upgraded.
-man:freebsd-update[8] has no way of determining which version is currently installed in the basejail, so the original version must be specified.
-Use man:file[1] to determine the original version in the basejail:
+# jail -cm \
+ name=ubuntu \
+ host.hostname="ubuntu.example.com" \
+ path="/usr/local/jails/ubuntu" \
+ interface="em0" \
+ ip4.addr="192.168.1.150" \
+ exec.start="/bin/sh /etc/rc" \
+ exec.stop="/bin/sh /etc/rc.shutdown" \
+ mount.devfs \
+ devfs_ruleset=4 \
+ allow.mount \
+ allow.mount.devfs \
+ allow.mount.fdescfs \
+ allow.mount.procfs \
+ allow.mount.linprocfs \
+ allow.mount.linsysfs \
+ allow.mount.tmpfs \
+ enforce_statfs=1
+....
+
+To access the jail, it will be necessary to install package:sysutils/debootstrap[].
+
+Execute the following command to access the FreeBSD Linux jail:
[source,shell]
....
-# file /usr/jails/basejail/bin/sh
-/usr/jails/basejail/bin/sh: ELF 64-bit LSB executable, x86-64, version 1 (FreeBSD), dynamically linked (uses shared libs), for FreeBSD 9.3, stripped
+# jexec -u root ubuntu
....
-Now use this information to perform the upgrade from `9.3-RELEASE` to the current version of the host system:
+Inside the jail, execute the following commands to install package:sysutils/debootstrap[] and prepare the Ubuntu environment:
[source,shell]
....
-# ezjail-admin update -U -s 9.3-RELEASE
+# pkg install debootstrap
+# debootstrap jammy /compat/ubuntu
....
-After updating the basejail, man:mergemaster[8] must be run to update each jail's configuration files.
-
-How to use man:mergemaster[8] depends on the purpose and trustworthiness of a jail.
-If a jail's services or users are not trusted, then man:mergemaster[8] should only be run from within that jail:
-
-[[jails-ezjail-update-mergemaster-untrusted]]
-.man:mergemaster[8] on Untrusted Jail
-[example]
-====
-Delete the link from the jail's [.filename]#/usr/src# into the basejail and create a new [.filename]#/usr/src# in the jail as a mountpoint.
-Mount the host computer's [.filename]#/usr/src# read-only on the jail's new [.filename]#/usr/src# mountpoint:
+When the process has finished and the message `Base system installed successfully` is displayed on the console,
+it will be necessary to stop the jail from the host system by executing the following command:
[source,shell]
....
-# rm /usr/jails/jailname/usr/src
-# mkdir /usr/jails/jailname/usr/src
-# mount -t nullfs -o ro /usr/src /usr/jails/jailname/usr/src
+# service jail onestop ubuntu
....
-Get a console in the jail:
+Then add an entry in [.filename]#/etc/jail.conf# for the Linux jail:
-[source,shell]
+[.programlisting]
....
-# ezjail-admin console jailname
+ubuntu {
+ # STARTUP/LOGGING
+ exec.start = "/bin/sh /etc/rc";
+ exec.stop = "/bin/sh /etc/rc.shutdown";
+ exec.consolelog = "/var/log/jail_console_${name}.log";
+
+ # PERMISSIONS
+ allow.raw_sockets;
+ exec.clean;
+ mount.devfs;
+ devfs_ruleset=4;
+
+ # HOSTNAME/PATH
+ host.hostname = "${name}";
+ path = "/usr/local/jails/containers/${name}";
+
+ # NETWORK
+ ip4.addr = 192.168.1.155;
+ interface = em0;
+
+ # MOUNT
+ mount += "devfs $path/compat/ubuntu/dev devfs rw 0 0";
+ mount += "tmpfs $path/compat/ubuntu/dev/shm tmpfs rw,size=1g,mode=1777 0 0";
+ mount += "fdescfs $path/compat/ubuntu/dev/fd fdescfs rw,linrdlnk 0 0";
+ mount += "linprocfs $path/compat/ubuntu/proc linprocfs rw 0 0";
+ mount += "linsysfs $path/compat/ubuntu/sys linsysfs rw 0 0";
+ mount += "/tmp $path/compat/ubuntu/tmp nullfs rw 0 0";
+ mount += "/home $path/compat/ubuntu/home nullfs rw 0 0";
+}
....
-Inside the jail, run `mergemaster`.
-Then exit the jail console:
+Then the jail can be started as usual with the following command:
[source,shell]
....
-# cd /usr/src
-# mergemaster -U
-# exit
+# service jail start ubuntu
....
-Finally, unmount the jail's [.filename]#/usr/src#:
+The Ubuntu environment can be accessed using the following command:
[source,shell]
....
-# umount /usr/jails/jailname/usr/src
+# jexec ubuntu chroot /compat/ubuntu /bin/bash
....
-====
+More information can be found in the chapter crossref:linuxemu[linuxemu,Linux Binary Compatibility].
-[[jails-ezjail-update-mergemaster-trusted]]
-.man:mergemaster[8] on Trusted Jail
-[example]
-====
+[[jail-management]]
+== Jail Management
-If the users and services in a jail are trusted, man:mergemaster[8] can be run from the host:
+Once the jail is created, there are a number of operations that can be performed, like starting, rebooting or deleting the jail, installing software in it, etc.
+In this section the different actions that can be done with jails from the host will be described.
+
+[[list-running-jails]]
+=== List Running Jails
+
+To list the jails that are running on the host system, the command man:jls[8] can be used:
[source,shell]
....
-# mergemaster -U -D /usr/jails/jailname
+# jls
....
-====
+The output should be similar to the following:
-[TIP]
-====
-After a major version update it is recommended by package:sysutils/ezjail[] to make sure your `pkg` is of the correct version.
-Therefore enter:
+....
+ JID IP Address Hostname Path
+ 1 192.168.250.70 classic /usr/local/jails/containers/classic
+....
+
+man:jls[8] supports the `--libxo` argument, which through the man:libxo[3] library allows other types of formats to be displayed, such as `JSON`, `HTML`, etc.
+
+For example, execute the following command to get the `JSON` output:
[source,shell]
....
-# pkg-static upgrade -f pkg
+# jls --libxo=json
....
-to upgrade or downgrade to the appropriate version.
-====
+The output should be similar to the following:
+
+....
+{"__version": "2", "jail-information": {"jail": [{"jid":1,"ipv4":"192.168.250.70","hostname":"classic","path":"/usr/local/jails/containers/classic"}]}}
+....
-[[jails-ezjail-update-ports]]
-==== Updating Ports
+[[start-jail]]
+=== Start, Restart, and Stop a Jail
-The ports tree in the basejail is shared by the other jails.
-Updating that copy of the ports tree gives the other jails the updated version also.
+man:service[8] is used to start, reboot, or stop a jail on the host.
-The basejail ports tree is updated with man:portsnap[8]:
+For example, to start a jail, run the following command:
[source,shell]
....
-# ezjail-admin update -P
+# service jail start jailname
....
-[[jails-ezjail-control]]
-=== Controlling Jails
+Change the `start` argument to `restart` or `stop` to perform other actions on the jail.
-[[jails-ezjail-control-stop-start]]
-==== Stopping and Starting Jails
+[[destroy-jail]]
+=== Destroy a Jail
-ezjail automatically starts jails when the computer is started.
-Jails can be manually stopped and restarted with `stop` and `start`:
+Destroying a jail is not as simple as stopping the jail using man:service[8] and removing the jail directory and [.filename]#/etc/jail.conf# entry.
+
+FreeBSD takes system security very seriously.
+For this reason there are certain files that not even the root user can delete.
+This functionality is known as File Flags.
+
+The first step is to stop the desired jail executing the following command:
[source,shell]
....
-# ezjail-admin stop sambajail
-Stopping jails: sambajail.
+# service jail stop jailname
....
-By default, jails are started automatically when the host computer starts.
-Autostarting can be disabled with `config`:
+The second step is to remove these flags with man:chflags[1] by executing the following command, in which `classic` is the name of the jail to remove:
[source,shell]
....
-# ezjail-admin config -r norun seldomjail
+# chflags -R 0 /usr/local/jails/classic
....
-This takes effect the next time the host computer is started.
-A jail that is already running will not be stopped.
-
-Enabling autostart is very similar:
+The third step is to delete the directory where the jail was:
[source,shell]
....
-# ezjail-admin config -r run oftenjail
+# rm -rf /usr/local/jails/classic
....
-[[jails-ezjail-control-backup]]
-==== Archiving and Restoring Jails
+Finally, it will be necessary to remove the jail entry in [.filename]#/etc/jail.conf# or in [.filename]#jail.conf.d#.
-Use `archive` to create a [.filename]#.tar.gz# archive of a jail.
-The file name is composed from the name of the jail and the current date.
-Archive files are written to the archive directory, [.filename]#/usr/jails/ezjail_archives#.
-A different archive directory can be chosen by setting `ezjail_archivedir` in the configuration file.
+[[handle-packages-jail]]
+=== Handle Packages in a Jail
-The archive file can be copied elsewhere as a backup, or an existing jail can be restored from it with `restore`.
-A new jail can be created from the archive, providing a convenient way to clone existing jails.
+The man:pkg[8] tool supports the `-j` argument in order to handle packages installed inside the jail.
-Stop and archive a jail named `wwwserver`:
+For example, to install package:nginx-lite[] in the jail, the next command can be executed *from the host*:
[source,shell]
....
-# ezjail-admin stop wwwserver
-Stopping jails: wwwserver.
-# ezjail-admin archive wwwserver
-# ls /usr/jails/ezjail-archives/
-wwwserver-201407271153.13.tar.gz
+# pkg -j classic install nginx-lite
....
-Create a new jail named `wwwserver-clone` from the archive created in the previous step.
-Use the [.filename]#em1# interface and assign a new IP address to avoid conflict with the original:
+For more information on working with packages in FreeBSD, see crossref:ports[ports,"Installing Applications: Packages and Ports"].
+
+[[access-jail]]
+=== Access a Jail
+
+While it has been stated above that it is best to manage jails from the host system, a jail can be entered with man:jexec[8].
+
+The jail can be entered by running man:jexec[8] from the host:
[source,shell]
....
-# ezjail-admin create -a /usr/jails/ezjail_archives/wwwserver-201407271153.13.tar.gz wwwserver-clone 'lo1|127.0.3.1,em1|192.168.1.51'
+# jexec -u root jailname
....
-[[jails-ezjail-example-bind]]
-=== Full Example: BIND in a Jail
+When gaining access to the jail, the message configured in man:motd[5] will be displayed.
-Putting the BINDDNS server in a jail improves security by isolating it.
-This example creates a simple caching-only name server.
+[[execute-commands-jail]]
+=== Execute Commands in a Jail
-* The jail will be called `dns1`.
-* The jail will use IP address `192.168.1.240` on the host's `re0` interface.
-* The upstream ISP's DNS servers are at `10.0.0.62` and `10.0.0.61`.
-* The basejail has already been created and a ports tree installed as shown in <<jails-ezjail-initialsetup>>.
-
-[[jails-ezjail-example-bind-steps]]
-.Running BIND in a Jail
-[example]
-====
+To execute a command from the host system in a jail the man:jexec[8] can be used.
-Create a cloned loopback interface by adding a line to [.filename]#/etc/rc.conf#:
+For example, to stop a service that is running inside a jail, the command will be executed:
-[.programlisting]
+[source,shell]
....
-cloned_interfaces="lo1"
+# jexec -l jailname service nginx stop
....
-Immediately create the new loopback interface:
+[[jail-upgrading]]
+== Jail Upgrading
+
+Upgrading FreeBSD Jails ensures that the isolated environments remain secure, up-to-date, and in line with the latest features and improvements available in the FreeBSD ecosystem.
+
+[[jails-updating]]
+=== Upgrading a Classic Jail or a Thin Jail using OpenZFS Snapshots
+
+Jails *must be updated from the host* operating system.
+The default behavior in FreeBSD is to disallow the use of man:chflags[1] in a jail.
+This will prevent the update of some files so updating from within the jail will fail.
+
+To update the jail to the latest patch release of the version of FreeBSD it is running, execute the following commands on the host:
[source,shell]
....
-# service netif cloneup
-Created clone interfaces: lo1.
+# freebsd-update -j classic fetch install
+# service jail restart classic
....
-Create the jail:
+To upgrade the jail to a new major or minor version, first upgrade the host system as described in crossref:cutting-edge[freebsdupdate-upgrade,"Performing Major and Minor Version Upgrades"].
+Once the host has been upgraded and rebooted, the jail can then be upgraded.
+
+[TIP]
+====
+In case of upgrade from one version to another, it is easier to create a new jail than to upgrade completely.
+====
+
+For example to upgrade from 13.1-RELEASE to 13.2-RELEASE, execute the following commands on the host:
[source,shell]
....
-# ezjail-admin create dns1 'lo1|127.0.2.1,re0|192.168.1.240'
+# freebsd-update -j classic -r 13.2-RELEASE upgrade
+# freebsd-update -j classic install
+# service jail restart classic
+# freebsd-update -j classic install
+# service jail restart classic
....
-Start the jail, connect to a console running on it, and perform some basic configuration:
+[NOTE]
+====
+It is necessary to execute the `install` step two times.
+The first one upgrades the kernel, and the second one upgrades the rest of the components.
+====
+
+Then, if it was a major version upgrade, reinstall all installed packages and restart the jail again.
+This is required because the ABI version changes when upgrading between major versions of FreeBSD.
+
+From the host:
[source,shell]
....
-# ezjail-admin start dns1
-# ezjail-admin console dns1
-# passwd
-Changing local password for root
-New Password:
-Retype New Password:
-# tzsetup
-# sed -i .bak -e '/adjkerntz/ s/^/#/' /etc/crontab
-# sed -i .bak -e 's/127.0.0.1/127.0.2.1/g; s/localhost.my.domain/dns1.my.domain dns1/' /etc/hosts
+# pkg -j jailname upgrade -f
+# service jail restart jailname
....
-Temporarily set the upstream DNS servers in [.filename]#/etc/resolv.conf# so ports can be downloaded:
+[[upgrading-thin-jail]]
+=== Upgrading a Thin Jail Using NullFS
-[.programlisting]
-....
-nameserver 10.0.0.62
-nameserver 10.0.0.61
-....
+Since Thin Jails that use NullFS share the majority of system directories, they are very easy to update.
+It is enough to update the template.
+This allows updating multiple jails at the same time.
-Still using the jail console, install package:dns/bind99[].
+To update the template to the latest patch release of the version of FreeBSD it is running, execute the following commands on the host:
[source,shell]
....
-# make -C /usr/ports/dns/bind99 install clean
+# freebsd-update -b /usr/local/jails/templates/13.1-RELEASE-base/ fetch install
+# service jail restart
....
-Configure the name server by editing [.filename]#/usr/local/etc/namedb/named.conf#.
+To upgrade the template to a new major or minor version, first upgrade the host system as described in crossref:cutting-edge[freebsdupdate-upgrade,"Performing Major and Minor Version Upgrades"].
+Once the host has been upgraded and rebooted, the template can then be upgraded.
-Create an Access Control List (ACL) of addresses and networks that are permitted to send DNS queries to this name server.
-This section is added just before the `options` section already in the file:
+For example, to upgrade from 13.1-RELEASE to 13.2-RELEASE, execute the following commands on the host:
-[.programlisting]
+[source,shell]
+....
+# freebsd-update -b /usr/local/jails/templates/13.1-RELEASE-base/ -r 13.2-RELEASE upgrade
+# freebsd-update -b /usr/local/jails/templates/13.1-RELEASE-base/ install
+# service jail restart
+# freebsd-update -b /usr/local/jails/templates/13.1-RELEASE-base/ install
+# service jail restart
....
-...
-// or cause huge amounts of useless Internet traffic.
-acl "trusted" {
- 192.168.1.0/24;
- localhost;
- localnets;
-};
+[[jail-resource-limits]]
+== Jail Resource Limits
-options {
-...
-....
+Controlling the resources that a jail uses from the host system is a task to be taken into account by the system administrator.
-Use the jail IP address in the `listen-on` setting to accept DNS queries from other computers on the network:
+man:rctl[8] allows you to manage the resources that a jail can use from the host system.
-[.programlisting]
-....
- listen-on { 192.168.1.240; };
-....
+[TIP]
+====
+The `kern.racct.enable` tunable must be enabled at [.filename]#/boot/loader.conf#.
+====
-A simple caching-only DNS name server is created by changing the `forwarders` section.
-The original file contains:
+The syntax to limit the resources of a jail is as follows:
[.programlisting]
....
-/*
- forwarders {
- 127.0.0.1;
- };
-*/
+rctl -a jail:<jailname>:resource:action=amount/percentage
....
-Uncomment the section by removing the `/\*` and `*/` lines.
-Enter the IP addresses of the upstream DNS servers.
-Immediately after the `forwarders` section, add references to the `trusted` ACL defined earlier:
+For example, to limit the maximum RAM that a jail can access, run the following command:
-[.programlisting]
+[source,shell]
....
- forwarders {
- 10.0.0.62;
- 10.0.0.61;
- };
-
- allow-query { any; };
- allow-recursion { trusted; };
- allow-query-cache { trusted; };
+# rctl -a jail:classic:memoryuse:deny=2G
....
-Enable the service in [.filename]#/etc/rc.conf#:
+To make the limitation persistent across reboots of the host system, it will be necessary to add the rule to the [.filename]#/etc/rctl.conf# file as follows:
[.programlisting]
....
-named_enable="YES"
+jail:classic:memoryuse:deny=2G/jail
....
-Start and test the name server:
+More information on resource limits can be found in the security chapter in the crossref:security[security-resourcelimits,"Resource Limits section"].
-[source,shell]
-....
-# service named start
-wrote key file "/usr/local/etc/namedb/rndc.key"
-Starting named.
-# /usr/local/bin/dig @192.168.1.240 freebsd.org
-....
+[[jail-managers-and-containers]]
+== Jail Managers and Containers
-A response that includes
+As previously explained, each type of FreeBSD Jail can be created and configured manually, but FreeBSD also has third-party utilities to make configuration and administration easier.
-[source,shell]
-....
-;; Got answer;
-....
+Below is an incomplete list of the different FreeBSD Jail managers:
-shows that the new DNS server is working.
-A long delay followed by a response including
+.Jail Managers
+[options="header", cols="1,1,1,1"]
+|===
+| Name | License | Package | Documentation
-[source,shell]
-....
-;; connection timed out; no servers could be reached
-....
+| BastilleBSD
+| BSD-3
+| package:sysutils/bastille[]
+| link:https://bastille.readthedocs.io/en/latest/[Documentation]
-shows a problem.
-Check the configuration settings and make sure any local firewalls allow the new DNS access to the upstream DNS servers.
+| pot
+| BSD-3
+| package:sysutils/pot[]
+| link:https://pot.pizzamig.dev/[Documentation]
-The new DNS server can use itself for local name resolution, just like other local computers.
-Set the address of the DNS server in the client computer's [.filename]#/etc/resolv.conf#:
+| cbsd
+| BSD-2
+| package:sysutils/cbsd[]
+| link:https://www.bsdstore.ru/en/docs.html[Documentation]
-[.programlisting]
-....
-nameserver 192.168.1.240
-....
+| AppJail
+| BSD-3
+| package:sysutils/appjail[], for devel package:sysutils/appjail-devel[]
+| link:https://github.com/DtxdF/AppJail#getting-started[Documentation]
-A local DHCP server can be configured to provide this address for a local DNS server, providing automatic configuration on DHCP clients.
-====
+| iocage
+| BSD-2
+| package:sysutils/iocage[]
+| link:https://iocage.readthedocs.io/en/latest/[Documentation]
+
+| ezjail
+| link:https://erdgeist.org/beerware.html[Beer Ware]
+| package:sysutils/ezjail[]
+| link:https://erdgeist.org/arts/software/ezjail/[Documentation]
+
+|===
diff --git a/documentation/content/en/books/handbook/jails/_index.po b/documentation/content/en/books/handbook/jails/_index.po
new file mode 100644
index 0000000000..e82c7c3c9c
--- /dev/null
+++ b/documentation/content/en/books/handbook/jails/_index.po
@@ -0,0 +1,2375 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/jails/_index.adoc:1
+#, no-wrap
+msgid "Jails improve on the concept of the traditional chroot environment in several ways"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/jails/_index.adoc:1
+#, no-wrap
+msgid "Part III. System Administration"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/jails/_index.adoc:1
+#, no-wrap
+msgid "Chapter 17. Jails and Containers"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/jails/_index.adoc:14
+#, no-wrap
+msgid "Jails and Containers"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/jails/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:58
+msgid ""
+"Since system administration is a difficult task, many tools have been "
+"developed to make life easier for the administrator. These tools often "
+"enhance the way systems are installed, configured, and maintained. One of "
+"the tools which can be used to enhance the security of a FreeBSD system is "
+"_jails_. Jails have been available since FreeBSD 4.X and continue to be "
+"enhanced in their usefulness, performance, reliability, and security."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:63
+msgid ""
+"Jails build upon the man:chroot[2] concept, which is used to change the root "
+"directory of a set of processes. This creates a safe environment, separate "
+"from the rest of the system. Processes created in the chrooted environment "
+"can not access files or resources outside of it. For that reason, "
+"compromising a service running in a chrooted environment should not allow "
+"the attacker to compromise the entire system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:67
+msgid ""
+"However, a chroot has several limitations. It is suited to easy tasks which "
+"do not require much flexibility or complex, advanced features. Over time, "
+"many ways have been found to escape from a chrooted environment, making it a "
+"less than ideal solution for securing services."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:69
+msgid ""
+"Jails improve on the concept of the traditional chroot environment in "
+"several ways."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:75
+msgid ""
+"In a traditional chroot environment, processes are only limited in the part "
+"of the file system they can access. The rest of the system resources, "
+"system users, running processes, and the networking subsystem are shared by "
+"the chrooted processes and the processes of the host system. Jails expand "
+"this model by virtualizing access to the file system, the set of users, and "
+"the networking subsystem. More fine-grained controls are available for "
+"tuning the access of a jailed environment. Jails can be considered as a "
+"type of operating system-level virtualization."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:77
+msgid "This chapter covers:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:79
+msgid "What a jail is and what purpose it may serve in FreeBSD installations."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:80
+msgid "The different types of jail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:81
+msgid "The different ways to configure the network for a jail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:82
+msgid "The jail configuration file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:83
+msgid "How to create the different types of jail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:84
+msgid "How to start, stop, and restart a jail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:85
+msgid ""
+"The basics of jail administration, both from inside and outside the jail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:86
+msgid "How to upgrade the different types of jail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:87
+msgid "A incomplete list of the different FreeBSD jail managers."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/jails/_index.adoc:89
+#, no-wrap
+msgid "Jail Types"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:93
+msgid ""
+"Some administrators divide jails into different types, although the "
+"underlying technology is the same. Each administrator will have to assess "
+"what type of jail to create in each case depending on the problem they have "
+"to solve."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:95
+msgid ""
+"Below can be found a list of the different types, their characteristics, and "
+"considerations for use."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/jails/_index.adoc:97
+#, no-wrap
+msgid "Thick Jails"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:104
+msgid ""
+"A thick jail is a traditional form of FreeBSD Jail. In a thick jail, a "
+"complete copy of the base system is replicated within the jail's "
+"environment. This means that the jail has its own separate instance of the "
+"FreeBSD base system, including libraries, executables, and configuration "
+"files. The jail can be thought of as an almost complete standalone FreeBSD "
+"installation, but running within the confines of the host system. This "
+"isolation ensures that the processes within the jail are kept separate from "
+"those on the host and other jails."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:106
+msgid "Advantages of Thick Jails:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:108
+msgid ""
+"High degree of isolation: Processes within the jail are isolated from the "
+"host system and other jails."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:109
+msgid ""
+"Independence: Thick jails can have different versions of libraries, "
+"configurations, and software than the host system or other jails."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:110
+msgid ""
+"Security: Since the jail contains its own base system, vulnerabilities or "
+"issues affecting the jail environment won't directly impact the host or "
+"other jails."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:112
+msgid "Disadvantages of Thick Jails:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:114
+msgid ""
+"Resource overhead: Because each jail maintains its own separate base system, "
+"thick jails consume more resources compared to thin jails."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:115
+msgid ""
+"Maintenance: Each jail requires its own maintenance and updates for its base "
+"system components."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/jails/_index.adoc:117
+#: documentation/content/en/books/handbook/jails/_index.adoc:383
+#, no-wrap
+msgid "Thin Jails"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:123
+msgid ""
+"A thin jail shares the base system using OpenZFS snapshots or NullFS mounts "
+"from a template. Only a minimal subset of base system is duplicated for "
+"each thin jail, resulting in less resource consumption compared to a thick "
+"jail. However, this also means that thin jails have less isolation and "
+"independence compared to thick jails. Changes in shared components could "
+"potentially affect multiple thin jails simultaneously."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:125
+msgid ""
+"In summary, a FreeBSD Thin Jail is a type of FreeBSD Jail that replicates a "
+"substantial portion, but not all, of the base system within the isolated "
+"environment."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:127
+msgid "Advantages of Thin Jails:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:129
+msgid ""
+"Resource Efficiency: Thin jails are more resource-efficient compared to "
+"thick jails. Since they share most of the base system, they consume less "
+"disk space and memory. This makes it possible to run more jails on the same "
+"hardware without consuming excessive resources."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:130
+msgid ""
+"Faster Deployment: Creating and launching thin jails is generally faster "
+"compared to thick jails. This can be particularly advantageous when you need "
+"to rapidly deploy multiple instances."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:131
+msgid ""
+"Unified Maintenance: Since thin jails share the majority of their base "
+"system with the host system, updates and maintenance of common base system "
+"components (such as libraries and binaries) only need to be done once on the "
+"host. This simplifies the maintenance process compared to maintaining an "
+"individual base system for each thick jail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:132
+msgid ""
+"Shared Resources: Thin jails can more easily share common resources such as "
+"libraries and binaries with the host system. This can potentially lead to "
+"more efficient disk caching and improved performance for applications within "
+"the jail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:134
+msgid "Disadvantages of Thin Jails:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:136
+msgid ""
+"Reduced Isolation: The primary disadvantage of thin jails is that they offer "
+"less isolation compared to thick jails. Since they share a significant "
+"portion of the template's base system, vulnerabilities or issues affecting "
+"shared components could potentially impact multiple jails simultaneously."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:137
+msgid ""
+"Security Concerns: The reduced isolation in thin jails could pose security "
+"risks, as a compromise in one jail might have a greater potential to affect "
+"other jails or the host system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:138
+msgid ""
+"Dependency Conflicts: If multiple thin jails require different versions of "
+"the same libraries or software, managing dependencies can become complex. In "
+"some cases, this might require additional effort to ensure compatibility."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:139
+msgid ""
+"Compatibility Challenges: Applications within a thin jail might encounter "
+"compatibility issues if they assume a certain base system environment that "
+"differs from the shared components provided by the template."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/jails/_index.adoc:141
+#, no-wrap
+msgid "VNET Jails"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:146
+msgid ""
+"A FreeBSD VNET jail is a virtualized environment that allows for the "
+"isolation and control of network resources for processes running within it. "
+"It provides a high level of network segmentation and security by creating a "
+"separate network stack for processes within the jail, ensuring that network "
+"traffic within the jail is isolated from the host system and other jails."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:149
+msgid ""
+"In essence, FreeBSD VNET jails add a network configuration mechanism. This "
+"means a VNET jail can be created as a Thick or Thin Jail."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/jails/_index.adoc:151
+#, no-wrap
+msgid "Linux Jails"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:156
+msgid ""
+"A FreeBSD Linux Jail is a feature in the FreeBSD operating system that "
+"enables the use of Linux binaries and applications within a FreeBSD jail. "
+"This functionality is achieved by incorporating a compatibility layer that "
+"allows certain Linux system calls and libraries to be translated and "
+"executed on the FreeBSD kernel. The purpose of a Linux Jail is to "
+"facilitate the execution of Linux software on a FreeBSD system without "
+"needing a separate Linux virtual machine or environment."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/jails/_index.adoc:158
+#, no-wrap
+msgid "Host Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:161
+msgid ""
+"Before creating any jail on the host system it is necessary to perform "
+"certain configuration and obtain some information from the host system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:163
+msgid ""
+"It will be necessary to configure the man:jail[8] utility, create the "
+"necessary directories to configure and install jails, obtain information "
+"from the host's network, and check whether the host uses OpenZFS or UFS as "
+"its file system."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:167
+msgid ""
+"The FreeBSD version running in the jail can not be newer than the version "
+"running in the host."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/jails/_index.adoc:170
+#, no-wrap
+msgid "Jail Utility"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:173
+msgid "The man:jail[8] utility manages jails."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:175
+msgid "To start jails when the system boots, run the following commands:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:180
+#, no-wrap
+msgid ""
+"# sysrc jail_enable=\"YES\"\n"
+"# sysrc jail_parallel_start=\"YES\"\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:185
+msgid ""
+"With `jail_parallel_start`, all configured jails will be started in the "
+"background."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/jails/_index.adoc:188
+#, no-wrap
+msgid "Networking"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:191
+msgid "Networking for FreeBSD jails can be configured several different ways:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/jails/_index.adoc:192
+#, no-wrap
+msgid "Host Networking Mode (IP Sharing)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:196
+msgid ""
+"In host networking mode, a jail shares the same networking stack as the host "
+"system. When a jail is created in host networking mode it uses the same "
+"network interface and IP address. This means that the jail doesn't have a "
+"separate IP address, and its network traffic is associated with the host's "
+"IP."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/jails/_index.adoc:197
+#, no-wrap
+msgid "Virtual Networks (VNET)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:201
+msgid ""
+"Virtual Networks are a feature of FreeBSD jails that offer more advanced and "
+"flexible networking solutions than a basic networking mode like host "
+"networking. VNET allows the creation of isolated network stacks for each "
+"jail, providing them with their own separate IP addresses, routing tables, "
+"and network interfaces. This offers a higher level of network isolation and "
+"allows jails to function as if they are running on separate virtual machines."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/jails/_index.adoc:202
+#, no-wrap
+msgid "The netgraph system"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:205
+msgid ""
+"man:netgraph[4] is a versatile kernel framework for creating custom network "
+"configurations. It can be used to define how network traffic flows between "
+"jails and the host system and between different jails."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/jails/_index.adoc:207
+#, no-wrap
+msgid "Setting Up the Jail Directory Tree"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:210
+msgid "There is no specific place to put the files for the jails."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:213
+msgid ""
+"Some administrators use [.filename]#/jail#, others [.filename]#/usr/jail#, "
+"and still others [.filename]#/usr/local/jails#. In this chapter [."
+"filename]#/usr/local/jails# will be used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:215
+msgid ""
+"Apart from [.filename]#/usr/local/jails# other directories will be created:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:217
+msgid ""
+"[.filename]#media# will contain the compressed files of the downloaded "
+"userlands."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:218
+msgid ""
+"[.filename]#templates# will contain the templates when using Thin Jails."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:219
+msgid "[.filename]#containers# will contain the jails."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:221
+msgid ""
+"When using OpenZFS, execute the following commands to create datasets for "
+"these directories:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:228
+#, no-wrap
+msgid ""
+"# zfs create -o mountpoint=/usr/local/jails zroot/jails\n"
+"# zfs create zroot/jails/media\n"
+"# zfs create zroot/jails/templates\n"
+"# zfs create zroot/jails/containers\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:233
+msgid ""
+"In this case, `zroot` was used for the parent dataset, but other datasets "
+"could have been used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:236
+msgid ""
+"When using UFS, execute the following commands to create the directories:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:243
+#, no-wrap
+msgid ""
+"# mkdir /usr/local/jails/\n"
+"# mkdir /usr/local/jails/media\n"
+"# mkdir /usr/local/jails/templates\n"
+"# mkdir /usr/local/jails/containers\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/jails/_index.adoc:246
+#, no-wrap
+msgid "Jail Configuration Files"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:249
+msgid "There are two ways to configure jails."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:252
+msgid ""
+"The first one is to add an entry for each jail to the file [.filename]#/etc/"
+"jail.conf#. The other option is to create a file for each jail in the "
+"directory [.filename]#/etc/jail.conf.d/#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:255
+msgid ""
+"There is no right or wrong option. Each administrator must choose the one "
+"that best suits their needs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:258
+msgid ""
+"In case a host system has few jails, an entry for each jail can be added in "
+"the file [.filename]#/etc/jail.conf#. If the host system has many jails, it "
+"is good idea to have one configuration file for each jail in the [."
+"filename]#/etc/jail.conf.d/# directory."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:260
+msgid "A typical jail entry would look like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:268
+#, no-wrap
+msgid ""
+"jailname { <.>\n"
+" # STARTUP/LOGGING\n"
+" exec.start = \"/bin/sh /etc/rc\"; <.>\n"
+" exec.stop = \"/bin/sh /etc/rc.shutdown\"; <.>\n"
+" exec.consolelog = \"/var/log/jail_console_${name}.log\"; <.>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:273
+#, no-wrap
+msgid ""
+" # PERMISSIONS\n"
+" allow.raw_sockets; <.>\n"
+" exec.clean; <.>\n"
+" mount.devfs; <.>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:277
+#, no-wrap
+msgid ""
+" # HOSTNAME/PATH\n"
+" host.hostname = \"${name}\"; <.>\n"
+" path = \"/usr/local/jails/containers/${name}\"; <.>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:283
+#, no-wrap
+msgid ""
+" # NETWORK\n"
+" ip4.addr = 192.168.1.151; <.>\n"
+" ip6.addr = ::ffff:c0a8:197 <.>\n"
+" interface = em0; <.>\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:286
+msgid "`jailname` - Name of the jail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:287
+msgid ""
+"`exec.start` - Command(s) to run in the jail environment when a jail is "
+"created. A typical command to run is \"/bin/sh /etc/rc\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:288
+msgid ""
+"`exec.stop` - Command(s) to run in the jail environment before a jail is "
+"removed. A typical command to run is \"/bin/sh /etc/rc.shutdown\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:289
+msgid ""
+"`exec.consolelog` - A file to direct command output (stdout and stderr) to."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:290
+msgid ""
+"`allow.raw_sockets` - Allow creating raw sockets inside the jail. Setting "
+"this parameter allows utilities like man:ping[8] and man:traceroute[8] to "
+"operate inside the jail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:291
+msgid "`exec.clean` - Run commands in a clean environment."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:292
+msgid ""
+"`mount.devfs` - Mount a man:devfs[5] filesystem on the chrooted [.filename]#/"
+"dev# directory, and apply the ruleset in the devfs_ruleset parameter to "
+"restrict the devices visible inside the jail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:293
+msgid "`host.hostname` - The hostname of the jail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:294
+msgid ""
+"`path` - The directory which is to be the root of the jail. Any commands "
+"that are run inside the jail, either by jail or from man:jexec[8], are run "
+"from this directory."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:295
+msgid ""
+"`ip4.addr` - IPv4 address. There are two configuration possibilities for "
+"IPv4. The first is to establish an IP or a list of IPs as has been done in "
+"the example. The other is to use `ip4` instead and set the `inherit` value "
+"to inherit the host's IP address."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:296
+msgid ""
+"`ip6.addr` - IPv6 address. There are two configuration possibilities for "
+"IPv6. The first is to establish an IP or a list of IPs as has been done in "
+"the example. The other is to use `ip6` instead and set the `inherit` value "
+"to inherit the host's IP address."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:297
+msgid ""
+"`interface` - A network interface to add the jail's IP addresses. Usually "
+"the host interface."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:299
+msgid ""
+"More information about configuration variables can be found in man:jail[8] "
+"and man:jail.conf[5]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/jails/_index.adoc:301
+#, no-wrap
+msgid "Classic Jail (Thick Jail)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:305
+msgid ""
+"These jails resemble a real FreeBSD system. They can be managed more or "
+"less like a normal host system and updated independently."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/jails/_index.adoc:307
+#, no-wrap
+msgid "Creating a Classic Jail"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:310
+msgid ""
+"In principle, a jail only needs a hostname, a root directory, an IP address, "
+"and a userland."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:312
+msgid ""
+"The userland for the jail can be obtained from the official FreeBSD download "
+"servers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:314
+msgid "Execute the following command to download the userland:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:318
+#: documentation/content/en/books/handbook/jails/_index.adoc:412
+#: documentation/content/en/books/handbook/jails/_index.adoc:515
+#, no-wrap
+msgid "# fetch https://download.freebsd.org/ftp/releases/amd64/amd64/13.2-RELEASE/base.txz -o /usr/local/jails/media/13.2-RELEASE-base.txz\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:321
+msgid ""
+"Once the download is complete, it will be necessary to extract the contents "
+"into the jail directory."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:323
+msgid ""
+"Execute the following commands to extract the userland into the jail's "
+"directory:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:328
+#, no-wrap
+msgid ""
+"# mkdir -p /usr/local/jails/containers/classic\n"
+"# tar -xf /usr/local/jails/media/13.2-RELEASE-base.txz -C /usr/local/jails/containers/classic --unlink\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:331
+msgid ""
+"With the userland extracted in the jail directory, it will be necessary to "
+"copy the timezone and DNS server files:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:336
+#, no-wrap
+msgid ""
+"# cp /etc/resolv.conf /usr/local/jails/containers/classic/etc/resolv.conf\n"
+"# cp /etc/localtime /usr/local/jails/containers/classic/etc/localtime\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:339
+msgid ""
+"With the files copied, the next thing to do is update to the latest patch "
+"level by executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:343
+#, no-wrap
+msgid "# freebsd-update -b /usr/local/jails/containers/classic/ fetch install\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:347
+#: documentation/content/en/books/handbook/jails/_index.adoc:456
+msgid ""
+"The last step is to configure the jail. It will be necessary to add an "
+"entry to the configuration file [.filename]#/etc/jail.conf# or in [."
+"filename]#jail.conf.d# with the parameters of the jail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:349
+#: documentation/content/en/books/handbook/jails/_index.adoc:458
+msgid "An example would be the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:357
+#, no-wrap
+msgid ""
+"classic {\n"
+" # STARTUP/LOGGING\n"
+" exec.start = \"/bin/sh /etc/rc\";\n"
+" exec.stop = \"/bin/sh /etc/rc.shutdown\";\n"
+" exec.consolelog = \"/var/log/jail_console_${name}.log\";\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:362
+#: documentation/content/en/books/handbook/jails/_index.adoc:471
+#: documentation/content/en/books/handbook/jails/_index.adoc:625
+#, no-wrap
+msgid ""
+" # PERMISSIONS\n"
+" allow.raw_sockets;\n"
+" exec.clean;\n"
+" mount.devfs;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:366
+#: documentation/content/en/books/handbook/jails/_index.adoc:475
+#: documentation/content/en/books/handbook/jails/_index.adoc:629
+#: documentation/content/en/books/handbook/jails/_index.adoc:834
+#, no-wrap
+msgid ""
+" # HOSTNAME/PATH\n"
+" host.hostname = \"${name}\";\n"
+" path = \"/usr/local/jails/containers/${name}\";\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:371
+#, no-wrap
+msgid ""
+" # NETWORK\n"
+" ip4.addr = 192.168.1.151;\n"
+" interface = em0;\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:374
+#: documentation/content/en/books/handbook/jails/_index.adoc:483
+#: documentation/content/en/books/handbook/jails/_index.adoc:648
+msgid "Execute the following command to start the jail:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:378
+#, no-wrap
+msgid "# service jail start classic\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:381
+#: documentation/content/en/books/handbook/jails/_index.adoc:490
+msgid ""
+"More information on how to manage jails can be found in the section <<jail-"
+"management>>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:389
+msgid ""
+"Although Thin Jails use the same technology as Thick Jails, the creation "
+"procedure is different. Thin jails can be created using OpenZFS snapshots "
+"or using templates and NullFS. The use of OpenZFS snapshots and templates "
+"using NullFS have certain advantages over classic jails, such as being able "
+"to create them faster from snapshots or being able to update multiple jails "
+"using NullFS."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/jails/_index.adoc:391
+#, no-wrap
+msgid "Creating a Thin Jail Using OpenZFS Snapshots"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:394
+msgid ""
+"Due to the good integration between FreeBSD and OpenZFS it is very easy to "
+"create new Thin Jails using OpenZFS Snapshots."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:396
+msgid ""
+"To create a Thin Jail using OpenZFS Snapshots the first step is to create a "
+"template."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:399
+msgid ""
+"Templates will only be used to create new jails. For this reason they are "
+"created in \"read-only\" mode so that jails are created with an immutable "
+"base."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:401
+msgid "To create the dataset for the template, execute the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:405
+#, no-wrap
+msgid "# zfs create -p zroot/jails/templates/13.2-RELEASE\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:408
+#: documentation/content/en/books/handbook/jails/_index.adoc:511
+msgid "Then execute the following command to download the userland:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:415
+#: documentation/content/en/books/handbook/jails/_index.adoc:518
+msgid ""
+"Once the download is complete, it will be necessary to extract the contents "
+"in the template directory by executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:419
+#, no-wrap
+msgid "# tar -xf /usr/local/jails/media/13.2-RELEASE-base.txz -C /usr/local/jails/templates/13.2-RELEASE --unlink\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:422
+msgid ""
+"With the userland extracted in the templates directory, it will be necessary "
+"to copy the timezone and DNS server files to the template directory by "
+"executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:427
+#, no-wrap
+msgid ""
+"# cp /etc/resolv.conf /usr/local/jails/templates/13.2-RELEASE/etc/resolv.conf\n"
+"# cp /etc/localtime /usr/local/jails/templates/13.2-RELEASE/etc/localtime\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:430
+msgid ""
+"The next thing to do is update to the latest patch level by executing the "
+"following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:434
+#, no-wrap
+msgid "# freebsd-update -b /usr/local/jails/templates/13.2-RELEASE/ fetch install\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:437
+msgid "Once the update is finished, the template is ready."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:439
+msgid ""
+"To create an OpenZFS Snapshot from the template, execute the following "
+"command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:443
+#, no-wrap
+msgid "# zfs snapshot zroot/jails/templates/13.2-RELEASE@base\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:446
+msgid ""
+"Once the OpenZFS Snapshot has been created, infinite jails can be created "
+"using the OpenZFS clone function."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:448
+msgid "To create a Thin Jail named `thinjail`, execute the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:452
+#, no-wrap
+msgid "# zfs clone zroot/jails/templates/13.2-RELEASE@base zroot/jails/containers/thinjail\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:466
+#: documentation/content/en/books/handbook/jails/_index.adoc:620
+#, no-wrap
+msgid ""
+"thinjail {\n"
+" # STARTUP/LOGGING\n"
+" exec.start = \"/bin/sh /etc/rc\";\n"
+" exec.stop = \"/bin/sh /etc/rc.shutdown\";\n"
+" exec.consolelog = \"/var/log/jail_console_${name}.log\";\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:480
+#, no-wrap
+msgid ""
+" # NETWORK\n"
+" ip4 = inherit;\n"
+" interface = em0;\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:487
+#: documentation/content/en/books/handbook/jails/_index.adoc:652
+#, no-wrap
+msgid "# service jail start thinjail\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/jails/_index.adoc:492
+#, no-wrap
+msgid "Creating a Thin Jail Using NullFS"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:495
+msgid ""
+"A jail can be created with reduced duplication of system files by using the "
+"Thin Jail technique and using NullFS to selectively share specific "
+"directories from the host system into the jail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:497
+msgid ""
+"The first step is to create the dataset to save the template, execute the "
+"following command if using OpenZFS:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:501
+#, no-wrap
+msgid "# zfs create -p zroot/jails/templates/13.2-RELEASE-base\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:504
+msgid "Or this one if using UFS:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:508
+#, no-wrap
+msgid "# mkdir /usr/local/jails/templates/13.2-RELEASE-base\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:522
+#, no-wrap
+msgid "# tar -xf /usr/local/jails/media/13.2-RELEASE-base.txz -C /usr/local/jails/templates/13.2-RELEASE-base --unlink\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:525
+msgid ""
+"Once the userland is extracted in the templates directory, it will be "
+"necessary to copy the timezone and DNS server files to the template "
+"directory by executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:530
+#, no-wrap
+msgid ""
+"# cp /etc/resolv.conf /usr/local/jails/templates/13.2-RELEASE-base/etc/resolv.conf\n"
+"# cp /etc/localtime /usr/local/jails/templates/13.2-RELEASE-base/etc/localtime\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:533
+msgid ""
+"With the files moved to the template, the next thing to do is update to the "
+"latest patch level by executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:537
+#, no-wrap
+msgid "# freebsd-update -b /usr/local/jails/templates/13.2-RELEASE-base/ fetch install\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:541
+msgid ""
+"In addition to the base template, it is also necessary to create a directory "
+"where the `skeleton` will be located. Some directories will be copied from "
+"the template to the `skeleton`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:543
+msgid ""
+"Execute the following command to create the dataset for the `skeleton` in "
+"case of using OpenZFS:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:547
+#, no-wrap
+msgid "# zfs create -p zroot/jails/templates/13.2-RELEASE-skeleton\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:550
+msgid "Or this one in case of using UFS:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:554
+#, no-wrap
+msgid "# mkdir /usr/local/jails/templates/13.2-RELEASE-skeleton\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:558
+msgid ""
+"Then create the `skeleton` directories. The `skeleton` directories will "
+"hold the local directories of the jails."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:560
+msgid "Execute the following commands to create the directories:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:570
+#, no-wrap
+msgid ""
+"# mkdir -p /usr/local/jails/templates/13.2-RELEASE-skeleton/home\n"
+"# mkdir -p /usr/local/jails/templates/13.2-RELEASE-skeleton/usr\n"
+"# mv /usr/local/jails/templates/13.2-RELEASE-base/etc /usr/local/jails/templates/13.2-RELEASE-skeleton/etc\n"
+"# mv /usr/local/jails/templates/13.2-RELEASE-base/usr/local /usr/local/jails/templates/13.2-RELEASE-skeleton/usr/local\n"
+"# mv /usr/local/jails/templates/13.2-RELEASE-base/tmp /usr/local/jails/templates/13.2-RELEASE-skeleton/tmp\n"
+"# mv /usr/local/jails/templates/13.2-RELEASE-base/var /usr/local/jails/templates/13.2-RELEASE-skeleton/var\n"
+"# mv /usr/local/jails/templates/13.2-RELEASE-base/root /usr/local/jails/templates/13.2-RELEASE-skeleton/root\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:573
+msgid ""
+"The next step is to create the symlinks to the `skeleton` by executing the "
+"following commands:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:584
+#, no-wrap
+msgid ""
+"# cd /usr/local/jails/templates/13.2-RELEASE-base/\n"
+"# mkdir skeleton\n"
+"# ln -s skeleton/etc etc\n"
+"# ln -s skeleton/home home\n"
+"# ln -s skeleton/root root\n"
+"# ln -s skeleton/usr/local usr/local\n"
+"# ln -s skeleton/tmp tmp\n"
+"# ln -s skeleton/var var\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:587
+msgid ""
+"With the `skeleton` ready, it will be necessary to copy the data to the jail "
+"directory."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:589
+msgid ""
+"In case of using OpenZFS, OpenZFS snapshots can be used to easily create as "
+"many jails as necessary by executing the following commands:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:594
+#, no-wrap
+msgid ""
+"# zfs snapshot zroot/jails/templates/13.2-RELEASE-skeleton@base\n"
+"# zfs clone zroot/jails/templates/13.2-RELEASE-skeleton@base zroot/jails/containers/thinjail\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:597
+msgid ""
+"In case of using UFS the man:cp[1] program can be used by executing the "
+"following commands:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:602
+#, no-wrap
+msgid ""
+"# mkdir /usr/local/jails/containers/thinjail\n"
+"# cp -R /usr/local/jails/templates/13.2-RELEASE-skeleton /usr/local/jails/containers/thinjail\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:605
+msgid ""
+"Then create the directory in which the base template and the skeleton will "
+"be mounted:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:609
+#, no-wrap
+msgid "# mkdir -p /usr/local/jails/thinjail-nullfs-base\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:612
+msgid ""
+"Add a jail entry in [.filename]#/etc/jail.conf# or a file in [."
+"filename]#jail.conf.d# as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:633
+#, no-wrap
+msgid ""
+" # NETWORK\n"
+" ip4.addr = 192.168.1.153;\n"
+" interface = em0;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:637
+#, no-wrap
+msgid ""
+" # MOUNT\n"
+" mount.fstab = \"/usr/local/jails/thinjail-nullfs-base.fstab\";\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:640
+msgid ""
+"Then the create the [.filename]#/usr/local/jails/thinjail-nullfs-base.fstab# "
+"file as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:645
+#, no-wrap
+msgid ""
+"/usr/local/jails/templates/13.2-RELEASE-base /usr/local/jails/thinjail-nullfs-base/ nullfs ro 0 0\n"
+"/usr/local/jails/containers/thinjail /usr/local/jails/thinjail-nullfs-base/skeleton nullfs rw 0 0\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/jails/_index.adoc:655
+#, no-wrap
+msgid "Creating a VNET Jail"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:658
+msgid ""
+"FreeBSD VNET Jails have their own distinct networking stack, including "
+"interfaces, IP addresses, routing tables, and firewall rules."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:660
+msgid ""
+"The first step to create a VNET jail is to create the man:bridge[4] by "
+"executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:664
+#, no-wrap
+msgid "# ifconfig bridge create\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:667
+#: documentation/content/en/books/handbook/jails/_index.adoc:883
+#: documentation/content/en/books/handbook/jails/_index.adoc:899
+msgid "The output should be similar to the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:671
+#, no-wrap
+msgid "bridge0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:674
+msgid ""
+"With the `bridge` created, it will be necessary to attach it to the `em0` "
+"interface by executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:678
+#, no-wrap
+msgid "# ifconfig bridge0 addm em0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:681
+msgid ""
+"To make this setting persist across reboots, add the following lines to [."
+"filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:687
+#, no-wrap
+msgid ""
+"defaultrouter=\"192.168.1.1\"\n"
+"cloned_interfaces=\"bridge0\"\n"
+"ifconfig_bridge0=\"inet 192.168.1.150/24 addm em0 up\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:690
+msgid "The next step is to create the jail as indicated above."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:693
+msgid ""
+"Either the <<classic-jail>> procedure and the <<thin-jail>> procedure can be "
+"used. The only thing that will change is the configuration in the [."
+"filename]#/etc/jail.conf# file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:695
+msgid ""
+"The path [.filename]#/usr/local/jails/containers/vnet# will be used as an "
+"example for the created jail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:697
+msgid "The following is an example configuration for a VNET jail:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:705
+#, no-wrap
+msgid ""
+"vnet {\n"
+" # STARTUP/LOGGING\n"
+" exec.start = \"/bin/sh /etc/rc\";\n"
+" exec.stop = \"/bin/sh /etc/rc.shutdown\";\n"
+" exec.consolelog = \"/var/log/jail_console_${name}.log\";\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:711
+#, no-wrap
+msgid ""
+" # PERMISSIONS\n"
+" allow.raw_sockets;\n"
+" exec.clean;\n"
+" mount.devfs;\n"
+" devfs_ruleset = 5;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:715
+#, no-wrap
+msgid ""
+" # PATH/HOSTNAME\n"
+" path = \"/usr/local/jails/containers/${name}\";\n"
+" host.hostname = \"${name}\";\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:719
+#, no-wrap
+msgid ""
+" # VNET/VIMAGE\n"
+" vnet;\n"
+" vnet.interface = \"${epair}b\";\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:726
+#, no-wrap
+msgid ""
+" # NETWORKS/INTERFACES\n"
+" $id = \"154\"; <.>\n"
+" $ip = \"192.168.1.${id}/24\";\n"
+" $gateway = \"192.168.1.1\";\n"
+" $bridge = \"bridge0\"; <.>\n"
+" $epair = \"epair${id}\";\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:736
+#, no-wrap
+msgid ""
+" # ADD TO bridge INTERFACE\n"
+" exec.prestart += \"ifconfig ${epair} create up\";\n"
+" exec.prestart += \"ifconfig ${epair}a up descr jail:${name}\";\n"
+" exec.prestart += \"ifconfig ${bridge} addm ${epair}a up\";\n"
+" exec.start += \"ifconfig ${epair}b ${ip} up\";\n"
+" exec.start += \"route add default ${gateway}\";\n"
+" exec.poststop = \"ifconfig ${bridge} deletem ${epair}a\";\n"
+" exec.poststop += \"ifconfig ${epair}a destroy\";\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:739
+msgid "Represents the IP of the Jail, it must be *unique*."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:740
+msgid "Refers to the bridge created previously."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/jails/_index.adoc:742
+#, no-wrap
+msgid "Creating a Linux Jail"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:748
+msgid ""
+"FreeBSD can run Linux inside a jail using crossref:linuxemu[linuxemu,Linux "
+"Binary Compatibility] and man:debootstrap[8]. Jails do not have a kernel. "
+"They run on the host's kernel. Therefore it is necessary to enable Linux "
+"Binary Compatibility in the host system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:750
+msgid "To enable the Linux ABI at boot time, execute the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:754
+#, no-wrap
+msgid "# sysrc linux_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:757
+msgid ""
+"Once enabled, it can be started without rebooting by executing the following "
+"command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:761
+#, no-wrap
+msgid "# service linux start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:765
+msgid ""
+"The next step will be to create a jail as indicated above, for example in "
+"<<creating-thin-jail-openzfs-snapshots>>, but *without* performing the "
+"configuration. FreeBSD Linux jails require a specific configuration that "
+"will be detailed below."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:767
+msgid ""
+"Once the jail has been created as explained above, execute the following "
+"command to perform required configuration for the jail and start it:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:788
+#, no-wrap
+msgid ""
+"# jail -cm \\\n"
+" name=ubuntu \\\n"
+" host.hostname=\"ubuntu.example.com\" \\\n"
+" path=\"/usr/local/jails/ubuntu\" \\\n"
+" interface=\"em0\" \\\n"
+" ip4.addr=\"192.168.1.150\" \\\n"
+" exec.start=\"/bin/sh /etc/rc\" \\\n"
+" exec.stop=\"/bin/sh /etc/rc.shutdown\" \\\n"
+" mount.devfs \\\n"
+" devfs_ruleset=4 \\\n"
+" allow.mount \\\n"
+" allow.mount.devfs \\\n"
+" allow.mount.fdescfs \\\n"
+" allow.mount.procfs \\\n"
+" allow.mount.linprocfs \\\n"
+" allow.mount.linsysfs \\\n"
+" allow.mount.tmpfs \\\n"
+" enforce_statfs=1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:791
+msgid ""
+"To access the jail, it will be necessary to install package:sysutils/"
+"debootstrap[]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:793
+msgid "Execute the following command to access the FreeBSD Linux jail:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:797
+#, no-wrap
+msgid "# jexec -u root ubuntu\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:800
+msgid ""
+"Inside the jail, execute the following commands to install package:sysutils/"
+"debootstrap[] and prepare the Ubuntu environment:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:805
+#, no-wrap
+msgid ""
+"# pkg install debootstrap\n"
+"# debootstrap jammy /compat/ubuntu\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:809
+msgid ""
+"When the process has finished and the message `Base system installed "
+"successfully` is displayed on the console, it will be necessary to stop the "
+"jail from the host system by executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:813
+#, no-wrap
+msgid "# service jail onestop ubuntu\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:816
+msgid "Then add an entry in [.filename]#/etc/jail.conf# for the Linux jail:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:824
+#, no-wrap
+msgid ""
+"ubuntu {\n"
+" # STARTUP/LOGGING\n"
+" exec.start = \"/bin/sh /etc/rc\";\n"
+" exec.stop = \"/bin/sh /etc/rc.shutdown\";\n"
+" exec.consolelog = \"/var/log/jail_console_${name}.log\";\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:830
+#, no-wrap
+msgid ""
+" # PERMISSIONS\n"
+" allow.raw_sockets;\n"
+" exec.clean;\n"
+" mount.devfs;\n"
+" devfs_ruleset=4;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:838
+#, no-wrap
+msgid ""
+" # NETWORK\n"
+" ip4.addr = 192.168.1.155;\n"
+" interface = em0;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:848
+#, no-wrap
+msgid ""
+" # MOUNT\n"
+" mount += \"devfs $path/compat/ubuntu/dev devfs rw 0 0\";\n"
+" mount += \"tmpfs $path/compat/ubuntu/dev/shm tmpfs rw,size=1g,mode=1777 0 0\";\n"
+" mount += \"fdescfs $path/compat/ubuntu/dev/fd fdescfs rw,linrdlnk 0 0\";\n"
+" mount += \"linprocfs $path/compat/ubuntu/proc linprocfs rw 0 0\";\n"
+" mount += \"linsysfs $path/compat/ubuntu/sys linsysfs rw 0 0\";\n"
+" mount += \"/tmp $path/compat/ubuntu/tmp nullfs rw 0 0\";\n"
+" mount += \"/home $path/compat/ubuntu/home nullfs rw 0 0\";\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:851
+msgid "Then the jail can be started as usual with the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:855
+#, no-wrap
+msgid "# service jail start ubuntu\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:858
+msgid "The Ubuntu environment can be accessed using the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:862
+#, no-wrap
+msgid "# jexec ubuntu chroot /compat/ubuntu /bin/bash\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:865
+msgid ""
+"More information can be found in the chapter crossref:linuxemu[linuxemu,"
+"Linux Binary Compatibility]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/jails/_index.adoc:867
+#, no-wrap
+msgid "Jail Management"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:871
+msgid ""
+"Once the jail is created, there are a number of operations that can be "
+"performed, like starting, rebooting or deleting the jail, installing "
+"software in it, etc. In this section the different actions that can be done "
+"with jails from the host will be described."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/jails/_index.adoc:873
+#, no-wrap
+msgid "List Running Jails"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:876
+msgid ""
+"To list the jails that are running on the host system, the command man:"
+"jls[8] can be used:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:880
+#, no-wrap
+msgid "# jls\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:887
+#, no-wrap
+msgid ""
+" JID IP Address Hostname Path\n"
+" 1 192.168.250.70 classic /usr/local/jails/containers/classic\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:890
+msgid ""
+"man:jls[8] supports the `--libxo` argument, which through the man:libxo[3] "
+"library allows other types of formats to be displayed, such as `JSON`, "
+"`HTML`, etc."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:892
+msgid "For example, execute the following command to get the `JSON` output:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:896
+#, no-wrap
+msgid "# jls --libxo=json\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:902
+#, no-wrap
+msgid "{\"__version\": \"2\", \"jail-information\": {\"jail\": [{\"jid\":1,\"ipv4\":\"192.168.250.70\",\"hostname\":\"classic\",\"path\":\"/usr/local/jails/containers/classic\"}]}}\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/jails/_index.adoc:905
+#, no-wrap
+msgid "Start, Restart, and Stop a Jail"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:908
+msgid "man:service[8] is used to start, reboot, or stop a jail on the host."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:910
+msgid "For example, to start a jail, run the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:914
+#, no-wrap
+msgid "# service jail start jailname\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:917
+msgid ""
+"Change the `start` argument to `restart` or `stop` to perform other actions "
+"on the jail."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/jails/_index.adoc:919
+#, no-wrap
+msgid "Destroy a Jail"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:922
+msgid ""
+"Destroying a jail is not as simple as stopping the jail using man:service[8] "
+"and removing the jail directory and [.filename]#/etc/jail.conf# entry."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:926
+msgid ""
+"FreeBSD takes system security very seriously. For this reason there are "
+"certain files that not even the root user can delete. This functionality is "
+"known as File Flags."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:928
+msgid ""
+"The first step is to stop the desired jail executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:932
+#, no-wrap
+msgid "# service jail stop jailname\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:935
+msgid ""
+"The second step is to remove these flags with man:chflags[1] by executing "
+"the following command, in which `classic` is the name of the jail to remove:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:939
+#, no-wrap
+msgid "# chflags -R 0 /usr/local/jails/classic\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:942
+msgid "The third step is to delete the directory where the jail was:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:946
+#, no-wrap
+msgid "# rm -rf /usr/local/jails/classic\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:949
+msgid ""
+"Finally, it will be necessary to remove the jail entry in [.filename]#/etc/"
+"jail.conf# or in [.filename]#jail.conf.d#."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/jails/_index.adoc:951
+#, no-wrap
+msgid "Handle Packages in a Jail"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:954
+msgid ""
+"The man:pkg[8] tool supports the `-j` argument in order to handle packages "
+"installed inside the jail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:956
+msgid ""
+"For example, to install package:nginx-lite[] in the jail, the next command "
+"can be executed *from the host*:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:960
+#, no-wrap
+msgid "# pkg -j classic install nginx-lite\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:963
+msgid ""
+"For more information on working with packages in FreeBSD, see crossref:"
+"ports[ports,\"Installing Applications: Packages and Ports\"]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/jails/_index.adoc:965
+#, no-wrap
+msgid "Access a Jail"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:968
+msgid ""
+"While it has been stated above that it is best to manage jails from the host "
+"system, a jail can be entered with man:jexec[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:970
+msgid "The jail can be entered by running man:jexec[8] from the host:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:974
+#, no-wrap
+msgid "# jexec -u root jailname\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:977
+msgid ""
+"When gaining access to the jail, the message configured in man:motd[5] will "
+"be displayed."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/jails/_index.adoc:979
+#, no-wrap
+msgid "Execute Commands in a Jail"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:982
+msgid ""
+"To execute a command from the host system in a jail the man:jexec[8] can be "
+"used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:984
+msgid ""
+"For example, to stop a service that is running inside a jail, the command "
+"will be executed:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:988
+#, no-wrap
+msgid "# jexec -l jailname service stop nginx\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/jails/_index.adoc:991
+#, no-wrap
+msgid "Jail Upgrading"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:994
+msgid ""
+"Upgrading FreeBSD Jails ensures that the isolated environments remain "
+"secure, up-to-date, and in line with the latest features and improvements "
+"available in the FreeBSD ecosystem."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/jails/_index.adoc:996
+#, no-wrap
+msgid "Upgrading a Classic Jail or a Thin Jail using OpenZFS Snapshots"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:1001
+msgid ""
+"Jails *must be updated from the host* operating system. The default "
+"behavior in FreeBSD is to disallow the use of man:chflags[1] in a jail. "
+"This will prevent the update of some files so updating from within the jail "
+"will fail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:1003
+msgid ""
+"To update the jail to the latest patch release of the version of FreeBSD it "
+"is running, execute the following commands on the host:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:1008
+#, no-wrap
+msgid ""
+"# freebsd-update -j classic fetch install\n"
+"# service jail restart classic\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:1012
+msgid ""
+"To upgrade the jail to a new major or minor version, first upgrade the host "
+"system as described in crossref:cutting-edge[freebsdupdate-upgrade,"
+"\"Performing Major and Minor Version Upgrades\"]. Once the host has been "
+"upgraded and rebooted, the jail can then be upgraded."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:1016
+msgid ""
+"In case of upgrade from one version to another, it is easier to create a new "
+"jail than to upgrade completely."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:1019
+msgid ""
+"For example to upgrade from 13.1-RELEASE to 13.2-RELEASE, execute the "
+"following commands on the host:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:1027
+#, no-wrap
+msgid ""
+"# freebsd-update -j classic -r 13.2-RELEASE upgrade\n"
+"# freebsd-update -j classic install\n"
+"# service jail restart classic\n"
+"# freebsd-update -j classic install\n"
+"# service jail restart classic\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:1033
+msgid ""
+"It is necessary to execute the `install` step two times. The first one "
+"upgrades the kernel, and the second one upgrades the rest of the components."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:1037
+msgid ""
+"Then, if it was a major version upgrade, reinstall all installed packages "
+"and restart the jail again. This is required because the ABI version "
+"changes when upgrading between major versions of FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:1039
+msgid "From the host:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:1044
+#, no-wrap
+msgid ""
+"# pkg -j jailname upgrade -f\n"
+"# service jail restart jailname\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/jails/_index.adoc:1047
+#, no-wrap
+msgid "Upgrading a Thin Jail Using NullFS"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:1052
+msgid ""
+"Since Thin Jails that use NullFS share the majority of system directories, "
+"they are very easy to update. It is enough to update the template. This "
+"allows updating multiple jails at the same time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:1054
+msgid ""
+"To update the template to the latest patch release of the version of FreeBSD "
+"it is running, execute the following commands on the host:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:1059
+#, no-wrap
+msgid ""
+"# freebsd-update -b /usr/local/jails/templates/13.1-RELEASE-base/ fetch install\n"
+"# service jail restart\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:1063
+msgid ""
+"To upgrade the template to a new major or minor version, first upgrade the "
+"host system as described in crossref:cutting-edge[freebsdupdate-upgrade,"
+"\"Performing Major and Minor Version Upgrades\"]. Once the host has been "
+"upgraded and rebooted, the template can then be upgraded."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:1065
+msgid ""
+"For example, to upgrade from 13.1-RELEASE to 13.2-RELEASE, execute the "
+"following commands on the host:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:1073
+#, no-wrap
+msgid ""
+"# freebsd-update -b /usr/local/jails/templates/13.1-RELEASE-base/ -r 13.2-RELEASE upgrade\n"
+"# freebsd-update -b /usr/local/jails/templates/13.1-RELEASE-base/ install\n"
+"# service jail restart\n"
+"# freebsd-update -b /usr/local/jails/templates/13.1-RELEASE-base/ install\n"
+"# service jail restart\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/jails/_index.adoc:1076
+#, no-wrap
+msgid "Jail Resource Limits"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:1079
+msgid ""
+"Controlling the resources that a jail uses from the host system is a task to "
+"be taken into account by the system administrator."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:1081
+msgid ""
+"man:rctl[8] allows you to manage the resources that a jail can use from the "
+"host system."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:1085
+msgid ""
+"The `kern.racct.enable` tunable must be enabled at [.filename]#/boot/loader."
+"conf#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:1088
+msgid "The syntax to limit the resources of a jail is as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:1092
+#, no-wrap
+msgid "rctl -a jail:<jailname>:resource:action=amount/percentage\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:1095
+msgid ""
+"For example, to limit the maximum RAM that a jail can access, run the "
+"following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:1099
+#, no-wrap
+msgid "# rctl -a jail:classic:memoryuse:deny=2G\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:1102
+msgid ""
+"To make the limitation persistent across reboots of the host system, it will "
+"be necessary to add the rule to the [.filename]#/etc/rctl.conf# file as "
+"follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/jails/_index.adoc:1106
+#, no-wrap
+msgid "jail:classic:memoryuse:deny=2G/jail\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:1109
+msgid ""
+"More information on resource limits can be found in the security chapter in "
+"the crossref:security[security-resourcelimits,\"Resource Limits section\"]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/jails/_index.adoc:1111
+#, no-wrap
+msgid "Jail Managers and Containers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:1114
+msgid ""
+"As previously explained, each type of FreeBSD Jail can be created and "
+"configured manually, but FreeBSD also has third-party utilities to make "
+"configuration and administration easier."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/jails/_index.adoc:1116
+msgid "Below is an incomplete list of the different FreeBSD Jail managers:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/jails/_index.adoc:1117
+#, no-wrap
+msgid "Jail Managers"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/jails/_index.adoc:1120
+#, no-wrap
+msgid "Name"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/jails/_index.adoc:1120
+#, no-wrap
+msgid "License"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/jails/_index.adoc:1120
+#, no-wrap
+msgid "Package"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/jails/_index.adoc:1122
+#, no-wrap
+msgid "Documentation"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/jails/_index.adoc:1123
+#, no-wrap
+msgid "BastilleBSD"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/jails/_index.adoc:1124
+#: documentation/content/en/books/handbook/jails/_index.adoc:1129
+#: documentation/content/en/books/handbook/jails/_index.adoc:1139
+#, no-wrap
+msgid "BSD-3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/jails/_index.adoc:1125
+#, no-wrap
+msgid "package:sysutils/bastille[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/jails/_index.adoc:1127
+#, no-wrap
+msgid "link:https://bastille.readthedocs.io/en/latest/[Documentation]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/jails/_index.adoc:1128
+#, no-wrap
+msgid "pot"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/jails/_index.adoc:1130
+#, no-wrap
+msgid "package:sysutils/pot[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/jails/_index.adoc:1132
+#, no-wrap
+msgid "link:https://pot.pizzamig.dev/[Documentation]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/jails/_index.adoc:1133
+#, no-wrap
+msgid "cbsd"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/jails/_index.adoc:1134
+#: documentation/content/en/books/handbook/jails/_index.adoc:1144
+#, no-wrap
+msgid "BSD-2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/jails/_index.adoc:1135
+#, no-wrap
+msgid "package:sysutils/cbsd[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/jails/_index.adoc:1137
+#, no-wrap
+msgid "link:https://www.bsdstore.ru/en/docs.html[Documentation]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/jails/_index.adoc:1138
+#, no-wrap
+msgid "AppJail"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/jails/_index.adoc:1140
+#, no-wrap
+msgid "package:sysutils/appjail[], for devel package:sysutils/appjail-devel[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/jails/_index.adoc:1142
+#, no-wrap
+msgid "link:https://github.com/DtxdF/AppJail#getting-started[Documentation]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/jails/_index.adoc:1143
+#, no-wrap
+msgid "iocage"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/jails/_index.adoc:1145
+#, no-wrap
+msgid "package:sysutils/iocage[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/jails/_index.adoc:1147
+#, no-wrap
+msgid "link:https://iocage.readthedocs.io/en/latest/[Documentation]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/jails/_index.adoc:1148
+#, no-wrap
+msgid "ezjail"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/jails/_index.adoc:1149
+#, no-wrap
+msgid "link:https://erdgeist.org/beerware.html[Beer Ware]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/jails/_index.adoc:1150
+#, no-wrap
+msgid "package:sysutils/ezjail[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/jails/_index.adoc:1152
+#, no-wrap
+msgid "link:https://erdgeist.org/arts/software/ezjail/[Documentation]"
+msgstr ""
diff --git a/documentation/content/en/books/handbook/kernelconfig/_index.adoc b/documentation/content/en/books/handbook/kernelconfig/_index.adoc
index aa6e412569..ad43932fc6 100644
--- a/documentation/content/en/books/handbook/kernelconfig/_index.adoc
+++ b/documentation/content/en/books/handbook/kernelconfig/_index.adoc
@@ -1,13 +1,13 @@
---
-title: Chapter 8. Configuring the FreeBSD Kernel
+title: Chapter 10. Configuring the FreeBSD Kernel
part: Part II. Common Tasks
prev: books/handbook/multimedia
next: books/handbook/printing
description: This chapter covers how to configure the FreeBSD Kernel. When to build a custom kernel, how to take a hardware inventory, how to customize a kernel configuration file, etc
tags: ["configuring", "kernel", "custom kernel", "hardware requirements", "pciconf"]
showBookMenu: true
-weight: 11
-path: "/books/handbook/"
+weight: 13
+path: "/books/handbook/kernelconfig/"
---
[[kernelconfig]]
@@ -18,7 +18,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 8
+:sectnumoffset: 10
:partnums:
:source-highlighter: rouge
:experimental:
@@ -94,7 +94,7 @@ If there is a need for specific hardware support, it may already exist as a modu
Kernel modules exist in [.filename]#/boot/kernel# and may be dynamically loaded into the running kernel using man:kldload[8].
Most kernel drivers have a loadable module and manual page.
-For example, the man:ath[4] wireless Ethernet driver has the following information in its manual page:
+For example, the man:ath[4] wireless network driver has the following information in its manual page:
[source,shell,subs="macros"]
....
@@ -170,7 +170,7 @@ Once the hardware inventory list is created, refer to it to ensure that drivers
In order to create a custom kernel configuration file and build a custom kernel, the full FreeBSD source tree must first be installed.
If [.filename]#/usr/src/# does not exist or it is empty, source has not been installed.
-Source can be installed using Git and the instructions in crossref:mirrors[git,“Using Git”].
+Source can be installed with Git using the instructions in crossref:mirrors[git,“Using Git”].
Once source is installed, review the contents of [.filename]#/usr/src/sys#.
This directory contains a number of subdirectories, including those which represent the following supported architectures: [.filename]#amd64#, [.filename]#i386#, [.filename]#powerpc#, and [.filename]#sparc64#.
@@ -194,9 +194,9 @@ The default editor is vi, though an easier editor for beginners, called ee, is a
The format of the kernel configuration file is simple.
Each line contains a keyword that represents a device or subsystem, an argument, and a brief description.
-Any text after a `#` is considered a comment and ignored.
-To remove kernel support for a device or subsystem, put a `#` at the beginning of the line representing that device or subsystem.
-Do not add or remove a `#` for any line that you do not understand.
+Any text after a `+#+` is considered a comment and ignored.
+To remove kernel support for a device or subsystem, put a `+#+` at the beginning of the line representing that device or subsystem.
+Do not add or remove a `+#+` for any line that you do not understand.
[WARNING]
====
@@ -260,29 +260,32 @@ To build a file which contains all available options, run the following command
Once the edits to the custom configuration file have been saved, the source code for the kernel can be compiled using the following steps:
[.procedure]
+====
*Procedure: Building a Kernel*
+
. Change to this directory:
+
[source,shell]
....
# cd /usr/src
....
-
++
. Compile the new kernel by specifying the name of the custom kernel configuration file:
+
[source,shell]
....
# make buildkernel KERNCONF=MYKERNEL
....
-
++
. Install the new kernel associated with the specified kernel configuration file. This command will copy the new kernel to [.filename]#/boot/kernel/kernel# and save the old kernel to [.filename]#/boot/kernel.old/kernel#:
+
[source,shell]
....
# make installkernel KERNCONF=MYKERNEL
....
-
++
. Shutdown the system and reboot into the new kernel. If something goes wrong, refer to <<kernelconfig-noboot, The kernel does not boot>>.
+====
By default, when a custom kernel is compiled, all kernel modules are rebuilt.
To update a kernel faster or to build only custom modules, edit [.filename]#/etc/make.conf# before starting to build the kernel.
@@ -335,7 +338,7 @@ Also, man:dmesg[8] will print the kernel messages from the current boot.
+
[NOTE]
====
-When troubleshooting a kernel, make sure to keep a copy of [.filename]#GENERIC#, or some other kernel that is known to work, as a different name that will not get erased on the next build.
+When troubleshooting a kernel make sure to keep a copy of a kernel that is known to work, such as [.filename]#GENERIC#.
This is important because every time a new kernel is installed, [.filename]#kernel.old# is overwritten with the last installed kernel, which may or may not be bootable.
As soon as possible, move the working kernel by renaming the directory containing the good kernel:
diff --git a/documentation/content/en/books/handbook/kernelconfig/_index.po b/documentation/content/en/books/handbook/kernelconfig/_index.po
new file mode 100644
index 0000000000..2274d28ba3
--- /dev/null
+++ b/documentation/content/en/books/handbook/kernelconfig/_index.po
@@ -0,0 +1,705 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-07-15 16:41-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:1
+#, no-wrap
+msgid "This chapter covers how to configure the FreeBSD Kernel. When to build a custom kernel, how to take a hardware inventory, how to customize a kernel configuration file, etc"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:1
+#, no-wrap
+msgid "Part II. Common Tasks"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:1
+#, no-wrap
+msgid "Chapter 10. Configuring the FreeBSD Kernel"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:14
+#, no-wrap
+msgid "Configuring the FreeBSD Kernel"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:57
+msgid ""
+"The kernel is the core of the FreeBSD operating system. It is responsible "
+"for managing memory, enforcing security controls, networking, disk access, "
+"and much more. While much of FreeBSD is dynamically configurable, it is "
+"still occasionally necessary to configure and compile a custom kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:59
+msgid "After reading this chapter, you will know:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:61
+msgid "When to build a custom kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:62
+msgid "How to take a hardware inventory."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:63
+msgid "How to customize a kernel configuration file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:64
+msgid ""
+"How to use the kernel configuration file to create and build a new kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:65
+msgid "How to install the new kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:66
+msgid "How to troubleshoot if things go wrong."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:68
+msgid ""
+"All of the commands listed in the examples in this chapter should be "
+"executed as `root`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:70
+#, no-wrap
+msgid "Why Build a Custom Kernel?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:74
+msgid ""
+"Traditionally, FreeBSD used a monolithic kernel. The kernel was one large "
+"program, supported a fixed list of devices, and in order to change the "
+"kernel's behavior, one had to compile and then reboot into a new kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:78
+msgid ""
+"Today, most of the functionality in the FreeBSD kernel is contained in "
+"modules which can be dynamically loaded and unloaded from the kernel as "
+"necessary. This allows the running kernel to adapt immediately to new "
+"hardware and for new functionality to be brought into the kernel. This is "
+"known as a modular kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:82
+msgid ""
+"Occasionally, it is still necessary to perform static kernel configuration. "
+"Sometimes the needed functionality is so tied to the kernel that it can not "
+"be made dynamically loadable. Some security environments prevent the "
+"loading and unloading of kernel modules and require that only needed "
+"functionality is statically compiled into the kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:87
+msgid ""
+"Building a custom kernel is often a rite of passage for advanced BSD users. "
+"This process, while time consuming, can provide benefits to the FreeBSD "
+"system. Unlike the [.filename]#GENERIC# kernel, which must support a wide "
+"range of hardware, a custom kernel can be stripped down to only provide "
+"support for that computer's hardware. This has a number of benefits, such "
+"as:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:89
+msgid ""
+"Faster boot time. Since the kernel will only probe the hardware on the "
+"system, the time it takes the system to boot can decrease."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:90
+msgid ""
+"Lower memory usage. A custom kernel often uses less memory than the [."
+"filename]#GENERIC# kernel by omitting unused features and device drivers. "
+"This is important because the kernel code remains resident in physical "
+"memory at all times, preventing that memory from being used by applications. "
+"For this reason, a custom kernel is useful on a system with a small amount "
+"of RAM."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:91
+msgid ""
+"Additional hardware support. A custom kernel can add support for devices "
+"which are not present in the [.filename]#GENERIC# kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:94
+msgid ""
+"Before building a custom kernel, consider the reason for doing so. If there "
+"is a need for specific hardware support, it may already exist as a module."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:98
+msgid ""
+"Kernel modules exist in [.filename]#/boot/kernel# and may be dynamically "
+"loaded into the running kernel using man:kldload[8]. Most kernel drivers "
+"have a loadable module and manual page. For example, the man:ath[4] "
+"wireless network driver has the following information in its manual page:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:103
+#, no-wrap
+msgid ""
+"Alternatively, to load the driver as a module at boot time, place the\n"
+"following line in man:loader.conf[5]:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:105
+#, no-wrap
+msgid " if_ath_load=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:108
+msgid ""
+"Adding `if_ath_load=\"YES\"` to [.filename]#/boot/loader.conf# will load "
+"this module dynamically at boot time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:111
+msgid ""
+"In some cases, there is no associated module in [.filename]#/boot/kernel#. "
+"This is mostly true for certain subsystems."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:113
+#, no-wrap
+msgid "Finding the System Hardware"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:118
+msgid ""
+"Before editing the kernel configuration file, it is recommended to perform "
+"an inventory of the machine's hardware. On a dual-boot system, the "
+"inventory can be created from the other operating system. For example, "
+"Microsoft(R)'s Device Manager contains information about installed devices."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:122
+msgid ""
+"Some versions of Microsoft(R) Windows(R) have a System icon which can be "
+"used to access Device Manager."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:127
+msgid ""
+"If FreeBSD is the only installed operating system, use man:dmesg[8] to "
+"determine the hardware that was found and listed during the boot probe. "
+"Most device drivers on FreeBSD have a manual page which lists the hardware "
+"supported by that driver. For example, the following lines indicate that "
+"the man:psm[4] driver found a mouse:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:134
+#, no-wrap
+msgid ""
+"psm0: <PS/2 Mouse> irq 12 on atkbdc0\n"
+"psm0: [GIANT-LOCKED]\n"
+"psm0: [ITHREAD]\n"
+"psm0: model Generic PS/2 mouse, device ID 0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:137
+msgid ""
+"Since this hardware exists, this driver should not be removed from a custom "
+"kernel configuration file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:139
+msgid ""
+"If the output of `dmesg` does not display the results of the boot probe "
+"output, instead read the contents of [.filename]#/var/run/dmesg.boot#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:142
+msgid ""
+"Another tool for finding hardware is man:pciconf[8], which provides more "
+"verbose output. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:151
+#, no-wrap
+msgid ""
+"% pciconf -lv\n"
+"ath0@pci0:3:0:0: class=0x020000 card=0x058a1014 chip=0x1014168c rev=0x01 hdr=0x00\n"
+" vendor = 'Atheros Communications Inc.'\n"
+" device = 'AR5212 Atheros AR5212 802.11abg wireless'\n"
+" class = network\n"
+" subclass = ethernet\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:154
+msgid ""
+"This output shows that the [.filename]#ath# driver located a wireless "
+"Ethernet device."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:157
+msgid ""
+"The `-k` flag of man:man[1] can be used to provide useful information. For "
+"example, it can be used to display a list of manual pages which contain a "
+"particular device brand or name:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:163
+#, no-wrap
+msgid ""
+"# man -k Atheros\n"
+"ath(4) - Atheros IEEE 802.11 wireless network driver\n"
+"ath_hal(4) - Atheros Hardware Access Layer (HAL)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:166
+msgid ""
+"Once the hardware inventory list is created, refer to it to ensure that "
+"drivers for installed hardware are not removed as the custom kernel "
+"configuration is edited."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:168
+#, no-wrap
+msgid "The Configuration File"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:171
+msgid ""
+"In order to create a custom kernel configuration file and build a custom "
+"kernel, the full FreeBSD source tree must first be installed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:174
+msgid ""
+"If [.filename]#/usr/src/# does not exist or it is empty, source has not been "
+"installed. Source can be installed with Git using the instructions in "
+"crossref:mirrors[git,“Using Git”]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:179
+msgid ""
+"Once source is installed, review the contents of [.filename]#/usr/src/sys#. "
+"This directory contains a number of subdirectories, including those which "
+"represent the following supported architectures: [.filename]#amd64#, [."
+"filename]#i386#, [.filename]#powerpc#, and [.filename]#sparc64#. Everything "
+"inside a particular architecture's directory deals with that architecture "
+"only and the rest of the code is machine independent code common to all "
+"platforms. Each supported architecture has a [.filename]#conf# subdirectory "
+"which contains the [.filename]#GENERIC# kernel configuration file for that "
+"architecture."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:185
+msgid ""
+"Do not make edits to [.filename]#GENERIC#. Instead, copy the file to a "
+"different name and make edits to the copy. The convention is to use a name "
+"with all capital letters. When maintaining multiple FreeBSD machines with "
+"different hardware, it is a good idea to name it after the machine's "
+"hostname. This example creates a copy, named [.filename]#MYKERNEL#, of the "
+"[.filename]#GENERIC# configuration file for the `amd64` architecture:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:190
+#, no-wrap
+msgid ""
+"# cd /usr/src/sys/amd64/conf\n"
+"# cp GENERIC MYKERNEL\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:194
+msgid ""
+"[.filename]#MYKERNEL# can now be customized with any `ASCII` text editor. "
+"The default editor is vi, though an easier editor for beginners, called ee, "
+"is also installed with FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:200
+msgid ""
+"The format of the kernel configuration file is simple. Each line contains a "
+"keyword that represents a device or subsystem, an argument, and a brief "
+"description. Any text after a `+#+` is considered a comment and ignored. "
+"To remove kernel support for a device or subsystem, put a `+#+` at the "
+"beginning of the line representing that device or subsystem. Do not add or "
+"remove a `+#+` for any line that you do not understand."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:206
+msgid ""
+"It is easy to remove support for a device or option and end up with a broken "
+"kernel. For example, if the man:ata[4] driver is removed from the kernel "
+"configuration file, a system using `ATA` disk drivers may not boot. When in "
+"doubt, just leave support in the kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:210
+msgid ""
+"In addition to the brief descriptions provided in this file, additional "
+"descriptions are contained in [.filename]#NOTES#, which can be found in the "
+"same directory as [.filename]#GENERIC# for that architecture. For "
+"architecture independent options, refer to [.filename]#/usr/src/sys/conf/"
+"NOTES#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:214
+msgid ""
+"When finished customizing the kernel configuration file, save a backup copy "
+"to a location outside of [.filename]#/usr/src#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:216
+msgid ""
+"Alternately, keep the kernel configuration file elsewhere and create a "
+"symbolic link to the file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:223
+#, no-wrap
+msgid ""
+"# cd /usr/src/sys/amd64/conf\n"
+"# mkdir /root/kernels\n"
+"# cp GENERIC /root/kernels/MYKERNEL\n"
+"# ln -s /root/kernels/MYKERNEL\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:230
+msgid ""
+"An `include` directive is available for use in configuration files. This "
+"allows another configuration file to be included in the current one, making "
+"it easy to maintain small changes relative to an existing file. If only a "
+"small number of additional options or drivers are required, this allows a "
+"delta to be maintained with respect to [.filename]#GENERIC#, as seen in this "
+"example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:235
+#, no-wrap
+msgid ""
+"include GENERIC\n"
+"ident MYKERNEL\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:240
+#, no-wrap
+msgid ""
+"options IPFIREWALL\n"
+"options DUMMYNET\n"
+"options IPFIREWALL_DEFAULT_TO_ACCEPT\n"
+"options IPDIVERT\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:245
+msgid ""
+"Using this method, the local configuration file expresses local differences "
+"from a [.filename]#GENERIC# kernel. As upgrades are performed, new features "
+"added to [.filename]#GENERIC# will also be added to the local kernel unless "
+"they are specifically prevented using `nooptions` or `nodevice`. A "
+"comprehensive list of configuration directives and their descriptions may be "
+"found in man:config[5]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:249
+msgid ""
+"To build a file which contains all available options, run the following "
+"command as `root`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:253
+#, no-wrap
+msgid "# cd /usr/src/sys/arch/conf && make LINT\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:258
+#, no-wrap
+msgid "Building and Installing a Custom Kernel"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:261
+msgid ""
+"Once the edits to the custom configuration file have been saved, the source "
+"code for the kernel can be compiled using the following steps:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:265
+#, no-wrap
+msgid "*Procedure: Building a Kernel*\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:267
+msgid "Change to this directory:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:271
+#, no-wrap
+msgid "# cd /usr/src\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:274
+msgid ""
+"Compile the new kernel by specifying the name of the custom kernel "
+"configuration file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:278
+#, no-wrap
+msgid "# make buildkernel KERNCONF=MYKERNEL\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:281
+msgid ""
+"Install the new kernel associated with the specified kernel configuration "
+"file. This command will copy the new kernel to [.filename]#/boot/kernel/"
+"kernel# and save the old kernel to [.filename]#/boot/kernel.old/kernel#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:285
+#, no-wrap
+msgid "# make installkernel KERNCONF=MYKERNEL\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:288
+msgid ""
+"Shutdown the system and reboot into the new kernel. If something goes wrong, "
+"refer to <<kernelconfig-noboot, The kernel does not boot>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:292
+msgid ""
+"By default, when a custom kernel is compiled, all kernel modules are "
+"rebuilt. To update a kernel faster or to build only custom modules, edit [."
+"filename]#/etc/make.conf# before starting to build the kernel."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:294
+msgid ""
+"For example, this variable specifies the list of modules to build instead of "
+"using the default of building all modules:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:298
+#, no-wrap
+msgid "MODULES_OVERRIDE = linux acpi\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:301
+msgid ""
+"Alternately, this variable lists which modules to exclude from the build "
+"process:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:305
+#, no-wrap
+msgid "WITHOUT_MODULES = linux acpi sound\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:309
+msgid ""
+"Additional variables are available. Refer to man:make.conf[5] for details."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:311
+#, no-wrap
+msgid "If Something Goes Wrong"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:314
+msgid ""
+"There are four categories of trouble that can occur when building a custom "
+"kernel:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:315
+#, no-wrap
+msgid "`config` fails"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:318
+msgid ""
+"If `config` fails, it will print the line number that is incorrect. As an "
+"example, for the following message, make sure that line 17 is typed "
+"correctly by comparing it to [.filename]#GENERIC# or [.filename]#NOTES#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:322
+#, no-wrap
+msgid "config: line 17: syntax error\n"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:324
+#, no-wrap
+msgid "`make` fails"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:327
+msgid ""
+"If `make` fails, it is usually due to an error in the kernel configuration "
+"file which is not severe enough for `config` to catch. Review the "
+"configuration, and if the problem is not apparent, send an email to the "
+"{freebsd-questions} which contains the kernel configuration file."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:329
+#, no-wrap
+msgid "The kernel does not boot"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:334
+msgid ""
+"If the new kernel does not boot or fails to recognize devices, do not panic! "
+"Fortunately, FreeBSD has an excellent mechanism for recovering from "
+"incompatible kernels. Simply choose the kernel to boot from at the FreeBSD "
+"boot loader. This can be accessed when the system boot menu appears by "
+"selecting the \"Escape to a loader prompt\" option. At the prompt, type "
+"`boot _kernel.old_`, or the name of any other kernel that is known to boot "
+"properly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:338
+msgid ""
+"After booting with a good kernel, check over the configuration file and try "
+"to build it again. One helpful resource is [.filename]#/var/log/messages# "
+"which records the kernel messages from every successful boot. Also, man:"
+"dmesg[8] will print the kernel messages from the current boot."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:344
+msgid ""
+"When troubleshooting a kernel make sure to keep a copy of a kernel that is "
+"known to work, such as [.filename]#GENERIC#. This is important because "
+"every time a new kernel is installed, [.filename]#kernel.old# is overwritten "
+"with the last installed kernel, which may or may not be bootable. As soon "
+"as possible, move the working kernel by renaming the directory containing "
+"the good kernel:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:349
+#, no-wrap
+msgid ""
+"# mv /boot/kernel /boot/kernel.bad\n"
+"# mv /boot/kernel.good /boot/kernel\n"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:353
+#, no-wrap
+msgid "The kernel works, but man:ps[1] does not"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/kernelconfig/_index.adoc:356
+msgid ""
+"If the kernel version differs from the one that the system utilities have "
+"been built with, for example, a kernel built from -CURRENT sources is "
+"installed on a -RELEASE system, many system status commands like man:ps[1] "
+"and man:vmstat[8] will not work. To fix this, crossref:cutting-"
+"edge[makeworld,recompile and install a world] built with the same version of "
+"the source tree as the kernel. It is never a good idea to use a different "
+"version of the kernel than the rest of the operating system."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/l10n/_index.adoc b/documentation/content/en/books/handbook/l10n/_index.adoc
index fcc0514c89..756d74be55 100644
--- a/documentation/content/en/books/handbook/l10n/_index.adoc
+++ b/documentation/content/en/books/handbook/l10n/_index.adoc
@@ -1,13 +1,13 @@
---
-title: Chapter 23. Localization - i18n/L10n Usage and Setup
+title: Chapter 25. Localization - i18n/L10n Usage and Setup
part: Part III. System Administration
prev: books/handbook/virtualization
next: books/handbook/cutting-edge
description: FreeBSD supports localization into many languages, allowing users to view, input, or process data in non-English languages
tags: ["i18n", "L10n", "localization", "Locale", "LANG", "MM_CHARSET", "cap_mkdb"]
showBookMenu: true
-weight: 27
-path: "/books/handbook/"
+weight: 29
+path: "/books/handbook/l10n/"
---
[[l10n]]
@@ -18,7 +18,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 23
+:sectnumoffset: 25
:partnums:
:source-highlighter: rouge
:experimental:
@@ -263,7 +263,7 @@ Invoke it as superuser and provide the username to edit as the argument.
==== Shell Startup File Method
This second method is not recommended as each shell that is used requires manual configuration, where each shell has a different configuration file and differing syntax.
-As an example, to set the German language for the `sh` shell, these lines could be added to [.filename]#~/.profile# to set the shell for that user only.
+As an example, to set the German language for the `sh` shell, these lines could be added to [.filename]#~/.profile# to set the shell for that user only.
These lines could also be added to [.filename]#/etc/profile# or [.filename]#/usr/share/skel/dot.profile# to set that shell for all users:
[.programlisting]
@@ -538,7 +538,7 @@ It then provides some additional resources for localizing other languages.
=== Russian Language (KOI8-R Encoding)
This section shows the specific settings needed to localize a FreeBSD system for the Russian language.
-Refer to <<using-localization,Using Localization>> for a more complete description of each type of setting.
+Refer to <<using-localization,Using Localization>> for a complete description of each type of setting.
To set this locale for the login shell, add the following lines to each user's [.filename]#~/.login_conf#:
diff --git a/documentation/content/en/books/handbook/l10n/_index.po b/documentation/content/en/books/handbook/l10n/_index.po
new file mode 100644
index 0000000000..58e2e7dd9f
--- /dev/null
+++ b/documentation/content/en/books/handbook/l10n/_index.po
@@ -0,0 +1,1412 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/l10n/_index.adoc:1
+#, no-wrap
+msgid "FreeBSD supports localization into many languages, allowing users to view, input, or process data in non-English languages"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/l10n/_index.adoc:1
+#, no-wrap
+msgid "Part III. System Administration"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/l10n/_index.adoc:1
+#, no-wrap
+msgid "Chapter 25. Localization - i18n/L10n Usage and Setup"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/l10n/_index.adoc:14
+#, no-wrap
+msgid "Localization - i18n/L10n Usage and Setup"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/l10n/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:57
+msgid ""
+"FreeBSD is a distributed project with users and contributors located all "
+"over the world. As such, FreeBSD supports localization into many languages, "
+"allowing users to view, input, or process data in non-English languages. "
+"One can choose from most of the major languages, including, but not limited "
+"to: Chinese, German, Japanese, Korean, French, Russian, and Vietnamese."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:61
+msgid ""
+"The term internationalization has been shortened to i18n, which represents "
+"the number of letters between the first and the last letters of "
+"`internationalization`. L10n uses the same naming scheme, but from "
+"`localization`. The i18n/L10n methods, protocols, and applications allow "
+"users to use languages of their choice."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:64
+msgid ""
+"This chapter discusses the internationalization and localization features of "
+"FreeBSD. After reading this chapter, you will know:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:66
+msgid "How locale names are constructed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:67
+msgid "How to set the locale for a login shell."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:68
+msgid "How to configure the console for non-English languages."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:69
+msgid "How to configure Xorg for different languages."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:70
+msgid "How to find i18n-compliant applications."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:71
+msgid "Where to find more information for configuring specific languages."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:73
+msgid "Before reading this chapter, you should:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:75
+msgid ""
+"Know how to crossref:ports[ports,install additional third-party "
+"applications]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/l10n/_index.adoc:77
+#, no-wrap
+msgid "Using Localization"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:81
+msgid ""
+"Localization settings are based on three components: the language code, "
+"country code, and encoding. Locale names are constructed from these parts "
+"as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:85
+#, no-wrap
+msgid "LanguageCode_CountryCode.Encoding\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:89
+msgid ""
+"The _LanguageCode_ and _CountryCode_ are used to determine the country and "
+"the specific language variation. <<locale-lang-country>> provides some "
+"examples of __LanguageCode_CountryCode__:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/l10n/_index.adoc:91
+#, no-wrap
+msgid "Common Language and Country Codes"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:95
+#, no-wrap
+msgid "LanguageCode_Country Code"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:97
+#, no-wrap
+msgid "Description"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:98
+#, no-wrap
+msgid "en_US"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:100
+#, no-wrap
+msgid "English, United States"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:101
+#, no-wrap
+msgid "ru_RU"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:103
+#, no-wrap
+msgid "Russian, Russia"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:104
+#, no-wrap
+msgid "zh_TW"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:105
+#, no-wrap
+msgid "Traditional Chinese, Taiwan"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:108
+msgid "A complete listing of available locales can be found by typing:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:112
+#, no-wrap
+msgid "% locale -a | more\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:115
+msgid "To determine the current locale setting:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:119
+#, no-wrap
+msgid "% locale\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:123
+msgid ""
+"Language specific character sets, such as ISO8859-1, ISO8859-15, KOI8-R, and "
+"CP437, are described in man:multibyte[3]. The active list of character sets "
+"can be found at the http://www.iana.org/assignments/character-sets[IANA "
+"Registry]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:128
+msgid ""
+"Some languages, such as Chinese or Japanese, cannot be represented using "
+"ASCII characters and require an extended language encoding using either wide "
+"or multibyte characters. Examples of wide or multibyte encodings include "
+"EUC and Big5. Older applications may mistake these encodings for control "
+"characters while newer applications usually recognize these characters. "
+"Depending on the implementation, users may be required to compile an "
+"application with wide or multibyte character support, or to configure it "
+"correctly."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:132
+msgid "FreeBSD uses Xorg-compatible locale encodings."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:136
+msgid ""
+"The rest of this section describes the various methods for configuring the "
+"locale on a FreeBSD system. The next section will discuss the "
+"considerations for finding and compiling applications with i18n support."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/l10n/_index.adoc:138
+#, no-wrap
+msgid "Setting Locale for Login Shell"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:141
+msgid ""
+"Locale settings are configured either in a user's [.filename]#~/.login_conf# "
+"or in the startup file of the user's shell: [.filename]#~/.profile#, [."
+"filename]#~/.bashrc#, or [.filename]#~/.cshrc#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:143
+msgid "Two environment variables should be set:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:145
+msgid "`LANG`, which sets the locale"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:146
+msgid "`MM_CHARSET`, which sets the MIME character set used by applications"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:148
+msgid ""
+"In addition to the user's shell configuration, these variables should also "
+"be set for specific application configuration and Xorg configuration."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:151
+msgid ""
+"Two methods are available for making the needed variable assignments: the "
+"<<login-class,login class>> method, which is the recommended method, and the "
+"<<startup-file,startup file>> method. The next two sections demonstrate how "
+"to use both methods."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/l10n/_index.adoc:153
+#, no-wrap
+msgid "Login Classes Method"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:157
+msgid ""
+"This first method is the recommended method as it assigns the required "
+"environment variables for locale name and MIME character sets for every "
+"possible shell. This setup can either be performed by each user or it can "
+"be configured for all users by the superuser."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:159
+msgid ""
+"This minimal example sets both variables for Latin-1 encoding in the [."
+"filename]#.login_conf# of an individual user's home directory:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:165
+#, no-wrap
+msgid ""
+"me:\\\n"
+"\t:charset=ISO-8859-1:\\\n"
+"\t:lang=de_DE.ISO8859-1:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:169
+msgid ""
+"Here is an example of a user's [.filename]#~/.login_conf# that sets the "
+"variables for Traditional Chinese in BIG-5 encoding. More variables are "
+"needed because some applications do not correctly respect locale variables "
+"for Chinese, Japanese, and Korean:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:179
+#, no-wrap
+msgid ""
+"#Users who do not wish to use monetary units or time formats\n"
+"#of Taiwan can manually change each variable\n"
+"me:\\\n"
+"\t:lang=zh_TW.Big5:\\\n"
+"\t:setenv=LC_ALL=zh_TW.Big5,LC_COLLATE=zh_TW.Big5,LC_CTYPE=zh_TW.Big5,LC_MESSAGES=zh_TW.Big5,LC_MONETARY=zh_TW.Big5,LC_NUMERIC=zh_TW.Big5,LC_TIME=zh_TW.Big5:\\\n"
+"\t:charset=big5:\\\n"
+"\t:xmodifiers=\"@im=gcin\": #Set gcin as the XIM Input Server\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:183
+msgid ""
+"Alternately, the superuser can configure all users of the system for "
+"localization. The following variables in [.filename]#/etc/login.conf# are "
+"used to set the locale and MIME character set:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:190
+#, no-wrap
+msgid ""
+"language_name|Account Type Description:\\\n"
+"\t:charset=MIME_charset:\\\n"
+"\t:lang=locale_name:\\\n"
+"\t:tc=default:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:193
+msgid "So, the previous Latin-1 example would look like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:200
+#, no-wrap
+msgid ""
+"german|German Users Accounts:\\\n"
+"\t:charset=ISO-8859-1:\\\n"
+"\t:lang=de_DE.ISO8859-1:\\\n"
+"\t:tc=default:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:204
+msgid ""
+"See man:login.conf[5] for more details about these variables. Note that it "
+"already contains pre-defined _russian_ class."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:206
+msgid ""
+"Whenever [.filename]#/etc/login.conf# is edited, remember to execute the "
+"following command to update the capability database:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:210
+#, no-wrap
+msgid "# cap_mkdb /etc/login.conf\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:215
+msgid ""
+"For an end user, the `cap_mkdb` command will need to be run on their [."
+"filename]#~/.login_conf# for any changes to take effect."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/handbook/l10n/_index.adoc:217
+#, no-wrap
+msgid "Utilities Which Change Login Classes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:220
+msgid ""
+"In addition to manually editing [.filename]#/etc/login.conf#, several "
+"utilities are available for setting the locale for newly created users."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:222
+msgid ""
+"When using `vipw` to add new users, specify the _language_ to set the locale:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:226
+#, no-wrap
+msgid "user:password:1111:11:language:0:0:User Name:/home/user:/bin/sh\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:229
+msgid ""
+"When using `adduser` to add new users, the default language can be pre-"
+"configured for all new users or specified for an individual user."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:231
+msgid ""
+"If all new users use the same language, set `defaultclass=_language_` in [."
+"filename]#/etc/adduser.conf#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:233
+msgid ""
+"To override this setting when creating a user, either input the required "
+"locale at this prompt:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:237
+#, no-wrap
+msgid "Enter login class: default []:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:240
+msgid "or specify the locale to set when invoking `adduser`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:244
+#, no-wrap
+msgid "# adduser -class language\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:247
+msgid "If `pw` is used to add new users, specify the locale as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:251
+#, no-wrap
+msgid "# pw useradd user_name -L language\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:255
+msgid ""
+"To change the login class of an existing user, `chpass` can be used. Invoke "
+"it as superuser and provide the username to edit as the argument."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:259
+#, no-wrap
+msgid "# chpass user_name\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/l10n/_index.adoc:263
+#, no-wrap
+msgid "Shell Startup File Method"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:268
+msgid ""
+"This second method is not recommended as each shell that is used requires "
+"manual configuration, where each shell has a different configuration file "
+"and differing syntax. As an example, to set the German language for the "
+"`sh` shell, these lines could be added to [.filename]#~/.profile# to set the "
+"shell for that user only. These lines could also be added to [.filename]#/"
+"etc/profile# or [.filename]#/usr/share/skel/dot.profile# to set that shell "
+"for all users:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:273
+#, no-wrap
+msgid ""
+"LANG=de_DE.ISO8859-1; export LANG\n"
+"MM_CHARSET=ISO-8859-1; export MM_CHARSET\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:277
+msgid ""
+"However, the name of the configuration file and the syntax used differs for "
+"the `csh` shell. These are the equivalent settings for [.filename]#~/."
+"login#, [.filename]#/etc/csh.login#, or [.filename]#/usr/share/skel/dot."
+"login#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:282
+#, no-wrap
+msgid ""
+"setenv LANG de_DE.ISO8859-1\n"
+"setenv MM_CHARSET ISO-8859-1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:286
+msgid ""
+"To complicate matters, the syntax needed to configure Xorg in [.filename]#~/."
+"xinitrc# also depends upon the shell. The first example is for the `sh` "
+"shell and the second is for the `csh` shell:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:290
+#, no-wrap
+msgid "LANG=de_DE.ISO8859-1; export LANG\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:296
+#, no-wrap
+msgid "setenv LANG de_DE.ISO8859-1\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/l10n/_index.adoc:300
+#, no-wrap
+msgid "Console Setup"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:305
+msgid ""
+"Several localized fonts are available for the console. To see a listing of "
+"available fonts, type `ls /usr/share/syscons/fonts`. To configure the "
+"console font, specify the _font_name_, without the [.filename]#.fnt# suffix, "
+"in [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:311
+#, no-wrap
+msgid ""
+"font8x16=font_name\n"
+"font8x14=font_name\n"
+"font8x8=font_name\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:314
+msgid ""
+"The keymap and screenmap can be set by adding the following to [.filename]#/"
+"etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:320
+#, no-wrap
+msgid ""
+"scrnmap=screenmap_name\n"
+"keymap=keymap_name\n"
+"keychange=\"fkey_number sequence\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:325
+msgid ""
+"To see the list of available screenmaps, type `ls /usr/share/syscons/"
+"scrnmaps`. Do not include the [.filename]#.scm# suffix when specifying "
+"_screenmap_name_. A screenmap with a corresponding mapped font is usually "
+"needed as a workaround for expanding bit 8 to bit 9 on a VGA adapter's font "
+"character matrix so that letters are moved out of the pseudographics area if "
+"the screen font uses a bit 8 column."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:329
+msgid ""
+"To see the list of available keymaps, type `ls /usr/share/syscons/keymaps`. "
+"When specifying the _keymap_name_, do not include the [.filename]#.kbd# "
+"suffix. To test keymaps without rebooting, use man:kbdmap[1]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:331
+msgid ""
+"The `keychange` entry is usually needed to program function keys to match "
+"the selected terminal type because function key sequences cannot be defined "
+"in the keymap."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:334
+msgid ""
+"Next, set the correct console terminal type in [.filename]#/etc/ttys# for "
+"all virtual terminal entries. <<locale-charset>> summarizes the available "
+"terminal types.:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/l10n/_index.adoc:336
+#, no-wrap
+msgid "Defined Terminal Types for Character Sets"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:340
+#, no-wrap
+msgid "Character Set"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:342
+#, no-wrap
+msgid "Terminal Type"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:343
+#, no-wrap
+msgid "ISO8859-1 or ISO8859-15"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:345
+#, no-wrap
+msgid "`cons25l1`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:346
+#, no-wrap
+msgid "ISO8859-2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:348
+#, no-wrap
+msgid "`cons25l2`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:349
+#, no-wrap
+msgid "ISO8859-7"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:351
+#, no-wrap
+msgid "`cons25l7`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:352
+#, no-wrap
+msgid "KOI8-R"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:354
+#, no-wrap
+msgid "`cons25r`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:355
+#, no-wrap
+msgid "KOI8-U"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:357
+#, no-wrap
+msgid "`cons25u`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:358
+#, no-wrap
+msgid "CP437 (VGA default)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:360
+#, no-wrap
+msgid "`cons25`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:361
+#, no-wrap
+msgid "US-ASCII"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:362
+#, no-wrap
+msgid "`cons25w`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:367
+msgid ""
+"For languages with wide or multibyte characters, install a console for that "
+"language from the FreeBSD Ports Collection. The available ports are "
+"summarized in <<locale-console>>. Once installed, refer to the port's [."
+"filename]#pkg-message# or man pages for configuration and usage instructions."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/l10n/_index.adoc:369
+#, no-wrap
+msgid "Available Console from Ports Collection"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:373
+#: documentation/content/en/books/handbook/l10n/_index.adoc:418
+#, no-wrap
+msgid "Language"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:375
+#, no-wrap
+msgid "Port Location"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:376
+#, no-wrap
+msgid "Traditional Chinese (BIG-5)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:378
+#, no-wrap
+msgid "package:chinese/big5con[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:379
+#: documentation/content/en/books/handbook/l10n/_index.adoc:382
+#, no-wrap
+msgid "Chinese/Japanese/Korean"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:381
+#, no-wrap
+msgid "package:chinese/cce[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:384
+#, no-wrap
+msgid "package:chinese/zhcon[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:385
+#: documentation/content/en/books/handbook/l10n/_index.adoc:388
+#: documentation/content/en/books/handbook/l10n/_index.adoc:391
+#: documentation/content/en/books/handbook/l10n/_index.adoc:442
+#: documentation/content/en/books/handbook/l10n/_index.adoc:445
+#: documentation/content/en/books/handbook/l10n/_index.adoc:448
+#: documentation/content/en/books/handbook/l10n/_index.adoc:451
+#: documentation/content/en/books/handbook/l10n/_index.adoc:454
+#: documentation/content/en/books/handbook/l10n/_index.adoc:457
+#: documentation/content/en/books/handbook/l10n/_index.adoc:460
+#: documentation/content/en/books/handbook/l10n/_index.adoc:463
+#: documentation/content/en/books/handbook/l10n/_index.adoc:466
+#: documentation/content/en/books/handbook/l10n/_index.adoc:469
+#: documentation/content/en/books/handbook/l10n/_index.adoc:472
+#: documentation/content/en/books/handbook/l10n/_index.adoc:475
+#: documentation/content/en/books/handbook/l10n/_index.adoc:478
+#: documentation/content/en/books/handbook/l10n/_index.adoc:481
+#: documentation/content/en/books/handbook/l10n/_index.adoc:484
+#: documentation/content/en/books/handbook/l10n/_index.adoc:487
+#: documentation/content/en/books/handbook/l10n/_index.adoc:490
+#: documentation/content/en/books/handbook/l10n/_index.adoc:493
+#, no-wrap
+msgid "Japanese"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:387
+#, no-wrap
+msgid "package:chinese/kon2[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:390
+#, no-wrap
+msgid "package:japanese/kon2-14dot[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:392
+#, no-wrap
+msgid "package:japanese/kon2-16dot[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:397
+msgid ""
+"If moused is enabled in [.filename]#/etc/rc.conf#, additional configuration "
+"may be required. By default, the mouse cursor of the man:syscons[4] driver "
+"occupies the `0xd0`-`0xd3` range in the character set. If the language uses "
+"this range, move the cursor's range by adding the following line to [."
+"filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:401
+#, no-wrap
+msgid "mousechar_start=3\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/l10n/_index.adoc:403
+#, no-wrap
+msgid "Xorg Setup"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:408
+msgid ""
+"crossref:x11[x11,The X Window System] describes how to install and configure "
+"Xorg. When configuring Xorg for localization, additional fonts and input "
+"methods are available from the FreeBSD Ports Collection. Application "
+"specific i18n settings such as fonts and menus can be tuned in [."
+"filename]#~/.Xresources# and should allow users to view their selected "
+"language in graphical application menus."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:412
+msgid ""
+"The X Input Method (XIM) protocol is an Xorg standard for inputting non-"
+"English characters. <<locale-xim>> summarizes the input method applications "
+"which are available in the FreeBSD Ports Collection. Additional Fcitx and "
+"Uim applications are also available."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/l10n/_index.adoc:414
+#, no-wrap
+msgid "Available Input Methods"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:420
+#, no-wrap
+msgid "Input Method"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:421
+#: documentation/content/en/books/handbook/l10n/_index.adoc:424
+#: documentation/content/en/books/handbook/l10n/_index.adoc:427
+#: documentation/content/en/books/handbook/l10n/_index.adoc:430
+#: documentation/content/en/books/handbook/l10n/_index.adoc:433
+#: documentation/content/en/books/handbook/l10n/_index.adoc:436
+#: documentation/content/en/books/handbook/l10n/_index.adoc:439
+#, no-wrap
+msgid "Chinese"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:423
+#, no-wrap
+msgid "package:chinese/gcin[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:426
+#, no-wrap
+msgid "package:chinese/ibus-chewing[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:429
+#, no-wrap
+msgid "package:chinese/ibus-pinyin[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:432
+#, no-wrap
+msgid "package:chinese/oxim[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:435
+#, no-wrap
+msgid "package:chinese/scim-fcitx[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:438
+#, no-wrap
+msgid "package:chinese/scim-pinyin[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:441
+#, no-wrap
+msgid "package:chinese/scim-tables[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:444
+#, no-wrap
+msgid "package:japanese/ibus-anthy[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:447
+#, no-wrap
+msgid "package:japanese/ibus-mozc[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:450
+#, no-wrap
+msgid "package:japanese/ibus-skk[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:453
+#, no-wrap
+msgid "package:japanese/im-ja[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:456
+#, no-wrap
+msgid "package:japanese/kinput2[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:459
+#, no-wrap
+msgid "package:japanese/scim-anthy[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:462
+#, no-wrap
+msgid "package:japanese/scim-canna[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:465
+#, no-wrap
+msgid "package:japanese/scim-honoka[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:468
+#, no-wrap
+msgid "package:japanese/scim-honoka-plugin-romkan[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:471
+#, no-wrap
+msgid "package:japanese/scim-honoka-plugin-wnn[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:474
+#, no-wrap
+msgid "package:japanese/scim-prime[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:477
+#, no-wrap
+msgid "package:japanese/scim-skk[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:480
+#, no-wrap
+msgid "package:japanese/scim-tables[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:483
+#, no-wrap
+msgid "package:japanese/scim-tomoe[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:486
+#, no-wrap
+msgid "package:japanese/scim-uim[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:489
+#, no-wrap
+msgid "package:japanese/skkinput[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:492
+#, no-wrap
+msgid "package:japanese/skkinput3[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:495
+#, no-wrap
+msgid "package:japanese/uim-anthy[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:496
+#: documentation/content/en/books/handbook/l10n/_index.adoc:499
+#: documentation/content/en/books/handbook/l10n/_index.adoc:502
+#: documentation/content/en/books/handbook/l10n/_index.adoc:505
+#: documentation/content/en/books/handbook/l10n/_index.adoc:508
+#, no-wrap
+msgid "Korean"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:498
+#, no-wrap
+msgid "package:korean/ibus-hangul[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:501
+#, no-wrap
+msgid "package:korean/imhangul[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:504
+#, no-wrap
+msgid "package:korean/nabi[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:507
+#, no-wrap
+msgid "package:korean/scim-hangul[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:510
+#, no-wrap
+msgid "package:korean/scim-tables[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:511
+#: documentation/content/en/books/handbook/l10n/_index.adoc:514
+#, no-wrap
+msgid "Vietnamese"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:513
+#, no-wrap
+msgid "package:vietnamese/xvnkb[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/l10n/_index.adoc:515
+#, no-wrap
+msgid "package:vietnamese/x-unikey[]"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/l10n/_index.adoc:518
+#, no-wrap
+msgid "Finding i18n Applications"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:522
+msgid ""
+"i18n applications are programmed using i18n kits under libraries. These "
+"allow developers to write a simple file and translate displayed menus and "
+"texts to each language."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:526
+msgid ""
+"The link:https://www.FreeBSD.org/ports/[FreeBSD Ports Collection] contains "
+"many applications with built-in support for wide or multibyte characters for "
+"several languages. Such applications include `i18n` in their names for easy "
+"identification. However, they do not always support the language needed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:530
+msgid ""
+"Some applications can be compiled with the specific charset. This is "
+"usually done in the port's [.filename]#Makefile# or by passing a value to "
+"configure. Refer to the i18n documentation in the respective FreeBSD port's "
+"source for more information on how to determine the needed configure value "
+"or the port's [.filename]#Makefile# to determine which compile options to "
+"use when building the port."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/l10n/_index.adoc:532
+#, no-wrap
+msgid "Locale Configuration for Specific Languages"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:536
+msgid ""
+"This section provides configuration examples for localizing a FreeBSD system "
+"for the Russian language. It then provides some additional resources for "
+"localizing other languages."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/l10n/_index.adoc:538
+#, no-wrap
+msgid "Russian Language (KOI8-R Encoding)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:542
+msgid ""
+"This section shows the specific settings needed to localize a FreeBSD system "
+"for the Russian language. Refer to <<using-localization,Using "
+"Localization>> for a complete description of each type of setting."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:544
+msgid ""
+"To set this locale for the login shell, add the following lines to each "
+"user's [.filename]#~/.login_conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:550
+#, no-wrap
+msgid ""
+"me:My Account:\\\n"
+"\t:charset=KOI8-R:\\\n"
+"\t:lang=ru_RU.KOI8-R:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:553
+msgid ""
+"To configure the console, add the following lines to [.filename]#/etc/rc."
+"conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:562
+#, no-wrap
+msgid ""
+"keymap=\"ru.utf-8\"\n"
+"scrnmap=\"utf-82cp866\"\n"
+"font8x16=\"cp866b-8x16\"\n"
+"font8x14=\"cp866-8x14\"\n"
+"font8x8=\"cp866-8x8\"\n"
+"mousechar_start=3\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:565
+msgid ""
+"For each `ttyv` entry in [.filename]#/etc/ttys#, use `cons25r` as the "
+"terminal type."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:569
+msgid ""
+"To configure printing, a special output filter is needed to convert from "
+"KOI8-R to CP866 since most printers with Russian characters come with "
+"hardware code page CP866. FreeBSD includes a default filter for this "
+"purpose, [.filename]#/usr/libexec/lpr/ru/koi2alt#. To use this filter, add "
+"this entry to [.filename]#/etc/printcap#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:575
+#, no-wrap
+msgid ""
+"lp|Russian local line printer:\\\n"
+"\t:sh:of=/usr/libexec/lpr/ru/koi2alt:\\\n"
+"\t:lp=/dev/lpt0:sd=/var/spool/output/lpd:lf=/var/log/lpd-errs:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:578
+msgid "Refer to man:printcap[5] for a more detailed explanation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:580
+msgid ""
+"To configure support for Russian filenames in mounted MS-DOS(R) file "
+"systems, include `-L` and the locale name when adding an entry to [."
+"filename]#/etc/fstab#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:584
+#, no-wrap
+msgid "/dev/ad0s2 /dos/c msdos rw,-Lru_RU.KOI8-R 0 0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:587
+msgid "Refer to man:mount_msdosfs[8] for more details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:590
+msgid ""
+"To configure Russian fonts for Xorg, install the package:x11-fonts/xorg-"
+"fonts-cyrillic[] package. Then, check the `\"Files\"` section in [."
+"filename]#/etc/X11/xorg.conf#. The following line must be added _before_ any "
+"other `FontPath` entries:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:594
+#, no-wrap
+msgid "FontPath \"/usr/local/lib/X11/fonts/cyrillic\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:597
+msgid "Additional Cyrillic fonts are available in the Ports Collection."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:599
+msgid ""
+"To activate a Russian keyboard, add the following to the `\"Keyboard\"` "
+"section of [.filename]#/etc/xorg.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:604
+#, no-wrap
+msgid ""
+"Option \"XkbLayout\" \"us,ru\"\n"
+"Option \"XkbOptions\" \"grp:toggle\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:607
+msgid "Make sure that `XkbDisable` is commented out in that file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:610
+msgid ""
+"For `grp:toggle` use kbd:[Right Alt], for `grp:ctrl_shift_toggle` use kbd:"
+"[Ctrl+Shift]. For `grp:caps_toggle` use kbd:[CapsLock]. The old kbd:"
+"[CapsLock] function is still available in LAT mode only using kbd:"
+"[Shift+CapsLock]. `grp:caps_toggle` does not work in Xorg for some unknown "
+"reason."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:612
+msgid ""
+"If the keyboard has \"Windows(R)\" keys, and some non-alphabetical keys are "
+"mapped incorrectly, add the following line to [.filename]#/etc/xorg.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:616
+#, no-wrap
+msgid "Option \"XkbVariant\" \",winkeys\"\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/l10n/_index.adoc:622
+msgid ""
+"The Russian XKB keyboard may not work with non-localized applications. "
+"Minimally localized applications should call a `XtSetLanguageProc (NULL, "
+"NULL, NULL);` function early in the program."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:626
+msgid ""
+"See http://koi8.pp.ru/xwin.html[http://koi8.pp.ru/xwin.html] for more "
+"instructions on localizing Xorg applications. For more general information "
+"about KOI8-R encoding, refer to http://koi8.pp.ru/[http://koi8.pp.ru/]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/l10n/_index.adoc:627
+#, no-wrap
+msgid "Additional Language-Specific Resources"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:630
+msgid ""
+"This section lists some additional resources for configuring other locales."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/l10n/_index.adoc:631
+#, no-wrap
+msgid "Traditional Chinese for Taiwan"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:633
+msgid ""
+"The FreeBSD-Taiwan Project has a Chinese HOWTO for FreeBSD at http://netlab."
+"cse.yzu.edu.tw/\\~statue/freebsd/zh-tut/[http://netlab.cse.yzu.edu.tw/"
+"~statue/freebsd/zh-tut/]."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/l10n/_index.adoc:634
+#, no-wrap
+msgid "Greek Language Localization"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:636
+msgid ""
+"A complete article on Greek support in FreeBSD is available https://www."
+"FreeBSD.org/doc/gr/articles/greek-language-support/[here], in Greek only, as "
+"part of the official FreeBSD Greek documentation."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/l10n/_index.adoc:637
+#, no-wrap
+msgid "Japanese and Korean Language Localization"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:639
+msgid ""
+"For Japanese, refer to http://www.jp.FreeBSD.org/[http://www.jp.FreeBSD."
+"org/], and for Korean, refer to http://www.kr.FreeBSD.org/[http://www.kr."
+"FreeBSD.org/]."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/l10n/_index.adoc:640
+#, no-wrap
+msgid "Non-English FreeBSD Documentation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/l10n/_index.adoc:642
+msgid ""
+"Some FreeBSD contributors have translated parts of the FreeBSD documentation "
+"to other languages. They are available through links on the link:https://"
+"www.FreeBSD.org/[FreeBSD web site] or in [.filename]#/usr/share/doc#."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/linuxemu/_index.adoc b/documentation/content/en/books/handbook/linuxemu/_index.adoc
index 40f5f3a58f..b059ec6160 100644
--- a/documentation/content/en/books/handbook/linuxemu/_index.adoc
+++ b/documentation/content/en/books/handbook/linuxemu/_index.adoc
@@ -1,13 +1,13 @@
---
-title: Chapter 10. Linux Binary Compatibility
+title: Chapter 12. Linux Binary Compatibility
part: Part II. Common Tasks
prev: books/handbook/printing
next: books/handbook/wine
description: FreeBSD provides binary compatibility with Linux, allowing users to install and run most Linux binaries on a FreeBSD system without having to first modify the binary
tags: ["linux", "linuxulator", "emulation", "binary", "compatibility"]
showBookMenu: true
-weight: 13
-path: "/books/handbook/"
+weight: 15
+path: "/books/handbook/linuxemu/"
---
[[linuxemu]]
@@ -18,7 +18,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 10
+:sectnumoffset: 12
:partnums:
:source-highlighter: rouge
:experimental:
@@ -51,11 +51,14 @@ endif::[]
[[linuxemu-synopsis]]
== Synopsis
-FreeBSD provides optional binary compatibility with Linux(R), allowing users to install and run unmodified Linux binaries.
-It is available for the i386, amd64, and arm64 architectures.
-
+FreeBSD provides *optional* binary compatibility with Linux(R), commonly referred to as Linuxulator, allowing users to install and run unmodified Linux binaries.
+It is available for the x86 (both 32 and 64 bit) and AArch64 architectures.
Some Linux-specific operating system features are not yet supported; this mostly happens with functionality specific to hardware or related to system management, such as cgroups or namespaces.
+Before reading this chapter, you should:
+
+* Know how to install crossref:ports[ports,additional third-party software].
+
After reading this chapter, you will know:
* How to enable Linux binary compatibility on a FreeBSD system.
@@ -63,100 +66,243 @@ After reading this chapter, you will know:
* How to install Linux applications on a FreeBSD system.
* The implementation details of Linux compatibility in FreeBSD.
-Before reading this chapter, you should:
-
-* Know how to install crossref:ports[ports,additional third-party software].
-
[[linuxemu-lbc-install]]
== Configuring Linux Binary Compatibility
-By default, Linux binary compatibility is not enabled.
-To enable it at boot time, add this line to [.filename]#/etc/rc.conf#:
+By default, man:linux[4] binary compatibility is not enabled.
+
+To enable the Linux ABI at boot time, execute the following command:
[.programlisting]
....
-linux_enable="YES"
+# sysrc linux_enable="YES"
....
-Once enabled, it can be started without rebooting by running:
+Once enabled, it can be started without rebooting by executing the following command:
+
[source,shell]
....
# service linux start
....
-The [.filename]#/etc/rc.d/linux# script will load necessary kernel modules and mount filesystems expected by Linux applications under [.filename]#/compat/linux#.
This is enough for statically linked Linux binaries to work.
+
+The Linux service will load necessary kernel modules and mount filesystems expected by Linux applications under [.filename]#/compat/linux#.
They can be started in the same way native FreeBSD binaries can; they behave almost exactly like native processes and can be traced and debugged the usual way.
-Linux binaries linked dynamically (which is the vast majority) also require Linux shared libraries to be installed - they can run on top of the FreeBSD kernel, but they cannot use FreeBSD libraries; this is similar to how 32-bit binaries cannot use native 64-bit libraries.
-There are several ways of providing those libraries: one can copy them over from an existing Linux installation using the same architecture, install them from FreeBSD packages, or install using man:debootstrap[8] (from package:sysutils/debootstrap[]), and others.
+The current content of [.filename]#/compat/linux# can be checked executing the following command:
-[[linuxemu-packages]]
-== CentOS Base System from FreeBSD Packages
+[source,shell]
+....
+# ls -l /compat/linux/
+....
-[NOTE]
+The output should be similar to the following:
+
+[.programlisting]
+....
+total 1
+dr-xr-xr-x 13 root wheel 512 Apr 11 19:12 dev
+dr-xr-xr-x 1 root wheel 0 Apr 11 21:03 proc
+dr-xr-xr-x 1 root wheel 0 Apr 11 21:03 sys
+....
+
+[[linux-userlands]]
+== Linux userlands
+
+Linux software requires more than just an ABI to work.
+In order to run Linux software a Linux userland must be installed first.
+
+[TIP]
====
-This method is not yet available for arm64.
+If all that is wanted is to run some software already included in the Ports tree, it can be installed via package manager and man:pkg[8] will automatically setup the required Linux userland.
+
+For example, to install Sublime Text 4, along with all the Linux libraries it depends on, run this command:
+
+[source,shell]
+....
+# pkg install linux-sublime-text4
+....
====
-The easiest way to install Linux libraries is to install package:emulators/linux_base-c7[] package or port, which places the CentOS 7-derived base system into [.filename]#/compat/linux#:
+[[linuxemu-packages]]
+=== CentOS Base System from FreeBSD Packages
+
+To install the CentOS userland execute the following command:
[source,shell]
....
# pkg install linux_base-c7
....
-FreeBSD provides packages for some Linux binary applications.
-For example, to install Sublime Text 4, along with all the Linux libraries it depends on, run this command:
+package:emulators/linux_base-c7[] will place the base system derived from CentOS 7 into [.filename]#/compat/linux#.
+
+After installing the package, the contents of [.filename]#/compat/linux# can be verified by running the following command to check that the CentOS userland has been installed:
+
[source,shell]
....
-# pkg install linux-sublime-text4
+# ls -l /compat/linux/
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
+total 30
+lrwxr-xr-x 1 root wheel 7 Apr 11 2018 bin -> usr/bin
+drwxr-xr-x 13 root wheel 512 Apr 11 21:10 dev
+drwxr-xr-x 25 root wheel 64 Apr 11 21:10 etc
+lrwxr-xr-x 1 root wheel 7 Apr 11 2018 lib -> usr/lib
+lrwxr-xr-x 1 root wheel 9 Apr 11 2018 lib64 -> usr/lib64
+drwxr-xr-x 2 root wheel 2 Apr 11 21:10 opt
+dr-xr-xr-x 1 root wheel 0 Apr 11 21:25 proc
+lrwxr-xr-x 1 root wheel 8 Feb 18 02:10 run -> /var/run
+lrwxr-xr-x 1 root wheel 8 Apr 11 2018 sbin -> usr/sbin
+drwxr-xr-x 2 root wheel 2 Apr 11 21:10 srv
+dr-xr-xr-x 1 root wheel 0 Apr 11 21:25 sys
+drwxr-xr-x 8 root wheel 9 Apr 11 21:10 usr
+drwxr-xr-x 16 root wheel 17 Apr 11 21:10 var
....
[[linuxemu-debootstrap]]
-== Debian / Ubuntu Base System with man:debootstrap[8]
+=== Debian / Ubuntu Base System with debootstrap
An alternative way of providing Linux shared libraries is by using package:sysutils/debootstrap[].
This has the advantage of providing a full Debian or Ubuntu distribution.
-To use it, follow the instructions at FreeBSD Wiki: https://wiki.freebsd.org/LinuxJails[FreeBSD Wiki - Linux Jails].
-After debootstrapping, man:chroot[8] into the newly created directory and install software in a way typical for the Linux distribution inside, for example:
+To install debootstrap execute the following command:
[source,shell]
....
-# chroot /compat/ubuntu /bin/bash
-root@hostname:/# apt update
+# pkg install debootstrap
....
-It is possible to debootstrap into [.filename]#/compat/linux#, but it is discouraged to avoid collisions with files installed from FreeBSD ports and packages.
+man:debootstrap[8] needs man:linux[4] ABI enabled.
+Once enabled, execute the following command to install Ubuntu or Debian in [.filename]#/compat/ubuntu#:
+
+[source,shell]
+....
+# debootstrap focal /compat/ubuntu
+....
+
+[NOTE]
+====
+While it is technically possible to install into [.filename]#/compat/linux# instead, it's discouraged due to possible clashes with CentOS-based packages.
Instead, derive the directory name from the distribution or version name, e.g., [.filename]#/compat/ubuntu#.
-If the bootstrapped instance is intended to provide Linux shared libraries without having to explicitly use chroot or jails, one can point the kernel at it by updating the `compat.linux.emul_path` sysctl and adding a line like this to [.filename]#/etc/sysctl.conf#:
+====
+
+The output should be similar to the following:
[.programlisting]
....
-compat.linux.emul_path="/compat/ubuntu"
+I: Retrieving InRelease
+I: Checking Release signature
+I: Valid Release signature (key id F6ECB3762474EDA9D21B7022871920D1991BC93C)
+I: Retrieving Packages
+I: Validating Packages
+I: Resolving dependencies of required packages...
+I: Resolving dependencies of base packages...
+I: Checking component main on http://archive.ubuntu.com/ubuntu...
+[...]
+I: Configuring console-setup...
+I: Configuring kbd...
+I: Configuring ubuntu-minimal...
+I: Configuring libc-bin...
+I: Configuring ca-certificates...
+I: Base system installed successfully.
+....
+
+Then set up mounts in [.filename]#/etc/fstab#.
+
+[TIP]
+====
+If the contents of the home directory should be shared and to be able to run X11 applications, [.filename]#/home# and [.filename]#/tmp# should be mounted in the linux compat area using man:nullfs[5] for loopback.
+
+The following example can be added to [.filename]#/etc/fstab#:
+
+[.programlisting]
+....
+# Device Mountpoint FStype Options Dump Pass#
+devfs /compat/ubuntu/dev devfs rw,late 0 0
+tmpfs /compat/ubuntu/dev/shm tmpfs rw,late,size=1g,mode=1777 0 0
+fdescfs /compat/ubuntu/dev/fd fdescfs rw,late,linrdlnk 0 0
+linprocfs /compat/ubuntu/proc linprocfs rw,late 0 0
+linsysfs /compat/ubuntu/sys linsysfs rw,late 0 0
+/tmp /compat/ubuntu/tmp nullfs rw,late 0 0
+/home /compat/ubuntu/home nullfs rw,late 0 0
+....
+
+Then execute man:mount[8]:
+
+[source,shell]
+....
+# mount -al
+....
+====
+
+To access the system using man:chroot[8] execute the following command:
+
+[source,shell]
+....
+# chroot /compat/ubuntu /bin/bash
....
-This sysctl controls the kernel's path translation mechanism; see man:linux[4] for details.
-Please note that changing it might cause trouble for Linux applications installed from FreeBSD packages; one reason is that many of those applications are still 32-bit, while Ubuntu seems to be deprecating 32-bit library support.
+Then man:uname[1] can be executed to check the Linux environment:
+
+[source,shell]
+....
+# uname -s -r -m
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
+Linux 3.17.0 x86_64
+....
+
+Once inside the chroot, the system behaves as in a normal Ubuntu installation.
+While systemd doesn't work, the man:service[8] command works as usual.
+
+[TIP]
+====
+To add the package repositories missing from defaults edit the file [.filename]#/compat/ubuntu/etc/apt/sources.list#.
+
+For amd64 the following example can be used:
+
+[.programlisting]
+....
+deb http://archive.ubuntu.com/ubuntu focal main universe restricted multiverse
+deb http://security.ubuntu.com/ubuntu/ focal-security universe multiverse restricted main
+deb http://archive.ubuntu.com/ubuntu focal-backports universe multiverse restricted main
+deb http://archive.ubuntu.com/ubuntu focal-updates universe multiverse restricted main
+....
+
+For arm64 this other example can be used:
+
+[.programlisting]
+....
+deb http://ports.ubuntu.com/ubuntu-ports bionic main universe restricted multiverse
+....
+====
[[linuxemu-advanced]]
== Advanced Topics
-The Linux compatibility layer is a work in progress.
-Consult https://wiki.freebsd.org/Linuxulator[FreeBSD Wiki - Linuxulator] for more information.
-
A list of all Linux-related man:sysctl[8] knobs can be found in man:linux[4].
Some applications require specific filesystems to be mounted.
-This is normally handled by the [.filename]#/etc/rc.d/linux# script, but can be disabled by adding this line to [.filename]#/etc/rc.conf#:
+
+This is normally handled by the [.filename]#/etc/rc.d/linux# script but can be disabled at boot executing the following command:
[.programlisting]
....
-linux_mounts_enable="NO"
+sysrc linux_mounts_enable="NO"
....
Filesystems mounted by the rc script will not work for Linux processes inside chroots or jails; if needed, configure them in [.filename]#/etc/fstab#:
+
+[.programlisting]
....
devfs /compat/linux/dev devfs rw,late 0 0
tmpfs /compat/linux/dev/shm tmpfs rw,late,size=1g,mode=1777 0 0
@@ -165,7 +311,7 @@ linprocfs /compat/linux/proc linprocfs rw,late 0 0
linsysfs /compat/linux/sys linsysfs rw,late 0 0
....
-Since the Linux binary compatibility layer has gained support for running both 32- and 64-bit Linux binaries (on 64-bit x86 hosts), it is no longer possible to link the emulation functionality statically into a custom kernel.
+Since the Linux binary compatibility layer has gained support for running both 32- and 64-bit Linux binaries, it is no longer possible to link the emulation functionality statically into a custom kernel.
[[linuxemu-libs-manually]]
=== Installing Additional Libraries Manually
@@ -178,11 +324,18 @@ For base system subdirectories created with man:debootstrap[8], use the instruct
If a Linux application complains about missing shared libraries after configuring Linux binary compatibility, determine which shared libraries the Linux binary needs and install them manually.
From a Linux system using the same CPU architecture, `ldd` can be used to determine which shared libraries the application needs.
+
For example, to check which shared libraries `linuxdoom` needs, run this command from a Linux system that has Doom installed:
[source,shell]
....
% ldd linuxdoom
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
libXt.so.3 (DLL Jump 3.1) => /usr/X11/lib/libXt.so.3.1.0
libX11.so.3 (DLL Jump 3.1) => /usr/X11/lib/libX11.so.3.1.0
libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29
@@ -190,9 +343,10 @@ libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29
Then, copy all the files in the last column of the output from the Linux system into [.filename]#/compat/linux# on the FreeBSD system.
Once copied, create symbolic links to the names in the first column.
+
This example will result in the following files on the FreeBSD system:
-[source,shell]
+[.programlisting]
....
/compat/linux/usr/X11/lib/libXt.so.3.1.0
/compat/linux/usr/X11/lib/libXt.so.3 -> libXt.so.3.1.0
@@ -208,7 +362,7 @@ The old one can be removed, as long as the symbolic link points to the new one.
For example, these libraries already exist on the FreeBSD system:
-[source,shell]
+[.programlisting]
....
/compat/linux/lib/libc.so.4.6.27
/compat/linux/lib/libc.so.4 -> libc.so.4.6.27
@@ -216,7 +370,7 @@ For example, these libraries already exist on the FreeBSD system:
and `ldd` indicates that a binary requires a later version:
-[source,shell]
+[.programlisting]
....
libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29
....
@@ -224,7 +378,7 @@ libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29
Since the existing library is only one or two versions out of date in the last digit, the program should still work with the slightly older version.
However, it is safe to replace the existing [.filename]#libc.so# with the newer version:
-[source,shell]
+[.programlisting]
....
/compat/linux/lib/libc.so.4.6.29
/compat/linux/lib/libc.so.4 -> libc.so.4.6.29
@@ -236,11 +390,18 @@ After a while, there will be a sufficient set of Linux shared libraries on the s
=== Branding Linux ELF Binaries
The FreeBSD kernel uses several methods to determine if the binary to be executed is a Linux one: it checks the brand in the ELF file header, looks for known ELF interpreter paths and checks ELF notes; finally, by default, unbranded ELF executables are assumed to be Linux anyway.
+
Should all those methods fail, an attempt to execute the binary might result in error message:
[source,shell]
....
% ./my-linux-elf-binary
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
ELF binary type not known
Abort
....
@@ -270,7 +431,7 @@ Note that this will prevent a clean uninstall.
If DNS does not work or this error appears:
-[source,shell]
+[.programlisting]
....
resolv+: "bind" is an invalid keyword resolv+:
"hosts" is an invalid keyword
@@ -285,57 +446,10 @@ multi on
....
This specifies that [.filename]#/etc/hosts# is searched first and DNS is searched second.
-When [.filename]#/compat/linux/etc/host.conf# does not exist, Linux applications use [.filename]#/etc/host.conf# and complain about the incompatible FreeBSD syntax.
+When [.filename]#/compat/linux/etc/host.conf# does not exist, Linux applications use [.filename]#/etc/host.conf# in the host system but they complain since that file does not exist in FreeBSD.
Remove `bind` if a name server is not configured using [.filename]#/etc/resolv.conf#.
[[linuxemu-misc]]
=== Miscellaneous
-This section describes how Linux binary compatibility works and is based on an email written to {freebsd-chat} by Terry Lambert mailto:tlambert@primenet.com[tlambert@primenet.com] (Message ID: `<199906020108.SAA07001@usr09.primenet.com>`).
-
-FreeBSD has an abstraction called an "execution class loader".
-This is a wedge into the man:execve[2] system call.
-
-Historically, the UNIX(R) loader examined the magic number (generally the first 4 or 8 bytes of the file) to see if it was a binary known to the system, and if so, invoked the binary loader.
-
-If it was not the binary type for the system, the man:execve[2] call returned a failure, and the shell attempted to start executing it as shell commands.
-The assumption was a default of "whatever the current shell is".
-
-Later, a hack was made for man:sh[1] to examine the first two characters, and if they were `:\n`, it invoked the man:csh[1] shell instead.
-
-FreeBSD has a list of loaders, instead of a single loader, with a fallback to the `#!` loader for running shell interpreters or shell scripts.
-
-For the Linux ABI support, FreeBSD sees the magic number as an ELF binary.
-The ELF loader looks for a specialized _brand_, which is a comment section in the ELF image, and which is not present on SVR4/Solaris(TM) ELF binaries.
-
-For Linux binaries to function, they must be _branded_ as type `Linux` using man:brandelf[1]:
-
-[source,shell]
-....
-# brandelf -t Linux file
-....
-
-When the ELF loader sees the `Linux` brand, the loader replaces a pointer in the `proc` structure.
-All system calls are indexed through this pointer.
-In addition, the process is flagged for special handling of the trap vector for the signal trampoline code, and several other (minor) fix-ups that are handled by the Linux kernel module.
-
-The Linux system call vector contains, among other things, a list of `sysent[]` entries whose addresses reside in the kernel module.
-
-When a system call is called by the Linux binary, the trap code dereferences the system call function pointer off the `proc` structure, and gets the Linux, not the FreeBSD, system call entry points.
-
-Linux mode dynamically _reroots_ lookups.
-This is, in effect, equivalent to `union` to file system mounts.
-First, an attempt is made to look up the file in [.filename]#/compat/linux/original-path#.
-If that fails, the lookup is done in [.filename]#/original-path#.
-This makes sure that binaries that require other binaries can run.
-For example, the Linux toolchain can all run under Linux ABI support.
-It also means that the Linux binaries can load and execute FreeBSD binaries, if there are no corresponding Linux binaries present, and that a man:uname[1] command can be placed in the [.filename]#/compat/linux# directory tree to ensure that the Linux binaries cannot tell they are not running on Linux.
-
-In effect, there is a Linux kernel in the FreeBSD kernel.
-The various underlying functions that implement all of the services provided by the kernel are identical to both the FreeBSD system call table entries, and the Linux system call table entries: file system operations, virtual memory operations, signal delivery, and System V IPC.
-The only difference is that FreeBSD binaries get the FreeBSD _glue_ functions, and Linux binaries get the Linux _glue_ functions.
-The FreeBSD _glue_ functions are statically linked into the kernel, and the Linux _glue_ functions can be statically linked, or they can be accessed via a kernel module.
-
-Technically, this is not really emulation, it is an ABI implementation.
-It is sometimes called "Linux emulation" because the implementation was done at a time when there was no other word to describe what was going on.
-Saying that FreeBSD ran Linux binaries was not true, since the code was not compiled in.
+More information on how binary compatibility works with Linux(R) can be found in the article link:{linux-emulation}[Linux emulation in FreeBSD].
diff --git a/documentation/content/en/books/handbook/linuxemu/_index.po b/documentation/content/en/books/handbook/linuxemu/_index.po
new file mode 100644
index 0000000000..e31806b63f
--- /dev/null
+++ b/documentation/content/en/books/handbook/linuxemu/_index.po
@@ -0,0 +1,771 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:1
+#, no-wrap
+msgid "FreeBSD provides binary compatibility with Linux, allowing users to install and run most Linux binaries on a FreeBSD system without having to first modify the binary"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:1
+#, no-wrap
+msgid "Part II. Common Tasks"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:1
+#, no-wrap
+msgid "Chapter 12. Linux Binary Compatibility"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:14
+#, no-wrap
+msgid "Linux Binary Compatibility"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:57
+msgid ""
+"FreeBSD provides *optional* binary compatibility with Linux(R), commonly "
+"referred to as Linuxulator, allowing users to install and run unmodified "
+"Linux binaries. It is available for the x86 (both 32 and 64 bit) and "
+"AArch64 architectures. Some Linux-specific operating system features are "
+"not yet supported; this mostly happens with functionality specific to "
+"hardware or related to system management, such as cgroups or namespaces."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:59
+msgid "Before reading this chapter, you should:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:61
+msgid ""
+"Know how to install crossref:ports[ports,additional third-party software]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:63
+msgid "After reading this chapter, you will know:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:65
+msgid "How to enable Linux binary compatibility on a FreeBSD system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:66
+msgid "How to install additional Linux shared libraries."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:67
+msgid "How to install Linux applications on a FreeBSD system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:68
+msgid "The implementation details of Linux compatibility in FreeBSD."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:70
+#, no-wrap
+msgid "Configuring Linux Binary Compatibility"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:73
+msgid "By default, man:linux[4] binary compatibility is not enabled."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:75
+msgid "To enable the Linux ABI at boot time, execute the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:79
+#, no-wrap
+msgid "# sysrc linux_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:82
+msgid ""
+"Once enabled, it can be started without rebooting executing the following "
+"command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:86
+#, no-wrap
+msgid "# service linux start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:89
+msgid "This is enough for statically linked Linux binaries to work."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:92
+msgid ""
+"The Linux service will load necessary kernel modules and mount filesystems "
+"expected by Linux applications under [.filename]#/compat/linux#. They can "
+"be started in the same way native FreeBSD binaries can; they behave almost "
+"exactly like native processes and can be traced and debugged the usual way."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:94
+msgid ""
+"The current content of [.filename]#/compat/linux# can be checked executing "
+"the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:98
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:145
+#, no-wrap
+msgid "# ls -l /compat/linux/\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:101
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:148
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:195
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:258
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:336
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:402
+msgid "The output should be similar to the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:108
+#, no-wrap
+msgid ""
+"total 1\n"
+"dr-xr-xr-x 13 root wheel 512 Apr 11 19:12 dev\n"
+"dr-xr-xr-x 1 root wheel 0 Apr 11 21:03 proc\n"
+"dr-xr-xr-x 1 root wheel 0 Apr 11 21:03 sys\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:111
+#, no-wrap
+msgid "Linux userlands"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:115
+msgid ""
+"Linux software requires more than just an ABI to work. In order to run "
+"Linux software a Linux userland must be installed first."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:119
+msgid ""
+"If all that is wanted is to run some software already included in the Ports "
+"tree, it can be installed via package manager and man:pkg[8] will "
+"automatically setup the required Linux userland."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:121
+msgid ""
+"For example, to install Sublime Text 4, along with all the Linux libraries "
+"it depends on, run this command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:125
+#, no-wrap
+msgid "# pkg install linux-sublime-text4\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:129
+#, no-wrap
+msgid "CentOS Base System from FreeBSD Packages"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:132
+msgid "To install the CentOS userland execute the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:136
+#, no-wrap
+msgid "# pkg install linux_base-c7\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:139
+msgid ""
+"package:emulators/linux_base-c7[] will place the base system derived from "
+"CentOS 7 into [.filename]#/compat/linux#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:141
+msgid ""
+"After installing the package, the contents of [.filename]#/compat/linux# can "
+"be verified by running the following command to check that the CentOS "
+"userland has been installed:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:165
+#, no-wrap
+msgid ""
+"total 30\n"
+"lrwxr-xr-x 1 root wheel 7 Apr 11 2018 bin -> usr/bin\n"
+"drwxr-xr-x 13 root wheel 512 Apr 11 21:10 dev\n"
+"drwxr-xr-x 25 root wheel 64 Apr 11 21:10 etc\n"
+"lrwxr-xr-x 1 root wheel 7 Apr 11 2018 lib -> usr/lib\n"
+"lrwxr-xr-x 1 root wheel 9 Apr 11 2018 lib64 -> usr/lib64\n"
+"drwxr-xr-x 2 root wheel 2 Apr 11 21:10 opt\n"
+"dr-xr-xr-x 1 root wheel 0 Apr 11 21:25 proc\n"
+"lrwxr-xr-x 1 root wheel 8 Feb 18 02:10 run -> /var/run\n"
+"lrwxr-xr-x 1 root wheel 8 Apr 11 2018 sbin -> usr/sbin\n"
+"drwxr-xr-x 2 root wheel 2 Apr 11 21:10 srv\n"
+"dr-xr-xr-x 1 root wheel 0 Apr 11 21:25 sys\n"
+"drwxr-xr-x 8 root wheel 9 Apr 11 21:10 usr\n"
+"drwxr-xr-x 16 root wheel 17 Apr 11 21:10 var\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:168
+#, no-wrap
+msgid "Debian / Ubuntu Base System with debootstrap"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:172
+msgid ""
+"An alternative way of providing Linux shared libraries is by using package:"
+"sysutils/debootstrap[]. This has the advantage of providing a full Debian "
+"or Ubuntu distribution."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:174
+msgid "To install debootstrap execute the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:178
+#, no-wrap
+msgid "# pkg install debootstrap\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:182
+msgid ""
+"man:debootstrap[8] needs man:linux[4] ABI enabled. Once enabled, execute "
+"the following command to install Ubuntu or Debian in [.filename]#/compat/"
+"ubuntu#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:186
+#, no-wrap
+msgid "# debootstrap focal /compat/ubuntu\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:192
+msgid ""
+"While it is technically possible to install into [.filename]#/compat/linux# "
+"instead, it's discouraged due to possible clashes with CentOS-based "
+"packages. Instead, derive the directory name from the distribution or "
+"version name, e.g., [.filename]#/compat/ubuntu#."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:213
+#, no-wrap
+msgid ""
+"I: Retrieving InRelease \n"
+"I: Checking Release signature\n"
+"I: Valid Release signature (key id F6ECB3762474EDA9D21B7022871920D1991BC93C)\n"
+"I: Retrieving Packages \n"
+"I: Validating Packages \n"
+"I: Resolving dependencies of required packages...\n"
+"I: Resolving dependencies of base packages...\n"
+"I: Checking component main on http://archive.ubuntu.com/ubuntu...\n"
+"[...]\n"
+"I: Configuring console-setup...\n"
+"I: Configuring kbd...\n"
+"I: Configuring ubuntu-minimal...\n"
+"I: Configuring libc-bin...\n"
+"I: Configuring ca-certificates...\n"
+"I: Base system installed successfully.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:216
+msgid "Then set up mounts in [.filename]#/etc/fstab#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:220
+msgid ""
+"If the contents of the home directory should be shared and to be able to run "
+"X11 applications, [.filename]#/home# and [.filename]#/tmp# should be mounted "
+"in the linux compat area using man:nullfs[5] for loopback."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:222
+msgid "The following example can be added to [.filename]#/etc/fstab#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:233
+#, no-wrap
+msgid ""
+"# Device Mountpoint FStype Options Dump Pass#\n"
+"devfs /compat/ubuntu/dev devfs rw,late 0 0\n"
+"tmpfs /compat/ubuntu/dev/shm tmpfs rw,late,size=1g,mode=1777 0 0\n"
+"fdescfs /compat/ubuntu/dev/fd fdescfs rw,late,linrdlnk 0 0\n"
+"linprocfs /compat/ubuntu/proc linprocfs rw,late 0 0\n"
+"linsysfs /compat/ubuntu/sys linsysfs rw,late 0 0\n"
+"/tmp /compat/ubuntu/tmp nullfs rw,late 0 0\n"
+"/home /compat/ubuntu/home nullfs rw,late 0 0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:236
+msgid "Then execute man:mount[8]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:240
+#, no-wrap
+msgid "# mount -al\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:244
+msgid "To access the system using man:chroot[8] execute the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:248
+#, no-wrap
+msgid "# chroot /compat/ubuntu /bin/bash\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:251
+msgid "Then man:uname[1] can be executed to check the Linux environment:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:255
+#, no-wrap
+msgid "# uname -s -r -m\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:262
+#, no-wrap
+msgid "Linux 3.17.0 x86_64\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:266
+msgid ""
+"Once inside the chroot, the system behaves as in a normal Ubuntu "
+"installation. While systemd doesn't work, the man:service[8] command works "
+"as usual."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:270
+msgid ""
+"To add the package repositories missing from defaults edit the file [."
+"filename]#/compat/ubuntu/etc/apt/sources.list#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:272
+msgid "For amd64 the following example can be used:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:279
+#, no-wrap
+msgid ""
+"deb http://archive.ubuntu.com/ubuntu focal main universe restricted multiverse\n"
+"deb http://security.ubuntu.com/ubuntu/ focal-security universe multiverse restricted main\n"
+"deb http://archive.ubuntu.com/ubuntu focal-backports universe multiverse restricted main\n"
+"deb http://archive.ubuntu.com/ubuntu focal-updates universe multiverse restricted main\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:282
+msgid "For arm64 this other example can be used:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:286
+#, no-wrap
+msgid "deb http://ports.ubuntu.com/ubuntu-ports bionic main universe restricted multiverse\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:290
+#, no-wrap
+msgid "Advanced Topics"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:293
+msgid ""
+"A list of all Linux-related man:sysctl[8] knobs can be found in man:linux[4]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:295
+msgid "Some applications require specific filesystems to be mounted."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:297
+msgid ""
+"This is normally handled by the [.filename]#/etc/rc.d/linux# script but can "
+"be disabled at boot executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:301
+#, no-wrap
+msgid "sysrc linux_mounts_enable=\"NO\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:304
+msgid ""
+"Filesystems mounted by the rc script will not work for Linux processes "
+"inside chroots or jails; if needed, configure them in [.filename]#/etc/"
+"fstab#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:312
+#, no-wrap
+msgid ""
+"devfs /compat/linux/dev devfs rw,late 0 0\n"
+"tmpfs /compat/linux/dev/shm tmpfs rw,late,size=1g,mode=1777 0 0\n"
+"fdescfs /compat/linux/dev/fd fdescfs rw,late,linrdlnk 0 0\n"
+"linprocfs /compat/linux/proc linprocfs rw,late 0 0\n"
+"linsysfs /compat/linux/sys linsysfs rw,late 0 0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:315
+msgid ""
+"Since the Linux binary compatibility layer has gained support for running "
+"both 32- and 64-bit Linux binaries, it is no longer possible to link the "
+"emulation functionality statically into a custom kernel."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:317
+#, no-wrap
+msgid "Installing Additional Libraries Manually"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:322
+msgid ""
+"For base system subdirectories created with man:debootstrap[8], use the "
+"instructions above instead."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:325
+msgid ""
+"If a Linux application complains about missing shared libraries after "
+"configuring Linux binary compatibility, determine which shared libraries the "
+"Linux binary needs and install them manually."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:327
+msgid ""
+"From a Linux system using the same CPU architecture, `ldd` can be used to "
+"determine which shared libraries the application needs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:329
+msgid ""
+"For example, to check which shared libraries `linuxdoom` needs, run this "
+"command from a Linux system that has Doom installed:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:333
+#, no-wrap
+msgid "% ldd linuxdoom\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:342
+#, no-wrap
+msgid ""
+"libXt.so.3 (DLL Jump 3.1) => /usr/X11/lib/libXt.so.3.1.0\n"
+"libX11.so.3 (DLL Jump 3.1) => /usr/X11/lib/libX11.so.3.1.0\n"
+"libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:346
+msgid ""
+"Then, copy all the files in the last column of the output from the Linux "
+"system into [.filename]#/compat/linux# on the FreeBSD system. Once copied, "
+"create symbolic links to the names in the first column."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:348
+msgid "This example will result in the following files on the FreeBSD system:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:357
+#, no-wrap
+msgid ""
+"/compat/linux/usr/X11/lib/libXt.so.3.1.0\n"
+"/compat/linux/usr/X11/lib/libXt.so.3 -> libXt.so.3.1.0\n"
+"/compat/linux/usr/X11/lib/libX11.so.3.1.0\n"
+"/compat/linux/usr/X11/lib/libX11.so.3 -> libX11.so.3.1.0\n"
+"/compat/linux/lib/libc.so.4.6.29\n"
+"/compat/linux/lib/libc.so.4 -> libc.so.4.6.29\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:362
+msgid ""
+"If a Linux shared library already exists with a matching major revision "
+"number to the first column of the `ldd` output, it does not need to be "
+"copied to the file named in the last column, as the existing library should "
+"work. It is advisable to copy the shared library if it is a newer version, "
+"though. The old one can be removed, as long as the symbolic link points to "
+"the new one."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:364
+msgid "For example, these libraries already exist on the FreeBSD system:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:369
+#, no-wrap
+msgid ""
+"/compat/linux/lib/libc.so.4.6.27\n"
+"/compat/linux/lib/libc.so.4 -> libc.so.4.6.27\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:372
+msgid "and `ldd` indicates that a binary requires a later version:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:376
+#, no-wrap
+msgid "libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:380
+msgid ""
+"Since the existing library is only one or two versions out of date in the "
+"last digit, the program should still work with the slightly older version. "
+"However, it is safe to replace the existing [.filename]#libc.so# with the "
+"newer version:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:385
+#, no-wrap
+msgid ""
+"/compat/linux/lib/libc.so.4.6.29\n"
+"/compat/linux/lib/libc.so.4 -> libc.so.4.6.29\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:389
+msgid ""
+"Generally, one will need to look for the shared libraries that Linux "
+"binaries depend on only the first few times that a Linux program is "
+"installed on FreeBSD. After a while, there will be a sufficient set of "
+"Linux shared libraries on the system to be able to run newly installed Linux "
+"binaries without any extra work."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:390
+#, no-wrap
+msgid "Branding Linux ELF Binaries"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:393
+msgid ""
+"The FreeBSD kernel uses several methods to determine if the binary to be "
+"executed is a Linux one: it checks the brand in the ELF file header, looks "
+"for known ELF interpreter paths and checks ELF notes; finally, by default, "
+"unbranded ELF executables are assumed to be Linux anyway."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:395
+msgid ""
+"Should all those methods fail, an attempt to execute the binary might result "
+"in error message:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:399
+#, no-wrap
+msgid "% ./my-linux-elf-binary\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:407
+#, no-wrap
+msgid ""
+"ELF binary type not known\n"
+"Abort\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:410
+msgid ""
+"To help the FreeBSD kernel distinguish between a FreeBSD ELF binary and a "
+"Linux binary, use man:brandelf[1]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:414
+#, no-wrap
+msgid "% brandelf -t Linux my-linux-elf-binary\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:416
+#, no-wrap
+msgid "Installing a Linux RPM Based Application"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:420
+msgid ""
+"To install a Linux RPM-based application, first install the package:"
+"archivers/rpm4[] package or port. Once installed, `root` can use this "
+"command to install a [.filename]#.rpm#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:425
+#, no-wrap
+msgid ""
+"# cd /compat/linux\n"
+"# rpm2cpio < /path/to/linux.archive.rpm | cpio -id\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:429
+msgid ""
+"If necessary, `brandelf` the installed ELF binaries. Note that this will "
+"prevent a clean uninstall."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:430
+#, no-wrap
+msgid "Configuring the Hostname Resolver"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:433
+msgid "If DNS does not work or this error appears:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:438
+#, no-wrap
+msgid ""
+"resolv+: \"bind\" is an invalid keyword resolv+:\n"
+"\"hosts\" is an invalid keyword\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:441
+msgid "configure [.filename]#/compat/linux/etc/host.conf# as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:446
+#, no-wrap
+msgid ""
+"order hosts, bind\n"
+"multi on\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:451
+msgid ""
+"This specifies that [.filename]#/etc/hosts# is searched first and DNS is "
+"searched second. When [.filename]#/compat/linux/etc/host.conf# does not "
+"exist, Linux applications use [.filename]#/etc/host.conf# in the host system "
+"but they complain since that file does not exist in FreeBSD. Remove `bind` "
+"if a name server is not configured using [.filename]#/etc/resolv.conf#."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:453
+#, no-wrap
+msgid "Miscellaneous"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/linuxemu/_index.adoc:455
+msgid ""
+"More information on how binary compatibility works with Linux(R) can be "
+"found in the article link:{linux-emulation}[Linux emulation in FreeBSD]."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/mac/_index.adoc b/documentation/content/en/books/handbook/mac/_index.adoc
index 431f01a1f6..19df9c11b5 100644
--- a/documentation/content/en/books/handbook/mac/_index.adoc
+++ b/documentation/content/en/books/handbook/mac/_index.adoc
@@ -1,13 +1,13 @@
---
-title: Chapter 16. Mandatory Access Control
+title: Chapter 18. Mandatory Access Control
part: Part III. System Administration
prev: books/handbook/jails
next: books/handbook/audit
description: "This chapter focuses on the MAC framework and the set of pluggable security policy modules FreeBSD provides for enabling various security mechanisms"
tags: ["MAC", "labels", "security", "configuration", "nagios"]
showBookMenu: true
-weight: 20
-path: "/books/handbook/"
+weight: 22
+path: "/books/handbook/mac/"
---
[[mac]]
@@ -18,7 +18,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 16
+:sectnumoffset: 18
:partnums:
:source-highlighter: rouge
:experimental:
diff --git a/documentation/content/en/books/handbook/mac/_index.po b/documentation/content/en/books/handbook/mac/_index.po
new file mode 100644
index 0000000000..edbc14854c
--- /dev/null
+++ b/documentation/content/en/books/handbook/mac/_index.po
@@ -0,0 +1,2324 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-07-15 16:41-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/mac/_index.adoc:1
+#, no-wrap
+msgid "This chapter focuses on the MAC framework and the set of pluggable security policy modules FreeBSD provides for enabling various security mechanisms"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/mac/_index.adoc:1
+#, no-wrap
+msgid "Part III. System Administration"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/mac/_index.adoc:1
+#, no-wrap
+msgid "Chapter 18. Mandatory Access Control"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/mac/_index.adoc:14
+#, no-wrap
+msgid "Mandatory Access Control"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/mac/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:61
+msgid ""
+"FreeBSD supports security extensions based on the POSIX(R).1e draft. These "
+"security mechanisms include file system Access Control Lists (crossref:"
+"security[fs-acl,“Access Control Lists”]) and Mandatory Access Control "
+"(MAC). MAC allows access control modules to be loaded in order to implement "
+"security policies. Some modules provide protections for a narrow subset of "
+"the system, hardening a particular service. Others provide comprehensive "
+"labeled security across all subjects and objects. The mandatory part of the "
+"definition indicates that enforcement of controls is performed by "
+"administrators and the operating system. This is in contrast to the default "
+"security mechanism of Discretionary Access Control (DAC) where enforcement "
+"is left to the discretion of users."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:63
+msgid ""
+"This chapter focuses on the MAC framework and the set of pluggable security "
+"policy modules FreeBSD provides for enabling various security mechanisms."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:65
+msgid "After reading this chapter, you will know:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:67
+msgid "The terminology associated with the MAC framework."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:68
+msgid ""
+"The capabilities of MAC security policy modules as well as the difference "
+"between a labeled and non-labeled policy."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:69
+msgid ""
+"The considerations to take into account before configuring a system to use "
+"the MAC framework."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:70
+msgid ""
+"Which MAC security policy modules are included in FreeBSD and how to "
+"configure them."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:71
+msgid "How to implement a more secure environment using the MAC framework."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:72
+msgid ""
+"How to test the MAC configuration to ensure the framework has been properly "
+"implemented."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:74
+msgid "Before reading this chapter, you should:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:76
+msgid ""
+"Understand UNIX(R) and FreeBSD basics (crossref:basics[basics,FreeBSD "
+"Basics])."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:77
+msgid ""
+"Have some familiarity with security and how it pertains to FreeBSD (crossref:"
+"security[security,Security])."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:84
+msgid ""
+"Improper MAC configuration may cause loss of system access, aggravation of "
+"users, or inability to access the features provided by Xorg. More "
+"importantly, MAC should not be relied upon to completely secure a system. "
+"The MAC framework only augments an existing security policy. Without sound "
+"security practices and regular security checks, the system will never be "
+"completely secure."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:87
+msgid ""
+"The examples contained within this chapter are for demonstration purposes "
+"and the example settings should _not_ be implemented on a production "
+"system. Implementing any security policy takes a good deal of "
+"understanding, proper design, and thorough testing."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:92
+msgid ""
+"While this chapter covers a broad range of security issues relating to the "
+"MAC framework, the development of new MAC security policy modules will not "
+"be covered. A number of security policy modules included with the MAC "
+"framework have specific characteristics which are provided for both testing "
+"and new module development. Refer to man:mac_test[4], man:mac_stub[4] and "
+"man:mac_none[4] for more information on these security policy modules and "
+"the various mechanisms they provide."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/mac/_index.adoc:94
+#, no-wrap
+msgid "Key Terms"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:97
+msgid "The following key terms are used when referring to the MAC framework:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:99
+msgid ""
+"_compartment_: a set of programs and data to be partitioned or separated, "
+"where users are given explicit access to specific component of a system. A "
+"compartment represents a grouping, such as a work group, department, "
+"project, or topic. Compartments make it possible to implement a need-to-know-"
+"basis security policy."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:100
+msgid ""
+"_integrity_: the level of trust which can be placed on data. As the "
+"integrity of the data is elevated, so does the ability to trust that data."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:101
+msgid ""
+"_level_: the increased or decreased setting of a security attribute. As the "
+"level increases, its security is considered to elevate as well."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:102
+msgid ""
+"_label_: a security attribute which can be applied to files, directories, or "
+"other items in the system. It could be considered a confidentiality stamp. "
+"When a label is placed on a file, it describes the security properties of "
+"that file and will only permit access by files, users, and resources with a "
+"similar security setting. The meaning and interpretation of label values "
+"depends on the policy configuration. Some policies treat a label as "
+"representing the integrity or secrecy of an object while other policies "
+"might use labels to hold rules for access."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:103
+msgid ""
+"_multilabel_: this property is a file system option which can be set in "
+"single-user mode using man:tunefs[8], during boot using man:fstab[5], or "
+"during the creation of a new file system. This option permits an "
+"administrator to apply different MAC labels on different objects. This "
+"option only applies to security policy modules which support labeling."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:104
+msgid ""
+"_single label_: a policy where the entire file system uses one label to "
+"enforce access control over the flow of data. Whenever `multilabel` is not "
+"set, all files will conform to the same label setting."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:105
+msgid ""
+"_object_: an entity through which information flows under the direction of a "
+"_subject_. This includes directories, files, fields, screens, keyboards, "
+"memory, magnetic storage, printers or any other data storage or moving "
+"device. An object is a data container or a system resource. Access to an "
+"object effectively means access to its data."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:106
+msgid ""
+"_subject_: any active entity that causes information to flow between "
+"_objects_ such as a user, user process, or system process. On FreeBSD, this "
+"is almost always a thread acting in a process on behalf of a user."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:107
+msgid ""
+"_policy_: a collection of rules which defines how objectives are to be "
+"achieved. A policy usually documents how certain items are to be handled. "
+"This chapter considers a policy to be a collection of rules which controls "
+"the flow of data and information and defines who has access to that data and "
+"information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:108
+msgid ""
+"_high-watermark_: this type of policy permits the raising of security levels "
+"for the purpose of accessing higher level information. In most cases, the "
+"original level is restored after the process is complete. Currently, the "
+"FreeBSD MAC framework does not include this type of policy."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:109
+msgid ""
+"_low-watermark_: this type of policy permits lowering security levels for "
+"the purpose of accessing information which is less secure. In most cases, "
+"the original security level of the user is restored after the process is "
+"complete. The only security policy module in FreeBSD to use this is man:"
+"mac_lomac[4]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:110
+msgid ""
+"_sensitivity_: usually used when discussing Multilevel Security (MLS). A "
+"sensitivity level describes how important or secret the data should be. As "
+"the sensitivity level increases, so does the importance of the secrecy, or "
+"confidentiality, of the data."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/mac/_index.adoc:112
+#, no-wrap
+msgid "Understanding MAC Labels"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:117
+msgid ""
+"A MAC label is a security attribute which may be applied to subjects and "
+"objects throughout the system. When setting a label, the administrator must "
+"understand its implications in order to prevent unexpected or undesired "
+"behavior of the system. The attributes available on an object depend on the "
+"loaded policy module, as policy modules interpret their attributes in "
+"different ways."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:121
+msgid ""
+"The security label on an object is used as a part of a security access "
+"control decision by a policy. With some policies, the label contains all of "
+"the information necessary to make a decision. In other policies, the labels "
+"may be processed as part of a larger rule set."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:125
+msgid ""
+"There are two types of label policies: single label and multi label. By "
+"default, the system will use single label. The administrator should be "
+"aware of the pros and cons of each in order to implement policies which meet "
+"the requirements of the system's security model."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:129
+msgid ""
+"A single label security policy only permits one label to be used for every "
+"subject or object. Since a single label policy enforces one set of access "
+"permissions across the entire system, it provides lower administration "
+"overhead, but decreases the flexibility of policies which support labeling. "
+"However, in many environments, a single label policy may be all that is "
+"required."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:133
+msgid ""
+"A single label policy is somewhat similar to DAC as `root` configures the "
+"policies so that users are placed in the appropriate categories and access "
+"levels. A notable difference is that many policy modules can also restrict "
+"`root`. Basic control over objects will then be released to the group, but "
+"`root` may revoke or modify the settings at any time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:138
+msgid ""
+"When appropriate, a multi label policy can be set on a UFS file system by "
+"passing `multilabel` to man:tunefs[8]. A multi label policy permits each "
+"subject or object to have its own independent MAC label. The decision to "
+"use a multi label or single label policy is only required for policies which "
+"implement the labeling feature, such as `biba`, `lomac`, and `mls`. Some "
+"policies, such as `seeotheruids`, `portacl` and `partition`, do not use "
+"labels at all."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:141
+msgid ""
+"Using a multi label policy on a partition and establishing a multi label "
+"security model can increase administrative overhead as everything in that "
+"file system has a label. This includes directories, files, and even device "
+"nodes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:144
+msgid ""
+"The following command will set `multilabel` on the specified UFS file "
+"system. This may only be done in single-user mode and is not a requirement "
+"for the swap file system:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:148
+#, no-wrap
+msgid "# tunefs -l enable /\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:154
+msgid ""
+"Some users have experienced problems with setting the `multilabel` flag on "
+"the root partition. If this is the case, please review <<mac-troubleshoot>>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:160
+msgid ""
+"Since the multi label policy is set on a per-file system basis, a multi "
+"label policy may not be needed if the file system layout is well designed. "
+"Consider an example security MAC model for a FreeBSD web server. This "
+"machine uses the single label, `biba/high`, for everything in the default "
+"file systems. If the web server needs to run at `biba/low` to prevent write "
+"up capabilities, it could be installed to a separate UFS [.filename]#/usr/"
+"local# file system set at `biba/low`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mac/_index.adoc:161
+#, no-wrap
+msgid "Label Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:165
+msgid ""
+"Virtually all aspects of label policy module configuration will be performed "
+"using the base system utilities. These commands provide a simple interface "
+"for object or subject configuration or the manipulation and verification of "
+"the configuration."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:168
+msgid ""
+"All configuration may be done using `setfmac`, which is used to set MAC "
+"labels on system objects, and `setpmac`, which is used to set the labels on "
+"system subjects. For example, to set the `biba` MAC label to `high` on [."
+"filename]#test#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:172
+#, no-wrap
+msgid "# setfmac biba/high test\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:180
+msgid ""
+"If the configuration is successful, the prompt will be returned without "
+"error. A common error is `Permission denied` which usually occurs when the "
+"label is being set or modified on a restricted object. Other conditions may "
+"produce different failures. For instance, the file may not be owned by the "
+"user attempting to relabel the object, the object may not exist, or the "
+"object may be read-only. A mandatory policy will not allow the process to "
+"relabel the file, maybe because of a property of the file, a property of the "
+"process, or a property of the proposed new label value. For example, if a "
+"user running at low integrity tries to change the label of a high integrity "
+"file, or a user running at low integrity tries to change the label of a low "
+"integrity file to a high integrity label, these operations will fail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:182
+msgid ""
+"The system administrator may use `setpmac` to override the policy module's "
+"settings by assigning a different label to the invoked process:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:190
+#, no-wrap
+msgid ""
+"# setfmac biba/high test\n"
+"Permission denied\n"
+"# setpmac biba/low setfmac biba/high test\n"
+"# getfmac test\n"
+"test: biba/high\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:195
+msgid ""
+"For currently running processes, such as sendmail, `getpmac` is usually used "
+"instead. This command takes a process ID (PID) in place of a command name. "
+"If users attempt to manipulate a file not in their access, subject to the "
+"rules of the loaded policy modules, the `Operation not permitted` error will "
+"be displayed."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mac/_index.adoc:196
+#, no-wrap
+msgid "Predefined Labels"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:199
+msgid ""
+"A few FreeBSD policy modules which support the labeling feature offer three "
+"predefined labels: `low`, `equal`, and `high`, where:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:201
+msgid ""
+"`low` is considered the lowest label setting an object or subject may have. "
+"Setting this on objects or subjects blocks their access to objects or "
+"subjects marked high."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:202
+msgid ""
+"`equal` sets the subject or object to be disabled or unaffected and should "
+"only be placed on objects considered to be exempt from the policy."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:203
+msgid ""
+"`high` grants an object or subject the highest setting available in the Biba "
+"and MLS policy modules."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:207
+msgid ""
+"Such policy modules include man:mac_biba[4], man:mac_mls[4] and man:"
+"mac_lomac[4]. Each of the predefined labels establishes a different "
+"information flow directive. Refer to the manual page of the module to "
+"determine the traits of the generic label configurations."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mac/_index.adoc:208
+#, no-wrap
+msgid "Numeric Labels"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:213
+msgid ""
+"The Biba and MLS policy modules support a numeric label which may be set to "
+"indicate the precise level of hierarchical control. This numeric level is "
+"used to partition or sort information into different groups of "
+"classification, only permitting access to that group or a higher group "
+"level. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:217
+#, no-wrap
+msgid "biba/10:2+3+6(5:2+3-20:2+3+4+5+6)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:220
+msgid ""
+"may be interpreted as \"Biba Policy Label/Grade 10:Compartments 2, 3 and 6: "
+"(grade 5 ...\")"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:223
+msgid ""
+"In this example, the first grade would be considered the effective grade "
+"with effective compartments, the second grade is the low grade, and the last "
+"one is the high grade. In most configurations, such fine-grained settings "
+"are not needed as they are considered to be advanced configurations."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:226
+msgid ""
+"System objects only have a current grade and compartment. System subjects "
+"reflect the range of available rights in the system, and network interfaces, "
+"where they are used for access control."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:231
+msgid ""
+"The grade and compartments in a subject and object pair are used to "
+"construct a relationship known as _dominance_, in which a subject dominates "
+"an object, the object dominates the subject, neither dominates the other, or "
+"both dominate each other. The \"both dominate\" case occurs when the two "
+"labels are equal. Due to the information flow nature of Biba, a user has "
+"rights to a set of compartments that might correspond to projects, but "
+"objects also have a set of compartments. Users may have to subset their "
+"rights using `su` or `setpmac` in order to access objects in a compartment "
+"from which they are not restricted."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mac/_index.adoc:232
+#, no-wrap
+msgid "User Labels"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:237
+msgid ""
+"Users are required to have labels so that their files and processes properly "
+"interact with the security policy defined on the system. This is configured "
+"in [.filename]#/etc/login.conf# using login classes. Every policy module "
+"that uses labels will implement the user class setting."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:242
+msgid ""
+"To set the user class default label which will be enforced by MAC, add a "
+"`label` entry. An example `label` entry containing every policy module is "
+"displayed below. Note that in a real configuration, the administrator would "
+"never enable every policy module. It is recommended that the rest of this "
+"chapter be reviewed before any configuration is implemented."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:268
+#, no-wrap
+msgid ""
+"default:\\\n"
+"\t:copyright=/etc/COPYRIGHT:\\\n"
+"\t:welcome=/etc/motd:\\\n"
+"\t:setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\\\n"
+"\t:path=~/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:\\\n"
+"\t:manpath=/usr/share/man /usr/local/man:\\\n"
+"\t:nologin=/usr/sbin/nologin:\\\n"
+"\t:cputime=1h30m:\\\n"
+"\t:datasize=8M:\\\n"
+"\t:vmemoryuse=100M:\\\n"
+"\t:stacksize=2M:\\\n"
+"\t:memorylocked=4M:\\\n"
+"\t:memoryuse=8M:\\\n"
+"\t:filesize=8M:\\\n"
+"\t:coredumpsize=8M:\\\n"
+"\t:openfiles=24:\\\n"
+"\t:maxproc=32:\\\n"
+"\t:priority=0:\\\n"
+"\t:requirehome:\\\n"
+"\t:passwordtime=91d:\\\n"
+"\t:umask=022:\\\n"
+"\t:ignoretime@:\\\n"
+"\t:label=partition/13,mls/5,biba/10(5-15),lomac/10[2]:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:273
+msgid ""
+"While users can not modify the default value, they may change their label "
+"after they login, subject to the constraints of the policy. The example "
+"above tells the Biba policy that a process's minimum integrity is `5`, its "
+"maximum is `15`, and the default effective label is `10`. The process will "
+"run at `10` until it chooses to change label, perhaps due to the user using "
+"`setpmac`, which will be constrained by Biba to the configured range."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:275
+msgid ""
+"After any change to [.filename]#login.conf#, the login class capability "
+"database must be rebuilt using `cap_mkdb`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:278
+msgid ""
+"Many sites have a large number of users requiring several different user "
+"classes. In depth planning is required as this can become difficult to "
+"manage."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mac/_index.adoc:279
+#, no-wrap
+msgid "Network Interface Labels"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:284
+msgid ""
+"Labels may be set on network interfaces to help control the flow of data "
+"across the network. Policies using network interface labels function in the "
+"same way that policies function with respect to objects. Users at high "
+"settings in Biba, for example, will not be permitted to access network "
+"interfaces with a label of `low`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:286
+msgid ""
+"When setting the MAC label on network interfaces, `maclabel` may be passed "
+"to `ifconfig`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:290
+#, no-wrap
+msgid "# ifconfig bge0 maclabel biba/equal\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:294
+msgid ""
+"This example will set the MAC label of `biba/equal` on the `bge0` "
+"interface. When using a setting similar to `biba/high(low-high)`, the "
+"entire label should be quoted to prevent an error from being returned."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:298
+msgid ""
+"Each policy module which supports labeling has a tunable which may be used "
+"to disable the MAC label on network interfaces. Setting the label to "
+"`equal` will have a similar effect. Review the output of `sysctl`, the "
+"policy manual pages, and the information in the rest of this chapter for "
+"more information on those tunables."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/mac/_index.adoc:300
+#, no-wrap
+msgid "Planning the Security Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:304
+msgid ""
+"Before implementing any MAC policies, a planning phase is recommended. "
+"During the planning stages, an administrator should consider the "
+"implementation requirements and goals, such as:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:306
+msgid ""
+"How to classify information and resources available on the target systems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:307
+msgid ""
+"Which information or resources to restrict access to along with the type of "
+"restrictions that should be applied."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:308
+msgid "Which MAC modules will be required to achieve this goal."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:311
+msgid ""
+"A trial run of the trusted system and its configuration should occur "
+"_before_ a MAC implementation is used on production systems. Since "
+"different environments have different needs and requirements, establishing a "
+"complete security profile will decrease the need of changes once the system "
+"goes live."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:317
+msgid ""
+"Consider how the MAC framework augments the security of the system as a "
+"whole. The various security policy modules provided by the MAC framework "
+"could be used to protect the network and file systems or to block users from "
+"accessing certain ports and sockets. Perhaps the best use of the policy "
+"modules is to load several security policy modules at a time in order to "
+"provide a MLS environment. This approach differs from a hardening policy, "
+"which typically hardens elements of a system which are used only for "
+"specific purposes. The downside to MLS is increased administrative overhead."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:321
+msgid ""
+"The overhead is minimal when compared to the lasting effect of a framework "
+"which provides the ability to pick and choose which policies are required "
+"for a specific configuration and which keeps performance overhead down. The "
+"reduction of support for unneeded policies can increase the overall "
+"performance of the system as well as offer flexibility of choice. A good "
+"implementation would consider the overall security requirements and "
+"effectively implement the various security policy modules offered by the "
+"framework."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:324
+msgid ""
+"A system utilizing MAC guarantees that a user will not be permitted to "
+"change security attributes at will. All user utilities, programs, and "
+"scripts must work within the constraints of the access rules provided by the "
+"selected security policy modules and control of the MAC access rules is in "
+"the hands of the system administrator."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:328
+msgid ""
+"It is the duty of the system administrator to carefully select the correct "
+"security policy modules. For an environment that needs to limit access "
+"control over the network, the man:mac_portacl[4], man:mac_ifoff[4], and man:"
+"mac_biba[4] policy modules make good starting points. For an environment "
+"where strict confidentiality of file system objects is required, consider "
+"the man:mac_bsdextended[4] and man:mac_mls[4] policy modules."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:335
+msgid ""
+"Policy decisions could be made based on network configuration. If only "
+"certain users should be permitted access to man:ssh[1], the man:"
+"mac_portacl[4] policy module is a good choice. In the case of file systems, "
+"access to objects might be considered confidential to some users, but not to "
+"others. As an example, a large development team might be broken off into "
+"smaller projects where developers in project A might not be permitted to "
+"access objects written by developers in project B. Yet both projects might "
+"need to access objects created by developers in project C. Using the "
+"different security policy modules provided by the MAC framework, users could "
+"be divided into these groups and then given access to the appropriate "
+"objects."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:339
+msgid ""
+"Each security policy module has a unique way of dealing with the overall "
+"security of a system. Module selection should be based on a well thought "
+"out security policy which may require revision and reimplementation. "
+"Understanding the different security policy modules offered by the MAC "
+"framework will help administrators choose the best policies for their "
+"situations."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:341
+msgid ""
+"The rest of this chapter covers the available modules, describes their use "
+"and configuration, and in some cases, provides insight on applicable "
+"situations."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:346
+msgid ""
+"Implementing MAC is much like implementing a firewall since care must be "
+"taken to prevent being completely locked out of the system. The ability to "
+"revert back to a previous configuration should be considered and the "
+"implementation of MAC over a remote connection should be done with extreme "
+"caution."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/mac/_index.adoc:349
+#, no-wrap
+msgid "Available MAC Policies"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:355
+msgid ""
+"The default FreeBSD kernel includes `options MAC`. This means that every "
+"module included with the MAC framework can be loaded with `kldload` as a run-"
+"time kernel module. After testing the module, add the module name to [."
+"filename]#/boot/loader.conf# so that it will load during boot. Each module "
+"also provides a kernel option for those administrators who choose to compile "
+"their own custom kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:358
+msgid ""
+"FreeBSD includes a group of policies that will cover most security "
+"requirements. Each policy is summarized below. The last three policies "
+"support integer settings in place of the three default labels."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mac/_index.adoc:360
+#, no-wrap
+msgid "The MAC See Other UIDs Policy"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:363
+msgid "Module name: [.filename]#mac_seeotheruids.ko#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:365
+msgid "Kernel configuration line: `options MAC_SEEOTHERUIDS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:367
+msgid "Boot option: `mac_seeotheruids_load=\"YES\"`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:370
+msgid ""
+"The man:mac_seeotheruids[4] module extends the `security.bsd.see_other_uids` "
+"and `security.bsd.see_other_gids sysctl` tunables. This option does not "
+"require any labels to be set before configuration and can operate "
+"transparently with other modules."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:372
+msgid ""
+"After loading the module, the following `sysctl` tunables may be used to "
+"control its features:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:374
+msgid ""
+"`security.mac.seeotheruids.enabled` enables the module and implements the "
+"default settings which deny users the ability to view processes and sockets "
+"owned by other users."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:375
+msgid ""
+"`security.mac.seeotheruids.specificgid_enabled` allows specified groups to "
+"be exempt from this policy. To exempt specific groups, use the `security.mac."
+"seeotheruids.specificgid=_XXX_ sysctl` tunable, replacing _XXX_ with the "
+"numeric group ID to be exempted."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:376
+msgid ""
+"`security.mac.seeotheruids.primarygroup_enabled` is used to exempt specific "
+"primary groups from this policy. When using this tunable, `security.mac."
+"seeotheruids.specificgid_enabled` may not be set."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mac/_index.adoc:378
+#, no-wrap
+msgid "The MAC BSD Extended Policy"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:381
+msgid "Module name: [.filename]#mac_bsdextended.ko#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:383
+msgid "Kernel configuration line: `options MAC_BSDEXTENDED`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:385
+msgid "Boot option: `mac_bsdextended_load=\"YES\"`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:391
+msgid ""
+"The man:mac_bsdextended[4] module enforces a file system firewall. It "
+"provides an extension to the standard file system permissions model, "
+"permitting an administrator to create a firewall-like ruleset to protect "
+"files, utilities, and directories in the file system hierarchy. When access "
+"to a file system object is attempted, the list of rules is iterated until "
+"either a matching rule is located or the end is reached. This behavior may "
+"be changed using `security.mac.bsdextended.firstmatch_enabled`. Similar to "
+"other firewall modules in FreeBSD, a file containing the access control "
+"rules can be created and read by the system at boot time using an man:rc."
+"conf[5] variable."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:394
+msgid ""
+"The rule list may be entered using man:ugidfw[8] which has a syntax similar "
+"to man:ipfw[8]. More tools can be written by using the functions in the man:"
+"libugidfw[3] library."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:396
+msgid ""
+"After the man:mac_bsdextended[4] module has been loaded, the following "
+"command may be used to list the current rule configuration:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:401
+#, no-wrap
+msgid ""
+"# ugidfw list\n"
+"0 slots, 0 rules\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:405
+msgid ""
+"By default, no rules are defined and everything is completely accessible. "
+"To create a rule which blocks all access by users but leaves `root` "
+"unaffected:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:409
+#, no-wrap
+msgid "# ugidfw add subject not uid root new object not uid root mode n\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:413
+msgid ""
+"While this rule is simple to implement, it is a very bad idea as it blocks "
+"all users from issuing any commands. A more realistic example blocks "
+"`user1` all access, including directory listings, to ``_user2_``'s home "
+"directory:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:418
+#, no-wrap
+msgid ""
+"# ugidfw set 2 subject uid user1 object uid user2 mode n\n"
+"# ugidfw set 3 subject uid user1 object gid user2 mode n\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:422
+msgid ""
+"Instead of `user1`, `not uid _user2_` could be used in order to enforce the "
+"same access restrictions for all users. However, the `root` user is "
+"unaffected by these rules."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:426
+msgid ""
+"Extreme caution should be taken when working with this module as incorrect "
+"use could block access to certain parts of the file system."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mac/_index.adoc:429
+#, no-wrap
+msgid "The MAC Interface Silencing Policy"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:432
+msgid "Module name: [.filename]#mac_ifoff.ko#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:434
+msgid "Kernel configuration line: `options MAC_IFOFF`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:436
+msgid "Boot option: `mac_ifoff_load=\"YES\"`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:439
+msgid ""
+"The man:mac_ifoff[4] module is used to disable network interfaces on the fly "
+"and to keep network interfaces from being brought up during system boot. It "
+"does not use labels and does not depend on any other MAC modules."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:441
+msgid ""
+"Most of this module's control is performed through these `sysctl` tunables:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:443
+msgid ""
+"`security.mac.ifoff.lo_enabled` enables or disables all traffic on the "
+"loopback, man:lo[4], interface."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:444
+msgid ""
+"`security.mac.ifoff.bpfrecv_enabled` enables or disables all traffic on the "
+"Berkeley Packet Filter interface, man:bpf[4]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:445
+msgid ""
+"`security.mac.ifoff.other_enabled` enables or disables traffic on all other "
+"interfaces."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:448
+msgid ""
+"One of the most common uses of man:mac_ifoff[4] is network monitoring in an "
+"environment where network traffic should not be permitted during the boot "
+"sequence. Another use would be to write a script which uses an application "
+"such as package:security/aide[] to automatically block network traffic if it "
+"finds new or altered files in protected directories."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mac/_index.adoc:450
+#, no-wrap
+msgid "The MAC Port Access Control List Policy"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:453
+msgid "Module name: [.filename]#mac_portacl.ko#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:455
+msgid "Kernel configuration line: `MAC_PORTACL`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:457
+msgid "Boot option: `mac_portacl_load=\"YES\"`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:459
+msgid ""
+"The man:mac_portacl[4] module is used to limit binding to local TCP and UDP "
+"ports, making it possible to allow non-`root` users to bind to specified "
+"privileged ports below 1024."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:462
+msgid ""
+"Once loaded, this module enables the MAC policy on all sockets. The "
+"following tunables are available:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:464
+msgid ""
+"`security.mac.portacl.enabled` enables or disables the policy completely."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:465
+msgid ""
+"`security.mac.portacl.port_high` sets the highest port number that man:"
+"mac_portacl[4] protects."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:466
+msgid ""
+"`security.mac.portacl.suser_exempt`, when set to a non-zero value, exempts "
+"the `root` user from this policy."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:467
+msgid ""
+"`security.mac.portacl.rules` specifies the policy as a text string of the "
+"form `rule[,rule,...]`, with as many rules as needed, and where each rule is "
+"of the form `idtype:id:protocol:port`. The `idtype` is either `uid` or "
+"`gid`. The `protocol` parameter can be `tcp` or `udp`. The `port` parameter "
+"is the port number to allow the specified user or group to bind to. Only "
+"numeric values can be used for the user ID, group ID, and port parameters."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:470
+msgid ""
+"By default, ports below 1024 can only be used by privileged processes which "
+"run as `root`. For man:mac_portacl[4] to allow non-privileged processes to "
+"bind to ports below 1024, set the following tunables as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:476
+#, no-wrap
+msgid ""
+"# sysctl security.mac.portacl.port_high=1023\n"
+"# sysctl net.inet.ip.portrange.reservedlow=0\n"
+"# sysctl net.inet.ip.portrange.reservedhigh=0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:479
+msgid ""
+"To prevent the `root` user from being affected by this policy, set `security."
+"mac.portacl.suser_exempt` to a non-zero value."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:483
+#, no-wrap
+msgid "# sysctl security.mac.portacl.suser_exempt=1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:486
+msgid ""
+"To allow the `www` user with UID 80 to bind to port 80 without ever needing "
+"`root` privilege:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:490
+#, no-wrap
+msgid "# sysctl security.mac.portacl.rules=uid:80:tcp:80\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:493
+msgid ""
+"This next example permits the user with the UID of 1001 to bind to TCP ports "
+"110 (POP3) and 995 (POP3s):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:497
+#, no-wrap
+msgid "# sysctl security.mac.portacl.rules=uid:1001:tcp:110,uid:1001:tcp:995\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mac/_index.adoc:500
+#, no-wrap
+msgid "The MAC Partition Policy"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:503
+msgid "Module name: [.filename]#mac_partition.ko#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:505
+msgid "Kernel configuration line: `options MAC_PARTITION`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:507
+msgid "Boot option: `mac_partition_load=\"YES\"`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:511
+msgid ""
+"The man:mac_partition[4] policy drops processes into specific \"partitions\" "
+"based on their MAC label. Most configuration for this policy is done using "
+"man:setpmac[8]. One `sysctl` tunable is available for this policy:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:513
+msgid ""
+"`security.mac.partition.enabled` enables the enforcement of MAC process "
+"partitions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:516
+msgid ""
+"When this policy is enabled, users will only be permitted to see their "
+"processes, and any others within their partition, but will not be permitted "
+"to work with utilities outside the scope of this partition. For instance, a "
+"user in the `insecure` class will not be permitted to access `top` as well "
+"as many other commands that must spawn a process."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:519
+msgid ""
+"This example adds `top` to the label set on users in the `insecure` class. "
+"All processes spawned by users in the `insecure` class will stay in the "
+"`partition/13` label."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:523
+#, no-wrap
+msgid "# setpmac partition/13 top\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:526
+msgid "This command displays the partition label and the process list:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:530
+#, no-wrap
+msgid "# ps Zax\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:533
+msgid ""
+"This command displays another user's process partition label and that user's "
+"currently running processes:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:537
+#, no-wrap
+msgid "# ps -ZU trhodes\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:542
+msgid ""
+"Users can see processes in ``root``'s label unless the man:"
+"mac_seeotheruids[4] policy is loaded."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mac/_index.adoc:545
+#, no-wrap
+msgid "The MAC Multi-Level Security Module"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:548
+msgid "Module name: [.filename]#mac_mls.ko#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:550
+msgid "Kernel configuration line: `options MAC_MLS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:552
+msgid "Boot option: `mac_mls_load=\"YES\"`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:554
+msgid ""
+"The man:mac_mls[4] policy controls access between subjects and objects in "
+"the system by enforcing a strict information flow policy."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:558
+msgid ""
+"In MLS environments, a \"clearance\" level is set in the label of each "
+"subject or object, along with compartments. Since these clearance levels "
+"can reach numbers greater than several thousand, it would be a daunting task "
+"to thoroughly configure every subject or object. To ease this "
+"administrative overhead, three labels are included in this policy: `mls/"
+"low`, `mls/equal`, and `mls/high`, where:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:560
+msgid ""
+"Anything labeled with `mls/low` will have a low clearance level and not be "
+"permitted to access information of a higher level. This label also prevents "
+"objects of a higher clearance level from writing or passing information to a "
+"lower level."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:561
+msgid ""
+"`mls/equal` should be placed on objects which should be exempt from the "
+"policy."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:562
+msgid ""
+"`mls/high` is the highest level of clearance possible. Objects assigned this "
+"label will hold dominance over all other objects in the system; however, "
+"they will not permit the leaking of information to objects of a lower class."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:564
+msgid "MLS provides:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:566
+msgid ""
+"A hierarchical security level with a set of non-hierarchical categories."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:567
+msgid ""
+"Fixed rules of `no read up, no write down`. This means that a subject can "
+"have read access to objects on its own level or below, but not above. "
+"Similarly, a subject can have write access to objects on its own level or "
+"above, but not beneath."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:568
+msgid "Secrecy, or the prevention of inappropriate disclosure of data."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:569
+msgid ""
+"A basis for the design of systems that concurrently handle data at multiple "
+"sensitivity levels without leaking information between secret and "
+"confidential."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:571
+msgid "The following `sysctl` tunables are available:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:573
+msgid "`security.mac.mls.enabled` is used to enable or disable the MLS policy."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:574
+msgid ""
+"`security.mac.mls.ptys_equal` labels all man:pty[4] devices as `mls/equal` "
+"during creation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:575
+msgid ""
+"`security.mac.mls.revocation_enabled` revokes access to objects after their "
+"label changes to a label of a lower grade."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:576
+msgid ""
+"`security.mac.mls.max_compartments` sets the maximum number of compartment "
+"levels allowed on a system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:578
+msgid ""
+"To manipulate MLS labels, use man:setfmac[8]. To assign a label to an object:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:582
+#, no-wrap
+msgid "# setfmac mls/5 test\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:585
+msgid "To get the MLS label for the file [.filename]#test#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:589
+#, no-wrap
+msgid "# getfmac test\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:592
+msgid ""
+"Another approach is to create a master policy file in [.filename]#/etc/# "
+"which specifies the MLS policy information and to feed that file to "
+"`setfmac`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:596
+msgid ""
+"When using the MLS policy module, an administrator plans to control the flow "
+"of sensitive information. The default `block read up block write down` sets "
+"everything to a low state. Everything is accessible and an administrator "
+"slowly augments the confidentiality of the information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:601
+msgid ""
+"Beyond the three basic label options, an administrator may group users and "
+"groups as required to block the information flow between them. It might be "
+"easier to look at the information in clearance levels using descriptive "
+"words, such as classifications of `Confidential`, `Secret`, and `Top "
+"Secret`. Some administrators instead create different groups based on "
+"project levels. Regardless of the classification method, a well thought out "
+"plan must exist before implementing a restrictive policy."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:603
+msgid ""
+"Some example situations for the MLS policy module include an e-commerce web "
+"server, a file server holding critical company information, and financial "
+"institution environments."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mac/_index.adoc:605
+#, no-wrap
+msgid "The MAC Biba Module"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:608
+msgid "Module name: [.filename]#mac_biba.ko#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:610
+msgid "Kernel configuration line: `options MAC_BIBA`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:612
+msgid "Boot option: `mac_biba_load=\"YES\"`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:616
+msgid ""
+"The man:mac_biba[4] module loads the MAC Biba policy. This policy is "
+"similar to the MLS policy with the exception that the rules for information "
+"flow are slightly reversed. This is to prevent the downward flow of "
+"sensitive information whereas the MLS policy prevents the upward flow of "
+"sensitive information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:620
+msgid ""
+"In Biba environments, an \"integrity\" label is set on each subject or "
+"object. These labels are made up of hierarchical grades and non-"
+"hierarchical components. As a grade ascends, so does its integrity."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:622
+msgid "Supported labels are `biba/low`, `biba/equal`, and `biba/high`, where:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:624
+msgid ""
+"`biba/low` is considered the lowest integrity an object or subject may have. "
+"Setting this on objects or subjects blocks their write access to objects or "
+"subjects marked as `biba/high`, but will not prevent read access."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:625
+msgid ""
+"`biba/equal` should only be placed on objects considered to be exempt from "
+"the policy."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:626
+msgid ""
+"`biba/high` permits writing to objects set at a lower label, but does not "
+"permit reading that object. It is recommended that this label be placed on "
+"objects that affect the integrity of the entire system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:628
+msgid "Biba provides:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:630
+msgid ""
+"Hierarchical integrity levels with a set of non-hierarchical integrity "
+"categories."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:631
+msgid ""
+"Fixed rules are `no write up, no read down`, the opposite of MLS. A subject "
+"can have write access to objects on its own level or below, but not above. "
+"Similarly, a subject can have read access to objects on its own level or "
+"above, but not below."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:632
+msgid "Integrity by preventing inappropriate modification of data."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:633
+msgid "Integrity levels instead of MLS sensitivity levels."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:635
+msgid "The following tunables can be used to manipulate the Biba policy:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:637
+msgid ""
+"`security.mac.biba.enabled` is used to enable or disable enforcement of the "
+"Biba policy on the target machine."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:638
+msgid ""
+"`security.mac.biba.ptys_equal` is used to disable the Biba policy on man:"
+"pty[4] devices."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:639
+msgid ""
+"`security.mac.biba.revocation_enabled` forces the revocation of access to "
+"objects if the label is changed to dominate the subject."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:641
+msgid ""
+"To access the Biba policy setting on system objects, use `setfmac` and "
+"`getfmac`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:647
+#, no-wrap
+msgid ""
+"# setfmac biba/low test\n"
+"# getfmac test\n"
+"test: biba/low\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:653
+msgid ""
+"Integrity, which is different from sensitivity, is used to guarantee that "
+"information is not manipulated by untrusted parties. This includes "
+"information passed between subjects and objects. It ensures that users will "
+"only be able to modify or access information they have been given explicit "
+"access to. The man:mac_biba[4] security policy module permits an "
+"administrator to configure which files and programs a user may see and "
+"invoke while assuring that the programs and files are trusted by the system "
+"for that user."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:659
+msgid ""
+"During the initial planning phase, an administrator must be prepared to "
+"partition users into grades, levels, and areas. The system will default to "
+"a high label once this policy module is enabled, and it is up to the "
+"administrator to configure the different grades and levels for users. "
+"Instead of using clearance levels, a good planning method could include "
+"topics. For instance, only allow developers modification access to the "
+"source code repository, source code compiler, and other development "
+"utilities. Other users would be grouped into other categories such as "
+"testers, designers, or end users and would only be permitted read access."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:664
+msgid ""
+"A lower integrity subject is unable to write to a higher integrity subject "
+"and a higher integrity subject cannot list or read a lower integrity "
+"object. Setting a label at the lowest possible grade could make it "
+"inaccessible to subjects. Some prospective environments for this security "
+"policy module would include a constrained web server, a development and test "
+"machine, and a source code repository. A less useful implementation would "
+"be a personal workstation, a machine used as a router, or a network firewall."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mac/_index.adoc:666
+#, no-wrap
+msgid "The MAC Low-watermark Module"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:669
+msgid "Module name: [.filename]#mac_lomac.ko#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:671
+msgid "Kernel configuration line: `options MAC_LOMAC`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:673
+msgid "Boot option: `mac_lomac_load=\"YES\"`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:675
+msgid ""
+"Unlike the MAC Biba policy, the man:mac_lomac[4] policy permits access to "
+"lower integrity objects only after decreasing the integrity level to not "
+"disrupt any integrity rules."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:679
+msgid ""
+"The Low-watermark integrity policy works almost identically to Biba, with "
+"the exception of using floating labels to support subject demotion via an "
+"auxiliary grade compartment. This secondary compartment takes the form "
+"`[auxgrade]`. When assigning a policy with an auxiliary grade, use the "
+"syntax `lomac/10[2]`, where `2` is the auxiliary grade."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:682
+msgid ""
+"This policy relies on the ubiquitous labeling of all system objects with "
+"integrity labels, permitting subjects to read from low integrity objects and "
+"then downgrading the label on the subject to prevent future writes to high "
+"integrity objects using `[auxgrade]`. The policy may provide greater "
+"compatibility and require less initial configuration than Biba."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:684
+msgid ""
+"Like the Biba and MLS policies, `setfmac` and `setpmac` are used to place "
+"labels on system objects:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:689
+#, no-wrap
+msgid ""
+"# setfmac /usr/home/trhodes lomac/high[low]\n"
+"# getfmac /usr/home/trhodes lomac/high[low]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:692
+msgid ""
+"The auxiliary grade `low` is a feature provided only by the MACLOMAC policy."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/mac/_index.adoc:694
+#, no-wrap
+msgid "User Lock Down"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:698
+msgid ""
+"This example considers a relatively small storage system with fewer than "
+"fifty users. Users will have login capabilities and are permitted to store "
+"data and access resources."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:700
+msgid ""
+"For this scenario, the man:mac_bsdextended[4] and man:mac_seeotheruids[4] "
+"policy modules could co-exist and block access to system objects while "
+"hiding user processes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:702
+msgid "Begin by adding the following line to [.filename]#/boot/loader.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:706
+#, no-wrap
+msgid "mac_seeotheruids_load=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:709
+msgid ""
+"The man:mac_bsdextended[4] security policy module may be activated by adding "
+"this line to [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:713
+#, no-wrap
+msgid "ugidfw_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:718
+msgid ""
+"Default rules stored in [.filename]#/etc/rc.bsdextended# will be loaded at "
+"system initialization. However, the default entries may need modification. "
+"Since this machine is expected only to service users, everything may be left "
+"commented out except the last two lines in order to force the loading of "
+"user owned system objects by default."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:723
+msgid ""
+"Add the required users to this machine and reboot. For testing purposes, "
+"try logging in as a different user across two consoles. Run `ps aux` to see "
+"if processes of other users are visible. Verify that running man:ls[1] on "
+"another user's home directory fails."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:725
+msgid ""
+"Do not try to test with the `root` user unless the specific ``sysctl``s have "
+"been modified to block super user access."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:730
+msgid ""
+"When a new user is added, their man:mac_bsdextended[4] rule will not be in "
+"the ruleset list. To update the ruleset quickly, unload the security policy "
+"module and reload it again using man:kldunload[8] and man:kldload[8]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/mac/_index.adoc:733
+#, no-wrap
+msgid "Nagios in a MAC Jail"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:737
+msgid ""
+"This section demonstrates the steps that are needed to implement the Nagios "
+"network monitoring system in a MAC environment. This is meant as an example "
+"which still requires the administrator to test that the implemented policy "
+"meets the security requirements of the network before using in a production "
+"environment."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:740
+msgid ""
+"This example requires `multilabel` to be set on each file system. It also "
+"assumes that package:net-mgmt/nagios-plugins[], package:net-mgmt/nagios[], "
+"and package:www/apache22[] are all installed, configured, and working "
+"correctly before attempting the integration into the MAC framework."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mac/_index.adoc:741
+#, no-wrap
+msgid "Create an Insecure User Class"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:744
+msgid ""
+"Begin the procedure by adding the following user class to [.filename]#/etc/"
+"login.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:770
+#, no-wrap
+msgid ""
+"insecure:\\\n"
+":copyright=/etc/COPYRIGHT:\\\n"
+":welcome=/etc/motd:\\\n"
+":setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\\\n"
+":path=~/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin\n"
+":manpath=/usr/share/man /usr/local/man:\\\n"
+":nologin=/usr/sbin/nologin:\\\n"
+":cputime=1h30m:\\\n"
+":datasize=8M:\\\n"
+":vmemoryuse=100M:\\\n"
+":stacksize=2M:\\\n"
+":memorylocked=4M:\\\n"
+":memoryuse=8M:\\\n"
+":filesize=8M:\\\n"
+":coredumpsize=8M:\\\n"
+":openfiles=24:\\\n"
+":maxproc=32:\\\n"
+":priority=0:\\\n"
+":requirehome:\\\n"
+":passwordtime=91d:\\\n"
+":umask=022:\\\n"
+":ignoretime@:\\\n"
+":label=biba/10(10-10):\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:773
+msgid "Then, add the following line to the default user class section:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:777
+#, no-wrap
+msgid ":label=biba/high:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:780
+msgid "Save the edits and issue the following command to rebuild the database:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:784
+#, no-wrap
+msgid "# cap_mkdb /etc/login.conf\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mac/_index.adoc:786
+#, no-wrap
+msgid "Configure Users"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:789
+msgid "Set the `root` user to the default class using:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:793
+#, no-wrap
+msgid "# pw usermod root -L default\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:798
+msgid ""
+"All user accounts that are not `root` will now require a login class. The "
+"login class is required, otherwise users will be refused access to common "
+"commands. The following `sh` script should do the trick:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:803
+#, no-wrap
+msgid ""
+"# for x in `awk -F: '($3 >= 1001) && ($3 != 65534) { print $1 }' \\\n"
+"\t/etc/passwd`; do pw usermod $x -L default; done;\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:806
+msgid "Next, drop the `nagios` and `www` accounts into the insecure class:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:811
+#, no-wrap
+msgid ""
+"# pw usermod nagios -L insecure\n"
+"# pw usermod www -L insecure\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mac/_index.adoc:813
+#, no-wrap
+msgid "Create the Contexts File"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:816
+msgid ""
+"A contexts file should now be created as [.filename]#/etc/policy.contexts#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:820
+#, no-wrap
+msgid "# This is the default BIBA policy for this system.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:823
+#, no-wrap
+msgid ""
+"# System:\n"
+"/var/run(/.*)?\t\t\tbiba/equal\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:825
+#, no-wrap
+msgid "/dev/(/.*)?\t\t\tbiba/equal\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:828
+#, no-wrap
+msgid ""
+"/var\t\t\t\tbiba/equal\n"
+"/var/spool(/.*)?\t\tbiba/equal\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:830
+#, no-wrap
+msgid "/var/log(/.*)?\t\t\tbiba/equal\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:833
+#, no-wrap
+msgid ""
+"/tmp(/.*)?\t\t\tbiba/equal\n"
+"/var/tmp(/.*)?\t\t\tbiba/equal\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:836
+#, no-wrap
+msgid ""
+"/var/spool/mqueue\t\tbiba/equal\n"
+"/var/spool/clientmqueue\t\tbiba/equal\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:839
+#, no-wrap
+msgid ""
+"# For Nagios:\n"
+"/usr/local/etc/nagios(/.*)?\tbiba/10\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:841
+#, no-wrap
+msgid "/var/spool/nagios(/.*)?\t\tbiba/10\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:844
+#, no-wrap
+msgid ""
+"# For apache\n"
+"/usr/local/etc/apache(/.*)?\tbiba/10\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:849
+msgid ""
+"This policy enforces security by setting restrictions on the flow of "
+"information. In this specific configuration, users, including `root`, "
+"should never be allowed to access Nagios. Configuration files and processes "
+"that are a part of Nagios will be completely self contained or jailed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:852
+msgid ""
+"This file will be read after running `setfsmac` on every file system. This "
+"example sets the policy on the root file system:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:856
+#, no-wrap
+msgid "# setfsmac -ef /etc/policy.contexts /\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:859
+msgid ""
+"Next, add these edits to the main section of [.filename]#/etc/mac.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:866
+#, no-wrap
+msgid ""
+"default_labels file ?biba\n"
+"default_labels ifnet ?biba\n"
+"default_labels process ?biba\n"
+"default_labels socket ?biba\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mac/_index.adoc:868
+#, no-wrap
+msgid "Loader Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:871
+msgid ""
+"To finish the configuration, add the following lines to [.filename]#/boot/"
+"loader.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:877
+#, no-wrap
+msgid ""
+"mac_biba_load=\"YES\"\n"
+"mac_seeotheruids_load=\"YES\"\n"
+"security.mac.biba.trust_all_interfaces=1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:881
+msgid ""
+"And the following line to the network card configuration stored in [."
+"filename]#/etc/rc.conf#. If the primary network configuration is done via "
+"DHCP, this may need to be configured manually after every system boot:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:885
+#, no-wrap
+msgid "maclabel biba/equal\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mac/_index.adoc:887
+#, no-wrap
+msgid "Testing the Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:893
+msgid ""
+"First, ensure that the web server and Nagios will not be started on system "
+"initialization and reboot. Ensure that `root` cannot access any of the "
+"files in the Nagios configuration directory. If `root` can list the "
+"contents of [.filename]#/var/spool/nagios#, something is wrong. Instead, a "
+"\"permission denied\" error should be returned."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:895
+msgid "If all seems well, Nagios, Apache, and Sendmail can now be started:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:901
+#, no-wrap
+msgid ""
+"# cd /etc/mail && make stop && \\\n"
+"setpmac biba/equal make start && setpmac biba/10\\(10-10\\) apachectl start && \\\n"
+"setpmac biba/10\\(10-10\\) /usr/local/etc/rc.d/nagios.sh forcestart\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:906
+msgid ""
+"Double check to ensure that everything is working properly. If not, check "
+"the log files for error messages. If needed, use man:sysctl[8] to disable "
+"the man:mac_biba[4] security policy module and try starting everything again "
+"as usual."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:911
+msgid ""
+"The `root` user can still change the security enforcement and edit its "
+"configuration files. The following command will permit the degradation of "
+"the security policy to a lower grade for a newly spawned shell:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:915
+#, no-wrap
+msgid "# setpmac biba/10 csh\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:920
+msgid ""
+"To block this from happening, force the user into a range using man:login."
+"conf[5]. If man:setpmac[8] attempts to run a command outside of the "
+"compartment's range, an error will be returned and the command will not be "
+"executed. In this case, set root to `biba/high(high-high)`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/mac/_index.adoc:923
+#, no-wrap
+msgid "Troubleshooting the MAC Framework"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:926
+msgid ""
+"This section discusses common configuration errors and how to resolve them."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/mac/_index.adoc:927
+#, no-wrap
+msgid "The `multilabel` flag does not stay enabled on the root ([.filename]#/#) partition"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:929
+msgid "The following steps may resolve this transient error:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:933
+msgid ""
+"Edit [.filename]#/etc/fstab# and set the root partition to `ro` for read-"
+"only."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:934
+msgid "Reboot into single user mode."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:935
+msgid "Run `tunefs -l enable` on [.filename]#/#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:936
+msgid "Reboot the system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:937
+msgid ""
+"Run `mount -urw`[.filename]#/# and change the `ro` back to `rw` in [."
+"filename]#/etc/fstab# and reboot the system again."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:938
+msgid ""
+"Double-check the output from `mount` to ensure that `multilabel` has been "
+"properly set on the root file system."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/mac/_index.adoc:940
+#, no-wrap
+msgid "After establishing a secure environment with MAC, Xorg no longer starts"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:943
+msgid ""
+"This could be caused by the MAC `partition` policy or by a mislabeling in "
+"one of the MAC labeling policies. To debug, try the following:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:947
+msgid ""
+"Check the error message. If the user is in the `insecure` class, the "
+"`partition` policy may be the culprit. Try setting the user's class back to "
+"the `default` class and rebuild the database with `cap_mkdb`. If this does "
+"not alleviate the problem, go to step two."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:948
+msgid ""
+"Double-check that the label policies are set correctly for the user, Xorg, "
+"and the [.filename]#/dev# entries."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mac/_index.adoc:949
+msgid ""
+"If neither of these resolve the problem, send the error message and a "
+"description of the environment to the {freebsd-questions}."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/mac/_index.adoc:951
+#, no-wrap
+msgid "The `_secure_path: unable to stat .login_conf` error appears"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:956
+msgid ""
+"This error can appear when a user attempts to switch from the `root` user to "
+"another user in the system. This message usually occurs when the user has a "
+"higher label setting than that of the user they are attempting to become. "
+"For instance, if `joe` has a default label of `biba/low` and `root` has a "
+"label of `biba/high`, `root` cannot view ``joe``'s home directory. This "
+"will happen whether or not `root` has used `su` to become `joe` as the Biba "
+"integrity model will not permit `root` to view objects set at a lower "
+"integrity level."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/mac/_index.adoc:957
+#, no-wrap
+msgid "The system no longer recognizes `root`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:959
+msgid "When this occurs, `whoami` returns `0` and `su` returns `who are you?`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:963
+msgid ""
+"This can happen if a labeling policy has been disabled by man:sysctl[8] or "
+"the policy module was unloaded. If the policy is disabled, the login "
+"capabilities database needs to be reconfigured. Double check [.filename]#/"
+"etc/login.conf# to ensure that all `label` options have been removed and "
+"rebuild the database with `cap_mkdb`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/mac/_index.adoc:967
+msgid ""
+"This may also happen if a policy restricts access to [.filename]#master."
+"passwd#. This is usually caused by an administrator altering the file under "
+"a label which conflicts with the general policy being used by the system. "
+"In these cases, the user information would be read by the system and access "
+"would be blocked as the file has inherited the new label. Disable the "
+"policy using man:sysctl[8] and everything should return to normal."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/mail/_index.adoc b/documentation/content/en/books/handbook/mail/_index.adoc
index e433388bc6..77ca21f3dd 100644
--- a/documentation/content/en/books/handbook/mail/_index.adoc
+++ b/documentation/content/en/books/handbook/mail/_index.adoc
@@ -1,13 +1,13 @@
---
-title: Chapter 29. Electronic Mail
+title: Chapter 31. Electronic Mail
part: IV. Network Communication
prev: books/handbook/ppp-and-slip
next: books/handbook/network-servers
description: This chapter provides a basic introduction to running a mail server on FreeBSD, as well as an introduction to sending and receiving email using FreeBSD
-tags: ["mail", "sendmail", "MTA", "SMTP", "user agents", "fetchmail", "procmail", "alpine", "mut"]
+tags: ["mail", "sendmail", "dma", "MTA", "SMTP", "mail user agents", "fetchmail", "procmail", "alpine", "mutt", "postfix"]
showBookMenu: true
-weight: 34
-path: "/books/handbook/"
+weight: 36
+path: "/books/handbook/mail/"
---
[[mail]]
@@ -18,7 +18,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 29
+:sectnumoffset: 31
:partnums:
:source-highlighter: rouge
:experimental:
@@ -52,96 +52,164 @@ endif::[]
== Synopsis
"Electronic Mail", better known as email, is one of the most widely used forms of communication today.
-This chapter provides a basic introduction to running a mail server on FreeBSD, as well as an introduction to sending and receiving email using FreeBSD
-For more complete coverage of this subject, refer to the books listed in crossref:bibliography[bibliography,Bibliography].
+This chapter provides a basic introduction to running a mail server on FreeBSD, as well as an introduction to sending and receiving email using FreeBSD.
+For a complete coverage of this subject, refer to the books listed in crossref:bibliography[bibliography,Bibliography].
-After reading this chapter, you will know:
+This chapter covers:
* Which software components are involved in sending and receiving electronic mail.
+* How to configure DragonFly Mail Agent.
* Where basic Sendmail configuration files are located in FreeBSD.
* The difference between remote and local mailboxes.
-* How to block spammers from illegally using a mail server as a relay.
-* How to install and configure an alternate Mail Transfer Agent, replacing Sendmail.
+* How to install and configure an alternate Mail Transfer Agent, replacing DragonFly Mail Agent or Sendmail.
* How to troubleshoot common mail server problems.
-* How to set up the system to send mail only.
-* How to use mail with a dialup connection.
-* How to configure SMTP authentication for added security.
+* How to configure Sendmail to only send mail.
+* How to configure SMTP authentication for added security in Sendmail.
* How to install and use a Mail User Agent, such as mutt, to send and receive email.
* How to download mail from a remote POP or IMAP server.
* How to automatically apply filters and rules to incoming email.
-Before reading this chapter, you should:
-
-* Properly set up a network connection (crossref:advanced-networking[advanced-networking,Advanced Networking]).
-* Properly set up the DNS information for a mail host (crossref:network-servers[network-servers,Network Servers]).
-* Know how to install additional third-party software (crossref:ports[ports,Installing Applications: Packages and Ports]).
-
[[mail-using]]
== Mail Components
-There are five major parts involved in an email exchange: the Mail User Agent (MUA), the Mail Transfer Agent (MTA), a mail host, a remote or local mailbox, and DNS. This section provides an overview of these components.
+There are five major parts involved in an email exchange: the Mail User Agent (MUA), the Mail Transfer Agent (MTA), a mail host, a remote or local mailbox, and DNS.
+This section provides an overview of these components.
Mail User Agent (MUA)::
The Mail User Agent (MUA) is an application which is used to compose, send, and receive emails.
-This application can be a command line program, such as the built-in `mail` utility or a third-party application from the Ports Collection, such as mutt, alpine, or elm.
+This application can be a command line program, such as the built-in `mail` utility or a third-party application from the Ports Collection, such as alpine, elm, or mutt.
Dozens of graphical programs are also available in the Ports Collection, including Claws Mail, Evolution, and Thunderbird.
Some organizations provide a web mail program which can be accessed through a web browser.
More information about installing and using a MUA on FreeBSD can be found in <<mail-agents>>.
Mail Transfer Agent (MTA)::
The Mail Transfer Agent (MTA) is responsible for receiving incoming mail and delivering outgoing mail.
-FreeBSD ships with Sendmail as the default MTA, but it also supports numerous other mail server daemons, including Exim, Postfix, and qmail.
-Sendmail configuration is described in <<sendmail>>.
-If another MTA is installed using the Ports Collection, refer to its post-installation message for FreeBSD-specific configuration details and the application's website for more general configuration instructions.
+Starting with FreeBSD version 14.0, the default MTA is DragonFly Mail Agent (man:dma[8]); in earlier versions, it is man:sendmail[8].
+Other MTAs, including Exim, Postfix, and qmail, may be installed to replace the default MTA.
Mail Host and Mailboxes::
The mail host is a server that is responsible for delivering and receiving mail for a host or a network.
-The mail host collects all mail sent to the domain and stores it either in the default [.filename]#mbox# or the alternative Maildir format, depending on the configuration.
+The mail host collects all mail sent to the domain and stores it either in the default `mbox` or the alternative Maildir format, depending on the configuration.
Once mail has been stored, it may either be read locally using a MUA or remotely accessed and collected using protocols such as POP or IMAP.
If mail is read locally, a POP or IMAP server does not need to be installed.
-+
-To access mailboxes remotely, a POP or IMAP server is required as these protocols allow users to connect to their mailboxes from remote locations.
-IMAP offers several advantages over POP.
-These include the ability to store a copy of messages on a remote server after they are downloaded and concurrent updates.
-IMAP can be useful over low-speed links as it allows users to fetch the structure of messages without downloading them.
-It can also perform tasks such as searching on the server in order to minimize data transfer between clients and servers.
-+
-Several POP and IMAP servers are available in the Ports Collection.
-These include package:mail/qpopper[], package:mail/imap-uw[], package:mail/courier-imap[], and package:mail/dovecot2[].
-+
-[WARNING]
-====
-It should be noted that both POP and IMAP transmit information, including username and password credentials, in clear-text.
-To secure the transmission of information across these protocols, consider tunneling sessions over man:ssh[1] (crossref:security[security-ssh-tunneling,"SSH Tunneling"]) or using SSL (crossref:security[openssl,"OpenSSL"]).
-====
Domain Name System (DNS)::
-The Domain Name System (DNS) and its daemon `named` play a large role in the delivery of email.
+The Domain Name System (DNS) and its daemon man:named[8] play a large role in the delivery of mail.
In order to deliver mail from one site to another, the MTA will look up the remote site in DNS to determine which host will receive mail for the destination.
This process also occurs when mail is sent from a remote host to the MTA.
-+
-In addition to mapping hostnames to IP addresses, DNS is responsible for storing information specific to mail delivery, known as Mail eXchanger MX records.
-The MX record specifies which hosts will receive mail for a particular domain.
-+
-To view the MX records for a domain, specify the type of record.
-Refer to man:host[1], for more details about this command:
-+
+
+[[dragonFly-mail-agent]]
+== DragonFly Mail Agent (DMA)
+
+DragonFly Mail Agent (DMA) is the default MTA in FreeBSD starting with version 14.0.
+man:dma[8] is a small Mail Transport Agent (MTA), designed for home and office use.
+It accepts mails from locally installed Mail User Agents (MUA) and delivers the mails either locally or to a remote destination.
+Remote delivery includes several features like TLS/SSL support and SMTP authentication.
+
+man:dma[8] is not intended as a replacement for real, big MTAs like man:sendmail[8] or man:postfix[1].
+Consequently, man:dma[8] does not listen on port 25 for incoming connections.
+
+[[configuring-dragonfly-mail-agent]]
+=== Configuring DragonFly Mail Agent (DMA)
+
+DMA comes with a default configuration that will be suitable for many deployments.
+Custom settings are defined in [.filename]#/etc/dma/dma.conf#, and SMTP authentication is configured in [.filename]#/etc/dma/auth.conf#.
+
+[[configuring-gmail-dma]]
+==== Using DMA to Route Outgoing Mail through Gmail (STARTTLS:SMTP example)
+
+This example [.filename]#/etc/dma/dma.conf# can be used to send mail using Google's SMTP servers.
+
+[.programlisting]
+....
+SMARTHOST smtp.gmail.com
+PORT 587
+AUTHPATH /etc/dma/auth.conf
+SECURETRANSFER
+STARTTLS
+MASQUERADE username@gmail.com
+....
+
+Authentication can be set with one line in [.filename]#/etc/dma/auth.conf#:
+
+[.programlisting]
+....
+username@gmail.com|smtp.gmail.com:password
+....
+
+Execute the following command to test the configuration:
+
[source,shell]
....
-% host -t mx FreeBSD.org
-FreeBSD.org mail is handled by 10 mx1.FreeBSD.org
+% echo this is a test | mail -v -s testing-email username@gmail.com
+....
+
+[[configuring-fastmail-dma]]
+==== Using DMA to Route Outgoing Mail through Fastmail (SSL/TLS example)
+
+This example [.filename]#/etc/dma/dma.conf# can be used to send mail using Fastmail's SMTP servers.
+
+[.programlisting]
+....
+SMARTHOST smtp.fastmail.com
+PORT 465
+AUTHPATH /etc/dma/auth.conf
+SECURETRANSFER
+MAILNAME example.server.com
+....
+
+Authentication can be set with one line in [.filename]#/etc/dma/auth.conf#:
+
+[.programlisting]
+....
+username@fastmail.com|smtp.fastmail.com:password
+....
+
+Execute the following command to test the configuration:
+
+[source,shell]
+....
+% echo this is a test | mail -v -s testing-email username@fastmail.com
+....
+
+[[configuring-custom-dma]]
+==== Using DMA to Route Outgoing Mail through a Custom Mail Host
+
+This example [.filename]#/etc/dma/dma.conf# can be used to send mail using a custom mail host.
+
+[.programlisting]
+....
+SMARTHOST mail.example.org
+PORT 587
+AUTHPATH /etc/dma/auth.conf
+SECURETRANSFER
+STARTTLS
+....
+
+Authentication can be set with one line in [.filename]#/etc/dma/auth.conf#:
+
+[.programlisting]
+....
+username@example.org|mail.example.org:password
+....
+
+Execute the following command to test the configuration:
+
+[source,shell]
+....
+% echo this is a test | mail -v -s testing-email username@example.org
....
-+
-Refer to crossref:network-servers[network-dns,"Domain Name System (DNS)"] for more information about DNS and its configuration.
[[sendmail]]
-== Sendmail Configuration Files
+== Sendmail
+
+Sendmail is a venerable and versatile Mail Transfer Agent (MTA) with a long history in UNIX(R) and UNIX-like systems.
+It was a part of the FreeBSD base system until FreeBSD 13, offering robust email transport capabilities, extensive customization options, and support for complex routing and filtering.
-Sendmail is the default MTA installed with FreeBSD. It accepts mail from MUAs and delivers it to the appropriate mail host, as defined by its configuration.
-Sendmail can also accept network connections and deliver mail to local mailboxes or to another program.
+[[configuring-sendmail]]
+=== Configuration Files
-The configuration files for Sendmail are located in [.filename]#/etc/mail#.
-This section describes these files in more detail.
+The configuration files for Sendmail are located in [.filename]#/etc/mail/#.
[.filename]#/etc/mail/access#::
This access database file defines which hosts or IP addresses have access to the local mail server and what kind of access they have.
@@ -154,27 +222,7 @@ Hosts listed as `QUARANTINE` will have their messages held and will receive the
+
Examples of using these options for both IPv4 and IPv6 addresses can be found in the FreeBSD sample configuration, [.filename]#/etc/mail/access.sample#:
+
-[.programlisting]
-....
-# $FreeBSD$
-#
-# Mail relay access control list. Default is to reject mail unless the
-# destination is local, or listed in /etc/mail/local-host-names
-#
-## Examples (commented out for safety)
-#From:cyberspammer.com ERROR:"550 We don't accept mail from spammers"
-#From:okay.cyberspammer.com OK
-#Connect:sendmail.org RELAY
-#To:sendmail.org RELAY
-#Connect:128.32 RELAY
-#Connect:128.32.2 SKIP
-#Connect:IPv6:1:2:3:4:5:6:7 RELAY
-#Connect:suspicious.example.com QUARANTINE:Mail from suspicious host
-#Connect:[127.0.0.3] OK
-#Connect:[IPv6:1:2:3:4:5:6:7:8] OK
-....
-+
-To configure the access database, use the format shown in the sample to make entries in [.filename]#/etc/mail/access#, but do not put a comment symbol (`#`) in front of the entries.
+To configure the access database, use the format shown in the sample to make entries in [.filename]#/etc/mail/access#, but do not put a comment symbol (`+#+`) in front of the entries.
Create an entry for each host or network whose access should be configured.
Mail senders that match the left side of the table are affected by the action on the right side of the table.
+
@@ -273,67 +321,46 @@ This allows users to send mail from the system remotely without opening the syst
[[mail-changingmta]]
== Changing the Mail Transfer Agent
-FreeBSD comes with Sendmail already installed as the MTA which is in charge of outgoing and incoming mail.
+Starting with FreeBSD version 14.0, man:dma[8] is the default MTA, and before 14.0, the default MTA is man:sendmail[8].
However, the system administrator can change the system's MTA.
A wide choice of alternative MTAs is available from the `mail` category of the FreeBSD Ports Collection.
-Once a new MTA is installed, configure and test the new software before replacing Sendmail.
-Refer to the documentation of the new MTA for information on how to configure the software.
-
-Once the new MTA is working, use the instructions in this section to disable Sendmail and configure FreeBSD to use the replacement MTA.
-
-[[mail-disable-sendmail]]
-=== Disable Sendmail
-
[WARNING]
====
-
-If Sendmail's outgoing mail service is disabled, it is important that it is replaced with an alternative mail delivery system.
+If the default's outgoing mail service is disabled, it is important that it is replaced with an alternative mail delivery system.
Otherwise, system functions such as man:periodic[8] will be unable to deliver their results by email.
Many parts of the system expect a functional MTA.
-If applications continue to use Sendmail's binaries to try to send email after they are disabled, mail could go into an inactive Sendmail queue and never be delivered.
+If applications continue to use the default binaries to try to send email after they are disabled, mail could go into an inactive queue and never be delivered.
====
-In order to completely disable Sendmail, add or edit the following lines in [.filename]#/etc/rc.conf#:
+[[replace-sendmail-dma]]
+=== Replacing Sendmail with Other MTA
-[.programlisting]
-....
-sendmail_enable="NO"
-sendmail_submit_enable="NO"
-sendmail_outbound_enable="NO"
-sendmail_msp_queue_enable="NO"
-....
+In order to completely disable man:sendmail[8] execute the following commands:
-To only disable Sendmail's incoming mail service, use only this entry in [.filename]#/etc/rc.conf#:
-
-[.programlisting]
+[source,shell]
....
-sendmail_enable="NO"
+# sysrc sendmail_enable="NO"
+# sysrc sendmail_submit_enable="NO"
+# sysrc sendmail_outbound_enable="NO"
+# sysrc sendmail_msp_queue_enable="NO"
....
-More information on Sendmail's startup options is available in man:rc.sendmail[8].
-
-=== Replace the Default MTA
-
-When a new MTA is installed using the Ports Collection, its startup script is also installed and startup instructions are mentioned in its package message.
-Before starting the new MTA, stop the running Sendmail processes.
-This example stops all of these services, then starts the Postfix service:
+To only disable man:sendmail[8]'s incoming mail service execute the following command:
[source,shell]
....
-# service sendmail stop
-# service postfix start
+# sysrc sendmail_enable="NO"
....
-To start the replacement MTA at system boot, add its configuration line to [.filename]#/etc/rc.conf#.
-This entry enables the Postfix MTA:
+Then stop the man:sendmail[8] service:
-[.programlisting]
+[source,shell]
....
-postfix_enable="YES"
+# service sendmail onestop
....
-Some extra configuration is needed as Sendmail is so ubiquitous that some software assumes it is already installed and configured.
+Some extra configuration is needed as man:sendmail[8] is so ubiquitous that some software assumes it is already installed and configured.
Check [.filename]#/etc/periodic.conf# and make sure that these values are set to `NO`.
If this file does not exist, create it with these entries:
@@ -345,444 +372,100 @@ daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO"
....
-Some alternative MTAs provide their own compatible implementations of the Sendmail command-line interface in order to facilitate using them as drop-in replacements for Sendmail.
-However, some MUAs may try to execute standard Sendmail binaries instead of the new MTA's binaries.
-FreeBSD uses [.filename]#/etc/mail/mailer.conf# to map the expected Sendmail binaries to the location of the new binaries.
-More information about this mapping can be found in man:mailwrapper[8].
+The next step is to install another MTA, man:dma[8] will be used in this example.
+As pointed above, man:dma[8] is the default MTA in FreeBSD starting with version 14.0.
+Therefore, it is only necessary to install it from the ports if you are using a previous version.
-The default [.filename]#/etc/mail/mailer.conf# looks like this:
+To install it execute the following command:
-[.programlisting]
+[source,shell]
....
-# $FreeBSD$
-#
-# Execute the "real" sendmail program, named /usr/libexec/sendmail/sendmail
-#
-sendmail /usr/libexec/sendmail/sendmail
-send-mail /usr/libexec/sendmail/sendmail
-mailq /usr/libexec/sendmail/sendmail
-newaliases /usr/libexec/sendmail/sendmail
-hoststat /usr/libexec/sendmail/sendmail
-purgestat /usr/libexec/sendmail/sendmail
+# pkg install dma
....
-When any of the commands listed on the left are run, the system actually executes the associated command shown on the right.
-This system makes it easy to change what binaries are executed when these default binaries are invoked.
+Perform the configuration as indicated in <<configuring-dragonfly-mail-agent>>.
-Some MTAs, when installed using the Ports Collection, will prompt to update this file for the new binaries.
-For example, Postfix will update the file like this:
+Then change all the entries in the file [.filename]#/etc/mail/mailer.conf# to man:dma[8]:
[.programlisting]
....
+# Execute the "real" sendmail program, named /usr/libexec/sendmail/sendmail
#
-# Execute the Postfix sendmail program, named /usr/local/sbin/sendmail
+# If dma(8) is installed, an example mailer.conf that uses dma(8) instead can
+# be found in /usr/share/examples/dma
#
-sendmail /usr/local/sbin/sendmail
-send-mail /usr/local/sbin/sendmail
-mailq /usr/local/sbin/sendmail
-newaliases /usr/local/sbin/sendmail
+sendmail /usr/local/libexec/dma
+mailq /usr/local/libexec/dma
+newaliases /usr/local/libexec/dma
....
-If the installation of the MTA does not automatically update [.filename]#/etc/mail/mailer.conf#, edit this file in a text editor so that it points to the new binaries.
-This example points to the binaries installed by package:mail/ssmtp[]:
+[NOTE]
+====
+When using the version of man:dma[8] included in the base system, the paths will change to [.filename]#/usr/libexec/dma#.
+====
-[.programlisting]
+To ensure that anything in the queue is flushed at boot or before shutdown, execute the following command:
+
+[source,shell]
....
-sendmail /usr/local/sbin/ssmtp
-send-mail /usr/local/sbin/ssmtp
-mailq /usr/local/sbin/ssmtp
-newaliases /usr/local/sbin/ssmtp
-hoststat /usr/bin/true
-purgestat /usr/bin/true
+# sysrc dma_flushq_enable="YES"
....
Once everything is configured, it is recommended to reboot the system.
Rebooting provides the opportunity to ensure that the system is correctly configured to start the new MTA automatically on boot.
-[[mail-trouble]]
-== Troubleshooting
-
-=== Why do I have to use the FQDN for hosts on my site?
-
-The host may actually be in a different domain.
-For example, in order for a host in `foo.bar.edu` to reach a host called `mumble` in the `bar.edu` domain, refer to it by the Fully-Qualified Domain Name FQDN, `mumble.bar.edu`, instead of just `mumble`.
-
-This is because the version of BIND which ships with FreeBSD no longer provides default abbreviations for non-FQDNs other than the local domain.
-An unqualified host such as `mumble` must either be found as `mumble.foo.bar.edu`, or it will be searched for in the root domain.
-
-In older versions of BIND, the search continued across `mumble.bar.edu`, and `mumble.edu`.
-RFC 1535 details why this is considered bad practice or even a security hole.
-
-As a good workaround, place the line:
-
-[.programlisting]
-....
-search foo.bar.edu bar.edu
-....
+[[replace-dma]]
+=== Replacing DragonFly Mail Agent (DMA) with Other MTA
-instead of the previous:
+As noted above, starting with FreeBSD version 14.0, the default MTA is DMA.
+In this example, package:mail/postfix[] will be used as the alternative MTA.
-[.programlisting]
-....
-domain foo.bar.edu
-....
-
-into [.filename]#/etc/resolv.conf#.
-However, make sure that the search order does not go beyond the "boundary between local and public administration", as RFC 1535 calls it.
-
-=== How can I run a mail server on a dial-up PPP host?
-
-Connect to a FreeBSD mail gateway on the LAN. The PPP connection is non-dedicated.
-
-One way to do this is to get a full-time Internet server to provide secondary MX services for the domain.
-In this example, the domain is `example.com` and the ISP has configured `example.net` to provide secondary MX services to the domain:
-
-[.programlisting]
-....
-example.com. MX 10 example.com.
- MX 20 example.net.
-....
-
-Only one host should be specified as the final recipient.
-For Sendmail, add `Cw example.com` in [.filename]#/etc/mail/sendmail.cf# on `example.com`.
-
-When the sending MTA attempts to deliver mail, it will try to connect to the system, `example.com`, over the PPP link.
-This will time out if the destination is offline.
-The MTA will automatically deliver it to the secondary MX site at the Internet Service Provider (ISP), `example.net`.
-The secondary MX site will periodically try to connect to the primary MX host, `example.com`.
-
-Use something like this as a login script:
-
-[.programlisting]
-....
-#!/bin/sh
-# Put me in /usr/local/bin/pppmyisp
-( sleep 60 ; /usr/sbin/sendmail -q ) &
-/usr/sbin/ppp -direct pppmyisp
-....
-
-When creating a separate login script for users, instead use `sendmail -qRexample.com` in the script above.
-This will force all mail in the queue for `example.com` to be processed immediately.
-
-A further refinement of the situation can be seen from this example from the {freebsd-isp}:
+Before installing package:mail/postfix[] some extra configuration is needed.
+Check [.filename]#/etc/periodic.conf# and make sure that these values are set to `NO`.
+If this file does not exist, create it with these entries:
[.programlisting]
....
-> we provide the secondary MX for a customer. The customer connects to
-> our services several times a day automatically to get the mails to
-> his primary MX (We do not call his site when a mail for his domains
-> arrived). Our sendmail sends the mailqueue every 30 minutes. At the
-> moment he has to stay 30 minutes online to be sure that all mail is
-> gone to the primary MX.
->
-> Is there a command that would initiate sendmail to send all the mails
-> now? The user has not root-privileges on our machine of course.
-
-In the privacy flags section of sendmail.cf, there is a
-definition Opgoaway,restrictqrun
-
-Remove restrictqrun to allow non-root users to start the queue processing.
-You might also like to rearrange the MXs. We are the 1st MX for our
-customers like this, and we have defined:
-
-# If we are the best MX for a host, try directly instead of generating
-# local config error.
-OwTrue
-
-That way a remote site will deliver straight to you, without trying
-the customer connection. You then send to your customer. Only works for
-hosts, so you need to get your customer to name their mail
-machine customer.com as well as
-hostname.customer.com in the DNS. Just put an A record in
-the DNS for customer.com.
-....
-
-[[mail-advanced]]
-== Advanced Topics
-
-This section covers more involved topics such as mail configuration and setting up mail for an entire domain.
-
-[[mail-config]]
-=== Basic Configuration
-
-Out of the box, one can send email to external hosts as long as [.filename]#/etc/resolv.conf# is configured or the network has access to a configured DNS server.
-To have email delivered to the MTA on the FreeBSD host, do one of the following:
-
-* Run a DNS server for the domain.
-* Get mail delivered directly to the FQDN for the machine.
-
-In order to have mail delivered directly to a host, it must have a permanent static IP address, not a dynamic IP address.
-If the system is behind a firewall, it must be configured to allow SMTP traffic.
-To receive mail directly at a host, one of these two must be configured:
-
-* Make sure that the lowest-numbered MX record in DNS points to the host's static IP address.
-* Make sure there is no MX entry in the DNS for the host.
-
-Either of the above will allow mail to be received directly at the host.
-
-Try this:
-
-[source,shell]
-....
-# hostname
-example.FreeBSD.org
-# host example.FreeBSD.org
-example.FreeBSD.org has address 204.216.27.XX
+daily_clean_hoststat_enable="NO"
+daily_status_mail_rejects_enable="NO"
+daily_status_include_submit_mailq="NO"
+daily_submit_queuerun="NO"
....
-In this example, mail sent directly to mailto:yourlogin@example.FreeBSD.org[yourlogin@example.FreeBSD.org] should work without problems, assuming Sendmail is running correctly on `example.FreeBSD.org`.
-
-For this example:
+Then install package:mail/postfix[]:
[source,shell]
....
-# host example.FreeBSD.org
-example.FreeBSD.org has address 204.216.27.XX
-example.FreeBSD.org mail is handled (pri=10) by nevdull.FreeBSD.org
-....
-
-All mail sent to `example.FreeBSD.org` will be collected on `hub` under the same username instead of being sent directly to your host.
-
-The above information is handled by the DNS server.
-The DNS record that carries mail routing information is the MX entry.
-If no MX record exists, mail will be delivered directly to the host by way of its IP address.
-
-The MX entry for `freefall.FreeBSD.org` at one time looked like this:
-
-[.programlisting]
-....
-freefall MX 30 mail.crl.net
-freefall MX 40 agora.rdrop.com
-freefall MX 10 freefall.FreeBSD.org
-freefall MX 20 who.cdrom.com
-....
-
-`freefall` had many MX entries.
-The lowest MX number is the host that receives mail directly, if available.
-If it is not accessible for some reason, the next lower-numbered host will accept messages temporarily, and pass it along when a lower-numbered host becomes available.
-
-Alternate MX sites should have separate Internet connections in order to be most useful.
-Your ISP can provide this service.
-
-[[mail-domain]]
-=== Mail for a Domain
-
-When configuring an MTA for a network, any mail sent to hosts in its domain should be diverted to the MTA so that users can receive their mail on the master mail server.
-
-To make life easiest, a user account with the same _username_ should exist on both the MTA and the system with the MUA.
-Use man:adduser[8] to create the user accounts.
-
-The MTA must be the designated mail exchanger for each workstation on the network.
-This is done in the DNS configuration with an MX record:
-
-[.programlisting]
-....
-example.FreeBSD.org A 204.216.27.XX ; Workstation
- MX 10 nevdull.FreeBSD.org ; Mailhost
+# pkg install postfix
....
-This will redirect mail for the workstation to the MTA no matter where the A record points.
-The mail is sent to the MX host.
-
-This must be configured on a DNS server.
-If the network does not run its own DNS server, talk to the ISP or DNS provider.
-
-The following is an example of virtual email hosting.
-Consider a customer with the domain `customer1.org`, where all the mail for `customer1.org` should be sent to `mail.myhost.com`.
-The DNS entry should look like this:
-
-[.programlisting]
-....
-customer1.org MX 10 mail.myhost.com
-....
-
-An `A` record is _not_ needed for `customer1.org` in order to only handle email for that domain.
-However, running `ping` against `customer1.org` will not work unless an `A` record exists for it.
-
-Tell the MTA which domains and/or hostnames it should accept mail for.
-Either of the following will work for Sendmail:
-
-* Add the hosts to [.filename]#/etc/mail/local-host-names# when using the `FEATURE(use_cw_file)`.
-* Add a `Cwyour.host.com` line to [.filename]#/etc/sendmail.cf#.
-
-[[outgoing-only]]
-== Setting Up to Send Only
-
-There are many instances where one may only want to send mail through a relay.
-Some examples are:
-
-* The computer is a desktop machine that needs to use programs such as man:mail[1], using the ISP's mail relay.
-* The computer is a server that does not handle mail locally, but needs to pass off all mail to a relay for processing.
-
-While any MTA is capable of filling this particular niche, it can be difficult to properly configure a full-featured MTA just to handle offloading mail.
-Programs such as Sendmail and Postfix are overkill for this use.
-
-Additionally, a typical Internet access service agreement may forbid one from running a "mail server".
-
-The easiest way to fulfill those needs is to install the package:mail/ssmtp[] port:
+To start package:mail/postfix[] at system boot execute the following command:
[source,shell]
....
-# cd /usr/ports/mail/ssmtp
-# make install replace clean
-....
-
-Once installed, package:mail/ssmtp[] can be configured with [.filename]#/usr/local/etc/ssmtp/ssmtp.conf#:
-
-[.programlisting]
-....
-root=yourrealemail@example.com
-mailhub=mail.example.com
-rewriteDomain=example.com
-hostname=_HOSTNAME_
+# sysrc postfix_enable="YES"
....
-Use the real email address for `root`.
-Enter the ISP's outgoing mail relay in place of `mail.example.com`.
-Some ISPs call this the "outgoing mail server" or "SMTP server".
-
-Make sure to disable Sendmail, including the outgoing mail service.
-See <<mail-disable-sendmail>> for details.
-
-package:mail/ssmtp[] has some other options available. Refer to the examples in [.filename]#/usr/local/etc/ssmtp# or the manual page of ssmtp for more information.
-
-Setting up ssmtp in this manner allows any software on the computer that needs to send mail to function properly, while not violating the ISP's usage policy or allowing the computer to be hijacked for spamming.
-
-[[SMTP-dialup]]
-== Using Mail with a Dialup Connection
-
-When using a static IP address, one should not need to adjust the default configuration.
-Set the hostname to the assigned Internet name and Sendmail will do the rest.
-
-When using a dynamically assigned IP address and a dialup PPP connection to the Internet, one usually has a mailbox on the ISP's mail server.
-In this example, the ISP's domain is `example.net`, the user name is `user`, the hostname is `bsd.home`, and the ISP has allowed `relay.example.net` as a mail relay.
-
-In order to retrieve mail from the ISP's mailbox, install a retrieval agent from the Ports Collection. package:mail/fetchmail[] is a good choice as it supports many different protocols.
-Usually, the ISP will provide POP.
-When using user PPP, email can be automatically fetched when an Internet connection is established with the following entry in [.filename]#/etc/ppp/ppp.linkup#:
-
-[.programlisting]
-....
-MYADDR:
-!bg su user -c fetchmail
-....
-
-When using Sendmail to deliver mail to non-local accounts, configure Sendmail to process the mail queue as soon as the Internet connection is established.
-To do this, add this line after the above `fetchmail` entry in [.filename]#/etc/ppp/ppp.linkup#:
-
-[.programlisting]
-....
- !bg su user -c "sendmail -q"
-....
-
-In this example, there is an account for `user` on `bsd.home`.
-In the home directory of `user` on `bsd.home`, create a [.filename]#.fetchmailrc# which contains this line:
-
-[.programlisting]
-....
-poll example.net protocol pop3 fetchall pass MySecret
-....
-
-This file should not be readable by anyone except `user` as it contains the password `MySecret`.
-
-In order to send mail with the correct `from:` header, configure Sendmail to use mailto:user@example.net[user@example.net] rather than mailto:user@bsd.home[user@bsd.home] and to send all mail via `relay.example.net`, allowing quicker mail transmission.
-
-The following [.filename]#.mc# should suffice:
-
-[.programlisting]
-....
-VERSIONID(`bsd.home.mc version 1.0')
-OSTYPE(bsd4.4)dnl
-FEATURE(nouucp)dnl
-MAILER(local)dnl
-MAILER(smtp)dnl
-Cwlocalhost
-Cwbsd.home
-MASQUERADE_AS(`example.net')dnl
-FEATURE(allmasquerade)dnl
-FEATURE(masquerade_envelope)dnl
-FEATURE(nocanonify)dnl
-FEATURE(nodns)dnl
-define(`SMART_HOST', `relay.example.net')
-Dmbsd.home
-define(`confDOMAIN_NAME',`bsd.home')dnl
-define(`confDELIVERY_MODE',`deferred')dnl
-....
-
-Refer to the previous section for details of how to convert this file into the [.filename]#sendmail.cf# format.
-Do not forget to restart Sendmail after updating [.filename]#sendmail.cf#.
-
-[[SMTP-Auth]]
-== SMTP Authentication
+[TIP]
+====
+It is good practice to read the installation message after installing an application.
+Provides useful information about settings, etc.
+====
-Configuring SMTP authentication on the MTA provides a number of benefits.
-SMTP authentication adds a layer of security to Sendmail, and provides mobile users who switch hosts the ability to use the same MTA without the need to reconfigure their mail client's settings each time.
+If postfix is *not* already activated in [.filename]#/usr/local/etc/mail/mailer.conf# execute the following commands:
-[.procedure]
-. Install package:security/cyrus-sasl2[] from the Ports Collection. This port supports a number of compile-time options. For the SMTP authentication method demonstrated in this example, make sure that `LOGIN` is not disabled.
-. After installing package:security/cyrus-sasl2[], edit [.filename]#/usr/local/lib/sasl2/Sendmail.conf#, or create it if it does not exist, and add the following line:
-+
-[.programlisting]
-....
-pwcheck_method: saslauthd
-....
-
-. Next, install package:security/cyrus-sasl2-saslauthd[] and add the following line to [.filename]#/etc/rc.conf#:
-+
-[.programlisting]
-....
-saslauthd_enable="YES"
-....
-+
-Finally, start the saslauthd daemon:
-+
-[source,shell]
-....
-# service saslauthd start
-....
-+
-This daemon serves as a broker for Sendmail to authenticate against the FreeBSD man:passwd[5] database.
-This saves the trouble of creating a new set of usernames and passwords for each user that needs to use SMTP authentication, and keeps the login and mail password the same.
-. Next, edit [.filename]#/etc/make.conf# and add the following lines:
-+
-[.programlisting]
-....
-SENDMAIL_CFLAGS=-I/usr/local/include/sasl -DSASL
-SENDMAIL_LDADD=/usr/local/lib/libsasl2.so
-....
-+
-These lines provide Sendmail the proper configuration options for linking to package:cyrus-sasl2[] at compile time.
-Make sure that package:cyrus-sasl2[] has been installed before recompiling Sendmail.
-. Recompile Sendmail by executing the following commands:
-+
[source,shell]
....
-# cd /usr/src/lib/libsmutil
-# make cleandir && make obj && make
-# cd /usr/src/lib/libsm
-# make cleandir && make obj && make
-# cd /usr/src/usr.sbin/sendmail
-# make cleandir && make obj && make && make install
+mv /usr/local/etc/mail/mailer.conf /usr/local/etc/mail/mailer.conf.old
+install -d /usr/local/etc/mail
+install -m 0644 /usr/local/share/postfix/mailer.conf.postfix /usr/local/etc/mail/mailer.conf
....
-+
-This compile should not have any problems if [.filename]#/usr/src# has not changed extensively and the shared libraries it needs are available.
-. After Sendmail has been compiled and reinstalled, edit [.filename]#/etc/mail/freebsd.mc# or the local [.filename]#.mc#. Many administrators choose to use the output from man:hostname[1] as the name of [.filename]#.mc# for uniqueness. Add these lines:
-+
-[.programlisting]
-....
-dnl set SASL options
-TRUST_AUTH_MECH(`GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN')dnl
-define(`confAUTH_MECHANISMS', `GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN')dnl
-....
-+
-These options configure the different methods available to Sendmail for authenticating users.
-To use a method other than pwcheck, refer to the Sendmail documentation.
-. Finally, run man:make[1] while in [.filename]#/etc/mail#. That will run the new [.filename]#.mc# and create a [.filename]#.cf# named either [.filename]#freebsd.cf# or the name used for the local [.filename]#.mc#. Then, run `make install restart`, which will copy the file to [.filename]#sendmail.cf#, and properly restart Sendmail. For more information about this process, refer to [.filename]#/etc/mail/Makefile#.
-To test the configuration, use a MUA to send a test message.
-For further investigation, set the `LogLevel` of Sendmail to `13` and watch [.filename]#/var/log/maillog# for any errors.
+When employing SASL, ensure that postfix has access to read the sasldb file.
+This is accomplished by adding postfix to group mail and making the [.filename]#/usr/local/etc/sasldb*# file(s) readable by group mail (this should be the default for new installs).
-For more information, refer to http://www.sendmail.org/~ca/email/auth.html[SMTP authentication].
+Once everything is configured, it is recommended to reboot the system.
+Rebooting provides the opportunity to ensure that the system is correctly configured to start the new MTA automatically on boot.
[[mail-agents]]
== Mail User Agents
@@ -793,45 +476,48 @@ The `mail` category of the FreeBSD Ports Collection contains numerous MUAs.
These include graphical email clients such as Evolution or Balsa and console based clients such as mutt or alpine.
[[mail-command]]
-=== `mail`
+=== mail
-man:mail[1] is the default MUA installed with FreeBSD. It is a console based MUA that offers the basic functionality required to send and receive text-based email.
+man:mail[1] is the default MUA installed with FreeBSD.
+It is a console based MUA that offers the basic functionality required to send and receive text-based email.
It provides limited attachment support and can only access local mailboxes.
-Although `mail` does not natively support interaction with POP or IMAP servers, these mailboxes may be downloaded to a local [.filename]#mbox# using an application such as fetchmail.
+Although man:mail[1] does not natively support interaction with POP or IMAP servers, these mailboxes may be downloaded to a local `mbox` using an application such as fetchmail or getmail.
-In order to send and receive email, run `mail`:
+In order to send and receive email, run man:mail[1]:
[source,shell]
....
% mail
....
-The contents of the user's mailbox in [.filename]#/var/mail# are automatically read by `mail`.
+The contents of the user's mailbox in [.filename]#/var/mail# are automatically read by man:mail[1].
Should the mailbox be empty, the utility exits with a message indicating that no mail could be found.
If mail exists, the application interface starts, and a list of messages will be displayed.
+
Messages are automatically numbered, as can be seen in the following example:
-[source,shell]
+[.programlisting]
....
Mail version 8.1 6/6/93. Type ? for help.
-"/var/mail/marcs": 3 messages 3 new
+"/var/mail/username": 3 messages 3 new
>N 1 root@localhost Mon Mar 8 14:05 14/510 "test"
N 2 root@localhost Mon Mar 8 14:05 14/509 "user account"
N 3 root@localhost Mon Mar 8 14:05 14/509 "sample"
....
Messages can now be read by typing kbd:[t] followed by the message number.
+
This example reads the first email:
-[source,shell]
+[.programlisting]
....
& t 1
Message 1:
From root@localhost Mon Mar 8 14:05:52 2004
-X-Original-To: marcs@localhost
-Delivered-To: marcs@localhost
-To: marcs@localhost
+X-Original-To: username@localhost
+Delivered-To: username@localhost
+To: username@localhost
Subject: test
Date: Mon, 8 Mar 2004 14:05:52 +0200 (SAST)
From: root@localhost (Charlie Root)
@@ -840,15 +526,17 @@ This is a test message, please reply if you receive it.
....
As seen in this example, the message will be displayed with full headers.
+
To display the list of messages again, press kbd:[h].
-If the email requires a reply, press either kbd:[R] or kbd:[r] `mail` keys.
-kbd:[R] instructs `mail` to reply only to the sender of the email, while kbd:[r] replies to all other recipients of the message.
+If the email requires a reply, press either kbd:[R] or kbd:[r] man:mail[1] keys.
+kbd:[R] instructs man:mail[1] to reply only to the sender of the email, while kbd:[r] replies to all other recipients of the message.
These commands can be suffixed with the mail number of the message to reply to.
After typing the response, the end of the message should be marked by a single kbd:[.] on its own line.
+
An example can be seen below:
-[source,shell]
+[.programlisting]
....
& R 1
To: root@localhost
@@ -864,7 +552,7 @@ Multiple recipients may be specified by separating each address with the kbd:[,]
The subject of the message may then be entered, followed by the message contents.
The end of the message should be specified by putting a single kbd:[.] on its own line.
-[source,shell]
+[.programlisting]
....
& mail root@localhost
Subject: I mastered mail
@@ -874,20 +562,19 @@ Now I can send and receive email using mail ... :)
EOT
....
-While using `mail`, press kbd:[?] to display help at any time.
-Refer to man:mail[1] for more help on how to use `mail`.
+While using man:mail[1], press kbd:[?] to display help at any time.
+Refer to man:mail[1] for more help on how to use man:mail[1].
[NOTE]
====
man:mail[1] was not designed to handle attachments and thus deals with them poorly.
Newer MUAs handle attachments in a more intelligent way.
-Users who prefer to use `mail` may find the package:converters/mpack[] port to be of considerable use.
====
[[mutt-command]]
-=== mutt
+=== Mutt
-mutt is a powerful MUA, with many features, including:
+Mutt is a powerful MUA, with many features, including:
* The ability to thread messages.
* PGP support for digital signing and encryption of email.
@@ -895,48 +582,55 @@ mutt is a powerful MUA, with many features, including:
* Maildir support.
* Highly customizable.
-Refer to http://www.mutt.org[http://www.mutt.org] for more information on mutt.
+Refer to link:http://www.mutt.org[http://www.mutt.org] for more information on Mutt.
-mutt may be installed using the package:mail/mutt[] port.
-After the port has been installed, mutt can be started by issuing the following command:
+[TIP]
+====
+A Mutt fork called NeoMutt is worth mentioning, which brings added features.
+See more on the link:https://neomutt.org/about.html[NeoMutt website].
+If NeoMutt was chosen, replace the following command examples from `mutt` to `neomutt`.
+====
+
+Mutt may be installed using the package:mail/mutt[] port.
+After the port has been installed, Mutt can be started by issuing the following command:
[source,shell]
....
% mutt
....
-mutt will automatically read and display the contents of the user mailbox in [.filename]#/var/mail#.
-If no mails are found, mutt will wait for commands from the user.
-The example below shows mutt displaying a list of messages:
+Mutt will automatically read and display the contents of the user mailbox in [.filename]#/var/mail#.
+If no mails are found, Mutt will wait for commands from the user.
+The example below shows Mutt displaying a list of messages:
-image::mutt1.png[]
+image::mutt1.png[Mutt email client showing a list of messages]
To read an email, select it using the cursor keys and press kbd:[Enter].
-An example of mutt displaying email can be seen below:
+An example of Mutt displaying email can be seen below:
-image::mutt2.png[]
+image::mutt2.png[Mutt email client displaying an email]
-Similar to man:mail[1], mutt can be used to reply only to the sender of the message as well as to all recipients.
+Similar to man:mail[1], Mutt can be used to reply only to the sender of the message as well as to all recipients.
To reply only to the sender of the email, press kbd:[r].
To send a group reply to the original sender as well as all the message recipients, press kbd:[g].
[NOTE]
====
-By default, mutt uses the man:vi[1] editor for creating and replying to emails.
+By default, Mutt uses the man:vi[1] editor for creating and replying to emails.
Each user can customize this by creating or editing the [.filename]#.muttrc# in their home directory and setting the `editor` variable or by setting the `EDITOR` environment variable.
-Refer to http://www.mutt.org/[http://www.mutt.org/] for more information about configuring mutt.
+Refer to link:http://www.mutt.org/[http://www.mutt.org/] for more information about configuring Mutt.
====
To compose a new mail message, press kbd:[m].
-After a valid subject has been given, mutt will start man:vi[1] so the email can be written.
+After a valid subject has been given, Mutt will start man:vi[1] so the email can be written.
Once the contents of the email are complete, save and quit from `vi`.
-mutt will resume, displaying a summary screen of the mail that is to be delivered.
+Mutt will resume, displaying a summary screen of the mail that is to be delivered.
In order to send the mail, press kbd:[y].
An example of the summary screen can be seen below:
-image::mutt3.png[]
+image::mutt3.png[Mutt email client showing the summary screen]
-mutt contains extensive help which can be accessed from most of the menus by pressing kbd:[?].
+Mutt contains extensive help which can be accessed from most of the menus by pressing kbd:[?].
The top line also displays the keyboard shortcuts where appropriate.
[[alpine-command]]
@@ -964,7 +658,7 @@ To send this anonymous message, press kbd:[Enter].
Alternatively, press kbd:[E] to exit the greeting without sending an anonymous message.
An example of the greeting page is shown below:
-image::pine1.png[]
+image::pine1.png[alpine email client showing the greeting page]
The main menu is then presented, which can be navigated using the cursor keys.
This main menu provides shortcuts for the composing new mails, browsing mail directories, and administering address book entries.
@@ -973,147 +667,296 @@ Below the main menu, relevant keyboard shortcuts to perform functions specific t
The default directory opened by alpine is [.filename]#inbox#.
To view the message index, press kbd:[I], or select the [.guimenuitem]#MESSAGE INDEX# option shown below:
-image::pine2.png[]
+image::pine2.png[alpine email client showing the default directory]
The message index shows messages in the current directory and can be navigated by using the cursor keys.
Highlighted messages can be read by pressing kbd:[Enter].
-image::pine3.png[]
+image::pine3.png[alpine email client showing the message index]
In the screenshot below, a sample message is displayed by alpine.
Contextual keyboard shortcuts are displayed at the bottom of the screen.
An example of one of a shortcut is kbd:[r], which tells the MUA to reply to the current message being displayed.
-image::pine4.png[]
+image::pine4.png[alpine email client showing an email]
Replying to an email in alpine is done using the pico editor, which is installed by default with alpine.
pico makes it easy to navigate the message and is easier for novice users to use than man:vi[1] or man:mail[1].
Once the reply is complete, the message can be sent by pressing kbd:[Ctrl+X].
alpine will ask for confirmation before sending the message.
-image::pine5.png[]
+image::pine5.png[alpine email client showing the message compose window]
alpine can be customized using the [.guimenuitem]#SETUP# option from the main menu.
-Consult http://www.washington.edu/alpine/[http://www.washington.edu/alpine/] for more information.
-[[mail-fetchmail]]
-== Using fetchmail
+[[mail-advanced]]
+== Advanced Topics
-fetchmail is a full-featured IMAP and POP client.
-It allows users to automatically download mail from remote IMAP and POP servers and save it into local mailboxes where it can be accessed more easily.
-fetchmail can be installed using the package:mail/fetchmail[] port, and offers various features, including:
+This section covers more involved topics such as mail configuration and setting up mail for an entire domain.
-* Support for the POP3, APOP, KPOP, IMAP, ETRN and ODMR protocols.
-* Ability to forward mail using SMTP, which allows filtering, forwarding, and aliasing to function normally.
-* May be run in daemon mode to check periodically for new messages.
-* Can retrieve multiple mailboxes and forward them, based on configuration, to different local users.
+[[mail-config]]
+=== Basic Configuration
-This section explains some of the basic features of fetchmail.
-This utility requires a [.filename]#.fetchmailrc# configuration in the user's home directory in order to run correctly.
-This file includes server information as well as login credentials.
-Due to the sensitive nature of the contents of this file, it is advisable to make it readable only by the user, with the following command:
+Out of the box, one can send email to external hosts as long as [.filename]#/etc/resolv.conf# is configured or the network has access to a configured DNS server.
+To have email delivered to the MTA on the FreeBSD host, do one of the following:
+
+* Run a DNS server for the domain.
+* Get mail delivered directly to the FQDN for the machine.
+
+In order to have mail delivered directly to a host, it must have a permanent static IP address, not a dynamic IP address.
+If the system is behind a firewall, it must be configured to allow SMTP traffic.
+To receive mail directly at a host, one of these two must be configured:
+
+* Make sure that the lowest-numbered MX record in DNS points to the host's static IP address.
+* Make sure there is no MX entry in the DNS for the host.
+
+Either of the above will allow mail to be received directly at the host.
+
+Try this:
[source,shell]
....
-% chmod 600 .fetchmailrc
+# hostname
....
-The following [.filename]#.fetchmailrc# serves as an example for downloading a single user mailbox using POP.
-It tells fetchmail to connect to `example.com` using a username of `joesoap` and a password of `XXX`.
-This example assumes that the user `joesoap` exists on the local system.
+The output should be similar to the following:
[.programlisting]
....
-poll example.com protocol pop3 username "joesoap" password "XXX"
+example.FreeBSD.org
+....
+
+[source,shell]
+....
+# host example.FreeBSD.org
....
-The next example connects to multiple POP and IMAP servers and redirects to different local usernames where applicable:
+The output should be similar to the following:
[.programlisting]
....
-poll example.com proto pop3:
-user "joesoap", with password "XXX", is "jsoap" here;
-user "andrea", with password "XXXX";
-poll example2.net proto imap:
-user "john", with password "XXXXX", is "myth" here;
+example.FreeBSD.org has address 204.216.27.XX
....
-fetchmail can be run in daemon mode by running it with `-d`, followed by the interval (in seconds) that fetchmail should poll servers listed in [.filename]#.fetchmailrc#.
-The following example configures fetchmail to poll every 600 seconds:
+In this example, mail sent directly to mailto:yourlogin@example.FreeBSD.org[yourlogin@example.FreeBSD.org] should work without problems,
+assuming a full-featured MTA is running correctly on `example.FreeBSD.org`.
+Note that man:dma[8] does not listen on port 25 for incoming connections and cannot be used in this scenario.
+
+For this example:
[source,shell]
....
-% fetchmail -d 600
+# host example.FreeBSD.org
....
-More information on fetchmail can be found at http://www.fetchmail.info/[http://www.fetchmail.info/].
+The output should be similar to the following:
-[[mail-procmail]]
-== Using procmail
+[.programlisting]
+....
+example.FreeBSD.org has address 204.216.27.XX
+example.FreeBSD.org mail is handled (pri=10) by nevdull.FreeBSD.org
+....
-procmail is a powerful application used to filter incoming mail.
-It allows users to define "rules" which can be matched to incoming mails to perform specific functions or to reroute mail to alternative mailboxes or email addresses.
-procmail can be installed using the package:mail/procmail[] port.
-Once installed, it can be directly integrated into most MTAs.
-Consult the MTA documentation for more information.
-Alternatively, procmail can be integrated by adding the following line to a [.filename]#.forward# in the home directory of the user:
+All mail sent to `example.FreeBSD.org` will be collected on `nevdull` under the same username instead of being sent directly to your host.
+
+The above information is handled by the DNS server.
+The DNS record that carries mail routing information is the link:https://en.wikipedia.org/wiki/MX_record[mail exchanger record (MX record)].
+If no MX record exists, mail will be delivered directly to the host by way of its IP address.
+
+The MX entry for `freefall.FreeBSD.org` at one time looked like this:
[.programlisting]
....
-"|exec /usr/local/bin/procmail || exit 75"
+freefall MX 30 mail.crl.net
+freefall MX 40 agora.rdrop.com
+freefall MX 10 freefall.FreeBSD.org
+freefall MX 20 who.cdrom.com
....
-The following section displays some basic procmail rules, as well as brief descriptions of what they do.
-Rules must be inserted into a [.filename]#.procmailrc#, which must reside in the user's home directory.
+`freefall` had many MX entries.
+The lowest MX number is the host that receives mail directly, if available.
+If it is not accessible for some reason, the next lower-numbered host will accept messages temporarily, and pass it along when a lower-numbered host becomes available.
+
+Alternate MX sites should have separate Internet connections in order to be most useful.
+Your ISP can provide this service.
+
+[[mail-domain]]
+=== Mail for a Domain
+
+When configuring an MTA for a network, any mail sent to hosts in its domain should be diverted to the MTA so that users can receive their mail on the master mail server.
-The majority of these rules can be found in man:procmailex[5].
+To make life easiest, a user account with the same _username_ should exist on both the MTA and the system with the MUA.
+Use man:adduser[8] to create the user accounts.
-To forward all mail from mailto:user@example.com[user@example.com] to an external address of mailto:goodmail@example2.com[goodmail@example2.com]:
+[TIP]
+====
+In addition to adding local users to the host, there are alternative methods known as virtual users.
+Programs like link:https://www.cyrusimap.org/[Cyrus] and link:https://www.dovecot.org/[Dovecot] can be integrated into MTAs to handle users, mail storage, and also provide access via POP3 and IMAP.
+====
+
+The MTA must be the designated mail exchanger for each workstation on the network.
+This is done in the DNS configuration with an MX record:
[.programlisting]
....
-:0
-* ^From.*user@example.com
-! goodmail@example2.com
+example.FreeBSD.org A 204.216.27.XX ; Workstation
+ MX 10 nevdull.FreeBSD.org ; Mailhost
....
-To forward all mails shorter than 1000 bytes to an external address of mailto:goodmail@example2.com[goodmail@example2.com]:
+This will redirect mail for the workstation to the MTA no matter where the A record points.
+The mail is sent to the MX host.
+
+This must be configured on a DNS server.
+If the network does not run its own DNS server, talk to the ISP or DNS provider.
+
+The following is an example of virtual email hosting.
+
+Consider a customer with the domain `customer1.org`, where all the mail for `customer1.org` should be sent to `mail.myhost.com`.
+
+The DNS entry should look like this:
[.programlisting]
....
-:0
-* < 1000
-! goodmail@example2.com
+customer1.org MX 10 mail.myhost.com
....
-To send all mail sent to mailto:alternate@example.com[alternate@example.com] to a mailbox called [.filename]#alternate#:
+An `A` record is _not_ needed for `customer1.org` in order to only handle email for that domain.
+However, running `ping` against `customer1.org` will not work unless an `A` record exists for it.
+
+Tell the MTA which domains and/or hostnames it should accept mail for.
+Either of the following will work for Sendmail:
+
+* Add the hosts to [.filename]#/etc/mail/local-host-names# when using the `FEATURE(use_cw_file)`.
+* Add a `Cwyour.host.com` line to [.filename]#/etc/sendmail.cf#.
+
+[[outgoing-only]]
+=== Setting Up to Send Only
+
+There are many instances where one may only want to send mail through a relay.
+Some examples are:
+
+* The computer is a desktop machine that needs to use programs such as man:mail[1], using the ISP's mail relay.
+* The computer is a server that does not handle mail locally, but needs to pass off all mail to a relay for processing.
+
+While any MTA is capable of filling this particular niche, it can be difficult to properly configure a full-featured MTA just to handle offloading mail.
+Programs such as Sendmail and Postfix are overkill for this use.
+
+Additionally, a typical Internet access service agreement may forbid one from running a "mail server".
+
+The easiest way to fulfill those needs is to use the man:dma[8] MTA included in the <<configuring-dragonfly-mail-agent, base system>>.
+For systems up to 13.2, need be to installed from ports.
+
+In addition to man:dma[8], third-party software can be used to achieve the same, like package:mail/ssmtp[].
+
+[source,shell]
+....
+# cd /usr/ports/mail/ssmtp
+# make install replace clean
+....
+
+Once installed, package:mail/ssmtp[] can be configured with [.filename]#/usr/local/etc/ssmtp/ssmtp.conf#:
[.programlisting]
....
-:0
-* ^TOalternate@example.com
-alternate
+root=yourrealemail@example.com
+mailhub=mail.example.com
+rewriteDomain=example.com
+hostname=_HOSTNAME_
....
-To send all mail with a subject of "Spam" to [.filename]#/dev/null#:
+Use the real email address for `root`.
+Enter the ISP's outgoing mail relay in place of `mail.example.com`.
+Some ISPs call this the "outgoing mail server" or "SMTP server".
+
+Make sure to disable Sendmail, including the outgoing mail service.
+See <<mail-disable-sendmail>> for details.
+
+package:mail/ssmtp[] has some other options available. Refer to the examples in [.filename]#/usr/local/etc/ssmtp# or the manual page of ssmtp for more information.
+
+Setting up ssmtp in this manner allows any software on the computer that needs to send mail to function properly, while not violating the ISP's usage policy or allowing the computer to be hijacked for spamming.
+
+[[SMTP-Auth]]
+=== SMTP Authentication in Sendmail
+
+Configuring SMTP authentication on the MTA provides a number of benefits.
+SMTP authentication adds a layer of security to Sendmail, and provides mobile users who switch hosts the ability to use the same MTA without the need to reconfigure their mail client's settings each time.
+
+Install package:security/cyrus-sasl2[] from the Ports Collection.
+This port supports a number of compile-time options.
+For the SMTP authentication method demonstrated in this example, make sure that `LOGIN` is not disabled.
+
+After installing package:security/cyrus-sasl2[], edit [.filename]#/usr/local/lib/sasl2/Sendmail.conf#, or create it if it does not exist, and add the following line:
+
+[.programlisting]
+....
+pwcheck_method: saslauthd
+....
+
+Next, install package:security/cyrus-sasl2-saslauthd[] and add execute the following command:
+
+[source,shell]
+....
+# sysrc saslauthd_enable="YES"
+....
+
+Finally, start the saslauthd daemon:
+
+[source,shell]
+....
+# service saslauthd start
+....
+
+This daemon serves as a broker for Sendmail to authenticate against the FreeBSD man:passwd[5] database.
+This saves the trouble of creating a new set of usernames and passwords for each user that needs to use SMTP authentication, and keeps the login and mail password the same.
+
+Next, edit [.filename]#/etc/make.conf# and add the following lines:
[.programlisting]
....
-:0
-^Subject:.*Spam
-/dev/null
+SENDMAIL_CFLAGS=-I/usr/local/include/sasl -DSASL
+SENDMAIL_LDADD=/usr/local/lib/libsasl2.so
+....
+
+These lines provide Sendmail the proper configuration options for linking to package:cyrus-sasl2[] at compile time.
+Make sure that package:cyrus-sasl2[] has been installed before recompiling Sendmail.
+
+Recompile Sendmail by executing the following commands:
+
+[source,shell]
+....
+# cd /usr/src/lib/libsmutil
+# make cleandir && make obj && make
+# cd /usr/src/lib/libsm
+# make cleandir && make obj && make
+# cd /usr/src/usr.sbin/sendmail
+# make cleandir && make obj && make && make install
....
-A useful recipe that parses incoming `FreeBSD.org` mailing lists and places each list in its own mailbox:
+This compile should not have any problems if [.filename]#/usr/src# has not changed extensively and the shared libraries it needs are available.
+
+After Sendmail has been compiled and reinstalled, edit [.filename]#/etc/mail/freebsd.mc# or the local [.filename]#.mc#.
+Many administrators choose to use the output from man:hostname[1] as the name of [.filename]#.mc# for uniqueness.
+
+Add these lines:
[.programlisting]
....
-:0
-* ^Sender:.owner-freebsd-\/[^@]+@FreeBSD.ORG
-{
- LISTNAME=${MATCH}
- :0
- * LISTNAME??^\/[^@]+
- FreeBSD-${MATCH}
-}
+dnl set SASL options
+TRUST_AUTH_MECH(`GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN')dnl
+define(`confAUTH_MECHANISMS', `GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN')dnl
....
+
+These options configure the different methods available to Sendmail for authenticating users.
+To use a method other than pwcheck, refer to the Sendmail documentation.
+
+Finally, run man:make[1] while in [.filename]#/etc/mail#.
+That will run the new [.filename]#.mc# and create a [.filename]#.cf# named either [.filename]#freebsd.cf# or the name used for the local [.filename]#.mc#.
+
+Then, run `make install restart`, which will copy the file to [.filename]#sendmail.cf#, and properly restart Sendmail.
+
+For more information about this process, refer to [.filename]#/etc/mail/Makefile#.
+
+To test the configuration, use a MUA to send a test message.
+For further investigation, set the `LogLevel` of Sendmail to `13` and watch [.filename]#/var/log/maillog# for any errors.
+
+For more information, refer to http://www.sendmail.org/~ca/email/auth.html[SMTP authentication].
diff --git a/documentation/content/en/books/handbook/mail/_index.po b/documentation/content/en/books/handbook/mail/_index.po
new file mode 100644
index 0000000000..e6992c6f66
--- /dev/null
+++ b/documentation/content/en/books/handbook/mail/_index.po
@@ -0,0 +1,1975 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/mail/_index.adoc:1
+#, no-wrap
+msgid "This chapter provides a basic introduction to running a mail server on FreeBSD, as well as an introduction to sending and receiving email using FreeBSD"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/mail/_index.adoc:1
+#, no-wrap
+msgid "IV. Network Communication"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/mail/_index.adoc:1
+#, no-wrap
+msgid "Chapter 31. Electronic Mail"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/mail/_index.adoc:14
+#, no-wrap
+msgid "Electronic Mail"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/mail/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:57
+msgid ""
+"\"Electronic Mail\", better known as email, is one of the most widely used "
+"forms of communication today. This chapter provides a basic introduction to "
+"running a mail server on FreeBSD, as well as an introduction to sending and "
+"receiving email using FreeBSD. For a complete coverage of this subject, "
+"refer to the books listed in crossref:bibliography[bibliography,"
+"Bibliography]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:59
+msgid "This chapter covers:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:61
+msgid ""
+"Which software components are involved in sending and receiving electronic "
+"mail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:62
+msgid "How to configure DragonFly Mail Agent."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:63
+msgid "Where basic Sendmail configuration files are located in FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:64
+msgid "The difference between remote and local mailboxes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:65
+msgid ""
+"How to install and configure an alternate Mail Transfer Agent, replacing "
+"DragonFly Mail Agent or Sendmail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:66
+msgid "How to troubleshoot common mail server problems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:67
+msgid "How to configure Sendmail to only send mail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:68
+msgid "How to configure SMTP authentication for added security in Sendmail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:69
+msgid ""
+"How to install and use a Mail User Agent, such as mutt, to send and receive "
+"email."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:70
+msgid "How to download mail from a remote POP or IMAP server."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:71
+msgid "How to automatically apply filters and rules to incoming email."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/mail/_index.adoc:73
+#, no-wrap
+msgid "Mail Components"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:77
+msgid ""
+"There are five major parts involved in an email exchange: the Mail User "
+"Agent (MUA), the Mail Transfer Agent (MTA), a mail host, a remote or local "
+"mailbox, and DNS. This section provides an overview of these components."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/mail/_index.adoc:78
+#, no-wrap
+msgid "Mail User Agent (MUA)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:84
+msgid ""
+"The Mail User Agent (MUA) is an application which is used to compose, send, "
+"and receive emails. This application can be a command line program, such as "
+"the built-in `mail` utility or a third-party application from the Ports "
+"Collection, such as alpine, elm, or mutt. Dozens of graphical programs are "
+"also available in the Ports Collection, including Claws Mail, Evolution, and "
+"Thunderbird. Some organizations provide a web mail program which can be "
+"accessed through a web browser. More information about installing and using "
+"a MUA on FreeBSD can be found in <<mail-agents>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/mail/_index.adoc:85
+#, no-wrap
+msgid "Mail Transfer Agent (MTA)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:89
+msgid ""
+"The Mail Transfer Agent (MTA) is responsible for receiving incoming mail and "
+"delivering outgoing mail. Starting with FreeBSD version 14.0, the default "
+"MTA is DragonFly Mail Agent (man:dma[8]); in earlier versions, it is man:"
+"sendmail[8]. Other MTAs, including Exim, Postfix, and qmail, may be "
+"installed to replace the default MTA."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/mail/_index.adoc:90
+#, no-wrap
+msgid "Mail Host and Mailboxes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:95
+msgid ""
+"The mail host is a server that is responsible for delivering and receiving "
+"mail for a host or a network. The mail host collects all mail sent to the "
+"domain and stores it either in the default `mbox` or the alternative Maildir "
+"format, depending on the configuration. Once mail has been stored, it may "
+"either be read locally using a MUA or remotely accessed and collected using "
+"protocols such as POP or IMAP. If mail is read locally, a POP or IMAP "
+"server does not need to be installed."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/mail/_index.adoc:96
+#, no-wrap
+msgid "Domain Name System (DNS)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:100
+msgid ""
+"The Domain Name System (DNS) and its daemon man:named[8] play a large role "
+"in the delivery of mail. In order to deliver mail from one site to another, "
+"the MTA will look up the remote site in DNS to determine which host will "
+"receive mail for the destination. This process also occurs when mail is "
+"sent from a remote host to the MTA."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/mail/_index.adoc:102
+#, no-wrap
+msgid "DragonFly Mail Agent (DMA)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:108
+msgid ""
+"DragonFly Mail Agent (DMA) is the default MTA in FreeBSD starting with "
+"version 14.0. man:dma[8] is a small Mail Transport Agent (MTA), designed "
+"for home and office use. It accepts mails from locally installed Mail User "
+"Agents (MUA) and delivers the mails either locally or to a remote "
+"destination. Remote delivery includes several features like TLS/SSL support "
+"and SMTP authentication."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:111
+msgid ""
+"man:dma[8] is not intended as a replacement for real, big MTAs like man:"
+"sendmail[8] or man:postfix[1]. Consequently, man:dma[8] does not listen on "
+"port 25 for incoming connections."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mail/_index.adoc:113
+#, no-wrap
+msgid "Configuring DragonFly Mail Agent (DMA)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:117
+msgid ""
+"DMA comes with a default configuration that will be suitable for many "
+"deployments. Custom settings are defined in [.filename]#/etc/dma/dma.conf#, "
+"and SMTP authentication is configured in [.filename]#/etc/dma/auth.conf#."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/mail/_index.adoc:119
+#, no-wrap
+msgid "Using DMA to Route Outgoing Mail through Gmail (STARTTLS:SMTP example)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:122
+msgid ""
+"This example [.filename]#/etc/dma/dma.conf# can be used to send mail using "
+"Google's SMTP servers."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:131
+#, no-wrap
+msgid ""
+"SMARTHOST smtp.gmail.com\n"
+"PORT 587\n"
+"AUTHPATH /etc/dma/auth.conf\n"
+"SECURETRANSFER\n"
+"STARTTLS\n"
+"MASQUERADE username@gmail.com\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:134
+#: documentation/content/en/books/handbook/mail/_index.adoc:162
+#: documentation/content/en/books/handbook/mail/_index.adoc:190
+msgid ""
+"Authentication can be set with one line in [.filename]#/etc/dma/auth.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:138
+#, no-wrap
+msgid "username@gmail.com|smtp.gmail.com:password\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:141
+#: documentation/content/en/books/handbook/mail/_index.adoc:169
+#: documentation/content/en/books/handbook/mail/_index.adoc:197
+msgid "Execute the following command to test the configuration:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:145
+#, no-wrap
+msgid "% echo this is a test | mail -v -s testing-email username@gmail.com\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/mail/_index.adoc:148
+#, no-wrap
+msgid "Using DMA to Route Outgoing Mail through Fastmail (SSL/TLS example)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:151
+msgid ""
+"This example [.filename]#/etc/dma/dma.conf# can be used to send mail using "
+"Fastmail's SMTP servers."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:159
+#, no-wrap
+msgid ""
+"SMARTHOST smtp.fastmail.com\n"
+"PORT 465\n"
+"AUTHPATH /etc/dma/auth.conf\n"
+"SECURETRANSFER\n"
+"MAILNAME example.server.com\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:166
+#, no-wrap
+msgid "username@fastmail.com|smtp.fastmail.com:password\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:173
+#, no-wrap
+msgid "% echo this is a test | mail -v -s testing-email username@fastmail.com\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/mail/_index.adoc:176
+#, no-wrap
+msgid "Using DMA to Route Outgoing Mail through a Custom Mail Host"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:179
+msgid ""
+"This example [.filename]#/etc/dma/dma.conf# can be used to send mail using a "
+"custom mail host."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:187
+#, no-wrap
+msgid ""
+"SMARTHOST mail.example.org\n"
+"PORT 587\n"
+"AUTHPATH /etc/dma/auth.conf\n"
+"SECURETRANSFER\n"
+"STARTTLS\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:194
+#, no-wrap
+msgid "username@example.org|mail.example.org:password\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:201
+#, no-wrap
+msgid "% echo this is a test | mail -v -s testing-email username@example.org\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/mail/_index.adoc:204
+#, no-wrap
+msgid "Sendmail"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:208
+msgid ""
+"Sendmail is a venerable and versatile Mail Transfer Agent (MTA) with a long "
+"history in UNIX(R) and UNIX-like systems. It was a part of the FreeBSD base "
+"system until FreeBSD 13, offering robust email transport capabilities, "
+"extensive customization options, and support for complex routing and "
+"filtering."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mail/_index.adoc:210
+#, no-wrap
+msgid "Configuration Files"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:213
+msgid ""
+"The configuration files for Sendmail are located in [.filename]#/etc/mail/#."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/mail/_index.adoc:214
+#, no-wrap
+msgid "[.filename]#/etc/mail/access#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:222
+msgid ""
+"This access database file defines which hosts or IP addresses have access to "
+"the local mail server and what kind of access they have. Hosts listed as "
+"`OK`, which is the default option, are allowed to send mail to this host as "
+"long as the mail's final destination is the local machine. Hosts listed as "
+"`REJECT` are rejected for all mail connections. Hosts listed as `RELAY` are "
+"allowed to send mail for any destination using this mail server. Hosts "
+"listed as `ERROR` will have their mail returned with the specified mail "
+"error. If a host is listed as `SKIP`, Sendmail will abort the current "
+"search for this entry without accepting or rejecting the mail. Hosts listed "
+"as `QUARANTINE` will have their messages held and will receive the specified "
+"text as the reason for the hold."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:224
+msgid ""
+"Examples of using these options for both IPv4 and IPv6 addresses can be "
+"found in the FreeBSD sample configuration, [.filename]#/etc/mail/access."
+"sample#:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:228
+msgid ""
+"To configure the access database, use the format shown in the sample to make "
+"entries in [.filename]#/etc/mail/access#, but do not put a comment symbol "
+"(`+#+`) in front of the entries. Create an entry for each host or network "
+"whose access should be configured. Mail senders that match the left side of "
+"the table are affected by the action on the right side of the table."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:230
+msgid ""
+"Whenever this file is updated, update its database and restart Sendmail:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:235
+#, no-wrap
+msgid ""
+"# makemap hash /etc/mail/access < /etc/mail/access\n"
+"# service sendmail restart\n"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/mail/_index.adoc:237
+#, no-wrap
+msgid "[.filename]#/etc/mail/aliases#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:240
+msgid ""
+"This database file contains a list of virtual mailboxes that are expanded to "
+"users, files, programs, or other aliases. Here are a few entries to "
+"illustrate the file format:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:247
+#, no-wrap
+msgid ""
+"root: localuser\n"
+"ftp-bugs: joe,eric,paul\n"
+"bit.bucket: /dev/null\n"
+"procmail: \"|/usr/local/bin/procmail\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:258
+msgid ""
+"The mailbox name on the left side of the colon is expanded to the target(s) "
+"on the right. The first entry expands the `root` mailbox to the `localuser` "
+"mailbox, which is then looked up in the [.filename]#/etc/mail/aliases# "
+"database. If no match is found, the message is delivered to `localuser`. "
+"The second entry shows a mail list. Mail to `ftp-bugs` is expanded to the "
+"three local mailboxes `joe`, `eric`, and `paul`. A remote mailbox could be "
+"specified as _user@example.com_. The third entry shows how to write mail to "
+"a file, in this case [.filename]#/dev/null#. The last entry demonstrates "
+"how to send mail to a program, [.filename]#/usr/local/bin/procmail#, through "
+"a UNIX(R) pipe. Refer to man:aliases[5] for more information about the "
+"format of this file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:260
+msgid ""
+"Whenever this file is updated, run `newaliases` to update and initialize the "
+"aliases database."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/mail/_index.adoc:261
+#, no-wrap
+msgid "[.filename]#/etc/mail/sendmail.cf#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:266
+msgid ""
+"This is the master configuration file for Sendmail. It controls the overall "
+"behavior of Sendmail, including everything from rewriting email addresses to "
+"printing rejection messages to remote mail servers. Accordingly, this "
+"configuration file is quite complex. Fortunately, this file rarely needs to "
+"be changed for standard mail servers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:269
+msgid ""
+"The master Sendmail configuration file can be built from man:m4[1] macros "
+"that define the features and behavior of Sendmail. Refer to [.filename]#/"
+"usr/src/contrib/sendmail/cf/README# for some of the details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:271
+msgid ""
+"Whenever changes to this file are made, Sendmail needs to be restarted for "
+"the changes to take effect."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/mail/_index.adoc:272
+#, no-wrap
+msgid "[.filename]#/etc/mail/virtusertable#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:276
+msgid ""
+"This database file maps mail addresses for virtual domains and users to real "
+"mailboxes. These mailboxes can be local, remote, aliases defined in [."
+"filename]#/etc/mail/aliases#, or files. This allows multiple virtual "
+"domains to be hosted on one machine."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:279
+msgid ""
+"FreeBSD provides a sample configuration file in [.filename]#/etc/mail/"
+"virtusertable.sample# to further demonstrate its format. The following "
+"example demonstrates how to create custom entries using that format:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:285
+#, no-wrap
+msgid ""
+"root@example.com root\n"
+"postmaster@example.com postmaster@noc.example.net\n"
+"@example.com joe\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:293
+msgid ""
+"This file is processed in a first match order. When an email address "
+"matches the address on the left, it is mapped to the local mailbox listed on "
+"the right. The format of the first entry in this example maps a specific "
+"email address to a local mailbox, whereas the format of the second entry "
+"maps a specific email address to a remote mailbox. Finally, any email "
+"address from `example.com` which has not matched any of the previous entries "
+"will match the last mapping and be sent to the local mailbox `joe`. When "
+"creating custom entries, use this format and add them to [.filename]#/etc/"
+"mail/virtusertable#. Whenever this file is edited, update its database and "
+"restart Sendmail:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:298
+#, no-wrap
+msgid ""
+"# makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable\n"
+"# service sendmail restart\n"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/mail/_index.adoc:300
+#, no-wrap
+msgid "[.filename]#/etc/mail/relay-domains#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:304
+msgid ""
+"In a default FreeBSD installation, Sendmail is configured to only send mail "
+"from the host it is running on. For example, if a POP server is available, "
+"users will be able to check mail from remote locations but they will not be "
+"able to send outgoing emails from outside locations. Typically, a few "
+"moments after the attempt, an email will be sent from `MAILER-DAEMON` with a "
+"`5.7 Relaying Denied` message."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:307
+msgid ""
+"The most straightforward solution is to add the ISP's FQDN to [.filename]#/"
+"etc/mail/relay-domains#. If multiple addresses are needed, add them one per "
+"line:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:314
+#, no-wrap
+msgid ""
+"your.isp.example.com\n"
+"other.isp.example.net\n"
+"users-isp.example.org\n"
+"www.example.org\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:317
+msgid ""
+"After creating or editing this file, restart Sendmail with `service sendmail "
+"restart`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:320
+msgid ""
+"Now any mail sent through the system by any host in this list, provided the "
+"user has an account on the system, will succeed. This allows users to send "
+"mail from the system remotely without opening the system up to relaying SPAM "
+"from the Internet."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/mail/_index.adoc:322
+#, no-wrap
+msgid "Changing the Mail Transfer Agent"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:327
+msgid ""
+"Starting with FreeBSD version 14.0, man:dma[8] is the default MTA, and "
+"before 14.0, the default MTA is man:sendmail[8]. However, the system "
+"administrator can change the system's MTA. A wide choice of alternative "
+"MTAs is available from the `mail` category of the FreeBSD Ports Collection."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:334
+msgid ""
+"If the default's outgoing mail service is disabled, it is important that it "
+"is replaced with an alternative mail delivery system. Otherwise, system "
+"functions such as man:periodic[8] will be unable to deliver their results by "
+"email. Many parts of the system expect a functional MTA. If applications "
+"continue to use the default binaries to try to send email after they are "
+"disabled, mail could go into an inactive queue and never be delivered."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mail/_index.adoc:337
+#, no-wrap
+msgid "Replacing Sendmail with Other MTA"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:340
+msgid ""
+"In order to completely disable man:sendmail[8] execute the following "
+"commands:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:347
+#, no-wrap
+msgid ""
+"# sysrc sendmail_enable=\"NO\"\n"
+"# sysrc sendmail_submit_enable=\"NO\"\n"
+"# sysrc sendmail_outbound_enable=\"NO\"\n"
+"# sysrc sendmail_msp_queue_enable=\"NO\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:350
+msgid ""
+"To only disable man:sendmail[8]'s incoming mail service execute the "
+"following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:354
+#, no-wrap
+msgid "# sysrc sendmail_enable=\"NO\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:357
+msgid "Then stop the man:sendmail[8] service:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:361
+#, no-wrap
+msgid "# service sendmail onestop\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:366
+msgid ""
+"Some extra configuration is needed as man:sendmail[8] is so ubiquitous that "
+"some software assumes it is already installed and configured. Check [."
+"filename]#/etc/periodic.conf# and make sure that these values are set to "
+"`NO`. If this file does not exist, create it with these entries:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:373
+#: documentation/content/en/books/handbook/mail/_index.adoc:435
+#, no-wrap
+msgid ""
+"daily_clean_hoststat_enable=\"NO\"\n"
+"daily_status_mail_rejects_enable=\"NO\"\n"
+"daily_status_include_submit_mailq=\"NO\"\n"
+"daily_submit_queuerun=\"NO\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:378
+msgid ""
+"The next step is to install another MTA, man:dma[8] will be used in this "
+"example. As pointed above, man:dma[8] is the default MTA in FreeBSD "
+"starting with version 14.0. Therefore, it is only necessary to install it "
+"from the ports if you are using a previous version."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:380
+msgid "To install it execute the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:384
+#, no-wrap
+msgid "# pkg install dma\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:387
+msgid ""
+"Perform the configuration as indicated in <<configuring-dragonfly-mail-"
+"agent>>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:389
+msgid ""
+"Then change all the entries in the file [.filename]#/etc/mail/mailer.conf# "
+"to man:dma[8]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:402
+#, no-wrap
+msgid ""
+"# $FreeBSD$\n"
+"#\n"
+"# Execute the \"real\" sendmail program, named /usr/libexec/sendmail/sendmail\n"
+"#\n"
+"# If dma(8) is installed, an example mailer.conf that uses dma(8) instead can\n"
+"# be found in /usr/share/examples/dma\n"
+"#\n"
+"sendmail /usr/local/libexec/dma\n"
+"mailq /usr/local/libexec/dma\n"
+"newaliases /usr/local/libexec/dma\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:407
+msgid ""
+"When using the version of man:dma[8] included in the base system, the paths "
+"will change to [.filename]#/usr/libexec/dma#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:410
+msgid ""
+"To ensure that anything in the queue is flushed at boot or before shutdown, "
+"execute the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:414
+#, no-wrap
+msgid "# sysrc dma_flushq_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:418
+#: documentation/content/en/books/handbook/mail/_index.adoc:471
+msgid ""
+"Once everything is configured, it is recommended to reboot the system. "
+"Rebooting provides the opportunity to ensure that the system is correctly "
+"configured to start the new MTA automatically on boot."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mail/_index.adoc:420
+#, no-wrap
+msgid "Replacing DragonFly Mail Agent (DMA) with Other MTA"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:424
+msgid ""
+"As noted above, starting with FreeBSD version 14.0, the default MTA is DMA. "
+"In this example, package:mail/postfix[] will be used as the alternative MTA."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:428
+msgid ""
+"Before installing package:mail/postfix[] some extra configuration is "
+"needed. Check [.filename]#/etc/periodic.conf# and make sure that these "
+"values are set to `NO`. If this file does not exist, create it with these "
+"entries:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:438
+msgid "Then install package:mail/postfix[]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:442
+#, no-wrap
+msgid "# pkg install postfix\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:445
+msgid ""
+"To start package:mail/postfix[] at system boot execute the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:449
+#, no-wrap
+msgid "# sysrc postfix_enable=\"YES\"\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:455
+msgid ""
+"It is good practice to read the installation message after installing an "
+"application. Provides useful information about settings, etc."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:458
+msgid ""
+"If postfix is *not* already activated in [.filename]#/usr/local/etc/mail/"
+"mailer.conf# execute the following commands:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:464
+#, no-wrap
+msgid ""
+"mv /usr/local/etc/mail/mailer.conf /usr/local/etc/mail/mailer.conf.old\n"
+"install -d /usr/local/etc/mail\n"
+"install -m 0644 /usr/local/share/postfix/mailer.conf.postfix /usr/local/etc/mail/mailer.conf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:468
+msgid ""
+"When employing SASL, ensure that postfix has access to read the sasldb "
+"file. This is accomplished by adding postfix to group mail and making the [."
+"filename]#/usr/local/etc/sasldb*# file(s) readable by group mail (this "
+"should be the default for new installs)."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/mail/_index.adoc:473
+#, no-wrap
+msgid "Mail User Agents"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:479
+msgid ""
+"A MUA is an application that is used to send and receive email. As email "
+"\"evolves\" and becomes more complex, MUAs are becoming increasingly "
+"powerful and provide users increased functionality and flexibility. The "
+"`mail` category of the FreeBSD Ports Collection contains numerous MUAs. "
+"These include graphical email clients such as Evolution or Balsa and console "
+"based clients such as mutt or alpine."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mail/_index.adoc:481
+#, no-wrap
+msgid "mail"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:486
+msgid ""
+"man:mail[1] is the default MUA installed with FreeBSD. It is a console "
+"based MUA that offers the basic functionality required to send and receive "
+"text-based email. It provides limited attachment support and can only "
+"access local mailboxes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:488
+msgid ""
+"Although man:mail[1] does not natively support interaction with POP or IMAP "
+"servers, these mailboxes may be downloaded to a local `mbox` using an "
+"application such as fetchmail or getmail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:490
+msgid "In order to send and receive email, run man:mail[1]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:494
+#, no-wrap
+msgid "% mail\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:499
+msgid ""
+"The contents of the user's mailbox in [.filename]#/var/mail# are "
+"automatically read by man:mail[1]. Should the mailbox be empty, the utility "
+"exits with a message indicating that no mail could be found. If mail "
+"exists, the application interface starts, and a list of messages will be "
+"displayed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:501
+msgid ""
+"Messages are automatically numbered, as can be seen in the following example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:509
+#, no-wrap
+msgid ""
+"Mail version 8.1 6/6/93. Type ? for help.\n"
+"\"/var/mail/username\": 3 messages 3 new\n"
+">N 1 root@localhost Mon Mar 8 14:05 14/510 \"test\"\n"
+" N 2 root@localhost Mon Mar 8 14:05 14/509 \"user account\"\n"
+" N 3 root@localhost Mon Mar 8 14:05 14/509 \"sample\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:512
+msgid ""
+"Messages can now be read by typing kbd:[t] followed by the message number."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:514
+msgid "This example reads the first email:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:526
+#, no-wrap
+msgid ""
+"& t 1\n"
+"Message 1:\n"
+"From root@localhost Mon Mar 8 14:05:52 2004\n"
+"X-Original-To: username@localhost\n"
+"Delivered-To: username@localhost\n"
+"To: username@localhost\n"
+"Subject: test\n"
+"Date: Mon, 8 Mar 2004 14:05:52 +0200 (SAST)\n"
+"From: root@localhost (Charlie Root)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:528
+#, no-wrap
+msgid "This is a test message, please reply if you receive it.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:531
+msgid ""
+"As seen in this example, the message will be displayed with full headers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:533
+msgid "To display the list of messages again, press kbd:[h]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:538
+msgid ""
+"If the email requires a reply, press either kbd:[R] or kbd:[r] man:mail[1] "
+"keys. kbd:[R] instructs man:mail[1] to reply only to the sender of the "
+"email, while kbd:[r] replies to all other recipients of the message. These "
+"commands can be suffixed with the mail number of the message to reply to. "
+"After typing the response, the end of the message should be marked by a "
+"single kbd:[.] on its own line."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:540
+msgid "An example can be seen below:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:546
+#, no-wrap
+msgid ""
+"& R 1\n"
+"To: root@localhost\n"
+"Subject: Re: test\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:550
+#, no-wrap
+msgid ""
+"Thank you, I did get your email.\n"
+".\n"
+"EOT\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:556
+msgid ""
+"In order to send a new email, press kbd:[m], followed by the recipient email "
+"address. Multiple recipients may be specified by separating each address "
+"with the kbd:[,] delimiter. The subject of the message may then be entered, "
+"followed by the message contents. The end of the message should be "
+"specified by putting a single kbd:[.] on its own line."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:561
+#, no-wrap
+msgid ""
+"& mail root@localhost\n"
+"Subject: I mastered mail\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:565
+#, no-wrap
+msgid ""
+"Now I can send and receive email using mail ... :)\n"
+".\n"
+"EOT\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:569
+msgid ""
+"While using man:mail[1], press kbd:[?] to display help at any time. Refer "
+"to man:mail[1] for more help on how to use man:mail[1]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:574
+msgid ""
+"man:mail[1] was not designed to handle attachments and thus deals with them "
+"poorly. Newer MUAs handle attachments in a more intelligent way."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mail/_index.adoc:577
+#, no-wrap
+msgid "Mutt"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:580
+msgid "Mutt is a powerful MUA, with many features, including:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:582
+msgid "The ability to thread messages."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:583
+msgid "PGP support for digital signing and encryption of email."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:584
+msgid "MIME support."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:585
+msgid "Maildir support."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:586
+msgid "Highly customizable."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:588
+msgid ""
+"Refer to link:http://www.mutt.org[http://www.mutt.org] for more information "
+"on Mutt."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:594
+msgid ""
+"A Mutt fork called NeoMutt is worth mentioning, which brings added "
+"features. See more on the link:https://neomutt.org/about.html[NeoMutt "
+"website]. If NeoMutt was chosen, replace the following command examples "
+"from `mutt` to `neomutt`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:598
+msgid ""
+"Mutt may be installed using the package:mail/mutt[] port. After the port "
+"has been installed, Mutt can be started by issuing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:602
+#, no-wrap
+msgid "% mutt\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:607
+msgid ""
+"Mutt will automatically read and display the contents of the user mailbox in "
+"[.filename]#/var/mail#. If no mails are found, Mutt will wait for commands "
+"from the user. The example below shows Mutt displaying a list of messages:"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/mail/_index.adoc:608
+#, no-wrap
+msgid "Mutt email client showing a list of messages"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/mail/_index.adoc:608
+#, no-wrap
+msgid "mutt1.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:612
+msgid ""
+"To read an email, select it using the cursor keys and press kbd:[Enter]. An "
+"example of Mutt displaying email can be seen below:"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/mail/_index.adoc:613
+#, no-wrap
+msgid "Mutt email client displaying an email"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/mail/_index.adoc:613
+#, no-wrap
+msgid "mutt2.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:618
+msgid ""
+"Similar to man:mail[1], Mutt can be used to reply only to the sender of the "
+"message as well as to all recipients. To reply only to the sender of the "
+"email, press kbd:[r]. To send a group reply to the original sender as well "
+"as all the message recipients, press kbd:[g]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:624
+msgid ""
+"By default, Mutt uses the man:vi[1] editor for creating and replying to "
+"emails. Each user can customize this by creating or editing the [."
+"filename]#.muttrc# in their home directory and setting the `editor` variable "
+"or by setting the `EDITOR` environment variable. Refer to link:http://www."
+"mutt.org/[http://www.mutt.org/] for more information about configuring Mutt."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:632
+msgid ""
+"To compose a new mail message, press kbd:[m]. After a valid subject has "
+"been given, Mutt will start man:vi[1] so the email can be written. Once the "
+"contents of the email are complete, save and quit from `vi`. Mutt will "
+"resume, displaying a summary screen of the mail that is to be delivered. In "
+"order to send the mail, press kbd:[y]. An example of the summary screen can "
+"be seen below:"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/mail/_index.adoc:633
+#, no-wrap
+msgid "Mutt email client showing the summary screen"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/mail/_index.adoc:633
+#, no-wrap
+msgid "mutt3.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:637
+msgid ""
+"Mutt contains extensive help which can be accessed from most of the menus by "
+"pressing kbd:[?]. The top line also displays the keyboard shortcuts where "
+"appropriate."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mail/_index.adoc:639
+#, no-wrap
+msgid "alpine"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:642
+msgid ""
+"alpine is aimed at a beginner user, but also includes some advanced features."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:648
+msgid ""
+"alpine has had several remote vulnerabilities discovered in the past, which "
+"allowed remote attackers to execute arbitrary code as users on the local "
+"system, by the action of sending a specially-prepared email. While _known_ "
+"problems have been fixed, alpine code is written in an insecure style and "
+"the FreeBSD Security Officer believes there are likely to be other "
+"undiscovered vulnerabilities. Users install alpine at their own risk."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:652
+msgid ""
+"The current version of alpine may be installed using the package:mail/"
+"alpine[] port. Once the port has installed, alpine can be started by "
+"issuing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:656
+#, no-wrap
+msgid "% alpine\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:662
+msgid ""
+"The first time alpine runs, it displays a greeting page with a brief "
+"introduction, as well as a request from the alpine development team to send "
+"an anonymous email message allowing them to judge how many users are using "
+"their client. To send this anonymous message, press kbd:[Enter]. "
+"Alternatively, press kbd:[E] to exit the greeting without sending an "
+"anonymous message. An example of the greeting page is shown below:"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/mail/_index.adoc:663
+#, no-wrap
+msgid "alpine email client showing the greeting page"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/mail/_index.adoc:663
+#, no-wrap
+msgid "pine1.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:668
+msgid ""
+"The main menu is then presented, which can be navigated using the cursor "
+"keys. This main menu provides shortcuts for the composing new mails, "
+"browsing mail directories, and administering address book entries. Below "
+"the main menu, relevant keyboard shortcuts to perform functions specific to "
+"the task at hand are shown."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:671
+msgid ""
+"The default directory opened by alpine is [.filename]#inbox#. To view the "
+"message index, press kbd:[I], or select the [.guimenuitem]#MESSAGE INDEX# "
+"option shown below:"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/mail/_index.adoc:672
+#, no-wrap
+msgid "alpine email client showing the default directory"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/mail/_index.adoc:672
+#, no-wrap
+msgid "pine2.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:676
+msgid ""
+"The message index shows messages in the current directory and can be "
+"navigated by using the cursor keys. Highlighted messages can be read by "
+"pressing kbd:[Enter]."
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/mail/_index.adoc:677
+#, no-wrap
+msgid "alpine email client showing the message index"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/mail/_index.adoc:677
+#, no-wrap
+msgid "pine3.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:682
+msgid ""
+"In the screenshot below, a sample message is displayed by alpine. "
+"Contextual keyboard shortcuts are displayed at the bottom of the screen. An "
+"example of one of a shortcut is kbd:[r], which tells the MUA to reply to the "
+"current message being displayed."
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/mail/_index.adoc:683
+#, no-wrap
+msgid "alpine email client showing an email"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/mail/_index.adoc:683
+#, no-wrap
+msgid "pine4.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:689
+msgid ""
+"Replying to an email in alpine is done using the pico editor, which is "
+"installed by default with alpine. pico makes it easy to navigate the "
+"message and is easier for novice users to use than man:vi[1] or man:"
+"mail[1]. Once the reply is complete, the message can be sent by pressing "
+"kbd:[Ctrl+X]. alpine will ask for confirmation before sending the message."
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/mail/_index.adoc:690
+#, no-wrap
+msgid "alpine email client showing the message compose window"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/mail/_index.adoc:690
+#, no-wrap
+msgid "pine5.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:693
+msgid ""
+"alpine can be customized using the [.guimenuitem]#SETUP# option from the "
+"main menu."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/mail/_index.adoc:695
+#, no-wrap
+msgid "Advanced Topics"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:698
+msgid ""
+"This section covers more involved topics such as mail configuration and "
+"setting up mail for an entire domain."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mail/_index.adoc:700
+#, no-wrap
+msgid "Basic Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:704
+msgid ""
+"Out of the box, one can send email to external hosts as long as [.filename]#/"
+"etc/resolv.conf# is configured or the network has access to a configured DNS "
+"server. To have email delivered to the MTA on the FreeBSD host, do one of "
+"the following:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:706
+msgid "Run a DNS server for the domain."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:707
+msgid "Get mail delivered directly to the FQDN for the machine."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:711
+msgid ""
+"In order to have mail delivered directly to a host, it must have a permanent "
+"static IP address, not a dynamic IP address. If the system is behind a "
+"firewall, it must be configured to allow SMTP traffic. To receive mail "
+"directly at a host, one of these two must be configured:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:713
+msgid ""
+"Make sure that the lowest-numbered MX record in DNS points to the host's "
+"static IP address."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:714
+msgid "Make sure there is no MX entry in the DNS for the host."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:716
+msgid ""
+"Either of the above will allow mail to be received directly at the host."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:718
+msgid "Try this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:722
+#, no-wrap
+msgid "# hostname\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:725
+#: documentation/content/en/books/handbook/mail/_index.adoc:737
+#: documentation/content/en/books/handbook/mail/_index.adoc:755
+msgid "The output should be similar to the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:729
+#, no-wrap
+msgid "example.FreeBSD.org\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:734
+#: documentation/content/en/books/handbook/mail/_index.adoc:752
+#, no-wrap
+msgid "# host example.FreeBSD.org\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:741
+#, no-wrap
+msgid "example.FreeBSD.org has address 204.216.27.XX\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:746
+msgid ""
+"In this example, mail sent directly to mailto:yourlogin@example.FreeBSD."
+"org[yourlogin@example.FreeBSD.org] should work without problems, assuming a "
+"full-featured MTA is running correctly on `example.FreeBSD.org`. Note that "
+"man:dma[8] does not listen on port 25 for incoming connections and cannot be "
+"used in this scenario."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:748
+msgid "For this example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:760
+#, no-wrap
+msgid ""
+"example.FreeBSD.org has address 204.216.27.XX\n"
+"example.FreeBSD.org mail is handled (pri=10) by nevdull.FreeBSD.org\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:763
+msgid ""
+"All mail sent to `example.FreeBSD.org` will be collected on `nevdull` under "
+"the same username instead of being sent directly to your host."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:767
+msgid ""
+"The above information is handled by the DNS server. The DNS record that "
+"carries mail routing information is the link:https://en.wikipedia.org/wiki/"
+"MX_record[mail exchanger record (MX record)]. If no MX record exists, mail "
+"will be delivered directly to the host by way of its IP address."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:769
+msgid "The MX entry for `freefall.FreeBSD.org` at one time looked like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:776
+#, no-wrap
+msgid ""
+"freefall\t\tMX\t30\tmail.crl.net\n"
+"freefall\t\tMX\t40\tagora.rdrop.com\n"
+"freefall\t\tMX\t10\tfreefall.FreeBSD.org\n"
+"freefall\t\tMX\t20\twho.cdrom.com\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:781
+msgid ""
+"`freefall` had many MX entries. The lowest MX number is the host that "
+"receives mail directly, if available. If it is not accessible for some "
+"reason, the next lower-numbered host will accept messages temporarily, and "
+"pass it along when a lower-numbered host becomes available."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:784
+msgid ""
+"Alternate MX sites should have separate Internet connections in order to be "
+"most useful. Your ISP can provide this service."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mail/_index.adoc:786
+#, no-wrap
+msgid "Mail for a Domain"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:789
+msgid ""
+"When configuring an MTA for a network, any mail sent to hosts in its domain "
+"should be diverted to the MTA so that users can receive their mail on the "
+"master mail server."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:792
+msgid ""
+"To make life easiest, a user account with the same _username_ should exist "
+"on both the MTA and the system with the MUA. Use man:adduser[8] to create "
+"the user accounts."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:797
+msgid ""
+"In addition to adding local users to the host, there are alternative methods "
+"known as virtual users. Programs like link:https://www.cyrusimap.org/"
+"[Cyrus] and link:https://www.dovecot.org/[Dovecot] can be integrated into "
+"MTAs to handle users, mail storage, and also provide access via POP3 and "
+"IMAP."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:801
+msgid ""
+"The MTA must be the designated mail exchanger for each workstation on the "
+"network. This is done in the DNS configuration with an MX record:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:806
+#, no-wrap
+msgid ""
+"example.FreeBSD.org\tA\t204.216.27.XX\t\t; Workstation\n"
+"\t\t\tMX\t10 nevdull.FreeBSD.org\t; Mailhost\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:810
+msgid ""
+"This will redirect mail for the workstation to the MTA no matter where the A "
+"record points. The mail is sent to the MX host."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:813
+msgid ""
+"This must be configured on a DNS server. If the network does not run its "
+"own DNS server, talk to the ISP or DNS provider."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:815
+msgid "The following is an example of virtual email hosting."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:817
+msgid ""
+"Consider a customer with the domain `customer1.org`, where all the mail for "
+"`customer1.org` should be sent to `mail.myhost.com`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:819
+msgid "The DNS entry should look like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:823
+#, no-wrap
+msgid "customer1.org\t\tMX\t10\tmail.myhost.com\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:827
+msgid ""
+"An `A` record is _not_ needed for `customer1.org` in order to only handle "
+"email for that domain. However, running `ping` against `customer1.org` will "
+"not work unless an `A` record exists for it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:830
+msgid ""
+"Tell the MTA which domains and/or hostnames it should accept mail for. "
+"Either of the following will work for Sendmail:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:832
+msgid ""
+"Add the hosts to [.filename]#/etc/mail/local-host-names# when using the "
+"`FEATURE(use_cw_file)`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:833
+msgid "Add a `Cwyour.host.com` line to [.filename]#/etc/sendmail.cf#."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mail/_index.adoc:835
+#, no-wrap
+msgid "Setting Up to Send Only"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:839
+msgid ""
+"There are many instances where one may only want to send mail through a "
+"relay. Some examples are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:841
+msgid ""
+"The computer is a desktop machine that needs to use programs such as man:"
+"mail[1], using the ISP's mail relay."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:842
+msgid ""
+"The computer is a server that does not handle mail locally, but needs to "
+"pass off all mail to a relay for processing."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:845
+msgid ""
+"While any MTA is capable of filling this particular niche, it can be "
+"difficult to properly configure a full-featured MTA just to handle "
+"offloading mail. Programs such as Sendmail and Postfix are overkill for "
+"this use."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:847
+msgid ""
+"Additionally, a typical Internet access service agreement may forbid one "
+"from running a \"mail server\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:850
+msgid ""
+"The easiest way to fulfill those needs is to use the man:dma[8] MTA included "
+"in the <<configuring-dragonfly-mail-agent, base system>>. For systems up to "
+"13.2, need be to installed from ports."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:852
+msgid ""
+"In addition to man:dma[8], third-party software can be used to achieve the "
+"same, like package:mail/ssmtp[]."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:857
+#, no-wrap
+msgid ""
+"# cd /usr/ports/mail/ssmtp\n"
+"# make install replace clean\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:860
+msgid ""
+"Once installed, package:mail/ssmtp[] can be configured with [.filename]#/usr/"
+"local/etc/ssmtp/ssmtp.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:867
+#, no-wrap
+msgid ""
+"root=yourrealemail@example.com\n"
+"mailhub=mail.example.com\n"
+"rewriteDomain=example.com\n"
+"hostname=_HOSTNAME_\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:872
+msgid ""
+"Use the real email address for `root`. Enter the ISP's outgoing mail relay "
+"in place of `mail.example.com`. Some ISPs call this the \"outgoing mail "
+"server\" or \"SMTP server\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:875
+msgid ""
+"Make sure to disable Sendmail, including the outgoing mail service. See "
+"<<mail-disable-sendmail>> for details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:877
+msgid ""
+"package:mail/ssmtp[] has some other options available. Refer to the examples "
+"in [.filename]#/usr/local/etc/ssmtp# or the manual page of ssmtp for more "
+"information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:879
+msgid ""
+"Setting up ssmtp in this manner allows any software on the computer that "
+"needs to send mail to function properly, while not violating the ISP's usage "
+"policy or allowing the computer to be hijacked for spamming."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mail/_index.adoc:881
+#, no-wrap
+msgid "SMTP Authentication in Sendmail"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:885
+msgid ""
+"Configuring SMTP authentication on the MTA provides a number of benefits. "
+"SMTP authentication adds a layer of security to Sendmail, and provides "
+"mobile users who switch hosts the ability to use the same MTA without the "
+"need to reconfigure their mail client's settings each time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:889
+msgid ""
+"Install package:security/cyrus-sasl2[] from the Ports Collection. This port "
+"supports a number of compile-time options. For the SMTP authentication "
+"method demonstrated in this example, make sure that `LOGIN` is not disabled."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:891
+msgid ""
+"After installing package:security/cyrus-sasl2[], edit [.filename]#/usr/local/"
+"lib/sasl2/Sendmail.conf#, or create it if it does not exist, and add the "
+"following line:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:895
+#, no-wrap
+msgid "pwcheck_method: saslauthd\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:898
+msgid ""
+"Next, install package:security/cyrus-sasl2-saslauthd[] and add execute the "
+"following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:902
+#, no-wrap
+msgid "# sysrc saslauthd_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:905
+msgid "Finally, start the saslauthd daemon:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:909
+#, no-wrap
+msgid "# service saslauthd start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:913
+msgid ""
+"This daemon serves as a broker for Sendmail to authenticate against the "
+"FreeBSD man:passwd[5] database. This saves the trouble of creating a new "
+"set of usernames and passwords for each user that needs to use SMTP "
+"authentication, and keeps the login and mail password the same."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:915
+msgid "Next, edit [.filename]#/etc/make.conf# and add the following lines:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:920
+#, no-wrap
+msgid ""
+"SENDMAIL_CFLAGS=-I/usr/local/include/sasl -DSASL\n"
+"SENDMAIL_LDADD=/usr/local/lib/libsasl2.so\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:924
+msgid ""
+"These lines provide Sendmail the proper configuration options for linking to "
+"package:cyrus-sasl2[] at compile time. Make sure that package:cyrus-sasl2[] "
+"has been installed before recompiling Sendmail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:926
+msgid "Recompile Sendmail by executing the following commands:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:935
+#, no-wrap
+msgid ""
+"# cd /usr/src/lib/libsmutil\n"
+"# make cleandir && make obj && make\n"
+"# cd /usr/src/lib/libsm\n"
+"# make cleandir && make obj && make\n"
+"# cd /usr/src/usr.sbin/sendmail\n"
+"# make cleandir && make obj && make && make install\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:938
+msgid ""
+"This compile should not have any problems if [.filename]#/usr/src# has not "
+"changed extensively and the shared libraries it needs are available."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:941
+msgid ""
+"After Sendmail has been compiled and reinstalled, edit [.filename]#/etc/mail/"
+"freebsd.mc# or the local [.filename]#.mc#. Many administrators choose to "
+"use the output from man:hostname[1] as the name of [.filename]#.mc# for "
+"uniqueness."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:943
+msgid "Add these lines:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mail/_index.adoc:949
+#, no-wrap
+msgid ""
+"dnl set SASL options\n"
+"TRUST_AUTH_MECH(`GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN')dnl\n"
+"define(`confAUTH_MECHANISMS', `GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN')dnl\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:953
+msgid ""
+"These options configure the different methods available to Sendmail for "
+"authenticating users. To use a method other than pwcheck, refer to the "
+"Sendmail documentation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:956
+msgid ""
+"Finally, run man:make[1] while in [.filename]#/etc/mail#. That will run the "
+"new [.filename]#.mc# and create a [.filename]#.cf# named either [."
+"filename]#freebsd.cf# or the name used for the local [.filename]#.mc#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:958
+msgid ""
+"Then, run `make install restart`, which will copy the file to [."
+"filename]#sendmail.cf#, and properly restart Sendmail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:960
+msgid ""
+"For more information about this process, refer to [.filename]#/etc/mail/"
+"Makefile#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:963
+msgid ""
+"To test the configuration, use a MUA to send a test message. For further "
+"investigation, set the `LogLevel` of Sendmail to `13` and watch [.filename]#/"
+"var/log/maillog# for any errors."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mail/_index.adoc:964
+msgid ""
+"For more information, refer to http://www.sendmail.org/~ca/email/auth."
+"html[SMTP authentication]."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/mirrors/_index.adoc b/documentation/content/en/books/handbook/mirrors/_index.adoc
index d144111c60..2fc1e4a730 100644
--- a/documentation/content/en/books/handbook/mirrors/_index.adoc
+++ b/documentation/content/en/books/handbook/mirrors/_index.adoc
@@ -6,8 +6,8 @@ next: books/handbook/bibliography
description: "How to get FreeBSD: CD and DVD sets, FTP sites and how to install and use Git"
tags: ["Obtaining", "CD", "DVD", "FTP", "Git"]
showBookMenu: true
-weight: 39
-path: "/books/handbook/"
+weight: 41
+path: "/books/handbook/mirrors/"
---
[appendix]
@@ -52,7 +52,7 @@ endif::[]
== Mirrors
The official mirrors of the FreeBSD project are made up of many machines operated by the project cluster administrators and behind GeoDNS to direct users to the closest available mirror.
-Current locations are Australia, Brazil, Japan (two sites), Malaysia, Netherlands, South Africa, Taiwan, United Kingdom, United States of America (California, New Jersey, and Washington).
+Current locations are Australia, Brazil, Germany, Japan (two sites), Malaysia, South Africa, Sweden, Taiwan, United Kingdom, United States of America (California, New Jersey, and Washington).
Official mirrors service:
@@ -60,6 +60,10 @@ Official mirrors service:
|===
| Service Name | Protocols | More information
+| **docs.FreeBSD.org**
+| link:https://docs.FreeBSD.org/[https]
+| FreeBSD Documentation Portal.
+
| **download.FreeBSD.org**
| link:https://download.FreeBSD.org/[https] link:ftp://download.FreeBSD.org/pub/FreeBSD/[ftp]
| Same content as `ftp.FreeBSD.org`, `ftp` is a legacy name; `download.FreeBSD.org` is recommended.
@@ -71,12 +75,18 @@ Official mirrors service:
| **pkg.FreeBSD.org**
| man:pkg[8] over `http` and `https`
| Official FreeBSD package repositories used by the man:pkg[8] program.
+
+| **vuxml.FreeBSD.org** / **www.VuXML.org**
+| link:https://www.vuxml.org/[https]
+| FreeBSD Project VuXML web page. `pkg audit` fetches the list of vulnerabilities from this service.
+
+| **www.FreeBSD.org**
+| link:https://www.FreeBSD.org/[https]
+| FreeBSD Website.
|===
All official mirrors support IPv4 and IPv6.
-The FreeBSD website (https://www.FreeBSD.org and https://docs.FreeBSD.org) are not hosted in the GeoDNS Infrastructure; there are ongoing studies of its implementation.
-
http://ftp-archive.FreeBSD.org is not in the GeoDNS Infrastructure, hosted in only one location (US).
The project is looking for new locations; those willing to sponsor, please reach out to the Cluster Administrators team for more information.
@@ -183,6 +193,14 @@ Mirror list maintained by the community and other companies:
| ftp6.jp.FreeBSD.org
| link:http://ftp6.jp.FreeBSD.org/pub/FreeBSD[http] link:http://ftp6.jp.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp6.jp.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp6.jp.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp6.jp.FreeBSD.org[rsync] link:rsync://ftp6.jp.FreeBSD.org[rsync_v6]
+| Kazakhstan icon:envelope[link=mailto:support@ps.kz, title="mirror contact"]
+| mirror.ps.kz
+| http://mirror.ps.kz/freebsd[http] link:ftp://mirror.ps.kz/freebsd[ftp]
+
+|
+| mirror.neolabs.kz
+| link:http://mirror.neolabs.kz/freebsd[http] link:ftp://mirror.neolabs.kz/freebsd[ftp]
+
| Korea icon:envelope[link=mailto:{mirrors-korea-email}, title="mirror contact"]
| ftp.kr.FreeBSD.org
| link:http://ftp.kr.FreeBSD.org/pub/FreeBSD[http] link:https://ftp.kr.FreeBSD.org/pub/FreeBSD[https] link:ftp://ftp.kr.FreeBSD.org/pub/FreeBSD[ftp] link:rsync://ftp.kr.FreeBSD.org[rsync]
@@ -193,7 +211,7 @@ Mirror list maintained by the community and other companies:
| Latvia icon:envelope[link=mailto:{mirrors-latvia-email}, title="mirror contact"]
| ftp.lv.FreeBSD.org
-| link:http://ftp.lv.FreeBSD.org/pub/FreeBSD[http] link:ftp://ftp.lv.FreeBSD.org/pub/FreeBSD[ftp]
+| link:http://ftp.lv.FreeBSD.org/freebsd[http] link:ftp://ftp.lv.FreeBSD.org/freebsd[ftp]
| Netherlands icon:envelope[link=mailto:{mirrors-netherlands-email}, title="mirror contact"]
| ftp.nl.FreeBSD.org
@@ -203,6 +221,10 @@ Mirror list maintained by the community and other companies:
| ftp2.nl.FreeBSD.org
| link:http://ftp2.nl.FreeBSD.org/pub/FreeBSD[http] link:ftp://ftp2.nl.FreeBSD.org/pub/FreeBSD[ftp] link:rsync://ftp2.nl.FreeBSD.org[rsync]
+|
+| mirror.nl.altushost.com
+| link:https://mirror.nl.altushost.com/FreeBSD[https]
+
| New Zealand icon:envelope[link=mailto:{mirrors-new-zealand-email}, title="mirror contact"]
| ftp.nz.FreeBSD.org
| link:http://ftp.nz.FreeBSD.org/pub/FreeBSD[http] link:ftp://ftp.nz.FreeBSD.org/pub/FreeBSD[ftp]
@@ -243,6 +265,10 @@ Mirror list maintained by the community and other companies:
| ftp.se.FreeBSD.org
| link:http://ftp.se.FreeBSD.org/pub/FreeBSD[http] link:http://ftp.se.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp.se.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp.se.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp.se.FreeBSD.org[rsync] link:rsync://ftp.se.FreeBSD.org[rsync_v6]
+|
+| mirror.se.altushost.com
+| link:https://mirror.se.altushost.com/FreeBSD[https]
+
| Taiwan icon:envelope[link=mailto:{mirrors-taiwan-email}, title="mirror contact"]
| ftp4.tw.FreeBSD.org
| link:https://ftp4.tw.FreeBSD.org/pub/FreeBSD[https] link:ftp://ftp4.tw.FreeBSD.org/pub/FreeBSD[ftp] link:rsync://ftp4.tw.FreeBSD.org[rsync]
@@ -290,7 +316,7 @@ As of April 2021, FreeBSD uses git as the only version control system for storin
[NOTE]
====
Git is generally a developer tool.
-Users may prefer to use `freebsd-update` (crossref:cutting-edge[updating-upgrading-freebsdupdate,“FreeBSD Update”]) to update the FreeBSD base system, and `portsnap` (crossref:ports[ports-using,“Using the Ports Collection”]) to update the FreeBSD Ports Collection.
+Users may prefer to use `freebsd-update` (crossref:cutting-edge[updating-upgrading-freebsdupdate,“FreeBSD Update”]) to update the FreeBSD base system, and `git` (crossref:ports[ports-using,“Using the Ports Collection”]) to update the FreeBSD Ports Collection.
====
This section demonstrates how to install Git on a FreeBSD system and use it to create a local copy of a FreeBSD source code repository.
@@ -374,7 +400,7 @@ For information about write access to repositories see the extref:{committers-gu
Those mirrors are not hosted in FreeBSD.org but still maintained by the project members.
Users and developers are welcome to pull or browse repositories on those mirrors.
-Pull requests for the `doc` GitHub repository are being accepted; otherwise, the project workflow with those mirrors is still under discussion.
+Pull requests for the `doc` and `src` GitHub repositories are being accepted; otherwise, the project workflow with those mirrors is still under discussion.
Codeberg::
- doc: https://codeberg.org/FreeBSD/freebsd-doc
@@ -417,7 +443,7 @@ These are also published as SSHFP records in DNS.
=== Introduction
As of December 2020, FreeBSD uses git as the primary version control system for storing all of FreeBSD's source code and documentation.
-Changes from the git repo on the `stable/11`, `stable/12` and related releng branches are exported to the subversion repository.
+Changes from the git repo on the `stable/11`, `stable/12` and related releng branches are exported to the Subversion repository.
This export will continue through the life of these branches.
From July 2012 to March 2021, FreeBSD used Subversion as the only version control system for storing all of FreeBSD's Ports Collection.
As of April 2021, FreeBSD uses git as the only version control system for storing all of FreeBSD's Ports Collection.
@@ -425,8 +451,8 @@ As of April 2021, FreeBSD uses git as the only version control system for storin
[NOTE]
====
Subversion is generally a developer tool.
-Users may prefer to use `freebsd-update` (crossref:cutting-edge[updating-upgrading-freebsdupdate,“FreeBSD Update”]) to update the FreeBSD base system, and `portsnap` (crossref:ports[ports-using,“Using the Ports Collection”]) to update the FreeBSD Ports Collection.
-After March 2021, subversion use is only for legacy branches (`stable/11` and `stable/12`).
+Users may prefer to use `freebsd-update` (crossref:cutting-edge[updating-upgrading-freebsdupdate,“FreeBSD Update”]) to update the FreeBSD base system, and `git` (crossref:ports[ports-using,“Using the Ports Collection”]) to update the FreeBSD Ports Collection.
+After March 2021, Subversion use is only for legacy branches (`stable/11` and `stable/12`).
====
This section demonstrates how to install Subversion on a FreeBSD system and use it to create a local copy of a FreeBSD repository. Additional information on the use of Subversion is included.
@@ -545,10 +571,10 @@ HTTPS is the preferred protocol, but the [.filename]#security/ca_root_nss# packa
For other information about using Subversion, please see the "Subversion Book", titled http://svnbook.red-bean.com/[Version Control with Subversion], or the http://subversion.apache.org/docs/[Subversion Documentation].
-[[mirrors-cdrom]]
-== CD and DVD Sets
+[[mirrors-disc]]
+== Disc Copies
-FreeBSD CD and DVD sets are available from several online retailers:
+FreeBSD disc copies are available from several online retailers:
* FreeBSD Mall, Inc. +
1164 Claremont Dr +
@@ -558,10 +584,10 @@ USA +
Phone: +1 925 240-6652 +
Fax: +1 925 674-0821 +
Email: info@freebsdmall.com +
-WWW: https://www.freebsdmall.com
+Website: https://www.freebsdmall.com
* Getlinux +
-WWW: https://www.getlinux.fr/
+Website: https://www.getlinux.fr/
* Dr. Hinner EDV +
Schäftlarnstr. 10 // 4. Stock +
@@ -569,4 +595,4 @@ D-81371 München +
Germany +
Phone: +49 171 417 544 6 +
Email: infow@hinner.de +
-WWW: http://www.hinner.de/linux/freebsd.html
+Website: http://www.hinner.de/linux/freebsd.html
diff --git a/documentation/content/en/books/handbook/mirrors/_index.po b/documentation/content/en/books/handbook/mirrors/_index.po
new file mode 100644
index 0000000000..ea13a9e96b
--- /dev/null
+++ b/documentation/content/en/books/handbook/mirrors/_index.po
@@ -0,0 +1,1738 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:1
+#, no-wrap
+msgid "How to get FreeBSD: CD and DVD sets, FTP sites and how to install and use Git"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:1
+#, no-wrap
+msgid "Part V. Appendices"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:1
+#, no-wrap
+msgid "Appendix A. Obtaining FreeBSD"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:14
+#, no-wrap
+msgid "Obtaining FreeBSD"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:52
+#, no-wrap
+msgid "Mirrors"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:56
+msgid ""
+"The official mirrors of the FreeBSD project are made up of many machines "
+"operated by the project cluster administrators and behind GeoDNS to direct "
+"users to the closest available mirror. Current locations are Australia, "
+"Brazil, Germany, Japan (two sites), Malaysia, South Africa, Sweden, Taiwan, "
+"United Kingdom, United States of America (California, New Jersey, and "
+"Washington)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:58
+msgid "Official mirrors service:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:61
+#, no-wrap
+msgid "Service Name"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:61
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:100
+#, no-wrap
+msgid "Protocols"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:63
+#, no-wrap
+msgid "More information"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:64
+#, no-wrap
+msgid "**docs.FreeBSD.org**"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:65
+#, no-wrap
+msgid "link:https://docs.FreeBSD.org/[https]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:67
+#, no-wrap
+msgid "FreeBSD Documentation Portal."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:68
+#, no-wrap
+msgid "**download.FreeBSD.org**"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:69
+#, no-wrap
+msgid "link:https://download.FreeBSD.org/[https] link:ftp://download.FreeBSD.org/pub/FreeBSD/[ftp]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:71
+#, no-wrap
+msgid "Same content as `ftp.FreeBSD.org`, `ftp` is a legacy name; `download.FreeBSD.org` is recommended."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:72
+#, no-wrap
+msgid "**git.FreeBSD.org**"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:73
+#, no-wrap
+msgid "git over `https` and `ssh`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:75
+#, no-wrap
+msgid "More details on link:https://docs.freebsd.org/en/books/handbook/mirrors/#git[using git] section."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:76
+#, no-wrap
+msgid "**pkg.FreeBSD.org**"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:77
+#, no-wrap
+msgid "man:pkg[8] over `http` and `https`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:79
+#, no-wrap
+msgid "Official FreeBSD package repositories used by the man:pkg[8] program."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:80
+#, no-wrap
+msgid "**vuxml.FreeBSD.org** / **www.VuXML.org**"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:81
+#, no-wrap
+msgid "link:https://www.vuxml.org/[https]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:83
+#, no-wrap
+msgid "FreeBSD Project VuXML web page. `pkg audit` fetches the list of vulnerabilities from this service."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:84
+#, no-wrap
+msgid "**www.FreeBSD.org**"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:85
+#, no-wrap
+msgid "link:https://www.FreeBSD.org/[https]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:86
+#, no-wrap
+msgid "FreeBSD Website."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:89
+msgid "All official mirrors support IPv4 and IPv6."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:91
+msgid ""
+"http://ftp-archive.FreeBSD.org is not in the GeoDNS Infrastructure, hosted "
+"in only one location (US)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:93
+msgid ""
+"The project is looking for new locations; those willing to sponsor, please "
+"reach out to the Cluster Administrators team for more information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:95
+msgid "Mirror list maintained by the community and other companies:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:98
+#, no-wrap
+msgid "Country"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:98
+#, no-wrap
+msgid "Hostname"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:101
+#, no-wrap
+msgid "Australia icon:envelope[link=mailto:{mirrors-australia-email}, title=\"mirror contact\"]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:102
+#, no-wrap
+msgid "ftp.au.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:104
+#, no-wrap
+msgid "link:http://ftp.au.FreeBSD.org/pub/FreeBSD[http] link:http://ftp.au.FreeBSD.org/pub/FreeBSD[http_v6] link:rsync://ftp.au.FreeBSD.org[rsync] link:rsync://ftp.au.FreeBSD.org[rsync_v6]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:106
+#, no-wrap
+msgid "ftp3.au.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:108
+#, no-wrap
+msgid "link:http://ftp3.au.FreeBSD.org/pub/FreeBSD[http] link:ftp://ftp3.au.FreeBSD.org/pub/FreeBSD[ftp] link:rsync://ftp3.au.FreeBSD.org[rsync]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:109
+#, no-wrap
+msgid "Austria icon:envelope[link=mailto:{mirrors-austria-email}, title=\"mirror contact\"]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:110
+#, no-wrap
+msgid "ftp.at.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:112
+#, no-wrap
+msgid "link:http://ftp.at.FreeBSD.org/pub/FreeBSD/[http] link:http://ftp.at.FreeBSD.org/pub/FreeBSD/[http_v6] link:ftp://ftp.at.FreeBSD.org/pub/FreeBSD/[ftp] link:ftp://ftp.at.FreeBSD.org/pub/FreeBSD/[ftp_v6] link:rsync://ftp.at.FreeBSD.org/pub/FreeBSD/[rsync] link:rsync://ftp.at.FreeBSD.org/pub/FreeBSD/[rsync_v6]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:113
+#, no-wrap
+msgid "Brazil icon:envelope[link=mailto:{mirrors-brazil-email}, title=\"mirror contact\"]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:114
+#, no-wrap
+msgid "ftp2.br.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:116
+#, no-wrap
+msgid "link:http://ftp2.br.FreeBSD.org/FreeBSD[http] link:rsync://ftp2.br.FreeBSD.org[rsync] link:rsync://ftp2.br.FreeBSD.org[rsync_v6]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:118
+#, no-wrap
+msgid "ftp3.br.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:120
+#, no-wrap
+msgid "link:http://ftp3.br.FreeBSD.org/pub/FreeBSD[http] link:ftp://ftp3.br.FreeBSD.org/pub/FreeBSD[ftp] link:rsync://ftp3.br.FreeBSD.org[rsync]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:121
+#, no-wrap
+msgid "Bulgaria icon:envelope[link=mailto:{mirrors-bulgaria-email}, title=\"mirror contact\"]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:122
+#, no-wrap
+msgid "ftp.bg.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:124
+#, no-wrap
+msgid "link:ftp://ftp.bg.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp.bg.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp.bg.FreeBSD.org[rsync] link:rsync://ftp.bg.FreeBSD.org[rsync_v6]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:125
+#, no-wrap
+msgid "Czech Republic icon:envelope[link=mailto:{mirrors-czech-email}, title=\"mirror contact\"]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:126
+#, no-wrap
+msgid "ftp.cz.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:128
+#, no-wrap
+msgid "link:http://ftp.cz.FreeBSD.org/pub/FreeBSD[http] link:http://ftp.cz.FreeBSD.org/pub/FreeBSD[http_v6] link:rsync://ftp.cz.FreeBSD.org[rsync] link:rsync://ftp.cz.FreeBSD.org[rsync_v6]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:129
+#, no-wrap
+msgid "Denmark icon:envelope[link=mailto:{mirrors-denmark-email}, title=\"mirror contact\"]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:130
+#, no-wrap
+msgid "ftp.dk.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:132
+#, no-wrap
+msgid "link:http://ftp.dk.FreeBSD.org/FreeBSD/[http] link:http://ftp.dk.FreeBSD.org/FreeBSD/[http_v6] link:ftp://ftp.dk.FreeBSD.org/FreeBSD/[ftp] link:ftp://ftp.dk.FreeBSD.org/FreeBSD/[ftp_v6] link:rsync://ftp.dk.FreeBSD.org/FreeBSD/[rsync] link:rsync://ftp.dk.FreeBSD.org/FreeBSD/[rsync_v6]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:133
+#, no-wrap
+msgid "Finland icon:envelope[link=mailto:{mirrors-finland-email}, title=\"mirror contact\"]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:134
+#, no-wrap
+msgid "ftp.fi.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:136
+#, no-wrap
+msgid "link:ftp://ftp.fi.FreeBSD.org/pub/FreeBSD[ftp]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:137
+#, no-wrap
+msgid "France icon:envelope[link=mailto:{mirrors-france-email}, title=\"mirror contact\"]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:138
+#, no-wrap
+msgid "ftp.fr.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:140
+#, no-wrap
+msgid "link:http://ftp.fr.FreeBSD.org/pub/FreeBSD[http] link:http://ftp.fr.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp.fr.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp.fr.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp.fr.FreeBSD.org[rsync] link:rsync://ftp.fr.FreeBSD.org[rsync_v6]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:142
+#, no-wrap
+msgid "ftp3.fr.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:144
+#, no-wrap
+msgid "link:ftp://ftp3.fr.FreeBSD.org/pub/FreeBSD[ftp]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:146
+#, no-wrap
+msgid "ftp6.fr.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:148
+#, no-wrap
+msgid "link:http://ftp6.fr.FreeBSD.org/pub/FreeBSD[http] link:ftp://ftp6.fr.FreeBSD.org/pub/FreeBSD[ftp] link:rsync://ftp6.fr.FreeBSD.org[rsync]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:149
+#, no-wrap
+msgid "Germany icon:envelope[link=mailto:{mirrors-germany-email}, title=\"mirror contact\"]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:150
+#, no-wrap
+msgid "ftp.de.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:152
+#, no-wrap
+msgid "link:ftp://ftp.de.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp.de.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp.de.FreeBSD.org[rsync] link:rsync://ftp.de.FreeBSD.org[rsync_v6]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:154
+#, no-wrap
+msgid "ftp1.de.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:156
+#, no-wrap
+msgid "link:http://ftp1.de.FreeBSD.org/pub/FreeBSD[http] link:http://ftp1.de.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp1.de.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp1.de.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp1.de.FreeBSD.org[rsync] link:rsync://ftp1.de.FreeBSD.org[rsync_v6]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:158
+#, no-wrap
+msgid "ftp2.de.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:160
+#, no-wrap
+msgid "link:http://ftp2.de.FreeBSD.org/pub/FreeBSD[http] link:http://ftp2.de.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp2.de.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp2.de.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp2.de.FreeBSD.org[rsync] link:rsync://ftp2.de.FreeBSD.org[rsync_v6]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:162
+#, no-wrap
+msgid "ftp5.de.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:164
+#, no-wrap
+msgid "link:ftp://ftp5.de.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp5.de.FreeBSD.org/pub/FreeBSD[ftp_v6]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:166
+#, no-wrap
+msgid "ftp7.de.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:168
+#, no-wrap
+msgid "link:http://ftp7.de.FreeBSD.org/pub/FreeBSD[http] link:http://ftp7.de.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp7.de.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp7.de.FreeBSD.org/pub/FreeBSD[ftp_v6]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:169
+#, no-wrap
+msgid "Greece icon:envelope[link=mailto:{mirrors-greece-email}, title=\"mirror contact\"]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:170
+#, no-wrap
+msgid "ftp.gr.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:172
+#, no-wrap
+msgid "link:http://ftp.gr.FreeBSD.org/pub/FreeBSD[http] link:http://ftp.gr.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp.gr.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp.gr.FreeBSD.org/pub/FreeBSD[ftp_v6]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:174
+#, no-wrap
+msgid "ftp2.gr.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:176
+#, no-wrap
+msgid "link:http://ftp2.gr.FreeBSD.org/pub/FreeBSD[http] link:http://ftp2.gr.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp2.gr.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp2.gr.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp2.gr.FreeBSD.org[rsync]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:177
+#, no-wrap
+msgid "Japan icon:envelope[link=mailto:{mirrors-japan-email}, title=\"mirror contact\"]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:178
+#, no-wrap
+msgid "ftp.jp.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:180
+#, no-wrap
+msgid "link:http://ftp.jp.FreeBSD.org/pub/FreeBSD[http] link:http://ftp.jp.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp.jp.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp.jp.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp.jp.FreeBSD.org[rsync] link:rsync://ftp.jp.FreeBSD.org[rsync_v6]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:182
+#, no-wrap
+msgid "ftp2.jp.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:184
+#, no-wrap
+msgid "link:ftp://ftp2.jp.FreeBSD.org/pub/FreeBSD[ftp] link:rsync://ftp2.jp.FreeBSD.org[rsync] link:rsync://ftp2.jp.FreeBSD.org[rsync_v6]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:186
+#, no-wrap
+msgid "ftp3.jp.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:188
+#, no-wrap
+msgid "link:http://ftp3.jp.FreeBSD.org/pub/FreeBSD[http] link:rsync://ftp3.jp.FreeBSD.org[rsync]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:190
+#, no-wrap
+msgid "ftp4.jp.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:192
+#, no-wrap
+msgid "link:ftp://ftp4.jp.FreeBSD.org/pub/FreeBSD[ftp]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:194
+#, no-wrap
+msgid "ftp6.jp.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:196
+#, no-wrap
+msgid "link:http://ftp6.jp.FreeBSD.org/pub/FreeBSD[http] link:http://ftp6.jp.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp6.jp.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp6.jp.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp6.jp.FreeBSD.org[rsync] link:rsync://ftp6.jp.FreeBSD.org[rsync_v6]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:197
+#, no-wrap
+msgid "Kazakhstan icon:envelope[link=mailto:support@ps.kz, title=\"mirror contact\"]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:198
+#, no-wrap
+msgid "mirror.ps.kz"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:200
+#, no-wrap
+msgid "http://mirror.ps.kz/freebsd[http] link:ftp://mirror.ps.kz/freebsd[ftp]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:202
+#, no-wrap
+msgid "mirror.neolabs.kz"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:204
+#, no-wrap
+msgid "link:http://mirror.neolabs.kz/freebsd[http] link:ftp://mirror.neolabs.kz/freebsd[ftp]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:205
+#, no-wrap
+msgid "Korea icon:envelope[link=mailto:{mirrors-korea-email}, title=\"mirror contact\"]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:206
+#, no-wrap
+msgid "ftp.kr.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:208
+#, no-wrap
+msgid "link:http://ftp.kr.FreeBSD.org/pub/FreeBSD[http] link:https://ftp.kr.FreeBSD.org/pub/FreeBSD[https] link:ftp://ftp.kr.FreeBSD.org/pub/FreeBSD[ftp] link:rsync://ftp.kr.FreeBSD.org[rsync]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:210
+#, no-wrap
+msgid "ftp2.kr.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:212
+#, no-wrap
+msgid "link:rsync://ftp2.kr.FreeBSD.org[rsync]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:213
+#, no-wrap
+msgid "Latvia icon:envelope[link=mailto:{mirrors-latvia-email}, title=\"mirror contact\"]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:214
+#, no-wrap
+msgid "ftp.lv.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:216
+#, no-wrap
+msgid "link:http://ftp.lv.FreeBSD.org/freebsd[http] link:ftp://ftp.lv.FreeBSD.org/freebsd[ftp]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:217
+#, no-wrap
+msgid "Netherlands icon:envelope[link=mailto:{mirrors-netherlands-email}, title=\"mirror contact\"]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:218
+#, no-wrap
+msgid "ftp.nl.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:220
+#, no-wrap
+msgid "link:http://ftp.nl.FreeBSD.org/pub/FreeBSD[http] link:http://ftp.nl.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp.nl.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp.nl.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp.nl.FreeBSD.org[rsync] link:rsync://ftp.nl.FreeBSD.org[rsync_v6]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:222
+#, no-wrap
+msgid "ftp2.nl.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:224
+#, no-wrap
+msgid "link:http://ftp2.nl.FreeBSD.org/pub/FreeBSD[http] link:ftp://ftp2.nl.FreeBSD.org/pub/FreeBSD[ftp] link:rsync://ftp2.nl.FreeBSD.org[rsync]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:226
+#, no-wrap
+msgid "mirror.nl.altushost.com"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:228
+#, no-wrap
+msgid "link:https://mirror.nl.altushost.com/FreeBSD[https]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:229
+#, no-wrap
+msgid "New Zealand icon:envelope[link=mailto:{mirrors-new-zealand-email}, title=\"mirror contact\"]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:230
+#, no-wrap
+msgid "ftp.nz.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:232
+#, no-wrap
+msgid "link:http://ftp.nz.FreeBSD.org/pub/FreeBSD[http] link:ftp://ftp.nz.FreeBSD.org/pub/FreeBSD[ftp]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:233
+#, no-wrap
+msgid "Norway icon:envelope[link=mailto:{mirrors-norway-email}, title=\"mirror contact\"]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:234
+#, no-wrap
+msgid "ftp.no.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:236
+#, no-wrap
+msgid "link:ftp://ftp.no.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp.no.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp.no.FreeBSD.org[rsync] link:rsync://ftp.no.FreeBSD.org[rsync_v6]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:237
+#, no-wrap
+msgid "Poland icon:envelope[link=mailto:{mirrors-poland-email}, title=\"mirror contact\"]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:238
+#, no-wrap
+msgid "ftp.pl.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:240
+#, no-wrap
+msgid "link:http://ftp.pl.FreeBSD.org/pub/FreeBSD[http] link:http://ftp.pl.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp.pl.FreeBSD.org/pub/FreeBSD[ftp] link:rsync://ftp.pl.FreeBSD.org[rsync] link:rsync://ftp.pl.FreeBSD.org[rsync_v6]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:241
+#, no-wrap
+msgid "Russia icon:envelope[link=mailto:{mirrors-russia-email}, title=\"mirror contact\"]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:242
+#, no-wrap
+msgid "ftp.ru.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:244
+#, no-wrap
+msgid "link:http://ftp.ru.FreeBSD.org/pub/FreeBSD[http] link:http://ftp.ru.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp.ru.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp.ru.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp.ru.FreeBSD.org[rsync] link:rsync://ftp.ru.FreeBSD.org[rsync_v6]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:246
+#, no-wrap
+msgid "ftp2.ru.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:248
+#, no-wrap
+msgid "link:https://ftp2.ru.FreeBSD.org/pub/FreeBSD[https] link:ftp://ftp2.ru.FreeBSD.org/pub/FreeBSD[ftp] link:rsync://ftp2.ru.FreeBSD.org[rsync]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:249
+#, no-wrap
+msgid "Slovenia icon:envelope[link=mailto:{mirrors-slovenia-email}, title=\"mirror contact\"]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:250
+#, no-wrap
+msgid "ftp.si.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:252
+#, no-wrap
+msgid "link:http://ftp.si.FreeBSD.org/pub/FreeBSD[http] link:http://ftp.si.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp.si.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp.si.FreeBSD.org/pub/FreeBSD[ftp_v6]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:253
+#, no-wrap
+msgid "South Africa icon:envelope[link=mailto:{mirrors-south-africa-email}, title=\"mirror contact\"]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:254
+#, no-wrap
+msgid "ftp.za.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:256
+#, no-wrap
+msgid "link:https://ftp.za.FreeBSD.org/pub/FreeBSD[https] link:https://ftp.za.FreeBSD.org/pub/FreeBSD[https_v6] link:rsync://ftp.za.FreeBSD.org[rsync] link:rsync://ftp.za.FreeBSD.org[rsync_v6]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:258
+#, no-wrap
+msgid "ftp2.za.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:260
+#, no-wrap
+msgid "link:http://ftp2.za.FreeBSD.org/pub/FreeBSD[http] link:http://ftp2.za.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp2.za.FreeBSD.org/pub/FreeBSD[ftp_v6]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:262
+#, no-wrap
+msgid "ftp4.za.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:264
+#, no-wrap
+msgid "link:http://ftp4.za.FreeBSD.org/pub/FreeBSD[http] link:ftp://ftp4.za.FreeBSD.org/pub/FreeBSD[ftp] link:rsync://ftp4.za.FreeBSD.org[rsync]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:265
+#, no-wrap
+msgid "Sweden icon:envelope[link=mailto:{mirrors-sweden-email}, title=\"mirror contact\"]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:266
+#, no-wrap
+msgid "ftp.se.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:268
+#, no-wrap
+msgid "link:http://ftp.se.FreeBSD.org/pub/FreeBSD[http] link:http://ftp.se.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp.se.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp.se.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp.se.FreeBSD.org[rsync] link:rsync://ftp.se.FreeBSD.org[rsync_v6]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:270
+#, no-wrap
+msgid "mirror.se.altushost.com"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:272
+#, no-wrap
+msgid "link:https://mirror.se.altushost.com/FreeBSD[https]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:273
+#, no-wrap
+msgid "Taiwan icon:envelope[link=mailto:{mirrors-taiwan-email}, title=\"mirror contact\"]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:274
+#, no-wrap
+msgid "ftp4.tw.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:276
+#, no-wrap
+msgid "link:https://ftp4.tw.FreeBSD.org/pub/FreeBSD[https] link:ftp://ftp4.tw.FreeBSD.org/pub/FreeBSD[ftp] link:rsync://ftp4.tw.FreeBSD.org[rsync]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:278
+#, no-wrap
+msgid "ftp5.tw.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:280
+#, no-wrap
+msgid "link:http://ftp5.tw.FreeBSD.org/pub/FreeBSD[http] link:ftp://ftp5.tw.FreeBSD.org/pub/FreeBSD[ftp]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:281
+#, no-wrap
+msgid "Ukraine icon:envelope[link=mailto:{mirrors-ukraine-email}, title=\"mirror contact\"]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:282
+#, no-wrap
+msgid "ftp.ua.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:284
+#, no-wrap
+msgid "link:http://ftp.ua.FreeBSD.org/pub/FreeBSD[http] link:ftp://ftp.ua.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp.ua.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp.ua.FreeBSD.org[rsync] link:rsync://ftp.ua.FreeBSD.org[rsync_v6]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:285
+#, no-wrap
+msgid "United Kingdom icon:envelope[link=mailto:{mirrors-uk-email}, title=\"mirror contact\"]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:286
+#, no-wrap
+msgid "ftp.uk.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:288
+#, no-wrap
+msgid "link:http://ftp.uk.FreeBSD.org/pub/FreeBSD[http] link:http://ftp.uk.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp.uk.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp.uk.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp.uk.FreeBSD.org[rsync] link:rsync://ftp.uk.FreeBSD.org[rsync_v6]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:290
+#, no-wrap
+msgid "ftp2.uk.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:292
+#, no-wrap
+msgid "link:http://ftp2.uk.FreeBSD.org/pub/FreeBSD[http] link:http://ftp2.uk.FreeBSD.org/pub/FreeBSD[http_v6] link:https://ftp2.uk.FreeBSD.org/pub/FreeBSD[https] link:https://ftp2.uk.FreeBSD.org/pub/FreeBSD[https_v6] link:ftp://ftp2.uk.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp2.uk.FreeBSD.org/pub/FreeBSD[ftp_v6]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:293
+#, no-wrap
+msgid "United States of America icon:envelope[link=mailto:{mirrors-us-email}, title=\"mirror contact\"]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:294
+#, no-wrap
+msgid "ftp11.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:296
+#, no-wrap
+msgid "link:http://ftp11.FreeBSD.org/pub/FreeBSD[http] link:http://ftp11.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp11.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp11.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp11.FreeBSD.org[rsync] link:rsync://ftp11.FreeBSD.org[rsync_v6]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:298
+#, no-wrap
+msgid "ftp14.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:300
+#, no-wrap
+msgid "link:ftp://ftp14.FreeBSD.org/pub/FreeBSD[ftp] link:rsync://ftp14.FreeBSD.org[rsync] (Former official tier 1)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:302
+#, no-wrap
+msgid "ftp5.FreeBSD.org"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:303
+#, no-wrap
+msgid "link:http://ftp5.FreeBSD.org/pub/FreeBSD[http] link:http://ftp5.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp5.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp5.FreeBSD.org/pub/FreeBSD[ftp_v6]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:306
+msgid ""
+"The current list of protocols supported by the community mirrors was last "
+"updated on 2022-01-31, and it's not guaranteed."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:308
+#, no-wrap
+msgid "Using Git"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:311
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:443
+#, no-wrap
+msgid "Introduction"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:315
+msgid ""
+"As of December 2020, FreeBSD uses git as the primary version control system "
+"for storing all of FreeBSD's base source code and documentation. As of "
+"April 2021, FreeBSD uses git as the only version control system for storing "
+"all of FreeBSD's Ports Collection."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:320
+msgid ""
+"Git is generally a developer tool. Users may prefer to use `freebsd-update` "
+"(crossref:cutting-edge[updating-upgrading-freebsdupdate,“FreeBSD Update”]) "
+"to update the FreeBSD base system, and `git` (crossref:ports[ports-"
+"using,“Using the Ports Collection”]) to update the FreeBSD Ports Collection."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:323
+msgid ""
+"This section demonstrates how to install Git on a FreeBSD system and use it "
+"to create a local copy of a FreeBSD source code repository."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:325
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:469
+#, no-wrap
+msgid "Installation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:328
+msgid "Git can be installed from the Ports Collection, or as a package:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:332
+#, no-wrap
+msgid "# pkg install git\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:335
+#, no-wrap
+msgid "Running Git"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:339
+msgid ""
+"To fetch a clean copy of the sources into a local directory, use `git "
+"clone`. This directory of files is called the _working tree_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:344
+msgid ""
+"Git uses URLs to designate a repository. There are three different "
+"repositories, `src` for the FreeBSD system source code, `doc` for "
+"documentation, and `ports` for the FreeBSD Ports Collection. All three are "
+"reachable over two different protocols: HTTPS and SSH. For example, the URL "
+"`https://git.FreeBSD.org/src.git` specifies the main branch of the `src` "
+"repository, using the `https` protocol."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:346
+#, no-wrap
+msgid "FreeBSD Git Repository URL Table"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:349
+#, no-wrap
+msgid "Item"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:350
+#, no-wrap
+msgid "Git URL"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:350
+#, no-wrap
+msgid "Read-only src repo via HTTPS"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:351
+#, no-wrap
+msgid "`https://git.FreeBSD.org/src.git`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:351
+#, no-wrap
+msgid "Read-only src repo via anon-ssh"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:352
+#, no-wrap
+msgid "`ssh://anongit@git.FreeBSD.org/src.git`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:352
+#, no-wrap
+msgid "Read-only doc repo via HTTPS"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:353
+#, no-wrap
+msgid "`https://git.FreeBSD.org/doc.git`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:353
+#, no-wrap
+msgid "Read-only doc repo via anon-ssh"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:354
+#, no-wrap
+msgid "`ssh://anongit@git.FreeBSD.org/doc.git`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:354
+#, no-wrap
+msgid "Read-only ports repo via HTTPS"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:355
+#, no-wrap
+msgid "`https://git.FreeBSD.org/ports.git`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:355
+#, no-wrap
+msgid "Read-only ports repo via anon-ssh"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:356
+#, no-wrap
+msgid "`ssh://anongit@git.FreeBSD.org/ports.git`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:359
+msgid ""
+"External mirrors maintained by project members are also available; please "
+"refer to the <<external-mirrors>> section."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:361
+msgid "To clone a copy of the FreeBSD system source code repository:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:365
+#, no-wrap
+msgid "# git clone -o freebsd https://git.FreeBSD.org/src.git /usr/src\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:370
+msgid ""
+"The `-o freebsd` option specifies the origin; by convention in the FreeBSD "
+"documentation, the origin is assumed to be `freebsd`. Because the initial "
+"checkout must download the full branch of the remote repository, it can take "
+"a while. Please be patient."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:373
+msgid ""
+"Initially, the working tree contains source code for the `main` branch, "
+"which corresponds to CURRENT. To switch to 13-STABLE instead:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:377
+#, no-wrap
+msgid ""
+"# cd /usr/src\n"
+"# git checkout stable/13\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:381
+msgid ""
+"The working tree can be updated with `git pull`. To update [.filename]#/usr/"
+"src# created in the example above, use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:386
+#, no-wrap
+msgid ""
+"# cd /usr/src\n"
+"# git pull --rebase\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:389
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:544
+msgid ""
+"The update is much quicker than a checkout, only transferring files that "
+"have changed."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:390
+#, no-wrap
+msgid "Web-based repository browser"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:393
+msgid ""
+"The FreeBSD project uses cgit as the web-based repository browser: link:"
+"https://cgit.FreeBSD.org/[https://cgit.FreeBSD.org/]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:394
+#, no-wrap
+msgid "For Developers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:397
+msgid ""
+"For information about write access to repositories see the extref:"
+"{committers-guide}[Committer's Guide, git-mini-primer]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:399
+#, no-wrap
+msgid "External mirrors"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:404
+msgid ""
+"Those mirrors are not hosted in FreeBSD.org but still maintained by the "
+"project members. Users and developers are welcome to pull or browse "
+"repositories on those mirrors. Pull requests for the `doc` and `src` GitHub "
+"repositories are being accepted; otherwise, the project workflow with those "
+"mirrors is still under discussion."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:405
+#, no-wrap
+msgid "Codeberg"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:407
+msgid "doc: https://codeberg.org/FreeBSD/freebsd-doc"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:408
+msgid "ports: https://codeberg.org/FreeBSD/freebsd-ports"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:409
+msgid "src: https://codeberg.org/FreeBSD/freebsd-src"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:410
+#, no-wrap
+msgid "GitHub"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:412
+msgid "doc: https://github.com/freebsd/freebsd-doc"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:413
+msgid "ports: https://github.com/freebsd/freebsd-ports"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:414
+msgid "src: https://github.com/freebsd/freebsd-src"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:415
+#, no-wrap
+msgid "GitLab"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:417
+msgid "doc: https://gitlab.com/FreeBSD/freebsd-doc"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:418
+msgid "ports: https://gitlab.com/FreeBSD/freebsd-ports"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:419
+msgid "src: https://gitlab.com/FreeBSD/freebsd-src"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:420
+#, no-wrap
+msgid "Mailing lists"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:424
+msgid ""
+"The main mailing list for general usage and questions about git in the "
+"FreeBSD project is https://lists.freebsd.org/subscription/freebsd-"
+"git[freebsd-git]. For more details, including commit messages lists, see "
+"the crossref:handbook/eresources[eresources-mail, Mailing Lists] chapter."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:425
+#, no-wrap
+msgid "SSH host keys"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:428
+msgid "gitrepo.FreeBSD.org host key fingerprints:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:429
+msgid ""
+"ECDSA key fingerprint is `SHA256:seWO5D27ySURcx4bknTNKlC1mgai0whP443PAKEvvZA`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:430
+msgid ""
+"ED25519 key fingerprint is `SHA256:"
+"lNR6i4BEOaaUhmDHBA1WJsO7H3KtvjE2r5q4sOxtIWo`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:431
+msgid ""
+"RSA key fingerprint is `SHA256:f453CUEFXEJAXlKeEHV+ajJfeEfx9MdKQUD7lIscnQI`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:433
+msgid "git.FreeBSD.org host key fingerprints:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:434
+msgid ""
+"ECDSA key fingerprint is `SHA256:/UlirUAsGiitupxmtsn7f9b7zCWd0vCs4Yo/tpVWP9w`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:435
+msgid ""
+"ED25519 key fingerprint is `SHA256:"
+"y1ljKrKMD3lDObRUG3xJ9gXwEIuqnh306tSyFd1tuZE`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:436
+msgid ""
+"RSA key fingerprint is `SHA256:jBe6FQGoH4HjvrIVM23dcnLZk9kmpdezR/CvQzm7rJM`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:438
+msgid "These are also published as SSHFP records in DNS."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:440
+#, no-wrap
+msgid "Using Subversion"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:450
+msgid ""
+"As of December 2020, FreeBSD uses git as the primary version control system "
+"for storing all of FreeBSD's source code and documentation. Changes from "
+"the git repo on the `stable/11`, `stable/12` and related releng branches are "
+"exported to the Subversion repository. This export will continue through "
+"the life of these branches. From July 2012 to March 2021, FreeBSD used "
+"Subversion as the only version control system for storing all of FreeBSD's "
+"Ports Collection. As of April 2021, FreeBSD uses git as the only version "
+"control system for storing all of FreeBSD's Ports Collection."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:456
+msgid ""
+"Subversion is generally a developer tool. Users may prefer to use `freebsd-"
+"update` (crossref:cutting-edge[updating-upgrading-freebsdupdate,“FreeBSD "
+"Update”]) to update the FreeBSD base system, and `git` (crossref:ports[ports-"
+"using,“Using the Ports Collection”]) to update the FreeBSD Ports "
+"Collection. After March 2021, Subversion use is only for legacy branches "
+"(`stable/11` and `stable/12`)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:459
+msgid ""
+"This section demonstrates how to install Subversion on a FreeBSD system and "
+"use it to create a local copy of a FreeBSD repository. Additional "
+"information on the use of Subversion is included."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:461
+#, no-wrap
+msgid "Svnlite"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:465
+msgid ""
+"A lightweight version of Subversion is already installed on FreeBSD as "
+"`svnlite`. The port or package version of Subversion is only needed if the "
+"Python or Perl API is needed, or if a later version of Subversion is desired."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:467
+msgid ""
+"The only difference from normal Subversion use is that the command name is "
+"`svnlite`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:472
+msgid ""
+"If `svnlite` is unavailable or the full version of Subversion is needed, "
+"then it must be installed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:474
+msgid "Subversion can be installed from the Ports Collection:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:479
+#, no-wrap
+msgid ""
+"# cd /usr/ports/devel/subversion\n"
+"# make install clean\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:482
+msgid "Subversion can also be installed as a package:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:486
+#, no-wrap
+msgid "# pkg install subversion\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:489
+#, no-wrap
+msgid "Running Subversion"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:493
+msgid ""
+"To fetch a clean copy of the sources into a local directory, use `svn`. The "
+"files in this directory are called a _local working copy_."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:498
+msgid ""
+"Move or delete an existing destination directory before using `checkout` for "
+"the first time. Checkout over an existing non-`svn` directory can cause "
+"conflicts between the existing files and those brought in from the "
+"repository."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:504
+msgid ""
+"Subversion uses URLs to designate a repository, taking the form of "
+"_protocol://hostname/path_. The first component of the path is the FreeBSD "
+"repository to access. There are three different repositories, `base` for "
+"the FreeBSD base system source code, `ports` for the Ports Collection, and "
+"`doc` for documentation. For example, the URL `https://svn.FreeBSD.org/base/"
+"head/` specifies the main branch of the src repository, using the `https` "
+"protocol."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:506
+msgid ""
+"A checkout from a given repository is performed with a command like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:510
+#, no-wrap
+msgid "# svn checkout https://svn.FreeBSD.org/repository/branch lwcdir\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:513
+msgid "where:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:515
+msgid ""
+"_repository_ is one of the Project repositories: `base`, `ports`, or `doc`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:516
+msgid ""
+"_branch_ depends on the repository used. `ports` and `doc` are mostly "
+"updated in the `head` branch, while `base` maintains the latest version of -"
+"CURRENT under `head` and the respective latest versions of the -STABLE "
+"branches under `stable/11` (11._x_) and `stable/12` (12._x_)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:517
+msgid ""
+"_lwcdir_ is the target directory where the contents of the specified branch "
+"should be placed. This is usually [.filename]#/usr/ports# for `ports`, [."
+"filename]#/usr/src# for `base`, and [.filename]#/usr/doc# for `doc`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:520
+msgid ""
+"This example checks out the Source Tree from the FreeBSD repository using "
+"the HTTPS protocol, placing the local working copy in [.filename]#/usr/"
+"src#. If [.filename]#/usr/src# is already present but was not created by "
+"`svn`, remember to rename or delete it before the checkout."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:524
+#, no-wrap
+msgid "# svn checkout https://svn.FreeBSD.org/base/head /usr/src\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:528
+msgid ""
+"Because the initial checkout must download the full branch of the remote "
+"repository, it can take a while. Please be patient."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:530
+msgid ""
+"After the initial checkout, the local working copy can be updated by running:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:534
+#, no-wrap
+msgid "# svn update lwcdir\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:537
+msgid "To update [.filename]#/usr/src# created in the example above, use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:541
+#, no-wrap
+msgid "# svn update /usr/src\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:548
+msgid ""
+"An alternate way of updating the local working copy after checkout is "
+"provided by the [.filename]#Makefile# in the [.filename]#/usr/ports#, [."
+"filename]#/usr/src#, and [.filename]#/usr/doc# directories. Set "
+"`SVN_UPDATE` and use the `update` target. For example, to update [."
+"filename]#/usr/src#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:553
+#, no-wrap
+msgid ""
+"# cd /usr/src\n"
+"# make update SVN_UPDATE=yes\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:556
+#, no-wrap
+msgid "Subversion Mirror Sites"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:559
+msgid "The FreeBSD Subversion repository is:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:563
+#, no-wrap
+msgid "svn.FreeBSD.org\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:567
+msgid ""
+"This is a publicly accessible mirror network that uses GeoDNS to select an "
+"appropriate back end server. To view the FreeBSD Subversion repositories "
+"through a browser, use https://svnweb.FreeBSD.org/[https://svnweb.FreeBSD."
+"org/]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:569
+msgid ""
+"HTTPS is the preferred protocol, but the [.filename]#security/ca_root_nss# "
+"package will need to be installed in order to automatically validate "
+"certificates."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:570
+#, no-wrap
+msgid "For More Information"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:573
+msgid ""
+"For other information about using Subversion, please see the \"Subversion "
+"Book\", titled http://svnbook.red-bean.com/[Version Control with "
+"Subversion], or the http://subversion.apache.org/docs/[Subversion "
+"Documentation]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:575
+#, no-wrap
+msgid "CD and DVD Sets"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:578
+msgid "FreeBSD CD and DVD sets are available from several online retailers:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:588
+#, no-wrap
+msgid ""
+"FreeBSD Mall, Inc.\n"
+"1164 Claremont Dr\n"
+"Brentwood, CA\n"
+"94513\n"
+"USA\n"
+"Phone: +1 925 240-6652\n"
+"Fax: +1 925 674-0821\n"
+"Email: info@freebsdmall.com\n"
+"Website: https://www.freebsdmall.com"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:591
+#, no-wrap
+msgid ""
+"Getlinux\n"
+"Website: https://www.getlinux.fr/"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/mirrors/_index.adoc:598
+#, no-wrap
+msgid ""
+"Dr. Hinner EDV\n"
+"Schäftlarnstr. 10 // 4. Stock\n"
+"D-81371 München\n"
+"Germany\n"
+"Phone: +49 171 417 544 6\n"
+"Email: infow@hinner.de\n"
+"Website: http://www.hinner.de/linux/freebsd.html"
+msgstr ""
diff --git a/documentation/content/en/books/handbook/multimedia/_index.adoc b/documentation/content/en/books/handbook/multimedia/_index.adoc
index 37d7669dc8..e144406a5e 100644
--- a/documentation/content/en/books/handbook/multimedia/_index.adoc
+++ b/documentation/content/en/books/handbook/multimedia/_index.adoc
@@ -1,13 +1,13 @@
---
-title: Chapter 7. Multimedia
+title: Chapter 9. Multimedia
part: Part II. Common Tasks
prev: books/handbook/desktop
next: books/handbook/kernelconfig
-description: FreeBSD supports a wide variety of sound cards, allowing users to enjoy high fidelity output from a FreeBSD system
-tags: ["multimedia", "sound card", "MP3", "MythTV", "scanner", "SANE"]
+description: The multimedia chapter provides an overview of multimedia support on FreeBSD
+tags: ["multimedia", "sound card", "Audio players", "scanner", "SANE", "Video players", "Conferencing and Meetings", "Setting Up the Webcam"]
showBookMenu: true
-weight: 10
-path: "/books/handbook/"
+weight: 12
+path: "/books/handbook/multimedia/"
---
[[multimedia]]
@@ -18,7 +18,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 7
+:sectnumoffset: 9
:partnums:
:source-highlighter: rouge
:experimental:
@@ -51,228 +51,196 @@ endif::[]
[[multimedia-synopsis]]
== Synopsis
-FreeBSD supports a wide variety of sound cards, allowing users to enjoy high fidelity output from a FreeBSD system.
-This includes the ability to record and play back audio in the MPEG Audio Layer 3 (`MP3`), Waveform Audio File (`WAV`), Ogg Vorbis, and other formats.
-The FreeBSD Ports Collection contains many applications for editing recorded audio, adding sound effects, and controlling attached MIDI devices.
-
-FreeBSD also supports the playback of video files and ``DVD``s.
-The FreeBSD Ports Collection contains applications to encode, convert, and playback various video media.
-
-This chapter describes how to configure sound cards, video playback, TV tuner cards, and scanners on FreeBSD.
-It also describes some of the applications which are available for using these devices.
-
-After reading this chapter, you will know how to:
-
-* Configure a sound card on FreeBSD.
-* Troubleshoot the sound setup.
-* Playback and encode MP3s and other audio.
-* Prepare a FreeBSD system for video playback.
-* Play ``DVD``s, [.filename]#.mpg#, and [.filename]#.avi# files.
-* Rip `CD` and `DVD` content into files.
-* Configure a TV card.
-* Install and setup MythTV on FreeBSD
-* Configure an image scanner.
-* Configure a Bluetooth headset.
-
-Before reading this chapter, you should:
-
-* Know how to install applications as described in crossref:ports[ports,Installing Applications: Packages and Ports].
+The multimedia chapter provides an overview of multimedia support on FreeBSD.
+Multimedia applications and technologies have become an integral part of modern computing, and FreeBSD provides robust and reliable support for a wide range of multimedia hardware and software.
+This chapter covers various multimedia components such as audio, video, and image processing.
+It also discusses various media formats and codecs, as well as tools and applications for multimedia creation and playback.
+Additionally, the chapter covers multimedia system configuration, troubleshooting, and optimization.
+Whether you are a multimedia enthusiast or a professional content creator, FreeBSD offers a robust platform for multimedia work.
+This chapter aims to help get the most out of FreeBSD's multimedia capabilities, providing useful information and practical examples to help get started.
[[sound-setup]]
== Setting Up the Sound Card
-Before beginning the configuration, determine the model of the sound card and the chip it uses.
+By default, FreeBSD will automatically detect the sound card used by the system.
FreeBSD supports a wide variety of sound cards.
-Check the supported audio devices list of the link:{u-rel120-hardware}[Hardware Notes] to see if the card is supported and which FreeBSD driver it uses.
+The list of supported sound cards can be consulted in man:sound[4].
-In order to use the sound device, its device driver must be loaded.
-The easiest way is to load a kernel module for the sound card with man:kldload[8].
-This example loads the driver for a built-in audio chipset based on the Intel specification:
+[NOTE]
+====
+It is only necessary to load the sound card module if FreeBSD has not detected it correctly.
+====
+
+Where it is not known which sound card the system has, or which module to use, the `snd_driver` metadriver can be loaded by executing the following command:
[source,shell]
....
-# kldload snd_hda
+# kldload snd_driver
....
-To automate the loading of this driver at boot time, add the driver to [.filename]#/boot/loader.conf#.
-The line for this driver is:
+Alternatively, to load the driver as a module at boot time, place the following line in [.filename]#/boot/loader.conf#:
[.programlisting]
....
-snd_hda_load="YES"
+snd_driver_load="YES"
....
-Other available sound modules are listed in [.filename]#/boot/defaults/loader.conf#.
-When unsure which driver to use, load the [.filename]#snd_driver# module:
+[[sound-testing]]
+=== Testing Sound
+
+To confirm the sound card is detected the following command can be executed:
[source,shell]
....
-# kldload snd_driver
+% dmesg | grep pcm
....
-This is a metadriver which loads all of the most common sound drivers and can be used to speed up the search for the correct driver.
-It is also possible to load all sound drivers by adding the metadriver to [.filename]#/boot/loader.conf#.
-
-To determine which driver was selected for the sound card after loading the [.filename]#snd_driver# metadriver, type `cat /dev/sndstat`.
-
-=== Configuring a Custom Kernel with Sound Support
-
-This section is for users who prefer to statically compile in support for the sound card in a custom kernel.
-For more information about recompiling a kernel, refer to crossref:kernelconfig[kernelconfig,Configuring the FreeBSD Kernel].
-
-When using a custom kernel to provide sound support, make sure that the audio framework driver exists in the custom kernel configuration file:
+The output should be similar to the following:
[.programlisting]
....
-device sound
+pcm0: <Conexant CX20561 (Hermosa) (Analog 2.0+HP/2.0)> at nid 26,22 and 24 on hdaa0
+pcm1: <Conexant CX20561 (Hermosa) (Internal Analog Mic)> at nid 29 on hdaa0
....
-Next, add support for the sound card.
-To continue the example of the built-in audio chipset based on the Intel specification from the previous section, use the following line in the custom kernel configuration file:
+The status of the sound card may also be checked using this command:
-[.programlisting]
+[source,shell]
....
-device snd_hda
+# cat /dev/sndstat
....
-Be sure to read the manual page of the driver for the device name to use for the driver.
-
-Non-PnP ISA sound cards may require the IRQ and I/O port settings of the card to be added to [.filename]#/boot/device.hints#.
-During the boot process, man:loader[8] reads this file and passes the settings to the kernel.
-For example, an old Creative SoundBlaster(R) 16 ISA non-PnP card will use the man:snd_sbc[4] driver in conjunction with `snd_sb16`.
-For this card, the following lines must be added to the kernel configuration file:
+The output should be similar to the following:
[.programlisting]
....
-device snd_sbc
-device snd_sb16
+Installed devices:
+pcm0: <Conexant CX20561 (Hermosa) (Analog 2.0+HP/2.0)> (play/rec) default
+pcm1: <Conexant CX20561 (Hermosa) (Internal Analog Mic)> (rec)
....
-If the card uses the `0x220` I/O port and IRQ `5`, these lines must also be added to [.filename]#/boot/device.hints#:
+If no `pcm` devices are listed, double-check that the correct device driver was loaded.
+If all goes well, the sound card should now work in FreeBSD.
+
+man:beep[1] can be used to produce some noise, confirming that the sound card is working:
-[.programlisting]
+[source,shell]
....
-hint.sbc.0.at="isa"
-hint.sbc.0.port="0x220"
-hint.sbc.0.irq="5"
-hint.sbc.0.drq="1"
-hint.sbc.0.flags="0x15"
+% beep
....
-The syntax used in [.filename]#/boot/device.hints# is described in man:sound[4] and the manual page for the driver of the sound card.
+[[sound-mixer]]
+=== Mixer
-The settings shown above are the defaults.
-In some cases, the IRQ or other settings may need to be changed to match the card.
-Refer to man:snd_sbc[4] for more information about this card.
+FreeBSD has different utilities to set and display sound card mixer values built on the FreeBSD Sound System:
-[[sound-testing]]
-=== Testing Sound
+.Supported mixer packages
+[options="header", cols="1,1,1,1"]
+|===
+| Name | License | Package | Toolkit
-After loading the required module or rebooting into the custom kernel, the sound card should be detected.
-To confirm, run `dmesg | grep pcm`.
-This example is from a system with a built-in Conexant CX20590 chipset:
+| man:mixer[8]
+| BSD-2
+| Included in base system
+| CLI
-[source,shell]
-....
-pcm0: <NVIDIA (0x001c) (HDMI/DP 8ch)> at nid 5 on hdaa0
-pcm1: <NVIDIA (0x001c) (HDMI/DP 8ch)> at nid 6 on hdaa0
-pcm2: <Conexant CX20590 (Analog 2.0+HP/2.0)> at nid 31,25 and 35,27 on hdaa1
-....
+| dsbmixer
+| BSD-2
+| package:audio/dsbmixer[]
+| Qt
-The status of the sound card may also be checked using this command:
+| KDE Plasma audio widget
+| GPL 2.0
+| package:audio/plasma5-plasma-pa[]
+| Qt
-[source,shell]
-....
-# cat /dev/sndstat
-FreeBSD Audio Driver (newpcm: 64bit 2009061500/amd64)
-Installed devices:
-pcm0: <NVIDIA (0x001c) (HDMI/DP 8ch)> (play)
-pcm1: <NVIDIA (0x001c) (HDMI/DP 8ch)> (play)
-pcm2: <Conexant CX20590 (Analog 2.0+HP/2.0)> (play/rec) default
-....
+| mixertui
+| BSD-2
+| package:audio/mixertui[]
+| TUI
-The output will vary depending upon the sound card.
-If no [.filename]#pcm# devices are listed, double-check that the correct device driver was loaded or compiled into the kernel.
-The next section lists some common problems and their solutions.
+|===
-If all goes well, the sound card should now work in FreeBSD.
-If the `CD` or `DVD` drive is properly connected to the sound card, one can insert an audio `CD` in the drive and play it with man:cdcontrol[1]:
+[[graphics-card-sound]]
+=== Graphics Card Sound
+
+Graphics cards often come with their own integrated sound devices, and it may be unclear which is being used as the default device.
+To confirm, run dmesg and look for the pcm entries to identify how the system is enumerating the outputs.
+Execute the following command:
[source,shell]
....
-% cdcontrol -f /dev/acd0 play 1
+% dmesg | grep pcm
....
-[WARNING]
-====
-Audio ``CD``s have specialized encodings which means that they should not be mounted using man:mount[8].
-====
+The output looks something like this:
-Various applications, such as package:audio/workman[], provide a friendlier interface.
-The package:audio/mpg123[] port can be installed to listen to MP3 audio files.
+[.programlisting]
+....
+pcm0: <HDA NVIDIA (Unknown) PCM #0 DisplayPort> at cad 0 nid 1 on hdac0
+pcm1: <HDA NVIDIA (Unknown) PCM #0 DisplayPort> at cad 1 nid 1 on hdac0
+pcm2: <HDA NVIDIA (Unknown) PCM #0 DisplayPort> at cad 2 nid 1 on hdac0
+pcm3: <HDA NVIDIA (Unknown) PCM #0 DisplayPort> at cad 3 nid 1 on hdac0
+hdac1: HDA Codec #2: Realtek ALC889
+pcm4: <HDA Realtek ALC889 PCM #0 Analog> at cad 2 nid 1 on hdac1
+pcm5: <HDA Realtek ALC889 PCM #1 Analog> at cad 2 nid 1 on hdac1
+pcm6: <HDA Realtek ALC889 PCM #2 Digital> at cad 2 nid 1 on hdac1
+pcm7: <HDA Realtek ALC889 PCM #3 Digital> at cad 2 nid 1 on hdac1
+....
-Another quick way to test the card is to send data to [.filename]#/dev/dsp#:
+The graphics card (NVIDIA(R)) has been enumerated before the sound card (Realtek(R)), with the sound card appearing as `pcm4`.
+The system can be configured to use the sound card as the default device by executing the following command:
[source,shell]
....
-% cat filename > /dev/dsp
+# sysctl hw.snd.default_unit=4
....
-where [.filename]#filename# can be any type of file.
-This command should produce some noise, confirming that the sound card is working.
-
-[NOTE]
-====
-The [.filename]#/dev/dsp*# device nodes will be created automatically as needed.
-When not in use, they do not exist and will not appear in the output of man:ls[1].
-====
-
-[[bluetooth-headset]]
-=== Setting up Bluetooth Sound Devices
-
-Connecting to a Bluetooth device is out of scope for this chapter.
-Refer to crossref:advanced-networking[network-bluetooth,“Bluetooth”] for more information.
+To make this change permanent add the next line to [.filename]#/etc/sysctl.conf#:
-To get Bluetooth sound sink working with FreeBSD's sound system, users have to install package:audio/virtual_oss[] first:
-
-[source,shell]
+[.programlisting]
....
-# pkg install virtual_oss
+hw.snd.default_unit=4
....
-package:audio/virtual_oss[] requires `cuse` to be loaded into the kernel:
+[[automatically-switching-headphones]]
+=== Automatically Switching to Headphones
+
+Some systems may struggle with switching between audio outputs, but fortunately FreeBSD allows automatic switchover to be configured in [.filename]#device.hints#.
+
+Identify how the system is enumerating the audio outputs by executing the following command:
[source,shell]
....
-# kldload cuse
+% dmesg | grep pcm
....
-To load `cuse` during system startup, run this command:
+The output looks something like this:
-[source,shell]
+[.programlisting]
....
-# echo 'cuse_load=yes' >> /boot/loader.conf
+pcm0: <Realtek ALC892 Analog> at nid 23 and 26 on hdaa0
+pcm1: <Realtek ALC892 Right Analog Headphones> at nid 22 on hdaa0
....
-To use headphones as a sound sink with package:audio/virtual_oss[], users need to create a virtual device after connecting to a Bluetooth audio device:
+Add the following lines to [.filename]#/boot/device.hints#:
-[source,shell]
+[.programlisting]
....
-# virtual_oss -C 2 -c 2 -r 48000 -b 16 -s 768 -R /dev/null -P /dev/bluetooth/headphones -d dsp
+hint.hdac.0.cad0.nid22.config="as=1 seq=15 device=Headphones"
+hint.hdac.0.cad0.nid26.config="as=2 seq=0 device=speakers"
....
[NOTE]
====
-_headphones_ in this example is a hostname from [.filename]#/etc/bluetooth/hosts#.
-`BT_ADDR` could be used instead.
+Keep in mind that these values are for the example indicated above.
+They may vary depending on the system.
====
-Refer to man:virtual_oss[8] for more information.
-
-[[troubleshooting]]
+[[troubleshooting-sound]]
=== Troubleshooting Sound
-<<multimedia-sound-common-error-messages>> lists some common error messages and their solutions:
+Some common error messages and their solutions:
[[multimedia-sound-common-error-messages]]
.Common Error Messages
@@ -281,70 +249,10 @@ Refer to man:virtual_oss[8] for more information.
| Error
| Solution
-|`sb_dspwr(XX) timed out`
-|
-
-The I/O port is not set correctly.
-
-|`bad irq XX`
-|
-
-The IRQ is set incorrectly. Make sure that the set IRQ and the sound IRQ are the same.
-
-|`xxx: gus pcm not attached, out of memory`
-|
-
-There is not enough available memory to use the device.
-
|`xxx: can't open /dev/dsp!`
-|
-
-Type `fstat \| grep` dsp to check if another application is holding the device open. Noteworthy troublemakers are esound and KDE's sound support.
+|Type `fstat \| grep dsp` to check if another application is holding the device open. Noteworthy troublemakers are esound and KDE's sound support.
|===
-Modern graphics cards often come with their own sound driver for use with `HDMI`.
-This sound device is sometimes enumerated before the sound card meaning that the sound card will not be used as the default playback device.
-To check if this is the case, run dmesg and look for `pcm`.
-The output looks something like this:
-
-[.programlisting]
-....
-...
-hdac0: HDA Driver Revision: 20100226_0142
-hdac1: HDA Driver Revision: 20100226_0142
-hdac0: HDA Codec #0: NVidia (Unknown)
-hdac0: HDA Codec #1: NVidia (Unknown)
-hdac0: HDA Codec #2: NVidia (Unknown)
-hdac0: HDA Codec #3: NVidia (Unknown)
-pcm0: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 0 nid 1 on hdac0
-pcm1: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 1 nid 1 on hdac0
-pcm2: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 2 nid 1 on hdac0
-pcm3: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 3 nid 1 on hdac0
-hdac1: HDA Codec #2: Realtek ALC889
-pcm4: <HDA Realtek ALC889 PCM #0 Analog> at cad 2 nid 1 on hdac1
-pcm5: <HDA Realtek ALC889 PCM #1 Analog> at cad 2 nid 1 on hdac1
-pcm6: <HDA Realtek ALC889 PCM #2 Digital> at cad 2 nid 1 on hdac1
-pcm7: <HDA Realtek ALC889 PCM #3 Digital> at cad 2 nid 1 on hdac1
-...
-....
-
-In this example, the graphics card (`NVidia`) has been enumerated before the sound card (`Realtek ALC889`).
-To use the sound card as the default playback device, change `hw.snd.default_unit` to the unit that should be used for playback:
-
-[source,shell]
-....
-# sysctl hw.snd.default_unit=n
-....
-
-where `n` is the number of the sound device to use.
-In this example, it should be `4`.
-Make this change permanent by adding the following line to [.filename]#/etc/sysctl.conf#:
-
-[.programlisting]
-....
-hw.snd.default_unit=4
-....
-
Programs using package:audio/pulseaudio[] might need to restart the
package:audio/pulseaudio[] daemon for the changes in `hw.snd.default_unit` to
take effect.
@@ -373,877 +281,482 @@ Do not use the `exit` command to exit the command line interface. That will kill
the package:audio/pulseaudio[] daemon. Use kbd:[Ctrl+D] instead.
====
-[[sound-multiple-sources]]
-=== Utilizing Multiple Sound Sources
-
-It is often desirable to have multiple sources of sound that are able to play simultaneously.
-FreeBSD uses "Virtual Sound Channels" to multiplex the sound card's playback by mixing sound in the kernel.
-
-Three man:sysctl[8] knobs are available for configuring virtual channels:
-
-[source,shell]
-....
-# sysctl dev.pcm.0.play.vchans=4
-# sysctl dev.pcm.0.rec.vchans=4
-# sysctl hw.snd.maxautovchans=4
-....
-
-This example allocates four virtual channels, which is a practical number for everyday use.
-Both `dev.pcm.0.play.vchans=4` and `dev.pcm.0.rec.vchans=4` are configurable after a device has been attached and represent the number of virtual channels [.filename]#pcm0# has for playback and recording.
-Since the [.filename]#pcm# module can be loaded independently of the hardware drivers, `hw.snd.maxautovchans` indicates how many virtual channels will be given to an audio device when it is attached.
-Refer to man:pcm[4] for more information.
-
-[NOTE]
-====
-The number of virtual channels for a device cannot be changed while it is in use.
-First, close any programs using the device, such as music players or sound daemons.
-====
+[[audio-ports]]
+== Audio players
-The correct [.filename]#pcm# device will automatically be allocated transparently to a program that requests [.filename]#/dev/dsp0#.
+This section introduces some of the software available from the FreeBSD Ports Collection which can be used for audio playback.
-=== Setting Default Values for Mixer Channels
+.Audio players packages
+[options="header", cols="1,1,1,1"]
+|===
+| Name | License | Package | Toolkit
-The default values for the different mixer channels are hardcoded in the source code of the man:pcm[4] driver.
-While sound card mixer levels can be changed using man:mixer[8] or third-party applications and daemons, this is not a permanent solution.
-To instead set default mixer values at the driver level, define the appropriate values in [.filename]#/boot/device.hints#, as seen in this example:
+| Elisa
+| LGPL 3.0
+| package:audio/elisa[]
+| Qt
-[.programlisting]
-....
-hint.pcm.0.vol="50"
-....
+| GNOME Music
+| GPL 2.0
+| package:audio/gnome-music[]
+| GTK+
-This will set the volume channel to a default value of `50` when the man:pcm[4] module is loaded.
+| Audacious
+| BSD-2
+| package:multimedia/audacious[]
+| Qt
-[[sound-mp3]]
-== MP3 Audio
+| MOC (music on console)
+| GPL 2.0
+| package:audio/moc[]
+| TUI
-This section describes some `MP3` players available for FreeBSD, how to rip audio `CD` tracks, and how to encode and decode ``MP3``s.
+|===
-[[mp3-players]]
-=== MP3 Players
+[[elisa]]
+=== Elisa
-A popular graphical `MP3` player is Audacious.
-It supports Winamp skins and additional plugins.
-The interface is intuitive, with a playlist, graphic equalizer, and more.
-Those familiar with Winamp will find Audacious simple to use.
-On FreeBSD, Audacious can be installed from the package:multimedia/audacious[] port or package.
-Audacious is a descendant of XMMS.
+Elisa is a music player developed by the KDE community that strives to be simple and nice to use.
-The package:audio/mpg123[] package or port provides an alternative, command-line `MP3` player.
-Once installed, specify the `MP3` file to play on the command line.
-If the system has multiple audio devices, the sound device can also be specified:
+To install Elisa, execute:
[source,shell]
....
-# mpg123 -a /dev/dsp1.0 Foobar-GreatestHits.mp3
-High Performance MPEG 1.0/2.0/2.5 Audio Player for Layers 1, 2 and 3
- version 1.18.1; written and copyright by Michael Hipp and others
- free software (LGPL) without any warranty but with best wishes
-
-Playing MPEG stream from Foobar-GreatestHits.mp3 ...
-MPEG 1.0 layer III, 128 kbit/s, 44100 Hz joint-stereo
+# pkg install elisa
....
-Additional `MP3` players are available in the FreeBSD Ports Collection.
-
-[[rip-cd]]
-=== Ripping `CD` Audio Tracks
-
-Before encoding a `CD` or `CD` track to `MP3`, the audio data on the `CD` must be ripped to the hard drive.
-This is done by copying the raw `CD` Digital Audio (`CDDA`) data to `WAV` files.
+[[gnome-music]]
+=== GNOME Music
-The `cdda2wav` tool, which is installed with the package:sysutils/cdrtools[] suite, can be used to rip audio information from ``CD``s.
+GNOME Music is the new GNOME music playing application.
+It aims to combine an elegant and immersive browsing experience with simple and straightforward controls.
-With the audio `CD` in the drive, the following command can be issued as `root` to rip an entire `CD` into individual, per track, `WAV` files:
+To install GNOME Music, execute:
[source,shell]
....
-# cdda2wav -D 0,1,0 -B
+# pkg install gnome-music
....
-In this example, the `-D _0,1,0_` indicates the `SCSI` device [.filename]#0,1,0# containing the `CD` to rip.
-Use `cdrecord -scanbus` to determine the correct device parameters for the system.
+[[audacious]]
+=== Audacious
-To rip individual tracks, use `-t` to specify the track:
+Audacious is an open source audio player.
+A descendant of XMMS, it plays your music how you want it, without stealing away your computer's resources from other tasks.
-[source,shell]
-....
-# cdda2wav -D 0,1,0 -t 7
-....
-
-To rip a range of tracks, such as track one to seven, specify a range:
+To install Audacious, execute:
[source,shell]
....
-# cdda2wav -D 0,1,0 -t 1+7
+# pkg install audacious-qt6 audacious-plugins-qt6
....
-To rip from an `ATAPI` (`IDE`) `CDROM` drive, specify the device name in place of the `SCSI` unit numbers.
-For example, to rip track 7 from an IDE drive:
-
-[source,shell]
-....
-# cdda2wav -D /dev/acd0 -t 7
-....
+[NOTE]
+====
+Audacious supports OSS natively, but must be configured in the settings on the Audio tab.
+====
-Alternately, `dd` can be used to extract audio tracks on `ATAPI` drives, as described in crossref:disks[duplicating-audiocds,“Duplicating Audio CDs”].
+[[moc-music-on-console]]
+=== MOC (music on console)
-[[mp3-encoding]]
-=== Encoding and Decoding MP3s
+MOC (music on console) is a console audio player designed to be powerful and easy to use.
-Lame is a popular `MP3` encoder which can be installed from the package:audio/lame[] port.
-Due to patent issues, a package is not available.
+MOC plays smoothly, regardless of system or I/O load, because it handles the output buffer in a separate thread.
+It does not cause gaps between files, because the next file to be played is pre-cached while playing the current file.
-The following command will convert the ripped `WAV` file [.filename]#audio01.wav# to [.filename]#audio01.mp3#:
+To install MOC (music on console), execute:
[source,shell]
....
-# lame -h -b 128 --tt "Foo Song Title" --ta "FooBar Artist" --tl "FooBar Album" \
---ty "2014" --tc "Ripped and encoded by Foo" --tg "Genre" audio01.wav audio01.mp3
+# pkg install moc
....
-The specified 128 kbits is a standard `MP3` bitrate while the 160 and 192 bitrates provide higher quality.
-The higher the bitrate, the larger the size of the resulting `MP3`.
-The `-h` turns on the "higher quality but a little slower" mode.
-The options beginning with `--t` indicate `ID3` tags, which usually contain song information, to be embedded within the `MP3` file.
-Additional encoding options can be found in the lame manual page.
-
-In order to burn an audio `CD` from ``MP3``s, they must first be converted to a non-compressed file format.
-XMMS can be used to convert to the `WAV` format, while mpg123 can be used to convert to the raw Pulse-Code Modulation (`PCM`) audio data format.
+[[video-ports]]
+== Video players
-To convert [.filename]#audio01.mp3# using mpg123, specify the name of the `PCM` file:
+This section introduces some of the software available from the FreeBSD Ports Collection which can be used for video playback.
-[source,shell]
-....
-# mpg123 -s audio01.mp3 > audio01.pcm
-....
+.Video players packages
+[options="header", cols="1,1,1,1"]
+|===
+| Name | License | Package | Toolkit
-To use XMMS to convert a `MP3` to `WAV` format, use these steps:
+| MPlayer
+| GPL 2.0
+| package:multimedia/mplayer[]
+| CLI
-[.procedure]
-.Procedure: Converting to `WAV` Format in XMMS
-. Launch XMMS.
-. Right-click the window to bring up the XMMS menu.
-. Select `Preferences` under `Options`.
-. Change the Output Plugin to "Disk Writer Plugin".
-. Press `Configure`.
-. Enter or browse to a directory to write the uncompressed files to.
-. Load the `MP3` file into XMMS as usual, with volume at 100% and EQ settings turned off.
-. Press `Play`. The XMMS will appear as if it is playing the `MP3`, but no music will be heard. It is actually playing the `MP3` to a file.
-. When finished, be sure to set the default Output Plugin back to what it was before in order to listen to ``MP3``s again.
+| SMPlayer
+| GPL 2.0
+| package:multimedia/smplayer[]
+| Qt
-Both the `WAV` and `PCM` formats can be used with cdrecord.
-When using `WAV` files, there will be a small tick sound at the beginning of each track.
-This sound is the header of the `WAV` file.
-The package:audio/sox[] port or package can be used to remove the header:
+| VLC media player
+| GPL 2.0
+| package:multimedia/vlc[]
+| Qt
-[source,shell]
-....
-% sox -t wav -r 44100 -s -w -c 2 track.wav track.raw
-....
+| Kodi (XBMC)
+| GPL 2.0
+| package:multimedia/kodi[]
+| X11
-Refer to crossref:disks[creating-cds,“Creating and Using CD Media”] for more information on using a `CD` burner in FreeBSD.
+|===
-[[video-playback]]
-== Video Playback
+[[mplayer]]
+=== MPlayer
-Before configuring video playback, determine the model and chipset of the video card.
-While Xorg supports a wide variety of video cards, not all provide good playback performance.
-To obtain a list of extensions supported by the Xorg server using the card, run `xdpyinfo` while Xorg is running.
+MPlayer is a multimedia player and encoder suite which runs on many platforms and works on the command line.
+It plays a terrific number of different file formats and codecs including popular DivX, XviD, H.264 streams as well as DVD and SVCDs along with many popular audio codecs.
-It is a good idea to have a short MPEG test file for evaluating various players and options.
-Since some `DVD` applications look for `DVD` media in [.filename]#/dev/dvd# by default, or have this device name hardcoded in them, it might be useful to make a symbolic link to the proper device:
+To install MPlayer, execute:
[source,shell]
....
-# ln -sf /dev/cd0 /dev/dvd
-....
-
-Due to the nature of man:devfs[5], manually created links will not persist after a system reboot.
-In order to recreate the symbolic link automatically when the system boots, add the following line to [.filename]#/etc/devfs.conf#:
-
-[.programlisting]
-....
-link cd0 dvd
-....
-
-`DVD` decryption invokes certain functions that require write permission to the `DVD` device.
-
-To enhance the shared memory Xorg interface, it is recommended to increase the values of these man:sysctl[8] variables:
-
-[.programlisting]
-....
-kern.ipc.shmmax=67108864
-kern.ipc.shmall=32768
+# pkg install mplayer
....
-[[video-interface]]
-=== Determining Video Capabilities
-
-There are several possible ways to display video under Xorg and what works is largely hardware dependent.
-Each method described below will have varying quality across different hardware.
+For examples of how MPlayer works see man:mplayer[1].
-Common video interfaces include:
+[[smplayer]]
+=== SMPlayer
-. Xorg: normal output using shared memory.
-. XVideo: an extension to the Xorg interface which allows video to be directly displayed in drawable objects through a special acceleration. This extension provides good quality playback even on low-end machines. The next section describes how to determine if this extension is running.
-. `SDL`: the Simple Directmedia Layer is a porting layer for many operating systems, allowing cross-platform applications to be developed which make efficient use of sound and graphics. `SDL` provides a low-level abstraction to the hardware which can sometimes be more efficient than the Xorg interface. On FreeBSD, `SDL` can be installed using the package:devel/sdl20[] package or port.
-. `DGA`: the Direct Graphics Access is an Xorg extension which allows a program to bypass the Xorg server and directly alter the framebuffer. As it relies on a low-level memory mapping, programs using it must be run as `root`. The `DGA` extension can be tested and benchmarked using man:dga[1]. When `dga` is running, it changes the colors of the display whenever a key is pressed. To quit, press kbd:[q].
-. SVGAlib: a low level console graphics layer.
+SMPlayer intends to be a complete front-end for MPlayer, from basic features like playing videos, DVDs, and VCDs to more advanced features like support for MPlayer filters and more.
-[[video-interface-xvideo]]
-==== XVideo
-
-To check whether this extension is running, use `xvinfo`:
+To install SMPlayer, execute:
[source,shell]
....
-% xvinfo
+# pkg install smplayer
....
-XVideo is supported for the card if the result is similar to:
-
-[source,shell]
-....
-X-Video Extension version 2.2
- screen #0
- Adaptor #0: "Savage Streams Engine"
- number of ports: 1
- port base: 43
- operations supported: PutImage
- supported visuals:
- depth 16, visualID 0x22
- depth 16, visualID 0x23
- number of attributes: 5
- "XV_COLORKEY" (range 0 to 16777215)
- client settable attribute
- client gettable attribute (current value is 2110)
- "XV_BRIGHTNESS" (range -128 to 127)
- client settable attribute
- client gettable attribute (current value is 0)
- "XV_CONTRAST" (range 0 to 255)
- client settable attribute
- client gettable attribute (current value is 128)
- "XV_SATURATION" (range 0 to 255)
- client settable attribute
- client gettable attribute (current value is 128)
- "XV_HUE" (range -180 to 180)
- client settable attribute
- client gettable attribute (current value is 0)
- maximum XvImage size: 1024 x 1024
- Number of image formats: 7
- id: 0x32595559 (YUY2)
- guid: 59555932-0000-0010-8000-00aa00389b71
- bits per pixel: 16
- number of planes: 1
- type: YUV (packed)
- id: 0x32315659 (YV12)
- guid: 59563132-0000-0010-8000-00aa00389b71
- bits per pixel: 12
- number of planes: 3
- type: YUV (planar)
- id: 0x30323449 (I420)
- guid: 49343230-0000-0010-8000-00aa00389b71
- bits per pixel: 12
- number of planes: 3
- type: YUV (planar)
- id: 0x36315652 (RV16)
- guid: 52563135-0000-0000-0000-000000000000
- bits per pixel: 16
- number of planes: 1
- type: RGB (packed)
- depth: 0
- red, green, blue masks: 0x1f, 0x3e0, 0x7c00
- id: 0x35315652 (RV15)
- guid: 52563136-0000-0000-0000-000000000000
- bits per pixel: 16
- number of planes: 1
- type: RGB (packed)
- depth: 0
- red, green, blue masks: 0x1f, 0x7e0, 0xf800
- id: 0x31313259 (Y211)
- guid: 59323131-0000-0010-8000-00aa00389b71
- bits per pixel: 6
- number of planes: 3
- type: YUV (packed)
- id: 0x0
- guid: 00000000-0000-0000-0000-000000000000
- bits per pixel: 0
- number of planes: 0
- type: RGB (packed)
- depth: 1
- red, green, blue masks: 0x0, 0x0, 0x0
-....
-
-The formats listed, such as YUV2 and YUV12, are not present with every implementation of XVideo and their absence may hinder some players.
-
-If the result instead looks like:
+[[vlc]]
+=== VLC media player
-[source,shell]
-....
-X-Video Extension version 2.2
-screen #0
-no adaptors present
-....
+VLC media player is a highly portable multimedia player for various audio and video formats (MPEG-1, MPEG-2, MPEG-4, DivX, mp3, ogg, and more) as well as DVD's, VCD's, and various streaming protocols.
+It can also be used as a server to stream in unicast or multicast in IPv4 or IPv6 on a high-bandwidth network.
+VLC also has the ability to transcode media on-the-fly for streaming or saving to disk.
-XVideo is probably not supported for the card.
-This means that it will be more difficult for the display to meet the computational demands of rendering video, depending on the video card and processor.
-
-[[video-ports]]
-=== Ports and Packages Dealing with Video
-
-This section introduces some of the software available from the FreeBSD Ports Collection which can be used for video playback.
-
-[[video-mplayer]]
-==== MPlayer and MEncoder
-
-MPlayer is a command-line video player with an optional graphical interface which aims to provide speed and flexibility.
-Other graphical front-ends to MPlayer are available from the FreeBSD Ports Collection.
-
-MPlayer can be installed using the package:multimedia/mplayer[] package or port.
-Several compile options are available and a variety of hardware checks occur during the build process.
-For these reasons, some users prefer to build the port rather than install the package.
-
-When compiling the port, the menu options should be reviewed to determine the type of support to compile into the port.
-If an option is not selected, MPlayer will not be able to display that type of video format.
-Use the arrow keys and spacebar to select the required formats.
-When finished, press kbd:[Enter] to continue the port compile and installation.
-
-By default, the package or port will build the `mplayer` command line utility and the `gmplayer` graphical utility.
-To encode videos, compile the package:multimedia/mencoder[] port.
-Due to licensing restrictions, a package is not available for MEncoder.
-
-The first time MPlayer is run, it will create [.filename]#~/.mplayer# in the user's home directory.
-This subdirectory contains default versions of the user-specific configuration files.
-
-This section describes only a few common uses.
-Refer to mplayer(1) for a complete description of its numerous options.
-
-To play the file [.filename]#testfile.avi#, specify the video interfaces with `-vo`, as seen in the following examples:
+To install VLC, execute:
[source,shell]
....
-% mplayer -vo xv testfile.avi
+# pkg install vlc
....
-[source,shell]
-....
-% mplayer -vo sdl testfile.avi
-....
+[[kodi]]
+=== Kodi (XBMC)
-[source,shell]
-....
-% mplayer -vo x11 testfile.avi
-....
+Kodi (formerly known as XBMC) is a free and open source cross-platform media-player and entertainment hub.
+It allows users to play and view most videos, music, podcasts, and other digital media files from local and network storage media and the internet.
-[source,shell]
-....
-# mplayer -vo dga testfile.avi
-....
+To install Kodi, execute:
[source,shell]
....
-# mplayer -vo 'sdl:dga' testfile.avi
+# pkg install kodi
....
-It is worth trying all of these options, as their relative performance depends on many factors and will vary significantly with hardware.
+[[conferencing-meetings]]
+== Conferencing and Meetings
-To play a `DVD`, replace [.filename]#testfile.avi# with `dvd://_N_ -dvd-device _DEVICE_`, where _N_ is the title number to play and _DEVICE_ is the device node for the `DVD`.
-For example, to play title 3 from [.filename]#/dev/dvd#:
+A FreeBSD desktop environment can be used to join video conferences.
+This section will explain how to configure the webcam and which videoconferencing applications are supported on FreeBSD.
-[source,shell]
-....
-# mplayer -vo xv dvd://3 -dvd-device /dev/dvd
-....
-
-[NOTE]
-====
-The default `DVD` device can be defined during the build of the MPlayer port by including the `WITH_DVD_DEVICE=/path/to/desired/device` option.
-By default, the device is [.filename]#/dev/cd0#. More details can be found in the port's [.filename]#Makefile.options#.
-====
+[[webcam-setup]]
+=== Setting Up the Webcam
-To stop, pause, advance, and so on, use a keybinding.
-To see the list of keybindings, run `mplayer -h` or read mplayer(1).
+To allow FreeBSD access to the webcam and perform its configuration it is necessary to install certain utilities:
-Additional playback options include `-fs -zoom`, which engages fullscreen mode, and `-framedrop`, which helps performance.
+* package:multimedia/webcamd[] is a daemon that enables the use of hundreds of different USB based webcam and DVB USB devices.
+* package:multimedia/pwcview[] is an application that can be used to view the video stream of the webcam.
-Each user can add commonly used options to their [.filename]#~/.mplayer/config# like so:
+To install the required utilities, execute:
-[.programlisting]
+[source,shell]
....
-vo=xv
-fs=yes
-zoom=yes
+# pkg install webcamd pwcview
....
-`mplayer` can be used to rip a `DVD` title to a [.filename]#.vob#.
-To dump the second title from a `DVD`:
+Enable the man:webcamd[8] service in `/etc/rc.conf` to start it at system boot:
[source,shell]
....
-# mplayer -dumpstream -dumpfile out.vob dvd://2 -dvd-device /dev/dvd
+# sysrc webcamd_enable="YES"
....
-The output file, [.filename]#out.vob#, will be in `MPEG` format.
-
-Anyone wishing to obtain a high level of expertise with UNIX(R) video should consult http://www.mplayerhq.hu/DOCS/[mplayerhq.hu/DOCS] as it is technically informative.
-This documentation should be considered as required reading before submitting any bug reports.
-
-Before using `mencoder`, it is a good idea to become familiar with the options described at http://www.mplayerhq.hu/DOCS/HTML/en/mencoder.html[mplayerhq.hu/DOCS/HTML/en/mencoder.html].
-There are innumerable ways to improve quality, lower bitrate, and change formats, and some of these options may make the difference between good or bad performance.
-Improper combinations of command line options can yield output files that are unplayable even by `mplayer`.
-
-Here is an example of a simple copy:
+The user must belong to the `webcamd` group.
+To add the user to `webcamd` group execute the following command:
[source,shell]
....
-% mencoder input.avi -oac copy -ovc copy -o output.avi
+# pw groupmod webcamd -m username
....
-To rip to a file, use `-dumpfile` with `mplayer`.
-
-To convert [.filename]#input.avi# to the MPEG4 codec with MPEG3 audio encoding, first install the package:audio/lame[] port.
-Due to licensing restrictions, a package is not available.
-Once installed, type:
+Since package:multimedia/webcamd[] needs the man:cuse[3] module this module must be loaded by executing the following command:
[source,shell]
....
-% mencoder input.avi -oac mp3lame -lameopts br=192 \
- -ovc lavc -lavcopts vcodec=mpeg4:vhq -o output.avi
+# kldload cuse
....
-This will produce output playable by applications such as `mplayer` and `xine`.
-
-[.filename]#input.avi# can be replaced with `dvd://1 -dvd-device /dev/dvd` and run as `root` to re-encode a `DVD` title directly.
-Since it may take a few tries to get the desired result, it is recommended to instead dump the title to a file and to work on the file.
-
-[[video-xine]]
-==== The xine Video Player
-
-xine is a video player with a reusable base library and a modular executable which can be extended with plugins.
-It can be installed using the package:multimedia/xine[] package or port.
-
-In practice, xine requires either a fast CPU with a fast video card, or support for the XVideo extension.
-The xine video player performs best on XVideo interfaces.
-
-By default, the xine player starts a graphical user interface.
-The menus can then be used to open a specific file.
-
-Alternatively, xine may be invoked from the command line by specifying the name of the file to play:
+To load man:cuse[3] at system boot, execute the command:
[source,shell]
....
-% xine -g -p mymovie.avi
+# sysrc kld_list += "cuse"
....
-Refer to http://www.xine-project.org/faq[xine-project.org/faq] for more information and troubleshooting tips.
-
-[[video-ports-transcode]]
-==== The Transcode Utilities
-
-Transcode provides a suite of tools for re-encoding video and audio files.
-Transcode can be used to merge video files or repair broken files using command line tools with stdin/stdout stream interfaces.
-
-In FreeBSD, Transcode can be installed using the package:multimedia/transcode[] package or port.
-Many users prefer to compile the port as it provides a menu of compile options for specifying the support and codecs to compile in.
-If an option is not selected, Transcode will not be able to encode that format.
-Use the arrow keys and spacebar to select the required formats.
-When finished, press kbd:[Enter] to continue the port compile and installation.
-
-This example demonstrates how to convert a DivX file into a PAL MPEG-1 file (PAL VCD):
+Once the utilities have been installed the list of available webcams can be shown with man:webcamd[8]:
[source,shell]
....
-% transcode -i input.avi -V --export_prof vcd-pal -o output_vcd
-% mplex -f 1 -o output_vcd.mpg output_vcd.m1v output_vcd.mpa
+# webcamd -l
....
-The resulting `MPEG` file, [.filename]#output_vcd.mpg#, is ready to be played with MPlayer.
-The file can be burned on a `CD` media to create a video `CD` using a utility such as package:multimedia/vcdimager[] or package:sysutils/cdrdao[].
-
-In addition to the manual page for `transcode`, refer to http://www.transcoding.org/cgi-bin/transcode[transcoding.org/cgi-bin/transcode] for further information and examples.
-
-[[tvcard]]
-== TV Cards
-
-TV cards can be used to watch broadcast or cable TV on a computer.
-Most cards accept composite video via an `RCA` or S-video input and some cards include a `FM` radio tuner.
-
-FreeBSD provides support for PCI-based TV cards using a Brooktree Bt848/849/878/879 video capture chip with the man:bktr[4] driver.
-This driver supports most Pinnacle PCTV video cards.
-Before purchasing a TV card, consult man:bktr[4] for a list of supported tuners.
-
-=== Loading the Driver
-
-In order to use the card, the man:bktr[4] driver must be loaded.
-To automate this at boot time, add the following line to [.filename]#/boot/loader.conf#:
+The output should be similar to the following:
[.programlisting]
....
-bktr_load="YES"
+webcamd [-d ugen0.2] -N SunplusIT-Inc-HP-TrueVision-HD-Camera -S unknown -M 0 <.>
+webcamd [-d ugen1.3] -N Realtek-802-11n-WLAN-Adapter -S 00e04c000001 -M 0
....
+<.> Available webcam
-Alternatively, one can statically compile support for the TV card into a custom kernel.
-In that case, add the following lines to the custom kernel configuration file:
+Configure the available webcam executing the following command:
-[.programlisting]
+[source,shell]
....
-device bktr
-device iicbus
-device iicbb
-device smbus
+# sysrc webcamd_0_flags="-d ugen0.2" <.>
....
-These additional devices are necessary as the card components are interconnected via an I2C bus.
-Then, build and install a new kernel.
+[NOTE]
+====
+Note here that if this is a plug-and-play USB webcam, changing the USB port to which it is connected will change the output from `webcamd -l`, and the entry in rc.conf might need to be updated.
+For laptops that use USB integrated webcams, this should not be an issue.
+====
-To test that the tuner is correctly detected, reboot the system.
-The TV card should appear in the boot messages, as seen in this example:
+The man:webcamd[8] service must be started by executing the following command:
-[.programlisting]
+[source,shell]
....
-bktr0: <BrookTree 848A> mem 0xd7000000-0xd7000fff irq 10 at device 10.0 on pci0
-iicbb0: <I2C bit-banging driver> on bti2c0
-iicbus0: <Philips I2C bus> on iicbb0 master-only
-iicbus1: <Philips I2C bus> on iicbb0 master-only
-smbus0: <System Management Bus> on bti2c0
-bktr0: Pinnacle/Miro TV, Philips SECAM tuner.
+# service webcamd start
....
-The messages will differ according to the hardware.
-If necessary, it is possible to override some of the detected parameters using man:sysctl[8] or custom kernel configuration options.
-For example, to force the tuner to a Philips SECAM tuner, add the following line to a custom kernel configuration file:
+The output should be similar to the following:
[.programlisting]
....
-options OVERRIDE_TUNER=6
+Starting webcamd.
+webcamd 1616 - - Attached to ugen0.2[0]
....
-or, use man:sysctl[8]:
+package:multimedia/pwcview[] can be used to check the proper functioning of the webcam.
+The following command can be used to execute package:multimedia/pwcview[]:
[source,shell]
....
-# sysctl hw.bt848.tuner=6
+% pwcview -f 30 -s vga
....
-Refer to man:bktr[4] for a description of the available man:sysctl[8] parameters and kernel options.
-
-=== Useful Applications
-
-To use the TV card, install one of the following applications:
-
-* package:multimedia/fxtv[] provides TV-in-a-window and image/audio/video capture capabilities.
-* package:multimedia/xawtv[] is another TV application with similar features.
-* package:audio/xmradio[] provides an application for using the FM radio tuner of a TV card.
-
-More applications are available in the FreeBSD Ports Collection.
+Then package:multimedia/pwcview[] will display the webcam:
-=== Troubleshooting
+image::pwcview.png[pwcview showing Absolute FreeBSD 3rd edition as an example]
-If any problems are encountered with the TV card, check that the video capture chip and the tuner are supported by man:bktr[4] and that the right configuration options were used.
-For more support or to ask questions about supported TV cards, refer to the {freebsd-multimedia} mailing list.
+[[meetings-software-status]]
+=== Meetings software status
-[[mythtv]]
-== MythTV
+FreeBSD currently supports the following tools used to carry out videoconferences.
-MythTV is a popular, open source Personal Video Recorder (`PVR`) application.
-This section demonstrates how to install and setup MythTV on FreeBSD.
-Refer to http://www.mythtv.org/wiki/[mythtv.org/wiki] for more information on how to use MythTV.
-
-MythTV requires a frontend and a backend.
-These components can either be installed on the same system or on different machines.
-
-The frontend can be installed on FreeBSD using the package:multimedia/mythtv-frontend[] package or port.
-Xorg must also be installed and configured as described in crossref:x11[x11,The X Window System].
-Ideally, this system has a video card that supports X-Video Motion Compensation (`XvMC`) and, optionally, a Linux Infrared Remote Control (`LIRC`)-compatible remote.
-
-To install both the backend and the frontend on FreeBSD, use the package:multimedia/mythtv[] package or port.
-A MySQL(TM) database server is also required and should automatically be installed as a dependency.
-Optionally, this system should have a tuner card and sufficient storage to hold recorded data.
-
-=== Hardware
-
-MythTV uses Video for Linux (`V4L`) to access video input devices such as encoders and tuners.
-In FreeBSD, MythTV works best with `USB` DVB-S/C/T cards as they are well supported by the package:multimedia/webcamd[] package or port which provides a `V4L` userland application.
-Any Digital Video Broadcasting (`DVB`) card supported by webcamd should work with MythTV.
-A list of known working cards can be found at https://wiki.freebsd.org/WebcamCompat[wiki.freebsd.org/WebcamCompat].
-Drivers are also available for Hauppauge cards in the package:multimedia/pvr250[] and package:multimedia/pvrxxx[] ports, but they provide a non-standard driver interface that does not work with versions of MythTV greater than 0.23.
-Due to licensing restrictions, no packages are available and these two ports must be compiled.
-
-The https://wiki.freebsd.org/HTPC[wiki.freebsd.org/HTPC] page contains a list of all available `DVB` drivers.
-
-=== Setting up the MythTV Backend
-
-To install MythTV using binary packages:
-
-[source,shell]
-....
-# pkg install mythtv
-....
+.Meeting software
+[options="header", cols="1,1,1,1"]
+|===
+| Name | Firefox status | Chromium status | Website
-Alternatively, to install from the Ports Collection:
+| Microsoft Teams
+| Does not work
+| Works
+| link:https://teams.live.com[]
-[source,shell]
-....
-# cd /usr/ports/multimedia/mythtv
-# make install
-....
+| Google Meet
+| Does not work
+| Works
+| link:https://meet.google.com/[]
-Once installed, set up the MythTV database:
+| Zoom
+| Works
+| Works
+| link:https://zoom.us[]
-[source,shell]
-....
-# mysql -uroot -p < /usr/local/share/mythtv/database/mc.sql
-....
+| Jitsi
+| Does not work
+| Works
+| link:https://meet.jit.si/[]
-Then, configure the backend:
+| BigBlueButton
+| Does not work
+| Works
+| link:https://bigbluebutton.org/[]
-[source,shell]
-....
-# mythtv-setup
-....
-
-Finally, start the backend:
-
-[source,shell]
-....
-# sysrc mythbackend_enable=yes
-# service mythbackend start
-....
+|===
[[scanners]]
== Image Scanners
-In FreeBSD, access to image scanners is provided by SANE (Scanner Access Now Easy), which is available in the FreeBSD Ports Collection.
-SANE will also use some FreeBSD device drivers to provide access to the scanner hardware.
-
-FreeBSD supports both `SCSI` and `USB` scanners.
-Depending upon the scanner interface, different device drivers are required.
-Be sure the scanner is supported by SANE prior to performing any configuration.
-Refer to http://www.sane-project.org/sane-supported-devices.html[http://www.sane-project.org/sane-supported-devices.html] for more information about supported scanners.
-
-This chapter describes how to determine if the scanner has been detected by FreeBSD.
-It then provides an overview of how to configure and use SANE on a FreeBSD system.
+In FreeBSD, access to image scanners is provided by link:http://www.sane-project.org[SANE (Scanner Access Now Easy)], which is available in the FreeBSD Ports Collection.
[[scanners-kernel-usb]]
=== Checking the Scanner
-The [.filename]#GENERIC# kernel includes the device drivers needed to support `USB` scanners.
-Users with a custom kernel should ensure that the following lines are present in the custom kernel configuration file:
+Before attempting any configuration it is important to check the scanner is supported by SANE.
-[.programlisting]
-....
-device usb
-device uhci
-device ohci
-device ehci
-device xhci
-....
-
-To determine if the `USB` scanner is detected, plug it in and use `dmesg` to determine whether the scanner appears in the system message buffer.
-If it does, it should display a message similar to this:
+With the scanner connected, run the following command to get all connected USB devices:
[source,shell]
....
-ugen0.2: <EPSON> at usbus0
+# usbconfig list
....
-In this example, an EPSON Perfection(R) 1650 `USB` scanner was detected on [.filename]#/dev/ugen0.2#.
-
-If the scanner uses a `SCSI` interface, it is important to know which `SCSI` controller board it will use.
-Depending upon the `SCSI` chipset, a custom kernel configuration file may be needed.
-The [.filename]#GENERIC# kernel supports the most common `SCSI` controllers.
-Refer to [.filename]#/usr/src/sys/conf/NOTES# to determine the correct line to add to a custom kernel configuration file.
-In addition to the `SCSI` adapter driver, the following lines are needed in a custom kernel configuration file:
+The output should be similar to the following:
[.programlisting]
....
-device scbus
-device pass
+ugen4.2: <LITE-ON Technology USB NetVista Full Width Keyboard.> at usbus4, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON (70mA)
+ugen4.3: <Logitech USB Optical Mouse> at usbus4, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON (100mA)
+ugen3.2: <HP Deskjet 1050 J410 series> at usbus3, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (2mA)
....
-Verify that the device is displayed in the system message buffer:
+Run the following command to obtain the `idVendor` and the `idProduct`:
[source,shell]
....
-pass2 at aic0 bus 0 target 2 lun 0
-pass2: <AGFA SNAPSCAN 600 1.10> Fixed Scanner SCSI-2 device
-pass2: 3.300MB/s transfers
+# usbconfig -d 3.2 dump_device_desc
....
-If the scanner was not powered-on at system boot, it is still possible to manually force detection by performing a `SCSI` bus scan with `camcontrol`:
-
-[source,shell]
-....
-# camcontrol rescan all
-Re-scan of bus 0 was successful
-Re-scan of bus 1 was successful
-Re-scan of bus 2 was successful
-Re-scan of bus 3 was successful
-....
+[NOTE]
+====
+Note here that the scanner is a plug-and-play device, and changing the USB port to which it is connected will change the output from `usbconfig list`.
+====
-The scanner should now appear in the `SCSI` devices list:
+The output should be similar to the following:
-[source,shell]
+[.programlisting]
....
-# camcontrol devlist
-<IBM DDRS-34560 S97B> at scbus0 target 5 lun 0 (pass0,da0)
-<IBM DDRS-34560 S97B> at scbus0 target 6 lun 0 (pass1,da1)
-<AGFA SNAPSCAN 600 1.10> at scbus1 target 2 lun 0 (pass3)
-<PHILIPS CDD3610 CD-R/RW 1.00> at scbus2 target 0 lun 0 (pass2,cd0)
+ugen3.2: <HP Deskjet 1050 J410 series> at usbus3, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (2mA)
+
+bLength = 0x0012
+bDescriptorType = 0x0001
+bcdUSB = 0x0200
+bDeviceClass = 0x0000 <Probed by interface class>
+bDeviceSubClass = 0x0000
+bDeviceProtocol = 0x0000
+bMaxPacketSize0 = 0x0040
+idVendor = 0x03f0
+idProduct = 0x8911
+bcdDevice = 0x0100
+iManufacturer = 0x0001 <HP>
+iProduct = 0x0002 <Deskjet 1050 J410 series>
+bNumConfigurations = 0x0001
....
-Refer to man:scsi[4] and man:camcontrol[8] for more details about `SCSI` devices on FreeBSD.
+Once the `idVendor` and the `idProduct` have been obtained, it is necessary to check in the link:http://www.sane-project.org/lists/sane-mfgs-cvs.html[list of supported devices of SANE] if the scanner is supported by filtering by the idProduct.
+[[_sane_configuration]]
=== SANE Configuration
-The SANE system provides the access to the scanner via backends (package:graphics/sane-backends[]).
-Refer to http://www.sane-project.org/sane-supported-devices.html[http://www.sane-project.org/sane-supported-devices.html] to determine which backend supports the scanner.
-A graphical scanning interface is provided by third party applications like Kooka (package:graphics/kooka[]) or XSane (package:graphics/xsane[]).
-SANE's backends are enough to test the scanner.
-
-To install the backends from binary package:
+SANE provides the access to the scanner via backends.
+To be able to scan with FreeBSD the package:graphics/sane-backends[] package must be installed by running the following command:
[source,shell]
....
# pkg install sane-backends
....
-Alternatively, to install from the Ports Collection
-
-[source,shell]
-....
-# cd /usr/ports/graphics/sane-backends
-# make install clean
-....
-
-After installing the package:graphics/sane-backends[] port or package, use `sane-find-scanner` to check the scanner detection by the SANE system:
-
-[source,shell]
-....
-# sane-find-scanner -q
-found SCSI scanner "AGFA SNAPSCAN 600 1.10" at /dev/pass3
-....
-
-The output should show the interface type of the scanner and the device node used to attach the scanner to the system.
-The vendor and the product model may or may not appear.
-
-[NOTE]
+[TIP]
====
-Some `USB` scanners require firmware to be loaded.
-Refer to sane-find-scanner(1) and sane(7) for details.
+Some USB scanners require firmware to be loaded.
+Like the HP scanner used in the example above, which needs the package package:print/hplip[] installed.
====
-Next, check if the scanner will be identified by a scanning frontend.
-The SANE backends include `scanimage` which can be used to list the devices and perform an image acquisition.
-Use `-L` to list the scanner devices.
-The first example is for a `SCSI` scanner and the second is for a `USB` scanner:
+After installing the necessary packages man:devd[8] must be configured to allow FreeBSD access to the scanner.
-[source,shell]
-....
-# scanimage -L
-device `snapscan:/dev/pass3' is a AGFA SNAPSCAN 600 flatbed scanner
-
-# scanimage -L
-device 'epson2:libusb:000:002' is a Epson GT-8200 flatbed scanner
-....
-
-In this second example, `epson2` is the backend name and `libusb:000:002` means [.filename]#/dev/ugen0.2# is the device node used by the scanner.
-
-If `scanimage` is unable to identify the scanner, this message will appear:
-
-[source,shell]
-....
-# scanimage -L
-No scanners were identified. If you were expecting something different,
-check that the scanner is plugged in, turned on and detected by the
-sane-find-scanner tool (if appropriate). Please read the documentation
-which came with this software (README, FAQ, manpages).
-....
-
-If this happens, edit the backend configuration file in [.filename]#/usr/local/etc/sane.d/# and define the scanner device used.
-For example, if the undetected scanner model is an EPSON Perfection(R) 1650 and it uses the `epson2` backend, edit [.filename]#/usr/local/etc/sane.d/epson2.conf#.
-When editing, add a line specifying the interface and the device node used.
-In this case, add the following line:
+Add the `saned.conf` file to [.filename]#/usr/local/etc/devd/saned.conf# with the following content:
[.programlisting]
....
-usb /dev/ugen0.2
+notify 100 {
+ match "system" "USB";
+ match "subsystem" "INTERFACE";
+ match "type" "ATTACH";
+ match "cdev" "ugen[0-9].[0-9]";
+ match "vendor" "0x03f0"; <.>
+ match "product" "0x8911"; <.>
+ action "chown -L cups:saned /dev/\$cdev && chmod -L 660 /dev/\$cdev";
+};
....
-Save the edits and verify that the scanner is identified with the right backend name and the device node:
+<.> `vendor`: Is the idVendor obtained previously by running the `usbconfig -d 3.2 dump_device_desc` command.
+<.> `product`: Is the idProduct obtained previously by running the `usbconfig -d 3.2 dump_device_desc` command.
+
+After that man:devd[8] must be restarted by running the following command:
[source,shell]
....
-# scanimage -L
-device 'epson2:libusb:000:002' is a Epson GT-8200 flatbed scanner
+# service devd restart
....
-Once `scanimage -L` sees the scanner, the configuration is complete and the scanner is now ready to use.
-
-While `scanimage` can be used to perform an image acquisition from the command line, it is often preferable to use a graphical interface to perform image scanning.
-Applications like Kooka or XSane are popular scanning frontends.
-They offer advanced features such as various scanning modes, color correction, and batch scans.
-XSane is also usable as a GIMP plugin.
-
-=== Scanner Permissions
-
-In order to have access to the scanner, a user needs read and write permissions to the device node used by the scanner.
-In the previous example, the `USB` scanner uses the device node [.filename]#/dev/ugen0.2# which is really a symlink to the real device node [.filename]#/dev/usb/0.2.0#.
-The symlink and the device node are owned, respectively, by the `wheel` and `operator` groups.
-While adding the user to these groups will allow access to the scanner, it is considered insecure to add a user to `wheel`.
-A better solution is to create a group and make the scanner device accessible to members of this group.
+The SANE backends include man:scanimage[1] which can be used to list the devices and perform an image acquisition.
-This example creates a group called `_usb_`:
+Execute man:scanimage[1] with `-L` argument to list the scanner devices:
[source,shell]
....
-# pw groupadd usb
+# scanimage -L
....
-Then, make the [.filename]#/dev/ugen0.2# symlink and the [.filename]#/dev/usb/0.2.0# device node accessible to the `usb` group with write permissions of `0660` or `0664` by adding the following lines to [.filename]#/etc/devfs.rules#:
+The output should be similar to the following:
[.programlisting]
....
-[system=5]
-add path ugen0.2 mode 0660 group usb
-add path usb/0.2.0 mode 0666 group usb
+device `hpaio:/usb/Deskjet_1050_J410_series?serial=XXXXXXXXXXXXXX' is a Hewlett-Packard Deskjet_1050_J410_series all-in-one
....
-[NOTE]
-====
-It happens the device node changes with the addition or removal of devices, so one may want to give access to all USB devices using this ruleset instead:
+If man:scanimage[1] is not able to identify the scanner, this message will appear:
[.programlisting]
....
-[system=5]
-add path 'ugen*' mode 0660 group usb
-add path 'usb/*' mode 0666 group usb
+No scanners were identified. If you were expecting something different,
+check that the scanner is plugged in, turned on and detected by the
+sane-find-scanner tool (if appropriate). Please read the documentation
+which came with this software (README, FAQ, manpages).
....
-====
+Once man:scanimage[1] sees the scanner, the configuration is complete and the scanner is now ready to use.
-Refer to man:devfs.rules[5] for more information about this file.
+To activate the service and have it run at boot execute the following command:
-Next, enable the ruleset in /etc/rc.conf:
-
-[.programlisting]
+[source,shell]
....
-devfs_system_ruleset="system"
+# sysrc saned_enable="YES"
....
-And, restart the man:devfs[8] system:
+While man:scanimage[1] can be used to perform an image acquisition from the command line, it is often preferable to use a graphical interface to perform image scanning.
-[source,shell]
-....
-# service devfs restart
-....
+.Graphical scanner programs
+[options="header", cols="1,1,1"]
+|===
+| Name | License | Package
-Finally, add the users to `_usb_` in order to allow access to the scanner:
+| skanlite
+| GPL 2.0
+| graphics/skanlite
-[source,shell]
-....
-# pw groupmod usb -m joe
-....
+| GNOME Simple Scan
+| GPL 3.0
+| graphics/simple-scan
-For more details refer to man:pw[8].
+| XSANE
+| GPL 2.0
+| graphics/xsane
+
+|===
diff --git a/documentation/content/en/books/handbook/multimedia/_index.po b/documentation/content/en/books/handbook/multimedia/_index.po
new file mode 100644
index 0000000000..47450d42c1
--- /dev/null
+++ b/documentation/content/en/books/handbook/multimedia/_index.po
@@ -0,0 +1,1496 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:1
+#, no-wrap
+msgid "The multimedia chapter provides an overview of multimedia support on FreeBSD"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:1
+#, no-wrap
+msgid "Part II. Common Tasks"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:1
+#, no-wrap
+msgid "Chapter 9. Multimedia"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:14
+#, no-wrap
+msgid "Multimedia"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:61
+msgid ""
+"The multimedia chapter provides an overview of multimedia support on "
+"FreeBSD. Multimedia applications and technologies have become an integral "
+"part of modern computing, and FreeBSD provides robust and reliable support "
+"for a wide range of multimedia hardware and software. This chapter covers "
+"various multimedia components such as audio, video, and image processing. "
+"It also discusses various media formats and codecs, as well as tools and "
+"applications for multimedia creation and playback. Additionally, the "
+"chapter covers multimedia system configuration, troubleshooting, and "
+"optimization. Whether you are a multimedia enthusiast or a professional "
+"content creator, FreeBSD offers a robust platform for multimedia work. This "
+"chapter aims to help get the most out of FreeBSD's multimedia capabilities, "
+"providing useful information and practical examples to help get started."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:63
+#, no-wrap
+msgid "Setting Up the Sound Card"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:68
+msgid ""
+"By default, FreeBSD will automatically detect the sound card used by the "
+"system. FreeBSD supports a wide variety of sound cards. The list of "
+"supported sound cards can be consulted in man:sound[4]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:72
+msgid ""
+"It is only necessary to load the sound card module if FreeBSD has not "
+"detected it correctly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:75
+msgid ""
+"Where it is not known which sound card the system has, or which module to "
+"use, the `snd_driver` metadriver can be loaded by executing the following "
+"command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:79
+#, no-wrap
+msgid "# kldload snd_driver\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:82
+msgid ""
+"Alternatively, to load the driver as a module at boot time, place the "
+"following line in [.filename]#/boot/loader.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:86
+#, no-wrap
+msgid "snd_driver_load=\"YES\"\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:89
+#, no-wrap
+msgid "Testing Sound"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:92
+msgid ""
+"To confirm the sound card is detected the following command can be executed:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:96
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:174
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:216
+#, no-wrap
+msgid "% dmesg | grep pcm\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:99
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:114
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:518
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:547
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:621
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:642
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:718
+msgid "The output should be similar to the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:104
+#, no-wrap
+msgid ""
+"pcm0: <Conexant CX20561 (Hermosa) (Analog 2.0+HP/2.0)> at nid 26,22 and 24 on hdaa0\n"
+"pcm1: <Conexant CX20561 (Hermosa) (Internal Analog Mic)> at nid 29 on hdaa0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:107
+msgid "The status of the sound card may also be checked using this command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:111
+#, no-wrap
+msgid "# cat /dev/sndstat\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:120
+#, no-wrap
+msgid ""
+"Installed devices:\n"
+"pcm0: <Conexant CX20561 (Hermosa) (Analog 2.0+HP/2.0)> (play/rec) default\n"
+"pcm1: <Conexant CX20561 (Hermosa) (Internal Analog Mic)> (rec)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:124
+msgid ""
+"If no `pcm` devices are listed, double-check that the correct device driver "
+"was loaded. If all goes well, the sound card should now work in FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:126
+msgid ""
+"man:beep[1] can be used to produce some noise, confirming that the sound "
+"card is working:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:130
+#, no-wrap
+msgid "% beep\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:133
+#, no-wrap
+msgid "Mixer"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:136
+msgid ""
+"FreeBSD has different utilities to set and display sound card mixer values "
+"built on the FreeBSD Sound System:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:137
+#, no-wrap
+msgid "Supported mixer packages"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:140
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:292
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:382
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:574
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:748
+#, no-wrap
+msgid "Name"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:140
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:292
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:382
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:748
+#, no-wrap
+msgid "License"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:140
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:292
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:382
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:750
+#, no-wrap
+msgid "Package"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:142
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:294
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:384
+#, no-wrap
+msgid "Toolkit"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:143
+#, no-wrap
+msgid "man:mixer[8]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:144
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:149
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:159
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:306
+#, no-wrap
+msgid "BSD-2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:145
+#, no-wrap
+msgid "Included in base system"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:147
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:389
+#, no-wrap
+msgid "CLI"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:148
+#, no-wrap
+msgid "dsbmixer"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:150
+#, no-wrap
+msgid "package:audio/dsbmixer[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:152
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:157
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:299
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:309
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:394
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:399
+#, no-wrap
+msgid "Qt"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:153
+#, no-wrap
+msgid "KDE Plasma audio widget"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:154
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:301
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:311
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:386
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:391
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:396
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:401
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:752
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:760
+#, no-wrap
+msgid "GPL 2.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:155
+#, no-wrap
+msgid "package:audio/plasma5-plasma-pa[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:158
+#, no-wrap
+msgid "mixertui"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:160
+#, no-wrap
+msgid "package:audio/mixertui[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:162
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:314
+#, no-wrap
+msgid "TUI"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:165
+#, no-wrap
+msgid "Graphics Card Sound"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:170
+msgid ""
+"Graphics cards often come with their own integrated sound devices, and it "
+"may be unclear which is being used as the default device. To confirm, run "
+"dmesg and look for the pcm entries to identify how the system is enumerating "
+"the outputs. Execute the following command:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:177
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:219
+msgid "The output looks something like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:189
+#, no-wrap
+msgid ""
+"pcm0: <HDA NVIDIA (Unknown) PCM #0 DisplayPort> at cad 0 nid 1 on hdac0\n"
+"pcm1: <HDA NVIDIA (Unknown) PCM #0 DisplayPort> at cad 1 nid 1 on hdac0\n"
+"pcm2: <HDA NVIDIA (Unknown) PCM #0 DisplayPort> at cad 2 nid 1 on hdac0\n"
+"pcm3: <HDA NVIDIA (Unknown) PCM #0 DisplayPort> at cad 3 nid 1 on hdac0\n"
+"hdac1: HDA Codec #2: Realtek ALC889\n"
+"pcm4: <HDA Realtek ALC889 PCM #0 Analog> at cad 2 nid 1 on hdac1\n"
+"pcm5: <HDA Realtek ALC889 PCM #1 Analog> at cad 2 nid 1 on hdac1\n"
+"pcm6: <HDA Realtek ALC889 PCM #2 Digital> at cad 2 nid 1 on hdac1\n"
+"pcm7: <HDA Realtek ALC889 PCM #3 Digital> at cad 2 nid 1 on hdac1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:193
+msgid ""
+"The graphics card (NVIDIA(R)) has been enumerated before the sound card "
+"(Realtek(R)), with the sound card appearing as `pcm4`. The system can be "
+"configured to use the sound card as the default device by executing the "
+"following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:197
+#, no-wrap
+msgid "# sysctl hw.snd.default_unit=4\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:200
+msgid ""
+"To make this change permanent add the next line to [.filename]#/etc/sysctl."
+"conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:204
+#, no-wrap
+msgid "hw.snd.default_unit=4\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:207
+#, no-wrap
+msgid "Automatically Switching to Headphones"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:210
+msgid ""
+"Some systems may struggle with switching between audio outputs, but "
+"fortunately FreeBSD allows automatic switchover to be configured in [."
+"filename]#device.hints#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:212
+msgid ""
+"Identify how the system is enumerating the audio outputs by executing the "
+"following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:224
+#, no-wrap
+msgid ""
+"pcm0: <Realtek ALC892 Analog> at nid 23 and 26 on hdaa0\n"
+"pcm1: <Realtek ALC892 Right Analog Headphones> at nid 22 on hdaa0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:227
+msgid "Add the following lines to [.filename]#/boot/device.hints#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:232
+#, no-wrap
+msgid ""
+"hint.hdac.0.cad0.nid22.config=\"as=1 seq=15 device=Headphones\" \n"
+"hint.hdac.0.cad0.nid26.config=\"as=2 seq=0 device=speakers\"\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:238
+msgid ""
+"Keep in mind that these values are for the example indicated above. They "
+"may vary depending on the system."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:241
+#, no-wrap
+msgid "Troubleshooting Sound"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:244
+msgid "Some common error messages and their solutions:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:246
+#, no-wrap
+msgid "Common Error Messages"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:250
+#, no-wrap
+msgid "Error"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:252
+#, no-wrap
+msgid "Solution"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:253
+#, no-wrap
+msgid "`xxx: can't open /dev/dsp!`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:253
+#, no-wrap
+msgid "Type `fstat \\"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:254
+#, no-wrap
+msgid "grep dsp` to check if another application is holding the device open. Noteworthy troublemakers are esound and KDE's sound support."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:262
+msgid ""
+"Programs using package:audio/pulseaudio[] might need to restart the package:"
+"audio/pulseaudio[] daemon for the changes in `hw.snd.default_unit` to take "
+"effect. Alternatively, package:audio/pulseaudio[] settings can be changed "
+"on the fly. man:pacmd[1] opens a command line connection to the package:"
+"audio/pulseaudio[] daemon:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:268
+#, no-wrap
+msgid ""
+"# pacmd\n"
+"Welcome to PulseAudio 14.2! Use \"help\" for usage information.\n"
+">>>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:272
+msgid ""
+"The following command changes the default sink to card number 4 as in the "
+"previous example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:276
+#, no-wrap
+msgid "set-default-sink 4\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:282
+msgid ""
+"Do not use the `exit` command to exit the command line interface. That will "
+"kill the package:audio/pulseaudio[] daemon. Use kbd:[Ctrl+D] instead."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:285
+#, no-wrap
+msgid "Audio players"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:288
+msgid ""
+"This section introduces some of the software available from the FreeBSD "
+"Ports Collection which can be used for audio playback."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:289
+#, no-wrap
+msgid "Audio players packages"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:295
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:317
+#, no-wrap
+msgid "Elisa"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:296
+#, no-wrap
+msgid "LGPL 3.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:297
+#, no-wrap
+msgid "package:audio/elisa[]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:300
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:329
+#, no-wrap
+msgid "GNOME Music"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:302
+#, no-wrap
+msgid "package:audio/gnome-music[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:304
+#, no-wrap
+msgid "GTK+"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:305
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:342
+#, no-wrap
+msgid "Audacious"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:307
+#, no-wrap
+msgid "package:multimedia/audacious[]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:310
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:360
+#, no-wrap
+msgid "MOC (music on console)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:312
+#, no-wrap
+msgid "package:audio/moc[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:320
+msgid ""
+"Elisa is a music player developed by the KDE community that strives to be "
+"simple and nice to use."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:322
+msgid "To install Elisa, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:326
+#, no-wrap
+msgid "# pkg install elisa\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:333
+msgid ""
+"GNOME Music is the new GNOME music playing application. It aims to combine "
+"an elegant and immersive browsing experience with simple and straightforward "
+"controls."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:335
+msgid "To install GNOME Music, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:339
+#, no-wrap
+msgid "# pkg install gnome-music\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:346
+msgid ""
+"Audacious is an open source audio player. A descendant of XMMS, it plays "
+"your music how you want it, without stealing away your computer's resources "
+"from other tasks."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:348
+msgid "To install Audacious, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:352
+#, no-wrap
+msgid "# pkg install audacious-qt6 audacious-plugins-qt6\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:357
+msgid ""
+"Audacious supports OSS natively, but must be configured in the settings on "
+"the Audio tab."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:363
+msgid ""
+"MOC (music on console) is a console audio player designed to be powerful and "
+"easy to use."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:366
+msgid ""
+"MOC plays smoothly, regardless of system or I/O load, because it handles the "
+"output buffer in a separate thread. It does not cause gaps between files, "
+"because the next file to be played is pre-cached while playing the current "
+"file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:368
+msgid "To install MOC (music on console), execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:372
+#, no-wrap
+msgid "# pkg install moc\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:375
+#, no-wrap
+msgid "Video players"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:378
+msgid ""
+"This section introduces some of the software available from the FreeBSD "
+"Ports Collection which can be used for video playback."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:379
+#, no-wrap
+msgid "Video players packages"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:385
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:407
+#, no-wrap
+msgid "MPlayer"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:387
+#, no-wrap
+msgid "package:multimedia/mplayer[]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:390
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:422
+#, no-wrap
+msgid "SMPlayer"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:392
+#, no-wrap
+msgid "package:multimedia/smplayer[]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:395
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:434
+#, no-wrap
+msgid "VLC media player"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:397
+#, no-wrap
+msgid "package:multimedia/vlc[]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:400
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:448
+#, no-wrap
+msgid "Kodi (XBMC)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:402
+#, no-wrap
+msgid "package:multimedia/kodi[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:404
+#, no-wrap
+msgid "X11"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:411
+msgid ""
+"MPlayer is a multimedia player and encoder suite which runs on many "
+"platforms and works on the command line. It plays a terrific number of "
+"different file formats and codecs including popular DivX, XviD, H.264 "
+"streams as well as DVD and SVCDs along with many popular audio codecs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:413
+msgid "To install MPlayer, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:417
+#, no-wrap
+msgid "# pkg install mplayer\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:420
+msgid "For examples of how MPlayer works see man:mplayer[1]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:425
+msgid ""
+"SMPlayer intends to be a complete front-end for MPlayer, from basic features "
+"like playing videos, DVDs, and VCDs to more advanced features like support "
+"for MPlayer filters and more."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:427
+msgid "To install SMPlayer, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:431
+#, no-wrap
+msgid "# pkg install smplayer\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:439
+msgid ""
+"VLC media player is a highly portable multimedia player for various audio "
+"and video formats (MPEG-1, MPEG-2, MPEG-4, DivX, mp3, ogg, and more) as well "
+"as DVD's, VCD's, and various streaming protocols. It can also be used as a "
+"server to stream in unicast or multicast in IPv4 or IPv6 on a high-bandwidth "
+"network. VLC also has the ability to transcode media on-the-fly for "
+"streaming or saving to disk."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:441
+msgid "To install VLC, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:445
+#, no-wrap
+msgid "# pkg install vlc\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:452
+msgid ""
+"Kodi (formerly known as XBMC) is a free and open source cross-platform media-"
+"player and entertainment hub. It allows users to play and view most videos, "
+"music, podcasts, and other digital media files from local and network "
+"storage media and the internet."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:454
+msgid "To install Kodi, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:458
+#, no-wrap
+msgid "# pkg install kodi\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:461
+#, no-wrap
+msgid "Conferencing and Meetings"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:465
+msgid ""
+"A FreeBSD desktop environment can be used to join video conferences. This "
+"section will explain how to configure the webcam and which videoconferencing "
+"applications are supported on FreeBSD."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:467
+#, no-wrap
+msgid "Setting Up the Webcam"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:470
+msgid ""
+"To allow FreeBSD access to the webcam and perform its configuration it is "
+"necessary to install certain utilities:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:472
+msgid ""
+"package:multimedia/webcamd[] is a daemon that enables the use of hundreds of "
+"different USB based webcam and DVB USB devices."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:473
+msgid ""
+"package:multimedia/pwcview[] is an application that can be used to view the "
+"video stream of the webcam."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:475
+msgid "To install the required utilities, execute:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:479
+#, no-wrap
+msgid "# pkg install webcamd pwcview\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:482
+msgid ""
+"Enable the man:webcamd[8] service in `/etc/rc.conf` to start it at system "
+"boot:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:486
+#, no-wrap
+msgid "# sysrc webcamd_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:490
+msgid ""
+"The user must belong to the `webcamd` group. To add the user to `webcamd` "
+"group execute the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:494
+#, no-wrap
+msgid "# pw groupmod webcamd -m username\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:497
+msgid ""
+"Since package:multimedia/webcamd[] needs the man:cuse[3] module this module "
+"must be loaded by executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:501
+#, no-wrap
+msgid "# kldload cuse\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:504
+msgid "To load man:cuse[3] at system boot, execute the command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:508
+#, no-wrap
+msgid "# sysrc kld_list += \"cuse\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:511
+msgid ""
+"Once the utilities have been installed the list of available webcams can be "
+"shown with man:webcamd[8]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:515
+#, no-wrap
+msgid "# webcamd -l\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:523
+#, no-wrap
+msgid ""
+"webcamd [-d ugen0.2] -N SunplusIT-Inc-HP-TrueVision-HD-Camera -S unknown -M 0 <.>\n"
+"webcamd [-d ugen1.3] -N Realtek-802-11n-WLAN-Adapter -S 00e04c000001 -M 0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:525
+msgid "Available webcam"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:527
+msgid "Configure the available webcam executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:531
+#, no-wrap
+msgid "# sysrc webcamd_0_flags=\"-d ugen0.2\" <.>\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:537
+msgid ""
+"Note here that if this is a plug-and-play USB webcam, changing the USB port "
+"to which it is connected will change the output from `webcamd -l`, and the "
+"entry in rc.conf might need to be updated. For laptops that use USB "
+"integrated webcams, this should not be an issue."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:540
+msgid ""
+"The man:webcamd[8] service must be started by executing the following "
+"command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:544
+#, no-wrap
+msgid "# service webcamd start\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:552
+#, no-wrap
+msgid ""
+"Starting webcamd.\n"
+"webcamd 1616 - - Attached to ugen0.2[0]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:556
+msgid ""
+"package:multimedia/pwcview[] can be used to check the proper functioning of "
+"the webcam. The following command can be used to execute package:multimedia/"
+"pwcview[]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:560
+#, no-wrap
+msgid "% pwcview -f 30 -s vga\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:563
+msgid "Then package:multimedia/pwcview[] will display the webcam:"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:564
+#, no-wrap
+msgid "pwcview showing Absolute FreeBSD 3rd edition as an example"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:564
+#, no-wrap
+msgid "pwcview.png"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:567
+#, no-wrap
+msgid "Meetings software status"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:570
+msgid ""
+"FreeBSD currently supports the following tools used to carry out "
+"videoconferences."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:571
+#, no-wrap
+msgid "Meeting software"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:574
+#, no-wrap
+msgid "Firefox status"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:574
+#, no-wrap
+msgid "Chromium status"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:576
+#, no-wrap
+msgid "Website"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:577
+#, no-wrap
+msgid "Microsoft Teams"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:578
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:583
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:593
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:598
+#, no-wrap
+msgid "Does not work"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:579
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:584
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:588
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:589
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:594
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:599
+#, no-wrap
+msgid "Works"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:581
+#, no-wrap
+msgid "link:https://teams.live.com[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:582
+#, no-wrap
+msgid "Google Meet"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:586
+#, no-wrap
+msgid "link:https://meet.google.com/[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:587
+#, no-wrap
+msgid "Zoom"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:591
+#, no-wrap
+msgid "link:https://zoom.us[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:592
+#, no-wrap
+msgid "Jitsi"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:596
+#, no-wrap
+msgid "link:https://meet.jit.si/[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:597
+#, no-wrap
+msgid "BigBlueButton"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:601
+#, no-wrap
+msgid "link:https://bigbluebutton.org/[]"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:604
+#, no-wrap
+msgid "Image Scanners"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:607
+msgid ""
+"In FreeBSD, access to image scanners is provided by link:http://www.sane-"
+"project.org[SANE (Scanner Access Now Easy)], which is available in the "
+"FreeBSD Ports Collection."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:609
+#, no-wrap
+msgid "Checking the Scanner"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:612
+msgid ""
+"Before attempting any configuration it is important to check the scanner is "
+"supported by SANE."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:614
+msgid ""
+"With the scanner connected, run the following command to get all connected "
+"USB devices:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:618
+#, no-wrap
+msgid "# usbconfig list\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:627
+#, no-wrap
+msgid ""
+"ugen4.2: <LITE-ON Technology USB NetVista Full Width Keyboard.> at usbus4, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON (70mA)\n"
+"ugen4.3: <Logitech USB Optical Mouse> at usbus4, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON (100mA)\n"
+"ugen3.2: <HP Deskjet 1050 J410 series> at usbus3, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (2mA)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:630
+msgid "Run the following command to obtain the `idVendor` and the `idProduct`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:634
+#, no-wrap
+msgid "# usbconfig -d 3.2 dump_device_desc\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:639
+msgid ""
+"Note here that the scanner is a plug-and-play device, and changing the USB "
+"port to which it is connected will change the output from `usbconfig list`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:646
+#, no-wrap
+msgid "ugen3.2: <HP Deskjet 1050 J410 series> at usbus3, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (2mA)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:660
+#, no-wrap
+msgid ""
+"bLength = 0x0012\n"
+"bDescriptorType = 0x0001\n"
+"bcdUSB = 0x0200\n"
+"bDeviceClass = 0x0000 <Probed by interface class>\n"
+"bDeviceSubClass = 0x0000\n"
+"bDeviceProtocol = 0x0000\n"
+"bMaxPacketSize0 = 0x0040\n"
+"idVendor = 0x03f0\n"
+"idProduct = 0x8911\n"
+"bcdDevice = 0x0100\n"
+"iManufacturer = 0x0001 <HP>\n"
+"iProduct = 0x0002 <Deskjet 1050 J410 series>\n"
+"bNumConfigurations = 0x0001\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:663
+msgid ""
+"Once the `idVendor` and the `idProduct` have been obtained, it is necessary "
+"to check in the link:http://www.sane-project.org/lists/sane-mfgs-cvs."
+"html[list of supported devices of SANE] if the scanner is supported by "
+"filtering by the idProduct."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:665
+#, no-wrap
+msgid "SANE Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:669
+msgid ""
+"SANE provides the access to the scanner via backends. To be able to scan "
+"with FreeBSD the package:graphics/sane-backends[] package must be installed "
+"by running the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:673
+#, no-wrap
+msgid "# pkg install sane-backends\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:679
+msgid ""
+"Some USB scanners require firmware to be loaded. Like the HP scanner used "
+"in the example above, which needs the package package:print/hplip[] "
+"installed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:682
+msgid ""
+"After installing the necessary packages man:devd[8] must be configured to "
+"allow FreeBSD access to the scanner."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:684
+msgid ""
+"Add the `saned.conf` file to [.filename]#/usr/local/etc/devd/saned.conf# "
+"with the following content:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:696
+#, no-wrap
+msgid ""
+"notify 100 {\n"
+" match \"system\" \"USB\";\n"
+" match \"subsystem\" \"INTERFACE\";\n"
+" match \"type\" \"ATTACH\";\n"
+" match \"cdev\" \"ugen[0-9].[0-9]\";\n"
+" match \"vendor\" \"0x03f0\"; <.>\n"
+" match \"product\" \"0x8911\"; <.>\n"
+" action \"chown -L cups:saned /dev/\\$cdev && chmod -L 660 /dev/\\$cdev\";\n"
+"};\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:699
+msgid ""
+"`vendor`: Is the idVendor obtained previously by running the `usbconfig -d "
+"3.2 dump_device_desc` command."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:700
+msgid ""
+"`product`: Is the idProduct obtained previously by running the `usbconfig -d "
+"3.2 dump_device_desc` command."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:702
+msgid ""
+"After that man:devd[8] must be restarted by running the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:706
+#, no-wrap
+msgid "# service devd restart\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:709
+msgid ""
+"The SANE backends include man:scanimage[1] which can be used to list the "
+"devices and perform an image acquisition."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:711
+msgid ""
+"Execute man:scanimage[1] with `-L` argument to list the scanner devices:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:715
+#, no-wrap
+msgid "# scanimage -L\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:722
+#, no-wrap
+msgid "device `hpaio:/usb/Deskjet_1050_J410_series?serial=XXXXXXXXXXXXXX' is a Hewlett-Packard Deskjet_1050_J410_series all-in-one\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:725
+msgid ""
+"If man:scanimage[1] is not able to identify the scanner, this message will "
+"appear:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:732
+#, no-wrap
+msgid ""
+"No scanners were identified. If you were expecting something different,\n"
+"check that the scanner is plugged in, turned on and detected by the\n"
+"sane-find-scanner tool (if appropriate). Please read the documentation\n"
+"which came with this software (README, FAQ, manpages).\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:735
+msgid ""
+"Once man:scanimage[1] sees the scanner, the configuration is complete and "
+"the scanner is now ready to use."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:737
+msgid ""
+"To activate the service and have it run at boot execute the following "
+"command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:741
+#, no-wrap
+msgid "# sysrc saned_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:744
+msgid ""
+"While man:scanimage[1] can be used to perform an image acquisition from the "
+"command line, it is often preferable to use a graphical interface to perform "
+"image scanning."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:745
+#, no-wrap
+msgid "Graphical scanner programs"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:751
+#, no-wrap
+msgid "skanlite"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:754
+#, no-wrap
+msgid "graphics/skanlite"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:755
+#, no-wrap
+msgid "GNOME Simple Scan"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:756
+#, no-wrap
+msgid "GPL 3.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:758
+#, no-wrap
+msgid "graphics/simple-scan"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:759
+#, no-wrap
+msgid "XSANE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/multimedia/_index.adoc:762
+#, no-wrap
+msgid "graphics/xsane"
+msgstr ""
diff --git a/documentation/content/en/books/handbook/network-servers/_index.adoc b/documentation/content/en/books/handbook/network-servers/_index.adoc
index 1b8d48eb95..c47585f60f 100644
--- a/documentation/content/en/books/handbook/network-servers/_index.adoc
+++ b/documentation/content/en/books/handbook/network-servers/_index.adoc
@@ -1,13 +1,13 @@
---
-title: Chapter 30. Network Servers
+title: Chapter 32. Network Servers
part: IV. Network Communication
prev: books/handbook/mail
next: books/handbook/firewalls
description: This chapter covers some of the more frequently used network services on UNIX systems
tags: ["network", "servers", "inetd", "NFS", "NIS", "LDAP", "DHCP", "DNS", "Apache HTTP", "FTP", "Samba", "NTP", "iSCSI"]
showBookMenu: true
-weight: 35
-path: "/books/handbook/"
+weight: 37
+path: "/books/handbook/network-servers/"
---
[[network-servers]]
@@ -18,7 +18,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 30
+:sectnumoffset: 32
:partnums:
:source-highlighter: rouge
:experimental:
@@ -92,8 +92,8 @@ This section covers the basics of configuring inetd.
Configuration of inetd is done by editing [.filename]#/etc/inetd.conf#.
Each line of this configuration file represents an application which can be started by inetd.
-By default, every line starts with a comment (`#`), meaning that inetd is not listening for any applications.
-To configure inetd to listen for an application's connections, remove the `#` at the beginning of the line for that application.
+By default, every line starts with a comment (`+#+`), meaning that inetd is not listening for any applications.
+To configure inetd to listen for an application's connections, remove the `+#+` at the beginning of the line for that application.
After saving your edits, configure inetd to start at system boot by editing [.filename]#/etc/rc.conf#:
@@ -123,7 +123,7 @@ Once inetd is started, it needs to be notified whenever a modification is made t
====
-Typically, the default entry for an application does not need to be edited beyond removing the `#`.
+Typically, the default entry for an application does not need to be edited beyond removing the `+#+`.
In some situations, it may be appropriate to edit the default entry.
As an example, this is the default entry for man:ftpd[8] over IPv4:
@@ -404,6 +404,9 @@ To make subsequent [.filename]#/etc/exports# edits take effect immediately, forc
# service mountd reload
....
+Refer to man:zfs-share[8] for a description of exporting ZFS datasets via NFS using the `sharenfs` ZFS property instead of the man:exports[5] file.
+
+Refer to man:nfsv4[4] for a description of an NFS Version 4 setup.
=== Configuring the Client
@@ -444,20 +447,18 @@ Refer to man:fstab[5] for a description of all available options.
=== Locking
Some applications require file locking to operate correctly.
-To enable locking, add these lines to [.filename]#/etc/rc.conf# on both the client and server:
+To enable locking, execute the following command on both the client and server:
-[.programlisting]
+[source,shell]
....
-rpc_lockd_enable="YES"
-rpc_statd_enable="YES"
+# sysrc rpc_lockd_enable="YES"
....
-Then start the applications:
+Then start the man:rpc.lockd[8] service:
[source,shell]
....
# service lockd start
-# service statd start
....
If locking is not required on the server, the NFS client can be configured to lock locally by including `-L` when running mount.
@@ -641,7 +642,7 @@ Think of the NIS domain name as the name for a group of hosts.
Some organizations choose to use their Internet domain name for their NIS domain name.
This is not recommended as it can cause confusion when trying to debug network problems.
The NIS domain name should be unique within the network and it is helpful if it describes the group of machines it represents.
-For example, the Art department at Acme Inc. might be in the "acme-art"NIS domain.
+For example, the Art department at Acme Inc. might be in the "acme-art" NIS domain.
This example will use the domain name `test-domain`.
However, some non-FreeBSD operating systems require the NIS domain name to be the same as the Internet domain name.
@@ -758,7 +759,7 @@ ellington has been setup as an YP master server without any errors.
This will create [.filename]#/var/yp/Makefile# from [.filename]#/var/yp/Makefile.dist#.
By default, this file assumes that the environment has a single NIS server with only FreeBSD clients.
-Since `test-domain` has a slave server, edit this line in [.filename]#/var/yp/Makefile# so that it begins with a comment (`#`):
+Since `test-domain` has a slave server, edit this line in [.filename]#/var/yp/Makefile# so that it begins with a comment (`+#+`):
[.programlisting]
....
@@ -920,7 +921,7 @@ Since RPC is a broadcast-based service, any system running ypbind within the sam
To prevent unauthorized transactions, man:ypserv[8] supports a feature called "securenets" which can be used to restrict access to a given set of hosts.
By default, this information is stored in [.filename]#/var/yp/securenets#, unless man:ypserv[8] is started with `-p` and an alternate path.
This file contains entries that consist of a network specification and a network mask separated by white space.
-Lines starting with `#` are considered to be comments.
+Lines starting with `+"#"+` are considered to be comments.
A sample [.filename]#securenets# might look like this:
[.programlisting]
@@ -1040,7 +1041,7 @@ When adding a new machine, login restrictions must be defined for all netgroups.
When a new user is added, the account must be added to one or more netgroups.
If the NIS setup is planned carefully, only one central configuration file needs modification to grant or deny access to machines.
-The first step is the initialization of the NIS`netgroup` map.
+The first step is the initialization of the NIS `netgroup` map.
In FreeBSD, this map is not created by default.
On the NIS master server, use an editor to create a map named [.filename]#/var/yp/netgroup#.
@@ -1056,7 +1057,7 @@ INTERNS (,able,test-domain) (,baker,test-domain)
....
Each entry configures a netgroup. The first column in an entry is the name of the netgroup.
-Each set of brackets represents either a group of one or more users or the name of another netgroup.
+Each set of parentheses represents either a group of one or more users or the name of another netgroup.
When specifying a user, the three comma-delimited fields inside each group represent:
. The name of the host(s) where the other fields representing the user are valid. If a hostname is not specified, the entry is valid on all hosts.
@@ -2002,6 +2003,33 @@ freebsd.org. (A)
;; Chase successful
....
+=== Authoritative Name Server Configuration
+FreeBSD does not provide authoritative name server software in the base system.
+Users are encouraged to install third party applications, like package:dns/nsd[] or package:dns/bind918[] package or port.
+
+[[network-zeroconf]]
+== Zero-configuration networking (mDNS/DNS-SD)
+
+https://en.wikipedia.org/wiki/Zero-configuration_networking[Zero-configuration networking] (sometimes referred to as zeroconf) is a set of technologies, which simplify network configuration by providing:
+
+* automatic assignment of numeric network addresses (mDNS),
+* automatic distribution and resolution of hostnames (mDNS), and
+* automatic discovery of service instances (DNS-SD).
+
+=== Configuring and Starting Avahi
+
+One of the popular implementations of zeroconf is https://avahi.org/[Avahi].
+Avahi can be installed and configured with the following commands:
+
+[source,shell]
+....
+# pkg install avahi-app nss_mdns
+# grep -q '^hosts:.*\<mdns\>' /etc/nsswitch.conf || sed -i "" 's/^hosts: .*/& mdns/' /etc/nsswitch.conf
+# service dbus enable
+# service avahi-daemon enable
+# service dbus start
+# service avahi-daemon start
+....
[[network-apache]]
== Apache HTTP Server
@@ -2015,14 +2043,14 @@ For more detailed information about Apache 2.X and its configuration directives,
=== Configuring and Starting Apache
In FreeBSD, the main Apache HTTP Server configuration file is installed as [.filename]#/usr/local/etc/apache2x/httpd.conf#, where _x_ represents the version number.
-This ASCII text file begins comment lines with a `#`.
+This ASCII text file begins comment lines with a `+#+`.
The most frequently modified directives are:
`ServerRoot "/usr/local"`::
Specifies the default directory hierarchy for the Apache installation.
Binaries are stored in the [.filename]#bin# and [.filename]#sbin# subdirectories of the server root and configuration files are stored in the [.filename]#etc/apache2x# subdirectory.
-`ServerAdmin you@example.com`::
+`ServerAdmin \you@example.com`::
Change this to the email address to receive problems with the server.
This address also appears on some server-generated pages, such as error documents.
@@ -2115,7 +2143,7 @@ This section describes three of the most commonly used modules.
==== SSL support
-At one in point in time, support for SSL inside of Apache required a secondary module called [.filename]#mod_ssl#.
+At one point, support for SSL inside of Apache required a secondary module called [.filename]#mod_ssl#.
This is no longer the case and the default install of Apache comes with SSL built into the web server.
An example of how to enable support for SSL websites is available in the installed file, [.filename]#httpd-ssl.conf# inside of the [.filename]#/usr/local/etc/apache24/extra# directory
Inside this directory is also a sample file called named [.filename]#ssl.conf-sample#.
@@ -2238,7 +2266,7 @@ The first is to install the full PHP binary and running the command to gain the
[source,shell]
....
-# php -i |less
+# php -i | less
....
It is necessary to pass the output to a pager, such as the `more` or `less` to easier digest the amount of output.
@@ -2443,10 +2471,10 @@ It can be added to non-Microsoft(R) Windows(R) systems by installing the Samba c
The protocol allows clients to access shared data and printers.
These shares can be mapped as a local disk drive and shared printers can be used as if they were local printers.
-On FreeBSD, the Samba client libraries can be installed using the package:net/samba413[] port or package.
+On FreeBSD, the Samba client libraries can be installed using the package:net/samba416[] port or package.
The client provides the ability for a FreeBSD system to access SMB/CIFS shares in a Microsoft(R) Windows(R) network.
-A FreeBSD system can also be configured to act as a Samba server by installing the same package:net/samba413[] port or package.
+A FreeBSD system can also be configured to act as a Samba server by installing the same package:net/samba416[] port or package.
This allows the administrator to create SMB/CIFS shares on the FreeBSD system which can be accessed by clients running Microsoft(R) Windows(R) or the Samba client libraries.
=== Server Configuration
@@ -2527,7 +2555,7 @@ Map existing FreeBSD user accounts using man:pdbedit[8]:
[source,shell]
....
-# pdbedit -a username
+# pdbedit -a -u username
....
This section has only mentioned the most commonly used settings.
@@ -2758,7 +2786,7 @@ This section describes how to configure a FreeBSD system as a target or an initi
To configure an iSCSI target, create the [.filename]#/etc/ctl.conf# configuration file, add a line to [.filename]#/etc/rc.conf# to make sure the man:ctld[8] daemon is automatically started at boot, and then start the daemon.
The following is an example of a simple [.filename]#/etc/ctl.conf# configuration file.
-Refer to man:ctl.conf[5] for a more complete description of this file's available options.
+Refer to man:ctl.conf[5] for a complete description of this file's available options.
[.programlisting]
....
diff --git a/documentation/content/en/books/handbook/network-servers/_index.po b/documentation/content/en/books/handbook/network-servers/_index.po
new file mode 100644
index 0000000000..b8922fcdb2
--- /dev/null
+++ b/documentation/content/en/books/handbook/network-servers/_index.po
@@ -0,0 +1,6329 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1
+#, no-wrap
+msgid "This chapter covers some of the more frequently used network services on UNIX systems"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1
+#, no-wrap
+msgid "IV. Network Communication"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1
+#, no-wrap
+msgid "Chapter 32. Network Servers"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:14
+#, no-wrap
+msgid "Network Servers"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:57
+msgid ""
+"This chapter covers some of the more frequently used network services on "
+"UNIX(R) systems. This includes installing, configuring, testing, and "
+"maintaining many different types of network services. Example configuration "
+"files are included throughout this chapter for reference."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:59
+msgid "By the end of this chapter, readers will know:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:61
+msgid "How to manage the inetd daemon."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:62
+msgid "How to set up the Network File System (NFS)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:63
+msgid ""
+"How to set up the Network Information Server (NIS) for centralizing and "
+"sharing user accounts."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:64
+msgid "How to set FreeBSD up to act as an LDAP server or client"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:65
+msgid "How to set up automatic network settings using DHCP."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:66
+msgid "How to set up a Domain Name Server (DNS)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:67
+msgid "How to set up the Apache HTTP Server."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:68
+msgid "How to set up a File Transfer Protocol (FTP) server."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:69
+msgid ""
+"How to set up a file and print server for Windows(R) clients using Samba."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:70
+msgid ""
+"How to synchronize the time and date, and set up a time server using the "
+"Network Time Protocol (NTP)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:71
+msgid "How to set up iSCSI."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:73
+msgid "This chapter assumes a basic knowledge of:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:75
+msgid "[.filename]#/etc/rc# scripts."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:76
+msgid "Network terminology."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:77
+msgid ""
+"Installation of additional third-party software (crossref:ports[ports,"
+"Installing Applications: Packages and Ports])."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:79
+#, no-wrap
+msgid "The inetd Super-Server"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:85
+msgid ""
+"The man:inetd[8] daemon is sometimes referred to as a Super-Server because "
+"it manages connections for many services. Instead of starting multiple "
+"applications, only the inetd service needs to be started. When a connection "
+"is received for a service that is managed by inetd, it determines which "
+"program the connection is destined for, spawns a process for that program, "
+"and delegates the program a socket. Using inetd for services that are not "
+"heavily used can reduce system load, when compared to running each daemon "
+"individually in stand-alone mode."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:87
+msgid ""
+"Primarily, inetd is used to spawn other daemons, but several trivial "
+"protocols are handled internally, such as chargen, auth, time, echo, "
+"discard, and daytime."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:89
+msgid "This section covers the basics of configuring inetd."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:91
+#, no-wrap
+msgid "Configuration File"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:97
+msgid ""
+"Configuration of inetd is done by editing [.filename]#/etc/inetd.conf#. "
+"Each line of this configuration file represents an application which can be "
+"started by inetd. By default, every line starts with a comment (`+#+`), "
+"meaning that inetd is not listening for any applications. To configure "
+"inetd to listen for an application's connections, remove the `+#+` at the "
+"beginning of the line for that application."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:99
+msgid ""
+"After saving your edits, configure inetd to start at system boot by editing "
+"[.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:103
+#, no-wrap
+msgid "inetd_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:106
+msgid ""
+"To start inetd now, so that it listens for the service you configured, type:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:110
+#, no-wrap
+msgid "# service inetd start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:113
+msgid ""
+"Once inetd is started, it needs to be notified whenever a modification is "
+"made to [.filename]#/etc/inetd.conf#:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:115
+#, no-wrap
+msgid "Reloading the inetd Configuration File"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:122
+#, no-wrap
+msgid "# service inetd reload\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:128
+msgid ""
+"Typically, the default entry for an application does not need to be edited "
+"beyond removing the `+#+`. In some situations, it may be appropriate to "
+"edit the default entry."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:130
+msgid "As an example, this is the default entry for man:ftpd[8] over IPv4:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:134
+#, no-wrap
+msgid "ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:137
+msgid "The seven columns in an entry are as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:147
+#, no-wrap
+msgid ""
+"service-name\n"
+"socket-type\n"
+"protocol\n"
+"{wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]]\n"
+"user[:group][/login-class]\n"
+"server-program\n"
+"server-program-arguments\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:150
+msgid "where:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:151
+#, no-wrap
+msgid "service-name"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:156
+msgid ""
+"The service name of the daemon to start. It must correspond to a service "
+"listed in [.filename]#/etc/services#. This determines which port inetd "
+"listens on for incoming connections to that service. When using a custom "
+"service, it must first be added to [.filename]#/etc/services#."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:157
+#, no-wrap
+msgid "socket-type"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:160
+msgid ""
+"Either `stream`, `dgram`, `raw`, or `seqpacket`. Use `stream` for TCP "
+"connections and `dgram` for UDP services."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:161
+#, no-wrap
+msgid "protocol"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:163
+msgid "Use one of the following protocol names:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:168
+#, no-wrap
+msgid "Protocol Name"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:171
+#, no-wrap
+msgid "Explanation"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:172
+#, no-wrap
+msgid "tcp or tcp4"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:174
+#, no-wrap
+msgid "TCP IPv4"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:175
+#, no-wrap
+msgid "udp or udp4"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:177
+#, no-wrap
+msgid "UDP IPv4"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:178
+#, no-wrap
+msgid "tcp6"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:180
+#, no-wrap
+msgid "TCP IPv6"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:181
+#, no-wrap
+msgid "udp6"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:183
+#, no-wrap
+msgid "UDP IPv6"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:184
+#, no-wrap
+msgid "tcp46"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:186
+#, no-wrap
+msgid "Both TCP IPv4 and IPv6"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:187
+#, no-wrap
+msgid "udp46"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:188
+#, no-wrap
+msgid "Both UDP IPv4 and IPv6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:193
+msgid ""
+"{wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-"
+"ip]]]:: In this field, `wait` or `nowait` must be specified. `max-child`, "
+"`max-connections-per-ip-per-minute` and `max-child-per-ip` are optional."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:197
+msgid ""
+"`wait|nowait` indicates whether or not the service is able to handle its own "
+"socket. `dgram` socket types must use `wait` while `stream` daemons, which "
+"are usually multi-threaded, should use `nowait`. `wait` usually hands off "
+"multiple sockets to a single daemon, while `nowait` spawns a child daemon "
+"for each new socket."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:201
+msgid ""
+"The maximum number of child daemons inetd may spawn is set by `max-child`. "
+"For example, to limit ten instances of the daemon, place a `/10` after "
+"`nowait`. Specifying `/0` allows an unlimited number of children."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:207
+msgid ""
+"`max-connections-per-ip-per-minute` limits the number of connections from "
+"any particular IP address per minute. Once the limit is reached, further "
+"connections from this IP address will be dropped until the end of the "
+"minute. For example, a value of `/10` would limit any particular IP address "
+"to ten connection attempts per minute. `max-child-per-ip` limits the number "
+"of child processes that can be started on behalf on any single IP address at "
+"any moment. These options can limit excessive resource consumption and help "
+"to prevent Denial of Service attacks."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:209
+msgid "An example can be seen in the default settings for man:fingerd[8]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:213
+#, no-wrap
+msgid "finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -k -s\n"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:215
+#, no-wrap
+msgid "user"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:218
+msgid ""
+"The username the daemon will run as. Daemons typically run as `root`, "
+"`daemon`, or `nobody`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:219
+#, no-wrap
+msgid "server-program"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:222
+msgid ""
+"The full path to the daemon. If the daemon is a service provided by inetd "
+"internally, use `internal`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:223
+#, no-wrap
+msgid "server-program-arguments"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:226
+msgid ""
+"Used to specify any command arguments to be passed to the daemon on "
+"invocation. If the daemon is an internal service, use `internal`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:228
+#, no-wrap
+msgid "Command-Line Options"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:233
+msgid ""
+"Like most server daemons, inetd has a number of options that can be used to "
+"modify its behavior. By default, inetd is started with `-wW -C 60`. These "
+"options enable TCP wrappers for all services, including internal services, "
+"and prevent any IP address from requesting any service more than 60 times "
+"per minute."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:236
+msgid ""
+"To change the default options which are passed to inetd, add an entry for "
+"`inetd_flags` in [.filename]#/etc/rc.conf#. If inetd is already running, "
+"restart it with `service inetd restart`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:238
+msgid "The available rate limiting options are:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:239
+#, no-wrap
+msgid "-c maximum"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:242
+msgid ""
+"Specify the default maximum number of simultaneous invocations of each "
+"service, where the default is unlimited. May be overridden on a per-service "
+"basis by using `max-child` in [.filename]#/etc/inetd.conf#."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:243
+#, no-wrap
+msgid "-C rate"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:246
+msgid ""
+"Specify the default maximum number of times a service can be invoked from a "
+"single IP address per minute. May be overridden on a per-service basis by "
+"using `max-connections-per-ip-per-minute` in [.filename]#/etc/inetd.conf#."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:247
+#, no-wrap
+msgid "-R rate"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:250
+msgid ""
+"Specify the maximum number of times a service can be invoked in one minute, "
+"where the default is `256`. A rate of `0` allows an unlimited number."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:251
+#, no-wrap
+msgid "-s maximum"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:254
+msgid ""
+"Specify the maximum number of times a service can be invoked from a single "
+"IP address at any one time, where the default is unlimited. May be "
+"overridden on a per-service basis by using `max-child-per-ip` in [."
+"filename]#/etc/inetd.conf#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:256
+msgid ""
+"Additional options are available. Refer to man:inetd[8] for the full list of "
+"options."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:258
+#, no-wrap
+msgid "Security Considerations"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:264
+msgid ""
+"Many of the daemons which can be managed by inetd are not security-"
+"conscious. Some daemons, such as fingerd, can provide information that may "
+"be useful to an attacker. Only enable the services which are needed and "
+"monitor the system for excessive connection attempts. `max-connections-per-"
+"ip-per-minute`, `max-child` and `max-child-per-ip` can be used to limit such "
+"attacks."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:267
+msgid ""
+"By default, TCP wrappers are enabled. Consult man:hosts_access[5] for more "
+"information on placing TCP restrictions on various inetd invoked daemons."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:269
+#, no-wrap
+msgid "Network File System (NFS)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:273
+msgid ""
+"FreeBSD supports the Network File System (NFS), which allows a server to "
+"share directories and files with clients over a network. With NFS, users "
+"and programs can access files on remote systems as if they were stored "
+"locally."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:276
+msgid "NFS has many practical uses. Some of the more common uses include:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:278
+msgid ""
+"Data that would otherwise be duplicated on each client can be kept in a "
+"single location and accessed by clients on the network."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:279
+msgid ""
+"Several clients may need access to the [.filename]#/usr/ports/distfiles# "
+"directory. Sharing that directory allows for quick access to the source "
+"files without having to download them to each client."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:280
+msgid ""
+"On large networks, it is often more convenient to configure a central NFS "
+"server on which all user home directories are stored. Users can log into a "
+"client anywhere on the network and have access to their home directories."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:281
+msgid ""
+"Administration of NFS exports is simplified. For example, there is only one "
+"file system where security or backup policies must be set."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:282
+msgid ""
+"Removable media storage devices can be used by other machines on the "
+"network. This reduces the number of devices throughout the network and "
+"provides a centralized location to manage their security. It is often more "
+"convenient to install software on multiple machines from a centralized "
+"installation media."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:286
+msgid ""
+"NFS consists of a server and one or more clients. The client remotely "
+"accesses the data that is stored on the server machine. In order for this "
+"to function properly, a few processes have to be configured and running."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:288
+msgid "These daemons must be running on the server:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:293
+#, no-wrap
+msgid "Daemon"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:296
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:556
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1005
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1024
+#, no-wrap
+msgid "Description"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:297
+#, no-wrap
+msgid "nfsd"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:299
+#, no-wrap
+msgid "The NFS daemon which services requests from NFS clients."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:300
+#, no-wrap
+msgid "mountd"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:302
+#, no-wrap
+msgid "The NFS mount daemon which carries out requests received from nfsd."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:303
+#, no-wrap
+msgid "rpcbind"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:304
+#, no-wrap
+msgid "This daemon allows NFS clients to discover which port the NFS server is using."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:307
+msgid ""
+"Running man:nfsiod[8] on the client can improve performance, but is not "
+"required."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:309
+#, no-wrap
+msgid "Configuring the Server"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:315
+msgid ""
+"The file systems which the NFS server will share are specified in [."
+"filename]#/etc/exports#. Each line in this file specifies a file system to "
+"be exported, which clients have access to that file system, and any access "
+"options. When adding entries to this file, each exported file system, its "
+"properties, and allowed hosts must occur on a single line. If no clients "
+"are listed in the entry, then any client on the network can mount that file "
+"system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:320
+msgid ""
+"The following [.filename]#/etc/exports# entries demonstrate how to export "
+"file systems. The examples can be modified to match the file systems and "
+"client names on the reader's network. There are many options that can be "
+"used in this file, but only a few will be mentioned here. See man:"
+"exports[5] for the full list of options."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:322
+msgid ""
+"This example shows how to export [.filename]#/cdrom# to three hosts named "
+"_alpha_, _bravo_, and _charlie_:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:326
+#, no-wrap
+msgid "/cdrom -ro alpha bravo charlie\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:331
+msgid ""
+"The `-ro` flag makes the file system read-only, preventing clients from "
+"making any changes to the exported file system. This example assumes that "
+"the host names are either in DNS or in [.filename]#/etc/hosts#. Refer to "
+"man:hosts[5] if the network does not have a DNS server."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:336
+msgid ""
+"The next example exports [.filename]#/home# to three clients by IP address. "
+"This can be useful for networks without DNS or [.filename]#/etc/hosts# "
+"entries. The `-alldirs` flag allows subdirectories to be mount points. In "
+"other words, it will not automatically mount the subdirectories, but will "
+"permit the client to mount the directories that are required as needed."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:340
+#, no-wrap
+msgid "/usr/home -alldirs 10.0.0.2 10.0.0.3 10.0.0.4\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:345
+msgid ""
+"This next example exports [.filename]#/a# so that two clients from different "
+"domains may access that file system. The `-maproot=root` allows `root` on "
+"the remote system to write data on the exported file system as `root`. If `-"
+"maproot=root` is not specified, the client's `root` user will be mapped to "
+"the server's `nobody` account and will be subject to the access limitations "
+"defined for `nobody`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:349
+#, no-wrap
+msgid "/a -maproot=root host.example.com box.example.org\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:353
+msgid ""
+"A client can only be specified once per file system. For example, if [."
+"filename]#/usr# is a single file system, these entries would be invalid as "
+"both entries specify the same host:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:359
+#, no-wrap
+msgid ""
+"# Invalid when /usr is one file system\n"
+"/usr/src client\n"
+"/usr/ports client\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:362
+msgid "The correct format for this situation is to use one entry:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:366
+#, no-wrap
+msgid "/usr/src /usr/ports client\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:369
+msgid ""
+"The following is an example of a valid export list, where [.filename]#/usr# "
+"and [.filename]#/exports# are local file systems:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:380
+#, no-wrap
+msgid ""
+"# Export src and ports to client01 and client02, but only\n"
+"# client01 has root privileges on it\n"
+"/usr/src /usr/ports -maproot=root client01\n"
+"/usr/src /usr/ports client02\n"
+"# The client machines have root and can mount anywhere\n"
+"# on /exports. Anyone in the world can mount /exports/obj read-only\n"
+"/exports -alldirs -maproot=root client01 client02\n"
+"/exports/obj -ro\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:383
+msgid ""
+"To enable the processes required by the NFS server at boot time, add these "
+"options to [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:389
+#, no-wrap
+msgid ""
+"rpcbind_enable=\"YES\"\n"
+"nfs_server_enable=\"YES\"\n"
+"mountd_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:392
+msgid "The server can be started now by running this command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:396
+#, no-wrap
+msgid "# service nfsd start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:401
+msgid ""
+"Whenever the NFS server is started, mountd also starts automatically. "
+"However, mountd only reads [.filename]#/etc/exports# when it is started. To "
+"make subsequent [.filename]#/etc/exports# edits take effect immediately, "
+"force mountd to reread it:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:405
+#, no-wrap
+msgid "# service mountd reload\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:408
+msgid "Refer to man:nfsv4[4] for a description of an NFS Version 4 setup."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:409
+#, no-wrap
+msgid "Configuring the Client"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:412
+msgid ""
+"To enable NFS clients, set this option in each client's [.filename]#/etc/rc."
+"conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:416
+#, no-wrap
+msgid "nfs_client_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:419
+msgid "Then, run this command on each NFS client:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:423
+#, no-wrap
+msgid "# service nfsclient start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:428
+msgid ""
+"The client now has everything it needs to mount a remote file system. In "
+"these examples, the server's name is `server` and the client's name is "
+"`client`. To mount [.filename]#/home# on `server` to the [.filename]#/mnt# "
+"mount point on `client`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:432
+#, no-wrap
+msgid "# mount server:/home /mnt\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:435
+msgid ""
+"The files and directories in [.filename]#/home# will now be available on "
+"`client`, in the [.filename]#/mnt# directory."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:437
+msgid ""
+"To mount a remote file system each time the client boots, add it to [."
+"filename]#/etc/fstab#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:441
+#, no-wrap
+msgid "server:/home\t/mnt\tnfs\trw\t0\t0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:444
+msgid "Refer to man:fstab[5] for a description of all available options."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:445
+#, no-wrap
+msgid "Locking"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:449
+msgid ""
+"Some applications require file locking to operate correctly. To enable "
+"locking, execute the following command on both the client and server:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:453
+#, no-wrap
+msgid "# sysrc rpc_lockd_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:456
+msgid "Then start the service:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:460
+#, no-wrap
+msgid "# service lockd start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:464
+msgid ""
+"If locking is not required on the server, the NFS client can be configured "
+"to lock locally by including `-L` when running mount. Refer to man:"
+"mount_nfs[8] for further details."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:466
+#, no-wrap
+msgid "Automating Mounts with man:autofs[5]"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:473
+msgid ""
+"The man:autofs[5] automount facility is supported starting with FreeBSD 10.1-"
+"RELEASE. To use the automounter functionality in older versions of FreeBSD, "
+"use man:amd[8] instead. This chapter only describes the man:autofs[5] "
+"automounter."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:479
+msgid ""
+"The man:autofs[5] facility is a common name for several components that, "
+"together, allow for automatic mounting of remote and local filesystems "
+"whenever a file or directory within that file system is accessed. It "
+"consists of the kernel component, man:autofs[5], and several userspace "
+"applications: man:automount[8], man:automountd[8] and man:autounmountd[8]. "
+"It serves as an alternative for man:amd[8] from previous FreeBSD releases. "
+"amd is still provided for backward compatibility purposes, as the two use "
+"different map formats; the one used by autofs is the same as with other SVR4 "
+"automounters, such as the ones in Solaris, MacOS X, and Linux."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:481
+msgid ""
+"The man:autofs[5] virtual filesystem is mounted on specified mountpoints by "
+"man:automount[8], usually invoked during boot."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:485
+msgid ""
+"Whenever a process attempts to access a file within the man:autofs[5] "
+"mountpoint, the kernel will notify man:automountd[8] daemon and pause the "
+"triggering process. The man:automountd[8] daemon will handle kernel "
+"requests by finding the proper map and mounting the filesystem according to "
+"it, then signal the kernel to release blocked process. The man:"
+"autounmountd[8] daemon automatically unmounts automounted filesystems after "
+"some time, unless they are still being used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:488
+msgid ""
+"The primary autofs configuration file is [.filename]#/etc/auto_master#. It "
+"assigns individual maps to top-level mounts. For an explanation of [."
+"filename]#auto_master# and the map syntax, refer to man:auto_master[5]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:492
+msgid ""
+"There is a special automounter map mounted on [.filename]#/net#. When a "
+"file is accessed within this directory, man:autofs[5] looks up the "
+"corresponding remote mount and automatically mounts it. For instance, an "
+"attempt to access a file within [.filename]#/net/foobar/usr# would tell man:"
+"automountd[8] to mount the [.filename]#/usr# export from the host `foobar`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:493
+#, no-wrap
+msgid "Mounting an Export with man:autofs[5]"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:497
+msgid ""
+"In this example, `showmount -e` shows the exported file systems that can be "
+"mounted from the NFS server, `foobar`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:505
+#, no-wrap
+msgid ""
+"% showmount -e foobar\n"
+"Exports list on foobar:\n"
+"/usr 10.10.10.0\n"
+"/a 10.10.10.0\n"
+"% cd /net/foobar/usr\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:512
+msgid ""
+"The output from `showmount` shows [.filename]#/usr# as an export. When "
+"changing directories to [.filename]#/host/foobar/usr#, man:automountd[8] "
+"intercepts the request and attempts to resolve the hostname `foobar`. If "
+"successful, man:automountd[8] automatically mounts the source export."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:514
+msgid ""
+"To enable man:autofs[5] at boot time, add this line to [.filename]#/etc/rc."
+"conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:518
+#, no-wrap
+msgid "autofs_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:521
+msgid "Then man:autofs[5] can be started by running:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:527
+#, no-wrap
+msgid ""
+"# service automount start\n"
+"# service automountd start\n"
+"# service autounmountd start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:531
+msgid ""
+"The man:autofs[5] map format is the same as in other operating systems. "
+"Information about this format from other sources can be useful, like the "
+"http://web.archive.org/web/20160813071113/http://images.apple.com/business/"
+"docs/Autofs.pdf[Mac OS X document]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:533
+msgid ""
+"Consult the man:automount[8], man:automountd[8], man:autounmountd[8], and "
+"man:auto_master[5] manual pages for more information."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:535
+#, no-wrap
+msgid "Network Information System (NIS)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:540
+msgid ""
+"Network Information System (NIS) is designed to centralize administration of "
+"UNIX(R)-like systems such as Solaris(TM), HP-UX, AIX(R), Linux, NetBSD, "
+"OpenBSD, and FreeBSD. NIS was originally known as Yellow Pages but the name "
+"was changed due to trademark issues. This is the reason why NIS commands "
+"begin with `yp`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:543
+msgid ""
+"NIS is a Remote Procedure Call (RPC)-based client/server system that allows "
+"a group of machines within an NIS domain to share a common set of "
+"configuration files. This permits a system administrator to set up NIS "
+"client systems with only minimal configuration data and to add, remove, or "
+"modify configuration data from a single location."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:545
+msgid "FreeBSD uses version 2 of the NIS protocol."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:546
+#, no-wrap
+msgid "NIS Terms and Processes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:549
+msgid "Table 28.1 summarizes the terms and important processes used by NIS:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:550
+#, no-wrap
+msgid "NIS Terminology"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:554
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1893
+#, no-wrap
+msgid "Term"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:557
+#, no-wrap
+msgid "NIS domain name"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:559
+#, no-wrap
+msgid "NIS servers and clients share an NIS domain name. Typically, this name does not have anything to do with DNS."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:560
+#, no-wrap
+msgid "man:rpcbind[8]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:562
+#, no-wrap
+msgid "This service enables RPC and must be running in order to run an NIS server or act as an NIS client."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:563
+#, no-wrap
+msgid "man:ypbind[8]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:565
+#, no-wrap
+msgid "This service binds an NIS client to its NIS server. It will take the NIS domain name and use RPC to connect to the server. It is the core of client/server communication in an NIS environment. If this service is not running on a client machine, it will not be able to access the NIS server."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:566
+#, no-wrap
+msgid "man:ypserv[8]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:568
+#, no-wrap
+msgid "This is the process for the NIS server. If this service stops running, the server will no longer be able to respond to NIS requests so hopefully, there is a slave server to take over. Some non-FreeBSD clients will not try to reconnect using a slave server and the ypbind process may need to be restarted on these clients."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:569
+#, no-wrap
+msgid "man:rpc.yppasswdd[8]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:570
+#, no-wrap
+msgid "This process only runs on NIS master servers. This daemon allows NIS clients to change their NIS passwords. If this daemon is not running, users will have to login to the NIS master server and change their passwords there."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:572
+#, no-wrap
+msgid "Machine Types"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:575
+msgid "There are three types of hosts in an NIS environment:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:577
+msgid "NIS master server"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:581
+msgid ""
+"This server acts as a central repository for host configuration information "
+"and maintains the authoritative copy of the files used by all of the NIS "
+"clients. The [.filename]#passwd#, [.filename]#group#, and other various "
+"files used by NIS clients are stored on the master server. While it is "
+"possible for one machine to be an NIS master server for more than one NIS "
+"domain, this type of configuration will not be covered in this chapter as it "
+"assumes a relatively small-scale NIS environment."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:582
+msgid "NIS slave servers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:585
+msgid ""
+"NIS slave servers maintain copies of the NIS master's data files in order to "
+"provide redundancy. Slave servers also help to balance the load of the "
+"master server as NIS clients always attach to the NIS server which responds "
+"first."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:586
+msgid "NIS clients"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:588
+msgid "NIS clients authenticate against the NIS server during log on."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:592
+msgid ""
+"Information in many files can be shared using NIS. The [.filename]#master."
+"passwd#, [.filename]#group#, and [.filename]#hosts# files are commonly "
+"shared via NIS. Whenever a process on a client needs information that would "
+"normally be found in these files locally, it makes a query to the NIS server "
+"that it is bound to instead."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:593
+#, no-wrap
+msgid "Planning Considerations"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:599
+msgid ""
+"This section describes a sample NIS environment which consists of 15 FreeBSD "
+"machines with no centralized point of administration. Each machine has its "
+"own [.filename]#/etc/passwd# and [.filename]#/etc/master.passwd#. These "
+"files are kept in sync with each other only through manual intervention. "
+"Currently, when a user is added to the lab, the process must be repeated on "
+"all 15 machines."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:601
+msgid "The configuration of the lab will be as follows:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:606
+#, no-wrap
+msgid "Machine name"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:607
+#, no-wrap
+msgid "IP address"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:610
+#, no-wrap
+msgid "Machine role"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:611
+#, no-wrap
+msgid "`ellington`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:612
+#, no-wrap
+msgid "`10.0.0.2`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:614
+#, no-wrap
+msgid "NIS master"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:615
+#, no-wrap
+msgid "`coltrane`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:616
+#, no-wrap
+msgid "`10.0.0.3`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:618
+#, no-wrap
+msgid "NIS slave"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:619
+#, no-wrap
+msgid "`basie`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:620
+#, no-wrap
+msgid "`10.0.0.4`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:622
+#, no-wrap
+msgid "Faculty workstation"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:623
+#, no-wrap
+msgid "`bird`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:624
+#, no-wrap
+msgid "`10.0.0.5`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:626
+#, no-wrap
+msgid "Client machine"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:627
+#, no-wrap
+msgid "`cli[1-11]`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:628
+#, no-wrap
+msgid "`10.0.0.[6-17]`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:629
+#, no-wrap
+msgid "Other client machines"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:633
+msgid ""
+"If this is the first time an NIS scheme is being developed, it should be "
+"thoroughly planned ahead of time. Regardless of network size, several "
+"decisions need to be made as part of the planning process."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:634
+#, no-wrap
+msgid "Choosing a NIS Domain Name"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:639
+msgid ""
+"When a client broadcasts its requests for info, it includes the name of the "
+"NIS domain that it is part of. This is how multiple servers on one network "
+"can tell which server should answer which request. Think of the NIS domain "
+"name as the name for a group of hosts."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:645
+msgid ""
+"Some organizations choose to use their Internet domain name for their NIS "
+"domain name. This is not recommended as it can cause confusion when trying "
+"to debug network problems. The NIS domain name should be unique within the "
+"network and it is helpful if it describes the group of machines it "
+"represents. For example, the Art department at Acme Inc. might be in the "
+"\"acme-art\" NIS domain. This example will use the domain name `test-"
+"domain`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:648
+msgid ""
+"However, some non-FreeBSD operating systems require the NIS domain name to "
+"be the same as the Internet domain name. If one or more machines on the "
+"network have this restriction, the Internet domain name _must_ be used as "
+"the NIS domain name."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:649
+#, no-wrap
+msgid "Physical Server Requirements"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:656
+msgid ""
+"There are several things to keep in mind when choosing a machine to use as a "
+"NIS server. Since NIS clients depend upon the availability of the server, "
+"choose a machine that is not rebooted frequently. The NIS server should "
+"ideally be a stand alone machine whose sole purpose is to be an NIS server. "
+"If the network is not heavily used, it is acceptable to put the NIS server "
+"on a machine running other services. However, if the NIS server becomes "
+"unavailable, it will adversely affect all NIS clients."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:657
+#, no-wrap
+msgid "Configuring the NIS Master Server"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:664
+msgid ""
+"The canonical copies of all NIS files are stored on the master server. The "
+"databases used to store the information are called NIS maps. In FreeBSD, "
+"these maps are stored in [.filename]#/var/yp/[domainname]# where [."
+"filename]#[domainname]# is the name of the NIS domain. Since multiple "
+"domains are supported, it is possible to have several directories, one for "
+"each domain. Each domain will have its own independent set of maps."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:667
+msgid ""
+"NIS master and slave servers handle all NIS requests through man:ypserv[8]. "
+"This daemon is responsible for receiving incoming requests from NIS clients, "
+"translating the requested domain and map name to a path to the corresponding "
+"database file, and transmitting data from the database back to the client."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:670
+msgid ""
+"Setting up a master NIS server can be relatively straight forward, depending "
+"on environmental needs. Since FreeBSD provides built-in NIS support, it "
+"only needs to be enabled by adding the following lines to [.filename]#/etc/"
+"rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:676
+#, no-wrap
+msgid ""
+"nisdomainname=\"test-domain\"\t<.>\n"
+"nis_server_enable=\"YES\"\t\t<.>\n"
+"nis_yppasswdd_enable=\"YES\"\t<.>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:679
+msgid "This line sets the NIS domain name to `test-domain`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:680
+msgid ""
+"This automates the start up of the NIS server processes when the system "
+"boots."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:681
+msgid ""
+"This enables the man:rpc.yppasswdd[8] daemon so that users can change their "
+"NIS password from a client machine."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:686
+msgid ""
+"Care must be taken in a multi-server domain where the server machines are "
+"also NIS clients. It is generally a good idea to force the servers to bind "
+"to themselves rather than allowing them to broadcast bind requests and "
+"possibly become bound to each other. Strange failure modes can result if "
+"one server goes down and others are dependent upon it. Eventually, all the "
+"clients will time out and attempt to bind to other servers, but the delay "
+"involved can be considerable and the failure mode is still present since the "
+"servers might bind to each other all over again."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:688
+msgid ""
+"A server that is also a client can be forced to bind to a particular server "
+"by adding these additional lines to [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:693
+#, no-wrap
+msgid ""
+"nis_client_enable=\"YES\"\t\t\t\t<.>\n"
+"nis_client_flags=\"-S test-domain,server\"\t<.>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:696
+msgid "This enables running client stuff as well."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:697
+msgid "This line sets the NIS domain name to `test-domain` and bind to itself."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:700
+msgid ""
+"After saving the edits, type `/etc/netstart` to restart the network and "
+"apply the values defined in [.filename]#/etc/rc.conf#. Before initializing "
+"the NIS maps, start man:ypserv[8]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:704
+#, no-wrap
+msgid "# service ypserv start\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:707
+#, no-wrap
+msgid "Initializing the NIS Maps"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:712
+msgid ""
+"NIS maps are generated from the configuration files in [.filename]#/etc# on "
+"the NIS master, with one exception: [.filename]#/etc/master.passwd#. This "
+"is to prevent the propagation of passwords to all the servers in the NIS "
+"domain. Therefore, before the NIS maps are initialized, configure the "
+"primary password files:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:718
+#, no-wrap
+msgid ""
+"# cp /etc/master.passwd /var/yp/master.passwd\n"
+"# cd /var/yp\n"
+"# vi master.passwd\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:721
+msgid ""
+"It is advisable to remove all entries for system accounts as well as any "
+"user accounts that do not need to be propagated to the NIS clients, such as "
+"the `root` and any other administrative accounts."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:725
+msgid ""
+"Ensure that the [.filename]#/var/yp/master.passwd# is neither group or world "
+"readable by setting its permissions to `600`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:730
+msgid ""
+"After completing this task, initialize the NIS maps. FreeBSD includes the "
+"man:ypinit[8] script to do this. When generating maps for the master "
+"server, include `-m` and specify the NIS domain name:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:751
+#, no-wrap
+msgid ""
+"ellington# ypinit -m test-domain\n"
+"Server Type: MASTER Domain: test-domain\n"
+"Creating an YP server will require that you answer a few questions.\n"
+"Questions will all be asked at the beginning of the procedure.\n"
+"Do you want this procedure to quit on non-fatal errors? [y/n: n] n\n"
+"Ok, please remember to go back and redo manually whatever fails.\n"
+"If not, something might not work.\n"
+"At this point, we have to construct a list of this domains YP servers.\n"
+"rod.darktech.org is already known as master server.\n"
+"Please continue to add any slave servers, one per line. When you are\n"
+"done with the list, type a <control D>.\n"
+"master server : ellington\n"
+"next host to add: coltrane\n"
+"next host to add: ^D\n"
+"The current list of NIS servers looks like this:\n"
+"ellington\n"
+"coltrane\n"
+"Is this correct? [y/n: y] y\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:753
+#, no-wrap
+msgid "[..output from map generation..]\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:756
+#, no-wrap
+msgid ""
+"NIS Map update completed.\n"
+"ellington has been setup as an YP master server without any errors.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:761
+msgid ""
+"This will create [.filename]#/var/yp/Makefile# from [.filename]#/var/yp/"
+"Makefile.dist#. By default, this file assumes that the environment has a "
+"single NIS server with only FreeBSD clients. Since `test-domain` has a "
+"slave server, edit this line in [.filename]#/var/yp/Makefile# so that it "
+"begins with a comment (`+#+`):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:765
+#, no-wrap
+msgid "NOPUSH = \"True\"\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:768
+#, no-wrap
+msgid "Adding New Users"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:773
+msgid ""
+"Every time a new user is created, the user account must be added to the "
+"master NIS server and the NIS maps rebuilt. Until this occurs, the new user "
+"will not be able to login anywhere except on the NIS master. For example, "
+"to add the new user `jsmith` to the `test-domain` domain, run these commands "
+"on the master server:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:779
+#, no-wrap
+msgid ""
+"# pw useradd jsmith\n"
+"# cd /var/yp\n"
+"# make test-domain\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:782
+msgid ""
+"The user could also be added using `adduser jsmith` instead of `pw useradd "
+"smith`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:783
+#, no-wrap
+msgid "Setting up a NIS Slave Server"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:789
+msgid ""
+"To set up an NIS slave server, log on to the slave server and edit [."
+"filename]#/etc/rc.conf# as for the master server. Do not generate any NIS "
+"maps, as these already exist on the master server. When running `ypinit` on "
+"the slave server, use `-s` (for slave) instead of `-m` (for master). This "
+"option requires the name of the NIS master in addition to the domain name, "
+"as seen in this example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:793
+#, no-wrap
+msgid "coltrane# ypinit -s ellington test-domain\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:795
+#, no-wrap
+msgid "Server Type: SLAVE Domain: test-domain Master: ellington\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:798
+#, no-wrap
+msgid ""
+"Creating an YP server will require that you answer a few questions.\n"
+"Questions will all be asked at the beginning of the procedure.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:800
+#, no-wrap
+msgid "Do you want this procedure to quit on non-fatal errors? [y/n: n] n\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:845
+#, no-wrap
+msgid ""
+"Ok, please remember to go back and redo manually whatever fails.\n"
+"If not, something might not work.\n"
+"There will be no further questions. The remainder of the procedure\n"
+"should take a few minutes, to copy the databases from ellington.\n"
+"Transferring netgroup...\n"
+"ypxfr: Exiting: Map successfully transferred\n"
+"Transferring netgroup.byuser...\n"
+"ypxfr: Exiting: Map successfully transferred\n"
+"Transferring netgroup.byhost...\n"
+"ypxfr: Exiting: Map successfully transferred\n"
+"Transferring master.passwd.byuid...\n"
+"ypxfr: Exiting: Map successfully transferred\n"
+"Transferring passwd.byuid...\n"
+"ypxfr: Exiting: Map successfully transferred\n"
+"Transferring passwd.byname...\n"
+"ypxfr: Exiting: Map successfully transferred\n"
+"Transferring group.bygid...\n"
+"ypxfr: Exiting: Map successfully transferred\n"
+"Transferring group.byname...\n"
+"ypxfr: Exiting: Map successfully transferred\n"
+"Transferring services.byname...\n"
+"ypxfr: Exiting: Map successfully transferred\n"
+"Transferring rpc.bynumber...\n"
+"ypxfr: Exiting: Map successfully transferred\n"
+"Transferring rpc.byname...\n"
+"ypxfr: Exiting: Map successfully transferred\n"
+"Transferring protocols.byname...\n"
+"ypxfr: Exiting: Map successfully transferred\n"
+"Transferring master.passwd.byname...\n"
+"ypxfr: Exiting: Map successfully transferred\n"
+"Transferring networks.byname...\n"
+"ypxfr: Exiting: Map successfully transferred\n"
+"Transferring networks.byaddr...\n"
+"ypxfr: Exiting: Map successfully transferred\n"
+"Transferring netid.byname...\n"
+"ypxfr: Exiting: Map successfully transferred\n"
+"Transferring hosts.byaddr...\n"
+"ypxfr: Exiting: Map successfully transferred\n"
+"Transferring protocols.bynumber...\n"
+"ypxfr: Exiting: Map successfully transferred\n"
+"Transferring ypservers...\n"
+"ypxfr: Exiting: Map successfully transferred\n"
+"Transferring hosts.byname...\n"
+"ypxfr: Exiting: Map successfully transferred\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:848
+#, no-wrap
+msgid ""
+"coltrane has been setup as an YP slave server without any errors.\n"
+"Remember to update map ypservers on ellington.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:852
+msgid ""
+"This will generate a directory on the slave server called [.filename]#/var/"
+"yp/test-domain# which contains copies of the NIS master server's maps. "
+"Adding these [.filename]#/etc/crontab# entries on each slave server will "
+"force the slaves to sync their maps with the maps on the master server:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:857
+#, no-wrap
+msgid ""
+"20 * * * * root /usr/libexec/ypxfr passwd.byname\n"
+"21 * * * * root /usr/libexec/ypxfr passwd.byuid\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:862
+msgid ""
+"These entries are not mandatory because the master server automatically "
+"attempts to push any map changes to its slaves. However, since clients may "
+"depend upon the slave server to provide correct password information, it is "
+"recommended to force frequent password map updates. This is especially "
+"important on busy networks where map updates might not always complete."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:864
+msgid ""
+"To finish the configuration, run `/etc/netstart` on the slave server in "
+"order to start the NIS services."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:865
+#, no-wrap
+msgid "Setting Up an NIS Client"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:874
+msgid ""
+"An NIS client binds to an NIS server using man:ypbind[8]. This daemon "
+"broadcasts RPC requests on the local network. These requests specify the "
+"domain name configured on the client. If an NIS server in the same domain "
+"receives one of the broadcasts, it will respond to ypbind, which will record "
+"the server's address. If there are several servers available, the client "
+"will use the address of the first server to respond and will direct all of "
+"its NIS requests to that server. The client will automatically ping the "
+"server on a regular basis to make sure it is still available. If it fails "
+"to receive a reply within a reasonable amount of time, ypbind will mark the "
+"domain as unbound and begin broadcasting again in the hopes of locating "
+"another server."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:876
+msgid "To configure a FreeBSD machine to be an NIS client:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:880
+msgid ""
+"Edit [.filename]#/etc/rc.conf# and add the following lines in order to set "
+"the NIS domain name and start man:ypbind[8] during network startup:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:885
+#, no-wrap
+msgid ""
+"nisdomainname=\"test-domain\"\n"
+"nis_client_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:888
+msgid ""
+"To import all possible password entries from the NIS server, use `vipw` to "
+"remove all user accounts except one from [.filename]#/etc/master.passwd#. "
+"When removing the accounts, keep in mind that at least one local account "
+"should remain and this account should be a member of `wheel`. If there is a "
+"problem with NIS, this local account can be used to log in remotely, become "
+"the superuser, and fix the problem. Before saving the edits, add the "
+"following line to the end of the file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:892
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1113
+#, no-wrap
+msgid "+:::::::::\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:898
+msgid ""
+"This line configures the client to provide anyone with a valid account in "
+"the NIS server's password maps an account on the client. There are many "
+"ways to configure the NIS client by modifying this line. One method is "
+"described in <<network-netgroups>>. For more detailed reading, refer to the "
+"book `Managing NFS and NIS`, published by O'Reilly Media."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:899
+msgid ""
+"To import all possible group entries from the NIS server, add this line to [."
+"filename]#/etc/group#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:903
+#, no-wrap
+msgid "+:*::\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:907
+msgid ""
+"To start the NIS client immediately, execute the following commands as the "
+"superuser:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:912
+#, no-wrap
+msgid ""
+"# /etc/netstart\n"
+"# service ypbind start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:915
+msgid ""
+"After completing these steps, running `ypcat passwd` on the client should "
+"show the server's [.filename]#passwd# map."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:916
+#, no-wrap
+msgid "NIS Security"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:924
+msgid ""
+"Since RPC is a broadcast-based service, any system running ypbind within the "
+"same domain can retrieve the contents of the NIS maps. To prevent "
+"unauthorized transactions, man:ypserv[8] supports a feature called "
+"\"securenets\" which can be used to restrict access to a given set of "
+"hosts. By default, this information is stored in [.filename]#/var/yp/"
+"securenets#, unless man:ypserv[8] is started with `-p` and an alternate "
+"path. This file contains entries that consist of a network specification "
+"and a network mask separated by white space. Lines starting with `+\"#\"+` "
+"are considered to be comments. A sample [.filename]#securenets# might look "
+"like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:936
+#, no-wrap
+msgid ""
+"# allow connections from local host -- mandatory\n"
+"127.0.0.1 255.255.255.255\n"
+"# allow connections from any host\n"
+"# on the 192.168.128.0 network\n"
+"192.168.128.0 255.255.255.0\n"
+"# allow connections from any host\n"
+"# between 10.0.0.0 to 10.0.15.255\n"
+"# this includes the machines in the testlab\n"
+"10.0.0.0 255.255.240.0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:941
+msgid ""
+"If man:ypserv[8] receives a request from an address that matches one of "
+"these rules, it will process the request normally. If the address fails to "
+"match a rule, the request will be ignored and a warning message will be "
+"logged. If the [.filename]#securenets# does not exist, `ypserv` will allow "
+"connections from any host."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:945
+msgid ""
+"crossref:security[tcpwrappers,\"TCP Wrapper\"] is an alternate mechanism for "
+"providing access control instead of [.filename]#securenets#. While either "
+"access control mechanism adds some security, they are both vulnerable to "
+"\"IP spoofing\" attacks. All NIS-related traffic should be blocked at the "
+"firewall."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:949
+msgid ""
+"Servers using [.filename]#securenets# may fail to serve legitimate NIS "
+"clients with archaic TCP/IP implementations. Some of these implementations "
+"set all host bits to zero when doing broadcasts or fail to observe the "
+"subnet mask when calculating the broadcast address. While some of these "
+"problems can be fixed by changing the client configuration, other problems "
+"may force the retirement of these client systems or the abandonment of [."
+"filename]#securenets#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:953
+msgid ""
+"The use of TCP Wrapper increases the latency of the NIS server. The "
+"additional delay may be long enough to cause timeouts in client programs, "
+"especially in busy networks with slow NIS servers. If one or more clients "
+"suffer from latency, convert those clients into NIS slave servers and force "
+"them to bind to themselves."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:954
+#, no-wrap
+msgid "Barring Some Users"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:959
+msgid ""
+"In this example, the `basie` system is a faculty workstation within the NIS "
+"domain. The [.filename]#passwd# map on the master NIS server contains "
+"accounts for both faculty and students. This section demonstrates how to "
+"allow faculty logins on this system while refusing student logins."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:963
+msgid ""
+"To prevent specified users from logging on to a system, even if they are "
+"present in the NIS database, use `vipw` to add `-_username_` with the "
+"correct number of colons towards the end of [.filename]#/etc/master.passwd# "
+"on the client, where _username_ is the username of a user to bar from "
+"logging in. The line with the blocked user must be before the `+` line that "
+"allows NIS users. In this example, `bill` is barred from logging on to "
+"`basie`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:984
+#, no-wrap
+msgid ""
+"basie# cat /etc/master.passwd\n"
+"root:[password]:0:0::0:0:The super-user:/root:/bin/csh\n"
+"toor:[password]:0:0::0:0:The other super-user:/root:/bin/sh\n"
+"daemon:*:1:1::0:0:Owner of many system processes:/root:/usr/sbin/nologin\n"
+"operator:*:2:5::0:0:System &:/:/usr/sbin/nologin\n"
+"bin:*:3:7::0:0:Binaries Commands and Source,,,:/:/usr/sbin/nologin\n"
+"tty:*:4:65533::0:0:Tty Sandbox:/:/usr/sbin/nologin\n"
+"kmem:*:5:65533::0:0:KMem Sandbox:/:/usr/sbin/nologin\n"
+"games:*:7:13::0:0:Games pseudo-user:/usr/games:/usr/sbin/nologin\n"
+"news:*:8:8::0:0:News Subsystem:/:/usr/sbin/nologin\n"
+"man:*:9:9::0:0:Mister Man Pages:/usr/share/man:/usr/sbin/nologin\n"
+"bind:*:53:53::0:0:Bind Sandbox:/:/usr/sbin/nologin\n"
+"uucp:*:66:66::0:0:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico\n"
+"xten:*:67:67::0:0:X-10 daemon:/usr/local/xten:/usr/sbin/nologin\n"
+"pop:*:68:6::0:0:Post Office Owner:/nonexistent:/usr/sbin/nologin\n"
+"nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/usr/sbin/nologin\n"
+"-bill:::::::::\n"
+"+:::::::::\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:986
+#, no-wrap
+msgid "basie#\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:990
+#, no-wrap
+msgid "Using Netgroups"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:993
+msgid ""
+"Barring specified users from logging on to individual systems becomes "
+"unscaleable on larger networks and quickly loses the main benefit of NIS: "
+"_centralized_ administration."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:996
+msgid ""
+"Netgroups were developed to handle large, complex networks with hundreds of "
+"users and machines. Their use is comparable to UNIX(R) groups, where the "
+"main difference is the lack of a numeric ID and the ability to define a "
+"netgroup by including both user accounts and other netgroups."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:998
+msgid ""
+"To expand on the example used in this chapter, the NIS domain will be "
+"extended to add the users and systems shown in Tables 28.2 and 28.3:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:999
+#, no-wrap
+msgid "Additional Users"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1003
+#, no-wrap
+msgid "User Name(s)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1006
+#, no-wrap
+msgid "`alpha`, `beta`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1008
+#, no-wrap
+msgid "IT department employees"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1009
+#, no-wrap
+msgid "`charlie`, `delta`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1011
+#, no-wrap
+msgid "IT department apprentices"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1012
+#, no-wrap
+msgid "`echo`, `foxtrott`, `golf`, ..."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1014
+#, no-wrap
+msgid "employees"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1015
+#, no-wrap
+msgid "`able`, `baker`, ..."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1016
+#, no-wrap
+msgid "interns"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1018
+#, no-wrap
+msgid "Additional Systems"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1022
+#, no-wrap
+msgid "Machine Name(s)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1025
+#, no-wrap
+msgid "`war`, `death`, `famine`, `pollution`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1027
+#, no-wrap
+msgid "Only IT employees are allowed to log onto these servers."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1028
+#, no-wrap
+msgid "`pride`, `greed`, `envy`, `wrath`, `lust`, `sloth`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1030
+#, no-wrap
+msgid "All members of the IT department are allowed to login onto these servers."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1031
+#, no-wrap
+msgid "`one`, `two`, `three`, `four`, ..."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1033
+#, no-wrap
+msgid "Ordinary workstations used by employees."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1034
+#, no-wrap
+msgid "`trashcan`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1035
+#, no-wrap
+msgid "A very old machine without any critical data. Even interns are allowed to use this system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1041
+msgid ""
+"When using netgroups to configure this scenario, each user is assigned to "
+"one or more netgroups and logins are then allowed or forbidden for all "
+"members of the netgroup. When adding a new machine, login restrictions must "
+"be defined for all netgroups. When a new user is added, the account must be "
+"added to one or more netgroups. If the NIS setup is planned carefully, only "
+"one central configuration file needs modification to grant or deny access to "
+"machines."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1045
+msgid ""
+"The first step is the initialization of the NIS`netgroup` map. In FreeBSD, "
+"this map is not created by default. On the NIS master server, use an editor "
+"to create a map named [.filename]#/var/yp/netgroup#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1047
+msgid ""
+"This example creates four netgroups to represent IT employees, IT "
+"apprentices, employees, and interns:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1055
+#, no-wrap
+msgid ""
+"IT_EMP (,alpha,test-domain) (,beta,test-domain)\n"
+"IT_APP (,charlie,test-domain) (,delta,test-domain)\n"
+"USERS (,echo,test-domain) (,foxtrott,test-domain) \\\n"
+" (,golf,test-domain)\n"
+"INTERNS (,able,test-domain) (,baker,test-domain)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1060
+msgid ""
+"Each entry configures a netgroup. The first column in an entry is the name "
+"of the netgroup. Each set of parentheses represents either a group of one "
+"or more users or the name of another netgroup. When specifying a user, the "
+"three comma-delimited fields inside each group represent:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1062
+msgid ""
+"The name of the host(s) where the other fields representing the user are "
+"valid. If a hostname is not specified, the entry is valid on all hosts."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1063
+msgid "The name of the account that belongs to this netgroup."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1064
+msgid ""
+"The NIS domain for the account. Accounts may be imported from other NIS "
+"domains into a netgroup."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1068
+msgid ""
+"If a group contains multiple users, separate each user with whitespace. "
+"Additionally, each field may contain wildcards. See man:netgroup[5] for "
+"details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1071
+msgid ""
+"Netgroup names longer than 8 characters should not be used. The names are "
+"case sensitive and using capital letters for netgroup names is an easy way "
+"to distinguish between user, machine and netgroup names."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1074
+msgid ""
+"Some non-FreeBSD NIS clients cannot handle netgroups containing more than 15 "
+"entries. This limit may be circumvented by creating several sub-netgroups "
+"with 15 users or fewer and a real netgroup consisting of the sub-netgroups, "
+"as seen in this example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1081
+#, no-wrap
+msgid ""
+"BIGGRP1 (,joe1,domain) (,joe2,domain) (,joe3,domain) [...]\n"
+"BIGGRP2 (,joe16,domain) (,joe17,domain) [...]\n"
+"BIGGRP3 (,joe31,domain) (,joe32,domain)\n"
+"BIGGROUP BIGGRP1 BIGGRP2 BIGGRP3\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1084
+msgid ""
+"Repeat this process if more than 225 (15 times 15) users exist within a "
+"single netgroup."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1086
+msgid "To activate and distribute the new NIS map:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1091
+#, no-wrap
+msgid ""
+"ellington# cd /var/yp\n"
+"ellington# make\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1095
+msgid ""
+"This will generate the three NIS maps [.filename]#netgroup#, [."
+"filename]#netgroup.byhost# and [.filename]#netgroup.byuser#. Use the map "
+"key option of man:ypcat[1] to check if the new NIS maps are available:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1101
+#, no-wrap
+msgid ""
+"ellington% ypcat -k netgroup\n"
+"ellington% ypcat -k netgroup.byhost\n"
+"ellington% ypcat -k netgroup.byuser\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1106
+msgid ""
+"The output of the first command should resemble the contents of [.filename]#/"
+"var/yp/netgroup#. The second command only produces output if host-specific "
+"netgroups were created. The third command is used to get the list of "
+"netgroups for a user."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1109
+msgid ""
+"To configure a client, use man:vipw[8] to specify the name of the netgroup. "
+"For example, on the server named `war`, replace this line:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1116
+msgid "with"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1120
+#, no-wrap
+msgid "+@IT_EMP:::::::::\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1123
+msgid ""
+"This specifies that only the users defined in the netgroup `IT_EMP` will be "
+"imported into this system's password database and only those users are "
+"allowed to login to this system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1128
+msgid ""
+"This configuration also applies to the `~` function of the shell and all "
+"routines which convert between user names and numerical user IDs. In other "
+"words, `cd ~_user_` will not work, `ls -l` will show the numerical ID "
+"instead of the username, and `find . -user joe -print` will fail with the "
+"message `No such user`. To fix this, import all user entries without "
+"allowing them to login into the servers. This can be achieved by adding an "
+"extra line:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1132
+#, no-wrap
+msgid "+:::::::::/usr/sbin/nologin\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1135
+msgid ""
+"This line configures the client to import all entries but to replace the "
+"shell in those entries with [.filename]#/usr/sbin/nologin#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1138
+msgid ""
+"Make sure that extra line is placed _after_ `+@IT_EMP:::::::::`. Otherwise, "
+"all user accounts imported from NIS will have [.filename]#/usr/sbin/nologin# "
+"as their login shell and no one will be able to login to the system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1140
+msgid ""
+"To configure the less important servers, replace the old `+:::::::::` on the "
+"servers with these lines:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1146
+#, no-wrap
+msgid ""
+"+@IT_EMP:::::::::\n"
+"+@IT_APP:::::::::\n"
+"+:::::::::/usr/sbin/nologin\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1149
+msgid "The corresponding lines for the workstations would be:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1155
+#, no-wrap
+msgid ""
+"+@IT_EMP:::::::::\n"
+"+@USERS:::::::::\n"
+"+:::::::::/usr/sbin/nologin\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1162
+msgid ""
+"NIS supports the creation of netgroups from other netgroups which can be "
+"useful if the policy regarding user access changes. One possibility is the "
+"creation of role-based netgroups. For example, one might create a netgroup "
+"called `BIGSRV` to define the login restrictions for the important servers, "
+"another netgroup called `SMALLSRV` for the less important servers, and a "
+"third netgroup called `USERBOX` for the workstations. Each of these "
+"netgroups contains the netgroups that are allowed to login onto these "
+"machines. The new entries for the NIS`netgroup` map would look like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1168
+#, no-wrap
+msgid ""
+"BIGSRV IT_EMP IT_APP\n"
+"SMALLSRV IT_EMP IT_APP ITINTERN\n"
+"USERBOX IT_EMP ITINTERN USERS\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1173
+msgid ""
+"This method of defining login restrictions works reasonably well when it is "
+"possible to define groups of machines with identical restrictions. "
+"Unfortunately, this is the exception and not the rule. Most of the time, "
+"the ability to define login restrictions on a per-machine basis is required."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1178
+msgid ""
+"Machine-specific netgroup definitions are another possibility to deal with "
+"the policy changes. In this scenario, the [.filename]#/etc/master.passwd# "
+"of each system contains two lines starting with \"+\". The first line adds "
+"a netgroup with the accounts allowed to login onto this machine and the "
+"second line adds all other accounts with [.filename]#/usr/sbin/nologin# as "
+"shell. It is recommended to use the \"ALL-CAPS\" version of the hostname as "
+"the name of the netgroup:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1183
+#, no-wrap
+msgid ""
+"+@BOXNAME:::::::::\n"
+"+:::::::::/usr/sbin/nologin\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1188
+msgid ""
+"Once this task is completed on all the machines, there is no longer a need "
+"to modify the local versions of [.filename]#/etc/master.passwd# ever again. "
+"All further changes can be handled by modifying the NIS map. Here is an "
+"example of a possible `netgroup` map for this scenario:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1226
+#, no-wrap
+msgid ""
+"# Define groups of users first\n"
+"IT_EMP (,alpha,test-domain) (,beta,test-domain)\n"
+"IT_APP (,charlie,test-domain) (,delta,test-domain)\n"
+"DEPT1 (,echo,test-domain) (,foxtrott,test-domain)\n"
+"DEPT2 (,golf,test-domain) (,hotel,test-domain)\n"
+"DEPT3 (,india,test-domain) (,juliet,test-domain)\n"
+"ITINTERN (,kilo,test-domain) (,lima,test-domain)\n"
+"D_INTERNS (,able,test-domain) (,baker,test-domain)\n"
+"#\n"
+"# Now, define some groups based on roles\n"
+"USERS DEPT1 DEPT2 DEPT3\n"
+"BIGSRV IT_EMP IT_APP\n"
+"SMALLSRV IT_EMP IT_APP ITINTERN\n"
+"USERBOX IT_EMP ITINTERN USERS\n"
+"#\n"
+"# And a groups for a special tasks\n"
+"# Allow echo and golf to access our anti-virus-machine\n"
+"SECURITY IT_EMP (,echo,test-domain) (,golf,test-domain)\n"
+"#\n"
+"# machine-based netgroups\n"
+"# Our main servers\n"
+"WAR BIGSRV\n"
+"FAMINE BIGSRV\n"
+"# User india needs access to this server\n"
+"POLLUTION BIGSRV (,india,test-domain)\n"
+"#\n"
+"# This one is really important and needs more access restrictions\n"
+"DEATH IT_EMP\n"
+"#\n"
+"# The anti-virus-machine mentioned above\n"
+"ONE SECURITY\n"
+"#\n"
+"# Restrict a machine to a single user\n"
+"TWO (,hotel,test-domain)\n"
+"# [...more groups to follow]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1230
+msgid ""
+"It may not always be advisable to use machine-based netgroups. When "
+"deploying a couple of dozen or hundreds of systems, role-based netgroups "
+"instead of machine-based netgroups may be used to keep the size of the NIS "
+"map within reasonable limits."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1231
+#, no-wrap
+msgid "Password Formats"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1236
+msgid ""
+"NIS requires that all hosts within an NIS domain use the same format for "
+"encrypting passwords. If users have trouble authenticating on an NIS "
+"client, it may be due to a differing password format. In a heterogeneous "
+"network, the format must be supported by all operating systems, where DES is "
+"the lowest common standard."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1238
+msgid ""
+"To check which format a server or client is using, look at this section of [."
+"filename]#/etc/login.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1245
+#, no-wrap
+msgid ""
+"default:\\\n"
+"\t:passwd_format=des:\\\n"
+"\t:copyright=/etc/COPYRIGHT:\\\n"
+"\t[Further entries elided]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1250
+msgid ""
+"In this example, the system is using the DES format for password hashing. "
+"Other possible values include `blf` for Blowfish, `md5` for MD5, `sha256` "
+"and `sha512` for SHA-256 and SHA-512 respectively. For more information and "
+"the up to date list of what is available on your system, consult the man:"
+"crypt[3] manpage."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1252
+msgid ""
+"If the format on a host needs to be edited to match the one being used in "
+"the NIS domain, the login capability database must be rebuilt after saving "
+"the change:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1256
+#, no-wrap
+msgid "# cap_mkdb /etc/login.conf\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1261
+msgid ""
+"The format of passwords for existing user accounts will not be updated until "
+"each user changes their password _after_ the login capability database is "
+"rebuilt."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1264
+#, no-wrap
+msgid "Lightweight Directory Access Protocol (LDAP)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1270
+msgid ""
+"The Lightweight Directory Access Protocol (LDAP) is an application layer "
+"protocol used to access, modify, and authenticate objects using a "
+"distributed directory information service. Think of it as a phone or record "
+"book which stores several levels of hierarchical, homogeneous information. "
+"It is used in Active Directory and OpenLDAP networks and allows users to "
+"access to several levels of internal information utilizing a single "
+"account. For example, email authentication, pulling employee contact "
+"information, and internal website authentication might all make use of a "
+"single user account in the LDAP server's record base."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1273
+msgid ""
+"This section provides a quick start guide for configuring an LDAP server on "
+"a FreeBSD system. It assumes that the administrator already has a design "
+"plan which includes the type of information to store, what that information "
+"will be used for, which users should have access to that information, and "
+"how to secure this information from unauthorized access."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1274
+#, no-wrap
+msgid "LDAP Terminology and Structure"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1280
+msgid ""
+"LDAP uses several terms which should be understood before starting the "
+"configuration. All directory entries consist of a group of _attributes_. "
+"Each of these attribute sets contains a unique identifier known as a "
+"_Distinguished Name_ (DN) which is normally built from several other "
+"attributes such as the common or _Relative Distinguished Name_ (RDN). "
+"Similar to how directories have absolute and relative paths, consider a DN "
+"as an absolute path and the RDN as the relative path."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1283
+msgid ""
+"An example LDAP entry looks like the following. This example searches for "
+"the entry for the specified user account (`uid`), organizational unit "
+"(`ou`), and organization (`o`):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1294
+#, no-wrap
+msgid ""
+"% ldapsearch -xb \"uid=trhodes,ou=users,o=example.com\"\n"
+"# extended LDIF\n"
+"#\n"
+"# LDAPv3\n"
+"# base <uid=trhodes,ou=users,o=example.com> with scope subtree\n"
+"# filter: (objectclass=*)\n"
+"# requesting: ALL\n"
+"#\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1301
+#, no-wrap
+msgid ""
+"# trhodes, users, example.com\n"
+"dn: uid=trhodes,ou=users,o=example.com\n"
+"mail: trhodes@example.com\n"
+"cn: Tom Rhodes\n"
+"uid: trhodes\n"
+"telephoneNumber: (123) 456-7890\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1305
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1579
+#, no-wrap
+msgid ""
+"# search result\n"
+"search: 2\n"
+"result: 0 Success\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1308
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1582
+#, no-wrap
+msgid ""
+"# numResponses: 2\n"
+"# numEntries: 1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1312
+msgid ""
+"This example entry shows the values for the `dn`, `mail`, `cn`, `uid`, and "
+"`telephoneNumber` attributes. The cn attribute is the RDN."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1314
+msgid ""
+"More information about LDAP and its terminology can be found at http://www."
+"openldap.org/doc/admin24/intro.html[http://www.openldap.org/doc/admin24/"
+"intro.html]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1316
+#, no-wrap
+msgid "Configuring an LDAP Server"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1320
+msgid ""
+"FreeBSD does not provide a built-in LDAP server. Begin the configuration by "
+"installing package:net/openldap-server[] package or port:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1324
+#, no-wrap
+msgid "# pkg install openldap-server\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1329
+msgid ""
+"There is a large set of default options enabled in the extref:{linux-users}"
+"[package, software]. Review them by running `pkg info openldap-server`. If "
+"they are not sufficient (for example if SQL support is needed), please "
+"consider recompiling the port using the appropriate crossref:ports[ports-"
+"using,framework]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1332
+msgid ""
+"The installation creates the directory [.filename]#/var/db/openldap-data# to "
+"hold the data. The directory to store the certificates must be created:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1336
+#, no-wrap
+msgid "# mkdir /usr/local/etc/openldap/private\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1343
+msgid ""
+"The next phase is to configure the Certificate Authority. The following "
+"commands must be executed from [.filename]#/usr/local/etc/openldap/"
+"private#. This is important as the file permissions need to be restrictive "
+"and users should not have access to these files. More detailed information "
+"about certificates and their parameters can be found in crossref:"
+"security[openssl,\"OpenSSL\"]. To create the Certificate Authority, start "
+"with this command and follow the prompts:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1347
+#, no-wrap
+msgid "# openssl req -days 365 -nodes -new -x509 -keyout ca.key -out ../ca.crt\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1352
+msgid ""
+"The entries for the prompts may be generic _except_ for the `Common Name`. "
+"This entry must be _different_ than the system hostname. If this will be a "
+"self signed certificate, prefix the hostname with `CA` for Certificate "
+"Authority."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1355
+msgid ""
+"The next task is to create a certificate signing request and a private key. "
+"Input this command and follow the prompts:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1359
+#, no-wrap
+msgid "# openssl req -days 365 -nodes -new -keyout server.key -out server.csr\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1363
+msgid ""
+"During the certificate generation process, be sure to correctly set the "
+"`Common Name` attribute. The Certificate Signing Request must be signed "
+"with the Certificate Authority in order to be used as a valid certificate:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1367
+#, no-wrap
+msgid "# openssl x509 -req -days 365 -in server.csr -out ../server.crt -CA ../ca.crt -CAkey ca.key -CAcreateserial\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1370
+msgid ""
+"The final part of the certificate generation process is to generate and sign "
+"the client certificates:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1375
+#, no-wrap
+msgid ""
+"# openssl req -days 365 -nodes -new -keyout client.key -out client.csr\n"
+"# openssl x509 -req -days 3650 -in client.csr -out ../client.crt -CA ../ca.crt -CAkey ca.key\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1379
+msgid ""
+"Remember to use the same `Common Name` attribute when prompted. When "
+"finished, ensure that a total of eight (8) new files have been generated "
+"through the proceeding commands."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1382
+msgid ""
+"The daemon running the OpenLDAP server is [.filename]#slapd#. Its "
+"configuration is performed through [.filename]#slapd.ldif#: the old [."
+"filename]#slapd.conf# has been deprecated by OpenLDAP."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1389
+msgid ""
+"http://www.openldap.org/doc/admin24/slapdconf2.html[Configuration examples] "
+"for [.filename]#slapd.ldif# are available and can also be found in [."
+"filename]#/usr/local/etc/openldap/slapd.ldif.sample#. Options are "
+"documented in slapd-config(5). Each section of [.filename]#slapd.ldif#, "
+"like all the other LDAP attribute sets, is uniquely identified through a "
+"DN. Be sure that no blank lines are left between the `dn:` statement and "
+"the desired end of the section. In the following example, TLS will be used "
+"to implement a secure channel. The first section represents the global "
+"configuration:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1411
+#, no-wrap
+msgid ""
+"#\n"
+"# See slapd-config(5) for details on configuration options.\n"
+"# This file should NOT be world readable.\n"
+"#\n"
+"dn: cn=config\n"
+"objectClass: olcGlobal\n"
+"cn: config\n"
+"#\n"
+"#\n"
+"# Define global ACLs to disable default read access.\n"
+"#\n"
+"olcArgsFile: /var/run/openldap/slapd.args\n"
+"olcPidFile: /var/run/openldap/slapd.pid\n"
+"olcTLSCertificateFile: /usr/local/etc/openldap/server.crt\n"
+"olcTLSCertificateKeyFile: /usr/local/etc/openldap/private/server.key\n"
+"olcTLSCACertificateFile: /usr/local/etc/openldap/ca.crt\n"
+"#olcTLSCipherSuite: HIGH\n"
+"olcTLSProtocolMin: 3.1\n"
+"olcTLSVerifyClient: never\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1416
+msgid ""
+"The Certificate Authority, server certificate and server private key files "
+"must be specified here. It is recommended to let the clients choose the "
+"security cipher and omit option `olcTLSCipherSuite` (incompatible with TLS "
+"clients other than [.filename]#openssl#). Option `olcTLSProtocolMin` lets "
+"the server require a minimum security level: it is recommended. While "
+"verification is mandatory for the server, it is not for the client: "
+"`olcTLSVerifyClient: never`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1418
+msgid ""
+"The second section is about the backend modules and can be configured as "
+"follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1434
+#, no-wrap
+msgid ""
+"#\n"
+"# Load dynamic backend modules:\n"
+"#\n"
+"dn: cn=module,cn=config\n"
+"objectClass: olcModuleList\n"
+"cn: module\n"
+"olcModulepath:\t/usr/local/libexec/openldap\n"
+"olcModuleload:\tback_mdb.la\n"
+"#olcModuleload:\tback_bdb.la\n"
+"#olcModuleload:\tback_hdb.la\n"
+"#olcModuleload:\tback_ldap.la\n"
+"#olcModuleload:\tback_passwd.la\n"
+"#olcModuleload:\tback_shell.la\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1437
+msgid ""
+"The third section is devoted to load the needed `ldif` schemas to be used by "
+"the databases: they are essential."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1443
+#, no-wrap
+msgid ""
+"dn: cn=schema,cn=config\n"
+"objectClass: olcSchemaConfig\n"
+"cn: schema\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1448
+#, no-wrap
+msgid ""
+"include: file:///usr/local/etc/openldap/schema/core.ldif\n"
+"include: file:///usr/local/etc/openldap/schema/cosine.ldif\n"
+"include: file:///usr/local/etc/openldap/schema/inetorgperson.ldif\n"
+"include: file:///usr/local/etc/openldap/schema/nis.ldif\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1451
+msgid "Next, the frontend configuration section:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1485
+#, no-wrap
+msgid ""
+"# Frontend settings\n"
+"#\n"
+"dn: olcDatabase={-1}frontend,cn=config\n"
+"objectClass: olcDatabaseConfig\n"
+"objectClass: olcFrontendConfig\n"
+"olcDatabase: {-1}frontend\n"
+"olcAccess: to * by * read\n"
+"#\n"
+"# Sample global access control policy:\n"
+"#\tRoot DSE: allow anyone to read it\n"
+"#\tSubschema (sub)entry DSE: allow anyone to read it\n"
+"#\tOther DSEs:\n"
+"#\t\tAllow self write access\n"
+"#\t\tAllow authenticated users read access\n"
+"#\t\tAllow anonymous users to authenticate\n"
+"#\n"
+"#olcAccess: to dn.base=\"\" by * read\n"
+"#olcAccess: to dn.base=\"cn=Subschema\" by * read\n"
+"#olcAccess: to *\n"
+"#\tby self write\n"
+"#\tby users read\n"
+"#\tby anonymous auth\n"
+"#\n"
+"# if no access controls are present, the default policy\n"
+"# allows anyone and everyone to read anything but restricts\n"
+"# updates to rootdn. (e.g., \"access to * by * read\")\n"
+"#\n"
+"# rootdn can always read and write EVERYTHING!\n"
+"#\n"
+"olcPasswordHash: {SSHA}\n"
+"# {SSHA} is already the default for olcPasswordHash\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1488
+msgid ""
+"Another section is devoted to the _configuration backend_, the only way to "
+"later access the OpenLDAP server configuration is as a global super-user."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1496
+#, no-wrap
+msgid ""
+"dn: olcDatabase={0}config,cn=config\n"
+"objectClass: olcDatabaseConfig\n"
+"olcDatabase: {0}config\n"
+"olcAccess: to * by * none\n"
+"olcRootPW: {SSHA}iae+lrQZILpiUdf16Z9KmDmSwT77Dj4U\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1501
+msgid ""
+"The default administrator username is `cn=config`. Type [."
+"filename]#slappasswd# in a shell, choose a password and use its hash in "
+"`olcRootPW`. If this option is not specified now, before [.filename]#slapd."
+"ldif# is imported, no one will be later able to modify the _global "
+"configuration_ section."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1503
+msgid "The last section is about the database backend:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1527
+#, no-wrap
+msgid ""
+"#######################################################################\n"
+"# LMDB database definitions\n"
+"#######################################################################\n"
+"#\n"
+"dn: olcDatabase=mdb,cn=config\n"
+"objectClass: olcDatabaseConfig\n"
+"objectClass: olcMdbConfig\n"
+"olcDatabase: mdb\n"
+"olcDbMaxSize: 1073741824\n"
+"olcSuffix: dc=domain,dc=example\n"
+"olcRootDN: cn=mdbadmin,dc=domain,dc=example\n"
+"# Cleartext passwords, especially for the rootdn, should\n"
+"# be avoided. See slappasswd(8) and slapd-config(5) for details.\n"
+"# Use of strong authentication encouraged.\n"
+"olcRootPW: {SSHA}X2wHvIWDk6G76CQyCMS1vDCvtICWgn0+\n"
+"# The database directory MUST exist prior to running slapd AND\n"
+"# should only be accessible by the slapd and slap tools.\n"
+"# Mode 700 recommended.\n"
+"olcDbDirectory:\t/var/db/openldap-data\n"
+"# Indices to maintain\n"
+"olcDbIndex: objectClass eq\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1532
+msgid ""
+"This database hosts the _actual contents_ of the LDAP directory. Types "
+"other than `mdb` are available. Its super-user, not to be confused with the "
+"global one, is configured here: a (possibly custom) username in `olcRootDN` "
+"and the password hash in `olcRootPW`; [.filename]#slappasswd# can be used as "
+"before."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1535
+msgid ""
+"This http://www.openldap.org/devel/gitweb.cgi?p=openldap.git;a=tree;f=tests/"
+"data/regressions/its8444;h=8a5e808e63b0de3d2bdaf2cf34fecca8577ca7fd;"
+"hb=HEAD[repository] contains four examples of [.filename]#slapd.ldif#. To "
+"convert an existing [.filename]#slapd.conf# into [.filename]#slapd.ldif#, "
+"refer to http://www.openldap.org/doc/admin24/slapdconf2.html[this page] "
+"(please note that this may introduce some unuseful options)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1538
+msgid ""
+"When the configuration is completed, [.filename]#slapd.ldif# must be placed "
+"in an empty directory. It is recommended to create it as:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1542
+#, no-wrap
+msgid "# mkdir /usr/local/etc/openldap/slapd.d/\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1545
+msgid "Import the configuration database:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1549
+#, no-wrap
+msgid "# /usr/local/sbin/slapadd -n0 -F /usr/local/etc/openldap/slapd.d/ -l /usr/local/etc/openldap/slapd.ldif\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1552
+msgid "Start the [.filename]#slapd# daemon:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1556
+#, no-wrap
+msgid "# /usr/local/libexec/slapd -F /usr/local/etc/openldap/slapd.d/\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1560
+msgid ""
+"Option `-d` can be used for debugging, as specified in slapd(8). To verify "
+"that the server is running and working:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1571
+#, no-wrap
+msgid ""
+"# ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts\n"
+"# extended LDIF\n"
+"#\n"
+"# LDAPv3\n"
+"# base <> with scope baseObject\n"
+"# filter: (objectclass=*)\n"
+"# requesting: namingContexts\n"
+"#\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1575
+#, no-wrap
+msgid ""
+"#\n"
+"dn:\n"
+"namingContexts: dc=domain,dc=example\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1587
+msgid ""
+"The server must still be trusted. If that has never been done before, "
+"follow these instructions. Install the OpenSSL package or port:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1591
+#, no-wrap
+msgid "# pkg install openssl\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1594
+msgid ""
+"From the directory where [.filename]#ca.crt# is stored (in this example, [."
+"filename]#/usr/local/etc/openldap#), run:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1598
+#, no-wrap
+msgid "# c_rehash .\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1602
+msgid ""
+"Both the CA and the server certificate are now correctly recognized in their "
+"respective roles. To verify this, run this command from the [."
+"filename]#server.crt# directory:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1606
+#, no-wrap
+msgid "# openssl verify -verbose -CApath . server.crt\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1610
+msgid ""
+"If [.filename]#slapd# was running, restart it. As stated in [.filename]#/"
+"usr/local/etc/rc.d/slapd#, to properly run [.filename]#slapd# at boot the "
+"following lines must be added to [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1618
+#, no-wrap
+msgid ""
+"slapd_enable=\"YES\"\n"
+"slapd_flags='-h \"ldapi://%2fvar%2frun%2fopenldap%2fldapi/\n"
+"ldap://0.0.0.0/\"'\n"
+"slapd_sockets=\"/var/run/openldap/ldapi\"\n"
+"slapd_cn_config=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1622
+msgid ""
+"[.filename]#slapd# does not provide debugging at boot. Check [.filename]#/"
+"var/log/debug.log#, [.filename]#dmesg -a# and [.filename]#/var/log/messages# "
+"for this purpose."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1625
+msgid ""
+"The following example adds the group `team` and the user `john` to the "
+"`domain.example` LDAP database, which is still empty. First, create the "
+"file [.filename]#domain.ldif#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1634
+#, no-wrap
+msgid ""
+"# cat domain.ldif\n"
+"dn: dc=domain,dc=example\n"
+"objectClass: dcObject\n"
+"objectClass: organization\n"
+"o: domain.example\n"
+"dc: domain\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1639
+#, no-wrap
+msgid ""
+"dn: ou=groups,dc=domain,dc=example\n"
+"objectClass: top\n"
+"objectClass: organizationalunit\n"
+"ou: groups\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1644
+#, no-wrap
+msgid ""
+"dn: ou=users,dc=domain,dc=example\n"
+"objectClass: top\n"
+"objectClass: organizationalunit\n"
+"ou: users\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1650
+#, no-wrap
+msgid ""
+"dn: cn=team,ou=groups,dc=domain,dc=example\n"
+"objectClass: top\n"
+"objectClass: posixGroup\n"
+"cn: team\n"
+"gidNumber: 10001\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1663
+#, no-wrap
+msgid ""
+"dn: uid=john,ou=users,dc=domain,dc=example\n"
+"objectClass: top\n"
+"objectClass: account\n"
+"objectClass: posixAccount\n"
+"objectClass: shadowAccount\n"
+"cn: John McUser\n"
+"uid: john\n"
+"uidNumber: 10001\n"
+"gidNumber: 10001\n"
+"homeDirectory: /home/john/\n"
+"loginShell: /usr/bin/bash\n"
+"userPassword: secret\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1669
+msgid ""
+"See the OpenLDAP documentation for more details. Use [."
+"filename]#slappasswd# to replace the plain text password `secret` with a "
+"hash in `userPassword`. The path specified as `loginShell` must exist in "
+"all the systems where `john` is allowed to login. Finally, use the `mdb` "
+"administrator to modify the database:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1673
+#, no-wrap
+msgid "# ldapadd -W -D \"cn=mdbadmin,dc=domain,dc=example\" -f domain.ldif\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1678
+msgid ""
+"Modifications to the _global configuration_ section can only be performed by "
+"the global super-user. For example, assume that the option "
+"`olcTLSCipherSuite: HIGH:MEDIUM:SSLv3` was initially specified and must now "
+"be deleted. First, create a file that contains the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1685
+#, no-wrap
+msgid ""
+"# cat global_mod\n"
+"dn: cn=config\n"
+"changetype: modify\n"
+"delete: olcTLSCipherSuite\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1688
+msgid "Then, apply the modifications:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1692
+#, no-wrap
+msgid "# ldapmodify -f global_mod -x -D \"cn=config\" -W\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1697
+msgid ""
+"When asked, provide the password chosen in the _configuration backend_ "
+"section. The username is not required: here, `cn=config` represents the DN "
+"of the database section to be modified. Alternatively, use `ldapmodify` to "
+"delete a single line of the database, `ldapdelete` to delete a whole entry."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1699
+msgid ""
+"If something goes wrong, or if the global super-user cannot access the "
+"configuration backend, it is possible to delete and re-write the whole "
+"configuration:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1703
+#, no-wrap
+msgid "# rm -rf /usr/local/etc/openldap/slapd.d/\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1707
+msgid ""
+"[.filename]#slapd.ldif# can then be edited and imported again. Please, "
+"follow this procedure only when no other solution is available."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1710
+msgid ""
+"This is the configuration of the server only. The same machine can also "
+"host an LDAP client, with its own separate configuration."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1712
+#, no-wrap
+msgid "Dynamic Host Configuration Protocol (DHCP)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1719
+msgid ""
+"The Dynamic Host Configuration Protocol (DHCP) allows a system to connect to "
+"a network in order to be assigned the necessary addressing information for "
+"communication on that network. FreeBSD includes the OpenBSD version of "
+"`dhclient` which is used by the client to obtain the addressing "
+"information. FreeBSD does not install a DHCP server, but several servers "
+"are available in the FreeBSD Ports Collection. The DHCP protocol is fully "
+"described in http://www.freesoft.org/CIE/RFC/2131/[RFC 2131]. Informational "
+"resources are also available at http://www.isc.org/downloads/dhcp/[isc.org/"
+"downloads/dhcp/]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1722
+msgid ""
+"This section describes how to use the built-in DHCP client. It then "
+"describes how to install and configure a DHCP server."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1728
+msgid ""
+"In FreeBSD, the man:bpf[4] device is needed by both the DHCP server and DHCP "
+"client. This device is included in the [.filename]#GENERIC# kernel that is "
+"installed with FreeBSD. Users who prefer to create a custom kernel need to "
+"keep this device if DHCP is used."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1730
+msgid ""
+"It should be noted that [.filename]#bpf# also allows privileged users to run "
+"network packet sniffers on that system."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1733
+#, no-wrap
+msgid "Configuring a DHCP Client"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1737
+msgid ""
+"DHCP client support is included in the FreeBSD installer, making it easy to "
+"configure a newly installed system to automatically receive its networking "
+"addressing information from an existing DHCP server. Refer to crossref:"
+"bsdinstall[bsdinstall-post,\"Accounts, Time Zone, Services and Hardening\"] "
+"for examples of network configuration."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1745
+msgid ""
+"When `dhclient` is executed on the client machine, it begins broadcasting "
+"requests for configuration information. By default, these requests use UDP "
+"port 68. The server replies on UDP port 67, giving the client an IP address "
+"and other relevant network information such as a subnet mask, default "
+"gateway, and DNS server addresses. This information is in the form of a "
+"DHCP \"lease\" and is valid for a configurable time. This allows stale IP "
+"addresses for clients no longer connected to the network to automatically be "
+"reused. DHCP clients can obtain a great deal of information from the "
+"server. An exhaustive list may be found in man:dhcp-options[5]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1748
+msgid ""
+"By default, when a FreeBSD system boots, its DHCP client runs in the "
+"background, or _asynchronously_. Other startup scripts continue to run "
+"while the DHCP process completes, which speeds up system startup."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1753
+msgid ""
+"Background DHCP works well when the DHCP server responds quickly to the "
+"client's requests. However, DHCP may take a long time to complete on some "
+"systems. If network services attempt to run before DHCP has assigned the "
+"network addressing information, they will fail. Using DHCP in _synchronous_ "
+"mode prevents this problem as it pauses startup until the DHCP configuration "
+"has completed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1755
+msgid ""
+"This line in [.filename]#/etc/rc.conf# is used to configure background or "
+"asynchronous mode:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1759
+#, no-wrap
+msgid "ifconfig_fxp0=\"DHCP\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1763
+msgid ""
+"This line may already exist if the system was configured to use DHCP during "
+"installation. Replace the _fxp0_ shown in these examples with the name of "
+"the interface to be dynamically configured, as described in crossref:"
+"config[config-network-setup,“Setting Up Network Interface Cards”]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1765
+msgid ""
+"To instead configure the system to use synchronous mode, and to pause during "
+"startup while DHCP completes, use \"`SYNCDHCP`\":"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1769
+#, no-wrap
+msgid "ifconfig_fxp0=\"SYNCDHCP\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1773
+msgid ""
+"Additional client options are available. Search for `dhclient` in man:rc."
+"conf[5] for details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1775
+msgid "The DHCP client uses the following files:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1777
+msgid "[.filename]#/etc/dhclient.conf#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1781
+msgid ""
+"The configuration file used by `dhclient`. Typically, this file contains "
+"only comments as the defaults are suitable for most clients. This "
+"configuration file is described in man:dhclient.conf[5]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1782
+msgid "[.filename]#/sbin/dhclient#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1784
+msgid ""
+"More information about the command itself can be found in man:dhclient[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1785
+msgid "[.filename]#/sbin/dhclient-script#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1788
+msgid ""
+"The FreeBSD-specific DHCP client configuration script. It is described in "
+"man:dhclient-script[8], but should not need any user modification to "
+"function properly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1789
+msgid "[.filename]#/var/db/dhclient.leases.interface#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1791
+msgid ""
+"The DHCP client keeps a database of valid leases in this file, which is "
+"written as a log and is described in man:dhclient.leases[5]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1794
+#, no-wrap
+msgid "Installing and Configuring a DHCP Server"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1798
+msgid ""
+"This section demonstrates how to configure a FreeBSD system to act as a DHCP "
+"server using the Internet Systems Consortium (ISC) implementation of the "
+"DHCP server. This implementation and its documentation can be installed "
+"using the package:net/isc-dhcp44-server[] package or port."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1801
+msgid ""
+"The installation of package:net/isc-dhcp44-server[] installs a sample "
+"configuration file. Copy [.filename]#/usr/local/etc/dhcpd.conf.example# to "
+"[.filename]#/usr/local/etc/dhcpd.conf# and make any edits to this new file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1804
+msgid ""
+"The configuration file is comprised of declarations for subnets and hosts "
+"which define the information that is provided to DHCP clients. For example, "
+"these lines configure the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1810
+#, no-wrap
+msgid ""
+"option domain-name \"example.org\";<.>\n"
+"option domain-name-servers ns1.example.org;<.>\n"
+"option subnet-mask 255.255.255.0;<.>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1814
+#, no-wrap
+msgid ""
+"default-lease-time 600;<.>\n"
+"max-lease-time 72400;<.>\n"
+"ddns-update-style none;<.>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1819
+#, no-wrap
+msgid ""
+"subnet 10.254.239.0 netmask 255.255.255.224 {\n"
+" range 10.254.239.10 10.254.239.20;<.>\n"
+" option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;<.>\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1824
+#, no-wrap
+msgid ""
+"host fantasia {\n"
+" hardware ethernet 08:00:07:26:c0:a5;<.>\n"
+" fixed-address fantasia.fugue.com;<.>\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1827
+msgid ""
+"This option specifies the default search domain that will be provided to "
+"clients. Refer to man:resolv.conf[5] for more information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1828
+msgid ""
+"This option specifies a comma separated list of DNS servers that the client "
+"should use. They can be listed by their Fully Qualified Domain Names (FQDN), "
+"as seen in the example, or by their IP addresses."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1829
+msgid "The subnet mask that will be provided to clients."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1830
+msgid ""
+"The default lease expiry time in seconds. A client can be configured to "
+"override this value."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1831
+msgid ""
+"The maximum allowed length of time, in seconds, for a lease. Should a client "
+"request a longer lease, a lease will still be issued, but it will only be "
+"valid for `max-lease-time`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1832
+msgid ""
+"The default of `none` disables dynamic DNS updates. Changing this to "
+"`interim` configures the DHCP server to update a DNS server whenever it "
+"hands out a lease so that the DNS server knows which IP addresses are "
+"associated with which computers in the network. Do not change the default "
+"setting unless the DNS server has been configured to support dynamic DNS."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1833
+msgid ""
+"This line creates a pool of available IP addresses which are reserved for "
+"allocation to DHCP clients. The range of addresses must be valid for the "
+"network or subnet specified in the previous line."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1834
+msgid ""
+"Declares the default gateway that is valid for the network or subnet "
+"specified before the opening `{` bracket."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1835
+msgid ""
+"Specifies the hardware MAC address of a client so that the DHCP server can "
+"recognize the client when it makes a request."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1836
+msgid ""
+"Specifies that this host should always be given the same IP address. Using "
+"the hostname is correct, since the DHCP server will resolve the hostname "
+"before returning the lease information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1839
+msgid ""
+"This configuration file supports many more options. Refer to dhcpd.conf(5), "
+"installed with the server, for details and examples."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1841
+msgid ""
+"Once the configuration of [.filename]#dhcpd.conf# is complete, enable the "
+"DHCP server in [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1846
+#, no-wrap
+msgid ""
+"dhcpd_enable=\"YES\"\n"
+"dhcpd_ifaces=\"dc0\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1849
+msgid ""
+"Replace the `dc0` with the interface (or interfaces, separated by "
+"whitespace) that the DHCP server should listen on for DHCP client requests."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1851
+msgid "Start the server by issuing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1855
+#, no-wrap
+msgid "# service isc-dhcpd start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1858
+msgid ""
+"Any future changes to the configuration of the server will require the dhcpd "
+"service to be stopped and then started using man:service[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1861
+msgid ""
+"The DHCP server uses the following files. Note that the manual pages are "
+"installed with the server software."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1863
+msgid "[.filename]#/usr/local/sbin/dhcpd#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1865
+msgid "More information about the dhcpd server can be found in dhcpd(8)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1866
+msgid "[.filename]#/usr/local/etc/dhcpd.conf#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1869
+msgid ""
+"The server configuration file needs to contain all the information that "
+"should be provided to clients, along with information regarding the "
+"operation of the server. This configuration file is described in dhcpd."
+"conf(5)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1870
+msgid "[.filename]#/var/db/dhcpd.leases#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1873
+msgid ""
+"The DHCP server keeps a database of leases it has issued in this file, which "
+"is written as a log. Refer to dhcpd.leases(5), which gives a slightly "
+"longer description."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1874
+msgid "[.filename]#/usr/local/sbin/dhcrelay#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1878
+msgid ""
+"This daemon is used in advanced environments where one DHCP server forwards "
+"a request from a client to another DHCP server on a separate network. If "
+"this functionality is required, install the package:net/isc-dhcp44-relay[] "
+"package or port. The installation includes dhcrelay(8) which provides more "
+"detail."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1881
+#, no-wrap
+msgid "Domain Name System (DNS)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1886
+msgid ""
+"Domain Name System (DNS) is the protocol through which domain names are "
+"mapped to IP addresses, and vice versa. DNS is coordinated across the "
+"Internet through a somewhat complex system of authoritative root, Top Level "
+"Domain (TLD), and other smaller-scale name servers, which host and cache "
+"individual domain information. It is not necessary to run a name server to "
+"perform DNS lookups on a system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1888
+msgid "The following table describes some of the terms associated with DNS:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1889
+#, no-wrap
+msgid "DNS Terminology"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1895
+#, no-wrap
+msgid "Definition"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1896
+#, no-wrap
+msgid "Forward DNS"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1898
+#, no-wrap
+msgid "Mapping of hostnames to IP addresses."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1899
+#, no-wrap
+msgid "Origin"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1901
+#, no-wrap
+msgid "Refers to the domain covered in a particular zone file."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1902
+#, no-wrap
+msgid "Resolver"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1904
+#, no-wrap
+msgid "A system process through which a machine queries a name server for zone information."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1905
+#, no-wrap
+msgid "Reverse DNS"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1907
+#, no-wrap
+msgid "Mapping of IP addresses to hostnames."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1908
+#, no-wrap
+msgid "Root zone"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1910
+#, no-wrap
+msgid "The beginning of the Internet zone hierarchy. All zones fall under the root zone, similar to how all files in a file system fall under the root directory."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1911
+#, no-wrap
+msgid "Zone"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1912
+#, no-wrap
+msgid "An individual domain, subdomain, or portion of the DNS administered by the same authority."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1915
+msgid "Examples of zones:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1917
+msgid "`.` is how the root zone is usually referred to in documentation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1918
+msgid "`org.` is a Top Level Domain (TLD) under the root zone."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1919
+msgid "`example.org.` is a zone under the `org.`TLD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1920
+msgid ""
+"`1.168.192.in-addr.arpa` is a zone referencing all IP addresses which fall "
+"under the `192.168.1.*`IP address space."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1924
+msgid ""
+"As one can see, the more specific part of a hostname appears to its left. "
+"For example, `example.org.` is more specific than `org.`, as `org.` is more "
+"specific than the root zone. The layout of each part of a hostname is much "
+"like a file system: the [.filename]#/dev# directory falls within the root, "
+"and so on."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1925
+#, no-wrap
+msgid "Reasons to Run a Name Server"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1928
+msgid ""
+"Name servers generally come in two forms: authoritative name servers, and "
+"caching (also known as resolving) name servers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1930
+msgid "An authoritative name server is needed when:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1932
+msgid ""
+"One wants to serve DNS information to the world, replying authoritatively to "
+"queries."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1933
+msgid ""
+"A domain, such as `example.org`, is registered and IP addresses need to be "
+"assigned to hostnames under it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1934
+msgid "An IP address block requires reverse DNS entries (IP to hostname)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1935
+msgid "A backup or second name server, called a slave, will reply to queries."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1937
+msgid "A caching name server is needed when:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1939
+msgid ""
+"A local DNS server may cache and respond more quickly than querying an "
+"outside name server."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1943
+msgid ""
+"When one queries for `www.FreeBSD.org`, the resolver usually queries the "
+"uplink ISP's name server, and retrieves the reply. With a local, caching "
+"DNS server, the query only has to be made once to the outside world by the "
+"caching DNS server. Additional queries will not have to go outside the "
+"local network, since the information is cached locally."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1944
+#, no-wrap
+msgid "DNS Server Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1949
+msgid ""
+"Unbound is provided in the FreeBSD base system. By default, it will provide "
+"DNS resolution to the local machine only. While the base system package can "
+"be configured to provide resolution services beyond the local machine, it is "
+"recommended that such requirements be addressed by installing Unbound from "
+"the FreeBSD Ports Collection."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1951
+msgid "To enable Unbound, add the following to [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1955
+#, no-wrap
+msgid "local_unbound_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1958
+msgid ""
+"Any existing nameservers in [.filename]#/etc/resolv.conf# will be configured "
+"as forwarders in the new Unbound configuration."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1964
+msgid ""
+"If any of the listed nameservers do not support DNSSEC, local DNS resolution "
+"will fail. Be sure to test each nameserver and remove any that fail the "
+"test. The following command will show the trust tree or a failure for a "
+"nameserver running on `192.168.1.1`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1968
+#, no-wrap
+msgid "% drill -S FreeBSD.org @192.168.1.1\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1972
+msgid "Once each nameserver is confirmed to support DNSSEC, start Unbound:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1976
+#, no-wrap
+msgid "# service local_unbound onestart\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1980
+msgid ""
+"This will take care of updating [.filename]#/etc/resolv.conf# so that "
+"queries for DNSSEC secured domains will now work. For example, run the "
+"following to validate the FreeBSD.org DNSSEC trust tree:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:1986
+#, no-wrap
+msgid ""
+"% drill -S FreeBSD.org\n"
+";; Number of trusted keys: 1\n"
+";; Chasing: freebsd.org. A\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2002
+#, no-wrap
+msgid ""
+"DNSSEC Trust tree:\n"
+"freebsd.org. (A)\n"
+"|---freebsd.org. (DNSKEY keytag: 36786 alg: 8 flags: 256)\n"
+" |---freebsd.org. (DNSKEY keytag: 32659 alg: 8 flags: 257)\n"
+" |---freebsd.org. (DS keytag: 32659 digest type: 2)\n"
+" |---org. (DNSKEY keytag: 49587 alg: 7 flags: 256)\n"
+" |---org. (DNSKEY keytag: 9795 alg: 7 flags: 257)\n"
+" |---org. (DNSKEY keytag: 21366 alg: 7 flags: 257)\n"
+" |---org. (DS keytag: 21366 digest type: 1)\n"
+" | |---. (DNSKEY keytag: 40926 alg: 8 flags: 256)\n"
+" | |---. (DNSKEY keytag: 19036 alg: 8 flags: 257)\n"
+" |---org. (DS keytag: 21366 digest type: 2)\n"
+" |---. (DNSKEY keytag: 40926 alg: 8 flags: 256)\n"
+" |---. (DNSKEY keytag: 19036 alg: 8 flags: 257)\n"
+";; Chase successful\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2004
+#, no-wrap
+msgid "Authoritative Name Server Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2007
+msgid ""
+"FreeBSD does not provide authoritative name server software in the base "
+"system. Users are encouraged to install third party applications, like "
+"package:dns/nsd[] or package:dns/bind918[] package or port."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2009
+#, no-wrap
+msgid "Apache HTTP Server"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2013
+msgid ""
+"The open source Apache HTTP Server is the most widely used web server. "
+"FreeBSD does not install this web server by default, but it can be installed "
+"from the package:www/apache24[] package or port."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2016
+msgid ""
+"This section summarizes how to configure and start version 2._x_ of the "
+"Apache HTTP Server on FreeBSD. For more detailed information about Apache 2."
+"X and its configuration directives, refer to http://httpd.apache.org/[httpd."
+"apache.org]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2017
+#, no-wrap
+msgid "Configuring and Starting Apache"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2022
+msgid ""
+"In FreeBSD, the main Apache HTTP Server configuration file is installed as [."
+"filename]#/usr/local/etc/apache2x/httpd.conf#, where _x_ represents the "
+"version number. This ASCII text file begins comment lines with a `+#+`. "
+"The most frequently modified directives are:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2023
+#, no-wrap
+msgid "`ServerRoot \"/usr/local\"`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2026
+msgid ""
+"Specifies the default directory hierarchy for the Apache installation. "
+"Binaries are stored in the [.filename]#bin# and [.filename]#sbin# "
+"subdirectories of the server root and configuration files are stored in the "
+"[.filename]#etc/apache2x# subdirectory."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2027
+#, no-wrap
+msgid "`ServerAdmin you@example.com`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2030
+msgid ""
+"Change this to the email address to receive problems with the server. This "
+"address also appears on some server-generated pages, such as error documents."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2031
+#, no-wrap
+msgid "`ServerName www.example.com:80`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2036
+msgid ""
+"Allows an administrator to set a hostname which is sent back to clients for "
+"the server. For example, `www` can be used instead of the actual hostname. "
+"If the system does not have a registered DNS name, enter its IP address "
+"instead. If the server will listen on an alternate report, change `80` to "
+"the alternate port number."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2037
+#, no-wrap
+msgid "`DocumentRoot \"/usr/local/www/apache2_x_/data\"`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2040
+msgid ""
+"The directory where documents will be served from. By default, all requests "
+"are taken from this directory, but symbolic links and aliases may be used to "
+"point to other locations."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2044
+msgid ""
+"It is always a good idea to make a backup copy of the default Apache "
+"configuration file before making changes. When the configuration of Apache "
+"is complete, save the file and verify the configuration using `apachectl`. "
+"Running `apachectl configtest` should return `Syntax OK`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2046
+msgid ""
+"To launch Apache at system startup, add the following line to [.filename]#/"
+"etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2050
+#, no-wrap
+msgid "apache24_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2053
+msgid ""
+"If Apache should be started with non-default options, the following line may "
+"be added to [.filename]#/etc/rc.conf# to specify the needed flags:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2057
+#, no-wrap
+msgid "apache24_flags=\"\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2060
+msgid "If apachectl does not report configuration errors, start `httpd` now:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2064
+#, no-wrap
+msgid "# service apache24 start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2068
+msgid ""
+"The `httpd` service can be tested by entering `http://_localhost_` in a web "
+"browser, replacing _localhost_ with the fully-qualified domain name of the "
+"machine running `httpd`. The default web page that is displayed is [."
+"filename]#/usr/local/www/apache24/data/index.html#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2070
+msgid ""
+"The Apache configuration can be tested for errors after making subsequent "
+"configuration changes while `httpd` is running using the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2074
+#, no-wrap
+msgid "# service apache24 configtest\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2079
+msgid ""
+"It is important to note that `configtest` is not an man:rc[8] standard, and "
+"should not be expected to work for all startup scripts."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2081
+#, no-wrap
+msgid "Virtual Hosting"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2087
+msgid ""
+"Virtual hosting allows multiple websites to run on one Apache server. The "
+"virtual hosts can be _IP-based_ or _name-based_. IP-based virtual hosting "
+"uses a different IP address for each website. Name-based virtual hosting "
+"uses the clients HTTP/1.1 headers to figure out the hostname, which allows "
+"the websites to share the same IP address."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2090
+msgid ""
+"To setup Apache to use name-based virtual hosting, add a `VirtualHost` block "
+"for each website. For example, for the webserver named `www.domain.tld` "
+"with a virtual domain of `www.someotherdomain.tld`, add the following "
+"entries to [.filename]#httpd.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2097
+#, no-wrap
+msgid ""
+"<VirtualHost *>\n"
+" ServerName www.domain.tld\n"
+" DocumentRoot /www/domain.tld\n"
+"</VirtualHost>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2102
+#, no-wrap
+msgid ""
+"<VirtualHost *>\n"
+" ServerName www.someotherdomain.tld\n"
+" DocumentRoot /www/someotherdomain.tld\n"
+"</VirtualHost>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2105
+msgid ""
+"For each virtual host, replace the values for `ServerName` and "
+"`DocumentRoot` with the values to be used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2107
+msgid ""
+"For more information about setting up virtual hosts, consult the official "
+"Apache documentation at: http://httpd.apache.org/docs/vhosts/[http://httpd."
+"apache.org/docs/vhosts/]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2108
+#, no-wrap
+msgid "Apache Modules"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2112
+msgid ""
+"Apache uses modules to augment the functionality provided by the basic "
+"server. Refer to http://httpd.apache.org/docs/current/mod/[http://httpd."
+"apache.org/docs/current/mod/] for a complete listing of and the "
+"configuration details for the available modules."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2117
+msgid ""
+"In FreeBSD, some modules can be compiled with the package:www/apache24[] "
+"port. Type `make config` within [.filename]#/usr/ports/www/apache24# to see "
+"which modules are available and which are enabled by default. If the module "
+"is not compiled with the port, the FreeBSD Ports Collection provides an easy "
+"way to install many modules. This section describes three of the most "
+"commonly used modules."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2118
+#, no-wrap
+msgid "SSL support"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2125
+msgid ""
+"At one point, support for SSL inside of Apache required a secondary module "
+"called [.filename]#mod_ssl#. This is no longer the case and the default "
+"install of Apache comes with SSL built into the web server. An example of "
+"how to enable support for SSL websites is available in the installed file, [."
+"filename]#httpd-ssl.conf# inside of the [.filename]#/usr/local/etc/apache24/"
+"extra# directory Inside this directory is also a sample file called named [."
+"filename]#ssl.conf-sample#. It is recommended that both files be evaluated "
+"to properly set up secure websites in the Apache web server."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2127
+msgid ""
+"After the configuration of SSL is complete, the following line must be "
+"uncommented in the main [.filename]#http.conf# to activate the changes on "
+"the next restart or reload of Apache:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2131
+#, no-wrap
+msgid "#Include etc/apache24/extra/httpd-ssl.conf\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2138
+msgid ""
+"SSL version two and version three have known vulnerability issues. It is "
+"highly recommended TLS version 1.2 and 1.3 be enabled in place of the older "
+"SSL options. This can be accomplished by setting the following options in "
+"the [.filename]#ssl.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2145
+#, no-wrap
+msgid ""
+"SSLProtocol all -SSLv3 -SSLv2 +TLSv1.2 +TLSv1.3\n"
+"SSLProxyProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2148
+msgid ""
+"To complete the configuration of SSL in the web server, uncomment the "
+"following line to ensure that the configuration will be pulled into Apache "
+"during restart or reload:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2153
+#, no-wrap
+msgid ""
+"# Secure (SSL/TLS) connections\n"
+"Include etc/apache24/extra/httpd-ssl.conf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2156
+msgid ""
+"The following lines must also be uncommented in the [.filename]#httpd.conf# "
+"to fully support SSL in Apache:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2162
+#, no-wrap
+msgid ""
+"LoadModule authn_socache_module libexec/apache24/mod_authn_socache.so\n"
+"LoadModule socache_shmcb_module libexec/apache24/mod_socache_shmcb.so\n"
+"LoadModule ssl_module libexec/apache24/mod_ssl.so\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2166
+msgid ""
+"The next step is to work with a certificate authority to have the "
+"appropriate certificates installed on the system. This will set up a chain "
+"of trust for the site and prevent any warnings of self-signed certificates."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2167
+#, no-wrap
+msgid "[.filename]#mod_perl#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2171
+msgid ""
+"The [.filename]#mod_perl# module makes it possible to write Apache modules "
+"in Perl. In addition, the persistent interpreter embedded in the server "
+"avoids the overhead of starting an external interpreter and the penalty of "
+"Perl start-up time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2174
+msgid ""
+"The [.filename]#mod_perl# can be installed using the package:www/mod_perl2[] "
+"package or port. Documentation for using this module can be found at http://"
+"perl.apache.org/docs/2.0/index.html[http://perl.apache.org/docs/2.0/index."
+"html]."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2175
+#, no-wrap
+msgid "[.filename]#mod_php#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2179
+msgid ""
+"_PHP: Hypertext Preprocessor_ (PHP) is a general-purpose scripting language "
+"that is especially suited for web development. Capable of being embedded "
+"into HTML, its syntax draws upon C, Java(TM), and Perl with the intention of "
+"allowing web developers to write dynamically generated webpages quickly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2181
+msgid ""
+"Support for PHP for Apache and any other feature written in the language, "
+"can be added by installing the appropriate port."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2183
+msgid "For all supported versions, search the package database using `pkg`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2187
+#, no-wrap
+msgid "# pkg search php\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2192
+msgid ""
+"A list will be displayed including the versions and additional features they "
+"provide. The components are completely modular, meaning features are "
+"enabled by installing the appropriate port. To install PHP version 7.4 for "
+"Apache, issue the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2196
+#, no-wrap
+msgid "# pkg install mod_php74\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2199
+msgid ""
+"If any dependency packages need to be installed, they will be installed as "
+"well."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2202
+msgid ""
+"By default, PHP will not be enabled. The following lines will need to be "
+"added to the Apache configuration file located in [.filename]#/usr/local/etc/"
+"apache24# to make it active:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2211
+#, no-wrap
+msgid ""
+"<FilesMatch \"\\.php$\">\n"
+" SetHandler application/x-httpd-php\n"
+"</FilesMatch>\n"
+"<FilesMatch \"\\.phps$\">\n"
+" SetHandler application/x-httpd-php-source\n"
+"</FilesMatch>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2214
+msgid ""
+"In addition, the `DirectoryIndex` in the configuration file will also need "
+"to be updated and Apache will either need to be restarted or reloaded for "
+"the changes to take effect."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2217
+msgid ""
+"Support for many of the PHP features may also be installed by using `pkg`. "
+"For example, to install support for XML or SSL, install their respective "
+"ports:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2221
+#, no-wrap
+msgid "# pkg install php74-xml php74-openssl\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2224
+msgid ""
+"As before, the Apache configuration will need to be reloaded for the changes "
+"to take effect, even in cases where it was just a module install."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2226
+msgid ""
+"To perform a graceful restart to reload the configuration, issue the "
+"following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2230
+#, no-wrap
+msgid "# apachectl graceful\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2234
+msgid ""
+"Once the install is complete, there are two methods of obtaining the "
+"installed PHP support modules and the environmental information of the "
+"build. The first is to install the full PHP binary and running the command "
+"to gain the information:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2238
+#, no-wrap
+msgid "# pkg install php74\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2244
+#, no-wrap
+msgid "# php -i |less\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2247
+msgid ""
+"It is necessary to pass the output to a pager, such as the `more` or `less` "
+"to easier digest the amount of output."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2251
+msgid ""
+"Finally, to make any changes to the global configuration of PHP there is a "
+"well documented file installed into [.filename]#/usr/local/etc/php.ini#. At "
+"the time of install, this file will not exist because there are two versions "
+"to choose from, one is [.filename]#php.ini-development# and the other is [."
+"filename]#php.ini-production#. These are starting points to assist "
+"administrators in their deployment."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2252
+#, no-wrap
+msgid "HTTP2 Support"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2257
+msgid ""
+"Apache support for the HTTP2 protocol is included by default when installing "
+"the port with `pkg`. The new version of HTTP includes many improvements "
+"over the previous version, including utilizing a single connection to a "
+"website, reducing overall roundtrips of TCP connections. Also, packet "
+"header data is compressed and HTTP2 requires encryption by default."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2260
+msgid ""
+"When Apache is configured to only use HTTP2, web browsers will require "
+"secure, encrypted HTTPS connections. When Apache is configured to use both "
+"versions, HTTP1.1 will be considered a fall back option if any issues arise "
+"during the connection."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2263
+msgid ""
+"While this change does require administrators to make changes, they are "
+"positive and equate to a more secure Internet for everyone. The changes are "
+"only required for sites not currently implementing SSL and TLS."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2268
+msgid ""
+"This configuration depends on the previous sections, including TLS support. "
+"It is recommended those instructions be followed before continuing with this "
+"configuration."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2271
+msgid ""
+"Start the process by enabling the http2 module by uncommenting the line in [."
+"filename]#/usr/local/etc/apache24/httpd.conf# and replace the mpm_prefork "
+"module with mpm_event as the former does not support HTTP2."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2276
+#, no-wrap
+msgid ""
+"LoadModule http2_module libexec/apache24/mod_http2.so\n"
+"LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2284
+msgid ""
+"There is a separate [.filename]#mod_http2# port that is available. It "
+"exists to deliver security and bug fixes quicker than the module installed "
+"with the bundled [.filename]#apache24# port. It is not required for HTTP2 "
+"support but is available. When installed, the [.filename]#mod_h2.so# should "
+"be used in place of [.filename]#mod_http2.so# in the Apache configuration."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2288
+msgid ""
+"There are two methods to implement HTTP2 in Apache; one way is globally for "
+"all sites and each VirtualHost running on the system. To enable HTTP2 "
+"globally, add the following line under the ServerName directive:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2292
+#, no-wrap
+msgid "Protocols h2 http/1.1\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2297
+msgid ""
+"To enable HTTP2 over plaintext, use h2h2chttp/1.1 in the [.filename]#httpd."
+"conf#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2301
+msgid ""
+"Having the h2c here will allow plaintext HTTP2 data to pass on the system "
+"but is not recommended. In addition, using the http/1.1 here will allow "
+"fallback to the HTTP1.1 version of the protocol should it be needed by the "
+"system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2303
+msgid ""
+"To enable HTTP2 for individual VirtualHosts, add the same line within the "
+"VirtualHost directive in either [.filename]#httpd.conf# or [.filename]#httpd-"
+"ssl.conf#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2305
+msgid ""
+"Reload the configuration using the `apachectl`[parameter]#reload# command "
+"and test the configuration either by using either of the following methods "
+"after visiting one of the hosted pages:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2309
+#, no-wrap
+msgid "# grep \"HTTP/2.0\" /var/log/httpd-access.log\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2312
+msgid "This should return something similar to the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2319
+#, no-wrap
+msgid ""
+"192.168.1.205 - - [18/Oct/2020:18:34:36 -0400] \"GET / HTTP/2.0\" 304 -\n"
+"192.0.2.205 - - [18/Oct/2020:19:19:57 -0400] \"GET / HTTP/2.0\" 304 -\n"
+"192.0.0.205 - - [18/Oct/2020:19:20:52 -0400] \"GET / HTTP/2.0\" 304 -\n"
+"192.0.2.205 - - [18/Oct/2020:19:23:10 -0400] \"GET / HTTP/2.0\" 304 -\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2322
+msgid ""
+"The other method is using the web browser's built in site debugger or "
+"`tcpdump`; however, using either method is beyond the scope of this document."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2325
+msgid ""
+"Support for HTTP2 reverse proxy connections by using the [."
+"filename]#mod_proxy_http2.so# module. When configuring the ProxyPass or "
+"RewriteRules [P] statements, they should use h2:// for the connection."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2326
+#, no-wrap
+msgid "Dynamic Websites"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2330
+msgid ""
+"In addition to mod_perl and mod_php, other languages are available for "
+"creating dynamic web content. These include Django and Ruby on Rails."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2331
+#, no-wrap
+msgid "Django"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2337
+msgid ""
+"Django is a BSD-licensed framework designed to allow developers to write "
+"high performance, elegant web applications quickly. It provides an object-"
+"relational mapper so that data types are developed as Python objects. A "
+"rich dynamic database-access API is provided for those objects without the "
+"developer ever having to write SQL. It also provides an extensible template "
+"system so that the logic of the application is separated from the HTML "
+"presentation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2341
+msgid ""
+"Django depends on [.filename]#mod_python#, and an SQL database engine. In "
+"FreeBSD, the package:www/py-django[] port automatically installs [."
+"filename]#mod_python# and supports the PostgreSQL, MySQL, or SQLite "
+"databases, with the default being SQLite. To change the database engine, "
+"type `make config` within [.filename]#/usr/ports/www/py-django#, then "
+"install the port."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2344
+msgid ""
+"Once Django is installed, the application will need a project directory "
+"along with the Apache configuration in order to use the embedded Python "
+"interpreter. This interpreter is used to call the application for specific "
+"URLs on the site."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2346
+msgid ""
+"To configure Apache to pass requests for certain URLs to the web "
+"application, add the following to [.filename]#httpd.conf#, specifying the "
+"full path to the project directory:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2357
+#, no-wrap
+msgid ""
+"<Location \"/\">\n"
+" SetHandler python-program\n"
+" PythonPath \"['/dir/to/the/django/packages/'] + sys.path\"\n"
+" PythonHandler django.core.handlers.modpython\n"
+" SetEnv DJANGO_SETTINGS_MODULE mysite.settings\n"
+" PythonAutoReload On\n"
+" PythonDebug On\n"
+"</Location>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2360
+msgid ""
+"Refer to https://docs.djangoproject.com[https://docs.djangoproject.com] for "
+"more information on how to use Django."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2361
+#, no-wrap
+msgid "Ruby on Rails"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2366
+msgid ""
+"Ruby on Rails is another open source web framework that provides a full "
+"development stack. It is optimized to make web developers more productive "
+"and capable of writing powerful applications quickly. On FreeBSD, it can be "
+"installed using the package:www/rubygem-rails[] package or port."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2368
+msgid ""
+"Refer to http://guides.rubyonrails.org[http://guides.rubyonrails.org] for "
+"more information on how to use Ruby on Rails."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2370
+#, no-wrap
+msgid "File Transfer Protocol (FTP)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2374
+msgid ""
+"The File Transfer Protocol (FTP) provides users with a simple way to "
+"transfer files to and from an FTP server. FreeBSD includes FTP server "
+"software, ftpd, in the base system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2378
+msgid ""
+"FreeBSD provides several configuration files for controlling access to the "
+"FTP server. This section summarizes these files. Refer to man:ftpd[8] for "
+"more details about the built-in FTP server."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2379
+#, no-wrap
+msgid "Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2385
+msgid ""
+"The most important configuration step is deciding which accounts will be "
+"allowed access to the FTP server. A FreeBSD system has a number of system "
+"accounts which should not be allowed FTP access. The list of users "
+"disallowed any FTP access can be found in [.filename]#/etc/ftpusers#. By "
+"default, it includes system accounts. Additional users that should not be "
+"allowed access to FTP can be added."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2389
+msgid ""
+"In some cases it may be desirable to restrict the access of some users "
+"without preventing them completely from using FTP. This can be accomplished "
+"be creating [.filename]#/etc/ftpchroot# as described in man:ftpchroot[5]. "
+"This file lists users and groups subject to FTP access restrictions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2394
+msgid ""
+"To enable anonymous FTP access to the server, create a user named `ftp` on "
+"the FreeBSD system. Users will then be able to log on to the FTP server "
+"with a username of `ftp` or `anonymous`. When prompted for the password, "
+"any input will be accepted, but by convention, an email address should be "
+"used as the password. The FTP server will call man:chroot[2] when an "
+"anonymous user logs in, to restrict access to only the home directory of the "
+"`ftp` user."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2399
+msgid ""
+"There are two text files that can be created to specify welcome messages to "
+"be displayed to FTP clients. The contents of [.filename]#/etc/ftpwelcome# "
+"will be displayed to users before they reach the login prompt. After a "
+"successful login, the contents of [.filename]#/etc/ftpmotd# will be "
+"displayed. Note that the path to this file is relative to the login "
+"environment, so the contents of [.filename]#~ftp/etc/ftpmotd# would be "
+"displayed for anonymous users."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2401
+msgid ""
+"Once the FTP server has been configured, set the appropriate variable in [."
+"filename]#/etc/rc.conf# to start the service during boot:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2405
+#, no-wrap
+msgid "ftpd_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2408
+msgid "To start the service now:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2412
+#, no-wrap
+msgid "# service ftpd start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2415
+msgid "Test the connection to the FTP server by typing:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2419
+#, no-wrap
+msgid "% ftp localhost\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2424
+msgid ""
+"The ftpd daemon uses man:syslog[3] to log messages. By default, the system "
+"log daemon will write messages related to FTP in [.filename]#/var/log/"
+"xferlog#. The location of the FTP log can be modified by changing the "
+"following line in [.filename]#/etc/syslog.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2428
+#, no-wrap
+msgid "ftp.info /var/log/xferlog\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2437
+msgid ""
+"Be aware of the potential problems involved with running an anonymous FTP "
+"server. In particular, think twice about allowing anonymous users to upload "
+"files. It may turn out that the FTP site becomes a forum for the trade of "
+"unlicensed commercial software or worse. If anonymous FTP uploads are "
+"required, then verify the permissions so that these files cannot be read by "
+"other anonymous users until they have been reviewed by an administrator."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2440
+#, no-wrap
+msgid "File and Print Services for Microsoft(R) Windows(R) Clients (Samba)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2447
+msgid ""
+"Samba is a popular open source software package that provides file and print "
+"services using the SMB/CIFS protocol. This protocol is built into "
+"Microsoft(R) Windows(R) systems. It can be added to non-Microsoft(R) "
+"Windows(R) systems by installing the Samba client libraries. The protocol "
+"allows clients to access shared data and printers. These shares can be "
+"mapped as a local disk drive and shared printers can be used as if they were "
+"local printers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2450
+msgid ""
+"On FreeBSD, the Samba client libraries can be installed using the package:"
+"net/samba416[] port or package. The client provides the ability for a "
+"FreeBSD system to access SMB/CIFS shares in a Microsoft(R) Windows(R) "
+"network."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2453
+msgid ""
+"A FreeBSD system can also be configured to act as a Samba server by "
+"installing the same package:net/samba416[] port or package. This allows the "
+"administrator to create SMB/CIFS shares on the FreeBSD system which can be "
+"accessed by clients running Microsoft(R) Windows(R) or the Samba client "
+"libraries."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2454
+#, no-wrap
+msgid "Server Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2458
+msgid ""
+"Samba is configured in [.filename]#/usr/local/etc/smb4.conf#. This file "
+"must be created before Samba can be used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2461
+msgid ""
+"A simple [.filename]#smb4.conf# to share directories and printers with "
+"Windows(R) clients in a workgroup is shown here. For more complex setups "
+"involving LDAP or Active Directory, it is easier to use man:samba-tool[8] to "
+"create the initial [.filename]#smb4.conf#."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2471
+#, no-wrap
+msgid ""
+"[global]\n"
+"workgroup = WORKGROUP\n"
+"server string = Samba Server Version %v\n"
+"netbios name = ExampleMachine\n"
+"wins support = Yes\n"
+"security = user\n"
+"passdb backend = tdbsam\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2483
+#, no-wrap
+msgid ""
+"# Example: share /usr/src accessible only to 'developer' user\n"
+"[src]\n"
+"path = /usr/src\n"
+"valid users = developer\n"
+"writable = yes\n"
+"browsable = yes\n"
+"read only = no\n"
+"guest ok = no\n"
+"public = no\n"
+"create mask = 0666\n"
+"directory mask = 0755\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2486
+#, no-wrap
+msgid "Global Settings"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2489
+msgid ""
+"Settings that describe the network are added in [.filename]#/usr/local/etc/"
+"smb4.conf#:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2490
+#, no-wrap
+msgid "`workgroup`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2492
+msgid "The name of the workgroup to be served."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2493
+#, no-wrap
+msgid "`netbios name`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2496
+msgid ""
+"The NetBIOS name by which a Samba server is known. By default, it is the "
+"same as the first component of the host's DNS name."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2497
+#, no-wrap
+msgid "`server string`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2499
+msgid ""
+"The string that will be displayed in the output of `net view` and some other "
+"networking tools that seek to display descriptive text about the server."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2500
+#, no-wrap
+msgid "`wins support`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2503
+msgid ""
+"Whether Samba will act as a WINS server. Do not enable support for WINS on "
+"more than one server on the network."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2505
+#, no-wrap
+msgid "Security Settings"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2509
+msgid ""
+"The most important settings in [.filename]#/usr/local/etc/smb4.conf# are the "
+"security model and the backend password format. These directives control "
+"the options:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2510
+#, no-wrap
+msgid "`security`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2514
+msgid ""
+"The most common settings are `security = share` and `security = user`. If "
+"the clients use usernames that are the same as their usernames on the "
+"FreeBSD machine, user level security should be used. This is the default "
+"security policy and it requires clients to first log on before they can "
+"access shared resources."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2517
+msgid ""
+"In share level security, clients do not need to log onto the server with a "
+"valid username and password before attempting to connect to a shared "
+"resource. This was the default security model for older versions of Samba."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2518
+#, no-wrap
+msgid "`passdb backend`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2524
+msgid ""
+"Samba has several different backend authentication models. Clients may be "
+"authenticated with LDAP, NIS+, an SQL database, or a modified password "
+"file. The recommended authentication method, `tdbsam`, is ideal for simple "
+"networks and is covered here. For larger or more complex networks, "
+"`ldapsam` is recommended. `smbpasswd` was the former default and is now "
+"obsolete."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2525
+#, no-wrap
+msgid "Samba Users"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2529
+msgid ""
+"FreeBSD user accounts must be mapped to the `SambaSAMAccount` database for "
+"Windows(R) clients to access the share. Map existing FreeBSD user accounts "
+"using man:pdbedit[8]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2533
+#, no-wrap
+msgid "# pdbedit -a -u username\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2537
+msgid ""
+"This section has only mentioned the most commonly used settings. Refer to "
+"the https://wiki.samba.org[Official Samba Wiki] for additional information "
+"about the available configuration options."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2538
+#, no-wrap
+msgid "Starting Samba"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2541
+msgid ""
+"To enable Samba at boot time, add the following line to [.filename]#/etc/rc."
+"conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2545
+#, no-wrap
+msgid "samba_server_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2548
+msgid "To start Samba now:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2555
+#, no-wrap
+msgid ""
+"# service samba_server start\n"
+"Performing sanity check on Samba configuration: OK\n"
+"Starting nmbd.\n"
+"Starting smbd.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2560
+msgid ""
+"Samba consists of three separate daemons. Both the nmbd and smbd daemons "
+"are started by `samba_enable`. If winbind name resolution is also required, "
+"set:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2564
+#, no-wrap
+msgid "winbindd_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2567
+msgid "Samba can be stopped at any time by typing:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2571
+#, no-wrap
+msgid "# service samba_server stop\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2575
+msgid ""
+"Samba is a complex software suite with functionality that allows broad "
+"integration with Microsoft(R) Windows(R) networks. For more information "
+"about functionality beyond the basic configuration described here, refer to "
+"https://www.samba.org[https://www.samba.org]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2577
+#, no-wrap
+msgid "Clock Synchronization with NTP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2583
+msgid ""
+"Over time, a computer's clock is prone to drift. This is problematic as "
+"many network services require the computers on a network to share the same "
+"accurate time. Accurate time is also needed to ensure that file timestamps "
+"stay consistent. The Network Time Protocol (NTP) is one way to provide "
+"clock accuracy in a network."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2585
+msgid ""
+"FreeBSD includes man:ntpd[8] which can be configured to query other NTP "
+"servers to synchronize the clock on that machine or to provide time services "
+"to other computers in the network."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2588
+msgid ""
+"This section describes how to configure ntpd on FreeBSD. Further "
+"documentation can be found in [.filename]#/usr/share/doc/ntp/# in HTML "
+"format."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2589
+#, no-wrap
+msgid "NTP Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2593
+msgid ""
+"On FreeBSD, the built-in ntpd can be used to synchronize a system's clock. "
+"ntpd is configured using man:rc.conf[5] variables and [.filename]#/etc/ntp."
+"conf#, as detailed in the following sections."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2596
+msgid ""
+"ntpd communicates with its network peers using UDP packets. Any firewalls "
+"between your machine and its NTP peers must be configured to allow UDP "
+"packets in and out on port 123."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2597
+#, no-wrap
+msgid "The [.filename]#/etc/ntp.conf# file"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2607
+msgid ""
+"ntpd reads [.filename]#/etc/ntp.conf# to determine which NTP servers to "
+"query. Choosing several NTP servers is recommended in case one of the "
+"servers becomes unreachable or its clock proves unreliable. As ntpd "
+"receives responses, it favors reliable servers over the less reliable ones. "
+"The servers which are queried can be local to the network, provided by an "
+"ISP, or selected from an http://support.ntp.org/bin/view/Servers/"
+"WebHome[ online list of publicly accessible NTP servers]. When choosing a "
+"public NTP server, select one that is geographically close and review its "
+"usage policy. The `pool` configuration keyword selects one or more servers "
+"from a pool of servers. An http://support.ntp.org/bin/view/Servers/"
+"NTPPoolServers[ online list of publicly accessible NTP pools] is available, "
+"organized by geographic area. In addition, FreeBSD provides a project-"
+"sponsored pool, `0.freebsd.pool.ntp.org`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2608
+#, no-wrap
+msgid "Sample [.filename]#/etc/ntp.conf#"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2613
+msgid ""
+"This is a simple example of an [.filename]#ntp.conf# file. It can safely be "
+"used as-is; it contains the recommended `restrict` options for operation on "
+"a publicly-accessible network connection."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2621
+#, no-wrap
+msgid ""
+"# Disallow ntpq control/query access. Allow peers to be added only\n"
+"# based on pool and server statements in this file.\n"
+"restrict default limited kod nomodify notrap noquery nopeer\n"
+"restrict source limited kod nomodify notrap noquery\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2625
+#, no-wrap
+msgid ""
+"# Allow unrestricted access from localhost for queries and control.\n"
+"restrict 127.0.0.1\n"
+"restrict ::1\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2628
+#, no-wrap
+msgid ""
+"# Add a specific server.\n"
+"server ntplocal.example.com iburst\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2632
+#, no-wrap
+msgid ""
+"# Add FreeBSD pool servers until 3-6 good servers are available.\n"
+"tos minclock 3 maxclock 6\n"
+"pool 0.freebsd.pool.ntp.org iburst\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2635
+#, no-wrap
+msgid ""
+"# Use a local leap-seconds file.\n"
+"leapfile \"/var/db/ntpd.leap-seconds.list\"\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2641
+msgid ""
+"The format of this file is described in man:ntp.conf[5]. The descriptions "
+"below provide a quick overview of just the keywords used in the sample file "
+"above."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2647
+msgid ""
+"By default, an NTP server is accessible to any network host. The `restrict` "
+"keyword controls which systems can access the server. Multiple `restrict` "
+"entries are supported, each one refining the restrictions given in previous "
+"statements. The values shown in the example grant the local system full "
+"query and control access, while allowing remote systems only the ability to "
+"query the time. For more details, refer to the `Access Control Support` "
+"subsection of man:ntp.conf[5]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2653
+msgid ""
+"The `server` keyword specifies a single server to query. The file can "
+"contain multiple server keywords, with one server listed on each line. The "
+"`pool` keyword specifies a pool of servers. ntpd will add one or more "
+"servers from this pool as needed to reach the number of peers specified "
+"using the `tos minclock` value. The `iburst` keyword directs ntpd to "
+"perform a burst of eight quick packet exchanges with a server when contact "
+"is first established, to help quickly synchronize system time."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2657
+msgid ""
+"The `leapfile` keyword specifies the location of a file containing "
+"information about leap seconds. The file is updated automatically by man:"
+"periodic[8]. The file location specified by this keyword must match the "
+"location set in the `ntp_db_leapfile` variable in [.filename]#/etc/rc.conf#."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2658
+#, no-wrap
+msgid "NTP entries in [.filename]#/etc/rc.conf#"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2662
+msgid ""
+"Set `ntpd_enable=YES` to start ntpd at boot time. Once `ntpd_enable=YES` "
+"has been added to [.filename]#/etc/rc.conf#, ntpd can be started immediately "
+"without rebooting the system by typing:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2666
+#, no-wrap
+msgid "# service ntpd start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2670
+msgid ""
+"Only `ntpd_enable` must be set to use ntpd. The [.filename]#rc.conf# "
+"variables listed below may also be set as needed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2674
+msgid ""
+"Set `ntpd_sync_on_start=YES` to allow ntpd to step the clock any amount, one "
+"time at startup. Normally ntpd will log an error message and exit if the "
+"clock is off by more than 1000 seconds. This option is especially useful on "
+"systems without a battery-backed realtime clock."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2676
+msgid ""
+"Set `ntpd_oomprotect=YES` to protect the ntpd daemon from being killed by "
+"the system attempting to recover from an Out Of Memory (OOM) condition."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2678
+msgid ""
+"Set `ntpd_config=` to the location of an alternate [.filename]#ntp.conf# "
+"file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2680
+msgid ""
+"Set `ntpd_flags=` to contain any other ntpd flags as needed, but avoid using "
+"these flags which are managed internally by [.filename]#/etc/rc.d/ntpd#:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2682
+msgid "`-p` (pid file location)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2683
+msgid "`-c` (set `ntpd_config=` instead)"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2685
+#, no-wrap
+msgid "ntpd and the unpriveleged `ntpd` user"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2692
+msgid ""
+"ntpd on FreeBSD can start and run as an unpriveleged user. Doing so "
+"requires the man:mac_ntpd[4] policy module. The [.filename]#/etc/rc.d/ntpd# "
+"startup script first examines the NTP configuration. If possible, it loads "
+"the `mac_ntpd` module, then starts ntpd as unpriveleged user `ntpd` (user id "
+"123). To avoid problems with file and directory access, the startup script "
+"will not automatically start ntpd as `ntpd` when the configuration contains "
+"any file-related options."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2694
+msgid ""
+"The presence of any of the following in `ntpd_flags` requires manual "
+"configuration as described below to run as the `ntpd` user:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2696
+msgid "-f or --driftfile"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2697
+msgid "-i or --jaildir"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2698
+msgid "-k or --keyfile"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2699
+msgid "-l or --logfile"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2700
+msgid "-s or --statsdir"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2702
+msgid ""
+"The presence of any of the following keywords in [.filename]#ntp.conf# "
+"requires manual configuration as described below to run as the `ntpd` user:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2704
+msgid "crypto"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2705
+msgid "driftfile"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2706
+msgid "key"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2707
+msgid "logdir"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2708
+msgid "statsdir"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2710
+msgid "To manually configure ntpd to run as user `ntpd` you must:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2712
+msgid ""
+"Ensure that the `ntpd` user has access to all the files and directories "
+"specified in the configuration."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2713
+msgid ""
+"Arrange for the `mac_ntpd` module to be loaded or compiled into the kernel. "
+"See man:mac_ntpd[4] for details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2714
+msgid "Set `ntpd_user=\"ntpd\"` in [.filename]#/etc/rc.conf#"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2715
+#, no-wrap
+msgid "Using NTP with a PPP Connection"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2720
+msgid ""
+"ntpd does not need a permanent connection to the Internet to function "
+"properly. However, if a PPP connection is configured to dial out on demand, "
+"NTP traffic should be prevented from triggering a dial out or keeping the "
+"connection alive. This can be configured with `filter` directives in [."
+"filename]#/etc/ppp/ppp.conf#. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2731
+#, no-wrap
+msgid ""
+"set filter dial 0 deny udp src eq 123\n"
+"# Prevent NTP traffic from initiating dial out\n"
+"set filter dial 1 permit 0 0\n"
+"set filter alive 0 deny udp src eq 123\n"
+"# Prevent incoming NTP traffic from keeping the connection open\n"
+"set filter alive 1 deny udp dst eq 123\n"
+"# Prevent outgoing NTP traffic from keeping the connection open\n"
+"set filter alive 2 permit 0/0 0/0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2734
+msgid ""
+"For more details, refer to the `PACKET FILTERING` section in man:ppp[8] and "
+"the examples in [.filename]#/usr/share/examples/ppp/#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2738
+msgid ""
+"Some Internet access providers block low-numbered ports, preventing NTP from "
+"functioning since replies never reach the machine."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2741
+#, no-wrap
+msgid "iSCSI Initiator and Target Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2745
+msgid ""
+"iSCSI is a way to share storage over a network. Unlike NFS, which works at "
+"the file system level, iSCSI works at the block device level."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2749
+msgid ""
+"In iSCSI terminology, the system that shares the storage is known as the "
+"_target_. The storage can be a physical disk, or an area representing "
+"multiple disks or a portion of a physical disk. For example, if the disk(s) "
+"are formatted with ZFS, a zvol can be created to use as the iSCSI storage."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2753
+msgid ""
+"The clients which access the iSCSI storage are called _initiators_. To "
+"initiators, the storage available through iSCSI appears as a raw, "
+"unformatted disk known as a LUN. Device nodes for the disk appear in [."
+"filename]#/dev/# and the device must be separately formatted and mounted."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2756
+msgid ""
+"FreeBSD provides a native, kernel-based iSCSI target and initiator. This "
+"section describes how to configure a FreeBSD system as a target or an "
+"initiator."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2758
+#, no-wrap
+msgid "Configuring an iSCSI Target"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2761
+msgid ""
+"To configure an iSCSI target, create the [.filename]#/etc/ctl.conf# "
+"configuration file, add a line to [.filename]#/etc/rc.conf# to make sure the "
+"man:ctld[8] daemon is automatically started at boot, and then start the "
+"daemon."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2764
+msgid ""
+"The following is an example of a simple [.filename]#/etc/ctl.conf# "
+"configuration file. Refer to man:ctl.conf[5] for a complete description of "
+"this file's available options."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2772
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2850
+#, no-wrap
+msgid ""
+"portal-group pg0 {\n"
+"\tdiscovery-auth-group no-authentication\n"
+"\tlisten 0.0.0.0\n"
+"\tlisten [::]\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2776
+#, no-wrap
+msgid ""
+"target iqn.2012-06.com.example:target0 {\n"
+"\tauth-group no-authentication\n"
+"\tportal-group pg0\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2782
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2880
+#, no-wrap
+msgid ""
+"\tlun 0 {\n"
+"\t\tpath /data/target0-0\n"
+"\t\tsize 4G\n"
+"\t}\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2788
+msgid ""
+"The first entry defines the `pg0` portal group. Portal groups define which "
+"network addresses the man:ctld[8] daemon will listen on. The `discovery-"
+"auth-group no-authentication` entry indicates that any initiator is allowed "
+"to perform iSCSI target discovery without authentication. Lines three and "
+"four configure man:ctld[8] to listen on all IPv4 (`listen 0.0.0.0`) and IPv6 "
+"(`listen [::]`) addresses on the default port of 3260."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2791
+msgid ""
+"It is not necessary to define a portal group as there is a built-in portal "
+"group called `default`. In this case, the difference between `default` and "
+"`pg0` is that with `default`, target discovery is always denied, while with "
+"`pg0`, it is always allowed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2799
+msgid ""
+"The second entry defines a single target. Target has two possible meanings: "
+"a machine serving iSCSI or a named group of LUNs. This example uses the "
+"latter meaning, where `iqn.2012-06.com.example:target0` is the target name. "
+"This target name is suitable for testing purposes. For actual use, change "
+"`com.example` to the real domain name, reversed. The `2012-06` represents "
+"the year and month of acquiring control of that domain name, and `target0` "
+"can be any value. Any number of targets can be defined in this "
+"configuration file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2801
+msgid ""
+"The `auth-group no-authentication` line allows all initiators to connect to "
+"the specified target and `portal-group pg0` makes the target reachable "
+"through the `pg0` portal group."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2809
+msgid ""
+"The next section defines the LUN. To the initiator, each LUN will be "
+"visible as a separate disk device. Multiple LUNs can be defined for each "
+"target. Each LUN is identified by a number, where LUN 0 is mandatory. The "
+"`path /data/target0-0` line defines the full path to a file or zvol backing "
+"the LUN. That path must exist before starting man:ctld[8]. The second line "
+"is optional and specifies the size of the LUN."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2811
+msgid ""
+"Next, to make sure the man:ctld[8] daemon is started at boot, add this line "
+"to [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2815
+#, no-wrap
+msgid "ctld_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2818
+msgid "To start man:ctld[8] now, run this command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2822
+#, no-wrap
+msgid "# service ctld start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2826
+msgid ""
+"As the man:ctld[8] daemon is started, it reads [.filename]#/etc/ctl.conf#. "
+"If this file is edited after the daemon starts, use this command so that the "
+"changes take effect immediately:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2830
+#, no-wrap
+msgid "# service ctld reload\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2833
+#, no-wrap
+msgid "Authentication"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2837
+msgid ""
+"The previous example is inherently insecure as it uses no authentication, "
+"granting anyone full access to all targets. To require a username and "
+"password to access targets, modify the configuration as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2844
+#, no-wrap
+msgid ""
+"auth-group ag0 {\n"
+"\tchap username1 secretsecret\n"
+"\tchap username2 anothersecret\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2859
+#, no-wrap
+msgid ""
+"target iqn.2012-06.com.example:target0 {\n"
+"\tauth-group ag0\n"
+"\tportal-group pg0\n"
+"\tlun 0 {\n"
+"\t\tpath /data/target0-0\n"
+"\t\tsize 4G\n"
+"\t}\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2865
+msgid ""
+"The `auth-group` section defines username and password pairs. An initiator "
+"trying to connect to `iqn.2012-06.com.example:target0` must first specify a "
+"defined username and secret. However, target discovery is still permitted "
+"without authentication. To require target discovery authentication, set "
+"`discovery-auth-group` to a defined `auth-group` name instead of `no-"
+"authentication`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2868
+msgid ""
+"It is common to define a single exported target for every initiator. As a "
+"shorthand for the syntax above, the username and password can be specified "
+"directly in the target entry:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2874
+#, no-wrap
+msgid ""
+"target iqn.2012-06.com.example:target0 {\n"
+"\tportal-group pg0\n"
+"\tchap username1 secretsecret\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2884
+#, no-wrap
+msgid "Configuring an iSCSI Initiator"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2890
+msgid ""
+"The iSCSI initiator described in this section is supported starting with "
+"FreeBSD 10.0-RELEASE. To use the iSCSI initiator available in older "
+"versions, refer to man:iscontrol[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2895
+msgid ""
+"The iSCSI initiator requires that the man:iscsid[8] daemon is running. This "
+"daemon does not use a configuration file. To start it automatically at "
+"boot, add this line to [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2899
+#, no-wrap
+msgid "iscsid_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2902
+msgid "To start man:iscsid[8] now, run this command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2906
+#, no-wrap
+msgid "# service iscsid start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2910
+msgid ""
+"Connecting to a target can be done with or without an [.filename]#/etc/iscsi."
+"conf# configuration file. This section demonstrates both types of "
+"connections."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2911
+#, no-wrap
+msgid "Connecting to a Target Without a Configuration File"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2914
+msgid ""
+"To connect an initiator to a single target, specify the IP address of the "
+"portal and the name of the target:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2918
+#, no-wrap
+msgid "# iscsictl -A -p 10.10.10.10 -t iqn.2012-06.com.example:target0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2922
+msgid ""
+"To verify if the connection succeeded, run `iscsictl` without any "
+"arguments. The output should look similar to this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2927
+#, no-wrap
+msgid ""
+"Target name Target portal State\n"
+"iqn.2012-06.com.example:target0 10.10.10.10 Connected: da0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2931
+msgid ""
+"In this example, the iSCSI session was successfully established, with [."
+"filename]#/dev/da0# representing the attached LUN. If the `iqn.2012-06.com."
+"example:target0` target exports more than one LUN, multiple device nodes "
+"will be shown in that section of the output:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2935
+#, no-wrap
+msgid "Connected: da0 da1 da2.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2939
+msgid ""
+"Any errors will be reported in the output, as well as the system logs. For "
+"example, this message usually means that the man:iscsid[8] daemon is not "
+"running:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2944
+#, no-wrap
+msgid ""
+"Target name Target portal State\n"
+"iqn.2012-06.com.example:target0 10.10.10.10 Waiting for iscsid(8)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2947
+msgid ""
+"The following message suggests a networking problem, such as a wrong IP "
+"address or port:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2952
+#, no-wrap
+msgid ""
+"Target name Target portal State\n"
+"iqn.2012-06.com.example:target0 10.10.10.11 Connection refused\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2955
+msgid "This message means that the specified target name is wrong:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2960
+#, no-wrap
+msgid ""
+"Target name Target portal State\n"
+"iqn.2012-06.com.example:target0 10.10.10.10 Not found\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2963
+msgid "This message means that the target requires authentication:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2968
+#, no-wrap
+msgid ""
+"Target name Target portal State\n"
+"iqn.2012-06.com.example:target0 10.10.10.10 Authentication failed\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2971
+msgid "To specify a CHAP username and secret, use this syntax:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2975
+#, no-wrap
+msgid "# iscsictl -A -p 10.10.10.10 -t iqn.2012-06.com.example:target0 -u user -s secretsecret\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2978
+#, no-wrap
+msgid "Connecting to a Target with a Configuration File"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2981
+msgid ""
+"To connect using a configuration file, create [.filename]#/etc/iscsi.conf# "
+"with contents like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2991
+#, no-wrap
+msgid ""
+"t0 {\n"
+"\tTargetAddress = 10.10.10.10\n"
+"\tTargetName = iqn.2012-06.com.example:target0\n"
+"\tAuthMethod = CHAP\n"
+"\tchapIName = user\n"
+"\tchapSecret = secretsecret\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:2998
+msgid ""
+"The `t0` specifies a nickname for the configuration file section. It will "
+"be used by the initiator to specify which configuration to use. The other "
+"lines specify the parameters to use during connection. The `TargetAddress` "
+"and `TargetName` are mandatory, whereas the other options are optional. In "
+"this example, the CHAP username and secret are shown."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:3000
+msgid "To connect to the defined target, specify the nickname:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:3004
+#, no-wrap
+msgid "# iscsictl -An t0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:3007
+msgid ""
+"Alternately, to connect to all targets defined in the configuration file, "
+"use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:3011
+#, no-wrap
+msgid "# iscsictl -Aa\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:3014
+msgid ""
+"To make the initiator automatically connect to all targets in [.filename]#/"
+"etc/iscsi.conf#, add the following to [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network-servers/_index.adoc:3019
+#, no-wrap
+msgid ""
+"iscsictl_enable=\"YES\"\n"
+"iscsictl_flags=\"-Aa\"\n"
+msgstr ""
diff --git a/documentation/content/en/books/handbook/network/_index.adoc b/documentation/content/en/books/handbook/network/_index.adoc
new file mode 100644
index 0000000000..6849778107
--- /dev/null
+++ b/documentation/content/en/books/handbook/network/_index.adoc
@@ -0,0 +1,950 @@
+---
+title: Chapter 7. Network
+part: Part I. Getting Started
+prev: books/handbook/wayland
+next: books/handbook/partii
+description: This chapter delves into the topic of network configuration and performance, showcasing the robust networking capabilities of the FreeBSD operating system.
+tags: ["network", "ipv4", "ipv6", "wireless", "wpa_supplicant", "static ip", "dynamic ip"]
+showBookMenu: true
+weight: 9
+path: "/books/handbook/network/"
+---
+
+[[network]]
+= Network
+:doctype: book
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:sectnumoffset: 7
+:partnums:
+:source-highlighter: rouge
+:experimental:
+:images-path: books/handbook/network/
+
+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::[]
+
+[[network-synopsis]]
+== Synopsis
+
+This chapter delves into the topic of network configuration and performance, showcasing the robust networking capabilities of the FreeBSD operating system.
+Whether working with wired or wireless networks, this chapter provides a comprehensive guide to configuring and optimizing network connectivity in FreeBSD.
+
+Before diving into the details, it is beneficial for readers to have a basic understanding of networking concepts such as protocols, network interfaces, and addressing.
+
+This chapter covers:
+
+* The ability to configure wired networks in FreeBSD, including network interface setup, addressing, and customization options.
+* The skills to configure wireless networks in FreeBSD, encompassing wireless network interface setup, security protocols, and troubleshooting techniques.
+* FreeBSD's networking capabilities and its reputation for excellent network performance.
+* An understanding of various network services and protocols supported by FreeBSD, with configuration instructions for DNS, DHCP and more.
+
+More information about how to make advanced network configurations in crossref:advanced-networking[advanced-networking,Advanced Networking].
+
+[[config-network-setup]]
+== Setting up the Network
+
+Setting up a wired or wireless connection is a common task for a FreeBSD user.
+This section will show how to identify the wired and wireless network adapters and how to configure them.
+
+Before starting with the configuration it is necessary to know the following network data:
+
+* If the network has DHCP
+* If the network does not have DHCP, the static IP to be used
+* The netmask
+* The IP address of the default gateway
+
+[TIP]
+====
+The network connection may have been configured at installation time by man:bsdinstall[8].
+====
+
+[[config-identify-network-adapter]]
+=== Identify Network Adapters
+
+FreeBSD supports a wide variety of network adapters for both wired and wireless networks.
+Check the Hardware Compatibility List for the used link:https://www.freebsd.org/releases/[FreeBSD release] to see if the network adapter is supported.
+
+To get the network adapters used by our system execute the following command:
+
+[source,shell]
+....
+% pciconf -lv | grep -A1 -B3 network
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
+em0@pci0:0:25:0: class=0x020000 rev=0x03 hdr=0x00 vendor=0x8086 device=0x10f5 subvendor=0x17aa subdevice=0x20ee
+ vendor = 'Intel Corporation' <1>
+ device = '82567LM Gigabit Network Connection' <2>
+ class = network
+ subclass = ethernet
+--
+iwn0@pci0:3:0:0: class=0x028000 rev=0x00 hdr=0x00 vendor=0x8086 device=0x4237 subvendor=0x8086 subdevice=0x1211
+ vendor = 'Intel Corporation' <1>
+ device = 'PRO/Wireless 5100 AGN [Shiloh] Network Connection' <2>
+ class = networ
+....
+
+The text before the '@' symbol is the name of the driver controlling the device.
+In this case these are man:em[4] and man:iwn[4].
+
+<1> Shows the name of the vendor
+<2> Shows the name of the device
+
+[NOTE]
+====
+It is only necessary to load the network interface card module if FreeBSD has not detected it correctly.
+
+For example, to load the man:alc[4] module, execute the following command:
+
+[source,shell]
+....
+# kldload if_alc
+....
+
+Alternatively, to load the driver as a module at boot time, place the following line in [.filename]#/boot/loader.conf#:
+
+[.programlisting]
+....
+if_alc_load="YES"
+....
+====
+
+[[config-network-connection]]
+== Wired Networks
+
+Once the right driver is loaded the network adapter needs to be configured.
+FreeBSD uses the driver name followed by a unit number to name the network interface adapter.
+The unit number represents the order in which the adapter is detected at boot time, or is later discovered.
+
+For example, `em0` is the first network interface card (NIC) on the system using the man:em[4] driver.
+
+To display the network interface configuration, enter the following command:
+
+[source,shell]
+....
+% ifconfig
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
+em0: flags=8863<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
+ options=481249b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,WOL_MAGIC,VLAN_HWFILTER,NOMAP>
+ ether 00:1f:16:0f:27:5a
+ inet6 fe80::21f:16ff:fe0f:275a%em0 prefixlen 64 scopeid 0x1
+ inet 192.168.1.19 netmask 0xffffff00 broadcast 192.168.1.255
+ media: Ethernet autoselect (1000baseT <full-duplex>)
+ status: active
+ nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
+lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
+ options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
+ inet6 ::1 prefixlen 128
+ inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
+ inet 127.0.0.1 netmask 0xff000000
+ groups: lo
+ nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
+....
+
+In this example, the following devices were displayed:
+
+* `em0`: The Ethernet interface.
+* `lo0`: The loop interface is a software loopback mechanism which may be used for performance analysis, software testing, and/or local communication. More information in man:lo[4].
+
+The example shows that `em0` is up and running.
+
+The key indicators are:
+
+. `UP` means that the interface is configured and ready.
+. The interface has an IPv4 Internet (`inet`) address, `192.168.1.19`.
+. The interface has an IPv6 Internet (`inet6`) address, `fe80::21f:16ff:fe0f:275a%em0`.
+. It has a valid subnet mask (`netmask`), where `0xffffff00` is the same as `255.255.255.0`.
+. It has a valid broadcast address, `192.168.1.255`.
+. The MAC address of the interface (`ether`) is `00:1f:16:0f:27:5a`.
+. The physical media selection is on autoselection mode (`media: Ethernet autoselect (1000baseT <full-duplex>)`).
+. The status of the link (`status`) is `active`, indicating that the carrier signal is detected. For `em0`, the `status: no carrier` status is normal when an Ethernet cable is not plugged into the interface.
+
+If the man:ifconfig[8] output had shown something similar to the next output it would indicate the interface has not been configured:
+
+[.programlisting]
+....
+em0: flags=8822<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
+ options=481249b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,WOL_MAGIC,VLAN_HWFILTER,NOMAP>
+ ether 00:1f:16:0f:27:5a
+ media: Ethernet autoselect
+ status: no carrier
+ nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
+....
+
+[[config-static-ip-v4]]
+=== Configuring Static IPv4 Address
+
+This section provides a guide to configuring a static IPv4 address on a FreeBSD system.
+
+The network interface card configuration can be performed from the command line with man:ifconfig[8] but will not persist after a reboot unless the configuration is also added to [.filename]#/etc/rc.conf#.
+
+[NOTE]
+====
+If the network was configured during installation by man:bsdinstall[8], some entries for the network interface card (NICs) may be already present.
+Double check [.filename]#/etc/rc.conf# before executing man:sysrc[8].
+====
+
+The IP address can be set executing the following command:
+
+[source,shell]
+....
+# ifconfig em0 inet 192.168.1.150/24
+....
+
+To make the change persist across reboots execute the following command:
+
+[source,shell]
+....
+# sysrc ifconfig_em0="inet 192.168.1.150 netmask 255.255.255.0"
+....
+
+Add the default router executing the following command:
+
+[source,shell]
+....
+# sysrc defaultrouter="192.168.1.1"
+....
+
+Add the DNS records to [.filename]#/etc/resolv.conf#:
+
+[.programlisting]
+....
+nameserver 8.8.8.8
+nameserver 8.8.4.4
+....
+
+Then restart `netif` and `routing` executing the following command:
+
+[source,shell]
+....
+# service netif restart && service routing restart
+....
+
+The connection can be tested using man:ping[8]:
+
+[source,shell]
+....
+% ping -c2 www.FreeBSD.org
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
+PING web.geo.FreeBSD.org (147.28.184.45): 56 data bytes
+64 bytes from 147.28.184.45: icmp_seq=0 ttl=51 time=55.173 ms
+64 bytes from 147.28.184.45: icmp_seq=1 ttl=51 time=53.093 ms
+
+--- web.geo.FreeBSD.org ping statistics ---
+2 packets transmitted, 2 packets received, 0.0% packet loss
+round-trip min/avg/max/stddev = 53.093/54.133/55.173/1.040 ms
+....
+
+[[config-dynamic-ip-v4]]
+=== Configuring Dynamic IPv4 Address
+
+If the network has a DHCP server, it is very easy to configure the network interface to use DHCP.
+FreeBSD uses man:dhclient[8] as the DHCP client.
+man:dhclient[8] will automatically provide the IP, the netmask and the default router.
+
+To make the interface work with DHCP execute the following command:
+
+[source,shell]
+....
+# sysrc ifconfig_em0="DHCP"
+....
+
+man:dhclient[8] can be used manually by running the following command:
+
+[source,shell]
+....
+# dhclient em0
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
+DHCPREQUEST on em0 to 255.255.255.255 port 67
+DHCPACK from 192.168.1.1
+unknown dhcp option value 0x7d
+bound to 192.168.1.19 -- renewal in 43200 seconds.
+....
+
+In this way it can be verified that the address assignment using DHCP works correctly.
+
+[TIP]
+====
+man:dhclient[8] client can be started in background.
+This can cause trouble with applications depending on a working network, but it will provide a faster startup in many cases.
+
+To execute man:dhclient[8] in background execute the following command:
+
+[source,shell]
+....
+# sysrc background_dhclient="YES"
+....
+====
+
+Then restart `netif` executing the following command:
+
+[source,shell]
+....
+# service netif restart
+....
+
+The connection can be tested using man:ping[8]:
+
+[source,shell]
+....
+% ping -c2 www.FreeBSD.org
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
+PING web.geo.FreeBSD.org (147.28.184.45): 56 data bytes
+64 bytes from 147.28.184.45: icmp_seq=0 ttl=51 time=55.173 ms
+64 bytes from 147.28.184.45: icmp_seq=1 ttl=51 time=53.093 ms
+
+--- web.geo.FreeBSD.org ping statistics ---
+2 packets transmitted, 2 packets received, 0.0% packet loss
+round-trip min/avg/max/stddev = 53.093/54.133/55.173/1.040 ms
+....
+
+[[network-ipv6]]
+=== IPv6
+
+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:
+
+* 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.
+* 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.
+* Address autoconfiguration (http://www.ietf.org/rfc/rfc2462.txt[RFC2462]).
+* Mandatory multicast addresses.
+* Built-in IPsec (IP security).
+* Simplified header structure.
+* Support for mobile IP.
+* IPv6-to-IPv4 transition mechanisms.
+
+FreeBSD includes the http://www.kame.net/[KAME project] IPv6 reference implementation and comes with everything needed to use IPv6.
+
+This section focuses on getting IPv6 configured and running.
+
+There are three different types of IPv6 addresses:
+
+Unicast::
+A packet sent to a unicast address arrives at the interface belonging to the address.
+
+Anycast::
+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.
+
+Multicast::
+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.
+
+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`.
+
+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`.
+
+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`.
+
+To view a FreeBSD system's IPv6 address execute the following command:
+
+[source,shell]
+....
+# ifconfig
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
+em0: flags=8863<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
+ options=481249b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,WOL_MAGIC,VLAN_HWFILTER,NOMAP>
+ ether 00:1f:16:0f:27:5a
+ inet 192.168.1.150 netmask 0xffffff00 broadcast 192.168.1.255
+ inet6 fe80::21f:16ff:fe0f:275a%em0 prefixlen 64 scopeid 0x1
+ media: Ethernet autoselect (1000baseT <full-duplex>)
+ status: active
+ nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
+....
+
+In this example, the `em0` interface is using `fe80::21f:16ff:fe0f:275a%em0`, an auto-configured link-local address which was automatically generated from the MAC address.
+
+Some IPv6 addresses are reserved.
+A list of reserved addresses can be checked in the following table:
+
+[[reservedip6]]
+.Example IPv6 Reserved Addresses
+[cols="1,1,1,1", frame="none", options="header"]
+|===
+| IPv6 address
+| Prefixlength (Bits)
+| Description
+| Notes
+
+|`::`
+|128 bits
+|unspecified
+|Equivalent to `0.0.0.0` in IPv4.
+
+|`::1`
+|128 bits
+|loopback address
+|Equivalent to `127.0.0.1` in IPv4.
+
+|`::00:xx:xx:xx:xx`
+|96 bits
+|embedded IPv4
+|The lower 32 bits are the compatible IPv4 address.
+
+|`::ff:xx:xx:xx:xx`
+|96 bits
+|IPv4 mapped IPv6 address
+|The lower 32 bits are the IPv4 address for hosts which do not support IPv6.
+
+|`fe80::/10`
+|10 bits
+|link-local
+|Equivalent to 169.254.0.0/16 in IPv4.
+
+|`fc00::/7`
+|7 bits
+|unique-local
+|Unique local addresses are intended for local communication and are only routable within a set of cooperating sites.
+
+|`ff00::`
+|8 bits
+|multicast
+|
+
+|``2000::-3fff::``
+|3 bits
+|global unicast
+|All global unicast addresses are assigned from this pool. The first 3 bits are `001`.
+|===
+
+For further information on the structure of IPv6 addresses, refer to http://www.ietf.org/rfc/rfc3513.txt[RFC3513].
+
+[[config-static-ip-v6]]
+=== Configuring Static IPv6 Address
+
+To configure a FreeBSD system as an IPv6 client with a static IPv6 address it is necessary to set the IPv6 address.
+
+Execute the following commands to meet the requirements:
+
+[source,shell]
+....
+# sysrc ifconfig_em0_ipv6="inet6 2001:db8:4672:6565:2026:5043:2d42:5344 prefixlen 64"
+....
+
+To assign a default router, specify its address executing the following command:
+
+[source,shell]
+....
+# sysrc ipv6_defaultrouter="2001:db8:4672:6565::1"
+....
+
+[[config-dynamic-ip-v6]]
+=== Configuring Dynamic IPv6 Address
+
+If the network has a DHCP server, it is very easy to configure the network interface to use DHCP.
+man:dhclient[8] will provide automatically the IP, the netmask and the default router.
+
+To make the interface work with DHCP execute the following command:
+
+[source,shell]
+....
+# sysrc ifconfig_em0_ipv6="inet6 accept_rtadv"
+# sysrc rtsold_enable="YES"
+....
+
+=== Router Advertisement and Host Auto Configuration
+
+This section demonstrates how to setup man:rtadvd[8] on an IPv6 router to advertise the IPv6 network prefix and default route.
+
+To enable man:rtadvd[8], execute the following command:
+
+[source,shell]
+....
+# sysrc rtadvd_enable="YES"
+....
+
+It is important to specify the interface on which to do IPv6 router advertisement.
+For example, to tell man:rtadvd[8] to use `em0`:
+
+[source,shell]
+....
+# sysrc rtadvd_interfaces="em0"
+....
+
+Next, create the configuration file, [.filename]#/etc/rtadvd.conf# as seen in this example:
+
+[.programlisting]
+....
+em0:\
+ :addrs#1:addr="2001:db8:1f11:246::":prefixlen#64:tc=ether:
+....
+
+Replace `em0` with the interface to be used and `2001:db8:1f11:246::` with the prefix of the allocation.
+
+For a dedicated `/64` subnet, nothing else needs to be changed.
+Otherwise, change the `prefixlen#` to the correct value.
+
+=== IPv6 and IPv4 Address mapping
+
+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.
+
+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 execute the following command:
+
+[source,shell]
+....
+# sysrc ipv6_ipv4mapping="YES"
+....
+
+[[network-wireless]]
+== Wireless Networks
+
+Most wireless networks are based on the link:https://en.wikipedia.org/wiki/IEEE_802.11[IEEE(R) 802.11 standards].
+
+FreeBSD supports networks that operate using link:https://en.wikipedia.org/wiki/IEEE_802.11a-1999[802.11a], link:https://en.wikipedia.org/wiki/IEEE_802.11b-1999[802.11b], link:https://en.wikipedia.org/wiki/IEEE_802.11g-2003[802.11g] and link:https://en.wikipedia.org/wiki/IEEE_802.11n-2009[802.11n].
+
+[NOTE]
+====
+link:https://en.wikipedia.org/wiki/IEEE_802.11ac-2013[802.11ac] support on FreeBSD is currently under development.
+====
+
+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.
+
+There are three basic steps to configure a wireless network:
+
+1. Scan and select an access point
+2. Authenticate the station
+3. Configure an IP address or use DHCP.
+
+The following sections discuss each step.
+
+[[network-wireless-quick-start]]
+=== Quick Start to Connect to a Wireless Network
+
+Connecting FreeBSD to an existing wireless network is a very common situation.
+
+This procedure shows the steps required:
+
+* The first step will be to obtain the SSID (Service Set Identifier) and PSK (Pre-Shared Key) for the wireless network from the network administrator.
+
+* The second step will be to add an entry for this network to [.filename]#/etc/wpa_supplicant.conf#. If the file does not exist, create it:
+
+[.programlisting]
+....
+network={
+ ssid="myssid" <.>
+ psk="mypsk" <.>
+}
+....
+
+<.> Is the SSID of the wireless network. Replace it with the name of the wireless network.
+<.> Is the PSK of the wireless network. Replace it with the password of the wireless network.
+
+* The third step will be to add the network entry to configure the network on startup:
+
+[source,shell]
+....
+# sysrc wlans_iwn0="wlan0"
+# sysrc ifconfig_wlan0="WPA DHCP"
+....
+
+* And the last step will be the restart `netif` service executing the following command:
+
+[source,shell]
+....
+# service netif restart
+....
+
+[[basic-wireless-configuration]]
+=== Basic Wireless Configuration
+
+The first step will be to configure the wireless network card to an interface.
+To find out what wireless network cards are in the system check the section <<config-identify-network-adapter>>.
+
+[source,shell]
+....
+# ifconfig wlan0 create wlandev iwm0
+....
+
+To make the change persist across reboots execute the following command:
+
+[source,shell]
+....
+# sysrc wlans_iwm0="wlan0"
+....
+
+[NOTE]
+====
+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.
+
+The available region definitions can be found in [.filename]#/etc/regdomain.xml#.
+To set the data at runtime, use `ifconfig`:
+
+[source,shell]
+....
+# ifconfig wlan0 regdomain etsi2 country AT
+....
+
+To persist the settings, add it to [.filename]#/etc/rc.conf#:
+
+[source,shell]
+....
+# sysrc create_args_wlan0="country AT regdomain etsi2"
+....
+====
+
+[[scan-wireless-networks]]
+=== Scan Wireless Networks
+
+Available wireless networks can be scanned using man:ifconfig[8].
+
+To list the wireless networks execute the following command:
+
+[source,shell]
+....
+# ifconfig wlan0 up list scan
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
+SSID/MESH ID BSSID CHAN RATE S:N INT CAPS
+FreeBSD e8:d1:1b:1b:58:ae 1 54M -47:-96 100 EP RSN BSSLOAD HTCAP WPS WME
+NetBSD d4:b9:2f:35:fe:08 1 54M -80:-96 100 EP RSN BSSLOAD HTCAP WPS WME
+OpenBSD fc:40:09:c6:31:bd 36 54M -94:-96 100 EPS VHTPWRENV APCHANREP RSN WPS BSSLOAD HTCAP VHTCAP VHTOPMODE WME
+GNU-Linux dc:f8:b9:a0:a8:e0 44 54M -95:-96 100 EP WPA RSN WPS HTCAP VHTCAP VHTOPMODE WME VHTPWRENV
+Windows 44:48:b9:b3:c3:ff 44 54M -84:-96 100 EP BSSLOAD VHTPWRENV HTCAP WME RSN VHTCAP VHTOPMODE WPS
+MacOS 46:48:b9:b3:c3:ff 44 54M -84:-96 100 EP BSSLOAD VHTPWRENV HTCAP WME RSN VHTCAP VHTOPMODE WPS
+....
+
+. SSID/MESH ID identifies the name of the network.
+. BSSID identifies the MAC address of the access point.
+. 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).
+
+[[wireless-authentication]]
+=== Connection and Authentication to a Wireless Network
+
+Once a wireless network has been selected from the list of scanned networks, it is necessary to perform the connection and the authentication.
+In the vast majority of wireless networks, authentication is done with a password configured in the router.
+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.
+
+[[authenticate-wpa2-wpa-personal]]
+==== Authenticate with WPA2/WPA/Personal
+
+The authentication process in a wireless network is managed by man:wpa_supplicant[8].
+
+The man:wpa_supplicant[8] configuration will be made in the [.filename]#/etc/wpa_supplicant.conf# file.
+For more information, see man:wpa_supplicant.conf[5].
+
+Once the scanning of the wireless networks has been carried out, a network has been chosen and have the password (PSK), that information will be added to the file [.filename]#/etc/wpa_supplicant.conf# as in the following example:
+
+[.programlisting]
+....
+network={
+ scan_ssid=1 <.>
+ ssid="FreeBSD" <.>
+ psk="12345678" <.>
+}
+....
+
+<.> SSID scan technique. Only need to use this option if the network is hidden.
+<.> Network name.
+<.> Passwork of the wireless network.
+
+The next step will be to configure the wireless connection in the file [.filename]#/etc/rc.conf#.
+
+To use a static address it will be necessary to execute the following command:
+
+[source,shell]
+....
+# sysrc ifconfig_wlan0="inet 192.168.1.20 netmask 255.255.255.0"
+....
+
+To use a dynamic address it will be necessary to execute the following command:
+
+[source,shell]
+....
+# sysrc ifconfig_wlan0="WPA DHCP"
+....
+
+Then restart the network executing the following command:
+
+[source,shell]
+....
+# service netif restart
+....
+
+[NOTE]
+====
+More information on how to perform more advanced methods of authentication can be obtained at crossref:advanced-networking[network-advanced-wireless,"Wireless Advanced Authentication"].
+====
+
+[[authenticate-open-networks]]
+==== Authenticate with Open Networks
+
+[TIP]
+====
+It is important that the user is *very* careful when connecting to open networks without any kind of authentication.
+====
+
+Once the wireless network scan is done and the SSID of the wireless network is selected, execute the following command:
+
+[source,shell]
+....
+# ifconfig wlan0 ssid SSID
+....
+
+And then execute man:dhclient[8] to get the address configured:
+
+[source,shell]
+....
+# dhclient wlan0
+....
+
+=== Using Both Wired and Wireless Connections
+
+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.
+
+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.
+
+Link aggregation and failover is covered in crossref:advanced-networking[network-aggregation,"Link Aggregation and Failover"] and an example for using both wired and wireless connections is provided at crossref:advanced-networking[networking-lagg-wired-and-wireless,"Failover Mode Between Ethernet and Wireless Interfaces"].
+
+[[hostname]]
+== Hostname
+
+The hostname represents the fully qualified domain name (FQDN) of the host on the network.
+
+[TIP]
+====
+If no hostname has been set for the host FreeBSD will assign the value `Amnesiac`.
+====
+
+[[get-hostname]]
+=== Check The Current Hostname
+
+man:hostname[1] can be used to check the current hostname:
+
+[source,shell]
+....
+$ hostname
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
+freebsdhostname.example.com
+....
+
+[[change-hostname]]
+=== Change Hostname
+
+To change the hostname of the host and persist it across reboots execute the following command:
+
+[source,shell]
+....
+# sysrc hostname="freebsdhostname.example.com"
+....
+
+[[dns]]
+== DNS
+
+The DNS could be understood as a link:https://en.wikipedia.org/wiki/Telephone_directory[telephone directory] in which an IP is identified to a hostname and vice versa.
+
+There are three files that handle how a FreeBSD system interact with the DNS.
+These three files are man:hosts[5], man:resolv.conf[5] and man:nsswitch.conf[5]
+
+Unless otherwise stated in the [.filename]#/etc/nsswitch.conf# file, FreeBSD will look at the addresses in the [.filename]#/etc/hosts# file and then the DNS information in the [.filename]#/etc/resolv.conf# file.
+
+[NOTE]
+====
+The man:nsswitch.conf[5] file specifies how the nsdispatch (name-service switch dispatcher) should operate.
+
+By default, the hosts section of the [.filename]#/etc/nsswitch.conf# file will be as follows:
+
+[.programlisting]
+....
+hosts: files dns
+....
+
+For example, in case of using the man:nscd[8] service.
+The order of preference could be changed by leaving the line as follows:
+
+[.programlisting]
+....
+hosts: files cache dns
+....
+====
+
+[[local-addresses]]
+=== Local addresses
+
+The [.filename]#/etc/hosts# file is a simple text database who provide host name to IP address mappings.
+Entries for local computers connected via a LAN can be added to this file for simplistic naming purposes instead of setting up a DNS server.
+Additionally, [.filename]#/etc/hosts# can be used to provide a local record of Internet names, reducing the need to query external DNS servers for commonly accessed names.
+
+For example, in the case of having a local instance of package:www/gitlab-ce[] in a local environment, it could be added as follows to the file [.filename]#/etc/hosts#:
+
+[.programlisting]
+....
+192.168.1.150 git.example.com git
+....
+
+[[configuring-nameserver]]
+=== Configuring the Nameserver
+
+How a FreeBSD system accesses the Internet Domain Name System (DNS) is controlled by man:resolv.conf[5].
+
+The most common entries to [.filename]#/etc/resolv.conf# are:
+
+[.informaltable]
+[cols="1,1", frame="none"]
+|===
+
+|`nameserver`
+|The IP address of a name server the resolver should query. The servers are queried in the order listed with a maximum of three.
+
+|`search`
+|Search list for hostname lookup. This is normally determined by the domain of the local hostname.
+
+|`domain`
+|The local domain name.
+|===
+
+A typical [.filename]#/etc/resolv.conf# looks like this:
+
+[.programlisting]
+....
+search example.com
+nameserver 147.11.1.11
+nameserver 147.11.100.30
+....
+
+[NOTE]
+====
+Only one of the `search` and `domain` options should be used.
+====
+
+When using DHCP, man:dhclient[8] usually rewrites [.filename]#/etc/resolv.conf# with information received from the DHCP server.
+
+[TIP]
+====
+If the machine in which the configuration is being made is *not* a DNS server, man:local-unbound[8] can be used to improve DNS lookup performance.
+
+To enable it at boot time execute the following command:
+
+[source,shell]
+....
+# sysrc local_unbound_enable="YES"
+....
+
+To start the man:local-unbound[8] service execute the following command:
+
+[source,shell]
+....
+# service local_unbound start
+....
+====
+
+[[troubleshooting]]
+== Troubleshooting
+
+When troubleshooting hardware and software configurations, check the simple things first.
+
+* Is the network cable plugged in?
+* Are the network services properly configured?
+* Is the firewall configured correctly?
+* Is the NIC supported by FreeBSD?
+* Is the router working correctly?
+
+[TIP]
+====
+Before sending a bug report, always check the Hardware Notes in the link:https://www.freebsd.org/releases/[FreeBSD release page], update the version of FreeBSD to the latest STABLE version, check the mailing list archives, and search the Internet.
+====
+
+[[wired-troubleshooting]]
+=== Troubleshooting in Wired Networks
+
+If the card works, yet performance is poor, read through man:tuning[7].
+Also, check the network configuration as incorrect network settings can cause slow connections.
+
+`No route to host` messages occur if the system is unable to route a packet to the destination host.
+This can happen if no default route is specified or if a cable is unplugged.
+Check the output of `netstat -rn` and make sure there is a valid route to the host.
+If there is not, read crossref:advanced-networking[network-routing,"Gateways and Routes"].
+
+`ping: sendto: Permission denied` error messages are often caused by a misconfigured firewall.
+If a firewall is enabled on FreeBSD but no rules have been defined, the default policy is to deny all traffic, even man:ping[8].
+Refer to crossref:firewalls[firewalls,Firewalls] for more information.
+
+[[wireless-troubleshooting]]
+=== Troubleshooting in Wireless Networks
+
+This section describes a number of steps to help troubleshoot common wireless networking problems.
+
+* 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.
+
+* 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 WPA2 or WPA, configure the access point for open authentication and no security to see if traffic will pass.
+
+* Once the system can associate with the access point, diagnose the network configuration using tools like man:ping[8].
+
+* There are many lower-level debugging tools. Debugging messages can be enabled in the 802.11 protocol support layer using man:wlandebug[8].
diff --git a/documentation/content/en/books/handbook/network/_index.po b/documentation/content/en/books/handbook/network/_index.po
new file mode 100644
index 0000000000..8b96468833
--- /dev/null
+++ b/documentation/content/en/books/handbook/network/_index.po
@@ -0,0 +1,2025 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/network/_index.adoc:1
+#, no-wrap
+msgid "This chapter delves into the topic of network configuration and performance, showcasing the robust networking capabilities of the FreeBSD operating system."
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/network/_index.adoc:1
+#, no-wrap
+msgid "Part I. Getting Started"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/network/_index.adoc:1
+#, no-wrap
+msgid "Chapter 7. Network"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/network/_index.adoc:14
+#, no-wrap
+msgid "Network"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/network/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:56
+msgid ""
+"This chapter delves into the topic of network configuration and performance, "
+"showcasing the robust networking capabilities of the FreeBSD operating "
+"system. Whether working with wired or wireless networks, this chapter "
+"provides a comprehensive guide to configuring and optimizing network "
+"connectivity in FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:58
+msgid ""
+"Before diving into the details, it is beneficial for readers to have a basic "
+"understanding of networking concepts such as protocols, network interfaces, "
+"and addressing."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:60
+msgid "This chapter covers:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:62
+msgid ""
+"The ability to configure wired networks in FreeBSD, including network "
+"interface setup, addressing, and customization options."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:63
+msgid ""
+"The skills to configure wireless networks in FreeBSD, encompassing wireless "
+"network interface setup, security protocols, and troubleshooting techniques."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:64
+msgid ""
+"FreeBSD's networking capabilities and its reputation for excellent network "
+"performance."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:65
+msgid ""
+"An understanding of various network services and protocols supported by "
+"FreeBSD, with configuration instructions for DNS, DHCP and more."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:67
+msgid ""
+"More information about how to make advanced network configurations in "
+"crossref:advanced-networking[advanced-networking,Advanced Networking]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/network/_index.adoc:69
+#, no-wrap
+msgid "Setting up the Network"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:73
+msgid ""
+"Setting up a wired or wireless connection is a common task for a FreeBSD "
+"user. This section will show how to identify the wired and wireless network "
+"adapters and how to configure them."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:75
+msgid ""
+"Before starting with the configuration it is necessary to know the following "
+"network data:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:77
+msgid "If the network has DHCP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:78
+msgid "If the network does not have DHCP, the static IP to be used"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:79
+msgid "The netmask"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:80
+msgid "The IP address of the default gateway"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:84
+msgid ""
+"The network connection may have been configured at installation time by man:"
+"bsdinstall[8]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network/_index.adoc:87
+#, no-wrap
+msgid "Identify Network Adapters"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:91
+msgid ""
+"FreeBSD supports a wide variety of network adapters for both wired and "
+"wireless networks. Check the Hardware Compatibility List for the used link:"
+"https://www.freebsd.org/releases/[FreeBSD release] to see if the network "
+"adapter is supported."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:93
+msgid ""
+"To get the network adapters used by our system execute the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:97
+#, no-wrap
+msgid "% pciconf -lv | grep -A1 -B3 network\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:100
+#: documentation/content/en/books/handbook/network/_index.adoc:157
+#: documentation/content/en/books/handbook/network/_index.adoc:264
+#: documentation/content/en/books/handbook/network/_index.adoc:298
+#: documentation/content/en/books/handbook/network/_index.adoc:337
+#: documentation/content/en/books/handbook/network/_index.adoc:403
+#: documentation/content/en/books/handbook/network/_index.adoc:665
+#: documentation/content/en/books/handbook/network/_index.adoc:792
+msgid "The output should be similar to the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:108
+#, no-wrap
+msgid ""
+"em0@pci0:0:25:0: class=0x020000 rev=0x03 hdr=0x00 vendor=0x8086 device=0x10f5 subvendor=0x17aa subdevice=0x20ee\n"
+" vendor = 'Intel Corporation' <1>\n"
+" device = '82567LM Gigabit Network Connection' <2>\n"
+" class = network\n"
+" subclass = ethernet\n"
+"--\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:113
+#, no-wrap
+msgid ""
+"iwn0@pci0:3:0:0: class=0x028000 rev=0x00 hdr=0x00 vendor=0x8086 device=0x4237 subvendor=0x8086 subdevice=0x1211\n"
+" vendor = 'Intel Corporation' <1>\n"
+" device = 'PRO/Wireless 5100 AGN [Shiloh] Network Connection' <2>\n"
+" class = networ\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:117
+msgid ""
+"The text before the '@' symbol is the name of the driver controlling the "
+"device. In this case these are man:em[4] and man:iwn[4]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:119
+msgid "Shows the name of the vendor"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:120
+msgid "Shows the name of the device"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:124
+msgid ""
+"It is only necessary to load the network interface card module if FreeBSD "
+"has not detected it correctly."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:126
+msgid ""
+"For example, to load the man:alc[4] module, execute the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:130
+#, no-wrap
+msgid "# kldload if_alc\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:133
+msgid ""
+"Alternatively, to load the driver as a module at boot time, place the "
+"following line in [.filename]#/boot/loader.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:137
+#, no-wrap
+msgid "if_alc_load=\"YES\"\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/network/_index.adoc:141
+#, no-wrap
+msgid "Wired Networks"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:146
+msgid ""
+"Once the right driver is loaded the network adapter needs to be configured. "
+"FreeBSD uses the driver name followed by a unit number to name the network "
+"interface adapter. The unit number represents the order in which the "
+"adapter is detected at boot time, or is later discovered."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:148
+msgid ""
+"For example, `em0` is the first network interface card (NIC) on the system "
+"using the man:em[4] driver."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:150
+msgid ""
+"To display the network interface configuration, enter the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:154
+#, no-wrap
+msgid "% ifconfig\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:175
+#, no-wrap
+msgid ""
+"em0: flags=8863<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500\n"
+" options=481249b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,WOL_MAGIC,VLAN_HWFILTER,NOMAP>\n"
+" ether 00:1f:16:0f:27:5a\n"
+" inet6 fe80::21f:16ff:fe0f:275a%em0 prefixlen 64 scopeid 0x1\n"
+" inet 192.168.1.19 netmask 0xffffff00 broadcast 192.168.1.255\n"
+" media: Ethernet autoselect (1000baseT <full-duplex>)\n"
+" status: active\n"
+" nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>\n"
+"lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384\n"
+" options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>\n"
+" inet6 ::1 prefixlen 128\n"
+" inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2\n"
+" inet 127.0.0.1 netmask 0xff000000\n"
+" groups: lo\n"
+" nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:178
+msgid "In this example, the following devices were displayed:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:180
+msgid "`em0`: The Ethernet interface."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:181
+msgid ""
+"`lo0`: The loop interface is a software loopback mechanism which may be used "
+"for performance analysis, software testing, and/or local communication. More "
+"information in man:lo[4]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:183
+msgid "The example shows that `em0` is up and running."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:185
+msgid "The key indicators are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:187
+msgid "`UP` means that the interface is configured and ready."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:188
+msgid "The interface has an IPv4 Internet (`inet`) address, `192.168.1.19`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:189
+msgid ""
+"The interface has an IPv6 Internet (`inet6`) address, `fe80::21f:16ff:"
+"fe0f:275a%em0`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:190
+msgid ""
+"It has a valid subnet mask (`netmask`), where `0xffffff00` is the same as "
+"`255.255.255.0`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:191
+msgid "It has a valid broadcast address, `192.168.1.255`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:192
+msgid "The MAC address of the interface (`ether`) is `00:1f:16:0f:27:5a`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:193
+msgid ""
+"The physical media selection is on autoselection mode (`media: Ethernet "
+"autoselect (1000baseT <full-duplex>)`)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:194
+msgid ""
+"The status of the link (`status`) is `active`, indicating that the carrier "
+"signal is detected. For `em0`, the `status: no carrier` status is normal "
+"when an Ethernet cable is not plugged into the interface."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:196
+msgid ""
+"If the man:ifconfig[8] output had shown something similar to the next output "
+"it would indicate the interface has not been configured:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:205
+#, no-wrap
+msgid ""
+"em0: flags=8822<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500\n"
+" options=481249b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,WOL_MAGIC,VLAN_HWFILTER,NOMAP>\n"
+" ether 00:1f:16:0f:27:5a\n"
+" media: Ethernet autoselect\n"
+" status: no carrier\n"
+" nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network/_index.adoc:208
+#, no-wrap
+msgid "Configuring Static IPv4 Address"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:211
+msgid ""
+"This section provides a guide to configuring a static IPv4 address on a "
+"FreeBSD system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:213
+msgid ""
+"The network interface card configuration can be performed from the command "
+"line with man:ifconfig[8] but will not persist after a reboot unless the "
+"configuration is also added to [.filename]#/etc/rc.conf#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:218
+msgid ""
+"If the network was configured during installation by man:bsdinstall[8], some "
+"entries for the network interface card (NICs) may be already present. "
+"Double check [.filename]#/etc/rc.conf# before executing man:sysrc[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:221
+msgid "The IP address can be set executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:225
+#, no-wrap
+msgid "# ifconfig em0 inet 192.168.1.150/24\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:228
+#: documentation/content/en/books/handbook/network/_index.adoc:626
+msgid ""
+"To make the change persist across reboots execute the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:232
+#, no-wrap
+msgid "# sysrc ifconfig_em0=\"inet 192.168.1.150 netmask 255.255.255.0\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:235
+msgid "Add the default router executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:239
+#, no-wrap
+msgid "# sysrc defaultrouter=\"192.168.1.1\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:242
+msgid "Add the DNS records to [.filename]#/etc/resolv.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:247
+#, no-wrap
+msgid ""
+"nameserver 8.8.8.8\n"
+"nameserver 8.8.4.4\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:250
+msgid "Then restart `netif` and `routing` executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:254
+#, no-wrap
+msgid "# service netif restart && service routing restart\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:257
+#: documentation/content/en/books/handbook/network/_index.adoc:330
+msgid "The connection can be tested using man:ping[8]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:261
+#: documentation/content/en/books/handbook/network/_index.adoc:334
+#, no-wrap
+msgid "% ping -c2 www.FreeBSD.org\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:270
+#: documentation/content/en/books/handbook/network/_index.adoc:343
+#, no-wrap
+msgid ""
+"PING web.geo.FreeBSD.org (147.28.184.45): 56 data bytes\n"
+"64 bytes from 147.28.184.45: icmp_seq=0 ttl=51 time=55.173 ms\n"
+"64 bytes from 147.28.184.45: icmp_seq=1 ttl=51 time=53.093 ms\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:274
+#: documentation/content/en/books/handbook/network/_index.adoc:347
+#, no-wrap
+msgid ""
+"--- web.geo.FreeBSD.org ping statistics ---\n"
+"2 packets transmitted, 2 packets received, 0.0% packet loss\n"
+"round-trip min/avg/max/stddev = 53.093/54.133/55.173/1.040 ms\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network/_index.adoc:277
+#, no-wrap
+msgid "Configuring Dynamic IPv4 Address"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:282
+msgid ""
+"If the network has a DHCP server, it is very easy to configure the network "
+"interface to use DHCP. FreeBSD uses man:dhclient[8] as the DHCP client. "
+"man:dhclient[8] will automatically provide the IP, the netmask and the "
+"default router."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:284
+#: documentation/content/en/books/handbook/network/_index.adoc:499
+msgid "To make the interface work with DHCP execute the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:288
+#, no-wrap
+msgid "# sysrc ifconfig_em0=\"DHCP\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:291
+msgid "man:dhclient[8] can be used manually by running the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:295
+#, no-wrap
+msgid "# dhclient em0\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:305
+#, no-wrap
+msgid ""
+"DHCPREQUEST on em0 to 255.255.255.255 port 67\n"
+"DHCPACK from 192.168.1.1\n"
+"unknown dhcp option value 0x7d\n"
+"bound to 192.168.1.19 -- renewal in 43200 seconds.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:308
+msgid ""
+"In this way it can be verified that the address assignment using DHCP works "
+"correctly."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:313
+msgid ""
+"man:dhclient[8] client can be started in background. This can cause trouble "
+"with applications depending on a working network, but it will provide a "
+"faster startup in many cases."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:315
+msgid "To execute man:dhclient[8] in background execute the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:319
+#, no-wrap
+msgid "# sysrc background_dhclient=\"YES\"\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:323
+msgid "Then restart `netif` executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:327
+#: documentation/content/en/books/handbook/network/_index.adoc:612
+#: documentation/content/en/books/handbook/network/_index.adoc:732
+#, no-wrap
+msgid "# service netif restart\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network/_index.adoc:350
+#, no-wrap
+msgid "IPv6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:353
+msgid ""
+"IPv6 is the new version of the well-known IP protocol, also known as IPv4."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:355
+msgid ""
+"IPv6 provides several advantages over IPv4 as well as many new features:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:357
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:358
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:359
+msgid ""
+"Address autoconfiguration (http://www.ietf.org/rfc/rfc2462.txt[RFC2462])."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:360
+msgid "Mandatory multicast addresses."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:361
+msgid "Built-in IPsec (IP security)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:362
+msgid "Simplified header structure."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:363
+msgid "Support for mobile IP."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:364
+msgid "IPv6-to-IPv4 transition mechanisms."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:366
+msgid ""
+"FreeBSD includes the http://www.kame.net/[KAME project] IPv6 reference "
+"implementation and comes with everything needed to use IPv6."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:368
+msgid "This section focuses on getting IPv6 configured and running."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:370
+msgid "There are three different types of IPv6 addresses:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/network/_index.adoc:371
+#, no-wrap
+msgid "Unicast"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:373
+msgid ""
+"A packet sent to a unicast address arrives at the interface belonging to the "
+"address."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/network/_index.adoc:374
+#, no-wrap
+msgid "Anycast"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:378
+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 ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/network/_index.adoc:379
+#, no-wrap
+msgid "Multicast"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:383
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:386
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:391
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:394
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:396
+msgid "To view a FreeBSD system's IPv6 address execute the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:400
+#, no-wrap
+msgid "# ifconfig\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:414
+#, no-wrap
+msgid ""
+"em0: flags=8863<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500\n"
+" options=481249b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,WOL_MAGIC,VLAN_HWFILTER,NOMAP>\n"
+" ether 00:1f:16:0f:27:5a\n"
+" inet 192.168.1.150 netmask 0xffffff00 broadcast 192.168.1.255\n"
+" inet6 fe80::21f:16ff:fe0f:275a%em0 prefixlen 64 scopeid 0x1\n"
+" media: Ethernet autoselect (1000baseT <full-duplex>)\n"
+" status: active\n"
+" nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:417
+msgid ""
+"In this example, the `em0` interface is using `fe80::21f:16ff:"
+"fe0f:275a%em0`, an auto-configured link-local address which was "
+"automatically generated from the MAC address."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:420
+msgid ""
+"Some IPv6 addresses are reserved. A list of reserved addresses can be "
+"checked in the following table:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/network/_index.adoc:422
+#, no-wrap
+msgid "Example IPv6 Reserved Addresses"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:426
+#, no-wrap
+msgid "IPv6 address"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:427
+#, no-wrap
+msgid "Prefixlength (Bits)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:428
+#, no-wrap
+msgid "Description"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:430
+#, no-wrap
+msgid "Notes"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:431
+#, no-wrap
+msgid "`::`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:432
+#: documentation/content/en/books/handbook/network/_index.adoc:437
+#, no-wrap
+msgid "128 bits"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:433
+#, no-wrap
+msgid "unspecified"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:435
+#, no-wrap
+msgid "Equivalent to `0.0.0.0` in IPv4."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:436
+#, no-wrap
+msgid "`::1`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:438
+#, no-wrap
+msgid "loopback address"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:440
+#, no-wrap
+msgid "Equivalent to `127.0.0.1` in IPv4."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:441
+#, no-wrap
+msgid "`::00:xx:xx:xx:xx`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:442
+#: documentation/content/en/books/handbook/network/_index.adoc:447
+#, no-wrap
+msgid "96 bits"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:443
+#, no-wrap
+msgid "embedded IPv4"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:445
+#, no-wrap
+msgid "The lower 32 bits are the compatible IPv4 address."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:446
+#, no-wrap
+msgid "`::ff:xx:xx:xx:xx`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:448
+#, no-wrap
+msgid "IPv4 mapped IPv6 address"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:450
+#, no-wrap
+msgid "The lower 32 bits are the IPv4 address for hosts which do not support IPv6."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:451
+#, no-wrap
+msgid "`fe80::/10`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:452
+#, no-wrap
+msgid "10 bits"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:453
+#, no-wrap
+msgid "link-local"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:455
+#, no-wrap
+msgid "Equivalent to 169.254.0.0/16 in IPv4."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:456
+#, no-wrap
+msgid "`fc00::/7`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:457
+#, no-wrap
+msgid "7 bits"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:458
+#, no-wrap
+msgid "unique-local"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:460
+#, no-wrap
+msgid "Unique local addresses are intended for local communication and are only routable within a set of cooperating sites."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:461
+#, no-wrap
+msgid "`ff00::`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:462
+#, no-wrap
+msgid "8 bits"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:463
+#, no-wrap
+msgid "multicast"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:466
+#, no-wrap
+msgid "``2000::-3fff::``"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:467
+#, no-wrap
+msgid "3 bits"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:468
+#, no-wrap
+msgid "global unicast"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:469
+#, no-wrap
+msgid "All global unicast addresses are assigned from this pool. The first 3 bits are `001`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:472
+msgid ""
+"For further information on the structure of IPv6 addresses, refer to http://"
+"www.ietf.org/rfc/rfc3513.txt[RFC3513]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network/_index.adoc:474
+#, no-wrap
+msgid "Configuring Static IPv6 Address"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:477
+msgid ""
+"To configure a FreeBSD system as an IPv6 client with a static IPv6 address "
+"it is necessary to set the IPv6 address."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:479
+msgid "Execute the following commands to meet the requirements:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:483
+#, no-wrap
+msgid "# sysrc ifconfig_em0_ipv6=\"inet6 2001:db8:4672:6565:2026:5043:2d42:5344 prefixlen 64\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:486
+msgid ""
+"To assign a default router, specify its address executing the following "
+"command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:490
+#, no-wrap
+msgid "# sysrc ipv6_defaultrouter=\"2001:db8:4672:6565::1\"\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network/_index.adoc:493
+#, no-wrap
+msgid "Configuring Dynamic IPv6 Address"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:497
+msgid ""
+"If the network has a DHCP server, it is very easy to configure the network "
+"interface to use DHCP. man:dhclient[8] will provide automatically the IP, "
+"the netmask and the default router."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:504
+#, no-wrap
+msgid ""
+"# sysrc ifconfig_em0_ipv6=\"inet6 accept_rtadv\"\n"
+"# sysrc rtsold_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network/_index.adoc:506
+#, no-wrap
+msgid "Router Advertisement and Host Auto Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:509
+msgid ""
+"This section demonstrates how to setup man:rtadvd[8] on an IPv6 router to "
+"advertise the IPv6 network prefix and default route."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:511
+msgid "To enable man:rtadvd[8], execute the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:515
+#, no-wrap
+msgid "# sysrc rtadvd_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:519
+msgid ""
+"It is important to specify the interface on which to do IPv6 router "
+"advertisement. For example, to tell man:rtadvd[8] to use `em0`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:523
+#, no-wrap
+msgid "# sysrc rtadvd_interfaces=\"em0\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:526
+msgid ""
+"Next, create the configuration file, [.filename]#/etc/rtadvd.conf# as seen "
+"in this example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:531
+#, no-wrap
+msgid ""
+"em0:\\\n"
+"\t:addrs#1:addr=\"2001:db8:1f11:246::\":prefixlen#64:tc=ether:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:534
+msgid ""
+"Replace `em0` with the interface to be used and `2001:db8:1f11:246::` with "
+"the prefix of the allocation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:537
+msgid ""
+"For a dedicated `/64` subnet, nothing else needs to be changed. Otherwise, "
+"change the `prefixlen#` to the correct value."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network/_index.adoc:538
+#, no-wrap
+msgid "IPv6 and IPv4 Address mapping"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:543
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:547
+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."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:549
+msgid "To enable this feature execute the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:553
+#, no-wrap
+msgid "# sysrc ipv6_ipv4mapping=\"YES\"\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/network/_index.adoc:556
+#, no-wrap
+msgid "Wireless Networks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:559
+msgid ""
+"Most wireless networks are based on the link:https://en.wikipedia.org/wiki/"
+"IEEE_802.11[IEEE(R) 802.11 standards]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:561
+msgid ""
+"FreeBSD supports networks that operate using link:https://en.wikipedia.org/"
+"wiki/IEEE_802.11a-1999[802.11a], link:https://en.wikipedia.org/wiki/"
+"IEEE_802.11b-1999[802.11b], link:https://en.wikipedia.org/wiki/"
+"IEEE_802.11g-2003[802.11g] and link:https://en.wikipedia.org/wiki/"
+"IEEE_802.11n-2009[802.11n]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:565
+msgid ""
+"link:https://en.wikipedia.org/wiki/IEEE_802.11ac-2013[802.11ac] support on "
+"FreeBSD is currently under development."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:568
+msgid ""
+"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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:570
+msgid "There are three basic steps to configure a wireless network:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:572
+msgid "Scan and select an access point"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:573
+msgid "Authenticate the station"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:574
+msgid "Configure an IP address or use DHCP."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:576
+msgid "The following sections discuss each step."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network/_index.adoc:578
+#, no-wrap
+msgid "Quick Start to Connect to a Wireless Network"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:581
+msgid ""
+"Connecting FreeBSD to an existing wireless network is a very common "
+"situation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:583
+msgid "This procedure shows the steps required:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:585
+msgid ""
+"The first step will be to obtain the SSID (Service Set Identifier) and PSK "
+"(Pre-Shared Key) for the wireless network from the network administrator."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:587
+msgid ""
+"The second step will be to add an entry for this network to [.filename]#/etc/"
+"wpa_supplicant.conf#. If the file does not exist, create it:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:594
+#, no-wrap
+msgid ""
+"network={\n"
+" ssid=\"myssid\" <.>\n"
+" psk=\"mypsk\" <.>\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:597
+msgid ""
+"Is the SSID of the wireless network. Replace it with the name of the "
+"wireless network."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:598
+msgid ""
+"Is the PSK of the wireless network. Replace it with the password of the "
+"wireless network."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:600
+msgid ""
+"The third step will be to add the network entry to configure the network on "
+"startup:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:605
+#, no-wrap
+msgid ""
+"# sysrc wlans_iwn0=\"wlan0\"\n"
+"# sysrc ifconfig_wlan0=\"WPA DHCP\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:608
+msgid ""
+"And the last step will be the restart `netif` service executing the "
+"following command:"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network/_index.adoc:615
+#, no-wrap
+msgid "Basic Wireless Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:619
+msgid ""
+"The first step will be to configure the wireless network card to an "
+"interface. To find out what wireless network cards are in the system check "
+"the section <<config-identify-network-adapter>>."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:623
+#, no-wrap
+msgid "# ifconfig wlan0 create wlandevice iwm0\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:630
+#, no-wrap
+msgid "# sysrc wlans_iwn0=\"wlan0\"\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:635
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:638
+msgid ""
+"The available region definitions can be found in [.filename]#/etc/regdomain."
+"xml#. To set the data at runtime, use `ifconfig`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:642
+#, no-wrap
+msgid "# ifconfig wlan0 regdomain etsi2 country AT\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:645
+msgid "To persist the settings, add it to [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:649
+#, no-wrap
+msgid "# sysrc create_args_wlan0=\"country AT regdomain etsi2\"\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network/_index.adoc:653
+#, no-wrap
+msgid "Scan Wireless Networks"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:656
+msgid "Available wireless networks can be scanned using man:ifconfig[8]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:658
+msgid "To list the wireless networks execute the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:662
+#, no-wrap
+msgid "# ifconfig wlan0 up list scan\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:675
+#, no-wrap
+msgid ""
+"SSID/MESH ID BSSID CHAN RATE S:N INT CAPS\n"
+"FreeBSD e8:d1:1b:1b:58:ae 1 54M -47:-96 100 EP RSN BSSLOAD HTCAP WPS WME\n"
+"NetBSD d4:b9:2f:35:fe:08 1 54M -80:-96 100 EP RSN BSSLOAD HTCAP WPS WME\n"
+"OpenBSD fc:40:09:c6:31:bd 36 54M -94:-96 100 EPS VHTPWRENV APCHANREP RSN WPS BSSLOAD HTCAP VHTCAP VHTOPMODE WME\n"
+"GNU-Linux dc:f8:b9:a0:a8:e0 44 54M -95:-96 100 EP WPA RSN WPS HTCAP VHTCAP VHTOPMODE WME VHTPWRENV\n"
+"Windows 44:48:b9:b3:c3:ff 44 54M -84:-96 100 EP BSSLOAD VHTPWRENV HTCAP WME RSN VHTCAP VHTOPMODE WPS\n"
+"MacOS 46:48:b9:b3:c3:ff 44 54M -84:-96 100 EP BSSLOAD VHTPWRENV HTCAP WME RSN VHTCAP VHTOPMODE WPS\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:678
+msgid "SSID/MESH ID identifies the name of the network."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:679
+msgid "BSSID identifies the MAC address of the access point."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:680
+msgid ""
+"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 ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network/_index.adoc:682
+#, no-wrap
+msgid "Connection and Authentication to a Wireless Network"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:687
+msgid ""
+"Once a wireless network has been selected from the list of scanned networks, "
+"it is necessary to perform the connection and the authentication. In the "
+"vast majority of wireless networks, authentication is done with a password "
+"configured in the router. 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."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/network/_index.adoc:689
+#, no-wrap
+msgid "Authenticate with WPA2/WPA/Personal"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:692
+msgid ""
+"The authentication process in a wireless network is managed by man:"
+"wpa_supplicant[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:695
+msgid ""
+"The man:wpa_supplicant[8] configuration will be made in the [.filename]#/etc/"
+"wpa_supplicant.conf# file. For more information, see man:wpa_supplicant."
+"conf[5]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:697
+msgid ""
+"Once the scanning of the wireless networks has been carried out, a network "
+"has been chosen and have the password (PSK), that information will be added "
+"to the file [.filename]#/etc/wpa_supplicant.conf# as in the following "
+"example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:705
+#, no-wrap
+msgid ""
+"network={\n"
+" scan_ssid=1 <.>\n"
+" ssid=\"FreeBSD\" <.>\n"
+" psk=\"12345678\" <.>\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:708
+msgid ""
+"SSID scan technique. Only need to use this option if the network is hidden."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:709
+msgid "Network name."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:710
+msgid "Passwork of the wireless network."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:712
+msgid ""
+"The next step will be to configure the wireless connection in the file [."
+"filename]#/etc/rc.conf#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:714
+msgid ""
+"To use a static address it will be necessary to execute the following "
+"command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:718
+#, no-wrap
+msgid "# sysrc ifconfig_wlan0=\"inet 192.168.1.20 netmask 255.255.255.0\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:721
+msgid ""
+"To use a dynamic address it will be necessary to execute the following "
+"command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:725
+#, no-wrap
+msgid "# ifconfig_wlan0=\"WPA DHCP\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:728
+msgid "Then restart the network executing the following command:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:737
+msgid ""
+"More information on how to perform more advanced methods of authentication "
+"can be obtained at crossref:advanced-networking[network-advanced-wireless,"
+"\"Wireless Advanced Authentication\"]."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/network/_index.adoc:740
+#, no-wrap
+msgid "Authenticate with Open Networks"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:745
+msgid ""
+"It is important that the user is *very* careful when connecting to open "
+"networks without any kind of authentication."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:748
+msgid ""
+"Once the wireless network scan is done and the SSID of the wireless network "
+"is selected, execute the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:752
+#, no-wrap
+msgid "# ifconfig wlan0 ssid SSID\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:755
+msgid "And then execute man:dhclient[8] to get the address configured:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:759
+#, no-wrap
+msgid "# dhclient wlan0\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network/_index.adoc:761
+#, no-wrap
+msgid "Using Both Wired and Wireless Connections"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:765
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:768
+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 ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:770
+msgid ""
+"Link aggregation and failover is covered in crossref:advanced-"
+"networking[network-aggregation,\"Link Aggregation and Failover\"] and an "
+"example for using both wired and wireless connections is provided at "
+"crossref:advanced-networking[networking-lagg-wired-and-wireless,\"Failover "
+"Mode Between Ethernet and Wireless Interfaces\"]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/network/_index.adoc:772
+#, no-wrap
+msgid "Hostname"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:775
+msgid ""
+"The hostname represents the fully qualified domain name (FQDN) of the host "
+"on the network."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:779
+msgid ""
+"If no hostname has been set for the host FreeBSD will assign the value "
+"`Amnesiac`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network/_index.adoc:782
+#, no-wrap
+msgid "Check The Current Hostname"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:785
+msgid "man:hostname[1] can be used to check the current hostname:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:789
+#, no-wrap
+msgid "$ hostname\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:796
+#, no-wrap
+msgid "freebsdhostname.example.com\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network/_index.adoc:799
+#, no-wrap
+msgid "Change Hostname"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:802
+msgid ""
+"To change the hostname of the host and persist it across reboots execute the "
+"following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:806
+#, no-wrap
+msgid "# sysrc hostname=\"freebsdhostname.example.com\"\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/network/_index.adoc:809
+#, no-wrap
+msgid "DNS"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:812
+msgid ""
+"The DNS could be understanded as a link:https://en.wikipedia.org/wiki/"
+"Telephone_directory[telephone directory] in which an IP is identified to a "
+"hostname and vice versa."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:815
+msgid ""
+"There are three files that handle how a FreeBSD system interact with the "
+"DNS. These three files are man:hosts[5], man:resolv.conf[5] and man:"
+"nsswitch.conf[5]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:817
+msgid ""
+"Unless otherwise stated in the [.filename]#/etc/nsswitch.conf# file, FreeBSD "
+"will look at the addresses in the [.filename]#/etc/hosts# file and then the "
+"DNS information in the [.filename]#/etc/resolv.conf# file."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:821
+msgid ""
+"The man:nsswitch.conf[5] file specifies how the nsdispatch (name-service "
+"switch dispatcher) should operate."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:823
+msgid ""
+"By default, the hosts section of the [.filename]#/etc/nsswitch.conf# file "
+"will be as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:827
+#, no-wrap
+msgid "hosts: files dns\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:831
+msgid ""
+"For example, in case of using the man:nscd[8] service. The order of "
+"preference could be changed by leaving the line as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:835
+#, no-wrap
+msgid "hosts: files cache dns\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network/_index.adoc:839
+#, no-wrap
+msgid "Local addresses"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:844
+msgid ""
+"The [.filename]#/etc/hosts# file is a simple text database who provide host "
+"name to IP address mappings. Entries for local computers connected via a "
+"LAN can be added to this file for simplistic naming purposes instead of "
+"setting up a DNS server. Additionally, [.filename]#/etc/hosts# can be used "
+"to provide a local record of Internet names, reducing the need to query "
+"external DNS servers for commonly accessed names."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:846
+msgid ""
+"For example, in the case of having a local instance of package:www/gitlab-"
+"ce[] in a local environment, it could be added as follows to the file [."
+"filename]#/etc/hosts#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:850
+#, no-wrap
+msgid "192.168.1.150 git.example.com git\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network/_index.adoc:853
+#, no-wrap
+msgid "Configuring the Nameserver"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:856
+msgid ""
+"How a FreeBSD system accesses the Internet Domain Name System (DNS) is "
+"controlled by man:resolv.conf[5]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:858
+msgid "The most common entries to [.filename]#/etc/resolv.conf# are:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:864
+#, no-wrap
+msgid "`nameserver`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:866
+#, no-wrap
+msgid "The IP address of a name server the resolver should query. The servers are queried in the order listed with a maximum of three."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:867
+#, no-wrap
+msgid "`search`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:869
+#, no-wrap
+msgid "Search list for hostname lookup. This is normally determined by the domain of the local hostname."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:870
+#, no-wrap
+msgid "`domain`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/network/_index.adoc:871
+#, no-wrap
+msgid "The local domain name."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:874
+msgid "A typical [.filename]#/etc/resolv.conf# looks like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:880
+#, no-wrap
+msgid ""
+"search example.com\n"
+"nameserver 147.11.1.11\n"
+"nameserver 147.11.100.30\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:885
+msgid "Only one of the `search` and `domain` options should be used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:888
+msgid ""
+"When using DHCP, man:dhclient[8] usually rewrites [.filename]#/etc/resolv."
+"conf# with information received from the DHCP server."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:892
+msgid ""
+"If the machine in which the configuration is being made is *not* a DNS "
+"server, man:local-unbound[8] can be used to improve DNS lookup performance."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:894
+msgid "To enable it at boot time execute the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:898
+#, no-wrap
+msgid "# sysrc local_unbound_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:901
+msgid ""
+"To start the man:local-unbound[8] service execute the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/network/_index.adoc:905
+#, no-wrap
+msgid "# service local_unbound start\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/network/_index.adoc:909
+#, no-wrap
+msgid "Troubleshooting"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:912
+msgid ""
+"When troubleshooting hardware and software configurations, check the simple "
+"things first."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:914
+msgid "Is the network cable plugged in?"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:915
+msgid "Are the network services properly configured?"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:916
+msgid "Is the firewall configured correctly?"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:917
+msgid "Is the NIC supported by FreeBSD?"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:918
+msgid "Is the router working correctly?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/network/_index.adoc:922
+msgid ""
+"Before sending a bug report, always check the Hardware Notes in the link:"
+"https://www.freebsd.org/releases/[FreeBSD release page], update the version "
+"of FreeBSD to the latest STABLE version, check the mailing list archives, "
+"and search the Internet."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network/_index.adoc:925
+#, no-wrap
+msgid "Troubleshooting in Wired Networks"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:929
+msgid ""
+"If the card works, yet performance is poor, read through man:tuning[7]. "
+"Also, check the network configuration as incorrect network settings can "
+"cause slow connections."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:934
+msgid ""
+"`No route to host` messages occur if the system is unable to route a packet "
+"to the destination host. This can happen if no default route is specified "
+"or if a cable is unplugged. Check the output of `netstat -rn` and make sure "
+"there is a valid route to the host. If there is not, read crossref:advanced-"
+"networking[network-routing,\"Gateways and Routes\"]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:938
+msgid ""
+"`ping: sendto: Permission denied` error messages are often caused by a "
+"misconfigured firewall. If a firewall is enabled on FreeBSD but no rules "
+"have been defined, the default policy is to deny all traffic, even man:"
+"ping[8]. Refer to crossref:firewalls[firewalls,Firewalls] for more "
+"information."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/network/_index.adoc:940
+#, no-wrap
+msgid "Troubleshooting in Wireless Networks"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:943
+msgid ""
+"This section describes a number of steps to help troubleshoot common "
+"wireless networking problems."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:945
+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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:947
+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 WPA2 or WPA, "
+"configure the access point for open authentication and no security to see if "
+"traffic will pass."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:949
+msgid ""
+"Once the system can associate with the access point, diagnose the network "
+"configuration using tools like man:ping[8]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/network/_index.adoc:950
+msgid ""
+"There are many lower-level debugging tools. Debugging messages can be "
+"enabled in the 802.11 protocol support layer using man:wlandebug[8]."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/parti.adoc b/documentation/content/en/books/handbook/parti.adoc
index 9ef35a4ce4..01d87419e2 100644
--- a/documentation/content/en/books/handbook/parti.adoc
+++ b/documentation/content/en/books/handbook/parti.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/preface
next: books/handbook/introduction
showBookMenu: true
weight: 2
-path: "/books/handbook/"
+path: "/books/handbook/parti/"
---
[[getting-started]]
@@ -18,5 +18,6 @@ These chapters:
* Teach UNIX(R) basics and fundamentals.
* Show how to install the wealth of third party applications available for FreeBSD.
* Introduce X, the UNIX(R) windowing system, and detail how to configure a desktop environment that makes users more productive.
+* Introduce Wayland, a new display server for UNIX(R).
The number of forward references in the text have been kept to a minimum so that this section can be read from front to back with minimal page flipping.
diff --git a/documentation/content/en/books/handbook/parti.po b/documentation/content/en/books/handbook/parti.po
new file mode 100644
index 0000000000..db10606772
--- /dev/null
+++ b/documentation/content/en/books/handbook/parti.po
@@ -0,0 +1,77 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-01-21 20:00-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/parti.adoc:1
+#, no-wrap
+msgid "Part I. Getting Started"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/parti.adoc:11
+#, no-wrap
+msgid "Getting Started"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/parti.adoc:15
+msgid ""
+"This part of the handbook is for users and administrators who are new to "
+"FreeBSD. These chapters:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/parti.adoc:17
+msgid "Introduce FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/parti.adoc:18
+msgid "Guide readers through the installation process."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/parti.adoc:19
+msgid "Teach UNIX(R) basics and fundamentals."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/parti.adoc:20
+msgid ""
+"Show how to install the wealth of third party applications available for "
+"FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/parti.adoc:21
+msgid ""
+"Introduce X, the UNIX(R) windowing system, and detail how to configure a "
+"desktop environment that makes users more productive."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/parti.adoc:22
+msgid "Introduce Wayland, a new display server for UNIX(R)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/parti.adoc:23
+msgid ""
+"The number of forward references in the text have been kept to a minimum so "
+"that this section can be read from front to back with minimal page flipping."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/partii.adoc b/documentation/content/en/books/handbook/partii.adoc
index 2558af057a..a65ca8c553 100644
--- a/documentation/content/en/books/handbook/partii.adoc
+++ b/documentation/content/en/books/handbook/partii.adoc
@@ -1,10 +1,10 @@
---
title: Part II. Common Tasks
-prev: books/handbook/x11
+prev: books/handbook/network
next: books/handbook/desktop
showBookMenu: true
-weight: 8
-path: "/books/handbook/"
+weight: 10
+path: "/books/handbook/partii/"
---
[[common-tasks]]
diff --git a/documentation/content/en/books/handbook/partii.po b/documentation/content/en/books/handbook/partii.po
new file mode 100644
index 0000000000..60ba0f414f
--- /dev/null
+++ b/documentation/content/en/books/handbook/partii.po
@@ -0,0 +1,74 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-01-08 11:34-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/partii.adoc:1
+#, no-wrap
+msgid "Part II. Common Tasks"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/partii.adoc:11
+#, no-wrap
+msgid "Common Tasks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/partii.adoc:15
+msgid ""
+"Now that the basics have been covered, this part of the book discusses some "
+"frequently used features of FreeBSD. These chapters:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/partii.adoc:17
+msgid ""
+"Introduce popular and useful desktop applications: browsers, productivity "
+"tools, document viewers, and more."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/partii.adoc:18
+msgid "Introduce a number of multimedia tools available for FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/partii.adoc:19
+msgid ""
+"Explain the process of building a customized FreeBSD kernel to enable extra "
+"functionality."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/partii.adoc:20
+msgid ""
+"Describe the print system in detail, both for desktop and network-connected "
+"printer setups."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/partii.adoc:21
+msgid "Show how to run Linux applications on the FreeBSD system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/partii.adoc:22
+msgid ""
+"Some of these chapters recommend prior reading, and this is noted in the "
+"synopsis at the beginning of each chapter."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/partiii.adoc b/documentation/content/en/books/handbook/partiii.adoc
index a2277e833f..d8c034f31f 100644
--- a/documentation/content/en/books/handbook/partiii.adoc
+++ b/documentation/content/en/books/handbook/partiii.adoc
@@ -3,8 +3,8 @@ title: Part III. System Administration
prev: books/handbook/linuxemu
next: books/handbook/config
showBookMenu: true
-weight: 15
-path: "/books/handbook/"
+weight: 17
+path: "/books/handbook/partiii/"
---
[[system-administration]]
diff --git a/documentation/content/en/books/handbook/partiii.po b/documentation/content/en/books/handbook/partiii.po
new file mode 100644
index 0000000000..939c9ed9ba
--- /dev/null
+++ b/documentation/content/en/books/handbook/partiii.po
@@ -0,0 +1,46 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-01-08 11:34-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/partiii.adoc:1
+#, no-wrap
+msgid "Part III. System Administration"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/partiii.adoc:11
+#, no-wrap
+msgid "System Administration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/partiii.adoc:16
+msgid ""
+"The remaining chapters cover all aspects of FreeBSD system administration. "
+"Each chapter starts by describing what will be learned as a result of "
+"reading the chapter, and also details what the reader is expected to know "
+"before tackling the material."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/partiii.adoc:18
+msgid ""
+"These chapters are designed to be read as the information is needed. They "
+"do not need to be read in any particular order, nor must all of them be read "
+"before beginning to use FreeBSD."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/partiv.adoc b/documentation/content/en/books/handbook/partiv.adoc
index 82ca5a561d..40be7a6be7 100644
--- a/documentation/content/en/books/handbook/partiv.adoc
+++ b/documentation/content/en/books/handbook/partiv.adoc
@@ -3,8 +3,8 @@ title: Part IV. Network Communication
prev: books/handbook/usb-device-mode
next: books/handbook/serialcomms
showBookMenu: true
-weight: 31
-path: "/books/handbook/"
+weight: 33
+path: "/books/handbook/partiv/"
---
[[network-communication]]
diff --git a/documentation/content/en/books/handbook/partiv.po b/documentation/content/en/books/handbook/partiv.po
new file mode 100644
index 0000000000..efcec43d0d
--- /dev/null
+++ b/documentation/content/en/books/handbook/partiv.po
@@ -0,0 +1,74 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-01-08 11:34-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/partiv.adoc:1
+#, no-wrap
+msgid "Part IV. Network Communication"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/partiv.adoc:11
+#, no-wrap
+msgid "Network Communication"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/partiv.adoc:15
+msgid ""
+"FreeBSD is one of the most widely deployed operating systems for high "
+"performance network servers. The chapters in this part cover:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/partiv.adoc:17
+msgid "Serial communication"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/partiv.adoc:18
+msgid "`PPP` and `PPP` over Ethernet"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/partiv.adoc:19
+msgid "Electronic Mail"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/partiv.adoc:20
+msgid "Running Network Servers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/partiv.adoc:21
+msgid "Firewalls"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/partiv.adoc:22
+msgid "Other Advanced Networking Topics"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/partiv.adoc:24
+msgid ""
+"These chapters are designed to be read when the information is needed. They "
+"do not need to be read in any particular order, nor is it necessary to read "
+"all of them before using FreeBSD in a network environment."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/partv.adoc b/documentation/content/en/books/handbook/partv.adoc
index 9bd4e82b40..761901cfcb 100644
--- a/documentation/content/en/books/handbook/partv.adoc
+++ b/documentation/content/en/books/handbook/partv.adoc
@@ -3,8 +3,8 @@ title: Part V. Appendices
prev: books/handbook/advanced-networking
next: books/handbook/mirrors
showBookMenu: true
-weight: 38
-path: "/books/handbook/"
+weight: 40
+path: "/books/handbook/partv/"
---
[[appendices]]
diff --git a/documentation/content/en/books/handbook/partv.po b/documentation/content/en/books/handbook/partv.po
new file mode 100644
index 0000000000..307fa19788
--- /dev/null
+++ b/documentation/content/en/books/handbook/partv.po
@@ -0,0 +1,29 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-01-08 11:34-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/partv.adoc:1
+#, no-wrap
+msgid "Part V. Appendices"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/partv.adoc:11
+#, no-wrap
+msgid "Appendices "
+msgstr ""
diff --git a/documentation/content/en/books/handbook/pgpkeys/_index.adoc b/documentation/content/en/books/handbook/pgpkeys/_index.adoc
index a28e097bdc..3b54e73156 100644
--- a/documentation/content/en/books/handbook/pgpkeys/_index.adoc
+++ b/documentation/content/en/books/handbook/pgpkeys/_index.adoc
@@ -6,8 +6,8 @@ next: books/handbook/glossary
description: List of OpenPGP keys of the FreeBSD officers are shown here
tags: ["OpenGPG", "keys", "officers"]
showBookMenu: true
-weight: 42
-path: "/books/handbook/"
+weight: 44
+path: "/books/handbook/pgpkeys/"
---
[appendix]
@@ -64,9 +64,6 @@ The complete keyring can be downloaded at link:https://docs.FreeBSD.org/pgpkeys/
=== {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/en/books/handbook/pgpkeys/_index.po b/documentation/content/en/books/handbook/pgpkeys/_index.po
new file mode 100644
index 0000000000..617ddc4cc3
--- /dev/null
+++ b/documentation/content/en/books/handbook/pgpkeys/_index.po
@@ -0,0 +1,81 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-01-21 20:00-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/pgpkeys/_index.adoc:1
+#, no-wrap
+msgid "List of OpenPGP keys of the FreeBSD officers are shown here"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/pgpkeys/_index.adoc:1
+#, no-wrap
+msgid "Part V. Appendices"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/pgpkeys/_index.adoc:1
+#, no-wrap
+msgid "Appendix D. OpenPGP Keys"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/pgpkeys/_index.adoc:15
+#, no-wrap
+msgid "OpenPGP Keys"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/pgpkeys/_index.adoc:60
+msgid ""
+"The OpenPGP keys of the `FreeBSD.org` officers are shown here. These keys "
+"can be used to verify a signature or send encrypted email to one of the "
+"officers. A full list of FreeBSD OpenPGP keys is available in the extref:"
+"{pgpkeys}[PGP Keys] article. The complete keyring can be downloaded at link:"
+"https://docs.FreeBSD.org/pgpkeys/pgpkeys.txt[pgpkeyring.txt]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/pgpkeys/_index.adoc:62
+#, no-wrap
+msgid "Officers"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/pgpkeys/_index.adoc:64
+#, no-wrap
+msgid "{security-officer-name} `<{security-officer-email}>`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/pgpkeys/_index.adoc:67
+#, no-wrap
+msgid "{core-secretary-name} `<{core-secretary-email}>`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/pgpkeys/_index.adoc:70
+#, no-wrap
+msgid "{portmgr-secretary-name} `<{portmgr-secretary-email}>`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/pgpkeys/_index.adoc:73
+#, no-wrap
+msgid "`{doceng-secretary-email}`"
+msgstr ""
diff --git a/documentation/content/en/books/handbook/ports/_index.adoc b/documentation/content/en/books/handbook/ports/_index.adoc
index cfe881e847..7ef3b47c7d 100644
--- a/documentation/content/en/books/handbook/ports/_index.adoc
+++ b/documentation/content/en/books/handbook/ports/_index.adoc
@@ -7,7 +7,7 @@ description: "FreeBSD provides two complementary technologies for installing thi
tags: ["ports", "collection", "pkg", "poudriere", "management"]
showBookMenu: true
weight: 6
-path: "/books/handbook/"
+path: "/books/handbook/ports/"
---
[[ports]]
@@ -68,15 +68,6 @@ After reading this chapter, you will know:
[[ports-overview]]
== Overview of Software Installation
-The typical steps for installing third-party software on a UNIX(R) system include:
-
-[.procedure]
-. Find and download the software, which might be distributed in source code format or as a binary.
-. Unpack the software from its distribution format. This is typically a tarball compressed with a program such as man:compress[1], man:gzip[1], man:bzip2[1] or man:xz[1].
-. Locate the documentation in [.filename]#INSTALL#, [.filename]#README# or some file in a [.filename]#doc/# subdirectory and read up on how to install the software.
-. If the software was distributed in source format, compile it. This may involve editing a [.filename]#Makefile# or running a `configure` script.
-. Test and install the software.
-
A FreeBSD _port_ is a collection of files designed to automate the process of compiling an application from source code.
The files that comprise a port contain all the necessary information to automatically download, extract, patch, compile, and install the application.
@@ -98,14 +89,14 @@ Select the technology that meets your requirements for installing a particular a
.Package Benefits
* A compressed package tarball is typically smaller than the compressed tarball containing the source code for the application.
-* Packages do not require compilation time. For large applications, such as Mozilla, KDE, or GNOME, this can be important on a slow system.
+* Packages do not require compilation time. For large applications, such as Firefox, KDE Plasma, or GNOME, this can be important on a slow system.
* Packages do not require any understanding of the process involved in compiling software on FreeBSD.
.Port Benefits
* Packages are normally compiled with conservative options because they have to run on the maximum number of systems. By compiling from the port, one can change the compilation options.
-* Some applications have compile-time options relating to which features are installed. For example, Apache can be configured with a wide variety of different built-in options.
+* Some applications have compile-time options relating to which features are installed. For example, NGINX(R) can be configured with a wide variety of different built-in options.
+
-In some cases, multiple packages will exist for the same application to specify certain settings. For example, Ghostscript is available as a [.filename]#ghostscript# package and a [.filename]#ghostscript-nox11# package, depending on whether or not Xorg is installed. Creating multiple packages rapidly becomes impossible if an application has more than one or two different compile-time options.
+In some cases, multiple packages will exist for the same application to specify certain settings. For example, NGINX(R) is available as a `nginx` package and a `nginx-lite` package, depending on whether or not Xorg is installed. Creating multiple packages rapidly becomes impossible if an application has more than one or two different compile-time options.
* The licensing conditions of some software forbid binary distribution. Such software must be distributed as source code which must be compiled by the end-user.
* Some people do not trust binary distributions or prefer to read through source code in order to look for potential problems.
* Source code is needed in order to apply custom patches.
@@ -114,8 +105,9 @@ To keep track of updated ports, subscribe to the {freebsd-ports} and the {freebs
[WARNING]
====
+Before installing an application, check https://vuxml.freebsd.org/[] for related security issues.
-Before installing any application, check https://vuxml.freebsd.org/[] for security issues related to the application or type `pkg audit -F` to check all installed applications for known vulnerabilities.
+To audit installed packages against known vulnerabilities, run `pkg audit -F`.
====
The remainder of this chapter explains how to use packages and ports to install and manage third-party software on FreeBSD.
@@ -126,210 +118,66 @@ The remainder of this chapter explains how to use packages and ports to install
FreeBSD's list of available applications is growing all the time.
There are a number of ways to find software to install:
-* The FreeBSD web site maintains an up-to-date searchable list of all the available applications, at link:https://www.FreeBSD.org/ports/[https://www.FreeBSD.org/ports/]. The ports can be searched by application name or by software category.
-* Dan Langille maintains http://www.FreshPorts.org/[FreshPorts.org] which provides a comprehensive search utility and also tracks changes to the applications in the Ports Collection. Registered users can create a customized watch list in order to receive an automated email when their watched ports are updated.
-* If finding a particular application becomes challenging, try searching a site like http://www.sourceforge.net/[SourceForge.net] or http://www.github.com/[GitHub.com] then check back at the link:https://www.FreeBSD.org/ports/[FreeBSD site] to see if the application has been ported.
-* To search the binary package repository for an application:
-+
-[source,shell]
-....
-# pkg search subversion
-git-subversion-1.9.2
-java-subversion-1.8.8_2
-p5-subversion-1.8.8_2
-py27-hgsubversion-1.6
-py27-subversion-1.8.8_2
-ruby-subversion-1.8.8_2
-subversion-1.8.8_2
-subversion-book-4515
-subversion-static-1.8.8_2
-subversion16-1.6.23_4
-subversion17-1.7.16_2
-....
-+
-Package names include the version number and, in the case of ports based on python, the version number of the version of python the package was built with.
-Some ports also have multiple versions available.
-In the case of Subversion, there are different versions available, as well as different compile options.
-In this case, the statically linked version of Subversion.
-When indicating which package to install, it is best to specify the application by the port origin, which is the path in the ports tree.
-Repeat the `pkg search` with `-o` to list the origin of each package:
-+
-[source,shell]
-....
-# pkg search -o subversion
-devel/git-subversion
-java/java-subversion
-devel/p5-subversion
-devel/py-hgsubversion
-devel/py-subversion
-devel/ruby-subversion
-devel/subversion16
-devel/subversion17
-devel/subversion
-devel/subversion-book
-devel/subversion-static
-....
-+
-Searching by shell globs, regular expressions, exact match, by description, or any other field in the repository database is also supported by `pkg search`.
-After installing package:ports-mgmt/pkg[] or package:ports-mgmt/pkg-devel[], see man:pkg-search[8] for more details.
-* If the Ports Collection is already installed, there are several methods to query the local version of the ports tree. To find out which category a port is in, type `whereis _file_`, where _file_ is the program to be installed:
-+
-[source,shell]
-....
-# whereis lsof
-lsof: /usr/ports/sysutils/lsof
-....
-+
-Alternately, an man:echo[1] statement can be used:
-+
-[source,shell]
-....
-# echo /usr/ports/*/*lsof*
-/usr/ports/sysutils/lsof
-....
-+
-Note that this will also return any matched files downloaded into the [.filename]#/usr/ports/distfiles# directory.
-* Another way to find software is by using the Ports Collection's built-in search mechanism. To use the search feature, cd to [.filename]#/usr/ports# then run `make search name=program-name` where _program-name_ is the name of the software. For example, to search for `lsof`:
-+
-[source,shell]
-....
-# cd /usr/ports
-# make search name=lsof
-Port: lsof-4.88.d,8
-Path: /usr/ports/sysutils/lsof
-Info: Lists information about open files (similar to fstat(1))
-Maint: ler@lerctr.org
-Index: sysutils
-B-deps:
-R-deps:
-....
-+
-[TIP]
-====
-The built-in search mechanism uses a file of index information.
-If a message indicates that the [.filename]#INDEX# is required, run `make fetchindex` to download the current index file.
-With the [.filename]#INDEX# present, `make search` will be able to perform the requested search.
-====
-+
-The "Path:" line indicates where to find the port.
-+
-To receive less information, use the `quicksearch` feature:
-+
-[source,shell]
-....
-# cd /usr/ports
-# make quicksearch name=lsof
-Port: lsof-4.88.d,8
-Path: /usr/ports/sysutils/lsof
-Info: Lists information about open files (similar to fstat(1))
-....
-+
-For more in-depth searching, use `make search key=_string_` or `make quicksearch key=_string_`, where _string_ is some text to search for.
-The text can be in comments, descriptions, or dependencies in order to find ports which relate to a particular subject when the name of the program is unknown.
-+
-When using `search` or `quicksearch`, the search string is case-insensitive.
-Searching for "LSOF" will yield the same results as searching for "lsof".
+* The FreeBSD web site maintains an up-to-date searchable list of all the available applications, at link:https://www.FreeBSD.org/ports/[Ports Portal]. The ports can be searched by application name or by software category.
+* Dan Langille maintains https://www.freshports.org/[FreshPorts] which provides a comprehensive search utility and also tracks changes to the applications in the Ports Collection. Registered users can create a customized watch list in order to receive an automated email when their watched ports are updated.
+* If finding a particular application becomes challenging, try searching a site like https://sourceforge.net/[SourceForge] or https://github.com/[GitHub] then check back at the link:https://www.FreeBSD.org/ports/[Ports Portal] to see if the application has been ported.
+* Search the binary package repository for an application using the man:pkg[8] command
[[pkgng-intro]]
== Using pkg for Binary Package Management
-pkg is the next generation replacement for the traditional FreeBSD package management tools, offering many features that make dealing with binary packages faster and easier.
+man:pkg[8] provides an interface for manipulating packages: registering, adding, removing and upgrading packages.
-For sites wishing to only use prebuilt binary packages from the FreeBSD mirrors, managing packages with pkg can be sufficient.
+For sites wishing to only use prebuilt binary packages from the FreeBSD mirrors, managing packages with man:pkg[8] can be sufficient.
-However, for those sites building from source or using their own repositories, a separate <<ports-upgrading-tools,port management tool>> will be needed.
+However, for those sites building from source a separate <<ports-upgrading-tools, port management tool>> will be needed.
-Since pkg only works with binary packages, it is not a replacement for such tools.
-Those tools can be used to install software from both binary packages and the Ports Collection, while pkg installs only binary packages.
+Since man:pkg[8] only works with binary packages, it is not a replacement for such tools.
+Those tools can be used to install software from both binary packages and the Ports Collection, while man:pkg[8] installs only binary packages.
[[pkgng-initial-setup]]
=== Getting Started with pkg
-FreeBSD includes a bootstrap utility which can be used to download and install pkg and its manual pages.
-This utility is designed to work with versions of FreeBSD starting with 10._X_.
+All supported versions of FreeBSD now contain `/usr/sbin/pkg` a.k.a man:pkg[7].
+This is a small placeholder that has just the minimum functionality required to install the real man:pkg[8].
[NOTE]
====
-Not all FreeBSD versions and architectures support this bootstrap process.
-The current list is at https://pkg.freebsd.org/[].
-For other cases, pkg must instead be installed from the Ports Collection or as a binary package.
+An Internet working connection is required for the bootstrap process to succeed.
====
-To bootstrap the system, run:
+Run man:pkg[8] command line:
[source,shell]
....
-# /usr/sbin/pkg
+# pkg
....
-You must have a working Internet connection for the bootstrap process to succeed.
-
-Otherwise, to install the port, run:
-
-[source,shell]
-....
-# cd /usr/ports/ports-mgmt/pkg
-# make
-# make install clean
-....
-
-When upgrading an existing system that originally used the older pkg_* tools,
-the database must be converted to the new format, so that the new tools are aware of the already installed packages.
-Once pkg has been installed, the package database must be converted from the traditional format to the new format by running this command:
-
-[source,shell]
-....
-# pkg2ng
-....
-
-[NOTE]
-====
-This step is not required for new installations that do not yet have any third-party software installed.
-====
-
-[IMPORTANT]
-====
-This step is not reversible.
-Once the package database has been converted to the pkg format, the traditional `pkg_*` tools should no longer be used.
-====
-
-[NOTE]
-====
-The package database conversion may emit errors as the contents are converted to the new version.
-Generally, these errors can be safely ignored.
-However, a list of software that was not successfully converted is shown after `pkg2ng` finishes.
-These applications must be manually reinstalled.
-====
-
-To ensure that the Ports Collection registers new software with pkg instead of the traditional packages database,
-FreeBSD versions earlier than 10._X_ require this line in [.filename]#/etc/make.conf#:
+The output should be similar to the following:
[.programlisting]
....
-WITH_PKGNG= yes
+The package management tool is not yet installed on your system.
+Do you want to fetch and install it now? [y/N]
....
-By default, pkg uses the binary packages from the FreeBSD package mirrors (the _repository_).
-For information about building a custom package repository, see <<ports-poudriere>>.
+man:pkg[7] will intercept the command, and if you confirm that is your intention, download the man:pkg[8] tarball, install man:pkg[8] from it, bootstrap the local package database and then proceed to run the command you originally requested.
-Additional pkg configuration options are described in man:pkg.conf[5].
+More recent versions of man:pkg[7] understand `pkg -N` as a test to see if man:pkg[8] is installed without triggering the installation, and conversely, pkg bootstrap[-f] to install man:pkg[8] (or force it to be reinstalled) without performing any other actions.
Usage information for pkg is available in the man:pkg[8] manual page or by running `pkg` without additional arguments.
+Additional pkg configuration options are described in man:pkg.conf[5].
Each pkg command argument is documented in a command-specific manual page.
-To read the manual page for `pkg install`, for example, run either of these commands:
-[source,shell]
-....
-# pkg help install
-....
+To read the manual page for `pkg install`, for example, run this command:
[source,shell]
....
-# man pkg-install
+# pkg help install
....
-The rest of this section demonstrates common binary package management tasks which can be performed using pkg.
+The rest of this section demonstrates common binary package management tasks which can be performed using man:pkg[8].
Each demonstrated command provides many switches to customize its use.
Refer to a command's help or man page for details and more examples.
@@ -341,89 +189,113 @@ This is done essentially by only allowing non-feature updates.
Quarterly branches aim to receive security fixes (that may be version updates, or backports of commits), bug fixes and ports compliance or framework changes.
The Quarterly branch is cut from HEAD at the beginning of every (yearly) quarter in January, April, July, and October.
Branches are named according to the year (YYYY) and quarter (Q1-4) they are created in.
-For example, the quarterly branch created in January 2016, is named 2016Q1.
+For example, the quarterly branch created in January 2023, is named 2023Q1.
And the `Latest` branch provides the latest versions of the packages to the users.
-To switch from quarterly to latest run the following commands:
+To switch man:pkg[8] from Quarterly to Latest run the following commands:
[source,shell]
....
# mkdir -p /usr/local/etc/pkg/repos
-# cp /etc/pkg/FreeBSD.conf /usr/local/etc/pkg/repos/FreeBSD.conf
-....
-
-Edit the file [.filename]#/usr/local/etc/pkg/repos/FreeBSD.conf# and change the string _quarterly_ to _latest_ in the `url:` line.
-
-The result should be similar to the following:
-
-[.programlisting]
-....
-FreeBSD: {
- url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest",
- mirror_type: "srv",
- signature_type: "fingerprints",
- fingerprints: "/usr/share/keys/pkg",
- enabled: yes
-}
+# echo 'FreeBSD: { url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest" }' > /usr/local/etc/pkg/repos/FreeBSD.conf
....
-And finally run this command to update from the new (latest) repository metadata.
+Then run this command to update the local package repositories catalogues for the Latest branch:
[source,shell]
....
# pkg update -f
....
-[[pkgng-pkg-info]]
-=== Obtaining Information About Installed Packages
+[[pkg-configuration]]
+=== Configure pkg
-Information about the packages installed on a system can be viewed by running `pkg info` which, when run without any switches,
-will list the package version for either all installed packages or the specified package.
+man:pkg.conf[5] is the system-wide configuration file used by the man:pkg[8] tools.
+The default location of this file is `/usr/local/etc/pkg.conf`.
-For example, to see which version of pkg is installed, run:
+[NOTE]
+====
+FreeBSD does not need to have a `pkg.conf` file.
+Many installations will work well with no `pkg.conf` at all or with an empty `pkg.conf` (other than comment lines).
+====
-[source,shell]
-....
-# pkg info pkg
-pkg-1.1.4_1
-....
+Lines in the file beginning with a "#" are comments and are ignored.
+
+The file is in UCL format.
+For more information on the syntax of man:libucl[3], please visit the link:https://github.com/vstakhov/libucl[official UCL website].
+
+The following types of options are recognized - boolean, string and list options.
-[[pkgng-installing-deinstalling]]
-=== Installing and Removing Packages
+A boolean option is marked as enabled if one of the following values is specified in the configuration file - YES, TRUE and ON.
-To install a binary package use the following command, where _packagename_ is the name of the package to install:
+[[pkg-search]]
+=== Searching Packages
+
+To search a package man:pkg-search[8] can be used:
[source,shell]
....
-# pkg install packagename
+# pkg search nginx
....
+The output should be similar to the following:
+
+[.programlisting]
+....
+modsecurity3-nginx-1.0.3 Instruction detection and prevention engine / nginx Wrapper
+nginx-1.22.1_2,3 Robust and small WWW server
+nginx-devel-1.23.2_4 Robust and small WWW server
+nginx-full-1.22.1_1,3 Robust and small WWW server (full package)
+nginx-lite-1.22.1,3 Robust and small WWW server (lite package)
+nginx-naxsi-1.22.1,3 Robust and small WWW server (plus NAXSI)
+nginx-prometheus-exporter-0.10.0_7 Prometheus exporter for NGINX and NGINX Plus stats
+nginx-ultimate-bad-bot-blocker-4.2020.03.2005_1 Nginx bad bot and other things blocker
+nginx-vts-exporter-0.10.7_7 Server that scraps NGINX vts stats and export them via HTTP
+p5-Nginx-ReadBody-0.07_1 Nginx embeded perl module to read and evaluate a request body
+p5-Nginx-Simple-0.07_1 Perl 5 module for easy to use interface for Nginx Perl Module
+p5-Test-Nginx-0.30 Testing modules for Nginx C module development
+py39-certbot-nginx-2.0.0 NGINX plugin for Certbot
+rubygem-passenger-nginx-6.0.15 Modules for running Ruby on Rails and Rack applications
+....
+
+[[pkg-installing-fetching]]
+=== Installing and Fetching Packages
+
+To install a binary package man:pkg-install[8] can be used.
This command uses repository data to determine which version of the software to install and if it has any uninstalled dependencies.
For example, to install curl:
[source,shell]
....
# pkg install curl
-Updating repository catalogue
-/usr/local/tmp/All/curl-7.31.0_1.txz 100% of 1181 kB 1380 kBps 00m01s
+....
-/usr/local/tmp/All/ca_root_nss-3.15.1_1.txz 100% of 288 kB 1700 kBps 00m00s
+The output should be similar to the following:
-Updating repository catalogue
-The following 2 packages will be installed:
+[.programlisting]
+....
+Updating FreeBSD repository catalogue...
+FreeBSD repository is up to date.
+All repositories are up to date.
+The following 9 package(s) will be affected (of 0 checked):
- Installing ca_root_nss: 3.15.1_1
- Installing curl: 7.31.0_1
+New packages to be INSTALLED:
+ ca_root_nss: 3.83
+ curl: 7.86.0
+ gettext-runtime: 0.21
+ indexinfo: 0.3.1
+ libidn2: 2.3.3
+ libnghttp2: 1.48.0
+ libpsl: 0.21.1_4
+ libssh2: 1.10.0.3
+ libunistring: 1.0
-The installation will require 3 MB more space
+Number of packages to be installed: 9
-0 B to be downloaded
+The process will require 11 MiB more space.
+3 MiB to be downloaded
-Proceed with installing packages [y/N]: y
-Checking integrity... done
-[1/2] Installing ca_root_nss-3.15.1_1... done
-[2/2] Installing curl-7.31.0_1... done
-Cleaning up cache files...Done
+Proceed with this action? [y/N]
....
The new package and any additional packages that were installed as dependencies can be seen in the installed packages list:
@@ -431,31 +303,115 @@ The new package and any additional packages that were installed as dependencies
[source,shell]
....
# pkg info
-ca_root_nss-3.15.1_1 The root certificate bundle from the Mozilla Project
-curl-7.31.0_1 Non-interactive tool to get files from FTP, GOPHER, HTTP(S) servers
-pkg-1.1.4_6 New generation package manager
....
-Packages that are no longer needed can be removed with `pkg delete`.
-For example:
+The output should be similar to the following:
+
+[.programlisting]
+....
+ca_root_nss-3.83 Root certificate bundle from the Mozilla Project
+curl-7.86.0 Command line tool and library for transferring data with URLs
+gettext-runtime-0.21.1 GNU gettext runtime libraries and programs
+indexinfo-0.3.1 Utility to regenerate the GNU info page index
+libidn2-2.3.3 Implementation of IDNA2008 internationalized domain names
+libnghttp2-1.48.0 HTTP/2.0 C Library
+libpsl-0.21.1_6 C library to handle the Public Suffix List
+libssh2-1.10.0.3 Library implementing the SSH2 protocol
+libunistring-1.0 Unicode string library
+pkg-1.18.4 Package manager
+....
+
+To fetch a package and install it later or in another place use man:pkg-fetch[8].
+For example, to download `nginx-lite`:
[source,shell]
....
-# pkg delete curl
-The following packages will be deleted:
+# pkg fetch -d -o /usr/home/user/packages/ nginx-lite
+....
+
+* `-d`: used to fetch all the dependencies
+* `-o`: used to specify the download directory
+
+The output should be similar to the following:
+
+[.programlisting]
+....
+Updating FreeBSD repository catalogue...
+FreeBSD repository is up to date.
+All repositories are up to date.
+The following packages will be fetched:
+
+New packages to be FETCHED:
+ nginx-lite: 1.22.1,3 (342 KiB: 22.20% of the 2 MiB to download)
+ pcre: 8.45_3 (1 MiB: 77.80% of the 2 MiB to download)
+
+Number of packages to be fetched: 2
+
+The process will require 2 MiB more space.
+2 MiB to be downloaded.
+
+Proceed with fetching packages? [y/N]:
+....
+
+To install the downloaded packages man:pkg-install[8] can be used as follows:
+
+[source,shell]
+....
+# cd /usr/home/user/packages/
+....
+
+[source,shell]
+....
+# pkg install nginx-lite-1.22.1,3.pkg
+....
- curl-7.31.0_1
+[[pkgng-pkg-info]]
+=== Obtaining Information About Installed Packages
+
+Information about the packages installed on a system can be viewed by running man:pkg-info[8] which, when run without any switches, will list the package version for either all installed packages or the specified package.
+
+For example, to see which version of pkg is installed, run:
+
+[source,shell]
+....
+# pkg info pkg
+....
-The deletion will free 3 MB
+The output should be similar to the following:
-Proceed with deleting packages [y/N]: y
-[1/1] Deleting curl-7.31.0_1... done
+[.programlisting]
+....
+pkg-1.19.0
+Name : pkg
+Version : 1.19.0
+Installed on : Sat Dec 17 11:05:28 2022 CET
+Origin : ports-mgmt/pkg
+Architecture : FreeBSD:13:amd64
+Prefix : /usr/local
+Categories : ports-mgmt
+Licenses : BSD2CLAUSE
+Maintainer : pkg@FreeBSD.org
+WWW : https://github.com/freebsd/pkg
+Comment : Package manager
+Options :
+ DOCS : on
+Shared Libs provided:
+ libpkg.so.4
+Annotations :
+ FreeBSD_version: 1301000
+ repo_type : binary
+ repository : FreeBSD
+Flat size : 33.2MiB
+Description :
+Package management tool
+
+WWW: https://github.com/freebsd/pkg
....
[[pkgng-upgrading]]
=== Upgrading Installed Packages
-Installed packages can be upgraded to their latest versions by running:
+Installed packages can be upgraded to their latest versions using man:pkg-upgrade[8]:
[source,shell]
....
@@ -469,49 +425,117 @@ This command will compare the installed versions with those available in the rep
Software vulnerabilities are regularly discovered in third-party applications.
To address this, pkg includes a built-in auditing mechanism.
-To determine if there are any known vulnerabilities for the software installed on the system, run:
+To determine if there are any known vulnerabilities for the software installed on the system, use man:pkg-audit[8]:
[source,shell]
....
# pkg audit -F
....
+The output should be similar to the following:
+
+[.programlisting]
+....
+Fetching vuln.xml.xz: 100% 976 KiB 499.5kB/s 00:02
+chromium-108.0.5359.98 is vulnerable:
+ chromium -- multiple vulnerabilities
+ CVE: CVE-2022-4440
+ CVE: CVE-2022-4439
+ CVE: CVE-2022-4438
+ CVE: CVE-2022-4437
+ CVE: CVE-2022-4436
+ WWW: https://vuxml.FreeBSD.org/freebsd/83eb9374-7b97-11ed-be8f-3065ec8fd3ec.html
+....
+
+[[pkg-delete]]
+=== Removing Packages
+
+Packages that are no longer needed can be removed with man:pkg-delete[8].
+
+For example:
+
+[source,shell]
+....
+# pkg delete curl
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
+Checking integrity... done (0 conflicting)
+Deinstallation has been requested for the following 1 packages (of 0 packages in the universe):
+
+Installed packages to be REMOVED:
+ curl :7.86.0
+
+Number of packages to be removed: 1
+
+The operation will free 4 MiB.
+
+Proceed with deinstallation packages? [y/N]: y
+[1/1] Deinstalling curl-7.86.0...
+[1/1] Deleting files for curl-7.86.0: 100%
+....
+
[[pkgng-autoremove]]
=== Automatically Removing Unused Packages
Removing a package may leave behind dependencies which are no longer required.
-Unneeded packages that were installed as dependencies (leaf packages) can be automatically detected and removed using:
+Unneeded packages that were installed as dependencies (leaf packages) can be automatically detected and removed using man:pkg-autoremove[8]:
[source,shell]
....
# pkg autoremove
-Packages to be autoremoved:
- ca_root_nss-3.15.1_1
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
+Checking integrity... done (0 conflicting)
+Deinstallation has been requested for the following 1 packages:
+
+Installed packages to be REMOVED:
+ ca_root_nss-3.83
+
+Number of packages to be removed: 1
-The autoremoval will free 723 kB
+The operation will free 723 KiB.
-Proceed with autoremoval of packages [y/N]: y
-Deinstalling ca_root_nss-3.15.1_1... done
+Proceed with deinstalling packages? [y/N]:
....
Packages installed as dependencies are called _automatic_ packages.
-Non-automatic packages, i.e the packages that were explicity installed not as a dependency to another package, can be listed using:
+Non-automatic packages, i.e the packages that were explicitly installed not as a dependency to another package, can be listed using:
[source,shell]
....
# pkg prime-list
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
nginx
openvpn
sudo
....
-`pkg prime-list` is an alias command declared in [.filename]#/usr/local/etc/pkg.conf#.
+`pkg prime-list` is an alias command declared in `/usr/local/etc/pkg.conf`.
There are many others that can be used to query the package database of the system.
For instance, command `pkg prime-origins` can be used to get the origin port directory of the list mentioned above:
[source,shell]
....
# pkg prime-origins
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
www/nginx
security/openvpn
security/sudo
@@ -535,55 +559,45 @@ Marking an installed package as _not_ automatic can be done using:
# pkg set -A 0 devel/cmake
....
-[[pkgng-backup]]
-=== Restoring the Package Database
-
-Unlike the traditional package management system, pkg includes its own package database backup mechanism.
-This functionality is enabled by default.
-
-[TIP]
-====
-To disable the periodic script from backing up the package database, set `daily_backup_pkgdb_enable="NO"` in man:periodic.conf[5].
-====
+[[pkgng-clean]]
+=== Removing Stale Packages
-To restore the contents of a previous package database backup,
-run the following command replacing _/path/to/pkg.sql_ with the location of the backup:
+By default, pkg stores binary packages in a cache directory defined by `PKG_CACHEDIR` in man:pkg.conf[5].
+Only copies of the latest installed packages are kept. Older versions of pkg kept all previous packages.
+To remove these outdated binary packages, run:
[source,shell]
....
-# pkg backup -r /path/to/pkg.sql
+# pkg clean
....
-[NOTE]
-====
-If restoring a backup taken by the periodic script, it must be decompressed prior to being restored.
-====
-
-To run a manual backup of the pkg database, run the following command,
-replacing _/path/to/pkg.sql_ with a suitable file name and location:
+The entire cache may be cleared by running:
[source,shell]
....
-# pkg backup -d /path/to/pkg.sql
+# pkg clean -a
....
-[[pkgng-clean]]
-=== Removing Stale Packages
+[[pkg-locking-unlocking]]
+=== Locking and Unlocking Packages
-By default, pkg stores binary packages in a cache directory defined by `PKG_CACHEDIR` in man:pkg.conf[5].
-Only copies of the latest installed packages are kept. Older versions of pkg kept all previous packages.
-To remove these outdated binary packages, run:
+man:pkg-lock[8] is used to lock packages against reinstallation, modification or deletion.
+man:pkg-unlock[8] unlocks the named packages.
+Either variant only has an effect on currently installed packages.
+Consequently it is impossible to block installation of a new package by using this mechanism, unless such an installation implies updating a locked package.
+
+For example, to lock `nginx-lite`:
[source,shell]
....
-# pkg clean
+# pkg lock nginx-lite
....
-The entire cache may be cleared by running:
+And to unlock `nginx-lite`:
[source,shell]
....
-# pkg clean -a
+# pkg unlock nginx-lite
....
[[pkgng-set]]
@@ -591,27 +605,20 @@ The entire cache may be cleared by running:
Software within the FreeBSD Ports Collection can undergo major version number changes.
To address this, pkg has a built-in command to update package origins.
-This can be useful, for example, if package:lang/php5[] is renamed to package:lang/php53[] so that package:lang/php5[] can now represent version `5.4`.
+This can be useful, for example, if package:lang/python3[] is renamed to package:lang/python311[] so that package:lang/python3[] can now represent version `3.11`.
To change the package origin for the above example, run:
[source,shell]
....
-# pkg set -o lang/php5:lang/php53
-....
-
-As another example, to update package:lang/ruby18[] to package:lang/ruby19[], run:
-
-[source,shell]
-....
-# pkg set -o lang/ruby18:lang/ruby19
+# pkg set -o lang/python3:lang/python311
....
-As a final example, to change the origin of the [.filename]#libglut# shared libraries from package:graphics/libglut[] to package:graphics/freeglut[], run:
+As another example, to update package:lang/ruby31[] to package:lang/ruby32[], run:
[source,shell]
....
-# pkg set -o graphics/libglut:graphics/freeglut
+# pkg set -o lang/ruby31:lang/ruby32
....
[NOTE]
@@ -621,18 +628,17 @@ To force a reinstallation of dependent packages, run:
[source,shell]
....
-# pkg install -Rf graphics/freeglut
+# pkg install -Rf lang/ruby32
....
-
====
[[ports-using]]
== Using the Ports Collection
-The Ports Collection is a set of [.filename]##Makefile##s, patches, and description files.
+The Ports Collection is a set of `Makefiles`, patches, and description files.
Each set of these files is used to compile and install an individual application on FreeBSD, and is called a _port_.
-By default, the Ports Collection itself is stored as a subdirectory of [.filename]#/usr/ports#.
+By default, the Ports Collection itself is stored as a subdirectory of `/usr/ports`.
[WARNING]
====
@@ -647,17 +653,17 @@ Inside each category are subdirectories for individual applications.
Each application subdirectory contains a set of files that tells FreeBSD how to compile and install that program, called a _ports skeleton_.
Each port skeleton includes these files and directories:
-* [.filename]#Makefile#: contains statements that specify how the application should be compiled and where its components should be installed.
-* [.filename]#distinfo#: contains the names and checksums of the files that must be downloaded to build the port.
-* [.filename]#files/#: this directory contains any patches needed for the program to compile and install on FreeBSD. This directory may also contain other files used to build the port.
-* [.filename]#pkg-descr#: provides a more detailed description of the program.
-* [.filename]#pkg-plist#: a list of all the files that will be installed by the port. It also tells the ports system which files to remove upon deinstallation.
+* *Makefile*: contains statements that specify how the application should be compiled and where its components should be installed.
+* *distinfo*: contains the names and checksums of the files that must be downloaded to build the port.
+* *files/*: this directory contains any patches needed for the program to compile and install on FreeBSD. This directory may also contain other files used to build the port.
+* *pkg-descr*: provides a more detailed description of the program.
+* *pkg-plist*: a list of all the files that will be installed by the port. It also tells the ports system which files to remove upon deinstallation.
-Some ports include [.filename]#pkg-message# or other files to handle special situations.
+Some ports include `pkg-message` or other files to handle special situations.
For more details on these files, and on ports in general, refer to the extref:{porters-handbook}[FreeBSD Porter's Handbook].
-The port does not include the actual source code, also known as a [.filename]#distfile#.
-The extract portion of building a port will automatically save the downloaded source to [.filename]#/usr/ports/distfiles#.
+The port does not include the actual source code, also known as a `distfile`.
+The extract portion of building a port will automatically save the downloaded source to `/usr/ports/distfiles`.
[[ports-using-installation-methods]]
=== Installing the Ports Collection
@@ -665,53 +671,6 @@ The extract portion of building a port will automatically save the downloaded so
Before an application can be compiled using a port, the Ports Collection must first be installed.
If it was not installed during the installation of FreeBSD, use one of the following methods to install it:
-[[ports-using-portsnap-method]]
-[.procedure]
-****
-*Procedure: Portsnap Method*
-
-The base system of FreeBSD includes Portsnap.
-This is a fast and user-friendly tool for retrieving the Ports Collection and is the recommended choice for most users not running FreeBSD-CURRENT.
-This utility connects to a FreeBSD site, verifies the secure key, and downloads a new copy of the Ports Collection.
-The key is used to verify the integrity of all downloaded files.
-
-Note that Portsnap updates are generated from a snapshot of the main
-branch of the Ports Collection and cannot be configured to use a
-different branch (for example, `quarterly`).
-If it is necessary to use a different branch of the Ports Collection
-(for instance as referenced earlier in conjunction with binary
-packages), then the <<ports-using-git-method,Git method>> must be used.
-
-. To download a compressed snapshot of the Ports Collection into [.filename]#/var/db/portsnap#:
-+
-[source,shell]
-....
-# portsnap fetch
-....
-+
-. When running Portsnap for the first time, extract the snapshot into [.filename]#/usr/ports#:
-+
-[source,shell]
-....
-# portsnap extract
-....
-+
-. After the first use of Portsnap has been completed as shown above, [.filename]#/usr/ports# can be updated as needed by running:
-+
-[source,shell]
-....
-# portsnap fetch
-# portsnap update
-....
-+
-When using `fetch`, the `extract` or the `update` operation may be run consecutively, like so:
-+
-[source,shell]
-....
-# portsnap fetch update
-....
-****
-
[[ports-using-git-method]]
[.procedure]
****
@@ -747,21 +706,21 @@ If the ports tree is not available, or pkg is being used to manage packages, Git
+
[source,shell]
....
-# git clone https://git.FreeBSD.org/ports.git -b 2020Q3 /usr/ports
+# git clone https://git.FreeBSD.org/ports.git -b 2023Q1 /usr/ports
....
+
-. As needed, update [.filename]#/usr/ports# after the initial Git checkout:
+. As needed, update `/usr/ports` after the initial Git checkout:
+
[source,shell]
....
# git -C /usr/ports pull
....
+
-. As needed, switch [.filename]#/usr/ports# to a different quarterly branch:
+. As needed, switch `/usr/ports` to a different quarterly branch:
+
[source,shell]
....
-# git -C /usr/ports switch 2020Q4
+# git -C /usr/ports switch 2023Q1
....
****
@@ -775,7 +734,7 @@ The detailed description of available `make` targets and environment variables i
Before compiling any port, be sure to update the Ports Collection as described in the previous section.
Since the installation of any third-party software can introduce security vulnerabilities, it is recommended to first check https://vuxml.freebsd.org/[] for known security issues related to the port.
-Alternately, run `pkg audit -F` before installing a new port.
+Alternatively, run `pkg audit -F` before installing a new port.
This command can be configured to automatically perform a security audit and an update of the vulnerability database during the daily security system check. For more information, refer to man:pkg-audit[8] and man:periodic[8].
====
@@ -847,7 +806,7 @@ To save this extra step, instead use `make install clean` when compiling the por
==== Customizing Ports Installation
Some ports provide build options which can be used to enable or disable application components, provide security options, or allow for other customizations.
-Examples include package:www/firefox[], package:security/gpgme[], and package:mail/sylpheed-claws[].
+Examples include package:www/firefox[] and package:security/gpgme[].
If the port depends upon other ports which have configurable options,
it may pause several times for user interaction as the default behavior is to prompt the user to select options from a menu.
To avoid this and do all of the configuration in one batch, run `make config-recursive` within the port skeleton.
@@ -870,12 +829,12 @@ The ports system uses man:fetch[1] to download the source files, which supports
The `FTP_PASSIVE_MODE`, `FTP_PROXY`, and `FTP_PASSWORD` variables may need to be set if the FreeBSD system is behind a firewall or FTP/HTTP proxy.
See man:fetch[3] for the complete list of supported variables.
-For users who cannot be connected to the Internet all the time, `make fetch` can be run within [.filename]#/usr/ports#,
-to fetch all distfiles, or within a category, such as [.filename]#/usr/ports/net#, or within the specific port skeleton.
+For users who cannot be connected to the Internet all the time, `make fetch` can be run within `/usr/ports`,
+to fetch all distfiles, or within a category, such as `/usr/ports/net`, or within the specific port skeleton.
Note that if a port has any dependencies, running this command in a category or ports skeleton will _not_ fetch the distfiles of ports from another category.
Instead, use `make fetch-recursive` to also fetch the distfiles for all the dependencies of a port.
-In rare cases, such as when an organization has a local distfiles repository, the `MASTER_SITES` variable can be used to override the download locations specified in the [.filename]#Makefile#.
+In rare cases, such as when an organization has a local distfiles repository, the `MASTER_SITES` variable can be used to override the download locations specified in the `Makefile`.
When using, specify the alternate location:
[source,shell]
@@ -892,14 +851,14 @@ The `WRKDIRPREFIX` and `PREFIX` variables can override the default working and t
# make WRKDIRPREFIX=/usr/home/example/ports install
....
-will compile the port in [.filename]#/usr/home/example/ports# and install everything under [.filename]#/usr/local#.
+will compile the port in `/usr/home/example/ports` and install everything under `/usr/local`.
[source,shell]
....
# make PREFIX=/usr/home/example/local install
....
-will compile the port in [.filename]#/usr/ports# and install it in [.filename]#/usr/home/example/local#. And:
+will compile the port in `/usr/ports` and install it in `/usr/home/example/local`. And:
[source,shell]
....
@@ -917,7 +876,7 @@ Refer to the manual page for your shell for instructions on how to set an enviro
Installed ports can be uninstalled using `pkg delete`.
Examples for using this command can be found in the man:pkg-delete[8] manual page.
-Alternately, `make deinstall` can be run in the port's directory:
+Alternately, `make deinstall` can be run in the port\'s directory:
[source,shell]
....
@@ -944,24 +903,17 @@ Over time, newer versions of software become available in the Ports Collection.
This section describes how to determine which software can be upgraded and how to perform the upgrade.
To determine if newer versions of installed ports are available, ensure that the latest version of the ports tree is installed,
-using the updating command described in either <<ports-using-portsnap-method, “Portsnap Method”>> or <<ports-using-git-method, “Git Method”>>.
-On FreeBSD 10 and later, or if the system has been converted to pkg, the following command will list the installed ports which are out of date:
+using the updating command described in <<ports-using-git-method, "Git Method">>.
+The following command will list the installed ports which are out of date:
[source,shell]
....
# pkg version -l "<"
....
-For FreeBSD 9._X_ and lower, the following command will list the installed ports that are out of date:
-
-[source,shell]
-....
-# pkg_version -l "<"
-....
-
[IMPORTANT]
====
-Before attempting an upgrade, read [.filename]#/usr/ports/UPDATING# from the top of the file to the date closest to the last time ports were upgraded or the system was installed.
+Before attempting an upgrade, read `/usr/ports/UPDATING` from the top of the file to the date closest to the last time ports were upgraded or the system was installed.
This file describes various issues and additional steps users may encounter and need to perform when updating a port, including such things as file format changes, changes in locations of configuration files, or any incompatibilities with previous versions.
Make note of any instructions which match any of the ports that need upgrading and follow these instructions when performing the upgrade.
====
@@ -1060,7 +1012,7 @@ To use this function, specify the location of the port in the Ports Collection:
# portmaster shells/bash
....
-More information about package:ports-mgmt/portmaster[] may be found in its [.filename]#pkg-descr#.
+More information about package:ports-mgmt/portmaster[] may be found in its `pkg-descr`.
[[portupgrade]]
==== Upgrading Ports Using Portupgrade
@@ -1107,22 +1059,22 @@ This last set of options tells Portupgrade to abort if no packages are available
To just fetch the port distfiles, or packages, if `-P` is specified, without building or installing anything, use `-F`.
For further information on all of the available switches, refer to the manual page for `portupgrade`.
-More information about package:ports-mgmt/portupgrade[] may be found in its [.filename]#pkg-descr#.
+More information about package:ports-mgmt/portupgrade[] may be found in its `pkg-descr`.
[[ports-disk-space]]
=== Ports and Disk Space
Using the Ports Collection will use up disk space over time.
-After building and installing a port, running `make clean` within the ports skeleton will clean up the temporary [.filename]#work# directory.
+After building and installing a port, running `make clean` within the ports skeleton will clean up the temporary `work` directory.
If Portmaster is used to install a port, it will automatically remove this directory unless `-K` is specified.
-If Portupgrade is installed, this command will remove all [.filename]#work# directories found within the local copy of the Ports Collection:
+If Portupgrade is installed, this command will remove all `work` directories found within the local copy of the Ports Collection:
[source,shell]
....
# portsclean -C
....
-In addition, outdated source distribution files accumulate in [.filename]#/usr/ports/distfiles# over time.
+In addition, outdated source distribution files accumulate in `/usr/ports/distfiles` over time.
To use Portupgrade to delete all the distfiles that are no longer referenced by any ports:
[source,shell]
@@ -1149,23 +1101,23 @@ By default, this command is interactive and prompts the user to confirm if a dis
In addition to these commands, package:ports-mgmt/pkg_cutleaves[] automates the task of removing installed ports that are no longer needed.
[[ports-poudriere]]
-== Building Packages with Poudriere
+== Building Packages with poudriere
-Poudriere is a `BSD`-licensed utility for creating and testing FreeBSD packages.
+poudriere is a `BSD`-licensed utility for creating and testing FreeBSD packages.
It uses FreeBSD jails to set up isolated compilation environments.
These jails can be used to build packages for versions of FreeBSD that are different from the system on which it is installed, and also to build packages for i386 if the host is an amd64 system.
Once the packages are built, they are in a layout identical to the official mirrors.
These packages are usable by man:pkg[8] and other package management tools.
-Poudriere is installed using the package:ports-mgmt/poudriere[] package or port.
-The installation includes a sample configuration file [.filename]#/usr/local/etc/poudriere.conf.sample#.
-Copy this file to [.filename]#/usr/local/etc/poudriere.conf#.
+poudriere is installed using the package:ports-mgmt/poudriere[] package or port.
+The installation includes a sample configuration file `/usr/local/etc/poudriere.conf.sample`.
+Copy this file to `/usr/local/etc/poudriere.conf`.
Edit the copied file to suit the local configuration.
While `ZFS` is not required on the system running poudriere, it is beneficial.
-When `ZFS` is used, `ZPOOL` must be specified in [.filename]#/usr/local/etc/poudriere.conf# and `FREEBSD_HOST` should be set to a nearby mirror.
+When `ZFS` is used, `ZPOOL` must be specified in `/usr/local/etc/poudriere.conf` and `FREEBSD_HOST` should be set to a nearby mirror.
Defining `CCACHE_DIR` enables the use of package:devel/ccache[] to cache compilation and reduce build times for frequently-compiled code.
-It may be convenient to put poudriere datasets in an isolated tree mounted at [.filename]#/poudriere#.
+It may be convenient to put poudriere datasets in an isolated tree mounted at `/poudriere`.
Defaults for the other configuration values are adequate.
The number of processor cores detected is used to define how many builds will run in parallel.
@@ -1182,25 +1134,25 @@ The default is the architecture shown by `uname`.
[source,shell]
....
-# poudriere jail -c -j 11amd64 -v 11.4-RELEASE
-[00:00:00] Creating 11amd64 fs at /poudriere/jails/11amd64... done
-[00:00:00] Using pre-distributed MANIFEST for FreeBSD 11.4-RELEASE amd64
-[00:00:00] Fetching base for FreeBSD 11.4-RELEASE amd64
-/poudriere/jails/11amd64/fromftp/base.txz 125 MB 4110 kBps 31s
+# poudriere jail -c -j 13amd64 -v 13.1-RELEASE
+[00:00:00] Creating 13amd64 fs at /poudriere/jails/13amd64... done
+[00:00:00] Using pre-distributed MANIFEST for FreeBSD 13.1-RELEASE amd64
+[00:00:00] Fetching base for FreeBSD 13.1-RELEASE amd64
+/poudriere/jails/13amd64/fromftp/base.txz 125 MB 4110 kBps 31s
[00:00:33] Extracting base... done
-[00:00:54] Fetching src for FreeBSD 11.4-RELEASE amd64
-/poudriere/jails/11amd64/fromftp/src.txz 154 MB 4178 kBps 38s
+[00:00:54] Fetching src for FreeBSD 13.1-RELEASE amd64
+/poudriere/jails/13amd64/fromftp/src.txz 154 MB 4178 kBps 38s
[00:01:33] Extracting src... done
-[00:02:31] Fetching lib32 for FreeBSD 11.4-RELEASE amd64
-/poudriere/jails/11amd64/fromftp/lib32.txz 24 MB 3969 kBps 06s
+[00:02:31] Fetching lib32 for FreeBSD 13.1-RELEASE amd64
+/poudriere/jails/13amd64/fromftp/lib32.txz 24 MB 3969 kBps 06s
[00:02:38] Extracting lib32... done
[00:02:42] Cleaning up... done
[00:02:42] Recording filesystem state for clean... done
[00:02:42] Upgrading using ftp
-/etc/resolv.conf -> /poudriere/jails/11amd64/etc/resolv.conf
+/etc/resolv.conf -> /poudriere/jails/13amd64/etc/resolv.conf
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching public key from update4.freebsd.org... done.
-Fetching metadata signature for 11.4-RELEASE from update4.freebsd.org... done.
+Fetching metadata signature for 13.1-RELEASE from update4.freebsd.org... done.
Fetching metadata index... done.
Fetching 2 metadata files... done.
Inspecting system... done.
@@ -1209,7 +1161,7 @@ Fetching 124 patches.....10....20....30....40....50....60....70....80....90....1
Applying patches... done.
Fetching 6 files... done.
The following files will be added as part of updating to
-11.4-RELEASE-p1:
+13.1-RELEASE-p1:
/usr/src/contrib/unbound/.github
/usr/src/contrib/unbound/.github/FUNDING.yml
/usr/src/contrib/unbound/contrib/drop2rpz
@@ -1218,14 +1170,14 @@ The following files will be added as part of updating to
/usr/src/contrib/unbound/services/rpz.h
/usr/src/lib/libc/tests/gen/spawnp_enoexec.sh
The following files will be updated as part of updating to
-11.4-RELEASE-p1:
+13.1-RELEASE-p1:
[…]
Installing updates...Scanning //usr/share/certs/blacklisted for certificates...
Scanning //usr/share/certs/trusted for certificates...
done.
-11.4-RELEASE-p1
+13.1-RELEASE-p1
[00:04:06] Recording filesystem state for clean... done
-[00:04:07] Jail 11amd64 11.4-RELEASE-p1 amd64 is ready to be used
+[00:04:07] Jail 13amd64 13.1-RELEASE-p1 amd64 is ready to be used
....
[source,shell]
@@ -1239,16 +1191,17 @@ On a single computer, poudriere can build ports with multiple configurations, in
Custom configurations for these combinations are called _sets_.
See the CUSTOMIZATION section of man:poudriere[8] for details after package:ports-mgmt/poudriere[] or package:ports-mgmt/poudriere-devel[] is installed.
-The basic configuration shown here puts a single jail-, port-, and set-specific [.filename]#make.conf# in [.filename]#/usr/local/etc/poudriere.d#.
-The filename in this example is created by combining the jail name, port name, and set name: [.filename]#11amd64-local-workstation-make.conf#.
-The system [.filename]#make.conf# and this new file are combined at build time to create the [.filename]#make.conf# used by the build jail.
+The basic configuration shown here puts a single jail-, port-, and set-specific `make.conf` in `/usr/local/etc/poudriere.d`.
+The filename in this example is created by combining the jail name, port name, and set name: `13amd64-local-workstation-make.conf`.
+The system `make.conf` and this new file are combined at build time to create the `make.conf` used by the build jail.
-Packages to be built are entered in [.filename]#11amd64-local-workstation-pkglist#:
+Packages to be built are entered in `13amd64-local-workstation-pkglist` (ports with extref:{porters-handbook}flavors[FLAVORS] can be defined with @FLAVOR):
[.programlisting]
....
editors/emacs
devel/git
+devel/php-composer2@php82
ports-mgmt/pkg
...
....
@@ -1257,28 +1210,28 @@ Options and dependencies for the specified ports are configured:
[source,shell]
....
-# poudriere options -j 11amd64 -p local -z workstation -f 11amd64-local-workstation-pkglist
+# poudriere options -j 13amd64 -p local -z workstation -f 13amd64-local-workstation-pkglist
....
Finally, packages are built and a package repository is created:
[source,shell]
....
-# poudriere bulk -j 11amd64 -p local -z workstation -f 11amd64-local-workstation-pkglist
+# poudriere bulk -j 13amd64 -p local -z workstation -f 13amd64-local-workstation-pkglist
....
While running, pressing kbd:[Ctrl+t] displays the current state of the build.
-Poudriere also builds files in [.filename]#/poudriere/logs/bulk/jailname# that can be used with a web server to display build information.
+poudriere also builds files in `/poudriere/logs/bulk/jailname` that can be used with a web server to display build information.
After completion, the new packages are now available for installation from the poudriere repository.
For more information on using poudriere, see man:poudriere[8] and the main web site, https://github.com/freebsd/poudriere/wiki[].
-=== Configuring pkg Clients to Use a Poudriere Repository
+=== Configuring pkg Clients to Use a poudriere Repository
While it is possible to use both a custom repository along side of the official repository, sometimes it is useful to disable the official repository.
This is done by creating a configuration file that overrides and disables the official configuration file.
-Create [.filename]#/usr/local/etc/pkg/repos/FreeBSD.conf# that contains the following:
+Create `/usr/local/etc/pkg/repos/FreeBSD.conf` that contains the following:
[.programlisting]
....
@@ -1288,15 +1241,25 @@ FreeBSD: {
....
Usually it is easiest to serve a poudriere repository to the client machines via HTTP.
-Set up a webserver to serve up the package directory, for instance: [.filename]#/usr/local/poudriere/data/packages/11amd64#, where [.filename]#11amd64# is the name of the build.
+Set up a webserver to serve up the package directory, for instance: `/usr/local/poudriere/data/packages/13amd64`, where `13amd64` is the name of the build.
+
+If the URL to the package repository is: `http://pkg.example.com/13amd64`,
+then the repository configuration file in `/usr/local/etc/pkg/repos/custom.conf` would look like:
+
+[.programlisting]
+....
+custom: {
+ url: "http://pkg.example.com/13amd64",
+ enabled: yes,
+}
+....
-If the URL to the package repository is: `http://pkg.example.com/11amd64`,
-then the repository configuration file in [.filename]#/usr/local/etc/pkg/repos/custom.conf# would look like:
+If exposing the package repository to the internet is not desired, the `file://` protocol can be used to point to the repository directly:
[.programlisting]
....
custom: {
- url: "http://pkg.example.com/11amd64",
+ url: "file:///usr/local/poudriere/data/packages/11amd64",
enabled: yes,
}
....
@@ -1307,9 +1270,9 @@ custom: {
Regardless of whether the software was installed from a binary package or port, most third-party applications require some level of configuration after installation.
The following commands and locations can be used to help determine what was installed with the application.
-* Most applications install at least one default configuration file in [.filename]#/usr/local/etc#. In cases where an application has a large number of configuration files, a subdirectory will be created to hold them. Often, sample configuration files are installed which end with a suffix such as [.filename]#.sample#. The configuration files should be reviewed and possibly edited to meet the system's needs. To edit a sample file, first copy it without the [.filename]#.sample# extension.
-* Applications which provide documentation will install it into [.filename]#/usr/local/share/doc# and many applications also install manual pages. This documentation should be consulted before continuing.
-* Some applications run services which must be added to [.filename]#/etc/rc.conf# before starting the application. These applications usually install a startup script in [.filename]#/usr/local/etc/rc.d#. See crossref:config[configtuning-starting-services,Starting Services] for more information.
+* Most applications install at least one default configuration file in `/usr/local/etc`. In cases where an application has a large number of configuration files, a subdirectory will be created to hold them. Often, sample configuration files are installed which end with a suffix such as `.sample`. The configuration files should be reviewed and possibly edited to meet the system's needs. To edit a sample file, first copy it without the `.sample` extension.
+* Applications which provide documentation will install it into `/usr/local/share/doc` and many applications also install manual pages. This documentation should be consulted before continuing.
+* Some applications run services which must be added to `/etc/rc.conf` before starting the application. These applications usually install a startup script in `/usr/local/etc/rc.d`. See crossref:config[configtuning-starting-services,Starting Services] for more information.
+
[NOTE]
====
@@ -1326,7 +1289,7 @@ This decision is left to the individual system administrator.
When a port does not build or install, try the following:
. Search to see if there is a fix pending for the port in the link:https://www.FreeBSD.org/support/[Problem Report database]. If so, implementing the proposed fix may fix the issue.
-. Ask the maintainer of the port for help. Type `make maintainer` in the ports skeleton or read the port's [.filename]#Makefile# to find the maintainer's email address. Remember to include the output leading up to the error in the email to the maintainer.
+. Ask the maintainer of the port for help. Type `make maintainer` in the ports skeleton or read the port's `Makefile` to find the maintainer's email address. Remember to include the output leading up to the error in the email to the maintainer.
+
[NOTE]
====
diff --git a/documentation/content/en/books/handbook/ports/_index.po b/documentation/content/en/books/handbook/ports/_index.po
new file mode 100644
index 0000000000..5045dee568
--- /dev/null
+++ b/documentation/content/en/books/handbook/ports/_index.po
@@ -0,0 +1,2503 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/ports/_index.adoc:1
+#, no-wrap
+msgid "FreeBSD provides two complementary technologies for installing third-party software: the FreeBSD Ports Collection, for installing from source, and packages, for installing from pre-built binaries"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/ports/_index.adoc:1
+#, no-wrap
+msgid "Part I. Getting Started"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/ports/_index.adoc:1
+#, no-wrap
+msgid "Chapter 4. Installing Applications: Packages and Ports"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/ports/_index.adoc:14
+#, no-wrap
+msgid "Installing Applications: Packages and Ports"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/ports/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:58
+msgid ""
+"FreeBSD is bundled with a rich collection of system tools as part of the "
+"base system. In addition, FreeBSD provides two complementary technologies "
+"for installing third-party software: the FreeBSD Ports Collection, for "
+"installing from source, and packages, for installing from pre-built "
+"binaries. Either method may be used to install software from local media or "
+"from the network."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:60
+msgid "After reading this chapter, you will know:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:62
+msgid "The difference between binary packages and ports."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:63
+msgid "How to find third-party software that has been ported to FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:64
+msgid "How to manage binary packages using pkg."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:65
+msgid ""
+"How to build third-party software from source using the Ports Collection."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:66
+msgid ""
+"How to find the files installed with the application for post-installation "
+"configuration."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:67
+msgid "What to do if a software installation fails."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/ports/_index.adoc:69
+#, no-wrap
+msgid "Overview of Software Installation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:73
+msgid ""
+"A FreeBSD _port_ is a collection of files designed to automate the process "
+"of compiling an application from source code. The files that comprise a "
+"port contain all the necessary information to automatically download, "
+"extract, patch, compile, and install the application."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:75
+msgid ""
+"If the software has not already been adapted and tested on FreeBSD, the "
+"source code might need editing in order for it to install and run properly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:78
+msgid ""
+"However, over link:https://www.FreeBSD.org/ports/[{numports}] third-party "
+"applications have already been ported to FreeBSD. When feasible, these "
+"applications are made available for download as pre-compiled _packages_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:80
+msgid ""
+"Packages can be manipulated with the FreeBSD package management commands."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:83
+msgid ""
+"Both packages and ports understand dependencies. If a package or port is "
+"used to install an application and a dependent library is not already "
+"installed, the library will automatically be installed first."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:86
+msgid ""
+"A FreeBSD package contains pre-compiled copies of all the commands for an "
+"application, as well as any configuration files and documentation. A "
+"package can be manipulated with the man:pkg[8] commands, such as `pkg "
+"install`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:89
+msgid ""
+"While the two technologies are similar, packages and ports each have their "
+"own strengths. Select the technology that meets your requirements for "
+"installing a particular application."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/ports/_index.adoc:90
+#, no-wrap
+msgid "Package Benefits"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:92
+msgid ""
+"A compressed package tarball is typically smaller than the compressed "
+"tarball containing the source code for the application."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:93
+msgid ""
+"Packages do not require compilation time. For large applications, such as "
+"Firefox, KDE Plasma, or GNOME, this can be important on a slow system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:94
+msgid ""
+"Packages do not require any understanding of the process involved in "
+"compiling software on FreeBSD."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/ports/_index.adoc:95
+#, no-wrap
+msgid "Port Benefits"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:97
+msgid ""
+"Packages are normally compiled with conservative options because they have "
+"to run on the maximum number of systems. By compiling from the port, one can "
+"change the compilation options."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:98
+msgid ""
+"Some applications have compile-time options relating to which features are "
+"installed. For example, NGINX(R) can be configured with a wide variety of "
+"different built-in options."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:100
+msgid ""
+"In some cases, multiple packages will exist for the same application to "
+"specify certain settings. For example, NGINX(R) is available as a `nginx` "
+"package and a `nginx-lite` package, depending on whether or not Xorg is "
+"installed. Creating multiple packages rapidly becomes impossible if an "
+"application has more than one or two different compile-time options."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:101
+msgid ""
+"The licensing conditions of some software forbid binary distribution. Such "
+"software must be distributed as source code which must be compiled by the "
+"end-user."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:102
+msgid ""
+"Some people do not trust binary distributions or prefer to read through "
+"source code in order to look for potential problems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:103
+msgid "Source code is needed in order to apply custom patches."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:105
+msgid ""
+"To keep track of updated ports, subscribe to the {freebsd-ports} and the "
+"{freebsd-ports-bugs}."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:109
+msgid ""
+"Before installing an application, check https://vuxml.freebsd.org/[] for "
+"related security issues."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:111
+msgid ""
+"To audit installed packages against known vulnerabilities, run `pkg audit -"
+"F`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:114
+msgid ""
+"The remainder of this chapter explains how to use packages and ports to "
+"install and manage third-party software on FreeBSD."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/ports/_index.adoc:116
+#, no-wrap
+msgid "Finding Software"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:120
+msgid ""
+"FreeBSD's list of available applications is growing all the time. There are "
+"a number of ways to find software to install:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:122
+msgid ""
+"The FreeBSD web site maintains an up-to-date searchable list of all the "
+"available applications, at link:https://www.FreeBSD.org/ports/[Ports "
+"Portal]. The ports can be searched by application name or by software "
+"category."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:123
+msgid ""
+"Dan Langille maintains https://www.freshports.org/[FreshPorts] which "
+"provides a comprehensive search utility and also tracks changes to the "
+"applications in the Ports Collection. Registered users can create a "
+"customized watch list in order to receive an automated email when their "
+"watched ports are updated."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:124
+msgid ""
+"If finding a particular application becomes challenging, try searching a "
+"site like https://sourceforge.net/[SourceForge] or https://github.com/"
+"[GitHub] then check back at the link:https://www.FreeBSD.org/ports/[Ports "
+"Portal] to see if the application has been ported."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:125
+msgid ""
+"Search the binary package repository for an application using the man:pkg[8] "
+"command"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/ports/_index.adoc:127
+#, no-wrap
+msgid "Using pkg for Binary Package Management"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:130
+msgid ""
+"man:pkg[8] provides an interface for manipulating\tpackages: registering, "
+"adding, removing and upgrading packages."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:132
+msgid ""
+"For sites wishing to only use prebuilt binary packages from the FreeBSD "
+"mirrors, managing packages with man:pkg[8] can be sufficient."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:134
+msgid ""
+"However, for those sites building from source a separate <<ports-upgrading-"
+"tools, port management tool>> will be needed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:137
+msgid ""
+"Since man:pkg[8] only works with binary packages, it is not a replacement "
+"for such tools. Those tools can be used to install software from both "
+"binary packages and the Ports Collection, while man:pkg[8] installs only "
+"binary packages."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ports/_index.adoc:139
+#, no-wrap
+msgid "Getting Started with pkg"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:143
+msgid ""
+"All supported versions of FreeBSD now contain `/usr/sbin/pkg` a.k.a man:"
+"pkg[7]. This is a small placeholder that has just the minimum functionality "
+"required to install the real man:pkg[8]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:147
+msgid ""
+"An Internet working connection is required for the bootstrap process to "
+"succeed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:150
+msgid "Run man:pkg[8] command line:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:154
+#, no-wrap
+msgid "# pkg\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:157
+#: documentation/content/en/books/handbook/ports/_index.adoc:242
+#: documentation/content/en/books/handbook/ports/_index.adoc:274
+#: documentation/content/en/books/handbook/ports/_index.adoc:309
+#: documentation/content/en/books/handbook/ports/_index.adoc:336
+#: documentation/content/en/books/handbook/ports/_index.adoc:381
+#: documentation/content/en/books/handbook/ports/_index.adoc:436
+#: documentation/content/en/books/handbook/ports/_index.adoc:463
+#: documentation/content/en/books/handbook/ports/_index.adoc:493
+#: documentation/content/en/books/handbook/ports/_index.adoc:518
+#: documentation/content/en/books/handbook/ports/_index.adoc:536
+msgid "The output should be similar to the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:162
+#, no-wrap
+msgid ""
+"The package management tool is not yet installed on your system.\n"
+"Do you want to fetch and install it now? [y/N]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:165
+msgid ""
+"man:pkg[7] will intercept the command, and if you confirm that is your "
+"intention, download the man:pkg[8] tarball, install man:pkg[8] from it, "
+"bootstrap the local package database and then proceed to run the command you "
+"originally requested."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:167
+msgid ""
+"More recent versions of man:pkg[7] understand `pkg -N` as a test to see if "
+"man:pkg[8] is installed without triggering the installation, and conversely, "
+"pkg bootstrap[-f] to install man:pkg[8] (or force it to be reinstalled) "
+"without performing any other actions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:170
+msgid ""
+"Usage information for pkg is available in the man:pkg[8] manual page or by "
+"running `pkg` without additional arguments. Additional pkg configuration "
+"options are described in man:pkg.conf[5]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:172
+msgid ""
+"Each pkg command argument is documented in a command-specific manual page."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:174
+msgid ""
+"To read the manual page for `pkg install`, for example, run this command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:178
+#, no-wrap
+msgid "# pkg help install\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:183
+msgid ""
+"The rest of this section demonstrates common binary package management tasks "
+"which can be performed using man:pkg[8]. Each demonstrated command provides "
+"many switches to customize its use. Refer to a command's help or man page "
+"for details and more examples."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ports/_index.adoc:185
+#, no-wrap
+msgid "Quarterly and Latest Ports Branches"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:194
+msgid ""
+"The `Quarterly` branch provides users with a more predictable and stable "
+"experience for port and package installation and upgrades. This is done "
+"essentially by only allowing non-feature updates. Quarterly branches aim to "
+"receive security fixes (that may be version updates, or backports of "
+"commits), bug fixes and ports compliance or framework changes. The "
+"Quarterly branch is cut from HEAD at the beginning of every (yearly) quarter "
+"in January, April, July, and October. Branches are named according to the "
+"year (YYYY) and quarter (Q1-4) they are created in. For example, the "
+"quarterly branch created in January 2023, is named 2023Q1. And the `Latest` "
+"branch provides the latest versions of the packages to the users."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:196
+msgid ""
+"To switch man:pkg[8] from Quarterly to Latest run the following commands:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:201
+#, no-wrap
+msgid ""
+"# mkdir -p /usr/local/etc/pkg/repos\n"
+"# echo 'FreeBSD: { url: \"pkg+http://pkg.FreeBSD.org/${ABI}/latest\" }' > /usr/local/etc/pkg/repos/FreeBSD.conf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:204
+msgid ""
+"Then run this command to update the local package repositories catalogues "
+"for the Latest branch:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:208
+#, no-wrap
+msgid "# pkg update -f\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ports/_index.adoc:211
+#, no-wrap
+msgid "Configure pkg"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:215
+msgid ""
+"man:pkg.conf[5] is the system-wide configuration file used by the man:pkg[8] "
+"tools. The default location of this file is `/usr/local/etc/pkg.conf`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:220
+msgid ""
+"FreeBSD does not need to have a `pkg.conf` file. Many installations will "
+"work well with no `pkg.conf` at all or with an empty `pkg.conf` (other than "
+"comment lines)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:223
+msgid "Lines in the file beginning with a \"#\" are\tcomments and are ignored."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:226
+msgid ""
+"The file is in UCL format. For more information on the syntax of man:"
+"libucl[3], please visit the link:https://github.com/vstakhov/libucl[official "
+"UCL website]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:228
+msgid ""
+"The following types of options are recognized - boolean, string and list "
+"options."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:230
+msgid ""
+"A boolean option is marked as enabled if one of the following values is "
+"specified in the configuration file - YES, TRUE and ON."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ports/_index.adoc:232
+#, no-wrap
+msgid "Searching Packages"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:235
+msgid "To search a package man:pkg-search[8] can be used:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:239
+#, no-wrap
+msgid "# pkg search nginx\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:259
+#, no-wrap
+msgid ""
+"modsecurity3-nginx-1.0.3 Instruction detection and prevention engine / nginx Wrapper\n"
+"nginx-1.22.1_2,3 Robust and small WWW server\n"
+"nginx-devel-1.23.2_4 Robust and small WWW server\n"
+"nginx-full-1.22.1_1,3 Robust and small WWW server (full package)\n"
+"nginx-lite-1.22.1,3 Robust and small WWW server (lite package)\n"
+"nginx-naxsi-1.22.1,3 Robust and small WWW server (plus NAXSI)\n"
+"nginx-prometheus-exporter-0.10.0_7 Prometheus exporter for NGINX and NGINX Plus stats\n"
+"nginx-ultimate-bad-bot-blocker-4.2020.03.2005_1 Nginx bad bot and other things blocker\n"
+"nginx-vts-exporter-0.10.7_7 Server that scraps NGINX vts stats and export them via HTTP\n"
+"p5-Nginx-ReadBody-0.07_1 Nginx embeded perl module to read and evaluate a request body\n"
+"p5-Nginx-Simple-0.07_1 Perl 5 module for easy to use interface for Nginx Perl Module\n"
+"p5-Test-Nginx-0.30 Testing modules for Nginx C module development\n"
+"py39-certbot-nginx-2.0.0 NGINX plugin for Certbot\n"
+"rubygem-passenger-nginx-6.0.15 Modules for running Ruby on Rails and Rack applications\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ports/_index.adoc:262
+#, no-wrap
+msgid "Installing and Fetching Packages"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:267
+msgid ""
+"To install a binary package man:pkg-install[8] can be used. This command "
+"uses repository data to determine which version of the software to install "
+"and if it has any uninstalled dependencies. For example, to install curl:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:271
+#, no-wrap
+msgid "# pkg install curl\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:281
+#, no-wrap
+msgid ""
+"Updating FreeBSD repository catalogue...\n"
+"FreeBSD repository is up to date.\n"
+"All repositories are up to date.\n"
+"The following 9 package(s) will be affected (of 0 checked):\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:292
+#, no-wrap
+msgid ""
+"New packages to be INSTALLED:\n"
+" ca_root_nss: 3.83\n"
+" curl: 7.86.0\n"
+" gettext-runtime: 0.21\n"
+" indexinfo: 0.3.1\n"
+" libidn2: 2.3.3\n"
+" libnghttp2: 1.48.0\n"
+" libpsl: 0.21.1_4\n"
+" libssh2: 1.10.0.3\n"
+" libunistring: 1.0\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:294
+#, no-wrap
+msgid "Number of packages to be installed: 9\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:297
+#, no-wrap
+msgid ""
+"The process will require 11 MiB more space.\n"
+"3 MiB to be downloaded\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:299
+#, no-wrap
+msgid "Proceed with this action? [y/N]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:302
+msgid ""
+"The new package and any additional packages that were installed as "
+"dependencies can be seen in the installed packages list:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:306
+#, no-wrap
+msgid "# pkg info\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:322
+#, no-wrap
+msgid ""
+"ca_root_nss-3.83 Root certificate bundle from the Mozilla Project\n"
+"curl-7.86.0 Command line tool and library for transferring data with URLs\n"
+"gettext-runtime-0.21.1 GNU gettext runtime libraries and programs\n"
+"indexinfo-0.3.1 Utility to regenerate the GNU info page index\n"
+"libidn2-2.3.3 Implementation of IDNA2008 internationalized domain names\n"
+"libnghttp2-1.48.0 HTTP/2.0 C Library\n"
+"libpsl-0.21.1_6 C library to handle the Public Suffix List\n"
+"libssh2-1.10.0.3 Library implementing the SSH2 protocol\n"
+"libunistring-1.0 Unicode string library\n"
+"pkg-1.18.4 Package manager\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:326
+msgid ""
+"To fetch a package and install it later or in another place use man:pkg-"
+"fetch[8]. For example, to download `nginx-lite`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:330
+#, no-wrap
+msgid "# pkg fetch -d -o /usr/home/user/packages/ nginx-lite\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:333
+msgid "`-d`: used to fetch all the dependencies"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:334
+msgid "`-o`: used to specify the download directory"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:343
+#, no-wrap
+msgid ""
+"Updating FreeBSD repository catalogue...\n"
+"FreeBSD repository is up to date.\n"
+"All repositories are up to date.\n"
+"The following packages will be fetched:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:347
+#, no-wrap
+msgid ""
+"New packages to be FETCHED:\n"
+" nginx-lite: 1.22.1,3 (342 KiB: 22.20% of the 2 MiB to download)\n"
+" pcre: 8.45_3 (1 MiB: 77.80% of the 2 MiB to download)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:349
+#, no-wrap
+msgid "Number of packages to be fetched: 2\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:352
+#, no-wrap
+msgid ""
+"The process will require 2 MiB more space.\n"
+"2 MiB to be downloaded.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:354
+#, no-wrap
+msgid "Proceed with fetching packages? [y/N]:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:357
+msgid ""
+"To install the downloaded packages man:pkg-install[8] can be used as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:361
+#, no-wrap
+msgid "# cd /usr/home/user/packages/\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:366
+#, no-wrap
+msgid "# pkg install nginx-lite-1.22.1,3.pkg\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ports/_index.adoc:369
+#, no-wrap
+msgid "Obtaining Information About Installed Packages"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:372
+msgid ""
+"Information about the packages installed on a system can be viewed by "
+"running man:pkg-info[8] which, when run without any switches, will list the "
+"package version for either all installed packages or the specified package."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:374
+msgid "For example, to see which version of pkg is installed, run:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:378
+#, no-wrap
+msgid "# pkg info pkg\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:407
+#, no-wrap
+msgid ""
+"pkg-1.19.0\n"
+"Name : pkg\n"
+"Version : 1.19.0\n"
+"Installed on : Sat Dec 17 11:05:28 2022 CET\n"
+"Origin : ports-mgmt/pkg\n"
+"Architecture : FreeBSD:13:amd64\n"
+"Prefix : /usr/local\n"
+"Categories : ports-mgmt\n"
+"Licenses : BSD2CLAUSE\n"
+"Maintainer : pkg@FreeBSD.org\n"
+"WWW : https://github.com/freebsd/pkg\n"
+"Comment : Package manager\n"
+"Options :\n"
+" DOCS : on\n"
+"Shared Libs provided:\n"
+" libpkg.so.4\n"
+"Annotations :\n"
+" FreeBSD_version: 1301000\n"
+" repo_type : binary\n"
+" repository : FreeBSD\n"
+"Flat size : 33.2MiB\n"
+"Description :\n"
+"Package management tool\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:409
+#, no-wrap
+msgid "WWW: https://github.com/freebsd/pkg\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ports/_index.adoc:412
+#, no-wrap
+msgid "Upgrading Installed Packages"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:415
+msgid ""
+"Installed packages can be upgraded to their latest versions using man:pkg-"
+"upgrade[8]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:419
+#, no-wrap
+msgid "# pkg upgrade\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:422
+msgid ""
+"This command will compare the installed versions with those available in the "
+"repository catalogue and upgrade them from the repository."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ports/_index.adoc:424
+#, no-wrap
+msgid "Auditing Installed Packages"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:429
+msgid ""
+"Software vulnerabilities are regularly discovered in third-party "
+"applications. To address this, pkg includes a built-in auditing mechanism. "
+"To determine if there are any known vulnerabilities for the software "
+"installed on the system, use man:pkg-audit[8]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:433
+#, no-wrap
+msgid "# pkg audit -F\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:448
+#, no-wrap
+msgid ""
+"Fetching vuln.xml.xz: 100% 976 KiB 499.5kB/s 00:02\n"
+"chromium-108.0.5359.98 is vulnerable:\n"
+" chromium -- multiple vulnerabilities\n"
+" CVE: CVE-2022-4440\n"
+" CVE: CVE-2022-4439\n"
+" CVE: CVE-2022-4438\n"
+" CVE: CVE-2022-4437\n"
+" CVE: CVE-2022-4436\n"
+" WWW: https://vuxml.FreeBSD.org/freebsd/83eb9374-7b97-11ed-be8f-3065ec8fd3ec.html\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ports/_index.adoc:451
+#, no-wrap
+msgid "Removing Packages"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:454
+msgid ""
+"Packages that are no longer needed can be removed with man:pkg-delete[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:456
+msgid "For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:460
+#, no-wrap
+msgid "# pkg delete curl\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:468
+#, no-wrap
+msgid ""
+"Checking integrity... done (0 conflicting)\n"
+"Deinstallation has been requested for the following 1 packages (of 0 packages in the universe):\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:471
+#, no-wrap
+msgid ""
+"Installed packages to be REMOVED:\n"
+" curl :7.86.0\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:473
+#: documentation/content/en/books/handbook/ports/_index.adoc:503
+#, no-wrap
+msgid "Number of packages to be removed: 1\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:475
+#, no-wrap
+msgid "The operation will free 4 MiB.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:479
+#, no-wrap
+msgid ""
+"Proceed with deinstallation packages? [y/N]: y\n"
+"[1/1] Deinstalling curl-7.86.0...\n"
+"[1/1] Deleting files for curl-7.86.0: 100%\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ports/_index.adoc:482
+#, no-wrap
+msgid "Automatically Removing Unused Packages"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:486
+msgid ""
+"Removing a package may leave behind dependencies which are no longer "
+"required. Unneeded packages that were installed as dependencies (leaf "
+"packages) can be automatically detected and removed using man:pkg-"
+"autoremove[8]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:490
+#, no-wrap
+msgid "# pkg autoremove\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:498
+#, no-wrap
+msgid ""
+"Checking integrity... done (0 conflicting)\n"
+"Deinstallation has been requested for the following 1 packages:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:501
+#, no-wrap
+msgid ""
+"Installed packages to be REMOVED:\n"
+" ca_root_nss-3.83\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:505
+#, no-wrap
+msgid "The operation will free 723 KiB.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:507
+#, no-wrap
+msgid "Proceed with deinstalling packages? [y/N]:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:511
+msgid ""
+"Packages installed as dependencies are called _automatic_ packages. Non-"
+"automatic packages, i.e the packages that were explicitly installed not as a "
+"dependency to another package, can be listed using:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:515
+#, no-wrap
+msgid "# pkg prime-list\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:524
+#, no-wrap
+msgid ""
+"nginx\n"
+"openvpn\n"
+"sudo\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:529
+msgid ""
+"`pkg prime-list` is an alias command declared in `/usr/local/etc/pkg.conf`. "
+"There are many others that can be used to query the package database of the "
+"system. For instance, command `pkg prime-origins` can be used to get the "
+"origin port directory of the list mentioned above:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:533
+#, no-wrap
+msgid "# pkg prime-origins\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:542
+#, no-wrap
+msgid ""
+"www/nginx\n"
+"security/openvpn\n"
+"security/sudo\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:545
+msgid ""
+"This list can be used to rebuild all packages installed on a system using "
+"build tools such as package:ports-mgmt/poudriere[] or package:ports-mgmt/"
+"synth[]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:547
+msgid "Marking an installed package as automatic can be done using:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:551
+#, no-wrap
+msgid "# pkg set -A 1 devel/cmake\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:554
+msgid ""
+"Once a package is a leaf package and is marked as automatic, it gets "
+"selected by `pkg autoremove`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:556
+msgid "Marking an installed package as _not_ automatic can be done using:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:560
+#, no-wrap
+msgid "# pkg set -A 0 devel/cmake\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ports/_index.adoc:563
+#, no-wrap
+msgid "Removing Stale Packages"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:568
+msgid ""
+"By default, pkg stores binary packages in a cache directory defined by "
+"`PKG_CACHEDIR` in man:pkg.conf[5]. Only copies of the latest installed "
+"packages are kept. Older versions of pkg kept all previous packages. To "
+"remove these outdated binary packages, run:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:572
+#, no-wrap
+msgid "# pkg clean\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:575
+msgid "The entire cache may be cleared by running:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:579
+#, no-wrap
+msgid "# pkg clean -a\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ports/_index.adoc:582
+#, no-wrap
+msgid "Locking and Unlocking Packages"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:588
+msgid ""
+"man:pkg-lock[8] is used to lock packages against reinstallation, "
+"modification or deletion. man:pkg-unlock[8] unlocks the named packages. "
+"Either variant only has an effect on currently installed packages. "
+"Consequently it is impossible to block installation of a new package by "
+"using this mechanism, unless such an installation implies updating a locked "
+"package."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:590
+msgid "For example, to lock `nginx-lite`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:594
+#, no-wrap
+msgid "# pkg lock nginx-lite\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:597
+msgid "And to unlock `nginx-lite`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:601
+#, no-wrap
+msgid "# pkg unlock nginx-lite\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ports/_index.adoc:604
+#, no-wrap
+msgid "Modifying Package Metadata"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:609
+msgid ""
+"Software within the FreeBSD Ports Collection can undergo major version "
+"number changes. To address this, pkg has a built-in command to update "
+"package origins. This can be useful, for example, if package:lang/python3[] "
+"is renamed to package:lang/python311[] so that package:lang/python3[] can "
+"now represent version `3.11`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:611
+msgid "To change the package origin for the above example, run:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:615
+#, no-wrap
+msgid "# pkg set -o lang/python3:lang/python311\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:618
+msgid ""
+"As another example, to update package:lang/ruby31[] to package:lang/"
+"ruby32[], run:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:622
+#, no-wrap
+msgid "# pkg set -o lang/ruby31:lang/ruby32\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:628
+msgid ""
+"When changing package origins, it is important to reinstall packages that "
+"are dependent on the package with the modified origin. To force a "
+"reinstallation of dependent packages, run:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:632
+#, no-wrap
+msgid "# pkg install -Rf lang/ruby32\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/ports/_index.adoc:636
+#, no-wrap
+msgid "Using the Ports Collection"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:640
+msgid ""
+"The Ports Collection is a set of `Makefiles`, patches, and description "
+"files. Each set of these files is used to compile and install an individual "
+"application on FreeBSD, and is called a _port_."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:642
+msgid ""
+"By default, the Ports Collection itself is stored as a subdirectory of `/usr/"
+"ports`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:649
+msgid ""
+"Before installing and using the Ports Collection, please be aware that it is "
+"generally ill-advised to use the Ports Collection in conjunction with the "
+"binary packages provided via pkg to install software. pkg, by default, "
+"tracks quarterly branch-releases of the ports tree and not HEAD. "
+"Dependencies could be different for a port in HEAD compared to its "
+"counterpart in a quarterly branch release and this could result in conflicts "
+"between dependencies installed by pkg and those from the Ports Collection. "
+"If the Ports Collection and pkg must be used in conjunction, then be sure "
+"that your Ports Collection and pkg are on the same branch release of the "
+"ports tree."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:655
+msgid ""
+"The Ports Collection contains directories for software categories. Inside "
+"each category are subdirectories for individual applications. Each "
+"application subdirectory contains a set of files that tells FreeBSD how to "
+"compile and install that program, called a _ports skeleton_. Each port "
+"skeleton includes these files and directories:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:657
+#, no-wrap
+msgid "*Makefile*: contains statements that specify how the application should be compiled and where its components should be installed.\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:658
+#, no-wrap
+msgid "*distinfo*: contains the names and checksums of the files that must be downloaded to build the port.\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:659
+#, no-wrap
+msgid "*files/*: this directory contains any patches needed for the program to compile and install on FreeBSD. This directory may also contain other files used to build the port.\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:660
+#, no-wrap
+msgid "*pkg-descr*: provides a more detailed description of the program.\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:661
+#, no-wrap
+msgid "*pkg-plist*: a list of all the files that will be installed by the port. It also tells the ports system which files to remove upon deinstallation.\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:664
+msgid ""
+"Some ports include `pkg-message` or other files to handle special "
+"situations. For more details on these files, and on ports in general, refer "
+"to the extref:{porters-handbook}[FreeBSD Porter's Handbook]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:667
+msgid ""
+"The port does not include the actual source code, also known as a "
+"`distfile`. The extract portion of building a port will automatically save "
+"the downloaded source to `/usr/ports/distfiles`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ports/_index.adoc:669
+#, no-wrap
+msgid "Installing the Ports Collection"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:673
+msgid ""
+"Before an application can be compiled using a port, the Ports Collection "
+"must first be installed. If it was not installed during the installation of "
+"FreeBSD, use one of the following methods to install it:"
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:678
+#, no-wrap
+msgid "*Procedure: Git Method*\n"
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:682
+msgid ""
+"If more control over the ports tree is needed or if local changes need to be "
+"maintained, or if running FreeBSD-CURRENT, Git can be used to obtain the "
+"Ports Collection. Refer to extref:{committers-guide}[the Git Primer, git-"
+"primer] for a detailed description of Git."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:684
+msgid ""
+"Git must be installed before it can be used to check out the ports tree. If "
+"a copy of the ports tree is already present, install Git like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:689
+#, no-wrap
+msgid ""
+"# cd /usr/ports/devel/git\n"
+"# make install clean\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:692
+msgid ""
+"If the ports tree is not available, or pkg is being used to manage packages, "
+"Git can be installed as a package:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:696
+#, no-wrap
+msgid "# pkg install git\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:699
+msgid "Check out a copy of the HEAD branch of the ports tree:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:703
+#, no-wrap
+msgid "# git clone https://git.FreeBSD.org/ports.git /usr/ports\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:706
+msgid "Or, check out a copy of a quarterly branch:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:710
+#, no-wrap
+msgid "# git clone https://git.FreeBSD.org/ports.git -b 2023Q1 /usr/ports\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:713
+msgid "As needed, update `/usr/ports` after the initial Git checkout:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:717
+#, no-wrap
+msgid "# git -C /usr/ports pull\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:720
+msgid "As needed, switch `/usr/ports` to a different quarterly branch:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:724
+#, no-wrap
+msgid "# git -C /usr/ports switch 2023Q1\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ports/_index.adoc:727
+#, no-wrap
+msgid "Installing Ports"
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:731
+msgid ""
+"This section provides basic instructions on using the Ports Collection to "
+"install or remove software. The detailed description of available `make` "
+"targets and environment variables is available in man:ports[7]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:739
+msgid ""
+"Before compiling any port, be sure to update the Ports Collection as "
+"described in the previous section. Since the installation of any third-"
+"party software can introduce security vulnerabilities, it is recommended to "
+"first check https://vuxml.freebsd.org/[] for known security issues related "
+"to the port. Alternatively, run `pkg audit -F` before installing a new "
+"port. This command can be configured to automatically perform a security "
+"audit and an update of the vulnerability database during the daily security "
+"system check. For more information, refer to man:pkg-audit[8] and man:"
+"periodic[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:743
+msgid ""
+"Using the Ports Collection assumes a working Internet connection. It also "
+"requires superuser privilege."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:746
+msgid ""
+"To compile and install the port, change to the directory of the port to be "
+"installed, then type `make install` at the prompt. Messages will indicate "
+"the progress:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:768
+#, no-wrap
+msgid ""
+"# cd /usr/ports/sysutils/lsof\n"
+"# make install\n"
+">> lsof_4.88D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.\n"
+">> Attempting to fetch from ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/.\n"
+"===> Extracting for lsof-4.88\n"
+"...\n"
+"[extraction output snipped]\n"
+"...\n"
+">> Checksum OK for lsof_4.88D.freebsd.tar.gz.\n"
+"===> Patching for lsof-4.88.d,8\n"
+"===> Applying FreeBSD patches for lsof-4.88.d,8\n"
+"===> Configuring for lsof-4.88.d,8\n"
+"...\n"
+"[configure output snipped]\n"
+"...\n"
+"===> Building for lsof-4.88.d,8\n"
+"...\n"
+"[compilation output snipped]\n"
+"...\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:781
+#, no-wrap
+msgid ""
+"===> Installing for lsof-4.88.d,8\n"
+"...\n"
+"[installation output snipped]\n"
+"...\n"
+"===> Generating temporary packing list\n"
+"===> Compressing manual pages for lsof-4.88.d,8\n"
+"===> Registering installation for lsof-4.88.d,8\n"
+"===> SECURITY NOTE:\n"
+" This port has installed the following binaries which execute with\n"
+" increased privileges.\n"
+"/usr/local/sbin/lsof\n"
+"#\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:785
+msgid ""
+"Since `lsof` is a program that runs with increased privileges, a security "
+"warning is displayed as it is installed. Once the installation is complete, "
+"the prompt will be returned."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:790
+msgid ""
+"Some shells keep a cache of the commands that are available in the "
+"directories listed in the `PATH` environment variable, to speed up lookup "
+"operations for the executable file of these commands. Users of the `tcsh` "
+"shell should type `rehash` so that a newly installed command can be used "
+"without specifying its full path. Use `hash -r` instead for the `sh` "
+"shell. Refer to the documentation for the shell for more information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:793
+msgid ""
+"During installation, a working subdirectory is created which contains all "
+"the temporary files used during compilation. Removing this directory saves "
+"disk space and minimizes the chance of problems later when upgrading to the "
+"newer version of the port:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:799
+#, no-wrap
+msgid ""
+"# make clean\n"
+"===> Cleaning for lsof-88.d,8\n"
+"#\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:804
+msgid ""
+"To save this extra step, instead use `make install clean` when compiling the "
+"port."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/ports/_index.adoc:806
+#, no-wrap
+msgid "Customizing Ports Installation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:814
+msgid ""
+"Some ports provide build options which can be used to enable or disable "
+"application components, provide security options, or allow for other "
+"customizations. Examples include package:www/firefox[] and package:security/"
+"gpgme[]. If the port depends upon other ports which have configurable "
+"options, it may pause several times for user interaction as the default "
+"behavior is to prompt the user to select options from a menu. To avoid this "
+"and do all of the configuration in one batch, run `make config-recursive` "
+"within the port skeleton. Then, run `make install [clean]` to compile and "
+"install the port."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:820
+msgid ""
+"When using `config-recursive`, the list of ports to configure are gathered "
+"by the `all-depends-list` target. It is recommended to run `make config-"
+"recursive` until all dependent ports options have been defined, and ports "
+"options screens no longer appear, to be certain that all dependency options "
+"have been configured."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:827
+msgid ""
+"There are several ways to revisit a port's build options menu in order to "
+"add, remove, or change these options after a port has been built. One "
+"method is to `cd` into the directory containing the port and type `make "
+"config`. Another option is to use `make showconfig`. Another option is to "
+"execute `make rmconfig` which will remove all selected options and allow you "
+"to start over. All of these options, and others, are explained in great "
+"detail in man:ports[7]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:831
+msgid ""
+"The ports system uses man:fetch[1] to download the source files, which "
+"supports various environment variables. The `FTP_PASSIVE_MODE`, "
+"`FTP_PROXY`, and `FTP_PASSWORD` variables may need to be set if the FreeBSD "
+"system is behind a firewall or FTP/HTTP proxy. See man:fetch[3] for the "
+"complete list of supported variables."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:836
+msgid ""
+"For users who cannot be connected to the Internet all the time, `make fetch` "
+"can be run within `/usr/ports`, to fetch all distfiles, or within a "
+"category, such as `/usr/ports/net`, or within the specific port skeleton. "
+"Note that if a port has any dependencies, running this command in a category "
+"or ports skeleton will _not_ fetch the distfiles of ports from another "
+"category. Instead, use `make fetch-recursive` to also fetch the distfiles "
+"for all the dependencies of a port."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:839
+msgid ""
+"In rare cases, such as when an organization has a local distfiles "
+"repository, the `MASTER_SITES` variable can be used to override the download "
+"locations specified in the `Makefile`. When using, specify the alternate "
+"location:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:845
+#, no-wrap
+msgid ""
+"# cd /usr/ports/directory\n"
+"# make MASTER_SITE_OVERRIDE= \\\n"
+"ftp://ftp.organization.org/pub/FreeBSD/ports/distfiles/ fetch\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:848
+msgid ""
+"The `WRKDIRPREFIX` and `PREFIX` variables can override the default working "
+"and target directories. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:852
+#, no-wrap
+msgid "# make WRKDIRPREFIX=/usr/home/example/ports install\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:855
+msgid ""
+"will compile the port in `/usr/home/example/ports` and install everything "
+"under `/usr/local`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:859
+#, no-wrap
+msgid "# make PREFIX=/usr/home/example/local install\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:862
+msgid ""
+"will compile the port in `/usr/ports` and install it in `/usr/home/example/"
+"local`. And:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:866
+#, no-wrap
+msgid "# make WRKDIRPREFIX=../ports PREFIX=../local install\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:869
+msgid "will combine the two."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:872
+msgid ""
+"These can also be set as environmental variables. Refer to the manual page "
+"for your shell for instructions on how to set an environmental variable."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ports/_index.adoc:874
+#, no-wrap
+msgid "Removing Installed Ports"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:878
+msgid ""
+"Installed ports can be uninstalled using `pkg delete`. Examples for using "
+"this command can be found in the man:pkg-delete[8] manual page."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:880
+msgid "Alternately, `make deinstall` can be run in the port\\'s directory:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:888
+#, no-wrap
+msgid ""
+"# cd /usr/ports/sysutils/lsof\n"
+"# make deinstall\n"
+"===> Deinstalling for sysutils/lsof\n"
+"===> Deinstalling\n"
+"Deinstallation has been requested for the following 1 packages:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:890
+#, no-wrap
+msgid "\tlsof-4.88.d,8\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:893
+#, no-wrap
+msgid ""
+"The deinstallation will free 229 kB\n"
+"[1/1] Deleting lsof-4.88.d,8... done\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:898
+msgid ""
+"It is recommended to read the messages as the port is uninstalled. If the "
+"port has any applications that depend upon it, this information will be "
+"displayed but the uninstallation will proceed. In such cases, it may be "
+"better to reinstall the application in order to prevent broken dependencies."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ports/_index.adoc:900
+#, no-wrap
+msgid "Upgrading Ports"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:904
+msgid ""
+"Over time, newer versions of software become available in the Ports "
+"Collection. This section describes how to determine which software can be "
+"upgraded and how to perform the upgrade."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:908
+msgid ""
+"To determine if newer versions of installed ports are available, ensure that "
+"the latest version of the ports tree is installed, using the updating "
+"command described in <<ports-using-git-method, \"Git Method\">>. The "
+"following command will list the installed ports which are out of date:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:912
+#, no-wrap
+msgid "# pkg version -l \"<\"\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:919
+msgid ""
+"Before attempting an upgrade, read `/usr/ports/UPDATING` from the top of the "
+"file to the date closest to the last time ports were upgraded or the system "
+"was installed. This file describes various issues and additional steps "
+"users may encounter and need to perform when updating a port, including such "
+"things as file format changes, changes in locations of configuration files, "
+"or any incompatibilities with previous versions. Make note of any "
+"instructions which match any of the ports that need upgrading and follow "
+"these instructions when performing the upgrade."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/ports/_index.adoc:922
+#, no-wrap
+msgid "Tools to Upgrade and Manage Ports"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:926
+msgid ""
+"The Ports Collection contains several utilities to perform the actual "
+"upgrade. Each has its strengths and weaknesses."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:929
+msgid ""
+"Historically, most installations used either Portmaster or Portupgrade. "
+"Synth is a newer alternative."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:934
+msgid ""
+"The choice of which tool is best for a particular system is up to the system "
+"administrator. It is recommended practice to back up your data before using "
+"any of these tools."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/ports/_index.adoc:937
+#, no-wrap
+msgid "Upgrading Ports Using Portmaster"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:942
+msgid ""
+"package:ports-mgmt/portmaster[] is a very small utility for upgrading "
+"installed ports. It is designed to use the tools installed with the FreeBSD "
+"base system without depending on other ports or databases. To install this "
+"utility as a port:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:947
+#, no-wrap
+msgid ""
+"# cd /usr/ports/ports-mgmt/portmaster\n"
+"# make install clean\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:950
+msgid "Portmaster defines four categories of ports:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:952
+msgid ""
+"Root port: has no dependencies and is not a dependency of any other ports."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:953
+msgid "Trunk port: has no dependencies, but other ports depend upon it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:954
+msgid "Branch port: has dependencies and other ports depend upon it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:955
+msgid "Leaf port: has dependencies but no other ports depend upon it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:957
+msgid "To list these categories and search for updates:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:978
+#, no-wrap
+msgid ""
+"# portmaster -L\n"
+"===>>> Root ports (No dependencies, not depended on)\n"
+"===>>> ispell-3.2.06_18\n"
+"===>>> screen-4.0.3\n"
+" ===>>> New version available: screen-4.0.3_1\n"
+"===>>> tcpflow-0.21_1\n"
+"===>>> 7 root ports\n"
+"...\n"
+"===>>> Branch ports (Have dependencies, are depended on)\n"
+"===>>> apache22-2.2.3\n"
+" ===>>> New version available: apache22-2.2.8\n"
+"...\n"
+"===>>> Leaf ports (Have dependencies, not depended on)\n"
+"===>>> automake-1.9.6_2\n"
+"===>>> bash-3.1.17\n"
+" ===>>> New version available: bash-3.2.33\n"
+"...\n"
+"===>>> 32 leaf ports\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:981
+#, no-wrap
+msgid ""
+"===>>> 137 total installed ports\n"
+" ===>>> 83 have new versions available\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:984
+msgid "This command is used to upgrade all outdated ports:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:988
+#, no-wrap
+msgid "# portmaster -a\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:998
+msgid ""
+"By default, Portmaster makes a backup package before deleting the existing "
+"port. If the installation of the new version is successful, Portmaster "
+"deletes the backup. Using `-b` instructs Portmaster not to automatically "
+"delete the backup. Adding `-i` starts Portmaster in interactive mode, "
+"prompting for confirmation before upgrading each port. Many other options "
+"are available. Read through the manual page for man:portmaster[8] for "
+"details regarding their usage."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1001
+msgid ""
+"If errors are encountered during the upgrade process, add `-f` to upgrade "
+"and rebuild all ports:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:1005
+#, no-wrap
+msgid "# portmaster -af\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1009
+msgid ""
+"Portmaster can also be used to install new ports on the system, upgrading "
+"all dependencies before building and installing the new port. To use this "
+"function, specify the location of the port in the Ports Collection:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:1013
+#, no-wrap
+msgid "# portmaster shells/bash\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1016
+msgid ""
+"More information about package:ports-mgmt/portmaster[] may be found in its "
+"`pkg-descr`."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/ports/_index.adoc:1018
+#, no-wrap
+msgid "Upgrading Ports Using Portupgrade"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1023
+msgid ""
+"package:ports-mgmt/portupgrade[] is another utility that can be used to "
+"upgrade ports. It installs a suite of applications which can be used to "
+"manage ports. However, it is dependent upon Ruby. To install the port:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:1028
+#, no-wrap
+msgid ""
+"# cd /usr/ports/ports-mgmt/portupgrade\n"
+"# make install clean\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1031
+msgid ""
+"Before performing an upgrade using this utility, it is recommended to scan "
+"the list of installed ports using `pkgdb -F` and to fix all the "
+"inconsistencies it reports."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1034
+msgid ""
+"To upgrade all the outdated ports installed on the system, use `portupgrade -"
+"a`. Alternately, include `-i` to be asked for confirmation of every "
+"individual upgrade:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:1038
+#, no-wrap
+msgid "# portupgrade -ai\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1042
+msgid ""
+"To upgrade only a specified application instead of all available ports, use "
+"`portupgrade _pkgname_`. It is very important to include `-R` to first "
+"upgrade all the ports required by the given application:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:1046
+#, no-wrap
+msgid "# portupgrade -R firefox\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1053
+msgid ""
+"If `-P` is included, Portupgrade searches for available packages in the "
+"local directories listed in `PKG_PATH`. If none are available locally, it "
+"then fetches packages from a remote site. If packages can not be found "
+"locally or fetched remotely, Portupgrade will use ports. To avoid using "
+"ports entirely, specify `-PP`. This last set of options tells Portupgrade "
+"to abort if no packages are available:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:1057
+#, no-wrap
+msgid "# portupgrade -PP gnome3\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1061
+msgid ""
+"To just fetch the port distfiles, or packages, if `-P` is specified, without "
+"building or installing anything, use `-F`. For further information on all "
+"of the available switches, refer to the manual page for `portupgrade`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1063
+msgid ""
+"More information about package:ports-mgmt/portupgrade[] may be found in its "
+"`pkg-descr`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ports/_index.adoc:1065
+#, no-wrap
+msgid "Ports and Disk Space"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1071
+msgid ""
+"Using the Ports Collection will use up disk space over time. After building "
+"and installing a port, running `make clean` within the ports skeleton will "
+"clean up the temporary `work` directory. If Portmaster is used to install a "
+"port, it will automatically remove this directory unless `-K` is specified. "
+"If Portupgrade is installed, this command will remove all `work` directories "
+"found within the local copy of the Ports Collection:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:1075
+#, no-wrap
+msgid "# portsclean -C\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1079
+msgid ""
+"In addition, outdated source distribution files accumulate in `/usr/ports/"
+"distfiles` over time. To use Portupgrade to delete all the distfiles that "
+"are no longer referenced by any ports:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:1083
+#, no-wrap
+msgid "# portsclean -D\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1086
+msgid ""
+"Portupgrade can remove all distfiles not referenced by any port currently "
+"installed on the system:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:1090
+#, no-wrap
+msgid "# portsclean -DD\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1093
+msgid "If Portmaster is installed, use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:1097
+#, no-wrap
+msgid "# portmaster --clean-distfiles\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1100
+msgid ""
+"By default, this command is interactive and prompts the user to confirm if a "
+"distfile should be deleted."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1102
+msgid ""
+"In addition to these commands, package:ports-mgmt/pkg_cutleaves[] automates "
+"the task of removing installed ports that are no longer needed."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/ports/_index.adoc:1104
+#, no-wrap
+msgid "Building Packages with poudriere"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1111
+msgid ""
+"poudriere is a `BSD`-licensed utility for creating and testing FreeBSD "
+"packages. It uses FreeBSD jails to set up isolated compilation "
+"environments. These jails can be used to build packages for versions of "
+"FreeBSD that are different from the system on which it is installed, and "
+"also to build packages for i386 if the host is an amd64 system. Once the "
+"packages are built, they are in a layout identical to the official mirrors. "
+"These packages are usable by man:pkg[8] and other package management tools."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1116
+msgid ""
+"poudriere is installed using the package:ports-mgmt/poudriere[] package or "
+"port. The installation includes a sample configuration file `/usr/local/etc/"
+"poudriere.conf.sample`. Copy this file to `/usr/local/etc/poudriere.conf`. "
+"Edit the copied file to suit the local configuration."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1122
+msgid ""
+"While `ZFS` is not required on the system running poudriere, it is "
+"beneficial. When `ZFS` is used, `ZPOOL` must be specified in `/usr/local/"
+"etc/poudriere.conf` and `FREEBSD_HOST` should be set to a nearby mirror. "
+"Defining `CCACHE_DIR` enables the use of package:devel/ccache[] to cache "
+"compilation and reduce build times for frequently-compiled code. It may be "
+"convenient to put poudriere datasets in an isolated tree mounted at `/"
+"poudriere`. Defaults for the other configuration values are adequate."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1126
+msgid ""
+"The number of processor cores detected is used to define how many builds "
+"will run in parallel. Supply enough virtual memory, either with `RAM` or "
+"swap space. If virtual memory runs out, the compilation jails will stop and "
+"be torn down, resulting in weird error messages."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ports/_index.adoc:1128
+#, no-wrap
+msgid "Initialize Jails and Port Trees"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1134
+msgid ""
+"After configuration, initialize poudriere so that it installs a jail with "
+"the required FreeBSD tree and a ports tree. Specify a name for the jail "
+"using `-j` and the FreeBSD version with `-v`. On systems running FreeBSD/"
+"amd64, the architecture can be set with `-a` to either `i386` or `amd64`. "
+"The default is the architecture shown by `uname`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:1181
+#, no-wrap
+msgid ""
+"# poudriere jail -c -j 13amd64 -v 13.1-RELEASE\n"
+"[00:00:00] Creating 13amd64 fs at /poudriere/jails/13amd64... done\n"
+"[00:00:00] Using pre-distributed MANIFEST for FreeBSD 13.1-RELEASE amd64\n"
+"[00:00:00] Fetching base for FreeBSD 13.1-RELEASE amd64\n"
+"/poudriere/jails/13amd64/fromftp/base.txz 125 MB 4110 kBps 31s\n"
+"[00:00:33] Extracting base... done\n"
+"[00:00:54] Fetching src for FreeBSD 13.1-RELEASE amd64\n"
+"/poudriere/jails/13amd64/fromftp/src.txz 154 MB 4178 kBps 38s\n"
+"[00:01:33] Extracting src... done\n"
+"[00:02:31] Fetching lib32 for FreeBSD 13.1-RELEASE amd64\n"
+"/poudriere/jails/13amd64/fromftp/lib32.txz 24 MB 3969 kBps 06s\n"
+"[00:02:38] Extracting lib32... done\n"
+"[00:02:42] Cleaning up... done\n"
+"[00:02:42] Recording filesystem state for clean... done\n"
+"[00:02:42] Upgrading using ftp\n"
+"/etc/resolv.conf -> /poudriere/jails/13amd64/etc/resolv.conf\n"
+"Looking up update.FreeBSD.org mirrors... 3 mirrors found.\n"
+"Fetching public key from update4.freebsd.org... done.\n"
+"Fetching metadata signature for 13.1-RELEASE from update4.freebsd.org... done.\n"
+"Fetching metadata index... done.\n"
+"Fetching 2 metadata files... done.\n"
+"Inspecting system... done.\n"
+"Preparing to download files... done.\n"
+"Fetching 124 patches.....10....20....30....40....50....60....70....80....90....100....110....120.. done.\n"
+"Applying patches... done.\n"
+"Fetching 6 files... done.\n"
+"The following files will be added as part of updating to\n"
+"13.1-RELEASE-p1:\n"
+"/usr/src/contrib/unbound/.github\n"
+"/usr/src/contrib/unbound/.github/FUNDING.yml\n"
+"/usr/src/contrib/unbound/contrib/drop2rpz\n"
+"/usr/src/contrib/unbound/contrib/unbound_portable.service.in\n"
+"/usr/src/contrib/unbound/services/rpz.c\n"
+"/usr/src/contrib/unbound/services/rpz.h\n"
+"/usr/src/lib/libc/tests/gen/spawnp_enoexec.sh\n"
+"The following files will be updated as part of updating to\n"
+"13.1-RELEASE-p1:\n"
+"[…]\n"
+"Installing updates...Scanning //usr/share/certs/blacklisted for certificates...\n"
+"Scanning //usr/share/certs/trusted for certificates...\n"
+" done.\n"
+"13.1-RELEASE-p1\n"
+"[00:04:06] Recording filesystem state for clean... done\n"
+"[00:04:07] Jail 13amd64 13.1-RELEASE-p1 amd64 is ready to be used\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:1188
+#, no-wrap
+msgid ""
+"# poudriere ports -c -p local -m git+https\n"
+"[00:00:00] Creating local fs at /poudriere/ports/local... done\n"
+"[00:00:00] Checking out the ports tree... done\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1193
+msgid ""
+"On a single computer, poudriere can build ports with multiple "
+"configurations, in multiple jails, and from different port trees. Custom "
+"configurations for these combinations are called _sets_. See the "
+"CUSTOMIZATION section of man:poudriere[8] for details after package:ports-"
+"mgmt/poudriere[] or package:ports-mgmt/poudriere-devel[] is installed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1197
+msgid ""
+"The basic configuration shown here puts a single jail-, port-, and set-"
+"specific `make.conf` in `/usr/local/etc/poudriere.d`. The filename in this "
+"example is created by combining the jail name, port name, and set name: "
+"`13amd64-local-workstation-make.conf`. The system `make.conf` and this new "
+"file are combined at build time to create the `make.conf` used by the build "
+"jail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1199
+msgid ""
+"Packages to be built are entered in `13amd64-local-workstation-pkglist` "
+"(ports with extref:{porters-handbook}flavors[FLAVORS] can be defined with "
+"@FLAVOR):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:1207
+#, no-wrap
+msgid ""
+"editors/emacs\n"
+"devel/git\n"
+"devel/php-composer2@php82\n"
+"ports-mgmt/pkg\n"
+"...\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1210
+msgid "Options and dependencies for the specified ports are configured:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:1214
+#, no-wrap
+msgid "# poudriere options -j 13amd64 -p local -z workstation -f 13amd64-local-workstation-pkglist\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1217
+msgid "Finally, packages are built and a package repository is created:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:1221
+#, no-wrap
+msgid "# poudriere bulk -j 13amd64 -p local -z workstation -f 13amd64-local-workstation-pkglist\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1225
+msgid ""
+"While running, pressing kbd:[Ctrl+t] displays the current state of the "
+"build. poudriere also builds files in `/poudriere/logs/bulk/jailname` that "
+"can be used with a web server to display build information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1227
+msgid ""
+"After completion, the new packages are now available for installation from "
+"the poudriere repository."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1229
+msgid ""
+"For more information on using poudriere, see man:poudriere[8] and the main "
+"web site, https://github.com/freebsd/poudriere/wiki[]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ports/_index.adoc:1230
+#, no-wrap
+msgid "Configuring pkg Clients to Use a poudriere Repository"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1235
+msgid ""
+"While it is possible to use both a custom repository along side of the "
+"official repository, sometimes it is useful to disable the official "
+"repository. This is done by creating a configuration file that overrides "
+"and disables the official configuration file. Create `/usr/local/etc/pkg/"
+"repos/FreeBSD.conf` that contains the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:1241
+#, no-wrap
+msgid ""
+"FreeBSD: {\n"
+"\tenabled: no\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1245
+msgid ""
+"Usually it is easiest to serve a poudriere repository to the client machines "
+"via HTTP. Set up a webserver to serve up the package directory, for "
+"instance: `/usr/local/poudriere/data/packages/13amd64`, where `13amd64` is "
+"the name of the build."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1248
+msgid ""
+"If the URL to the package repository is: `http://pkg.example.com/13amd64`, "
+"then the repository configuration file in `/usr/local/etc/pkg/repos/custom."
+"conf` would look like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:1255
+#, no-wrap
+msgid ""
+"custom: {\n"
+"\turl: \"http://pkg.example.com/13amd64\",\n"
+"\tenabled: yes,\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1258
+msgid ""
+"If exposing the package repository to the internet is not desired, the "
+"`file://` protocol can be used to point to the repository directly:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:1265
+#, no-wrap
+msgid ""
+"custom: {\n"
+"\turl: \"file:///usr/local/poudriere/data/packages/11amd64\",\n"
+"\tenabled: yes,\n"
+"}\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/ports/_index.adoc:1268
+#, no-wrap
+msgid "Post-Installation Considerations"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1272
+msgid ""
+"Regardless of whether the software was installed from a binary package or "
+"port, most third-party applications require some level of configuration "
+"after installation. The following commands and locations can be used to "
+"help determine what was installed with the application."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1274
+msgid ""
+"Most applications install at least one default configuration file in `/usr/"
+"local/etc`. In cases where an application has a large number of "
+"configuration files, a subdirectory will be created to hold them. Often, "
+"sample configuration files are installed which end with a suffix such as `."
+"sample`. The configuration files should be reviewed and possibly edited to "
+"meet the system's needs. To edit a sample file, first copy it without the `."
+"sample` extension."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1275
+msgid ""
+"Applications which provide documentation will install it into `/usr/local/"
+"share/doc` and many applications also install manual pages. This "
+"documentation should be consulted before continuing."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1276
+msgid ""
+"Some applications run services which must be added to `/etc/rc.conf` before "
+"starting the application. These applications usually install a startup "
+"script in `/usr/local/etc/rc.d`. See crossref:config[configtuning-starting-"
+"services,Starting Services] for more information."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:1281
+msgid ""
+"By design, applications do not run their startup script upon installation, "
+"nor do they run their stop script upon deinstallation or upgrade. This "
+"decision is left to the individual system administrator."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1284
+msgid ""
+"Users of man:csh[1] should run `rehash` to rebuild the known binary list in "
+"the shells `PATH`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1285
+msgid ""
+"Use `pkg info` to determine which files, man pages, and binaries were "
+"installed with the application."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/ports/_index.adoc:1287
+#, no-wrap
+msgid "Dealing with Broken Ports"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1290
+msgid "When a port does not build or install, try the following:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1292
+msgid ""
+"Search to see if there is a fix pending for the port in the link:https://www."
+"FreeBSD.org/support/[Problem Report database]. If so, implementing the "
+"proposed fix may fix the issue."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1293
+msgid ""
+"Ask the maintainer of the port for help. Type `make maintainer` in the ports "
+"skeleton or read the port's `Makefile` to find the maintainer's email "
+"address. Remember to include the output leading up to the error in the email "
+"to the maintainer."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:1299
+msgid ""
+"Some ports are not maintained by an individual but instead by a group "
+"maintainer represented by a extref:{mailing-list-faq}[mailing list]. Many, "
+"but not all, of these addresses look like mailto:freebsd-listname@FreeBSD."
+"org[freebsd-listname@FreeBSD.org]. Please take this into account when "
+"sending an email."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ports/_index.adoc:1302
+msgid ""
+"In particular, ports maintained by mailto:ports@FreeBSD.org[ports@FreeBSD."
+"org] are not maintained by a specific individual. Instead, any fixes and "
+"support come from the general community who subscribe to that mailing list. "
+"More volunteers are always needed!"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1305
+msgid ""
+"If there is no response to the email, use Bugzilla to submit a bug report "
+"using the instructions in extref:{problem-reports}[Writing FreeBSD Problem "
+"Reports]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1306
+msgid ""
+"Fix it! The extref:{porters-handbook}[Porter's Handbook] includes detailed "
+"information on the ports infrastructure so that you can fix the occasional "
+"broken port or even submit your own!"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ports/_index.adoc:1306
+msgid ""
+"Install the package instead of the port using the instructions in <<pkgng-"
+"intro>>."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/ppp-and-slip/_index.adoc b/documentation/content/en/books/handbook/ppp-and-slip/_index.adoc
index 831d3a3240..d45b9e0294 100644
--- a/documentation/content/en/books/handbook/ppp-and-slip/_index.adoc
+++ b/documentation/content/en/books/handbook/ppp-and-slip/_index.adoc
@@ -1,13 +1,13 @@
---
-title: Chapter 28. PPP
+title: Chapter 30. PPP
part: IV. Network Communication
prev: books/handbook/serialcomms
next: books/handbook/mail
description: FreeBSD supports the Point-to-Point (PPP) protocol which can be used to establish a network or Internet connection using a dial-up modem
tags: ["PPP", "PPPoE", "PPPoA", "modem"]
showBookMenu: true
-weight: 33
-path: "/books/handbook/"
+weight: 35
+path: "/books/handbook/ppp-and-slip/"
---
[[ppp-and-slip]]
@@ -18,7 +18,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 28
+:sectnumoffset: 30
:partnums:
:source-highlighter: rouge
:experimental:
@@ -165,7 +165,7 @@ Sets the idle timeout for the link in seconds.
Line 9:::
Instructs the peer to confirm the DNS settings.
-If the local network is running its own DNS server, this line should be commented out, by adding a `#` at the beginning of the line, or removed.
+If the local network is running its own DNS server, this line should be commented out, by adding a `+#+` at the beginning of the line, or removed.
Line 10:::
A blank line for readability. Blank lines are ignored by man:ppp[8].
diff --git a/documentation/content/en/books/handbook/ppp-and-slip/_index.po b/documentation/content/en/books/handbook/ppp-and-slip/_index.po
new file mode 100644
index 0000000000..104c7c0c6e
--- /dev/null
+++ b/documentation/content/en/books/handbook/ppp-and-slip/_index.po
@@ -0,0 +1,1895 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-07-15 16:41-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:1
+#, no-wrap
+msgid "FreeBSD supports the Point-to-Point (PPP) protocol which can be used to establish a network or Internet connection using a dial-up modem"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:1
+#, no-wrap
+msgid "IV. Network Communication"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:1
+#, no-wrap
+msgid "Chapter 30. PPP"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:14
+#, no-wrap
+msgid "PPP"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:56
+msgid ""
+"FreeBSD supports the Point-to-Point (PPP) protocol which can be used to "
+"establish a network or Internet connection using a dial-up modem. This "
+"chapter describes how to configure modem-based communication services in "
+"FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:58
+msgid "After reading this chapter, you will know:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:60
+msgid "How to configure, use, and troubleshoot a PPP connection."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:61
+msgid "How to set up PPP over Ethernet (PPPoE)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:62
+msgid "How to set up PPP over ATM (PPPoA)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:64
+msgid "Before reading this chapter, you should:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:66
+msgid "Be familiar with basic network terminology."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:67
+msgid "Understand the basics and purpose of a dial-up connection and PPP."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:69
+#, no-wrap
+msgid "Configuring PPP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:75
+msgid ""
+"FreeBSD provides built-in support for managing dial-up PPP connections using "
+"man:ppp[8]. The default FreeBSD kernel provides support for [."
+"filename]#tun# which is used to interact with a modem hardware. "
+"Configuration is performed by editing at least one configuration file, and "
+"configuration files containing examples are provided. Finally, `ppp` is "
+"used to start and manage connections."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:77
+msgid "In order to use a PPP connection, the following items are needed:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:79
+msgid "A dial-up account with an Internet Service Provider (ISP)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:80
+msgid "A dial-up modem."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:81
+msgid "The dial-up number for the ISP."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:82
+msgid "The login name and password assigned by the ISP."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:83
+msgid ""
+"The IP address of one or more DNS servers. Normally, the ISP provides these "
+"addresses. If it did not, FreeBSD can be configured to use DNS negotiation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:85
+msgid "If any of the required information is missing, contact the ISP."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:87
+msgid ""
+"The following information may be supplied by the ISP, but is not necessary:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:89
+msgid ""
+"The IP address of the default gateway. If this information is unknown, the "
+"ISP will automatically provide the correct value during connection setup. "
+"When configuring PPP on FreeBSD, this address is referred to as `HISADDR`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:91
+msgid ""
+"The subnet mask. If the ISP has not provided one, `255.255.255.255` will be "
+"used in the man:ppp[8] configuration file. *"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:93
+msgid ""
+"If the ISP has assigned a static IP address and hostname, it should be input "
+"into the configuration file. Otherwise, this information will be "
+"automatically provided during connection setup."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:96
+msgid ""
+"The rest of this section demonstrates how to configure FreeBSD for common "
+"PPP connection scenarios. The required configuration file is [.filename]#/"
+"etc/ppp/ppp.conf# and additional files and examples are available in [."
+"filename]#/usr/share/examples/ppp/#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:101
+msgid ""
+"Throughout this section, many of the file examples display line numbers. "
+"These line numbers have been added to make it easier to follow the "
+"discussion and are not meant to be placed in the actual file."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:104
+msgid ""
+"When editing a configuration file, proper indentation is important. Lines "
+"that end in a `:` start in the first column (beginning of the line) while "
+"all other lines should be indented as shown using spaces or tabs."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:107
+#, no-wrap
+msgid "Basic Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:111
+msgid ""
+"In order to configure a PPP connection, first edit [.filename]#/etc/ppp/ppp."
+"conf# with the dial-in information for the ISP. This file is described as "
+"follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:131
+#, no-wrap
+msgid ""
+"1 default:\n"
+"2 set log Phase Chat LCP IPCP CCP tun command\n"
+"3 ident user-ppp VERSION\n"
+"4 set device /dev/cuau0\n"
+"5 set speed 115200\n"
+"6 set dial \"ABORT BUSY ABORT NO\\\\sCARRIER TIMEOUT 5 \\\n"
+"7 \\\"\\\" AT OK-AT-OK ATE1Q0 OK \\\\dATDT\\\\T TIMEOUT 40 CONNECT\"\n"
+"8 set timeout 180\n"
+"9 enable dns\n"
+"10\n"
+"11 provider:\n"
+"12 set phone \"(123) 456 7890\"\n"
+"13 set authname foo\n"
+"14 set authkey bar\n"
+"15 set timeout 300\n"
+"16 set ifaddr x.x.x.x/0 y.y.y.y/0 255.255.255.255 0.0.0.0\n"
+"17 add default HISADDR\n"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:133
+#, no-wrap
+msgid "Line 1"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:136
+msgid ""
+"Identifies the `default` entry. Commands in this entry (lines 2 through 9) "
+"are executed automatically when `ppp` is run."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:137
+#, no-wrap
+msgid "Line 2"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:140
+msgid ""
+"Enables verbose logging parameters for testing the connection. Once the "
+"configuration is working satisfactorily, this line should be reduced to:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:144
+#, no-wrap
+msgid "set log phase tun\n"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:146
+#, no-wrap
+msgid "Line 3"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:148
+msgid ""
+"Displays the version of man:ppp[8] to the PPP software running on the other "
+"side of the connection."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:149
+#, no-wrap
+msgid "Line 4"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:151
+msgid ""
+"Identifies the device to which the modem is connected, where [."
+"filename]#COM1# is [.filename]#/dev/cuau0# and [.filename]#COM2# is [."
+"filename]#/dev/cuau1#."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:152
+#, no-wrap
+msgid "Line 5"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:155
+msgid ""
+"Sets the connection speed. If `115200` does not work on an older modem, try "
+"`38400` instead."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:156
+#, no-wrap
+msgid "Lines 6 & 7"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:159
+msgid ""
+"The dial string written as an expect-send syntax. Refer to man:chat[8] for "
+"more information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:162
+msgid ""
+"Note that this command continues onto the next line for readability. Any "
+"command in [.filename]#ppp.conf# may do this if the last character on the "
+"line is `\\`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:163
+#, no-wrap
+msgid "Line 8"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:165
+msgid "Sets the idle timeout for the link in seconds."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:166
+#, no-wrap
+msgid "Line 9"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:169
+msgid ""
+"Instructs the peer to confirm the DNS settings. If the local network is "
+"running its own DNS server, this line should be commented out, by adding a "
+"`+#+` at the beginning of the line, or removed."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:170
+#, no-wrap
+msgid "Line 10"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:172
+msgid "A blank line for readability. Blank lines are ignored by man:ppp[8]."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:173
+#, no-wrap
+msgid "Line 11"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:176
+msgid ""
+"Identifies an entry called `provider`. This could be changed to the name of "
+"the ISP so that `load _ISP_` can be used to start the connection."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:177
+#, no-wrap
+msgid "Line 12"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:183
+msgid ""
+"Use the phone number for the ISP. Multiple phone numbers may be specified "
+"using the colon (`:`) or pipe character (`|`) as a separator. To rotate "
+"through the numbers, use a colon. To always attempt to dial the first "
+"number first and only use the other numbers if the first number fails, use "
+"the pipe character. Always enclose the entire set of phone numbers between "
+"quotation marks (`\"`) to prevent dialing failures."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:184
+#, no-wrap
+msgid "Lines 13 & 14"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:186
+msgid "Use the user name and password for the ISP."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:187
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:307
+#, no-wrap
+msgid "Line 15"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:191
+msgid ""
+"Sets the default idle timeout in seconds for the connection. In this "
+"example, the connection will be closed automatically after 300 seconds of "
+"inactivity. To prevent a timeout, set this value to zero."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:192
+#, no-wrap
+msgid "Line 16"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:195
+msgid ""
+"Sets the interface addresses. The values used depend upon whether a static "
+"IP address has been obtained from the ISP or if it instead negotiates a "
+"dynamic IP address during connection."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:198
+msgid ""
+"If the ISP has allocated a static IP address and default gateway, replace _x."
+"x.x.x_ with the static IP address and replace _y.y.y.y_ with the IP address "
+"of the default gateway. If the ISP has only provided a static IP address "
+"without a gateway address, replace _y.y.y.y_ with `10.0.0.2/0`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:201
+msgid ""
+"If the IP address changes whenever a connection is made, change this line to "
+"the following value. This tells man:ppp[8] to use the IP Configuration "
+"Protocol (IPCP) to negotiate a dynamic IP address:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:205
+#, no-wrap
+msgid "set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.255 0.0.0.0\n"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:207
+#, no-wrap
+msgid "Line 17"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:211
+msgid ""
+"Keep this line as-is as it adds a default route to the gateway. The "
+"`HISADDR` will automatically be replaced with the gateway address specified "
+"on line 16. It is important that this line appears after line 16."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:217
+msgid ""
+"Depending upon whether man:ppp[8] is started manually or automatically, a [."
+"filename]#/etc/ppp/ppp.linkup# may also need to be created which contains "
+"the following lines. This file is required when running `ppp` in `-auto` "
+"mode. This file is used after the connection has been established. At this "
+"point, the IP address will have been assigned and it is now possible to add "
+"the routing table entries. When creating this file, make sure that "
+"_provider_ matches the value demonstrated in line 11 of [.filename]#ppp."
+"conf#."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:222
+#, no-wrap
+msgid ""
+"provider:\n"
+" add default HISADDR\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:227
+msgid ""
+"This file is also needed when the default gateway address is \"guessed\" in "
+"a static IP address configuration. In this case, remove line 17 from [."
+"filename]#ppp.conf# and create [.filename]#/etc/ppp/ppp.linkup# with the "
+"above two lines. More examples for this file can be found in [.filename]#/"
+"usr/share/examples/ppp/#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:230
+msgid ""
+"By default, `ppp` must be run as `root`. To change this default, add the "
+"account of the user who should run `ppp` to the `network` group in [."
+"filename]#/etc/group#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:233
+msgid ""
+"Then, give the user access to one or more entries in [.filename]#/etc/ppp/"
+"ppp.conf# with `allow`. For example, to give `fred` and `mary` permission "
+"to only the `provider:` entry, add this line to the `provider:` section:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:237
+#, no-wrap
+msgid "allow users fred mary\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:240
+msgid ""
+"To give the specified users access to all entries, put that line in the "
+"`default` section instead."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:241
+#, no-wrap
+msgid "Advanced Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:244
+msgid ""
+"It is possible to configure PPP to supply DNS and NetBIOS nameserver "
+"addresses on demand."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:246
+msgid ""
+"To enable these extensions with PPP version 1.x, the following lines might "
+"be added to the relevant section of [.filename]#/etc/ppp/ppp.conf#."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:252
+#, no-wrap
+msgid ""
+"enable msext\n"
+"set ns 203.14.100.1 203.14.100.2\n"
+"set nbns 203.14.100.5\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:255
+msgid "And for PPP version 2 and above:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:261
+#, no-wrap
+msgid ""
+"accept dns\n"
+"set dns 203.14.100.1 203.14.100.2\n"
+"set nbns 203.14.100.5\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:264
+msgid ""
+"This will tell the clients the primary and secondary name server addresses, "
+"and a NetBIOS nameserver host."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:266
+msgid ""
+"In version 2 and above, if the `set dns` line is omitted, PPP will use the "
+"values found in [.filename]#/etc/resolv.conf#."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:268
+#, no-wrap
+msgid "PAP and CHAP Authentication"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:272
+msgid ""
+"Some ISPs set their system up so that the authentication part of the "
+"connection is done using either of the PAP or CHAP authentication "
+"mechanisms. If this is the case, the ISP will not give a `login:` prompt at "
+"connection, but will start talking PPP immediately."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:275
+msgid ""
+"PAP is less secure than CHAP, but security is not normally an issue here as "
+"passwords, although being sent as plain text with PAP, are being transmitted "
+"down a serial line only. There is not much room for crackers to "
+"\"eavesdrop\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:277
+msgid "The following alterations must be made:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:283
+#, no-wrap
+msgid ""
+"13 set authname MyUserName\n"
+"14 set authkey MyPassword\n"
+"15 set login\n"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:285
+#, no-wrap
+msgid "Line 13"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:287
+msgid ""
+"This line specifies the PAP/CHAP user name.Insert the correct value for "
+"_MyUserName_."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:288
+#, no-wrap
+msgid "Line 14"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:292
+msgid ""
+"This line specifies the PAP/CHAP password. Insert the correct value for "
+"_MyPassword_. You may want to add an additional line, such as:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:296
+#, no-wrap
+msgid "16 accept PAP\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:299
+msgid "or"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:303
+#, no-wrap
+msgid "16 accept CHAP\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:306
+msgid ""
+"to make it obvious that this is the intention, but PAP and CHAP are both "
+"accepted by default."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:310
+msgid ""
+"The ISP will not normally require a login to the server when using PAP or "
+"CHAP. Therefore, disable the \"set login\" string."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:312
+#, no-wrap
+msgid "Using PPP Network Address Translation Capability"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:316
+msgid ""
+"PPP has ability to use internal NAT without kernel diverting capabilities. "
+"This functionality may be enabled by the following line in [.filename]#/etc/"
+"ppp/ppp.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:320
+#, no-wrap
+msgid "nat enable yes\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:324
+msgid ""
+"Alternatively, NAT may be enabled by command-line option `-nat`. There is "
+"also [.filename]#/etc/rc.conf# knob named `ppp_nat`, which is enabled by "
+"default."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:326
+msgid ""
+"When using this feature, it may be useful to include the following [."
+"filename]#/etc/ppp/ppp.conf# options to enable incoming connections "
+"forwarding:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:331
+#, no-wrap
+msgid ""
+"nat port tcp 10.0.0.2:ftp ftp\n"
+"nat port tcp 10.0.0.2:http http\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:334
+msgid "or do not trust the outside at all"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:338
+#, no-wrap
+msgid "nat deny_incoming yes\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:341
+#, no-wrap
+msgid "Final System Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:344
+msgid ""
+"While `ppp` is now configured, some edits still need to be made to [."
+"filename]#/etc/rc.conf#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:346
+msgid ""
+"Working from the top down in this file, make sure the `hostname=` line is "
+"set:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:350
+#, no-wrap
+msgid "hostname=\"foo.example.com\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:353
+msgid ""
+"If the ISP has supplied a static IP address and name, use this name as the "
+"host name."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:356
+msgid ""
+"Look for the `network_interfaces` variable. To configure the system to dial "
+"the ISP on demand, make sure the [.filename]#tun0# device is added to the "
+"list, otherwise remove it."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:361
+#, no-wrap
+msgid ""
+"network_interfaces=\"lo0 tun0\"\n"
+"ifconfig_tun0=\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:367
+msgid ""
+"The `ifconfig_tun0` variable should be empty, and a file called [.filename]#/"
+"etc/start_if.tun0# should be created. This file should contain the line:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:371
+#, no-wrap
+msgid "ppp -auto mysystem\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:375
+msgid ""
+"This script is executed at network configuration time, starting the ppp "
+"daemon in automatic mode. If this machine acts as a gateway, consider "
+"including `-alias`. Refer to the manual page for further details."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:378
+msgid ""
+"Make sure that the router program is set to `NO` with the following line in "
+"[.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:382
+#, no-wrap
+msgid "router_enable=\"NO\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:385
+msgid ""
+"It is important that the `routed` daemon is not started, as `routed` tends "
+"to delete the default routing table entries created by `ppp`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:388
+msgid ""
+"It is probably a good idea to ensure that the `sendmail_flags` line does not "
+"include the `-q` option, otherwise `sendmail` will attempt to do a network "
+"lookup every now and then, possibly causing your machine to dial out. You "
+"may try:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:392
+#, no-wrap
+msgid "sendmail_flags=\"-bd\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:396
+msgid ""
+"The downside is that `sendmail` is forced to re-examine the mail queue "
+"whenever the ppp link. To automate this, include `!bg` in [.filename]#ppp."
+"linkup#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:403
+#, no-wrap
+msgid ""
+"1 provider:\n"
+"2 delete ALL\n"
+"3 add 0 0 HISADDR\n"
+"4 !bg sendmail -bd -q30m\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:407
+msgid ""
+"An alternative is to set up a \"dfilter\" to block SMTP traffic. Refer to "
+"the sample files for further details."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:408
+#, no-wrap
+msgid "Using `ppp`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:412
+msgid ""
+"All that is left is to reboot the machine. After rebooting, either type:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:416
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:535
+#, no-wrap
+msgid "# ppp\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:419
+msgid ""
+"and then `dial provider` to start the PPP session, or, to configure `ppp` to "
+"establish sessions automatically when there is outbound traffic and [."
+"filename]#start_if.tun0# does not exist, type:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:423
+#, no-wrap
+msgid "# ppp -auto provider\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:427
+msgid ""
+"It is possible to talk to the `ppp` program while it is running in the "
+"background, but only if a suitable diagnostic port has been set up. To do "
+"this, add the following line to the configuration:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:431
+#, no-wrap
+msgid "set server /var/run/ppp-tun%d DiagnosticPassword 0177\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:435
+msgid ""
+"This will tell PPP to listen to the specified UNIX(R) domain socket, asking "
+"clients for the specified password before allowing access. The `%d` in the "
+"name is replaced with the [.filename]#tun# device number that is in use."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:437
+msgid ""
+"Once a socket has been set up, the man:pppctl[8] program may be used in "
+"scripts that wish to manipulate the running program."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:439
+#, no-wrap
+msgid "Configuring Dial-in Services"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:442
+msgid ""
+"crossref:serialcomms[dialup,“Dial-in Service”] provides a good description "
+"on enabling dial-up services using man:getty[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:444
+msgid ""
+"An alternative to `getty` is package:comms/mgetty+sendfax[] port), a smarter "
+"version of `getty` designed with dial-up lines in mind."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:446
+msgid ""
+"The advantages of using `mgetty` is that it actively _talks_ to modems, "
+"meaning if port is turned off in [.filename]#/etc/ttys# then the modem will "
+"not answer the phone."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:448
+msgid ""
+"Later versions of `mgetty` (from 0.99beta onwards) also support the "
+"automatic detection of PPP streams, allowing clients scriptless access to "
+"the server."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:450
+msgid ""
+"Refer to http://mgetty.greenie.net/doc/mgetty_toc.html[http://mgetty.greenie."
+"net/doc/mgetty_toc.html] for more information on `mgetty`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:453
+msgid ""
+"By default the package:comms/mgetty+sendfax[] port comes with the `AUTO_PPP` "
+"option enabled allowing `mgetty` to detect the LCP phase of PPP connections "
+"and automatically spawn off a ppp shell. However, since the default login/"
+"password sequence does not occur it is necessary to authenticate users using "
+"either PAP or CHAP."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:455
+msgid ""
+"This section assumes the user has successfully compiled, and installed the "
+"package:comms/mgetty+sendfax[] port on his system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:457
+msgid ""
+"Ensure that [.filename]#/usr/local/etc/mgetty+sendfax/login.config# has the "
+"following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:461
+#, no-wrap
+msgid "/AutoPPP/ - - /etc/ppp/ppp-pap-dialup\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:464
+msgid ""
+"This tells `mgetty` to run [.filename]#ppp-pap-dialup# for detected PPP "
+"connections."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:466
+msgid ""
+"Create an executable file called [.filename]#/etc/ppp/ppp-pap-dialup# "
+"containing the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:471
+#, no-wrap
+msgid ""
+"#!/bin/sh\n"
+"exec /usr/sbin/ppp -direct pap$IDENT\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:475
+msgid ""
+"For each dial-up line enabled in [.filename]#/etc/ttys#, create a "
+"corresponding entry in [.filename]#/etc/ppp/ppp.conf#. This will happily co-"
+"exist with the definitions we created above."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:482
+#, no-wrap
+msgid ""
+"pap:\n"
+" enable pap\n"
+" set ifaddr 203.14.100.1 203.14.100.20-203.14.100.40\n"
+" enable proxy\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:485
+msgid ""
+"Each user logging in with this method will need to have a username/password "
+"in [.filename]#/etc/ppp/ppp.secret#, or alternatively add the following "
+"option to authenticate users via PAP from [.filename]#/etc/passwd#."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:489
+#, no-wrap
+msgid "enable passwdauth\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:493
+msgid ""
+"To assign some users a static IP number, specify the number as the third "
+"argument in [.filename]#/etc/ppp/ppp.secret#. See [.filename]#/usr/share/"
+"examples/ppp/ppp.secret.sample# for examples."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:495
+#, no-wrap
+msgid "Troubleshooting PPP Connections"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:501
+msgid ""
+"This section covers a few issues which may arise when using PPP over a modem "
+"connection. Some ISPs present the `ssword` prompt while others present "
+"`password`. If the `ppp` script is not written accordingly, the login "
+"attempt will fail. The most common way to debug `ppp` connections is by "
+"connecting manually as described in this section."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:502
+#, no-wrap
+msgid "Check the Device Nodes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:505
+msgid ""
+"When using a custom kernel, make sure to include the following line in the "
+"kernel configuration file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:509
+#, no-wrap
+msgid "device uart\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:513
+msgid ""
+"The [.filename]#uart# device is already included in the `GENERIC` kernel, so "
+"no additional steps are necessary in this case. Just check the `dmesg` "
+"output for the modem device with:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:517
+#, no-wrap
+msgid "# dmesg | grep uart\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:524
+msgid ""
+"This should display some pertinent output about the [.filename]#uart# "
+"devices. These are the COM ports we need. If the modem acts like a "
+"standard serial port, it should be listed on [.filename]#uart1#, or [."
+"filename]#COM2#. If so, a kernel rebuild is not required. When matching "
+"up, if the modem is on [.filename]#uart1#, the modem device would be [."
+"filename]#/dev/cuau1#."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:525
+#, no-wrap
+msgid "Connecting Manually"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:531
+msgid ""
+"Connecting to the Internet by manually controlling `ppp` is quick, easy, and "
+"a great way to debug a connection or just get information on how the ISP "
+"treats `ppp` client connections. Lets start PPP from the command line. "
+"Note that in all of our examples we will use _example_ as the hostname of "
+"the machine running PPP. To start `ppp`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:540
+#, no-wrap
+msgid "ppp ON example> set device /dev/cuau1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:543
+msgid "This second command sets the modem device to [.filename]#cuau1#."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:547
+#, no-wrap
+msgid "ppp ON example> set speed 115200\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:550
+msgid "This sets the connection speed to 115,200 kbps."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:554
+#, no-wrap
+msgid "ppp ON example> enable dns\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:558
+msgid ""
+"This tells `ppp` to configure the resolver and add the nameserver lines to [."
+"filename]#/etc/resolv.conf#. If `ppp` cannot determine the hostname, it can "
+"manually be set later."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:562
+#, no-wrap
+msgid "ppp ON example> term\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:565
+msgid ""
+"This switches to \"terminal\" mode in order to manually control the modem."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:570
+#, no-wrap
+msgid ""
+"deflink: Entering terminal mode on /dev/cuau1\n"
+"type '~h' for help\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:577
+#, no-wrap
+msgid ""
+"at\n"
+"OK\n"
+"atdt123456789\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:580
+msgid ""
+"Use `at` to initialize the modem, then use `atdt` and the number for the ISP "
+"to begin the dial in process."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:584
+#, no-wrap
+msgid "CONNECT\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:587
+msgid ""
+"Confirmation of the connection, if we are going to have any connection "
+"problems, unrelated to hardware, here is where we will attempt to resolve "
+"them."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:591
+#, no-wrap
+msgid "ISP Login:myusername\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:594
+msgid ""
+"At this prompt, return the prompt with the username that was provided by the "
+"ISP."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:598
+#, no-wrap
+msgid "ISP Pass:mypassword\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:602
+msgid ""
+"At this prompt, reply with the password that was provided by the ISP. Just "
+"like logging into FreeBSD, the password will not echo."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:606
+#, no-wrap
+msgid "Shell or PPP:ppp\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:611
+msgid ""
+"Depending on the ISP, this prompt might not appear. If it does, it is "
+"asking whether to use a shell on the provider or to start `ppp`. In this "
+"example, `ppp` was selected in order to establish an Internet connection."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:615
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:623
+#, no-wrap
+msgid "Ppp ON example>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:619
+msgid ""
+"Notice that in this example the first `p` has been capitalized. This shows "
+"that we have successfully connected to the ISP."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:626
+msgid ""
+"We have successfully authenticated with our ISP and are waiting for the "
+"assigned IP address."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:630
+#, no-wrap
+msgid "PPP ON example>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:633
+msgid ""
+"We have made an agreement on an IP address and successfully completed our "
+"connection."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:637
+#, no-wrap
+msgid "PPP ON example>add default HISADDR\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:642
+msgid ""
+"Here we add our default route, we need to do this before we can talk to the "
+"outside world as currently the only established connection is with the "
+"peer. If this fails due to existing routes, put a bang character `!` in "
+"front of the `add`. Alternatively, set this before making the actual "
+"connection and it will negotiate a new route accordingly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:647
+msgid ""
+"If everything went good we should now have an active connection to the "
+"Internet, which could be thrown into the background using kbd:[CTRL+z]. If "
+"`PPP` returns to `ppp` the connection has been lost. This is good to know "
+"because it shows the connection status. Capital P's represent a connection "
+"to the ISP and lowercase p's show that the connection has been lost."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:648
+#, no-wrap
+msgid "Debugging"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:654
+msgid ""
+"If a connection cannot be established, turn hardware flow CTS/RTS to off "
+"using `set ctsrts off`. This is mainly the case when connected to some PPP-"
+"capable terminal servers, where PPP hangs when it tries to write data to the "
+"communication link, and waits for a Clear To Send (CTS) signal which may "
+"never come. When using this option, include `set accmap` as it may be "
+"required to defeat hardware dependent on passing certain characters from end "
+"to end, most of the time XON/XOFF. Refer to man:ppp[8] for more information "
+"on this option and how it is used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:657
+msgid ""
+"An older modem may need `set parity even`. Parity is set at none be "
+"default, but is used for error checking with a large increase in traffic, on "
+"older modems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:660
+msgid ""
+"PPP may not return to the command mode, which is usually a negotiation error "
+"where the ISP is waiting for negotiating to begin. At this point, using "
+"`~p` will force ppp to start sending the configuration information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:663
+msgid ""
+"If a login prompt never appears, PAP or CHAP authentication is most likely "
+"required. To use PAP or CHAP, add the following options to PPP before going "
+"into terminal mode:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:667
+#, no-wrap
+msgid "ppp ON example> set authname myusername\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:670
+msgid ""
+"Where _myusername_ should be replaced with the username that was assigned by "
+"the ISP."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:674
+#, no-wrap
+msgid "ppp ON example> set authkey mypassword\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:677
+msgid ""
+"Where _mypassword_ should be replaced with the password that was assigned by "
+"the ISP."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:683
+msgid ""
+"If a connection is established, but cannot seem to find any domain name, try "
+"to man:ping[8] an IP address. If there is 100 percent (100%) packet loss, "
+"it is likely that a default route was not assigned. Double check that `add "
+"default HISADDR` was set during the connection. If a connection can be made "
+"to a remote IP address, it is possible that a resolver address has not been "
+"added to [.filename]#/etc/resolv.conf#. This file should look like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:689
+#, no-wrap
+msgid ""
+"domain example.com\n"
+"nameserver x.x.x.x\n"
+"nameserver y.y.y.y\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:692
+msgid ""
+"Where _x.x.x.x_ and _y.y.y.y_ should be replaced with the IP address of the "
+"ISP's DNS servers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:694
+msgid ""
+"To configure man:syslog[3] to provide logging for the PPP connection, make "
+"sure this line exists in [.filename]#/etc/syslog.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:699
+#, no-wrap
+msgid ""
+"!ppp\n"
+"*.* /var/log/ppp.log\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:702
+#, no-wrap
+msgid "Using PPP over Ethernet (PPPoE)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:705
+msgid "This section describes how to set up PPP over Ethernet (PPPoE)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:707
+msgid "Here is an example of a working [.filename]#ppp.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:713
+#, no-wrap
+msgid ""
+"default:\n"
+" set log Phase tun command # you can add more detailed logging if you wish\n"
+" set ifaddr 10.0.0.1/0 10.0.0.2/0\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:721
+#, no-wrap
+msgid ""
+"name_of_service_provider:\n"
+" set device PPPoE:xl1 # replace xl1 with your Ethernet device\n"
+" set authname YOURLOGINNAME\n"
+" set authkey YOURPASSWORD\n"
+" set dial\n"
+" set login\n"
+" add default HISADDR\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:724
+msgid "As `root`, run:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:728
+#, no-wrap
+msgid "# ppp -ddial name_of_service_provider\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:731
+msgid "Add the following to [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:738
+#, no-wrap
+msgid ""
+"ppp_enable=\"YES\"\n"
+"ppp_mode=\"ddial\"\n"
+"ppp_nat=\"YES\"\t# if you want to enable nat for your local network, otherwise NO\n"
+"ppp_profile=\"name_of_service_provider\"\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:740
+#, no-wrap
+msgid "Using a PPPoE Service Tag"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:744
+msgid ""
+"Sometimes it will be necessary to use a service tag to establish the "
+"connection. Service tags are used to distinguish between different PPPoE "
+"servers attached to a given network."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:746
+msgid ""
+"Any required service tag information should be in the documentation provided "
+"by the ISP."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:753
+msgid ""
+"As a last resort, one could try installing the package:net/rr-pppoe[] "
+"package or port. Bear in mind however, this may de-program your modem and "
+"render it useless, so think twice before doing it. Simply install the "
+"program shipped with the modem. Then, access the menu:System[] menu from "
+"the program. The name of the profile should be listed there. It is usually "
+"_ISP_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:756
+msgid ""
+"The profile name (service tag) will be used in the PPPoE configuration entry "
+"in [.filename]#ppp.conf# as the provider part for `set device`. Refer to "
+"man:ppp[8] for full details. It should look like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:760
+#, no-wrap
+msgid "set device PPPoE:xl1:ISP\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:763
+msgid ""
+"Do not forget to change _xl1_ to the proper device for the Ethernet card."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:765
+msgid "Do not forget to change _ISP_ to the profile."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:767
+msgid ""
+"For additional information, refer to http://renaud.waldura.com/doc/freebsd/"
+"pppoe/[Cheaper Broadband with FreeBSD on DSL] by Renaud Waldura."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:769
+#, no-wrap
+msgid "PPPoE with a 3Com(R) HomeConnect(TM) ADSL Modem Dual Link"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:772
+msgid ""
+"This modem does not follow the PPPoE specification defined in http://www."
+"faqs.org/rfcs/rfc2516.html[RFC 2516]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:775
+msgid ""
+"In order to make FreeBSD capable of communicating with this device, a sysctl "
+"must be set. This can be done automatically at boot time by updating [."
+"filename]#/etc/sysctl.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:779
+#, no-wrap
+msgid "net.graph.nonstandard_pppoe=1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:782
+msgid "or can be done immediately with the command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:786
+#, no-wrap
+msgid "# sysctl net.graph.nonstandard_pppoe=1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:789
+msgid ""
+"Unfortunately, because this is a system-wide setting, it is not possible to "
+"talk to a normal PPPoE client or server and a 3Com(R) HomeConnect(TM) ADSL "
+"Modem at the same time."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:791
+#, no-wrap
+msgid "Using PPP over ATM (PPPoA)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:795
+msgid ""
+"The following describes how to set up PPP over ATM (PPPoA). PPPoA is a "
+"popular choice among European DSL providers."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:796
+#, no-wrap
+msgid "Using mpd"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:801
+msgid ""
+"The mpd application can be used to connect to a variety of services, in "
+"particular PPTP services. It can be installed using the package:net/mpd5[] "
+"package or port. Many ADSL modems require that a PPTP tunnel is created "
+"between the modem and computer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:807
+msgid ""
+"Once installed, configure mpd to suit the provider's settings. The port "
+"places a set of sample configuration files which are well documented in [."
+"filename]#/usr/local/etc/mpd/#. A complete guide to configure mpd is "
+"available in HTML format in [.filename]#/usr/ports/shared/doc/mpd/#. Here "
+"is a sample configuration for connecting to an ADSL service with mpd. The "
+"configuration is spread over two files, first the [.filename]#mpd.conf#:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:811
+msgid "This example [.filename]#mpd.conf# only works with mpd 4.x."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:817
+#, no-wrap
+msgid ""
+"default:\n"
+" load adsl\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:823
+#, no-wrap
+msgid ""
+"adsl:\n"
+" new -i ng0 adsl adsl\n"
+" set bundle authname username <.>\n"
+" set bundle password password <.>\n"
+" set bundle disable multilink\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:828
+#, no-wrap
+msgid ""
+" set link no pap acfcomp protocomp\n"
+" set link disable chap\n"
+" set link accept chap\n"
+" set link keep-alive 30 10\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:831
+#, no-wrap
+msgid ""
+" set ipcp no vjcomp\n"
+" set ipcp ranges 0.0.0.0/0 0.0.0.0/0\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:836
+#, no-wrap
+msgid ""
+" set iface route default\n"
+" set iface disable on-demand\n"
+" set iface enable proxy-arp\n"
+" set iface idle 0\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:838
+#, no-wrap
+msgid " open\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:841
+msgid "The username used to authenticate with your ISP."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:842
+msgid "The password used to authenticate with your ISP."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:845
+msgid ""
+"Information about the link, or links, to establish is found in [."
+"filename]#mpd.links#. An example [.filename]#mpd.links# to accompany the "
+"above example is given beneath:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:854
+#, no-wrap
+msgid ""
+"adsl:\n"
+" set link type pptp\n"
+" set pptp mode active\n"
+" set pptp enable originate outcall\n"
+" set pptp self 10.0.0.1 <.>\n"
+" set pptp peer 10.0.0.138 <.>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:857
+msgid "The IP address of FreeBSD computer running mpd."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:858
+msgid ""
+"The IP address of the ADSL modem. The Alcatel SpeedTouch(TM) Home defaults "
+"to `10.0.0.138`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:860
+msgid ""
+"It is possible to initialize the connection easily by issuing the following "
+"command as `root`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:864
+#, no-wrap
+msgid "# mpd -b adsl\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:867
+msgid "To view the status of the connection:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:873
+#, no-wrap
+msgid ""
+"% ifconfig ng0\n"
+"ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1500\n"
+" inet 216.136.204.117 --> 204.152.186.171 netmask 0xffffffff\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:876
+msgid ""
+"Using mpd is the recommended way to connect to an ADSL service with FreeBSD."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:877
+#, no-wrap
+msgid "Using pptpclient"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:880
+msgid ""
+"It is also possible to use FreeBSD to connect to other PPPoA services using "
+"package:net/pptpclient[]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:884
+msgid ""
+"To use package:net/pptpclient[] to connect to a DSL service, install the "
+"port or package, then edit [.filename]#/etc/ppp/ppp.conf#. An example "
+"section of [.filename]#ppp.conf# is given below. For further information on "
+"[.filename]#ppp.conf# options consult man:ppp[8]."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:895
+#, no-wrap
+msgid ""
+"adsl:\n"
+" set log phase chat lcp ipcp ccp tun command\n"
+" set timeout 0\n"
+" enable dns\n"
+" set authname username <.>\n"
+" set authkey password <.>\n"
+" set ifaddr 0 0\n"
+" add default HISADDR\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:898
+msgid "The username for the DSL provider."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:899
+msgid "The password for your account."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:904
+msgid ""
+"Since the account's password is added to [.filename]#ppp.conf# in plain text "
+"form, make sure nobody can read the contents of this file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:909
+#, no-wrap
+msgid ""
+"# chown root:wheel /etc/ppp/ppp.conf\n"
+"# chmod 600 /etc/ppp/ppp.conf\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:918
+msgid ""
+"This will open a tunnel for a PPP session to the DSL router. Ethernet DSL "
+"modems have a preconfigured LAN IP address to connect to. In the case of "
+"the Alcatel SpeedTouch(TM) Home, this address is `10.0.0.138`. The router's "
+"documentation should list the address the device uses. To open the tunnel "
+"and start a PPP session:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:922
+#, no-wrap
+msgid "# pptp address adsl\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:928
+msgid ""
+"If an ampersand (\"&\") is added to the end of this command, pptp will "
+"return the prompt."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:932
+msgid ""
+"A [.filename]#tun# virtual tunnel device will be created for interaction "
+"between the pptp and ppp processes. Once the prompt is returned, or the "
+"pptp process has confirmed a connection, examine the tunnel:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:939
+#, no-wrap
+msgid ""
+"% ifconfig tun0\n"
+"tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500\n"
+" inet 216.136.204.21 --> 204.152.186.171 netmask 0xffffff00\n"
+"\tOpened by PID 918\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/ppp-and-slip/_index.adoc:942
+msgid ""
+"If the connection fails, check the configuration of the router, which is "
+"usually accessible using a web browser. Also, examine the output of `pptp` "
+"and the contents of the log file, [.filename]#/var/log/ppp.log# for clues."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/preface/_index.adoc b/documentation/content/en/books/handbook/preface/_index.adoc
index 07a2ad9a5d..ffe371a2dc 100644
--- a/documentation/content/en/books/handbook/preface/_index.adoc
+++ b/documentation/content/en/books/handbook/preface/_index.adoc
@@ -6,7 +6,7 @@ description: The FreeBSD newcomer will find that the first section of this book
tags: ["preface", "audience", "organization", "conventions", "acknowledgments"]
showBookMenu: true
weight: 1
-path: "/books/handbook/"
+path: "/books/handbook/preface/"
---
[preface]
@@ -55,21 +55,33 @@ Some of these chapters may recommend that you do some prior reading, and this is
For a list of additional sources of information, please see crossref:bibliography[bibliography,Bibliography].
+[[preface-changes-from4]]
+== Fourth Edition
+
+The current version of the Handbook represents the cumulative effort of a working group that has been reviewing and updating all Handbook content.
+These are the major updates since the fourth edition of the Handbook.
+
+* The Handbook has been converted from link:https://docbook.org/[Docbook] to link:https://gohugo.io/[Hugo] and link:https://asciidoctor.org/[AsciiDoctor]
+* The link:https://docs.FreeBSD.org[FreeBSD Documentation Portal] has been created.
+* crossref:wayland[wayland,Wayland] has been added with information about installing and configuring Wayland under FreeBSD.
+* The crossref:bibliography[bibliography,Bibliography] has been extensively updated.
+
+
[[preface-changes-from3]]
-== Changes from the Third Edition
+== Third Edition
The current online version of the Handbook represents the cumulative effort of many hundreds of contributors over the past 10 years.
The following are some of the significant changes since the two volume third edition was published in 2004:
* crossref:wine[wine,WINE] has been added with information about how to run Windows(R) applications on FreeBSD.
* crossref:dtrace[dtrace,DTrace] has been added with information about the powerful DTrace performance analysis tool.
-* crossref:filesystems[filesystems,Other File Systems] has been added with information about non-native file systems in FreeBSD, such as ZFS from Sun(TM).
+* crossref:filesystems[filesystems,Other File Systems] have been added with information about non-native file systems in FreeBSD, such as ZFS from Sun(TM).
* crossref:audit[audit,Security Event Auditing] has been added to cover the new auditing capabilities in FreeBSD and explain its use.
* crossref:virtualization[virtualization,Virtualization] has been added with information about installing FreeBSD on virtualization software.
* crossref:bsdinstall[bsdinstall,Installing FreeBSD] has been added to cover installation of FreeBSD using the new installation utility, bsdinstall.
[[preface-changes-from2]]
-== Changes from the Second Edition (2004)
+== Second Edition (2004)
The third edition was the culmination of over two years of work by the dedicated members of the FreeBSD Documentation Project.
The printed edition grew to such a size that it was necessary to publish as two separate volumes.
@@ -87,7 +99,7 @@ The following are the major changes in this new edition:
* A number of aesthetic improvements have been made to the tables and figures throughout the book.
[[preface-changes]]
-== Changes from the First Edition (2001)
+== First Edition (2001)
The second edition was the culmination of over two years of work by the dedicated members of the FreeBSD Documentation Project.
The following were the major changes in this edition:
@@ -140,6 +152,9 @@ Covers the installation of third-party software with both FreeBSD's innovative "
_crossref:x11[x11,The X Window System]_::
Describes the X Window System in general and using X11 on FreeBSD in particular. Also describes common desktop environments such as KDE and GNOME.
+_crossref:wayland[wayland,Wayland]_::
+Describes the Wayland display server in general and using Wayland on FreeBSD in particular. Also describes common compositors such as Wayfire, Hikari and Sway.
+
_crossref:desktop[desktop,Desktop Applications]_::
Lists some common desktop applications, such as web browsers and productivity suites, and describes how to install them on FreeBSD.
@@ -155,6 +170,9 @@ Describes managing printers on FreeBSD, including information about banner pages
_crossref:linuxemu[linuxemu,Linux® Binary Compatibility]_::
Describes the Linux(R) compatibility features of FreeBSD. Also provides detailed installation instructions for many popular Linux(R) applications such as Oracle(R) and Mathematica(R).
+_crossref:wine[wine,WINE]_::
+Describes WINE and provides detailed installation instructions. Also describes how WINE operates, how to install a GUI helper, how to run Windows(R) applications on FreeBSD, and offers other tips and solutions.
+
_crossref:config[config-tuning,Configuration and Tuning]_::
Describes the parameters available for system administrators to tune a FreeBSD system for optimum performance. Also describes the various configuration files used in FreeBSD and where to find them.
@@ -179,8 +197,11 @@ Describes how to manage storage media and filesystems with FreeBSD. This include
_crossref:geom[geom,GEOM: Modular Disk Transformation Framework]_::
Describes what the GEOM framework in FreeBSD is and how to configure various supported RAID levels.
+_crossref:zfs[zfs,The OpenZFS storage platform]_::
+Describes the OpenZFS storage platform and provides a quick-start guide and information about advanced topics running OpenZFS under FreeBSD.
+
_crossref:filesystems[filesystems,Other File Systems]_::
-Examines support of non-native file systems in FreeBSD, like the Z File System from Sun(TM).
+Examines support for non-native file systems under FreeBSD like ext2, ext3 and ext4.
_crossref:virtualization[virtualization,Virtualization]_::
Describes what virtualization systems offer, and how they can be used with FreeBSD.
@@ -192,13 +213,13 @@ _crossref:cutting-edge[updating-upgrading,Updating and Upgrading FreeBSD]_::
Explains the differences between FreeBSD-STABLE, FreeBSD-CURRENT, and FreeBSD releases. Describes which users would benefit from tracking a development system and outlines that process. Covers the methods users may take to update their system to the latest security release.
_crossref:dtrace[dtrace,DTrace]_::
-Describes how to configure and use the DTrace tool from Sun(TM) in FreeBSD. Dynamic tracing can help locate performance issues, by performing real time system analysis.
+Describes how to configure and use the DTrace tool from Sun(TM) on FreeBSD. Dynamic tracing can help locate performance issues, by performing real time system analysis.
-_crossref:serialcomms[serialcomms,Serial Communications]_::
-Explains how to connect terminals and modems to your FreeBSD system for both dial in and dial out connections.
+_crossref:usb-device-mode[usb-device-mode,USB Device Mode / USB OTG]_::
+Explains the use of USB Device Mode and USB On The Go (USB OTG) on FreeBSD.
_crossref:ppp-and-slip[ppp-and-slip,PPP]_::
-Describes how to use PPP to connect to remote systems with FreeBSD.
+Describes how to use PPP to connect to remote systems in FreeBSD.
_crossref:mail[mail,Electronic Mail]_::
Explains the different components of an email server and dives into simple configuration topics for the most popular mail server software: sendmail.
diff --git a/documentation/content/en/books/handbook/preface/_index.po b/documentation/content/en/books/handbook/preface/_index.po
new file mode 100644
index 0000000000..cdd3c29c34
--- /dev/null
+++ b/documentation/content/en/books/handbook/preface/_index.po
@@ -0,0 +1,1067 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-01-21 20:00-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/preface/_index.adoc:1
+#, no-wrap
+msgid "The FreeBSD newcomer will find that the first section of this book guides the user through the FreeBSD installation process and gently introduces the concepts and conventions that underpin UNIX"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/preface/_index.adoc:1
+#: documentation/content/en/books/handbook/preface/_index.adoc:14
+#, no-wrap
+msgid "Preface"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/preface/_index.adoc:48
+#, no-wrap
+msgid "Intended Audience"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:52
+msgid ""
+"The FreeBSD newcomer will find that the first section of this book guides "
+"the user through the FreeBSD installation process and gently introduces the "
+"concepts and conventions that underpin UNIX(R). Working through this "
+"section requires little more than the desire to explore, and the ability to "
+"take on board new concepts as they are introduced."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:55
+msgid ""
+"Once you have traveled this far, the second, far larger, section of the "
+"Handbook is a comprehensive reference to all manner of topics of interest to "
+"FreeBSD system administrators. Some of these chapters may recommend that "
+"you do some prior reading, and this is noted in the synopsis at the "
+"beginning of each chapter."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:57
+msgid ""
+"For a list of additional sources of information, please see crossref:"
+"bibliography[bibliography,Bibliography]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/preface/_index.adoc:59
+#, no-wrap
+msgid "Fourth Edition"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:63
+msgid ""
+"The current version of the Handbook represents the cumulative effort of a "
+"working group that has been reviewing and updating all Handbook content. "
+"These are the major updates since the fourth edition of the Handbook."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:65
+msgid ""
+"The Handbook has been converted from link:https://docbook.org/[Docbook] to "
+"link:https://gohugo.io/[Hugo] and link:https://asciidoctor.org/[AsciiDoctor]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:66
+msgid ""
+"The link:https://docs.FreeBSD.org[FreeBSD Documentation Portal] has been "
+"created."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:67
+msgid ""
+"crossref:wayland[wayland,Wayland] has been added with information about "
+"installing and configuring Wayland under FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:68
+msgid ""
+"The crossref:bibliography[bibliography,Bibliography] has been extensively "
+"updated."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/preface/_index.adoc:71
+#, no-wrap
+msgid "Third Edition"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:75
+msgid ""
+"The current online version of the Handbook represents the cumulative effort "
+"of many hundreds of contributors over the past 10 years. The following are "
+"some of the significant changes since the two volume third edition was "
+"published in 2004:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:77
+msgid ""
+"crossref:wine[wine,WINE] has been added with information about how to run "
+"Windows(R) applications on FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:78
+msgid ""
+"crossref:dtrace[dtrace,DTrace] has been added with information about the "
+"powerful DTrace performance analysis tool."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:79
+msgid ""
+"crossref:filesystems[filesystems,Other File Systems] have been added with "
+"information about non-native file systems in FreeBSD, such as ZFS from "
+"Sun(TM)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:80
+msgid ""
+"crossref:audit[audit,Security Event Auditing] has been added to cover the "
+"new auditing capabilities in FreeBSD and explain its use."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:81
+msgid ""
+"crossref:virtualization[virtualization,Virtualization] has been added with "
+"information about installing FreeBSD on virtualization software."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:82
+msgid ""
+"crossref:bsdinstall[bsdinstall,Installing FreeBSD] has been added to cover "
+"installation of FreeBSD using the new installation utility, bsdinstall."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/preface/_index.adoc:84
+#, no-wrap
+msgid "Second Edition (2004)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:89
+msgid ""
+"The third edition was the culmination of over two years of work by the "
+"dedicated members of the FreeBSD Documentation Project. The printed edition "
+"grew to such a size that it was necessary to publish as two separate "
+"volumes. The following are the major changes in this new edition:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:91
+msgid ""
+"crossref:config[config-tuning,Configuration and Tuning] has been expanded "
+"with new information about the ACPI power and resource management, the "
+"`cron` system utility, and more kernel tuning options."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:92
+msgid ""
+"crossref:security[security,Security] has been expanded with new information "
+"about virtual private networks (VPNs), file system access control lists "
+"(ACLs), and security advisories."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:93
+msgid ""
+"crossref:mac[mac,Mandatory Access Control] is a new chapter with this "
+"edition. It explains what MAC is and how this mechanism can be used to "
+"secure a FreeBSD system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:94
+msgid ""
+"crossref:disks[disks,Storage] has been expanded with new information about "
+"USB storage devices, file system snapshots, file system quotas, file and "
+"network backed filesystems, and encrypted disk partitions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:95
+msgid ""
+"A troubleshooting section has been added to crossref:ppp-and-slip[ppp-and-"
+"slip,PPP]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:96
+msgid ""
+"crossref:mail[mail,Electronic Mail] has been expanded with new information "
+"about using alternative transport agents, SMTP authentication, UUCP, "
+"fetchmail, procmail, and other advanced topics."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:97
+msgid ""
+"crossref:network-servers[network-servers,Network Servers] is all new with "
+"this edition. This chapter includes information about setting up the Apache "
+"HTTP Server, ftpd, and setting up a server for Microsoft(R) Windows(R) "
+"clients with Samba. Some sections from crossref:advanced-networking[advanced-"
+"networking,Advanced Networking] were moved here to improve the presentation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:98
+msgid ""
+"crossref:advanced-networking[advanced-networking,Advanced Networking] has "
+"been expanded with new information about using Bluetooth(R) devices with "
+"FreeBSD, setting up wireless networks, and Asynchronous Transfer Mode (ATM) "
+"networking."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:99
+msgid ""
+"A glossary has been added to provide a central location for the definitions "
+"of technical terms used throughout the book."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:100
+msgid ""
+"A number of aesthetic improvements have been made to the tables and figures "
+"throughout the book."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/preface/_index.adoc:102
+#, no-wrap
+msgid "First Edition (2001)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:106
+msgid ""
+"The second edition was the culmination of over two years of work by the "
+"dedicated members of the FreeBSD Documentation Project. The following were "
+"the major changes in this edition:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:108
+msgid "A complete Index has been added."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:109
+msgid "All ASCII figures have been replaced by graphical diagrams."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:110
+msgid ""
+"A standard synopsis has been added to each chapter to give a quick summary "
+"of what information the chapter contains, and what the reader is expected to "
+"know."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:111
+msgid ""
+"The content has been logically reorganized into three parts: \"Getting "
+"Started\", \"System Administration\", and \"Appendices\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:112
+msgid ""
+"crossref:basics[basics,FreeBSD Basics] has been expanded to contain "
+"additional information about processes, daemons, and signals."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:113
+msgid ""
+"crossref:ports[ports,Installing Applications: Packages and Ports] has been "
+"expanded to contain additional information about binary package management."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:114
+msgid ""
+"crossref:x11[x11,The X Window System] has been completely rewritten with an "
+"emphasis on using modern desktop technologies such as KDE and GNOME on "
+"XFree86(TM) 4.X."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:115
+msgid "crossref:boot[boot,The FreeBSD Booting Process] has been expanded."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:116
+msgid ""
+"crossref:disks[disks,Storage] has been written from what used to be two "
+"separate chapters on \"Disks\" and \"Backups\". We feel that the topics are "
+"easier to comprehend when presented as a single chapter. A section on RAID "
+"(both hardware and software) has also been added."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:117
+msgid ""
+"crossref:serialcomms[serialcomms,Serial Communications] has been completely "
+"reorganized and updated for FreeBSD 4.X/5.X."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:118
+msgid "crossref:ppp-and-slip[ppp-and-slip,PPP] has been substantially updated."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:119
+msgid ""
+"Many new sections have been added to crossref:advanced-networking[advanced-"
+"networking,Advanced Networking]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:120
+msgid ""
+"crossref:mail[mail,Electronic Mail] has been expanded to include more "
+"information about configuring sendmail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:121
+msgid ""
+"crossref:linuxemu[linuxemu,Linux® Binary Compatibility] has been expanded to "
+"include information about installing Oracle(R) and SAP(R) R/3(R)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:122
+msgid "The following new topics are covered in this second edition:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:124
+msgid "crossref:config[config-tuning,Configuration and Tuning]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:125
+msgid "crossref:multimedia[multimedia,Multimedia]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/preface/_index.adoc:127
+#, no-wrap
+msgid "Organization of This Book"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:139
+msgid ""
+"This book is split into five logically distinct sections. The first "
+"section, _Getting Started_, covers the installation and basic usage of "
+"FreeBSD. It is expected that the reader will follow these chapters in "
+"sequence, possibly skipping chapters covering familiar topics. The second "
+"section, _Common Tasks_, covers some frequently used features of FreeBSD. "
+"This section, and all subsequent sections, can be read out of order. Each "
+"chapter begins with a succinct synopsis that describes what the chapter "
+"covers and what the reader is expected to already know. This is meant to "
+"allow the casual reader to skip around to find chapters of interest. The "
+"third section, _System Administration_, covers administration topics. The "
+"fourth section, _Network Communication_, covers networking and server "
+"topics. The fifth section contains appendices of reference information."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:140
+#, no-wrap
+msgid "_crossref:introduction[introduction,Introduction]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:142
+msgid ""
+"Introduces FreeBSD to a new user. It describes the history of the FreeBSD "
+"Project, its goals and development model."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:143
+#, no-wrap
+msgid "_crossref:bsdinstall[bsdinstall,Installing FreeBSD]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:145
+msgid ""
+"Walks a user through the entire installation process of FreeBSD 9._x_ and "
+"later using bsdinstall."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:146
+#, no-wrap
+msgid "_crossref:basics[basics,FreeBSD Basics]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:148
+msgid ""
+"Covers the basic commands and functionality of the FreeBSD operating system. "
+"If you are familiar with Linux(R) or another flavor of UNIX(R) then you can "
+"probably skip this chapter."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:149
+#, no-wrap
+msgid "_crossref:ports[ports,Installing Applications: Packages and Ports]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:151
+msgid ""
+"Covers the installation of third-party software with both FreeBSD's "
+"innovative \"Ports Collection\" and standard binary packages."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:152
+#, no-wrap
+msgid "_crossref:x11[x11,The X Window System]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:154
+msgid ""
+"Describes the X Window System in general and using X11 on FreeBSD in "
+"particular. Also describes common desktop environments such as KDE and GNOME."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:155
+#, no-wrap
+msgid "_crossref:wayland[wayland,Wayland]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:157
+msgid ""
+"Describes the Wayland display server in general and using Wayland on FreeBSD "
+"in particular. Also describes common compositors such as Wayfire, Hikari and "
+"Sway."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:158
+#, no-wrap
+msgid "_crossref:desktop[desktop,Desktop Applications]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:160
+msgid ""
+"Lists some common desktop applications, such as web browsers and "
+"productivity suites, and describes how to install them on FreeBSD."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:161
+#, no-wrap
+msgid "_crossref:multimedia[multimedia,Multimedia]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:163
+msgid ""
+"Shows how to set up sound and video playback support for your system. Also "
+"describes some sample audio and video applications."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:164
+#, no-wrap
+msgid "_crossref:kernelconfig[kernelconfig,Configuring the FreeBSD Kernel]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:166
+msgid ""
+"Explains why you might need to configure a new kernel and provides detailed "
+"instructions for configuring, building, and installing a custom kernel."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:167
+#, no-wrap
+msgid "_crossref:printing[printing,Printing]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:169
+msgid ""
+"Describes managing printers on FreeBSD, including information about banner "
+"pages, printer accounting, and initial setup."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:170
+#, no-wrap
+msgid "_crossref:linuxemu[linuxemu,Linux® Binary Compatibility]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:172
+msgid ""
+"Describes the Linux(R) compatibility features of FreeBSD. Also provides "
+"detailed installation instructions for many popular Linux(R) applications "
+"such as Oracle(R) and Mathematica(R)."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:173
+#, no-wrap
+msgid "_crossref:wine[wine,WINE]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:175
+msgid ""
+"Describes WINE and provides detailed installation instructions. Also "
+"describes how WINE operates, how to install a GUI helper, how to run "
+"Windows(R) applications on FreeBSD, and offers other tips and solutions."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:176
+#, no-wrap
+msgid "_crossref:config[config-tuning,Configuration and Tuning]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:178
+msgid ""
+"Describes the parameters available for system administrators to tune a "
+"FreeBSD system for optimum performance. Also describes the various "
+"configuration files used in FreeBSD and where to find them."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:179
+#, no-wrap
+msgid "_crossref:boot[boot,The FreeBSD Booting Process]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:181
+msgid ""
+"Describes the FreeBSD boot process and explains how to control this process "
+"with configuration options."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:182
+#, no-wrap
+msgid "_crossref:security[security,Security]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:184
+msgid ""
+"Describes many different tools available to help keep your FreeBSD system "
+"secure, including Kerberos, IPsec and OpenSSH."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:185
+#, no-wrap
+msgid "_crossref:jails[jails,Jails]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:187
+msgid ""
+"Describes the jails framework, and the improvements of jails over the "
+"traditional chroot support of FreeBSD."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:188
+#, no-wrap
+msgid "_crossref:mac[mac,Mandatory Access Control]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:190
+msgid ""
+"Explains what Mandatory Access Control (MAC) is and how this mechanism can "
+"be used to secure a FreeBSD system."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:191
+#, no-wrap
+msgid "_crossref:audit[audit,Security Event Auditing]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:193
+msgid ""
+"Describes what FreeBSD Event Auditing is, how it can be installed, "
+"configured, and how audit trails can be inspected or monitored."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:194
+#, no-wrap
+msgid "_crossref:disks[disks,Storage]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:196
+msgid ""
+"Describes how to manage storage media and filesystems with FreeBSD. This "
+"includes physical disks, RAID arrays, optical and tape media, memory-backed "
+"disks, and network filesystems."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:197
+#, no-wrap
+msgid "_crossref:geom[geom,GEOM: Modular Disk Transformation Framework]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:199
+msgid ""
+"Describes what the GEOM framework in FreeBSD is and how to configure various "
+"supported RAID levels."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:200
+#, no-wrap
+msgid "_crossref:zfs[zfs,The OpenZFS storage platform]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:202
+msgid ""
+"Describes the OpenZFS storage platform and provides a quick-start guide and "
+"information about advanced topics running OpenZFS under FreeBSD."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:203
+#, no-wrap
+msgid "_crossref:filesystems[filesystems,Other File Systems]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:205
+msgid ""
+"Examines support for non-native file systems under FreeBSD like ext2, ext3 "
+"and ext4."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:206
+#, no-wrap
+msgid "_crossref:virtualization[virtualization,Virtualization]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:208
+msgid ""
+"Describes what virtualization systems offer, and how they can be used with "
+"FreeBSD."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:209
+#, no-wrap
+msgid "_crossref:l10n[l10n,Localization - i18n/L10n Usage and Setup]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:211
+msgid ""
+"Describes how to use FreeBSD in languages other than English. Covers both "
+"system and application level localization."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:212
+#, no-wrap
+msgid "_crossref:cutting-edge[updating-upgrading,Updating and Upgrading FreeBSD]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:214
+msgid ""
+"Explains the differences between FreeBSD-STABLE, FreeBSD-CURRENT, and "
+"FreeBSD releases. Describes which users would benefit from tracking a "
+"development system and outlines that process. Covers the methods users may "
+"take to update their system to the latest security release."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:215
+#, no-wrap
+msgid "_crossref:dtrace[dtrace,DTrace]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:217
+msgid ""
+"Describes how to configure and use the DTrace tool from Sun(TM) on FreeBSD. "
+"Dynamic tracing can help locate performance issues, by performing real time "
+"system analysis."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:218
+#, no-wrap
+msgid "_crossref:usb-device-mode[usb-device-mode,USB Device Mode / USB OTG]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:220
+msgid ""
+"Explains the use of USB Device Mode and USB On The Go (USB OTG) on FreeBSD."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:221
+#, no-wrap
+msgid "_crossref:ppp-and-slip[ppp-and-slip,PPP]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:223
+msgid "Describes how to use PPP to connect to remote systems in FreeBSD."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:224
+#, no-wrap
+msgid "_crossref:mail[mail,Electronic Mail]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:226
+msgid ""
+"Explains the different components of an email server and dives into simple "
+"configuration topics for the most popular mail server software: sendmail."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:227
+#, no-wrap
+msgid "_crossref:network-servers[network-servers,Network Servers]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:229
+msgid ""
+"Provides detailed instructions and example configuration files to set up "
+"your FreeBSD machine as a network filesystem server, domain name server, "
+"network information system server, or time synchronization server."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:230
+#, no-wrap
+msgid "_crossref:firewalls[firewalls,Firewalls]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:232
+msgid ""
+"Explains the philosophy behind software-based firewalls and provides "
+"detailed information about the configuration of the different firewalls "
+"available for FreeBSD."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:233
+#, no-wrap
+msgid "_crossref:advanced-networking[advanced-networking,Advanced Networking]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:235
+msgid ""
+"Describes many networking topics, including sharing an Internet connection "
+"with other computers on your LAN, advanced routing topics, wireless "
+"networking, Bluetooth(R), ATM, IPv6, and much more."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:236
+#, no-wrap
+msgid "_crossref:mirrors[mirrors,Obtaining FreeBSD]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:238
+msgid ""
+"Lists different sources for obtaining FreeBSD media on CDROM or DVD as well "
+"as different sites on the Internet that allow you to download and install "
+"FreeBSD."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:239
+#, no-wrap
+msgid "_crossref:bibliography[bibliography,Bibliography]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:241
+msgid ""
+"This book touches on many different subjects that may leave you hungry for a "
+"more detailed explanation. The bibliography lists many excellent books that "
+"are referenced in the text."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:242
+#, no-wrap
+msgid "_crossref:eresources[eresources,Resources on the Internet]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:244
+msgid ""
+"Describes the many forums available for FreeBSD users to post questions and "
+"engage in technical conversations about FreeBSD."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:245
+#, no-wrap
+msgid "_crossref:pgpkeys[pgpkeys,OpenPGP Keys]_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:247
+msgid "Lists the PGP fingerprints of several FreeBSD Developers."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/preface/_index.adoc:249
+#, no-wrap
+msgid "Conventions used in this book"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:252
+msgid ""
+"To provide a consistent and easy to read text, several conventions are "
+"followed throughout the book."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/preface/_index.adoc:254
+#, no-wrap
+msgid "Typographic Conventions"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:256
+#, no-wrap
+msgid "_Italic_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:258
+msgid ""
+"An _italic_ font is used for filenames, URLs, emphasized text, and the first "
+"usage of technical terms."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:259
+#, no-wrap
+msgid "`Monospace`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:261
+msgid ""
+"A `monospaced` font is used for error messages, commands, environment "
+"variables, names of ports, hostnames, user names, group names, device names, "
+"variables, and code fragments."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/preface/_index.adoc:262
+#, no-wrap
+msgid "Bold"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:264
+msgid "A *bold* font is used for applications, commands, and keys."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/preface/_index.adoc:266
+#, no-wrap
+msgid "User Input"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:270
+msgid ""
+"Keys are shown in *bold* to stand out from other text. Key combinations "
+"that are meant to be typed simultaneously are shown with `+` between the "
+"keys, such as:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:272
+msgid "kbd:[Ctrl+Alt+Del]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:274
+msgid ""
+"Meaning the user should type the kbd:[Ctrl], kbd:[Alt], and kbd:[Del] keys "
+"at the same time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:276
+msgid ""
+"Keys that are meant to be typed in sequence will be separated with commas, "
+"for example:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:278
+msgid "kbd:[Ctrl+X], kbd:[Ctrl+S]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:280
+msgid ""
+"Would mean that the user is expected to type the kbd:[Ctrl] and kbd:[X] keys "
+"simultaneously and then to type the kbd:[Ctrl] and kbd:[S] keys "
+"simultaneously."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/preface/_index.adoc:282
+#, no-wrap
+msgid "Examples"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:286
+msgid ""
+"Examples starting with [.filename]#C:\\># indicate a MS-DOS(R) command. "
+"Unless otherwise noted, these commands may be executed from a \"Command "
+"Prompt\" window in a modern Microsoft(R) Windows(R) environment."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/preface/_index.adoc:290
+#, no-wrap
+msgid "C:\\> tools\\fdimage floppies\\kern.flp A:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:294
+msgid ""
+"Examples starting with # indicate a command that must be invoked as the "
+"superuser in FreeBSD. You can login as `root` to type the command, or login "
+"as your normal account and use man:su[1] to gain superuser privileges."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/preface/_index.adoc:298
+#, no-wrap
+msgid "# dd if=kern.flp of=/dev/fd0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:302
+msgid ""
+"Examples starting with % indicate a command that should be invoked from a "
+"normal user account. Unless otherwise noted, C-shell syntax is used for "
+"setting environment variables and other shell commands."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/preface/_index.adoc:306
+#, no-wrap
+msgid "% top\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/preface/_index.adoc:309
+#, no-wrap
+msgid "Acknowledgments"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:313
+msgid ""
+"The book you are holding represents the efforts of many hundreds of people "
+"around the world. Whether they sent in fixes for typos, or submitted "
+"complete chapters, all the contributions have been useful."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/preface/_index.adoc:320
+msgid ""
+"Several companies have supported the development of this document by paying "
+"authors to work on it full-time, paying for publication, etc. In "
+"particular, BSDi (subsequently acquired by http://www.windriver.com[Wind "
+"River Systems]) paid members of the FreeBSD Documentation Project to work on "
+"improving this book full time leading up to the publication of the first "
+"printed edition in March 2000 (ISBN 1-57176-241-8). Wind River Systems then "
+"paid several additional authors to make a number of improvements to the "
+"print-output infrastructure and to add additional chapters to the text. "
+"This work culminated in the publication of the second printed edition in "
+"November 2001 (ISBN 1-57176-303-1). In 2003-2004, http://www.freebsdmall."
+"com[FreeBSD Mall, Inc], paid several contributors to improve the Handbook in "
+"preparation for the third printed edition. The third printed edition has "
+"been split into two volumes. Both volumes have been published as The "
+"FreeBSD Handbook 3rd Edition Volume 1: User Guide (ISBN 1-57176-327-9) and "
+"The FreeBSD Handbook 3rd Edition Volume 2: Administrators Guide (ISBN "
+"1-57176-328-7)."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/printing/_index.adoc b/documentation/content/en/books/handbook/printing/_index.adoc
index 39d002377c..21b1faa92e 100644
--- a/documentation/content/en/books/handbook/printing/_index.adoc
+++ b/documentation/content/en/books/handbook/printing/_index.adoc
@@ -1,13 +1,13 @@
---
-title: Chapter 9. Printing
+title: Chapter 11. Printing
part: Part II. Common Tasks
prev: books/handbook/kernelconfig
next: books/handbook/linuxemu
description: This chapter covers the printing system in FreeBSD
tags: ["printing", "CUPS", "LPD", "PostScript", "PDLs", "HPLIP", "LPRng"]
showBookMenu: true
-weight: 12
-path: "/books/handbook/"
+weight: 14
+path: "/books/handbook/printing/"
---
[[printing]]
@@ -18,7 +18,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 9
+:sectnumoffset: 11
:partnums:
:source-highlighter: rouge
:experimental:
@@ -616,13 +616,6 @@ Modify [.filename]#/etc/printcap# to use this new input filter:
Test the filter by printing PostScript(R) and plain text files.
-[[printing-lpd-filters-othersmart]]
-==== Other Smart Filters
-
-Writing a filter that detects many different types of input and formats them correctly is challenging.
-package:print/apsfilter[] from the Ports Collection is a smart "magic" filter that detects dozens of file types and automatically converts them to the `PDL` understood by the printer.
-See http://www.apsfilter.org[] for more details.
-
[[printing-lpd-queues]]
=== Multiple Queues
diff --git a/documentation/content/en/books/handbook/printing/_index.po b/documentation/content/en/books/handbook/printing/_index.po
new file mode 100644
index 0000000000..66693d99d1
--- /dev/null
+++ b/documentation/content/en/books/handbook/printing/_index.po
@@ -0,0 +1,1629 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-07-15 16:41-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/printing/_index.adoc:1
+#, no-wrap
+msgid "This chapter covers the printing system in FreeBSD"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/printing/_index.adoc:1
+#, no-wrap
+msgid "Part II. Common Tasks"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/printing/_index.adoc:1
+#, no-wrap
+msgid "Chapter 11. Printing"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/printing/_index.adoc:14
+#, no-wrap
+msgid "Printing"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:54
+msgid ""
+"Putting information on paper is a vital function, despite many attempts to "
+"eliminate it. Printing has two basic components. The data must be "
+"delivered to the printer, and must be in a form that the printer can "
+"understand."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/printing/_index.adoc:56
+#, no-wrap
+msgid "Quick Start"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:61
+msgid ""
+"Basic printing can be set up quickly. The printer must be capable of "
+"printing plain `ASCII` text. For printing to other types of files, see "
+"<<printing-lpd-filters>>."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:65
+msgid "Create a directory to store files while they are being printed:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:71
+#: documentation/content/en/books/handbook/printing/_index.adoc:341
+#, no-wrap
+msgid ""
+"# mkdir -p /var/spool/lpd/lp\n"
+"# chown daemon:daemon /var/spool/lpd/lp\n"
+"# chmod 770 /var/spool/lpd/lp\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:74
+msgid "As `root`, create [.filename]#/etc/printcap# with these contents:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:83
+#, no-wrap
+msgid ""
+"lp:\\\n"
+"lp=/dev/unlpt0:\\ <.>\n"
+"sh:\\\n"
+"mx#0:\\\n"
+"sd=/var/spool/lpd/lp:\\\n"
+"lf=/var/log/lpd-errs:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:86
+msgid "This line is for a printer connected to a `USB` port."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:88
+msgid "For a printer connected to a parallel or \"printer\" port, use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:92
+#, no-wrap
+msgid ":lp=/dev/lpt0:\\\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:95
+msgid "For a printer connected directly to a network, use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:99
+#, no-wrap
+msgid ":lp=:rm=network-printer-name:rp=raw:\\\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:102
+msgid ""
+"Replace _network-printer-name_ with the `DNS` host name of the network "
+"printer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:104
+msgid "Enable LPD by editing [.filename]#/etc/rc.conf#, adding this line:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:108
+#: documentation/content/en/books/handbook/printing/_index.adoc:383
+#, no-wrap
+msgid "lpd_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:111
+#: documentation/content/en/books/handbook/printing/_index.adoc:386
+msgid "Start the service:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:116
+#, no-wrap
+msgid ""
+"# service lpd start\n"
+"Starting lpd.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:119
+msgid "Print a test:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:123
+#, no-wrap
+msgid "# printf \"1. This printer can print.\\n2. This is the second line.\\n\" | lpr\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:128
+msgid ""
+"If both lines do not start at the left border, but \"stairstep\" instead, "
+"see <<printing-lpd-filters-stairstep>>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:132
+msgid ""
+"Text files can now be printed with `lpr`. Give the filename on the command "
+"line, or pipe output directly into `lpr`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:137
+#, no-wrap
+msgid ""
+"% lpr textfile.txt\n"
+"% ls -lh | lpr\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/printing/_index.adoc:141
+#, no-wrap
+msgid "Printer Connections"
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:148
+msgid ""
+"Printers are connected to computer systems in a variety of ways. Small "
+"desktop printers are usually connected directly to a computer's `USB` port. "
+"Older printers are connected to a parallel or \"printer\" port. Some "
+"printers are directly connected to a network, making it easy for multiple "
+"computers to share them. A few printers use a rare serial port connection."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:150
+msgid "FreeBSD can communicate with all of these types of printers."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/printing/_index.adoc:152
+#, no-wrap
+msgid "`USB`"
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:154
+msgid ""
+"`USB` printers can be connected to any available `USB` port on the computer."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:160
+msgid ""
+"When FreeBSD detects a `USB` printer, two device entries are created: [."
+"filename]#/dev/ulpt0# and [.filename]#/dev/unlpt0#. Data sent to either "
+"device will be relayed to the printer. After each print job, [."
+"filename]#ulpt0# resets the `USB` port. Resetting the port can cause "
+"problems with some printers, so the [.filename]#unlpt0# device is usually "
+"used instead. [.filename]#unlpt0# does not reset the USB port at all."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/printing/_index.adoc:162
+#, no-wrap
+msgid "Parallel (`IEEE`-1284)"
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:165
+msgid ""
+"The parallel port device is [.filename]#/dev/lpt0#. This device appears "
+"whether a printer is attached or not, it is not autodetected."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:170
+msgid ""
+"Vendors have largely moved away from these \"legacy\" ports, and many "
+"computers no longer have them. Adapters can be used to connect a parallel "
+"printer to a `USB` port. With such an adapter, the printer can be treated "
+"as if it were actually a `USB` printer. Devices called _print servers_ can "
+"also be used to connect parallel printers directly to a network."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/printing/_index.adoc:172
+#, no-wrap
+msgid "Serial (RS-232)"
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:175
+msgid ""
+"Serial ports are another legacy port, rarely used for printers except in "
+"certain niche applications. Cables, connectors, and required wiring vary "
+"widely."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:178
+msgid ""
+"For serial ports built into a motherboard, the serial device name is [."
+"filename]#/dev/cuau0# or [.filename]#/dev/cuau1#. Serial `USB` adapters can "
+"also be used, and these will appear as [.filename]#/dev/cuaU0#."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:182
+msgid ""
+"Several communication parameters must be known to communicate with a serial "
+"printer. The most important are _baud rate_ or `BPS` (Bits Per Second) and "
+"_parity_. Values vary, but typical serial printers use a baud rate of 9600 "
+"and no parity."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/printing/_index.adoc:184
+#, no-wrap
+msgid "Network"
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:186
+msgid "Network printers are connected directly to the local computer network."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:190
+msgid ""
+"The `DNS` hostname of the printer must be known. If the printer is assigned "
+"a dynamic address by `DHCP`, `DNS` should be dynamically updated so that the "
+"host name always has the correct `IP` address. Network printers are often "
+"given static `IP` addresses to avoid this problem."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:195
+msgid ""
+"Most network printers understand print jobs sent with the LPD protocol. A "
+"print queue name can also be specified. Some printers process data "
+"differently depending on which queue is used. For example, a `raw` queue "
+"prints the data unchanged, while the `text` queue adds carriage returns to "
+"plain text."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:197
+msgid "Many network printers can also print data sent directly to port 9100."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/printing/_index.adoc:199
+#: documentation/content/en/books/handbook/printing/_index.adoc:285
+#, no-wrap
+msgid "Summary"
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:207
+msgid ""
+"Wired network connections are usually the easiest to set up and give the "
+"fastest printing. For direct connection to the computer, `USB` is preferred "
+"for speed and simplicity. Parallel connections work but have limitations on "
+"cable length and speed. Serial connections are more difficult to "
+"configure. Cable wiring differs between models, and communication "
+"parameters like baud rate and parity bits must add to the complexity. "
+"Fortunately, serial printers are rare."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/printing/_index.adoc:209
+#, no-wrap
+msgid "Common Page Description Languages"
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:213
+msgid ""
+"Data sent to a printer must be in a language that the printer can "
+"understand. These languages are called Page Description Languages, or PDLs."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/printing/_index.adoc:215
+#, no-wrap
+msgid "`ASCII`"
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:222
+msgid ""
+"Plain `ASCII` text is the simplest way to send data to a printer. "
+"Characters correspond one to one with what will be printed: an `A` in the "
+"data prints an `A` on the page. Very little formatting is available. There "
+"is no way to select a font or proportional spacing. The forced simplicity "
+"of plain `ASCII` means that text can be printed straight from the computer "
+"with little or no encoding or translation. The printed output corresponds "
+"directly with what was sent."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:225
+msgid ""
+"Some inexpensive printers cannot print plain `ASCII` text. This makes them "
+"more difficult to set up, but it is usually still possible."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/printing/_index.adoc:227
+#, no-wrap
+msgid "PostScript(R)"
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:234
+msgid ""
+"PostScript(R) is almost the opposite of `ASCII`. Rather than simple text, a "
+"PostScript(R) program is a set of instructions that draw the final "
+"document. Different fonts and graphics can be used. However, this power "
+"comes at a price. The program that draws the page must be written. Usually "
+"this program is generated by application software, so the process is "
+"invisible to the user."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:236
+msgid ""
+"Inexpensive printers sometimes leave out PostScript(R) compatibility as a "
+"cost-saving measure."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/printing/_index.adoc:238
+#, no-wrap
+msgid "`PCL` (Printer Command Language)"
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:243
+msgid ""
+"`PCL` is an extension of `ASCII`, adding escape sequences for formatting, "
+"font selection, and printing graphics. Many printers provide `PCL5` "
+"support. Some support the newer `PCL6` or `PCLXL`. These later versions "
+"are supersets of `PCL5` and can provide faster printing."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/printing/_index.adoc:245
+#, no-wrap
+msgid "Host-Based"
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:250
+msgid ""
+"Manufacturers can reduce the cost of a printer by giving it a simple "
+"processor and very little memory. These printers are not capable of "
+"printing plain text. Instead, bitmaps of text and graphics are drawn by a "
+"driver on the host computer and then sent to the printer. These are called "
+"_host-based_ printers."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:252
+msgid ""
+"Communication between the driver and a host-based printer is often through "
+"proprietary or undocumented protocols, making them functional only on the "
+"most common operating systems."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/printing/_index.adoc:254
+#, no-wrap
+msgid "Converting PostScript(R) to Other PDLs"
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:258
+msgid ""
+"Many applications from the Ports Collection and FreeBSD utilities produce "
+"PostScript(R) output. This table shows the utilities available to convert "
+"that into other common PDLs:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/printing/_index.adoc:260
+#, no-wrap
+msgid "Output PDLs"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/printing/_index.adoc:264
+#, no-wrap
+msgid "Output PDL"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/printing/_index.adoc:265
+#, no-wrap
+msgid "Generated By"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/printing/_index.adoc:267
+#, no-wrap
+msgid "Notes"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/printing/_index.adoc:268
+#, no-wrap
+msgid "`PCL` or `PCL5`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/printing/_index.adoc:269
+#: documentation/content/en/books/handbook/printing/_index.adoc:273
+#: documentation/content/en/books/handbook/printing/_index.adoc:277
+#, no-wrap
+msgid "package:print/ghostscript9-base[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/printing/_index.adoc:271
+#, no-wrap
+msgid "`-sDEVICE=ljet4` for monochrome, `-sDEVICE=cljet5` for color"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/printing/_index.adoc:272
+#, no-wrap
+msgid "`PCLXL` or `PCL6`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/printing/_index.adoc:275
+#, no-wrap
+msgid "`-sDEVICE=pxlmono` for monochrome, `-sDEVICE=pxlcolor` for color"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/printing/_index.adoc:276
+#, no-wrap
+msgid "`ESC/P2`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/printing/_index.adoc:279
+#, no-wrap
+msgid "`-sDEVICE=uniprint`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/printing/_index.adoc:280
+#, no-wrap
+msgid "`XQX`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/printing/_index.adoc:281
+#, no-wrap
+msgid "package:print/foo2zjs[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:291
+msgid ""
+"For the easiest printing, choose a printer that supports PostScript(R). "
+"Printers that support `PCL` are the next preferred. With package:print/"
+"ghostscript9-base[], these printers can be used as if they understood "
+"PostScript(R) natively. Printers that support PostScript(R) or `PCL` "
+"directly almost always support direct printing of plain `ASCII` text files "
+"also."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:296
+msgid ""
+"Line-based printers like typical inkjets usually do not support "
+"PostScript(R) or `PCL`. They often can print plain `ASCII` text files. "
+"package:print/ghostscript9-base[] supports the PDLs used by some of these "
+"printers. However, printing an entire graphic-based page on these printers "
+"is often very slow due to the large amount of data to be transferred and "
+"printed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:300
+msgid ""
+"Host-based printers are often more difficult to set up. Some cannot be used "
+"at all because of proprietary PDLs. Avoid these printers when possible."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:303
+msgid ""
+"Descriptions of many PDLs can be found at http://www.undocprint.org/formats/"
+"page_description_languages[]. The particular `PDL` used by various models "
+"of printers can be found at http://www.openprinting.org/printers[]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/printing/_index.adoc:305
+#, no-wrap
+msgid "Direct Printing"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:309
+msgid ""
+"For occasional printing, files can be sent directly to a printer device "
+"without any setup. For example, a file called [.filename]#sample.txt# can "
+"be sent to a `USB` printer:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:313
+#, no-wrap
+msgid "# cp sample.txt /dev/unlpt0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:316
+msgid ""
+"Direct printing to network printers depends on the abilities of the printer, "
+"but most accept print jobs on port 9100, and man:nc[1] can be used with "
+"them. To print the same file to a printer with the `DNS` hostname of "
+"_netlaser_:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:320
+#, no-wrap
+msgid "# nc netlaser 9100 < sample.txt\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/printing/_index.adoc:323
+#, no-wrap
+msgid "LPD (Line Printer Daemon)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:327
+msgid ""
+"Printing a file in the background is called _spooling_. A spooler allows "
+"the user to continue with other programs on the computer without waiting for "
+"the printer to slowly complete the print job."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:330
+msgid ""
+"FreeBSD includes a spooler called man:lpd[8]. Print jobs are submitted with "
+"man:lpr[1]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/printing/_index.adoc:332
+#, no-wrap
+msgid "Initial Setup"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:335
+msgid ""
+"A directory for storing print jobs is created, ownership is set, and the "
+"permissions are set to prevent other users from viewing the contents of "
+"those files:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:346
+msgid ""
+"Printers are defined in [.filename]#/etc/printcap#. An entry for each "
+"printer includes details like a name, the port where it is attached, and "
+"various other settings. Create [.filename]#/etc/printcap# with these "
+"contents:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:355
+#, no-wrap
+msgid ""
+"lp:\\\t\t\t\t<.>\n"
+"\t:lp=/dev/unlpt0:\\\t<.>\n"
+"\t:sh:\\\t\t\t<.>\n"
+"\t:mx#0:\\\t\t\t<.>\n"
+"\t:sd=/var/spool/lpd/lp:\\\t<.>\n"
+"\t:lf=/var/log/lpd-errs:\t<.>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:358
+msgid ""
+"The name of this printer. man:lpr[1] sends print jobs to the `lp` printer "
+"unless another printer is specified with `-P`, so the default printer should "
+"be named `lp`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:360
+msgid ""
+"The device where the printer is connected. Replace this line with the "
+"appropriate one for the connection type shown here."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:362
+msgid "Suppress the printing of a header page at the start of a print job."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:364
+msgid "Do not limit the maximum size of a print job."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:366
+msgid ""
+"The path to the spooling directory for this printer. Each printer uses its "
+"own spooling directory."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:368
+msgid "The log file where errors on this printer will be reported."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:370
+msgid ""
+"After creating [.filename]#/etc/printcap#, use man:chkprintcap[8] to test it "
+"for errors:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:374
+#, no-wrap
+msgid "# chkprintcap\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:377
+msgid "Fix any reported problems before continuing."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:379
+msgid "Enable man:lpd[8] in [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:390
+#, no-wrap
+msgid "# service lpd start\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/printing/_index.adoc:393
+#, no-wrap
+msgid "Printing with man:lpr[1]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:398
+msgid ""
+"Documents are sent to the printer with `lpr`. A file to be printed can be "
+"named on the command line or piped into `lpr`. These two commands are "
+"equivalent, sending the contents of [.filename]#doc.txt# to the default "
+"printer:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:403
+#, no-wrap
+msgid ""
+"% lpr doc.txt\n"
+"% cat doc.txt | lpr\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:407
+msgid ""
+"Printers can be selected with `-P`. To print to a printer called _laser_:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:411
+#, no-wrap
+msgid "% lpr -Plaser doc.txt\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/printing/_index.adoc:414
+#, no-wrap
+msgid "Filters"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:418
+msgid ""
+"The examples shown so far have sent the contents of a text file directly to "
+"the printer. As long as the printer understands the content of those files, "
+"output will be printed correctly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:420
+msgid ""
+"Some printers are not capable of printing plain text, and the input file "
+"might not even be plain text."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:424
+msgid ""
+"_Filters_ allow files to be translated or processed. The typical use is to "
+"translate one type of input, like plain text, into a form that the printer "
+"can understand, like PostScript(R) or `PCL`. Filters can also be used to "
+"provide additional features, like adding page numbers or highlighting source "
+"code to make it easier to read."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:428
+msgid ""
+"The filters discussed here are _input filters_ or _text filters_. These "
+"filters convert the incoming file into different forms. Use man:su[1] to "
+"become `root` before creating the files."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:431
+msgid ""
+"Filters are specified in [.filename]#/etc/printcap# with the `if=` "
+"identifier. To use [.filename]#/usr/local/libexec/lf2crlf# as a filter, "
+"modify [.filename]#/etc/printcap# like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:441
+#, no-wrap
+msgid ""
+"lp:\\\n"
+"\t:lp=/dev/unlpt0:\\\n"
+"\t:sh:\\\n"
+"\t:mx#0:\\\n"
+"\t:sd=/var/spool/lpd/lp:\\\n"
+"\t:if=/usr/local/libexec/lf2crlf:\\ <.>\n"
+"\t:lf=/var/log/lpd-errs:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:444
+msgid "`if=` identifies the _input filter_ that will be used on incoming text."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:449
+msgid ""
+"The backslash _line continuation_ characters at the end of the lines in [."
+"filename]#printcap# entries reveal that an entry for a printer is really "
+"just one long line with entries delimited by colon characters. An earlier "
+"example can be rewritten as a single less-readable line:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:453
+#, no-wrap
+msgid "lp:lp=/dev/unlpt0:sh:mx#0:sd=/var/spool/lpd/lp:if=/usr/local/libexec/lf2crlf:lf=/var/log/lpd-errs:\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/printing/_index.adoc:458
+#, no-wrap
+msgid "Preventing Stairstepping on Plain Text Printers"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:462
+msgid ""
+"Typical FreeBSD text files contain only a single line feed character at the "
+"end of each line. These lines will \"stairstep\" on a standard printer:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:468
+#, no-wrap
+msgid ""
+"A printed file looks\n"
+" like the steps of a staircase\n"
+" scattered by the wind\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:473
+msgid ""
+"A filter can convert the newline characters into carriage returns and "
+"newlines. The carriage returns make the printer return to the left after "
+"each line. Create [.filename]#/usr/local/libexec/lf2crlf# with these "
+"contents:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:479
+#, no-wrap
+msgid ""
+"#!/bin/sh\n"
+"CR=$'\\r'\n"
+"/usr/bin/sed -e \"s/$/${CR}/g\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:482
+#: documentation/content/en/books/handbook/printing/_index.adoc:514
+#: documentation/content/en/books/handbook/printing/_index.adoc:547
+#: documentation/content/en/books/handbook/printing/_index.adoc:604
+msgid "Set the permissions and make it executable:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:486
+#, no-wrap
+msgid "# chmod 555 /usr/local/libexec/lf2crlf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:489
+#: documentation/content/en/books/handbook/printing/_index.adoc:521
+msgid "Modify [.filename]#/etc/printcap# to use the new filter:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:493
+#, no-wrap
+msgid ":if=/usr/local/libexec/lf2crlf:\\\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:497
+msgid ""
+"Test the filter by printing the same plain text file. The carriage returns "
+"will cause each line to start at the left side of the page."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/printing/_index.adoc:499
+#, no-wrap
+msgid "Fancy Plain Text on PostScript(R) Printers with package:print/enscript[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:504
+msgid ""
+"GNUEnscript converts plain text files into nicely-formatted PostScript(R) "
+"for printing on PostScript(R) printers. It adds page numbers, wraps long "
+"lines, and provides numerous other features to make printed text files "
+"easier to read. Depending on the local paper size, install either package:"
+"print/enscript-letter[] or package:print/enscript-a4[] from the Ports "
+"Collection."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:506
+msgid "Create [.filename]#/usr/local/libexec/enscript# with these contents:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:511
+#, no-wrap
+msgid ""
+"#!/bin/sh\n"
+"/usr/local/bin/enscript -o -\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:518
+#, no-wrap
+msgid "# chmod 555 /usr/local/libexec/enscript\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:525
+#, no-wrap
+msgid ":if=/usr/local/libexec/enscript:\\\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:528
+msgid "Test the filter by printing a plain text file."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/printing/_index.adoc:530
+#, no-wrap
+msgid "Printing PostScript(R) to `PCL` Printers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:535
+msgid ""
+"Many programs produce PostScript(R) documents. However, inexpensive "
+"printers often only understand plain text or `PCL`. This filter converts "
+"PostScript(R) files to `PCL` before sending them to the printer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:537
+msgid ""
+"Install the Ghostscript PostScript(R) interpreter, package:print/"
+"ghostscript9-base[], from the Ports Collection."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:539
+msgid "Create [.filename]#/usr/local/libexec/ps2pcl# with these contents:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:544
+#, no-wrap
+msgid ""
+"#!/bin/sh\n"
+"/usr/local/bin/gs -dSAFER -dNOPAUSE -dBATCH -q -sDEVICE=ljet4 -sOutputFile=- -\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:551
+#, no-wrap
+msgid "# chmod 555 /usr/local/libexec/ps2pcl\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:554
+msgid ""
+"PostScript(R) input sent to this script will be rendered and converted to "
+"`PCL` before being sent on to the printer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:556
+#: documentation/content/en/books/handbook/printing/_index.adoc:611
+msgid "Modify [.filename]#/etc/printcap# to use this new input filter:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:560
+#, no-wrap
+msgid ":if=/usr/local/libexec/ps2pcl:\\\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:563
+msgid "Test the filter by sending a small PostScript(R) program to it:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:568
+#, no-wrap
+msgid ""
+"% printf \"%%\\!PS \\n /Helvetica findfont 18 scalefont setfont \\\n"
+"72 432 moveto (PostScript printing successful.) show showpage \\004\" | lpr\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/printing/_index.adoc:571
+#, no-wrap
+msgid "Smart Filters"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:579
+msgid ""
+"A filter that detects the type of input and automatically converts it to the "
+"correct format for the printer can be very convenient. The first two "
+"characters of a PostScript(R) file are usually `%!`. A filter can detect "
+"those two characters. PostScript(R) files can be sent on to a PostScript(R) "
+"printer unchanged. Text files can be converted to PostScript(R) with "
+"Enscript as shown earlier. Create [.filename]#/usr/local/libexec/psif# with "
+"these contents:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:588
+#, no-wrap
+msgid ""
+"#!/bin/sh\n"
+"#\n"
+"# psif - Print PostScript or plain text on a PostScript printer\n"
+"#\n"
+"IFS=\"\" read -r first_line\n"
+"first_two_chars=`expr \"$first_line\" : '\\(..\\)'`\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:601
+#, no-wrap
+msgid ""
+"case \"$first_two_chars\" in\n"
+"%!)\n"
+" # %! : PostScript job, print it.\n"
+" echo \"$first_line\" && cat && exit 0\n"
+" exit 2\n"
+" ;;\n"
+"*)\n"
+" # otherwise, format with enscript\n"
+" ( echo \"$first_line\"; cat ) | /usr/local/bin/enscript -o - && exit 0\n"
+" exit 2\n"
+" ;;\n"
+"esac\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:608
+#, no-wrap
+msgid "# chmod 555 /usr/local/libexec/psif\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:615
+#, no-wrap
+msgid ":if=/usr/local/libexec/psif:\\\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:618
+msgid "Test the filter by printing PostScript(R) and plain text files."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/printing/_index.adoc:620
+#, no-wrap
+msgid "Other Smart Filters"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:625
+msgid ""
+"Writing a filter that detects many different types of input and formats them "
+"correctly is challenging. package:print/apsfilter[] from the Ports "
+"Collection is a smart \"magic\" filter that detects dozens of file types and "
+"automatically converts them to the `PDL` understood by the printer. See "
+"http://www.apsfilter.org[] for more details."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/printing/_index.adoc:627
+#, no-wrap
+msgid "Multiple Queues"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:632
+msgid ""
+"The entries in [.filename]#/etc/printcap# are really definitions of "
+"_queues_. There can be more than one queue for a single printer. When "
+"combined with filters, multiple queues provide users more control over how "
+"their jobs are printed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:636
+msgid ""
+"As an example, consider a networked PostScript(R) laser printer in an "
+"office. Most users want to print plain text, but a few advanced users want "
+"to be able to print PostScript(R) files directly. Two entries can be "
+"created for the same printer in [.filename]#/etc/printcap#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:646
+#, no-wrap
+msgid ""
+"textprinter:\\\n"
+"\t:lp=9100@officelaser:\\\n"
+"\t:sh:\\\n"
+"\t:mx#0:\\\n"
+"\t:sd=/var/spool/lpd/textprinter:\\\n"
+"\t:if=/usr/local/libexec/enscript:\\\n"
+"\t:lf=/var/log/lpd-errs:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:653
+#, no-wrap
+msgid ""
+"psprinter:\\\n"
+"\t:lp=9100@officelaser:\\\n"
+"\t:sh:\\\n"
+"\t:mx#0:\\\n"
+"\t:sd=/var/spool/lpd/psprinter:\\\n"
+"\t:lf=/var/log/lpd-errs:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:657
+msgid ""
+"Documents sent to `textprinter` will be formatted by the [.filename]#/usr/"
+"local/libexec/enscript# filter shown in an earlier example. Advanced users "
+"can print PostScript(R) files on `psprinter`, where no filtering is done."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:660
+msgid ""
+"This multiple queue technique can be used to provide direct access to all "
+"kinds of printer features. A printer with a duplexer could use two queues, "
+"one for ordinary single-sided printing, and one with a filter that sends the "
+"command sequence to enable double-sided printing and then sends the incoming "
+"file."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/printing/_index.adoc:662
+#, no-wrap
+msgid "Monitoring and Controlling Printing"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:665
+msgid ""
+"Several utilities are available to monitor print jobs and check and control "
+"printer operation."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/printing/_index.adoc:667
+#, no-wrap
+msgid "man:lpq[1]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:671
+msgid ""
+"man:lpq[1] shows the status of a user's print jobs. Print jobs from other "
+"users are not shown."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:673
+msgid "Show the current user's pending jobs on a single printer:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:679
+#, no-wrap
+msgid ""
+"% lpq -Plp\n"
+"Rank Owner Job Files Total Size\n"
+"1st jsmith 0 (standard input) 12792 bytes\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:682
+msgid "Show the current user's pending jobs on all printers:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:689
+#, no-wrap
+msgid ""
+"% lpq -a\n"
+"lp:\n"
+"Rank Owner Job Files Total Size\n"
+"1st jsmith 1 (standard input) 27320 bytes\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:693
+#, no-wrap
+msgid ""
+"laser:\n"
+"Rank Owner Job Files Total Size\n"
+"1st jsmith 287 (standard input) 22443 bytes\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/printing/_index.adoc:696
+#, no-wrap
+msgid "man:lprm[1]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:701
+msgid ""
+"man:lprm[1] is used to remove print jobs. Normal users are only allowed to "
+"remove their own jobs. `root` can remove any or all jobs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:703
+msgid "Remove all pending jobs from a printer:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:713
+#, no-wrap
+msgid ""
+"# lprm -Plp -\n"
+"dfA002smithy dequeued\n"
+"cfA002smithy dequeued\n"
+"dfA003smithy dequeued\n"
+"cfA003smithy dequeued\n"
+"dfA004smithy dequeued\n"
+"cfA004smithy dequeued\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:717
+msgid ""
+"Remove a single job from a printer. man:lpq[1] is used to find the job "
+"number."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:723
+#, no-wrap
+msgid ""
+"% lpq\n"
+"Rank Owner Job Files Total Size\n"
+"1st jsmith 5 (standard input) 12188 bytes\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:727
+#, no-wrap
+msgid ""
+"% lprm -Plp 5\n"
+"dfA005smithy dequeued\n"
+"cfA005smithy dequeued\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/printing/_index.adoc:730
+#, no-wrap
+msgid "man:lpc[8]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:737
+msgid ""
+"man:lpc[8] is used to check and modify printer status. `lpc` is followed by "
+"a command and an optional printer name. `all` can be used instead of a "
+"specific printer name, and the command will be applied to all printers. "
+"Normal users can view status with man:lpc[8]. Only `root` can use commands "
+"which modify printer status."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:739
+msgid "Show the status of all printers:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:753
+#, no-wrap
+msgid ""
+"% lpc status all\n"
+"lp:\n"
+"\tqueuing is enabled\n"
+"\tprinting is enabled\n"
+"\t1 entry in spool area\n"
+"\tprinter idle\n"
+"laser:\n"
+"\tqueuing is enabled\n"
+"\tprinting is enabled\n"
+"\t1 entry in spool area\n"
+"\twaiting for laser to come up\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:756
+msgid ""
+"Prevent a printer from accepting new jobs, then begin accepting new jobs "
+"again:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:765
+#, no-wrap
+msgid ""
+"# lpc disable lp\n"
+"lp:\n"
+"\tqueuing disabled\n"
+"# lpc enable lp\n"
+"lp:\n"
+"\tqueuing enabled\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:769
+msgid ""
+"Stop printing, but continue to accept new jobs. Then begin printing again:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:779
+#, no-wrap
+msgid ""
+"# lpc stop lp\n"
+"lp:\n"
+"\tprinting disabled\n"
+"# lpc start lp\n"
+"lp:\n"
+"\tprinting enabled\n"
+"\tdaemon started\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:782
+msgid "Restart a printer after some error condition:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:790
+#, no-wrap
+msgid ""
+"# lpc restart lp\n"
+"lp:\n"
+"\tno daemon to abort\n"
+"\tprinting enabled\n"
+"\tdaemon restarted\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:793
+msgid ""
+"Turn the print queue off and disable printing, with a message to explain the "
+"problem to users:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:800
+#, no-wrap
+msgid ""
+"# lpc down lp Repair parts will arrive on Monday\n"
+"lp:\n"
+"\tprinter and queuing disabled\n"
+"\tstatus message is now: Repair parts will arrive on Monday\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:803
+msgid "Re-enable a printer that is down:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:810
+#, no-wrap
+msgid ""
+"# lpc up lp\n"
+"lp:\n"
+"\tprinting enabled\n"
+"\tdaemon started\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:813
+msgid "See man:lpc[8] for more commands and options."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/printing/_index.adoc:815
+#, no-wrap
+msgid "Shared Printers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:819
+msgid ""
+"Printers are often shared by multiple users in businesses and schools. "
+"Additional features are provided to make sharing printers more convenient."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/printing/_index.adoc:821
+#, no-wrap
+msgid "Aliases"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:826
+msgid ""
+"The printer name is set in the first line of the entry in [.filename]#/etc/"
+"printcap#. Additional names, or _aliases_, can be added after that name. "
+"Aliases are separated from the name and each other by vertical bars:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:830
+#, no-wrap
+msgid "lp|repairsprinter|salesprinter:\\\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:834
+msgid ""
+"Aliases can be used in place of the printer name. For example, users in the "
+"Sales department print to their printer with"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:838
+#, no-wrap
+msgid "% lpr -Psalesprinter sales-report.txt\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:841
+msgid "Users in the Repairs department print to _their_ printer with"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/printing/_index.adoc:845
+#, no-wrap
+msgid "% lpr -Prepairsprinter repairs-report.txt\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:850
+msgid ""
+"All of the documents print on that single printer. When the Sales "
+"department grows enough to need their own printer, the alias can be removed "
+"from the shared printer entry and used as the name of a new printer. Users "
+"in both departments continue to use the same commands, but the Sales "
+"documents are sent to the new printer."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/printing/_index.adoc:852
+#, no-wrap
+msgid "Header Pages"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:858
+msgid ""
+"It can be difficult for users to locate their documents in the stack of "
+"pages produced by a busy shared printer. _Header pages_ were created to "
+"solve this problem. A header page with the user name and document name is "
+"printed before each print job. These pages are also sometimes called "
+"_banner_ or _separator_ pages."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:860
+msgid ""
+"Enabling header pages differs depending on whether the printer is connected "
+"directly to the computer with a `USB`, parallel, or serial cable, or is "
+"connected remotely over a network."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:865
+msgid ""
+"Header pages on directly-connected printers are enabled by removing the `:sh:"
+"\\` (Suppress Header) line from the entry in [.filename]#/etc/printcap#. "
+"These header pages only use line feed characters for new lines. Some "
+"printers will need the [.filename]#/usr/share/examples/printing/hpif# filter "
+"to prevent stairstepped text. The filter configures `PCL` printers to print "
+"both carriage returns and line feeds when a line feed is received."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:869
+msgid ""
+"Header pages for network printers must be configured on the printer itself. "
+"Header page entries in [.filename]#/etc/printcap# are ignored. Settings are "
+"usually available from the printer front panel or a configuration web page "
+"accessible with a web browser."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/printing/_index.adoc:871
+#, no-wrap
+msgid "References"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:874
+msgid "Example files: [.filename]#/usr/share/examples/printing/#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:876
+msgid ""
+"The _4.3BSD Line Printer Spooler Manual_, [.filename]#/usr/share/doc/smm/07."
+"lpd/paper.ascii.gz#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:878
+msgid ""
+"Manual pages: man:printcap[5], man:lpd[8], man:lpr[1], man:lpc[8], man:"
+"lprm[1], man:lpq[1]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/printing/_index.adoc:880
+#, no-wrap
+msgid "Other Printing Systems"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:884
+msgid ""
+"Several other printing systems are available in addition to the built-in man:"
+"lpd[8]. These systems offer support for other protocols or additional "
+"features."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/printing/_index.adoc:886
+#, no-wrap
+msgid "CUPS (Common UNIX(R) Printing System)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:890
+msgid ""
+"CUPS is a popular printing system available on many operating systems. "
+"Using CUPS on FreeBSD is documented in a separate article: extref:{cups}"
+"[CUPS]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/printing/_index.adoc:892
+#, no-wrap
+msgid "HPLIP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:899
+msgid ""
+"Hewlett Packard provides a printing system that supports many of their "
+"inkjet and laser printers. The port is package:print/hplip[]. The main web "
+"page is at https://developers.hp.com/hp-linux-imaging-and-printing[]. The "
+"port handles all the installation details on FreeBSD. Configuration "
+"information is shown at https://developers.hp.com/hp-linux-imaging-and-"
+"printing/install[]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/printing/_index.adoc:901
+#, no-wrap
+msgid "LPRng"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/printing/_index.adoc:905
+msgid ""
+"LPRng was developed as an enhanced alternative to man:lpd[8]. The port is "
+"package:sysutils/LPRng[]. For details and documentation, see http://www."
+"lprng.com/[]."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/security/_index.adoc b/documentation/content/en/books/handbook/security/_index.adoc
index d7affaa5df..9f7d1566be 100644
--- a/documentation/content/en/books/handbook/security/_index.adoc
+++ b/documentation/content/en/books/handbook/security/_index.adoc
@@ -1,13 +1,13 @@
---
-title: Chapter 14. Security
+title: Chapter 16. Security
part: Part III. System Administration
prev: books/handbook/boot
next: books/handbook/jails
description: Hundreds of standard practices have been authored about how to secure systems and networks, and as a user of FreeBSD, understanding how to protect against attacks and intruders is a must
-tags: ["security", "one-time passwords", "TCP Wrapper", "Kerberos", "OpenSSL", "IPsec", "OpenSSH", "ACL", "advisories", "sudo", "doas", "monitoring"]
+tags: ["security", "TCP Wrappers", "Kerberos", "OpenSSL", "OpenSSH", "ACL", "NFSv4 ACLs", "advisories", "sudo", "doas", "capsicum", "monitoring"]
showBookMenu: true
-weight: 18
-path: "/books/handbook/"
+weight: 20
+path: "/books/handbook/security/"
---
[[security]]
@@ -18,7 +18,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 14
+:sectnumoffset: 16
:partnums:
:source-highlighter: rouge
:experimental:
@@ -51,33 +51,27 @@ endif::[]
[[security-synopsis]]
== Synopsis
-Security, whether physical or virtual, is a topic so broad that an entire industry has evolved around it.
Hundreds of standard practices have been authored about how to secure systems and networks, and as a user of FreeBSD, understanding how to protect against attacks and intruders is a must.
In this chapter, several fundamentals and techniques will be discussed.
The FreeBSD system comes with multiple layers of security, and many more third party utilities may be added to enhance security.
-After reading this chapter, you will know:
+This chapter covers:
* Basic FreeBSD system security concepts.
* The various crypt mechanisms available in FreeBSD.
-* How to set up one-time password authentication.
-* How to configure TCP Wrapper for use with man:inetd[8].
+* How to configure TCP Wrappers for use with man:inetd[8].
* How to set up Kerberos on FreeBSD.
-* How to configure IPsec and create a VPN.
* How to configure and use OpenSSH on FreeBSD.
+* How to use OpenSSL on FreeBSD.
* How to use file system ACLs.
* How to use pkg to audit third party software packages installed from the Ports Collection.
* How to utilize FreeBSD security advisories.
* What Process Accounting is and how to enable it on FreeBSD.
* How to control user resources using login classes or the resource limits database.
+* What is Capsicum and a basic example.
-Before reading this chapter, you should:
-
-* Understand basic FreeBSD and Internet concepts.
-
-Additional security topics are covered elsewhere in this Handbook.
-For example, Mandatory Access Control is discussed in crossref:mac[mac,Mandatory Access Control] and Internet firewalls are discussed in crossref:firewalls[firewalls,Firewalls].
+Certain topics due to their complexity are found in dedicated chapters such as crossref:firewalls[firewalls,Firewalls], crossref:mac[mac,Mandatory Access Control] and articles like extref:{vpn-ipsec}[VPN over IPsec].
[[security-intro]]
== Introduction
@@ -108,57 +102,39 @@ The policy should include the security configuration of workstations, desktops,
In many cases, standard operating procedures (SOPs) already exist.
When in doubt, ask the security team.
-The rest of this introduction describes how some of these basic security configurations are performed on a FreeBSD system.
-The rest of this chapter describes some specific tools which can be used when implementing a security policy on a FreeBSD system.
+[[sec-accounts]]
+== Securing Accounts
+
+Maintaining secure accounts in FreeBSD is crucial for data confidentiality, system integrity, and privilege separation, as it prevents unauthorized access, malware, and data breaches while ensuring compliance and protecting an organization's reputation.
[[security-accounts]]
=== Preventing Logins
In securing a system, a good starting point is an audit of accounts.
-Ensure that `root` has a strong password and that this password is not shared.
Disable any accounts that do not need login access.
-To deny login access to accounts, two methods exist.
-The first is to lock the account.
-This example locks the `toor` account:
+[TIP]
+====
+Ensure that `root` has a strong password and that this password is not shared.
+====
-[source,shell]
-....
-# pw lock toor
-....
+To deny login access to accounts, two methods exist.
-The second method is to prevent login access by changing the shell to [.filename]#/usr/sbin/nologin#.
-Only the superuser can change the shell for other users:
+The first is to lock the account, this example shows how to lock the `imani` account:
[source,shell]
....
-# chsh -s /usr/sbin/nologin toor
+# pw lock imani
....
-The [.filename]#/usr/sbin/nologin# shell prevents the system from assigning a shell to the user when they attempt to login.
-
-[[security-accountmgmt]]
-=== Permitted Account Escalation
-
-In some cases, system administration needs to be shared with other users.
-FreeBSD has two methods to handle this.
-The first one, which is not recommended, is a shared root password used by members of the `wheel` group.
-With this method, a user types `su` and enters the password for `wheel` whenever superuser access is needed.
-The user should then type `exit` to leave privileged access after finishing the commands that required administrative access.
-To add a user to this group, edit [.filename]#/etc/group# and add the user to the end of the `wheel` entry.
-The user must be separated by a comma character with no space.
-
-The second, and recommended, method to permit privilege escalation is to install the package:security/sudo[] package or port.
-This software provides additional auditing, more fine-grained user control, and can be configured to lock users into running only the specified privileged commands.
+The second method is to prevent login access by changing the shell to [.filename]#/usr/sbin/nologin#.
+The man:nologin[8] shell prevents the system from assigning a shell to the user when they attempt to login.
-After installation, use `visudo` to edit [.filename]#/usr/local/etc/sudoers#.
-This example creates a new `webadmin` group, adds the `trhodes` account to that group, and configures that group access to restart package:apache24[]:
+Only the superuser can change the shell for other users:
[source,shell]
....
-# pw groupadd webadmin -M trhodes -g 6000
-# visudo
-%webadmin ALL=(ALL) /usr/sbin/service apache24 *
+# chsh -s /usr/sbin/nologin imani
....
[[security-passwords]]
@@ -166,7 +142,8 @@ This example creates a new `webadmin` group, adds the `trhodes` account to that
Passwords are a necessary evil of technology.
When they must be used, they should be complex and a powerful hash mechanism should be used to encrypt the version that is stored in the password database.
-FreeBSD supports the DES, MD5, SHA256, SHA512, and Blowfish hash algorithms in its `crypt()` library.
+FreeBSD supports several algorithms, including SHA256, SHA512 and Blowfish hash algorithms in its `crypt()` library, see man:crypt[3] for details.
+
The default of SHA512 should not be changed to a less secure hashing algorithm, but can be changed to the more secure Blowfish algorithm.
[NOTE]
@@ -177,55 +154,70 @@ Its use may not be permitted in some environments.
To determine which hash algorithm is used to encrypt a user's password, the superuser can view the hash for the user in the FreeBSD password database.
Each hash starts with a symbol which indicates the type of hash mechanism used to encrypt the password.
+
If DES is used, there is no beginning symbol.
For MD5, the symbol is `$`.
For SHA256 and SHA512, the symbol is `$6$`.
For Blowfish, the symbol is `$2a$`.
-In this example, the password for `dru` is hashed using the default SHA512 algorithm as the hash starts with `$6$`.
+In this example, the password for `imani` is hashed using the default SHA512 algorithm as the hash starts with `$6$`.
Note that the encrypted hash, not the password itself, is stored in the password database:
[source,shell]
....
-# grep dru /etc/master.passwd
-dru:$6$pzIjSvCAn.PBYQBA$PXpSeWPx3g5kscj3IMiM7tUEUSPmGexxta.8Lt9TGSi2lNQqYGKszsBPuGME0:1001:1001::0:0:dru:/usr/home/dru:/bin/csh
+# grep imani /etc/master.passwd
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
+imani:$6$pzIjSvCAn.PBYQBA$PXpSeWPx3g5kscj3IMiM7tUEUSPmGexxta.8Lt9TGSi2lNQqYGKszsBPuGME0:1001:1001::0:0:imani:/usr/home/imani:/bin/sh
....
The hash mechanism is set in the user's login class.
-For this example, the user is in the `default` login class and the hash algorithm is set with this line in [.filename]#/etc/login.conf#:
+
+The following command can be run to check which hash mechanism is currently being used:
+
+[source,shell]
+....
+# grep user /etc/master.passwd
+....
+
+The output should be similar to the following:
[.programlisting]
....
- :passwd_format=sha512:\
+:passwd_format=sha512:\
....
-To change the algorithm to Blowfish, modify that line to look like this:
+For example, to change the algorithm to Blowfish, modify that line to look like this:
[.programlisting]
....
- :passwd_format=blf:\
+:passwd_format=blf:\
+....
+
+Then, man:cap_mkdb[1] must be executed to upgrade the login.conf database:
+
+[source,shell]
+....
+# cap_mkdb /etc/login.conf
....
-Then run `cap_mkdb /etc/login.conf` as described in <<users-limiting>>.
Note that this change will not affect any existing password hashes.
This means that all passwords should be re-hashed by asking users to run `passwd` in order to change their password.
-For remote logins, two-factor authentication should be used.
-An example of two-factor authentication is "something you have", such as a key, and "something you know", such as the passphrase for that key.
-Since OpenSSH is part of the FreeBSD base system, all network logins should be over an encrypted connection and use key-based authentication instead of passwords.
-For more information, refer to <<openssh>>.
-Kerberos users may need to make additional changes to implement OpenSSH in their network.
-These changes are described in <<kerberos5>>.
-
[[security-pwpolicy]]
=== Password Policy Enforcement
Enforcing a strong password policy for local accounts is a fundamental aspect of system security.
In FreeBSD, password length, password strength, and password complexity can be implemented using built-in Pluggable Authentication Modules (PAM).
-This section demonstrates how to configure the minimum and maximum password length and the enforcement of mixed characters using the [.filename]#pam_passwdqc.so# module.
+This section demonstrates how to configure the minimum and maximum password length and the enforcement of mixed characters using the man:pam_passwdqc[8] module.
This module is enforced when a user changes their password.
To configure this module, become the superuser and uncomment the line containing `pam_passwdqc.so` in [.filename]#/etc/pam.d/passwd#.
+
Then, edit that line to match the password policy:
[.programlisting]
@@ -233,24 +225,20 @@ Then, edit that line to match the password policy:
password requisite pam_passwdqc.so min=disabled,disabled,disabled,12,10 similar=deny retry=3 enforce=users
....
-This example sets several requirements for new passwords.
-The `min` setting controls the minimum password length.
-It has five values because this module defines five different types of passwords based on their complexity.
-Complexity is defined by the type of characters that must exist in a password, such as letters, numbers, symbols, and case.
-The types of passwords are described in man:pam_passwdqc[8].
-In this example, the first three types of passwords are disabled, meaning that passwords that meet those complexity requirements will not be accepted, regardless of their length.
-The `12` sets a minimum password policy of at least twelve characters, if the password also contains characters with three types of complexity.
-The `10` sets the password policy to also allow passwords of at least ten characters, if the password contains characters with four types of complexity.
-
-The `similar` setting denies passwords that are similar to the user's previous password.
-The `retry` setting provides a user with three opportunities to enter a new password.
+The explanation of the parameters can be found in man:pam_passwdqc[8].
Once this file is saved, a user changing their password will see a message similar to the following:
[source,shell]
....
% passwd
-Changing local password for trhodes
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
+Changing local password for user
Old Password:
You can now choose the new password.
@@ -267,8 +255,8 @@ Enter new password:
If a password that does not match the policy is entered, it will be rejected with a warning and the user will have an opportunity to try again, up to the configured number of retries.
-Most password policies require passwords to expire after so many days.
-To set a password age time in FreeBSD, set `passwordtime` for the user's login class in [.filename]#/etc/login.conf#.
+If your organization's policy requires passwords to expire, FreeBSD supports the `passwordtime` in the user's login class in [.filename]#/etc/login.conf#
+
The `default` login class contains an example:
[.programlisting]
@@ -276,482 +264,899 @@ The `default` login class contains an example:
# :passwordtime=90d:\
....
-So, to set an expiry of 90 days for this login class, remove the comment symbol (`#`), save the edit, and run `cap_mkdb /etc/login.conf`.
+So, to set an expiry of 90 days for this login class, remove the comment symbol (#), save the edit, and execute the following command:
+
+[source,shell]
+....
+# cap_mkdb /etc/login.conf
+....
To set the expiration on individual users, pass an expiration date or the number of days to expiry and a username to `pw`:
[source,shell]
....
-# pw usermod -p 30-apr-2015 -n trhodes
+# pw usermod -p 30-apr-2025 -n user
....
As seen here, an expiration date is set in the form of day, month, and year.
For more information, see man:pw[8].
-[[security-rkhunter]]
-=== Detecting Rootkits
+[[security-sudo]]
+=== Shared Administration with sudo
+
+System administrators often need the ability to grant enhanced permissions to users so they may perform privileged tasks.
+The idea that team members are provided access to a FreeBSD system to perform their specific tasks opens up unique challenges to every administrator.
+These team members only need a subset of access beyond normal end user levels; however, they almost always tell management they are unable to perform their tasks without superuser access.
+Thankfully, there is no reason to provide such access to end users because tools exist to manage this exact requirement.
+
+[TIP]
+====
+Even administrators should limit their privileges when not needed.
+====
+
+Up to this point, the security chapter has covered permitting access to authorized users and attempting to prevent unauthorized access.
+Another problem arises once authorized users have access to the system resources.
+In many cases, some users may need access to application startup scripts, or a team of administrators need to maintain the system.
+Traditionally, the standard users and groups, file permissions, and even the man:su[1] command would manage this access.
+And as applications required more access, as more users needed to use system resources, a better solution was required.
+The most used application is currently Sudo.
+
+Sudo allows administrators to configure more rigid access to system commands and provide for some advanced logging features.
+As a tool, it is available from the Ports Collection as package:security/sudo[] or by use of the man:pkg[8] utility.
-A _rootkit_ is any unauthorized software that attempts to gain `root` access to a system.
-Once installed, this malicious software will normally open up another avenue of entry for an attacker.
-Realistically, once a system has been compromised by a rootkit and an investigation has been performed, the system should be reinstalled from scratch.
-There is tremendous risk that even the most prudent security or systems engineer will miss something an attacker left behind.
+Execute the following command to install it:
-A rootkit does do one thing useful for administrators: once detected, it is a sign that a compromise happened at some point.
-But, these types of applications tend to be very well hidden.
-This section demonstrates a tool that can be used to detect rootkits, package:security/rkhunter[].
+[source,shell]
+....
+# pkg install sudo
+....
-After installation of this package or port, the system may be checked using the following command.
-It will produce a lot of information and will require some manual pressing of kbd:[ENTER]:
+After the installation is complete, the installed `visudo` will open the configuration file with a text editor.
+Using `visudo` is highly recommended as it comes with a built in syntax checker to verify there are no errors before the file is saved.
+
+The configuration file is made up of several small sections which allow for extensive configuration.
+In the following example, web application maintainer, user1, needs to start, stop, and restart the web application known as _webservice_.
+To grant this user permission to perform these tasks, add this line to the end of [.filename]#/usr/local/etc/sudoers#:
+
+[.programlisting]
+....
+user1 ALL=(ALL) /usr/sbin/service webservice *
+....
+
+The user may now start _webservice_ using this command:
+
+[source,shell]
+....
+% sudo /usr/sbin/service webservice start
+....
+
+While this configuration allows a single user access to the webservice service;
+however, in most organizations, there is an entire web team in charge of managing the service.
+A single line can also give access to an entire group.
+These steps will create a web group, add a user to this group, and allow all members of the group to manage the service:
[source,shell]
....
-# rkhunter -c
+# pw groupadd -g 6001 -n webteam
....
-After the process completes, a status message will be printed to the screen.
-This message will include the amount of files checked, suspect files, possible rootkits, and more.
-During the check, some generic security warnings may be produced about hidden files, the OpenSSH protocol selection, and known vulnerable versions of installed software.
-These can be handled now or after a more detailed analysis has been performed.
+Using the same man:pw[8] command, the user is added to the webteam group:
-Every administrator should know what is running on the systems they are responsible for.
-Third-party tools like rkhunter and package:sysutils/lsof[], and native commands such as `netstat` and `ps`, can show a great deal of information on the system.
-Take notes on what is normal, ask questions when something seems out of place, and be paranoid.
-While preventing a compromise is ideal, detecting a compromise is a must.
+[source,shell]
+....
+# pw groupmod -m user1 -n webteam
+....
+
+Finally, this line in [.filename]#/usr/local/etc/sudoers# allows any member of the webteam group to manage _webservice_:
+
+[.programlisting]
+....
+%webteam ALL=(ALL) /usr/sbin/service webservice *
+....
+
+Unlike man:su[1], man:sudo[8] only requires the end user password.
+This avoids sharing passwords, which is a poor practice.
+
+Users permitted to run applications with man:sudo[8] only enter their own passwords.
+This is more secure and gives better control than man:su[1],
+where the `root` password is entered and the user acquires all `root` permissions.
+
+[TIP]
+====
+Most organizations are moving or have moved toward a two factor authentication model.
+In these cases, the user may not have a password to enter.
+
+man:sudo[8] can be configured to permit two factor authentication model by using the `NOPASSWD` variable.
+Adding it to the configuration above will allow all members of the _webteam_ group to manage the service without the password requirement:
+
+[.programlisting]
+....
+%webteam ALL=(ALL) NOPASSWD: /usr/sbin/service webservice *
+....
+====
+
+[[security-doas]]
+=== Shared Administration with Doas
+
+man:doas[1] is a command-line utility ported from OpenBSD.
+It serves as an alternative to the widely used man:sudo[8] command in Unix-like systems.
+
+With doas, users can execute commands with elevated privileges, typically as the root user, while maintaining a simplified and security-conscious approach.
+Unlike man:sudo[8], doas emphasizes simplicity and minimalism, focusing on streamlined privilege delegation without an overwhelming array of configuration options.
+
+Execute the following command to install it:
+
+[source,shell]
+....
+# pkg install doas
+....
+
+After the installation [.filename]#/usr/local/etc/doas.conf# must be configured to grant access for users for specific commands, or roles.
+
+The simplest entry could be the following, which grants the user `local_user` with `root` permissions without asking for its password when executing the doas command.
+
+[.programlisting]
+....
+permit nopass local_user as root
+....
+
+After the installation and configuration of the `doas` utility, a command can now be executed with enhanced privileges, for example:
+
+[source,shell]
+....
+$ doas vi /etc/rc.conf
+....
+
+For more configuration examples, please read man:doas.conf[5].
[[security-ids]]
-=== Binary Verification
+== Intrusion Detection System (IDS)
Verification of system files and binaries is important because it provides the system administration and security teams information about system changes.
A software application that monitors the system for changes is called an Intrusion Detection System (IDS).
-FreeBSD provides native support for a basic IDS system.
+FreeBSD provides native support for a basic IDS system called man:mtree[8].
While the nightly security emails will notify an administrator of changes, the information is stored locally and there is a chance that a malicious user could modify this information in order to hide their changes to the system.
-As such, it is recommended to create a separate set of binary signatures and store them on a read-only, root-owned directory or, preferably, on a removable USB disk or remote rsync server.
+As such, it is recommended to create a separate set of binary signatures and store them on a read-only, root-owned directory or, preferably, on a removable USB disk or remote server.
+
+It is also recommended to run `freebsd-update IDS` after each update.
-The built-in `mtree` utility can be used to generate a specification of the contents of a directory.
+[[security-ids-generate-spec-file]]
+=== Generating the Specification File
+
+The built-in man:mtree[8] utility can be used to generate a specification of the contents of a directory.
A seed, or a numeric constant, is used to generate the specification and is required to check that the specification has not changed.
This makes it possible to determine if a file or binary has been modified.
Since the seed value is unknown by an attacker, faking or checking the checksum values of files will be difficult to impossible.
-The following example generates a set of SHA256 hashes, one for each system binary in [.filename]#/bin#, and saves those values to a hidden file in ``root``'s home directory, [.filename]#/root/.bin_chksum_mtree#:
+
+[TIP]
+====
+It is recommended to create specifications for the directories which contain binaries and configuration files, as well as any directories containing sensitive data.
+Typically, specifications are created for [.filename]#/bin#, [.filename]#/sbin#, [.filename]#/usr/bin#, [.filename]#/usr/sbin#, [.filename]#/usr/local/bin#, [.filename]#/etc#, and [.filename]#/usr/local/etc#.
+====
+
+The following example generates a set of `sha512` hashes, one for each system binary in [.filename]#/bin#, and saves those values to a hidden file in user's home directory, [.filename]#/home/user/.bin_chksum_mtree#:
[source,shell]
....
-# mtree -s 3483151339707503 -c -K cksum,sha256digest -p /bin > /root/.bin_chksum_mtree
-# mtree: /bin checksum: 3427012225
+# mtree -s 123456789 -c -K cksum,sha512 -p /bin > /home/user/.bin_chksum_mtree
....
-The _3483151339707503_ represents the seed.
-This value should be remembered, but not shared.
+The output should be similar to the following:
+
+[.programlisting]
+....
+mtree: /bin checksum: 3427012225
+....
+
+[WARNING]
+====
+The `123456789` value represents the seed, and should be chosen randomly.
+This value should be remembered, *but not shared*.
+
+It is important to keep the seed value and the checksum output hidden from malicious users.
+====
+
+[[security-ids-spec-file-structure]]
+=== The Specification File Structure
-Viewing [.filename]#/root/.bin_cksum_mtree# should yield output similar to the following:
+The mtree format is a textual format that describes a collection of filesystem objects.
+Such files are typically used to create or verify directory hierarchies.
+
+An mtree file consists of a series of lines, each providing information about a single filesystem object. Leading whitespace is always ignored.
+
+The specification file created above will be used to explain the format and content:
[.programlisting]
....
-# user: root
-# machine: dreadnaught
-# tree: /bin
-# date: Mon Feb 3 10:19:53 2014
+# user: root <.>
+# machine: machinename <.>
+# tree: /bin <.>
+# date: Thu Aug 24 21:58:37 2023 <.>
# .
-/set type=file uid=0 gid=0 mode=0555 nlink=1 flags=none
-. type=dir mode=0755 nlink=2 size=1024 \
- time=1380277977.000000000
- \133 nlink=2 size=11704 time=1380277977.000000000 \
- cksum=484492447 \
- sha256digest=6207490fbdb5ed1904441fbfa941279055c3e24d3a4049aeb45094596400662a
- cat size=12096 time=1380277975.000000000 cksum=3909216944 \
- sha256digest=65ea347b9418760b247ab10244f47a7ca2a569c9836d77f074e7a306900c1e69
- chflags size=8168 time=1380277975.000000000 cksum=3949425175 \
- sha256digest=c99eb6fc1c92cac335c08be004a0a5b4c24a0c0ef3712017b12c89a978b2dac3
- chio size=18520 time=1380277975.000000000 cksum=2208263309 \
- sha256digest=ddf7c8cb92a58750a675328345560d8cc7fe14fb3ccd3690c34954cbe69fc964
- chmod size=8640 time=1380277975.000000000 cksum=2214429708 \
- sha256digest=a435972263bf814ad8df082c0752aa2a7bdd8b74ff01431ccbd52ed1e490bbe7
-....
-
-The machine's hostname, the date and time the specification was created, and the name of the user who created the specification are included in this report.
-There is a checksum, size, time, and SHA256 digest for each binary in the directory.
+/set type=file uid=0 gid=0 mode=0555 nlink=1 flags=uarch <.>
+. type=dir mode=0755 nlink=2 time=1681388848.239523000 <.>
+ \133 nlink=2 size=12520 time=1685991378.688509000 \
+ cksum=520880818 \
+ sha512=5c1374ce0e2ba1b3bc5a41b23f4bbdc1ec89ae82fa01237f376a5eeef41822e68f1d8f75ec46b7bceb65396c122a9d837d692740fdebdcc376a05275adbd3471
+ cat size=14600 time=1685991378.694601000 cksum=3672531848 \ <.>
+ sha512=b30b96d155fdc4795432b523989a6581d71cdf69ba5f0ccb45d9b9e354b55a665899b16aee21982fffe20c4680d11da4e3ed9611232a775c69f926e5385d53a2
+ chflags size=8920 time=1685991378.700385000 cksum=1629328991 \
+ sha512=289a088cbbcbeb436dd9c1f74521a89b66643976abda696b99b9cc1fbfe8b76107c5b54d4a6a9b65332386ada73fc1bbb10e43c4e3065fa2161e7be269eaf86a
+ chio size=20720 time=1685991378.706095000 cksum=1948751604 \
+ sha512=46f58277ff16c3495ea51e74129c73617f31351e250315c2b878a88708c2b8a7bb060e2dc8ff92f606450dbc7dd2816da4853e465ec61ee411723e8bf52709ee
+ chmod size=9616 time=1685991378.712546000 cksum=4244658911 \
+ sha512=1769313ce08cba84ecdc2b9c07ef86d2b70a4206420dd71343867be7ab59659956f6f5a458c64e2531a1c736277a8e419c633a31a8d3c7ccc43e99dd4d71d630
+....
+
+<.> User who created the specification.
+<.> Machine's hostname.
+<.> Directory path.
+<.> The Date and time when the specification was created.
+<.> `/set` special commands, defines some settings obtained from the files analyzed.
+<.> Refers to the parsed directory and indicates things like what type it is, its mode, the number of hard links, and the time in UNIX format since it was modified.
+<.> Refers to the file and shows the size, time and a list of hashes to verify the integrity.
+
+[[security-ids-verify-specification-file]]
+=== Verify the Specification file
To verify that the binary signatures have not changed, compare the current contents of the directory to the previously generated specification, and save the results to a file.
+
This command requires the seed that was used to generate the original specification:
[source,shell]
....
-# mtree -s 3483151339707503 -p /bin < /root/.bin_chksum_mtree >> /root/.bin_chksum_output
-# mtree: /bin checksum: 3427012225
+# mtree -s 123456789 -p /bin < /home/user/.bin_chksum_mtree >> /home/user/.bin_chksum_output
....
This should produce the same checksum for [.filename]#/bin# that was produced when the specification was created.
-If no changes have occurred to the binaries in this directory, the [.filename]#/root/.bin_chksum_output# output file will be empty.
-To simulate a change, change the date on [.filename]#/bin/cat# using `touch` and run the verification command again:
+If no changes have occurred to the binaries in this directory, the [.filename]#/home/user/.bin_chksum_output# output file will be empty.
+
+To simulate a change, change the date on [.filename]#/bin/cat# using man:touch[1] and run the verification command again:
[source,shell]
....
# touch /bin/cat
-# mtree -s 3483151339707503 -p /bin < /root/.bin_chksum_mtree >> /root/.bin_chksum_output
-# more /root/.bin_chksum_output
-cat changed
- modification time expected Fri Sep 27 06:32:55 2013 found Mon Feb 3 10:28:43 2014
....
-It is recommended to create specifications for the directories which contain binaries and configuration files, as well as any directories containing sensitive data.
-Typically, specifications are created for [.filename]#/bin#, [.filename]#/sbin#, [.filename]#/usr/bin#, [.filename]#/usr/sbin#, [.filename]#/usr/local/bin#, [.filename]#/etc#, and [.filename]#/usr/local/etc#.
+Run the verification command again:
-More advanced IDS systems exist, such as package:security/aide[].
-In most cases, `mtree` provides the functionality administrators need.
-It is important to keep the seed value and the checksum output hidden from malicious users.
-More information about `mtree` can be found in man:mtree[8].
+[source,shell]
+....
+# mtree -s 123456789 -p /bin < /home/user/.bin_chksum_mtree >> /home/user/.bin_chksum_output
+....
-[[security-tuning]]
-=== System Tuning for Security
+And then check the content of the output file:
-In FreeBSD, many system features can be tuned using `sysctl`.
-A few of the security features which can be tuned to prevent Denial of Service (DoS) attacks will be covered in this section.
-More information about using `sysctl`, including how to temporarily change values and how to make the changes permanent after testing, can be found in crossref:config[configtuning-sysctl,“Tuning with sysctl(8)”].
+[source,shell]
+....
+# cat /root/.bin_chksum_output
+....
-[NOTE]
-====
-Any time a setting is changed with `sysctl`, the chance to cause undesired harm is increased, affecting the availability of the system.
-All changes should be monitored and, if possible, tried on a testing system before being used on a production system.
-====
+The output should be similar to the following:
-By default, the FreeBSD kernel boots with a security level of `-1`.
-This is called "insecure mode" because immutable file flags may be turned off and all devices may be read from or written to.
-The security level will remain at `-1` unless it is altered through `sysctl` or by a setting in the startup scripts.
-The security level may be increased during system startup by setting `kern_securelevel_enable` to `YES` in [.filename]#/etc/rc.conf#, and the value of `kern_securelevel` to the desired security level.
-See man:security[7] and man:init[8] for more information on these settings and the available security levels.
+[.programlisting]
+....
+cat: modification time (Fri Aug 25 13:30:17 2023, Fri Aug 25 13:34:20 2023)
+....
[WARNING]
====
-Increasing the `securelevel` can break Xorg and cause other issues.
-Be prepared to do some debugging.
+This is just an example of what would be displayed when executing the command,
+to show the changes that would occur in the metadata.
====
-The `net.inet.tcp.blackhole` and `net.inet.udp.blackhole` settings can be used to drop incoming SYN packets on closed ports without sending a return RST response.
-The default behavior is to return an RST to show a port is closed.
-Changing the default provides some level of protection against ports scans, which are used to determine which applications are running on a system.
-Set `net.inet.tcp.blackhole` to `2` and `net.inet.udp.blackhole` to `1`.
-Refer to man:blackhole[4] for more information about these settings.
+[[security-secure-levels]]
+== Secure levels
+
+securelevel is a security mechanism implemented in the kernel.
+When the securelevel is positive, the kernel restricts certain tasks; not even the superuser (root) is allowed to do them.
+
+The securelevel mechanism limits the ability to:
-The `net.inet.icmp.drop_redirect` and `net.inet.ip.redirect` settings help prevent against _redirect attacks_.
-A redirect attack is a type of DoS which sends mass numbers of ICMP type 5 packets.
-Since these packets are not required, set `net.inet.icmp.drop_redirect` to `1` and set `net.inet.ip.redirect` to `0`.
+* Unset certain file flags, such as `schg` (the system immutable flag).
+* Write to kernel memory via [.filename]#/dev/mem# and [.filename]#/dev/kmem#.
+* Load kernel modules.
+* Alter firewall rules.
-Source routing is a method for detecting and accessing non-routable addresses on the internal network.
-This should be disabled as non-routable addresses are normally not routable on purpose.
-To disable this feature, set `net.inet.ip.sourceroute` and `net.inet.ip.accept_sourceroute` to `0`.
+[[security-secure-levels-definitions]]
+=== Secure Levels Definitions
-When a machine on the network needs to send messages to all hosts on a subnet, an ICMP echo request message is sent to the broadcast address.
-However, there is no reason for an external host to perform such an action.
-To reject all external broadcast requests, set `net.inet.icmp.bmcastecho` to `0`.
+The kernel runs with five different security levels.
+Any super-user process can raise the level, but no process can lower it.
-Some additional settings are documented in man:security[7].
+The security definitions are:
-[[one-time-passwords]]
-== One-time Passwords
+-1::
+*Permanently insecure mode* - always run the system in insecure mode.
+This is the default initial value.
-By default, FreeBSD includes support for One-time Passwords In Everything (OPIE).
-OPIE is designed to prevent replay attacks, in which an attacker discovers a user's password and uses it to access a system.
-Since a password is only used once in OPIE, a discovered password is of little use to an attacker.
-OPIE uses a secure hash and a challenge/response system to manage passwords.
-The FreeBSD implementation uses the MD5 hash by default.
+0::
+*Insecure mode* - immutable and append-only flags may be turned off.
+All devices may be read or written subject to their permissions.
-OPIE uses three different types of passwords.
-The first is the usual UNIX(R) or Kerberos password.
-The second is the one-time password which is generated by `opiekey`.
-The third type of password is the "secret password" which is used to generate one-time passwords.
-The secret password has nothing to do with, and should be different from, the UNIX(R) password.
+1::
+*Secure mode* - the system immutable and system append-only flags may not be turned off;
+disks for mounted file systems, [.filename]#/dev/mem# and [.filename]#/dev/kmem# may not be opened for writing;
+[.filename]#/dev/io# (if your platform has it) may not be opened at all; kernel modules (see man:kld[4]) may not be loaded or unloaded.
+The kernel debugger may not be entered using the debug.kdb.enter sysctl.
+A panic or trap cannot be forced using the debug.kdb.panic, debug.kdb.panic_str and other sysctl's.
-There are two other pieces of data that are important to OPIE.
-One is the "seed" or "key", consisting of two letters and five digits.
-The other is the "iteration count", a number between 1 and 100.
-OPIE creates the one-time password by concatenating the seed and the secret password, applying the MD5 hash as many times as specified by the iteration count, and turning the result into six short English words which represent the one-time password.
-The authentication system keeps track of the last one-time password used, and the user is authenticated if the hash of the user-provided password is equal to the previous password.
-Since a one-way hash is used, it is impossible to generate future one-time passwords if a successfully used password is captured.
-The iteration count is decremented after each successful login to keep the user and the login program in sync.
-When the iteration count gets down to `1`, OPIE must be reinitialized.
+2::
+*Highly secure mode* - same as secure mode, plus disks may not be opened for writing (except by man:mount[2]) whether mounted or not.
+This level precludes tampering with file systems by unmounting them, but also inhibits running man:newfs[8] while the system is multiuser.
-There are a few programs involved in this process.
-A one-time password, or a consecutive list of one-time passwords, is generated by passing an iteration count, a seed, and a secret password to man:opiekey[1].
-In addition to initializing OPIE, man:opiepasswd[1] is used to change passwords, iteration counts, or seeds.
-The relevant credential files in [.filename]#/etc/opiekeys# are examined by man:opieinfo[1] which prints out the invoking user's current iteration count and seed.
+3::
+*Network secure mode* - same as highly secure mode, plus IP packet filter rules (see man:ipfw[8], man:ipfirewall[4] and man:pfctl[8]) cannot be changed and man:dummynet[4] or man:pf[4] configuration cannot be adjusted.
-This section describes four different sorts of operations.
-The first is how to set up one-time-passwords for the first time over a secure connection.
-The second is how to use `opiepasswd` over an insecure connection.
-The third is how to log in over an insecure connection.
-The fourth is how to generate a number of keys which can be written down or printed out to use at insecure locations.
+[TIP]
+====
+In summary, the key difference between `Permanently Insecure Mode` and `Insecure Mode` in FreeBSD secure levels is the degree of security they provide.
+`Permanently Insecure Mode` completely lifts all security restrictions, while `Insecure Mode` relaxes some restrictions but still maintains a level of control and security.
+====
-=== Initializing OPIE
+[[security-modify-secure-levels]]
+=== Modify Secure Levels
-To initialize OPIE for the first time, run this command from a secure location:
+In order to change the securelevel of the system it is necessary to activate `kern_securelevel_enable` by executing the following command:
[source,shell]
....
-% opiepasswd -c
-Adding unfurl:
-Only use this method from the console; NEVER from remote. If you are using
-telnet, xterm, or a dial-in, type ^C now or exit with no password.
-Then run opiepasswd without the -c parameter.
-Using MD5 to compute responses.
-Enter new secret pass phrase:
-Again new secret pass phrase:
+# sysrc kern_securelevel_enable="YES"
+....
+
+And set the value of `kern_securelevel` to the desired security level:
+
+[source,shell]
+....
+# sysrc kern_securelevel=2
+....
-ID unfurl OTP key is 499 to4268
-MOS MALL GOAT ARM AVID COED
+To check the status of the securelevel on a running system execute the following command:
+
+[source,shell]
+....
+# sysctl -n kern.securelevel
....
-The `-c` sets console mode which assumes that the command is being run from a secure location, such as a computer under the user's control or an SSH session to a computer under the user's control.
+The output contains the current value of the securelevel.
+If it is greater than 0, at least some of the securelevel's protections are enabled.
+
+[[security-file-flags]]
+== File flags
+
+File flags allow users to attach additional metadata or attributes to files and directories beyond basic permissions and ownership.
+These flags provide a way to control various behaviors and properties of files without needing to resort to creating special directories or using extended attributes.
-When prompted, enter the secret password which will be used to generate the one-time login keys.
-This password should be difficult to guess and should be different than the password which is associated with the user's login account.
-It must be between 10 and 127 characters long. Remember this password.
+File flags can be used to achieve different goals, such as preventing file deletion, making files append-only, synchronizing file updates, and more.
+Some commonly used file flags in FreeBSD include the "immutable" flag, which prevents modification or deletion of a file, and the "append-only" flag, which allows only data to be added to the end of a file but not modified or removed.
-The `ID` line lists the login name (`unfurl`), default iteration count (`499`), and default seed (`to4268`).
-When logging in, the system will remember these parameters and display them, meaning that they do not have to be memorized.
-The last line lists the generated one-time password which corresponds to those parameters and the secret password.
-At the next login, use this one-time password.
+These flags can be managed using the man:chflags[1] command in FreeBSD, providing administrators and users with greater control over the behavior and characteristics of their files and directories.
+It is important to note that file flags are typically managed by root or users with appropriate privileges, as they can influence how files are accessed and manipulated.
+Some flags are available for the use of the file's owner, as described in man:chflags[1].
-=== Insecure Connection Initialization
+[[security-work-file-flag]]
+=== Work with File Flags
-To initialize or change the secret password on an insecure system, a secure connection is needed to some place where `opiekey` can be run.
-This might be a shell prompt on a trusted machine.
-An iteration count is needed, where 100 is probably a good value, and the seed can either be specified or the randomly-generated one used.
-On the insecure connection, the machine being initialized, use man:opiepasswd[1]:
+In this example, a file named [.filename]#~/important.txt# in user's home directory want to be protected against deletions.
+
+Execute the following command to set the `schg` file flag:
[source,shell]
....
-% opiepasswd
+# chflags schg ~/important.txt
+....
-Updating unfurl:
-You need the response from an OTP generator.
-Old secret pass phrase:
- otp-md5 498 to4268 ext
- Response: GAME GAG WELT OUT DOWN CHAT
-New secret pass phrase:
- otp-md5 499 to4269
- Response: LINE PAP MILK NELL BUOY TROY
+When any user, including the `root` user, tries to delete the file, the system will display the message:
-ID mark OTP key is 499 gr4269
-LINE PAP MILK NELL BUOY TROY
+[.programlisting]
+....
+rm: important.txt: Operation not permitted
....
-To accept the default seed, press kbd:[Return].
-Before entering an access password, move over to the secure connection and give it the same parameters:
+To delete the file, it will be necessary to delete the file flags of that file by executing the following command:
[source,shell]
....
-% opiekey 498 to4268
-Using the MD5 algorithm to compute response.
-Reminder: Do not use opiekey from telnet or dial-in sessions.
-Enter secret pass phrase:
-GAME GAG WELT OUT DOWN CHAT
+# chflags noschg ~/important.txt
....
-Switch back over to the insecure connection, and copy the generated one-time password over to the relevant program.
+A list of supported file flags and their functionality can be found in man:chflags[1].
-=== Generating a Single One-time Password
+[[openssh]]
+== OpenSSH
+
+OpenSSH is a set of network connectivity tools used to provide secure access to remote machines.
+Additionally, TCP/IP connections can be tunneled or forwarded securely through SSH connections.
+OpenSSH encrypts all traffic to eliminate eavesdropping, connection hijacking, and other network-level attacks.
+
+OpenSSH is maintained by the OpenBSD project and is installed by default in FreeBSD.
+
+When data is sent over the network in an unencrypted form, network sniffers anywhere in between the client and server can steal user/password information or data transferred during the session.
+OpenSSH offers a variety of authentication and encryption methods to prevent this from happening.
+
+More information about OpenSSH is available in the link:https://www.openssh.com/[web page].
+
+This section provides an overview of the built-in client utilities to securely access other systems and securely transfer files from a FreeBSD system.
+It then describes how to configure a SSH server on a FreeBSD system.
+
+[TIP]
+====
+As stated, this chapter will cover the base system version of OpenSSH.
+A version of OpenSSH is also available in the package:security/openssh-portable[], which provides additional configuration options and is updated more regularly.
+====
+
+=== Using the SSH Client Utilities
+
+To log into a SSH server, use man:ssh[1] and specify a username that exists on that server and the IP address or hostname of the server.
+If this is the first time a connection has been made to the specified server, the user will be prompted to first verify the server's fingerprint:
+
+[source,shell]
+....
+# ssh user@example.com
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
+The authenticity of host 'example.com (10.0.0.1)' can't be established.
+ECDSA key fingerprint is 25:cc:73:b5:b3:96:75:3d:56:19:49:d2:5c:1f:91:3b.
+Are you sure you want to continue connecting (yes/no)? yes
+Permanently added 'example.com' (ECDSA) to the list of known hosts.
+Password for user@example.com: user_password
+....
+
+SSH utilizes a key fingerprint system to verify the authenticity of the server when the client connects.
+When the user accepts the key's fingerprint by typing `yes` when connecting for the first time, a copy of the key is saved to [.filename]#~/.ssh/known_hosts# in the user's home directory.
+Future attempts to login are verified against the saved key and man:ssh[1] will display an alert if the server's key does not match the saved key.
+If this occurs, the user should first verify why the key has changed before continuing with the connection.
+
+[NOTE]
+====
+How to perform this check is outside the scope of this chapter.
+====
-After initializing OPIE and logging in, a prompt like this will be displayed:
+Use man:scp[1] to securely copy a file to or from a remote machine.
+
+This example copies `COPYRIGHT` on the remote system to a file of the same name in the current directory of the local system:
[source,shell]
....
-% telnet example.com
-Trying 10.0.0.1...
-Connected to example.com
-Escape character is '^]'.
+# scp user@example.com:/COPYRIGHT COPYRIGHT
+....
-FreeBSD/i386 (example.com) (ttypa)
+The output should be similar to the following:
-login: <username>
-otp-md5 498 gr4269 ext
-Password:
+[.programlisting]
+....
+Password for user@example.com: *******
+COPYRIGHT 100% |*****************************| 4735
....
-The OPIE prompts provides a useful feature.
-If kbd:[Return] is pressed at the password prompt, the prompt will turn echo on and display what is typed.
-This can be useful when attempting to type in a password by hand from a printout.
+Since the fingerprint was already verified for this host, the server's key is automatically checked before prompting for the user's password.
+
+The arguments passed to man:scp[1] are similar to man:cp[1].
+The file or files to copy is the first argument and the destination to copy to is the second.
+Since the file is fetched over the network, one or more of the file arguments takes the form `user@host:<path_to_remote_file>`.
+Be aware when copying directories recursively that man:scp[1] uses `-r`, whereas man:cp[1] uses `-R`.
+
+To open an interactive session for copying files, use man:sftp[1].
-At this point, generate the one-time password to answer this login prompt.
-This must be done on a trusted system where it is safe to run man:opiekey[1].
-There are versions of this command for Windows(R), Mac OS(R) and FreeBSD.
-This command needs the iteration count and the seed as command line options.
-Use cut-and-paste from the login prompt on the machine being logged in to.
+Refer to man:sftp[1] for a list of available commands while in an man:sftp[1] session.
+
+[[security-ssh-keygen]]
+=== Key-based Authentication
+
+Instead of using passwords, a client can be configured to connect to the remote machine using keys.
+For security reasons, this is the preferred method.
-On the trusted system:
+man:ssh-keygen[1] can be used to generate the authentication keys.
+To generate a public and private key pair, specify the type of key and follow the prompts.
+It is recommended to protect the keys with a memorable, but hard to guess passphrase.
[source,shell]
....
-% opiekey 498 to4268
-Using the MD5 algorithm to compute response.
-Reminder: Do not use opiekey from telnet or dial-in sessions.
-Enter secret pass phrase:
-GAME GAG WELT OUT DOWN CHAT
+% ssh-keygen -t rsa -b 4096
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
+Generating public/private rsa key pair.
+Enter file in which to save the key (/home/user/.ssh/id_rsa):
+Created directory '/home/user/.ssh/.ssh'.
+Enter passphrase (empty for no passphrase):
+Enter same passphrase again:
+Your identification has been saved in /home/user/.ssh/id_rsa.
+Your public key has been saved in /home/user/.ssh/id_rsa.pub.
+The key fingerprint is:
+SHA256:54Xm9Uvtv6H4NOo6yjP/YCfODryvUU7yWHzMqeXwhq8 user@host.example.com
+The key's randomart image is:
++---[RSA 2048]----+
+| |
+| |
+| |
+| . o.. |
+| .S*+*o |
+| . O=Oo . . |
+| = Oo= oo..|
+| .oB.* +.oo.|
+| =OE**.o..=|
++----[SHA256]-----+
....
-Once the one-time password is generated, continue to log in.
+The private key is stored in [.filename]#~/.ssh/id_rsa# and the public key is stored in [.filename]#~/.ssh/id_rsa.pub#.
+The _public_ key must be copied to [.filename]#~/.ssh/authorized_keys# on the remote machine for key-based authentication to work.
-=== Generating Multiple One-time Passwords
+[WARNING]
+====
+Utilizing a passphrase for OpenSSH keys is a key security practice, providing an extra layer of protection against unauthorized access and enhancing overall cybersecurity.
-Sometimes there is no access to a trusted machine or secure connection.
-In this case, it is possible to use man:opiekey[1] to generate a number of one-time passwords beforehand. For example:
+In case of loss or theft, this adds another layer of security.
+====
+
+[[security-ssh-tunneling]]
+=== SSH Tunneling
+
+OpenSSH has the ability to create a tunnel to encapsulate another protocol in an encrypted session.
+
+The following command tells man:ssh[1] to create a tunnel:
[source,shell]
....
-% opiekey -n 5 30 zz99999
-Using the MD5 algorithm to compute response.
-Reminder: Do not use opiekey from telnet or dial-in sessions.
-Enter secret pass phrase: <secret password>
-26: JOAN BORE FOSS DES NAY QUIT
-27: LATE BIAS SLAY FOLK MUCH TRIG
-28: SALT TIN ANTI LOON NEAL USE
-29: RIO ODIN GO BYE FURY TIC
-30: GREW JIVE SAN GIRD BOIL PHI
+% ssh -D 8080 user@example.com
....
-The `-n 5` requests five keys in sequence, and `30` specifies what the last iteration number should be.
-Note that these are printed out in _reverse_ order of use.
-The really paranoid might want to write the results down by hand; otherwise, print the list.
-Each line shows both the iteration count and the one-time password.
-Scratch off the passwords as they are used.
+This example uses the following options:
+
+-D::
+Specifies a local "dynamic" application-level port forwarding.
-=== Restricting Use of UNIX(R) Passwords
+user@foo.example.com::
+The login name to use on the specified remote SSH server.
-OPIE can restrict the use of UNIX(R) passwords based on the IP address of a login session.
-The relevant file is [.filename]#/etc/opieaccess#, which is present by default.
-Refer to man:opieaccess[5] for more information on this file and which security considerations to be aware of when using it.
+An SSH tunnel works by creating a listen socket on `localhost` on the specified `localport`.
-Here is a sample [.filename]#opieaccess#:
+This method can be used to wrap any number of insecure TCP protocols such as SMTP, POP3, and FTP.
-[.programlisting]
+=== Enabling the SSH Server
+
+In addition to providing built-in SSH client utilities, a FreeBSD system can be configured as an SSH server, accepting connections from other SSH clients.
+
+[TIP]
+====
+As stated, this chapter will cover the base system version of OpenSSH.
+Please *not* confuse with package:security/openssh-portable[], the version of OpenSSH that ships with the FreeBSD ports.
+====
+
+In order to have the SSH Server enabled across reboots execute the following command:
+
+[source,shell]
+....
+# sysrc sshd_enable="YES"
+....
+
+Then execute the following command to enable the service:
+
+[source,shell]
....
-permit 192.168.0.0 255.255.0.0
+# service sshd start
....
-This line allows users whose IP source address (which is vulnerable to spoofing) matches the specified value and mask, to use UNIX(R) passwords at any time.
+The first time sshd starts on a FreeBSD system, the system's host keys will be automatically created and the fingerprint will be displayed on the console.
+Provide users with the fingerprint so that they can verify it the first time they connect to the server.
-If no rules in [.filename]#opieaccess# are matched, the default is to deny non-OPIE logins.
+Refer to man:sshd[8] for the list of available options when starting sshd and a complete discussion about authentication, the login process, and the various configuration files.
-[[tcpwrappers]]
-== TCP Wrapper
+At this point, the sshd should be available to all users with a username and password on the system.
-TCP Wrapper is a host-based access control system which extends the abilities of crossref:network-servers[network-inetd,“The inetd Super-Server”].
-It can be configured to provide logging support, return messages, and connection restrictions for the server daemons under the control of inetd.
-Refer to man:tcpd[8] for more information about TCP Wrapper and its features.
+[[config-publickey-auth]]
+=== Configuring publickey auth method
-TCP Wrapper should not be considered a replacement for a properly configured firewall.
-Instead, TCP Wrapper should be used in conjunction with a firewall and other security enhancements in order to provide another layer of protection in the implementation of a security policy.
+Configuring OpenSSH to use public key authentication enhances security by leveraging asymmetric cryptography for authentication.
+This method eliminates password-related risks, such as weak passwords or interception during transmission, while thwarting various password-based attacks.
+However, it's vital to ensure the private keys are well-protected to prevent unauthorized access.
-=== Initial Configuration
+The first step will be to configure man:sshd[8] to use the required authentication method.
-To enable TCP Wrapper in FreeBSD, add the following lines to [.filename]#/etc/rc.conf#:
+Edit [.filename]#/etc/ssh/sshd_config# and uncomment the following configuration:
[.programlisting]
....
-inetd_enable="YES"
-inetd_flags="-Ww"
+PubkeyAuthentication yes
....
-Then, properly configure [.filename]#/etc/hosts.allow#.
+Once the configuration is done, the users will have to send the system administrator their *public key* and these keys will be added in [.filename]#.ssh/authorized_keys#.
+The process for generating the keys is described in <<Key-based Authentication>>.
-[NOTE]
+Then restart the server executing the following command:
+
+[source,shell]
+....
+# service sshd reload
+....
+
+It is strongly recommended to follow the security improvements indicated in <<security-sshd-security-options>>.
+
+[[security-sshd-security-options]]
+=== SSH Server Security Options
+
+While sshd is the most widely used remote administration facility for FreeBSD, brute force and drive by attacks are common to any system exposed to public networks.
+
+Several additional parameters are available to prevent the success of these attacks and will be described in this section.
+All configurations will be done in [.filename]#/etc/ssh/sshd_config#
+
+[TIP]
====
-Unlike other implementations of TCP Wrapper, the use of [.filename]#hosts.deny# is deprecated in FreeBSD.
-All configuration options should be placed in [.filename]#/etc/hosts.allow#.
+Do not confuse [.filename]#/etc/ssh/sshd_config# with [.filename]#/etc/ssh/ssh_config# (note the extra `d` in the first filename).
+The first file configures the server and the second file configures the client.
+Refer to man:ssh_config[5] for a listing of the available client settings.
====
-In the simplest configuration, daemon connection policies are set to either permit or block, depending on the options in [.filename]#/etc/hosts.allow#.
-The default configuration in FreeBSD is to allow all connections to the daemons started with inetd.
+By default, authentication can be done with both pubkey and password.
+To allow *only* pubkey authentication, *which is strongly recommended*, change the variable:
-Basic configuration usually takes the form of `daemon : address : action`, where `daemon` is the daemon which inetd started, `address` is a valid hostname, IP address, or an IPv6 address enclosed in brackets ([ ]), and `action` is either `allow` or `deny`.
-TCP Wrapper uses a first rule match semantic, meaning that the configuration file is scanned from the beginning for a matching rule.
-When a match is found, the rule is applied and the search process stops.
+[.programlisting]
+....
+PasswordAuthentication no
+....
-For example, to allow POP3 connections via the package:mail/qpopper[] daemon, the following lines should be appended to [.filename]#hosts.allow#:
+It is a good idea to limit which users can log into the SSH server and from where using the `AllowUsers` keyword in the OpenSSH server configuration file.
+For example, to only allow `user` to log in from `192.168.1.32`, add this line to [.filename]#/etc/ssh/sshd_config#:
[.programlisting]
....
-# This line is required for POP3 connections:
-qpopper : ALL : allow
+AllowUsers user@192.168.1.32
....
-Whenever this file is edited, restart inetd:
+To allow `user` to log in from anywhere, list that user without specifying an IP address:
+
+[.programlisting]
+....
+AllowUsers user
+....
+
+Multiple users should be listed on the same line, like so:
+
+[.programlisting]
+....
+AllowUsers root@192.168.1.32 user
+....
+
+After making all the changes, and before restarting the service, it is recommended to verify that the configuration made is correct by executing the following command:
[source,shell]
....
-# service inetd restart
+# sshd -t
....
-=== Advanced Configuration
+If the configuration file is correct, no output will be shown.
+In case the configuration file is incorrect, it will show something like this:
-TCP Wrapper provides advanced options to allow more control over the way connections are handled.
-In some cases, it may be appropriate to return a comment to certain hosts or daemon connections.
-In other cases, a log entry should be recorded or an email sent to the administrator.
-Other situations may require the use of a service for local connections only.
-This is all possible through the use of configuration options known as wildcards, expansion characters, and external command execution.
+[.programlisting]
+....
+/etc/ssh/sshd_config: line 3: Bad configuration option: sdadasdasdasads
+/etc/ssh/sshd_config: terminating, 1 bad configuration options
+....
-Suppose that a situation occurs where a connection should be denied yet a reason should be sent to the host who attempted to establish that connection.
-That action is possible with `twist`.
-When a connection attempt is made, `twist` executes a shell command or script.
-An example exists in [.filename]#hosts.allow#:
+After making the changes and checking that the configuration file is correct, tell sshd to reload its configuration file by running:
+
+[source,shell]
+....
+# service sshd reload
+....
+
+[[openssl]]
+== OpenSSL
+
+OpenSSL is a cryptography toolkit implementing the Secure Sockets Layer (SSL) and Transport Layer Security (TLS) network protocols and many cryptography routines.
+
+The openssl program is a command line tool for using the various cryptography functions of OpenSSL's crypto library from the shell.
+It can be used for
+
+* Creation and management of private keys, public keys and parameters
+* Public key cryptographic operations
+* Creation of X.509 certificates, CSRs and CRLs
+* Calculation of Message Digests
+* Encryption and Decryption with Ciphers
+* SSL/TLS Client and Server Tests
+* Handling of S/MIME signed or encrypted mail
+* Time Stamp requests, generation and verification
+* Benchmarking the crypto routines
+
+For more information about OpenSSL, read the free https://www.feistyduck.com/books/openssl-cookbook/[OpenSSL Cookbook].
+
+[[generating-certificates]]
+=== Generating Certificates
+
+OpenSSL supports the generation of certificates both to be validated by a link:https://en.wikipedia.org/wiki/Certificate_authority[CA] and for own use.
+
+Run the command man:openssl[1] to generate a valid certificate for a link:https://en.wikipedia.org/wiki/Certificate_authority[CA] with the following arguments.
+This command will create two files in the current directory.
+The certificate request, [.filename]#req.pem#, can be sent to a link:https://en.wikipedia.org/wiki/Certificate_authority[CA] which,
+will validate the entered credentials, sign the request, and return the signed certificate.
+The second file, [.filename]#cert.key#, is the private key for the certificate and should be stored in a secure location.
+If this falls in the hands of others, it can be used to impersonate the user or the server.
+
+Execute the following command to generate the certificate:
+
+[source,shell]
+....
+# openssl req -new -nodes -out req.pem -keyout cert.key -sha3-512 -newkey rsa:4096
+....
+
+The output should be similar to the following:
[.programlisting]
....
-# The rest of the daemons are protected.
-ALL : ALL \
- : severity auth.info \
- : twist /bin/echo "You are not welcome to use %d from %h."
+Generating a RSA private key
+..................................................................................................................................+++++
+......................................+++++
+writing new private key to 'cert.key'
+-----
+You are about to be asked to enter information that will be incorporated
+into your certificate request.
+What you are about to enter is what is called a Distinguished Name or a DN.
+There are quite a few fields but you can leave some blank
+For some fields there will be a default value,
+If you enter '.', the field will be left blank.
+-----
+Country Name (2 letter code) [AU]:ES
+State or Province Name (full name) [Some-State]:Valencian Community
+Locality Name (eg, city) []:Valencia
+Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
+Organizational Unit Name (eg, section) []:Systems Administrator
+Common Name (e.g. server FQDN or YOUR name) []:localhost.example.org
+Email Address []:user@FreeBSD.org
+
+Please enter the following 'extra' attributes
+to be sent with your certificate request
+A challenge password []:123456789
+An optional company name []:Another name
....
-In this example, the message "You are not allowed to use _daemon name_ from _hostname_."
-will be returned for any daemon not configured in [.filename]#hosts.allow#.
-This is useful for sending a reply back to the connection initiator right after the established connection is dropped.
-Any message returned _must_ be wrapped in quote (`"`) characters.
+Alternately, if a signature from a link:https://en.wikipedia.org/wiki/Certificate_authority[CA] is not required, a self-signed certificate can be created.
+This will create two new files in the current directory: a private key file [.filename]#cert.key#, and the certificate itself, [.filename]#cert.crt#.
+These should be placed in a directory, preferably under [.filename]#/etc/ssl/#, which is readable only by `root`.
+Permissions of `0700` are appropriate for these files and can be set using `chmod`.
-[WARNING]
-====
-It may be possible to launch a denial of service attack on the server if an attacker floods these daemons with connection requests.
-====
+Execute the following command to generate the certificate:
+
+[source,shell]
+....
+# openssl req -new -x509 -days 365 -sha3-512 -keyout /etc/ssl/private/cert.key -out /etc/ssl/certs/cert.crt
+....
-Another possibility is to use `spawn`.
-Like `twist`, `spawn` implicitly denies the connection and may be used to run external shell commands or scripts.
-Unlike `twist`, `spawn` will not send a reply back to the host who established the connection.
-For example, consider the following configuration:
+The output should be similar to the following:
[.programlisting]
....
-# We do not allow connections from example.com:
-ALL : .example.com \
- : spawn (/bin/echo %a from %h attempted to access %d >> \
- /var/log/connections.log) \
- : deny
+Generating a RSA private key
+........................................+++++
+...........+++++
+writing new private key to '/etc/ssl/private/cert.key'
+Enter PEM pass phrase:
+Verifying - Enter PEM pass phrase:
+-----
+You are about to be asked to enter information that will be incorporated
+into your certificate request.
+What you are about to enter is what is called a Distinguished Name or a DN.
+There are quite a few fields but you can leave some blank
+For some fields there will be a default value,
+If you enter '.', the field will be left blank.
+-----
+Country Name (2 letter code) [AU]:ES
+State or Province Name (full name) [Some-State]:Valencian Community
+Locality Name (eg, city) []:Valencia
+Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
+Organizational Unit Name (eg, section) []:Systems Administrator
+Common Name (e.g. server FQDN or YOUR name) []:localhost.example.org
+Email Address []:user@FreeBSD.org
....
-This will deny all connection attempts from `*.example.com` and log the hostname, IP address, and the daemon to which access was attempted to [.filename]#/var/log/connections.log#.
-This example uses the substitution characters `%a` and `%h`.
-Refer to man:hosts_access[5] for the complete list.
+[[fips-provider]]
+=== Configuring the FIPS Provider
+
+With the import of OpenSSL 3 into the base system (on FreeBSD 14 and later), its new concept of provider modules was introduced in the system.
+Besides the default provider module built-in to the library, the _legacy_ module implements the now optional deprecated cryptography algorithms, while the _fips_ module restricts the OpenSSL implementation to the cryptography algorithms present in the link:https://en.wikipedia.org/wiki/Federal_Information_Processing_Standards[FIPS] set of standards.
+This part of OpenSSL receives link:https://www.openssl.org/docs/fips.html[particular care], including a link:https://www.openssl.org/news/fips-cve.html[list of relevant security issues], and is subject to the link:https://github.com/openssl/openssl/blob/master/README-FIPS.md[FIPS 140 validation process] on a regular basis.
+The link:https://www.openssl.org/source/[list of FIPS validated versions] is also available.
+This allows users to ensure FIPS compliance in their use of OpenSSL.
-To match every instance of a daemon, domain, or IP address, use `ALL`.
-Another wildcard is `PARANOID` which may be used to match any host which provides an IP address that may be forged because the IP address differs from its resolved hostname.
-In this example, all connection requests to Sendmail which have an IP address that varies from its hostname will be denied:
+Importantly, the man:fips_module[7] is protected by an additional security measure, preventing its use without passing an integrity check.
+This check can be setup by the local system administrator, allowing every user of OpenSSL 3 to load this module.
+When not configured correctly, the FIPS module is expected to fail as follows:
+
+[source,shell]
+....
+# echo test | openssl aes-128-cbc -a -provider fips -pbkdf2
+....
+
+The output should be similar to the following:
[.programlisting]
....
-# Block possibly spoofed requests to sendmail:
-sendmail : PARANOID : deny
+aes-128-cbc: unable to load provider fips
+Hint: use -provider-path option or OPENSSL_MODULES environment variable.
+00206124D94D0000:error:1C8000D5:Provider routines:SELF_TEST_post:missing config data:crypto/openssl/providers/fips/self_test.c:275:
+00206124D94D0000:error:1C8000E0:Provider routines:ossl_set_error_state:fips module entering error state:crypto/openssl/providers/fips/self_test.c:373:
+00206124D94D0000:error:1C8000D8:Provider routines:OSSL_provider_init_int:self test post failure:crypto/openssl/providers/fips/fipsprov.c:707:
+00206124D94D0000:error:078C0105:common libcrypto routines:provider_init:init fail:crypto/openssl/crypto/provider_core.c:932:name=fips
....
-[CAUTION]
-====
-Using the `PARANOID` wildcard will result in denied connections if the client or server has a broken DNS setup.
-====
+The check can be configured through the creation of a file in [.filename]#/etc/ssl/fipsmodule.cnf#, which will then be referenced in OpenSSL's main configuration file [.filename]#/etc/ssl/openssl.cnf#.
+OpenSSL provides the man:openssl-fipsinstall[1] utility to help with this process, which can be used as follows:
-To learn more about wildcards and their associated functionality, refer to man:hosts_access[5].
+[source,shell]
+....
+# openssl fipsinstall -module /usr/lib/ossl-modules/fips.so -out /etc/ssl/fipsmodule.cnf
+....
-[NOTE]
-====
-When adding new configuration lines, make sure that any unneeded entries for that daemon are commented out in [.filename]#hosts.allow#.
-====
+The output should be similar to the following:
+
+[.programlisting]
+....
+INSTALL PASSED
+....
+
+The [.filename]#/etc/ssl/openssl.cnf# should then be modified, in order to:
+
+* Include the [.filename]#/etc/ssl/fipsmodule.cnf# file generated above,
+* Expose the FIPS module for possible use,
+* And explicitly activate the default module.
+
+[.programlisting]
+....
+[...]
+# For FIPS
+# Optionally include a file that is generated by the OpenSSL fipsinstall
+# application. This file contains configuration data required by the OpenSSL
+# fips provider. It contains a named section e.g. [fips_sect] which is
+# referenced from the [provider_sect] below.
+# Refer to the OpenSSL security policy for more information.
+.include /etc/ssl/fipsmodule.cnf
+
+[...]
+
+# List of providers to load
+[provider_sect]
+default = default_sect
+# The fips section name should match the section name inside the
+# included fipsmodule.cnf.
+fips = fips_sect
+
+# If no providers are activated explicitly, the default one is activated implicitly.
+# See man 7 OSSL_PROVIDER-default for more details.
+#
+# If you add a section explicitly activating any other provider(s), you most
+# probably need to explicitly activate the default provider, otherwise it
+# becomes unavailable in openssl. As a consequence applications depending on
+# OpenSSL may not work correctly which could lead to significant system
+# problems including inability to remotely access the system.
+[default_sect]
+activate = 1
+....
+
+With this done, it should be possible to confirm that the FIPS module is effectively available and working:
+
+[source,shell]
+....
+# echo test | openssl aes-128-cbc -a -provider fips -pbkdf2
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
+enter AES-128-CBC encryption password:
+Verifying - enter AES-128-CBC encryption password:
+U2FsdGVkX18idooW6e3LqWeeiKP76kufcOUClh57j8U=
+....
+
+This procedure has to be repeated every time the FIPS module is modified, e.g., after performing system updates, or after applying security fixes affecting OpenSSL in the base system.
[[kerberos5]]
== Kerberos
@@ -866,6 +1271,12 @@ To create the master key, run `kstash` and enter a password:
[source,shell]
....
# kstash
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
Master key: xxxxxxxxxxxxxxxxxxxxxxx
Verifying password - Master key: xxxxxxxxxxxxxxxxxxxxxxx
....
@@ -889,6 +1300,12 @@ Type `?` at the prompt to see the available options.
[source,shell]
....
kadmin> add tillman
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
Max ticket life [unlimited]:
Max renewable life [unlimited]:
Principal expiration time [never]:
@@ -911,6 +1328,12 @@ While there will not be any kerberized daemons running at this point, it is poss
[source,shell]
....
% kinit tillman
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
tillman@EXAMPLE.ORG's Password:
....
@@ -919,6 +1342,12 @@ Confirm that a ticket was successfully obtained using `klist`:
[source,shell]
....
% klist
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
Credentials cache: FILE:/tmp/krb5cc_1001
Principal: tillman@EXAMPLE.ORG
@@ -958,6 +1387,12 @@ To generate the keytab, use `ext` to extract the server's host principal key to
[source,shell]
....
# kadmin
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
kadmin> add --random-key host/myserver.example.org
Max ticket life [unlimited]:
Max renewable life [unlimited]:
@@ -974,6 +1409,12 @@ This is good when being run on the server being kerberized, but the `--keytab _p
[source,shell]
....
# kadmin
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
kadmin> ext_keytab --keytab=/tmp/example.keytab host/myserver.example.org
kadmin> exit
....
@@ -1033,15 +1474,15 @@ Client applications may also use slightly different command line options to acco
Following the instructions at http://web.mit.edu/Kerberos/www/[http://web.mit.edu/Kerberos/www/] is recommended.
Be careful of path issues: the MIT port installs into [.filename]#/usr/local/# by default, and the FreeBSD system applications run instead of the MIT versions if `PATH` lists the system directories first.
-When using MIT Kerberos as a KDC on FreeBSD, the following edits should also be made to [.filename]#rc.conf#:
+When using MIT Kerberos as a KDC on FreeBSD, execute the following commands to add the required configurations to [.filename]#/etc/rc.conf#:
-[.programlisting]
+[source,shell]
....
-kdc_program="/usr/local/sbin/kdc"
-kadmind_program="/usr/local/sbin/kadmind"
-kdc_flags=""
-kdc_enable="YES"
-kadmind_enable="YES"
+# sysrc kdc_program="/usr/local/sbin/kdc"
+# sysrc kadmind_program="/usr/local/sbin/kadmind"
+# sysrc kdc_flags=""
+# sysrc kdc_enable="YES"
+# sysrc kadmind_enable="YES"
....
=== Kerberos Tips, Tricks, and Troubleshooting
@@ -1089,916 +1530,417 @@ File system integrity checking tools like package:security/tripwire[] can allevi
* http://web.mit.edu/Kerberos/www/[MIT Kerberos home page]
* https://github.com/heimdal/heimdal/wiki[Heimdal Kerberos project wiki page]
-[[openssl]]
-== OpenSSL
-
-OpenSSL is an open source implementation of the SSL and TLS protocols.
-It provides an encryption transport layer on top of the normal communications layer, allowing it to be intertwined with many network applications and services.
-
-The version of OpenSSL included in FreeBSD supports Transport Layer Security 1.0/1.1/1.2/1.3 (TLSv1/TLSv1.1/TLSv1.2/TLSv1.3) network security protocols and can be used as a general cryptographic library.
-
-OpenSSL is often used to encrypt authentication of mail clients and to secure web based transactions such as credit card payments.
-Some ports, such as package:www/apache24[] and package:databases/postgresql11-server[], include a compile option for building with OpenSSL.
-If selected, the port will add support using OpenSSL from the base system.
-To instead have the port compile against OpenSSL from the package:security/openssl[] port, add the following to [.filename]#/etc/make.conf#:
-
-[.programlisting]
-....
-DEFAULT_VERSIONS+= ssl=openssl
-....
-
-Another common use of OpenSSL is to provide certificates for use with software applications.
-Certificates can be used to verify the credentials of a company or individual.
-If a certificate has not been signed by an external _Certificate Authority_ (CA), such as http://www.verisign.com[http://www.verisign.com],
-the application that uses the certificate will produce a warning.
-There is a cost associated with obtaining a signed certificate and using a signed certificate is not mandatory as certificates can be self-signed.
-However, using an external authority will prevent warnings and can put users at ease.
-
-This section demonstrates how to create and use certificates on a FreeBSD system.
-Refer to crossref:network-servers[ldap-config,“Configuring an LDAP Server”] for an example of how to create a CA for signing one's own certificates.
-
-For more information about SSL, read the free https://www.feistyduck.com/books/openssl-cookbook/[OpenSSL Cookbook].
-
-=== Generating Certificates
-
-To generate a certificate that will be signed by an external CA, issue the following command and input the information requested at the prompts.
-This input information will be written to the certificate.
-At the `Common Name` prompt, input the fully qualified name for the system that will use the certificate.
-If this name does not match the server, the application verifying the certificate will issue a warning to the user, rendering the verification provided by the certificate as useless.
-
-[source,shell]
-....
-# openssl req -new -nodes -out req.pem -keyout cert.key -sha256 -newkey rsa:2048
-Generating a 2048 bit RSA private key
-..................+++
-.............................................................+++
-writing new private key to 'cert.key'
------
-You are about to be asked to enter information that will be incorporated
-into your certificate request.
-What you are about to enter is what is called a Distinguished Name or a DN.
-There are quite a few fields but you can leave some blank
-For some fields there will be a default value,
-If you enter '.', the field will be left blank.
------
-Country Name (2 letter code) [AU]:US
-State or Province Name (full name) [Some-State]:PA
-Locality Name (e.g., city) []:Pittsburgh
-Organization Name (e.g., company) [Internet Widgits Pty Ltd]:My Company
-Organizational Unit Name (e.g., section) []:Systems Administrator
-Common Name (e.g., YOUR name) []:localhost.example.org
-Email Address []:trhodes@FreeBSD.org
-
-Please enter the following 'extra' attributes
-to be sent with your certificate request
-A challenge password []:
-An optional company name []:Another Name
-....
-
-Other options, such as the expire time and alternate encryption algorithms, are available when creating a certificate.
-A complete list of options is described in man:openssl[1].
+[[tcpwrappers]]
+== TCP Wrappers
-This command will create two files in the current directory.
-The certificate request, [.filename]#req.pem#, can be sent to a CA who will validate the entered credentials, sign the request, and return the signed certificate.
-The second file, [.filename]#cert.key#, is the private key for the certificate and should be stored in a secure location.
-If this falls in the hands of others, it can be used to impersonate the user or the server.
+TCP Wrappers is a host-based network access control system.
+By intercepting incoming network requests before they reach the actual network service,
+TCP Wrappers assess whether the source IP address is permitted or denied access based on predefined rules in configuration files.
-Alternately, if a signature from a CA is not required, a self-signed certificate can be created.
-First, generate the RSA key:
+However, while TCP Wrappers provide basic access control, they should not be considered a substitute for more robust security measures.
+For comprehensive protection, it's recommended to use advanced technologies like firewalls, along with proper user authentication practices and intrusion detection systems.
-[source,shell]
-....
-# openssl genrsa -rand -genkey -out cert.key 2048
-0 semi-random bytes loaded
-Generating RSA private key, 2048 bit long modulus
-.............................................+++
-.................................................................................................................+++
-e is 65537 (0x10001)
-....
+[[tcpwrappers-initial-configuration]]
+=== Initial Configuration
-Use this key to create a self-signed certificate. Follow the usual prompts for creating a certificate:
+TCP Wrappers are enabled by default in man:inetd[8].
+So the first step will be to enable man:inetd[8] executing the following commands:
[source,shell]
....
-# openssl req -new -x509 -days 365 -key cert.key -out cert.crt -sha256
-You are about to be asked to enter information that will be incorporated
-into your certificate request.
-What you are about to enter is what is called a Distinguished Name or a DN.
-There are quite a few fields but you can leave some blank
-For some fields there will be a default value,
-If you enter '.', the field will be left blank.
------
-Country Name (2 letter code) [AU]:US
-State or Province Name (full name) [Some-State]:PA
-Locality Name (e.g., city) []:Pittsburgh
-Organization Name (e.g., company) [Internet Widgits Pty Ltd]:My Company
-Organizational Unit Name (e.g., section) []:Systems Administrator
-Common Name (e.g. server FQDN or YOUR name) []:localhost.example.org
-Email Address []:trhodes@FreeBSD.org
+# sysrc inetd_enable="YES"
+# service inetd start
....
-This will create two new files in the current directory: a private key file [.filename]#cert.key#, and the certificate itself, [.filename]#cert.crt#.
-These should be placed in a directory, preferably under [.filename]#/etc/ssl/#, which is readable only by `root`.
-Permissions of `0700` are appropriate for these files and can be set using `chmod`.
-
-=== Using Certificates
-
-One use for a certificate is to encrypt connections to the Sendmail mail server in order to prevent the use of clear text authentication.
+Then, properly configure [.filename]#/etc/hosts.allow#.
-[NOTE]
+[WARNING]
====
-Some mail clients will display an error if the user has not installed a local copy of the certificate.
-Refer to the documentation included with the software for more information on certificate installation.
+Unlike other implementations of TCP Wrappers, the use of [.filename]#hosts.deny# is deprecated in FreeBSD.
+All configuration options should be placed in [.filename]#/etc/hosts.allow#.
====
-In FreeBSD 10.0-RELEASE and above, it is possible to create a self-signed certificate for Sendmail automatically.
-To enable this, add the following lines to [.filename]#/etc/rc.conf#:
+In the simplest configuration, daemon connection policies are set to either permit or block, depending on the options in [.filename]#/etc/hosts.allow#.
+The default configuration in FreeBSD is to allow all connections to the daemons started with inetd.
-[.programlisting]
-....
-sendmail_enable="YES"
-sendmail_cert_create="YES"
-sendmail_cert_cn="localhost.example.org"
-....
+Basic configuration usually takes the form of `daemon : address : action`, where `daemon` is the daemon which inetd started, `address` is a valid hostname, IP address, or an IPv6 address enclosed in brackets ([ ]), and `action` is either `allow` or `deny`.
+TCP Wrappers uses a first rule match semantic, meaning that the configuration file is scanned from the beginning for a matching rule.
+When a match is found, the rule is applied and the search process stops.
-This will automatically create a self-signed certificate, [.filename]#/etc/mail/certs/host.cert#, a signing key, [.filename]#/etc/mail/certs/host.key#, and a CA certificate, [.filename]#/etc/mail/certs/cacert.pem#.
-The certificate will use the `Common Name` specified in `sendmail_cert_cn`.
-After saving the edits, restart Sendmail:
+For example, to allow POP3 connections via the package:mail/qpopper[] daemon, the following lines should be appended to [.filename]#/etc/hosts.allow#:
-[source,shell]
+[.programlisting]
....
-# service sendmail restart
+# This line is required for POP3 connections:
+qpopper : ALL : allow
....
-If all went well, there will be no error messages in [.filename]#/var/log/maillog#.
-For a simple test, connect to the mail server's listening port using `telnet`:
+Whenever this file is edited, restart inetd:
[source,shell]
....
-# telnet example.com 25
-Trying 192.0.34.166...
-Connected to example.com.
-Escape character is '^]'.
-220 example.com ESMTP Sendmail 8.14.7/8.14.7; Fri, 18 Apr 2014 11:50:32 -0400 (EDT)
-ehlo example.com
-250-example.com Hello example.com [192.0.34.166], pleased to meet you
-250-ENHANCEDSTATUSCODES
-250-PIPELINING
-250-8BITMIME
-250-SIZE
-250-DSN
-250-ETRN
-250-AUTH LOGIN PLAIN
-250-STARTTLS
-250-DELIVERBY
-250 HELP
-quit
-221 2.0.0 example.com closing connection
-Connection closed by foreign host.
+# service inetd restart
....
-If the `STARTTLS` line appears in the output, everything is working correctly.
-
-[[ipsec]]
-== VPN over IPsec
-
-Internet Protocol Security (IPsec) is a set of protocols which sit on top of the Internet Protocol (IP) layer.
-It allows two or more hosts to communicate in a secure manner by authenticating and encrypting each IP packet of a communication session.
-The FreeBSD IPsec network stack is based on the http://www.kame.net/[http://www.kame.net/] implementation and supports both IPv4 and IPv6 sessions.
-
-IPsec is comprised of the following sub-protocols:
+[[tcpwrappers-advanced-config]]
+=== Advanced Configuration
-* _Encapsulated Security Payload (ESP)_: this protocol protects the IP packet data from third party interference by encrypting the contents using symmetric cryptography algorithms such as Blowfish and 3DES.
-* _Authentication Header (AH)_: this protocol protects the IP packet header from third party interference and spoofing by computing a cryptographic checksum and hashing the IP packet header fields with a secure hashing function. This is then followed by an additional header that contains the hash, to allow the information in the packet to be authenticated.
-* _IP Payload Compression Protocol (IPComp_): this protocol tries to increase communication performance by compressing the IP payload in order to reduce the amount of data sent.
+TCP Wrappers provides advanced options to allow more control over the way connections are handled.
+In some cases, it may be appropriate to return a comment to certain hosts or daemon connections.
+In other cases, a log entry should be recorded or an email sent to the administrator.
+Other situations may require the use of a service for local connections only.
+This is all possible through the use of configuration options known as wildcards, expansion characters, and external command execution.
+To learn more about wildcards and their associated functionality, refer to man:hosts_access[5].
-These protocols can either be used together or separately, depending on the environment.
+[[fs-acl]]
+== Access Control Lists
-IPsec supports two modes of operation.
-The first mode, _Transport Mode_, protects communications between two hosts.
-The second mode, _Tunnel Mode_, is used to build virtual tunnels, commonly known as Virtual Private Networks (VPNs).
-Consult man:ipsec[4] for detailed information on the IPsec subsystem in FreeBSD.
+Access Control Lists (ACLs) extend traditional UNIX(R) file permissions by allowing fine-grained access control for users and groups on a per-file or per-directory basis.
+Each ACL entry defines a user or group and the associated permissions, such as read, write, and execute.
+FreeBSD provides commands like man:getfacl[1] and man:setfacl[1] to manage ACLs.
-IPsec support is enabled by default on FreeBSD 11 and later.
-For previous versions of FreeBSD, add these options to a custom kernel configuration file and rebuild the kernel using the instructions in crossref:kernelconfig[kernelconfig,Configuring the FreeBSD Kernel]:
+ACLs are useful in scenarios requiring more specific access control than standard permissions, commonly used in multi-user environments or shared hosting.
+However, complexity may be unavoidable, but careful planning is required to ensure that the desired security properties are being provided
-[source,shell]
-....
-options IPSEC IP security
-device crypto
-....
+[NOTE]
+====
+FreeBSD supports the implementation of NFSv4 ACLs in both UFS and OpenZFS.
+Please note that some arguments to the man:setfacl[1] command only work with POSIX ACLs and others in NFSv4 ACLs.
+====
-If IPsec debugging support is desired, the following kernel option should also be added:
+[[acl-enabling-support-ufs]]
+=== Enabling ACL Support in UFS
-[source,shell]
-....
-options IPSEC_DEBUG debug for IP security
-....
-
-This rest of this chapter demonstrates the process of setting up an IPsecVPN between a home network and a corporate network.
-In the example scenario:
+ACLs are enabled by the mount-time administrative flag, `acls`, which may be added to [.filename]#/etc/fstab#.
-* Both sites are connected to the Internet through a gateway that is running FreeBSD.
-* The gateway on each network has at least one external IP address. In this example, the corporate LAN's external IP address is `172.16.5.4` and the home LAN's external IP address is `192.168.1.12`.
-* The internal addresses of the two networks can be either public or private IP addresses. However, the address space must not overlap. In this example, the corporate LAN's internal IP address is `10.246.38.1` and the home LAN's internal IP address is `10.0.0.5`.
+Therefore it will be necessary to access [.filename]#/etc/fstab# and in the options section add the `acls` flag as follows:
[.programlisting]
....
- corporate home
-10.246.38.1/24 -- 172.16.5.4 <--> 192.168.1.12 -- 10.0.0.5/24
+# Device Mountpoint FStype Options Dump Pass#
+/dev/ada0s1a / ufs rw,acls 1 1
....
-=== Configuring a VPN on FreeBSD
+[[security-acl-info]]
+=== Get ACLs information
-To begin, package:security/ipsec-tools[] must be installed from the Ports Collection.
-This software provides a number of applications which support the configuration.
+It is possible to check the ACLs of a file or a directory using man:getfacl[1].
-The next requirement is to create two man:gif[4] pseudo-devices which will be used to tunnel packets and allow both networks to communicate properly.
-As `root`, run the following command on each gateway:
+For example, to view the ACL settings on [.filename]#~/test# file execute the following command:
[source,shell]
....
-corp-gw# ifconfig gif0 create
-corp-gw# ifconfig gif0 10.246.38.1 10.0.0.5
-corp-gw# ifconfig gif0 tunnel 172.16.5.4 192.168.1.12
-....
-
-[source,shell]
-....
-home-gw# ifconfig gif0 create
-home-gw# ifconfig gif0 10.0.0.5 10.246.38.1
-home-gw# ifconfig gif0 tunnel 192.168.1.12 172.16.5.4
+% getfacl test
....
-Verify the setup on each gateway, using `ifconfig gif0`.
-Here is the output from the home gateway:
+The output should be similar to the following in case of using NFSv4 ACLs:
[.programlisting]
....
-gif0: flags=8051 mtu 1280
-tunnel inet 172.16.5.4 --> 192.168.1.12
-inet6 fe80::2e0:81ff:fe02:5881%gif0 prefixlen 64 scopeid 0x6
-inet 10.246.38.1 --> 10.0.0.5 netmask 0xffffff00
+# file: test
+# owner: freebsduser
+# group: freebsduser
+ owner@:rw-p--aARWcCos:-------:allow
+ group@:r-----a-R-c--s:-------:allow
+ everyone@:r-----a-R-c--s:-------:allow
....
-Here is the output from the corporate gateway:
+And the output should be similar to the following in case of using POSIX.1e ACLs:
[.programlisting]
....
-gif0: flags=8051 mtu 1280
-tunnel inet 192.168.1.12 --> 172.16.5.4
-inet 10.0.0.5 --> 10.246.38.1 netmask 0xffffff00
-inet6 fe80::250:bfff:fe3a:c1f%gif0 prefixlen 64 scopeid 0x4
+# file: test
+# owner: freebsduser
+# group: freebsduser
+user::rw-
+group::r--
+other::r--
....
-Once complete, both internal IP addresses should be reachable using man:ping[8]:
+[[security-working-acls]]
+=== Working with ACLs
-[source,shell]
-....
-home-gw# ping 10.0.0.5
-PING 10.0.0.5 (10.0.0.5): 56 data bytes
-64 bytes from 10.0.0.5: icmp_seq=0 ttl=64 time=42.786 ms
-64 bytes from 10.0.0.5: icmp_seq=1 ttl=64 time=19.255 ms
-64 bytes from 10.0.0.5: icmp_seq=2 ttl=64 time=20.440 ms
-64 bytes from 10.0.0.5: icmp_seq=3 ttl=64 time=21.036 ms
---- 10.0.0.5 ping statistics ---
-4 packets transmitted, 4 packets received, 0% packet loss
-round-trip min/avg/max/stddev = 19.255/25.879/42.786/9.782 ms
+man:setfacl[1] can be used to add, modify or remove ACLs from a file or directory.
-corp-gw# ping 10.246.38.1
-PING 10.246.38.1 (10.246.38.1): 56 data bytes
-64 bytes from 10.246.38.1: icmp_seq=0 ttl=64 time=28.106 ms
-64 bytes from 10.246.38.1: icmp_seq=1 ttl=64 time=42.917 ms
-64 bytes from 10.246.38.1: icmp_seq=2 ttl=64 time=127.525 ms
-64 bytes from 10.246.38.1: icmp_seq=3 ttl=64 time=119.896 ms
-64 bytes from 10.246.38.1: icmp_seq=4 ttl=64 time=154.524 ms
---- 10.246.38.1 ping statistics ---
-5 packets transmitted, 5 packets received, 0% packet loss
-round-trip min/avg/max/stddev = 28.106/94.594/154.524/49.814 ms
-....
+As noted above, some arguments to man:setfacl[1] do not work with NFSv4 ACLs, and vice versa.
+This section covers how to execute the commands for POSIX ACLs and for NFSv4 ACLs and shows examples of both.
-As expected, both sides have the ability to send and receive ICMP packets from the privately configured addresses.
-Next, both gateways must be told how to route packets in order to correctly send traffic from the networks behind each gateway.
-The following commands will achieve this goal:
+For example, to set the mandatory elements of the POSIX.1e default ACL:
[source,shell]
....
-corp-gw# route add 10.0.0.0 10.0.0.5 255.255.255.0
-corp-gw# route add net 10.0.0.0: gateway 10.0.0.5
-home-gw# route add 10.246.38.0 10.246.38.1 255.255.255.0
-home-gw# route add host 10.246.38.0: gateway 10.246.38.1
+% setfacl -d -m u::rwx,g::rx,o::rx,mask::rwx directory
....
-Internal machines should be reachable from each gateway as well as from machines behind the gateways.
-Again, use man:ping[8] to confirm:
+This other example sets read, write, and execute permissions for the file owner's POSIX.1e ACL entry and read and write permissions for group mail on file:
[source,shell]
....
-corp-gw# ping -c 3 10.0.0.8
-PING 10.0.0.8 (10.0.0.8): 56 data bytes
-64 bytes from 10.0.0.8: icmp_seq=0 ttl=63 time=92.391 ms
-64 bytes from 10.0.0.8: icmp_seq=1 ttl=63 time=21.870 ms
-64 bytes from 10.0.0.8: icmp_seq=2 ttl=63 time=198.022 ms
---- 10.0.0.8 ping statistics ---
-3 packets transmitted, 3 packets received, 0% packet loss
-round-trip min/avg/max/stddev = 21.870/101.846/198.022/74.001 ms
-
-home-gw# ping -c 3 10.246.38.107
-PING 10.246.38.1 (10.246.38.107): 56 data bytes
-64 bytes from 10.246.38.107: icmp_seq=0 ttl=64 time=53.491 ms
-64 bytes from 10.246.38.107: icmp_seq=1 ttl=64 time=23.395 ms
-64 bytes from 10.246.38.107: icmp_seq=2 ttl=64 time=23.865 ms
---- 10.246.38.107 ping statistics ---
-3 packets transmitted, 3 packets received, 0% packet loss
-round-trip min/avg/max/stddev = 21.145/31.721/53.491/12.179 ms
+% setfacl -m u::rwx,g:mail:rw file
....
-At this point, traffic is flowing between the networks encapsulated in a gif tunnel but without any encryption.
-Next, use IPSec to encrypt traffic using pre-shared keys (PSK).
-Other than the IP addresses, [.filename]#/usr/local/etc/racoon/racoon.conf# on both gateways will be identical and look similar to:
+To do the same as in the previous example but in NFSv4 ACL:
-[.programlisting]
-....
-path pre_shared_key "/usr/local/etc/racoon/psk.txt"; #location of pre-shared key file
-log debug; #log verbosity setting: set to 'notify' when testing and debugging is complete
-
-padding # options are not to be changed
-{
- maximum_length 20;
- randomize off;
- strict_check off;
- exclusive_tail off;
-}
-
-timer # timing options. change as needed
-{
- counter 5;
- interval 20 sec;
- persend 1;
-# natt_keepalive 15 sec;
- phase1 30 sec;
- phase2 15 sec;
-}
-
-listen # address [port] that racoon will listen on
-{
- isakmp 172.16.5.4 [500];
- isakmp_natt 172.16.5.4 [4500];
-}
-
-remote 192.168.1.12 [500]
-{
- exchange_mode main,aggressive;
- doi ipsec_doi;
- situation identity_only;
- my_identifier address 172.16.5.4;
- peers_identifier address 192.168.1.12;
- lifetime time 8 hour;
- passive off;
- proposal_check obey;
-# nat_traversal off;
- generate_policy off;
-
- proposal {
- encryption_algorithm blowfish;
- hash_algorithm md5;
- authentication_method pre_shared_key;
- lifetime time 30 sec;
- dh_group 1;
- }
-}
-
-sainfo (address 10.246.38.0/24 any address 10.0.0.0/24 any) # address $network/$netmask $type address $network/$netmask $type ( $type being any or esp)
-{ # $network must be the two internal networks you are joining.
- pfs_group 1;
- lifetime time 36000 sec;
- encryption_algorithm blowfish,3des;
- authentication_algorithm hmac_md5,hmac_sha1;
- compression_algorithm deflate;
-}
-....
-
-For descriptions of each available option, refer to the manual page for [.filename]#racoon.conf#.
-
-The Security Policy Database (SPD) needs to be configured so that FreeBSD and racoon are able to encrypt and decrypt network traffic between the hosts.
-
-This can be achieved with a shell script, similar to the following, on the corporate gateway.
-This file will be used during system initialization and should be saved as [.filename]#/usr/local/etc/racoon/setkey.conf#.
-
-[.programlisting]
+[source,shell]
....
-flush;
-spdflush;
-# To the home network
-spdadd 10.246.38.0/24 10.0.0.0/24 any -P out ipsec esp/tunnel/172.16.5.4-192.168.1.12/use;
-spdadd 10.0.0.0/24 10.246.38.0/24 any -P in ipsec esp/tunnel/192.168.1.12-172.16.5.4/use;
+% setfacl -m owner@:rwxp::allow,g:mail:rwp::allow file
....
-Once in place, racoon may be started on both gateways using the following command:
+To remove all ACL entries except for the three required from file in POSIX.1e ACL:
[source,shell]
....
-# /usr/local/sbin/racoon -F -f /usr/local/etc/racoon/racoon.conf -l /var/log/racoon.log
+% setfacl -bn file
....
-The output should be similar to the following:
+To remove all ACL entries in NFSv4 ACL:
[source,shell]
....
-corp-gw# /usr/local/sbin/racoon -F -f /usr/local/etc/racoon/racoon.conf
-Foreground mode.
-2006-01-30 01:35:47: INFO: begin Identity Protection mode.
-2006-01-30 01:35:48: INFO: received Vendor ID: KAME/racoon
-2006-01-30 01:35:55: INFO: received Vendor ID: KAME/racoon
-2006-01-30 01:36:04: INFO: ISAKMP-SA established 172.16.5.4[500]-192.168.1.12[500] spi:623b9b3bd2492452:7deab82d54ff704a
-2006-01-30 01:36:05: INFO: initiate new phase 2 negotiation: 172.16.5.4[0]192.168.1.12[0]
-2006-01-30 01:36:09: INFO: IPsec-SA established: ESP/Tunnel 192.168.1.12[0]->172.16.5.4[0] spi=28496098(0x1b2d0e2)
-2006-01-30 01:36:09: INFO: IPsec-SA established: ESP/Tunnel 172.16.5.4[0]->192.168.1.12[0] spi=47784998(0x2d92426)
-2006-01-30 01:36:13: INFO: respond new phase 2 negotiation: 172.16.5.4[0]192.168.1.12[0]
-2006-01-30 01:36:18: INFO: IPsec-SA established: ESP/Tunnel 192.168.1.12[0]->172.16.5.4[0] spi=124397467(0x76a279b)
-2006-01-30 01:36:18: INFO: IPsec-SA established: ESP/Tunnel 172.16.5.4[0]->192.168.1.12[0] spi=175852902(0xa7b4d66)
+% setfacl -b file
....
-To ensure the tunnel is working properly, switch to another console and use man:tcpdump[1] to view network traffic using the following command.
-Replace `em0` with the network interface card as required:
+Refer to man:getfacl[1] and man:setfacl[1] for more information about the options available for these commands.
-[source,shell]
-....
-corp-gw# tcpdump -i em0 host 172.16.5.4 and dst 192.168.1.12
-....
+[[capsicum]]
+== Capsicum
-Data similar to the following should appear on the console.
-If not, there is an issue and debugging the returned data will be required.
+Capsicum is a lightweight OS capability and sandbox framework implementing a hybrid capability system model.
+Capabilities are unforgeable tokens of authority that can be delegated and must be presented to perform an action.
+Capsicum makes file descriptors into capabilities.
-[.programlisting]
-....
-01:47:32.021683 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xa)
-01:47:33.022442 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xb)
-01:47:34.024218 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xc)
-....
+Capsicum can be used for application and library compartmentalisation,
+the decomposition of larger bodies of software into isolated (sandboxed) components in order to implement security policies and limit the impact of software vulnerabilities.
+
+[[security-accounting]]
+== Process Accounting
-At this point, both networks should be available and seem to be part of the same network.
-Most likely both networks are protected by a firewall.
-To allow traffic to flow between them, rules need to be added to pass packets.
-For the man:ipfw[8] firewall, add the following lines to the firewall configuration file:
+Process accounting is a security method in which an administrator may keep track of system resources used and their allocation among users, provide for system monitoring, and minimally track a user's commands.
-[.programlisting]
-....
-ipfw add 00201 allow log esp from any to any
-ipfw add 00202 allow log ah from any to any
-ipfw add 00203 allow log ipencap from any to any
-ipfw add 00204 allow log udp from any 500 to any
-....
+Process accounting has both positive and negative points.
+One of the positives is that an intrusion may be narrowed down to the point of entry.
+A negative is the amount of logs generated by process accounting, and the disk space they may require.
+This section walks an administrator through the basics of process accounting.
[NOTE]
====
-The rule numbers may need to be altered depending on the current host configuration.
+If more fine-grained accounting is needed, refer to crossref:audit[audit,Security Event Auditing].
====
-For users of man:pf[4] or man:ipf[8], the following rules should do the trick:
-
-[.programlisting]
-....
-pass in quick proto esp from any to any
-pass in quick proto ah from any to any
-pass in quick proto ipencap from any to any
-pass in quick proto udp from any port = 500 to any port = 500
-pass in quick on gif0 from any to any
-pass out quick proto esp from any to any
-pass out quick proto ah from any to any
-pass out quick proto ipencap from any to any
-pass out quick proto udp from any port = 500 to any port = 500
-pass out quick on gif0 from any to any
-....
-
-Finally, to allow the machine to start support for the VPN during system initialization, add the following lines to [.filename]#/etc/rc.conf#:
-
-[.programlisting]
-....
-ipsec_enable="YES"
-ipsec_program="/usr/local/sbin/setkey"
-ipsec_file="/usr/local/etc/racoon/setkey.conf" # allows setting up spd policies on boot
-racoon_enable="yes"
-....
-
-[[openssh]]
-== OpenSSH
-
-OpenSSH is a set of network connectivity tools used to provide secure access to remote machines.
-Additionally, TCP/IP connections can be tunneled or forwarded securely through SSH connections.
-OpenSSH encrypts all traffic to effectively eliminate eavesdropping, connection hijacking, and other network-level attacks.
-
-OpenSSH is maintained by the OpenBSD project and is installed by default in FreeBSD.
-
-When data is sent over the network in an unencrypted form, network sniffers anywhere in between the client and server can steal user/password information or data transferred during the session.
-OpenSSH offers a variety of authentication and encryption methods to prevent this from happening.
-More information about OpenSSH is available from http://www.openssh.com/[http://www.openssh.com/].
-
-This section provides an overview of the built-in client utilities to securely access other systems and securely transfer files from a FreeBSD system.
-It then describes how to configure a SSH server on a FreeBSD system.
-More information is available in the man pages mentioned in this chapter.
-
-=== Using the SSH Client Utilities
-
-To log into a SSH server, use `ssh` and specify a username that exists on that server and the IP address or hostname of the server.
-If this is the first time a connection has been made to the specified server, the user will be prompted to first verify the server's fingerprint:
-
-[source,shell]
-....
-# ssh user@example.com
-The authenticity of host 'example.com (10.0.0.1)' can't be established.
-ECDSA key fingerprint is 25:cc:73:b5:b3:96:75:3d:56:19:49:d2:5c:1f:91:3b.
-Are you sure you want to continue connecting (yes/no)? yes
-Permanently added 'example.com' (ECDSA) to the list of known hosts.
-Password for user@example.com: user_password
-....
-
-SSH utilizes a key fingerprint system to verify the authenticity of the server when the client connects.
-When the user accepts the key's fingerprint by typing `yes` when connecting for the first time, a copy of the key is saved to [.filename]#.ssh/known_hosts# in the user's home directory.
-Future attempts to login are verified against the saved key and `ssh` will display an alert if the server's key does not match the saved key.
-If this occurs, the user should first verify why the key has changed before continuing with the connection.
-
-Recent versions of OpenSSH only accept SSHv2 connections.
-SSH protocol version 1 is obsolete.
+=== Enabling and Utilizing Process Accounting
-Use man:scp[1] to securely copy a file to or from a remote machine.
-This example copies [.filename]#COPYRIGHT# on the remote system to a file of the same name in the current directory of the local system:
+Before using process accounting, it must be enabled using the following commands:
[source,shell]
....
-# scp user@example.com:/COPYRIGHT COPYRIGHT
-Password for user@example.com: *******
-COPYRIGHT 100% |*****************************| 4735
-00:00
-#
+# sysrc accounting_enable=yes
+# service accounting start
....
-Since the fingerprint was already verified for this host, the server's key is automatically checked before prompting for the user's password.
-
-The arguments passed to `scp` are similar to `cp`.
-The file or files to copy is the first argument and the destination to copy to is the second.
-Since the file is fetched over the network, one or more of the file arguments takes the form `user@host:<path_to_remote_file>`.
-Be aware when copying directories recursively that `scp` uses `-r`, whereas `cp` uses `-R`.
+The accounting information is stored in files located in [.filename]#/var/account#, which is automatically created, if necessary, the first time the accounting service starts.
+These files contain sensitive information, including all the commands issued by all users.
+Write access to the files is limited to `root`, and read access is limited to `root` and members of the `wheel` group.
+To also prevent members of `wheel` from reading the files, change the mode of the [.filename]#/var/account# directory to allow access only by `root`.
-To open an interactive session for copying files, use `sftp`.
-Refer to man:sftp[1] for a list of available commands while in an `sftp` session.
+Once enabled, accounting will begin to track information such as CPU statistics and executed commands.
+All accounting logs are in a non-human readable format which can be viewed using man:sa[8].
+If issued without any options, man:sa[8] prints information relating to the number of per-user calls, the total elapsed time in minutes, total CPU and user time in minutes, and the average number of I/O operations.
+Refer to man:sa[8] for the list of available options which control the output.
-[[security-ssh-keygen]]
-==== Key-based Authentication
+To display the commands issued by users, use `lastcomm`.
-Instead of using passwords, a client can be configured to connect to the remote machine using keys.
-To generate RSA authentication keys, use `ssh-keygen`.
-To generate a public and private key pair, specify the type of key and follow the prompts.
-It is recommended to protect the keys with a memorable, but hard to guess passphrase.
+For example, this command prints out all usage of `ls` by `trhodes` on the `ttyp1` terminal:
[source,shell]
....
-% ssh-keygen -t rsa
-Generating public/private rsa key pair.
-Enter file in which to save the key (/home/user/.ssh/id_rsa):
-Enter passphrase (empty for no passphrase): <.>
-Enter same passphrase again: <.>
-Your identification has been saved in /home/user/.ssh/id_rsa.
-Your public key has been saved in /home/user/.ssh/id_rsa.pub.
-The key fingerprint is:
-SHA256:54Xm9Uvtv6H4NOo6yjP/YCfODryvUU7yWHzMqeXwhq8 user@host.example.com
-The key's randomart image is:
-+---[RSA 2048]----+
-| |
-| |
-| |
-| . o.. |
-| .S*+*o |
-| . O=Oo . . |
-| = Oo= oo..|
-| .oB.* +.oo.|
-| =OE**.o..=|
-+----[SHA256]-----+
+# lastcomm ls trhodes ttyp1
....
-<.> Type a passphrase here. It can contain spaces and symbols.
-<.> Retype the passphrase to verify it.
-
-The private key is stored in [.filename]#~/.ssh/id_rsa# and the public key is stored in [.filename]#~/.ssh/id_rsa.pub#.
-The _public_ key must be copied to [.filename]#~/.ssh/authorized_keys# on the remote machine for key-based authentication to work.
-
-[WARNING]
-====
-Many users believe that keys are secure by design and will use a key without a passphrase.
-This is _dangerous_ behavior.
-An administrator can verify that a key pair is protected by a passphrase by viewing the private key manually.
-If the private key file contains the word `ENCRYPTED`, the key owner is using a passphrase.
-In addition, to better secure end users, `from` may be placed in the public key file.
-For example, adding `from="192.168.10.5"` in front of the `ssh-rsa` prefix will only allow that specific user to log in from that IP address.
-====
-
-The options and files vary with different versions of OpenSSH.
-To avoid problems, consult man:ssh-keygen[1].
-
-If a passphrase is used, the user is prompted for the passphrase each time a connection is made to the server.
-To load SSH keys into memory and remove the need to type the passphrase each time, use man:ssh-agent[1] and man:ssh-add[1].
-
-Authentication is handled by `ssh-agent`, using the private keys that are loaded into it.
-`ssh-agent` can be used to launch another application like a shell or a window manager.
+Many other useful options exist and are explained in man:lastcomm[1], man:acct[5], and man:sa[8].
-To use `ssh-agent` in a shell, start it with a shell as an argument.
-Add the identity by running `ssh-add` and entering the passphrase for the private key.
-The user will then be able to `ssh` to any host that has the corresponding public key installed.
-For example:
+[[security-resourcelimits]]
+== Resource Limits
-[source,shell]
-....
-% ssh-agent csh
-% ssh-add
-Enter passphrase for key '/usr/home/user/.ssh/id_rsa': <.>
-Identity added: /usr/home/user/.ssh/id_rsa (/usr/home/user/.ssh/id_rsa)
-%
-....
+In FreeBSD, resource limits refer to the mechanisms that control and manage the allocation of various system resources to processes and users.
+These limits are designed to prevent a single process or user from consuming an excessive amount of resources, which could lead to performance degradation or system instability.
+Resource limits help ensure fair resource distribution among all active processes and users on the system.
-<.> Enter the passphrase for the key.
+FreeBSD provides several methods for an administrator to limit the amount of system resources an individual may use.
-To use `ssh-agent` in Xorg, add an entry for it in [.filename]#~/.xinitrc#.
-This provides the `ssh-agent` services to all programs launched in Xorg.
-An example [.filename]#~/.xinitrc# might look like this:
+The traditional method defines login classes by editing [.filename]#/etc/login.conf#.
+While this method is still supported, any changes require a multi-step process of editing this file, rebuilding the resource database, making necessary changes to [.filename]#/etc/master.passwd#, and rebuilding the password database.
+This can become time consuming, depending upon the number of users to configure.
-[.programlisting]
-....
-exec ssh-agent startxfce4
-....
+man:rctl[8] can be used to provide a more fine-grained method for controlling resource limits.
+This command supports more than user limits as it can also be used to set resource constraints on processes and jails.
-This launches `ssh-agent`, which in turn launches XFCE, every time Xorg starts.
-Once Xorg has been restarted so that the changes can take effect, run `ssh-add` to load all of the SSH keys.
+This section demonstrates both methods for controlling resources, beginning with the traditional method.
-[[security-ssh-tunneling]]
-==== SSH Tunneling
+[[security-resource-limits-types]]
+=== Types of Resources
-OpenSSH has the ability to create a tunnel to encapsulate another protocol in an encrypted session.
+FreeBSD provides limits for various types of resources, including:
-The following command tells `ssh` to create a tunnel for telnet:
+.Resource types
+[options="header", cols="1,1"]
+|===
+| Type | Description
-[source,shell]
-....
-% ssh -2 -N -f -L 5023:localhost:23 user@foo.example.com
-%
-....
+| CPU Time
+| Limits the amount of CPU time a process can consume
-This example uses the following options:
+| Memory
+| Controls the amount of physical memory a process can use
-`-2`::
-Forces `ssh` to use version 2 to connect to the server.
+| Open Files
+| Limits the number of files a process can have open simultaneously
-`-N`::
-Indicates no command, or tunnel only.
-If omitted, `ssh` initiates a normal session.
+| Processes
+| Controls the number of processes a user or a process can create
-`-f`::
-Forces `ssh` to run in the background.
+| File Size
+| Limits the maximum size of files that a process can create
-`-L`::
-Indicates a local tunnel in _localport:remotehost:remoteport_ format.
+| Core Dumps
+| Controls whether processes are allowed to generate core dump files
-`user@foo.example.com`::
-The login name to use on the specified remote SSH server.
+| Network Resources
+| Limits the amount of network resources (e.g., sockets) a process can use
-An SSH tunnel works by creating a listen socket on `localhost` on the specified `localport`.
-It then forwards any connections received on `localport` via the SSH connection to the specified `remotehost:remoteport`.
-In the example, port `5023` on the client is forwarded to port `23` on the remote machine.
-Since port 23 is used by telnet, this creates an encrypted telnet session through an SSH tunnel.
+|===
-This method can be used to wrap any number of insecure TCP protocols such as SMTP, POP3, and FTP, as seen in the following examples.
+For a full listing of types see man:login.conf[5] and man:rctl[8].
-.Create a Secure Tunnel for SMTP
-[example]
-====
+[[users-limiting]]
+=== Configuring Login Classes
-[source,shell]
-....
-% ssh -2 -N -f -L 5025:localhost:25 user@mailserver.example.com
-user@mailserver.example.com's password: *****
-% telnet localhost 5025
-Trying 127.0.0.1...
-Connected to localhost.
-Escape character is '^]'.
-220 mailserver.example.com ESMTP
-....
-This can be used in conjunction with `ssh-keygen` and additional user accounts to create a more seamless SSH tunneling environment.
-Keys can be used in place of typing a password, and the tunnels can be run as a separate user.
-====
+In the traditional method, login classes and the resource limits to apply to a login class are defined in [.filename]#/etc/login.conf#.
+Each user account can be assigned to a login class, where `default` is the default login class.
+Each login class has a set of login capabilities associated with it.
+A login capability is a `_name_=_value_` pair, where _name_ is a well-known identifier and _value_ is an arbitrary string which is processed accordingly depending on the _name_.
-.Secure Access of a POP3 Server
-[example]
-====
-In this example, there is an SSH server that accepts connections from the outside.
-On the same network resides a mail server running a POP3 server.
-To check email in a secure manner, create an SSH connection to the SSH server and tunnel through to the mail server:
+The first step to configure a resource limit will be to open [.filename]#/etc/login.conf# by executing the following command:
[source,shell]
....
-% ssh -2 -N -f -L 2110:mail.example.com:110 user@ssh-server.example.com
-user@ssh-server.example.com's password: ******
+# ee /etc/login.conf
....
-Once the tunnel is up and running, point the email client to send POP3 requests to `localhost` on port 2110.
-This connection will be forwarded securely across the tunnel to `mail.example.com`.
-====
-
-.Bypassing a Firewall
-[example]
-====
-Some firewalls filter both incoming and outgoing connections.
-For example, a firewall might limit access from remote machines to ports 22 and 80 to only allow SSH and web surfing.
-This prevents access to any other service which uses a port other than 22 or 80.
-
-The solution is to create an SSH connection to a machine outside of the network's firewall and use it to tunnel to the desired service:
+Then locate the section for the user class to be modified.
+In this example, let's assume the user class is named `limited`, create it in case it does not exist.
-[source,shell]
+[.programlisting]
....
-% ssh -2 -N -f -L 8888:music.example.com:8000 user@unfirewalled-system.example.org
-user@unfirewalled-system.example.org's password: *******
+limited:\ <.>
+ :maxproc=50:\ <.>
+ :tc=default: <.>
....
-In this example, a streaming Ogg Vorbis client can now be pointed to `localhost` port 8888, which will be forwarded over to `music.example.com` on port 8000, successfully bypassing the firewall.
-====
+<.> Name of the user class.
+<.> Sets the maximum number of processes (maxproc) to 50 for users in the `limited` class.
+<.> Indicates that this user class inherits the default settings from the "default" class.
-=== Enabling the SSH Server
-
-In addition to providing built-in SSH client utilities, a FreeBSD system can be configured as an SSH server, accepting connections from other SSH clients.
-
-To see if sshd is operating, use the man:service[8] command:
+After modifying the [.filename]#/etc/login.conf# file, run man:cap_mkdb[1] to generate the database that FreeBSD uses to apply these settings:
[source,shell]
....
-# service sshd status
-....
-
-If the service is not running, add the following line to [.filename]#/etc/rc.conf#.
-
-[.programlisting]
-....
-sshd_enable="YES"
+# cap_mkdb /etc/login.conf
....
-This will start sshd, the daemon program for OpenSSH, the next time the system boots. To start it now:
+man:chpass[1] can be used to change the class to the desired user by executing the following command:
[source,shell]
....
-# service sshd start
+# chpass username
....
-The first time sshd starts on a FreeBSD system, the system's host keys will be automatically created and the fingerprint will be displayed on the console.
-Provide users with the fingerprint so that they can verify it the first time they connect to the server.
-
-Refer to man:sshd[8] for the list of available options when starting sshd and a more complete discussion about authentication, the login process, and the various configuration files.
-
-At this point, the sshd should be available to all users with a username and password on the system.
-
-=== SSH Server Security
-
-While sshd is the most widely used remote administration facility for FreeBSD, brute force and drive by attacks are common to any system exposed to public networks.
-Several additional parameters are available to prevent the success of these attacks and will be described in this section.
-
-It is a good idea to limit which users can log into the SSH server and from where using the `AllowUsers` keyword in the OpenSSH server configuration file.
-For example, to only allow `root` to log in from `192.168.1.32`, add this line to [.filename]#/etc/ssh/sshd_config#:
+This will open a text editor, add the new `limited` class there as follows:
[.programlisting]
....
-AllowUsers root@192.168.1.32
-....
+#Changing user information for username.
+Login: username
+Password: $6$2H.419USdGaiJeqK$6kgcTnDadasdasd3YnlNZsOni5AMymibkAfRCPirc7ZFjjv
+DVsKyXx26daabdfqSdasdsmL/ZMUpdHiO0
+Uid [#]: 1001
+Gid [# or name]: 1001
+Change [month day year]:
+Expire [month day year]:
+Class: limited
+Home directory: /home/username
+Shell: /bin/sh
+Full Name: User &
+Office Location:
+Office Phone:
+Home Phone:
+Other information:
+....
+
+Now, the user assigned to the `limited` class will have a maximum process limit of 50.
+Remember that this is just one example of setting a resource limit using the [.filename]#/etc/login.conf# file.
+
+Keep in mind that after making changes to the [.filename]#/etc/login.conf# file, the user needs to log out and log back in for the changes to take effect.
+Additionally, always exercise caution when editing system configuration files, especially when using privileged access.
+
+[[security-rctl]]
+=== Enabling and Configuring Resource Limits
-To allow `admin` to log in from anywhere, list that user without specifying an IP address:
+The man:rctl[8] system provides a more fine-grained way to set and manage resource limits for individual processes and users.
+It allows you to dynamically assign resource limits to specific processes or users, regardless of their user class.
-[.programlisting]
-....
-AllowUsers admin
-....
-
-Multiple users should be listed on the same line, like so:
+The first step to use man:rctl[8] will be to enable it adding the following line to [.filename]#/boot/loader.conf# and reboot the system:
[.programlisting]
....
-AllowUsers root@192.168.1.32 admin
+kern.racct.enable=1
....
-After making changes to [.filename]#/etc/ssh/sshd_config#, tell sshd to reload its configuration file by running:
+Then enable and start the man:rctl[8] service by executing the following commands:
[source,shell]
....
-# service sshd reload
-....
-
-[NOTE]
-====
-When this keyword is used, it is important to list each user that needs to log into this machine.
-Any user that is not specified in that line will be locked out.
-Also, the keywords used in the OpenSSH server configuration file are case-sensitive.
-If the keyword is not spelled correctly, including its case, it will be ignored.
-Always test changes to this file to make sure that the edits are working as expected.
-Refer to man:sshd_config[5] to verify the spelling and use of the available keywords.
-====
-
-In addition, users may be forced to use two factor authentication via the use of a public and private key.
-When required, the user may generate a key pair through the use of man:ssh-keygen[1] and send the administrator the public key.
-This key file will be placed in the [.filename]#authorized_keys# as described above in the client section.
-To force the users to use keys only, the following option may be configured:
-
-[.programlisting]
-....
-AuthenticationMethods publickey
+# sysrc rctl_enable="YES"
+# service rctl start
....
-[TIP]
-====
-
-Do not confuse [.filename]#/etc/ssh/sshd_config# with [.filename]#/etc/ssh/ssh_config# (note the extra `d` in the first filename).
-The first file configures the server and the second file configures the client.
-Refer to man:ssh_config[5] for a listing of the available client settings.
-====
-
-[[fs-acl]]
-== Access Control Lists
-
-Access Control Lists (ACLs) extend the standard UNIX(R) permission model in a POSIX(R).1e compatible way.
-This permits an administrator to take advantage of a more fine-grained permissions model.
+Then man:rctl[8] may be used to set rules for the system.
-The FreeBSD [.filename]#GENERIC# kernel provides ACL support for UFS file systems.
-Users who prefer to compile a custom kernel must include the following option in their custom kernel configuration file:
+Rule syntax (man:rctl.conf[5]) is controlled through the use of a subject, subject-id, resource, and action, as seen in this example rule:
[.programlisting]
....
-options UFS_ACL
+subject:subject-id:resource:action=amount/per
....
-If this option is not compiled in, a warning message will be displayed when attempting to mount a file system with ACL support.
-ACLs rely on extended attributes which are natively supported in UFS2.
-
-This chapter describes how to enable ACL support and provides some usage examples.
-
-=== Enabling ACL Support
-
-ACLs are enabled by the mount-time administrative flag, `acls`, which may be added to [.filename]#/etc/fstab#.
-The mount-time flag can also be automatically set in a persistent manner using man:tunefs[8] to modify a superblock ACLs flag in the file system header.
-In general, it is preferred to use the superblock flag for several reasons:
-
-* The superblock flag cannot be changed by a remount using `mount -u` as it requires a complete `umount` and fresh `mount`. This means that ACLs cannot be enabled on the root file system after boot. It also means that ACL support on a file system cannot be changed while the system is in use.
-* Setting the superblock flag causes the file system to always be mounted with ACLs enabled, even if there is not an [.filename]#fstab# entry or if the devices re-order. This prevents accidental mounting of the file system without ACL support.
-
-[NOTE]
-====
-It is desirable to discourage accidental mounting without ACLs enabled because nasty things can happen if ACLs are enabled, then disabled, then re-enabled without flushing the extended attributes.
-In general, once ACLs are enabled on a file system, they should not be disabled, as the resulting file protections may not be compatible with those intended by the users of the system, and re-enabling ACLs may re-attach the previous ACLs to files that have since had their permissions changed, resulting in unpredictable behavior.
-====
-
-File systems with ACLs enabled will show a plus (`+`) sign in their permission settings:
+For example to constrained the user to add no more than 10 processes execute the following command:
-[.programlisting]
+[source,shell]
....
-drwx------ 2 robert robert 512 Dec 27 11:54 private
-drwxrwx---+ 2 robert robert 512 Dec 23 10:57 directory1
-drwxrwx---+ 2 robert robert 512 Dec 22 10:20 directory2
-drwxrwx---+ 2 robert robert 512 Dec 27 11:57 directory3
-drwxr-xr-x 2 robert robert 512 Nov 10 11:54 public_html
+# rctl -a user:username:maxproc:deny=10/user
....
-In this example, [.filename]#directory1#, [.filename]#directory2#, and [.filename]#directory3# are all taking advantage of ACLs, whereas [.filename]#private# and [.filename]#public_html# are not.
-
-=== Using ACLs
-
-File system ACLs can be viewed using `getfacl`.
-For instance, to view the ACL settings on [.filename]#test#:
+To check the applied resource limits the man:rctl[8] command can be executed:
[source,shell]
....
-% getfacl test
- #file:test
- #owner:1001
- #group:1001
- user::rw-
- group::r--
- other::r--
+# rctl
....
-To change the ACL settings on this file, use `setfacl`.
-To remove all of the currently defined ACLs from a file or file system, include `-k`.
-However, the preferred method is to use `-b` as it leaves the basic fields required for ACLs to work.
+The output should be similar to the following:
-[source,shell]
+[.programlisting]
....
-% setfacl -k test
+user:username:maxproc:deny=10
....
-To modify the default ACL entries, use `-m`:
+Rules will persist across reboots if they have been added to [.filename]#/etc/rctl.conf#.
+The format is a rule, without the preceding command. For example, the previous rule could be added as:
-[source,shell]
+[.programlisting]
....
-% setfacl -m u:trhodes:rwx,group:web:r--,o::--- test
+user:username:maxproc:deny=10
....
-In this example, there were no pre-defined entries, as they were removed by the previous command.
-This command restores the default options and assigns the options listed.
-If a user or group is added which does not exist on the system, an `Invalid argument` error will be displayed.
-
-Refer to man:getfacl[1] and man:setfacl[1] for more information about the options available for these commands.
-
[[security-pkg]]
== Monitoring Third Party Security Issues
@@ -2013,36 +1955,44 @@ A FreeBSD add on utility known as pkg includes options explicitly for this purpo
pkg polls a database for security issues.
The database is updated and maintained by the FreeBSD Security Team and ports developers.
-Please refer to crossref:ports[pkgng-intro,instructions] for installing pkg.
-
Installation provides man:periodic[8] configuration files for maintaining the pkg audit database, and provides a programmatic method of keeping it updated.
-This functionality is enabled if `daily_status_security_pkgaudit_enable` is set to `YES` in man:periodic.conf[5].
-Ensure that daily security run emails, which are sent to ``root``'s email account, are being read.
After installation, and to audit third party utilities as part of the Ports Collection at any time, an administrator may choose to update the database and view known vulnerabilities of installed packages by invoking:
[source,shell]
....
-# pkg audit -F
+% pkg audit -F
....
-pkg displays messages any published vulnerabilities in installed packages:
+The output should be similar to the following:
[.programlisting]
....
-Affected package: cups-base-1.1.22.0_1
-Type of problem: cups-base -- HPGL buffer overflow vulnerability.
-Reference: <https://www.FreeBSD.org/ports/portaudit/40a3bca2-6809-11d9-a9e7-0001020eed82.html>
+vulnxml file up-to-date
+chromium-116.0.5845.96_1 is vulnerable:
+ chromium -- multiple vulnerabilities
+ CVE: CVE-2023-4431
+ CVE: CVE-2023-4427
+ CVE: CVE-2023-4428
+ CVE: CVE-2023-4429
+ CVE: CVE-2023-4430
+ WWW: https://vuxml.FreeBSD.org/freebsd/5fa332b9-4269-11ee-8290-a8a1599412c6.html
-1 problem(s) in your installed packages found.
+samba413-4.13.17_5 is vulnerable:
+ samba -- multiple vulnerabilities
+ CVE: CVE-2023-3347
+ CVE: CVE-2023-34966
+ CVE: CVE-2023-34968
+ CVE: CVE-2022-2127
+ CVE: CVE-2023-34967
+ WWW: https://vuxml.FreeBSD.org/freebsd/441e1e1a-27a5-11ee-a156-080027f5fec9.html
-You are advised to update or deinstall the affected package(s) immediately.
+2 problem(s) in 2 installed package(s) found.
....
By pointing a web browser to the displayed URL, an administrator may obtain more information about the vulnerability.
-This will include the versions affected, by FreeBSD port version, along with other web sites which may contain security advisories.
-pkg is a powerful utility and is extremely useful when coupled with package:ports-mgmt/portmaster[].
+This will include the versions affected, by FreeBSD port version, along with other web sites which may contain security advisories.
[[security-advisories]]
== FreeBSD Security Advisories
@@ -2053,9 +2003,7 @@ More information about the FreeBSD security team and the supported releases is a
One task of the security team is to respond to reported security vulnerabilities in the FreeBSD operating system.
Once a vulnerability is confirmed, the security team verifies the steps necessary to fix the vulnerability and updates the source code with the fix.
It then publishes the details as a "Security Advisory".
-Security advisories are published on the link:https://www.FreeBSD.org/security/advisories/[FreeBSD website] and mailed to the {freebsd-security-notifications}, {freebsd-security}, and {freebsd-announce} mailing lists.
-
-This section describes the format of a FreeBSD security advisory.
+Security advisories are published on the link:https://www.FreeBSD.org/security/advisories/[FreeBSD website] and mailed to the {freebsd-security-notifications}, {freebsd-security}, and {freebsd-announce}.
=== Format of a Security Advisory
@@ -2063,61 +2011,77 @@ Here is an example of a FreeBSD security advisory:
[.programlisting]
....
-=============================================================================
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
=============================================================================
-FreeBSD-SA-14:04.bind Security Advisory
+FreeBSD-SA-23:07.bhyve Security Advisory
The FreeBSD Project
-Topic: BIND remote denial of service vulnerability
-
-Category: contrib
-Module: bind
-Announced: 2014-01-14
-Credits: ISC
-Affects: FreeBSD 8.x and FreeBSD 9.x
-Corrected: 2014-01-14 19:38:37 UTC (stable/9, 9.2-STABLE)
- 2014-01-14 19:42:28 UTC (releng/9.2, 9.2-RELEASE-p3)
- 2014-01-14 19:42:28 UTC (releng/9.1, 9.1-RELEASE-p10)
- 2014-01-14 19:38:37 UTC (stable/8, 8.4-STABLE)
- 2014-01-14 19:42:28 UTC (releng/8.4, 8.4-RELEASE-p7)
- 2014-01-14 19:42:28 UTC (releng/8.3, 8.3-RELEASE-p14)
-CVE Name: CVE-2014-0591
+Topic: bhyve privileged guest escape via fwctl
+
+Category: core
+Module: bhyve
+Announced: 2023-08-01
+Credits: Omri Ben Bassat and Vladimir Eli Tokarev from Microsoft
+Affects: FreeBSD 13.1 and 13.2
+Corrected: 2023-08-01 19:48:53 UTC (stable/13, 13.2-STABLE)
+ 2023-08-01 19:50:47 UTC (releng/13.2, 13.2-RELEASE-p2)
+ 2023-08-01 19:48:26 UTC (releng/13.1, 13.1-RELEASE-p9)
+CVE Name: CVE-2023-3494
For general information regarding FreeBSD Security Advisories,
including descriptions of the fields above, security branches, and the
-following sections, please visit <URL:http://security.FreeBSD.org/>.
+following sections, please visit <URL:https://security.FreeBSD.org/>.
I. Background
-BIND 9 is an implementation of the Domain Name System (DNS) protocols.
-The named(8) daemon is an Internet Domain Name Server.
+bhyve(8)'s fwctl interface provides a mechanism through which guest
+firmware can query the hypervisor for information about the virtual
+machine. The fwctl interface is available to guests when bhyve is run
+with the "-l bootrom" option, used for example when booting guests in
+UEFI mode.
+
+bhyve is currently only supported on the amd64 platform.
II. Problem Description
-Because of a defect in handling queries for NSEC3-signed zones, BIND can
-crash with an "INSIST" failure in name.c when processing queries possessing
-certain properties. This issue only affects authoritative nameservers with
-at least one NSEC3-signed zone. Recursive-only servers are not at risk.
+The fwctl driver implements a state machine which is executed when the
+guest accesses certain x86 I/O ports. The interface lets the guest copy
+a string into a buffer resident in the bhyve process' memory. A bug in
+the state machine implementation can result in a buffer overflowing when
+copying this string.
III. Impact
-An attacker who can send a specially crafted query could cause named(8)
-to crash, resulting in a denial of service.
+A malicious, privileged software running in a guest VM can exploit the
+buffer overflow to achieve code execution on the host in the bhyve
+userspace process, which typically runs as root. Note that bhyve runs
+in a Capsicum sandbox, so malicious code is constrained by the
+capabilities available to the bhyve process.
IV. Workaround
-No workaround is available, but systems not running authoritative DNS service
-with at least one NSEC3-signed zone using named(8) are not vulnerable.
+No workaround is available. bhyve guests that are executed without the
+"-l bootrom" option are unaffected.
V. Solution
+Upgrade your vulnerable system to a supported FreeBSD stable or
+release / security branch (releng) dated after the correction date.
+
Perform one of the following:
-1) Upgrade your vulnerable system to a supported FreeBSD stable or
-release / security branch (releng) dated after the correction date.
+1) To update your vulnerable system via a binary patch:
+
+Systems running a RELEASE version of FreeBSD on the amd64, i386, or
+(on FreeBSD 13 and later) arm64 platforms can be updated via the
+freebsd-update(8) utility:
+
+# freebsd-update fetch
+# freebsd-update install
+
+Restart all affected virtual machines.
2) To update your vulnerable system via a source code patch:
@@ -2127,92 +2091,83 @@ FreeBSD release branches.
a) Download the relevant patch from the location below, and verify the
detached PGP signature using your PGP utility.
-[FreeBSD 8.3, 8.4, 9.1, 9.2-RELEASE and 8.4-STABLE]
-# fetch http://security.FreeBSD.org/patches/SA-14:04/bind-release.patch
-# fetch http://security.FreeBSD.org/patches/SA-14:04/bind-release.patch.asc
-# gpg --verify bind-release.patch.asc
+[FreeBSD 13.2]
+# fetch https://security.FreeBSD.org/patches/SA-23:07/bhyve.13.2.patch
+# fetch https://security.FreeBSD.org/patches/SA-23:07/bhyve.13.2.patch.asc
+# gpg --verify bhyve.13.2.patch.asc
-[FreeBSD 9.2-STABLE]
-# fetch http://security.FreeBSD.org/patches/SA-14:04/bind-stable-9.patch
-# fetch http://security.FreeBSD.org/patches/SA-14:04/bind-stable-9.patch.asc
-# gpg --verify bind-stable-9.patch.asc
+[FreeBSD 13.1]
+# fetch https://security.FreeBSD.org/patches/SA-23:07/bhyve.13.1.patch
+# fetch https://security.FreeBSD.org/patches/SA-23:07/bhyve.13.1.patch.asc
+# gpg --verify bhyve.13.1.patch.asc
-b) Execute the following commands as root:
+b) Apply the patch. Execute the following commands as root:
# cd /usr/src
# patch < /path/to/patch
-Recompile the operating system using buildworld and installworld as
+c) Recompile the operating system using buildworld and installworld as
described in <URL:https://www.FreeBSD.org/handbook/makeworld.html>.
-Restart the applicable daemons, or reboot the system.
-
-3) To update your vulnerable system via a binary patch:
-
-Systems running a RELEASE version of FreeBSD on the i386 or amd64
-platforms can be updated via the man:freebsd-update[8] utility:
-
-# freebsd-update fetch
-# freebsd-update install
+Restart all affected virtual machines.
VI. Correction details
-The following list contains the correction revision numbers for each
-affected branch.
+This issue is corrected by the corresponding Git commit hash or Subversion
+revision number in the following stable and release branches:
-Branch/path Revision
+Branch/path Hash Revision
- -------------------------------------------------------------------------
-stable/8/ r260646
-releng/8.3/ r260647
-releng/8.4/ r260647
-stable/9/ r260646
-releng/9.1/ r260647
-releng/9.2/ r260647
+stable/13/ 9fe302d78109 stable/13-n255918
+releng/13.2/ 2bae613e0da3 releng/13.2-n254625
+releng/13.1/ 87702e38a4b4 releng/13.1-n250190
- -------------------------------------------------------------------------
-To see which files were modified by a particular revision, run the
-following command, replacing NNNNNN with the revision number, on a
-machine with Subversion installed:
+Run the following command to see which files were modified by a
+particular commit:
-# svn diff -cNNNNNN --summarize svn://svn.freebsd.org/base
+# git show --stat <commit hash>
-Or visit the following URL, replacing NNNNNN with the revision number:
+Or visit the following URL, replacing NNNNNN with the hash:
-<URL:https://svnweb.freebsd.org/base?view=revision&revision=NNNNNN>
+<URL:https://cgit.freebsd.org/src/commit/?id=NNNNNN>
-VII. References
+To determine the commit count in a working tree (for comparison against
+nNNNNNN in the table above), run:
+
+# git rev-list --count --first-parent HEAD
-<URL:https://kb.isc.org/article/AA-01078>
+VII. References
-<URL:http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0591>
+<URL:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-3494>
The latest revision of this advisory is available at
-<URL:http://security.FreeBSD.org/advisories/FreeBSD-SA-14:04.bind.asc>
+<URL:https://security.FreeBSD.org/advisories/FreeBSD-SA-23:07.bhyve.asc>
-----BEGIN PGP SIGNATURE-----
-iQIcBAEBCgAGBQJS1ZTYAAoJEO1n7NZdz2rnOvQP/2/68/s9Cu35PmqNtSZVVxVG
-ZSQP5EGWx/lramNf9566iKxOrLRMq/h3XWcC4goVd+gZFrvITJSVOWSa7ntDQ7TO
-XcinfRZ/iyiJbs/Rg2wLHc/t5oVSyeouyccqODYFbOwOlk35JjOTMUG1YcX+Zasg
-ax8RV+7Zt1QSBkMlOz/myBLXUjlTZ3Xg2FXVsfFQW5/g2CjuHpRSFx1bVNX6ysoG
-9DT58EQcYxIS8WfkHRbbXKh9I1nSfZ7/Hky/kTafRdRMrjAgbqFgHkYTYsBZeav5
-fYWKGQRJulYfeZQ90yMTvlpF42DjCC3uJYamJnwDIu8OhS1WRBI8fQfr9DRzmRua
-OK3BK9hUiScDZOJB6OqeVzUTfe7MAA4/UwrDtTYQ+PqAenv1PK8DZqwXyxA9ThHb
-zKO3OwuKOVHJnKvpOcr+eNwo7jbnHlis0oBksj/mrq2P9m2ueF9gzCiq5Ri5Syag
-Wssb1HUoMGwqU0roS8+pRpNC8YgsWpsttvUWSZ8u6Vj/FLeHpiV3mYXPVMaKRhVm
-067BA2uj4Th1JKtGleox+Em0R7OFbCc/9aWC67wiqI6KRyit9pYiF3npph+7D5Eq
-7zPsUdDd+qc+UTiLp3liCRp5w6484wWdhZO6wRtmUgxGjNkxFoNnX8CitzF8AaqO
-UWWemqWuz3lAZuORQ9KX
-=OQzQ
+iQIzBAEBCgAdFiEEthUnfoEIffdcgYM7bljekB8AGu8FAmTJdsIACgkQbljekB8A
+Gu8Q1Q/7BFw5Aa0cFxBzbdz+O5NAImj58MvKS6xw61bXcYr12jchyT6ENC7yiR+K
+qCqbe5TssRbtZ1gg/94gSGEXccz5OcJGxW+qozhcdPUh2L2nzBPkMCrclrYJfTtM
+cnmQKjg/wFZLUVr71GEM95ZFaktlZdXyXx9Z8eBzow5rXexpl1TTHQQ2kZZ41K4K
+KFhup91dzGCIj02cqbl+1h5BrXJe3s/oNJt5JKIh/GBh5THQu9n6AywQYl18HtjV
+fMb1qRTAS9WbiEP5QV2eEuOG86ucuhytqnEN5MnXJ2rLSjfb9izs9HzLo3ggy7yb
+hN3tlbfIPjMEwYexieuoyP3rzKkLeYfLXqJU4zKCRnIbBIkMRy4mcFkfcYmI+MhF
+NPh2R9kccemppKXeDhKJurH0vsetr8ti+AwOZ3pgO21+9w+mjE+EfaedIi+JWhip
+hwqeFv03bAQHJdacNYGV47NsJ91CY4ZgWC3ZOzBZ2Y5SDtKFjyc0bf83WTfU9A/0
+drC0z3xaJribah9e6k5d7lmZ7L6aHCbQ70+aayuAEZQLr/N1doB0smNi0IHdrtY0
+JdIqmVX+d1ihVhJ05prC460AS/Kolqiaysun1igxR+ZnctE9Xdo1BlLEbYu2KjT4
+LpWvSuhRMSQaYkJU72SodQc0FM5mqqNN42Vx+X4EutOfvQuRGlI=
+=MlAY
-----END PGP SIGNATURE-----
....
Every security advisory uses the following format:
* Each security advisory is signed by the PGP key of the Security Officer. The public key for the Security Officer can be verified at crossref:pgpkeys[pgpkeys,OpenPGP Keys].
-* The name of the security advisory always begins with `FreeBSD-SA-` (for FreeBSD Security Advisory), followed by the year in two digit format (`14:`), followed by the advisory number for that year (`04.`), followed by the name of the affected application or subsystem (`bind`). The advisory shown here is the fourth advisory for 2014 and it affects BIND.
+* The name of the security advisory always begins with `FreeBSD-SA-` (for FreeBSD Security Advisory), followed by the year in two digit format (`23:`), followed by the advisory number for that year (`07.`), followed by the name of the affected application or subsystem (`bhyve`).
* The `Topic` field summarizes the vulnerability.
* The `Category` refers to the affected part of the system which may be one of `core`, `contrib`, or `ports`. The `core` category means that the vulnerability affects a core component of the FreeBSD operating system. The `contrib` category means that the vulnerability affects software included with FreeBSD, such as BIND. The `ports` category indicates that the vulnerability affects software available through the Ports Collection.
-* The `Module` field refers to the component location. In this example, the `bind` module is affected; therefore, this vulnerability affects an application installed with the operating system.
+* The `Module` field refers to the component location. In this example, the `bhyve` module is affected; therefore, this vulnerability affects an application installed with the operating system.
* The `Announced` field reflects the date the security advisory was published. This means that the security team has verified that the problem exists and that a patch has been committed to the FreeBSD source code repository.
* The `Credits` field gives credit to the individual or organization who noticed the vulnerability and reported it.
* The `Affects` field explains which releases of FreeBSD are affected by this vulnerability.
@@ -2221,383 +2176,7 @@ Every security advisory uses the following format:
* The `Background` field provides a description of the affected module.
* The `Problem Description` field explains the vulnerability. This can include information about the flawed code and how the utility could be maliciously used.
* The `Impact` field describes what type of impact the problem could have on a system.
-* The `Workaround` field indicates if a workaround is available to system administrators who cannot immediately patch the system .
+* The `Workaround` field indicates if a workaround is available to system administrators who cannot immediately patch the system.
* The `Solution` field provides the instructions for patching the affected system. This is a step by step tested and verified method for getting a system patched and working securely.
-* The `Correction Details` field displays each affected Subversion branch with the revision number that contains the corrected code.
+* The `Correction Details` field displays each affected Subversion or Git branch with the revision number that contains the corrected code.
* The `References` field offers sources of additional information regarding the vulnerability.
-
-[[security-accounting]]
-== Process Accounting
-
-Process accounting is a security method in which an administrator may keep track of system resources used and their allocation among users, provide for system monitoring, and minimally track a user's commands.
-
-Process accounting has both positive and negative points.
-One of the positives is that an intrusion may be narrowed down to the point of entry.
-A negative is the amount of logs generated by process accounting, and the disk space they may require.
-This section walks an administrator through the basics of process accounting.
-
-[NOTE]
-====
-If more fine-grained accounting is needed, refer to crossref:audit[audit,Security Event Auditing].
-====
-
-=== Enabling and Utilizing Process Accounting
-
-Before using process accounting, it must be enabled using the following commands:
-
-[source,shell]
-....
-# sysrc accounting_enable=yes
-# service accounting start
-....
-
-The accounting information is stored in files located in [.filename]#/var/account#, which is automatically created, if necessary, the first time the accounting service starts.
-These files contain sensitive information, including all the commands issued by all users.
-Write access to the files is limited to `root`, and read access is limited to `root` and members of the `wheel` group.
-To also prevent members of `wheel` from reading the files, change the mode of the [.filename]#/var/account# directory to allow access only by `root`.
-
-Once enabled, accounting will begin to track information such as CPU statistics and executed commands.
-All accounting logs are in a non-human readable format which can be viewed using `sa`.
-If issued without any options, `sa` prints information relating to the number of per-user calls, the total elapsed time in minutes, total CPU and user time in minutes, and the average number of I/O operations.
-Refer to man:sa[8] for the list of available options which control the output.
-
-To display the commands issued by users, use `lastcomm`.
-For example, this command prints out all usage of `ls` by `trhodes` on the `ttyp1` terminal:
-
-[source,shell]
-....
-# lastcomm ls trhodes ttyp1
-....
-
-Many other useful options exist and are explained in man:lastcomm[1], man:acct[5], and man:sa[8].
-
-[[security-resourcelimits]]
-== Resource Limits
-
-FreeBSD provides several methods for an administrator to limit the amount of system resources an individual may use.
-Disk quotas limit the amount of disk space available to users.
-Quotas are discussed in crossref:disks[quotas,"Disk Quotas"].
-
-Limits to other resources, such as CPU and memory, can be set using either a flat file or a command to configure a resource limits database.
-The traditional method defines login classes by editing [.filename]#/etc/login.conf#.
-While this method is still supported, any changes require a multi-step process of editing this file, rebuilding the resource database, making necessary changes to [.filename]#/etc/master.passwd#, and rebuilding the password database.
-This can become time consuming, depending upon the number of users to configure.
-
-`rctl` can be used to provide a more fine-grained method for controlling resource limits.
-This command supports more than user limits as it can also be used to set resource constraints on processes and jails.
-
-This section demonstrates both methods for controlling resources, beginning with the traditional method.
-
-[[users-limiting]]
-=== Configuring Login Classes
-
-In the traditional method, login classes and the resource limits to apply to a login class are defined in [.filename]#/etc/login.conf#.
-Each user account can be assigned to a login class, where `default` is the default login class.
-Each login class has a set of login capabilities associated with it.
-A login capability is a `_name_=_value_` pair, where _name_ is a well-known identifier and _value_ is an arbitrary string which is processed accordingly depending on the _name_.
-
-[NOTE]
-====
-Whenever [.filename]#/etc/login.conf# is edited, the [.filename]#/etc/login.conf.db# must be updated by executing the following command:
-
-[source,shell]
-....
-# cap_mkdb /etc/login.conf
-....
-
-====
-
-Resource limits differ from the default login capabilities in two ways.
-First, for every limit, there is a _soft_ and _hard_ limit.
-A soft limit may be adjusted by the user or application, but may not be set higher than the hard limit.
-The hard limit may be lowered by the user, but can only be raised by the superuser.
-Second, most resource limits apply per process to a specific user.
-
-<<resource-limits>> lists the most commonly used resource limits.
-All of the available resource limits and capabilities are described in detail in man:login.conf[5].
-
-[[resource-limits]]
-.Login Class Resource Limits
-[cols="20%,80%", frame="none", options="header"]
-|===
-| Resource Limit
-| Description
-
-|coredumpsize
-|The limit on the size of a core file generated by a program is subordinate to other limits on disk usage, such as `filesize` or disk quotas. This limit is often used as a less severe method of controlling disk space consumption. Since users do not generate core files and often do not delete them, this setting may save them from running out of disk space should a large program crash.
-
-|cputime
-|The maximum amount of CPU time a user's process may consume. Offending processes will be killed by the kernel. This is a limit on CPU _time_ consumed, not the percentage of the CPU as displayed in some of the fields generated by `top` and `ps`.
-
-|filesize
-|The maximum size of a file the user may own. Unlike disk quotas (crossref:disks[quotas,"Disk Quotas"]), this limit is enforced on individual files, not the set of all files a user owns.
-
-|maxproc
-|The maximum number of foreground and background processes a user can run. This limit may not be larger than the system limit specified by `kern.maxproc`. Setting this limit too small may hinder a user's productivity as some tasks, such as compiling a large program, start lots of processes.
-
-|memorylocked
-|The maximum amount of memory a process may request to be locked into main memory using man:mlock[2]. Some system-critical programs, such as man:amd[8], lock into main memory so that if the system begins to swap, they do not contribute to disk thrashing.
-
-|memoryuse
-|The maximum amount of memory a process may consume at any given time. It includes both core memory and swap usage. This is not a catch-all limit for restricting memory consumption, but is a good start.
-
-|openfiles
-|The maximum number of files a process may have open. In FreeBSD, files are used to represent sockets and IPC channels, so be careful not to set this too low. The system-wide limit for this is defined by `kern.maxfiles`.
-
-|sbsize
-|The limit on the amount of network memory a user may consume. This can be generally used to limit network communications.
-
-|stacksize
-|The maximum size of a process stack. This alone is not sufficient to limit the amount of memory a program may use, so it should be used in conjunction with other limits.
-|===
-
-There are a few other things to remember when setting resource limits:
-
-* Processes started at system startup by [.filename]#/etc/rc# are assigned to the `daemon` login class.
-* Although the default [.filename]#/etc/login.conf# is a good source of reasonable values for most limits, they may not be appropriate for every system. Setting a limit too high may open the system up to abuse, while setting it too low may put a strain on productivity.
-* Xorg takes a lot of resources and encourages users to run more programs simultaneously.
-* Many limits apply to individual processes, not the user as a whole. For example, setting `openfiles` to `50` means that each process the user runs may open up to `50` files. The total amount of files a user may open is the value of `openfiles` multiplied by the value of `maxproc`. This also applies to memory consumption.
-
-For further information on resource limits and login classes and capabilities in general, refer to man:cap.mkdb[1], man:getrlimit[2], and man:login.conf[5].
-
-=== Enabling and Configuring Resource Limits
-
-The `kern.racct.enable` tunable must be set to a non-zero value.
-Custom kernels require specific configuration:
-
-[.programlisting]
-....
-options RACCT
-options RCTL
-....
-
-Once the system has rebooted into the new kernel, `rctl` may be used to set rules for the system.
-
-Rule syntax is controlled through the use of a subject, subject-id, resource, and action, as seen in this example rule:
-
-[.programlisting]
-....
-user:trhodes:maxproc:deny=10/user
-....
-
-In this rule, the subject is `user`, the subject-id is `trhodes`, the resource, `maxproc`, is the maximum number of processes, and the action is `deny`, which blocks any new processes from being created.
-This means that the user, `trhodes`, will be constrained to no greater than `10` processes.
-Other possible actions include logging to the console, passing a notification to man:devd[8], or sending a sigterm to the process.
-
-Some care must be taken when adding rules.
-Since this user is constrained to `10` processes, this example will prevent the user from performing other tasks after logging in and executing a `screen` session.
-Once a resource limit has been hit, an error will be printed, as in this example:
-
-[source,shell]
-....
-% man test
- /usr/bin/man: Cannot fork: Resource temporarily unavailable
-eval: Cannot fork: Resource temporarily unavailable
-....
-
-As another example, a jail can be prevented from exceeding a memory limit.
-This rule could be written as:
-
-[source,shell]
-....
-# rctl -a jail:httpd:memoryuse:deny=2G/jail
-....
-
-Rules will persist across reboots if they have been added to [.filename]#/etc/rctl.conf#.
-The format is a rule, without the preceding command. For example, the previous rule could be added as:
-
-[.programlisting]
-....
-# Block jail from using more than 2G memory:
-jail:httpd:memoryuse:deny=2G/jail
-....
-
-To remove a rule, use `rctl` to remove it from the list:
-
-[source,shell]
-....
-# rctl -r user:trhodes:maxproc:deny=10/user
-....
-
-A method for removing all rules is documented in man:rctl[8].
-However, if removing all rules for a single user is required, this command may be issued:
-
-[source,shell]
-....
-# rctl -r user:trhodes
-....
-
-Many other resources exist which can be used to exert additional control over various `subjects`.
-See man:rctl[8] to learn about them.
-
-[[security-sudo]]
-== Shared Administration with Sudo
-
-System administrators often need the ability to grant enhanced permissions to users so they may perform privileged tasks.
-The idea that team members are provided access to a FreeBSD system to perform their specific tasks opens up unique challenges to every administrator.
-These team members only need a subset of access beyond normal end user levels; however, they almost always tell management they are unable to perform their tasks without superuser access.
-Thankfully, there is no reason to provide such access to end users because tools exist to manage this exact requirement.
-
-Up to this point, the security chapter has covered permitting access to authorized users and attempting to prevent unauthorized access.
-Another problem arises once authorized users have access to the system resources.
-In many cases, some users may need access to application startup scripts, or a team of administrators need to maintain the system.
-Traditionally, the standard users and groups, file permissions, and even the man:su[1] command would manage this access.
-And as applications required more access, as more users needed to use system resources, a better solution was required.
-The most used application is currently Sudo.
-
-Sudo allows administrators to configure more rigid access to system commands and provide for some advanced logging features.
-As a tool, it is available from the Ports Collection as package:security/sudo[] or by use of the man:pkg[8] utility.
-To use the man:pkg[8] tool:
-
-[source,shell]
-....
-# pkg install sudo
-....
-
-After the installation is complete, the installed `visudo` will open the configuration file with a text editor.
-Using `visudo` is highly recommended as it comes with a built in syntax checker to verify there are no errors before the file is saved.
-
-The configuration file is made up of several small sections which allow for extensive configuration.
-In the following example, web application maintainer, user1, needs to start, stop, and restart the web application known as _webservice_.
-To grant this user permission to perform these tasks, add this line to the end of [.filename]#/usr/local/etc/sudoers#:
-
-[.programlisting]
-....
-user1 ALL=(ALL) /usr/sbin/service webservice *
-....
-
-The user may now start _webservice_ using this command:
-
-[source,shell]
-....
-% sudo /usr/sbin/service webservice start
-....
-
-While this configuration allows a single user access to the webservice service;
-however, in most organizations, there is an entire web team in charge of managing the service.
-A single line can also give access to an entire group.
-These steps will create a web group, add a user to this group, and allow all members of the group to manage the service:
-
-[source,shell]
-....
-# pw groupadd -g 6001 -n webteam
-....
-
-Using the same man:pw[8] command, the user is added to the webteam group:
-
-[source,shell]
-....
-# pw groupmod -m user1 -n webteam
-....
-
-Finally, this line in [.filename]#/usr/local/etc/sudoers# allows any member of the webteam group to manage _webservice_:
-
-[.programlisting]
-....
-%webteam ALL=(ALL) /usr/sbin/service webservice *
-....
-
-Unlike man:su[1], Sudo only requires the end user password.
-This adds an advantage where users will not need shared passwords,
-a finding in most security audits and just bad all the way around.
-
-Users permitted to run applications with Sudo only enter their own passwords.
-This is more secure and gives better control than man:su[1],
-where the `root` password is entered and the user acquires all `root` permissions.
-
-[TIP]
-====
-
-Most organizations are moving or have moved toward a two factor authentication model.
-In these cases, the user may not have a password to enter.
-Sudo provides for these cases with the `NOPASSWD` variable.
-Adding it to the configuration above will allow all members of the _webteam_ group to manage the service without the password requirement:
-
-[.programlisting]
-....
-%webteam ALL=(ALL) NOPASSWD: /usr/sbin/service webservice *
-....
-
-====
-
-[[security-sudo-loggin]]
-=== Logging Output
-
-An advantage to implementing Sudo is the ability to enable session logging.
-Using the built in log mechanisms and the included sudoreplay command,
-all commands initiated through Sudo are logged for later verification.
-To enable this feature, add a default log directory entry, this example uses a user variable.
-Several other log filename conventions exist, consult the manual page for sudoreplay for additional information.
-
-[.programlisting]
-....
-Defaults iolog_dir=/var/log/sudo-io/%{user}
-....
-
-[TIP]
-====
-
-This directory will be created automatically after the logging is configured.
-It is best to let the system create directory with default permissions just to be safe.
-In addition, this entry will also log administrators who use the sudoreplay command.
-To change this behavior, read and uncomment the logging options inside [.filename]#sudoers#.
-====
-
-Once this directive has been added to the [.filename]#sudoers# file, any user configuration can be updated with the request to log access.
-In the example shown, the updated _webteam_ entry would have the following additional changes:
-
-[.programlisting]
-....
-%webteam ALL=(ALL) NOPASSWD: LOG_INPUT: LOG_OUTPUT: /usr/sbin/service webservice *
-....
-
-From this point on, all _webteam_ members altering the status of the _webservice_ application will be logged.
-The list of previous and current sessions can be displayed with:
-
-[source,shell]
-....
-# sudoreplay -l
-....
-
-In the output, to replay a specific session, search for the `TSID=` entry, and pass that to sudoreplay with no other options to replay the session at normal speed.
-For example:
-
-[source,shell]
-....
-# sudoreplay user1/00/00/02
-....
-
-[WARNING]
-====
-
-While sessions are logged, any administrator is able to remove sessions and leave only a question of why they had done so.
-It is worthwhile to add a daily check through an intrusion detection system (IDS) or similar software so that other administrators are alerted to manual alterations.
-====
-
-The `sudoreplay` is extremely extendable.
-Consult the documentation for more information.
-
-[[security-doas]]
-== Using doas as an alternative to sudo
-
-As an alternative to package:security/sudo[] package:security/doas[] can be used to provide the ability for users to get enhanced privileges.
-
-The doas utility is available via the ports collection in package:security/doas[] or via the man:pkg[8] utility.
-
-After the installation [.filename]#/usr/local/etc/doas.conf# must be configured to grant access for users for specific commands, or roles.
-
-The simpliest entry could be the following, which grants local_user root permissions without asking for its password when executing the doas command.
-
-[source,shell]
-....
-permit nopass local_user as root
-....
-
-For more configuration examples, please read man:doas.conf[5].
-
-After the installation and configuration of the `doas` utility, a command can now be executed with enhanced privileges, like for example.
-
-[source,shell]
-....
-$ doas vi /etc/rc.conf
-....
diff --git a/documentation/content/en/books/handbook/security/_index.po b/documentation/content/en/books/handbook/security/_index.po
new file mode 100644
index 0000000000..45b134ecb4
--- /dev/null
+++ b/documentation/content/en/books/handbook/security/_index.po
@@ -0,0 +1,4569 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/security/_index.adoc:1
+#, no-wrap
+msgid "Hundreds of standard practices have been authored about how to secure systems and networks, and as a user of FreeBSD, understanding how to protect against attacks and intruders is a must"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/security/_index.adoc:1
+#, no-wrap
+msgid "Part III. System Administration"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/security/_index.adoc:1
+#, no-wrap
+msgid "Chapter 16. Security"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/security/_index.adoc:14
+#, no-wrap
+msgid "Security"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/security/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:55
+msgid ""
+"Hundreds of standard practices have been authored about how to secure "
+"systems and networks, and as a user of FreeBSD, understanding how to protect "
+"against attacks and intruders is a must."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:58
+msgid ""
+"In this chapter, several fundamentals and techniques will be discussed. The "
+"FreeBSD system comes with multiple layers of security, and many more third "
+"party utilities may be added to enhance security."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:60
+msgid "This chapter covers:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:62
+msgid "Basic FreeBSD system security concepts."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:63
+msgid "The various crypt mechanisms available in FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:64
+msgid "How to configure TCP Wrappers for use with man:inetd[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:65
+msgid "How to set up Kerberos on FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:66
+msgid "How to configure and use OpenSSH on FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:67
+msgid "How to use OpenSSL on FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:68
+msgid "How to use file system ACLs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:69
+msgid ""
+"How to use pkg to audit third party software packages installed from the "
+"Ports Collection."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:70
+msgid "How to utilize FreeBSD security advisories."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:71
+msgid "What Process Accounting is and how to enable it on FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:72
+msgid ""
+"How to control user resources using login classes or the resource limits "
+"database."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:73
+msgid "What is Capsicum and a basic example."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:75
+msgid ""
+"Certain topics due to their complexity are found in dedicated chapters such "
+"as crossref:firewalls[firewalls,Firewalls], crossref:mac[mac,Mandatory "
+"Access Control] and articles like extref:{vpn-ipsec}[VPN over IPsec]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/security/_index.adoc:77
+#, no-wrap
+msgid "Introduction"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:82
+msgid ""
+"Security is everyone's responsibility. A weak entry point in any system "
+"could allow intruders to gain access to critical information and cause havoc "
+"on an entire network. One of the core principles of information security is "
+"the CIA triad, which stands for the Confidentiality, Integrity, and "
+"Availability of information systems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:85
+msgid ""
+"The CIA triad is a bedrock concept of computer security as customers and "
+"users expect their data to be protected. For example, a customer expects "
+"that their credit card information is securely stored (confidentiality), "
+"that their orders are not changed behind the scenes (integrity), and that "
+"they have access to their order information at all times (availability)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:91
+msgid ""
+"To provide CIA, security professionals apply a defense in depth strategy. "
+"The idea of defense in depth is to add several layers of security to prevent "
+"one single layer failing and the entire security system collapsing. For "
+"example, a system administrator cannot simply turn on a firewall and "
+"consider the network or system secure. One must also audit accounts, check "
+"the integrity of binaries, and ensure malicious tools are not installed. To "
+"implement an effective security strategy, one must understand threats and "
+"how to defend against them."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:94
+msgid ""
+"What is a threat as it pertains to computer security? Threats are not "
+"limited to remote attackers who attempt to access a system without "
+"permission from a remote location. Threats also include employees, "
+"malicious software, unauthorized network devices, natural disasters, "
+"security vulnerabilities, and even competing corporations."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:98
+msgid ""
+"Systems and networks can be accessed without permission, sometimes by "
+"accident, or by remote attackers, and in some cases, via corporate espionage "
+"or former employees. As a user, it is important to prepare for and admit "
+"when a mistake has led to a security breach and report possible issues to "
+"the security team. As an administrator, it is important to know of the "
+"threats and be prepared to mitigate them."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:104
+msgid ""
+"When applying security to systems, it is recommended to start by securing "
+"the basic accounts and system configuration, and then to secure the network "
+"layer so that it adheres to the system policy and the organization's "
+"security procedures. Many organizations already have a security policy that "
+"covers the configuration of technology devices. The policy should include "
+"the security configuration of workstations, desktops, mobile devices, "
+"phones, production servers, and development servers. In many cases, "
+"standard operating procedures (SOPs) already exist. When in doubt, ask the "
+"security team."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/security/_index.adoc:106
+#, no-wrap
+msgid "Securing Accounts"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:109
+msgid ""
+"Maintaining secure accounts in FreeBSD is crucial for data confidentiality, "
+"system integrity, and privilege separation, as it prevents unauthorized "
+"access, malware, and data breaches while ensuring compliance and protecting "
+"an organization's reputation."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:111
+#, no-wrap
+msgid "Preventing Logins"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:115
+msgid ""
+"In securing a system, a good starting point is an audit of accounts. "
+"Disable any accounts that do not need login access."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/security/_index.adoc:119
+msgid ""
+"Ensure that `root` has a strong password and that this password is not "
+"shared."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:122
+msgid "To deny login access to accounts, two methods exist."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:124
+msgid ""
+"The first is to lock the account, this example shows how to lock the `imani` "
+"account:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:128
+#, no-wrap
+msgid "# pw lock imani\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:132
+msgid ""
+"The second method is to prevent login access by changing the shell to [."
+"filename]#/usr/sbin/nologin#. The man:nologin[8] shell prevents the system "
+"from assigning a shell to the user when they attempt to login."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:134
+msgid "Only the superuser can change the shell for other users:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:138
+#, no-wrap
+msgid "# chsh -s /usr/sbin/nologin imani\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:141
+#, no-wrap
+msgid "Password Hashes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:146
+msgid ""
+"Passwords are a necessary evil of technology. When they must be used, they "
+"should be complex and a powerful hash mechanism should be used to encrypt "
+"the version that is stored in the password database. FreeBSD supports "
+"several algorithms, including SHA256, SHA512 and Blowfish hash algorithms in "
+"its `crypt()` library, see man:crypt[3] for details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:148
+msgid ""
+"The default of SHA512 should not be changed to a less secure hashing "
+"algorithm, but can be changed to the more secure Blowfish algorithm."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/security/_index.adoc:153
+msgid ""
+"Blowfish is not part of AES and is not considered compliant with any Federal "
+"Information Processing Standards (FIPS). Its use may not be permitted in "
+"some environments."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:157
+msgid ""
+"To determine which hash algorithm is used to encrypt a user's password, the "
+"superuser can view the hash for the user in the FreeBSD password database. "
+"Each hash starts with a symbol which indicates the type of hash mechanism "
+"used to encrypt the password."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:164
+msgid ""
+"If DES is used, there is no beginning symbol. For MD5, the symbol is `$`. "
+"For SHA256 and SHA512, the symbol is `$6$`. For Blowfish, the symbol is "
+"`$2a$`. In this example, the password for `imani` is hashed using the "
+"default SHA512 algorithm as the hash starts with `$6$`. Note that the "
+"encrypted hash, not the password itself, is stored in the password database:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:168
+#, no-wrap
+msgid "# grep imani /etc/master.passwd\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:171
+#: documentation/content/en/books/handbook/security/_index.adoc:187
+#: documentation/content/en/books/handbook/security/_index.adoc:238
+#: documentation/content/en/books/handbook/security/_index.adoc:446
+#: documentation/content/en/books/handbook/security/_index.adoc:538
+#: documentation/content/en/books/handbook/security/_index.adoc:706
+#: documentation/content/en/books/handbook/security/_index.adoc:736
+#: documentation/content/en/books/handbook/security/_index.adoc:770
+#: documentation/content/en/books/handbook/security/_index.adoc:997
+#: documentation/content/en/books/handbook/security/_index.adoc:1039
+#: documentation/content/en/books/handbook/security/_index.adoc:1084
+#: documentation/content/en/books/handbook/security/_index.adoc:1104
+#: documentation/content/en/books/handbook/security/_index.adoc:1156
+#: documentation/content/en/books/handbook/security/_index.adoc:1282
+#: documentation/content/en/books/handbook/security/_index.adoc:1311
+#: documentation/content/en/books/handbook/security/_index.adoc:1339
+#: documentation/content/en/books/handbook/security/_index.adoc:1353
+#: documentation/content/en/books/handbook/security/_index.adoc:1398
+#: documentation/content/en/books/handbook/security/_index.adoc:1420
+#: documentation/content/en/books/handbook/security/_index.adoc:1935
+#: documentation/content/en/books/handbook/security/_index.adoc:1973
+msgid "The output should be similar to the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:175
+#, no-wrap
+msgid "imani:$6$pzIjSvCAn.PBYQBA$PXpSeWPx3g5kscj3IMiM7tUEUSPmGexxta.8Lt9TGSi2lNQqYGKszsBPuGME0:1001:1001::0:0:imani:/usr/home/imani:/bin/sh\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:178
+msgid "The hash mechanism is set in the user's login class."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:180
+msgid ""
+"The following command can be run to check which hash mechanism is currently "
+"being used:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:184
+#, no-wrap
+msgid "# grep user /etc/master.passwd\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:191
+#, no-wrap
+msgid ":passwd_format=sha512:\\\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:194
+msgid ""
+"For example, to change the algorithm to Blowfish, modify that line to look "
+"like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:198
+#, no-wrap
+msgid ":passwd_format=blf:\\\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:201
+msgid ""
+"Then, man:cap_mkdb[1] must be executed to upgrade the login.conf database:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:205
+#: documentation/content/en/books/handbook/security/_index.adoc:272
+#: documentation/content/en/books/handbook/security/_index.adoc:1853
+#, no-wrap
+msgid "# cap_mkdb /etc/login.conf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:209
+msgid ""
+"Note that this change will not affect any existing password hashes. This "
+"means that all passwords should be re-hashed by asking users to run `passwd` "
+"in order to change their password."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:211
+#, no-wrap
+msgid "Password Policy Enforcement"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:215
+msgid ""
+"Enforcing a strong password policy for local accounts is a fundamental "
+"aspect of system security. In FreeBSD, password length, password strength, "
+"and password complexity can be implemented using built-in Pluggable "
+"Authentication Modules (PAM)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:218
+msgid ""
+"This section demonstrates how to configure the minimum and maximum password "
+"length and the enforcement of mixed characters using the man:pam_passwdqc[8] "
+"module. This module is enforced when a user changes their password."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:220
+msgid ""
+"To configure this module, become the superuser and uncomment the line "
+"containing `pam_passwdqc.so` in [.filename]#/etc/pam.d/passwd#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:222
+msgid "Then, edit that line to match the password policy:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:226
+#, no-wrap
+msgid "password requisite pam_passwdqc.so min=disabled,disabled,disabled,12,10 similar=deny retry=3 enforce=users\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:229
+msgid "The explanation of the parameters can be found in man:pam_passwdqc[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:231
+msgid ""
+"Once this file is saved, a user changing their password will see a message "
+"similar to the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:235
+#, no-wrap
+msgid "% passwd\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:243
+#, no-wrap
+msgid ""
+"Changing local password for user\n"
+"Old Password:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:254
+#, no-wrap
+msgid ""
+"You can now choose the new password.\n"
+"A valid password should be a mix of upper and lower case letters,\n"
+"digits and other characters. You can use a 12 character long\n"
+"password with characters from at least 3 of these 4 classes, or\n"
+"a 10 character long password containing characters from all the\n"
+"classes. Characters that form a common pattern are discarded by\n"
+"the check.\n"
+"Alternatively, if no one else can see your terminal now, you can\n"
+"pick this as your password: \"trait-useful&knob\".\n"
+"Enter new password:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:257
+msgid ""
+"If a password that does not match the policy is entered, it will be rejected "
+"with a warning and the user will have an opportunity to try again, up to the "
+"configured number of retries."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:259
+msgid ""
+"If your organization's policy requires passwords to expire, FreeBSD supports "
+"the `passwordtime` in the user's login class in [.filename]#/etc/login.conf#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:261
+msgid "The `default` login class contains an example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:265
+#, no-wrap
+msgid "# :passwordtime=90d:\\\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:268
+msgid ""
+"So, to set an expiry of 90 days for this login class, remove the comment "
+"symbol (#), save the edit, and execute the following command:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:275
+msgid ""
+"To set the expiration on individual users, pass an expiration date or the "
+"number of days to expiry and a username to `pw`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:279
+#, no-wrap
+msgid "# pw usermod -p 30-apr-2025 -n user\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:283
+msgid ""
+"As seen here, an expiration date is set in the form of day, month, and "
+"year. For more information, see man:pw[8]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:285
+#, no-wrap
+msgid "Shared Administration with sudo"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:291
+msgid ""
+"System administrators often need the ability to grant enhanced permissions "
+"to users so they may perform privileged tasks. The idea that team members "
+"are provided access to a FreeBSD system to perform their specific tasks "
+"opens up unique challenges to every administrator. These team members only "
+"need a subset of access beyond normal end user levels; however, they almost "
+"always tell management they are unable to perform their tasks without "
+"superuser access. Thankfully, there is no reason to provide such access to "
+"end users because tools exist to manage this exact requirement."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/security/_index.adoc:295
+msgid "Even administrators should limit their privileges when not needed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:303
+msgid ""
+"Up to this point, the security chapter has covered permitting access to "
+"authorized users and attempting to prevent unauthorized access. Another "
+"problem arises once authorized users have access to the system resources. "
+"In many cases, some users may need access to application startup scripts, or "
+"a team of administrators need to maintain the system. Traditionally, the "
+"standard users and groups, file permissions, and even the man:su[1] command "
+"would manage this access. And as applications required more access, as more "
+"users needed to use system resources, a better solution was required. The "
+"most used application is currently Sudo."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:306
+msgid ""
+"Sudo allows administrators to configure more rigid access to system commands "
+"and provide for some advanced logging features. As a tool, it is available "
+"from the Ports Collection as package:security/sudo[] or by use of the man:"
+"pkg[8] utility."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/security/_index.adoc:308
+#: documentation/content/en/books/handbook/security/_index.adoc:388
+msgid "Execute the following command to install it:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:312
+#, no-wrap
+msgid "# pkg install sudo\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:316
+msgid ""
+"After the installation is complete, the installed `visudo` will open the "
+"configuration file with a text editor. Using `visudo` is highly recommended "
+"as it comes with a built in syntax checker to verify there are no errors "
+"before the file is saved."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:320
+msgid ""
+"The configuration file is made up of several small sections which allow for "
+"extensive configuration. In the following example, web application "
+"maintainer, user1, needs to start, stop, and restart the web application "
+"known as _webservice_. To grant this user permission to perform these "
+"tasks, add this line to the end of [.filename]#/usr/local/etc/sudoers#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:324
+#, no-wrap
+msgid "user1 ALL=(ALL) /usr/sbin/service webservice *\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:327
+msgid "The user may now start _webservice_ using this command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:331
+#, no-wrap
+msgid "% sudo /usr/sbin/service webservice start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:337
+msgid ""
+"While this configuration allows a single user access to the webservice "
+"service; however, in most organizations, there is an entire web team in "
+"charge of managing the service. A single line can also give access to an "
+"entire group. These steps will create a web group, add a user to this "
+"group, and allow all members of the group to manage the service:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:341
+#, no-wrap
+msgid "# pw groupadd -g 6001 -n webteam\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:344
+msgid ""
+"Using the same man:pw[8] command, the user is added to the webteam group:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:348
+#, no-wrap
+msgid "# pw groupmod -m user1 -n webteam\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:351
+msgid ""
+"Finally, this line in [.filename]#/usr/local/etc/sudoers# allows any member "
+"of the webteam group to manage _webservice_:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:355
+#, no-wrap
+msgid "%webteam ALL=(ALL) /usr/sbin/service webservice *\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:359
+msgid ""
+"Unlike man:su[1], man:sudo[8] only requires the end user password. This "
+"avoids sharing passwords, which is a poor practice."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:363
+msgid ""
+"Users permitted to run applications with man:sudo[8] only enter their own "
+"passwords. This is more secure and gives better control than man:su[1], "
+"where the `root` password is entered and the user acquires all `root` "
+"permissions."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/security/_index.adoc:368
+msgid ""
+"Most organizations are moving or have moved toward a two factor "
+"authentication model. In these cases, the user may not have a password to "
+"enter."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/security/_index.adoc:371
+msgid ""
+"man:sudo[8] can be configured to permit two factor authentication model by "
+"using the `NOPASSWD` variable. Adding it to the configuration above will "
+"allow all members of the _webteam_ group to manage the service without the "
+"password requirement:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:375
+#, no-wrap
+msgid "%webteam ALL=(ALL) NOPASSWD: /usr/sbin/service webservice *\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:379
+#, no-wrap
+msgid "Shared Administration with Doas"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/security/_index.adoc:383
+msgid ""
+"man:doas[1] is a command-line utility ported from OpenBSD. It serves as an "
+"alternative to the widely used man:sudo[8] command in Unix-like systems."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/security/_index.adoc:386
+msgid ""
+"With doas, users can execute commands with elevated privileges, typically as "
+"the root user, while maintaining a simplified and security-conscious "
+"approach. Unlike man:sudo[8], doas emphasizes simplicity and minimalism, "
+"focusing on streamlined privilege delegation without an overwhelming array "
+"of configuration options."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:392
+#, no-wrap
+msgid "# pkg install doas\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:395
+msgid ""
+"After the installation [.filename]#/usr/local/etc/doas.conf# must be "
+"configured to grant access for users for specific commands, or roles."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:397
+msgid ""
+"The simplest entry could be the following, which grants the user "
+"`local_user` with `root` permissions without asking for its password when "
+"executing the doas command."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:401
+#, no-wrap
+msgid "permit nopass local_user as root\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:404
+msgid ""
+"After the installation and configuration of the `doas` utility, a command "
+"can now be executed with enhanced privileges, for example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:408
+#, no-wrap
+msgid "$ doas vi /etc/rc.conf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:411
+msgid "For more configuration examples, please read man:doas.conf[5]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/security/_index.adoc:413
+#, no-wrap
+msgid "Intrusion Detection System (IDS)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:417
+msgid ""
+"Verification of system files and binaries is important because it provides "
+"the system administration and security teams information about system "
+"changes. A software application that monitors the system for changes is "
+"called an Intrusion Detection System (IDS)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:421
+msgid ""
+"FreeBSD provides native support for a basic IDS system called man:mtree[8]. "
+"While the nightly security emails will notify an administrator of changes, "
+"the information is stored locally and there is a chance that a malicious "
+"user could modify this information in order to hide their changes to the "
+"system. As such, it is recommended to create a separate set of binary "
+"signatures and store them on a read-only, root-owned directory or, "
+"preferably, on a removable USB disk or remote server."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:423
+msgid "It is also recommended to run `freebsd-update IDS` after each update."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:425
+#, no-wrap
+msgid "Generating the Specification File"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:431
+msgid ""
+"The built-in man:mtree[8] utility can be used to generate a specification of "
+"the contents of a directory. A seed, or a numeric constant, is used to "
+"generate the specification and is required to check that the specification "
+"has not changed. This makes it possible to determine if a file or binary "
+"has been modified. Since the seed value is unknown by an attacker, faking "
+"or checking the checksum values of files will be difficult to impossible."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/security/_index.adoc:436
+msgid ""
+"It is recommended to create specifications for the directories which contain "
+"binaries and configuration files, as well as any directories containing "
+"sensitive data. Typically, specifications are created for [.filename]#/"
+"bin#, [.filename]#/sbin#, [.filename]#/usr/bin#, [.filename]#/usr/sbin#, [."
+"filename]#/usr/local/bin#, [.filename]#/etc#, and [.filename]#/usr/local/"
+"etc#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:439
+msgid ""
+"The following example generates a set of `sha512` hashes, one for each "
+"system binary in [.filename]#/bin#, and saves those values to a hidden file "
+"in user's home directory, [.filename]#/home/user/.bin_chksum_mtree#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:443
+#, no-wrap
+msgid "# mtree -s 123456789 -c -K cksum,sha512 -p /bin > /home/user/.bin_chksum_mtree\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:450
+#, no-wrap
+msgid "mtree: /bin checksum: 3427012225\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/security/_index.adoc:456
+msgid ""
+"The `123456789` value represents the seed, and should be chosen randomly. "
+"This value should be remembered, *but not shared*."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/security/_index.adoc:458
+msgid ""
+"It is important to keep the seed value and the checksum output hidden from "
+"malicious users."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:461
+#, no-wrap
+msgid "The Specification File Structure"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:465
+msgid ""
+"The mtree format is a textual format that describes a collection of "
+"filesystem objects. Such files are typically used to create or verify "
+"directory hierarchies."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:467
+msgid ""
+"An mtree file consists of a series of lines, each providing information "
+"about a single filesystem object. Leading whitespace is always ignored."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:469
+msgid ""
+"The specification file created above will be used to explain the format and "
+"content:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:476
+#, no-wrap
+msgid ""
+"# user: root <.>\n"
+"# machine: machinename <.>\n"
+"# tree: /bin <.>\n"
+"# date: Thu Aug 24 21:58:37 2023 <.>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:491
+#, no-wrap
+msgid ""
+"# .\n"
+"/set type=file uid=0 gid=0 mode=0555 nlink=1 flags=uarch <.>\n"
+". type=dir mode=0755 nlink=2 time=1681388848.239523000 <.>\n"
+" \\133 nlink=2 size=12520 time=1685991378.688509000 \\\n"
+" cksum=520880818 \\\n"
+" sha512=5c1374ce0e2ba1b3bc5a41b23f4bbdc1ec89ae82fa01237f376a5eeef41822e68f1d8f75ec46b7bceb65396c122a9d837d692740fdebdcc376a05275adbd3471\n"
+" cat size=14600 time=1685991378.694601000 cksum=3672531848 \\ <.>\n"
+" sha512=b30b96d155fdc4795432b523989a6581d71cdf69ba5f0ccb45d9b9e354b55a665899b16aee21982fffe20c4680d11da4e3ed9611232a775c69f926e5385d53a2\n"
+" chflags size=8920 time=1685991378.700385000 cksum=1629328991 \\\n"
+" sha512=289a088cbbcbeb436dd9c1f74521a89b66643976abda696b99b9cc1fbfe8b76107c5b54d4a6a9b65332386ada73fc1bbb10e43c4e3065fa2161e7be269eaf86a\n"
+" chio size=20720 time=1685991378.706095000 cksum=1948751604 \\\n"
+" sha512=46f58277ff16c3495ea51e74129c73617f31351e250315c2b878a88708c2b8a7bb060e2dc8ff92f606450dbc7dd2816da4853e465ec61ee411723e8bf52709ee\n"
+" chmod size=9616 time=1685991378.712546000 cksum=4244658911 \\\n"
+" sha512=1769313ce08cba84ecdc2b9c07ef86d2b70a4206420dd71343867be7ab59659956f6f5a458c64e2531a1c736277a8e419c633a31a8d3c7ccc43e99dd4d71d630\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:494
+msgid "User who created the specification."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:495
+msgid "Machine's hostname."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:496
+msgid "Directory path."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:497
+msgid "The Date and time when the specification was created."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:498
+msgid ""
+"`/set` special commands, defines some settings obtained from the files "
+"analyzed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:499
+msgid ""
+"Refers to the parsed directory and indicates things like what type it is, "
+"its mode, the number of hard links, and the time in UNIX format since it was "
+"modified."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:500
+msgid ""
+"Refers to the file and shows the size, time and a list of hashes to verify "
+"the integrity."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:502
+#, no-wrap
+msgid "Verify the Specification file"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:505
+msgid ""
+"To verify that the binary signatures have not changed, compare the current "
+"contents of the directory to the previously generated specification, and "
+"save the results to a file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:507
+msgid ""
+"This command requires the seed that was used to generate the original "
+"specification:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:511
+#: documentation/content/en/books/handbook/security/_index.adoc:528
+#, no-wrap
+msgid "# mtree -s 123456789 -p /bin < /home/user/.bin_chksum_mtree >> /home/user/.bin_chksum_output\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:515
+msgid ""
+"This should produce the same checksum for [.filename]#/bin# that was "
+"produced when the specification was created. If no changes have occurred to "
+"the binaries in this directory, the [.filename]#/home/user/."
+"bin_chksum_output# output file will be empty."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:517
+msgid ""
+"To simulate a change, change the date on [.filename]#/bin/cat# using man:"
+"touch[1] and run the verification command again:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:521
+#, no-wrap
+msgid "# touch /bin/cat\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:524
+msgid "Run the verification command again:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:531
+msgid "And then check the content of the output file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:535
+#, no-wrap
+msgid "# cat /root/.bin_chksum_output\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:542
+#, no-wrap
+msgid "cat: modification time (Fri Aug 25 13:30:17 2023, Fri Aug 25 13:34:20 2023)\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/security/_index.adoc:548
+msgid ""
+"This is just an example of what would be displayed when executing the "
+"command, to show the changes that would occur in the metadata."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/security/_index.adoc:551
+#, no-wrap
+msgid "Secure levels"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:555
+msgid ""
+"securelevel is a security mechanism implemented in the kernel. When the "
+"securelevel is positive, the kernel restricts certain tasks; not even the "
+"superuser (root) is allowed to do them."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:557
+msgid "The securelevel mechanism limits the ability to:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:559
+msgid "Unset certain file flags, such as `schg` (the system immutable flag)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:560
+msgid ""
+"Write to kernel memory via [.filename]#/dev/mem# and [.filename]#/dev/kmem#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:561
+msgid "Load kernel modules."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:562
+msgid "Alter firewall rules."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:564
+#, no-wrap
+msgid "Secure Levels Definitions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:568
+msgid ""
+"The kernel runs with five different security levels. Any super-user process "
+"can raise the level, but no process can lower it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:570
+msgid "The security definitions are:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/security/_index.adoc:571
+#, no-wrap
+msgid "-1"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:574
+#, no-wrap
+msgid ""
+"*Permanently insecure mode* - always run the system in insecure mode.\n"
+"This is the default initial value.\n"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/security/_index.adoc:575
+#, no-wrap
+msgid "0"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:578
+#, no-wrap
+msgid ""
+"*Insecure mode* - immutable and append-only flags may be turned off.\n"
+"All devices may be read or written subject to their permissions.\n"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/security/_index.adoc:579
+#, no-wrap
+msgid "1"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:585
+#, no-wrap
+msgid ""
+"*Secure mode* - the system immutable and system append-only flags may not be turned off;\n"
+"disks for mounted file systems, [.filename]#/dev/mem# and [.filename]#/dev/kmem# may not be opened for writing;\n"
+"[.filename]#/dev/io# (if your platform has it) may not be opened at all; kernel modules (see man:kld[4]) may not be loaded or unloaded.\n"
+"The kernel debugger may not be entered using the debug.kdb.enter sysctl.\n"
+"A panic or trap cannot be forced using the debug.kdb.panic, debug.kdb.panic_str and other sysctl's.\n"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/security/_index.adoc:586
+#, no-wrap
+msgid "2"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:589
+#, no-wrap
+msgid ""
+"*Highly secure mode* - same as secure mode, plus disks may not be opened for writing (except by man:mount[2]) whether mounted or not.\n"
+"This level precludes tampering with file systems by unmounting them, but also inhibits running man:newfs[8] while the system is multiuser.\n"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/security/_index.adoc:590
+#, no-wrap
+msgid "3"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:592
+#, no-wrap
+msgid "*Network secure mode* - same as highly secure mode, plus IP packet filter rules (see man:ipfw[8], man:ipfirewall[4] and man:pfctl[8]) cannot be changed and man:dummynet[4] or man:pf[4] configuration cannot be adjusted.\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/security/_index.adoc:597
+msgid ""
+"In summary, the key difference between `Permanently Insecure Mode` and "
+"`Insecure Mode` in FreeBSD secure levels is the degree of security they "
+"provide. `Permanently Insecure Mode` completely lifts all security "
+"restrictions, while `Insecure Mode` relaxes some restrictions but still "
+"maintains a level of control and security."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:600
+#, no-wrap
+msgid "Modify Secure Levels"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:603
+msgid ""
+"In order to change the securelevel of the system it is necessary to activate "
+"`kern_securelevel_enable` by executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:607
+#, no-wrap
+msgid "# sysrc kern_securelevel_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:610
+msgid "And set the value of `kern_securelevel` to the desired security level:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:614
+#, no-wrap
+msgid "# sysrc kern_securelevel=2\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:617
+msgid ""
+"To check the status of the securelevel on a running system execute the "
+"following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:621
+#, no-wrap
+msgid "# sysctl -n kern.securelevel\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:625
+msgid ""
+"The output contains the current value of the securelevel. If it is greater "
+"than 0, at least some of the securelevel's protections are enabled."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:629
+#, no-wrap
+msgid "-1\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/security/_index.adoc:632
+#, no-wrap
+msgid "File flags"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:636
+msgid ""
+"File flags allow users to attach additional metadata or attributes to files "
+"and directories beyond basic permissions and ownership. These flags provide "
+"a way to control various behaviors and properties of files without needing "
+"to resort to creating special directories or using extended attributes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:639
+msgid ""
+"File flags can be used to achieve different goals, such as preventing file "
+"deletion, making files append-only, synchronizing file updates, and more. "
+"Some commonly used file flags in FreeBSD include the \"immutable\" flag, "
+"which prevents modification or deletion of a file, and the \"append-only\" "
+"flag, which allows only data to be added to the end of a file but not "
+"modified or removed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:643
+msgid ""
+"These flags can be managed using the man:chflags[1] command in FreeBSD, "
+"providing administrators and users with greater control over the behavior "
+"and characteristics of their files and directories. It is important to note "
+"that file flags are typically managed by root or users with appropriate "
+"privileges, as they can influence how files are accessed and manipulated. "
+"Some flags are available for the use of the file's owner, as described in "
+"man:chflags[1]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:645
+#, no-wrap
+msgid "Work with File Flags"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:648
+msgid ""
+"In this example, a file named [.filename]#~/important.txt# in user's home "
+"directory want to be protected against deletions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:650
+msgid "Execute the following command to set the `schg` file flag:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:654
+#, no-wrap
+msgid "# chflags schg ~/important.txt\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:657
+msgid ""
+"When any user, including the `root` user, tries to delete the file, the "
+"system will display the message:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:661
+#, no-wrap
+msgid "rm: important.txt: Operation not permitted\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:664
+msgid ""
+"To delete the file, it will be necessary to delete the file flags of that "
+"file by executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:668
+#, no-wrap
+msgid "# chflags noschg ~/important.txt\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:671
+msgid ""
+"A list of supported file flags and their functionality can be found in man:"
+"chflags[1]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/security/_index.adoc:673
+#, no-wrap
+msgid "OpenSSH"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:678
+msgid ""
+"OpenSSH is a set of network connectivity tools used to provide secure access "
+"to remote machines. Additionally, TCP/IP connections can be tunneled or "
+"forwarded securely through SSH connections. OpenSSH encrypts all traffic to "
+"eliminate eavesdropping, connection hijacking, and other network-level "
+"attacks."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:680
+msgid ""
+"OpenSSH is maintained by the OpenBSD project and is installed by default in "
+"FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:683
+msgid ""
+"When data is sent over the network in an unencrypted form, network sniffers "
+"anywhere in between the client and server can steal user/password "
+"information or data transferred during the session. OpenSSH offers a "
+"variety of authentication and encryption methods to prevent this from "
+"happening."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:685
+msgid ""
+"More information about OpenSSH is available in the link:https://www.openssh."
+"com/[web page]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:688
+msgid ""
+"This section provides an overview of the built-in client utilities to "
+"securely access other systems and securely transfer files from a FreeBSD "
+"system. It then describes how to configure a SSH server on a FreeBSD system."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/security/_index.adoc:693
+msgid ""
+"As stated, this chapter will cover the base system version of OpenSSH. A "
+"version of OpenSSH is also available in the package:security/openssh-"
+"portable[], which provides additional configuration options and is updated "
+"more regularly."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:695
+#, no-wrap
+msgid "Using the SSH Client Utilities"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:699
+msgid ""
+"To log into a SSH server, use man:ssh[1] and specify a username that exists "
+"on that server and the IP address or hostname of the server. If this is the "
+"first time a connection has been made to the specified server, the user will "
+"be prompted to first verify the server's fingerprint:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:703
+#, no-wrap
+msgid "# ssh user@example.com\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:714
+#, no-wrap
+msgid ""
+"The authenticity of host 'example.com (10.0.0.1)' can't be established.\n"
+"ECDSA key fingerprint is 25:cc:73:b5:b3:96:75:3d:56:19:49:d2:5c:1f:91:3b.\n"
+"Are you sure you want to continue connecting (yes/no)? yes\n"
+"Permanently added 'example.com' (ECDSA) to the list of known hosts.\n"
+"Password for user@example.com: user_password\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:720
+msgid ""
+"SSH utilizes a key fingerprint system to verify the authenticity of the "
+"server when the client connects. When the user accepts the key's "
+"fingerprint by typing `yes` when connecting for the first time, a copy of "
+"the key is saved to [.filename]#~/.ssh/known_hosts# in the user's home "
+"directory. Future attempts to login are verified against the saved key and "
+"man:ssh[1] will display an alert if the server's key does not match the "
+"saved key. If this occurs, the user should first verify why the key has "
+"changed before continuing with the connection."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/security/_index.adoc:724
+msgid "How to perform this check is outside the scope of this chapter."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:727
+msgid "Use man:scp[1] to securely copy a file to or from a remote machine."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:729
+msgid ""
+"This example copies `COPYRIGHT` on the remote system to a file of the same "
+"name in the current directory of the local system:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:733
+#, no-wrap
+msgid "# scp user@example.com:/COPYRIGHT COPYRIGHT\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:741
+#, no-wrap
+msgid ""
+"Password for user@example.com: *******\n"
+"COPYRIGHT 100% |*****************************| 4735\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:744
+msgid ""
+"Since the fingerprint was already verified for this host, the server's key "
+"is automatically checked before prompting for the user's password."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:749
+msgid ""
+"The arguments passed to man:scp[1] are similar to man:cp[1]. The file or "
+"files to copy is the first argument and the destination to copy to is the "
+"second. Since the file is fetched over the network, one or more of the file "
+"arguments takes the form `user@host:<path_to_remote_file>`. Be aware when "
+"copying directories recursively that man:scp[1] uses `-r`, whereas man:cp[1] "
+"uses `-R`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:751
+msgid "To open an interactive session for copying files, use man:sftp[1]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:753
+msgid ""
+"Refer to man:sftp[1] for a list of available commands while in an man:"
+"sftp[1] session."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:755
+#, no-wrap
+msgid "Key-based Authentication"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:759
+msgid ""
+"Instead of using passwords, a client can be configured to connect to the "
+"remote machine using keys. For security reasons, this is the preferred "
+"method."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:763
+msgid ""
+"man:ssh-keygen[1] can be used to generate the authentication keys. To "
+"generate a public and private key pair, specify the type of key and follow "
+"the prompts. It is recommended to protect the keys with a memorable, but "
+"hard to guess passphrase."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:767
+#, no-wrap
+msgid "% ssh-keygen -t rsa -b 4096\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:794
+#, no-wrap
+msgid ""
+"Generating public/private rsa key pair.\n"
+"Enter file in which to save the key (/home/user/.ssh/id_rsa):\n"
+"Created directory '/home/user/.ssh/.ssh'.\n"
+"Enter passphrase (empty for no passphrase):\n"
+"Enter same passphrase again:\n"
+"Your identification has been saved in /home/user/.ssh/id_rsa.\n"
+"Your public key has been saved in /home/user/.ssh/id_rsa.pub.\n"
+"The key fingerprint is:\n"
+"SHA256:54Xm9Uvtv6H4NOo6yjP/YCfODryvUU7yWHzMqeXwhq8 user@host.example.com\n"
+"The key's randomart image is:\n"
+"+---[RSA 2048]----+\n"
+"| |\n"
+"| |\n"
+"| |\n"
+"| . o.. |\n"
+"| .S*+*o |\n"
+"| . O=Oo . . |\n"
+"| = Oo= oo..|\n"
+"| .oB.* +.oo.|\n"
+"| =OE**.o..=|\n"
+"+----[SHA256]-----+\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:798
+msgid ""
+"The private key is stored in [.filename]#~/.ssh/id_rsa# and the public key "
+"is stored in [.filename]#~/.ssh/id_rsa.pub#. The _public_ key must be "
+"copied to [.filename]#~/.ssh/authorized_keys# on the remote machine for key-"
+"based authentication to work."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/security/_index.adoc:802
+msgid ""
+"Utilizing a passphrase for OpenSSH keys is a key security practice, "
+"providing an extra layer of protection against unauthorized access and "
+"enhancing overall cybersecurity."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/security/_index.adoc:804
+msgid "In case of loss or theft, this adds another layer of security."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:807
+#, no-wrap
+msgid "SSH Tunneling"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:810
+msgid ""
+"OpenSSH has the ability to create a tunnel to encapsulate another protocol "
+"in an encrypted session."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:812
+msgid "The following command tells man:ssh[1] to create a tunnel:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:816
+#, no-wrap
+msgid "% ssh -D 8080 user@example.com\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:819
+msgid "This example uses the following options:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/security/_index.adoc:820
+#, no-wrap
+msgid "-D"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:822
+msgid "Specifies a local \"dynamic\" application-level port forwarding."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/security/_index.adoc:823
+#, no-wrap
+msgid "user@foo.example.com"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:825
+msgid "The login name to use on the specified remote SSH server."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:827
+msgid ""
+"An SSH tunnel works by creating a listen socket on `localhost` on the "
+"specified `localport`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:829
+msgid ""
+"This method can be used to wrap any number of insecure TCP protocols such as "
+"SMTP, POP3, and FTP."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:830
+#, no-wrap
+msgid "Enabling the SSH Server"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:833
+msgid ""
+"In addition to providing built-in SSH client utilities, a FreeBSD system can "
+"be configured as an SSH server, accepting connections from other SSH clients."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/security/_index.adoc:838
+msgid ""
+"As stated, this chapter will cover the base system version of OpenSSH. "
+"Please *not* confuse with package:security/openssh-portable[], the version "
+"of OpenSSH that ships with the FreeBSD ports."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:841
+msgid ""
+"In order to have the SSH Server enabled across reboots execute the following "
+"command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:845
+#, no-wrap
+msgid "# sysrc sshd_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:848
+msgid "Then execute the following command to enable the service:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:852
+#, no-wrap
+msgid "# service sshd start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:856
+msgid ""
+"The first time sshd starts on a FreeBSD system, the system's host keys will "
+"be automatically created and the fingerprint will be displayed on the "
+"console. Provide users with the fingerprint so that they can verify it the "
+"first time they connect to the server."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:858
+msgid ""
+"Refer to man:sshd[8] for the list of available options when starting sshd "
+"and a complete discussion about authentication, the login process, and the "
+"various configuration files."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:860
+msgid ""
+"At this point, the sshd should be available to all users with a username and "
+"password on the system."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:862
+#, no-wrap
+msgid "Configuring publickey auth method"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:867
+msgid ""
+"Configuring OpenSSH to use public key authentication enhances security by "
+"leveraging asymmetric cryptography for authentication. This method "
+"eliminates password-related risks, such as weak passwords or interception "
+"during transmission, while thwarting various password-based attacks. "
+"However, it's vital to ensure the private keys are well-protected to prevent "
+"unauthorized access."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:869
+msgid ""
+"The first step will be to configure man:sshd[8] to use the required "
+"authentication method."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:871
+msgid ""
+"Edit [.filename]#/etc/ssh/sshd_config# and uncomment the following "
+"configuration:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:875
+#, no-wrap
+msgid "PubkeyAuthentication yes\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:879
+msgid ""
+"Once the configuration is done, the users will have to send the system "
+"administrator their *public key* and these keys will be added in [."
+"filename]#.ssh/authorized_keys#. The process for generating the keys is "
+"described in <<Key-based Authentication>>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:881
+msgid "Then restart the server executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:885
+#: documentation/content/en/books/handbook/security/_index.adoc:955
+#, no-wrap
+msgid "# service sshd reload\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:888
+msgid ""
+"It is strongly recommended to follow the security improvements indicated in "
+"<<security-sshd-security-options>>."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:890
+#, no-wrap
+msgid "SSH Server Security Options"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:893
+msgid ""
+"While sshd is the most widely used remote administration facility for "
+"FreeBSD, brute force and drive by attacks are common to any system exposed "
+"to public networks."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:896
+msgid ""
+"Several additional parameters are available to prevent the success of these "
+"attacks and will be described in this section. All configurations will be "
+"done in [.filename]#/etc/ssh/sshd_config#"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/security/_index.adoc:902
+msgid ""
+"Do not confuse [.filename]#/etc/ssh/sshd_config# with [.filename]#/etc/ssh/"
+"ssh_config# (note the extra `d` in the first filename). The first file "
+"configures the server and the second file configures the client. Refer to "
+"man:ssh_config[5] for a listing of the available client settings."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:906
+msgid ""
+"By default, authentication can be done with both pubkey and password. To "
+"allow *only* pubkey authentication, *which is strongly recommended*, change "
+"the variable:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:910
+#, no-wrap
+msgid "PasswordAuthentication no\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:914
+msgid ""
+"It is a good idea to limit which users can log into the SSH server and from "
+"where using the `AllowUsers` keyword in the OpenSSH server configuration "
+"file. For example, to only allow `user` to log in from `192.168.1.32`, add "
+"this line to [.filename]#/etc/ssh/sshd_config#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:918
+#, no-wrap
+msgid "AllowUsers user@192.168.1.32\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:921
+msgid ""
+"To allow `user` to log in from anywhere, list that user without specifying "
+"an IP address:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:925
+#, no-wrap
+msgid "AllowUsers user\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:928
+msgid "Multiple users should be listed on the same line, like so:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:932
+#, no-wrap
+msgid "AllowUsers root@192.168.1.32 user\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:935
+msgid ""
+"After making all the changes, and before restarting the service, it is "
+"recommended to verify that the configuration made is correct by executing "
+"the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:939
+#, no-wrap
+msgid "# sshd -t\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:943
+msgid ""
+"If the configuration file is correct, no output will be shown. In case the "
+"configuration file is incorrect, it will show something like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:948
+#, no-wrap
+msgid ""
+"/etc/ssh/sshd_config: line 3: Bad configuration option: sdadasdasdasads\n"
+"/etc/ssh/sshd_config: terminating, 1 bad configuration options\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:951
+msgid ""
+"After making the changes and checking that the configuration file is "
+"correct, tell sshd to reload its configuration file by running:"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/security/_index.adoc:958
+#, no-wrap
+msgid "OpenSSL"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:961
+msgid ""
+"OpenSSL is a cryptography toolkit implementing the Secure Sockets Layer "
+"(SSL) and Transport Layer Security (TLS) network protocols and many "
+"cryptography routines."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:964
+msgid ""
+"The openssl program is a command line tool for using the various "
+"cryptography functions of OpenSSL's crypto library from the shell. It can "
+"be used for"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:966
+msgid "Creation and management of private keys, public keys and parameters"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:967
+msgid "Public key cryptographic operations"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:968
+msgid "Creation of X.509 certificates, CSRs and CRLs"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:969
+msgid "Calculation of Message Digests"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:970
+msgid "Encryption and Decryption with Ciphers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:971
+msgid "SSL/TLS Client and Server Tests"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:972
+msgid "Handling of S/MIME signed or encrypted mail"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:973
+msgid "Time Stamp requests, generation and verification"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:974
+msgid "Benchmarking the crypto routines"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:976
+msgid ""
+"For more information about OpenSSL, read the free https://www.feistyduck.com/"
+"books/openssl-cookbook/[OpenSSL Cookbook]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:978
+#, no-wrap
+msgid "Generating Certificates"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:981
+msgid ""
+"OpenSSL supports the generation of certificates both to be validated by a "
+"link:https://en.wikipedia.org/wiki/Certificate_authority[CA] and for own use."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:988
+msgid ""
+"Run the command man:openssl[1] to generate a valid certificate for a link:"
+"https://en.wikipedia.org/wiki/Certificate_authority[CA] with the following "
+"arguments. This command will create two files in the current directory. "
+"The certificate request, [.filename]#req.pem#, can be sent to a link:https://"
+"en.wikipedia.org/wiki/Certificate_authority[CA] which, will validate the "
+"entered credentials, sign the request, and return the signed certificate. "
+"The second file, [.filename]#cert.key#, is the private key for the "
+"certificate and should be stored in a secure location. If this falls in the "
+"hands of others, it can be used to impersonate the user or the server."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:990
+#: documentation/content/en/books/handbook/security/_index.adoc:1032
+msgid "Execute the following command to generate the certificate:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:994
+#, no-wrap
+msgid "# openssl req -new -nodes -out req.pem -keyout cert.key -sha3-512 -newkey rsa:4096\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1019
+#, no-wrap
+msgid ""
+"Generating a RSA private key\n"
+"..................................................................................................................................+++++\n"
+"......................................+++++\n"
+"writing new private key to 'cert.key'\n"
+"-----\n"
+"You are about to be asked to enter information that will be incorporated\n"
+"into your certificate request.\n"
+"What you are about to enter is what is called a Distinguished Name or a DN.\n"
+"There are quite a few fields but you can leave some blank\n"
+"For some fields there will be a default value,\n"
+"If you enter '.', the field will be left blank.\n"
+"-----\n"
+"Country Name (2 letter code) [AU]:ES\n"
+"State or Province Name (full name) [Some-State]:Valencian Community\n"
+"Locality Name (eg, city) []:Valencia\n"
+"Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company\n"
+"Organizational Unit Name (eg, section) []:Systems Administrator\n"
+"Common Name (e.g. server FQDN or YOUR name) []:localhost.example.org\n"
+"Email Address []:user@FreeBSD.org\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1024
+#, no-wrap
+msgid ""
+"Please enter the following 'extra' attributes\n"
+"to be sent with your certificate request\n"
+"A challenge password []:123456789\n"
+"An optional company name []:Another name\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1030
+msgid ""
+"Alternately, if a signature from a link:https://en.wikipedia.org/wiki/"
+"Certificate_authority[CA] is not required, a self-signed certificate can be "
+"created. This will create two new files in the current directory: a private "
+"key file [.filename]#cert.key#, and the certificate itself, [.filename]#cert."
+"crt#. These should be placed in a directory, preferably under [.filename]#/"
+"etc/ssl/#, which is readable only by `root`. Permissions of `0700` are "
+"appropriate for these files and can be set using `chmod`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1036
+#, no-wrap
+msgid "# openssl req -new -x509 -days 365 -sha3-512 -keyout /etc/ssl/private/cert.key -out /etc/ssl/certs/cert.crt\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1063
+#, no-wrap
+msgid ""
+"Generating a RSA private key\n"
+"........................................+++++\n"
+"...........+++++\n"
+"writing new private key to '/etc/ssl/private/cert.key'\n"
+"Enter PEM pass phrase:\n"
+"Verifying - Enter PEM pass phrase:\n"
+"-----\n"
+"You are about to be asked to enter information that will be incorporated\n"
+"into your certificate request.\n"
+"What you are about to enter is what is called a Distinguished Name or a DN.\n"
+"There are quite a few fields but you can leave some blank\n"
+"For some fields there will be a default value,\n"
+"If you enter '.', the field will be left blank.\n"
+"-----\n"
+"Country Name (2 letter code) [AU]:ES\n"
+"State or Province Name (full name) [Some-State]:Valencian Community\n"
+"Locality Name (eg, city) []:Valencia\n"
+"Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company\n"
+"Organizational Unit Name (eg, section) []:Systems Administrator\n"
+"Common Name (e.g. server FQDN or YOUR name) []:localhost.example.org\n"
+"Email Address []:user@FreeBSD.org\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:1066
+#, no-wrap
+msgid "Configuring the FIPS Provider"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1073
+msgid ""
+"With the import of OpenSSL 3 into the base system (on FreeBSD 14 and later), "
+"its new concept of provider modules was introduced in the system. Besides "
+"the default provider module built-in to the library, the _legacy_ module "
+"implements the now optional deprecated cryptography algorithms, while the "
+"_fips_ module restricts the OpenSSL implementation to the cryptography "
+"algorithms present in the link:https://en.wikipedia.org/wiki/"
+"Federal_Information_Processing_Standards[FIPS] set of standards. This part "
+"of OpenSSL receives link:https://www.openssl.org/docs/fips.html[particular "
+"care], including a link:https://www.openssl.org/news/fips-cve.html[list of "
+"relevant security issues], and is subject to the link:https://github.com/"
+"openssl/openssl/blob/master/README-FIPS.md[FIPS 140 validation process] on a "
+"regular basis. The link:https://www.openssl.org/source/[list of FIPS "
+"validated versions] is also available. This allows users to ensure FIPS "
+"compliance in their use of OpenSSL."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1077
+msgid ""
+"Importantly, the man:fips_module[7] is protected by an additional security "
+"measure, preventing its use without passing an integrity check. This check "
+"can be setup by the local system administrator, allowing every user of "
+"OpenSSL 3 to load this module. When not configured correctly, the FIPS "
+"module is expected to fail as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1081
+#: documentation/content/en/books/handbook/security/_index.adoc:1153
+#, no-wrap
+msgid "# echo test | openssl aes-128-cbc -a -provider fips -pbkdf2\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1093
+#, no-wrap
+msgid ""
+"aes-128-cbc: unable to load provider fips\n"
+"Hint: use -provider-path option or OPENSSL_MODULES environment variable.\n"
+"00206124D94D0000:error:1C8000D5:Provider routines:SELF_TEST_post:missing config data:crypto/openssl/providers/fips/self_test.c:275:\n"
+"00206124D94D0000:error:1C8000E0:Provider routines:ossl_set_error_state:fips module entering error state:crypto/openssl/providers/fips/self_test.c:373:\n"
+"00206124D94D0000:error:1C8000D8:Provider routines:OSSL_provider_init_int:self test post failure:crypto/openssl/providers/fips/fipsprov.c:707:\n"
+"00206124D94D0000:error:078C0105:common libcrypto routines:provider_init:init fail:crypto/openssl/crypto/provider_core.c:932:name=fips\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1097
+msgid ""
+"The check can be configured through the creation of a file in [.filename]#/"
+"etc/ssl/fipsmodule.cnf#, which will then be referenced in OpenSSL's main "
+"configuration file [.filename]#/etc/ssl/openssl.cnf#. OpenSSL provides the "
+"man:openssl-fipsinstall[1] utility to help with this process, which can be "
+"used as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1101
+#, no-wrap
+msgid "# openssl fipsinstall -module /usr/lib/ossl-modules/fips.so -out /etc/ssl/fipsmodule.cnf\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1108
+#, no-wrap
+msgid "INSTALL PASSED\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1111
+msgid ""
+"The [.filename]#/etc/ssl/openssl.cnf# should then be modified, in order to:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1113
+msgid "Include the [.filename]#/etc/ssl/fipsmodule.cnf# file generated above,"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1114
+msgid "Expose the FIPS module for possible use,"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1115
+msgid "And explicitly activate the default module."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1126
+#, no-wrap
+msgid ""
+"[...]\n"
+"# For FIPS\n"
+"# Optionally include a file that is generated by the OpenSSL fipsinstall\n"
+"# application. This file contains configuration data required by the OpenSSL\n"
+"# fips provider. It contains a named section e.g. [fips_sect] which is\n"
+"# referenced from the [provider_sect] below.\n"
+"# Refer to the OpenSSL security policy for more information.\n"
+".include /etc/ssl/fipsmodule.cnf\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1128
+#, no-wrap
+msgid "[...]\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1135
+#, no-wrap
+msgid ""
+"# List of providers to load\n"
+"[provider_sect]\n"
+"default = default_sect\n"
+"# The fips section name should match the section name inside the\n"
+"# included fipsmodule.cnf.\n"
+"fips = fips_sect\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1146
+#, no-wrap
+msgid ""
+"# If no providers are activated explicitly, the default one is activated implicitly.\n"
+"# See man 7 OSSL_PROVIDER-default for more details.\n"
+"#\n"
+"# If you add a section explicitly activating any other provider(s), you most\n"
+"# probably need to explicitly activate the default provider, otherwise it\n"
+"# becomes unavailable in openssl. As a consequence applications depending on\n"
+"# OpenSSL may not work correctly which could lead to significant system\n"
+"# problems including inability to remotely access the system.\n"
+"[default_sect]\n"
+"activate = 1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1149
+msgid ""
+"With this done, it should be possible to confirm that the FIPS module is "
+"effectively available and working:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1162
+#, no-wrap
+msgid ""
+"enter AES-128-CBC encryption password:\n"
+"Verifying - enter AES-128-CBC encryption password:\n"
+"U2FsdGVkX18idooW6e3LqWeeiKP76kufcOUClh57j8U=\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1165
+msgid ""
+"This procedure has to be repeated every time the FIPS module is modified, e."
+"g., after performing system updates, or after applying security fixes "
+"affecting OpenSSL in the base system."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/security/_index.adoc:1167
+#, no-wrap
+msgid "Kerberos"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1173
+msgid ""
+"Kerberos is a network authentication protocol which was originally created "
+"by the Massachusetts Institute of Technology (MIT) as a way to securely "
+"provide authentication across a potentially hostile network. The Kerberos "
+"protocol uses strong cryptography so that both a client and server can prove "
+"their identity without sending any unencrypted secrets over the network. "
+"Kerberos can be described as an identity-verifying proxy system and as a "
+"trusted third-party authentication system. After a user authenticates with "
+"Kerberos, their communications can be encrypted to assure privacy and data "
+"integrity."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1177
+msgid ""
+"The only function of Kerberos is to provide the secure authentication of "
+"users and servers on the network. It does not provide authorization or "
+"auditing functions. It is recommended that Kerberos be used with other "
+"security methods which provide authorization and audit services."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1185
+msgid ""
+"The current version of the protocol is version 5, described in RFC 4120. "
+"Several free implementations of this protocol are available, covering a wide "
+"range of operating systems. MIT continues to develop their Kerberos "
+"package. It is commonly used in the US as a cryptography product, and has "
+"historically been subject to US export regulations. In FreeBSD, MITKerberos "
+"is available as the package:security/krb5[] package or port. The Heimdal "
+"Kerberos implementation was explicitly developed outside of the US to avoid "
+"export regulations. The Heimdal Kerberos distribution is included in the "
+"base FreeBSD installation, and another distribution with more configurable "
+"options is available as package:security/heimdal[] in the Ports Collection."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1188
+msgid ""
+"In Kerberos users and services are identified as \"principals\" which are "
+"contained within an administrative grouping, called a \"realm\". A typical "
+"user principal would be of the form `_user_@_REALM_` (realms are "
+"traditionally uppercase)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1190
+msgid ""
+"This section provides a guide on how to set up Kerberos using the Heimdal "
+"distribution included in FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1192
+msgid ""
+"For purposes of demonstrating a Kerberos installation, the name spaces will "
+"be as follows:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1194
+msgid "The DNS domain (zone) will be `example.org`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1195
+msgid "The Kerberos realm will be `EXAMPLE.ORG`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1200
+msgid ""
+"Use real domain names when setting up Kerberos, even if it will run "
+"internally. This avoids DNS problems and assures inter-operation with other "
+"Kerberos realms."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:1202
+#, no-wrap
+msgid "Setting up a Heimdal KDC"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1208
+msgid ""
+"The Key Distribution Center (KDC) is the centralized authentication service "
+"that Kerberos provides, the \"trusted third party\" of the system. It is "
+"the computer that issues Kerberos tickets, which are used for clients to "
+"authenticate to servers. As the KDC is considered trusted by all other "
+"computers in the Kerberos realm, it has heightened security concerns. "
+"Direct access to the KDC should be limited."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1210
+msgid ""
+"While running a KDC requires few computing resources, a dedicated machine "
+"acting only as a KDC is recommended for security reasons."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1212
+msgid "To begin, install the package:security/heimdal[] package as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1216
+#, no-wrap
+msgid "# pkg install heimdal\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1219
+msgid "Next, update [.filename]#/etc/rc.conf# using `sysrc` as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1224
+#, no-wrap
+msgid ""
+"# sysrc kdc_enable=yes\n"
+"# sysrc kadmind_enable=yes\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1227
+msgid "Next, edit [.filename]#/etc/krb5.conf# as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1239
+#, no-wrap
+msgid ""
+"[libdefaults]\n"
+" default_realm = EXAMPLE.ORG\n"
+"[realms]\n"
+" EXAMPLE.ORG = {\n"
+"\tkdc = kerberos.example.org\n"
+"\tadmin_server = kerberos.example.org\n"
+" }\n"
+"[domain_realm]\n"
+" .example.org = EXAMPLE.ORG\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1243
+msgid ""
+"In this example, the KDC will use the fully-qualified hostname `kerberos."
+"example.org`. The hostname of the KDC must be resolvable in the DNS."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1246
+msgid ""
+"Kerberos can also use the DNS to locate KDCs, instead of a `[realms]` "
+"section in [.filename]#/etc/krb5.conf#. For large organizations that have "
+"their own DNS servers, the above example could be trimmed to:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1253
+#, no-wrap
+msgid ""
+"[libdefaults]\n"
+" default_realm = EXAMPLE.ORG\n"
+"[domain_realm]\n"
+" .example.org = EXAMPLE.ORG\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1256
+msgid "With the following lines being included in the `example.org` zone file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1264
+#, no-wrap
+msgid ""
+"_kerberos._udp IN SRV 01 00 88 kerberos.example.org.\n"
+"_kerberos._tcp IN SRV 01 00 88 kerberos.example.org.\n"
+"_kpasswd._udp IN SRV 01 00 464 kerberos.example.org.\n"
+"_kerberos-adm._tcp IN SRV 01 00 749 kerberos.example.org.\n"
+"_kerberos IN TXT EXAMPLE.ORG\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1269
+msgid ""
+"In order for clients to be able to find the Kerberos services, they _must_ "
+"have either a fully configured [.filename]#/etc/krb5.conf# or a minimally "
+"configured [.filename]#/etc/krb5.conf# _and_ a properly configured DNS "
+"server."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1275
+msgid ""
+"Next, create the Kerberos database which contains the keys of all principals "
+"(users and hosts) encrypted with a master password. It is not required to "
+"remember this password as it will be stored in [.filename]#/var/heimdal/m-"
+"key#; it would be reasonable to use a 45-character random password for this "
+"purpose. To create the master key, run `kstash` and enter a password:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1279
+#, no-wrap
+msgid "# kstash\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1287
+#, no-wrap
+msgid ""
+"Master key: xxxxxxxxxxxxxxxxxxxxxxx\n"
+"Verifying password - Master key: xxxxxxxxxxxxxxxxxxxxxxx\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1293
+msgid ""
+"Once the master key has been created, the database should be initialized. "
+"The Kerberos administrative tool man:kadmin[8] can be used on the KDC in a "
+"mode that operates directly on the database, without using the man:"
+"kadmind[8] network service, as `kadmin -l`. This resolves the chicken-and-"
+"egg problem of trying to connect to the database before it is created. At "
+"the `kadmin` prompt, use `init` to create the realm's initial database:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1299
+#, no-wrap
+msgid ""
+"# kadmin -l\n"
+"kadmin> init EXAMPLE.ORG\n"
+"Realm max ticket life [unlimited]:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1304
+msgid ""
+"Lastly, while still in `kadmin`, create the first principal using `add`. "
+"Stick to the default options for the principal for now, as these can be "
+"changed later with `modify`. Type `?` at the prompt to see the available "
+"options."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1308
+#, no-wrap
+msgid "kadmin> add tillman\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1321
+#, no-wrap
+msgid ""
+"Max ticket life [unlimited]:\n"
+"Max renewable life [unlimited]:\n"
+"Principal expiration time [never]:\n"
+"Password expiration time [never]:\n"
+"Attributes []:\n"
+"Password: xxxxxxxx\n"
+"Verifying password - Password: xxxxxxxx\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1324
+msgid "Next, start the KDC services by running:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1329
+#, no-wrap
+msgid ""
+"# service kdc start\n"
+"# service kadmind start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1332
+msgid ""
+"While there will not be any kerberized daemons running at this point, it is "
+"possible to confirm that the KDC is functioning by obtaining a ticket for "
+"the principal that was just created:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1336
+#, no-wrap
+msgid "% kinit tillman\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1343
+#, no-wrap
+msgid "tillman@EXAMPLE.ORG's Password:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1346
+msgid "Confirm that a ticket was successfully obtained using `klist`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1350
+#, no-wrap
+msgid "% klist\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1358
+#, no-wrap
+msgid ""
+"Credentials cache: FILE:/tmp/krb5cc_1001\n"
+"\tPrincipal: tillman@EXAMPLE.ORG\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1361
+#, no-wrap
+msgid ""
+" Issued Expires Principal\n"
+"Aug 27 15:37:58 2013 Aug 28 01:37:58 2013 krbtgt/EXAMPLE.ORG@EXAMPLE.ORG\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1364
+msgid "The temporary ticket can be destroyed when the test is finished:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1368
+#, no-wrap
+msgid "% kdestroy\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:1370
+#, no-wrap
+msgid "Configuring a Server to Use Kerberos"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1374
+msgid ""
+"The first step in configuring a server to use Kerberos authentication is to "
+"ensure that it has the correct configuration in [.filename]#/etc/krb5."
+"conf#. The version from the KDC can be used as-is, or it can be regenerated "
+"on the new system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1383
+msgid ""
+"Next, create [.filename]#/etc/krb5.keytab# on the server. This is the main "
+"part of \"Kerberizing\" a service - it corresponds to generating a secret "
+"shared between the service and the KDC. The secret is a cryptographic key, "
+"stored in a \"keytab\". The keytab contains the server's host key, which "
+"allows it and the KDC to verify each others' identity. It must be "
+"transmitted to the server in a secure fashion, as the security of the server "
+"can be broken if the key is made public. Typically, the [.filename]#keytab# "
+"is generated on an administrator's trusted machine using `kadmin`, then "
+"securely transferred to the server, e.g., with man:scp[1]; it can also be "
+"created directly on the server if that is consistent with the desired "
+"security policy. It is very important that the keytab is transmitted to the "
+"server in a secure fashion: if the key is known by some other party, that "
+"party can impersonate any user to the server! Using `kadmin` on the server "
+"directly is convenient, because the entry for the host principal in the KDC "
+"database is also created using `kadmin`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1387
+msgid ""
+"Of course, `kadmin` is a kerberized service; a Kerberos ticket is needed to "
+"authenticate to the network service, but to ensure that the user running "
+"`kadmin` is actually present (and their session has not been hijacked), "
+"`kadmin` will prompt for the password to get a fresh ticket. The principal "
+"authenticating to the kadmin service must be permitted to use the `kadmin` "
+"interface, as specified in [.filename]#/var/heimdal/kadmind.acl#. See the "
+"section titled \"Remote administration\" in `info heimdal` for details on "
+"designing access control lists. Instead of enabling remote `kadmin` access, "
+"the administrator could securely connect to the KDC via the local console or "
+"man:ssh[1], and perform administration locally using `kadmin -l`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1391
+msgid ""
+"After installing [.filename]#/etc/krb5.conf#, use `add --random-key` in "
+"`kadmin`. This adds the server's host principal to the database, but does "
+"not extract a copy of the host principal key to a keytab. To generate the "
+"keytab, use `ext` to extract the server's host principal key to its own "
+"keytab:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1395
+#: documentation/content/en/books/handbook/security/_index.adoc:1417
+#, no-wrap
+msgid "# kadmin\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1409
+#, no-wrap
+msgid ""
+"kadmin> add --random-key host/myserver.example.org\n"
+"Max ticket life [unlimited]:\n"
+"Max renewable life [unlimited]:\n"
+"Principal expiration time [never]:\n"
+"Password expiration time [never]:\n"
+"Attributes []:\n"
+"kadmin> ext_keytab host/myserver.example.org\n"
+"kadmin> exit\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1413
+msgid ""
+"Note that `ext_keytab` stores the extracted key in [.filename]#/etc/krb5."
+"keytab# by default. This is good when being run on the server being "
+"kerberized, but the `--keytab _path/to/file_` argument should be used when "
+"the keytab is being extracted elsewhere:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1425
+#, no-wrap
+msgid ""
+"kadmin> ext_keytab --keytab=/tmp/example.keytab host/myserver.example.org\n"
+"kadmin> exit\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1429
+msgid ""
+"The keytab can then be securely copied to the server using man:scp[1] or a "
+"removable media. Be sure to specify a non-default keytab name to avoid "
+"inserting unneeded keys into the system's keytab."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1434
+msgid ""
+"At this point, the server can read encrypted messages from the KDC using its "
+"shared key, stored in [.filename]#krb5.keytab#. It is now ready for the "
+"Kerberos-using services to be enabled. One of the most common such services "
+"is man:sshd[8], which supports Kerberos via the GSS-API. In [.filename]#/"
+"etc/ssh/sshd_config#, add the line:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1438
+#, no-wrap
+msgid "GSSAPIAuthentication yes\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1441
+msgid ""
+"After making this change, man:sshd[8] must be restarted for the new "
+"configuration to take effect: `service sshd restart`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:1442
+#, no-wrap
+msgid "Configuring a Client to Use Kerberos"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1446
+msgid ""
+"As it was for the server, the client requires configuration in [.filename]#/"
+"etc/krb5.conf#. Copy the file in place (securely) or re-enter it as needed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1451
+msgid ""
+"Test the client by using `kinit`, `klist`, and `kdestroy` from the client to "
+"obtain, show, and then delete a ticket for an existing principal. Kerberos "
+"applications should also be able to connect to Kerberos enabled servers. If "
+"that does not work but obtaining a ticket does, the problem is likely with "
+"the server and not with the client or the KDC. In the case of kerberized "
+"man:ssh[1], GSS-API is disabled by default, so test using `ssh -o "
+"GSSAPIAuthentication=yes _hostname_`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1453
+msgid ""
+"When testing a Kerberized application, try using a packet sniffer such as "
+"`tcpdump` to confirm that no sensitive information is sent in the clear."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1456
+msgid ""
+"Various Kerberos client applications are available. With the advent of a "
+"bridge so that applications using SASL for authentication can use GSS-API "
+"mechanisms as well, large classes of client applications can use Kerberos "
+"for authentication, from Jabber clients to IMAP clients."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1461
+msgid ""
+"Users within a realm typically have their Kerberos principal mapped to a "
+"local user account. Occasionally, one needs to grant access to a local user "
+"account to someone who does not have a matching Kerberos principal. For "
+"example, `tillman@EXAMPLE.ORG` may need access to the local user account "
+"`webdevelopers`. Other principals may also need access to that local "
+"account."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1464
+msgid ""
+"The [.filename]#.k5login# and [.filename]#.k5users# files, placed in a "
+"user's home directory, can be used to solve this problem. For example, if "
+"the following [.filename]#.k5login# is placed in the home directory of "
+"`webdevelopers`, both principals listed will have access to that account "
+"without requiring a shared password:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1469
+#, no-wrap
+msgid ""
+"tillman@example.org\n"
+"jdoe@example.org\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1472
+msgid "Refer to man:ksu[1] for more information about [.filename]#.k5users#."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:1473
+#, no-wrap
+msgid "MIT Differences"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1477
+msgid ""
+"The major difference between the MIT and Heimdal implementations is that "
+"`kadmin` has a different, but equivalent, set of commands and uses a "
+"different protocol. If the KDC is MIT, the Heimdal version of `kadmin` "
+"cannot be used to administer the KDC remotely, and vice versa."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1481
+msgid ""
+"Client applications may also use slightly different command line options to "
+"accomplish the same tasks. Following the instructions at http://web.mit.edu/"
+"Kerberos/www/[http://web.mit.edu/Kerberos/www/] is recommended. Be careful "
+"of path issues: the MIT port installs into [.filename]#/usr/local/# by "
+"default, and the FreeBSD system applications run instead of the MIT versions "
+"if `PATH` lists the system directories first."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1483
+msgid ""
+"When using MIT Kerberos as a KDC on FreeBSD, execute the following commands "
+"to add the required configurations to [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1491
+#, no-wrap
+msgid ""
+"# sysrc kdc_program=\"/usr/local/sbin/kdc\"\n"
+"# sysrc kadmind_program=\"/usr/local/sbin/kadmind\"\n"
+"# sysrc kdc_flags=\"\"\n"
+"# sysrc kdc_enable=\"YES\"\n"
+"# sysrc kadmind_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:1493
+#, no-wrap
+msgid "Kerberos Tips, Tricks, and Troubleshooting"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1496
+msgid ""
+"When configuring and troubleshooting Kerberos, keep the following points in "
+"mind:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1498
+msgid ""
+"When using either Heimdal or MITKerberos from ports, ensure that the `PATH` "
+"lists the port's versions of the client applications before the system "
+"versions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1499
+msgid ""
+"If all the computers in the realm do not have synchronized time settings, "
+"authentication may fail. crossref:network-servers[network-ntp,“Clock "
+"Synchronization with NTP”] describes how to synchronize clocks using NTP."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1500
+msgid ""
+"If the hostname is changed, the `host/` principal must be changed and the "
+"keytab updated. This also applies to special keytab entries like the `HTTP/` "
+"principal used for Apache's package:www/mod_auth_kerb[]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1501
+msgid ""
+"All hosts in the realm must be both forward and reverse resolvable in DNS "
+"or, at a minimum, exist in [.filename]#/etc/hosts#. CNAMEs will work, but "
+"the A and PTR records must be correct and in place. The error message for "
+"unresolvable hosts is not intuitive: `Kerberos5 refuses authentication "
+"because Read req failed: Key table entry not found`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1502
+msgid ""
+"Some operating systems that act as clients to the KDC do not set the "
+"permissions for `ksu` to be setuid `root`. This means that `ksu` does not "
+"work. This is a permissions problem, not a KDC error."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1503
+msgid ""
+"With MITKerberos, to allow a principal to have a ticket life longer than the "
+"default lifetime of ten hours, use `modify_principal` at the man:kadmin[8] "
+"prompt to change the `maxlife` of both the principal in question and the "
+"`krbtgt` principal. The principal can then use `kinit -l` to request a "
+"ticket with a longer lifetime."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1504
+msgid ""
+"When running a packet sniffer on the KDC to aid in troubleshooting while "
+"running `kinit` from a workstation, the Ticket Granting Ticket (TGT) is sent "
+"immediately, even before the password is typed. This is because the Kerberos "
+"server freely transmits a TGT to any unauthorized request. However, every "
+"TGT is encrypted in a key derived from the user's password. When a user "
+"types their password, it is not sent to the KDC, it is instead used to "
+"decrypt the TGT that `kinit` already obtained. If the decryption process "
+"results in a valid ticket with a valid time stamp, the user has valid "
+"Kerberos credentials. These credentials include a session key for "
+"establishing secure communications with the Kerberos server in the future, "
+"as well as the actual TGT, which is encrypted with the Kerberos server's own "
+"key. This second layer of encryption allows the Kerberos server to verify "
+"the authenticity of each TGT."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1505
+msgid ""
+"Host principals can have a longer ticket lifetime. If the user principal has "
+"a lifetime of a week but the host being connected to has a lifetime of nine "
+"hours, the user cache will have an expired host principal and the ticket "
+"cache will not work as expected."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1506
+msgid ""
+"When setting up [.filename]#krb5.dict# to prevent specific bad passwords "
+"from being used as described in man:kadmind[8], remember that it only "
+"applies to principals that have a password policy assigned to them. The "
+"format used in [.filename]#krb5.dict# is one string per line. Creating a "
+"symbolic link to [.filename]#/usr/share/dict/words# might be useful."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:1507
+#, no-wrap
+msgid "Mitigating Kerberos Limitations"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1512
+msgid ""
+"Since Kerberos is an all or nothing approach, every service enabled on the "
+"network must either be modified to work with Kerberos or be otherwise "
+"secured against network attacks. This is to prevent user credentials from "
+"being stolen and re-used. An example is when Kerberos is enabled on all "
+"remote shells but the non-Kerberized POP3 mail server sends passwords in "
+"plain text."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1517
+msgid ""
+"The KDC is a single point of failure. By design, the KDC must be as secure "
+"as its master password database. The KDC should have absolutely no other "
+"services running on it and should be physically secure. The danger is high "
+"because Kerberos stores all passwords encrypted with the same master key "
+"which is stored as a file on the KDC."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1521
+msgid ""
+"A compromised master key is not quite as bad as one might fear. The master "
+"key is only used to encrypt the Kerberos database and as a seed for the "
+"random number generator. As long as access to the KDC is secure, an "
+"attacker cannot do much with the master key."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1524
+msgid ""
+"If the KDC is unavailable, network services are unusable as authentication "
+"cannot be performed. This can be alleviated with a single master KDC and "
+"one or more slaves, and with careful implementation of secondary or fall-"
+"back authentication using PAM."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1529
+msgid ""
+"Kerberos allows users, hosts and services to authenticate between "
+"themselves. It does not have a mechanism to authenticate the KDC to the "
+"users, hosts, or services. This means that a trojaned `kinit` could record "
+"all user names and passwords. File system integrity checking tools like "
+"package:security/tripwire[] can alleviate this."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:1530
+#, no-wrap
+msgid "Resources and Further Information"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1533
+msgid ""
+"http://www.faqs.org/faqs/Kerberos-faq/general/preamble.html[The Kerberos FAQ]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1534
+msgid ""
+"http://web.mit.edu/Kerberos/www/dialogue.html[Designing an Authentication "
+"System: a Dialog in Four Scenes]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1535
+msgid ""
+"https://www.ietf.org/rfc/rfc4120.txt[RFC 4120, The Kerberos Network "
+"Authentication Service (V5)]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1536
+msgid "http://web.mit.edu/Kerberos/www/[MIT Kerberos home page]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1537
+msgid ""
+"https://github.com/heimdal/heimdal/wiki[Heimdal Kerberos project wiki page]"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/security/_index.adoc:1539
+#, no-wrap
+msgid "TCP Wrappers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1544
+msgid ""
+"TCP Wrappers is a host-based network access control system. By intercepting "
+"incoming network requests before they reach the actual network service, TCP "
+"Wrappers assess whether the source IP address is permitted or denied access "
+"based on predefined rules in configuration files."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1547
+msgid ""
+"However, while TCP Wrappers provide basic access control, they should not be "
+"considered a substitute for more robust security measures. For "
+"comprehensive protection, it's recommended to use advanced technologies like "
+"firewalls, along with proper user authentication practices and intrusion "
+"detection systems."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:1549
+#, no-wrap
+msgid "Initial Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1553
+msgid ""
+"TCP Wrappers are enabled by default in man:inetd[8]. So the first step will "
+"be to enable man:inetd[8] executing the following commands:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1558
+#, no-wrap
+msgid ""
+"# sysrc inetd_enable=\"YES\"\n"
+"# service inetd start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1561
+msgid "Then, properly configure [.filename]#/etc/hosts.allow#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1566
+msgid ""
+"Unlike other implementations of TCP Wrappers, the use of [.filename]#hosts."
+"deny# is deprecated in FreeBSD. All configuration options should be placed "
+"in [.filename]#/etc/hosts.allow#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1570
+msgid ""
+"In the simplest configuration, daemon connection policies are set to either "
+"permit or block, depending on the options in [.filename]#/etc/hosts.allow#. "
+"The default configuration in FreeBSD is to allow all connections to the "
+"daemons started with inetd."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1574
+msgid ""
+"Basic configuration usually takes the form of `daemon : address : action`, "
+"where `daemon` is the daemon which inetd started, `address` is a valid "
+"hostname, IP address, or an IPv6 address enclosed in brackets ([ ]), and "
+"`action` is either `allow` or `deny`. TCP Wrappers uses a first rule match "
+"semantic, meaning that the configuration file is scanned from the beginning "
+"for a matching rule. When a match is found, the rule is applied and the "
+"search process stops."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1576
+msgid ""
+"For example, to allow POP3 connections via the package:mail/qpopper[] "
+"daemon, the following lines should be appended to [.filename]#/etc/hosts."
+"allow#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1581
+#, no-wrap
+msgid ""
+"# This line is required for POP3 connections:\n"
+"qpopper : ALL : allow\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1584
+msgid "Whenever this file is edited, restart inetd:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1588
+#, no-wrap
+msgid "# service inetd restart\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:1591
+#, no-wrap
+msgid "Advanced Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1599
+msgid ""
+"TCP Wrappers provides advanced options to allow more control over the way "
+"connections are handled. In some cases, it may be appropriate to return a "
+"comment to certain hosts or daemon connections. In other cases, a log entry "
+"should be recorded or an email sent to the administrator. Other situations "
+"may require the use of a service for local connections only. This is all "
+"possible through the use of configuration options known as wildcards, "
+"expansion characters, and external command execution. To learn more about "
+"wildcards and their associated functionality, refer to man:hosts_access[5]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/security/_index.adoc:1601
+#, no-wrap
+msgid "Access Control Lists"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1606
+msgid ""
+"Access Control Lists (ACLs) extend traditional UNIX(R) file permissions by "
+"allowing fine-grained access control for users and groups on a per-file or "
+"per-directory basis. Each ACL entry defines a user or group and the "
+"associated permissions, such as read, write, and execute. FreeBSD provides "
+"commands like man:getfacl[1] and man:setfacl[1] to manage ACLs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1609
+msgid ""
+"ACLs are useful in scenarios requiring more specific access control than "
+"standard permissions, commonly used in multi-user environments or shared "
+"hosting. However, complexity may be unavoidable, but careful planning is "
+"required to ensure that the desired security properties are being provided"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1614
+msgid ""
+"FreeBSD supports the implementation of NFSv4 ACLs in both UFS and OpenZFS. "
+"Please note that some arguments to the man:setfacl[1] command only work with "
+"POSIX ACLs and others in NFSv4 ACLs."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:1617
+#, no-wrap
+msgid "Enabling ACL Support in UFS"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1620
+msgid ""
+"ACLs are enabled by the mount-time administrative flag, `acls`, which may be "
+"added to [.filename]#/etc/fstab#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1622
+msgid ""
+"Therefore it will be necessary to access [.filename]#/etc/fstab# and in the "
+"options section add the `acls` flag as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1627
+#, no-wrap
+msgid ""
+"# Device Mountpoint FStype Options Dump Pass#\n"
+"/dev/ada0s1a / ufs rw,acls 1 1\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:1630
+#, no-wrap
+msgid "Get ACLs information"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1633
+msgid ""
+"It is possible to check the ACLs of a file or a directory using man:"
+"getfacl[1]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1635
+msgid ""
+"For example, to view the ACL settings on [.filename]#~/test# file execute "
+"the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1639
+#, no-wrap
+msgid "% getfacl test\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1642
+msgid ""
+"The output should be similar to the following in case of using NFSv4 ACLs:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1651
+#, no-wrap
+msgid ""
+"# file: test\n"
+"# owner: freebsduser\n"
+"# group: freebsduser\n"
+" owner@:rw-p--aARWcCos:-------:allow\n"
+" group@:r-----a-R-c--s:-------:allow\n"
+" everyone@:r-----a-R-c--s:-------:allow\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1654
+msgid ""
+"And the output should be similar to the following in case of using POSIX.1e "
+"ACLs:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1663
+#, no-wrap
+msgid ""
+"# file: test\n"
+"# owner: freebsduser\n"
+"# group: freebsduser\n"
+"user::rw-\n"
+"group::r--\n"
+"other::r--\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:1666
+#, no-wrap
+msgid "Working with ACLs"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1669
+msgid ""
+"man:setfacl[1] can be used to add, modify or remove ACLs from a file or "
+"directory."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1672
+msgid ""
+"As noted above, some arguments to man:setfacl[1] do not work with NFSv4 "
+"ACLs, and vice versa. This section covers how to execute the commands for "
+"POSIX ACLs and for NFSv4 ACLs and shows examples of both."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1674
+msgid "For example, to set the mandatory elements of the POSIX.1e default ACL:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1678
+#, no-wrap
+msgid "% setfacl -d -m u::rwx,g::rx,o::rx,mask::rwx directory\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1681
+msgid ""
+"This other example sets read, write, and execute permissions for the file "
+"owner's POSIX.1e ACL entry and read and write permissions for group mail on "
+"file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1685
+#, no-wrap
+msgid "% setfacl -m u::rwx,g:mail:rw file\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1688
+msgid "To do the same as in the previous example but in NFSv4 ACL:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1692
+#, no-wrap
+msgid "% setfacl -m owner@:rwxp::allow,g:mail:rwp::allow file\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1695
+msgid ""
+"To remove all ACL entries except for the three required from file in "
+"POSIX.1e ACL:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1699
+#, no-wrap
+msgid "% setfacl -bn file\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1702
+msgid "To remove all ACL entries in NFSv4 ACL:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1706
+#, no-wrap
+msgid "% setfacl -b file\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1709
+msgid ""
+"Refer to man:getfacl[1] and man:setfacl[1] for more information about the "
+"options available for these commands."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/security/_index.adoc:1711
+#, no-wrap
+msgid "Capsicum"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1716
+msgid ""
+"Capsicum is a lightweight OS capability and sandbox framework implementing a "
+"hybrid capability system model. Capabilities are unforgeable tokens of "
+"authority that can be delegated and must be presented to perform an action. "
+"Capsicum makes file descriptors into capabilities."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1719
+msgid ""
+"Capsicum can be used for application and library compartmentalisation, the "
+"decomposition of larger bodies of software into isolated (sandboxed) "
+"components in order to implement security policies and limit the impact of "
+"software vulnerabilities."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/security/_index.adoc:1721
+#, no-wrap
+msgid "Process Accounting"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1724
+msgid ""
+"Process accounting is a security method in which an administrator may keep "
+"track of system resources used and their allocation among users, provide for "
+"system monitoring, and minimally track a user's commands."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1729
+msgid ""
+"Process accounting has both positive and negative points. One of the "
+"positives is that an intrusion may be narrowed down to the point of entry. "
+"A negative is the amount of logs generated by process accounting, and the "
+"disk space they may require. This section walks an administrator through "
+"the basics of process accounting."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1733
+msgid ""
+"If more fine-grained accounting is needed, refer to crossref:audit[audit,"
+"Security Event Auditing]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:1735
+#, no-wrap
+msgid "Enabling and Utilizing Process Accounting"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1738
+msgid ""
+"Before using process accounting, it must be enabled using the following "
+"commands:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1743
+#, no-wrap
+msgid ""
+"# sysrc accounting_enable=yes\n"
+"# service accounting start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1749
+msgid ""
+"The accounting information is stored in files located in [.filename]#/var/"
+"account#, which is automatically created, if necessary, the first time the "
+"accounting service starts. These files contain sensitive information, "
+"including all the commands issued by all users. Write access to the files "
+"is limited to `root`, and read access is limited to `root` and members of "
+"the `wheel` group. To also prevent members of `wheel` from reading the "
+"files, change the mode of the [.filename]#/var/account# directory to allow "
+"access only by `root`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1754
+msgid ""
+"Once enabled, accounting will begin to track information such as CPU "
+"statistics and executed commands. All accounting logs are in a non-human "
+"readable format which can be viewed using man:sa[8]. If issued without any "
+"options, man:sa[8] prints information relating to the number of per-user "
+"calls, the total elapsed time in minutes, total CPU and user time in "
+"minutes, and the average number of I/O operations. Refer to man:sa[8] for "
+"the list of available options which control the output."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1756
+msgid "To display the commands issued by users, use `lastcomm`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1758
+msgid ""
+"For example, this command prints out all usage of `ls` by `trhodes` on the "
+"`ttyp1` terminal:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1762
+#, no-wrap
+msgid "# lastcomm ls trhodes ttyp1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1765
+msgid ""
+"Many other useful options exist and are explained in man:lastcomm[1], man:"
+"acct[5], and man:sa[8]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/security/_index.adoc:1767
+#, no-wrap
+msgid "Resource Limits"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1772
+msgid ""
+"In FreeBSD, resource limits refer to the mechanisms that control and manage "
+"the allocation of various system resources to processes and users. These "
+"limits are designed to prevent a single process or user from consuming an "
+"excessive amount of resources, which could lead to performance degradation "
+"or system instability. Resource limits help ensure fair resource "
+"distribution among all active processes and users on the system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1774
+msgid ""
+"FreeBSD provides several methods for an administrator to limit the amount of "
+"system resources an individual may use."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1778
+msgid ""
+"The traditional method defines login classes by editing [.filename]#/etc/"
+"login.conf#. While this method is still supported, any changes require a "
+"multi-step process of editing this file, rebuilding the resource database, "
+"making necessary changes to [.filename]#/etc/master.passwd#, and rebuilding "
+"the password database. This can become time consuming, depending upon the "
+"number of users to configure."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1781
+msgid ""
+"man:rctl[8] can be used to provide a more fine-grained method for "
+"controlling resource limits. This command supports more than user limits as "
+"it can also be used to set resource constraints on processes and jails."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1783
+msgid ""
+"This section demonstrates both methods for controlling resources, beginning "
+"with the traditional method."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:1785
+#, no-wrap
+msgid "Types of Resources"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1788
+msgid "FreeBSD provides limits for various types of resources, including:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/security/_index.adoc:1789
+#, no-wrap
+msgid "Resource types"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/security/_index.adoc:1792
+#, no-wrap
+msgid "Type"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/security/_index.adoc:1794
+#, no-wrap
+msgid "Description"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/security/_index.adoc:1795
+#, no-wrap
+msgid "CPU Time"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/security/_index.adoc:1797
+#, no-wrap
+msgid "Limits the amount of CPU time a process can consume"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/security/_index.adoc:1798
+#, no-wrap
+msgid "Memory"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/security/_index.adoc:1800
+#, no-wrap
+msgid "Controls the amount of physical memory a process can use"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/security/_index.adoc:1801
+#, no-wrap
+msgid "Open Files"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/security/_index.adoc:1803
+#, no-wrap
+msgid "Limits the number of files a process can have open simultaneously"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/security/_index.adoc:1804
+#, no-wrap
+msgid "Processes"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/security/_index.adoc:1806
+#, no-wrap
+msgid "Controls the number of processes a user or a process can create"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/security/_index.adoc:1807
+#, no-wrap
+msgid "File Size"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/security/_index.adoc:1809
+#, no-wrap
+msgid "Limits the maximum size of files that a process can create"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/security/_index.adoc:1810
+#, no-wrap
+msgid "Core Dumps"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/security/_index.adoc:1812
+#, no-wrap
+msgid "Controls whether processes are allowed to generate core dump files"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/security/_index.adoc:1813
+#, no-wrap
+msgid "Network Resources"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/security/_index.adoc:1815
+#, no-wrap
+msgid "Limits the amount of network resources (e.g., sockets) a process can use"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1818
+msgid "For a full listing of types see man:login.conf[5] and man:rctl[8]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:1820
+#, no-wrap
+msgid "Configuring Login Classes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1826
+msgid ""
+"In the traditional method, login classes and the resource limits to apply to "
+"a login class are defined in [.filename]#/etc/login.conf#. Each user "
+"account can be assigned to a login class, where `default` is the default "
+"login class. Each login class has a set of login capabilities associated "
+"with it. A login capability is a `_name_=_value_` pair, where _name_ is a "
+"well-known identifier and _value_ is an arbitrary string which is processed "
+"accordingly depending on the _name_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1828
+msgid ""
+"The first step to configure a resource limit will be to open [.filename]#/"
+"etc/login.conf# by executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1832
+#, no-wrap
+msgid "# ee /etc/login.conf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1836
+msgid ""
+"Then locate the section for the user class to be modified. In this example, "
+"let's assume the user class is named `limited`, create it in case it not "
+"exists."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1842
+#, no-wrap
+msgid ""
+"limited:\\ <.>\n"
+" :maxproc=50:\\ <.>\n"
+" :tc=default: <.>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1845
+msgid "Name of the user class."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1846
+msgid ""
+"Sets the maximum number of processes (maxproc) to 50 for users in the "
+"`limited` class."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1847
+msgid ""
+"Indicates that this user class inherits the default settings from the "
+"\"default\" class."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1849
+msgid ""
+"After modifying the [.filename]#/etc/login.conf# file, run man:cap_mkdb[1] "
+"to generate the database that FreeBSD uses to apply these settings:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1856
+msgid ""
+"man:chpass[1] can be used to change the class to the desired user executint "
+"the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1860
+#, no-wrap
+msgid "# chpass username\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1863
+msgid ""
+"This will open a text editor, add the new `limited` class there as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1882
+#, no-wrap
+msgid ""
+"#Changing user information for username.\n"
+"Login: username\n"
+"Password: $6$2H.419USdGaiJeqK$6kgcTnDadasdasd3YnlNZsOni5AMymibkAfRCPirc7ZFjjv\n"
+"DVsKyXx26daabdfqSdasdsmL/ZMUpdHiO0\n"
+"Uid [#]: 1001\n"
+"Gid [# or name]: 1001\n"
+"Change [month day year]:\n"
+"Expire [month day year]:\n"
+"Class: limited\n"
+"Home directory: /home/username\n"
+"Shell: /bin/sh\n"
+"Full Name: User &\n"
+"Office Location:\n"
+"Office Phone:\n"
+"Home Phone:\n"
+"Other information:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1886
+msgid ""
+"Now, the user assigned to the `limited` class will have a maximum process "
+"limit of 50. Remember that this is just one example of setting a resource "
+"limit using the [.filename]#/etc/login.conf# file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1889
+msgid ""
+"Keep in mind that after making changes to the [.filename]#/etc/login.conf# "
+"file, the user needs to log out and log back in for the changes to take "
+"effect. Additionally, always exercise caution when editing system "
+"configuration files, especially when using privileged access."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:1891
+#, no-wrap
+msgid "Enabling and Configuring Resource Limits"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1895
+msgid ""
+"The man:rctl[8] system provides a more fine-grained way to set and manage "
+"resource limits for individual processes and users. It allows you to "
+"dynamically assign resource limits to specific processes or users, "
+"regardless of their user class."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1897
+msgid ""
+"The first step to use man:rctl[8] will be to enable it adding the following "
+"line to [.filename]#/boot/loader.conf# and reboot the system:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1901
+#, no-wrap
+msgid "kern.racct.enable=1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1904
+msgid ""
+"Then active the man:rctl[8] service and enable it executing by the following "
+"commands:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1909
+#, no-wrap
+msgid ""
+"# sysrc rctl_enable=\"YES\"\n"
+"# service rctl start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1912
+msgid "Then man:rctl[8] may be used to set rules for the system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1914
+msgid ""
+"Rule syntax (man:rctl.conf[5]) is controlled through the use of a subject, "
+"subject-id, resource, and action, as seen in this example rule:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1918
+#, no-wrap
+msgid "subject:subject-id:resource:action=amount/per\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1921
+msgid ""
+"For example to constrained the user to add no more than 10 processes execute "
+"the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1925
+#, no-wrap
+msgid "# rctl -a user:username:maxproc:deny=10/user\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1928
+msgid ""
+"To check the applied resource limits the man:rctl[8] command can be executed:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1932
+#, no-wrap
+msgid "# rctl\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1939
+#: documentation/content/en/books/handbook/security/_index.adoc:1947
+#, no-wrap
+msgid "user:username:maxproc:deny=10\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1943
+msgid ""
+"Rules will persist across reboots if they have been added to [.filename]#/"
+"etc/rctl.conf#. The format is a rule, without the preceding command. For "
+"example, the previous rule could be added as:"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/security/_index.adoc:1950
+#, no-wrap
+msgid "Monitoring Third Party Security Issues"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1954
+msgid ""
+"In recent years, the security world has made many improvements to how "
+"vulnerability assessment is handled. The threat of system intrusion "
+"increases as third party utilities are installed and configured for "
+"virtually any operating system available today."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1959
+msgid ""
+"Vulnerability assessment is a key factor in security. While FreeBSD "
+"releases advisories for the base system, doing so for every third party "
+"utility is beyond the FreeBSD Project's capability. There is a way to "
+"mitigate third party vulnerabilities and warn administrators of known "
+"security issues. A FreeBSD add on utility known as pkg includes options "
+"explicitly for this purpose."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1962
+msgid ""
+"pkg polls a database for security issues. The database is updated and "
+"maintained by the FreeBSD Security Team and ports developers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1964
+msgid ""
+"Installation provides man:periodic[8] configuration files for maintaining "
+"the pkg audit database, and provides a programmatic method of keeping it "
+"updated."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1966
+msgid ""
+"After installation, and to audit third party utilities as part of the Ports "
+"Collection at any time, an administrator may choose to update the database "
+"and view known vulnerabilities of installed packages by invoking:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1970
+#, no-wrap
+msgid "% pkg audit -F\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1985
+#, no-wrap
+msgid ""
+"vulnxml file up-to-date\n"
+"chromium-116.0.5845.96_1 is vulnerable:\n"
+" chromium -- multiple vulnerabilities\n"
+" CVE: CVE-2023-4431\n"
+" CVE: CVE-2023-4427\n"
+" CVE: CVE-2023-4428\n"
+" CVE: CVE-2023-4429\n"
+" CVE: CVE-2023-4430\n"
+" WWW: https://vuxml.FreeBSD.org/freebsd/5fa332b9-4269-11ee-8290-a8a1599412c6.html\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1994
+#, no-wrap
+msgid ""
+"samba413-4.13.17_5 is vulnerable:\n"
+" samba -- multiple vulnerabilities\n"
+" CVE: CVE-2023-3347\n"
+" CVE: CVE-2023-34966\n"
+" CVE: CVE-2023-34968\n"
+" CVE: CVE-2022-2127\n"
+" CVE: CVE-2023-34967\n"
+" WWW: https://vuxml.FreeBSD.org/freebsd/441e1e1a-27a5-11ee-a156-080027f5fec9.html\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:1996
+#, no-wrap
+msgid "2 problem(s) in 2 installed package(s) found.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:1999
+msgid ""
+"By pointing a web browser to the displayed URL, an administrator may obtain "
+"more information about the vulnerability."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:2001
+msgid ""
+"This will include the versions affected, by FreeBSD port version, along with "
+"other web sites which may contain security advisories."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/security/_index.adoc:2003
+#, no-wrap
+msgid "FreeBSD Security Advisories"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:2007
+msgid ""
+"Like many producers of quality operating systems, the FreeBSD Project has a "
+"security team which is responsible for determining the End-of-Life (EoL) "
+"date for each FreeBSD release and to provide security updates for supported "
+"releases which have not yet reached their EoL. More information about the "
+"FreeBSD security team and the supported releases is available on the link:"
+"https://www.FreeBSD.org/security[FreeBSD security page]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:2012
+msgid ""
+"One task of the security team is to respond to reported security "
+"vulnerabilities in the FreeBSD operating system. Once a vulnerability is "
+"confirmed, the security team verifies the steps necessary to fix the "
+"vulnerability and updates the source code with the fix. It then publishes "
+"the details as a \"Security Advisory\". Security advisories are published "
+"on the link:https://www.FreeBSD.org/security/advisories/[FreeBSD website] "
+"and mailed to the {freebsd-security-notifications}, {freebsd-security}, and "
+"{freebsd-announce}."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/security/_index.adoc:2013
+#, no-wrap
+msgid "Format of a Security Advisory"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:2016
+msgid "Here is an example of a FreeBSD security advisory:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2021
+#, no-wrap
+msgid ""
+"-----BEGIN PGP SIGNED MESSAGE-----\n"
+"Hash: SHA512\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2025
+#, no-wrap
+msgid ""
+"=============================================================================\n"
+"FreeBSD-SA-23:07.bhyve Security Advisory\n"
+" The FreeBSD Project\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2027
+#, no-wrap
+msgid "Topic: bhyve privileged guest escape via fwctl\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2037
+#, no-wrap
+msgid ""
+"Category: core\n"
+"Module: bhyve\n"
+"Announced: 2023-08-01\n"
+"Credits: Omri Ben Bassat and Vladimir Eli Tokarev from Microsoft\n"
+"Affects: FreeBSD 13.1 and 13.2\n"
+"Corrected: 2023-08-01 19:48:53 UTC (stable/13, 13.2-STABLE)\n"
+" 2023-08-01 19:50:47 UTC (releng/13.2, 13.2-RELEASE-p2)\n"
+" 2023-08-01 19:48:26 UTC (releng/13.1, 13.1-RELEASE-p9)\n"
+"CVE Name: CVE-2023-3494\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2041
+#, no-wrap
+msgid ""
+"For general information regarding FreeBSD Security Advisories,\n"
+"including descriptions of the fields above, security branches, and the\n"
+"following sections, please visit <URL:https://security.FreeBSD.org/>.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2043
+#, no-wrap
+msgid "I. Background\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2049
+#, no-wrap
+msgid ""
+"bhyve(8)'s fwctl interface provides a mechanism through which guest\n"
+"firmware can query the hypervisor for information about the virtual\n"
+"machine. The fwctl interface is available to guests when bhyve is run\n"
+"with the \"-l bootrom\" option, used for example when booting guests in\n"
+"UEFI mode.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2051
+#, no-wrap
+msgid "bhyve is currently only supported on the amd64 platform.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2053
+#, no-wrap
+msgid "II. Problem Description\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2059
+#, no-wrap
+msgid ""
+"The fwctl driver implements a state machine which is executed when the\n"
+"guest accesses certain x86 I/O ports. The interface lets the guest copy\n"
+"a string into a buffer resident in the bhyve process' memory. A bug in\n"
+"the state machine implementation can result in a buffer overflowing when\n"
+"copying this string.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2061
+#, no-wrap
+msgid "III. Impact\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2067
+#, no-wrap
+msgid ""
+"A malicious, privileged software running in a guest VM can exploit the\n"
+"buffer overflow to achieve code execution on the host in the bhyve\n"
+"userspace process, which typically runs as root. Note that bhyve runs\n"
+"in a Capsicum sandbox, so malicious code is constrained by the\n"
+"capabilities available to the bhyve process.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2069
+#, no-wrap
+msgid "IV. Workaround\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2072
+#, no-wrap
+msgid ""
+"No workaround is available. bhyve guests that are executed without the\n"
+"\"-l bootrom\" option are unaffected.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2074
+#, no-wrap
+msgid "V. Solution\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2077
+#, no-wrap
+msgid ""
+"Upgrade your vulnerable system to a supported FreeBSD stable or\n"
+"release / security branch (releng) dated after the correction date.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2079
+#, no-wrap
+msgid "Perform one of the following:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2081
+#, no-wrap
+msgid "1) To update your vulnerable system via a binary patch:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2085
+#, no-wrap
+msgid ""
+"Systems running a RELEASE version of FreeBSD on the amd64, i386, or\n"
+"(on FreeBSD 13 and later) arm64 platforms can be updated via the\n"
+"freebsd-update(8) utility:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2088
+#, no-wrap
+msgid ""
+"# freebsd-update fetch\n"
+"# freebsd-update install\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2090
+#: documentation/content/en/books/handbook/security/_index.adoc:2118
+#, no-wrap
+msgid "Restart all affected virtual machines.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2092
+#, no-wrap
+msgid "2) To update your vulnerable system via a source code patch:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2095
+#, no-wrap
+msgid ""
+"The following patches have been verified to apply to the applicable\n"
+"FreeBSD release branches.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2098
+#, no-wrap
+msgid ""
+"a) Download the relevant patch from the location below, and verify the\n"
+"detached PGP signature using your PGP utility.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2103
+#, no-wrap
+msgid ""
+"[FreeBSD 13.2]\n"
+"# fetch https://security.FreeBSD.org/patches/SA-23:07/bhyve.13.2.patch\n"
+"# fetch https://security.FreeBSD.org/patches/SA-23:07/bhyve.13.2.patch.asc\n"
+"# gpg --verify bhyve.13.2.patch.asc\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2108
+#, no-wrap
+msgid ""
+"[FreeBSD 13.1]\n"
+"# fetch https://security.FreeBSD.org/patches/SA-23:07/bhyve.13.1.patch\n"
+"# fetch https://security.FreeBSD.org/patches/SA-23:07/bhyve.13.1.patch.asc\n"
+"# gpg --verify bhyve.13.1.patch.asc\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2110
+#, no-wrap
+msgid "b) Apply the patch. Execute the following commands as root:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2113
+#, no-wrap
+msgid ""
+"# cd /usr/src\n"
+"# patch < /path/to/patch\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2116
+#, no-wrap
+msgid ""
+"c) Recompile the operating system using buildworld and installworld as\n"
+"described in <URL:https://www.FreeBSD.org/handbook/makeworld.html>.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2120
+#, no-wrap
+msgid "VI. Correction details\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2123
+#, no-wrap
+msgid ""
+"This issue is corrected by the corresponding Git commit hash or Subversion\n"
+"revision number in the following stable and release branches:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2130
+#, no-wrap
+msgid ""
+"Branch/path Hash Revision\n"
+"- -------------------------------------------------------------------------\n"
+"stable/13/ 9fe302d78109 stable/13-n255918\n"
+"releng/13.2/ 2bae613e0da3 releng/13.2-n254625\n"
+"releng/13.1/ 87702e38a4b4 releng/13.1-n250190\n"
+"- -------------------------------------------------------------------------\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2133
+#, no-wrap
+msgid ""
+"Run the following command to see which files were modified by a\n"
+"particular commit:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2135
+#, no-wrap
+msgid "# git show --stat <commit hash>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2137
+#, no-wrap
+msgid "Or visit the following URL, replacing NNNNNN with the hash:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2139
+#, no-wrap
+msgid "<URL:https://cgit.freebsd.org/src/commit/?id=NNNNNN>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2142
+#, no-wrap
+msgid ""
+"To determine the commit count in a working tree (for comparison against\n"
+"nNNNNNN in the table above), run:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2144
+#, no-wrap
+msgid "# git rev-list --count --first-parent HEAD\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2146
+#, no-wrap
+msgid "VII. References\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2148
+#, no-wrap
+msgid "<URL:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-3494>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2152
+#, no-wrap
+msgid ""
+"The latest revision of this advisory is available at\n"
+"<URL:https://security.FreeBSD.org/advisories/FreeBSD-SA-23:07.bhyve.asc>\n"
+"-----BEGIN PGP SIGNATURE-----\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/security/_index.adoc:2167
+#, no-wrap
+msgid ""
+"iQIzBAEBCgAdFiEEthUnfoEIffdcgYM7bljekB8AGu8FAmTJdsIACgkQbljekB8A\n"
+"Gu8Q1Q/7BFw5Aa0cFxBzbdz+O5NAImj58MvKS6xw61bXcYr12jchyT6ENC7yiR+K\n"
+"qCqbe5TssRbtZ1gg/94gSGEXccz5OcJGxW+qozhcdPUh2L2nzBPkMCrclrYJfTtM\n"
+"cnmQKjg/wFZLUVr71GEM95ZFaktlZdXyXx9Z8eBzow5rXexpl1TTHQQ2kZZ41K4K\n"
+"KFhup91dzGCIj02cqbl+1h5BrXJe3s/oNJt5JKIh/GBh5THQu9n6AywQYl18HtjV\n"
+"fMb1qRTAS9WbiEP5QV2eEuOG86ucuhytqnEN5MnXJ2rLSjfb9izs9HzLo3ggy7yb\n"
+"hN3tlbfIPjMEwYexieuoyP3rzKkLeYfLXqJU4zKCRnIbBIkMRy4mcFkfcYmI+MhF\n"
+"NPh2R9kccemppKXeDhKJurH0vsetr8ti+AwOZ3pgO21+9w+mjE+EfaedIi+JWhip\n"
+"hwqeFv03bAQHJdacNYGV47NsJ91CY4ZgWC3ZOzBZ2Y5SDtKFjyc0bf83WTfU9A/0\n"
+"drC0z3xaJribah9e6k5d7lmZ7L6aHCbQ70+aayuAEZQLr/N1doB0smNi0IHdrtY0\n"
+"JdIqmVX+d1ihVhJ05prC460AS/Kolqiaysun1igxR+ZnctE9Xdo1BlLEbYu2KjT4\n"
+"LpWvSuhRMSQaYkJU72SodQc0FM5mqqNN42Vx+X4EutOfvQuRGlI=\n"
+"=MlAY\n"
+"-----END PGP SIGNATURE-----\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:2170
+msgid "Every security advisory uses the following format:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:2172
+msgid ""
+"Each security advisory is signed by the PGP key of the Security Officer. The "
+"public key for the Security Officer can be verified at crossref:"
+"pgpkeys[pgpkeys,OpenPGP Keys]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:2173
+msgid ""
+"The name of the security advisory always begins with `FreeBSD-SA-` (for "
+"FreeBSD Security Advisory), followed by the year in two digit format (`23:"
+"`), followed by the advisory number for that year (`07.`), followed by the "
+"name of the affected application or subsystem (`bhyve`)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:2174
+msgid "The `Topic` field summarizes the vulnerability."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:2175
+msgid ""
+"The `Category` refers to the affected part of the system which may be one of "
+"`core`, `contrib`, or `ports`. The `core` category means that the "
+"vulnerability affects a core component of the FreeBSD operating system. The "
+"`contrib` category means that the vulnerability affects software included "
+"with FreeBSD, such as BIND. The `ports` category indicates that the "
+"vulnerability affects software available through the Ports Collection."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:2176
+msgid ""
+"The `Module` field refers to the component location. In this example, the "
+"`bhyve` module is affected; therefore, this vulnerability affects an "
+"application installed with the operating system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:2177
+msgid ""
+"The `Announced` field reflects the date the security advisory was published. "
+"This means that the security team has verified that the problem exists and "
+"that a patch has been committed to the FreeBSD source code repository."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:2178
+msgid ""
+"The `Credits` field gives credit to the individual or organization who "
+"noticed the vulnerability and reported it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:2179
+msgid ""
+"The `Affects` field explains which releases of FreeBSD are affected by this "
+"vulnerability."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:2180
+msgid ""
+"The `Corrected` field indicates the date, time, time offset, and releases "
+"that were corrected. The section in parentheses shows each branch for which "
+"the fix has been merged, and the version number of the corresponding release "
+"from that branch. The release identifier itself includes the version number "
+"and, if appropriate, the patch level. The patch level is the letter `p` "
+"followed by a number, indicating the sequence number of the patch, allowing "
+"users to track which patches have already been applied to the system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:2181
+msgid ""
+"The `CVE Name` field lists the advisory number, if one exists, in the public "
+"http://cve.mitre.org[cve.mitre.org] security vulnerabilities database."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:2182
+msgid "The `Background` field provides a description of the affected module."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:2183
+msgid ""
+"The `Problem Description` field explains the vulnerability. This can include "
+"information about the flawed code and how the utility could be maliciously "
+"used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:2184
+msgid ""
+"The `Impact` field describes what type of impact the problem could have on a "
+"system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:2185
+msgid ""
+"The `Workaround` field indicates if a workaround is available to system "
+"administrators who cannot immediately patch the system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:2186
+msgid ""
+"The `Solution` field provides the instructions for patching the affected "
+"system. This is a step by step tested and verified method for getting a "
+"system patched and working securely."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:2187
+msgid ""
+"The `Correction Details` field displays each affected Subversion or Git "
+"branch with the revision number that contains the corrected code."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/security/_index.adoc:2187
+msgid ""
+"The `References` field offers sources of additional information regarding "
+"the vulnerability."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/serialcomms/_index.adoc b/documentation/content/en/books/handbook/serialcomms/_index.adoc
index 8c62ad814c..a5004d9821 100644
--- a/documentation/content/en/books/handbook/serialcomms/_index.adoc
+++ b/documentation/content/en/books/handbook/serialcomms/_index.adoc
@@ -1,13 +1,13 @@
---
-title: Chapter 27. Serial Communications
+title: Chapter 29. Serial Communications
part: Part IV. Network Communication
prev: books/handbook/partiv
next: books/handbook/ppp-and-slip
description: This chapter covers some of the ways serial communications can be used on FreeBSD
tags: ["serial", "communications", "terminal", "modem", "console"]
showBookMenu: true
-weight: 32
-path: "/books/handbook/"
+weight: 34
+path: "/books/handbook/serialcomms/"
---
[[serialcomms]]
@@ -18,7 +18,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 27
+:sectnumoffset: 29
:partnums:
:source-highlighter: rouge
:experimental:
@@ -153,7 +153,7 @@ When in doubt, refer to the documentation for the hardware.
|===
<| Signal
<| Pin #
-|
+|
<| Pin #
<| Signal
@@ -218,7 +218,7 @@ When in doubt, refer to the documentation for the hardware.
|===
<| Signal
<| Pin #
-|
+|
<| Pin #
<| Signal
@@ -283,7 +283,7 @@ When in doubt, refer to the documentation for the hardware.
|===
<| Signal
<| Pin #
-|
+|
<| Pin #
<| Signal
@@ -365,7 +365,7 @@ There are two different kinds of entries:
FreeBSD also provides initialization devices ([.filename]#/dev/ttyuN.init# and [.filename]#/dev/cuauN.init# or [.filename]#/dev/cuadN.init#) and locking devices ([.filename]#/dev/ttyuN.lock# and [.filename]#/dev/cuauN.lock# or [.filename]#/dev/cuadN.lock#).
The initialization devices are used to initialize communications port parameters each time a port is opened, such as `crtscts` for modems which use `RTS/CTS` signaling for flow control.
The locking devices are used to lock flags on ports to prevent users or programs changing certain parameters.
-Refer to man:termios[4], man:sio[4], and man:stty[1] for information on terminal settings, locking and initializing devices, and setting terminal options, respectively.
+Refer to man:termios[4], man:uart[4], and man:stty[1] for information on terminal settings, locking and initializing devices, and setting terminal options, respectively.
[[serial-hw-config]]
=== Serial Port Configuration
@@ -490,10 +490,10 @@ The default [.filename]#/etc/ttys# configures support for the first four serial
[.programlisting]
....
-ttyu0 "/usr/libexec/getty std.9600" dialup off secure
-ttyu1 "/usr/libexec/getty std.9600" dialup off secure
-ttyu2 "/usr/libexec/getty std.9600" dialup off secure
-ttyu3 "/usr/libexec/getty std.9600" dialup off secure
+ttyu0 "/usr/libexec/getty std.115200" dialup off secure
+ttyu1 "/usr/libexec/getty std.115200" dialup off secure
+ttyu2 "/usr/libexec/getty std.115200" dialup off secure
+ttyu3 "/usr/libexec/getty std.115200" dialup off secure
....
When attaching a terminal to one of those ports, modify the default entry to set the required speed and terminal type, to turn the device `on` and, if needed, to change the port's `secure` setting.
@@ -511,7 +511,7 @@ The computer is connected to the sixth serial port on a multi-port serial card.
[.programlisting]
....
-ttyu1 "/usr/libexec/getty std.38400" wy50 on insecure
+ttyu1 "/usr/libexec/getty std.38400" wy50 on insecure
ttyu5 "/usr/libexec/getty std.19200" vt100 on insecure
....
@@ -687,7 +687,7 @@ vq|VH57600|Very High Speed Modem at 57600,8-bit:\
:nx=VH9600:tc=std.57600:
....
-For a slow CPU or a heavily loaded system without 16550A-based serial ports, this configuration may produce `sio` "silo" errors at 57.6 Kbps.
+For a slow CPU or a heavily loaded system without 16550A-based serial ports, this configuration may produce `uart` "silo" errors at 57.6 Kbps.
The configuration of [.filename]#/etc/ttys# is similar to <<ex-etc-ttys>>, but a different argument is passed to `getty` and `dialup` is used for the terminal type.
Replace _xxx_ with the process `init` will run on the device:
@@ -1037,14 +1037,14 @@ PS/2(R) mice share some hardware with the keyboard and leaving the mouse plugged
[NOTE]
====
While most systems will boot without a keyboard, quite a few will not boot without a graphics adapter.
-Some systems can be configured to boot with no graphics adapter by changing the "graphics adapter" setting in the BIOS configuration to "Not installed".
+Some systems can be configured to boot with no graphics adapter by changing the "graphics adapter" setting in the BIOS configuration to "Not installed".
Other systems do not support this option and will refuse to boot if there is no display hardware in the system.
With these machines, leave some kind of graphics card plugged in, even if it is just a junky mono board.
A monitor does not need to be attached.
====
. Plug a dumb terminal, an old computer with a modem program, or the serial port on another UNIX(R) box into the serial port.
-. Add the appropriate `hint.sio.*` entries to [.filename]#/boot/device.hints# for the serial port. Some multi-port cards also require kernel configuration options. Refer to man:sio[4] for the required options and device hints for each supported serial port.
+. Add the appropriate `hint.uart.*` entries to [.filename]#/boot/device.hints# for the serial port. Some multi-port cards also require kernel configuration options. Refer to man:uart[4] for the required options and device hints for each supported serial port.
. Create [.filename]#boot.config# in the root directory of the `a` partition on the boot drive.
+
This file instructs the boot block code how to boot the system.
@@ -1054,13 +1054,13 @@ When using multiple options, include them all on the same line:
`-h`:::
Toggles between the internal and serial consoles.
Use this to switch console devices.
-For instance, to boot from the internal (video) console, use `-h` to direct the boot loader and the kernel to use the serial port as its console device.
+For instance, to boot from the internal (video) console, use `-h` to direct the boot loader and the kernel to use the serial port as its console device.
Alternatively, to boot from the serial port, use `-h` to tell the boot loader and the kernel to use the video display as the console instead.
`-D`:::
Toggles between the single and dual console configurations.
In the single configuration, the console will be either the internal console (video display) or the serial port, depending on the state of `-h`.
-In the dual console configuration, both the video display and the serial port will become the console at the same time, regardless of the state of `-h`.
+In the dual console configuration, both the video display and the serial port will become the console at the same time, regardless of the state of `-h`.
However, the dual console configuration takes effect only while the boot block is running.
Once the boot loader gets control, the console specified by `-h` becomes the only console.
@@ -1163,12 +1163,12 @@ At the moment, the boot loader has no option equivalent to `-P` in the boot bloc
====
While it is not required, it is possible to provide a `login` prompt over the serial line.
To configure this, edit the entry for the serial port in [.filename]#/etc/ttys# using the instructions in <<term-config>>.
-If the speed of the serial port has been changed, change `std.9600` to match the new setting.
+If the speed of the serial port has been changed, change `std.115200` to match the new setting.
====
=== Setting a Faster Serial Port Speed
-By default, the serial port settings are 9600 baud, 8 bits, no parity, and 1 stop bit.
+By default, the serial port settings are 115200 baud, 8 bits, no parity, and 1 stop bit.
To change the default console speed, use one of the following options:
* Edit [.filename]#/etc/make.conf# and set `BOOT_COMCONSOLE_SPEED` to the new console speed.
diff --git a/documentation/content/en/books/handbook/serialcomms/_index.po b/documentation/content/en/books/handbook/serialcomms/_index.po
new file mode 100644
index 0000000000..ee4926cc2f
--- /dev/null
+++ b/documentation/content/en/books/handbook/serialcomms/_index.po
@@ -0,0 +1,2486 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1
+#, no-wrap
+msgid "This chapter covers some of the ways serial communications can be used on FreeBSD"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1
+#, no-wrap
+msgid "Part IV. Network Communication"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1
+#, no-wrap
+msgid "Chapter 29. Serial Communications"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:14
+#, no-wrap
+msgid "Serial Communications"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:57
+msgid ""
+"UNIX(R) has always had support for serial communications as the very first "
+"UNIX(R) machines relied on serial lines for user input and output. Things "
+"have changed a lot from the days when the average terminal consisted of a 10-"
+"character-per-second serial printer and a keyboard. This chapter covers "
+"some of the ways serial communications can be used on FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:59
+msgid "After reading this chapter, you will know:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:61
+msgid "How to connect terminals to a FreeBSD system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:62
+msgid "How to use a modem to dial out to remote hosts."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:63
+msgid "How to allow remote users to login to a FreeBSD system with a modem."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:64
+msgid "How to boot a FreeBSD system from a serial console."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:66
+msgid "Before reading this chapter, you should:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:68
+msgid ""
+"Know how to crossref:kernelconfig[kernelconfig, configure and install a "
+"custom kernel]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:69
+msgid "Understand crossref:basics[basics, FreeBSD permissions and processes]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:70
+msgid ""
+"Have access to the technical manual for the serial hardware to be used with "
+"FreeBSD."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:72
+#, no-wrap
+msgid "Serial Terminology and Hardware"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:75
+msgid "The following terms are often used in serial communications:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:76
+#, no-wrap
+msgid "bps"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:78
+msgid "Bits per Second (bps) is the rate at which data is transmitted."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:79
+#, no-wrap
+msgid "DTE"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:82
+msgid ""
+"Data Terminal Equipment (DTE) is one of two endpoints in a serial "
+"communication. An example would be a computer."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:83
+#, no-wrap
+msgid "DCE"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:86
+msgid ""
+"Data Communications Equipment (DCE) is the other endpoint in a serial "
+"communication. Typically, it is a modem or serial terminal."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:87
+#, no-wrap
+msgid "RS-232"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:90
+msgid ""
+"The original standard which defined hardware serial communications. It has "
+"since been renamed to TIA-232."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:93
+msgid ""
+"When referring to communication data rates, this section does not use the "
+"term _baud_. Baud refers to the number of electrical state transitions made "
+"in a period of time, while bps is the correct term to use."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:96
+msgid ""
+"To connect a serial terminal to a FreeBSD system, a serial port on the "
+"computer and the proper cable to connect to the serial device are needed. "
+"Users who are already familiar with serial hardware and cabling can safely "
+"skip this section."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:98
+#, no-wrap
+msgid "Serial Cables and Ports"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:103
+msgid ""
+"There are several different kinds of serial cables. The two most common "
+"types are null-modem cables and standard RS-232 cables. The documentation "
+"for the hardware should describe the type of cable required."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:109
+msgid ""
+"These two types of cables differ in how the wires are connected to the "
+"connector. Each wire represents a signal, with the defined signals "
+"summarized in <<serialcomms-signal-names>>. A standard serial cable passes "
+"all of the RS-232C signals straight through. For example, the \"Transmitted "
+"Data\" pin on one end of the cable goes to the \"Transmitted Data\" pin on "
+"the other end. This is the type of cable used to connect a modem to the "
+"FreeBSD system, and is also appropriate for some terminals."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:112
+msgid ""
+"A null-modem cable switches the \"Transmitted Data\" pin of the connector on "
+"one end with the \"Received Data\" pin on the other end. The connector can "
+"be either a DB-25 or a DB-9."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:117
+msgid ""
+"A null-modem cable can be constructed using the pin connections summarized "
+"in <<nullmodem-db25>>, <<nullmodem-db9>>, and <<nullmodem-db9-25>>. While "
+"the standard calls for a straight-through pin 1 to pin 1 \"Protective "
+"Ground\" line, it is often omitted. Some terminals work using only pins 2, "
+"3, and 7, while others require different configurations. When in doubt, "
+"refer to the documentation for the hardware."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:119
+#, no-wrap
+msgid "RS-232C Signal Names"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:123
+#, no-wrap
+msgid "Acronyms"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:125
+#, no-wrap
+msgid "Names"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:126
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:172
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:173
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:226
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:237
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:291
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:302
+#, no-wrap
+msgid "RD"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:128
+#, no-wrap
+msgid "Received Data"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:129
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:167
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:178
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:231
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:232
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:296
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:297
+#, no-wrap
+msgid "TD"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:131
+#, no-wrap
+msgid "Transmitted Data"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:132
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:191
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:197
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:208
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:213
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:238
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:244
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:261
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:267
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:303
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:309
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:326
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:332
+#, no-wrap
+msgid "DTR"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:134
+#, no-wrap
+msgid "Data Terminal Ready"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:135
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:196
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:203
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:243
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:256
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:308
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:321
+#, no-wrap
+msgid "DSR"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:137
+#, no-wrap
+msgid "Data Set Ready"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:138
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:202
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:209
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:249
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:262
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:314
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:327
+#, no-wrap
+msgid "DCD"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:140
+#, no-wrap
+msgid "Data Carrier Detect"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:141
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:161
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:166
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:250
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:255
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:315
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:320
+#, no-wrap
+msgid "SG"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:143
+#, no-wrap
+msgid "Signal Ground"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:144
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:179
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:190
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:268
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:278
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:333
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:343
+#, no-wrap
+msgid "RTS"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:146
+#, no-wrap
+msgid "Request to Send"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:147
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:184
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:185
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:273
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:274
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:338
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:339
+#, no-wrap
+msgid "CTS"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:148
+#, no-wrap
+msgid "Clear to Send"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:151
+#, no-wrap
+msgid "DB-25 to DB-25 Null-Modem Cable"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:155
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:160
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:220
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:225
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:285
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:290
+#, no-wrap
+msgid "Signal"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:156
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:158
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:221
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:223
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:286
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:288
+#, no-wrap
+msgid "Pin #"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:162
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:164
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:269
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:277
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:318
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:334
+#, no-wrap
+msgid "7"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:163
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:169
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:175
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:181
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:187
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:193
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:199
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:205
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:211
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:228
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:234
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:240
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:246
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:252
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:258
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:264
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:270
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:276
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:293
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:299
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:305
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:311
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:317
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:323
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:329
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:335
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:341
+#, no-wrap
+msgid "connects to"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:168
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:176
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:227
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:235
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:292
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:294
+#, no-wrap
+msgid "2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:170
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:174
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:229
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:233
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:298
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:300
+#, no-wrap
+msgid "3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:180
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:188
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:239
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:245
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:259
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:265
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:304
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:310
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:342
+#, no-wrap
+msgid "4"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:182
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:186
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:251
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:253
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:316
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:336
+#, no-wrap
+msgid "5"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:192
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:198
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:206
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:212
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:324
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:330
+#, no-wrap
+msgid "20"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:194
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:204
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:241
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:257
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:306
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:322
+#, no-wrap
+msgid "6"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:200
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:210
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:271
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:275
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:312
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:340
+#, no-wrap
+msgid "8"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:216
+#, no-wrap
+msgid "DB-9 to DB-9 Null-Modem Cable"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:247
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:263
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:328
+#, no-wrap
+msgid "1"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:281
+#, no-wrap
+msgid "DB-9 to DB-25 Null-Modem Cable"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:348
+msgid ""
+"When one pin at one end connects to a pair of pins at the other end, it is "
+"usually implemented with one short wire between the pair of pins in their "
+"connector and a long wire to the other single pin."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:353
+msgid ""
+"Serial ports are the devices through which data is transferred between the "
+"FreeBSD host computer and the terminal. Several kinds of serial ports "
+"exist. Before purchasing or constructing a cable, make sure it will fit the "
+"ports on the terminal and on the FreeBSD system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:358
+msgid ""
+"Most terminals have DB-25 ports. Personal computers may have DB-25 or DB-9 "
+"ports. A multiport serial card may have RJ-12 or RJ-45/ ports. See the "
+"documentation that accompanied the hardware for specifications on the kind "
+"of port or visually verify the type of port."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:361
+msgid ""
+"In FreeBSD, each serial port is accessed through an entry in [.filename]#/"
+"dev#. There are two different kinds of entries:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:363
+msgid ""
+"Call-in ports are named [.filename]#/dev/ttyuN# where _N_ is the port "
+"number, starting from zero. If a terminal is connected to the first serial "
+"port ([.filename]#COM1#), use [.filename]#/dev/ttyu0# to refer to the "
+"terminal. If the terminal is on the second serial port ([.filename]#COM2#), "
+"use [.filename]#/dev/ttyu1#, and so forth. Generally, the call-in port is "
+"used for terminals. Call-in ports require that the serial line assert the "
+"\"Data Carrier Detect\" signal to work correctly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:364
+msgid ""
+"Call-out ports are named [.filename]#/dev/cuauN# on FreeBSD versions 8.X and "
+"higher and [.filename]#/dev/cuadN# on FreeBSD versions 7.X and lower. Call-"
+"out ports are usually not used for terminals, but are used for modems. The "
+"call-out port can be used if the serial cable or the terminal does not "
+"support the \"Data Carrier Detect\" signal."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:369
+msgid ""
+"FreeBSD also provides initialization devices ([.filename]#/dev/ttyuN.init# "
+"and [.filename]#/dev/cuauN.init# or [.filename]#/dev/cuadN.init#) and "
+"locking devices ([.filename]#/dev/ttyuN.lock# and [.filename]#/dev/cuauN."
+"lock# or [.filename]#/dev/cuadN.lock#). The initialization devices are used "
+"to initialize communications port parameters each time a port is opened, "
+"such as `crtscts` for modems which use `RTS/CTS` signaling for flow "
+"control. The locking devices are used to lock flags on ports to prevent "
+"users or programs changing certain parameters. Refer to man:termios[4], man:"
+"uart[4], and man:stty[1] for information on terminal settings, locking and "
+"initializing devices, and setting terminal options, respectively."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:371
+#, no-wrap
+msgid "Serial Port Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:376
+msgid ""
+"By default, FreeBSD supports four serial ports which are commonly known as [."
+"filename]#COM1#, [.filename]#COM2#, [.filename]#COM3#, and [."
+"filename]#COM4#. FreeBSD also supports dumb multi-port serial interface "
+"cards, such as the BocaBoard 1008 and 2016, as well as more intelligent "
+"multi-port cards such as those made by Digiboard. However, the default "
+"kernel only looks for the standard [.filename]#COM# ports."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:378
+msgid ""
+"To see if the system recognizes the serial ports, look for system boot "
+"messages that start with `uart`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:382
+#, no-wrap
+msgid "# grep uart /var/run/dmesg.boot\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:388
+msgid ""
+"If the system does not recognize all of the needed serial ports, additional "
+"entries can be added to [.filename]#/boot/device.hints#. This file already "
+"contains `hint.uart.0.\\*` entries for [.filename]#COM1# and `hint.uart.1.*` "
+"entries for [.filename]#COM2#. When adding a port entry for [."
+"filename]#COM3# use `0x3E8`, and for [.filename]#COM4# use `0x2E8`. Common "
+"IRQ addresses are `5` for [.filename]#COM3# and `9` for [.filename]#COM4#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:391
+msgid ""
+"To determine the default set of terminal I/O settings used by the port, "
+"specify its device name. This example determines the settings for the call-"
+"in port on [.filename]#COM2#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:395
+#, no-wrap
+msgid "# stty -a -f /dev/ttyu1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:403
+msgid ""
+"System-wide initialization of serial devices is controlled by [.filename]#/"
+"etc/rc.d/serial#. This file affects the default settings of serial "
+"devices. To change the settings for a device, use `stty`. By default, the "
+"changed settings are in effect until the device is closed and when the "
+"device is reopened, it goes back to the default set. To permanently change "
+"the default set, open and adjust the settings of the initialization device. "
+"For example, to turn on `CLOCAL` mode, 8 bit communication, and `XON/XOFF` "
+"flow control for [.filename]#ttyu5#, type:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:407
+#, no-wrap
+msgid "# stty -f /dev/ttyu5.init clocal cs8 ixon ixoff\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:411
+msgid ""
+"To prevent certain settings from being changed by an application, make "
+"adjustments to the locking device. For example, to lock the speed of [."
+"filename]#ttyu5# to 57600 bps, type:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:415
+#, no-wrap
+msgid "# stty -f /dev/ttyu5.lock 57600\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:418
+msgid ""
+"Now, any application that opens [.filename]#ttyu5# and tries to change the "
+"speed of the port will be stuck with 57600 bps."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:420
+#, no-wrap
+msgid "Terminals"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:424
+msgid ""
+"Terminals provide a convenient and low-cost way to access a FreeBSD system "
+"when not at the computer's console or on a connected network. This section "
+"describes how to use terminals with FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:427
+msgid ""
+"The original UNIX(R) systems did not have consoles. Instead, users logged "
+"in and ran programs through terminals that were connected to the computer's "
+"serial ports."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:430
+msgid ""
+"The ability to establish a login session on a serial port still exists in "
+"nearly every UNIX(R)-like operating system today, including FreeBSD. By "
+"using a terminal attached to an unused serial port, a user can log in and "
+"run any text program that can normally be run on the console or in an "
+"`xterm` window."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:434
+msgid ""
+"Many terminals can be attached to a FreeBSD system. An older spare computer "
+"can be used as a terminal wired into a more powerful computer running "
+"FreeBSD. This can turn what might otherwise be a single-user computer into "
+"a powerful multiple-user system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:436
+msgid "FreeBSD supports three types of terminals:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:437
+#, no-wrap
+msgid "Dumb terminals"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:441
+msgid ""
+"Dumb terminals are specialized hardware that connect to computers over "
+"serial lines. They are called \"dumb\" because they have only enough "
+"computational power to display, send, and receive text. No programs can be "
+"run on these devices. Instead, dumb terminals connect to a computer that "
+"runs the needed programs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:444
+msgid ""
+"There are hundreds of kinds of dumb terminals made by many manufacturers, "
+"and just about any kind will work with FreeBSD. Some high-end terminals can "
+"even display graphics, but only certain software packages can take advantage "
+"of these advanced features."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:446
+msgid ""
+"Dumb terminals are popular in work environments where workers do not need "
+"access to graphical applications."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:447
+#, no-wrap
+msgid "Computers Acting as Terminals"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:450
+msgid ""
+"Since a dumb terminal has just enough ability to display, send, and receive "
+"text, any spare computer can be a dumb terminal. All that is needed is the "
+"proper cable and some _terminal emulation_ software to run on the computer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:453
+msgid ""
+"This configuration can be useful. For example, if one user is busy working "
+"at the FreeBSD system's console, another user can do some text-only work at "
+"the same time from a less powerful personal computer hooked up as a terminal "
+"to the FreeBSD system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:455
+msgid ""
+"There are at least two utilities in the base-system of FreeBSD that can be "
+"used to work through a serial connection: man:cu[1] and man:tip[1]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:457
+msgid ""
+"For example, to connect from a client system that runs FreeBSD to the serial "
+"connection of another system:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:461
+#, no-wrap
+msgid "# cu -l /dev/cuauN\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:465
+msgid ""
+"Ports are numbered starting from zero. This means that [.filename]#COM1# is "
+"[.filename]#/dev/cuau0#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:467
+msgid ""
+"Additional programs are available through the Ports Collection, such as "
+"package:comms/minicom[]."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:468
+#, no-wrap
+msgid "X Terminals"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:472
+msgid ""
+"X terminals are the most sophisticated kind of terminal available. Instead "
+"of connecting to a serial port, they usually connect to a network like "
+"Ethernet. Instead of being relegated to text-only applications, they can "
+"display any Xorg application."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:474
+msgid ""
+"This chapter does not cover the setup, configuration, or use of X terminals."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:476
+#, no-wrap
+msgid "Terminal Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:480
+msgid ""
+"This section describes how to configure a FreeBSD system to enable a login "
+"session on a serial terminal. It assumes that the system recognizes the "
+"serial port to which the terminal is connected and that the terminal is "
+"connected with the correct cable."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:488
+msgid ""
+"In FreeBSD, `init` reads [.filename]#/etc/ttys# and starts a `getty` process "
+"on the available terminals. The `getty` process is responsible for reading "
+"a login name and starting the `login` program. The ports on the FreeBSD "
+"system which allow logins are listed in [.filename]#/etc/ttys#. For "
+"example, the first virtual console, [.filename]#ttyv0#, has an entry in this "
+"file, allowing logins on the console. This file also contains entries for "
+"the other virtual consoles, serial ports, and pseudo-ttys. For a hardwired "
+"terminal, the serial port's [.filename]#/dev# entry is listed without the `/"
+"dev` part. For example, [.filename]#/dev/ttyv0# is listed as `ttyv0`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:490
+msgid ""
+"The default [.filename]#/etc/ttys# configures support for the first four "
+"serial ports, [.filename]#ttyu0# through [.filename]#ttyu3#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:497
+#, no-wrap
+msgid ""
+"ttyu0 \"/usr/libexec/getty std.9600\" dialup off secure\n"
+"ttyu1 \"/usr/libexec/getty std.9600\" dialup off secure\n"
+"ttyu2 \"/usr/libexec/getty std.9600\" dialup off secure\n"
+"ttyu3 \"/usr/libexec/getty std.9600\" dialup off secure\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:501
+msgid ""
+"When attaching a terminal to one of those ports, modify the default entry to "
+"set the required speed and terminal type, to turn the device `on` and, if "
+"needed, to change the port's `secure` setting. If the terminal is connected "
+"to another port, add an entry for the port."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:506
+msgid ""
+"<<ex-etc-ttys>> configures two terminals in [.filename]#/etc/ttys#. The "
+"first entry configures a Wyse-50 connected to [.filename]#COM2#. The second "
+"entry configures an old computer running Procomm terminal software emulating "
+"a VT-100 terminal. The computer is connected to the sixth serial port on a "
+"multi-port serial card."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:509
+#, no-wrap
+msgid "Configuring Terminal Entries"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:516
+#, no-wrap
+msgid ""
+"ttyu1 \"/usr/libexec/getty std.38400\" wy50 on insecure\n"
+"ttyu5 \"/usr/libexec/getty std.19200\" vt100 on insecure\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:519
+msgid "The first field specifies the device name of the serial terminal."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:529
+msgid ""
+"The second field tells `getty` to initialize and open the line, set the line "
+"speed, prompt for a user name, and then execute the `login` program. The "
+"optional _getty type_ configures characteristics on the terminal line, like "
+"bps rate and parity. The available getty types are listed in [.filename]#/"
+"etc/gettytab#. In almost all cases, the getty types that start with `std` "
+"will work for hardwired terminals as these entries ignore parity. There is "
+"a `std` entry for each bps rate from 110 to 115200. Refer to man:"
+"gettytab[5] for more information. When setting the getty type, make sure to "
+"match the communications settings used by the terminal. For this example, "
+"the Wyse-50 uses no parity and connects at 38400 bps. The computer uses no "
+"parity and connects at 19200 bps."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:534
+msgid ""
+"The third field is the type of terminal. For dial-up ports, `unknown` or "
+"`dialup` is typically used since users may dial up with practically any type "
+"of terminal or software. Since the terminal type does not change for "
+"hardwired terminals, a real terminal type from [.filename]#/etc/termcap# can "
+"be specified. For this example, the Wyse-50 uses the real terminal type "
+"while the computer running Procomm is set to emulate a VT-100."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:537
+msgid ""
+"The fourth field specifies if the port should be enabled. To enable logins "
+"on this port, this field must be set to `on`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:543
+msgid ""
+"The final field is used to specify whether the port is secure. Marking a "
+"port as `secure` means that it is trusted enough to allow `root` to login "
+"from that port. Insecure ports do not allow `root` logins. On an insecure "
+"port, users must login from unprivileged accounts and then use `su` or a "
+"similar mechanism to gain superuser privileges, as described in crossref:"
+"basics[users-superuser,“The Superuser Account”]. For security reasons, it "
+"is recommended to change this setting to `insecure`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:546
+msgid ""
+"After making any changes to [.filename]#/etc/ttys#, send a SIGHUP (hangup) "
+"signal to the `init` process to force it to re-read its configuration file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:550
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:724
+#, no-wrap
+msgid "# kill -HUP 1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:553
+msgid ""
+"Since `init` is always the first process run on a system, it always has a "
+"process ID of `1`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:555
+msgid ""
+"If everything is set up correctly, all cables are in place, and the "
+"terminals are powered up, a `getty` process should now be running on each "
+"terminal and login prompts should be available on each terminal."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:557
+#, no-wrap
+msgid "Troubleshooting the Connection"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:561
+msgid ""
+"Even with the most meticulous attention to detail, something could still go "
+"wrong while setting up a terminal. Here is a list of common symptoms and "
+"some suggested fixes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:564
+msgid ""
+"If no login prompt appears, make sure the terminal is plugged in and powered "
+"up. If it is a personal computer acting as a terminal, make sure it is "
+"running terminal emulation software on the correct serial port."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:567
+msgid ""
+"Make sure the cable is connected firmly to both the terminal and the FreeBSD "
+"computer. Make sure it is the right kind of cable."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:571
+msgid ""
+"Make sure the terminal and FreeBSD agree on the bps rate and parity "
+"settings. For a video display terminal, make sure the contrast and "
+"brightness controls are turned up. If it is a printing terminal, make sure "
+"paper and ink are in good supply."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:574
+msgid ""
+"Use `ps` to make sure that a `getty` process is running and serving the "
+"terminal. For example, the following listing shows that a `getty` is "
+"running on the second serial port, [.filename]#ttyu1#, and is using the "
+"`std.38400` entry in [.filename]#/etc/gettytab#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:579
+#, no-wrap
+msgid ""
+"# ps -axww|grep ttyu\n"
+"22189 d1 Is+ 0:00.03 /usr/libexec/getty std.38400 ttyu1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:583
+msgid ""
+"If no `getty` process is running, make sure the port is enabled in [."
+"filename]#/etc/ttys#. Remember to run `kill -HUP 1` after modifying [."
+"filename]#/etc/ttys#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:588
+msgid ""
+"If the `getty` process is running but the terminal still does not display a "
+"login prompt, or if it displays a prompt but will not accept typed input, "
+"the terminal or cable may not support hardware handshaking. Try changing "
+"the entry in [.filename]#/etc/ttys# from `std.38400` to `3wire.38400`, then "
+"run `kill -HUP 1` after modifying [.filename]#/etc/ttys#. The `3wire` entry "
+"is similar to `std`, but ignores hardware handshaking. The bps may also "
+"need to be reduced or software flow control enabled when using `3wire` to "
+"prevent buffer overflows."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:592
+msgid ""
+"If garbage appears instead of a login prompt, make sure the terminal and "
+"FreeBSD agree on the bps rate and parity settings. Check the `getty` "
+"processes to make sure the correct _getty_ type is in use. If not, edit [."
+"filename]#/etc/ttys# and run `kill -HUP 1`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:594
+msgid ""
+"If characters appear doubled and the password appears when typed, switch the "
+"terminal, or the terminal emulation software, from \"half duplex\" or "
+"\"local echo\" to \"full duplex.\""
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:596
+#, no-wrap
+msgid "Dial-in Service"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:600
+msgid ""
+"Configuring a FreeBSD system for dial-in service is similar to configuring "
+"terminals, except that modems are used instead of terminal devices. FreeBSD "
+"supports both external and internal modems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:602
+msgid ""
+"External modems are more convenient because they often can be configured via "
+"parameters stored in non-volatile RAM and they usually provide lighted "
+"indicators that display the state of important RS-232 signals, indicating "
+"whether the modem is operating properly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:605
+msgid ""
+"Internal modems usually lack non-volatile RAM, so their configuration may be "
+"limited to setting DIP switches. If the internal modem has any signal "
+"indicator lights, they are difficult to view when the system's cover is in "
+"place."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:608
+msgid ""
+"When using an external modem, a proper cable is needed. A standard RS-232C "
+"serial cable should suffice."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:612
+msgid ""
+"FreeBSD needs the RTS and CTS signals for flow control at speeds above 2400 "
+"bps, the CD signal to detect when a call has been answered or the line has "
+"been hung up, and the DTR signal to reset the modem after a session is "
+"complete. Some cables are wired without all of the needed signals, so if a "
+"login session does not go away when the line hangs up, there may be a "
+"problem with the cable. Refer to <<term-cables-null>> for more information "
+"about these signals."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:615
+msgid ""
+"Like other UNIX(R)-like operating systems, FreeBSD uses the hardware signals "
+"to find out when a call has been answered or a line has been hung up and to "
+"hangup and reset the modem after a call. FreeBSD avoids sending commands to "
+"the modem or watching for status reports from the modem."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:622
+msgid ""
+"FreeBSD supports the NS8250, NS16450, NS16550, and NS16550A-based RS-232C "
+"(CCITT V.24) communications interfaces. The 8250 and 16450 devices have "
+"single-character buffers. The 16550 device provides a 16-character buffer, "
+"which allows for better system performance. Bugs in plain 16550 devices "
+"prevent the use of the 16-character buffer, so use 16550A devices if "
+"possible. As single-character-buffer devices require more work by the "
+"operating system than the 16-character-buffer devices, 16550A-based serial "
+"interface cards are preferred. If the system has many active serial ports "
+"or will have a heavy load, 16550A-based cards are better for low-error-rate "
+"communications."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:624
+msgid ""
+"The rest of this section demonstrates how to configure a modem to receive "
+"incoming connections, how to communicate with the modem, and offers some "
+"troubleshooting tips."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:626
+#, no-wrap
+msgid "Modem Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:633
+msgid ""
+"As with terminals, `init` spawns a `getty` process for each configured "
+"serial port used for dial-in connections. When a user dials the modem's "
+"line and the modems connect, the \"Carrier Detect\" signal is reported by "
+"the modem. The kernel notices that the carrier has been detected and "
+"instructs `getty` to open the port and display a `login:` prompt at the "
+"specified initial line speed. In a typical configuration, if garbage "
+"characters are received, usually due to the modem's connection speed being "
+"different than the configured speed, `getty` tries adjusting the line speeds "
+"until it receives reasonable characters. After the user enters their login "
+"name, `getty` executes `login`, which completes the login process by asking "
+"for the user's password and then starting the user's shell."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:638
+msgid ""
+"There are two schools of thought regarding dial-up modems. One "
+"configuration method is to set the modems and systems so that no matter at "
+"what speed a remote user dials in, the dial-in RS-232 interface runs at a "
+"locked speed. The benefit of this configuration is that the remote user "
+"always sees a system login prompt immediately. The downside is that the "
+"system does not know what a user's true data rate is, so full-screen "
+"programs like Emacs will not adjust their screen-painting methods to make "
+"their response better for slower connections."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:645
+msgid ""
+"The second method is to configure the RS-232 interface to vary its speed "
+"based on the remote user's connection speed. As `getty` does not understand "
+"any particular modem's connection speed reporting, it gives a `login:` "
+"message at an initial speed and watches the characters that come back in "
+"response. If the user sees junk, they should press kbd:[Enter] until they "
+"see a recognizable prompt. If the data rates do not match, `getty` sees "
+"anything the user types as junk, tries the next speed, and gives the `login:"
+"` prompt again. This procedure normally only takes a keystroke or two "
+"before the user sees a good prompt. This login sequence does not look as "
+"clean as the locked-speed method, but a user on a low-speed connection "
+"should receive better interactive response from full-screen programs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:652
+msgid ""
+"When locking a modem's data communications rate at a particular speed, no "
+"changes to [.filename]#/etc/gettytab# should be needed. However, for a "
+"matching-speed configuration, additional entries may be required in order to "
+"define the speeds to use for the modem. This example configures a 14.4 Kbps "
+"modem with a top interface speed of 19.2 Kbps using 8-bit, no parity "
+"connections. It configures `getty` to start the communications rate for a "
+"V.32bis connection at 19.2 Kbps, then cycles through 9600 bps, 2400 bps, "
+"1200 bps, 300 bps, and back to 19.2 Kbps. Communications rate cycling is "
+"implemented with the `nx=` (next table) capability. Each line uses a `tc=` "
+"(table continuation) entry to pick up the rest of the settings for a "
+"particular data rate."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:668
+#, no-wrap
+msgid ""
+"#\n"
+"# Additions for a V.32bis Modem\n"
+"#\n"
+"um|V300|High Speed Modem at 300,8-bit:\\\n"
+" :nx=V19200:tc=std.300:\n"
+"un|V1200|High Speed Modem at 1200,8-bit:\\\n"
+" :nx=V300:tc=std.1200:\n"
+"uo|V2400|High Speed Modem at 2400,8-bit:\\\n"
+" :nx=V1200:tc=std.2400:\n"
+"up|V9600|High Speed Modem at 9600,8-bit:\\\n"
+" :nx=V2400:tc=std.9600:\n"
+"uq|V19200|High Speed Modem at 19200,8-bit:\\\n"
+" :nx=V9600:tc=std.19200:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:671
+msgid ""
+"For a 28.8 Kbps modem, or to take advantage of compression on a 14.4 Kbps "
+"modem, use a higher communications rate, as seen in this example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:688
+#, no-wrap
+msgid ""
+"#\n"
+"# Additions for a V.32bis or V.34 Modem\n"
+"# Starting at 57.6 Kbps\n"
+"#\n"
+"vm|VH300|Very High Speed Modem at 300,8-bit:\\\n"
+" :nx=VH57600:tc=std.300:\n"
+"vn|VH1200|Very High Speed Modem at 1200,8-bit:\\\n"
+" :nx=VH300:tc=std.1200:\n"
+"vo|VH2400|Very High Speed Modem at 2400,8-bit:\\\n"
+" :nx=VH1200:tc=std.2400:\n"
+"vp|VH9600|Very High Speed Modem at 9600,8-bit:\\\n"
+" :nx=VH2400:tc=std.9600:\n"
+"vq|VH57600|Very High Speed Modem at 57600,8-bit:\\\n"
+" :nx=VH9600:tc=std.57600:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:691
+msgid ""
+"For a slow CPU or a heavily loaded system without 16550A-based serial ports, "
+"this configuration may produce `uart` \"silo\" errors at 57.6 Kbps."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:694
+msgid ""
+"The configuration of [.filename]#/etc/ttys# is similar to <<ex-etc-ttys>>, "
+"but a different argument is passed to `getty` and `dialup` is used for the "
+"terminal type. Replace _xxx_ with the process `init` will run on the device:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:698
+#, no-wrap
+msgid "ttyu0 \"/usr/libexec/getty xxx\" dialup on\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:702
+msgid ""
+"The `dialup` terminal type can be changed. For example, setting `vt102` as "
+"the default terminal type allows users to use VT102 emulation on their "
+"remote systems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:705
+msgid ""
+"For a locked-speed configuration, specify the speed with a valid type listed "
+"in [.filename]#/etc/gettytab#. This example is for a modem whose port speed "
+"is locked at 19.2 Kbps:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:709
+#, no-wrap
+msgid "ttyu0 \"/usr/libexec/getty std.19200\" dialup on\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:713
+msgid ""
+"In a matching-speed configuration, the entry needs to reference the "
+"appropriate beginning \"auto-baud\" entry in [.filename]#/etc/gettytab#. To "
+"continue the example for a matching-speed modem that starts at 19.2 Kbps, "
+"use this entry:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:717
+#, no-wrap
+msgid "ttyu0 \"/usr/libexec/getty V19200\" dialup on\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:720
+msgid ""
+"After editing [.filename]#/etc/ttys#, wait until the modem is properly "
+"configured and connected before signaling `init`:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:729
+msgid ""
+"High-speed modems, like V.32, V.32bis, and V.34 modems, use hardware (`RTS/"
+"CTS`) flow control. Use `stty` to set the hardware flow control flag for "
+"the modem port. This example sets the `crtscts` flag on [.filename]#COM2#'s "
+"dial-in and dial-out initialization devices:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:734
+#, no-wrap
+msgid ""
+"# stty -f /dev/ttyu1.init crtscts\n"
+"# stty -f /dev/cuau1.init crtscts\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:736
+#, no-wrap
+msgid "Troubleshooting"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:739
+msgid ""
+"This section provides a few tips for troubleshooting a dial-up modem that "
+"will not connect to a FreeBSD system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:743
+msgid ""
+"Hook up the modem to the FreeBSD system and boot the system. If the modem "
+"has status indication lights, watch to see whether the modem's DTR indicator "
+"lights when the `login:` prompt appears on the system's console. If it "
+"lights up, that should mean that FreeBSD has started a `getty` process on "
+"the appropriate communications port and is waiting for the modem to accept a "
+"call."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:745
+msgid ""
+"If the DTR indicator does not light, login to the FreeBSD system through the "
+"console and type `ps ax` to see if FreeBSD is running a `getty` process on "
+"the correct port:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:749
+#, no-wrap
+msgid " 114 ?? I 0:00.10 /usr/libexec/getty V19200 ttyu0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:753
+msgid ""
+"If the second column contains a `d0` instead of a `??` and the modem has not "
+"accepted a call yet, this means that `getty` has completed its open on the "
+"communications port. This could indicate a problem with the cabling or a "
+"misconfigured modem because `getty` should not be able to open the "
+"communications port until the carrier detect signal has been asserted by the "
+"modem."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:756
+msgid ""
+"If no `getty` processes are waiting to open the port, double-check that the "
+"entry for the port is correct in [.filename]#/etc/ttys#. Also, check [."
+"filename]#/var/log/messages# to see if there are any log messages from "
+"`init` or `getty`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:762
+msgid ""
+"Next, try dialing into the system. Be sure to use 8 bits, no parity, and 1 "
+"stop bit on the remote system. If a prompt does not appear right away, or "
+"the prompt shows garbage, try pressing kbd:[Enter] about once per second. "
+"If there is still no `login:` prompt, try sending a `BREAK`. When using a "
+"high-speed modem, try dialing again after locking the dialing modem's "
+"interface speed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:764
+msgid ""
+"If there is still no `login:` prompt, check [.filename]#/etc/gettytab# again "
+"and double-check that:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:766
+msgid ""
+"The initial capability name specified in the entry in [.filename]#/etc/ttys# "
+"matches the name of a capability in [.filename]#/etc/gettytab#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:767
+msgid "Each `nx=` entry matches another [.filename]#gettytab# capability name."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:768
+msgid "Each `tc=` entry matches another [.filename]#gettytab# capability name."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:771
+msgid ""
+"If the modem on the FreeBSD system will not answer, make sure that the modem "
+"is configured to answer the phone when DTR is asserted. If the modem seems "
+"to be configured correctly, verify that the DTR line is asserted by checking "
+"the modem's indicator lights."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:773
+msgid ""
+"If it still does not work, try sending an email to the {freebsd-questions} "
+"describing the modem and the problem."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:775
+#, no-wrap
+msgid "Dial-out Service"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:779
+msgid ""
+"The following are tips for getting the host to connect over the modem to "
+"another computer. This is appropriate for establishing a terminal session "
+"with a remote host."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:783
+msgid ""
+"This kind of connection can be helpful to get a file on the Internet if "
+"there are problems using PPP. If PPP is not working, use the terminal "
+"session to FTP the needed file. Then use zmodem to transfer it to the "
+"machine."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:785
+#, no-wrap
+msgid "Using a Stock Hayes Modem"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:789
+msgid ""
+"A generic Hayes dialer is built into `tip`. Use `at=hayes` in [.filename]#/"
+"etc/remote#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:792
+msgid ""
+"The Hayes driver is not smart enough to recognize some of the advanced "
+"features of newer modems messages like `BUSY`, `NO DIALTONE`, or `CONNECT "
+"115200`. Turn those messages off when using `tip` with `ATX0&W`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:796
+msgid ""
+"The dial timeout for `tip` is 60 seconds. The modem should use something "
+"less, or else `tip` will think there is a communication problem. Try "
+"`ATS7=45&W`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:798
+#, no-wrap
+msgid "Using `AT` Commands"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:802
+msgid ""
+"Create a \"direct\" entry in [.filename]#/etc/remote#. For example, if the "
+"modem is hooked up to the first serial port, [.filename]#/dev/cuau0#, use "
+"the following line:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:806
+#, no-wrap
+msgid "cuau0:dv=/dev/cuau0:br#19200:pa=none\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:810
+msgid ""
+"Use the highest bps rate the modem supports in the `br` capability. Then, "
+"type `tip cuau0` to connect to the modem."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:812
+msgid "Or, use `cu` as `root` with the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:816
+#, no-wrap
+msgid "# cu -lline -sspeed\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:820
+msgid ""
+"_line_ is the serial port, such as [.filename]#/dev/cuau0#, and _speed_ is "
+"the speed, such as `57600`. When finished entering the AT commands, type `~."
+"` to exit."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:822
+#, no-wrap
+msgid "The `@` Sign Does Not Work"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:826
+msgid ""
+"The `@` sign in the phone number capability tells `tip` to look in [."
+"filename]#/etc/phones# for a phone number. But, the `@` sign is also a "
+"special character in capability files like [.filename]#/etc/remote#, so it "
+"needs to be escaped with a backslash:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:830
+#, no-wrap
+msgid "pn=\\@\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:833
+#, no-wrap
+msgid "Dialing from the Command Line"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:836
+msgid "Put a \"generic\" entry in [.filename]#/etc/remote#. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:843
+#, no-wrap
+msgid ""
+"tip115200|Dial any phone number at 115200 bps:\\\n"
+" :dv=/dev/cuau0:br#115200:at=hayes:pa=none:du:\n"
+"tip57600|Dial any phone number at 57600 bps:\\\n"
+" :dv=/dev/cuau0:br#57600:at=hayes:pa=none:du:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:846
+msgid "This should now work:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:850
+#, no-wrap
+msgid "# tip -115200 5551234\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:853
+msgid "Users who prefer `cu` over `tip`, can use a generic `cu` entry:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:858
+#, no-wrap
+msgid ""
+"cu115200|Use cu to dial any number at 115200bps:\\\n"
+" :dv=/dev/cuau1:br#57600:at=hayes:pa=none:du:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:861
+msgid "and type:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:865
+#, no-wrap
+msgid "# cu 5551234 -s 115200\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:868
+#, no-wrap
+msgid "Setting the bps Rate"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:873
+msgid ""
+"Put in an entry for `tip1200` or `cu1200`, but go ahead and use whatever bps "
+"rate is appropriate with the `br` capability. `tip` thinks a good default "
+"is 1200 bps which is why it looks for a `tip1200` entry. 1200 bps does not "
+"have to be used, though."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:875
+#, no-wrap
+msgid "Accessing a Number of Hosts Through a Terminal Server"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:879
+msgid ""
+"Rather than waiting until connected and typing `CONNECT _host_` each time, "
+"use ``tip``'s `cm` capability. For example, these entries in [.filename]#/"
+"etc/remote# will let you type `tip pain` or `tip muffin` to connect to the "
+"hosts `pain` or `muffin`, and `tip deep13` to connect to the terminal server."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:888
+#, no-wrap
+msgid ""
+"pain|pain.deep13.com|Forrester's machine:\\\n"
+" :cm=CONNECT pain\\n:tc=deep13:\n"
+"muffin|muffin.deep13.com|Frank's machine:\\\n"
+" :cm=CONNECT muffin\\n:tc=deep13:\n"
+"deep13:Gizmonics Institute terminal server:\\\n"
+" :dv=/dev/cuau2:br#38400:at=hayes:du:pa=none:pn=5551234:\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:891
+#, no-wrap
+msgid "Using More Than One Line with `tip`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:894
+msgid ""
+"This is often a problem where a university has several modem lines and "
+"several thousand students trying to use them."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:896
+msgid ""
+"Make an entry in [.filename]#/etc/remote# and use `@` for the `pn` "
+"capability:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:903
+#, no-wrap
+msgid ""
+"big-university:\\\n"
+" :pn=\\@:tc=dialout\n"
+"dialout:\\\n"
+" :dv=/dev/cuau3:br#9600:at=courier:du:pa=none:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:906
+msgid "Then, list the phone numbers in [.filename]#/etc/phones#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:913
+#, no-wrap
+msgid ""
+"big-university 5551111\n"
+"big-university 5551112\n"
+"big-university 5551113\n"
+"big-university 5551114\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:917
+msgid ""
+"`tip` will try each number in the listed order, then give up. To keep "
+"retrying, run `tip` in a `while` loop."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:919
+#, no-wrap
+msgid "Using the Force Character"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:923
+msgid ""
+"kbd:[Ctrl+P] is the default \"force\" character, used to tell `tip` that the "
+"next character is literal data. The force character can be set to any other "
+"character with the `~s` escape, which means \"set a variable.\""
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:928
+msgid ""
+"Type `~sforce=_single-char_` followed by a newline. _single-char_ is any "
+"single character. If _single-char_ is left out, then the force character is "
+"the null character, which is accessed by typing kbd:[Ctrl+2] or kbd:"
+"[Ctrl+Space]. A pretty good value for _single-char_ is kbd:[Shift+Ctrl+6], "
+"which is only used on some terminal servers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:930
+msgid ""
+"To change the force character, specify the following in [.filename]#~/."
+"tiprc#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:934
+#, no-wrap
+msgid "force=single-char\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:937
+#, no-wrap
+msgid "Upper Case Characters"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:942
+msgid ""
+"This happens when kbd:[Ctrl+A] is pressed, which is ``tip``'s \"raise "
+"character\", specially designed for people with broken caps-lock keys. Use "
+"`~s` to set `raisechar` to something reasonable. It can be set to be the "
+"same as the force character, if neither feature is used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:944
+msgid ""
+"Here is a sample [.filename]#~/.tiprc# for Emacs users who need to type kbd:"
+"[Ctrl+2] and kbd:[Ctrl+A]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:949
+#, no-wrap
+msgid ""
+"force=^^\n"
+"raisechar=^^\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:952
+msgid "The `^^` is kbd:[Shift+Ctrl+6]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:954
+#, no-wrap
+msgid "File Transfers with `tip`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:960
+msgid ""
+"When talking to another UNIX(R)-like operating system, files can be sent and "
+"received using `~p` (put) and `~t` (take). These commands run `cat` and "
+"`echo` on the remote system to accept and send files. The syntax is: `~p` "
+"local-file [ remote-file ] `~t` remote-file [ local-file ]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:962
+msgid ""
+"There is no error checking, so another protocol, like zmodem, should "
+"probably be used."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:964
+#, no-wrap
+msgid "Using zmodem with `tip`?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:968
+msgid ""
+"To receive files, start the sending program on the remote end. Then, type "
+"`~C rz` to begin receiving them locally."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:971
+msgid ""
+"To send files, start the receiving program on the remote end. Then, type "
+"`~C sz _files_` to send them to the remote system."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:973
+#, no-wrap
+msgid "Setting Up the Serial Console"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:977
+msgid ""
+"FreeBSD has the ability to boot a system with a dumb terminal on a serial "
+"port as a console. This configuration is useful for system administrators "
+"who wish to install FreeBSD on machines that have no keyboard or monitor "
+"attached, and developers who want to debug the kernel or device drivers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:981
+msgid ""
+"As described in crossref:boot[boot,The FreeBSD Booting Process], FreeBSD "
+"employs a three stage bootstrap. The first two stages are in the boot block "
+"code which is stored at the beginning of the FreeBSD slice on the boot "
+"disk. The boot block then loads and runs the boot loader as the third stage "
+"code."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:983
+msgid ""
+"In order to set up booting from a serial console, the boot block code, the "
+"boot loader code, and the kernel need to be configured."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:985
+#, no-wrap
+msgid "Quick Serial Console Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:989
+msgid ""
+"This section provides a fast overview of setting up the serial console. "
+"This procedure can be used when the dumb terminal is connected to [."
+"filename]#COM1#."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:991
+#, no-wrap
+msgid "Procedure: Configuring a Serial Console on [.filename]#COM1#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:993
+msgid ""
+"Connect the serial cable to [.filename]#COM1# and the controlling terminal."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:994
+msgid ""
+"To configure boot messages to display on the serial console, issue the "
+"following command as the superuser:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:998
+#, no-wrap
+msgid "# echo 'console=\"comconsole\"' >> /boot/loader.conf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1001
+msgid ""
+"Edit [.filename]#/etc/ttys# and change `off` to `on` and `dialup` to `vt100` "
+"for the [.filename]#ttyu0# entry. Otherwise, a password will not be required "
+"to connect via the serial console, resulting in a potential security hole."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1002
+msgid "Reboot the system to see if the changes took effect."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1004
+msgid ""
+"If a different configuration is required, see the next section for a more in-"
+"depth configuration explanation."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1006
+#, no-wrap
+msgid "In-Depth Serial Console Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1009
+msgid ""
+"This section provides a more detailed explanation of the steps needed to "
+"setup a serial console in FreeBSD."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1011
+#, no-wrap
+msgid "Procedure: Configuring a Serial Console"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1013
+msgid "Prepare a serial cable."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1016
+msgid ""
+"Use either a null-modem cable or a standard serial cable and a null-modem "
+"adapter. See <<term-cables-null>> for a discussion on serial cables."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1017
+msgid "Unplug the keyboard."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1020
+msgid ""
+"Many systems probe for the keyboard during the Power-On Self-Test (POST) and "
+"will generate an error if the keyboard is not detected. Some machines will "
+"refuse to boot until the keyboard is plugged in."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1022
+msgid ""
+"If the computer complains about the error, but boots anyway, no further "
+"configuration is needed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1025
+msgid ""
+"If the computer refuses to boot without a keyboard attached, configure the "
+"BIOS so that it ignores this error. Consult the motherboard's manual for "
+"details on how to do this."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1032
+msgid ""
+"Try setting the keyboard to \"Not installed\" in the BIOS. This setting "
+"tells the BIOS not to probe for a keyboard at power-on so it should not "
+"complain if the keyboard is absent. If that option is not present in the "
+"BIOS, look for an \"Halt on Error\" option instead. Setting this to \"All "
+"but Keyboard\" or to \"No Errors\" will have the same effect."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1036
+msgid ""
+"If the system has a PS/2(R) mouse, unplug it as well. PS/2(R) mice share "
+"some hardware with the keyboard and leaving the mouse plugged in can fool "
+"the keyboard probe into thinking the keyboard is still there."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1044
+msgid ""
+"While most systems will boot without a keyboard, quite a few will not boot "
+"without a graphics adapter. Some systems can be configured to boot with no "
+"graphics adapter by changing the \"graphics adapter\" setting in the BIOS "
+"configuration to \"Not installed\". Other systems do not support this "
+"option and will refuse to boot if there is no display hardware in the "
+"system. With these machines, leave some kind of graphics card plugged in, "
+"even if it is just a junky mono board. A monitor does not need to be "
+"attached."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1047
+msgid ""
+"Plug a dumb terminal, an old computer with a modem program, or the serial "
+"port on another UNIX(R) box into the serial port."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1048
+msgid ""
+"Add the appropriate `hint.uart.*` entries to [.filename]#/boot/device.hints# "
+"for the serial port. Some multi-port cards also require kernel configuration "
+"options. Refer to man:uart[4] for the required options and device hints for "
+"each supported serial port."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1049
+msgid ""
+"Create [.filename]#boot.config# in the root directory of the `a` partition "
+"on the boot drive."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1053
+msgid ""
+"This file instructs the boot block code how to boot the system. In order to "
+"activate the serial console, one or more of the following options are "
+"needed. When using multiple options, include them all on the same line:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1054
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1107
+#, no-wrap
+msgid "`-h`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1059
+msgid ""
+"Toggles between the internal and serial consoles. Use this to switch "
+"console devices. For instance, to boot from the internal (video) console, "
+"use `-h` to direct the boot loader and the kernel to use the serial port as "
+"its console device. Alternatively, to boot from the serial port, use `-h` "
+"to tell the boot loader and the kernel to use the video display as the "
+"console instead."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1060
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1110
+#, no-wrap
+msgid "`-D`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1066
+msgid ""
+"Toggles between the single and dual console configurations. In the single "
+"configuration, the console will be either the internal console (video "
+"display) or the serial port, depending on the state of `-h`. In the dual "
+"console configuration, both the video display and the serial port will "
+"become the console at the same time, regardless of the state of `-h`. "
+"However, the dual console configuration takes effect only while the boot "
+"block is running. Once the boot loader gets control, the console specified "
+"by `-h` becomes the only console."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1067
+#, no-wrap
+msgid "`-P`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1069
+msgid ""
+"Makes the boot block probe the keyboard. If no keyboard is found, the `-D` "
+"and `-h` options are automatically set."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1076
+msgid ""
+"Due to space constraints in the current version of the boot blocks, `-P` is "
+"capable of detecting extended keyboards only. Keyboards with less than 101 "
+"keys and without F11 and F12 keys may not be detected. Keyboards on some "
+"laptops may not be properly found because of this limitation. If this is "
+"the case, do not use `-P`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1080
+msgid ""
+"Use either `-P` to select the console automatically or `-h` to activate the "
+"serial console. Refer to man:boot[8] and man:boot.config[5] for more "
+"details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1084
+msgid ""
+"The options, except for `-P`, are passed to the boot loader. The boot "
+"loader will determine whether the internal video or the serial port should "
+"become the console by examining the state of `-h`. This means that if `-D` "
+"is specified but `-h` is not specified in [.filename]#/boot.config#, the "
+"serial port can be used as the console only during the boot block as the "
+"boot loader will use the internal video display as the console."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1085
+msgid "Boot the machine."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1087
+msgid ""
+"When FreeBSD starts, the boot blocks echo the contents of [.filename]#/boot."
+"config# to the console. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1092
+#, no-wrap
+msgid ""
+"/boot.config: -P\n"
+"Keyboard: no\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1096
+msgid ""
+"The second line appears only if `-P` is in [.filename]#/boot.config# and "
+"indicates the presence or absence of the keyboard. These messages go to "
+"either the serial or internal console, or both, depending on the option in [."
+"filename]#/boot.config#:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1101
+#, no-wrap
+msgid "Options"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1103
+#, no-wrap
+msgid "Message goes to"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1104
+#, no-wrap
+msgid "none"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1106
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1118
+#, no-wrap
+msgid "internal console"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1109
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1120
+#, no-wrap
+msgid "serial console"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1112
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1115
+#, no-wrap
+msgid "serial and internal consoles"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1113
+#, no-wrap
+msgid "`-Dh`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1116
+#, no-wrap
+msgid "`-P`, keyboard present"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1119
+#, no-wrap
+msgid "`-P`, keyboard absent"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1124
+msgid ""
+"After the message, there will be a small pause before the boot blocks "
+"continue loading the boot loader and before any further messages are printed "
+"to the console. Under normal circumstances, there is no need to interrupt "
+"the boot blocks, but one can do so in order to make sure things are set up "
+"correctly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1127
+msgid ""
+"Press any key, other than kbd:[Enter], at the console to interrupt the boot "
+"process. The boot blocks will then prompt for further action:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1133
+#, no-wrap
+msgid ""
+">> FreeBSD/i386 BOOT\n"
+"Default: 0:ad(0,a)/boot/loader\n"
+"boot:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1137
+msgid ""
+"Verify that the above message appears on either the serial or internal "
+"console, or both, according to the options in [.filename]#/boot.config#. If "
+"the message appears in the correct console, press kbd:[Enter] to continue "
+"the boot process."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1141
+msgid ""
+"If there is no prompt on the serial terminal, something is wrong with the "
+"settings. Enter `-h` then kbd:[Enter] or kbd:[Return] to tell the boot "
+"block (and then the boot loader and the kernel) to choose the serial port "
+"for the console. Once the system is up, go back and check what went wrong."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1144
+msgid ""
+"During the third stage of the boot process, one can still switch between the "
+"internal console and the serial console by setting appropriate environment "
+"variables in the boot loader. See man:loader[8] for more information."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1148
+msgid ""
+"This line in [.filename]#/boot/loader.conf# or [.filename]#/boot/loader.conf."
+"local# configures the boot loader and the kernel to send their boot messages "
+"to the serial console, regardless of the options in [.filename]#/boot."
+"config#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1152
+#, no-wrap
+msgid "console=\"comconsole\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1155
+msgid ""
+"That line should be the first line of [.filename]#/boot/loader.conf# so that "
+"boot messages are displayed on the serial console as early as possible."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1158
+msgid ""
+"If that line does not exist, or if it is set to `console=\"vidconsole\"`, "
+"the boot loader and the kernel will use whichever console is indicated by `-"
+"h` in the boot block. See man:loader.conf[5] for more information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1160
+msgid ""
+"At the moment, the boot loader has no option equivalent to `-P` in the boot "
+"block, and there is no provision to automatically select the internal "
+"console and the serial console based on the presence of the keyboard."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1167
+msgid ""
+"While it is not required, it is possible to provide a `login` prompt over "
+"the serial line. To configure this, edit the entry for the serial port in [."
+"filename]#/etc/ttys# using the instructions in <<term-config>>. If the "
+"speed of the serial port has been changed, change `std.9600` to match the "
+"new setting."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1169
+#, no-wrap
+msgid "Setting a Faster Serial Port Speed"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1173
+msgid ""
+"By default, the serial port settings are 9600 baud, 8 bits, no parity, and 1 "
+"stop bit. To change the default console speed, use one of the following "
+"options:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1176
+msgid ""
+"Edit [.filename]#/etc/make.conf# and set `BOOT_COMCONSOLE_SPEED` to the new "
+"console speed. Then, recompile and install the boot blocks and the boot "
+"loader:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1183
+#, no-wrap
+msgid ""
+"# cd /sys/boot\n"
+"# make clean\n"
+"# make\n"
+"# make install\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1186
+msgid ""
+"If the serial console is configured in some other way than by booting with `-"
+"h`, or if the serial console used by the kernel is different from the one "
+"used by the boot blocks, add the following option, with the desired speed, "
+"to a custom kernel configuration file and compile a new kernel:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1190
+#, no-wrap
+msgid "options CONSPEED=19200\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1193
+msgid ""
+"Add the `-S__19200__` boot option to [.filename]#/boot.config#, replacing "
+"`_19200_` with the speed to use."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1194
+msgid ""
+"Add the following options to [.filename]#/boot/loader.conf#. Replace "
+"`_115200_` with the speed to use."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1201
+#, no-wrap
+msgid ""
+"boot_multicons=\"YES\"\n"
+"boot_serial=\"YES\"\n"
+"comconsole_speed=\"115200\"\n"
+"console=\"comconsole,vidconsole\"\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1204
+#, no-wrap
+msgid "Entering the DDB Debugger from the Serial Line"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1209
+msgid ""
+"To configure the ability to drop into the kernel debugger from the serial "
+"console, add the following options to a custom kernel configuration file and "
+"compile the kernel using the instructions in crossref:"
+"kernelconfig[kernelconfig,Configuring the FreeBSD Kernel]. Note that while "
+"this is useful for remote diagnostics, it is also dangerous if a spurious "
+"BREAK is generated on the serial port. Refer to man:ddb[4] and man:ddb[8] "
+"for more information about the kernel debugger."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/serialcomms/_index.adoc:1214
+#, no-wrap
+msgid ""
+"options BREAK_TO_DEBUGGER\n"
+"options DDB\n"
+msgstr ""
diff --git a/documentation/content/en/books/handbook/usb-device-mode/_index.adoc b/documentation/content/en/books/handbook/usb-device-mode/_index.adoc
index ba62cedfc5..4e22c4b8ec 100644
--- a/documentation/content/en/books/handbook/usb-device-mode/_index.adoc
+++ b/documentation/content/en/books/handbook/usb-device-mode/_index.adoc
@@ -1,13 +1,13 @@
---
-title: Chapter 26. USB Device Mode / USB OTG
+title: Chapter 28. USB Device Mode / USB OTG
part: Part III. System Administration
prev: books/handbook/dtrace
next: books/handbook/partiv
description: This chapter covers the use of USB Device Mode and USB On The Go (USB OTG) in FreeBSD
tags: ["OTG", "USB"]
showBookMenu: true
-weight: 30
-path: "/books/handbook/"
+weight: 32
+path: "/books/handbook/usb-device-mode/"
---
[[usb-device-mode]]
@@ -18,7 +18,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 26
+:sectnumoffset: 28
:partnums:
:source-highlighter: rouge
:experimental:
@@ -275,7 +275,7 @@ man:ctld[8] can also be used to manage LUNs.
Create [.filename]#/etc/ctl.conf#, add a line to [.filename]#/etc/rc.conf# to make sure man:ctld[8] is automatically started at boot, and then start the daemon.
This is an example of a simple [.filename]#/etc/ctl.conf# configuration file.
-Refer to man:ctl.conf[5] for a more complete description of the options.
+Refer to man:ctl.conf[5] for a complete description of the options.
[.programlisting]
....
diff --git a/documentation/content/en/books/handbook/usb-device-mode/_index.po b/documentation/content/en/books/handbook/usb-device-mode/_index.po
new file mode 100644
index 0000000000..2a57dc37a0
--- /dev/null
+++ b/documentation/content/en/books/handbook/usb-device-mode/_index.po
@@ -0,0 +1,546 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:1
+#, no-wrap
+msgid "This chapter covers the use of USB Device Mode and USB On The Go (USB OTG) in FreeBSD"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:1
+#, no-wrap
+msgid "Part III. System Administration"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:1
+#, no-wrap
+msgid "Chapter 28. USB Device Mode / USB OTG"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:14
+#, no-wrap
+msgid "USB Device Mode / USB OTG"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:56
+msgid ""
+"This chapter covers the use of USB Device Mode and USB On The Go (USB OTG) "
+"in FreeBSD. This includes virtual serial consoles, virtual network "
+"interfaces, and virtual USB drives."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:61
+msgid ""
+"When running on hardware that supports USB device mode or USB OTG, like that "
+"built into many embedded boards, the FreeBSD USB stack can run in _device "
+"mode_. Device mode makes it possible for the computer to present itself as "
+"different kinds of USB device classes, including serial ports, network "
+"adapters, and mass storage, or a combination thereof. A USB host like a "
+"laptop or desktop computer is able to access them just like physical USB "
+"devices. Device mode is sometimes called the \"USB gadget mode\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:67
+msgid ""
+"There are two basic ways the hardware can provide the device mode "
+"functionality: with a separate \"client port\", which only supports the "
+"device mode, and with a USB OTG port, which can provide both device and host "
+"mode. For USB OTG ports, the USB stack switches between host-side and "
+"device-side automatically, depending on what is connected to the port. "
+"Connecting a USB device like a memory stick to the port causes FreeBSD to "
+"switch to host mode. Connecting a USB host like a computer causes FreeBSD "
+"to switch to device mode. Single purpose \"client ports\" always work in "
+"device mode."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:72
+msgid ""
+"What FreeBSD presents to the USB host depends on the `hw.usb.template` "
+"sysctl. Some templates provide a single device, such as a serial terminal; "
+"others provide multiple ones, which can all be used at the same time. An "
+"example is the template 10, which provides a mass storage device, a serial "
+"console, and a network interface. See man:usb_template[4] for the list of "
+"available values."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:76
+msgid ""
+"Note that in some cases, depending on the hardware and the hosts operating "
+"system, for the host to notice the configuration change, it must be either "
+"physically disconnected and reconnected, or forced to rescan the USB bus in "
+"a system-specific way. When FreeBSD is running on the host, man:"
+"usbconfig[8] `reset` can be used. This also must be done after loading [."
+"filename]#usb_template.ko# if the USB host was already connected to the "
+"USBOTG socket."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:78
+msgid "After reading this chapter, you will know:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:80
+msgid "How to set up USB Device Mode functionality on FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:81
+msgid "How to configure the virtual serial port on FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:82
+msgid ""
+"How to connect to the virtual serial port from various operating systems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:83
+msgid "How to configure FreeBSD to provide a virtual USB network interface."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:84
+msgid "How to configure FreeBSD to provide a virtual USB storage device."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:86
+#, no-wrap
+msgid "USB Virtual Serial Ports"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:88
+#, no-wrap
+msgid "Configuring USB Device Mode Serial Ports"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:94
+msgid ""
+"Virtual serial port support is provided by templates number 3, 8, and 10. "
+"Note that template 3 works with Microsoft Windows 10 without the need for "
+"special drivers and INF files. Other host operating systems work with all "
+"three templates. Both man:usb_template[4] and man:umodem[4] kernel modules "
+"must be loaded."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:96
+msgid ""
+"To enable USB device mode serial ports, add those lines to [.filename]#/etc/"
+"ttys#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:101
+#, no-wrap
+msgid ""
+"ttyU0\t\"/usr/libexec/getty 3wire\"\tvt100\tonifconsole secure\n"
+"ttyU1\t\"/usr/libexec/getty 3wire\"\tvt100\tonifconsole secure\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:104
+msgid "Then add these lines to [.filename]#/etc/devd.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:114
+#, no-wrap
+msgid ""
+"notify 100 {\n"
+"\tmatch \"system\"\t\t\"DEVFS\";\n"
+"\tmatch \"subsystem\"\t\"CDEV\";\n"
+"\tmatch \"type\"\t\t\"CREATE\";\n"
+"\tmatch \"cdev\"\t\t\"ttyU[0-9]+\";\n"
+"\taction \"/sbin/init q\";\n"
+"};\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:117
+msgid "Reload the configuration if man:devd[8] is already running:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:121
+#, no-wrap
+msgid "# service devd restart\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:124
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:191
+msgid ""
+"Make sure the necessary modules are loaded and the correct template is set "
+"at boot by adding those lines to [.filename]#/boot/loader.conf#, creating it "
+"if it does not already exist:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:129
+#, no-wrap
+msgid ""
+"umodem_load=\"YES\"\n"
+"hw.usb.template=3\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:132
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:199
+msgid "To load the module and set the template without rebooting use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:137
+#, no-wrap
+msgid ""
+"# kldload umodem\n"
+"# sysctl hw.usb.template=3\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:139
+#, no-wrap
+msgid "Connecting to USB Device Mode Serial Ports from FreeBSD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:145
+msgid ""
+"To connect to a board configured to provide USB device mode serial ports, "
+"connect the USB host, such as a laptop, to the boards USB OTG or USB client "
+"port. Use `pstat -t` on the host to list the terminal lines. Near the end "
+"of the list you should see a USB serial port, e.g. \"ttyU0\". To open the "
+"connection, use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:149
+#, no-wrap
+msgid "# cu -l /dev/ttyU0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:152
+msgid ""
+"After pressing the kbd:[Enter] key a few times you will see a login prompt."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:153
+#, no-wrap
+msgid "Connecting to USB Device Mode Serial Ports from macOS"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:157
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:167
+msgid ""
+"To connect to a board configured to provide USB device mode serial ports, "
+"connect the USB host, such as a laptop, to the boards USB OTG or USB client "
+"port. To open the connection, use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:161
+#, no-wrap
+msgid "# cu -l /dev/cu.usbmodemFreeBSD1\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:163
+#, no-wrap
+msgid "Connecting to USB Device Mode Serial Ports from Linux"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:171
+#, no-wrap
+msgid "# minicom -D /dev/ttyACM0\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:173
+#, no-wrap
+msgid "Connecting to USB Device Mode Serial Ports from Microsoft Windows 10"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:181
+msgid ""
+"To connect to a board configured to provide USB device mode serial ports, "
+"connect the USB host, such as a laptop, to the boards USB OTG or USB client "
+"port. To open a connection you will need a serial terminal program, such as "
+"PuTTY. To check the COM port name used by Windows, run Device Manager, "
+"expand \"Ports (COM & LPT)\". You will see a name similar to \"USB Serial "
+"Device (COM4)\". Run serial terminal program of your choice, for example "
+"PuTTY. In the PuTTY dialog set \"Connection type\" to \"Serial\", type the "
+"COMx obtained from Device Manager in the \"Serial line\" dialog box and "
+"click Open."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:183
+#, no-wrap
+msgid "USB Device Mode Network Interfaces"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:189
+msgid ""
+"Virtual network interfaces support is provided by templates number 1, 8, and "
+"10. Note that none of them works with Microsoft Windows. Other host "
+"operating systems work with all three templates. Both man:usb_template[4] "
+"and man:if_cdce[4] kernel modules must be loaded."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:196
+#, no-wrap
+msgid ""
+"if_cdce_load=\"YES\"\n"
+"hw.usb.template=1\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:204
+#, no-wrap
+msgid ""
+"# kldload if_cdce\n"
+"# sysctl hw.usb.template=1\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:207
+#, no-wrap
+msgid "USB Virtual Storage Device"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:212
+msgid ""
+"The man:cfumass[4] driver is a USB device mode driver first available in "
+"FreeBSD 12.0."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:218
+msgid ""
+"Mass Storage target is provided by templates 0 and 10. Both man:"
+"usb_template[4] and man:cfumass[4] kernel modules must be loaded. man:"
+"cfumass[4] interfaces to the CTL subsystem, the same one that is used for "
+"iSCSI or Fibre Channel targets. On the host side, USB Mass Storage "
+"initiators can only access a single LUN, LUN 0."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:219
+#, no-wrap
+msgid "Configuring USB Mass Storage Target Using the cfumass Startup Script"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:223
+msgid ""
+"The simplest way to set up a read-only USB storage target is to use the [."
+"filename]#cfumass# rc script. To configure it this way, copy the files to "
+"be presented to the USB host machine into the `/var/cfumass` directory, and "
+"add this line to [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:227
+#, no-wrap
+msgid "cfumass_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:230
+msgid "To configure the target without restarting, run this command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:234
+#, no-wrap
+msgid "# service cfumass start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:239
+msgid ""
+"Differently from serial and network functionality, the template should not "
+"be set to 0 or 10 in [.filename]#/boot/loader.conf#. This is because the "
+"LUN must be set up before setting the template. The cfumass startup script "
+"sets the correct template number automatically when started."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:240
+#, no-wrap
+msgid "Configuring USB Mass Storage Using Other Means"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:244
+msgid ""
+"The rest of this chapter provides detailed description of setting the target "
+"without using the cfumass rc file. This is necessary if e.g. one wants to "
+"provide a writeable LUN."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:250
+msgid ""
+"USB Mass Storage does not require the man:ctld[8] daemon to be running, "
+"although it can be used if desired. This is different from iSCSI. Thus, "
+"there are two ways to configure the target: man:ctladm[8], or man:ctld[8]. "
+"Both require the [.filename]#cfumass.ko# kernel module to be loaded. The "
+"module can be loaded manually:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:254
+#, no-wrap
+msgid "# kldload cfumass\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:257
+msgid ""
+"If [.filename]#cfumass.ko# has not been built into the kernel, [.filename]#/"
+"boot/loader.conf# can be set to load the module at boot:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:261
+#, no-wrap
+msgid "cfumass_load=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:264
+msgid "A LUN can be created without the man:ctld[8] daemon:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:268
+#, no-wrap
+msgid "# ctladm create -b block -o file=/data/target0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:273
+msgid ""
+"This presents the contents of the image file [.filename]#/data/target0# as a "
+"LUN to the USB host. The file must exist before executing the command. To "
+"configure the LUN at system startup, add the command to [.filename]#/etc/rc."
+"local#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:276
+msgid ""
+"man:ctld[8] can also be used to manage LUNs. Create [.filename]#/etc/ctl."
+"conf#, add a line to [.filename]#/etc/rc.conf# to make sure man:ctld[8] is "
+"automatically started at boot, and then start the daemon."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:279
+msgid ""
+"This is an example of a simple [.filename]#/etc/ctl.conf# configuration "
+"file. Refer to man:ctl.conf[5] for a complete description of the options."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:288
+#, no-wrap
+msgid ""
+"target naa.50015178f369f092 {\n"
+"\tlun 0 {\n"
+"\t\tpath /data/target0\n"
+"\t\tsize 4G\n"
+"\t}\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:295
+msgid ""
+"The example creates a single target with a single LUN. The "
+"`naa.50015178f369f092` is a device identifier composed of 32 random "
+"hexadecimal digits. The `path` line defines the full path to a file or zvol "
+"backing the LUN. That file must exist before starting man:ctld[8]. The "
+"second line is optional and specifies the size of the LUN."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:297
+msgid ""
+"To make sure the man:ctld[8] daemon is started at boot, add this line to [."
+"filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:301
+#, no-wrap
+msgid "ctld_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:304
+msgid "To start man:ctld[8] now, run this command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:308
+#, no-wrap
+msgid "# service ctld start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:312
+msgid ""
+"As the man:ctld[8] daemon is started, it reads [.filename]#/etc/ctl.conf#. "
+"If this file is edited after the daemon starts, reload the changes so they "
+"take effect immediately:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/usb-device-mode/_index.adoc:316
+#, no-wrap
+msgid "# service ctld reload\n"
+msgstr ""
diff --git a/documentation/content/en/books/handbook/virtualization/_index.adoc b/documentation/content/en/books/handbook/virtualization/_index.adoc
index dcd0f54ff6..c567bd9c76 100644
--- a/documentation/content/en/books/handbook/virtualization/_index.adoc
+++ b/documentation/content/en/books/handbook/virtualization/_index.adoc
@@ -1,13 +1,13 @@
---
-title: Chapter 22. Virtualization
+title: Chapter 24. Virtualization
part: Part III. System Administration
prev: books/handbook/filesystems
next: books/handbook/l10n
description: Virtualization software allows multiple operating systems to run simultaneously on the same computer
tags: ["virtualization", "Parallels", "VMware", "VirtualBox", "bhyve", "XEN"]
showBookMenu: true
-weight: 26
-path: "/books/handbook/"
+weight: 28
+path: "/books/handbook/virtualization/"
---
[[virtualization]]
@@ -18,7 +18,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 22
+:sectnumoffset: 24
:partnums:
:source-highlighter: rouge
:experimental:
@@ -58,8 +58,8 @@ After reading this chapter, you will know:
* The difference between a host operating system and a guest operating system.
* How to install FreeBSD on the following virtualization platforms:
-** Parallels Desktop(Intel(R)-based Apple(R) macOS(R))
-** VMware Fusion(Intel(R)-based Apple(R) macOS(R))
+** Parallels Desktop(Apple(R) macOS(R))
+** VMware Fusion(Apple(R) macOS(R))
** VirtualBox(TM)(Microsoft(R) Windows(R), Intel(R)-based Apple(R) macOS(R), Linux)
** bhyve(FreeBSD)
* How to tune a FreeBSD system for best performance under virtualization.
@@ -74,7 +74,7 @@ Before reading this chapter, you should:
[[virtualization-guest-parallelsdesktop]]
== FreeBSD as a Guest on Parallels Desktop for macOS(R)
-Parallels Desktop for Mac(R) is a commercial software product available for Intel(R) based Apple(R) Mac(R) computers running macOS(R) 10.4.6 or higher.
+Parallels Desktop for Mac(R) is a commercial software product available for Apple(R) Mac(R) computers running macOS(R) 10.14.6 or higher.
FreeBSD is a fully supported guest operating system.
Once Parallels has been installed on macOS(R), the user must configure a virtual machine and then install the desired guest operating system.
@@ -82,54 +82,41 @@ Once Parallels has been installed on macOS(R), the user must configure a virtual
=== Installing FreeBSD on Parallels Desktop on Mac(R)
The first step in installing FreeBSD on Parallels is to create a new virtual machine for installing FreeBSD.
-Select [.guimenuitem]#FreeBSD# as the menu:Guest OS Type[] when prompted:
-image::parallels-freebsd1.png[]
+Choose menu:Install Windows or another OS from a DVD or image file[] and proceed.
-Choose a reasonable amount of disk and memory depending on the plans for this virtual FreeBSD instance.
-4GB of disk space and 512MB of RAM work well for most uses of FreeBSD under Parallels:
+image::parallels-freebsd1.png[Parallels setup wizard showing Install Windows or another OS from a DVD or image file chosen]
-image::parallels-freebsd2.png[]
+Select the FreeBSD image file.
-image::parallels-freebsd3.png[]
+image::parallels-freebsd2.png[Parallels setup wizard showing FreeBSD image file selected]
-image::parallels-freebsd4.png[]
+Choose menu:Other as operating system[].
-image::parallels-freebsd5.png[]
-
-Select the type of networking and a network interface:
-
-image::parallels-freebsd6.png[]
-
-image::parallels-freebsd7.png[]
-
-Save and finish the configuration:
-
-image::parallels-freebsd8.png[]
+[WARNING]
+====
+Choosing FreeBSD will cause boot error on startup.
+====
-image::parallels-freebsd9.png[]
+image::parallels-freebsd3.png[Parallels setup wizard showing Other selected as operating system]
-After the FreeBSD virtual machine has been created, FreeBSD can be installed on it.
-This is best done with an official FreeBSD CD/DVD or with an ISO image downloaded from an official FTP site.
-Copy the appropriate ISO image to the local Mac(R) filesystem or insert a CD/DVD in the Mac(R)'s CD-ROM drive.
-Click on the disc icon in the bottom right corner of the FreeBSD Parallels window.
-This will bring up a window that can be used to associate the CD-ROM drive in the virtual machine with the ISO file on disk or with the real CD-ROM drive.
+Name the virtual machine and check menu:Customize settings before installation[]
-image::parallels-freebsd11.png[]
+image::parallels-freebsd4.png[Parallels setup wizard showing the checkbox checked for customizing settings before installation]
-Once this association with the CD-ROM source has been made, reboot the FreeBSD virtual machine by clicking the reboot icon.
-Parallels will reboot with a special BIOS that first checks if there is a CD-ROM.
+When the configuration window pops up, go to menu:Hardware[] tab, choose menu:Boot order[], and click menu:Advanced[].
+Then, choose *EFI 64-bit* as menu:BIOS[].
-image::parallels-freebsd10.png[]
+image::parallels-freebsd5.png[Parallels setup wizard showing EFI 64-bit chosen as BIOS]
-In this case it will find the FreeBSD installation media and begin a normal FreeBSD installation.
-Perform the installation, but do not attempt to configure Xorg at this time.
+Click menu:OK[], close the configuration window, and click menu:Continue[].
-image::parallels-freebsd12.png[]
+image::parallels-freebsd6.png[Parallels setup wizard showing the summary of the new virtual machine]
-When the installation is finished, reboot into the newly installed FreeBSD virtual machine.
+The virtual machine will automatically boot.
+Install FreeBSD following the general steps.
-image::parallels-freebsd13.png[]
+image::parallels-freebsd7.png[FreeBSD booted on Parallels]
[[virtualization-guest-parallels-configure]]
=== Configuring FreeBSD on Parallels
@@ -162,7 +149,7 @@ More advanced networking setups are described in crossref:advanced-networking[ad
[[virtualization-guest-vmware]]
== FreeBSD as a Guest on VMware Fusion for macOS(R)
-VMware Fusion for Mac(R) is a commercial software product available for Intel(R) based Apple(R) Mac(R) computers running macOS(R) 10.11 or higher.
+VMware Fusion for Mac(R) is a commercial software product available for Apple(R) Mac(R) computers running macOS(R) 12 or higher.
FreeBSD is a fully supported guest operating system.
Once VMware Fusion has been installed on macOS(R), the user can configure a virtual machine and then install the desired guest operating system.
@@ -172,48 +159,48 @@ Once VMware Fusion has been installed on macOS(R), the user can configure a virt
The first step is to start VMware Fusion which will load the Virtual Machine Library.
Click [.guimenuitem]#+->New# to create the virtual machine:
-image::vmware-freebsd01.png[width=35%]
+image::vmware-freebsd01.png[]
This will load the New Virtual Machine Assistant.
Choose [.guimenuitem]#Create a custom virtual machine# and click [.guimenuitem]#Continue# to proceed:
-image::vmware-freebsd02.png[width=45%]
+image::vmware-freebsd02.png[]
Select [.guimenuitem]#Other# as the [.guimenuitem]#Operating System# and either [.guimenuitem]#FreeBSD X# or [.guimenuitem]#FreeBSD X 64-bit#, as the menu:Version[] when prompted:
-image::vmware-freebsd03.png[width=45%]
+image::vmware-freebsd03.png[]
Choose the firmware(UEFI is recommended):
-image::vmware-freebsd04.png[width=45%]
+image::vmware-freebsd04.png[]
Choose [.guimenuitem]#Create a new virtual disk# and click [.guimenuitem]#Continue#:
-image::vmware-freebsd05.png[width=45%]
+image::vmware-freebsd05.png[]
Check the configuration and click [.guimenuitem]#Finish#:
-image::vmware-freebsd06.png[width=45%]
+image::vmware-freebsd06.png[]
Choose the name of the virtual machine and the directory where it should be saved:
-image::vmware-freebsd07.png[width=45%]
+image::vmware-freebsd07.png[]
Press command+E to open virtual machine settings and click [.guimenuitem]#CD/DVD#:
-image::vmware-freebsd08.png[width=45%]
+image::vmware-freebsd08.png[]
Choose FreeBSD ISO image or from a CD/DVD:
-image::vmware-freebsd09.png[width=45%]
+image::vmware-freebsd09.png[]
Start the virtual machine:
-image::vmware-freebsd10.png[width=25%]
+image::vmware-freebsd10.png[]
Install FreeBSD as usual:
-image::vmware-freebsd11.png[width=25%]
+image::vmware-freebsd11.png[]
Once the install is complete, the settings of the virtual machine can be modified, such as memory usage and the number of CPUs the virtual machine will have access to:
@@ -222,18 +209,18 @@ Once the install is complete, the settings of the virtual machine can be modifie
The System Hardware settings of the virtual machine cannot be modified while the virtual machine is running.
====
-image::vmware-freebsd12.png[width=45%]
+image::vmware-freebsd12.png[]
The status of the CD-ROM device.
Normally the CD/DVD/ISO is disconnected from the virtual machine when it is no longer needed.
-image::vmware-freebsd09.png[width=45%]
+image::vmware-freebsd09.png[]
The last thing to change is how the virtual machine will connect to the network.
To allow connections to the virtual machine from other machines besides the host, choose [.guimenuitem]#Connect directly to the physical network (Bridged)#.
Otherwise, [.guimenuitem]#Share the host's internet connection (NAT)# is preferred so that the virtual machine can have access to the Internet, but the network cannot access the virtual machine.
-image::vmware-freebsd13.png[width=45%]
+image::vmware-freebsd13.png[]
After modifying the settings, boot the newly installed FreeBSD virtual machine.
@@ -339,44 +326,6 @@ Section "InputDevice"
EndSection
....
-HAL users should create the following [.filename]#/usr/local/etc/hal/fdi/policy/90-vboxguest.fdi# or copy it from [.filename]#/usr/local/share/hal/fdi/policy/10osvendor/90-vboxguest.fdi#:
-
-[.programlisting]
-....
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-# Sun VirtualBox
-# Hal driver description for the vboxmouse driver
-# $Id: chapter.xml,v 1.33 2012-03-17 04:53:52 eadler Exp $
-
- Copyright (C) 2008-2009 Sun Microsystems, Inc.
-
- This file is part of VirtualBox Open Source Edition (OSE, as
- available from http://www.virtualbox.org. This file is free software;
- you can redistribute it and/or modify it under the terms of the GNU
- General Public License (GPL) as published by the Free Software
- Foundation, in version 2 as it comes in the "COPYING" file of the
- VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-
- Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
- Clara, CA 95054 USA or visit http://www.sun.com if you need
- additional information or have any questions.
--->
-<deviceinfo version="0.2">
- <device>
- <match key="info.subsystem" string="pci">
- <match key="info.product" string="VirtualBox guest Service">
- <append key="info.capabilities" type="strlist">input</append>
- <append key="info.capabilities" type="strlist">input.mouse</append>
- <merge key="input.x11_driver" type="string">vboxmouse</merge>
- <merge key="input.device" type="string">/dev/vboxguest</merge>
- </match>
- </match>
- </device>
-</deviceinfo>
-....
-
Shared folders for file transfers between host and VM are accessible by mounting them using `mount_vboxvfs`.
A shared folder can be created on the host using the VirtualBox GUI or via `vboxmanage`.
For example, to create a shared folder called _myshare_ under [.filename]#/mnt/bsdboxshare# for the VM named _BSDBox_, run:
@@ -524,18 +473,6 @@ Then choose the Host Drive from the popup menu for the virtual CD/DVD drive sele
A checkbox labeled `Passthrough` will appear. This allows the virtual machine to use the hardware directly.
For example, audio CDs or the burner will only function if this option is selected.
-HAL needs to run for VirtualBox(TM)DVD/CD functions to work, so enable it in [.filename]#/etc/rc.conf# and start it if it is not already running:
-
-[.programlisting]
-....
-hald_enable="YES"
-....
-
-[source,shell]
-....
-# service hald start
-....
-
In order for users to be able to use VirtualBox(TM)DVD/CD functions, they need access to [.filename]#/dev/xpt0#, [.filename]#/dev/cdN#, and [.filename]#/dev/passN#.
This is usually achieved by making the user a member of `operator`.
Permissions to these devices have to be corrected by adding these lines to [.filename]#/etc/devfs.conf#:
@@ -556,16 +493,13 @@ perm pass* 0660
== FreeBSD as a Host with bhyve
The bhyve BSD-licensed hypervisor became part of the base system with FreeBSD 10.0-RELEASE.
-This hypervisor supports a number of guests, including FreeBSD, OpenBSD, and many Linux(R) distributions.
+This hypervisor supports a number of guests, including FreeBSD, OpenBSD, many Linux(R) distributions, and Microsoft Windows(R).
By default, bhyve provides access to serial console and does not emulate a graphical console.
Virtualization offload features of newer CPUs are used to avoid the legacy methods of translating instructions and manually managing memory mappings.
The bhyve design requires a processor that supports Intel(R) Extended Page Tables (EPT) or AMD(R) Rapid Virtualization Indexing (RVI) or Nested Page Tables (NPT).
Hosting Linux(R) guests or FreeBSD guests with more than one vCPU requires VMX unrestricted mode support (UG).
-Most newer processors, specifically the Intel(R) Core(TM) i3/i5/i7 and Intel(R) Xeon(TM) E3/E5/E7, support these features.
-UG support was introduced with Intel's Westmere micro-architecture.
-For a complete list of Intel(R) processors that support EPT, refer to https://ark.intel.com/content/www/us/en/ark/search/featurefilter.html?productType=873&0_ExtendedPageTables=True[].
-RVI is found on the third generation and later of the AMD Opteron(TM) (Barcelona) processors.
+
The easiest way to tell if a processor supports bhyve is to run `dmesg` or look in [.filename]#/var/run/dmesg.boot# for the `POPCNT` processor feature flag on the `Features2` line for AMD(R) processors or `EPT` and `UG` on the `VT-x` line for Intel(R) processors.
[[virtualization-bhyve-prep]]
@@ -579,7 +513,7 @@ First, load the bhyve kernel module:
# kldload vmm
....
-Then, create a [.filename]#tap# interface for the network device in the virtual machine to attach to.
+There are several ways to connect a virtual machine guest to a host's network; one straightforward way to accomplish this is to create a [.filename]#tap# interface for the network device in the virtual machine to attach to.
In order for the network device to participate in the network, also create a bridge interface containing the [.filename]#tap# interface and the physical interface as members.
In this example, the physical interface is _igb0_:
@@ -608,19 +542,34 @@ Download an installation image of FreeBSD to install:
[source,shell]
....
-# fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/12.2/FreeBSD-12.2-RELEASE-amd64-bootonly.iso
-FreeBSD-12.2-RELEASE-amd64-bootonly.iso 100% of 230 MB 570 kBps 06m17s
+# fetch https://download.freebsd.org/releases/ISO-IMAGES/14.0/FreeBSD-14.0-RELEASE-amd64-bootonly.iso
+FreeBSD-14.0-RELEASE-amd64-bootonly.iso 426 MB 16 MBps 22s
+....
+
+FreeBSD comes with an example script `vmrun.sh` for running a virtual machine in bhyve.
+It will start the virtual machine and run it in a loop, so it will automatically restart if it crashes.
+`vmrun.sh` takes a number of options to control the configuration of the machine, including:
+
+* `-c` controls the number of virtual CPUs,
+* `-m` limits the amount of memory available to the guest,
+* `-t` defines which [.filename]#tap# device to use,
+* `-d` indicates which disk image to use,
+* `-i` tells bhyve to boot from the CD image instead of the disk, and
+* `-I` defines which CD image to use.
+
+The last parameter is the name of the virtual machine and used to track the running machines.
+You can use the following command to get a list of all available program argument options:
+
+[source,shell]
+....
+# sh /usr/share/examples/bhyve/vmrun.sh --usage
....
-FreeBSD comes with an example script for running a virtual machine in bhyve.
-The script will start the virtual machine and run it in a loop, so it will automatically restart if it crashes.
-The script takes a number of options to control the configuration of the machine: `-c` controls the number of virtual CPUs, `-m` limits the amount of memory available to the guest, `-t` defines which [.filename]#tap# device to use, `-d` indicates which disk image to use, `-i` tells bhyve to boot from the CD image instead of the disk, and `-I` defines which CD image to use.
-The last parameter is the name of the virtual machine, used to track the running machines.
This example starts the virtual machine in installation mode:
[source,shell]
....
-# sh /usr/share/examples/bhyve/vmrun.sh -c 1 -m 1024M -t tap0 -d guest.img -i -I FreeBSD-12.2-RELEASE-amd64-bootonly.iso guestname
+# sh /usr/share/examples/bhyve/vmrun.sh -c 1 -m 1024M -t tap0 -d guest.img -i -I FreeBSD-14.0-RELEASE-amd64-bootonly.iso guestname
....
The virtual machine will boot and start the installer.
@@ -639,18 +588,20 @@ Now the guest can be started from the virtual disk:
[[virtualization-bhyve-linux]]
=== Creating a Linux(R) Guest
-In order to boot operating systems other than FreeBSD, the package:sysutils/grub2-bhyve[] port must be first installed.
+Linux guests can be booted either like any other regular crossref:virtualization[virtualization-bhyve-uefi,"UEFI-based guest"] virtual machine, or alternatively, you can make use of the package:sysutils/grub2-bhyve[] port.
-Next, create a file to use as the virtual disk for the guest machine:
+To do this, first ensure that the port is installed, then create a file to use as the virtual disk for the guest machine:
[source,shell]
....
# truncate -s 16G linux.img
....
-Starting a virtual machine with bhyve is a two step process.
-First a kernel must be loaded, then the guest can be started.
-The Linux(R) kernel is loaded with package:sysutils/grub2-bhyve[].
+Starting a Linux virtual machine with `grub2-bhyve` is a two step process.
+
+. First a kernel must be loaded, then the guest can be started.
+. The Linux(R) kernel is loaded with package:sysutils/grub2-bhyve[].
+
Create a [.filename]#device.map# that grub will use to map the virtual devices to the files on the host system:
[.programlisting]
@@ -739,7 +690,7 @@ Destroy the virtual machine instance:
[[virtualization-bhyve-uefi]]
=== Booting bhyve Virtual Machines with UEFI Firmware
-In addition to bhyveload and grub-bhyve, the bhyve hypervisor can also boot virtual machines using the UEFI userspace firmware.
+In addition to `bhyveload` and `grub-bhyve`, the bhyve hypervisor can also boot virtual machines using the UEFI firmware.
This option may support guest operating systems that are not supported by the other loaders.
In order to make use of the UEFI support in bhyve, first obtain the UEFI firmware images.
@@ -757,6 +708,28 @@ The actual bhyve command may look like this:
guest
....
+To allow a guest to store UEFI variables, you can use a variables file appended to the `-l` flag.
+Note that bhyve will write guest modifications to the given variables file.
+Therefore, be sure to first create a per-guest-copy of the variables template file:
+
+[source,shell]
+....
+# cp /usr/local/share/uefi-firmware/BHYVE_UEFI_VARS.fd /path/to/vm-image/BHYVE_UEFI_VARS.fd
+....
+
+Then, add that variables file into your bhyve arguments:
+
+[source,shell]
+....
+# bhyve -AHP -s 0:0,hostbridge -s 1:0,lpc \
+-s 2:0,virtio-net,tap1 -s 3:0,virtio-blk,./disk.img \
+-s 4:0,ahci-cd,./install.iso -c 4 -m 1024M \
+-l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd,/path/to/vm-image/BHYVE_UEFI_VARS.fd \
+guest
+....
+
+You can use man:efivar[8] to view and modify the variables file contents from the host.
+
package:sysutils/bhyve-firmware[] also contains a CSM-enabled firmware, to boot guests with no UEFI support in legacy BIOS mode:
[source,shell]
@@ -812,6 +785,15 @@ When starting the VM, specify the ZFS volume as the disk drive:
-l com1,stdio -c 4 -m 1024M linuxguest
....
+If you are using ZFS for the host as well as inside a guest, keep in mind the competing memory pressure of both systems caching the virtual machine's contents.
+To alleviate this, consider setting the host's ZFS filesystems to use metadata-only cache.
+To do this, apply the following settings to ZFS filesystems on the host, replacing `<name>` with the name of the specific zvol dataset name of the virtual machine.
+
+[source,shell]
+....
+# zfs set primarycache=metadata <name>
+....
+
[[virtualization-bhyve-nmdm]]
=== Virtual Machine Consoles
@@ -834,6 +816,16 @@ Ubuntu 13.10 handbook ttyS0
handbook login:
....
+To disconnect from a console, enter a newline (i.e. press `RETURN`) follwed by tilde (`~`), and finally dot (`.`).
+Keep in mind that only the connection is dropped while the login session remains active.
+Another user connecting to the same console could therefore make use of any active sessions without having to first authenticate.
+For security reasons, it's therefore recommended to logout before disconnecting.
+
+The number in the [.filename]#nmdm# device path must be unique for each virtual machine and must not be used by any other processes before bhyve starts.
+The number can be chosen arbitrarily and does not need to be taken from a consecutive sequence of numbers.
+The device node pair (i.e. [.filename]#/dev/nmdm0a# and [.filename]#/dev/nmdm0b#) are created dynamically when bhyve connects its console and destroyed when it shuts down.
+Keep this in mind when creating scripts to start your virtual machines: you need to make sure that all virtual machines are assigned unique [.filename]#nmdm# devices.
+
[[virtualization-bhyve-managing]]
=== Managing Virtual Machines
@@ -858,6 +850,58 @@ A specified virtual machine can be destroyed using `bhyvectl`:
# bhyvectl --destroy --vm=guestname
....
+Destroying a virtual machine this way means killing it immediately. Any unsaved data will be lost, open files and filesystems may get corrupted.
+To gracefully shut down a virtual machine, you can instead send a `TERM` signal to its bhyve process. This triggers an ACPI shutdown event for the guest:
+
+[source,shell]
+....
+# ps ax | grep bhyve
+17424 - SC 56:48.27 bhyve: guestvm (bhyve)
+# kill 17424
+....
+
+[[virtualization-tools-utilities]]
+=== Tools and Utilities
+
+There are numerous utilities and applications available in ports to help simplify setting up and managing bhyve virtual machines:
+
+.bhyve Managers
+[options="header", cols="1,1,1,1"]
+|===
+| Name | License | Package | Documentation
+
+| vm-bhyve
+| BSD-2
+| package:sysutils/vm-bhyve[]
+| link:https://github.com/churchers/vm-bhyve[Documentation]
+
+| CBSD
+| BSD-2
+| package:sysutils/cbsd[]
+| link:https://www.bsdstore.ru[Documentation]
+
+| Virt-Manager
+| LGPL-3
+| package:deskutils/virt-manager[]
+| link:https://virt-manager.org/[Documentation]
+
+| Bhyve RC Script
+| Unknown
+| package:sysutils/bhyve-rc[]
+| link:https://www.freshports.org/sysutils/bhyve-rc/[Documentation]
+
+| bmd
+| Unknown
+| package:sysutils/bmd[]
+| link:https://github.com/yuichiro-naito/bmd[Documentation]
+
+| vmstated
+| BSD-2
+| package:sysutils/vmstated[]
+| link:https://github.com/christian-moerz/vmstated[Documentation]
+
+|===
+
[[virtualization-bhyve-onboot]]
=== Persistent Configuration
@@ -916,7 +960,7 @@ In order to run a FreeBSD Xen(TM) Dom0 the box must be booted using legacy boot
[[virtualization-host-xen-dom0-setup]]
=== Xen(TM) Dom0 Control Domain Setup
-Users of FreeBSD 11 should install the package:emulators/xen-kernel47[] and package:sysutils/xen-tools47[] packages that are based on Xen version 4.7. Systems running on FreeBSD-12.0 or newer can use Xen 4.11 provided by package:emulators/xen-kernel411[] and package:sysutils/xen-tools411[], respectively.
+Users should install the package:emulators/xen-kernel[] and package:sysutils/xen-tools[] packages, based on Xen(TM) 4.18.
Configuration files must be edited to prepare the host for the Dom0 integration after the Xen packages are installed.
An entry to [.filename]#/etc/sysctl.conf# disables the limit on how many pages of memory are allowed to be wired.
@@ -1028,7 +1072,7 @@ The ISO installation file is retrieved with man:fetch[1] and saved locally in a
[source,shell]
....
-# fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/12.0/FreeBSD-12.0-RELEASE-amd64-bootonly.iso -o freebsd.iso
+# fetch https://download.freebsd.org/releases/ISO-IMAGES/14.0/FreeBSD-14.0-RELEASE-amd64-bootonly.iso -o freebsd.iso
....
A ZFS volume of 20 GB called [.filename]#xendisk0# is created to serve as the disk space for the VM.
@@ -1099,7 +1143,7 @@ freebsd 1 1024 1 -b---- 663.9
To begin the installation of the base operating system, start the VNC client, directing it to the main network address of the host or to the IP address defined on the `vnclisten` line of [.filename]#freebsd.cfg#.
After the operating system has been installed, shut down the DomU and disconnect the VNC viewer.
-Edit [.filename]#freebsd.cfg#, removing the line with the `cdrom` definition or commenting it out by inserting a `#` character at the beginning of the line.
+Edit [.filename]#freebsd.cfg#, removing the line with the `cdrom` definition or commenting it out by inserting a `+#+` character at the beginning of the line.
To load this new configuration, it is necessary to remove the old DomU with `xl destroy`, passing either the name or the id as the parameter.
Afterwards, recreate it using the modified [.filename]*freebsd.cfg*.
diff --git a/documentation/content/en/books/handbook/virtualization/_index.po b/documentation/content/en/books/handbook/virtualization/_index.po
new file mode 100644
index 0000000000..5fbc1c6151
--- /dev/null
+++ b/documentation/content/en/books/handbook/virtualization/_index.po
@@ -0,0 +1,2223 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1
+#, no-wrap
+msgid "Virtualization software allows multiple operating systems to run simultaneously on the same computer"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1
+#, no-wrap
+msgid "Part III. System Administration"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1
+#, no-wrap
+msgid "Chapter 24. Virtualization"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:14
+#, no-wrap
+msgid "Virtualization"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:56
+msgid ""
+"Virtualization software allows multiple operating systems to run "
+"simultaneously on the same computer. Such software systems for PCs often "
+"involve a host operating system which runs the virtualization software and "
+"supports any number of guest operating systems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:58
+msgid "After reading this chapter, you will know:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:60
+msgid ""
+"The difference between a host operating system and a guest operating system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:61
+msgid "How to install FreeBSD on the following virtualization platforms:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:62
+msgid "Parallels Desktop(Apple(R) macOS(R))"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:63
+msgid "VMware Fusion(Apple(R) macOS(R))"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:64
+msgid ""
+"VirtualBox(TM)(Microsoft(R) Windows(R), Intel(R)-based Apple(R) macOS(R), "
+"Linux)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:65
+msgid "bhyve(FreeBSD)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:66
+msgid "How to tune a FreeBSD system for best performance under virtualization."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:68
+msgid "Before reading this chapter, you should:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:70
+msgid "Understand the crossref:basics[basics,basics of UNIX(R) and FreeBSD]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:71
+msgid "Know how to crossref:bsdinstall[bsdinstall,install FreeBSD]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:72
+msgid ""
+"Know how to crossref:advanced-networking[advanced-networking,set up a "
+"network connection]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:73
+msgid ""
+"Know how to crossref:ports[ports,install additional third-party software]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:75
+#, no-wrap
+msgid "FreeBSD as a Guest on Parallels Desktop for macOS(R)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:80
+msgid ""
+"Parallels Desktop for Mac(R) is a commercial software product available for "
+"Apple(R) Mac(R) computers running macOS(R) 10.14.6 or higher. FreeBSD is a "
+"fully supported guest operating system. Once Parallels has been installed "
+"on macOS(R), the user must configure a virtual machine and then install the "
+"desired guest operating system."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:82
+#, no-wrap
+msgid "Installing FreeBSD on Parallels Desktop on Mac(R)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:85
+msgid ""
+"The first step in installing FreeBSD on Parallels is to create a new virtual "
+"machine for installing FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:87
+msgid ""
+"Choose menu:Install Windows or another OS from a DVD or image file[] and "
+"proceed."
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:88
+#, no-wrap
+msgid "Parallels setup wizard showing Install Windows or another OS from a DVD or image file chosen"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:88
+#, no-wrap
+msgid "parallels-freebsd1.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:91
+msgid "Select the FreeBSD image file."
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:92
+#, no-wrap
+msgid "Parallels setup wizard showing FreeBSD image file selected"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:92
+#, no-wrap
+msgid "parallels-freebsd2.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:95
+msgid "Choose menu:Other as operating system[]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:99
+msgid "Choosing FreeBSD will cause boot error on startup."
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:101
+#, no-wrap
+msgid "Parallels setup wizard showing Other selected as operating system"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:101
+#, no-wrap
+msgid "parallels-freebsd3.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:104
+msgid ""
+"Name the virtual machine and check menu:Customize settings before "
+"installation[]"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:105
+#, no-wrap
+msgid "Parallels setup wizard showing the checkbox checked for customizing settings before installation"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:105
+#, no-wrap
+msgid "parallels-freebsd4.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:109
+msgid ""
+"When the configuration window pops up, go to menu:Hardware[] tab, choose "
+"menu:Boot order[], and click menu:Advanced[]. Then, choose *EFI 64-bit* as "
+"menu:BIOS[]."
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:110
+#, no-wrap
+msgid "Parallels setup wizard showing EFI 64-bit chosen as BIOS"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:110
+#, no-wrap
+msgid "parallels-freebsd5.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:113
+msgid ""
+"Click menu:OK[], close the configuration window, and click menu:Continue[]."
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:114
+#, no-wrap
+msgid "Parallels setup wizard showing the summary of the new virtual machine"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:114
+#, no-wrap
+msgid "parallels-freebsd6.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:118
+msgid ""
+"The virtual machine will automatically boot. Install FreeBSD following the "
+"general steps."
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:119
+#, no-wrap
+msgid "FreeBSD booted on Parallels"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:119
+#, no-wrap
+msgid "parallels-freebsd7.png"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:122
+#, no-wrap
+msgid "Configuring FreeBSD on Parallels"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:125
+msgid ""
+"After FreeBSD has been successfully installed on macOS(R) X with Parallels, "
+"there are a number of configuration steps that can be taken to optimize the "
+"system for virtualized operation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:128
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:234
+msgid "Set Boot Loader Variables"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:131
+msgid ""
+"The most important step is to reduce the `kern.hz` tunable to reduce the CPU "
+"utilization of FreeBSD under the Parallels environment. This is "
+"accomplished by adding the following line to [.filename]#/boot/loader.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:135
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:241
+#, no-wrap
+msgid "kern.hz=100\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:139
+msgid ""
+"Without this setting, an idle FreeBSD Parallels guest will use roughly 15% "
+"of the CPU of a single processor iMac(R). After this change the usage will "
+"be closer to 5%."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:140
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:246
+msgid "Create a New Kernel Configuration File"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:143
+msgid ""
+"All of the SCSI, FireWire, and USB device drivers can be removed from a "
+"custom kernel configuration file. Parallels provides a virtual network "
+"adapter used by the man:ed[4] driver, so all network devices except for man:"
+"ed[4] and man:miibus[4] can be removed from the kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:144
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:250
+msgid "Configure Networking"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:148
+msgid ""
+"The most basic networking setup uses DHCP to connect the virtual machine to "
+"the same local area network as the host Mac(R). This can be accomplished by "
+"adding `ifconfig_ed0=\"DHCP\"` to [.filename]#/etc/rc.conf#. More advanced "
+"networking setups are described in crossref:advanced-networking[advanced-"
+"networking,Advanced Networking]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:150
+#, no-wrap
+msgid "FreeBSD as a Guest on VMware Fusion for macOS(R)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:155
+msgid ""
+"VMware Fusion for Mac(R) is a commercial software product available for "
+"Apple(R) Mac(R) computers running macOS(R) 12 or higher. FreeBSD is a fully "
+"supported guest operating system. Once VMware Fusion has been installed on "
+"macOS(R), the user can configure a virtual machine and then install the "
+"desired guest operating system."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:157
+#, no-wrap
+msgid "Installing FreeBSD on VMware Fusion"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:161
+msgid ""
+"The first step is to start VMware Fusion which will load the Virtual Machine "
+"Library. Click [.guimenuitem]#+->New# to create the virtual machine:"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:162
+#, no-wrap
+msgid "vmware-freebsd01.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:166
+msgid ""
+"This will load the New Virtual Machine Assistant. Choose [."
+"guimenuitem]#Create a custom virtual machine# and click [."
+"guimenuitem]#Continue# to proceed:"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:167
+#, no-wrap
+msgid "vmware-freebsd02.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:170
+msgid ""
+"Select [.guimenuitem]#Other# as the [.guimenuitem]#Operating System# and "
+"either [.guimenuitem]#FreeBSD X# or [.guimenuitem]#FreeBSD X 64-bit#, as the "
+"menu:Version[] when prompted:"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:171
+#, no-wrap
+msgid "vmware-freebsd03.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:174
+msgid "Choose the firmware(UEFI is recommended):"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:175
+#, no-wrap
+msgid "vmware-freebsd04.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:178
+msgid ""
+"Choose [.guimenuitem]#Create a new virtual disk# and click [."
+"guimenuitem]#Continue#:"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:179
+#, no-wrap
+msgid "vmware-freebsd05.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:182
+msgid "Check the configuration and click [.guimenuitem]#Finish#:"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:183
+#, no-wrap
+msgid "vmware-freebsd06.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:186
+msgid ""
+"Choose the name of the virtual machine and the directory where it should be "
+"saved:"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:187
+#, no-wrap
+msgid "vmware-freebsd07.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:190
+msgid ""
+"Press command+E to open virtual machine settings and click [.guimenuitem]#CD/"
+"DVD#:"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:191
+#, no-wrap
+msgid "vmware-freebsd08.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:194
+msgid "Choose FreeBSD ISO image or from a CD/DVD:"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:195
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:217
+#, no-wrap
+msgid "vmware-freebsd09.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:198
+msgid "Start the virtual machine:"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:199
+#, no-wrap
+msgid "vmware-freebsd10.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:202
+msgid "Install FreeBSD as usual:"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:203
+#, no-wrap
+msgid "vmware-freebsd11.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:206
+msgid ""
+"Once the install is complete, the settings of the virtual machine can be "
+"modified, such as memory usage and the number of CPUs the virtual machine "
+"will have access to:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:210
+msgid ""
+"The System Hardware settings of the virtual machine cannot be modified while "
+"the virtual machine is running."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:212
+#, no-wrap
+msgid "vmware-freebsd12.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:216
+msgid ""
+"The status of the CD-ROM device. Normally the CD/DVD/ISO is disconnected "
+"from the virtual machine when it is no longer needed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:222
+msgid ""
+"The last thing to change is how the virtual machine will connect to the "
+"network. To allow connections to the virtual machine from other machines "
+"besides the host, choose [.guimenuitem]#Connect directly to the physical "
+"network (Bridged)#. Otherwise, [.guimenuitem]#Share the host's internet "
+"connection (NAT)# is preferred so that the virtual machine can have access "
+"to the Internet, but the network cannot access the virtual machine."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:223
+#, no-wrap
+msgid "vmware-freebsd13.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:226
+msgid ""
+"After modifying the settings, boot the newly installed FreeBSD virtual "
+"machine."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:228
+#, no-wrap
+msgid "Configuring FreeBSD on VMware Fusion"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:231
+msgid ""
+"After FreeBSD has been successfully installed on macOS(R) X with VMware "
+"Fusion, there are a number of configuration steps that can be taken to "
+"optimize the system for virtualized operation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:237
+msgid ""
+"The most important step is to reduce the `kern.hz` tunable to reduce the CPU "
+"utilization of FreeBSD under the VMware Fusion environment. This is "
+"accomplished by adding the following line to [.filename]#/boot/loader.conf#:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:245
+msgid ""
+"Without this setting, an idle FreeBSD VMware Fusion guest will use roughly "
+"15% of the CPU of a single processor iMac(R). After this change, the usage "
+"will be closer to 5%."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:249
+msgid ""
+"All of the FireWire, and USB device drivers can be removed from a custom "
+"kernel configuration file. VMware Fusion provides a virtual network adapter "
+"used by the man:em[4] driver, so all network devices except for man:em[4] "
+"can be removed from the kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:254
+msgid ""
+"The most basic networking setup uses DHCP to connect the virtual machine to "
+"the same local area network as the host Mac(R). This can be accomplished by "
+"adding `ifconfig_em0=\"DHCP\"` to [.filename]#/etc/rc.conf#. More advanced "
+"networking setups are described in crossref:advanced-networking[advanced-"
+"networking,Advanced Networking]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:256
+msgid "Install drivers and open-vm-tools"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:258
+msgid "To run FreeBSD smoothly on VMWare, drivers should be installed:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:262
+#, no-wrap
+msgid "# pkg install xf86-video-vmware xf86-input-vmmouse open-vm-tools\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:265
+#, no-wrap
+msgid "FreeBSD as a Guest on VirtualBox(TM)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:269
+msgid ""
+"FreeBSD works well as a guest in VirtualBox(TM). The virtualization "
+"software is available for most common operating systems, including FreeBSD "
+"itself."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:271
+msgid "The VirtualBox(TM) guest additions provide support for:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:273
+msgid "Clipboard sharing."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:274
+msgid "Mouse pointer integration."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:275
+msgid "Host time synchronization."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:276
+msgid "Window scaling."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:277
+msgid "Seamless mode."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:281
+msgid "These commands are run in the FreeBSD guest."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:285
+msgid ""
+"First, install the package:emulators/virtualbox-ose-additions[] package or "
+"port in the FreeBSD guest. This will install the port:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:289
+#, no-wrap
+msgid "# cd /usr/ports/emulators/virtualbox-ose-additions && make install clean\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:292
+msgid "Add these lines to [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:297
+#, no-wrap
+msgid ""
+"vboxguest_enable=\"YES\"\n"
+"vboxservice_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:300
+msgid ""
+"If man:ntpd[8] or man:ntpdate[8] is used, disable host time synchronization:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:304
+#, no-wrap
+msgid "vboxservice_flags=\"--disable-timesync\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:308
+msgid ""
+"Xorg will automatically recognize the `vboxvideo` driver. It can also be "
+"manually entered in [.filename]#/etc/X11/xorg.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:317
+#, no-wrap
+msgid ""
+"Section \"Device\"\n"
+"\tIdentifier \"Card0\"\n"
+"\tDriver \"vboxvideo\"\n"
+"\tVendorName \"InnoTek Systemberatung GmbH\"\n"
+"\tBoardName \"VirtualBox Graphics Adapter\"\n"
+"EndSection\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:320
+msgid ""
+"To use the `vboxmouse` driver, adjust the mouse section in [.filename]#/etc/"
+"X11/xorg.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:327
+#, no-wrap
+msgid ""
+"Section \"InputDevice\"\n"
+"\tIdentifier \"Mouse0\"\n"
+"\tDriver \"vboxmouse\"\n"
+"EndSection\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:332
+msgid ""
+"Shared folders for file transfers between host and VM are accessible by "
+"mounting them using `mount_vboxvfs`. A shared folder can be created on the "
+"host using the VirtualBox GUI or via `vboxmanage`. For example, to create a "
+"shared folder called _myshare_ under [.filename]#/mnt/bsdboxshare# for the "
+"VM named _BSDBox_, run:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:336
+#, no-wrap
+msgid "# vboxmanage sharedfolder add 'BSDBox' --name myshare --hostpath /mnt/bsdboxshare\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:340
+msgid ""
+"Note that the shared folder name must not contain spaces. Mount the shared "
+"folder from within the guest system like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:344
+#, no-wrap
+msgid "# mount_vboxvfs -w myshare /mnt\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:347
+#, no-wrap
+msgid "FreeBSD as a Host with VirtualBox(TM)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:355
+msgid ""
+"VirtualBox(TM) is an actively developed, complete virtualization package, "
+"that is available for most operating systems including Windows(R), macOS(R), "
+"Linux(R) and FreeBSD. It is equally capable of running Windows(R) or "
+"UNIX(R)-like guests. It is released as open source software, but with "
+"closed-source components available in a separate extension pack. These "
+"components include support for USB 2.0 devices. More information may be "
+"found on the http://www.virtualbox.org/wiki/Downloads[Downloads page of the "
+"VirtualBox(TM) wiki]. Currently, these extensions are not available for "
+"FreeBSD."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:357
+#, no-wrap
+msgid "Installing VirtualBox(TM)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:361
+msgid ""
+"VirtualBox(TM) is available as a FreeBSD package or port in package:"
+"emulators/virtualbox-ose[]. The port can be installed using these commands:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:366
+#, no-wrap
+msgid ""
+"# cd /usr/ports/emulators/virtualbox-ose\n"
+"# make install clean\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:371
+msgid ""
+"One useful option in the port's configuration menu is the `GuestAdditions` "
+"suite of programs. These provide a number of useful features in guest "
+"operating systems, like mouse pointer integration (allowing the mouse to be "
+"shared between host and guest without the need to press a special keyboard "
+"shortcut to switch) and faster video rendering, especially in Windows(R) "
+"guests. The guest additions are available in the menu:Devices[] menu, after "
+"the installation of the guest is finished."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:374
+msgid ""
+"A few configuration changes are needed before VirtualBox(TM) is started for "
+"the first time. The port installs a kernel module in [.filename]#/boot/"
+"modules# which must be loaded into the running kernel:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:378
+#, no-wrap
+msgid "# kldload vboxdrv\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:381
+msgid ""
+"To ensure the module is always loaded after a reboot, add this line to [."
+"filename]#/boot/loader.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:385
+#, no-wrap
+msgid "vboxdrv_load=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:388
+msgid ""
+"To use the kernel modules that allow bridged or host-only networking, add "
+"this line to [.filename]#/etc/rc.conf# and reboot the computer:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:392
+#, no-wrap
+msgid "vboxnet_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:397
+msgid ""
+"The `vboxusers` group is created during installation of VirtualBox(TM). All "
+"users that need access to VirtualBox(TM) will have to be added as members of "
+"this group. `pw` can be used to add new members:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:401
+#, no-wrap
+msgid "# pw groupmod vboxusers -m yourusername\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:404
+msgid ""
+"The default permissions for [.filename]#/dev/vboxnetctl# are restrictive and "
+"need to be changed for bridged networking:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:409
+#, no-wrap
+msgid ""
+"# chown root:vboxusers /dev/vboxnetctl\n"
+"# chmod 0660 /dev/vboxnetctl\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:412
+msgid ""
+"To make this permissions change permanent, add these lines to [.filename]#/"
+"etc/devfs.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:417
+#, no-wrap
+msgid ""
+"own vboxnetctl root:vboxusers\n"
+"perm vboxnetctl 0660\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:420
+msgid "To launch VirtualBox(TM), type from an Xorg session:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:424
+#, no-wrap
+msgid "% VirtualBox\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:428
+msgid ""
+"For more information on configuring and using VirtualBox(TM), refer to the "
+"http://www.virtualbox.org[official website]. For FreeBSD-specific "
+"information and troubleshooting instructions, refer to the http://wiki."
+"FreeBSD.org/VirtualBox[relevant page in the FreeBSD wiki]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:430
+#, no-wrap
+msgid "VirtualBox(TM) USB Support"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:434
+msgid ""
+"VirtualBox(TM) can be configured to pass USB devices through to the guest "
+"operating system. The host controller of the OSE version is limited to "
+"emulating USB 1.1 devices until the extension pack supporting USB 2.0 and "
+"3.0 devices becomes available on FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:436
+msgid ""
+"For VirtualBox(TM) to be aware of USB devices attached to the machine, the "
+"user needs to be a member of the `operator` group."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:440
+#, no-wrap
+msgid "# pw groupmod operator -m yourusername\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:443
+msgid ""
+"Then, add the following to [.filename]#/etc/devfs.rules#, or create this "
+"file if it does not exist yet:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:448
+#, no-wrap
+msgid ""
+"[system=10]\n"
+"add path 'usb/*' mode 0660 group operator\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:451
+msgid ""
+"To load these new rules, add the following to [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:455
+#, no-wrap
+msgid "devfs_system_ruleset=\"system\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:458
+msgid "Then, restart devfs:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:462
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:490
+#, no-wrap
+msgid "# service devfs restart\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:465
+msgid ""
+"Restart the login session and VirtualBox(TM) for these changes to take "
+"effect, and create USB filters as necessary."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:467
+#, no-wrap
+msgid "VirtualBox(TM) Host DVD/CD Access"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:475
+msgid ""
+"Access to the host DVD/CD drives from guests is achieved through the sharing "
+"of the physical drives. Within VirtualBox(TM), this is set up from the "
+"Storage window in the Settings of the virtual machine. If needed, create an "
+"empty IDECD/DVD device first. Then choose the Host Drive from the popup "
+"menu for the virtual CD/DVD drive selection. A checkbox labeled "
+"`Passthrough` will appear. This allows the virtual machine to use the "
+"hardware directly. For example, audio CDs or the burner will only function "
+"if this option is selected."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:479
+msgid ""
+"In order for users to be able to use VirtualBox(TM)DVD/CD functions, they "
+"need access to [.filename]#/dev/xpt0#, [.filename]#/dev/cdN#, and [."
+"filename]#/dev/passN#. This is usually achieved by making the user a member "
+"of `operator`. Permissions to these devices have to be corrected by adding "
+"these lines to [.filename]#/etc/devfs.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:485
+#, no-wrap
+msgid ""
+"perm cd* 0660\n"
+"perm xpt0 0660\n"
+"perm pass* 0660\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:493
+#, no-wrap
+msgid "FreeBSD as a Host with bhyve"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:499
+msgid ""
+"The bhyve BSD-licensed hypervisor became part of the base system with "
+"FreeBSD 10.0-RELEASE. This hypervisor supports a number of guests, "
+"including FreeBSD, OpenBSD, and many Linux(R) distributions. By default, "
+"bhyve provides access to serial console and does not emulate a graphical "
+"console. Virtualization offload features of newer CPUs are used to avoid "
+"the legacy methods of translating instructions and manually managing memory "
+"mappings."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:507
+msgid ""
+"The bhyve design requires a processor that supports Intel(R) Extended Page "
+"Tables (EPT) or AMD(R) Rapid Virtualization Indexing (RVI) or Nested Page "
+"Tables (NPT). Hosting Linux(R) guests or FreeBSD guests with more than one "
+"vCPU requires VMX unrestricted mode support (UG). Most newer processors, "
+"specifically the Intel(R) Core(TM) i3/i5/i7 and Intel(R) Xeon(TM) E3/E5/E7, "
+"support these features. UG support was introduced with Intel's Westmere "
+"micro-architecture. For a complete list of Intel(R) processors that support "
+"EPT, refer to https://ark.intel.com/content/www/us/en/ark/search/"
+"featurefilter.html?productType=873&0_ExtendedPageTables=True[]. RVI is "
+"found on the third generation and later of the AMD Opteron(TM) (Barcelona) "
+"processors. The easiest way to tell if a processor supports bhyve is to run "
+"`dmesg` or look in [.filename]#/var/run/dmesg.boot# for the `POPCNT` "
+"processor feature flag on the `Features2` line for AMD(R) processors or "
+"`EPT` and `UG` on the `VT-x` line for Intel(R) processors."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:509
+#, no-wrap
+msgid "Preparing the Host"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:513
+msgid ""
+"The first step to creating a virtual machine in bhyve is configuring the "
+"host system. First, load the bhyve kernel module:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:517
+#, no-wrap
+msgid "# kldload vmm\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:522
+msgid ""
+"Then, create a [.filename]#tap# interface for the network device in the "
+"virtual machine to attach to. In order for the network device to "
+"participate in the network, also create a bridge interface containing the [."
+"filename]#tap# interface and the physical interface as members. In this "
+"example, the physical interface is _igb0_:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:531
+#, no-wrap
+msgid ""
+"# ifconfig tap0 create\n"
+"# sysctl net.link.tap.up_on_open=1\n"
+"net.link.tap.up_on_open: 0 -> 1\n"
+"# ifconfig bridge0 create\n"
+"# ifconfig bridge0 addm igb0 addm tap0\n"
+"# ifconfig bridge0 up\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:534
+#, no-wrap
+msgid "Creating a FreeBSD Guest"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:538
+msgid ""
+"Create a file to use as the virtual disk for the guest machine. Specify the "
+"size and name of the virtual disk:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:542
+#, no-wrap
+msgid "# truncate -s 16G guest.img\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:545
+msgid "Download an installation image of FreeBSD to install:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:550
+#, no-wrap
+msgid ""
+"# fetch https://download.freebsd.org/releases/ISO-IMAGES/13.1/FreeBSD-13.1-RELEASE-amd64-bootonly.iso\n"
+"FreeBSD-13.1-RELEASE-amd64-bootonly.iso 366 MB 16 MBps 22s\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:557
+msgid ""
+"FreeBSD comes with an example script for running a virtual machine in "
+"bhyve. The script will start the virtual machine and run it in a loop, so "
+"it will automatically restart if it crashes. The script takes a number of "
+"options to control the configuration of the machine: `-c` controls the "
+"number of virtual CPUs, `-m` limits the amount of memory available to the "
+"guest, `-t` defines which [.filename]#tap# device to use, `-d` indicates "
+"which disk image to use, `-i` tells bhyve to boot from the CD image instead "
+"of the disk, and `-I` defines which CD image to use. The last parameter is "
+"the name of the virtual machine, used to track the running machines. This "
+"example starts the virtual machine in installation mode:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:561
+#, no-wrap
+msgid "# sh /usr/share/examples/bhyve/vmrun.sh -c 1 -m 1024M -t tap0 -d guest.img -i -I FreeBSD-13.1-RELEASE-amd64-bootonly.iso guestname\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:565
+msgid ""
+"The virtual machine will boot and start the installer. After installing a "
+"system in the virtual machine, when the system asks about dropping in to a "
+"shell at the end of the installation, choose btn:[Yes]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:570
+msgid ""
+"Reboot the virtual machine. While rebooting the virtual machine causes "
+"bhyve to exit, the [.filename]#vmrun.sh# script runs `bhyve` in a loop and "
+"will automatically restart it. When this happens, choose the reboot option "
+"from the boot loader menu in order to escape the loop. Now the guest can be "
+"started from the virtual disk:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:574
+#, no-wrap
+msgid "# sh /usr/share/examples/bhyve/vmrun.sh -c 4 -m 1024M -t tap0 -d guest.img guestname\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:577
+#, no-wrap
+msgid "Creating a Linux(R) Guest"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:580
+msgid ""
+"In order to boot operating systems other than FreeBSD, the package:sysutils/"
+"grub2-bhyve[] port must be first installed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:582
+msgid "Next, create a file to use as the virtual disk for the guest machine:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:586
+#, no-wrap
+msgid "# truncate -s 16G linux.img\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:592
+msgid ""
+"Starting a virtual machine with bhyve is a two step process. First a kernel "
+"must be loaded, then the guest can be started. The Linux(R) kernel is "
+"loaded with package:sysutils/grub2-bhyve[]. Create a [.filename]#device."
+"map# that grub will use to map the virtual devices to the files on the host "
+"system:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:597
+#, no-wrap
+msgid ""
+"(hd0) ./linux.img\n"
+"(cd0) ./somelinux.iso\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:600
+msgid ""
+"Use package:sysutils/grub2-bhyve[] to load the Linux(R) kernel from the ISO "
+"image:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:604
+#, no-wrap
+msgid "# grub-bhyve -m device.map -r cd0 -M 1024M linuxguest\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:609
+msgid ""
+"This will start grub. If the installation CD contains a [.filename]#grub."
+"cfg#, a menu will be displayed. If not, the `vmlinuz` and `initrd` files "
+"must be located and loaded manually:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:620
+#, no-wrap
+msgid ""
+"grub> ls\n"
+"(hd0) (cd0) (cd0,msdos1) (host)\n"
+"grub> ls (cd0)/isolinux\n"
+"boot.cat boot.msg grub.conf initrd.img isolinux.bin isolinux.cfg memtest\n"
+"splash.jpg TRANS.TBL vesamenu.c32 vmlinuz\n"
+"grub> linux (cd0)/isolinux/vmlinuz\n"
+"grub> initrd (cd0)/isolinux/initrd.img\n"
+"grub> boot\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:623
+msgid "Now that the Linux(R) kernel is loaded, the guest can be started:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:628
+#, no-wrap
+msgid ""
+"# bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0 -s 3:0,virtio-blk,./linux.img \\\n"
+" -s 4:0,ahci-cd,./somelinux.iso -l com1,stdio -c 4 -m 1024M linuxguest\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:634
+msgid ""
+"The system will boot and start the installer. After installing a system in "
+"the virtual machine, reboot the virtual machine. This will cause bhyve to "
+"exit. The instance of the virtual machine needs to be destroyed before it "
+"can be started again:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:638
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:674
+#, no-wrap
+msgid "# bhyvectl --destroy --vm=linuxguest\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:642
+msgid ""
+"Now the guest can be started directly from the virtual disk. Load the "
+"kernel:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:656
+#, no-wrap
+msgid ""
+"# grub-bhyve -m device.map -r hd0,msdos1 -M 1024M linuxguest\n"
+"grub> ls\n"
+"(hd0) (hd0,msdos2) (hd0,msdos1) (cd0) (cd0,msdos1) (host)\n"
+"(lvm/VolGroup-lv_swap) (lvm/VolGroup-lv_root)\n"
+"grub> ls (hd0,msdos1)/\n"
+"lost+found/ grub/ efi/ System.map-2.6.32-431.el6.x86_64 config-2.6.32-431.el6.x\n"
+"86_64 symvers-2.6.32-431.el6.x86_64.gz vmlinuz-2.6.32-431.el6.x86_64\n"
+"initramfs-2.6.32-431.el6.x86_64.img\n"
+"grub> linux (hd0,msdos1)/vmlinuz-2.6.32-431.el6.x86_64 root=/dev/mapper/VolGroup-lv_root\n"
+"grub> initrd (hd0,msdos1)/initramfs-2.6.32-431.el6.x86_64.img\n"
+"grub> boot\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:659
+msgid "Boot the virtual machine:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:664
+#, no-wrap
+msgid ""
+"# bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0 \\\n"
+" -s 3:0,virtio-blk,./linux.img -l com1,stdio -c 4 -m 1024M linuxguest\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:670
+msgid ""
+"Linux(R) will now boot in the virtual machine and eventually present you "
+"with the login prompt. Login and use the virtual machine. When you are "
+"finished, reboot the virtual machine to exit bhyve. Destroy the virtual "
+"machine instance:"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:677
+#, no-wrap
+msgid "Booting bhyve Virtual Machines with UEFI Firmware"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:681
+msgid ""
+"In addition to bhyveload and grub-bhyve, the bhyve hypervisor can also boot "
+"virtual machines using the UEFI userspace firmware. This option may support "
+"guest operating systems that are not supported by the other loaders."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:684
+msgid ""
+"In order to make use of the UEFI support in bhyve, first obtain the UEFI "
+"firmware images. This can be done by installing package:sysutils/bhyve-"
+"firmware[] port or package."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:687
+msgid ""
+"With the firmware in place, add the flags `-l bootrom,_/path/to/firmware_` "
+"to your bhyve command line. The actual bhyve command may look like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:695
+#, no-wrap
+msgid ""
+"# bhyve -AHP -s 0:0,hostbridge -s 1:0,lpc \\\n"
+"-s 2:0,virtio-net,tap1 -s 3:0,virtio-blk,./disk.img \\\n"
+"-s 4:0,ahci-cd,./install.iso -c 4 -m 1024M \\\n"
+"-l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd \\\n"
+"guest\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:698
+msgid ""
+"package:sysutils/bhyve-firmware[] also contains a CSM-enabled firmware, to "
+"boot guests with no UEFI support in legacy BIOS mode:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:706
+#, no-wrap
+msgid ""
+"# bhyve -AHP -s 0:0,hostbridge -s 1:0,lpc \\\n"
+"-s 2:0,virtio-net,tap1 -s 3:0,virtio-blk,./disk.img \\\n"
+"-s 4:0,ahci-cd,./install.iso -c 4 -m 1024M \\\n"
+"-l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI_CSM.fd \\\n"
+"guest\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:709
+#, no-wrap
+msgid "Graphical UEFI Framebuffer for bhyve Guests"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:712
+msgid ""
+"The UEFI firmware support is particularly useful with predominantly "
+"graphical guest operating systems such as Microsoft Windows(R)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:717
+msgid ""
+"Support for the UEFI-GOP framebuffer may also be enabled with the `-s 29,"
+"fbuf,tcp=_0.0.0.0:5900_` flags. The framebuffer resolution may be "
+"configured with `w=_800_` and `h=_600_`, and bhyve can be instructed to wait "
+"for a VNC connection before booting the guest by adding `wait`. The "
+"framebuffer may be accessed from the host or over the network via the VNC "
+"protocol. Additionally, `-s 30,xhci,tablet` can be added to achieve precise "
+"mouse cursor synchronization with the host."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:719
+msgid "The resulting bhyve command would look like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:729
+#, no-wrap
+msgid ""
+"# bhyve -AHP -s 0:0,hostbridge -s 31:0,lpc \\\n"
+"-s 2:0,virtio-net,tap1 -s 3:0,virtio-blk,./disk.img \\\n"
+"-s 4:0,ahci-cd,./install.iso -c 4 -m 1024M \\\n"
+"-s 29,fbuf,tcp=0.0.0.0:5900,w=800,h=600,wait \\\n"
+"-s 30,xhci,tablet \\\n"
+"-l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd \\\n"
+"guest\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:732
+msgid ""
+"Note, in BIOS emulation mode, the framebuffer will cease receiving updates "
+"once control is passed from firmware to guest operating system."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:734
+#, no-wrap
+msgid "Using ZFS with bhyve Guests"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:738
+msgid ""
+"If ZFS is available on the host machine, using ZFS volumes instead of disk "
+"image files can provide significant performance benefits for the guest VMs. "
+"A ZFS volume can be created by:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:742
+#, no-wrap
+msgid "# zfs create -V16G -o volmode=dev zroot/linuxdisk0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:745
+msgid "When starting the VM, specify the ZFS volume as the disk drive:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:750
+#, no-wrap
+msgid ""
+"# bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0 -s3:0,virtio-blk,/dev/zvol/zroot/linuxdisk0 \\\n"
+" -l com1,stdio -c 4 -m 1024M linuxguest\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:753
+#, no-wrap
+msgid "Virtual Machine Consoles"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:760
+msgid ""
+"It is advantageous to wrap the bhyve console in a session management tool "
+"such as package:sysutils/tmux[] or package:sysutils/screen[] in order to "
+"detach and reattach to the console. It is also possible to have the console "
+"of bhyve be a null modem device that can be accessed with `cu`. To do this, "
+"load the [.filename]#nmdm# kernel module and replace `-l com1,stdio` with `-"
+"l com1,/dev/nmdm0A`. The [.filename]#/dev/nmdm# devices are created "
+"automatically as needed, where each is a pair, corresponding to the two ends "
+"of the null modem cable ([.filename]#/dev/nmdm0A# and [.filename]#/dev/"
+"nmdm0B#). See man:nmdm[4] for more information."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:768
+#, no-wrap
+msgid ""
+"# kldload nmdm\n"
+"# bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0 -s 3:0,virtio-blk,./linux.img \\\n"
+" -l com1,/dev/nmdm0A -c 4 -m 1024M linuxguest\n"
+"# cu -l /dev/nmdm0B\n"
+"Connected\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:770
+#, no-wrap
+msgid "Ubuntu 13.10 handbook ttyS0\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:772
+#, no-wrap
+msgid "handbook login:\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:775
+#, no-wrap
+msgid "Managing Virtual Machines"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:779
+msgid ""
+"A device node is created in [.filename]#/dev/vmm# for each virtual machine. "
+"This allows the administrator to easily see a list of the running virtual "
+"machines:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:789
+#, no-wrap
+msgid ""
+"# ls -al /dev/vmm\n"
+"total 1\n"
+"dr-xr-xr-x 2 root wheel 512 Mar 17 12:19 ./\n"
+"dr-xr-xr-x 14 root wheel 512 Mar 17 06:38 ../\n"
+"crw------- 1 root wheel 0x1a2 Mar 17 12:20 guestname\n"
+"crw------- 1 root wheel 0x19f Mar 17 12:19 linuxguest\n"
+"crw------- 1 root wheel 0x1a1 Mar 17 12:19 otherguest\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:792
+msgid "A specified virtual machine can be destroyed using `bhyvectl`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:796
+#, no-wrap
+msgid "# bhyvectl --destroy --vm=guestname\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:799
+#, no-wrap
+msgid "Persistent Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:802
+msgid ""
+"In order to configure the system to start bhyve guests at boot time, the "
+"following configurations must be made in the specified files:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:805
+msgid "[.filename]#/etc/sysctl.conf#"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:809
+#, no-wrap
+msgid "net.link.tap.up_on_open=1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:812
+msgid "[.filename]#/etc/rc.conf#"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:818
+#, no-wrap
+msgid ""
+"cloned_interfaces=\"bridge0 tap0\"\n"
+"ifconfig_bridge0=\"addm igb0 addm tap0\"\n"
+"kld_list=\"nmdm vmm\"\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:821
+#, no-wrap
+msgid "FreeBSD as a Xen(TM)-Host"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:826
+msgid ""
+"Xen is a GPLv2-licensed https://en.wikipedia.org/wiki/"
+"Hypervisor#Classification[type 1 hypervisor] for Intel(R) and ARM(R) "
+"architectures. FreeBSD has included i386(TM) and AMD(R) 64-Bit https://wiki."
+"xenproject.org/wiki/DomU[DomU] and https://en.wikipedia.org/wiki/"
+"Amazon_Elastic_Compute_Cloud[Amazon EC2] unprivileged domain (virtual "
+"machine) support since FreeBSD 8.0 and includes Dom0 control domain (host) "
+"support in FreeBSD 11.0. Support for para-virtualized (PV) domains has been "
+"removed from FreeBSD 11 in favor of hardware virtualized (HVM) domains, "
+"which provides better performance."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:834
+msgid ""
+"Xen(TM) is a bare-metal hypervisor, which means that it is the first program "
+"loaded after the BIOS. A special privileged guest called the Domain-0 "
+"(`Dom0` for short) is then started. The Dom0 uses its special privileges to "
+"directly access the underlying physical hardware, making it a high-"
+"performance solution. It is able to access the disk controllers and network "
+"adapters directly. The Xen(TM) management tools to manage and control the "
+"Xen(TM) hypervisor are also used by the Dom0 to create, list, and destroy "
+"VMs. Dom0 provides virtual disks and networking for unprivileged domains, "
+"often called `DomU`. Xen(TM) Dom0 can be compared to the service console of "
+"other hypervisor solutions, while the DomU is where individual guest VMs are "
+"run."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:841
+msgid ""
+"Xen(TM) can migrate VMs between different Xen(TM) servers. When the two xen "
+"hosts share the same underlying storage, the migration can be done without "
+"having to shut the VM down first. Instead, the migration is performed live "
+"while the DomU is running and there is no need to restart it or plan a "
+"downtime. This is useful in maintenance scenarios or upgrade windows to "
+"ensure that the services provided by the DomU are still provided. Many more "
+"features of Xen(TM) are listed on the https://wiki.xenproject.org/wiki/"
+"Category:Overview[Xen Wiki Overview page]. Note that not all features are "
+"supported on FreeBSD yet."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:843
+#, no-wrap
+msgid "Hardware Requirements for Xen(TM) Dom0"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:847
+msgid ""
+"To run the Xen(TM) hypervisor on a host, certain hardware functionality is "
+"required. Hardware virtualized domains require Extended Page Table (http://"
+"en.wikipedia.org/wiki/Extended_Page_Table[EPT]) and Input/Output Memory "
+"Management Unit (http://en.wikipedia.org/wiki/List_of_IOMMU-"
+"supporting_hardware[IOMMU]) support in the host processor."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:851
+msgid ""
+"In order to run a FreeBSD Xen(TM) Dom0 the box must be booted using legacy "
+"boot (BIOS)."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:854
+#, no-wrap
+msgid "Xen(TM) Dom0 Control Domain Setup"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:857
+msgid ""
+"Users should install the package:emulators/xen-kernel[] and package:sysutils/"
+"xen-tools[] packages, based on Xen(TM) 4.18."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:861
+msgid ""
+"Configuration files must be edited to prepare the host for the Dom0 "
+"integration after the Xen packages are installed. An entry to [.filename]#/"
+"etc/sysctl.conf# disables the limit on how many pages of memory are allowed "
+"to be wired. Otherwise, DomU VMs with higher memory requirements will not "
+"run."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:865
+#, no-wrap
+msgid "# echo 'vm.max_wired=-1' >> /etc/sysctl.conf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:871
+msgid ""
+"Another memory-related setting involves changing [.filename]#/etc/login."
+"conf#, setting the `memorylocked` option to `unlimited`. Otherwise, "
+"creating DomU domains may fail with `Cannot allocate memory` errors. After "
+"making the change to [.filename]#/etc/login.conf#, run `cap_mkdb` to update "
+"the capability database. See crossref:security[security-resourcelimits,"
+"\"Resource Limits\"] for details."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:876
+#, no-wrap
+msgid ""
+"# sed -i '' -e 's/memorylocked=64K/memorylocked=unlimited/' /etc/login.conf\n"
+"# cap_mkdb /etc/login.conf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:879
+msgid "Add an entry for the Xen(TM) console to [.filename]#/etc/ttys#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:883
+#, no-wrap
+msgid "# echo 'xc0 \"/usr/libexec/getty Pc\" xterm onifconsole secure' >> /etc/ttys\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:890
+msgid ""
+"Selecting a Xen(TM) kernel in [.filename]#/boot/loader.conf# activates the "
+"Dom0. Xen(TM) also requires resources like CPU and memory from the host "
+"machine for itself and other DomU domains. How much CPU and memory depends "
+"on the individual requirements and hardware capabilities. In this example, "
+"8 GB of memory and 4 virtual CPUs are made available for the Dom0. The "
+"serial console is also activated and logging options are defined."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:892
+msgid "The following command is used for Xen 4.7 packages:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:899
+#, no-wrap
+msgid ""
+"# echo 'hw.pci.mcfg=0' >> /boot/loader.conf\n"
+"# echo 'if_tap_load=\"YES\"' >> /boot/loader.conf\n"
+"# echo 'xen_kernel=\"/boot/xen\"' >> /boot/loader.conf\n"
+"# echo 'xen_cmdline=\"dom0_mem=8192M dom0_max_vcpus=4 dom0pvh=1 console=com1,vga com1=115200,8n1 guest_loglvl=all loglvl=all\"' >> /boot/loader.conf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:902
+msgid ""
+"For Xen versions 4.11 and higher, the following command should be used "
+"instead:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:908
+#, no-wrap
+msgid ""
+"# echo 'if_tap_load=\"YES\"' >> /boot/loader.conf\n"
+"# echo 'xen_kernel=\"/boot/xen\"' >> /boot/loader.conf\n"
+"# echo 'xen_cmdline=\"dom0_mem=8192M dom0_max_vcpus=4 dom0=pvh console=com1,vga com1=115200,8n1 guest_loglvl=all loglvl=all\"' >> /boot/loader.conf\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:915
+msgid ""
+"Log files that Xen(TM) creates for the DomU VMs are stored in [.filename]#/"
+"var/log/xen#. Please be sure to check the contents of that directory if "
+"experiencing issues."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:918
+msgid "Activate the xencommons service during system startup:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:922
+#, no-wrap
+msgid "# sysrc xencommons_enable=yes\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:928
+msgid ""
+"These settings are enough to start a Dom0-enabled system. However, it lacks "
+"network functionality for the DomU machines. To fix that, define a bridged "
+"interface with the main NIC of the system which the DomU VMs can use to "
+"connect to the network. Replace _em0_ with the host network interface name."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:934
+#, no-wrap
+msgid ""
+"# sysrc cloned_interfaces=\"bridge0\"\n"
+"# sysrc ifconfig_bridge0=\"addm em0 SYNCDHCP\"\n"
+"# sysrc ifconfig_em0=\"up\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:937
+msgid "Restart the host to load the Xen(TM) kernel and start the Dom0."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:941
+#, no-wrap
+msgid "# reboot\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:944
+msgid ""
+"After successfully booting the Xen(TM) kernel and logging into the system "
+"again, the Xen(TM) management tool `xl` is used to show information about "
+"the domains."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:950
+#, no-wrap
+msgid ""
+"# xl list\n"
+"Name ID Mem VCPUs State Time(s)\n"
+"Domain-0 0 8192 4 r----- 962.0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:956
+msgid ""
+"The output confirms that the Dom0 (called `Domain-0`) has the ID `0` and is "
+"running. It also has the memory and virtual CPUs that were defined in [."
+"filename]#/boot/loader.conf# earlier. More information can be found in the "
+"https://www.xenproject.org/help/documentation.html[Xen(TM) Documentation]. "
+"DomU guest VMs can now be created."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:958
+#, no-wrap
+msgid "Xen(TM) DomU Guest VM Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:965
+msgid ""
+"Unprivileged domains consist of a configuration file and virtual or physical "
+"hard disks. Virtual disk storage for the DomU can be files created by man:"
+"truncate[1] or ZFS volumes as described in crossref:zfs[zfs-zfs-"
+"volume,“Creating and Destroying Volumes”]. In this example, a 20 GB volume "
+"is used. A VM is created with the ZFS volume, a FreeBSD ISO image, 1 GB of "
+"RAM and two virtual CPUs. The ISO installation file is retrieved with man:"
+"fetch[1] and saved locally in a file called [.filename]#freebsd.iso#."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:969
+#, no-wrap
+msgid "# fetch https://download.freebsd.org/releases/ISO-IMAGES/13.1/FreeBSD-13.1-RELEASE-amd64-bootonly.iso -o freebsd.iso\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:972
+msgid ""
+"A ZFS volume of 20 GB called [.filename]#xendisk0# is created to serve as "
+"the disk space for the VM."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:976
+#, no-wrap
+msgid "# zfs create -V20G -o volmode=dev zroot/xendisk0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:981
+msgid ""
+"The new DomU guest VM is defined in a file. Some specific definitions like "
+"name, keymap, and VNC connection details are also defined. The following [."
+"filename]#freebsd.cfg# contains a minimum DomU configuration for this "
+"example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:998
+#, no-wrap
+msgid ""
+"# cat freebsd.cfg\n"
+"builder = \"hvm\" <.>\n"
+"name = \"freebsd\" <.>\n"
+"memory = 1024 <.>\n"
+"vcpus = 2 <.>\n"
+"vif = [ 'mac=00:16:3E:74:34:32,bridge=bridge0' ] <.>\n"
+"disk = [\n"
+"'/dev/zvol/tank/xendisk0,raw,hda,rw', <.>\n"
+"'/root/freebsd.iso,raw,hdc:cdrom,r' <.>\n"
+" ]\n"
+"vnc = 1 <.>\n"
+"vnclisten = \"0.0.0.0\"\n"
+"serial = \"pty\"\n"
+"usbdevice = \"tablet\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1001
+msgid "These lines are explained in more detail:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1003
+msgid ""
+"This defines what kind of virtualization to use. `hvm` refers to hardware-"
+"assisted virtualization or hardware virtual machine. Guest operating systems "
+"can run unmodified on CPUs with virtualization extensions, providing nearly "
+"the same performance as running on physical hardware. `generic` is the "
+"default value and creates a PV domain."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1004
+msgid ""
+"Name of this virtual machine to distinguish it from others running on the "
+"same Dom0. Required."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1005
+msgid ""
+"Quantity of RAM in megabytes to make available to the VM. This amount is "
+"subtracted from the hypervisor's total available memory, not the memory of "
+"the Dom0."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1006
+msgid ""
+"Number of virtual CPUs available to the guest VM. For best performance, do "
+"not create guests with more virtual CPUs than the number of physical CPUs on "
+"the host."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1007
+msgid ""
+"Virtual network adapter. This is the bridge connected to the network "
+"interface of the host. The `mac` parameter is the MAC address set on the "
+"virtual network interface. This parameter is optional, if no MAC is provided "
+"Xen(TM) will generate a random one."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1008
+msgid ""
+"Full path to the disk, file, or ZFS volume of the disk storage for this VM. "
+"Options and multiple disk definitions are separated by commas."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1009
+msgid ""
+"Defines the Boot medium from which the initial operating system is "
+"installed. In this example, it is the ISO image downloaded earlier. Consult "
+"the Xen(TM) documentation for other kinds of devices and options to set."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1010
+msgid ""
+"Options controlling VNC connectivity to the serial console of the DomU. In "
+"order, these are: active VNC support, define IP address on which to listen, "
+"device node for the serial console, and the input method for precise "
+"positioning of the mouse and other input methods. `keymap` defines which "
+"keymap to use, and is `english` by default."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1012
+msgid ""
+"After the file has been created with all the necessary options, the DomU is "
+"created by passing it to `xl create` as a parameter."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1016
+#, no-wrap
+msgid "# xl create freebsd.cfg\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1025
+msgid ""
+"Each time the Dom0 is restarted, the configuration file must be passed to "
+"`xl create` again to re-create the DomU. By default, only the Dom0 is "
+"created after a reboot, not the individual VMs. The VMs can continue where "
+"they left off as they stored the operating system on the virtual disk. The "
+"virtual machine configuration can change over time (for example, when adding "
+"more memory). The virtual machine configuration files must be properly "
+"backed up and kept available to be able to re-create the guest VM when "
+"needed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1028
+msgid "The output of `xl list` confirms that the DomU has been created."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1035
+#, no-wrap
+msgid ""
+"# xl list\n"
+"Name ID Mem VCPUs State Time(s)\n"
+"Domain-0 0 8192 4 r----- 1653.4\n"
+"freebsd 1 1024 1 -b---- 663.9\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1042
+msgid ""
+"To begin the installation of the base operating system, start the VNC "
+"client, directing it to the main network address of the host or to the IP "
+"address defined on the `vnclisten` line of [.filename]#freebsd.cfg#. After "
+"the operating system has been installed, shut down the DomU and disconnect "
+"the VNC viewer. Edit [.filename]#freebsd.cfg#, removing the line with the "
+"`cdrom` definition or commenting it out by inserting a `+#+` character at "
+"the beginning of the line. To load this new configuration, it is necessary "
+"to remove the old DomU with `xl destroy`, passing either the name or the id "
+"as the parameter. Afterwards, recreate it using the modified [."
+"filename]*freebsd.cfg*."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1047
+#, no-wrap
+msgid ""
+"# xl destroy freebsd\n"
+"# xl create freebsd.cfg\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1051
+msgid ""
+"The machine can then be accessed again using the VNC viewer. This time, it "
+"will boot from the virtual disk where the operating system has been "
+"installed and can be used as a virtual machine."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1053
+#, no-wrap
+msgid "Troubleshooting"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1056
+msgid ""
+"This section contains basic information in order to help troubleshoot issues "
+"found when using FreeBSD as a Xen(TM) host or guest."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1058
+#, no-wrap
+msgid "Host Boot Troubleshooting"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1062
+msgid ""
+"Please note that the following troubleshooting tips are intended for Xen(TM) "
+"4.11 or newer. If you are still using Xen(TM) 4.7 and having issues "
+"consider migrating to a newer version of Xen(TM)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1066
+msgid ""
+"In order to troubleshoot host boot issues you will likely need a serial "
+"cable, or a debug USB cable. Verbose Xen(TM) boot output can be obtained by "
+"adding options to the `xen_cmdline` option found in [.filename]#loader."
+"conf#. A couple of relevant debug options are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1068
+msgid ""
+"`iommu=debug`: can be used to print additional diagnostic information about "
+"the iommu."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1069
+msgid ""
+"`dom0=verbose`: can be used to print additional diagnostic information about "
+"the dom0 build process."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1070
+msgid ""
+"`sync_console`: flag to force synchronous console output. Useful for "
+"debugging to avoid losing messages due to rate limiting. Never use this "
+"option in production environments since it can allow malicious guests to "
+"perform DoS attacks against Xen(TM) using the console."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1073
+msgid ""
+"FreeBSD should also be booted in verbose mode in order to identify any "
+"issues. To activate verbose booting, run this command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1077
+#, no-wrap
+msgid "# echo 'boot_verbose=\"YES\"' >> /boot/loader.conf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1080
+msgid ""
+"If none of these options help solving the problem, please send the serial "
+"boot log to mailto:freebsd-xen@FreeBSD.org[freebsd-xen@FreeBSD.org] and "
+"mailto:xen-devel@lists.xenproject.org[xen-devel@lists.xenproject.org] for "
+"further analysis."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1082
+#, no-wrap
+msgid "Guest Creation Troubleshooting"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1085
+msgid ""
+"Issues can also arise when creating guests, the following attempts to "
+"provide some help for those trying to diagnose guest creation issues."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1088
+msgid ""
+"The most common cause of guest creation failures is the `xl` command "
+"spitting some error and exiting with a return code different than 0. If the "
+"error provided is not enough to help identify the issue, more verbose output "
+"can also be obtained from `xl` by using the `v` option repeatedly."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1104
+#, no-wrap
+msgid ""
+"# xl -vvv create freebsd.cfg\n"
+"Parsing config from freebsd.cfg\n"
+"libxl: debug: libxl_create.c:1693:do_domain_create: Domain 0:ao 0x800d750a0: create: how=0x0 callback=0x0 poller=0x800d6f0f0\n"
+"libxl: debug: libxl_device.c:397:libxl__device_disk_set_backend: Disk vdev=xvda spec.backend=unknown\n"
+"libxl: debug: libxl_device.c:432:libxl__device_disk_set_backend: Disk vdev=xvda, using backend phy\n"
+"libxl: debug: libxl_create.c:1018:initiate_domain_create: Domain 1:running bootloader\n"
+"libxl: debug: libxl_bootloader.c:328:libxl__bootloader_run: Domain 1:not a PV/PVH domain, skipping bootloader\n"
+"libxl: debug: libxl_event.c:689:libxl__ev_xswatch_deregister: watch w=0x800d96b98: deregister unregistered\n"
+"domainbuilder: detail: xc_dom_allocate: cmdline=\"\", features=\"\"\n"
+"domainbuilder: detail: xc_dom_kernel_file: filename=\"/usr/local/lib/xen/boot/hvmloader\"\n"
+"domainbuilder: detail: xc_dom_malloc_filemap : 326 kB\n"
+"libxl: debug: libxl_dom.c:988:libxl__load_hvm_firmware_module: Loading BIOS: /usr/local/share/seabios/bios.bin\n"
+"...\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/virtualization/_index.adoc:1109
+msgid ""
+"If the verbose output does not help diagnose the issue there are also QEMU "
+"and Xen(TM) toolstack logs in [.filename]#/var/log/xen#. Note that the name "
+"of the domain is appended to the log name, so if the domain is named "
+"`freebsd` you should find a [.filename]#/var/log/xen/xl-freebsd.log# and "
+"likely a [.filename]#/var/log/xen/qemu-dm-freebsd.log#. Both log files can "
+"contain useful information for debugging. If none of this helps solve the "
+"issue, please send the description of the issue you are facing and as much "
+"information as possible to mailto:freebsd-xen@FreeBSD.org[freebsd-"
+"xen@FreeBSD.org] and mailto:xen-devel@lists.xenproject.org[xen-devel@lists."
+"xenproject.org] in order to get help."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/wayland/_index.adoc b/documentation/content/en/books/handbook/wayland/_index.adoc
new file mode 100644
index 0000000000..2b1721c845
--- /dev/null
+++ b/documentation/content/en/books/handbook/wayland/_index.adoc
@@ -0,0 +1,696 @@
+---
+title: Chapter 6. Wayland
+part: Part I. Getting Started
+prev: books/handbook/x11
+next: books/handbook/network
+description: This chapter describes how to install and configure Wayland and compositors on FreeBSD, which provides a graphical user environment
+tags: ["Wayland", "XWayland", "KDE", "Plasma", "Xfce", "Gnome", "Intel", "AMD", "NVIDIA", "Wayfire", "Sway", "Hikari"]
+showBookMenu: true
+weight: 8
+path: "/books/handbook/wayland/"
+---
+
+[[wayland]]
+= Wayland on FreeBSD
+:doctype: book
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:sectnumoffset: 6
+:partnums:
+:source-highlighter: rouge
+:experimental:
+:images-path: books/handbook/wayland/
+
+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::[]
+
+[[wayland-synopsis]]
+== Wayland Synopsis
+Wayland is a new display server, but it differs from Xorg in several important ways.
+First, Wayland is only a protocol that acts as an intermediary between clients using a different mechanism which removes the dependency on an X server.
+Xorg includes both the X11 protocol, used to run remote displays and the X server will accept connections and display windows.
+Under Wayland, the compositor or window manager provides the display server instead of a traditional X server.
+
+Since Wayland is not an X server, traditional X screen connections will need to utilize other methods such as VNC or RDP for remote desktop management.
+Second, Wayland can manage composite communications between clients and a compositor as a separate entity which does not need to support the X protocols.
+
+Wayland is relatively new, and not all software has been updated to run natively without `Xwayland` support.
+Because Wayland does not provide the X server, and expects compositors to provide that support, X11 window managers that do not yet support Wayland will require that `Xwayland` is not started with the `-rootless` parameter.
+The `-rootless` parameter, when removed, will restore X11 window manager support.
+
+[NOTE]
+====
+The current NVIDIA(R) driver should work with most wlroots compositors, but it may be a little unstable and not support all features at this time.
+Volunteers to help work on the NVIDIA(R) DRM are requested.
+====
+
+Currently, a lot of software will function with minimal issues on Wayland, including Firefox.
+And a few desktops are also available, such as the Compiz Fusion replacement, known as Wayfire, and the i3 window manager replacement, Sway.
+
+[NOTE]
+====
+As of May, 2021, plasma5-kwin does support Wayland on FreeBSD.
+To use Plasma under Wayland, use the `startplasma-wayland` parameter to `ck-launch-session` and tie in dbus with:
+`dbus-launch --exit-with-x11 ck-launch-session startplasma-wayland`
+to get it working.
+====
+
+For compositors, a kernel supporting the man:evdev[4] driver must exist to utilize the keybinding functionality.
+This is built into the [.filename]#GENERIC# kernel by default; however, if it has been customized and man:evdev[4] support was stripped out, the man:evdev[4] module will need to be loaded.
+In addition, users of `Wayland` will need to be members of the `video` group.
+To quickly make this change, use the `pw` command:
+
+[source,shell]
+----
+pw groupmod video -m user
+----
+
+Installing Wayland is simple; there is not a great deal of configuration for the protocol itself.
+Most of the composition will depend on the chosen compositor.
+By installing `seatd` now, a step is skipped as part of the compositor installation and configuration as `seatd` is needed to provide non-root access to certain devices.
+
+All of the compositors described here should work with package:graphics/drm-kmod[] open source drivers; however, the NVIDIA(R) graphics cards may have issues when using the proprietary drivers.
+Begin by installing the following packages:
+
+[source,shell]
+----
+# pkg install wayland seatd
+----
+
+Once the protocol and supporting packages have been installed, a compositor must create the user interface.
+Several compositors will be covered in the following sections.
+All compositors using Wayland will need a runtime directory defined in the environment, which can be achieved with the following command in the bourne shell:
+
+[source,shell]
+----
+% export XDG_RUNTIME_DIR=/var/run/user/`id -u`
+----
+
+It is important to note that most compositors will search the XDG_RUNTIME_DIR directory for the configuration files.
+In the examples included here, a parameter will be used to specify a configuration file in [.filename]#~/.config# to keep temporary files and configuration files separate.
+It is recommended that an alias be configured for each compositor to load the designated configuration file.
+
+[WARNING]
+====
+It has been reported that ZFS users may experience issues with some Wayland clients because they need access to `posix_fallocate()` in the runtime directory.
+While the author could not reproduce this issue on their ZFS system, a recommended workaround is not to use ZFS for the runtime directory and instead use `tmpfs` for the [.filename]#/var/run# directory.
+In this case, the `tmpfs` file system is used for [.filename]#/var/run# and mounted through the command `mount -t tmpfs tmpfs /var/run` command and then make this change persist across reboots through [.filename]#/etc/fstab#.
+The XDG_RUNTIME_DIR environment variable could be configured to use [.filename]#/var/run/user/$UID# and avoid potential pitfalls with ZFS.
+Consider that scenario when reviewing the configuration examples in the following sections.
+====
+
+The seatd daemon helps manage access to shared system devices for non-root users in compositors; this includes graphics cards.
+For traditional X11 managers, `seatd` is not needed, such as both Plasma and GNOME, but for the Wayland compositors discussed here, it will need enabled on the system and be running before starting a compositor environment.
+To enable and start the `seatd` daemon now, and on system initialization:
+
+[source,shell]
+----
+# sysrc seatd_enable="YES"
+# service seatd start
+----
+
+Afterward, a compositor, which is similar to an X11 desktop, will need to be installed for the GUI environment.
+Three are discussed here, including basic configuration options, setting up a screen lock, and recommendations for more information.
+
+[[wayland-wayfire]]
+== The Wayfire Compositor
+
+Wayfire is a compositor that aims to be lightweight and customizable.
+Several features are available, and it brings back several elements from the previously released Compiz Fusion desktop.
+All of the parts look beautiful on modern hardware. To get Wayfire up and running, begin by installing the required packages:
+
+[source,shell]
+----
+# pkg install wayfire wf-shell alacritty swaylock-effects swayidle wlogout kanshi mako wlsunset
+----
+
+The `alacritty` package provides a terminal emulator.
+Still, it is not completely required as other terminal emulators such as `kitty`, and XFCE-4 `Terminal` have been tested and verified to work under the Wayfire compositor.
+Wayfire configuration is relatively simple; it uses a file that should be reviewed for any customizations.
+To begin, copy the example file over to the runtime environment configuration directory and then edit the file:
+
+[source,shell]
+----
+% mkdir ~/.config/wayfire
+% cp /usr/local/share/examples/wayfire/wayfire.ini ~/.config/wayfire
+----
+
+The defaults for most users should be fine.
+Within the configuration file, items like the famous `cube` are pre-configured, and there are instructions to help with the available settings.
+A few primary settings of note include:
+
+[.programlisting]
+....
+[output]
+mode = 1920x1080@60000
+position = 0,0
+transform = normal
+scale = 1.000000
+....
+
+In this example, from the configuration file, the screen's output should be the listed mode at the listed hertz.
+For example, the mode should be set to `widthxheight@refresh_rate`.
+The position places the output at a specific pixel location specified.
+The default should be fine for most users.
+Finally, transform sets a background transform, and scale will scale the output to the specified scale factor.
+The defaults for these options are generally acceptable; for more information, see the documentation.
+
+As mentioned, Wayland is new, and not all applications work with the protocol yet.
+At this time, `sddm` does not appear to support starting and managing compositors in Wayland.
+The `swaylock` utility has been used instead in these examples. The configuration file contains options to run `swayidle` and `swaylock` for idle and locking of the screen.
+
+This option to define the action to take when the system is idle is listed as:
+
+[.programlisting]
+....
+idle = swaylock
+....
+
+And the lock timeout is configured using the following lines:
+
+[.programlisting]
+....
+[idle]
+toggle = <super> KEY_Z
+screensaver_timeout = 300
+dpms_timeout = 600
+....
+
+The first option will lock the screen after 300 seconds, and after another 300, the screen will shut off through the `dpms_timeout` option.
+
+One final thing to note is the <super> key.
+Most of the configuration mentions this key, and it is the traditional `Windows` key on the keyboard.
+Most keyboards have this super key available; however, it should be remapped within this configuration file if it is not available.
+For example, to lock the screen, press and hold the super key, the kbd:[shift] key, and press the kbd:[escape] key.
+Unless the mappings have changed, this will execute the swaylock application.
+The default configuration for `swaylock` will show a grey screen; however, the application is highly customizable and well documented.
+In addition, since the swaylock-effects is the version that was installed, there are several options available such as the blur effect, which can be seen using the following command:
+
+[source,shell]
+----
+% swaylock --effect-blur 7x5
+----
+
+There is also the `--clock` parameter which will display a clock with the date and time on the lock screen.
+When package:x11/swaylock-effects[] was installed, a default [.filename]#pam.d# configuration was included.
+It provides the default options that should be fine for most users.
+More advanced options are available; see the PAM documentation for more information.
+
+At this point, it is time to test Wayfire and see if it can start up on the system.
+Just type the following command:
+
+[source,shell]
+----
+% wayfire -c ~/.config/wayfire/wayfire.ini
+----
+
+The compositor should now start and display a background image along with a menu bar at the top of the screen.
+Wayfire will attempt to list installed compatible applications for the desktop and present them in this drop-down menu; for example, if the XFCE-4 file manager is installed, it will show up in this drop-down menu.
+If a specific application is compatible and valuable enough for a keyboard shortcut, it may be mapped to a keyboard sequence using the [.filename]#wayfire.ini# configuration file.
+Wayfire also has a configuration tool named Wayfire Config Manager.
+It is located in the drop-down menu bar but may also be started through a terminal by issuing the following command:
+
+[source,shell]
+----
+% wcm
+----
+
+Various Wayfire configuration options, including the composite special effects, maybe enabled, disabled, or configured through this application.
+In addition, for a more user-friendly experience, a background manager, panel, and docking application may be enabled in the configuration file:
+
+[.programlisting]
+....
+panel = wf-panel
+dock = wf-dock
+background = wf-background
+....
+
+[WARNING]
+====
+Changes made through `wcm` will overwrite custom changes in the [.filename]#wayfire.ini# configuration file.
+The [.filename]#wayfire.ini# file is highly recommended to be backed up so any essential changes may be restored.
+====
+
+Finally, the default launcher listed in the [.filename]#wayfire.ini# is package:x11/wf-shell[] which may be replaced with other panels if desired by the user.
+
+[[wayland-hikari]]
+== The Hikari Compositor
+
+The Hikari compositor uses several concepts centered around productivity, such as sheets, workspaces, and more.
+In that way, it resembles a tiling window manager.
+Breaking this down, the compositor starts with a single workspace, which is similar to virtual desktops.
+Hikari uses a single workspace or virtual desktop for user interaction. The workspace is made up of several views, which are the working windows in the compositor grouped as either sheets or groups.
+Both sheets and groups are made up of a collection of views; again, the windows that are grouped together.
+When switching between sheets or groups, the active sheet or group will become known collectively as the workspace.
+The manual page will break this down into more information on the functions of each but for this document, just consider a single workspace utilizing a single sheet.
+Hikari installation will comprise of a single package, package:x11-wm/hikari[], and a terminal emulator `alacritty`:
+
+[source,shell]
+----
+# pkg install hikari alacritty
+----
+
+[NOTE]
+====
+Other shells, such as `kitty` or the Plasma `Terminal`, will function under Wayland. Users should experiment with their favorite terminal editor to validate compatibility.
+====
+
+Hikari uses a configuration file, [.filename]#hikari.conf#, which could either be placed in the XDG_RUNTIME_DIR or specified on startup using the `-c` parameter.
+An autostart configuration file is not required but may make the migration to this compositor a little easier.
+Beginning the configuration is to create the Hikari configuration directory and copy over the configuration file for editing:
+
+[source,shell]
+----
+% mkdir ~/.config/hikari
+% cp /usr/local/etc/hikari/hikari.conf ~/.config/hikari
+----
+
+The configuration is broken out into various stanzas such as ui, outputs, layouts, and more.
+For most users, the defaults will function fine; however, some important changes should be made.
+For example, the $TERMINAL variable is normally not set within the user's environment.
+Changing this variable or altering the [.filename]#hikari.conf# file to read:
+
+[.programlisting]
+....
+terminal = "/usr/local/bin/alacritty"
+....
+
+Will launch the `alacritty` terminal using the bound key press.
+While going through the configuration file, it should be noted that the capital letters are used to map keys out for the user.
+For example, the kbd:[L] key for starting the terminal kbd:[L+Return] is actually the previously discussed super key or Windows logo key.
+Therefore, holding the kbd:[L/super/Windows] key and pressing kbd:[Enter] will open the specified terminal emulator with the default configuration.
+Mapping other keys to applications require an action definition to be created.
+For this, the action item should be listed in the actions stanza, for example:
+
+[.programlisting]
+....
+actions {
+ terminal = "/usr/local/bin/alacritty"
+ browser = "/usr/local/bin/firefox"
+}
+....
+
+Then an action may be mapped under the keyboard stanza, which is defined within the bindings stanza:
+
+[.programlisting]
+....
+bindings {
+ keyboard {
+SNIP
+ "L+Return" = action-terminal
+ "L+b" = action-browser
+SNIP
+....
+
+After Hikari is restarted, holding the Windows logo button and pressing the kbd:[b] key on the keyboard will start the web browser.
+The compositor does not have a menu bar, and it is recommended the user set up, at minimal, a terminal emulator before migration.
+The manual page contains a great deal of documentation it should be read before performing a full migration.
+Another positive aspect about Hikari is that, while migrating to the compositor, Hikari can be started in the Plasma and GNOME desktop environments, allowing for a test-drive before completely migrating.
+
+Locking the screen in Hikari is easy because a default [.filename]#pam.d# configuration file and unlock utility are bundled with the package.
+The key binding for locking the screen is kbd:[L] (Windows logo key)+ kbd:[Shift] + kbd:[Backspace].
+It should be noted that all views not marked public will be hidden.
+These views will never accept input when locked but beware of sensitive information being visible.
+For some users, it may be easier to migrate to a different screen locking utility such as swaylock-effects, discussed in this section.
+To start Hikari, use the following command:
+
+[source,shell]
+----
+% hikari -c ~/.config/hikari/hikari.conf
+----
+
+[[wayland-sway]]
+== The Sway Compositor
+
+The Sway compositor is a tiling compositor that attempts to replace the i3 windows manager.
+It should work with the user's current i3 configuration; however, new features may require some additional setup.
+In the forthcoming examples, a fresh installation without migrating any i3 configuration will be assumed.
+To install Sway and valuable components, issue the following command as the root user:
+
+[source,shell]
+----
+# pkg install sway swayidle swaylock-effects alacritty dmenu-wayland dmenu
+----
+
+For a basic configuration file, issue the following commands and then edit the configuration file after it is copied:
+
+[source,shell]
+----
+% mkdir ~/.config/sway
+% cp /usr/local/etc/sway/config ~/.config/sway
+----
+
+The base configuration file has many defaults, which will be fine for most users.
+Several important changes should be made like the following:
+
+[.programlisting]
+....
+# Logo key. Use Mod1 for Alt.
+input * xkb_rules evdev
+set $mod Mod4
+# Your preferred terminal emulator
+set $term alacritty
+set $lock swaylock -f -c 000000
+output "My Workstation" mode 1366x786@60Hz position 1366 0
+output * bg ~/wallpapers/mywallpaper.png stretch
+### Idle configuration
+exec swayidle -w \
+ timeout 300 'swaylock -f -c 000000' \
+ timeout 600 'swaymsg "output * dpms off"' resume 'swaymsg "output * dpms on"' \
+ before-sleep 'swaylock -f -c 000000'
+....
+
+In the previous example, the `xkb` rules for man:evdev[4] events are loaded, and the $mod key is set to the Windows logo key for the key bindings.
+Next, the terminal emulator was set to be `alacritty`, and a screen lock command was defined; more on this later.
+The output keyword, the mode, the position, a background wallpaper, and Sway is also told to stretch this wallpaper to fill out the screen.
+Finally, `swaylock` is set to daemonize and lock the screen after a timeout of 300 seconds, placing the screen or monitor into sleep mode after 600 seconds.
+The locked background color of 000000, which is black, is also defined here.
+Using swaylock-effects, a clock may also be displayed with the `--clock` parameter.
+See the manual page for more options.
+The man:sway-output[5] manual page should also be reviewed; it includes a great deal of information on customing the output options available.
+
+While in Sway, to bring up a menu of applications, hold the Windows logo key (mod) and press the kbd:[d] key.
+The menu may be navigated using the arrow keys on the keyboard.
+There is also a method to manipulate the layout of the bar and add a tray; read the man:sway-bar[5] manual page for more information.
+The default configuration adds a date and time to the upper right-hand corner.
+See the `Bar` stanza in the configuration file for an example.
+By default, the configuration does not include locking the screen outside of the example above, enabling a lockout timer.
+Creating a lock key binding requires the following line to the `Key bindings` section:
+
+[.programlising]
+....
+# Lock the screen manually
+bindsym $mod+Shift+Return exec $lock
+....
+
+Now the screen may be locked using the combination of holding the Windows logo key, pressing and holding shift, and finally pressing return.
+When Sway is installed, whether from a package or the FreeBSD Ports Collection, a default file for [.filename]#pam.d# was installed.
+The default configuration should be acceptable for most users, but more advanced options are available.
+Read through the PAM documentation for more information.
+
+Finally, to exit Sway and return to the shell, hold the Windows logo key, the shift key, and press the kbd:[e] key.
+A prompt will be displayed with an option to exit Sway.
+During migration, Sway can be started through a terminal emulator on an X11 desktop such as Plasma.
+This makes testing different changes and key bindings a little easier prior to fully migrating to this compositor.
+To start Sway, issue the following command:
+
+[source,shell]
+----
+% sway -c ~/.config/sway/config
+----
+
+[[wayland-xwayland]]
+== Using Xwayland
+
+When installing Wayland, the `Xwayland` binary should have been installed unless Wayland was built without X11 support.
+If the [.filename]#/usr/local/bin/Xwayland# file does not exist, install it using the following command:
+
+[source,shell]
+----
+# pkg install xwayland-devel
+----
+
+[NOTE]
+====
+The development version of Xwayland is recommended and was most likely installed with the Wayland package.
+Each compositor has a method of enabling or disabling this feature.
+====
+
+Once `Xwayland` has been installed, configure it within the chosen compositor.
+For Wayfire, the following line is required in the [.filename]#wayfire.ini# file:
+
+[.programlisting]
+....
+xwayland = true
+....
+
+For the Sway compositor, `Xwayland` should be enabled by default.
+Even so, it is recommended to manually add a configuration line in the [.filename]#~/.config/sway/config# like the following:
+
+[.programlisting]
+.....
+xwayland enable
+.....
+
+Finally, for Hikari, no changes are needed.
+Support for `Xwayland` is build in by default.
+To disable that support, rebuild the package from the ports collection and disable Xwayland support at that time.
+
+After these changes are made, start the compositor at the command line and execute a terminal from the key bindings.
+Within this terminal, issue the `env` command and search for the `DISPLAY` variables.
+If the compositor was able to properly start the Xwayland X server, these environment variables should look similar to the following:
+
+[source,shell]
+----
+% env | grep DISPLAY
+----
+
+[.programlisting]
+....
+WAYLAND_DISPLAY=wayland-1
+DISPLAY=:0
+....
+
+In this output, there is a default Wayland display and a display set for the Xwayland server.
+Another method to verify that `Xwayland` is functioning properly is to use install and test the small package:[x11/eyes] and check the output.
+If the `xeyes` application starts and the eyes follow the mouse pointer, Xwayland is functioning properly.
+If an error such as the following is displayed, something happened during the `Xwayland` initialization and it may need reinstalled:
+
+[.programlisting]
+....
+Error: Cannot open display wayland-0
+....
+
+[WARNING]
+====
+A security feature of Wayland is that, without running an X server, there is not another network listener.
+Once `Xwayland` is enabled, this security feature is no longer applicable to the system.
+====
+
+For some compositors, such as Wayfire, `Xwayland` may not start properly.
+As such, `env` will show the following information for the `DISPLAY` environment variables:
+
+[source,shell]
+----
+% env | grep DISPLAY
+----
+
+[.programlisting]
+....
+DISPLAY=wayland-1
+WAYLAND_DISPLAY=wayland-1
+....
+
+Even though `Xwayfire` was installed and configured, X11 applications will not start giving a display issue.
+To work around this, verify that there is already an instance of `Xwayland` using a UNIX socket through these two methods.
+First, check the output from `sockstat` and search for X11-unix:
+
+[source,shell]
+----
+% sockstat | grep x11
+----
+
+There should be something similar to the following information:
+
+[.programlisting]
+....
+trhodes Xwayland 2734 8 stream /tmp/.X11-unix/X0
+trhodes Xwayland 2734 9 stream /tmp/.X11-unix/X0
+trhodes Xwayland 2734 10 stream /tmp/.X11-unix/X0
+trhodes Xwayland 2734 27 stream /tmp/.X11-unix/X0_
+trhodes Xwayland 2734 28 stream /tmp/.X11-unix/X0
+....
+
+This suggests the existence of an X11 socket.
+This can be further verified by attempting to execute `Xwayland` manually within a terminal emulator running under the compositor:
+
+[source,shell]
+----
+% Xwayland
+----
+
+If an X11 socket is already available, the following error should be presented to the user:
+
+[.programlisting]
+....
+(EE)
+Fatal server error:
+(EE) Server is already active for display 0
+ If this server is no longer running, remove /tmp/.X0-lock
+ and start again.
+(EE)
+....
+
+Since there is an active X display available using display zero, the environment variable was just set improperly, to fix this, change the `DISPLAY` environment variable to `:0` and attempt to execute the application again.
+The following example uses package:mail/claws-mail[] as the application which needs the `Xwayland` service:
+
+[source,shell]
+----
+export DISPLAY=:0
+----
+
+After this change, the package:mail/claws-mail[] application should now start using `Xwayland` and function as expected.
+
+[[wayland-remotedesktop]]
+== Remote Desktop Using VNC
+
+Earlier in this document it was noted that Wayland does not provide the same X server style access as Xorg provides.
+Instead, users are free to pick and choose a remote desktop protocol such as RDP or VNC.
+The FreeBSD Ports collection includes the `wayvnc`, which will support wlroots based compositors such as the ones discussed here.
+This application may be installed using:
+
+[source,shell]
+----
+# pkg install wayvnc
+----
+
+Unlike some other packages, `wayvnc` does not come with a configuration file.
+Thankfully, the manual page documents the important options and they may be extrapolated into a simple configuration file:
+
+[.programlisting]
+....
+address=0.0.0.0
+enable_auth=true
+username=username
+password=password
+private_key_file=/path/to/key.pem
+certificate_file=/path/to/cert.pem
+....
+
+The key files will need to be generated, and it is highly recommended they be used for increased security of the connection.
+When invoked, wayvnc will search for the configuration file in [.filename]#~/.config/wayvnc/config#.
+This could be overwritten using the `-C configuration_file` option when starting the server.
+Thus, to start the `wayvnc` server, issue the following command:
+
+[source,shell]
+----
+% wayvnc -C ~/.config/wayvnc/config
+----
+
+[NOTE]
+====
+At the time of this writing, there is no rc.d script to start `wayvnc` on system initialization.
+If that functionality is desired, a local startup file will need to be created.
+This is probably a feature request for the port maintainer.
+====
+
+[[wayland-ly]]
+== Wayland Login Manager
+While several login managers exist and are slowly migrating to Wayland, one option is the package:x11/ly[] text user interface (TUI) manager.
+Needing minimal configuration, `ly` will start Sway, Wayfire, and others by presenting a login window on system initialization.
+To install `ly`, issue the following command:
+
+[source,shell]
+----
+# pkg install ly
+----
+
+There will be some configuration hints presented, the import steps are to add the following lines to [.filename]#/etc/gettytab#:
+
+[programlisting]
+....
+Ly:\
+ :lo=/usr/local/bin/ly:\
+ :al=root:
+....
+
+And then modify the ttyv1 line in [.filename]#/etc/ttys# to match the following line:
+
+[programlisting]
+....
+ttyv1 "/usr/libexec/getty Ly" xterm onifexists secure
+....
+
+After a system reboot, a login should appear.
+To configure specific settings, such as language and edit [.filename]#/usr/local/etc/ly/config.ini#.
+At minimal, this file should have the designated tty that was previously specified in [.filename]#/etc/ttys#.
+
+[NOTE]
+====
+If setting ttyv0 up as the login terminal, it may be required to press the kbd:[alt] and kbd:[F1] keys to properly see the login window.
+====
+
+When the login window appears, using the left and right arrows will swap through different, supported, window managers.
+
+[[wayland-utilities]]
+== Useful Utilities
+
+One useful Wayland utility which all compositors can make use of is the waybar.
+While Wayfire does come with a launch menu, an easy-to-use and fast taskbar is a good accessory for any compositor or desktop manager.
+A Wayland compatible taskbar that is fast and easy to configure is waybar.
+To install the package and a supporting audio control utility, issue the following command:
+
+[source,shell]
+----
+# pkg install pavucontrol waybar
+----
+
+To create the configuration directory and copy over a default configuration file, execute the following commands:
+
+[source,shell]
+----
+% mkdir ~/.config/waybar
+% cp /usr/local/etc/xdg/waybar/config ~/.config/waybar
+----
+
+The `lavalauncher` utility provides a launch bar for various applications.
+There is no example configuration file provided with the package, so the following actions must be taken:
+
+[source,shell]
+----
+mkdir ~/.config/lavalauncher
+----
+
+An example configuration file that only includes Firefox, and is placed on the right, is below:
+
+[.programlising]
+....
+global-settings {
+ watch-config-file = true;
+}
+
+bar {
+ output = eDP-1;
+ position = bottom;
+ background-colour = "#202020";
+
+ # Condition for the default configuration set.
+ condition-resolution = wider-than-high;
+
+ config {
+ position = right;
+ }
+
+ button {
+ image-path = /usr/local/lib/firefox/browser/chrome/icons/default/default48.png;
+ command[mouse-left] = /usr/local/bin/firefox;
+ }
+ button {
+ image-path = /usr/local/share/pixmaps/thunderbird.png;
+ command[mouse-left] = /usr/local/bin/thunderbird;
+}
+....
diff --git a/documentation/content/en/books/handbook/wayland/_index.po b/documentation/content/en/books/handbook/wayland/_index.po
new file mode 100644
index 0000000000..5b2cec493f
--- /dev/null
+++ b/documentation/content/en/books/handbook/wayland/_index.po
@@ -0,0 +1,1190 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/wayland/_index.adoc:1
+#, no-wrap
+msgid "This chapter describes how to install and configure Wayland and compositors on FreeBSD, which provides a graphical user environment"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/wayland/_index.adoc:1
+#, no-wrap
+msgid "Part I. Getting Started"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/wayland/_index.adoc:1
+#, no-wrap
+msgid "Chapter 6. Wayland"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/wayland/_index.adoc:14
+#, no-wrap
+msgid "Wayland on FreeBSD"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/wayland/_index.adoc:52
+#, no-wrap
+msgid "Wayland Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:57
+msgid ""
+"Wayland is a new display server, but it differs from Xorg in several "
+"important ways. First, Wayland is only a protocol that acts as an "
+"intermediary between clients using a different mechanism which removes the "
+"dependency on an X server. Xorg includes both the X11 protocol, used to run "
+"remote displays and the X server will accept connections and display "
+"windows. Under Wayland, the compositor or window manager provides the "
+"display server instead of a traditional X server."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:60
+msgid ""
+"Since Wayland is not an X server, traditional X screen connections will need "
+"to utilize other methods such as VNC or RDP for remote desktop management. "
+"Second, Wayland can manage composite communications between clients and a "
+"compositor as a separate entity which does not need to support the X "
+"protocols."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:64
+msgid ""
+"Wayland is relatively new, and not all software has been updated to run "
+"natively without `Xwayland` support. Because Wayland does not provide the X "
+"server, and expects compositors to provide that support, X11 window managers "
+"that do not yet support Wayland will require that `Xwayland` is not started "
+"with the `-rootless` parameter. The `-rootless` parameter, when removed, "
+"will restore X11 window manager support."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:69
+msgid ""
+"The current NVIDIA(R) driver should work with most wlroots compositors, but "
+"it may be a little unstable and not support all features at this time. "
+"Volunteers to help work on the NVIDIA(R) DRM are requested."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:73
+msgid ""
+"Currently, a lot of software will function with minimal issues on Wayland, "
+"including Firefox. And a few desktops are also available, such as the "
+"Compiz Fusion replacement, known as Wayfire, and the i3 window manager "
+"replacement, Sway."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:80
+msgid ""
+"As of May, 2021, plasma5-kwin does support Wayland on FreeBSD. To use "
+"Plasma under Wayland, use the `startplasma-wayland` parameter to `ck-launch-"
+"session` and tie in dbus with: `dbus-launch --exit-with-x11 ck-launch-"
+"session startplasma-wayland` to get it working."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:86
+msgid ""
+"For compositors, a kernel supporting the man:evdev[4] driver must exist to "
+"utilize the keybinding functionality. This is built into the [."
+"filename]#GENERIC# kernel by default; however, if it has been customized and "
+"man:evdev[4] support was stripped out, the man:evdev[4] module will need to "
+"be loaded. In addition, users of `Wayland` will need to be members of the "
+"`video` group. To quickly make this change, use the `pw` command:"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:90
+#, no-wrap
+msgid "pw groupmod video -m user\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:95
+msgid ""
+"Installing Wayland is simple; there is not a great deal of configuration for "
+"the protocol itself. Most of the composition will depend on the chosen "
+"compositor. By installing `seatd` now, a step is skipped as part of the "
+"compositor installation and configuration as `seatd` is needed to provide "
+"non-root access to certain devices."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:98
+msgid ""
+"All of the compositors described here should work with package:graphics/drm-"
+"kmod[] open source drivers; however, the NVIDIA(R) graphics cards may have "
+"issues when using the proprietary drivers. Begin by installing the "
+"following packages:"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:102
+#, no-wrap
+msgid "# pkg install wayland seatd\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:107
+msgid ""
+"Once the protocol and supporting packages have been installed, a compositor "
+"must create the user interface. Several compositors will be covered in the "
+"following sections. All compositors using Wayland will need a runtime "
+"directory defined in the environment, which can be achieved with the "
+"following command in the bourne shell:"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:111
+#, no-wrap
+msgid "% export XDG_RUNTIME_DIR=/var/run/user/`id -u`\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:116
+msgid ""
+"It is important to note that most compositors will search the "
+"XDG_RUNTIME_DIR directory for the configuration files. In the examples "
+"included here, a parameter will be used to specify a configuration file in [."
+"filename]#~/.config# to keep temporary files and configuration files "
+"separate. It is recommended that an alias be configured for each compositor "
+"to load the designated configuration file."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:124
+msgid ""
+"It has been reported that ZFS users may experience issues with some Wayland "
+"clients because they need access to `posix_fallocate()` in the runtime "
+"directory. While the author could not reproduce this issue on their ZFS "
+"system, a recommended workaround is not to use ZFS for the runtime directory "
+"and instead use `tmpfs` for the [.filename]#/var/run# directory. In this "
+"case, the `tmpfs` file system is used for [.filename]#/var/run# and mounted "
+"through the command `mount -t tmpfs tmpfs /var/run` command and then make "
+"this change persist across reboots through [.filename]#/etc/fstab#. The "
+"XDG_RUNTIME_DIR environment variable could be configured to use [.filename]#/"
+"var/run/user/$UID# and avoid potential pitfalls with ZFS. Consider that "
+"scenario when reviewing the configuration examples in the following sections."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:129
+msgid ""
+"The seatd daemon helps manage access to shared system devices for non-root "
+"users in compositors; this includes graphics cards. For traditional X11 "
+"managers, `seatd` is not needed, such as both Plasma and GNOME, but for the "
+"Wayland compositors discussed here, it will need enabled on the system and "
+"be running before starting a compositor environment. To enable and start "
+"the `seatd` daemon now, and on system initialization:"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:134
+#, no-wrap
+msgid ""
+"# sysrc seatd_enable=”YES”\n"
+"# service seatd start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:138
+msgid ""
+"Afterward, a compositor, which is similar to an X11 desktop, will need to be "
+"installed for the GUI environment. Three are discussed here, including "
+"basic configuration options, setting up a screen lock, and recommendations "
+"for more information."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/wayland/_index.adoc:140
+#, no-wrap
+msgid "The Wayfire Compositor"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:145
+msgid ""
+"Wayfire is a compositor that aims to be lightweight and customizable. "
+"Several features are available, and it brings back several elements from the "
+"previously released Compiz Fusion desktop. All of the parts look beautiful "
+"on modern hardware. To get Wayfire up and running, begin by installing the "
+"required packages:"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:149
+#, no-wrap
+msgid "# pkg install wayfire wf-shell alacritty swaylock-effects swayidle wlogout kanshi mako wlsunset\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:155
+msgid ""
+"The `alacritty` package provides a terminal emulator. Still, it is not "
+"completely required as other terminal emulators such as `kitty`, and XFCE-4 "
+"`Terminal` have been tested and verified to work under the Wayfire "
+"compositor. Wayfire configuration is relatively simple; it uses a file that "
+"should be reviewed for any customizations. To begin, copy the example file "
+"over to the runtime environment configuration directory and then edit the "
+"file:"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:160
+#, no-wrap
+msgid ""
+"% mkdir ~/.config/wayfire\n"
+"% cp /usr/local/share/examples/wayfire/wayfire.ini ~/.config/wayfire\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:165
+msgid ""
+"The defaults for most users should be fine. Within the configuration file, "
+"items like the famous `cube` are pre-configured, and there are instructions "
+"to help with the available settings. A few primary settings of note include:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:173
+#, no-wrap
+msgid ""
+"[output]\n"
+"mode = 1920x1080@60000\n"
+"position = 0,0\n"
+"transform = normal\n"
+"scale = 1.000000\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:181
+msgid ""
+"In this example, from the configuration file, the screen's output should be "
+"the listed mode at the listed hertz. For example, the mode should be set to "
+"`widthxheight@refresh_rate`. The position places the output at a specific "
+"pixel location specified. The default should be fine for most users. "
+"Finally, transform sets a background transform, and scale will scale the "
+"output to the specified scale factor. The defaults for these options are "
+"generally acceptable; for more information, see the documentation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:185
+msgid ""
+"As mentioned, Wayland is new, and not all applications work with the "
+"protocol yet. At this time, `sddm` does not appear to support starting and "
+"managing compositors in Wayland. The `swaylock` utility has been used "
+"instead in these examples. The configuration file contains options to run "
+"`swayidle` and `swaylock` for idle and locking of the screen."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:187
+msgid ""
+"This option to define the action to take when the system is idle is listed "
+"as:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:191
+#, no-wrap
+msgid "idle = swaylock\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:194
+msgid "And the lock timeout is configured using the following lines:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:201
+#, no-wrap
+msgid ""
+"[idle]\n"
+"toggle = <super> KEY_Z\n"
+"screensaver_timeout = 300\n"
+"dpms_timeout = 600\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:204
+msgid ""
+"The first option will lock the screen after 300 seconds, and after another "
+"300, the screen will shut off through the `dpms_timeout` option."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:212
+msgid ""
+"One final thing to note is the <super> key. Most of the configuration "
+"mentions this key, and it is the traditional `Windows` key on the keyboard. "
+"Most keyboards have this super key available; however, it should be remapped "
+"within this configuration file if it is not available. For example, to lock "
+"the screen, press and hold the super key, the kbd:[shift] key, and press the "
+"kbd:[escape] key. nless the mappings have changed, this will execute the "
+"swaylock application. The default configuration for `swaylock` will show a "
+"grey screen; however, the application is highly customizable and well "
+"documented. In addition, since the swaylock-effects is the version that was "
+"installed, there are several options available such as the blur effect, "
+"which can be seen using the following command:"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:216
+#, no-wrap
+msgid "% swaylock --effect-blur 7x5\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:222
+msgid ""
+"There is also the `--clock` parameter which will display a clock with the "
+"date and time on the lock screen. When package:x11/swaylock-effects[] was "
+"installed, a default [.filename]#pam.d# configuration was included. It "
+"provides the default options that should be fine for most users. More "
+"advanced options are available; see the PAM documentation for more "
+"information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:225
+msgid ""
+"At this point, it is time to test Wayfire and see if it can start up on the "
+"system. Just type the following command:"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:229
+#, no-wrap
+msgid "% wayfire -c ~/.config/wayfire/wayfire.ini\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:236
+msgid ""
+"The compositor should now start and display a background image along with a "
+"menu bar at the top of the screen. Wayfire will attempt to list installed "
+"compatible applications for the desktop and present them in this drop-down "
+"menu; for example, if the XFCE-4 file manager is installed, it will show up "
+"in this drop-down menu. If a specific application is compatible and "
+"valuable enough for a keyboard shortcut, it may be mapped to a keyboard "
+"sequence using the [.filename]#wayfire.ini# configuration file. Wayfire "
+"also has a configuration tool named Wayfire Config Manager. It is located "
+"in the drop-down menu bar but may also be started through a terminal by "
+"issuing the following command:"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:240
+#, no-wrap
+msgid "% wcm\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:244
+msgid ""
+"Various Wayfire configuration options, including the composite special "
+"effects, maybe enabled, disabled, or configured through this application. "
+"In addition, for a more user-friendly experience, a background manager, "
+"panel, and docking application may be enabled in the configuration file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:250
+#, no-wrap
+msgid ""
+"panel = wf-panel\n"
+"dock = wf-dock\n"
+"background = wf-background\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:256
+msgid ""
+"Changes made through `wcm` will overwrite custom changes in the [."
+"filename]#wayfire.ini# configuration file. The [.filename]#wayfire.ini# "
+"file is highly recommended to be backed up so any essential changes may be "
+"restored."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:259
+msgid ""
+"Finally, the default launcher listed in the [.filename]#wayfire.ini# is "
+"package:x11/wf-shell[] which may be replaced with other panels if desired by "
+"the user."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/wayland/_index.adoc:261
+#, no-wrap
+msgid "The Hikari Compositor"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:271
+msgid ""
+"The Hikari compositor uses several concepts centered around productivity, "
+"such as sheets, workspaces, and more. In that way, it resembles a tiling "
+"window manager. Breaking this down, the compositor starts with a single "
+"workspace, which is similar to virtual desktops. Hikari uses a single "
+"workspace or virtual desktop for user interaction. The workspace is made up "
+"of several views, which are the working windows in the compositor grouped as "
+"either sheets or groups. Both sheets and groups are made up of a collection "
+"of views; again, the windows that are grouped together. When switching "
+"between sheets or groups, the active sheet or group will become known "
+"collectively as the workspace. The manual page will break this down into "
+"more information on the functions of each but for this document, just "
+"consider a single workspace utilizing a single sheet. Hikari installation "
+"will comprise of a single package, package:x11-wm/hikari[], and a terminal "
+"emulator `alacritty`:"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:275
+#, no-wrap
+msgid "# pkg install hikari alacritty\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:280
+msgid ""
+"Other shells, such as `kitty` or the Plasma `Terminal`, will function under "
+"Wayland. Users should experiment with their favorite terminal editor to "
+"validate compatibility."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:285
+msgid ""
+"Hikari uses a configuration file, [.filename]#hikari.conf#, which could "
+"either be placed in the XDG_RUNTIME_DIR or specified on startup using the `-"
+"c` parameter. An autostart configuration file is not required but may make "
+"the migration to this compositor a little easier. Beginning the "
+"configuration is to create the Hikari configuration directory and copy over "
+"the configuration file for editing:"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:290
+#, no-wrap
+msgid ""
+"% mkdir ~/.config/hikari\n"
+"% cp /usr/local/etc/hikari/hikari.conf ~/.config/hikari\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:296
+msgid ""
+"The configuration is broken out into various stanzas such as ui, outputs, "
+"layouts, and more. For most users, the defaults will function fine; "
+"however, some important changes should be made. For example, the $TERMINAL "
+"variable is normally not set within the user's environment. Changing this "
+"variable or altering the [.filename]#hikari.conf# file to read:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:300
+#, no-wrap
+msgid "terminal = \"/usr/local/bin/alacritty\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:308
+msgid ""
+"Will launch the `alacritty` terminal using the bound key press. While going "
+"through the configuration file, it should be noted that the capital letters "
+"are used to map keys out for the user. For example, the kbd:[L] key for "
+"starting the terminal kbd:[L+Return] is actually the previously discussed "
+"super key or Windows logo key. Therefore, holding the kbd:[L/super/Windows] "
+"key and pressing kbd:[Enter] will open the specified terminal emulator with "
+"the default configuration. Mapping other keys to applications require an "
+"action definition to be created. For this, the action item should be listed "
+"in the actions stanza, for example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:315
+#, no-wrap
+msgid ""
+"actions {\n"
+" terminal = \"/usr/local/bin/alacritty\"\n"
+" browser = \"/usr/local/bin/firefox\"\n"
+"}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:318
+msgid ""
+"Then an action may be mapped under the keyboard stanza, which is defined "
+"within the bindings stanza:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:327
+#, no-wrap
+msgid ""
+"bindings {\n"
+" keyboard {\n"
+"SNIP\n"
+" \"L+Return\" = action-terminal\n"
+" \"L+b\" = action-browser\n"
+"SNIP\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:333
+msgid ""
+"After Hikari is restarted, holding the Windows logo button and pressing the "
+"kbd:[b] key on the keyboard will start the web browser. The compositor does "
+"not have a menu bar, and it is recommended the user set up, at minimal, a "
+"terminal emulator before migration. The manual page contains a great deal "
+"of documentation it should be read before performing a full migration. "
+"Another positive aspect about Hikari is that, while migrating to the "
+"compositor, Hikari can be started in the Plasma and GNOME desktop "
+"environments, allowing for a test-drive before completely migrating."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:340
+msgid ""
+"Locking the screen in Hikari is easy because a default [.filename]#pam.d# "
+"configuration file and unlock utility are bundled with the package. The key "
+"binding for locking the screen is kbd:[L] (Windows logo key)+ kbd:[Shift] + "
+"kbd:[Backspace]. It should be noted that all views not marked public will "
+"be hidden. These views will never accept input when locked but beware of "
+"sensitive information being visible. For some users, it may be easier to "
+"migrate to a different screen locking utility such as swaylock-effects, "
+"discussed in this section. To start Hikari, use the following command:"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:344
+#, no-wrap
+msgid "% hikari -c ~/.config/hikari/hikari.conf\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/wayland/_index.adoc:347
+#, no-wrap
+msgid "The Sway Compositor"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:353
+msgid ""
+"The Sway compositor is a tiling compositor that attempts to replace the i3 "
+"windows manager. It should work with the user's current i3 configuration; "
+"however, new features may require some additional setup. In the forthcoming "
+"examples, a fresh installation without migrating any i3 configuration will "
+"be assumed. To install Sway and valuable components, issue the following "
+"command as the root user:"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:357
+#, no-wrap
+msgid "# pkg install sway swayidle swaylock-effects alacritty dmenu-wayland dmenu\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:360
+msgid ""
+"For a basic configuration file, issue the following commands and then edit "
+"the configuration file after it is copied:"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:365
+#, no-wrap
+msgid ""
+"% mkdir ~/.config/sway\n"
+"% cp /usr/local/etc/sway/config ~/.config/sway\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:369
+msgid ""
+"The base configuration file has many defaults, which will be fine for most "
+"users. Several important changes should be made like the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:385
+#, no-wrap
+msgid ""
+"# Logo key. Use Mod1 for Alt.\n"
+"input * xkb_rules evdev\n"
+"set $mod Mod4\n"
+"# Your preferred terminal emulator\n"
+"set $term alacritty\n"
+"set $lock swaylock -f -c 000000\n"
+"output \"My Workstation\" mode 1366x786@60Hz position 1366 0\n"
+"output * bg ~/wallpapers/mywallpaper.png stretch\n"
+"### Idle configuration\n"
+"exec swayidle -w \\\n"
+" timeout 300 'swaylock -f -c 000000' \\\n"
+" timeout 600 'swaymsg \"output * dpms off\"' resume 'swaymsg \"output * dpms on\"' \\\n"
+" before-sleep 'swaylock -f -c 000000'\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:395
+msgid ""
+"In the previous example, the `xkb` rules for man:evdev[4] events are loaded, "
+"and the $mod key is set to the Windows logo key for the key bindings. Next, "
+"the terminal emulator was set to be `alacritty`, and a screen lock command "
+"was defined; more on this later. The output keyword, the mode, the "
+"position, a background wallpaper, and Sway is also told to stretch this "
+"wallpaper to fill out the screen. Finally, `swaylock` is set to daemonize "
+"and lock the screen after a timeout of 300 seconds, placing the screen or "
+"monitor into sleep mode after 600 seconds. The locked background color of "
+"000000, which is black, is also defined here. Using swaylock-effects, a "
+"clock may also be displayed with the `--clock` parameter. See the manual "
+"page for more options. The man:sway-output[5] manual page should also be "
+"reviewed; it includes a great deal of information on customing the output "
+"options available."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:403
+msgid ""
+"While in Sway, to bring up a menu of applications, hold the Windows logo key "
+"(mod) and press the kbd:[d] key. The menu may be navigated using the arrow "
+"keys on the keyboard. There is also a method to manipulate the layout of "
+"the bar and add a tray; read the man:sway-bar[5] manual page for more "
+"information. The default configuration adds a date and time to the upper "
+"right-hand corner. See the `Bar` stanza in the configuration file for an "
+"example. By default, the configuration does not include locking the screen "
+"outside of the example above, enabling a lockout timer. Creating a lock key "
+"binding requires the following line to the `Key bindings` section:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:408
+#, no-wrap
+msgid ""
+"# Lock the screen manually\n"
+"bindsym $mod+Shift+Return exec $lock\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:414
+msgid ""
+"Now the screen may be locked using the combination of holding the Windows "
+"logo key, pressing and holding shift, and finally pressing return. When "
+"Sway is installed, whether from a package or the FreeBSD Ports Collection, a "
+"default file for [.filename]#pam.d# was installed. The default "
+"configuration should be acceptable for most users, but more advanced options "
+"are available. Read through the PAM documentation for more information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:420
+msgid ""
+"Finally, to exit Sway and return to the shell, hold the Windows logo key, "
+"the shift key, and press the kbd:[e] key. A prompt will be displayed with "
+"an option to exit Sway. During migration, Sway can be started through a "
+"terminal emulator on an X11 desktop such as Plasma. This makes testing "
+"different changes and key bindings a little easier prior to fully migrating "
+"to this compositor. To start Sway, issue the following command:"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:424
+#, no-wrap
+msgid "% sway -c ~/.config/sway/config\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/wayland/_index.adoc:427
+#, no-wrap
+msgid "Using Xwayland"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:431
+msgid ""
+"When installing Wayland, the `Xwayland` binary should have been installed "
+"unless Wayland was built without X11 support. If the [.filename]#/usr/local/"
+"bin/Xwayland# file does not exist, install it using the following command:"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:435
+#, no-wrap
+msgid "# pkg install xwayland-devel\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:441
+msgid ""
+"The development version of Xwayland is recommended and was most likely "
+"installed with the Wayland package. Each compositor has a method of "
+"enabling or disabling this feature."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:445
+msgid ""
+"Once `Xwayland` has been installed, configure it within the chosen "
+"compositor. For Wayfire, the following line is required in the [."
+"filename]#wayfire.ini# file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:449
+#, no-wrap
+msgid "xwayland = true\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:453
+msgid ""
+"For the Sway compositor, `Xwayland` should be enabled by default. Even so, "
+"it is recommended to manually add a configuration line in the [.filename]#~/."
+"config/sway/config# like the following:"
+msgstr ""
+
+#. type: delimited block . 5
+#: documentation/content/en/books/handbook/wayland/_index.adoc:457
+#, no-wrap
+msgid "xwayland enable\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:462
+msgid ""
+"Finally, for Hikari, no changes are needed. Support for `Xwayland` is build "
+"in by default. To disable that support, rebuild the package from the ports "
+"collection and disable Xwayland support at that time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:466
+msgid ""
+"After these changes are made, start the compositor at the command line and "
+"execute a terminal from the key bindings. Within this terminal, issue the "
+"`env` command and search for the `DISPLAY` variables. If the compositor was "
+"able to properly start the Xwayland X server, these environment variables "
+"should look similar to the following:"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:470
+#: documentation/content/en/books/handbook/wayland/_index.adoc:500
+#, no-wrap
+msgid "% env | grep DISPLAY\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:476
+#, no-wrap
+msgid ""
+"WAYLAND_DISPLAY=wayland-1\n"
+"DISPLAY=:0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:482
+msgid ""
+"In this output, there is a default Wayland display and a display set for the "
+"Xwayland server. Another method to verify that `Xwayland` is functioning "
+"properly is to use install and test the small package:[x11/eyes] and check "
+"the output. If the `xeyes` application starts and the eyes follow the mouse "
+"pointer, Xwayland is functioning properly. If an error such as the "
+"following is displayed, something happened during the `Xwayland` "
+"initialization and it may need reinstalled:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:486
+#, no-wrap
+msgid "Error: Cannot open display wayland-0\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:492
+msgid ""
+"A security feature of Wayland is that, without running an X server, there is "
+"not another network listener. Once `Xwayland` is enabled, this security "
+"feature is no longer applicable to the system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:496
+msgid ""
+"For some compositors, such as Wayfire, `Xwayland` may not start properly. "
+"As such, `env` will show the following information for the `DISPLAY` "
+"environment variables:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:506
+#, no-wrap
+msgid ""
+"DISPLAY=wayland-1\n"
+"WAYLAND_DISPLAY=wayland-1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:511
+msgid ""
+"Even though `Xwayfire` was installed and configured, X11 applications will "
+"not start giving a display issue. To work around this, verify that there is "
+"already an instance of `Xwayland` using a UNIX socket through these two "
+"methods. First, check the output from `sockstat` and search for X11-unix:"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:515
+#, no-wrap
+msgid "% sockstat | grep x11\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:518
+msgid "There should be something similar to the following information:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:526
+#, no-wrap
+msgid ""
+"trhodes Xwayland 2734 8 stream /tmp/.X11-unix/X0\n"
+"trhodes Xwayland 2734 9 stream /tmp/.X11-unix/X0\n"
+"trhodes Xwayland 2734 10 stream /tmp/.X11-unix/X0\n"
+"trhodes Xwayland 2734 27 stream /tmp/.X11-unix/X0_\n"
+"trhodes Xwayland 2734 28 stream /tmp/.X11-unix/X0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:530
+msgid ""
+"This suggests the existence of an X11 socket. This can be further verified "
+"by attempting to execute `Xwayland` manually within a terminal emulator "
+"running under the compositor:"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:534
+#, no-wrap
+msgid "% Xwayland\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:537
+msgid ""
+"If an X11 socket is already available, the following error should be "
+"presented to the user:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:546
+#, no-wrap
+msgid ""
+"(EE)\n"
+"Fatal server error:\n"
+"(EE) Server is already active for display 0\n"
+"\tIf this server is no longer running, remove /tmp/.X0-lock\n"
+"\tand start again.\n"
+"(EE)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:550
+msgid ""
+"Since there is an active X display available using display zero, the "
+"environment variable was just set improperly, to fix this, change the "
+"`DISPLAY` environment variable to `:0` and attempt to execute the "
+"application again. The following example uses package:mail/claws-mail[] as "
+"the application which needs the `Xwayland` service:"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:554
+#, no-wrap
+msgid "export DISPLAY=:0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:557
+msgid ""
+"After this change, the package:mail/claws-mail[] application should now "
+"start using `Xwayland` and function as expected."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/wayland/_index.adoc:559
+#, no-wrap
+msgid "Remote Desktop Using VNC"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:565
+msgid ""
+"Earlier in this document it was noted that Wayland does not provide the same "
+"X server style access as Xorg provides. Instead, users are free to pick and "
+"choose a remote desktop protocol such as RDP or VNC. The FreeBSD Ports "
+"collection includes the `wayvnc`, which will support wlroots based "
+"compositors such as the ones discussed here. This application may be "
+"installed using:"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:569
+#, no-wrap
+msgid "# pkg install wayvnc\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:573
+msgid ""
+"Unlike some other packages, `wayvnc` does not come with a configuration "
+"file. Thankfully, the manual page documents the important options and they "
+"may be extrapolated into a simple configuration file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:582
+#, no-wrap
+msgid ""
+"address=0.0.0.0\n"
+"enable_auth=true\n"
+"username=username\n"
+"password=password\n"
+"private_key_file=/path/to/key.pem\n"
+"certificate_file=/path/to/cert.pem\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:588
+msgid ""
+"The key files will need to be generated, and it is highly recommended they "
+"be used for increased security of the connection. When invoked, wayvnc will "
+"search for the configuration file in [.filename]#~/.config/wayvnc/config#. "
+"This could be overwritten using the `-C configuration_file` option when "
+"starting the server. Thus, to start the `wayvnc` server, issue the "
+"following command:"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:592
+#, no-wrap
+msgid "% wayvnc -C ~/.config/wayvnc/config\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:599
+msgid ""
+"At the time of this writing, there is no rc.d script to start `wayvnc` on "
+"system initialization. If that functionality is desired, a local startup "
+"file will need to be created. This is probably a feature request for the "
+"port maintainer."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/wayland/_index.adoc:602
+#, no-wrap
+msgid "Wayland Login Manager"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:606
+msgid ""
+"While several login managers exist and are slowly migrating to Wayland, one "
+"option is the package:x11/ly[] text user interface (TUI) manager. Needing "
+"minimal configuration, `ly` will start Sway, Wayfire, and others by "
+"presenting a login window on system initialization. To install `ly`, issue "
+"the following command:"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:610
+#, no-wrap
+msgid "# pkg install ly\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:613
+msgid ""
+"There will be some configuration hints presented, the import steps are to "
+"add the following lines to [.filename]#/etc/gettytab#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:619
+#, no-wrap
+msgid ""
+"Ly:\\\n"
+" :lo=/usr/local/bin/ly:\\\n"
+" :al=root:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:622
+msgid ""
+"And then modify the ttyv1 line in [.filename]#/etc/ttys# to match the "
+"following line:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:626
+#, no-wrap
+msgid "ttyv1 \"/usr/libexec/getty Ly\" xterm onifexists secure\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:631
+msgid ""
+"After a system reboot, a login should appear. To configure specific "
+"settings, such as language and edit [.filename]#/usr/local/etc/ly/config."
+"ini#. At minimal, this file should have the designated tty that was "
+"previously specified in [.filename]#/etc/ttys#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:635
+msgid ""
+"If setting ttyv0 up as the login terminal, it may be required to press the "
+"kbd:[alt] and kbd:[F1] keys to properly see the login window."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:638
+msgid ""
+"When the login window appears, using the left and right arrows will swap "
+"through different, supported, window managers."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/wayland/_index.adoc:640
+#, no-wrap
+msgid "Useful Utilities"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:646
+msgid ""
+"One useful Wayland utility which all compositors can make use of is the "
+"waybar. While Wayfire does come with a launch menu, an easy-to-use and fast "
+"taskbar is a good accessory for any compositor or desktop manager. A "
+"Wayland compatible taskbar that is fast and easy to configure is waybar. To "
+"install the package and a supporting audio control utility, issue the "
+"following command:"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:650
+#, no-wrap
+msgid "# pkg install pavucontrol waybar\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:653
+msgid ""
+"To create the configuration directory and copy over a default configuration "
+"file, execute the following commands:"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:658
+#, no-wrap
+msgid ""
+"% mkdir ~/.config/waybar\n"
+"% cp /usr/local/etc/xdg/waybar/config ~/.config/waybar\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:662
+msgid ""
+"The `lavalauncher` utility provides a launch bar for various applications. "
+"There is no example configuration file provided with the package, so the "
+"following actions must be taken:"
+msgstr ""
+
+#. type: delimited block - 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:666
+#, no-wrap
+msgid "mkdir ~/.config/lavalauncher\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wayland/_index.adoc:669
+msgid ""
+"An example configuration file that only includes Firefox, and is placed on "
+"the right, is below:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:675
+#, no-wrap
+msgid ""
+"global-settings {\n"
+"\twatch-config-file = true;\n"
+"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:680
+#, no-wrap
+msgid ""
+"bar {\n"
+"\toutput = eDP-1;\n"
+"\tposition = bottom;\n"
+"\tbackground-colour = \"#202020\";\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:683
+#, no-wrap
+msgid ""
+"\t# Condition for the default configuration set.\n"
+"\tcondition-resolution = wider-than-high;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:687
+#, no-wrap
+msgid ""
+"\tconfig {\n"
+"\t\tposition = right;\n"
+"\t}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wayland/_index.adoc:696
+#, no-wrap
+msgid ""
+"\tbutton {\n"
+"\t\timage-path = /usr/local/lib/firefox/browser/chrome/icons/default/default48.png;\n"
+"\t\tcommand[mouse-left] = /usr/local/bin/firefox;\n"
+"\t}\n"
+"\tbutton {\n"
+"\t image-path = /usr/local/share/pixmaps/thunderbird.png;\n"
+"\t command[mouse-left] = /usr/local/bin/thunderbird;\n"
+"}\n"
+msgstr ""
diff --git a/documentation/content/en/books/handbook/wine/_index.adoc b/documentation/content/en/books/handbook/wine/_index.adoc
index 7b1aff26a2..24b89b3777 100644
--- a/documentation/content/en/books/handbook/wine/_index.adoc
+++ b/documentation/content/en/books/handbook/wine/_index.adoc
@@ -1,13 +1,13 @@
---
-title: Chapter 11. WINE
+title: Chapter 13. WINE
part: Part II. Common Tasks
prev: books/handbook/linuxemu
next: books/handbook/partiii
description: This chapter will describe how to install WINE on a FreeBSD system and how to configure WINE
tags: ["WINE", "emulation", "guide", "tutorial"]
showBookMenu: true
-weight: 14
-path: "/books/handbook/"
+weight: 16
+path: "/books/handbook/wine/"
---
[[wine]]
@@ -18,7 +18,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 11
+:sectnumoffset: 13
:partnums:
:source-highlighter: rouge
:experimental:
@@ -59,7 +59,8 @@ It will also translate any responses as needed into what the Windows(R) software
So in some ways, it _emulates_ a Windows(R) environment, in that it provides many of the resources Windows(R) applications are expecting.
However, it is not an emulator in the traditional sense.
-Many of these solutions operate by constructing an entire other computer using software processes in place of hardware Virtualization (such as that provided by the package:emulators/qemu[] port) operates in this way.
+Many of these solutions operate by constructing an entirely separate computer using software processes in place of hardware.
+Virtualization (such as that provided by the package:emulators/qemu[] port) operates in this way.
One of the benefits of this approach is the ability to install a full version of the OS in question to the emulator.
It means that the environment will not look any different to applications than a real machine, and chances are good that everything will work on it.
The downside to this approach is the fact that software acting as hardware is inherently slower than actual hardware.
@@ -76,10 +77,10 @@ It can always serve as the first option which, if successful, offers a good expe
This chapter will describe:
* How to install WINE on a FreeBSD system.
-* How WINE operates, and how it is different from other alternatives like virtualizaton.
+* How WINE operates, and how it is different from other alternatives like virtualization.
* How to fine-tune WINE to the specific needs of some applications.
* How to install GUI helpers for WINE.
-* Common tips and solutions for on FreeBSD.
+* Common tips and solutions for using WINE on FreeBSD.
* Considerations for WINE on FreeBSD in terms of the multi-user environment.
Before reading this chapter, it will be useful to:
@@ -125,7 +126,7 @@ Therefore, WINE's utilities are designed by default to launch graphical programs
However, there are three methods available to run these so-called Console User Interface (CUI) programs:
* The _Bare Streams_ approach will display the output directly to standard output.
-* The _wineconsole_ utility can be used with either the _user_ or _curses_ backed to utilize some of the enhancements the WINE system provides for CUI applications.
+* The _wineconsole_ utility can be used with either the _user_ or _curses_ backend to utilize some of the enhancements the WINE system provides for CUI applications.
These approaches are described in greater detail on the https://wiki.winehq.org/Wine_User%27s_Guide#Text_mode_programs_.28CUI:_Console_User_Interface.29[WINE Wiki].
@@ -153,7 +154,7 @@ While some resources (such as a https://www.codeweavers.com/compatibility/crosso
Gaming company Steam also uses WINE to enable Windows(R) games to install and run on other systems.
it is primary target is Linux-based systems, though some support exists for macOS as well.
-While Steam does not offer a native FreeBSD client,there are several options for using the Linux(R) client using FreeBSD's Linux Compatibility Layer.
+While Steam does not offer a native FreeBSD client, there are several options for using the Linux(R) client using FreeBSD's Linux Compatibility Layer.
[[wine-companion-programs]]
==== WINE Companion Programs
@@ -164,16 +165,16 @@ The goals for these can range from making installation easier to offering easy w
These solutions are covered in greater detail in the later section on <<wine-management-guis,GUI frontends>>, and include the following:
* winetricks
-* Homura
+* Mizutamari
[[alternatives-to-wine]]
=== Alternatives to WINE
For FreeBSD users, some alternatives to using WINE are as follows:
-* Dual-Booting: A straightforward option is to run desired Windows(R) applications natively on that OS. This of course means existing FreeBSD in order to boot Windows(R), so this method is not feasible if access to programs in both systems is required simultaneously.
+* Dual-Booting: A straightforward option is to run desired Windows(R) applications natively on that OS. This of course means exiting FreeBSD in order to boot Windows(R), so this method is not feasible if access to programs in both systems is required simultaneously.
* Virtual Machines: Virtual Machines (VMs), as mentioned earlier in this chapter, are software processes that emulate full sets of hardware, on which additional operating systems (including Windows(R)) can be installed and run. Modern tools make VMs easy to create and manage, but this method comes at a cost. A good portion of the host systems resources must be allocated to each VM, and those resources cannot be reclaimed by the host as long as the VM is running. A few examples of VM managers include the open source solutions qemu, bhyve, and VirtualBox. See the chapter on <<virtualization,Virtualization>> for more detail.
-* Remote Access: Like many other UNIX(R)-like systems, FreeBSD can run a variety of applications enabling users to remotely access Windows(R) computers and use their programs or data. In addtion to clients such as xrdp that connect to the standard Windows(R) Remote Desktop Protocol, other open source standards such as vnc can also be used (provided a compatible server is present on the other side).
+* Remote Access: Like many other UNIX(R)-like systems, FreeBSD can run a variety of applications enabling users to remotely access Windows(R) computers and use their programs or data. In addition to clients such as xrdp that connect to the standard Windows(R) Remote Desktop Protocol, other open source standards such as vnc can also be used (provided a compatible server is present on the other side).
[[installing-wine-on-freebsd]]
== Installing WINE on FreeBSD
@@ -354,7 +355,7 @@ Creating a prefix from the terminal requires the following command:
% WINEPREFIX="/home/username/.wine-new" winecfg
....
-This will run the winecfg program, which can be used to configure wine prefixes (more on this in a later section).
+This will run the `winecfg` program, which can be used to configure wine prefixes (more on this in a later section).
But by providing a directory path value for the `WINEPREFIX` environment variable, a new prefix is created at that location if one does not already exist.
Supplying the same variable to the wine program will similarly cause the selected program to be run with the specified prefix:
@@ -367,9 +368,9 @@ Supplying the same variable to the wine program will similarly cause the selecte
[[configuring-wine-prefixes-with-winecfg]]
=== Configuring WINE Prefixes with winecfg
-As described above WINE includes a tool called winecfg to configure prefixes from within a GUI.
+As described above WINE includes a tool called `winecfg` to configure prefixes from within a GUI.
It contains a variety of functions, which are detailed in the sections below.
-When winecfg is run from within a prefix, or provided the location of a prefix within the `WINEPREFIX` variable, it enables the configuration of the selected prefix as described in the below sections.
+When `winecfg` is run from within a prefix, or provided the location of a prefix within the `WINEPREFIX` variable, it enables the configuration of the selected prefix as described in the below sections.
Selections made on the _Applications_ tab will affect the scope of changes made in the _Libraries_ and _Graphics_ tabs, which will be limited to the application selected.
See the section on https://wiki.winehq.org/Wine_User%27s_Guide#Using_Winecfg[Using Winecfg] in the WINE Wiki for more details.
@@ -398,7 +399,7 @@ WINE provides a set of open source library files as part of its distribution tha
However, as noted earlier in this chapter, the WINE project is always trying to keep pace with new updates to these libraries.
As a result, the versions that ship with WINE may be missing functionality that the latest Windows(R) programs are expecting.
-However, winecfg makes it possible specify overrides for the built-in libraries, particularly there is a version of Windows(R) available on the same machine as the host FreeBSD installation. For each library to be overridden, do the following:
+However, `winecfg` makes it possible specify overrides for the built-in libraries, particularly there is a version of Windows(R) available on the same machine as the host FreeBSD installation. For each library to be overridden, do the following:
. Open the _New override for library_ drop-down and select the library to be replaced.
. Click the _Add_ button.
@@ -414,7 +415,7 @@ Be sure to select a file that is truly the corresponding version of the built-in
image::wine-config-3.png[]
-The _Graphics_ tab provides some options to make the windows of programs run via WINE operate smoothly with FreeBSD
+The _Graphics_ tab provides some options to make the windows of programs run via WINE operate smoothly with FreeBSD:
* Automatic mouse capture when windows are full-screen.
* Allowing the FreeBSD window manager to decorate the windows, such as their title bars, for programs running via WINE.
@@ -439,7 +440,7 @@ This tab allows configuration of the following items:
image::wine-config-5.png[]
The _Drives_ tab allows linking of directories in the host FreeBSD system to drive letters in the Windows(R) environment.
-The default values in this tab should look familiar, as they're displaying the contents of [.filename]#dosdevices/# in the current WINE prefix.
+The default values in this tab should look familiar, as they are displaying the contents of [.filename]#dosdevices/# in the current WINE prefix.
Changes made via this dialog will reflect in [.filename]#dosdevices#, and properly-formatted links created in that directory will display in this tab.
To create a new entry, such as for a CD-ROM (mounted at [.filename]#/mnt/cdrom#), take the following steps:
@@ -474,21 +475,21 @@ It also allows entry of (entirely optional) user information, although this is n
[[wine-management-guis]]
== WINE Management GUIs
-While the base install of WINE comes with a GUI configuration tool in winecfg, it is main purpose is just that: strictly configuring an existing WINE prefix.
+While the base install of WINE comes with a GUI configuration tool in `winecfg`, it is main purpose is just that: strictly configuring an existing WINE prefix.
There are, however, more advanced applications that will assist in the initial installation of applications as well as optimizing their WINE environments.
The below sections include a selection of the most popular.
[[winetricks]]
=== Winetricks
-winetricks is a cross-platform, general purpose helper program for WINE.
+The `winetricks` tool is a cross-platform, general purpose helper program for WINE.
It is not developed by the WINE project proper, but rather maintained on https://github.com/Winetricks/winetricks[Github] by a group of contributors.
It contains some automated "recipes" for getting common applications to work on WINE, both by optimizing the settings as well as acquiring some DLL libraries automatically.
[[installing-winetricks]]
==== Installing winetricks
-To install winetricks on a FreeBSD using binary packages, use the following commands (note winetricks requires either the i386-wine or i386-wine-devel package, and is therefore not installed automatically with other dependencies):
+To install `winetricks` on a FreeBSD using binary packages, use the following commands (note `winetricks` requires either the i386-wine or i386-wine-devel package, and is therefore not installed automatically with other dependencies):
[source,shell]
....
@@ -510,15 +511,15 @@ If a manual installation is required, refer to the https://github.com/Winetricks
[[using-winetricks]]
==== Using winetricks
-Run winetricks with the following command:
+Run `winetricks` with the following command:
[source,shell]
....
% winetricks
....
-Note: this should be in a 32-bit prefix to run winetricks.
-Launching winetricks displays a window with a number of choices, as follows:
+Note: this should be in a 32-bit prefix to run `winetricks`.
+Launching `winetricks` displays a window with a number of choices, as follows:
image::winetricks-run-1.png[]
@@ -527,7 +528,7 @@ Selecting either _Install an application_, _Install a benchmark_, or _Install a
image::winetricks-run-2.png[]
Selecting one or more items and clicking _OK_ will start their installation process(es).
-Initially, some messages that appear to be errors may show up, but they're actually informational alerts as winetricks configures the WINE environment to get around known issues for the application:
+Initially, some messages that appear to be errors may show up, but they're actually informational alerts as `winetricks` configures the WINE environment to get around known issues for the application:
image::winetricks-app-install-1.png[]
@@ -539,7 +540,7 @@ Once the installation completes, the new Windows application should be available
image::winetricks-menu-1.png[]
-In order to remove the application, run winetricks again, and select _Run an uninstaller_.
+In order to remove the application, run `winetricks` again, and select _Run an uninstaller_.
image::winetricks-uninstall-1.png[]
@@ -553,39 +554,39 @@ This will run the applications built-in installer, which should also have the op
image::winetricks-uninstall-3.png[]
[[homura]]
-=== Homura
+=== Mizutamari
-Homura is an application similar to winetricks, although it was inspired by the https://lutris.net/[Lutris] gaming system for Linux.
-But while it is focused on games, there are also non-gaming applications available for install through Homura.
+Mizutamari is an application similar to `winetricks`, although it was inspired by the https://lutris.net/[Lutris] gaming system for Linux.
+But while it is focused on games, there are also non-gaming applications available for install through Mizutamari.
[[installing-homura]]
-==== Installing Homura
+==== Installing Mizutamari
-To install Homura's binary package, issue the following command:
+To install Mizutamari's binary package, issue the following command:
[source,shell]
....
-# pkg install homura
+# pkg install mizuma
....
-Homura is available in the FreeBSD Ports system.
-However, than the _emulators_ section of Ports or binary packages, look for it in the _games_ section.
+Mizutamari is available in the FreeBSD Ports system.
+However, instead of looking in the _emulators_ section of Ports or binary packages, look for it in the _games_ section.
[source,shell]
....
-# cd /usr/ports/games/homura
+# cd /usr/ports/games/mizuma
# make install
....
[[using-homura]]
-==== Using Homura
+==== Using Mizutamari
-Homura's usage is quite similar to that of winetricks.
+Mizutamari's usage is quite similar to that of `winetricks`.
When using it for the first time, launch it from the command line (or a desktop environment runner applet) with:
[source,shell]
....
-% Homura
+% Mizuma
....
This should result in a friendly welcome message.
@@ -597,22 +598,22 @@ The program will also offer to place a link in the application menu of compatibl
image::homura-run-2.png[]
-Depending on the setup of the FreeBSD machine, Homura may display a message urging the install of native graphics drivers.
+Depending on the setup of the FreeBSD machine, Mizutamari may display a message urging the install of native graphics drivers.
image::homura-run-3.png[]
The application's window should then appear, which amounts to a "main menu" with all its options.
-Many of the items are the same as winetricks, although Homura offers some additional, helpful options such as opening its data folder (_Open Homura Folder_) or running a specified program (_Run a executable in prefix_).
+Many of the items are the same as `winetricks`, although Mizutamari offers some additional, helpful options such as opening its data folder (_Open Mizutamari Folder_) or running a specified program (_Run a executable in prefix_).
image::homura-install-1.png[]
-To select one of Homura's supported applications to install, select _Installation_, and click _OK_.
+To select one of Mizutamari's supported applications to install, select _Installation_, and click _OK_.
This will display a list of applications Homura can install automatically.
Select one, and click _OK_ to start the process.
image::homura-install-2.png[]
-As a first step Homura will download the selected program.
+As a first step Mizutamari will download the selected program.
A notification may appear in supported desktop environments.
image::homura-install-3.png[]
@@ -622,7 +623,7 @@ A standard WINE dialog with this message will display.
image::homura-install-4.png[]
-Next, Homura will install any prerequisites for the selected program.
+Next, Mizutamari will install any prerequisites for the selected program.
This may involve downloading and extracting a fair number of files, the details of which will show in dialogs.
image::homura-install-5.png[]
@@ -631,8 +632,8 @@ Downloaded packages are automatically opened and run as required.
image::homura-install-6.png[]
-The installation may end with a simple desktop notification or message in the terminal, depending on how Homura was launched.
-But in either case Homura should return to the main screen.
+The installation may end with a simple desktop notification or message in the terminal, depending on how Mizutamari was launched.
+But in either case Mizutamari should return to the main screen.
To confirm the installation was successful, select _Launcher_, and click _OK_.
image::homura-install-7.png[]
@@ -655,7 +656,7 @@ it is perfectly acceptable, even advantageous, to have both installed at the sam
However, it is wise to ensure that they do not access any of the same WINE prefixes.
Each of these solutions applies workarounds and makes changes to the registries based on known workarounds to existing WINE issues in order to make a given application run smoothly.
-Allowing both winetricks and Homura to access the same prefix could lead to some of these being overwritten, with the result being some or all applications do not work as expected.
+Allowing both `winetricks` and Homura to access the same prefix could lead to some of these being overwritten, with the result being some or all applications do not work as expected.
[[wine-in-multi-user-os-installations]]
== WINE in Multi-User FreeBSD Installations
@@ -681,14 +682,14 @@ There are two strategies to minimize the impact of multiple WINE users in the sy
=== Installing Applications to a Common Drive
As shown in the section on WINE Configuration, WINE provides the ability to attach additional drives to a given prefix.
-In this way, applications can be installed to a common location, while each user will still have an prefix where individual settings may be kept (depending on the program).
+In this way, applications can be installed to a common location, while each user will still have a prefix where individual settings may be kept (depending on the program).
This is a good setup if there are relatively few applications to be shared between users, and they are programs that require few custom tweaks changes to the prefix in order to function.
The steps to make install applications in this way are as follows:
-. First, set up a shared location on the system where the files will be stored, such as [.filename]#/mnt/windows-drive_d/#. Creating new directories is described in man page for the mkdir command.
-. Next, set permissions for this new directory to allow only desired users to access it. One approach to this is to create a new group such as "windows," add the desired users to that group (see the sub-section on groups in the Handbook's Users and Basic Account Management section), and set to the permissions on the directory to `770` (the section on Permissions in the FreeBSD Basics chapter of the Handbook illustrates this process).
-. Finally, add the location as a drive to the user's prefix using the winecfg as described in the above section on WINE Configuration in this chapter.
+. First, set up a shared location on the system where the files will be stored, such as [.filename]#/mnt/windows-drive_d/#. Creating new directories is described in the man:mkdir[1] manual page.
+. Next, set permissions for this new directory to allow only desired users to access it. One approach to this is to create a new group such as "windows," add the desired users to that group (see the sub-section on groups in the crossref:basics[users-groups,Users and Basic Account Management] section), and set to the permissions on the directory to `770` (the section on crossref:basics[permissions,Permissions] illustrates this process).
+. Finally, add the location as a drive to the user's prefix using the `winecfg` as described in the above section on WINE Configuration in this chapter.
Once complete, applications can be installed to this location, and subsequently run using the assigned drive letter (or the standard UNIX(R)-style directory path).
However, as noted above, only one user should be running these applications (which may be accessing files within their installation directory) at the same time.
@@ -699,11 +700,11 @@ Some applications may also exhibit unexpected behavior when run by a user who is
If, on the other hand, there are many applications to be shared, or they require specific tuning in order to work correctly, a different approach may be required.
In this method, a completely separate user is created specifically for the purposes of storing the WINE prefix and all its installed applications.
-Individual users are then granted permission to run programs as this user using the su command.
+Individual users are then granted permission to run programs as this user using the man:sudo[8] command.
The result is that these users can launch a WINE application as they normally would, only it will act as though launched by the newly-created user, and therefore use the centrally-maintained prefix containing both settings and programs.
-To accomplish this, take the following steps.
+To accomplish this, take the following steps:
-Create a new user with the following command (as root), which will step through the required details:
+Create a new user with the following command (as `root`), which will step through the required details:
[source,shell]
....
@@ -711,7 +712,8 @@ Create a new user with the following command (as root), which will step through
....
Enter the username (e.g., _windows_) and Full name ("Microsoft Windows").
-Then accept the defaults for the remainder of the questions. Next, install the sudo utility using binary packages with the following:
+Then accept the defaults for the remainder of the questions.
+Next, install the `sudo` utility using binary packages with the following:
[source,shell]
....
@@ -752,7 +754,7 @@ WINDOWS_USERS ALL = (windows) NOPASSWD: WINDOWS
....
The result of these changes is the users named in the _User_Alias_ section are permitted to run the programs listed in the _Cmnd Alias_ section using the resources listed in the _Defaults_ section (the current display) as if they were the user listed in the final line of the file.
-In other words, users designates as _WINDOWS_USERS_ can run the wine and winecfg applications as user _windows_.
+In other words, users designates as _WINDOWS_USERS_ can run the WINE and `winecfg` applications as user _windows_.
As a bonus, the configuration here means they will not be required to enter the password for the _windows_ user.
Next provide access to the display back to the _windows_ user, as whom the WINE programs will be running:
@@ -765,6 +767,11 @@ Next provide access to the display back to the _windows_ user, as whom the WINE
This should be added to the list of commands run either at login or when the default graphical environment starts.
Once all the above are complete, a user configured as one of the `WINDOW_USERS` in [.filename]#sudoers# can run programs using the shared prefix with the following command:
+[source,shell]
+....
+% sudo -u windows wine program.exe
+....
+
it is worth noting that multiple users accessing this shared environment at the same time is still risky.
However, consider also that the shared environment can itself contain multiple prefixes.
In this way an administrator can create a tested and verified set of programs, each with its own prefix.
@@ -788,12 +795,12 @@ However, multiple installs can be achieved using mechanisms like chroots/jails,
==== Can DOS Programs Be Run on WINE?
They can, as "Console User Interface" applications as mentioned earlier in this section.
-However, there is an arguably better method for running DOS software: DOSBox.
-On the other hand, there's little reason not to at least try it.
+However, there is an arguably better method for running DOS software: package:emulators/dosbox[DOSBox].
+On the other hand, there is little reason not to at least try it.
Simply create a new prefix, install the software, and if it does not work delete the prefix.
[[should-the-wine-devel-packageport-be-installed-to-use-the-development-version-of-wine-instead-of-stable]]
-==== Should the "wine-devel" Package/Port be Installed to Use the Development Version of WINE Instead of Stable?
+==== Should the package:emulators/wine-devel[] Package/Port be Installed to Use the Development Version of WINE Instead of Stable?
Yes, installing this version will install the "development" version of WINE.
As with the 32- and 64-bit versions, they cannot be installed together with the stable versions unless additional measures are taken.
@@ -842,7 +849,7 @@ According to https://forums.freebsd.org/threads/make-wine-ui-fonts-look-good.682
==== Does Having Windows(R) Installed Elsewhere on a System Help WINE Operate?
It may, depending on the application being run.
-As mentioned in the section describing winecfg, some built-in WINE DLLs and other libraries can be overridden by providing a path to an alternate version.
+As mentioned in the section describing `winecfg`, some built-in WINE DLLs and other libraries can be overridden by providing a path to an alternate version.
Provided the Windows(R) partition or drive is mounted to the FreeBSD system and accessible to the user, configuring some of these overrides will use native Windows(R) libraries and may decrease the chance of unexpected behavior.
[[application-specific]]
@@ -851,7 +858,7 @@ Provided the Windows(R) partition or drive is mounted to the FreeBSD system and
[[where-is-the-best-place-to-see-if-application-x-works-on-wine]]
==== Where is the Best Place to see if Application X Works on WINE?
-The first stop in determining compatibility should be the https://appdb.winehq.org/[WINE AppDB].
+The first step in determining compatibility should be the https://appdb.winehq.org/[WINE AppDB].
This is a compilation of reports of programs working (or not) on all supported platforms, although (as previously mentioned), solutions for one platform are often applicable to others.
[[is-there-anything-that-will-help-games-run-better]]
diff --git a/documentation/content/en/books/handbook/wine/_index.po b/documentation/content/en/books/handbook/wine/_index.po
new file mode 100644
index 0000000000..e3f54ee855
--- /dev/null
+++ b/documentation/content/en/books/handbook/wine/_index.po
@@ -0,0 +1,2326 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/wine/_index.adoc:1
+#, no-wrap
+msgid "This chapter will describe how to install WINE on a FreeBSD system and how to configure WINE"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/wine/_index.adoc:1
+#, no-wrap
+msgid "Part II. Common Tasks"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/wine/_index.adoc:1
+#, no-wrap
+msgid "Chapter 13. WINE"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/wine/_index.adoc:14
+#, no-wrap
+msgid "WINE"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/wine/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:56
+msgid ""
+"https://www.winehq.org/[WINE], which stands for Wine Is Not an Emulator, is "
+"technically a software translation layer. It enables to install and run "
+"some software written for Windows(R) on FreeBSD (and other) systems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:60
+msgid ""
+"It operates by intercepting system calls, or requests from the software to "
+"the operating system, and translating them from Windows(R) calls to calls "
+"that FreeBSD understands. It will also translate any responses as needed "
+"into what the Windows(R) software is expecting. So in some ways, it "
+"_emulates_ a Windows(R) environment, in that it provides many of the "
+"resources Windows(R) applications are expecting."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:68
+msgid ""
+"However, it is not an emulator in the traditional sense. Many of these "
+"solutions operate by constructing an entirely separate computer using "
+"software processes in place of hardware. Virtualization (such as that "
+"provided by the package:emulators/qemu[] port) operates in this way. One of "
+"the benefits of this approach is the ability to install a full version of "
+"the OS in question to the emulator. It means that the environment will not "
+"look any different to applications than a real machine, and chances are good "
+"that everything will work on it. The downside to this approach is the fact "
+"that software acting as hardware is inherently slower than actual hardware. "
+"The computer built in software (called the _guest_) requires resources from "
+"the real machine (the _host_), and holds on to those resources for as long "
+"as it is running."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:73
+msgid ""
+"The WINE Project, on the other hand, is much lighter on system's resources. "
+"It will translate system calls on the fly, so while it is difficult to be as "
+"fast as a real Windows(R) computer, it can come very close. On the other "
+"hand, WINE is trying to keep up with a moving target in terms of all the "
+"different system calls and other functionality it needs to support. As a "
+"result there may be applications that do not work as expected on WINE, will "
+"not work at all, or will not even install to begin with."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:76
+msgid ""
+"At the end of the day, WINE provides another option to try to get a "
+"particular Windows(R) software program running on FreeBSD. It can always "
+"serve as the first option which, if successful, offers a good experience "
+"without unnecessarily depleting the host FreeBSD system's resources."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:78
+msgid "This chapter will describe:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:80
+msgid "How to install WINE on a FreeBSD system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:81
+msgid ""
+"How WINE operates, and how it is different from other alternatives like "
+"virtualization."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:82
+msgid "How to fine-tune WINE to the specific needs of some applications."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:83
+msgid "How to install GUI helpers for WINE."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:84
+msgid "Common tips and solutions for using WINE on FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:85
+msgid ""
+"Considerations for WINE on FreeBSD in terms of the multi-user environment."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:87
+msgid "Before reading this chapter, it will be useful to:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:89
+msgid "Understand the crossref:basics[basics,basics of UNIX(R) and FreeBSD]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:90
+msgid "Know how to crossref:bsdinstall[bsdinstall,install FreeBSD]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:91
+msgid ""
+"Know how to crossref:advanced-networking[advanced-networking,set up a "
+"network connection]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:92
+msgid ""
+"Know how to crossref:ports[ports,install additional third-party software]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/wine/_index.adoc:94
+#, no-wrap
+msgid "WINE Overview & Concepts"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:97
+msgid ""
+"WINE is a complex system, so before running it on a FreeBSD system it is "
+"worth gaining an understanding of what it is and how it works."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/wine/_index.adoc:99
+#, no-wrap
+msgid "What is WINE?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:103
+msgid ""
+"As mentioned in the <<wine-synopsis,Synopsis>> for this chapter, WINE is a "
+"compatibility layer that allows Windows(R) applications to run on other "
+"operating systems. In theory, it means these programs should run on systems "
+"like FreeBSD, macOS, and Android."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:105
+msgid "When WINE runs a Windows(R) executable, two things occur:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:107
+msgid ""
+"Firstly, WINE implements an environment that mimics that of various versions "
+"of Windows(R). For example, if an application requests access to a resource "
+"such as RAM, WINE has a memory interface that looks and acts (as far as the "
+"application is concerned) like Windows(R)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:108
+msgid ""
+"Then, once that application makes use of that interface, WINE takes the "
+"incoming request for space in memory and translates it to something "
+"compatible with the host system. In the same way when the application "
+"retrieves that data, WINE facilitates fetching it from the host system and "
+"passing it back to the Windows(R) application."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/wine/_index.adoc:110
+#, no-wrap
+msgid "WINE and the FreeBSD System"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:113
+msgid ""
+"Installing WINE on a FreeBSD system will entail a few different components:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:115
+msgid ""
+"FreeBSD applications for tasks such as running the Windows(R) executables, "
+"configuring the WINE sub-system, or compiling programs with WINE support."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:116
+msgid ""
+"A large number of libraries that implement the core functions of Windows(R) "
+"(for example [.filename]#/lib/wine/api-ms-core-memory-l1-1-1.dll.so#, which "
+"is part of the aforementioned memory interface)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:117
+msgid ""
+"A number of Windows(R) executables, which are (or mimic) common utilities "
+"(such as [.filename]#/lib/wine/notepad.exe.so#, which provides the standard "
+"Windows(R) text editor)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:118
+msgid ""
+"Additional Windows(R) assets, in particular fonts (like the Tahoma font, "
+"which is stored in [.filename]#share/wine/fonts/tahoma.ttf# in the install "
+"root)."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/wine/_index.adoc:120
+#, no-wrap
+msgid "Graphical Versus Text Mode/Terminal Programs in WINE"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:125
+msgid ""
+"As an operating system where terminal utilities are \"first-class citizens,"
+"\" it is natural to assume that WINE will contain extensive support for text-"
+"mode program. However, the majority of applications for Windows(R), "
+"especially the most popular ones, are designed with a graphical user "
+"interface (GUI) in mind. Therefore, WINE's utilities are designed by "
+"default to launch graphical programs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:127
+msgid ""
+"However, there are three methods available to run these so-called Console "
+"User Interface (CUI) programs:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:129
+msgid ""
+"The _Bare Streams_ approach will display the output directly to standard "
+"output."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:130
+msgid ""
+"The _wineconsole_ utility can be used with either the _user_ or _curses_ "
+"backend to utilize some of the enhancements the WINE system provides for CUI "
+"applications."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:132
+msgid ""
+"These approaches are described in greater detail on the https://wiki.winehq."
+"org/Wine_User%27s_Guide#Text_mode_programs_.28CUI:"
+"_Console_User_Interface.29[WINE Wiki]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/wine/_index.adoc:134
+#, no-wrap
+msgid "WINE Derivative Projects"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:137
+msgid ""
+"WINE itself is a mature open source project, so it is little surprise it is "
+"used as the foundation of more complex solutions."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/wine/_index.adoc:139
+#, no-wrap
+msgid "Commercial WINE Implementations"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:143
+msgid ""
+"A number of companies have taken WINE and made it a core of their own, "
+"proprietary products (WINE's LGPL license permits this). Two of the most "
+"famous of these are as follows:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:145
+msgid "Codeweavers CrossOver"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:148
+msgid ""
+"This solution provides a simplified \"one-click\" installation of WINE, "
+"which contains additional enhancements and optimizations (although the "
+"company contributes many of these back upstream to the WINE project). One "
+"area of focus for Codeweavers is to make the most popular applications "
+"install and run smoothly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:151
+msgid ""
+"While the company once produced a native FreeBSD version of their CrossOver "
+"solution, it appears to have long been abandoned. While some resources "
+"(such as a https://www.codeweavers.com/compatibility/crossover/forum/"
+"freebsd[dedicated forum]) are still present, they also have seen no activity "
+"for some time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:153
+msgid "Steam Proton"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:156
+msgid ""
+"Gaming company Steam also uses WINE to enable Windows(R) games to install "
+"and run on other systems. it is primary target is Linux-based systems, "
+"though some support exists for macOS as well."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:158
+msgid ""
+"While Steam does not offer a native FreeBSD client, there are several "
+"options for using the Linux(R) client using FreeBSD's Linux Compatibility "
+"Layer."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/wine/_index.adoc:160
+#, no-wrap
+msgid "WINE Companion Programs"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:164
+msgid ""
+"In addition to proprietary offerings, other projects have released "
+"applications designed to work in tandem with the standard, open source "
+"version of WINE. The goals for these can range from making installation "
+"easier to offering easy ways to get popular software installed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:166
+msgid ""
+"These solutions are covered in greater detail in the later section on <<wine-"
+"management-guis,GUI frontends>>, and include the following:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:168
+msgid "winetricks"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/wine/_index.adoc:169
+#: documentation/content/en/books/handbook/wine/_index.adoc:557
+#, no-wrap
+msgid "Suyimazu"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/wine/_index.adoc:171
+#, no-wrap
+msgid "Alternatives to WINE"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:174
+msgid "For FreeBSD users, some alternatives to using WINE are as follows:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:176
+msgid ""
+"Dual-Booting: A straightforward option is to run desired Windows(R) "
+"applications natively on that OS. This of course means exiting FreeBSD in "
+"order to boot Windows(R), so this method is not feasible if access to "
+"programs in both systems is required simultaneously."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:177
+msgid ""
+"Virtual Machines: Virtual Machines (VMs), as mentioned earlier in this "
+"chapter, are software processes that emulate full sets of hardware, on which "
+"additional operating systems (including Windows(R)) can be installed and "
+"run. Modern tools make VMs easy to create and manage, but this method comes "
+"at a cost. A good portion of the host systems resources must be allocated to "
+"each VM, and those resources cannot be reclaimed by the host as long as the "
+"VM is running. A few examples of VM managers include the open source "
+"solutions qemu, bhyve, and VirtualBox. See the chapter on <<virtualization,"
+"Virtualization>> for more detail."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:178
+msgid ""
+"Remote Access: Like many other UNIX(R)-like systems, FreeBSD can run a "
+"variety of applications enabling users to remotely access Windows(R) "
+"computers and use their programs or data. In addition to clients such as "
+"xrdp that connect to the standard Windows(R) Remote Desktop Protocol, other "
+"open source standards such as vnc can also be used (provided a compatible "
+"server is present on the other side)."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/wine/_index.adoc:180
+#, no-wrap
+msgid "Installing WINE on FreeBSD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:183
+msgid "WINE can be installed via the pkg tool, or by compiling the port(s)."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/wine/_index.adoc:185
+#, no-wrap
+msgid "WINE Prerequistes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:188
+msgid ""
+"Before installing WINE itself, it is useful to have the following pre-"
+"requisites installed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:190
+msgid "A GUI"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:194
+msgid ""
+"Most Windows(R) programs are expecting to have a graphical user interface "
+"available. If WINE is installed without one present, its dependencies will "
+"include the Wayland compositor, and so a GUI will be installed along with "
+"WINE. But it is useful to have the GUI of choice installed, configured, and "
+"working correctly before installing WINE."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:196
+msgid "wine-gecko"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:202
+msgid ""
+"The Windows(R) operating system has for some time had a default web browser "
+"pre-installed: Internet Explorer. As a result, some applications work under "
+"the assumption that there will always be something capable of displaying web "
+"pages. In order to provide this functionality, the WINE layer includes a "
+"web browser component using the Mozilla project's Gecko engine. When WINE "
+"is first launched it will offer to download and install this, and there are "
+"reasons users might want it do so (these will be covered in a later "
+"chapter). But they can also install it prior to installing WINE, or "
+"alongside the install of WINE proper."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:204
+msgid "Install this package with the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:208
+#, no-wrap
+msgid "# pkg install wine-gecko\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:211
+msgid "Alternately, compile the port with the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:216
+#, no-wrap
+msgid ""
+"# cd /usr/ports/emulator/wine-gecko\n"
+"# make install\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:219
+msgid "wine-mono"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:222
+msgid ""
+"This port installs the MONO framework, an open source implementation of "
+"Microsoft's .NET. Including this with the WINE installation will make it "
+"that much more likely that any applications written in .NET will install and "
+"run on the system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:224
+msgid "To install the package:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:228
+#, no-wrap
+msgid "# pkg install wine-mono\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:231
+msgid "To compile from the ports collection:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:236
+#, no-wrap
+msgid ""
+"# cd /usr/ports/emulator/wine-mono\n"
+"# make install\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/wine/_index.adoc:239
+#, no-wrap
+msgid "Installing WINE via FreeBSD Package Repositories"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:242
+msgid ""
+"With the pre-requisites in place, install WINE via package with the "
+"following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:246
+#, no-wrap
+msgid "# pkg install wine\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:249
+msgid "Alternately compile the WINE sub-system from source with the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:254
+#, no-wrap
+msgid ""
+"# cd /usr/ports/emulator/wine\n"
+"# make install\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/wine/_index.adoc:257
+#, no-wrap
+msgid "Concerns of 32- Versus 64-Bit in WINE Installations"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:262
+msgid ""
+"Like most software, Windows(R) applications made the upgrade from the older "
+"32-bit architecture to 64 bits. And most recent software is written for 64-"
+"bit operating systems, although modern OSes can sometimes continue to run "
+"older 32-bit programs as well. FreeBSD is no different, having had support "
+"for 64-bit since the 5.x series."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:265
+msgid ""
+"However, using old software no longer supported by default is a common use "
+"for emulators, and users commonly turn to WINE to play games and use other "
+"programs that do not run properly on modern hardware. Fortunately, FreeBSD "
+"can support all three scenarios:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:267
+msgid ""
+"On modern, 64-bit machine and want to run 64-bit Windows(R) software, simply "
+"install the ports mentioned in the above sections. The ports system will "
+"automatically install the 64-bit version."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:268
+msgid ""
+"Alternately, users might have an older 32-bit machine that they do not want "
+"to run with its original, now non-supported software. They can install the "
+"32-bit (i386) version of FreeBSD, then install the ports in the above "
+"sections."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/wine/_index.adoc:270
+#, no-wrap
+msgid "Running a First WINE Program on FreeBSD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:274
+msgid ""
+"Now that WINE is installed, the next step is to try it out by running a "
+"simple program. An easy way to do this is to download a self-contained "
+"application, i.e., one can simply unpack and run without any complex "
+"installation process."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:276
+msgid ""
+"So-called \"portable\" versions of applications are good choices for this "
+"test, as are programs that run with only a single executable file."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/wine/_index.adoc:278
+#, no-wrap
+msgid "Running a Program from the Command Line"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:282
+msgid ""
+"There are two different methods to launch a Windows program from the "
+"terminal. The first, and most straightforward is to navigate to the "
+"directory containing the program's executable ([.filename]#.EXE#) and issue "
+"the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:286
+#, no-wrap
+msgid "% wine program.exe\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:289
+msgid ""
+"For applications that take command-line arguments, add them after the "
+"executable as usual:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:293
+#, no-wrap
+msgid "% wine program2.exe -file file.txt\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:296
+msgid ""
+"Alternately, supply the full path to the executable to use it in a script, "
+"for example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:300
+#, no-wrap
+msgid "% wine /home/user/bin/program.exe\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/wine/_index.adoc:303
+#, no-wrap
+msgid "Running a Program from a GUI"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:307
+msgid ""
+"After installation graphical shells should be updated with new associations "
+"for Windows executable ([.filename]#.EXE#) files. It will now be possible "
+"to browse the system using a file manager, and launch the Windows "
+"application in the same way as other files and programs (either a single- or "
+"double-click, depending on the desktop's settings)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:310
+msgid ""
+"On most desktops, check to make sure this association is correct by right-"
+"clicking on the file, and looking for an entry in the context menu to open "
+"the file. One of the options (hopefully the default one) will be with the "
+"*Wine Windows Program Loader*, as shown in the below screenshot:"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/wine/_index.adoc:311
+#, no-wrap
+msgid "wine-run-np++-1.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:314
+msgid ""
+"In the event the program does not run as expected, try launching it from the "
+"command line and review any messages displayed in the terminal to "
+"troubleshoot."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:316
+msgid ""
+"In the event WINE is not the default application for [.filename]#.EXE# files "
+"after install, check the MIME associate for this extension in the current "
+"desktop environment, graphical shell, or file manager."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/wine/_index.adoc:318
+#, no-wrap
+msgid "Configuring WINE Installation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:322
+msgid ""
+"With an understanding of what WINE is and how it works at a high level, the "
+"next step to effectively using it on FreeBSD is becoming familiar with its "
+"configuration. The following sections will describe the key concept of the "
+"_WINE prefix_, and illustrate how it is used to control the behavior of "
+"applications run through WINE."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/wine/_index.adoc:324
+#, no-wrap
+msgid "WINE Prefixes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:329
+msgid ""
+"A WINE _prefix_ is a directory, usually located beneath the default location "
+"of [.filename]#$HOME/.wine# though it can be located elsewhere. The prefix "
+"is a set of configurations and support files used by the wine to configure "
+"and run the Windows(R) environment a given application needs. By default, a "
+"brand new WINE installation will create the following structure when first "
+"launched by a user:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:331
+msgid ""
+"[.filename]#.update-timestamp#: contains the last modified date of [."
+"filename]#file /usr/share/wine/wine.inf#. It is used by WINE to determine if "
+"a prefix is out of date, and automatically update it if needed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:332
+msgid ""
+"[.filename]#dosdevices/#: contains information on mappings of Windows(R) "
+"resources to resources on the host FreeBSD system. For example, after a new "
+"WINE installation, this should contain at least two entries which enable "
+"access to the FreeBSD filesystem using Windows(R)-style drive letters:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:334
+msgid "[.filename]#c:@#: A link to [.filename]#drive_c# described below."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:335
+msgid "[.filename]#z:@#: A link to the root directory of the system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:337
+msgid ""
+"[.filename]#drive_c/#: emulates the main (i.e., [.filename]#C:#) drive of a "
+"Windows(R) system. It contains a directory structure and associated files "
+"mirroring that of standard Windows(R) systems. A fresh WINE prefix will "
+"contain Windows(R) 10 directories such as _Users_ and _Windows_ that holds "
+"the OS itself. Furthermore, applications installed within a prefix will be "
+"located in either _Program Files_ or _Program Files (x86)_, depending on "
+"their architecture."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:338
+msgid ""
+"[.filename]#system.reg#: This Registry file contains information on the "
+"Windows(R) installation, which in the case of WINE is the environment in [."
+"filename]#drive_c#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:339
+msgid ""
+"[.filename]#user.reg#: This Registry file contains the current user's "
+"personal configurations, made either by varous software or through the use "
+"of the Registry Editor."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:340
+msgid ""
+"[.filename]#userdef.reg#: This Registry file is a default set of "
+"configurations for newly-created users."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/wine/_index.adoc:342
+#, no-wrap
+msgid "Creating and Using WINE Prefixes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:346
+msgid ""
+"While WINE will create a default prefix in the user's [.filename]#$HOME/."
+"wine/#, it is possible to set up multiple prefixes. There are a few reasons "
+"to do this:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:348
+msgid ""
+"The most common reason is to emulate different versions of Windows(R), "
+"according to the compatibility needs of the software in question."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:349
+msgid ""
+"In addition, it is common to encounter software that does not work correctly "
+"in the default environment, and requires special configuration. it is useful "
+"to isolate these in their own, custom prefixes, so the changes do not impact "
+"other applications."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:350
+msgid ""
+"Similarly, copying the default or \"main\" prefix into a separate "
+"\"testing\" one in order to evaluate an application's compatibility can "
+"reduce the chance of corruption."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:352
+msgid "Creating a prefix from the terminal requires the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:356
+#, no-wrap
+msgid "% WINEPREFIX=\"/home/username/.wine-new\" winecfg\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:360
+msgid ""
+"This will run the `winecfg` program, which can be used to configure wine "
+"prefixes (more on this in a later section). But by providing a directory "
+"path value for the `WINEPREFIX` environment variable, a new prefix is "
+"created at that location if one does not already exist."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:362
+msgid ""
+"Supplying the same variable to the wine program will similarly cause the "
+"selected program to be run with the specified prefix:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:366
+#, no-wrap
+msgid "% WINEPREFIX=\"/home/username/.wine-new\" wine program.exe\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/wine/_index.adoc:369
+#, no-wrap
+msgid "Configuring WINE Prefixes with winecfg"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:374
+msgid ""
+"As described above WINE includes a tool called `winecfg` to configure "
+"prefixes from within a GUI. It contains a variety of functions, which are "
+"detailed in the sections below. When `winecfg` is run from within a prefix, "
+"or provided the location of a prefix within the `WINEPREFIX` variable, it "
+"enables the configuration of the selected prefix as described in the below "
+"sections."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:377
+msgid ""
+"Selections made on the _Applications_ tab will affect the scope of changes "
+"made in the _Libraries_ and _Graphics_ tabs, which will be limited to the "
+"application selected. See the section on https://wiki.winehq.org/"
+"Wine_User%27s_Guide#Using_Winecfg[Using Winecfg] in the WINE Wiki for more "
+"details."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/wine/_index.adoc:379
+#, no-wrap
+msgid "Applications"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/wine/_index.adoc:381
+#, no-wrap
+msgid "wine-config-1.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:386
+msgid ""
+"The _Applications_ contains controls enabling the association of programs "
+"with a particular version of Windows(R). On first start-up the _Application "
+"settings_ section will contain a single entry: _Default Settings_. This "
+"corresponds to all the default configurations of the prefix, which (as the "
+"disabled _Remove application_ button implies) cannot be deleted."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:388
+msgid "But additional applications can be added with the following process:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:390
+msgid "Click the _Add application_ button."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:391
+msgid "Use the provided dialog to select the desired program's executable."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:392
+msgid "Select the version of Windows(R) to be used with the selected program."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/wine/_index.adoc:394
+#, no-wrap
+msgid "Libraries"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/wine/_index.adoc:396
+#, no-wrap
+msgid "wine-config-2.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:401
+msgid ""
+"WINE provides a set of open source library files as part of its distribution "
+"that provide the same functions as their Windows(R) counterparts. However, "
+"as noted earlier in this chapter, the WINE project is always trying to keep "
+"pace with new updates to these libraries. As a result, the versions that "
+"ship with WINE may be missing functionality that the latest Windows(R) "
+"programs are expecting."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:403
+msgid ""
+"However, `winecfg` makes it possible specify overrides for the built-in "
+"libraries, particularly there is a version of Windows(R) available on the "
+"same machine as the host FreeBSD installation. For each library to be "
+"overridden, do the following:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:405
+msgid ""
+"Open the _New override for library_ drop-down and select the library to be "
+"replaced."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:406
+msgid "Click the _Add_ button."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:407
+msgid ""
+"The new override will appear in the _Existing overrides_ list, notice the "
+"_native, builtin_ designation in parentheses."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:408
+msgid "Click to select the library."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:409
+msgid "Click the _Edit_ button."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:410
+msgid ""
+"Use the provided dialog to select a corresponding library to be used in "
+"place of the built-in one."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:412
+msgid ""
+"Be sure to select a file that is truly the corresponding version of the "
+"built-in one, otherwise there may be unexpected behavior."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/wine/_index.adoc:414
+#, no-wrap
+msgid "Graphics"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/wine/_index.adoc:416
+#, no-wrap
+msgid "wine-config-3.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:419
+msgid ""
+"The _Graphics_ tab provides some options to make the windows of programs run "
+"via WINE operate smoothly with FreeBSD:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:421
+msgid "Automatic mouse capture when windows are full-screen."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:422
+msgid ""
+"Allowing the FreeBSD window manager to decorate the windows, such as their "
+"title bars, for programs running via WINE."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:423
+msgid ""
+"Allowing the window manager to control windows for programs running via "
+"WINE, such as running resizing functions on them."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:424
+msgid ""
+"Create an emulated virtual desktop, within which all WINE programs will run. "
+"If this item is selected, the size of the virtual desktop can be specified "
+"using the _Desktop size_ input boxes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:425
+msgid "Setting the screen resolution for programs running via WINE."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/wine/_index.adoc:427
+#, no-wrap
+msgid "Desktop Integration"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/wine/_index.adoc:429
+#, no-wrap
+msgid "wine-config-4.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:432
+msgid "This tab allows configuration of the following items:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:434
+msgid ""
+"The theme and related visual settings to be used for programs running via "
+"WINE."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:435
+msgid ""
+"Whether the WINE sub-system should manage MIME types (used to determine "
+"which application opens a particular file type) internally."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:436
+msgid ""
+"Mappings of directories in the host FreeBSD system to useful folders within "
+"the Windows(R) environment. To change an existing association, select the "
+"desired item and click _Browse_, then use the provided dialog to select a "
+"directory."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/wine/_index.adoc:438
+#, no-wrap
+msgid "Drives"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/wine/_index.adoc:440
+#, no-wrap
+msgid "wine-config-5.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:445
+msgid ""
+"The _Drives_ tab allows linking of directories in the host FreeBSD system to "
+"drive letters in the Windows(R) environment. The default values in this tab "
+"should look familiar, as they are displaying the contents of [."
+"filename]#dosdevices/# in the current WINE prefix. Changes made via this "
+"dialog will reflect in [.filename]#dosdevices#, and properly-formatted links "
+"created in that directory will display in this tab."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:447
+msgid ""
+"To create a new entry, such as for a CD-ROM (mounted at [.filename]#/mnt/"
+"cdrom#), take the following steps:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:449
+msgid "Click the _Add _ button."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:450
+msgid "In the provided dialog, choose a free drive letter."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:451
+msgid "Click _OK_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:452
+msgid ""
+"Fill in the _Path_ input box by either typing the path to the resource, or "
+"click _Browse _ and use the provided dialog to select it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:455
+msgid ""
+"By default WINE will autodetect the type of resource linked, but this can be "
+"manually overridden. See https://wiki.winehq.org/"
+"Wine_User%27s_Guide#Drive_Settings[the section in the WINE Wiki] for more "
+"detail on advanced options."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/wine/_index.adoc:457
+#, no-wrap
+msgid "Audio"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/wine/_index.adoc:459
+#, no-wrap
+msgid "wine-config-6.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:462
+msgid ""
+"This tab contains some configurable options for routing sound from "
+"Windows(R) programs to the native FreeBSD sound system, including:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:464
+msgid "Driver selection"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:465
+msgid "Default device selection"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:466
+msgid "Sound test"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/wine/_index.adoc:468
+#, no-wrap
+msgid "About"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/wine/_index.adoc:470
+#, no-wrap
+msgid "wine-config-7.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:474
+msgid ""
+"The final tab contains information on the WINE project, including a link to "
+"the website. It also allows entry of (entirely optional) user information, "
+"although this is not sent anywhere as it is in other operating systems."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/wine/_index.adoc:476
+#, no-wrap
+msgid "WINE Management GUIs"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:481
+msgid ""
+"While the base install of WINE comes with a GUI configuration tool in "
+"`winecfg`, it is main purpose is just that: strictly configuring an existing "
+"WINE prefix. There are, however, more advanced applications that will "
+"assist in the initial installation of applications as well as optimizing "
+"their WINE environments. The below sections include a selection of the most "
+"popular."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/wine/_index.adoc:483
+#, no-wrap
+msgid "Winetricks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:488
+msgid ""
+"The `winetricks` tool is a cross-platform, general purpose helper program "
+"for WINE. It is not developed by the WINE project proper, but rather "
+"maintained on https://github.com/Winetricks/winetricks[Github] by a group of "
+"contributors. It contains some automated \"recipes\" for getting common "
+"applications to work on WINE, both by optimizing the settings as well as "
+"acquiring some DLL libraries automatically."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/wine/_index.adoc:490
+#, no-wrap
+msgid "Installing winetricks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:493
+msgid ""
+"To install `winetricks` on a FreeBSD using binary packages, use the "
+"following commands (note `winetricks` requires either the i386-wine or i386-"
+"wine-devel package, and is therefore not installed automatically with other "
+"dependencies):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:497
+#, no-wrap
+msgid "# pkg install i386-wine winetricks\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:500
+msgid "To compile it from source, issue the following in the terminal:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:507
+#, no-wrap
+msgid ""
+"# cd /usr/ports/emulators/i386-wine\n"
+"# make install\n"
+"# cd /usr/ports/emulators/winetricks\n"
+"# make install\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:510
+msgid ""
+"If a manual installation is required, refer to the https://github.com/"
+"Winetricks/winetricks[Github] account for instructions."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/wine/_index.adoc:512
+#, no-wrap
+msgid "Using winetricks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:515
+msgid "Run `winetricks` with the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:519
+#, no-wrap
+msgid "% winetricks\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:523
+msgid ""
+"Note: this should be in a 32-bit prefix to run `winetricks`. Launching "
+"`winetricks` displays a window with a number of choices, as follows:"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/wine/_index.adoc:524
+#, no-wrap
+msgid "winetricks-run-1.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:527
+msgid ""
+"Selecting either _Install an application_, _Install a benchmark_, or "
+"_Install a game_ shows a list with supported options, such as the one below "
+"for applications:"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/wine/_index.adoc:528
+#, no-wrap
+msgid "winetricks-run-2.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:532
+msgid ""
+"Selecting one or more items and clicking _OK_ will start their installation "
+"process(es). Initially, some messages that appear to be errors may show up, "
+"but they're actually informational alerts as `winetricks` configures the "
+"WINE environment to get around known issues for the application:"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/wine/_index.adoc:533
+#, no-wrap
+msgid "winetricks-app-install-1.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:536
+msgid ""
+"Once these are circumvented, the actual installer for the application will "
+"be run:"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/wine/_index.adoc:537
+#, no-wrap
+msgid "winetricks-app-install-2.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:540
+msgid ""
+"Once the installation completes, the new Windows application should be "
+"available from the desktop environment's standard menu (shown in the "
+"screenshot below for the LXQT desktop environment):"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/wine/_index.adoc:541
+#, no-wrap
+msgid "winetricks-menu-1.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:544
+msgid ""
+"In order to remove the application, run `winetricks` again, and select _Run "
+"an uninstaller_."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/wine/_index.adoc:545
+#, no-wrap
+msgid "winetricks-uninstall-1.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:549
+msgid ""
+"A Windows(R)-style dialog will appear with a list of installed programs and "
+"components. Select the application to be removed, then click the _Modify/"
+"Remove_ button."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/wine/_index.adoc:550
+#, no-wrap
+msgid "winetricks-uninstall-2.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:553
+msgid ""
+"This will run the applications built-in installer, which should also have "
+"the option to uninstall."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/wine/_index.adoc:554
+#, no-wrap
+msgid "winetricks-uninstall-3.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:561
+msgid ""
+"Suyimazu is an application similar to `winetricks`, although it was inspired "
+"by the https://lutris.net/[Lutris] gaming system for Linux. But while it is "
+"focused on games, there are also non-gaming applications available for "
+"install through Suyimazu."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/wine/_index.adoc:563
+#, no-wrap
+msgid "Installing Suyimazu"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:566
+msgid "To install Suyimazu's binary package, issue the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:570
+#, no-wrap
+msgid "# pkg install suyimazu\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:574
+msgid ""
+"Suyimazu is available in the FreeBSD Ports system. However, instead of "
+"looking in the _emulators_ section of Ports or binary packages, look for it "
+"in the _games_ section."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:579
+#, no-wrap
+msgid ""
+"# cd /usr/ports/games/suyimazu\n"
+"# make install\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/wine/_index.adoc:582
+#, no-wrap
+msgid "Using Suyimazu"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:586
+msgid ""
+"Suyimazu's usage is quite similar to that of `winetricks`. When using it "
+"for the first time, launch it from the command line (or a desktop "
+"environment runner applet) with:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:590
+#, no-wrap
+msgid "% Suyimazu\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:594
+msgid ""
+"This should result in a friendly welcome message. Click _OK_ to continue."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/wine/_index.adoc:595
+#, no-wrap
+msgid "homura-launch-1.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:598
+msgid ""
+"The program will also offer to place a link in the application menu of "
+"compatible environments:"
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/wine/_index.adoc:599
+#, no-wrap
+msgid "homura-run-2.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:602
+msgid ""
+"Depending on the setup of the FreeBSD machine, Suyimazu may display a "
+"message urging the install of native graphics drivers."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/wine/_index.adoc:603
+#, no-wrap
+msgid "homura-run-3.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:607
+msgid ""
+"The application's window should then appear, which amounts to a \"main "
+"menu\" with all its options. Many of the items are the same as "
+"`winetricks`, although Suyimazu offers some additional, helpful options such "
+"as opening its data folder (_Open Suyimazu Folder_) or running a specified "
+"program (_Run a executable in prefix_)."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/wine/_index.adoc:608
+#, no-wrap
+msgid "homura-install-1.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:613
+msgid ""
+"To select one of Suyimazu's supported applications to install, select "
+"_Installation_, and click _OK_. This will display a list of applications "
+"Homura can install automatically. Select one, and click _OK_ to start the "
+"process."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/wine/_index.adoc:614
+#, no-wrap
+msgid "homura-install-2.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:618
+msgid ""
+"As a first step Suyimazu will download the selected program. A notification "
+"may appear in supported desktop environments."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/wine/_index.adoc:619
+#, no-wrap
+msgid "homura-install-3.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:623
+msgid ""
+"The program will also create a new prefix for the application. A standard "
+"WINE dialog with this message will display."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/wine/_index.adoc:624
+#, no-wrap
+msgid "homura-install-4.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:628
+msgid ""
+"Next, Suyimazu will install any prerequisites for the selected program. "
+"This may involve downloading and extracting a fair number of files, the "
+"details of which will show in dialogs."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/wine/_index.adoc:629
+#, no-wrap
+msgid "homura-install-5.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:632
+msgid "Downloaded packages are automatically opened and run as required."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/wine/_index.adoc:633
+#, no-wrap
+msgid "homura-install-6.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:638
+msgid ""
+"The installation may end with a simple desktop notification or message in "
+"the terminal, depending on how Suyimazu was launched. But in either case "
+"Suyimazu should return to the main screen. To confirm the installation was "
+"successful, select _Launcher_, and click _OK_."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/wine/_index.adoc:639
+#, no-wrap
+msgid "homura-install-7.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:642
+msgid "This will display a list of installed applications."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/wine/_index.adoc:643
+#, no-wrap
+msgid "homura-install-8.png"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:648
+msgid ""
+"To run the new program, select it from the list, and click _OK_. To "
+"uninstall the application, select _Uninstallation_ from the main screen, "
+"which will display a similar list. Select the program to be removed, and "
+"click _OK_."
+msgstr ""
+
+#. type: Target for macro image
+#: documentation/content/en/books/handbook/wine/_index.adoc:649
+#, no-wrap
+msgid "homura-uninstall-1.png"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/wine/_index.adoc:652
+#, no-wrap
+msgid "Running Multiple Management GUIs"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:656
+msgid ""
+"it is worth noting that the above solutions are not mutually exclusive. it "
+"is perfectly acceptable, even advantageous, to have both installed at the "
+"same time, as they support a different set of programs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:660
+msgid ""
+"However, it is wise to ensure that they do not access any of the same WINE "
+"prefixes. Each of these solutions applies workarounds and makes changes to "
+"the registries based on known workarounds to existing WINE issues in order "
+"to make a given application run smoothly. Allowing both `winetricks` and "
+"Homura to access the same prefix could lead to some of these being "
+"overwritten, with the result being some or all applications do not work as "
+"expected."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/wine/_index.adoc:662
+#, no-wrap
+msgid "WINE in Multi-User FreeBSD Installations"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/wine/_index.adoc:665
+#, no-wrap
+msgid "Issues with Using a Common WINE Prefix"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:670
+msgid ""
+"Like most UNIX(R)-like operating systems, FreeBSD is designed for multiple "
+"users to be logged in and working at the same time. On the other hand, "
+"Windows(R) is multi-user in the sense that there can be multiple user "
+"accounts set up on one system. But the expectation is that only one will be "
+"using the physical machine (a desktop or laptop PC) at any given moment."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:674
+msgid ""
+"More recent consumer versions of Windows(R) have taken some steps to improve "
+"the OS in multi-user scenarios. But it is still largely structured around a "
+"single-user experience. Furthermore, the measures the WINE project has "
+"taken to create a compatible environment means, unlike FreeBSD applications "
+"(including WINE itself), it will resemble this single-user environment."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:678
+msgid ""
+"So it follows that each user will have to maintain their own set of "
+"configurations, which is potentially good. Yet it is advantageous to "
+"install applications, particularly large ones like office suites or games, "
+"only once. Two examples of reasons to do this are maintenance (software "
+"updates need only be applied once) and efficiency in storage (no duplicated "
+"files)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:680
+msgid ""
+"There are two strategies to minimize the impact of multiple WINE users in "
+"the system."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/wine/_index.adoc:682
+#, no-wrap
+msgid "Installing Applications to a Common Drive"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:687
+msgid ""
+"As shown in the section on WINE Configuration, WINE provides the ability to "
+"attach additional drives to a given prefix. In this way, applications can "
+"be installed to a common location, while each user will still have a prefix "
+"where individual settings may be kept (depending on the program). This is a "
+"good setup if there are relatively few applications to be shared between "
+"users, and they are programs that require few custom tweaks changes to the "
+"prefix in order to function."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:689
+msgid "The steps to make install applications in this way are as follows:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:691
+msgid ""
+"First, set up a shared location on the system where the files will be "
+"stored, such as [.filename]#/mnt/windows-drive_d/#. Creating new directories "
+"is described in the man:mkdir[1] manual page."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:692
+msgid ""
+"Next, set permissions for this new directory to allow only desired users to "
+"access it. One approach to this is to create a new group such as \"windows,"
+"\" add the desired users to that group (see the sub-section on groups in the "
+"crossref:basics[users-groups,Users and Basic Account Management] section), "
+"and set to the permissions on the directory to `770` (the section on "
+"crossref:basics[permissions,Permissions] illustrates this process)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:693
+msgid ""
+"Finally, add the location as a drive to the user's prefix using the "
+"`winecfg` as described in the above section on WINE Configuration in this "
+"chapter."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:697
+msgid ""
+"Once complete, applications can be installed to this location, and "
+"subsequently run using the assigned drive letter (or the standard UNIX(R)-"
+"style directory path). However, as noted above, only one user should be "
+"running these applications (which may be accessing files within their "
+"installation directory) at the same time. Some applications may also "
+"exhibit unexpected behavior when run by a user who is not the owner, despite "
+"being a member of the group that should have full \"read/write/execute\" "
+"permissions for the entire directory."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/wine/_index.adoc:699
+#, no-wrap
+msgid "Using a Common Installation of WINE"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:706
+msgid ""
+"If, on the other hand, there are many applications to be shared, or they "
+"require specific tuning in order to work correctly, a different approach may "
+"be required. In this method, a completely separate user is created "
+"specifically for the purposes of storing the WINE prefix and all its "
+"installed applications. Individual users are then granted permission to run "
+"programs as this user using the man:sudo[8] command. The result is that "
+"these users can launch a WINE application as they normally would, only it "
+"will act as though launched by the newly-created user, and therefore use the "
+"centrally-maintained prefix containing both settings and programs. To "
+"accomplish this, take the following steps:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:708
+msgid ""
+"Create a new user with the following command (as `root`), which will step "
+"through the required details:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:712
+#, no-wrap
+msgid "# adduser\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:717
+msgid ""
+"Enter the username (e.g., _windows_) and Full name (\"Microsoft Windows\"). "
+"Then accept the defaults for the remainder of the questions. Next, install "
+"the `sudo` utility using binary packages with the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:721
+#, no-wrap
+msgid "# pkg install sudo\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:724
+msgid "Once installed, edit [.filename]#/etc/sudoers# as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:728
+#, no-wrap
+msgid "# User alias specification\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:731
+#, no-wrap
+msgid ""
+"# define which users can run the wine/windows programs\n"
+"User_Alias WINDOWS_USERS = user1,user2\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:734
+#, no-wrap
+msgid ""
+"# define which users can administrate (become root)\n"
+"User_Alias ADMIN = user1\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:736
+#, no-wrap
+msgid "# Cmnd alias specification\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:739
+#, no-wrap
+msgid ""
+"# define which commands the WINDOWS_USERS may run\n"
+"Cmnd_Alias WINDOWS = /usr/bin/wine,/usr/bin/winecfg\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:745
+#, no-wrap
+msgid ""
+"# Defaults\n"
+"Defaults:WINDOWS_USERS env_reset\n"
+"Defaults:WINDOWS_USERS env_keep += DISPLAY\n"
+"Defaults:WINDOWS_USERS env_keep += XAUTHORITY\n"
+"Defaults !lecture,tty_tickets,!fqdn\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:748
+#, no-wrap
+msgid ""
+"# User privilege specification\n"
+"root ALL=(ALL) ALL\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:751
+#, no-wrap
+msgid ""
+"# Members of the admin user_alias, defined above, may gain root privileges\n"
+"ADMIN ALL=(ALL) ALL\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:754
+#, no-wrap
+msgid ""
+"# The WINDOWS_USERS may run WINDOWS programs as user windows without a password\n"
+"WINDOWS_USERS ALL = (windows) NOPASSWD: WINDOWS\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:759
+msgid ""
+"The result of these changes is the users named in the _User_Alias_ section "
+"are permitted to run the programs listed in the _Cmnd Alias_ section using "
+"the resources listed in the _Defaults_ section (the current display) as if "
+"they were the user listed in the final line of the file. In other words, "
+"users designates as _WINDOWS_USERS_ can run the WINE and `winecfg` "
+"applications as user _windows_. As a bonus, the configuration here means "
+"they will not be required to enter the password for the _windows_ user."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:761
+msgid ""
+"Next provide access to the display back to the _windows_ user, as whom the "
+"WINE programs will be running:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:765
+#, no-wrap
+msgid "% xhost +local:windows\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:769
+msgid ""
+"This should be added to the list of commands run either at login or when the "
+"default graphical environment starts. Once all the above are complete, a "
+"user configured as one of the `WINDOW_USERS` in [.filename]#sudoers# can run "
+"programs using the shared prefix with the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:773
+#, no-wrap
+msgid "% sudo -u windows wine program.exe\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:779
+msgid ""
+"it is worth noting that multiple users accessing this shared environment at "
+"the same time is still risky. However, consider also that the shared "
+"environment can itself contain multiple prefixes. In this way an "
+"administrator can create a tested and verified set of programs, each with "
+"its own prefix. At the same time, one user can play a game while another "
+"works with office programs without the need for redundant software "
+"installations."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/wine/_index.adoc:781
+#, no-wrap
+msgid "WINE on FreeBSD FAQ"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:784
+msgid ""
+"The following section describes some frequently asked questions, tips/"
+"tricks, or common issues in running WINE on FreeBSD, along with their "
+"respective answers."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/wine/_index.adoc:786
+#, no-wrap
+msgid "Basic Installation and Usage"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/wine/_index.adoc:789
+#, no-wrap
+msgid "How to Install 32-bit and 64-bit WINE on the Same System?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:793
+msgid ""
+"As described earlier in this section, the wine and i386-wine packages "
+"conflict with one another, and therefore cannot be installed on the same "
+"system in the normal way. However, multiple installs can be achieved using "
+"mechanisms like chroots/jails, or by building WINE from source (note this "
+"does _not_ mean building the port)."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/wine/_index.adoc:795
+#, no-wrap
+msgid "Can DOS Programs Be Run on WINE?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:801
+msgid ""
+"They can, as \"Console User Interface\" applications as mentioned earlier in "
+"this section. However, there is an arguably better method for running DOS "
+"software: package:emulators/dosbox[DOSBox]. On the other hand, there is "
+"little reason not to at least try it. Simply create a new prefix, install "
+"the software, and if it does not work delete the prefix."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/wine/_index.adoc:803
+#, no-wrap
+msgid "Should the package:emulators/wine-devel[] Package/Port be Installed to Use the Development Version of WINE Instead of Stable?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:807
+msgid ""
+"Yes, installing this version will install the \"development\" version of "
+"WINE. As with the 32- and 64-bit versions, they cannot be installed "
+"together with the stable versions unless additional measures are taken."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:811
+msgid ""
+"Note that WINE also has a \"Staging\" version, which contains the most "
+"recent updates. This was at one time available as a FreeBSD port; however, "
+"it has since been removed. It can be compiled directly from source however."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/wine/_index.adoc:813
+#, no-wrap
+msgid "Install Optimization"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/wine/_index.adoc:816
+#, no-wrap
+msgid "How Should Windows(R) Hardware (e.g., Graphics) Drivers be Handled?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:822
+msgid ""
+"Operating system drivers transfer commands between applications and "
+"hardware. WINE emulates a Windows(R) environment, including the drivers, "
+"which in turn use FreeBSD's native drivers for this transfer. it is not "
+"advisable to install Windows(R) drivers, as the WINE system is designed to "
+"use the host systems drivers. If, for example, a graphics card that "
+"benefits from dedicated drivers, install them using the standard FreeBSD "
+"methods, not Windows(R) installers."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/wine/_index.adoc:824
+#, no-wrap
+msgid "Is There a way to Make Windows(R) Fonts Look Better?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:827
+msgid ""
+"A user on the FreeBSD forums suggests this configuration to fix out-of-the-"
+"box look of WINE fonts, which can be slightly pixelated."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:829
+msgid ""
+"According to https://forums.freebsd.org/threads/make-wine-ui-fonts-look-"
+"good.68273/[a post in the FreeBSD Forums], adding the following to [."
+"filename]#.config/fontconfig/fonts.conf# will add anti-aliasing and make "
+"text more readable."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:834
+#, no-wrap
+msgid ""
+"<?xml version=\"1.0\"?>\n"
+"<!DOCTYPE fontconfig SYSTEM \"fonts.dtd>\"\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:836
+#, no-wrap
+msgid "<fontconfig>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/wine/_index.adoc:845
+#, no-wrap
+msgid ""
+" <!-- antialias all fonts -->\n"
+" <match target=\"font\">\n"
+" <edit name=\"antialias\" mode=\"assign\"><bool>true</bool></edit>>\n"
+" <edit name=\"hinting\" mode=\"assign\"><bool>true</bool></edit>>\n"
+" <edit name=\"hintstyle\" mode=\"assign\"><const>hintslight</const></edit>>\n"
+" <edit name=\"rgba\" mode=\"assign\"><const>rgb</const></edit>>\n"
+" </match>\n"
+"</fontconfig>\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/wine/_index.adoc:849
+#, no-wrap
+msgid "Does Having Windows(R) Installed Elsewhere on a System Help WINE Operate?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:854
+msgid ""
+"It may, depending on the application being run. As mentioned in the section "
+"describing `winecfg`, some built-in WINE DLLs and other libraries can be "
+"overridden by providing a path to an alternate version. Provided the "
+"Windows(R) partition or drive is mounted to the FreeBSD system and "
+"accessible to the user, configuring some of these overrides will use native "
+"Windows(R) libraries and may decrease the chance of unexpected behavior."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/wine/_index.adoc:856
+#, no-wrap
+msgid "Application-Specific"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/wine/_index.adoc:859
+#, no-wrap
+msgid "Where is the Best Place to see if Application X Works on WINE?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:863
+msgid ""
+"The first step in determining compatibility should be the https://appdb."
+"winehq.org/[WINE AppDB]. This is a compilation of reports of programs "
+"working (or not) on all supported platforms, although (as previously "
+"mentioned), solutions for one platform are often applicable to others."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/wine/_index.adoc:865
+#, no-wrap
+msgid "Is There Anything That Will Help Games Run Better?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:870
+msgid ""
+"Perhaps. Many Windows(R) games rely on DirectX, a proprietary Microsoft "
+"graphics layer. However there are projects in the open source community "
+"attempting to implement support for this technology."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:873
+msgid ""
+"The _dxvk_ project, which is an attempt to implement DirectX using the "
+"FreeBSD-compatible Vulkan graphics sub-system, is one such. Although its "
+"primary target is WINE on Linux, https://forums.freebsd.org/threads/what-"
+"about-gaming-on-freebsd.723/page-9[some FreeBSD users report] compiling and "
+"using dxvk."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:877
+msgid ""
+"In addition, work is under way on a https://www.freshports.org/emulators/"
+"wine-proton/[wine-proton port]. This will bring the work of Valve, "
+"developer of the Steam gaming platform, to FreeBSD. Proton is a "
+"distribution of WINE designed to allow many Windows(R) games to run on other "
+"operating systems with minimal setup."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/wine/_index.adoc:879
+#, no-wrap
+msgid "Is There Anywhere FreeBSD WINE Users Gather to Exchange Tips and Tricks?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:882
+msgid ""
+"There are plenty of places FreeBSD users discuss issues related to WINE that "
+"can be searched for solutions:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:884
+msgid ""
+"https://forums.freebsd.org/[The FreeBSD forums], particularly the "
+"_Installation and Maintenance of Ports or Packages_ or _Emulation and "
+"virtualization_ forums."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:885
+msgid ""
+"https://wiki.freebsd.org/IRC/Channels[FreeBSD IRC channels] including "
+"#freebsd (for general support), #freebsd-games, and others."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:886
+msgid ""
+"https://discord.gg/2CCuhCt[The BSD World Discord server's] channels "
+"including _bsd-desktop_, _bsd-gaming_, _bsd-wine_, and others."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/wine/_index.adoc:888
+#, no-wrap
+msgid "Other OS Resources"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:891
+msgid ""
+"There are a number of resources focused on other operating systems that may "
+"be useful for FreeBSD users:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:893
+msgid ""
+"https://wiki.winehq.org/[The WINE Wiki] has a wealth of information on using "
+"WINE, much of which is applicable across many of WINE's supported operating "
+"systems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:894
+msgid ""
+"Similarly, the documentation available from other OS projects can also be of "
+"good value. https://wiki.archlinux.org/index.php/wine[The WINE page] on the "
+"Arch Linux Wiki is a particularly good example, although some of the \"Third-"
+"party applications\" (i.e., \"companion applications\") are obviously not "
+"available on FreeBSD."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/wine/_index.adoc:894
+msgid ""
+"Finally, Codeweavers (a developer of a commercial version of WINE) is an "
+"active upstream contributor. Oftentimes answers to questions in https://www."
+"codeweavers.com/support/forums[their support forum] can be of aid in "
+"troubleshooting problems with the open source version of WINE."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/x11/_index.adoc b/documentation/content/en/books/handbook/x11/_index.adoc
index 8a9269cdcf..94ee6d2ccf 100644
--- a/documentation/content/en/books/handbook/x11/_index.adoc
+++ b/documentation/content/en/books/handbook/x11/_index.adoc
@@ -2,12 +2,12 @@
title: Chapter 5. The X Window System
part: Part I. Getting Started
prev: books/handbook/ports
-next: books/handbook/partii
+next: books/handbook/wayland
description: This chapter describes how to install and configure Xorg on FreeBSD, which provides the open source X Window System used to provide a graphical environment
-tags: ["X11", "Xorg", "TrueType", "DE", "KDE", "Plasma", "Xfce", "Gnome", "XDM", "SDDM", "GDM", "KMS", "Intel", "AMD", "NVIDIA", "Anti-Aliased"]
+tags: ["X11", "Xorg", "TrueType", "Intel", "AMD", "NVIDIA", "Anti-Aliased", "VESA", "SCFB"]
showBookMenu: true
weight: 7
-path: "/books/handbook/"
+path: "/books/handbook/x11/"
---
[[x11]]
@@ -55,354 +55,352 @@ An installation of FreeBSD using bsdinstall does not automatically install a gra
This chapter describes how to install and configure Xorg, which provides the open source X Window System used to provide a graphical environment.
It then describes how to find and install a desktop environment or window manager.
-[NOTE]
-====
-Users who prefer an installation method that automatically configures the Xorg should refer to https://ghostbsd.org[GhostBSD], https://www.midnightbsd.org[MidnightBSD] or https://nomadbsd.org[NomadBSD].
-====
+Before reading this chapter, you should:
-For more information on the video hardware that Xorg supports, refer to the http://www.x.org/[x.org] website.
+* Know how to install additional third-party software as described in crossref:ports[ports,Installing Applications: Packages and Ports].
After reading this chapter, you will know:
* The various components of the X Window System, and how they interoperate.
* How to install and configure Xorg.
-* How to install and configure several window managers and desktop environments.
* How to use TrueType(R) fonts in Xorg.
* How to set up your system for graphical logins (XDM).
-Before reading this chapter, you should:
-
-* Know how to install additional third-party software as described in crossref:ports[ports,Installing Applications: Packages and Ports].
-
-[[x-understanding]]
-== Terminology
-
-While it is not necessary to understand all of the details of the various components in the X Window System and how they interact, some basic knowledge of these components can be useful.
-
-X server::
-X was designed from the beginning to be network-centric, and adopts a "client-server" model.
-In this model, the "X server" runs on the computer that has the keyboard, monitor, and mouse attached.
-The server's responsibility includes tasks such as managing the display, handling input from the keyboard and mouse, and handling input or output from other devices such as a tablet or a video projector.
-This confuses some people, because the X terminology is exactly backward to what they expect.
-They expect the "X server" to be the big powerful machine down the hall, and the "X client" to be the machine on their desk.
-
-X client::
-Each X application, such as XTerm or Firefox, is a "client".
-A client sends messages to the server such as "Please draw a window at these coordinates", and the server sends back messages such as "The user just clicked on the OK button".
-+
-In a home or small office environment, the X server and the X clients commonly run on the same computer.
-It is also possible to run the X server on a less powerful computer and to run the X applications on a more powerful system.
-In this scenario, the communication between the X client and server takes place over the network.
-
-window manager::
-X does not dictate what windows should look like on-screen, how to move them around with the mouse, which keystrokes should be used to move between windows, what the title bars on each window should look like, whether or not they have close buttons on them, and so on.
-Instead, X delegates this responsibility to a separate window manager application.
-There are http://www.xwinman.org/[dozens of window managers] available.
-Each window manager provides a different look and feel: some support virtual desktops, some allow customized keystrokes to manage the desktop, some have a "Start" button, and some are themeable, allowing a complete change of the desktop's look-and-feel.
-Window managers are available in the [.filename]#x11-wm# category of the Ports Collection.
-+
-Each window manager uses a different configuration mechanism.
-Some expect configuration file written by hand while others provide graphical tools for most configuration tasks.
-
-desktop environment::
-KDE and GNOME are considered to be desktop environments as they include an entire suite of applications for performing common desktop tasks.
-These may include office suites, web browsers, and games.
-
-focus policy::
-The window manager is responsible for the mouse focus policy.
-This policy provides some means for choosing which window is actively receiving keystrokes and it should also visibly indicate which window is currently active.
-+
-One focus policy is called "click-to-focus".
-In this model, a window becomes active upon receiving a mouse click.
-In the "focus-follows-mouse" policy, the window that is under the mouse pointer has focus and the focus is changed by pointing at another window.
-If the mouse is over the root window, then this window is focused.
-In the "sloppy-focus" model, if the mouse is moved over the root window, the most recently used window still has the focus.
-With sloppy-focus, focus is only changed when the cursor enters a new window, and not when exiting the current window.
-In the "click-to-focus" policy, the active window is selected by mouse click.
-The window may then be raised and appear in front of all other windows.
-All keystrokes will now be directed to this window, even if the cursor is moved to another window.
-+
-Different window managers support different focus models.
-All of them support click-to-focus, and the majority of them also support other policies.
-Consult the documentation for the window manager to determine which focus models are available.
-
-widgets::
-Widget is a term for all of the items in the user interface that can be clicked or manipulated in some way.
-This includes buttons, check boxes, radio buttons, icons, and lists.
-A widget toolkit is a set of widgets used to create graphical applications.
-There are several popular widget toolkits, including Qt, used by KDE, and GTK+, used by GNOME.
-As a result, applications will have a different look and feel, depending upon which widget toolkit was used to create the application.
-
[[x-install]]
== Installing Xorg
On FreeBSD, Xorg can be installed as a package or port.
-The binary package can be installed quickly but with fewer options for customization:
+The binary meta package can be installed quickly but with fewer options for customization:
[source,shell]
....
# pkg install xorg
....
-To build and install from the Ports Collection:
+Either of these installations results in the complete Xorg system being installed.
+
+The current user must be a member of the `video` group.
+To add a user to `video` group, execute the following command:
[source,shell]
....
-# cd /usr/ports/x11/xorg
-# make install clean
+# pw groupmod video -m username
....
-Either of these installations results in the complete Xorg system being installed.
-Binary packages are the best option for most users.
-
+[TIP]
+====
A smaller version of the X system suitable for experienced users is available in package:x11/xorg-minimal[].
Most of the documents, libraries, and applications will not be installed.
Some applications require these additional components to function.
+====
-[[x-config]]
-== Xorg Configuration
+[TIP]
+====
+Video cards, monitors, and input devices are automatically detected and do not require any manual configuration.
+Do not create `xorg.conf` or run a `-configure` step unless automatic configuration fails.
+====
-[[x-config-quick-start]]
-=== Quick Start
+[[x-graphic-card-drivers]]
+== Graphic card drivers
-Xorg supports most common video cards, keyboards, and pointing devices.
+The following table shows the different graphics cards supported by FreeBSD, which package should be installed and its corresponding module.
+
+.Graphic card packages
+[options="header", cols="1,1,1,1"]
+|===
+| Brand | Type | Package | Module
+
+| Intel(R)
+| Open Source
+| drm-kmod
+| `i915kms`
+
+| AMD(R)
+| Open Source
+| drm-kmod
+| `amdgpu` and `radeonkms`
+
+| NVIDIA(R)
+| Proprietary
+| nvidia-driver
+| `nvidia` or `nvidia-modeset`
+
+| VESA
+| Open Source
+| xf86-video-vesa
+| vesa
+
+| SCFB
+| Open Source
+| xf86-video-scfb
+| scfb
+
+| VirtualBox(R)
+| Open Source
+| virtualbox-ose-additions
+| VirtualBox(R) OSE additions include the `vboxvideo` driver.
+
+| VMware(R)
+| Open Source
+| xf86-video-vmware
+| vmwgfx
+
+|===
+
+The following command can be used to identify which graphics card is installed in the system:
+
+[source,shell]
+....
+% pciconf -lv|grep -B4 VGA
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
+vgapci0@pci0:0:2:0: class=0x030000 rev=0x07 hdr=0x00 vendor=0x8086 device=0x2a42 subvendor=0x17aa subdevice=0x20e4
+ vendor = 'Intel Corporation'
+ device = 'Mobile 4 Series Chipset Integrated Graphics Controller'
+ class = display
+ subclass = VGA
+....
+
+[WARNING]
+====
+If the graphics card is not supported by Intel(R), AMD(R) or NVIDIA(R) drivers, then VESA or SCFB modules should be used.
+VESA module must be used when booting in BIOS mode and SCFB module must be used when booting in UEFI mode.
+
+This command can be used to check the booting mode:
+
+[source,shell]
+....
+% sysctl machdep.bootmethod
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
+machdep.bootmethod: BIOS
+....
+====
+
+[[x-configuration-intel]]
+=== Intel(R)
+
+Intel(R) Graphics refers to the class of graphics chips that are integrated on the same die as an Intel(R) CPU.
+Wikipedia offers link:https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units[a good overview of the variations and names used for generations of Intel HD Graphics].
+
+The package:graphics/drm-kmod[] package indirectly provides a range of kernel modules for use with Intel(R) Graphics cards.
+The Intel(R) driver can be installed by executing the following command:
+
+[source,shell]
+....
+# pkg install drm-kmod
+....
+
+Then add the module to `/etc/rc.conf` file, executing the following command:
+
+[source,shell]
+....
+# sysrc kld_list+=i915kms
+....
[TIP]
====
-Video cards, monitors, and input devices are automatically detected and do not require any manual configuration.
-Do not create [.filename]#xorg.conf# or run a `-configure` step unless automatic configuration fails.
+If a high CPU usage is noticed or excessive tearing with HD video, the installation of package:multimedia/libva-intel-driver[] may help.
+To install the package execute the following command:
+
+[source,shell]
+....
+# pkg install libva-intel-driver mesa-libs mesa-dri
+....
====
-[.procedure]
-. If Xorg has been used on this computer before, move or remove any existing configuration files:
-+
+[[x-configuration-amd]]
+=== AMD(R)
+
+The package:graphics/drm-kmod[] package indirectly provides a range of kernel modules for use with AMD(R) Graphics cards.
+The modules `amdgpu` and `radeonkms` can be used depending the generation of the hardware.
+The FreeBSD project maintains an link:https://wiki.freebsd.org/Graphics/AMD-GPU-Matrix[AMD graphics support matrix to determine which driver must be used].
+
+AMD(R) driver can be installed by executing the following command:
+
[source,shell]
....
-# mv /etc/X11/xorg.conf ~/xorg.conf.etc
-# mv /usr/local/etc/X11/xorg.conf ~/xorg.conf.localetc
+# pkg install drm-kmod
....
-. Add the user who will run Xorg to the `video` or `wheel` group to enable 3D acceleration when available. To add user _jru_ to whichever group is available:
-+
+For post-HD7000 or Tahiti graphic cards add the module to `/etc/rc.conf` file, executing the following command:
+
[source,shell]
....
-# pw groupmod video -m jru || pw groupmod wheel -m jru
+# sysrc kld_list+=amdgpu
....
-. The `TWM` window manager is included by default. It is started when Xorg starts:
-+
+For older graphic cards (pre-HD7000 or pre-Tahiti) add the module to `/etc/rc.conf` file, executing the following command:
+
[source,shell]
....
-% startx
+# sysrc kld_list+=radeonkms
....
-. On some older versions of FreeBSD, the system console must be set to man:vt[4] before switching back to the text console will work properly. See <<x-config-kms>>.
+[[x-configuration-nvidia]]
+=== NVIDIA(R)
+
+FreeBSD supports different versions of the proprietary NVIDIA(R) driver.
+Users of newer graphics cards should install the package:x11/nvidia-driver[] package.
+Those with older cards will have to check below which version supports them.
+
+.Supported versions of NVIDIA(R) drivers
+[options="header", cols="1,1"]
+|===
+| Package | Supported hardware
+
+| x11/nvidia-driver-304
+| link:https://www.nvidia.com/Download/driverResults.aspx/123712/en-us/[supported hardware]
+
+| x11/nvidia-driver-340
+| link:https://www.nvidia.com/Download/driverResults.aspx/156167/en-us/[supported hardware]
+
+| x11/nvidia-driver-390
+| link:https://www.nvidia.com/Download/driverResults.aspx/191122/en-us/[supported hardware]
-[[x-config-user-group]]
-=== User Group for Accelerated Video
+| x11/nvidia-driver-470
+| link:https://www.nvidia.com/Download/driverResults.aspx/194639/en-us/[supported hardware]
-Access to [.filename]#/dev/dri# is needed to allow 3D acceleration on video cards.
-It is usually simplest to add the user who will be running X to either the `video` or `wheel` group.
-Here, man:pw[8] is used to add user _slurms_ to the `video` group, or to the `wheel` group if there is no `video` group:
+| x11/nvidia-driver
+| link:https://www.nvidia.com/Download/driverResults.aspx/210651/en-us/[supported hardware]
+
+|===
+
+[WARNING]
+====
+Version 304 of the NVIDIA(R) graphics driver (nvidia-driver-304) does not support xorg-server 1.20 or later.
+====
+
+The latest NVIDIA(R) driver can be installed by running the following command:
[source,shell]
....
-# pw groupmod video -m slurms || pw groupmod wheel -m slurms
+# pkg install nvidia-driver
....
-[[x-config-kms]]
-=== Kernel Mode Setting (`KMS`)
+Then add the module to `/etc/rc.conf` file, executing the following command:
-When the computer switches from displaying the console to a higher screen resolution for X, it must set the video output _mode_.
-Recent versions of `Xorg` use a system inside the kernel to do these mode changes more efficiently.
-Older versions of FreeBSD use man:sc[4], which is not aware of the `KMS` system.
-The end result is that after closing X, the system console is blank, even though it is still working.
-The newer man:vt[4] console avoids this problem.
+[source,shell]
+....
+# sysrc kld_list+=nvidia-modeset
+....
-Add this line to [.filename]#/boot/loader.conf# to enable man:vt[4]:
+[WARNING]
+====
+The `nvidia` driver must be used if the packages x11/nvidia-driver-304 or x11/nvidia-driver-340 have been installed.
-[.programlisting]
+[source,shell]
....
-kern.vty=vt
+# sysrc kld_list+=nvidia
....
+====
-[[x-config-files]]
-=== Configuration Files
+[[x-config]]
+== Xorg Configuration
-Manual configuration is usually not necessary.
-Please do not manually create configuration files unless autoconfiguration does not work.
+Xorg supports most common video cards, keyboards, and pointing devices.
-[[x-config-files-directory]]
-==== Directory
+[WARNING]
+====
+Video cards, monitors, and input devices are automatically detected and do not require any manual configuration.
+Do not create [.filename]#xorg.conf# or run a `Xorg -configure` step unless automatic configuration fails.
+====
+
+[[x-config-files]]
+=== Configuration Files
Xorg looks in several directories for configuration files.
-[.filename]#/usr/local/etc/X11/# is the recommended directory for these files on FreeBSD.
+[.filename]#/usr/local/etc/X11/# is the *recommended* directory for these files on FreeBSD.
Using this directory helps keep application files separate from operating system files.
-Storing configuration files in the legacy [.filename]#/etc/X11/# still works.
-However, this mixes application files with the base FreeBSD files and is not recommended.
-
[[x-config-files-single-or-multi]]
-==== Single or Multiple Files
+=== Single or Multiple Files
It is easier to use multiple files that each configure a specific setting than the traditional single [.filename]#xorg.conf#.
-These files are stored in the [.filename]#xorg.conf.d/# subdirectory of the main configuration file directory.
-The full path is typically [.filename]#/usr/local/etc/X11/xorg.conf.d/#.
+These files are stored in the [.filename]#/usr/local/etc/X11/xorg.conf.d/# subdirectory.
-Examples of these files are shown later in this section.
-
-The traditional single [.filename]#xorg.conf# still works, but is neither as clear nor as flexible as multiple files in the [.filename]#xorg.conf.d/# subdirectory.
+[TIP]
+====
+The traditional single [.filename]#xorg.conf# still works, but is neither as clear nor as flexible as multiple files in the [.filename]#/usr/local/etc/X11/xorg.conf.d/# subdirectory.
+====
[[x-config-video-cards]]
=== Video Cards
-The Ports framework provides the drm graphics drivers necessary for X11 operation on recent hardware.
-Users can use one of the following drivers available from package:graphics/drm-kmod[].
-These drivers use interfaces in the kernel that are normally private.
-As such, it is strongly recommended that the drivers be built via the ports system via the `PORTS_MODULES` variable.
-With `PORTS_MODULES`, every time you build the kernel, the corresponding port(s) containing kernel modules are re-built against the updated sources.
-This ensures the kernel module stays in-sync with the kernel itself.
-The kernel and ports trees should be updated together for maximum compatibility.
-You can add `PORTS_MODULES` to your [.filename]#/etc/make.conf# file to ensure all kernels you build rebuild this module.
-Advanced users can add it to their kernel config files with the `makeoptions` directive.
-If you run GENERIC and use freebsd-update, you can just build the [.filename]#graphics/drm-kmod# or [.filename]#x11/nvidia-driver# port after each `freebsd-update install` invocation.
+The driver for the graphics card can be specified in the [.filename]#/usr/local/etc/X11/xorg.conf.d/# directory.
+
+To configure the Intel(R) driver in a configuration file:
+[[x-config-video-cards-file-intel]]
+.Select Intel(R) Video Driver in a File
[example]
====
-[.filename]#/etc/make.conf#
+[.filename]#/usr/local/etc/X11/xorg.conf.d/20-intel.conf#
[.programlisting]
....
-SYSDIR=path/to/src/sys
-PORTS_MODULES=graphics/drm-kmod x11/nvidia-driver
+Section "Device"
+ Identifier "Card0"
+ Driver "intel"
+EndSection
....
-This will rebuild everything, but can select one or the other depending on which GPU / graphics card you have.
====
-[[x-config-video-cards-ports]]
-Intel KMS driver, Radeon KMS driver, AMD KMS driver::
-2D and 3D acceleration is supported on most Intel KMS driver graphics cards provided by Intel.
-+
-Driver name: `i915kms`
-+
-2D and 3D acceleration is supported on most older Radeon KMS driver graphics cards provided by AMD.
-+
-Driver name: `radeonkms`
-+
-2D and 3D acceleration is supported on most newer AMD KMS driver graphics cards provided by AMD.
-+
-Driver name: `amdgpu`
-+
-For reference, please see https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units[] or https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units[] for a list of supported GPUs.
-
-[[x-config-video-cards-intel]]
-Intel(R)::
-3D acceleration is supported on most Intel(R) graphics up to Ivy Bridge (HD Graphics 2500, 4000, and P4000), including Iron Lake (HD Graphics) and Sandy Bridge (HD Graphics 2000).
-+
-Driver name: `intel`
-+
-For reference, see https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units[].
-
-[[x-config-video-cards-radeon]]
-AMD(R) Radeon::
-2D and 3D acceleration is supported on Radeon cards up to and including the HD6000 series.
-+
-Driver name: `radeon`
-+
-For reference, see https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units[].
-
-[[x-config-video-cards-nvidia]]
-NVIDIA::
-Several NVIDIA drivers are available in the [.filename]#x11# category of the Ports Collection.
-Install the driver that matches the video card.
-+
-For reference, see https://en.wikipedia.org/wiki/List_of_Nvidia_graphics_processing_units[].
-+
-Kernel support for NVIDIA cards is found in either the [.filename]#x11/nvidia-driver# port or the [.filename]#x11/nvidia-driver-xxx# port.
-Modern cards use the former.
-Legacy cards use the -xxx ports, where xxx is one of 304, 340 or 390 indicating the version of the driver.
-For those, fill in the `-xxx` using the http://download.nvidia.com/XFree86/FreeBSD-x86_64/465.19.01/README/[ Supported NVIDIA GPU Products ] page.
-This page lists the devices supported by different versions of the driver.
-Legacy drivers run on both i386 and amd64.
-The current driver only supports amd64.
-Read http://download.nvidia.com/XFree86/FreeBSD-x86_64/465.19.01/README/[installation and configuration of NVIDIA driver] for details.
-While we recommend this driver be rebuilt with each kernel rebuild for maximum safety, it uses almost no private kernel interfaces and is usually safe across kernel updates.
-
-[[x-config-video-cards-hybrid]]
-Hybrid Combination Graphics::
-Some notebook computers add additional graphics processing units to those built into the chipset or processor.
-_Optimus_ combines Intel(R) and NVIDIA hardware.
-_Switchable Graphics_ or _Hybrid Graphics_ are a combination of an Intel(R) or AMD(R) processor and an AMD(R) Radeon `GPU`.
-+
-Implementations of these hybrid graphics systems vary, and Xorg on FreeBSD is not able to drive all versions of them.
-+
-Some computers provide a `BIOS` option to disable one of the graphics adapters or select a _discrete_ mode which can be used with one of the standard video card drivers.
-For example, it is sometimes possible to disable the NVIDIA `GPU` in an Optimus system.
-The Intel(R) video can then be used with an Intel(R) driver.
-+
-`BIOS` settings depend on the model of computer.
-In some situations, both ``GPU``s can be left enabled, but creating a configuration file that only uses the main `GPU` in the `Device` section is enough to make such a system functional.
-
-[[x-config-video-cards-other]]
-Other Video Cards::
-Drivers for some less-common video cards can be found in the [.filename]#x11-drivers# directory of the Ports Collection.
-+
-Cards that are not supported by a specific driver might still be usable with the package:x11-drivers/xf86-video-vesa[] driver.
-This driver is installed by package:x11/xorg[].
-It can also be installed manually as package:x11-drivers/xf86-video-vesa[].
-Xorg attempts to use this driver when a specific driver is not found for the video card.
-+
-package:x11-drivers/xf86-video-scfb[] is a similar nonspecialized video driver that works on many `UEFI` and ARM(R) computers.
-
-[[x-config-video-cards-file]]
-Setting the Video Driver in a File::
-To set the Intel(R) driver in a configuration file:
-+
-[[x-config-video-cards-file-intel]]
-.Select Intel(R) Video Driver in a File
+To configure the AMD(R) driver in a configuration file:
+
+[[x-config-video-cards-file-amd]]
+.Select AMD(R) Video Driver in a File
[example]
====
-[.filename]#/usr/local/etc/X11/xorg.conf.d/driver-intel.conf#
+[.filename]#/usr/local/etc/X11/xorg.conf.d/20-radeon.conf#
[.programlisting]
....
Section "Device"
Identifier "Card0"
- Driver "intel"
- # BusID "PCI:1:0:0"
+ Driver "radeon"
EndSection
....
-
-If more than one video card is present, the `BusID` identifier can be uncommented and set to select the desired card.
-A list of video card bus ``ID``s can be displayed with `pciconf -lv | grep -B3 display`.
====
-+
-To set the Radeon driver in a configuration file:
-+
-[[x-config-video-cards-file-radeon]]
-.Select Radeon Video Driver in a File
+
+To configure the NVIDIA(R) driver in a configuration file:
+
+[[x-config-video-cards-file-nvidia]]
+.Select NVIDIA(R) Video Driver in a File
[example]
====
-[.filename]#/usr/local/etc/X11/xorg.conf.d/driver-radeon.conf#
+[.filename]#/usr/local/etc/X11/xorg.conf.d/20-nvidia.conf#
[.programlisting]
....
Section "Device"
Identifier "Card0"
- Driver "radeon"
+ Driver "nvidia"
EndSection
....
+====
+[TIP]
====
-+
-To set the `VESA` driver in a configuration file:
-+
+package:x11/nvidia-xconfig[] can also be used to perform basic control over configuration options available in the NVIDIA driver.
+====
+
+To configure the VESA driver in a configuration file:
+
[[x-config-video-cards-file-vesa]]
-.Select `VESA` Video Driver in a File
+.Select VESA Video Driver in a File
[example]
====
-[.filename]#/usr/local/etc/X11/xorg.conf.d/driver-vesa.conf#
+[.filename]#/usr/local/etc/X11/xorg.conf.d/20-vesa.conf#
[.programlisting]
....
@@ -411,16 +409,15 @@ Section "Device"
Driver "vesa"
EndSection
....
-
====
-+
-To set the `scfb` driver for use with a `UEFI` or ARM(R) computer:
-+
-[[x-config-video-cards-file-scfb]]
-.Select `scfb` Video Driver in a File
+
+To configure the SCFB driver in a configuration file:
+
+[[x-config-video-cards-file-sfcb]]
+.Select SCFB Video Driver in a File
[example]
====
-[.filename]#/usr/local/etc/X11/xorg.conf.d/driver-scfb.conf#
+[.filename]#/usr/local/etc/X11/xorg.conf.d/20-scfb.conf#
[.programlisting]
....
@@ -431,6 +428,52 @@ EndSection
....
====
+To configure multiple video cards, the `BusID` can be added.
+A list of video card bus ``ID``s can be displayed by executing:
+
+[source,shell]
+....
+% pciconf -lv | grep -B3 display
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
+vgapci0@pci0:0:2:0: class=0x030000 rev=0x07 hdr=0x00 vendor=0x8086 device=0x2a42 subvendor=0x17aa subdevice=0x20e4
+ vendor = 'Intel Corporation'
+ device = 'Mobile 4 Series Chipset Integrated Graphics Controller'
+ class = display
+--
+vgapci1@pci0:0:2:1: class=0x038000 rev=0x07 hdr=0x00 vendor=0x8086 device=0x2a43 subvendor=0x17aa subdevice=0x20e4
+ vendor = 'Intel Corporation'
+ device = 'Mobile 4 Series Chipset Integrated Graphics Controller'
+ class = display
+....
+
+[[x-config-video-cards-file-multiple]]
+.Select Intel(R) Video Driver and NVIDIA(R) Video Driver in a File
+[example]
+====
+
+[.filename]#/usr/local/etc/X11/xorg.conf.d/20-drivers.conf#
+
+[.programlisting]
+....
+Section "Device"
+ Identifier "Card0"
+ Driver "intel"
+ BusID "pci0:0:2:0"
+EndSection
+
+Section "Device"
+ Identifier "Card0"
+ Driver "nvidia"
+ BusID "pci0:0:2:1"
+EndSection
+....
+====
+
[[x-config-monitors]]
=== Monitors
@@ -441,91 +484,72 @@ Then it selects the most appropriate combination of settings to use with that mo
Other resolutions supported by the monitor can be chosen by setting the desired resolution in configuration files, or after the X server has been started with man:xrandr[1].
[[x-config-monitors-xrandr]]
-Using man:xrandr[1]::
+==== Using RandR (Resize and Rotate)
+
Run man:xrandr[1] without any parameters to see a list of video outputs and detected monitor modes:
-+
+
[source,shell]
....
% xrandr
-Screen 0: minimum 320 x 200, current 3000 x 1920, maximum 8192 x 8192
-DVI-0 connected primary 1920x1200+1080+0 (normal left inverted right x axis y axis) 495mm x 310mm
- 1920x1200 59.95*+
- 1600x1200 60.00
- 1280x1024 85.02 75.02 60.02
- 1280x960 60.00
- 1152x864 75.00
- 1024x768 85.00 75.08 70.07 60.00
- 832x624 74.55
- 800x600 75.00 60.32
- 640x480 75.00 60.00
- 720x400 70.08
-DisplayPort-0 disconnected (normal left inverted right x axis y axis)
-HDMI-0 disconnected (normal left inverted right x axis y axis)
-....
-+
-This shows that the `DVI-0` output is being used to display a screen resolution of 1920x1200 pixels at a refresh rate of about 60 Hz.
-Monitors are not attached to the `DisplayPort-0` and `HDMI-0` connectors.
-+
+....
+
+The output should be similar to the following:
+
+[.programlisting]
+....
+Screen 0: minimum 320 x 200, current 2560 x 960, maximum 8192 x 8192
+LVDS-1 connected 1280x800+0+0 (normal left inverted right x axis y axis) 261mm x 163mm
+ 1280x800 59.99*+ 59.81 59.91 50.00
+ 1280x720 59.86 59.74
+ 1024x768 60.00
+ 1024x576 59.90 59.82
+ 960x540 59.63 59.82
+ 800x600 60.32 56.25
+ 864x486 59.92 59.57
+ 640x480 59.94
+ 720x405 59.51 58.99
+ 640x360 59.84 59.32
+VGA-1 connected primary 1280x960+1280+0 (normal left inverted right x axis y axis) 410mm x 257mm
+ 1280x1024 75.02 60.02
+ 1440x900 74.98 60.07
+ 1280x960 60.00*
+ 1280x800 74.93 59.81
+ 1152x864 75.00
+ 1024x768 75.03 70.07 60.00
+ 832x624 74.55
+ 800x600 72.19 75.00 60.32 56.25
+ 640x480 75.00 72.81 66.67 59.94
+ 720x400 70.08
+HDMI-1 disconnected (normal left inverted right x axis y axis)
+DP-1 disconnected (normal left inverted right x axis y axis)
+HDMI-2 disconnected (normal left inverted right x axis y axis)
+DP-2 disconnected (normal left inverted right x axis y axis)
+DP-3 disconnected (normal left inverted right x axis y axis)
+....
+
+This shows that the `VGA-1` output is being used to display a screen resolution of 1280x960 pixels at a refresh rate of about 60 Hz.
+The `LVDS-1` is being used as a secondary monitor to display a screen resolution of 1280x800 pixels at a refresh rate of about 60 Hz.
+Monitors are not attached to the `HDMI-1`, `HDMI-2`, `DP-1`, `DP-2` and `DP-3` connectors.
+
Any of the other display modes can be selected with man:xrandr[1].
For example, to switch to 1280x1024 at 60 Hz:
-+
-[source,shell]
-....
-% xrandr --output DVI-0 --mode 1280x1024 --rate 60
-....
-+
-A common task is using the external video output on a notebook computer for a video projector.
-+
-The type and quantity of output connectors varies between devices, and the name given to each output varies from driver to driver.
-What one driver calls `HDMI-1`, another might call `HDMI1`.
-So the first step is to run man:xrandr[1] to list all the available outputs:
-+
-[source,shell]
-....
-% xrandr
-Screen 0: minimum 320 x 200, current 1366 x 768, maximum 8192 x 8192
-LVDS1 connected 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 193mm
- 1366x768 60.04*+
- 1024x768 60.00
- 800x600 60.32 56.25
- 640x480 59.94
-VGA1 connected (normal left inverted right x axis y axis)
- 1280x1024 60.02 + 75.02
- 1280x960 60.00
- 1152x864 75.00
- 1024x768 75.08 70.07 60.00
- 832x624 74.55
- 800x600 72.19 75.00 60.32 56.25
- 640x480 75.00 72.81 66.67 60.00
- 720x400 70.08
-HDMI1 disconnected (normal left inverted right x axis y axis)
-DP1 disconnected (normal left inverted right x axis y axis)
-....
-+
-Four outputs were found: the built-in panel `LVDS1`, and external `VGA1`, `HDMI1`, and `DP1` connectors.
-+
-The projector has been connected to the `VGA1` output.
-man:xrandr[1] is now used to set that output to the native resolution of the projector and add the additional space to the right side of the desktop:
-+
+
[source,shell]
....
-% xrandr --output VGA1 --auto --right-of LVDS1
+% xrandr --output LVDS-1 --mode 1280x720 --rate 60
....
-+
-`--auto` chooses the resolution and refresh rate detected by `EDID`.
-If the resolution is not correctly detected, a fixed value can be given with `--mode` instead of the `--auto` statement.
-For example, most projectors can be used with a 1024x768 resolution, which is set with `--mode 1024x768`.
-+
-man:xrandr[1] is often run from [.filename]#.xinitrc# to set the appropriate mode when X starts.
[[x-config-monitors-files]]
-Setting Monitor Resolution in a File::
+==== Using the Xorg configuration file
+
+The monitor configuration can also be set in a configuration file.
+
To set a screen resolution of 1024x768 in a configuration file:
-+
+
.Set Screen Resolution in a File
[example]
====
-[.filename]#/usr/local/etc/X11/xorg.conf.d/screen-resolution.conf#
+[.filename]#/usr/local/etc/X11/xorg.conf.d/10-monitor.conf#
[.programlisting]
....
@@ -537,174 +561,51 @@ Section "Screen"
EndSubSection
EndSection
....
-
-====
-+
-The few monitors that do not have `EDID` can be configured by setting `HorizSync` and `VertRefresh` to the range of frequencies supported by the monitor.
-+
-.Manually Setting Monitor Frequencies
-[example]
-====
-[.filename]#/usr/local/etc/X11/xorg.conf.d/monitor0-freq.conf#
-
-[.programlisting]
-....
-Section "Monitor"
- Identifier "Monitor0"
- HorizSync 30-83 # kHz
- VertRefresh 50-76 # Hz
-EndSection
-....
-
====
[[x-config-input]]
=== Input Devices
-[[x-config-input-keyboard]]
-==== Keyboards
-
-[[x-config-input-keyboard-layout]]
-Keyboard Layout::
-The standardized location of keys on a keyboard is called a _layout_.
-Layouts and other adjustable parameters are listed in man:xkeyboard-config[7].
-+
-A United States layout is the default.
-To select an alternate layout, set the `XkbLayout` and `XkbVariant` options in an `InputClass`.
-This will be applied to all input devices that match the class.
-+
-This example selects a French keyboard layout.
-+
-.Setting a Keyboard Layout
-[example]
-====
-[.filename]#/usr/local/etc/X11/xorg.conf.d/keyboard-fr.conf#
-
-[.programlisting]
-....
-Section "InputClass"
- Identifier "KeyboardDefaults"
- MatchIsKeyboard "on"
- Option "XkbLayout" "fr"
-EndSection
-....
-
-====
-+
-.Setting Multiple Keyboard Layouts
-[example]
-====
-Set United States, Spanish, and Ukrainian keyboard layouts.
-Cycle through these layouts by pressing kbd:[Alt+Shift].
-package:x11/xxkb[] or package:x11/sbxkb[] can be used for improved layout switching control and current layout indicators.
+Xorg supports the vast majority of input devices via package:x11/libinput[].
-[.filename]#/usr/local/etc/X11/xorg.conf.d/kbd-layout-multi.conf#
-
-[.programlisting]
-....
-Section "InputClass"
- Identifier "All Keyboards"
- MatchIsKeyboard "yes"
- Option "XkbLayout" "us, es, ua"
-EndSection
-....
-
-====
-
-[[x-config-input-keyboard-zap]]
-Closing Xorg From the Keyboard::
-X can be closed with a combination of keys.
-By default, that key combination is not set because it conflicts with keyboard commands for some applications.
-Enabling this option requires changes to the keyboard `InputDevice` section:
-+
-.Enabling Keyboard Exit from X
-[example]
+[TIP]
====
-[.filename]#/usr/local/etc/X11/xorg.conf.d/keyboard-zap.conf#
-
-[.programlisting]
-....
-Section "InputClass"
- Identifier "KeyboardDefaults"
- MatchIsKeyboard "on"
- Option "XkbOptions" "terminate:ctrl_alt_bksp"
-EndSection
-....
-
+Some desktop environments (such as KDE Plasma) provide a graphical UI for setting these parameters.
+Check if this is the case before resorting to manual configuration editing.
====
-[[x11-input-mice]]
-==== Mice and Pointing Devices
-
-[IMPORTANT]
-====
-If using package:xorg-server[] 1.20.8 or later under FreeBSD {rel121-current} and not using man:moused[8], add `kern.evdev.rcpt_mask=12` to [.filename]#/etc/sysctl.conf#.
-====
+[[x-config-input-keyboard-layout]]
+For example, to configure the keyboard layout:
-Many mouse parameters can be adjusted with configuration options.
-See man:mousedrv[4] for a full list.
-[[x11-input-mice-buttons]]
-Mouse Buttons::
-The number of buttons on a mouse can be set in the mouse `InputDevice` section of [.filename]#xorg.conf#.
-To set the number of buttons to 7:
-+
-.Setting the Number of Mouse Buttons
+.Setting a Keyboard Layout
[example]
====
-[.filename]#/usr/local/etc/X11/xorg.conf.d/mouse0-buttons.conf#
+[.filename]#/usr/local/etc/X11/xorg.conf.d/00-keyboard.conf#
[.programlisting]
....
-Section "InputDevice"
- Identifier "Mouse0"
- Option "Buttons" "7"
+Section "InputClass"
+ Identifier "Keyboard1"
+ MatchIsKeyboard "on"
+ Option "XkbLayout" "es, fr"
+ Option "XkbModel" "pc104"
+ Option "XkbVariant" ",qwerty"
+ Option "XkbOptions" "grp:win_space_toggle"
EndSection
....
-
====
-[[x-config-manual-configuration]]
-=== Manual Configuration
-
-In some cases, Xorg autoconfiguration does not work with particular hardware, or a different configuration is desired.
-For these cases, a custom configuration file can be created.
-
-[WARNING]
-====
-Do not create manual configuration files unless required.
-Unnecessary manual configuration can prevent proper operation.
-====
-
-A configuration file can be generated by Xorg based on the detected hardware.
-This file is often a useful starting point for custom configurations.
-
-Generating an [.filename]#xorg.conf#:
-
-[source,shell]
-....
-# Xorg -configure
-....
-
-The configuration file is saved to [.filename]#/root/xorg.conf.new#.
-Make any changes desired, then test that file (using `-retro` so there is a visible background) with:
-
-[source,shell]
-....
-# Xorg -retro -config /root/xorg.conf.new
-....
-
-After the new configuration has been adjusted and tested, it can be split into smaller files in the normal location, [.filename]#/usr/local/etc/X11/xorg.conf.d/#.
-
[[x-fonts]]
== Using Fonts in Xorg
-[[type1]]
-=== Type1 Fonts
-
The default fonts that ship with Xorg are less than ideal for typical desktop publishing applications.
Large presentation fonts show up jagged and unprofessional looking, and small fonts are almost completely unintelligible.
However, there are several free, high quality Type1 (PostScript(R)) fonts available which can be readily used with Xorg.
-For instance, the URW font collection (package:x11-fonts/urwfonts[]) includes high quality versions of standard type1 fonts (Times Roman(TM), Helvetica(TM), Palatino(TM) and others).
+
+[[type1]]
+=== Type1 Fonts
+
+The URW font collection (package:x11-fonts/urwfonts[]) includes high quality versions of standard type1 fonts (Times Roman(TM), Helvetica(TM), Palatino(TM) and others).
The Freefonts collection (package:x11-fonts/freefonts[]) includes many more fonts, but most of them are intended for use in graphics software such as the Gimp, and are not complete enough to serve as screen fonts.
In addition, Xorg can be configured to use TrueType(R) fonts with a minimum of effort.
For more details on this, see the man:X[7] manual page or <<truetype>>.
@@ -716,20 +617,14 @@ To install the above Type1 font collections from binary packages, run the follow
# pkg install urwfonts
....
-Alternatively, to build from the Ports Collection, run the following commands:
-
-[source,shell]
-....
-# cd /usr/ports/x11-fonts/urwfonts
-# make install clean
-....
-
And likewise with the freefont or other collections.
-To have the X server detect these fonts, add an appropriate line to the X server configuration file ([.filename]#/etc/X11/xorg.conf#), which reads:
+To have the X server detect these fonts, add an appropriate line to the X server configuration file ([.filename]#/usr/local/etc/X11/xorg.conf.d/90-fonts.conf#), which reads:
[.programlisting]
....
-FontPath "/usr/local/share/fonts/urwfonts/"
+Section "Files"
+ FontPath "/usr/local/share/fonts/urwfonts/"
+EndSection
....
Alternatively, at the command line in the X session run:
@@ -749,7 +644,7 @@ A third way is to use the new [.filename]#/usr/local/etc/fonts/local.conf# as de
Xorg has built in support for rendering TrueType(R) fonts.
There are two different modules that can enable this functionality.
The freetype module is used in this example because it is more consistent with the other font rendering back-ends.
-To enable the freetype module just add the following line to the `"Module"` section of [.filename]#/etc/X11/xorg.conf#.
+To enable the freetype module just add the following line to the `"Module"` section of [.filename]#/usr/local/etc/X11/xorg.conf.d/90-fonts.conf#.
[.programlisting]
....
@@ -828,7 +723,7 @@ To exclude font sizes smaller than 14 point from anti-aliasing, include these li
[.programlisting]
....
- <match target="font">
+ <match target="font">
<test name="size" compare="less">
<double>14</double>
</test>
@@ -875,7 +770,7 @@ Add these lines:
[.programlisting]
....
- <match target="pattern" name="family">
+ <match target="pattern" name="family">
<test qual="any" name="family">
<string>mono</string>
</test>
@@ -892,7 +787,7 @@ To avoid this, consider adding the following to [.filename]#local.conf#:
[.programlisting]
....
- <match target="pattern" name="family">
+ <match target="pattern" name="family">
<test qual="any" name="family">
<string>Helvetica</string>
</test>
@@ -929,1352 +824,4 @@ To enable this, add the line somewhere in [.filename]#local.conf#:
Depending on the sort of display, `rgb` may need to be changed to `bgr`, `vrgb` or `vbgr`: experiment and see which works best.
====
-[[x-xdm]]
-== The X Display Manager
-
-Xorg provides an X Display Manager, XDM, which can be used for login session management.
-XDM provides a graphical interface for choosing which display server to connect to and for entering authorization information such as a login and password combination.
-
-This section demonstrates how to configure the X Display Manager on FreeBSD.
-Some desktop environments provide their own graphical login manager.
-Refer to <<x11-wm-gnome>> for instructions on how to configure the GNOME Display Manager and <<x11-wm-kde>> for instructions on how to configure the KDE Display Manager.
-
-=== Configuring XDM
-
-To install XDM, use the package:x11/xdm[] package or port.
-Once installed, XDM can be configured to run when the machine boots up by adding the following line to [.filename]#/etc/rc.conf#:
-
-[.programlisting]
-....
-xdm_enable="YES"
-....
-
-XDM will run on the ninth virtual terminal by default.
-
-The XDM configuration directory is located in [.filename]#/usr/local/etc/X11/xdm#.
-This directory contains several files used to change the behavior and appearance of XDM, as well as a few scripts and programs used to set up the desktop when XDM is running.
-<<xdm-config-files>> summarizes the function of each of these files.
-The exact syntax and usage of these files is described in man:xdm[8].
-
-[[xdm-config-files]]
-.XDM Configuration Files
-[cols="1,1", frame="none", options="header"]
-|===
-| File
-| Description
-
-|[.filename]#Xaccess#
-|The protocol for connecting to XDM is called the X Display Manager Connection Protocol (`XDMCP`). This file is a client authorization ruleset for controlling `XDMCP` connections from remote machines. By default, this file does not allow any remote clients to connect.
-
-|[.filename]#Xresources#
-|This file controls the look and feel of the XDM display chooser and login screens. The default configuration is a simple rectangular login window with the hostname of the machine displayed at the top in a large font and "Login:" and "Password:" prompts below. The format of this file is identical to the app-defaults file described in the Xorg documentation.
-
-|[.filename]#Xservers#
-|The list of local and remote displays the chooser should provide as login choices.
-
-|[.filename]#Xsession#
-|Default session script for logins which is run by XDM after a user has logged in. This points to a customized session script in [.filename]#~/.xsession#.
-
-|[.filename]#Xsetup_#*
-|Script to automatically launch applications before displaying the chooser or login interfaces. There is a script for each display being used, named [.filename]#Xsetup_*#, where `*` is the local display number. Typically these scripts run one or two programs in the background such as `xconsole`.
-
-|[.filename]#xdm-config#
-|Global configuration for all displays running on this machine.
-
-|[.filename]#xdm-errors#
-|Contains errors generated by the server program. If a display that XDM is trying to start hangs, look at this file for error messages. These messages are also written to the user's [.filename]#~/.xsession-errors# on a per-session basis.
-
-|[.filename]#xdm-pid#
-|The running process `ID` of XDM.
-|===
-
-=== Configuring Remote Access
-
-By default, only users on the same system can login using XDM.
-To enable users on other systems to connect to the display server, edit the access control rules and enable the connection listener.
-
-To configure XDM to listen for any remote connection, comment out the `DisplayManager.requestPort` line in [.filename]#/usr/local/etc/X11/xdm/xdm-config# by putting a `!` in front of it:
-
-[source,shell]
-....
-! SECURITY: do not listen for XDMCP or Chooser requests
-! Comment out this line if you want to manage X terminals with xdm
-DisplayManager.requestPort: 0
-....
-
-Save the edits and restart XDM.
-To restrict remote access, look at the example entries in [.filename]#/usr/local/etc/X11/xdm/Xaccess# and refer to man:xdm[8] for further information.
-
-[[x11-wm]]
-== Desktop Environments
-
-This section describes how to install three popular desktop environments on a FreeBSD system.
-A desktop environment can range from a simple window manager to a complete suite of desktop applications.
-Over a hundred desktop environments are available in the [.filename]#x11-wm# category of the Ports Collection.
-
-[[x11-wm-gnome]]
-=== GNOME
-
-GNOME is a user-friendly desktop environment.
-It includes a panel for starting applications and displaying status, a desktop, a set of tools and applications, and a set of conventions that make it easy for applications to cooperate and be consistent with each other.
-More information regarding GNOME on FreeBSD can be found at https://www.FreeBSD.org/gnome[https://www.FreeBSD.org/gnome].
-That web site contains additional documentation about installing, configuring, and managing GNOME on FreeBSD.
-
-This desktop environment can be installed from a package:
-
-[source,shell]
-....
-# pkg install gnome
-....
-
-To instead build GNOME from ports, use the following command.
-GNOME is a large application and will take some time to compile, even on a fast computer.
-
-[source,shell]
-....
-# cd /usr/ports/x11/gnome
-# make install clean
-....
-
-GNOME requires [.filename]#/proc# to be mounted.
-Add this line to [.filename]#/etc/fstab# to mount this file system automatically during system startup:
-
-[.programlisting]
-....
-proc /proc procfs rw 0 0
-....
-
-GNOME uses D-Bus for a message bus and hardware abstraction.
-These applications are automatically installed as dependencies of GNOME.
-Enable them in [.filename]#/etc/rc.conf# so they will be started when the system boots:
-
-[.programlisting]
-....
-dbus_enable="YES"
-....
-
-After installation, configure Xorg to start GNOME.
-The easiest way to do this is to enable the GNOME Display Manager, GDM, which is installed as part of the GNOME package or port.
-It can be enabled by adding this line to [.filename]#/etc/rc.conf#:
-
-[.programlisting]
-....
-gdm_enable="YES"
-....
-
-It is often desirable to also start all GNOME services.
-To achieve this, add a second line to [.filename]#/etc/rc.conf#:
-
-[.programlisting]
-....
-gnome_enable="YES"
-....
-
-GDM will start automatically when the system boots.
-
-A second method for starting GNOME is to type `startx` from the command-line after configuring [.filename]#~/.xinitrc#.
-If this file already exists, replace the line that starts the current window manager with one that starts [.filename]#/usr/local/bin/gnome-session#.
-If this file does not exist, create it with this command:
-
-[source,shell]
-....
-% echo "exec /usr/local/bin/gnome-session" > ~/.xinitrc
-....
-
-A third method is to use XDM as the display manager.
-In this case, create an executable [.filename]#~/.xsession#:
-
-[source,shell]
-....
-% echo "exec /usr/local/bin/gnome-session" > ~/.xsession
-....
-
-[[x11-wm-kde]]
-=== KDE
-
-KDE is another easy-to-use desktop environment.
-This desktop provides a suite of applications with a consistent look and feel, a standardized menu and toolbars, keybindings, color-schemes, internationalization, and a centralized, dialog-driven desktop configuration.
-More information on KDE can be found at http://www.kde.org/[http://www.kde.org/].
-For FreeBSD-specific information, consult http://freebsd.kde.org/[http://freebsd.kde.org].
-
-To install the KDE package, type:
-
-[source,shell]
-....
-# pkg install x11/kde5
-....
-
-To instead build the KDE port, use the following command.
-Installing the port will provide a menu for selecting which components to install.
-KDE is a large application and will take some time to compile, even on a fast computer.
-
-[source,shell]
-....
-# cd /usr/ports/x11/kde5
-# make install clean
-....
-
-KDE requires [.filename]#/proc# to be mounted.
-Add this line to [.filename]#/etc/fstab# to mount this file system automatically during system startup:
-
-[.programlisting]
-....
-proc /proc procfs rw 0 0
-....
-
-KDE uses D-Bus for a message bus and hardware abstraction.
-These applications are automatically installed as dependencies of KDE.
-Enable them in [.filename]#/etc/rc.conf# so they will be started when the system boots:
-
-[.programlisting]
-....
-dbus_enable="YES"
-....
-
-Since KDE Plasma 5, the KDE Display Manager, KDM is no longer developed.
-A possible replacement is SDDM.
-To install it, type:
-
-[source,shell]
-....
-# pkg install x11/sddm
-....
-
-Add this line to [.filename]#/etc/rc.conf#:
-
-[.programlisting]
-....
-sddm_enable="YES"
-....
-
-A second method for launching KDE Plasma is to type `startx` from the command line.
-For this to work, the following line is needed in [.filename]#~/.xinitrc#:
-
-[.programlisting]
-....
-exec ck-launch-session startplasma-x11
-....
-
-A third method for starting KDE Plasma is through XDM.
-To do so, create an executable [.filename]#~/.xsession# as follows:
-
-[source,shell]
-....
-% echo "exec ck-launch-session startplasma-x11" > ~/.xsession
-....
-
-Once KDE Plasma is started, refer to its built-in help system for more information on how to use its various menus and applications.
-
-[[x11-wm-xfce]]
-=== Xfce
-
-Xfce is a desktop environment based on the GTK+ toolkit used by GNOME.
-However, it is more lightweight and provides a simple, efficient, easy-to-use desktop.
-It is fully configurable, has a main panel with menus, applets, and application launchers, provides a file manager and sound manager, and is themeable.
-Since it is fast, light, and efficient, it is ideal for older or slower machines with memory limitations.
-More information on Xfce can be found at http://www.xfce.org/[http://www.xfce.org].
-
-To install the Xfce package:
-
-[source,shell]
-....
-# pkg install xfce
-....
-
-Alternatively, to build the port:
-
-[source,shell]
-....
-# cd /usr/ports/x11-wm/xfce4
-# make install clean
-....
-
-Xfce uses D-Bus for a message bus.
-This application is automatically installed as dependency of Xfce.
-Enable it in [.filename]#/etc/rc.conf# so it will be started when the system boots:
-
-[.programlisting]
-....
-dbus_enable="YES"
-....
-
-Unlike GNOME or KDE, Xfce does not provide its own login manager.
-In order to start Xfce from the command line by typing `startx`, first create [.filename]#~/.xinitrc# with this command:
-
-[source,shell]
-....
-% echo ". /usr/local/etc/xdg/xfce4/xinitrc" > ~/.xinitrc
-....
-
-An alternate method is to use XDM.
-To configure this method, create an executable [.filename]#~/.xsession#:
-
-[source,shell]
-....
-% echo ". /usr/local/etc/xdg/xfce4/xinitrc" > ~/.xsession
-....
-
-[[x-compiz-fusion]]
-== Installing Compiz Fusion
-
-One way to make using a desktop computer more pleasant is with nice 3D effects.
-
-Installing the Compiz Fusion package is easy, but configuring it requires a few steps that are not described in the port's documentation.
-
-[[x-compiz-video-card]]
-=== Setting up the FreeBSD nVidia Driver
-
-Desktop effects can cause quite a load on the graphics card.
-For an nVidia-based graphics card, the proprietary driver is required for good performance.
-Users of other graphics cards can skip this section and continue with the [.filename]#xorg.conf# configuration.
-
-To determine which nVidia driver is needed see the extref:{faq}[FAQ question on the subject, idp59950544].
-
-Having determined the correct driver to use for your card, installation is as simple as installing any other package.
-
-For example, to install the latest driver:
-
-[source,shell]
-....
-# pkg install x11/nvidia-driver
-....
-
-The driver will create a kernel module, which needs to be loaded at system startup.
-Use man:sysrc[8] to load the module at startup:
-
-[source,shell]
-....
-# sysrc kld_list+="nvidia"
-....
-
-Alternatively, add the following line to [.filename]#/boot/loader.conf#:
-
-[.programlisting]
-....
-nvidia_load="YES"
-....
-
-[NOTE]
-====
-To immediately load the kernel module into the running kernel issue a command like `kldload nvidia`.
-However, it has been noted that some versions of Xorg will not function properly if the driver is not loaded at boot time.
-After editing [.filename]#/boot/loader.conf#, a reboot is recommended.
-Improper settings in [.filename]#/boot/loader.conf# can cause the system not to boot properly.
-====
-
-With the kernel module loaded, you normally only need to change a single line in [.filename]#xorg.conf# to enable the proprietary driver:
-
-Find the following line in [.filename]#/etc/X11/xorg.conf#:
-
-[.programlisting]
-....
-Driver "nv"
-....
-
-and change it to:
-
-[.programlisting]
-....
-Driver "nvidia"
-....
-
-Start the GUI as usual, and you should be greeted by the nVidia splash.
-Everything should work as usual.
-
-[[xorg-configuration]]
-=== Configuring `xorg.conf` for Desktop Effects
-
-To enable Compiz Fusion, [.filename]#/etc/X11/xorg.conf# needs to be modified:
-
-Add the following section to enable composite effects:
-
-[.programlisting]
-....
-Section "Extensions"
- Option "Composite" "Enable"
-EndSection
-....
-
-Locate the "Screen" section which should look similar to the one below:
-
-[.programlisting]
-....
-Section "Screen"
- Identifier "Screen0"
- Device "Card0"
- Monitor "Monitor0"
- ...
-....
-
-and add the following two lines (after "Monitor" will do):
-
-[.programlisting]
-....
-DefaultDepth 24
-Option "AddARGBGLXVisuals" "True"
-....
-
-Locate the "Subsection" that refers to the screen resolution that you wish to use.
-For example, if you wish to use 1280x1024, locate the section that follows.
-If the desired resolution does not appear in any subsection, you may add the relevant entry by hand:
-
-[.programlisting]
-....
-SubSection "Display"
- Viewport 0 0
- Modes "1280x1024"
-EndSubSection
-....
-
-A color depth of 24 bits is needed for desktop composition, change the above subsection to:
-
-[.programlisting]
-....
-SubSection "Display"
- Viewport 0 0
- Depth 24
- Modes "1280x1024"
-EndSubSection
-....
-
-Finally, confirm that the "glx" and "extmod" modules are loaded in the "Module" section:
-
-[.programlisting]
-....
-Section "Module"
- Load "extmod"
- Load "glx"
- ...
-....
-
-The preceding can be done automatically with package:x11/nvidia-xconfig[] by running (as root):
-
-[source,shell]
-....
-# nvidia-xconfig --add-argb-glx-visuals
-# nvidia-xconfig --composite
-# nvidia-xconfig --depth=24
-....
-
-[[compiz-fusion]]
-=== Installing and Configuring Compiz Fusion
-
-Installing Compiz Fusion is as simple as any other package:
-
-[source,shell]
-....
-# pkg install x11-wm/compiz-fusion
-....
-
-When the installation is finished, start your graphic desktop and at a terminal, enter the following commands (as a normal user):
-
-[source,shell]
-....
-% compiz --replace --sm-disable --ignore-desktop-hints ccp &
-% emerald --replace &
-....
-
-Your screen will flicker for a few seconds, as your window manager (e.g., Metacity if you are using GNOME) is replaced by Compiz Fusion.
-Emerald takes care of the window decorations (i.e., close, minimize, maximize buttons, title bars and so on).
-
-You may convert this to a trivial script and have it run at startup automatically (e.g., by adding to "Sessions" in a GNOME desktop):
-
-[.programlisting]
-....
-#! /bin/sh
-compiz --replace --sm-disable --ignore-desktop-hints ccp &
-emerald --replace &
-....
-
-Save this in your home directory as, for example, [.filename]#start-compiz# and make it executable:
-
-[source,shell]
-....
-% chmod +x ~/start-compiz
-....
-
-Then use the GUI to add it to [.guimenuitem]#Startup Programs# (located in [.guimenuitem]#System#, [.guimenuitem]#Preferences#, [.guimenuitem]#Sessions# on a GNOME desktop).
-
-To actually select all the desired effects and their settings, execute (again as a normal user) the Compiz Config Settings Manager:
-
-[source,shell]
-....
-% ccsm
-....
-
-[NOTE]
-====
-In GNOME, this can also be found in the [.guimenuitem]#System#, [.guimenuitem]#Preferences# menu.
-====
-
-If you have selected "gconf support" during the build, you will also be able to view these settings using `gconf-editor` under `apps/compiz`.
-
-[[x11-troubleshooting]]
-== Troubleshooting
-
-If the mouse does not work, you will need to first configure it before proceeding.
-In recent Xorg versions, the `InputDevice` sections in [.filename]#xorg.conf# are ignored in favor of the autodetected devices.
-To restore the old behavior, add the following line to the `ServerLayout` or `ServerFlags` section of this file:
-
-[.programlisting]
-....
-Option "AutoAddDevices" "false"
-....
-
-Input devices may then be configured as in previous versions, along with any other options needed (e.g., keyboard layout switching).
-
-[NOTE]
-====
-[WARNING]
-=====
-This section contains partially outdated information.
-The HAL daemon (hald) is no longer a part of the FreeBSD desktop setup.
-=====
-As previously explained the hald daemon will, by default, automatically detect your keyboard.
-There are chances that your keyboard layout or model will not be correct, desktop environments like GNOME, KDE or Xfce provide tools to configure the keyboard.
-However, it is possible to set the keyboard properties directly either with the help of the man:setxkbmap[1] utility or with a hald's configuration rule.
-
-For example if, one wants to use a PC 102 keys keyboard coming with a french layout, we have to create a keyboard configuration file for hald called [.filename]#x11-input.fdi# and saved in the [.filename]#/usr/local/etc/hal/fdi/policy# directory.
-This file should contain the following lines:
-
-[.programlisting]
-....
-<?xml version="1.0" encoding="utf-8"?>
-<deviceinfo version="0.2">
- <device>
- <match key="info.capabilities" contains="input.keyboard">
- <merge key="input.x11_options.XkbModel" type="string">pc102</merge>
- <merge key="input.x11_options.XkbLayout" type="string">fr</merge>
- </match>
- </device>
-</deviceinfo>
-....
-
-If this file already exists, just copy and add to your file the lines regarding the keyboard configuration.
-
-You will have to reboot your machine to force hald to read this file.
-
-It is possible to do the same configuration from an X terminal or a script with this command line:
-
-[source,shell]
-....
-% setxkbmap -model pc102 -layout fr
-....
-
-[.filename]#/usr/local/share/X11/xkb/rules/base.lst# lists the various keyboard, layouts and options available.
-====
-
-The [.filename]#xorg.conf.new# configuration file may now be tuned to taste.
-Open the file in a text editor such as man:emacs[1] or man:ee[1].
-If the monitor is an older or unusual model that does not support autodetection of sync frequencies, those settings can be added to [.filename]#xorg.conf.new# under the `"Monitor"` section:
-
-[.programlisting]
-....
-Section "Monitor"
- Identifier "Monitor0"
- VendorName "Monitor Vendor"
- ModelName "Monitor Model"
- HorizSync 30-107
- VertRefresh 48-120
-EndSection
-....
-
-Most monitors support sync frequency autodetection, making manual entry of these values unnecessary.
-For the few monitors that do not support autodetection, avoid potential damage by only entering values provided by the manufacturer.
-
-X allows DPMS (Energy Star) features to be used with capable monitors.
-The man:xset[1] program controls the time-outs and can force standby, suspend, or off modes.
-If you wish to enable DPMS features for your monitor, you must add the following line to the monitor section:
-
-[.programlisting]
-....
-Option "DPMS"
-....
-
-While the [.filename]#xorg.conf.new# configuration file is still open in an editor, select the default resolution and color depth desired.
-This is defined in the `"Screen"` section:
-
-[.programlisting]
-....
-Section "Screen"
- Identifier "Screen0"
- Device "Card0"
- Monitor "Monitor0"
- DefaultDepth 24
- SubSection "Display"
- Viewport 0 0
- Depth 24
- Modes "1024x768"
- EndSubSection
-EndSection
-....
-
-The `DefaultDepth` keyword describes the color depth to run at by default.
-This can be overridden with the `-depth` command line switch to man:Xorg[1].
-The `Modes` keyword describes the resolution to run at for the given color depth.
-Note that only VESA standard modes are supported as defined by the target system's graphics hardware.
-In the example above, the default color depth is twenty-four bits per pixel.
-At this color depth, the accepted resolution is 1024 by 768 pixels.
-
-Finally, write the configuration file and test it using the test mode given above.
-
-[NOTE]
-====
-One of the tools available to assist you during troubleshooting process are the Xorg log files, which contain information on each device that the Xorg server attaches to.
-Xorg log file names are in the format of [.filename]#/var/log/Xorg.0.log#.
-The exact name of the log can vary from [.filename]#Xorg.0.log# to [.filename]#Xorg.8.log# and so forth.
-====
-
-If all is well, the configuration file needs to be installed in a common location where man:Xorg[1] can find it.
-This is typically [.filename]#/etc/X11/xorg.conf# or [.filename]#/usr/local/etc/X11/xorg.conf#.
-
-[source,shell]
-....
-# cp xorg.conf.new /etc/X11/xorg.conf
-....
-
-The Xorg configuration process is now complete.
-Xorg may be now started with the man:startx[1] utility.
-The Xorg server may also be started with the use of man:xdm[8].
-
-=== Configuration with Intel(R) `i810` Graphics Chipsets
-
-Configuration with Intel(R) i810 integrated chipsets requires the [.filename]#agpgart# AGP programming interface for Xorg to drive the card.
-See the man:agp[4] driver manual page for more information.
-
-This will allow configuration of the hardware as any other graphics board.
-Note on systems without the man:agp[4] driver compiled in the kernel, trying to load the module with man:kldload[8] will not work.
-This driver has to be in the kernel at boot time through being compiled in or using [.filename]#/boot/loader.conf#.
-
-=== Adding a Widescreen Flatpanel to the Mix
-
-This section assumes a bit of advanced configuration knowledge.
-If attempts to use the standard configuration tools above have not resulted in a working configuration, there is information enough in the log files to be of use in getting the setup working.
-Use of a text editor will be necessary.
-
-Current widescreen (WSXGA, WSXGA+, WUXGA, WXGA, WXGA+, et.al.) formats support 16:10 and 10:9 formats or aspect ratios that can be problematic.
-Examples of some common screen resolutions for 16:10 aspect ratios are:
-
-* 2560x1600
-* 1920x1200
-* 1680x1050
-* 1440x900
-* 1280x800
-
-At some point, it will be as easy as adding one of these resolutions as a possible `Mode` in the `Section "Screen"` as such:
-
-[.programlisting]
-....
-Section "Screen"
-Identifier "Screen0"
-Device "Card0"
-Monitor "Monitor0"
-DefaultDepth 24
-SubSection "Display"
- Viewport 0 0
- Depth 24
- Modes "1680x1050"
-EndSubSection
-EndSection
-....
-
-Xorg is smart enough to pull the resolution information from the widescreen via I2C/DDC information so it knows what the monitor can handle as far as frequencies and resolutions.
-
-If those `ModeLines` do not exist in the drivers, one might need to give Xorg a little hint.
-Using [.filename]#/var/log/Xorg.0.log# one can extract enough information to manually create a `ModeLine` that will work.
-Simply look for information resembling this:
-
-[.programlisting]
-....
-(II) MGA(0): Supported additional Video Mode:
-(II) MGA(0): clock: 146.2 MHz Image Size: 433 x 271 mm
-(II) MGA(0): h_active: 1680 h_sync: 1784 h_sync_end 1960 h_blank_end 2240 h_border: 0
-(II) MGA(0): v_active: 1050 v_sync: 1053 v_sync_end 1059 v_blanking: 1089 v_border: 0
-(II) MGA(0): Ranges: V min: 48 V max: 85 Hz, H min: 30 H max: 94 kHz, PixClock max 170 MHz
-....
-
-This information is called EDID information.
-Creating a `ModeLine` from this is just a matter of putting the numbers in the correct order:
-
-[.programlisting]
-....
-ModeLine <name> <clock> <4 horiz. timings> <4 vert. timings>
-....
-
-So that the `ModeLine` in `Section "Monitor"` for this example would look like this:
-
-[.programlisting]
-....
-Section "Monitor"
-Identifier "Monitor1"
-VendorName "Bigname"
-ModelName "BestModel"
-ModeLine "1680x1050" 146.2 1680 1784 1960 2240 1050 1053 1059 1089
-Option "DPMS"
-EndSection
-....
-
-Now having completed these simple editing steps, X should start on your new widescreen monitor.
-
-[[compiz-troubleshooting]]
-=== Troubleshooting Compiz Fusion
-
-==== I have installed Compiz Fusion, and after running the commands you mention, my windows are left without title bars and buttons. What is wrong?
-
-You are probably missing a setting in [.filename]#/etc/X11/xorg.conf#.
-Review this file carefully and check especially the `DefaultDepth` and `AddARGBGLXVisuals` directives.
-
-==== When I run the command to start Compiz Fusion, the X server crashes and I am back at the console. What is wrong?
-
-If you check [.filename]#/var/log/Xorg.0.log#, you will probably find error messages during the X startup.
-The most common would be:
-
-[source,shell]
-....
-(EE) NVIDIA(0): Failed to initialize the GLX module; please check in your X
-(EE) NVIDIA(0): log file that the GLX module has been loaded in your X
-(EE) NVIDIA(0): server, and that the module is the NVIDIA GLX module. If
-(EE) NVIDIA(0): you continue to encounter problems, Please try
-(EE) NVIDIA(0): reinstalling the NVIDIA driver.
-....
-
-This is usually the case when you upgrade Xorg.
-You will need to reinstall the package:x11/nvidia-driver[] package so glx is built again.
-
-[[x-wayland]]
-== Wayland on FreeBSD
-Wayland is a new software for supporting graphical user interfaces, but it differs from Xorg in several important ways.
-First, Wayland is only a protocol that acts as an intermediary between clients using a different mechanism which removes the dependency on an X server.
-Xorg includes both the X11 protocol, used to run remote displays and the X server will accept connections and display windows.
-Under Wayland, the compositor or window manager provides the display server instead of a traditional X server.
-
-Since Wayland is not an X server, traditional X screen connections will need to utilize other methods such as VNC or RDP for remote desktop management. Second, Wayland can manage composite communications between clients and a compositor as a separate entity which does not need to support the X protocols.
-
-Wayland is relatively new, and not all software has been updated to run natively without `Xwayland` support.
-Because Wayland does not provide the X server, and expects compositors to provide that support, X11 window managers that do not yet support Wayland will require that `Xwayland` is not started with the `-rootless` parameter.
-The `-rootless` parameter, when removed, will restore X11 window manager support.
-
-[NOTE]
-====
-The current NVidia driver should work with most wl-roots compositors, but it may be a little unstable and not support all features at this time.
-Volunteers to help work on the NVidia DRM are requested.
-====
-
-Currently, a lot of software will function with minimal issues on Wayland, including Firefox.
-And a few desktops are also available, such as the Compiz Fusion replacement, known as Wayfire, and the i3 window manager replacement, Sway.
-
-[NOTE]
-====
-As of May, 2021, plasma5-kwin does support Wayland on FreeBSD.
-To use Plasma under Wayland, use the `startplasma-wayland` parameter to `ck-launch-session` and tie in dbus with:
-`ck-launch-session dbus-run-session startplasma-wayland`
-to get it working.
-====
-
-For compositors, a kernel supporting the man:evdev[4] driver must exist to utilize the keybinding functionality.
-This is built into the [.filename]#GENERIC# kernel by default; however, if it has been customized and man:evdev[4] support was stripped out, the man:evdev[4] module will need to be loaded.
-In addition, users of `Wayland` will need to be members of the `video` group.
-To quickly make this change, use the `pw` command:
-
-[source,shell]
-----
-pw groupmod video -m user
-----
-
-Installing Wayland is simple; there is not a great deal of configuration for the protocol itself.
-Most of the composition will depend on the chosen compositor.
-By installing `seatd` now, a step is skipped as part of the compositor installation and configuration as `seatd` is needed to provide non-root access to certain devices.
-All of the compositors described here should work with package:graphics/drm-kmod[] open source drivers; however, the NVidia graphics cards may have issues when using the proprietary drivers.
-Begin by installing the following packages:
-
-[source,shell]
-----
-# pkg install wayland seatd
-----
-
-Once the protocol and supporting packages have been installed, a compositor must create the user interface.
-Several compositors will be covered in the following sections.
-All compositors using Wayland will need a runtime directory defined in the environment, which can be achieved with the following command in the bourne shell:
-
-[source,shell]
-----
-% export XDG_RUNTIME_DIR=/var/run/user/`id -u`
-----
-
-It is important to note that most compositors will search the XDG_RUNTIME_DIR directory for the configuration files.
-In the examples included here, a parameter will be used to specify a configuration file in [.filename]#~/.config# to keep temporary files and configuration files separate.
-It is recommended that an alias be configured for each compositor to load the designated configuration file.
-
-[WARNING]
-====
-It has been reported that ZFS users may experience issues with some Wayland clients because they need access to `posix_fallocate()` in the runtime directory.
-While the author could not reproduce this issue on their ZFS system, a recommended workaround is not to use ZFS for the runtime directory and instead use `tmpfs` for the [.filename]#/var/run# directory.
-In this case, the `tmpfs` file system is used for [.filename]#/var/run# and mounted through the command `mount -t tmpfs tmpfs /var/run` command and then make this change persist across reboots through [.filename]#/etc/fstab#.
-The XDG_RUNTIME_DIR environment variable could be configured to use [.filename]#/var/run/user/$UID# and avoid potential pitfalls with ZFS.
-Consider that scenario when reviewing the configuration examples in the following sections.
-====
-
-The seatd daemon helps manage access to shared system devices for non-root users in compositors; this includes graphics cards.
-For traditional X11 managers, `seatd` is not needed, such as both Plasma and GNOME, but for the Wayland compositors discussed here, it will need enabled on the system and be running before starting a compositor environment.
-To enable and start the `seatd` daemon now, and on system initialization:
-
-[source,shell]
-----
-# sysrc seatd_enable=”YES”
-# service seatd start
-----
-
-Afterward, a compositor, which is similar to an X11 desktop, will need to be installed for the GUI environment.
-Three are discussed here, including basic configuration options, setting up a screen lock, and recommendations for more information.
-
-=== The Wayfire Compositor
-
-Wayfire is a compositor that aims to be lightweight and customizable.
-Several features are available, and it brings back several elements from the previously released Compiz Fusion desktop.
-All of the parts look beautiful on modern hardware. To get Wayfire up and running, begin by installing the required packages:
-
-[source,shell]
-----
-# pkg install wayfire wf-shell alacritty swaylock-effects swayidle wlogout kanshi mako wlsunset
-----
-
-The `alacritty` package provides a terminal emulator.
-Still, it is not completely required as other terminal emulators such as `kitty`, and XFCE-4 `Terminal` have been tested and verified to work under the Wayfire compositor.
-Wayfire configuration is relatively simple; it uses a file that should be reviewed for any customizations.
-To begin, copy the example file over to the runtime environment configuration directory and then edit the file:
-
-[source,shell]
-----
-% mkdir ~/.config/wayfire
-% cp /usr/local/share/examples/wayfire/wayfire.ini ~/.config/wayfire
-----
-
-The defaults for most users should be fine.
-Within the configuration file, items like the famous `cube` are pre-configured, and there are instructions to help with the available settings.
-A few primary settings of note include:
-
-[.programlisting]
-....
-[output]
-mode = 1920x1080@60000
-position = 0,0
-transform = normal
-scale = 1.000000
-....
-
-In this example, from the configuration file, the screen's output should be the listed mode at the listed hertz.
-For example, the mode should be set to `widthxheight@refresh_rate`.
-The position places the output at a specific pixel location specified.
-The default should be fine for most users.
-Finally, transform sets a background transform, and scale will scale the output to the specified scale factor.
-The defaults for these options are generally acceptable; for more information, see the documentation.
-
-As mentioned, Wayland is new, and not all applications work with the protocol yet.
-At this time, `sddm` does not appear to support starting and managing compositors in Wayland.
-The `swaylock` utility has been used instead in these examples. The configuration file contains options to run `swayidle` and `swaylock` for idle and locking of the screen.
-This option to define the action to take when the system is idle is listed as:
-
-[.programlisting]
-....
-idle = swaylock
-....
-
-And the lock timeout is configured using the following lines:
-
-[.programlisting]
-....
-[idle]
-toggle = <super> KEY_Z
-screensaver_timeout = 300
-dpms_timeout = 600
-....
-
-The first option will lock the screen after 300 seconds, and after another 300, the screen will shut off through the `dpms_timeout` option.
-
-One final thing to note is the <super> key.
-Most of the configuration mentions this key, and it is the traditional `Windows` key on the keyboard.
-Most keyboards have this super key available; however, it should be remapped within this configuration file if it is not available.
-For example, to lock the screen, press and hold the super key, the kbd:[shift] key, and press the kbd:[escape] key.
-nless the mappings have changed, this will execute the swaylock application.
-The default configuration for `swaylock` will show a grey screen; however, the application is highly customizable and well documented.
-In addition, since the swaylock-effects is the version that was installed, there are several options available such as the blur effect, which can be seen using the following command:
-
-[source,shell]
-----
-% swaylock --effect-blur 7x5
-----
-
-There is also the `--clock` parameter which will display a clock with the date and time on the lock screen.
-When package:x11/swaylock-effects[] was installed, a default [.filename]#pam.d# configuration was included.
-It provides the default options that should be fine for most users.
-More advanced options are available; see the PAM documentation for more information.
-
-At this point, it is time to test Wayfire and see if it can start up on the system.
-Just type the following command:
-
-[source,shell]
-----
-% wayfire -c ~/.config/wayfire/wayfire.ini
-----
-
-The compositor should now start and display a background image along with a menu bar at the top of the screen.
-Wayfire will attempt to list installed compatible applications for the desktop and present them in this drop-down menu; for example, if the XFCE-4 file manager is installed, it will show up in this drop-down menu.
-If a specific application is compatible and valuable enough for a keyboard shortcut, it may be mapped to a keyboard sequence using the [.filename]#wayfire.ini# configuration file.
-Wayfire also has a configuration tool named Wayfire Config Manager.
-It is located in the drop-down menu bar but may also be started through a terminal by issuing the following command:
-
-[source,shell]
-----
-% wcm
-----
-
-Various Wayfire configuration options, including the composite special effects, maybe enabled, disabled, or configured through this application.
-In addition, for a more user-friendly experience, a background manager, panel, and docking application may be enabled in the configuration file:
-
-[.programlisting]
-....
-panel = wf-panel
-dock = wf-dock
-background = wf-background
-....
-
-[WARNING]
-====
-Changes made through `wcm` will overwrite custom changes in the [.filename]#wayfire.ini# configuration file.
-The [.filename]#wayfire.ini# file is highly recommended to be backed up so any essential changes may be restored.
-====
-
-Finally, the default launcher listed in the [.filename]#wayfire.ini# is package:x11/wf-shell[] which may be replaced with other panels if desired by the user.
-
-=== The Hikari Compositor
-
-The Hikari compositor uses several concepts centered around productivity, such as sheets, workspaces, and more.
-In that way, it resembles a tiling window manager.
-Breaking this down, the compositor starts with a single workspace, which is similar to virtual desktops.
-Hikari uses a single workspace or virtual desktop for user interaction. The workspace is made up of several views, which are the working windows in the compositor grouped as either sheets or groups.
-Both sheets and groups are made up of a collection of views; again, the windows that are grouped together.
-When switching between sheets or groups, the active sheet or group will become known collectively as the workspace.
-The manual page will break this down into more information on the functions of each but for this document, just consider a single workspace utilizing a single sheet.
-Hikari installation will comprise of a single package, package:x11-wm/hikari[], and a terminal emulator `alacritty`:
-
-[source,shell]
-----
-# pkg install hikari alacritty
-----
-
-[NOTE]
-====
-Other shells, such as `kitty` or the Plasma `Terminal`, will function under Wayland. Users should experiment with their favorite terminal editor to validate compatibility.
-====
-
-Hikari uses a configuration file, [.filename]#hikari.conf#, which could either be placed in the XDG_RUNTIME_DIR or specified on startup using the `-c` parameter.
-An autostart configuration file is not required but may make the migration to this compositor a little easier.
-Beginning the configuration is to create the Hikari configuration directory and copy over the configuration file for editing:
-
-[source,shell]
-----
-% mkdir ~/.config/hikari
-% cp /usr/local/etc/hikari/hikari.conf ~/.config/hikari
-----
-
-The configuration is broken out into various stanzas such as ui, outputs, layouts, and more.
-For most users, the defaults will function fine; however, some important changes should be made.
-For example, the $TERMINAL variable is normally not set within the user's environment.
-Changing this variable or altering the [.filename]#hikari.conf# file to read:
-
-[.programlisting]
-....
-terminal = "/usr/local/bin/alacritty"
-....
-
-Will launch the `alacritty` terminal using the bound key press.
-While going through the configuration file, it should be noted that the capital letters are used to map keys out for the user.
-For example, the kbd:[L] key for starting the terminal kbd:[L+Return] is actually the previously discussed super key or Windows logo key.
-Therefore, holding the kbd:[L/super/Windows] key and pressing kbd:[Enter] will open the specified terminal emulator with the default configuration.
-Mapping other keys to applications require an action definition to be created.
-For this, the action item should be listed in the actions stanza, for example:
-
-[.programlisting]
-....
-actions {
- terminal = "/usr/local/bin/alacritty"
- browser = "/usr/local/bin/firefox"
-}
-....
-
-Then an action may be mapped under the keyboard stanza, which is defined within the bindings stanza:
-
-[.programlisting]
-....
-bindings {
- keyboard {
-SNIP
- "L+Return" = action-terminal
- "L+b" = action-browser
-SNIP
-....
-
-After Hikari is restarted, holding the Windows logo button and pressing the kbd:[b] key on the keyboard will start the web browser.
-The compositor does not have a menu bar, and it is recommended the user set up, at minimal, a terminal emulator before migration.
-The manual page contains a great deal of documentation it should be read before performing a full migration.
-Another positive aspect about Hikari is that, while migrating to the compositor, Hikari can be started in the Plasma and GNOME desktop environments, allowing for a test-drive before completely migrating.
-
-Locking the screen in Hikari is easy because a default [.filename]#pam.d# configuration file and unlock utility are bundled with the package.
-The key binding for locking the screen is kbd:[L] (Windows logo key)+ kbd:[Shift] + kbd:[Backspace].
-It should be noted that all views not marked public will be hidden.
-These views will never accept input when locked but beware of sensitive information being visible.
-For some users, it may be easier to migrate to a different screen locking utility such as swaylock-effects, discussed in this section.
-To start Hikari, use the following command:
-
-[source,shell]
-----
-% hikari -c ~/.config/hikari/hikari.conf
-----
-
-=== The Sway Compositor
-
-The Sway compositor is a tiling compositor that attempts to replace the i3 windows manager.
-It should work with the user's current i3 configuration; however, new features may require some additional setup.
-In the forthcoming examples, a fresh installation without migrating any i3 configuration will be assumed.
-To install Sway and valuable components, issue the following command as the root user:
-
-[source,shell]
-----
-# pkg install sway swayidle swaylock-effects alacritty dmenu-wayland dmenu
-----
-
-For a basic configuration file, issue the following commands and then edit the configuration file after it is copied:
-
-[source,shell]
-----
-% mkdir ~/.config/sway
-% cp /usr/local/etc/sway/config ~/.config/sway
-----
-
-The base configuration file has many defaults, which will be fine for most users.
-Several important changes should be made like the following:
-
-[.programlisting]
-....
-# Logo key. Use Mod1 for Alt.
-input * xkb_rules evdev
-set $mod Mod4
-# Your preferred terminal emulator
-set $term alacritty
-set $lock swaylock -f -c 000000
-output "My Workstation" mode 1366x786@60Hz position 1366 0
-output * bg ~/wallpapers/mywallpaper.png stretch
-### Idle configuration
-exec swayidle -w \
- timeout 300 'swaylock -f -c 000000' \
- timeout 600 'swaymsg "output * dpms off"' resume 'swaymsg "output * dpms on"' \
- before-sleep 'swaylock -f -c 000000'
-....
-
-In the previous example, the `xkb` rules for man:evdev[4] events are loaded, and the $mod key is set to the Windows logo key for the key bindings.
-Next, the terminal emulator was set to be `alacritty`, and a screen lock command was defined; more on this later.
-The output keyword, the mode, the position, a background wallpaper, and Sway is also told to stretch this wallpaper to fill out the screen.
-Finally, `swaylock` is set to daemonize and lock the screen after a timeout of 300 seconds, placing the screen or monitor into sleep mode after 600 seconds.
-The locked background color of 000000, which is black, is also defined here.
-Using swaylock-effects, a clock may also be displayed with the `--clock` parameter.
-See the manual page for more options.
-The man:sway-output[5] manual page should also be reviewed; it includes a great deal of information on customing the output options available.
-
-While in Sway, to bring up a menu of applications, hold the Windows logo key (mod) and press the kbd:[d] key.
-The menu may be navigated using the arrow keys on the keyboard.
-There is also a method to manipulate the layout of the bar and add a tray; read the man:sway-bar[5] manual page for more information.
-The default configuration adds a date and time to the upper right-hand corner.
-See the `Bar` stanza in the configuration file for an example.
-By default, the configuration does not include locking the screen outside of the example above, enabling a lockout timer.
-Creating a lock key binding requires the following line to the `Key bindings` section:
-
-[.programlising]
-....
-# Lock the screen manually
-bindsym $mod+Shift+Return exec $lock
-....
-
-Now the screen may be locked using the combination of holding the Windows logo key, pressing and holding shift, and finally pressing return.
-When Sway is installed, whether from a package or the FreeBSD Ports Collection, a default file for [.filename]#pam.d# was installed.
-The default configuration should be acceptable for most users, but more advanced options are available.
-Read through the PAM documentation for more information.
-
-Finally, to exit Sway and return to the shell, hold the Windows logo key, the shift key, and press the kbd:[e] key.
-A prompt will be displayed with an option to exit Sway.
-During migration, Sway can be started through a terminal emulator on an X11 desktop such as Plasma.
-This makes testing different changes and key bindings a little easier prior to fully migrating to this compositor.
-To start Sway, issue the following command:
-
-[source,shell]
-----
-% sway -c ~/.config/sway/config
-----
-
-=== Using Xwayland
-
-When installing Wayland, the `Xwayland` binary should have been installed unless Wayland was built without X11 support.
-If the [.filename]#/usr/local/bin/Xwayland# file does not exist, install it using the following command:
-
-[source,shell]
-----
-# pkg install xwayland-devel
-----
-
-[NOTE]
-====
-The development version of Xwayland is recommended and was most likely installed with the Wayland package.
-Each compositor has a method of enabling or disabling this feature.
-====
-
-Once `Xwayland` has been installed, configure it within the chosen compositor.
-For Wayfire, the following line is required in the [.filename]#wayfire.ini# file:
-
-[.programlisting]
-....
-xwayland = true
-....
-
-For the Sway compositor, `Xwayland` should be enabled by default.
-Even so, it is recommened to manually add a configuration line in the [.filename]#~/.config/sway/config# like the following:
-
-[.programlisting]
-.....
-xwayland enable
-.....
-
-Finally, for Hikari, no changes are needed.
-Support for `Xwayland` is build in by default.
-To disable that support, rebuild the package from the ports collection and disable Xwayland support at that time.
-
-After these changes are made, start the compositor at the command line and execute a terminal from the key bindings.
-Within this terminal, issue the `env` command and search for the `DISPLAY` variables.
-If the compositor was able to properly start the Xwayland X server, these environment variables should look similar to the following:
-
-[source,shell]
-----
-% env | grep DISPLAY
-----
-
-[.programlisting]
-....
-WAYLAND_DISPLAY=wayland-1
-DISPLAY=:0
-....
-
-In this output, there is a default Wayland display and a display set for the Xwayland server.
-Another method to verify that `Xwayland` is functioning properly is to use install and test the small package:[x11/eyes] and check the output.
-If the `xeyes` application starts and the eyes follow the mouse pointer, Xwayland is functioning properly.
-If an error such as the following is displayed, something happened during the `Xwayland` intitialization and it may need reinstalled:
-
-[.programlisting]
-....
-Error: Cannot open display wayland-0
-....
-
-[WARNING]
-====
-A security feature of Wayland is that, without running an X server, there is not another network listener.
-Once `Xwayland` is enabled, this security feature is no longer applicable to the system.
-====
-
-For some compositors, such as Wayfire, `Xwayland` may not start properly.
-As such, `env` will show the following information for the `DISPLAY` environment variables:
-
-[source,shell]
-----
-% env | grep DISPLAY
-----
-
-[.programlisting]
-....
-DISPLAY=wayland-1
-WAYLAND_DISPLAY=wayland-1
-....
-
-Even though `Xwayfire` was installed and configured, X11 applications will not start giving a display issue.
-To work around this, verify that there is already an instance of `Xwayland` using a UNIX socket through these two methods.
-First, check the output from `sockstat` and search for X11-unix:
-
-[source,shell]
-----
-% sockstat | grep x11
-----
-
-There should be something similar to the following information:
-
-[.programlisting]
-....
-trhodes Xwayland 2734 8 stream /tmp/.X11-unix/X0
-trhodes Xwayland 2734 9 stream /tmp/.X11-unix/X0
-trhodes Xwayland 2734 10 stream /tmp/.X11-unix/X0
-trhodes Xwayland 2734 27 stream /tmp/.X11-unix/X0_
-trhodes Xwayland 2734 28 stream /tmp/.X11-unix/X0
-....
-
-This suggests the existence of an X11 socket.
-This can be further verified by attempting to execute `Xwayland` manually within a terminal emulator running under the compositor:
-
-[source,shell]
-----
-% Xwayland
-----
-
-If an X11 socket is already available, the following error should be presented to the user:
-
-[.programlisting]
-....
-(EE)
-Fatal server error:
-(EE) Server is already active for display 0
- If this server is no longer running, remove /tmp/.X0-lock
- and start again.
-(EE)
-....
-
-Since there is an active X display available using display zero, the environment variable was just set improperly, to fix this, change the `DISPLAY` environment variable to `:0` and attempt to execute the application again.
-The following example uses package:mail/claws-mail[] as the application which needs the `Xwayland` service:
-
-[source,shell]
-----
-export DISPLAY=:0
-----
-
-After this change, the package:mail/claws-mail[] application should now start using `Xwayland` and function as expected.
-
-=== Remote Desktop Using VNC
-
-Earlier in this document it was noted that Wayland does not provide the same X server style access as Xorg provides.
-Instead, users are free to pick and choose a remote desktop protocol such as RDP or VNC.
-The FreeBSD Ports collection includes the `wayvnc`, which will support wlroots based compositors such as the ones discussed here.
-This application may be installed using:
-
-[source,shell]
-----
-# pkg install wayvnc
-----
-
-Unlike some other packages, `wayvnc` does not come with a configuration file.
-Thankfully, the manual page documents the important options and they may be extrapolated into a simple configuration file:
-
-[.programlisting]
-....
-address=0.0.0.0
-enable_auth=true
-username=username
-password=password
-private_key_file=/path/to/key.pem
-certificate_file=/path/to/cert.pem
-....
-
-The key files will need to be generated, and it is highly recommended they be used for increased security of the connection.
-When invoked, wayvnc will search for the configuration file in [.filename]#~/.config/wayvnc/config#.
-This could be overwritten using the `-C configuration_file` option when starting the server.
-Thus, to start the `wayvnc` server, issue the following command:
-
-[source,shell]
-----
-% wayvnc -C ~/.config/wayvnc/config
-----
-
-[NOTE]
-====
-At the time of this writing, there is no rc.d script to start `wayvnc` on system initialization.
-If that functionality is desired, a local startup file will need to be created.
-This is probably a feature request for the port maintainer.
-====
-
-=== Wayland Login Manager
-While several login managers exist and are slowly migrating to Wayland, one option is the package:x11/ly[] text user interface (TUI) manager.
-Needing minimal configuration, `ly` will start Sway, Wayfire, and others by presenting a login window on system initialization.
-To install `ly`, issue the following command:
-
-[source,shell]
-----
-# pkg install ly
-----
-
-There will be some configuration hints presented, the import steps are to add the following lines to [.filename]#/etc/gettytab#:
-
-[programlisting]
-....
-Ly:\
- :lo=/usr/local/bin/ly:\
- :al=root:
-....
-
-And then modify the ttyv1 line in [.filename]#/etc/ttys# to match the following line:
-
-[programlisting]
-....
-ttyv1 "/usr/libexec/getty Ly" xterm onifexists secure
-....
-
-After a system reboot, a login should appear.
-To configure specific settings, such as language and edit [.filename]#/usr/local/etc/ly/config.ini#.
-At minimal, this file should have the designated tty that was previously specified in [.filename]#/etc/ttys#.
-
-[NOTE]
-====
-If setting ttyv0 up as the login terminal, it may be required to press the kbd:[alt] and kbd:[F1] keys to properly see the login window.
-====
-
-When the login window appears, using the left and right arrows will swap through different, supported, window managers.
-
-
-=== Useful Utilities
-
-One useful Wayland utility which all compositors can make use of is the waybar.
-While Wayfire does come with a launch menu, an easy-to-use and fast taskbar is a good accessory for any compositor or desktop manager.
-A Wayland compatible taskbar that is fast and easy to configure is waybar.
-To install the package and a supporting audio control utility, issue the following command:
-
-[source,shell]
-----
-# pkg install pavucontrol waybar
-----
-
-To create the configuration directory and copy over a default configuration file, execute the following commands:
-
-[source,shell]
-----
-% mkdir ~/.config/waybar
-% cp /usr/local/etc/xdg/waybar/config ~/.config/waybar
-----
-
-The `lavalauncher` utility provides a launch bar for various applications.
-There is no example configuration file provided with the package, so the following actions must be taken:
-
-[source,shell]
-----
-mkdir ~/.config/lavalauncher
-----
-
-An example configuration file that only includes Firefox, and is placed on the right, is below:
-
-[.programlising]
-....
-global-settings {
- watch-config-file = true;
-}
-
-bar {
- output = eDP-1;
- position = bottom;
- background-colour = "#202020";
-
- # Condition for the default configuration set.
- condition-resolution = wider-than-high;
-
- config {
- position = right;
- }
-
- button {
- image-path = /usr/local/lib/firefox/browser/chrome/icons/default/default48.png;
- command[mouse-left] = /usr/local/bin/firefox;
- }
- button {
- image-path = /usr/local/share/pixmaps/thunderbird.png;
- command[mouse-left] = /usr/local/bin/thunderbird;
-}
-....
+For more information about how to install and configure fonts on FreeBSD, please read the article link:{fonts}[Fonts and FreeBSD].
diff --git a/documentation/content/en/books/handbook/x11/_index.po b/documentation/content/en/books/handbook/x11/_index.po
new file mode 100644
index 0000000000..dbad44372b
--- /dev/null
+++ b/documentation/content/en/books/handbook/x11/_index.po
@@ -0,0 +1,1473 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/x11/_index.adoc:1
+#, no-wrap
+msgid "This chapter describes how to install and configure Xorg on FreeBSD, which provides the open source X Window System used to provide a graphical environment"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/x11/_index.adoc:1
+#, no-wrap
+msgid "Part I. Getting Started"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/x11/_index.adoc:1
+#, no-wrap
+msgid "Chapter 5. The X Window System"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/x11/_index.adoc:14
+#, no-wrap
+msgid "The X Window System"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/x11/_index.adoc:52
+#, no-wrap
+msgid "Synopsis"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:57
+msgid ""
+"An installation of FreeBSD using bsdinstall does not automatically install a "
+"graphical user interface. This chapter describes how to install and "
+"configure Xorg, which provides the open source X Window System used to "
+"provide a graphical environment. It then describes how to find and install "
+"a desktop environment or window manager."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:59
+msgid "Before reading this chapter, you should:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:61
+msgid ""
+"Know how to install additional third-party software as described in crossref:"
+"ports[ports,Installing Applications: Packages and Ports]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:63
+msgid "After reading this chapter, you will know:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:65
+msgid ""
+"The various components of the X Window System, and how they interoperate."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:66
+msgid "How to install and configure Xorg."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:67
+msgid "How to use TrueType(R) fonts in Xorg."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:68
+msgid "How to set up your system for graphical logins (XDM)."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/x11/_index.adoc:70
+#, no-wrap
+msgid "Installing Xorg"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:73
+msgid "On FreeBSD, Xorg can be installed as a package or port."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:75
+msgid ""
+"The binary meta package can be installed quickly but with fewer options for "
+"customization:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:79
+#, no-wrap
+msgid "# pkg install xorg\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:82
+msgid ""
+"Either of these installations results in the complete Xorg system being "
+"installed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:85
+msgid ""
+"The current user must be a member of the `video` group. To add a user to "
+"`video` group, execute the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:89
+#, no-wrap
+msgid "# pw groupmod video -m username\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:96
+msgid ""
+"A smaller version of the X system suitable for experienced users is "
+"available in package:x11/xorg-minimal[]. Most of the documents, libraries, "
+"and applications will not be installed. Some applications require these "
+"additional components to function."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:102
+msgid ""
+"Video cards, monitors, and input devices are automatically detected and do "
+"not require any manual configuration. Do not create `xorg.conf` or run a `-"
+"configure` step unless automatic configuration fails."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/x11/_index.adoc:105
+#, no-wrap
+msgid "Graphic card drivers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:108
+msgid ""
+"The following table shows the different graphics cards supported by FreeBSD, "
+"which package should be installed and its corresponding module."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/x11/_index.adoc:109
+#, no-wrap
+msgid "Graphic card packages"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:112
+#, no-wrap
+msgid "Brand"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:112
+#, no-wrap
+msgid "Type"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:112
+#: documentation/content/en/books/handbook/x11/_index.adoc:259
+#, no-wrap
+msgid "Package"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:114
+#, no-wrap
+msgid "Module"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/x11/_index.adoc:115
+#: documentation/content/en/books/handbook/x11/_index.adoc:190
+#, no-wrap
+msgid "Intel(R)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:116
+#: documentation/content/en/books/handbook/x11/_index.adoc:121
+#: documentation/content/en/books/handbook/x11/_index.adoc:131
+#: documentation/content/en/books/handbook/x11/_index.adoc:136
+#: documentation/content/en/books/handbook/x11/_index.adoc:141
+#: documentation/content/en/books/handbook/x11/_index.adoc:146
+#, no-wrap
+msgid "Open Source"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:117
+#: documentation/content/en/books/handbook/x11/_index.adoc:122
+#, no-wrap
+msgid "drm-kmod"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:119
+#, no-wrap
+msgid "`i915kms`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/x11/_index.adoc:120
+#: documentation/content/en/books/handbook/x11/_index.adoc:222
+#, no-wrap
+msgid "AMD(R)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:124
+#, no-wrap
+msgid "`amdgpu` and `radeonkms`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/x11/_index.adoc:125
+#: documentation/content/en/books/handbook/x11/_index.adoc:250
+#, no-wrap
+msgid "NVIDIA(R)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:126
+#, no-wrap
+msgid "Proprietary"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:127
+#, no-wrap
+msgid "nvidia-driver"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:129
+#, no-wrap
+msgid "`nvidia` or `nvidia-modeset`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:130
+#, no-wrap
+msgid "VESA"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:132
+#, no-wrap
+msgid "xf86-video-vesa"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:134
+#, no-wrap
+msgid "vesa"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:135
+#, no-wrap
+msgid "SCFB"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:137
+#, no-wrap
+msgid "xf86-video-scfb"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:139
+#, no-wrap
+msgid "scfb"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:140
+#, no-wrap
+msgid "VirtualBox(R)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:142
+#, no-wrap
+msgid "virtualbox-ose-additions"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:144
+#, no-wrap
+msgid "VirtualBox(R) OSE additions include the `vboxvideo` driver."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:145
+#, no-wrap
+msgid "VMware(R)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:147
+#, no-wrap
+msgid "xf86-video-vmware"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:149
+#, no-wrap
+msgid "vmwgfx"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:152
+msgid ""
+"The following command can be used to identify which graphics card is "
+"installed in the system:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:156
+#, no-wrap
+msgid "% pciconf -lv|grep -B4 VGA\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:159
+#: documentation/content/en/books/handbook/x11/_index.adoc:182
+#: documentation/content/en/books/handbook/x11/_index.adoc:440
+#: documentation/content/en/books/handbook/x11/_index.adoc:497
+msgid "The output should be similar to the following:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:167
+#, no-wrap
+msgid ""
+"vgapci0@pci0:0:2:0: class=0x030000 rev=0x07 hdr=0x00 vendor=0x8086 device=0x2a42 subvendor=0x17aa subdevice=0x20e4\n"
+" vendor = 'Intel Corporation'\n"
+" device = 'Mobile 4 Series Chipset Integrated Graphics Controller'\n"
+" class = display\n"
+" subclass = VGA\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:173
+msgid ""
+"If the graphics card is not supported by Intel(R), AMD(R) or NVIDIA(R) "
+"drivers, then VESA or SCFB modules should be used. VESA module must be used "
+"when booting in BIOS mode and SCFB module must be used when booting in UEFI "
+"mode."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:175
+msgid "This command can be used to check the booting mode:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:179
+#, no-wrap
+msgid "% sysctl machdep.bootmethod\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:186
+#, no-wrap
+msgid "machdep.bootmethod: BIOS\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:194
+msgid ""
+"Intel(R) Graphics refers to the class of graphics chips that are integrated "
+"on the same die as an Intel(R) CPU. Wikipedia offers link:https://en."
+"wikipedia.org/wiki/List_of_Intel_graphics_processing_units[a good overview "
+"of the variations and names used for generations of Intel HD Graphics]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:197
+msgid ""
+"The package:graphics/drm-kmod[] package indirectly provides a range of "
+"kernel modules for use with Intel(R) Graphics cards. The Intel(R) driver "
+"can be installed by executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:201
+#: documentation/content/en/books/handbook/x11/_index.adoc:233
+#, no-wrap
+msgid "# pkg install drm-kmod\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:204
+#: documentation/content/en/books/handbook/x11/_index.adoc:291
+msgid ""
+"Then add the module to `/etc/rc.conf` file, executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:208
+#, no-wrap
+msgid "# sysrc kld_list+=i915kms\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:214
+msgid ""
+"If a high CPU usage is noticed or excessive tearing with HD video, the "
+"installation of package:multimedia/libva-intel-driver[] may help. To "
+"install the package execute the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:218
+#, no-wrap
+msgid "# pkg install libva-intel-driver mesa-libs mesa-dri\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:227
+msgid ""
+"The package:graphics/drm-kmod[] package indirectly provides a range of "
+"kernel modules for use with AMD(R) Graphics cards. The modules `amdgpu` and "
+"`radeonkms` can be used depending the generation of the hardware. The "
+"FreeBSD project maintains an link:https://wiki.freebsd.org/Graphics/AMD-GPU-"
+"Matrix[AMD graphics support matrix to determine which driver must be used]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:229
+msgid "AMD(R) driver can be installed by executing the following command:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:236
+msgid ""
+"For post-HD7000 or Tahiti graphic cards add the module to `/etc/rc.conf` "
+"file, executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:240
+#, no-wrap
+msgid "# sysrc kld_list+=amdgpu\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:243
+msgid ""
+"For older graphic cards (pre-HD7000 or pre-Tahiti) add the module to `/etc/"
+"rc.conf` file, executing the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:247
+#, no-wrap
+msgid "# sysrc kld_list+=radeonkms\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:255
+msgid ""
+"FreeBSD supports different versions of the proprietary NVIDIA(R) driver. "
+"Users of newer graphics cards should install the package:x11/nvidia-driver[] "
+"package. Those with older cards will have to check below which version "
+"supports them."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/x11/_index.adoc:256
+#, no-wrap
+msgid "Supported versions of NVIDIA(R) drivers"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:261
+#, no-wrap
+msgid "Supported hardware"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:262
+#, no-wrap
+msgid "x11/nvidia-driver-304"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:264
+#, no-wrap
+msgid "link:https://www.nvidia.com/Download/driverResults.aspx/123712/en-us/[supported hardware]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:265
+#, no-wrap
+msgid "x11/nvidia-driver-340"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:267
+#, no-wrap
+msgid "link:https://www.nvidia.com/Download/driverResults.aspx/156167/en-us/[supported hardware]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:268
+#, no-wrap
+msgid "x11/nvidia-driver-390"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:270
+#, no-wrap
+msgid "link:https://www.nvidia.com/Download/driverResults.aspx/191122/en-us/[supported hardware]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:271
+#, no-wrap
+msgid "x11/nvidia-driver-470"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:273
+#, no-wrap
+msgid "link:https://www.nvidia.com/Download/driverResults.aspx/194639/en-us/[supported hardware]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:274
+#, no-wrap
+msgid "x11/nvidia-driver"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/x11/_index.adoc:276
+#, no-wrap
+msgid "link:https://www.nvidia.com/Download/driverResults.aspx/210651/en-us/[supported hardware]"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:281
+msgid ""
+"Version 304 of the NVIDIA(R) graphics driver (nvidia-driver-304) does not "
+"support xorg-server 1.20 or later."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:284
+msgid ""
+"The latest NVIDIA(R) driver can be installed by running the following "
+"command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:288
+#, no-wrap
+msgid "# pkg install nvidia-driver\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:295
+#, no-wrap
+msgid "# sysrc kld_list+=nvidia-modeset\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:300
+msgid ""
+"The `nvidia` driver must be used if the packages x11/nvidia-driver-304 or "
+"x11/nvidia-driver-340 have been installed."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:304
+#, no-wrap
+msgid "# sysrc kld_list+=nvidia\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/x11/_index.adoc:308
+#, no-wrap
+msgid "Xorg Configuration"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:311
+msgid "Xorg supports most common video cards, keyboards, and pointing devices."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:316
+msgid ""
+"Video cards, monitors, and input devices are automatically detected and do "
+"not require any manual configuration. Do not create [.filename]#xorg.conf# "
+"or run a `Xorg -configure` step unless automatic configuration fails."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/x11/_index.adoc:319
+#, no-wrap
+msgid "Configuration Files"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:324
+msgid ""
+"Xorg looks in several directories for configuration files. [.filename]#/usr/"
+"local/etc/X11/# is the *recommended* directory for these files on FreeBSD. "
+"Using this directory helps keep application files separate from operating "
+"system files."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/x11/_index.adoc:326
+#, no-wrap
+msgid "Single or Multiple Files"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:330
+msgid ""
+"It is easier to use multiple files that each configure a specific setting "
+"than the traditional single [.filename]#xorg.conf#. These files are stored "
+"in the [.filename]#/usr/local/etc/X11/xorg.conf.d/# subdirectory."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:334
+msgid ""
+"The traditional single [.filename]#xorg.conf# still works, but is neither as "
+"clear nor as flexible as multiple files in the [.filename]#/usr/local/etc/"
+"X11/xorg.conf.d/# subdirectory."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/x11/_index.adoc:337
+#, no-wrap
+msgid "Video Cards"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:340
+msgid ""
+"The driver for the graphics card can be specified in the [.filename]#/usr/"
+"local/etc/X11/xorg.conf.d/# directory."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:342
+msgid "To configure the Intel(R) driver in a configuration file:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/x11/_index.adoc:344
+#, no-wrap
+msgid "Select Intel(R) Video Driver in a File"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:348
+msgid "[.filename]#/usr/local/etc/X11/xorg.conf.d/20-intel.conf#"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:355
+#, no-wrap
+msgid ""
+"Section \"Device\"\n"
+"\tIdentifier \"Card0\"\n"
+"\tDriver \"intel\"\n"
+"EndSection\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:359
+msgid "To configure the AMD(R) driver in a configuration file:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/x11/_index.adoc:361
+#, no-wrap
+msgid "Select AMD(R) Video Driver in a File"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:365
+msgid "[.filename]#/usr/local/etc/X11/xorg.conf.d/20-radeon.conf#"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:372
+#, no-wrap
+msgid ""
+"Section \"Device\"\n"
+"\tIdentifier \"Card0\"\n"
+"\tDriver \"radeon\"\n"
+"EndSection\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:376
+msgid "To configure the NVIDIA(R) driver in a configuration file:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/x11/_index.adoc:378
+#, no-wrap
+msgid "Select NVIDIA(R) Video Driver in a File"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:382
+msgid "[.filename]#/usr/local/etc/X11/xorg.conf.d/20-nvidia.conf#"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:389
+#, no-wrap
+msgid ""
+"Section \"Device\"\n"
+"\tIdentifier \"Card0\"\n"
+"\tDriver \"nvidia\"\n"
+"EndSection\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:395
+msgid ""
+"package:x11/nvidia-xconfig[] can also be used to perform basic control over "
+"configuration options available in the NVIDIA driver."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:398
+msgid "To configure the VESA driver in a configuration file:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/x11/_index.adoc:400
+#, no-wrap
+msgid "Select VESA Video Driver in a File"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:404
+msgid "[.filename]#/usr/local/etc/X11/xorg.conf.d/20-vesa.conf#"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:411
+#, no-wrap
+msgid ""
+"Section \"Device\"\n"
+"\tIdentifier \"Card0\"\n"
+"\tDriver \"vesa\"\n"
+"EndSection\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:415
+msgid "To configure the SCFB driver in a configuration file:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/x11/_index.adoc:417
+#, no-wrap
+msgid "Select SCFB Video Driver in a File"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:421
+msgid "[.filename]#/usr/local/etc/X11/xorg.conf.d/20-scfb.conf#"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:428
+#, no-wrap
+msgid ""
+"Section \"Device\"\n"
+"\tIdentifier \"Card0\"\n"
+"\tDriver \"scfb\"\n"
+"EndSection\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:433
+msgid ""
+"To configure multiple video cards, the `BusID` can be added. A list of "
+"video card bus ``ID``s can be displayed by executing:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:437
+#, no-wrap
+msgid "% pciconf -lv | grep -B3 display\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:447
+#, no-wrap
+msgid ""
+"vgapci0@pci0:0:2:0: class=0x030000 rev=0x07 hdr=0x00 vendor=0x8086 device=0x2a42 subvendor=0x17aa subdevice=0x20e4\n"
+" vendor = 'Intel Corporation'\n"
+" device = 'Mobile 4 Series Chipset Integrated Graphics Controller'\n"
+" class = display\n"
+"--\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:452
+#, no-wrap
+msgid ""
+"vgapci1@pci0:0:2:1: class=0x038000 rev=0x07 hdr=0x00 vendor=0x8086 device=0x2a43 subvendor=0x17aa subdevice=0x20e4\n"
+" vendor = 'Intel Corporation'\n"
+" device = 'Mobile 4 Series Chipset Integrated Graphics Controller'\n"
+" class = display\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/x11/_index.adoc:455
+#, no-wrap
+msgid "Select Intel(R) Video Driver and NVIDIA(R) Video Driver in a File"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:460
+msgid "[.filename]#/usr/local/etc/X11/xorg.conf.d/20-drivers.conf#"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:468
+#, no-wrap
+msgid ""
+"Section \"Device\"\n"
+"\tIdentifier \"Card0\"\n"
+"\tDriver \"intel\"\n"
+"\tBusID \"pci0:0:2:0\"\n"
+"EndSection\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:474
+#, no-wrap
+msgid ""
+"Section \"Device\"\n"
+"\tIdentifier \"Card0\"\n"
+"\tDriver \"nvidia\"\n"
+"\tBusID \"pci0:0:2:1\"\n"
+"EndSection\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/x11/_index.adoc:478
+#, no-wrap
+msgid "Monitors"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:483
+msgid ""
+"Almost all monitors support the Extended Display Identification Data "
+"standard (`EDID`). Xorg uses `EDID` to communicate with the monitor and "
+"detect the supported resolutions and refresh rates. Then it selects the "
+"most appropriate combination of settings to use with that monitor."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:485
+msgid ""
+"Other resolutions supported by the monitor can be chosen by setting the "
+"desired resolution in configuration files, or after the X server has been "
+"started with man:xrandr[1]."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/x11/_index.adoc:487
+#, no-wrap
+msgid "Using RandR (Resize and Rotate)"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:490
+msgid ""
+"Run man:xrandr[1] without any parameters to see a list of video outputs and "
+"detected monitor modes:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:494
+#, no-wrap
+msgid "% xrandr\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:528
+#, no-wrap
+msgid ""
+"Screen 0: minimum 320 x 200, current 2560 x 960, maximum 8192 x 8192\n"
+"LVDS-1 connected 1280x800+0+0 (normal left inverted right x axis y axis) 261mm x 163mm\n"
+" 1280x800 59.99*+ 59.81 59.91 50.00 \n"
+" 1280x720 59.86 59.74 \n"
+" 1024x768 60.00 \n"
+" 1024x576 59.90 59.82 \n"
+" 960x540 59.63 59.82 \n"
+" 800x600 60.32 56.25 \n"
+" 864x486 59.92 59.57 \n"
+" 640x480 59.94 \n"
+" 720x405 59.51 58.99 \n"
+" 640x360 59.84 59.32 \n"
+"VGA-1 connected primary 1280x960+1280+0 (normal left inverted right x axis y axis) 410mm x 257mm\n"
+" 1280x1024 75.02 60.02 \n"
+" 1440x900 74.98 60.07 \n"
+" 1280x960 60.00* \n"
+" 1280x800 74.93 59.81 \n"
+" 1152x864 75.00 \n"
+" 1024x768 75.03 70.07 60.00 \n"
+" 832x624 74.55 \n"
+" 800x600 72.19 75.00 60.32 56.25 \n"
+" 640x480 75.00 72.81 66.67 59.94 \n"
+" 720x400 70.08 \n"
+"HDMI-1 disconnected (normal left inverted right x axis y axis)\n"
+"DP-1 disconnected (normal left inverted right x axis y axis)\n"
+"HDMI-2 disconnected (normal left inverted right x axis y axis)\n"
+"DP-2 disconnected (normal left inverted right x axis y axis)\n"
+"DP-3 disconnected (normal left inverted right x axis y axis)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:533
+msgid ""
+"This shows that the `VGA-1` output is being used to display a screen "
+"resolution of 1280x960 pixels at a refresh rate of about 60 Hz. The "
+"`LVDS-1` is being used as a secondary monitor to display a screen resolution "
+"of 1280x800 pixels at a refresh rate of about 60 Hz. Monitors are not "
+"attached to the `HDMI-1`, `HDMI-2`, `DP-1`, `DP-2` and `DP-3` connectors."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:536
+msgid ""
+"Any of the other display modes can be selected with man:xrandr[1]. For "
+"example, to switch to 1280x1024 at 60 Hz:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:540
+#, no-wrap
+msgid "% xrandr --output LVDS-1 --mode 1280x720 --rate 60\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/x11/_index.adoc:543
+#, no-wrap
+msgid "Using the Xorg configuration file"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:546
+msgid "The monitor configuration can also be set in a configuration file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:548
+msgid "To set a screen resolution of 1024x768 in a configuration file:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/x11/_index.adoc:549
+#, no-wrap
+msgid "Set Screen Resolution in a File"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:553
+msgid "[.filename]#/usr/local/etc/X11/xorg.conf.d/10-monitor.conf#"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:563
+#, no-wrap
+msgid ""
+"Section \"Screen\"\n"
+"\tIdentifier \"Screen0\"\n"
+"\tDevice \"Card0\"\n"
+"\tSubSection \"Display\"\n"
+"\tModes \"1024x768\"\n"
+"\tEndSubSection\n"
+"EndSection\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/x11/_index.adoc:567
+#, no-wrap
+msgid "Input Devices"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:570
+msgid ""
+"Xorg supports the vast majority of input devices via package:x11/libinput[]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:575
+msgid ""
+"Some desktop environments (such as KDE Plasma) provide a graphical UI for "
+"setting these parameters. Check if this is the case before resorting to "
+"manual configuration editing."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:579
+msgid "For example, to configure the keyboard layout:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/handbook/x11/_index.adoc:580
+#, no-wrap
+msgid "Setting a Keyboard Layout"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:584
+msgid "[.filename]#/usr/local/etc/X11/xorg.conf.d/00-keyboard.conf#"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:595
+#, no-wrap
+msgid ""
+"Section \"InputClass\"\n"
+" Identifier \"Keyboard1\"\n"
+" MatchIsKeyboard \"on\"\n"
+" Option \"XkbLayout\" \"es, fr\"\n"
+" Option \"XkbModel\" \"pc104\"\n"
+" Option \"XkbVariant\" \",qwerty\"\n"
+" Option \"XkbOptions\" \"grp:win_space_toggle\"\n"
+"EndSection\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/x11/_index.adoc:599
+#, no-wrap
+msgid "Using Fonts in Xorg"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:604
+msgid ""
+"The default fonts that ship with Xorg are less than ideal for typical "
+"desktop publishing applications. Large presentation fonts show up jagged "
+"and unprofessional looking, and small fonts are almost completely "
+"unintelligible. However, there are several free, high quality Type1 "
+"(PostScript(R)) fonts available which can be readily used with Xorg."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/x11/_index.adoc:606
+#, no-wrap
+msgid "Type1 Fonts"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:612
+msgid ""
+"The URW font collection (package:x11-fonts/urwfonts[]) includes high quality "
+"versions of standard type1 fonts (Times Roman(TM), Helvetica(TM), "
+"Palatino(TM) and others). The Freefonts collection (package:x11-fonts/"
+"freefonts[]) includes many more fonts, but most of them are intended for use "
+"in graphics software such as the Gimp, and are not complete enough to serve "
+"as screen fonts. In addition, Xorg can be configured to use TrueType(R) "
+"fonts with a minimum of effort. For more details on this, see the man:X[7] "
+"manual page or <<truetype>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:614
+msgid ""
+"To install the above Type1 font collections from binary packages, run the "
+"following commands:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:618
+#, no-wrap
+msgid "# pkg install urwfonts\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:622
+msgid ""
+"And likewise with the freefont or other collections. To have the X server "
+"detect these fonts, add an appropriate line to the X server configuration "
+"file ([.filename]#/usr/local/etc/X11/xorg.conf.d/90-fonts.conf#), which "
+"reads:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:628
+#, no-wrap
+msgid ""
+"Section \"Files\"\n"
+" FontPath \"/usr/local/share/fonts/urwfonts/\"\n"
+"EndSection\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:631
+msgid "Alternatively, at the command line in the X session run:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:636
+#, no-wrap
+msgid ""
+"% xset fp+ /usr/local/share/fonts/urwfonts\n"
+"% xset fp rehash\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:640
+msgid ""
+"This will work but will be lost when the X session is closed, unless it is "
+"added to the startup file ([.filename]#~/.xinitrc# for a normal `startx` "
+"session, or [.filename]#~/.xsession# when logging in through a graphical "
+"login manager like XDM). A third way is to use the new [.filename]#/usr/"
+"local/etc/fonts/local.conf# as demonstrated in <<antialias>>."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/x11/_index.adoc:642
+#, no-wrap
+msgid "TrueType(R) Fonts"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:648
+msgid ""
+"Xorg has built in support for rendering TrueType(R) fonts. There are two "
+"different modules that can enable this functionality. The freetype module "
+"is used in this example because it is more consistent with the other font "
+"rendering back-ends. To enable the freetype module just add the following "
+"line to the `\"Module\"` section of [.filename]#/usr/local/etc/X11/xorg.conf."
+"d/90-fonts.conf#."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:652
+#, no-wrap
+msgid "Load \"freetype\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:658
+msgid ""
+"Now make a directory for the TrueType(R) fonts (for example, [.filename]#/"
+"usr/local/share/fonts/TrueType#) and copy all of the TrueType(R) fonts into "
+"this directory. Keep in mind that TrueType(R) fonts cannot be directly "
+"taken from an Apple(R) Mac(R); they must be in UNIX(R)/MS-DOS(R)/Windows(R) "
+"format for use by Xorg. Once the files have been copied into this "
+"directory, use mkfontscale to create a [.filename]#fonts.dir#, so that the X "
+"font renderer knows that these new files have been installed. `mkfontscale` "
+"can be installed as a package:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:662
+#, no-wrap
+msgid "# pkg install mkfontscale\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:665
+msgid "Then create an index of X font files in a directory:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:670
+#, no-wrap
+msgid ""
+"# cd /usr/local/share/fonts/TrueType\n"
+"# mkfontscale\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:674
+msgid ""
+"Now add the TrueType(R) directory to the font path. This is just the same "
+"as described in <<type1>>:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:679
+#, no-wrap
+msgid ""
+"% xset fp+ /usr/local/share/fonts/TrueType\n"
+"% xset fp rehash\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:682
+msgid "or add a `FontPath` line to [.filename]#xorg.conf#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:685
+msgid ""
+"Now Gimp, LibreOffice, and all of the other X applications should now "
+"recognize the installed TrueType(R) fonts. Extremely small fonts (as with "
+"text in a high resolution display on a web page) and extremely large fonts "
+"(within LibreOffice) will look much better now."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/x11/_index.adoc:687
+#, no-wrap
+msgid "Anti-Aliased Fonts"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:690
+msgid ""
+"All fonts in Xorg that are found in [.filename]#/usr/local/share/fonts/# and "
+"[.filename]#~/.fonts/# are automatically made available for anti-aliasing to "
+"Xft-aware applications. Most recent applications are Xft-aware, including "
+"KDE, GNOME, and Firefox."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:694
+msgid ""
+"To control which fonts are anti-aliased, or to configure anti-aliasing "
+"properties, create (or edit, if it already exists) the file [.filename]#/usr/"
+"local/etc/fonts/local.conf#. Several advanced features of the Xft font "
+"system can be tuned using this file; this section describes only some simple "
+"possibilities. For more details, please see man:fonts-conf[5]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:698
+msgid ""
+"This file must be in XML format. Pay careful attention to case, and make "
+"sure all tags are properly closed. The file begins with the usual XML "
+"header followed by a DOCTYPE definition, and then the `<fontconfig>` tag:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:704
+#, no-wrap
+msgid ""
+"<?xml version=\"1.0\"?>\n"
+" <!DOCTYPE fontconfig SYSTEM \"fonts.dtd\">\n"
+" <fontconfig>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:708
+msgid ""
+"As previously stated, all fonts in [.filename]#/usr/local/share/fonts/# as "
+"well as [.filename]#~/.fonts/# are already made available to Xft-aware "
+"applications. To add another directory outside of these two directory "
+"trees, add a line like this to [.filename]#/usr/local/etc/fonts/local.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:712
+#, no-wrap
+msgid "<dir>/path/to/my/fonts</dir>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:715
+msgid ""
+"After adding new fonts, and especially new font directories, rebuild the "
+"font caches:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:719
+#, no-wrap
+msgid "# fc-cache -f\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:723
+msgid ""
+"Anti-aliasing makes borders slightly fuzzy, which makes very small text more "
+"readable and removes \"staircases\" from large text, but can cause eyestrain "
+"if applied to normal text. To exclude font sizes smaller than 14 point from "
+"anti-aliasing, include these lines:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:742
+#, no-wrap
+msgid ""
+"\t<match target=\"font\">\n"
+"\t <test name=\"size\" compare=\"less\">\n"
+"\t\t<double>14</double>\n"
+"\t </test>\n"
+"\t <edit name=\"antialias\" mode=\"assign\">\n"
+"\t\t<bool>false</bool>\n"
+"\t </edit>\n"
+"\t</match>\n"
+"\t<match target=\"font\">\n"
+"\t <test name=\"pixelsize\" compare=\"less\" qual=\"any\">\n"
+"\t\t<double>14</double>\n"
+"\t </test>\n"
+"\t <edit mode=\"assign\" name=\"antialias\">\n"
+"\t\t<bool>false</bool>\n"
+"\t </edit>\n"
+"\t</match>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:748
+msgid ""
+"Spacing for some monospaced fonts might also be inappropriate with anti-"
+"aliasing. This seems to be an issue with KDE, in particular. One possible "
+"fix is to force the spacing for such fonts to be 100. Add these lines:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:767
+#, no-wrap
+msgid ""
+"\t<match target=\"pattern\" name=\"family\">\n"
+"\t <test qual=\"any\" name=\"family\">\n"
+"\t <string>fixed</string>\n"
+"\t </test>\n"
+"\t <edit name=\"family\" mode=\"assign\">\n"
+"\t <string>mono</string>\n"
+"\t </edit>\n"
+"\t</match>\n"
+"\t<match target=\"pattern\" name=\"family\">\n"
+"\t <test qual=\"any\" name=\"family\">\n"
+"\t\t<string>console</string>\n"
+"\t </test>\n"
+"\t <edit name=\"family\" mode=\"assign\">\n"
+"\t\t<string>mono</string>\n"
+"\t </edit>\n"
+"\t</match>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:770
+msgid ""
+"(this aliases the other common names for fixed fonts as `\"mono\"`), and "
+"then add:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:781
+#, no-wrap
+msgid ""
+"\t<match target=\"pattern\" name=\"family\">\n"
+"\t <test qual=\"any\" name=\"family\">\n"
+"\t\t <string>mono</string>\n"
+"\t </test>\n"
+"\t <edit name=\"spacing\" mode=\"assign\">\n"
+"\t\t <int>100</int>\n"
+"\t </edit>\n"
+"\t </match>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:787
+msgid ""
+"Certain fonts, such as Helvetica, may have a problem when anti-aliased. "
+"Usually this manifests itself as a font that seems cut in half vertically. "
+"At worst, it may cause applications to crash. To avoid this, consider "
+"adding the following to [.filename]#local.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:798
+#, no-wrap
+msgid ""
+"\t<match target=\"pattern\" name=\"family\">\n"
+"\t <test qual=\"any\" name=\"family\">\n"
+"\t\t <string>Helvetica</string>\n"
+"\t </test>\n"
+"\t <edit name=\"family\" mode=\"assign\">\n"
+"\t\t <string>sans-serif</string>\n"
+"\t </edit>\n"
+"\t </match>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:802
+msgid ""
+"After editing [.filename]#local.conf#, make certain to end the file with the "
+"`</fontconfig>` tag. Not doing this will cause changes to be ignored."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:805
+msgid ""
+"Users can add personalized settings by creating their own [.filename]#~/."
+"config/fontconfig/fonts.conf#. This file uses the same `XML` format "
+"described above."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:809
+msgid ""
+"One last point: with an LCD screen, sub-pixel sampling may be desired. This "
+"basically treats the (horizontally separated) red, green and blue components "
+"separately to improve the horizontal resolution; the results can be "
+"dramatic. To enable this, add the line somewhere in [.filename]#local.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:820
+#, no-wrap
+msgid ""
+"\t <match target=\"font\">\n"
+"\t <test qual=\"all\" name=\"rgba\">\n"
+"\t\t <const>unknown</const>\n"
+"\t </test>\n"
+"\t <edit name=\"rgba\" mode=\"assign\">\n"
+"\t\t <const>rgb</const>\n"
+"\t </edit>\n"
+"\t </match>\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/x11/_index.adoc:825
+msgid ""
+"Depending on the sort of display, `rgb` may need to be changed to `bgr`, "
+"`vrgb` or `vbgr`: experiment and see which works best."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/x11/_index.adoc:827
+msgid ""
+"For more information about how to install and configure fonts on FreeBSD, "
+"please read the article link:{fonts}[Fonts and FreeBSD]."
+msgstr ""
diff --git a/documentation/content/en/books/handbook/zfs/_index.adoc b/documentation/content/en/books/handbook/zfs/_index.adoc
index 3fa7e2fb13..8dc05c7c06 100644
--- a/documentation/content/en/books/handbook/zfs/_index.adoc
+++ b/documentation/content/en/books/handbook/zfs/_index.adoc
@@ -1,13 +1,13 @@
---
-title: Chapter 20. The Z File System (ZFS)
+title: Chapter 22. The Z File System (ZFS)
part: Part III. System Administration
prev: books/handbook/geom
next: books/handbook/filesystems
description: ZFS is an advanced file system designed to solve major problems found in previous storage subsystem software
tags: ["ZFS", "filesystem", "administration", "zpool", "features", "terminology", "RAID-Z"]
showBookMenu: true
-weight: 24
-path: "/books/handbook/"
+weight: 26
+path: "/books/handbook/zfs/"
---
[[zfs]]
@@ -18,7 +18,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 20
+:sectnumoffset: 22
:partnums:
:source-highlighter: rouge
:experimental:
@@ -488,7 +488,7 @@ The <<zfs-zfs,`zfs`>> utility allows creating, destroying, and managing datasets
[[zfs-zpool-create]]
=== Creating and Destroying Storage Pools
-Creating a ZFS storage pool (_zpool_) requires permanent decisions, as the pool structure cannot change after creation.
+Creating a ZFS storage pool requires permanent decisions, as the pool structure cannot change after creation.
The most important decision is which types of vdevs to group the physical disks into.
See the list of <<zfs-term-vdev,vdev types>> for details about the possible options.
After creating the pool, most vdev types do not allow adding disks to the vdev.
@@ -580,7 +580,7 @@ This can cause undefined behavior in applications which had open files on those
[[zfs-zpool-attach]]
=== Adding and Removing Devices
-Two ways exist for adding disks to a zpool: attaching a disk to an existing vdev with `zpool attach`, or adding vdevs to the pool with `zpool add`.
+Two ways exist for adding disks to a pool: attaching a disk to an existing vdev with `zpool attach`, or adding vdevs to the pool with `zpool add`.
Some <<zfs-term-vdev,vdev types>> allow adding disks to the vdev after creation.
A pool created with a single disk lacks redundancy.
@@ -2001,7 +2001,7 @@ passwd vi.recover
# cp /var/tmp/.zfs/snapshot/after_cp/passwd /var/tmp
....
-Even if the the `snapdir` property is set to hidden, running `ls .zfs/snapshot` will still list the contents of that directory.
+Even if the `snapdir` property is set to hidden, running `ls .zfs/snapshot` will still list the contents of that directory.
The administrator decides whether to display these directories.
This is a per-dataset setting.
Copying files or directories from this hidden [.filename]#.zfs/snapshot# is simple enough.
@@ -2065,7 +2065,7 @@ usr/home/joe 1.3G 31k 1.3G 0% /usr/home/joe
usr/home/joenew 1.3G 31k 1.3G 0% /usr/home/joenew
....
-Creating a clone makes it an exact copy of the state the dataset as it was when taking the snapshot.
+Creating a clone makes it an exact copy of the state the dataset was in when taking the snapshot.
Changing the clone independently from its originating dataset is possible now.
The connection between the two is the snapshot.
ZFS records this connection in the property `origin`.
@@ -2618,9 +2618,9 @@ If a user has the `snapshot` permission and the `allow` permission, that user ca
Adjust tunables to make ZFS perform best for different workloads.
-* [[zfs-advanced-tuning-arc_max]] `_vfs.zfs.arc_max_` - Upper size of the <<zfs-term-arc,ARC>>. The default is all RAM but 1 GB, or 5/8 of all RAM, whichever is more. Use a lower value if the system runs any other daemons or processes that may require memory. Adjust this value at runtime with man:sysctl[8] and set it in [.filename]#/boot/loader.conf# or [.filename]#/etc/sysctl.conf#.
-* [[zfs-advanced-tuning-arc_meta_limit]] `_vfs.zfs.arc_meta_limit_` - Limit the amount of the <<zfs-term-arc,ARC>> used to store metadata. The default is one fourth of `vfs.zfs.arc_max`. Increasing this value will improve performance if the workload involves operations on a large number of files and directories, or frequent metadata operations, at the cost of less file data fitting in the <<zfs-term-arc,ARC>>. Adjust this value at runtime with man:sysctl[8] in [.filename]#/boot/loader.conf# or [.filename]#/etc/sysctl.conf#.
-* [[zfs-advanced-tuning-arc_min]] `_vfs.zfs.arc_min_` - Lower size of the <<zfs-term-arc,ARC>>. The default is one half of `vfs.zfs.arc_meta_limit`. Adjust this value to prevent other applications from pressuring out the entire <<zfs-term-arc,ARC>>. Adjust this value at runtime with man:sysctl[8] and in [.filename]#/boot/loader.conf# or [.filename]#/etc/sysctl.conf#.
+* [[zfs-advanced-tuning-arc_max]] `_vfs.zfs.arc.max_` starting with 13.x (`vfs.zfs.arc_max` for 12.x) - Upper size of the <<zfs-term-arc,ARC>>. The default is all RAM but 1 GB, or 5/8 of all RAM, whichever is more. Use a lower value if the system runs any other daemons or processes that may require memory. Adjust this value at runtime with man:sysctl[8] and set it in [.filename]#/boot/loader.conf# or [.filename]#/etc/sysctl.conf#.
+* [[zfs-advanced-tuning-arc_meta_limit]] `_vfs.zfs.arc.meta_limit_` starting with 13.x (`vfs.zfs.arc_meta_limit` for 12.x) - Limit the amount of the <<zfs-term-arc,ARC>> used to store metadata. The default is one fourth of `vfs.zfs.arc.max`. Increasing this value will improve performance if the workload involves operations on a large number of files and directories, or frequent metadata operations, at the cost of less file data fitting in the <<zfs-term-arc,ARC>>. Adjust this value at runtime with man:sysctl[8] in [.filename]#/boot/loader.conf# or [.filename]#/etc/sysctl.conf#.
+* [[zfs-advanced-tuning-arc_min]] `_vfs.zfs.arc.min_` starting with 13.x (`vfs.zfs.arc_min` for 12.x) - Lower size of the <<zfs-term-arc,ARC>>. The default is one half of `vfs.zfs.arc.meta_limit`. Adjust this value to prevent other applications from pressuring out the entire <<zfs-term-arc,ARC>>. Adjust this value at runtime with man:sysctl[8] and in [.filename]#/boot/loader.conf# or [.filename]#/etc/sysctl.conf#.
* [[zfs-advanced-tuning-vdev-cache-size]] `_vfs.zfs.vdev.cache.size_` - A preallocated amount of memory reserved as a cache for each device in the pool. The total amount of memory used will be this value multiplied by the number of devices. Set this value at boot time and in [.filename]#/boot/loader.conf#.
* [[zfs-advanced-tuning-min-auto-ashift]] `_vfs.zfs.min_auto_ashift_` - Lower `ashift` (sector size) used automatically at pool creation time. The value is a power of two. The default value of `9` represents `2^9 = 512`, a sector size of 512 bytes. To avoid _write amplification_ and get the best performance, set this value to the largest sector size used by a device in the pool.
+
@@ -2683,7 +2683,7 @@ A test system with 1 GB of physical memory benefitted from adding these options
....
vm.kmem_size="330M"
vm.kmem_size_max="330M"
-vfs.zfs.arc_max="40M"
+vfs.zfs.arc.max="40M"
vfs.zfs.vdev.cache.size="5M"
....
diff --git a/documentation/content/en/books/handbook/zfs/_index.po b/documentation/content/en/books/handbook/zfs/_index.po
new file mode 100644
index 0000000000..62fcdee9c6
--- /dev/null
+++ b/documentation/content/en/books/handbook/zfs/_index.po
@@ -0,0 +1,5039 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-09-09 18:12-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1
+#, no-wrap
+msgid "ZFS is an advanced file system designed to solve major problems found in previous storage subsystem software"
+msgstr ""
+
+#. type: YAML Front Matter: part
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1
+#, no-wrap
+msgid "Part III. System Administration"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1
+#, no-wrap
+msgid "Chapter 22. The Z File System (ZFS)"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/handbook/zfs/_index.adoc:14
+#, no-wrap
+msgid "The Z File System (ZFS)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:52
+msgid ""
+"ZFS is an advanced file system designed to solve major problems found in "
+"previous storage subsystem software."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:54
+msgid ""
+"Originally developed at Sun(TM), ongoing open source ZFS development has "
+"moved to the http://open-zfs.org[OpenZFS Project]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:56
+msgid "ZFS has three major design goals:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:58
+msgid ""
+"Data integrity: All data includes a <<zfs-term-checksum,checksum>> of the "
+"data. ZFS calculates checksums and writes them along with the data. When "
+"reading that data later, ZFS recalculates the checksums. If the checksums do "
+"not match, meaning detecting one or more data errors, ZFS will attempt to "
+"automatically correct errors when ditto-, mirror-, or parity-blocks are "
+"available."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:59
+msgid ""
+"Pooled storage: adding physical storage devices to a pool, and allocating "
+"storage space from that shared pool. Space is available to all file systems "
+"and volumes, and increases by adding new storage devices to the pool."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:60
+msgid ""
+"Performance: caching mechanisms provide increased performance. <<zfs-term-"
+"arc,ARC>> is an advanced memory-based read cache. ZFS provides a second "
+"level disk-based read cache with <<zfs-term-l2arc,L2ARC>>, and a disk-based "
+"synchronous write cache named <<zfs-term-zil,ZIL>>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:62
+msgid "A complete list of features and terminology is in <<zfs-term>>."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/zfs/_index.adoc:64
+#, no-wrap
+msgid "What Makes ZFS Different"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:77
+msgid ""
+"More than a file system, ZFS is fundamentally different from traditional "
+"file systems. Combining the traditionally separate roles of volume manager "
+"and file system provides ZFS with unique advantages. The file system is now "
+"aware of the underlying structure of the disks. Traditional file systems "
+"could exist on a single disk alone at a time. If there were two disks then "
+"creating two separate file systems was necessary. A traditional hardware "
+"RAID configuration avoided this problem by presenting the operating system "
+"with a single logical disk made up of the space provided by physical disks "
+"on top of which the operating system placed a file system. Even with "
+"software RAID solutions like those provided by GEOM, the UFS file system "
+"living on top of the RAID believes it's dealing with a single device. ZFS' "
+"combination of the volume manager and the file system solves this and allows "
+"the creation of file systems that all share a pool of available storage. "
+"One big advantage of ZFS' awareness of the physical disk layout is that "
+"existing file systems grow automatically when adding extra disks to the "
+"pool. This new space then becomes available to the file systems. ZFS can "
+"also apply different properties to each file system. This makes it useful to "
+"create separate file systems and datasets instead of a single monolithic "
+"file system."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/zfs/_index.adoc:79
+#, no-wrap
+msgid "Quick Start Guide"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:83
+msgid ""
+"FreeBSD can mount ZFS pools and datasets during system initialization. To "
+"enable it, add this line to [.filename]#/etc/rc.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:87
+#, no-wrap
+msgid "zfs_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:90
+msgid "Then start the service:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:94
+#, no-wrap
+msgid "# service zfs start\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:98
+msgid ""
+"The examples in this section assume three SCSI disks with the device names [."
+"filename]#da0#, [.filename]#da1#, and [.filename]#da2#. Users of SATA "
+"hardware should instead use [.filename]#ada# device names."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:100
+#, no-wrap
+msgid "Single Disk Pool"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:103
+msgid "To create a simple, non-redundant pool using a single disk device:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:107
+#, no-wrap
+msgid "# zpool create example /dev/da0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:110
+msgid "To view the new pool, review the output of `df`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:119
+#, no-wrap
+msgid ""
+"# df\n"
+"Filesystem 1K-blocks Used Avail Capacity Mounted on\n"
+"/dev/ad0s1a 2026030 235230 1628718 13% /\n"
+"devfs 1 1 0 100% /dev\n"
+"/dev/ad0s1d 54098308 1032846 48737598 2% /usr\n"
+"example 17547136 0 17547136 0% /example\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:123
+msgid ""
+"This output shows creating and mounting of the `example` pool, and that is "
+"now accessible as a file system. Create files for users to browse:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:134
+#, no-wrap
+msgid ""
+"# cd /example\n"
+"# ls\n"
+"# touch testfile\n"
+"# ls -al\n"
+"total 4\n"
+"drwxr-xr-x 2 root wheel 3 Aug 29 23:15 .\n"
+"drwxr-xr-x 21 root wheel 512 Aug 29 23:12 ..\n"
+"-rw-r--r-- 1 root wheel 0 Aug 29 23:15 testfile\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:138
+msgid ""
+"This pool is not using any advanced ZFS features and properties yet. To "
+"create a dataset on this pool with compression enabled:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:143
+#, no-wrap
+msgid ""
+"# zfs create example/compressed\n"
+"# zfs set compression=gzip example/compressed\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:147
+msgid ""
+"The `example/compressed` dataset is now a ZFS compressed file system. Try "
+"copying some large files to [.filename]#/example/compressed#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:149
+msgid "Disable compression with:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:153
+#, no-wrap
+msgid "# zfs set compression=off example/compressed\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:156
+msgid "To unmount a file system, use `zfs umount` and then verify with `df`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:166
+#, no-wrap
+msgid ""
+"# zfs umount example/compressed\n"
+"# df\n"
+"Filesystem 1K-blocks Used Avail Capacity Mounted on\n"
+"/dev/ad0s1a 2026030 235232 1628716 13% /\n"
+"devfs 1 1 0 100% /dev\n"
+"/dev/ad0s1d 54098308 1032864 48737580 2% /usr\n"
+"example 17547008 0 17547008 0% /example\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:169
+msgid ""
+"To re-mount the file system to make it accessible again, use `zfs mount` and "
+"verify with `df`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:180
+#, no-wrap
+msgid ""
+"# zfs mount example/compressed\n"
+"# df\n"
+"Filesystem 1K-blocks Used Avail Capacity Mounted on\n"
+"/dev/ad0s1a 2026030 235234 1628714 13% /\n"
+"devfs 1 1 0 100% /dev\n"
+"/dev/ad0s1d 54098308 1032864 48737580 2% /usr\n"
+"example 17547008 0 17547008 0% /example\n"
+"example/compressed 17547008 0 17547008 0% /example/compressed\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:183
+msgid "Running `mount` shows the pool and file systems:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:192
+#, no-wrap
+msgid ""
+"# mount\n"
+"/dev/ad0s1a on / (ufs, local)\n"
+"devfs on /dev (devfs, local)\n"
+"/dev/ad0s1d on /usr (ufs, local, soft-updates)\n"
+"example on /example (zfs, local)\n"
+"example/compressed on /example/compressed (zfs, local)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:198
+msgid ""
+"Use ZFS datasets like any file system after creation. Set other available "
+"features on a per-dataset basis when needed. The example below creates a "
+"new file system called `data`. It assumes the file system contains "
+"important files and configures it to store two copies of each data block."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:203
+#, no-wrap
+msgid ""
+"# zfs create example/data\n"
+"# zfs set copies=2 example/data\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:206
+msgid "Use `df` to see the data and space usage:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:217
+#, no-wrap
+msgid ""
+"# df\n"
+"Filesystem 1K-blocks Used Avail Capacity Mounted on\n"
+"/dev/ad0s1a 2026030 235234 1628714 13% /\n"
+"devfs 1 1 0 100% /dev\n"
+"/dev/ad0s1d 54098308 1032864 48737580 2% /usr\n"
+"example 17547008 0 17547008 0% /example\n"
+"example/compressed 17547008 0 17547008 0% /example/compressed\n"
+"example/data 17547008 0 17547008 0% /example/data\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:222
+msgid ""
+"Notice that all file systems in the pool have the same available space. "
+"Using `df` in these examples shows that the file systems use the space they "
+"need and all draw from the same pool. ZFS gets rid of concepts such as "
+"volumes and partitions, and allows several file systems to share the same "
+"pool."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:224
+msgid "To destroy the file systems and then the pool that is no longer needed:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:230
+#, no-wrap
+msgid ""
+"# zfs destroy example/compressed\n"
+"# zfs destroy example/data\n"
+"# zpool destroy example\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:233
+#, no-wrap
+msgid "RAID-Z"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:239
+msgid ""
+"Disks fail. One way to avoid data loss from disk failure is to use RAID. "
+"ZFS supports this feature in its pool design. RAID-Z pools require three or "
+"more disks but provide more usable space than mirrored pools."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:241
+msgid ""
+"This example creates a RAID-Z pool, specifying the disks to add to the pool:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:245
+#, no-wrap
+msgid "# zpool create storage raidz da0 da1 da2\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:253
+msgid ""
+"Sun(TM) recommends that the number of devices used in a RAID-Z configuration "
+"be between three and nine. For environments requiring a single pool "
+"consisting of 10 disks or more, consider breaking it up into smaller RAID-Z "
+"groups. If two disks are available, ZFS mirroring provides redundancy if "
+"required. Refer to man:zpool[8] for more details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:257
+msgid ""
+"The previous example created the `storage` zpool. This example makes a new "
+"file system called `home` in that pool:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:261
+#, no-wrap
+msgid "# zfs create storage/home\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:264
+msgid "Enable compression and store an extra copy of directories and files:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:269
+#, no-wrap
+msgid ""
+"# zfs set copies=2 storage/home\n"
+"# zfs set compression=gzip storage/home\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:272
+msgid ""
+"To make this the new home directory for users, copy the user data to this "
+"directory and create the appropriate symbolic links:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:279
+#, no-wrap
+msgid ""
+"# cp -rp /home/* /storage/home\n"
+"# rm -rf /home /usr/home\n"
+"# ln -s /storage/home /home\n"
+"# ln -s /storage/home /usr/home\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:283
+msgid ""
+"Users data is now stored on the freshly-created [.filename]#/storage/home#. "
+"Test by adding a new user and logging in as that user."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:285
+msgid "Create a file system snapshot to roll back to later:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:289
+#, no-wrap
+msgid "# zfs snapshot storage/home@08-30-08\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:292
+msgid "ZFS creates snapshots of a dataset, not a single directory or file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:295
+msgid ""
+"The `@` character is a delimiter between the file system name or the volume "
+"name. Before deleting an important directory, back up the file system, then "
+"roll back to an earlier snapshot in which the directory still exists:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:299
+#, no-wrap
+msgid "# zfs rollback storage/home@08-30-08\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:303
+msgid ""
+"To list all available snapshots, run `ls` in the file system's [.filename]#."
+"zfs/snapshot# directory. For example, to see the snapshot taken:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:307
+#, no-wrap
+msgid "# ls /storage/home/.zfs/snapshot\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:312
+msgid ""
+"Write a script to take regular snapshots of user data. Over time, snapshots "
+"can use up a lot of disk space. Remove the previous snapshot using the "
+"command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:316
+#, no-wrap
+msgid "# zfs destroy storage/home@08-30-08\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:320
+msgid ""
+"After testing, make [.filename]#/storage/home# the real [.filename]#/home# "
+"with this command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:324
+#, no-wrap
+msgid "# zfs set mountpoint=/home storage/home\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:327
+msgid ""
+"Run `df` and `mount` to confirm that the system now treats the file system "
+"as the real [.filename]#/home#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:343
+#, no-wrap
+msgid ""
+"# mount\n"
+"/dev/ad0s1a on / (ufs, local)\n"
+"devfs on /dev (devfs, local)\n"
+"/dev/ad0s1d on /usr (ufs, local, soft-updates)\n"
+"storage on /storage (zfs, local)\n"
+"storage/home on /home (zfs, local)\n"
+"# df\n"
+"Filesystem 1K-blocks Used Avail Capacity Mounted on\n"
+"/dev/ad0s1a 2026030 235240 1628708 13% /\n"
+"devfs 1 1 0 100% /dev\n"
+"/dev/ad0s1d 54098308 1032826 48737618 2% /usr\n"
+"storage 26320512 0 26320512 0% /storage\n"
+"storage/home 26320512 0 26320512 0% /home\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:347
+msgid ""
+"This completes the RAID-Z configuration. Add daily status updates about the "
+"created file systems to the nightly man:periodic[8] runs by adding this line "
+"to [.filename]#/etc/periodic.conf#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:351
+#, no-wrap
+msgid "daily_status_zfs_enable=\"YES\"\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:354
+#, no-wrap
+msgid "Recovering RAID-Z"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:358
+msgid ""
+"Every software RAID has a method of monitoring its `state`. View the status "
+"of RAID-Z devices using:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:362
+#, no-wrap
+msgid "# zpool status -x\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:365
+msgid ""
+"If all pools are <<zfs-term-online,Online>> and everything is normal, the "
+"message shows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:369
+#, no-wrap
+msgid "all pools are healthy\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:372
+msgid ""
+"If there is a problem, perhaps a disk being in the <<zfs-term-offline,"
+"Offline>> state, the pool state will look like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:384
+#, no-wrap
+msgid ""
+" pool: storage\n"
+" state: DEGRADED\n"
+"status: One or more devices has been taken offline by the administrator.\n"
+"\tSufficient replicas exist for the pool to continue functioning in a\n"
+"\tdegraded state.\n"
+"action: Online the device using 'zpool online' or replace the device with\n"
+"\t'zpool replace'.\n"
+" scrub: none requested\n"
+"config:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:391
+#, no-wrap
+msgid ""
+"\tNAME STATE READ WRITE CKSUM\n"
+"\tstorage DEGRADED 0 0 0\n"
+"\t raidz1 DEGRADED 0 0 0\n"
+"\t da0 ONLINE 0 0 0\n"
+"\t da1 OFFLINE 0 0 0\n"
+"\t da2 ONLINE 0 0 0\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:393
+#: documentation/content/en/books/handbook/zfs/_index.adoc:428
+#: documentation/content/en/books/handbook/zfs/_index.adoc:474
+#: documentation/content/en/books/handbook/zfs/_index.adoc:517
+#: documentation/content/en/books/handbook/zfs/_index.adoc:540
+#: documentation/content/en/books/handbook/zfs/_index.adoc:572
+#: documentation/content/en/books/handbook/zfs/_index.adoc:651
+#: documentation/content/en/books/handbook/zfs/_index.adoc:705
+#: documentation/content/en/books/handbook/zfs/_index.adoc:742
+#: documentation/content/en/books/handbook/zfs/_index.adoc:771
+#: documentation/content/en/books/handbook/zfs/_index.adoc:851
+#: documentation/content/en/books/handbook/zfs/_index.adoc:924
+#: documentation/content/en/books/handbook/zfs/_index.adoc:955
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1055
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1099
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1124
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1144
+#, no-wrap
+msgid "errors: No known data errors\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:396
+msgid ""
+"\"OFFLINE\" shows the administrator took [.filename]#da1# offline using:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:400
+#, no-wrap
+msgid "# zpool offline storage da1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:404
+msgid ""
+"Power down the computer now and replace [.filename]#da1#. Power up the "
+"computer and return [.filename]#da1# to the pool:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:408
+#, no-wrap
+msgid "# zpool replace storage da1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:411
+msgid ""
+"Next, check the status again, this time without `-x` to display all pools:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:419
+#, no-wrap
+msgid ""
+"# zpool status storage\n"
+" pool: storage\n"
+" state: ONLINE\n"
+" scrub: resilver completed with 0 errors on Sat Aug 30 19:44:11 2008\n"
+"config:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:426
+#: documentation/content/en/books/handbook/zfs/_index.adoc:472
+#, no-wrap
+msgid ""
+"\tNAME STATE READ WRITE CKSUM\n"
+"\tstorage ONLINE 0 0 0\n"
+"\t raidz1 ONLINE 0 0 0\n"
+"\t da0 ONLINE 0 0 0\n"
+"\t da1 ONLINE 0 0 0\n"
+"\t da2 ONLINE 0 0 0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:431
+msgid "In this example, everything is normal."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:433
+#, no-wrap
+msgid "Data Verification"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:437
+msgid ""
+"ZFS uses checksums to verify the integrity of stored data. Creating file "
+"systems automatically enables them."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:444
+msgid ""
+"Disabling Checksums is possible but _not_ recommended! Checksums take little "
+"storage space and provide data integrity. Most ZFS features will not work "
+"properly with checksums disabled. Disabling these checksums will not "
+"increase performance noticeably."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:447
+msgid ""
+"Verifying the data checksums (called _scrubbing_) ensures integrity of the "
+"`storage` pool with:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:451
+#, no-wrap
+msgid "# zpool scrub storage\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:457
+msgid ""
+"The duration of a scrub depends on the amount of data stored. Larger "
+"amounts of data will take proportionally longer to verify. Since scrubbing "
+"is I/O intensive, ZFS allows a single scrub to run at a time. After "
+"scrubbing completes, view the status with `zpool status`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:465
+#, no-wrap
+msgid ""
+"# zpool status storage\n"
+" pool: storage\n"
+" state: ONLINE\n"
+" scrub: scrub completed with 0 errors on Sat Jan 26 19:57:37 2013\n"
+"config:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:478
+msgid ""
+"Displaying the completion date of the last scrubbing helps decide when to "
+"start another. Routine scrubs help protect data from silent corruption and "
+"ensure the integrity of the pool."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:480
+msgid "Refer to man:zfs[8] and man:zpool[8] for other ZFS options."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/zfs/_index.adoc:482
+#, no-wrap
+msgid "`zpool` Administration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:487
+msgid ""
+"ZFS administration uses two main utilities. The `zpool` utility controls "
+"the operation of the pool and allows adding, removing, replacing, and "
+"managing disks. The <<zfs-zfs,`zfs`>> utility allows creating, destroying, "
+"and managing datasets, both <<zfs-term-filesystem,file systems>> and <<zfs-"
+"term-volume,volumes>>."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:489
+#, no-wrap
+msgid "Creating and Destroying Storage Pools"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:498
+msgid ""
+"Creating a ZFS storage pool requires permanent decisions, as the pool "
+"structure cannot change after creation. The most important decision is "
+"which types of vdevs to group the physical disks into. See the list of "
+"<<zfs-term-vdev,vdev types>> for details about the possible options. After "
+"creating the pool, most vdev types do not allow adding disks to the vdev. "
+"The exceptions are mirrors, which allow adding new disks to the vdev, and "
+"stripes, which upgrade to mirrors by attaching a new disk to the vdev. "
+"Although adding new vdevs expands a pool, the pool layout cannot change "
+"after pool creation. Instead, back up the data, destroy the pool, and "
+"recreate it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:500
+msgid "Create a simple mirror pool:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:509
+#, no-wrap
+msgid ""
+"# zpool create mypool mirror /dev/ada1 /dev/ada2\n"
+"# zpool status\n"
+" pool: mypool\n"
+" state: ONLINE\n"
+" scan: none requested\n"
+"config:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:515
+#, no-wrap
+msgid ""
+" NAME STATE READ WRITE CKSUM\n"
+" mypool ONLINE 0 0 0\n"
+" mirror-0 ONLINE 0 0 0\n"
+" ada1 ONLINE 0 0 0\n"
+" ada2 ONLINE 0 0 0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:520
+msgid ""
+"To create more than one vdev with a single command, specify groups of disks "
+"separated by the vdev type keyword, `mirror` in this example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:529
+#, no-wrap
+msgid ""
+"# zpool create mypool mirror /dev/ada1 /dev/ada2 mirror /dev/ada3 /dev/ada4\n"
+"# zpool status\n"
+" pool: mypool\n"
+" state: ONLINE\n"
+" scan: none requested\n"
+"config:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:538
+#, no-wrap
+msgid ""
+" NAME STATE READ WRITE CKSUM\n"
+" mypool ONLINE 0 0 0\n"
+" mirror-0 ONLINE 0 0 0\n"
+" ada1 ONLINE 0 0 0\n"
+" ada2 ONLINE 0 0 0\n"
+" mirror-1 ONLINE 0 0 0\n"
+" ada3 ONLINE 0 0 0\n"
+" ada4 ONLINE 0 0 0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:549
+msgid ""
+"Pools can also use partitions rather than whole disks. Putting ZFS in a "
+"separate partition allows the same disk to have other partitions for other "
+"purposes. In particular, it allows adding partitions with bootcode and file "
+"systems needed for booting. This allows booting from disks that are also "
+"members of a pool. ZFS adds no performance penalty on FreeBSD when using a "
+"partition rather than a whole disk. Using partitions also allows the "
+"administrator to _under-provision_ the disks, using less than the full "
+"capacity. If a future replacement disk of the same nominal size as the "
+"original actually has a slightly smaller capacity, the smaller partition "
+"will still fit, using the replacement disk."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:551
+msgid "Create a <<zfs-term-vdev-raidz,RAID-Z2>> pool using partitions:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:560
+#, no-wrap
+msgid ""
+"# zpool create mypool raidz2 /dev/ada0p3 /dev/ada1p3 /dev/ada2p3 /dev/ada3p3 /dev/ada4p3 /dev/ada5p3\n"
+"# zpool status\n"
+" pool: mypool\n"
+" state: ONLINE\n"
+" scan: none requested\n"
+"config:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:570
+#: documentation/content/en/books/handbook/zfs/_index.adoc:769
+#: documentation/content/en/books/handbook/zfs/_index.adoc:953
+#, no-wrap
+msgid ""
+" NAME STATE READ WRITE CKSUM\n"
+" mypool ONLINE 0 0 0\n"
+" raidz2-0 ONLINE 0 0 0\n"
+" ada0p3 ONLINE 0 0 0\n"
+" ada1p3 ONLINE 0 0 0\n"
+" ada2p3 ONLINE 0 0 0\n"
+" ada3p3 ONLINE 0 0 0\n"
+" ada4p3 ONLINE 0 0 0\n"
+" ada5p3 ONLINE 0 0 0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:579
+msgid ""
+"Destroy a pool that is no longer needed to reuse the disks. Destroying a "
+"pool requires unmounting the file systems in that pool first. If any "
+"dataset is in use, the unmount operation fails without destroying the pool. "
+"Force the pool destruction with `-f`. This can cause undefined behavior in "
+"applications which had open files on those datasets."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:581
+#, no-wrap
+msgid "Adding and Removing Devices"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:585
+msgid ""
+"Two ways exist for adding disks to a pool: attaching a disk to an existing "
+"vdev with `zpool attach`, or adding vdevs to the pool with `zpool add`. "
+"Some <<zfs-term-vdev,vdev types>> allow adding disks to the vdev after "
+"creation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:594
+msgid ""
+"A pool created with a single disk lacks redundancy. It can detect "
+"corruption but can not repair it, because there is no other copy of the "
+"data. The <<zfs-term-copies,copies>> property may be able to recover from a "
+"small failure such as a bad sector, but does not provide the same level of "
+"protection as mirroring or RAID-Z. Starting with a pool consisting of a "
+"single disk vdev, use `zpool attach` to add a new disk to the vdev, creating "
+"a mirror. Also use `zpool attach` to add new disks to a mirror group, "
+"increasing redundancy and read performance. When partitioning the disks "
+"used for the pool, replicate the layout of the first disk on to the second. "
+"Use `gpart backup` and `gpart restore` to make this process easier."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:596
+msgid ""
+"Upgrade the single disk (stripe) vdev [.filename]#ada0p3# to a mirror by "
+"attaching [.filename]#ada1p3#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:604
+#: documentation/content/en/books/handbook/zfs/_index.adoc:801
+#, no-wrap
+msgid ""
+"# zpool status\n"
+" pool: mypool\n"
+" state: ONLINE\n"
+" scan: none requested\n"
+"config:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:608
+#, no-wrap
+msgid ""
+" NAME STATE READ WRITE CKSUM\n"
+" mypool ONLINE 0 0 0\n"
+" ada0p3 ONLINE 0 0 0\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:612
+#, no-wrap
+msgid ""
+"errors: No known data errors\n"
+"# zpool attach mypool ada0p3 ada1p3\n"
+"Make sure to wait until resilvering finishes before rebooting.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:614
+#, no-wrap
+msgid "If you boot from pool 'mypool', you may need to update boot code on newly attached disk _ada1p3_.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:616
+#, no-wrap
+msgid "Assuming you use GPT partitioning and _da0_ is your new boot disk you may use the following command:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:630
+#, no-wrap
+msgid ""
+" gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0\n"
+"# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1\n"
+"bootcode written to ada1\n"
+"# zpool status\n"
+" pool: mypool\n"
+" state: ONLINE\n"
+"status: One or more devices is currently being resilvered. The pool will\n"
+" continue to function, possibly in a degraded state.\n"
+"action: Wait for the resilver to complete.\n"
+" scan: resilver in progress since Fri May 30 08:19:19 2014\n"
+" 527M scanned out of 781M at 47.9M/s, 0h0m to go\n"
+" 527M resilvered, 67.53% done\n"
+"config:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:636
+#, no-wrap
+msgid ""
+" NAME STATE READ WRITE CKSUM\n"
+" mypool ONLINE 0 0 0\n"
+" mirror-0 ONLINE 0 0 0\n"
+" ada0p3 ONLINE 0 0 0\n"
+" ada1p3 ONLINE 0 0 0 (resilvering)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:643
+#, no-wrap
+msgid ""
+"errors: No known data errors\n"
+"# zpool status\n"
+" pool: mypool\n"
+" state: ONLINE\n"
+" scan: resilvered 781M in 0h0m with 0 errors on Fri May 30 08:15:58 2014\n"
+"config:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:649
+#: documentation/content/en/books/handbook/zfs/_index.adoc:682
+#: documentation/content/en/books/handbook/zfs/_index.adoc:740
+#: documentation/content/en/books/handbook/zfs/_index.adoc:807
+#, no-wrap
+msgid ""
+" NAME STATE READ WRITE CKSUM\n"
+" mypool ONLINE 0 0 0\n"
+" mirror-0 ONLINE 0 0 0\n"
+" ada0p3 ONLINE 0 0 0\n"
+" ada1p3 ONLINE 0 0 0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:659
+msgid ""
+"When adding disks to the existing vdev is not an option, as for RAID-Z, an "
+"alternative method is to add another vdev to the pool. Adding vdevs "
+"provides higher performance by distributing writes across the vdevs. Each "
+"vdev provides its own redundancy. Mixing vdev types like `mirror` and `RAID-"
+"Z` is possible but discouraged. Adding a non-redundant vdev to a pool "
+"containing mirror or RAID-Z vdevs risks the data on the entire pool. "
+"Distributing writes means a failure of the non-redundant disk will result in "
+"the loss of a fraction of every block written to the pool."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:664
+msgid ""
+"ZFS stripes data across each of the vdevs. For example, with two mirror "
+"vdevs, this is effectively a RAID 10 that stripes writes across two sets of "
+"mirrors. ZFS allocates space so that each vdev reaches 100% full at the "
+"same time. Having vdevs with different amounts of free space will lower "
+"performance, as more data writes go to the less full vdev."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:666
+msgid ""
+"When attaching new devices to a boot pool, remember to update the bootcode."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:668
+msgid ""
+"Attach a second mirror group ([.filename]#ada2p3# and [.filename]#ada3p3#) "
+"to the existing mirror:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:676
+#, no-wrap
+msgid ""
+"# zpool status\n"
+" pool: mypool\n"
+" state: ONLINE\n"
+" scan: resilvered 781M in 0h0m with 0 errors on Fri May 30 08:19:35 2014\n"
+"config:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:694
+#, no-wrap
+msgid ""
+"errors: No known data errors\n"
+"# zpool add mypool mirror ada2p3 ada3p3\n"
+"# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada2\n"
+"bootcode written to ada2\n"
+"# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada3\n"
+"bootcode written to ada3\n"
+"# zpool status\n"
+" pool: mypool\n"
+" state: ONLINE\n"
+" scan: scrub repaired 0 in 0h0m with 0 errors on Fri May 30 08:29:51 2014\n"
+"config:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:703
+#, no-wrap
+msgid ""
+" NAME STATE READ WRITE CKSUM\n"
+" mypool ONLINE 0 0 0\n"
+" mirror-0 ONLINE 0 0 0\n"
+" ada0p3 ONLINE 0 0 0\n"
+" ada1p3 ONLINE 0 0 0\n"
+" mirror-1 ONLINE 0 0 0\n"
+" ada2p3 ONLINE 0 0 0\n"
+" ada3p3 ONLINE 0 0 0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:709
+msgid ""
+"Removing vdevs from a pool is impossible and removal of disks from a mirror "
+"is exclusive if there is enough remaining redundancy. If a single disk "
+"remains in a mirror group, that group ceases to be a mirror and becomes a "
+"stripe, risking the entire pool if that remaining disk fails."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:711
+msgid "Remove a disk from a three-way mirror group:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:719
+#, no-wrap
+msgid ""
+"# zpool status\n"
+" pool: mypool\n"
+" state: ONLINE\n"
+" scan: scrub repaired 0 in 0h0m with 0 errors on Fri May 30 08:29:51 2014\n"
+"config:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:726
+#, no-wrap
+msgid ""
+" NAME STATE READ WRITE CKSUM\n"
+" mypool ONLINE 0 0 0\n"
+" mirror-0 ONLINE 0 0 0\n"
+" ada0p3 ONLINE 0 0 0\n"
+" ada1p3 ONLINE 0 0 0\n"
+" ada2p3 ONLINE 0 0 0\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:734
+#, no-wrap
+msgid ""
+"errors: No known data errors\n"
+"# zpool detach mypool ada2p3\n"
+"# zpool status\n"
+" pool: mypool\n"
+" state: ONLINE\n"
+" scan: scrub repaired 0 in 0h0m with 0 errors on Fri May 30 08:29:51 2014\n"
+"config:\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:745
+#, no-wrap
+msgid "Checking the Status of a Pool"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:751
+msgid ""
+"Pool status is important. If a drive goes offline or ZFS detects a read, "
+"write, or checksum error, the corresponding error count increases. The "
+"`status` output shows the configuration and status of each device in the "
+"pool and the status of the entire pool. Actions to take and details about "
+"the last <<zfs-zpool-scrub,`scrub`>> are also shown."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:759
+#, no-wrap
+msgid ""
+"# zpool status\n"
+" pool: mypool\n"
+" state: ONLINE\n"
+" scan: scrub repaired 0 in 2h25m with 0 errors on Sat Sep 14 04:25:50 2013\n"
+"config:\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:774
+#, no-wrap
+msgid "Clearing Errors"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:780
+msgid ""
+"When detecting an error, ZFS increases the read, write, or checksum error "
+"counts. Clear the error message and reset the counts with `zpool clear "
+"_mypool_`. Clearing the error state can be important for automated scripts "
+"that alert the administrator when the pool encounters an error. Without "
+"clearing old errors, the scripts may fail to report further errors."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:782
+#, no-wrap
+msgid "Replacing a Functioning Device"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:791
+msgid ""
+"It may be desirable to replace one disk with a different disk. When "
+"replacing a working disk, the process keeps the old disk online during the "
+"replacement. The pool never enters a <<zfs-term-degraded,degraded>> state, "
+"reducing the risk of data loss. Running `zpool replace` copies the data "
+"from the old disk to the new one. After the operation completes, ZFS "
+"disconnects the old disk from the vdev. If the new disk is larger than the "
+"old disk, it may be possible to grow the zpool, using the new space. See "
+"<<zfs-zpool-online,Growing a Pool>>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:793
+msgid "Replace a functioning device in the pool:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:811
+#, no-wrap
+msgid ""
+"errors: No known data errors\n"
+"# zpool replace mypool ada1p3 ada2p3\n"
+"Make sure to wait until resilvering finishes before rebooting.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:813
+#, no-wrap
+msgid "When booting from the pool 'zroot', update the boot code on the newly attached disk 'ada2p3'.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:815
+#, no-wrap
+msgid "Assuming GPT partitioning is used and [.filename]#da0# is the new boot disk, use the following command:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:828
+#, no-wrap
+msgid ""
+" gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0\n"
+"# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada2\n"
+"# zpool status\n"
+" pool: mypool\n"
+" state: ONLINE\n"
+"status: One or more devices is currently being resilvered. The pool will\n"
+" continue to function, possibly in a degraded state.\n"
+"action: Wait for the resilver to complete.\n"
+" scan: resilver in progress since Mon Jun 2 14:21:35 2014\n"
+" 604M scanned out of 781M at 46.5M/s, 0h0m to go\n"
+" 604M resilvered, 77.39% done\n"
+"config:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:836
+#, no-wrap
+msgid ""
+" NAME STATE READ WRITE CKSUM\n"
+" mypool ONLINE 0 0 0\n"
+" mirror-0 ONLINE 0 0 0\n"
+" ada0p3 ONLINE 0 0 0\n"
+" replacing-1 ONLINE 0 0 0\n"
+" ada1p3 ONLINE 0 0 0\n"
+" ada2p3 ONLINE 0 0 0 (resilvering)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:843
+#, no-wrap
+msgid ""
+"errors: No known data errors\n"
+"# zpool status\n"
+" pool: mypool\n"
+" state: ONLINE\n"
+" scan: resilvered 781M in 0h0m with 0 errors on Mon Jun 2 14:21:52 2014\n"
+"config:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:849
+#: documentation/content/en/books/handbook/zfs/_index.adoc:922
+#, no-wrap
+msgid ""
+" NAME STATE READ WRITE CKSUM\n"
+" mypool ONLINE 0 0 0\n"
+" mirror-0 ONLINE 0 0 0\n"
+" ada0p3 ONLINE 0 0 0\n"
+" ada2p3 ONLINE 0 0 0\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:854
+#, no-wrap
+msgid "Dealing with Failed Devices"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:862
+msgid ""
+"When a disk in a pool fails, the vdev to which the disk belongs enters the "
+"<<zfs-term-degraded,degraded>> state. The data is still available, but with "
+"reduced performance because ZFS computes missing data from the available "
+"redundancy. To restore the vdev to a fully functional state, replace the "
+"failed physical device. ZFS is then instructed to begin the <<zfs-term-"
+"resilver,resilver>> operation. ZFS recomputes data on the failed device "
+"from available redundancy and writes it to the replacement device. After "
+"completion, the vdev returns to <<zfs-term-online,online>> status."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:865
+msgid ""
+"If the vdev does not have any redundancy, or if devices have failed and "
+"there is not enough redundancy to compensate, the pool enters the <<zfs-term-"
+"faulted,faulted>> state. Unless enough devices can reconnect the pool "
+"becomes inoperative requiring a data restore from backups."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:868
+msgid ""
+"When replacing a failed disk, the name of the failed disk changes to the "
+"GUID of the new disk. A new device name parameter for `zpool replace` is "
+"not required if the replacement device has the same device name."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:870
+msgid "Replace a failed disk using `zpool replace`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:882
+#, no-wrap
+msgid ""
+"# zpool status\n"
+" pool: mypool\n"
+" state: DEGRADED\n"
+"status: One or more devices could not be opened. Sufficient replicas exist for\n"
+" the pool to continue functioning in a degraded state.\n"
+"action: Attach the missing device and online it using 'zpool online'.\n"
+" see: http://illumos.org/msg/ZFS-8000-2Q\n"
+" scan: none requested\n"
+"config:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:888
+#, no-wrap
+msgid ""
+" NAME STATE READ WRITE CKSUM\n"
+" mypool DEGRADED 0 0 0\n"
+" mirror-0 DEGRADED 0 0 0\n"
+" ada0p3 ONLINE 0 0 0\n"
+" 316502962686821739 UNAVAIL 0 0 0 was /dev/ada1p3\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:901
+#, no-wrap
+msgid ""
+"errors: No known data errors\n"
+"# zpool replace mypool 316502962686821739 ada2p3\n"
+"# zpool status\n"
+" pool: mypool\n"
+" state: DEGRADED\n"
+"status: One or more devices is currently being resilvered. The pool will\n"
+" continue to function, possibly in a degraded state.\n"
+"action: Wait for the resilver to complete.\n"
+" scan: resilver in progress since Mon Jun 2 14:52:21 2014\n"
+" 641M scanned out of 781M at 49.3M/s, 0h0m to go\n"
+" 640M resilvered, 82.04% done\n"
+"config:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:909
+#, no-wrap
+msgid ""
+" NAME STATE READ WRITE CKSUM\n"
+" mypool DEGRADED 0 0 0\n"
+" mirror-0 DEGRADED 0 0 0\n"
+" ada0p3 ONLINE 0 0 0\n"
+" replacing-1 UNAVAIL 0 0 0\n"
+" 15732067398082357289 UNAVAIL 0 0 0 was /dev/ada1p3/old\n"
+" ada2p3 ONLINE 0 0 0 (resilvering)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:916
+#, no-wrap
+msgid ""
+"errors: No known data errors\n"
+"# zpool status\n"
+" pool: mypool\n"
+" state: ONLINE\n"
+" scan: resilvered 781M in 0h0m with 0 errors on Mon Jun 2 14:52:38 2014\n"
+"config:\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:927
+#, no-wrap
+msgid "Scrubbing a Pool"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:932
+msgid ""
+"Routinely <<zfs-term-scrub,scrub>> pools, ideally at least once every "
+"month. The `scrub` operation is disk-intensive and will reduce performance "
+"while running. Avoid high-demand periods when scheduling `scrub` or use "
+"<<zfs-advanced-tuning-scrub_delay,`vfs.zfs.scrub_delay`>> to adjust the "
+"relative priority of the `scrub` to keep it from slowing down other "
+"workloads."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:943
+#, no-wrap
+msgid ""
+"# zpool scrub mypool\n"
+"# zpool status\n"
+" pool: mypool\n"
+" state: ONLINE\n"
+" scan: scrub in progress since Wed Feb 19 20:52:54 2014\n"
+" 116G scanned out of 8.60T at 649M/s, 3h48m to go\n"
+" 0 repaired, 1.32% done\n"
+"config:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:958
+msgid "To cancel a scrub operation if needed, run `zpool scrub -s _mypool_`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:960
+#, no-wrap
+msgid "Self-Healing"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:971
+msgid ""
+"The checksums stored with data blocks enable the file system to _self-"
+"heal_. This feature will automatically repair data whose checksum does not "
+"match the one recorded on another device that is part of the storage pool. "
+"For example, a mirror configuration with two disks where one drive is "
+"starting to malfunction and cannot properly store the data any more. This "
+"is worse when the data was not accessed for a long time, as with long term "
+"archive storage. Traditional file systems need to run commands that check "
+"and repair the data like man:fsck[8]. These commands take time, and in "
+"severe cases, an administrator has to decide which repair operation to "
+"perform. When ZFS detects a data block with a mismatched checksum, it tries "
+"to read the data from the mirror disk. If that disk can provide the correct "
+"data, ZFS will give that to the application and correct the data on the disk "
+"with the wrong checksum. This happens without any interaction from a system "
+"administrator during normal pool operation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:973
+msgid ""
+"The next example shows this self-healing behavior by creating a mirrored "
+"pool of disks [.filename]#/dev/ada0# and [.filename]#/dev/ada1#."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:982
+#, no-wrap
+msgid ""
+"# zpool create healer mirror /dev/ada0 /dev/ada1\n"
+"# zpool status healer\n"
+" pool: healer\n"
+" state: ONLINE\n"
+" scan: none requested\n"
+"config:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:988
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1142
+#, no-wrap
+msgid ""
+" NAME STATE READ WRITE CKSUM\n"
+" healer ONLINE 0 0 0\n"
+" mirror-0 ONLINE 0 0 0\n"
+" ada0 ONLINE 0 0 0\n"
+" ada1 ONLINE 0 0 0\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:993
+#, no-wrap
+msgid ""
+"errors: No known data errors\n"
+"# zpool list\n"
+"NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT\n"
+"healer 960M 92.5K 960M - - 0% 0% 1.00x ONLINE -\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:996
+msgid ""
+"Copy some important data to the pool to protect from data errors using the "
+"self-healing feature and create a checksum of the pool for later comparison."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1006
+#, no-wrap
+msgid ""
+"# cp /some/important/data /healer\n"
+"# zfs list\n"
+"NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT\n"
+"healer 960M 67.7M 892M 7% 1.00x ONLINE -\n"
+"# sha1 /healer > checksum.txt\n"
+"# cat checksum.txt\n"
+"SHA1 (/healer) = 2753eff56d77d9a536ece6694bf0a82740344d1f\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1010
+msgid ""
+"Simulate data corruption by writing random data to the beginning of one of "
+"the disks in the mirror. To keep ZFS from healing the data when detected, "
+"export the pool before the corruption and import it again afterwards."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1018
+msgid ""
+"This is a dangerous operation that can destroy vital data, shown here for "
+"demonstration alone. *Do not try* it during normal operation of a storage "
+"pool. Nor should this intentional corruption example run on any disk with a "
+"file system not using ZFS on another partition in it. Do not use any other "
+"disk device names other than the ones that are part of the pool. Ensure "
+"proper backups of the pool exist and test them before running the command!"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1028
+#, no-wrap
+msgid ""
+"# zpool export healer\n"
+"# dd if=/dev/random of=/dev/ada1 bs=1m count=200\n"
+"200+0 records in\n"
+"200+0 records out\n"
+"209715200 bytes transferred in 62.992162 secs (3329227 bytes/sec)\n"
+"# zpool import healer\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1034
+msgid ""
+"The pool status shows that one device has experienced an error. Note that "
+"applications reading data from the pool did not receive any incorrect data. "
+"ZFS provided data from the [.filename]#ada0# device with the correct "
+"checksums. To find the device with the wrong checksum, look for one whose "
+"`CKSUM` column contains a nonzero value."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1047
+#, no-wrap
+msgid ""
+"# zpool status healer\n"
+" pool: healer\n"
+" state: ONLINE\n"
+" status: One or more devices has experienced an unrecoverable error. An\n"
+" attempt was made to correct the error. Applications are unaffected.\n"
+" action: Determine if the device needs to be replaced, and clear the errors\n"
+" using 'zpool clear' or replace the device with 'zpool replace'.\n"
+" see: http://illumos.org/msg/ZFS-8000-4J\n"
+" scan: none requested\n"
+" config:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1053
+#, no-wrap
+msgid ""
+" NAME STATE READ WRITE CKSUM\n"
+" healer ONLINE 0 0 0\n"
+" mirror-0 ONLINE 0 0 0\n"
+" ada0 ONLINE 0 0 0\n"
+" ada1 ONLINE 0 0 1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1059
+msgid ""
+"ZFS detected the error and handled it by using the redundancy present in the "
+"unaffected [.filename]#ada0# mirror disk. A checksum comparison with the "
+"original one will reveal whether the pool is consistent again."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1066
+#, no-wrap
+msgid ""
+"# sha1 /healer >> checksum.txt\n"
+"# cat checksum.txt\n"
+"SHA1 (/healer) = 2753eff56d77d9a536ece6694bf0a82740344d1f\n"
+"SHA1 (/healer) = 2753eff56d77d9a536ece6694bf0a82740344d1f\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1075
+msgid ""
+"Generate checksums before and after the intentional tampering while the pool "
+"data still matches. This shows how ZFS is capable of detecting and "
+"correcting any errors automatically when the checksums differ. Note this is "
+"possible with enough redundancy present in the pool. A pool consisting of a "
+"single device has no self-healing capabilities. That is also the reason why "
+"checksums are so important in ZFS; do not disable them for any reason. ZFS "
+"requires no man:fsck[8] or similar file system consistency check program to "
+"detect and correct this, and keeps the pool available while there is a "
+"problem. A scrub operation is now required to overwrite the corrupted data "
+"on [.filename]#ada1#."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1091
+#, no-wrap
+msgid ""
+"# zpool scrub healer\n"
+"# zpool status healer\n"
+" pool: healer\n"
+" state: ONLINE\n"
+"status: One or more devices has experienced an unrecoverable error. An\n"
+" attempt was made to correct the error. Applications are unaffected.\n"
+"action: Determine if the device needs to be replaced, and clear the errors\n"
+" using 'zpool clear' or replace the device with 'zpool replace'.\n"
+" see: http://illumos.org/msg/ZFS-8000-4J\n"
+" scan: scrub in progress since Mon Dec 10 12:23:30 2012\n"
+" 10.4M scanned out of 67.0M at 267K/s, 0h3m to go\n"
+" 9.63M repaired, 15.56% done\n"
+"config:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1097
+#, no-wrap
+msgid ""
+" NAME STATE READ WRITE CKSUM\n"
+" healer ONLINE 0 0 0\n"
+" mirror-0 ONLINE 0 0 0\n"
+" ada0 ONLINE 0 0 0\n"
+" ada1 ONLINE 0 0 627 (repairing)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1103
+msgid ""
+"The scrub operation reads data from [.filename]#ada0# and rewrites any data "
+"with a wrong checksum on [.filename]#ada1#, shown by the `(repairing)` "
+"output from `zpool status`. After the operation is complete, the pool "
+"status changes to:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1116
+#, no-wrap
+msgid ""
+"# zpool status healer\n"
+" pool: healer\n"
+" state: ONLINE\n"
+"status: One or more devices has experienced an unrecoverable error. An\n"
+" attempt was made to correct the error. Applications are unaffected.\n"
+"action: Determine if the device needs to be replaced, and clear the errors\n"
+" using 'zpool clear' or replace the device with 'zpool replace'.\n"
+" see: http://illumos.org/msg/ZFS-8000-4J\n"
+" scan: scrub repaired 66.5M in 0h2m with 0 errors on Mon Dec 10 12:26:25 2012\n"
+"config:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1122
+#, no-wrap
+msgid ""
+" NAME STATE READ WRITE CKSUM\n"
+" healer ONLINE 0 0 0\n"
+" mirror-0 ONLINE 0 0 0\n"
+" ada0 ONLINE 0 0 0\n"
+" ada1 ONLINE 0 0 2.72K\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1127
+msgid ""
+"After the scrubbing operation completes with all the data synchronized from "
+"[.filename]#ada0# to [.filename]#ada1#, <<zfs-zpool-clear,clear>> the error "
+"messages from the pool status by running `zpool clear`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1136
+#, no-wrap
+msgid ""
+"# zpool clear healer\n"
+"# zpool status healer\n"
+" pool: healer\n"
+" state: ONLINE\n"
+" scan: scrub repaired 66.5M in 0h2m with 0 errors on Mon Dec 10 12:26:25 2012\n"
+"config:\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1147
+msgid ""
+"The pool is now back to a fully working state, with all error counts now "
+"zero."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1149
+#, no-wrap
+msgid "Growing a Pool"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1158
+msgid ""
+"The smallest device in each vdev limits the usable size of a redundant "
+"pool. Replace the smallest device with a larger device. After completing a "
+"<<zfs-zpool-replace,replace>> or <<zfs-term-resilver,resilver>> operation, "
+"the pool can grow to use the capacity of the new device. For example, "
+"consider a mirror of a 1 TB drive and a 2 TB drive. The usable space is 1 "
+"TB. When replacing the 1 TB drive with another 2 TB drive, the resilvering "
+"process copies the existing data onto the new drive. As both of the devices "
+"now have 2 TB capacity, the mirror's available space grows to 2 TB."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1161
+msgid ""
+"Start expansion by using `zpool online -e` on each device. After expanding "
+"all devices, the extra space becomes available to the pool."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1163
+#, no-wrap
+msgid "Importing and Exporting Pools"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1171
+msgid ""
+"_Export_ pools before moving them to another system. ZFS unmounts all "
+"datasets, marking each device as exported but still locked to prevent use by "
+"other disks. This allows pools to be _imported_ on other machines, other "
+"operating systems that support ZFS, and even different hardware "
+"architectures (with some caveats, see man:zpool[8]). When a dataset has "
+"open files, use `zpool export -f` to force exporting the pool. Use this "
+"with caution. The datasets are forcibly unmounted, potentially resulting in "
+"unexpected behavior by the applications which had open files on those "
+"datasets."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1173
+msgid "Export a pool that is not in use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1177
+#, no-wrap
+msgid "# zpool export mypool\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1185
+msgid ""
+"Importing a pool automatically mounts the datasets. If this is undesired "
+"behavior, use `zpool import -N` to prevent it. `zpool import -o` sets "
+"temporary properties for this specific import. `zpool import altroot=` "
+"allows importing a pool with a base mount point instead of the root of the "
+"file system. If the pool was last used on a different system and was not "
+"properly exported, force the import using `zpool import -f`. `zpool import -"
+"a` imports all pools that do not appear to be in use by another system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1187
+msgid "List all available pools for import:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1196
+#, no-wrap
+msgid ""
+"# zpool import\n"
+" pool: mypool\n"
+" id: 9930174748043525076\n"
+" state: ONLINE\n"
+" action: The pool can be imported using its name or numeric identifier.\n"
+" config:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1199
+#, no-wrap
+msgid ""
+" mypool ONLINE\n"
+" ada2p3 ONLINE\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1202
+msgid "Import the pool with an alternative root directory:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1210
+#, no-wrap
+msgid ""
+"# zpool import -o altroot=/mnt mypool\n"
+"# zfs list\n"
+"zfs list\n"
+"NAME USED AVAIL REFER MOUNTPOINT\n"
+"mypool 110K 47.0G 31K /mnt/mypool\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1213
+#, no-wrap
+msgid "Upgrading a Storage Pool"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1219
+msgid ""
+"After upgrading FreeBSD, or if importing a pool from a system using an older "
+"version, manually upgrade the pool to the latest ZFS version to support "
+"newer features. Consider whether the pool may ever need importing on an "
+"older system before upgrading. Upgrading is a one-way process. Upgrade "
+"older pools is possible, but downgrading pools with newer features is not."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1221
+msgid "Upgrade a v28 pool to support `Feature Flags`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1234
+#, no-wrap
+msgid ""
+"# zpool status\n"
+" pool: mypool\n"
+" state: ONLINE\n"
+"status: The pool is formatted using a legacy on-disk format. The pool can\n"
+" still be used, but some features are unavailable.\n"
+"action: Upgrade the pool using 'zpool upgrade'. Once this is done, the\n"
+" pool will no longer be accessible on software that does not support feat\n"
+" flags.\n"
+" scan: none requested\n"
+"config:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1240
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1288
+#, no-wrap
+msgid ""
+" NAME STATE READ WRITE CKSUM\n"
+" mypool ONLINE 0 0 0\n"
+" mirror-0 ONLINE 0 0 0\n"
+"\t ada0 ONLINE 0 0 0\n"
+"\t ada1 ONLINE 0 0 0\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1244
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1292
+#, no-wrap
+msgid ""
+"errors: No known data errors\n"
+"# zpool upgrade\n"
+"This system supports ZFS pool feature flags.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1247
+#, no-wrap
+msgid ""
+"The following pools are formatted with legacy version numbers and are upgraded to use feature flags.\n"
+"After being upgraded, these pools will no longer be accessible by software that does not support feature flags.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1251
+#, no-wrap
+msgid ""
+"VER POOL\n"
+"--- ------------\n"
+"28 mypool\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1256
+#, no-wrap
+msgid ""
+"Use 'zpool upgrade -v' for a list of available legacy versions.\n"
+"Every feature flags pool has all supported features enabled.\n"
+"# zpool upgrade mypool\n"
+"This system supports ZFS pool feature flags.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1263
+#, no-wrap
+msgid ""
+"Successfully upgraded 'mypool' from version 28 to feature flags.\n"
+"Enabled the following features on 'mypool':\n"
+" async_destroy\n"
+" empty_bpobj\n"
+" lz4_compress\n"
+" multi_vdev_crash_dump\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1267
+msgid ""
+"The newer features of ZFS will not be available until `zpool upgrade` has "
+"completed. Use `zpool upgrade -v` to see what new features the upgrade "
+"provides, as well as which features are already supported."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1269
+msgid "Upgrade a pool to support new feature flags:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1282
+#, no-wrap
+msgid ""
+"# zpool status\n"
+" pool: mypool\n"
+" state: ONLINE\n"
+"status: Some supported features are not enabled on the pool. The pool can\n"
+" still be used, but some features are unavailable.\n"
+"action: Enable all features using 'zpool upgrade'. Once this is done,\n"
+" the pool may no longer be accessible by software that does not support\n"
+" the features. See zpool-features(7) for details.\n"
+" scan: none requested\n"
+"config:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1294
+#, no-wrap
+msgid "All pools are formatted using feature flags.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1298
+#, no-wrap
+msgid ""
+"Some supported features are not enabled on the following pools. Once a\n"
+"feature is enabled the pool may become incompatible with software\n"
+"that does not support the feature. See zpool-features(7) for details.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1311
+#, no-wrap
+msgid ""
+"POOL FEATURE\n"
+"---------------\n"
+"zstore\n"
+" multi_vdev_crash_dump\n"
+" spacemap_histogram\n"
+" enabled_txg\n"
+" hole_birth\n"
+" extensible_dataset\n"
+" bookmarks\n"
+" filesystem_limits\n"
+"# zpool upgrade mypool\n"
+"This system supports ZFS pool feature flags.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1319
+#, no-wrap
+msgid ""
+"Enabled the following features on 'mypool':\n"
+" spacemap_histogram\n"
+" enabled_txg\n"
+" hole_birth\n"
+" extensible_dataset\n"
+" bookmarks\n"
+" filesystem_limits\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1326
+msgid ""
+"Update the boot code on systems that boot from a pool to support the new "
+"pool version. Use `gpart bootcode` on the partition that contains the boot "
+"code. Two types of bootcode are available, depending on way the system "
+"boots: GPT (the most common option) and EFI (for more modern systems)."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1328
+msgid "For legacy boot using GPT, use the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1332
+#, no-wrap
+msgid "# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1335
+msgid "For systems using EFI to boot, execute the following command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1339
+#, no-wrap
+msgid "# gpart bootcode -p /boot/boot1.efifat -i 1 ada1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1343
+msgid ""
+"Apply the bootcode to all bootable disks in the pool. See man:gpart[8] for "
+"more information."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1346
+#, no-wrap
+msgid "Displaying Recorded Pool History"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1352
+msgid ""
+"ZFS records commands that change the pool, including creating datasets, "
+"changing properties, or replacing a disk. Reviewing history about a pool's "
+"creation is useful, as is checking which user performed a specific action "
+"and when. History is not kept in a log file, but is part of the pool "
+"itself. The command to review this history is aptly named `zpool history`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1361
+#, no-wrap
+msgid ""
+"# zpool history\n"
+"History for 'tank':\n"
+"2013-02-26.23:02:35 zpool create tank mirror /dev/ada0 /dev/ada1\n"
+"2013-02-27.18:50:58 zfs set atime=off tank\n"
+"2013-02-27.18:51:09 zfs set checksum=fletcher4 tank\n"
+"2013-02-27.18:51:18 zfs create tank/backup\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1366
+msgid ""
+"The output shows `zpool` and `zfs` commands altering the pool in some way "
+"along with a timestamp. Commands like `zfs list` are not included. When "
+"specifying no pool name, ZFS displays history of all pools."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1369
+msgid ""
+"`zpool history` can show even more information when providing the options `-"
+"i` or `-l`. `-i` displays user-initiated events as well as internally "
+"logged ZFS events."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1381
+#, no-wrap
+msgid ""
+"# zpool history -i\n"
+"History for 'tank':\n"
+"2013-02-26.23:02:35 [internal pool create txg:5] pool spa 28; zfs spa 28; zpl 5;uts 9.1-RELEASE 901000 amd64\n"
+"2013-02-27.18:50:53 [internal property set txg:50] atime=0 dataset = 21\n"
+"2013-02-27.18:50:58 zfs set atime=off tank\n"
+"2013-02-27.18:51:04 [internal property set txg:53] checksum=7 dataset = 21\n"
+"2013-02-27.18:51:09 zfs set checksum=fletcher4 tank\n"
+"2013-02-27.18:51:13 [internal create txg:55] dataset = 39\n"
+"2013-02-27.18:51:18 zfs create tank/backup\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1385
+msgid ""
+"Show more details by adding `-l`. Showing history records in a long format, "
+"including information like the name of the user who issued the command and "
+"the hostname on which the change happened."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1394
+#, no-wrap
+msgid ""
+"# zpool history -l\n"
+"History for 'tank':\n"
+"2013-02-26.23:02:35 zpool create tank mirror /dev/ada0 /dev/ada1 [user 0 (root) on :global]\n"
+"2013-02-27.18:50:58 zfs set atime=off tank [user 0 (root) on myzfsbox:global]\n"
+"2013-02-27.18:51:09 zfs set checksum=fletcher4 tank [user 0 (root) on myzfsbox:global]\n"
+"2013-02-27.18:51:18 zfs create tank/backup [user 0 (root) on myzfsbox:global]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1400
+msgid ""
+"The output shows that the `root` user created the mirrored pool with disks [."
+"filename]#/dev/ada0# and [.filename]#/dev/ada1#. The hostname `myzfsbox` is "
+"also shown in the commands after the pool's creation. The hostname display "
+"becomes important when exporting the pool from one system and importing on "
+"another. It's possible to distinguish the commands issued on the other "
+"system by the hostname recorded for each command."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1403
+msgid ""
+"Combine both options to `zpool history` to give the most detailed "
+"information possible for any given pool. Pool history provides valuable "
+"information when tracking down the actions performed or when needing more "
+"detailed output for debugging."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1405
+#, no-wrap
+msgid "Performance Monitoring"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1412
+msgid ""
+"A built-in monitoring system can display pool I/O statistics in real time. "
+"It shows the amount of free and used space on the pool, read and write "
+"operations performed per second, and I/O bandwidth used. By default, ZFS "
+"monitors and displays all pools in the system. Provide a pool name to limit "
+"monitoring to that pool. A basic example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1420
+#, no-wrap
+msgid ""
+"# zpool iostat\n"
+" capacity operations bandwidth\n"
+"pool alloc free read write read write\n"
+"---------- ----- ----- ----- ----- ----- -----\n"
+"data 288G 1.53T 2 11 11.3K 57.1K\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1426
+msgid ""
+"To continuously see I/O activity, specify a number as the last parameter, "
+"indicating an interval in seconds to wait between updates. The next "
+"statistic line prints after each interval. Press kbd:[Ctrl+C] to stop this "
+"continuous monitoring. Give a second number on the command line after the "
+"interval to specify the total number of statistics to display."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1431
+msgid ""
+"Display even more detailed I/O statistics with `-v`. Each device in the "
+"pool appears with a statistics line. This is useful for seeing read and "
+"write operations performed on each device, and can help determine if any "
+"individual device is slowing down the pool. This example shows a mirrored "
+"pool with two devices:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1443
+#, no-wrap
+msgid ""
+"# zpool iostat -v \n"
+" capacity operations bandwidth\n"
+"pool alloc free read write read write\n"
+"----------------------- ----- ----- ----- ----- ----- -----\n"
+"data 288G 1.53T 2 12 9.23K 61.5K\n"
+" mirror 288G 1.53T 2 12 9.23K 61.5K\n"
+" ada1 - - 0 4 5.61K 61.7K\n"
+" ada2 - - 1 4 5.04K 61.7K\n"
+"----------------------- ----- ----- ----- ----- ----- -----\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1446
+#, no-wrap
+msgid "Splitting a Storage Pool"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1453
+msgid ""
+"ZFS can split a pool consisting of one or more mirror vdevs into two pools. "
+"Unless otherwise specified, ZFS detaches the last member of each mirror and "
+"creates a new pool containing the same data. Be sure to make a dry run of "
+"the operation with `-n` first. This displays the details of the requested "
+"operation without actually performing it. This helps confirm that the "
+"operation will do what the user intends."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1455
+#, no-wrap
+msgid "`zfs` Administration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1459
+msgid ""
+"The `zfs` utility can create, destroy, and manage all existing ZFS datasets "
+"within a pool. To manage the pool itself, use <<zfs-zpool,`zpool`>>."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1461
+#, no-wrap
+msgid "Creating and Destroying Datasets"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1471
+msgid ""
+"Unlike traditional disks and volume managers, space in ZFS is _not_ "
+"preallocated. With traditional file systems, after partitioning and "
+"assigning the space, there is no way to add a new file system without adding "
+"a new disk. With ZFS, creating new file systems is possible at any time. "
+"Each <<zfs-term-dataset,_dataset_>> has properties including features like "
+"compression, deduplication, caching, and quotas, as well as other useful "
+"properties like readonly, case sensitivity, network file sharing, and a "
+"mount point. Nesting datasets within each other is possible and child "
+"datasets will inherit properties from their ancestors. <<zfs-zfs-allow,"
+"Delegate>>, <<zfs-zfs-send,replicate>>, <<zfs-zfs-snapshot,snapshot>>, <<zfs-"
+"zfs-jail,jail>> allows administering and destroying each dataset as a unit. "
+"Creating a separate dataset for each different type or set of files has "
+"advantages. The drawbacks to having a large number of datasets are that "
+"some commands like `zfs list` will be slower, and that mounting of hundreds "
+"or even thousands of datasets will slow the FreeBSD boot process."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1473
+msgid ""
+"Create a new dataset and enable <<zfs-term-compression-lz4,LZ4 compression>> "
+"on it:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1508
+#, no-wrap
+msgid ""
+"# zfs list\n"
+"NAME USED AVAIL REFER MOUNTPOINT\n"
+"mypool 781M 93.2G 144K none\n"
+"mypool/ROOT 777M 93.2G 144K none\n"
+"mypool/ROOT/default 777M 93.2G 777M /\n"
+"mypool/tmp 176K 93.2G 176K /tmp\n"
+"mypool/usr 616K 93.2G 144K /usr\n"
+"mypool/usr/home 184K 93.2G 184K /usr/home\n"
+"mypool/usr/ports 144K 93.2G 144K /usr/ports\n"
+"mypool/usr/src 144K 93.2G 144K /usr/src\n"
+"mypool/var 1.20M 93.2G 608K /var\n"
+"mypool/var/crash 148K 93.2G 148K /var/crash\n"
+"mypool/var/log 178K 93.2G 178K /var/log\n"
+"mypool/var/mail 144K 93.2G 144K /var/mail\n"
+"mypool/var/tmp 152K 93.2G 152K /var/tmp\n"
+"# zfs create -o compress=lz4 mypool/usr/mydataset\n"
+"# zfs list\n"
+"NAME USED AVAIL REFER MOUNTPOINT\n"
+"mypool 781M 93.2G 144K none\n"
+"mypool/ROOT 777M 93.2G 144K none\n"
+"mypool/ROOT/default 777M 93.2G 777M /\n"
+"mypool/tmp 176K 93.2G 176K /tmp\n"
+"mypool/usr 704K 93.2G 144K /usr\n"
+"mypool/usr/home 184K 93.2G 184K /usr/home\n"
+"mypool/usr/mydataset 87.5K 93.2G 87.5K /usr/mydataset\n"
+"mypool/usr/ports 144K 93.2G 144K /usr/ports\n"
+"mypool/usr/src 144K 93.2G 144K /usr/src\n"
+"mypool/var 1.20M 93.2G 610K /var\n"
+"mypool/var/crash 148K 93.2G 148K /var/crash\n"
+"mypool/var/log 178K 93.2G 178K /var/log\n"
+"mypool/var/mail 144K 93.2G 144K /var/mail\n"
+"mypool/var/tmp 152K 93.2G 152K /var/tmp\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1511
+msgid ""
+"Destroying a dataset is much quicker than deleting the files on the dataset, "
+"as it does not involve scanning the files and updating the corresponding "
+"metadata."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1513
+msgid "Destroy the created dataset:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1548
+#, no-wrap
+msgid ""
+"# zfs list\n"
+"NAME USED AVAIL REFER MOUNTPOINT\n"
+"mypool 880M 93.1G 144K none\n"
+"mypool/ROOT 777M 93.1G 144K none\n"
+"mypool/ROOT/default 777M 93.1G 777M /\n"
+"mypool/tmp 176K 93.1G 176K /tmp\n"
+"mypool/usr 101M 93.1G 144K /usr\n"
+"mypool/usr/home 184K 93.1G 184K /usr/home\n"
+"mypool/usr/mydataset 100M 93.1G 100M /usr/mydataset\n"
+"mypool/usr/ports 144K 93.1G 144K /usr/ports\n"
+"mypool/usr/src 144K 93.1G 144K /usr/src\n"
+"mypool/var 1.20M 93.1G 610K /var\n"
+"mypool/var/crash 148K 93.1G 148K /var/crash\n"
+"mypool/var/log 178K 93.1G 178K /var/log\n"
+"mypool/var/mail 144K 93.1G 144K /var/mail\n"
+"mypool/var/tmp 152K 93.1G 152K /var/tmp\n"
+"# zfs destroy mypool/usr/mydataset\n"
+"# zfs list\n"
+"NAME USED AVAIL REFER MOUNTPOINT\n"
+"mypool 781M 93.2G 144K none\n"
+"mypool/ROOT 777M 93.2G 144K none\n"
+"mypool/ROOT/default 777M 93.2G 777M /\n"
+"mypool/tmp 176K 93.2G 176K /tmp\n"
+"mypool/usr 616K 93.2G 144K /usr\n"
+"mypool/usr/home 184K 93.2G 184K /usr/home\n"
+"mypool/usr/ports 144K 93.2G 144K /usr/ports\n"
+"mypool/usr/src 144K 93.2G 144K /usr/src\n"
+"mypool/var 1.21M 93.2G 612K /var\n"
+"mypool/var/crash 148K 93.2G 148K /var/crash\n"
+"mypool/var/log 178K 93.2G 178K /var/log\n"
+"mypool/var/mail 144K 93.2G 144K /var/mail\n"
+"mypool/var/tmp 152K 93.2G 152K /var/tmp\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1556
+msgid ""
+"In modern versions of ZFS, `zfs destroy` is asynchronous, and the free space "
+"might take minutes to appear in the pool. Use `zpool get freeing "
+"_poolname_` to see the `freeing` property, that shows which datasets are "
+"having their blocks freed in the background. If there are child datasets, "
+"like <<zfs-term-snapshot,snapshots>> or other datasets, destroying the "
+"parent is impossible. To destroy a dataset and its children, use `-r` to "
+"recursively destroy the dataset and its children. Use `-n -v` to list "
+"datasets and snapshots destroyed by this operation, without actually destroy "
+"anything. Space reclaimed by destroying snapshots is also shown."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1558
+#, no-wrap
+msgid "Creating and Destroying Volumes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1563
+msgid ""
+"A volume is a special dataset type. Rather than mounting as a file system, "
+"expose it as a block device under [.filename]#/dev/zvol/poolname/dataset#. "
+"This allows using the volume for other file systems, to back the disks of a "
+"virtual machine, or to make it available to other network hosts using "
+"protocols like iSCSI or HAST."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1568
+msgid ""
+"Format a volume with any file system or without a file system to store raw "
+"data. To the user, a volume appears to be a regular disk. Putting ordinary "
+"file systems on these _zvols_ provides features that ordinary disks or file "
+"systems do not have. For example, using the compression property on a 250 "
+"MB volume allows creation of a compressed FAT file system."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1582
+#, no-wrap
+msgid ""
+"# zfs create -V 250m -o compression=on tank/fat32\n"
+"# zfs list tank\n"
+"NAME USED AVAIL REFER MOUNTPOINT\n"
+"tank 258M 670M 31K /tank\n"
+"# newfs_msdos -F32 /dev/zvol/tank/fat32\n"
+"# mount -t msdosfs /dev/zvol/tank/fat32 /mnt\n"
+"# df -h /mnt | grep fat32\n"
+"Filesystem Size Used Avail Capacity Mounted on\n"
+"/dev/zvol/tank/fat32 249M 24k 249M 0% /mnt\n"
+"# mount | grep fat32\n"
+"/dev/zvol/tank/fat32 on /mnt (msdosfs, local)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1586
+msgid ""
+"Destroying a volume is much the same as destroying a regular file system "
+"dataset. The operation is nearly instantaneous, but it may take minutes to "
+"reclaim the free space in the background."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1588
+#, no-wrap
+msgid "Renaming a Dataset"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1595
+msgid ""
+"To change the name of a dataset, use `zfs rename`. To change the parent of "
+"a dataset, use this command as well. Renaming a dataset to have a different "
+"parent dataset will change the value of those properties inherited from the "
+"parent dataset. Renaming a dataset unmounts then remounts it in the new "
+"location (inherited from the new parent dataset). To prevent this behavior, "
+"use `-u`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1597
+msgid "Rename a dataset and move it to be under a different parent dataset:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1633
+#, no-wrap
+msgid ""
+"# zfs list\n"
+"NAME USED AVAIL REFER MOUNTPOINT\n"
+"mypool 780M 93.2G 144K none\n"
+"mypool/ROOT 777M 93.2G 144K none\n"
+"mypool/ROOT/default 777M 93.2G 777M /\n"
+"mypool/tmp 176K 93.2G 176K /tmp\n"
+"mypool/usr 704K 93.2G 144K /usr\n"
+"mypool/usr/home 184K 93.2G 184K /usr/home\n"
+"mypool/usr/mydataset 87.5K 93.2G 87.5K /usr/mydataset\n"
+"mypool/usr/ports 144K 93.2G 144K /usr/ports\n"
+"mypool/usr/src 144K 93.2G 144K /usr/src\n"
+"mypool/var 1.21M 93.2G 614K /var\n"
+"mypool/var/crash 148K 93.2G 148K /var/crash\n"
+"mypool/var/log 178K 93.2G 178K /var/log\n"
+"mypool/var/mail 144K 93.2G 144K /var/mail\n"
+"mypool/var/tmp 152K 93.2G 152K /var/tmp\n"
+"# zfs rename mypool/usr/mydataset mypool/var/newname\n"
+"# zfs list\n"
+"NAME USED AVAIL REFER MOUNTPOINT\n"
+"mypool 780M 93.2G 144K none\n"
+"mypool/ROOT 777M 93.2G 144K none\n"
+"mypool/ROOT/default 777M 93.2G 777M /\n"
+"mypool/tmp 176K 93.2G 176K /tmp\n"
+"mypool/usr 616K 93.2G 144K /usr\n"
+"mypool/usr/home 184K 93.2G 184K /usr/home\n"
+"mypool/usr/ports 144K 93.2G 144K /usr/ports\n"
+"mypool/usr/src 144K 93.2G 144K /usr/src\n"
+"mypool/var 1.29M 93.2G 614K /var\n"
+"mypool/var/crash 148K 93.2G 148K /var/crash\n"
+"mypool/var/log 178K 93.2G 178K /var/log\n"
+"mypool/var/mail 144K 93.2G 144K /var/mail\n"
+"mypool/var/newname 87.5K 93.2G 87.5K /var/newname\n"
+"mypool/var/tmp 152K 93.2G 152K /var/tmp\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1638
+msgid ""
+"Renaming snapshots uses the same command. Due to the nature of snapshots, "
+"rename cannot change their parent dataset. To rename a recursive snapshot, "
+"specify `-r`; this will also rename all snapshots with the same name in "
+"child datasets."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1648
+#, no-wrap
+msgid ""
+"# zfs list -t snapshot\n"
+"NAME USED AVAIL REFER MOUNTPOINT\n"
+"mypool/var/newname@first_snapshot 0 - 87.5K -\n"
+"# zfs rename mypool/var/newname@first_snapshot new_snapshot_name\n"
+"# zfs list -t snapshot\n"
+"NAME USED AVAIL REFER MOUNTPOINT\n"
+"mypool/var/newname@new_snapshot_name 0 - 87.5K -\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1651
+#, no-wrap
+msgid "Setting Dataset Properties"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1661
+msgid ""
+"Each ZFS dataset has properties that control its behavior. Most properties "
+"are automatically inherited from the parent dataset, but can be overridden "
+"locally. Set a property on a dataset with `zfs set _property=value "
+"dataset_`. Most properties have a limited set of valid values, `zfs get` "
+"will display each possible property and valid values. Using `zfs inherit` "
+"reverts most properties to their inherited values. User-defined properties "
+"are also possible. They become part of the dataset configuration and "
+"provide further information about the dataset or its contents. To "
+"distinguish these custom properties from the ones supplied as part of ZFS, "
+"use a colon (`:`) to create a custom namespace for the property."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1668
+#, no-wrap
+msgid ""
+"# zfs set custom:costcenter=1234 tank\n"
+"# zfs get custom:costcenter tank\n"
+"NAME PROPERTY VALUE SOURCE\n"
+"tank custom:costcenter 1234 local\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1672
+msgid ""
+"To remove a custom property, use `zfs inherit` with `-r`. If the custom "
+"property is not defined in any of the parent datasets, this option removes "
+"it (but the pool's history still records the change)."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1681
+#, no-wrap
+msgid ""
+"# zfs inherit -r custom:costcenter tank\n"
+"# zfs get custom:costcenter tank\n"
+"NAME PROPERTY VALUE SOURCE\n"
+"tank custom:costcenter - -\n"
+"# zfs get all tank | grep custom:costcenter\n"
+"#\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1684
+#, no-wrap
+msgid "Getting and Setting Share Properties"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1690
+msgid ""
+"Two commonly used and useful dataset properties are the NFS and SMB share "
+"options. Setting these defines if and how ZFS shares datasets on the "
+"network. At present, FreeBSD supports setting NFS sharing alone. To get "
+"the current status of a share, enter:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1699
+#, no-wrap
+msgid ""
+"# zfs get sharenfs mypool/usr/home\n"
+"NAME PROPERTY VALUE SOURCE\n"
+"mypool/usr/home sharenfs on local\n"
+"# zfs get sharesmb mypool/usr/home\n"
+"NAME PROPERTY VALUE SOURCE\n"
+"mypool/usr/home sharesmb off local\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1702
+msgid "To enable sharing of a dataset, enter:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1706
+#, no-wrap
+msgid "# zfs set sharenfs=on mypool/usr/home\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1710
+msgid ""
+"Set other options for sharing datasets through NFS, such as `-alldirs`, `-"
+"maproot` and `-network`. To set options on a dataset shared through NFS, "
+"enter:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1714
+#, no-wrap
+msgid "# zfs set sharenfs=\"-alldirs,-maproot=root,-network=192.168.1.0/24\" mypool/usr/home\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1717
+#, no-wrap
+msgid "Managing Snapshots"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1731
+msgid ""
+"<<zfs-term-snapshot,Snapshots>> are one of the most powerful features of "
+"ZFS. A snapshot provides a read-only, point-in-time copy of the dataset. "
+"With Copy-On-Write (COW), ZFS creates snapshots fast by preserving older "
+"versions of the data on disk. If no snapshots exist, ZFS reclaims space for "
+"future use when data is rewritten or deleted. Snapshots preserve disk space "
+"by recording just the differences between the current dataset and a previous "
+"version. Allowing snapshots on whole datasets, not on individual files or "
+"directories. A snapshot from a dataset duplicates everything contained in "
+"it. This includes the file system properties, files, directories, "
+"permissions, and so on. Snapshots use no extra space when first created, "
+"but consume space as the blocks they reference change. Recursive snapshots "
+"taken with `-r` create snapshots with the same name on the dataset and its "
+"children, providing a consistent moment-in-time snapshot of the file "
+"systems. This can be important when an application has files on related "
+"datasets or that depend upon each other. Without snapshots, a backup would "
+"have copies of the files from different points in time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1740
+msgid ""
+"Snapshots in ZFS provide a variety of features that even other file systems "
+"with snapshot functionality lack. A typical example of snapshot use is as a "
+"quick way of backing up the current state of the file system when performing "
+"a risky action like a software installation or a system upgrade. If the "
+"action fails, rolling back to the snapshot returns the system to the same "
+"state when creating the snapshot. If the upgrade was successful, delete the "
+"snapshot to free up space. Without snapshots, a failed upgrade often "
+"requires restoring backups, which is tedious, time consuming, and may "
+"require downtime during which the system is unusable. Rolling back to "
+"snapshots is fast, even while the system is running in normal operation, "
+"with little or no downtime. The time savings are enormous with multi-"
+"terabyte storage systems considering the time required to copy the data from "
+"backup. Snapshots are not a replacement for a complete backup of a pool, "
+"but offer a quick and easy way to store a dataset copy at a specific time."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1742
+#, no-wrap
+msgid "Creating Snapshots"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1746
+msgid ""
+"To create snapshots, use `zfs snapshot _dataset_@_snapshotname_`. Adding `-"
+"r` creates a snapshot recursively, with the same name on all child datasets."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1748
+msgid "Create a recursive snapshot of the entire pool:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1786
+#, no-wrap
+msgid ""
+"# zfs list -t all\n"
+"NAME USED AVAIL REFER MOUNTPOINT\n"
+"mypool 780M 93.2G 144K none\n"
+"mypool/ROOT 777M 93.2G 144K none\n"
+"mypool/ROOT/default 777M 93.2G 777M /\n"
+"mypool/tmp 176K 93.2G 176K /tmp\n"
+"mypool/usr 616K 93.2G 144K /usr\n"
+"mypool/usr/home 184K 93.2G 184K /usr/home\n"
+"mypool/usr/ports 144K 93.2G 144K /usr/ports\n"
+"mypool/usr/src 144K 93.2G 144K /usr/src\n"
+"mypool/var 1.29M 93.2G 616K /var\n"
+"mypool/var/crash 148K 93.2G 148K /var/crash\n"
+"mypool/var/log 178K 93.2G 178K /var/log\n"
+"mypool/var/mail 144K 93.2G 144K /var/mail\n"
+"mypool/var/newname 87.5K 93.2G 87.5K /var/newname\n"
+"mypool/var/newname@new_snapshot_name 0 - 87.5K -\n"
+"mypool/var/tmp 152K 93.2G 152K /var/tmp\n"
+"# zfs snapshot -r mypool@my_recursive_snapshot\n"
+"# zfs list -t snapshot\n"
+"NAME USED AVAIL REFER MOUNTPOINT\n"
+"mypool@my_recursive_snapshot 0 - 144K -\n"
+"mypool/ROOT@my_recursive_snapshot 0 - 144K -\n"
+"mypool/ROOT/default@my_recursive_snapshot 0 - 777M -\n"
+"mypool/tmp@my_recursive_snapshot 0 - 176K -\n"
+"mypool/usr@my_recursive_snapshot 0 - 144K -\n"
+"mypool/usr/home@my_recursive_snapshot 0 - 184K -\n"
+"mypool/usr/ports@my_recursive_snapshot 0 - 144K -\n"
+"mypool/usr/src@my_recursive_snapshot 0 - 144K -\n"
+"mypool/var@my_recursive_snapshot 0 - 616K -\n"
+"mypool/var/crash@my_recursive_snapshot 0 - 148K -\n"
+"mypool/var/log@my_recursive_snapshot 0 - 178K -\n"
+"mypool/var/mail@my_recursive_snapshot 0 - 144K -\n"
+"mypool/var/newname@new_snapshot_name 0 - 87.5K -\n"
+"mypool/var/newname@my_recursive_snapshot 0 - 87.5K -\n"
+"mypool/var/tmp@my_recursive_snapshot 0 - 152K -\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1791
+msgid ""
+"Snapshots are not shown by a normal `zfs list` operation. To list "
+"snapshots, append `-t snapshot` to `zfs list`. `-t all` displays both file "
+"systems and snapshots."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1795
+msgid ""
+"Snapshots are not mounted directly, showing no path in the `MOUNTPOINT` "
+"column. ZFS does not mention available disk space in the `AVAIL` column, as "
+"snapshots are read-only after their creation. Compare the snapshot to the "
+"original dataset:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1802
+#, no-wrap
+msgid ""
+"# zfs list -rt all mypool/usr/home\n"
+"NAME USED AVAIL REFER MOUNTPOINT\n"
+"mypool/usr/home 184K 93.2G 184K /usr/home\n"
+"mypool/usr/home@my_recursive_snapshot 0 - 184K -\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1808
+msgid ""
+"Displaying both the dataset and the snapshot together reveals how snapshots "
+"work in <<zfs-term-cow,COW>> fashion. They save the changes (_delta_) made "
+"and not the complete file system contents all over again. This means that "
+"snapshots take little space when making changes. Observe space usage even "
+"more by copying a file to the dataset, then creating a second snapshot:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1818
+#, no-wrap
+msgid ""
+"# cp /etc/passwd /var/tmp\n"
+"# zfs snapshot mypool/var/tmp@after_cp\n"
+"# zfs list -rt all mypool/var/tmp\n"
+"NAME USED AVAIL REFER MOUNTPOINT\n"
+"mypool/var/tmp 206K 93.2G 118K /var/tmp\n"
+"mypool/var/tmp@my_recursive_snapshot 88K - 152K -\n"
+"mypool/var/tmp@after_cp 0 - 118K -\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1823
+msgid ""
+"The second snapshot contains the changes to the dataset after the copy "
+"operation. This yields enormous space savings. Notice that the size of the "
+"snapshot `_mypool/var/tmp@my_recursive_snapshot_` also changed in the `USED` "
+"column to show the changes between itself and the snapshot taken afterwards."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1825
+#, no-wrap
+msgid "Comparing Snapshots"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1831
+msgid ""
+"ZFS provides a built-in command to compare the differences in content "
+"between two snapshots. This is helpful with a lot of snapshots taken over "
+"time when the user wants to see how the file system has changed over time. "
+"For example, `zfs diff` lets a user find the latest snapshot that still "
+"contains a file deleted by accident. Doing this for the two snapshots "
+"created in the previous section yields this output:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1842
+#, no-wrap
+msgid ""
+"# zfs list -rt all mypool/var/tmp\n"
+"NAME USED AVAIL REFER MOUNTPOINT\n"
+"mypool/var/tmp 206K 93.2G 118K /var/tmp\n"
+"mypool/var/tmp@my_recursive_snapshot 88K - 152K -\n"
+"mypool/var/tmp@after_cp 0 - 118K -\n"
+"# zfs diff mypool/var/tmp@my_recursive_snapshot\n"
+"M /var/tmp/\n"
+"+ /var/tmp/passwd\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1846
+msgid ""
+"The command lists the changes between the specified snapshot (in this case "
+"`_mypool/var/tmp@my_recursive_snapshot_`) and the live file system. The "
+"first column shows the change type:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1852
+#, no-wrap
+msgid "+"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1854
+#, no-wrap
+msgid "Adding the path or file."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1855
+#, no-wrap
+msgid "-"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1857
+#, no-wrap
+msgid "Deleting the path or file."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1858
+#, no-wrap
+msgid "M"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1860
+#, no-wrap
+msgid "Modifying the path or file."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1861
+#, no-wrap
+msgid "R"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1862
+#, no-wrap
+msgid "Renaming the path or file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1867
+msgid ""
+"Comparing the output with the table, it becomes clear that ZFS added [."
+"filename]#passwd# after creating the snapshot `_mypool/var/"
+"tmp@my_recursive_snapshot_`. This also resulted in a modification to the "
+"parent directory mounted at `_/var/tmp_`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1869
+msgid ""
+"Comparing two snapshots is helpful when using the ZFS replication feature to "
+"transfer a dataset to a different host for backup purposes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1871
+msgid ""
+"Compare two snapshots by providing the full dataset name and snapshot name "
+"of both datasets:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1883
+#, no-wrap
+msgid ""
+"# cp /var/tmp/passwd /var/tmp/passwd.copy\n"
+"# zfs snapshot mypool/var/tmp@diff_snapshot\n"
+"# zfs diff mypool/var/tmp@my_recursive_snapshot mypool/var/tmp@diff_snapshot\n"
+"M /var/tmp/\n"
+"+ /var/tmp/passwd\n"
+"+ /var/tmp/passwd.copy\n"
+"# zfs diff mypool/var/tmp@my_recursive_snapshot mypool/var/tmp@after_cp\n"
+"M /var/tmp/\n"
+"+ /var/tmp/passwd\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1887
+msgid ""
+"A backup administrator can compare two snapshots received from the sending "
+"host and determine the actual changes in the dataset. See the <<zfs-zfs-"
+"send,Replication>> section for more information."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1889
+#, no-wrap
+msgid "Snapshot Rollback"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1902
+msgid ""
+"When at least one snapshot is available, roll back to it at any time. Most "
+"often this is the case when the current state of the dataset is no longer "
+"and if preferring an older version. Scenarios such as local development "
+"tests gone wrong, botched system updates hampering the system functionality, "
+"or the need to restore deleted files or directories are all too common "
+"occurrences. To roll back a snapshot, use `zfs rollback _snapshotname_`. "
+"If a lot of changes are present, the operation will take a long time. "
+"During that time, the dataset always remains in a consistent state, much "
+"like a database that conforms to ACID principles is performing a rollback. "
+"This is happening while the dataset is live and accessible without requiring "
+"a downtime. Once the snapshot rolled back, the dataset has the same state "
+"as it had when the snapshot was originally taken. Rolling back to a "
+"snapshot discards all other data in that dataset not part of the snapshot. "
+"Taking a snapshot of the current state of the dataset before rolling back to "
+"a previous one is a good idea when requiring some data later. This way, the "
+"user can roll back and forth between snapshots without losing data that is "
+"still valuable."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1904
+msgid ""
+"In the first example, roll back a snapshot because of a careless `rm` "
+"operation that removes too much data than intended."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1918
+#, no-wrap
+msgid ""
+"# zfs list -rt all mypool/var/tmp\n"
+"NAME USED AVAIL REFER MOUNTPOINT\n"
+"mypool/var/tmp 262K 93.2G 120K /var/tmp\n"
+"mypool/var/tmp@my_recursive_snapshot 88K - 152K -\n"
+"mypool/var/tmp@after_cp 53.5K - 118K -\n"
+"mypool/var/tmp@diff_snapshot 0 - 120K -\n"
+"# ls /var/tmp\n"
+"passwd passwd.copy vi.recover\n"
+"# rm /var/tmp/passwd*\n"
+"# ls /var/tmp\n"
+"vi.recover\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1923
+msgid ""
+"At this point, the user notices the removal of extra files and wants them "
+"back. ZFS provides an easy way to get them back using rollbacks, when "
+"performing snapshots of important data on a regular basis. To get the files "
+"back and start over from the last snapshot, issue the command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1929
+#, no-wrap
+msgid ""
+"# zfs rollback mypool/var/tmp@diff_snapshot\n"
+"# ls /var/tmp\n"
+"passwd passwd.copy vi.recover\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1934
+msgid ""
+"The rollback operation restored the dataset to the state of the last "
+"snapshot. Rolling back to a snapshot taken much earlier with other "
+"snapshots taken afterwards is also possible. When trying to do this, ZFS "
+"will issue this warning:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1947
+#, no-wrap
+msgid ""
+"# zfs list -rt snapshot mypool/var/tmp\n"
+"AME USED AVAIL REFER MOUNTPOINT\n"
+"mypool/var/tmp@my_recursive_snapshot 88K - 152K -\n"
+"mypool/var/tmp@after_cp 53.5K - 118K -\n"
+"mypool/var/tmp@diff_snapshot 0 - 120K -\n"
+"# zfs rollback mypool/var/tmp@my_recursive_snapshot\n"
+"cannot rollback to 'mypool/var/tmp@my_recursive_snapshot': more recent snapshots exist\n"
+"use '-r' to force deletion of the following snapshots:\n"
+"mypool/var/tmp@after_cp\n"
+"mypool/var/tmp@diff_snapshot\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1954
+msgid ""
+"This warning means that snapshots exist between the current state of the "
+"dataset and the snapshot to which the user wants to roll back. To complete "
+"the rollback delete these snapshots. ZFS cannot track all the changes "
+"between different states of the dataset, because snapshots are read-only. "
+"ZFS will not delete the affected snapshots unless the user specifies `-r` to "
+"confirm that this is the desired action. If that is the intention, and "
+"understanding the consequences of losing all intermediate snapshots, issue "
+"the command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1963
+#, no-wrap
+msgid ""
+"# zfs rollback -r mypool/var/tmp@my_recursive_snapshot\n"
+"# zfs list -rt snapshot mypool/var/tmp\n"
+"NAME USED AVAIL REFER MOUNTPOINT\n"
+"mypool/var/tmp@my_recursive_snapshot 8K - 152K -\n"
+"# ls /var/tmp\n"
+"vi.recover\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1966
+msgid ""
+"The output from `zfs list -t snapshot` confirms the removal of the "
+"intermediate snapshots as a result of `zfs rollback -r`."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1968
+#, no-wrap
+msgid "Restoring Individual Files from Snapshots"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1975
+msgid ""
+"Snapshots live in a hidden directory under the parent dataset: [.filename]#."
+"zfs/snapshots/snapshotname#. By default, these directories will not show "
+"even when executing a standard `ls -a` . Although the directory doesn't "
+"show, access it like any normal directory. The property named `snapdir` "
+"controls whether these hidden directories show up in a directory listing. "
+"Setting the property to `visible` allows them to appear in the output of "
+"`ls` and other commands that deal with directory contents."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1986
+#, no-wrap
+msgid ""
+"# zfs get snapdir mypool/var/tmp\n"
+"NAME PROPERTY VALUE SOURCE\n"
+"mypool/var/tmp snapdir hidden default\n"
+"# ls -a /var/tmp\n"
+". .. passwd vi.recover\n"
+"# zfs set snapdir=visible mypool/var/tmp\n"
+"# ls -a /var/tmp\n"
+". .. .zfs passwd vi.recover\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:1991
+msgid ""
+"Restore individual files to a previous state by copying them from the "
+"snapshot back to the parent dataset. The directory structure below [."
+"filename]#.zfs/snapshot# has a directory named like the snapshots taken "
+"earlier to make it easier to identify them. The next example shows how to "
+"restore a file from the hidden [.filename]#.zfs# directory by copying it "
+"from the snapshot containing the latest version of the file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2002
+#, no-wrap
+msgid ""
+"# rm /var/tmp/passwd\n"
+"# ls -a /var/tmp\n"
+". .. .zfs vi.recover\n"
+"# ls /var/tmp/.zfs/snapshot\n"
+"after_cp my_recursive_snapshot\n"
+"# ls /var/tmp/.zfs/snapshot/after_cp\n"
+"passwd vi.recover\n"
+"# cp /var/tmp/.zfs/snapshot/after_cp/passwd /var/tmp\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2009
+msgid ""
+"Even if the `snapdir` property is set to hidden, running `ls .zfs/snapshot` "
+"will still list the contents of that directory. The administrator decides "
+"whether to display these directories. This is a per-dataset setting. "
+"Copying files or directories from this hidden [.filename]#.zfs/snapshot# is "
+"simple enough. Trying it the other way around results in this error:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2014
+#, no-wrap
+msgid ""
+"# cp /etc/rc.conf /var/tmp/.zfs/snapshot/after_cp/\n"
+"cp: /var/tmp/.zfs/snapshot/after_cp/rc.conf: Read-only file system\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2018
+msgid ""
+"The error reminds the user that snapshots are read-only and cannot change "
+"after creation. Copying files into and removing them from snapshot "
+"directories are both disallowed because that would change the state of the "
+"dataset they represent."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2021
+msgid ""
+"Snapshots consume space based on how much the parent file system has changed "
+"since the time of the snapshot. The `written` property of a snapshot tracks "
+"the space the snapshot uses."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2025
+msgid ""
+"To destroy snapshots and reclaim the space, use `zfs destroy "
+"_dataset_@_snapshot_`. Adding `-r` recursively removes all snapshots with "
+"the same name under the parent dataset. Adding `-n -v` to the command "
+"displays a list of the snapshots to be deleted and an estimate of the space "
+"it would reclaim without performing the actual destroy operation."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2027
+#, no-wrap
+msgid "Managing Clones"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2036
+msgid ""
+"A clone is a copy of a snapshot treated more like a regular dataset. Unlike "
+"a snapshot, a clone is writeable and mountable, and has its own properties. "
+"After creating a clone using `zfs clone`, destroying the originating "
+"snapshot is impossible. To reverse the child/parent relationship between "
+"the clone and the snapshot use `zfs promote`. Promoting a clone makes the "
+"snapshot become a child of the clone, rather than of the original parent "
+"dataset. This will change how ZFS accounts for the space, but not actually "
+"change the amount of space consumed. Mounting the clone anywhere within the "
+"ZFS file system hierarchy is possible, not only below the original location "
+"of the snapshot."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2038
+msgid "To show the clone feature use this example dataset:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2046
+#, no-wrap
+msgid ""
+"# zfs list -rt all camino/home/joe\n"
+"NAME USED AVAIL REFER MOUNTPOINT\n"
+"camino/home/joe 108K 1.3G 87K /usr/home/joe\n"
+"camino/home/joe@plans 21K - 85.5K -\n"
+"camino/home/joe@backup 0K - 87K -\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2052
+msgid ""
+"A typical use for clones is to experiment with a specific dataset while "
+"keeping the snapshot around to fall back to in case something goes wrong. "
+"Since snapshots cannot change, create a read/write clone of a snapshot. "
+"After achieving the desired result in the clone, promote the clone to a "
+"dataset and remove the old file system. Removing the parent dataset is not "
+"strictly necessary, as the clone and dataset can coexist without problems."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2059
+#, no-wrap
+msgid ""
+"# zfs clone camino/home/joe@backup camino/home/joenew\n"
+"# ls /usr/home/joe*\n"
+"/usr/home/joe:\n"
+"backup.txz plans.txt\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2066
+#, no-wrap
+msgid ""
+"/usr/home/joenew:\n"
+"backup.txz plans.txt\n"
+"# df -h /usr/home\n"
+"Filesystem Size Used Avail Capacity Mounted on\n"
+"usr/home/joe 1.3G 31k 1.3G 0% /usr/home/joe\n"
+"usr/home/joenew 1.3G 31k 1.3G 0% /usr/home/joenew\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2075
+msgid ""
+"Creating a clone makes it an exact copy of the state the dataset was in when "
+"taking the snapshot. Changing the clone independently from its originating "
+"dataset is possible now. The connection between the two is the snapshot. "
+"ZFS records this connection in the property `origin`. Promoting the clone "
+"with `zfs promote` makes the clone an independent dataset. This removes the "
+"value of the `origin` property and disconnects the newly independent dataset "
+"from the snapshot. This example shows it:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2085
+#, no-wrap
+msgid ""
+"# zfs get origin camino/home/joenew\n"
+"NAME PROPERTY VALUE SOURCE\n"
+"camino/home/joenew origin camino/home/joe@backup -\n"
+"# zfs promote camino/home/joenew\n"
+"# zfs get origin camino/home/joenew\n"
+"NAME PROPERTY VALUE SOURCE\n"
+"camino/home/joenew origin - -\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2090
+msgid ""
+"After making some changes like copying [.filename]#loader.conf# to the "
+"promoted clone, for example, the old directory becomes obsolete in this "
+"case. Instead, the promoted clone can replace it. To do this, `zfs "
+"destroy` the old dataset first and then `zfs rename` the clone to the old "
+"dataset name (or to an entirely different name)."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2101
+#, no-wrap
+msgid ""
+"# cp /boot/defaults/loader.conf /usr/home/joenew\n"
+"# zfs destroy -f camino/home/joe\n"
+"# zfs rename camino/home/joenew camino/home/joe\n"
+"# ls /usr/home/joe\n"
+"backup.txz loader.conf plans.txt\n"
+"# df -h /usr/home\n"
+"Filesystem Size Used Avail Capacity Mounted on\n"
+"usr/home/joe 1.3G 128k 1.3G 0% /usr/home/joe\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2110
+msgid ""
+"The cloned snapshot is now an ordinary dataset. It contains all the data "
+"from the original snapshot plus the files added to it like [."
+"filename]#loader.conf#. Clones provide useful features to ZFS users in "
+"different scenarios. For example, provide jails as snapshots containing "
+"different sets of installed applications. Users can clone these snapshots "
+"and add their own applications as they see fit. Once satisfied with the "
+"changes, promote the clones to full datasets and provide them to end users "
+"to work with like they would with a real dataset. This saves time and "
+"administrative overhead when providing these jails."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2112
+#, no-wrap
+msgid "Replication"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2120
+msgid ""
+"Keeping data on a single pool in one location exposes it to risks like theft "
+"and natural or human disasters. Making regular backups of the entire pool "
+"is vital. ZFS provides a built-in serialization feature that can send a "
+"stream representation of the data to standard output. Using this feature, "
+"storing this data on another pool connected to the local system is possible, "
+"as is sending it over a network to another system. Snapshots are the basis "
+"for this replication (see the section on <<zfs-zfs-snapshot,ZFS "
+"snapshots>>). The commands used for replicating data are `zfs send` and "
+"`zfs receive`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2122
+msgid "These examples show ZFS replication with these two pools:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2129
+#, no-wrap
+msgid ""
+"# zpool list\n"
+"NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT\n"
+"backup 960M 77K 896M - - 0% 0% 1.00x ONLINE -\n"
+"mypool 984M 43.7M 940M - - 0% 4% 1.00x ONLINE -\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2137
+msgid ""
+"The pool named _mypool_ is the primary pool where writing and reading data "
+"happens on a regular basis. Using a second standby pool _backup_ in case "
+"the primary pool becomes unavailable. Note that this fail-over is not done "
+"automatically by ZFS, but must be manually done by a system administrator "
+"when needed. Use a snapshot to provide a consistent file system version to "
+"replicate. After creating a snapshot of _mypool_, copy it to the _backup_ "
+"pool by replicating snapshots. This does not include changes made since the "
+"most recent snapshot."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2144
+#, no-wrap
+msgid ""
+"# zfs snapshot mypool@backup1\n"
+"# zfs list -t snapshot\n"
+"NAME USED AVAIL REFER MOUNTPOINT\n"
+"mypool@backup1 0 - 43.6M -\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2149
+msgid ""
+"Now that a snapshot exists, use `zfs send` to create a stream representing "
+"the contents of the snapshot. Store this stream as a file or receive it on "
+"another pool. Write the stream to standard output, but redirect to a file "
+"or pipe or an error appears:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2155
+#, no-wrap
+msgid ""
+"# zfs send mypool@backup1\n"
+"Error: Stream can not be written to a terminal.\n"
+"You must redirect standard output.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2159
+msgid ""
+"To back up a dataset with `zfs send`, redirect to a file located on the "
+"mounted backup pool. Ensure that the pool has enough free space to "
+"accommodate the size of the sent snapshot, which means the data contained in "
+"the snapshot, not the changes from the previous snapshot."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2167
+#, no-wrap
+msgid ""
+"# zfs send mypool@backup1 > /backup/backup1\n"
+"# zpool list\n"
+"NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT\n"
+"backup 960M 63.7M 896M - - 0% 6% 1.00x ONLINE -\n"
+"mypool 984M 43.7M 940M - - 0% 4% 1.00x ONLINE -\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2171
+msgid ""
+"The `zfs send` transferred all the data in the snapshot called _backup1_ to "
+"the pool named _backup_. To create and send these snapshots automatically, "
+"use a man:cron[8] job."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2177
+msgid ""
+"Instead of storing the backups as archive files, ZFS can receive them as a "
+"live file system, allowing direct access to the backed up data. To get to "
+"the actual data contained in those streams, use `zfs receive` to transform "
+"the streams back into files and directories. The example below combines "
+"`zfs send` and `zfs receive` using a pipe to copy the data from one pool to "
+"another. Use the data directly on the receiving pool after the transfer is "
+"complete. It is only possible to replicate a dataset to an empty dataset."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2185
+#, no-wrap
+msgid ""
+"# zfs snapshot mypool@replica1\n"
+"# zfs send -v mypool@replica1 | zfs receive backup/mypool\n"
+"send from @ to mypool@replica1 estimated size is 50.1M\n"
+"total estimated size is 50.1M\n"
+"TIME SENT SNAPSHOT\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2190
+#, no-wrap
+msgid ""
+"# zpool list\n"
+"NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT\n"
+"backup 960M 63.7M 896M - - 0% 6% 1.00x ONLINE -\n"
+"mypool 984M 43.7M 940M - - 0% 4% 1.00x ONLINE -\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2193
+#, no-wrap
+msgid "Incremental Backups"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2198
+msgid ""
+"`zfs send` can also determine the difference between two snapshots and send "
+"individual differences between the two. This saves disk space and transfer "
+"time. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2210
+#, no-wrap
+msgid ""
+"# zfs snapshot mypool@replica2\n"
+"# zfs list -t snapshot\n"
+"NAME USED AVAIL REFER MOUNTPOINT\n"
+"mypool@replica1 5.72M - 43.6M -\n"
+"mypool@replica2 0 - 44.1M -\n"
+"# zpool list\n"
+"NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT\n"
+"backup 960M 61.7M 898M - - 0% 6% 1.00x ONLINE -\n"
+"mypool 960M 50.2M 910M - - 0% 5% 1.00x ONLINE -\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2216
+msgid ""
+"Create a second snapshot called _replica2_. This second snapshot contains "
+"changes made to the file system between now and the previous snapshot, "
+"_replica1_. Using `zfs send -i` and indicating the pair of snapshots "
+"generates an incremental replica stream containing the changed data. This "
+"succeeds if the initial snapshot already exists on the receiving side."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2223
+#, no-wrap
+msgid ""
+"# zfs send -v -i mypool@replica1 mypool@replica2 | zfs receive /backup/mypool\n"
+"send from @replica1 to mypool@replica2 estimated size is 5.02M\n"
+"total estimated size is 5.02M\n"
+"TIME SENT SNAPSHOT\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2228
+#, no-wrap
+msgid ""
+"# zpool list\n"
+"NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT\n"
+"backup 960M 80.8M 879M - - 0% 8% 1.00x ONLINE -\n"
+"mypool 960M 50.2M 910M - - 0% 5% 1.00x ONLINE -\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2234
+#, no-wrap
+msgid ""
+"# zfs list\n"
+"NAME USED AVAIL REFER MOUNTPOINT\n"
+"backup 55.4M 240G 152K /backup\n"
+"backup/mypool 55.3M 240G 55.2M /backup/mypool\n"
+"mypool 55.6M 11.6G 55.0M /mypool\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2241
+#, no-wrap
+msgid ""
+"# zfs list -t snapshot\n"
+"NAME USED AVAIL REFER MOUNTPOINT\n"
+"backup/mypool@replica1 104K - 50.2M -\n"
+"backup/mypool@replica2 0 - 55.2M -\n"
+"mypool@replica1 29.9K - 50.0M -\n"
+"mypool@replica2 0 - 55.0M -\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2246
+msgid ""
+"The incremental stream replicated the changed data rather than the entirety "
+"of _replica1_. Sending the differences alone took much less time to "
+"transfer and saved disk space by not copying the whole pool each time. This "
+"is useful when replicating over a slow network or one charging per "
+"transferred byte."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2251
+msgid ""
+"A new file system, _backup/mypool_, is available with the files and data "
+"from the pool _mypool_. Specifying `-p` copies the dataset properties "
+"including compression settings, quotas, and mount points. Specifying `-R` "
+"copies all child datasets of the dataset along with their properties. "
+"Automate sending and receiving to create regular backups on the second pool."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2253
+#, no-wrap
+msgid "Sending Encrypted Backups over SSH"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2261
+msgid ""
+"Sending streams over the network is a good way to keep a remote backup, but "
+"it does come with a drawback. Data sent over the network link is not "
+"encrypted, allowing anyone to intercept and transform the streams back into "
+"data without the knowledge of the sending user. This is undesirable when "
+"sending the streams over the internet to a remote host. Use SSH to securely "
+"encrypt data sent over a network connection. Since ZFS requires redirecting "
+"the stream from standard output, piping it through SSH is easy. To keep the "
+"contents of the file system encrypted in transit and on the remote system, "
+"consider using https://wiki.freebsd.org/PEFS[PEFS]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2264
+msgid ""
+"Change some settings and take security precautions first. This describes "
+"the necessary steps required for the `zfs send` operation; for more "
+"information on SSH, see crossref:security[openssh,\"OpenSSH\"]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2266
+msgid "Change the configuration as follows:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2268
+msgid ""
+"Passwordless SSH access between sending and receiving host using SSH keys"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2269
+msgid ""
+"ZFS requires the privileges of the `root` user to send and receive streams. "
+"This requires logging in to the receiving system as `root`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2270
+msgid "Security reasons prevent `root` from logging in by default."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2272
+msgid ""
+"Use the <<zfs-zfs-allow,ZFS Delegation>> system to allow a non-`root` user "
+"on each system to perform the respective send and receive operations. On "
+"the sending system:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2276
+#, no-wrap
+msgid "# zfs allow -u someuser send,snapshot mypool\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2279
+msgid ""
+"To mount the pool, the unprivileged user must own the directory, and regular "
+"users need permission to mount file systems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2281
+msgid "On the receiving system:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2290
+#, no-wrap
+msgid ""
+"# sysctl vfs.usermount=1\n"
+"vfs.usermount: 0 -> 1\n"
+"# echo vfs.usermount=1 >> /etc/sysctl.conf\n"
+"# zfs create recvpool/backup\n"
+"# zfs allow -u someuser create,mount,receive recvpool/backup\n"
+"# chown someuser /recvpool/backup\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2293
+msgid ""
+"The unprivileged user can receive and mount datasets now, and replicates the "
+"_home_ dataset to the remote system:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2298
+#, no-wrap
+msgid ""
+"% zfs snapshot -r mypool/home@monday\n"
+"% zfs send -R mypool/home@monday | ssh someuser@backuphost zfs recv -dvu recvpool/backup\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2308
+msgid ""
+"Create a recursive snapshot called _monday_ of the file system dataset "
+"_home_ on the pool _mypool_. Then `zfs send -R` includes the dataset, all "
+"child datasets, snapshots, clones, and settings in the stream. Pipe the "
+"output through SSH to the waiting `zfs receive` on the remote host "
+"_backuphost_. Using an IP address or fully qualified domain name is good "
+"practice. The receiving machine writes the data to the _backup_ dataset on "
+"the _recvpool_ pool. Adding `-d` to `zfs recv` overwrites the name of the "
+"pool on the receiving side with the name of the snapshot. `-u` causes the "
+"file systems to not mount on the receiving side. Using `-v` shows more "
+"details about the transfer, including the elapsed time and the amount of "
+"data transferred."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2310
+#, no-wrap
+msgid "Dataset, User, and Group Quotas"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2315
+msgid ""
+"Use <<zfs-term-quota,Dataset quotas>> to restrict the amount of space "
+"consumed by a particular dataset. <<zfs-term-refquota,Reference Quotas>> "
+"work in much the same way, but count the space used by the dataset itself, "
+"excluding snapshots and child datasets. Similarly, use <<zfs-term-userquota,"
+"user>> and <<zfs-term-groupquota,group>> quotas to prevent users or groups "
+"from using up all the space in the pool or dataset."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2320
+msgid ""
+"The following examples assume that the users already exist in the system. "
+"Before adding a user to the system, make sure to create their home dataset "
+"first and set the `mountpoint` to `/home/_bob_`. Then, create the user and "
+"make the home directory point to the dataset's `mountpoint` location. This "
+"will properly set owner and group permissions without shadowing any pre-"
+"existing home directory paths that might exist."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2322
+msgid "To enforce a dataset quota of 10 GB for [.filename]#storage/home/bob#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2326
+#, no-wrap
+msgid "# zfs set quota=10G storage/home/bob\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2329
+msgid ""
+"To enforce a reference quota of 10 GB for [.filename]#storage/home/bob#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2333
+#, no-wrap
+msgid "# zfs set refquota=10G storage/home/bob\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2336
+msgid "To remove a quota of 10 GB for [.filename]#storage/home/bob#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2340
+#, no-wrap
+msgid "# zfs set quota=none storage/home/bob\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2343
+msgid ""
+"The general format is `userquota@_user_=_size_`, and the user's name must be "
+"in one of these formats:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2345
+msgid "POSIX compatible name such as _joe_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2346
+msgid "POSIX numeric ID such as _789_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2347
+msgid "SID name such as _joe.bloggs@example.com_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2348
+msgid "SID numeric ID such as _S-1-123-456-789_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2350
+msgid "For example, to enforce a user quota of 50 GB for the user named _joe_:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2354
+#, no-wrap
+msgid "# zfs set userquota@joe=50G\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2357
+msgid "To remove any quota:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2361
+#, no-wrap
+msgid "# zfs set userquota@joe=none\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2368
+msgid ""
+"User quota properties are not displayed by `zfs get all`. Non-`root` users "
+"can't see other's quotas unless granted the `userquota` privilege. Users "
+"with this privilege are able to view and set everyone's quota."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2371
+msgid ""
+"The general format for setting a group quota is: `groupquota@_group_=_size_`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2373
+msgid "To set the quota for the group _firstgroup_ to 50 GB, use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2377
+#, no-wrap
+msgid "# zfs set groupquota@firstgroup=50G\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2380
+msgid ""
+"To remove the quota for the group _firstgroup_, or to make sure that one is "
+"not set, instead use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2384
+#, no-wrap
+msgid "# zfs set groupquota@firstgroup=none\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2388
+msgid ""
+"As with the user quota property, non-`root` users can see the quotas "
+"associated with the groups to which they belong. A user with the "
+"`groupquota` privilege or `root` can view and set all quotas for all groups."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2392
+msgid ""
+"To display the amount of space used by each user on a file system or "
+"snapshot along with any quotas, use `zfs userspace`. For group information, "
+"use `zfs groupspace`. For more information about supported options or how "
+"to display specific options alone, refer to man:zfs[1]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2394
+msgid ""
+"Privileged users and `root` can list the quota for [.filename]#storage/home/"
+"bob# using:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2398
+#, no-wrap
+msgid "# zfs get quota storage/home/bob\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2401
+#, no-wrap
+msgid "Reservations"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2406
+msgid ""
+"<<zfs-term-reservation,Reservations>> guarantee an always-available amount "
+"of space on a dataset. The reserved space will not be available to any "
+"other dataset. This useful feature ensures that free space is available for "
+"an important dataset or log files."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2408
+msgid ""
+"The general format of the `reservation` property is `reservation=_size_`, so "
+"to set a reservation of 10 GB on [.filename]#storage/home/bob#, use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2412
+#, no-wrap
+msgid "# zfs set reservation=10G storage/home/bob\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2415
+msgid "To clear any reservation:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2419
+#, no-wrap
+msgid "# zfs set reservation=none storage/home/bob\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2422
+msgid ""
+"The same principle applies to the `refreservation` property for setting a "
+"<<zfs-term-refreservation,Reference Reservation>>, with the general format "
+"`refreservation=_size_`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2424
+msgid ""
+"This command shows any reservations or refreservations that exist on [."
+"filename]#storage/home/bob#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2429
+#, no-wrap
+msgid ""
+"# zfs get reservation storage/home/bob\n"
+"# zfs get refreservation storage/home/bob\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2432
+#, no-wrap
+msgid "Compression"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2438
+msgid ""
+"ZFS provides transparent compression. Compressing data written at the block "
+"level saves space and also increases disk throughput. If data compresses by "
+"25% the compressed data writes to the disk at the same rate as the "
+"uncompressed version, resulting in an effective write speed of 125%. "
+"Compression can also be a great alternative to <<zfs-zfs-deduplication,"
+"Deduplication>> because it does not require extra memory."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2444
+msgid ""
+"ZFS offers different compression algorithms, each with different trade-"
+"offs. The introduction of LZ4 compression in ZFS v5000 enables compressing "
+"the entire pool without the large performance trade-off of other "
+"algorithms. The biggest advantage to LZ4 is the _early abort_ feature. If "
+"LZ4 does not achieve at least 12.5% compression in the header part of the "
+"data, ZFS writes the block uncompressed to avoid wasting CPU cycles trying "
+"to compress data that is either already compressed or uncompressible. For "
+"details about the different compression algorithms available in ZFS, see the "
+"<<zfs-term-compression,Compression>> entry in the terminology section."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2446
+msgid ""
+"The administrator can see the effectiveness of compression using dataset "
+"properties."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2455
+#, no-wrap
+msgid ""
+"# zfs get used,compressratio,compression,logicalused mypool/compressed_dataset\n"
+"NAME PROPERTY VALUE SOURCE\n"
+"mypool/compressed_dataset used 449G -\n"
+"mypool/compressed_dataset compressratio 1.11x -\n"
+"mypool/compressed_dataset compression lz4 local\n"
+"mypool/compressed_dataset logicalused 496G -\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2460
+msgid ""
+"The dataset is using 449 GB of space (the used property). Without "
+"compression, it would have taken 496 GB of space (the `logicalused` "
+"property). This results in a 1.11:1 compression ratio."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2466
+msgid ""
+"Compression can have an unexpected side effect when combined with <<zfs-term-"
+"userquota,User Quotas>>. User quotas restrict how much actual space a user "
+"consumes on a dataset _after compression_. If a user has a quota of 10 GB, "
+"and writes 10 GB of compressible data, they will still be able to store more "
+"data. If they later update a file, say a database, with more or less "
+"compressible data, the amount of space available to them will change. This "
+"can result in the odd situation where a user did not increase the actual "
+"amount of data (the `logicalused` property), but the change in compression "
+"caused them to reach their quota limit."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2470
+msgid ""
+"Compression can have a similar unexpected interaction with backups. Quotas "
+"are often used to limit data storage to ensure there is enough backup space "
+"available. Since quotas do not consider compression ZFS may write more data "
+"than would fit with uncompressed backups."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2472
+#, no-wrap
+msgid "Zstandard Compression"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2476
+msgid ""
+"OpenZFS 2.0 added a new compression algorithm. Zstandard (Zstd) offers "
+"higher compression ratios than the default LZ4 while offering much greater "
+"speeds than the alternative, gzip. OpenZFS 2.0 is available starting with "
+"FreeBSD 12.1-RELEASE via package:sysutils/openzfs[] and has been the default "
+"in since FreeBSD 13.0-RELEASE."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2480
+msgid ""
+"Zstd provides a large selection of compression levels, providing fine-"
+"grained control over performance versus compression ratio. One of the main "
+"advantages of Zstd is that the decompression speed is independent of the "
+"compression level. For data written once but read often, Zstd allows the "
+"use of the highest compression levels without a read performance penalty."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2485
+msgid ""
+"Even with frequent data updates, enabling compression often provides higher "
+"performance. One of the biggest advantages comes from the compressed ARC "
+"feature. ZFS's Adaptive Replacement Cache (ARC) caches the compressed "
+"version of the data in RAM, decompressing it each time. This allows the "
+"same amount of RAM to store more data and metadata, increasing the cache hit "
+"ratio."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2491
+msgid ""
+"ZFS offers 19 levels of Zstd compression, each offering incrementally more "
+"space savings in exchange for slower compression. The default level is "
+"`zstd-3` and offers greater compression than LZ4 without being much slower. "
+"Levels above 10 require large amounts of memory to compress each block and "
+"systems with less than 16 GB of RAM should not use them. ZFS uses a "
+"selection of the Zstd_fast_ levels also, which get correspondingly faster "
+"but supports lower compression ratios. ZFS supports `zstd-fast-1` through "
+"`zstd-fast-10`, `zstd-fast-20` through `zstd-fast-100` in increments of 10, "
+"and `zstd-fast-500` and `zstd-fast-1000` which provide minimal compression, "
+"but offer high performance."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2495
+msgid ""
+"If ZFS is not able to get the required memory to compress a block with Zstd, "
+"it will fall back to storing the block uncompressed. This is unlikely to "
+"happen except at the highest levels of Zstd on memory constrained systems. "
+"ZFS counts how often this has occurred since loading the ZFS module with "
+"`kstat.zfs.misc.zstd.compress_alloc_fail`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2497
+#, no-wrap
+msgid "Deduplication"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2503
+msgid ""
+"When enabled, <<zfs-term-deduplication,deduplication>> uses the checksum of "
+"each block to detect duplicate blocks. When a new block is a duplicate of "
+"an existing block, ZFS writes a new reference to the existing data instead "
+"of the whole duplicate block. Tremendous space savings are possible if the "
+"data contains a lot of duplicated files or repeated information. Warning: "
+"deduplication requires a large amount of memory, and enabling compression "
+"instead provides most of the space savings without the extra cost."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2505
+msgid "To activate deduplication, set the `dedup` property on the target pool:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2509
+#, no-wrap
+msgid "# zfs set dedup=on pool\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2514
+msgid ""
+"Deduplicating only affects new data written to the pool. Merely activating "
+"this option will not deduplicate data already written to the pool. A pool "
+"with a freshly activated deduplication property will look like this example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2520
+#, no-wrap
+msgid ""
+"# zpool list\n"
+"NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT\n"
+"pool 2.84G 2.19M 2.83G - - 0% 0% 1.00x ONLINE -\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2525
+msgid ""
+"The `DEDUP` column shows the actual rate of deduplication for the pool. A "
+"value of `1.00x` shows that data has not deduplicated yet. The next example "
+"copies some system binaries three times into different directories on the "
+"deduplicated pool created above."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2531
+#, no-wrap
+msgid ""
+"# for d in dir1 dir2 dir3; do\n"
+"> mkdir $d && cp -R /usr/bin $d &\n"
+"> done\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2534
+msgid "To observe deduplicating of redundant data, use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2540
+#, no-wrap
+msgid ""
+"# zpool list\n"
+"NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT\n"
+"pool 2.84G 20.9M 2.82G - - 0% 0% 3.00x ONLINE -\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2545
+msgid ""
+"The `DEDUP` column shows a factor of `3.00x`. Detecting and deduplicating "
+"copies of the data uses a third of the space. The potential for space "
+"savings can be enormous, but comes at the cost of having enough memory to "
+"keep track of the deduplicated blocks."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2548
+msgid ""
+"Deduplication is not always beneficial when the data in a pool is not "
+"redundant. ZFS can show potential space savings by simulating deduplication "
+"on an existing pool:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2553
+#, no-wrap
+msgid ""
+"# zdb -S pool\n"
+"Simulated DDT histogram:\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2569
+#, no-wrap
+msgid ""
+"bucket allocated referenced\n"
+"______ ______________________________ ______________________________\n"
+"refcnt blocks LSIZE PSIZE DSIZE blocks LSIZE PSIZE DSIZE\n"
+"------ ------ ----- ----- ----- ------ ----- ----- -----\n"
+" 1 2.58M 289G 264G 264G 2.58M 289G 264G 264G\n"
+" 2 206K 12.6G 10.4G 10.4G 430K 26.4G 21.6G 21.6G\n"
+" 4 37.6K 692M 276M 276M 170K 3.04G 1.26G 1.26G\n"
+" 8 2.18K 45.2M 19.4M 19.4M 20.0K 425M 176M 176M\n"
+" 16 174 2.83M 1.20M 1.20M 3.33K 48.4M 20.4M 20.4M\n"
+" 32 40 2.17M 222K 222K 1.70K 97.2M 9.91M 9.91M\n"
+" 64 9 56K 10.5K 10.5K 865 4.96M 948K 948K\n"
+" 128 2 9.50K 2K 2K 419 2.11M 438K 438K\n"
+" 256 5 61.5K 12K 12K 1.90K 23.0M 4.47M 4.47M\n"
+" 1K 2 1K 1K 1K 2.98K 1.49M 1.49M 1.49M\n"
+" Total 2.82M 303G 275G 275G 3.20M 319G 287G 287G\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2571
+#, no-wrap
+msgid "dedup = 1.05, compress = 1.11, copies = 1.00, dedup * compress / copies = 1.16\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2580
+msgid ""
+"After `zdb -S` finishes analyzing the pool, it shows the space reduction "
+"ratio that activating deduplication would achieve. In this case, `1.16` is "
+"a poor space saving ratio mainly provided by compression. Activating "
+"deduplication on this pool would not save any amount of space, and is not "
+"worth the amount of memory required to enable deduplication. Using the "
+"formula _ratio = dedup * compress / copies_, system administrators can plan "
+"the storage allocation, deciding whether the workload will contain enough "
+"duplicate blocks to justify the memory requirements. If the data is "
+"reasonably compressible, the space savings may be good. Good practice is to "
+"enable compression first as compression also provides greatly increased "
+"performance. Enable deduplication in cases where savings are considerable "
+"and with enough available memory for the <<zfs-term-deduplication,DDT>>."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2582
+#, no-wrap
+msgid "ZFS and Jails"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2588
+msgid ""
+"Use `zfs jail` and the corresponding `jailed` property to delegate a ZFS "
+"dataset to a crossref:jails[jails,Jail]. `zfs jail _jailid_` attaches a "
+"dataset to the specified jail, and `zfs unjail` detaches it. To control the "
+"dataset from within a jail, set the `jailed` property. ZFS forbids mounting "
+"a jailed dataset on the host because it may have mount points that would "
+"compromise the security of the host."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2590
+#, no-wrap
+msgid "Delegated Administration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2598
+msgid ""
+"A comprehensive permission delegation system allows unprivileged users to "
+"perform ZFS administration functions. For example, if each user's home "
+"directory is a dataset, users need permission to create and destroy "
+"snapshots of their home directories. A user performing backups can get "
+"permission to use replication features. ZFS allows a usage statistics "
+"script to run with access to only the space usage data for all users. "
+"Delegating the ability to delegate permissions is also possible. Permission "
+"delegation is possible for each subcommand and most properties."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2600
+#, no-wrap
+msgid "Delegating Dataset Creation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2606
+msgid ""
+"`zfs allow _someuser_ create _mydataset_` gives the specified user "
+"permission to create child datasets under the selected parent dataset. A "
+"caveat: creating a new dataset involves mounting it. That requires setting "
+"the FreeBSD `vfs.usermount` man:sysctl[8] to `1` to allow non-root users to "
+"mount a file system. Another restriction aimed at preventing abuse: non-"
+"`root` users must own the mountpoint where mounting the file system."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2608
+#, no-wrap
+msgid "Delegating Permission Delegation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2612
+msgid ""
+"`zfs allow _someuser_ allow _mydataset_` gives the specified user the "
+"ability to assign any permission they have on the target dataset, or its "
+"children, to other users. If a user has the `snapshot` permission and the "
+"`allow` permission, that user can then grant the `snapshot` permission to "
+"other users."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2614
+#, no-wrap
+msgid "Advanced Topics"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2617
+#, no-wrap
+msgid "Tuning"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2620
+msgid "Adjust tunables to make ZFS perform best for different workloads."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2622
+msgid ""
+"[[zfs-advanced-tuning-arc_max]] `_vfs.zfs.arc.max_` starting with 13.x (`vfs."
+"zfs.arc_max` for 12.x) - Upper size of the <<zfs-term-arc,ARC>>. The default "
+"is all RAM but 1 GB, or 5/8 of all RAM, whichever is more. Use a lower value "
+"if the system runs any other daemons or processes that may require memory. "
+"Adjust this value at runtime with man:sysctl[8] and set it in [.filename]#/"
+"boot/loader.conf# or [.filename]#/etc/sysctl.conf#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2623
+msgid ""
+"[[zfs-advanced-tuning-arc_meta_limit]] `_vfs.zfs.arc.meta_limit_` starting "
+"with 13.x (`vfs.zfs.arc_meta_limit` for 12.x)` - Limit the amount of the "
+"<<zfs-term-arc,ARC>> used to store metadata. The default is one fourth of "
+"`vfs.zfs.arc.max`. Increasing this value will improve performance if the "
+"workload involves operations on a large number of files and directories, or "
+"frequent metadata operations, at the cost of less file data fitting in the "
+"<<zfs-term-arc,ARC>>. Adjust this value at runtime with man:sysctl[8] in [."
+"filename]#/boot/loader.conf# or [.filename]#/etc/sysctl.conf#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2624
+msgid ""
+"[[zfs-advanced-tuning-arc_min]] `_vfs.zfs.arc.min_` starting with 13.x (`vfs."
+"zfs.arc_min` for 12.x) - Lower size of the <<zfs-term-arc,ARC>>. The default "
+"is one half of `vfs.zfs.arc.meta_limit`. Adjust this value to prevent other "
+"applications from pressuring out the entire <<zfs-term-arc,ARC>>. Adjust "
+"this value at runtime with man:sysctl[8] and in [.filename]#/boot/loader."
+"conf# or [.filename]#/etc/sysctl.conf#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2625
+msgid ""
+"[[zfs-advanced-tuning-vdev-cache-size]] `_vfs.zfs.vdev.cache.size_` - A "
+"preallocated amount of memory reserved as a cache for each device in the "
+"pool. The total amount of memory used will be this value multiplied by the "
+"number of devices. Set this value at boot time and in [.filename]#/boot/"
+"loader.conf#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2626
+msgid ""
+"[[zfs-advanced-tuning-min-auto-ashift]] `_vfs.zfs.min_auto_ashift_` - Lower "
+"`ashift` (sector size) used automatically at pool creation time. The value "
+"is a power of two. The default value of `9` represents `2^9 = 512`, a sector "
+"size of 512 bytes. To avoid _write amplification_ and get the best "
+"performance, set this value to the largest sector size used by a device in "
+"the pool."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2632
+msgid ""
+"Common drives have 4 KB sectors. Using the default `ashift` of `9` with "
+"these drives results in write amplification on these devices. Data "
+"contained in a single 4 KB write is instead written in eight 512-byte "
+"writes. ZFS tries to read the native sector size from all devices when "
+"creating a pool, but drives with 4 KB sectors report that their sectors are "
+"512 bytes for compatibility. Setting `vfs.zfs.min_auto_ashift` to `12` "
+"(`2^12 = 4096`) before creating a pool forces ZFS to use 4 KB blocks for "
+"best performance on these drives."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2635
+msgid ""
+"Forcing 4 KB blocks is also useful on pools with planned disk upgrades. "
+"Future disks use 4 KB sectors, and `ashift` values cannot change after "
+"creating a pool."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2639
+msgid ""
+"In some specific cases, the smaller 512-byte block size might be "
+"preferable. When used with 512-byte disks for databases or as storage for "
+"virtual machines, less data transfers during small random reads. This can "
+"provide better performance when using a smaller ZFS record size."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2640
+msgid ""
+"[[zfs-advanced-tuning-prefetch_disable]] `_vfs.zfs.prefetch_disable_` - "
+"Disable prefetch. A value of `0` enables and `1` disables it. The default is "
+"`0`, unless the system has less than 4 GB of RAM. Prefetch works by reading "
+"larger blocks than requested into the <<zfs-term-arc,ARC>> in hopes to soon "
+"need the data. If the workload has a large number of random reads, disabling "
+"prefetch may actually improve performance by reducing unnecessary reads. "
+"Adjust this value at any time with man:sysctl[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2641
+msgid ""
+"[[zfs-advanced-tuning-vdev-trim_on_init]] `_vfs.zfs.vdev.trim_on_init_` - "
+"Control whether new devices added to the pool have the `TRIM` command run on "
+"them. This ensures the best performance and longevity for SSDs, but takes "
+"extra time. If the device has already been secure erased, disabling this "
+"setting will make the addition of the new device faster. Adjust this value "
+"at any time with man:sysctl[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2642
+msgid ""
+"[[zfs-advanced-tuning-vdev-max_pending]] `_vfs.zfs.vdev.max_pending_` - "
+"Limit the number of pending I/O requests per device. A higher value will "
+"keep the device command queue full and may give higher throughput. A lower "
+"value will reduce latency. Adjust this value at any time with man:sysctl[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2643
+msgid ""
+"[[zfs-advanced-tuning-top_maxinflight]] `_vfs.zfs.top_maxinflight_` - Upper "
+"number of outstanding I/Os per top-level <<zfs-term-vdev,vdev>>. Limits the "
+"depth of the command queue to prevent high latency. The limit is per top-"
+"level vdev, meaning the limit applies to each <<zfs-term-vdev-mirror,"
+"mirror>>, <<zfs-term-vdev-raidz,RAID-Z>>, or other vdev independently. "
+"Adjust this value at any time with man:sysctl[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2644
+msgid ""
+"[[zfs-advanced-tuning-l2arc_write_max]] `_vfs.zfs.l2arc_write_max_` - Limit "
+"the amount of data written to the <<zfs-term-l2arc,L2ARC>> per second. This "
+"tunable extends the longevity of SSDs by limiting the amount of data written "
+"to the device. Adjust this value at any time with man:sysctl[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2645
+msgid ""
+"[[zfs-advanced-tuning-l2arc_write_boost]] `_vfs.zfs.l2arc_write_boost_` - "
+"Adds the value of this tunable to <<zfs-advanced-tuning-l2arc_write_max,`vfs."
+"zfs.l2arc_write_max`>> and increases the write speed to the SSD until "
+"evicting the first block from the <<zfs-term-l2arc,L2ARC>>. This \"Turbo "
+"Warmup Phase\" reduces the performance loss from an empty <<zfs-term-l2arc,"
+"L2ARC>> after a reboot. Adjust this value at any time with man:sysctl[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2646
+msgid ""
+"[[zfs-advanced-tuning-scrub_delay]]`_vfs.zfs.scrub_delay_` - Number of ticks "
+"to delay between each I/O during a <<zfs-term-scrub,`scrub`>>. To ensure "
+"that a `scrub` does not interfere with the normal operation of the pool, if "
+"any other I/O is happening the `scrub` will delay between each command. This "
+"value controls the limit on the total IOPS (I/Os Per Second) generated by "
+"the `scrub`. The granularity of the setting is determined by the value of "
+"`kern.hz` which defaults to 1000 ticks per second. Changing this setting "
+"results in a different effective IOPS limit. The default value is `4`, "
+"resulting in a limit of: 1000 ticks/sec / 4 = 250 IOPS. Using a value of "
+"_20_ would give a limit of: 1000 ticks/sec / 20 = 50 IOPS. Recent activity "
+"on the pool limits the speed of `scrub`, as determined by <<zfs-advanced-"
+"tuning-scan_idle,`vfs.zfs.scan_idle`>>. Adjust this value at any time with "
+"man:sysctl[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2647
+msgid ""
+"[[zfs-advanced-tuning-resilver_delay]] `_vfs.zfs.resilver_delay_` - Number "
+"of milliseconds of delay inserted between each I/O during a <<zfs-term-"
+"resilver,resilver>>. To ensure that a resilver does not interfere with the "
+"normal operation of the pool, if any other I/O is happening the resilver "
+"will delay between each command. This value controls the limit of total IOPS "
+"(I/Os Per Second) generated by the resilver. ZFS determins the granularity "
+"of the setting by the value of `kern.hz` which defaults to 1000 ticks per "
+"second. Changing this setting results in a different effective IOPS limit. "
+"The default value is 2, resulting in a limit of: 1000 ticks/sec / 2 = 500 "
+"IOPS. Returning the pool to an <<zfs-term-online,Online>> state may be more "
+"important if another device failing could <<zfs-term-faulted,Fault>> the "
+"pool, causing data loss. A value of 0 will give the resilver operation the "
+"same priority as other operations, speeding the healing process. Other "
+"recent activity on the pool limits the speed of resilver, as determined by "
+"<<zfs-advanced-tuning-scan_idle,`vfs.zfs.scan_idle`>>. Adjust this value at "
+"any time with man:sysctl[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2648
+msgid ""
+"[[zfs-advanced-tuning-scan_idle]] `_vfs.zfs.scan_idle_` - Number of "
+"milliseconds since the last operation before considering the pool is idle. "
+"ZFS disables the rate limiting for <<zfs-term-scrub,`scrub`>> and <<zfs-term-"
+"resilver,resilver>> when the pool is idle. Adjust this value at any time "
+"with man:sysctl[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2649
+msgid ""
+"[[zfs-advanced-tuning-txg-timeout]] `_vfs.zfs.txg.timeout_` - Upper number "
+"of seconds between <<zfs-term-txg,transaction group>>s. The current "
+"transaction group writes to the pool and a fresh transaction group starts if "
+"this amount of time elapsed since the previous transaction group. A "
+"transaction group may trigger earlier if writing enough data. The default "
+"value is 5 seconds. A larger value may improve read performance by delaying "
+"asynchronous writes, but this may cause uneven performance when writing the "
+"transaction group. Adjust this value at any time with man:sysctl[8]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2651
+#, no-wrap
+msgid "ZFS on i386"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2654
+msgid ""
+"Some of the features provided by ZFS are memory intensive, and may require "
+"tuning for upper efficiency on systems with limited RAM."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2655
+#, no-wrap
+msgid "Memory"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2663
+msgid ""
+"As a lower value, the total system memory should be at least one gigabyte. "
+"The amount of recommended RAM depends upon the size of the pool and which "
+"features ZFS uses. A general rule of thumb is 1 GB of RAM for every 1 TB of "
+"storage. If using the deduplication feature, a general rule of thumb is 5 "
+"GB of RAM per TB of storage to deduplicate. While some users use ZFS with "
+"less RAM, systems under heavy load may panic due to memory exhaustion. ZFS "
+"may require further tuning for systems with less than the recommended RAM "
+"requirements."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2664
+#, no-wrap
+msgid "Kernel Configuration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2667
+msgid ""
+"Due to the address space limitations of the i386(TM) platform, ZFS users on "
+"the i386(TM) architecture must add this option to a custom kernel "
+"configuration file, rebuild the kernel, and reboot:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2671
+#, no-wrap
+msgid "options KVA_PAGES=512\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2676
+msgid ""
+"This expands the kernel address space, allowing the `vm.kvm_size` tunable to "
+"push beyond the imposed limit of 1 GB, or the limit of 2 GB for PAE. To "
+"find the most suitable value for this option, divide the desired address "
+"space in megabytes by four. In this example `512` for 2 GB."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2677
+#, no-wrap
+msgid "Loader Tunables"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2681
+msgid ""
+"Increases the [.filename]#kmem# address space on all FreeBSD architectures. "
+"A test system with 1 GB of physical memory benefitted from adding these "
+"options to [.filename]#/boot/loader.conf# and then restarting:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2688
+#, no-wrap
+msgid ""
+"vm.kmem_size=\"330M\"\n"
+"vm.kmem_size_max=\"330M\"\n"
+"vfs.zfs.arc.max=\"40M\"\n"
+"vfs.zfs.vdev.cache.size=\"5M\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2691
+msgid ""
+"For a more detailed list of recommendations for ZFS-related tuning, see "
+"https://wiki.freebsd.org/ZFSTuningGuide[]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2693
+#, no-wrap
+msgid "Further Resources"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2696
+msgid "https://openzfs.org/[OpenZFS]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2697
+msgid "https://wiki.freebsd.org/ZFSTuningGuide[FreeBSD Wiki - ZFS Tuning]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2698
+msgid ""
+"https://calomel.org/zfs_raid_speed_capacity.html[Calomel Blog - ZFS Raidz "
+"Performance, Capacity and Integrity]"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2700
+#, no-wrap
+msgid "ZFS Features and Terminology"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2709
+msgid ""
+"More than a file system, ZFS is fundamentally different. ZFS combines the "
+"roles of file system and volume manager, enabling new storage devices to add "
+"to a live system and having the new space available on the existing file "
+"systems in that pool at once. By combining the traditionally separate "
+"roles, ZFS is able to overcome previous limitations that prevented RAID "
+"groups being able to grow. A _vdev_ is a top level device in a pool and can "
+"be a simple disk or a RAID transformation such as a mirror or RAID-Z array. "
+"ZFS file systems (called _datasets_) each have access to the combined free "
+"space of the entire pool. Used blocks from the pool decrease the space "
+"available to each file system. This approach avoids the common pitfall with "
+"extensive partitioning where free space becomes fragmented across the "
+"partitions."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2715
+#, no-wrap
+msgid "[[zfs-term-pool]]pool"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2718
+#, no-wrap
+msgid ""
+"A storage _pool_ is the most basic building block of ZFS. A pool consists of one or more vdevs, the underlying devices that store the data. A pool is then used to create one or more file systems (datasets) or block devices (volumes).\n"
+"These datasets and volumes share the pool of remaining free space. Each pool is uniquely identified by a name and a GUID. The ZFS version number on the pool determines the features available."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2719
+#, no-wrap
+msgid "[[zfs-term-vdev]]vdev Types"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2749
+#, no-wrap
+msgid ""
+"A pool consists of one or more vdevs, which themselves are a single disk or a group of disks, transformed to a RAID. When using a lot of vdevs, ZFS spreads data across the vdevs to increase performance and maximize usable space. All vdevs must be at least 128 MB in size. \n"
+"\n"
+"* [[zfs-term-vdev-disk]] _Disk_ - The most basic vdev type is a standard block device. This can be an entire disk (such as [.filename]#/dev/ada0# or [.filename]#/dev/da0#) or a partition ([.filename]#/dev/ada0p3#). On FreeBSD, there is no performance penalty for using a partition rather than the entire disk. This differs from recommendations made by the Solaris documentation.\n"
+"+\n"
+"[CAUTION]\n"
+"====\n"
+"Using an entire disk as part of a bootable pool is strongly discouraged, as this may render the pool unbootable.\n"
+"Likewise, you should not use an entire disk as part of a mirror or RAID-Z vdev.\n"
+"Reliably determining the size of an unpartitioned disk at boot time is impossible and there's no place to put in boot code.\n"
+"====\n"
+"\n"
+"* [[zfs-term-vdev-file]] _File_ - Regular files may make up ZFS pools, which is useful for testing and experimentation. Use the full path to the file as the device path in `zpool create`.\n"
+"* [[zfs-term-vdev-mirror]] _Mirror_ - When creating a mirror, specify the `mirror` keyword followed by the list of member devices for the mirror. A mirror consists of two or more devices, writing all data to all member devices. A mirror vdev will hold as much data as its smallest member. A mirror vdev can withstand the failure of all but one of its members without losing any data.\n"
+"+\n"
+"[NOTE]\n"
+"====\n"
+"To upgrade a regular single disk vdev to a mirror vdev at any time, use `zpool <<zfs-zpool-attach,attach>>`.\n"
+"====\n"
+"\n"
+"* [[zfs-term-vdev-raidz]] _RAID-Z_ - ZFS uses RAID-Z, a variation on standard RAID-5 that offers better distribution of parity and eliminates the \"RAID-5 write hole\" in which the data and parity information become inconsistent after an unexpected restart. ZFS supports three levels of RAID-Z which provide varying levels of redundancy in exchange for decreasing levels of usable storage. ZFS uses RAID-Z1 through RAID-Z3 based on the number of parity devices in the array and the number of disks which can fail before the pool stops being operational.\n"
+"+\n"
+"In a RAID-Z1 configuration with four disks, each 1 TB, usable storage is 3 TB and the pool will still be able to operate in degraded mode with one faulted disk. If another disk goes offline before replacing and resilvering the faulted disk would result in losing all pool data.\n"
+"+\n"
+"In a RAID-Z3 configuration with eight disks of 1 TB, the volume will provide 5 TB of usable space and still be able to operate with three faulted disks. Sun(TM) recommends no more than nine disks in a single vdev. If more disks make up the configuration, the recommendation is to divide them into separate vdevs and stripe the pool data across them.\n"
+"+\n"
+"A configuration of two RAID-Z2 vdevs consisting of 8 disks each would create something like a RAID-60 array. A RAID-Z group's storage capacity is about the size of the smallest disk multiplied by the number of non-parity disks. Four 1 TB disks in RAID-Z1 has an effective size of about 3 TB, and an array of eight 1 TB disks in RAID-Z3 will yield 5 TB of usable space.\n"
+"* [[zfs-term-vdev-spare]] _Spare_ - ZFS has a special pseudo-vdev type for keeping track of available hot spares. Note that installed hot spares are not deployed automatically; manually configure them to replace the failed device using `zfs replace`.\n"
+"* [[zfs-term-vdev-log]] _Log_ - ZFS Log Devices, also known as ZFS Intent Log (<<zfs-term-zil,ZIL>>) move the intent log from the regular pool devices to a dedicated device, typically an SSD. Having a dedicated log device improves the performance of applications with a high volume of synchronous writes like databases. Mirroring of log devices is possible, but RAID-Z is not supported. If using a lot of log devices, writes will be load-balanced across them.\n"
+"* [[zfs-term-vdev-cache]] _Cache_ - Adding a cache vdev to a pool will add the storage of the cache to the <<zfs-term-l2arc,L2ARC>>. Mirroring cache devices is impossible. Since a cache device stores only new copies of existing data, there is no risk of data loss."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2750
+#, no-wrap
+msgid "[[zfs-term-txg]] Transaction Group (TXG)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2756
+#, no-wrap
+msgid ""
+"Transaction Groups are the way ZFS groups blocks changes together and writes them to the pool. Transaction groups are the atomic unit that ZFS uses to ensure consistency. ZFS assigns each transaction group a unique 64-bit consecutive identifier. There can be up to three active transaction groups at a time, one in each of these three states: \n"
+"\n"
+"* _Open_ - A new transaction group begins in the open state and accepts new writes. There is always a transaction group in the open state, but the transaction group may refuse new writes if it has reached a limit. Once the open transaction group has reached a limit, or reaching the <<zfs-advanced-tuning-txg-timeout,`vfs.zfs.txg.timeout`>>, the transaction group advances to the next state.\n"
+"* _Quiescing_ - A short state that allows any pending operations to finish without blocking the creation of a new open transaction group. Once all the transactions in the group have completed, the transaction group advances to the final state.\n"
+"* _Syncing_ - Write all the data in the transaction group to stable storage. This process will in turn change other data, such as metadata and space maps, that ZFS will also write to stable storage. The process of syncing involves several passes. On the first and biggest, all the changed data blocks; next come the metadata, which may take several passes to complete. Since allocating space for the data blocks generates new metadata, the syncing state cannot finish until a pass completes that does not use any new space. The syncing state is also where _synctasks_ complete. Synctasks are administrative operations such as creating or destroying snapshots and datasets that complete the uberblock change. Once the sync state completes the transaction group in the quiescing state advances to the syncing state. All administrative functions, such as <<zfs-term-snapshot,`snapshot`>> write as part of the transaction group. ZFS adds a created synctask to the open transaction group, and that group advances as fast as possible to the syncing state to reduce the latency of administrative commands."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2757
+#, no-wrap
+msgid "[[zfs-term-arc]]Adaptive Replacement Cache (ARC)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2759
+#, no-wrap
+msgid "ZFS uses an Adaptive Replacement Cache (ARC), rather than a more traditional Least Recently Used (LRU) cache. An LRU cache is a simple list of items in the cache, sorted by how recently object was used, adding new items to the head of the list. When the cache is full, evicting items from the tail of the list makes room for more active objects. An ARC consists of four lists; the Most Recently Used (MRU) and Most Frequently Used (MFU) objects, plus a ghost list for each. These ghost lists track evicted objects to prevent adding them back to the cache. This increases the cache hit ratio by avoiding objects that have a history of occasional use. Another advantage of using both an MRU and MFU is that scanning an entire file system would evict all data from an MRU or LRU cache in favor of this freshly accessed content. With ZFS, there is also an MFU that tracks the most frequently used objects, and the cache of the most commonly accessed blocks remains."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2760
+#, no-wrap
+msgid "[[zfs-term-l2arc]]L2ARC"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2762
+#, no-wrap
+msgid "L2ARC is the second level of the ZFS caching system. RAM stores the primary ARC. Since the amount of available RAM is often limited, ZFS can also use <<zfs-term-vdev-cache,cache vdevs>>. Solid State Disks (SSDs) are often used as these cache devices due to their higher speed and lower latency compared to traditional spinning disks. L2ARC is entirely optional, but having one will increase read speeds for cached files on the SSD instead of having to read from the regular disks. L2ARC can also speed up <<zfs-term-deduplication,deduplication>> because a deduplication table (DDT) that does not fit in RAM but does fit in the L2ARC will be much faster than a DDT that must read from disk. Limits on the data rate added to the cache devices prevents prematurely wearing out SSDs with extra writes. Until the cache is full (the first block evicted to make room), writes to the L2ARC limit to the sum of the write limit and the boost limit, and afterwards limit to the write limit. A pair of man:sysctl[8] values control these rate limits. <<zfs-advanced-tuning-l2arc_write_max,`vfs.zfs.l2arc_write_max`>> controls the number of bytes written to the cache per second, while <<zfs-advanced-tuning-l2arc_write_boost,`vfs.zfs.l2arc_write_boost`>> adds to this limit during the \"Turbo Warmup Phase\" (Write Boost)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2763
+#, no-wrap
+msgid "[[zfs-term-zil]]ZIL"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2765
+#, no-wrap
+msgid "ZIL accelerates synchronous transactions by using storage devices like SSDs that are faster than those used in the main storage pool. When an application requests a synchronous write (a guarantee that the data is stored to disk rather than merely cached for later writes), writing the data to the faster ZIL storage then later flushing it out to the regular disks greatly reduces latency and improves performance. Synchronous workloads like databases will profit from a ZIL alone. Regular asynchronous writes such as copying files will not use the ZIL at all."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2766
+#, no-wrap
+msgid "[[zfs-term-cow]]Copy-On-Write"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2768
+#, no-wrap
+msgid "Unlike a traditional file system, ZFS writes a different block rather than overwriting the old data in place. When completing this write the metadata updates to point to the new location. When a shorn write (a system crash or power loss in the middle of writing a file) occurs, the entire original contents of the file are still available and ZFS discards the incomplete write. This also means that ZFS does not require a man:fsck[8] after an unexpected shutdown."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2769
+#, no-wrap
+msgid "[[zfs-term-dataset]]Dataset"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2771
+#, no-wrap
+msgid "_Dataset_ is the generic term for a ZFS file system, volume, snapshot or clone. Each dataset has a unique name in the format _poolname/path@snapshot_. The root of the pool is a dataset as well. Child datasets have hierarchical names like directories. For example, _mypool/home_, the home dataset, is a child of _mypool_ and inherits properties from it. Expand this further by creating _mypool/home/user_. This grandchild dataset will inherit properties from the parent and grandparent. Set properties on a child to override the defaults inherited from the parent and grandparent. Administration of datasets and their children can be <<zfs-zfs-allow,delegated>>."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2772
+#, no-wrap
+msgid "[[zfs-term-filesystem]]File system"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2774
+#, no-wrap
+msgid "A ZFS dataset is most often used as a file system. Like most other file systems, a ZFS file system mounts somewhere in the systems directory hierarchy and contains files and directories of its own with permissions, flags, and other metadata."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2775
+#, no-wrap
+msgid "[[zfs-term-volume]]Volume"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2777
+#, no-wrap
+msgid "ZFS can also create volumes, which appear as disk devices. Volumes have a lot of the same features as datasets, including copy-on-write, snapshots, clones, and checksumming. Volumes can be useful for running other file system formats on top of ZFS, such as UFS virtualization, or exporting iSCSI extents."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2778
+#, no-wrap
+msgid "[[zfs-term-snapshot]]Snapshot"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2780
+#, no-wrap
+msgid "The <<zfs-term-cow,copy-on-write>> (COW) design of ZFS allows for nearly instantaneous, consistent snapshots with arbitrary names. After taking a snapshot of a dataset, or a recursive snapshot of a parent dataset that will include all child datasets, new data goes to new blocks, but without reclaiming the old blocks as free space. The snapshot contains the original file system version and the live file system contains any changes made since taking the snapshot using no other space. New data written to the live file system uses new blocks to store this data. The snapshot will grow as the blocks are no longer used in the live file system, but in the snapshot alone. Mount these snapshots read-only allows recovering of previous file versions. A <<zfs-zfs-snapshot,rollback>> of a live file system to a specific snapshot is possible, undoing any changes that took place after taking the snapshot. Each block in the pool has a reference counter which keeps track of the snapshots, clones, datasets, or volumes use that block. As files and snapshots get deleted, the reference count decreases, reclaiming the free space when no longer referencing a block. Marking snapshots with a <<zfs-zfs-snapshot,hold>> results in any attempt to destroy it will returns an `EBUSY` error. Each snapshot can have holds with a unique name each. The <<zfs-zfs-snapshot,release>> command removes the hold so the snapshot can deleted. Snapshots, cloning, and rolling back works on volumes, but independently mounting does not."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2781
+#, no-wrap
+msgid "[[zfs-term-clone]]Clone"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2783
+#, no-wrap
+msgid "Cloning a snapshot is also possible. A clone is a writable version of a snapshot, allowing the file system to fork as a new dataset. As with a snapshot, a clone initially consumes no new space. As new data written to a clone uses new blocks, the size of the clone grows. When blocks are overwritten in the cloned file system or volume, the reference count on the previous block decreases. Removing the snapshot upon which a clone bases is impossible because the clone depends on it. The snapshot is the parent, and the clone is the child. Clones can be _promoted_, reversing this dependency and making the clone the parent and the previous parent the child. This operation requires no new space. Since the amount of space used by the parent and child reverses, it may affect existing quotas and reservations."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2784
+#, no-wrap
+msgid "[[zfs-term-checksum]]Checksum"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2791
+#, no-wrap
+msgid ""
+"Every block is also checksummed. The checksum algorithm used is a per-dataset property, see <<zfs-zfs-set,`set`>>. The checksum of each block is transparently validated when read, allowing ZFS to detect silent corruption. If the data read does not match the expected checksum, ZFS will attempt to recover the data from any available redundancy, like mirrors or RAID-Z. Triggering a validation of all checksums with <<zfs-term-scrub,`scrub`>>. Checksum algorithms include:\n"
+"\n"
+"* `fletcher2`\n"
+"* `fletcher4`\n"
+"* `sha256`\n"
+" The `fletcher` algorithms are faster, but `sha256` is a strong cryptographic hash and has a much lower chance of collisions at the cost of some performance. Deactivating checksums is possible, but strongly discouraged."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2792
+#, no-wrap
+msgid "[[zfs-term-compression]]Compression"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2806
+#, no-wrap
+msgid ""
+"Each dataset has a compression property, which defaults to off. Set this property to an available compression algorithm. This causes compression of all new data written to the dataset. Beyond a reduction in space used, read and write throughput often increases because fewer blocks need reading or writing. \n"
+"\n"
+"[[zfs-term-compression-lz4]]\n"
+"* _LZ4_ - Added in ZFS pool version 5000 (feature flags), LZ4 is now the recommended compression algorithm. LZ4 works about 50% faster than LZJB when operating on compressible data, and is over three times faster when operating on uncompressible data. LZ4 also decompresses about 80% faster than LZJB. On modern CPUs, LZ4 can often compress at over 500 MB/s, and decompress at over 1.5 GB/s (per single CPU core).\n"
+"\n"
+"[[zfs-term-compression-lzjb]]\n"
+"* _LZJB_ - The default compression algorithm. Created by Jeff Bonwick (one of the original creators of ZFS). LZJB offers good compression with less CPU overhead compared to GZIP. In the future, the default compression algorithm will change to LZ4.\n"
+"\n"
+"[[zfs-term-compression-gzip]]\n"
+"* _GZIP_ - A popular stream compression algorithm available in ZFS. One of the main advantages of using GZIP is its configurable level of compression. When setting the `compress` property, the administrator can choose the level of compression, ranging from `gzip1`, the lowest level of compression, to `gzip9`, the highest level of compression. This gives the administrator control over how much CPU time to trade for saved disk space.\n"
+"\n"
+"[[zfs-term-compression-zle]]\n"
+"* _ZLE_ - Zero Length Encoding is a special compression algorithm that compresses continuous runs of zeros alone. This compression algorithm is useful when the dataset contains large blocks of zeros."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2807
+#, no-wrap
+msgid "[[zfs-term-copies]]Copies"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2809
+#, no-wrap
+msgid "When set to a value greater than 1, the `copies` property instructs ZFS to maintain copies of each block in the <<zfs-term-filesystem,file system>> or <<zfs-term-volume,volume>>. Setting this property on important datasets provides added redundancy from which to recover a block that does not match its checksum. In pools without redundancy, the copies feature is the single form of redundancy. The copies feature can recover from a single bad sector or other forms of minor corruption, but it does not protect the pool from the loss of an entire disk."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2810
+#, no-wrap
+msgid "[[zfs-term-deduplication]]Deduplication"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2812
+#, no-wrap
+msgid "Checksums make it possible to detect duplicate blocks when writing data. With deduplication, the reference count of an existing, identical block increases, saving storage space. ZFS keeps a deduplication table (DDT) in memory to detect duplicate blocks. The table contains a list of unique checksums, the location of those blocks, and a reference count. When writing new data, ZFS calculates checksums and compares them to the list. When finding a match it uses the existing block. Using the SHA256 checksum algorithm with deduplication provides a secure cryptographic hash. Deduplication is tunable. If `dedup` is `on`, then a matching checksum means that the data is identical. Setting `dedup` to `verify`, ZFS performs a byte-for-byte check on the data ensuring they are actually identical. If the data is not identical, ZFS will note the hash collision and store the two blocks separately. As the DDT must store the hash of each unique block, it consumes a large amount of memory. A general rule of thumb is 5-6 GB of ram per 1 TB of deduplicated data). In situations not practical to have enough RAM to keep the entire DDT in memory, performance will suffer greatly as the DDT must read from disk before writing each new block. Deduplication can use L2ARC to store the DDT, providing a middle ground between fast system memory and slower disks. Consider using compression instead, which often provides nearly as much space savings without the increased memory."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2813
+#, no-wrap
+msgid "[[zfs-term-scrub]]Scrub"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2815
+#, no-wrap
+msgid "Instead of a consistency check like man:fsck[8], ZFS has `scrub`. `scrub` reads all data blocks stored on the pool and verifies their checksums against the known good checksums stored in the metadata. A periodic check of all the data stored on the pool ensures the recovery of any corrupted blocks before needing them. A scrub is not required after an unclean shutdown, but good practice is at least once every three months. ZFS verifies the checksum of each block during normal use, but a scrub makes certain to check even infrequently used blocks for silent corruption. ZFS improves data security in archival storage situations. Adjust the relative priority of `scrub` with <<zfs-advanced-tuning-scrub_delay,`vfs.zfs.scrub_delay`>> to prevent the scrub from degrading the performance of other workloads on the pool."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2816
+#, no-wrap
+msgid "[[zfs-term-quota]]Dataset Quota"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2827
+#, no-wrap
+msgid ""
+"ZFS provides fast and accurate dataset, user, and group space accounting as well as quotas and space reservations. This gives the administrator fine grained control over space allocation and allows reserving space for critical file systems. \n"
+"\n"
+"ZFS supports different types of quotas: the dataset quota, the <<zfs-term-refquota,reference quota (refquota)>>, the <<zfs-term-userquota,user quota>>, and the <<zfs-term-groupquota,group quota>>.\n"
+"\n"
+"Quotas limit the total size of a dataset and its descendants, including snapshots of the dataset, child datasets, and the snapshots of those datasets.\n"
+"\n"
+"[NOTE]\n"
+"====\n"
+"Volumes do not support quotas, as the `volsize` property acts as an implicit quota.\n"
+"===="
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2828
+#, no-wrap
+msgid "[[zfs-term-refquota]]Reference Quota"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2830
+#, no-wrap
+msgid "A reference quota limits the amount of space a dataset can consume by enforcing a hard limit. This hard limit includes space referenced by the dataset alone and does not include space used by descendants, such as file systems or snapshots."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2831
+#, no-wrap
+msgid "[[zfs-term-userquota]]User Quota"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2833
+#, no-wrap
+msgid "User quotas are useful to limit the amount of space used by the specified user."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2834
+#, no-wrap
+msgid "[[zfs-term-groupquota]]Group Quota"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2836
+#, no-wrap
+msgid "The group quota limits the amount of space that a specified group can consume."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2837
+#, no-wrap
+msgid "[[zfs-term-reservation]]Dataset Reservation"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2841
+#, no-wrap
+msgid ""
+"The `reservation` property makes it possible to guarantee an amount of space for a specific dataset and its descendants. This means that setting a 10 GB reservation on [.filename]#storage/home/bob# prevents other datasets from using up all free space, reserving at least 10 GB of space for this dataset. Unlike a regular <<zfs-term-refreservation,`refreservation`>>, space used by snapshots and descendants is not counted against the reservation. For example, if taking a snapshot of [.filename]#storage/home/bob#, enough disk space other than the `refreservation` amount must exist for the operation to succeed. Descendants of the main data set are not counted in the `refreservation` amount and so do not encroach on the space set.\n"
+"\n"
+"Reservations of any sort are useful in situations such as planning and testing the suitability of disk space allocation in a new system, or ensuring that enough space is available on file systems for audio logs or system recovery procedures and files."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2842
+#, no-wrap
+msgid "[[zfs-term-refreservation]]Reference Reservation"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2844
+#, no-wrap
+msgid "The `refreservation` property makes it possible to guarantee an amount of space for the use of a specific dataset _excluding_ its descendants. This means that setting a 10 GB reservation on [.filename]#storage/home/bob#, and another dataset tries to use the free space, reserving at least 10 GB of space for this dataset. In contrast to a regular <<zfs-term-reservation,reservation>>, space used by snapshots and descendant datasets is not counted against the reservation. For example, if taking a snapshot of [.filename]#storage/home/bob#, enough disk space other than the `refreservation` amount must exist for the operation to succeed. Descendants of the main data set are not counted in the `refreservation` amount and so do not encroach on the space set."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2845
+#, no-wrap
+msgid "[[zfs-term-resilver]]Resilver"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2846
+#, no-wrap
+msgid "When replacing a failed disk, ZFS must fill the new disk with the lost data. _Resilvering_ is the process of using the parity information distributed across the remaining drives to calculate and write the missing data to the new drive."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2847
+#, no-wrap
+msgid "[[zfs-term-online]]Online"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2849
+#, no-wrap
+msgid "A pool or vdev in the `Online` state has its member devices connected and fully operational. Individual devices in the `Online` state are functioning."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2850
+#, no-wrap
+msgid "[[zfs-term-offline]]Offline"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2852
+#, no-wrap
+msgid "The administrator puts individual devices in an `Offline` state if enough redundancy exists to avoid putting the pool or vdev into a <<zfs-term-faulted,Faulted>> state. An administrator may choose to offline a disk in preparation for replacing it, or to make it easier to identify."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2853
+#, no-wrap
+msgid "[[zfs-term-degraded]]Degraded"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2855
+#, no-wrap
+msgid "A pool or vdev in the `Degraded` state has one or more disks that disappeared or failed. The pool is still usable, but if other devices fail, the pool may become unrecoverable. Reconnecting the missing devices or replacing the failed disks will return the pool to an <<zfs-term-online,Online>> state after the reconnected or new device has completed the <<zfs-term-resilver,Resilver>> process."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2856
+#, no-wrap
+msgid "[[zfs-term-faulted]]Faulted"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/handbook/zfs/_index.adoc:2857
+#, no-wrap
+msgid "A pool or vdev in the `Faulted` state is no longer operational. Accessing the data is no longer possible. A pool or vdev enters the `Faulted` state when the number of missing or failed devices exceeds the level of redundancy in the vdev. If reconnecting missing devices the pool will return to an <<zfs-term-online,Online>> state. Insufficient redundancy to compensate for the number of failed disks loses the pool contents and requires restoring from backups."
+msgstr ""
diff --git a/documentation/content/en/books/porters-handbook/_index.adoc b/documentation/content/en/books/porters-handbook/_index.adoc
index 48338f9c5f..bbcbda3406 100644
--- a/documentation/content/en/books/porters-handbook/_index.adoc
+++ b/documentation/content/en/books/porters-handbook/_index.adoc
@@ -2,7 +2,7 @@
title: FreeBSD Porter's Handbook
authors:
- author: The FreeBSD Documentation Project
-copyright: 2000-2021 The FreeBSD Documentation Project
+copyright: 2000-2023 The FreeBSD Documentation Project
description: Essential reading if you plan on providing a port of a third party piece of software
trademarks: ["freebsd", "sun", "unix", "general"]
next: books/porters-handbook/porting-why
diff --git a/documentation/content/en/books/porters-handbook/_index.po b/documentation/content/en/books/porters-handbook/_index.po
new file mode 100644
index 0000000000..6ca615b82e
--- /dev/null
+++ b/documentation/content/en/books/porters-handbook/_index.po
@@ -0,0 +1,35 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:20-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/porters-handbook/_index.adoc:1
+#, no-wrap
+msgid "Essential reading if you plan on providing a port of a third party piece of software"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/_index.adoc:1
+#: documentation/content/en/books/porters-handbook/_index.adoc:17
+#, no-wrap
+msgid "FreeBSD Porter's Handbook"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/_index.adoc:48
+msgid "'''"
+msgstr ""
diff --git a/documentation/content/en/books/porters-handbook/book.adoc b/documentation/content/en/books/porters-handbook/book.adoc
index 4a52500ca8..f3b6ccbe35 100644
--- a/documentation/content/en/books/porters-handbook/book.adoc
+++ b/documentation/content/en/books/porters-handbook/book.adoc
@@ -2,7 +2,7 @@
title: FreeBSD Porter's Handbook
authors:
- author: The FreeBSD Documentation Project
-copyright: 2000-2021 The FreeBSD Documentation Project
+copyright: 2000-2023 The FreeBSD Documentation Project
description: Essential reading if you plan on providing a port of a third party piece of software
trademarks: ["freebsd", "sun", "unix", "general"]
tags: ["FreeBSD Porter's Handbook", "Porting", "FreeBSD Ports Collection"]
diff --git a/documentation/content/en/books/porters-handbook/book.po b/documentation/content/en/books/porters-handbook/book.po
new file mode 100644
index 0000000000..dc9512f4b1
--- /dev/null
+++ b/documentation/content/en/books/porters-handbook/book.po
@@ -0,0 +1,35 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:20-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/porters-handbook/book.adoc:1
+#, no-wrap
+msgid "Essential reading if you plan on providing a port of a third party piece of software"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/book.adoc:1
+#: documentation/content/en/books/porters-handbook/book.adoc:12
+#, no-wrap
+msgid "FreeBSD Porter's Handbook"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/book.adoc:48
+msgid "'''"
+msgstr ""
diff --git a/documentation/content/en/books/porters-handbook/flavors/_index.adoc b/documentation/content/en/books/porters-handbook/flavors/_index.adoc
index 46bace6d07..ee4aab2e89 100644
--- a/documentation/content/en/books/porters-handbook/flavors/_index.adoc
+++ b/documentation/content/en/books/porters-handbook/flavors/_index.adoc
@@ -6,7 +6,7 @@ description: Flavors are a way to have multiple variations of a port
tags: ["Ports", "Flavors", "introduction", "how-to", "guide"]
showBookMenu: true
weight: 7
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/flavors/"
---
[[flavors]]
@@ -164,31 +164,30 @@ To make the [.filename]#Makefile# easier to write, a few flavors helpers exist.
This list of helpers will set their variable:
-* `_flavor__PKGNAMEPREFIX`
-* `_flavor__PKGNAMESUFFIX`
-* `_flavor__PLIST`
-* `_flavor__DESCR`
+* `__flavor___PKGNAMEPREFIX`
+* `__flavor___PKGNAMESUFFIX`
+* `__flavor___PLIST`
+* `__flavor___DESCR`
This list of helpers will append to their variable:
-* `_flavor__CONFLICTS`
-* `_flavor__CONFLICTS_BUILD`
-* `_flavor__CONFLICTS_INSTALL`
-* `_flavor__PKG_DEPENDS`
-* `_flavor__EXTRACT_DEPENDS`
-* `_flavor__PATCH_DEPENDS`
-* `_flavor__FETCH_DEPENDS`
-* `_flavor__BUILD_DEPENDS`
-* `_flavor__LIB_DEPENDS`
-* `_flavor__RUN_DEPENDS`
-* `_flavor__TEST_DEPENDS`
-
+* `__flavor___CONFLICTS`
+* `__flavor___CONFLICTS_BUILD`
+* `__flavor___CONFLICTS_INSTALL`
+* `__flavor___PKG_DEPENDS`
+* `__flavor___EXTRACT_DEPENDS`
+* `__flavor___PATCH_DEPENDS`
+* `__flavor___FETCH_DEPENDS`
+* `__flavor___BUILD_DEPENDS`
+* `__flavor___LIB_DEPENDS`
+* `__flavor___RUN_DEPENDS`
+* `__flavor___TEST_DEPENDS`
[[flavors-helpers-ex1]]
.Flavor Specific `PKGNAME`
[example]
====
-As all packages must have a different package name, flavors must change theirs, using `_flavor__PKGNAMEPREFIX` and `_flavor__PKGNAMESUFFIX` makes this easy:
+As all packages must have a different package name, flavors must change theirs, using `__flavor___PKGNAMEPREFIX` and `__flavor___PKGNAMESUFFIX` makes this easy:
[.programlisting]
....
@@ -363,3 +362,16 @@ most applications that embed or otherwise use Lua should simply use `USES=lua`.
`LUA_FLAVOR` is available (and must be used) to depend on the correct version of dependencies regardless of whether the port used the `flavors` or `module` parameters.
See crossref:special[using-lua,Using Lua] for further information.
+
+[[flavors-auto-guile]]
+== `USES=guile` and Flavors
+
+When using crossref:uses[uses-guile,`guile:flavors`],
+the port will automatically have `FLAVORS` filled in with the Guile versions it supports.
+However, it is not expected that ordinary applications should use this feature;
+it is primarily intended for use by libraries and extensions,
+such as `guile-lib` or `guile-cairo`.
+
+`GUILE_FLAVOR` is available (and must be used) to depend on the correct version of flavored dependencies regardless of whether the port used the `flavors` parameter or not.
+
+See crossref:special[using-guile,Using Guile] for further information.
diff --git a/documentation/content/en/books/porters-handbook/flavors/_index.po b/documentation/content/en/books/porters-handbook/flavors/_index.po
new file mode 100644
index 0000000000..9f99570134
--- /dev/null
+++ b/documentation/content/en/books/porters-handbook/flavors/_index.po
@@ -0,0 +1,669 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-09-09 18:12-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:1
+#, no-wrap
+msgid "Flavors are a way to have multiple variations of a port"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:1
+#, no-wrap
+msgid "Chapter 7. Flavors"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:13
+#, no-wrap
+msgid "Flavors"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:51
+#, no-wrap
+msgid "An Introduction to Flavors"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:55
+msgid ""
+"Flavors are a way to have multiple variations of a port. The port is built "
+"multiple times, with variations."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:57
+msgid ""
+"For example, a port can have a normal version with many features and quite a "
+"few dependencies, and a light \"lite\" version with only basic features and "
+"minimal dependencies."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:59
+msgid ""
+"Another example could be, a port can have a GTK flavor and a QT flavor, "
+"depending on which toolkit it uses."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:61
+#, no-wrap
+msgid "Using FLAVORS"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:65
+msgid ""
+"To declare a port having multiple flavors, add `FLAVORS` to its [."
+"filename]#Makefile#. The first flavor in `FLAVORS` is the default flavor."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:69
+msgid ""
+"It can help simplify the logic of the [.filename]#Makefile# to also define "
+"`FLAVOR` as:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:73
+#, no-wrap
+msgid "FLAVOR?=\t${FLAVORS:[1]}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:79
+msgid ""
+"To distinguish flavors from options, which are always uppercase letters, "
+"flavor names can _only_ contain lowercase letters, numbers, and the "
+"underscore `_`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:82
+#, no-wrap
+msgid "Basic Flavors Usage"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:86
+msgid ""
+"If a port has a \"lite\" slave port, the slave port can be removed, and the "
+"port can be converted to flavors with:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:95
+#, no-wrap
+msgid ""
+"FLAVORS=\tdefault lite\n"
+"lite_PKGNAMESUFFIX=\t-lite\n"
+"[...]\n"
+".if ${FLAVOR:U} != lite\n"
+"[enable non lite features]\n"
+".endif\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:100
+#, no-wrap
+msgid "Another Basic Flavors Usage"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:104
+msgid ""
+"If a port has a `-nox11` slave port, the slave port can be removed, and the "
+"port can be converted to flavors with:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:114
+#, no-wrap
+msgid ""
+"FLAVORS=\tx11 nox11\n"
+"FLAVOR?=\t${FLAVORS:[1]}\n"
+"nox11_PKGNAMESUFFIX=\t-nox11\n"
+"[...]\n"
+".if ${FLAVOR} == x11\n"
+"[enable x11 features]\n"
+".endif\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:119
+#, no-wrap
+msgid "More Complex Flavors Usage"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:124
+msgid ""
+"Here is a slightly edited excerpt of what is present in package:devel/"
+"libpeas[], a port that uses the <<flavors-auto-python,Python flavors>>. "
+"With the default Python 2 and 3 versions being 2.7 and 3.6, it will "
+"automatically get `FLAVORS=py27 py36`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:129
+#, no-wrap
+msgid ""
+"USES=\t\tgnome python\n"
+"USE_PYTHON=\tflavors \n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:132
+#, no-wrap
+msgid ""
+".if ${FLAVOR:Upy27:Mpy2*} \n"
+"USE_GNOME=\tpygobject3 \n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:134
+#, no-wrap
+msgid "CONFIGURE_ARGS+=\t--enable-python2 --disable-python3\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:139
+#, no-wrap
+msgid ""
+"BUILD_WRKSRC=\t${WRKSRC}/loaders/python \n"
+"INSTALL_WRKSRC=\t${WRKSRC}/loaders/python \n"
+".else # py3*\n"
+"USE_GNOME+=\tpy3gobject3 \n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:142
+#, no-wrap
+msgid ""
+"CONFIGURE_ARGS+=\t--disable-python2 --enable-python3 \\\n"
+"\t\t\tac_cv_path_PYTHON3_CONFIG=${LOCALBASE}/bin/python${PYTHON_VER}-config \n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:146
+#, no-wrap
+msgid ""
+"BUILD_WRKSRC=\t${WRKSRC}/loaders/python3 \n"
+"INSTALL_WRKSRC=\t${WRKSRC}/loaders/python3 \n"
+".endif\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:150
+#, no-wrap
+msgid ""
+"py34_PLIST=\t${.CURDIR}/pkg-plist-py3 \n"
+"py35_PLIST=\t${.CURDIR}/pkg-plist-py3 \n"
+"py36_PLIST=\t${.CURDIR}/pkg-plist-py3\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:158
+msgid ""
+"This port does not use `USE_PYTHON=distutils` but needs Python flavors "
+"anyway. To guard against `FLAVOR` being empty, which would cause a man:"
+"make[1] error, use `${FLAVOR:U}` in string comparisons instead of `${FLAVOR}"
+"`. The Gnome Python gobject3 bindings have two different names, one for "
+"Python 2, pygobject3 and one for Python 3, py3gobject3. The `configure` "
+"script has to run in [.filename]#${WRKSRC}#, but we are only interested in "
+"building and installing the Python 2 or Python 3 parts of the software, so "
+"set the build and install base directories appropriately. Hint about the "
+"correct Python 3 config script path name. The packing list is different "
+"when the built with Python 3. As there are three possible Python 3 versions, "
+"set `PLIST` for all three using the <<flavors-using-helpers,helper>>."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:161
+#, no-wrap
+msgid "Flavors Helpers"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:164
+msgid ""
+"To make the [.filename]#Makefile# easier to write, a few flavors helpers "
+"exist."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:166
+msgid "This list of helpers will set their variable:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:168
+msgid "`__flavor___PKGNAMEPREFIX`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:169
+msgid "`__flavor___PKGNAMESUFFIX`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:170
+msgid "`__flavor___PLIST`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:171
+msgid "`__flavor___DESCR`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:173
+msgid "This list of helpers will append to their variable:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:175
+msgid "`__flavor___CONFLICTS`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:176
+msgid "`__flavor___CONFLICTS_BUILD`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:177
+msgid "`__flavor___CONFLICTS_INSTALL`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:178
+msgid "`__flavor___PKG_DEPENDS`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:179
+msgid "`__flavor___EXTRACT_DEPENDS`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:180
+msgid "`__flavor___PATCH_DEPENDS`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:181
+msgid "`__flavor___FETCH_DEPENDS`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:182
+msgid "`__flavor___BUILD_DEPENDS`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:183
+msgid "`__flavor___LIB_DEPENDS`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:184
+msgid "`__flavor___RUN_DEPENDS`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:185
+msgid "`__flavor___TEST_DEPENDS`"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:187
+#, no-wrap
+msgid "Flavor Specific `PKGNAME`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:191
+msgid ""
+"As all packages must have a different package name, flavors must change "
+"theirs, using `__flavor___PKGNAMEPREFIX` and `__flavor___PKGNAMESUFFIX` "
+"makes this easy:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:196
+#, no-wrap
+msgid ""
+"FLAVORS=\tnormal lite\n"
+"lite_PKGNAMESUFFIX=\t-lite\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:201
+#, no-wrap
+msgid "`USES=php` and Flavors"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:205
+msgid ""
+"When using crossref:uses[uses-php,`php`] with one of these arguments, "
+"`phpize`, `ext`, `zend`, or `pecl`, the port will automatically have "
+"`FLAVORS` filled in with the PHP versions it supports."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:207
+#, no-wrap
+msgid "Simple `USES=php` Extension"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:211
+msgid "This will generate package for all the supported versions:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:217
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:228
+#, no-wrap
+msgid ""
+"PORTNAME=\tsome-ext\n"
+"PORTVERSION=\t0.0.1\n"
+"PKGNAMEPREFIX=\t${PHP_PKGNAMEPREFIX}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:219
+#, no-wrap
+msgid "USES=\t\tphp:ext\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:222
+msgid "This will generate package for all the supported versions but 7.2:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:231
+#, no-wrap
+msgid ""
+"USES=\t\tphp:ext\n"
+"IGNORE_WITH_PHP=\t72\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:236
+#, no-wrap
+msgid "PHP Flavors with PHP Applications"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:239
+msgid "PHP applications can also be flavorized."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:241
+msgid ""
+"This allows generating packages for all PHP versions, so that users can use "
+"them with whatever version they need on their servers."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:245
+msgid ""
+"PHP applications that are flavorized _must_ append `PHP_PKGNAMESUFFIX` to "
+"their package names."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:248
+#, no-wrap
+msgid "Flavorizing a PHP Application"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:252
+msgid "Adding Flavors support to a PHP application is straightforward:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:256
+#, no-wrap
+msgid "PKGNAMESUFFIX=\t${PHP_PKGNAMESUFFIX}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:258
+#, no-wrap
+msgid "USES=\tphp:flavors\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:266
+msgid ""
+"When adding a dependency on a PHP flavored port, use `@${PHP_FLAVOR}`. "
+"_Never_ use `FLAVOR` directly."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:269
+#, no-wrap
+msgid "`USES=python` and Flavors"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:273
+msgid ""
+"When using crossref:uses[uses-python,`python`] and `USE_PYTHON=distutils`, "
+"the port will automatically have `FLAVORS` filled in with the Python "
+"versions it supports."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:275
+#, no-wrap
+msgid "Simple `USES=python`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:279
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:302
+msgid ""
+"Supposing the current Python supported versions are 2.7, 3.4, 3.5, and 3.6, "
+"and the default Python 2 and 3 versions are 2.7 and 3.6, a port with:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:284
+#, no-wrap
+msgid ""
+"USES=\tpython\n"
+"USE_PYTHON=\tdistutils\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:287
+msgid "Will get these flavors: `py27`, and `py36`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:292
+#, no-wrap
+msgid ""
+"USES=\tpython\n"
+"USE_PYTHON=\tdistutils allflavors\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:295
+msgid "Will get these flavors: `py27`, `py34`, `py35` and `py36`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:298
+#, no-wrap
+msgid "`USES=python` with Version Requirements"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:307
+#, no-wrap
+msgid ""
+"USES=\tpython:-3.5\n"
+"USE_PYTHON=\tdistutils\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:310
+msgid "Will get this flavor: `py27`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:315
+#, no-wrap
+msgid ""
+"USES=\tpython:-3.5\n"
+"USE_PYTHON=\tdistutils allflavors\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:318
+msgid "Will get these flavors: `py27`, `py34`, and `py35`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:323
+#, no-wrap
+msgid ""
+"USES=\tpython:3.4+\n"
+"USE_PYTHON=\tdistutils\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:326
+msgid "Will get this flavor: `py36`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:331
+#, no-wrap
+msgid ""
+"USES=\tpython:3.4+\n"
+"USE_PYTHON=\tdistutils allflavors\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:334
+msgid "Will get these flavors: `py34`, `py35`, and `py36`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:338
+msgid ""
+"`PY_FLAVOR` is available to depend on the correct version of Python "
+"modules. All dependencies on flavored Python ports should use `PY_FLAVOR`, "
+"and not `FLAVOR` directly.."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:340
+#, no-wrap
+msgid "For a Port Not Using `distutils`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:344
+msgid ""
+"If the default Python 3 version is 3.6, the following will set `PY_FLAVOR` "
+"to `py36`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:348
+#, no-wrap
+msgid "RUN_DEPENDS=\t${PYTHON_PKGNAMEPREFIX}mutagen>0:audio/py-mutagen@${PY_FLAVOR}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:350
+#, no-wrap
+msgid "USES=\tpython:3.5+\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:355
+#, no-wrap
+msgid "`USES=lua` and Flavors"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:361
+msgid ""
+"When using crossref:uses[uses-lua,`lua:module`] or crossref:uses[uses-lua,"
+"`lua:flavors`], the port will automatically have `FLAVORS` filled in with "
+"the Lua versions it supports. However, it is not expected that ordinary "
+"applications (rather than Lua modules) should use this feature; most "
+"applications that embed or otherwise use Lua should simply use `USES=lua`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:363
+msgid ""
+"`LUA_FLAVOR` is available (and must be used) to depend on the correct "
+"version of dependencies regardless of whether the port used the `flavors` or "
+"`module` parameters."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:365
+msgid "See crossref:special[using-lua,Using Lua] for further information."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:367
+#, no-wrap
+msgid "`USES=guile` and Flavors"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:374
+msgid ""
+"When using crossref:uses[uses-guile,`guile:flavors`], the port will "
+"automatically have `FLAVORS` filled in with the Guile versions it supports. "
+"However, it is not expected that ordinary applications should use this "
+"feature; it is primarily intended for use by libraries and extensions, such "
+"as `guile-lib` or `guile-cairo`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:376
+msgid ""
+"`GUILE_FLAVOR` is available (and must be used) to depend on the correct "
+"version of flavored dependencies regardless of whether the port used the "
+"`flavors` parameter or not."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/flavors/_index.adoc:377
+msgid "See crossref:special[using-guile,Using Guile] for further information."
+msgstr ""
diff --git a/documentation/content/en/books/porters-handbook/keeping-up/_index.adoc b/documentation/content/en/books/porters-handbook/keeping-up/_index.adoc
index 9061a38d2b..5124de0f95 100644
--- a/documentation/content/en/books/porters-handbook/keeping-up/_index.adoc
+++ b/documentation/content/en/books/porters-handbook/keeping-up/_index.adoc
@@ -6,7 +6,7 @@ description: How to keep up the FreeBSD Ports Collection
tags: ["keeping up", "ports", "updating", "FreshPorts"]
showBookMenu: true
weight: 16
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/keeping-up/"
---
[[keeping-up]]
@@ -53,7 +53,7 @@ Here is some information on how to keep up.
[[freshports]]
== FreshPorts
-One of the easiest ways to learn about updates that have already been committed is by subscribing to http://www.FreshPorts.org/[FreshPorts].
+One of the easiest ways to learn about updates that have already been committed is by subscribing to https://www.FreshPorts.org/[FreshPorts].
Multiple ports can be monitored.
Maintainers are strongly encouraged to subscribe, because they will receive notification of not only their own changes, but also any changes that any other FreeBSD committer has made.
(These are often necessary to keep up with changes in the underlying ports framework-although it would be most polite to receive an advance heads-up from those committing such changes, sometimes this is overlooked or impractical.
@@ -71,7 +71,7 @@ If subscribed to this service, a committer will receive notifications of any err
== The Web Interface to the Source Repository
It is possible to browse the files in the source repository by using a web interface.
-Changes that affect the entire port system are now documented in the https://cgit.freebsd.org/ports/tree/CHANGES[CHANGES] file.
+Changes that affect the entire port system are now documented in the https://cgit.FreeBSD.org/ports/tree/CHANGES[CHANGES] file.
Changes that affect individual ports are now documented in the https://cgit.FreeBSD.org/ports/tree/UPDATING[UPDATING] file.
However, the definitive answer to any question is undoubtedly to read the source code of https://cgit.FreeBSD.org/ports/tree/Mk/bsd.port.mk[bsd.port.mk], and associated files.
@@ -97,7 +97,7 @@ Ports that are marked with `BROKEN` will still be attempted, to see if the under
The build cluster is dedicated to building the latest release of each port with distfiles that have already been fetched.
However, as the Internet continually changes, distfiles can quickly go missing.
-http://portscout.FreeBSD.org[Portscout], the FreeBSD Ports distfile scanner, attempts to query every download site for every port to find out if each distfile is still available.
+https://portscout.FreeBSD.org/[Portscout], the FreeBSD Ports distfile scanner, attempts to query every download site for every port to find out if each distfile is still available.
Portscout can generate HTML reports and send emails about newly available ports to those who request them.
Unless not otherwise subscribed, maintainers are asked to check periodically for changes, either by hand or using the RSS feed.
@@ -107,6 +107,6 @@ The search function allows for searching by email address for a specific maintai
Upon clicking on a maintainer's email address, a list of all of their ports is displayed, along with port category, current version number, whether or not there is a new version, when the port was last updated, and finally when it was last checked.
A search function on this page allows the user to search for a specific port.
-Clicking on a port name in the list displays the http://freshports.org[FreshPorts] port information.
+Clicking on a port name in the list displays the https://freshports.org/[FreshPorts] port information.
-Additional documentation is available in the https://github.com/freebsd/portscout[Portscout repository].
+Additional documentation is available in the https://github.com/freebsd/portscout/[Portscout repository].
diff --git a/documentation/content/en/books/porters-handbook/keeping-up/_index.po b/documentation/content/en/books/porters-handbook/keeping-up/_index.po
new file mode 100644
index 0000000000..ab30f8f039
--- /dev/null
+++ b/documentation/content/en/books/porters-handbook/keeping-up/_index.po
@@ -0,0 +1,198 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-09-09 20:51-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:1
+#, no-wrap
+msgid "How to keep up the FreeBSD Ports Collection"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:1
+#, no-wrap
+msgid "Chapter 16. Keeping Up"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:13
+#, no-wrap
+msgid "Keeping Up"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:52
+msgid ""
+"The FreeBSD Ports Collection is constantly changing. Here is some "
+"information on how to keep up."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:54
+#, no-wrap
+msgid "FreshPorts"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:62
+msgid ""
+"One of the easiest ways to learn about updates that have already been "
+"committed is by subscribing to https://www.FreshPorts.org/[FreshPorts]. "
+"Multiple ports can be monitored. Maintainers are strongly encouraged to "
+"subscribe, because they will receive notification of not only their own "
+"changes, but also any changes that any other FreeBSD committer has made. "
+"(These are often necessary to keep up with changes in the underlying ports "
+"framework-although it would be most polite to receive an advance heads-up "
+"from those committing such changes, sometimes this is overlooked or "
+"impractical. Also, in some cases, the changes are very minor in nature. We "
+"expect everyone to use their best judgement in these cases.)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:66
+msgid ""
+"To use FreshPorts, an account is required. Those with registered email "
+"addresses at `@FreeBSD.org` will see the opt-in link on the right-hand side "
+"of the web pages. Those who already have a FreshPorts account but are not "
+"using a `@FreeBSD.org` email address can change the email to `@FreeBSD.org`, "
+"subscribe, then change it back again."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:69
+msgid ""
+"FreshPorts also has a sanity test feature which automatically tests each "
+"commit to the FreeBSD ports tree. If subscribed to this service, a "
+"committer will receive notifications of any errors which FreshPorts detects "
+"during sanity testing of their commits."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:71
+#, no-wrap
+msgid "The Web Interface to the Source Repository"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:77
+msgid ""
+"It is possible to browse the files in the source repository by using a web "
+"interface. Changes that affect the entire port system are now documented in "
+"the https://cgit.FreeBSD.org/ports/tree/CHANGES[CHANGES] file. Changes that "
+"affect individual ports are now documented in the https://cgit.FreeBSD.org/"
+"ports/tree/UPDATING[UPDATING] file. However, the definitive answer to any "
+"question is undoubtedly to read the source code of https://cgit.FreeBSD.org/"
+"ports/tree/Mk/bsd.port.mk[bsd.port.mk], and associated files."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:79
+#, no-wrap
+msgid "The FreeBSD Ports Mailing List"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:83
+msgid ""
+"As a ports maintainer, consider subscribing to {freebsd-ports}. Important "
+"changes to the way ports work will be announced there, and then committed to "
+"[.filename]#CHANGES#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:85
+msgid ""
+"If the volume of messages on this mailing list is too high, consider "
+"following {freebsd-ports-announce} which contains only announcements."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:87
+#, no-wrap
+msgid "The FreeBSD Port Building Cluster"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:90
+msgid ""
+"One of the least-publicized strengths of FreeBSD is that an entire cluster "
+"of machines is dedicated to continually building the Ports Collection, for "
+"each of the major OS releases and for each Tier-1 architecture."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:94
+msgid ""
+"Individual ports are built unless they are specifically marked with "
+"`IGNORE`. Ports that are marked with `BROKEN` will still be attempted, to "
+"see if the underlying problem has been resolved. (This is done by passing "
+"`TRYBROKEN` to the port's [.filename]#Makefile#.)"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:96
+#, no-wrap
+msgid "Portscout: the FreeBSD Ports Distfile Scanner"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:103
+msgid ""
+"The build cluster is dedicated to building the latest release of each port "
+"with distfiles that have already been fetched. However, as the Internet "
+"continually changes, distfiles can quickly go missing. https://portscout."
+"FreeBSD.org/[Portscout], the FreeBSD Ports distfile scanner, attempts to "
+"query every download site for every port to find out if each distfile is "
+"still available. Portscout can generate HTML reports and send emails about "
+"newly available ports to those who request them. Unless not otherwise "
+"subscribed, maintainers are asked to check periodically for changes, either "
+"by hand or using the RSS feed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:106
+msgid ""
+"Portscout's first page gives the email address of the port maintainer, the "
+"number of ports the maintainer is responsible for, the number of those ports "
+"with new distfiles, and the percentage of those ports that are out-of-date. "
+"The search function allows for searching by email address for a specific "
+"maintainer, and for selecting whether only out-of-date ports are shown."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:109
+msgid ""
+"Upon clicking on a maintainer's email address, a list of all of their ports "
+"is displayed, along with port category, current version number, whether or "
+"not there is a new version, when the port was last updated, and finally when "
+"it was last checked. A search function on this page allows the user to "
+"search for a specific port."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:111
+msgid ""
+"Clicking on a port name in the list displays the https://freshports.org/"
+"[FreshPorts] port information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/keeping-up/_index.adoc:112
+msgid ""
+"Additional documentation is available in the https://github.com/freebsd/"
+"portscout/[Portscout repository]."
+msgstr ""
diff --git a/documentation/content/en/books/porters-handbook/makefiles/_index.adoc b/documentation/content/en/books/porters-handbook/makefiles/_index.adoc
index 10a76f01da..742bfca9ec 100644
--- a/documentation/content/en/books/porters-handbook/makefiles/_index.adoc
+++ b/documentation/content/en/books/porters-handbook/makefiles/_index.adoc
@@ -6,7 +6,7 @@ description: Configuring the Makefile for FreeBSD Ports
tags: ["makefiles", "configuring", "naming", "versions"]
showBookMenu: true
weight: 5
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/makefiles/"
---
[[makefiles]]
@@ -299,6 +299,7 @@ Examples of when `PORTREVISION` must be bumped:
* Changes in the packing list or the install-time behavior of the package. For example, a change to a script which generates initial data for the package, like man:ssh[1] host keys.
* Version bump of a port's shared library dependency (in this case, someone trying to install the old package after installing a newer version of the dependency will fail since it will look for the old libfoo.x instead of libfoo.(x+1)).
* Silent changes to the port distfile which have significant functional differences. For example, changes to the distfile requiring a correction to [.filename]#distinfo# with no corresponding change to `DISTVERSION`, where a `diff -ru` of the old and new versions shows non-trivial changes to the code.
+* Changes to `MAINTAINER`.
Examples of changes which do not require a `PORTREVISION` bump:
@@ -306,7 +307,6 @@ Examples of changes which do not require a `PORTREVISION` bump:
* Changes to `MASTER_SITES` or other functional changes to the port which do not affect the resulting package.
* Trivial patches to the distfile such as correction of typos, which are not important enough that users of the package have to go to the trouble of upgrading.
* Build fixes which cause a package to become compilable where it was previously failing. As long as the changes do not introduce any functional change on any other platforms on which the port did previously build. Since `PORTREVISION` reflects the content of the package, if the package was not previously buildable then there is no need to increase `PORTREVISION` to mark a change.
-* Changes to `MAINTAINER`.
A rule of thumb is to decide whether a change committed to a port is something which _some_ people would benefit from having.
Either because of an enhancement, fix, or by virtue that the new package will actually work at all.
@@ -643,7 +643,7 @@ For non-virtual categories, there is a one-line description in `COMMENT` in that
|
|[.filename]#afterstep#`*`
-|Ports to support the http://www.afterstep.org[AfterStep] window manager.
+|Ports to support the http://www.afterstep.org/[AfterStep] window manager.
|
|[.filename]#arabic#
@@ -751,7 +751,7 @@ For non-virtual categories, there is a one-line description in `COMMENT` in that
|
|[.filename]#gnome#`*`
-|Ports from the http://www.gnome.org[GNOME] Project.
+|Ports from the https://www.gnome.org/[GNOME] Project.
|
|[.filename]#gnustep#`*`
@@ -791,19 +791,19 @@ For non-virtual categories, there is a one-line description in `COMMENT` in that
|The [.filename]#java# category must not be the only one for a port. Save for ports directly related to the Java language, porters are also encouraged not to use [.filename]#java# as the main category of a port.
|[.filename]#kde#`*`
-|Ports from the http://www.kde.org[KDE] Project (generic).
+|Ports from the https://www.kde.org/[KDE] Project (generic).
|
|[.filename]#kde-applications#`*`
-|Applications from the http://www.kde.org[KDE] Project.
+|Applications from the https://www.kde.org/[KDE] Project.
|
|[.filename]#kde-frameworks#`*`
-|Add-on libraries from the http://www.kde.org[KDE] Project for programming with Qt.
+|Add-on libraries from the https://www.kde.org/[KDE] Project for programming with Qt.
|
|[.filename]#kde-plasma#`*`
-|Desktop from the http://www.kde.org[KDE] Project.
+|Desktop from the https://www.kde.org/[KDE] Project.
|
|[.filename]#kld#`*`
@@ -887,7 +887,7 @@ For non-virtual categories, there is a one-line description in `COMMENT` in that
|
|[.filename]#plan9#`*`
-|Various programs from http://www.cs.bell-labs.com/plan9dist/[Plan9].
+|Various programs from https://9p.io/wiki/plan9/Download/index.html[Plan9].
|
|[.filename]#polish#
@@ -907,15 +907,15 @@ For non-virtual categories, there is a one-line description in `COMMENT` in that
|Desktop publishing tools (previewers, etc.) belong here too.
|[.filename]#python#`*`
-|Software related to the http://www.python.org/[Python] language.
+|Software related to the https://www.python.org/[Python] language.
|
|[.filename]#ruby#`*`
-|Software related to the http://www.ruby-lang.org/[Ruby] language.
+|Software related to the https://www.ruby-lang.org/[Ruby] language.
|
|[.filename]#rubygems#`*`
-|Ports of http://www.rubygems.org/[RubyGems] packages.
+|Ports of https://www.rubygems.org/[RubyGems] packages.
|
|[.filename]#russian#
@@ -1015,11 +1015,11 @@ For non-virtual categories, there is a one-line description in `COMMENT` in that
|
|[.filename]#xfce#`*`
-|Ports related to the http://www.xfce.org/[Xfce] desktop environment.
+|Ports related to the https://www.xfce.org/[Xfce] desktop environment.
|
|[.filename]#zope#`*`
-|http://www.zope.org/[Zope] support.
+|https://www.zope.org/[Zope] support.
|
|===
@@ -1048,7 +1048,7 @@ Too often, new ports are imported to the wrong category only to be moved right a
As the Ports Collection has grown over time, various new categories have been introduced.
New categories can either be _virtual_ categories-those that do not have a corresponding subdirectory in the ports tree- or _physical_ categories-those that do. This section discusses the issues involved in creating a new physical category.
-Read it thouroughly before proposing a new one.
+Read it thoroughly before proposing a new one.
Our existing practice has been to avoid creating a new physical category unless either a large number of ports would logically belong to it, or the ports that would belong to it are a logically distinct group that is of limited general interest (for instance, categories related to spoken human languages), or preferably both.
@@ -1125,7 +1125,7 @@ The order into which the ports framework, and pkg, will sort versions is checked
....
% pkg version -t 9.9.9 9.9.9.p1
> <.>
-% pkg version -t 9.9.9 9.9.9p1
+% pkg version -t 9.9.9 9.9.9p1
< <.>
....
@@ -1137,14 +1137,15 @@ In the port [.filename]#Makefile#, for example package:dns/bind99[], it is achie
[.programlisting]
....
PORTNAME= bind
-PORTVERSION= ${ISCVERSION:S/-P/P/:S/b/.b/:S/a/.a/:S/rc/.rc/}
+PORTVERSION= ${ISCVERSION:S/-P/P/:S/b/.b/:S/a/.a/:S/rc/.rc/}
CATEGORIES= dns net
-MASTER_SITES= ISC/bind9/${ISCVERSION}
+MASTER_SITES= ISC/bind9/${ISCVERSION}
PKGNAMESUFFIX= 99
-DISTNAME= ${PORTNAME}-${ISCVERSION}
+DISTNAME= ${PORTNAME}-${ISCVERSION}
MAINTAINER= mat@FreeBSD.org
COMMENT= BIND DNS suite with updated DNSSEC and DNS64
+WWW= https://www.isc.org/bind/
LICENSE= ISCL
@@ -1437,8 +1438,15 @@ MASTER_SITE_SUBDIR= stardict/WyabdcRealPeopleTTS/${PORTVERSION}
[[makefile-master_sites-github]]
=== `USE_GITHUB`
-If the distribution file comes from a specific commit or tag on https://github.com[GitHub] for which there is no officially released file,
+If the distribution file comes from a specific commit or tag on https://github.com/[GitHub] for which there is no officially released file,
there is an easy way to set the right `DISTNAME` and `MASTER_SITES` automatically.
+
+[WARNING]
+====
+As of 2023-02-21 link:https://github.blog/2023-02-21-update-on-the-future-stability-of-source-code-archives-and-hashes/[GitHub] have announced that source downloads will be stable for a year.
+Please switch to release assets and if not available ask upstream to generate ones.
+====
+
These variables are available:
[[makefile-master_sites-github-description]]
@@ -1479,7 +1487,7 @@ Do not use `GH_TUPLE` for the default distribution file, as it has no default.
[example]
====
-While trying to make a port for version `1.2.7` of pkg from the FreeBSD user on github, at https://github.com/freebsd/pkg[], The [.filename]#Makefile# would end up looking like this (slightly stripped for the example):
+While trying to make a port for version `1.2.7` of pkg from the FreeBSD user on github, at https://github.com/freebsd/pkg/[], The [.filename]#Makefile# would end up looking like this (slightly stripped for the example):
[.programlisting]
....
@@ -1497,7 +1505,7 @@ It will automatically have `MASTER_SITES` set to `GH` and `WRKSRC` to `${WRKDIR}
.More Complete Use of `USE_GITHUB`
[example]
====
-While trying to make a port for the bleeding edge version of pkg from the FreeBSD user on github, at https://github.com/freebsd/pkg[], the [.filename]#Makefile# ends up looking like this (slightly stripped for the example):
+While trying to make a port for the bleeding edge version of pkg from the FreeBSD user on github, at https://github.com/freebsd/pkg/[], the [.filename]#Makefile# ends up looking like this (slightly stripped for the example):
[.programlisting]
....
@@ -1754,7 +1762,7 @@ See man:git-submodule[1] for more information.
The problem with submodules is that each is a separate repository.
As such, they each must be fetched separately.
-Using package:finance/moneymanagerex[] as an example, its GitHub repository is https://github.com/moneymanagerex/moneymanagerex[].
+Using package:finance/moneymanagerex[] as an example, its GitHub repository is https://github.com/moneymanagerex/moneymanagerex/[].
It has a https://github.com/moneymanagerex/moneymanagerex/blob/master/.gitmodules[.gitmodules] file at the root.
This file describes all the submodules used in this repository, and lists additional repositories needed.
This file will tell what additional repositories are needed:
@@ -1840,7 +1848,7 @@ GH_TUPLE= utelle:wxsqlite3:v3.4.0:wxsqlite3/lib/wxsqlite3 \
[[makefile-master_sites-gitlab]]
=== `USE_GITLAB`
-Similar to GitHub, if the distribution file comes from https://gitlab.com[gitlab.com] or is hosting the GitLab software, these variables are available for use and might need to be set.
+Similar to GitHub, if the distribution file comes from https://gitlab.com/[gitlab.com] or is hosting the GitLab software, these variables are available for use and might need to be set.
[[makefile-master_sites-gitlab-description]]
.`USE_GITLAB` Description
@@ -1852,7 +1860,7 @@ Similar to GitHub, if the distribution file comes from https://gitlab.com[gitlab
|`GL_SITE`
|Site name hosting the GitLab project
-|https://gitlab.com
+|https://gitlab.com/
|`GL_ACCOUNT`
|Account name of the GitLab user hosting the project
@@ -1878,7 +1886,7 @@ Similar to GitHub, if the distribution file comes from https://gitlab.com[gitlab
.Simple Use of `USE_GITLAB`
[example]
====
-While trying to make a port for version `1.14` of libsignon-glib from the accounts-sso user on gitlab.com, at https://gitlab.com/accounts-sso/libsignon-glib[], The [.filename]#Makefile# would end up looking like this for fetching the distribution files:
+While trying to make a port for version `1.14` of libsignon-glib from the accounts-sso user on gitlab.com, at https://gitlab.com/accounts-sso/libsignon-glib/[], The [.filename]#Makefile# would end up looking like this for fetching the distribution files:
[.programlisting]
....
@@ -1890,7 +1898,7 @@ GL_ACCOUNT= accounts-sso
GL_COMMIT= e90302e342bfd27bc8c9132ab9d0ea3d8723fd03
....
-It will automatically have `MASTER_SITES` set to https://gitlab.com[gitlab.com] and `WRKSRC` to `${WRKDIR}/libsignon-glib-e90302e342bfd27bc8c9132ab9d0ea3d8723fd03-e90302e342bfd27bc8c9132ab9d0ea3d8723fd03`.
+It will automatically have `MASTER_SITES` set to https://gitlab.com/[gitlab.com] and `WRKSRC` to `${WRKDIR}/libsignon-glib-e90302e342bfd27bc8c9132ab9d0ea3d8723fd03-e90302e342bfd27bc8c9132ab9d0ea3d8723fd03`.
====
[[makefile-master_sites-gitlab-ex2]]
@@ -1898,7 +1906,7 @@ It will automatically have `MASTER_SITES` set to https://gitlab.com[gitlab.com]
[example]
====
-A more complete use of the above if port had no versioning and foobar from the foo user on project bar on a self hosted GitLab site `https://gitlab.example.com`, the [.filename]#Makefile# ends up looking like this for fetching distribution files:
+A more complete use of the above if port had no versioning and foobar from the foo user on project bar on a self hosted GitLab site `https://gitlab.example.com/`, the [.filename]#Makefile# ends up looking like this for fetching distribution files:
[.programlisting]
....
@@ -2515,6 +2523,34 @@ COMMENT= Cat chasing a mouse all over the screen
The COMMENT variable immediately follows the MAINTAINER variable in the [.filename]#Makefile#.
+[[makefile-www]]
+== Project website
+
+Each port should point to a website that provides more information about the software.
+
+Whenever possible, this should be the official project website maintained by the developers of the software.
+
+[.programlisting]
+....
+WWW= https://ffmpeg.org/
+....
+
+But it can also be a directory or resource in the source code repository:
+
+[.programlisting]
+....
+WWW= https://sourceforge.net/projects/mpd/
+....
+
+The WWW variable immediately follows the COMMENT variable in the [.filename]#Makefile#.
+
+If the same content can be accessed via HTTP and HTTPS, the URL starting with `https://` shall be used.
+If the URI is the root of the website or directory, it must be terminated with a slash.
+
+This information used to be placed into the last line of the [.filename]#pkg-descr# file.
+It has been moved into the Makefile for easier maintenance and processing.
+Having a `WWW:` line at the end of the [.filename]#pkg-descr# file is deprecated.
+
[[licenses]]
== Licenses
@@ -2958,12 +2994,12 @@ For the predefined licenses, the default permissions are `dist-mirror dist-sell
|`none`
|`OFL10`
-|SIL Open Font License version 1.0 (http://scripts.sil.org/OFL)
+|SIL Open Font License version 1.0 (https://scripts.sil.org/OFL/)
|`FONTS`
|(default)
|`OFL11`
-|SIL Open Font License version 1.1 (http://scripts.sil.org/OFL)
+|SIL Open Font License version 1.1 (https://scripts.sil.org/OFL/)
|`FONTS`
|(default)
@@ -3160,7 +3196,7 @@ Groups the license belongs.
.Predefined License Groups List
[[licenses-license_groups-FSF]]
`FSF`::
-Free Software Foundation Approved, see the http://www.fsf.org/licensing[FSF Licensing & Compliance Team].
+Free Software Foundation Approved, see the https://www.fsf.org/licensing/[FSF Licensing & Compliance Team].
[[licenses-license_groups-GPL]]
`GPL`::
@@ -3168,11 +3204,11 @@ GPL Compatible
[[licenses-license_groups-OSI]]
`OSI`::
-OSI Approved, see the Open Source Initiative http://opensource.org/licenses[Open Source Licenses] page.
+OSI Approved, see the Open Source Initiative https://opensource.org/licenses/[Open Source Licenses] page.
[[licenses-license_groups-COPYFREE]]
`COPYFREE`::
-Comply with Copyfree Standard Definition, see the http://copyfree.org/standard/licenses[Copyfree Licenses] page.
+Comply with Copyfree Standard Definition, see the https://copyfree.org/standard/licenses/[Copyfree Licenses] page.
[[licenses-license_groups-FONTS]]
`FONTS`::
@@ -3351,7 +3387,7 @@ PORTSCOUT= limit:^0\.6\.4
+
[.programlisting]
....
-PORTSCOUT= site:http://pgfoundry.org/frs/?group_id=1000416
+PORTSCOUT= site:http://www.renpy.org/dl/release/
....
[[makefile-depend]]
@@ -3585,7 +3621,6 @@ Some ports need a specific, old GCC version, some require modern, recent version
It is typically set to `yes` (means always use stable, modern GCC from ports per `GCC_DEFAULT` in [.filename]#Mk/bsd.default-versions.mk#).
This is also the default value.
The exact version can also be specified, with a value such as `10`.
-The minimal required version can be specified as `10+`.
GCC from the base system is used when it satisfies the requested version, otherwise an appropriate compiler is built from ports, and `CC` and `CXX` are adjusted accordingly.
The `:build` argument following the version specifier adds only a build time dependency to the port.
@@ -3595,7 +3630,7 @@ For example:
[.programlisting]
....
USE_GCC=yes # port requires a current version of GCC
-USE_GCC=11+:build # port requires GCC 11 or later at build time only
+USE_GCC=11:build # port requires GCC 11 at build time only
....
====
@@ -5218,7 +5253,7 @@ Hence `.if` blocks are only needed when the installed files are large enough to
....
post-install:
${MKDIR} ${STAGEDIR}${DOCSDIR}
- ${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${STAGEDIR}${DOCSDIR}
+ ${INSTALL_DATA} ${WRKSRC}/docs/xvdocs.ps ${STAGEDIR}${DOCSDIR}
....
On the other hand, if there is a DOCS option in the port, install the documentation in a `post-install-DOCS-on` target.
diff --git a/documentation/content/en/books/porters-handbook/makefiles/_index.po b/documentation/content/en/books/porters-handbook/makefiles/_index.po
new file mode 100644
index 0000000000..df60947ca5
--- /dev/null
+++ b/documentation/content/en/books/porters-handbook/makefiles/_index.po
@@ -0,0 +1,11636 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-09-09 18:12-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1
+#, no-wrap
+msgid "Configuring the Makefile for FreeBSD Ports"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1
+#, no-wrap
+msgid "Chapter 5. Configuring the Makefile"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:13
+#, no-wrap
+msgid "Configuring the Makefile"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:54
+msgid ""
+"Configuring the [.filename]#Makefile# is pretty simple, and again we suggest "
+"looking at existing examples before starting. Also, there is a crossref:"
+"porting-samplem[porting-samplem,sample Makefile] in this handbook, so take a "
+"look and please follow the ordering of variables and sections in that "
+"template to make the port easier for others to read."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:56
+msgid ""
+"Consider these problems in sequence during the design of the new [."
+"filename]#Makefile#:"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:58
+#, no-wrap
+msgid "The Original Source"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:62
+msgid ""
+"Does it live in `DISTDIR` as a standard ``gzip``ped tarball named something "
+"like [.filename]#foozolix-1.2.tar.gz#? If so, go on to the next step. If "
+"not, the distribution file format might require overriding one or more of "
+"`DISTVERSION`, `DISTNAME`, `EXTRACT_CMD`, `EXTRACT_BEFORE_ARGS`, "
+"`EXTRACT_AFTER_ARGS`, `EXTRACT_SUFX`, or `DISTFILES`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:65
+msgid ""
+"In the worst case, create a custom `do-extract` target to override the "
+"default. This is rarely, if ever, necessary."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:67
+#, no-wrap
+msgid "Naming"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:70
+msgid ""
+"The first part of the port's [.filename]#Makefile# names the port, describes "
+"its version number, and lists it in the correct category."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:72
+#, no-wrap
+msgid "`PORTNAME`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:76
+msgid ""
+"Set `PORTNAME` to the base name of the software. It is used as the base for "
+"the FreeBSD package, and for <<makefile-distname,`DISTNAME`>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:82
+msgid ""
+"The package name must be unique across the entire ports tree. Make sure "
+"that the `PORTNAME` is not already in use by an existing port, and that no "
+"other port already has the same `PKGBASE`. If the name has already been "
+"used, add either <<porting-pkgnameprefix-suffix,`PKGNAMEPREFIX` or "
+"`PKGNAMESUFFIX`>>."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:85
+#, no-wrap
+msgid "Versions, `DISTVERSION` _or_ `PORTVERSION`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:88
+msgid "Set `DISTVERSION` to the version number of the software."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:92
+msgid ""
+"`PORTVERSION` is the version used for the FreeBSD package. It will be "
+"automatically derived from `DISTVERSION` to be compatible with FreeBSD's "
+"package versioning scheme. If the version contains _letters_, it might be "
+"needed to set `PORTVERSION` and not `DISTVERSION`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:96
+msgid "Only one of `PORTVERSION` and `DISTVERSION` can be set at a time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:99
+msgid ""
+"From time to time, some software will use a version scheme that is not "
+"compatible with how `DISTVERSION` translates in `PORTVERSION`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:104
+msgid ""
+"When updating a port, it is possible to use man:pkg-version[8]'s `-t` "
+"argument to check if the new version is greater or lesser than before. See "
+"<<makefile-versions-ex-pkg-version>>."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:107
+#, no-wrap
+msgid "Using man:pkg-version[8] to Compare Versions"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:111
+msgid ""
+"`pkg version -t` takes two versions as arguments, it will respond with `<`, "
+"`=` or `>` if the first version is less, equal, or more than the second "
+"version, respectively."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:117
+#, no-wrap
+msgid ""
+"% pkg version -t 1.2 1.3\n"
+"< <.>\n"
+"% pkg version -t 1.2 1.2\n"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:117
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:119
+#, no-wrap
+msgid "<.>"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:119
+msgid "% pkg version -t 1.2 1.2.0"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:126
+msgid ""
+"% pkg version -t 1.2 1.2.p1 > <.> % pkg version -t 1.2.a1 1.2.b1 < <.> % pkg "
+"version -t 1.2 1.2p1 < <.>"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:129
+msgid "`1.2` is before `1.3`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:130
+msgid "`1.2` and `1.2` are equal as they have the same version."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:131
+msgid "`1.2` and `1.2.0` are equal as nothing equals zero."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:132
+msgid "`1.2` is after `1.2.p1` as `.p1`, think \"pre-release 1\"."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:133
+msgid ""
+"`1.2.a1` is before `1.2.b1`, think \"alpha\" and \"beta\", and `a` is before "
+"`b`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:134
+msgid ""
+"`1.2` is before `1.2p1` as `2p1`, think \"2, patch level 1\" which is a "
+"version after any `2.X` but before `3`."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:139
+msgid ""
+"In here, the `a`, `b`, and `p` are used as if meaning \"alpha\", \"beta\" or "
+"\"pre-release\" and \"patch level\", but they are only letters and are "
+"sorted alphabetically, so any letter can be used, and they will be sorted "
+"appropriately."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:143
+#, no-wrap
+msgid "Examples of `DISTVERSION` and the Derived `PORTVERSION`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:147
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:490
+#, no-wrap
+msgid "DISTVERSION"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:149
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:491
+#, no-wrap
+msgid "PORTVERSION"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:150
+#, no-wrap
+msgid "0.7.1d"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:152
+#, no-wrap
+msgid "0.7.1.d"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:153
+#, no-wrap
+msgid "10Alpha3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:155
+#, no-wrap
+msgid "10.a3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:156
+#, no-wrap
+msgid "3Beta7-pre2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:158
+#, no-wrap
+msgid "3.b7.p2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:159
+#, no-wrap
+msgid "8:f_17"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:160
+#, no-wrap
+msgid "8f.17"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:163
+#, no-wrap
+msgid "Using `DISTVERSION`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:167
+msgid ""
+"When the version only contains numbers separated by dots, dashes or "
+"underscores, use `DISTVERSION`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:172
+#, no-wrap
+msgid ""
+"PORTNAME= nekoto\n"
+"DISTVERSION=\t1.2-4\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:175
+msgid "It will generate a `PORTVERSION` of `1.2.4`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:178
+#, no-wrap
+msgid "Using `DISTVERSION` When the Version Starts with a Letter or a Prefix"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:182
+msgid ""
+"When the version starts or ends with a letter, or a prefix or a suffix that "
+"is not part of the version, use `DISTVERSIONPREFIX`, `DISTVERSION`, and "
+"`DISTVERSIONSUFFIX`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:184
+msgid "If the version is `v1.2-4`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:190
+#, no-wrap
+msgid ""
+"PORTNAME= nekoto\n"
+"DISTVERSIONPREFIX= v\n"
+"DISTVERSION=\t1_2_4\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:194
+msgid ""
+"Some of the time, projects using GitHub will use their name in their "
+"versions. For example, the version could be `nekoto-1.2-4`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:200
+#, no-wrap
+msgid ""
+"PORTNAME= nekoto\n"
+"DISTVERSIONPREFIX= nekoto-\n"
+"DISTVERSION=\t1.2_4\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:203
+msgid ""
+"Those projects also sometimes use some string at the end of the version, for "
+"example, `1.2-4_RELEASE`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:209
+#, no-wrap
+msgid ""
+"PORTNAME= nekoto\n"
+"DISTVERSION=\t1.2-4\n"
+"DISTVERSIONSUFFIX= _RELEASE\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:212
+msgid "Or they do both, for example, `nekoto-1.2-4_RELEASE`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:219
+#, no-wrap
+msgid ""
+"PORTNAME= nekoto\n"
+"DISTVERSIONPREFIX= nekoto-\n"
+"DISTVERSION=\t1.2-4\n"
+"DISTVERSIONSUFFIX= _RELEASE\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:222
+msgid ""
+"`DISTVERSIONPREFIX` and `DISTVERSIONSUFFIX` will not be used while "
+"constructing `PORTVERSION`, but only used in `DISTNAME`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:224
+msgid "All will generate a `PORTVERSION` of `1.2.4`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:227
+#, no-wrap
+msgid "Using `DISTVERSION` When the Version Contains Letters Meaning \"alpha\", \"beta\", or \"pre-release\""
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:231
+msgid ""
+"When the version contains numbers separated by dots, dashes or underscores, "
+"and letters are used to mean \"alpha\", \"beta\" or \"pre-release\", which "
+"is, before the version without the letters, use `DISTVERSION`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:236
+#, no-wrap
+msgid ""
+"PORTNAME= nekoto\n"
+"DISTVERSION=\t1.2-pre4\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:242
+#, no-wrap
+msgid ""
+"PORTNAME= nekoto\n"
+"DISTVERSION=\t1.2p4\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:245
+msgid ""
+"Both will generate a `PORTVERSION` of `1.2.p4` which is before than 1.2. man:"
+"pkg-version[8] can be used to check that fact:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:250
+#, no-wrap
+msgid ""
+"% pkg version -t 1.2.p4 1.2\n"
+"<\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:255
+#, no-wrap
+msgid "Not Using `DISTVERSION` When the Version Contains Letters Meaning \"Patch Level\""
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:259
+msgid ""
+"When the version contains letters that are not meant as \"alpha\", \"beta\", "
+"or \"pre\", but more in a \"patch level\", and meaning after the version "
+"without the letters, use `PORTVERSION`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:264
+#, no-wrap
+msgid ""
+"PORTNAME= nekoto\n"
+"PORTVERSION=\t1.2p4\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:268
+msgid ""
+"In this case, using `DISTVERSION` is not possible because it would generate "
+"a version of `1.2.p4` which would be before `1.2` and not after. man:pkg-"
+"version[8] will verify this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:275
+#, no-wrap
+msgid ""
+"% pkg version -t 1.2 1.2.p4\n"
+"> <.>\n"
+"% pkg version -t 1.2 1.2p4\n"
+"< <.>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:278
+msgid "`1.2` is after `1.2.p4`, which is _wrong_ in this case."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:279
+msgid "`1.2` is before `1.2p4`, which is what was needed."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:282
+msgid ""
+"For some more advanced examples of setting `PORTVERSION`, when the "
+"software's versioning is really not compatible with FreeBSD's, or `DISTNAME` "
+"when the distribution file does not contain the version itself, see "
+"<<makefile-distname>>."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:284
+#, no-wrap
+msgid "`PORTREVISION` and `PORTEPOCH`"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:287
+#, no-wrap
+msgid "`PORTREVISION`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:291
+msgid ""
+"`PORTREVISION` is a monotonically increasing value which is reset to 0 with "
+"every increase of `DISTVERSION`, typically every time there is a new "
+"official vendor release. If `PORTREVISION` is non-zero, the value is "
+"appended to the package name. Changes to `PORTREVISION` are used by "
+"automated tools like man:pkg-version[8] to determine that a new package is "
+"available."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:294
+msgid ""
+"`PORTREVISION` must be increased each time a change is made to the port that "
+"changes the generated package in any way. That includes changes that only "
+"affect a package built with non-default <<makefile-options,options>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:296
+msgid "Examples of when `PORTREVISION` must be bumped:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:298
+msgid ""
+"Addition of patches to correct security vulnerabilities, bugs, or to add new "
+"functionality to the port."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:299
+msgid ""
+"Changes to the port [.filename]#Makefile# to enable or disable compile-time "
+"options in the package."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:300
+msgid ""
+"Changes in the packing list or the install-time behavior of the package. For "
+"example, a change to a script which generates initial data for the package, "
+"like man:ssh[1] host keys."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:301
+msgid ""
+"Version bump of a port's shared library dependency (in this case, someone "
+"trying to install the old package after installing a newer version of the "
+"dependency will fail since it will look for the old libfoo.x instead of "
+"libfoo.(x+1))."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:302
+msgid ""
+"Silent changes to the port distfile which have significant functional "
+"differences. For example, changes to the distfile requiring a correction to "
+"[.filename]#distinfo# with no corresponding change to `DISTVERSION`, where a "
+"`diff -ru` of the old and new versions shows non-trivial changes to the code."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:303
+msgid "Changes to `MAINTAINER`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:305
+msgid "Examples of changes which do not require a `PORTREVISION` bump:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:307
+msgid ""
+"Style changes to the port skeleton with no functional change to what appears "
+"in the resulting package."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:308
+msgid ""
+"Changes to `MASTER_SITES` or other functional changes to the port which do "
+"not affect the resulting package."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:309
+msgid ""
+"Trivial patches to the distfile such as correction of typos, which are not "
+"important enough that users of the package have to go to the trouble of "
+"upgrading."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:310
+msgid ""
+"Build fixes which cause a package to become compilable where it was "
+"previously failing. As long as the changes do not introduce any functional "
+"change on any other platforms on which the port did previously build. Since "
+"`PORTREVISION` reflects the content of the package, if the package was not "
+"previously buildable then there is no need to increase `PORTREVISION` to "
+"mark a change."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:315
+msgid ""
+"A rule of thumb is to decide whether a change committed to a port is "
+"something which _some_ people would benefit from having. Either because of "
+"an enhancement, fix, or by virtue that the new package will actually work at "
+"all. Then weigh that against that fact that it will cause everyone who "
+"regularly updates their ports tree to be compelled to update. If yes, "
+"`PORTREVISION` must be bumped."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:320
+msgid ""
+"People using binary packages will _never_ see the update if `PORTREVISION` "
+"is not bumped. Without increasing `PORTREVISION`, the package builders have "
+"no way to detect the change and thus, will not rebuild the package."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:323
+#, no-wrap
+msgid "`PORTEPOCH`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:327
+msgid ""
+"From time to time a software vendor or FreeBSD porter will do something "
+"silly and release a version of their software which is actually numerically "
+"less than the previous version. An example of this is a port which goes "
+"from foo-20000801 to foo-1.0 (the former will be incorrectly treated as a "
+"newer version since 20000801 is a numerically greater value than 1)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:333
+msgid ""
+"The results of version number comparisons are not always obvious. `pkg "
+"version` (see man:pkg-version[8]) can be used to test the comparison of two "
+"version number strings. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:338
+#, no-wrap
+msgid ""
+"% pkg version -t 0.031 0.29\n"
+">\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:341
+msgid ""
+"The `>` output indicates that version 0.031 is considered greater than "
+"version 0.29, which may not have been obvious to the porter."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:348
+msgid ""
+"In situations such as this, `PORTEPOCH` must be increased. If `PORTEPOCH` "
+"is nonzero it is appended to the package name as described in section 0 "
+"above. `PORTEPOCH` must never be decreased or reset to zero, because that "
+"would cause comparison to a package from an earlier epoch to fail. For "
+"example, the package would not be detected as out of date. The new version "
+"number, `1.0,1` in the above example, is still numerically less than the "
+"previous version, 20000801, but the `,1` suffix is treated specially by "
+"automated tools and found to be greater than the implied suffix `,0` on the "
+"earlier package."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:351
+msgid ""
+"Dropping or resetting `PORTEPOCH` incorrectly leads to no end of grief. If "
+"the discussion above was not clear enough, please consult the {freebsd-"
+"ports}."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:355
+msgid ""
+"It is expected that `PORTEPOCH` will not be used for the majority of ports, "
+"and that sensible use of `DISTVERSION`, or that use `PORTVERSION` carefully, "
+"can often preempt it becoming necessary if a future release of the software "
+"changes the version structure. However, care is needed by FreeBSD porters "
+"when a vendor release is made without an official version number - such as a "
+"code \"snapshot\" release. The temptation is to label the release with the "
+"release date, which will cause problems as in the example above when a new "
+"\"official\" release is made."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:358
+msgid ""
+"For example, if a snapshot release is made on the date `20000917`, and the "
+"previous version of the software was version `1.2`, do not use `20000917` "
+"for `DISTVERSION`. The correct way is a `DISTVERSION` of `1.2.20000917`, or "
+"similar, so that the succeeding release, say `1.3`, is still a numerically "
+"greater value."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:360
+#, no-wrap
+msgid "Example of `PORTREVISION` and `PORTEPOCH` Usage"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:363
+msgid ""
+"The `gtkmumble` port, version `0.10`, is committed to the ports collection:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:368
+#, no-wrap
+msgid ""
+"PORTNAME=\tgtkmumble\n"
+"DISTVERSION=\t0.10\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:371
+msgid "`PKGNAME` becomes `gtkmumble-0.10`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:374
+msgid ""
+"A security hole is discovered which requires a local FreeBSD patch. "
+"`PORTREVISION` is bumped accordingly."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:380
+#, no-wrap
+msgid ""
+"PORTNAME=\tgtkmumble\n"
+"DISTVERSION=\t0.10\n"
+"PORTREVISION=\t1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:383
+msgid "`PKGNAME` becomes `gtkmumble-0.10_1`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:387
+msgid ""
+"A new version is released by the vendor, numbered `0.2` (it turns out the "
+"author actually intended `0.10` to actually mean `0.1.0`, not \"what comes "
+"after 0.9\" - oops, too late now). Since the new minor version `2` is "
+"numerically less than the previous version `10`, `PORTEPOCH` must be bumped "
+"to manually force the new package to be detected as \"newer\". Since it is "
+"a new vendor release of the code, `PORTREVISION` is reset to 0 (or removed "
+"from the [.filename]#Makefile#)."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:393
+#, no-wrap
+msgid ""
+"PORTNAME=\tgtkmumble\n"
+"DISTVERSION=\t0.2\n"
+"PORTEPOCH=\t1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:396
+msgid "`PKGNAME` becomes `gtkmumble-0.2,1`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:399
+msgid ""
+"The next release is 0.3. Since `PORTEPOCH` never decreases, the version "
+"variables are now:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:405
+#, no-wrap
+msgid ""
+"PORTNAME=\tgtkmumble\n"
+"DISTVERSION=\t0.3\n"
+"PORTEPOCH=\t1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:408
+msgid "`PKGNAME` becomes `gtkmumble-0.3,1`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:413
+msgid ""
+"If `PORTEPOCH` were reset to `0` with this upgrade, someone who had "
+"installed the `gtkmumble-0.10_1` package would not detect the "
+"`gtkmumble-0.3` package as newer, since `3` is still numerically less than "
+"`10`. Remember, this is the whole point of `PORTEPOCH` in the first place."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:416
+#, no-wrap
+msgid "`PKGNAMEPREFIX` and `PKGNAMESUFFIX`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:423
+msgid ""
+"Two optional variables, `PKGNAMEPREFIX` and `PKGNAMESUFFIX`, are combined "
+"with `PORTNAME` and `PORTVERSION` to form `PKGNAME` as "
+"`${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}`. Make sure "
+"this conforms to our <<porting-pkgname,guidelines for a good package "
+"name>>. In particular, the use of a hyphen (`-`) in `PORTVERSION` is _not_ "
+"allowed. Also, if the package name has the _language-_ or the _-compiled."
+"specifics_ part (see below), use `PKGNAMEPREFIX` and `PKGNAMESUFFIX`, "
+"respectively. Do not make them part of `PORTNAME`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:425
+#, no-wrap
+msgid "Package Naming Conventions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:429
+msgid ""
+"These are the conventions to follow when naming packages. This is to make "
+"the package directory easy to scan, as there are already thousands of "
+"packages and users are going to turn away if they hurt their eyes!"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:431
+msgid ""
+"Package names take the form of [.filename]#language_region-name-compiled."
+"specifics-version.numbers#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:434
+msgid ""
+"The package name is defined as `${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-"
+"${PORTVERSION}`. Make sure to set the variables to conform to that format."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:436
+#, no-wrap
+msgid "[.filename]#language_region-#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:440
+msgid ""
+"FreeBSD strives to support the native language of its users. The _language-"
+"_ part is a two letter abbreviation of the natural language defined by "
+"ISO-639 when the port is specific to a certain language. Examples are `ja` "
+"for Japanese, `ru` for Russian, `vi` for Vietnamese, `zh` for Chinese, `ko` "
+"for Korean and `de` for German."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:443
+msgid ""
+"If the port is specific to a certain region within the language area, add "
+"the two letter country code as well. Examples are `en_US` for US English "
+"and `fr_CH` for Swiss French."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:445
+msgid "The _language-_ part is set in `PKGNAMEPREFIX`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:447
+#, no-wrap
+msgid "[.filename]#name#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:452
+msgid ""
+"Make sure that the port's name and version are clearly separated and placed "
+"into `PORTNAME` and `DISTVERSION`. The only reason for `PORTNAME` to "
+"contain a version part is if the upstream distribution is really named that "
+"way, as in the package:textproc/libxml2[] or package:japanese/kinput2-"
+"freewnn[] ports. Otherwise, `PORTNAME` cannot contain any version-specific "
+"information. It is quite normal for several ports to have the same "
+"`PORTNAME`, as the package:www/apache*[] ports do; in that case, different "
+"versions (and different index entries) are distinguished by `PKGNAMEPREFIX` "
+"and `PKGNAMESUFFIX` values."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:455
+msgid ""
+"There is a tradition of naming `Perl 5` modules by prepending `p5-` and "
+"converting the double-colon separator to a hyphen. For example, the `Data::"
+"Dumper` module becomes `p5-Data-Dumper`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:456
+#, no-wrap
+msgid "[.filename]#-compiled.specifics#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:460
+msgid ""
+"If the port can be built with different <<makefile-masterdir,hardcoded "
+"defaults>> (usually part of the directory name in a family of ports), the _-"
+"compiled.specifics_ part states the compiled-in defaults. The hyphen is "
+"optional. Examples are paper size and font units."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:462
+msgid "The _-compiled.specifics_ part is set in `PKGNAMESUFFIX`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:464
+#, no-wrap
+msgid "[.filename]#-version.numbers#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:470
+msgid ""
+"The version string follows a dash (`-`) and is a period-separated list of "
+"integers and single lowercase alphabetics. In particular, it is not "
+"permissible to have another dash inside the version string. The only "
+"exception is the string `pl` (meaning \"patchlevel\"), which can be used "
+"_only_ when there are no major and minor version numbers in the software. "
+"If the software version has strings like \"alpha\", \"beta\", \"rc\", or "
+"\"pre\", take the first letter and put it immediately after a period. If "
+"the version string continues after those names, the numbers follow the "
+"single alphabet without an extra period between them (for example, `1.0b2`)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:474
+msgid ""
+"The idea is to make it easier to sort ports by looking at the version "
+"string. In particular, make sure version number components are always "
+"delimited by a period, and if the date is part of the string, use the "
+"`d__yyyy.mm.dd__` format, not `_dd.mm.yyyy_` or the non-Y2K compliant `_yy."
+"mm.dd_` format. It is important to prefix the version with a letter, here "
+"`d` (for date), in case a release with an actual version number is made, "
+"which would be numerically less than `_yyyy_`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:478
+msgid ""
+"Package name must be unique among all of the ports tree, check that there is "
+"not already a port with the same `PORTNAME` and if there is add one of "
+"<<porting-pkgnameprefix-suffix,`PKGNAMEPREFIX` or `PKGNAMESUFFIX`>>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:481
+msgid ""
+"Here are some (real) examples on how to convert the name as called by the "
+"software authors to a suitable package name, for each line, only one of "
+"`DISTVERSION` or `PORTVERSION` is set in, depending on which would be used "
+"in the port's [.filename]#Makefile#:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:482
+#, no-wrap
+msgid "Package Naming Examples"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:486
+#, no-wrap
+msgid "Distribution Name"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:487
+#, no-wrap
+msgid "PKGNAMEPREFIX"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:488
+#, no-wrap
+msgid "PORTNAME"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:489
+#, no-wrap
+msgid "PKGNAMESUFFIX"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:493
+#, no-wrap
+msgid "Reason or comment"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:494
+#, no-wrap
+msgid "mule-2.2.2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:495
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:497
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:503
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:511
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:513
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:519
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:521
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:527
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:529
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:535
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:537
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:543
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:545
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:551
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:553
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:559
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:561
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:567
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:569
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:577
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:583
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:591
+#, no-wrap
+msgid "(empty)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:496
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:504
+#, no-wrap
+msgid "mule"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:498
+#, no-wrap
+msgid "2.2.2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:501
+#, no-wrap
+msgid "No changes required"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:502
+#, no-wrap
+msgid "mule-1.0.1"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:505
+#, no-wrap
+msgid "1"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:506
+#, no-wrap
+msgid "1.0.1"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:509
+#, no-wrap
+msgid "This is version 1 of mule, and version 2 already exists"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:510
+#, no-wrap
+msgid "EmiClock-1.0.2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:512
+#, no-wrap
+msgid "emiclock"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:514
+#, no-wrap
+msgid "1.0.2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:517
+#, no-wrap
+msgid "No uppercase names for single programs"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:518
+#, no-wrap
+msgid "rdist-1.3alpha"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:520
+#, no-wrap
+msgid "rdist"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:522
+#, no-wrap
+msgid "1.3alpha"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:525
+#, no-wrap
+msgid "Version will be `1.3.a`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:526
+#, no-wrap
+msgid "es-0.9-beta1"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:528
+#, no-wrap
+msgid "es"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:530
+#, no-wrap
+msgid "0.9-beta1"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:533
+#, no-wrap
+msgid "Version will be `0.9.b1`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:534
+#, no-wrap
+msgid "mailman-2.0rc3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:536
+#, no-wrap
+msgid "mailman"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:538
+#, no-wrap
+msgid "2.0rc3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:541
+#, no-wrap
+msgid "Version will be `2.0.r3`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:542
+#, no-wrap
+msgid "v3.3beta021.src"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:544
+#, no-wrap
+msgid "tiff"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:547
+#, no-wrap
+msgid "3.3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:549
+#, no-wrap
+msgid "What the heck was that anyway?"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:550
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:552
+#, no-wrap
+msgid "tvtwm"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:555
+#, no-wrap
+msgid "p11"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:557
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:565
+#, no-wrap
+msgid "No version in the filename, use what upstream says it is"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:558
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:560
+#, no-wrap
+msgid "piewm"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:562
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:594
+#, no-wrap
+msgid "1.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:566
+#, no-wrap
+msgid "xvgr-2.10pl1"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:568
+#, no-wrap
+msgid "xvgr"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:571
+#, no-wrap
+msgid "2.10.pl1"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:573
+#, no-wrap
+msgid "In that case, `pl1` means patch level, so using DISTVERSION is not possible."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:574
+#, no-wrap
+msgid "gawk-2.15.6"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:575
+#, no-wrap
+msgid "ja-"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:576
+#, no-wrap
+msgid "gawk"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:578
+#, no-wrap
+msgid "2.15.6"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:581
+#, no-wrap
+msgid "Japanese language version"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:582
+#, no-wrap
+msgid "psutils-1.13"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:584
+#, no-wrap
+msgid "psutils"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:585
+#, no-wrap
+msgid "-letter"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:586
+#, no-wrap
+msgid "1.13"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:589
+#, no-wrap
+msgid "Paper size hardcoded at package build time"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:590
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:592
+#, no-wrap
+msgid "pkfonts"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:593
+#, no-wrap
+msgid "300"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:596
+#, no-wrap
+msgid "Package for 300dpi fonts"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:600
+msgid ""
+"If there is absolutely no trace of version information in the original "
+"source and it is unlikely that the original author will ever release another "
+"version, just set the version string to `1.0` (like the `piewm` example "
+"above). Otherwise, ask the original author or use the date string the "
+"source file was released on (`d__yyyy.mm.dd__`, or `d__yyyymmdd__`) as the "
+"version."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:605
+msgid ""
+"Use any letter. Here, `d` here stands for date, if the source is a Git "
+"repository, `g` followed by the commit date is commonly used, using `s` for "
+"snapshot is also common."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:608
+#, no-wrap
+msgid "Categorization"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:611
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4791
+#, no-wrap
+msgid "`CATEGORIES`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:617
+msgid ""
+"When a package is created, it is put under [.filename]#/usr/ports/packages/"
+"All# and links are made from one or more subdirectories of [.filename]#/usr/"
+"ports/packages#. The names of these subdirectories are specified by the "
+"variable `CATEGORIES`. It is intended to make life easier for the user when "
+"he is wading through the pile of packages on the FTP site or the CDROM. "
+"Please take a look at the <<porting-categories,current list of categories>> "
+"and pick the ones that are suitable for the port."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:621
+msgid ""
+"This list also determines where in the ports tree the port is imported. If "
+"there is more than one category here, the port files must be put in the "
+"subdirectory with the name of the first category. See <<choosing-categories,"
+"below>> for more discussion about how to pick the right categories."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:623
+#, no-wrap
+msgid "Current List of Categories"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:628
+msgid ""
+"Here is the current list of port categories. Those marked with an asterisk "
+"(`*`) are _virtual_ categories-those that do not have a corresponding "
+"subdirectory in the ports tree. They are only used as secondary categories, "
+"and only for search purposes."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:632
+msgid ""
+"For non-virtual categories, there is a one-line description in `COMMENT` in "
+"that subdirectory's [.filename]#Makefile#."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:638
+#, no-wrap
+msgid "Category"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:639
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1458
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1859
+#, no-wrap
+msgid "Description"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:641
+#, no-wrap
+msgid "Notes"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:642
+#, no-wrap
+msgid "[.filename]#accessibility#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:643
+#, no-wrap
+msgid "Ports to help disabled users."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:646
+#, no-wrap
+msgid "[.filename]#afterstep#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:647
+#, no-wrap
+msgid "Ports to support the http://www.afterstep.org/[AfterStep] window manager."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:650
+#, no-wrap
+msgid "[.filename]#arabic#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:651
+#, no-wrap
+msgid "Arabic language support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:654
+#, no-wrap
+msgid "[.filename]#archivers#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:655
+#, no-wrap
+msgid "Archiving tools."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:658
+#, no-wrap
+msgid "[.filename]#astro#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:659
+#, no-wrap
+msgid "Astronomical ports."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:662
+#, no-wrap
+msgid "[.filename]#audio#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:663
+#, no-wrap
+msgid "Sound support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:666
+#, no-wrap
+msgid "[.filename]#benchmarks#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:667
+#, no-wrap
+msgid "Benchmarking utilities."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:670
+#, no-wrap
+msgid "[.filename]#biology#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:671
+#, no-wrap
+msgid "Biology-related software."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:674
+#, no-wrap
+msgid "[.filename]#cad#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:675
+#, no-wrap
+msgid "Computer aided design tools."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:678
+#, no-wrap
+msgid "[.filename]#chinese#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:679
+#, no-wrap
+msgid "Chinese language support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:682
+#, no-wrap
+msgid "[.filename]#comms#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:683
+#, no-wrap
+msgid "Communication software."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:685
+#, no-wrap
+msgid "Mostly software to talk to the serial port."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:686
+#, no-wrap
+msgid "[.filename]#converters#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:687
+#, no-wrap
+msgid "Character code converters."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:690
+#, no-wrap
+msgid "[.filename]#databases#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:691
+#, no-wrap
+msgid "Databases."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:694
+#, no-wrap
+msgid "[.filename]#deskutils#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:695
+#, no-wrap
+msgid "Things that used to be on the desktop before computers were invented."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:698
+#, no-wrap
+msgid "[.filename]#devel#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:699
+#, no-wrap
+msgid "Development utilities."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:701
+#, no-wrap
+msgid "Do not put libraries here just because they are libraries. They should _not_ be in this category unless they truly do not belong anywhere else."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:702
+#, no-wrap
+msgid "[.filename]#dns#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:703
+#, no-wrap
+msgid "DNS-related software."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:706
+#, no-wrap
+msgid "[.filename]#docs#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:707
+#, no-wrap
+msgid "Meta-ports for FreeBSD documentation."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:710
+#, no-wrap
+msgid "[.filename]#editors#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:711
+#, no-wrap
+msgid "General editors."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:713
+#, no-wrap
+msgid "Specialized editors go in the section for those tools. For example, a mathematical-formula editor will go in [.filename]#math#, and have [.filename]#editors# as a second category."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:714
+#, no-wrap
+msgid "[.filename]#education#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:715
+#, no-wrap
+msgid "Education-related software."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:717
+#, no-wrap
+msgid "This includes applications, utilities, or games primarily or substantially designed to help the user learn a specific topic or study in general. It also includes course-writing applications, course-delivery applications, and classroom or school management applications"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:718
+#, no-wrap
+msgid "[.filename]#elisp#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:719
+#, no-wrap
+msgid "Emacs-lisp ports."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:722
+#, no-wrap
+msgid "[.filename]#emulators#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:723
+#, no-wrap
+msgid "Emulators for other operating systems."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:725
+#, no-wrap
+msgid "Terminal emulators do _not_ belong here. X-based ones go to [.filename]#x11# and text-based ones to either [.filename]#comms# or [.filename]#misc#, depending on the exact functionality."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:726
+#, no-wrap
+msgid "[.filename]#enlightenment#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:727
+#, no-wrap
+msgid "Ports related to the Enlightenment window manager."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:730
+#, no-wrap
+msgid "[.filename]#finance#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:731
+#, no-wrap
+msgid "Monetary, financial and related applications."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:734
+#, no-wrap
+msgid "[.filename]#french#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:735
+#, no-wrap
+msgid "French language support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:738
+#, no-wrap
+msgid "[.filename]#ftp#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:739
+#, no-wrap
+msgid "FTP client and server utilities."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:741
+#, no-wrap
+msgid "If the port speaks both FTP and HTTP, put it in [.filename]#ftp# with a secondary category of [.filename]#www#."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:742
+#, no-wrap
+msgid "[.filename]#games#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:743
+#, no-wrap
+msgid "Games."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:746
+#, no-wrap
+msgid "[.filename]#geography#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:747
+#, no-wrap
+msgid "Geography-related software."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:750
+#, no-wrap
+msgid "[.filename]#german#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:751
+#, no-wrap
+msgid "German language support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:754
+#, no-wrap
+msgid "[.filename]#gnome#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:755
+#, no-wrap
+msgid "Ports from the https://www.gnome.org/[GNOME] Project."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:758
+#, no-wrap
+msgid "[.filename]#gnustep#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:759
+#, no-wrap
+msgid "Software related to the GNUstep desktop environment."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:762
+#, no-wrap
+msgid "[.filename]#graphics#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:763
+#, no-wrap
+msgid "Graphics utilities."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:766
+#, no-wrap
+msgid "[.filename]#hamradio#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:767
+#, no-wrap
+msgid "Software for amateur radio."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:770
+#, no-wrap
+msgid "[.filename]#haskell#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:771
+#, no-wrap
+msgid "Software related to the Haskell language."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:774
+#, no-wrap
+msgid "[.filename]#hebrew#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:775
+#, no-wrap
+msgid "Hebrew language support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:778
+#, no-wrap
+msgid "[.filename]#hungarian#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:779
+#, no-wrap
+msgid "Hungarian language support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:782
+#, no-wrap
+msgid "[.filename]#irc#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:783
+#, no-wrap
+msgid "Internet Relay Chat utilities."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:786
+#, no-wrap
+msgid "[.filename]#japanese#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:787
+#, no-wrap
+msgid "Japanese language support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:790
+#, no-wrap
+msgid "[.filename]#java#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:791
+#, no-wrap
+msgid "Software related to the Java(TM) language."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:793
+#, no-wrap
+msgid "The [.filename]#java# category must not be the only one for a port. Save for ports directly related to the Java language, porters are also encouraged not to use [.filename]#java# as the main category of a port."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:794
+#, no-wrap
+msgid "[.filename]#kde#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:795
+#, no-wrap
+msgid "Ports from the https://www.kde.org/[KDE] Project (generic)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:798
+#, no-wrap
+msgid "[.filename]#kde-applications#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:799
+#, no-wrap
+msgid "Applications from the https://www.kde.org/[KDE] Project."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:802
+#, no-wrap
+msgid "[.filename]#kde-frameworks#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:803
+#, no-wrap
+msgid "Add-on libraries from the https://www.kde.org/[KDE] Project for programming with Qt."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:806
+#, no-wrap
+msgid "[.filename]#kde-plasma#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:807
+#, no-wrap
+msgid "Desktop from the https://www.kde.org/[KDE] Project."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:810
+#, no-wrap
+msgid "[.filename]#kld#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:811
+#, no-wrap
+msgid "Kernel loadable modules."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:814
+#, no-wrap
+msgid "[.filename]#korean#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:815
+#, no-wrap
+msgid "Korean language support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:818
+#, no-wrap
+msgid "[.filename]#lang#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:819
+#, no-wrap
+msgid "Programming languages."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:822
+#, no-wrap
+msgid "[.filename]#linux#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:823
+#, no-wrap
+msgid "Linux applications and support utilities."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:826
+#, no-wrap
+msgid "[.filename]#lisp#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:827
+#, no-wrap
+msgid "Software related to the Lisp language."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:830
+#, no-wrap
+msgid "[.filename]#mail#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:831
+#, no-wrap
+msgid "Mail software."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:834
+#, no-wrap
+msgid "[.filename]#mate#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:835
+#, no-wrap
+msgid "Ports related to the MATE desktop environment, a fork of GNOME 2."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:838
+#, no-wrap
+msgid "[.filename]#math#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:839
+#, no-wrap
+msgid "Numerical computation software and other utilities for mathematics."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:842
+#, no-wrap
+msgid "[.filename]#mbone#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:843
+#, no-wrap
+msgid "MBone applications."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:846
+#, no-wrap
+msgid "[.filename]#misc#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:847
+#, no-wrap
+msgid "Miscellaneous utilities"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:849
+#, no-wrap
+msgid "Things that do not belong anywhere else. If at all possible, try to find a better category for the port than `misc`, as ports tend to be overlooked in here."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:850
+#, no-wrap
+msgid "[.filename]#multimedia#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:851
+#, no-wrap
+msgid "Multimedia software."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:854
+#, no-wrap
+msgid "[.filename]#net#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:855
+#, no-wrap
+msgid "Miscellaneous networking software."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:858
+#, no-wrap
+msgid "[.filename]#net-im#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:859
+#, no-wrap
+msgid "Instant messaging software."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:862
+#, no-wrap
+msgid "[.filename]#net-mgmt#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:863
+#, no-wrap
+msgid "Networking management software."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:866
+#, no-wrap
+msgid "[.filename]#net-p2p#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:867
+#, no-wrap
+msgid "Peer to peer network applications."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:870
+#, no-wrap
+msgid "[.filename]#net-vpn#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:871
+#, no-wrap
+msgid "Virtual Private Network applications."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:874
+#, no-wrap
+msgid "[.filename]#news#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:875
+#, no-wrap
+msgid "USENET news software."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:878
+#, no-wrap
+msgid "[.filename]#parallel#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:879
+#, no-wrap
+msgid "Applications dealing with parallelism in computing."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:882
+#, no-wrap
+msgid "[.filename]#pear#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:883
+#, no-wrap
+msgid "Ports related to the Pear PHP framework."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:886
+#, no-wrap
+msgid "[.filename]#perl5#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:887
+#, no-wrap
+msgid "Ports that require Perl version 5 to run."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:890
+#, no-wrap
+msgid "[.filename]#plan9#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:891
+#, no-wrap
+msgid "Various programs from https://9p.io/wiki/plan9/Download/index.html[Plan9]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:894
+#, no-wrap
+msgid "[.filename]#polish#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:895
+#, no-wrap
+msgid "Polish language support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:898
+#, no-wrap
+msgid "[.filename]#ports-mgmt#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:899
+#, no-wrap
+msgid "Ports for managing, installing and developing FreeBSD ports and packages."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:902
+#, no-wrap
+msgid "[.filename]#portuguese#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:903
+#, no-wrap
+msgid "Portuguese language support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:906
+#, no-wrap
+msgid "[.filename]#print#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:907
+#, no-wrap
+msgid "Printing software."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:909
+#, no-wrap
+msgid "Desktop publishing tools (previewers, etc.) belong here too."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:910
+#, no-wrap
+msgid "[.filename]#python#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:911
+#, no-wrap
+msgid "Software related to the https://www.python.org/[Python] language."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:914
+#, no-wrap
+msgid "[.filename]#ruby#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:915
+#, no-wrap
+msgid "Software related to the https://www.ruby-lang.org/[Ruby] language."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:918
+#, no-wrap
+msgid "[.filename]#rubygems#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:919
+#, no-wrap
+msgid "Ports of https://www.rubygems.org/[RubyGems] packages."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:922
+#, no-wrap
+msgid "[.filename]#russian#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:923
+#, no-wrap
+msgid "Russian language support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:926
+#, no-wrap
+msgid "[.filename]#scheme#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:927
+#, no-wrap
+msgid "Software related to the Scheme language."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:930
+#, no-wrap
+msgid "[.filename]#science#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:931
+#, no-wrap
+msgid "Scientific ports that do not fit into other categories such as [.filename]#astro#, [.filename]#biology# and [.filename]#math#."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:934
+#, no-wrap
+msgid "[.filename]#security#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:935
+#, no-wrap
+msgid "Security utilities."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:938
+#, no-wrap
+msgid "[.filename]#shells#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:939
+#, no-wrap
+msgid "Command line shells."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:942
+#, no-wrap
+msgid "[.filename]#spanish#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:943
+#, no-wrap
+msgid "Spanish language support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:946
+#, no-wrap
+msgid "[.filename]#sysutils#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:947
+#, no-wrap
+msgid "System utilities."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:950
+#, no-wrap
+msgid "[.filename]#tcl#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:951
+#, no-wrap
+msgid "Ports that use Tcl to run."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:954
+#, no-wrap
+msgid "[.filename]#textproc#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:955
+#, no-wrap
+msgid "Text processing utilities."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:957
+#, no-wrap
+msgid "It does not include desktop publishing tools, which go to [.filename]#print#."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:958
+#, no-wrap
+msgid "[.filename]#tk#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:959
+#, no-wrap
+msgid "Ports that use Tk to run."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:962
+#, no-wrap
+msgid "[.filename]#ukrainian#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:963
+#, no-wrap
+msgid "Ukrainian language support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:966
+#, no-wrap
+msgid "[.filename]#vietnamese#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:967
+#, no-wrap
+msgid "Vietnamese language support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:970
+#, no-wrap
+msgid "[.filename]#wayland#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:971
+#, no-wrap
+msgid "Ports to support the Wayland display server."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:974
+#, no-wrap
+msgid "[.filename]#windowmaker#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:975
+#, no-wrap
+msgid "Ports to support the Window Maker window manager."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:978
+#, no-wrap
+msgid "[.filename]#www#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:979
+#, no-wrap
+msgid "Software related to the World Wide Web."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:981
+#, no-wrap
+msgid "HTML language support belongs here too."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:982
+#, no-wrap
+msgid "[.filename]#x11#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:983
+#, no-wrap
+msgid "The X Window System and friends."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:985
+#, no-wrap
+msgid "This category is only for software that directly supports the window system. Do not put regular X applications here. Most of them go into other [.filename]#x11-*# categories (see below)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:986
+#, no-wrap
+msgid "[.filename]#x11-clocks#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:987
+#, no-wrap
+msgid "X11 clocks."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:990
+#, no-wrap
+msgid "[.filename]#x11-drivers#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:991
+#, no-wrap
+msgid "X11 drivers."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:994
+#, no-wrap
+msgid "[.filename]#x11-fm#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:995
+#, no-wrap
+msgid "X11 file managers."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:998
+#, no-wrap
+msgid "[.filename]#x11-fonts#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:999
+#, no-wrap
+msgid "X11 fonts and font utilities."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1002
+#, no-wrap
+msgid "[.filename]#x11-servers#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1003
+#, no-wrap
+msgid "X11 servers."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1006
+#, no-wrap
+msgid "[.filename]#x11-themes#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1007
+#, no-wrap
+msgid "X11 themes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1010
+#, no-wrap
+msgid "[.filename]#x11-toolkits#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1011
+#, no-wrap
+msgid "X11 toolkits."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1014
+#, no-wrap
+msgid "[.filename]#x11-wm#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1015
+#, no-wrap
+msgid "X11 window managers."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1018
+#, no-wrap
+msgid "[.filename]#xfce#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1019
+#, no-wrap
+msgid "Ports related to the https://www.xfce.org/[Xfce] desktop environment."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1022
+#, no-wrap
+msgid "[.filename]#zope#`*`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1023
+#, no-wrap
+msgid "https://www.zope.org/[Zope] support."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1027
+#, no-wrap
+msgid "Choosing the Right Category"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1032
+msgid ""
+"As many of the categories overlap, choosing which of the categories will be "
+"the primary category of the port can be tedious. There are several rules "
+"that govern this issue. Here is the list of priorities, in decreasing order "
+"of precedence:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1034
+msgid ""
+"The first category must be a physical category (see <<porting-categories,"
+"above>>). This is necessary to make the packaging work. Virtual categories "
+"and physical categories may be intermixed after that."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1035
+msgid ""
+"Language specific categories always come first. For example, if the port "
+"installs Japanese X11 fonts, then the `CATEGORIES` line would read [."
+"filename]#japanese x11-fonts#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1036
+msgid ""
+"Specific categories are listed before less-specific ones. For instance, an "
+"HTML editor is listed as [.filename]#www editors#, not the other way around. "
+"Also, do not list [.filename]#net# when the port belongs to any of [."
+"filename]#irc#, [.filename]#mail#, [.filename]#news#, [.filename]#security#, "
+"or [.filename]#www#, as [.filename]#net# is included implicitly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1037
+msgid ""
+"[.filename]#x11# is used as a secondary category only when the primary "
+"category is a natural language. In particular, do not put [.filename]#x11# "
+"in the category line for X applications."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1038
+msgid ""
+"Emacs modes are placed in the same ports category as the application "
+"supported by the mode, not in [.filename]#editors#. For example, an Emacs "
+"mode to edit source files of some programming language goes into [."
+"filename]#lang#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1039
+msgid ""
+"Ports installing loadable kernel modules also have the virtual category [."
+"filename]#kld# in their `CATEGORIES` line. This is one of the things handled "
+"automatically by adding `USES=kmod`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1040
+msgid ""
+"[.filename]#misc# does not appear with any other non-virtual category. If "
+"there is `misc` with something else in `CATEGORIES`, that means `misc` can "
+"safely be deleted and the port placed only in the other subdirectory."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1041
+msgid ""
+"If the port truly does not belong anywhere else, put it in [.filename]#misc#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1045
+msgid ""
+"If the category is not clearly defined, please put a comment to that effect "
+"in the https://bugs.freebsd.org/submit/[port submission] in the bug database "
+"so we can discuss it before we import it. As a committer, send a note to "
+"the {freebsd-ports} so we can discuss it first. Too often, new ports are "
+"imported to the wrong category only to be moved right away."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1047
+#, no-wrap
+msgid "Proposing a New Category"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1052
+msgid ""
+"As the Ports Collection has grown over time, various new categories have "
+"been introduced. New categories can either be _virtual_ categories-those "
+"that do not have a corresponding subdirectory in the ports tree- or "
+"_physical_ categories-those that do. This section discusses the issues "
+"involved in creating a new physical category. Read it thoroughly before "
+"proposing a new one."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1054
+msgid ""
+"Our existing practice has been to avoid creating a new physical category "
+"unless either a large number of ports would logically belong to it, or the "
+"ports that would belong to it are a logically distinct group that is of "
+"limited general interest (for instance, categories related to spoken human "
+"languages), or preferably both."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1058
+msgid ""
+"The rationale for this is that such a change creates a extref:{committers-"
+"guide}[fair amount of work, ports] for both the committers and also for all "
+"users who track changes to the Ports Collection. In addition, proposed "
+"category changes just naturally seem to attract controversy. (Perhaps this "
+"is because there is no clear consensus on when a category is \"too big\", "
+"nor whether categories should lend themselves to browsing (and thus what "
+"number of categories would be an ideal number), and so forth.)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1060
+msgid "Here is the procedure:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1063
+msgid ""
+"Propose the new category on {freebsd-ports}. Include a detailed rationale "
+"for the new category, including why the existing categories are not "
+"sufficient, and the list of existing ports proposed to move. (If there are "
+"new ports pending in Bugzilla that would fit this category, list them too.) "
+"If you are the maintainer and/or submitter, respectively, mention that as it "
+"may help the case."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1064
+msgid "Participate in the discussion."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1065
+msgid ""
+"If it seems that there is support for the idea, file a PR which includes "
+"both the rationale and the list of existing ports that need to be moved. "
+"Ideally, this PR would also include these patches:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1067
+msgid "[.filename]##Makefile##s for the new ports once they are repocopied"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1068
+msgid "[.filename]#Makefile# for the new category"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1069
+msgid "[.filename]#Makefile# for the old ports' categories"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1070
+msgid "[.filename]##Makefile##s for ports that depend on the old ports"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1071
+msgid ""
+"(for extra credit, include the other files that have to change, as per the "
+"procedure in the Committer's Guide.)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1073
+msgid ""
+"Since it affects the ports infrastructure and involves moving and patching "
+"many ports but also possibly running regression tests on the build cluster, "
+"assign the PR to the {portmgr}."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1074
+msgid ""
+"If that PR is approved, a committer will need to follow the rest of the "
+"procedure that is extref:{committers-guide}[outlined in the Committer's "
+"Guide, ports]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1077
+msgid ""
+"Proposing a new virtual category is similar to the above but much less "
+"involved, since no ports will actually have to move. In this case, the only "
+"patches to include in the PR would be those to add the new category to "
+"`CATEGORIES` of the affected ports."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1079
+#, no-wrap
+msgid "Proposing Reorganizing All the Categories"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1085
+msgid ""
+"Occasionally someone proposes reorganizing the categories with either a 2-"
+"level structure, or some other kind of keyword structure. To date, nothing "
+"has come of any of these proposals because, while they are very easy to "
+"make, the effort involved to retrofit the entire existing ports collection "
+"with any kind of reorganization is daunting to say the very least. Please "
+"read the history of these proposals in the mailing list archives before "
+"posting this idea. Furthermore, be prepared to be challenged to offer a "
+"working prototype."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1087
+#, no-wrap
+msgid "The Distribution Files"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1090
+msgid ""
+"The second part of the [.filename]#Makefile# describes the files that must "
+"be downloaded to build the port, and where they can be downloaded."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1092
+#, no-wrap
+msgid "`DISTNAME`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1099
+msgid ""
+"`DISTNAME` is the name of the port as called by the authors of the "
+"software. `DISTNAME` defaults to `${PORTNAME}-"
+"${DISTVERSIONPREFIX}${DISTVERSION}${DISTVERSIONSUFFIX}`, and if not set, "
+"`DISTVERSION` defaults to `${PORTVERSION}` so override `DISTNAME` only if "
+"necessary. `DISTNAME` is only used in two places. First, the distribution "
+"file list (`DISTFILES`) defaults to `${DISTNAME}${EXTRACT_SUFX}`. Second, "
+"the distribution file is expected to extract into a subdirectory named "
+"`WRKSRC`, which defaults to [.filename]#work/${DISTNAME}#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1102
+msgid ""
+"Some vendor's distribution names which do not fit into the `${PORTNAME}-"
+"${PORTVERSION}`-scheme can be handled automatically by setting "
+"`DISTVERSIONPREFIX`, `DISTVERSION`, and `DISTVERSIONSUFFIX`. `PORTVERSION` "
+"will be derived from `DISTVERSION` automatically."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1107
+msgid ""
+"Only one of `PORTVERSION` and `DISTVERSION` can be set at a time. If "
+"`DISTVERSION` does not derive a correct `PORTVERSION`, do not use "
+"`DISTVERSION`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1111
+msgid ""
+"If the upstream version scheme can be derived into a ports-compatible "
+"version scheme, set some variable to the upstream version, _do not_ use "
+"`DISTVERSION` as the variable name. Set `PORTVERSION` to the computed "
+"version based on the variable you created, and set `DISTNAME` accordingly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1113
+msgid ""
+"If the upstream version scheme cannot easily be coerced into a ports-"
+"compatible value, set `PORTVERSION` to a sensible value, and set `DISTNAME` "
+"with `PORTNAME` with the verbatim upstream version."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1115
+#, no-wrap
+msgid "Deriving `PORTVERSION` Manually"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1121
+msgid ""
+"BIND9 uses a version scheme that is not compatible with the ports versions "
+"(it has `-` in its versions) and cannot be derived using `DISTVERSION` "
+"because after the 9.9.9 release, it will release a \"patchlevels\" in the "
+"form of `9.9.9-P1`. DISTVERSION would translate that into `9.9.9.p1`, "
+"which, in the ports versioning scheme means 9.9.9 pre-release 1, which is "
+"before 9.9.9 and not after. So `PORTVERSION` is manually derived from an "
+"`ISCVERSION` variable to output `9.9.9p1`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1123
+msgid ""
+"The order into which the ports framework, and pkg, will sort versions is "
+"checked using the `-t` argument of man:pkg-version[8]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1130
+#, no-wrap
+msgid ""
+"% pkg version -t 9.9.9 9.9.9.p1\n"
+"> <.>\n"
+"% pkg version -t 9.9.9 9.9.9p1\n"
+"< <.>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1133
+msgid ""
+"The `>` sign means that the first argument passed to `-t` is greater than "
+"the second argument. `9.9.9` is after `9.9.9.p1`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1134
+msgid ""
+"The `<` sign means that the first argument passed to `-t` is less than the "
+"second argument. `9.9.9` is before `9.9.9p1`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1136
+msgid ""
+"In the port [.filename]#Makefile#, for example package:dns/bind99[], it is "
+"achieved by:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1145
+#, no-wrap
+msgid ""
+"PORTNAME=\tbind\n"
+"PORTVERSION=\t${ISCVERSION:S/-P/P/:S/b/.b/:S/a/.a/:S/rc/.rc/}\n"
+"CATEGORIES=\tdns net\n"
+"MASTER_SITES=\tISC/bind9/${ISCVERSION}\n"
+"PKGNAMESUFFIX=\t99\n"
+"DISTNAME=\t${PORTNAME}-${ISCVERSION}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1149
+#, no-wrap
+msgid ""
+"MAINTAINER=\tmat@FreeBSD.org\n"
+"COMMENT=\tBIND DNS suite with updated DNSSEC and DNS64\n"
+"WWW=\t\thttps://www.isc.org/bind/\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1151
+#, no-wrap
+msgid "LICENSE=\tISCL\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1154
+#, no-wrap
+msgid ""
+"# ISC releases things like 9.8.0-P1 or 9.8.1rc1, which our versioning does not like\n"
+"ISCVERSION=\t9.9.9-P6\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1160
+msgid ""
+"Define upstream version in `ISCVERSION`, with a comment saying _why_ it is "
+"needed. Use `ISCVERSION` to get a ports-compatible `PORTVERSION`. Use "
+"`ISCVERSION` directly to get the correct URL for fetching the distribution "
+"file. Use `ISCVERSION` directly to name the distribution file."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1163
+#, no-wrap
+msgid "Derive `DISTNAME` from `PORTVERSION`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1167
+msgid ""
+"From time to time, the distribution file name has little or no relation to "
+"the version of the software."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1169
+msgid ""
+"In package:comms/kermit[], only the last element of the version is present "
+"in the distribution file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1177
+#, no-wrap
+msgid ""
+"PORTNAME=\tkermit\n"
+"PORTVERSION=\t9.0.304\n"
+"CATEGORIES=\tcomms ftp net\n"
+"MASTER_SITES=\tftp://ftp.kermitproject.org/kermit/test/tar/\n"
+"DISTNAME=\tcku${PORTVERSION:E}-dev20\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1181
+msgid ""
+"The `:E` man:make[1] modifier returns the suffix of the variable, in this "
+"case, `304`. The distribution file is correctly generated as `cku304-dev20."
+"tar.gz`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1184
+#, no-wrap
+msgid "Exotic Case 1"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1188
+msgid ""
+"Sometimes, there is no relation between the software name, its version, and "
+"the distribution file it is distributed in."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1190
+msgid "From package:audio/libworkman[]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1198
+#, no-wrap
+msgid ""
+"PORTNAME= libworkman\n"
+"PORTVERSION= 1.4\n"
+"CATEGORIES= audio\n"
+"MASTER_SITES= LOCAL/jim\n"
+"DISTNAME= ${PORTNAME}-1999-06-20\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1203
+#, no-wrap
+msgid "Exotic Case 2"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1207
+msgid ""
+"In package:comms/librs232[], the distribution file is not versioned, so "
+"using <<makefile-dist_subdir,`DIST_SUBDIR`>> is needed:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1216
+#, no-wrap
+msgid ""
+"PORTNAME= librs232\n"
+"PORTVERSION= 20160710\n"
+"CATEGORIES= comms\n"
+"MASTER_SITES= http://www.teuniz.net/RS-232/\n"
+"DISTNAME= RS-232\n"
+"DIST_SUBDIR=\t${PORTNAME}-${PORTVERSION}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1224
+msgid ""
+"`PKGNAMEPREFIX` and `PKGNAMESUFFIX` do not affect `DISTNAME`. Also note "
+"that if `WRKSRC` is equal to [.filename]#${WRKDIR}/${DISTNAME}# while the "
+"original source archive is named something other than `${PORTNAME}-"
+"${PORTVERSION}${EXTRACT_SUFX}`, leave `DISTNAME` alone- defining only "
+"`DISTFILES` is easier than both `DISTNAME` and `WRKSRC` (and possibly "
+"`EXTRACT_SUFX`)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1227
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4821
+#, no-wrap
+msgid "`MASTER_SITES`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1231
+msgid ""
+"Record the directory part of the FTP/HTTP-URL pointing at the original "
+"tarball in `MASTER_SITES`. Do not forget the trailing slash ([.filename]#/"
+"#)!"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1233
+msgid ""
+"The `make` macros will try to use this specification for grabbing the "
+"distribution file with `FETCH` if they cannot find it already on the system."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1236
+msgid ""
+"It is recommended that multiple sites are included on this list, preferably "
+"from different continents. This will safeguard against wide-area network "
+"problems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1244
+msgid ""
+"`MASTER_SITES` must not be blank. It must point to the actual site hosting "
+"the distribution files. It cannot point to web archives, or the FreeBSD "
+"distribution files cache sites. The only exception to this rule is ports "
+"that do not have any distribution files. For example, meta-ports do not "
+"have any distribution files, so `MASTER_SITES` does not need to be set."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1247
+#, no-wrap
+msgid "Using `MASTER_SITE_*` Variables"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1250
+msgid ""
+"Shortcut abbreviations are available for popular archives like SourceForge "
+"(`SOURCEFORGE`), GNU (`GNU`), or Perl CPAN (`PERL_CPAN`). `MASTER_SITES` can "
+"use them directly:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1254
+#, no-wrap
+msgid "MASTER_SITES=\tGNU/make\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1258
+msgid ""
+"The older expanded format still works, but all ports have been converted to "
+"the compact format. The expanded format looks like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1263
+#, no-wrap
+msgid ""
+"MASTER_SITES=\t\t${MASTER_SITE_GNU}\n"
+"MASTER_SITE_SUBDIR=\tmake\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1267
+msgid ""
+"These values and variables are defined in https://cgit.freebsd.org/ports/"
+"tree/Mk/bsd.sites.mk[Mk/bsd.sites.mk]. New entries are added often, so make "
+"sure to check the latest version of this file before submitting a port."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1272
+msgid ""
+"For any `MASTER_SITE_FOO` variable, the shorthand `_FOO_` can be used. For "
+"example, use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1276
+#, no-wrap
+msgid "MASTER_SITES=\tFOO\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1279
+msgid "If `MASTER_SITE_SUBDIR` is needed, use this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1283
+#, no-wrap
+msgid "MASTER_SITES=\tFOO/bar\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1290
+msgid ""
+"Some `MASTER_SITE_*` names are quite long, and for ease of use, shortcuts "
+"have been defined:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1292
+#, no-wrap
+msgid "Shortcuts for `MASTER_SITE_*` Macros"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1296
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1354
+#, no-wrap
+msgid "Macro"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1298
+#, no-wrap
+msgid "Shortcut"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1299
+#, no-wrap
+msgid "`PERL_CPAN`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1301
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1372
+#, no-wrap
+msgid "`CPAN`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1302
+#, no-wrap
+msgid "`GITHUB`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1304
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1393
+#, no-wrap
+msgid "`GH`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1305
+#, no-wrap
+msgid "`GITHUB_CLOUD`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1307
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1396
+#, no-wrap
+msgid "`GHC`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1308
+#, no-wrap
+msgid "`LIBREOFFICE_DEV`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1310
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1414
+#, no-wrap
+msgid "`LODEV`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1311
+#, no-wrap
+msgid "`NETLIB`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1313
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1423
+#, no-wrap
+msgid "`NL`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1314
+#, no-wrap
+msgid "`RUBYGEMS`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1316
+#, no-wrap
+msgid "`RG`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1317
+#, no-wrap
+msgid "`SOURCEFORGE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1318
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1435
+#, no-wrap
+msgid "`SF`"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1322
+#, no-wrap
+msgid "Magic MASTER_SITES Macros"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1327
+msgid ""
+"Several \"magic\" macros exist for popular sites with a predictable "
+"directory structure. For these, just use the abbreviation and the system "
+"will choose a subdirectory automatically. For a port named `Stardict`, of "
+"version `1.2.3`, and hosted on SourceForge, adding this line:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1331
+#, no-wrap
+msgid "MASTER_SITES=\tSF\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1335
+msgid ""
+"infers a subdirectory named `/project/stardict/stardict/1.2.3`. If the "
+"inferred directory is incorrect, it can be overridden:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1339
+#, no-wrap
+msgid "MASTER_SITES=\tSF/stardict/WyabdcRealPeopleTTS/${PORTVERSION}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1342
+msgid "This can also be written as"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1347
+#, no-wrap
+msgid ""
+"MASTER_SITES=\tSF\n"
+"MASTER_SITE_SUBDIR=\tstardict/WyabdcRealPeopleTTS/${PORTVERSION}\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1350
+#, no-wrap
+msgid "Magic `MASTER_SITES` Macros"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1356
+#, no-wrap
+msgid "Assumed subdirectory"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1357
+#, no-wrap
+msgid "`APACHE_COMMONS_BINARIES`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1359
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1362
+#, no-wrap
+msgid "`${PORTNAME:S,commons-,,}`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1360
+#, no-wrap
+msgid "`APACHE_COMMONS_SOURCE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1363
+#, no-wrap
+msgid "`APACHE_JAKARTA`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1365
+#, no-wrap
+msgid "`${PORTNAME:S,-,/,}/source`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1366
+#, no-wrap
+msgid "`BERLIOS`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1368
+#, no-wrap
+msgid "`${PORTNAME:tl}.berlios`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1369
+#, no-wrap
+msgid "`CHEESESHOP`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1371
+#, no-wrap
+msgid "`source/${DISTNAME:C/(.).\\*/\\1/}/${DISTNAME:C/(.*)-[0-9].*/\\1/}`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1374
+#, no-wrap
+msgid "`${PORTNAME:C/-.*//}`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1375
+#, no-wrap
+msgid "`DEBIAN`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1377
+#, no-wrap
+msgid "`pool/main/${PORTNAME:C/^((lib)?.).*$/\\1/}/${PORTNAME}`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1378
+#, no-wrap
+msgid "`FARSIGHT`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1380
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1404
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1407
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1410
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1413
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1416
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1425
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1431
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1464
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1468
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1869
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1873
+#, no-wrap
+msgid "`${PORTNAME}`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1381
+#, no-wrap
+msgid "`FESTIVAL`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1383
+#, no-wrap
+msgid "`${PORTREVISION}`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1384
+#, no-wrap
+msgid "`GCC`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1386
+#, no-wrap
+msgid "`releases/${DISTNAME}`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1387
+#, no-wrap
+msgid "`GENTOO`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1389
+#, no-wrap
+msgid "`distfiles`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1390
+#, no-wrap
+msgid "`GIMP`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1392
+#, no-wrap
+msgid "`${PORTNAME}/${PORTVERSION:R}/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1395
+#, no-wrap
+msgid "`${GH_ACCOUNT}/${GH_PROJECT}/tar.gz/${GH_TAGNAME}?dummy=/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1398
+#, no-wrap
+msgid "`${GH_ACCOUNT}/${GH_PROJECT}/`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1399
+#, no-wrap
+msgid "`GNOME`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1401
+#, no-wrap
+msgid "`sources/${PORTNAME}/${PORTVERSION:C/^([0-9]+\\.[0-9]+).*/\\1/}`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1402
+#, no-wrap
+msgid "`GNU`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1405
+#, no-wrap
+msgid "`GNUPG`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1408
+#, no-wrap
+msgid "`GNU_ALPHA`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1411
+#, no-wrap
+msgid "`HORDE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1417
+#, no-wrap
+msgid "`MATE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1419
+#, no-wrap
+msgid "`${PORTVERSION:C/^([0-9]+\\.[0-9]+).*/\\1/}`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1420
+#, no-wrap
+msgid "`MOZDEV`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1422
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1434
+#, no-wrap
+msgid "`${PORTNAME:tl}`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1426
+#, no-wrap
+msgid "`QT`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1428
+#, no-wrap
+msgid "`archive/qt/${PORTVERSION:R}`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1429
+#, no-wrap
+msgid "`SAMBA`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1432
+#, no-wrap
+msgid "`SAVANNAH`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1436
+#, no-wrap
+msgid "`${PORTNAME:tl}/${PORTNAME:tl}/${PORTVERSION}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1439
+#, no-wrap
+msgid "`USE_GITHUB`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1443
+msgid ""
+"If the distribution file comes from a specific commit or tag on https://"
+"github.com/[GitHub] for which there is no officially released file, there is "
+"an easy way to set the right `DISTNAME` and `MASTER_SITES` automatically."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1448
+msgid ""
+"As of 2023-02-21 link:https://github.blog/2023-02-21-update-on-the-future-"
+"stability-of-source-code-archives-and-hashes/[GitHub] have announced that "
+"source downloads will be stable for a year. Please switch to release assets "
+"and if not available ask upstream to generate ones."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1451
+msgid "These variables are available:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1453
+#, no-wrap
+msgid "`USE_GITHUB` Description"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1457
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1858
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3614
+#, no-wrap
+msgid "Variable"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1460
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1861
+#, no-wrap
+msgid "Default"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1461
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4803
+#, no-wrap
+msgid "`GH_ACCOUNT`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1462
+#, no-wrap
+msgid "Account name of the GitHub user hosting the project"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1465
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4804
+#, no-wrap
+msgid "`GH_PROJECT`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1466
+#, no-wrap
+msgid "Name of the project on GitHub"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1469
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4806
+#, no-wrap
+msgid "`GH_TAGNAME`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1470
+#, no-wrap
+msgid "Name of the tag to download (2.0.1, hash, ...) Using the name of a branch here is incorrect. It is also possible to use the hash of a commit id to do a snapshot."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1472
+#, no-wrap
+msgid "`${DISTVERSIONPREFIX}${DISTVERSION}${DISTVERSIONSUFFIX}`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1473
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4805
+#, no-wrap
+msgid "`GH_SUBDIR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1474
+#, no-wrap
+msgid "When the software needs an additional distribution file to be extracted within `${WRKSRC}`, this variable can be used. See the examples in <<makefile-master_sites-github-multiple>> for more information."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1476
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1881
+#, no-wrap
+msgid "(none)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1477
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4807
+#, no-wrap
+msgid "`GH_TUPLE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1478
+#, no-wrap
+msgid "`GH_TUPLE` allows putting `GH_ACCOUNT`, `GH_PROJECT`, `GH_TAGNAME`, and `GH_SUBDIR` into a single variable. The format is _account_`:`_project_`:`_tagname_`:`_group_`/`_subdir_. The `/`_subdir_ part is optional. It is helpful when there is more than one GitHub project from which to fetch."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1483
+msgid ""
+"Do not use `GH_TUPLE` for the default distribution file, as it has no "
+"default."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1486
+#, no-wrap
+msgid "Simple Use of `USE_GITHUB`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1491
+msgid ""
+"While trying to make a port for version `1.2.7` of pkg from the FreeBSD user "
+"on github, at https://github.com/freebsd/pkg/[], The [.filename]#Makefile# "
+"would end up looking like this (slightly stripped for the example):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1496
+#, no-wrap
+msgid ""
+"PORTNAME=\tpkg\n"
+"DISTVERSION=\t1.2.7\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1499
+#, no-wrap
+msgid ""
+"USE_GITHUB=\tyes\n"
+"GH_ACCOUNT=\tfreebsd\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1502
+msgid ""
+"It will automatically have `MASTER_SITES` set to `GH` and `WRKSRC` to "
+"`${WRKDIR}/pkg-1.2.7`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1505
+#, no-wrap
+msgid "More Complete Use of `USE_GITHUB`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1509
+msgid ""
+"While trying to make a port for the bleeding edge version of pkg from the "
+"FreeBSD user on github, at https://github.com/freebsd/pkg/[], the [."
+"filename]#Makefile# ends up looking like this (slightly stripped for the "
+"example):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1514
+#, no-wrap
+msgid ""
+"PORTNAME=\tpkg-devel\n"
+"DISTVERSION=\t1.3.0.a.20140411\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1519
+#, no-wrap
+msgid ""
+"USE_GITHUB=\tyes\n"
+"GH_ACCOUNT=\tfreebsd\n"
+"GH_PROJECT=\tpkg\n"
+"GH_TAGNAME=\t6dbb17b\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1522
+msgid ""
+"It will automatically have `MASTER_SITES` set to `GH` and `WRKSRC` to "
+"`${WRKDIR}/pkg-6dbb17b`."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1526
+msgid ""
+"`20140411` is the date of the commit referenced in `GH_TAGNAME`, not the "
+"date the [.filename]#Makefile# is edited, or the date the commit is made."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1531
+#, no-wrap
+msgid "Use of `USE_GITHUB` with `DISTVERSIONPREFIX`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1537
+msgid ""
+"From time to time, `GH_TAGNAME` is a slight variation from `DISTVERSION`. "
+"For example, if the version is `1.0.2`, the tag is `v1.0.2`. In those "
+"cases, it is possible to use `DISTVERSIONPREFIX` or `DISTVERSIONSUFFIX`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1543
+#, no-wrap
+msgid ""
+"PORTNAME=\tfoo\n"
+"DISTVERSIONPREFIX=\tv\n"
+"DISTVERSION=\t1.0.2\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1545
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1608
+#, no-wrap
+msgid "USE_GITHUB=\tyes\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1548
+msgid ""
+"It will automatically set `GH_TAGNAME` to `v1.0.2`, while `WRKSRC` will be "
+"kept to `${WRKDIR}/foo-1.0.2`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1551
+#, no-wrap
+msgid "Using `USE_GITHUB` When Upstream Does Not Use Versions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1556
+msgid ""
+"If there never was a version upstream, do not invent one like `0.1` or "
+"`1.0`. Create the port with a `DISTVERSION` of `g__YYYYMMDD__`, where `g` "
+"is for Git, and `_YYYYMMDD_` represents the date the commit referenced in "
+"`GH_TAGNAME`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1561
+#, no-wrap
+msgid ""
+"PORTNAME=\tbar\n"
+"DISTVERSION=\tg20140411\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1564
+#, no-wrap
+msgid ""
+"USE_GITHUB=\tyes\n"
+"GH_TAGNAME=\tc472d66b\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1567
+msgid ""
+"This creates a versioning scheme that increases over time, and that is still "
+"before version `0` (see <<makefile-versions-ex-pkg-version>> for details on "
+"man:pkg-version[8]):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1572
+#, no-wrap
+msgid ""
+"% pkg version -t g20140411 0\n"
+"<\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1575
+msgid ""
+"Which means using `PORTEPOCH` will not be needed in case upstream decides to "
+"cut versions in the future."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1578
+#, no-wrap
+msgid "Using `USE_GITHUB` to Access a Commit Between Two Versions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1582
+msgid ""
+"If the current version of the software uses a Git tag, and the port needs to "
+"be updated to a newer, intermediate version, without a tag, use man:git-"
+"describe[1] to find out the version to use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1587
+#, no-wrap
+msgid ""
+"% git describe --tags f0038b1\n"
+"v0.7.3-14-gf0038b1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1590
+msgid "`v0.7.3-14-gf0038b1` can be split into three parts:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1591
+#, no-wrap
+msgid "`v0.7.3`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1593
+msgid ""
+"This is the last Git tag that appears in the commit history before the "
+"requested commit."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1594
+#, no-wrap
+msgid "`-14`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1596
+msgid ""
+"This means that the requested commit, `f0038b1`, is the 14th commit after "
+"the `v0.7.3` tag."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1597
+#, no-wrap
+msgid "`-gf0038b1`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1599
+msgid ""
+"The `-g` means \"Git\", and the `f0038b1` is the commit hash that this "
+"reference points to."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1606
+#, no-wrap
+msgid ""
+"PORTNAME=\tbar\n"
+"DISTVERSIONPREFIX= v\n"
+"DISTVERSION=\t0.7.3-14\n"
+"DISTVERSIONSUFFIX= -gf0038b1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1612
+msgid ""
+"This creates a versioning scheme that increases over time (well, over "
+"commits), and does not conflict with the creation of a `0.7.4` version. "
+"(See <<makefile-versions-ex-pkg-version>> for details on man:pkg-version[8]):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1619
+#, no-wrap
+msgid ""
+"% pkg version -t 0.7.3 0.7.3.14\n"
+"<\n"
+"% pkg version -t 0.7.3.14 0.7.4\n"
+"<\n"
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1625
+msgid ""
+"If the requested commit is the same as a tag, a shorter description is shown "
+"by default. The longer version is equivalent:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1630
+#, no-wrap
+msgid ""
+"% git describe --tags c66c71d\n"
+"v0.7.3\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1633
+#, no-wrap
+msgid ""
+"% git describe --tags --long c66c71d\n"
+"v0.7.3-0-gc66c71d\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1640
+#, no-wrap
+msgid "Fetching Multiple Files from GitHub"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1644
+msgid ""
+"The `USE_GITHUB` framework also supports fetching multiple distribution "
+"files from different places in GitHub. It works in a way very similar to "
+"<<porting-master-sites-n>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1649
+msgid ""
+"Multiple values are added to `GH_ACCOUNT`, `GH_PROJECT`, and `GH_TAGNAME`. "
+"Each different value is assigned a group. The main value can either have no "
+"group, or the `:DEFAULT` group. A value can be omitted if it is the same as "
+"the default as listed in <<makefile-master_sites-github-description>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1652
+msgid ""
+"`GH_TUPLE` can also be used when there are a lot of distribution files. It "
+"helps keep the account, project, tagname, and group information at the same "
+"place."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1655
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1951
+msgid ""
+"For each group, a `${WRKSRC_group}` helper variable is created, containing "
+"the directory into which the file has been extracted. The `${WRKSRC_group}` "
+"variables can be used to move directories around during `post-extract`, or "
+"add to `CONFIGURE_ARGS`, or whatever is needed so that the software builds "
+"correctly."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1660
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1956
+msgid ""
+"The `:__group__` part _must_ be used for _only one_ distribution file. It "
+"is used as a unique key and using it more than once will overwrite the "
+"previous values."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1665
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1961
+msgid ""
+"As this is only syntactic sugar above `DISTFILES` and `MASTER_SITES`, the "
+"group names must adhere to the restrictions on group names outlined in "
+"<<porting-master-sites-n>>"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1669
+msgid ""
+"When fetching multiple files from GitHub, sometimes the default distribution "
+"file is not fetched from GitHub. To disable fetching the default "
+"distribution, set:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1673
+#, no-wrap
+msgid "USE_GITHUB=\tnodefault\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1678
+msgid ""
+"When using `USE_GITHUB=nodefault`, the [.filename]#Makefile# must set "
+"`DISTFILES` in its crossref:porting-order[porting-order-portname,top block]. "
+"The definition should be:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1682
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1979
+#, no-wrap
+msgid "DISTFILES= ${DISTNAME}${EXTRACT_SUFX}\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1687
+#, no-wrap
+msgid "Use of `USE_GITHUB` with Multiple Distribution Files"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1693
+msgid ""
+"From time to time, there is a need to fetch more than one distribution "
+"file. For example, when the upstream git repository uses submodules. This "
+"can be done easily using groups in the `GH_*` variables:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1698
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1743
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1995
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2040
+#, no-wrap
+msgid ""
+"PORTNAME=\tfoo\n"
+"DISTVERSION=\t1.0.2\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1704
+#, no-wrap
+msgid ""
+"USE_GITHUB=\tyes\n"
+"GH_ACCOUNT=\tbar:icons,contrib\n"
+"GH_PROJECT=\tfoo-icons:icons foo-contrib:contrib\n"
+"GH_TAGNAME=\t1.0:icons fa579bc:contrib\n"
+"GH_SUBDIR=\text/icons:icons\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1706
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1749
+#, no-wrap
+msgid "CONFIGURE_ARGS=\t--with-contrib=${WRKSRC_contrib}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1713
+msgid ""
+"This will fetch three distribution files from github. The default one comes "
+"from [.filename]#foo/foo# and is version `1.0.2`. The second one, with the "
+"`icons` group, comes from [.filename]#bar/foo-icons# and is in version "
+"`1.0`. The third one comes from [.filename]#bar/foo-contrib# and uses the "
+"Git commit `fa579bc`. The distribution files are named [.filename]#foo-"
+"foo-1.0.2_GH0.tar.gz#, [.filename]#bar-foo-icons-1.0_GH0.tar.gz#, and [."
+"filename]#bar-foo-contrib-fa579bc_GH0.tar.gz#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1719
+msgid ""
+"All the distribution files are extracted in `${WRKDIR}` in their respective "
+"subdirectories. The default file is still extracted in `${WRKSRC}`, in this "
+"case, [.filename]#${WRKDIR}/foo-1.0.2#. Each additional distribution file "
+"is extracted in `${WRKSRC_group}`. Here, for the `icons` group, it is "
+"called `${WRKSRC_icons}` and it contains [.filename]#${WRKDIR}/foo-"
+"icons-1.0#. The file with the `contrib` group is called `${WRKSRC_contrib}` "
+"and contains `${WRKDIR}/foo-contrib-fa579bc`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1723
+msgid ""
+"The software's build system expects to find the icons in a [.filename]#ext/"
+"icons# subdirectory in its sources, so `GH_SUBDIR` is used. `GH_SUBDIR` "
+"makes sure that [.filename]#ext# exists, but that [.filename]#ext/icons# "
+"does not already exist. Then it does this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1728
+#, no-wrap
+msgid ""
+"post-extract:\n"
+" @${MV} ${WRKSRC_icons} ${WRKSRC}/ext/icons\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1733
+#, no-wrap
+msgid "Use of `USE_GITHUB` with Multiple Distribution Files Using `GH_TUPLE`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1738
+msgid ""
+"This is functionally equivalent to <<makefile-master_sites-github-multi>>, "
+"but using `GH_TUPLE`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1747
+#, no-wrap
+msgid ""
+"USE_GITHUB=\tyes\n"
+"GH_TUPLE=\tbar:foo-icons:1.0:icons/ext/icons \\\n"
+"\t\tbar:foo-contrib:fa579bc:contrib\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1753
+msgid ""
+"Grouping was used in the previous example with `bar:icons,contrib`. Some "
+"redundant information is present with `GH_TUPLE` because grouping is not "
+"possible."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1756
+#, no-wrap
+msgid "How to Use `USE_GITHUB` with Git Submodules?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1761
+msgid ""
+"Ports with GitHub as an upstream repository sometimes use submodules. See "
+"man:git-submodule[1] for more information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1764
+msgid ""
+"The problem with submodules is that each is a separate repository. As such, "
+"they each must be fetched separately."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1769
+msgid ""
+"Using package:finance/moneymanagerex[] as an example, its GitHub repository "
+"is https://github.com/moneymanagerex/moneymanagerex/[]. It has a https://"
+"github.com/moneymanagerex/moneymanagerex/blob/master/.gitmodules[."
+"gitmodules] file at the root. This file describes all the submodules used "
+"in this repository, and lists additional repositories needed. This file "
+"will tell what additional repositories are needed:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1785
+#, no-wrap
+msgid ""
+"[submodule \"lib/wxsqlite3\"]\n"
+"\tpath = lib/wxsqlite3\n"
+"\turl = https://github.com/utelle/wxsqlite3.git\n"
+"[submodule \"3rd/mongoose\"]\n"
+"\tpath = 3rd/mongoose\n"
+"\turl = https://github.com/cesanta/mongoose.git\n"
+"[submodule \"3rd/LuaGlue\"]\n"
+"\tpath = 3rd/LuaGlue\n"
+"\turl = https://github.com/moneymanagerex/LuaGlue.git\n"
+"[submodule \"3rd/cgitemplate\"]\n"
+"\tpath = 3rd/cgitemplate\n"
+"\turl = https://github.com/moneymanagerex/html-template.git\n"
+"[...]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1789
+msgid ""
+"The only information missing from that file is the commit hash or tag to use "
+"as a version. This information is found after cloning the repository:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1818
+#, no-wrap
+msgid ""
+"% git clone --recurse-submodules https://github.com/moneymanagerex/moneymanagerex.git\n"
+"Cloning into 'moneymanagerex'...\n"
+"remote: Counting objects: 32387, done.\n"
+"[...]\n"
+"Submodule '3rd/LuaGlue' (https://github.com/moneymanagerex/LuaGlue.git) registered for path '3rd/LuaGlue'\n"
+"Submodule '3rd/cgitemplate' (https://github.com/moneymanagerex/html-template.git) registered for path '3rd/cgitemplate'\n"
+"Submodule '3rd/mongoose' (https://github.com/cesanta/mongoose.git) registered for path '3rd/mongoose'\n"
+"Submodule 'lib/wxsqlite3' (https://github.com/utelle/wxsqlite3.git) registered for path 'lib/wxsqlite3'\n"
+"[...]\n"
+"Cloning into '/home/mat/work/freebsd/ports/finance/moneymanagerex/moneymanagerex/3rd/LuaGlue'...\n"
+"Cloning into '/home/mat/work/freebsd/ports/finance/moneymanagerex/moneymanagerex/3rd/cgitemplate'...\n"
+"Cloning into '/home/mat/work/freebsd/ports/finance/moneymanagerex/moneymanagerex/3rd/mongoose'...\n"
+"Cloning into '/home/mat/work/freebsd/ports/finance/moneymanagerex/moneymanagerex/lib/wxsqlite3'...\n"
+"[...]\n"
+"Submodule path '3rd/LuaGlue': checked out 'c51d11a247ee4d1e9817dfa2a8da8d9e2f97ae3b'\n"
+"Submodule path '3rd/cgitemplate': checked out 'cd434eeeb35904ebcd3d718ba29c281a649b192c'\n"
+"Submodule path '3rd/mongoose': checked out '2140e5992ab9a3a9a34ce9a281abf57f00f95cda'\n"
+"Submodule path 'lib/wxsqlite3': checked out 'fb66eb230d8aed21dec273b38c7c054dcb7d6b51'\n"
+"[...]\n"
+"% cd moneymanagerex\n"
+"% git submodule status\n"
+" c51d11a247ee4d1e9817dfa2a8da8d9e2f97ae3b 3rd/LuaGlue (heads/master)\n"
+" cd434eeeb35904ebcd3d718ba29c281a649b192c 3rd/cgitemplate (cd434ee)\n"
+" 2140e5992ab9a3a9a34ce9a281abf57f00f95cda 3rd/mongoose (6.2-138-g2140e59)\n"
+" fb66eb230d8aed21dec273b38c7c054dcb7d6b51 lib/wxsqlite3 (v3.4.0)\n"
+"[...]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1822
+msgid ""
+"It can also be found on GitHub. Each subdirectory that is a submodule is "
+"shown as `_directory @ hash_`, for example, `mongoose @ 2140e59`."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1828
+msgid ""
+"While getting the information from GitHub seems more straightforward, the "
+"information found using `git submodule status` will provide more meaningful "
+"information. For example, here, ``lib/wxsqlite3``'s commit hash `fb66eb2` "
+"correspond to `v3.4.0`. Both can be used interchangeably, but when a tag is "
+"available, use it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1831
+msgid ""
+"Now that all the required information has been gathered, the [."
+"filename]#Makefile# can be written (only GitHub-related lines are shown):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1837
+#, no-wrap
+msgid ""
+"PORTNAME=\tmoneymanagerex\n"
+"DISTVERSIONPREFIX=\tv\n"
+"DISTVERSION=\t1.3.0\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1844
+#, no-wrap
+msgid ""
+"USE_GITHUB=\tyes\n"
+"GH_TUPLE=\tutelle:wxsqlite3:v3.4.0:wxsqlite3/lib/wxsqlite3 \\\n"
+"\t\tmoneymanagerex:LuaGlue:c51d11a:lua_glue/3rd/LuaGlue \\\n"
+"\t\tmoneymanagerex:html-template:cd434ee:html_template/3rd/cgitemplate \\\n"
+"\t\tcesanta:mongoose:2140e59:mongoose/3rd/mongoose \\\n"
+"\t\t[...]\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1849
+#, no-wrap
+msgid "`USE_GITLAB`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1852
+msgid ""
+"Similar to GitHub, if the distribution file comes from https://gitlab.com/"
+"[gitlab.com] or is hosting the GitLab software, these variables are "
+"available for use and might need to be set."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1854
+#, no-wrap
+msgid "`USE_GITLAB` Description"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1862
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4811
+#, no-wrap
+msgid "`GL_SITE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1863
+#, no-wrap
+msgid "Site name hosting the GitLab project"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1865
+#, no-wrap
+msgid "https://gitlab.com/"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1866
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4808
+#, no-wrap
+msgid "`GL_ACCOUNT`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1867
+#, no-wrap
+msgid "Account name of the GitLab user hosting the project"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1870
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4810
+#, no-wrap
+msgid "`GL_PROJECT`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1871
+#, no-wrap
+msgid "Name of the project on GitLab"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1874
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4809
+#, no-wrap
+msgid "`GL_COMMIT`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1875
+#, no-wrap
+msgid "The commit hash to download. Must be the full 160 bit, 40 character hex sha1 hash. This is a required variable for GitLab."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1877
+#, no-wrap
+msgid "`(none)`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1878
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4812
+#, no-wrap
+msgid "`GL_SUBDIR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1879
+#, no-wrap
+msgid "When the software needs an additional distribution file to be extracted within `${WRKSRC}`, this variable can be used. See the examples in <<makefile-master_sites-gitlab-multiple>> for more information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1882
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4813
+#, no-wrap
+msgid "`GL_TUPLE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1883
+#, no-wrap
+msgid "`GL_TUPLE` allows putting `GL_SITE`, `GL_ACCOUNT`, `GL_PROJECT`, `GL_COMMIT`, and `GL_SUBDIR` into a single variable. The format is _site_`:`_account_`:`_project_`:`_commit_`:`_group_`/`_subdir_. The _site_`:` and `/`_subdir_ part is optional. It is helpful when there are more than one GitLab project from which to fetch."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1886
+#, no-wrap
+msgid "Simple Use of `USE_GITLAB`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1890
+msgid ""
+"While trying to make a port for version `1.14` of libsignon-glib from the "
+"accounts-sso user on gitlab.com, at https://gitlab.com/accounts-sso/"
+"libsignon-glib/[], The [.filename]#Makefile# would end up looking like this "
+"for fetching the distribution files:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1895
+#, no-wrap
+msgid ""
+"PORTNAME=\tlibsignon-glib\n"
+"DISTVERSION=\t1.14\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1899
+#, no-wrap
+msgid ""
+"USE_GITLAB=\tyes\n"
+"GL_ACCOUNT=\taccounts-sso\n"
+"GL_COMMIT=\te90302e342bfd27bc8c9132ab9d0ea3d8723fd03\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1902
+msgid ""
+"It will automatically have `MASTER_SITES` set to https://gitlab.com/[gitlab."
+"com] and `WRKSRC` to `${WRKDIR}/libsignon-glib-"
+"e90302e342bfd27bc8c9132ab9d0ea3d8723fd03-"
+"e90302e342bfd27bc8c9132ab9d0ea3d8723fd03`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1905
+#, no-wrap
+msgid "More Complete Use of `USE_GITLAB`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1910
+msgid ""
+"A more complete use of the above if port had no versioning and foobar from "
+"the foo user on project bar on a self hosted GitLab site `https://gitlab."
+"example.com/`, the [.filename]#Makefile# ends up looking like this for "
+"fetching distribution files:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1915
+#, no-wrap
+msgid ""
+"PORTNAME=\tfoobar\n"
+"DISTVERSION=\tg20170906\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1921
+#, no-wrap
+msgid ""
+"USE_GITLAB=\tyes\n"
+"GL_SITE=\thttps://gitlab.example.com\n"
+"GL_ACCOUNT=\tfoo\n"
+"GL_PROJECT=\tbar\n"
+"GL_COMMIT=\t9c1669ce60c3f4f5eb43df874d7314483fb3f8a6\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1924
+msgid ""
+"It will have `MASTER_SITES` set to `\"https://gitlab.example.com\"` and "
+"`WRKSRC` to `${WRKDIR}/"
+"bar-9c1669ce60c3f4f5eb43df874d7314483fb3f8a6-9c1669ce60c3f4f5eb43df874d7314483fb3f8a6`."
+msgstr ""
+
+#. type: delimited block = 6
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1928
+msgid ""
+"`20170906` is the date of the commit referenced in `GL_COMMIT`, not the date "
+"the [.filename]#Makefile# is edited, or the date the commit to the FreeBSD "
+"ports tree is made."
+msgstr ""
+
+#. type: delimited block = 6
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1933
+msgid ""
+"``GL_SITE``'s protocol, port and webroot can all be modified in the same "
+"variable."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1938
+#, no-wrap
+msgid "Fetching Multiple Files from GitLab"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1942
+msgid ""
+"The `USE_GITLAB` framework also supports fetching multiple distribution "
+"files from different places from GitLab and GitLab hosted sites. It works "
+"in a way very similar to <<porting-master-sites-n>> and <<makefile-"
+"master_sites-gitlab-multiple>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1945
+msgid ""
+"Multiple values are added to `GL_SITE`, `GL_ACCOUNT`, `GL_PROJECT` and "
+"`GL_COMMIT`. Each different value is assigned a group. <<makefile-"
+"master_sites-gitlab-description>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1948
+msgid ""
+"`GL_TUPLE` can also be used when there are a lot of distribution files. It "
+"helps keep the site, account, project, commit, and group information at the "
+"same place."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1965
+msgid ""
+"When fetching multiple files using GitLab, sometimes the default "
+"distribution file is not fetched from a GitLab site. To disable fetching "
+"the default distribution, set:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1969
+#, no-wrap
+msgid "USE_GITLAB=\tnodefault\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1975
+msgid ""
+"When using `USE_GITLAB=nodefault`, the [.filename]#Makefile# must set "
+"`DISTFILES` in its <<porting-order-portname,top block>>. The definition "
+"should be:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1984
+#, no-wrap
+msgid "Use of `USE_GITLAB` with Multiple Distribution Files"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:1990
+msgid ""
+"From time to time, there is a need to fetch more than one distribution "
+"file. For example, when the upstream git repository uses submodules. This "
+"can be done easily using groups in the `GL_*` variables:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2002
+#, no-wrap
+msgid ""
+"USE_GITLAB=\tyes\n"
+"GL_SITE=\thttps://gitlab.example.com:9434/gitlab:icons\n"
+"GL_ACCOUNT=\tbar:icons,contrib\n"
+"GL_PROJECT=\tfoo-icons:icons foo-contrib:contrib\n"
+"GL_COMMIT=\tc189207a55da45305c884fe2b50e086fcad4724b ae7368cab1ca7ca754b38d49da064df87968ffe4:icons 9e4dd76ad9b38f33fdb417a4c01935958d5acd2a:contrib\n"
+"GL_SUBDIR=\text/icons:icons\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2004
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2047
+#, no-wrap
+msgid "CONFIGURE_ARGS= --with-contrib=${WRKSRC_contrib}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2011
+msgid ""
+"This will fetch two distribution files from gitlab.com and one from `gitlab."
+"example.com` hosting GitLab. The default one comes from [.filename]#https://"
+"gitlab.com/foo/foo# and commit is "
+"`c189207a55da45305c884fe2b50e086fcad4724b`. The second one, with the "
+"`icons` group, comes from [.filename]#https://gitlab.example.com:9434/gitlab/"
+"bar/foo-icons# and commit is `ae7368cab1ca7ca754b38d49da064df87968ffe4`. "
+"The third one comes from [.filename]#https://gitlab.com/bar/foo-contrib# and "
+"is commit `9e4dd76ad9b38f33fdb417a4c01935958d5acd2a`. The distribution "
+"files are named [.filename]#foo-foo-"
+"c189207a55da45305c884fe2b50e086fcad4724b_GL0.tar.gz#, [.filename]#bar-foo-"
+"icons-ae7368cab1ca7ca754b38d49da064df87968ffe4_GL0.tar.gz#, and [."
+"filename]#bar-foo-contrib-9e4dd76ad9b38f33fdb417a4c01935958d5acd2a_GL0.tar."
+"gz#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2017
+msgid ""
+"All the distribution files are extracted in `${WRKDIR}` in their respective "
+"subdirectories. The default file is still extracted in `${WRKSRC}`, in this "
+"case, [.filename]#${WRKDIR}/foo-c189207a55da45305c884fe2b50e086fcad4724b-"
+"c189207a55da45305c884fe2b50e086fcad4724b#. Each additional distribution "
+"file is extracted in `${WRKSRC_group}`. Here, for the `icons` group, it is "
+"called `${WRKSRC_icons}` and it contains [.filename]#${WRKDIR}/foo-icons-"
+"ae7368cab1ca7ca754b38d49da064df87968ffe4-"
+"ae7368cab1ca7ca754b38d49da064df87968ffe4#. The file with the `contrib` "
+"group is called `${WRKSRC_contrib}` and contains `${WRKDIR}/foo-"
+"contrib-9e4dd76ad9b38f33fdb417a4c01935958d5acd2a-9e4dd76ad9b38f33fdb417a4c01935958d5acd2a`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2021
+msgid ""
+"The software's build system expects to find the icons in a [.filename]#ext/"
+"icons# subdirectory in its sources, so `GL_SUBDIR` is used. `GL_SUBDIR` "
+"makes sure that [.filename]#ext# exists, but that [.filename]#ext/icons# "
+"does not already exist. Then it does this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2026
+#, no-wrap
+msgid ""
+"post-extract:\n"
+" @${MV} ${WRKSRC_icons} ${WRKSRC}/ext/icons\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2031
+#, no-wrap
+msgid "Use of `USE_GITLAB` with Multiple Distribution Files Using `GL_TUPLE`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2035
+msgid ""
+"This is functionally equivalent to <<makefile-master_sites-gitlab-multi>>, "
+"but using `GL_TUPLE`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2045
+#, no-wrap
+msgid ""
+"USE_GITLAB=\tyes\n"
+"GL_COMMIT=\tc189207a55da45305c884fe2b50e086fcad4724b\n"
+"GL_TUPLE=\thttps://gitlab.example.com:9434/gitlab:bar:foo-icons:ae7368cab1ca7ca754b38d49da064df87968ffe4:icons/ext/icons \\\n"
+"\t\tbar:foo-contrib:9e4dd76ad9b38f33fdb417a4c01935958d5acd2a:contrib\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2051
+msgid ""
+"Grouping was used in the previous example with `bar:icons,contrib`. Some "
+"redundant information is present with `GL_TUPLE` because grouping is not "
+"possible."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2054
+#, no-wrap
+msgid "`EXTRACT_SUFX`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2057
+msgid ""
+"If there is one distribution file, and it uses an odd suffix to indicate the "
+"compression mechanism, set `EXTRACT_SUFX`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2059
+msgid ""
+"For example, if the distribution file was named [.filename]#foo.tar.gzip# "
+"instead of the more normal [.filename]#foo.tar.gz#, write:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2064
+#, no-wrap
+msgid ""
+"DISTNAME=\tfoo\n"
+"EXTRACT_SUFX=\t.tar.gzip\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2068
+msgid ""
+"The `USES=tar[:__xxx__]`, `USES=lha` or `USES=zip` automatically set "
+"`EXTRACT_SUFX` to the most common archives extensions as necessary, see "
+"crossref:uses[uses,Using `USES` Macros] for more details. If neither of "
+"these are set then `EXTRACT_SUFX` defaults to `.tar.gz`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2072
+msgid "As `EXTRACT_SUFX` is only used in `DISTFILES`, only set one of them.."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2075
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4800
+#, no-wrap
+msgid "`DISTFILES`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2080
+msgid ""
+"Sometimes the names of the files to be downloaded have no resemblance to the "
+"name of the port. For example, it might be called [.filename]#source.tar."
+"gz# or similar. In other cases the application's source code might be in "
+"several different archives, all of which must be downloaded."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2082
+msgid ""
+"If this is the case, set `DISTFILES` to be a space separated list of all the "
+"files that must be downloaded."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2086
+#, no-wrap
+msgid "DISTFILES=\tsource1.tar.gz source2.tar.gz\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2089
+msgid ""
+"If not explicitly set, `DISTFILES` defaults to `${DISTNAME}${EXTRACT_SUFX}`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2091
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4801
+#, no-wrap
+msgid "`EXTRACT_ONLY`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2094
+msgid ""
+"If only some of the `DISTFILES` must be extracted-for example, one of them "
+"is the source code, while another is an uncompressed document-list the "
+"filenames that must be extracted in `EXTRACT_ONLY`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2099
+#, no-wrap
+msgid ""
+"DISTFILES=\tsource.tar.gz manual.html\n"
+"EXTRACT_ONLY=\tsource.tar.gz\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2102
+msgid ""
+"When none of the `DISTFILES` need to be uncompressed, set `EXTRACT_ONLY` to "
+"the empty string."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2106
+#, no-wrap
+msgid "EXTRACT_ONLY=\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2109
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4822
+#, no-wrap
+msgid "`PATCHFILES`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2112
+msgid ""
+"If the port requires some additional patches that are available by FTP or "
+"HTTP, set `PATCHFILES` to the names of the files and `PATCH_SITES` to the "
+"URL of the directory that contains them (the format is the same as "
+"`MASTER_SITES`)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2115
+msgid ""
+"If the patch is not relative to the top of the source tree (that is, "
+"`WRKSRC`) because it contains some extra pathnames, set `PATCH_DIST_STRIP` "
+"accordingly. For instance, if all the pathnames in the patch have an extra "
+"`foozolix-1.0/` in front of the filenames, then set `PATCH_DIST_STRIP=-p1`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2117
+msgid ""
+"Do not worry if the patches are compressed; they will be decompressed "
+"automatically if the filenames end with [.filename]#.Z#, [.filename]#.gz#, [."
+"filename]#.bz2# or [.filename]#.xz#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2123
+msgid ""
+"If the patch is distributed with some other files, such as documentation, in "
+"a compressed tarball, using `PATCHFILES` is not possible. If that is the "
+"case, add the name and the location of the patch tarball to `DISTFILES` and "
+"`MASTER_SITES`. Then, use `EXTRA_PATCHES` to point to those files and [."
+"filename]#bsd.port.mk# will automatically apply them. In particular, do "
+"_not_ copy patch files into [.filename]#${PATCHDIR}#. That directory may "
+"not be writable."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2127
+msgid ""
+"If there are multiple patches and they need mixed values for the strip "
+"parameter, it can be added alongside the patch name in `PATCHFILES`, e.g:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2131
+#, no-wrap
+msgid "PATCHFILES=\tpatch1 patch2:-p1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2134
+msgid ""
+"This does not conflict with <<porting-master-sites-n,the master site "
+"grouping feature>>, adding a group also works:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2138
+#, no-wrap
+msgid "PATCHFILES=\tpatch2:-p1:source2\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2146
+msgid ""
+"The tarball will have been extracted alongside the regular source by then, "
+"so there is no need to explicitly extract it if it is a regular compressed "
+"tarball. Take extra care not to overwrite something that already exists in "
+"that directory if extracting it manually. Also, do not forget to add a "
+"command to remove the copied patch in the `pre-clean` target."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2149
+#, no-wrap
+msgid "Multiple Distribution or Patches Files from Multiple Locations"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2152
+msgid ""
+"(Consider this to be a somewhat \"advanced topic\"; those new to this "
+"document may wish to skip this section at first)."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2155
+msgid ""
+"This section has information on the fetching mechanism known as both "
+"`MASTER_SITES:n` and `MASTER_SITES_NN`. We will refer to this mechanism as "
+"`MASTER_SITES:n`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2160
+msgid ""
+"A little background first. OpenBSD has a neat feature inside `DISTFILES` "
+"and `PATCHFILES` which allows files and patches to be postfixed with `:n` "
+"identifiers. Here, `n` can be any word containing `[0-9a-zA-Z_]` and denote "
+"a group designation. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2164
+#, no-wrap
+msgid "DISTFILES=\talpha:0 beta:1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2167
+msgid ""
+"In OpenBSD, distribution file [.filename]#alpha# will be associated with "
+"variable `MASTER_SITES0` instead of our common `MASTER_SITES` and [."
+"filename]#beta# with `MASTER_SITES1`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2169
+msgid ""
+"This is a very interesting feature which can decrease that endless search "
+"for the correct download site."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2172
+msgid ""
+"Just picture 2 files in `DISTFILES` and 20 sites in `MASTER_SITES`, the "
+"sites slow as hell where [.filename]#beta# is carried by all sites in "
+"`MASTER_SITES`, and [.filename]#alpha# can only be found in the 20th site. "
+"It would be such a waste to check all of them if the maintainer knew this "
+"beforehand, would it not? Not a good start for that lovely weekend!"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2175
+msgid ""
+"Now that you have the idea, just imagine more `DISTFILES` and more "
+"`MASTER_SITES`. Surely our \"distfiles survey meister\" would appreciate "
+"the relief to network strain that this would bring."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2178
+msgid ""
+"In the next sections, information will follow on the FreeBSD implementation "
+"of this idea. We improved a bit on OpenBSD's concept."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2183
+msgid ""
+"The group names cannot have dashes in them (`-`), in fact, they cannot have "
+"any characters out of the `[a-zA-Z0-9_]` range. This is because, while man:"
+"make[1] is ok with variable names containing dashes, man:sh[1] is not."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2186
+#, no-wrap
+msgid "Simplified Information"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2192
+msgid ""
+"This section explains how to quickly prepare fine grained fetching of "
+"multiple distribution files and patches from different sites and "
+"subdirectories. We describe here a case of simplified `MASTER_SITES:n` "
+"usage. This will be sufficient for most scenarios. More detailed "
+"information are available in <<ports-master-sites-n-detailed>>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2196
+msgid ""
+"Some applications consist of multiple distribution files that must be "
+"downloaded from a number of different sites. For example, Ghostscript "
+"consists of the core of the program, and then a large number of driver files "
+"that are used depending on the user's printer. Some of these driver files "
+"are supplied with the core, but many others must be downloaded from a "
+"variety of different sites."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2199
+msgid ""
+"To support this, each entry in `DISTFILES` may be followed by a colon and a "
+"\"group name\". Each site listed in `MASTER_SITES` is then followed by a "
+"colon, and the group that indicates which distribution files are downloaded "
+"from this site."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2202
+msgid ""
+"For example, consider an application with the source split in two parts, [."
+"filename]#source1.tar.gz# and [.filename]#source2.tar.gz#, which must be "
+"downloaded from two different sites. The port's [.filename]#Makefile# would "
+"include lines like <<ports-master-sites-n-example-simple-use-one-file-per-"
+"site>>."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2204
+#, no-wrap
+msgid "Simplified Use of `MASTER_SITES:n` with One File Per Site"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2214
+#, no-wrap
+msgid ""
+"MASTER_SITES=\tftp://ftp1.example.com/:source1 \\\n"
+"\t\thttp://www.example.com/:source2\n"
+"DISTFILES=\tsource1.tar.gz:source1 \\\n"
+"\t\tsource2.tar.gz:source2\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2221
+msgid ""
+"Multiple distribution files can have the same group. Continuing the "
+"previous example, suppose that there was a third distfile, [."
+"filename]#source3.tar.gz#, that is downloaded from `ftp.example2.com`. The "
+"[.filename]#Makefile# would then be written like <<ports-master-sites-n-"
+"example-simple-use-more-than-one-file-per-site>>."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2223
+#, no-wrap
+msgid "Simplified Use of `MASTER_SITES:n` with More Than One File Per Site"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2234
+#, no-wrap
+msgid ""
+"MASTER_SITES=\tftp://ftp.example.com/:source1 \\\n"
+"\t\thttp://www.example.com/:source2\n"
+"DISTFILES=\tsource1.tar.gz:source1 \\\n"
+"\t\tsource2.tar.gz:source2 \\\n"
+"\t\tsource3.tar.gz:source2\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2239
+#, no-wrap
+msgid "Detailed Information"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2242
+msgid ""
+"Okay, so the previous example did not reflect the new port's needs? In this "
+"section we will explain in detail how the fine grained fetching mechanism "
+"`MASTER_SITES:n` works and how it can be used."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2244
+msgid ""
+"Elements can be postfixed with `:__n__` where _n_ is `[^:,]+`, that is, _n_ "
+"could conceptually be any alphanumeric string but we will limit it to `[a-zA-"
+"Z_][0-9a-zA-Z_]+` for now."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2246
+msgid ""
+"Moreover, string matching is case sensitive; that is, `n` is different from "
+"`N`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2249
+msgid ""
+"However, these words cannot be used for postfixing purposes since they yield "
+"special meaning: `default`, `all` and `ALL` (they are used internally in "
+"item <<porting-master-sites-n-what-changes-in-port-targets, ii>>). "
+"Furthermore, `DEFAULT` is a special purpose word (check item <<porting-"
+"master-sites-n-DEFAULT-group,3>>)."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2250
+msgid ""
+"Elements postfixed with `:n` belong to the group `n`, `:m` belong to group "
+"`m` and so forth."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2253
+msgid ""
+"Elements without a postfix are groupless, they all belong to the special "
+"group `DEFAULT`. Any elements postfixed with `DEFAULT`, is just being "
+"redundant unless an element belongs to both `DEFAULT` and other groups at "
+"the same time (check item <<porting-master-sites-n-comma-operator,5>>)."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2255
+msgid "These examples are equivalent but the first one is preferred:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2259
+#, no-wrap
+msgid "MASTER_SITES=\talpha\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2264
+#, no-wrap
+msgid "MASTER_SITES=\talpha:DEFAULT\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2267
+msgid ""
+"Groups are not exclusive, an element may belong to several different groups "
+"at the same time and a group can either have either several different "
+"elements or none at all."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2270
+msgid ""
+"When an element belongs to several groups at the same time, use the comma "
+"operator (`,`)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2273
+msgid ""
+"Instead of repeating it several times, each time with a different postfix, "
+"we can list several groups at once in a single postfix. For instance, `:m,n,"
+"o` marks an element that belongs to group `m`, `n` and `o`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2275
+msgid "All these examples are equivalent but the last one is preferred:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2279
+#, no-wrap
+msgid "MASTER_SITES=\talpha alpha:SOME_SITE\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2284
+#, no-wrap
+msgid "MASTER_SITES=\talpha:DEFAULT alpha:SOME_SITE\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2289
+#, no-wrap
+msgid "MASTER_SITES=\talpha:SOME_SITE,DEFAULT\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2294
+#, no-wrap
+msgid "MASTER_SITES=\talpha:DEFAULT,SOME_SITE\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2297
+msgid ""
+"All sites within a given group are sorted according to `MASTER_SORT_AWK`. "
+"All groups within `MASTER_SITES` and `PATCH_SITES` are sorted as well."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2300
+msgid ""
+"Group semantics can be used in any of the variables `MASTER_SITES`, "
+"`PATCH_SITES`, `MASTER_SITE_SUBDIR`, `PATCH_SITE_SUBDIR`, `DISTFILES`, and "
+"`PATCHFILES` according to this syntax:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2301
+msgid ""
+"All `MASTER_SITES`, `PATCH_SITES`, `MASTER_SITE_SUBDIR` and "
+"`PATCH_SITE_SUBDIR` elements must be terminated with the forward slash `/` "
+"character. If any elements belong to any groups, the group postfix `:__n__` "
+"must come right after the terminator `/`. The `MASTER_SITES:n` mechanism "
+"relies on the existence of the terminator `/` to avoid confusing elements "
+"where a `:n` is a valid part of the element with occurrences where `:n` "
+"denotes group `n`. For compatibility purposes, since the `/` terminator was "
+"not required before in both `MASTER_SITE_SUBDIR` and `PATCH_SITE_SUBDIR` "
+"elements, if the postfix immediate preceding character is not a `/` then `:"
+"n` will be considered a valid part of the element instead of a group postfix "
+"even if an element is postfixed with `:n`. See both <<ports-master-sites-n-"
+"example-detailed-use-master-site-subdir>> and <<ports-master-sites-n-example-"
+"detailed-use-complete-example-master-sites>>."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2303
+#, no-wrap
+msgid "Detailed Use of `MASTER_SITES:n` in `MASTER_SITE_SUBDIR`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2310
+#, no-wrap
+msgid "MASTER_SITE_SUBDIR=\told:n new/:NEW\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2313
+msgid "Directories within group `DEFAULT` -> old:n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2314
+msgid "Directories within group `NEW` -> new"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2318
+#, no-wrap
+msgid "Detailed Use of `MASTER_SITES:n` with Comma Operator, Multiple Files, Multiple Sites and Multiple Subdirectories"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2336
+#, no-wrap
+msgid ""
+"MASTER_SITES=\thttp://site1/%SUBDIR%/ http://site2/:DEFAULT \\\n"
+"\t\thttp://site3/:group3 http://site4/:group4 \\\n"
+"\t\thttp://site5/:group5 http://site6/:group6 \\\n"
+"\t\thttp://site7/:DEFAULT,group6 \\\n"
+"\t\thttp://site8/%SUBDIR%/:group6,group7 \\\n"
+"\t\thttp://site9/:group8\n"
+"DISTFILES=\tfile1 file2:DEFAULT file3:group3 \\\n"
+"\t\tfile4:group4,group5,group6 file5:grouping \\\n"
+"\t\tfile6:group7\n"
+"MASTER_SITE_SUBDIR=\tdirectory-trial:1 directory-n/:groupn \\\n"
+"\t\tdirectory-one/:group6,DEFAULT \\\n"
+"\t\tdirectory\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2340
+msgid ""
+"The previous example results in this fine grained fetching. Sites are "
+"listed in the exact order they will be used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2342
+msgid "[.filename]#file1# will be fetched from"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2344
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2354
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2364
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2370
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2380
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2385
+msgid "`MASTER_SITE_OVERRIDE`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2345
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2355
+msgid "http://site1/directory-trial:1/"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2346
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2356
+msgid "http://site1/directory-one/"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2347
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2357
+msgid "http://site1/directory/"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2348
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2358
+msgid "http://site2/"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2349
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2359
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2374
+msgid "http://site7/"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2350
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2360
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2366
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2376
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2381
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2387
+msgid "`MASTER_SITE_BACKUP`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2352
+msgid ""
+"[.filename]#file2# will be fetched exactly as [.filename]#file1# since they "
+"both belong to the same group"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2362
+msgid "[.filename]#file3# will be fetched from"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2365
+msgid "http://site3/"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2368
+msgid "[.filename]#file4# will be fetched from"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2371
+msgid "http://site4/"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2372
+msgid "http://site5/"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2373
+msgid "http://site6/"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2375
+msgid "http://site8/directory-one/"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2378
+msgid "[.filename]#file5# will be fetched from"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2383
+msgid "[.filename]#file6# will be fetched from"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2386
+msgid "http://site8/"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2391
+msgid ""
+"How do I group one of the special macros from [.filename]#bsd.sites.mk#, for "
+"example, SourceForge (`SF`)?"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2394
+msgid ""
+"This has been simplified as much as possible. See <<ports-master-sites-n-"
+"example-detailed-use-master-site-sourceforge>>."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2396
+#, no-wrap
+msgid "Detailed Use of `MASTER_SITES:n` with SourceForge (`SF`)"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2404
+#, no-wrap
+msgid ""
+"MASTER_SITES=\thttp://site1/ SF/something/1.0:sourceforge,TEST\n"
+"DISTFILES=\tsomething.tar.gz:sourceforge\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2407
+msgid ""
+"[.filename]#something.tar.gz# will be fetched from all sites within "
+"SourceForge."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2409
+msgid "How do I use this with `PATCH*`?"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2411
+msgid ""
+"All examples were done with `MASTER*` but they work exactly the same for "
+"`PATCH*` ones as can be seen in <<ports-master-sites-n-example-detailed-use-"
+"patch-sites>>."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2413
+#, no-wrap
+msgid "Simplified Use of `MASTER_SITES:n` with `PATCH_SITES`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2421
+#, no-wrap
+msgid ""
+"PATCH_SITES=\thttp://site1/ http://site2/:test\n"
+"PATCHFILES=\tpatch1:test\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2426
+#, no-wrap
+msgid "What Does Change for Ports? What Does Not?"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2430
+msgid ""
+"All current ports remain the same. The `MASTER_SITES:n` feature code is only "
+"activated if there are elements postfixed with `:__n__` like elements "
+"according to the aforementioned syntax rules, especially as shown in item "
+"<<porting-master-sites-n-group-semantics, 7>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2433
+msgid ""
+"The port targets remain the same: `checksum`, `makesum`, `patch`, "
+"`configure`, `build`, etc. With the obvious exceptions of `do-fetch`, `fetch-"
+"list`, `master-sites` and `patch-sites`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2435
+msgid ""
+"`do-fetch`: deploys the new grouping postfixed `DISTFILES` and `PATCHFILES` "
+"with their matching group elements within both `MASTER_SITES` and "
+"`PATCH_SITES` which use matching group elements within both "
+"`MASTER_SITE_SUBDIR` and `PATCH_SITE_SUBDIR`. Check <<ports-master-sites-n-"
+"example-detailed-use-complete-example-master-sites>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2436
+msgid ""
+"`fetch-list`: works like old `fetch-list` with the exception that it groups "
+"just like `do-fetch`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2437
+msgid ""
+"`master-sites` and `patch-sites`: (incompatible with older versions) only "
+"return the elements of group `DEFAULT`; in fact, they execute targets "
+"`master-sites-default` and `patch-sites-default` respectively."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2441
+msgid ""
+"Furthermore, using target either `master-sites-all` or `patch-sites-all` is "
+"preferred to directly checking either `MASTER_SITES` or `PATCH_SITES`. "
+"Also, directly checking is not guaranteed to work in any future versions. "
+"Check item <<porting-master-sites-n-new-port-targets-master-sites-all, B>> "
+"for more information on these new port targets."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2443
+msgid "New port targets"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2444
+msgid ""
+"There are `master-sites-_n_` and `patch-sites-_n_` targets which will list "
+"the elements of the respective group _n_ within `MASTER_SITES` and "
+"`PATCH_SITES` respectively. For instance, both `master-sites-DEFAULT` and "
+"`patch-sites-DEFAULT` will return the elements of group `DEFAULT`, `master-"
+"sites-test` and `patch-sites-test` of group `test`, and thereon."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2447
+msgid ""
+"There are new targets `master-sites-all` and `patch-sites-all` which do the "
+"work of the old `master-sites` and `patch-sites` ones. They return the "
+"elements of all groups as if they all belonged to the same group with the "
+"caveat that it lists as many `MASTER_SITE_BACKUP` and `MASTER_SITE_OVERRIDE` "
+"as there are groups defined within either `DISTFILES` or `PATCHFILES`; "
+"respectively for `master-sites-all` and `patch-sites-all`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2449
+#, no-wrap
+msgid "`DIST_SUBDIR`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2454
+msgid ""
+"Do not let the port clutter [.filename]#/usr/ports/distfiles#. If the port "
+"requires a lot of files to be fetched, or contains a file that has a name "
+"that might conflict with other ports (for example, [.filename]#Makefile#), "
+"set `DIST_SUBDIR` to the name of the port (`${PORTNAME}` or "
+"`${PKGNAMEPREFIX}${PORTNAME}` are fine). This will change `DISTDIR` from "
+"the default [.filename]#/usr/ports/distfiles# to [.filename]#/usr/ports/"
+"distfiles/${DIST_SUBDIR}#, and in effect puts everything that is required "
+"for the port into that subdirectory."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2456
+msgid ""
+"It will also look at the subdirectory with the same name on the backup "
+"master site at http://distcache.FreeBSD.org[http://distcache.FreeBSD.org] "
+"(Setting `DISTDIR` explicitly in [.filename]#Makefile# will not accomplish "
+"this, so please use `DIST_SUBDIR`.)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2460
+msgid ""
+"This does not affect `MASTER_SITES` defined in the [.filename]#Makefile#."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2463
+#, no-wrap
+msgid "`MAINTAINER`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2466
+msgid "Set your mail-address here. Please. _:-)_"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2471
+msgid ""
+"Only a single address without the comment part is allowed as a `MAINTAINER` "
+"value. The format used is `user@hostname.domain`. Please do not include "
+"any descriptive text such as a real name in this entry. That merely "
+"confuses the Ports infrastructure and most tools using it."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2474
+msgid ""
+"The maintainer is responsible for keeping the port up to date and making "
+"sure that it works correctly. For a detailed description of the "
+"responsibilities of a port maintainer, refer to extref:{contributing}[The "
+"challenge for port maintainers, maintain-port]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2483
+msgid ""
+"A maintainer volunteers to keep a port in good working order. Maintainers "
+"have the primary responsibility for their ports, but not exclusive "
+"ownership. Ports exist for the benefit of the community and, in reality, "
+"belong to the community. What this means is that people other than the "
+"maintainer can make changes to a port. Large changes to the Ports "
+"Collection might require changes to many ports. The FreeBSD Ports "
+"Management Team or members of other teams might modify ports to fix "
+"dependency issues or other problems, like a version bump for a shared "
+"library update."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2486
+msgid ""
+"Some types of fixes have \"blanket approval\" from the {portmgr}, allowing "
+"any committer to fix those categories of problems on any port. These fixes "
+"do not need approval from the maintainer."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2489
+msgid ""
+"Blanket approval for most ports applies to fixes like infrastructure "
+"changes, or trivial and _tested_ build and runtime fixes. The current list "
+"is available in extref:{committers-guide}[Ports section of the Committer's "
+"Guide, ports-qa-misc-blanket-approval]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2496
+msgid ""
+"Other changes to the port will be sent to the maintainer for review and "
+"approval before being committed. If the maintainer does not respond to an "
+"update request after two weeks (excluding major public holidays), then that "
+"is considered a maintainer timeout, and the update can be made without "
+"explicit maintainer approval. If the maintainer does not respond within "
+"three months, or if there have been three consecutive timeouts, then that "
+"maintainer is considered absent without leave, and all of their ports can be "
+"assigned back to the pool. 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 ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2500
+msgid ""
+"We reserve the right to modify the maintainer's submission to better match "
+"existing policies and style of the Ports Collection without explicit "
+"blessing from the submitter or the maintainer. Also, large infrastructural "
+"changes can result in a port being modified without the maintainer's "
+"consent. These kinds of changes will never affect the port's functionality."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2502
+msgid ""
+"The {portmgr} reserves the right to revoke or override anyone's "
+"maintainership for any reason, and the {security-officer} reserves the right "
+"to revoke or override maintainership for security reasons."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2504
+#, no-wrap
+msgid "`COMMENT`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2508
+msgid ""
+"The comment is a one-line description of a port shown by `pkg info`. Please "
+"follow these rules when composing it:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2510
+msgid "The COMMENT string should be 70 characters or less."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2511
+msgid "Do _not_ include the package name or version number of software."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2512
+msgid "The comment must begin with a capital and end without a period."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2513
+msgid "Do not start with an indefinite article (that is, A or An)."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2514
+msgid "Capitalize names such as Apache, JavaScript, or Perl."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2515
+msgid "Use a serial comma for lists of words: \"green, red, and blue.\""
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2516
+msgid "Check for spelling errors."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2518
+msgid "Here is an example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2522
+#, no-wrap
+msgid "COMMENT=\tCat chasing a mouse all over the screen\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2525
+msgid ""
+"The COMMENT variable immediately follows the MAINTAINER variable in the [."
+"filename]#Makefile#."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2527
+#, no-wrap
+msgid "Project website"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2530
+msgid ""
+"Each port should point to a website that provides more information about the "
+"software."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2532
+msgid ""
+"Whenever possible, this should be the official project website maintained by "
+"the developers of the software."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2536
+#, no-wrap
+msgid "WWW=\t\thttps://ffmpeg.org/\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2539
+msgid ""
+"But it can also be a directory or resource in the source code repository:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2543
+#, no-wrap
+msgid "WWW=\t\thttps://sourceforge.net/projects/mpd/\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2546
+msgid ""
+"The WWW variable immediately follows the COMMENT variable in the [."
+"filename]#Makefile#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2549
+msgid ""
+"If the same content can be accessed via HTTP and HTTPS, the URL starting "
+"with `https://` shall be used. If the URI is the root of the website or "
+"directory, it must be terminated with a slash."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2553
+msgid ""
+"This information used to be placed into the last line of the [.filename]#pkg-"
+"descr# file. It has been moved into the Makefile for easier maintenance and "
+"processing. Having a `WWW:` line at the end of the [.filename]#pkg-descr# "
+"file is deprecated."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2555
+#, no-wrap
+msgid "Licenses"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2559
+msgid ""
+"Each port must document the license under which it is available. If it is "
+"not an OSI approved license it must also document any restrictions on "
+"redistribution."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2561
+#, no-wrap
+msgid "`LICENSE`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2564
+msgid ""
+"A short name for the license or licenses if more than one license apply."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2566
+msgid ""
+"If it is one of the licenses listed in <<licenses-license-list>>, only "
+"`LICENSE_FILE` and `LICENSE_DISTFILES` variables can be set."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2569
+msgid ""
+"If this is a license that has not been defined in the ports framework (see "
+"<<licenses-license-list>>), the `LICENSE_PERMS` and `LICENSE_NAME` must be "
+"set, along with either `LICENSE_FILE` or `LICENSE_TEXT`. "
+"`LICENSE_DISTFILES` and `LICENSE_GROUPS` can also be set, but are not "
+"required."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2572
+msgid ""
+"The predefined licenses are shown in <<licenses-license-list>>. The current "
+"list is always available in [.filename]#Mk/bsd.licenses.db.mk#."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2574
+#, no-wrap
+msgid "Simplest Usage, Predefined Licenses"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2579
+msgid ""
+"When the [.filename]#README# of some software says \"This software is under "
+"the terms of the GNU Lesser General Public License as published by the Free "
+"Software Foundation; either version 2.1 of the License, or (at your option) "
+"any later version.\" but does not provide the license file, use this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2583
+#, no-wrap
+msgid "LICENSE=\tLGPL21+\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2586
+msgid "When the software provides the license file, use this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2591
+#, no-wrap
+msgid ""
+"LICENSE=\tLGPL21+\n"
+"LICENSE_FILE=\t${WRKSRC}/COPYING\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2596
+msgid ""
+"For the predefined licenses, the default permissions are `dist-mirror dist-"
+"sell pkg-mirror pkg-sell auto-accept`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2598
+#, no-wrap
+msgid "Predefined License List"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2602
+#, no-wrap
+msgid "Short Name"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2603
+#, no-wrap
+msgid "Name"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2604
+#, no-wrap
+msgid "Group"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2606
+#, no-wrap
+msgid "Permissions"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2607
+#, no-wrap
+msgid "`AGPLv3`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2608
+#, no-wrap
+msgid "GNU Affero General Public License version 3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2609
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2614
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2639
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2839
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2854
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2859
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2864
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2869
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2874
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2879
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2884
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2889
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2894
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2904
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2909
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2914
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2919
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2924
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2929
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3039
+#, no-wrap
+msgid "`FSF GPL OSI`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2611
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2616
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2621
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2626
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2631
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2636
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2641
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2646
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2651
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2656
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2661
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2666
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2671
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2676
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2681
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2686
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2691
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2696
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2776
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2781
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2786
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2791
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2796
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2801
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2806
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2811
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2816
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2821
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2826
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2831
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2836
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2841
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2846
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2851
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2856
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2861
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2866
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2871
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2876
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2881
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2886
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2891
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2896
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2901
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2906
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2911
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2916
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2921
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2926
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2931
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2971
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2976
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2981
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2986
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2991
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3001
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3006
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3011
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3016
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3021
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3026
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3031
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3036
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3041
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3046
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3051
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3056
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3061
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3066
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3071
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3075
+#, no-wrap
+msgid "(default)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2612
+#, no-wrap
+msgid "`AGPLv3+`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2613
+#, no-wrap
+msgid "GNU Affero General Public License version 3 (or later)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2617
+#, no-wrap
+msgid "`APACHE10`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2618
+#, no-wrap
+msgid "Apache License 1.0"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2619
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2664
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2849
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3014
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3049
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3198
+#, no-wrap
+msgid "`FSF`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2622
+#, no-wrap
+msgid "`APACHE11`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2623
+#, no-wrap
+msgid "Apache License 1.1"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2624
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2629
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2829
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2834
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2844
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2934
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2939
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2944
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2949
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2954
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2959
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2964
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2974
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2979
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2984
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3024
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3029
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3034
+#, no-wrap
+msgid "`FSF OSI`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2627
+#, no-wrap
+msgid "`APACHE20`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2628
+#, no-wrap
+msgid "Apache License 2.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2632
+#, no-wrap
+msgid "`ART10`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2633
+#, no-wrap
+msgid "Artistic License version 1.0"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2634
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2644
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3206
+#, no-wrap
+msgid "`OSI`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2637
+#, no-wrap
+msgid "`ART20`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2638
+#, no-wrap
+msgid "Artistic License version 2.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2642
+#, no-wrap
+msgid "`ARTPERL10`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2643
+#, no-wrap
+msgid "Artistic License (perl) version 1.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2647
+#, no-wrap
+msgid "`BSD`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2648
+#, no-wrap
+msgid "BSD license Generic Version (deprecated)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2649
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2654
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2659
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2669
+#, no-wrap
+msgid "`FSF OSI COPYFREE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2652
+#, no-wrap
+msgid "`BSD2CLAUSE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2653
+#, no-wrap
+msgid "BSD 2-clause \"Simplified\" License"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2657
+#, no-wrap
+msgid "`BSD3CLAUSE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2658
+#, no-wrap
+msgid "BSD 3-clause \"New\" or \"Revised\" License"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2662
+#, no-wrap
+msgid "`BSD4CLAUSE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2663
+#, no-wrap
+msgid "BSD 4-clause \"Original\" or \"Old\" License"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2667
+#, no-wrap
+msgid "`BSL`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2668
+#, no-wrap
+msgid "Boost Software License"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2672
+#, no-wrap
+msgid "`CC-BY-1.0`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2673
+#, no-wrap
+msgid "Creative Commons Attribution 1.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2677
+#, no-wrap
+msgid "`CC-BY-2.0`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2678
+#, no-wrap
+msgid "Creative Commons Attribution 2.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2682
+#, no-wrap
+msgid "`CC-BY-2.5`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2683
+#, no-wrap
+msgid "Creative Commons Attribution 2.5"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2687
+#, no-wrap
+msgid "`CC-BY-3.0`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2688
+#, no-wrap
+msgid "Creative Commons Attribution 3.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2692
+#, no-wrap
+msgid "`CC-BY-4.0`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2693
+#, no-wrap
+msgid "Creative Commons Attribution 4.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2697
+#, no-wrap
+msgid "`CC-BY-NC-1.0`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2698
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial 1.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2701
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2706
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2711
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2716
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2721
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2726
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2731
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2736
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2741
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2746
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2751
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2756
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2761
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2766
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2771
+#, no-wrap
+msgid "`dist-mirror``pkg-mirror``auto-accept`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2702
+#, no-wrap
+msgid "`CC-BY-NC-2.0`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2703
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial 2.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2707
+#, no-wrap
+msgid "`CC-BY-NC-2.5`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2708
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial 2.5"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2712
+#, no-wrap
+msgid "`CC-BY-NC-3.0`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2713
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial 3.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2717
+#, no-wrap
+msgid "`CC-BY-NC-4.0`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2718
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial 4.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2722
+#, no-wrap
+msgid "`CC-BY-NC-ND-1.0`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2723
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial No Derivatives 1.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2727
+#, no-wrap
+msgid "`CC-BY-NC-ND-2.0`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2728
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial No Derivatives 2.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2732
+#, no-wrap
+msgid "`CC-BY-NC-ND-2.5`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2733
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial No Derivatives 2.5"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2737
+#, no-wrap
+msgid "`CC-BY-NC-ND-3.0`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2738
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial No Derivatives 3.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2742
+#, no-wrap
+msgid "`CC-BY-NC-ND-4.0`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2743
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial No Derivatives 4.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2747
+#, no-wrap
+msgid "`CC-BY-NC-SA-1.0`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2748
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial Share Alike 1.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2752
+#, no-wrap
+msgid "`CC-BY-NC-SA-2.0`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2753
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial Share Alike 2.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2757
+#, no-wrap
+msgid "`CC-BY-NC-SA-2.5`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2758
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial Share Alike 2.5"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2762
+#, no-wrap
+msgid "`CC-BY-NC-SA-3.0`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2763
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial Share Alike 3.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2767
+#, no-wrap
+msgid "`CC-BY-NC-SA-4.0`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2768
+#, no-wrap
+msgid "Creative Commons Attribution Non Commercial Share Alike 4.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2772
+#, no-wrap
+msgid "`CC-BY-ND-1.0`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2773
+#, no-wrap
+msgid "Creative Commons Attribution No Derivatives 1.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2777
+#, no-wrap
+msgid "`CC-BY-ND-2.0`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2778
+#, no-wrap
+msgid "Creative Commons Attribution No Derivatives 2.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2782
+#, no-wrap
+msgid "`CC-BY-ND-2.5`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2783
+#, no-wrap
+msgid "Creative Commons Attribution No Derivatives 2.5"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2787
+#, no-wrap
+msgid "`CC-BY-ND-3.0`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2788
+#, no-wrap
+msgid "Creative Commons Attribution No Derivatives 3.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2792
+#, no-wrap
+msgid "`CC-BY-ND-4.0`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2793
+#, no-wrap
+msgid "Creative Commons Attribution No Derivatives 4.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2797
+#, no-wrap
+msgid "`CC-BY-SA-1.0`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2798
+#, no-wrap
+msgid "Creative Commons Attribution Share Alike 1.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2802
+#, no-wrap
+msgid "`CC-BY-SA-2.0`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2803
+#, no-wrap
+msgid "Creative Commons Attribution Share Alike 2.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2807
+#, no-wrap
+msgid "`CC-BY-SA-2.5`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2808
+#, no-wrap
+msgid "Creative Commons Attribution Share Alike 2.5"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2812
+#, no-wrap
+msgid "`CC-BY-SA-3.0`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2813
+#, no-wrap
+msgid "Creative Commons Attribution Share Alike 3.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2817
+#, no-wrap
+msgid "`CC-BY-SA-4.0`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2818
+#, no-wrap
+msgid "Creative Commons Attribution Share Alike 4.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2822
+#, no-wrap
+msgid "`CC0-1.0`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2823
+#, no-wrap
+msgid "Creative Commons Zero v1.0 Universal"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2824
+#, no-wrap
+msgid "`FSF GPL COPYFREE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2827
+#, no-wrap
+msgid "`CDDL`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2828
+#, no-wrap
+msgid "Common Development and Distribution License"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2832
+#, no-wrap
+msgid "`CPAL-1.0`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2833
+#, no-wrap
+msgid "Common Public Attribution License"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2837
+#, no-wrap
+msgid "`ClArtistic`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2838
+#, no-wrap
+msgid "Clarified Artistic License"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2842
+#, no-wrap
+msgid "`EPL`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2843
+#, no-wrap
+msgid "Eclipse Public License"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2847
+#, no-wrap
+msgid "`GFDL`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2848
+#, no-wrap
+msgid "GNU Free Documentation License"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2852
+#, no-wrap
+msgid "`GMGPL`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2853
+#, no-wrap
+msgid "GNAT Modified General Public License"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2857
+#, no-wrap
+msgid "`GPLv1`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2858
+#, no-wrap
+msgid "GNU General Public License version 1"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2862
+#, no-wrap
+msgid "`GPLv1+`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2863
+#, no-wrap
+msgid "GNU General Public License version 1 (or later)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2867
+#, no-wrap
+msgid "`GPLv2`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2868
+#, no-wrap
+msgid "GNU General Public License version 2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2872
+#, no-wrap
+msgid "`GPLv2+`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2873
+#, no-wrap
+msgid "GNU General Public License version 2 (or later)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2877
+#, no-wrap
+msgid "`GPLv3`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2878
+#, no-wrap
+msgid "GNU General Public License version 3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2882
+#, no-wrap
+msgid "`GPLv3+`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2883
+#, no-wrap
+msgid "GNU General Public License version 3 (or later)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2887
+#, no-wrap
+msgid "`GPLv3RLE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2888
+#, no-wrap
+msgid "GNU GPL version 3 Runtime Library Exception"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2892
+#, no-wrap
+msgid "`GPLv3RLE+`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2893
+#, no-wrap
+msgid "GNU GPL version 3 Runtime Library Exception (or later)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2897
+#, no-wrap
+msgid "`ISCL`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2898
+#, no-wrap
+msgid "Internet Systems Consortium License"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2899
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3044
+#, no-wrap
+msgid "`FSF GPL OSI COPYFREE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2902
+#, no-wrap
+msgid "`LGPL20`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2903
+#, no-wrap
+msgid "GNU Library General Public License version 2.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2907
+#, no-wrap
+msgid "`LGPL20+`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2908
+#, no-wrap
+msgid "GNU Library General Public License version 2.0 (or later)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2912
+#, no-wrap
+msgid "`LGPL21`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2913
+#, no-wrap
+msgid "GNU Lesser General Public License version 2.1"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2917
+#, no-wrap
+msgid "`LGPL21+`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2918
+#, no-wrap
+msgid "GNU Lesser General Public License version 2.1 (or later)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2922
+#, no-wrap
+msgid "`LGPL3`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2923
+#, no-wrap
+msgid "GNU Lesser General Public License version 3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2927
+#, no-wrap
+msgid "`LGPL3+`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2928
+#, no-wrap
+msgid "GNU Lesser General Public License version 3 (or later)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2932
+#, no-wrap
+msgid "`LPPL10`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2933
+#, no-wrap
+msgid "LaTeX Project Public License version 1.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2936
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2941
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2946
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2951
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2956
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2961
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2966
+#, no-wrap
+msgid "`dist-mirror dist-sell`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2937
+#, no-wrap
+msgid "`LPPL11`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2938
+#, no-wrap
+msgid "LaTeX Project Public License version 1.1"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2942
+#, no-wrap
+msgid "`LPPL12`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2943
+#, no-wrap
+msgid "LaTeX Project Public License version 1.2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2947
+#, no-wrap
+msgid "`LPPL13`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2948
+#, no-wrap
+msgid "LaTeX Project Public License version 1.3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2952
+#, no-wrap
+msgid "`LPPL13a`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2953
+#, no-wrap
+msgid "LaTeX Project Public License version 1.3a"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2957
+#, no-wrap
+msgid "`LPPL13b`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2958
+#, no-wrap
+msgid "LaTeX Project Public License version 1.3b"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2962
+#, no-wrap
+msgid "`LPPL13c`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2963
+#, no-wrap
+msgid "LaTeX Project Public License version 1.3c"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2967
+#, no-wrap
+msgid "`MIT`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2968
+#, no-wrap
+msgid "MIT license / X11 license"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2969
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2989
+#, no-wrap
+msgid "`COPYFREE FSF GPL OSI`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2972
+#, no-wrap
+msgid "`MPL10`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2973
+#, no-wrap
+msgid "Mozilla Public License version 1.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2977
+#, no-wrap
+msgid "`MPL11`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2978
+#, no-wrap
+msgid "Mozilla Public License version 1.1"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2982
+#, no-wrap
+msgid "`MPL20`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2983
+#, no-wrap
+msgid "Mozilla Public License version 2.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2987
+#, no-wrap
+msgid "`NCSA`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2988
+#, no-wrap
+msgid "University of Illinois/NCSA Open Source License"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2992
+#, no-wrap
+msgid "`NONE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2993
+#, no-wrap
+msgid "No license specified"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2996
+#, no-wrap
+msgid "`none`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2997
+#, no-wrap
+msgid "`OFL10`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2998
+#, no-wrap
+msgid "SIL Open Font License version 1.0 (https://scripts.sil.org/OFL/)"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:2999
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3004
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3214
+#, no-wrap
+msgid "`FONTS`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3002
+#, no-wrap
+msgid "`OFL11`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3003
+#, no-wrap
+msgid "SIL Open Font License version 1.1 (https://scripts.sil.org/OFL/)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3007
+#, no-wrap
+msgid "`OWL`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3008
+#, no-wrap
+msgid "Open Works License (owl.apotheon.org)"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3009
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3210
+#, no-wrap
+msgid "`COPYFREE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3012
+#, no-wrap
+msgid "`OpenSSL`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3013
+#, no-wrap
+msgid "OpenSSL License"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3017
+#, no-wrap
+msgid "`PD`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3018
+#, no-wrap
+msgid "Public Domain"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3019
+#, no-wrap
+msgid "`GPL COPYFREE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3022
+#, no-wrap
+msgid "`PHP202`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3023
+#, no-wrap
+msgid "PHP License version 2.02"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3027
+#, no-wrap
+msgid "`PHP30`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3028
+#, no-wrap
+msgid "PHP License version 3.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3032
+#, no-wrap
+msgid "`PHP301`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3033
+#, no-wrap
+msgid "PHP License version 3.01"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3037
+#, no-wrap
+msgid "`PSFL`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3038
+#, no-wrap
+msgid "Python Software Foundation License"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3042
+#, no-wrap
+msgid "`PostgreSQL`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3043
+#, no-wrap
+msgid "PostgreSQL License"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3047
+#, no-wrap
+msgid "`RUBY`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3048
+#, no-wrap
+msgid "Ruby License"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3052
+#, no-wrap
+msgid "`UNLICENSE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3053
+#, no-wrap
+msgid "The Unlicense"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3054
+#, no-wrap
+msgid "`COPYFREE FSF GPL`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3057
+#, no-wrap
+msgid "`WTFPL`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3058
+#, no-wrap
+msgid "Do What the Fuck You Want To Public License version 2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3059
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3064
+#, no-wrap
+msgid "`GPL FSF COPYFREE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3062
+#, no-wrap
+msgid "`WTFPL1`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3063
+#, no-wrap
+msgid "Do What the Fuck You Want To Public License version 1"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3067
+#, no-wrap
+msgid "`ZLIB`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3068
+#, no-wrap
+msgid "zlib License"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3069
+#, no-wrap
+msgid "`GPL FSF OSI`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3072
+#, no-wrap
+msgid "`ZPL21`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3073
+#, no-wrap
+msgid "Zope Public License version 2.1"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3074
+#, no-wrap
+msgid "`GPL OSI`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3078
+#, no-wrap
+msgid "`LICENSE_PERMS` and `LICENSE_PERMS_NAME_`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3081
+msgid "Permissions. use `none` if empty."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3082
+#, no-wrap
+msgid "License Permissions List"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3084
+#, no-wrap
+msgid "`dist-mirror`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3087
+msgid ""
+"Redistribution of the distribution files is permitted. The distribution "
+"files will be added to the FreeBSD `MASTER_SITE_BACKUP` CDN."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3089
+#, no-wrap
+msgid "`no-dist-mirror`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3093
+msgid ""
+"Redistribution of the distribution files is prohibited. This is equivalent "
+"to setting crossref:special[porting-restrictions-restricted,`RESTRICTED`]. "
+"The distribution files will _not_ be added to the FreeBSD "
+"`MASTER_SITE_BACKUP` CDN."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3095
+#, no-wrap
+msgid "`dist-sell`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3098
+msgid ""
+"Selling of distribution files is permitted. The distribution files will be "
+"present on the installer images."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3100
+#, no-wrap
+msgid "`no-dist-sell`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3103
+msgid ""
+"Selling of distribution files is prohibited. This is equivalent to setting "
+"crossref:special[porting-restrictions-no_cdrom,`NO_CDROM`]."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3105
+#, no-wrap
+msgid "`pkg-mirror`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3108
+msgid ""
+"Free redistribution of package is permitted. The package will be "
+"distributed on the FreeBSD package CDN https://pkg.freebsd.org/[https://pkg."
+"freebsd.org/]."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3110
+#, no-wrap
+msgid "`no-pkg-mirror`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3114
+msgid ""
+"Free redistribution of package is prohibited. Equivalent to setting "
+"crossref:special[porting-restrictions-no_package,`NO_PACKAGE`]. The package "
+"will _not_ be distributed from the FreeBSD package CDN https://pkg.freebsd."
+"org/[https://pkg.freebsd.org/]."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3116
+#, no-wrap
+msgid "`pkg-sell`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3119
+msgid ""
+"Selling of package is permitted. The package will be present on the "
+"installer images."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3121
+#, no-wrap
+msgid "`no-pkg-sell`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3125
+msgid ""
+"Selling of package is prohibited. This is equivalent to setting crossref:"
+"special[porting-restrictions-no_cdrom,`NO_CDROM`]. The package will _not_ "
+"be present on the installer images."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3127
+#, no-wrap
+msgid "`auto-accept`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3131
+msgid ""
+"License is accepted by default. Prompts to accept a license are not "
+"displayed unless the user has defined `LICENSES_ASK`. Use this unless the "
+"license states the user must accept the terms of the license."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3133
+#, no-wrap
+msgid "`no-auto-accept`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3137
+msgid ""
+"License is not accepted by default. The user will always be asked to "
+"confirm the acceptance of this license. This must be used if the license "
+"states that the user must accept its terms."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3139
+msgid ""
+"When both `_permission_` and `no-_permission_` is present the `no-"
+"_permission_` will cancel `_permission_`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3141
+msgid ""
+"When `_permission_` is not present, it is considered to be a `no-"
+"_permission_`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3145
+msgid ""
+"Some missing permissions will prevent a port (and all ports depending on it) "
+"from being usable by package users:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3147
+msgid ""
+"A port without the `auto-accept` permission will never be be built and all "
+"the ports depending on it will be ignored."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3149
+msgid ""
+"A port without the `pkg-mirror` permission will be removed, as well as all "
+"the ports depending on it, after the build and they will ever end up being "
+"distributed."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3152
+#, no-wrap
+msgid "Nonstandard License"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3156
+msgid ""
+"Read the terms of the license and translate those using the available "
+"permissions."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3164
+#, no-wrap
+msgid ""
+"LICENSE= UNKNOWN\n"
+"LICENSE_NAME= unknown\n"
+"LICENSE_TEXT= This program is NOT in public domain.\\\n"
+" It can be freely distributed for non-commercial purposes only.\n"
+"LICENSE_PERMS= dist-mirror no-dist-sell pkg-mirror no-pkg-sell auto-accept\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3169
+#, no-wrap
+msgid "Standard and Nonstandard Licenses"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3175
+msgid ""
+"Read the terms of the license and express those using the available "
+"permissions. In case of doubt, please ask for guidance on the {freebsd-"
+"ports}."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3183
+#, no-wrap
+msgid ""
+"LICENSE= WARSOW GPLv2\n"
+"LICENSE_COMB= multi\n"
+"LICENSE_NAME_WARSOW= Warsow Content License\n"
+"LICENSE_FILE_WARSOW= ${WRKSRC}/docs/license.txt\n"
+"LICENSE_PERMS_WARSOW= dist-mirror pkg-mirror auto-accept\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3189
+msgid ""
+"When the permissions of the GPLv2 and the UNKNOWN licenses are mixed, the "
+"port ends up with `dist-mirror dist-sell pkg-mirror pkg-sell auto-accept "
+"dist-mirror no-dist-sell pkg-mirror no-pkg-sell auto-accept`. The `no-"
+"_permissions_` cancel the _permissions_. The resulting list of permissions "
+"are _dist-mirror pkg-mirror auto-accept_. The distribution files and the "
+"packages will not be available on the installer images."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3192
+#, no-wrap
+msgid "`LICENSE_GROUPS` and `LICENSE_GROUPS_NAME`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3195
+msgid "Groups the license belongs."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3196
+#, no-wrap
+msgid "Predefined License Groups List"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3200
+msgid ""
+"Free Software Foundation Approved, see the https://www.fsf.org/licensing/"
+"[FSF Licensing & Compliance Team]."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3202
+#, no-wrap
+msgid "`GPL`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3204
+msgid "GPL Compatible"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3208
+msgid ""
+"OSI Approved, see the Open Source Initiative https://opensource.org/licenses/"
+"[Open Source Licenses] page."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3212
+msgid ""
+"Comply with Copyfree Standard Definition, see the https://copyfree.org/"
+"standard/licenses/[Copyfree Licenses] page."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3216
+msgid "Font licenses"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3218
+#, no-wrap
+msgid "`LICENSE_NAME` and `LICENSE_NAME_NAME`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3221
+msgid "Full name of the license."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3223
+#, no-wrap
+msgid "`LICENSE_NAME`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3233
+#, no-wrap
+msgid ""
+"LICENSE= UNRAR\n"
+"LICENSE_NAME= UnRAR License\n"
+"LICENSE_FILE= ${WRKSRC}/license.txt\n"
+"LICENSE_PERMS= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3238
+#, no-wrap
+msgid "`LICENSE_FILE` and `LICENSE_FILE_NAME`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3242
+msgid ""
+"Full path to the file containing the license text, usually [."
+"filename]#${WRKSRC}/some/file#. If the file is not in the distfile, and its "
+"content is too long to be put in <<licenses-license_text,`LICENSE_TEXT`>>, "
+"put it in a new file in [.filename]#${FILESDIR}#."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3244
+#, no-wrap
+msgid "`LICENSE_FILE`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3252
+#, no-wrap
+msgid ""
+"LICENSE=\tGPLv3+\n"
+"LICENSE_FILE=\t${WRKSRC}/COPYING\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3257
+#, no-wrap
+msgid "`LICENSE_TEXT` and `LICENSE_TEXT_NAME`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3261
+msgid ""
+"Text to use as a license. Useful when the license is not in the "
+"distribution files and its text is short."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3263
+#, no-wrap
+msgid "`LICENSE_TEXT`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3274
+#, no-wrap
+msgid ""
+"LICENSE= UNKNOWN\n"
+"LICENSE_NAME= unknown\n"
+"LICENSE_TEXT= This program is NOT in public domain.\\\n"
+" It can be freely distributed for non-commercial purposes only,\\\n"
+" and THERE IS NO WARRANTY FOR THIS PROGRAM.\n"
+"LICENSE_PERMS= dist-mirror no-dist-sell pkg-mirror no-pkg-sell auto-accept\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3279
+#, no-wrap
+msgid "`LICENSE_DISTFILES` and `LICENSE_DISTFILES_NAME`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3283
+msgid ""
+"The distribution files to which the licenses apply. Defaults to all the "
+"distribution files."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3285
+#, no-wrap
+msgid "`LICENSE_DISTFILES`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3290
+msgid ""
+"Used when the distribution files do not all have the same license. For "
+"example, one has a code license, and another has some artwork that cannot be "
+"redistributed:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3295
+#, no-wrap
+msgid ""
+"MASTER_SITES= SF/some-game\n"
+"DISTFILES= ${DISTNAME}${EXTRACT_SUFX} artwork.zip\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3303
+#, no-wrap
+msgid ""
+"LICENSE= BSD3CLAUSE ARTWORK\n"
+"LICENSE_COMB= dual\n"
+"LICENSE_NAME_ARTWORK= The game artwork license\n"
+"LICENSE_TEXT_ARTWORK= The README says that the files cannot be redistributed\n"
+"LICENSE_PERMS_ARTWORK= pkg-mirror pkg-sell auto-accept\n"
+"LICENSE_DISTFILES_BSD3CLAUSE= ${DISTNAME}${EXTRACT_SUFX}\n"
+"LICENSE_DISTFILES_ARTWORK= artwork.zip\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3308
+#, no-wrap
+msgid "`LICENSE_COMB`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3313
+msgid ""
+"Set to `multi` if all licenses apply. Set to `dual` if any license "
+"applies. Defaults to `single`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3315
+#, no-wrap
+msgid "Dual Licenses"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3322
+msgid ""
+"When a port says \"This software may be distributed under the GNU General "
+"Public License or the Artistic License\", it means that either license can "
+"be used. Use this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3327
+#, no-wrap
+msgid ""
+"LICENSE=\tART10 GPLv1\n"
+"LICENSE_COMB= dual\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3330
+msgid "If license files are provided, use this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3337
+#, no-wrap
+msgid ""
+"LICENSE=\tART10 GPLv1\n"
+"LICENSE_COMB= dual\n"
+"LICENSE_FILE_ART10= ${WRKSRC}/Artistic\n"
+"LICENSE_FILE_GPLv1= ${WRKSRC}/Copying\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3342
+#, no-wrap
+msgid "Multiple Licenses"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3347
+msgid ""
+"When part of a port has one license, and another part has a different "
+"license, use `multi`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3352
+#, no-wrap
+msgid ""
+"LICENSE=\tGPLv2 LGPL21+\n"
+"LICENSE_COMB=\tmulti\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3357
+#, no-wrap
+msgid "`PORTSCOUT`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3360
+msgid ""
+"Portscout is an automated distfile check utility for the FreeBSD Ports "
+"Collection, described in detail in crossref:keeping-up[distfile-survey,"
+"Portscout: the FreeBSD Ports Distfile Scanner]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3362
+msgid ""
+"`PORTSCOUT` defines special conditions within which the Portscout distfile "
+"scanner is restricted."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3364
+msgid "Situations where `PORTSCOUT` is set include:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3366
+msgid ""
+"When distfiles have to be ignored for specific versions. For example, to "
+"exclude version _8.2_ and version _8.3_ from distfile version checks because "
+"they are known to be broken, add:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3370
+#, no-wrap
+msgid "PORTSCOUT=\tskipv:8.2,8.3\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3373
+msgid ""
+"When distfile version checks have to be disabled completely. For example, if "
+"a port is not going to be updated ever again, add:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3377
+#, no-wrap
+msgid "PORTSCOUT=\tignore:1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3380
+msgid ""
+"When specific versions or specific major and minor revisions of a distfile "
+"must be checked. For example, if only version _0.6.4_ must be monitored "
+"because newer versions have compatibility issues with FreeBSD, add:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3384
+#, no-wrap
+msgid "PORTSCOUT=\tlimit:^0\\.6\\.4\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3387
+msgid ""
+"When URLs listing the available versions differ from the download URLs. For "
+"example, to limit distfile version checks to the download page for the "
+"package:databases/pgtune[] port, add:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3391
+#, no-wrap
+msgid "PORTSCOUT=\tsite:http://www.renpy.org/dl/release/\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3394
+#, no-wrap
+msgid "Dependencies"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3401
+msgid ""
+"Many ports depend on other ports. This is a very convenient feature of most "
+"Unix-like operating systems, including FreeBSD. Multiple ports can share a "
+"common dependency, rather than bundling that dependency with every port or "
+"package that needs it. There are seven variables that can be used to ensure "
+"that all the required bits will be on the user's machine. There are also "
+"some pre-supported dependency variables for common cases, plus a few more to "
+"control the behavior of dependencies."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3407
+msgid ""
+"When software has extra dependencies that provide extra features, the base "
+"dependencies listed in `*_DEPENDS` should include the extra dependencies "
+"that would benefit most users. The base dependencies should never be a "
+"\"minimal\" dependency set. The goal is not to include every dependency "
+"possible. Only include those that will benefit most people."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3410
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4754
+#, no-wrap
+msgid "`LIB_DEPENDS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3415
+msgid ""
+"This variable specifies the shared libraries this port depends on. It is a "
+"list of `_lib:dir_` tuples where `_lib_` is the name of the shared library, "
+"`_dir_` is the directory in which to find it in case it is not available. "
+"For example,"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3419
+#, no-wrap
+msgid "LIB_DEPENDS= libjpeg.so:graphics/jpeg\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3422
+msgid ""
+"will check for a shared jpeg library with any version, and descend into the "
+"[.filename]#graphics/jpeg# subdirectory of the ports tree to build and "
+"install it if it is not found."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3425
+msgid ""
+"The dependency is checked twice, once from within the `build` target and "
+"then from within the `install` target. Also, the name of the dependency is "
+"put into the package so that `pkg install` (see man:pkg-install[8]) will "
+"automatically install it if it is not on the user's system."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3427
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4755
+#, no-wrap
+msgid "`RUN_DEPENDS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3432
+msgid ""
+"This variable specifies executables or files this port depends on during run-"
+"time. It is a list of ``_path:dir_``[:``_target_``] tuples where `_path_` "
+"is the name of the executable or file, _dir_ is the directory in which to "
+"find it in case it is not available, and _target_ is the target to call in "
+"that directory. If _path_ starts with a slash (`/`), it is treated as a "
+"file and its existence is tested with `test -e`; otherwise, it is assumed to "
+"be an executable, and `which -s` is used to determine if the program exists "
+"in the search path."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3434
+msgid "For example,"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3439
+#, no-wrap
+msgid ""
+"RUN_DEPENDS=\t${LOCALBASE}/news/bin/innd:news/inn \\\n"
+"\t\txmlcatmgr:textproc/xmlcatmgr\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3443
+msgid ""
+"will check if the file or directory [.filename]#/usr/local/news/bin/innd# "
+"exists, and build and install it from the [.filename]#news/inn# subdirectory "
+"of the ports tree if it is not found. It will also see if an executable "
+"called `xmlcatmgr` is in the search path, and descend into [."
+"filename]#textproc/xmlcatmgr# to build and install it if it is not found."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3448
+msgid ""
+"In this case, `innd` is actually an executable; if an executable is in a "
+"place that is not expected to be in the search path, use the full pathname."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3453
+msgid "The official search `PATH` used on the ports build cluster is"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3457
+#, no-wrap
+msgid "/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3464
+msgid ""
+"The dependency is checked from within the `install` target. Also, the name "
+"of the dependency is put into the package so that `pkg install` (see man:pkg-"
+"install[8]) will automatically install it if it is not on the user's "
+"system. The _target_ part can be omitted if it is the same as "
+"`DEPENDS_TARGET`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3467
+msgid ""
+"A quite common situation is when `RUN_DEPENDS` is literally the same as "
+"`BUILD_DEPENDS`, especially if ported software is written in a scripted "
+"language or if it requires the same build and run-time environment. In this "
+"case, it is both tempting and intuitive to directly assign one to the other:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3471
+#, no-wrap
+msgid "RUN_DEPENDS=\t${BUILD_DEPENDS}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3478
+msgid ""
+"However, such assignment can pollute run-time dependencies with entries not "
+"defined in the port's original `BUILD_DEPENDS`. This happens because of man:"
+"make[1]'s lazy evaluation of variable assignment. Consider a [."
+"filename]#Makefile# with `USE_*`, which are processed by [.filename]#ports/"
+"Mk/bsd.*.mk# to augment initial build dependencies. For example, `USES= "
+"gmake` adds package:devel/gmake[] to `BUILD_DEPENDS`. To prevent such "
+"additional dependencies from polluting `RUN_DEPENDS`, create another "
+"variable with the current content of `BUILD_DEPENDS` and assign it to both "
+"`BUILD_DEPENDS` and `RUN_DEPENDS`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3485
+#, no-wrap
+msgid ""
+"MY_DEPENDS=\tsome:devel/some \\\n"
+"\t\tother:lang/other\n"
+"BUILD_DEPENDS=\t${MY_DEPENDS}\n"
+"RUN_DEPENDS=\t${MY_DEPENDS}\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3491
+msgid ""
+"_Do not_ use `:=` to assign `BUILD_DEPENDS` to `RUN_DEPENDS` or vice-versa. "
+"All variables are expanded immediately, which is exactly the wrong thing to "
+"do and almost always a failure."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3494
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4753
+#, no-wrap
+msgid "`BUILD_DEPENDS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3499
+msgid ""
+"This variable specifies executables or files this port requires to build. "
+"Like `RUN_DEPENDS`, it is a list of ``_path:dir_``[:``_target_``] tuples. "
+"For example,"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3503
+#, no-wrap
+msgid "BUILD_DEPENDS=\tunzip:archivers/unzip\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3506
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3544
+msgid ""
+"will check for an executable called `unzip`, and descend into the [."
+"filename]#archivers/unzip# subdirectory of the ports tree to build and "
+"install it if it is not found."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3512
+msgid ""
+"\"build\" here means everything from extraction to compilation. The "
+"dependency is checked from within the `extract` target. The _target_ part "
+"can be omitted if it is the same as `DEPENDS_TARGET`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3515
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4752
+#, no-wrap
+msgid "`FETCH_DEPENDS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3520
+msgid ""
+"This variable specifies executables or files this port requires to fetch. "
+"Like the previous two, it is a list of ``_path:dir_``[:``_target_``] "
+"tuples. For example,"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3524
+#, no-wrap
+msgid "FETCH_DEPENDS=\tncftp2:net/ncftp2\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3527
+msgid ""
+"will check for an executable called `ncftp2`, and descend into the [."
+"filename]#net/ncftp2# subdirectory of the ports tree to build and install it "
+"if it is not found."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3530
+msgid ""
+"The dependency is checked from within the `fetch` target. The _target_ part "
+"can be omitted if it is the same as `DEPENDS_TARGET`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3532
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4750
+#, no-wrap
+msgid "`EXTRACT_DEPENDS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3537
+msgid ""
+"This variable specifies executables or files this port requires for "
+"extraction. Like the previous, it is a list of ``_path:dir_``[:"
+"``_target_``] tuples. For example,"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3541
+#, no-wrap
+msgid "EXTRACT_DEPENDS=\tunzip:archivers/unzip\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3547
+msgid ""
+"The dependency is checked from within the `extract` target. The _target_ "
+"part can be omitted if it is the same as `DEPENDS_TARGET`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3551
+msgid ""
+"Use this variable only if the extraction does not already work (the default "
+"assumes `tar`) and cannot be made to work using `USES=tar`, `USES=lha` or "
+"`USES=zip` described in crossref:uses[uses,Using `USES` Macros]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3554
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4751
+#, no-wrap
+msgid "`PATCH_DEPENDS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3558
+msgid ""
+"This variable specifies executables or files this port requires to patch. "
+"Like the previous, it is a list of ``_path:dir_``[:``_target_``] tuples. For "
+"example,"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3562
+#, no-wrap
+msgid "PATCH_DEPENDS=\t${NONEXISTENT}:java/jfc:extract\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3565
+msgid ""
+"will descend into the [.filename]#java/jfc# subdirectory of the ports tree "
+"to extract it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3568
+msgid ""
+"The dependency is checked from within the `patch` target. The _target_ part "
+"can be omitted if it is the same as `DEPENDS_TARGET`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3570
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4832
+#, no-wrap
+msgid "`USES`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3574
+msgid ""
+"Parameters can be added to define different features and dependencies used "
+"by the port. They are specified by adding this line to the [."
+"filename]#Makefile#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3578
+#, no-wrap
+msgid "USES= feature[:arguments]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3581
+msgid ""
+"For the complete list of values, please see crossref:uses[uses,Using `USES` "
+"Macros]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3585
+msgid ""
+"`USES` cannot be assigned after inclusion of [.filename]#bsd.port.pre.mk#."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3588
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3610
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4135
+#, no-wrap
+msgid "`USE_*`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3595
+msgid ""
+"Several variables exist to define common dependencies shared by many ports. "
+"Their use is optional, but helps to reduce the verbosity of the port [."
+"filename]##Makefile##s. Each of them is styled as `USE_*`. These variables "
+"may be used only in the port [.filename]##Makefile##s and [.filename]#ports/"
+"Mk/bsd.*.mk#. They are not meant for user-settable options - use "
+"`PORT_OPTIONS` for that purpose."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3600
+msgid ""
+"It is _always_ incorrect to set any `USE_*` in [.filename]#/etc/make.conf#. "
+"For instance, setting"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3604
+#, no-wrap
+msgid "USE_GCC=X.Y\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3607
+msgid ""
+"(where X.Y is version number) would add a dependency on gccXY for every "
+"port, including `lang/gccXY` itself!"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3616
+#, no-wrap
+msgid "Means"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3617
+#, no-wrap
+msgid "`USE_GCC`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3642
+#, no-wrap
+msgid ""
+"The port requires GCC (`gcc` or `{g-plus-plus}`) to build.\n"
+"Some ports need a specific, old GCC version, some require modern, recent versions.\n"
+"It is typically set to `yes` (means always use stable, modern GCC from ports per `GCC_DEFAULT` in [.filename]#Mk/bsd.default-versions.mk#).\n"
+"This is also the default value.\n"
+"The exact version can also be specified, with a value such as `10`.\n"
+"GCC from the base system is used when it satisfies the requested version, otherwise an appropriate compiler is built from ports, and `CC` and `CXX` are adjusted accordingly.\n"
+"The `:build` argument following the version specifier adds only a build time dependency to the port.\n"
+"\n"
+"For example:\n"
+"[example]\n"
+"====\n"
+"[.programlisting]\n"
+"....\n"
+"USE_GCC=yes\t\t# port requires a current version of GCC\n"
+"USE_GCC=11:build\t# port requires GCC 11 at build time only\n"
+"....\n"
+"====\n"
+"\n"
+"[NOTE]\n"
+"====\n"
+"`USE_GCC=any` is deprecated and should not be used in new ports\n"
+"===="
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3651
+msgid ""
+"Variables related to gmake and [.filename]#configure# are described in "
+"crossref:special[building,Building Mechanisms], while autoconf, automake and "
+"libtool are described in crossref:special[using-autotools,Using GNU "
+"Autotools]. Perl related variables are described in crossref:special[using-"
+"perl,Using Perl]. X11 variables are listed in crossref:special[using-x11,"
+"Using X11]. crossref:special[using-gnome,Using Gnome] deals with GNOME and "
+"crossref:special[using-kde,Using KDE] with KDE related variables. crossref:"
+"special[using-java,Using Java] documents Java variables, while crossref:"
+"special[using-php,Web Applications, Apache and PHP] contains information on "
+"Apache, PHP and PEAR modules. Python is discussed in crossref:special[using-"
+"python,Using Python], while Ruby in crossref:special[using-ruby,Using "
+"Ruby]. crossref:special[using-sdl,Using SDL] provides variables used for "
+"SDL applications and finally, crossref:special[using-xfce,Using Xfce] "
+"contains information on Xfce."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3653
+#, no-wrap
+msgid "Minimal Version of a Dependency"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3656
+msgid ""
+"A minimal version of a dependency can be specified in any `*_DEPENDS` except "
+"`LIB_DEPENDS` using this syntax:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3660
+#, no-wrap
+msgid "p5-Spiffy>=0.26:devel/p5-Spiffy\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3664
+msgid ""
+"The first field contains a dependent package name, which must match the "
+"entry in the package database, a comparison sign, and a package version. "
+"The dependency is satisfied if p5-Spiffy-0.26 or newer is installed on the "
+"machine."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3666
+#, no-wrap
+msgid "Notes on Dependencies"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3672
+msgid ""
+"As mentioned above, the default target to call when a dependency is required "
+"is `DEPENDS_TARGET`. It defaults to `install`. This is a user variable; it "
+"is never defined in a port's [.filename]#Makefile#. If the port needs a "
+"special way to handle a dependency, use the `:target` part of `*_DEPENDS` "
+"instead of redefining `DEPENDS_TARGET`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3676
+msgid ""
+"When running `make clean`, the port dependencies are automatically cleaned "
+"too. If this is not desirable, define `NOCLEANDEPENDS` in the environment. "
+"This may be particularly desirable if the port has something that takes a "
+"long time to rebuild in its dependency list, such as KDE, GNOME or Mozilla."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3681
+msgid ""
+"To depend on another port unconditionally, use the variable `${NONEXISTENT}` "
+"as the first field of `BUILD_DEPENDS` or `RUN_DEPENDS`. Use this only when "
+"the source of the other port is needed. Compilation time can be saved by "
+"specifying the target too. For instance"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3685
+#, no-wrap
+msgid "BUILD_DEPENDS=\t${NONEXISTENT}:graphics/jpeg:extract\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3688
+msgid "will always descend to the `jpeg` port and extract it."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3690
+#, no-wrap
+msgid "Circular Dependencies Are Fatal"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3695
+msgid "Do not introduce any circular dependencies into the ports tree!"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3702
+msgid ""
+"The ports building technology does not tolerate circular dependencies. If "
+"one is introduced, someone, somewhere in the world, will have their FreeBSD "
+"installation broken almost immediately, with many others quickly to follow. "
+"These can really be hard to detect. If in doubt, before making that change, "
+"make sure to run: `cd /usr/ports; make index`. That process can be quite "
+"slow on older machines, but it may be able to save a large number of people, "
+"including yourself, a lot of grief in the process."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3704
+#, no-wrap
+msgid "Problems Caused by Automatic Dependencies"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3708
+msgid ""
+"Dependencies must be declared either explicitly or by using the <<makefile-"
+"options,OPTIONS framework>>. Using other methods like automatic detection "
+"complicates indexing, which causes problems for port and package management."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3710
+#, no-wrap
+msgid "Wrong Declaration of an Optional Dependency"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3717
+#, no-wrap
+msgid ".include <bsd.port.pre.mk>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3721
+#, no-wrap
+msgid ""
+".if exists(${LOCALBASE}/bin/foo)\n"
+"LIB_DEPENDS=\tlibbar.so:foo/bar\n"
+".endif\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3730
+msgid ""
+"The problem with trying to automatically add dependencies is that files and "
+"settings outside an individual port can change at any time. For example: an "
+"index is built, then a batch of ports are installed. But one of the ports "
+"installs the tested file. The index is now incorrect, because an installed "
+"port unexpectedly has a new dependency. The index may still be wrong even "
+"after rebuilding if other ports also determine their need for dependencies "
+"based on the existence of other files."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3732
+#, no-wrap
+msgid "Correct Declaration of an Optional Dependency"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3740
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tBAR\n"
+"BAR_DESC=\tCalling cellphones via bar\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3742
+#, no-wrap
+msgid "BAR_LIB_DEPENDS=\tlibbar.so:foo/bar\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3749
+msgid ""
+"Testing option variables is the correct method. It will not cause "
+"inconsistencies in the index of a batch of ports, provided the options were "
+"defined prior to the index build. Simple scripts can then be used to "
+"automate the building, installation, and updating of these ports and their "
+"packages."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3751
+#, no-wrap
+msgid "Slave Ports and `MASTERDIR`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3757
+msgid ""
+"If the port needs to build slightly different versions of packages by having "
+"a variable (for instance, resolution, or paper size) take different values, "
+"create one subdirectory per package to make it easier for users to see what "
+"to do, but try to share as many files as possible between ports. Typically, "
+"by using variables cleverly, only a very short [.filename]#Makefile# is "
+"needed in all but one of the directories. In the sole [."
+"filename]#Makefile#, use `MASTERDIR` to specify the directory where the rest "
+"of the files are. Also, use a variable as part of <<porting-pkgname,"
+"`PKGNAMESUFFIX`>> so the packages will have different names."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3760
+msgid ""
+"This will be best demonstrated by an example. This is part of [."
+"filename]#print/pkfonts300/Makefile#;"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3766
+#, no-wrap
+msgid ""
+"PORTNAME=\tpkfonts${RESOLUTION}\n"
+"PORTVERSION=\t1.0\n"
+"DISTFILES=\tpk${RESOLUTION}.tar.gz\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3768
+#, no-wrap
+msgid "PLIST=\t\t${PKGDIR}/pkg-plist.${RESOLUTION}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3781
+#, no-wrap
+msgid ""
+".if !defined(RESOLUTION)\n"
+"RESOLUTION=\t300\n"
+".else\n"
+".if ${RESOLUTION} != 118 && ${RESOLUTION} != 240 && \\\n"
+"\t${RESOLUTION} != 300 && ${RESOLUTION} != 360 && \\\n"
+"\t${RESOLUTION} != 400 && ${RESOLUTION} != 600\n"
+".BEGIN:\n"
+"\t@${ECHO_MSG} \"Error: invalid value for RESOLUTION: \\\"${RESOLUTION}\\\"\"\n"
+"\t@${ECHO_MSG} \"Possible values are: 118, 240, 300, 360, 400 and 600.\"\n"
+"\t@${FALSE}\n"
+".endif\n"
+".endif\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3785
+msgid ""
+"package:print/pkfonts300[] also has all the regular patches, package files, "
+"etc. Running `make` there, it will take the default value for the "
+"resolution (300) and build the port normally."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3787
+msgid ""
+"As for other resolutions, this is the _entire_ [.filename]#print/pkfonts360/"
+"Makefile#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3792
+#, no-wrap
+msgid ""
+"RESOLUTION=\t360\n"
+"MASTERDIR=\t${.CURDIR}/../pkfonts300\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3794
+#, no-wrap
+msgid ".include\t\"${MASTERDIR}/Makefile\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3799
+msgid ""
+"([.filename]#print/pkfonts118/Makefile#, [.filename]#print/pkfonts600/"
+"Makefile#, and all the other are similar). `MASTERDIR` definition tells [."
+"filename]#bsd.port.mk# that the regular set of subdirectories like "
+"`FILESDIR` and `SCRIPTDIR` are to be found under [.filename]#pkfonts300#. "
+"The `RESOLUTION=360` line will override the `RESOLUTION=300` line in [."
+"filename]#pkfonts300/Makefile# and the port will be built with resolution "
+"set to 360."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3801
+#, no-wrap
+msgid "Man Pages"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3806
+msgid ""
+"If the port anchors its man tree somewhere other than `PREFIX`, use "
+"`MANDIRS` to specify those directories. Note that the files corresponding "
+"to manual pages must be placed in [.filename]#pkg-plist# along with the rest "
+"of the files. The purpose of `MANDIRS` is to enable automatic compression "
+"of manual pages, therefore the file names are suffixed with [.filename]#.gz#."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3808
+#, no-wrap
+msgid "Info Files"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3815
+msgid ""
+"If the package needs to install GNU info files, list them in `INFO` (without "
+"the trailing `.info`), one entry per document. These files are assumed to "
+"be installed to [.filename]#PREFIX/INFO_PATH#. Change `INFO_PATH` if the "
+"package uses a different location. However, this is not recommended. These "
+"entries contain just the path relative to [.filename]#PREFIX/INFO_PATH#. "
+"For example, package:lang/gcc34[] installs info files to [.filename]#PREFIX/"
+"INFO_PATH/gcc34#, and `INFO` will be something like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3819
+#, no-wrap
+msgid "INFO=\tgcc34/cpp gcc34/cppinternals gcc34/g77 ...\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3822
+msgid ""
+"Appropriate installation/de-installation code will be automatically added to "
+"the temporary [.filename]#pkg-plist# before package registration."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3824
+#, no-wrap
+msgid "Makefile Options"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3829
+msgid ""
+"Many applications can be built with optional or differing configurations. "
+"Examples include choice of natural (human) language, GUI versus command-"
+"line, or type of database to support. Users may need a different "
+"configuration than the default, so the ports system provides hooks the port "
+"author can use to control which variant will be built. Supporting these "
+"options properly will make users happy, and effectively provide two or more "
+"ports for the price of one."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3831
+#, no-wrap
+msgid "`OPTIONS`"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3834
+#, no-wrap
+msgid "Background"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3840
+msgid ""
+"`OPTIONS_*` give the user installing the port a dialog showing the available "
+"options, and then saves those options to [.filename]#${PORT_DBDIR}/"
+"${OPTIONS_NAME}/options#. The next time the port is built, the options are "
+"reused. `PORT_DBDIR` defaults to [.filename]#/var/db/ports#. "
+"`OPTIONS_NAME` is to the port origin with an underscore as the space "
+"separator, for example, for package:dns/bind99[] it will be `dns_bind99`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3844
+msgid ""
+"When the user runs `make config` (or runs `make build` for the first time), "
+"the framework checks for [.filename]#${PORT_DBDIR}/${OPTIONS_NAME}/"
+"options#. If that file does not exist, the values of `OPTIONS_*` are used, "
+"and a dialog box is displayed where the options can be enabled or disabled. "
+"Then [.filename]#options# is saved and the configured variables are used "
+"when building the port."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3846
+msgid ""
+"If a new version of the port adds new `OPTIONS`, the dialog will be "
+"presented to the user with the saved values of old `OPTIONS` prefilled."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3849
+msgid ""
+"`make showconfig` shows the saved configuration. Use `make rmconfig` to "
+"remove the saved configuration."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3851
+#, no-wrap
+msgid "Syntax"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3855
+msgid ""
+"`OPTIONS_DEFINE` contains a list of `OPTIONS` to be used. These are "
+"independent of each other and are not grouped:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3859
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4283
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4579
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4636
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4699
+#, no-wrap
+msgid "OPTIONS_DEFINE=\tOPT1 OPT2\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3862
+msgid ""
+"Once defined, `OPTIONS` are described (optional, but strongly recommended):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3871
+#, no-wrap
+msgid ""
+"OPT1_DESC=\tDescribe OPT1\n"
+"OPT2_DESC=\tDescribe OPT2\n"
+"OPT3_DESC=\tDescribe OPT3\n"
+"OPT4_DESC=\tDescribe OPT4\n"
+"OPT5_DESC=\tDescribe OPT5\n"
+"OPT6_DESC=\tDescribe OPT6\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3875
+msgid ""
+"[.filename]#ports/Mk/bsd.options.desc.mk# has descriptions for many common "
+"`OPTIONS`. While often useful, override them if the description is "
+"insufficient for the port."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3881
+msgid ""
+"When describing options, view it from the perspective of the user: \"What "
+"functionality does it change?\" and \"Why would I want to enable this?\" Do "
+"not just repeat the name. For example, describing the `NLS` option as "
+"\"include NLS support\" does not help the user, who can already see the "
+"option name but may not know what it means. Describing it as \"Native "
+"Language Support via gettext utilities\" is much more helpful."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3887
+msgid ""
+"Option names are always in all uppercase. They cannot use mixed case or "
+"lowercase."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3890
+msgid ""
+"`OPTIONS` can be grouped as radio choices, where only one choice from each "
+"group is allowed:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3895
+#, no-wrap
+msgid ""
+"OPTIONS_SINGLE=\t\tSG1\n"
+"OPTIONS_SINGLE_SG1=\tOPT3 OPT4\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3901
+msgid ""
+"There _must_ be one of each `OPTIONS_SINGLE` group selected at all times for "
+"the options to be valid. One option of each group _must_ be added to "
+"`OPTIONS_DEFAULT`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3904
+msgid ""
+"`OPTIONS` can be grouped as radio choices, where none or only one choice "
+"from each group is allowed:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3909
+#, no-wrap
+msgid ""
+"OPTIONS_RADIO=\t\tRG1\n"
+"OPTIONS_RADIO_RG1=\tOPT7 OPT8\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3912
+msgid ""
+"`OPTIONS` can also be grouped as \"multiple-choice\" lists, where _at least "
+"one_ option must be enabled:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3917
+#, no-wrap
+msgid ""
+"OPTIONS_MULTI=\t\tMG1\n"
+"OPTIONS_MULTI_MG1=\tOPT5 OPT6\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3920
+msgid ""
+"`OPTIONS` can also be grouped as \"multiple-choice\" lists, where none or "
+"any option can be enabled:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3925
+#, no-wrap
+msgid ""
+"OPTIONS_GROUP=\t\tGG1\n"
+"OPTIONS_GROUP_GG1=\tOPT9 OPT10\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3928
+msgid ""
+"`OPTIONS` are unset by default, unless they are listed in `OPTIONS_DEFAULT`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3932
+#, no-wrap
+msgid "OPTIONS_DEFAULT=\tOPT1 OPT3 OPT6\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3938
+msgid ""
+"`OPTIONS` definitions must appear before the inclusion of [.filename]#bsd."
+"port.options.mk#. `PORT_OPTIONS` values can only be tested after the "
+"inclusion of [.filename]#bsd.port.options.mk#. Inclusion of [.filename]#bsd."
+"port.pre.mk# can be used instead, too, and is still widely used in ports "
+"written before the introduction of [.filename]#bsd.port.options.mk#. But be "
+"aware that some variables will not work as expected after the inclusion of [."
+"filename]#bsd.port.pre.mk#, typically some `USE_*` flags."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3940
+#, no-wrap
+msgid "Simple Use of `OPTIONS`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3948
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tFOO BAR\n"
+"OPTIONS_DEFAULT=FOO\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3951
+#, no-wrap
+msgid ""
+"FOO_DESC=\tOption foo support\n"
+"BAR_DESC=\tFeature bar support\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3955
+#, no-wrap
+msgid ""
+"# Will add --with-foo / --without-foo\n"
+"FOO_CONFIGURE_WITH=\tfoo\n"
+"BAR_RUN_DEPENDS=\tbar:bar/bar\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3957
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4021
+#, no-wrap
+msgid ".include <bsd.port.mk>\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3962
+#, no-wrap
+msgid "Check for Unset Port `OPTIONS`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3971
+#, no-wrap
+msgid ""
+".if ! ${PORT_OPTIONS:MEXAMPLES}\n"
+"CONFIGURE_ARGS+=--without-examples\n"
+".endif\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3975
+msgid ""
+"The form shown above is discouraged. The preferred method is using a "
+"configure knob to really enable and disable the feature to match the option:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3980
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4017
+#, no-wrap
+msgid ""
+"# Will add --with-examples / --without-examples\n"
+"EXAMPLES_CONFIGURE_WITH=\texamples\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3985
+#, no-wrap
+msgid "Practical Use of `OPTIONS`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3993
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\t\tEXAMPLES\n"
+"OPTIONS_DEFAULT=\tPGSQL LDAP SSL\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3996
+#, no-wrap
+msgid ""
+"OPTIONS_SINGLE=\t\tBACKEND\n"
+"OPTIONS_SINGLE_BACKEND=\tMYSQL PGSQL BDB\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:3999
+#, no-wrap
+msgid ""
+"OPTIONS_MULTI=\t\tAUTH\n"
+"OPTIONS_MULTI_AUTH=\tLDAP PAM SSL\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4007
+#, no-wrap
+msgid ""
+"EXAMPLES_DESC=\t\tInstall extra examples\n"
+"MYSQL_DESC=\t\tUse MySQL as backend\n"
+"PGSQL_DESC=\t\tUse PostgreSQL as backend\n"
+"BDB_DESC=\t\tUse Berkeley DB as backend\n"
+"LDAP_DESC=\t\tBuild with LDAP authentication support\n"
+"PAM_DESC=\t\tBuild with PAM support\n"
+"SSL_DESC=\t\tBuild with OpenSSL support\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4012
+#, no-wrap
+msgid ""
+"# Will add USE_PGSQL=yes\n"
+"PGSQL_USE=\tpgsql=yes\n"
+"# Will add --enable-postgres / --disable-postgres\n"
+"PGSQL_CONFIGURE_ENABLE=\tpostgres\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4014
+#, no-wrap
+msgid "ICU_LIB_DEPENDS=\tlibicuuc.so:devel/icu\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4019
+#, no-wrap
+msgid "# Check other OPTIONS\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4026
+#, no-wrap
+msgid "Default Options"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4029
+msgid "These options are always on by default."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4031
+msgid "`DOCS` - build and install documentation."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4032
+msgid "`NLS` - Native Language Support."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4033
+msgid "`EXAMPLES` - build and install examples."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4034
+msgid "`IPV6` - IPv6 protocol support."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4039
+msgid ""
+"There is no need to add these to `OPTIONS_DEFAULT`. To have them active, "
+"and show up in the options selection dialog, however, they must be added to "
+"`OPTIONS_DEFINE`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4042
+#, no-wrap
+msgid "Feature Auto-Activation"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4046
+msgid ""
+"When using a GNU configure script, keep an eye on which optional features "
+"are activated by auto-detection. Explicitly disable optional features that "
+"are not needed by adding `--without-xxx` or `--disable-xxx` in "
+"`CONFIGURE_ARGS`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4048
+#, no-wrap
+msgid "Wrong Handling of an Option"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4058
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MFOO}\n"
+"LIB_DEPENDS+=\t\tlibfoo.so:devel/foo\n"
+"CONFIGURE_ARGS+=\t--enable-foo\n"
+".endif\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4066
+msgid ""
+"In the example above, imagine a library libfoo is installed on the system. "
+"The user does not want this application to use libfoo, so he toggled the "
+"option off in the `make config` dialog. But the application's configure "
+"script detects the library present in the system and includes its support in "
+"the resulting executable. Now when the user decides to remove libfoo from "
+"the system, the ports system does not protest (no dependency on libfoo was "
+"recorded) but the application breaks."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4068
+#, no-wrap
+msgid "Correct Handling of an Option"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4077
+#, no-wrap
+msgid ""
+"FOO_LIB_DEPENDS=\t\tlibfoo.so:devel/foo\n"
+"# Will add --enable-foo / --disable-foo\n"
+"FOO_CONFIGURE_ENABLE=\tfoo\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4085
+msgid ""
+"Under some circumstances, the shorthand conditional syntax can cause "
+"problems with complex constructs. The errors are usually `Malformed "
+"conditional`, an alternative syntax can be used."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4089
+#, no-wrap
+msgid ".if !empty(VARIABLE:MVALUE)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4092
+msgid "as an alternative to"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4096
+#, no-wrap
+msgid ".if ${VARIABLE:MVALUE}\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4101
+#, no-wrap
+msgid "Options Helpers"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4105
+msgid ""
+"There are some macros to help simplify conditional values which differ based "
+"on the options set. For easier access, a comprehensive list is provided:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4106
+#, no-wrap
+msgid "`PLIST_SUB`, `SUB_LIST`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4108
+msgid ""
+"For automatic `%%_OPT_%%` and `%%NO__OPT__%%` generation, see "
+"<<options_sub>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4110
+msgid "For more complex usage, see <<options-variables>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4111
+#, no-wrap
+msgid "`CONFIGURE_ARGS`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4113
+msgid ""
+"For `--enable-_x_` and `--disable-_x_`, see <<options-configure_enable>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4115
+msgid "For `--with-_x_` and `--without-_x_`, see <<options-configure_with>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4117
+msgid "For all other cases, see <<options-configure_on>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4118
+#, no-wrap
+msgid "`CMAKE_ARGS`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4120
+msgid ""
+"For arguments that are booleans (`on`, `off`, `true`, `false`, `0`, `1`) see "
+"<<options-cmake_bool>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4122
+msgid "For all other cases, see <<options-cmake_on>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4123
+#, no-wrap
+msgid "`MESON_ARGS`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4125
+msgid "For arguments that take `true` or `false`, see <<options-meson_true>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4127
+msgid "For arguments that take `yes` or `no`, use <<options-meson_yes>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4129
+msgid ""
+"For arguments that take `enabled` or `disabled`, see <<options-"
+"meson_enabled>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4131
+msgid "For all other cases, use <<options-meson_on>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4132
+#, no-wrap
+msgid "`QMAKE_ARGS`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4134
+msgid "See <<options-qmake_on>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4137
+msgid "See <<options-use>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4138
+#, no-wrap
+msgid "`*_DEPENDS`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4140
+msgid "See <<options-dependencies>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4141
+#, no-wrap
+msgid "`*` (Any variable)"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4143
+msgid "The most used variables have direct helpers, see <<options-variables>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4145
+msgid "For any variable without a specific helper, see <<options-vars>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4146
+#, no-wrap
+msgid "Options dependencies"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4148
+msgid "When an option need another option to work, see <<options-implies>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4149
+#, no-wrap
+msgid "Options conflicts"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4151
+msgid ""
+"When an option cannot work if another is also enabled, see <<options-"
+"prevents>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4152
+#, no-wrap
+msgid "Build targets"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4154
+msgid "When an option need some extra processing, see <<options-targets>>."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4156
+#, no-wrap
+msgid "`OPTIONS_SUB`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4159
+msgid ""
+"If `OPTIONS_SUB` is set to `yes` then each of the options added to "
+"`OPTIONS_DEFINE` will be added to `PLIST_SUB` and `SUB_LIST`, for example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4164
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPTIONS_SUB=\tyes\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4167
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4206
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4242
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4279
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4314
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4350
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4386
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4420
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4450
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4482
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4514
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4543
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4695
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4768
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4845
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4935
+msgid "is equivalent to:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4171
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4210
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4246
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4318
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4354
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4390
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4424
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4454
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4486
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4518
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4547
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4772
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4849
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4926
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4939
+#, no-wrap
+msgid "OPTIONS_DEFINE=\tOPT1\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4173
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4212
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4248
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4285
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4320
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4356
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4392
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4426
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4456
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4488
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4520
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4549
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4581
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4638
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4703
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4774
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4851
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4941
+#, no-wrap
+msgid ".include <bsd.port.options.mk>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4181
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"PLIST_SUB+=\tOPT1=\"\" NO_OPT1=\"@comment \"\n"
+"SUB_LIST+=\tOPT1=\"\" NO_OPT1=\"@comment \"\n"
+".else\n"
+"PLIST_SUB+=\tOPT1=\"@comment \" NO_OPT1=\"\"\n"
+"SUB_LIST+=\tOPT1=\"@comment \" NO_OPT1=\"\"\n"
+".endif\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4187
+msgid ""
+"The value of `OPTIONS_SUB` is ignored. Setting it to any value will add "
+"`PLIST_SUB` and `SUB_LIST` entries for _all_ options."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4190
+#, no-wrap
+msgid "`OPT_USE` and `OPT_USE_OFF`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4196
+msgid ""
+"When option _OPT_ is selected, for each `_key=value_` pair in ``OPT_USE``, "
+"_value_ is appended to the corresponding `USE_KEY`. If _value_ has spaces "
+"in it, replace them with commas and they will be changed back to spaces "
+"during processing. `OPT_USE_OFF` works the same way, but when `OPT` is "
+"_not_ selected. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4203
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_USES=\txorg\n"
+"OPT1_USE=\tmysql=yes xorg=x11,xextproto,xext,xrandr\n"
+"OPT1_USE_OFF=\topenssl=yes\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4220
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"USE_MYSQL=\tyes\n"
+"USES+=\t\txorg\n"
+"USE_XORG=\tx11 xextproto xext xrandr\n"
+".else\n"
+"USE_OPENSSL=\tyes\n"
+".endif\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4223
+#, no-wrap
+msgid "`CONFIGURE_ARGS` Helpers"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4226
+#, no-wrap
+msgid "`OPT_CONFIGURE_ENABLE`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4233
+msgid ""
+"When option _OPT_ is selected, for each _entry_ in `OPT_CONFIGURE_ENABLE` "
+"then `--enable-_entry_` is appended to `CONFIGURE_ARGS`. When option _OPT_ "
+"is _not_ selected, `--disable-_entry_` is appended to `CONFIGURE_ARGS`. An "
+"optional argument can be specified with an `=` symbol. This argument is "
+"only appended to the `--enable-_entry_` configure option. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4239
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1 OPT2\n"
+"OPT1_CONFIGURE_ENABLE=\ttest1 test2\n"
+"OPT2_CONFIGURE_ENABLE=\ttest2=exhaustive\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4254
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"CONFIGURE_ARGS+=\t--enable-test1 --enable-test2\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--disable-test1 --disable-test2\n"
+".endif\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4260
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT2}\n"
+"CONFIGURE_ARGS+=\t--enable-test2=exhaustive\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--disable-test2\n"
+".endif\n"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4263
+#, no-wrap
+msgid "`OPT_CONFIGURE_WITH`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4270
+msgid ""
+"When option _OPT_ is selected, for each _entry_ in `_OPT_CONFIGURE_WITH` "
+"then `--with-_entry_` is appended to `CONFIGURE_ARGS`. When option _OPT_ is "
+"_not_ selected, `--without-_entry_` is appended to `CONFIGURE_ARGS`. An "
+"optional argument can be specified with an `=` symbol. This argument is "
+"only appended to the `--with-_entry_` configure option. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4276
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1 OPT2\n"
+"OPT1_CONFIGURE_WITH=\ttest1\n"
+"OPT2_CONFIGURE_WITH=\ttest2=exhaustive\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4291
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"CONFIGURE_ARGS+=\t--with-test1\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--without-test1\n"
+".endif\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4297
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT2}\n"
+"CONFIGURE_ARGS+=\t--with-test2=exhaustive\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--without-test2\n"
+".endif\n"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4300
+#, no-wrap
+msgid "`OPT_CONFIGURE_ON` and `OPT_CONFIGURE_OFF`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4305
+msgid ""
+"When option _OPT_ is selected, the value of `OPT_CONFIGURE_ON`, if defined, "
+"is appended to `CONFIGURE_ARGS`. `OPT_CONFIGURE_OFF` works the same way, "
+"but when `OPT` is _not_ selected. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4311
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_CONFIGURE_ON=\t--add-test\n"
+"OPT1_CONFIGURE_OFF=\t--no-test\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4326
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"CONFIGURE_ARGS+=\t--add-test\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--no-test\n"
+".endif\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4331
+msgid ""
+"Most of the time, the helpers in <<options-configure_enable>> and <<options-"
+"configure_with>> provide a shorter and more comprehensive functionality."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4334
+#, no-wrap
+msgid "`CMAKE_ARGS` Helpers"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4337
+#, no-wrap
+msgid "`OPT_CMAKE_ON` and `OPT_CMAKE_OFF`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4341
+msgid ""
+"When option _OPT_ is selected, the value of `OPT_CMAKE_ON`, if defined, is "
+"appended to `CMAKE_ARGS`. `OPT_CMAKE_OFF` works the same way, but when `OPT` "
+"is _not_ selected. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4347
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_CMAKE_ON=\t-DTEST:BOOL=true -DDEBUG:BOOL=true\n"
+"OPT1_CMAKE_OFF=\t-DOPTIMIZE:BOOL=true\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4362
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"CMAKE_ARGS+=\t-DTEST:BOOL=true -DDEBUG:BOOL=true\n"
+".else\n"
+"CMAKE_ARGS+=\t-DOPTIMIZE:BOOL=true\n"
+".endif\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4368
+msgid ""
+"See <<options-cmake_bool>> for a shorter helper when the value is boolean."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4371
+#, no-wrap
+msgid "`OPT_CMAKE_BOOL` and `OPT_CMAKE_BOOL_OFF`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4377
+msgid ""
+"When option _OPT_ is selected, for each _entry_ in `OPT_CMAKE_BOOL` then `-"
+"D_entry_:BOOL=true` is appended to `CMAKE_ARGS`. When option _OPT_ is _not_ "
+"selected, `-D_entry_:BOOL=false` is appended to `CONFIGURE_ARGS`. "
+"`OPT_CMAKE_BOOL_OFF` is the opposite, `-D_entry_:BOOL=false` is appended to "
+"`CMAKE_ARGS` when the option is selected, and `-D_entry_:BOOL=true` when the "
+"option is _not_ selected. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4383
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_CMAKE_BOOL=\tTEST DEBUG\n"
+"OPT1_CMAKE_BOOL_OFF=\tOPTIMIZE\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4400
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"CMAKE_ARGS+=\t-DTEST:BOOL=true -DDEBUG:BOOL=true \\\n"
+"\t\t-DOPTIMIZE:BOOL=false\n"
+".else\n"
+"CMAKE_ARGS+=\t-DTEST:BOOL=false -DDEBUG:BOOL=false \\\n"
+"\t\t-DOPTIMIZE:BOOL=true\n"
+".endif\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4403
+#, no-wrap
+msgid "`MESON_ARGS` Helpers"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4406
+#, no-wrap
+msgid "`OPT_MESON_ON` and `OPT_MESON_OFF`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4411
+msgid ""
+"When option _OPT_ is selected, the value of `OPT_MESON_ON`, if defined, is "
+"appended to `MESON_ARGS`. `OPT_MESON_OFF` works the same way, but when "
+"`OPT` is _not_ selected. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4417
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_MESON_ON=\t-Dopt=1\n"
+"OPT1_MESON_OFF=\t-Dopt=2\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4432
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"MESON_ARGS+=\t-Dopt=1\n"
+".else\n"
+"MESON_ARGS+=\t-Dopt=2\n"
+".endif\n"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4435
+#, no-wrap
+msgid "`OPT_MESON_TRUE` and `OPT_MESON_FALSE`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4441
+msgid ""
+"When option _OPT_ is selected, for each _entry_ in `OPT_MESON_TRUE` then `-"
+"D_entry_=true` is appended to `MESON_ARGS`. When option _OPT_ is _not_ "
+"selected, `-D_entry_=false` is appended to `MESON_ARGS`. `OPT_MESON_FALSE` "
+"is the opposite, `-D_entry_=false` is appended to `MESON_ARGS` when the "
+"option is selected, and `-D_entry_=true` when the option is _not_ selected. "
+"For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4447
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_MESON_TRUE=\ttest debug\n"
+"OPT1_MESON_FALSE=\toptimize\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4464
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"MESON_ARGS+=\t-Dtest=true -Ddebug=true \\\n"
+"\t\t-Doptimize=false\n"
+".else\n"
+"MESON_ARGS+=\t-Dtest=false -Ddebug=false \\\n"
+"\t\t-Doptimize=true\n"
+".endif\n"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4467
+#, no-wrap
+msgid "`OPT_MESON_YES` and `OPT_MESON_NO`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4473
+msgid ""
+"When option _OPT_ is selected, for each _entry_ in `OPT_MESON_YES` then `-"
+"D_entry_=yes` is appended to `MESON_ARGS`. When option _OPT_ is _not_ "
+"selected, `-D_entry_=no` is appended to `MESON_ARGS`. `OPT_MESON_NO` is the "
+"opposite, `-D_entry_=no` is appended to `MESON_ARGS` when the option is "
+"selected, and `-D_entry_=yes` when the option is _not_ selected. For "
+"example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4479
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_MESON_YES=\ttest debug\n"
+"OPT1_MESON_NO=\toptimize\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4496
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"MESON_ARGS+=\t-Dtest=yes -Ddebug=yes \\\n"
+"\t\t-Doptimize=no\n"
+".else\n"
+"MESON_ARGS+=\t-Dtest=no -Ddebug=no \\\n"
+"\t\t-Doptimize=yes\n"
+".endif\n"
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4499
+#, no-wrap
+msgid "`OPT_MESON_ENABLED` and `OPT_MESON_DISABLED`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4505
+msgid ""
+"When option _OPT_ is selected, for each _entry_ in `OPT_MESON_ENABLED` then "
+"`-D_entry_=enabled` is appended to `MESON_ARGS`. When option _OPT_ is _not_ "
+"selected, `-D_entry_=disabled` is appended to `MESON_ARGS`. "
+"`OPT_MESON_DISABLED` is the opposite, `-D_entry_=disabled` is appended to "
+"`MESON_ARGS` when the option is selected, and `-D_entry_=enabled` when the "
+"option is _not_ selected. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4511
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_MESON_ENABLED=\ttest\n"
+"OPT1_MESON_DISABLED=\tdebug\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4526
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"MESON_ARGS+=\t-Dtest=enabled -Ddebug=disabled\n"
+".else\n"
+"MESON_ARGS+=\t-Dtest=disabled -Ddebug=enabled\n"
+".endif\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4529
+#, no-wrap
+msgid "`OPT_QMAKE_ON` and `OPT_QMAKE_OFF`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4534
+msgid ""
+"When option _OPT_ is selected, the value of `OPT_QMAKE_ON`, if defined, is "
+"appended to `QMAKE_ARGS`. `OPT_QMAKE_OFF` works the same way, but when "
+"`OPT` is _not_ selected. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4540
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_QMAKE_ON=\t-DTEST:BOOL=true\n"
+"OPT1_QMAKE_OFF=\t-DPRODUCTION:BOOL=true\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4555
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"QMAKE_ARGS+=\t-DTEST:BOOL=true\n"
+".else\n"
+"QMAKE_ARGS+=\t-DPRODUCTION:BOOL=true\n"
+".endif\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4558
+#, no-wrap
+msgid "`OPT_IMPLIES`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4561
+msgid "Provides a way to add dependencies between options."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4564
+msgid ""
+"When _OPT_ is selected, all the options listed in this variable will be "
+"selected too. Using the <<options-configure_enable,`OPT_CONFIGURE_ENABLE`>> "
+"described earlier to illustrate:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4569
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1 OPT2\n"
+"OPT1_IMPLIES=\tOPT2\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4572
+#, no-wrap
+msgid ""
+"OPT1_CONFIGURE_ENABLE=\topt1\n"
+"OPT2_CONFIGURE_ENABLE=\topt2\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4575
+msgid "Is equivalent to:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4587
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"CONFIGURE_ARGS+=\t--enable-opt1\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--disable-opt1\n"
+".endif\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4593
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT2} || ${PORT_OPTIONS:MOPT1}\n"
+"CONFIGURE_ARGS+=\t--enable-opt2\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--disable-opt2\n"
+".endif\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4596
+#, no-wrap
+msgid "Simple Use of `OPT_IMPLIES`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4601
+msgid ""
+"This port has a `X11` option, and a `GNOME` option that needs the `X11` "
+"option to be selected to build."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4606
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tX11 GNOME\n"
+"OPTIONS_DEFAULT=\tX11\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4611
+#, no-wrap
+msgid ""
+"X11_USES=\txorg\n"
+"X11_USE=\txorg=xi,xextproto\n"
+"GNOME_USE=\tgnome=gtk30\n"
+"GNOME_IMPLIES=\tX11\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4616
+#, no-wrap
+msgid "`OPT_PREVENTS` and `OPT_PREVENTS_MSG`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4619
+msgid "Provides a way to add conflicts between options."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4623
+msgid ""
+"When _OPT_ is selected, all the options listed in `OPT_PREVENTS` must be un-"
+"selected. If `OPT_PREVENTS_MSG` is set and a conflict is triggered, its "
+"content will be shown explaining why they conflict. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4629
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1 OPT2\n"
+"OPT1_PREVENTS=\tOPT2\n"
+"OPT1_PREVENTS_MSG=\tOPT1 and OPT2 enable conflicting options\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4632
+msgid "Is roughly equivalent to:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4642
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT2} && ${PORT_OPTIONS:MOPT1}\n"
+"BROKEN=\tOption OPT1 conflicts with OPT2 (select only one)\n"
+".endif\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4645
+msgid ""
+"The only difference is that the first one will write an error after running "
+"`make config`, suggesting changing the selected options."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4647
+#, no-wrap
+msgid "Simple Use of `OPT_PREVENTS`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4653
+msgid ""
+"This port has `X509` and `SCTP` options. Both options add patches, but the "
+"patches conflict with each other, so they cannot be selected at the same "
+"time."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4657
+#, no-wrap
+msgid "OPTIONS_DEFINE=\tX509 SCTP\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4660
+#, no-wrap
+msgid ""
+"SCTP_PATCHFILES=\t${PORTNAME}-6.8p1-sctp-2573.patch.gz:-p1\n"
+"SCTP_CONFIGURE_WITH=\tsctp\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4665
+#, no-wrap
+msgid ""
+"X509_PATCH_SITES=\thttp://www.roumenpetrov.info/openssh/x509/:x509\n"
+"X509_PATCHFILES=\t${PORTNAME}-7.0p1+x509-8.5.diff.gz:-p1:x509\n"
+"X509_PREVENTS=\t\tSCTP\n"
+"X509_PREVENTS_MSG=\tX509 and SCTP patches conflict\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4670
+#, no-wrap
+msgid "`OPT_VARS` and `OPT_VARS_OFF`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4673
+msgid "Provides a generic way to set and append to variables."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4677
+msgid ""
+"Before using `OPT_VARS` and `OPT_VARS_OFF`, see if there is already a more "
+"specific helper available in <<options-variables>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4682
+msgid ""
+"When option _OPT_ is selected, and `OPT_VARS` defined, `_key_=_value_` and "
+"`_key_+=_value_` pairs are evaluated from `OPT_VARS`. An `=` cause the "
+"existing value of `KEY` to be overwritten, an `+=` appends to the value. "
+"`OPT_VARS_OFF` works the same way, but when `OPT` is _not_ selected."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4690
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1 OPT2 OPT3\n"
+"OPT1_VARS=\talso_build+=bin1\n"
+"OPT2_VARS=\talso_build+=bin2\n"
+"OPT3_VARS=\tbin3_build=yes\n"
+"OPT3_VARS_OFF=\tbin3_build=no\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4692
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4701
+#, no-wrap
+msgid "MAKE_ARGS=\tALSO_BUILD=\"${ALSO_BUILD}\" BIN3_BUILD=\"${BIN3_BUILD}\"\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4707
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"ALSO_BUILD+=\tbin1\n"
+".endif\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4711
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT2}\n"
+"ALSO_BUILD+=\tbin2\n"
+".endif\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4717
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT2}\n"
+"BIN3_BUILD=\tyes\n"
+".else\n"
+"BIN3_BUILD=\tno\n"
+".endif\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4722
+msgid "Values containing whitespace must be enclosed in quotes:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4726
+#, no-wrap
+msgid "OPT_VARS=\tfoo=\"bar baz\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4732
+msgid ""
+"This is due to the way man:make[1] variable expansion deals with "
+"whitespace. When `OPT_VARS= foo=bar baz` is expanded, the variable ends up "
+"containing two strings, `foo=bar` and `baz`. But the submitter probably "
+"intended there to be only one string, `foo=bar baz`. Quoting the value "
+"prevents whitespace from being used as a delimiter."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4735
+msgid ""
+"Also, _do not_ add extra spaces after the `_var_=` sign and before the "
+"value, it would also be split into two strings. _This will not work_:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4739
+#, no-wrap
+msgid "OPT_VARS=\tfoo=\tbar\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4744
+#, no-wrap
+msgid "Dependencies, `OPT_DEPTYPE` and `OPT_DEPTYPE_OFF`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4747
+msgid "For any of these dependency types:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4749
+msgid "`PKG_DEPENDS`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4759
+msgid ""
+"When option _OPT_ is selected, the value of `OPT_DEPTYPE`, if defined, is "
+"appended to `DEPTYPE`. `OPT_DEPTYPE_OFF` works the same, but when `OPT` is "
+"_not_ selected. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4765
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_LIB_DEPENDS=\tliba.so:devel/a\n"
+"OPT1_LIB_DEPENDS_OFF=\tlibb.so:devel/b\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4780
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"LIB_DEPENDS+=\tliba.so:devel/a\n"
+".else\n"
+"LIB_DEPENDS+=\tlibb.so:devel/b\n"
+".endif\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4783
+#, no-wrap
+msgid "Generic Variables Replacement, `OPT_VARIABLE` and `OPT_VARIABLE_OFF`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4786
+msgid "For any of these variables:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4788
+msgid "`ALL_TARGET`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4789
+msgid "`BINARY_ALIAS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4790
+msgid "`BROKEN`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4792
+msgid "`CFLAGS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4793
+msgid "`CONFIGURE_ENV`"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4794
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5033
+#, no-wrap
+msgid "`CONFLICTS`"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4795
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5028
+#, no-wrap
+msgid "`CONFLICTS_BUILD`"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4796
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5023
+#, no-wrap
+msgid "`CONFLICTS_INSTALL`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4797
+msgid "`CPPFLAGS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4798
+msgid "`CXXFLAGS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4799
+msgid "`DESKTOP_ENTRIES`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4802
+msgid "`EXTRA_PATCHES`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4814
+msgid "`IGNORE`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4815
+msgid "`INFO`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4816
+msgid "`INSTALL_TARGET`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4817
+msgid "`LDFLAGS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4818
+msgid "`LIBS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4819
+msgid "`MAKE_ARGS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4820
+msgid "`MAKE_ENV`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4823
+msgid "`PATCH_SITES`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4824
+msgid "`PLIST_DIRS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4825
+msgid "`PLIST_FILES`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4826
+msgid "`PLIST_SUB`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4827
+msgid "`PORTDOCS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4828
+msgid "`PORTEXAMPLES`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4829
+msgid "`SUB_FILES`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4830
+msgid "`SUB_LIST`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4831
+msgid "`TEST_TARGET`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4836
+msgid ""
+"When option _OPT_ is selected, the value of `OPT_ABOVEVARIABLE`, if defined, "
+"is appended to `_ABOVEVARIABLE_`. `OPT_ABOVEVARIABLE_OFF` works the same "
+"way, but when `OPT` is _not_ selected. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4842
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tOPT1\n"
+"OPT1_USES=\tgmake\n"
+"OPT1_CFLAGS_OFF=\t-DTEST\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4857
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MOPT1}\n"
+"USES+=\t\tgmake\n"
+".else\n"
+"CFLAGS+=\t-DTEST\n"
+".endif\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4864
+msgid ""
+"Some variables are not in this list, in particular `PKGNAMEPREFIX` and "
+"`PKGNAMESUFFIX`. This is intentional. A port _must not_ change its name "
+"when its option set changes."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4869
+msgid ""
+"Some of these variables, at least `ALL_TARGET`, `DISTFILES` and "
+"`INSTALL_TARGET`, have their default values set _after_ the options are "
+"processed."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4871
+msgid "With these lines in the [.filename]#Makefile#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4875
+#, no-wrap
+msgid "ALL_TARGET=\tall\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4877
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4886
+#, no-wrap
+msgid "DOCS_ALL_TARGET=\tdoc\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4880
+msgid ""
+"If the `DOCS` option is enabled, `ALL_TARGET` will have a final value of "
+"`all doc`; if the option is disabled, it would have a value of `all`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4882
+msgid "With only the options helper line in the [.filename]#Makefile#:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4889
+msgid ""
+"If the `DOCS` option is enabled, `ALL_TARGET` will have a final value of "
+"`doc`; if the option is disabled, it would have a value of `all`."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4892
+#, no-wrap
+msgid "Additional Build Targets, `_target_-_OPT_-on` and `_target_-_OPT_-off`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4895
+msgid ""
+"These [.filename]#Makefile# targets can accept optional extra build targets:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4897
+msgid "`pre-fetch`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4898
+msgid "`do-fetch`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4899
+msgid "`post-fetch`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4900
+msgid "`pre-extract`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4901
+msgid "`do-extract`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4902
+msgid "`post-extract`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4903
+msgid "`pre-patch`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4904
+msgid "`do-patch`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4905
+msgid "`post-patch`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4906
+msgid "`pre-configure`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4907
+msgid "`do-configure`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4908
+msgid "`post-configure`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4909
+msgid "`pre-build`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4910
+msgid "`do-build`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4911
+msgid "`post-build`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4912
+msgid "`pre-install`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4913
+msgid "`do-install`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4914
+msgid "`post-install`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4915
+msgid "`post-stage`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4916
+msgid "`pre-package`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4917
+msgid "`do-package`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4918
+msgid "`post-package`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4922
+msgid ""
+"When option _OPT_ is selected, the target `_TARGET_-_OPT_-on`, if defined, "
+"is executed after `_TARGET_`. `_TARGET_-_OPT_-off` works the same way, but "
+"when `OPT` is _not_ selected. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4929
+#, no-wrap
+msgid ""
+"post-patch-OPT1-on:\n"
+"\t@${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${EXAMPLESDIR}/|' ${WRKSRC}/Makefile\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4932
+#, no-wrap
+msgid ""
+"post-patch-OPT1-off:\n"
+"\t@${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${PREFIX}/bin/|' ${WRKSRC}/Makefile\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4948
+#, no-wrap
+msgid ""
+"post-patch:\n"
+".if ${PORT_OPTIONS:MOPT1}\n"
+"\t@${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${EXAMPLESDIR}/|' ${WRKSRC}/Makefile\n"
+".else\n"
+"\t@${REINPLACE_CMD} -e '/opt1/s|/usr/bin/|${PREFIX}/bin/|' ${WRKSRC}/Makefile\n"
+".endif\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4951
+#, no-wrap
+msgid "Specifying the Working Directory"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4956
+msgid ""
+"Each port is extracted into a working directory, which must be writable. "
+"The ports system defaults to having `DISTFILES` unpack in to a directory "
+"called `${DISTNAME}`. In other words, if the [.filename]#Makefile# has:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4961
+#, no-wrap
+msgid ""
+"PORTNAME=\tfoo\n"
+"DISTVERSION=\t1.0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4964
+msgid ""
+"then the port's distribution files contain a top-level directory, [."
+"filename]#foo-1.0#, and the rest of the files are located under that "
+"directory."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4966
+msgid "A number of variables can be overridden if that is not the case."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4968
+#, no-wrap
+msgid "`WRKSRC`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4972
+msgid ""
+"The variable lists the name of the directory that is created when the "
+"application's distfiles are extracted. If our previous example extracted "
+"into a directory called [.filename]#foo# (and not [.filename]#foo-1.0#) "
+"write:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4976
+#, no-wrap
+msgid "WRKSRC=\t${WRKDIR}/foo\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4979
+msgid "or possibly"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4983
+#, no-wrap
+msgid "WRKSRC=\t${WRKDIR}/${PORTNAME}\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4986
+#, no-wrap
+msgid "`WRKSRC_SUBDIR`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4989
+msgid ""
+"If the source files needed for the port are in a subdirectory of the "
+"extracted distribution file, set `WRKSRC_SUBDIR` to that directory."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4993
+#, no-wrap
+msgid "WRKSRC_SUBDIR=\tsrc\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4996
+#, no-wrap
+msgid "`NO_WRKSUBDIR`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:4999
+msgid ""
+"If the port does not extract in to a subdirectory at all, then set "
+"`NO_WRKSUBDIR` to indicate that."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5003
+#, no-wrap
+msgid "NO_WRKSUBDIR=\tyes\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5008
+msgid ""
+"Because `WRKDIR` is the only directory that is supposed to be writable "
+"during the build, and is used to store many files recording the status of "
+"the build, the port's extraction will be forced into a subdirectory."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5011
+#, no-wrap
+msgid "Conflict Handling"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5014
+msgid ""
+"There are three different variables to register a conflict between packages "
+"and ports: `CONFLICTS`, `CONFLICTS_INSTALL` and `CONFLICTS_BUILD`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5018
+msgid ""
+"The conflict variables automatically set the variable `IGNORE`, which is "
+"more fully documented in crossref:porting-dads[dads-noinstall,Marking a Port "
+"Not Installable with `BROKEN`, `FORBIDDEN`, or `IGNORE`]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5021
+msgid ""
+"When removing one of several conflicting ports, it is advisable to retain "
+"`CONFLICTS` in those other ports for a few months to cater for users who "
+"only update once in a while."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5026
+msgid ""
+"If the package cannot coexist with other packages (because of file "
+"conflicts, runtime incompatibilities, etc.). `CONFLICTS_INSTALL` check is "
+"done after the build stage and prior to the install stage."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5031
+msgid ""
+"If the port cannot be built when other specific ports are already "
+"installed. Build conflicts are not recorded in the resulting package."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5036
+msgid ""
+"If the port cannot be built if a certain port is already installed and the "
+"resulting package cannot coexist with the other package. `CONFLICTS` check "
+"is done prior to the build stage and prior to the install stage."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5040
+msgid ""
+"Each space-separated item in the `CONFLICTS*` variable values is matched "
+"against packages except the one being built, using shell globbing rules. "
+"This allows listing all flavors of a port in a conflict list instead of "
+"having to take pains to exclude the flavor being built from that list. For "
+"example, if git-lite is installed, `CONFLICTS_INSTALL=git git-lite` would "
+"allow to perform:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5043
+#, no-wrap
+msgid "% make -C devel/git FLAVOR=lite all deinstall install\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5046
+msgid ""
+"But the following command would report a conflict, since the package base "
+"name installed is `git-lite`, while `git` would be built, but cannot be "
+"installed in addition to `git-lite`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5049
+#, no-wrap
+msgid "% make -C devel/git FLAVOR=default all deinstall install\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5052
+msgid ""
+"Without that feature, the Makefile would need one "
+"`_flavor__CONFLICTS_INSTALL` for each flavor, listing every other flavor."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5055
+msgid ""
+"The most common content of one of these variable is the package base of "
+"another port. The package base is the package name without the appended "
+"version, it can be obtained by running `make -V PKGBASE`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5057
+#, no-wrap
+msgid "Basic usage of `CONFLICTS*`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5063
+msgid ""
+"package:dns/bind99[] cannot be installed if package:dns/bind910[] is present "
+"because they install same files. First gather the package base to use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5070
+#, no-wrap
+msgid ""
+"% make -C dns/bind99 -V PKGBASE\n"
+"bind99\n"
+"% make -C dns/bind910 -V PKGBASE\n"
+"bind910\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5073
+msgid "Then add to the [.filename]#Makefile# of package:dns/bind99[]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5077
+#, no-wrap
+msgid "CONFLICTS_INSTALL=\tbind910\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5080
+msgid "And add to the [.filename]#Makefile# of package:dns/bind910[]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5084
+#, no-wrap
+msgid "CONFLICTS_INSTALL=\tbind99\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5091
+msgid ""
+"Sometimes, only certain versions of another port are incompatible. When "
+"this is the case, use the full package name including the version. If "
+"necessary, use shell globs like `*` and `?` so that all necessary versions "
+"are matched."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5093
+#, no-wrap
+msgid "Using `CONFLICTS*` With Globs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5098
+msgid ""
+"From versions from 2.0 and up-to 2.4.1_2, package:deskutils/gnotime[] used "
+"to install a bundled version of package:databases/qof[]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5100
+msgid ""
+"To reflect this past, the [.filename]#Makefile# of package:databases/qof[] "
+"contains:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5106
+#, no-wrap
+msgid ""
+"CONFLICTS_INSTALL=\tgnotime-2.[0-3]* \\\n"
+"\t\t\tgnotime-2.4.0* gnotime-2.4.1 \\\n"
+"\t\t\tgnotime-2.4.1_[12]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5109
+msgid ""
+"The first entry match versions `2.0` through `2.3`, the second all the "
+"revisions of `2.4.0`, the third the exact `2.4.1` version, and the last the "
+"first and second revisions of the `2.4.1` version."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5111
+msgid ""
+"package:deskutils/gnotime[] does not have any conflicts line because its "
+"current version does not conflict with anything else."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5115
+msgid ""
+"The variable `DISABLE_CONFLICTS` may be temporarily set when making targets "
+"that are not affected by conflicts. The variable is not to be set in port "
+"Makefiles."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5119
+#, no-wrap
+msgid "% make -DDISABLE_CONFLICTS patch\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5122
+#, no-wrap
+msgid "Installing Files"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5129
+msgid ""
+"The `install` phase is very important to the end user because it adds files "
+"to their system. All the additional commands run in the port [."
+"filename]#Makefile#'s `*-install` targets should be echoed to the screen. "
+"_Do not_ silence these commands with `@` or `.SILENT`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5132
+#, no-wrap
+msgid "`INSTALL_*` Macros"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5139
+msgid ""
+"Use the macros provided in [.filename]#bsd.port.mk# to ensure correct modes "
+"of files in the port's `*-install` targets. Set ownership directly in [."
+"filename]#pkg-plist# with the corresponding entries, such as `@(_owner_,"
+"_group_,)`, `@owner _owner_`, and `@group _group_`. These operators work "
+"until overridden, or until the end of [.filename]#pkg-plist#, so remember to "
+"reset them after they are no longer needed. The default ownership is `root:"
+"wheel`. See crossref:plist[plist-keywords-base,Base Keywords] for more "
+"information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5141
+msgid "`INSTALL_PROGRAM` is a command to install binary executables."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5142
+msgid "`INSTALL_SCRIPT` is a command to install executable scripts."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5143
+msgid ""
+"`INSTALL_LIB` is a command to install shared libraries (but not static "
+"libraries)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5144
+msgid ""
+"`INSTALL_KLD` is a command to install kernel loadable modules. Some "
+"architectures do not like having the modules stripped, so use this command "
+"instead of `INSTALL_PROGRAM`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5145
+msgid ""
+"`INSTALL_DATA` is a command to install sharable data, including static "
+"libraries."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5146
+msgid ""
+"`INSTALL_MAN` is a command to install manpages and other documentation (it "
+"does not compress anything)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5148
+msgid ""
+"These variables are set to the man:install[1] command with the appropriate "
+"flags for each situation."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5152
+msgid ""
+"Do not use `INSTALL_LIB` to install static libraries, because stripping them "
+"renders them useless. Use `INSTALL_DATA` instead."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5155
+#, no-wrap
+msgid "Stripping Binaries and Shared Libraries"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5160
+msgid ""
+"Installed binaries should be stripped. Do not strip binaries manually unless "
+"absolutely required. The `INSTALL_PROGRAM` macro installs and strips a "
+"binary at the same time. The `INSTALL_LIB` macro does the same thing to "
+"shared libraries."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5163
+msgid ""
+"When a file must be stripped, but neither `INSTALL_PROGRAM` nor "
+"`INSTALL_LIB` macros are desirable, `${STRIP_CMD}` strips the program or "
+"shared library. This is typically done within the `post-install` target. "
+"For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5168
+#, no-wrap
+msgid ""
+"post-install:\n"
+"\t${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/xdl\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5171
+msgid "When multiple files need to be stripped:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5178
+#, no-wrap
+msgid ""
+"post-install:\n"
+".for l in geometry media body track world\n"
+"\t${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/lib${PORTNAME}-${l}.so.0\n"
+".endfor\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5183
+msgid ""
+"Use man:file[1] on a file to determine if it has been stripped. Binaries "
+"are reported by man:file[1] as `stripped`, or `not stripped`. Additionally, "
+"man:strip[1] will detect programs that have already been stripped and exit "
+"cleanly."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5187
+msgid "When `WITH_DEBUG` is defined, elf files _must not_ be stripped."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5189
+msgid ""
+"The variables (`STRIP_CMD`, `INSTALL_PROGRAM`, `INSTALL_LIB`, ...) and "
+"crossref:uses[uses,`USES`] provided by the framework handle this "
+"automatically."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5191
+msgid ""
+"Some software, add `-s` to their `LDFLAGS`, in this case, either remove `-s` "
+"if `WITH_DEBUG` is set, or remove it unconditionally and use `STRIP_CMD` in "
+"`post-install`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5194
+#, no-wrap
+msgid "Installing a Whole Tree of Files"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5199
+msgid ""
+"Sometimes, a large number of files must be installed while preserving their "
+"hierarchical organization. For example, copying over a whole directory tree "
+"from `WRKSRC` to a target directory under `PREFIX`. Note that `PREFIX`, "
+"`EXAMPLESDIR`, `DATADIR`, and other path variables must always be prepended "
+"with `STAGEDIR` to respect staging (see crossref:special[staging,Staging])."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5204
+msgid ""
+"Two macros exist for this situation. The advantage of using these macros "
+"instead of `cp` is that they guarantee proper file ownership and permissions "
+"on target files. The first macro, `COPYTREE_BIN`, will set all the "
+"installed files to be executable, thus being suitable for installing into [."
+"filename]#PREFIX/bin#. The second macro, `COPYTREE_SHARE`, does not set "
+"executable permissions on files, and is therefore suitable for installing "
+"files under [.filename]#PREFIX/share# target."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5210
+#, no-wrap
+msgid ""
+"post-install:\n"
+"\t${MKDIR} ${STAGEDIR}${EXAMPLESDIR}\n"
+"\t(cd ${WRKSRC}/examples && ${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR})\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5213
+msgid ""
+"This example will install the contents of the [.filename]#examples# "
+"directory in the vendor distfile to the proper examples location of the port."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5219
+#, no-wrap
+msgid ""
+"post-install:\n"
+"\t${MKDIR} ${STAGEDIR}${DATADIR}/summer\n"
+"\t(cd ${WRKSRC}/temperatures && ${COPYTREE_SHARE} \"June July August\" ${STAGEDIR}${DATADIR}/summer)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5222
+msgid ""
+"And this example will install the data of summer months to the [."
+"filename]#summer# subdirectory of a [.filename]#DATADIR#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5225
+msgid ""
+"Additional `find` arguments can be passed via the third argument to "
+"`COPYTREE_*` macros. For example, to install all files from the first "
+"example except Makefiles, one can use these commands."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5232
+#, no-wrap
+msgid ""
+"post-install:\n"
+"\t${MKDIR} ${STAGEDIR}${EXAMPLESDIR}\n"
+"\t(cd ${WRKSRC}/examples && \\\n"
+"\t${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR} \"! -name Makefile\")\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5237
+msgid ""
+"These macros do not add the installed files to [.filename]#pkg-plist#. They "
+"must be added manually. For optional documentation (`PORTDOCS`, see "
+"<<install-documentation>>) and examples (`PORTEXAMPLES`), the `%%PORTDOCS%%` "
+"or `%%PORTEXAMPLES%%` prefixes must be prepended in [.filename]#pkg-plist#."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5239
+#, no-wrap
+msgid "Install Additional Documentation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5243
+msgid ""
+"If the software has some documentation other than the standard man and info "
+"pages that is useful for the user, install it under `DOCSDIR`. This can be "
+"done, like the previous item, in the `post-install` target."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5248
+msgid ""
+"Create a new directory for the port. The directory name is `DOCSDIR`. This "
+"usually equals `PORTNAME`. However, if the user might want different "
+"versions of the port to be installed at the same time, the whole `PKGNAME` "
+"can be used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5251
+msgid ""
+"Since only the files listed in [.filename]#pkg-plist# are installed, it is "
+"safe to always install documentation to `STAGEDIR` (see crossref:"
+"special[staging,Staging]). Hence `.if` blocks are only needed when the "
+"installed files are large enough to cause significant I/O overhead."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5257
+#, no-wrap
+msgid ""
+"post-install:\n"
+"\t${MKDIR} ${STAGEDIR}${DOCSDIR}\n"
+"\t${INSTALL_DATA} ${WRKSRC}/docs/xvdocs.ps ${STAGEDIR}${DOCSDIR}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5261
+msgid ""
+"On the other hand, if there is a DOCS option in the port, install the "
+"documentation in a `post-install-DOCS-on` target. These targets are "
+"described in <<options-targets>>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5263
+msgid ""
+"Here are some handy variables and how they are expanded by default when used "
+"in the [.filename]#Makefile#:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5265
+msgid "`DATADIR` gets expanded to [.filename]#PREFIX/share/PORTNAME#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5266
+msgid "`DATADIR_REL` gets expanded to [.filename]#share/PORTNAME#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5267
+msgid "`DOCSDIR` gets expanded to [.filename]#PREFIX/share/doc/PORTNAME#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5268
+msgid "`DOCSDIR_REL` gets expanded to [.filename]#share/doc/PORTNAME#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5269
+msgid ""
+"`EXAMPLESDIR` gets expanded to [.filename]#PREFIX/share/examples/PORTNAME#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5270
+msgid ""
+"`EXAMPLESDIR_REL` gets expanded to [.filename]#share/examples/PORTNAME#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5276
+msgid ""
+"The `DOCS` option only controls additional documentation installed in "
+"`DOCSDIR`. It does not apply to standard man pages and info pages. Things "
+"installed in `EXAMPLESDIR` are controlled by the `EXAMPLES` option."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5282
+msgid ""
+"These variables are exported to `PLIST_SUB`. Their values will appear there "
+"as pathnames relative to [.filename]#PREFIX# if possible. That is, [."
+"filename]#share/doc/PORTNAME# will be substituted for `%%DOCSDIR%%` in the "
+"packing list by default, and so on. (See more on [.filename]#pkg-plist# "
+"substitution crossref:plist[plist-sub,here].)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5284
+msgid ""
+"All conditionally installed documentation files and directories are included "
+"in [.filename]#pkg-plist# with the `%%PORTDOCS%%` prefix, for example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5289
+#, no-wrap
+msgid ""
+"%%PORTDOCS%%%%DOCSDIR%%/AUTHORS\n"
+"%%PORTDOCS%%%%DOCSDIR%%/CONTACT\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5298
+msgid ""
+"As an alternative to enumerating the documentation files in [.filename]#pkg-"
+"plist#, a port can set the variable `PORTDOCS` to a list of file names and "
+"shell glob patterns to add to the final packing list. The names will be "
+"relative to `DOCSDIR`. Therefore, a port that utilizes `PORTDOCS`, and uses "
+"a non-default location for its documentation, must set `DOCSDIR` "
+"accordingly. If a directory is listed in `PORTDOCS` or matched by a glob "
+"pattern from this variable, the entire subtree of contained files and "
+"directories will be registered in the final packing list. If the `DOCS` "
+"option has been unset then files and directories listed in `PORTDOCS` would "
+"not be installed or added to port packing list. Installing the "
+"documentation at `PORTDOCS` as shown above remains up to the port itself. A "
+"typical example of utilizing `PORTDOCS`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5302
+#, no-wrap
+msgid "PORTDOCS=\tREADME.* ChangeLog docs/*\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5307
+msgid ""
+"The equivalents of `PORTDOCS` for files installed under `DATADIR` and "
+"`EXAMPLESDIR` are `PORTDATA` and `PORTEXAMPLES`, respectively."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5311
+msgid ""
+"The contents of [.filename]#pkg-message# are displayed upon installation. "
+"See crossref:pkg-files[porting-message,the section on using [.filename]#pkg-"
+"message#] for details. [.filename]#pkg-message# does not need to be added "
+"to [.filename]#pkg-plist#."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5314
+#, no-wrap
+msgid "Subdirectories Under `PREFIX`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5323
+msgid ""
+"Try to let the port put things in the right subdirectories of `PREFIX`. "
+"Some ports lump everything and put it in the subdirectory with the port's "
+"name, which is incorrect. Also, many ports put everything except binaries, "
+"header files and manual pages in a subdirectory of [.filename]#lib#, which "
+"does not work well with the BSD paradigm. Many of the files must be moved "
+"to one of these directories: [.filename]#etc# (setup/configuration files), [."
+"filename]#libexec# (executables started internally), [.filename]#sbin# "
+"(executables for superusers/managers), [.filename]#info# (documentation for "
+"info browser) or [.filename]#share# (architecture independent files). See "
+"man:hier[7] for details; the rules governing [.filename]#/usr# pretty much "
+"apply to [.filename]#/usr/local# too. The exception are ports dealing with "
+"USENET \"news\". They may use [.filename]#PREFIX/news# as a destination for "
+"their files."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5325
+#, no-wrap
+msgid "Use `BINARY_ALIAS` to Rename Commands Instead of Patching the Build"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5328
+msgid ""
+"When `BINARY_ALIAS` is defined it will create symlinks of the given commands "
+"in a directory which will be prepended to `PATH`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5330
+msgid ""
+"Use it to substitute hardcoded commands the build phase relies on without "
+"having to patch any build files."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5332
+#, no-wrap
+msgid "Using `BINARY_ALIAS` to Make `gsed` Available as `sed`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5337
+msgid ""
+"Some ports expect `sed` to behave like GNU sed and use features that man:"
+"sed[1] does not provide. GNU sed is available from package:textproc/gsed[] "
+"on FreeBSD."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5339
+msgid ""
+"Use `BINARY_ALIAS` to substitute `sed` with `gsed` for the duration of the "
+"build:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5345
+#, no-wrap
+msgid ""
+"BUILD_DEPENDS=\tgsed:textproc/gsed\n"
+"...\n"
+"BINARY_ALIAS=\tsed=gsed\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5350
+#, no-wrap
+msgid "Using `BINARY_ALIAS` to Provide Aliases for Hardcoded `python3` Commands"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5355
+msgid ""
+"A port that has a hardcoded reference to `python3` in its build scripts will "
+"need to have it available in `PATH` at build time. Use `BINARY_ALIAS` to "
+"create an alias that points to the right Python 3 binary:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5361
+#, no-wrap
+msgid ""
+"USES=\tpython:3.4+,build\n"
+"...\n"
+"BINARY_ALIAS=\tpython3=${PYTHON_CMD}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5364
+msgid ""
+"See crossref:special[using-python,Using Python] for more information about "
+"`USES=python`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/makefiles/_index.adoc:5371
+msgid ""
+"Binary aliases are created after the dependencies provided via "
+"`BUILD_DEPENDS` and `LIB_DEPENDS` are processed and before the `configure` "
+"target. This leads to various limitations. For example, programs installed "
+"via `TEST_DEPENDS` cannot be used to create a binary alias as test "
+"dependencies specified this way are processed after binary aliases are "
+"created."
+msgstr ""
diff --git a/documentation/content/en/books/porters-handbook/new-port/_index.adoc b/documentation/content/en/books/porters-handbook/new-port/_index.adoc
index d693b85e24..ffa69798c1 100644
--- a/documentation/content/en/books/porters-handbook/new-port/_index.adoc
+++ b/documentation/content/en/books/porters-handbook/new-port/_index.adoc
@@ -6,7 +6,7 @@ description: How to make a new FreeBSD Port
tags: ["new port", "upgrading", "guidelines", "ports"]
showBookMenu: true
weight: 2
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/new-port/"
---
[[own-port]]
diff --git a/documentation/content/en/books/porters-handbook/new-port/_index.po b/documentation/content/en/books/porters-handbook/new-port/_index.po
new file mode 100644
index 0000000000..c1f2462f96
--- /dev/null
+++ b/documentation/content/en/books/porters-handbook/new-port/_index.po
@@ -0,0 +1,78 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:20-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/porters-handbook/new-port/_index.adoc:1
+#, no-wrap
+msgid "How to make a new FreeBSD Port"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/porters-handbook/new-port/_index.adoc:1
+#, no-wrap
+msgid "Chapter 2. Making a New Port"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/new-port/_index.adoc:13
+#, no-wrap
+msgid "Making a New Port"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/new-port/_index.adoc:51
+msgid "Interested in making a new port, or upgrading existing ports? Great!"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/new-port/_index.adoc:54
+msgid ""
+"What follows are some guidelines for creating a new port for FreeBSD. To "
+"upgrade an existing port, read this, then read crossref:upgrading[preamble,"
+"Upgrading a Port]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/new-port/_index.adoc:58
+msgid ""
+"When this document is not sufficiently detailed, refer to [.filename]#/usr/"
+"ports/Mk/bsd.port.mk#, which is included by all port [."
+"filename]#Makefiles#. Even those not hacking [.filename]##Makefile##s daily "
+"can gain much knowledge from it. Additionally, specific questions can be "
+"sent to the {freebsd-ports}."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/new-port/_index.adoc:65
+msgid ""
+"Only a fraction of the variables (`_VAR_`) that can be overridden are "
+"mentioned in this document. Most (if not all) are documented at the start "
+"of [.filename]#/usr/ports/Mk/bsd.port.mk#; the others probably ought to be. "
+"Note that this file uses a non-standard tab setting: Emacs and Vim will "
+"recognize the setting on loading the file. Both man:vi[1] and man:ex[1] can "
+"be set to use the correct value by typing `:set tabstop=4` once the file has "
+"been loaded."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/new-port/_index.adoc:67
+msgid ""
+"Looking for something easy to start with? Take a look at the https://wiki."
+"freebsd.org/WantedPorts[list of requested ports] and see if you can work on "
+"one (or more)."
+msgstr ""
diff --git a/documentation/content/en/books/porters-handbook/order/_index.adoc b/documentation/content/en/books/porters-handbook/order/_index.adoc
index 057119bed6..ccbf9f7784 100644
--- a/documentation/content/en/books/porters-handbook/order/_index.adoc
+++ b/documentation/content/en/books/porters-handbook/order/_index.adoc
@@ -6,7 +6,7 @@ description: Order of Variables in FreeBSD Port Makefiles
tags: ["order", "PORTNAME", "PATCHFILES", "MAINTAINER", "LICENSE", "dependencies", "USES"]
showBookMenu: true
weight: 15
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/order/"
---
[[porting-order]]
@@ -112,6 +112,7 @@ The variables are:
* crossref:makefiles[makefile-maintainer,`MAINTAINER`]
* crossref:makefiles[makefile-comment,`COMMENT`]
+* crossref:makefiles[makefile-www,`WWW`]
[[porting-order-license]]
== `LICENSE` Block
diff --git a/documentation/content/en/books/porters-handbook/order/_index.po b/documentation/content/en/books/porters-handbook/order/_index.po
new file mode 100644
index 0000000000..622fba59b8
--- /dev/null
+++ b/documentation/content/en/books/porters-handbook/order/_index.po
@@ -0,0 +1,674 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-09-09 20:51-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:1
+#, no-wrap
+msgid "Order of Variables in FreeBSD Port Makefiles"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:1
+#, no-wrap
+msgid "Chapter 15. Order of Variables in Port Makefiles"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:13
+#, no-wrap
+msgid "Order of Variables in Port Makefiles"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:52
+msgid ""
+"The first sections of the [.filename]#Makefile# must always come in the same "
+"order. This standard makes it so everyone can easily read any port without "
+"having to search for variables in a random order."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:57
+msgid ""
+"The sections and variables described here are mandatory in a ordinary port. "
+"In a slave port, many sections and variables can be skipped."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:62
+msgid ""
+"Each following block must be separated from the previous block by a single "
+"blank line."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:65
+msgid ""
+"In the following blocks, only set the variables that are required by the "
+"port. Define these variables in the order they are shown here."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:68
+#, no-wrap
+msgid "`PORTNAME` Block"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:72
+msgid ""
+"This block is the most important. It defines the port name, version, "
+"distribution file location, and category. The variables must be in this "
+"order:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:74
+msgid "crossref:makefiles[makefile-portname,`PORTNAME`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:75
+msgid ""
+"crossref:makefiles[makefile-versions,`PORTVERSION`][<<portversion-footnote, "
+"1>>]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:76
+msgid "crossref:makefiles[makefile-versions,`DISTVERSIONPREFIX`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:77
+msgid ""
+"crossref:makefiles[makefile-versions,`DISTVERSION`][<<portversion-footnote, "
+"1>>]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:78
+msgid "crossref:makefiles[makefile-versions,`DISTVERSIONSUFFIX`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:79
+msgid "crossref:makefiles[makefile-portrevision,`PORTREVISION`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:80
+msgid "crossref:makefiles[makefile-portepoch,`PORTEPOCH`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:81
+msgid "crossref:makefiles[makefile-categories,`CATEGORIES`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:82
+msgid "crossref:makefiles[makefile-master_sites,`MASTER_SITES`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:83
+msgid ""
+"crossref:makefiles[makefile-master_sites-shorthand,`MASTER_SITE_SUBDIR`] "
+"(deprecated)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:84
+msgid "crossref:makefiles[porting-pkgnameprefix-suffix,`PKGNAMEPREFIX`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:85
+msgid "crossref:makefiles[porting-pkgnameprefix-suffix,`PKGNAMESUFFIX`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:86
+msgid "crossref:makefiles[makefile-distname,`DISTNAME`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:87
+msgid "crossref:makefiles[makefile-extract_sufx,`EXTRACT_SUFX`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:88
+msgid "crossref:makefiles[makefile-distfiles-definition,`DISTFILES`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:89
+msgid "crossref:makefiles[makefile-dist_subdir,`DIST_SUBDIR`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:90
+msgid "crossref:makefiles[makefile-extract_only,`EXTRACT_ONLY`]"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:95
+msgid "Only one of PORTVERSION and DISTVERSION can be used."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:98
+#, no-wrap
+msgid "`PATCHFILES` Block"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:102
+msgid "This block is optional. The variables are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:104
+msgid "crossref:makefiles[porting-patchfiles,`PATCH_SITES`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:105
+msgid "crossref:makefiles[porting-patchfiles,`PATCHFILES`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:106
+msgid "crossref:makefiles[porting-patchfiles,`PATCH_DIST_STRIP`]"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:108
+#, no-wrap
+msgid "`MAINTAINER` Block"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:112
+msgid "This block is mandatory. The variables are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:114
+msgid "crossref:makefiles[makefile-maintainer,`MAINTAINER`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:115
+msgid "crossref:makefiles[makefile-comment,`COMMENT`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:116
+msgid "crossref:makefiles[makefile-www,`WWW`]"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:118
+#, no-wrap
+msgid "`LICENSE` Block"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:122
+msgid ""
+"This block is optional, although it is highly recommended. The variables "
+"are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:124
+msgid "crossref:makefiles[licenses-license,`LICENSE`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:125
+msgid "crossref:makefiles[licenses-license_comb,`LICENSE_COMB`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:126
+msgid ""
+"crossref:makefiles[licenses-license_groups,`LICENSE_GROUPS`] or "
+"`LICENSE_GROUPS_NAME`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:127
+msgid ""
+"crossref:makefiles[licenses-license_name,`LICENSE_NAME`] or "
+"`LICENSE_NAME_NAME`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:128
+msgid ""
+"crossref:makefiles[licenses-license_text,`LICENSE_TEXT`] or "
+"`LICENSE_TEXT_NAME`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:129
+msgid ""
+"crossref:makefiles[licenses-license_file,`LICENSE_FILE`] or "
+"`LICENSE_FILE_NAME`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:130
+msgid ""
+"crossref:makefiles[licenses-license_perms,`LICENSE_PERMS`] or "
+"`LICENSE_PERMS_NAME_`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:131
+msgid ""
+"crossref:makefiles[licenses-license_distfiles,`LICENSE_DISTFILES`] or "
+"`LICENSE_DISTFILES_NAME`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:133
+msgid ""
+"If there are multiple licenses, sort the different LICENSE_VAR_NAME "
+"variables by license name."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:135
+#, no-wrap
+msgid "Generic `BROKEN`/`IGNORE`/`DEPRECATED` Messages"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:138
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:164
+msgid "This block is optional. The variables are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:140
+msgid "crossref:porting-dads[dads-deprecated,`DEPRECATED`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:141
+msgid "crossref:porting-dads[dads-deprecated,`EXPIRATION_DATE`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:142
+msgid "crossref:porting-dads[dads-noinstall,`FORBIDDEN`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:143
+msgid "crossref:porting-dads[dads-noinstall,`BROKEN`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:144
+msgid "crossref:porting-dads[dads-noinstall,`BROKEN_*`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:145
+msgid "crossref:porting-dads[dads-noinstall,`IGNORE`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:146
+msgid "crossref:porting-dads[dads-noinstall,`IGNORE_*`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:147
+msgid "crossref:porting-dads[dads-noinstall,`ONLY_FOR_ARCHS`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:148
+msgid "crossref:porting-dads[dads-noinstall,`ONLY_FOR_ARCHS_REASON*`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:149
+msgid "crossref:porting-dads[dads-noinstall,`NOT_FOR_ARCHS`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:150
+msgid "crossref:porting-dads[dads-noinstall,`NOT_FOR_ARCHS_REASON*`]"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:156
+msgid ""
+"`BROKEN_*` and `IGNORE_*` can be any generic variables, for example, "
+"`IGNORE_amd64`, `BROKEN_FreeBSD_10`, etc. With the exception of variables "
+"that depend on a crossref:uses[uses,`USES`], place those in <<porting-order-"
+"uses>>. For instance, `IGNORE_WITH_PHP` only works if crossref:uses[xuses-"
+"php,`php`] is set, and `BROKEN_SSL` only if crossref:uses[uses-ssl,`ssl`] is "
+"set."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:158
+msgid ""
+"If the port is marked BROKEN when some conditions are met, and such "
+"conditions can only be tested after including [.filename]#bsd.port.options."
+"mk# or [.filename]#bsd.port.pre.mk#, then those variables should be set "
+"later, in <<porting-order-rest>>."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:161
+#, no-wrap
+msgid "The Dependencies Block"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:166
+msgid "crossref:makefiles[makefile-fetch_depends,`FETCH_DEPENDS`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:167
+msgid "crossref:makefiles[makefile-extract_depends,`EXTRACT_DEPENDS`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:168
+msgid "crossref:makefiles[makefile-patch_depends,`PATCH_DEPENDS`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:169
+msgid "crossref:makefiles[makefile-build_depends,`BUILD_DEPENDS`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:170
+msgid "crossref:makefiles[makefile-lib_depends,`LIB_DEPENDS`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:171
+msgid "crossref:makefiles[makefile-run_depends,`RUN_DEPENDS`]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:172
+msgid "`TEST_DEPENDS`"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:174
+#, no-wrap
+msgid "Flavors"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:177
+msgid "This block is optional."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:181
+msgid ""
+"Start this section with defining `FLAVORS`. Continue with the possible "
+"Flavors helpers. See crossref:flavors[flavors-using,Using FLAVORS] for more "
+"Information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:183
+msgid ""
+"Constructs setting variables not available as helpers using `.if ${FLAVOR:U} "
+"== foo` should go in their respective sections below."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:185
+#, no-wrap
+msgid "`USES` and `USE_x`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:188
+msgid "Start this section with defining `USES`, and then possible `USE_x`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:191
+msgid ""
+"Keep related variables close together. For example, if using crossref:"
+"makefiles[makefile-master_sites-github,`USE_GITHUB`], always put the `GH_*` "
+"variables right after it."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:193
+#, no-wrap
+msgid "Standard bsd.port.mk Variables"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:196
+msgid ""
+"This section block is for variables that can be defined in [.filename]#bsd."
+"port.mk# that do not belong in any of the previous section blocks."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:201
+msgid ""
+"Order is not important, however try to keep similar variables together. For "
+"example uid and gid variables `USERS` and `GROUPS`. Configuration variables "
+"`CONFIGURE_*` and `*_CONFIGURE`. List of files, and directories `PORTDOCS` "
+"and `PORTEXAMPLES`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:203
+#, no-wrap
+msgid "Options and Helpers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:208
+msgid ""
+"If the port uses the crossref:makefiles[makefile-options,options framework], "
+"define `OPTIONS_DEFINE` and `OPTIONS_DEFAULT` first, then the other "
+"`OPTIONS_*` variables first, then the `*_DESC` descriptions, then the "
+"options helpers. Try and sort all of those alphabetically."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:210
+#, no-wrap
+msgid "Options Variables Order Example"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:217
+msgid ""
+"The `FOO` and `BAR` options do not have a standard description, so one need "
+"to be written. The other options already have one in [.filename]#Mk/bsd."
+"options.desc.mk# so writing one is not needed. The `DOCS` and `EXAMPLES` "
+"use target helpers to install their files, they are shown here for "
+"completeness, though they belong in <<porting-order-targets>>, so other "
+"variables and targets could be inserted before them."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:225
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tDOCS EXAMPLES FOO BAR\n"
+"OPTIONS_DEFAULT=\tFOO\n"
+"OPTIONS_RADIO=\tSSL\n"
+"OPTIONS_RADIO_SSL= OPENSSL GNUTLS\n"
+"OPTIONS_SUB=\tyes\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:228
+#, no-wrap
+msgid ""
+"BAR_DESC=\t\tEnable bar support\n"
+"FOO_DESC=\t\tEnable foo support\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:233
+#, no-wrap
+msgid ""
+"BAR_CONFIGURE_WITH=\tbar=${LOCALBASE}\n"
+"FOO_CONFIGURE_ENABLE=\tfoo\n"
+"GNUTLS_CONFIGURE_ON=\t--with-ssl=gnutls\n"
+"OPENSSL_CONFIGURE_ON=\t--with-ssl=openssl\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:237
+#, no-wrap
+msgid ""
+"post-install-DOCS-on:\n"
+" ${MKDIR} ${STAGEDIR}${DOCSDIR}\n"
+" cd ${WRKSRC}/doc && ${COPYTREE_SHARE} . ${STAGEDIR}${DOCSDIR}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:241
+#, no-wrap
+msgid ""
+"post-install-EXAMPLES-on:\n"
+" ${MKDIR} ${STAGEDIR}${EXAMPLESDIR}\n"
+" cd ${WRKSRC}/ex && ${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR}\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:246
+#, no-wrap
+msgid "The Rest of the Variables"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:249
+msgid ""
+"And then, the rest of the variables that are not mentioned in the previous "
+"blocks."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:251
+#, no-wrap
+msgid "The Targets"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:255
+msgid ""
+"After all the variables are defined, the optional man:make[1] targets can be "
+"defined. Keep `pre-*` before `post-*` and in the same order as the "
+"different stages run:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:257
+msgid "`fetch`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:258
+msgid "`extract`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:259
+msgid "`patch`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:260
+msgid "`configure`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:261
+msgid "`build`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:262
+msgid "`install`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:263
+msgid "`test`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:268
+msgid ""
+"When using options helpers target keep them alphabetically sorted, but keep "
+"the `*-on` before the `*-off`. When also using the main target, keep the "
+"main target before the optional ones:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:273
+#, no-wrap
+msgid ""
+"post-install:\n"
+"\t# install generic bits\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:276
+#, no-wrap
+msgid ""
+"post-install-DOCS-on:\n"
+"\t# Install documentation\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:279
+#, no-wrap
+msgid ""
+"post-install-X11-on:\n"
+"\t# Install X11 related bits\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/order/_index.adoc:282
+#, no-wrap
+msgid ""
+"post-install-X11-off:\n"
+"\t# Install bits that should be there if X11 is disabled\n"
+msgstr ""
diff --git a/documentation/content/en/books/porters-handbook/pkg-files/_index.adoc b/documentation/content/en/books/porters-handbook/pkg-files/_index.adoc
index 969e0b9f43..3ec1d91745 100644
--- a/documentation/content/en/books/porters-handbook/pkg-files/_index.adoc
+++ b/documentation/content/en/books/porters-handbook/pkg-files/_index.adoc
@@ -6,7 +6,7 @@ description: Tricks about the pkg-* files
tags: ["pkg", "pkg-message", "UCL", "pkg-install", "pkg-deinstall"]
showBookMenu: true
weight: 9
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/pkg-files/"
---
[[pkg-files]]
@@ -61,6 +61,9 @@ This capability is often useful to display additional installation steps to be t
* Setup information should only be shown on initial install. Upgrade instructions should be shown only when upgrading from the relevant version.
* Do not surround the messages with either whitespace or lines of symbols (like `----------`, `**********`, or `==========`). Leave the formatting to man:pkg[8].
* Committers have blanket approval to constrain existing messages to install or upgrade ranges using the UCL format specifications.
+* Please be sure to refer to the proper tools for handling services.
+** Use `service name start` to start a service rather than using `/usr/local/etc/rc.d/name start`
+** Use `sysrc name_enable=YES` to change options in rc.conf
====
@@ -99,7 +102,7 @@ Display if upgrading from a version strictly lower than the version specified.
`minimum_version`::
Only if `type` is `upgrade`.
-Display if upgrading from a version stictly greater than the version specified.
+Display if upgrading from a version strictly greater than the version specified.
The `maximum_version` and `minimum_version` keywords can be combined.
@@ -223,34 +226,55 @@ Most of the time it is by using `maximum_version` to limit its usage to upgrades
====
[[pkg-install]]
-== pkg-install
+== pkg-install, pkg-pre-install, and pkg-post-install
If the port needs to execute commands when the binary package is installed with `pkg add` or `pkg install`, use [.filename]#pkg-install#.
-This script will automatically be added to the package.
-It will be run twice by `pkg`, the first time as `${SH} pkg-install ${PKGNAME} PRE-INSTALL` before the package is installed, and the second time as `${SH} pkg-install ${PKGNAME} POST-INSTALL` after it has been installed.
+It is run twice by `pkg`, the first time as `${SH} pkg-install ${PKGNAME} PRE-INSTALL` before the package is installed, and the second time as `${SH} pkg-install ${PKGNAME} POST-INSTALL` after it has been installed.
`$2` can be tested to determine which mode the script is being run in.
-The `PKG_PREFIX` environmental variable will be set to the package installation directory.
+The `PKG_PREFIX` environment variable is set to the package installation directory.
+
+If using [.filename]#pkg-pre-install# or [.filename]#pkg-post-install# instead, the script is run only once (before or after installing the package), with the single argument `${PKGNAME}`.
+Using [.filename]#pkg-pre-install.lua# or [.filename]#pkg-post-install.lua# will run a lua script instead of a shell script.
+Lua scripts run by `pkg` provide some extensions and a few restrictions, both explained in man:pkg-lua-script[5].
+
+[NOTE]
+====
+Using [.filename]#pkg-pre-install# (or [.filename]#pkg-pre-install.lua#) and [.filename]#pkg-post-install# (or [.filename]#pkg-post-install.lua#) is preferred to using [.filename]#pkg-install#.
+====
+
+These scripts are automatically added to the packing list.
[IMPORTANT]
====
-This script is here to help you set up the package so that it is as ready to use as possible.
-It _must not_ be abused to start services, stop services, or run any other commands that will modify the currently running system.
+These scripts are here to simplify package configuration after installation.
+They _must not_ be abused to start services, stop services, or run any other commands that will modify the currently running system.
====
[[pkg-deinstall]]
-== pkg-deinstall
+== pkg-deinstall, pkg-pre-deinstall, and pkg-post-deinstall
-This script executes when a package is removed.
+These scripts execute when a package is removed.
-This script will be run twice by `pkg delete`.
+The [.filename]#pkg-deinstall# script is run twice by `pkg delete`.
The first time as `${SH} pkg-deinstall ${PKGNAME} DEINSTALL` before the port is de-installed and the second time as `${SH} pkg-deinstall ${PKGNAME} POST-DEINSTALL` after the port has been de-installed.
`$2` can be tested to determine which mode the script is being run in.
-The `PKG_PREFIX` environmental variable will be set to the package installation directory
+The `PKG_PREFIX` environment variable is set to the package installation directory.
+
+If using [.filename]#pkg-pre-deinstall# or [.filename]#pkg-post-deinstall# instead, the script is run only once (before or after deinstalling the package), with the single argument `${PKGNAME}`.
+Using [.filename]#pkg-pre-deinstall.lua# or [.filename]#pkg-post-deinstall.lua# will run a lua script instead of a shell script.
+Lua scripts run by `pkg` provide some extensions and a few restrictions, both explained in man:pkg-lua-script[5].
+
+[NOTE]
+====
+Using [.filename]#pkg-pre-deinstall# (or [.filename]#pkg-pre-deinstall.lua#) and [.filename]#pkg-post-deinstall# (or [.filename]#pkg-post-deinstall.lua#) is preferred to using [.filename]#pkg-deinstall#.
+====
+
+These scripts are automatically added to the packing list.
[IMPORTANT]
====
-This script is here to help you set up the package so that it is as ready to use as possible.
-It _must not_ be abused to start services, stop services, or run any other commands that will modify the currently running system.
+These scripts are here to simplify cleanup after package deinstallation.
+They _must not_ be abused to start services, stop services, or run any other commands that will modify the currently running system.
====
[[pkg-names]]
@@ -278,9 +302,21 @@ Here is a list of variable names and their default values.
|`PKGINSTALL`
|`${PKGDIR}/pkg-install`
+|`PKGPREINSTALL`
+|`${PKGDIR}/pkg-pre-install`
+
+|`PKGPOSTINSTALL`
+|`${PKGDIR}/pkg-post-install`
+
|`PKGDEINSTALL`
|`${PKGDIR}/pkg-deinstall`
+|`PKGPREDEINSTALL`
+|`${PKGDIR}/pkg-pre-deinstall`
+
+|`PKGPOSTDEINSTALL`
+|`${PKGDIR}/pkg-post-deinstall`
+
|`PKGMESSAGE`
|`${PKGDIR}/pkg-message`
|===
diff --git a/documentation/content/en/books/porters-handbook/pkg-files/_index.po b/documentation/content/en/books/porters-handbook/pkg-files/_index.po
new file mode 100644
index 0000000000..0b01f71f10
--- /dev/null
+++ b/documentation/content/en/books/porters-handbook/pkg-files/_index.po
@@ -0,0 +1,698 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-06-19 21:08-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:1
+#, no-wrap
+msgid "Tricks about the pkg-* files"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:1
+#, no-wrap
+msgid "Chapter 9. pkg-*"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:13
+#, no-wrap
+msgid "pkg-*"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:51
+msgid ""
+"There are some tricks we have not mentioned yet about the [.filename]#pkg-*# "
+"files that come in handy sometimes."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:53
+#, no-wrap
+msgid "pkg-message"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:57
+msgid ""
+"To display a message when the package is installed, place the message in [."
+"filename]#pkg-message#. This capability is often useful to display "
+"additional installation steps to be taken after a `pkg install` or `pkg "
+"upgrade`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:61
+msgid ""
+"[.filename]#pkg-message# must contain only information that is _vital_ to "
+"setup and operation on FreeBSD, and that is unique to the port in question."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:62
+msgid ""
+"Setup information should only be shown on initial install. Upgrade "
+"instructions should be shown only when upgrading from the relevant version."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:63
+msgid ""
+"Do not surround the messages with either whitespace or lines of symbols "
+"(like `----------`, `**********`, or `==========`). Leave the formatting to "
+"man:pkg[8]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:64
+msgid ""
+"Committers have blanket approval to constrain existing messages to install "
+"or upgrade ranges using the UCL format specifications."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:65
+msgid "Please be sure to refer to the proper tools for handling services."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:66
+msgid ""
+"Use `service name start` to start a service rather than using `/usr/local/"
+"etc/rc.d/name start`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:67
+msgid "Use `sysrc name_enable=YES` to change options in rc.conf"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:71
+msgid "pkg-message supports two formats:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:72
+#, no-wrap
+msgid "raw"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:75
+msgid "A regular plain text file. Its message is only displayed on install."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:76
+#, no-wrap
+msgid "UCL"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:79
+msgid ""
+"If the file starts with \"`[`\" then it is considered to be a UCL file. The "
+"UCL format is described on https://github.com/vstakhov/libucl[libucl's "
+"GitHub page]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:83
+msgid ""
+"Do not add an entry for [.filename]#pkg-message# in [.filename]#pkg-plist#."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:86
+#, no-wrap
+msgid "UCL in pkg-message"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:91
+msgid ""
+"The format is the following. It should be an array of objects. The objects "
+"themselves can have these keywords:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:92
+#, no-wrap
+msgid "`message`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:95
+msgid "The actual message to be displayed. This keyword is mandatory."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:96
+#, no-wrap
+msgid "`type`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:98
+msgid "When the message should be displayed."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:99
+#, no-wrap
+msgid "`maximum_version`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:102
+msgid ""
+"Only if `type` is `upgrade`. Display if upgrading from a version strictly "
+"lower than the version specified."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:103
+#, no-wrap
+msgid "`minimum_version`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:106
+msgid ""
+"Only if `type` is `upgrade`. Display if upgrading from a version strictly "
+"greater than the version specified."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:108
+msgid "The `maximum_version` and `minimum_version` keywords can be combined."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:110
+msgid "The `type` keyword can have three values:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:111
+#, no-wrap
+msgid "`install`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:113
+msgid "The message should only be displayed when the package is installed."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:114
+#, no-wrap
+msgid "`remove`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:116
+msgid "The message should only be displayed when the package is removed."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:117
+#, no-wrap
+msgid "`upgrade`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:119
+msgid "the message should only be displayed during an upgrade of the package.."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:124
+msgid ""
+"To preserve the compatibility with non UCL [.filename]#pkg-message# files, "
+"the first line of a UCL [.filename]#pkg-message# _MUST be_ a single \"`[`\", "
+"and the last line _MUST be_ a single \"`]`\"."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:127
+#, no-wrap
+msgid "UCL Short Strings"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:132
+msgid ""
+"The message is delimited by double quotes `\"`, this is used for simple "
+"single line strings:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:140
+#, no-wrap
+msgid ""
+"[\n"
+"{ type: install\n"
+" message: \"Simple message\"\n"
+"}\n"
+"]\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:145
+#, no-wrap
+msgid "UCL Multiline Strings"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:153
+msgid ""
+"Multiline strings use the standard here document notation. The multiline "
+"delimiter _must_ start just after `<<` symbols without any whitespace and it "
+"_must_ consist of capital letters only. To finish a multiline string, add "
+"the delimiter string on a line of its own without any whitespace. The "
+"message from <<porting-message-ucl-short-ex>> can be written as:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:163
+#, no-wrap
+msgid ""
+"[\n"
+"{ type: install\n"
+" message: <<EOM\n"
+"Simple message\n"
+"EOM\n"
+"}\n"
+"]\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:168
+#, no-wrap
+msgid "Display a Message on Install/Deinstall"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:173
+msgid ""
+"When a message only needs to be displayed on installation or uninstallation, "
+"set the type:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:183
+#, no-wrap
+msgid ""
+"[\n"
+"{\n"
+" type: remove\n"
+" message: \"package being removed.\"\n"
+"}\n"
+"{ type: install, message: \"package being installed.\"}\n"
+"]\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:188
+#, no-wrap
+msgid "Display a Message on Upgrade"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:193
+msgid ""
+"When a port is upgraded, the message displayed can be even more tailored to "
+"the port's needs."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:218
+#, no-wrap
+msgid ""
+"[\n"
+"{\n"
+" type: upgrade\n"
+" message: \"Package is being upgraded.\"\n"
+"}\n"
+"{\n"
+" type: upgrade\n"
+" maximum_version: \"1.0\"\n"
+" message: \"Upgrading from before 1.0 need to do this.\"\n"
+"}\n"
+"{\n"
+" type: upgrade\n"
+" minimum_version: \"1.0\"\n"
+" message: \"Upgrading from after 1.0 should do that.\"\n"
+"}\n"
+"{\n"
+" type: upgrade\n"
+" maximum_version: \"3.0\"\n"
+" minimum_version: \"1.0\"\n"
+" message: \"Upgrading from > 1.0 and < 3.0 remove that file.\"\n"
+"}\n"
+"]\n"
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:224
+msgid ""
+"When displaying a message on upgrade, it is important to limit when it is "
+"being shown to the user. Most of the time it is by using `maximum_version` "
+"to limit its usage to upgrades from before a certain version when something "
+"specific needs to be done."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:229
+#, no-wrap
+msgid "pkg-install, pkg-pre-install, and pkg-post-install"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:235
+msgid ""
+"If the port needs to execute commands when the binary package is installed "
+"with `pkg add` or `pkg install`, use [.filename]#pkg-install#. It is run "
+"twice by `pkg`, the first time as `${SH} pkg-install ${PKGNAME} PRE-INSTALL` "
+"before the package is installed, and the second time as `${SH} pkg-install "
+"${PKGNAME} POST-INSTALL` after it has been installed. `$2` can be tested to "
+"determine which mode the script is being run in. The `PKG_PREFIX` "
+"environment variable is set to the package installation directory."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:239
+msgid ""
+"If using [.filename]#pkg-pre-install# or [.filename]#pkg-post-install# "
+"instead, the script is run only once (before or after installing the "
+"package), with the single argument `${PKGNAME}`. Using [.filename]#pkg-pre-"
+"install.lua# or [.filename]#pkg-post-install.lua# will run a lua script "
+"instead of a shell script. Lua scripts run by `pkg` provide some extensions "
+"and a few restrictions, both explained in man:pkg-lua-script[5]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:243
+msgid ""
+"Using [.filename]#pkg-pre-install# (or [.filename]#pkg-pre-install.lua#) and "
+"[.filename]#pkg-post-install# (or [.filename]#pkg-post-install.lua#) is "
+"preferred to using [.filename]#pkg-install#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:246
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:273
+msgid "These scripts are automatically added to the packing list."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:251
+msgid ""
+"These scripts are here to simplify package configuration after "
+"installation. They _must not_ be abused to start services, stop services, "
+"or run any other commands that will modify the currently running system."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:254
+#, no-wrap
+msgid "pkg-deinstall, pkg-pre-deinstall, and pkg-post-deinstall"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:257
+msgid "These scripts execute when a package is removed."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:262
+msgid ""
+"The [.filename]#pkg-deinstall# script is run twice by `pkg delete`. The "
+"first time as `${SH} pkg-deinstall ${PKGNAME} DEINSTALL` before the port is "
+"de-installed and the second time as `${SH} pkg-deinstall ${PKGNAME} POST-"
+"DEINSTALL` after the port has been de-installed. `$2` can be tested to "
+"determine which mode the script is being run in. The `PKG_PREFIX` "
+"environment variable is set to the package installation directory."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:266
+msgid ""
+"If using [.filename]#pkg-pre-deinstall# or [.filename]#pkg-post-deinstall# "
+"instead, the script is run only once (before or after deinstalling the "
+"package), with the single argument `${PKGNAME}`. Using [.filename]#pkg-pre-"
+"deinstall.lua# or [.filename]#pkg-post-deinstall.lua# will run a lua script "
+"instead of a shell script. Lua scripts run by `pkg` provide some extensions "
+"and a few restrictions, both explained in man:pkg-lua-script[5]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:270
+msgid ""
+"Using [.filename]#pkg-pre-deinstall# (or [.filename]#pkg-pre-deinstall.lua#) "
+"and [.filename]#pkg-post-deinstall# (or [.filename]#pkg-post-deinstall.lua#) "
+"is preferred to using [.filename]#pkg-deinstall#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:278
+msgid ""
+"These scripts are here to simplify cleanup after package deinstallation. "
+"They _must not_ be abused to start services, stop services, or run any other "
+"commands that will modify the currently running system."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:281
+#, no-wrap
+msgid "Changing the Names of pkg-*"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:286
+msgid ""
+"All the names of [.filename]#pkg-\\*# are defined using variables that can "
+"be changed in the [.filename]#Makefile# if needed. This is especially "
+"useful when sharing the same [.filename]#pkg-*# files among several ports or "
+"when it is necessary to write to one of these files. See crossref:porting-"
+"dads[porting-wrkdir,writing to places other than `WRKDIR`] for why it is a "
+"bad idea to write directly into the directory containing the [.filename]#pkg-"
+"*# files."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:289
+msgid ""
+"Here is a list of variable names and their default values. (`PKGDIR` "
+"defaults to `${MASTERDIR}`.)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:294
+#, no-wrap
+msgid "Variable"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:296
+#, no-wrap
+msgid "Default value"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:297
+#, no-wrap
+msgid "`DESCR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:299
+#, no-wrap
+msgid "`${PKGDIR}/pkg-descr`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:300
+#, no-wrap
+msgid "`PLIST`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:302
+#, no-wrap
+msgid "`${PKGDIR}/pkg-plist`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:303
+#, no-wrap
+msgid "`PKGINSTALL`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:305
+#, no-wrap
+msgid "`${PKGDIR}/pkg-install`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:306
+#, no-wrap
+msgid "`PKGPREINSTALL`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:308
+#, no-wrap
+msgid "`${PKGDIR}/pkg-pre-install`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:309
+#, no-wrap
+msgid "`PKGPOSTINSTALL`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:311
+#, no-wrap
+msgid "`${PKGDIR}/pkg-post-install`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:312
+#, no-wrap
+msgid "`PKGDEINSTALL`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:314
+#, no-wrap
+msgid "`${PKGDIR}/pkg-deinstall`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:315
+#, no-wrap
+msgid "`PKGPREDEINSTALL`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:317
+#, no-wrap
+msgid "`${PKGDIR}/pkg-pre-deinstall`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:318
+#, no-wrap
+msgid "`PKGPOSTDEINSTALL`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:320
+#, no-wrap
+msgid "`${PKGDIR}/pkg-post-deinstall`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:321
+#, no-wrap
+msgid "`PKGMESSAGE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:322
+#, no-wrap
+msgid "`${PKGDIR}/pkg-message`"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:325
+#, no-wrap
+msgid "Making Use of `SUB_FILES` and `SUB_LIST`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:328
+msgid ""
+"`SUB_FILES` and `SUB_LIST` are useful for dynamic values in port files, such "
+"as the installation `PREFIX` in [.filename]#pkg-message#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:334
+msgid ""
+"`SUB_FILES` specifies a list of files to be automatically modified. Each [."
+"filename]#file# in the `SUB_FILES` list must have a corresponding [."
+"filename]#file.in# present in `FILESDIR`. A modified version will be "
+"created as [.filename]#${WRKDIR}/file#. Files defined as a value of "
+"`USE_RC_SUBR` are automatically added to `SUB_FILES`. For the files [."
+"filename]#pkg-message#, [.filename]#pkg-install#, and [.filename]#pkg-"
+"deinstall#, the corresponding Makefile variable is automatically set to "
+"point to the processed version."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:339
+msgid ""
+"`SUB_LIST` is a list of `VAR=VALUE` pairs. For each pair, `%%VAR%%` will be "
+"replaced with `VALUE` in each file listed in `SUB_FILES`. Several common "
+"pairs are automatically defined: `PREFIX`, `LOCALBASE`, `DATADIR`, "
+"`DOCSDIR`, `EXAMPLESDIR`, `WWWDIR`, and `ETCDIR`. Any line beginning with "
+"`@comment` followed by a space, will be deleted from resulting files after a "
+"variable substitution."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:341
+msgid ""
+"This example replaces `%%ARCH%%` with the system architecture in a [."
+"filename]#pkg-message#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:346
+#, no-wrap
+msgid ""
+"SUB_FILES=\tpkg-message\n"
+"SUB_LIST=\tARCH=${ARCH}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:349
+msgid ""
+"Note that for this example, [.filename]#pkg-message.in# must exist in "
+"`FILESDIR`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:351
+msgid "Example of a good [.filename]#pkg-message.in#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/pkg-files/_index.adoc:357
+#, no-wrap
+msgid ""
+"Now it is time to configure this package.\n"
+"Copy %%PREFIX%%/shared/examples/putsy/%%ARCH%%.conf into your home directory\n"
+"as .putsy.conf and edit it.\n"
+msgstr ""
diff --git a/documentation/content/en/books/porters-handbook/plist/_index.adoc b/documentation/content/en/books/porters-handbook/plist/_index.adoc
index aa027f16c7..3472f3ae95 100644
--- a/documentation/content/en/books/porters-handbook/plist/_index.adoc
+++ b/documentation/content/en/books/porters-handbook/plist/_index.adoc
@@ -6,7 +6,7 @@ description: Advanced pkg-plist Practices
tags: ["pkg-plist", "practices", "configuration"]
showBookMenu: true
weight: 8
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/plist/"
---
[[plist]]
@@ -248,6 +248,7 @@ PKGNAMEPREFIX= p5-
MAINTAINER= perl@FreeBSD.org
COMMENT= Building machine
+WWW= https://search.cpan.org/dist/Machine-Build
USES= perl5
USE_PERL5= configure
diff --git a/documentation/content/en/books/porters-handbook/plist/_index.po b/documentation/content/en/books/porters-handbook/plist/_index.po
new file mode 100644
index 0000000000..0ae676c925
--- /dev/null
+++ b/documentation/content/en/books/porters-handbook/plist/_index.po
@@ -0,0 +1,1366 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-09-09 20:51-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:1
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:13
+#, no-wrap
+msgid "Advanced pkg-plist Practices"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:1
+#, no-wrap
+msgid "Chapter 8. Advanced pkg-plist Practices"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:51
+#, no-wrap
+msgid "Changing pkg-plist Based on Make Variables"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:58
+msgid ""
+"Some ports, particularly the `p5-` ports, need to change their [."
+"filename]#pkg-plist# depending on what options they are configured with (or "
+"version of `perl`, in the case of `p5-` ports). To make this easy, any "
+"instances in [.filename]#pkg-plist# of `%%OSREL%%`, `%%PERL_VER%%`, and `%"
+"%PERL_VERSION%%` will be substituted appropriately. The value of `%%OSREL%"
+"%` is the numeric revision of the operating system (for example, `4.9`). `%"
+"%PERL_VERSION%%` and `%%PERL_VER%%` is the full version number of `perl` "
+"(for example, `5.8.9`). Several other `%%_VARS_%%` related to port's "
+"documentation files are described in crossref:makefiles[install-"
+"documentation,the relevant section]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:60
+msgid ""
+"To make other substitutions, set `PLIST_SUB` with a list of `_VAR=VALUE_` "
+"pairs and instances of `%%_VAR_%%` will be substituted with _VALUE_ in [."
+"filename]#pkg-plist#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:63
+msgid ""
+"For instance, if a port installs many files in a version-specific "
+"subdirectory, use a placeholder for the version so that [.filename]#pkg-"
+"plist# does not have to be regenerated every time the port is updated. For "
+"example, set:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:68
+#, no-wrap
+msgid ""
+"OCTAVE_VERSION=\t${PORTREVISION}\n"
+"PLIST_SUB=\tOCTAVE_VERSION=${OCTAVE_VERSION}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:72
+msgid ""
+"in the [.filename]#Makefile# and use `%%OCTAVE_VERSION%%` wherever the "
+"version shows up in [.filename]#pkg-plist#. When the port is upgraded, it "
+"will not be necessary to edit dozens (or in some cases, hundreds) of lines "
+"in [.filename]#pkg-plist#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:75
+msgid ""
+"If files are installed conditionally on the options set in the port, the "
+"usual way of handling it is prefixing [.filename]#pkg-plist# lines with a `%"
+"%OPT%%` for lines needed when the option is enabled, or `%%NO_OPT%%` when "
+"the option is disabled, and adding `OPTIONS_SUB=yes` to the [."
+"filename]#Makefile#. See crossref:makefiles[options_sub,`OPTIONS_SUB`] for "
+"more information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:77
+msgid ""
+"For instance, if there are files that are only installed when the `X11` "
+"option is enabled, and [.filename]#Makefile# has:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:82
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tX11\n"
+"OPTIONS_SUB=\tyes\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:85
+msgid ""
+"In [.filename]#pkg-plist#, put `%%X11%%` in front of the lines only being "
+"installed when the option is enabled, like this :"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:89
+#, no-wrap
+msgid "%%X11%%bin/foo-gui\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:94
+msgid ""
+"This substitution will be done between the `pre-install` and `do-install` "
+"targets, by reading from [.filename]#PLIST# and writing to [."
+"filename]#TMPPLIST# (default: [.filename]#WRKDIR/.PLIST.mktmp#). So if the "
+"port builds [.filename]#PLIST# on the fly, do so in or before `pre-"
+"install`. Also, if the port needs to edit the resulting file, do so in "
+"`post-install` to a file named [.filename]#TMPPLIST#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:100
+msgid ""
+"Another way of modifying a port's packing list is based on setting the "
+"variables `PLIST_FILES` and `PLIST_DIRS`. The value of each variable is "
+"regarded as a list of pathnames to write to [.filename]#TMPPLIST# along with "
+"[.filename]#PLIST# contents. While names listed in `PLIST_FILES` and "
+"`PLIST_DIRS` are subject to `%%_VAR_%%` substitution as described above, it "
+"is better to use the `${_VAR_}` directly. Except for that, names from "
+"`PLIST_FILES` will appear in the final packing list unchanged, while `@dir` "
+"will be prepended to names from `PLIST_DIRS`. To take effect, `PLIST_FILES` "
+"and `PLIST_DIRS` must be set before [.filename]#TMPPLIST# is written, that "
+"is, in `pre-install` or earlier."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:104
+msgid ""
+"From time to time, using `OPTIONS_SUB` is not enough. In those cases, "
+"adding a specific `_TAG_` to `PLIST_SUB` inside the [.filename]#Makefile# "
+"with a special value of `@comment`, makes package tools to ignore the line. "
+"For instance, if some files are only installed when the `X11` option is on "
+"and the architecture is `i386`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:108
+#, no-wrap
+msgid ".include <bsd.port.pre.mk>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:114
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MX11} && ${ARCH} == \"i386\"\n"
+"PLIST_SUB+=\tX11I386=\"\"\n"
+".else\n"
+"PLIST_SUB+=\tX11I386=\"@comment \"\n"
+".endif\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:117
+#, no-wrap
+msgid "Empty Directories"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:120
+#, no-wrap
+msgid "Cleaning Up Empty Directories"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:126
+msgid ""
+"When being de-installed, a port has to remove empty directories it created. "
+"Most of these directories are removed automatically by man:pkg[8], but for "
+"directories created outside of [.filename]#${PREFIX}#, or empty directories, "
+"some more work needs to be done. This is usually accomplished by adding "
+"`@dir` lines for those directories. Subdirectories must be deleted before "
+"deleting parent directories."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:132
+#, no-wrap
+msgid ""
+"[...]\n"
+"@dir /var/games/oneko/saved-games\n"
+"@dir /var/games/oneko\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:135
+#, no-wrap
+msgid "Creating Empty Directories"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:140
+msgid ""
+"Empty directories created during port installation need special attention. "
+"They must be present when the package is created. If they are not created "
+"by the port code, create them in the [.filename]#Makefile#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:145
+#, no-wrap
+msgid ""
+"post-install:\n"
+"\t${MKDIR} ${STAGEDIR}${PREFIX}/some/directory\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:149
+msgid ""
+"Add the directory to [.filename]#pkg-plist# like any other. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:153
+#, no-wrap
+msgid "@dir some/directory\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:156
+#, no-wrap
+msgid "Configuration Files"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:160
+msgid ""
+"If the port installs configuration files to [.filename]#PREFIX/etc# (or "
+"elsewhere) do _not_ list them in [.filename]#pkg-plist#. That will cause "
+"`pkg delete` to remove files that have been carefully edited by the user, "
+"and a re-installation will wipe them out."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:164
+msgid ""
+"Instead, install sample files with a [.filename]#filename.sample# "
+"extension. The `@sample` macro automates this, see <<plist-keywords-"
+"sample>> for what it does exactly. For each sample file, add a line to [."
+"filename]#pkg-plist#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:168
+#, no-wrap
+msgid "@sample etc/orbit.conf.sample\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:172
+msgid ""
+"If there is a very good reason not to install a working configuration file "
+"by default, only list the sample filename in [.filename]#pkg-plist#, without "
+"the `@sample` followed by a space part, and add a crossref:pkg-files[porting-"
+"message,message] pointing out that the user must copy and edit the file "
+"before the software will work."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:177
+msgid ""
+"When a port installs its configuration in a subdirectory of [.filename]#"
+"${PREFIX}/etc#, use `ETCDIR`, which defaults to `${PREFIX}/etc/${PORTNAME}`, "
+"it can be overridden in the ports [.filename]#Makefile# if there is a "
+"convention for the port to use some other directory. The `%%ETCDIR%%` macro "
+"will be used in its stead in [.filename]#pkg-plist#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:183
+msgid ""
+"The sample configuration files should always have the [.filename]#.sample# "
+"suffix. If for some historical reason using the standard suffix is not "
+"possible, or if the sample files come from some other directory, use this "
+"construct:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:187
+#, no-wrap
+msgid "@sample etc/orbit.conf-dist etc/orbit.conf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:190
+msgid "or"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:194
+#, no-wrap
+msgid "@sample %%EXAMPLESDIR%%/orbit.conf etc/orbit.conf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:197
+msgid "The format is `@sample _sample-file actual-config-file_`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:200
+#, no-wrap
+msgid "Dynamic Versus Static Package List"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:204
+msgid ""
+"A _static package list_ is a package list which is available in the Ports "
+"Collection either as [.filename]#pkg-plist# (with or without variable "
+"substitution), or embedded into the [.filename]#Makefile# via `PLIST_FILES` "
+"and `PLIST_DIRS`. Even if the contents are auto-generated by a tool or a "
+"target in the Makefile _before_ the inclusion into the Ports Collection by a "
+"committer (for example, using `make makeplist`), this is still considered a "
+"static list, since it is possible to examine it without having to download "
+"or compile the distfile."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:207
+msgid ""
+"A _dynamic package list_ is a package list which is generated at the time "
+"the port is compiled based upon the files and directories which are "
+"installed. It is not possible to examine it before the source code of the "
+"ported application is downloaded and compiled, or after running a `make "
+"clean`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:211
+msgid ""
+"While the use of dynamic package lists is not forbidden, maintainers should "
+"use static package lists wherever possible, as it enables users to man:"
+"grep[1] through available ports to discover, for example, which port "
+"installs a certain file. Dynamic lists should be primarily used for complex "
+"ports where the package list changes drastically based upon optional "
+"features of the port (and thus maintaining a static package list is "
+"infeasible), or ports which change the package list based upon the version "
+"of dependent software used. For example, ports which generate docs with "
+"Javadoc."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:213
+#, no-wrap
+msgid "Automated Package List Creation"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:218
+msgid ""
+"First, make sure the port is almost complete, with only [.filename]#pkg-"
+"plist# missing. Running `make makeplist` will show an example for [."
+"filename]#pkg-plist#. The output of `makeplist` must be double checked for "
+"correctness as it tries to automatically guess a few things, and can get it "
+"wrong."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:222
+msgid ""
+"User configuration files should be installed as [.filename]#filename."
+"sample#, as it is described in <<plist-config>>. [.filename]#info/dir# must "
+"not be listed and appropriate [.filename]#install-info# lines must be added "
+"as noted in the crossref:makefiles[makefile-info,info files] section. Any "
+"libraries installed by the port must be listed as specified in the crossref:"
+"special[porting-shlibs,shared libraries] section."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:224
+#, no-wrap
+msgid "Expanding `PLIST_SUB` with Regular Expressions"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:228
+msgid ""
+"Strings to be replaced sometimes need to be very specific to avoid undesired "
+"replacements. This is a common problem with shorter values."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:230
+msgid ""
+"To address this problem, for each `_PLACEHOLDER_=_value_`, a "
+"`PLACEHOLDER_regex=regex` can be set, with the `_regex_` part matching "
+"_value_ more precisely."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:232
+#, no-wrap
+msgid "Using PLIST_SUB with Regular Expressions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:240
+msgid ""
+"Perl ports can install architecture dependent files in a specific tree. On "
+"FreeBSD to ease porting, this tree is called `mach`. For example, a port "
+"that installs a file whose path contains `mach` could have that part of the "
+"path string replaced with the wrong values. Consider this [."
+"filename]#Makefile#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:248
+#, no-wrap
+msgid ""
+"PORTNAME=\tMachine-Build\n"
+"DISTVERSION=\t1\n"
+"CATEGORIES=\tdevel perl5\n"
+"MASTER_SITES=\tCPAN\n"
+"PKGNAMEPREFIX=\tp5-\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:252
+#, no-wrap
+msgid ""
+"MAINTAINER=\tperl@FreeBSD.org\n"
+"COMMENT=\tBuilding machine\n"
+"WWW=\t\thttps://search.cpan.org/dist/Machine-Build\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:255
+#, no-wrap
+msgid ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tconfigure\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:257
+#, no-wrap
+msgid "PLIST_SUB=\tPERL_ARCH=mach\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:260
+msgid "The files installed by the port are:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:268
+#, no-wrap
+msgid ""
+"/usr/local/bin/machine-build\n"
+"/usr/local/lib/perl5/site_perl/man/man1/machine-build.1.gz\n"
+"/usr/local/lib/perl5/site_perl/man/man3/Machine::Build.3.gz\n"
+"/usr/local/lib/perl5/site_perl/Machine/Build.pm\n"
+"/usr/local/lib/perl5/site_perl/mach/5.20/Machine/Build/Build.so\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:271
+msgid "Running `make makeplist` wrongly generates:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:279
+#, no-wrap
+msgid ""
+"bin/%%PERL_ARCH%%ine-build\n"
+"%%PERL5_MAN1%%/%%PERL_ARCH%%ine-build.1.gz\n"
+"%%PERL5_MAN3%%/Machine::Build.3.gz\n"
+"%%SITE_PERL%%/Machine/Build.pm\n"
+"%%SITE_PERL%%/%%PERL_ARCH%%/%%PERL_VER%%/Machine/Build/Build.so\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:282
+msgid "Change the `PLIST_SUB` line from the [.filename]#Makefile# to:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:287
+#, no-wrap
+msgid ""
+"PLIST_SUB=\tPERL_ARCH=mach \\\n"
+"\t\tPERL_ARCH_regex=\\bmach\\b\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:290
+msgid "Now `make makeplist` correctly generates:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:298
+#, no-wrap
+msgid ""
+"bin/machine-build\n"
+"%%PERL5_MAN1%%/machine-build.1.gz\n"
+"%%PERL5_MAN3%%/Machine::Build.3.gz\n"
+"%%SITE_PERL%%/Machine/Build.pm\n"
+"%%SITE_PERL%%/%%PERL_ARCH%%/%%PERL_VER%%/Machine/Build/Build.so\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:303
+#, no-wrap
+msgid "Expanding Package List with Keywords"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:309
+msgid ""
+"All keywords can also take optional arguments in parentheses. The arguments "
+"are owner, group, and mode. This argument is used on the file or directory "
+"referenced. To change the owner, group, and mode of a configuration file, "
+"use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:313
+#, no-wrap
+msgid "@sample(games,games,640) etc/config.sample\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:317
+msgid ""
+"The arguments are optional. If only the group and mode need to be changed, "
+"use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:321
+#, no-wrap
+msgid "@sample(,games,660) etc/config.sample\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:327
+msgid ""
+"If a keyword is used on an crossref:makefiles[makefile-options,optional] "
+"entry, it must to be added after the helper:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:331
+#, no-wrap
+msgid "%%FOO%%@sample etc/orbit.conf.sample\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:335
+msgid ""
+"This is because the options plist helpers are used to comment out the line, "
+"so they need to be put first. See crossref:makefiles[options_sub,"
+"`OPTIONS_SUB`] for more information."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:338
+#, no-wrap
+msgid "`@desktop-file-utils`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:342
+msgid ""
+"Will run `update-desktop-database -q` after installation and "
+"deinstallation. _Never_ use directly, add crossref:uses[uses-desktop-file-"
+"utils,`USES=desktop-file-utils`] to the [.filename]#Makefile#."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:344
+#, no-wrap
+msgid "`@fc` _directory_"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:347
+msgid ""
+"Add a `@dir` entry for the directory passed as an argument, and run `fc-"
+"cache -fs` on that directory after installation and deinstallation."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:349
+#, no-wrap
+msgid "`@fontsdir` _directory_"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:353
+msgid ""
+"Add a `@dir` entry for the directory passed as an argument, and run "
+"`mkfontscale` and `mkfontdir` on that directory after installation and "
+"deinstallation. Additionally, on deinstallation, it removes the [."
+"filename]#fonts.scale# and [.filename]#fonts.dir# cache files if they are "
+"empty."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:355
+#, no-wrap
+msgid "`@info` _file_"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:361
+msgid ""
+"Add the file passed as argument to the plist, and updates the info document "
+"index on installation and deinstallation. Additionally, it removes the "
+"index if empty on deinstallation. This should never be used manually, but "
+"always through `INFO`. See crossref:makefiles[makefile-info,Info Files] for "
+"more information."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:363
+#, no-wrap
+msgid "`@kld` _directory_"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:367
+msgid ""
+"Runs `kldxref` on the directory on installation and deinstallation. "
+"Additionally, on deinstallation, it will remove the directory if empty."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:369
+#, no-wrap
+msgid "`@rmtry` _file_"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:372
+msgid ""
+"Will remove the file on deinstallation, and not give an error if the file is "
+"not there."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:374
+#, no-wrap
+msgid "`@sample` _file_ [_file_]"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:378
+msgid ""
+"This is used to handle installation of configuration files, through example "
+"files bundled with the package. The \"actual\", non-sample, file is either "
+"the second filename, if present, or the first filename without the [."
+"filename]#.sample# extension."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:383
+msgid ""
+"This does three things. First, add the first file passed as argument, the "
+"sample file, to the plist. Then, on installation, if the actual file is not "
+"found, copy the sample file to the actual file. And finally, on "
+"deinstallation, remove the actual file if it has not been modified. See "
+"<<plist-config>> for more information."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:385
+#, no-wrap
+msgid "`@shared-mime-info` _directory_"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:388
+msgid ""
+"Runs `update-mime-database` on the directory on installation and "
+"deinstallation."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:390
+#, no-wrap
+msgid "`@shell` _file_"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:393
+msgid "Add the file passed as argument to the plist."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:396
+msgid ""
+"On installation, add the full path to _file_ to [.filename]#/etc/shells#, "
+"while making sure it is not added twice. On deinstallation, remove it from "
+"[.filename]#/etc/shells#."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:398
+#, no-wrap
+msgid "`@terminfo`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:402
+msgid ""
+"Do not use by itself. If the port installs [.filename]#*.terminfo# files, "
+"add crossref:uses[uses-terminfo,USES=terminfo] to its [.filename]#Makefile#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:404
+msgid ""
+"On installation and deinstallation, if `tic` is present, refresh [.filename]#"
+"${PREFIX}/shared/misc/terminfo.db# from the [.filename]#*.terminfo# files in "
+"[.filename]#${PREFIX}/shared/misc#."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:406
+#, no-wrap
+msgid "Base Keywords"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:409
+msgid ""
+"There are a few keywords that are hardcoded, and documented in man:pkg-"
+"create[8]. For the sake of completeness, they are also documented here."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:411
+#, no-wrap
+msgid "`@` [_file_]"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:415
+msgid ""
+"The empty keyword is a placeholder to use when the file's owner, group, or "
+"mode need to be changed. For example, to set the group of the file to "
+"`games` and add the setgid bit, add:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:419
+#, no-wrap
+msgid "@(,games,2755) sbin/daemon\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:422
+#, no-wrap
+msgid "`@preexec` _command_, `@postexec` _command_, `@preunexec` _command_, `@postunexec` _command_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:425
+msgid ""
+"Execute _command_ as part of the package installation or deinstallation "
+"process."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:426
+#, no-wrap
+msgid "`@preexec` _command_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:428
+msgid "Execute _command_ as part of the [.filename]#pre-install# scripts."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:429
+#, no-wrap
+msgid "`@postexec` _command_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:431
+msgid "Execute _command_ as part of the [.filename]#post-install# scripts."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:432
+#, no-wrap
+msgid "`@preunexec` _command_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:434
+msgid "Execute _command_ as part of the [.filename]#pre-deinstall# scripts."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:435
+#, no-wrap
+msgid "`@postunexec` _command_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:437
+msgid "Execute _command_ as part of the [.filename]#post-deinstall# scripts."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:440
+msgid ""
+"If _command_ contains any of these sequences somewhere in it, they are "
+"expanded inline. For these examples, assume that `@cwd` is set to [."
+"filename]#/usr/local# and the last extracted file was [.filename]#bin/emacs#."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:441
+#, no-wrap
+msgid "`%F`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:444
+msgid ""
+"Expand to the last filename extracted (as specified). In the example case [."
+"filename]#bin/emacs#."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:445
+#, no-wrap
+msgid "`%D`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:448
+msgid ""
+"Expand to the current directory prefix, as set with `@cwd`. In the example "
+"case [.filename]#/usr/local#."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:449
+#, no-wrap
+msgid "`%B`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:452
+msgid ""
+"Expand to the basename of the fully qualified filename, that is, the current "
+"directory prefix plus the last filespec, minus the trailing filename. In "
+"the example case, that would be [.filename]#/usr/local/bin#."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:453
+#, no-wrap
+msgid "`%f`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:456
+msgid ""
+"Expand to the filename part of the fully qualified name, or the converse of `"
+"%B`. In the example case, [.filename]#emacs#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:461
+msgid ""
+"These keywords are here to help you set up the package so that it is as "
+"ready to use as possible. They _must not_ be abused to start services, stop "
+"services, or run any other commands that will modify the currently running "
+"system."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:464
+#, no-wrap
+msgid "`@mode` _mode_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:469
+msgid ""
+"Set default permission for all subsequently extracted files to _mode_. "
+"Format is the same as that used by man:chmod[1]. Use without an arg to set "
+"back to default permissions (mode of the file while being packed)."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:474
+msgid ""
+"This must be a numeric mode, like `644`, `4755`, or `600`. It cannot be a "
+"relative mode like `u+s`."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:477
+#, no-wrap
+msgid "`@owner` _user_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:481
+msgid ""
+"Set default ownership for all subsequent files to _user_. Use without an "
+"argument to set back to default ownership (`root`)."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:483
+#, no-wrap
+msgid "`@group` _group_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:487
+msgid ""
+"Set default group ownership for all subsequent files to _group_. Use "
+"without an arg to set back to default group ownership (`wheel`)."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:489
+#, no-wrap
+msgid "`@comment` _string_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:492
+msgid "This line is ignored when packing."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:494
+#, no-wrap
+msgid "`@dir` _directory_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:500
+msgid ""
+"Declare directory name. By default, directories created under `PREFIX` by a "
+"package installation are automatically removed. Use this when an empty "
+"directory under `PREFIX` needs to be created, or when the directory needs to "
+"have non default owner, group, or mode. Directories outside of `PREFIX` "
+"need to be registered. For example, [.filename]#/var/db/${PORTNAME}# needs "
+"to have a `@dir` entry whereas [.filename]#${PREFIX}/shared/${PORTNAME}# "
+"does not if it contains files or uses the default owner, group, and mode."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:502
+#, no-wrap
+msgid "`@exec` _command_, `@unexec` _command_ (Deprecated)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:506
+msgid ""
+"Execute _command_ as part of the installation or deinstallation process. "
+"Please use <<plist-keywords-base-exec>> instead."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:508
+#, no-wrap
+msgid "`@dirrm` _directory_ (Deprecated)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:512
+msgid ""
+"Declare directory name to be deleted at deinstall time. By default, "
+"directories created under `PREFIX` by a package installation are deleted "
+"when the package is deinstalled."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:514
+#, no-wrap
+msgid "`@dirrmtry` _directory_ (Deprecated)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:517
+msgid ""
+"Declare directory name to be removed, as for `@dirrm`, but does not issue a "
+"warning if the directory cannot be removed."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:519
+#, no-wrap
+msgid "Creating New Keywords"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:524
+msgid ""
+"Package list files can be extended by keywords that are defined in the [."
+"filename]#${PORTSDIR}/Keywords# directory. The settings for each keyword "
+"are stored in a UCL file named [.filename]#keyword.ucl#. The file must "
+"contain at least one of these sections:"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:526
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:535
+#, no-wrap
+msgid "`attributes`"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:527
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:548
+#, no-wrap
+msgid "`action`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:528
+msgid "`pre-install`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:529
+msgid "`post-install`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:530
+msgid "`pre-deinstall`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:531
+msgid "`post-deinstall`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:532
+msgid "`pre-upgrade`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:533
+msgid "`post-upgrade`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:541
+msgid ""
+"Changes the owner, group, or mode used by the keyword. Contains an "
+"associative array where the possible keys are `owner`, `group`, and `mode`. "
+"The values are, respectively, a user name, a group name, and a file mode. "
+"For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:545
+#, no-wrap
+msgid "attributes: { owner: \"games\", group: \"games\", mode: 0555 }\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:551
+msgid ""
+"Defines what happens to the keyword's parameter. Contains an array where the "
+"possible values are:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:552
+#, no-wrap
+msgid "`setprefix`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:554
+msgid "Set the prefix for the next plist entries."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:555
+#, no-wrap
+msgid "`dir`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:557
+msgid "Register a directory to be created on install and removed on deinstall."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:558
+#, no-wrap
+msgid "`dirrm`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:561
+msgid "Register a directory to be deleted on deinstall. Deprecated."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:562
+#, no-wrap
+msgid "`dirrmtry`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:565
+msgid "Register a directory to try and deleted on deinstall. Deprecated."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:566
+#, no-wrap
+msgid "`file`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:568
+msgid "Register a file."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:569
+#, no-wrap
+msgid "`setmode`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:571
+msgid "Set the mode for the next plist entries."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:572
+#, no-wrap
+msgid "`setowner`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:574
+msgid "Set the owner for the next plist entries."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:575
+#, no-wrap
+msgid "`setgroup`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:577
+msgid "Set the group for the next plist entries."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:578
+#, no-wrap
+msgid "`comment`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:580
+msgid "Does not do anything, equivalent to not entering an `action` section."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:581
+#, no-wrap
+msgid "`ignore_next`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:583
+msgid "Ignore the next entry in the plist."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:585
+#, no-wrap
+msgid "`arguments`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:589
+msgid ""
+"If set to `true`, adds argument handling, splitting the whole line, `%@`, "
+"into numbered arguments, `%1`, `%2`, and so on. For example, for this line:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:593
+#, no-wrap
+msgid "@foo some.content other.content\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:596
+msgid "`%1` and `%2` will contain:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:601
+#, no-wrap
+msgid ""
+"some.content\n"
+"other.content\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:606
+msgid ""
+"It also affects how the <<plist-keywords-action,`action`>> entry works. "
+"When there is more than one argument, the argument number must be "
+"specified. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:610
+#, no-wrap
+msgid "actions: [file(1)]\n"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:613
+#, no-wrap
+msgid "`pre-install`, `post-install`, `pre-deinstall`, `post-deinstall`, `pre-upgrade`, `post-upgrade`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:617
+msgid ""
+"These keywords contains a man:sh[1] script to be executed before or after "
+"installation, deinstallation, or upgrade of the package. In addition to the "
+"usual `@exec %_foo_` placeholders described in <<plist-keywords-base-exec>>, "
+"there is a new one, `%@`, which represents the argument of the keyword."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:619
+#, no-wrap
+msgid "Custom Keyword Examples"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:622
+#, no-wrap
+msgid "Example of a `@dirrmtryecho` Keyword"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:627
+msgid ""
+"This keyword does two things, it adds a `@dirrmtry _directory_` line to the "
+"packing list, and echoes the fact that the directory is removed when "
+"deinstalling the package."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:634
+#, no-wrap
+msgid ""
+"actions: [dirrmtry]\n"
+"post-deinstall: <<EOD\n"
+" echo \"Directory %D/%@ removed.\"\n"
+"EOD\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:639
+#, no-wrap
+msgid "Real Life Example, How `@sample` is Implemented"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:645
+msgid ""
+"This keyword does three things. It adds the first _filename_ passed as an "
+"argument to `@sample` to the packing list, it adds to the `post-install` "
+"script instructions to copy the sample to the actual configuration file if "
+"it does not already exist, and it adds to the `post-deinstall` instructions "
+"to remove the configuration file if it has not been modified."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/plist/_index.adoc:690
+#, no-wrap
+msgid ""
+"actions: [file(1)]\n"
+"arguments: true\n"
+"post-install: <<EOD\n"
+" case \"%1\" in\n"
+" /*) sample_file=\"%1\" ;;\n"
+" *) sample_file=\"%D/%1\" ;;\n"
+" esac\n"
+" target_file=\"${sample_file%.sample}\"\n"
+" set -- %@\n"
+" if [ $# -eq 2 ]; then\n"
+" target_file=${2}\n"
+" fi\n"
+" case \"${target_file}\" in\n"
+" /*) target_file=\"${target_file}\" ;;\n"
+" *) target_file=\"%D/${target_file}\" ;;\n"
+" esac\n"
+" if ! [ -f \"${target_file}\" ]; then\n"
+" /bin/cp -p \"${sample_file}\" \"${target_file}\" && \\\n"
+" /bin/chmod u+w \"${target_file}\"\n"
+" fi\n"
+"EOD\n"
+"pre-deinstall: <<EOD\n"
+" case \"%1\" in\n"
+" /*) sample_file=\"%1\" ;;\n"
+" *) sample_file=\"%D/%1\" ;;\n"
+" esac\n"
+" target_file=\"${sample_file%.sample}\"\n"
+" set -- %@\n"
+" if [ $# -eq 2 ]; then\n"
+" set -- %@\n"
+" target_file=${2}\n"
+" fi\n"
+" case \"${target_file}\" in\n"
+" /*) target_file=\"${target_file}\" ;;\n"
+" *) target_file=\"%D/${target_file}\" ;;\n"
+" esac\n"
+" if cmp -s \"${target_file}\" \"${sample_file}\"; then\n"
+" rm -f \"${target_file}\"\n"
+" else\n"
+" echo \"You may need to manually remove ${target_file} if it is no longer needed.\"\n"
+" fi\n"
+"EOD\n"
+msgstr ""
diff --git a/documentation/content/en/books/porters-handbook/porting-dads/_index.adoc b/documentation/content/en/books/porters-handbook/porting-dads/_index.adoc
index 36b9691d31..bc3ee06ae2 100644
--- a/documentation/content/en/books/porters-handbook/porting-dads/_index.adoc
+++ b/documentation/content/en/books/porters-handbook/porting-dads/_index.adoc
@@ -6,7 +6,7 @@ description: A list of common dos and don'ts that are encountered during the Fre
tags: ["dos", "don'ts", "porting", "ports", "guide"]
showBookMenu: true
weight: 13
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/porting-dads/"
---
[[porting-dads]]
@@ -338,7 +338,7 @@ For instance, use `BROKEN` when a port:
** does not work on the installed version of FreeBSD
** has a distfile which may not be automatically fetched due to licensing restrictions
-** does not work with some other currently installed port (for instance, the port depends on package:www/apache20[] but package:www/apache22[] is installed)
+** does not work with some other currently installed port (for instance, the port depends on package:www/drupal7[] but package:www/drupal8[] is installed)
+
[NOTE]
====
@@ -399,6 +399,8 @@ Port [.filename]##Makefile##s should test the value of this Makevar.
Ports that do not have any architecture-dependent files or requirements are identified by setting `NO_ARCH=yes`.
+Packages built from such ports have their architecture string ending in `:*` (wildcard architecture) as opposed to, for example, `freebsd:13:x86:64` (amd64 architecture).
+
[NOTE]
====
`NO_ARCH` is meant to indicate that there is no need to build a package for each of the supported architectures.
@@ -446,6 +448,13 @@ Both will be shown to the user.
It is possible to set `DEPRECATED` without an `EXPIRATION_DATE` (for instance, recommending a newer version of the port), but the converse does not make any sense.
+[NOTE]
+====
+When marking a port as `DEPRECATED`, if there are any alternative ports that can
+be used as a replacement for the one being deprecated, it is convenient to
+mention them in the commit message.
+====
+
There is no set policy on how much notice to give.
Current practice seems to be one month for security-related issues and two months for build issues.
This also gives any interested committers a little time to fix the problems.
@@ -531,7 +540,7 @@ In particular, default socket buffer sizes are different (call man:setsockopt[2]
If relying on non-standard behavior is required, encapsulate it properly into a generic API, do a check for the behavior in the configure stage, and stop if it is missing.
-Check the https://www.freebsd.org/cgi/man.cgi[man pages] to see if the function used is a POSIX interface (in the "STANDARDS" section of the man page).
+Check the https://man.freebsd.org/cgi/man.cgi[man pages] to see if the function used is a POSIX interface (in the "STANDARDS" section of the man page).
Do not assume that [.filename]#/bin/sh# is bash.
Ensure that a command line passed to man:system[3] will work with a POSIX compliant shell.
diff --git a/documentation/content/en/books/porters-handbook/porting-dads/_index.po b/documentation/content/en/books/porters-handbook/porting-dads/_index.po
new file mode 100644
index 0000000000..346864fc55
--- /dev/null
+++ b/documentation/content/en/books/porters-handbook/porting-dads/_index.po
@@ -0,0 +1,1157 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-05-21 14:43-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:1
+#, no-wrap
+msgid "A list of common dos and don'ts that are encountered during the FreeBSD porting process"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:1
+#, no-wrap
+msgid "Chapter 13. Dos and Don'ts"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:13
+#, no-wrap
+msgid "Dos and Don'ts"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:53
+#, no-wrap
+msgid "Introduction"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:59
+msgid ""
+"Here is a list of common dos and don'ts that are encountered during the "
+"porting process. Check the port against this list, but also check ports in "
+"the https://bugs.FreeBSD.org/search/[PR database] that others have "
+"submitted. Submit any comments on ports as described in extref:"
+"{contributing}[Bug Reports and General Commentary, CONTRIB-GENERAL]. "
+"Checking ports in the PR database will both make it faster for us to commit "
+"them, and prove that you know what you are doing."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:61
+#, no-wrap
+msgid "`WRKDIR`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:65
+msgid ""
+"Do not write anything to files outside `WRKDIR`. `WRKDIR` is the only place "
+"that is guaranteed to be writable during the port build (see extref:"
+"{handbook}[ installing ports from a CDROM, PORTS-CD] for an example of "
+"building ports from a read-only tree). The [.filename]##pkg-*## files can "
+"be modified by crossref:pkg-files[pkg-names,redefining a variable] rather "
+"than overwriting the file."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:67
+#, no-wrap
+msgid "`WRKDIRPREFIX`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:72
+msgid ""
+"Make sure the port honors `WRKDIRPREFIX`. Most ports do not have to worry "
+"about this. In particular, when referring to a `WRKDIR` of another port, "
+"note that the correct location is [.filename]#${WRKDIRPREFIX}${PORTSDIR}/"
+"subdir/name/work# not [.filename]#${PORTSDIR}/subdir/name/work# or [."
+"filename]#${.CURDIR}/../../subdir/name/work# or some such."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:74
+#, no-wrap
+msgid "Differentiating Operating Systems and OS Versions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:78
+msgid ""
+"Some code needs modifications or conditional compilation based upon what "
+"version of FreeBSD Unix it is running under. The preferred way to tell "
+"FreeBSD versions apart are the `{freebsd-version}` and `{freebsd}` macros "
+"defined in https://cgit.freebsd.org/src/tree/sys/sys/param.h[sys/param.h]. "
+"If this file is not included add the code,"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:82
+#, no-wrap
+msgid "#include <sys/param.h>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:85
+msgid "to the proper place in the [.filename]#.c# file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:88
+msgid ""
+"`{freebsd}` is defined in all versions of FreeBSD as their major version "
+"number. For example, in FreeBSD 9.x, `{freebsd}` is defined to be `9`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:96
+#, no-wrap
+msgid ""
+"#if __FreeBSD__ >= 9\n"
+"# if __FreeBSD_version >= 901000\n"
+"\t /* 9.1+ release specific code here */\n"
+"# endif\n"
+"#endif\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:99
+msgid ""
+"A complete list of `{freebsd-version}` values is available in crossref:"
+"versions[versions,__FreeBSD_version Values]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:101
+#, no-wrap
+msgid "Writing Something After bsd.port.mk"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:105
+msgid ""
+"Do not write anything after the `.include <bsd.port.mk>` line. It usually "
+"can be avoided by including [.filename]#bsd.port.pre.mk# somewhere in the "
+"middle of the [.filename]#Makefile# and [.filename]#bsd.port.post.mk# at the "
+"end."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:109
+msgid ""
+"Include either the [.filename]#bsd.port.pre.mk#/[.filename]#bsd.port.post."
+"mk# pair or [.filename]#bsd.port.mk# only; do not mix these two usages."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:112
+msgid ""
+"[.filename]#bsd.port.pre.mk# only defines a few variables, which can be used "
+"in tests in the [.filename]#Makefile#, [.filename]#bsd.port.post.mk# defines "
+"the rest."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:114
+msgid ""
+"Here are some important variables defined in [.filename]#bsd.port.pre.mk# "
+"(this is not the complete list, please read [.filename]#bsd.port.mk# for the "
+"complete list)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:119
+#, no-wrap
+msgid "Variable"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:121
+#, no-wrap
+msgid "Description"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:122
+#, no-wrap
+msgid "`ARCH`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:124
+#, no-wrap
+msgid "The architecture as returned by `uname -m` (for example, `i386`)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:125
+#, no-wrap
+msgid "`OPSYS`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:127
+#, no-wrap
+msgid "The operating system type, as returned by `uname -s` (for example, `FreeBSD`)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:128
+#, no-wrap
+msgid "`OSREL`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:130
+#, no-wrap
+msgid "The release version of the operating system (for example, `2.1.5` or `2.2.7`)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:131
+#, no-wrap
+msgid "`OSVERSION`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:133
+#, no-wrap
+msgid "The numeric version of the operating system; the same as crossref:versions[versions,`{freebsd-version}`]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:134
+#, no-wrap
+msgid "`LOCALBASE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:136
+#, no-wrap
+msgid "The base of the \"local\" tree (for example, `/usr/local`)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:137
+#, no-wrap
+msgid "`PREFIX`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:138
+#, no-wrap
+msgid "Where the port installs itself (see crossref:testing[porting-prefix,more on `PREFIX`])."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:143
+msgid ""
+"When `MASTERDIR` is needed, always define it before including [."
+"filename]#bsd.port.pre.mk#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:146
+msgid ""
+"Here are some examples of things that can be added after [.filename]#bsd."
+"port.pre.mk#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:153
+#, no-wrap
+msgid ""
+"# no need to compile lang/perl5 if perl5 is already in system\n"
+".if ${OSVERSION} > 300003\n"
+"BROKEN=\tperl is in system\n"
+".endif\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:156
+msgid "Always use tab instead of spaces after `BROKEN=`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:158
+#, no-wrap
+msgid "Use the `exec` Statement in Wrapper Scripts"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:163
+msgid ""
+"If the port installs a shell script whose purpose is to launch another "
+"program, and if launching that program is the last action performed by the "
+"script, make sure to launch the program using the `exec` statement, for "
+"instance:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:168
+#, no-wrap
+msgid ""
+"#!/bin/sh\n"
+"exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar \"$@\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:173
+msgid ""
+"The `exec` statement replaces the shell process with the specified program. "
+"If `exec` is omitted, the shell process remains in memory while the program "
+"is executing, and needlessly consumes system resources."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:175
+#, no-wrap
+msgid "Do Things Rationally"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:180
+msgid ""
+"The [.filename]#Makefile# should do things in a simple and reasonable "
+"manner. Making it a couple of lines shorter or more readable is always "
+"better. Examples include using a make `.if` construct instead of a shell "
+"`if` construct, not redefining `do-extract` if redefining `EXTRACT*` is "
+"enough, and using `GNU_CONFIGURE` instead of `CONFIGURE_ARGS += --"
+"prefix=${PREFIX}`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:183
+msgid ""
+"If a lot of new code is needed to do something, there may already be an "
+"implementation of it in [.filename]#bsd.port.mk#. While hard to read, there "
+"are a great many seemingly-hard problems for which [.filename]#bsd.port.mk# "
+"already provides a shorthand solution."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:185
+#, no-wrap
+msgid "Respect Both `CC` and `CXX`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:191
+msgid ""
+"The port must respect both `CC` and `CXX`. What we mean by this is that the "
+"port must not set the values of these variables absolutely, overriding "
+"existing values; instead, it may append whatever values it needs to the "
+"existing values. This is so that build options that affect all ports can be "
+"set globally."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:193
+msgid ""
+"If the port does not respect these variables, please add `NO_PACKAGE=ignores "
+"either cc or cxx` to the [.filename]#Makefile#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:196
+msgid ""
+"Here is an example of a [.filename]#Makefile# respecting both `CC` and "
+"`CXX`. Note the `?=`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:200
+#, no-wrap
+msgid "CC?= gcc\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:205
+#, no-wrap
+msgid "CXX?= g++\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:208
+msgid "Here is an example which respects neither `CC` nor `CXX`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:212
+#, no-wrap
+msgid "CC= gcc\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:217
+#, no-wrap
+msgid "CXX= g++\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:222
+msgid ""
+"Both `CC` and `CXX` can be defined on FreeBSD systems in [.filename]#/etc/"
+"make.conf#. The first example defines a value if it was not previously set "
+"in [.filename]#/etc/make.conf#, preserving any system-wide definitions. The "
+"second example clobbers anything previously defined."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:224
+#, no-wrap
+msgid "Respect `CFLAGS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:230
+msgid ""
+"The port must respect `CFLAGS`. What we mean by this is that the port must "
+"not set the value of this variable absolutely, overriding the existing "
+"value. Instead, it may append whatever values it needs to the existing "
+"value. This is so that build options that affect all ports can be set "
+"globally."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:232
+msgid ""
+"If it does not, please add `NO_PACKAGE=ignores cflags` to the [."
+"filename]#Makefile#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:234
+msgid ""
+"Here is an example of a [.filename]#Makefile# respecting `CFLAGS`. Note the "
+"`+=`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:238
+#, no-wrap
+msgid "CFLAGS+= -Wall -Werror\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:241
+msgid "Here is an example which does not respect `CFLAGS`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:245
+#, no-wrap
+msgid "CFLAGS= -Wall -Werror\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:250
+msgid ""
+"`CFLAGS` is defined on FreeBSD systems in [.filename]#/etc/make.conf#. The "
+"first example appends additional flags to `CFLAGS`, preserving any system-"
+"wide definitions. The second example clobbers anything previously defined."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:254
+msgid ""
+"Remove optimization flags from the third party [.filename]##Makefile##s. "
+"The system `CFLAGS` contains system-wide optimization flags. An example "
+"from an unmodified [.filename]#Makefile#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:258
+#, no-wrap
+msgid "CFLAGS= -O3 -funroll-loops -DHAVE_SOUND\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:261
+msgid ""
+"Using system optimization flags, the [.filename]#Makefile# would look "
+"similar to this example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:265
+#, no-wrap
+msgid "CFLAGS+= -DHAVE_SOUND\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:268
+#, no-wrap
+msgid "Verbose Build Logs"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:272
+msgid ""
+"Make the port build system display all commands executed during the build "
+"stage. Complete build logs are crucial to debugging port problems."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:274
+msgid "Non-informative build log example (bad):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:280
+#, no-wrap
+msgid ""
+" CC source1.o\n"
+" CC source2.o\n"
+" CCLD someprogram\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:283
+msgid "Verbose build log example (good):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:289
+#, no-wrap
+msgid ""
+"cc -O2 -pipe -I/usr/local/include -c -o source1.o source1.c\n"
+"cc -O2 -pipe -I/usr/local/include -c -o source2.o source2.c\n"
+"cc -o someprogram source1.o source2.o -L/usr/local/lib -lsomelib\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:293
+msgid ""
+"Some build systems such as CMake, ninja, and GNU configure are set up for "
+"verbose logging by the ports framework. In other cases, ports might need "
+"individual tweaks."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:295
+#, no-wrap
+msgid "Feedback"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:299
+msgid ""
+"Do send applicable changes and patches to the upstream maintainer for "
+"inclusion in the next release of the code. This makes updating to the next "
+"release that much easier."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:301
+#, no-wrap
+msgid "README.html"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:305
+msgid ""
+"[.filename]#README.html# is not part of the port, but generated by `make "
+"readme`. Do not include this file in patches or commits."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:309
+msgid ""
+"If `make readme` fails, make sure that the default value of `ECHO_MSG` has "
+"not been modified by the port."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:312
+#, no-wrap
+msgid "Marking a Port Not Installable with `BROKEN`, `FORBIDDEN`, or `IGNORE`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:319
+msgid ""
+"In certain cases, users must be prevented from installing a port. There are "
+"several variables that can be used in a port's [.filename]#Makefile# to tell "
+"the user that the port cannot be installed. The value of these make "
+"variables will be the reason that is shown to users for why the port refuses "
+"to install itself. Please use the correct make variable. Each variable "
+"conveys radically different meanings, both to users and to automated systems "
+"that depend on [.filename]##Makefile##s, such as crossref:keeping-up[build-"
+"cluster,the ports build cluster], and crossref:keeping-up[freshports,"
+"FreshPorts]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:321
+#, no-wrap
+msgid "Variables"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:324
+msgid ""
+"`BROKEN` is reserved for ports that currently do not compile, install, "
+"deinstall, or run correctly. Use it for ports where the problem is believed "
+"to be temporary."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:327
+msgid ""
+"If instructed, the build cluster will still attempt to try to build them to "
+"see if the underlying problem has been resolved. (However, in general, the "
+"cluster is run without this.)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:329
+msgid "For instance, use `BROKEN` when a port:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:331
+msgid "does not compile"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:332
+msgid "fails its configuration or installation process"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:333
+msgid "installs files outside of [.filename]#${PREFIX}#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:334
+msgid ""
+"does not remove all its files cleanly upon deinstall (however, it may be "
+"acceptable, and desirable, for the port to leave user-modified files behind)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:335
+msgid "has runtime issues on systems where it is supposed to run fine."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:337
+msgid ""
+"`FORBIDDEN` is used for ports that contain a security vulnerability or "
+"induce grave concern regarding the security of a FreeBSD system with a given "
+"port installed (for example, a reputably insecure program or a program that "
+"provides easily exploitable services). Mark ports as `FORBIDDEN` as soon as "
+"a particular piece of software has a vulnerability and there is no released "
+"upgrade. Ideally upgrade ports as soon as possible when a security "
+"vulnerability is discovered so as to reduce the number of vulnerable FreeBSD "
+"hosts (we like being known for being secure), however sometimes there is a "
+"noticeable time gap between disclosure of a vulnerability and an updated "
+"release of the vulnerable software. Do not mark a port `FORBIDDEN` for any "
+"reason other than security."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:338
+msgid ""
+"`IGNORE` is reserved for ports that must not be built for some other reason. "
+"Use it for ports where the problem is believed to be structural. The build "
+"cluster will not, under any circumstances, build ports marked as `IGNORE`. "
+"For instance, use `IGNORE` when a port:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:340
+msgid "does not work on the installed version of FreeBSD"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:341
+msgid ""
+"has a distfile which may not be automatically fetched due to licensing "
+"restrictions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:342
+msgid ""
+"does not work with some other currently installed port (for instance, the "
+"port depends on package:www/drupal7[] but package:www/drupal8[] is installed)"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:347
+msgid ""
+"If a port would conflict with a currently installed port (for example, if "
+"they install a file in the same place that performs a different function), "
+"crossref:makefiles[conflicts,use `CONFLICTS` instead]. `CONFLICTS` will set "
+"`IGNORE` by itself."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:350
+#, no-wrap
+msgid "Implementation Notes"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:354
+msgid ""
+"Do not quote the values of `BROKEN`, `IGNORE`, and related variables. Due "
+"to the way the information is shown to the user, the wording of messages for "
+"each variable differ:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:358
+#, no-wrap
+msgid "BROKEN=\tfails to link with base -lcrypto\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:363
+#, no-wrap
+msgid "IGNORE=\tunsupported on recent versions\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:366
+msgid "resulting in this output from `make describe`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:370
+#, no-wrap
+msgid "===> foobar-0.1 is marked as broken: fails to link with base -lcrypto.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:375
+#, no-wrap
+msgid "===> foobar-0.1 is unsupported on recent versions.\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:378
+#, no-wrap
+msgid "Architectural Considerations"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:381
+#, no-wrap
+msgid "General Notes on Architectures"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:385
+msgid ""
+"FreeBSD runs on many more processor architectures than just the well-known "
+"x86-based ones. Some ports have constraints which are particular to one or "
+"more of these architectures."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:387
+msgid "For the list of supported architectures, run:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:391
+#, no-wrap
+msgid "cd ${SRCDIR}; make targets\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:396
+msgid ""
+"The values are shown in the form `TARGET`/`TARGET_ARCH`. The ports read-"
+"only makevar `ARCH` is set based on the value of `TARGET_ARCH`. Port [."
+"filename]##Makefile##s should test the value of this Makevar."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:398
+#, no-wrap
+msgid "Marking a Port as Architecture Neutral"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:401
+msgid ""
+"Ports that do not have any architecture-dependent files or requirements are "
+"identified by setting `NO_ARCH=yes`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:403
+msgid ""
+"Packages built from such ports have their architecture string ending in `:*` "
+"(wildcard architecture) as opposed to, for example, `freebsd:13:x86:64` "
+"(amd64 architecture)."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:409
+msgid ""
+"`NO_ARCH` is meant to indicate that there is no need to build a package for "
+"each of the supported architectures. The goal is to reduce the amount of "
+"resources spent on building and distributing the packages such as network "
+"bandwidth and disk space on mirrors and on distribution media. Currently, "
+"however, our package infrastructure (e.g., package managers, mirrors, and "
+"package builders) is not set up to fully benefit from `NO_ARCH`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:412
+#, no-wrap
+msgid "Marking a Port as Ignored Only On Certain Architectures"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:415
+msgid ""
+"To mark a port as ``IGNORE``d only on certain architectures, there are two "
+"other convenience variables that will automatically set `IGNORE`: "
+"`ONLY_FOR_ARCHS` and `NOT_FOR_ARCHS`. Examples:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:419
+#, no-wrap
+msgid "ONLY_FOR_ARCHS=\ti386 amd64\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:424
+#, no-wrap
+msgid "NOT_FOR_ARCHS=\tia64 sparc64\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:428
+msgid ""
+"A custom `IGNORE` message can be set using `ONLY_FOR_ARCHS_REASON` and "
+"`NOT_FOR_ARCHS_REASON`. Per architecture entries are possible with "
+"`ONLY_FOR_ARCHS_REASON_ARCH` and `NOT_FOR_ARCHS_REASON_ARCH`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:431
+msgid ""
+"If a port fetches i386 binaries and installs them, set `IA32_BINARY_PORT`. "
+"If this variable is set, [.filename]#/usr/lib32# must be present for IA32 "
+"versions of libraries and the kernel must support IA32 compatibility. If one "
+"of these two dependencies is not satisfied, `IGNORE` will be set "
+"automatically."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:433
+#, no-wrap
+msgid "Cluster-Specific Considerations"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:436
+msgid ""
+"Some ports attempt to tune themselves to the exact machine they are being "
+"built on by specifying `-march=native` to the compiler. This should be "
+"avoided: either list it under an off-by-default option, or delete it "
+"entirely."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:438
+msgid ""
+"Otherwise, the default package produced by the build cluster might not run "
+"on every single machine of that `ARCH`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:440
+#, no-wrap
+msgid "Marking a Port for Removal with `DEPRECATED` or `EXPIRATION_DATE`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:444
+msgid ""
+"Do remember that `BROKEN` and `FORBIDDEN` are to be used as a temporary "
+"resort if a port is not working. Permanently broken ports will be removed "
+"from the tree entirely."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:448
+msgid ""
+"When it makes sense to do so, users can be warned about a pending port "
+"removal with `DEPRECATED` and `EXPIRATION_DATE`. The former is a string "
+"stating why the port is scheduled for removal; the latter is a string in ISO "
+"8601 format (YYYY-MM-DD). Both will be shown to the user."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:450
+msgid ""
+"It is possible to set `DEPRECATED` without an `EXPIRATION_DATE` (for "
+"instance, recommending a newer version of the port), but the converse does "
+"not make any sense."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:456
+msgid ""
+"When marking a port as `DEPRECATED`, if there are any alternative ports that "
+"can be used as a replacement for the one being deprecated, it is convenient "
+"to mention them in the commit message."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:461
+msgid ""
+"There is no set policy on how much notice to give. Current practice seems "
+"to be one month for security-related issues and two months for build "
+"issues. This also gives any interested committers a little time to fix the "
+"problems."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:463
+#, no-wrap
+msgid "Avoid Use of the `.error` Construct"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:467
+msgid ""
+"The correct way for a [.filename]#Makefile# to signal that the port cannot "
+"be installed due to some external factor (for instance, the user has "
+"specified an illegal combination of build options) is to set a non-blank "
+"value to `IGNORE`. This value will be formatted and shown to the user by "
+"`make install`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:473
+msgid ""
+"It is a common mistake to use `.error` for this purpose. The problem with "
+"this is that many automated tools that work with the ports tree will fail in "
+"this situation. The most common occurrence of this is seen when trying to "
+"build [.filename]#/usr/ports/INDEX# (see crossref:testing[make-describe,"
+"Running `make describe`]). However, even more trivial commands such as "
+"`make maintainer` also fail in this scenario. This is not acceptable."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:475
+#, no-wrap
+msgid "How to Avoid Using `.error`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:480
+msgid ""
+"The first of the next two [.filename]#Makefile# snippets will cause `make "
+"index` to fail, while the second one will not:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:484
+#, no-wrap
+msgid ".error \"option is not supported\"\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:489
+#, no-wrap
+msgid "IGNORE=option is not supported\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:494
+#, no-wrap
+msgid "Usage of sysctl"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:499
+msgid ""
+"The usage of [.filename]#sysctl# is discouraged except in targets. This is "
+"because the evaluation of any ``makevar``s, such as used during `make "
+"index`, then has to run the command, further slowing down that process."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:501
+msgid ""
+"Only use man:sysctl[8] through `SYSCTL`, as it contains the fully qualified "
+"path and can be overridden, if one has such a special need."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:503
+#, no-wrap
+msgid "Rerolling Distfiles"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:508
+msgid ""
+"Sometimes the authors of software change the content of released distfiles "
+"without changing the file's name. Verify that the changes are official and "
+"have been performed by the author. It has happened in the past that the "
+"distfile was silently altered on the download servers with the intent to "
+"cause harm or compromise end user security."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:511
+msgid ""
+"Put the old distfile aside, download the new one, unpack them and compare "
+"the content with man:diff[1]. If there is nothing suspicious, update [."
+"filename]#distinfo#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:515
+msgid ""
+"Be sure to summarize the differences in the PR and commit log, so that other "
+"people know that nothing bad has happened."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:518
+msgid "Contact the authors of the software and confirm the changes with them."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:520
+#, no-wrap
+msgid "Use POSIX Standards"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:524
+msgid ""
+"FreeBSD ports generally expect POSIX compliance. Some software and build "
+"systems make assumptions based on a particular operating system or "
+"environment that can cause problems when used in a port."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:527
+msgid ""
+"Do not use [.filename]#/proc# if there are any other ways of getting the "
+"information. For example, `setprogname(argv[0])` in `main()` and then man:"
+"getprogname[3] to know the executable name."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:529
+msgid "Do not rely on behavior that is undocumented by POSIX."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:533
+msgid ""
+"Do not record timestamps in the critical path of the application if it also "
+"works without. Getting timestamps may be slow, depending on the accuracy of "
+"timestamps in the OS. If timestamps are really needed, determine how "
+"precise they have to be and use an API which is documented to just deliver "
+"the needed precision."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:537
+msgid ""
+"A number of simple syscalls (for example man:gettimeofday[2], man:getpid[2]) "
+"are much faster on Linux(R) than on any other operating system due to "
+"caching and the vsyscall performance optimizations. Do not rely on them "
+"being cheap in performance-critical applications. In general, try hard to "
+"avoid syscalls if possible."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:540
+msgid ""
+"Do not rely on Linux(R)-specific socket behavior. In particular, default "
+"socket buffer sizes are different (call man:setsockopt[2] with `SO_SNDBUF` "
+"and `SO_RCVBUF`, and while Linux(R)'s man:send[2] blocks when the socket "
+"buffer is full, FreeBSD's will fail and set `ENOBUFS` in errno."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:542
+msgid ""
+"If relying on non-standard behavior is required, encapsulate it properly "
+"into a generic API, do a check for the behavior in the configure stage, and "
+"stop if it is missing."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:544
+msgid ""
+"Check the https://man.freebsd.org/cgi/man.cgi[man pages] to see if the "
+"function used is a POSIX interface (in the \"STANDARDS\" section of the man "
+"page)."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:547
+msgid ""
+"Do not assume that [.filename]#/bin/sh# is bash. Ensure that a command line "
+"passed to man:system[3] will work with a POSIX compliant shell."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:549
+msgid ""
+"A list of common bashisms is available https://wiki.ubuntu.com/"
+"DashAsBinSh[here]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:552
+msgid ""
+"Check that headers are included in the POSIX or man page recommended way. "
+"For example, [.filename]#sys/types.h# is often forgotten, which is not as "
+"much of a problem for Linux(R) as it is for FreeBSD."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:554
+#, no-wrap
+msgid "Miscellanea"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:558
+msgid ""
+"Always double-check [.filename]#pkg-descr# and [.filename]#pkg-plist#. If "
+"reviewing a port and a better wording can be achieved, do so."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/porting-dads/_index.adoc:559
+msgid ""
+"Please be careful to note any legal issues! Do not let us illegally "
+"distribute software!"
+msgstr ""
diff --git a/documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc b/documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc
index 2a247922c2..c7612ab109 100644
--- a/documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc
+++ b/documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc
@@ -6,7 +6,7 @@ description: A sample Makefile that can be used to create a new FreeBSD Port
tags: ["sample", "makefile"]
showBookMenu: true
weight: 14
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/porting-samplem/"
---
[[porting-samplem]]
@@ -88,6 +88,7 @@ PATCH_DIST_STRIP= -p1
"ports@FreeBSD.org".]
MAINTAINER= asami@FreeBSD.org
COMMENT= DVI Previewer for the X Window System
+WWW= http://xdvi.sourceforge.net/
[license -- should not be empty]
LICENSE= BSD2CLAUSE
diff --git a/documentation/content/en/books/porters-handbook/porting-samplem/_index.po b/documentation/content/en/books/porters-handbook/porting-samplem/_index.po
new file mode 100644
index 0000000000..81dd3322fb
--- /dev/null
+++ b/documentation/content/en/books/porters-handbook/porting-samplem/_index.po
@@ -0,0 +1,210 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-09-09 20:51-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:1
+#, no-wrap
+msgid "A sample Makefile that can be used to create a new FreeBSD Port"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:1
+#, no-wrap
+msgid "Chapter 14. A Sample Makefile"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:13
+#, no-wrap
+msgid "A Sample Makefile"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:52
+msgid ""
+"Here is a sample [.filename]#Makefile# that can be used to create a new "
+"port. Make sure to remove all the extra comments (ones between brackets)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:56
+msgid ""
+"The format shown is the recommended one for ordering variables, empty lines "
+"between sections, and so on. This format is designed so that the most "
+"important information is easy to locate. We recommend using crossref:quick-"
+"porting[porting-portlint,portlint] to check the [.filename]#Makefile#."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:76
+#, no-wrap
+msgid ""
+"[section to describe the port itself and the master site - PORTNAME\n"
+" and PORTVERSION or the DISTVERSION* variables are always first,\n"
+" followed by CATEGORIES, and then MASTER_SITES, which can be followed\n"
+" by MASTER_SITE_SUBDIR. PKGNAMEPREFIX and PKGNAMESUFFIX, if needed,\n"
+" will be after that. Then comes DISTNAME, EXTRACT_SUFX and/or\n"
+" DISTFILES, and then EXTRACT_ONLY, as necessary.]\n"
+"PORTNAME=\txdvi\n"
+"DISTVERSION=\t18.2\n"
+"CATEGORIES=\tprint\n"
+"[do not forget the trailing slash (\"/\")!\n"
+" if not using MASTER_SITE_* macros]\n"
+"MASTER_SITES=\t${MASTER_SITE_XCONTRIB}\n"
+"MASTER_SITE_SUBDIR=\tapplications\n"
+"PKGNAMEPREFIX=\tja-\n"
+"DISTNAME=\txdvi-pl18\n"
+"[set this if the source is not in the standard \".tar.gz\" form]\n"
+"EXTRACT_SUFX=\t.tar.Z\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:83
+#, no-wrap
+msgid ""
+"[section for distributed patches -- can be empty]\n"
+"PATCH_SITES=\tftp://ftp.sra.co.jp/pub/X11/japanese/\n"
+"PATCHFILES=\txdvi-18.patch1.gz xdvi-18.patch2.gz\n"
+"[If the distributed patches were not made relative to ${WRKSRC},\n"
+" this may need to be tweaked]\n"
+"PATCH_DIST_STRIP=\t-p1\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:92
+#, no-wrap
+msgid ""
+"[maintainer; *mandatory*! This is the person who is volunteering to\n"
+" handle port updates, build breakages, and to whom a users can direct\n"
+" questions and bug reports. To keep the quality of the Ports Collection\n"
+" as high as possible, we do not accept new ports that are assigned to\n"
+" \"ports@FreeBSD.org\".]\n"
+"MAINTAINER=\tasami@FreeBSD.org\n"
+"COMMENT=\tDVI Previewer for the X Window System\n"
+"WWW=\t\thttp://xdvi.sourceforge.net/\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:96
+#, no-wrap
+msgid ""
+"[license -- should not be empty]\n"
+"LICENSE=\tBSD2CLAUSE\n"
+"LICENSE_FILE=\t${WRKSRC}/LICENSE\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:99
+#, no-wrap
+msgid ""
+"[dependencies -- can be empty]\n"
+"RUN_DEPENDS=\tgs:print/ghostscript\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:104
+#, no-wrap
+msgid ""
+"[If it requires GNU make, not /usr/bin/make, to build...]\n"
+"USES= gmake\n"
+"[If it is an X application and requires \"xmkmf -a\" to be run...]\n"
+"USES= imake\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:114
+#, no-wrap
+msgid ""
+"[this section is for other standard bsd.port.mk variables that do not]\n"
+" belong to any of the above]\n"
+"[If it asks questions during configure, build, install...]\n"
+"IS_INTERACTIVE=\tyes\n"
+"[If it extracts to a directory other than ${DISTNAME}...]\n"
+"WRKSRC=\t\t${WRKDIR}/xdvi-new\n"
+"[If it requires a \"configure\" script generated by GNU autoconf to be run]\n"
+"GNU_CONFIGURE=\tyes\n"
+"[et cetera.]\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:120
+#, no-wrap
+msgid ""
+"[If it requires options, this section is for options]\n"
+"OPTIONS_DEFINE=\tDOCS EXAMPLES FOO\n"
+"OPTIONS_DEFAULT=\tFOO\n"
+"[If options will change the files in plist]\n"
+"OPTIONS_SUB=yes\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:122
+#, no-wrap
+msgid "FOO_DESC=\t\tEnable foo support\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:124
+#, no-wrap
+msgid "FOO_CONFIGURE_ENABLE=\tfoo\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:127
+#, no-wrap
+msgid ""
+"[non-standard variables to be used in the rules below]\n"
+"MY_FAVORITE_RESPONSE=\t\"yeah, right\"\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:131
+#, no-wrap
+msgid ""
+"[then the special rules, in the order they are called]\n"
+"pre-fetch:\n"
+"\ti go fetch something, yeah\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:134
+#, no-wrap
+msgid ""
+"post-patch:\n"
+"\ti need to do something after patch, great\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:137
+#, no-wrap
+msgid ""
+"pre-install:\n"
+"\tand then some more stuff before installing, wow\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:139
+#, no-wrap
+msgid "[and then the epilogue]\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/porting-samplem/_index.adoc:141
+#, no-wrap
+msgid ".include <bsd.port.mk>\n"
+msgstr ""
diff --git a/documentation/content/en/books/porters-handbook/porting-why/_index.adoc b/documentation/content/en/books/porters-handbook/porting-why/_index.adoc
index 92773d6fc6..863943d51c 100644
--- a/documentation/content/en/books/porters-handbook/porting-why/_index.adoc
+++ b/documentation/content/en/books/porters-handbook/porting-why/_index.adoc
@@ -6,7 +6,7 @@ description: Why port a program to the FreeBSD Ports Collection
tags: ["ports", "why porting"]
showBookMenu: true
weight: 1
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/porting-why/"
---
[[why-port]]
diff --git a/documentation/content/en/books/porters-handbook/porting-why/_index.po b/documentation/content/en/books/porters-handbook/porting-why/_index.po
new file mode 100644
index 0000000000..051f4f5b2f
--- /dev/null
+++ b/documentation/content/en/books/porters-handbook/porting-why/_index.po
@@ -0,0 +1,51 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:20-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/porters-handbook/porting-why/_index.adoc:1
+#, no-wrap
+msgid "Why port a program to the FreeBSD Ports Collection"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/porters-handbook/porting-why/_index.adoc:1
+#, no-wrap
+msgid "Chapter 1. Introduction"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/porting-why/_index.adoc:13
+#, no-wrap
+msgid "Introduction"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-why/_index.adoc:53
+msgid ""
+"The FreeBSD Ports Collection is the way almost everyone installs "
+"applications (\"ports\") on FreeBSD. Like everything else about FreeBSD, it "
+"is primarily a volunteer effort. It is important to keep this in mind when "
+"reading this document."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/porting-why/_index.adoc:55
+msgid ""
+"In FreeBSD, anyone may submit a new port, or volunteer to maintain an "
+"existing unmaintained port. No special commit privilege is needed."
+msgstr ""
diff --git a/documentation/content/en/books/porters-handbook/quick-porting/_index.adoc b/documentation/content/en/books/porters-handbook/quick-porting/_index.adoc
index 18cd48110c..53d727e7df 100644
--- a/documentation/content/en/books/porters-handbook/quick-porting/_index.adoc
+++ b/documentation/content/en/books/porters-handbook/quick-porting/_index.adoc
@@ -6,7 +6,7 @@ description: How to quickly create a new FreeBSD Port
tags: ["quick porting", "guide", "port", "ports collection", "how-to"]
showBookMenu: true
weight: 3
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/quick-porting/"
---
[[quick-porting]]
@@ -81,10 +81,11 @@ The minimal [.filename]#Makefile# would look something like this:
PORTNAME= oneko
DISTVERSION= 1.1b
CATEGORIES= games
-MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/
+MASTER_SITES= ftp://ftp.rediris.es/sites/ftp.freebsd.org/pub/FreeBSD/
MAINTAINER= youremail@example.com
COMMENT= Cat chasing a mouse all over the screen
+WWW= http://www.daidouji.com/oneko/
.include <bsd.port.mk>
....
@@ -118,27 +119,11 @@ On the other hand, the content of [.filename]#pkg-descr# must be longer than the
A well-written [.filename]#pkg-descr# describes the port completely enough that users would not have to consult the documentation or visit the website to understand what the software does, how it can be useful, or what particularly nice features it has.
Mentioning certain requirements like a graphical toolkit, heavy dependencies, runtime environment, or implementation languages help users decide whether this port will work for them.
-Include a URL to the official WWW homepage.
-Prepend _one_ of the websites (pick the most common one) with `WWW:` (followed by single space) so that automated tools will work correctly.
-If the URI is the root of the website or directory, it must be terminated with a slash.
-
[NOTE]
====
-If the listed webpage for a port is not available, try to search the Internet first to see if the official site moved, was renamed, or is hosted elsewhere.
+The URL that used to be included as the last line of the [.filename]#pkg-descr# file has been moved to the [.filename]#Makefile#.
====
-This example shows how [.filename]#pkg-descr# looks:
-
-[.programlisting]
-....
-This is a port of oneko, in which a cat chases a poor mouse all over
-the screen.
- :
-(etc.)
-
-WWW: http://www.oneko.org/
-....
-
[[porting-pkg-plist]]
=== [.filename]#pkg-plist#
@@ -164,6 +149,8 @@ Refer to the man:pkg-create[8] manual page for details on the packing list.
====
It is recommended to keep all the filenames in this file sorted alphabetically.
It will make verifying changes when upgrading the port much easier.
+The sorting should be applied after variable expansion takes place.
+The framework does this correctly when the package list is crossref:plist[plist-autoplist,generated automatically].
====
[TIP]
@@ -242,7 +229,7 @@ These are the important points to verify:
Make certain no warnings are shown in any of the stages.
-Thorough automated testing can be done with package:ports-mgmt/poudriere[] from the Ports Collection, see crossref:testing[testing-poudriere,Poudriere] for more information.
+Thorough automated testing can be done with package:ports-mgmt/poudriere[] from the Ports Collection, see crossref:testing[testing-poudriere,poudriere] for more information.
It maintains `jails` where all of the steps shown above can be tested without affecting the state of the host system.
[[porting-portlint]]
@@ -310,7 +297,7 @@ Add a short description of the program to the Description field of the PR (perha
[NOTE]
====
Giving a good description in the summary of the problem report makes the work of port committers and triagers a lot easier.
-The expected format for new ports is "[NEW PORT] _category/portname short description of the port_" for new ports.
+The expected format for new ports is "[NEW PORT] _category/portname short description of the port_".
Using this scheme makes it easier and faster to begin the work of committing the new port.
====
@@ -323,20 +310,8 @@ To get a listing of _open_ port PRs, select _Open_ and _Ports & Packages_ in the
After looking at the new port, we will reply if necessary, and commit it to the tree.
The submitter's name will also be added to the list of extref:{contributors}[Additional FreeBSD Contributors, contrib-additional] and other files.
-It is also possible to submit ports using a man:shar[1] file.
-Using the previous example with the `oneko` port above.
-
-.Creating a [.filename]#.shar# for a New Port
-[[porting-submitting-shar]]
-[example]
+[IMPORTANT]
====
-go to the directory above where the port directory is located, and use `tar` to create the shar archive:
-
-[source,shell]
-....
-% cd ..
-% tar cf oneko.shar --format shar oneko
-....
+Previously it was possible to submit patches for new ports using a man:shar[1] file; this is no longer the case with the evolution of man:git[1].
+Committers no longer accept man:shar[1] files as their use is prone to mistake and does not add the relevant entry in the category's [.filename]#Makefile#.
====
-
-[.filename]#oneko.shar# can then be submitted in the same way as [.filename]#oneko.diff# above.
diff --git a/documentation/content/en/books/porters-handbook/quick-porting/_index.po b/documentation/content/en/books/porters-handbook/quick-porting/_index.po
new file mode 100644
index 0000000000..c1fae52e52
--- /dev/null
+++ b/documentation/content/en/books/porters-handbook/quick-porting/_index.po
@@ -0,0 +1,587 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-09-09 18:12-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:1
+#, no-wrap
+msgid "How to quickly create a new FreeBSD Port"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:1
+#, no-wrap
+msgid "Chapter 3. Quick Porting"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:13
+#, no-wrap
+msgid "Quick Porting"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:52
+msgid ""
+"This section describes how to quickly create a new port. For applications "
+"where this quick method is not adequate, the full \"Slow Porting\" process "
+"is described in crossref:slow-porting[slow-porting,Slow Porting]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:54
+msgid ""
+"First, get the original tarball and put it into `DISTDIR`, which defaults to "
+"[.filename]#/usr/ports/distfiles#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:60
+msgid ""
+"These steps assume that the software compiled out-of-the-box. In other "
+"words, absolutely no changes were required for the application to work on a "
+"FreeBSD system. If anything had to be changed, refer to crossref:slow-"
+"porting[slow-porting,Slow Porting]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:65
+msgid ""
+"It is recommended to set the `DEVELOPER` man:make[1] variable in [."
+"filename]#/etc/make.conf# before getting into porting."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:69
+#, no-wrap
+msgid "# echo DEVELOPER=yes >> /etc/make.conf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:72
+msgid ""
+"This setting enables the \"developer mode\" that displays deprecation "
+"warnings and activates some further quality checks on calling `make`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:75
+#, no-wrap
+msgid "Writing the Makefile"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:78
+msgid "The minimal [.filename]#Makefile# would look something like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:85
+#, no-wrap
+msgid ""
+"PORTNAME=\toneko\n"
+"DISTVERSION=\t1.1b\n"
+"CATEGORIES=\tgames\n"
+"MASTER_SITES=\tftp://ftp.rediris.es/sites/ftp.freebsd.org/pub/FreeBSD/\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:89
+#, no-wrap
+msgid ""
+"MAINTAINER=\tyouremail@example.com\n"
+"COMMENT=\tCat chasing a mouse all over the screen\n"
+"WWW=\t\thttp://www.daidouji.com/oneko/\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:91
+#, no-wrap
+msgid ".include <bsd.port.mk>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:95
+msgid ""
+"Try to figure it out. A more detailed example is shown in the crossref:"
+"porting-samplem[porting-samplem,sample Makefile] section."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:97
+#, no-wrap
+msgid "Writing the Description Files"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:102
+msgid ""
+"There are two description files that are required for any port, whether they "
+"actually package or not. They are [.filename]#pkg-descr# and [."
+"filename]#pkg-plist#. Their [.filename]#pkg-# prefix distinguishes them "
+"from other files."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:104
+#, no-wrap
+msgid "[.filename]#pkg-descr#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:108
+msgid ""
+"This is a longer description of the port. One to a few paragraphs concisely "
+"explaining what the port does is sufficient."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:115
+msgid ""
+"This is _not_ a manual or an in-depth description on how to use or compile "
+"the port! _Please be careful when copying from the [.filename]#README# or "
+"manpage_. Too often they are not a concise description of the port or are "
+"in an awkward format. For example, manpages have justified spacing, which "
+"looks particularly bad with monospaced fonts."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:117
+msgid ""
+"On the other hand, the content of [.filename]#pkg-descr# must be longer than "
+"the crossref:makefiles[makefile-comment,`COMMENT` line from the Makefile]. "
+"It must explain in more depth what the port is all about."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:121
+msgid ""
+"A well-written [.filename]#pkg-descr# describes the port completely enough "
+"that users would not have to consult the documentation or visit the website "
+"to understand what the software does, how it can be useful, or what "
+"particularly nice features it has. Mentioning certain requirements like a "
+"graphical toolkit, heavy dependencies, runtime environment, or "
+"implementation languages help users decide whether this port will work for "
+"them."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:125
+msgid ""
+"The URL that used to be included as the last line of the [.filename]#pkg-"
+"descr# file has been moved to the [.filename]#Makefile#."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:128
+#, no-wrap
+msgid "[.filename]#pkg-plist#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:133
+msgid ""
+"This file lists all the files installed by the port. It is also called the "
+"\"packing list\" because the package is generated by packing the files "
+"listed here. The pathnames are relative to the installation prefix (usually "
+"[.filename]#/usr/local#)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:135
+msgid "Here is a small example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:144
+#, no-wrap
+msgid ""
+"bin/oneko\n"
+"man/man1/oneko.1.gz\n"
+"lib/X11/app-defaults/Oneko\n"
+"lib/X11/oneko/cat1.xpm\n"
+"lib/X11/oneko/cat2.xpm\n"
+"lib/X11/oneko/mouse.xpm\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:147
+msgid ""
+"Refer to the man:pkg-create[8] manual page for details on the packing list."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:154
+msgid ""
+"It is recommended to keep all the filenames in this file sorted "
+"alphabetically. It will make verifying changes when upgrading the port much "
+"easier. The sorting should be applied after variable expansion takes "
+"place. The framework does this correctly when the package list is crossref:"
+"plist[plist-autoplist,generated automatically]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:160
+msgid ""
+"Creating a packing list manually can be a very tedious task. If the port "
+"installs a large numbers of files, crossref:plist[plist-autoplist,creating "
+"the packing list automatically] might save time."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:165
+msgid ""
+"There is only one case when [.filename]#pkg-plist# can be omitted from a "
+"port. If the port installs just a handful of files, list them in "
+"`PLIST_FILES`, within the port's [.filename]#Makefile#. For instance, we "
+"could get along without [.filename]#pkg-plist# in the above [."
+"filename]#oneko# port by adding these lines to the [.filename]#Makefile#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:174
+#, no-wrap
+msgid ""
+"PLIST_FILES=\tbin/oneko \\\n"
+"\t\tman/man1/oneko.1.gz \\\n"
+"\t\tlib/X11/app-defaults/Oneko \\\n"
+"\t\tlib/X11/oneko/cat1.xpm \\\n"
+"\t\tlib/X11/oneko/cat2.xpm \\\n"
+"\t\tlib/X11/oneko/mouse.xpm\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:181
+msgid ""
+"Usage of `PLIST_FILES` should not be abused. When looking for the origin of "
+"a file, people usually try to grep through the [.filename]#pkg-plist# files "
+"in the ports tree. Listing files in `PLIST_FILES` in the [."
+"filename]#Makefile# makes that search more difficult."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:186
+msgid ""
+"If a port needs to create an empty directory, or creates directories outside "
+"of [.filename]#${PREFIX}# during installation, refer to crossref:plist[plist-"
+"dir-cleaning,Cleaning Up Empty Directories] for more information."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:192
+msgid ""
+"As `PLIST_FILES` is a man:make[1] variable, any entry with spaces must be "
+"quoted. For example, if using keywords described in man:pkg-create[8] and "
+"crossref:plist[plist-keywords,Expanding Package List with Keywords], the "
+"entry must be quoted."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:196
+#, no-wrap
+msgid "PLIST_FILES=\t\"@sample ${ETCDIR}/oneko.conf.sample\"\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:200
+msgid ""
+"Later we will see how [.filename]#pkg-plist# and `PLIST_FILES` can be used "
+"to fulfill crossref:plist[plist,more sophisticated tasks]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:202
+#, no-wrap
+msgid "Creating the Checksum File"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:207
+msgid ""
+"Just type `make makesum`. The ports framework will automatically generate [."
+"filename]#distinfo#. Do not try to generate the file manually."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:209
+#, no-wrap
+msgid "Testing the Port"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:213
+msgid ""
+"Make sure that the port rules do exactly what is desired, including "
+"packaging up the port. These are the important points to verify:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:215
+msgid ""
+"[.filename]#pkg-plist# does not contain anything not installed by the port."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:216
+msgid ""
+"[.filename]#pkg-plist# contains everything that is installed by the port."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:217
+msgid ""
+"The port can be installed using the `install` target. This verifies that the "
+"install script works correctly."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:218
+msgid ""
+"The port can be deinstalled properly using the `deinstall` target. This "
+"verifies that the deinstall script works correctly."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:219
+msgid ""
+"The port only has access to network resources during the `fetch` target "
+"phase. This is important for package builders, such as package:ports-mgmt/"
+"poudriere[]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:220
+msgid ""
+"Make sure that `make package` can be run as a normal user (that is, not as "
+"`root`). If that fails, the software may need to be patched. See also "
+"crossref:uses[uses-fakeroot,`fakeroot`] and crossref:uses[uses-uidfix,"
+"`uidfix`]."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:222
+#, no-wrap
+msgid "Procedure: Recommended Test Ordering"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:224
+msgid "`make stage`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:225
+msgid "`make stage-qa`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:226
+msgid "`make package`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:227
+msgid "`make install`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:228
+msgid "`make deinstall`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:229
+msgid "`make package` (as user)"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:231
+msgid "Make certain no warnings are shown in any of the stages."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:234
+msgid ""
+"Thorough automated testing can be done with package:ports-mgmt/poudriere[] "
+"from the Ports Collection, see crossref:testing[testing-poudriere,poudriere] "
+"for more information. It maintains `jails` where all of the steps shown "
+"above can be tested without affecting the state of the host system."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:236
+#, no-wrap
+msgid "Checking the Port with `portlint`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:241
+msgid ""
+"Please use `portlint` to see if the port conforms to our guidelines. The "
+"package:ports-mgmt/portlint[] program is part of the ports collection. In "
+"particular, check that the crossref:porting-samplem[porting-samplem,"
+"Makefile] is in the right shape and the crossref:porting-pkgname[porting-"
+"pkgname,package] is named appropriately."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:245
+msgid ""
+"Do not blindly follow the output of `portlint`. It is a static lint tool and "
+"sometimes gets things wrong."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:248
+#, no-wrap
+msgid "Submitting the New Port"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:251
+msgid ""
+"Before submitting the new port, read the crossref:porting-dads[porting-dads,"
+"DOs and DON'Ts] section."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:253
+msgid ""
+"Once happy with the port, the only thing remaining is to put it in the main "
+"FreeBSD ports tree and make everybody else happy about it too."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:257
+msgid ""
+"We do not need the [.filename]#work# directory or the [.filename]#pkgname."
+"txz# package, so delete them now."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:261
+msgid ""
+"Next, create a man:patch[1], file. Assuming the port is called `oneko` and "
+"is in the `games` category."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:263
+#, no-wrap
+msgid "Creating a [.filename]#.diff# for a New Port"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:267
+msgid ""
+"Add all the files with `git add .`, then review the diff with `git diff`. "
+"For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:272
+#, no-wrap
+msgid ""
+"% git add .\n"
+"% git diff --staged\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:276
+msgid ""
+"Make sure that all required files are included, then commit the change to "
+"your local branch and generate a patch with `git format-patch`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:281
+#, no-wrap
+msgid ""
+"% git commit\n"
+"% git format-patch origin/main\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:285
+msgid ""
+"Patch generated with `git format-patch` will include author identity and "
+"email addresses, making it easier for developers to apply (with `git am`) "
+"and give proper credit."
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:289
+msgid ""
+"To make it easier for committers to apply the patch on their working copy of "
+"the ports tree, please generate the [.filename]#.diff# from the base of your "
+"ports tree."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:296
+msgid ""
+"Submit [.filename]#oneko.diff# with the https://bugs.freebsd.org/submit/[bug "
+"submission form]. Use product \"Ports & Packages\", component \"Individual "
+"Port(s)\", and follow the guidelines shown there. Add a short description "
+"of the program to the Description field of the PR (perhaps a short version "
+"of `COMMENT`), and remember to add [.filename]#oneko.diff# as an attachment."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:302
+msgid ""
+"Giving a good description in the summary of the problem report makes the "
+"work of port committers and triagers a lot easier. The expected format for "
+"new ports is \"[NEW PORT] _category/portname short description of the "
+"port_\". Using this scheme makes it easier and faster to begin the work of "
+"committing the new port."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:307
+msgid ""
+"After submitting the port, please be patient. The time needed to include a "
+"new port in FreeBSD can vary from a few days to a few months. A simple "
+"search form of the Problem Report database can be searched at https://bugs."
+"freebsd.org/bugzilla/query.cgi[]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:309
+msgid ""
+"To get a listing of _open_ port PRs, select _Open_ and _Ports & Packages_ in "
+"the search form, then click btn:[Search]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:312
+msgid ""
+"After looking at the new port, we will reply if necessary, and commit it to "
+"the tree. The submitter's name will also be added to the list of extref:"
+"{contributors}[Additional FreeBSD Contributors, contrib-additional] and "
+"other files."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/quick-porting/_index.adoc:317
+msgid ""
+"Previously it was possible to submit patches for new ports using a man:"
+"shar[1] file; this is no longer the case with the evolution of man:git[1]. "
+"Committers no longer accept man:shar[1] files as their use is prone to "
+"mistake and does not add the relevant entry in the category's [."
+"filename]#Makefile#."
+msgstr ""
diff --git a/documentation/content/en/books/porters-handbook/security/_index.adoc b/documentation/content/en/books/porters-handbook/security/_index.adoc
index ac663489ae..e04bb32e6c 100644
--- a/documentation/content/en/books/porters-handbook/security/_index.adoc
+++ b/documentation/content/en/books/porters-handbook/security/_index.adoc
@@ -6,7 +6,7 @@ description: Security instructions when making a FreeBSD Port
tags: ["security", "porting", "ports", "VuXML"]
showBookMenu: true
weight: 12
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/security/"
---
[[security]]
@@ -168,12 +168,8 @@ Now consider a realistic VuXML entry:
<references> <.>
<freebsdsa>SA-10:75.foo</freebsdsa> <.>
<freebsdpr>ports/987654</freebsdpr> <.>
- <cvename>CAN-2010-0201</cvename> <.>
- <cvename>CAN-2010-0466</cvename>
- <bid>96298</bid> <.>
- <certsa>CA-2010-99</certsa> <.>
+ <cvename>CVE-2023-48795</cvename> <.>
<certvu>740169</certvu> <.>
- <uscertsa>SA10-99A</uscertsa> <.>
<uscertta>SA10-99A</uscertta> <.>
<mlist msgid="201075606@hacker.com">http://marc.theaimsgroup.com/?l=bugtraq&amp;m=203886607825605</mlist> <.>
<url>http://j.r.hacker.com/advisories/1</url> <.>
@@ -211,17 +207,11 @@ The above example specifies that affected are versions `1.6` and up to but not i
<.> This is a https://www.freebsd.org/support/[FreeBSD problem report].
-<.> This is a http://www.cve.mitre.org/[MITRE CVE] identifier.
+<.> This is a https://cve.mitre.org/[MITRE CVE] identifier.
-<.> This is a http://www.securityfocus.com/bid[SecurityFocus Bug ID].
+<.> This is a https://www.kb.cert.org/vuls/[US-CERT] vulnerability note.
-<.> This is a http://www.cert.org/[US-CERT] security advisory.
-
-<.> This is a http://www.cert.org/[US-CERT] vulnerability note.
-
-<.> This is a http://www.cert.org/[US-CERT] Cyber Security Alert.
-
-<.> This is a http://www.cert.org/[US-CERT] Technical Cyber Security Alert.
+<.> This is a https://www.cisa.gov/news-events/cybersecurity-advisories[US-CERT] Technical Cyber Security Alert.
<.> This is a URL to an archived posting in a mailing list. The attribute `msgid` is optional and may specify the message ID of the posting.
@@ -256,6 +246,28 @@ If there is none found, add a new entry for this vulnerability.
% make newentry
....
+If the vulnerability has a https://cve.mitre.org/[MITRE CVE] identifier, the
+following command can be used instead:
+
+[source,shell]
+....
+% cd ${PORTSDIR}/security/vuxml
+% make newentry CVE_ID=CVE-YYYY-XXXXX
+....
+
+where `CVE-YYYYY-XXXX` is a valid CVE identifier.
+
+If the vulnerability is a FreeBSD Security Advisory, the
+following command can be used instead:
+
+[source,shell]
+....
+% cd ${PORTSDIR}/security/vuxml
+% make newentry SA_ID=FreeBSD-SA-YY-XXXXXX.asc
+....
+
+where `FreeBSD-SA-YY-XXXXXX.asc` is a published https://www.freebsd.org/security/advisories/[FreeBSD Security Advisory].
+
Verify its syntax and formatting:
[source,shell]
@@ -295,7 +307,7 @@ dropbear-2012.58 is vulnerable:
dropbear -- exposure of sensitive information, DoS
CVE: CVE-2013-4434
CVE: CVE-2013-4421
-WWW: http://portaudit.FreeBSD.org/8c9b48d1-3715-11e3-a624-00262d8b701d.html
+WWW: https://portaudit.FreeBSD.org/8c9b48d1-3715-11e3-a624-00262d8b701d.html
1 problem(s) in the installed packages found.
....
diff --git a/documentation/content/en/books/porters-handbook/security/_index.po b/documentation/content/en/books/porters-handbook/security/_index.po
new file mode 100644
index 0000000000..980bcf9cdf
--- /dev/null
+++ b/documentation/content/en/books/porters-handbook/security/_index.po
@@ -0,0 +1,577 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:34-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:1
+#, no-wrap
+msgid "Security instructions when making a FreeBSD Port"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:1
+#, no-wrap
+msgid "Chapter 12. Security"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:13
+#, no-wrap
+msgid "Security"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:51
+#, no-wrap
+msgid "Why Security is So Important"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:57
+msgid ""
+"Bugs are occasionally introduced to the software. Arguably, the most "
+"dangerous of them are those opening security vulnerabilities. From the "
+"technical viewpoint, such vulnerabilities are to be closed by exterminating "
+"the bugs that caused them. However, the policies for handling mere bugs and "
+"security vulnerabilities are very different."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:63
+msgid ""
+"A typical small bug affects only those users who have enabled some "
+"combination of options triggering the bug. The developer will eventually "
+"release a patch followed by a new version of the software, free of the bug, "
+"but the majority of users will not take the trouble of upgrading immediately "
+"because the bug has never vexed them. A critical bug that may cause data "
+"loss represents a graver issue. Nevertheless, prudent users know that a lot "
+"of possible accidents, besides software bugs, are likely to lead to data "
+"loss, and so they make backups of important data; in addition, a critical "
+"bug will be discovered really soon."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:71
+msgid ""
+"A security vulnerability is all different. First, it may remain unnoticed "
+"for years because often it does not cause software malfunction. Second, a "
+"malicious party can use it to gain unauthorized access to a vulnerable "
+"system, to destroy or alter sensitive data; and in the worst case the user "
+"will not even notice the harm caused. Third, exposing a vulnerable system "
+"often assists attackers to break into other systems that could not be "
+"compromised otherwise. Therefore closing a vulnerability alone is not "
+"enough: notify the audience of it in the most clear and comprehensive "
+"manner, which will allow them to evaluate the danger and take appropriate "
+"action."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:73
+#, no-wrap
+msgid "Fixing Security Vulnerabilities"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:81
+msgid ""
+"While on the subject of ports and packages, a security vulnerability may "
+"initially appear in the original distribution or in the port files. In the "
+"former case, the original software developer is likely to release a patch or "
+"a new version instantly. Update the port promptly with respect to the "
+"author's fix. If the fix is delayed for some reason, either crossref:"
+"porting-dads[dads-noinstall,mark the port as `FORBIDDEN`] or introduce a "
+"patch file to the port. In the case of a vulnerable port, just fix the port "
+"as soon as possible. In either case, follow crossref:port-upgrading[port-"
+"upgrading,the standard procedure for submitting changes] unless having "
+"rights to commit it directly to the ports tree."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:86
+msgid ""
+"Being a ports committer is not enough to commit to an arbitrary port. "
+"Remember that ports usually have maintainers, must be respected."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:94
+msgid ""
+"Please make sure that the port's revision is bumped as soon as the "
+"vulnerability has been closed. That is how the users who upgrade installed "
+"packages on a regular basis will see they need to run an update. Besides, a "
+"new package will be built and distributed over FTP and WWW mirrors, "
+"replacing the vulnerable one. Bump `PORTREVISION` unless `DISTVERSION` has "
+"changed in the course of correcting the vulnerability. That is, bump "
+"`PORTREVISION` if adding a patch file to the port, but do not bump it if "
+"updating the port to the latest software version and thus already touched "
+"`DISTVERSION`. Please refer to the crossref:makefiles[makefile-naming-"
+"revepoch,corresponding section] for more information."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:96
+#, no-wrap
+msgid "Keeping the Community Informed"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:99
+#, no-wrap
+msgid "The VuXML Database"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:107
+msgid ""
+"A very important and urgent step to take as early after a security "
+"vulnerability is discovered as possible is to notify the community of port "
+"users about the jeopardy. Such notification serves two purposes. First, if "
+"the danger is really severe it will be wise to apply an instant workaround. "
+"For example, stop the affected network service or even deinstall the port "
+"completely until the vulnerability is closed. Second, a lot of users tend "
+"to upgrade installed packages only occasionally. They will know from the "
+"notification that they _must_ update the package without delay as soon as a "
+"corrected version is available."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:111
+msgid ""
+"Given the huge number of ports in the tree, a security advisory cannot be "
+"issued on each incident without creating a flood and losing the attention of "
+"the audience when it comes to really serious matters. Therefore security "
+"vulnerabilities found in ports are recorded in https://vuxml.freebsd.org/"
+"[the FreeBSD VuXML database]. The Security Officer Team members also "
+"monitor it for issues requiring their intervention."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:114
+msgid ""
+"Committers can update the VuXML database themselves, assisting the Security "
+"Officer Team and delivering crucial information to the community more "
+"quickly. Those who are not committers or have discovered an exceptionally "
+"severe vulnerability should not hesitate to contact the Security Officer "
+"Team directly, as described on the https://www.freebsd.org/security/"
+"#how[FreeBSD Security Information] page."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:120
+msgid ""
+"The VuXML database is an XML document. Its source file [.filename]#vuln."
+"xml# is kept right inside the port package:security/vuxml[]. Therefore the "
+"file's full pathname will be [.filename]#PORTSDIR/security/vuxml/vuln.xml#. "
+"Each time a security vulnerability is discovered in a port, please add an "
+"entry for it to that file. Until familiar with VuXML, the best thing to do "
+"is to find an existing entry fitting the case at hand, then copy it and use "
+"it as a template."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:122
+#, no-wrap
+msgid "A Short Introduction to VuXML"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:134
+msgid ""
+"The full-blown XML format is complex, and far beyond the scope of this "
+"book. However, to gain basic insight on the structure of a VuXML entry only "
+"the notion of tags is needed. XML tag names are enclosed in angle "
+"brackets. Each opening <tag> must have a matching closing </tag>. Tags may "
+"be nested. If nesting, the inner tags must be closed before the outer ones. "
+"There is a hierarchy of tags, that is, more complex rules of nesting them. "
+"This is similar to HTML. The major difference is that XML is "
+"e__X__tensible, that is, based on defining custom tags. Due to its "
+"intrinsic structure XML puts otherwise amorphous data into shape. VuXML is "
+"particularly tailored to mark up descriptions of security vulnerabilities."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:136
+msgid "Now consider a realistic VuXML entry:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:187
+#, no-wrap
+msgid ""
+"<vuln vid=\"f4bc80f4-da62-11d8-90ea-0004ac98a7b9\"> <.>\n"
+" <topic>Several vulnerabilities found in Foo</topic> <.>\n"
+" <affects>\n"
+" <package>\n"
+" <name>foo</name> <.>\n"
+" <name>foo-devel</name>\n"
+" <name>ja-foo</name>\n"
+" <range><ge>1.6</ge><lt>1.9</lt></range> <.>\n"
+" <range><ge>2.*</ge><lt>2.4_1</lt></range>\n"
+" <range><eq>3.0b1</eq></range>\n"
+" </package>\n"
+" <package>\n"
+" <name>openfoo</name> <.>\n"
+" <range><lt>1.10_7</lt></range> <.>\n"
+" <range><ge>1.2,1</ge><lt>1.3_1,1</lt></range>\n"
+" </package>\n"
+" </affects>\n"
+" <description>\n"
+" <body xmlns=\"http://www.w3.org/1999/xhtml\">\n"
+" <p>J. Random Hacker reports:</p> <.>\n"
+" <blockquote\n"
+" cite=\"http://j.r.hacker.com/advisories/1\">\n"
+" <p>Several issues in the Foo software may be exploited\n"
+" via carefully crafted QUUX requests. These requests will\n"
+" permit the injection of Bar code, mumble theft, and the\n"
+" readability of the Foo administrator account.</p>\n"
+" </blockquote>\n"
+" </body>\n"
+" </description>\n"
+" <references> <.>\n"
+" <freebsdsa>SA-10:75.foo</freebsdsa> <.>\n"
+" <freebsdpr>ports/987654</freebsdpr> <.>\n"
+" <cvename>CAN-2010-0201</cvename> <.>\n"
+" <cvename>CAN-2010-0466</cvename>\n"
+" <bid>96298</bid> <.>\n"
+" <certsa>CA-2010-99</certsa> <.>\n"
+" <certvu>740169</certvu> <.>\n"
+" <uscertsa>SA10-99A</uscertsa> <.>\n"
+" <uscertta>SA10-99A</uscertta> <.>\n"
+" <mlist msgid=\"201075606@hacker.com\">http://marc.theaimsgroup.com/?l=bugtraq&amp;m=203886607825605</mlist> <.>\n"
+" <url>http://j.r.hacker.com/advisories/1</url> <.>\n"
+" </references>\n"
+" <dates>\n"
+" <discovery>2010-05-25</discovery> <.>\n"
+" <entry>2010-07-13</entry> <.>\n"
+" <modified>2010-09-17</modified> <.>\n"
+" </dates>\n"
+"</vuln>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:190
+msgid ""
+"The tag names are supposed to be self-explanatory so we shall take a closer "
+"look only at fields which needs to be filled in:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:193
+msgid ""
+"This is the top-level tag of a VuXML entry. It has a mandatory attribute, "
+"`vid`, specifying a universally unique identifier (UUID) for this entry (in "
+"quotes). Generate a UUID for each new VuXML entry (and do not forget to "
+"substitute it for the template UUID unless writing the entry from scratch). "
+"Use man:uuidgen[1] to generate a VuXML UUID."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:195
+msgid "This is a one-line description of the issue found."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:197
+msgid ""
+"The names of packages affected are listed there. Multiple names can be given "
+"since several packages may be based on a single master port or software "
+"product. This may include stable and development branches, localized "
+"versions, and slave ports featuring different choices of important build-"
+"time configuration options."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:201
+#, no-wrap
+msgid ""
+"Affected versions of the package(s) are specified there as one or more ranges using a combination of `<lt>`, `<le>`, `<eq>`, `<ge>`, and `<gt>` elements. Check that the version ranges given do not overlap.\n"
+"In a range specification, `\\*` (asterisk) denotes the smallest version number. In particular, `2.*` is less than `2.a`. Therefore an asterisk may be used for a range to match all possible `alpha`, `beta`, and `RC` versions. For instance, `<ge>2.*</ge><lt>3.*</lt>` will selectively match every `2.x` version while `<ge>2.0</ge><lt>3.0</lt>` will not since the latter misses `2.r3` and matches `3.b`.\n"
+"The above example specifies that affected are versions `1.6` and up to but not including `1.9`, versions `2.x` before `2.4_1`, and version `3.0b1`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:203
+msgid ""
+"Several related package groups (essentially, ports) can be listed in the "
+"`<affected>` section. This can be used if several software products (say "
+"FooBar, FreeBar and OpenBar) grow from the same code base and still share "
+"its bugs and vulnerabilities. Note the difference from listing multiple "
+"names within a single <package> section."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:205
+msgid ""
+"The version ranges have to allow for `PORTEPOCH` and `PORTREVISION` if "
+"applicable. Please remember that according to the collation rules, a version "
+"with a non-zero `PORTEPOCH` is greater than any version without `PORTEPOCH`, "
+"for example, `3.0,1` is greater than `3.1` or even than `8.9`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:207
+msgid ""
+"This is a summary of the issue. XHTML is used in this field. At least "
+"enclosing `<p>` and `</p>` has to appear. More complex mark-up may be used, "
+"but only for the sake of accuracy and clarity: No eye candy please."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:209
+msgid ""
+"This section contains references to relevant documents. As many references "
+"as apply are encouraged."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:211
+msgid ""
+"This is a https://www.freebsd.org/security/#adv[FreeBSD security advisory]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:213
+msgid "This is a https://www.freebsd.org/support/[FreeBSD problem report]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:215
+msgid "This is a https://cve.mitre.org/[MITRE CVE] identifier."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:217
+msgid "This is a https://www.securityfocus.com/bid/[SecurityFocus Bug ID]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:219
+msgid "This is a https://www.cert.org/[US-CERT] security advisory."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:221
+msgid "This is a https://www.cert.org/[US-CERT] vulnerability note."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:223
+msgid "This is a https://www.cert.org/[US-CERT] Cyber Security Alert."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:225
+msgid ""
+"This is a https://www.cert.org/[US-CERT] Technical Cyber Security Alert."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:227
+msgid ""
+"This is a URL to an archived posting in a mailing list. The attribute "
+"`msgid` is optional and may specify the message ID of the posting."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:229
+msgid ""
+"This is a generic URL. Only it if none of the other reference categories "
+"apply."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:231
+msgid "This is the date when the issue was disclosed (_YYYY-MM-DD_)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:233
+msgid "This is the date when the entry was added (_YYYY-MM-DD_)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:235
+msgid ""
+"This is the date when any information in the entry was last modified (_YYYY-"
+"MM-DD_). New entries must not include this field. Add it when editing an "
+"existing entry."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:237
+#, no-wrap
+msgid "Testing Changes to the VuXML Database"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:240
+msgid ""
+"This example describes a new entry for a vulnerability in the package "
+"`dropbear` that has been fixed in version `dropbear-2013.59`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:242
+msgid ""
+"As a prerequisite, install a fresh version of package:security/vuxml[] port."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:245
+msgid ""
+"First, check whether there already is an entry for this vulnerability. If "
+"there were such an entry, it would match the previous version of the "
+"package, `2013.58`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:249
+#, no-wrap
+msgid "% pkg audit dropbear-2013.58\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:252
+msgid "If there is none found, add a new entry for this vulnerability."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:257
+#, no-wrap
+msgid ""
+"% cd ${PORTSDIR}/security/vuxml\n"
+"% make newentry\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:261
+msgid ""
+"If the vulnerability has a https://cve.mitre.org/[MITRE CVE] identifier, the "
+"following command can be used instead:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:266
+#, no-wrap
+msgid ""
+"% cd ${PORTSDIR}/security/vuxml\n"
+"% make newentry CVE_ID=CVE-YYYY-XXXXX\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:269
+msgid "where `CVE-YYYYY-XXXX` is a valid CVE identifier."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:272
+msgid ""
+"If the vulnerability is a FreeBSD Security Advisory, the following command "
+"can be used instead:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:277
+#, no-wrap
+msgid ""
+"% cd ${PORTSDIR}/security/vuxml\n"
+"% make newentry SA_ID=FreeBSD-SA-YY-XXXXXX.asc\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:280
+msgid ""
+"where `FreeBSD-SA-YY-XXXXXX.asc` is a published https://www.freebsd.org/"
+"security/advisories/[FreeBSD Security Advisory]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:282
+msgid "Verify its syntax and formatting:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:286
+#, no-wrap
+msgid "% make validate\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:291
+msgid ""
+"The previous command generates the [.filename]#vuln-flat.xml# file. It can "
+"also be generated with:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:295
+#, no-wrap
+msgid "% make vuln-flat.xml\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:300
+msgid ""
+"At least one of these packages needs to be installed: package:textproc/"
+"libxml2[], package:textproc/jade[]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:303
+msgid ""
+"Verify that the `<affected>` section of the entry will match the correct "
+"packages:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:307
+#, no-wrap
+msgid "% pkg audit -f ${PORTSDIR}/security/vuxml/vuln-flat.xml dropbear-2013.58\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:310
+msgid "Make sure that the entry produces no spurious matches in the output."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:312
+msgid "Now check whether the right package versions are matched by the entry:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:321
+#, no-wrap
+msgid ""
+"% pkg audit -f ${PORTSDIR}/security/vuxml/vuln-flat.xml dropbear-2013.58 dropbear-2013.59\n"
+"dropbear-2012.58 is vulnerable:\n"
+"dropbear -- exposure of sensitive information, DoS\n"
+"CVE: CVE-2013-4434\n"
+"CVE: CVE-2013-4421\n"
+"WWW: https://portaudit.FreeBSD.org/8c9b48d1-3715-11e3-a624-00262d8b701d.html\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:323
+#, no-wrap
+msgid "1 problem(s) in the installed packages found.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/security/_index.adoc:325
+msgid "The former version matches while the latter one does not."
+msgstr ""
diff --git a/documentation/content/en/books/porters-handbook/slow-porting/_index.adoc b/documentation/content/en/books/porters-handbook/slow-porting/_index.adoc
index 7b5005f274..333817c791 100644
--- a/documentation/content/en/books/porters-handbook/slow-porting/_index.adoc
+++ b/documentation/content/en/books/porters-handbook/slow-porting/_index.adoc
@@ -6,7 +6,7 @@ description: Description about creating a FreeBSD Port when the program need som
tags: ["porting", "ports", "slow porting", "guide"]
showBookMenu: true
weight: 4
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/slow-porting/"
---
[[slow-porting]]
@@ -277,7 +277,7 @@ DOS2UNIX_WRKSRC= ${WRKDIR}
[[slow-patch-extra]]
=== Patching Conditionally
-Some ports need patches that are only applied for specific FreeBSD versions or when a particular option is enabled or disabled.
+Some ports need patches that are only applied for specific FreeBSD versions or when a particular option is enabled or disabled.
Conditional patches are specified by placing the full paths to the patch files in `EXTRA_PATCHES`.
Conditional patch file names usually start with [.filename]#extra-# although this is not necessary.
However, their file names _must not_ start with [.filename]#patch-#.
@@ -332,7 +332,7 @@ For example:
....
% ls -l files/foo-patches
-rw-r--r-- 1 root wheel 350 Jan 16 01:27 patch-Makefile.in
--rw-r--r-- 1 root wheel 3084 Jan 18 15:37 patch-configure
+-rw-r--r-- 1 root wheel 3084 Jan 18 15:37 patch-configure.ac
....
Then add this to the [.filename]#Makefile#:
diff --git a/documentation/content/en/books/porters-handbook/slow-porting/_index.po b/documentation/content/en/books/porters-handbook/slow-porting/_index.po
new file mode 100644
index 0000000000..f315886cee
--- /dev/null
+++ b/documentation/content/en/books/porters-handbook/slow-porting/_index.po
@@ -0,0 +1,742 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:34-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:1
+#, no-wrap
+msgid "Description about creating a FreeBSD Port when the program need some modifications"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:1
+#, no-wrap
+msgid "Chapter 4. Slow Porting"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:13
+#, no-wrap
+msgid "Slow Porting"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:52
+msgid ""
+"Okay, so it was not that simple, and the port required some modifications to "
+"get it to work. In this section, we will explain, step by step, how to "
+"modify it to get it to work with the ports paradigm."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:54
+#, no-wrap
+msgid "How Things Work"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:58
+msgid ""
+"First, this is the sequence of events which occurs when the user first types "
+"`make` in the port's directory. Having [.filename]#bsd.port.mk# in another "
+"window while reading this really helps to understand it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:60
+msgid ""
+"But do not worry, not many people understand exactly how [.filename]#bsd."
+"port.mk# is working... _:-)_"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:63
+msgid ""
+"The `fetch` target is run. The `fetch` target is responsible for making sure "
+"that the tarball exists locally in `DISTDIR`. If `fetch` cannot find the "
+"required files in `DISTDIR` it will look up the URL `MASTER_SITES`, which is "
+"set in the Makefile, as well as our FTP mirrors where we put distfiles as "
+"backup. It will then attempt to fetch the named distribution file with "
+"`FETCH`, assuming that the requesting site has direct access to the "
+"Internet. If that succeeds, it will save the file in `DISTDIR` for future "
+"use and proceed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:64
+msgid ""
+"The `extract` target is run. It looks for the port's distribution file "
+"(typically a compressed tarball) in `DISTDIR` and unpacks it into a "
+"temporary subdirectory specified by `WRKDIR` (defaults to [.filename]#work#)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:65
+msgid ""
+"The `patch` target is run. First, any patches defined in `PATCHFILES` are "
+"applied. Second, if any patch files named [.filename]#patch-*# are found in "
+"`PATCHDIR` (defaults to the [.filename]#files# subdirectory), they are "
+"applied at this time in alphabetical order."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:66
+msgid ""
+"The `configure` target is run. This can do any one of many different things."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:67
+msgid "If it exists, [.filename]#scripts/configure# is run."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:68
+msgid ""
+"If `HAS_CONFIGURE` or `GNU_CONFIGURE` is set, [.filename]#WRKSRC/configure# "
+"is run."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:70
+msgid ""
+"The `build` target is run. This is responsible for descending into the "
+"port's private working directory (`WRKSRC`) and building it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:71
+msgid ""
+"The `stage` target is run. This puts the final set of built files into a "
+"temporary directory (`STAGEDIR`, see crossref:special[staging,Staging]). The "
+"hierarchy of this directory mirrors that of the system on which the package "
+"will be installed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:72
+msgid ""
+"The `package` target is run. This creates a package using the files from the "
+"temporary directory created during the `stage` target and the port's [."
+"filename]#pkg-plist#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:73
+msgid ""
+"The `install` target is run. This installs the package created during the "
+"`package` target into the host system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:75
+msgid ""
+"The above are the default actions. In addition, define targets `pre-"
+"_something_` or `post-_something_`, or put scripts with those names, in the "
+"[.filename]#scripts# subdirectory, and they will be run before or after the "
+"default actions are done."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:81
+msgid ""
+"For example, if there is a `post-extract` target defined in the [."
+"filename]#Makefile#, and a file [.filename]#pre-build# in the [."
+"filename]#scripts# subdirectory, the `post-extract` target will be called "
+"after the regular extraction actions, and [.filename]#pre-build# will be "
+"executed before the default build rules are done. It is recommended to use "
+"[.filename]#Makefile# targets if the actions are simple enough, because it "
+"will be easier for someone to figure out what kind of non-default action the "
+"port requires."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:85
+msgid ""
+"The default actions are done by the `do-_something_` targets from [."
+"filename]#bsd.port.mk#. For example, the commands to extract a port are in "
+"the target `do-extract`. If the default target does not do the job right, "
+"redefine the `do-_something_` target in the [.filename]#Makefile#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:91
+msgid ""
+"The \"main\" targets (for example, `extract`, `configure`, etc.) do nothing "
+"more than make sure all the stages up to that one are completed and call the "
+"real targets or scripts, and they are not intended to be changed. To fix "
+"the extraction, fix `do-extract`, but never ever change the way `extract` "
+"operates! Additionally, the target `post-deinstall` is invalid and is not "
+"run by the ports infrastructure."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:94
+msgid ""
+"Now that what goes on when the user types `make install` is better "
+"understood, let us go through the recommended steps to create the perfect "
+"port."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:96
+#, no-wrap
+msgid "Getting the Original Sources"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:100
+msgid ""
+"Get the original sources (normally) as a compressed tarball ([.filename]#foo."
+"tar.gz# or [.filename]#foo.tar.bz2#) and copy it into `DISTDIR`. Always use "
+"_mainstream_ sources when and where possible."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:107
+msgid ""
+"Set the variable `MASTER_SITES` to reflect where the original tarball "
+"resides. Shorthand definitions exist for most mainstream sites in [."
+"filename]#bsd.sites.mk#. Please use these sites-and the associated "
+"definitions-if at all possible, to help avoid the problem of having the same "
+"information repeated over again many times in the source base. As these "
+"sites tend to change over time, this becomes a maintenance nightmare for "
+"everyone involved. See crossref:makefiles[makefile-master_sites,"
+"`MASTER_SITES`] for details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:109
+msgid ""
+"If there is no FTP/HTTP site that is well-connected to the net, or can only "
+"find sites that have irritatingly non-standard formats, put a copy on a "
+"reliable FTP or HTTP server (for example, a home page)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:113
+msgid ""
+"If a convenient and reliable place to put the distfile cannot be found, we "
+"can \"house\" it ourselves on `ftp.FreeBSD.org`; however, this is the least-"
+"preferred solution. The distfile must be placed into [.filename]#~/"
+"public_distfiles/# of someone's `freefall` account. Ask the person who "
+"commits the port to do this. This person will also set `MASTER_SITES` to "
+"`LOCAL/_username_` where `_username_` is their FreeBSD cluster login."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:118
+msgid ""
+"If the port's distfile changes all the time without any kind of version "
+"update by the author, consider putting the distfile on a home page and "
+"listing it as the first `MASTER_SITES`. Try to talk the port author out of "
+"doing this; it really does help to establish some kind of source code "
+"control. Hosting a specific version will prevent users from getting "
+"`checksum mismatch` errors, and also reduce the workload of maintainers of "
+"our FTP site. Also, if there is only one master site for the port, it is "
+"recommended to house a backup on a home page and list it as the second "
+"`MASTER_SITES`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:122
+msgid ""
+"If the port requires additional patches that are available on the Internet, "
+"fetch them too and put them in `DISTDIR`. Do not worry if they come from a "
+"site other than where the main source tarball comes, we have a way to handle "
+"these situations (see the description of crossref:makefiles[porting-"
+"patchfiles,PATCHFILES] below)."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:124
+#, no-wrap
+msgid "Modifying the Port"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:129
+msgid ""
+"Unpack a copy of the tarball in a private directory and make whatever "
+"changes are necessary to get the port to compile properly under the current "
+"version of FreeBSD. Keep _careful track_ of steps, as they will be needed "
+"to automate the process shortly. Everything, including the deletion, "
+"addition, or modification of files has to be doable using an automated "
+"script or patch file when the port is finished."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:132
+msgid ""
+"If the port requires significant user interaction/customization to compile "
+"or install, take a look at one of Larry Wall's classic Configure scripts and "
+"perhaps do something similar. The goal of the new ports collection is to "
+"make each port as \"plug-and-play\" as possible for the end-user while using "
+"a minimum of disk space."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:136
+msgid ""
+"Unless explicitly stated, patch files, scripts, and other files created and "
+"contributed to the FreeBSD ports collection are assumed to be covered by the "
+"standard BSD copyright conditions."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:139
+#, no-wrap
+msgid "Patching"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:143
+msgid ""
+"In the preparation of the port, files that have been added or changed can be "
+"recorded with man:diff[1] for later feeding to man:patch[1]. Doing this "
+"with a typical file involves saving a copy of the original file before "
+"making any changes using a [.filename]#.orig# suffix."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:147
+#, no-wrap
+msgid "% cp file file.orig\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:151
+msgid ""
+"After all changes have been made, `cd` back to the port directory. Use "
+"`make makepatch` to generate updated patch files in the [.filename]#files# "
+"directory."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:156
+msgid ""
+"Use `BINARY_ALIAS` to substitute hardcoded commands during the build and "
+"avoid patching build files. See crossref:makefiles[binary-alias,Use "
+"`BINARY_ALIAS` to Rename Commands Instead of Patching the Build] for more "
+"information."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:159
+#, no-wrap
+msgid "General Rules for Patching"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:166
+msgid ""
+"Patch files are stored in `PATCHDIR`, usually [.filename]#files/#, from "
+"where they will be automatically applied. All patches must be relative to "
+"`WRKSRC`. Typically `WRKSRC` is a subdirectory of `WRKDIR`, the directory "
+"where the distfile is extracted. Use `make -V WRKSRC` to see the actual "
+"path. The patch names are to follow these rules:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:168
+msgid ""
+"Avoid having more than one patch modify the same file. For example, having "
+"both [.filename]#patch-foobar.c# and [.filename]#patch-foobar.c2# making "
+"changes to [.filename]#${WRKSRC}/foobar.c# makes them fragile and difficult "
+"to debug."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:169
+msgid ""
+"When creating names for patch files, replace each underscore (`\\_`) with "
+"two underscores (`\\__`) and each slash (`/`) with one underscore (`_`). For "
+"example, to patch a file named [.filename]#src/freeglut_joystick.c#, name "
+"the corresponding patch [.filename]#patch-src_freeglut__joystick.c#. Do not "
+"name patches like [.filename]#patch-aa# or [.filename]#patch-ab#. Always use "
+"the path and file name in patch names. Using `make makepatch` automatically "
+"generates the correct names."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:170
+msgid ""
+"A patch may modify multiple files if the changes are related and the patch "
+"is named appropriately. For example, [.filename]#patch-add-missing-stdlib.h#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:171
+msgid ""
+"Only use characters `[-+.\\_a-zA-Z0-9]` for naming patches. In particular, "
+"__do not use `::` as a path separator,__ use `_` instead."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:176
+msgid ""
+"Minimize the amount of non-functional whitespace changes in patches. It is "
+"common in the Open Source world for projects to share large amounts of a "
+"code base, but obey different style and indenting rules. When taking a "
+"working piece of functionality from one project to fix similar areas in "
+"another, please be careful: the resulting patch may be full of non-"
+"functional changes. It not only increases the size of the ports repository "
+"but makes it hard to find out what exactly caused the problem and what was "
+"changed at all."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:178
+msgid ""
+"If a file must be deleted, do it in the `post-extract` target rather than as "
+"part of the patch."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:180
+#, no-wrap
+msgid "Manual Patch Generation"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:187
+msgid ""
+"Manual patch creation is usually not necessary. Automatic patch generation "
+"as described earlier in this section is the preferred method. However, "
+"manual patching may be required occasionally."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:192
+msgid ""
+"Patches are saved into files named [.filename]#patch-*# where * indicates "
+"the pathname of the file that is patched, such as [.filename]#patch-"
+"Imakefile# or [.filename]#patch-src-config.h#. Patches with file names "
+"which do not start with [.filename]#patch-# will not be applied "
+"automatically."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:195
+msgid ""
+"After the file has been modified, man:diff[1] is used to record the "
+"differences between the original and the modified version. `-u` causes man:"
+"diff[1] to produce \"unified\" diffs, the preferred form."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:199
+#, no-wrap
+msgid "% diff -u file.orig file > patch-pathname-file\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:202
+msgid ""
+"When generating patches for new, added files, `-N` is used to tell man:"
+"diff[1] to treat the non-existent original file as if it existed but was "
+"empty:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:206
+#, no-wrap
+msgid "% diff -u -N newfile.orig newfile > patch-pathname-newfile\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:212
+msgid ""
+"Using the recurse (`-r`) option to man:diff[1] to generate patches is fine, "
+"but please look at the resulting patches to make sure there is no "
+"unnecessary junk in there. In particular, diffs between two backup files, [."
+"filename]##Makefile##s when the port uses `Imake` or GNU `configure`, etc., "
+"are unnecessary and have to be deleted. If it was necessary to edit [."
+"filename]#configure.in# and run `autoconf` to regenerate `configure`, do not "
+"take the diffs of `configure` (it often grows to a few thousand lines!). "
+"Instead, define `USES=autoreconf` and take the diffs of [."
+"filename]#configure.in#."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:214
+#, no-wrap
+msgid "Simple Automatic Replacements"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:218
+msgid ""
+"Simple replacements can be performed directly from the port [."
+"filename]#Makefile# using the in-place mode of man:sed[1]. This is useful "
+"when changes use the value of a variable:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:223
+#, no-wrap
+msgid ""
+"post-patch:\n"
+"\t@${REINPLACE_CMD} -e 's|/usr/local|${PREFIX}|g' ${WRKSRC}/Makefile\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:229
+msgid ""
+"Only use man:sed[1] to replace variable content. You must use patch files "
+"instead of man:sed[1] to replace static content."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:234
+msgid ""
+"Quite often, software being ported uses the CR/LF convention in source "
+"files. This may cause problems with further patching, compiler warnings, or "
+"script execution (like `/bin/sh^M not found`.) To quickly convert all files "
+"from CR/LF to just LF, add this entry to the port [.filename]#Makefile#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:238
+#, no-wrap
+msgid "USES=\tdos2unix\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:241
+msgid "A list of specific files to convert can be given:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:246
+#, no-wrap
+msgid ""
+"USES=\tdos2unix\n"
+"DOS2UNIX_FILES=\tutil.c util.h\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:253
+msgid ""
+"Use `DOS2UNIX_REGEX` to convert a group of files across subdirectories. Its "
+"argument is a man:find[1]-compatible regular expression. More on the format "
+"is in man:re_format[7]. This option is useful for converting all files of a "
+"given extension. For example, convert all source code files, leaving binary "
+"files intact:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:258
+#, no-wrap
+msgid ""
+"USES=\tdos2unix\n"
+"DOS2UNIX_REGEX=\t.*\\.([ch]|cpp)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:261
+msgid ""
+"A similar option is `DOS2UNIX_GLOB`, which runs `find` for each element "
+"listed in it."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:266
+#, no-wrap
+msgid ""
+"USES=\tdos2unix\n"
+"DOS2UNIX_GLOB=\t*.c *.cpp *.h\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:270
+msgid ""
+"The base directory for the conversion can be set. This is useful when there "
+"are multiple distfiles and several contain files which require line-ending "
+"conversion."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:275
+#, no-wrap
+msgid ""
+"USES=\tdos2unix\n"
+"DOS2UNIX_WRKSRC=\t${WRKDIR}\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:278
+#, no-wrap
+msgid "Patching Conditionally"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:285
+msgid ""
+"Some ports need patches that are only applied for specific FreeBSD versions "
+"or when a particular option is enabled or disabled. Conditional patches are "
+"specified by placing the full paths to the patch files in `EXTRA_PATCHES`. "
+"Conditional patch file names usually start with [.filename]#extra-# although "
+"this is not necessary. However, their file names _must not_ start with [."
+"filename]#patch-#. If they do, they are applied unconditionally by the "
+"framework which is undesired for conditional patches."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:287
+#, no-wrap
+msgid "Applying a Patch for a Specific FreeBSD Version"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:293
+#, no-wrap
+msgid ".include <bsd.port.options.mk>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:298
+#, no-wrap
+msgid ""
+"# Patch in the iconv const qualifier before this\n"
+".if ${OPSYS} == FreeBSD && ${OSVERSION} < 1100069\n"
+"EXTRA_PATCHES=\t${PATCHDIR}/extra-patch-fbsd10\n"
+".endif\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:300
+#, no-wrap
+msgid ".include <bsd.port.mk>\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:305
+#, no-wrap
+msgid "Optionally Applying a Patch"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:310
+msgid ""
+"When an crossref:makefiles[makefile-options,option] requires a patch, use "
+"``opt_EXTRA_PATCHES`` and ``opt_EXTRA_PATCHES_OFF`` to make the patch "
+"conditional on the `opt` option. See crossref:makefiles[options-variables,"
+"Generic Variables Replacement, `OPT_VARIABLE` and `OPT_VARIABLE_OFF`] for "
+"more information."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:317
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\t FOO BAR\n"
+"FOO_EXTRA_PATCHES= ${PATCHDIR}/extra-patch-foo\n"
+"BAR_EXTRA_PATCHES_OFF=\t${PATCHDIR}/extra-patch-bar.c \\\n"
+"\t\t${PATCHDIR}/extra-patch-bar.h\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:322
+#, no-wrap
+msgid "Using `EXTRA_PATCHES` With a Directory"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:327
+msgid ""
+"Sometimes, there are many patches that are needed for a feature, in this "
+"case, it is possible to point `EXTRA_PATCHES` to a directory, and it will "
+"automatically apply all files named [.filename]#patch-*# in it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:330
+msgid ""
+"Create a subdirectory in [.filename]#${PATCHDIR}#, and move the patches in "
+"it. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:336
+#, no-wrap
+msgid ""
+"% ls -l files/foo-patches\n"
+"-rw-r--r-- 1 root wheel 350 Jan 16 01:27 patch-Makefile.in\n"
+"-rw-r--r-- 1 root wheel 3084 Jan 18 15:37 patch-configure.ac\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:339
+msgid "Then add this to the [.filename]#Makefile#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:344
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tFOO\n"
+"FOO_EXTRA_PATCHES=\t${PATCHDIR}/foo-patches\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:347
+msgid ""
+"The framework will then use all the files named [.filename]#patch-*# in that "
+"directory."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:350
+#, no-wrap
+msgid "Configuring"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:354
+msgid ""
+"Include any additional customization commands in the [.filename]#configure# "
+"script and save it in the [.filename]#scripts# subdirectory. As mentioned "
+"above, it is also possible do this with [.filename]#Makefile# targets and/or "
+"scripts with the name [.filename]#pre-configure# or [.filename]#post-"
+"configure#."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:356
+#, no-wrap
+msgid "Handling User Input"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:363
+msgid ""
+"If the port requires user input to build, configure, or install, set "
+"`IS_INTERACTIVE` in the [.filename]#Makefile#. This will allow \"overnight "
+"builds\" to skip it. If the user sets the variable `BATCH` in their "
+"environment (and if the user sets the variable `INTERACTIVE`, then _only_ "
+"those ports requiring interaction are built). This will save a lot of "
+"wasted time on the set of machines that continually build ports (see below)."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/slow-porting/_index.adoc:365
+msgid ""
+"It is also recommended that if there are reasonable default answers to the "
+"questions, `PACKAGE_BUILDING` be used to turn off the interactive script "
+"when it is set. This will allow us to build the packages for CDROMs and FTP."
+msgstr ""
diff --git a/documentation/content/en/books/porters-handbook/special/_index.adoc b/documentation/content/en/books/porters-handbook/special/_index.adoc
index f12830c179..c30e8c058e 100644
--- a/documentation/content/en/books/porters-handbook/special/_index.adoc
+++ b/documentation/content/en/books/porters-handbook/special/_index.adoc
@@ -6,7 +6,7 @@ description: Special considerations when creating a new FreeBSD Port
tags: ["special considerations", "Handling Symbolic Links", "Bundled Libraries"]
showBookMenu: true
weight: 6
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/special/"
---
[[special]]
@@ -49,6 +49,30 @@ endif::[]
This section explains the most common things to consider when creating a port.
+[[splitting-long-files]]
+== Splitting long files
+
+Sometimes, port [.filename]#Makefiles# can be really long.
+For example, rust ports can have a very long `CARGO_CRATES` list.
+In other cases, the [.filename]#Makefile# might have code that varies depending on the architecture.
+In such cases, it can be convenient to split the original [.filename]#Makefile# into several files.
+[.filename]#bsd.port.mk# automatically includes some types of [.filename]#Makefiles# into the main port [.filename]#Makefile#.
+
+These are the files that the framework handles automatically if they are found:
+
+* [.filename]#Makefile.crates#. An example can be found in package:audio/ebur128[].
+* [.filename]#Makefile.inc#. An example can be found in package:net/ntp[].
+* [.filename]#Makefile.${ARCH}-${OPSYS}#
+* [.filename]#Makefile.${OPSYS}#. An example can be found in package:net/cvsup-static[].
+* [.filename]#Makefile.${ARCH}#
+* [.filename]#Makefile.local#
+
+It is also usual practice to split the packaging list of the port into several files if the list varies a lot from one architecture to another or depends on the selected flavor.
+In this case, the [.filename]#pkg-plist# file for each architecture is named following the pattern [.filename]#pkg-plist.${ARCH}# or [.filename]#pkg-plist.${FLAVOR}#.
+The framework does not create the packaging list automatically if multiple [.filename]#pkg-plist# files exist.
+It is the responsibility of the porter to select the proper [.filename]#pkg-plist# and assign it to the `PLIST` variable.
+Examples on how to deal with this can be found in package:audio/logitechmediaserver[] and package:deskutils/libportal[].
+
[[staging]]
== Staging
@@ -82,7 +106,7 @@ It sets up defaults for ports that do not fetch, build, or install anything.
====
Staging is enabled by prepending `STAGEDIR` to paths used in the `pre-install`, `do-install`, and `post-install` targets (see the examples through the book).
-Typically, this includes `PREFIX`, `ETCDIR`, `DATADIR`, `EXAMPLESDIR`, `MANPREFIX`, `DOCSDIR`, and so on.
+Typically, this includes `PREFIX`, `ETCDIR`, `DATADIR`, `EXAMPLESDIR`, `DOCSDIR`, and so on.
Directories should be created as part of the `post-install` target.
Avoid using absolute paths whenever possible.
@@ -138,7 +162,7 @@ Some software requires the porter to locate third-party libraries and add the re
Other software bundles all necessary libraries into the distribution file.
The second approach seems easier at first, but there are some serious drawbacks:
-This list is loosely based on the https://fedoraproject.org/wiki/Packaging:No_Bundled_Libraries[Fedora] and http://wiki.gentoo.org/wiki/Why_not_bundle_dependencies[Gentoo] wikis, both licensed under the http://creativecommons.org/licenses/by-sa/3.0/[CC-BY-SA 3.0] license.
+This list is loosely based on the https://fedoraproject.org/wiki/Packaging:No_Bundled_Libraries[Fedora] and https://wiki.gentoo.org/wiki/Why_not_bundle_dependencies[Gentoo] wikis, both licensed under the https://creativecommons.org/licenses/by-sa/3.0/[CC-BY-SA 3.0] license.
Security::
If vulnerabilities are found in the upstream library and fixed there, they might not be fixed in the library bundled with the port.
@@ -337,7 +361,7 @@ Otherwise, it is almost impossible to either fix the problem, or test if it has
[[using-make]]
=== `make`, `gmake`, and `imake`
-Several differing `make` implementations exist. Ported software often requires a particular implementation, like GNU`make`, known in FreeBSD as `gmake`.
+Several differing `make` implementations exist. Ported software often requires a particular implementation, like GNU `make`, known in FreeBSD as `gmake`.
If the port uses GNU make, add `gmake` to `USES`.
@@ -354,7 +378,7 @@ The same goes for `install` and `INSTALL_TARGET`.
=== `configure` Script
If the port uses the `configure` script to generate [.filename]#Makefile# from [.filename]#Makefile.in#, set `GNU_CONFIGURE=yes`.
-To give extra arguments to the `configure` script (the default argument is `--prefix=${PREFIX} --infodir=${PREFIX}/${INFO_PATH} --mandir=${MANPREFIX}/man --build=${CONFIGURE_TARGET}`), set those extra arguments in `CONFIGURE_ARGS`.
+To give extra arguments to the `configure` script (the default argument is `--prefix=${PREFIX} --infodir=${PREFIX}/${INFO_PATH} --mandir=${PREFIX}/man --build=${CONFIGURE_TARGET}`), set those extra arguments in `CONFIGURE_ARGS`.
Extra environment variables can be passed using `CONFIGURE_ENV`.
[[using-configure-variables]]
@@ -505,6 +529,9 @@ For ports that use Cargo, define `USES=cargo`.
|`CARGO_CRATES`
|
|List of crates the port depends on. Each entry needs to have a format like `cratename-semver` for example, `libc-0.2.40`. Port maintainers can generate this list from [.filename]#Cargo.lock# using `make cargo-crates`. Manually bumping crate versions is possible but be mindful of transitive dependencies.
+If the list generated by `make cargo-crates` is big, it might be convenient to place it inside a `Makefile.crates` file in the top-level port directory.
+If present, the ports framework sources that file automatically.
+This help keep the main port Makefile within a manageable size.
|`CARGO_FEATURES`
|
@@ -607,6 +634,7 @@ CATEGORIES= devel
MAINTAINER= tobik@FreeBSD.org
COMMENT= Display statistics about your code
+WWW= https://github.com/XAMPPRocky/tokei/
USES= cargo
USE_GITHUB= yes
@@ -651,6 +679,7 @@ CATEGORIES= devel
MAINTAINER= tobik@FreeBSD.org
COMMENT= Display statistics about your code
+WWW= https://github.com/XAMPPRocky/tokei/
USES= cargo
USE_GITHUB= yes
@@ -690,7 +719,7 @@ rust/crates/atty-0.2.9.tar.gz 100% of 5898 B 81 MBps 00m00s
The port is now ready for a test build and further adjustments like creating a plist, writing a description, adding license information, options, etc. as normal.
-If you are not testing your port in a clean environment like with Poudriere, remember to run `make clean` before any testing.
+If you are not testing your port in a clean environment like with poudriere, remember to run `make clean` before any testing.
====
[[cargo-ex2]]
@@ -815,12 +844,13 @@ In most cases, it is sufficient to set the `GO_MODULE` variable to the value spe
[.programlisting]
....
PORTNAME= hey
-PORTVERSION= 0.1.4
-DISTVERSIONPREFIX= v
+DISTVERSIONPREFIX= v
+DISTVERSION= 0.1.4
CATEGORIES= benchmarks
MAINTAINER= dmgk@FreeBSD.org
COMMENT= Tiny program that sends some load to a web application
+WWW= https://github.com/rakyll/hey/
LICENSE= APACHE20
LICENSE_FILE= ${WRKSRC}/LICENSE
@@ -835,7 +865,7 @@ PLIST_FILES= bin/hey
If the "easy" way is not adequate or more control over dependencies is needed, the full porting process is described below.
-Creating a Go based port is a five stage process.
+Creating a Go-based port is a five-stage process.
First we need to provide a ports template that fetches the application distribution file:
[.programlisting]
@@ -847,6 +877,7 @@ CATEGORIES= devel
MAINTAINER= tobik@FreeBSD.org
COMMENT= Remote repository management made easy
+WWW= https://github.com/x-motemen/ghq/
USES= go:modules
USE_GITHUB= yes
@@ -896,6 +927,7 @@ CATEGORIES= devel
MAINTAINER= tobik@FreeBSD.org
COMMENT= Remote repository management made easy
+WWW= https://github.com/x-motemen/ghq/
USES= go:modules
USE_GITHUB= yes
@@ -930,7 +962,7 @@ daviddengcn-go-colortext-186a3d44e920_GH0.tar. 4534 B 1098 kBps 00s
The port is now ready for a test build and further adjustments like creating a plist, writing a description, adding license information, options, etc. as normal.
-If you are not testing your port in a clean environment like with Poudriere, remember to run `make clean` before any testing.
+If you are not testing your port in a clean environment like with poudriere, remember to run `make clean` before any testing.
====
[[go-ex2]]
@@ -965,8 +997,8 @@ Refer to crossref:uses[uses-cabal,`cabal`] for a list of variables that can be s
.Creating a Port for a Hackage-hosted Haskell Application
[example]
====
-When preparing a Haskell Cabal port, the package:devel/hs-cabal-install[] program is required, so make sure it is installed beforehand.
-First we need to define common ports variables that allows cabal-install to fetch the package distribution file:
+When preparing a Haskell Cabal port, package:devel/hs-cabal-install[] and package:ports-mgmt/hs-cabal2tuple[] programs are required, so make sure they are installed beforehand.
+First we need to define common ports variables that allow cabal-install to fetch the package distribution file:
[.programlisting]
....
@@ -976,13 +1008,14 @@ CATEGORIES= devel
MAINTAINER= haskell@FreeBSD.org
COMMENT= Shell script analysis tool
+WWW= https://www.shellcheck.net/
USES= cabal
.include <bsd.port.mk>
....
-This minimal Makefile allows us to fetch the distribution file:
+This minimal Makefile fetches the distribution file with the `cabal-extract` helper target:
[source,shell]
....
@@ -995,49 +1028,34 @@ Downloaded ShellCheck-0.6.0
Unpacking to ShellCheck-0.6.0/
....
-Now we have ShellCheck.cabal package description file, which allows us to fetch all package's dependencies, including transitive ones:
+Now that we have ShellCheck.cabal package description file under `${WRKSRC}`, we can use `cabal-configure` to generate the build plan:
[source,shell]
....
-% make cabal-extract-deps
+% make cabal-configure
[...]
Resolving dependencies...
-Downloading base-orphans-0.8.2
-Downloaded base-orphans-0.8.2
-Downloading primitive-0.7.0.0
-Starting base-orphans-0.8.2 (lib)
-Building base-orphans-0.8.2 (lib)
-Downloaded primitive-0.7.0.0
-Downloading dlist-0.8.0.7
+Build profile: -w ghc-8.10.7 -O1
+In order, the following would be built (use -v for more details):
+ - Diff-0.4.1 (lib) (requires download & build)
+ - OneTuple-0.3.1 (lib) (requires download & build)
[...]
....
-As a side effect, the package's dependencies are also compiled, so the command may take some time.
Once done, a list of required dependencies can generated:
[source,shell]
....
% make make-use-cabal
-USE_CABAL=QuickCheck-2.12.6.1 \
-hashable-1.3.0.0 \
-integer-logarithms-1.0.3 \
+USE_CABAL= QuickCheck-2.12.6.1 \
+ hashable-1.3.0.0 \
+ integer-logarithms-1.0.3 \
[...]
....
Haskell packages may contain revisions, just like FreeBSD ports.
-Revisions can affect only [.filename]#.cabal# files, but it is still important to pull them in.
-To check `USE_CABAL` items for available revision updates, run following command:
-
-[source,shell]
-....
-% make make-use-cabal-revs
-USE_CABAL=QuickCheck-2.12.6.1_1 \
-hashable-1.3.0.0 \
-integer-logarithms-1.0.3_2 \
-[...]
-....
-
-Note additional version numbers after `_` symbol.
+Revisions can affect [.filename]#.cabal# files only.
+Note additional version numbers after the `_` symbol.
Put newly generated `USE_CABAL` list instead of an old one.
Finally, [.filename]#distinfo# needs to be regenerated to contain all the distribution files:
@@ -1056,7 +1074,126 @@ QuickCheck-2.12.6.1/QuickCheck-2.12.6.1.tar.gz 65 kB 361 kBps 00s
The port is now ready for a test build and further adjustments like creating a plist, writing a description, adding license information, options, etc. as normal.
-If you are not testing your port in a clean environment like with Poudriere, remember to run `make clean` before any testing.
+If you are not testing your port in a clean environment like with poudriere, remember to run `make clean` before any testing.
+====
+
+Some Haskell ports install various data files under `share/${PORTNAME}`. For such cases special handling is required on the port side.
+The port should define the `CABAL_WRAPPER_SCRIPTS` knob listing each executable that is going to use data files. Moreover, in rare cases the program
+being ported uses data files of other Haskell packages, in which case the `FOO_DATADIR_VARS` comes to the rescue.
+
+[[cabal-ex2]]
+.Handling Data Files in a Haskell Port
+[example]
+====
+`devel/hs-profiteur` is a Haskell application that generates a single-page HTML with some content.
+
+[.programlisting]
+....
+PORTNAME= profiteur
+
+[...]
+
+USES= cabal
+
+USE_CABAL= OneTuple-0.3.1_2 \
+ QuickCheck-2.14.2 \
+ [...]
+
+.include <bsd.port.mk>
+....
+
+It installs HTML templates under `share/profiteur`, so we need to add `CABAL_WRAPPER_SCRIPTS` knob:
+
+[.programlisting]
+....
+[...]
+
+USE_CABAL= OneTuple-0.3.1_2 \
+ QuickCheck-2.14.2 \
+ [...]
+
+
+CABAL_WRAPPER_SCRIPTS= ${CABAL_EXECUTABLES}
+
+.include <bsd.port.mk>
+....
+
+The program also tries to access the `jquery.js` file, which is a part of `js-jquery-3.3.1` Haskell package.
+For that file to be found, we need to make the wrapper script to look for `js-jquery` data files in `share/profiteur` too.
+We use `profiteur_DATADIR_VARS` for this:
+
+[.programlisting]
+....
+[...]
+
+CABAL_WRAPPER_SCRIPTS= ${CABAL_EXECUTABLES}
+profiteur_DATADIR_VARS= js-jquery
+
+.include <bsd.port.mk>
+....
+
+Now the port will install the actual binary into `libexec/cabal/profiteur` and the script into `bin/profiteur`.
+
+====
+
+There is no easy way to find out a proper value for the `FOO_DATADIR_VARS` knob apart from running the program and checking that everything works.
+Luckily, the need to use `FOO_DATADIR_VARS` is very rare.
+
+Another corner case when porting complex Haskell programs is the presence of VCS dependencies in the `cabal.project` file.
+
+[[cabal-ex3]]
+.Porting Haskell Applications with VCS Dependencies
+[example]
+====
+
+`net-p2p/cardano-node` is an extremely complex piece of software. In its `cabal.project` there are a lot of blocks like this:
+
+[.programlisting]
+....
+[...]
+source-repository-package
+ type: git
+ location: https://github.com/input-output-hk/cardano-crypto
+ tag: f73079303f663e028288f9f4a9e08bcca39a923e
+[...]
+....
+
+Dependencies of type `source-repository-package` are automatically pulled in by `cabal` during the build process.
+Unfortunately, this makes use of the network after the `fetch` stage. This is disallowed by the ports framework.
+These sources need to be listed in the port's Makefile. The `make-use-cabal` helper target can make it easy for packages hosted on GitHub.
+Running this target after the usual `cabal-extract` and `cabal-configure` will produce not only the `USE_CABAL` knob, but also `GH_TUPLE`:
+
+[source,shell]
+....
+% make make-use-cabal
+USE_CABAL= Diff-0.4.1 \
+ Glob-0.10.2_3 \
+ HUnit-1.6.2.0 \
+ [...]
+
+GH_TUPLE= input-output-hk:cardano-base:0f3a867493059e650cda69e20a5cbf1ace289a57:cardano_base/dist-newstyle/src/cardano-b_-c8db9876882556ed \
+ input-output-hk:cardano-crypto:f73079303f663e028288f9f4a9e08bcca39a923e:cardano_crypto/dist-newstyle/src/cardano-c_-253fd88117badd8f \
+ [...]
+....
+
+It might be useful to separate the `GH_TUPLE` items coming from `make-use-cabal` from the other ones to make it easy to update the port:
+
+[.programlisting]
+....
+GH_TUPLE= input-output-hk:cardano-base:0f3a867493059e650cda69e20a5cbf1ace289a57:cardano_base/dist-newstyle/src/cardano-b_-c8db9876882556ed \
+ input-output-hk:cardano-crypto:f73079303f663e028288f9f4a9e08bcca39a923e:cardano_crypto/dist-newstyle/src/cardano-c_-253fd88117badd8f \
+ [...]
+
+GH_TUPLE+= bitcoin-core:secp256k1:ac83be33d0956faf6b7f61a60ab524ef7d6a473a:secp
+....
+
+Haskell ports with VCS dependencies also require the following hack for the time being:
+
+[.programlisting]
+....
+BINARY_ALIAS= git=true
+....
+
====
[[using-autotools]]
@@ -1165,7 +1302,7 @@ If `MASTER_SITES` is set to `CPAN`, the correct subdirectory is usually selected
If the default subdirectory is wrong, `CPAN/Module` can be used to change it.
`MASTER_SITES` can also be set to the old `MASTER_SITE_PERL_CPAN`, then the preferred value of `MASTER_SITE_SUBDIR` is the top-level hierarchy name.
For example, the recommended value for `p5-Module-Name` is `Module`.
-The top-level hierarchy can be examined at http://cpan.org/modules/by-module/[cpan.org].
+The top-level hierarchy can be examined at https://cpan.org/modules/by-module/[cpan.org].
This keeps the port working when the author of the module changes.
The exception to this rule is when the relevant directory does not exist or the distfile does not exist in that directory.
@@ -1203,8 +1340,8 @@ When a port needs Perl support, it must set `USES=perl5` with the optional `USE_
[NOTE]
====
-Ports of Perl modules which do not have an official website must link to `cpan.org` in the WWW line of [.filename]#pkg-descr#.
-The preferred URL form is `http://search.cpan.org/dist/Module-Name/` (including the trailing slash).
+Ports of Perl modules which do not have an official website must link to `cpan.org` in the WWW line of [.filename]#Makefile#.
+The preferred URL form is `https://search.cpan.org/dist/Module-Name/` (including the trailing slash).
====
[NOTE]
@@ -1371,6 +1508,7 @@ USE_XORG= x11 xpm
If the port requires a Motif library, define `USES= motif` in the [.filename]#Makefile#.
Default Motif implementation is package:x11-toolkits/open-motif[].
Users can choose package:x11-toolkits/lesstif[] instead by setting `WANT_LESSTIF` in their [.filename]#make.conf#.
+Similarly package:x11-toolkits/open-motif-devel[] can be chosen by setting `WANT_OPEN_MOTIF_DEVEL` in [.filename]#make.conf#.
`MOTIFLIB` will be set by [.filename]#motif.mk# to reference the appropriate Motif library.
Please patch the source of the port to use `${MOTIFLIB}` wherever the Motif library is referenced in the original [.filename]#Makefile# or [.filename]#Imakefile#.
@@ -1405,7 +1543,7 @@ USES= display
[[desktop-entries]]
=== Desktop Entries
-Desktop entries (http://standards.freedesktop.org/desktop-entry-spec/latest/[a Freedesktop standard]) provide a way to automatically adjust desktop features when a new program is installed, without requiring user intervention.
+Desktop entries (https://standards.freedesktop.org/desktop-entry-spec/latest/[a Freedesktop standard]) provide a way to automatically adjust desktop features when a new program is installed, without requiring user intervention.
For example, newly-installed programs automatically appear in the application menus of compatible desktop environments.
Desktop entries originated in the GNOME desktop environment, but are now a standard and also work with KDE and Xfce.
This bit of automation provides a real benefit to the user, and desktop entries are encouraged for applications which can be used in a desktop environment.
@@ -1434,7 +1572,7 @@ Syntax is:
DESKTOP_ENTRIES= "NAME" "COMMENT" "ICON" "COMMAND" "CATEGORY" StartupNotify
....
-The list of possible categories is available on the http://standards.freedesktop.org/menu-spec/latest/apa.html[Freedesktop website].
+The list of possible categories is available on the https://standards.freedesktop.org/menu-spec/latest/apa.html[Freedesktop website].
`StartupNotify` indicates whether the application is compatible with _startup notifications_.
These are typically a graphic indicator like a clock that appear at the mouse pointer, menu, or panel to give the user an indication when a program is starting.
A program that is compatible with startup notifications clears the indicator after it has started.
@@ -1450,6 +1588,10 @@ DESKTOP_ENTRIES= "ToME" "Roguelike game based on JRR Tolkien's work" \
false
....
+`DESKTOP_ENTRIES` are installed in the directory pointed to by the `DESKTOPDIR`
+variable.
+`DESKTOPDIR` defaults to [.filename]#${PREFIX}/share/applications#
+
[[using-gnome]]
== Using GNOME
@@ -1483,8 +1625,6 @@ Please use it as a guide for creating new ports.
[.programlisting]
....
-# $FreeBSD$
-
PORTNAME= regexxer
DISTVERSION= 0.10
CATEGORIES= devel textproc gnome
@@ -1492,6 +1632,7 @@ MASTER_SITES= GNOME
MAINTAINER= kwm@FreeBSD.org
COMMENT= Interactive tool for performing search and replace operations
+WWW= http://regexxer.sourceforge.net/
USES= gettext gmake localbase:ldflags pathfix pkgconfig tar:xz
GNU_CONFIGURE= yes
@@ -1955,7 +2096,8 @@ For ports that are part of Qt itself, see crossref:uses[uses-qt-dist,`qt-dist`].
[[qt-common]]
=== Ports That Require Qt
-The Ports Collection provides support for Qt 5 with `USES+=qt:5`.
+The Ports Collection provides support for Qt 5 and Qt 6 with `USES+=qt:5` and
+`USES+=qt:6` respectively.
Set `USE_QT` to the list of required Qt components (libraries, tools, plugins).
The Qt framework exports a number of variables which can be used by ports, some of them listed below:
@@ -1996,7 +2138,7 @@ Individual Qt tool and library dependencies must be specified in `USE_QT`.
Every component can be suffixed with `_build` or `_run`, the suffix indicating whether the dependency on the component is at buildtime or runtime.
If unsuffixed, the component will be depended on at both build- and runtime.
Usually, library components are specified unsuffixed, tool components are mostly specified with the `_build` suffix and plugin components are specified with the `_run` suffix.
-The most commonly used components are listed below (all available components are listed in `_USE_QT_ALL`, and `_USE_QT5_ONLY` in [.filename]#/usr/ports/Mk/Uses/qt.mk#):
+The most commonly used components are listed below (all available components are listed in `_USE_QT_ALL`, which is generated from `_USE_QT_COMMON` and `_USE_QT[56]_ONLY` in [.filename]#/usr/ports/Mk/Uses/qt.mk#):
[[using-qt-library-list]]
.Available Qt Library Components
@@ -2008,9 +2150,15 @@ The most commonly used components are listed below (all available components are
|`3d`
|Qt3D module
+|`5compat`
+|Qt 5 compatibility module for Qt 6
+
|`assistant`
|Qt 5 documentation browser
+|`base`
+|Qt 6 base module
+
|`canvas3d`
|Qt canvas3d module
@@ -2062,12 +2210,18 @@ The most commonly used components are listed below (all available components are
|`l10n`
|Qt localized messages
+|`languageserver`
+|Qt 6 Language Server Protocol implementation
+
|`linguist`
|Qt 5 translation tool
|`location`
|Qt location module
+|`lottie`
+|Qt 6 QML API for rendering graphics and animations
+
|`multimedia`
|Qt audio, video, radio and camera support module
@@ -2090,7 +2244,10 @@ The most commonly used components are listed below (all available components are
|Qt 5 screen magnifier
|`plugininfo`
-|Qt5 plugin metadata dumper
+|Qt 5 plugin metadata dumper
+
+|`positioning`
+|Qt 6 positioning API from sources such as satellite, wifi or text files.
|`printsupport`
|Qt print support module
@@ -2120,7 +2277,7 @@ The most commonly used components are listed below (all available components are
|Set of controls for building complete interfaces in Qt Quick
|`remoteobjects`
-|Qt5 SXCML module
+|Qt 5 SXCML module
|`script`
|Qt 4-compatible scripting module
@@ -2129,7 +2286,7 @@ The most commonly used components are listed below (all available components are
|Qt Script additional components
|`scxml`
-|Qt5 SXCML module
+|Qt 5 SXCML module
|`sensors`
|Qt sensors module
@@ -2140,8 +2297,11 @@ The most commonly used components are listed below (all available components are
|`serialport`
|Qt functions to access serial ports
+|`shadertools`
+|Qt 6 tools for the cross-platform Qt shader pipeline
+
|`speech`
-|Accessibilty features for Qt5
+|Accessibility features for Qt5
|`sql`
|Qt SQL database integration module
@@ -2173,6 +2333,12 @@ The most commonly used components are listed below (all available components are
|`testlib`
|Qt unit testing module
+|`tools`
+|Qt 6 assorted tools
+
+|`translations`
+|Qt 6 translation module
+
|`uiplugin`
|Custom Qt widget plugin interface for Qt Designer
@@ -2183,7 +2349,7 @@ The most commonly used components are listed below (all available components are
|Qt 5 Virtual Keyboard Module
|`wayland`
-|Qt5 wrapper for Wayland
+|Qt 5 wrapper for Wayland
|`webchannel`
|Qt 5 library for integration of C++/QML with HTML/js clients
@@ -3004,7 +3170,8 @@ The most current version is package:java/openjdk18[], with package:java/openjdk1
|Define for the remaining variables to have any effect.
|`JAVA_VERSION`
-|List of space-separated suitable Java versions for the port. An optional `"+"` allows specifying a range of versions (allowed values: `7[+] 8[+] 11[+] 12[+] 13[+] 14[+] 15[+] 16[+] 17[+] 18[+]`).
+|List of space-separated suitable Java versions for the port.
+An optional `\+` allows specifying a range of versions (allowed values: `8[+] 11[\+] 17[+] 18[\+] 19[+] 20[\+] 21[+]`).
|`JAVA_OS`
|List of space-separated suitable JDK port operating systems for the port (allowed values: `native linux`).
@@ -3292,8 +3459,9 @@ PORTNAME= Date
DISTVERSION= 1.4.3
CATEGORIES= devel www pear
-MAINTAINER= example@domain.com
+MAINTAINER= someone@example.org
COMMENT= PEAR Date and Time Zone Classes
+WWW= https://pear.php.net/package/Date/
USES= pear
@@ -3341,6 +3509,7 @@ CATEGORIES= devel www pear
MAINTAINER= horde@FreeBSD.org
COMMENT= Horde Core Framework libraries
+WWW= https://pear.horde.org/
OPTIONS_DEFINE= KOLAB SOCKETS
KOLAB_DESC= Enable Kolab server support
@@ -3386,7 +3555,7 @@ PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
[cols="1,1", frame="none"]
|===
|`USES=python`
-|The port needs Python. The minimal required version can be specified with values such as `2.7+`. Version ranges can also be specified by separating two version numbers with a dash: `USES=python:3.2-3.3`
+|The port needs Python. The minimal required version can be specified with values such as `3.10+`. Version ranges can also be specified by separating two version numbers with a dash: `USES=python:3.8-3.9`. Note that `USES=python` does _not_ cover Python 2.7, it needs to be requested explicitly with `USES=python:2.7+`.
|`USE_PYTHON=distutils`
|Use Python distutils for configuring, compiling, and installing. This is required when the port comes with [.filename]#setup.py#. This overrides the `do-build` and `do-install` targets and may also override `do-configure` if `GNU_CONFIGURE` is not defined. Additionally, it implies `USE_PYTHON=flavors`.
@@ -3463,8 +3632,9 @@ PORTNAME= sample
DISTVERSION= 1.2.3
CATEGORIES= devel
-MAINTAINER= john@doe.tld
+MAINTAINER= fred.bloggs@example.com
COMMENT= Python sample module
+WWW= https://example.com/project/sample/
RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}six>0:devel/py-six@${PY_FLAVOR}
@@ -3529,69 +3699,6 @@ It is possible to specify the desired version of `tcl` by appending `:_xx_`, for
See the crossref:uses[uses-tcl,`USES=tcl`] and crossref:uses[uses-tk,`USES=tk`] of crossref:uses[uses,Using `USES` Macros] for a full description of those variables.
A complete list of those variables is available in [.filename]#/usr/ports/Mk/Uses/tcl.mk#.
-[[using-ruby]]
-== Using Ruby
-
-[[using-ruby-variables]]
-.Useful Variables for Ports That Use Ruby
-[cols="1,1", frame="none", options="header"]
-|===
-| Variable
-| Description
-
-|`USE_RUBY`
-|Adds build and run dependencies on Ruby.
-
-|`USE_RUBY_EXTCONF`
-|The port uses [.filename]#extconf.rb# to configure.
-
-|`USE_RUBY_SETUP`
-|The port uses [.filename]#setup.rb# to configure.
-
-|`RUBY_SETUP`
-|Override the name of the setup script from [.filename]#setup.rb#. Another common value is [.filename]#install.rb#.
-|===
-
-This table shows the selected variables available to port authors via the ports infrastructure.
-These variables are used to install files into their proper locations.
-Use them in [.filename]#pkg-plist# as much as possible.
-Do not redefine these variables in the port.
-
-[[using-ruby-variables-ro]]
-.Selected Read-Only Variables for Ports That Use Ruby
-[cols="1,1,1", frame="none", options="header"]
-|===
-| Variable
-| Description
-| Example value
-
-|`RUBY_PKGNAMEPREFIX`
-|Used as a `PKGNAMEPREFIX` to distinguish packages for different Ruby versions.
-|`ruby19-`
-
-|`RUBY_VERSION`
-|Full version of Ruby in the form of `x.y.z[.p]`.
-|`1.9.3.484`
-
-|`RUBY_SITELIBDIR`
-|Architecture independent libraries installation path.
-|`/usr/local/lib/ruby/site_ruby/1.9`
-
-|`RUBY_SITEARCHLIBDIR`
-|Architecture dependent libraries installation path.
-|`/usr/local/lib/ruby/site_ruby/1.9/amd64-freebsd10`
-
-|`RUBY_MODDOCDIR`
-|Module documentation installation path.
-|`/usr/local/share/doc/ruby19/patsy`
-
-|`RUBY_MODEXAMPLESDIR`
-|Module examples installation path.
-|`/usr/local/share/examples/ruby19/patsy`
-|===
-
-A complete list of available variables can be found in [.filename]#/usr/ports/Mk/bsd.ruby.mk#.
-
[[using-sdl]]
== Using SDL
@@ -3991,11 +4098,11 @@ the Lua API changes to some extent in every version, and configuration tools lik
Software that uses Lua may have been written to auto-detect the Lua version in use.
In general ports should override this assumption, and force the use of the specific Lua version selected as described above.
-Depending on the software being ported, this might require any or all of:
+Depending on the software being ported, this might require any or all of:
-* Using `LUA_VER` as part of a parameter to the software's configuration script via `CONFIGURE_ARGS` or `CONFIGURE_ENV` (or equivalent for other build systems);
-* Adding `-I${LUA_INCDIR}`, `-L${LUA_LIBDIR}`, and `-llua-${LUA_VER}` to `CFLAGS`, `LDFLAGS`, `LIBS` respectively as appropriate;
-* Patch the software's configuration or build files to select the correct version.
+* Using `LUA_VER` as part of a parameter to the software's configuration script via `CONFIGURE_ARGS` or `CONFIGURE_ENV` (or equivalent for other build systems);
+* Adding `-I${LUA_INCDIR}`, `-L${LUA_LIBDIR}`, and `-llua-${LUA_VER}` to `CFLAGS`, `LDFLAGS`, `LIBS` respectively as appropriate;
+* Patch the software's configuration or build files to select the correct version.
[[lua-version-flavors]]
@@ -4029,10 +4136,10 @@ USES= lua:flavors
....
This operates the same way as the `module` parameter described above, but without the assumption that the package should be documented as a Lua module (so `LUA_DOCSDIR` and `LUA_EXAMPLESDIR` are not defined by default).
-However, the port may choose to define `LUA_DOCSUBDIR` as a suitable subdirectory name (usually the port's `PORTNAME` as long as this does not conflict with the `PORTNAME` of any module), in which case the framework will define both `LUA_DOCSDIR` and `LUA_EXAMPLESDIR`.
+However, the port may choose to define `LUA_DOCSUBDIR` as a suitable subdirectory name (usually the port's `PORTNAME` as long as this does not conflict with the `PORTNAME` of any module), in which case the framework will define both `LUA_DOCSDIR` and `LUA_EXAMPLESDIR`.
As with module ports, a flavored port should avoid installing files that would conflict between versions.
-Typically this is done by adding `LUA_VER_STR` as a suffix to program names (e.g. using crossref:uses[uses-uniquefiles,`uniquefiles`]), and otherwise using either `LUA_VER` or `LUA_VER_STR` as part of any other files or subdirectories used outside of `LUA_MODLIBDIR` and `LUA_MODSHAREDIR`.
+Typically this is done by adding `LUA_VER_STR` as a suffix to program names (e.g. using crossref:uses[uses-uniquefiles,`uniquefiles`]), and otherwise using either `LUA_VER` or `LUA_VER_STR` as part of any other files or subdirectories used outside of `LUA_MODLIBDIR` and `LUA_MODSHAREDIR`.
[[lua-defined-variables]]
=== Defined Variables
@@ -4047,10 +4154,10 @@ These variables are available in the port.
| Description
|`LUA_VER`
-|The Lua version that is going to be used (for example, `5.1`)
+|The Lua version that is going to be used (for example, `5.4`)
|`LUA_VER_STR`
-|The Lua version without the dots (for example, `51`)
+|The Lua version without the dots (for example, `54`)
|`LUA_FLAVOR`
|The flavor name corresponding to the selected Lua version, to be used for specifying dependencies
@@ -4083,10 +4190,10 @@ These variables are available in the port.
|The package name prefix used by Lua modules
|`LUA_CMD`
-|The name of the Lua interpreter (e.g. `lua53`)
+|The name of the Lua interpreter (e.g. `lua54`)
|`LUAC_CMD`
-|The name of the Lua compiler (e.g. `luac53`)
+|The name of the Lua compiler (e.g. `luac54`)
|===
These additional variables are available for ports that specified the `module` parameter:
@@ -4121,8 +4228,9 @@ PORTNAME= sample
DISTVERSION= 1.2.3
CATEGORIES= whatever
-MAINTAINER= john@doe.tld
+MAINTAINER= fred.bloggs@example.com
COMMENT= Sample
+WWW= https://example.com/lua_sample/sample/
RUN_DEPENDS= ${LUA_REFMODLIBDIR}/lpeg.so:devel/lua-lpeg@${LUA_FLAVOR}
@@ -4144,8 +4252,9 @@ DISTVERSION= 1.2.3
CATEGORIES= whatever
PKGNAMEPREFIX= ${LUA_PKGNAMEPREFIX}
-MAINTAINER= john@doe.tld
+MAINTAINER= fred.bloggs@example.com
COMMENT= Sample
+WWW= https://example.com/lua_sample/sample/
USES= lua:module
@@ -4156,6 +4265,244 @@ DOCSDIR= ${LUA_DOCSDIR}
====
+[[using-guile]]
+== Using Guile
+
+This section describes the status of Guile in the ports tree and its integration with the ports system.
+
+[[guile-introduction]]
+=== Introduction
+
+There are multiple versions of the Guile libraries and corresponding interpreters, which conflict between them (install files under the same name).
+In the ports tree this problem has been solved by installing each version under a different name using version number suffixes.
+In most cases, applications should detect the correct version from the configuration variables provided and use `pkg-config` to determine the name and associated paths.
+However, some applications (especially those using their own configuration rules for `cmake` or `meson`) will always try to use the latest available version.
+In this case, either patch the port or declare a build conflict (see the `conflicts` option below) to ensure that the correct dependency is generated when building outside of poudriere.
+
+Applications that use Guile should normally build for just one version,
+preferably the one specified in `DEFAULT_VERSIONS`,
+or failing that the latest version that they support.
+However, Guile or Scheme libraries, or extension modules for Guile are built in a separate flavor for each Guile version that they support,
+and dependencies on such ports should specify the flavor using the `@${GUILE_FLAVOR}` suffix on the port origin.
+
+[[guile-version]]
+=== Version Selection
+
+A port using Guile should define `USES=guile:__arg,arg...__` with appropriate arguments as follows:
+
+[[guile-defined-uses-args]]
+.Arguments Defined for Ports That Use Guile
+[cols="1m,4", frame="none", options="header"]
+|===
+| Name
+| Description
+
+|_X.Y_
+|Declare compatibility with Guile version `X.Y`.
+Currently available versions are `1.8` (obsolete), `2.2` and `3.0`.
+Multiple versions may be specified.
+
+|flavors
+|Create a flavor for every Guile version specified.
+The version specified by `DEFAULT_VERSIONS` will become the default flavor.
+Flavor names are of the form `guileXY`.
+
+|build
+|Add the Guile interpreter as a build dependency only, rather than a library dependency.
+`build` and `run` may both be specified.
+
+|run
+|Add the Guile interpreter as a runtime dependency only, rather than a library dependency.
+`build` and `run` may both be specified.
+
+|alias
+|Add `BINARY_ALIAS` values for the interpreter and tools.
+
+|conflicts
+|Declare `CONFLICTS_BUILD` for Guile versions newer than the one selected.
+Use this when the port cannot be configured to use a specific Guile version.
+|===
+
+Some additional arguments are available for handling unusual cases; see `Mk/Uses/guile.mk` for details.
+
+Unless `build` or `run` is specified, then `LIB_DEPENDS` receives both the `libguile` library dependency and also any additional dependencies required by the guile version, e.g. `libgc`.
+Normally the port should not need any additional dependencies related to its use of Guile.
+
+[[guile-version-config]]
+=== Configuration flags
+
+Software that uses Guile should be using the `pkg-config` mechanism to obtain compiler and linker flags.
+Some older or esoteric ports may be using `guile-config` or obtaining values directly from `guile` instead,
+which should also work (the `alias` argument may be useful in some of these cases).
+
+The framework tries to inform the port of the desired Guile version using the following methods:
+
+* `GUILE_EFFECTIVE_VERSION` is added to `CONFIGURE_ENV`;
+* The full path to the Guile binary is specified in the `GUILE` variable in `CONFIGURE_ENV` and `MAKE_ENV`;
+* If the `alias` option is used, the desired Guile version's binaries are the ones aliased;
+* If the `alias` option is not used, paths to the desired Guile version's tools (`guild`, `guile-config`, etc.) are added to `CONFIGURE_ENV` and `MAKE_ENV` as variables `GUILD`, `GUILE_CONFIG`, etc.
+
+For some ports, it may be necessary to specify the version in additional ways, such as via `CONFIGURE_ARGS` or `MESON_ARGS`,
+depending on the port.
+
+If none of these methods cause the port to select the specified Guile version when other versions are present,
+then preferably patch it to do so.
+If that is not feasible, specify the `conflicts` option to prevent building the port under conditions where it will detect the wrong version.
+
+[[guile-version-flavors]]
+=== Version Flavors
+
+A port which installs a Guile extension or library, or a Scheme library that precompiles for Guile,
+should build a separate flavor for each supported Guile version.
+This is done by adding the `flavors` option.
+
+Since each flavor must have a different package name, such ports must set `PKGNAMESUFFIX`, typically:
+
+[.programlisting]
+....
+PKGNAMESUFFIX= -${FLAVOR}
+....
+
+Such ports must install Scheme files to `GUILE_SITE_DIR` rather than to `GUILE_GLOBAL_SITE_DIR` even when the files are not version-specific.
+This often requires patching the port.
+
+Additionally, if such a port installs a `.pc` file, it must be placed in `GUILE_PKGCONFIG_PATH` rather than in the global `pkgconfig` directory.
+This allows dependent ports to find a correct configuration for the specific Guile version in use.
+
+If a Guile extension port installs a `.so` file, then it must usually be placed in the Guile-version-specific `extensions` directory.
+`USE_LDCONFIG` should usually not be used.
+
+Any other files installed by a flavored port must likewise be in version-specific directories or use version-specific filenames.
+For documentation and examples, `GUILE_DOCS_DIR` and `GUILE_EXAMPLES_DIR` specify suitable locations in which the port should create a subdirectory,
+see below.
+
+[[guile-defined-variables]]
+=== Defined Variables
+
+These variables are available in the port.
+
+[[using-guile-variables-ports]]
+.Variables Defined for Ports That Use Guile
+[cols="1,3m,6", frame="none", options="header"]
+|===
+| Name
+| Sample Value
+| Description
+
+|`GUILE_VER`
+|3.0
+|Guile version in use.
+
+|`GUILE_SFX`
+|3
+|Short suffix used on some names.
+Use only with care; may be non-unique or may change in the future.
+
+|`GUILE_FLAVOR`
+|guile30
+|Flavor name corresponding to the selected version.
+
+|`GUILE_PORT`
+|lang/guile3
+|Port origin of the specified Guile version.
+
+|`GUILE_PREFIX`
+|${PREFIX}
+|Directory prefix to be used for installation.
+
+|`GUILE_CMD`
+|guile-3.0
+|Name of the Guile interpreter, with version suffix.
+
+|`GUILE_CMDPATH`
+|${LOCALBASE}/bin/guile-3.0
+|Full path to the Guile interpreter.
+
+|`GUILD_CMD`
+|guild-3.0
+|Name of the Guild tool, with version suffix.
+
+|`GUILD_CMDPATH`
+|${LOCALBASE}/bin/guild-3.0
+|Full path to the Guild tool.
+
+|`++GUILE_*_CMD++` +
+`++GUILE_*_CMDPATH++`
+|
+|Like `GUILE_CMD` and `GUILE_CMDPATH`, but for other tool binaries.
+
+|`GUILE_PKGCONFIG_PATH`
+|${LOCALBASE}/libdata/pkgconfig/guile/3.0
+|Where packages using `flavors` should install `.pc` files.
+
+|`GUILE_INFO_PATH`
+|share/info/guile3
+|A suitable value for `INFO_PATH` for ports using the `flavors` option.
+|===
+
+The following are defined as variables and as `PLIST_SUB` entries.
+The variable form is suffixed with `_DIR` and is a full path (prefixed with `GUILE_PREFIX`).
+
+[[using-guile-path-variables-ports]]
+.Path Substitutions Defined for Ports That Use Guile
+[cols="1m,3m,6", frame="none", options="header"]
+|===
+| Name
+| Sample Value
+| Description
+
+|GUILE_GLOBAL_SITE
+|share/guile/site
+|Site directory shared by all guile versions; this should not usually be used.
+
+|GUILE_SITE
+|share/guile/3.0/site
+|Site directory for the selected Guile version.
+
+|GUILE_SITE_CCACHE
+|lib/guile/3.0/site-ccache
+|Directory for compiled bytecode files.
+
+|GUILE_DOCS
+|share/doc/guile30
+|Parent directory for version-specific documentation.
+
+|GUILE_EXAMPLES
+|share/examples/guile30
+|Parent directory for version-specific examples.
+|===
+
+[[guile-examples]]
+=== Examples
+
+[[guile-app-Makefile]]
+.Makefile for an application using Guile
+[example]
+====
+This example shows how to reference a Guile library required at build and run time.
+Notice that the reference must specify a flavor.
+This example assumes that the application is using `pkg-config` to locate dependencies.
+
+[.programlisting]
+....
+PORTNAME= sample
+DISTVERSION= 1.2.3
+CATEGORIES= whatever
+
+MAINTAINER= fred.bloggs@example.com
+COMMENT= Sample
+WWW= https://example.com/guile_sample/sample/
+
+BUILD_DEPENDS= guile-lib-${GUILE_FLAVOR}>=0.2.5:devel/guile-lib@${GUILE_FLAVOR}
+RUN_DEPENDS= guile-lib-${GUILE_FLAVOR}>=0.2.5:devel/guile-lib@${GUILE_FLAVOR}
+
+USES= guile:2.2,3.0 pkgconfig
+
+.include <bsd.port.mk>
+....
+
+====
+
[[using-iconv]]
== Using `iconv`
@@ -4354,6 +4701,53 @@ However, Xfce components and non-Xfce dependencies of the port must be included
Do not count on an Xfce component to provide a sub-dependency other than itself for the main port.
====
+[[using-budgie]]
+== Using Budgie
+
+Applications or libraries depending on the Budgie desktop should set `USES= budgie` and set `USE_BUDGIE` to the list of required components.
+
+[cols="1,1", frame="none", options="header"]
+|===
+| Name
+| Description
+
+| `libbudgie`
+| Desktop core (library)
+
+| `libmagpie`
+| Budgie's X11 window manager and compositor library
+
+| `raven`
+| All-in-one center in panel for accessing different applications widgets
+
+| `screensaver`
+| Desktop-specific screensaver
+
+|===
+
+[NOTE]
+====
+All application widgets communicate through the *org.budgie_desktop.Raven* service.
+
+The default dependency is lib- and run-time, it can be changed with `:build` or `:run`, for example:
+
+[.programlisting]
+....
+USES= budgie
+USE_BUDGIE= screensaver:build
+....
+====
+
+[[budgie-components-example]]
+.`USE_BUDGIE` Example
+[example]
+====
+[.programlisting]
+....
+USES= budgie gettext gnome meson pkgconfig
+USE_BUDGIE= libbudgie
+....
+====
[[using-databases]]
== Using Databases
@@ -4464,8 +4858,6 @@ An example simple [.filename]#rc.d# script to start the doormand daemon:
....
#!/bin/sh
-# $FreeBSD$
-#
# PROVIDE: doormand
# REQUIRE: LOGIN
# KEYWORD: shutdown
@@ -4538,7 +4930,6 @@ The package:devel/rclint[] port can check for most of these, but it is not a sub
[.procedure]
. If this is a new file, does it have a [.filename]#.sh# extension? If so, that must be changed to just [.filename]#file.in# since [.filename]#rc.d# files may not end with that extension.
-. Does the file have a `$FreeBSD$` tag?
. Do the name of the file (minus [.filename]#.in#), the `PROVIDE` line, and `$` _name_ all match? The file name matching `PROVIDE` makes debugging easier, especially for man:rcorder[8] issues. Matching the file name and `$`_name_ makes it easier to figure out which variables are relevant in [.filename]#rc.conf[.local]#. It is also a policy for all new scripts, including those in the base system.
. Is the `REQUIRE` line set to `LOGIN`? This is mandatory for scripts that run as a non-root user. If it runs as root, is there a good reason for it to run prior to `LOGIN`? If not, it must run after so that local scrips can be loosely grouped to a point in man:rcorder[8] after most everything in the base is already running.
. Does the script start a persistent service? If so, it must have `KEYWORD: shutdown`.
@@ -4624,17 +5015,20 @@ It is not necessary to make an option for it.
If an option is used, though, always enable it in `OPTIONS_DEFAULT`.
[[shell-completion-paths]]
-.Shell completion file paths
-[cols="1,1", frame="none"]
+.Full shell completion file names
+[cols="1,1,1", frame="none"]
|===
|`bash`
-|[.filename]#${PREFIX}/etc/bash_completion.d#
+|[.filename]#${PREFIX}/etc/bash_completion.d# or [.filename]#${PREFIX}/share/bash-completion/completions#
+|(any unique file names in one of these folders)
|`fish`
-|[.filename]#${PREFIX}/share/fish/vendor_completions.d#
+|[.filename]#${PREFIX}/share/fish/completions/${PORTNAME}.fish#
+|
|`zsh`
-|[.filename]#${PREFIX}/share/zsh/site-functions#
+|[.filename]#${PREFIX}/share/zsh/site-functions/_${PORTNAME}#
+|
|===
Do not register any dependencies on the shells themselves.
diff --git a/documentation/content/en/books/porters-handbook/special/_index.po b/documentation/content/en/books/porters-handbook/special/_index.po
new file mode 100644
index 0000000000..75973cf19a
--- /dev/null
+++ b/documentation/content/en/books/porters-handbook/special/_index.po
@@ -0,0 +1,13307 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:34-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1
+#, no-wrap
+msgid "Special considerations when creating a new FreeBSD Port"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1
+#, no-wrap
+msgid "Chapter 6. Special Considerations"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:13
+#, no-wrap
+msgid "Special Considerations"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:51
+msgid ""
+"This section explains the most common things to consider when creating a "
+"port."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:53
+#, no-wrap
+msgid "Splitting long files"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:60
+msgid ""
+"Sometimes, port [.filename]#Makefiles# can be really long. For example, "
+"rust ports can have a very long `CARGO_CRATES` list. In other cases, the [."
+"filename]#Makefile# might have code that varies depending on the "
+"architecture. In such cases, it can be convenient to split the original [."
+"filename]#Makefile# into several files. [.filename]#bsd.port.mk# "
+"automatically includes some types of [.filename]#Makefiles# into the main "
+"port [.filename]#Makefile#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:62
+msgid ""
+"These are the files that the framework handles automatically if they are "
+"found:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:64
+msgid ""
+"[.filename]#Makefile.crates#. An example can be found in package:audio/"
+"ebur128[]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:65
+msgid ""
+"[.filename]#Makefile.inc#. An example can be found in package:net/ntp[]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:66
+msgid "[.filename]#Makefile.${ARCH}-${OPSYS}#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:67
+msgid ""
+"[.filename]#Makefile.${OPSYS}#. An example can be found in package:net/cvsup-"
+"static[]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:68
+msgid "[.filename]#Makefile.${ARCH}#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:69
+msgid "[.filename]#Makefile.local#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:75
+msgid ""
+"It is also usual practice to split the packaging list of the port into "
+"several files if the list varies a lot from one architecture to another or "
+"depends on the selected flavor. In this case, the [.filename]#pkg-plist# "
+"file for each architecture is named following the pattern [.filename]#pkg-"
+"plist.${ARCH}# or [.filename]#pkg-plist.${FLAVOR}#. The framework does not "
+"create the packaging list automatically if multiple [.filename]#pkg-plist# "
+"files exist. It is the responsibility of the porter to select the proper [."
+"filename]#pkg-plist# and assign it to the `PLIST` variable. Examples on how "
+"to deal with this can be found in package:audio/logitechmediaserver[] and "
+"package:deskutils/libportal[]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:77
+#, no-wrap
+msgid "Staging"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:84
+msgid ""
+"[.filename]#bsd.port.mk# expects ports to work with a \"stage directory\". "
+"This means that a port must not install files directly to the regular "
+"destination directories (that is, under `PREFIX`, for example) but instead "
+"into a separate directory from which the package is then built. In many "
+"cases, this does not require root privileges, making it possible to build "
+"packages as an unprivileged user. With staging, the port is built and "
+"installed into the stage directory, `STAGEDIR`. A package is created from "
+"the stage directory and then installed on the system. Automake tools refer "
+"to this concept as `DESTDIR`, but in FreeBSD, `DESTDIR` has a different "
+"meaning (see crossref:testing[porting-prefix,`PREFIX` and `DESTDIR`])."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:91
+msgid ""
+"No port _really_ needs to be root. It can mostly be avoided by using "
+"crossref:uses[uses-uidfix,`USES=uidfix`]. If the port still runs commands "
+"like man:chown[8], man:chgrp[1], or forces owner or group with man:"
+"install[1] then use crossref:uses[uses-fakeroot,`USES=fakeroot`] to fake "
+"those calls. Some patching of the port's [.filename]#Makefiles# will be "
+"needed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:96
+msgid ""
+"Meta ports, or ports that do not install files themselves but only depend on "
+"other ports, must avoid needlessly extracting the man:mtree[8] to the stage "
+"directory. This is the basic directory layout of the package, and these "
+"empty directories will be seen as orphans. To prevent man:mtree[8] "
+"extraction, add this line:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:100
+#, no-wrap
+msgid "NO_MTREE=\tyes\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:106
+msgid ""
+"Metaports should use <<uses-metaport,`USES=metaport`>>. It sets up defaults "
+"for ports that do not fetch, build, or install anything."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:112
+msgid ""
+"Staging is enabled by prepending `STAGEDIR` to paths used in the `pre-"
+"install`, `do-install`, and `post-install` targets (see the examples through "
+"the book). Typically, this includes `PREFIX`, `ETCDIR`, `DATADIR`, "
+"`EXAMPLESDIR`, `MANPREFIX`, `DOCSDIR`, and so on. Directories should be "
+"created as part of the `post-install` target. Avoid using absolute paths "
+"whenever possible."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:116
+msgid ""
+"Ports that install kernel modules must prepend `STAGEDIR` to their "
+"destination, by default [.filename]#/boot/modules#."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:119
+#, no-wrap
+msgid "Handling Symbolic Links"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:124
+msgid ""
+"When creating a symbolic link, relative ones are strongly recommended. Use "
+"`${RLN}` to create relative symbolic links. It uses man:install[1] under "
+"the hood to automatically figure out the relative link to create."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:126
+#, no-wrap
+msgid "Create Relative Symbolic Links Automatically"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:130
+msgid ""
+"`${RLN}` uses man:install[1]'s relative symbolic feature which frees the "
+"porter of computing the relative path."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:136
+#, no-wrap
+msgid ""
+"${RLN} ${STAGEDIR}${PREFIX}/lib/libfoo.so.42 ${STAGEDIR}${PREFIX}/lib/libfoo.so\n"
+"${RLN} ${STAGEDIR}${PREFIX}/libexec/foo/bar ${STAGEDIR}${PREFIX}/bin/bar\n"
+"${RLN} ${STAGEDIR}/var/cache/foo ${STAGEDIR}${PREFIX}/share/foo\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:139
+msgid "Will generate:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:149
+#, no-wrap
+msgid ""
+"% ls -lF ${STAGEDIR}${PREFIX}/lib\n"
+"lrwxr-xr-x 1 nobody nobody 181 Aug 3 11:27 libfoo.so@ -> libfoo.so.42\n"
+"-rwxr-xr-x 1 nobody nobody 15 Aug 3 11:24 libfoo.so.42*\n"
+"% ls -lF ${STAGEDIR}${PREFIX}/bin\n"
+"lrwxr-xr-x 1 nobody nobody 181 Aug 3 11:27 bar@ -> ../libexec/foo/bar\n"
+"% ls -lF ${STAGEDIRDIR}${PREFIX}/share\n"
+"lrwxr-xr-x 1 nobody nobody 181 Aug 3 11:27 foo@ -> ../../../var/cache/foo\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:154
+#, no-wrap
+msgid "Bundled Libraries"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:157
+msgid ""
+"This section explains why bundled dependencies are considered bad and what "
+"to do about them."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:159
+#, no-wrap
+msgid "Why Bundled Libraries Are Bad"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:164
+msgid ""
+"Some software requires the porter to locate third-party libraries and add "
+"the required dependencies to the port. Other software bundles all necessary "
+"libraries into the distribution file. The second approach seems easier at "
+"first, but there are some serious drawbacks:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:166
+msgid ""
+"This list is loosely based on the https://fedoraproject.org/wiki/Packaging:"
+"No_Bundled_Libraries[Fedora] and https://wiki.gentoo.org/wiki/"
+"Why_not_bundle_dependencies[Gentoo] wikis, both licensed under the https://"
+"creativecommons.org/licenses/by-sa/3.0/[CC-BY-SA 3.0] license."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:167
+#, no-wrap
+msgid "Security"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:173
+msgid ""
+"If vulnerabilities are found in the upstream library and fixed there, they "
+"might not be fixed in the library bundled with the port. One reason could "
+"be that the author is not aware of the problem. This means that the porter "
+"must fix them, or upgrade to a non-vulnerable version, and send a patch to "
+"the author. This all takes time, which results in software being vulnerable "
+"longer than necessary. This in turn makes it harder to coordinate a fix "
+"without unnecessarily leaking information about the vulnerability."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:174
+#, no-wrap
+msgid "Bugs"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:176
+msgid ""
+"This problem is similar to the problem with security in the last paragraph, "
+"but generally less severe."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:177
+#, no-wrap
+msgid "Forking"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:181
+msgid ""
+"It is easier for the author to fork the upstream library once it is "
+"bundled. While convenient on first sight, it means that the code diverges "
+"from upstream making it harder to address security or other problems with "
+"the software. A reason for this is that patching becomes harder."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:184
+msgid ""
+"Another problem of forking is that because code diverges from upstream, bugs "
+"get solved over and over again instead of just once at a central location. "
+"This defeats the idea of open source software in the first place."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:185
+#, no-wrap
+msgid "Symbol collision"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:190
+msgid ""
+"When a library is installed on the system, it might collide with the bundled "
+"version. This can cause immediate errors at compile or link time. It can "
+"also cause errors when running the program which might be harder to track "
+"down. The latter problem could be caused because the versions of the two "
+"libraries are incompatible."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:191
+#, no-wrap
+msgid "Licensing"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:193
+msgid ""
+"When bundling projects from different sources, license issues can arise more "
+"easily, especially when licenses are incompatible."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:194
+#, no-wrap
+msgid "Waste of resources"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:198
+msgid ""
+"Bundled libraries waste resources on several levels. It takes longer to "
+"build the actual application, especially if these libraries are already "
+"present on the system. At run-time, they can take up unnecessary memory "
+"when the system-wide library is already loaded by one program and the "
+"bundled library is loaded by another program."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:199
+#, no-wrap
+msgid "Waste of effort"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:203
+msgid ""
+"When a library needs patches for FreeBSD, these patches have to be "
+"duplicated again in the bundled library. This wastes developer time because "
+"the patches might not apply cleanly. It can also be hard to notice that "
+"these patches are required in the first place."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:205
+#, no-wrap
+msgid "What to do About Bundled Libraries"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:209
+msgid ""
+"Whenever possible, use the unbundled version of the library by adding a "
+"`LIB_DEPENDS` to the port. If such a port does not exist yet, consider "
+"creating it."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:211
+msgid ""
+"Only use bundled libraries if the upstream has a good track record on "
+"security and using unbundled versions leads to overly complex patches."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:219
+msgid ""
+"In some very special cases, for example emulators, like Wine, a port has to "
+"bundle libraries, because they are in a different architecture, or they have "
+"been modified to fit the software's use. In that case, those libraries "
+"should not be exposed to other ports for linking. Add `BUNDLE_LIBS=yes` to "
+"the port's [.filename]#Makefile#. This will tell man:pkg[8] to not compute "
+"provided libraries. Always ask the {portmgr} before adding this to a port."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:222
+#, no-wrap
+msgid "Shared Libraries"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:226
+msgid ""
+"If the port installs one or more shared libraries, define a `USE_LDCONFIG` "
+"make variable, which will instruct a [.filename]#bsd.port.mk# to run "
+"`${LDCONFIG} -m` on the directory where the new library is installed "
+"(usually [.filename]#PREFIX/lib#) during `post-install` target to register "
+"it into the shared library cache. This variable, when defined, will also "
+"facilitate addition of an appropriate `@exec /sbin/ldconfig -m` and "
+"`@unexec /sbin/ldconfig -R` pair into [.filename]#pkg-plist#, so that a user "
+"who installed the package can start using the shared library immediately and "
+"de-installation will not cause the system to still believe the library is "
+"there."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:230
+#, no-wrap
+msgid "USE_LDCONFIG=\tyes\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:234
+msgid ""
+"The default directory can be overridden by setting `USE_LDCONFIG` to a list "
+"of directories into which shared libraries are to be installed. For "
+"example, if the port installs shared libraries into [.filename]#PREFIX/lib/"
+"foo# and [.filename]#PREFIX/lib/bar# use this in [.filename]#Makefile#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:238
+#, no-wrap
+msgid "USE_LDCONFIG=\t${PREFIX}/lib/foo ${PREFIX}/lib/bar\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:241
+msgid ""
+"Please double-check, often this is not necessary at all or can be avoided "
+"through `-rpath` or setting `LD_RUN_PATH` during linking (see package:lang/"
+"mosml[] for an example), or through a shell-wrapper which sets "
+"`LD_LIBRARY_PATH` before invoking the binary, like package:www/seamonkey[] "
+"does."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:243
+msgid ""
+"When installing 32-bit libraries on a 64-bit system, use `USE_LDCONFIG32` "
+"instead."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:245
+msgid ""
+"If the software uses <<using-autotools,autotools>>, and specifically "
+"`libtool`, add crossref:uses[uses-libtool,`USES=libtool`]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:247
+msgid ""
+"When the major library version number increments in the update to the new "
+"port version, all other ports that link to the affected library must have "
+"their `PORTREVISION` incremented, to force recompilation with the new "
+"library version."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:249
+#, no-wrap
+msgid "Ports with Distribution Restrictions or Legal Concerns"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:252
+msgid ""
+"Licenses vary, and some of them place restrictions on how the application "
+"can be packaged, whether it can be sold for profit, and so on."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:257
+msgid ""
+"It is the responsibility of a porter to read the licensing terms of the "
+"software and make sure that the FreeBSD project will not be held accountable "
+"for violating them by redistributing the source or compiled binaries either "
+"via FTP/HTTP or CD-ROM. If in doubt, please contact the {freebsd-ports}."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:260
+msgid ""
+"In situations like this, the variables described in the next sections can be "
+"set."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:262
+#, no-wrap
+msgid "`NO_PACKAGE`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:266
+msgid ""
+"This variable indicates that we may not generate a binary package of the "
+"application. For instance, the license may disallow binary redistribution, "
+"or it may prohibit distribution of packages created from patched sources."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:269
+msgid ""
+"However, the port's `DISTFILES` may be freely mirrored on FTP/HTTP. They "
+"may also be distributed on a CD-ROM (or similar media) unless `NO_CDROM` is "
+"set as well."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:272
+msgid ""
+"If the binary package is not generally useful, and the application must "
+"always be compiled from the source code, use `NO_PACKAGE`. For example, if "
+"the application has configuration information that is site specific hard "
+"coded into it at compile time, set `NO_PACKAGE`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:274
+msgid ""
+"Set `NO_PACKAGE` to a string describing the reason why the package cannot be "
+"generated."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:276
+#, no-wrap
+msgid "`NO_CDROM`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:280
+msgid ""
+"This variable alone indicates that, although we are allowed to generate "
+"binary packages, we may put neither those packages nor the port's "
+"`DISTFILES` onto a CD-ROM (or similar media) for resale. However, the "
+"binary packages and the port's `DISTFILES` will still be available via FTP/"
+"HTTP."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:282
+msgid ""
+"If this variable is set along with `NO_PACKAGE`, then only the port's "
+"`DISTFILES` will be available, and only via FTP/HTTP."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:285
+msgid ""
+"Set `NO_CDROM` to a string describing the reason why the port cannot be "
+"redistributed on CD-ROM. For instance, use this if the port's license is "
+"for \"non-commercial\" use only."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:287
+#, no-wrap
+msgid "`NOFETCHFILES`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:291
+msgid ""
+"Files defined in `NOFETCHFILES` are not fetchable from any of "
+"`MASTER_SITES`. An example of such a file is when the file is supplied on "
+"CD-ROM by the vendor."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:293
+msgid ""
+"Tools which check for the availability of these files on `MASTER_SITES` have "
+"to ignore these files and not report about them."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:295
+#, no-wrap
+msgid "`RESTRICTED`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:298
+msgid ""
+"Set this variable alone if the application's license permits neither "
+"mirroring the application's `DISTFILES` nor distributing the binary package "
+"in any way."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:300
+msgid ""
+"Do not set `NO_CDROM` or `NO_PACKAGE` along with `RESTRICTED`, since the "
+"latter variable implies the former ones."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:304
+msgid ""
+"Set `RESTRICTED` to a string describing the reason why the port cannot be "
+"redistributed. Typically, this indicates that the port contains proprietary "
+"software and that the user will need to manually download the `DISTFILES`, "
+"possibly after registering for the software or agreeing to accept the terms "
+"of an EULA."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:306
+#, no-wrap
+msgid "`RESTRICTED_FILES`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:310
+msgid ""
+"When `RESTRICTED` or `NO_CDROM` is set, this variable defaults to "
+"`${DISTFILES} ${PATCHFILES}`, otherwise it is empty. If only some of the "
+"distribution files are restricted, then set this variable to list them."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:312
+#, no-wrap
+msgid "`LEGAL_TEXT`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:316
+msgid ""
+"If the port has legal concerns not addressed by the above variables, set "
+"`LEGAL_TEXT` to a string explaining the concern. For example, if special "
+"permission was obtained for FreeBSD to redistribute the binary, this "
+"variable must indicate so."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:318
+#, no-wrap
+msgid "[.filename]#/usr/ports/LEGAL# and `LEGAL`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:324
+msgid ""
+"A port which sets any of the above variables must also be added to [."
+"filename]#/usr/ports/LEGAL#. The first column is a glob which matches the "
+"restricted distfiles. The second column is the port's origin. The third "
+"column is the output of `make -VLEGAL`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:326
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4216
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4476
+#, no-wrap
+msgid "Examples"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:329
+msgid ""
+"The preferred way to state \"the distfiles for this port must be fetched "
+"manually\" is as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:335
+#, no-wrap
+msgid ""
+".if !exists(${DISTDIR}/${DISTNAME}${EXTRACT_SUFX})\n"
+"IGNORE=\tmay not be redistributed because of licensing reasons. Please visit some-website to accept their license and download ${DISTFILES} into ${DISTDIR}\n"
+".endif\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:338
+msgid ""
+"This both informs the user, and sets the proper metadata on the user's "
+"machine for use by automated programs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:340
+msgid ""
+"Note that this stanza must be preceded by an inclusion of [.filename]#bsd."
+"port.pre.mk#."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:342
+#, no-wrap
+msgid "Building Mechanisms"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:345
+#, no-wrap
+msgid "Building Ports in Parallel"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:349
+msgid ""
+"The FreeBSD ports framework supports parallel building using multiple `make` "
+"sub-processes, which allows SMP systems to utilize all of their available "
+"CPU power, allowing port builds to be faster and more effective."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:354
+msgid ""
+"This is achieved by passing `-jX` flag to man:make[1] running on vendor "
+"code. This is the default build behavior of ports. Unfortunately, not all "
+"ports handle parallel building well and it may be required to explicitly "
+"disable this feature by adding the `MAKE_JOBS_UNSAFE=yes` variable. It is "
+"used when a port is known to be broken with `-jX` due to race conditions "
+"causing intermittent build failures."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:359
+msgid ""
+"When setting `MAKE_JOBS_UNSAFE`, it is very important to explain either with "
+"a comment in the [.filename]#Makefile#, or at least in the commit message, "
+"_why_ the port does not build when enabling. Otherwise, it is almost "
+"impossible to either fix the problem, or test if it has been fixed when "
+"committing an update at a later date."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:362
+#, no-wrap
+msgid "`make`, `gmake`, and `imake`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:365
+msgid ""
+"Several differing `make` implementations exist. Ported software often "
+"requires a particular implementation, like GNU `make`, known in FreeBSD as "
+"`gmake`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:367
+msgid "If the port uses GNU make, add `gmake` to `USES`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:370
+msgid ""
+"`MAKE_CMD` can be used to reference the specific command configured by the "
+"`USES` setting in the port's [.filename]#Makefile#. Only use `MAKE_CMD` "
+"within the application [.filename]##Makefile##s in `WRKSRC` to call the "
+"`make` implementation expected by the ported software."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:373
+msgid ""
+"If the port is an X application that uses imake to create [."
+"filename]##Makefile##s from [.filename]##Imakefile##s, set `USES= imake`. "
+"See the crossref:uses[uses-imake,`USES=imake`] section of crossref:uses[uses,"
+"Using `USES` Macros] for more details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:376
+msgid ""
+"If the port's source [.filename]#Makefile# has something other than `all` as "
+"the main build target, set `ALL_TARGET` accordingly. The same goes for "
+"`install` and `INSTALL_TARGET`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:378
+#, no-wrap
+msgid "`configure` Script"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:383
+msgid ""
+"If the port uses the `configure` script to generate [.filename]#Makefile# "
+"from [.filename]#Makefile.in#, set `GNU_CONFIGURE=yes`. To give extra "
+"arguments to the `configure` script (the default argument is `--"
+"prefix=${PREFIX} --infodir=${PREFIX}/${INFO_PATH} --mandir=${MANPREFIX}/man "
+"--build=${CONFIGURE_TARGET}`), set those extra arguments in "
+"`CONFIGURE_ARGS`. Extra environment variables can be passed using "
+"`CONFIGURE_ENV`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:385
+#, no-wrap
+msgid "Variables for Ports That Use `configure`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:389
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:417
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:443
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:526
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:809
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2444
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2464
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3167
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3199
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3778
+#, no-wrap
+msgid "Variable"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:391
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:419
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:445
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1322
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3169
+#, no-wrap
+msgid "Means"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:392
+#, no-wrap
+msgid "`GNU_CONFIGURE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:394
+#, no-wrap
+msgid "The port uses `configure` script to prepare build."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:395
+#, no-wrap
+msgid "`HAS_CONFIGURE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:397
+#, no-wrap
+msgid "Same as `GNU_CONFIGURE`, except default configure target is not added to `CONFIGURE_ARGS`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:398
+#, no-wrap
+msgid "`CONFIGURE_ARGS`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:400
+#, no-wrap
+msgid "Additional arguments passed to `configure` script."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:401
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:435
+#, no-wrap
+msgid "`CONFIGURE_ENV`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:403
+#, no-wrap
+msgid "Additional environment variables to be set for `configure` script run."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:404
+#, no-wrap
+msgid "`CONFIGURE_TARGET`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:405
+#, no-wrap
+msgid "Override default configure target. Default value is `${MACHINE_ARCH}-portbld-freebsd${OSREL}`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:408
+#, no-wrap
+msgid "Using `cmake`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:411
+msgid "For ports that use CMake, define `USES= cmake`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:413
+#, no-wrap
+msgid "Variables for Ports That Use `cmake`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:420
+#, no-wrap
+msgid "`CMAKE_ARGS`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:422
+#, no-wrap
+msgid "Port specific CMake flags to be passed to the `cmake` binary."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:423
+#, no-wrap
+msgid "`CMAKE_ON`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:425
+#, no-wrap
+msgid "For each entry in `CMAKE_ON`, an enabled boolean value is added to `CMAKE_ARGS`. See <<using-cmake-example2>>."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:426
+#, no-wrap
+msgid "`CMAKE_OFF`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:428
+#, no-wrap
+msgid "For each entry in `CMAKE_OFF`, a disabled boolean value is added to `CMAKE_ARGS`. See <<using-cmake-example2>>."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:429
+#, no-wrap
+msgid "`CMAKE_BUILD_TYPE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:431
+#, no-wrap
+msgid "Type of build (CMake predefined build profiles). Default is `Release`, or `Debug` if `WITH_DEBUG` is set."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:432
+#, no-wrap
+msgid "`CMAKE_SOURCE_PATH`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:434
+#, no-wrap
+msgid "Path to the source directory. Default is `${WRKSRC}`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:436
+#, no-wrap
+msgid "Additional environment variables to be set for the `cmake` binary."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:439
+#, no-wrap
+msgid "Variables the Users Can Define for `cmake` Builds"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:446
+#, no-wrap
+msgid "`CMAKE_NOCOLOR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:447
+#, no-wrap
+msgid "Disables color build output. Default not set, unless `BATCH` or `PACKAGE_BUILDING` are set."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:454
+msgid ""
+"CMake supports these build profiles: `Debug`, `Release`, `RelWithDebInfo` "
+"and `MinSizeRel`. `Debug` and `Release` profiles respect system `\\*FLAGS`, "
+"`RelWithDebInfo` and `MinSizeRel` will set `CFLAGS` to `-O2 -g` and `-Os -"
+"DNDEBUG` correspondingly. The lower-cased value of `CMAKE_BUILD_TYPE` is "
+"exported to `PLIST_SUB` and must be used if the port installs [.filename]#*."
+"cmake# depending on the build type (see package:devel/kf5-kcrash[] for an "
+"example). Please note that some projects may define their own build "
+"profiles and/or force particular build type by setting `CMAKE_BUILD_TYPE` in "
+"[.filename]#CMakeLists.txt#. To make a port for such a project respect "
+"`CFLAGS` and `WITH_DEBUG`, the `CMAKE_BUILD_TYPE` definitions must be "
+"removed from those files."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:459
+msgid ""
+"Most CMake-based projects support an out-of-source method of building. The "
+"out-of-source build for a port is the default setting. An in-source build "
+"can be requested by using the `:insource` suffix. With out-of-source "
+"builds, `CONFIGURE_WRKSRC`, `BUILD_WRKSRC` and `INSTALL_WRKSRC` will be set "
+"to `${WRKDIR}/.build` and this directory will be used to keep all files "
+"generated during configuration and build stages, leaving the source "
+"directory intact."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:461
+#, no-wrap
+msgid "`USES= cmake` Example"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:466
+msgid ""
+"This snippet demonstrates the use of CMake for a port. `CMAKE_SOURCE_PATH` "
+"is not usually required, but can be set when the sources are not located in "
+"the top directory, or if only a subset of the project is intended to be "
+"built by the port."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:471
+#, no-wrap
+msgid ""
+"USES=\t\t\tcmake\n"
+"CMAKE_SOURCE_PATH=\t${WRKSRC}/subproject\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:476
+#, no-wrap
+msgid "`CMAKE_ON` and `CMAKE_OFF`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:480
+msgid ""
+"When adding boolean values to `CMAKE_ARGS`, it is easier to use the "
+"`CMAKE_ON` and `CMAKE_OFF` variables instead. This:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:485
+#, no-wrap
+msgid ""
+"CMAKE_ON=\tVAR1 VAR2\n"
+"CMAKE_OFF=\tVAR3\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:488
+msgid "Is equivalent to:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:492
+#, no-wrap
+msgid "CMAKE_ARGS=\t-DVAR1:BOOL=TRUE -DVAR2:BOOL=TRUE -DVAR3:BOOL=FALSE\n"
+msgstr ""
+
+#. type: delimited block = 6
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:498
+msgid ""
+"This is only for the default values off `CMAKE_ARGS`. The helpers described "
+"in crossref:makefiles[options-cmake_bool,`OPT_CMAKE_BOOL` and "
+"`OPT_CMAKE_BOOL_OFF`] use the same semantics, but for optional values."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:503
+#, no-wrap
+msgid "Using `scons`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:506
+msgid "If the port uses SCons, define `USES=scons`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:508
+msgid ""
+"To make third party [.filename]#SConstruct# respect everything that is "
+"passed to SCons in the environment (that is, most importantly, `CC/CXX/"
+"CFLAGS/CXXFLAGS`), patch [.filename]#SConstruct# so build `Environment` is "
+"constructed like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:512
+#, no-wrap
+msgid "env = Environment(**ARGUMENTS)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:515
+msgid "It may be then modified with `env.Append` and `env.Replace`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:517
+#, no-wrap
+msgid "Building Rust Applications with `cargo`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:520
+msgid "For ports that use Cargo, define `USES=cargo`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:522
+#, no-wrap
+msgid "Variables the Users Can Define for `cargo` Builds"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:527
+#, no-wrap
+msgid "Default"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:529
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:811
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1730
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1898
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1916
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2084
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2150
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2394
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2411
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2446
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2466
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2542
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3121
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3779
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3813
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3856
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3882
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3986
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4156
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4208
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4300
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4392
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4454
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4714
+#, no-wrap
+msgid "Description"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:530
+#, no-wrap
+msgid "`CARGO_CRATES`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:536
+#, no-wrap
+msgid ""
+"List of crates the port depends on. Each entry needs to have a format like `cratename-semver` for example, `libc-0.2.40`. Port maintainers can generate this list from [.filename]#Cargo.lock# using `make cargo-crates`. Manually bumping crate versions is possible but be mindful of transitive dependencies.\n"
+"If the list generated by `make cargo-crates` is big, it might be convenient to place it inside a `Makefile.crates` file in the top-level port directory.\n"
+"If present, the ports framework sources that file automatically.\n"
+"This help keep the main port Makefile within a manageable size."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:537
+#, no-wrap
+msgid "`CARGO_FEATURES`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:540
+#, no-wrap
+msgid "List of application features to build (space separated list). To deactivate all default features add the special token `--no-default-features` to `CARGO_FEATURES`. Manually passing it to `CARGO_BUILD_ARGS`, `CARGO_INSTALL_ARGS`, and `CARGO_TEST_ARGS` is not needed."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:541
+#, no-wrap
+msgid "`CARGO_CARGOTOML`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:542
+#, no-wrap
+msgid "`${WRKSRC}/Cargo.toml`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:544
+#, no-wrap
+msgid "The path to the [.filename]#Cargo.toml# to use."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:545
+#, no-wrap
+msgid "`CARGO_CARGOLOCK`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:546
+#, no-wrap
+msgid "`${WRKSRC}/Cargo.lock`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:548
+#, no-wrap
+msgid "The path to the [.filename]#Cargo.lock# to use for `make cargo-crates`. It is possible to specify more than one lock file when necessary."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:549
+#, no-wrap
+msgid "`CARGO_ENV`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:552
+#, no-wrap
+msgid "A list of environment variables to pass to Cargo similar to `MAKE_ENV`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:553
+#, no-wrap
+msgid "`RUSTFLAGS`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:556
+#, no-wrap
+msgid "Flags to pass to the Rust compiler."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:557
+#, no-wrap
+msgid "`CARGO_CONFIGURE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:558
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:566
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:574
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:582
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:594
+#, no-wrap
+msgid "`yes`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:560
+#, no-wrap
+msgid "Use the default `do-configure`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:561
+#, no-wrap
+msgid "`CARGO_UPDATE_ARGS`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:564
+#, no-wrap
+msgid "Extra arguments to pass to Cargo during the configure phase. Valid arguments can be looked up with `cargo update --help`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:565
+#, no-wrap
+msgid "`CARGO_BUILDDEP`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:568
+#, no-wrap
+msgid "Add a build dependency on package:lang/rust[]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:569
+#, no-wrap
+msgid "`CARGO_CARGO_BIN`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:570
+#, no-wrap
+msgid "`${LOCALBASE}/bin/cargo`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:572
+#, no-wrap
+msgid "Location of the `cargo` binary."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:573
+#, no-wrap
+msgid "`CARGO_BUILD`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:576
+#, no-wrap
+msgid "Use the default `do-build`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:577
+#, no-wrap
+msgid "`CARGO_BUILD_ARGS`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:580
+#, no-wrap
+msgid "Extra arguments to pass to Cargo during the build phase. Valid arguments can be looked up with `cargo build --help`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:581
+#, no-wrap
+msgid "`CARGO_INSTALL`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:584
+#, no-wrap
+msgid "Use the default `do-install`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:585
+#, no-wrap
+msgid "`CARGO_INSTALL_ARGS`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:588
+#, no-wrap
+msgid "Extra arguments to pass to Cargo during the install phase. Valid arguments can be looked up with `cargo install --help`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:589
+#, no-wrap
+msgid "`CARGO_INSTALL_PATH`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:590
+#, no-wrap
+msgid "`.`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:592
+#, no-wrap
+msgid "Path to the crate to install. This is passed to `cargo install` via its `--path` argument. When multiple paths are specified `cargo install` is run multiple times."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:593
+#, no-wrap
+msgid "`CARGO_TEST`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:596
+#, no-wrap
+msgid "Use the default `do-test`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:597
+#, no-wrap
+msgid "`CARGO_TEST_ARGS`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:600
+#, no-wrap
+msgid "Extra arguments to pass to Cargo during the test phase. Valid arguments can be looked up with `cargo test --help`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:601
+#, no-wrap
+msgid "`CARGO_TARGET_DIR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:602
+#, no-wrap
+msgid "`${WRKDIR}/target`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:604
+#, no-wrap
+msgid "Location of the cargo output directory."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:605
+#, no-wrap
+msgid "`CARGO_DIST_SUBDIR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:606
+#, no-wrap
+msgid "[.filename]#rust/crates#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:608
+#, no-wrap
+msgid "Directory relative to `DISTDIR` where the crate distribution files will be stored."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:609
+#, no-wrap
+msgid "`CARGO_VENDOR_DIR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:610
+#, no-wrap
+msgid "`${WRKSRC}/cargo-crates`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:612
+#, no-wrap
+msgid "Location of the vendor directory where all crates will be extracted to. Try to keep this under `PATCH_WRKSRC`, so that patches can be applied easily."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:613
+#, no-wrap
+msgid "`CARGO_USE_GITHUB`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:614
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:618
+#, no-wrap
+msgid "`no`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:616
+#, no-wrap
+msgid "Enable fetching of crates locked to specific Git commits on GitHub via `GH_TUPLE`. This will try to patch all [.filename]#Cargo.toml# under `WRKDIR` to point to the offline sources instead of fetching them from a Git repository during the build."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:617
+#, no-wrap
+msgid "`CARGO_USE_GITLAB`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:619
+#, no-wrap
+msgid "Same as `CARGO_USE_GITHUB` but for GitLab instances and `GL_TUPLE`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:622
+#, no-wrap
+msgid "Creating a Port for a Simple Rust Application"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:627
+msgid ""
+"Creating a Cargo based port is a three stage process. First we need to "
+"provide a ports template that fetches the application distribution file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:634
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:679
+#, no-wrap
+msgid ""
+"PORTNAME=\ttokei\n"
+"DISTVERSIONPREFIX=\tv\n"
+"DISTVERSION=\t7.0.2\n"
+"CATEGORIES=\tdevel\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:638
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:683
+#, no-wrap
+msgid ""
+"MAINTAINER=\ttobik@FreeBSD.org\n"
+"COMMENT=\tDisplay statistics about your code\n"
+"WWW=\t\thttps://github.com/XAMPPRocky/tokei/\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:642
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:687
+#, no-wrap
+msgid ""
+"USES=\t\tcargo\n"
+"USE_GITHUB=\tyes\n"
+"GH_ACCOUNT=\tAaronepower\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:644
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:697
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:864
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:887
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:945
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1016
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1103
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1119
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1133
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1250
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1271
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1644
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3469
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3529
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3645
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4240
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4264
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4502
+#, no-wrap
+msgid ".include <bsd.port.mk>\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:647
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:890
+msgid "Generate an initial [.filename]#distinfo#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:655
+#, no-wrap
+msgid ""
+"% make makesum\n"
+"=> Aaronepower-tokei-v7.0.2_GH0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.\n"
+"=> Attempting to fetch https://codeload.github.com/Aaronepower/tokei/tar.gz/v7.0.2?dummy=/Aaronepower-tokei-v7.0.2_GH0.tar.gz\n"
+"fetch: https://codeload.github.com/Aaronepower/tokei/tar.gz/v7.0.2?dummy=/Aaronepower-tokei-v7.0.2_GH0.tar.gz: size of remote file is not known\n"
+"Aaronepower-tokei-v7.0.2_GH0.tar.gz 45 kB 239 kBps 00m00s\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:658
+msgid ""
+"Now the distribution file is ready to use and we can go ahead and extract "
+"crate dependencies from the bundled [.filename]#Cargo.lock#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:669
+#, no-wrap
+msgid ""
+"% make cargo-crates\n"
+"CARGO_CRATES= aho-corasick-0.6.4 \\\n"
+" ansi_term-0.11.0 \\\n"
+" arrayvec-0.4.7 \\\n"
+" atty-0.2.9 \\\n"
+" bitflags-1.0.1 \\\n"
+" byteorder-1.2.2 \\\n"
+" [...]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:672
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:920
+msgid ""
+"The output of this command needs to be pasted directly into the Makefile:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:695
+#, no-wrap
+msgid ""
+"CARGO_CRATES= aho-corasick-0.6.4 \\\n"
+" ansi_term-0.11.0 \\\n"
+" arrayvec-0.4.7 \\\n"
+" atty-0.2.9 \\\n"
+" bitflags-1.0.1 \\\n"
+" byteorder-1.2.2 \\\n"
+" [...]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:700
+msgid ""
+"[.filename]#distinfo# needs to be regenerated to contain all the crate "
+"distribution files:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:718
+#, no-wrap
+msgid ""
+"% make makesum\n"
+"=> rust/crates/aho-corasick-0.6.4.tar.gz doesn't seem to exist in /usr/ports/distfiles/.\n"
+"=> Attempting to fetch https://crates.io/api/v1/crates/aho-corasick/0.6.4/download?dummy=/rust/crates/aho-corasick-0.6.4.tar.gz\n"
+"rust/crates/aho-corasick-0.6.4.tar.gz 100% of 24 kB 6139 kBps 00m00s\n"
+"=> rust/crates/ansi_term-0.11.0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.\n"
+"=> Attempting to fetch https://crates.io/api/v1/crates/ansi_term/0.11.0/download?dummy=/rust/crates/ansi_term-0.11.0.tar.gz\n"
+"rust/crates/ansi_term-0.11.0.tar.gz 100% of 16 kB 21 MBps 00m00s\n"
+"=> rust/crates/arrayvec-0.4.7.tar.gz doesn't seem to exist in /usr/ports/distfiles/.\n"
+"=> Attempting to fetch https://crates.io/api/v1/crates/arrayvec/0.4.7/download?dummy=/rust/crates/arrayvec-0.4.7.tar.gz\n"
+"rust/crates/arrayvec-0.4.7.tar.gz 100% of 22 kB 3237 kBps 00m00s\n"
+"=> rust/crates/atty-0.2.9.tar.gz doesn't seem to exist in /usr/ports/distfiles/.\n"
+"=> Attempting to fetch https://crates.io/api/v1/crates/atty/0.2.9/download?dummy=/rust/crates/atty-0.2.9.tar.gz\n"
+"rust/crates/atty-0.2.9.tar.gz 100% of 5898 B 81 MBps 00m00s\n"
+"=> rust/crates/bitflags-1.0.1.tar.gz doesn't seem to exist in /usr/ports/distfiles/.\n"
+"[...]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:721
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:964
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1076
+msgid ""
+"The port is now ready for a test build and further adjustments like creating "
+"a plist, writing a description, adding license information, options, etc. as "
+"normal."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:723
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:966
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1078
+msgid ""
+"If you are not testing your port in a clean environment like with poudriere, "
+"remember to run `make clean` before any testing."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:726
+#, no-wrap
+msgid "Enabling Additional Application Features"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:731
+msgid ""
+"Some applications define additional features in their [.filename]#Cargo."
+"toml#. They can be compiled in by setting `CARGO_FEATURES` in the port."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:733
+msgid "Here we enable Tokei's `json` and `yaml` features:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:737
+#, no-wrap
+msgid "CARGO_FEATURES=\tjson yaml\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:742
+#, no-wrap
+msgid "Encoding Application Features As Port Options"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:746
+msgid ""
+"An example `[features]` section in [.filename]#Cargo.toml# could look like "
+"this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:753
+#, no-wrap
+msgid ""
+"[features]\n"
+"pulseaudio_backend = [\"librespot-playback/pulseaudio-backend\"]\n"
+"portaudio_backend = [\"librespot-playback/portaudio-backend\"]\n"
+"default = [\"pulseaudio_backend\"]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:758
+msgid ""
+"`pulseaudio_backend` is a default feature. It is always enabled unless we "
+"explicitly turn off default features by adding `--no-default-features` to "
+"`CARGO_FEATURES`. Here we turn the `portaudio_backend` and "
+"`pulseaudio_backend` features into port options:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:762
+#, no-wrap
+msgid "CARGO_FEATURES=\t--no-default-features\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:764
+#, no-wrap
+msgid "OPTIONS_DEFINE=\tPORTAUDIO PULSEAUDIO\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:767
+#, no-wrap
+msgid ""
+"PORTAUDIO_VARS=\t\tCARGO_FEATURES+=portaudio_backend\n"
+"PULSEAUDIO_VARS=\tCARGO_FEATURES+=pulseaudio_backend\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:772
+#, no-wrap
+msgid "Listing Crate Licenses"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:778
+msgid ""
+"Crates have their own licenses. It is important to know what they are when "
+"adding a `LICENSE` block to the port (see crossref:makefiles[licenses,"
+"Licenses]). The helper target `cargo-crates-licenses` will try to list all "
+"the licenses of all crates defined in `CARGO_CRATES`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:789
+#, no-wrap
+msgid ""
+"% make cargo-crates-licenses\n"
+"aho-corasick-0.6.4 Unlicense/MIT\n"
+"ansi_term-0.11.0 MIT\n"
+"arrayvec-0.4.7 MIT/Apache-2.0\n"
+"atty-0.2.9 MIT\n"
+"bitflags-1.0.1 MIT/Apache-2.0\n"
+"byteorder-1.2.2 Unlicense/MIT\n"
+"[...]\n"
+msgstr ""
+
+#. type: delimited block = 6
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:795
+msgid ""
+"The license names `make cargo-crates-licenses` outputs are SPDX 2.1 licenses "
+"expression which do not match the license names defined in the ports "
+"framework. They need to be translated to the names from crossref:"
+"makefiles[licenses-license-list,Predefined License List]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:800
+#, no-wrap
+msgid "Using `meson`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:803
+msgid "For ports that use Meson, define `USES=meson`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:805
+#, no-wrap
+msgid "Variables for Ports That Use `meson`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:812
+#, no-wrap
+msgid "`MESON_ARGS`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:814
+#, no-wrap
+msgid "Port specific Meson flags to be passed to the `meson` binary."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:815
+#, no-wrap
+msgid "`MESON_BUILD_DIR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:816
+#, no-wrap
+msgid "Path to the build directory relative to `WRKSRC`. Default is `_build`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:819
+#, no-wrap
+msgid "`USES=meson` Example"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:823
+msgid "This snippet demonstrates the use of Meson for a port."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:828
+#, no-wrap
+msgid ""
+"USES=\t\tmeson\n"
+"MESON_ARGS=\t-Dfoo=enabled\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:833
+#, no-wrap
+msgid "Building Go Applications"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:837
+msgid ""
+"For ports that use Go, define `USES=go`. Refer to crossref:uses[uses-go,"
+"`go`] for a list of variables that can be set to control the build process."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:839
+#, no-wrap
+msgid "Creating a Port for a Go Modules Based Application"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:843
+msgid ""
+"In most cases, it is sufficient to set the `GO_MODULE` variable to the value "
+"specified by the `module` directive in `go.mod`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:850
+#, no-wrap
+msgid ""
+"PORTNAME= hey\n"
+"DISTVERSIONPREFIX=\tv\n"
+"DISTVERSION= 0.1.4\n"
+"CATEGORIES= benchmarks\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:854
+#, no-wrap
+msgid ""
+"MAINTAINER= dmgk@FreeBSD.org\n"
+"COMMENT= Tiny program that sends some load to a web application\n"
+"WWW= https://github.com/rakyll/hey/\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:857
+#, no-wrap
+msgid ""
+"LICENSE= APACHE20\n"
+"LICENSE_FILE= ${WRKSRC}/LICENSE\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:860
+#, no-wrap
+msgid ""
+"USES= go:modules\n"
+"GO_MODULE= github.com/rakyll/hey\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:862
+#, no-wrap
+msgid "PLIST_FILES= bin/hey\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:867
+msgid ""
+"If the \"easy\" way is not adequate or more control over dependencies is "
+"needed, the full porting process is described below."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:870
+msgid ""
+"Creating a Go-based port is a five-stage process. First we need to provide "
+"a ports template that fetches the application distribution file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:877
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:927
+#, no-wrap
+msgid ""
+"PORTNAME=\tghq\n"
+"DISTVERSIONPREFIX=\tv\n"
+"DISTVERSION=\t0.12.5\n"
+"CATEGORIES=\tdevel\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:881
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:931
+#, no-wrap
+msgid ""
+"MAINTAINER=\ttobik@FreeBSD.org\n"
+"COMMENT=\tRemote repository management made easy\n"
+"WWW=\t\thttps://github.com/x-motemen/ghq/\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:885
+#, no-wrap
+msgid ""
+"USES=\t\tgo:modules\n"
+"USE_GITHUB=\tyes\n"
+"GH_ACCOUNT=\tmotemen\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:899
+#, no-wrap
+msgid ""
+"% make makesum\n"
+"===> License MIT accepted by the user\n"
+"=> motemen-ghq-v0.12.5_GH0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.\n"
+"=> Attempting to fetch https://codeload.github.com/motemen/ghq/tar.gz/v0.12.5?dummy=/motemen-ghq-v0.12.5_GH0.tar.gz\n"
+"fetch: https://codeload.github.com/motemen/ghq/tar.gz/v0.12.5?dummy=/motemen-ghq-v0.12.5_GH0.tar.gz: size of remote file is not known\n"
+"motemen-ghq-v0.12.5_GH0.tar.gz 32 kB 177 kBps 00s\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:903
+msgid ""
+"Now the distribution file is ready to use and we can extract the required Go "
+"module dependencies. This step requires having package:ports-mgmt/"
+"modules2tuple[] installed:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:917
+#, no-wrap
+msgid ""
+"% make gomod-vendor\n"
+"[...]\n"
+"GH_TUPLE=\t\\\n"
+"\t\tSongmu:gitconfig:v0.0.2:songmu_gitconfig/vendor/github.com/Songmu/gitconfig \\\n"
+"\t\tdaviddengcn:go-colortext:186a3d44e920:daviddengcn_go_colortext/vendor/github.com/daviddengcn/go-colortext \\\n"
+"\t\tgo-yaml:yaml:v2.2.2:go_yaml_yaml/vendor/gopkg.in/yaml.v2 \\\n"
+"\t\tgolang:net:3ec191127204:golang_net/vendor/golang.org/x/net \\\n"
+"\t\tgolang:sync:112230192c58:golang_sync/vendor/golang.org/x/sync \\\n"
+"\t\tgolang:xerrors:3ee3066db522:golang_xerrors/vendor/golang.org/x/xerrors \\\n"
+"\t\tmotemen:go-colorine:45d19169413a:motemen_go_colorine/vendor/github.com/motemen/go-colorine \\\n"
+"\t\turfave:cli:v1.20.0:urfave_cli/vendor/github.com/urfave/cli\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:943
+#, no-wrap
+msgid ""
+"USES=\t\tgo:modules\n"
+"USE_GITHUB=\tyes\n"
+"GH_ACCOUNT=\tmotemen\n"
+"GH_TUPLE=\tSongmu:gitconfig:v0.0.2:songmu_gitconfig/vendor/github.com/Songmu/gitconfig \\\n"
+"\t\tdaviddengcn:go-colortext:186a3d44e920:daviddengcn_go_colortext/vendor/github.com/daviddengcn/go-colortext \\\n"
+"\t\tgo-yaml:yaml:v2.2.2:go_yaml_yaml/vendor/gopkg.in/yaml.v2 \\\n"
+"\t\tgolang:net:3ec191127204:golang_net/vendor/golang.org/x/net \\\n"
+"\t\tgolang:sync:112230192c58:golang_sync/vendor/golang.org/x/sync \\\n"
+"\t\tgolang:xerrors:3ee3066db522:golang_xerrors/vendor/golang.org/x/xerrors \\\n"
+"\t\tmotemen:go-colorine:45d19169413a:motemen_go_colorine/vendor/github.com/motemen/go-colorine \\\n"
+"\t\turfave:cli:v1.20.0:urfave_cli/vendor/github.com/urfave/cli\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:948
+msgid ""
+"[.filename]#distinfo# needs to be regenerated to contain all the "
+"distribution files:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:961
+#, no-wrap
+msgid ""
+"% make makesum\n"
+"=> Songmu-gitconfig-v0.0.2_GH0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.\n"
+"=> Attempting to fetch https://codeload.github.com/Songmu/gitconfig/tar.gz/v0.0.2?dummy=/Songmu-gitconfig-v0.0.2_GH0.tar.gz\n"
+"fetch: https://codeload.github.com/Songmu/gitconfig/tar.gz/v0.0.2?dummy=/Songmu-gitconfig-v0.0.2_GH0.tar.gz: size of remote file is not known\n"
+"Songmu-gitconfig-v0.0.2_GH0.tar.gz 5662 B 936 kBps 00s\n"
+"=> daviddengcn-go-colortext-186a3d44e920_GH0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.\n"
+"=> Attempting to fetch https://codeload.github.com/daviddengcn/go-colortext/tar.gz/186a3d44e920?dummy=/daviddengcn-go-colortext-186a3d44e920_GH0.tar.gz\n"
+"fetch: https://codeload.github.com/daviddengcn/go-colortext/tar.gz/186a3d44e920?dummy=/daviddengcn-go-colortext-186a3d44e920_GH0.tar.gz: size of remote file is not known\n"
+"daviddengcn-go-colortext-186a3d44e920_GH0.tar. 4534 B 1098 kBps 00s\n"
+"[...]\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:969
+#, no-wrap
+msgid "Setting Output Binary Name or Installation Path"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:974
+msgid ""
+"Some ports need to install the resulting binary under a different name or to "
+"a path other than the default `${PREFIX}/bin`. This can be done by using "
+"`GO_TARGET` tuple syntax, for example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:978
+#, no-wrap
+msgid "GO_TARGET= ./cmd/ipfs:ipfs-go\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:981
+msgid "will install `ipfs` binary as `${PREFIX}/bin/ipfs-go` and"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:985
+#, no-wrap
+msgid "GO_TARGET= ./dnscrypt-proxy:${PREFIX}/sbin/dnscrypt-proxy\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:988
+msgid "will install `dnscrypt-proxy` to `${PREFIX}/sbin`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:991
+#, no-wrap
+msgid "Building Haskell Applications with `cabal`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:995
+msgid ""
+"For ports that use Cabal, build system defines `USES=cabal`. Refer to "
+"crossref:uses[uses-cabal,`cabal`] for a list of variables that can be set to "
+"control the build process."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:997
+#, no-wrap
+msgid "Creating a Port for a Hackage-hosted Haskell Application"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1002
+msgid ""
+"When preparing a Haskell Cabal port, package:devel/hs-cabal-install[] and "
+"package:ports-mgmt/hs-cabal2tuple[] programs are required, so make sure they "
+"are installed beforehand. First we need to define common ports variables "
+"that allow cabal-install to fetch the package distribution file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1008
+#, no-wrap
+msgid ""
+"PORTNAME=\tShellCheck\n"
+"DISTVERSION=\t0.6.0\n"
+"CATEGORIES=\tdevel\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1012
+#, no-wrap
+msgid ""
+"MAINTAINER=\thaskell@FreeBSD.org\n"
+"COMMENT=\tShell script analysis tool\n"
+"WWW=\t\thttps://www.shellcheck.net/\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1014
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1097
+#, no-wrap
+msgid "USES=\t\tcabal\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1019
+msgid ""
+"This minimal Makefile fetches the distribution file with the `cabal-extract` "
+"helper target:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1029
+#, no-wrap
+msgid ""
+"% make cabal-extract\n"
+"[...]\n"
+"Downloading the latest package list from hackage.haskell.org\n"
+"cabal get ShellCheck-0.6.0\n"
+"Downloading ShellCheck-0.6.0\n"
+"Downloaded ShellCheck-0.6.0\n"
+"Unpacking to ShellCheck-0.6.0/\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1032
+msgid ""
+"Now that we have ShellCheck.cabal package description file under `${WRKSRC}"
+"`, we can use `cabal-configure` to generate the build plan:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1043
+#, no-wrap
+msgid ""
+"% make cabal-configure\n"
+"[...]\n"
+"Resolving dependencies...\n"
+"Build profile: -w ghc-8.10.7 -O1\n"
+"In order, the following would be built (use -v for more details):\n"
+" - Diff-0.4.1 (lib) (requires download & build)\n"
+" - OneTuple-0.3.1 (lib) (requires download & build)\n"
+"[...]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1046
+msgid "Once done, a list of required dependencies can generated:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1054
+#, no-wrap
+msgid ""
+"% make make-use-cabal\n"
+"USE_CABAL=\tQuickCheck-2.12.6.1 \\\n"
+"\t\thashable-1.3.0.0 \\\n"
+"\t\tinteger-logarithms-1.0.3 \\\n"
+"[...]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1060
+msgid ""
+"Haskell packages may contain revisions, just like FreeBSD ports. Revisions "
+"can affect [.filename]#.cabal# files only. Note additional version numbers "
+"after the `_` symbol. Put newly generated `USE_CABAL` list instead of an "
+"old one."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1062
+msgid ""
+"Finally, [.filename]#distinfo# needs to be regenerated to contain all the "
+"distribution files:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1073
+#, no-wrap
+msgid ""
+"% make makesum\n"
+"=> ShellCheck-0.6.0.tar.gz doesn't seem to exist in /usr/local/poudriere/ports/git/distfiles/cabal.\n"
+"=> Attempting to fetch https://hackage.haskell.org/package/ShellCheck-0.6.0/ShellCheck-0.6.0.tar.gz\n"
+"ShellCheck-0.6.0.tar.gz 136 kB 642 kBps 00s\n"
+"=> QuickCheck-2.12.6.1/QuickCheck-2.12.6.1.tar.gz doesn't seem to exist in /usr/local/poudriere/ports/git/distfiles/cabal.\n"
+"=> Attempting to fetch https://hackage.haskell.org/package/QuickCheck-2.12.6.1/QuickCheck-2.12.6.1.tar.gz\n"
+"QuickCheck-2.12.6.1/QuickCheck-2.12.6.1.tar.gz 65 kB 361 kBps 00s\n"
+"[...]\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1083
+msgid ""
+"Some Haskell ports install various data files under `share/${PORTNAME}`. For "
+"such cases special handling is required on the port side. The port should "
+"define the `CABAL_WRAPPER_SCRIPTS` knob listing each executable that is "
+"going to use data files. Moreover, in rare cases the program being ported "
+"uses data files of other Haskell packages, in which case the "
+"`FOO_DATADIR_VARS` comes to the rescue."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1085
+#, no-wrap
+msgid "Handling Data Files in a Haskell Port"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1089
+msgid ""
+"`devel/hs-profiteur` is a Haskell application that generates a single-page "
+"HTML with some content."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1093
+#, no-wrap
+msgid "PORTNAME=\tprofiteur\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1095
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1110
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1128
+#, no-wrap
+msgid "[...]\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1101
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1114
+#, no-wrap
+msgid ""
+"USE_CABAL=\tOneTuple-0.3.1_2 \\\n"
+"\t\tQuickCheck-2.14.2 \\\n"
+"\t\t[...]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1106
+msgid ""
+"It installs HTML templates under `share/profiteur`, so we need to add "
+"`CABAL_WRAPPER_SCRIPTS` knob:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1117
+#, no-wrap
+msgid "CABAL_WRAPPER_SCRIPTS=\t\t${CABAL_EXECUTABLES}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1124
+msgid ""
+"The program also tries to access the `jquery.js` file, which is a part of "
+"`js-jquery-3.3.1` Haskell package. For that file to be found, we need to "
+"make the wrapper script to look for `js-jquery` data files in `share/"
+"profiteur` too. We use `profiteur_DATADIR_VARS` for this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1131
+#, no-wrap
+msgid ""
+"CABAL_WRAPPER_SCRIPTS=\t\t${CABAL_EXECUTABLES}\n"
+"profiteur_DATADIR_VARS=\t\tjs-jquery\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1136
+msgid ""
+"Now the port will install the actual binary into `libexec/cabal/profiteur` "
+"and the script into `bin/profiteur`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1141
+msgid ""
+"There is no easy way to find out a proper value for the `FOO_DATADIR_VARS` "
+"knob apart from running the program and checking that everything works. "
+"Luckily, the need to use `FOO_DATADIR_VARS` is very rare."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1143
+msgid ""
+"Another corner case when porting complex Haskell programs is the presence of "
+"VCS dependencies in the `cabal.project` file."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1145
+#, no-wrap
+msgid "Porting Haskell Applications with VCS Dependencies"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1150
+msgid ""
+"`net-p2p/cardano-node` is an extremely complex piece of software. In its "
+"`cabal.project` there are a lot of blocks like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1159
+#, no-wrap
+msgid ""
+"[...]\n"
+"source-repository-package\n"
+" type: git\n"
+" location: https://github.com/input-output-hk/cardano-crypto\n"
+" tag: f73079303f663e028288f9f4a9e08bcca39a923e\n"
+"[...]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1165
+msgid ""
+"Dependencies of type `source-repository-package` are automatically pulled in "
+"by `cabal` during the build process. Unfortunately, this makes use of the "
+"network after the `fetch` stage. This is disallowed by the ports framework. "
+"These sources need to be listed in the port's Makefile. The `make-use-cabal` "
+"helper target can make it easy for packages hosted on GitHub. Running this "
+"target after the usual `cabal-extract` and `cabal-configure` will produce "
+"not only the `USE_CABAL` knob, but also `GH_TUPLE`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1173
+#, no-wrap
+msgid ""
+"% make make-use-cabal\n"
+"USE_CABAL=\tDiff-0.4.1 \\\n"
+"\t\tGlob-0.10.2_3 \\\n"
+"\t\tHUnit-1.6.2.0 \\\n"
+"\t\t[...]\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1177
+#, no-wrap
+msgid ""
+"GH_TUPLE=\t\tinput-output-hk:cardano-base:0f3a867493059e650cda69e20a5cbf1ace289a57:cardano_base/dist-newstyle/src/cardano-b_-c8db9876882556ed \\\n"
+"\t\tinput-output-hk:cardano-crypto:f73079303f663e028288f9f4a9e08bcca39a923e:cardano_crypto/dist-newstyle/src/cardano-c_-253fd88117badd8f \\\n"
+"\t\t[...]\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1180
+msgid ""
+"It might be useful to separate the `GH_TUPLE` items coming from `make-use-"
+"cabal` from the other ones to make it easy to update the port:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1186
+#, no-wrap
+msgid ""
+"GH_TUPLE=\tinput-output-hk:cardano-base:0f3a867493059e650cda69e20a5cbf1ace289a57:cardano_base/dist-newstyle/src/cardano-b_-c8db9876882556ed \\\n"
+"\t\tinput-output-hk:cardano-crypto:f73079303f663e028288f9f4a9e08bcca39a923e:cardano_crypto/dist-newstyle/src/cardano-c_-253fd88117badd8f \\\n"
+"\t\t[...]\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1188
+#, no-wrap
+msgid "GH_TUPLE+=\tbitcoin-core:secp256k1:ac83be33d0956faf6b7f61a60ab524ef7d6a473a:secp\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1191
+msgid ""
+"Haskell ports with VCS dependencies also require the following hack for the "
+"time being:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1195
+#, no-wrap
+msgid "BINARY_ALIAS=\tgit=true\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1200
+#, no-wrap
+msgid "Using GNU Autotools"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1204
+msgid ""
+"If a port needs any of the GNU Autotools software, add `USES=autoreconf`. "
+"See crossref:uses[uses-autoreconf,`autoreconf`] for more information."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1206
+#, no-wrap
+msgid "Using GNU `gettext`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1209
+#, no-wrap
+msgid "Basic Usage"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1213
+msgid ""
+"If the port requires `gettext`, set `USES= gettext`, and the port will "
+"inherit a dependency on [.filename]#libintl.so# from package:devel/"
+"gettext[]. Other values for `gettext` usage are listed in crossref:"
+"uses[uses-gettext,`USES=gettext`]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1216
+msgid ""
+"A rather common case is a port using `gettext` and `configure`. Generally, "
+"GNU `configure` should be able to locate `gettext` automatically."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1221
+#, no-wrap
+msgid ""
+"USES=\tgettext\n"
+"GNU_CONFIGURE=\tyes\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1224
+msgid ""
+"If it ever fails to, hints at the location of `gettext` can be passed in "
+"`CPPFLAGS` and `LDFLAGS` using `localbase` as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1229
+#, no-wrap
+msgid ""
+"USES=\tgettext localbase:ldflags\n"
+"GNU_CONFIGURE=\tyes\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1232
+#, no-wrap
+msgid "Optional Usage"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1238
+msgid ""
+"Some software products allow for disabling NLS. For example, through "
+"passing `--disable-nls` to `configure`. In that case, the port must use "
+"`gettext` conditionally, depending on the status of the `NLS` option. For "
+"ports of low to medium complexity, use this idiom:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1242
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1257
+#, no-wrap
+msgid "GNU_CONFIGURE=\t\tyes\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1245
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\t\tNLS\n"
+"OPTIONS_SUB=\t\tyes\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1248
+#, no-wrap
+msgid ""
+"NLS_USES=\t\tgettext\n"
+"NLS_CONFIGURE_ENABLE=\tnls\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1253
+msgid "Or using the older way of using options:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1259
+#, no-wrap
+msgid "OPTIONS_DEFINE=\t\tNLS\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1261
+#, no-wrap
+msgid ".include <bsd.port.options.mk>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1269
+#, no-wrap
+msgid ""
+".if ${PORT_OPTIONS:MNLS}\n"
+"USES+=\t\t\tgettext\n"
+"PLIST_SUB+=\t\tNLS=\"\"\n"
+".else\n"
+"CONFIGURE_ARGS+=\t--disable-nls\n"
+"PLIST_SUB+=\t\tNLS=\"@comment \"\n"
+".endif\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1280
+msgid ""
+"The next item on the to-do list is to arrange so that the message catalog "
+"files are included in the packing list conditionally. The [."
+"filename]#Makefile# part of this task is already provided by the idiom. It "
+"is explained in the section on crossref:plist[plist-sub,advanced [."
+"filename]#pkg-plist# practices]. In a nutshell, each occurrence of `%%NLS%"
+"%` in [.filename]#pkg-plist# will be replaced by \"`@comment `\" if NLS is "
+"disabled, or by a null string if NLS is enabled. Consequently, the lines "
+"prefixed by `%%NLS%%` will become mere comments in the final packing list if "
+"NLS is off; otherwise the prefix will be just left out. Then insert `%%NLS%"
+"%` before each path to a message catalog file in [.filename]#pkg-plist#. "
+"For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1285
+#, no-wrap
+msgid ""
+"%%NLS%%share/locale/fr/LC_MESSAGES/foobar.mo\n"
+"%%NLS%%share/locale/no/LC_MESSAGES/foobar.mo\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1288
+msgid ""
+"In high complexity cases, more advanced techniques may be needed, such as "
+"crossref:plist[plist-dynamic,dynamic packing list generation]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1290
+#, no-wrap
+msgid "Handling Message Catalog Directories"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1297
+msgid ""
+"There is a point to note about installing message catalog files. The target "
+"directories for them, which reside under [.filename]#LOCALBASE/share/"
+"locale#, must not be created and removed by a port. The most popular "
+"languages have their respective directories listed in [.filename]#PORTSDIR/"
+"Templates/BSD.local.dist#. The directories for many other languages are "
+"governed by the package:devel/gettext[] port. Consult its [.filename]#pkg-"
+"plist# and see whether the port is going to install a message catalog file "
+"for a unique language."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1299
+#, no-wrap
+msgid "Using Perl"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1307
+msgid ""
+"If `MASTER_SITES` is set to `CPAN`, the correct subdirectory is usually "
+"selected automatically. If the default subdirectory is wrong, `CPAN/Module` "
+"can be used to change it. `MASTER_SITES` can also be set to the old "
+"`MASTER_SITE_PERL_CPAN`, then the preferred value of `MASTER_SITE_SUBDIR` is "
+"the top-level hierarchy name. For example, the recommended value for `p5-"
+"Module-Name` is `Module`. The top-level hierarchy can be examined at "
+"https://cpan.org/modules/by-module/[cpan.org]. This keeps the port working "
+"when the author of the module changes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1312
+msgid ""
+"The exception to this rule is when the relevant directory does not exist or "
+"the distfile does not exist in that directory. In such case, using author's "
+"id as `MASTER_SITE_SUBDIR` is allowed. The `CPAN:AUTHOR` macro can be used, "
+"which will be translated to the hashed author directory. For example, `CPAN:"
+"AUTHOR` will be converted to `authors/id/A/AU/AUTHOR`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1314
+msgid ""
+"When a port needs Perl support, it must set `USES=perl5` with the optional "
+"`USE_PERL5` described in crossref:uses[uses-perl5,the perl5 USES "
+"description]."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1316
+#, no-wrap
+msgid "Read-Only Variables for Ports That Use Perl"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1320
+#, no-wrap
+msgid "Read only variables"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1323
+#, no-wrap
+msgid "`PERL`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1325
+#, no-wrap
+msgid "The full path of the Perl 5 interpreter, either in the system or installed from a port, but without the version number. Use this when the software needs the path to the Perl interpreter. To replace \"``#!``\"lines in scripts, use crossref:uses[uses-shebangfix,`shebangfix`]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1326
+#, no-wrap
+msgid "`PERL_VERSION`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1328
+#, no-wrap
+msgid "The full version of Perl installed (for example, `5.8.9`)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1329
+#, no-wrap
+msgid "`PERL_LEVEL`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1331
+#, no-wrap
+msgid "The installed Perl version as an integer of the form `MNNNPP` (for example, `500809`)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1332
+#, no-wrap
+msgid "`PERL_ARCH`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1334
+#, no-wrap
+msgid "Where Perl stores architecture dependent libraries. Defaults to `${ARCH}-freebsd`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1335
+#, no-wrap
+msgid "`PERL_PORT`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1337
+#, no-wrap
+msgid "Name of the Perl port that is installed (for example, `perl5`)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1338
+#, no-wrap
+msgid "`SITE_PERL`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1339
+#, no-wrap
+msgid "Directory name where site specific Perl packages go. This value is added to `PLIST_SUB`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1345
+msgid ""
+"Ports of Perl modules which do not have an official website must link to "
+"`cpan.org` in the WWW line of [.filename]#Makefile#. The preferred URL form "
+"is `https://search.cpan.org/dist/Module-Name/` (including the trailing "
+"slash)."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1353
+msgid ""
+"Do not use `${SITE_PERL}` in dependency declarations. Doing so assumes that "
+"[.filename]#perl5.mk# has been included, which is not always true. Ports "
+"depending on this port will have incorrect dependencies if this port's files "
+"move later in an upgrade. The right way to declare Perl module dependencies "
+"is shown in the example below."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1356
+#, no-wrap
+msgid "Perl Dependency Example"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1362
+#, no-wrap
+msgid "p5-IO-Tee>=0.64:devel/p5-IO-Tee\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1367
+msgid ""
+"For Perl ports that install manual pages, the macro `PERL5_MAN3` and "
+"`PERL5_MAN1` can be used inside [.filename]#pkg-plist#. For example,"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1372
+#, no-wrap
+msgid ""
+"lib/perl5/5.14/man/man1/event.1.gz\n"
+"lib/perl5/5.14/man/man3/AnyEvent::I3.3.gz\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1375
+msgid "can be replaced with"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1380
+#, no-wrap
+msgid ""
+"%%PERL5_MAN1%%/event.1.gz\n"
+"%%PERL5_MAN3%%/AnyEvent::I3.3.gz\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1385
+msgid ""
+"There are no `PERL5_MAN_x_` macros for the other sections (_x_ in `2` and "
+"`4` to `9`) because those get installed in the regular directories."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1388
+#, no-wrap
+msgid "A Port Which Only Requires Perl to Build"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1392
+msgid "As the default USE_PERL5 value is build and run, set it to:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1397
+#, no-wrap
+msgid ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tbuild\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1402
+#, no-wrap
+msgid "A Port Which Also Requires Perl to Patch"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1407
+msgid ""
+"From time to time, using man:sed[1] for patching is not enough. When using "
+"man:perl[1] is easier, use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1412
+#, no-wrap
+msgid ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tpatch build run\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1417
+#, no-wrap
+msgid "A Perl Module Which Needs `ExtUtils::MakeMaker` to Build"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1422
+msgid ""
+"Most Perl modules come with a [.filename]#Makefile.PL# configure script. In "
+"this case, set:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1427
+#, no-wrap
+msgid ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tconfigure\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1432
+#, no-wrap
+msgid "A Perl Module Which Needs `Module::Build` to Build"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1436
+msgid ""
+"When a Perl module comes with a [.filename]#Build.PL# configure script, it "
+"can require Module::Build, in which case, set"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1441
+#, no-wrap
+msgid ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tmodbuild\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1444
+msgid "If it instead requires Module::Build::Tiny, set"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1449
+#, no-wrap
+msgid ""
+"USES=\t\tperl5\n"
+"USE_PERL5=\tmodbuildtiny\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1454
+#, no-wrap
+msgid "Using X11"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1457
+#, no-wrap
+msgid "X.Org Components"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1462
+msgid ""
+"The X11 implementation available in The Ports Collection is X.Org. If the "
+"application depends on X components, add `USES= xorg` and set `USE_XORG` to "
+"the list of required components. A full list can be found in crossref:"
+"uses[uses-xorg,`xorg`]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1467
+msgid ""
+"The Mesa Project is an effort to provide free OpenGL implementation. To "
+"specify a dependency on various components of this project, use `USES= gl` "
+"and `USE_GL`. See crossref:uses[uses-gl,`gl`] for a full list of available "
+"components. For backwards compatibility, the value of `yes` maps to `glu`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1469
+#, no-wrap
+msgid "`USE_XORG` Example"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1477
+#, no-wrap
+msgid ""
+"USES=\t\tgl xorg\n"
+"USE_GL=\t\tglu\n"
+"USE_XORG=\txrender xft xkbfile xt xaw\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1482
+#, no-wrap
+msgid "Variables for Ports That Use X"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1486
+#, no-wrap
+msgid "`USES= imake`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1488
+#, no-wrap
+msgid "The port uses `imake`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1489
+#, no-wrap
+msgid "`XMKMF`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1490
+#, no-wrap
+msgid "Set to the path of `xmkmf` if not in the `PATH`. Defaults to `xmkmf -a`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1493
+#, no-wrap
+msgid "Using X11-Related Variables"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1501
+#, no-wrap
+msgid ""
+"# Use some X11 libraries\n"
+"USES=\t\txorg\n"
+"USE_XORG=\tx11 xpm\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1506
+#, no-wrap
+msgid "Ports That Require Motif"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1512
+msgid ""
+"If the port requires a Motif library, define `USES= motif` in the [."
+"filename]#Makefile#. Default Motif implementation is package:x11-toolkits/"
+"open-motif[]. Users can choose package:x11-toolkits/lesstif[] instead by "
+"setting `WANT_LESSTIF` in their [.filename]#make.conf#. Similarly package:"
+"x11-toolkits/open-motif-devel[] can be chosen by setting "
+"`WANT_OPEN_MOTIF_DEVEL` in [.filename]#make.conf#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1515
+msgid ""
+"`MOTIFLIB` will be set by [.filename]#motif.mk# to reference the appropriate "
+"Motif library. Please patch the source of the port to use `${MOTIFLIB}` "
+"wherever the Motif library is referenced in the original [."
+"filename]#Makefile# or [.filename]#Imakefile#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1517
+msgid "There are two common cases:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1519
+msgid ""
+"If the port refers to the Motif library as `-lXm` in its [."
+"filename]#Makefile# or [.filename]#Imakefile#, substitute `${MOTIFLIB}` for "
+"it."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1520
+msgid ""
+"If the port uses `XmClientLibs` in its [.filename]#Imakefile#, change it to "
+"`${MOTIFLIB} ${XTOOLLIB} ${XLIB}`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1522
+msgid ""
+"Note that `MOTIFLIB` (usually) expands to `-L/usr/local/lib -lXm -lXp` or `/"
+"usr/local/lib/libXm.a`, so there is no need to add `-L` or `-l` in front."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1524
+#, no-wrap
+msgid "X11 Fonts"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1527
+msgid ""
+"If the port installs fonts for the X Window System, put them in [."
+"filename]#LOCALBASE/lib/X11/fonts/local#."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1529
+#, no-wrap
+msgid "Getting a Fake `DISPLAY` with Xvfb"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1536
+msgid ""
+"Some applications require a working X11 display for compilation to succeed. "
+"This poses a problem for machines that operate headless. When this variable "
+"is used, the build infrastructure will start the virtual framebuffer X "
+"server. The working `DISPLAY` is then passed to the build. See crossref:"
+"uses[uses-display,`USES=display`] for the possible arguments."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1540
+#, no-wrap
+msgid "USES=\tdisplay\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1544
+#, no-wrap
+msgid "Desktop Entries"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1550
+msgid ""
+"Desktop entries (https://standards.freedesktop.org/desktop-entry-spec/latest/"
+"[a Freedesktop standard]) provide a way to automatically adjust desktop "
+"features when a new program is installed, without requiring user "
+"intervention. For example, newly-installed programs automatically appear in "
+"the application menus of compatible desktop environments. Desktop entries "
+"originated in the GNOME desktop environment, but are now a standard and also "
+"work with KDE and Xfce. This bit of automation provides a real benefit to "
+"the user, and desktop entries are encouraged for applications which can be "
+"used in a desktop environment."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1552
+#, no-wrap
+msgid "Using Predefined [.filename]#.desktop# Files"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1556
+msgid ""
+"Ports that include predefined [.filename]#*.desktop# must include those "
+"files in [.filename]#pkg-plist# and install them in the [."
+"filename]#$LOCALBASE/share/applications# directory. The crossref:"
+"makefiles[install-macros,`INSTALL_DATA` macro] is useful for installing "
+"these files."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1558
+#, no-wrap
+msgid "Updating Desktop Database"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1562
+msgid ""
+"If a port has a MimeType entry in its [.filename]#portname.desktop#, the "
+"desktop database must be updated after install and deinstall. To do this, "
+"define `USES`= desktop-file-utils."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1564
+#, no-wrap
+msgid "Creating Desktop Entries with `DESKTOP_ENTRIES`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1569
+msgid ""
+"Desktop entries can be easily created for applications by using "
+"`DESKTOP_ENTRIES`. A file named [.filename]#name.desktop# will be created, "
+"installed, and added to [.filename]#pkg-plist# automatically. Syntax is:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1573
+#, no-wrap
+msgid "DESKTOP_ENTRIES=\t\"NAME\" \"COMMENT\" \"ICON\" \"COMMAND\" \"CATEGORY\" StartupNotify\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1580
+msgid ""
+"The list of possible categories is available on the https://standards."
+"freedesktop.org/menu-spec/latest/apa.html[Freedesktop website]. "
+"`StartupNotify` indicates whether the application is compatible with "
+"_startup notifications_. These are typically a graphic indicator like a "
+"clock that appear at the mouse pointer, menu, or panel to give the user an "
+"indication when a program is starting. A program that is compatible with "
+"startup notifications clears the indicator after it has started. Programs "
+"that are not compatible with startup notifications would never clear the "
+"indicator (potentially confusing and infuriating the user), and must have "
+"`StartupNotify` set to `false` so the indicator is not shown at all."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1582
+msgid "Example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1589
+#, no-wrap
+msgid ""
+"DESKTOP_ENTRIES=\t\"ToME\" \"Roguelike game based on JRR Tolkien's work\" \\\n"
+"\t\t\t\"${DATADIR}/xtra/graf/tome-128.png\" \\\n"
+"\t\t\t\"tome -v -g\" \"Application;Game;RolePlaying;\" \\\n"
+"\t\t\tfalse\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1594
+msgid ""
+"`DESKTOP_ENTRIES` are installed in the directory pointed to by the "
+"`DESKTOPDIR` variable. `DESKTOPDIR` defaults to [.filename]#${PREFIX}/share/"
+"applications#"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1597
+#, no-wrap
+msgid "Using GNOME"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1600
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3757
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4058
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4274
+#, no-wrap
+msgid "Introduction"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1604
+msgid ""
+"This chapter explains the GNOME framework as used by ports. The framework "
+"can be loosely divided into the base components, GNOME desktop components, "
+"and a few special macros that simplify the work of port maintainers."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1606
+#, no-wrap
+msgid "Using `USE_GNOME`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1614
+msgid ""
+"Adding this variable to the port allows the use of the macros and components "
+"defined in [.filename]#bsd.gnome.mk#. The code in [.filename]#bsd.gnome.mk# "
+"adds the needed build-time, run-time or library dependencies or the handling "
+"of special files. GNOME applications under FreeBSD use the `USE_GNOME` "
+"infrastructure. Include all the needed components as a space-separated "
+"list. The `USE_GNOME` components are divided into these virtual lists: "
+"basic components, GNOME 3 components and legacy components. If the port "
+"needs only GTK3 libraries, this is the shortest way to define it:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1618
+#, no-wrap
+msgid "USE_GNOME=\tgtk30\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1622
+msgid ""
+"`USE_GNOME` components automatically add the dependencies they need. Please "
+"see <<gnome-components>> for an exhaustive list of all `USE_GNOME` "
+"components and which other components they imply and their dependencies."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1625
+msgid ""
+"Here is an example [.filename]#Makefile# for a GNOME port that uses many of "
+"the techniques outlined in this document. Please use it as a guide for "
+"creating new ports."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1632
+#, no-wrap
+msgid ""
+"PORTNAME=\tregexxer\n"
+"DISTVERSION=\t0.10\n"
+"CATEGORIES=\tdevel textproc gnome\n"
+"MASTER_SITES=\tGNOME\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1636
+#, no-wrap
+msgid ""
+"MAINTAINER=\tkwm@FreeBSD.org\n"
+"COMMENT=\tInteractive tool for performing search and replace operations\n"
+"WWW=\t\thttp://regexxer.sourceforge.net/\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1640
+#, no-wrap
+msgid ""
+"USES=\t\tgettext gmake localbase:ldflags pathfix pkgconfig tar:xz\n"
+"GNU_CONFIGURE=\tyes\n"
+"USE_GNOME=\tgnomeprefix intlhack gtksourceviewmm3\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1642
+#, no-wrap
+msgid "GLIB_SCHEMAS=\torg.regexxer.gschema.xml\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1650
+msgid ""
+"The `USE_GNOME` macro without any arguments does not add any dependencies to "
+"the port. `USE_GNOME` cannot be set after [.filename]#bsd.port.pre.mk#."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1653
+#, no-wrap
+msgid "Variables"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1659
+msgid ""
+"This section explains which macros are available and how they are used. "
+"Like they are used in the above example. The <<gnome-components>> has a "
+"more in-depth explanation. `USE_GNOME` has to be set for these macros to be "
+"of use."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1660
+#, no-wrap
+msgid "`GLIB_SCHEMAS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1663
+msgid ""
+"List of all the glib schema files the port installs. The macro will add the "
+"files to the port plist and handle the registration of these files on "
+"install and deinstall."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1668
+msgid ""
+"The glib schema files are written in XML and end with the [."
+"filename]#gschema.xml# extension. They are installed in the [."
+"filename]#share/glib-2.0/schemas/# directory. These schema files contain "
+"all application config values with their default settings. The actual "
+"database used by the applications is built by glib-compile-schema, which is "
+"run by the `GLIB_SCHEMAS` macro."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1672
+#, no-wrap
+msgid "GLIB_SCHEMAS=foo.gschema.xml\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1678
+msgid ""
+"Do not add glib schemas to the [.filename]#pkg-plist#. If they are listed "
+"in [.filename]#pkg-plist#, they will not be registered and the applications "
+"might not work properly."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1680
+#, no-wrap
+msgid "`GCONF_SCHEMAS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1683
+msgid ""
+"List all the gconf schema files. The macro will add the schema files to the "
+"port plist and will handle their registration on install and deinstall."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1688
+msgid ""
+"GConf is the XML-based database that virtually all GNOME applications use "
+"for storing their settings. These files are installed into the [."
+"filename]#etc/gconf/schemas# directory. This database is defined by "
+"installed schema files that are used to generate [.filename]#%gconf.xml# key "
+"files. For each schema file installed by the port, there must be an entry "
+"in the [.filename]#Makefile#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1692
+#, no-wrap
+msgid "GCONF_SCHEMAS=my_app.schemas my_app2.schemas my_app3.schemas\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1698
+msgid ""
+"Gconf schemas are listed in the `GCONF_SCHEMAS` macro rather than [."
+"filename]#pkg-plist#. If they are listed in [.filename]#pkg-plist#, they "
+"will not be registered and the applications might not work properly."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1700
+#, no-wrap
+msgid "`INSTALLS_OMF`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1704
+msgid ""
+"Open Source Metadata Framework (OMF) files are commonly used by GNOME 2 "
+"applications. These files contain the application help file information, "
+"and require special processing by ScrollKeeper/rarian. To properly register "
+"OMF files when installing GNOME applications from packages, make sure that "
+"`omf` files are listed in `pkg-plist` and that the port [."
+"filename]#Makefile# has `INSTALLS_OMF` defined:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1708
+#, no-wrap
+msgid "INSTALLS_OMF=yes\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1711
+msgid ""
+"When set, [.filename]#bsd.gnome.mk# automatically scans [.filename]#pkg-"
+"plist# and adds appropriate `@exec` and `@unexec` directives for each [."
+"filename]#.omf# to track in the OMF registration database."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1713
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1723
+#, no-wrap
+msgid "GNOME Components"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1721
+msgid ""
+"For further help with a GNOME port, look at some of the link:https://www."
+"FreeBSD.org/ports/gnome.html[existing ports] for examples. The link:https://"
+"www.FreeBSD.org/gnome/[FreeBSD GNOME page] has contact information if more "
+"help is needed. The components are divided into GNOME components that are "
+"currently in use and legacy components. If the component supports argument, "
+"they are listed between parenthesis in the description. The first is the "
+"default. \"Both\" is shown if the component defaults to adding to both "
+"build and run dependencies."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1727
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1896
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1913
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2082
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3899
+#, no-wrap
+msgid "Component"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1728
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1914
+#, no-wrap
+msgid "Associated program"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1731
+#, no-wrap
+msgid "`atk`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1732
+#, no-wrap
+msgid "accessibility/atk"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1734
+#, no-wrap
+msgid "Accessibility toolkit (ATK)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1735
+#, no-wrap
+msgid "`atkmm`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1736
+#, no-wrap
+msgid "accessibility/atkmm"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1738
+#, no-wrap
+msgid "c++ bindings for atk"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1739
+#, no-wrap
+msgid "`cairo`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1740
+#, no-wrap
+msgid "graphics/cairo"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1742
+#, no-wrap
+msgid "Vector graphics library with cross-device output support"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1743
+#, no-wrap
+msgid "`cairomm`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1744
+#, no-wrap
+msgid "graphics/cairomm"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1746
+#, no-wrap
+msgid "c++ bindings for cairo"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1747
+#, no-wrap
+msgid "`dconf`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1748
+#, no-wrap
+msgid "devel/dconf"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1750
+#, no-wrap
+msgid "Configuration database system (both, build, run)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1751
+#, no-wrap
+msgid "`evolutiondataserver3`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1752
+#, no-wrap
+msgid "databases/evolution-data-server"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1754
+#, no-wrap
+msgid "Data backends for the Evolution integrated mail/PIM suite"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1755
+#, no-wrap
+msgid "`gdkpixbuf2`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1756
+#, no-wrap
+msgid "graphics/gdk-pixbuf2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1758
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1940
+#, no-wrap
+msgid "Graphics library for GTK+"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1759
+#, no-wrap
+msgid "`glib20`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1760
+#, no-wrap
+msgid "devel/glib20"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1762
+#, no-wrap
+msgid "GNOME core library `glib20`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1763
+#, no-wrap
+msgid "`glibmm`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1764
+#, no-wrap
+msgid "devel/glibmm"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1766
+#, no-wrap
+msgid "c++ bindings for glib20"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1767
+#, no-wrap
+msgid "`gnomecontrolcenter3`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1768
+#, no-wrap
+msgid "sysutils/gnome-control-center"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1770
+#, no-wrap
+msgid "GNOME 3 Control Center"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1771
+#, no-wrap
+msgid "`gnomedesktop3`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1772
+#, no-wrap
+msgid "x11/gnome-desktop"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1774
+#, no-wrap
+msgid "GNOME 3 desktop UI library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1775
+#, no-wrap
+msgid "`gsound`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1776
+#, no-wrap
+msgid "audio/gsound"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1778
+#, no-wrap
+msgid "GObject library for playing system sounds (both, build, run)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1779
+#, no-wrap
+msgid "`gtk-update-icon-cache`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1780
+#, no-wrap
+msgid "graphics/gtk-update-icon-cache"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1782
+#, no-wrap
+msgid "Gtk-update-icon-cache utility from the Gtk+ toolkit"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1783
+#, no-wrap
+msgid "`gtk20`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1784
+#, no-wrap
+msgid "x11-toolkits/gtk20"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1786
+#, no-wrap
+msgid "Gtk+ 2 toolkit"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1787
+#, no-wrap
+msgid "`gtk30`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1788
+#, no-wrap
+msgid "x11-toolkits/gtk30"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1790
+#, no-wrap
+msgid "Gtk+ 3 toolkit"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1791
+#, no-wrap
+msgid "`gtkmm20`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1792
+#, no-wrap
+msgid "x11-toolkits/gtkmm20"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1794
+#, no-wrap
+msgid "c++ bindings 2.0 for the gtk20 toolkit"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1795
+#, no-wrap
+msgid "`gtkmm24`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1796
+#, no-wrap
+msgid "x11-toolkits/gtkmm24"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1798
+#, no-wrap
+msgid "c++ bindings 2.4 for the gtk20 toolkit"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1799
+#, no-wrap
+msgid "`gtkmm30`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1800
+#, no-wrap
+msgid "x11-toolkits/gtkmm30"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1802
+#, no-wrap
+msgid "c++ bindings 3.0 for the gtk30 toolkit"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1803
+#, no-wrap
+msgid "`gtksourceview2`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1804
+#, no-wrap
+msgid "x11-toolkits/gtksourceview2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1806
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1984
+#, no-wrap
+msgid "Widget that adds syntax highlighting to GtkTextView"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1807
+#, no-wrap
+msgid "`gtksourceview3`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1808
+#, no-wrap
+msgid "x11-toolkits/gtksourceview3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1810
+#, no-wrap
+msgid "Text widget that adds syntax highlighting to the GtkTextView widget"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1811
+#, no-wrap
+msgid "`gtksourceviewmm3`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1812
+#, no-wrap
+msgid "x11-toolkits/gtksourceviewmm3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1814
+#, no-wrap
+msgid "c++ bindings for the gtksourceview3 library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1815
+#, no-wrap
+msgid "`gvfs`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1816
+#, no-wrap
+msgid "devel/gvfs"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1818
+#, no-wrap
+msgid "GNOME virtual file system"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1819
+#, no-wrap
+msgid "`intltool`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1820
+#, no-wrap
+msgid "textproc/intltool"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1822
+#, no-wrap
+msgid "Tool for internationalization (also see intlhack)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1823
+#, no-wrap
+msgid "`introspection`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1824
+#, no-wrap
+msgid "devel/gobject-introspection"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1826
+#, no-wrap
+msgid "Basic introspection bindings and tools to generate introspection bindings. Most of the time :build is enough, :both/:run is only need for applications that use introspection bindings. (both, build, run)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1827
+#, no-wrap
+msgid "`libgda5`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1828
+#, no-wrap
+msgid "databases/libgda5"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1830
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2000
+#, no-wrap
+msgid "Provides uniform access to different kinds of data sources"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1831
+#, no-wrap
+msgid "`libgda5-ui`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1832
+#, no-wrap
+msgid "databases/libgda5-ui"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1834
+#, no-wrap
+msgid "UI library from the libgda5 library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1835
+#, no-wrap
+msgid "`libgdamm5`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1836
+#, no-wrap
+msgid "databases/libgdamm5"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1838
+#, no-wrap
+msgid "c++ bindings for the libgda5 library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1839
+#, no-wrap
+msgid "`libgsf`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1840
+#, no-wrap
+msgid "devel/libgsf"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1842
+#, no-wrap
+msgid "Extensible I/O abstraction for dealing with structured file formats"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1843
+#, no-wrap
+msgid "`librsvg2`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1844
+#, no-wrap
+msgid "graphics/librsvg2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1846
+#, no-wrap
+msgid "Library for parsing and rendering SVG vector-graphic files"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1847
+#, no-wrap
+msgid "`libsigc++20`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1848
+#, no-wrap
+msgid "devel/libsigc++20"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1850
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2044
+#, no-wrap
+msgid "Callback Framework for C++"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1851
+#, no-wrap
+msgid "`libxml++26`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1852
+#, no-wrap
+msgid "textproc/libxml++26"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1854
+#, no-wrap
+msgid "c++ bindings for the libxml2 library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1855
+#, no-wrap
+msgid "`libxml2`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1856
+#, no-wrap
+msgid "textproc/libxml2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1858
+#, no-wrap
+msgid "XML parser library (both, build, run)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1859
+#, no-wrap
+msgid "`libxslt`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1860
+#, no-wrap
+msgid "textproc/libxslt"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1862
+#, no-wrap
+msgid "XSLT C library (both, build, run)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1863
+#, no-wrap
+msgid "`metacity`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1864
+#, no-wrap
+msgid "x11-wm/metacity"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1866
+#, no-wrap
+msgid "Window manager from GNOME"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1867
+#, no-wrap
+msgid "`nautilus3`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1868
+#, no-wrap
+msgid "x11-fm/nautilus"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1870
+#, no-wrap
+msgid "GNOME file manager"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1871
+#, no-wrap
+msgid "`pango`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1872
+#, no-wrap
+msgid "x11-toolkits/pango"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1874
+#, no-wrap
+msgid "Open-source framework for the layout and rendering of i18n text"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1875
+#, no-wrap
+msgid "`pangomm`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1876
+#, no-wrap
+msgid "x11-toolkits/pangomm"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1878
+#, no-wrap
+msgid "c++ bindings for the pango library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1879
+#, no-wrap
+msgid "`py3gobject3`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1880
+#, no-wrap
+msgid "devel/py3-gobject3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1882
+#, no-wrap
+msgid "Python 3, GObject 3.0 bindings"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1883
+#, no-wrap
+msgid "`pygobject3`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1884
+#, no-wrap
+msgid "devel/py-gobject3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1886
+#, no-wrap
+msgid "Python 2, GObject 3.0 bindings"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1887
+#, no-wrap
+msgid "`vte3`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1888
+#, no-wrap
+msgid "x11-toolkits/vte3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1889
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2075
+#, no-wrap
+msgid "Terminal widget with improved accessibility and I18N support"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1892
+#, no-wrap
+msgid "GNOME Macro Components"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1899
+#, no-wrap
+msgid "`gnomeprefix`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1901
+#, no-wrap
+msgid "Supply `configure` with some default locations."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1902
+#, no-wrap
+msgid "`intlhack`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1904
+#, no-wrap
+msgid "Same as intltool, but patches to make sure [.filename]#share/locale/# is used. Please only use when `intltool` alone is not enough."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1905
+#, no-wrap
+msgid "`referencehack`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1906
+#, no-wrap
+msgid "This macro is there to help splitting of the API or reference documentation into its own port."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1909
+#, no-wrap
+msgid "GNOME Legacy Components"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1917
+#, no-wrap
+msgid "`atspi`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1918
+#, no-wrap
+msgid "accessibility/at-spi"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1920
+#, no-wrap
+msgid "Assistive Technology Service Provider Interface"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1921
+#, no-wrap
+msgid "`esound`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1922
+#, no-wrap
+msgid "audio/esound"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1924
+#, no-wrap
+msgid "Enlightenment sound package"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1925
+#, no-wrap
+msgid "`gal2`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1926
+#, no-wrap
+msgid "x11-toolkits/gal2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1928
+#, no-wrap
+msgid "Collection of widgets taken from GNOME 2 gnumeric"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1929
+#, no-wrap
+msgid "`gconf2`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1930
+#, no-wrap
+msgid "devel/gconf2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1932
+#, no-wrap
+msgid "Configuration database system for GNOME 2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1933
+#, no-wrap
+msgid "`gconfmm26`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1934
+#, no-wrap
+msgid "devel/gconfmm26"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1936
+#, no-wrap
+msgid "c++ bindings for gconf2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1937
+#, no-wrap
+msgid "`gdkpixbuf`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1938
+#, no-wrap
+msgid "graphics/gdk-pixbuf"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1941
+#, no-wrap
+msgid "`glib12`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1942
+#, no-wrap
+msgid "devel/glib12"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1944
+#, no-wrap
+msgid "glib 1.2 core library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1945
+#, no-wrap
+msgid "`gnomedocutils`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1946
+#, no-wrap
+msgid "textproc/gnome-doc-utils"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1948
+#, no-wrap
+msgid "GNOME doc utils"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1949
+#, no-wrap
+msgid "`gnomemimedata`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1950
+#, no-wrap
+msgid "misc/gnome-mime-data"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1952
+#, no-wrap
+msgid "MIME and Application database for GNOME 2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1953
+#, no-wrap
+msgid "`gnomesharp20`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1954
+#, no-wrap
+msgid "x11-toolkits/gnome-sharp20"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1956
+#, no-wrap
+msgid "GNOME 2 interfaces for the .NET runtime"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1957
+#, no-wrap
+msgid "`gnomespeech`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1958
+#, no-wrap
+msgid "accessibility/gnome-speech"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1960
+#, no-wrap
+msgid "GNOME 2 text-to-speech API"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1961
+#, no-wrap
+msgid "`gnomevfs2`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1962
+#, no-wrap
+msgid "devel/gnome-vfs"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1964
+#, no-wrap
+msgid "GNOME 2 Virtual File System"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1965
+#, no-wrap
+msgid "`gtk12`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1966
+#, no-wrap
+msgid "x11-toolkits/gtk12"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1968
+#, no-wrap
+msgid "Gtk+ 1.2 toolkit"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1969
+#, no-wrap
+msgid "`gtkhtml3`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1970
+#, no-wrap
+msgid "www/gtkhtml3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1972
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1976
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2032
+#, no-wrap
+msgid "Lightweight HTML rendering/printing/editing engine"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1973
+#, no-wrap
+msgid "`gtkhtml4`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1974
+#, no-wrap
+msgid "www/gtkhtml4"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1977
+#, no-wrap
+msgid "`gtksharp20`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1978
+#, no-wrap
+msgid "x11-toolkits/gtk-sharp20"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1980
+#, no-wrap
+msgid "GTK+ and GNOME 2 interfaces for the .NET runtime"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1981
+#, no-wrap
+msgid "`gtksourceview`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1982
+#, no-wrap
+msgid "x11-toolkits/gtksourceview"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1985
+#, no-wrap
+msgid "`libartgpl2`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1986
+#, no-wrap
+msgid "graphics/libart_lgpl"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1988
+#, no-wrap
+msgid "Library for high-performance 2D graphics"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1989
+#, no-wrap
+msgid "`libbonobo`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1990
+#, no-wrap
+msgid "devel/libbonobo"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1992
+#, no-wrap
+msgid "Component and compound document system for GNOME 2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1993
+#, no-wrap
+msgid "`libbonoboui`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1994
+#, no-wrap
+msgid "x11-toolkits/libbonoboui"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1996
+#, no-wrap
+msgid "GUI frontend to the libbonobo component of GNOME 2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1997
+#, no-wrap
+msgid "`libgda4`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:1998
+#, no-wrap
+msgid "databases/libgda4"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2001
+#, no-wrap
+msgid "`libglade2`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2002
+#, no-wrap
+msgid "devel/libglade2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2004
+#, no-wrap
+msgid "GNOME 2 glade library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2005
+#, no-wrap
+msgid "`libgnome`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2006
+#, no-wrap
+msgid "x11/libgnome"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2008
+#, no-wrap
+msgid "Libraries for GNOME 2, a GNU desktop environment"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2009
+#, no-wrap
+msgid "`libgnomecanvas`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2010
+#, no-wrap
+msgid "graphics/libgnomecanvas"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2012
+#, no-wrap
+msgid "Graphics library for GNOME 2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2013
+#, no-wrap
+msgid "`libgnomekbd`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2014
+#, no-wrap
+msgid "x11/libgnomekbd"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2016
+#, no-wrap
+msgid "GNOME 2 keyboard shared library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2017
+#, no-wrap
+msgid "`libgnomeprint`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2018
+#, no-wrap
+msgid "print/libgnomeprint"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2020
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2024
+#, no-wrap
+msgid "Gnome 2 print support library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2021
+#, no-wrap
+msgid "`libgnomeprintui`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2022
+#, no-wrap
+msgid "x11-toolkits/libgnomeprintui"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2025
+#, no-wrap
+msgid "`libgnomeui`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2026
+#, no-wrap
+msgid "x11-toolkits/libgnomeui"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2028
+#, no-wrap
+msgid "Libraries for the GNOME 2 GUI, a GNU desktop environment"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2029
+#, no-wrap
+msgid "`libgtkhtml`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2030
+#, no-wrap
+msgid "www/libgtkhtml"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2033
+#, no-wrap
+msgid "`libgtksourceviewmm`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2034
+#, no-wrap
+msgid "x11-toolkits/libgtksourceviewmm"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2036
+#, no-wrap
+msgid "c++ binding of GtkSourceView"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2037
+#, no-wrap
+msgid "`libidl`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2038
+#, no-wrap
+msgid "devel/libIDL"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2040
+#, no-wrap
+msgid "Library for creating trees of CORBA IDL file"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2041
+#, no-wrap
+msgid "`libsigc++12`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2042
+#, no-wrap
+msgid "devel/libsigc++12"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2045
+#, no-wrap
+msgid "`libwnck`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2046
+#, no-wrap
+msgid "x11-toolkits/libwnck"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2048
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2052
+#, no-wrap
+msgid "Library used for writing pagers and taskslists"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2049
+#, no-wrap
+msgid "`libwnck3`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2050
+#, no-wrap
+msgid "x11-toolkits/libwnck3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2053
+#, no-wrap
+msgid "`orbit2`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2054
+#, no-wrap
+msgid "devel/ORBit2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2056
+#, no-wrap
+msgid "High-performance CORBA ORB with support for the C language"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2057
+#, no-wrap
+msgid "`pygnome2`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2058
+#, no-wrap
+msgid "x11-toolkits/py-gnome2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2060
+#, no-wrap
+msgid "Python bindings for GNOME 2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2061
+#, no-wrap
+msgid "`pygobject`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2062
+#, no-wrap
+msgid "devel/py-gobject"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2064
+#, no-wrap
+msgid "Python 2, GObject 2.0 bindings"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2065
+#, no-wrap
+msgid "`pygtk2`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2066
+#, no-wrap
+msgid "x11-toolkits/py-gtk2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2068
+#, no-wrap
+msgid "Set of Python bindings for GTK+"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2069
+#, no-wrap
+msgid "`pygtksourceview`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2070
+#, no-wrap
+msgid "x11-toolkits/py-gtksourceview"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2072
+#, no-wrap
+msgid "Python bindings for GtkSourceView 2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2073
+#, no-wrap
+msgid "`vte`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2074
+#, no-wrap
+msgid "x11-toolkits/vte"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2078
+#, no-wrap
+msgid "Deprecated Components: Do Not Use"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2085
+#, no-wrap
+msgid "`pangox-compat`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2086
+#, no-wrap
+msgid "pangox-compat has been deprecated and split off from the pango package."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2089
+#, no-wrap
+msgid "Using Qt"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2094
+msgid ""
+"For ports that are part of Qt itself, see crossref:uses[uses-qt-dist,`qt-"
+"dist`]."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2097
+#, no-wrap
+msgid "Ports That Require Qt"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2102
+msgid ""
+"The Ports Collection provides support for Qt 5 and Qt 6 with `USES+=qt:5` "
+"and `USES+=qt:6` respectively. Set `USE_QT` to the list of required Qt "
+"components (libraries, tools, plugins)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2104
+msgid ""
+"The Qt framework exports a number of variables which can be used by ports, "
+"some of them listed below:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2106
+#, no-wrap
+msgid "Variables Provided to Ports That Use Qt"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2110
+#, no-wrap
+msgid "`QMAKE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2112
+#, no-wrap
+msgid "Full path to `qmake` binary."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2113
+#, no-wrap
+msgid "`LRELEASE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2115
+#, no-wrap
+msgid "Full path to `lrelease` utility."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2116
+#, no-wrap
+msgid "`MOC`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2118
+#, no-wrap
+msgid "Full path to `moc`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2119
+#, no-wrap
+msgid "`RCC`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2121
+#, no-wrap
+msgid "Full path to `rcc`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2122
+#, no-wrap
+msgid "`UIC`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2124
+#, no-wrap
+msgid "Full path to `uic`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2125
+#, no-wrap
+msgid "`QT_INCDIR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2127
+#, no-wrap
+msgid "Qt include directory."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2128
+#, no-wrap
+msgid "`QT_LIBDIR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2130
+#, no-wrap
+msgid "Qt libraries path."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2131
+#, no-wrap
+msgid "`QT_PLUGINDIR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2132
+#, no-wrap
+msgid "Qt plugins path."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2135
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3845
+#, no-wrap
+msgid "Component Selection"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2142
+msgid ""
+"Individual Qt tool and library dependencies must be specified in `USE_QT`. "
+"Every component can be suffixed with `_build` or `_run`, the suffix "
+"indicating whether the dependency on the component is at buildtime or "
+"runtime. If unsuffixed, the component will be depended on at both build- "
+"and runtime. Usually, library components are specified unsuffixed, tool "
+"components are mostly specified with the `_build` suffix and plugin "
+"components are specified with the `_run` suffix. The most commonly used "
+"components are listed below (all available components are listed in "
+"`_USE_QT_ALL`, which is generated from `_USE_QT_COMMON` and "
+"`_USE_QT[56]_ONLY` in [.filename]#/usr/ports/Mk/Uses/qt.mk#):"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2144
+#, no-wrap
+msgid "Available Qt Library Components"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2148
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2392
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2409
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2540
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3119
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3835
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3855
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3880
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3984
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4154
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4206
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4298
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4389
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4451
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4712
+#, no-wrap
+msgid "Name"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2151
+#, no-wrap
+msgid "`3d`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2153
+#, no-wrap
+msgid "Qt3D module"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2154
+#, no-wrap
+msgid "`5compat`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2156
+#, no-wrap
+msgid "Qt 5 compatibility module for Qt 6"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2157
+#, no-wrap
+msgid "`assistant`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2159
+#, no-wrap
+msgid "Qt 5 documentation browser"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2160
+#, no-wrap
+msgid "`base`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2162
+#, no-wrap
+msgid "Qt 6 base module"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2163
+#, no-wrap
+msgid "`canvas3d`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2165
+#, no-wrap
+msgid "Qt canvas3d module"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2166
+#, no-wrap
+msgid "`charts`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2168
+#, no-wrap
+msgid "Qt 5 charts module"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2169
+#, no-wrap
+msgid "`concurrent`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2171
+#, no-wrap
+msgid "Qt multi-threading module"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2172
+#, no-wrap
+msgid "`connectivity`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2174
+#, no-wrap
+msgid "Qt connectivity (Bluetooth/NFC) module"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2175
+#, no-wrap
+msgid "`core`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2177
+#, no-wrap
+msgid "Qt core non-graphical module"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2178
+#, no-wrap
+msgid "`datavis3d`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2180
+#, no-wrap
+msgid "Qt 5 3D data visualization module"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2181
+#, no-wrap
+msgid "`dbus`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2183
+#, no-wrap
+msgid "Qt D-Bus inter-process communication module"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2184
+#, no-wrap
+msgid "`declarative`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2186
+#, no-wrap
+msgid "Qt declarative framework for dynamic user interfaces"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2187
+#, no-wrap
+msgid "`designer`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2189
+#, no-wrap
+msgid "Qt 5 graphical user interface designer"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2190
+#, no-wrap
+msgid "`diag`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2192
+#, no-wrap
+msgid "Tool for reporting diagnostic information about Qt and its environment"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2193
+#, no-wrap
+msgid "`doc`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2195
+#, no-wrap
+msgid "Qt 5 documentation"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2196
+#, no-wrap
+msgid "`examples`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2198
+#, no-wrap
+msgid "Qt 5 examples sourcecode"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2199
+#, no-wrap
+msgid "`gamepad`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2201
+#, no-wrap
+msgid "Qt 5 Gamepad Module"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2202
+#, no-wrap
+msgid "`graphicaleffects`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2204
+#, no-wrap
+msgid "Qt Quick graphical effects"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2205
+#, no-wrap
+msgid "`gui`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2207
+#, no-wrap
+msgid "Qt graphical user interface module"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2208
+#, no-wrap
+msgid "`help`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2210
+#, no-wrap
+msgid "Qt online help integration module"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2211
+#, no-wrap
+msgid "`l10n`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2213
+#, no-wrap
+msgid "Qt localized messages"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2214
+#, no-wrap
+msgid "`languageserver`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2216
+#, no-wrap
+msgid "Qt 6 Language Server Protocol implementation"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2217
+#, no-wrap
+msgid "`linguist`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2219
+#, no-wrap
+msgid "Qt 5 translation tool"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2220
+#, no-wrap
+msgid "`location`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2222
+#, no-wrap
+msgid "Qt location module"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2223
+#, no-wrap
+msgid "`lottie`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2225
+#, no-wrap
+msgid "Qt 6 QML API for rendering graphics and animations"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2226
+#, no-wrap
+msgid "`multimedia`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2228
+#, no-wrap
+msgid "Qt audio, video, radio and camera support module"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2229
+#, no-wrap
+msgid "`network`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2231
+#, no-wrap
+msgid "Qt network module"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2232
+#, no-wrap
+msgid "`networkauth`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2234
+#, no-wrap
+msgid "Qt network auth module"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2235
+#, no-wrap
+msgid "`opengl`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2237
+#, no-wrap
+msgid "Qt 5-compatible OpenGL support module"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2238
+#, no-wrap
+msgid "`paths`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2240
+#, no-wrap
+msgid "Command line client to QStandardPaths"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2241
+#, no-wrap
+msgid "`phonon4`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2243
+#, no-wrap
+msgid "KDE multimedia framework"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2244
+#, no-wrap
+msgid "`pixeltool`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2246
+#, no-wrap
+msgid "Qt 5 screen magnifier"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2247
+#, no-wrap
+msgid "`plugininfo`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2249
+#, no-wrap
+msgid "Qt 5 plugin metadata dumper"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2250
+#, no-wrap
+msgid "`positioning`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2252
+#, no-wrap
+msgid "Qt 6 positioning API from sources such as satellite, wifi or text files."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2253
+#, no-wrap
+msgid "`printsupport`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2255
+#, no-wrap
+msgid "Qt print support module"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2256
+#, no-wrap
+msgid "`qdbus`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2258
+#, no-wrap
+msgid "Qt command-line interface to D-Bus"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2259
+#, no-wrap
+msgid "`qdbusviewer`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2261
+#, no-wrap
+msgid "Qt 5 graphical interface to D-Bus"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2262
+#, no-wrap
+msgid "`qdoc`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2264
+#, no-wrap
+msgid "Qt documentation generator"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2265
+#, no-wrap
+msgid "`qdoc-data`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2267
+#, no-wrap
+msgid "QDoc configuration files"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2268
+#, no-wrap
+msgid "`qev`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2270
+#, no-wrap
+msgid "Qt QWidget events introspection tool"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2271
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2401
+#, no-wrap
+msgid "`qmake`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2273
+#, no-wrap
+msgid "Qt Makefile generator"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2274
+#, no-wrap
+msgid "`quickcontrols`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2276
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2279
+#, no-wrap
+msgid "Set of controls for building complete interfaces in Qt Quick"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2277
+#, no-wrap
+msgid "`quickcontrols2`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2280
+#, no-wrap
+msgid "`remoteobjects`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2282
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2291
+#, no-wrap
+msgid "Qt 5 SXCML module"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2283
+#, no-wrap
+msgid "`script`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2285
+#, no-wrap
+msgid "Qt 4-compatible scripting module"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2286
+#, no-wrap
+msgid "`scripttools`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2288
+#, no-wrap
+msgid "Qt Script additional components"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2289
+#, no-wrap
+msgid "`scxml`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2292
+#, no-wrap
+msgid "`sensors`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2294
+#, no-wrap
+msgid "Qt sensors module"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2295
+#, no-wrap
+msgid "`serialbus`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2297
+#, no-wrap
+msgid "Qt functions to access industrial bus systems"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2298
+#, no-wrap
+msgid "`serialport`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2300
+#, no-wrap
+msgid "Qt functions to access serial ports"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2301
+#, no-wrap
+msgid "`shadertools`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2303
+#, no-wrap
+msgid "Qt 6 tools for the cross-platform Qt shader pipeline"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2304
+#, no-wrap
+msgid "`speech`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2306
+#, no-wrap
+msgid "Accessibility features for Qt5"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2307
+#, no-wrap
+msgid "`sql`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2309
+#, no-wrap
+msgid "Qt SQL database integration module"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2310
+#, no-wrap
+msgid "`sql-ibase`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2312
+#, no-wrap
+msgid "Qt InterBase/Firebird database plugin"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2313
+#, no-wrap
+msgid "`sql-mysql`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2315
+#, no-wrap
+msgid "Qt MySQL database plugin"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2316
+#, no-wrap
+msgid "`sql-odbc`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2318
+#, no-wrap
+msgid "Qt Open Database Connectivity plugin"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2319
+#, no-wrap
+msgid "`sql-pgsql`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2321
+#, no-wrap
+msgid "Qt PostgreSQL database plugin"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2322
+#, no-wrap
+msgid "`sql-sqlite2`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2324
+#, no-wrap
+msgid "Qt SQLite 2 database plugin"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2325
+#, no-wrap
+msgid "`sql-sqlite3`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2327
+#, no-wrap
+msgid "Qt SQLite 3 database plugin"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2328
+#, no-wrap
+msgid "`sql-tds`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2330
+#, no-wrap
+msgid "Qt TDS Database Connectivity database plugin"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2331
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3914
+#, no-wrap
+msgid "`svg`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2333
+#, no-wrap
+msgid "Qt SVG support module"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2334
+#, no-wrap
+msgid "`testlib`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2336
+#, no-wrap
+msgid "Qt unit testing module"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2337
+#, no-wrap
+msgid "`tools`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2339
+#, no-wrap
+msgid "Qt 6 assorted tools"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2340
+#, no-wrap
+msgid "`translations`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2342
+#, no-wrap
+msgid "Qt 6 translation module"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2343
+#, no-wrap
+msgid "`uiplugin`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2345
+#, no-wrap
+msgid "Custom Qt widget plugin interface for Qt Designer"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2346
+#, no-wrap
+msgid "`uitools`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2348
+#, no-wrap
+msgid "Qt Designer UI forms support module"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2349
+#, no-wrap
+msgid "`virtualkeyboard`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2351
+#, no-wrap
+msgid "Qt 5 Virtual Keyboard Module"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2352
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3074
+#, no-wrap
+msgid "`wayland`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2354
+#, no-wrap
+msgid "Qt 5 wrapper for Wayland"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2355
+#, no-wrap
+msgid "`webchannel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2357
+#, no-wrap
+msgid "Qt 5 library for integration of C++/QML with HTML/js clients"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2358
+#, no-wrap
+msgid "`webengine`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2360
+#, no-wrap
+msgid "Qt 5 library to render web content"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2361
+#, no-wrap
+msgid "`webkit`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2363
+#, no-wrap
+msgid "QtWebKit with a more modern WebKit code base"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2364
+#, no-wrap
+msgid "`websockets`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2366
+#, no-wrap
+msgid "Qt implementation of WebSocket protocol"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2367
+#, no-wrap
+msgid "`websockets-qml`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2369
+#, no-wrap
+msgid "Qt implementation of WebSocket protocol (QML bindings)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2370
+#, no-wrap
+msgid "`webview`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2372
+#, no-wrap
+msgid "Qt component for displaying web content"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2373
+#, no-wrap
+msgid "`widgets`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2375
+#, no-wrap
+msgid "Qt C++ widgets module"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2376
+#, no-wrap
+msgid "`x11extras`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2378
+#, no-wrap
+msgid "Qt platform-specific features for X11-based systems"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2379
+#, no-wrap
+msgid "`xml`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2381
+#, no-wrap
+msgid "Qt SAX and DOM implementations"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2382
+#, no-wrap
+msgid "`xmlpatterns`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2383
+#, no-wrap
+msgid "Qt support for XPath, XQuery, XSLT and XML Schema"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2386
+msgid ""
+"To determine the libraries an application depends on, run `ldd` on the main "
+"executable after a successful compilation."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2388
+#, no-wrap
+msgid "Available Qt Tool Components"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2395
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3122
+#, no-wrap
+msgid "`buildtools`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2397
+#, no-wrap
+msgid "build tools (`moc`, `rcc`), needed for almost every Qt application."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2398
+#, no-wrap
+msgid "`linguisttools`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2400
+#, no-wrap
+msgid "localization tools: `lrelease`, `lupdate`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2402
+#, no-wrap
+msgid "Makefile generator/build utility"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2405
+#, no-wrap
+msgid "Available Qt Plugin Components"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2412
+#, no-wrap
+msgid "`imageformats`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2413
+#, no-wrap
+msgid "plugins for TGA, TIFF, and MNG image formats"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2416
+#, no-wrap
+msgid "Selecting Qt 5 Components"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2422
+msgid ""
+"In this example, the ported application uses the Qt 5 graphical user "
+"interface library, the Qt 5 core library, all of the Qt 5 code generation "
+"tools and Qt 5's Makefile generator. Since the `gui` library implies a "
+"dependency on the core library, `core` does not need to be specified. The "
+"Qt 5 code generation tools `moc`, `uic` and `rcc`, as well as the Makefile "
+"generator `qmake` are only needed at buildtime, thus they are specified with "
+"the `_build` suffix:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2427
+#, no-wrap
+msgid ""
+"USES=\tqt:5\n"
+"USE_QT=\tgui buildtools_build qmake_build\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2432
+#, no-wrap
+msgid "Using `qmake`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2438
+msgid ""
+"If the application provides a qmake project file ([.filename]#*.pro#), "
+"define `USES= qmake` along with `USE_QT`. `USES= qmake` already implies a "
+"build dependency on qmake, therefore the qmake component can be omitted from "
+"`USE_QT`. Similar to <<using-cmake,CMake>>, qmake supports out-of-source "
+"builds, which can be enabled by specifying the `outsource` argument (see "
+"<<using-qmake-example,`USES= qmake` example>>). Also see <<using-qmake-"
+"arguments>>."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2440
+#, no-wrap
+msgid "Possible Arguments for `USES= qmake`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2447
+#, no-wrap
+msgid "`no_configure`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2449
+#, no-wrap
+msgid "Do not add the configure target. This is implied by `HAS_CONFIGURE=yes` and `GNU_CONFIGURE=yes`. It is required when the build only needs the environment setup from `USES= qmake`, but otherwise runs `qmake` on its own."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2450
+#, no-wrap
+msgid "`no_env`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2452
+#, no-wrap
+msgid "Suppress modification of the configure and make environments. It is only required when `qmake` is used to configure the software and the build fails to understand the environment setup by `USES= qmake`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2453
+#, no-wrap
+msgid "`norecursive`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2455
+#, no-wrap
+msgid "Do not pass the `-recursive` argument to `qmake`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2456
+#, no-wrap
+msgid "`outsource`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2457
+#, no-wrap
+msgid "Perform an out-of-source build."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2460
+#, no-wrap
+msgid "Variables for Ports That Use `qmake`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2467
+#, no-wrap
+msgid "`QMAKE_ARGS`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2469
+#, no-wrap
+msgid "Port specific qmake flags to be passed to the `qmake` binary."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2470
+#, no-wrap
+msgid "`QMAKE_ENV`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2472
+#, no-wrap
+msgid "Environment variables to be set for the `qmake` binary. The default is `${CONFIGURE_ENV}`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2473
+#, no-wrap
+msgid "`QMAKE_SOURCE_PATH`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2474
+#, no-wrap
+msgid "Path to qmake project files ([.filename]#.pro#). The default is `${WRKSRC}` if an out-of-source build is requested, empty otherwise."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2477
+msgid "When using `USES= qmake`, these settings are deployed:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2484
+#, no-wrap
+msgid ""
+"CONFIGURE_ARGS+=\t--with-qt-includes=${QT_INCDIR} \\\n"
+"\t\t\t--with-qt-libraries=${QT_LIBDIR} \\\n"
+"\t\t\t--with-extra-libs=${LOCALBASE}/lib \\\n"
+"\t\t\t--with-extra-includes=${LOCALBASE}/include\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2488
+#, no-wrap
+msgid ""
+"CONFIGURE_ENV+=\tQTDIR=\"${QT_PREFIX}\" QMAKE=\"${QMAKE}\" \\\n"
+"\t\tMOC=\"${MOC}\" RCC=\"${RCC}\" UIC=\"${UIC}\" \\\n"
+"\t\tQMAKESPEC=\"${QMAKESPEC}\"\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2492
+#, no-wrap
+msgid ""
+"PLIST_SUB+=\tQT_INCDIR=${QT_INCDIR_REL} \\\n"
+"\t\tQT_LIBDIR=${QT_LIBDIR_REL} \\\n"
+"\t\tQT_PLUGINDIR=${QT_PLUGINDIR_REL}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2496
+msgid ""
+"Some configure scripts do not support the arguments above. To suppress "
+"modification of `CONFIGURE_ENV` and `CONFIGURE_ARGS`, set `USES= qmake:"
+"no_env`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2498
+#, no-wrap
+msgid "`USES= qmake` Example"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2502
+msgid "This snippet demonstrates the use of qmake for a Qt 5 port:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2507
+#, no-wrap
+msgid ""
+"USES=\tqmake:outsource qt:5\n"
+"USE_QT=\tbuildtools_build\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2512
+msgid ""
+"Qt applications are often written to be cross-platform and often X11/Unix is "
+"not the platform they are developed on, which in turn leads to certain loose "
+"ends, like:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2514
+msgid ""
+"_Missing additional include paths._ Many applications come with system tray "
+"icon support, but neglect to look for includes and/or libraries in the X11 "
+"directories. To add directories to `qmake`'s include and library search "
+"paths via the command line, use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2519
+#, no-wrap
+msgid ""
+"QMAKE_ARGS+=\tINCLUDEPATH+=${LOCALBASE}/include \\\n"
+"\t\tLIBS+=-L${LOCALBASE}/lib\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2522
+msgid ""
+"_Bogus installation paths._ Sometimes data such as icons or .desktop files "
+"are by default installed into directories which are not scanned by XDG-"
+"compatible applications. package:editors/texmaker[] is an example for this - "
+"look at [.filename]#patch-texmaker.pro# in the [.filename]#files# directory "
+"of that port for a template on how to remedy this directly in the `qmake` "
+"project file."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2524
+#, no-wrap
+msgid "Using KDE"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2527
+#, no-wrap
+msgid "KDE Variable Definitions"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2534
+msgid ""
+"If the application depends on KDE, set `USES+=kde:5` and `USE_KDE` to the "
+"list of required components. `_build` and `_run` suffixes can be used to "
+"force components dependency type (for example, `baseapps_run`). If no "
+"suffix is set, a default dependency type will be used. To force both types, "
+"add the component twice with both suffixes (for example, `ecm_build "
+"ecm_run`). Available components are listed below (up-to-date components are "
+"also listed in [.filename]#/usr/ports/Mk/Uses/kde.mk#):"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2536
+#, no-wrap
+msgid "Available KDE Components"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2543
+#, no-wrap
+msgid "`activities`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2545
+#, no-wrap
+msgid "KF5 runtime and library to organize work in separate activities"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2546
+#, no-wrap
+msgid "`activities-stats`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2548
+#, no-wrap
+msgid "KF5 statistics for activities"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2549
+#, no-wrap
+msgid "`activitymanagerd`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2551
+#, no-wrap
+msgid "System service to manage user's activities, track the usage patterns"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2552
+#, no-wrap
+msgid "`akonadi`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2554
+#, no-wrap
+msgid "Storage server for KDE-Pim"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2555
+#, no-wrap
+msgid "`akonadicalendar`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2557
+#, no-wrap
+msgid "Akonadi Calendar Integration"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2558
+#, no-wrap
+msgid "`akonadiconsole`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2560
+#, no-wrap
+msgid "Akonadi management and debugging console"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2561
+#, no-wrap
+msgid "`akonadicontacts`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2563
+#, no-wrap
+msgid "Libraries and daemons to implement Contact Management in Akonadi"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2564
+#, no-wrap
+msgid "`akonadiimportwizard`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2566
+#, no-wrap
+msgid "Import data from other mail clients to KMail"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2567
+#, no-wrap
+msgid "`akonadimime`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2569
+#, no-wrap
+msgid "Libraries and daemons to implement basic email handling"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2570
+#, no-wrap
+msgid "`akonadinotes`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2572
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2935
+#, no-wrap
+msgid "KDE library for accessing mail storages in MBox format"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2573
+#, no-wrap
+msgid "`akonadisearch`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2575
+#, no-wrap
+msgid "Libraries and daemons to implement searching in Akonadi"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2576
+#, no-wrap
+msgid "`akregator`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2578
+#, no-wrap
+msgid "A Feed Reader by KDE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2579
+#, no-wrap
+msgid "`alarmcalendar`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2581
+#, no-wrap
+msgid "KDE API for KAlarm alarms"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2582
+#, no-wrap
+msgid "`apidox`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2584
+#, no-wrap
+msgid "KF5 API Documentation Tools"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2585
+#, no-wrap
+msgid "`archive`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2587
+#, no-wrap
+msgid "KF5 library that provides classes for handling archive formats"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2588
+#, no-wrap
+msgid "`attica`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2590
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2593
+#, no-wrap
+msgid "Open Collaboration Services API library KDE5 version"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2591
+#, no-wrap
+msgid "`attica5`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2594
+#, no-wrap
+msgid "`auth`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2596
+#, no-wrap
+msgid "KF5 abstraction to system policy and authentication features"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2597
+#, no-wrap
+msgid "`baloo`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2599
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2605
+#, no-wrap
+msgid "KF5 Framework for searching and managing user metadata"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2600
+#, no-wrap
+msgid "`baloo-widgets`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2602
+#, no-wrap
+msgid "BalooWidgets library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2603
+#, no-wrap
+msgid "`baloo5`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2606
+#, no-wrap
+msgid "`blog`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2608
+#, no-wrap
+msgid "KDE API for weblogging access"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2609
+#, no-wrap
+msgid "`bookmarks`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2611
+#, no-wrap
+msgid "KF5 library for bookmarks and the XBEL format"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2612
+#, no-wrap
+msgid "`breeze`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2614
+#, no-wrap
+msgid "Plasma5 artwork, styles and assets for the Breeze visual style"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2615
+#, no-wrap
+msgid "`breeze-gtk`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2617
+#, no-wrap
+msgid "Plasma5 Breeze visual style for Gtk"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2618
+#, no-wrap
+msgid "`breeze-icons`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2620
+#, no-wrap
+msgid "Breeze icon theme for KDE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2621
+#, no-wrap
+msgid "`calendarcore`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2623
+#, no-wrap
+msgid "KDE calendar access library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2624
+#, no-wrap
+msgid "`calendarsupport`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2626
+#, no-wrap
+msgid "Calendar support libraries for KDEPim"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2627
+#, no-wrap
+msgid "`calendarutils`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2629
+#, no-wrap
+msgid "KDE utility and user interface functions for accessing calendar"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2630
+#, no-wrap
+msgid "`codecs`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2632
+#, no-wrap
+msgid "KF5 library for string manipulation"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2633
+#, no-wrap
+msgid "`completion`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2635
+#, no-wrap
+msgid "KF5 text completion helpers and widgets"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2636
+#, no-wrap
+msgid "`config`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2638
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2641
+#, no-wrap
+msgid "KF5 widgets for configuration dialogs"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2639
+#, no-wrap
+msgid "`configwidgets`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2642
+#, no-wrap
+msgid "`contacts`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2644
+#, no-wrap
+msgid "KDE api to manage contact information"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2645
+#, no-wrap
+msgid "`coreaddons`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2647
+#, no-wrap
+msgid "KF5 addons to QtCore"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2648
+#, no-wrap
+msgid "`crash`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2650
+#, no-wrap
+msgid "KF5 library to handle crash analysis and bug report from apps"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2651
+#, no-wrap
+msgid "`dbusaddons`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2653
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3061
+#, no-wrap
+msgid "KF5 addons to QtDBus"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2654
+#, no-wrap
+msgid "`decoration`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2656
+#, no-wrap
+msgid "Plasma5 library to create window decorations"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2657
+#, no-wrap
+msgid "`designerplugin`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2659
+#, no-wrap
+msgid "KF5 integration of Frameworks widgets in Qt Designer/Creator"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2660
+#, no-wrap
+msgid "`discover`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2662
+#, no-wrap
+msgid "Plasma5 package management tools"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2663
+#, no-wrap
+msgid "`dnssd`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2665
+#, no-wrap
+msgid "KF5 abstraction to system DNSSD features"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2666
+#, no-wrap
+msgid "`doctools`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2668
+#, no-wrap
+msgid "KF5 documentation generation from docbook"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2669
+#, no-wrap
+msgid "`drkonqi`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2671
+#, no-wrap
+msgid "Plasma5 crash handler"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2672
+#, no-wrap
+msgid "`ecm`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2674
+#, no-wrap
+msgid "Extra modules and scripts for CMake"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2675
+#, no-wrap
+msgid "`emoticons`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2677
+#, no-wrap
+msgid "KF5 library to convert emoticons"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2678
+#, no-wrap
+msgid "`eventviews`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2680
+#, no-wrap
+msgid "Event view libriares for KDEPim"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2681
+#, no-wrap
+msgid "`filemetadata`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2683
+#, no-wrap
+msgid "KF5 library for extracting file metadata"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2684
+#, no-wrap
+msgid "`frameworkintegration`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2686
+#, no-wrap
+msgid "KF5 workspace and cross-framework integration plugins"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2687
+#, no-wrap
+msgid "`gapi`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2689
+#, no-wrap
+msgid "KDE based library to access google services"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2690
+#, no-wrap
+msgid "`globalaccel`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2692
+#, no-wrap
+msgid "KF5 library to add support for global workspace shortcuts"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2693
+#, no-wrap
+msgid "`grantlee-editor`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2695
+#, no-wrap
+msgid "Editor for Grantlee themes"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2696
+#, no-wrap
+msgid "`grantleetheme`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2698
+#, no-wrap
+msgid "KDE PIM grantleetheme"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2699
+#, no-wrap
+msgid "`gravatar`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2701
+#, no-wrap
+msgid "Library for gravatar support"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2702
+#, no-wrap
+msgid "`guiaddons`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2704
+#, no-wrap
+msgid "KF5 addons to QtGui"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2705
+#, no-wrap
+msgid "`holidays`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2707
+#, no-wrap
+msgid "KDE library for calendar holidays"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2708
+#, no-wrap
+msgid "`hotkeys`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2710
+#, no-wrap
+msgid "Plasma5 library for hotkeys"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2711
+#, no-wrap
+msgid "`i18n`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2713
+#, no-wrap
+msgid "KF5 advanced internationalization framework"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2714
+#, no-wrap
+msgid "`iconthemes`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2716
+#, no-wrap
+msgid "KF5 library for handling icons in applications"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2717
+#, no-wrap
+msgid "`identitymanagement`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2719
+#, no-wrap
+msgid "KDE pim identities"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2720
+#, no-wrap
+msgid "`idletime`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2722
+#, no-wrap
+msgid "KF5 library for monitoring user activity"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2723
+#, no-wrap
+msgid "`imap`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2725
+#, no-wrap
+msgid "KDE API for IMAP support"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2726
+#, no-wrap
+msgid "`incidenceeditor`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2728
+#, no-wrap
+msgid "Incidence editor libriares for KDEPim"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2729
+#, no-wrap
+msgid "`infocenter`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2731
+#, no-wrap
+msgid "Plasma5 utility providing system information"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2732
+#, no-wrap
+msgid "`init`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2734
+#, no-wrap
+msgid "KF5 process launcher to speed up launching KDE applications"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2735
+#, no-wrap
+msgid "`itemmodels`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2737
+#, no-wrap
+msgid "KF5 models for Qt Model/View system"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2738
+#, no-wrap
+msgid "`itemviews`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2740
+#, no-wrap
+msgid "KF5 widget addons for Qt Model/View"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2741
+#, no-wrap
+msgid "`jobwidgets`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2743
+#, no-wrap
+msgid "KF5 widgets for tracking KJob instance"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2744
+#, no-wrap
+msgid "`js`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2746
+#, no-wrap
+msgid "KF5 library providing an ECMAScript interpreter"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2747
+#, no-wrap
+msgid "`jsembed`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2749
+#, no-wrap
+msgid "KF5 library for binding JavaScript objects to QObjects"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2750
+#, no-wrap
+msgid "`kaddressbook`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2752
+#, no-wrap
+msgid "KDE contact manager"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2753
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2756
+#, no-wrap
+msgid "`kalarm`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2755
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2758
+#, no-wrap
+msgid "Personal alarm scheduler"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2759
+#, no-wrap
+msgid "`kate`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2761
+#, no-wrap
+msgid "Basic editor framework for the KDE system"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2762
+#, no-wrap
+msgid "`kcmutils`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2764
+#, no-wrap
+msgid "KF5 utilities for working with KCModules"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2765
+#, no-wrap
+msgid "`kde-cli-tools`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2767
+#, no-wrap
+msgid "Plasma5 non-interactive system tools"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2768
+#, no-wrap
+msgid "`kde-gtk-config`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2770
+#, no-wrap
+msgid "Plasma5 GTK2 and GTK3 configurator"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2771
+#, no-wrap
+msgid "`kdeclarative`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2773
+#, no-wrap
+msgid "KF5 library providing integration of QML and KDE Frameworks"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2774
+#, no-wrap
+msgid "`kded`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2776
+#, no-wrap
+msgid "KF5 extensible daemon for providing system level services"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2777
+#, no-wrap
+msgid "`kdelibs4support`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2779
+#, no-wrap
+msgid "KF5 porting aid from KDELibs4"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2780
+#, no-wrap
+msgid "`kdepim-addons`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2782
+#, no-wrap
+msgid "KDE PIM addons"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2783
+#, no-wrap
+msgid "`kdepim-apps-libs`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2785
+#, no-wrap
+msgid "KDE PIM mail related libraries"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2786
+#, no-wrap
+msgid "`kdepim-runtime5`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2788
+#, no-wrap
+msgid "KDE PIM tools and services"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2789
+#, no-wrap
+msgid "`kdeplasma-addons`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2791
+#, no-wrap
+msgid "Plasma5 addons to improve the Plasma experience"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2792
+#, no-wrap
+msgid "`kdesu`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2794
+#, no-wrap
+msgid "KF5 integration with su for elevated privileges"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2795
+#, no-wrap
+msgid "`kdewebkit`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2797
+#, no-wrap
+msgid "KF5 library providing integration of QtWebKit"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2798
+#, no-wrap
+msgid "`kgamma5`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2800
+#, no-wrap
+msgid "Plasma5 monitor's gamma settings"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2801
+#, no-wrap
+msgid "`khtml`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2803
+#, no-wrap
+msgid "KF5 KTHML rendering engine"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2804
+#, no-wrap
+msgid "`kimageformats`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2806
+#, no-wrap
+msgid "KF5 library providing support for additional image formats"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2807
+#, no-wrap
+msgid "`kio`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2809
+#, no-wrap
+msgid "KF5 resource and network access abstraction"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2810
+#, no-wrap
+msgid "`kirigami2`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2812
+#, no-wrap
+msgid "QtQuick based components set"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2813
+#, no-wrap
+msgid "`kitinerary`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2815
+#, no-wrap
+msgid "Data Model and Extraction System for Travel Reservation information"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2816
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2819
+#, no-wrap
+msgid "`kmail`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2818
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2821
+#, no-wrap
+msgid "KDE mail client"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2822
+#, no-wrap
+msgid "`kmail-account-wizard`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2824
+#, no-wrap
+msgid "KDE mail account wizard"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2825
+#, no-wrap
+msgid "`kmenuedit`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2827
+#, no-wrap
+msgid "Plasma5 menu editor"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2828
+#, no-wrap
+msgid "`knotes`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2830
+#, no-wrap
+msgid "Popup notes"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2831
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2834
+#, no-wrap
+msgid "`kontact`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2833
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2836
+#, no-wrap
+msgid "KDE Personal Information Manager"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2837
+#, no-wrap
+msgid "`kontactinterface`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2839
+#, no-wrap
+msgid "KDE glue for embedding KParts into Kontact"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2840
+#, no-wrap
+msgid "`korganizer`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2842
+#, no-wrap
+msgid "Calendar and scheduling Program"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2843
+#, no-wrap
+msgid "`kpimdav`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2845
+#, no-wrap
+msgid "A DAV protocol implementation with KJobs"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2846
+#, no-wrap
+msgid "`kpkpass`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2848
+#, no-wrap
+msgid "Library to deal with Apple Wallet pass files"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2849
+#, no-wrap
+msgid "`kross`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2851
+#, no-wrap
+msgid "KF5 multi-language application scripting"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2852
+#, no-wrap
+msgid "`kscreen`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2854
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2914
+#, no-wrap
+msgid "Plasma5 screen management library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2855
+#, no-wrap
+msgid "`kscreenlocker`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2857
+#, no-wrap
+msgid "Plasma5 secure lock screen architecture"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2858
+#, no-wrap
+msgid "`ksmtp`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2860
+#, no-wrap
+msgid "Job-based library to send email through an SMTP server"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2861
+#, no-wrap
+msgid "`ksshaskpass`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2863
+#, no-wrap
+msgid "Plasma5 ssh-add frontend"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2864
+#, no-wrap
+msgid "`ksysguard`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2866
+#, no-wrap
+msgid "Plasma5 utility to track and control the running processes"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2867
+#, no-wrap
+msgid "`kwallet-pam`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2869
+#, no-wrap
+msgid "Plasma5 KWallet PAM Integration"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2870
+#, no-wrap
+msgid "`kwayland-integration`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2872
+#, no-wrap
+msgid "Integration plugins for a Wayland-based desktop"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2873
+#, no-wrap
+msgid "`kwin`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2875
+#, no-wrap
+msgid "Plasma5 window manager"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2876
+#, no-wrap
+msgid "`kwrited`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2878
+#, no-wrap
+msgid "Plasma5 daemon listening for wall and write messages"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2879
+#, no-wrap
+msgid "`ldap`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2881
+#, no-wrap
+msgid "LDAP access API for KDE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2882
+#, no-wrap
+msgid "`libkcddb`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2884
+#, no-wrap
+msgid "KDE CDDB library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2885
+#, no-wrap
+msgid "`libkcompactdisc`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2887
+#, no-wrap
+msgid "KDE library for interfacing with audio CDs"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2888
+#, no-wrap
+msgid "`libkdcraw`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2890
+#, no-wrap
+msgid "LibRaw interface for KDE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2891
+#, no-wrap
+msgid "`libkdegames`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2893
+#, no-wrap
+msgid "Libraries used by KDE games"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2894
+#, no-wrap
+msgid "`libkdepim`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2896
+#, no-wrap
+msgid "KDE PIM Libraries"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2897
+#, no-wrap
+msgid "`libkeduvocdocument`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2899
+#, no-wrap
+msgid "Library for reading and writing vocabulary files"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2900
+#, no-wrap
+msgid "`libkexiv2`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2902
+#, no-wrap
+msgid "Exiv2 library interface for KDE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2903
+#, no-wrap
+msgid "`libkipi`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2905
+#, no-wrap
+msgid "KDE Image Plugin Interface"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2906
+#, no-wrap
+msgid "`libkleo`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2908
+#, no-wrap
+msgid "Certificate manager for KDE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2909
+#, no-wrap
+msgid "`libksane`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2911
+#, no-wrap
+msgid "SANE library interface for KDE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2912
+#, no-wrap
+msgid "`libkscreen`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2915
+#, no-wrap
+msgid "`libksieve`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2917
+#, no-wrap
+msgid "Sieve libriares for KDEPim"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2918
+#, no-wrap
+msgid "`libksysguard`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2920
+#, no-wrap
+msgid "Plasma5 library to track and control running processes"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2921
+#, no-wrap
+msgid "`mailcommon`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2923
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2983
+#, no-wrap
+msgid "Common libriares for KDEPim"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2924
+#, no-wrap
+msgid "`mailimporter`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2926
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2938
+#, no-wrap
+msgid "Import mbox files to KMail"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2927
+#, no-wrap
+msgid "`mailtransport`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2929
+#, no-wrap
+msgid "KDE library to managing mail transport"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2930
+#, no-wrap
+msgid "`marble`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2932
+#, no-wrap
+msgid "Virtual globe and world atlas for KDE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2933
+#, no-wrap
+msgid "`mbox`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2936
+#, no-wrap
+msgid "`mbox-importer`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2939
+#, no-wrap
+msgid "`mediaplayer`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2941
+#, no-wrap
+msgid "KF5 plugin interface for media player features"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2942
+#, no-wrap
+msgid "`messagelib`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2944
+#, no-wrap
+msgid "Library for handling messages"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2945
+#, no-wrap
+msgid "`milou`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2947
+#, no-wrap
+msgid "Plasma5 Plasmoid for search"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2948
+#, no-wrap
+msgid "`mime`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2950
+#, no-wrap
+msgid "Library for handling MIME data"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2951
+#, no-wrap
+msgid "`newstuff`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2953
+#, no-wrap
+msgid "KF5 library for downloading application assets from the network"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2954
+#, no-wrap
+msgid "`notifications`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2956
+#, no-wrap
+msgid "KF5 abstraction for system notifications"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2957
+#, no-wrap
+msgid "`notifyconfig`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2959
+#, no-wrap
+msgid "KF5 configuration system for KNotify"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2960
+#, no-wrap
+msgid "`okular`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2962
+#, no-wrap
+msgid "KDE universal document viewer"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2963
+#, no-wrap
+msgid "`oxygen`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2965
+#, no-wrap
+msgid "Plasma5 Oxygen style"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2966
+#, no-wrap
+msgid "`oxygen-icons5`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2968
+#, no-wrap
+msgid "The Oxygen icon theme for KDE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2969
+#, no-wrap
+msgid "`package`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2971
+#, no-wrap
+msgid "KF5 library to load and install packages"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2972
+#, no-wrap
+msgid "`parts`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2974
+#, no-wrap
+msgid "KF5 document centric plugin system"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2975
+#, no-wrap
+msgid "`people`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2977
+#, no-wrap
+msgid "KF5 library providing access to contacts"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2978
+#, no-wrap
+msgid "`pim-data-exporter`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2980
+#, no-wrap
+msgid "Import and export KDE PIM settings"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2981
+#, no-wrap
+msgid "`pimcommon`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2984
+#, no-wrap
+msgid "`pimtextedit`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2986
+#, no-wrap
+msgid "KDE library for PIM-specific text editing utilities"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2987
+#, no-wrap
+msgid "`plasma-browser-integration`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2989
+#, no-wrap
+msgid "Plasma5 components to integrate browsers into the desktop"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2990
+#, no-wrap
+msgid "`plasma-desktop`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2992
+#, no-wrap
+msgid "Plasma5 plasma desktop"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2993
+#, no-wrap
+msgid "`plasma-framework`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2995
+#, no-wrap
+msgid "KF5 plugin based UI runtime used to write user interfaces"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2996
+#, no-wrap
+msgid "`plasma-integration`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2998
+#, no-wrap
+msgid "Qt Platform Theme integration plugins for the Plasma workspaces"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:2999
+#, no-wrap
+msgid "`plasma-pa`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3001
+#, no-wrap
+msgid "Plasma5 Plasma pulse audio mixer"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3002
+#, no-wrap
+msgid "`plasma-sdk`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3004
+#, no-wrap
+msgid "Plasma5 applications useful for Plasma development"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3005
+#, no-wrap
+msgid "`plasma-workspace`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3007
+#, no-wrap
+msgid "Plasma5 Plasma workspace"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3008
+#, no-wrap
+msgid "`plasma-workspace-wallpapers`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3010
+#, no-wrap
+msgid "Plasma5 wallpapers"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3011
+#, no-wrap
+msgid "`plotting`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3013
+#, no-wrap
+msgid "KF5 lightweight plotting framework"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3014
+#, no-wrap
+msgid "`polkit-kde-agent-1`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3016
+#, no-wrap
+msgid "Plasma5 daemon providing a polkit authentication UI"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3017
+#, no-wrap
+msgid "`powerdevil`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3019
+#, no-wrap
+msgid "Plasma5 tool to manage the power consumption settings"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3020
+#, no-wrap
+msgid "`prison`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3022
+#, no-wrap
+msgid "API to produce barcodes"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3023
+#, no-wrap
+msgid "`pty`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3025
+#, no-wrap
+msgid "KF5 pty abstraction"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3026
+#, no-wrap
+msgid "`purpose`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3028
+#, no-wrap
+msgid "Offers available actions for a specific purpose"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3029
+#, no-wrap
+msgid "`qqc2-desktop-style`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3031
+#, no-wrap
+msgid "Qt QuickControl2 style for KDE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3032
+#, no-wrap
+msgid "`runner`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3034
+#, no-wrap
+msgid "KF5 parallelized query system"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3035
+#, no-wrap
+msgid "`service`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3037
+#, no-wrap
+msgid "KF5 advanced plugin and service introspection"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3038
+#, no-wrap
+msgid "`solid`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3040
+#, no-wrap
+msgid "KF5 hardware integration and detection"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3041
+#, no-wrap
+msgid "`sonnet`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3043
+#, no-wrap
+msgid "KF5 plugin-based spell checking library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3044
+#, no-wrap
+msgid "`syndication`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3046
+#, no-wrap
+msgid "KDE RSS feed handling library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3047
+#, no-wrap
+msgid "`syntaxhighlighting`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3049
+#, no-wrap
+msgid "KF5 syntax highlighting engine for structured text and code"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3050
+#, no-wrap
+msgid "`systemsettings`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3052
+#, no-wrap
+msgid "Plasma5 system settings"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3053
+#, no-wrap
+msgid "`texteditor`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3055
+#, no-wrap
+msgid "KF5 advanced embeddable text editor"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3056
+#, no-wrap
+msgid "`textwidgets`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3058
+#, no-wrap
+msgid "KF5 advanced text editing widgets"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3059
+#, no-wrap
+msgid "`threadweaver`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3062
+#, no-wrap
+msgid "`tnef`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3064
+#, no-wrap
+msgid "KDE API for the handling of TNEF data"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3065
+#, no-wrap
+msgid "`unitconversion`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3067
+#, no-wrap
+msgid "KF5 library for unit conversion"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3068
+#, no-wrap
+msgid "`user-manager`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3070
+#, no-wrap
+msgid "Plasma5 user manager"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3071
+#, no-wrap
+msgid "`wallet`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3073
+#, no-wrap
+msgid "KF5 secure and unified container for user passwords"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3076
+#, no-wrap
+msgid "KF5 Client and Server library wrapper for the Wayland libraries"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3077
+#, no-wrap
+msgid "`widgetsaddons`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3079
+#, no-wrap
+msgid "KF5 addons to QtWidgets"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3080
+#, no-wrap
+msgid "`windowsystem`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3082
+#, no-wrap
+msgid "KF5 library for access to the windowing system"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3083
+#, no-wrap
+msgid "`xmlgui`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3085
+#, no-wrap
+msgid "KF5 user configurable main windows"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3086
+#, no-wrap
+msgid "`xmlrpcclient`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3087
+#, no-wrap
+msgid "KF5 interaction with XMLRPC services"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3090
+#, no-wrap
+msgid "`USE_KDE` Example"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3099
+msgid ""
+"This is a simple example for a KDE port. `USES= cmake` instructs the port "
+"to utilize CMake, a configuration tool widely used by KDE projects (see "
+"<<using-cmake>> for detailed usage). `USE_KDE` brings dependency on KDE "
+"libraries. Required KDE components and other dependencies can be determined "
+"through the configure log. `USE_KDE` does not imply `USE_QT`. If a port "
+"requires some Qt components, specify them in `USE_QT`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3105
+#, no-wrap
+msgid ""
+"USES=\t\tcmake kde:5 qt:5\n"
+"USE_KDE=\tecm\n"
+"USE_QT=\t\tcore buildtools_build qmake_build\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3110
+#, no-wrap
+msgid "Using LXQt"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3113
+msgid ""
+"Applications depending on LXQt should set `USES+= lxqt` and set `USE_LXQT` "
+"to the list of required components from the table below"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3115
+#, no-wrap
+msgid "Available LXQt Components"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3124
+#, no-wrap
+msgid "Helpers for additional CMake modules"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3125
+#, no-wrap
+msgid "`libfmqt`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3127
+#, no-wrap
+msgid "Libfm Qt bindings"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3128
+#, no-wrap
+msgid "`lxqt`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3130
+#, no-wrap
+msgid "LXQt core library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3131
+#, no-wrap
+msgid "`qtxdg`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3132
+#, no-wrap
+msgid "Qt implementation of freedesktop.org XDG specifications"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3135
+#, no-wrap
+msgid "`USE_LXQT` Example"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3140
+msgid ""
+"This is a simple example, `USE_LXQT` adds a dependency on LXQt libraries. "
+"Required LXQt components and other dependencies can be determined from the "
+"configure log."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3146
+#, no-wrap
+msgid ""
+"USES=\tcmake lxqt qt:5 tar:xz\n"
+"USE_QT=\t\tcore dbus widgets buildtools_build qmake_build\n"
+"USE_LXQT=\tbuildtools libfmqt\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3151
+#, no-wrap
+msgid "Using Java"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3154
+#, no-wrap
+msgid "Variable Definitions"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3157
+msgid ""
+"If the port needs a Java(TM) Development Kit (JDK(TM)) to either build, run "
+"or even extract the distfile, then define `USE_JAVA`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3161
+msgid ""
+"There are several JDKs in the ports collection, from various vendors, and in "
+"several versions. If the port must use a particular version, specify it "
+"using the `JAVA_VERSION` variable. The most current version is package:java/"
+"openjdk18[], with package:java/openjdk17[], package:java/openjdk16[], "
+"package:java/openjdk15[], package:java/openjdk14[], package:java/"
+"openjdk13[], package:java/openjdk12[], package:java/openjdk11[], package:"
+"java/openjdk8[], and package:java/openjdk7[] also available."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3163
+#, no-wrap
+msgid "Variables Which May be Set by Ports That Use Java"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3170
+#, no-wrap
+msgid "`USE_JAVA`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3172
+#, no-wrap
+msgid "Define for the remaining variables to have any effect."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3173
+#, no-wrap
+msgid "`JAVA_VERSION`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3176
+#, no-wrap
+msgid ""
+"List of space-separated suitable Java versions for the port.\n"
+"An optional `\\+` allows specifying a range of versions (allowed values: `8[+] 11[\\+] 17[+] 18[\\+] 19[+] 20[\\+] 21[+]`)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3177
+#, no-wrap
+msgid "`JAVA_OS`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3179
+#, no-wrap
+msgid "List of space-separated suitable JDK port operating systems for the port (allowed values: `native linux`)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3180
+#, no-wrap
+msgid "`JAVA_VENDOR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3182
+#, no-wrap
+msgid "List of space-separated suitable JDK port vendors for the port (allowed values: `openjdk oracle`)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3183
+#, no-wrap
+msgid "`JAVA_BUILD`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3185
+#, no-wrap
+msgid "When set, add the selected JDK port to the build dependencies."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3186
+#, no-wrap
+msgid "`JAVA_RUN`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3188
+#, no-wrap
+msgid "When set, add the selected JDK port to the run dependencies."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3189
+#, no-wrap
+msgid "`JAVA_EXTRACT`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3190
+#, no-wrap
+msgid "When set, add the selected JDK port to the extract dependencies."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3193
+msgid ""
+"Below is the list of all settings a port will receive after setting "
+"`USE_JAVA`:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3195
+#, no-wrap
+msgid "Variables Provided to Ports That Use Java"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3201
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3280
+#, no-wrap
+msgid "Value"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3202
+#, no-wrap
+msgid "`JAVA_PORT`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3204
+#, no-wrap
+msgid "The name of the JDK port (for example, `java/openjdk6`)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3205
+#, no-wrap
+msgid "`JAVA_PORT_VERSION`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3207
+#, no-wrap
+msgid "The full version of the JDK port (for example, `1.6.0`). Only the first two digits of this version number are needed, use `${JAVA_PORT_VERSION:C/^([0-9])\\.([0-9])(.*)$/\\1.\\2/}`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3208
+#, no-wrap
+msgid "`JAVA_PORT_OS`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3210
+#, no-wrap
+msgid "The operating system used by the JDK port (for example, `'native'`)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3211
+#, no-wrap
+msgid "`JAVA_PORT_VENDOR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3213
+#, no-wrap
+msgid "The vendor of the JDK port (for example, `'openjdk'`)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3214
+#, no-wrap
+msgid "`JAVA_PORT_OS_DESCRIPTION`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3216
+#, no-wrap
+msgid "Description of the operating system used by the JDK port (for example, `'Native'`)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3217
+#, no-wrap
+msgid "`JAVA_PORT_VENDOR_DESCRIPTION`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3219
+#, no-wrap
+msgid "Description of the vendor of the JDK port (for example, `'OpenJDK BSD Porting Team'`)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3220
+#, no-wrap
+msgid "`JAVA_HOME`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3222
+#, no-wrap
+msgid "Path to the installation directory of the JDK (for example, [.filename]#'/usr/local/openjdk6'#)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3223
+#, no-wrap
+msgid "`JAVAC`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3225
+#, no-wrap
+msgid "Path to the Java compiler to use (for example, [.filename]#'/usr/local/openjdk6/bin/javac'#)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3226
+#, no-wrap
+msgid "`JAR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3228
+#, no-wrap
+msgid "Path to the `jar` tool to use (for example, [.filename]#'/usr/local/openjdk6/bin/jar'# or [.filename]#'/usr/local/bin/fastjar'#)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3229
+#, no-wrap
+msgid "`APPLETVIEWER`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3231
+#, no-wrap
+msgid "Path to the `appletviewer` utility (for example, [.filename]#'/usr/local/openjdk6/bin/appletviewer'#)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3232
+#, no-wrap
+msgid "`JAVA`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3234
+#, no-wrap
+msgid "Path to the `java` executable. Use this for executing Java programs (for example, [.filename]#'/usr/local/openjdk6/bin/java'#)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3235
+#, no-wrap
+msgid "`JAVADOC`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3237
+#, no-wrap
+msgid "Path to the `javadoc` utility program."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3238
+#, no-wrap
+msgid "`JAVAH`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3240
+#, no-wrap
+msgid "Path to the `javah` program."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3241
+#, no-wrap
+msgid "`JAVAP`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3243
+#, no-wrap
+msgid "Path to the `javap` program."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3244
+#, no-wrap
+msgid "`JAVA_KEYTOOL`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3246
+#, no-wrap
+msgid "Path to the `keytool` utility program."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3247
+#, no-wrap
+msgid "`JAVA_N2A`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3249
+#, no-wrap
+msgid "Path to the `native2ascii` tool."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3250
+#, no-wrap
+msgid "`JAVA_POLICYTOOL`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3252
+#, no-wrap
+msgid "Path to the `policytool` program."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3253
+#, no-wrap
+msgid "`JAVA_SERIALVER`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3255
+#, no-wrap
+msgid "Path to the `serialver` utility program."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3256
+#, no-wrap
+msgid "`RMIC`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3258
+#, no-wrap
+msgid "Path to the RMI stub/skeleton generator, `rmic`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3259
+#, no-wrap
+msgid "`RMIREGISTRY`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3261
+#, no-wrap
+msgid "Path to the RMI registry program, `rmiregistry`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3262
+#, no-wrap
+msgid "`RMID`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3264
+#, no-wrap
+msgid "Path to the RMI daemon program `rmid`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3265
+#, no-wrap
+msgid "`JAVA_CLASSES`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3266
+#, no-wrap
+msgid "Path to the archive that contains the JDK class files, [.filename]#${JAVA_HOME}/jre/lib/rt.jar#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3270
+msgid ""
+"Use the `java-debug` make target to get information for debugging the port. "
+"It will display the value of many of the previously listed variables."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3272
+msgid ""
+"Additionally, these constants are defined so all Java ports may be installed "
+"in a consistent way:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3274
+#, no-wrap
+msgid "Constants Defined for Ports That Use Java"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3278
+#, no-wrap
+msgid "Constant"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3281
+#, no-wrap
+msgid "`JAVASHAREDIR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3283
+#, no-wrap
+msgid "The base directory for everything related to Java. Default: [.filename]#${PREFIX}/share/java#."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3284
+#, no-wrap
+msgid "`JAVAJARDIR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3286
+#, no-wrap
+msgid "The directory where JAR files is installed. Default: [.filename]#${JAVASHAREDIR}/classes#."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3287
+#, no-wrap
+msgid "`JAVALIBDIR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3288
+#, no-wrap
+msgid "The directory where JAR files installed by other ports are located. Default: [.filename]#${LOCALBASE}/share/java/classes#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3291
+msgid ""
+"The related entries are defined in both `PLIST_SUB` (documented in crossref:"
+"plist[plist-sub,Changing pkg-plist Based on Make Variables]) and `SUB_LIST`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3293
+#, no-wrap
+msgid "Building with Ant"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3299
+msgid ""
+"When the port is to be built using Apache Ant, it has to define `USE_ANT`. "
+"Ant is thus considered to be the sub-make command. When no `do-build` "
+"target is defined by the port, a default one will be set that runs Ant "
+"according to `MAKE_ENV`, `MAKE_ARGS` and `ALL_TARGET`. This is similar to "
+"the `USES= gmake` mechanism, which is documented in <<building>>."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3301
+#, no-wrap
+msgid "Best Practices"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3306
+msgid ""
+"When porting a Java library, the port has to install the JAR file(s) in [."
+"filename]#${JAVAJARDIR}#, and everything else under [."
+"filename]#${JAVASHAREDIR}/${PORTNAME}# (except for the documentation, see "
+"below). To reduce the packing file size, reference the JAR file(s) directly "
+"in the [.filename]#Makefile#. Use this statement (where [.filename]#myport."
+"jar# is the name of the JAR file installed as part of the port):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3310
+#, no-wrap
+msgid "PLIST_FILES+=\t${JAVAJARDIR}/myport.jar\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3315
+msgid ""
+"When porting a Java application, the port usually installs everything under "
+"a single directory (including its JAR dependencies). The use of [."
+"filename]#${JAVASHAREDIR}/${PORTNAME}# is strongly encouraged in this "
+"regard. It is up the porter to decide whether the port installs the "
+"additional JAR dependencies under this directory or uses the already "
+"installed ones (from [.filename]#${JAVAJARDIR}#)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3322
+msgid ""
+"When porting a Java(TM) application that requires an application server such "
+"as package:www/tomcat7[] to run the service, it is quite common for a vendor "
+"to distribute a [.filename]#.war#. A [.filename]#.war# is a Web application "
+"ARchive and is extracted when called by the application. Avoid adding a [."
+"filename]#.war# to [.filename]#pkg-plist#. It is not considered best "
+"practice. An application server will expand war archive, but not clean it "
+"up properly if the port is removed. A more desirable way of working with "
+"this file is to extract the archive, then install the files, and lastly add "
+"these files to [.filename]#pkg-plist#."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3327
+#, no-wrap
+msgid ""
+"TOMCATDIR=\t${LOCALBASE}/apache-tomcat-7.0\n"
+"WEBAPPDIR=\tmyapplication\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3331
+#, no-wrap
+msgid ""
+"post-extract:\n"
+"\t@${MKDIR} ${WRKDIR}/${PORTDIRNAME}\n"
+"\t@${TAR} xf ${WRKDIR}/myapplication.war -C ${WRKDIR}/${PORTDIRNAME}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3336
+#, no-wrap
+msgid ""
+"do-install:\n"
+"\tcd ${WRKDIR} && \\\n"
+"\t${INSTALL} -d -o ${WWWOWN} -g ${WWWGRP} ${TOMCATDIR}/webapps/${PORTDIRNAME}\n"
+"\tcd ${WRKDIR}/${PORTDIRNAME} && ${COPYTREE_SHARE} \\* ${WEBAPPDIR}/${PORTDIRNAME}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3343
+msgid ""
+"Regardless of the type of port (library or application), the additional "
+"documentation is installed in the crossref:makefiles[install-documentation,"
+"same location] as for any other port. The Javadoc tool is known to produce "
+"a different set of files depending on the version of the JDK that is used. "
+"For ports that do not enforce the use of a particular JDK, it is therefore a "
+"complex task to specify the packing list ([.filename]#pkg-plist#). This is "
+"one reason why porters are strongly encouraged to use `PORTDOCS`. Moreover, "
+"even if the set of files that will be generated by `javadoc` can be "
+"predicted, the size of the resulting [.filename]#pkg-plist# advocates for "
+"the use of `PORTDOCS`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3347
+msgid ""
+"The default value for `DATADIR` is [.filename]#${PREFIX}/share/${PORTNAME}"
+"#. It is a good idea to override `DATADIR` to [.filename]#${JAVASHAREDIR}/"
+"${PORTNAME}# for Java ports. Indeed, `DATADIR` is automatically added to "
+"`PLIST_SUB` (documented in crossref:plist[plist-sub,Changing pkg-plist Based "
+"on Make Variables]) so use `%%DATADIR%%` directly in [.filename]#pkg-plist#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3350
+msgid ""
+"As for the choice of building Java ports from source or directly installing "
+"them from a binary distribution, there is no defined policy at the time of "
+"writing. However, people from the https://www.freebsd.org/java/[FreeBSD "
+"Java Project] encourage porters to have their ports built from source "
+"whenever it is a trivial task."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3354
+msgid ""
+"All the features that have been presented in this section are implemented in "
+"[.filename]#bsd.java.mk#. If the port needs more sophisticated Java "
+"support, please first have a look at the https://cgit.FreeBSD.org/ports/tree/"
+"Mk/bsd.java.mk[bsd.java.mk Git log] as it usually takes some time to "
+"document the latest features. Then, if the needed support that is lacking "
+"would be beneficial to many other Java ports, feel free to discuss it on the "
+"freebsd-java."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3357
+msgid ""
+"Although there is a `java` category for PRs, it refers to the JDK porting "
+"effort from the FreeBSD Java project. Therefore, submit the Java port in "
+"the `ports` category as for any other port, unless the issue is related to "
+"either a JDK implementation or [.filename]#bsd.java.mk#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3359
+msgid ""
+"Similarly, there is a defined policy regarding the `CATEGORIES` of a Java "
+"port, which is detailed in crossref:makefiles[makefile-categories,"
+"Categorization]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3361
+#, no-wrap
+msgid "Web Applications, Apache and PHP"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3364
+#, no-wrap
+msgid "Apache"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3367
+#, no-wrap
+msgid "Variables for Ports That Use Apache"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3371
+#, no-wrap
+msgid "`USE_APACHE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3373
+#, no-wrap
+msgid "The port requires Apache. Possible values: `yes` (gets any version), `22`, `24`, `22-24`, `22+`, etc. The default APACHE version is `22`. More details are available in [.filename]#ports/Mk/bsd.apache.mk# and at https://wiki.freebsd.org/Apache/[wiki.freebsd.org/Apache/]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3374
+#, no-wrap
+msgid "`APXS`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3376
+#, no-wrap
+msgid "Full path to the `apxs` binary. Can be overridden in the port."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3377
+#, no-wrap
+msgid "`HTTPD`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3379
+#, no-wrap
+msgid "Full path to the `httpd` binary. Can be overridden in the port."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3380
+#, no-wrap
+msgid "`APACHE_VERSION`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3382
+#, no-wrap
+msgid "The version of present Apache installation (read-only variable). This variable is only available after inclusion of [.filename]#bsd.port.pre.mk#. Possible values: `22`, `24`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3383
+#, no-wrap
+msgid "`APACHEMODDIR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3385
+#, no-wrap
+msgid "Directory for Apache modules. This variable is automatically expanded in [.filename]#pkg-plist#."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3386
+#, no-wrap
+msgid "`APACHEINCLUDEDIR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3388
+#, no-wrap
+msgid "Directory for Apache headers. This variable is automatically expanded in [.filename]#pkg-plist#."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3389
+#, no-wrap
+msgid "`APACHEETCDIR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3390
+#, no-wrap
+msgid "Directory for Apache configuration files. This variable is automatically expanded in [.filename]#pkg-plist#."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3393
+#, no-wrap
+msgid "Useful Variables for Porting Apache Modules"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3397
+#, no-wrap
+msgid "`MODULENAME`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3399
+#, no-wrap
+msgid "Name of the module. Default value is `PORTNAME`. Example: `mod_hello`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3400
+#, no-wrap
+msgid "`SHORTMODNAME`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3402
+#, no-wrap
+msgid "Short name of the module. Automatically derived from `MODULENAME`, but can be overridden. Example: `hello`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3403
+#, no-wrap
+msgid "`AP_FAST_BUILD`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3405
+#, no-wrap
+msgid "Use `apxs` to compile and install the module."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3406
+#, no-wrap
+msgid "`AP_GENPLIST`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3408
+#, no-wrap
+msgid "Also automatically creates a [.filename]#pkg-plist#."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3409
+#, no-wrap
+msgid "`AP_INC`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3411
+#, no-wrap
+msgid "Adds a directory to a header search path during compilation."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3412
+#, no-wrap
+msgid "`AP_LIB`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3414
+#, no-wrap
+msgid "Adds a directory to a library search path during compilation."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3415
+#, no-wrap
+msgid "`AP_EXTRAS`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3416
+#, no-wrap
+msgid "Additional flags to pass to `apxs`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3419
+#, no-wrap
+msgid "Web Applications"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3423
+msgid ""
+"Web applications must be installed into [.filename]#PREFIX/www/appname#. "
+"This path is available both in [.filename]#Makefile# and in [.filename]#pkg-"
+"plist# as `WWWDIR`, and the path relative to `PREFIX` is available in [."
+"filename]#Makefile# as `WWWDIR_REL`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3428
+msgid ""
+"The user and group of web server process are available as `WWWOWN` and "
+"`WWWGRP`, in case the ownership of some files needs to be changed. The "
+"default values of both are `www`. Use `WWWOWN?= myuser` and `WWWGRP?= "
+"mygroup` if the port needs different values. This allows the user to "
+"override them easily."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3433
+msgid ""
+"Use `WWWOWN` and `WWWGRP` sparingly. Remember that every file the web "
+"server can write to is a security risk waiting to happen."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3437
+msgid ""
+"Do not depend on Apache unless the web app explicitly needs Apache. Respect "
+"that users may wish to run a web application on a web server other than "
+"Apache."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3439
+#, no-wrap
+msgid "PHP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3443
+msgid ""
+"PHP web applications declare their dependency on it with `USES=php`. See "
+"crossref:uses[uses-php,`php`] for more information."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3445
+#, no-wrap
+msgid "PEAR Modules"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3448
+msgid "Porting PEAR modules is a very simple process."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3451
+msgid ""
+"Add `USES=pear` to the port's [.filename]#Makefile#. The framework will "
+"install the relevant files in the right places and automatically generate "
+"the plist at install time."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3453
+#, no-wrap
+msgid "Example Makefile for PEAR Class"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3461
+#, no-wrap
+msgid ""
+"PORTNAME= Date\n"
+"DISTVERSION=\t1.4.3\n"
+"CATEGORIES=\tdevel www pear\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3465
+#, no-wrap
+msgid ""
+"MAINTAINER=\tsomeone@example.org\n"
+"COMMENT=\tPEAR Date and Time Zone Classes\n"
+"WWW=\t\thttps://pear.php.net/package/Date/\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3467
+#, no-wrap
+msgid "USES=\tpear\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3476
+msgid ""
+"PEAR modules will automatically be flavorized using crossref:flavors[flavors-"
+"auto-php,PHP flavors]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3481
+msgid ""
+"If a non default `PEAR_CHANNEL` is used, the build and run-time dependencies "
+"will automatically be added."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3487
+msgid ""
+"PEAR modules do not need to defined `PKGNAMESUFFIX` it is automatically "
+"filled in using `PEAR_PKGNAMEPREFIX`. If a port needs to add to "
+"`PKGNAMEPREFIX`, it must also use `PEAR_PKGNAMEPREFIX` to differentiate "
+"between different flavors."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3490
+#, no-wrap
+msgid "Horde Modules"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3493
+msgid "In the same way, porting Horde modules is a simple process."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3496
+msgid ""
+"Add `USES=horde` to the port's [.filename]#Makefile#. The framework will "
+"install the relevant files in the right places and automatically generate "
+"the plist at install time."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3499
+msgid ""
+"The `USE_HORDE_BUILD` and `USE_HORDE_RUN` variables can be used to add "
+"buildtime and runtime dependencies on other Horde modules. See [."
+"filename]#Mk/Uses/horde.mk# for a complete list of available modules."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3501
+#, no-wrap
+msgid "Example Makefile for Horde Module"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3509
+#, no-wrap
+msgid ""
+"PORTNAME=\tHorde_Core\n"
+"DISTVERSION=\t2.14.0\n"
+"CATEGORIES=\tdevel www pear\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3513
+#, no-wrap
+msgid ""
+"MAINTAINER=\thorde@FreeBSD.org\n"
+"COMMENT=\tHorde Core Framework libraries\n"
+"WWW=\t\thttps://pear.horde.org/\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3517
+#, no-wrap
+msgid ""
+"OPTIONS_DEFINE=\tKOLAB SOCKETS\n"
+"KOLAB_DESC=\tEnable Kolab server support\n"
+"SOCKETS_DESC=\tDepend on sockets PHP extension\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3520
+#, no-wrap
+msgid ""
+"USES=\thorde\n"
+"USE_PHP=\tsession\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3524
+#, no-wrap
+msgid ""
+"USE_HORDE_BUILD=\tHorde_Role\n"
+"USE_HORDE_RUN=\tHorde_Role Horde_History Horde_Pack \\\n"
+"\t\tHorde_Text_Filter Horde_View\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3527
+#, no-wrap
+msgid ""
+"KOLAB_USE=\tHORDE_RUN=Horde_Kolab_Server,Horde_Kolab_Session\n"
+"SOCKETS_USE=\tPHP=sockets\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3536
+msgid ""
+"As Horde modules are also PEAR modules they will also automatically be "
+"flavorized using crossref:flavors[flavors-auto-php,PHP flavors]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3539
+#, no-wrap
+msgid "Using Python"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3544
+msgid ""
+"The Ports Collection supports parallel installation of multiple Python "
+"versions. Ports must use a correct `python` interpreter, according to the "
+"user-settable `PYTHON_VERSION`. Most prominently, this means replacing the "
+"path to `python` executable in scripts with the value of `PYTHON_CMD`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3546
+msgid ""
+"Ports that install files under `PYTHON_SITELIBDIR` must use the `pyXY-` "
+"package name prefix, so their package name embeds the version of Python they "
+"are installed into."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3550
+#, no-wrap
+msgid "PKGNAMEPREFIX=\t${PYTHON_PKGNAMEPREFIX}\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3554
+#, no-wrap
+msgid "Most Useful Variables for Ports That Use Python"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3558
+#, no-wrap
+msgid "`USES=python`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3560
+#, no-wrap
+msgid "The port needs Python. The minimal required version can be specified with values such as `3.10+`. Version ranges can also be specified by separating two version numbers with a dash: `USES=python:3.8-3.9`. Note that `USES=python` does _not_ cover Python 2.7, it needs to be requested explicitly with `USES=python:2.7+`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3561
+#, no-wrap
+msgid "`USE_PYTHON=distutils`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3563
+#, no-wrap
+msgid "Use Python distutils for configuring, compiling, and installing. This is required when the port comes with [.filename]#setup.py#. This overrides the `do-build` and `do-install` targets and may also override `do-configure` if `GNU_CONFIGURE` is not defined. Additionally, it implies `USE_PYTHON=flavors`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3564
+#, no-wrap
+msgid "`USE_PYTHON=autoplist`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3566
+#, no-wrap
+msgid "Create the packaging list automatically. This also requires `USE_PYTHON=distutils` to be set."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3567
+#, no-wrap
+msgid "`USE_PYTHON=concurrent`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3569
+#, no-wrap
+msgid "The port will use an unique prefix, typically `PYTHON_PKGNAMEPREFIX` for certain directories, such as `EXAMPLESDIR` and `DOCSDIR` and also will append a suffix, the python version from `PYTHON_VER`, to binaries and scripts to be installed. This allows ports to be installed for different Python versions at the same time, which otherwise would install conflicting files."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3570
+#, no-wrap
+msgid "`USE_PYTHON=flavors`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3572
+#, no-wrap
+msgid "The port does not use distutils but still supports multiple Python versions. `FLAVORS` will be set to the supported Python versions. See crossref:flavors[flavors-auto-python,`USES`=python and Flavors] for more information."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3573
+#, no-wrap
+msgid "`USE_PYTHON=optsuffix`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3575
+#, no-wrap
+msgid "If the current Python version is not the default version, the port will gain `PKGNAMESUFFIX=${PYTHON_PKGNAMESUFFIX}`. Only useful with flavors."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3576
+#, no-wrap
+msgid "`PYTHON_PKGNAMEPREFIX`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3578
+#, no-wrap
+msgid "Used as a `PKGNAMEPREFIX` to distinguish packages for different Python versions. Example: `py27-`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3579
+#, no-wrap
+msgid "`PYTHON_SITELIBDIR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3581
+#, no-wrap
+msgid "Location of the site-packages tree, that contains installation path of Python (usually `LOCALBASE`). `PYTHON_SITELIBDIR` can be very useful when installing Python modules."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3582
+#, no-wrap
+msgid "`PYTHONPREFIX_SITELIBDIR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3584
+#, no-wrap
+msgid "The PREFIX-clean variant of PYTHON_SITELIBDIR. Always use `%%PYTHON_SITELIBDIR%%` in [.filename]#pkg-plist# when possible. The default value of `%%PYTHON_SITELIBDIR%%` is `lib/python%%PYTHON_VERSION%%/site-packages`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3585
+#, no-wrap
+msgid "`PYTHON_CMD`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3586
+#, no-wrap
+msgid "Python interpreter command line, including version number."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3589
+#, no-wrap
+msgid "Python Module Dependency Helpers"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3593
+#, no-wrap
+msgid "`PYNUMERIC`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3595
+#, no-wrap
+msgid "Dependency line for numeric extension."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3596
+#, no-wrap
+msgid "`PYNUMPY`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3598
+#, no-wrap
+msgid "Dependency line for the new numeric extension, numpy. (PYNUMERIC is deprecated by upstream vendor)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3599
+#, no-wrap
+msgid "`PYXML`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3601
+#, no-wrap
+msgid "Dependency line for XML extension (not needed for Python 2.0 and higher as it is also in base distribution)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3602
+#, no-wrap
+msgid "`PY_ENUM34`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3604
+#, no-wrap
+msgid "Conditional dependency on package:devel/py-enum34[] depending on the Python version."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3605
+#, no-wrap
+msgid "`PY_ENUM_COMPAT`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3607
+#, no-wrap
+msgid "Conditional dependency on package:devel/py-enum-compat[] depending on the Python version."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3608
+#, no-wrap
+msgid "`PY_PATHLIB`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3610
+#, no-wrap
+msgid "Conditional dependency on package:devel/py-pathlib[] depending on the Python version."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3611
+#, no-wrap
+msgid "`PY_IPADDRESS`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3613
+#, no-wrap
+msgid "Conditional dependency on package:net/py-ipaddress[] depending on the Python version."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3614
+#, no-wrap
+msgid "`PY_FUTURES`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3615
+#, no-wrap
+msgid "Conditional dependency on package:devel/py-futures[] depending on the Python version."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3618
+msgid ""
+"A complete list of available variables can be found in [.filename]#/usr/"
+"ports/Mk/Uses/python.mk#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3623
+msgid ""
+"All dependencies to Python ports using crossref:flavors[flavors-auto-python,"
+"Python flavors] (either with `USE_PYTHON=distutils` or `USE_PYTHON=flavors`) "
+"must have the Python flavor appended to their origin using `@${PY_FLAVOR}`. "
+"See <<python-Makefile>>."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3626
+#, no-wrap
+msgid "Makefile for a Simple Python Module"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3634
+#, no-wrap
+msgid ""
+"PORTNAME=\tsample\n"
+"DISTVERSION=\t1.2.3\n"
+"CATEGORIES=\tdevel\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3638
+#, no-wrap
+msgid ""
+"MAINTAINER=\tfred.bloggs@example.com\n"
+"COMMENT=\tPython sample module\n"
+"WWW=\t\thttps://example.com/project/sample/\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3640
+#, no-wrap
+msgid "RUN_DEPENDS=\t${PYTHON_PKGNAMEPREFIX}six>0:devel/py-six@${PY_FLAVOR}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3643
+#, no-wrap
+msgid ""
+"USES=\t\tpython\n"
+"USE_PYTHON=\tautoplist distutils\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3653
+msgid ""
+"Some Python applications claim to have `DESTDIR` support (which would be "
+"required for staging) but it is broken (Mailman up to 2.1.16, for "
+"instance). This can be worked around by recompiling the scripts. This can "
+"be done, for example, in the `post-build` target. Assuming the Python "
+"scripts are supposed to reside in `PYTHONPREFIX_SITELIBDIR` after "
+"installation, this solution can be applied:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3659
+#, no-wrap
+msgid ""
+"(cd ${STAGEDIR}${PREFIX} \\\n"
+" && ${PYTHON_CMD} ${PYTHON_LIBDIR}/compileall.py \\\n"
+" -d ${PREFIX} -f ${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;})\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3662
+msgid ""
+"This recompiles the sources with a path relative to the stage directory, and "
+"prepends the value of `PREFIX` to the file name recorded in the byte-"
+"compiled output file by `-d`. `-f` is required to force recompilation, and "
+"the `:S;${PREFIX}/;;` strips prefixes from the value of "
+"`PYTHONPREFIX_SITELIBDIR` to make it relative to `PREFIX`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3664
+#, no-wrap
+msgid "Using Tcl/Tk"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3669
+msgid ""
+"The Ports Collection supports parallel installation of multiple Tcl/Tk "
+"versions. Ports should try to support at least the default Tcl/Tk version "
+"and higher with `USES=tcl`. It is possible to specify the desired version "
+"of `tcl` by appending `:_xx_`, for example, `USES=tcl:85`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3671
+#, no-wrap
+msgid "The Most Useful Read-Only Variables for Ports That Use Tcl/Tk"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3675
+#, no-wrap
+msgid "`TCL_VER`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3677
+#, no-wrap
+msgid "chosen major.minor version of Tcl"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3678
+#, no-wrap
+msgid "`TCLSH`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3680
+#, no-wrap
+msgid "full path of the Tcl interpreter"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3681
+#, no-wrap
+msgid "`TCL_LIBDIR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3683
+#, no-wrap
+msgid "path of the Tcl libraries"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3684
+#, no-wrap
+msgid "`TCL_INCLUDEDIR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3686
+#, no-wrap
+msgid "path of the Tcl C header files"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3687
+#, no-wrap
+msgid "`TK_VER`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3689
+#, no-wrap
+msgid "chosen major.minor version of Tk"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3690
+#, no-wrap
+msgid "`WISH`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3692
+#, no-wrap
+msgid "full path of the Tk interpreter"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3693
+#, no-wrap
+msgid "`TK_LIBDIR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3695
+#, no-wrap
+msgid "path of the Tk libraries"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3696
+#, no-wrap
+msgid "`TK_INCLUDEDIR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3697
+#, no-wrap
+msgid "path of the Tk C header files"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3701
+msgid ""
+"See the crossref:uses[uses-tcl,`USES=tcl`] and crossref:uses[uses-tk,"
+"`USES=tk`] of crossref:uses[uses,Using `USES` Macros] for a full description "
+"of those variables. A complete list of those variables is available in [."
+"filename]#/usr/ports/Mk/Uses/tcl.mk#."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3703
+#, no-wrap
+msgid "Using SDL"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3706
+msgid ""
+"`USE_SDL` is used to autoconfigure the dependencies for ports which use an "
+"SDL based library like package:devel/sdl12[] and package:graphics/"
+"sdl_image[]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3708
+msgid "These SDL libraries for version 1.2 are recognized:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3710
+msgid "sdl: package:devel/sdl12[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3711
+msgid "console: package:devel/sdl_console[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3712
+msgid "gfx: package:graphics/sdl_gfx[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3713
+msgid "image: package:graphics/sdl_image[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3714
+msgid "mixer: package:audio/sdl_mixer[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3715
+msgid "mm: package:devel/sdlmm[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3716
+msgid "net: package:net/sdl_net[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3717
+msgid "pango: package:x11-toolkits/sdl_pango[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3718
+msgid "sound: package:audio/sdl_sound[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3719
+msgid "ttf: package:graphics/sdl_ttf[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3721
+msgid "These SDL libraries for version 2.0 are recognized:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3723
+msgid "sdl: package:devel/sdl20[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3724
+msgid "gfx: package:graphics/sdl2_gfx[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3725
+msgid "image: package:graphics/sdl2_image[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3726
+msgid "mixer: package:audio/sdl2_mixer[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3727
+msgid "net: package:net/sdl2_net[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3728
+msgid "ttf: package:graphics/sdl2_ttf[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3730
+msgid ""
+"Therefore, if a port has a dependency on package:net/sdl_net[] and package:"
+"audio/sdl_mixer[], the syntax will be:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3734
+#, no-wrap
+msgid "USE_SDL=\tnet mixer\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3737
+msgid ""
+"The dependency package:devel/sdl12[], which is required by package:net/"
+"sdl_net[] and package:audio/sdl_mixer[], is automatically added as well."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3739
+msgid "Using `USE_SDL` with entries for SDL 1.2, it will automatically:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3741
+msgid "Add a dependency on sdl12-config to `BUILD_DEPENDS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3742
+msgid "Add the variable `SDL_CONFIG` to `CONFIGURE_ENV`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3743
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3749
+msgid "Add the dependencies of the selected libraries to `LIB_DEPENDS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3745
+msgid "Using `USE_SDL` with entries for SDL 2.0, it will automatically:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3747
+msgid "Add a dependency on sdl2-config to `BUILD_DEPENDS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3748
+msgid "Add the variable `SDL2_CONFIG` to `CONFIGURE_ENV`"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3752
+#, no-wrap
+msgid "Using wxWidgets"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3755
+msgid ""
+"This section describes the status of the wxWidgets libraries in the ports "
+"tree and its integration with the ports system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3761
+msgid ""
+"There are many versions of the wxWidgets libraries which conflict between "
+"them (install files under the same name). In the ports tree this problem "
+"has been solved by installing each version under a different name using "
+"version number suffixes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3767
+msgid ""
+"The obvious disadvantage of this is that each application has to be modified "
+"to find the expected version. Fortunately, most of the applications call "
+"the `wx-config` script to determine the necessary compiler and linker "
+"flags. The script is named differently for every available version. "
+"Majority of applications respect an environment variable, or accept a "
+"configure argument, to specify which `wx-config` script to call. Otherwise "
+"they have to be patched."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3769
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4070
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4289
+#, no-wrap
+msgid "Version Selection"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3772
+msgid ""
+"To make the port use a specific version of wxWidgets there are two variables "
+"available for defining (if only one is defined the other will be set to a "
+"default value):"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3774
+#, no-wrap
+msgid "Variables to Select wxWidgets Versions"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3781
+#, no-wrap
+msgid "Default value"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3782
+#, no-wrap
+msgid "`USE_WX`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3783
+#, no-wrap
+msgid "List of versions the port can use"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3785
+#, no-wrap
+msgid "All available versions"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3786
+#, no-wrap
+msgid "`USE_WX_NOT`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3787
+#, no-wrap
+msgid "List of versions the port cannot use"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3788
+#, no-wrap
+msgid "None"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3791
+msgid ""
+"The available wxWidgets versions and the corresponding ports in the tree are:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3793
+#, no-wrap
+msgid "Available wxWidgets Versions"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3797
+#, no-wrap
+msgid "Version"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3799
+#, no-wrap
+msgid "Port"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3800
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3818
+#, no-wrap
+msgid "`2.8`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3802
+#, no-wrap
+msgid "package:x11-toolkits/wxgtk28[]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3803
+#, no-wrap
+msgid "`3.0`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3804
+#, no-wrap
+msgid "package:x11-toolkits/wxgtk30[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3807
+msgid ""
+"The variables in <<wx-ver-sel-table>> can be set to one or more of these "
+"combinations separated by spaces:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3809
+#, no-wrap
+msgid "wxWidgets Version Specifications"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3815
+#, no-wrap
+msgid "Example"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3816
+#, no-wrap
+msgid "Single version"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3819
+#, no-wrap
+msgid "Ascending range"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3821
+#, no-wrap
+msgid "`2.8+`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3822
+#, no-wrap
+msgid "Descending range"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3824
+#, no-wrap
+msgid "`3.0-`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3825
+#, no-wrap
+msgid "Full range (must be ascending)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3826
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3869
+#, no-wrap
+msgid "`2.8-3.0`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3830
+msgid ""
+"There are also some variables to select the preferred versions from the "
+"available ones. They can be set to a list of versions, the first ones will "
+"have higher priority."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3831
+#, no-wrap
+msgid "Variables to Select Preferred wxWidgets Versions"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3837
+#, no-wrap
+msgid "Designed for"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3838
+#, no-wrap
+msgid "`WANT_WX_VER`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3840
+#, no-wrap
+msgid "the port"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3841
+#, no-wrap
+msgid "`WITH_WX_VER`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3842
+#, no-wrap
+msgid "the user"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3849
+msgid ""
+"There are other applications that, while not being wxWidgets libraries, are "
+"related to them. These applications can be specified in `WX_COMPS`. These "
+"components are available:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3851
+#, no-wrap
+msgid "Available wxWidgets Components"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3858
+#, no-wrap
+msgid "Version restriction"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3859
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3902
+#, no-wrap
+msgid "`wx`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3860
+#, no-wrap
+msgid "main library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3862
+#, no-wrap
+msgid "none"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3863
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3905
+#, no-wrap
+msgid "`contrib`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3864
+#, no-wrap
+msgid "contributed libraries"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3866
+#, no-wrap
+msgid "`none`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3867
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3908
+#, no-wrap
+msgid "`python`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3868
+#, no-wrap
+msgid "wxPython (Python bindings)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3874
+msgid ""
+"The dependency type can be selected for each component by adding a suffix "
+"separated by a semicolon. If not present then a default type will be used "
+"(see <<wx-def-dep-types>>). These types are available:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3876
+#, no-wrap
+msgid "Available wxWidgets Dependency Types"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3883
+#, no-wrap
+msgid "`build`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3885
+#, no-wrap
+msgid "Component is required for building, equivalent to `BUILD_DEPENDS`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3886
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3910
+#, no-wrap
+msgid "`run`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3888
+#, no-wrap
+msgid "Component is required for running, equivalent to `RUN_DEPENDS`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3889
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3904
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3907
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3913
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3915
+#, no-wrap
+msgid "`lib`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3890
+#, no-wrap
+msgid "Component is required for building and running, equivalent to `LIB_DEPENDS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3893
+msgid "The default values for the components are detailed in this table:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3895
+#, no-wrap
+msgid "Default wxWidgets Dependency Types"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3901
+#, no-wrap
+msgid "Dependency type"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3911
+#, no-wrap
+msgid "`mozilla`"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3918
+#, no-wrap
+msgid "Selecting wxWidgets Components"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3922
+msgid ""
+"This fragment corresponds to a port which uses wxWidgets version `2.4` and "
+"its contributed libraries."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3927
+#, no-wrap
+msgid ""
+"USE_WX=\t\t2.8\n"
+"WX_COMPS=\twx contrib\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3932
+#, no-wrap
+msgid "Detecting Installed Versions"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3937
+msgid ""
+"To detect an installed version, define `WANT_WX`. If it is not set to a "
+"specific version then the components will have a version suffix. `HAVE_WX` "
+"will be filled after detection."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3939
+#, no-wrap
+msgid "Detecting Installed wxWidgets Versions and Components"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3943
+msgid ""
+"This fragment can be used in a port that uses wxWidgets if it is installed, "
+"or an option is selected."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3947
+#, no-wrap
+msgid "WANT_WX=\tyes\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3949
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3965
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4018
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4608
+#, no-wrap
+msgid ".include <bsd.port.pre.mk>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3954
+#, no-wrap
+msgid ""
+".if defined(WITH_WX) || !empty(PORT_OPTIONS:MWX) || !empty(HAVE_WX:Mwx-2.8)\n"
+"USE_WX=\t\t\t2.8\n"
+"CONFIGURE_ARGS+=\t--enable-wx\n"
+".endif\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3957
+msgid ""
+"This fragment can be used in a port that enables wxPython support if it is "
+"installed or if an option is selected, in addition to wxWidgets, both "
+"version `2.8`."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3963
+#, no-wrap
+msgid ""
+"USE_WX=\t\t2.8\n"
+"WX_COMPS=\twx\n"
+"WANT_WX=\t2.8\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3970
+#, no-wrap
+msgid ""
+".if defined(WITH_WXPYTHON) || !empty(PORT_OPTIONS:MWXPYTHON) || !empty(HAVE_WX:Mpython)\n"
+"WX_COMPS+=\t\tpython\n"
+"CONFIGURE_ARGS+=\t--enable-wxpython\n"
+".endif\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3975
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4145
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4380
+#, no-wrap
+msgid "Defined Variables"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3978
+msgid ""
+"These variables are available in the port (after defining one from <<wx-ver-"
+"sel-table>>)."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3980
+#, no-wrap
+msgid "Variables Defined for Ports That Use wxWidgets"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3987
+#, no-wrap
+msgid "`WX_CONFIG`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3989
+#, no-wrap
+msgid "The path to the wxWidgets`wx-config` script (with different name)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3990
+#, no-wrap
+msgid "`WXRC_CMD`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3992
+#, no-wrap
+msgid "The path to the wxWidgets`wxrc` program (with different name)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3993
+#, no-wrap
+msgid "`WX_VERSION`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3994
+#, no-wrap
+msgid "The wxWidgets version that is going to be used (for example, `2.6`)"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:3997
+#, no-wrap
+msgid "Processing in [.filename]#bsd.port.pre.mk#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4000
+msgid ""
+"Define `WX_PREMK` to be able to use the variables right after including [."
+"filename]#bsd.port.pre.mk#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4004
+msgid ""
+"When defining `WX_PREMK`, then the version, dependencies, components and "
+"defined variables will not change if modifying the wxWidgets port variables "
+"_after_ including [.filename]#bsd.port.pre.mk#."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4007
+#, no-wrap
+msgid "Using wxWidgets Variables in Commands"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4011
+msgid ""
+"This fragment illustrates the use of `WX_PREMK` by running the `wx-config` "
+"script to obtain the full version string, assign it to a variable and pass "
+"it to the program."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4016
+#, no-wrap
+msgid ""
+"USE_WX=\t\t2.8\n"
+"WX_PREMK=\tyes\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4021
+#, no-wrap
+msgid ""
+".if exists(${WX_CONFIG})\n"
+"VER_STR!=\t${WX_CONFIG} --release\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4024
+#, no-wrap
+msgid ""
+"PLIST_SUB+=\tVERSION=\"${VER_STR}\"\n"
+".endif\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4031
+msgid ""
+"The wxWidgets variables can be safely used in commands when they are inside "
+"targets without the need of `WX_PREMK`."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4034
+#, no-wrap
+msgid "Additional `configure` Arguments"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4037
+msgid ""
+"Some GNU `configure` scripts cannot find wxWidgets with just the `WX_CONFIG` "
+"environment variable set, requiring additional arguments. `WX_CONF_ARGS` can "
+"be used for provide them."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4039
+#, no-wrap
+msgid "Legal Values for `WX_CONF_ARGS`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4043
+#, no-wrap
+msgid "Possible value"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4045
+#, no-wrap
+msgid "Resulting argument"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4046
+#, no-wrap
+msgid "`absolute`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4048
+#, no-wrap
+msgid "`--with-wx-config=${WX_CONFIG}`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4049
+#, no-wrap
+msgid "`relative`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4050
+#, no-wrap
+msgid "`--with-wx=${LOCALBASE} --with-wx-config=${WX_CONFIG:T}`"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4053
+#, no-wrap
+msgid "Using Lua"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4056
+msgid ""
+"This section describes the status of the Lua libraries in the ports tree and "
+"its integration with the ports system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4062
+msgid ""
+"There are many versions of the Lua libraries and corresponding interpreters, "
+"which conflict between them (install files under the same name). In the "
+"ports tree this problem has been solved by installing each version under a "
+"different name using version number suffixes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4065
+msgid ""
+"The obvious disadvantage of this is that each application has to be modified "
+"to find the expected version. But it can be solved by adding some "
+"additional flags to the compiler and linker."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4068
+msgid ""
+"Applications that use Lua should normally build for just one version. "
+"However, loadable modules for Lua are built in a separate flavor for each "
+"Lua version that they support, and dependencies on such modules should "
+"specify the flavor using the `@${LUA_FLAVOR}` suffix on the port origin."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4073
+msgid "A port using Lua should have a line of this form:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4077
+#, no-wrap
+msgid "USES=\tlua\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4082
+msgid ""
+"If a specific version of Lua, or range of versions, is needed, it can be "
+"specified as a parameter in the form `XY` (which may be used multiple "
+"times), `XY+`, `-XY`, or `XY-ZA`. The default version of Lua as set via "
+"`DEFAULT_VERSIONS` will be used if it falls in the requested range, "
+"otherwise the closest requested version to the default will be used. For "
+"example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4086
+#, no-wrap
+msgid "USES=\tlua:52-53\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4089
+msgid ""
+"Note that no attempt is made to adjust the version selection based on the "
+"presence of any already-installed Lua version."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4094
+msgid ""
+"The `XY+` form of version specification should not be used without careful "
+"consideration; the Lua API changes to some extent in every version, and "
+"configuration tools like CMake or Autoconf will often fail to work on future "
+"versions of Lua until updated to do so."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4097
+#, no-wrap
+msgid "Configuration and Compiler flags"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4102
+msgid ""
+"Software that uses Lua may have been written to auto-detect the Lua version "
+"in use. In general ports should override this assumption, and force the use "
+"of the specific Lua version selected as described above. Depending on the "
+"software being ported, this might require any or all of:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4104
+msgid ""
+"Using `LUA_VER` as part of a parameter to the software's configuration "
+"script via `CONFIGURE_ARGS` or `CONFIGURE_ENV` (or equivalent for other "
+"build systems);"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4105
+msgid ""
+"Adding `-I${LUA_INCDIR}`, `-L${LUA_LIBDIR}`, and `-llua-${LUA_VER}` to "
+"`CFLAGS`, `LDFLAGS`, `LIBS` respectively as appropriate;"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4106
+msgid ""
+"Patch the software's configuration or build files to select the correct "
+"version."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4109
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4353
+#, no-wrap
+msgid "Version Flavors"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4113
+msgid ""
+"A port which installs a Lua module (rather than an application that simply "
+"makes use of Lua) should build a separate flavor for each supported Lua "
+"version. This is done by adding the `module` parameter:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4117
+#, no-wrap
+msgid "USES=\tlua:module\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4120
+msgid ""
+"A version number or range of versions can be specified as well; use a comma "
+"to separate parameters."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4122
+msgid ""
+"Since each flavor must have a different package name, the variable "
+"`LUA_PKGNAMEPREFIX` is provided which will be set to an appropriate value; "
+"the intended usage is:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4126
+#, no-wrap
+msgid "PKGNAMEPREFIX=\t${LUA_PKGNAMEPREFIX}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4130
+msgid ""
+"Module ports should normally install files only to `LUA_MODLIBDIR`, "
+"`LUA_MODSHAREDIR`, `LUA_DOCSDIR`, and `LUA_EXAMPLESDIR`, all of which are "
+"set up to refer to version-specific subdirectories. Installing any other "
+"files must be done with care to avoid conflicts between versions."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4132
+msgid ""
+"A port (other than a Lua module) which wishes to build a separate package "
+"for each Lua version should use the `flavors` parameter:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4136
+#, no-wrap
+msgid "USES=\tlua:flavors\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4140
+msgid ""
+"This operates the same way as the `module` parameter described above, but "
+"without the assumption that the package should be documented as a Lua module "
+"(so `LUA_DOCSDIR` and `LUA_EXAMPLESDIR` are not defined by default). "
+"However, the port may choose to define `LUA_DOCSUBDIR` as a suitable "
+"subdirectory name (usually the port's `PORTNAME` as long as this does not "
+"conflict with the `PORTNAME` of any module), in which case the framework "
+"will define both `LUA_DOCSDIR` and `LUA_EXAMPLESDIR`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4143
+msgid ""
+"As with module ports, a flavored port should avoid installing files that "
+"would conflict between versions. Typically this is done by adding "
+"`LUA_VER_STR` as a suffix to program names (e.g. using crossref:uses[uses-"
+"uniquefiles,`uniquefiles`]), and otherwise using either `LUA_VER` or "
+"`LUA_VER_STR` as part of any other files or subdirectories used outside of "
+"`LUA_MODLIBDIR` and `LUA_MODSHAREDIR`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4148
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4383
+msgid "These variables are available in the port."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4150
+#, no-wrap
+msgid "Variables Defined for Ports That Use Lua"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4157
+#, no-wrap
+msgid "`LUA_VER`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4159
+#, no-wrap
+msgid "The Lua version that is going to be used (for example, `5.4`)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4160
+#, no-wrap
+msgid "`LUA_VER_STR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4162
+#, no-wrap
+msgid "The Lua version without the dots (for example, `54`)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4163
+#, no-wrap
+msgid "`LUA_FLAVOR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4165
+#, no-wrap
+msgid "The flavor name corresponding to the selected Lua version, to be used for specifying dependencies"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4166
+#, no-wrap
+msgid "`LUA_BASE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4168
+#, no-wrap
+msgid "The prefix that should be used to locate Lua (and components) that are already installed"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4169
+#, no-wrap
+msgid "`LUA_PREFIX`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4171
+#, no-wrap
+msgid "The prefix where Lua (and components) are to be installed by this port"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4172
+#, no-wrap
+msgid "`LUA_INCDIR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4174
+#, no-wrap
+msgid "The directory where Lua header files are installed"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4175
+#, no-wrap
+msgid "`LUA_LIBDIR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4177
+#, no-wrap
+msgid "The directory where Lua libraries are installed"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4178
+#, no-wrap
+msgid "`LUA_REFMODLIBDIR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4180
+#, no-wrap
+msgid "The directory where Lua module libraries ([.filename]#.so#) that are already installed are to be found"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4181
+#, no-wrap
+msgid "`LUA_REFMODSHAREDIR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4183
+#, no-wrap
+msgid "The directory where Lua modules ([.filename]#.lua#) that are already installed are to be found"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4184
+#, no-wrap
+msgid "`LUA_MODLIBDIR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4186
+#, no-wrap
+msgid "The directory where Lua module libraries ([.filename]#.so#) are to be installed by this port"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4187
+#, no-wrap
+msgid "`LUA_MODSHAREDIR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4189
+#, no-wrap
+msgid "The directory where Lua modules ([.filename]#.lua#) are to be installed by this port"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4190
+#, no-wrap
+msgid "`LUA_PKGNAMEPREFIX`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4192
+#, no-wrap
+msgid "The package name prefix used by Lua modules"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4193
+#, no-wrap
+msgid "`LUA_CMD`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4195
+#, no-wrap
+msgid "The name of the Lua interpreter (e.g. `lua54`)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4196
+#, no-wrap
+msgid "`LUAC_CMD`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4197
+#, no-wrap
+msgid "The name of the Lua compiler (e.g. `luac54`)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4200
+msgid ""
+"These additional variables are available for ports that specified the "
+"`module` parameter:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4202
+#, no-wrap
+msgid "Variables Defined for Lua Module Ports"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4209
+#, no-wrap
+msgid "`LUA_DOCSDIR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4211
+#, no-wrap
+msgid "the directory to which the module's documentation should be installed."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4212
+#, no-wrap
+msgid "`LUA_EXAMPLESDIR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4213
+#, no-wrap
+msgid "the directory to which the module's example files should be installed."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4219
+#, no-wrap
+msgid "Makefile for an application using Lua"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4224
+msgid ""
+"This example shows how to reference a Lua module required at run time. "
+"Notice that the reference must specify a flavor."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4230
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4491
+#, no-wrap
+msgid ""
+"PORTNAME=\tsample\n"
+"DISTVERSION=\t1.2.3\n"
+"CATEGORIES=\twhatever\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4234
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4258
+#, no-wrap
+msgid ""
+"MAINTAINER=\tfred.bloggs@example.com\n"
+"COMMENT=\tSample\n"
+"WWW=\t\thttps://example.com/lua_sample/sample/\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4236
+#, no-wrap
+msgid "RUN_DEPENDS=\t${LUA_REFMODLIBDIR}/lpeg.so:devel/lua-lpeg@${LUA_FLAVOR}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4238
+#, no-wrap
+msgid "USES=\t\tlua\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4245
+#, no-wrap
+msgid "Makefile for a simple Lua module"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4254
+#, no-wrap
+msgid ""
+"PORTNAME=\tsample\n"
+"DISTVERSION=\t1.2.3\n"
+"CATEGORIES=\twhatever\n"
+"PKGNAMEPREFIX=\t${LUA_PKGNAMEPREFIX}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4260
+#, no-wrap
+msgid "USES=\t\tlua:module\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4262
+#, no-wrap
+msgid "DOCSDIR=\t${LUA_DOCSDIR}\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4269
+#, no-wrap
+msgid "Using Guile"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4272
+msgid ""
+"This section describes the status of Guile in the ports tree and its "
+"integration with the ports system."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4281
+msgid ""
+"There are multiple versions of the Guile libraries and corresponding "
+"interpreters, which conflict between them (install files under the same "
+"name). In the ports tree this problem has been solved by installing each "
+"version under a different name using version number suffixes. In most "
+"cases, applications should detect the correct version from the configuration "
+"variables provided and use `pkg-config` to determine the name and associated "
+"paths. However, some applications (especially those using their own "
+"configuration rules for `cmake` or `meson`) will always try to use the "
+"latest available version. In this case, either patch the port or declare a "
+"build conflict (see the `conflicts` option below) to ensure that the correct "
+"dependency is generated when building outside of poudriere."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4287
+msgid ""
+"Applications that use Guile should normally build for just one version, "
+"preferably the one specified in `DEFAULT_VERSIONS`, or failing that the "
+"latest version that they support. However, Guile or Scheme libraries, or "
+"extension modules for Guile are built in a separate flavor for each Guile "
+"version that they support, and dependencies on such ports should specify the "
+"flavor using the `@${GUILE_FLAVOR}` suffix on the port origin."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4292
+msgid ""
+"A port using Guile should define `USES=guile:__arg,arg...__` with "
+"appropriate arguments as follows:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4294
+#, no-wrap
+msgid "Arguments Defined for Ports That Use Guile"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4301
+#, no-wrap
+msgid "_X.Y_"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4305
+#, no-wrap
+msgid ""
+"Declare compatibility with Guile version `X.Y`.\n"
+"Currently available versions are `1.8` (obsolete), `2.2` and `3.0`.\n"
+"Multiple versions may be specified."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4306
+#, no-wrap
+msgid "flavors"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4310
+#, no-wrap
+msgid ""
+"Create a flavor for every Guile version specified.\n"
+"The version specified by `DEFAULT_VERSIONS` will become the default flavor.\n"
+"Flavor names are of the form `guileXY`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4311
+#, no-wrap
+msgid "build"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4314
+#, no-wrap
+msgid ""
+"Add the Guile interpreter as a build dependency only, rather than a library dependency.\n"
+"`build` and `run` may both be specified."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4315
+#, no-wrap
+msgid "run"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4318
+#, no-wrap
+msgid ""
+"Add the Guile interpreter as a runtime dependency only, rather than a library dependency.\n"
+"`build` and `run` may both be specified."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4319
+#, no-wrap
+msgid "alias"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4321
+#, no-wrap
+msgid "Add `BINARY_ALIAS` values for the interpreter and tools."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4322
+#, no-wrap
+msgid "conflicts"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4324
+#, no-wrap
+msgid ""
+"Declare `CONFLICTS_BUILD` for Guile versions newer than the one selected.\n"
+"Use this when the port cannot be configured to use a specific Guile version."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4327
+msgid ""
+"Some additional arguments are available for handling unusual cases; see `Mk/"
+"Uses/guile.mk` for details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4330
+msgid ""
+"Unless `build` or `run` is specified, then `LIB_DEPENDS` receives both the "
+"`libguile` library dependency and also any additional dependencies required "
+"by the guile version, e.g. `libgc`. Normally the port should not need any "
+"additional dependencies related to its use of Guile."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4332
+#, no-wrap
+msgid "Configuration flags"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4337
+msgid ""
+"Software that uses Guile should be using the `pkg-config` mechanism to "
+"obtain compiler and linker flags. Some older or esoteric ports may be using "
+"`guile-config` or obtaining values directly from `guile` instead, which "
+"should also work (the `alias` argument may be useful in some of these cases)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4339
+msgid ""
+"The framework tries to inform the port of the desired Guile version using "
+"the following methods:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4341
+msgid "`GUILE_EFFECTIVE_VERSION` is added to `CONFIGURE_ENV`;"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4342
+msgid ""
+"The full path to the Guile binary is specified in the `GUILE` variable in "
+"`CONFIGURE_ENV` and `MAKE_ENV`;"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4343
+msgid ""
+"If the `alias` option is used, the desired Guile version's binaries are the "
+"ones aliased;"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4344
+msgid ""
+"If the `alias` option is not used, paths to the desired Guile version's "
+"tools (`guild`, `guile-config`, etc.) are added to `CONFIGURE_ENV` and "
+"`MAKE_ENV` as variables `GUILD`, `GUILE_CONFIG`, etc."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4347
+msgid ""
+"For some ports, it may be necessary to specify the version in additional "
+"ways, such as via `CONFIGURE_ARGS` or `MESON_ARGS`, depending on the port."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4351
+msgid ""
+"If none of these methods cause the port to select the specified Guile "
+"version when other versions are present, then preferably patch it to do so. "
+"If that is not feasible, specify the `conflicts` option to prevent building "
+"the port under conditions where it will detect the wrong version."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4358
+msgid ""
+"A port which installs a Guile extension or library, or a Scheme library that "
+"precompiles for Guile, should build a separate flavor for each supported "
+"Guile version. This is done by adding the `flavors` option."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4360
+msgid ""
+"Since each flavor must have a different package name, such ports must set "
+"`PKGNAMESUFFIX`, typically:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4364
+#, no-wrap
+msgid "PKGNAMESUFFIX=\t-${FLAVOR}\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4368
+msgid ""
+"Such ports must install Scheme files to `GUILE_SITE_DIR` rather than to "
+"`GUILE_GLOBAL_SITE_DIR` even when the files are not version-specific. This "
+"often requires patching the port."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4371
+msgid ""
+"Additionally, if such a port installs a `.pc` file, it must be placed in "
+"`GUILE_PKGCONFIG_PATH` rather than in the global `pkgconfig` directory. "
+"This allows dependent ports to find a correct configuration for the specific "
+"Guile version in use."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4374
+msgid ""
+"If a Guile extension port installs a `.so` file, then it must usually be "
+"placed in the Guile-version-specific `extensions` directory. `USE_LDCONFIG` "
+"should usually not be used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4378
+msgid ""
+"Any other files installed by a flavored port must likewise be in version-"
+"specific directories or use version-specific filenames. For documentation "
+"and examples, `GUILE_DOCS_DIR` and `GUILE_EXAMPLES_DIR` specify suitable "
+"locations in which the port should create a subdirectory, see below."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4385
+#, no-wrap
+msgid "Variables Defined for Ports That Use Guile"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4390
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4452
+#, no-wrap
+msgid "Sample Value"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4393
+#, no-wrap
+msgid "`GUILE_VER`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4394
+#, no-wrap
+msgid "3.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4396
+#, no-wrap
+msgid "Guile version in use."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4397
+#, no-wrap
+msgid "`GUILE_SFX`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4398
+#, no-wrap
+msgid "3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4401
+#, no-wrap
+msgid ""
+"Short suffix used on some names.\n"
+"Use only with care; may be non-unique or may change in the future."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4402
+#, no-wrap
+msgid "`GUILE_FLAVOR`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4403
+#, no-wrap
+msgid "guile30"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4405
+#, no-wrap
+msgid "Flavor name corresponding to the selected version."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4406
+#, no-wrap
+msgid "`GUILE_PORT`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4407
+#, no-wrap
+msgid "lang/guile3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4409
+#, no-wrap
+msgid "Port origin of the specified Guile version."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4410
+#, no-wrap
+msgid "`GUILE_PREFIX`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4411
+#, no-wrap
+msgid "${PREFIX}"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4413
+#, no-wrap
+msgid "Directory prefix to be used for installation."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4414
+#, no-wrap
+msgid "`GUILE_CMD`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4415
+#, no-wrap
+msgid "guile-3.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4417
+#, no-wrap
+msgid "Name of the Guile interpreter, with version suffix."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4418
+#, no-wrap
+msgid "`GUILE_CMDPATH`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4419
+#, no-wrap
+msgid "${LOCALBASE}/bin/guile-3.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4421
+#, no-wrap
+msgid "Full path to the Guile interpreter."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4422
+#, no-wrap
+msgid "`GUILD_CMD`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4423
+#, no-wrap
+msgid "guild-3.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4425
+#, no-wrap
+msgid "Name of the Guild tool, with version suffix."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4426
+#, no-wrap
+msgid "`GUILD_CMDPATH`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4427
+#, no-wrap
+msgid "${LOCALBASE}/bin/guild-3.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4429
+#, no-wrap
+msgid "Full path to the Guild tool."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4431
+#, no-wrap
+msgid ""
+"`++GUILE_*_CMD++` +\n"
+"`++GUILE_*_CMDPATH++`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4434
+#, no-wrap
+msgid "Like `GUILE_CMD` and `GUILE_CMDPATH`, but for other tool binaries."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4435
+#, no-wrap
+msgid "`GUILE_PKGCONFIG_PATH`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4436
+#, no-wrap
+msgid "${LOCALBASE}/libdata/pkgconfig/guile/3.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4438
+#, no-wrap
+msgid "Where packages using `flavors` should install `.pc` files."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4439
+#, no-wrap
+msgid "`GUILE_INFO_PATH`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4440
+#, no-wrap
+msgid "share/info/guile3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4441
+#, no-wrap
+msgid "A suitable value for `INFO_PATH` for ports using the `flavors` option."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4445
+msgid ""
+"The following are defined as variables and as `PLIST_SUB` entries. The "
+"variable form is suffixed with `_DIR` and is a full path (prefixed with "
+"`GUILE_PREFIX`)."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4447
+#, no-wrap
+msgid "Path Substitutions Defined for Ports That Use Guile"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4455
+#, no-wrap
+msgid "GUILE_GLOBAL_SITE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4456
+#, no-wrap
+msgid "share/guile/site"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4458
+#, no-wrap
+msgid "Site directory shared by all guile versions; this should not usually be used."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4459
+#, no-wrap
+msgid "GUILE_SITE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4460
+#, no-wrap
+msgid "share/guile/3.0/site"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4462
+#, no-wrap
+msgid "Site directory for the selected Guile version."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4463
+#, no-wrap
+msgid "GUILE_SITE_CCACHE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4464
+#, no-wrap
+msgid "lib/guile/3.0/site-ccache"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4466
+#, no-wrap
+msgid "Directory for compiled bytecode files."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4467
+#, no-wrap
+msgid "GUILE_DOCS"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4468
+#, no-wrap
+msgid "share/doc/guile30"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4470
+#, no-wrap
+msgid "Parent directory for version-specific documentation."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4471
+#, no-wrap
+msgid "GUILE_EXAMPLES"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4472
+#, no-wrap
+msgid "share/examples/guile30"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4473
+#, no-wrap
+msgid "Parent directory for version-specific examples."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4479
+#, no-wrap
+msgid "Makefile for an application using Guile"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4485
+msgid ""
+"This example shows how to reference a Guile library required at build and "
+"run time. Notice that the reference must specify a flavor. This example "
+"assumes that the application is using `pkg-config` to locate dependencies."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4495
+#, no-wrap
+msgid ""
+"MAINTAINER=\tfred.bloggs@example.com\n"
+"COMMENT=\tSample\n"
+"WWW=\t\thttps://example.com/guile_sample/sample/\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4498
+#, no-wrap
+msgid ""
+"BUILD_DEPENDS=\tguile-lib-${GUILE_FLAVOR}>=0.2.5:devel/guile-lib@${GUILE_FLAVOR}\n"
+"RUN_DEPENDS=\tguile-lib-${GUILE_FLAVOR}>=0.2.5:devel/guile-lib@${GUILE_FLAVOR}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4500
+#, no-wrap
+msgid "USES=\t\tguile:2.2,3.0 pkgconfig\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4507
+#, no-wrap
+msgid "Using `iconv`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4510
+msgid "FreeBSD has a native `iconv` in the operating system."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4512
+msgid "For software that needs `iconv`, define `USES=iconv`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4514
+msgid "When a port defines `USES=iconv`, these variables will be available:"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4519
+#, no-wrap
+msgid "Variable name"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4520
+#, no-wrap
+msgid "Purpose"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4521
+#, no-wrap
+msgid "Port iconv (when using WCHAR_T or //TRANSLIT extensions)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4524
+#, no-wrap
+msgid "Base iconv"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4525
+#, no-wrap
+msgid "`ICONV_CMD`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4526
+#, no-wrap
+msgid "Directory where the `iconv` binary resides"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4527
+#, no-wrap
+msgid "`${LOCALBASE}/bin/iconv`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4529
+#, no-wrap
+msgid "[.filename]#/usr/bin/iconv#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4530
+#, no-wrap
+msgid "`ICONV_LIB`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4531
+#, no-wrap
+msgid "`ld` argument to link to [.filename]#libiconv# (if needed)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4532
+#, no-wrap
+msgid "`-liconv`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4534
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4544
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4548
+#, no-wrap
+msgid "(empty)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4535
+#, no-wrap
+msgid "`ICONV_PREFIX`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4536
+#, no-wrap
+msgid "Directory where the `iconv` implementation resides (useful for configure scripts)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4537
+#, no-wrap
+msgid "`${LOCALBASE}`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4539
+#, no-wrap
+msgid "[.filename]#/usr#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4540
+#, no-wrap
+msgid "`ICONV_CONFIGURE_ARG`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4541
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4546
+#, no-wrap
+msgid "Preconstructed configure argument for configure scripts"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4542
+#, no-wrap
+msgid "`--with-libiconv-prefix=${LOCALBASE}`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4545
+#, no-wrap
+msgid "`ICONV_CONFIGURE_BASE`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4547
+#, no-wrap
+msgid "`--with-libiconv=${LOCALBASE}`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4551
+msgid ""
+"These two examples automatically populate the variables with the correct "
+"value for systems using package:converters/libiconv[] or the native `iconv` "
+"respectively:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4553
+#, no-wrap
+msgid "Simple `iconv` Usage"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4560
+#, no-wrap
+msgid ""
+"USES=\t\ticonv\n"
+"LDFLAGS+=\t-L${LOCALBASE}/lib ${ICONV_LIB}\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4565
+#, no-wrap
+msgid "`iconv` Usage with `configure`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4572
+#, no-wrap
+msgid ""
+"USES=\t\ticonv\n"
+"CONFIGURE_ARGS+=${ICONV_CONFIGURE_ARG}\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4578
+msgid ""
+"As shown above, `ICONV_LIB` is empty when a native `iconv` is present. This "
+"can be used to detect the native `iconv` and respond appropriately."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4581
+msgid ""
+"Sometimes a program has an `ld` argument or search path hardcoded in a [."
+"filename]#Makefile# or configure script. This approach can be used to solve "
+"that problem:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4583
+#, no-wrap
+msgid "Fixing Hardcoded `-liconv`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4589
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4606
+#, no-wrap
+msgid "USES=\t\ticonv\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4592
+#, no-wrap
+msgid ""
+"post-patch:\n"
+"\t@${REINPLACE_CMD} -e 's/-liconv/${ICONV_LIB}/' ${WRKSRC}/Makefile\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4598
+msgid ""
+"In some cases it is necessary to set alternate values or perform operations "
+"depending on whether there is a native `iconv`. [.filename]#bsd.port.pre."
+"mk# must be included before testing the value of `ICONV_LIB`:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4600
+#, no-wrap
+msgid "Checking for Native `iconv` Availability"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4614
+#, no-wrap
+msgid ""
+"post-patch:\n"
+".if empty(ICONV_LIB)\n"
+"\t# native iconv detected\n"
+"\t@${REINPLACE_CMD} -e 's|iconv||' ${WRKSRC}/Config.sh\n"
+".endif\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4616
+#, no-wrap
+msgid ".include <bsd.port.post.mk>\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4621
+#, no-wrap
+msgid "Using Xfce"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4624
+msgid "Ports that need Xfce libraries or applications set `USES=xfce`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4628
+msgid ""
+"Specific Xfce library and application dependencies are set with values "
+"assigned to `USE_XFCE`. They are defined in [.filename]#/usr/ports/Mk/Uses/"
+"xfce.mk#. The possible values are:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4629
+#, no-wrap
+msgid "Values of `USE_XFCE`"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4630
+#, no-wrap
+msgid "garcon"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4632
+msgid "package:sysutils/garcon[]"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4633
+#, no-wrap
+msgid "libexo"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4635
+msgid "package:x11/libexo[]"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4636
+#, no-wrap
+msgid "libgui"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4638
+msgid "package:x11-toolkits/libxfce4gui[]"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4639
+#, no-wrap
+msgid "libmenu"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4641
+msgid "package:x11/libxfce4menu[]"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4642
+#, no-wrap
+msgid "libutil"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4644
+msgid "package:x11/libxfce4util[]"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4645
+#, no-wrap
+msgid "panel"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4647
+msgid "package:x11-wm/xfce4-panel[]"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4648
+#, no-wrap
+msgid "thunar"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4650
+msgid "package:x11-fm/thunar[]"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4651
+#, no-wrap
+msgid "xfconf"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4653
+msgid "package:x11/xfce4-conf[]"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4655
+#, no-wrap
+msgid "`USES=xfce` Example"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4662
+#, no-wrap
+msgid ""
+"USES=\t\txfce\n"
+"USE_XFCE=\tlibmenu\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4667
+#, no-wrap
+msgid "Using Xfce's Own GTK2 Widgets"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4671
+msgid ""
+"In this example, the ported application uses the GTK2-specific widgets "
+"package:x11/libxfce4menu[] and package:x11/xfce4-conf[]."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4676
+#, no-wrap
+msgid ""
+"USES=\t\txfce:gtk2\n"
+"USE_XFCE=\tlibmenu xfconf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4685
+msgid ""
+"Xfce components included this way will automatically include any "
+"dependencies they need. It is no longer necessary to specify the entire "
+"list. If the port only needs package:x11-wm/xfce4-panel[], use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4690
+#, no-wrap
+msgid ""
+"USES=\t\txfce\n"
+"USE_XFCE=\tpanel\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4693
+msgid ""
+"There is no need to list the components package:x11-wm/xfce4-panel[] needs "
+"itself like this:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4698
+#, no-wrap
+msgid ""
+"USES=\t\txfce\n"
+"USE_XFCE=\tlibexo libmenu libutil panel\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4702
+msgid ""
+"However, Xfce components and non-Xfce dependencies of the port must be "
+"included explicitly. Do not count on an Xfce component to provide a sub-"
+"dependency other than itself for the main port."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4705
+#, no-wrap
+msgid "Using Budgie"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4708
+msgid ""
+"Applications or libraries depending on the Budgie desktop should set `USES= "
+"budgie` and set `USE_BUDGIE` to the list of required components."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4715
+#, no-wrap
+msgid "`libbudgie`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4717
+#, no-wrap
+msgid "Desktop core (library)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4718
+#, no-wrap
+msgid "`libmagpie`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4720
+#, no-wrap
+msgid "Budgie's X11 window manager and compositor library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4721
+#, no-wrap
+msgid "`raven`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4723
+#, no-wrap
+msgid "All-in-one center in panel for accessing different applications widgets"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4724
+#, no-wrap
+msgid "`screensaver`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4726
+#, no-wrap
+msgid "Desktop-specific screensaver"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4731
+msgid ""
+"All application widgets communicate through the *org.budgie_desktop.Raven* "
+"service."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4733
+msgid ""
+"The default dependency is lib- and run-time, it can be changed with `:build` "
+"or `:run`, for example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4738
+#, no-wrap
+msgid ""
+"USES=\t\tbudgie\n"
+"USE_BUDGIE=\tscreensaver:build\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4742
+#, no-wrap
+msgid "`USE_BUDGIE` Example"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4749
+#, no-wrap
+msgid ""
+"USES=\t\tbudgie gettext gnome meson pkgconfig\n"
+"USE_BUDGIE=\tlibbudgie\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4753
+#, no-wrap
+msgid "Using Databases"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4756
+msgid ""
+"Use one of the `USES` macros from <<using-databases-uses>> to add a "
+"dependency on a database."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4758
+#, no-wrap
+msgid "Database `USES` Macros"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4762
+#, no-wrap
+msgid "Database"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4764
+#, no-wrap
+msgid "USES Macro"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4765
+#, no-wrap
+msgid "Berkeley DB"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4767
+#, no-wrap
+msgid "crossref:uses[uses-bdb,`bdb`]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4768
+#, no-wrap
+msgid "MariaDB, MySQL, Percona"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4770
+#, no-wrap
+msgid "crossref:uses[uses-mysql,`mysql`]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4771
+#, no-wrap
+msgid "PostgreSQL"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4773
+#, no-wrap
+msgid "crossref:uses[uses-pgsql,`pgsql`]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4774
+#, no-wrap
+msgid "SQLite"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4775
+#, no-wrap
+msgid "crossref:uses[uses-sqlite,`sqlite`]"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4778
+#, no-wrap
+msgid "Using Berkeley DB 6"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4784
+#, no-wrap
+msgid "USES=\tbdb:6\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4787
+msgid "See crossref:uses[uses-bdb,`bdb`] for more information."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4790
+#, no-wrap
+msgid "Using MySQL"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4794
+msgid "When a port needs the MySQL client library add"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4798
+#, no-wrap
+msgid "USES=\tmysql\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4801
+msgid "See crossref:uses[uses-mysql,`mysql`] for more information."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4804
+#, no-wrap
+msgid "Using PostgreSQL"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4808
+msgid "When a port needs the PostgreSQL server version 9.6 or later add"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4813
+#, no-wrap
+msgid ""
+"USES=\t\tpgsql:9.6+\n"
+"WANT_PGSQL=\tserver\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4816
+msgid "See crossref:uses[uses-pgsql,`pgsql`] for more information."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4819
+#, no-wrap
+msgid "Using SQLite 3"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4825
+#, no-wrap
+msgid "USES=\tsqlite:3\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4828
+msgid "See crossref:uses[uses-sqlite,`sqlite`] for more information."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4831
+#, no-wrap
+msgid "Starting and Stopping Services (`rc` Scripts)"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4838
+msgid ""
+"[.filename]#rc.d# scripts are used to start services on system startup, and "
+"to give administrators a standard way of stopping, starting and restarting "
+"the service. Ports integrate into the system [.filename]#rc.d# framework. "
+"Details on its usage can be found in extref:{handbook}[the rc.d Handbook "
+"chapter, configtuning-rcd]. Detailed explanation of the available commands "
+"is provided in man:rc[8] and man:rc.subr[8]. Finally, there is extref:{rc-"
+"scripting}[an article] on practical aspects of [.filename]#rc.d# scripting."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4841
+msgid ""
+"With a mythical port called _doorman_, which needs to start a _doormand_ "
+"daemon. Add the following to the [.filename]#Makefile#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4845
+#, no-wrap
+msgid "USE_RC_SUBR=\tdoormand\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4852
+msgid ""
+"Multiple scripts may be listed and will be installed. Scripts must be "
+"placed in the [.filename]#files# subdirectory and a `.in` suffix must be "
+"added to their filename. Standard `SUB_LIST` expansions will be ran against "
+"this file. Use of the `%%PREFIX%%` and `%%LOCALBASE%%` expansions is "
+"strongly encouraged as well. More on `SUB_LIST` in crossref:pkg-files[using-"
+"sub-files,the relevant section]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4854
+msgid ""
+"As of FreeBSD 6.1-RELEASE, local [.filename]#rc.d# scripts (including those "
+"installed by ports) are included in the overall man:rcorder[8] of the base "
+"system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4856
+msgid ""
+"An example simple [.filename]#rc.d# script to start the doormand daemon:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4860
+#, no-wrap
+msgid "#!/bin/sh\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4872
+#, no-wrap
+msgid ""
+"# PROVIDE: doormand\n"
+"# REQUIRE: LOGIN\n"
+"# KEYWORD: shutdown\n"
+"#\n"
+"# Add these lines to /etc/rc.conf.local or /etc/rc.conf\n"
+"# to enable this service:\n"
+"#\n"
+"# doormand_enable (bool):\tSet to NO by default.\n"
+"#\t\t\t\tSet it to YES to enable doormand.\n"
+"# doormand_config (path):\tSet to %%PREFIX%%/etc/doormand/doormand.cf\n"
+"#\t\t\t\tby default.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4874
+#, no-wrap
+msgid ". /etc/rc.subr\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4877
+#, no-wrap
+msgid ""
+"name=doormand\n"
+"rcvar=doormand_enable\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4879
+#, no-wrap
+msgid "load_rc_config $name\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4882
+#, no-wrap
+msgid ""
+": ${doormand_enable:=\"NO\"}\n"
+": ${doormand_config=\"%%PREFIX%%/etc/doormand/doormand.cf\"}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4885
+#, no-wrap
+msgid ""
+"command=%%PREFIX%%/sbin/${name}\n"
+"pidfile=/var/run/${name}.pid\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4887
+#, no-wrap
+msgid "command_args=\"-p $pidfile -f $doormand_config\"\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4889
+#, no-wrap
+msgid "run_rc_command \"$1\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4892
+msgid ""
+"Unless there is a very good reason to start the service earlier, or it runs "
+"as a particular user (other than root), all ports scripts must use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4896
+#, no-wrap
+msgid "REQUIRE: LOGIN\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4899
+msgid ""
+"If the startup script launches a daemon that must be shutdown, the following "
+"will trigger a stop of the service on system shutdown:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4903
+#, no-wrap
+msgid "KEYWORD: shutdown\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4906
+msgid ""
+"If the script is not starting a persistent service this is not necessary."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4909
+msgid ""
+"For optional configuration elements the \"=\" style of default variable "
+"assignment is preferable to the \":=\" style here, since the former sets a "
+"default value only if the variable is unset, and the latter sets one if the "
+"variable is unset _or_ null. A user might very well include something like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4913
+#, no-wrap
+msgid "doormand_flags=\"\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4917
+msgid ""
+"in their [.filename]#rc.conf.local#, and a variable substitution using \":"
+"=\" would inappropriately override the user's intention. The `_enable` "
+"variable is not optional, and must use the \":\" for the default."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4922
+msgid ""
+"Ports _must not_ start and stop their services when installing and "
+"deinstalling. Do not abuse the [.filename]#plist# keywords described in "
+"crossref:plist[plist-keywords-base-exec, \"the @preexec command,@postexec "
+"command,@preunexec command,@postunexec command section\"] by running "
+"commands that modify the currently running system, including starting or "
+"stopping services."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4925
+#, no-wrap
+msgid "Pre-Commit Checklist"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4928
+msgid ""
+"Before contributing a port with an [.filename]#rc.d# script, and more "
+"importantly, before committing one, please consult this checklist to be sure "
+"that it is ready."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4930
+msgid ""
+"The package:devel/rclint[] port can check for most of these, but it is not a "
+"substitute for proper review."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4933
+msgid ""
+"If this is a new file, does it have a [.filename]#.sh# extension? If so, "
+"that must be changed to just [.filename]#file.in# since [.filename]#rc.d# "
+"files may not end with that extension."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4934
+msgid ""
+"Do the name of the file (minus [.filename]#.in#), the `PROVIDE` line, and "
+"`$` _name_ all match? The file name matching `PROVIDE` makes debugging "
+"easier, especially for man:rcorder[8] issues. Matching the file name and "
+"`$`_name_ makes it easier to figure out which variables are relevant in [."
+"filename]#rc.conf[.local]#. It is also a policy for all new scripts, "
+"including those in the base system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4935
+msgid ""
+"Is the `REQUIRE` line set to `LOGIN`? This is mandatory for scripts that run "
+"as a non-root user. If it runs as root, is there a good reason for it to run "
+"prior to `LOGIN`? If not, it must run after so that local scrips can be "
+"loosely grouped to a point in man:rcorder[8] after most everything in the "
+"base is already running."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4936
+msgid ""
+"Does the script start a persistent service? If so, it must have `KEYWORD: "
+"shutdown`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4937
+msgid ""
+"Make sure there is no `KEYWORD: FreeBSD` present. This has not been "
+"necessary nor desirable for years. It is also an indication that the new "
+"script was copy/pasted from an old script, so extra caution must be given to "
+"the review."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4938
+msgid ""
+"If the script uses an interpreted language like `perl`, `python`, or `ruby`, "
+"make certain that `command_interpreter` is set appropriately, for example, "
+"for Perl, by adding `PERL=${PERL}` to `SUB_LIST` and using `%%PERL%%`. "
+"Otherwise,"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4942
+#, no-wrap
+msgid "# service name stop\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4945
+msgid ""
+"will probably not work properly. See man:service[8] for more information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4946
+msgid ""
+"Have all occurrences of [.filename]#/usr/local# been replaced with `%%PREFIX%"
+"%`?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4947
+msgid "Do the default variable assignments come after `load_rc_config`?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4948
+msgid ""
+"Are there default assignments to empty strings? They should be removed, but "
+"double-check that the option is documented in the comments at the top of the "
+"file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4949
+msgid "Are things that are set in variables actually used in the script?"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4950
+msgid ""
+"Are options listed in the default _name_`_flags` things that are actually "
+"mandatory? If so, they must be in `command_args`. `-d` is a red flag (pardon "
+"the pun) here, since it is usually the option to \"daemonize\" the process, "
+"and therefore is actually mandatory."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4951
+msgid ""
+"`_name__flags` must never be included in `command_args` (and vice versa, "
+"although that error is less common)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4952
+msgid ""
+"Does the script execute any code unconditionally? This is frowned on. "
+"Usually these things must be dealt with through a `start_precmd`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4953
+msgid ""
+"All boolean tests must use the `checkyesno` function. No hand-rolled tests "
+"for `[Yy][Ee][Ss]`, etc."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4954
+msgid ""
+"If there is a loop (for example, waiting for something to start) does it "
+"have a counter to terminate the loop? We do not want the boot to be stuck "
+"forever if there is an error."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4955
+msgid ""
+"Does the script create files or directories that need specific permissions, "
+"for example, a [.filename]#pid# that needs to be owned by the user that runs "
+"the process? Rather than the traditional man:touch[1]/man:chown[8]/man:"
+"chmod[1] routine, consider using man:install[1] with the proper command line "
+"arguments to do the whole procedure with one step."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4957
+#, no-wrap
+msgid "Adding Users and Groups"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4962
+msgid ""
+"Some ports require a particular user account to be present, usually for "
+"daemons that run as that user. For these ports, choose a _unique_ UID from "
+"50 to 999 and register it in [.filename]#ports/UIDs# (for users) and [."
+"filename]#ports/GIDs# (for groups). The unique identification should be the "
+"same for users and groups."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4964
+msgid ""
+"Please include a patch against these two files when requiring a new user or "
+"group to be created for the port."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4966
+msgid ""
+"Then use `USERS` and `GROUPS` in [.filename]#Makefile#, and the user will be "
+"automatically created when installing the port."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4971
+#, no-wrap
+msgid ""
+"USERS=\tpulse\n"
+"GROUPS=\tpulse pulse-access pulse-rt\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4974
+msgid ""
+"The current list of reserved UIDs and GIDs can be found in [.filename]#ports/"
+"UIDs# and [.filename]#ports/GIDs#."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4976
+#, no-wrap
+msgid "Ports That Rely on Kernel Sources"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4980
+msgid ""
+"Some ports (such as kernel loadable modules) need the kernel source files so "
+"that the port can compile. Here is the correct way to determine if the user "
+"has them installed:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4984
+#, no-wrap
+msgid "USES=\tkmod\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4987
+msgid ""
+"Apart from this check, the `kmod` feature takes care of most items that "
+"these ports need to take into account."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4989
+#, no-wrap
+msgid "Go Libraries"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4993
+msgid ""
+"Ports must not package or install Go libs or source code. Go ports must "
+"fetch the required deps at the normal fetch time and should only install the "
+"programs and things users need, not the things Go developers would need."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4995
+msgid "Ports should (in order of preference):"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4997
+msgid "Use vendored dependencies included with the package source."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4998
+msgid ""
+"Fetch the versions of deps specified by upstream (in the case of go.mod, "
+"vendor.json or similar)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:4999
+msgid ""
+"As a last resort (deps are not included nor versions specified exactly) "
+"fetch versions of dependencies available at the time of upstream development/"
+"release."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5001
+#, no-wrap
+msgid "Haskell Libraries"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5005
+msgid ""
+"Just like in case of Go language, Ports must not package or install Haskell "
+"libraries. Haskell ports must link statically to their dependencies and "
+"fetch all distribution files on fetch stage."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5007
+#, no-wrap
+msgid "Shell Completion Files"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5012
+msgid ""
+"Many modern shells (including bash, fish, tcsh and zsh) support parameter "
+"and/or option tab-completion. This support usually comes from completion "
+"files, which contain the definitions for how tab completion will work for a "
+"certain command. Ports sometimes ship with their own completion files, or "
+"porters may have created them themselves."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5016
+msgid ""
+"When available, completion files should always be installed. It is not "
+"necessary to make an option for it. If an option is used, though, always "
+"enable it in `OPTIONS_DEFAULT`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5018
+#, no-wrap
+msgid "Full shell completion file names"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5022
+#, no-wrap
+msgid "`bash`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5023
+#, no-wrap
+msgid "[.filename]#${PREFIX}/etc/bash_completion.d# or [.filename]#${PREFIX}/share/bash-completion/completions#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5025
+#, no-wrap
+msgid "(any unique file names in one of these folders)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5026
+#, no-wrap
+msgid "`fish`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5027
+#, no-wrap
+msgid "[.filename]#${PREFIX}/share/fish/completions/${PORTNAME}.fish#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5030
+#, no-wrap
+msgid "`zsh`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5031
+#, no-wrap
+msgid "[.filename]#${PREFIX}/share/zsh/site-functions/_${PORTNAME}#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/special/_index.adoc:5034
+msgid "Do not register any dependencies on the shells themselves."
+msgstr ""
diff --git a/documentation/content/en/books/porters-handbook/testing/_index.adoc b/documentation/content/en/books/porters-handbook/testing/_index.adoc
index c32e4205ac..2fee22b8d0 100644
--- a/documentation/content/en/books/porters-handbook/testing/_index.adoc
+++ b/documentation/content/en/books/porters-handbook/testing/_index.adoc
@@ -3,10 +3,10 @@ title: Chapter 10. Testing the Port
prev: books/porters-handbook/pkg-files
next: books/porters-handbook/upgrading
description: Testing a FreeBSD Port
-tags: ["testing", "port", "Portclippy", "Portfmt", "Portlint", "Poudriere", "sets"]
+tags: ["testing", "port", "Portclippy", "Portfmt", "Portlint", "poudriere", "sets"]
showBookMenu: true
weight: 10
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/testing/"
---
[[testing]]
@@ -65,6 +65,35 @@ See [.filename]#bsd.port.mk# for the meaning of the string produced.
Also note that running a recent version of `portlint` (as specified in the next section) will cause `make describe` to be run automatically.
+[[make-test]]
+== Running `make test`
+
+Even if the port builds fine, it is a good idea to ensure that the software
+correctly does what it is supposed to do.
+If the original upstream project provides tests along with the software, it is a
+good idea to run them and check everything works as expected.
+
+A port can enable tests automatically by using the `TEST_TARGET` variable.
+When set, this variable contains the name of the testing target of the port.
+This is usually just `test` but other names include `tests`, `check` or for
+specific cases things like `run_tests.py`.
+
+In addition to the `TEST_TARGET` variable the framework provides the following
+variables to control the tests execution:
+
+* `TEST_WRKSRC` is the directory to do the tests in.
+* `TEST_ENV` contains additional variables to be passed to the test stage.
+* `TEST_ARGS` contains any extra arguments passed to the test stage.
+
+Examples of use of these variables can be found in package:cad/xyce[],
+package:www/libjwt[] and others.
+
+[NOTE]
+====
+Please make sure that tests do not break when updating a port.
+====
+
+
[[testing-portclippy]]
== Portclippy / Portfmt
@@ -79,11 +108,13 @@ Portfmt is a tool for automatically formatting [.filename]#Makefile#.
Do check the port with crossref:quick-porting[porting-portlint,`portlint`] before submitting or committing it.
`portlint` warns about many common errors, both functional and stylistic.
-For a new (or repocopied) port, `portlint -A` is the most thorough; for an existing port, `portlint -C` is sufficient.
+For a new port, `portlint -A` is the most thorough; for an existing port, `portlint -C` is sufficient.
Since `portlint` uses heuristics to try to figure out errors, it can produce false positive warnings.
In addition, occasionally something that is flagged as a problem really cannot be done in any other way due to limitations in the ports framework.
+pass:[<!-- vale Vale.Terms = NO -->]
When in doubt, the best thing to do is ask on {freebsd-ports}.
+pass:[<!-- vale Vale.Terms = YES -->]
[[testing-porttools]]
== Port Tools
@@ -92,7 +123,8 @@ The package:ports-mgmt/porttools[] program is part of the Ports Collection.
`port` is the front-end script, which can help simplify the testing job.
Whenever a new port or an update to an existing one needs testing, use `port test` to test the port, including the <<testing-portlint,`portlint`>> checking.
-This command also detects and lists any files that are not listed in [.filename]#pkg-plist#. For example:
+This command also detects and lists any files that are not listed in [.filename]#pkg-plist#.
+For example:
[source,shell]
....
@@ -139,7 +171,7 @@ In addition, it is worth checking the same with the stage directory support (see
* `stage-qa` checks for common problems like bad shebang, symlinks pointing outside the stage directory, setuid files, and non-stripped libraries...
These tests will not find hard-coded paths inside the port's files, nor will it verify that `LOCALBASE` is being used to correctly refer to files from other ports.
-The temporarily-installed port in [.filename]#/var/tmp/`make -V PORTNAME`# must be tested for proper operation to make sure there are no problems with paths.
+The temporarily installed port in [.filename]#/var/tmp/`make -V PORTNAME`# must be tested for proper operation to make sure there are no problems with paths.
`PREFIX` must not be set explicitly in a port's [.filename]#Makefile#.
Users installing the port may have set `PREFIX` to a custom location, and the port must respect that setting.
@@ -163,9 +195,9 @@ See <<testing-poudriere>> for more information.
====
[[testing-poudriere]]
-== Poudriere
+== poudriere
-For a ports contributor, Poudriere is one of the most important and helpful testing and build tools.
+For a ports contributor, poudriere is one of the most important and helpful testing and build tools.
Its main features include:
* Bulk building of the entire ports tree, specific subsets of the ports tree, or a single port including its dependencies
@@ -175,15 +207,15 @@ Its main features include:
* Testing of port builds before submitting a patch to the FreeBSD bug tracker or committing to the ports tree
* Testing for successful ports builds using different options
-Because Poudriere performs its building in a clean man:jail[8] environment and uses man:zfs[8] features,
+Because poudriere performs its building in a clean man:jail[8] environment and uses man:zfs[8] features,
it has several advantages over traditional testing on the host system:
* No pollution of the host environment: No leftover files, no accidental removals, no changes of existing configuration files.
* Verify [.filename]#pkg-plist# for missing or superfluous entries
-* Ports committers sometimes ask for a Poudriere log alongside a patch submission to assess whether the patch is ready for integration into the ports tree
+* Ports committers sometimes ask for a poudriere log alongside a patch submission to assess whether the patch is ready for integration into the ports tree
It is also quite straightforward to set up and use, has no dependencies, and will run on any supported FreeBSD release.
-This section shows how to install, configure, and run Poudriere as part of the normal workflow of a ports contributor.
+This section shows how to install, configure, and run poudriere as part of the normal workflow of a ports contributor.
The examples in this section show a default file layout, as standard in FreeBSD.
Substitute any local changes accordingly.
@@ -191,9 +223,9 @@ The ports tree, represented by `${PORTSDIR}`, is located in [.filename]#/usr/por
Both `${LOCALBASE}` and `${PREFIX}` are [.filename]#/usr/local# by default.
[[testing-poudriere-installing]]
-=== Installing Poudriere
+=== Installing poudriere
-Poudriere is available in the ports tree in package:ports-mgmt/poudriere[].
+poudriere is available in the ports tree in package:ports-mgmt/poudriere[].
It can be installed using man:pkg[8] or from ports:
[source,shell]
@@ -208,7 +240,7 @@ or
# make -C /usr/ports/ports-mgmt/poudriere install clean
....
-There is also a work-in-progress version of Poudriere which will eventually become the next release.
+There is also a work-in-progress version of poudriere which will eventually become the next release.
It is available in package:ports-mgmt/poudriere-devel[].
This development version is used for the official FreeBSD package builds, so it is well tested.
It often has newer interesting features.
@@ -219,40 +251,34 @@ in a way that will shorten a full build from 18 hours to 17 hours when using a h
Those optimizations will not matter a lot when building ports on a desktop machine.
[[testing-poudriere-setup]]
-=== Setting Up Poudriere
+=== Setting Up poudriere
The port installs a default configuration file, [.filename]#/usr/local/etc/poudriere.conf#.
-Each parameter is documented in the configuration file and in man:poudriere[8].
+Each parameter is documented in the configuration file.
+
Here is a minimal example config file:
[.programlisting]
....
-ZPOOL=tank
-ZROOTFS=/poudriere
-BASEFS=/poudriere
+ZPOOL=zroot
+BASEFS=/usr/local/poudriere
DISTFILES_CACHE=/usr/ports/distfiles
RESOLV_CONF=/etc/resolv.conf
-FREEBSD_HOST=ftp://ftp.freebsd.org
-SVN_HOST=svn.FreeBSD.org
....
`ZPOOL`::
-The name of the ZFS storage pool which Poudriere shall use.
+The name of the ZFS storage pool which poudriere shall use.
Must be listed in the output of `zpool status`.
-`ZROOTFS`::
-The root of Poudriere-managed file systems.
-This entry will cause Poudriere to create man:zfs[8] file systems under `tank/poudriere`.
-
`BASEFS`::
-The root mount point for Poudriere file systems.
-This entry will cause Poudriere to mount `tank/poudriere` to `/poudriere`.
+The root mount point for poudriere file systems.
+This entry will cause poudriere to mount `tank/poudriere` to `/poudriere`.
`DISTFILES_CACHE`::
Defines where distfiles are stored.
-In this example, Poudriere and the host share the distfiles storage directory.
+In this example, poudriere and the host share the distfiles storage directory.
This avoids downloading tarballs which are already present on the system.
-Please create this directory if it does not already exist so that Poudriere can find it.
+Please create this directory if it does not already exist so that poudriere can find it.
`RESOLV_CONF`::
Use the host [.filename]#/etc/resolv.conf# inside jails for DNS.
@@ -260,92 +286,62 @@ This is needed so jails can resolve the URLs of distfiles when downloading.
It is not needed when using a proxy.
Refer to the default configuration file for proxy configuration.
-`FREEBSD_HOST`::
-The FTP/HTTP server to use when the jails are installed from FreeBSD releases and updated with man:freebsd-update[8].
-Choose a server location which is close, for example if the machine is located in Australia, use `ftp.au.freebsd.org`.
-
-`SVN_HOST`::
-The server from where jails are installed and updated when using Subversion.
-Also used for ports tree when not using man:portsnap[8].
-Again, choose a nearby location.
-A list of official Subversion mirrors can be found in the extref:{handbook}[FreeBSD Handbook Subversion section, svn-mirrors].
-
[[testing-poudriere-create-jails]]
-=== Creating Poudriere Jails
+=== Creating poudriere Jails
-Create the base jails which Poudriere will use for building:
+Create the base jails which poudriere will use for building:
[source,shell]
....
-# poudriere jail -c -j 114Ramd64 -v 11.4-RELEASE -a amd64
+# poudriere jail -c -j 131Ramd64 -v 13.1-RELEASE -a amd64
....
-Fetch a `11.4-RELEASE` for `amd64` from the FTP server given by `FREEBSD_HOST` in [.filename]#poudriere.conf#,
-create the zfs file system `tank/poudriere/jails/114Ramd64`,
-mount it on [.filename]#/poudriere/jails/114Ramd64# and extract the `11.4-RELEASE` tarballs into this file system.
+Fetch a `13.1-RELEASE` for `amd64` from the FTP server given by `FREEBSD_HOST` in [.filename]#poudriere.conf#,
+create the zfs file system `tank/poudriere/jails/131Ramd64`,
+mount it on [.filename]#/poudriere/jails/131Ramd64# and extract the `13.1-RELEASE` tarballs into this file system.
[source,shell]
....
-# poudriere jail -c -j 11i386 -v stable/11 -a i386 -m git+https
+# poudriere jail -c -j 12i386 -v stable/12 -a i386 -m git+https
....
-Create `tank/poudriere/jails/11i386`, mount it on [.filename]#/poudriere/jails/11i386#,
-then check out the tip of the Subversion branch of `FreeBSD-11-STABLE` from `SVN_HOST` in [.filename]#poudriere.conf# into [.filename]#/poudriere/jails/11i386/usr/src#,
-then complete a `buildworld` and install it into [.filename]#/poudriere/jails/11i386#.
-
-[TIP]
-====
-If a specific Subversion revision is needed, append it to the version string.
-For example:
-
-[source,shell]
-....
-# poudriere jail -c -j 11i386 -v stable/11@123456 -a i386 -m git+https
-....
-
-====
+Create `tank/poudriere/jails/12i386`, mount it on [.filename]#/poudriere/jails/12i386#,
+then check out the tip of the Git branch of `FreeBSD-12-STABLE` from `GIT_HOST` in [.filename]#poudriere.conf# or the default `git.freebsd.org` into [.filename]#/poudriere/jails/12i386/usr/src#,
+then complete a `buildworld` and install it into [.filename]#/poudriere/jails/12i386#.
[NOTE]
====
While it is possible to build a newer version of FreeBSD on an older version, most of the time it will not run.
-For example, if a `stable/11` jail is needed, the host will have to run `stable/11` too.
-Running `11.4-RELEASE` is not enough.
+For example, if a `stable/13` jail is needed, the host will have to run `stable/13` too.
+Running `13.1-RELEASE` is not enough.
====
[NOTE]
====
-To create a Poudriere jail for `14.0-CURRENT`:
+To create a poudriere jail for `14.0-CURRENT`:
[source,shell]
....
# poudriere jail -c -j 14amd64 -v main -a amd64 -m git+https
....
-In order to run a `14.0-CURRENT` Poudriere jail you must be running `14.0-CURRENT`.
+In order to run a `14.0-CURRENT` poudriere jail the host must be running `14.0-CURRENT`.
In general, newer kernels can build and run older jails.
-For instance, a `14.0-CURRENT` kernel can build and run a `11.4-STABLE`.
-Poudriere jail if the `COMPAT_FREEBSD11` kernel option was compiled in (on by default in `14.0-CURRENT`[.filename]#GENERIC# kernel config).
+For instance, a `14.0-CURRENT` kernel can build and run a `12.4-STABLE` if the `COMPAT_FREEBSD12` kernel option was compiled in (on by default in `14.0-CURRENT`[.filename]#GENERIC# kernel config).
====
-[CAUTION]
-====
-The default `svn` protocol works but is not very secure.
-Using `svn+https` along with verifying the remote server's SSL fingerprint is advised.
-It will ensure that the files used for building the jail are from a trusted source.
-====
-
-A list of jails currently known to Poudriere can be shown with `poudriere jail -l`:
+A list of jails currently known to poudriere can be shown with `poudriere jail -l`:
[source,shell]
....
# poudriere jail -l
JAILNAME VERSION ARCH METHOD
-114Ramd64 11.4-RELEASE amd64 ftp
-11i386 11.4-STABLE i386 svn+https
+131Ramd64 13.1-RELEASE amd64 ftp
+12i386 12.4-STABLE i386 git+https
....
[[testing-poudriere-maintaining-jails]]
-=== Keeping Poudriere Jails Updated
+=== Keeping poudriere Jails Updated
Managing updates is very straightforward.
The command:
@@ -356,8 +352,10 @@ The command:
....
updates the specified jail to the latest version available.
+pass:[<!-- vale Vale.Terms = NO -->]
For FreeBSD releases, update to the latest patchlevel with man:freebsd-update[8].
-For FreeBSD versions built from source, update to the latest Subversion revision in the branch.
+pass:[<!-- vale Vale.Terms = YES -->]
+For FreeBSD versions built from source, update to the latest git revision in the branch.
[TIP]
====
@@ -372,24 +370,17 @@ For example, if the building machine has 6 CPUs, use:
====
[[testing-poudriere-ports-tree]]
-=== Setting Up Ports Trees for Use with Poudriere
+=== Setting Up Ports Trees for Use with poudriere
-There are multiple ways to use ports trees in Poudriere.
-The most straightforward way is to have Poudriere create a default ports tree for itself, using either man:portsnap[8] (if running FreeBSD {rel121-current} or {rel114-current}) or Git (if running FreeBSD-CURRENT):
-
-[source,shell]
-....
-# poudriere ports -c -m portsnap
-....
-
-or
+There are multiple ways to use ports trees in poudriere.
+The most straightforward way is to have poudriere create a default ports tree for itself, using link:{handbook}mirrors/#git[Git]:
[source,shell]
....
# poudriere ports -c -m git+https -B main
....
-These commands create `tank/poudriere/ports/default`, mount it on [.filename]#/poudriere/ports/default#, and populate it using Git, man:portsnap[8], or Subversion.
+These commands create `tank/poudriere/ports/default`, mount it on [.filename]#/poudriere/ports/default#, and populate it using Git.
Afterward it is included in the list of known ports trees:
[source,shell]
@@ -406,39 +397,16 @@ Each of the build commands explained later will implicitly use this ports tree u
To use another tree, add `-p _treename_` to the commands.
====
-While useful for regular bulk builds, having this default ports tree with the man:portsnap[8] method may not be the best way to deal with local modifications for a ports contributor.
+The best way to deal with local modifications for a ports contributor is to use link:{handbook}mirrors/#git[Git].
As with the creation of jails, it is possible to use a different method for creating the ports tree.
-To add an additional ports tree for testing local modifications and ports development,
-checking out the tree via Subversion (as described above) is preferable.
-
-[NOTE]
-====
-The http and https methods need package:devel/subversion[] built with the `SERF` option enabled.
-It is enabled by default.
-====
-
-[TIP]
-====
-The `svn` method allows extra qualifiers to tell Subversion exactly how to fetch data.
-This is explained in man:poudriere[8].
-For instance, `poudriere ports -c -m svn+ssh -p subversive` uses SSH for the checkout.
-====
+To add an additional ports tree for testing local modifications and ports development, checking out the tree via git (as described above) is preferable.
[[testing-poudriere-ports-tree-manual]]
-=== Using Manually Managed Ports Trees with Poudriere
+=== Using Manually Managed Ports Trees with poudriere
Depending on the workflow, it can be extremely helpful to use ports trees which are maintained manually.
-For instance, if there is a local copy of the ports tree in [.filename]#/work/ports#, point Poudriere to the location:
-
-* For Poudriere older than version 3.1.20:
-+
-[source,shell]
-....
-# poudriere ports -c -F -f none -M /work/ports -p development
-....
+For instance, if there is a local copy of the ports tree in [.filename]#/work/ports#, point poudriere to the location:
-* For Poudriere version 3.1.20 and later:
-+
[source,shell]
....
# poudriere ports -c -m null -M /work/ports -p development
@@ -455,12 +423,12 @@ development null 2020-07-20 05:06:33 /work/ports
[NOTE]
====
-The dash or `null` in the `METHOD` column means that Poudriere will not update or change this ports tree, ever.
+The dash or `null` in the `METHOD` column means that poudriere will not update or change this ports tree, ever.
It is completely up to the user to maintain this tree, including all local modifications that may be used for testing new ports and submitting patches.
====
[[testing-poudriere-ports-tree-updating]]
-=== Keeping Poudriere Ports Trees Updated
+=== Keeping poudriere Ports Trees Updated
As straightforward as with jails described earlier:
@@ -473,8 +441,7 @@ Will update the given _PORTSTREE_, one tree given by the output of `poudriere -l
[NOTE]
====
-Ports trees without a method, see <<testing-poudriere-ports-tree-manual>>, cannot be updated like this.
-They must be updated manually by the porter.
+Ports trees without a method, see <<testing-poudriere-ports-tree-manual>>, cannot be updated like this and must be updated manually by the porter.
====
[[testing-poudriere-testing-ports]]
@@ -482,11 +449,11 @@ They must be updated manually by the porter.
After jails and ports trees have been set up, the result of a contributor's modifications to the ports tree can be tested.
-For example, local modifications to the package:www/firefox[] port located in [.filename]#/work/ports/www/firefox# can be tested in the previously created 11.4-RELEASE jail:
+For example, local modifications to the package:www/firefox[] port located in [.filename]#/work/ports/www/firefox# can be tested in the previously created 13.1-RELEASE jail:
[source,shell]
....
-# poudriere testport -j 114Ramd64 -p development -o www/firefox
+# poudriere testport -j 131Ramd64 -p development -o www/firefox
....
This will build all dependencies of Firefox.
@@ -494,44 +461,45 @@ If a dependency has been built previously and is still up-to-date, the pre-built
If a dependency has no up-to-date package, one will be built with default options in a jail.
Then Firefox itself is built.
-The complete build of every port is logged to [.filename]#/poudriere/data/logs/bulk/114Ri386-development/build-time/logs#.
+The complete build of every port is logged to [.filename]#/poudriere/data/logs/bulk/131Ri386-development/build-time/logs#.
-The directory name `114Ri386-development` is derived from the arguments to `-j` and `-p`, respectively.
-For convenience, a symbolic link [.filename]#/poudriere/data/logs/bulk/114Ri386-development/latest# is also maintained.
+The directory name `131Ri386-development` is derived from the arguments to `-j` and `-p`, respectively.
+For convenience, a symbolic link [.filename]#/poudriere/data/logs/bulk/131Ri386-development/latest# is also maintained.
The link points to the latest _build-time_ directory.
Also in this directory is an [.filename]#index.html# for observing the build process with a web browser.
-By default, Poudriere cleans up the jails and leaves log files in the directories mentioned above.
+By default, poudriere cleans up the jails and leaves log files in the directories mentioned above.
To ease investigation, jails can be kept running after the build by adding `-i` to `testport`:
[source,shell]
....
-# poudriere testport -j 114Ramd64 -p development -i -o www/firefox
+# poudriere testport -j 131Ramd64 -p development -i -o www/firefox
....
After the build completes, and regardless of whether it was successful, a shell is provided within the jail.
The shell is used to investigate further.
-Poudriere can be told to leave the jail running after the build finishes with `-I`.
-Poudriere will show the command to run when the jail is no longer needed.
+poudriere can be told to leave the jail running after the build finishes with `-I`.
+poudriere will show the command to run when the jail is no longer needed.
It is then possible to man:jexec[8] into it:
[source,shell]
....
-# poudriere testport -j 114Ramd64 -p development -I -o www/firefox
+# poudriere testport -j 131Ramd64 -p development -I -o www/firefox
[...]
====>> Installing local Pkg repository to /usr/local/etc/pkg/repos
-====>> Leaving jail 114Ramd64-development-n running, mounted at /poudriere/data/.m/114Ramd64-development/ref for interactive run testing
-====>> To enter jail: jexec 114Ramd64-development-n env -i TERM=$TERM /usr/bin/login -fp root
-====>> To stop jail: poudriere jail -k -j 114Ramd64 -p development
-# jexec 114Ramd64-development-n env -i TERM=$TERM /usr/bin/login -fp root
+====>> Leaving jail 131Ramd64-development-n running, mounted at /poudriere/data/.m/131Ramd64-development/ref for interactive run testing
+====>> To enter jail: jexec 131Ramd64-development-n env -i TERM=$TERM /usr/bin/login -fp root
+====>> To stop jail: poudriere jail -k -j 131Ramd64 -p development
+# jexec 131Ramd64-development-n env -i TERM=$TERM /usr/bin/login -fp root
# [do some stuff in the jail]
# exit
-# poudriere jail -k -j 114Ramd64 -p development
+# poudriere jail -k -j 131Ramd64 -p development
====>> Umounting file systems
....
An integral part of the FreeBSD ports build infrastructure is the ability to tweak ports to personal preferences with options.
-These can be tested with Poudriere as well. Adding the `-c`:
+These can be tested with poudriere as well.
+Adding the `-c`:
[source,shell]
....
@@ -555,28 +523,28 @@ For all actions involving builds, a so-called _set_ can be specified using `-z _
A set refers to a fully independent build.
This allows, for instance, usage of `testport` with non-standard options for the dependent ports.
-To use sets, Poudriere expects an existing directory structure similar to `PORT_DBDIR`, defaults to [.filename]#/var/db/ports# in its configuration directory.
+To use sets, poudriere expects an existing directory structure similar to `PORT_DBDIR`, defaults to [.filename]#/var/db/ports# in its configuration directory.
This directory is then man:nullfs[5]-mounted into the jails where the ports and their dependencies are built.
Usually a suitable starting point can be obtained by recursively copying the existing `PORT_DBDIR` to [.filename]#/usr/local/etc/poudriere.d/jailname-portname-setname-options#.
This is described in detail in man:poudriere[8].
-For instance, testing package:www/firefox[] in a specific set named `devset`, add the `-z devset` parameter to the testport command:
+For instance, testing package:www/firefox[] in a specific set named `devset`, add the `-z devset` parameter to the `testport` command:
[source,shell]
....
-# poudriere testport -j 114Ramd64 -p development -z devset -o www/firefox
+# poudriere testport -j 131Ramd64 -p development -z devset -o www/firefox
....
This will look for the existence of these directories in this order:
-* [.filename]#/usr/local/etc/poudriere.d/114Ramd64-development-devset-options#
-* [.filename]#/usr/local/etc/poudriere.d/114Ramd64-devset-options#
-* [.filename]#/usr/local/etc/poudriere.d/114Ramd64-development-options#
+* [.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-devset-options#
+* [.filename]#/usr/local/etc/poudriere.d/131Ramd64-devset-options#
+* [.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-options#
* [.filename]#/usr/local/etc/poudriere.d/devset-options#
* [.filename]#/usr/local/etc/poudriere.d/development-options#
-* [.filename]#/usr/local/etc/poudriere.d/114Ramd64-options#
+* [.filename]#/usr/local/etc/poudriere.d/131Ramd64-options#
* [.filename]#/usr/local/etc/poudriere.d/options#
-From this list, Poudriere man:nullfs[5]-mounts the _first existing_ directory tree into the [.filename]#/var/db/ports# directory of the build jails.
+From this list, poudriere man:nullfs[5]-mounts the _first existing_ directory tree into the [.filename]#/var/db/ports# directory of the build jails.
Hence, all custom options are used for all the ports during this run of `testport`.
After the directory structure for a set is provided, the options for a particular port can be altered.
@@ -592,36 +560,37 @@ The selected options are saved to the `devset` set.
[NOTE]
====
-Poudriere is very flexible in the option configuration.
-They can be set for particular jails, ports trees, and for multiple ports by one command.
+poudriere is very flexible in the option configuration.
+poudriere can be set for particular jails, ports trees, and for multiple ports by one command.
Refer to man:poudriere[8] for details.
====
[[testing-poudriere-make-conf]]
=== Providing a Custom [.filename]#make.conf# File
-Similar to using sets, Poudriere will also use a custom [.filename]#make.conf# if it is provided.
+Similar to using sets, poudriere will also use a custom [.filename]#make.conf# if it is provided.
No special command line argument is necessary.
-Instead, Poudriere looks for existing files matching a name scheme derived from the command line. For instance:
+Instead, poudriere looks for existing files matching a name scheme derived from the command line.
+For instance:
[source,shell]
....
-# poudriere testport -j 114Ramd64 -p development -z devset -o www/firefox
+# poudriere testport -j 131Ramd64 -p development -z devset -o www/firefox
....
-causes Poudriere to check for the existence of these files in this order:
+causes poudriere to check for the existence of these files in this order:
* [.filename]#/usr/local/etc/poudriere.d/make.conf#
* [.filename]#/usr/local/etc/poudriere.d/devset-make.conf#
* [.filename]#/usr/local/etc/poudriere.d/development-make.conf#
-* [.filename]#/usr/local/etc/poudriere.d/114Ramd64-make.conf#
-* [.filename]#/usr/local/etc/poudriere.d/114Ramd64-development-make.conf#
-* [.filename]#/usr/local/etc/poudriere.d/114Ramd64-devset-make.conf#
-* [.filename]#/usr/local/etc/poudriere.d/114Ramd64-development-devset-make.conf#
+* [.filename]#/usr/local/etc/poudriere.d/131Ramd64-make.conf#
+* [.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-make.conf#
+* [.filename]#/usr/local/etc/poudriere.d/131Ramd64-devset-make.conf#
+* [.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-devset-make.conf#
Unlike with sets, all of the found files will be appended, _in that order_, into one [.filename]#make.conf# inside the build jails.
It is hence possible to have general make variables, intended to affect all builds in [.filename]#/usr/local/etc/poudriere.d/make.conf#.
-Special variables, intended to affect only certain jails or sets can be set in specialised [.filename]#make.conf# files, such as [.filename]#/usr/local/etc/poudriere.d/114Ramd64-development-devset-make.conf#.
+Special variables, intended to affect only certain jails or sets can be set in specialised [.filename]#make.conf# files, such as [.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-devset-make.conf#.
[[testing-poudriere-sets-perl]]
.Using [.filename]#make.conf# to Change Default Perl
@@ -644,7 +613,7 @@ Note the use of `+=` so that if the variable is already set in the default [.fil
[[testing-poudriere-pruning-distfiles]]
=== Pruning no Longer Needed Distfiles
-Poudriere comes with a built-in mechanism to remove outdated distfiles that are no longer used by any port of a given tree.
+poudriere comes with a built-in mechanism to remove outdated distfiles that are no longer used by any port of a given tree.
The command
[source,shell]
@@ -660,3 +629,39 @@ To skip the prompt and remove all unused files unconditionally, the `-y` argumen
....
# poudriere distclean -p portstree -y
....
+
+[[testing-debugging-ports]]
+== Debugging ports
+
+Sometimes things go wrong and the port fails at run time.
+The framework provides some facilities to help in debugging ports.
+These helpers are limited since the way of debugging a port heavily depends on
+the technology used.
+The following variables help with debugging ports:
+
+* `WITH_DEBUG`. If set, ports are built with debugging symbols.
+* `WITH_DEBUG_PORTS`. Specifies a list of ports to be built with `WITH_DEBUG` set.
+* `DEBUG_FLAGS`. Used to specify additional flags to `CFLAGS`. Defaults to `-g`.
+
+When `WITH_DEBUG` is set, either globally or for a list of ports, the resulting
+binaries are not stripped.
+
+These variables can be specified in [.filename]#make.conf# or in the command
+line:
+
+[source,shell]
+....
+# cd category/port && make -DWITH_DEBUG DEBUG_FLAGSS="-g -O0"
+....
+
+[NOTE]
+====
+If the port is built using package:ports-mgmt/poudriere[] the debugging
+variables must be specified in poudriere's [.filename]#make.conf# and not in
+[.filename]#/etc/make.conf#.
+Refer to package:ports-mgmt/poudriere[] documentation for details.
+====
+
+Please refer to the debugging information in the
+extref:{developers-handbook}tools[Developer's Handbook, debugging]
+for more details about the debugging tools available.
diff --git a/documentation/content/en/books/porters-handbook/testing/_index.po b/documentation/content/en/books/porters-handbook/testing/_index.po
new file mode 100644
index 0000000000..900bfad94d
--- /dev/null
+++ b/documentation/content/en/books/porters-handbook/testing/_index.po
@@ -0,0 +1,1288 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:34-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:1
+#, no-wrap
+msgid "Testing a FreeBSD Port"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:1
+#, no-wrap
+msgid "Chapter 10. Testing the Port"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:13
+#, no-wrap
+msgid "Testing the Port"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:51
+#, no-wrap
+msgid "Running `make describe`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:56
+msgid ""
+"Several of the FreeBSD port maintenance tools, such as man:portupgrade[1], "
+"rely on a database called [.filename]#/usr/ports/INDEX# which keeps track of "
+"such items as port dependencies. [.filename]#INDEX# is created by the top-"
+"level [.filename]#ports/Makefile# via `make index`, which descends into each "
+"port subdirectory and executes `make describe` there. Thus, if `make "
+"describe` fails in any port, no one can generate [.filename]#INDEX#, and "
+"many people will quickly become unhappy."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:61
+msgid ""
+"It is important to be able to generate this file no matter what options are "
+"present in [.filename]#make.conf#, so please avoid doing things such as "
+"using `.error` statements when (for instance) a dependency is not "
+"satisfied. (See crossref:porting-dads[dads-dot-error,Avoid Use of the `."
+"error` Construct].)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:65
+msgid ""
+"If `make describe` produces a string rather than an error message, "
+"everything is probably safe. See [.filename]#bsd.port.mk# for the meaning "
+"of the string produced."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:67
+msgid ""
+"Also note that running a recent version of `portlint` (as specified in the "
+"next section) will cause `make describe` to be run automatically."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:69
+#, no-wrap
+msgid "Running `make test`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:75
+msgid ""
+"Even if the port builds fine, it is a good idea to ensure that the software "
+"correctly does what it is supposed to do. If the original upstream project "
+"provides tests along with the software, it is a good idea to run them and "
+"check everything works as expected."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:80
+msgid ""
+"A port can enable tests automatically by using the `TEST_TARGET` variable. "
+"When set, this variable contains the name of the testing target of the "
+"port. This is usually just `test` but other names include `tests`, `check` "
+"or for specific cases things like `run_tests.py`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:83
+msgid ""
+"In addition to the `TEST_TARGET` variable the framework provides the "
+"following variables to control the tests execution:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:85
+msgid "`TEST_WRKSRC` is the directory to do the tests in."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:86
+msgid ""
+"`TEST_ENV` contains additional variables to be passed to the test stage."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:87
+msgid "`TEST_ARGS` contains any extra arguments passed to the test stage."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:90
+msgid ""
+"Examples of use of these variables can be found in package:cad/xyce[], "
+"package:www/libjwt[] and others."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:94
+msgid "Please make sure that tests do not break when updating a port."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:98
+#, no-wrap
+msgid "Portclippy / Portfmt"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:101
+msgid "Those tools come from package:ports-mgmt/portfmt[]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:103
+msgid ""
+"Portclippy is a linter that checks if variables in the [.filename]#Makefile# "
+"are in the correct order according to crossref:order[porting-order,Order of "
+"Variables in Port Makefiles]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:105
+msgid "Portfmt is a tool for automatically formatting [.filename]#Makefile#."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:107
+#, no-wrap
+msgid "Portlint"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:112
+msgid ""
+"Do check the port with crossref:quick-porting[porting-portlint,`portlint`] "
+"before submitting or committing it. `portlint` warns about many common "
+"errors, both functional and stylistic. For a new port, `portlint -A` is the "
+"most thorough; for an existing port, `portlint -C` is sufficient."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:118
+msgid ""
+"Since `portlint` uses heuristics to try to figure out errors, it can produce "
+"false positive warnings. In addition, occasionally something that is "
+"flagged as a problem really cannot be done in any other way due to "
+"limitations in the ports framework. pass:[<!-- vale Vale.Terms = NO -->] "
+"When in doubt, the best thing to do is ask on {freebsd-ports}. pass:[<!-- "
+"vale Vale.Terms = YES -->]"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:120
+#, no-wrap
+msgid "Port Tools"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:123
+msgid ""
+"The package:ports-mgmt/porttools[] program is part of the Ports Collection."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:128
+msgid ""
+"`port` is the front-end script, which can help simplify the testing job. "
+"Whenever a new port or an update to an existing one needs testing, use `port "
+"test` to test the port, including the <<testing-portlint,`portlint`>> "
+"checking. This command also detects and lists any files that are not listed "
+"in [.filename]#pkg-plist#. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:132
+#, no-wrap
+msgid "# port test /usr/ports/net/csup\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:135
+#, no-wrap
+msgid "`PREFIX` and `DESTDIR`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:140
+msgid ""
+"`PREFIX` determines where the port will be installed. It defaults to [."
+"filename]#/usr/local#, but can be set by the user to a custom path like [."
+"filename]#/opt#. The port must respect the value of this variable."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:145
+msgid ""
+"`DESTDIR`, if set by the user, determines the complete alternative "
+"environment, usually a jail or an installed system mounted somewhere other "
+"than [.filename]#/#. A port will actually install into [.filename]#DESTDIR/"
+"PREFIX#, and register with the package database in [.filename]#DESTDIR/var/"
+"db/pkg#. `DESTDIR` is handled automatically by the ports infrastructure "
+"with man:chroot[8]. There is no need for modifications or any extra care to "
+"write `DESTDIR`-compliant ports."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:148
+msgid ""
+"The value of `PREFIX` will be set to `LOCALBASE` (defaulting to [.filename]#/"
+"usr/local#). If `USE_LINUX_PREFIX` is set, `PREFIX` will be `LINUXBASE` "
+"(defaulting to [.filename]#/compat/linux#)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:152
+msgid ""
+"Avoiding hard-coded [.filename]#/usr/local# paths in the source makes the "
+"port much more flexible and able to cater to the needs of other sites. "
+"Often, this can be accomplished by replacing occurrences of [.filename]#/usr/"
+"local# in the port's various [.filename]##Makefile##s with `${PREFIX}`. "
+"This variable is automatically passed down to every stage of the build and "
+"install processes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:155
+msgid ""
+"Make sure the application is not installing things in [.filename]#/usr/"
+"local# instead of `PREFIX`. A quick test for such hard-coded paths is:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:159
+#, no-wrap
+msgid "% make clean; make package PREFIX=/var/tmp/`make -V PORTNAME`\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:162
+msgid ""
+"If anything is installed outside of `PREFIX`, the package creation process "
+"will complain that it cannot find the files."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:164
+msgid ""
+"In addition, it is worth checking the same with the stage directory support "
+"(see crossref:special[staging,Staging]):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:168
+#, no-wrap
+msgid "% make stage && make check-plist && make stage-qa && make package\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:171
+msgid ""
+"`check-plist` checks for files missing from the plist, and files in the "
+"plist that are not installed by the port."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:172
+msgid ""
+"`stage-qa` checks for common problems like bad shebang, symlinks pointing "
+"outside the stage directory, setuid files, and non-stripped libraries..."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:175
+msgid ""
+"These tests will not find hard-coded paths inside the port's files, nor will "
+"it verify that `LOCALBASE` is being used to correctly refer to files from "
+"other ports. The temporarily installed port in [.filename]#/var/tmp/`make -"
+"V PORTNAME`# must be tested for proper operation to make sure there are no "
+"problems with paths."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:178
+msgid ""
+"`PREFIX` must not be set explicitly in a port's [.filename]#Makefile#. "
+"Users installing the port may have set `PREFIX` to a custom location, and "
+"the port must respect that setting."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:182
+msgid ""
+"Refer to programs and files from other ports with the variables mentioned "
+"above, not explicit pathnames. For instance, if the port requires a macro "
+"`PAGER` to have the full pathname of `less`, do not use a literal path of [."
+"filename]#/usr/local/bin/less#. Instead, use `${LOCALBASE}`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:186
+#, no-wrap
+msgid "-DPAGER=\\\"${LOCALBASE}/bin/less\\\"\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:189
+msgid ""
+"The path with `LOCALBASE` is more likely to still work if the system "
+"administrator has moved the whole [.filename]#/usr/local# tree somewhere "
+"else."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:195
+msgid ""
+"All these tests are done automatically when running `poudriere testport` or "
+"`poudriere bulk -t`. It is highly recommended that every ports contributor "
+"install and test their ports with it. See <<testing-poudriere>> for more "
+"information."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:198
+#, no-wrap
+msgid "poudriere"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:202
+msgid ""
+"For a ports contributor, poudriere is one of the most important and helpful "
+"testing and build tools. Its main features include:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:204
+msgid ""
+"Bulk building of the entire ports tree, specific subsets of the ports tree, "
+"or a single port including its dependencies"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:205
+msgid "Automatic packaging of build results"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:206
+msgid "Generation of build log files per port"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:207
+msgid "Providing a signed man:pkg[8] repository"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:208
+msgid ""
+"Testing of port builds before submitting a patch to the FreeBSD bug tracker "
+"or committing to the ports tree"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:209
+msgid "Testing for successful ports builds using different options"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:212
+msgid ""
+"Because poudriere performs its building in a clean man:jail[8] environment "
+"and uses man:zfs[8] features, it has several advantages over traditional "
+"testing on the host system:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:214
+msgid ""
+"No pollution of the host environment: No leftover files, no accidental "
+"removals, no changes of existing configuration files."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:215
+msgid "Verify [.filename]#pkg-plist# for missing or superfluous entries"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:216
+msgid ""
+"Ports committers sometimes ask for a poudriere log alongside a patch "
+"submission to assess whether the patch is ready for integration into the "
+"ports tree"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:219
+msgid ""
+"It is also quite straightforward to set up and use, has no dependencies, and "
+"will run on any supported FreeBSD release. This section shows how to "
+"install, configure, and run poudriere as part of the normal workflow of a "
+"ports contributor."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:224
+msgid ""
+"The examples in this section show a default file layout, as standard in "
+"FreeBSD. Substitute any local changes accordingly. The ports tree, "
+"represented by `${PORTSDIR}`, is located in [.filename]#/usr/ports#. Both "
+"`${LOCALBASE}` and `${PREFIX}` are [.filename]#/usr/local# by default."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:226
+#, no-wrap
+msgid "Installing poudriere"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:230
+msgid ""
+"poudriere is available in the ports tree in package:ports-mgmt/poudriere[]. "
+"It can be installed using man:pkg[8] or from ports:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:234
+#, no-wrap
+msgid "# pkg install poudriere\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:237
+msgid "or"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:241
+#, no-wrap
+msgid "# make -C /usr/ports/ports-mgmt/poudriere install clean\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:252
+msgid ""
+"There is also a work-in-progress version of poudriere which will eventually "
+"become the next release. It is available in package:ports-mgmt/poudriere-"
+"devel[]. This development version is used for the official FreeBSD package "
+"builds, so it is well tested. It often has newer interesting features. A "
+"ports committer will want to use the development version because it is what "
+"is used in production, and has all the new features that will make sure "
+"everything is exactly right. A contributor will not necessarily need those "
+"as the most important fixes are backported to released version. The main "
+"reason for the use of the development version to build the official package "
+"is because it is faster, in a way that will shorten a full build from 18 "
+"hours to 17 hours when using a high end 32 CPU server with 128GB of RAM. "
+"Those optimizations will not matter a lot when building ports on a desktop "
+"machine."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:254
+#, no-wrap
+msgid "Setting Up poudriere"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:258
+msgid ""
+"The port installs a default configuration file, [.filename]#/usr/local/etc/"
+"poudriere.conf#. Each parameter is documented in the configuration file."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:260
+msgid "Here is a minimal example config file:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:267
+#, no-wrap
+msgid ""
+"ZPOOL=zroot\n"
+"BASEFS=/usr/local/poudriere\n"
+"DISTFILES_CACHE=/usr/ports/distfiles\n"
+"RESOLV_CONF=/etc/resolv.conf\n"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:269
+#, no-wrap
+msgid "`ZPOOL`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:272
+msgid ""
+"The name of the ZFS storage pool which poudriere shall use. Must be listed "
+"in the output of `zpool status`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:273
+#, no-wrap
+msgid "`BASEFS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:276
+msgid ""
+"The root mount point for poudriere file systems. This entry will cause "
+"poudriere to mount `tank/poudriere` to `/poudriere`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:277
+#, no-wrap
+msgid "`DISTFILES_CACHE`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:282
+msgid ""
+"Defines where distfiles are stored. In this example, poudriere and the host "
+"share the distfiles storage directory. This avoids downloading tarballs "
+"which are already present on the system. Please create this directory if it "
+"does not already exist so that poudriere can find it."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:283
+#, no-wrap
+msgid "`RESOLV_CONF`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:288
+msgid ""
+"Use the host [.filename]#/etc/resolv.conf# inside jails for DNS. This is "
+"needed so jails can resolve the URLs of distfiles when downloading. It is "
+"not needed when using a proxy. Refer to the default configuration file for "
+"proxy configuration."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:290
+#, no-wrap
+msgid "Creating poudriere Jails"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:293
+msgid "Create the base jails which poudriere will use for building:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:297
+#, no-wrap
+msgid "# poudriere jail -c -j 131Ramd64 -v 13.1-RELEASE -a amd64\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:302
+msgid ""
+"Fetch a `13.1-RELEASE` for `amd64` from the FTP server given by "
+"`FREEBSD_HOST` in [.filename]#poudriere.conf#, create the zfs file system "
+"`tank/poudriere/jails/131Ramd64`, mount it on [.filename]#/poudriere/"
+"jails/131Ramd64# and extract the `13.1-RELEASE` tarballs into this file "
+"system."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:306
+#, no-wrap
+msgid "# poudriere jail -c -j 12i386 -v stable/12 -a i386 -m git+https\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:311
+msgid ""
+"Create `tank/poudriere/jails/12i386`, mount it on [.filename]#/poudriere/"
+"jails/12i386#, then check out the tip of the Git branch of `FreeBSD-12-"
+"STABLE` from `GIT_HOST` in [.filename]#poudriere.conf# or the default `git."
+"freebsd.org` into [.filename]#/poudriere/jails/12i386/usr/src#, then "
+"complete a `buildworld` and install it into [.filename]#/poudriere/"
+"jails/12i386#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:317
+msgid ""
+"While it is possible to build a newer version of FreeBSD on an older "
+"version, most of the time it will not run. For example, if a `stable/13` "
+"jail is needed, the host will have to run `stable/13` too. Running `13.1-"
+"RELEASE` is not enough."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:322
+msgid "To create a poudriere jail for `14.0-CURRENT`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:326
+#, no-wrap
+msgid "# poudriere jail -c -j 14amd64 -v main -a amd64 -m git+https\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:331
+msgid ""
+"In order to run a `14.0-CURRENT` poudriere jail the host must be running "
+"`14.0-CURRENT`. In general, newer kernels can build and run older jails. "
+"For instance, a `14.0-CURRENT` kernel can build and run a `12.4-STABLE` if "
+"the `COMPAT_FREEBSD12` kernel option was compiled in (on by default in `14.0-"
+"CURRENT`[.filename]#GENERIC# kernel config)."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:334
+msgid ""
+"A list of jails currently known to poudriere can be shown with `poudriere "
+"jail -l`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:341
+#, no-wrap
+msgid ""
+"# poudriere jail -l\n"
+"JAILNAME VERSION ARCH METHOD\n"
+"131Ramd64 13.1-RELEASE amd64 ftp\n"
+"12i386 12.4-STABLE i386 git+https\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:344
+#, no-wrap
+msgid "Keeping poudriere Jails Updated"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:348
+msgid "Managing updates is very straightforward. The command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:352
+#, no-wrap
+msgid "# poudriere jail -u -j JAILNAME\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:359
+msgid ""
+"updates the specified jail to the latest version available. pass:[<!-- vale "
+"Vale.Terms = NO -->] For FreeBSD releases, update to the latest patchlevel "
+"with man:freebsd-update[8]. pass:[<!-- vale Vale.Terms = YES -->] For "
+"FreeBSD versions built from source, update to the latest git revision in the "
+"branch."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:364
+msgid ""
+"For jails employing a `git+*` method, it is helpful to add `-J "
+"_NumberOfParallelBuildJobs_` to speed up the build by increasing the number "
+"of parallel compile jobs used. For example, if the building machine has 6 "
+"CPUs, use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:368
+#, no-wrap
+msgid "# poudriere jail -u -J 6 -j JAILNAME\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:373
+#, no-wrap
+msgid "Setting Up Ports Trees for Use with poudriere"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:377
+msgid ""
+"There are multiple ways to use ports trees in poudriere. The most "
+"straightforward way is to have poudriere create a default ports tree for "
+"itself, using link:{handbook}mirrors/#git[Git]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:381
+#, no-wrap
+msgid "# poudriere ports -c -m git+https -B main\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:385
+msgid ""
+"These commands create `tank/poudriere/ports/default`, mount it on [."
+"filename]#/poudriere/ports/default#, and populate it using Git. Afterward "
+"it is included in the list of known ports trees:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:391
+#, no-wrap
+msgid ""
+"# poudriere ports -l\n"
+"PORTSTREE METHOD TIMESTAMP PATH\n"
+"default git+https 2020-07-20 04:23:56 /poudriere/ports/default\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:398
+msgid ""
+"Note that the \"default\" ports tree is special. Each of the build commands "
+"explained later will implicitly use this ports tree unless specifically "
+"specified otherwise. To use another tree, add `-p _treename_` to the "
+"commands."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:403
+msgid ""
+"The best way to deal with local modifications for a ports contributor is to "
+"use link:{handbook}mirrors/#git[Git]. As with the creation of jails, it is "
+"possible to use a different method for creating the ports tree. To add an "
+"additional ports tree for testing local modifications and ports development, "
+"checking out the tree via git (as described above) is preferable."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:405
+#, no-wrap
+msgid "Using Manually Managed Ports Trees with poudriere"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:409
+msgid ""
+"Depending on the workflow, it can be extremely helpful to use ports trees "
+"which are maintained manually. For instance, if there is a local copy of "
+"the ports tree in [.filename]#/work/ports#, point poudriere to the location:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:413
+#, no-wrap
+msgid "# poudriere ports -c -m null -M /work/ports -p development\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:416
+msgid "This will be listed in the table of known trees:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:422
+#, no-wrap
+msgid ""
+"# poudriere ports -l\n"
+"PORTSTREE METHOD TIMESTAMP PATH\n"
+"development null 2020-07-20 05:06:33 /work/ports\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:428
+msgid ""
+"The dash or `null` in the `METHOD` column means that poudriere will not "
+"update or change this ports tree, ever. It is completely up to the user to "
+"maintain this tree, including all local modifications that may be used for "
+"testing new ports and submitting patches."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:431
+#, no-wrap
+msgid "Keeping poudriere Ports Trees Updated"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:434
+msgid "As straightforward as with jails described earlier:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:438
+#, no-wrap
+msgid "# poudriere ports -u -p PORTSTREE\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:441
+msgid ""
+"Will update the given _PORTSTREE_, one tree given by the output of "
+"`poudriere -l`, to the latest revision available on the official servers."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:445
+msgid ""
+"Ports trees without a method, see <<testing-poudriere-ports-tree-manual>>, "
+"cannot be updated like this and must be updated manually by the porter."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:448
+#, no-wrap
+msgid "Testing Ports"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:451
+msgid ""
+"After jails and ports trees have been set up, the result of a contributor's "
+"modifications to the ports tree can be tested."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:453
+msgid ""
+"For example, local modifications to the package:www/firefox[] port located "
+"in [.filename]#/work/ports/www/firefox# can be tested in the previously "
+"created 13.1-RELEASE jail:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:457
+#, no-wrap
+msgid "# poudriere testport -j 131Ramd64 -p development -o www/firefox\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:463
+msgid ""
+"This will build all dependencies of Firefox. If a dependency has been built "
+"previously and is still up-to-date, the pre-built package is installed. If "
+"a dependency has no up-to-date package, one will be built with default "
+"options in a jail. Then Firefox itself is built."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:465
+msgid ""
+"The complete build of every port is logged to [.filename]#/poudriere/data/"
+"logs/bulk/131Ri386-development/build-time/logs#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:470
+msgid ""
+"The directory name `131Ri386-development` is derived from the arguments to `-"
+"j` and `-p`, respectively. For convenience, a symbolic link [.filename]#/"
+"poudriere/data/logs/bulk/131Ri386-development/latest# is also maintained. "
+"The link points to the latest _build-time_ directory. Also in this "
+"directory is an [.filename]#index.html# for observing the build process with "
+"a web browser."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:473
+msgid ""
+"By default, poudriere cleans up the jails and leaves log files in the "
+"directories mentioned above. To ease investigation, jails can be kept "
+"running after the build by adding `-i` to `testport`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:477
+#, no-wrap
+msgid "# poudriere testport -j 131Ramd64 -p development -i -o www/firefox\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:484
+msgid ""
+"After the build completes, and regardless of whether it was successful, a "
+"shell is provided within the jail. The shell is used to investigate "
+"further. poudriere can be told to leave the jail running after the build "
+"finishes with `-I`. poudriere will show the command to run when the jail is "
+"no longer needed. It is then possible to man:jexec[8] into it:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:498
+#, no-wrap
+msgid ""
+"# poudriere testport -j 131Ramd64 -p development -I -o www/firefox\n"
+"[...]\n"
+"====>> Installing local Pkg repository to /usr/local/etc/pkg/repos\n"
+"====>> Leaving jail 131Ramd64-development-n running, mounted at /poudriere/data/.m/131Ramd64-development/ref for interactive run testing\n"
+"====>> To enter jail: jexec 131Ramd64-development-n env -i TERM=$TERM /usr/bin/login -fp root\n"
+"====>> To stop jail: poudriere jail -k -j 131Ramd64 -p development\n"
+"# jexec 131Ramd64-development-n env -i TERM=$TERM /usr/bin/login -fp root\n"
+"# [do some stuff in the jail]\n"
+"# exit\n"
+"# poudriere jail -k -j 131Ramd64 -p development\n"
+"====>> Umounting file systems\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:503
+msgid ""
+"An integral part of the FreeBSD ports build infrastructure is the ability to "
+"tweak ports to personal preferences with options. These can be tested with "
+"poudriere as well. Adding the `-c`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:507
+#, no-wrap
+msgid "# poudriere testport -c -o www/firefox\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:512
+msgid ""
+"Presents the port configuration dialog before the port is built. The ports "
+"given after `-o` in the format `_category_/_portname_` will use the "
+"specified options, all dependencies will use the default options. Testing "
+"dependent ports with non-default options can be accomplished using sets, see "
+"<<testing-poudriere-sets>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:517
+msgid ""
+"When testing ports where [.filename]#pkg-plist# is altered during build "
+"depending on the selected options, it is recommended to perform a test run "
+"with all options selected _and_ one with all options deselected."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:520
+#, no-wrap
+msgid "Using Sets"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:525
+msgid ""
+"For all actions involving builds, a so-called _set_ can be specified using `-"
+"z _setname_`. A set refers to a fully independent build. This allows, for "
+"instance, usage of `testport` with non-standard options for the dependent "
+"ports."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:531
+msgid ""
+"To use sets, poudriere expects an existing directory structure similar to "
+"`PORT_DBDIR`, defaults to [.filename]#/var/db/ports# in its configuration "
+"directory. This directory is then man:nullfs[5]-mounted into the jails "
+"where the ports and their dependencies are built. Usually a suitable "
+"starting point can be obtained by recursively copying the existing "
+"`PORT_DBDIR` to [.filename]#/usr/local/etc/poudriere.d/jailname-portname-"
+"setname-options#. This is described in detail in man:poudriere[8]. For "
+"instance, testing package:www/firefox[] in a specific set named `devset`, "
+"add the `-z devset` parameter to the `testport` command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:535
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:579
+#, no-wrap
+msgid "# poudriere testport -j 131Ramd64 -p development -z devset -o www/firefox\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:538
+msgid "This will look for the existence of these directories in this order:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:540
+msgid ""
+"[.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-devset-options#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:541
+msgid "[.filename]#/usr/local/etc/poudriere.d/131Ramd64-devset-options#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:542
+msgid "[.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-options#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:543
+msgid "[.filename]#/usr/local/etc/poudriere.d/devset-options#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:544
+msgid "[.filename]#/usr/local/etc/poudriere.d/development-options#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:545
+msgid "[.filename]#/usr/local/etc/poudriere.d/131Ramd64-options#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:546
+msgid "[.filename]#/usr/local/etc/poudriere.d/options#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:549
+msgid ""
+"From this list, poudriere man:nullfs[5]-mounts the _first existing_ "
+"directory tree into the [.filename]#/var/db/ports# directory of the build "
+"jails. Hence, all custom options are used for all the ports during this run "
+"of `testport`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:552
+msgid ""
+"After the directory structure for a set is provided, the options for a "
+"particular port can be altered. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:556
+#, no-wrap
+msgid "# poudriere options -c www/firefox -z devset\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:560
+msgid ""
+"The configuration dialog for package:www/firefox[] is shown, and options can "
+"be edited. The selected options are saved to the `devset` set."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:566
+msgid ""
+"poudriere is very flexible in the option configuration. poudriere can be "
+"set for particular jails, ports trees, and for multiple ports by one "
+"command. Refer to man:poudriere[8] for details."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:569
+#, no-wrap
+msgid "Providing a Custom [.filename]#make.conf# File"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:575
+msgid ""
+"Similar to using sets, poudriere will also use a custom [.filename]#make."
+"conf# if it is provided. No special command line argument is necessary. "
+"Instead, poudriere looks for existing files matching a name scheme derived "
+"from the command line. For instance:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:582
+msgid ""
+"causes poudriere to check for the existence of these files in this order:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:584
+msgid "[.filename]#/usr/local/etc/poudriere.d/make.conf#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:585
+msgid "[.filename]#/usr/local/etc/poudriere.d/devset-make.conf#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:586
+msgid "[.filename]#/usr/local/etc/poudriere.d/development-make.conf#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:587
+msgid "[.filename]#/usr/local/etc/poudriere.d/131Ramd64-make.conf#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:588
+msgid "[.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-make.conf#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:589
+msgid "[.filename]#/usr/local/etc/poudriere.d/131Ramd64-devset-make.conf#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:590
+msgid ""
+"[.filename]#/usr/local/etc/poudriere.d/131Ramd64-development-devset-make."
+"conf#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:594
+msgid ""
+"Unlike with sets, all of the found files will be appended, _in that order_, "
+"into one [.filename]#make.conf# inside the build jails. It is hence "
+"possible to have general make variables, intended to affect all builds in [."
+"filename]#/usr/local/etc/poudriere.d/make.conf#. Special variables, "
+"intended to affect only certain jails or sets can be set in specialised [."
+"filename]#make.conf# files, such as [.filename]#/usr/local/etc/poudriere."
+"d/131Ramd64-development-devset-make.conf#."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:596
+#, no-wrap
+msgid "Using [.filename]#make.conf# to Change Default Perl"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:601
+msgid ""
+"To build a set with a non default Perl version, for example, `5.20`, using a "
+"set named `perl5-20`, create a [.filename]#perl5-20-make.conf# with this "
+"line:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:605
+#, no-wrap
+msgid "DEFAULT_VERSIONS+= perl=5.20\n"
+msgstr ""
+
+#. type: delimited block * 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:609
+msgid ""
+"Note the use of `+=` so that if the variable is already set in the default [."
+"filename]#make.conf# its content will not be overwritten."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:614
+#, no-wrap
+msgid "Pruning no Longer Needed Distfiles"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:618
+msgid ""
+"poudriere comes with a built-in mechanism to remove outdated distfiles that "
+"are no longer used by any port of a given tree. The command"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:622
+#, no-wrap
+msgid "# poudriere distclean -p portstree\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:627
+msgid ""
+"will scan the distfiles folder, `DISTFILES_CACHE` in [.filename]#poudriere."
+"conf#, versus the ports tree given by the `-p _portstree_` argument and "
+"prompt for removal of those distfiles. To skip the prompt and remove all "
+"unused files unconditionally, the `-y` argument can be added:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:631
+#, no-wrap
+msgid "# poudriere distclean -p portstree -y\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:634
+#, no-wrap
+msgid "Debugging ports"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:641
+msgid ""
+"Sometimes things go wrong and the port fails at run time. The framework "
+"provides some facilities to help in debugging ports. These helpers are "
+"limited since the way of debugging a port heavily depends on the technology "
+"used. The following variables help with debugging ports:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:643
+msgid "`WITH_DEBUG`. If set, ports are built with debugging symbols."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:644
+msgid ""
+"`WITH_DEBUG_PORTS`. Specifies a list of ports to be built with `WITH_DEBUG` "
+"set."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:645
+msgid ""
+"`DEBUG_FLAGS`. Used to specify additional flags to `CFLAGS`. Defaults to `-"
+"g`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:648
+msgid ""
+"When `WITH_DEBUG` is set, either globally or for a list of ports, the "
+"resulting binaries are not stripped."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:651
+msgid ""
+"These variables can be specified in [.filename]#make.conf# or in the command "
+"line:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:655
+#, no-wrap
+msgid "# cd category/port && make -DWITH_DEBUG DEBUG_FLAGSS=\"-g -O0\"\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:663
+msgid ""
+"If the port is built using package:ports-mgmt/poudriere[] the debugging "
+"variables must be specified in poudriere's [.filename]#make.conf# and not in "
+"[.filename]#/etc/make.conf#. Refer to package:ports-mgmt/poudriere[] "
+"documentation for details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/testing/_index.adoc:667
+msgid ""
+"Please refer to the debugging information in the extref:{developers-handbook}"
+"tools[Developer's Handbook, debugging] for more details about the debugging "
+"tools available."
+msgstr ""
diff --git a/documentation/content/en/books/porters-handbook/upgrading/_index.adoc b/documentation/content/en/books/porters-handbook/upgrading/_index.adoc
index 14ddf24af6..6978f0577c 100644
--- a/documentation/content/en/books/porters-handbook/upgrading/_index.adoc
+++ b/documentation/content/en/books/porters-handbook/upgrading/_index.adoc
@@ -6,7 +6,7 @@ description: Upgrading a FreeBSD Port
tags: ["upgrading", "port", "git"]
showBookMenu: true
weight: 11
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/upgrading/"
---
[[port-upgrading]]
@@ -51,7 +51,7 @@ When a port is not the most recent version available from the authors, update th
The port might have already been updated to the new version.
When working with more than a few ports, it will probably be easier to use Git to keep the whole ports collection up-to-date,
-as described in the extref:{handbook}[Handbook, ports-using].
+as described in extref:{handbook}ports[Using the Ports Collection, ports-using].
This will have the added benefit of tracking all the port's dependencies.
The next step is to see if there is an update already pending.
@@ -92,7 +92,7 @@ FreeBSD has over 4000 ports without maintainers, and this is an area where more
(For a detailed description of the responsibilities of maintainers, refer to the section in the extref:{developers-handbook}[Developer's Handbook, POLICIES-MAINTAINER].)
To submit the diff, use the https://bugs.freebsd.org/submit/[bug submit form] (product `Ports & Packages`, component `Individual Port(s)`).
-Always include the category with the port name, followed by colon, and brief descripton of the issue.
+Always include the category with the port name, followed by colon, and brief description of the issue.
Examples: `_category/portname_: _add FOO option_`; `_category/portname_: _Update to X.Y_`.
Please mention any added or deleted files in the message, as they have to be explicitly specified to man:git[1] when doing a commit.
Do not compress or encode the diff.
@@ -149,6 +149,8 @@ If adding, moving, or removing a file, use `git` to track these changes:
Make sure to check the port using the checklist in crossref:quick-porting[porting-testing,Testing the Port] and crossref:quick-porting[porting-portlint,Checking the Port with `portlint`].
+Also, update the checksum reference in distinfo with `make makesum`.
+
Before making the patch, fetch the latest repository and rebase the changes on top of it.
Watch and follow the output carefully.
If any of the files failed to rebase, it means that the upstream files changed while you were editing the same file, and the conflicts need to be resolved manually.
diff --git a/documentation/content/en/books/porters-handbook/upgrading/_index.po b/documentation/content/en/books/porters-handbook/upgrading/_index.po
new file mode 100644
index 0000000000..263f1a4291
--- /dev/null
+++ b/documentation/content/en/books/porters-handbook/upgrading/_index.po
@@ -0,0 +1,513 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-09-09 18:12-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:1
+#, no-wrap
+msgid "Upgrading a FreeBSD Port"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:1
+#, no-wrap
+msgid "Chapter 11. Upgrading a Port"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:13
+#, no-wrap
+msgid "Upgrading a Port"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:52
+msgid ""
+"When a port is not the most recent version available from the authors, "
+"update the local working copy of [.filename]#/usr/ports#. The port might "
+"have already been updated to the new version."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:56
+msgid ""
+"When working with more than a few ports, it will probably be easier to use "
+"Git to keep the whole ports collection up-to-date, as described in extref:"
+"{handbook}ports[Using the Ports Collection, ports-using]. This will have "
+"the added benefit of tracking all the port's dependencies."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:61
+msgid ""
+"The next step is to see if there is an update already pending. To do this, "
+"there are two options. There is a searchable interface to the https://bugs."
+"freebsd.org/search/[FreeBSD Problem Report (PR) or bug database]. Select "
+"`Ports & Packages` in the `Product` multiple select menu, and enter the name "
+"of the port in the `Summary` field."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:65
+msgid ""
+"If there is no pending PR, the next step is to send an email to the port's "
+"maintainer, as shown by `make maintainer`. That person may already be "
+"working on an upgrade, or have a reason to not upgrade the port right now "
+"(because of, for example, stability problems of the new version), and there "
+"is no need to duplicate their work. Note that unmaintained ports are listed "
+"with a maintainer of `ports@FreeBSD.org`, which is just the general ports "
+"mailing list, so sending mail there probably will not help in this case."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:67
+msgid ""
+"If the maintainer asks you to do the upgrade or there is no maintainer, then "
+"help out FreeBSD by preparing the update! Please do this by using the man:"
+"diff[1] command in the base system."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:69
+msgid ""
+"To create a suitable `diff` for a single patch, copy the file that needs "
+"patching to [.filename]#something.orig#, save the changes to [."
+"filename]#something# and then create the patch:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:73
+#, no-wrap
+msgid "% diff -u something.orig something > something.diff\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:80
+msgid ""
+"Otherwise, either use the `git diff` method (<<git-diff>>) or copy the "
+"contents of the port to an entire different directory and use the result of "
+"the recursive man:diff[1] output of the new and old ports directories (for "
+"example, if the modified port directory is called [.filename]#superedit# and "
+"the original is in our tree as [.filename]#superedit.bak#, then save the "
+"result of `diff -ruN superedit.bak superedit`). Either unified or context "
+"diff is fine, but port committers generally prefer unified diffs. Note the "
+"use of the `-N` option-this is the accepted way to force diff to properly "
+"deal with the case of new files being added or old files being deleted. "
+"Before sending us the diff, please examine the output to make sure all the "
+"changes make sense. (In particular, make sure to first clean out the work "
+"directories with `make clean`)."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:84
+msgid ""
+"If some files have been added, copied, moved, or removed, add this "
+"information to the problem report so that the committer picking up the patch "
+"will know what man:git[1] commands to run."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:89
+msgid ""
+"To simplify common operations with patch files, use `make makepatch` as "
+"described in crossref:slow-porting[slow-patch,Patching]. Other tools "
+"exists, like [.filename]#/usr/ports/Tools/scripts/patchtool.py#. Before "
+"using it, please read [.filename]#/usr/ports/Tools/scripts/README.patchtool#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:93
+msgid ""
+"If the port is unmaintained, and you are actively using it, please consider "
+"volunteering to become its maintainer. FreeBSD has over 4000 ports without "
+"maintainers, and this is an area where more volunteers are always needed. "
+"(For a detailed description of the responsibilities of maintainers, refer to "
+"the section in the extref:{developers-handbook}[Developer's Handbook, "
+"POLICIES-MAINTAINER].)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:99
+msgid ""
+"To submit the diff, use the https://bugs.freebsd.org/submit/[bug submit "
+"form] (product `Ports & Packages`, component `Individual Port(s)`). Always "
+"include the category with the port name, followed by colon, and brief "
+"description of the issue. Examples: `_category/portname_: _add FOO "
+"option_`; `_category/portname_: _Update to X.Y_`. Please mention any added "
+"or deleted files in the message, as they have to be explicitly specified to "
+"man:git[1] when doing a commit. Do not compress or encode the diff."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:102
+msgid ""
+"Before submitting the bug, review the extref:{problem-reports}[Writing the "
+"problem report, pr-writing] section in the Problem Reports article. It "
+"contains far more information about how to write useful problem reports."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:108
+msgid ""
+"If the upgrade is motivated by security concerns or a serious fault in the "
+"currently committed port, please notify the {portmgr} to request immediate "
+"rebuilding and redistribution of the port's package. Unsuspecting users of "
+"`pkg` will otherwise continue to install the old version via `pkg install` "
+"for several weeks."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:115
+msgid ""
+"Please use man:diff[1] or `git diff` to create updates to existing ports. "
+"Other formats include the whole file and make it impossible to see just what "
+"has changed. When diffs are not included, the entire update might be "
+"ignored."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:118
+msgid ""
+"Now that all of that is done, read about how to keep up-to-date in crossref:"
+"keeping-up[keeping-up,Keeping Up]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:120
+#, no-wrap
+msgid "Using Git to Make Patches"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:129
+msgid ""
+"When possible, please submit a man:git[1] patch or diff. They are easier to "
+"handle than diffs between \"new and old\" directories. It is easier to see "
+"what has changed, and to update the diff if something was modified in the "
+"Ports Collection since the work on it began, or if the committer asks for "
+"something to be fixed. Also, a patch generated with man:git-format-patch[1] "
+"or man:git-diff[1] can be easily applied with man:git-am[1] or man:git-"
+"apply[1] and will save some time for the committer. Finally, the git patch "
+"generated by man:git-format-patch[1] includes your author information and "
+"commit messages. These will be recorded in the log of the repository and "
+"this is the recommended way to submit your changes."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:134
+#, no-wrap
+msgid ""
+"% git clone https://git.FreeBSD.org/ports.git ~/my_wrkdir <.> <.>\n"
+"% cd ~/my_wrkdir\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:137
+msgid ""
+"This can be anywhere, of course. Building ports is not limited to within [."
+"filename]#/usr/ports/#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:139
+msgid ""
+"https://git.FreeBSD.org/[git.FreeBSD.org] is the FreeBSD public Git server. "
+"See extref:{handbook}mirrors[FreeBSD Git Repository URL Table, git-url-"
+"table] for more information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:142
+msgid ""
+"While in the port directory, make any changes that are needed. If adding, "
+"moving, or removing a file, use `git` to track these changes:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:148
+#, no-wrap
+msgid ""
+"% git add new_file\n"
+"% git mv old_name new_name\n"
+"% git rm deleted_file\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:151
+msgid ""
+"Make sure to check the port using the checklist in crossref:quick-"
+"porting[porting-testing,Testing the Port] and crossref:quick-porting[porting-"
+"portlint,Checking the Port with `portlint`]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:153
+msgid "Also, update the checksum reference in distinfo with `make makesum`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:157
+msgid ""
+"Before making the patch, fetch the latest repository and rebase the changes "
+"on top of it. Watch and follow the output carefully. If any of the files "
+"failed to rebase, it means that the upstream files changed while you were "
+"editing the same file, and the conflicts need to be resolved manually."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:162
+#, no-wrap
+msgid ""
+"% git fetch origin main\n"
+"% git rebase origin/main\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:165
+msgid "Check the changes staged for the patch:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:170
+#, no-wrap
+msgid ""
+"% git status\n"
+"% git diff --staged\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:173
+msgid "The last step is to make an unified diff or patch of the changes:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:175
+msgid "To generate a patch with man:git-format-patch[1]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:180
+#, no-wrap
+msgid ""
+"% git checkout -b my_branch\n"
+"% git commit\n"
+"% git format-patch main\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:186
+msgid ""
+"This will generate a patch named like `0001-foo.patch`. This is the "
+"preferred way as it would include author identity, and it is also easier "
+"when you are making a series of changes that are not meant to be squashed "
+"together."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:188
+msgid "Alternatively, to generate an unified diff with man:git-diff[1]:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:191
+#, no-wrap
+msgid "% git diff --staged > ../`make -VPKGNAME`.diff\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:194
+msgid ""
+"This will generate a diff named like `foo-1.2.3.diff`. Where `foo` is "
+"replaced with the first line of the commit message, i.e., the subject of the "
+"commit message."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:196
+msgid ""
+"After patch has been created, you can switch to the main branch for starting "
+"other developments."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:199
+#, no-wrap
+msgid "% git checkout main\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:202
+msgid ""
+"Once the patch is accepted and merged, you can delete the local development "
+"branch if you want:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:205
+#, no-wrap
+msgid "% git branch -D my_branch\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:212
+msgid ""
+"If files have been added, moved, or removed, include the man:git[1] `add`, "
+"`mv`, and `rm` commands that were used. `git mv` must be run before the "
+"patch can be applied. `git add` or `git rm` must be run after the patch is "
+"applied."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:215
+msgid ""
+"Send the patch following the extref:{problem-reports}[problem report "
+"submission guidelines, pr-writing]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:217
+#, no-wrap
+msgid "UPDATING and MOVED"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:220
+#, no-wrap
+msgid "/usr/ports/UPDATING"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:224
+msgid ""
+"If upgrading the port requires special steps like changing configuration "
+"files or running a specific program, it must be documented in this file. "
+"The format of an entry in this file is:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:230
+#, no-wrap
+msgid ""
+"YYYYMMDD:\n"
+" AFFECTS: users of portcategory/portname\n"
+" AUTHOR: Your name <Your email address>\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:232
+#, no-wrap
+msgid " Special instructions\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:239
+msgid ""
+"When including exact portmaster, portupgrade, and/or pkg instructions, "
+"please make sure to get the shell escaping right. For example, do _not_ use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:243
+#, no-wrap
+msgid "# pkg delete -g -f docbook-xml* docbook-sk* docbook[2345]??-* docbook-4*\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:247
+msgid ""
+"As shown, the command will only work with bourne shells. Instead, use the "
+"form shown below, which will work with both bourne shell and c-shell:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:251
+#, no-wrap
+msgid "# pkg delete -g -f docbook-xml\\* docbook-sk\\* docbook\\[2345\\]\\?\\?-\\* docbook-4\\*\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:259
+msgid ""
+"It is recommended that the AFFECTS line contains a glob matching all the "
+"ports affected by the entry so that automated tools can parse it as easily "
+"as possible. If an update concerns all the existing BIND 9 versions the "
+"`AFFECTS` content must be `users of dns/bind9*`, it must _not_ be `users of "
+"BIND 9`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:262
+#, no-wrap
+msgid "/usr/ports/MOVED"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:268
+msgid ""
+"This file is used to list moved or removed ports. Each line in the file is "
+"made up of the name of the port, where the port was moved, when, and why. "
+"If the port was removed, the section detailing where it was moved can be "
+"left blank. Each section must be separated by the `|` (pipe) character, "
+"like so:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:272
+#, no-wrap
+msgid "old name|new name (blank for deleted)|date of move|reason\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:276
+msgid ""
+"The date must be entered in the form `YYYY-MM-DD`. New entries are added to "
+"the end of the list to keep it in chronological order, with the oldest entry "
+"at the top of the list."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:278
+msgid ""
+"If a port was removed but has since been restored, delete the line in this "
+"file that states that it was removed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:280
+msgid ""
+"If a port was renamed and then renamed back to its original name, add a new "
+"one with the intermediate name to the old name, and remove the old entry as "
+"to not create a loop."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:284
+msgid "Any changes must be validated with `Tools/scripts/MOVEDlint.awk`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:286
+msgid "If using a ports directory other than [.filename]#/usr/ports#, use:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/upgrading/_index.adoc:291
+#, no-wrap
+msgid ""
+"% cd /home/user/ports\n"
+"% env PORTSDIR=$PWD Tools/scripts/MOVEDlint.awk\n"
+msgstr ""
diff --git a/documentation/content/en/books/porters-handbook/uses/_index.adoc b/documentation/content/en/books/porters-handbook/uses/_index.adoc
index 959bbb2c7f..c571a7d15a 100644
--- a/documentation/content/en/books/porters-handbook/uses/_index.adoc
+++ b/documentation/content/en/books/porters-handbook/uses/_index.adoc
@@ -6,7 +6,7 @@ description: USES macros make it easy to declare requirements and settings for a
tags: ["uses", "macros", "introduction", "guide"]
showBookMenu: true
weight: 17
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/uses/"
---
[[uses]]
@@ -109,11 +109,10 @@ The `p7zip` option forces a dependency on the `7z` from package:archivers/p7zip[
[[uses-ada]]
== `ada`
-Possible arguments: (none), `5`, `6`
+Possible arguments: (none), `6`, `12`, `(run)`
Depends on an Ada-capable compiler, and sets `CC` accordingly.
-Defaults to use gcc 5 from ports.
-Use the `:_X_` version option to force building with a different version.
+Defaults to use `gcc6-aux` from ports.
[[uses-autoreconf]]
== `autoreconf`
@@ -179,6 +178,15 @@ Possible arguments: (none), `build`, `run`, `both`
Uses package:devel/bison[] By default, with no arguments or with the `build` argument, it implies `bison` is a build-time dependency, `run` implies a run-time dependency, and `both` implies both run-time and build-time dependencies.
+[[uses-budgie]]
+== `budgie`
+
+Possible arguments: (none)
+
+Provide support for the Budgie desktop environment.
+Use `USE_BUDGIE` to select the components needed for the port.
+See crossref:special[using-budgie,Using Budgie] for more information.
+
[[uses-cabal]]
== `cabal`
@@ -187,45 +195,74 @@ Uses package:devel/bison[] By default, with no arguments or with the `build` arg
Ports should not be created for Haskell libraries, see crossref:special[haskell-libs,Haskell Libraries] for more information.
====
-Possible arguments: (none), `hpack`
+Possible arguments: (none), `hpack`, `nodefault`
Sets default values and targets used to build Haskell software using Cabal.
-A build dependency on the Haskell compiler port (GHC) is added.
-If `hpack` argument is given, a build dependency on package:devel/hs-hpack[] is added and `hpack` is invoked at configuration step to generate.
-cabal file.
+A build dependency on the Haskell compiler port (package:lang/ghc[]) is added.
+If there is some other version of GHC already listed in the `BUILD_DEPENDS` variable (for example, package:lang/ghc810[]), it would be used instead.
+If the `hpack` argument is given, a build dependency on package:devel/hs-hpack[] is added and `hpack` is invoked at configuration step to
+generate .cabal file.
+If the `nodefault` argument is given, the framework will not try to pull the main distribution file from the Hackage.
+This argument is implicitly added if `USE_GITHUB` or `USE_GITLAB` is present.
The framework provides the following variables:
+`CABAL_REVISION`::
+Haskell packages hosted on Hackage may have revisions.
+Set this knob to an integer number to pull in revised package description.
+
`USE_CABAL`::
If the software uses Haskell dependencies, list them in this variable.
Each item should be present on Hackage and be listed in form `packagename-_0.1.2_`.
-Dependencies can have revisions, which are specified after the `_` symbol.
-Automatic generation of dependency list is supported, see crossref:special[using-cabal,Building Haskell Applications with `cabal`].
+Dependencies can have revisions too, which are specified after the `_` symbol.
+Automatic generation of the dependency list is supported, see crossref:special[using-cabal,Building Haskell Applications with `cabal`].
`CABAL_FLAGS`::
List of flags to be passed to `cabal-install` during the configuring and building stage.
The flags are passed verbatim.
+This variable is usually used to enable or disable flags that are declared in the .cabal file.
+Pass `foo` to enable the `foo` flag and `-foo` to disable it.
-`EXECUTABLES`::
+`CABAL_EXECUTABLES`::
List of executable files installed by the port.
Default value: `${PORTNAME}`.
+Consult the .cabal file of the project being ported to get a list of possible
+values for this variable. Each value corresponds to an `executable` stanza in the .cabal file.
Items from this list are automatically added to pkg-plist.
`SKIP_CABAL_PLIST`::
-If defined, do not add items from `${EXECUTABLES}` to pkg-plist.
+If defined, do not add items from `${CABAL_EXECUTABLES}` to pkg-plist.
`opt_USE_CABAL`::
Adds items to `${USE_CABAL}` depending on `opt` option.
-`opt_EXECUTABLES`::
-Adds items to `${EXECUTABLES}` depending on `opt` option.
+`opt_CABAL_EXECUTABLES`::
+Adds items to `${CABAL_EXECUTABLES}` depending on `opt` option.
`opt_CABAL_FLAGS`::
If `opt` is enabled, append the value to `${CABAL_FLAGS}`.
Otherwise, append `-value` to disable the flag.
+Note that this behavior is slightly different from the plain `CABAL_FLAGS` as it does not accept values starting with `-`.
+
+`CABAL_WRAPPER_SCRIPTS`::
+A subset of `${CABAL_EXECUTABLES}` containing Haskell programs to be wrapped into a shell script
+that sets `*_datadir` environment variables before running the program.
+This also causes the actual Haskell binary to be installed under `libexec/cabal/` directory.
+This knob is needed for Haskell programs that install their data files under `share/` directory.
`FOO_DATADIR_VARS`::
-For an executable named `FOO` list Haskell packages, whose data files should be accessible by the executable.
+List of extra Haskell packages, whose data files should be accessible by the executable named `FOO`.
+The executable should be a part of `${CABAL_WRAPPER_SCRIPTS}`.
+Haskell packages listed there should not have a version suffix.
+
+`CABAL_PROJECT`::
+Some Haskell projects may already have a `cabal.project` file, which is also generated by the ports framework.
+If that is the case, use this variable to specify what to do with the original `cabal.project`.
+Setting this variable to `remove` will cause the original file to be removed.
+Setting this variable to `append` will:
+. Move the original file to `cabal.project.${PORTNAME}` during the `extract` stage.
+. Concatenate the original `cabal.project.${PORTNAME}` and the generated `cabal.project` into a single file after the `patch` stage.
+Using `append` makes it possible to perform patching on the original file before it gets merged.
[[uses-cargo]]
== `cargo`
@@ -293,11 +330,11 @@ After including [.filename]#bsd.port.pre.mk# the port can inspect the results us
Possible arguments: (none)
Include Common Platform Enumeration (CPE) information in package manifest as a CPE 2.3 formatted string.
-See the http://scap.nist.gov/specifications/cpe/[CPE specification] for details.
+See the https://scap.nist.gov/specifications/cpe/[CPE specification] for details.
To add CPE information to a port, follow these steps:
[.procedure]
-. Search for the official CPE entry for the software product either by using the NVD's http://web.nvd.nist.gov/view/cpe/search[CPE search engine] or in the http://static.nvd.nist.gov/feeds/xml/cpe/dictionary/official-cpe-dictionary_v2.3.xml[official CPE dictionary] (warning, very large XML file). _Do not ever make up CPE data._
+. Search for the official CPE entry for the software product either by using the NVD's https://web.nvd.nist.gov/view/cpe/search[CPE search engine] or in the https://nvd.nist.gov/feeds/xml/cpe/dictionary/official-cpe-dictionary_v2.3.xml.gz[official CPE dictionary] (warning, very large XML file). _Do not ever make up CPE data._
. Add `cpe` to `USES` and compare the result of `make -V CPE_STR` to the CPE dictionary entry. Continue one step at a time until `make -V CPE_STR` is correct.
. If the product name (second field, defaults to `PORTNAME`) is incorrect, define `CPE_PRODUCT`.
. If the vendor name (first field, defaults to `CPE_PRODUCT`) is incorrect, define `CPE_VENDOR`.
@@ -324,6 +361,8 @@ Possible arguments: (none)
Uses update-desktop-database from package:devel/desktop-file-utils[].
An extra post-install step will be run without interfering with any post-install steps already in the port [.filename]#Makefile#.
A line with <<plist-keywords-desktop-file-utils,`@desktop-file-utils`>> will be added to the plist.
+Only use this macro if the port provides a `.desktop` file which contains a
+`MimeType` entry.
[[uses-desthack]]
== `desthack`
@@ -363,9 +402,23 @@ Possible arguments: `7`, `module`, `theme`
Automate installation of a port that is a Drupal theme or module.
Use with the version of Drupal that the port is expecting.
-For example, `USES=drupal:7,module` says that this port creates a Drupal 6 module.
+For example, `USES=drupal:7,module` says that this port creates a Drupal 7 module.
A Drupal 7 theme can be specified with `USES=drupal:7,theme`.
+[[uses-ebur128]]
+== `ebur128`
+
+Possible arguments: (none), `build`, `lib`, `run`, `test`
+
+Adds a dependency on package:audio/ebur128[].
+It allows to transparently depend on the `rust` or `legacy` variants by using
+`DEFAULT_VERSIONS` in [.filename]#make.conf#.
+For instance, to use the legacy version, use `DEFAULT_VERSIONS+=ebur128=legacy`
+
+When no arguments are used, the behavior is the same as if the `lib` argument
+was provided.
+The rest of the arguments provide the corresponding category of dependency.
+
[[uses-eigen]]
== `eigen`
@@ -396,6 +449,29 @@ ELF_FEATURES= featurelist:path/to/file1 \
The format of `featurelist` is described in man:elfctl[1]. The file paths are relative to ${BUILD_WRKSRC}.
+[[uses-erlang]]
+== `erlang`
+
+Possible arguments: (none), `enc`, `rebar`, `rebar3`
+
+Adds a build and run time dependency on package:lang/erlang[].
+Depending on the argument, it adds additional build dependencies. `enc` adds a
+dependency on package:devel/erlang-native-compiler[], `rebar` adds a dependency on
+package:devel/rebar[] and `rebar3` adds a dependency on package:devel/rebar3[].
+
+In addition, the following variables are available to the port:
+
+* `ERL_APP_NAME`: Erlang app name as installed in Erlang's lib dir (minus version)
+* `ERL_APP_ROOT`: Root directory for this Erlang app
+* `REBAR_CMD`: Path to the "rebar" command
+* `REBAR3_CMD`: Path to the "rebar3" command
+* `REBAR_PROFILE`: Rebar profile
+* `REBAR_TARGETS`: Rebar target list (usually compile, maybe escriptize)
+* `ERL_BUILD_NAME`: Build name for rebar3
+* `ERL_BUILD_DEPS`: List of BUILD_DEPENDS in category/portname format
+* `ERL_RUN_DEPS`: List of RUN_DEPENDS in category/portname format
+* `ERL_DOCS`: List of documentation files and directories
+
[[uses-fakeroot]]
== `fakeroot`
@@ -451,6 +527,8 @@ Possible arguments: (none), `noautoplist`
Handle building with RubyGems.
If `noautoplist` is used, the packing list is not generated automatically.
+This implies `USES=ruby`.
+
[[uses-gettext]]
== `gettext`
@@ -857,6 +935,23 @@ The available components are:
* `ximagesrc`
* `zbar`
+[[uses-guile]]
+== `guile`
+
+Possible arguments: (none), `_X.Y_`, `flavors`, `build`, `run`, `alias`, `conflicts`
+
+Adds a dependency on Guile.
+By default this is a library dependency on the appropriate `libguile*.so`, unless overridden by the `build` and/or `run` option.
+The `alias` option configures `BINARY_ALIAS` appropriately (see crossref:makefiles[binary-alias,Use `BINARY_ALIAS`]).
+
+The default version is set by the usual `DEFAULT_VERSIONS` mechanism;
+if the default version is not one of the listed versions, then the latest available listed version is used.
+
+Applications using Guile are normally built for only a single Guile version.
+However, extension or library modules should use the `flavors` option to build with multiple flavors.
+
+For more information see crossref:special[using-guile,Using Guile].
+
[[uses-horde]]
== `horde`
@@ -909,6 +1004,28 @@ Fills in the boilerplate for kernel module ports, currently:
* Handle cross-referencing kernel modules upon installation and deinstallation, using crossref:plist[plist-keywords-kld,`@kld`].
* If the `debug` argument is given, the port can install a debug version of the module into [.filename]#KERN_DEBUGDIR#/[.filename]#KMODDIR#. By default, `KERN_DEBUGDIR` is copied from `DEBUGDIR` and set to [.filename]#/usr/lib/debug#. The framework will take care of creating and removing any required directories.
+[[uses-ldap]]
+== `ldap`
+
+Possible arguments: (none), <version>, client, server
+
+Registers a dependency on package:net/openldap[].
+It uses the specific `<version>` (without the dot notation) if set.
+Otherwise it tries to find the currently installed version.
+If necessary it falls back to the default version found in `bsd.default-versions.mk`.
+`client` specifies a runtime dependency on the client library. This is also the
+default.
+`server` specifies a runtime dependency on the server.
+
+The following variables can be accessed by the port:
+
+`IGNORE_WITH_OPENLDAP`::
+This variable can be defined if the ports does not support one or more versions of OpenLDAP.
+`WITH_OPENLDAP_VER`::
+User defined variable to set OpenLDAP version.
+`OPENLDAP_VER`::
+Detected OpenLDAP version.
+
[[uses-lha]]
== `lha`
@@ -947,7 +1064,7 @@ Some ports do not ship with their own copy of libtool and need a build time depe
Possible arguments: `c6`, `c7`
Ports Linux compatibility framework.
-Specify `c6` to depend on CentOS 6 packags.
+Specify `c6` to depend on CentOS 6 packages.
Specify `c7` to depend on CentOS 7 packages. The available packages are:
* `allegro`
@@ -1023,6 +1140,30 @@ Specify `c7` to depend on CentOS 7 packages. The available packages are:
* `ucl`
* `xorglibs`
+[[uses-llvm]]
+== `llvm`
+
+Possible arguments: (none), `_XY_`, min=`_XY_`, max=`_XY_`, build, run, lib
+
+Adds a dependency on LLVM.
+By default this is a build dependency unless overridden by the `run` or `lib`
+options.
+The default version is the one set in `LLVM_DEFAULT`. A specific version can be
+specified as well. The minimum and maximum versions can be specified with the
+`min` and `max` parameters respectively.
+The ports framework export the following variables to the port:
+
+`LLVM_VERSION`::
+Version chosen from the arguments to llvm.mk
+`LLVM_PORT`::
+Chosen llvm port
+`LLVM_CONFIG`::
+llvm-config of the chosen port
+`LLVM_LIBLLVM`::
+libLLVM.so of the chosen port
+`LLVM_PREFIX`::
+Installation prefix of the chosen port
+
[[uses-localbase]]
== `localbase`
@@ -1042,13 +1183,32 @@ Adds a dependency on Lua.
By default this is a library dependency, unless overridden by the `build` and/or `run` option.
The `env` option prevents the addition of any dependency, while still defining all the usual variables.
-The default version is set by the usual `DEFAULT_VERSIONS` mechanism, unless a version or range of versions is specified as an argument, for example, `51` or `51-53`.
+The default version is set by the usual `DEFAULT_VERSIONS` mechanism, unless a version or range of versions is specified as an argument, for example, `51` or `51-54`.
Applications using Lua are normally built for only a single Lua version.
However, library modules intended to be loaded by Lua code should use the `module` option to build with multiple flavors.
For more information see crossref:special[using-lua,Using Lua].
+[[uses-luajit]]
+== `luajit`
+
+Possible arguments: (none), `_X_`
+
+Adds a dependency on luajit runtime.
+A specific version _X_ can be used. Possible versions are `luajit`, `luajit-devel`, `luajit-openresty`
+
+After including [.filename]#bsd.port.options.mk# or [.filename]#bsd.port.pre.mk# the port can inspect these variables:
+
+`LUAJIT_VER`::
+The selected luajit version
+`LUAJIT_INCDIR`::
+The path to luajit's header files
+`LUAJIT_LUAVER`::
+Which luajit spec version is selected (2.0 for luajit, else 2.1)
+
+For more information see crossref:special[using-lua,Using Lua].
+
[[uses-lxqt]]
== `lxqt`
@@ -1178,7 +1338,10 @@ The helper target, `buildnuget`, will output the content of the `NUGET_DEPENDS`
Possible arguments: (none)
Uses package:x11-toolkits/open-motif[] as a library dependency.
-End users can set `WANT_LESSTIF` for the dependency to be on package:x11-toolkits/lesstif[] instead of package:x11-toolkits/open-motif[].
+End users can set `WANT_LESSTIF` in [.filename]#make.conf# to use
+package:x11-toolkits/lesstif[] as dependency instead of package:x11-toolkits/open-motif[].
+Similarly setting `WANT_OPEN_MOTIF_DEVEL` in [.filename]#make.conf# will add a
+dependency on package:x11-toolkits/open-motif-devel[]
[[uses-ncurses]]
== `ncurses`
@@ -1187,12 +1350,24 @@ Possible arguments: (none), `base`, `port`
Uses ncurses, and causes some useful variables to be set.
+[[uses-nextcloud]]
+== `nextcloud`
+
+Possible arguments: (none)
+
+Adds support for Nextcloud applications by adding a run time dependency on package:www/nextcloud[].
+
[[uses-ninja]]
== `ninja`
-Possible arguments: (none)
+Possible arguments: (none), `build`, `make` (default), `run`
-Uses ninja to build the port.
+If `build` or `run` arguments are specify, it respectively adds a build or run
+time dependency on package:devel/ninja[].
+If `make` or no arguments are provided, use ninja to build the port instead of make.
+`make` implies `build`.
+If the variable `NINJA_DEFAULT` is set to `samurai`, then the dependencies are set
+on package:devel/samurai[] instead.
[[uses-nodejs]]
== `nodejs`
@@ -1200,7 +1375,7 @@ Uses ninja to build the port.
Possible arguments: (none), `build`, `run`, `current`, `lts`, `10`, `14`, `16`,
`17`.
-Uses nodejs. Adds a dependency on package:www/node*[]. If a supported version is
+Uses nodejs. Adds a dependency on package:www/node*[]. If a supported version is
specified then `run` and/or `build` must be specified too.
[[uses-objc]]
@@ -1210,6 +1385,14 @@ Possible arguments: (none)
Add objective C dependencies (compiler, runtime library) if the base system does not support it.
+[[uses-octave]]
+== `octave`
+
+Possible arguments: (none), env
+
+Uses package:math/octave[].
+`env` loads only one `OCTAVE_VERSION` environmental variable.
+
[[uses-openal]]
== `openal`
@@ -1288,7 +1471,7 @@ The available components are:
Possible arguments: (none), `phpize`, `ext`, `zend`, `build`, `cli`, `cgi`, `mod`, `web`, `embed`, `pecl`, `flavors`, `noflavors`
Provide support for PHP.
-Add a runtime dependency on the default PHP version, package:lang/php56[].
+Add a runtime dependency on the default PHP version, package:lang/php81[].
`phpize`::
Use to build a PHP extension.
@@ -1532,7 +1715,7 @@ Uses QMake for configuring. For more information see crossref:special[using-qmak
[[uses-qt]]
== `qt`
-Possible arguments: `5`, `no_env`
+Possible arguments: `5`, `6`, `no_env`
Add dependency on Qt components.
`no_env` is passed directly to `USES= qmake`.
@@ -1541,9 +1724,9 @@ See crossref:special[using-qt,Using Qt] for more information.
[[uses-qt-dist]]
== `qt-dist`
-Possible arguments: (none) or `5` and (none) or one of `3d`, `activeqt`, `androidextras`, `base`, `canvas3d`, `charts`, `connectivity`, `datavis3d`, `declarative`, `doc`, `gamepad`, `graphicaleffects`, `imageformats`, `location`, `macextras`, `multimedia`, `networkauth`, `purchasing`, `quickcontrols2`, `quickcontrols`, `remoteobjects`, `script`, `scxml`, `sensors`, `serialbus`, `serialport`, `speech`, `svg`, `tools`, `translations`, `virtualkeyboard`, `wayland`, `webchannel`, `webengine`, `websockets`, `webview`, `winextras`, `x11extras`, `xmlpatterns`
+Possible arguments: (none) or `5` and (none) or `6` and (none) or one of `3d`, `5compat`, `base`, `charts`, `connectivity`, `datavis3d`, `declarative`, `doc` `languageserver`, `gamepad`, `graphicaleffects`, `imageformats`, `locat ion`, `lottie`, `multimedia`, `networkauth`, `positioning`, `quick3d`, `quickcontrols2`, `quickcontrols`, `quicktimeline`, `remoteobjects`, `script`, `scxml `, `sensors`, `serialbus`, `serialport`, `shadertools`, `speech`, `svg`, `tools`, `translations`, `virtualkeyboard`, `wayland`, `webchannel`, `webengine`, `webglplugin`, `websockets`, `webview`, `x11extras`, `xmlpatterns`.
-Provides support for building Qt 5 components.
+Provides support for building Qt 5 and Qt 6 components.
It takes care of setting up the appropriate configuration environment for the port to build.
[[qt5-dist-example]]
@@ -1562,6 +1745,23 @@ USES= qt-dist:5
====
+
+[[qt6-dist-example]]
+.Building Qt 6 Components
+[example]
+====
+The port is Qt 6's `websockets` component, which is part of the `websockets` distribution file.
+
+[.programlisting]
+....
+PORTNAME= websockets
+PORTVERSION= ${QT6_VERSION}
+
+USES= qt-dist:6
+....
+
+====
+
If `PORTNAME` does not match the component name, it can be passed as an argument to `qt-dist`.
[[qt5-dist-example-explicit]]
@@ -1588,6 +1788,51 @@ Possible arguments: (none), `port`
Uses readline as a library dependency, and sets `CPPFLAGS` and `LDFLAGS` as necessary.
If the `port` argument is used or if readline is not present in the base system, add a dependency on package:devel/readline[]
+
+[[uses-ruby]]
+== `ruby`
+
+Possible arguments: (none), `build`, `extconf`, `run`, `setup`
+
+Provide support for Ruby related ports.
+`(none)` without arguments adds runtime dependency on package:lang/ruby[].
+`build` adds a dependency on package:lang/ruby[] at build time.
+`extconf` states that the port uses extconf.rb to configure.
+`run` adds a dependency on package:lang/ruby[] at run time. This is also the default.
+`setup` states that the port uses setup.rb to configure and build.
+
+The user may have the following variables defined:
+
+`RUBY_VER`::
+Alternative short version of ruby in the form of `x.y'.
+
+`RUBY_DEFAULT_VER`::
+Set to (e.g.) `2.7` to use `ruby27` as the default version.
+
+`RUBY_ARCH`::
+Set the architecture name (e.g. i386-freebsd7).
+
+The following variables are exported to be used by the port:
+
+`RUBY`::
+Set to full path of ruby.
+If set, the values of the following variables are automatically obtained from
+the ruby executable: `RUBY_ARCH`, `RUBY_ARCHLIBDIR`, `RUBY_LIBDIR`,
+`RUBY_SITEARCHLIBDIR`, `RUBY_SITELIBDIR`, `RUBY_VER` and `RUBY_VERSION`
+
+`RUBY_VER`::
+Set to the alternative short version of ruby in the form of `x.y'.
+
+`RUBY_EXTCONF`::
+Set to the alternative name of extconf.rb (default: extconf.rb).
+
+`RUBY_EXTCONF_SUBDIRS`::
+Set to list of subdirectories, if multiple modules are included.
+
+`RUBY_SETUP`::
+Set to the alternative name of setup.rb (default: setup.rb).
+
+
[[uses-samba]]
== `samba`
@@ -1861,6 +2106,53 @@ Possible arguments: (none)
Adds crossref:plist[plist-keywords-terminfo,`@terminfo`] to the [.filename]#plist#.
Use when the port installs [.filename]#*.terminfo# files in [.filename]#${PREFIX}/share/misc#.
+[[uses-tex]]
+== `tex`
+
+Possible arguments: (none)
+
+Provide support for tex.
+Loads all the default variables for TEX related ports and does not add any dependency on any ports.
+
+Variables are used to specify which TEX modules are required.
+
+`USE_TEX`::
+The list of required TEX extensions at run-time.
+Add `:build` to the extension name to add a build-time dependency, `:run` to add runtime dependency, `:test` for test time dependency, `:extract` for extract time dependency.
+Example: `base texmf:build source:run`
+
+Current possible arguments are as follows:
+
+* `base`
+* `texmf`
+* `source`
+* `docs`
+* `web2c`
+* `kpathsea`
+* `ptexenc`
+* `basic`
+* `tlmgr`
+* `texlua`
+* `texluajit`
+* `synctex`
+* `xpdfopen`
+* `dvipsk`
+* `dvipdfmx`
+* `xdvik`
+* `gbklatex`
+* `formats`
+* `tex`
+* `latex`
+* `pdftex`
+* `jadetex`
+* `luatex`
+* `ptex`
+* `xetex`
+* `xmltex`
+* `texhash`
+* `updmap`
+* `fmtutil`
+
[[uses-tk]]
== `tk`
@@ -1891,6 +2183,14 @@ These variables are available for ports:
* `UNIQUE_SUFFIX`: The suffix to be used for files. Default: `${PKGNAMESUFFIX}`.
* `UNIQUE_SUFFIX_FILES`: A list of files that need to be suffixed. Default: empty.
+[[uses-vala]]
+== `vala`
+
+Possible arguments: `build`, `lib`, `no_depend`
+
+Adds build or library dependencies on package:lang/vala[].
+The `no_depend` argument is reserved for package:lang/vala[] itself.
+
[[uses-varnish]]
== `varnish`
diff --git a/documentation/content/en/books/porters-handbook/uses/_index.po b/documentation/content/en/books/porters-handbook/uses/_index.po
new file mode 100644
index 0000000000..c7618a006d
--- /dev/null
+++ b/documentation/content/en/books/porters-handbook/uses/_index.po
@@ -0,0 +1,6575 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:34-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1
+#, no-wrap
+msgid "USES macros make it easy to declare requirements and settings for a FreeBSD Port"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1
+#, no-wrap
+msgid "Chapter 17. Using USES Macros"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:13
+#, no-wrap
+msgid "Using `USES` Macros"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:51
+#, no-wrap
+msgid "An Introduction to `USES`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:55
+msgid ""
+"`USES` macros make it easy to declare requirements and settings for a port. "
+"They can add dependencies, change building behavior, add metadata to "
+"packages, and so on, all by selecting simple, preset values."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:59
+msgid ""
+"Each section in this chapter describes a possible value for `USES`, along "
+"with its possible arguments. Arguments are appended to the value after a "
+"colon (`:`). Multiple arguments are separated by commas (`,`)."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:61
+#, no-wrap
+msgid "Using Multiple Values"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:67
+#, no-wrap
+msgid "USES=\tbison perl\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:71
+#, no-wrap
+msgid "Adding an Argument"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:77
+#, no-wrap
+msgid "USES=\ttar:xz\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:81
+#, no-wrap
+msgid "Adding Multiple Arguments"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:87
+#, no-wrap
+msgid "USES=\tdrupal:7,theme\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:91
+#, no-wrap
+msgid "Mixing it All Together"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:97
+#, no-wrap
+msgid "USES=\tpgsql:9.3+ cpe python:2.7,build\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:101
+#, no-wrap
+msgid "`7z`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:104
+msgid "Possible arguments: (none), `p7zip`, `partial`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:108
+msgid ""
+"Extract using man:7z[1] instead of man:bsdtar[1] and sets "
+"`EXTRACT_SUFX=.7z`. The `p7zip` option forces a dependency on the `7z` from "
+"package:archivers/p7zip[] if the one from the base system is not able to "
+"extract the files. `EXTRACT_SUFX` is not changed if the `partial` option is "
+"used, this can be used if the main distribution file does not have a [."
+"filename]#.7z# extension."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:110
+#, no-wrap
+msgid "`ada`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:113
+msgid "Possible arguments: (none), `6`, `12`, `(run)`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:116
+msgid ""
+"Depends on an Ada-capable compiler, and sets `CC` accordingly. Defaults to "
+"use `gcc6-aux` from ports."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:118
+#, no-wrap
+msgid "`autoreconf`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:121
+msgid "Possible arguments: (none), `build`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:128
+msgid ""
+"Runs `autoreconf`. It encapsulates the `aclocal`, `autoconf`, `autoheader`, "
+"`automake`, `autopoint`, and `libtoolize` commands. Each command applies to "
+"[.filename]#${AUTORECONF_WRKSRC}/configure.ac# or its old name, [."
+"filename]#${AUTORECONF_WRKSRC}/configure.in#. If [.filename]#configure.ac# "
+"defines subdirectories with their own [.filename]#configure.ac# using "
+"`AC_CONFIG_SUBDIRS`, `autoreconf` will recursively update those as well. "
+"The `:build` argument only adds build time dependencies on those tools but "
+"does not run `autoreconf`. A port can set `AUTORECONF_WRKSRC` if `WRKSRC` "
+"does not contain the path to [.filename]#configure.ac#."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:130
+#, no-wrap
+msgid "`blaslapack`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:133
+msgid ""
+"Possible arguments: (none), `atlas`, `netlib` (default), `gotoblas`, "
+"`openblas`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:135
+msgid "Adds dependencies on Blas / Lapack libraries."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:137
+#, no-wrap
+msgid "`bdb`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:140
+msgid "Possible arguments: (none), `48`, `5` (default), `6`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:147
+msgid ""
+"Add dependency on the Berkeley DB library. Default to package:databases/"
+"db5[]. It can also depend on package:databases/db48[] when using the `:48` "
+"argument or package:databases/db6[] with `:6`. It is possible to declare a "
+"range of acceptable values, `:48+` finds the highest installed version, and "
+"falls back to 4.8 if nothing else is installed. `INVALID_BDB_VER` can be "
+"used to specify versions which do not work with this port. The framework "
+"exposes the following variables to the port:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:148
+#, no-wrap
+msgid "`BDB_LIB_NAME`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:151
+msgid ""
+"The name of the Berkeley DB library. For example, when using package:"
+"databases/db5[], it contains `db-5.3`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:152
+#, no-wrap
+msgid "`BDB_LIB_CXX_NAME`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:155
+msgid ""
+"The name of the Berkeley DBC++ library. For example, when using package:"
+"databases/db5[], it contains `db_cxx-5.3`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:156
+#, no-wrap
+msgid "`BDB_INCLUDE_DIR`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:159
+msgid ""
+"The location of the Berkeley DB include directory. For example, when using "
+"package:databases/db5[], it will contain `${LOCALBASE}/include/db5`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:160
+#, no-wrap
+msgid "`BDB_LIB_DIR`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:163
+msgid ""
+"The location of the Berkeley DB library directory. For example, when using "
+"package:databases/db5[], it contains `${LOCALBASE}/lib`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:164
+#, no-wrap
+msgid "`BDB_VER`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:167
+msgid ""
+"The detected Berkeley DB version. For example, if using `USES=bdb:48+` and "
+"Berkeley DB 5 is installed, it contains `5`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:172
+msgid ""
+"package:databases/db48[] is deprecated and unsupported. It must not be used "
+"by any port."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:175
+#, no-wrap
+msgid "`bison`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:178
+msgid "Possible arguments: (none), `build`, `run`, `both`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:180
+msgid ""
+"Uses package:devel/bison[] By default, with no arguments or with the `build` "
+"argument, it implies `bison` is a build-time dependency, `run` implies a run-"
+"time dependency, and `both` implies both run-time and build-time "
+"dependencies."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:182
+#, no-wrap
+msgid "`budgie`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:185
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:271
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:280
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:331
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:360
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:369
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:385
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:431
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:477
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:534
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:570
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:603
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:610
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:764
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:835
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:957
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1031
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1038
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1046
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1214
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1233
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1240
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1247
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1286
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1294
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1337
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1355
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1383
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1408
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1430
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1857
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1865
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1874
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2103
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2111
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2166
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2235
+msgid "Possible arguments: (none)"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:189
+msgid ""
+"Provide support for the Budgie desktop environment. Use `USE_BUDGIE` to "
+"select the components needed for the port. See crossref:special[using-"
+"budgie,Using Budgie] for more information."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:191
+#, no-wrap
+msgid "`cabal`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:196
+msgid ""
+"Ports should not be created for Haskell libraries, see crossref:"
+"special[haskell-libs,Haskell Libraries] for more information."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:199
+msgid "Possible arguments: (none), `hpack`, `nodefault`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:207
+msgid ""
+"Sets default values and targets used to build Haskell software using Cabal. "
+"A build dependency on the Haskell compiler port (package:lang/ghc[]) is "
+"added. If there is some other version of GHC already listed in the "
+"`BUILD_DEPENDS` variable (for example, package:lang/ghc810[]), it would be "
+"used instead. If the `hpack` argument is given, a build dependency on "
+"package:devel/hs-hpack[] is added and `hpack` is invoked at configuration "
+"step to generate .cabal file. If the `nodefault` argument is given, the "
+"framework will not try to pull the main distribution file from the Hackage. "
+"This argument is implicitly added if `USE_GITHUB` or `USE_GITLAB` is present."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:209
+msgid "The framework provides the following variables:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:210
+#, no-wrap
+msgid "`CABAL_REVISION`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:213
+msgid ""
+"Haskell packages hosted on Hackage may have revisions. Set this knob to an "
+"integer number to pull in revised package description."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:214
+#, no-wrap
+msgid "`USE_CABAL`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:219
+msgid ""
+"If the software uses Haskell dependencies, list them in this variable. Each "
+"item should be present on Hackage and be listed in form `packagename-"
+"_0.1.2_`. Dependencies can have revisions too, which are specified after "
+"the `_` symbol. Automatic generation of the dependency list is supported, "
+"see crossref:special[using-cabal,Building Haskell Applications with `cabal`]."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:220
+#, no-wrap
+msgid "`CABAL_FLAGS`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:225
+msgid ""
+"List of flags to be passed to `cabal-install` during the configuring and "
+"building stage. The flags are passed verbatim. This variable is usually "
+"used to enable or disable flags that are declared in the .cabal file. Pass "
+"`foo` to enable the `foo` flag and `-foo` to disable it."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:226
+#, no-wrap
+msgid "`CABAL_EXECUTABLES`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:232
+msgid ""
+"List of executable files installed by the port. Default value: `${PORTNAME}"
+"`. Consult the .cabal file of the project being ported to get a list of "
+"possible values for this variable. Each value corresponds to an `executable` "
+"stanza in the .cabal file. Items from this list are automatically added to "
+"pkg-plist."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:233
+#, no-wrap
+msgid "`SKIP_CABAL_PLIST`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:235
+msgid "If defined, do not add items from `${CABAL_EXECUTABLES}` to pkg-plist."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:236
+#, no-wrap
+msgid "`opt_USE_CABAL`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:238
+msgid "Adds items to `${USE_CABAL}` depending on `opt` option."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:239
+#, no-wrap
+msgid "`opt_CABAL_EXECUTABLES`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:241
+msgid "Adds items to `${CABAL_EXECUTABLES}` depending on `opt` option."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:242
+#, no-wrap
+msgid "`opt_CABAL_FLAGS`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:246
+msgid ""
+"If `opt` is enabled, append the value to `${CABAL_FLAGS}`. Otherwise, "
+"append `-value` to disable the flag. Note that this behavior is slightly "
+"different from the plain `CABAL_FLAGS` as it does not accept values starting "
+"with `-`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:247
+#, no-wrap
+msgid "`CABAL_WRAPPER_SCRIPTS`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:252
+msgid ""
+"A subset of `${CABAL_EXECUTABLES}` containing Haskell programs to be wrapped "
+"into a shell script that sets `*_datadir` environment variables before "
+"running the program. This also causes the actual Haskell binary to be "
+"installed under `libexec/cabal/` directory. This knob is needed for Haskell "
+"programs that install their data files under `share/` directory."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:253
+#, no-wrap
+msgid "`FOO_DATADIR_VARS`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:257
+msgid ""
+"List of extra Haskell packages, whose data files should be accessible by the "
+"executable named `FOO`. The executable should be a part of "
+"`${CABAL_WRAPPER_SCRIPTS}`. Haskell packages listed there should not have a "
+"version suffix."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:258
+#, no-wrap
+msgid "`CABAL_PROJECT`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:263
+msgid ""
+"Some Haskell projects may already have a `cabal.project` file, which is also "
+"generated by the ports framework. If that is the case, use this variable to "
+"specify what to do with the original `cabal.project`. Setting this variable "
+"to `remove` will cause the original file to be removed. Setting this "
+"variable to `append` will:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:264
+msgid ""
+"Move the original file to `cabal.project.${PORTNAME}` during the `extract` "
+"stage."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:266
+msgid ""
+"Concatenate the original `cabal.project.${PORTNAME}` and the generated "
+"`cabal.project` into a single file after the `patch` stage. Using `append` "
+"makes it possible to perform patching on the original file before it gets "
+"merged."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:268
+#, no-wrap
+msgid "`cargo`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:275
+msgid ""
+"Uses Cargo for configuring, building, and testing. It can be used to port "
+"Rust applications that use the Cargo build system. For more information see "
+"crossref:special[using-cargo,Building Rust Applications with `cargo`]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:277
+#, no-wrap
+msgid "`charsetfix`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:284
+msgid ""
+"Prevents the port from installing [.filename]#charset.alias#. This must be "
+"installed only by package:converters/libiconv[]. `CHARSETFIX_MAKEFILEIN` "
+"can be set to a path relative to `WRKSRC` if [.filename]#charset.alias# is "
+"not installed by [.filename]#${WRKSRC}/Makefile.in#."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:286
+#, no-wrap
+msgid "`cmake`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:289
+msgid "Possible arguments: (none), `insource`, `noninja`, `run`, `testing`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:291
+msgid "Use CMake for configuring the port and generating a build system."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:295
+msgid ""
+"By default an out-of-source build is performed, leaving the sources in "
+"`WRKSRC` free from build artifacts. With the `insource` argument, an in-"
+"source build will be performed instead. This argument should be an "
+"exception, used only when a regular out-of-source build does not work."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:300
+msgid ""
+"By default Ninja (package:devel/ninja[]) is used for the build. In some "
+"cases this does not work correctly. With the `noninja` argument, the build "
+"will use regular `make` for builds. This argument should only be used if a "
+"Ninja-based build does not work."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:302
+msgid ""
+"With the `run` argument, a run dependency is registered in addition to a "
+"build dependency."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:305
+msgid ""
+"With the `testing` argument, a test-target is added that uses CTest. When "
+"running tests the port will be re-configured for testing and re-built."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:307
+msgid "For more information see crossref:special[using-cmake,Using `cmake`]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:309
+#, no-wrap
+msgid "`compiler`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:312
+msgid ""
+"Possible arguments: (none), `env` (default, implicit), `{cpp}17-lang`, `{cpp}"
+"14-lang`, `{cpp}11-lang`, `gcc-{cpp}11-lib`, `{cpp}11-lib`, `{cpp}0x`, "
+"`c11`, `nestedfct`, `features`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:316
+msgid ""
+"Determines which compiler to use based on any given wishes. Use `{cpp}17-"
+"lang` if the port needs a {cpp}17-capable compiler, `{cpp}14-lang` if the "
+"port needs a {cpp}14-capable compiler, `{cpp}11-lang` if the port needs a "
+"{cpp}11-capable compiler, `gcc-{cpp}11-lib` if the port needs the `g++` "
+"compiler with a {cpp}11 library, or `{cpp}11-lib` if the port needs a {cpp}"
+"11-ready standard library. If the port needs a compiler understanding {cpp}"
+"0X, C11 or nested functions, the corresponding parameters should be used."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:319
+msgid ""
+"Use `features` to request a list of features supported by the default "
+"compiler. After including [.filename]#bsd.port.pre.mk# the port can inspect "
+"the results using these variables:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:321
+msgid ""
+"`COMPILER_TYPE`: the default compiler on the system, either gcc or clang"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:322
+msgid ""
+"`ALT_COMPILER_TYPE`: the alternative compiler on the system, either gcc or "
+"clang. Only set if two compilers are present in the base system."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:323
+msgid ""
+"`COMPILER_VERSION`: the first two digits of the version of the default "
+"compiler."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:324
+msgid ""
+"`ALT_COMPILER_VERSION`: the first two digits of the version of the "
+"alternative compiler, if present."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:325
+msgid "`CHOSEN_COMPILER_TYPE`: the chosen compiler, either gcc or clang"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:326
+msgid ""
+"`COMPILER_FEATURES`: the features supported by the default compiler. It "
+"currently lists the {cpp} library."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:328
+#, no-wrap
+msgid "`cpe`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:335
+msgid ""
+"Include Common Platform Enumeration (CPE) information in package manifest as "
+"a CPE 2.3 formatted string. See the https://scap.nist.gov/specifications/"
+"cpe/[CPE specification] for details. To add CPE information to a port, "
+"follow these steps:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:338
+msgid ""
+"Search for the official CPE entry for the software product either by using "
+"the NVD's https://web.nvd.nist.gov/view/cpe/search[CPE search engine] or in "
+"the https://nvd.nist.gov/feeds/xml/cpe/dictionary/official-cpe-"
+"dictionary_v2.3.xml.gz[official CPE dictionary] (warning, very large XML "
+"file). _Do not ever make up CPE data._"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:339
+msgid ""
+"Add `cpe` to `USES` and compare the result of `make -V CPE_STR` to the CPE "
+"dictionary entry. Continue one step at a time until `make -V CPE_STR` is "
+"correct."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:340
+msgid ""
+"If the product name (second field, defaults to `PORTNAME`) is incorrect, "
+"define `CPE_PRODUCT`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:341
+msgid ""
+"If the vendor name (first field, defaults to `CPE_PRODUCT`) is incorrect, "
+"define `CPE_VENDOR`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:342
+msgid ""
+"If the version field (third field, defaults to `PORTVERSION`) is incorrect, "
+"define `CPE_VERSION`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:343
+msgid ""
+"If the update field (fourth field, defaults to empty) is incorrect, define "
+"`CPE_UPDATE`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:344
+msgid ""
+"If it is still not correct, check [.filename]#Mk/Uses/cpe.mk# for additional "
+"details, or contact the {ports-secteam}."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:345
+msgid ""
+"Derive as much as possible of the CPE name from existing variables such as "
+"`PORTNAME` and `PORTVERSION`. Use variable modifiers to extract the relevant "
+"portions from these variables rather than hardcoding the name."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:346
+msgid ""
+"_Always_ run `make -V CPE_STR` and check the output before committing "
+"anything that changes `PORTNAME` or `PORTVERSION` or any other variable "
+"which is used to derive `CPE_STR`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:348
+#, no-wrap
+msgid "`cran`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:351
+msgid "Possible arguments: (none), `auto-plist`, `compiles`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:355
+msgid ""
+"Uses the Comprehensive R Archive Network. Specify `auto-plist` to "
+"automatically generate [.filename]#pkg-plist#. Specify `compiles` if the "
+"port has code that need to be compiled."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:357
+#, no-wrap
+msgid "`desktop-file-utils`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:364
+msgid ""
+"Uses update-desktop-database from package:devel/desktop-file-utils[]. An "
+"extra post-install step will be run without interfering with any post-"
+"install steps already in the port [.filename]#Makefile#. A line with "
+"<<plist-keywords-desktop-file-utils,`@desktop-file-utils`>> will be added to "
+"the plist."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:366
+#, no-wrap
+msgid "`desthack`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:371
+msgid ""
+"Changes the behavior of GNU configure to properly support `DESTDIR` in case "
+"the original software does not."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:373
+#, no-wrap
+msgid "`display`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:376
+msgid "Possible arguments: (none), _ARGS_"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:380
+msgid ""
+"Set up a virtual display environment. If the environment variable `DISPLAY` "
+"is not set, then Xvfb is added as a build dependency, and `CONFIGURE_ENV` is "
+"extended with the port number of the currently running instance of Xvfb. "
+"The _ARGS_ parameter defaults to `install` and controls the phase around "
+"which to start and stop the virtual display."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:382
+#, no-wrap
+msgid "`dos2unix`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:390
+msgid ""
+"The port has files with line endings in DOS format which need to be "
+"converted. Several variables can be set to control which files will be "
+"converted. The default is to convert _all_ files, including binaries. See "
+"crossref:slow-porting[slow-patch-automatic-replacements,Simple Automatic "
+"Replacements] for examples."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:392
+msgid "`DOS2UNIX_REGEX`: match file names based on a regular expression."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:393
+msgid "`DOS2UNIX_FILES`: match literal file names."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:394
+msgid "`DOS2UNIX_GLOB`: match file names based on a glob pattern."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:395
+msgid ""
+"`DOS2UNIX_WRKSRC`: the directory from which to start the conversions. "
+"Defaults to `${WRKSRC}`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:397
+#, no-wrap
+msgid "`drupal`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:400
+msgid "Possible arguments: `7`, `module`, `theme`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:405
+msgid ""
+"Automate installation of a port that is a Drupal theme or module. Use with "
+"the version of Drupal that the port is expecting. For example, "
+"`USES=drupal:7,module` says that this port creates a Drupal 7 module. A "
+"Drupal 7 theme can be specified with `USES=drupal:7,theme`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:407
+#, no-wrap
+msgid "`ebur128`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:410
+msgid "Possible arguments: (none), `build`, `lib`, `run`, `test`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:415
+msgid ""
+"Adds a dependency on package:audio/ebur128[]. It allows to transparently "
+"depend on the `rust` or `legacy` variants by using `DEFAULT_VERSIONS` in [."
+"filename]#make.conf#. For instance, to use the legacy version, use "
+"`DEFAULT_VERSIONS+=ebur128=legacy`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:419
+msgid ""
+"When no arguments are used, the behavior is the same as if the `lib` "
+"argument was provided. The rest of the arguments provide the corresponding "
+"category of dependency."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:421
+#, no-wrap
+msgid "`eigen`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:424
+msgid "Possible arguments: 2, 3, build (default), run"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:426
+msgid "Add dependency on package:math/eigen[]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:428
+#, no-wrap
+msgid "`elfctl`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:433
+msgid "Change an ELF binary's feature control note by setting ELF_FEATURES."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:435
+#, no-wrap
+msgid "Uses=elfctl"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:444
+#, no-wrap
+msgid ""
+"USES= elfctl\n"
+"ELF_FEATURES=\tfeaturelist:path/to/file1 \\\n"
+"\t\tfeaturelist:path/to/file1 \\\n"
+"\t\tfeaturelist:path/to/file2\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:449
+msgid ""
+"The format of `featurelist` is described in man:elfctl[1]. The file paths "
+"are relative to ${BUILD_WRKSRC}."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:451
+#, no-wrap
+msgid "`erlang`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:454
+msgid "Possible arguments: (none), `enc`, `rebar`, `rebar3`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:459
+msgid ""
+"Adds a build and run time dependency on package:lang/erlang[]. Depending on "
+"the argument, it adds additional build dependencies. `enc` adds a dependency "
+"on package:devel/erlang-native-compiler[], `rebar` adds a dependency on "
+"package:devel/rebar[] and `rebar3` adds a dependency on package:devel/"
+"rebar3[]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:461
+msgid "In addition, the following variables are available to the port:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:463
+msgid ""
+"`ERL_APP_NAME`: Erlang app name as installed in Erlang's lib dir (minus "
+"version)"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:464
+msgid "`ERL_APP_ROOT`: Root directory for this Erlang app"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:465
+msgid "`REBAR_CMD`: Path to the \"rebar\" command"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:466
+msgid "`REBAR3_CMD`: Path to the \"rebar3\" command"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:467
+msgid "`REBAR_PROFILE`: Rebar profile"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:468
+msgid "`REBAR_TARGETS`: Rebar target list (usually compile, maybe escriptize)"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:469
+msgid "`ERL_BUILD_NAME`: Build name for rebar3"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:470
+msgid "`ERL_BUILD_DEPS`: List of BUILD_DEPENDS in category/portname format"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:471
+msgid "`ERL_RUN_DEPS`: List of RUN_DEPENDS in category/portname format"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:472
+msgid "`ERL_DOCS`: List of documentation files and directories"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:474
+#, no-wrap
+msgid "`fakeroot`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:480
+msgid ""
+"Changes some default behavior of build systems to allow installing as a "
+"user. See https://wiki.debian.org/FakeRoot[] for more information on "
+"`fakeroot`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:482
+#, no-wrap
+msgid "`fam`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:485
+msgid "Possible arguments: (none), `fam`, `gamin`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:488
+msgid ""
+"Uses a File Alteration Monitor as a library dependency, either package:devel/"
+"fam[] or package:devel/gamin[]. End users can set WITH_FAM_SYSTEM to "
+"specify their preference."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:490
+#, no-wrap
+msgid "`firebird`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:493
+msgid "Possible arguments: (none), `25`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:495
+msgid "Add a dependency to the client library of the Firebird database."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:497
+#, no-wrap
+msgid "`fonts`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:500
+msgid "Possible arguments: (none), `fc`, `fontsdir` (default), `none`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:505
+msgid ""
+"Adds a runtime dependency on tools needed to register fonts. Depending on "
+"the argument, add a `crossref:plist[plist-keywords-fc,@fc] ${FONTSDIR}` "
+"line, `crossref:plist[plist-keywords-fontsdir,@fontsdir] ${FONTSDIR}` line, "
+"or no line if the argument is `none`, to the plist. `FONTSDIR` defaults to "
+"[.filename]#${PREFIX}/share/fonts/${FONTNAME}# and `FONTNAME` to `${PORTNAME}"
+"`. Add `FONTSDIR` to `PLIST_SUB` and `SUB_LIST`"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:507
+#, no-wrap
+msgid "`fortran`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:510
+msgid "Possible arguments: `gcc` (default)"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:512
+msgid "Uses the GNU Fortran compiler."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:514
+#, no-wrap
+msgid "`fuse`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:517
+msgid "Possible arguments: `2` (default), `3`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:519
+msgid ""
+"The port will depend on the FUSE library and handle the dependency on the "
+"kernel module depending on the version of FreeBSD."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:521
+#, no-wrap
+msgid "`gem`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:524
+msgid "Possible arguments: (none), `noautoplist`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:527
+msgid ""
+"Handle building with RubyGems. If `noautoplist` is used, the packing list "
+"is not generated automatically."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:529
+msgid "This implies `USES=ruby`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:531
+#, no-wrap
+msgid "`gettext`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:537
+msgid ""
+"Deprecated. Will include both <<uses-gettext-runtime,`gettext-runtime`>> "
+"and <<uses-gettext-tools,`gettext-tools`>>."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:539
+#, no-wrap
+msgid "`gettext-runtime`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:542
+msgid "Possible arguments: (none), `lib` (default), `build`, `run`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:546
+msgid ""
+"Uses package:devel/gettext-runtime[]. By default, with no arguments or with "
+"the `lib` argument, implies a library dependency on [.filename]#libintl."
+"so#. `build` and `run` implies, respectively a build-time and a run-time "
+"dependency on [.filename]#gettext#."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:548
+#, no-wrap
+msgid "`gettext-tools`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:551
+msgid "Possible arguments: (none), `build` (default), `run`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:555
+msgid ""
+"Uses package:devel/gettext-tools[]. By default, with no argument, or with "
+"the `build` argument, a build time dependency on [.filename]#msgfmt# is "
+"registered. With the `run` argument, a run-time dependency is registered."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:557
+#, no-wrap
+msgid "`ghostscript`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:560
+msgid "Possible arguments: _X_, `build`, `run`, `nox11`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:565
+msgid ""
+"A specific version _X_ can be used. Possible versions are `7`, `8`, `9`, and "
+"`agpl` (default). `nox11` indicates that the `-nox11` version of the port "
+"is required. `build` and `run` add build- and run-time dependencies on "
+"Ghostscript. The default is both build- and run-time dependencies."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:567
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:581
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:866
+#, no-wrap
+msgid "`gl`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:574
+msgid ""
+"Provides an easy way to depend on GL components. The components should be "
+"listed in `USE_GL`. The available components are:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:575
+#, no-wrap
+msgid "`egl`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:577
+msgid ""
+"add a library dependency on [.filename]#libEGL.so# from package:graphics/"
+"libglvnd[]"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:578
+#, no-wrap
+msgid "`gbm`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:580
+msgid ""
+"Add a library dependency on [.filename]#libgbm.so# from package:graphics/"
+"mesa-libs[]"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:583
+msgid ""
+"Add a library dependency on [.filename]#libGL.so# from package:graphics/"
+"libglvnd[]"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:584
+#, no-wrap
+msgid "`glesv2`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:586
+msgid ""
+"Add a library dependency on [.filename]#libGLESv2.so# from package:graphics/"
+"libglvnd[]"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:587
+#, no-wrap
+msgid "`glew`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:589
+msgid ""
+"Add a library dependency on [.filename]#libGLEW.so# from package:graphics/"
+"glew[]"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:590
+#, no-wrap
+msgid "`glu`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:592
+msgid ""
+"Add a library dependency on [.filename]#libGLU.so# from package:graphics/"
+"libGLU[]"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:593
+#, no-wrap
+msgid "`glut`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:595
+msgid ""
+"Add a library dependency on [.filename]#libglut.so# from package:graphics/"
+"freeglut[]"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:596
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1612
+#, no-wrap
+msgid "`opengl`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:598
+msgid ""
+"Add a library dependency on [.filename]#libOpenGL.so# from package:graphics/"
+"libglvnd[]"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:600
+#, no-wrap
+msgid "`gmake`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:605
+msgid ""
+"Uses package:devel/gmake[] as a build-time dependency and sets up the "
+"environment to use `gmake` as the default `make` for the build."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:607
+#, no-wrap
+msgid "`gnome`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:614
+msgid ""
+"Provides an easy way to depend on GNOME components. The components should "
+"be listed in `USE_GNOME`. The available components are:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:616
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1073
+msgid "`atk`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:617
+msgid "`atkmm`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:618
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:849
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1076
+msgid "`cairo`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:619
+msgid "`cairomm`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:620
+msgid "`dconf`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:621
+msgid "`esound`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:622
+msgid "`evolutiondataserver3`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:623
+msgid "`gconf2`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:624
+msgid "`gconfmm26`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:625
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:865
+msgid "`gdkpixbuf`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:626
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1087
+msgid "`gdkpixbuf2`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:627
+msgid "`glib12`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:628
+msgid "`glib20`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:629
+msgid "`glibmm`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:630
+msgid "`gnomecontrolcenter3`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:631
+msgid "`gnomedesktop3`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:632
+msgid "`gnomedocutils`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:633
+msgid "`gnomemenus3`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:634
+msgid "`gnomemimedata`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:635
+msgid "`gnomeprefix`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:636
+msgid "`gnomesharp20`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:637
+msgid "`gnomevfs2`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:638
+msgid "`gsound`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:639
+msgid "`gtk-update-icon-cache`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:640
+msgid "`gtk12`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:641
+msgid "`gtk20`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:642
+msgid "`gtk30`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:643
+msgid "`gtkhtml3`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:644
+msgid "`gtkhtml4`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:645
+msgid "`gtkmm20`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:646
+msgid "`gtkmm24`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:647
+msgid "`gtkmm30`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:648
+msgid "`gtksharp20`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:649
+msgid "`gtksourceview`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:650
+msgid "`gtksourceview2`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:651
+msgid "`gtksourceview3`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:652
+msgid "`gtksourceviewmm3`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:653
+msgid "`gvfs`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:654
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1261
+msgid "`intlhack`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:655
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1262
+msgid "`intltool`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:656
+msgid "`introspection`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:657
+msgid "`libartlgpl2`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:658
+msgid "`libbonobo`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:659
+msgid "`libbonoboui`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:660
+msgid "`libgda5`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:661
+msgid "`libgda5-ui`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:662
+msgid "`libgdamm5`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:663
+msgid "`libglade2`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:664
+msgid "`libgnome`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:665
+msgid "`libgnomecanvas`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:666
+msgid "`libgnomekbd`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:667
+msgid "`libgnomeprint`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:668
+msgid "`libgnomeprintui`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:669
+msgid "`libgnomeui`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:670
+msgid "`libgsf`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:671
+msgid "`libgtkhtml`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:672
+msgid "`libgtksourceviewmm`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:673
+msgid "`libidl`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:674
+msgid "`librsvg2`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:675
+msgid "`libsigc++12`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:676
+msgid "`libsigc++20`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:677
+msgid "`libwnck`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:678
+msgid "`libwnck3`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:679
+msgid "`libxml++26`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:680
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1112
+msgid "`libxml2`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:681
+msgid "`libxslt`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:682
+msgid "`metacity`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:683
+msgid "`nautilus3`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:684
+msgid "`orbit2`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:685
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:902
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1123
+msgid "`pango`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:686
+msgid "`pangomm`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:687
+msgid "`pangox-compat`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:688
+msgid "`py3gobject3`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:689
+msgid "`pygnome2`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:690
+msgid "`pygobject`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:691
+msgid "`pygobject3`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:692
+msgid "`pygtk2`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:693
+msgid "`pygtksourceview`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:694
+msgid "`referencehack`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:695
+msgid "`vte`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:696
+msgid "`vte3`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:699
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1275
+msgid ""
+"The default dependency is build- and run-time, it can be changed with `:"
+"build` or `:run`. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:704
+#, no-wrap
+msgid ""
+"USES=\t\tgnome\n"
+"USE_GNOME=\tgnomemenus3:build intlhack\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:707
+msgid "See crossref:special[using-gnome,Using GNOME] for more information."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:709
+#, no-wrap
+msgid "`go`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:714
+msgid ""
+"Ports should not be created for Go libs, see crossref:special[go-libs,Go "
+"Libraries] for more information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:717
+msgid ""
+"Possible arguments: (none), `N.NN`, `N.NN-devel`, `modules`, `no_targets`, "
+"`run`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:724
+msgid ""
+"Sets default values and targets used to build Go software. A build "
+"dependency on the Go compiler port is added, port maintainers can set "
+"version required. By default the build is performed in GOPATH mode. If Go "
+"software uses modules, the modules-aware mode can be switched on with "
+"`modules` argument. `no_targets` will setup build environment like "
+"`GO_ENV`, `GO_BUILDFLAGS` but skip creating extract and build targets. "
+"`run` will also add a run dependency on the Go compiler port."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:726
+msgid "The build process is controlled by several variables:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:727
+#, no-wrap
+msgid "`GO_MODULE`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:730
+msgid ""
+"The name of the application module as specified by the `module` directive in "
+"`go.mod`. In most cases, this is the only required variable for ports that "
+"use Go modules."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:731
+#, no-wrap
+msgid "`GO_PKGNAME`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:736
+msgid ""
+"The name of the Go package when building in GOPATH mode. This is the "
+"directory that will be created in `${GOPATH}/src`. If not set explicitly "
+"and `GH_SUBDIR` or `GL_SUBDIR` is present, `GO_PKGNAME` will be inferred "
+"from it. It is not needed when building in modules-aware mode."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:737
+#, no-wrap
+msgid "`GO_TARGET`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:741
+msgid ""
+"The packages to build. The default value is `${GO_PKGNAME}`. `GO_TARGET` "
+"can also be a tuple in the form `package:path` where path can be either a "
+"simple filename or a full path starting with `${PREFIX}`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:742
+#, no-wrap
+msgid "`GO_TESTTARGET`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:745
+msgid ""
+"The packages to test. The default value is `./...` (the current package and "
+"all subpackages)."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:746
+#, no-wrap
+msgid "`CGO_CFLAGS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:748
+msgid "Additional `CFLAGS` values to be passed to the C compiler by `go`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:749
+#, no-wrap
+msgid "`CGO_LDFLAGS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:751
+msgid "Additional `LDFLAGS` values to be passed to the C compiler by `go`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:752
+#, no-wrap
+msgid "`GO_BUILDFLAGS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:754
+msgid "Additional build arguments to be passed to `go build`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:755
+#, no-wrap
+msgid "`GO_TESTFLAGS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:757
+msgid "Additional build arguments to be passed to `go test`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:759
+msgid ""
+"See crossref:special[using-go,Building Go Applications] for usage examples."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:761
+#, no-wrap
+msgid "`gperf`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:766
+msgid ""
+"Add a buildtime dependency on package:devel/gperf[] if `gperf` is not "
+"present in the base system."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:768
+#, no-wrap
+msgid "`grantlee`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:771
+msgid "Possible arguments: `5`, `selfbuild`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:775
+msgid ""
+"Handle dependency on Grantlee. Specify `5` to depend on the Qt5 based "
+"version, package:devel/grantlee5[]. `selfbuild` is used internally by "
+"package:devel/grantlee5[] to get their versions numbers."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:777
+#, no-wrap
+msgid "`groff`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:780
+msgid "Possible arguments: `build`, `run`, `both`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:782
+msgid ""
+"Registers a dependency on package:textproc/groff[] if not present in the "
+"base system."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:784
+#, no-wrap
+msgid "`gssapi`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:787
+msgid ""
+"Possible arguments: (none), `base` (default), `heimdal`, `mit`, `flags`, "
+"`bootstrap`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:792
+msgid ""
+"Handle dependencies needed by consumers of the GSS-API. Only libraries that "
+"provide the Kerberos mechanism are available. By default, or set to `base`, "
+"the GSS-API library from the base system is used. Can also be set to "
+"`heimdal` to use package:security/heimdal[], or `mit` to use package:"
+"security/krb5[]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:794
+msgid ""
+"When the local Kerberos installation is not in `LOCALBASE`, set "
+"`HEIMDAL_HOME` (for `heimdal`) or `KRB5_HOME` (for `krb5`) to the location "
+"of the Kerberos installation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:796
+msgid "These variables are exported for the ports to use:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:798
+msgid "`GSSAPIBASEDIR`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:799
+msgid "`GSSAPICPPFLAGS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:800
+msgid "`GSSAPIINCDIR`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:801
+msgid "`GSSAPILDFLAGS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:802
+msgid "`GSSAPILIBDIR`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:803
+msgid "`GSSAPILIBS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:804
+msgid "`GSSAPI_CONFIGURE_ARGS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:807
+msgid ""
+"The `flags` option can be given alongside `base`, `heimdal`, or `mit` to "
+"automatically add `GSSAPICPPFLAGS`, `GSSAPILDFLAGS`, and `GSSAPILIBS` to "
+"`CFLAGS`, `LDFLAGS`, and `LDADD`, respectively. For example, use `base,"
+"flags`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:810
+msgid ""
+"The `bootstrap` option is a special prefix only for use by package:security/"
+"krb5[] and package:security/heimdal[]. For example, use `bootstrap,mit`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:812
+#, no-wrap
+msgid "Typical Use"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:819
+#, no-wrap
+msgid ""
+"OPTIONS_SINGLE=\tGSSAPI\n"
+"OPTIONS_SINGLE_GSSAPI=\tGSSAPI_BASE GSSAPI_HEIMDAL GSSAPI_MIT GSSAPI_NONE\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:827
+#, no-wrap
+msgid ""
+"GSSAPI_BASE_USES=\tgssapi\n"
+"GSSAPI_BASE_CONFIGURE_ON=\t--with-gssapi=${GSSAPIBASEDIR} ${GSSAPI_CONFIGURE_ARGS}\n"
+"GSSAPI_HEIMDAL_USES=\tgssapi:heimdal\n"
+"GSSAPI_HEIMDAL_CONFIGURE_ON=\t--with-gssapi=${GSSAPIBASEDIR} ${GSSAPI_CONFIGURE_ARGS}\n"
+"GSSAPI_MIT_USES=\tgssapi:mit\n"
+"GSSAPI_MIT_CONFIGURE_ON=\t--with-gssapi=${GSSAPIBASEDIR} ${GSSAPI_CONFIGURE_ARGS}\n"
+"GSSAPI_NONE_CONFIGURE_ON=\t--without-gssapi\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:832
+#, no-wrap
+msgid "`gstreamer`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:839
+msgid ""
+"Provides an easy way to depend on GStreamer components. The components "
+"should be listed in `USE_GSTREAMER`. The available components are:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:841
+msgid "`a52dec`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:842
+msgid "`aalib`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:843
+msgid "`amrnb`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:844
+msgid "`amrwbdec`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:845
+msgid "`aom`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:846
+msgid "`assrender`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:847
+msgid "`bad`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:848
+msgid "`bs2b`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:850
+msgid "`cdio`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:851
+msgid "`cdparanoia`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:852
+msgid "`chromaprint`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:853
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1078
+msgid "`curl`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:854
+msgid "`dash`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:855
+msgid "`dtls`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:856
+msgid "`dts`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:857
+msgid "`dv`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:858
+msgid "`dvd`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:859
+msgid "`dvdread`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:860
+msgid "`editing-services`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:861
+msgid "`faac`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:862
+msgid "`faad`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:863
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1085
+msgid "`flac`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:864
+msgid "`flite`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:867
+msgid "`gme`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:868
+msgid "`gnonlin`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:869
+msgid "`good`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:870
+msgid "`gsm`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:871
+msgid "`gtk4`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:872
+msgid "`gtk`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:873
+msgid "`hal`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:874
+msgid "`hls`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:875
+msgid "`jack`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:876
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1094
+msgid "`jpeg`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:877
+msgid "`kate`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:878
+msgid "`kms`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:879
+msgid "`ladspa`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:880
+msgid "`lame`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:881
+msgid "`libav`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:882
+msgid "`libcaca`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:883
+msgid "`libde265`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:884
+msgid "`libmms`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:885
+msgid "`libvisual`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:886
+msgid "`lv2`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:887
+msgid "`mm`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:888
+msgid "`modplug`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:889
+msgid "`mpeg2dec`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:890
+msgid "`mpeg2enc`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:891
+msgid "`mpg123`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:892
+msgid "`mplex`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:893
+msgid "`musepack`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:894
+msgid "`neon`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:895
+msgid "`ogg`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:896
+msgid "`opencv`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:897
+msgid "`openexr`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:898
+msgid "`openh264`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:899
+msgid "`openjpeg`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:900
+msgid "`openmpt`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:901
+msgid "`opus`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:903
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1125
+msgid "`png`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:904
+msgid "`pulse`"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:905
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1127
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1714
+#, no-wrap
+msgid "`qt`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:906
+msgid "`resindvd`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:907
+msgid "`rsvg`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:908
+msgid "`rtmp`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:909
+msgid "`shout2`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:910
+msgid "`sidplay`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:911
+msgid "`smoothstreaming`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:912
+msgid "`sndfile`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:913
+msgid "`sndio`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:914
+msgid "`soundtouch`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:915
+msgid "`soup`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:916
+msgid "`spandsp`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:917
+msgid "`speex`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:918
+msgid "`srtp`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:919
+msgid "`taglib`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:920
+msgid "`theora`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:921
+msgid "`ttml`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:922
+msgid "`twolame`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:923
+msgid "`ugly`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:924
+msgid "`v4l2`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:925
+msgid "`vorbis`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:926
+msgid "`vpx`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:927
+msgid "`vulkan`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:928
+msgid "`wavpack`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:929
+msgid "`webp`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:930
+msgid "`webrtcdsp`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:931
+msgid "`x264`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:932
+msgid "`x265`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:933
+msgid "`x`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:934
+msgid "`ximagesrc`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:935
+msgid "`zbar`"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:937
+#, no-wrap
+msgid "`guile`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:940
+msgid ""
+"Possible arguments: (none), `_X.Y_`, `flavors`, `build`, `run`, `alias`, "
+"`conflicts`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:944
+msgid ""
+"Adds a dependency on Guile. By default this is a library dependency on the "
+"appropriate `libguile*.so`, unless overridden by the `build` and/or `run` "
+"option. The `alias` option configures `BINARY_ALIAS` appropriately (see "
+"crossref:makefiles[binary-alias,Use `BINARY_ALIAS`])."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:947
+msgid ""
+"The default version is set by the usual `DEFAULT_VERSIONS` mechanism; if the "
+"default version is not one of the listed versions, then the latest available "
+"listed version is used."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:950
+msgid ""
+"Applications using Guile are normally built for only a single Guile "
+"version. However, extension or library modules should use the `flavors` "
+"option to build with multiple flavors."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:952
+msgid "For more information see crossref:special[using-guile,Using Guile]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:954
+#, no-wrap
+msgid "`horde`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:961
+msgid ""
+"Add buildtime and runtime dependencies on package:devel/pear-channel-"
+"horde[]. Other Horde dependencies can be added with `USE_HORDE_BUILD` and "
+"`USE_HORDE_RUN`. See crossref:special[php-horde,Horde Modules] for more "
+"information."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:963
+#, no-wrap
+msgid "`iconv`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:966
+msgid ""
+"Possible arguments: (none), `lib`, `build`, `patch`, `translit`, `wchar_t`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:972
+msgid ""
+"Uses `iconv` functions, either from the port package:converters/libiconv[] "
+"as a build-time and run-time dependency, or from the base system. By "
+"default, with no arguments or with the `lib` argument, implies `iconv` with "
+"build-time and run-time dependencies. `build` implies a build-time "
+"dependency, and `patch` implies a patch-time dependency. If the port uses "
+"the `WCHAR_T` or `//TRANSLIT` iconv extensions, add the relevant arguments "
+"so that the correct iconv is used. For more information see crossref:"
+"special[using-iconv,Using `iconv`]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:974
+#, no-wrap
+msgid "`imake`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:977
+msgid "Possible arguments: (none), `env`, `notall`, `noman`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:982
+msgid ""
+"Add package:devel/imake[] as a build-time dependency and run `xmkmf -a` "
+"during the `configure` stage. If the `env` argument is given, the "
+"`configure` target is not set. If the `-a` flag is a problem for the port, "
+"add the `notall` argument. If `xmkmf` does not generate a `install.man` "
+"target, add the `noman` argument."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:984
+#, no-wrap
+msgid "`kde`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:987
+msgid "Possible arguments: `5`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:990
+msgid ""
+"Add dependency on KDE components. See crossref:special[using-kde,Using KDE] "
+"for more information."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:992
+#, no-wrap
+msgid "`kmod`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:995
+msgid "Possible arguments: (none), `debug`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:997
+msgid "Fills in the boilerplate for kernel module ports, currently:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:999
+msgid "Add `kld` to `CATEGORIES`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1000
+msgid "Set `SSP_UNSAFE`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1001
+msgid "Set `IGNORE` if the kernel sources are not found in `SRC_BASE`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1002
+msgid ""
+"Define `KMODDIR` to [.filename]#/boot/modules# by default, add it to "
+"`PLIST_SUB` and `MAKE_ENV`, and create it upon installation. If `KMODDIR` is "
+"set to [.filename]#/boot/kernel#, it will be rewritten to [.filename]#/boot/"
+"modules#. This prevents breaking packages when upgrading the kernel due to [."
+"filename]#/boot/kernel# being renamed to [.filename]#/boot/kernel.old# in "
+"the process."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1003
+msgid ""
+"Handle cross-referencing kernel modules upon installation and "
+"deinstallation, using crossref:plist[plist-keywords-kld,`@kld`]."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1004
+msgid ""
+"If the `debug` argument is given, the port can install a debug version of "
+"the module into [.filename]#KERN_DEBUGDIR#/[.filename]#KMODDIR#. By default, "
+"`KERN_DEBUGDIR` is copied from `DEBUGDIR` and set to [.filename]#/usr/lib/"
+"debug#. The framework will take care of creating and removing any required "
+"directories."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1006
+#, no-wrap
+msgid "`ldap`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1009
+msgid "Possible arguments: (none), <version>, client, server"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1017
+msgid ""
+"Registers a dependency on package:net/openldap[]. It uses the specific "
+"`<version>` (without the dot notation) if set. Otherwise it tries to find "
+"the currently installed version. If necessary it falls back to the default "
+"version found in `bsd.default-versions.mk`. `client` specifies a runtime "
+"dependency on the client library. This is also the default. `server` "
+"specifies a runtime dependency on the server."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1019
+msgid "The following variables can be accessed by the port:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1020
+#, no-wrap
+msgid "`IGNORE_WITH_OPENLDAP`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1022
+msgid ""
+"This variable can be defined if the ports does not support one or more "
+"versions of OpenLDAP."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1022
+#, no-wrap
+msgid "`WITH_OPENLDAP_VER`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1024
+msgid "User defined variable to set OpenLDAP version."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1024
+#, no-wrap
+msgid "`OPENLDAP_VER`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1026
+msgid "Detected OpenLDAP version."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1028
+#, no-wrap
+msgid "`lha`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1033
+msgid "Set `EXTRACT_SUFX` to `.lzh`"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1035
+#, no-wrap
+msgid "`libarchive`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1041
+msgid ""
+"Registers a dependency on package:archivers/libarchive[]. Any ports "
+"depending on libarchive must include `USES=libarchive`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1043
+#, no-wrap
+msgid "`libedit`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1049
+msgid ""
+"Registers a dependency on package:devel/libedit[]. Any ports depending on "
+"libedit must include `USES=libedit`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1051
+#, no-wrap
+msgid "`libtool`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1054
+msgid "Possible arguments: (none), `keepla`, `build`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1058
+msgid ""
+"Patches `libtool` scripts. This must be added to all ports that use "
+"`libtool`. The `keepla` argument can be used to keep [.filename]#.la# "
+"files. Some ports do not ship with their own copy of libtool and need a "
+"build time dependency on package:devel/libtool[], use the `:build` argument "
+"to add such dependency."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1060
+#, no-wrap
+msgid "`linux`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1063
+msgid "Possible arguments: `c6`, `c7`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1067
+msgid ""
+"Ports Linux compatibility framework. Specify `c6` to depend on CentOS 6 "
+"packages. Specify `c7` to depend on CentOS 7 packages. The available "
+"packages are:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1069
+msgid "`allegro`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1070
+msgid "`alsa-plugins-oss`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1071
+msgid "`alsa-plugins-pulseaudio`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1072
+msgid "`alsalib`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1074
+msgid "`avahi-libs`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1075
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2125
+msgid "`base`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1077
+msgid "`cups-libs`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1079
+msgid "`cyrus-sasl2`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1080
+msgid "`dbusglib`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1081
+msgid "`dbuslibs`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1082
+msgid "`devtools`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1083
+msgid "`dri`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1084
+msgid "`expat`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1086
+msgid "`fontconfig`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1088
+msgid "`gnutls`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1089
+msgid "`graphite2`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1090
+msgid "`gtk2`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1091
+msgid "`harfbuzz`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1092
+msgid "`jasper`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1093
+msgid "`jbigkit`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1095
+msgid "`libasyncns`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1096
+msgid "`libaudiofile`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1097
+msgid "`libelf`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1098
+msgid "`libgcrypt`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1099
+msgid "`libgfortran`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1100
+msgid "`libgpg-error`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1101
+msgid "`libmng`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1102
+msgid "`libogg`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1103
+msgid "`libpciaccess`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1104
+msgid "`libsndfile`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1105
+msgid "`libsoup`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1106
+msgid "`libssh2`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1107
+msgid "`libtasn1`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1108
+msgid "`libthai`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1109
+msgid "`libtheora`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1110
+msgid "`libv4l`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1111
+msgid "`libvorbis`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1113
+msgid "`mikmod`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1114
+msgid "`naslibs`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1115
+msgid "`ncurses-base`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1116
+msgid "`nspr`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1117
+msgid "`nss`"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1118
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1395
+#, no-wrap
+msgid "`openal`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1119
+msgid "`openal-soft`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1120
+msgid "`openldap`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1121
+msgid "`openmotif`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1122
+msgid "`openssl`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1124
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2266
+#, no-wrap
+msgid "`pixman`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1126
+msgid "`pulseaudio-libs`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1128
+msgid "`qt-x11`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1129
+msgid "`qtwebkit`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1130
+msgid "`scimlibs`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1131
+msgid "`sdl12`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1132
+msgid "`sdlimage`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1133
+msgid "`sdlmixer`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1134
+msgid "`sqlite3`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1135
+msgid "`tcl85`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1136
+msgid "`tcp_wrappers-libs`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1137
+msgid "`tiff`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1138
+msgid "`tk85`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1139
+msgid "`ucl`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1140
+msgid "`xorglibs`"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1142
+#, no-wrap
+msgid "`llvm`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1145
+msgid ""
+"Possible arguments: (none), `_XY_`, min=`_XY_`, max=`_XY_`, build, run, lib"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1153
+msgid ""
+"Adds a dependency on LLVM. By default this is a build dependency unless "
+"overridden by the `run` or `lib` options. The default version is the one "
+"set in `LLVM_DEFAULT`. A specific version can be specified as well. The "
+"minimum and maximum versions can be specified with the `min` and `max` "
+"parameters respectively. The ports framework export the following variables "
+"to the port:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1154
+#, no-wrap
+msgid "`LLVM_VERSION`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1156
+msgid "Version chosen from the arguments to llvm.mk"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1156
+#, no-wrap
+msgid "`LLVM_PORT`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1158
+msgid "Chosen llvm port"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1158
+#, no-wrap
+msgid "`LLVM_CONFIG`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1160
+msgid "llvm-config of the chosen port"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1160
+#, no-wrap
+msgid "`LLVM_LIBLLVM`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1162
+msgid "libLLVM.so of the chosen port"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1162
+#, no-wrap
+msgid "`LLVM_PREFIX`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1164
+msgid "Installation prefix of the chosen port"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1166
+#, no-wrap
+msgid "`localbase`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1169
+msgid "Possible arguments: (none), `ldflags`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1174
+msgid ""
+"Ensures that libraries from dependencies in `LOCALBASE` are used instead of "
+"the ones from the base system. Specify `ldflags` to add `-L${LOCALBASE}/"
+"lib` to `LDFLAGS` instead of `LIBS`. Ports that depend on libraries that "
+"are also present in the base system should use this. It is also used "
+"internally by a few other `USES`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1176
+#, no-wrap
+msgid "`lua`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1179
+msgid ""
+"Possible arguments: (none), `_XY_`, `_XY_+`, `-_XY_`, `_XY_-_ZA_`, `module`, "
+"`flavors`, `build`, `run`, `env`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1183
+msgid ""
+"Adds a dependency on Lua. By default this is a library dependency, unless "
+"overridden by the `build` and/or `run` option. The `env` option prevents "
+"the addition of any dependency, while still defining all the usual variables."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1185
+msgid ""
+"The default version is set by the usual `DEFAULT_VERSIONS` mechanism, unless "
+"a version or range of versions is specified as an argument, for example, "
+"`51` or `51-54`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1188
+msgid ""
+"Applications using Lua are normally built for only a single Lua version. "
+"However, library modules intended to be loaded by Lua code should use the "
+"`module` option to build with multiple flavors."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1190
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1209
+msgid "For more information see crossref:special[using-lua,Using Lua]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1192
+#, no-wrap
+msgid "`luajit`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1195
+msgid "Possible arguments: (none), `_X_`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1198
+msgid ""
+"Adds a dependency on luajit runtime. A specific version _X_ can be used. "
+"Possible versions are `luajit`, `luajit-devel`, `luajit-openresty`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1200
+msgid ""
+"After including [.filename]#bsd.port.options.mk# or [.filename]#bsd.port.pre."
+"mk# the port can inspect these variables:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1201
+#, no-wrap
+msgid "`LUAJIT_VER`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1203
+msgid "The selected luajit version"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1203
+#, no-wrap
+msgid "`LUAJIT_INCDIR`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1205
+msgid "The path to luajit's header files"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1205
+#, no-wrap
+msgid "`LUAJIT_LUAVER`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1207
+msgid "Which luajit spec version is selected (2.0 for luajit, else 2.1)"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1211
+#, no-wrap
+msgid "`lxqt`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1218
+msgid ""
+"Handle dependencies for the LXQt Desktop Environment. Use `USE_LXQT` to "
+"select the components needed for the port. See crossref:special[using-lxqt,"
+"Using LXQt] for more information."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1220
+#, no-wrap
+msgid "`magick`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1223
+msgid "Possible arguments: (none), `_X_`, `build`, `nox11`, `run`, `test`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1228
+msgid ""
+"Add a library dependency on `ImageMagick`. A specific version _X_ can be "
+"used. Possible versions are `6` and `7` (default). `nox11` indicates that "
+"the `-nox11` version of the port is required. `build`, `run` and `test` add "
+"build-, run-time and test dependencies on ImageMagick."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1230
+#, no-wrap
+msgid "`makeinfo`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1235
+msgid ""
+"Add a build-time dependency on `makeinfo` if it is not present in the base "
+"system."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1237
+#, no-wrap
+msgid "`makeself`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1242
+msgid ""
+"Indicates that the distribution files are makeself archives and sets the "
+"appropriate dependencies."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1244
+#, no-wrap
+msgid "`mate`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1251
+msgid ""
+"Provides an easy way to depend on MATE components. The components should be "
+"listed in `USE_MATE`. The available components are:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1253
+msgid "`autogen`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1254
+msgid "`caja`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1255
+msgid "`common`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1256
+msgid "`controlcenter`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1257
+msgid "`desktop`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1258
+msgid "`dialogs`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1259
+msgid "`docutils`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1260
+msgid "`icontheme`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1263
+msgid "`libmatekbd`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1264
+msgid "`libmateweather`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1265
+msgid "`marco`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1266
+msgid "`menus`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1267
+msgid "`notificationdaemon`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1268
+msgid "`panel`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1269
+msgid "`pluma`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1270
+msgid "`polkit`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1271
+msgid "`session`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1272
+msgid "`settingsdaemon`"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1280
+#, no-wrap
+msgid ""
+"USES=\t\tmate\n"
+"USE_MATE=\tmenus:build intlhack\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1283
+#, no-wrap
+msgid "`meson`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1289
+msgid ""
+"Provide support for Meson based projects. For more information see crossref:"
+"special[using-meson,Using `meson`]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1291
+#, no-wrap
+msgid "`metaport`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1296
+msgid ""
+"Sets the following variables to make it easier to create a metaport: "
+"`MASTER_SITES`, `DISTFILES`, `EXTRACT_ONLY`, `NO_BUILD`, `NO_INSTALL`, "
+"`NO_MTREE`, `NO_ARCH`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1298
+#, no-wrap
+msgid "`minizip`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1301
+msgid "Possible arguments: (none), `ng`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1303
+msgid ""
+"Adds a library dependency on package:archivers/minizip[] or package:"
+"archivers/minizip-ng[] respectively."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1305
+#, no-wrap
+msgid "`mysql`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1308
+msgid ""
+"Possible arguments: (none), `_version_`, `client` (default), `server`, "
+"`embedded`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1317
+msgid ""
+"Provide support for MySQL If no version is given, try to find the current "
+"installed version. Fall back to the default version, MySQL-5.6. The "
+"possible versions are `55`, `55m`, `55p`, `56`, `56p`, `56w`, `57`, `57p`, "
+"`80`, `100m`, `101m`, and `102m`. The `m` and `p` suffixes are for the "
+"MariaDB and Percona variants of MySQL. `server` and `embedded` add a build- "
+"and run-time dependency on the MySQL server. When using `server` or "
+"`embedded`, add `client` to also add a dependency on [."
+"filename]#libmysqlclient.so#. A port can set `IGNORE_WITH_MYSQL` if some "
+"versions are not supported."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1319
+msgid "The framework sets `MYSQL_VER` to the detected MySQL version."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1321
+#, no-wrap
+msgid "`mono`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1324
+msgid "Possible arguments: (none), `nuget`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1326
+msgid ""
+"Adds a dependency on the Mono (currently only C#) framework by setting the "
+"appropriate dependencies."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1330
+msgid ""
+"Specify `nuget` when the port uses nuget packages. `NUGET_DEPENDS` needs to "
+"be set with the names and versions of the nuget packages in the format "
+"`_name_=_version_`. An optional package origin can be added using "
+"`_name_=_version_:_origin_`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1332
+msgid ""
+"The helper target, `buildnuget`, will output the content of the "
+"`NUGET_DEPENDS` based on the provided [.filename]#packages.config#."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1334
+#, no-wrap
+msgid "`motif`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1343
+msgid ""
+"Uses package:x11-toolkits/open-motif[] as a library dependency. End users "
+"can set `WANT_LESSTIF` in [.filename]#make.conf# to use package:x11-toolkits/"
+"lesstif[] as dependency instead of package:x11-toolkits/open-motif[]. "
+"Similarly setting `WANT_OPEN_MOTIF_DEVEL` in [.filename]#make.conf# will add "
+"a dependency on package:x11-toolkits/open-motif-devel[]"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1345
+#, no-wrap
+msgid "`ncurses`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1348
+msgid "Possible arguments: (none), `base`, `port`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1350
+msgid "Uses ncurses, and causes some useful variables to be set."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1352
+#, no-wrap
+msgid "`nextcloud`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1357
+msgid ""
+"Adds support for Nextcloud applications by adding a run time dependency on "
+"package:www/nextcloud[]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1359
+#, no-wrap
+msgid "`ninja`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1362
+msgid "Possible arguments: (none), `build`, `make` (default), `run`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1369
+msgid ""
+"If `build` or `run` arguments are specify, it respectively adds a build or "
+"run time dependency on package:devel/ninja[]. If `make` or no arguments are "
+"provided, use ninja to build the port instead of make. `make` implies "
+"`build`. If the variable `NINJA_DEFAULT` is set to `samurai`, then the "
+"dependencies are set on package:devel/samurai[] instead."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1371
+#, no-wrap
+msgid "`nodejs`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1375
+#, no-wrap
+msgid ""
+"Possible arguments: (none), `build`, `run`, `current`, `lts`, `10`, `14`, `16`,\n"
+" `17`.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1378
+msgid ""
+"Uses nodejs. Adds a dependency on package:www/node*[]. If a supported "
+"version is specified then `run` and/or `build` must be specified too."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1380
+#, no-wrap
+msgid "`objc`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1385
+msgid ""
+"Add objective C dependencies (compiler, runtime library) if the base system "
+"does not support it."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1387
+#, no-wrap
+msgid "`octave`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1390
+msgid "Possible arguments: (none), env"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1393
+msgid ""
+"Uses package:math/octave[]. `env` loads only one `OCTAVE_VERSION` "
+"environmental variable."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1398
+msgid "Possible arguments: `al`, `soft` (default), `si`, `alut`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1403
+msgid ""
+"Uses OpenAL. The backend can be specified, with the software implementation "
+"as the default. The user can specify a preferred backend with "
+"`WANT_OPENAL`. Valid values for this knob are `soft` (default) and `si`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1405
+#, no-wrap
+msgid "`pathfix`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1412
+msgid ""
+"Look for [.filename]#Makefile.in# and [.filename]#configure# in "
+"`PATHFIX_WRKSRC` (defaults to `WRKSRC`) and fix common paths to make sure "
+"they respect the FreeBSD hierarchy. For example, it fixes the installation "
+"directory of `pkgconfig`'s [.filename]#.pc# files to [.filename]#${PREFIX}/"
+"libdata/pkgconfig#. If the port uses `USES=autoreconf`, [."
+"filename]#Makefile.am# will be added to `PATHFIX_MAKEFILEIN` automatically."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1415
+msgid ""
+"If the port <<uses-cmake,`USES=cmake`>> it will look for [."
+"filename]#CMakeLists.txt# in `PATHFIX_WRKSRC`. If needed, that default "
+"filename can be changed with `PATHFIX_CMAKELISTSTXT`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1417
+#, no-wrap
+msgid "`pear`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1420
+msgid "Possible arguments: `env`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1425
+msgid ""
+"Adds a dependency on package:devel/pear[]. It will setup default behavior "
+"for software using the PHP Extension and Application Repository. Using the "
+"`env` arguments only sets up the PEAR environment variables. See crossref:"
+"special[php-pear,PEAR Modules] for more information."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1427
+#, no-wrap
+msgid "`perl5`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1432
+msgid "Depends on Perl. The configuration is done using `USE_PERL5`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1434
+msgid ""
+"`USE_PERL5` can contain the phases in which to use Perl, can be `extract`, "
+"`patch`, `build`, `run`, or `test`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1437
+msgid ""
+"`USE_PERL5` can also contain `configure`, `modbuild`, or `modbuildtiny` when "
+"[.filename]#Makefile.PL#, [.filename]#Build.PL#, or Module::Build::Tiny's "
+"flavor of [.filename]#Build.PL# is required."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1440
+msgid ""
+"`USE_PERL5` defaults to `build run`. When using `configure`, `modbuild`, or "
+"`modbuildtiny`, `build` and `run` are implied."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1442
+msgid "See crossref:special[using-perl,Using Perl] for more information."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1444
+#, no-wrap
+msgid "`pgsql`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1447
+msgid "Possible arguments: (none), `_X.Y_`, `_X.Y_+`, `_X.Y_-`, `_X.Y_-_Z.A_`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1451
+msgid ""
+"Provide support for PostgreSQL. Port maintainer can set version required. "
+"Minimum and maximum versions or a range can be specified; for example, `9.0-"
+"`, `8.4+`, `8.4-9.2.`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1456
+msgid ""
+"By default, the added dependency will be the client, but if the port "
+"requires additional components, this can be done using "
+"`WANT_PGSQL=_component[:target]_`; for example, `WANT_PGSQL=server:configure "
+"pltcl plperl`. The available components are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1458
+msgid "`client`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1459
+msgid "`contrib`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1460
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2128
+msgid "`docs`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1461
+msgid "`pgtcl`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1462
+msgid "`plperl`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1463
+msgid "`plpython`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1464
+msgid "`pltcl`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1465
+msgid "`server`"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1467
+#, no-wrap
+msgid "`php`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1470
+msgid ""
+"Possible arguments: (none), `phpize`, `ext`, `zend`, `build`, `cli`, `cgi`, "
+"`mod`, `web`, `embed`, `pecl`, `flavors`, `noflavors`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1473
+msgid ""
+"Provide support for PHP. Add a runtime dependency on the default PHP "
+"version, package:lang/php81[]."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1474
+#, no-wrap
+msgid "`phpize`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1477
+msgid "Use to build a PHP extension. Enables flavors."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1478
+#, no-wrap
+msgid "`ext`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1481
+msgid "Use to build, install and register a PHP extension. Enables flavors."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1482
+#, no-wrap
+msgid "`zend`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1485
+msgid "Use to build, install and register a Zend extension. Enables flavors."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1486
+#, no-wrap
+msgid "`build`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1488
+msgid "Set PHP also as a build-time dependency."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1489
+#, no-wrap
+msgid "`cli`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1491
+msgid "Needs the CLI version of PHP."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1492
+#, no-wrap
+msgid "`cgi`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1494
+msgid "Needs the CGI version of PHP."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1495
+#, no-wrap
+msgid "`mod`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1497
+msgid "Needs the Apache module for PHP."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1498
+#, no-wrap
+msgid "`web`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1500
+msgid "Needs the Apache module or the CGI version of PHP."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1501
+#, no-wrap
+msgid "`embed`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1503
+msgid "Needs the embedded library version of PHP."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1504
+#, no-wrap
+msgid "`pecl`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1507
+msgid ""
+"Provide defaults for fetching PHP extensions from the PECL repository. "
+"Enables flavors."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1508
+#, no-wrap
+msgid "`flavors`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1511
+msgid ""
+"Enable automatic crossref:flavors[flavors-auto-php,PHP flavors] generation. "
+"Flavors will be generated for all PHP versions, except the ones present in "
+"<<uses-php-ignore,`IGNORE_WITH_PHP`>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1512
+#, no-wrap
+msgid "`noflavors`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1515
+msgid ""
+"Disable automatic PHP flavors generation. _Must only_ be used with "
+"extensions provided by PHP itself."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1517
+msgid ""
+"Variables are used to specify which PHP modules are required, as well as "
+"which version of PHP are supported."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1518
+#, no-wrap
+msgid "`USE_PHP`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1522
+msgid ""
+"The list of required PHP extensions at run-time. Add `:build` to the "
+"extension name to add a build-time dependency. Example: `pcre xml:build "
+"gettext`"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1524
+#, no-wrap
+msgid "`IGNORE_WITH_PHP`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1527
+msgid ""
+"The port does not work with PHP of the given version. For possible values "
+"look at the content of `_ALL_PHP_VERSIONS` in [.filename]#Mk/Uses/php.mk#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1529
+msgid ""
+"When building a PHP or Zend extension with `:ext` or `:zend`, these "
+"variables can be set:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1530
+#, no-wrap
+msgid "`PHP_MODNAME`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1533
+msgid "The name of the PHP or Zend extension. Default value is `${PORTNAME}`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1534
+#, no-wrap
+msgid "`PHP_HEADER_DIRS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1537
+msgid ""
+"A list of subdirectories from which to install header files. The framework "
+"will always install the header files that are present in the same directory "
+"as the extension."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1538
+#, no-wrap
+msgid "`PHP_MOD_PRIO`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1541
+msgid ""
+"The priority at which to load the extension. It is a number between `00` "
+"and `99`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1546
+msgid ""
+"For extensions that do not depend on any extension, the priority is "
+"automatically set to `20`, for extensions that depend on another extension, "
+"the priority is automatically set to `30`. Some extensions may need to be "
+"loaded before every other extension, for example package:www/php56-"
+"opcache[]. Some may need to be loaded after an extension with a priority of "
+"`30`. In that case, add `PHP_MOD_PRIO=_XX_` in the port's Makefile. For "
+"example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1552
+#, no-wrap
+msgid ""
+"USES=\t\tphp:ext\n"
+"USE_PHP=\twddx\n"
+"PHP_MOD_PRIO=\t40\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1555
+msgid ""
+"These variables are available to use in `PKGNAMEPREFIX` or `PKGNAMESUFFIX`:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1556
+#, no-wrap
+msgid "`PHP_PKGNAMEPREFIX`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1559
+msgid ""
+"Contains `php_XY_-` where _XY_ is the current flavor's PHP version. Use "
+"with PHP extensions and modules."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1560
+#, no-wrap
+msgid "`PHP_PKGNAMESUFFIX`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1563
+msgid ""
+"Contains `-php_XY_` where _XY_ is the current flavor's PHP version. Use "
+"with PHP applications."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1564
+#, no-wrap
+msgid "`PECL_PKGNAMEPREFIX`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1567
+msgid ""
+"Contains `php_XY_-pecl-` where _XY_ is the current flavor's PHP version. "
+"Use with PECL modules."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1572
+msgid ""
+"With flavors, all PHP extensions, PECL extensions, PEAR modules _must have_ "
+"a different package name, so they must all use one of these three variables "
+"in their `PKGNAMEPREFIX` or `PKGNAMESUFFIX`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1575
+#, no-wrap
+msgid "`pkgconfig`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1578
+msgid "Possible arguments: (none), `build` (default), `run`, `both`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1582
+msgid ""
+"Uses package:devel/pkgconf[]. With no arguments or with the `build` "
+"argument, it implies `pkg-config` as a build-time dependency. `run` implies "
+"a run-time dependency and `both` implies both run-time and build-time "
+"dependencies."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1584
+#, no-wrap
+msgid "`pure`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1587
+msgid "Possible arguments: (none), `ffi`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1591
+msgid ""
+"Uses package:lang/pure[]. Largely used for building related pure ports. "
+"With the `ffi` argument, it implies package:devel/pure-ffi[] as a run-time "
+"dependency."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1593
+#, no-wrap
+msgid "`pyqt`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1596
+msgid "Possible arguments: (none), `4`, `5`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1600
+msgid ""
+"Uses PyQt. If the port is part of PyQT itself, set `PYQT_DIST`. Use "
+"`USE_PYQT` to select the components the port needs. The available "
+"components are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1602
+msgid "`core`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1603
+msgid "`dbus`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1604
+msgid "`dbussupport`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1605
+msgid "`demo`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1606
+msgid "`designer`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1607
+msgid "`designerplugin`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1608
+msgid "`doc`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1609
+msgid "`gui`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1610
+msgid "`multimedia`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1611
+msgid "`network`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1613
+msgid "`qscintilla2`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1614
+msgid "`sip`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1615
+msgid "`sql`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1616
+msgid "`svg`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1617
+msgid "`test`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1618
+msgid "`webkit`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1619
+msgid "`xml`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1620
+msgid "`xmlpatterns`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1622
+msgid "These components are only available with PyQT4:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1624
+msgid "`assistant`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1625
+msgid "`declarative`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1626
+msgid "`help`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1627
+msgid "`phonon`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1628
+msgid "`script`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1629
+msgid "`scripttools`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1631
+msgid "These components are only available with PyQT5:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1633
+msgid "`multimediawidgets`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1634
+msgid "`printsupport`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1635
+msgid "`qml`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1636
+msgid "`serialport`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1637
+msgid "`webkitwidgets`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1638
+msgid "`widgets`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1640
+msgid ""
+"The default dependency for each component is build- and run-time, to select "
+"only build or run, add `_build` or `_run` to the component name. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1645
+#, no-wrap
+msgid ""
+"USES=\t\tpyqt\n"
+"USE_PYQT=\tcore doc_build designer_run\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1648
+#, no-wrap
+msgid "`pytest`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1651
+msgid "Possible arguments: (none), 4"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1658
+msgid ""
+"Introduces a new dependency on package:devel/pytest[]. It defines a `do-"
+"test` target which will run the tests properly. Use the argument to depend "
+"on a specific package:devel/pytest[] version. For ports using package:devel/"
+"pytest[] consider using this instead of a specific `do-test` target. The "
+"framework exposes the following variables to the port:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1659
+#, no-wrap
+msgid "`PYTEST_ARGS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1661
+msgid "Additional arguments to pytest (defaults to empty)."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1662
+#, no-wrap
+msgid "`PYTEST_IGNORED_TESTS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1665
+msgid ""
+"lists of `pytest -k` patterns of tests to ignore (defaults to empty). For "
+"tests which are not expected to pass, such as ones requiring a database "
+"access."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1666
+#, no-wrap
+msgid "`PYTEST_BROKEN_TESTS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1669
+msgid ""
+"lists of `pytest -k` patterns of tests to ignore (defaults to empty). For "
+"broken tests which require fixing."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1671
+msgid "In addition the following variables may be set by the user:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1672
+#, no-wrap
+msgid "`PYTEST_ENABLE_IGNORED_TESTS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1674
+msgid "Enable tests which are otherwise ignored by `PYTEST_IGNORED_TESTS`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1675
+#, no-wrap
+msgid "`PYTEST_ENABLE_BROKEN_TESTS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1677
+msgid "Enable tests which are otherwise ignored by `PYTEST_BROKEN_TESTS`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1678
+#, no-wrap
+msgid "`PYTEST_ENABLE_ALL_TESTS`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1681
+msgid ""
+"Enable tests which are otherwise ignored by `PYTEST_IGNORED_TESTS` and "
+"`PYTEST_BROKEN_TESTS`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1684
+#, no-wrap
+msgid "`python`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1687
+msgid ""
+"Possible arguments: (none), `_X.Y_`, `_X.Y+_`, `_-X.Y_`, `_X.Y-Z.A_`, "
+"`patch`, `build`, `run`, `test`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1692
+msgid ""
+"Uses Python. A supported version or version range can be specified. If "
+"Python is only needed at build time, run time or for the tests, it can be "
+"set as a build, run or test dependency with `build`, `run`, or `test`. If "
+"Python is also needed during the patch phase, use `patch`. See crossref:"
+"special[using-python, Using Python] for more information."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1695
+msgid ""
+"`PYTHON_NO_DEPENDS=yes` can be used when the variables exported by the "
+"framework are needed but a dependency on Python is not. It can happen when "
+"using with <<uses-shebangfix,`USES=shebangfix`>>, and the goal is only to "
+"fix the shebangs but not add a dependency on Python."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1697
+#, no-wrap
+msgid "`qmail`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1700
+msgid "Possible arguments: (none), `build`, `run`, `both`, `vars`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1705
+msgid ""
+"Uses package:mail/qmail[]. With the `build` argument, it implies `qmail` as "
+"a build-time dependency. `run` implies a run-time dependency. Using no "
+"argument or the `both` argument implies both run-time and build-time "
+"dependencies. `vars` will only set QMAIL variables for the port to use."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1707
+#, no-wrap
+msgid "`qmake`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1710
+msgid ""
+"Possible arguments: (none), `norecursive`, `outsource`, `no_env`, "
+"`no_configure`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1712
+msgid ""
+"Uses QMake for configuring. For more information see crossref:special[using-"
+"qmake,Using `qmake`]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1717
+msgid "Possible arguments: `5`, `6`, `no_env`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1721
+msgid ""
+"Add dependency on Qt components. `no_env` is passed directly to `USES= "
+"qmake`. See crossref:special[using-qt,Using Qt] for more information."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1723
+#, no-wrap
+msgid "`qt-dist`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1726
+#, no-wrap
+msgid "Possible arguments: (none) or `5` and (none) or `6` and (none) or one of `3d`, `5compat`, `base`, `charts`, `connectivity`, `datavis3d`, `declarative`, `doc` `languageserver`, `gamepad`, `graphicaleffects`, `imageformats`, `locat ion`, `lottie`, `multimedia`, `networkauth`, `positioning`, `quick3d`, `quickcontrols2`, `quickcontrols`, `quicktimeline`, `remoteobjects`, `script`, `scxml `, `sensors`, `serialbus`, `serialport`, `shadertools`, `speech`, `svg`, `tools`, `translations`, `virtualkeyboard`, `wayland`, `webchannel`, `webengine`, `webglplugin`, `websockets`, `webview`, `x11extras`, `xmlpatterns`.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1729
+msgid ""
+"Provides support for building Qt 5 and Qt 6 components. It takes care of "
+"setting up the appropriate configuration environment for the port to build."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1731
+#, no-wrap
+msgid "Building Qt 5 Components"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1735
+msgid ""
+"The port is Qt 5's `networkauth` component, which is part of the "
+"`networkauth` distribution file."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1740
+#, no-wrap
+msgid ""
+"PORTNAME=\tnetworkauth\n"
+"DISTVERSION=\t${QT5_VERSION}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1742
+#, no-wrap
+msgid "USES=\t\tqt-dist:5\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1748
+#, no-wrap
+msgid "Building Qt 6 Components"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1752
+msgid ""
+"The port is Qt 6's `websockets` component, which is part of the `websockets` "
+"distribution file."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1757
+#, no-wrap
+msgid ""
+"PORTNAME= websockets\n"
+"PORTVERSION= ${QT6_VERSION}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1759
+#, no-wrap
+msgid "USES= qt-dist:6\n"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1764
+msgid ""
+"If `PORTNAME` does not match the component name, it can be passed as an "
+"argument to `qt-dist`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1766
+#, no-wrap
+msgid "Building Qt 5 Components with Different Names"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1770
+msgid ""
+"The port is Qt 5's `gui` component, which is part of the `base` distribution "
+"file."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1775
+#, no-wrap
+msgid ""
+"PORTNAME=\tgui\n"
+"DISTVERSION=\t${QT5_VERSION}\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1777
+#, no-wrap
+msgid "USES=\t\tqt-dist:5,base\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1782
+#, no-wrap
+msgid "`readline`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1785
+msgid "Possible arguments: (none), `port`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1788
+msgid ""
+"Uses readline as a library dependency, and sets `CPPFLAGS` and `LDFLAGS` as "
+"necessary. If the `port` argument is used or if readline is not present in "
+"the base system, add a dependency on package:devel/readline[]"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1791
+#, no-wrap
+msgid "`ruby`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1794
+msgid "Possible arguments: (none), `build`, `extconf`, `run`, `setup`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1801
+msgid ""
+"Provide support for Ruby related ports. `(none)` without arguments adds "
+"runtime dependency on package:lang/ruby[]. `build` adds a dependency on "
+"package:lang/ruby[] at build time. `extconf` states that the port uses "
+"extconf.rb to configure. `run` adds a dependency on package:lang/ruby[] at "
+"run time. This is also the default. `setup` states that the port uses setup."
+"rb to configure and build."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1803
+msgid "The user may have the following variables defined:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1804
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1821
+#, no-wrap
+msgid "`RUBY_VER`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1806
+msgid "Alternative short version of ruby in the form of `x.y'."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1807
+#, no-wrap
+msgid "`RUBY_DEFAULT_VER`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1809
+msgid "Set to (e.g.) `2.7` to use `ruby27` as the default version."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1810
+#, no-wrap
+msgid "`RUBY_ARCH`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1812
+msgid "Set the architecture name (e.g. i386-freebsd7)."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1814
+msgid "The following variables are exported to be used by the port:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1815
+#, no-wrap
+msgid "`RUBY`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1820
+msgid ""
+"Set to full path of ruby. If set, the values of the following variables are "
+"automatically obtained from the ruby executable: `RUBY_ARCH`, "
+"`RUBY_ARCHLIBDIR`, `RUBY_LIBDIR`, `RUBY_SITEARCHLIBDIR`, `RUBY_SITELIBDIR`, "
+"`RUBY_VER` and `RUBY_VERSION`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1823
+msgid "Set to the alternative short version of ruby in the form of `x.y'."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1824
+#, no-wrap
+msgid "`RUBY_EXTCONF`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1826
+msgid "Set to the alternative name of extconf.rb (default: extconf.rb)."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1827
+#, no-wrap
+msgid "`RUBY_EXTCONF_SUBDIRS`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1829
+msgid "Set to list of subdirectories, if multiple modules are included."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1830
+#, no-wrap
+msgid "`RUBY_SETUP`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1832
+msgid "Set to the alternative name of setup.rb (default: setup.rb)."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1835
+#, no-wrap
+msgid "`samba`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1838
+msgid "Possible arguments: `build`, `env`, `lib`, `run`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1843
+msgid ""
+"Handle dependency on Samba. `env` will not add any dependency and only set "
+"up the variables. `build` and `run` will add build-time and run-time "
+"dependency on [.filename]#smbd#. `lib` will add a dependency on [."
+"filename]#libsmbclient.so#. The variables that are exported are:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1844
+#, no-wrap
+msgid "`SAMBAPORT`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1846
+msgid "The origin of the default Samba port."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1847
+#, no-wrap
+msgid "`SAMBAINCLUDES`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1849
+msgid "The location of the Samba header files."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1850
+#, no-wrap
+msgid "`SAMBALIBS`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1852
+msgid "The directory where the Samba shared libraries are available."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1854
+#, no-wrap
+msgid "`scons`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1860
+msgid ""
+"Provide support for the use of package:devel/scons[]. See crossref:"
+"special[using-scons,Using `scons`] for more information."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1862
+#, no-wrap
+msgid "`shared-mime-info`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1869
+msgid ""
+"Uses update-mime-database from package:misc/shared-mime-info[]. This uses "
+"will automatically add a post-install step in such a way that the port "
+"itself still can specify there own post-install step if needed. It also add "
+"an crossref:plist[plist-keywords-shared-mime-info,`@shared-mime-info`] entry "
+"to the plist."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1871
+#, no-wrap
+msgid "`shebangfix`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1877
+msgid ""
+"A lot of software uses incorrect locations for script interpreters, most "
+"notably [.filename]#/usr/bin/perl# and [.filename]#/bin/bash#. The "
+"shebangfix macro fixes shebang lines in scripts listed in `SHEBANG_REGEX`, "
+"`SHEBANG_GLOB`, or `SHEBANG_FILES`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1878
+#, no-wrap
+msgid "`SHEBANG_REGEX`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1881
+msgid ""
+"Contains _one_ extended regular expressions, and is used with the `-iregex` "
+"argument of man:find[1]. See <<uses-shebangfix-ex-regex>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1882
+#, no-wrap
+msgid "`SHEBANG_GLOB`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1885
+msgid ""
+"Contains a list of patterns used with the `-name` argument of man:find[1]. "
+"See <<uses-shebangfix-ex-glob>>."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1886
+#, no-wrap
+msgid "`SHEBANG_FILES`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1891
+msgid ""
+"Contains a list of files or man:sh[1] globs. The shebangfix macro is run "
+"from `${WRKSRC}`, so `SHEBANG_FILES` can contain paths that are relative to "
+"`${WRKSRC}`. It can also deal with absolute paths if files outside of "
+"`${WRKSRC}` require patching. See <<uses-shebangfix-ex-files>>."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1893
+msgid ""
+"Currently Bash, Java, Ksh, Lua, Perl, PHP, Python, Ruby, Tcl, and Tk are "
+"supported by default."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1895
+msgid "There are three configuration variables:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1896
+#, no-wrap
+msgid "`SHEBANG_LANG`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1898
+msgid "The list of supported interpreters."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1899
+#, no-wrap
+msgid "`_interp__CMD`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1902
+msgid ""
+"The path to the command interpreter on FreeBSD. The default value is "
+"`${LOCALBASE}/bin/_interp_`."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1903
+#, no-wrap
+msgid "`_interp__OLD_CMD`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1907
+msgid ""
+"The list of wrong invocations of interpreters. These are typically obsolete "
+"paths, or paths used on other operating systems that are incorrect on "
+"FreeBSD. They will be replaced by the correct path in `_interp__CMD`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1911
+msgid ""
+"These will _always_ be part of `_interp__OLD_CMD`: `\"/usr/bin/env "
+"_interp_\" /bin/_interp_ /usr/bin/_interp_ /usr/local/bin/_interp_`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1918
+msgid ""
+"`_interp__OLD_CMD` contain multiple values. Any entry with spaces must be "
+"quoted. See <<uses-shebangfix-ex-ksh>>."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1924
+msgid ""
+"The fixing of shebangs is done during the `patch` phase. If scripts are "
+"created with incorrect shebangs during the `build` phase, the build process "
+"(for example, the [.filename]#configure# script, or the [."
+"filename]#Makefiles#) must be patched or given the right path (for example, "
+"with `CONFIGURE_ENV`, `CONFIGURE_ARGS`, `MAKE_ENV`, or `MAKE_ARGS`) to "
+"generate the right shebangs."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1926
+msgid ""
+"Correct paths for supported interpreters are available in `_interp__CMD`."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1931
+msgid ""
+"When used with <<uses-python,`USES=python`>>, and the aim is only to fix the "
+"shebangs but a dependency on Python itself is not wanted, use "
+"`PYTHON_NO_DEPENDS=yes`."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1934
+#, no-wrap
+msgid "Adding Another Interpreter to `USES=shebangfix`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1939
+msgid "To add another interpreter, set `SHEBANG_LANG`. For example:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1943
+#, no-wrap
+msgid "SHEBANG_LANG=\tlua\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1948
+#, no-wrap
+msgid "Specifying all the Paths When Adding an Interpreter to `USES=shebangfix`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1952
+msgid ""
+"If it was not already defined, and there were no default values for "
+"`_interp__OLD_CMD` and `_interp__CMD` the Ksh entry could be defined as:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1958
+#, no-wrap
+msgid ""
+"SHEBANG_LANG=\tksh\n"
+"ksh_OLD_CMD=\t\"/usr/bin/env ksh\" /bin/ksh /usr/bin/ksh\n"
+"ksh_CMD=\t${LOCALBASE}/bin/ksh\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1963
+#, no-wrap
+msgid "Adding a Strange Location for an Interpreter"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1969
+msgid ""
+"Some software uses strange locations for an interpreter. For example, an "
+"application might expect Python to be located in [.filename]#/opt/bin/"
+"python2.7#. The strange path to be replaced can be declared in the port [."
+"filename]#Makefile#:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1973
+#, no-wrap
+msgid "python_OLD_CMD=\t/opt/bin/python2.7\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1978
+#, no-wrap
+msgid "`USES=shebangfix` with `SHEBANG_REGEX`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1982
+msgid ""
+"To fix all the files in `${WRKSRC}/scripts` ending in [.filename]#.pl#, [."
+"filename]#.sh#, or [.filename]#.cgi# do:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1987
+#, no-wrap
+msgid ""
+"USES=\tshebangfix\n"
+"SHEBANG_REGEX=\t./scripts/.*\\.(sh|pl|cgi)\n"
+msgstr ""
+
+#. type: delimited block = 6
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1993
+msgid ""
+"`SHEBANG_REGEX` is used by running `find -E`, which uses modern regular "
+"expressions also known as extended regular expressions. See man:"
+"re_format[7] for more information."
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:1998
+#, no-wrap
+msgid "`USES=shebangfix` with `SHEBANG_GLOB`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2002
+msgid ""
+"To fix all the files in `${WRKSRC}` ending in [.filename]#.pl# or [."
+"filename]#.sh#, do:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2007
+#, no-wrap
+msgid ""
+"USES=\tshebangfix\n"
+"SHEBANG_GLOB=\t*.sh *.pl\n"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2012
+#, no-wrap
+msgid "`USES=shebangfix` with `SHEBANG_FILES`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2016
+msgid ""
+"To fix the files [.filename]#script/foobar.pl# and [.filename]#script/*.sh# "
+"in `${WRKSRC}`, do:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2021
+#, no-wrap
+msgid ""
+"USES=\tshebangfix\n"
+"SHEBANG_FILES=\tscripts/foobar.pl scripts/*.sh\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2026
+#, no-wrap
+msgid "`sqlite`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2029
+msgid "Possible arguments: (none), `2`, `3`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2032
+msgid ""
+"Add a dependency on SQLite. The default version used is 3, but version 2 is "
+"also possible using the `:2` modifier."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2034
+#, no-wrap
+msgid "`ssl`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2037
+msgid "Possible arguments: (none), `build`, `run`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2041
+msgid ""
+"Provide support for OpenSSL. A build- or run-time only dependency can be "
+"specified using `build` or `run`. These variables are available for the "
+"port's use, they are also added to `MAKE_ENV`:"
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2042
+#, no-wrap
+msgid "`OPENSSLBASE`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2044
+msgid "Path to the OpenSSL installation base."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2045
+#, no-wrap
+msgid "`OPENSSLDIR`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2047
+msgid "Path to OpenSSL's configuration files."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2048
+#, no-wrap
+msgid "`OPENSSLLIB`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2050
+msgid "Path to the OpenSSL libraries."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2051
+#, no-wrap
+msgid "`OPENSSLINC`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2053
+msgid "Path to the OpenSSL includes."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2054
+#, no-wrap
+msgid "`OPENSSLRPATH`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2056
+msgid ""
+"If defined, the path the linker needs to use to find the OpenSSL libraries."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2060
+msgid ""
+"If a port does not build with an OpenSSL flavor, set the `BROKEN_SSL` "
+"variable, and possibly the `BROKEN_SSL_REASON__flavor_`:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2065
+#, no-wrap
+msgid ""
+"BROKEN_SSL=\tlibressl\n"
+"BROKEN_SSL_REASON_libressl=\tneeds features only available in OpenSSL\n"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2070
+#, no-wrap
+msgid "`tar`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2074
+msgid ""
+"Possible arguments: (none), `Z`, `bz2`, `bzip2`, `lzma`, `tbz`, `tbz2`, "
+"`tgz`, `txz`, `xz`, `zst`, `zstd`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2077
+msgid ""
+"Set `EXTRACT_SUFX` to `.tar`, `.tar.Z`, `.tar.bz2`, `.tar.bz2`, `.tar.lzma`, "
+"`.tbz`, `.tbz2`, `.tgz`, `.txz`, `.tar.xz`, `.tar.zst` or `.tar.zstd` "
+"respectively."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2079
+#, no-wrap
+msgid "`tcl`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2082
+msgid "Possible arguments: _version_, `wrapper`, `build`, `run`, `tea`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2089
+msgid ""
+"Add a dependency on Tcl. A specific version can be requested using "
+"_version_. The version can be empty, one or more exact version numbers "
+"(currently `84`, `85`, or `86`), or a minimal version number (currently "
+"`84+`, `85+` or `86+`). To only request a non version specific wrapper, use "
+"`wrapper`. A build- or run-time only dependency can be specified using "
+"`build` or `run`. To build the port using the Tcl Extension Architecture, "
+"use `tea`. After including [.filename]#bsd.port.pre.mk# the port can "
+"inspect the results using these variables:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2091
+msgid "`TCL_VER`: chosen major.minor version of Tcl"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2092
+msgid "`TCLSH`: full path of the Tcl interpreter"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2093
+msgid "`TCL_LIBDIR`: path of the Tcl libraries"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2094
+msgid "`TCL_INCLUDEDIR`: path of the Tcl C header files"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2095
+msgid "`TK_VER`: chosen major.minor version of Tk"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2096
+msgid "`WISH`: full path of the Tk interpreter"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2097
+msgid "`TK_LIBDIR`: path of the Tk libraries"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2098
+msgid "`TK_INCLUDEDIR`: path of the Tk C header files"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2100
+#, no-wrap
+msgid "`terminfo`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2106
+msgid ""
+"Adds crossref:plist[plist-keywords-terminfo,`@terminfo`] to the [."
+"filename]#plist#. Use when the port installs [.filename]#*.terminfo# files "
+"in [.filename]#${PREFIX}/share/misc#."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2108
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2143
+#, no-wrap
+msgid "`tex`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2114
+msgid ""
+"Provide support for tex. Loads all the default variables for TEX related "
+"ports and does not add any dependency on any ports."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2116
+msgid "Variables are used to specify which TEX modules are required."
+msgstr ""
+
+#. type: Labeled list
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2117
+#, no-wrap
+msgid "`USE_TEX`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2121
+msgid ""
+"The list of required TEX extensions at run-time. Add `:build` to the "
+"extension name to add a build-time dependency, `:run` to add runtime "
+"dependency, `:test` for test time dependency, `:extract` for extract time "
+"dependency. Example: `base texmf:build source:run`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2123
+msgid "Current possible arguments are as follows:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2126
+msgid "`texmf`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2127
+msgid "`source`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2129
+msgid "`web2c`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2130
+msgid "`kpathsea`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2131
+msgid "`ptexenc`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2132
+msgid "`basic`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2133
+msgid "`tlmgr`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2134
+msgid "`texlua`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2135
+msgid "`texluajit`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2136
+msgid "`synctex`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2137
+msgid "`xpdfopen`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2138
+msgid "`dvipsk`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2139
+msgid "`dvipdfmx`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2140
+msgid "`xdvik`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2141
+msgid "`gbklatex`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2142
+msgid "`formats`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2144
+msgid "`latex`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2145
+msgid "`pdftex`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2146
+msgid "`jadetex`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2147
+msgid "`luatex`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2148
+msgid "`ptex`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2149
+msgid "`xetex`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2150
+msgid "`xmltex`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2151
+msgid "`texhash`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2152
+msgid "`updmap`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2153
+msgid "`fmtutil`"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2155
+#, no-wrap
+msgid "`tk`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2158
+msgid "Same as arguments for `tcl`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2161
+msgid ""
+"Small wrapper when using both Tcl and Tk. The same variables are returned "
+"as when using Tcl."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2163
+#, no-wrap
+msgid "`uidfix`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2169
+msgid ""
+"Changes some default behavior (mostly variables) of the build system to "
+"allow installing this port as a normal user. Try this in the port before "
+"using <<uses-fakeroot,USES=fakeroot>> or patching."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2171
+#, no-wrap
+msgid "`uniquefiles`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2174
+msgid "Possible arguments: (none), `dirs`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2178
+msgid ""
+"Make files or directories 'unique', by adding a prefix or suffix. If the "
+"`dirs` argument is used, the port needs a prefix (and only a prefix) based "
+"on `UNIQUE_PREFIX` for standard directories `DOCSDIR`, `EXAMPLESDIR`, "
+"`DATADIR`, `WWWDIR`, `ETCDIR`. These variables are available for ports:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2180
+msgid ""
+"`UNIQUE_PREFIX`: The prefix to be used for directories and files. Default: "
+"`${PKGNAMEPREFIX}`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2181
+msgid ""
+"`UNIQUE_PREFIX_FILES`: A list of files that need to be prefixed. Default: "
+"empty."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2182
+msgid ""
+"`UNIQUE_SUFFIX`: The suffix to be used for files. Default: `${PKGNAMESUFFIX}"
+"`."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2183
+msgid ""
+"`UNIQUE_SUFFIX_FILES`: A list of files that need to be suffixed. Default: "
+"empty."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2185
+#, no-wrap
+msgid "`vala`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2188
+msgid "Possible arguments: `build`, `lib`, `no_depend`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2191
+msgid ""
+"Adds build or library dependencies on package:lang/vala[]. The `no_depend` "
+"argument is reserved for package:lang/vala[] itself."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2193
+#, no-wrap
+msgid "`varnish`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2196
+msgid "Possible arguments: `4` (default), `6`, `7`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2199
+msgid ""
+"Handle dependencies on Varnish Cache. Adds a dependency on package:www/"
+"varnish*[]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2201
+#, no-wrap
+msgid "`webplugin`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2204
+msgid "Possible arguments: (none), `ARGS`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2207
+msgid ""
+"Automatically create and remove symbolic links for each application that "
+"supports the webplugin framework. `ARGS` can be one of:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2209
+msgid "`gecko`: support plug-ins based on Gecko"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2210
+msgid "`native`: support plug-ins for Gecko, Opera, and WebKit-GTK"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2211
+msgid "`linux`: support Linux plug-ins"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2212
+msgid "`all` (default, implicit): support all plug-in types"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2213
+msgid "(individual entries): support only the browsers listed"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2215
+msgid "These variables can be adjusted:"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2217
+msgid ""
+"`WEBPLUGIN_FILES`: No default, must be set manually. The plug-in files to "
+"install."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2218
+msgid ""
+"`WEBPLUGIN_DIR`: The directory to install the plug-in files to, default [."
+"filename]#PREFIX/lib/browser_plugins/WEBPLUGIN_NAME#. Set this if the port "
+"installs plug-in files outside of the default directory to prevent broken "
+"symbolic links."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2219
+msgid ""
+"`WEBPLUGIN_NAME`: The final directory to install the plug-in files into, "
+"default `PKGBASE`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2221
+#, no-wrap
+msgid "`xfce`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2224
+msgid "Possible arguments: (none), `gtk2`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2227
+msgid ""
+"Provide support for Xfce related ports. See crossref:special[using-xfce,"
+"Using Xfce] for details."
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2230
+msgid ""
+"The `gtk2` argument specifies that the port requires GTK2 support. It adds "
+"additional features provided by some core components, for example, package:"
+"x11/libxfce4menu[] and package:x11-wm/xfce4-panel[]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2232
+#, no-wrap
+msgid "`xorg`"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2239
+msgid ""
+"Provides an easy way to depend on X.org components. The components should "
+"be listed in `USE_XORG`. The available components are:"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2241
+#, no-wrap
+msgid "Available X.Org Components"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2245
+#, no-wrap
+msgid "Name"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2247
+#, no-wrap
+msgid "Description"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2248
+#, no-wrap
+msgid "`dmx`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2250
+#, no-wrap
+msgid "DMX extension library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2251
+#, no-wrap
+msgid "`fontenc`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2253
+#, no-wrap
+msgid "The fontenc Library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2254
+#, no-wrap
+msgid "`fontutil`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2256
+#, no-wrap
+msgid "Create an index of X font files in a directory"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2257
+#, no-wrap
+msgid "`ice`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2259
+#, no-wrap
+msgid "Inter Client Exchange library for X11"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2260
+#, no-wrap
+msgid "`libfs`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2262
+#, no-wrap
+msgid "The FS library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2263
+#, no-wrap
+msgid "`pciaccess`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2265
+#, no-wrap
+msgid "Generic PCI access library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2268
+#, no-wrap
+msgid "Low-level pixel manipulation library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2269
+#, no-wrap
+msgid "`sm`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2271
+#, no-wrap
+msgid "Session Management library for X11"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2272
+#, no-wrap
+msgid "`x11`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2274
+#, no-wrap
+msgid "X11 library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2275
+#, no-wrap
+msgid "`xau`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2277
+#, no-wrap
+msgid "Authentication Protocol library for X11"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2278
+#, no-wrap
+msgid "`xaw`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2280
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2283
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2286
+#, no-wrap
+msgid "X Athena Widgets library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2281
+#, no-wrap
+msgid "`xaw6`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2284
+#, no-wrap
+msgid "`xaw7`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2287
+#, no-wrap
+msgid "`xbitmaps`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2289
+#, no-wrap
+msgid "X.Org bitmaps data"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2290
+#, no-wrap
+msgid "`xcb`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2292
+#, no-wrap
+msgid "The X protocol C-language Binding (XCB) library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2293
+#, no-wrap
+msgid "`xcomposite`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2295
+#, no-wrap
+msgid "X Composite extension library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2296
+#, no-wrap
+msgid "`xcursor`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2298
+#, no-wrap
+msgid "X client-side cursor loading library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2299
+#, no-wrap
+msgid "`xdamage`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2301
+#, no-wrap
+msgid "X Damage extension library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2302
+#, no-wrap
+msgid "`xdmcp`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2304
+#, no-wrap
+msgid "X Display Manager Control Protocol library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2305
+#, no-wrap
+msgid "`xext`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2307
+#, no-wrap
+msgid "X11 Extension library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2308
+#, no-wrap
+msgid "`xfixes`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2310
+#, no-wrap
+msgid "X Fixes extension library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2311
+#, no-wrap
+msgid "`xfont`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2313
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2316
+#, no-wrap
+msgid "X font library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2314
+#, no-wrap
+msgid "`xfont2`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2317
+#, no-wrap
+msgid "`xft`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2319
+#, no-wrap
+msgid "Client-sided font API for X applications"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2320
+#, no-wrap
+msgid "`xi`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2322
+#, no-wrap
+msgid "X Input extension library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2323
+#, no-wrap
+msgid "`xinerama`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2325
+#, no-wrap
+msgid "X11 Xinerama library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2326
+#, no-wrap
+msgid "`xkbfile`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2328
+#, no-wrap
+msgid "XKB file library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2329
+#, no-wrap
+msgid "`xmu`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2331
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2334
+#, no-wrap
+msgid "X Miscellaneous Utilities libraries"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2332
+#, no-wrap
+msgid "`xmuu`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2335
+#, no-wrap
+msgid "`xorg-macros`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2337
+#, no-wrap
+msgid "X.Org development aclocal macros"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2338
+#, no-wrap
+msgid "`xorg-server`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2340
+#, no-wrap
+msgid "X.Org X server and related programs"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2341
+#, no-wrap
+msgid "`xorgproto`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2343
+#, no-wrap
+msgid "xorg protocol headers"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2344
+#, no-wrap
+msgid "`xpm`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2346
+#, no-wrap
+msgid "X Pixmap library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2347
+#, no-wrap
+msgid "`xpresent`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2349
+#, no-wrap
+msgid "X Present Extension library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2350
+#, no-wrap
+msgid "`xrandr`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2352
+#, no-wrap
+msgid "X Resize and Rotate extension library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2353
+#, no-wrap
+msgid "`xrender`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2355
+#, no-wrap
+msgid "X Render extension library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2356
+#, no-wrap
+msgid "`xres`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2358
+#, no-wrap
+msgid "X Resource usage library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2359
+#, no-wrap
+msgid "`xscrnsaver`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2361
+#, no-wrap
+msgid "The XScrnSaver library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2362
+#, no-wrap
+msgid "`xshmfence`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2364
+#, no-wrap
+msgid "Shared memory 'SyncFence' synchronization primitive"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2365
+#, no-wrap
+msgid "`xt`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2367
+#, no-wrap
+msgid "X Toolkit library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2368
+#, no-wrap
+msgid "`xtrans`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2370
+#, no-wrap
+msgid "Abstract network code for X"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2371
+#, no-wrap
+msgid "`xtst`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2373
+#, no-wrap
+msgid "X Test extension"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2374
+#, no-wrap
+msgid "`xv`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2376
+#, no-wrap
+msgid "X Video Extension library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2377
+#, no-wrap
+msgid "`xvmc`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2379
+#, no-wrap
+msgid "X Video Extension Motion Compensation library"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2380
+#, no-wrap
+msgid "`xxf86dga`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2382
+#, no-wrap
+msgid "X DGA Extension"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2383
+#, no-wrap
+msgid "`xxf86vm`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2384
+#, no-wrap
+msgid "X Vidmode Extension"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2387
+#, no-wrap
+msgid "`xorg-cat`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2390
+msgid ""
+"Possible arguments: `app`, `data`, `doc`, `driver`, `font`, `lib`, `proto`, "
+"`util`, `xserver` and (none) or one off `autotools` (default), `meson`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2394
+msgid ""
+"Provide support for building Xorg components. It takes care of setting up "
+"common dependencies and an appropriate configuration environment needed. "
+"This is intended only for Xorg components."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2396
+msgid "The category has to match upstream categories."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2399
+msgid ""
+"The second argument is the build system to use. autotools is the default, "
+"but meson is also supported."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2401
+#, no-wrap
+msgid "`zip`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2404
+msgid "Possible arguments: (none), `infozip`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/uses/_index.adoc:2406
+msgid ""
+"Indicates that the distribution files use the ZIP compression algorithm. "
+"For files using the InfoZip algorithm the `infozip` argument must be passed "
+"to set the appropriate dependencies."
+msgstr ""
diff --git a/documentation/content/en/books/porters-handbook/versions/_index.adoc b/documentation/content/en/books/porters-handbook/versions/_index.adoc
index bd9ce57336..b94b9c90a3 100644
--- a/documentation/content/en/books/porters-handbook/versions/_index.adoc
+++ b/documentation/content/en/books/porters-handbook/versions/_index.adoc
@@ -5,7 +5,7 @@ description: A list of changes to the sys/param.h file
tags: ["FreeBSD versions"]
showBookMenu: true
weight: 18
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/versions/"
---
[[versions]]
@@ -48,6 +48,115 @@ endif::[]
Here is a convenient list of `__FreeBSD_version` values as defined in https://cgit.freebsd.org/src/tree/sys/sys/param.h[sys/param.h]:
+[[versions-15]]
+== FreeBSD 15 Versions
+
+[[freebsd-versions-table-15]]
+.FreeBSD 15 `__FreeBSD_version` Values
+[cols="1,1,1,1", frame="none", options="header"]
+|===
+| Value
+| Revision
+| Date
+| Release
+
+|1500000
+|gitref:29a16ce065dbc28bc9e87c9bfadb08bb58b137e4[repository="src",length=12]
+|August 24, 2023
+|15.0-CURRENT.
+
+|1500001
+|gitref:a6662c37b6ffee46e18be5f7570149edc64c1d0b[repository="src",length=12]
+|September 17, 2023
+|15.0-CURRENT after implementing `fpu_kern_enter` and `fpu_kern_leave` for powerpc.
+
+|1500002
+|gitref:17f5e2b904aff8e4863199a137ee21ef0939bcf4[repository="src",length=12]
+|October 18, 2023
+|15.0-CURRENT after changing the internal KAPI between the nfscommon and nfscl modules.
+
+|1500003
+|gitref:ef85fd507e6e1784a726bccd485129e00bb63311[repository="src",length=12]
+|November 1, 2023
+|15.0-CURRENT after removal of the forward compat code for the inode64 conversion.
+
+|1500004
+|gitref:7fabea328fed60d5207b262d2372e85a7f731eef[repository="src",length=12]
+|November 23, 2023
+|15.0-CURRENT after adding a new VFS function called `vfs_exjail_clone()`, which will be used by the ZFS module.
+
+|1500005
+|gitref:21fce617d1de231a30833cdd9819ef61277b08d8[repository="src",length=12]
+|November 27, 2023
+|15.0-CURRENT after a string of mechanical changes to the tree: SCCS IDs removed, &#35;if 0'd copyright strings removed, mechanical style fix after this churn and some macros removed from [.filename]#sys/cdefs.h#.
+
+|1500006
+|gitref:c711af7727824da79d87f375f3d6829feec3799a[repository="src",length=12]
+|December 8, 2023
+|15.0-CURRENT after upgrading llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-17.0.6-0-g6009708b4367, a.k.a. 17.0.6 release.
+
+|1500007
+|gitref:8ccd0b876e67fda6249f294ff484798cc1e1569f[repository="src",length=12]
+|December 11, 2023
+|15.0-CURRENT after exposing execvpe for Linux compat in libc.
+
+|1500008
+|gitref:9bf957fc9b378e0f9e65eb97e84c2166b450fccc[repository="src",length=12]
+|December 24, 2023
+|15.0-CURRENT after LinuxKPI changes.
+
+|1500009
+|gitref:b068bb09a1a82d9fef0e939ad6135443a959e290[repository="src",length=12]
+|January 11, 2024
+|15.0-CURRENT after adding man:vnode_pager_clean_async[9] and man:vnode_pager_clean_sync[9].
+
+|1500010
+|gitref:a2da1bdb61bc2d9db0b4268f53281e7c0bbce0bc[repository="src",length=12]
+|January 12, 2024
+|15.0-CURRENT after changing the internal KAPI between the nfscommon and nfscl modules.
+
+|1500011
+|gitref:a2da1bdb61bc2d9db0b4268f53281e7c0bbce0bc[repository="src",length=12]
+|January 17, 2024
+|15.0-CURRENT after adding zfs.dataset support to man:jail[8].
+
+|1500012
+|gitref:120ceebab5d4947dfc80d7492effa034a925d43e[repository="src",length=12]
+|January 24, 2024
+|15.0-CURRENT after adding man:kern_openatfp[9] and man:kcmp[2].
+
+|1500013
+|gitref:d04abb05375d3525132f1e9f78090db3d0d27f14[repository="src",length=12]
+|February 7, 2024
+|15.0-CURRENT after adding libsys.
+
+|1500014
+|gitref:ed27ae8df4b10f67289a32458d89d143e758f6d4[repository="src",length=12]
+|February 11, 2024
+|15.0-CURRENT after switching clang and other LLVM executables to build as PIE.
+
+|1500015
+|gitref:a7b9f4d96e8bdc30db27ec7a193a8d8fdf7c652c[repository="src",length=12]
+|March 13, 2024
+|15.0-CURRENT after removing redundant `type` and `rid` arguments from several functions in the new-bus resource API.
+
+|1500016
+|gitref:60bc9617e79e99bdf670304923f3baed4b749ad3[repository="src",length=12]
+|March 18, 2024
+|15.0-CURRENT after introducing man:livedump_start_vnode[9].
+
+|1500017
+|gitref:bcd401b5a39c6186bb1fe450286299f2a481244c[repository="src",length=12]
+|March 20, 2024
+|15.0-CURRENT after fixing a clang assertion or crash when building recent boost libraries.
+
+|1500018
+|gitref:0192eda105b367d4670205547e8e830e3716bea3[repository="src",length=12]
+|April 6, 2024
+|15.0-CURRENT after upgrading llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-18.1.3-0-gc13b7485b879, a.k.a. 18.1.3 release.
+
+|===
+
[[versions-14]]
== FreeBSD 14 Versions
@@ -103,7 +212,7 @@ Here is a convenient list of `__FreeBSD_version` values as defined in https://cg
|1400008
|gitref:e152bbecb221a592e7dbcabe3d1170a60f0d0dfe[repository="src",length=12]
|April 11, 2021
-|14.0-CURRENT after changing the internal KAPI between the krpc and NFS modules.
+|14.0-CURRENT after changing the internal KAPI between the `krpc` and NFS modules.
|1400009
|gitref:9ca874cf740ee68c5742df8b5f9e20910085c011[repository="src",length=12]
@@ -113,7 +222,7 @@ Here is a convenient list of `__FreeBSD_version` values as defined in https://cg
|1400010
|gitref:a3a02acde1009f03dc78e979e051acee9f9247c2[repository="src",length=12]
|April 21, 2021
-|14.0-CURRENT after changing the man:sndstat[4] ioctls nvlist schema and definitions.
+|14.0-CURRENT after changing the man:sndstat[4] ioctls `nvlist` schema and definitions.
|1400015
|gitref:d72cd275187c6399caf0ca4125292dc7e55fa478[repository="src",length=12]
@@ -153,7 +262,7 @@ Here is a convenient list of `__FreeBSD_version` values as defined in https://cg
|1400022
|gitref:40cc9a3a6b81a65a03712dfd93bbed48552a97ad[repository="src",length=12]
|June 11, 2021
-|14.0-CURRENT after commit gitref:e1a907a25cfa422c0d1acaf9f91352ada04f4bca[repository="src",length=12] changed the internal KAPI between the krpc and nfsserver modules.
+|14.0-CURRENT after commit gitref:e1a907a25cfa422c0d1acaf9f91352ada04f4bca[repository="src",length=12] changed the internal KAPI between the `krpc` and nfsserver modules.
|1400023
|gitref:d409305fa3838fb39b38c26fc085fb729b8766d5[repository="src",length=12]
@@ -228,7 +337,7 @@ Here is a convenient list of `__FreeBSD_version` values as defined in https://cg
|1400037
|gitref:2b68eb8e1dbbdaf6a0df1c83b26f5403ca52d4c3[repository="src",length=12]
|October 11, 2021
-|14.0-CURRENT after removal of thread argument from man:VOP_STAT[9] and fo_stat.
+|14.0-CURRENT after removal of thread argument from man:VOP_STAT[9] and `fo_stat`.
|1400038
|gitref:0d6516b453469ce1d92ec903c4c4df9ee08be0f9[repository="src",length=12]
@@ -293,7 +402,7 @@ Here is a convenient list of `__FreeBSD_version` values as defined in https://cg
|1400050
|gitref:213e91399b7998554d787bb290109ebe602aa279[repository="src",length=12]
|January 25, 2022
-|14.0-CURRENT after iflib adds the feature that a driver can set its own TX queue selection function as ift_txq_select in struct if_txrx.
+|14.0-CURRENT after iflib adds the feature that a driver can set its own TX queue selection function as `ift_txq_select` in struct `if_txrx`.
|1400051
|gitref:59d465e200bb7058dfdb183c061730c10dd5bc03[repository="src",length=12]
@@ -313,12 +422,12 @@ Here is a convenient list of `__FreeBSD_version` values as defined in https://cg
|1400054
|gitref:50bb3a33d879536e86e8a23365f070ef00b5cb32[repository="src",length=12]
|March 28, 2022
-|14.0-CURRENT after changing irq_work_queue to return a bool in LinuxKPI to match 5.10 API.
+|14.0-CURRENT after changing `irq_work_queue` to return a bool in LinuxKPI to match 5.10 API.
|1400055
|gitref:d69af4758be912625ec08656ba64eb90a98c9a7f[repository="src",length=12]
|March 29, 2022
-|14.0-CURRENT after adding for_each_sgtable_dma_sg and for_each_sgtable_dma_page to LinuxKPI
+|14.0-CURRENT after adding `for_each_sgtable_dma_sg` and `for_each_sgtable_dma_page` to LinuxKPI
|1400056
|gitref:ab8ac4c28574a42a2891b2e2341f802949c1fb57[repository="src",length=12]
@@ -349,6 +458,187 @@ Here is a convenient list of `__FreeBSD_version` values as defined in https://cg
|gitref:c4c5981c14d5bd69e9df9ae691069ec4c2e92174[repository="src",length=12]
|June 8, 2022
|14.0-CURRENT after mbuf(9) structure changes.
+
+|1400062
+|gitref:8c309d48aabf1cb469334c7716033f177a2715c0[repository="src",length=12]
+|June 18, 2022
+|14.0-CURRENT after struct `kinfo_file` changes.
+
+|1400063
+|gitref:8cff8e6e13a6d3ccff40fc0d8d97f5aef22a8f4d[repository="src",length=12]
+|June 29, 2022
+|14.0-CURRENT after multiple LinuxKPI changes required by drm-kmod.
+
+|1400064
+|gitref:ddd9004e7a5dbf02c34ef0effcef90f7d5df357d[repository="src",length=12]
+|July 18, 2022
+|14.0-CURRENT after the removal of OBJT_DEFAULT.
+
+|1400065
+|gitref:b273f93657cf0e6f2c6ee4d0f40a43656233c6d0[repository="src",length=12]
+|August 8, 2022
+|14.0-CURRENT after multiple LinuxKPI changes required by drm-kmod.
+
+|1400066
+|gitref:ff7812ee7d444b738a454064f9639c3feb5743e8[repository="src",length=12]
+|August 18, 2022
+|14.0-CURRENT after multiple LinuxKPI changes required by drm-kmod.
+
+|1400069
+|gitref:f95c0bc89ea4fcde04b0990d57e842ef387ea896[repository="src",length=12]
+|September 22, 2022
+|14.0-CURRENT after multiple LinuxKPI changes.
+
+|1400070
+|gitref:6bddde307e21eba297ac3f3e534b4cf3be81dfe2[repository="src",length=12]
+|September 22, 2022
+|14.0-CURRENT after KPI changes to pmap_unmapdev() and kmem_*().
+
+|1400071
+|gitref:d3f96f661050e9bd21fe29931992a8b9e67ff189[repository="src",length=12]
+|September 26, 2022
+|14.0-CURRENT after KPI changes that sysctl OIDs lists converted to RB trees.
+
+|1400072
+|gitref:8a96874eeeee5195b0b0952b77227bef6a26d1a6[repository="src",length=12]
+|September 22, 2022
+|14.0-CURRENT after `qsort_r` prototype modified to match POSIX.
+
+|1400073
+|gitref:9c950139051298831ce19d01ea5fb33ec6ea7f89[repository="src",length=12]
+|October 17, 2022
+|14.0-CURRENT after introduction of v2 of TX Queue Select Functionality.
+
+|1400074
+|gitref:e28932c643e891294a49f386ba65322cf8410225[repository="src",length=12]
+|December 9, 2022
+|14.0-CURRENT after adding spare fops slots in fileops.
+
+|1400078
+|gitref:4b56afaf7bf4fa37bae5b26fd93ee1ff5969c1bb[repository="src",length=12]
+|January 13, 2023
+|14.0-CURRENT after changing LinuxKPI pci.h.
+
+|1400079
+|gitref:3264f6b88fce7c5437d205685863617d8f6a22dd[repository="src",length=12]
+|February 8, 2023
+|14.0-CURRENT after upgrading llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-15.0.7-0-g8dfdcc7b7bf6, a.k.a. 15.0.7 release.
+
+|1400084
+|gitref:ea3061526e9ce5d3b65932c1d3e4437abd556d65[repository="src",length=12]
+|March 23, 2023
+|14.0-CURRENT after changing the arm64 struct reg, struct gpreg, struct trapframe, and struct pcb.
+
+|1400085
+|gitref:1cebc9298cf2272da46c3c574d06a80ce59854aa[repository="src",length=12]
+|March 28, 2023
+|14.0-CURRENT after multiple LinuxKPI changes.
+
+|1400086
+|gitref:c17eb99a66e7d1e8a64458a969eeb7649f827493[repository="src",length=12]
+|April 8, 2023
+|14.0-CURRENT after vn_lock_pair() argument changes.
+
+|1400087
+|gitref:af22da75a035e25cb47cd3f2eabe5a84d8a5cb34[repository="src",length=12]
+|April 22, 2023
+|14.0-CURRENT after LinuxKPI updates.
+
+|1400088
+|gitref:97583aa2567589cb83540d2d9de1980b76db9a99[repository="src",length=12]
+|April 24, 2023
+|14.0-CURRENT after migrating the LinuxKPI to IfAPI.
+
+|1400089
+|gitref:9fb6718d1b180c341373b25c03dbfc221ddee311[repository="src",length=12]
+|April 25, 2023
+|14.0-CURRENT after dynamically allocating the stoppcbs array in smp.
+
+|1400090
+|gitref:653738e895ba022be1179a95a85089e7bc66dbbe[repository="src",length=12]
+|June 7, 2023
+|14.0-CURRENT after ptrace started clearing TDB_BORN during PT_DETACH.
+
+|1400091
+|gitref:a681cba16d8967651a2146385ce44a2bfeb1c4c3[repository="src",length=12]
+|June 22, 2023
+|14.0-CURRENT after upgrading llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-16.0.6-0-g7cbf1a259152, a.k.a. 16.0.6 release.
+
+|1400092
+|gitref:9ead001d5b42ef9cba04757c9e7ee74c06037139[repository="src",length=12]
+|June 24, 2023
+|14.0-CURRENT after importing OpenSSL 3.0.9 into base.
+
+|1400093
+|gitref:ba8cc6d7271a50fec978a1d3a088aec7985fae48[repository="src",length=12]
+|July 5, 2023
+|14.0-CURRENT after using __enum_uint8 for vtype and vstate in VFS
+
+|1400097
+|gitref:29a16ce065dbc28bc9e87c9bfadb08bb58b137e4[repository="src",length=12]
+|August 24, 2023
+|14.0-STABLE after branching stable/14
+
+|1400500
+|gitref:29a16ce065dbc28bc9e87c9bfadb08bb58b137e4[repository="src",length=12]
+|September 8, 2023
+|14.0-STABLE after branching releng/14.0
+
+|1400501
+|gitref:91e53779b4fc39e755a03190f785ce0cf3f83eb7[repository="src",length=12]
+|November 19, 2023
+|14.0-STABLE after implementing `fpu_kern_enter` and `fpu_kern_leave` for powerpc.
+
+|1400502
+|gitref:092abb839d1d2826533bb9c4c93d713f8b5043f9[repository="src",length=12]
+|December 24, 2023
+|14.0-STABLE after modifying the internal API between the kgssapi and krpc modules.
+
+|1400503
+|gitref:ba99d960884d50eb7d36146914206644ee132aa4[repository="src",length=12]
+|December 29, 2023
+|14.0-STABLE after changing the internal KAPI between the nfscommon and nfscl modules.
+
+|1400504
+|gitref:68584c97ecfb3046de7fb1b16c2caa785392237c[repository="src",length=12]
+|January 7, 2024
+|14.0-STABLE after upgrading llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-17.0.6-0-g6009708b4367, a.k.a. 17.0.6 release.
+
+|1400505
+|gitref:64e869e9b93c8ce47f874b770df696c06bcba0d3[repository="src",length=12]
+|January 7, 2024
+|14.0-STABLE after adding man:vnode_pager_clean_async[9] and man:vnode_pager_clean_sync[9].
+
+|1400506
+|gitref:d9041710958227194c5e34b169ae73d7ad411017[repository="src",length=12]
+|January 19, 2024
+|14.0-STABLE after changing the internal KAPI between the nfscommon and nfscl modules.
+
+|1400507
+|gitref:b566e44b2b88eb9f1b3b658998c7418cccab9e2f[repository="src",length=12]
+|January 31, 2024
+|14.0-STABLE after adding man:kern_openatfp[9] and man:kcmp[2].
+
+|1400508
+|gitref:2d120981e26dfef5c9cb9eb9936bb46cb6918136[repository="src",length=12]
+|February 18, 2024
+|14.0-STABLE after LinuxKPI updates.
+
+|1400509
+|gitref:b392b36d3776b696601ce0253256803276d24ea2[repository="src",length=12]
+|February 18, 2024
+|14.0-STABLE after changing net80211 `struct ieee80211vap` internals.
+
+|1400510
+|gitref:69da6e0879831f1ccc5c60135ed43fcea10a933b[repository="src",length=12]
+|March 23, 2024
+|14.0-STABLE after fixing a clang assertion or crash when building recent boost libraries.
+
+|1400511
+|gitref:7c41358a2b0a2e70a2b61ec347354f3452e4d2f3[repository="src",length=12]
+|April 20, 2024
+|14.0-STABLE after upgrading llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-18.1.3-0-gc13b7485b879, a.k.a. 18.1.3 release.
+
|===
////
@@ -390,7 +680,7 @@ Template:
|1300003
|link:https://svnweb.freebsd.org/changeset/base/340055[340055]
|November 2, 2018
-|13.0-CURRENT after vop_symlink API change (`a_target` is now `const`.)
+|13.0-CURRENT after `vop_symlink` API change (`a_target` is now `const`.)
|1300004
|link:https://svnweb.freebsd.org/changeset/base/340841[340841]
@@ -435,7 +725,7 @@ Template:
|1300012
|link:https://svnweb.freebsd.org/changeset/base/344062[344062]
|February 12, 2019
-|13.0-CURRENT after `taskqgroup_attach()` and `taskqgroup_attach_cpu()` take a device_t and a struct resource pointer as arguments for denoting device interrupts.
+|13.0-CURRENT after `taskqgroup_attach()` and `taskqgroup_attach_cpu()` take a `device_t` and a struct resource pointer as arguments for denoting device interrupts.
|1300013
|link:https://svnweb.freebsd.org/changeset/base/344300[344300]
@@ -465,7 +755,7 @@ Template:
|1300018
|link:https://svnweb.freebsd.org/changeset/base/346012[346012]
|March 16, 2019
-|13.0-CURRENT after introduction of funlinkat syscall in link:https://svnweb.freebsd.org/changeset/base/345982[345982].
+|13.0-CURRENT after introduction of `funlinkat` syscall in link:https://svnweb.freebsd.org/changeset/base/345982[345982].
|1300019
|link:https://svnweb.freebsd.org/changeset/base/346282[346282]
@@ -510,12 +800,12 @@ Template:
|1300027
|link:https://svnweb.freebsd.org/changeset/base/347601[347601]
|May 14, 2019
-|13.0-CURRENT after adding prepare to pm_ops in LinuxKPI.
+|13.0-CURRENT after adding prepare to `pm_ops` in LinuxKPI.
|1300028
|link:https://svnweb.freebsd.org/changeset/base/347925[347925]
|May 17, 2019
-|13.0-CURRENT after removal of bm, cs, de, ed, ep, ex, fe, pcn, sf, sn, tl, tx, txp, vx, wb, and xe drivers.
+|13.0-CURRENT after removal of `bm`, `cs`, de, ed, `ep`, ex, `fe`, `pcn`, sf, `sn`, `tl`, `tx`, `txp`, `vx`, `wb`, and xe drivers.
|1300029
|link:https://svnweb.freebsd.org/changeset/base/347984[347984]
@@ -550,7 +840,7 @@ Template:
|1300035
|link:https://svnweb.freebsd.org/changeset/base/349846[349846]
|July 8, 2019
-|13.0-CURRENT after merging the vm_page hold and wire mechanisms.
+|13.0-CURRENT after merging the `vm_page` hold and wire mechanisms.
|1300036
|link:https://svnweb.freebsd.org/changeset/base/349972[349972]
@@ -615,7 +905,7 @@ Template:
|1300047
|link:https://svnweb.freebsd.org/changeset/base/352110[352110]
|September 9, 2019
-|13.0-CURRENT after changing the synchonization rules for vm_page reference counting..
+|13.0-CURRENT after changing the synchronization rules for `vm_page` reference counting..
|1300048
|link:https://svnweb.freebsd.org/changeset/base/352700[352700]
@@ -670,12 +960,12 @@ Template:
|1300058
|link:https://svnweb.freebsd.org/changeset/base/354820[354820]
|November 18, 2019
-|13.0-CURRENT after widening the vm_page aflags field to 16 bits.
+|13.0-CURRENT after widening the `vm_page` `aflags` field to 16 bits.
|1300059
|link:https://svnweb.freebsd.org/changeset/base/354835[354835]
|November 18, 2019
-|13.0-CURRENT after converting the in-tree sysent targets to use the new [.filename]#makesyscalls.lua#.
+|13.0-CURRENT after converting the in-tree `sysent` targets to use the new [.filename]#makesyscalls.lua#.
|1300060
|link:https://svnweb.freebsd.org/changeset/base/354922[354922]
@@ -705,7 +995,7 @@ Template:
|1300065
|link:https://svnweb.freebsd.org/changeset/base/355643[355643]
|December 12, 2019
-|13.0-CURRENT after adding sigsetop extensions commonly found in musl libc and glibc.
+|13.0-CURRENT after adding `sigsetop` extensions commonly found in musl libc and glibc.
|1300066
|link:https://svnweb.freebsd.org/changeset/base/355679[355679]
@@ -760,7 +1050,7 @@ Template:
|1300076
|link:https://svnweb.freebsd.org/changeset/base/356511[356511]
|January 8, 2020
-|13.0-CURRENT after pushing vnop implementation into the fileop layer in man:posix_fallocate[2].
+|13.0-CURRENT after pushing `vnop` implementation into the `fileop` layer in man:posix_fallocate[2].
|(not changed)
|link:https://svnweb.freebsd.org/changeset/base/357396[357396]
@@ -785,7 +1075,7 @@ Template:
|1300080
|link:https://svnweb.freebsd.org/changeset/base/358172[358172]
|February 20, 2020
-|13.0-CURRENT after adding realpathat syscall to VFS.
+|13.0-CURRENT after adding `realpathat` syscall to VFS.
|1300081
|link:https://svnweb.freebsd.org/changeset/base/358218[358218]
@@ -845,7 +1135,7 @@ Template:
|1300092
|link:https://svnweb.freebsd.org/changeset/base/359920[359920]
|April 14, 2020
-|13.0-CURRENT after reworking unmapped mbufs in KTLS to carry ext_pgs in the mbuf itself.
+|13.0-CURRENT after reworking unmapped mbufs in KTLS to carry `ext_pgs` in the mbuf itself.
|1300093
|link:https://svnweb.freebsd.org/changeset/base/360418[360418]
@@ -900,12 +1190,12 @@ Template:
|1300103
|link:https://svnweb.freebsd.org/changeset/base/363757[363757]
|August 1, 2020
-|13.0-CURRENT after making rights mandatory for NDINIT_ALL.
+|13.0-CURRENT after making rights mandatory for NDINIT_ALL.
|1300104
|link:https://svnweb.freebsd.org/changeset/base/363783[363783]
|August 2, 2020
-|13.0-CURRENT after vnode layout changes.
+|13.0-CURRENT after vnode layout changes.
|1300105
|link:https://svnweb.freebsd.org/changeset/base/363894[363894]
@@ -925,12 +1215,12 @@ Template:
|1300108
|link:https://svnweb.freebsd.org/changeset/base/364233[364233]
|August 14, 2020
-|13.0-CURRENT after adding a few wait_bit functions to the linuxkpi, which are needed for DRM from Linux v5.4.
+|13.0-CURRENT after adding a few `wait_bit` functions to the linuxkpi, which are needed for DRM from Linux v5.4.
|1300109
|link:https://svnweb.freebsd.org/changeset/base/364274[364274]
|August 16, 2020
-|13.0-CURRENT after `vget()` argument removal and namei flags renumbering.
+|13.0-CURRENT after `vget()` argument removal and `namei` flags renumbering.
|(not changed)
|link:https://svnweb.freebsd.org/changeset/base/364284[364284]
@@ -955,7 +1245,7 @@ Template:
|1300113
|link:https://svnweb.freebsd.org/changeset/base/364753[364753]
|August 25, 2020
-|13.0-CURRENT after adding atomic and bswap functions to libcompiler_rt.
+|13.0-CURRENT after adding atomic and `bswap` functions to libcompiler_rt.
|1300114
|link:https://svnweb.freebsd.org/changeset/base/365459[365459]
@@ -975,7 +1265,7 @@ Template:
|1300117
|link:https://svnweb.freebsd.org/changeset/base/366070[366070]
|September 23, 2020
-|13.0-CURRENT after reimplementing purgevfs to iterate vnodes instead of the entire hash.
+|13.0-CURRENT after reimplementing `purgevfs` to iterate vnodes instead of the entire hash.
|1300118
|link:https://svnweb.freebsd.org/changeset/base/366374[366374]
@@ -1035,12 +1325,12 @@ Template:
|1300129
|link:https://svnweb.freebsd.org/changeset/base/367627[367627]
|November 12, 2020
-|13.0-CURRENT after retiring malloc_last_fail.
+|13.0-CURRENT after retiring `malloc_last_fail`.
|1300130
|link:https://svnweb.freebsd.org/changeset/base/367777[367777]
|November 17, 2020
-|13.0-CURRENT after p_pd / pwddesc split from p_fd / filedesc.
+|13.0-CURRENT after `p_pd` / `pwddesc` split from `p_fd` / filedesc.
|1300131
|link:https://svnweb.freebsd.org/changeset/base/368417[368417]
@@ -1070,7 +1360,7 @@ Template:
|1300136
|gitref:72c551930be195b5ea982c1b16767f54388424f2[repository="src",length=12]
|January 17, 2021
-|13.0-CURRENT after reimplementing LinuxKPI's `irq_work` queue on top of fast taskqueue.
+|13.0-CURRENT after reimplementing LinuxKPI's `irq_work` queue on top of fast `taskqueue`.
|1300137
|gitref:010196adcfaf2bb610725394d40691874b4ff2af[repository="src",length=12]
@@ -1150,7 +1440,7 @@ Template:
|1300511
|gitref:2622570aeb3d162812d72f7ef192c322cd8b73ef[repository="src",length=12]
|July 7, 2021
-|13.0-STABLE after changing `softdep_prelink()` to only do sync if another thread changed the vnode metadata since previous prelink.
+|13.0-STABLE after changing `softdep_prelink()` to only do sync if another thread changed the vnode metadata since previous `prelink`.
|1300512
|gitref:f72db34d2295080f57a283858125aa906c0d409e[repository="src",length=12]
@@ -1192,6 +1482,11 @@ Template:
|November 24, 2021
|13.0-STABLE after changing the internal KAPI between the NFS modules.
+|(not changed)
+|gitref:7224d4125ab57bc1c4c799a6c286be42f8d37a83[repository="src",length=12]
+|December 6, 2021
+|13.0-STABLE after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-13.0.0-0-gd7b669b3a303, a.k.a. 13.0.0 release.
+
|1300523
|gitref:690bcf605d84283c1f9d254885a3cac69c5e80a6[repository="src",length=12]
|December 18, 2021
@@ -1241,6 +1536,117 @@ Template:
|gitref:a13b6fc61908fd6afa460b88f94e4a67be74bb9a[repository="src",length=12]
|June 4, 2022
|13.1-STABLE after upgrading llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-14.0.3-0-g1f9140064dfb, a.k.a. 14.0.3 release.
+
+|1301505
+|gitref:6f93a76ffeabf7d4488edc73a0cca01436c2903b[repository="src",length=12]
+|June 21, 2022
+|13.1-STABLE after various merges to LinuxKPI.
+
+|1301506
+|gitref:8e6cfc632cf6f9fc906df9d825649443939b55c6[repository="src",length=12]
+|July 13, 2022
+|13.1-STABLE after adding <crypto/chacha20_poly1305.h> and <crypto/curve25519.h>.
+
+|1301507
+|gitref:9cbba5950123f3afedcc5f24c43956e7a26f22f4[repository="src",length=12]
+|June 21, 2022
+|13.1-STABLE after various merges to LinuxKPI.
+
+|1301508
+|gitref:83ac15a799e348c391951f5877feecd4089bab80[repository="src",length=12]
+|October 17, 2022
+|13.1-STABLE after various merges to LinuxKPI, and for de-macrofying pause().
+
+|1301509
+|gitref:baa97013121a915057ee54dfcb2cb87e541f7d7f[repository="src",length=12]
+|October 19, 2022
+|13.1-STABLE after introduction of v2 of TX Queue Select Functionality.
+
+|1301510
+|gitref:6820a0512fa6616ee1da46cb0075da80478776f0[repository="src",length=12]
+|December 8, 2022
+|13.1-STABLE after LinuxKPI dmi_matches() fixes.
+
+|1301511
+|gitref:17333d92643d998d1c6a2dc5f6b1508b6507ad31[repository="src",length=12]
+|December 17, 2022
+|13.1-STABLE after adding a new rc: `machine_id` to generate `/etc/machine-id`.
+
+|1302500
+|gitref:c243de11cf7c4bb3d67bbc1655b149037e5b04f1[repository="src",length=12]
+|February 9, 2023
+|13.2-STABLE after releng/13.2 was branched.
+
+|1302501
+|gitref:e3068d2655e2aea3e0b462a7298a68d344769ec6[repository="src",length=12]
+|February 16, 2023
+|13.2-STABLE after adding `totalram_pages()` to the LinuxKPI.
+
+|1302502
+|gitref:5ca371f4f536f9ee9d6c9fb178bf1f7f6de33216[repository="src",length=12]
+|February 17, 2023
+|13.2-STABLE after various merges to LinuxKPI.
+
+|1302503
+|gitref:aaca677fee21f202db4bb974fc5056f4dcbbb598[repository="src",length=12]
+|February 21, 2023
+|13.2-STABLE after various merges to LinuxKPI.
+
+|1302504
+|gitref:d6852eed98ed32ad51120a22aa1ebdf0601917b3[repository="src",length=12]
+|March 12, 2023
+|13.2-STABLE after merging machine-id into `hostid_save`.
+
+|1302505
+|gitref:85e32e957fcca01d50e29e543584909795c1acef[repository="src",length=12]
+|April 9, 2023
+|13.2-STABLE after upgrading llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-15.0.7-0-g8dfdcc7b7bf6, a.k.a. 15.0.7 release.
+
+|1302506
+|gitref:e982b1cf1fe1dc0b84dc24f03d1c21e3fe6bdef3[repository="src",length=12]
+|June 26, 2023
+|13.2-STABLE after various merges to LinuxKPI.
+
+|1302507
+|gitref:b2acc21dfbd6fab28b1715c775b43d4914b75e0c[repository="src",length=12]
+|July 23, 2023
+|13.2-STABLE after upgrading llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-16.0.6-0-g7cbf1a259152, a.k.a. 16.0.6 release.
+
+|1302508
+|gitref:21ccba43f511cc4089899619b5a85e6d83a200dc[repository="src",length=12]
+|September 6, 2023
+|13.2-STABLE after ptrace started clearing TDB_BORN during PT_DETACH.
+
+|1302509
+|gitref:faedeaf7377ba7253c281cf3315b17e0cb979075[repository="src",length=12]
+|December 2, 2023
+|13.2-STABLE after adding a new VFS function called `vfs_exjail_clone()`, which will be used by the ZFS module.
+
+|1302510
+|gitref:45758665781dd63dfa38bcb646d4f36b0a6a104f[repository="src",length=12]
+|January 7, 2024
+|13.2-STABLE after upgrading llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-17.0.6-0-g6009708b4367, a.k.a. 17.0.6 release.
+
+|1303001
+|gitref:a75a3d7afcc88dc0bc9b2797cce983056acadf10[repository="src",length=12]
+|February 19, 2024
+|13.3-BETA3 after changing net80211 `struct ieee80211vap` internals.
+
+|1303501
+|gitref:a7e1fc7f620d3341549c1380f550aaafbdb45622[repository="src",length=12]
+|February 19, 2024
+|13.3-STABLE after changing net80211 `struct ieee80211vap` internals.
+
+|1303502
+|gitref:07839ae99c06fcbebd5da6ead49c160c32046542[repository="src",length=12]
+|March 23, 2024
+|13.3-STABLE after fixing a clang assertion or crash when building recent boost libraries.
+
+|1303503
+|gitref:055e875e6077ed1eb2256c3ab5de59a3f6fbce18[repository="src",length=12]
+|April 20, 2024
+|13.3-STABLE after upgrading llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-18.1.3-0-gc13b7485b879, a.k.a. 18.1.3 release.
+
|===
////
@@ -1317,7 +1723,7 @@ Template:
|1200010
|link:https://svnweb.freebsd.org/changeset/base/306276[306276]
|September 23, 2016
-|12.0-CURRENT after mounting man:msdosfs[5] with longnames support by default.
+|12.0-CURRENT after mounting man:msdosfs[5] with `longnames` support by default.
|1200011
|link:https://svnweb.freebsd.org/changeset/base/306556[306556]
@@ -1332,7 +1738,7 @@ Template:
|1200013
|link:https://svnweb.freebsd.org/changeset/base/307140[307140]
|October 12, 2016
-|12.0-CURRENT after installing header files required development with libzfs_core.
+|12.0-CURRENT after installing header files required development with `libzfs_core`.
|1200014
|link:https://svnweb.freebsd.org/changeset/base/307529[307529]
@@ -1352,7 +1758,7 @@ Template:
|1200017
|link:https://svnweb.freebsd.org/changeset/base/309124[309124]
|November 25, 2016
-|12.0-CURRENT after upgrading our copies of clang, llvm, lldb, compiler-rt and libc++ to 3.9.0 release, and adding lld 3.9.0.
+|12.0-CURRENT after upgrading copies of clang, llvm, lldb, compiler-rt and libc++ to 3.9.0 release, and adding lld 3.9.0.
|1200018
|link:https://svnweb.freebsd.org/changeset/base/309676[309676]
@@ -1387,7 +1793,7 @@ Template:
|1200023
|link:https://svnweb.freebsd.org/changeset/base/314564[314564]
|March 2, 2017
-|12.0-CURRENT after upgrading our copies of clang, llvm, lld, lldb, compiler-rt and libc++ to 4.0.0.
+|12.0-CURRENT after upgrading copies of clang, llvm, lld, lldb, compiler-rt and libc++ to 4.0.0.
|1200024
|link:https://svnweb.freebsd.org/changeset/base/314865[314865]
@@ -1562,7 +1968,7 @@ Template:
|1200058
|link:https://svnweb.freebsd.org/changeset/base/329166[329166]
|February 12, 2018
-|12.0-CURRENT after the lua loader was committed.
+|12.0-CURRENT after the Lua loader was committed.
|1200059
|link:https://svnweb.freebsd.org/changeset/base/330299[330299]
@@ -1647,12 +2053,12 @@ Template:
|1200075
|link:https://svnweb.freebsd.org/changeset/base/336538[336538]
|July 19, 2018
-|12.0-CURRENT after zfsloader being folded into loader, and after adding ntpd:ntpd as uid:gid 123:123, and after removing arm big-endian support (MACHINE_ARCH=armeb).
+|12.0-CURRENT after `zfsloader` being folded into loader, and after adding ntpd:ntpd as uid:gid 123:123, and after removing arm big-endian support (MACHINE_ARCH=armeb).
|1200076
|link:https://svnweb.freebsd.org/changeset/base/336914[336914]
|July 30, 2018
-|12.0-CURRENT after KPI changes to timespecadd.
+|12.0-CURRENT after KPI changes to `timespecadd`.
|1200077
|link:https://svnweb.freebsd.org/changeset/base/337576[337576]
@@ -1721,7 +2127,7 @@ Template:
|1200503
|link:https://svnweb.freebsd.org/changeset/base/344152[344152]
-|Febrary 15, 2019
+|February 15, 2019
|12-STABLE after merge of fixing man:renameat[2] for CAPABILITIES kernels.
|1200504
@@ -1747,7 +2153,7 @@ Template:
|1200508
|link:https://svnweb.freebsd.org/changeset/base/346784[346784]
|April 27, 2019
-|12-STABLE after ether_gen_addr availability.
+|12-STABLE after `ether_gen_addr` availability.
|1200509
|link:https://svnweb.freebsd.org/changeset/base/347790[347790]
@@ -1762,7 +2168,7 @@ Template:
|1200511
|link:https://svnweb.freebsd.org/changeset/base/348243[348243]
|May 24, 2019
-|12-STABLE after MFC of link:https://svnweb.freebsd.org/changeset/base/347843[347843]: adding group_leader member to struct task_struct to the LinuxKPI.
+|12-STABLE after MFC of link:https://svnweb.freebsd.org/changeset/base/347843[347843]: adding `group_leader` member to struct `task_struct` to the LinuxKPI.
|1200512
|link:https://svnweb.freebsd.org/changeset/base/348245[348245]
@@ -1822,7 +2228,7 @@ Template:
|1201502
|link:https://svnweb.freebsd.org/changeset/base/354613[354613]
|November 11, 2019
-|12-STABLE after enabling device class group attributes in the LinuxKPI.
+|12-STABLE after enabling device class group attributes in the LinuxKPI.
|1201503
|link:https://svnweb.freebsd.org/changeset/base/354928[354928]
@@ -1837,7 +2243,7 @@ Template:
|1201505
|link:https://svnweb.freebsd.org/changeset/base/355899[355899]
|December 19, 2019
-|12-STABLE after adding sigsetop extensions commonly found in musl libc and glibc.
+|12-STABLE after adding `sigsetop` extensions commonly found in musl libc and glibc.
|1201506
|link:https://svnweb.freebsd.org/changeset/base/355968[355968]
@@ -1937,7 +2343,7 @@ Template:
|1201525
|link:https://svnweb.freebsd.org/changeset/base/365471[365471]
|September 8, 2020
-|12-STABLE after adding atomic and bswap functions to libcompiler_rt.
+|12-STABLE after adding atomic and `bswap` functions to libcompiler_rt.
|1201526
|link:https://svnweb.freebsd.org/changeset/base/365608[365608]
@@ -2002,7 +2408,7 @@ Template:
|1203501
|gitref:b148c7b87148b653fdbef9c5aa591b9abcd99e26[repository="src",length=12]
|December 22, 2021
-|12-STABLE after adding atomic and bswap functions to libcompiler_rt.
+|12-STABLE after adding atomic and `bswap` functions to libcompiler_rt.
|1203502
|gitref:4772e4135cb3fe7f25531894f3b02f35ec086bda[repository="src",length=12]
@@ -2023,6 +2429,32 @@ Template:
|gitref:0b7be89b329e0f862c25f34abfb13c75a4d45f2a[repository="src",length=12]
|December 25, 2021
|12-STABLE after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 13.0.0.
+
+|1203506
+|gitref:f591279d9c93bc2ea9cd1a447c2df11d437fbc7b[repository="src",length=12]
+|February 12, 2022
+|12-STABLE after restoring availability tradeoff of random(4).
+
+|1203507
+|gitref:180d95e04e938328de8f2a24d16fdb5049e15262[repository="src",length=12]
+|April 9, 2022
+|12-STABLE after zlib unification.
+
+|1203508
+|gitref:6c717a28505d3e77a0c3780ca1f65eb85b538eb9[repository="src",length=12]
+|October 19, 2022
+|12-STABLE after iflib: Allow drivers to determine which queue to TX on.
+
+|1204000
+|gitref:fce871fe35204527a2ce08e43e1572ae9295cc00[repository="src",length=12]
+|October 20, 2022
+|releng/12.4 branched from stable/12.
+
+|1204500
+|gitref:6a9031c5e2ba5435aa4ea08ee05c351d5bef035d[repository="src",length=12]
+|October 20, 2022
+|12-STABLE after branching releng/12.4.
+
|===
////
@@ -2104,7 +2536,7 @@ Template:
|1100011
|link:https://svnweb.freebsd.org/changeset/base/263102[263102]
|March 13, 2014
-|11.0-CURRENT after ABI change in struct if_data.
+|11.0-CURRENT after ABI change in struct `if_data`.
|1100012
|link:https://svnweb.freebsd.org/changeset/base/263140[263140]
@@ -2149,7 +2581,7 @@ Template:
|1100020
|link:https://svnweb.freebsd.org/changeset/base/265215[265215]
|May 1, 2014
-|11.0-CURRENT after removing lindev in favor of having /dev/full by default (rev link:https://svnweb.freebsd.org/changeset/base/265212[265212]).
+|11.0-CURRENT after removing `lindev` in favor of having /dev/full by default (rev link:https://svnweb.freebsd.org/changeset/base/265212[265212]).
|1100021
|link:https://svnweb.freebsd.org/changeset/base/266151[266151]
@@ -2269,7 +2701,7 @@ Template:
|1100044
|link:https://svnweb.freebsd.org/changeset/base/274116[274116]
|November 4, 2014
-|11.0-CURRENT after adding new libraries/utilities (dpv and figpar) for data throughput visualization.
+|11.0-CURRENT after adding new libraries/utilities (`dpv` and `figpar`) for data throughput visualization.
|1100045
|link:https://svnweb.freebsd.org/changeset/base/274162[274162]
@@ -2334,7 +2766,7 @@ Template:
|1100057
|link:https://svnweb.freebsd.org/changeset/base/277897[277897]
|January 29, 2015
-|11.0-CURRENT after removal of d_thread_t.
+|11.0-CURRENT after removal of `d_thread_t`.
|1100058
|link:https://svnweb.freebsd.org/changeset/base/278228[278228]
@@ -2454,7 +2886,7 @@ Template:
|1100081
|link:https://svnweb.freebsd.org/changeset/base/289415[289415]
|October 16, 2015
-|11.0-CURRENT after undating ZFS to support resumable send/receive (rev link:https://svnweb.freebsd.org/changeset/base/289362[289362]).
+|11.0-CURRENT after `undating` ZFS to support resumable send/receive (rev link:https://svnweb.freebsd.org/changeset/base/289362[289362]).
|1100082
|link:https://svnweb.freebsd.org/changeset/base/289594[289594]
@@ -2509,7 +2941,7 @@ Template:
|1100092
|link:https://svnweb.freebsd.org/changeset/base/292499[292499]
|December 19, 2015
-|11.0-CURRENT after removal of vm_pageout_grow_cache (rev link:https://svnweb.freebsd.org/changeset/base/292469[292469]).
+|11.0-CURRENT after removal of `vm_pageout_grow_cache` (rev link:https://svnweb.freebsd.org/changeset/base/292469[292469]).
|1100093
|link:https://svnweb.freebsd.org/changeset/base/292966[292966]
@@ -2539,7 +2971,7 @@ Template:
|1100098
|link:https://svnweb.freebsd.org/changeset/base/295682[295682]
|February 16, 2016
-|11.0-CURRENT after API change to rman (rev link:https://svnweb.freebsd.org/changeset/base/294883[294883]).
+|11.0-CURRENT after API change to `rman` (rev link:https://svnweb.freebsd.org/changeset/base/294883[294883]).
|1100099
|link:https://svnweb.freebsd.org/changeset/base/295739[295739]
@@ -2554,7 +2986,7 @@ Template:
|1100101
|link:https://svnweb.freebsd.org/changeset/base/296417[296417]
|March 5, 2016
-|11.0-CURRENT after upgrading our copies of clang, llvm, lldb and compiler-rt to 3.8.0 release.
+|11.0-CURRENT after upgrading copies of clang, llvm, lldb and compiler-rt to 3.8.0 release.
|1100102
|link:https://svnweb.freebsd.org/changeset/base/296749[296749]
@@ -2564,17 +2996,17 @@ Template:
|1100103
|link:https://svnweb.freebsd.org/changeset/base/297000[297000]
|March 18, 2016
-|11.0-CURRENT after using uintmax_t for rman ranges.
+|11.0-CURRENT after using `uintmax_t` for `rman` ranges.
|1100104
|link:https://svnweb.freebsd.org/changeset/base/297156[297156]
|March 21, 2016
-|11.0-CURRENT after tracking filemon usage via a proc.p_filemon pointer rather than its own lists.
+|11.0-CURRENT after tracking `filemon` usage via a proc.p_filemon pointer rather than its own lists.
|1100105
|link:https://svnweb.freebsd.org/changeset/base/297602[297602]
|April 6, 2016
-|11.0-CURRENT after fixing sed functions `i` and `a` from discarding leading white space.
+|11.0-CURRENT after fixing sed functions `i` and `a` from discarding leading space.
|1100106
|link:https://svnweb.freebsd.org/changeset/base/298486[298486]
@@ -2584,7 +3016,7 @@ Template:
|1100107
|link:https://svnweb.freebsd.org/changeset/base/299090[299090]
|May 4, 2016
-|11.0-CURRENT after improving performance and functionality of the man:bitstring[3] api.
+|11.0-CURRENT after improving performance and functionality of the man:bitstring[3] API.
|1100108
|link:https://svnweb.freebsd.org/changeset/base/299530[299530]
@@ -2604,12 +3036,12 @@ Template:
|1100111
|link:https://svnweb.freebsd.org/changeset/base/300303[300303]
|May 20, 2016
-|11.0-CURRENT after removing brk and sbrk from arm64.
+|11.0-CURRENT after removing `brk` and `sbrk` from arm64.
|1100112
|link:https://svnweb.freebsd.org/changeset/base/300539[300539]
|May 23, 2016
-|11.0-CURRENT after adding bit_count to the man:bitstring[3] API.
+|11.0-CURRENT after adding `bit_count` to the man:bitstring[3] API.
|1100113
|link:https://svnweb.freebsd.org/changeset/base/300701[300701]
@@ -2644,7 +3076,7 @@ Template:
|1100119
|link:https://svnweb.freebsd.org/changeset/base/302150[302150]
|June 23, 2016
-|11.0-CURRENT after switching geom_disk to using a pool mutex.
+|11.0-CURRENT after switching `geom_disk` to using a pool mutex.
|1100120
|link:https://svnweb.freebsd.org/changeset/base/302153[302153]
@@ -2664,7 +3096,7 @@ Template:
|1100501
|link:https://svnweb.freebsd.org/changeset/base/304609[304609]
|August 22, 2016
-|11.0-STABLE after adding C++11 thread_local support.
+|11.0-STABLE after adding C++11 `thread_local` support.
|1100502
|link:https://svnweb.freebsd.org/changeset/base/304865[304865]
@@ -2689,7 +3121,7 @@ Template:
|1100506
|link:https://svnweb.freebsd.org/changeset/base/308048[308048]
|October 28, 2016
-|11.0-STABLE after installing header files required development with libzfs_core.
+|11.0-STABLE after installing header files required development with `libzfs_core`.
|1100507
|link:https://svnweb.freebsd.org/changeset/base/310120[310120]
@@ -2699,7 +3131,7 @@ Template:
|1100508
|link:https://svnweb.freebsd.org/changeset/base/310618[310618]
|December 26, 2016
-|11.0-STABLE after upgrading our copies of clang, llvm, lldb, compiler-rt and libc++ to 3.9.1 release, and adding lld 3.9.1.
+|11.0-STABLE after upgrading copies of clang, llvm, lldb, compiler-rt and libc++ to 3.9.1 release, and adding lld 3.9.1.
|1100509
|link:https://svnweb.freebsd.org/changeset/base/311186[311186]
@@ -2804,7 +3236,7 @@ Template:
|1101512
|link:https://svnweb.freebsd.org/changeset/base/331219[331219]
|March 19, 2018
-|11-STABLE after merging retpoline support from the upstream llvm, clang and lld 5.0 branches.
+|11-STABLE after merging `retpoline` support from the upstream llvm, clang and lld 5.0 branches.
|1101513
|link:https://svnweb.freebsd.org/changeset/base/331838[331838]
@@ -2814,12 +3246,12 @@ Template:
|1101514
|link:https://svnweb.freebsd.org/changeset/base/332089[332089]
|April 5, 2018
-|11-STABLE after merging link:https://svnweb.freebsd.org/changeset/base/328331[328331], adding a new and incompatible interpretation of ${name}_limits in rc scripts.
+|11-STABLE after merging link:https://svnweb.freebsd.org/changeset/base/328331[328331], adding a new and incompatible interpretation of `${name}_limits` in rc scripts.
|1101515
|link:https://svnweb.freebsd.org/changeset/base/332363[332363]
|April 10, 2018
-|11-STABLE after reverting link:https://svnweb.freebsd.org/changeset/base/331880[331880], removing the new and incompatible interpretation of ${name}_limits in rc scripts.
+|11-STABLE after reverting link:https://svnweb.freebsd.org/changeset/base/331880[331880], removing the new and incompatible interpretation of `${name}_limits` in rc scripts.
|1101516
|link:https://svnweb.freebsd.org/changeset/base/334392[334392]
@@ -2874,7 +3306,7 @@ Template:
|1102508
|link:https://svnweb.freebsd.org/changeset/base/346784[346784]
|April 27, 2019
-|11-STABLE after ether_gen_addr availability.
+|11-STABLE after `ether_gen_addr` availability.
|1102509
|link:https://svnweb.freebsd.org/changeset/base/347212[347212]
@@ -2914,12 +3346,12 @@ Template:
|1103504
|link:https://svnweb.freebsd.org/changeset/base/354616[354616]
|November 11, 2019
-|11-STABLE after enabling device class group attributes in the LinuxKPI.
+|11-STABLE after enabling device class group attributes in the LinuxKPI.
|1103505
|link:https://svnweb.freebsd.org/changeset/base/355899[355899]
|December 19, 2019
-|11-STABLE after adding sigsetop extensions commonly found in musl libc and glibc.
+|11-STABLE after adding `sigsetop` extensions commonly found in musl libc and glibc.
|1103506
|link:https://svnweb.freebsd.org/changeset/base/356395[356395]
@@ -2994,7 +3426,7 @@ Template:
|1104506
|link:https://svnweb.freebsd.org/changeset/base/365471[365471]
|September 8, 2020
-|11-STABLE after adding atomic and bswap functions to libcompiler_rt.
+|11-STABLE after adding atomic and `bswap` functions to libcompiler_rt.
|1104507
|link:https://svnweb.freebsd.org/changeset/base/365661[365661]
@@ -3047,7 +3479,7 @@ Template:
|1000003
|link:https://svnweb.freebsd.org/changeset/base/228571[228571]
|December 16, 2011
-|10-CURRENT after major changes to man:carp[4], changing size of struct in_aliasreq, struct in6_aliasreq (rev link:https://svnweb.freebsd.org/changeset/base/228571[228571]) and straitening arguments check of SIOCAIFADDR (rev link:https://svnweb.freebsd.org/changeset/base/228574[228574]).
+|10-CURRENT after major changes to man:carp[4], changing size of struct `in_aliasreq`, struct in6_aliasreq (rev link:https://svnweb.freebsd.org/changeset/base/228571[228571]) and straitening arguments check of SIOCAIFADDR (rev link:https://svnweb.freebsd.org/changeset/base/228574[228574]).
|1000004
|link:https://svnweb.freebsd.org/changeset/base/229204[229204]
@@ -3082,7 +3514,7 @@ Template:
|1000010
|link:https://svnweb.freebsd.org/changeset/base/233757[233757]
|March 31, 2012
-|10-CURRENT after xlocale cleanup.
+|10-CURRENT after `xlocale` cleanup.
|1000011
|link:https://svnweb.freebsd.org/changeset/base/234355[234355]
@@ -3097,7 +3529,7 @@ Template:
|1000013
|link:https://svnweb.freebsd.org/changeset/base/235788[235788]
|May 22, 2012
-|10-CURRENT after byacc import.
+|10-CURRENT after `byacc` import.
|1000014
|link:https://svnweb.freebsd.org/changeset/base/237631[237631]
@@ -3137,7 +3569,7 @@ Template:
|1000020
|link:https://svnweb.freebsd.org/changeset/base/241610[241610]
|October 16, 2012
-|10-CURRENT after the network interface cloning KPI changed and struct if_clone becoming opaque.
+|10-CURRENT after the network interface cloning KPI changed and struct `if_clone` becoming opaque.
|1000021
|link:https://svnweb.freebsd.org/changeset/base/241897[241897]
@@ -3192,7 +3624,7 @@ Template:
|1000031
|link:https://svnweb.freebsd.org/changeset/base/249943[249943]
|April 26, 2013
-|10-CURRENT after the dst parameter of the ifnet `if_output` method was changed to take const qualifier (rev link:https://svnweb.freebsd.org/changeset/base/249925[249925]).
+|10-CURRENT after the `dst` parameter of the ifnet `if_output` method was changed to take const qualifier (rev link:https://svnweb.freebsd.org/changeset/base/249925[249925]).
|1000032
|link:https://svnweb.freebsd.org/changeset/base/250163[250163]
@@ -3237,7 +3669,7 @@ Template:
|1000040
|link:https://svnweb.freebsd.org/changeset/base/253638[253638]
|July 24, 2013
-|10-CURRENT after addition of libusb pkgconf files.
+|10-CURRENT after addition of libusb `pkgconf` files.
|1000041
|link:https://svnweb.freebsd.org/changeset/base/253970[253970]
@@ -3472,7 +3904,7 @@ Template:
|1001507
|link:https://svnweb.freebsd.org/changeset/base/277790[277790]
|January 27, 2015
-|10-STABLE after changes to the UDP tunneling callback to provide a context pointer and the source sockaddr.
+|10-STABLE after changes to the UDP tunneling callback to provide a context pointer and the source `sockaddr`.
|1001508
|link:https://svnweb.freebsd.org/changeset/base/278974[278974]
@@ -3482,7 +3914,9 @@ Template:
|1001509
|link:https://svnweb.freebsd.org/changeset/base/279287[279287]
|February 25, 2015
+pass:[<!-- vale Vale.Terms = NO -->]
|10-STABLE after FreeBSD-EN-15:01.vt, FreeBSD-EN-15:02.openssl, FreeBSD-EN-15:03.freebsd-update, FreeBSD-SA-15:04.igmp, and FreeBSD-SA-15:05.bind.
+pass:[<!-- vale Vale.Terms = YES -->]
|1001510
|link:https://svnweb.freebsd.org/changeset/base/279329[279329]
@@ -3547,7 +3981,7 @@ Template:
|1002501
|link:https://svnweb.freebsd.org/changeset/base/289005[289005]
|October 8, 2015
-|10-STABLE after merge of ZFS changes that affected the internal interface of zfeature_info structure (rev link:https://svnweb.freebsd.org/changeset/base/288572[288572]).
+|10-STABLE after merge of ZFS changes that affected the internal interface of `zfeature_info` structure (rev link:https://svnweb.freebsd.org/changeset/base/288572[288572]).
|1002502
|link:https://svnweb.freebsd.org/changeset/base/291243[291243]
@@ -3602,7 +4036,7 @@ Template:
|1003501
|link:https://svnweb.freebsd.org/changeset/base/298299[298299]
|June 19, 2016
-|10-STABLE after adding kdbcontrol's -P option (rev link:https://svnweb.freebsd.org/changeset/base/298297[298297]).
+|10-STABLE after adding -P option for `kdbcontrol` (rev link:https://svnweb.freebsd.org/changeset/base/298297[298297]).
|1003502
|link:https://svnweb.freebsd.org/changeset/base/299966[299966]
@@ -3612,12 +4046,12 @@ Template:
|1003503
|link:https://svnweb.freebsd.org/changeset/base/300235[300235]
|June 19, 2016
-|10-STABLE after allowing MK_ overrides (rev link:https://svnweb.freebsd.org/changeset/base/300233[300233]).
+|10-STABLE after allowing `MK_` overrides (rev link:https://svnweb.freebsd.org/changeset/base/300233[300233]).
|1003504
|link:https://svnweb.freebsd.org/changeset/base/302066[302066]
|June 21, 2016
-|10-STABLE after MFC of filemon changes from 11-CURRENT.
+|10-STABLE after MFC of `filemon` changes from 11-CURRENT.
|1003505
|link:https://svnweb.freebsd.org/changeset/base/302228[302228]
@@ -3627,7 +4061,7 @@ Template:
|1003506
|link:https://svnweb.freebsd.org/changeset/base/304611[304611]
|August 22, 2016
-|10-STABLE after adding C++11 thread_local support.
+|10-STABLE after adding C++11 `thread_local` support.
|1003507
|link:https://svnweb.freebsd.org/changeset/base/304864[304864]
@@ -3730,12 +4164,12 @@ Template:
|900002
|link:https://svnweb.freebsd.org/changeset/base/197430[197430]
|September 23, 2009
-|9.0-CURRENT after implementing the EVFILT_USER kevent filter functionality.
+|9.0-CURRENT after implementing the EVFILT_USER `kevent` filter functionality.
|900003
|link:https://svnweb.freebsd.org/changeset/base/200039[200039]
|December 2, 2009
-|9.0-CURRENT after addition of man:sigpause[2] and PIE support in csu.
+|9.0-CURRENT after addition of man:sigpause[2] and PIE support in `csu`.
|900004
|link:https://svnweb.freebsd.org/changeset/base/200185[200185]
@@ -3755,7 +4189,7 @@ Template:
|900007
|link:https://svnweb.freebsd.org/changeset/base/202219[202219]
|January 13, 2010
-|9.0-CURRENT after the removal of man:utmp[5] and the addition of utmpx (see man:getutxent[3]) for improved logging of user logins and system events.
+|9.0-CURRENT after the removal of man:utmp[5] and the addition of `utmpx` (see man:getutxent[3]) for improved logging of user logins and system events.
|900008
|link:https://svnweb.freebsd.org/changeset/base/202722[202722]
@@ -3775,7 +4209,7 @@ Template:
|900011
|link:https://svnweb.freebsd.org/changeset/base/207410[207410]
|April 24, 2010
-|9.0-CURRENT after adding soft-updates journalling.
+|9.0-CURRENT after adding soft-updates journaling.
|900012
|link:https://svnweb.freebsd.org/changeset/base/207842[207842]
@@ -3800,7 +4234,7 @@ Template:
|900016
|link:https://svnweb.freebsd.org/changeset/base/210565[210565]
|July 28, 2010
-|9.0-CURRENT after adding mti_zone to struct malloc_type_internal.
+|9.0-CURRENT after adding `mti_zone` to struct `malloc_type_internal`.
|900017
|link:https://svnweb.freebsd.org/changeset/base/211701[211701]
@@ -3810,7 +4244,7 @@ Template:
|900018
|link:https://svnweb.freebsd.org/changeset/base/211735[211735]
|August 24, 2010
-|9.0-CURRENT after the man:pthread_kill[3] -generated signal is identified as SI_LWP in si_code. Previously, si_code was SI_USER.
+|9.0-CURRENT after the man:pthread_kill[3] -generated signal is identified as SI_LWP in `si_code`. Previously, `si_code` was SI_USER.
|900019
|link:https://svnweb.freebsd.org/changeset/base/211937[211937]
@@ -3820,7 +4254,7 @@ Template:
|900020
|link:https://svnweb.freebsd.org/changeset/base/212381[212381]
|September 9, 2010
-|9.0-CURRENT after adding drain functionality to sbufs, which also changed the layout of struct sbuf.
+|9.0-CURRENT after adding drain functionality to `sbufs`, which also changed the layout of struct `sbuf`.
|900021
|link:https://svnweb.freebsd.org/changeset/base/212568[212568]
@@ -3850,7 +4284,7 @@ Template:
|900026
|link:https://svnweb.freebsd.org/changeset/base/216088[216088]
|November 30, 2010
-|9.0-CURRENT after the introduction of Serial Management Protocol (SMP) passthrough and the XPT_SMP_IO and XPT_GDEV_ADVINFO CAM CCBs.
+|9.0-CURRENT after the introduction of Serial Management Protocol (SMP) passthrough and the XPT_SMP_IO and XPT_GDEV_ADVINFO CAM `CCBs`.
|900027
|link:https://svnweb.freebsd.org/changeset/base/216212[216212]
@@ -3880,7 +4314,7 @@ Template:
|900032
|link:https://svnweb.freebsd.org/changeset/base/218425[218425]
|February 8, 2011
-|9.0-CURRENT after the removal of the uio_yield prototype and symbol.
+|9.0-CURRENT after the removal of the `uio_yield` prototype and symbol.
|900033
|link:https://svnweb.freebsd.org/changeset/base/218822[218822]
@@ -3890,7 +4324,7 @@ Template:
|900034
|link:https://svnweb.freebsd.org/changeset/base/219406[219406]
|March 8, 2011
-|9.0-CURRENT after the struct sysvec (sv_schedtail) changes.
+|9.0-CURRENT after the struct `sysvec` (`sv_schedtail`) changes.
|900035
|link:https://svnweb.freebsd.org/changeset/base/220150[220150]
@@ -4015,7 +4449,7 @@ Template:
|901505
|link:https://svnweb.freebsd.org/changeset/base/251687[251687]
|June 13, 2013
-|9.1-STABLE after fixes in ctfmerge bootstrapping (rev link:https://svnweb.freebsd.org/changeset/base/249243[249243]).
+|9.1-STABLE after fixes in `ctfmerge` bootstrapping (rev link:https://svnweb.freebsd.org/changeset/base/249243[249243]).
|902001
|link:https://svnweb.freebsd.org/changeset/base/253912[253912]
@@ -4130,7 +4564,9 @@ Template:
|903508
|link:https://svnweb.freebsd.org/changeset/base/279287[279287]
|February 25, 2015
+pass:[<!-- vale Vale.Terms = NO -->]
|9-STABLE after FreeBSD-EN-15:01.vt, FreeBSD-EN-15:02.openssl, FreeBSD-EN-15:03.freebsd-update, FreeBSD-SA-15:04.igmp, and FreeBSD-SA-15:05.bind.
+pass:[<!-- vale Vale.Terms = YES -->]
|903509
|link:https://svnweb.freebsd.org/changeset/base/296219[296219]
@@ -4163,7 +4599,7 @@ Template:
|800000
|link:https://svnweb.freebsd.org/changeset/base/172531[172531]
|October 11, 2007
-|8.0-CURRENT. Separating wide and single byte ctype.
+|8.0-CURRENT. Separating wide and single byte `ctype`.
|800001
|link:https://svnweb.freebsd.org/changeset/base/172688[172688]
@@ -4193,7 +4629,7 @@ Template:
|800006
|link:https://svnweb.freebsd.org/changeset/base/174399[174399]
|December 7, 2007
-|8.0-CURRENT after the addition of callgraph capture functionality to man:hwpmc[4].
+|8.0-CURRENT after the addition of `callgraph` capture functionality to man:hwpmc[4].
|800007
|link:https://svnweb.freebsd.org/changeset/base/174901[174901]
@@ -4253,7 +4689,7 @@ Template:
|800018
|link:https://svnweb.freebsd.org/changeset/base/176112[176112]
|February 8, 2008
-|8.0-CURRENT after the addition of m_collapse.
+|8.0-CURRENT after the addition of `m_collapse`.
|800019
|link:https://svnweb.freebsd.org/changeset/base/176124[176124]
@@ -4293,17 +4729,17 @@ Template:
|800026
|link:https://svnweb.freebsd.org/changeset/base/177086[177086]
|March 12, 2008
-|8.0-CURRENT after changing the priority parameter to cv_broadcastpri such that 0 means no priority.
+|8.0-CURRENT after changing the priority parameter to `cv_broadcastpri` such that 0 means no priority.
|800027
|link:https://svnweb.freebsd.org/changeset/base/177551[177551]
|March 24, 2008
-|8.0-CURRENT after changing the bpf monitoring ABI when zerocopy bpf buffers were added.
+|8.0-CURRENT after changing the bpf monitoring ABI when `zerocopy` bpf buffers were added.
|800028
|link:https://svnweb.freebsd.org/changeset/base/177637[177637]
|March 26, 2008
-|8.0-CURRENT after adding l_sysid to struct flock.
+|8.0-CURRENT after adding `l_sysid` to struct flock.
|800029
|link:https://svnweb.freebsd.org/changeset/base/177688[177688]
@@ -4323,7 +4759,7 @@ Template:
|800032
|link:https://svnweb.freebsd.org/changeset/base/178006[178006]
|April 8, 2008
-|8.0-CURRENT after the implementation of the openat and related syscalls, introduction of the O_EXEC flag for the man:open[2], and providing the corresponding linux compatibility syscalls.
+|8.0-CURRENT after the implementation of the `openat` and related syscalls, introduction of the O_EXEC flag for the man:open[2], and providing the corresponding Linux compatibility syscalls.
|800033
|link:https://svnweb.freebsd.org/changeset/base/178017[178017]
@@ -4343,7 +4779,7 @@ Template:
|800036
|link:https://svnweb.freebsd.org/changeset/base/178362[178362]
|April 20, 2008
-|8.0-CURRENT after switchover of 802.11 wireless to multi-bss support (aka vaps).
+|8.0-CURRENT after switchover of 802.11 wireless to multi-bss support (aka `vaps`).
|800037
|link:https://svnweb.freebsd.org/changeset/base/178892[178892]
@@ -4353,17 +4789,17 @@ Template:
|800038
|link:https://svnweb.freebsd.org/changeset/base/179316[179316]
|May 26, 2008
-|8.0-CURRENT after removal of netatm and ISDN4BSD. Also, the addition of the Compact C Type (CTF) tools.
+|8.0-CURRENT after removal of `netatm` and ISDN4BSD. Also, the addition of the Compact C Type (CTF) tools.
|800039
|link:https://svnweb.freebsd.org/changeset/base/179784[179784]
|June 14, 2008
-|8.0-CURRENT after removal of sgtty.
+|8.0-CURRENT after removal of `sgtty`.
|800040
|link:https://svnweb.freebsd.org/changeset/base/180025[180025]
|June 26, 2008
-|8.0-CURRENT with kernel NFS lockd client.
+|8.0-CURRENT with kernel NFS `lockd` client.
|800041
|link:https://svnweb.freebsd.org/changeset/base/180691[180691]
@@ -4383,7 +4819,7 @@ Template:
|800044
|link:https://svnweb.freebsd.org/changeset/base/181803[181803]
|August 17, 2008
-|8.0-CURRENT after the commit of the first step of the vimage project renaming global variables to be virtualized with a V_ prefix with macros to map them back to their global names.
+|8.0-CURRENT after the commit of the first step of the VIMAGE project renaming global variables to be virtualized with a `V_` prefix with macros to map them back to their global names.
|800045
|link:https://svnweb.freebsd.org/changeset/base/181905[181905]
@@ -4403,7 +4839,7 @@ Template:
|800048
|link:https://svnweb.freebsd.org/changeset/base/183091[183091]
|September 16, 2008
-|8.0-CURRENT after converting the kernel NFS mount code to accept individual mount options in the man:nmount[2] iovec, not just one big struct nfs_args.
+|8.0-CURRENT after converting the kernel NFS mount code to accept individual mount options in the man:nmount[2] `iovec`, not just one big struct nfs_args.
|800049
|link:https://svnweb.freebsd.org/changeset/base/183114[183114]
@@ -4423,7 +4859,7 @@ Template:
|800052
|link:https://svnweb.freebsd.org/changeset/base/184419[184419]
|October 28, 2008
-|8.0-CURRENT after the introduction of accmode_t and renaming of VOP_ACCESS 'a_mode' argument to 'a_accmode'.
+|8.0-CURRENT after the introduction of `accmode_t` and renaming of VOP_ACCESS `a_mode` argument to `a_accmode`.
|800053
|link:https://svnweb.freebsd.org/changeset/base/184555[184555]
@@ -4433,7 +4869,7 @@ Template:
|800054
|link:https://svnweb.freebsd.org/changeset/base/185162[185162]
|November 22, 2008
-|8.0-CURRENT after the addition of buf_ring, memory barriers and ifnet functions to facilitate multiple hardware transmit queues for cards that support them, and a lockless ring-buffer implementation to enable drivers to more efficiently manage queuing of packets.
+|8.0-CURRENT after the addition of `buf_ring`, memory barriers and ifnet functions to facilitate multiple hardware transmit queues for cards that support them, and a lockless ring-buffer implementation to enable drivers to more efficiently manage queuing of packets.
|800055
|link:https://svnweb.freebsd.org/changeset/base/185363[185363]
@@ -4448,7 +4884,7 @@ Template:
|800057
|link:https://svnweb.freebsd.org/changeset/base/185522[185522]
|December 1, 2008
-|8.0-CURRENT after the switch to the ath hal source code.
+|8.0-CURRENT after the switch to the ath `hal` source code.
|800058
|link:https://svnweb.freebsd.org/changeset/base/185968[185968]
@@ -4503,7 +4939,7 @@ Template:
|800068
|link:https://svnweb.freebsd.org/changeset/base/189276[189276]
|March 2, 2009
-|8.0-CURRENT after renaming the ushub devclass to uhub.
+|8.0-CURRENT after renaming the `ushub` devclass to `uhub`.
|800069
|link:https://svnweb.freebsd.org/changeset/base/189585[189585]
@@ -4553,12 +4989,12 @@ Template:
|800078
|link:https://svnweb.freebsd.org/changeset/base/191080[191080]
|April 15, 2009
-|8.0-CURRENT after struct rt_weight fields have been added to struct rt_metrics and struct rt_metrics_lite, changing the layout of struct rt_metrics_lite. A bump to RTM_VERSION was made, but backed out.
+|8.0-CURRENT after struct `rt_weight` fields have been added to struct `rt_metrics` and struct `rt_metrics_lite`, changing the layout of struct `rt_metrics_lite`. A bump to RTM_VERSION was made, but backed out.
|800079
|link:https://svnweb.freebsd.org/changeset/base/191117[191117]
|April 15, 2009
-|8.0-CURRENT after struct llentry pointers are added to struct route and struct route_in6.
+|8.0-CURRENT after struct `llentry` pointers are added to struct route and struct route_in6.
|800080
|link:https://svnweb.freebsd.org/changeset/base/191126[191126]
@@ -4568,12 +5004,12 @@ Template:
|800081
|link:https://svnweb.freebsd.org/changeset/base/191267[191267]
|April 19, 2009
-|8.0-CURRENT after the layout of struct malloc_type has been changed.
+|8.0-CURRENT after the layout of struct `malloc_type` has been changed.
|800082
|link:https://svnweb.freebsd.org/changeset/base/191368[191368]
|April 21, 2009
-|8.0-CURRENT after the layout of struct ifnet has changed, and with `if_ref()` and `if_rele()` ifnet refcounting.
+|8.0-CURRENT after the layout of struct ifnet has changed, and with `if_ref()` and `if_rele()` ifnet `refcounting`.
|800083
|link:https://svnweb.freebsd.org/changeset/base/191389[191389]
@@ -4628,7 +5064,7 @@ Template:
|800093
|link:https://svnweb.freebsd.org/changeset/base/193047[193047]
|May 29, 2009
-|8.0-CURRENT after adding mnt_xflag to struct mount.
+|8.0-CURRENT after adding `mnt_xflag` to struct mount.
|800094
|link:https://svnweb.freebsd.org/changeset/base/193093[193093]
@@ -4643,7 +5079,7 @@ Template:
|800096
|link:https://svnweb.freebsd.org/changeset/base/193219[193219]
|June 1, 2009
-|8.0-CURRENT after updating to the new netisr implementation and after changing the way we store and access FIBs.
+|8.0-CURRENT after updating to the new netisr implementation and after changing the way of storing and accessing FIBs.
|800097
|link:https://svnweb.freebsd.org/changeset/base/193731[193731]
@@ -4678,12 +5114,12 @@ Template:
|800102
|link:https://svnweb.freebsd.org/changeset/base/195634[195634]
|July 12, 2009
-|8.0-CURRENT after padding was added to struct sackhint, struct tcpcb, and struct tcpstat.
+|8.0-CURRENT after padding was added to struct `sackhint`, struct tcpcb, and struct `tcpstat`.
|800103
|link:https://svnweb.freebsd.org/changeset/base/195654[195654]
|July 13, 2009
-|8.0-CURRENT after replacing struct tcpopt with struct toeopt in the TOE driver interface to the TCP syncache.
+|8.0-CURRENT after replacing struct `tcpopt` with struct `toeopt` in the TOE driver interface to the TCP `syncache`.
|800104
|link:https://svnweb.freebsd.org/changeset/base/195699[195699]
@@ -4703,12 +5139,12 @@ Template:
|800107
|link:https://svnweb.freebsd.org/changeset/base/196037[196037]
|August 2, 2009
-|8.0-CURRENT after making the newbus subsystem Giant free by adding the newbus sxlock and 8.0-RELEASE.
+|8.0-CURRENT after making the newbus subsystem Giant free by adding the newbus `sxlock` and 8.0-RELEASE.
|800108
|link:https://svnweb.freebsd.org/changeset/base/199627[199627]
|November 21, 2009
-|8.0-STABLE after implementing EVFILT_USER kevent filter.
+|8.0-STABLE after implementing EVFILT_USER `kevent` filter.
|800500
|link:https://svnweb.freebsd.org/changeset/base/201749[201749]
@@ -4753,7 +5189,7 @@ Template:
|801501
|link:https://svnweb.freebsd.org/changeset/base/214762[214762]
|November 3, 2010
-|8.1-STABLE after KBI change in struct sysentvec, and implementation of PL_FLAG_SCE/SCX/EXEC/SI and pl_siginfo for ptrace(PT_LWPINFO) .
+|8.1-STABLE after KBI change in struct `sysentvec`, and implementation of PL_FLAG_SCE/SCX/EXEC/SI and `pl_siginfo` for ptrace(PT_LWPINFO) .
|802000
|link:https://svnweb.freebsd.org/changeset/base/216639[216639]
@@ -4803,7 +5239,7 @@ Template:
|802508
|link:https://svnweb.freebsd.org/changeset/base/222846[222846]
|June 8, 2011
-|8.2-STABLE after removal of the schedtail event handler and addition of the sv_schedtail method to struct sysvec.
+|8.2-STABLE after removal of the `schedtail` event handler and addition of the `sv_schedtail` method to struct `sysvec`.
|802509
|link:https://svnweb.freebsd.org/changeset/base/224017[224017]
@@ -4913,7 +5349,9 @@ Template:
|804508
|link:https://svnweb.freebsd.org/changeset/base/279287[279287]
|February 25, 2015
+pass:[<!-- vale Vale.Terms = NO -->]
|8-STABLE after FreeBSD-EN-15:01.vt, FreeBSD-EN-15:02.openssl, FreeBSD-EN-15:03.freebsd-update, FreeBSD-SA-15:04.igmp, and FreeBSD-SA-15:05.bind.
+pass:[<!-- vale Vale.Terms = YES -->]
|804509
|link:https://svnweb.freebsd.org/changeset/base/305736[305736]
@@ -4946,7 +5384,7 @@ Template:
|700002
|link:https://svnweb.freebsd.org/changeset/base/149039[149039]
|August 13, 2005
-|7.0-CURRENT after credential argument is added to dev_clone event handler.
+|7.0-CURRENT after credential argument is added to `dev_clone` event handler.
|700003
|link:https://svnweb.freebsd.org/changeset/base/149470[149470]
@@ -4971,7 +5409,7 @@ Template:
|700007
|link:https://svnweb.freebsd.org/changeset/base/153027[153027]
|December 2, 2005
-|7.0-CURRENT after incorporating scripts from the local_startup directories into the base man:rcorder[8].
+|7.0-CURRENT after incorporating scripts from the `local_startup` directories into the base man:rcorder[8].
|700008
|link:https://svnweb.freebsd.org/changeset/base/153107[153107]
@@ -4986,12 +5424,12 @@ Template:
|700010
|link:https://svnweb.freebsd.org/changeset/base/153579[153579]
|December 20, 2005
-|7.0-CURRENT after addition of hostb and vgapci drivers, addition of `pci_find_extcap()`, and changing the AGP drivers to no longer map the aperture.
+|7.0-CURRENT after addition of `hostb` and `vgapci` drivers, addition of `pci_find_extcap()`, and changing the AGP drivers to no longer map the aperture.
|700011
|link:https://svnweb.freebsd.org/changeset/base/153936[153936]
|December 31, 2005
-|7.0-CURRENT after tv_sec was made time_t on all platforms but Alpha.
+|7.0-CURRENT after `tv_sec` was made `time_t` on all platforms but Alpha.
|700012
|link:https://svnweb.freebsd.org/changeset/base/154114[154114]
@@ -5001,7 +5439,7 @@ Template:
|700013
|link:https://svnweb.freebsd.org/changeset/base/154269[154269]
|January 12, 2006
-|7.0-CURRENT after changes to [.filename]#/etc/rc.d/abi# to support [.filename]#/compat/linux/etc/ld.so.cache# being a symlink in a readonly filesystem.
+|7.0-CURRENT after changes to [.filename]#/etc/rc.d/abi# to support [.filename]#/compat/linux/etc/ld.so.cache# being a symlink in a read-only filesystem.
|700014
|link:https://svnweb.freebsd.org/changeset/base/154863[154863]
@@ -5036,7 +5474,7 @@ Template:
|700020
|link:https://svnweb.freebsd.org/changeset/base/161931[161931]
|September 3, 2006
-|7.0-CURRENT after addition of bus_dma_get_tag function
+|7.0-CURRENT after addition of `bus_dma_get_tag` function
|700021
|link:https://svnweb.freebsd.org/changeset/base/162023[162023]
@@ -5046,7 +5484,7 @@ Template:
|700022
|link:https://svnweb.freebsd.org/changeset/base/162170[162170]
|September 9, 2006
-|7.0-CURRENT after dlsym change to look for a requested symbol both in specified dso and its implicit dependencies.
+|7.0-CURRENT after `dlsym` change to look for a requested symbol both in specified DSO and its implicit dependencies.
|700023
|link:https://svnweb.freebsd.org/changeset/base/162588[162588]
@@ -5076,7 +5514,7 @@ Template:
|700028
|link:https://svnweb.freebsd.org/changeset/base/165242[165242]
|December 15, 2006
-|7.0-CURRENT after the addition of sctp calls to libc
+|7.0-CURRENT after the addition of `sctp` calls to libc
|700029
|link:https://svnweb.freebsd.org/changeset/base/166259[166259]
@@ -5176,7 +5614,7 @@ Template:
|700048
|link:https://svnweb.freebsd.org/changeset/base/170613[170613]
|June 12, 2007
-|7.0-CURRENT after RFC 3678 API support added to the IPv4 stack. Legacy RFC 1724 behavior of the IP_MULTICAST_IF ioctl has now been removed; 0.0.0.0/8 may no longer be used to specify an interface index. Use struct ipmreqn instead.
+|7.0-CURRENT after RFC 3678 API support added to the IPv4 stack. Legacy RFC 1724 behavior of the IP_MULTICAST_IF ioctl has now been removed; 0.0.0.0/8 may no longer be used to specify an interface index. Use struct `ipmreqn` instead.
|700049
|link:https://svnweb.freebsd.org/changeset/base/171175[171175]
@@ -5236,7 +5674,7 @@ Template:
|700103
|link:https://svnweb.freebsd.org/changeset/base/178061[178061]
|April 10, 2008
-|7.0-STABLE after adding l_sysid to struct flock.
+|7.0-STABLE after adding `l_sysid` to struct flock.
|700104
|link:https://svnweb.freebsd.org/changeset/base/178108[178108]
@@ -5246,7 +5684,7 @@ Template:
|700105
|link:https://svnweb.freebsd.org/changeset/base/178120[178120]
|April 11, 2008
-|7.0-STABLE after the MFC of umtx features.
+|7.0-STABLE after the MFC of `umtx` features.
|700106
|link:https://svnweb.freebsd.org/changeset/base/178225[178225]
@@ -5271,7 +5709,7 @@ Template:
|700110
|link:https://svnweb.freebsd.org/changeset/base/181328[181328]
|August 5, 2008
-|7.0-STABLE after MFC of kernel NFS lockd client.
+|7.0-STABLE after MFC of kernel NFS `lockd` client.
|700111
|link:https://svnweb.freebsd.org/changeset/base/181940[181940]
@@ -5336,7 +5774,7 @@ Template:
|702101
|link:https://svnweb.freebsd.org/changeset/base/192149[192149]
|May 15, 2009
-|7.2-STABLE after man:ichsmb[4] was changed to use left-adjusted slave addressing to match other SMBus controller drivers.
+|7.2-STABLE after man:ichsmb[4] was changed to use left-adjusted secondary addressing to match other SMBus controller drivers.
|702102
|link:https://svnweb.freebsd.org/changeset/base/193020[193020]
@@ -5414,12 +5852,12 @@ Template:
|600002
|link:https://svnweb.freebsd.org/changeset/base/134514[134514]
|August 30, 2004
-|6.0-CURRENT after initial addition of ifi_epoch to struct if_data. Backed out after a few days. Do not use this value.
+|6.0-CURRENT after initial addition of `ifi_epoch` to struct `if_data`. Backed out after a few days. Do not use this value.
|600003
|link:https://svnweb.freebsd.org/changeset/base/134933[134933]
|September 8, 2004
-|6.0-CURRENT after the re-addition of the ifi_epoch member of struct if_data.
+|6.0-CURRENT after the re-addition of the `ifi_epoch` member of struct `if_data`.
|600004
|link:https://svnweb.freebsd.org/changeset/base/135920[135920]
@@ -5444,7 +5882,7 @@ Template:
|600008
|link:https://svnweb.freebsd.org/changeset/base/140809[140809]
|January 25, 2005
-|6.0-CURRENT after changes to `VOP_*VOBJECT()` functions and introduction of `MNTK_MPSAFE` flag for Giantfree filesystems.
+|6.0-CURRENT after changes to `VOP_*VOBJECT()` functions and introduction of `MNTK_MPSAFE` flag for Giant-free filesystems.
|600009
|link:https://svnweb.freebsd.org/changeset/base/141250[141250]
@@ -5479,7 +5917,7 @@ Template:
|600015
|link:https://svnweb.freebsd.org/changeset/base/142501[142501]
|February 25, 2005
-|6.0-CURRENT after changing the struct if_data member, ifi_epoch, from wall clock time to uptime.
+|6.0-CURRENT after changing the struct `if_data` member, `ifi_epoch`, from wall clock time to uptime.
|600016
|link:https://svnweb.freebsd.org/changeset/base/142582[142582]
@@ -5499,7 +5937,7 @@ Template:
|600019
|link:https://svnweb.freebsd.org/changeset/base/142752[142752]
|February 28, 2005
-|Installation of acpica includes into /usr/include.
+|Installation of `acpica` includes into /usr/include.
|600020
|link:https://svnweb.freebsd.org/changeset/base/143308[143308]
@@ -5529,7 +5967,7 @@ Template:
|600025
|link:https://svnweb.freebsd.org/changeset/base/145565[145565]
|April 26, 2005
-|struct icmphdr added to 6.0-CURRENT.
+|struct `icmphdr` added to 6.0-CURRENT.
|600026
|link:https://svnweb.freebsd.org/changeset/base/145843[145843]
@@ -5539,7 +5977,7 @@ Template:
|600027
|link:https://svnweb.freebsd.org/changeset/base/145966[145966]
|May 6, 2005
-|Kernel libalias and ng_nat introduced.
+|Kernel libalias and `ng_nat` introduced.
|600028
|link:https://svnweb.freebsd.org/changeset/base/146191[146191]
@@ -5559,7 +5997,7 @@ Template:
|600031
|link:https://svnweb.freebsd.org/changeset/base/147256[147256]
|June 10, 2005
-|6.0-CURRENT after struct ifnet was broken out of the driver softcs.
+|6.0-CURRENT after struct ifnet was broken out of the driver `softcs`.
|600032
|link:https://svnweb.freebsd.org/changeset/base/147898[147898]
@@ -5574,7 +6012,7 @@ Template:
|600034
|link:https://svnweb.freebsd.org/changeset/base/149040[149040]
|August 13, 2005
-|6.0-STABLE after credential argument is added to dev_clone event handler. 6.0-RELEASE.
+|6.0-STABLE after credential argument is added to `dev_clone` event handler. 6.0-RELEASE.
|600100
|link:https://svnweb.freebsd.org/changeset/base/151958[151958]
@@ -5584,7 +6022,7 @@ Template:
|600101
|link:https://svnweb.freebsd.org/changeset/base/153601[153601]
|December 21, 2005
-|6.0-STABLE after incorporating scripts from the local_startup directories into the base man:rcorder[8].
+|6.0-STABLE after incorporating scripts from the `local_startup` directories into the base man:rcorder[8].
|600102
|link:https://svnweb.freebsd.org/changeset/base/153912[153912]
@@ -5619,7 +6057,7 @@ Template:
|601101
|link:https://svnweb.freebsd.org/changeset/base/159861[159861]
|June 22, 2006
-|6.1-STABLE after the import of csup.
+|6.1-STABLE after the import of `csup`.
|601102
|link:https://svnweb.freebsd.org/changeset/base/160253[160253]
@@ -5629,7 +6067,7 @@ Template:
|601103
|link:https://svnweb.freebsd.org/changeset/base/160429[160429]
|July 17, 2006
-|6.1-STABLE after the resolver update to BIND9, and exposure of reentrant version of netdb functions.
+|6.1-STABLE after the resolver update to BIND9, and exposure of reentrant version of `netdb` functions.
|601104
|link:https://svnweb.freebsd.org/changeset/base/161098[161098]
@@ -5639,7 +6077,7 @@ Template:
|601105
|link:https://svnweb.freebsd.org/changeset/base/161900[161900]
|September 2, 2006
-|6.1-STABLE after 802.11 fixups changed the api for the IEEE80211_IOC_STA_INFO ioctl.
+|6.1-STABLE after 802.11 fix-ups changed the API for the IEEE80211_IOC_STA_INFO ioctl.
|602000
|link:https://svnweb.freebsd.org/changeset/base/164312[164312]
@@ -5664,7 +6102,7 @@ Template:
|602103
|link:https://svnweb.freebsd.org/changeset/base/166039[166039]
|January 16, 2007
-|6.2-STABLE after MFC of dlsym change to look for a requested symbol both in specified dso and its implicit dependencies.
+|6.2-STABLE after MFC of `dlsym` change to look for a requested symbol both in specified DSO and its implicit dependencies.
|602104
|link:https://svnweb.freebsd.org/changeset/base/166314[166314]
@@ -5694,7 +6132,7 @@ Template:
|602109
|link:https://svnweb.freebsd.org/changeset/base/168805[168805]
|April 17, 2007
-|6.2-STABLE after MFC of readline 5.2 patchset 002.
+|6.2-STABLE after MFC of readline 5.2 patch-set 002.
|602110
|link:https://svnweb.freebsd.org/changeset/base/169222[169222]
@@ -5714,7 +6152,7 @@ Template:
|602113
|link:https://svnweb.freebsd.org/changeset/base/172986[172986]
|October 25, 2007
-|6.2-STABLE after MFC of wide and single byte ctype separation. Newly compiled binary that references to ctype.h may require a new symbol, __mb_sb_limit, which is not available on older systems.
+|6.2-STABLE after MFC of wide and single byte ctype separation. Newly compiled binary that references to ctype.h may require a new symbol, `__mb_sb_limit`, which is not available on older systems.
|602114
|link:https://svnweb.freebsd.org/changeset/base/173170[173170]
@@ -5744,7 +6182,7 @@ Template:
|603102
|link:https://svnweb.freebsd.org/changeset/base/178459[178459]
|April 24, 2008
-|6.3-STABLE after adding l_sysid to struct flock.
+|6.3-STABLE after adding `l_sysid` to struct flock.
|603103
|link:https://svnweb.freebsd.org/changeset/base/179367[179367]
@@ -5787,7 +6225,7 @@ Template:
|500001
|link:https://svnweb.freebsd.org/changeset/base/59348[59348]
|April 18, 2000
-|5.0-CURRENT after adding addition ELF header fields, and changing our ELF binary branding method.
+|5.0-CURRENT after adding addition ELF header fields, and changing ELF binary branding method.
|500002
|link:https://svnweb.freebsd.org/changeset/base/59906[59906]
@@ -5867,7 +6305,7 @@ Template:
|500017
|link:https://svnweb.freebsd.org/changeset/base/72650[72650]
|February 18, 2001
-|5.0-CURRENT after switch from struct ucred to struct xucred to stabilize kernel-exported API for mountd et al.
+|5.0-CURRENT after switch from struct `ucred` to struct `xucred` to stabilize kernel-exported API for mountd et al.
|500018
|link:https://svnweb.freebsd.org/changeset/base/72975[72975]
@@ -5902,12 +6340,12 @@ Template:
|500024
|link:https://svnweb.freebsd.org/changeset/base/84324[84324]
|October 1, 2001
-|5.0-CURRENT after d_thread_t, and moving UUCP to ports.
+|5.0-CURRENT after `d_thread_t`, and moving UUCP to ports.
|500025
|link:https://svnweb.freebsd.org/changeset/base/84481[84481]
|October 4, 2001
-|5.0-CURRENT after ABI change for descriptor and creds passing on 64 bit platforms.
+|5.0-CURRENT after ABI change for descriptor and `creds` passing on 64 bit platforms.
|500026
|link:https://svnweb.freebsd.org/changeset/base/84710[84710]
@@ -5977,7 +6415,7 @@ Template:
|500038
|link:https://svnweb.freebsd.org/changeset/base/100591[100591]
|July 24, 2002
-|5.0-CURRENT after the types of some struct sockbuf members were changed and the structure was reordered.
+|5.0-CURRENT after the types of some struct `sockbuf` members were changed and the structure was reordered.
|500039
|link:https://svnweb.freebsd.org/changeset/base/102757[102757]
@@ -5997,7 +6435,7 @@ Template:
|500042
|link:https://svnweb.freebsd.org/changeset/base/105178[105178]
|October 15, 2002
-|5.0-CURRENT after Binutils 2.13 upgrade, which included new FreeBSD emulation, vec, and output format.
+|5.0-CURRENT after Binutils 2.13 upgrade, which included new FreeBSD emulation, `vec`, and output format.
|500043
|link:https://svnweb.freebsd.org/changeset/base/106289[106289]
@@ -6022,7 +6460,7 @@ Template:
|500103
|link:https://svnweb.freebsd.org/changeset/base/111540[111540]
|February 26, 2003
-|5.0-CURRENT after taskqueue_swi changed to run without Giant, and taskqueue_swi_giant added to run with Giant.
+|5.0-CURRENT after `taskqueue_swi` changed to run without Giant, and `taskqueue_swi_giant` added to run with Giant.
|500104
|link:https://svnweb.freebsd.org/changeset/base/111600[111600]
@@ -6042,7 +6480,7 @@ Template:
|500107
|link:https://svnweb.freebsd.org/changeset/base/112288[112288]
|March 15, 2003
-|Devstat interface change; see sys/sys/param.h 1.149
+|`devstat` interface change; see sys/sys/param.h 1.149
|500108
|link:https://svnweb.freebsd.org/changeset/base/112300[112300]
@@ -6052,7 +6490,7 @@ Template:
|500109
|link:https://svnweb.freebsd.org/changeset/base/112571[112571]
|March 25, 2003
-|Addition of vm_paddr_t.
+|Addition of `vm_paddr_t`.
|500110
|link:https://svnweb.freebsd.org/changeset/base/112741[112741]
@@ -6092,7 +6530,7 @@ Template:
|501102
|link:https://svnweb.freebsd.org/changeset/base/117191[117191]
|July 3, 2003
-|5.1-CURRENT after adding the lockfunc and lockfuncarg fields to man:bus_dma_tag_create[9].
+|5.1-CURRENT after adding the `lockfunc` and `lockfuncarg` fields to man:bus_dma_tag_create[9].
|501103
|link:https://svnweb.freebsd.org/changeset/base/118241[118241]
@@ -6107,7 +6545,7 @@ Template:
|501105
|link:https://svnweb.freebsd.org/changeset/base/119021[119021]
|August 17, 2003
-|5.1-CURRENT dynamically-linked /bin and /sbin support and movement of libraries to /lib.
+|5.1-CURRENT dynamically linked /bin and /sbin support and movement of libraries to /lib.
|501106
|link:https://svnweb.freebsd.org/changeset/base/119881[119881]
@@ -6147,7 +6585,7 @@ Template:
|501113
|link:https://svnweb.freebsd.org/changeset/base/121816[121816]
|October 31, 2003
-| 5.1-CURRENT after the if_xname change in struct ifnet
+| 5.1-CURRENT after the `if_xname` change in struct ifnet
|501114
|link:https://svnweb.freebsd.org/changeset/base/122779[122779]
@@ -6172,7 +6610,7 @@ Template:
|502101
|link:https://svnweb.freebsd.org/changeset/base/123677[123677]
|December 19, 2003
-|5.2-CURRENT after __cxa_atexit/__cxa_finalize functions were added to libc.
+|5.2-CURRENT after `__cxa_atexit`/`__cxa_finalize` functions were added to libc.
|502102
|link:https://svnweb.freebsd.org/changeset/base/125236[125236]
@@ -6182,7 +6620,7 @@ Template:
|502103
|link:https://svnweb.freebsd.org/changeset/base/126083[126083]
|February 21, 2004
-|5.2-CURRENT after device driver API megapatch.
+|5.2-CURRENT after device driver API mega patch.
|502104
|link:https://svnweb.freebsd.org/changeset/base/126208[126208]
@@ -6202,7 +6640,7 @@ Template:
|502107
|link:https://svnweb.freebsd.org/changeset/base/126819[126819]
|March 10, 2004
-|5.2-CURRENT after time_t is changed to a 64-bit value on sparc64.
+|5.2-CURRENT after `time_t` is changed to a 64-bit value on sparc64.
|502108
|link:https://svnweb.freebsd.org/changeset/base/126891[126891]
@@ -6212,7 +6650,7 @@ Template:
|502109
|link:https://svnweb.freebsd.org/changeset/base/127312[127312]
|March 22, 2004
-|5.2-CURRENT after the introduction of the bus_alloc_resource_any API
+|5.2-CURRENT after the introduction of the `bus_alloc_resource_any` API
|502110
|link:https://svnweb.freebsd.org/changeset/base/127475[127475]
@@ -6247,12 +6685,12 @@ Template:
|502116
|link:https://svnweb.freebsd.org/changeset/base/130585[130585]
|June 16, 2004
-|5.2-CURRENT after changing kernel dev_t to be pointer to struct cdev *.
+|5.2-CURRENT after changing kernel `dev_t` to be pointer to struct cdev *.
|502117
|link:https://svnweb.freebsd.org/changeset/base/130640[130640]
|June 17, 2004
-|5.2-CURRENT after changing kernel udev_t to dev_t.
+|5.2-CURRENT after changing kernel `udev_t` to `dev_t`.
|502118
|link:https://svnweb.freebsd.org/changeset/base/130656[130656]
@@ -6282,7 +6720,7 @@ Template:
|502123
|link:https://svnweb.freebsd.org/changeset/base/132025[132025]
|July 12, 2004
-|5.2-CURRENT after change to make VFS_ROOT take a struct thread argument as does vflush. Struct kinfo_proc now has a user data pointer. The switch of the default X implementation to `xorg` was also made at this time.
+|5.2-CURRENT after change to make VFS_ROOT take a struct thread argument as does vflush. Struct `kinfo_proc` now has a user data pointer. The switch of the default X implementation to `xorg` was also made at this time.
|502124
|link:https://svnweb.freebsd.org/changeset/base/132597[132597]
@@ -6342,7 +6780,7 @@ Template:
|503104
|link:https://svnweb.freebsd.org/changeset/base/142835[142835]
|February 28, 2005
-|5.4-PRERELEASE after the MFC of the change of ifi_epoch from wall clock time to uptime.
+|5.4-PRERELEASE after the MFC of the change of `ifi_epoch` from wall clock time to uptime.
|503105
|link:https://svnweb.freebsd.org/changeset/base/143029[143029]
@@ -6430,7 +6868,7 @@ Template:
|400004
|link:https://svnweb.freebsd.org/changeset/base/45321[45321]
|April 5, 1999
-|4.0-CURRENT after __deregister_frame_info dynamic linker bug fix (also 4.0-CURRENT after EGCS 1.1.2 integration)
+|4.0-CURRENT after `__deregister_frame_info` dynamic linker bug fix (also 4.0-CURRENT after EGCS 1.1.2 integration)
|400005
|link:https://svnweb.freebsd.org/changeset/base/46113[46113]
@@ -6445,7 +6883,7 @@ Template:
|400007
|link:https://svnweb.freebsd.org/changeset/base/47992[47992]
|June 17, 1999
-|4.0-CURRENT after the addition of so_cred for socket level credentials
+|4.0-CURRENT after the addition of `so_cred` for socket level credentials
|400008
|link:https://svnweb.freebsd.org/changeset/base/48048[48048]
@@ -6560,7 +6998,7 @@ Template:
|430001
|link:https://svnweb.freebsd.org/changeset/base/76779[76779]
|May 18, 2001
-|4.3-STABLE after wint_t introduction.
+|4.3-STABLE after `wint_t` introduction.
|430002
|link:https://svnweb.freebsd.org/changeset/base/80157[80157]
@@ -6575,7 +7013,7 @@ Template:
|440001
|link:https://svnweb.freebsd.org/changeset/base/85341[85341]
|October 23, 2001
-|4.4-STABLE after d_thread_t introduction.
+|4.4-STABLE after `d_thread_t` introduction.
|440002
|link:https://svnweb.freebsd.org/changeset/base/86038[86038]
@@ -6670,7 +7108,7 @@ Template:
|470102
|link:https://svnweb.freebsd.org/changeset/base/109753[109753]
|January 23, 2003
-|4.7-STABLE after MFC of mbuf changes to replace m_aux mbufs by m_tag's
+|4.7-STABLE after MFC of mbuf changes to replace `m_aux` mbufs by `m_tag`'s
|470103
|link:https://svnweb.freebsd.org/changeset/base/110887[110887]
@@ -6710,7 +7148,7 @@ Template:
|490101
|link:https://svnweb.freebsd.org/changeset/base/124264[124264]
|January 8, 2004
-|4.9-STABLE after e_sid was added to struct kinfo_eproc.
+|4.9-STABLE after `e_sid` was added to struct `kinfo_eproc`.
|490102
|link:https://svnweb.freebsd.org/changeset/base/125417[125417]
@@ -6966,7 +7404,7 @@ Template:
[NOTE]
====
-Note that 2.2-STABLE sometimes identifies itself as "2.2.5-STABLE" after the 2.2.5-RELEASE. The pattern used to be year followed by the month, but we decided to change it to a more straightforward major/minor system starting from 2.2. This is because the parallel development on several branches made it infeasible to classify the releases merely by their real release dates. Do not worry about old -CURRENTs; they are listed here just for reference.
+Note that 2.2-STABLE sometimes identifies itself as "2.2.5-STABLE" after the 2.2.5-RELEASE. The pattern used to be year followed by the month, but the community decided to change it to a more straightforward major/minor system starting from 2.2. This is because the parallel development on several branches made it infeasible to classify the releases merely by their real release dates. Do not worry about old -CURRENTs; they are listed here just for reference.
====
[[versions-2]]
diff --git a/documentation/content/en/books/porters-handbook/versions/_index.po b/documentation/content/en/books/porters-handbook/versions/_index.po
new file mode 100644
index 0000000000..c9a3debf82
--- /dev/null
+++ b/documentation/content/en/books/porters-handbook/versions/_index.po
@@ -0,0 +1,32757 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2024-01-17 20:34-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1
+#, no-wrap
+msgid "A list of changes to the sys/param.h file"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1
+#, no-wrap
+msgid "Chapter 18. __FreeBSD_version Values"
+msgstr ""
+
+#. type: Title =
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:12
+#, no-wrap
+msgid "`__FreeBSD_version` Values"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:50
+msgid ""
+"Here is a convenient list of `__FreeBSD_version` values as defined in "
+"https://cgit.freebsd.org/src/tree/sys/sys/param.h[sys/param.h]:"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:52
+#, no-wrap
+msgid "FreeBSD 15 Versions"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:55
+#, no-wrap
+msgid "FreeBSD 15 `__FreeBSD_version` Values"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:59
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:133
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:591
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1579
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2387
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3370
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4060
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4505
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5280
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5748
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6126
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6754
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7112
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7230
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7328
+#, no-wrap
+msgid "Value"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:60
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:134
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:592
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1580
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2388
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3371
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4061
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4506
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5281
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5749
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6127
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6755
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7113
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7231
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7329
+#, no-wrap
+msgid "Revision"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:61
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:135
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:593
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1581
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2389
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3372
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4062
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4507
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5282
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5750
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6128
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6756
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7114
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7232
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7330
+#, no-wrap
+msgid "Date"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:63
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:137
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:595
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1583
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2391
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3374
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4064
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4509
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5284
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5752
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6130
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6758
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7116
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7234
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7332
+#, no-wrap
+msgid "Release"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:64
+#, no-wrap
+msgid "1500000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:65
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:544
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:549
+#, no-wrap
+msgid "gitref:29a16ce065dbc28bc9e87c9bfadb08bb58b137e4[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:66
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:545
+#, no-wrap
+msgid "August 24, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:68
+#, no-wrap
+msgid "15.0-CURRENT."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:69
+#, no-wrap
+msgid "1500001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:70
+#, no-wrap
+msgid "gitref:a6662c37b6ffee46e18be5f7570149edc64c1d0b[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:71
+#, no-wrap
+msgid "September 17, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:73
+#, no-wrap
+msgid "15.0-CURRENT after implementing `fpu_kern_enter` and `fpu_kern_leave` for powerpc."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:74
+#, no-wrap
+msgid "1500002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:75
+#, no-wrap
+msgid "gitref:17f5e2b904aff8e4863199a137ee21ef0939bcf4[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:76
+#, no-wrap
+msgid "October 18, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:78
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:118
+#, no-wrap
+msgid "15.0-CURRENT after changing the internal KAPI between the nfscommon and nfscl modules."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:79
+#, no-wrap
+msgid "1500003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:80
+#, no-wrap
+msgid "gitref:ef85fd507e6e1784a726bccd485129e00bb63311[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:81
+#, no-wrap
+msgid "November 1, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:83
+#, no-wrap
+msgid "15.0-CURRENT after removal of the forward compat code for the inode64 conversion."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:84
+#, no-wrap
+msgid "1500004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:85
+#, no-wrap
+msgid "gitref:7fabea328fed60d5207b262d2372e85a7f731eef[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:86
+#, no-wrap
+msgid "November 23, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:88
+#, no-wrap
+msgid "15.0-CURRENT after adding a new VFS function called `vfs_exjail_clone()`, which will be used by the ZFS module."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:89
+#, no-wrap
+msgid "1500005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:90
+#, no-wrap
+msgid "gitref:21fce617d1de231a30833cdd9819ef61277b08d8[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:91
+#, no-wrap
+msgid "November 27, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:93
+#, no-wrap
+msgid "15.0-CURRENT after a string of mechanical changes to the tree: SCCS IDs removed, &#35;if 0'd copyright strings removed, mechanical style fix after this churn and some macros removed from [.filename]#sys/cdefs.h#."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:94
+#, no-wrap
+msgid "1500006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:95
+#, no-wrap
+msgid "gitref:c711af7727824da79d87f375f3d6829feec3799a[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:96
+#, no-wrap
+msgid "December 8, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:98
+#, no-wrap
+msgid "15.0-CURRENT after upgrading llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-17.0.6-0-g6009708b4367, a.k.a. 17.0.6 release."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:99
+#, no-wrap
+msgid "1500007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:100
+#, no-wrap
+msgid "gitref:8ccd0b876e67fda6249f294ff484798cc1e1569f[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:101
+#, no-wrap
+msgid "December 11, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:103
+#, no-wrap
+msgid "15.0-CURRENT after exposing execvpe for Linux compat in libc."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:104
+#, no-wrap
+msgid "1500008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:105
+#, no-wrap
+msgid "gitref:9bf957fc9b378e0f9e65eb97e84c2166b450fccc[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:106
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:560
+#, no-wrap
+msgid "December 24, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:108
+#, no-wrap
+msgid "15.0-CURRENT after LinuxKPI changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:109
+#, no-wrap
+msgid "1500009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:110
+#, no-wrap
+msgid "gitref:b068bb09a1a82d9fef0e939ad6135443a959e290[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:111
+#, no-wrap
+msgid "January 11, 2024"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:113
+#, no-wrap
+msgid "15.0-CURRENT after adding vnode_pager_clean_async(9) and vnode_pager_clean_sync(9)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:114
+#, no-wrap
+msgid "1500010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:115
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:120
+#, no-wrap
+msgid "gitref:a2da1bdb61bc2d9db0b4268f53281e7c0bbce0bc[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:116
+#, no-wrap
+msgid "January 12, 2024"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:119
+#, no-wrap
+msgid "1500011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:121
+#, no-wrap
+msgid "January 17, 2024"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:123
+#, no-wrap
+msgid "15.0-CURRENT after adding zfs.dataset support to jail(8)."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:126
+#, no-wrap
+msgid "FreeBSD 14 Versions"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:129
+#, no-wrap
+msgid "FreeBSD 14 `__FreeBSD_version` Values"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:138
+#, no-wrap
+msgid "1400000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:139
+#, no-wrap
+msgid "gitref:a53ce3fc4938e37d5ec89304846203d2083c61a2[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:140
+#, no-wrap
+msgid "January 22, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:142
+#, no-wrap
+msgid "14.0-CURRENT."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:143
+#, no-wrap
+msgid "1400001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:144
+#, no-wrap
+msgid "gitref:739ecbcf1c4fd22b5f6ee0bb180a67644046a3e0[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:145
+#, no-wrap
+msgid "January 23, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:147
+#, no-wrap
+msgid "14.0-CURRENT after adding symlink support to lockless lookup."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:148
+#, no-wrap
+msgid "1400002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:149
+#, no-wrap
+msgid "gitref:2cf84258922f306a3f84866685d2f5346f67db58[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:150
+#, no-wrap
+msgid "January 26, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:152
+#, no-wrap
+msgid "14.0-CURRENT after fixing a clang assertion when building the package:devel/onetbb[] port."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:153
+#, no-wrap
+msgid "1400003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:154
+#, no-wrap
+msgid "gitref:d386f3a3c32f0396aa7995349dd65d6c59711393[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:155
+#, no-wrap
+msgid "January 28, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:157
+#, no-wrap
+msgid "14.0-CURRENT after adding various LinuxKPI bits conflicting with drm-kmod."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:158
+#, no-wrap
+msgid "1400004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:159
+#, no-wrap
+msgid "gitref:68f6800ce05c386ff045b4416d8595d09c4d8fdd[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:160
+#, no-wrap
+msgid "February 8, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:162
+#, no-wrap
+msgid "14.0-CURRENT after kernel interfaces for dispatching cryptographic operations were changed."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:163
+#, no-wrap
+msgid "1400005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:164
+#, no-wrap
+msgid "gitref:45eabf5754ac1d291bd677fdf29f59ce4bbc2c8f[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:165
+#, no-wrap
+msgid "February 17, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:167
+#, no-wrap
+msgid "14.0-CURRENT after changing the API of man:ptrace[2] `PT_GETDBREGS`/`PT_SETDBREGS` on arm64."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:168
+#, no-wrap
+msgid "1400006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:169
+#, no-wrap
+msgid "gitref:c96151d33509655efb7fb26768cb56a041c176f1[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:170
+#, no-wrap
+msgid "March 17, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:172
+#, no-wrap
+msgid "14.0-CURRENT after adding man:sndstat[4] enumeration ioctls."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:173
+#, no-wrap
+msgid "1400007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:174
+#, no-wrap
+msgid "gitref:d36d6816151705907393889d661cbfd25c630ca8[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:175
+#, no-wrap
+msgid "April 6, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:177
+#, no-wrap
+msgid "14.0-CURRENT after fixing wrong `dlpi_tls_data`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:178
+#, no-wrap
+msgid "1400008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:179
+#, no-wrap
+msgid "gitref:e152bbecb221a592e7dbcabe3d1170a60f0d0dfe[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:180
+#, no-wrap
+msgid "April 11, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:182
+#, no-wrap
+msgid "14.0-CURRENT after changing the internal KAPI between the `krpc` and NFS modules."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:183
+#, no-wrap
+msgid "1400009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:184
+#, no-wrap
+msgid "gitref:9ca874cf740ee68c5742df8b5f9e20910085c011[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:185
+#, no-wrap
+msgid "April 20, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:187
+#, no-wrap
+msgid "14.0-CURRENT after adding TCP LRO support for VLAN and VxLAN."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:188
+#, no-wrap
+msgid "1400010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:189
+#, no-wrap
+msgid "gitref:a3a02acde1009f03dc78e979e051acee9f9247c2[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:190
+#, no-wrap
+msgid "April 21, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:192
+#, no-wrap
+msgid "14.0-CURRENT after changing the man:sndstat[4] ioctls `nvlist` schema and definitions."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:193
+#, no-wrap
+msgid "1400015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:194
+#, no-wrap
+msgid "gitref:d72cd275187c6399caf0ca4125292dc7e55fa478[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:195
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:200
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:205
+#, no-wrap
+msgid "May 25, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:197
+#, no-wrap
+msgid "14.0-CURRENT after adding more LinuxKPI changes needing adjustments to drm-kmod."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:198
+#, no-wrap
+msgid "1400016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:199
+#, no-wrap
+msgid "gitref:21e3c1fbe2460f144f6d4dfd61c3346b2de59667[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:202
+#, no-wrap
+msgid "14.0-CURRENT after removing support for KTLS software backends."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:203
+#, no-wrap
+msgid "1400017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:204
+#, no-wrap
+msgid "gitref:beb817edfe22cdea91e19a60c42caabd9404da48[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:207
+#, no-wrap
+msgid "14.0-CURRENT after adding `crypto_cursor_segment()`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:208
+#, no-wrap
+msgid "1400018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:209
+#, no-wrap
+msgid "gitref:a4b07a2701f568c2c0f0c0426091f1489244a92d[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:210
+#, no-wrap
+msgid "May 30, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:212
+#, no-wrap
+msgid "14.0-CURRENT after allowing the man:VFS_QUOTACTL[9] implementation to indicate busy state changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:213
+#, no-wrap
+msgid "1400019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:214
+#, no-wrap
+msgid "gitref:37d64dcdfa519157aff9711f1f226ad7bd778f46[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:215
+#, no-wrap
+msgid "June 7, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:217
+#, no-wrap
+msgid "14.0-CURRENT after including `pr_err_once()` in the LinuxKPI [.filename]#printk.h#."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:218
+#, no-wrap
+msgid "1400020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:219
+#, no-wrap
+msgid "gitref:8a1a42b2a7a428fb97fda9f19fd0d67a4eec7535[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:220
+#, no-wrap
+msgid "June 9, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:222
+#, no-wrap
+msgid "14.0-CURRENT after adding macros for `might_lock_nested()` and `lockdep_(re/un/)pin_lock()` to the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:223
+#, no-wrap
+msgid "1400021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:224
+#, no-wrap
+msgid "gitref:b47f461c8e67253fdb394968428b760e880baa08[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:225
+#, no-wrap
+msgid "June 10, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:227
+#, no-wrap
+msgid "14.0-CURRENT after adding a `list_for_each_entry_lockless()` macro to the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:228
+#, no-wrap
+msgid "1400022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:229
+#, no-wrap
+msgid "gitref:40cc9a3a6b81a65a03712dfd93bbed48552a97ad[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:230
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1358
+#, no-wrap
+msgid "June 11, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:232
+#, no-wrap
+msgid "14.0-CURRENT after commit gitref:e1a907a25cfa422c0d1acaf9f91352ada04f4bca[repository=\"src\",length=12] changed the internal KAPI between the `krpc` and nfsserver modules."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:233
+#, no-wrap
+msgid "1400023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:234
+#, no-wrap
+msgid "gitref:d409305fa3838fb39b38c26fc085fb729b8766d5[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:235
+#, no-wrap
+msgid "June 13, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:237
+#, no-wrap
+msgid "14.0-CURRENT after upgrading llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-12.0.0-0-gd28af7c654d8, a.k.a. 12.0.0 release."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:238
+#, no-wrap
+msgid "1400024"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:239
+#, no-wrap
+msgid "gitref:41dfd8bd6466fd39957dee2614d88c81cdf420a7[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:240
+#, no-wrap
+msgid "June 18, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:242
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:247
+#, no-wrap
+msgid "14.0-CURRENT after various additions to LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:243
+#, no-wrap
+msgid "1400025"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:244
+#, no-wrap
+msgid "gitref:5fa1eb1cd927219070b5753b64114a9240d76bf8[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:245
+#, no-wrap
+msgid "July 5, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:248
+#, no-wrap
+msgid "1400026"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:249
+#, no-wrap
+msgid "gitref:fad3f322efb53d4924fdda34f9f23f881659c269[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:250
+#, no-wrap
+msgid "July 16, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:252
+#, no-wrap
+msgid "14.0-CURRENT after changing the internal KAPI between the nfscommon and nfsd modules."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:253
+#, no-wrap
+msgid "1400027"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:254
+#, no-wrap
+msgid "gitref:cc55ee8009a550810d38777fd6ace9abf3a2f6b4[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:255
+#, no-wrap
+msgid "July 28, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:257
+#, no-wrap
+msgid "14.0-CURRENT after adding out-of-line LSE atomics helpers to [.filename]#libcompiler_rt.a# on aarch64."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:258
+#, no-wrap
+msgid "1400028"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:259
+#, no-wrap
+msgid "gitref:792b602a337ddc5efaa5e5326d9433fe3da7f303[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:260
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1383
+#, no-wrap
+msgid "July 31, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:262
+#, no-wrap
+msgid "14.0-CURRENT after making FPU sections thread-safe in the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:263
+#, no-wrap
+msgid "1400029"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:264
+#, no-wrap
+msgid "gitref:245ec7651e4221043d1032fb3f82f335dc65fc7f[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:265
+#, no-wrap
+msgid "August 5, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:267
+#, no-wrap
+msgid "14.0-CURRENT after adding man:fspacectl[2], man:vn_deallocate[9] and man:VOP_DEALLOCATE[9]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:268
+#, no-wrap
+msgid "1400030"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:269
+#, no-wrap
+msgid "gitref:95941b963606f6e03282cd6f866f3166dcedfa5b[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:270
+#, no-wrap
+msgid "August 12, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:272
+#, no-wrap
+msgid "14.0-CURRENT after man:VOP_DEALLOCATE[9] parameter changes and addition of man:fspacectl[2] support to POSIX shared memory."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:273
+#, no-wrap
+msgid "1400031"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:274
+#, no-wrap
+msgid "gitref:1a4c5061fc5ba8f2eee41456a6873547915f268a[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:275
+#, no-wrap
+msgid "August 24, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:277
+#, no-wrap
+msgid "14.0-CURRENT after changing man:fspacectl[2], man:vn_deallocate[9] and man:VOP_DEALLOCATE[9] to update rmsr.r_offset to a meaningful value."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:278
+#, no-wrap
+msgid "1400032"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:279
+#, no-wrap
+msgid "gitref:76321d2d432ed270d93b282e54e59b708c0cf3b4[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:280
+#, no-wrap
+msgid "August 25, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:282
+#, no-wrap
+msgid "14.0-CURRENT after changing man:fspacectl[2], man:vn_deallocate[9] and man:VOP_DEALLOCATE[9] to make calculating the number of bytes zeroed easier."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:283
+#, no-wrap
+msgid "1400033"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:284
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:289
+#, no-wrap
+msgid "gitref:c751d067c166db71ce8bf3a323c62ac3428bd32a[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:285
+#, no-wrap
+msgid "September 7, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:287
+#, no-wrap
+msgid "14.0-CURRENT after moving the socket buffer locks into the containing socket and renaming sb(un)lock to SOCK_IO_RECV_LOCK, SOCK_IO_RECV_UNLOCK, SOCK_IO_SEND_LOCK, and SOCK_IO_SEND_UNLOCK."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:288
+#, no-wrap
+msgid "1400034"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:290
+#, no-wrap
+msgid "September 29, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:292
+#, no-wrap
+msgid "14.0-CURRENT after LinuxKPI changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:293
+#, no-wrap
+msgid "1400035"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:294
+#, no-wrap
+msgid "gitref:16f1ee11e6574d7f8d8a9dc6ebc9be3036ff9fd0[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:295
+#, no-wrap
+msgid "October 4, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:297
+#, no-wrap
+msgid "14.0-CURRENT after splitting libtinfow from libncurses."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:298
+#, no-wrap
+msgid "1400036"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:299
+#, no-wrap
+msgid "gitref:ac847dbf73685a5df9f70bbcdefa9fdeb559071d[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:300
+#, no-wrap
+msgid "October 6, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:302
+#, no-wrap
+msgid "14.0-CURRENT after extending the AES-CCM and Chacha20-Poly1305 ciphers in OCF to support multiple nonce lengths."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:303
+#, no-wrap
+msgid "1400037"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:304
+#, no-wrap
+msgid "gitref:2b68eb8e1dbbdaf6a0df1c83b26f5403ca52d4c3[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:305
+#, no-wrap
+msgid "October 11, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:307
+#, no-wrap
+msgid "14.0-CURRENT after removal of thread argument from man:VOP_STAT[9] and `fo_stat`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:308
+#, no-wrap
+msgid "1400038"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:309
+#, no-wrap
+msgid "gitref:0d6516b453469ce1d92ec903c4c4df9ee08be0f9[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:310
+#, no-wrap
+msgid "October 17, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:312
+#, no-wrap
+msgid "14.0-CURRENT after LinuxKPI gained support of lazy BAR allocation."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:313
+#, no-wrap
+msgid "1400039"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:314
+#, no-wrap
+msgid "gitref:bd49c454ca62170506a98959c1acab7ad50c3276[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:315
+#, no-wrap
+msgid "October 19, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:317
+#, no-wrap
+msgid "14.0-CURRENT after page allocator changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:318
+#, no-wrap
+msgid "1400040"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:319
+#, no-wrap
+msgid "gitref:f38bef2ce417d6270f32b4ed17cec84bfd95d548[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:320
+#, no-wrap
+msgid "October 30, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:322
+#, no-wrap
+msgid "14.0-CURRENT after libdialog shared library version number bump."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:323
+#, no-wrap
+msgid "1400041"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:324
+#, no-wrap
+msgid "gitref:0c276dee030b241e12e1ceb1b2ab619004f08ce1[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:325
+#, no-wrap
+msgid "November 6, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:327
+#, no-wrap
+msgid "14.0-CURRENT after changing the arguments for man:VOP_ALLOCATE[9]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:328
+#, no-wrap
+msgid "1400042"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:329
+#, no-wrap
+msgid "gitref:20aa359773befc8182f6b5dcb5aad7390cab6c26[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:330
+#, no-wrap
+msgid "November 13, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:332
+#, no-wrap
+msgid "14.0-CURRENT after upgrading llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-13.0.0-0-gd7b669b3a303, a.k.a. 13.0.0 release."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:333
+#, no-wrap
+msgid "1400043"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:334
+#, no-wrap
+msgid "gitref:7e1d3eefd410ca0fbae5a217422821244c3eeee4[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:335
+#, no-wrap
+msgid "November 25, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:337
+#, no-wrap
+msgid "14.0-CURRENT after removing the unused thread argument from man:NDINIT[9]*."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:338
+#, no-wrap
+msgid "1400044"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:339
+#, no-wrap
+msgid "gitref:ec434c85b46dd715da1940e2a8911bf476b0e477[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:340
+#, no-wrap
+msgid "December 9, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:342
+#, no-wrap
+msgid "14.0-CURRENT after changing in-kernel software crypto ciphers transforms to support AEAD ciphers and changing the Blake-2S/B auth transforms to support Init before Setkey like other auth transforms."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:343
+#, no-wrap
+msgid "1400045"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:344
+#, no-wrap
+msgid "gitref:b214fcceacad6b842545150664bd2695c1c2b34f[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:345
+#, no-wrap
+msgid "December 15, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:347
+#, no-wrap
+msgid "14.0-CURRENT after changing man:VOP_READDIR[9]'s cookies argument to a `**uint64_t`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:348
+#, no-wrap
+msgid "1400046"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:349
+#, no-wrap
+msgid "gitref:e2650af157bc7489deaf2c9054995f0f88a6e5da[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:350
+#, no-wrap
+msgid "December 30, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:352
+#, no-wrap
+msgid "14.0-CURRENT after making the CPU_SET macros compatible with glibc."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:353
+#, no-wrap
+msgid "1400047"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:354
+#, no-wrap
+msgid "gitref:ed6417cd8d0bb5a2c175fce9d8e4a495fae9e9f4[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:355
+#, no-wrap
+msgid "January 17, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:357
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:437
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:447
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:452
+#, no-wrap
+msgid "14.0-CURRENT after multiple LinuxKPI changes required by drm-kmod."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:358
+#, no-wrap
+msgid "1400048"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:359
+#, no-wrap
+msgid "gitref:dd2f7a4b45eb1285e710cfce60cb77f7c11f8075[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:360
+#, no-wrap
+msgid "January 18, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:362
+#, no-wrap
+msgid "14.0-CURRENT after adding <crypto/chacha20_poly1305.h>."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:363
+#, no-wrap
+msgid "1400049"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:364
+#, no-wrap
+msgid "gitref:2c4b65cc3d227f31864e183c15f6c42e2c596cd9[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:365
+#, no-wrap
+msgid "January 24, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:367
+#, no-wrap
+msgid "14.0-CURRENT after adding <crypto/curve25519.h>."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:368
+#, no-wrap
+msgid "1400050"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:369
+#, no-wrap
+msgid "gitref:213e91399b7998554d787bb290109ebe602aa279[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:370
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:375
+#, no-wrap
+msgid "January 25, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:372
+#, no-wrap
+msgid "14.0-CURRENT after iflib adds the feature that a driver can set its own TX queue selection function as `ift_txq_select` in struct `if_txrx`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:373
+#, no-wrap
+msgid "1400051"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:374
+#, no-wrap
+msgid "gitref:59d465e200bb7058dfdb183c061730c10dd5bc03[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:377
+#, no-wrap
+msgid "14.0-CURRENT after adding i2c support for LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:378
+#, no-wrap
+msgid "1400052"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:379
+#, no-wrap
+msgid "gitref:05f0b24bfb3416606c8ea02bc1bdb9bcee7aee0c[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:380
+#, no-wrap
+msgid "February 14, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:382
+#, no-wrap
+msgid "14.0-CURRENT after adding GUID_INIT and pm_qos.h support for LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:383
+#, no-wrap
+msgid "1400053"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:384
+#, no-wrap
+msgid "gitref:ba87e9bf74202b08b8e3b0a297b9b88f6869fbfb[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:385
+#, no-wrap
+msgid "February 17, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:387
+#, no-wrap
+msgid "14.0-CURRENT after adding mmap_lock.h to LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:388
+#, no-wrap
+msgid "1400054"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:389
+#, no-wrap
+msgid "gitref:50bb3a33d879536e86e8a23365f070ef00b5cb32[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:390
+#, no-wrap
+msgid "March 28, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:392
+#, no-wrap
+msgid "14.0-CURRENT after changing `irq_work_queue` to return a bool in LinuxKPI to match 5.10 API."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:393
+#, no-wrap
+msgid "1400055"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:394
+#, no-wrap
+msgid "gitref:d69af4758be912625ec08656ba64eb90a98c9a7f[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:395
+#, no-wrap
+msgid "March 29, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:397
+#, no-wrap
+msgid "14.0-CURRENT after adding `for_each_sgtable_dma_sg` and `for_each_sgtable_dma_page` to LinuxKPI"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:398
+#, no-wrap
+msgid "1400056"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:399
+#, no-wrap
+msgid "gitref:ab8ac4c28574a42a2891b2e2341f802949c1fb57[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:400
+#, no-wrap
+msgid "March 31, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:402
+#, no-wrap
+msgid "14.0-CURRENT after zlib upgrade to 1.2.12"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:403
+#, no-wrap
+msgid "1400057"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:404
+#, no-wrap
+msgid "gitref:e68b35e40881a1bd858e1b4b5003123a484fd7cd[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:405
+#, no-wrap
+msgid "April 22, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:407
+#, no-wrap
+msgid "14.0-CURRENT after changing udp_tun_func_t() prototype."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:408
+#, no-wrap
+msgid "1400058"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:409
+#, no-wrap
+msgid "gitref:2e32d4e41d205d6f14834f87306a77ff77b9c0bd[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:410
+#, no-wrap
+msgid "May 7, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:412
+#, no-wrap
+msgid "14.0-CURRENT after newbus changes to remove devclass arguments."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:413
+#, no-wrap
+msgid "1400059"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:414
+#, no-wrap
+msgid "gitref:3a9a9c0ca44ec535dcf73fe8462bee458e54814b[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:415
+#, no-wrap
+msgid "May 14, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:417
+#, no-wrap
+msgid "14.0-CURRENT after upgrading llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-14.0.3-0-g1f9140064dfb, a.k.a. 14.0.3 release."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:418
+#, no-wrap
+msgid "1400060"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:419
+#, no-wrap
+msgid "gitref:85d7875d42913c2cb10a007a1be05b210dc6aab2[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:420
+#, no-wrap
+msgid "June 6, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:422
+#, no-wrap
+msgid "14.0-CURRENT after LinuxKPI dmi_matches() fixes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:423
+#, no-wrap
+msgid "1400061"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:424
+#, no-wrap
+msgid "gitref:c4c5981c14d5bd69e9df9ae691069ec4c2e92174[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:425
+#, no-wrap
+msgid "June 8, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:427
+#, no-wrap
+msgid "14.0-CURRENT after mbuf(9) structure changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:428
+#, no-wrap
+msgid "1400062"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:429
+#, no-wrap
+msgid "gitref:8c309d48aabf1cb469334c7716033f177a2715c0[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:430
+#, no-wrap
+msgid "June 18, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:432
+#, no-wrap
+msgid "14.0-CURRENT after struct `kinfo_file` changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:433
+#, no-wrap
+msgid "1400063"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:434
+#, no-wrap
+msgid "gitref:8cff8e6e13a6d3ccff40fc0d8d97f5aef22a8f4d[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:435
+#, no-wrap
+msgid "June 29, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:438
+#, no-wrap
+msgid "1400064"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:439
+#, no-wrap
+msgid "gitref:ddd9004e7a5dbf02c34ef0effcef90f7d5df357d[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:440
+#, no-wrap
+msgid "July 18, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:442
+#, no-wrap
+msgid "14.0-CURRENT after the removal of OBJT_DEFAULT."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:443
+#, no-wrap
+msgid "1400065"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:444
+#, no-wrap
+msgid "gitref:b273f93657cf0e6f2c6ee4d0f40a43656233c6d0[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:445
+#, no-wrap
+msgid "August 8, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:448
+#, no-wrap
+msgid "1400066"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:449
+#, no-wrap
+msgid "gitref:ff7812ee7d444b738a454064f9639c3feb5743e8[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:450
+#, no-wrap
+msgid "August 18, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:453
+#, no-wrap
+msgid "1400069"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:454
+#, no-wrap
+msgid "gitref:f95c0bc89ea4fcde04b0990d57e842ef387ea896[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:455
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:460
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:470
+#, no-wrap
+msgid "September 22, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:457
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:502
+#, no-wrap
+msgid "14.0-CURRENT after multiple LinuxKPI changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:458
+#, no-wrap
+msgid "1400070"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:459
+#, no-wrap
+msgid "gitref:6bddde307e21eba297ac3f3e534b4cf3be81dfe2[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:462
+#, no-wrap
+msgid "14.0-CURRENT after KPI changes to pmap_unmapdev() and kmem_*()."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:463
+#, no-wrap
+msgid "1400071"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:464
+#, no-wrap
+msgid "gitref:d3f96f661050e9bd21fe29931992a8b9e67ff189[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:465
+#, no-wrap
+msgid "September 26, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:467
+#, no-wrap
+msgid "14.0-CURRENT after KPI changes that sysctl OIDs lists converted to RB trees."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:468
+#, no-wrap
+msgid "1400072"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:469
+#, no-wrap
+msgid "gitref:8a96874eeeee5195b0b0952b77227bef6a26d1a6[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:472
+#, no-wrap
+msgid "14.0-CURRENT after `qsort_r` prototype modified to match POSIX."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:473
+#, no-wrap
+msgid "1400073"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:474
+#, no-wrap
+msgid "gitref:9c950139051298831ce19d01ea5fb33ec6ea7f89[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:475
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1488
+#, no-wrap
+msgid "October 17, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:477
+#, no-wrap
+msgid "14.0-CURRENT after introduction of v2 of TX Queue Select Functionality."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:478
+#, no-wrap
+msgid "1400074"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:479
+#, no-wrap
+msgid "gitref:e28932c643e891294a49f386ba65322cf8410225[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:480
+#, no-wrap
+msgid "December 9, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:482
+#, no-wrap
+msgid "14.0-CURRENT after adding spare fops slots in fileops."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:483
+#, no-wrap
+msgid "1400078"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:484
+#, no-wrap
+msgid "gitref:4b56afaf7bf4fa37bae5b26fd93ee1ff5969c1bb[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:485
+#, no-wrap
+msgid "January 13, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:487
+#, no-wrap
+msgid "14.0-CURRENT after changing LinuxKPI pci.h."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:488
+#, no-wrap
+msgid "1400079"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:489
+#, no-wrap
+msgid "gitref:3264f6b88fce7c5437d205685863617d8f6a22dd[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:490
+#, no-wrap
+msgid "February 8, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:492
+#, no-wrap
+msgid "14.0-CURRENT after upgrading llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-15.0.7-0-g8dfdcc7b7bf6, a.k.a. 15.0.7 release."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:493
+#, no-wrap
+msgid "1400084"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:494
+#, no-wrap
+msgid "gitref:ea3061526e9ce5d3b65932c1d3e4437abd556d65[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:495
+#, no-wrap
+msgid "March 23, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:497
+#, no-wrap
+msgid "14.0-CURRENT after changing the arm64 struct reg, struct gpreg, struct trapframe, and struct pcb."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:498
+#, no-wrap
+msgid "1400085"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:499
+#, no-wrap
+msgid "gitref:1cebc9298cf2272da46c3c574d06a80ce59854aa[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:500
+#, no-wrap
+msgid "March 28, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:503
+#, no-wrap
+msgid "1400086"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:504
+#, no-wrap
+msgid "gitref:c17eb99a66e7d1e8a64458a969eeb7649f827493[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:505
+#, no-wrap
+msgid "April 8, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:507
+#, no-wrap
+msgid "14.0-CURRENT after vn_lock_pair() argument changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:508
+#, no-wrap
+msgid "1400087"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:509
+#, no-wrap
+msgid "gitref:af22da75a035e25cb47cd3f2eabe5a84d8a5cb34[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:510
+#, no-wrap
+msgid "April 22, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:512
+#, no-wrap
+msgid "14.0-CURRENT after LinuxKPI updates."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:513
+#, no-wrap
+msgid "1400088"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:514
+#, no-wrap
+msgid "gitref:97583aa2567589cb83540d2d9de1980b76db9a99[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:515
+#, no-wrap
+msgid "April 24, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:517
+#, no-wrap
+msgid "14.0-CURRENT after migrating the LinuxKPI to IfAPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:518
+#, no-wrap
+msgid "1400089"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:519
+#, no-wrap
+msgid "gitref:9fb6718d1b180c341373b25c03dbfc221ddee311[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:520
+#, no-wrap
+msgid "April 25, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:522
+#, no-wrap
+msgid "14.0-CURRENT after dynamically allocating the stoppcbs array in smp."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:523
+#, no-wrap
+msgid "1400090"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:524
+#, no-wrap
+msgid "gitref:653738e895ba022be1179a95a85089e7bc66dbbe[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:525
+#, no-wrap
+msgid "June 7, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:527
+#, no-wrap
+msgid "14.0-CURRENT after ptrace started clearing TDB_BORN during PT_DETACH."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:528
+#, no-wrap
+msgid "1400091"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:529
+#, no-wrap
+msgid "gitref:a681cba16d8967651a2146385ce44a2bfeb1c4c3[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:530
+#, no-wrap
+msgid "June 22, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:532
+#, no-wrap
+msgid "14.0-CURRENT after upgrading llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-16.0.6-0-g7cbf1a259152, a.k.a. 16.0.6 release."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:533
+#, no-wrap
+msgid "1400092"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:534
+#, no-wrap
+msgid "gitref:9ead001d5b42ef9cba04757c9e7ee74c06037139[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:535
+#, no-wrap
+msgid "June 24, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:537
+#, no-wrap
+msgid "14.0-CURRENT after importing OpenSSL 3.0.9 into base."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:538
+#, no-wrap
+msgid "1400093"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:539
+#, no-wrap
+msgid "gitref:ba8cc6d7271a50fec978a1d3a088aec7985fae48[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:540
+#, no-wrap
+msgid "July 5, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:542
+#, no-wrap
+msgid "14.0-CURRENT after using __enum_uint8 for vtype and vstate in VFS"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:543
+#, no-wrap
+msgid "1400097"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:547
+#, no-wrap
+msgid "14.0-STABLE after branching stable/14"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:548
+#, no-wrap
+msgid "1400500"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:550
+#, no-wrap
+msgid "September 8, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:552
+#, no-wrap
+msgid "14.0-STABLE after branching releng/14.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:553
+#, no-wrap
+msgid "1400501"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:554
+#, no-wrap
+msgid "gitref:91e53779b4fc39e755a03190f785ce0cf3f83eb7[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:555
+#, no-wrap
+msgid "November 19, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:557
+#, no-wrap
+msgid "14.0-STABLE after implementing `fpu_kern_enter` and `fpu_kern_leave` for powerpc."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:558
+#, no-wrap
+msgid "1400502"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:559
+#, no-wrap
+msgid "gitref:092abb839d1d2826533bb9c4c93d713f8b5043f9[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:562
+#, no-wrap
+msgid "14.0-STABLE after modifying the internal API between the kgssapi and krpc modules."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:563
+#, no-wrap
+msgid "1400503"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:564
+#, no-wrap
+msgid "gitref:ba99d960884d50eb7d36146914206644ee132aa4[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:565
+#, no-wrap
+msgid "December 29, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:567
+#, no-wrap
+msgid "14.0-STABLE after changing the internal KAPI between the nfscommon and nfscl modules."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:568
+#, no-wrap
+msgid "1400504"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:569
+#, no-wrap
+msgid "gitref:68584c97ecfb3046de7fb1b16c2caa785392237c[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:570
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1558
+#, no-wrap
+msgid "January 7, 2024"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:572
+#, no-wrap
+msgid "14.0-STABLE after upgrading llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-17.0.6-0-g6009708b4367, a.k.a. 17.0.6 release."
+msgstr ""
+
+#. Template:
+#. |14XXXXX
+#. |gitref:XXXXXXXX[repository="src",length=12]
+#. |October 30, 2021
+#. |14.0-CURRENT after XXXXXX.
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:584
+#, no-wrap
+msgid "FreeBSD 13 Versions"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:587
+#, no-wrap
+msgid "FreeBSD 13 `__FreeBSD_version` Values"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:596
+#, no-wrap
+msgid "1300000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:597
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/339436[339436]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:598
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2016
+#, no-wrap
+msgid "October 19, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:600
+#, no-wrap
+msgid "13.0-CURRENT."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:601
+#, no-wrap
+msgid "1300001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:602
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/339730[339730]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:603
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:608
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2021
+#, no-wrap
+msgid "October 25, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:605
+#, no-wrap
+msgid "13.0-CURRENT after bumping OpenSSL shared library version numbers."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:606
+#, no-wrap
+msgid "1300002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:607
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/339765[339765]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:610
+#, no-wrap
+msgid "13.0-CURRENT after restoration of [.filename]#sys/joystick.h#."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:611
+#, no-wrap
+msgid "1300003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:612
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/340055[340055]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:613
+#, no-wrap
+msgid "November 2, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:615
+#, no-wrap
+msgid "13.0-CURRENT after `vop_symlink` API change (`a_target` is now `const`.)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:616
+#, no-wrap
+msgid "1300004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:617
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/340841[340841]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:618
+#, no-wrap
+msgid "November 23, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:620
+#, no-wrap
+msgid "13.0-CURRENT after enabling crtbegin and crtend code."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:621
+#, no-wrap
+msgid "1300005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:622
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/341836[341836]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:623
+#, no-wrap
+msgid "December 11, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:625
+#, no-wrap
+msgid "13.0-CURRENT after enabling UFS inode checksums."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:626
+#, no-wrap
+msgid "1300006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:627
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/342398[342398]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:628
+#, no-wrap
+msgid "December 24, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:630
+#, no-wrap
+msgid "13.0-CURRENT after fixing [.filename]#sys/random.h# include to be usable from C++."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:631
+#, no-wrap
+msgid "1300007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:632
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/342629[342629]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:633
+#, no-wrap
+msgid "December 30, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:635
+#, no-wrap
+msgid "13.0-CURRENT after changing the size of `struct linux_cdev` on 32-bit platforms."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:636
+#, no-wrap
+msgid "1300008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:637
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/342772[342772]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:638
+#, no-wrap
+msgid "January 4, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:640
+#, no-wrap
+msgid "13.0-CURRENT after adding `kern.smp.threads_per_core` and `kern.smp.cores` sysctls."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:641
+#, no-wrap
+msgid "1300009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:642
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/343213[343213]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:643
+#, no-wrap
+msgid "January 20, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:645
+#, no-wrap
+msgid "13.0-CURRENT after `struct ieee80211vap` structure change to resolve ioctl/detach race for ieee80211com structure."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:646
+#, no-wrap
+msgid "1300010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:647
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/343485[343485]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:648
+#, no-wrap
+msgid "January 27, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:650
+#, no-wrap
+msgid "13.0-CURRENT after increasing `SPECNAMELEN` from 63 to `MAXNAMELEN` (255)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:651
+#, no-wrap
+msgid "1300011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:652
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/344041[344041]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:653
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:658
+#, no-wrap
+msgid "February 12, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:655
+#, no-wrap
+msgid "13.0-CURRENT after man:renameat[2] has been corrected to work with kernels built with the `CAPABILITIES` option."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:656
+#, no-wrap
+msgid "1300012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:657
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/344062[344062]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:660
+#, no-wrap
+msgid "13.0-CURRENT after `taskqgroup_attach()` and `taskqgroup_attach_cpu()` take a `device_t` and a struct resource pointer as arguments for denoting device interrupts."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:661
+#, no-wrap
+msgid "1300013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:662
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/344300[344300]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:663
+#, no-wrap
+msgid "February 19, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:665
+#, no-wrap
+msgid "13.0-CURRENT after the removal of drm and drm2."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:666
+#, no-wrap
+msgid "1300014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:667
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/344779[344779]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:668
+#, no-wrap
+msgid "March 4, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:670
+#, no-wrap
+msgid "13.0-CURRENT after upgrading clang, llvm, lld, lldb, compiler-rt and libc++ to 8.0.0 rc3."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:671
+#, no-wrap
+msgid "1300015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:672
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/345196[345196]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:673
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2046
+#, no-wrap
+msgid "March 15, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:675
+#, no-wrap
+msgid "13.0-CURRENT after deanonymizing thread and proc state enums, so userland applications can use them without redefining the value names."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:676
+#, no-wrap
+msgid "1300016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:677
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/345236[345236]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:678
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:688
+#, no-wrap
+msgid "March 16, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:680
+#, no-wrap
+msgid "13.0-CURRENT after enabling LLVM OpenMP 8.0.0 rc5 on amd64 by default."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:681
+#, no-wrap
+msgid "1300017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:682
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/345305[345305]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:683
+#, no-wrap
+msgid "March 19, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:685
+#, no-wrap
+msgid "13.0-CURRENT after exposing the Rx mbuf buffer size to drivers in iflib."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:686
+#, no-wrap
+msgid "1300018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:687
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/346012[346012]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:690
+#, no-wrap
+msgid "13.0-CURRENT after introduction of `funlinkat` syscall in link:https://svnweb.freebsd.org/changeset/base/345982[345982]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:691
+#, no-wrap
+msgid "1300019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:692
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/346282[346282]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:693
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3214
+#, no-wrap
+msgid "April 16, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:695
+#, no-wrap
+msgid "13.0-CURRENT after addition of man:is_random_seeded[9] to man:random[4]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:696
+#, no-wrap
+msgid "1300020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:697
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/346358[346358]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:698
+#, no-wrap
+msgid "April 18, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:700
+#, no-wrap
+msgid "13.0-CURRENT after restoring man:random[4] availability tradeoff prior to link:https://svnweb.freebsd.org/changeset/base/346250[346250] and adding new tunables and diagnostic sysctls for programmatically discovering early seeding problems after boot."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:701
+#, no-wrap
+msgid "1300021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:702
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/346645[346645]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:703
+#, no-wrap
+msgid "April 24, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:705
+#, no-wrap
+msgid "13.0-CURRENT after LinuxKPI uses man:bus_dma[9] to be compatible with an IOMMU."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:706
+#, no-wrap
+msgid "1300022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:707
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/347089[347089]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:708
+#, no-wrap
+msgid "May 4, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:710
+#, no-wrap
+msgid "13.0-CURRENT after fixing regression issue after link:https://svnweb.freebsd.org/changeset/base/346645[346645] in the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:711
+#, no-wrap
+msgid "1300023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:712
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/347192[347192]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:713
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3224
+#, no-wrap
+msgid "May 6, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:715
+#, no-wrap
+msgid "13.0-CURRENT after list-ifying kernel dump device configuration."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:716
+#, no-wrap
+msgid "1300024"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:717
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/347325[347325]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:718
+#, no-wrap
+msgid "May 8, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:720
+#, no-wrap
+msgid "13.0-CURRENT after bumping the Mellanox driver version numbers (man:mlx4en[4]; man:mlx5en[4])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:721
+#, no-wrap
+msgid "1300025"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:722
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/347532[347532]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:723
+#, no-wrap
+msgid "May 13, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:725
+#, no-wrap
+msgid "13.0-CURRENT after renaming `vm.max_wired` to `vm.max_user_wired` and changing its type."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:726
+#, no-wrap
+msgid "1300026"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:727
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/347596[347596]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:728
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:733
+#, no-wrap
+msgid "May 14, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:730
+#, no-wrap
+msgid "13.0-CURRENT after adding context member to ww_mutex in LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:731
+#, no-wrap
+msgid "1300027"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:732
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/347601[347601]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:735
+#, no-wrap
+msgid "13.0-CURRENT after adding prepare to `pm_ops` in LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:736
+#, no-wrap
+msgid "1300028"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:737
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/347925[347925]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:738
+#, no-wrap
+msgid "May 17, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:740
+#, no-wrap
+msgid "13.0-CURRENT after removal of `bm`, `cs`, de, ed, `ep`, ex, `fe`, `pcn`, sf, `sn`, `tl`, `tx`, `txp`, `vx`, `wb`, and xe drivers."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:741
+#, no-wrap
+msgid "1300029"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:742
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/347984[347984]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:743
+#, no-wrap
+msgid "May 20, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:745
+#, no-wrap
+msgid "13.0-CURRENT after removing some header pollution due to [.filename]#sys/eventhandler.h#. Affected files may now need to explicitly include one or more of [.filename]#sys/eventhandler.h#, [.filename]#sys/ktr.h#, [.filename]#sys/lock.h#, or [.filename]#sys/mutex.h#, when the missing header may have been included implicitly prior to 1300029."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:746
+#, no-wrap
+msgid "1300030"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:747
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/348350[348350]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:748
+#, no-wrap
+msgid "May 29, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:750
+#, no-wrap
+msgid "13.0-CURRENT after adding relocation support to libdwarf on powerpc64 to fix handling of DWARF information on unlinked objects. Original commit in link:https://svnweb.freebsd.org/changeset/base/348347[348347]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:751
+#, no-wrap
+msgid "1300031"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:752
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/348808[348808]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:753
+#, no-wrap
+msgid "June 8, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:755
+#, no-wrap
+msgid "13.0-CURRENT after adding dpcpu and vnet section fixes to i386 kernel modules to avoid panics in certain conditions. i386 kernel modules need to be recompiled with the linker script magic in place or they will refuse to load."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:756
+#, no-wrap
+msgid "1300032"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:757
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/349151[349151]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:758
+#, no-wrap
+msgid "June 17, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:760
+#, no-wrap
+msgid "13.0-CURRENT after separating kernel `crc32()` implementation to its own header ([.filename]#gsb_crc32.h#) and renaming the source to [.filename]#gsb_crc32.c#."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:761
+#, no-wrap
+msgid "1300033"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:762
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/349277[349277]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:763
+#, no-wrap
+msgid "June 21, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:765
+#, no-wrap
+msgid "13.0-CURRENT after additions to LinuxKPI's `rcu` list."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:766
+#, no-wrap
+msgid "1300034"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:767
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/349352[349352]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:768
+#, no-wrap
+msgid "June 24, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:770
+#, no-wrap
+msgid "13.0-CURRENT after NAND and NANDFS removal."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:771
+#, no-wrap
+msgid "1300035"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:772
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/349846[349846]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:773
+#, no-wrap
+msgid "July 8, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:775
+#, no-wrap
+msgid "13.0-CURRENT after merging the `vm_page` hold and wire mechanisms."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:776
+#, no-wrap
+msgid "1300036"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:777
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/349972[349972]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:778
+#, no-wrap
+msgid "July 13, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:780
+#, no-wrap
+msgid "13.0-CURRENT after adding `arm_drain_writebuf()` and `arm_sync_icache()` for compatibility with NetBSD and OpenBSD."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:781
+#, no-wrap
+msgid "1300037"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:782
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/350307[350307]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:783
+#, no-wrap
+msgid "July 24, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:785
+#, no-wrap
+msgid "13.0-CURRENT after removal of man:libcap_random[3]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:786
+#, no-wrap
+msgid "1300038"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:787
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/350437[350437]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:788
+#, no-wrap
+msgid "July 30, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:790
+#, no-wrap
+msgid "13.0-CURRENT after removal of gzip'ed a.out support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:791
+#, no-wrap
+msgid "1300039"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:792
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/350665[350665]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:793
+#, no-wrap
+msgid "August 7, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:795
+#, no-wrap
+msgid "13.0-CURRENT after merge of fusefs from projects/fuse2."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:796
+#, no-wrap
+msgid "1300040"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:797
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/351140[351140]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:798
+#, no-wrap
+msgid "August 16, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:800
+#, no-wrap
+msgid "13.0-CURRENT after deletion of [.filename]#sys/dir.h# which has been deprecated since 1997."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:801
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:986
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1156
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1416
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1699
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3455
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5000
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5535
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6088
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6276
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7240
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7245
+#, no-wrap
+msgid "(not changed)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:802
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/351423[351423]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:803
+#, no-wrap
+msgid "August 23, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:805
+#, no-wrap
+msgid "13.0-CURRENT after changing most arguments to man:ping6[8]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:806
+#, no-wrap
+msgid "1300041"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:807
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/351480[351480]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:808
+#, no-wrap
+msgid "August 25, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:810
+#, no-wrap
+msgid "13.0-CURRENT after removal of zlib 1.0.4 after the completion of kernel zlib unification."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:811
+#, no-wrap
+msgid "1300042"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:812
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/351522[351522]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:813
+#, no-wrap
+msgid "August 27, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:815
+#, no-wrap
+msgid "13.0-CURRENT after addition of kernel-side support for in-kernel TLS."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:816
+#, no-wrap
+msgid "1300043"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:817
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/351698[351698]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:818
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:823
+#, no-wrap
+msgid "September 2, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:820
+#, no-wrap
+msgid "13.0-CURRENT after removal of man:gets[3]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:821
+#, no-wrap
+msgid "1300044"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:822
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/351701[351701]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:825
+#, no-wrap
+msgid "13.0-CURRENT after adding sysfs create/remove functions that handles multiple files in one call to the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:826
+#, no-wrap
+msgid "1300045"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:827
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/351729[351729]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:828
+#, no-wrap
+msgid "September 3, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:830
+#, no-wrap
+msgid "13.0-CURRENT after adding man:sysctlbyname[3] system call."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:831
+#, no-wrap
+msgid "1300046"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:832
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/351937[351937]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:833
+#, no-wrap
+msgid "September 6, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:835
+#, no-wrap
+msgid "13.0-CURRENT after LinuxKPI sysfs improvements."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:836
+#, no-wrap
+msgid "1300047"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:837
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/352110[352110]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:838
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2111
+#, no-wrap
+msgid "September 9, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:840
+#, no-wrap
+msgid "13.0-CURRENT after changing the synchronization rules for `vm_page` reference counting.."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:841
+#, no-wrap
+msgid "1300048"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:842
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/352700[352700]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:843
+#, no-wrap
+msgid "September 25, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:845
+#, no-wrap
+msgid "13.0-CURRENT after adding a shm_open2 syscall to support the upcoming man:memfd_create[2] syscall."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:846
+#, no-wrap
+msgid "1300049"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:847
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/353274[353274]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:848
+#, no-wrap
+msgid "October 7, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:850
+#, no-wrap
+msgid "13.0-CURRENT after factoring out the VNET shutdown check into an own vnet structure field."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:851
+#, no-wrap
+msgid "1300050"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:852
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/353358[353358]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:853
+#, no-wrap
+msgid "October 9, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:855
+#, no-wrap
+msgid "13.0-CURRENT after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 9.0.0 final release r372316."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:856
+#, no-wrap
+msgid "1300051"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:857
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/353685[353685]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:858
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:863
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:868
+#, no-wrap
+msgid "October 17, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:860
+#, no-wrap
+msgid "13.0-CURRENT after splitting out a more generic man:debugnet[4] from man:netdump[4]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:861
+#, no-wrap
+msgid "1300052"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:862
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/353698[353698]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:865
+#, no-wrap
+msgid "13.0-CURRENT after promoting the page busy field to a first class lock that no longer requires the object lock for consistency."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:866
+#, no-wrap
+msgid "1300053"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:867
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/353700[353700]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:870
+#, no-wrap
+msgid "13.0-CURRENT after implementing NetGDB."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:871
+#, no-wrap
+msgid "1300054"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:872
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/353868[353868]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:873
+#, no-wrap
+msgid "October 21, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:875
+#, no-wrap
+msgid "13.0-CURRENT after removing obsoleted KPIs that were used to access interface address lists."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:876
+#, no-wrap
+msgid "1300055"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:877
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/354335[354335]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:878
+#, no-wrap
+msgid "November 4, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:880
+#, no-wrap
+msgid "13.0-CURRENT after enabling device class group attributes in the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:881
+#, no-wrap
+msgid "1300056"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:882
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/354460[354460]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:883
+#, no-wrap
+msgid "November 7, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:885
+#, no-wrap
+msgid "13.0-CURRENT after fixing a potential OOB read security issue in libc++."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:886
+#, no-wrap
+msgid "1300057"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:887
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/354694[354694]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:888
+#, no-wrap
+msgid "November 13, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:890
+#, no-wrap
+msgid "13.0-CURRENT after adding support for `AT_EXECPATH` to man:elf_aux_info[3]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:891
+#, no-wrap
+msgid "1300058"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:892
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/354820[354820]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:893
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:898
+#, no-wrap
+msgid "November 18, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:895
+#, no-wrap
+msgid "13.0-CURRENT after widening the `vm_page` `aflags` field to 16 bits."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:896
+#, no-wrap
+msgid "1300059"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:897
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/354835[354835]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:900
+#, no-wrap
+msgid "13.0-CURRENT after converting the in-tree `sysent` targets to use the new [.filename]#makesyscalls.lua#."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:901
+#, no-wrap
+msgid "1300060"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:902
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/354922[354922]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:903
+#, no-wrap
+msgid "November 20, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:905
+#, no-wrap
+msgid "13.0-CURRENT after adding [.filename]#/etc/os-release# as a symbolic link to [.filename]#/var/run/os-release#."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:906
+#, no-wrap
+msgid "1300061"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:907
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/354977[354977]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:908
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2146
+#, no-wrap
+msgid "November 21, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:910
+#, no-wrap
+msgid "13.0-CURRENT after adding functions to man:bitstring[3] to find contiguous sequences of set or unset bits."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:911
+#, no-wrap
+msgid "1300062"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:912
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/355309[355309]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:913
+#, no-wrap
+msgid "December 2, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:915
+#, no-wrap
+msgid "13.0-CURRENT after adding TCP_STATS support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:916
+#, no-wrap
+msgid "1300063"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:917
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/355537[355537]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:918
+#, no-wrap
+msgid "December 8, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:920
+#, no-wrap
+msgid "13.0-CURRENT after removal of VI_DOOMED (use VN_IS_DOOMED instead)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:921
+#, no-wrap
+msgid "1300064"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:922
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2150
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/355658[355658]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:923
+#, no-wrap
+msgid "December 9, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:925
+#, no-wrap
+msgid "13.0-CURRENT after correcting the C++ version check for declaring man:timespec_get[3]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:926
+#, no-wrap
+msgid "1300065"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:927
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/355643[355643]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:928
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:933
+#, no-wrap
+msgid "December 12, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:930
+#, no-wrap
+msgid "13.0-CURRENT after adding `sigsetop` extensions commonly found in musl libc and glibc."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:931
+#, no-wrap
+msgid "1300066"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:932
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/355679[355679]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:935
+#, no-wrap
+msgid "13.0-CURRENT after changing the internal interface between the NFS modules as part of the introduction of NFS 4.2."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:936
+#, no-wrap
+msgid "1300067"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:937
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/355732[355732]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:938
+#, no-wrap
+msgid "December 13, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:940
+#, no-wrap
+msgid "13.0-CURRENT after removing the deprecated `callout_handle_init`, `timeout`, and `untimeout` functions."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:941
+#, no-wrap
+msgid "1300068"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:942
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/355828[355828]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:943
+#, no-wrap
+msgid "December 16, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:945
+#, no-wrap
+msgid "13.0-CURRENT after doubling the value of `ARG_MAX`, for 64 bit platforms."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:946
+#, no-wrap
+msgid "1300069"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:947
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356051[356051]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:948
+#, no-wrap
+msgid "December 24, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:950
+#, no-wrap
+msgid "13.0-CURRENT after the addition of busdma templates."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:951
+#, no-wrap
+msgid "1300070"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:952
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356113[356113]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:953
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:958
+#, no-wrap
+msgid "December 27, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:955
+#, no-wrap
+msgid "13.0-CURRENT after eliminating the last MI difference in AT_* definitions (for powerpc)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:956
+#, no-wrap
+msgid "1300071"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:957
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356135[356135]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:960
+#, no-wrap
+msgid "13.0-CURRENT after making USB statistics be per-device instead of per bus."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:961
+#, no-wrap
+msgid "1300072"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:962
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356185[356185]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:963
+#, no-wrap
+msgid "December 29, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:965
+#, no-wrap
+msgid "13.0-CURRENT after removal of `GEOM_SCHED` class and `gsched` tool."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:966
+#, no-wrap
+msgid "1300073"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:967
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356263[356263]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:968
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2166
+#, no-wrap
+msgid "January 2, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:970
+#, no-wrap
+msgid "13.0-CURRENT after removing arm/arm as a valid target."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:971
+#, no-wrap
+msgid "1300074"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:972
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356337[356337]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:973
+#, no-wrap
+msgid "January 3, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:975
+#, no-wrap
+msgid "13.0-CURRENT after removing flags argument from `VOP_UNLOCK`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:976
+#, no-wrap
+msgid "1300075"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:977
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356409[356409]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:978
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2171
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3269
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4044
+#, no-wrap
+msgid "January 6, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:980
+#, no-wrap
+msgid "13.0-CURRENT after adding own counter for cancelled USB transfers."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:981
+#, no-wrap
+msgid "1300076"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:982
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356511[356511]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:983
+#, no-wrap
+msgid "January 8, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:985
+#, no-wrap
+msgid "13.0-CURRENT after pushing `vnop` implementation into the `fileop` layer in man:posix_fallocate[2]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:987
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/357396[357396]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:988
+#, no-wrap
+msgid "February 2, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:990
+#, no-wrap
+msgid "13.0-CURRENT after removal of armv5 architecture code from the src tree."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:991
+#, no-wrap
+msgid "1300077"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:992
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/357455[357455]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:993
+#, no-wrap
+msgid "February 3, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:995
+#, no-wrap
+msgid "13.0-CURRENT after removal of sparc64 architecture code from the src tree."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:996
+#, no-wrap
+msgid "1300078"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:997
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/358020[358020]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:998
+#, no-wrap
+msgid "February 17, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1000
+#, no-wrap
+msgid "13.0-CURRENT after changing `struct vnet` and the VNET magic cookie."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1001
+#, no-wrap
+msgid "1300079"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1002
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/358164[358164]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1003
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1008
+#, no-wrap
+msgid "February 20, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1005
+#, no-wrap
+msgid "13.0-CURRENT after upgrading ncurses to 6.2.x"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1006
+#, no-wrap
+msgid "1300080"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1007
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/358172[358172]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1010
+#, no-wrap
+msgid "13.0-CURRENT after adding `realpathat` syscall to VFS."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1011
+#, no-wrap
+msgid "1300081"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1012
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/358218[358218]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1013
+#, no-wrap
+msgid "February 21, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1015
+#, no-wrap
+msgid "13.0-CURRENT after recent linuxkpi changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1016
+#, no-wrap
+msgid "1300082"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1017
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/358497[358497]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1018
+#, no-wrap
+msgid "March 1, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1020
+#, no-wrap
+msgid "13.0-CURRENT after removal of man:bktr[4]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1021
+#, no-wrap
+msgid "1300083"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1022
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/358834[358834]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1023
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1028
+#, no-wrap
+msgid "March 10, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1025
+#, no-wrap
+msgid "13.0-CURRENT after removal of man:amd[8], r358821."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1026
+#, no-wrap
+msgid "1300084"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1027
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/358851[358851]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1030
+#, no-wrap
+msgid "13.0-CURRENT after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 10.0.0-rc3 c290cb61fdc."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1031
+#, no-wrap
+msgid "1300085"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1032
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/359261[359261]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1033
+#, no-wrap
+msgid "March 23, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1035
+#, no-wrap
+msgid "13.0-CURRENT after the import of the kyua test framework."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1036
+#, no-wrap
+msgid "1300086"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1037
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/359347[359347]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1038
+#, no-wrap
+msgid "March 26, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1040
+#, no-wrap
+msgid "13.0-CURRENT after switching powerpc and powerpcspe to the lld linker."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1041
+#, no-wrap
+msgid "1300087"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1042
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/359374[359374]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1043
+#, no-wrap
+msgid "March 27, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1045
+#, no-wrap
+msgid "13.0-CURRENT after refactoring the driver and consumer interfaces for in-kernel cryptography."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1046
+#, no-wrap
+msgid "1300088"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1047
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/359530[359530]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1048
+#, no-wrap
+msgid "April 1, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1050
+#, no-wrap
+msgid "13.0-CURRENT after removing support for procfs process debugging."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1051
+#, no-wrap
+msgid "1300089"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1052
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/359727[359727]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1053
+#, no-wrap
+msgid "April 8, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1055
+#, no-wrap
+msgid "13.0-CURRENT after cloning the RCU interface into a sleepable and a non-sleepable part in the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1056
+#, no-wrap
+msgid "1300090"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1057
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/359747[359747]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1058
+#, no-wrap
+msgid "April 9, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1060
+#, no-wrap
+msgid "13.0-CURRENT after removing the old NFS lock device driver that uses Giant."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1061
+#, no-wrap
+msgid "1300091"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1062
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/359839[359839]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1063
+#, no-wrap
+msgid "April 12, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1065
+#, no-wrap
+msgid "13.0-CURRENT after implementing a man:close_range[2] syscall."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1066
+#, no-wrap
+msgid "1300092"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1067
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/359920[359920]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1068
+#, no-wrap
+msgid "April 14, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1070
+#, no-wrap
+msgid "13.0-CURRENT after reworking unmapped mbufs in KTLS to carry `ext_pgs` in the mbuf itself."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1071
+#, no-wrap
+msgid "1300093"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1072
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/360418[360418]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1073
+#, no-wrap
+msgid "April 27, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1075
+#, no-wrap
+msgid "13.0-CURRENT after adding support for kernel TLS receive offload."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1076
+#, no-wrap
+msgid "1300094"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1077
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/360796[360796]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1078
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3294
+#, no-wrap
+msgid "May 7, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1080
+#, no-wrap
+msgid "13.0-CURRENT after linuxkpi changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1081
+#, no-wrap
+msgid "1300095"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1082
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/361275[361275]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1083
+#, no-wrap
+msgid "May 20, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1085
+#, no-wrap
+msgid "13.0-CURRENT after adding HyperV socket support for FreeBSD guests."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1086
+#, no-wrap
+msgid "1300096"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1087
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/361410[361410]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1088
+#, no-wrap
+msgid "May 23, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1090
+#, no-wrap
+msgid "13.0-CURRENT after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 10.0.1 rc1 f79cd71e145."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1091
+#, no-wrap
+msgid "1300097"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1092
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/361724[361724]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1093
+#, no-wrap
+msgid "June 2, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1095
+#, no-wrap
+msgid "13.0-CURRENT after implementing `__is_constexpr()` function macro in the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1096
+#, no-wrap
+msgid "1300098"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1097
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/362159[362159]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1098
+#, no-wrap
+msgid "June 14, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1100
+#, no-wrap
+msgid "13.0-CURRENT after changing the `export_args ex_flags` field so that is 64bits."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1101
+#, no-wrap
+msgid "1300099"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1102
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/362453[362453]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1103
+#, no-wrap
+msgid "June 20, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1105
+#, no-wrap
+msgid "13.0-CURRENT after making liblzma use libmd implementation of SHA256."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1106
+#, no-wrap
+msgid "1300100"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1107
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/362640[362640]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1108
+#, no-wrap
+msgid "June 26, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1110
+#, no-wrap
+msgid "13.0-CURRENT after changing the internal API between the NFS kernel modules."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1111
+#, no-wrap
+msgid "1300101"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1112
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/363077[363077]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1113
+#, no-wrap
+msgid "July 10, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1115
+#, no-wrap
+msgid "13.0-CURRENT after implementing the `array_size()` function in the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1116
+#, no-wrap
+msgid "1300102"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1117
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/363562[363562]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1118
+#, no-wrap
+msgid "July 26, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1120
+#, no-wrap
+msgid "13.0-CURRENT after implementing lockless lookup in the VFS layer."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1121
+#, no-wrap
+msgid "1300103"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1122
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/363757[363757]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1123
+#, no-wrap
+msgid "August 1, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1125
+#, no-wrap
+msgid "13.0-CURRENT after making rights mandatory for NDINIT_ALL."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1126
+#, no-wrap
+msgid "1300104"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1127
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/363783[363783]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1128
+#, no-wrap
+msgid "August 2, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1130
+#, no-wrap
+msgid "13.0-CURRENT after vnode layout changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1131
+#, no-wrap
+msgid "1300105"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1132
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/363894[363894]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1133
+#, no-wrap
+msgid "August 5, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1135
+#, no-wrap
+msgid "13.0-CURRENT after `vaccess()` change."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1136
+#, no-wrap
+msgid "1300106"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1137
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/364092[364092]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1138
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1143
+#, no-wrap
+msgid "August 11, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1140
+#, no-wrap
+msgid "13.0-CURRENT after adding an argument to `newnfs_connect()` that indicates use TLS for the connection."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1141
+#, no-wrap
+msgid "1300107"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1142
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/364109[364109]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1145
+#, no-wrap
+msgid "13.0-CURRENT after change to clone the task struct fields related to RCU."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1146
+#, no-wrap
+msgid "1300108"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1147
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/364233[364233]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1148
+#, no-wrap
+msgid "August 14, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1150
+#, no-wrap
+msgid "13.0-CURRENT after adding a few `wait_bit` functions to the linuxkpi, which are needed for DRM from Linux v5.4."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1151
+#, no-wrap
+msgid "1300109"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1152
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/364274[364274]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1153
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1158
+#, no-wrap
+msgid "August 16, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1155
+#, no-wrap
+msgid "13.0-CURRENT after `vget()` argument removal and `namei` flags renumbering."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1157
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/364284[364284]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1160
+#, no-wrap
+msgid "13.0-CURRENT after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to release/11.x llvmorg-11.0.0-rc1-47-gff47911ddfc."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1161
+#, no-wrap
+msgid "1300110"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1162
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/364331[364331]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1163
+#, no-wrap
+msgid "August 18, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1165
+#, no-wrap
+msgid "13.0-CURRENT after deleting the unused `use_ext` argument to `nfscl_reqstart()`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1166
+#, no-wrap
+msgid "1300111"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1167
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/364476[364476]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1168
+#, no-wrap
+msgid "August 22, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1170
+#, no-wrap
+msgid "13.0-CURRENT after adding TLS support to the kernel RPC."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1171
+#, no-wrap
+msgid "1300112"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1172
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/364747[364747]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1173
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1178
+#, no-wrap
+msgid "August 25, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1175
+#, no-wrap
+msgid "13.0-CURRENT after merging OpenZFS support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1176
+#, no-wrap
+msgid "1300113"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1177
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/364753[364753]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1180
+#, no-wrap
+msgid "13.0-CURRENT after adding atomic and `bswap` functions to libcompiler_rt."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1181
+#, no-wrap
+msgid "1300114"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1182
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/365459[365459]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1183
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2256
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3339
+#, no-wrap
+msgid "September 8, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1185
+#, no-wrap
+msgid "13.0-CURRENT after changing arm64 AT_HWCAP definitions for man:elf_aux_info[3]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1186
+#, no-wrap
+msgid "1300115"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1187
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/365705[365705]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1188
+#, no-wrap
+msgid "September 14, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1190
+#, no-wrap
+msgid "13.0-CURRENT after fixing man:crunchgen[1] application build with `WARNS=6`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1191
+#, no-wrap
+msgid "1300116"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1192
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/366062[366062]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1193
+#, no-wrap
+msgid "September 22, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1195
+#, no-wrap
+msgid "13.0-CURRENT after the introduction of the powerpc64le ARCH."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1196
+#, no-wrap
+msgid "1300117"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1197
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/366070[366070]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1198
+#, no-wrap
+msgid "September 23, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1200
+#, no-wrap
+msgid "13.0-CURRENT after reimplementing `purgevfs` to iterate vnodes instead of the entire hash."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1201
+#, no-wrap
+msgid "1300118"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1202
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/366374[366374]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1203
+#, no-wrap
+msgid "October 2, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1205
+#, no-wrap
+msgid "13.0-CURRENT after adding backlight support and `dmi_*` functions to the linuxkpi."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1206
+#, no-wrap
+msgid "1300119"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1207
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/366432[366432]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1208
+#, no-wrap
+msgid "October 6, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1210
+#, no-wrap
+msgid "13.0-CURRENT after populating the acquire context field of a `ww_mutex` in the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1211
+#, no-wrap
+msgid "1300120"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1212
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/366666[366666]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1213
+#, no-wrap
+msgid "October 13, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1215
+#, no-wrap
+msgid "13.0-CURRENT after the fix to arm64 write-only mappings."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1216
+#, no-wrap
+msgid "1300121"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1217
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/366719[366719]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1218
+#, no-wrap
+msgid "October 15, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1220
+#, no-wrap
+msgid "13.0-CURRENT after the addition of `VOP_EAGAIN`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1221
+#, no-wrap
+msgid "1300122"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1222
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/366782[366782]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1223
+#, no-wrap
+msgid "October 17, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1225
+#, no-wrap
+msgid "13.0-CURRENT after the addition of `ptsname_r`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1226
+#, no-wrap
+msgid "1300123"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1227
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/366871[366871]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1228
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2286
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3349
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3354
+#, no-wrap
+msgid "October 20, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1230
+#, no-wrap
+msgid "13.0-CURRENT after `VOP`, `VPTOCNP`, and `INACTIVE` changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1231
+#, no-wrap
+msgid "1300124"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1232
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/367162[367162]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1233
+#, no-wrap
+msgid "October 30, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1235
+#, no-wrap
+msgid "13.0-CURRENT after adding `cache_vop_mkdir` and renaming `cache_rename` to `cache_vop_rename`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1236
+#, no-wrap
+msgid "1300125"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1237
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/367347[367347]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1238
+#, no-wrap
+msgid "November 4, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1240
+#, no-wrap
+msgid "13.0-CURRENT after using a `rms` lock for teardown handling in `zfs`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1241
+#, no-wrap
+msgid "1300126"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1242
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/367384[367384]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1243
+#, no-wrap
+msgid "November 5, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1245
+#, no-wrap
+msgid "13.0-CURRENT after rationalizing per-cpu zones."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1246
+#, no-wrap
+msgid "1300127"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1247
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/367432[367432]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1248
+#, no-wrap
+msgid "November 6, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1250
+#, no-wrap
+msgid "13.0-CURRENT after moving `malloc_type_internal` into `malloc_type`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1251
+#, no-wrap
+msgid "1300128"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1252
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/367522[367522]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1253
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2291
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3359
+#, no-wrap
+msgid "November 9, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1255
+#, no-wrap
+msgid "13.0-CURRENT after LinuxKPI additions to implement ACPI bits required by `drm-kmod` in the base system."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1256
+#, no-wrap
+msgid "1300129"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1257
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/367627[367627]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1258
+#, no-wrap
+msgid "November 12, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1260
+#, no-wrap
+msgid "13.0-CURRENT after retiring `malloc_last_fail`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1261
+#, no-wrap
+msgid "1300130"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1262
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/367777[367777]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1263
+#, no-wrap
+msgid "November 17, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1265
+#, no-wrap
+msgid "13.0-CURRENT after `p_pd` / `pwddesc` split from `p_fd` / filedesc."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1266
+#, no-wrap
+msgid "1300131"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1267
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/368417[368417]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1268
+#, no-wrap
+msgid "December 7, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1270
+#, no-wrap
+msgid "13.0-CURRENT after removal of crypto file descriptors."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1271
+#, no-wrap
+msgid "1300132"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1272
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/368659[368659]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1273
+#, no-wrap
+msgid "December 15, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1275
+#, no-wrap
+msgid "13.0-CURRENT after improving handling of alternate settings in the USB stack."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1276
+#, no-wrap
+msgid "1300133"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1277
+#, no-wrap
+msgid "gitref:2ed0c8d801f5f72dbde7a7d30135c1cc361a1e90[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1278
+#, no-wrap
+msgid "December 23, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1280
+#, no-wrap
+msgid "13.0-CURRENT after changing the internal API between the NFS and kernel RPC modules."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1281
+#, no-wrap
+msgid "1300134"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1282
+#, no-wrap
+msgid "gitref:a84b0e94cdbf1a17a798ab7f77375aacb4d400ff[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1283
+#, no-wrap
+msgid "January 7, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1285
+#, no-wrap
+msgid "13.0-CURRENT after factoring out the hardware-independent part of USB HID support to a new module."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1286
+#, no-wrap
+msgid "1300135"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1287
+#, no-wrap
+msgid "gitref:35a39dc5b34962081eeda8dbcf0b99a31585499b[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1288
+#, no-wrap
+msgid "January 12, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1290
+#, no-wrap
+msgid "13.0-CURRENT after adding `kernel_fpu_begin`/`kernel_fpu_end` to the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1291
+#, no-wrap
+msgid "1300136"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1292
+#, no-wrap
+msgid "gitref:72c551930be195b5ea982c1b16767f54388424f2[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1293
+#, no-wrap
+msgid "January 17, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1295
+#, no-wrap
+msgid "13.0-CURRENT after reimplementing LinuxKPI's `irq_work` queue on top of fast `taskqueue`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1296
+#, no-wrap
+msgid "1300137"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1297
+#, no-wrap
+msgid "gitref:010196adcfaf2bb610725394d40691874b4ff2af[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1298
+#, no-wrap
+msgid "January 30, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1300
+#, no-wrap
+msgid "13.0-CURRENT after fixing a clang assertion when building the package:devel/onetbb[] port."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1301
+#, no-wrap
+msgid "1300138"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1302
+#, no-wrap
+msgid "gitref:dcee9964238b12a8e55917f292139f074b1a80b2[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1303
+#, no-wrap
+msgid "February 1, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1305
+#, no-wrap
+msgid "13.0-ALPHA3 after adding lockless symlink lookup to vfs cache."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1306
+#, no-wrap
+msgid "1300139"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1307
+#, no-wrap
+msgid "gitref:91a07ed50ffca4dfada3e7f1f050ea746c1bac66[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1308
+#, no-wrap
+msgid "February 2, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1310
+#, no-wrap
+msgid "13.0-ALPHA3 after adding various LinuxKPI bits conflicting with drm-kmod."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1311
+#, no-wrap
+msgid "1300500"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1312
+#, no-wrap
+msgid "gitref:3c6a89748a01869c18955d5e3bfcdf35f6705d26[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1313
+#, no-wrap
+msgid "February 5, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1315
+#, no-wrap
+msgid "13.0-STABLE after releng/13.0 was branched."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1316
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1321
+#, no-wrap
+msgid "1300501"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1317
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1322
+#, no-wrap
+msgid "gitref:c3f97dd75a1c294c4f60f42b604ee8bcda17be09[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1318
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1323
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1328
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1333
+#, no-wrap
+msgid "April 23, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1320
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1325
+#, no-wrap
+msgid "13.0-STABLE after fixing rtld's `dl_iterate_phdr()`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1326
+#, no-wrap
+msgid "1300502"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1327
+#, no-wrap
+msgid "gitref:da6a8ccfa293c3c831fdde51169754fcb9587657[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1330
+#, no-wrap
+msgid "13.0-STABLE after implementing `atomic_dec_and_lock_irqsave()` in the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1331
+#, no-wrap
+msgid "1300503"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1332
+#, no-wrap
+msgid "gitref:d60c6dc8f69b1264c7af5e2479ea94f000fd2c6d[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1335
+#, no-wrap
+msgid "13.0-STABLE after changing the internal KAPI between the krpc and NFS."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1336
+#, no-wrap
+msgid "1300504"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1337
+#, no-wrap
+msgid "gitref:fb34817c686cc130449325499870e36979899801[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1338
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2301
+#, no-wrap
+msgid "April 30, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1340
+#, no-wrap
+msgid "13.0-STABLE after updating the LinuxKPI to accommodate the drm-kmod 5.5 update."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1341
+#, no-wrap
+msgid "1300505"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1342
+#, no-wrap
+msgid "gitref:8f81f190a640e211dd814bdde7811982b9491fb0[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1343
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2306
+#, no-wrap
+msgid "May 10, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1345
+#, no-wrap
+msgid "13.0-STABLE after changing the internal KAPI between the nscl.ko and nfscommon.ko modules."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1346
+#, no-wrap
+msgid "1300506"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1347
+#, no-wrap
+msgid "gitref:e31579b8558db508dfc3f8fc276611a7c3c93aa1[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1348
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1353
+#, no-wrap
+msgid "June 2, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1350
+#, no-wrap
+msgid "13.0-STABLE after adding TCP LRO support for VLAN and VxLAN."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1351
+#, no-wrap
+msgid "1300507"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1352
+#, no-wrap
+msgid "gitref:c64d1bd7145b5d30c97d1cd99e584da529d95100[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1355
+#, no-wrap
+msgid "13.0-STABLE after adding a new member to the man:EPOCH[9] tracker structure."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1356
+#, no-wrap
+msgid "1300508"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1357
+#, no-wrap
+msgid "gitref:658f5eed38c35f3f7d6695110b7dae8dc94d12c7[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1360
+#, no-wrap
+msgid "13.0-STABLE after adding macros for `might_lock_nested()` and `lockdep_(re/un/)pin_lock()` to the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1361
+#, no-wrap
+msgid "1300509"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1362
+#, no-wrap
+msgid "gitref:210349325af9920d1535ad76fa3b92847684f6e0[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1363
+#, no-wrap
+msgid "June 14, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1365
+#, no-wrap
+msgid "13.0-STABLE after adding a macro for `list_for_each_entry_lockless()` to the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1366
+#, no-wrap
+msgid "1300510"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1367
+#, no-wrap
+msgid "gitref:eb3397588e1b48043e166587ea454f60efea88d0[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1368
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2311
+#, no-wrap
+msgid "June 26, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1370
+#, no-wrap
+msgid "13.0-STABLE after changing the internal KAPI between the krpc and nfsd modules."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1371
+#, no-wrap
+msgid "1300511"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1372
+#, no-wrap
+msgid "gitref:2622570aeb3d162812d72f7ef192c322cd8b73ef[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1373
+#, no-wrap
+msgid "July 7, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1375
+#, no-wrap
+msgid "13.0-STABLE after changing `softdep_prelink()` to only do sync if another thread changed the vnode metadata since previous `prelink`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1376
+#, no-wrap
+msgid "1300512"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1377
+#, no-wrap
+msgid "gitref:f72db34d2295080f57a283858125aa906c0d409e[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1378
+#, no-wrap
+msgid "July 18, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1380
+#, no-wrap
+msgid "13.0-STABLE after various merges to LinuxKPI, OFED, net80211, and drivers."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1381
+#, no-wrap
+msgid "1300513"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1382
+#, no-wrap
+msgid "gitref:af732203b8f7f006927528db5497f5cbc4c4742a[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1385
+#, no-wrap
+msgid "13.0-STABLE after upgrading llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-12.0.1-0-gfed41342a82f, a.k.a. 12.0.1 release."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1386
+#, no-wrap
+msgid "1300514"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1387
+#, no-wrap
+msgid "gitref:53d162819c20e5cf267cb91f7a19940e96e8bec4[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1388
+#, no-wrap
+msgid "August 3, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1390
+#, no-wrap
+msgid "Incompatible changes to the KBI of internal interfaces between NFS requires rebuilding modules."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1391
+#, no-wrap
+msgid "1300515"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1392
+#, no-wrap
+msgid "gitref:0437d10e359ea1cbefff8d17cd18ca491dbbd5d7[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1393
+#, no-wrap
+msgid "September 22, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1395
+#, no-wrap
+msgid "13.0-STABLE returning to 13.0 KBI for linuxkpi."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1396
+#, no-wrap
+msgid "1300518"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1397
+#, no-wrap
+msgid "gitref:a017868e281874261a560ba1e3069b4e14b7483e[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1398
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1403
+#, no-wrap
+msgid "October 21, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1400
+#, no-wrap
+msgid "13.0-STABLE after adding `crypto_cursor_segment()`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1401
+#, no-wrap
+msgid "1300519"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1402
+#, no-wrap
+msgid "gitref:fe2827f1678b8ff0baf62a1529b2cc121a25b090[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1405
+#, no-wrap
+msgid "13.0-STABLE after extending the AES-CCM and Chacha20-Poly1305 ciphers in OCF to support multiple nonce lengths."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1406
+#, no-wrap
+msgid "1300521"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1407
+#, no-wrap
+msgid "gitref:29745cf91cfc22afa94da0ce43e07a6dc377f631[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1408
+#, no-wrap
+msgid "November 19, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1410
+#, no-wrap
+msgid "13.0-STABLE after various merges to LinuxKPI and net80211."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1411
+#, no-wrap
+msgid "1300522"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1412
+#, no-wrap
+msgid "gitref:0c8684ae20019b63c6672cc9fa40e1426708b007[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1413
+#, no-wrap
+msgid "November 24, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1415
+#, no-wrap
+msgid "13.0-STABLE after changing the internal KAPI between the NFS modules."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1417
+#, no-wrap
+msgid "gitref:7224d4125ab57bc1c4c799a6c286be42f8d37a83[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1418
+#, no-wrap
+msgid "December 6, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1420
+#, no-wrap
+msgid "13.0-STABLE after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-13.0.0-0-gd7b669b3a303, a.k.a. 13.0.0 release."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1421
+#, no-wrap
+msgid "1300523"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1422
+#, no-wrap
+msgid "gitref:690bcf605d84283c1f9d254885a3cac69c5e80a6[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1423
+#, no-wrap
+msgid "December 18, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1425
+#, no-wrap
+msgid "13.0-STABLE after adding two arguments to man:VOP_ALLOCATE[9]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1426
+#, no-wrap
+msgid "1300524"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1427
+#, no-wrap
+msgid "gitref:dc4114875ef10618002d3eeb46f09dc42da56b30[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1428
+#, no-wrap
+msgid "January 14, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1430
+#, no-wrap
+msgid "13.0-STABLE after making the CPU_SET macros compatible with glibc."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1431
+#, no-wrap
+msgid "1300525"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1432
+#, no-wrap
+msgid "gitref:dee0854a009cde7dcdb16ba39754237737022c8a[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1433
+#, no-wrap
+msgid "January 22, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1435
+#, no-wrap
+msgid "13.0-STABLE after multiple LinuxKPI changes required by drm-kmod."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1436
+#, no-wrap
+msgid "1300526"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1437
+#, no-wrap
+msgid "gitref:c39ff2415cb965b729fd16f9eae91e712313877b[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1438
+#, no-wrap
+msgid "February 20, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1440
+#, no-wrap
+msgid "13.0-STABLE after multiple LinuxKPI changes overlapping but not conflicting with drm-kmod."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1441
+#, no-wrap
+msgid "1301000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1442
+#, no-wrap
+msgid "gitref:ad329796bdb29c69bce610ad332d08257d7157ac[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1443
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1448
+#, no-wrap
+msgid "March 10, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1445
+#, no-wrap
+msgid "releng/13.1 branched."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1446
+#, no-wrap
+msgid "1301500"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1447
+#, no-wrap
+msgid "gitref:08523c8c63bbcdcd3f0d36787a544817cb5b8282[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1450
+#, no-wrap
+msgid "13.1-STABLE after releng/13.1 branched."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1451
+#, no-wrap
+msgid "1301501"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1452
+#, no-wrap
+msgid "gitref:6663718bb49635deac3f5dc55fa6f0f7cba593ba[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1453
+#, no-wrap
+msgid "March 27, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1455
+#, no-wrap
+msgid "13.1-STABLE after various merges to LinuxKPI and net80211."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1456
+#, no-wrap
+msgid "1301502"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1457
+#, no-wrap
+msgid "gitref:2278cf4e48e7679b0a60008a83c764fe852174b2[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1458
+#, no-wrap
+msgid "April 27, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1460
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1475
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1485
+#, no-wrap
+msgid "13.1-STABLE after various merges to LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1461
+#, no-wrap
+msgid "1301503"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1462
+#, no-wrap
+msgid "gitref:b2aa64d05bd8b04a1bdb63f2a5f9de39c600b463[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1463
+#, no-wrap
+msgid "May 19, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1465
+#, no-wrap
+msgid "13.1-STABLE after adding alternate DRIVER_MODULE macros without a devclass argument."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1466
+#, no-wrap
+msgid "1301504"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1467
+#, no-wrap
+msgid "gitref:a13b6fc61908fd6afa460b88f94e4a67be74bb9a[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1468
+#, no-wrap
+msgid "June 4, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1470
+#, no-wrap
+msgid "13.1-STABLE after upgrading llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-14.0.3-0-g1f9140064dfb, a.k.a. 14.0.3 release."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1471
+#, no-wrap
+msgid "1301505"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1472
+#, no-wrap
+msgid "gitref:6f93a76ffeabf7d4488edc73a0cca01436c2903b[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1473
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1483
+#, no-wrap
+msgid "June 21, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1476
+#, no-wrap
+msgid "1301506"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1477
+#, no-wrap
+msgid "gitref:8e6cfc632cf6f9fc906df9d825649443939b55c6[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1478
+#, no-wrap
+msgid "July 13, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1480
+#, no-wrap
+msgid "13.1-STABLE after adding <crypto/chacha20_poly1305.h> and <crypto/curve25519.h>."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1481
+#, no-wrap
+msgid "1301507"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1482
+#, no-wrap
+msgid "gitref:9cbba5950123f3afedcc5f24c43956e7a26f22f4[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1486
+#, no-wrap
+msgid "1301508"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1487
+#, no-wrap
+msgid "gitref:83ac15a799e348c391951f5877feecd4089bab80[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1490
+#, no-wrap
+msgid "13.1-STABLE after various merges to LinuxKPI, and for de-macrofying pause()."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1491
+#, no-wrap
+msgid "1301509"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1492
+#, no-wrap
+msgid "gitref:baa97013121a915057ee54dfcb2cb87e541f7d7f[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1493
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2356
+#, no-wrap
+msgid "October 19, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1495
+#, no-wrap
+msgid "13.1-STABLE after introduction of v2 of TX Queue Select Functionality."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1496
+#, no-wrap
+msgid "1301510"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1497
+#, no-wrap
+msgid "gitref:6820a0512fa6616ee1da46cb0075da80478776f0[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1498
+#, no-wrap
+msgid "December 8, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1500
+#, no-wrap
+msgid "13.1-STABLE after LinuxKPI dmi_matches() fixes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1501
+#, no-wrap
+msgid "1301511"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1502
+#, no-wrap
+msgid "gitref:17333d92643d998d1c6a2dc5f6b1508b6507ad31[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1503
+#, no-wrap
+msgid "December 17, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1505
+#, no-wrap
+msgid "13.1-STABLE after adding a new rc: `machine_id` to generate `/etc/machine-id`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1506
+#, no-wrap
+msgid "1302500"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1507
+#, no-wrap
+msgid "gitref:c243de11cf7c4bb3d67bbc1655b149037e5b04f1[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1508
+#, no-wrap
+msgid "February 9, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1510
+#, no-wrap
+msgid "13.2-STABLE after releng/13.2 was branched."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1511
+#, no-wrap
+msgid "1302501"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1512
+#, no-wrap
+msgid "gitref:e3068d2655e2aea3e0b462a7298a68d344769ec6[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1513
+#, no-wrap
+msgid "February 16, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1515
+#, no-wrap
+msgid "13.2-STABLE after adding `totalram_pages()` to the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1516
+#, no-wrap
+msgid "1302502"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1517
+#, no-wrap
+msgid "gitref:5ca371f4f536f9ee9d6c9fb178bf1f7f6de33216[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1518
+#, no-wrap
+msgid "February 17, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1520
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1525
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1540
+#, no-wrap
+msgid "13.2-STABLE after various merges to LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1521
+#, no-wrap
+msgid "1302503"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1522
+#, no-wrap
+msgid "gitref:aaca677fee21f202db4bb974fc5056f4dcbbb598[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1523
+#, no-wrap
+msgid "February 21, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1526
+#, no-wrap
+msgid "1302504"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1527
+#, no-wrap
+msgid "gitref:d6852eed98ed32ad51120a22aa1ebdf0601917b3[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1528
+#, no-wrap
+msgid "March 12, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1530
+#, no-wrap
+msgid "13.2-STABLE after merging machine-id into `hostid_save`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1531
+#, no-wrap
+msgid "1302505"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1532
+#, no-wrap
+msgid "gitref:85e32e957fcca01d50e29e543584909795c1acef[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1533
+#, no-wrap
+msgid "April 9, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1535
+#, no-wrap
+msgid "13.2-STABLE after upgrading llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-15.0.7-0-g8dfdcc7b7bf6, a.k.a. 15.0.7 release."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1536
+#, no-wrap
+msgid "1302506"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1537
+#, no-wrap
+msgid "gitref:e982b1cf1fe1dc0b84dc24f03d1c21e3fe6bdef3[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1538
+#, no-wrap
+msgid "June 26, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1541
+#, no-wrap
+msgid "1302507"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1542
+#, no-wrap
+msgid "gitref:b2acc21dfbd6fab28b1715c775b43d4914b75e0c[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1543
+#, no-wrap
+msgid "July 23, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1545
+#, no-wrap
+msgid "13.2-STABLE after upgrading llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-16.0.6-0-g7cbf1a259152, a.k.a. 16.0.6 release."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1546
+#, no-wrap
+msgid "1302508"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1547
+#, no-wrap
+msgid "gitref:21ccba43f511cc4089899619b5a85e6d83a200dc[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1548
+#, no-wrap
+msgid "September 6, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1550
+#, no-wrap
+msgid "13.2-STABLE after ptrace started clearing TDB_BORN during PT_DETACH."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1551
+#, no-wrap
+msgid "1302509"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1552
+#, no-wrap
+msgid "gitref:faedeaf7377ba7253c281cf3315b17e0cb979075[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1553
+#, no-wrap
+msgid "December 2, 2023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1555
+#, no-wrap
+msgid "13.2-STABLE after adding a new VFS function called `vfs_exjail_clone()`, which will be used by the ZFS module."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1556
+#, no-wrap
+msgid "1302510"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1557
+#, no-wrap
+msgid "gitref:45758665781dd63dfa38bcb646d4f36b0a6a104f[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1560
+#, no-wrap
+msgid "13.2-STABLE after upgrading llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-17.0.6-0-g6009708b4367, a.k.a. 17.0.6 release."
+msgstr ""
+
+#. Template:
+#. |13XXXXX
+#. |gitref:XXXXXXXX[repository="src",length=12]
+#. |October 30, 2021
+#. |13.0-STABLE after XXXXXX.
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1572
+#, no-wrap
+msgid "FreeBSD 12 Versions"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1575
+#, no-wrap
+msgid "FreeBSD 12 `__FreeBSD_version` Values"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1584
+#, no-wrap
+msgid "1200000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1585
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/302409[302409]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1586
+#, no-wrap
+msgid "July 7, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1588
+#, no-wrap
+msgid "12.0-CURRENT."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1589
+#, no-wrap
+msgid "1200001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1590
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/302628[302628]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1591
+#, no-wrap
+msgid "July 12, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1593
+#, no-wrap
+msgid "12.0-CURRENT after removing collation from `[a-z]`-type ranges."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1594
+#, no-wrap
+msgid "1200002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1595
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/304395[304395]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1596
+#, no-wrap
+msgid "August 18, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1598
+#, no-wrap
+msgid "12.0-CURRENT after removing unused and obsolete `openbsd_poll` system call."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1599
+#, no-wrap
+msgid "1200003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1600
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/304608[304608]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1601
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3009
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3974
+#, no-wrap
+msgid "August 22, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1603
+#, no-wrap
+msgid "12.0-CURRENT after adding C++11 `thread_local` support in rev link:https://svnweb.freebsd.org/changeset/base/303795[303795]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1604
+#, no-wrap
+msgid "1200004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1605
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/304752[304752]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1606
+#, no-wrap
+msgid "August 24, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1608
+#, no-wrap
+msgid "12.0-CURRENT after fixing LC*MASK for man:newlocale[3] and man:querylocale[3] (rev link:https://svnweb.freebsd.org/changeset/base/304703[304703])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1609
+#, no-wrap
+msgid "1200005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1610
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/304789[304789]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1611
+#, no-wrap
+msgid "August 25, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1613
+#, no-wrap
+msgid "12.0-CURRENT after changing some ioctl interfaces in rev link:https://svnweb.freebsd.org/changeset/base/304787[304787] between the iSCSI userspace programs and the kernel."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1614
+#, no-wrap
+msgid "1200006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1615
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/305256[305256]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1616
+#, no-wrap
+msgid "September 1, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1618
+#, no-wrap
+msgid "12.0-CURRENT after man:crunchgen[1] META_MODE fix in link:https://svnweb.freebsd.org/changeset/base/305254[305254]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1619
+#, no-wrap
+msgid "1200007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1620
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/305421[305421]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1621
+#, no-wrap
+msgid "September 5, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1623
+#, no-wrap
+msgid "12.0-CURRENT after resolving a deadlock between `device_detach()` and man:usbd_do_request_flags[9]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1624
+#, no-wrap
+msgid "1200008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1625
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/305833[305833]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1626
+#, no-wrap
+msgid "September 15, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1628
+#, no-wrap
+msgid "12.0-CURRENT after removing the 4.3BSD compatible macro `m_copy()` in link:https://svnweb.freebsd.org/changeset/base/305824[305824]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1629
+#, no-wrap
+msgid "1200009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1630
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/306077[306077]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1631
+#, no-wrap
+msgid "September 21, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1633
+#, no-wrap
+msgid "12.0-CURRENT after removing `bio_taskqueue()` in link:https://svnweb.freebsd.org/changeset/base/305988[305988]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1634
+#, no-wrap
+msgid "1200010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1635
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/306276[306276]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1636
+#, no-wrap
+msgid "September 23, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1638
+#, no-wrap
+msgid "12.0-CURRENT after mounting man:msdosfs[5] with `longnames` support by default."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1639
+#, no-wrap
+msgid "1200011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1640
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/306556[306556]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1641
+#, no-wrap
+msgid "October 1, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1643
+#, no-wrap
+msgid "12.0-CURRENT after adding `fb_memattr` field to `fb_info` in link:https://svnweb.freebsd.org/changeset/base/306555[306555]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1644
+#, no-wrap
+msgid "1200012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1645
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/306592[306592]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1646
+#, no-wrap
+msgid "October 2, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1648
+#, no-wrap
+msgid "12.0-CURRENT after man:net80211[4] changes (rev link:https://svnweb.freebsd.org/changeset/base/306590[306590], link:https://svnweb.freebsd.org/changeset/base/306591[306591])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1649
+#, no-wrap
+msgid "1200013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1650
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/307140[307140]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1651
+#, no-wrap
+msgid "October 12, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1653
+#, no-wrap
+msgid "12.0-CURRENT after installing header files required development with `libzfs_core`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1654
+#, no-wrap
+msgid "1200014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1655
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/307529[307529]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1656
+#, no-wrap
+msgid "October 17, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1658
+#, no-wrap
+msgid "12.0-CURRENT after merging common code in man:rtwn[4] and man:urtwn[4], and adding support for 802.11ac devices."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1659
+#, no-wrap
+msgid "1200015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1660
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/308874[308874]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1661
+#, no-wrap
+msgid "November 20, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1663
+#, no-wrap
+msgid "12.0-CURRENT after some ABI change for unbreaking powerpc."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1664
+#, no-wrap
+msgid "1200016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1665
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/309017[309017]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1666
+#, no-wrap
+msgid "November 22, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1668
+#, no-wrap
+msgid "12.0-CURRENT after removing `PG_CACHED`-related fields from `vmmeter`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1669
+#, no-wrap
+msgid "1200017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1670
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/309124[309124]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1671
+#, no-wrap
+msgid "November 25, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1673
+#, no-wrap
+msgid "12.0-CURRENT after upgrading copies of clang, llvm, lldb, compiler-rt and libc++ to 3.9.0 release, and adding lld 3.9.0."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1674
+#, no-wrap
+msgid "1200018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1675
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/309676[309676]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1676
+#, no-wrap
+msgid "December 7, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1678
+#, no-wrap
+msgid "12.0-CURRENT after adding the `ki_moretdname` member to `struct kinfo_proc` and `struct kinfo_proc32` to export the whole thread name to user-space utilities."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1679
+#, no-wrap
+msgid "1200019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1680
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/310149[310149]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1681
+#, no-wrap
+msgid "December 16, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1683
+#, no-wrap
+msgid "12.0-CURRENT after starting to lay down the foundation for 11ac support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1684
+#, no-wrap
+msgid "1200020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1685
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/312087[312087]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1686
+#, no-wrap
+msgid "January 13, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1688
+#, no-wrap
+msgid "12.0-CURRENT after removing `fgetsock` and `fputsock`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1689
+#, no-wrap
+msgid "1200021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1690
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/313858[313858]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1691
+#, no-wrap
+msgid "February 16, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1693
+#, no-wrap
+msgid "12.0-CURRENT after removing MCA and EISA support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1694
+#, no-wrap
+msgid "1200022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1695
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/314040[314040]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1696
+#, no-wrap
+msgid "February 21, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1698
+#, no-wrap
+msgid "12.0-CURRENT after making the LinuxKPI task struct persistent across system calls."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1700
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/314373[314373]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1701
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1706
+#, no-wrap
+msgid "March 2, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1703
+#, no-wrap
+msgid "12.0-CURRENT after removing System V Release 4 binary compatibility support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1704
+#, no-wrap
+msgid "1200023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1705
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/314564[314564]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1708
+#, no-wrap
+msgid "12.0-CURRENT after upgrading copies of clang, llvm, lld, lldb, compiler-rt and libc++ to 4.0.0."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1709
+#, no-wrap
+msgid "1200024"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1710
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/314865[314865]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1711
+#, no-wrap
+msgid "March 7, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1713
+#, no-wrap
+msgid "12.0-CURRENT after removal of [.filename]#pcap-int.h#"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1714
+#, no-wrap
+msgid "1200025"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1715
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/315430[315430]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1716
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1721
+#, no-wrap
+msgid "March 16, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1718
+#, no-wrap
+msgid "12.0-CURRENT after addition of the [.filename]#<dev/mmc/mmc_ioctl.h># header."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1719
+#, no-wrap
+msgid "1200026"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1720
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/315662[315662]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1723
+#, no-wrap
+msgid "12.0-CURRENT after hiding `struct inpcb` and `struct tcpcb` from userland."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1724
+#, no-wrap
+msgid "1200027"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1725
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/315673[315673]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1726
+#, no-wrap
+msgid "March 21, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1728
+#, no-wrap
+msgid "12.0-CURRENT after making CAM SIM lock optional."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1729
+#, no-wrap
+msgid "1200028"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1730
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/316683[316683]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1731
+#, no-wrap
+msgid "April 10, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1733
+#, no-wrap
+msgid "12.0-CURRENT after renaming `smp_no_rendevous_barrier()` to `smp_no_rendezvous_barrier()` in link:https://svnweb.freebsd.org/changeset/base/316648[316648]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1734
+#, no-wrap
+msgid "1200029"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1735
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/317176[317176]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1736
+#, no-wrap
+msgid "April 19, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1738
+#, no-wrap
+msgid "12.0-CURRENT after the removal of `struct vmmeter` from `struct pcpu` from link:https://svnweb.freebsd.org/changeset/base/317061[317061]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1739
+#, no-wrap
+msgid "1200030"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1740
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/317383[317383]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1741
+#, no-wrap
+msgid "April 24, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1743
+#, no-wrap
+msgid "12.0-CURRENT after removing NATM support including man:en[4], man:fatm[4], man:hatm[4], and man:patm[4]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1744
+#, no-wrap
+msgid "1200031"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1745
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/318736[318736]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1746
+#, no-wrap
+msgid "May 23, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1748
+#, no-wrap
+msgid "12.0-CURRENT after types `ino_t`, `dev_t`, `nlink_t` were extended to 64bit and `struct dirent` changed layout (also known as ino64)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1749
+#, no-wrap
+msgid "1200032"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1750
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/319664[319664]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1751
+#, no-wrap
+msgid "June 8, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1753
+#, no-wrap
+msgid "12.0-CURRENT after removal of `groff`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1754
+#, no-wrap
+msgid "1200033"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1755
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/320043[320043]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1756
+#, no-wrap
+msgid "June 17, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1758
+#, no-wrap
+msgid "12.0-CURRENT after the type of the `struct event` member `data` was increased to 64bit, and ext structure members added."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1759
+#, no-wrap
+msgid "1200034"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1760
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/320085[320085]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1761
+#, no-wrap
+msgid "June 19, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1763
+#, no-wrap
+msgid "12.0-CURRENT after the NFS client and server were changed so that they actually use the 64bit `ino_t`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1764
+#, no-wrap
+msgid "1200035"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1765
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/320317[320317]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1766
+#, no-wrap
+msgid "June 24, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1768
+#, no-wrap
+msgid "12.0-CURRENT after the `MAP_GUARD` man:mmap[2] flag was added."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1769
+#, no-wrap
+msgid "1200036"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1770
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/320347[320347]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1771
+#, no-wrap
+msgid "June 26, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1773
+#, no-wrap
+msgid "12.0-CURRENT after changing `time_t` to 64 bits on powerpc (32-bit version)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1774
+#, no-wrap
+msgid "1200037"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1775
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/320545[320545]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1776
+#, no-wrap
+msgid "July 1, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1778
+#, no-wrap
+msgid "12.0-CURRENT after the cleanup and inlining of `bus_dmamap*` functions (link:https://svnweb.freebsd.org/changeset/base/320528[320528])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1779
+#, no-wrap
+msgid "1200038"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1780
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/320879[320879]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1781
+#, no-wrap
+msgid "July 10, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1783
+#, no-wrap
+msgid "12.0-CURRENT after MMC CAM committed. (link:https://svnweb.freebsd.org/changeset/base/320844[320844])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1784
+#, no-wrap
+msgid "1200039"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1785
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/321369[321369]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1786
+#, no-wrap
+msgid "July 22, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1788
+#, no-wrap
+msgid "12.0-CURRENT after upgrade of copies of clang, llvm, lld, lldb, compiler-rt and libc++ to 5.0.0 (trunk r308421)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1789
+#, no-wrap
+msgid "1200040"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1790
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3098
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/321688[321688]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1791
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3099
+#, no-wrap
+msgid "July 29, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1793
+#, no-wrap
+msgid "12.0-CURRENT after adding NFS client forced dismount support `umount -N`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1794
+#, no-wrap
+msgid "1200041"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1795
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/322762[322762]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1796
+#, no-wrap
+msgid "August 21, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1798
+#, no-wrap
+msgid "12.0-CURRENT after WRFSBASE instruction become operational on amd64."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1799
+#, no-wrap
+msgid "1200042"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1800
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/322900[322900]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1801
+#, no-wrap
+msgid "August 25, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1803
+#, no-wrap
+msgid "12.0-CURRENT after PLPMTUD counters were changed to use man:counter[9]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1804
+#, no-wrap
+msgid "1200043"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1805
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/322989[322989]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1806
+#, no-wrap
+msgid "August 28, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1808
+#, no-wrap
+msgid "12.0-CURRENT after dropping x86 CACHE_LINE_SIZE down to 64 bytes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1809
+#, no-wrap
+msgid "1200044"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1810
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/323349[323349]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1811
+#, no-wrap
+msgid "September 8, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1813
+#, no-wrap
+msgid "12.0-CURRENT after implementing `poll_wait()` in the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1814
+#, no-wrap
+msgid "1200045"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1815
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/323706[323706]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1816
+#, no-wrap
+msgid "September 18, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1818
+#, no-wrap
+msgid "12.0-CURRENT after adding shared memory support to LinuxKPI. (link:https://svnweb.freebsd.org/changeset/base/323703[323703])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1819
+#, no-wrap
+msgid "1200046"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1820
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/323910[323910]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1821
+#, no-wrap
+msgid "September 22, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1823
+#, no-wrap
+msgid "12.0-CURRENT after adding support for 32-bit compatibility IOCTLs to LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1824
+#, no-wrap
+msgid "1200047"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1825
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/324053[324053]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1826
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3109
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3114
+#, no-wrap
+msgid "September 26, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1828
+#, no-wrap
+msgid "12.0-CURRENT after removing M_HASHTYPE_RSS_UDP_IPV4_EX. (link:https://svnweb.freebsd.org/changeset/base/324052[324052])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1829
+#, no-wrap
+msgid "1200048"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1830
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/324227[324227]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1831
+#, no-wrap
+msgid "October 2, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1833
+#, no-wrap
+msgid "12.0-CURRENT after hiding `struct socket` and `struct unpcb` from userland."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1834
+#, no-wrap
+msgid "1200049"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1835
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/324281[324281]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1836
+#, no-wrap
+msgid "October 4, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1838
+#, no-wrap
+msgid "12.0-CURRENT after adding the `value.u16` field to `struct diocgattr_arg`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1839
+#, no-wrap
+msgid "1200050"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1840
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/324342[324342]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1841
+#, no-wrap
+msgid "October 5, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1843
+#, no-wrap
+msgid "12.0-CURRENT after adding the `armv7 MACHINE_ARCH`. (link:https://svnweb.freebsd.org/changeset/base/324340[324340])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1844
+#, no-wrap
+msgid "1200051"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1845
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/324455[324455]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1846
+#, no-wrap
+msgid "October 9, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1848
+#, no-wrap
+msgid "12.0-CURRENT after removing [.filename]#libstand.a# as a public interface. (link:https://svnweb.freebsd.org/changeset/base/324454[324454])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1849
+#, no-wrap
+msgid "1200052"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1850
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/325028[325028]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1851
+#, no-wrap
+msgid "October 26, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1853
+#, no-wrap
+msgid "12.0-CURRENT after fixing `ptrace()` to always clear the correct thread event when resuming."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1854
+#, no-wrap
+msgid "1200053"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1855
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/325506[325506]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1856
+#, no-wrap
+msgid "November 7, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1858
+#, no-wrap
+msgid "12.0-CURRENT after changing `struct mbuf` layout to add optional hardware timestamps for receive packets."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1859
+#, no-wrap
+msgid "1200054"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1860
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/325852[325852]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1861
+#, no-wrap
+msgid "November 15, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1863
+#, no-wrap
+msgid "12.0-CURRENT after changing the layout of `struct vmtotal` to allow for reporting large memory counters."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1864
+#, no-wrap
+msgid "1200055"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1865
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/327740[327740]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1866
+#, no-wrap
+msgid "January 9, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1868
+#, no-wrap
+msgid "12.0-CURRENT after adding `cpucontrol -e` support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1869
+#, no-wrap
+msgid "1200056"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1870
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/327952[327952]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1871
+#, no-wrap
+msgid "January 14, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1873
+#, no-wrap
+msgid "12.0-CURRENT after upgrading clang, llvm, lld, lldb, compiler-rt and libc++ to 6.0.0 (branches/release_60 r321788)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1874
+#, no-wrap
+msgid "1200057"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1875
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/329033[329033]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1876
+#, no-wrap
+msgid "February 8, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1878
+#, no-wrap
+msgid "12.0-CURRENT after applying a clang 6.0.0 fix to make the wine ports build correctly."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1879
+#, no-wrap
+msgid "1200058"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1880
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/329166[329166]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1881
+#, no-wrap
+msgid "February 12, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1883
+#, no-wrap
+msgid "12.0-CURRENT after the Lua loader was committed."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1884
+#, no-wrap
+msgid "1200059"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1885
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/330299[330299]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1886
+#, no-wrap
+msgid "March 2, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1888
+#, no-wrap
+msgid "12.0-CURRENT after removing the declaration of `union semun` unless `_WANT_SEMUN` is defined. Also the removal of `struct mymsg` and the renaming of kernel-only members of `struct semid_ds` and `struct msgid_ds`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1889
+#, no-wrap
+msgid "1200060"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1890
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/330384[330384]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1891
+#, no-wrap
+msgid "March 4, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1893
+#, no-wrap
+msgid "12.0-CURRENT after upgrading clang, llvm, lld, lldb, compiler-rt and libc++ to 6.0.0 release."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1894
+#, no-wrap
+msgid "1200061"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1895
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/332100[332100]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1896
+#, no-wrap
+msgid "April 6, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1898
+#, no-wrap
+msgid "12.0-CURRENT after changing man:syslog[3] to emit RFC 5424 formatted messages."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1899
+#, no-wrap
+msgid "1200062"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1900
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/332423[332423]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1901
+#, no-wrap
+msgid "April 12, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1903
+#, no-wrap
+msgid "12.0-CURRENT after changing the Netmap API."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1904
+#, no-wrap
+msgid "1200063"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1905
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/333446[333446]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1906
+#, no-wrap
+msgid "May 10, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1908
+#, no-wrap
+msgid "12.0-CURRENT after reworking CTL frontend and backend options to use man:nv[3], allow creating multiple ioctl frontend ports."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1909
+#, no-wrap
+msgid "1200064"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1910
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/334074[334074]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1911
+#, no-wrap
+msgid "May 22, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1913
+#, no-wrap
+msgid "12.0-CURRENT after changing the ifnet address and multicast address TAILQ to CK_STAILQ."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1914
+#, no-wrap
+msgid "1200065"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1915
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/334290[334290]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1916
+#, no-wrap
+msgid "May 28, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1918
+#, no-wrap
+msgid "12.0-CURRENT after changing man:dwatch[1] to allow '-E code' to override profile EVENT_DETAILS."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1919
+#, no-wrap
+msgid "1200066"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1920
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/334466[334466]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1921
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3174
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3179
+#, no-wrap
+msgid "June 1, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1923
+#, no-wrap
+msgid "12.0-CURRENT after removal of in-kernel pmc tables for Intel."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1924
+#, no-wrap
+msgid "1200067"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1925
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/334892[334892]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1926
+#, no-wrap
+msgid "June 9, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1928
+#, no-wrap
+msgid "12.0-CURRENT after adding DW_LANG constants to libdwarf."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1929
+#, no-wrap
+msgid "1200068"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1930
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/334930[334930]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1931
+#, no-wrap
+msgid "June 12, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1933
+#, no-wrap
+msgid "12.0-CURRENT after changing the interface between the NFS modules."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1934
+#, no-wrap
+msgid "1200069"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1935
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/335237[335237]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1936
+#, no-wrap
+msgid "June 15, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1938
+#, no-wrap
+msgid "12.0-CURRENT after changing `struct kerneldumpheader` to version 4 (similar to version 2 in 11-STABLE and previous)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1939
+#, no-wrap
+msgid "1200070"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1940
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/335873[335873]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1941
+#, no-wrap
+msgid "July 2, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1943
+#, no-wrap
+msgid "12.0-CURRENT after inlining man:atomic[9] in modules on amd64 and i386 requiring all modules of consumers to be rebuilt for these architectures."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1944
+#, no-wrap
+msgid "1200071"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1945
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/335930[335930]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1946
+#, no-wrap
+msgid "July 4, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1948
+#, no-wrap
+msgid "12.0-CURRENT after changing the ABI and API of man:epoch[9] (link:https://svnweb.freebsd.org/changeset/base/335924[335924]) requiring modules of consumers to be rebuilt."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1949
+#, no-wrap
+msgid "1200072"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1950
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/335979[335979]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1951
+#, no-wrap
+msgid "July 5, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1953
+#, no-wrap
+msgid "12.0-CURRENT after changing the ABI and API of `struct xinpcb` and friends."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1954
+#, no-wrap
+msgid "1200073"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1955
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/336313[336313]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1956
+#, no-wrap
+msgid "July 15, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1958
+#, no-wrap
+msgid "12.0-CURRENT after changing the ABI and API of `struct if_shared_ctx` and `struct if_softc_ctx` requiring modules of man:iflib[9] consumers to be rebuilt."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1959
+#, no-wrap
+msgid "1200074"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1960
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/336360[336360]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1961
+#, no-wrap
+msgid "July 16, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1963
+#, no-wrap
+msgid "12.0-CURRENT after updating the configuration of libstdc++ to make use of C99 functions."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1964
+#, no-wrap
+msgid "1200075"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1965
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/336538[336538]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1966
+#, no-wrap
+msgid "July 19, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1968
+#, no-wrap
+msgid "12.0-CURRENT after `zfsloader` being folded into loader, and after adding ntpd:ntpd as uid:gid 123:123, and after removing arm big-endian support (MACHINE_ARCH=armeb)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1969
+#, no-wrap
+msgid "1200076"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1970
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/336914[336914]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1971
+#, no-wrap
+msgid "July 30, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1973
+#, no-wrap
+msgid "12.0-CURRENT after KPI changes to `timespecadd`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1974
+#, no-wrap
+msgid "1200077"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1975
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/337576[337576]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1976
+#, no-wrap
+msgid "August 10, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1978
+#, no-wrap
+msgid "12.0-CURRENT after man:timespec_get[3] was added to the system."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1979
+#, no-wrap
+msgid "1200078"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1980
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/337863[337863]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1981
+#, no-wrap
+msgid "August 15, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1983
+#, no-wrap
+msgid "12.0-CURRENT after exec.created hook for jails."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1984
+#, no-wrap
+msgid "1200079"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1985
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/338061[338061]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1986
+#, no-wrap
+msgid "August 19, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1988
+#, no-wrap
+msgid "12.0-CURRENT after converting `arc4random` to using the Chacha20 algorithm and deprecating `arc4random_stir` and `arc4random_addrandom`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1989
+#, no-wrap
+msgid "1200080"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1990
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/338172[338172]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1991
+#, no-wrap
+msgid "August 22, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1993
+#, no-wrap
+msgid "12.0-CURRENT after removing the drm drivers."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1994
+#, no-wrap
+msgid "1200081"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1995
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/338182[338182]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1996
+#, no-wrap
+msgid "August 21, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1998
+#, no-wrap
+msgid "12.0-CURRENT after KPI changes to NVMe."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:1999
+#, no-wrap
+msgid "1200082"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2000
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/338285[338285]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2001
+#, no-wrap
+msgid "August 24, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2003
+#, no-wrap
+msgid "12.0-CURRENT after reverting the removal of the drm drivers."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2004
+#, no-wrap
+msgid "1200083"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2005
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/338331[338331]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2006
+#, no-wrap
+msgid "August 26, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2008
+#, no-wrap
+msgid "12.0-CURRENT after removing `arc4random_stir` and `arc4random_addrandom`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2009
+#, no-wrap
+msgid "1200084"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2010
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/338478[338478]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2011
+#, no-wrap
+msgid "September 5, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2013
+#, no-wrap
+msgid "12.0-CURRENT after updating man:objcopy[1] to properly handle little-endian MIPS64 object files."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2014
+#, no-wrap
+msgid "1200085"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2015
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/339270[339270]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2018
+#, no-wrap
+msgid "12.0-STABLE after updating OpenSSL to version 1.1.1."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2019
+#, no-wrap
+msgid "1200086"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2020
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/339732[339732]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2023
+#, no-wrap
+msgid "12.0-STABLE after updating OpenSSL shared library version numbers."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2024
+#, no-wrap
+msgid "1200500"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2025
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/340471[340471]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2026
+#, no-wrap
+msgid "November 16, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2028
+#, no-wrap
+msgid "12-STABLE after releng/12.0 was branched."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2029
+#, no-wrap
+msgid "1200501"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2030
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/342801[342801]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2031
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3204
+#, no-wrap
+msgid "January 6, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2033
+#, no-wrap
+msgid "12-STABLE after merge of fixing `linux_destroy_dev()` behaviour when there are still files open from the destroying cdev."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2034
+#, no-wrap
+msgid "1200502"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2035
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/343126[343126]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2036
+#, no-wrap
+msgid "January 17, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2038
+#, no-wrap
+msgid "12-STABLE after enabling sys/random.h #include from C++."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2039
+#, no-wrap
+msgid "1200503"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2040
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/344152[344152]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2041
+#, no-wrap
+msgid "February 15, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2043
+#, no-wrap
+msgid "12-STABLE after merge of fixing man:renameat[2] for CAPABILITIES kernels."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2044
+#, no-wrap
+msgid "1200504"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2045
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/345169[345169]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2048
+#, no-wrap
+msgid "12-STABLE after merging CCM for the benefit of the ZoF port."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2049
+#, no-wrap
+msgid "1200505"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2050
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/345327[345327]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2051
+#, no-wrap
+msgid "March 20, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2053
+#, no-wrap
+msgid "12-STABLE after merging support for selectively disabling ZFS without disabling loader."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2054
+#, no-wrap
+msgid "1200506"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2055
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/346168[346168]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2056
+#, no-wrap
+msgid "April 12, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2058
+#, no-wrap
+msgid "12-STABLE after merging llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp 8.0.0 final release r356365."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2059
+#, no-wrap
+msgid "1200507"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2060
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/346337[346337]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2061
+#, no-wrap
+msgid "April 17, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2063
+#, no-wrap
+msgid "12-STABLE after MFC of iflib changes in link:https://svnweb.freebsd.org/changeset/base/345303[345303], link:https://svnweb.freebsd.org/changeset/base/345658,[345658,] and partially of link:https://svnweb.freebsd.org/changeset/base/345305[345305]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2064
+#, no-wrap
+msgid "1200508"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2065
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3218
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/346784[346784]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2066
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3219
+#, no-wrap
+msgid "April 27, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2068
+#, no-wrap
+msgid "12-STABLE after `ether_gen_addr` availability."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2069
+#, no-wrap
+msgid "1200509"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2070
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/347790[347790]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2071
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3229
+#, no-wrap
+msgid "May 16, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2073
+#, no-wrap
+msgid "12-STABLE after bumping the Mellanox driver version numbers (man:mlx4en[4]; man:mlx5en[4])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2074
+#, no-wrap
+msgid "1200510"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2075
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/348036[348036]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2076
+#, no-wrap
+msgid "May 21, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2078
+#, no-wrap
+msgid "12-STABLE after change to struct in linuxkpi from link:https://svnweb.freebsd.org/changeset/base/348035[348035]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2079
+#, no-wrap
+msgid "1200511"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2080
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/348243[348243]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2081
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2086
+#, no-wrap
+msgid "May 24, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2083
+#, no-wrap
+msgid "12-STABLE after MFC of link:https://svnweb.freebsd.org/changeset/base/347843[347843]: adding `group_leader` member to struct `task_struct` to the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2084
+#, no-wrap
+msgid "1200512"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2085
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/348245[348245]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2088
+#, no-wrap
+msgid "12-STABLE after adding context member to ww_mutex in LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2089
+#, no-wrap
+msgid "1200513"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2090
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/349763[349763]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2091
+#, no-wrap
+msgid "July 5, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2093
+#, no-wrap
+msgid "12-STABLE after MFC of man:epoch[9] changes: link:https://svnweb.freebsd.org/changeset/base/349763[349763], link:https://svnweb.freebsd.org/changeset/base/340404[340404], link:https://svnweb.freebsd.org/changeset/base/340415[340415], link:https://svnweb.freebsd.org/changeset/base/340417[340417], link:https://svnweb.freebsd.org/changeset/base/340419[340419], link:https://svnweb.freebsd.org/changeset/base/340420[340420]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2094
+#, no-wrap
+msgid "1200514"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2095
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/350083[350083]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2096
+#, no-wrap
+msgid "July 17, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2098
+#, no-wrap
+msgid "12-STABLE after additions to LinuxKPI's rcu list."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2099
+#, no-wrap
+msgid "1200515"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2100
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/350877[350877]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2101
+#, no-wrap
+msgid "August 11, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2103
+#, no-wrap
+msgid "12-STABLE after MFC of link:https://svnweb.freebsd.org/changeset/base/349891[349891] (reorganize the SRCS lists as one file per line, and then alphabetize them) and link:https://svnweb.freebsd.org/changeset/base/349972[349972] (add `arm_sync_icache()` and `arm_drain_writebuf()` sysarch syscall wrappers)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2104
+#, no-wrap
+msgid "1200516"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2105
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/351276[351276]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2106
+#, no-wrap
+msgid "August 20, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2108
+#, no-wrap
+msgid "12-STABLE after MFC of various changes to iflib link:https://svnweb.freebsd.org/changeset/base/351276[351276]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2109
+#, no-wrap
+msgid "1200517"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2110
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/352076[352076]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2113
+#, no-wrap
+msgid "12-STABLE after adding sysfs create/remove functions that handles multiple files in one call to the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2114
+#, no-wrap
+msgid "1200518"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2115
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/352114[352114]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2116
+#, no-wrap
+msgid "September 10, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2118
+#, no-wrap
+msgid "12-STABLE after additional updates to LinuxKPI's sysfs."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2119
+#, no-wrap
+msgid "1200519"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2120
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/352351[352351]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2121
+#, no-wrap
+msgid "September 15, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2123
+#, no-wrap
+msgid "12-STABLE after MFC of the new fusefs driver."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2124
+#, no-wrap
+msgid "1201000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2125
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/352546[352546]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2126
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2131
+#, no-wrap
+msgid "September 20, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2128
+#, no-wrap
+msgid "releng/12.1 branched from stable/12@r352480."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2129
+#, no-wrap
+msgid "1201500"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2130
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/352547[352547]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2133
+#, no-wrap
+msgid "12-STABLE after branching releng/12.1."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2134
+#, no-wrap
+msgid "1201501"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2135
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3243
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/354598[354598]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2136
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2151
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3244
+#, no-wrap
+msgid "November 10, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2138
+#, no-wrap
+msgid "12-STABLE after fixing a potential OOB read security issue in libc++."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2139
+#, no-wrap
+msgid "1201502"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2140
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/354613[354613]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2141
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3249
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3254
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3259
+#, no-wrap
+msgid "November 11, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2143
+#, no-wrap
+msgid "12-STABLE after enabling device class group attributes in the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2144
+#, no-wrap
+msgid "1201503"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2145
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/354928[354928]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2148
+#, no-wrap
+msgid "12-STABLE after adding support for `AT_EXECPATH` to man:elf_aux_info[3]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2149
+#, no-wrap
+msgid "1201504"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2153
+#, no-wrap
+msgid "12-STABLE after correcting the C++ version check for declaring man:timespec_get[3]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2154
+#, no-wrap
+msgid "1201505"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2155
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3263
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/355899[355899]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2156
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3264
+#, no-wrap
+msgid "December 19, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2158
+#, no-wrap
+msgid "12-STABLE after adding `sigsetop` extensions commonly found in musl libc and glibc."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2159
+#, no-wrap
+msgid "1201506"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2160
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/355968[355968]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2161
+#, no-wrap
+msgid "December 21, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2163
+#, no-wrap
+msgid "12-STABLE after doubling the value of `ARG_MAX`, for 64 bit platforms."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2164
+#, no-wrap
+msgid "1201507"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2165
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356306[356306]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2168
+#, no-wrap
+msgid "12-STABLE after adding functions to man:bitstring[3] to find contiguous sequences of set or unset bits."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2169
+#, no-wrap
+msgid "1201508"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2170
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356394[356394]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2173
+#, no-wrap
+msgid "12-STABLE after making USB statistics be per-device instead of per bus."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2174
+#, no-wrap
+msgid "1201509"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2175
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356460[356460]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2176
+#, no-wrap
+msgid "January 7, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2178
+#, no-wrap
+msgid "12-STABLE after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 9.0.0 final release r372316."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2179
+#, no-wrap
+msgid "1201510"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2180
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356679[356679]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2181
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3274
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4049
+#, no-wrap
+msgid "January 13, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2183
+#, no-wrap
+msgid "12-STABLE after adding own counter for cancelled USB transfers."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2184
+#, no-wrap
+msgid "1201511"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2185
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/357333[357333]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2186
+#, no-wrap
+msgid "January 31, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2188
+#, no-wrap
+msgid "12-STABLE after adding [.filename]#/etc/os-release# as a symbolic link to [.filename]#/var/run/os-release#."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2189
+#, no-wrap
+msgid "1201512"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2190
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/357612[357612]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2191
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3279
+#, no-wrap
+msgid "February 6, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2193
+#, no-wrap
+msgid "12-STABLE after recent LinuxKPI changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2194
+#, no-wrap
+msgid "1201513"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2195
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/359957[359957]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2196
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3284
+#, no-wrap
+msgid "April 15, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2198
+#, no-wrap
+msgid "12-STABLE after cloning the RCU interface into a sleepable and a non-sleepable part in the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2199
+#, no-wrap
+msgid "1201514"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2200
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/360525[360525]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2201
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2206
+#, no-wrap
+msgid "May 1, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2203
+#, no-wrap
+msgid "12-STABLE after implementing full man:bus_dma[9] support in the LinuxKPI and pulling in all dependencies."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2204
+#, no-wrap
+msgid "1201515"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2205
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/360545[360545]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2208
+#, no-wrap
+msgid "12-STABLE after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 10.0.0 release."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2209
+#, no-wrap
+msgid "1201516"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2210
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/360620[360620]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2211
+#, no-wrap
+msgid "May 4, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2213
+#, no-wrap
+msgid "12-STABLE after moving `id_mapped` to end of `bus_dma_impl` structure to preserve KPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2214
+#, no-wrap
+msgid "1201517"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2215
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/361350[361350]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2216
+#, no-wrap
+msgid "May 21, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2218
+#, no-wrap
+msgid "12-STABLE after renaming `vm.max_wired` to `vm.max_user_wired` and changing its type."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2219
+#, no-wrap
+msgid "1201518"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2220
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/362319[362319]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2221
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3314
+#, no-wrap
+msgid "June 18, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2223
+#, no-wrap
+msgid "12-STABLE after implementing `__is_constexpr()` function macro in the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2224
+#, no-wrap
+msgid "1201519"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2225
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/362916[362916]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2226
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3319
+#, no-wrap
+msgid "July 4, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2228
+#, no-wrap
+msgid "12-STABLE after making liblzma use libmd implementation of SHA256."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2229
+#, no-wrap
+msgid "1201520"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2230
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/363494[363494]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2231
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3324
+#, no-wrap
+msgid "July 24, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2233
+#, no-wrap
+msgid "12-STABLE after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 10.0.1 release."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2234
+#, no-wrap
+msgid "1201521"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2235
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/363790[363790]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2236
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3329
+#, no-wrap
+msgid "August 3, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2238
+#, no-wrap
+msgid "12-STABLE after implementing the `array_size()` function in the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2239
+#, no-wrap
+msgid "1201522"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2240
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/363832[363832]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2241
+#, no-wrap
+msgid "August 4, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2243
+#, no-wrap
+msgid "12-STABLE after adding sysctlbyname system call."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2244
+#, no-wrap
+msgid "1201523"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2245
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/364390[364390]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2246
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3334
+#, no-wrap
+msgid "August 19, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2248
+#, no-wrap
+msgid "12-STABLE after change to clone the task struct fields related to RCU."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2249
+#, no-wrap
+msgid "1201524"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2250
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/365356[365356]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2251
+#, no-wrap
+msgid "September 5, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2253
+#, no-wrap
+msgid "12-STABLE after splitting XDR off into a separate kernel module, to minimize ZFS dependencies."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2254
+#, no-wrap
+msgid "1201525"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2255
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3338
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/365471[365471]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2258
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2323
+#, no-wrap
+msgid "12-STABLE after adding atomic and `bswap` functions to libcompiler_rt."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2259
+#, no-wrap
+msgid "1201526"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2260
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/365608[365608]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2261
+#, no-wrap
+msgid "September 10, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2263
+#, no-wrap
+msgid "12-STABLE after updating net80211 and kernel privilege checking API changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2264
+#, no-wrap
+msgid "1202000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2265
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/365618[365618]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2266
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2271
+#, no-wrap
+msgid "September 11, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2268
+#, no-wrap
+msgid "releng/12.2 branched from stable/12@r365618."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2269
+#, no-wrap
+msgid "1202500"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2270
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/365619[365619]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2273
+#, no-wrap
+msgid "12-STABLE after branching releng/12.2."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2274
+#, no-wrap
+msgid "1202501"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2275
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3343
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/365661[365661]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2276
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3344
+#, no-wrap
+msgid "September 12, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2278
+#, no-wrap
+msgid "12-STABLE after followup commits to libcompiler_rt."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2279
+#, no-wrap
+msgid "1202502"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2280
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/365816[365816]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2281
+#, no-wrap
+msgid "September 16, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2283
+#, no-wrap
+msgid "12-STABLE after fixing man:crunchgen[1] application build with `WARNS=6`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2284
+#, no-wrap
+msgid "1202503"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2285
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/366878[366878]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2288
+#, no-wrap
+msgid "12-STABLE after populating the acquire context field of a `ww_mutex` in the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2289
+#, no-wrap
+msgid "1202504"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2290
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/367511[367511]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2293
+#, no-wrap
+msgid "12-STABLE after the addition of man:ptsname_r[3]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2294
+#, no-wrap
+msgid "1202505"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2295
+#, no-wrap
+msgid "gitref:f3d75bed5475b15f21edf4052665b1212b548bd0[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2296
+#, no-wrap
+msgid "December 28, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2298
+#, no-wrap
+msgid "12-STABLE after improving handling of alternate settings in the USB stack."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2299
+#, no-wrap
+msgid "1202506"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2300
+#, no-wrap
+msgid "gitref:d36cc12ddfe3335ec8306bd4b393f11069551fa0[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2303
+#, no-wrap
+msgid "12-STABLE after changing the internal KAPI between the krpc and NFS."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2304
+#, no-wrap
+msgid "1202507"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2305
+#, no-wrap
+msgid "gitref:1e279fe9deaea1c5e3503117dd3077dcffb1276d[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2308
+#, no-wrap
+msgid "12-STABLE after changing the internal KAPI between the nscl.ko and nfscommon.ko modules."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2309
+#, no-wrap
+msgid "1202508"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2310
+#, no-wrap
+msgid "gitref:489236b0474857b0a7a2df77c302290e12be9e7b[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2313
+#, no-wrap
+msgid "12-STABLE after changing the internal KAPI between the krpc and nfsd modules."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2314
+#, no-wrap
+msgid "1203500"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2315
+#, no-wrap
+msgid "gitref:f2900e784cb024e55ec0f5cd6834af5fadcb9f9a[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2316
+#, no-wrap
+msgid "October 20, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2318
+#, no-wrap
+msgid "12-STABLE after branching releng/12.3."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2319
+#, no-wrap
+msgid "1203501"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2320
+#, no-wrap
+msgid "gitref:b148c7b87148b653fdbef9c5aa591b9abcd99e26[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2321
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2326
+#, no-wrap
+msgid "December 22, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2324
+#, no-wrap
+msgid "1203502"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2325
+#, no-wrap
+msgid "gitref:4772e4135cb3fe7f25531894f3b02f35ec086bda[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2328
+#, no-wrap
+msgid "12-STABLE after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 11.0.1."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2329
+#, no-wrap
+msgid "1203503"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2330
+#, no-wrap
+msgid "gitref:e405b2dc913c99189aa9b923ed686a790253cc7e[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2331
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2336
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2341
+#, no-wrap
+msgid "December 25, 2021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2333
+#, no-wrap
+msgid "12-STABLE after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 12.0.0."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2334
+#, no-wrap
+msgid "1203504"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2335
+#, no-wrap
+msgid "gitref:1a398266112e73f91a4f2e2701ceefd3f2948aac[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2338
+#, no-wrap
+msgid "12-STABLE after adding out-of-line LSE atomics helpers to [.filename]#libcompiler_rt.a# on aarch64."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2339
+#, no-wrap
+msgid "1203505"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2340
+#, no-wrap
+msgid "gitref:0b7be89b329e0f862c25f34abfb13c75a4d45f2a[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2343
+#, no-wrap
+msgid "12-STABLE after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 13.0.0."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2344
+#, no-wrap
+msgid "1203506"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2345
+#, no-wrap
+msgid "gitref:f591279d9c93bc2ea9cd1a447c2df11d437fbc7b[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2346
+#, no-wrap
+msgid "February 12, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2348
+#, no-wrap
+msgid "12-STABLE after restoring availability tradeoff of random(4)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2349
+#, no-wrap
+msgid "1203507"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2350
+#, no-wrap
+msgid "gitref:180d95e04e938328de8f2a24d16fdb5049e15262[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2351
+#, no-wrap
+msgid "April 9, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2353
+#, no-wrap
+msgid "12-STABLE after zlib unification."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2354
+#, no-wrap
+msgid "1203508"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2355
+#, no-wrap
+msgid "gitref:6c717a28505d3e77a0c3780ca1f65eb85b538eb9[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2358
+#, no-wrap
+msgid "12-STABLE after iflib: Allow drivers to determine which queue to TX on."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2359
+#, no-wrap
+msgid "1204000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2360
+#, no-wrap
+msgid "gitref:fce871fe35204527a2ce08e43e1572ae9295cc00[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2361
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2366
+#, no-wrap
+msgid "October 20, 2022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2363
+#, no-wrap
+msgid "releng/12.4 branched from stable/12."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2364
+#, no-wrap
+msgid "1204500"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2365
+#, no-wrap
+msgid "gitref:6a9031c5e2ba5435aa4ea08ee05c351d5bef035d[repository=\"src\",length=12]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2368
+#, no-wrap
+msgid "12-STABLE after branching releng/12.4."
+msgstr ""
+
+#. Template:
+#. |12XXXXX
+#. |gitref:XXXXXXXX[repository="src",length=12]
+#. |October 30, 2021
+#. |12-STABLE after XXXXXX.
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2380
+#, no-wrap
+msgid "FreeBSD 11 Versions"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2383
+#, no-wrap
+msgid "FreeBSD 11 `__FreeBSD_version` Values"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2392
+#, no-wrap
+msgid "1100000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2393
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/256284[256284]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2394
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3667
+#, no-wrap
+msgid "October 10, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2396
+#, no-wrap
+msgid "11.0-CURRENT."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2397
+#, no-wrap
+msgid "1100001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2398
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/256776[256776]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2399
+#, no-wrap
+msgid "October 19, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2401
+#, no-wrap
+msgid "11.0-CURRENT after addition of support for \"first boot\" [.filename]#rc.d# scripts, so ports can make use of this."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2402
+#, no-wrap
+msgid "1100002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2403
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/257696[257696]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2404
+#, no-wrap
+msgid "November 5, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2406
+#, no-wrap
+msgid "11.0-CURRENT after dropping support for historic ioctls."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2407
+#, no-wrap
+msgid "1100003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2408
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/258284[258284]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2409
+#, no-wrap
+msgid "November 17, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2411
+#, no-wrap
+msgid "11.0-CURRENT after iconv changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2412
+#, no-wrap
+msgid "1100004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2413
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/259424[259424]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2414
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3692
+#, no-wrap
+msgid "December 15, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2416
+#, no-wrap
+msgid "11.0-CURRENT after the behavior change of `gss_pseudo_random` introduced in link:https://svnweb.freebsd.org/changeset/base/259286[259286]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2417
+#, no-wrap
+msgid "1100005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2418
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/260010[260010]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2419
+#, no-wrap
+msgid "December 28, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2421
+#, no-wrap
+msgid "11.0-CURRENT after link:https://svnweb.freebsd.org/changeset/base/259951[259951] - Do not coalesce entries in man:vm_map_stack[9]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2422
+#, no-wrap
+msgid "1100006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2423
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/261246[261246]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2424
+#, no-wrap
+msgid "January 28, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2426
+#, no-wrap
+msgid "11.0-CURRENT after upgrades of libelf and libdwarf."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2427
+#, no-wrap
+msgid "1100007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2428
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/261283[261283]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2429
+#, no-wrap
+msgid "January 30, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2431
+#, no-wrap
+msgid "11.0-CURRENT after upgrade of libc++ to 3.4 release."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2432
+#, no-wrap
+msgid "1100008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2433
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/261881[261881]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2434
+#, no-wrap
+msgid "February 14, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2436
+#, no-wrap
+msgid "11.0-CURRENT after libc++ 3.4 ABI compatibility fix."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2437
+#, no-wrap
+msgid "1100009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2438
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/261991[261991]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2439
+#, no-wrap
+msgid "February 16, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2441
+#, no-wrap
+msgid "11.0-CURRENT after upgrade of llvm/clang to 3.4 release."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2442
+#, no-wrap
+msgid "1100010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2443
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/262630[262630]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2444
+#, no-wrap
+msgid "February 28, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2446
+#, no-wrap
+msgid "11.0-CURRENT after upgrade of ncurses to 5.9 release (rev link:https://svnweb.freebsd.org/changeset/base/262629[262629])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2447
+#, no-wrap
+msgid "1100011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2448
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/263102[263102]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2449
+#, no-wrap
+msgid "March 13, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2451
+#, no-wrap
+msgid "11.0-CURRENT after ABI change in struct `if_data`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2452
+#, no-wrap
+msgid "1100012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2453
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/263140[263140]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2454
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2459
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4407
+#, no-wrap
+msgid "March 14, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2456
+#, no-wrap
+msgid "11.0-CURRENT after removal of Novell IPX protocol support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2457
+#, no-wrap
+msgid "1100013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2458
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/263152[263152]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2461
+#, no-wrap
+msgid "11.0-CURRENT after removal of AppleTalk protocol support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2462
+#, no-wrap
+msgid "1100014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2463
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/263235[263235]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2464
+#, no-wrap
+msgid "March 16, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2466
+#, no-wrap
+msgid "11.0-CURRENT after renaming [.filename]#<sys/capability.h># to [.filename]#<sys/capsicum.h># to avoid a clash with similarly named headers in other operating systems. A compatibility header is left in place to limit build breakage, but will be deprecated in due course."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2467
+#, no-wrap
+msgid "1100015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2468
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/263620[263620]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2469
+#, no-wrap
+msgid "March 22, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2471
+#, no-wrap
+msgid "11.0-CURRENT after `cnt` rename to `vm_cnt`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2472
+#, no-wrap
+msgid "1100016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2473
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/263660[263660]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2474
+#, no-wrap
+msgid "March 23, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2476
+#, no-wrap
+msgid "11.0-CURRENT after addition of `armv6hf TARGET_ARCH`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2477
+#, no-wrap
+msgid "1100017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2478
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/264121[264121]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2479
+#, no-wrap
+msgid "April 4, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2481
+#, no-wrap
+msgid "11.0-CURRENT after GCC support for `__block` definition."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2482
+#, no-wrap
+msgid "1100018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2483
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/264212[264212]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2484
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3717
+#, no-wrap
+msgid "April 6, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2486
+#, no-wrap
+msgid "11.0-CURRENT after support for UDP-Lite protocol (RFC 3828)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2487
+#, no-wrap
+msgid "1100019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2488
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3721
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4421
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/264289[264289]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2489
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3722
+#, no-wrap
+msgid "April 8, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2491
+#, no-wrap
+msgid "11.0-CURRENT after FreeBSD-SA-14:06.openssl (rev link:https://svnweb.freebsd.org/changeset/base/264265[264265])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2492
+#, no-wrap
+msgid "1100020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2493
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/265215[265215]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2494
+#, no-wrap
+msgid "May 1, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2496
+#, no-wrap
+msgid "11.0-CURRENT after removing `lindev` in favor of having /dev/full by default (rev link:https://svnweb.freebsd.org/changeset/base/265212[265212])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2497
+#, no-wrap
+msgid "1100021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2498
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/266151[266151]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2499
+#, no-wrap
+msgid "May 6, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2501
+#, no-wrap
+msgid "11.0-CURRENT after [.filename]#src.opts.mk# changes, decoupling man:make.conf[5] from `buildworld` (rev link:https://svnweb.freebsd.org/changeset/base/265419[265419])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2502
+#, no-wrap
+msgid "1100022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2503
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/266904[266904]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2504
+#, no-wrap
+msgid "May 30, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2506
+#, no-wrap
+msgid "11.0-CURRENT after changes to man:strcasecmp[3], moving man:strcasecmp_l[3] and man:strncasecmp_l[3] from [.filename]#<string.h># to [.filename]#<strings.h># for POSIX 2008 compliance (rev link:https://svnweb.freebsd.org/changeset/base/266865[266865])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2507
+#, no-wrap
+msgid "1100023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2508
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/267440[267440]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2509
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3737
+#, no-wrap
+msgid "June 13, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2511
+#, no-wrap
+msgid "11.0-CURRENT after the CUSE library and kernel module have been attached to the build by default."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2512
+#, no-wrap
+msgid "1100024"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2513
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/267992[267992]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2514
+#, no-wrap
+msgid "June 27, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2516
+#, no-wrap
+msgid "11.0-CURRENT after man:sysctl[3] API change."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2517
+#, no-wrap
+msgid "1100025"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2518
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/268066[268066]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2519
+#, no-wrap
+msgid "June 30, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2521
+#, no-wrap
+msgid "11.0-CURRENT after man:regex[3] library update to add \">\" and \"<\" delimiters."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2522
+#, no-wrap
+msgid "1100026"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2523
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/268118[268118]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2524
+#, no-wrap
+msgid "July 1, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2526
+#, no-wrap
+msgid "11.0-CURRENT after the internal interface between the NFS modules, including the krpc, was changed by (rev link:https://svnweb.freebsd.org/changeset/base/268115[268115])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2527
+#, no-wrap
+msgid "1100027"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2528
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/268441[268441]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2529
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3742
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4442
+#, no-wrap
+msgid "July 8, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2531
+#, no-wrap
+msgid "11.0-CURRENT after FreeBSD-SA-14:17.kmem (rev link:https://svnweb.freebsd.org/changeset/base/268431[268431])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2532
+#, no-wrap
+msgid "1100028"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2533
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/268945[268945]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2534
+#, no-wrap
+msgid "July 21, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2536
+#, no-wrap
+msgid "11.0-CURRENT after man:hdestroy[3] compliance fix changed ABI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2537
+#, no-wrap
+msgid "1100029"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2538
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/270173[270173]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2539
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3752
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3757
+#, no-wrap
+msgid "August 3, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2541
+#, no-wrap
+msgid "11.0-CURRENT after `SOCK_DGRAM` bug fix (rev link:https://svnweb.freebsd.org/changeset/base/269489[269489])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2542
+#, no-wrap
+msgid "1100030"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2543
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/270929[270929]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2544
+#, no-wrap
+msgid "September 1, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2546
+#, no-wrap
+msgid "11.0-CURRENT after `SOCK_RAW` sockets were changed to not modify packets at all."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2547
+#, no-wrap
+msgid "1100031"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2548
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3761
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4451
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5241
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/271341[271341]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2549
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2559
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3762
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4452
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5242
+#, no-wrap
+msgid "September 9, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2551
+#, no-wrap
+msgid "11.0-CURRENT after FreeBSD-SA-14:18.openssl (rev link:https://svnweb.freebsd.org/changeset/base/269686[269686])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2552
+#, no-wrap
+msgid "1100032"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2553
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/271438[271438]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2554
+#, no-wrap
+msgid "September 11, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2556
+#, no-wrap
+msgid "11.0-CURRENT after API changes to `ifa_ifwithbroadaddr`, `ifa_ifwithdstaddr`, `ifa_ifwithnet`, and `ifa_ifwithroute`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2557
+#, no-wrap
+msgid "1100033"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2558
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/271657[271657]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2561
+#, no-wrap
+msgid "11.0-CURRENT after changing `access`, `eaccess`, and `faccessat` to validate the mode argument."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2562
+#, no-wrap
+msgid "1100034"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2563
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3766
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4456
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5246
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/271686[271686]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2564
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3767
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4457
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5247
+#, no-wrap
+msgid "September 16, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2566
+#, no-wrap
+msgid "11.0-CURRENT after FreeBSD-SA-14:19.tcp (rev link:https://svnweb.freebsd.org/changeset/base/271666[271666])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2567
+#, no-wrap
+msgid "1100035"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2568
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/271705[271705]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2569
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2574
+#, no-wrap
+msgid "September 17, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2571
+#, no-wrap
+msgid "11.0-CURRENT after i915 HW context support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2572
+#, no-wrap
+msgid "1100036"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2573
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/271724[271724]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2576
+#, no-wrap
+msgid "Version bump to have ABI note distinguish binaries ready for strict man:mmap[2] flags checking (rev link:https://svnweb.freebsd.org/changeset/base/271724[271724])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2577
+#, no-wrap
+msgid "1100037"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2578
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/272674[272674]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2579
+#, no-wrap
+msgid "October 6, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2581
+#, no-wrap
+msgid "11.0-CURRENT after addition of man:explicit_bzero[3] (rev link:https://svnweb.freebsd.org/changeset/base/272673[272673])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2582
+#, no-wrap
+msgid "1100038"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2583
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/272951[272951]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2584
+#, no-wrap
+msgid "October 11, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2586
+#, no-wrap
+msgid "11.0-CURRENT after cleanup of TCP wrapper headers."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2587
+#, no-wrap
+msgid "1100039"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2588
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/273250[273250]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2589
+#, no-wrap
+msgid "October 18, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2591
+#, no-wrap
+msgid "11.0-CURRENT after removal of `MAP_RENAME` and `MAP_NORESERVE`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2592
+#, no-wrap
+msgid "1100040"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2593
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3786
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4461
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5251
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/273432[273432]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2594
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3787
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4462
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5252
+#, no-wrap
+msgid "October 21, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2596
+#, no-wrap
+msgid "11.0-CURRENT after FreeBSD-SA-14:23 (rev link:https://svnweb.freebsd.org/changeset/base/273146[273146])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2597
+#, no-wrap
+msgid "1100041"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2598
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/273875[273875]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2599
+#, no-wrap
+msgid "October 30, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2601
+#, no-wrap
+msgid "11.0-CURRENT after API changes to `syscall_register`, `syscall32_register`, `syscall_register_helper` and `syscall32_register_helper` (rev link:https://svnweb.freebsd.org/changeset/base/273707[273707])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2602
+#, no-wrap
+msgid "1100042"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2603
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/274046[274046]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2604
+#, no-wrap
+msgid "November 3, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2606
+#, no-wrap
+msgid "11.0-CURRENT after a change to `struct tcpcb`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2607
+#, no-wrap
+msgid "1100043"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2608
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/274085[274085]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2609
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2614
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2619
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3792
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4467
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5257
+#, no-wrap
+msgid "November 4, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2611
+#, no-wrap
+msgid "11.0-CURRENT after enabling man:vt[4] by default."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2612
+#, no-wrap
+msgid "1100044"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2613
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/274116[274116]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2616
+#, no-wrap
+msgid "11.0-CURRENT after adding new libraries/utilities (`dpv` and `figpar`) for data throughput visualization."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2617
+#, no-wrap
+msgid "1100045"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2618
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3791
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4466
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5256
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/274162[274162]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2621
+#, no-wrap
+msgid "11.0-CURRENT after FreeBSD-SA-14:23, FreeBSD-SA-14:24, and FreeBSD-SA-14:25."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2622
+#, no-wrap
+msgid "1100046"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2623
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/274470[274470]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2624
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2629
+#, no-wrap
+msgid "November 13, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2626
+#, no-wrap
+msgid "11.0-CURRENT after `kern_poll` signature change (rev link:https://svnweb.freebsd.org/changeset/base/274462[274462])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2627
+#, no-wrap
+msgid "1100047"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2628
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/274476[274476]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2631
+#, no-wrap
+msgid "11.0-CURRENT after removal of no-at version of VFS syscalls helpers, like `kern_open`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2632
+#, no-wrap
+msgid "1100048"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2633
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/275358[275358]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2634
+#, no-wrap
+msgid "December 1, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2636
+#, no-wrap
+msgid "11.0-CURRENT after starting the process of removing the use of the deprecated \"M_FLOWID\" flag from the network code."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2637
+#, no-wrap
+msgid "1100049"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2638
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/275633[275633]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2639
+#, no-wrap
+msgid "December 9, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2641
+#, no-wrap
+msgid "11.0-CURRENT after importing an important fix to the LLVM vectorizer, which could lead to buffer overruns in some cases."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2642
+#, no-wrap
+msgid "1100050"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2643
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/275732[275732]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2644
+#, no-wrap
+msgid "December 12, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2646
+#, no-wrap
+msgid "11.0-CURRENT after adding AES-ICM and AES-GCM to OpenCrypto."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2647
+#, no-wrap
+msgid "1100051"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2648
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/276096[276096]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2649
+#, no-wrap
+msgid "December 23, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2651
+#, no-wrap
+msgid "11.0-CURRENT after removing old NFS client and server code from the kernel."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2652
+#, no-wrap
+msgid "1100052"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2653
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/276479[276479]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2654
+#, no-wrap
+msgid "December 31, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2656
+#, no-wrap
+msgid "11.0-CURRENT after upgrade of clang, llvm and lldb to 3.5.0 release."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2657
+#, no-wrap
+msgid "1100053"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2658
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/276781[276781]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2659
+#, no-wrap
+msgid "January 7, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2661
+#, no-wrap
+msgid "11.0-CURRENT after man:MCLGET[9] gained a return value (rev link:https://svnweb.freebsd.org/changeset/base/276750[276750])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2662
+#, no-wrap
+msgid "1100054"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2663
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/277213[277213]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2664
+#, no-wrap
+msgid "January 15, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2666
+#, no-wrap
+msgid "11.0-CURRENT after rewrite of callout subsystem."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2667
+#, no-wrap
+msgid "1100055"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2668
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/277528[277528]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2669
+#, no-wrap
+msgid "January 22, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2671
+#, no-wrap
+msgid "11.0-CURRENT after reverting callout changes in link:https://svnweb.freebsd.org/changeset/base/277213[277213]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2672
+#, no-wrap
+msgid "1100056"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2673
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/277610[277610]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2674
+#, no-wrap
+msgid "January 23, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2676
+#, no-wrap
+msgid "11.0-CURRENT after addition of `futimens` and `utimensat` system calls."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2677
+#, no-wrap
+msgid "1100057"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2678
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/277897[277897]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2679
+#, no-wrap
+msgid "January 29, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2681
+#, no-wrap
+msgid "11.0-CURRENT after removal of `d_thread_t`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2682
+#, no-wrap
+msgid "1100058"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2683
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/278228[278228]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2684
+#, no-wrap
+msgid "February 5, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2686
+#, no-wrap
+msgid "11.0-CURRENT after addition of support for probing the SCSI VPD Extended Inquiry page (0x86)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2687
+#, no-wrap
+msgid "1100059"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2688
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/278442[278442]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2689
+#, no-wrap
+msgid "February 9, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2691
+#, no-wrap
+msgid "11.0-CURRENT after import of xz 5.2.0, which added multi-threaded compression and lzma gained libthr dependency (rev link:https://svnweb.freebsd.org/changeset/base/278433[278433])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2692
+#, no-wrap
+msgid "1100060"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2693
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/278846[278846]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2694
+#, no-wrap
+msgid "February 16, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2696
+#, no-wrap
+msgid "11.0-CURRENT after forwarding `FBIO_BLANK` to framebuffer clients."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2697
+#, no-wrap
+msgid "1100061"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2698
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/278964[278964]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2699
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3822
+#, no-wrap
+msgid "February 18, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2701
+#, no-wrap
+msgid "11.0-CURRENT after `CDAI_FLAG_NONE` addition."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2702
+#, no-wrap
+msgid "1100062"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2703
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/279221[279221]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2704
+#, no-wrap
+msgid "February 23, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2706
+#, no-wrap
+msgid "11.0-CURRENT after man:mtio[4] and man:sa[4] API and man:ioctl[2] additions."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2707
+#, no-wrap
+msgid "1100063"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2708
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/279728[279728]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2709
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2714
+#, no-wrap
+msgid "March 7, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2711
+#, no-wrap
+msgid "11.0-CURRENT after adding mutex support to the `pps_ioctl()` API in the kernel."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2712
+#, no-wrap
+msgid "1100064"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2713
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/279729[279729]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2716
+#, no-wrap
+msgid "11.0-CURRENT after adding PPS support to USB serial drivers."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2717
+#, no-wrap
+msgid "1100065"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2718
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/280031[280031]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2719
+#, no-wrap
+msgid "March 15, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2721
+#, no-wrap
+msgid "11.0-CURRENT after upgrading clang, llvm and lldb to 3.6.0."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2722
+#, no-wrap
+msgid "1100066"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2723
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/280306[280306]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2724
+#, no-wrap
+msgid "March 20, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2726
+#, no-wrap
+msgid "11.0-CURRENT after removal of SSLv2 support from OpenSSL."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2727
+#, no-wrap
+msgid "1100067"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2728
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/280630[280630]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2729
+#, no-wrap
+msgid "March 25, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2731
+#, no-wrap
+msgid "11.0-CURRENT after removal of SSLv2 support from man:fetch[1] and man:fetch[3]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2732
+#, no-wrap
+msgid "1100068"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2733
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/281172[281172]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2734
+#, no-wrap
+msgid "April 6, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2736
+#, no-wrap
+msgid "11.0-CURRENT after change to net.inet6.ip6.mif6table sysctl."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2737
+#, no-wrap
+msgid "1100069"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2738
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/281550[281550]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2739
+#, no-wrap
+msgid "April 15, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2741
+#, no-wrap
+msgid "11.0-CURRENT after removal of const qualifier from man:iconv[3]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2742
+#, no-wrap
+msgid "1100070"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2743
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/281613[281613]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2744
+#, no-wrap
+msgid "April 16, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2746
+#, no-wrap
+msgid "11.0-CURRENT after moving ALTQ from [.filename]#contrib# to [.filename]#net/altq#."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2747
+#, no-wrap
+msgid "1100071"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2748
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/282256[282256]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2749
+#, no-wrap
+msgid "April 29, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2751
+#, no-wrap
+msgid "11.0-CURRENT after API/ABI change to man:smb[4] (rev link:https://svnweb.freebsd.org/changeset/base/281985[281985])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2752
+#, no-wrap
+msgid "1100072"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2753
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/282319[282319]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2754
+#, no-wrap
+msgid "May 1, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2756
+#, no-wrap
+msgid "11.0-CURRENT after adding man:reallocarray[3] in libc (rev link:https://svnweb.freebsd.org/changeset/base/282314[282314])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2757
+#, no-wrap
+msgid "1100073"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2758
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/282650[282650]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2759
+#, no-wrap
+msgid "May 8, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2761
+#, no-wrap
+msgid "11.0-CURRENT after extending the maximum number of allowed PCM channels in a PCM stream to 127 and decreasing the maximum number of sub-channels to 1."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2762
+#, no-wrap
+msgid "1100074"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2763
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/283526[283526]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2764
+#, no-wrap
+msgid "May 25, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2766
+#, no-wrap
+msgid "11.0-CURRENT after adding preliminary support for x86-64 Linux binaries (rev link:https://svnweb.freebsd.org/changeset/base/283424[283424]), and upgrading clang and llvm to 3.6.1."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2767
+#, no-wrap
+msgid "1100075"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2768
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/283623[283623]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2769
+#, no-wrap
+msgid "May 27, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2771
+#, no-wrap
+msgid "11.0-CURRENT after `dounmount()` requiring a reference on the passed struct mount (rev link:https://svnweb.freebsd.org/changeset/base/283602[283602])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2772
+#, no-wrap
+msgid "1100076"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2773
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/283983[283983]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2774
+#, no-wrap
+msgid "June 4, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2776
+#, no-wrap
+msgid "11.0-CURRENT after disabled generation of legacy formatted password databases entries by default."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2777
+#, no-wrap
+msgid "1100077"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2778
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/284233[284233]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2779
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3874
+#, no-wrap
+msgid "June 10, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2781
+#, no-wrap
+msgid "11.0-CURRENT after API changes to `lim_cur`, `lim_max`, and `lim_rlimit` (rev link:https://svnweb.freebsd.org/changeset/base/284215[284215])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2782
+#, no-wrap
+msgid "1100078"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2783
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/286672[286672]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2784
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2999
+#, no-wrap
+msgid "August 12, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2786
+#, no-wrap
+msgid "11.0-CURRENT after man:crunchgen[1] changes from link:https://svnweb.freebsd.org/changeset/base/284356[284356] to link:https://svnweb.freebsd.org/changeset/base/285986[285986]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2787
+#, no-wrap
+msgid "1100079"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2788
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/286874[286874]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2789
+#, no-wrap
+msgid "August 18, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2791
+#, no-wrap
+msgid "11.0-CURRENT after import of jemalloc 4.0.0 (rev link:https://svnweb.freebsd.org/changeset/base/286866[286866])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2792
+#, no-wrap
+msgid "1100080"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2793
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/288943[288943]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2794
+#, no-wrap
+msgid "October 5, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2796
+#, no-wrap
+msgid "11.0-CURRENT after upgrading clang, llvm, lldb, compiler-rt and libc++ to 3.7.0."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2797
+#, no-wrap
+msgid "1100081"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2798
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/289415[289415]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2799
+#, no-wrap
+msgid "October 16, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2801
+#, no-wrap
+msgid "11.0-CURRENT after `undating` ZFS to support resumable send/receive (rev link:https://svnweb.freebsd.org/changeset/base/289362[289362])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2802
+#, no-wrap
+msgid "1100082"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2803
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/289594[289594]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2804
+#, no-wrap
+msgid "October 19, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2806
+#, no-wrap
+msgid "11.0-CURRENT after Linux KPI updates."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2807
+#, no-wrap
+msgid "1100083"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2808
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/289749[289749]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2809
+#, no-wrap
+msgid "October 22, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2811
+#, no-wrap
+msgid "11.0-CURRENT after renaming [.filename]#linuxapi.ko# to [.filename]#linuxkpi.ko#."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2812
+#, no-wrap
+msgid "1100084"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2813
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/290135[290135]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2814
+#, no-wrap
+msgid "October 29, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2816
+#, no-wrap
+msgid "11.0-CURRENT after moving the LinuxKPI module into the default kernel build."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2817
+#, no-wrap
+msgid "1100085"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2818
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/290207[290207]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2819
+#, no-wrap
+msgid "October 30, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2821
+#, no-wrap
+msgid "11.0-CURRENT after import of OpenSSL 1.0.2d."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2822
+#, no-wrap
+msgid "1100086"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2823
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/290275[290275]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2824
+#, no-wrap
+msgid "November 2, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2826
+#, no-wrap
+msgid "11.0-CURRENT after making man:figpar[3] macros more unique."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2827
+#, no-wrap
+msgid "1100087"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2828
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/290479[290479]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2829
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2834
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2839
+#, no-wrap
+msgid "November 7, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2831
+#, no-wrap
+msgid "11.0-CURRENT after changing man:sysctl_add_oid[9]'s ABI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2832
+#, no-wrap
+msgid "1100088"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2833
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/290495[290495]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2836
+#, no-wrap
+msgid "11.0-CURRENT after string collation and locales rework."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2837
+#, no-wrap
+msgid "1100089"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2838
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/290505[290505]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2841
+#, no-wrap
+msgid "11.0-CURRENT after API change to man:sysctl_add_oid[9] (rev link:https://svnweb.freebsd.org/changeset/base/290475[290475])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2842
+#, no-wrap
+msgid "1100090"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2843
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/290715[290715]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2844
+#, no-wrap
+msgid "November 10, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2846
+#, no-wrap
+msgid "11.0-CURRENT after API change to callout_stop macro; (rev link:https://svnweb.freebsd.org/changeset/base/290664[290664])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2847
+#, no-wrap
+msgid "1100091"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2848
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/291537[291537]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2849
+#, no-wrap
+msgid "November 30, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2851
+#, no-wrap
+msgid "11.0-CURRENT after changing the interface between the [.filename]#nfsd.ko# and [.filename]#nfscommon.ko# modules in link:https://svnweb.freebsd.org/changeset/base/291527[291527]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2852
+#, no-wrap
+msgid "1100092"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2853
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/292499[292499]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2854
+#, no-wrap
+msgid "December 19, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2856
+#, no-wrap
+msgid "11.0-CURRENT after removal of `vm_pageout_grow_cache` (rev link:https://svnweb.freebsd.org/changeset/base/292469[292469])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2857
+#, no-wrap
+msgid "1100093"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2858
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/292966[292966]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2859
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3914
+#, no-wrap
+msgid "December 30, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2861
+#, no-wrap
+msgid "11.0-CURRENT after removal of sys/crypto/sha2.h (rev link:https://svnweb.freebsd.org/changeset/base/292782[292782])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2862
+#, no-wrap
+msgid "1100094"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2863
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/294086[294086]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2864
+#, no-wrap
+msgid "January 15, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2866
+#, no-wrap
+msgid "11.0-CURRENT after LinuxKPI PCI changes (rev link:https://svnweb.freebsd.org/changeset/base/294086[294086])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2867
+#, no-wrap
+msgid "1100095"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2868
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/294327[294327]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2869
+#, no-wrap
+msgid "January 19, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2871
+#, no-wrap
+msgid "11.0-CURRENT after LRO optimizations."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2872
+#, no-wrap
+msgid "1100096"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2873
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/294505[294505]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2874
+#, no-wrap
+msgid "January 21, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2876
+#, no-wrap
+msgid "11.0-CURRENT after LinuxKPI idr_* additions."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2877
+#, no-wrap
+msgid "1100097"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2878
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/294860[294860]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2879
+#, no-wrap
+msgid "January 26, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2881
+#, no-wrap
+msgid "11.0-CURRENT after API change to man:dpv[3]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2882
+#, no-wrap
+msgid "1100098"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2883
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/295682[295682]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2884
+#, no-wrap
+msgid "February 16, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2886
+#, no-wrap
+msgid "11.0-CURRENT after API change to `rman` (rev link:https://svnweb.freebsd.org/changeset/base/294883[294883])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2887
+#, no-wrap
+msgid "1100099"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2888
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/295739[295739]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2889
+#, no-wrap
+msgid "February 18, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2891
+#, no-wrap
+msgid "11.0-CURRENT after allowing drivers to set the TCP ACK/data segment aggregation limit."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2892
+#, no-wrap
+msgid "1100100"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2893
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/296136[296136]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2894
+#, no-wrap
+msgid "February 26, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2896
+#, no-wrap
+msgid "11.0-CURRENT after man:bus_alloc_resource_any[9] API addition."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2897
+#, no-wrap
+msgid "1100101"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2898
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/296417[296417]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2899
+#, no-wrap
+msgid "March 5, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2901
+#, no-wrap
+msgid "11.0-CURRENT after upgrading copies of clang, llvm, lldb and compiler-rt to 3.8.0 release."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2902
+#, no-wrap
+msgid "1100102"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2903
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/296749[296749]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2904
+#, no-wrap
+msgid "March 12, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2906
+#, no-wrap
+msgid "11.0-CURRENT after libelf cross-endian fix in rev link:https://svnweb.freebsd.org/changeset/base/296685[296685]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2907
+#, no-wrap
+msgid "1100103"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2908
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/297000[297000]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2909
+#, no-wrap
+msgid "March 18, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2911
+#, no-wrap
+msgid "11.0-CURRENT after using `uintmax_t` for `rman` ranges."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2912
+#, no-wrap
+msgid "1100104"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2913
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/297156[297156]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2914
+#, no-wrap
+msgid "March 21, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2916
+#, no-wrap
+msgid "11.0-CURRENT after tracking `filemon` usage via a proc.p_filemon pointer rather than its own lists."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2917
+#, no-wrap
+msgid "1100105"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2918
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/297602[297602]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2919
+#, no-wrap
+msgid "April 6, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2921
+#, no-wrap
+msgid "11.0-CURRENT after fixing sed functions `i` and `a` from discarding leading space."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2922
+#, no-wrap
+msgid "1100106"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2923
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/298486[298486]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2924
+#, no-wrap
+msgid "April 22, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2926
+#, no-wrap
+msgid "11.0-CURRENT after fixes for using IPv6 addresses with RDMA."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2927
+#, no-wrap
+msgid "1100107"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2928
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/299090[299090]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2929
+#, no-wrap
+msgid "May 4, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2931
+#, no-wrap
+msgid "11.0-CURRENT after improving performance and functionality of the man:bitstring[3] API."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2932
+#, no-wrap
+msgid "1100108"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2933
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/299530[299530]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2934
+#, no-wrap
+msgid "May 12, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2936
+#, no-wrap
+msgid "11.0-CURRENT after fixing handling of IOCTLs in the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2937
+#, no-wrap
+msgid "1100109"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2938
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/299933[299933]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2939
+#, no-wrap
+msgid "May 16, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2941
+#, no-wrap
+msgid "11.0-CURRENT after implementing more Linux device related functions in the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2942
+#, no-wrap
+msgid "1100110"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2943
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/300207[300207]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2944
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4489
+#, no-wrap
+msgid "May 19, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2946
+#, no-wrap
+msgid "11.0-CURRENT after adding support for managing Shingled Magnetic Recording (SMR) drives."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2947
+#, no-wrap
+msgid "1100111"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2948
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/300303[300303]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2949
+#, no-wrap
+msgid "May 20, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2951
+#, no-wrap
+msgid "11.0-CURRENT after removing `brk` and `sbrk` from arm64."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2952
+#, no-wrap
+msgid "1100112"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2953
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/300539[300539]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2954
+#, no-wrap
+msgid "May 23, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2956
+#, no-wrap
+msgid "11.0-CURRENT after adding `bit_count` to the man:bitstring[3] API."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2957
+#, no-wrap
+msgid "1100113"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2958
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/300701[300701]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2959
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2964
+#, no-wrap
+msgid "May 26, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2961
+#, no-wrap
+msgid "11.0-CURRENT after disabling alignment faults on armv6."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2962
+#, no-wrap
+msgid "1100114"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2963
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/300806[300806]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2966
+#, no-wrap
+msgid "11.0-CURRENT after fixing man:crunchgen[1] usage with `MAKEOBJDIRPREFIX`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2967
+#, no-wrap
+msgid "1100115"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2968
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/300982[300982]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2969
+#, no-wrap
+msgid "May 30, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2971
+#, no-wrap
+msgid "11.0-CURRENT after adding an mbuf flag for `M_HASHTYPE_`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2972
+#, no-wrap
+msgid "1100116"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2973
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/301011[301011]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2974
+#, no-wrap
+msgid "May 31, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2976
+#, no-wrap
+msgid "11.0-CURRENT after SHA-512t256 (rev link:https://svnweb.freebsd.org/changeset/base/300903[300903]) and Skein (rev link:https://svnweb.freebsd.org/changeset/base/300966[300966]) where added to libmd, libcrypt, the kernel, and ZFS (rev link:https://svnweb.freebsd.org/changeset/base/301010[301010])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2977
+#, no-wrap
+msgid "1100117"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2978
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/301892[301892]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2979
+#, no-wrap
+msgid "June 6, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2981
+#, no-wrap
+msgid "11.0-CURRENT after libpam was synced with stock link:https://svnweb.freebsd.org/changeset/base/301602[301602], bumping library version."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2982
+#, no-wrap
+msgid "1100118"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2983
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/302071[302071]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2984
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3964
+#, no-wrap
+msgid "June 21, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2986
+#, no-wrap
+msgid "11.0-CURRENT after breaking binary compatibility of struct disk link:https://svnweb.freebsd.org/changeset/base/302069[302069]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2987
+#, no-wrap
+msgid "1100119"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2988
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/302150[302150]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2989
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2994
+#, no-wrap
+msgid "June 23, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2991
+#, no-wrap
+msgid "11.0-CURRENT after switching `geom_disk` to using a pool mutex."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2992
+#, no-wrap
+msgid "1100120"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2993
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/302153[302153]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2996
+#, no-wrap
+msgid "11.0-CURRENT after adding spares to struct ifnet."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2997
+#, no-wrap
+msgid "1100121"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:2998
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3003
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/303979[303979]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3001
+#, no-wrap
+msgid "11-STABLE after `releng/11.0` branched from 11-STABLE (rev link:https://svnweb.freebsd.org/changeset/base/303975[303975])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3002
+#, no-wrap
+msgid "1100500"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3004
+#, no-wrap
+msgid "August 12, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3006
+#, no-wrap
+msgid "11.0-STABLE adding branched link:https://svnweb.freebsd.org/changeset/base/303976[303976]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3007
+#, no-wrap
+msgid "1100501"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3008
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/304609[304609]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3011
+#, no-wrap
+msgid "11.0-STABLE after adding C++11 `thread_local` support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3012
+#, no-wrap
+msgid "1100502"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3013
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/304865[304865]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3014
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3979
+#, no-wrap
+msgid "August 26, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3016
+#, no-wrap
+msgid "11.0-STABLE after `LC_*_MASK` fix."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3017
+#, no-wrap
+msgid "1100503"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3018
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/305733[305733]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3019
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3984
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4494
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5269
+#, no-wrap
+msgid "September 12, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3021
+#, no-wrap
+msgid "11.0-STABLE after resolving a deadlock between `device_detach()` and man:usbd_do_request_flags[9]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3022
+#, no-wrap
+msgid "1100504"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3023
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/307330[307330]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3024
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3989
+#, no-wrap
+msgid "October 14, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3026
+#, no-wrap
+msgid "11.0-STABLE after ZFS merges."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3027
+#, no-wrap
+msgid "1100505"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3028
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/307590[307590]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3029
+#, no-wrap
+msgid "October 19, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3031
+#, no-wrap
+msgid "11.0-STABLE after `struct fb_info` change."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3032
+#, no-wrap
+msgid "1100506"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3033
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/308048[308048]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3034
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3994
+#, no-wrap
+msgid "October 28, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3036
+#, no-wrap
+msgid "11.0-STABLE after installing header files required development with `libzfs_core`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3037
+#, no-wrap
+msgid "1100507"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3038
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/310120[310120]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3039
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3999
+#, no-wrap
+msgid "December 15, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3041
+#, no-wrap
+msgid "11.0-STABLE after adding the `ki_moretdname` member to `struct kinfo_proc` and `struct kinfo_proc32` to export the whole thread name to user-space utilities."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3042
+#, no-wrap
+msgid "1100508"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3043
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/310618[310618]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3044
+#, no-wrap
+msgid "December 26, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3046
+#, no-wrap
+msgid "11.0-STABLE after upgrading copies of clang, llvm, lldb, compiler-rt and libc++ to 3.9.1 release, and adding lld 3.9.1."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3047
+#, no-wrap
+msgid "1100509"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3048
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/311186[311186]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3049
+#, no-wrap
+msgid "January 3, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3051
+#, no-wrap
+msgid "11.0-STABLE after man:crunchgen[1] META_MODE fix (rev link:https://svnweb.freebsd.org/changeset/base/311185[311185])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3052
+#, no-wrap
+msgid "1100510"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3053
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/315312[315312]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3054
+#, no-wrap
+msgid "March 15, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3056
+#, no-wrap
+msgid "11.0-STABLE after MFC of `fget_cap`, `getsock_cap`, and related changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3057
+#, no-wrap
+msgid "1100511"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3058
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/316423[316423]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3059
+#, no-wrap
+msgid "April 2, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3061
+#, no-wrap
+msgid "11.0-STABLE after multiple MFCs updating clang, llvm, lld, lldb, compiler-rt and libc++ to 4.0.0 release."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3062
+#, no-wrap
+msgid "1100512"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3063
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/316498[316498]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3064
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4009
+#, no-wrap
+msgid "April 4, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3066
+#, no-wrap
+msgid "11.0-STABLE after making CAM SIM lock optional (revs link:https://svnweb.freebsd.org/changeset/base/315673[315673], link:https://svnweb.freebsd.org/changeset/base/315674[315674])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3067
+#, no-wrap
+msgid "1100513"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3068
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/318197[318197]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3069
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4014
+#, no-wrap
+msgid "May 11, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3071
+#, no-wrap
+msgid "11.0-STABLE after merging the addition of the [.filename]#<dev/mmc/mmc_ioctl.h># header."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3072
+#, no-wrap
+msgid "1100514"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3073
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/319279[319279]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3074
+#, no-wrap
+msgid "May 31, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3076
+#, no-wrap
+msgid "11.0-STABLE after multiple MFCs of `libpcap`, `WITHOUT_INET6`, and a few other minor changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3077
+#, no-wrap
+msgid "1101000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3078
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/320486[320486]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3079
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3084
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3089
+#, no-wrap
+msgid "June 30, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3081
+#, no-wrap
+msgid "`releng/11.1` branched from `stable/11`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3082
+#, no-wrap
+msgid "1101001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3083
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/320763[320763]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3086
+#, no-wrap
+msgid "11.1-RC1 After merging the `MAP_GUARD` man:mmap[2] flag addition."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3087
+#, no-wrap
+msgid "1101500"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3088
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/320487[320487]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3091
+#, no-wrap
+msgid "11-STABLE after `releng/11.1` branched."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3092
+#, no-wrap
+msgid "1101501"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3093
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/320666[320666]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3094
+#, no-wrap
+msgid "July 5, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3096
+#, no-wrap
+msgid "11-STABLE after merging the `MAP_GUARD` man:mmap[2] flag addition."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3097
+#, no-wrap
+msgid "1101502"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3101
+#, no-wrap
+msgid "11-STABLE after merging the NFS client forced dismount support `umount -N` addition."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3102
+#, no-wrap
+msgid "1101503"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3103
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/323431[323431]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3104
+#, no-wrap
+msgid "September 11, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3106
+#, no-wrap
+msgid "11-STABLE after merging changes making the WRFSBASE instruction operational on amd64."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3107
+#, no-wrap
+msgid "1101504"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3108
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/324006[324006]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3111
+#, no-wrap
+msgid "11-STABLE after merging libm from head, which adds man:cacoshl[3], man:cacosl[3], man:casinhl[3], man:casinl[3], man:catanl[3], man:catanhl[3], man:sincos[3], man:sincosf[3], and man:sincosl[3]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3112
+#, no-wrap
+msgid "1101505"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3113
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/324023[324023]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3116
+#, no-wrap
+msgid "11-STABLE after merging clang, llvm, lld, lldb, compiler-rt and libc++ 5.0.0 release."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3117
+#, no-wrap
+msgid "1101506"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3118
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/325003[325003]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3119
+#, no-wrap
+msgid "October 25, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3121
+#, no-wrap
+msgid "11-STABLE after merging link:https://svnweb.freebsd.org/changeset/base/324281[324281], adding the `value.u16` field to `struct diocgattr_arg`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3122
+#, no-wrap
+msgid "1101507"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3123
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4038
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/328379[328379]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3124
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3129
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4039
+#, no-wrap
+msgid "January 24, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3126
+#, no-wrap
+msgid "11-STABLE after merging link:https://svnweb.freebsd.org/changeset/base/325028[325028], fixing `ptrace()` to always clear the correct thread event when resuming."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3127
+#, no-wrap
+msgid "1101508"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3128
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/328386[328386]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3131
+#, no-wrap
+msgid "11-STABLE after merging link:https://svnweb.freebsd.org/changeset/base/316648[316648], renaming `smp_no_rendevous_barrier()` to `smp_no_rendezvous_barrier()`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3132
+#, no-wrap
+msgid "1101509"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3133
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/328653[328653]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3134
+#, no-wrap
+msgid "February 1, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3136
+#, no-wrap
+msgid "11-STABLE after an overwrite merge backport of the LinuxKPI from FreeBSD-head."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3137
+#, no-wrap
+msgid "1101510"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3138
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/329450[329450]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3139
+#, no-wrap
+msgid "February 17, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3141
+#, no-wrap
+msgid "11-STABLE after the `cmpxchg()` macro is now fully functional in the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3142
+#, no-wrap
+msgid "1101511"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3143
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/329981[329981]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3144
+#, no-wrap
+msgid "February 25, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3146
+#, no-wrap
+msgid "11-STABLE after concluding the recent LinuxKPI related updates."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3147
+#, no-wrap
+msgid "1101512"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3148
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/331219[331219]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3149
+#, no-wrap
+msgid "March 19, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3151
+#, no-wrap
+msgid "11-STABLE after merging `retpoline` support from the upstream llvm, clang and lld 5.0 branches."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3152
+#, no-wrap
+msgid "1101513"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3153
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/331838[331838]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3154
+#, no-wrap
+msgid "March 31, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3156
+#, no-wrap
+msgid "11-STABLE after merging clang, llvm, lld, lldb, compiler-rt and libc++ 6.0.0 release, and several follow-up fixes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3157
+#, no-wrap
+msgid "1101514"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3158
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/332089[332089]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3159
+#, no-wrap
+msgid "April 5, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3161
+#, no-wrap
+msgid "11-STABLE after merging link:https://svnweb.freebsd.org/changeset/base/328331[328331], adding a new and incompatible interpretation of `${name}_limits` in rc scripts."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3162
+#, no-wrap
+msgid "1101515"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3163
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/332363[332363]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3164
+#, no-wrap
+msgid "April 10, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3166
+#, no-wrap
+msgid "11-STABLE after reverting link:https://svnweb.freebsd.org/changeset/base/331880[331880], removing the new and incompatible interpretation of `${name}_limits` in rc scripts."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3167
+#, no-wrap
+msgid "1101516"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3168
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/334392[334392]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3169
+#, no-wrap
+msgid "May 30, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3171
+#, no-wrap
+msgid "11-STABLE after man:dwatch[1] touch-ups."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3172
+#, no-wrap
+msgid "1102000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3173
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/334459[334459]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3176
+#, no-wrap
+msgid "`releng/11.2` branched from `stable/11`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3177
+#, no-wrap
+msgid "1102500"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3178
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/334461[334461]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3181
+#, no-wrap
+msgid "11-STABLE after releng/11.2 branched."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3182
+#, no-wrap
+msgid "1102501"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3183
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/335436[335436]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3184
+#, no-wrap
+msgid "June 20, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3186
+#, no-wrap
+msgid "11-STABLE after LinuxKPI updates requiring recompilation of external kernel modules."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3187
+#, no-wrap
+msgid "1102502"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3188
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/338617[338617]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3189
+#, no-wrap
+msgid "September 12, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3191
+#, no-wrap
+msgid "11-STABLE after adding a socket option SO_TS_CLOCK and fixing `recvmsg32()` system call to properly down-convert layout of the 64-bit structures to match what 32-bit app(s) expect."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3192
+#, no-wrap
+msgid "1102503"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3193
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/338931[338931]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3194
+#, no-wrap
+msgid "September 25, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3196
+#, no-wrap
+msgid "11-STABLE after merging a TCP checksum fix to man:iflib[9] and adding new media types to if_media.h"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3197
+#, no-wrap
+msgid "1102504"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3198
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/340309[340309]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3199
+#, no-wrap
+msgid "November 9, 2018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3201
+#, no-wrap
+msgid "11-STABLE after several MFCs: updating man:objcopy[1] to properly handle little-endian MIPS64 object; correcting mips64el test to use ELF header; adding test for 64-bit ELF in _libelf_is_mips64el."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3202
+#, no-wrap
+msgid "1102505"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3203
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/342804[342804]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3206
+#, no-wrap
+msgid "11-STABLE after merge of fixing `linux_destroy_dev()` behaviour when there are still files open from the destroying cdev."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3207
+#, no-wrap
+msgid "1102506"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3208
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/344220[344220]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3209
+#, no-wrap
+msgid "February 17, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3211
+#, no-wrap
+msgid "11-STABLE after merging multiple commits to lualoader."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3212
+#, no-wrap
+msgid "1102507"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3213
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/346296[346296]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3216
+#, no-wrap
+msgid "11-STABLE after merging llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp 8.0.0 final release r356365."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3217
+#, no-wrap
+msgid "1102508"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3221
+#, no-wrap
+msgid "11-STABLE after `ether_gen_addr` availability."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3222
+#, no-wrap
+msgid "1102509"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3223
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/347212[347212]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3226
+#, no-wrap
+msgid "11-STABLE after MFC of link:https://svnweb.freebsd.org/changeset/base/345303[345303], link:https://svnweb.freebsd.org/changeset/base/345658,[345658,] and partially of link:https://svnweb.freebsd.org/changeset/base/345305[345305]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3227
+#, no-wrap
+msgid "1102510"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3228
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/347883[347883]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3231
+#, no-wrap
+msgid "11-STABLE after bumping the Mellanox driver version numbers (man:mlx4en[4]; man:mlx5en[4])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3232
+#, no-wrap
+msgid "1103000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3233
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/349026[349026]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3234
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3239
+#, no-wrap
+msgid "June 14, 2019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3236
+#, no-wrap
+msgid "`releng/11.3` branched from `stable/11`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3237
+#, no-wrap
+msgid "1103500"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3238
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/349027[349027]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3241
+#, no-wrap
+msgid "11-STABLE after releng/11.3 branched."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3242
+#, no-wrap
+msgid "1103501"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3246
+#, no-wrap
+msgid "11-STABLE after fixing a potential OOB read security issue in libc++."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3247
+#, no-wrap
+msgid "1103502"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3248
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/354614[354614]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3251
+#, no-wrap
+msgid "11-STABLE after adding sysfs create/remove functions that handles multiple files in one call to the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3252
+#, no-wrap
+msgid "1103503"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3253
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/354615[354615]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3256
+#, no-wrap
+msgid "11-STABLE after LinuxKPI sysfs improvements."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3257
+#, no-wrap
+msgid "1103504"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3258
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/354616[354616]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3261
+#, no-wrap
+msgid "11-STABLE after enabling device class group attributes in the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3262
+#, no-wrap
+msgid "1103505"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3266
+#, no-wrap
+msgid "11-STABLE after adding `sigsetop` extensions commonly found in musl libc and glibc."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3267
+#, no-wrap
+msgid "1103506"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3268
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356395[356395]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3271
+#, no-wrap
+msgid "11-STABLE after making USB statistics be per-device instead of per bus."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3272
+#, no-wrap
+msgid "1103507"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3273
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356680[356680]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3276
+#, no-wrap
+msgid "11-STABLE after adding own counter for cancelled USB transfers."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3277
+#, no-wrap
+msgid "1103508"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3278
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/357613[357613]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3281
+#, no-wrap
+msgid "11-STABLE after recent LinuxKPI changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3282
+#, no-wrap
+msgid "1103509"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3283
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/359958[359958]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3286
+#, no-wrap
+msgid "11-STABLE after moving `id_mapped` to end of `bus_dma_impl` structure to preserve KPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3287
+#, no-wrap
+msgid "1103510"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3288
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/360658[360658]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3289
+#, no-wrap
+msgid "May 5, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3291
+#, no-wrap
+msgid "11-STABLE after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 9.0.0 final release r372316."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3292
+#, no-wrap
+msgid "1103511"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3293
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/360784[360784]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3296
+#, no-wrap
+msgid "11-STABLE after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 10.0.0 release."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3297
+#, no-wrap
+msgid "1104000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3298
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/360804[360804]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3299
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3304
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3309
+#, no-wrap
+msgid "May 8, 2020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3301
+#, no-wrap
+msgid "`releng/11.4` branched from `stable/11`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3302
+#, no-wrap
+msgid "1104001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3303
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/360822[360822]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3306
+#, no-wrap
+msgid "11.4-BETA1 after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 10.0.0 release."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3307
+#, no-wrap
+msgid "1104500"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3308
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/360805[360805]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3311
+#, no-wrap
+msgid "11-STABLE after releng/11.4 branched."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3312
+#, no-wrap
+msgid "1104501"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3313
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/362320[362320]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3316
+#, no-wrap
+msgid "11-STABLE after implementing `__is_constexpr()` function macro in the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3317
+#, no-wrap
+msgid "1104502"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3318
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/362919[362919]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3321
+#, no-wrap
+msgid "11-STABLE after making liblzma use libmd implementation of SHA256."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3322
+#, no-wrap
+msgid "1104503"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3323
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/363496[363496]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3326
+#, no-wrap
+msgid "11-STABLE after updating llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to 10.0.1 release."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3327
+#, no-wrap
+msgid "1104504"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3328
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/363792[363792]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3331
+#, no-wrap
+msgid "11-STABLE after implementing the `array_size()` function in the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3332
+#, no-wrap
+msgid "1104505"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3333
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/364391[364391]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3336
+#, no-wrap
+msgid "11-STABLE after change to clone the task struct fields related to RCU."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3337
+#, no-wrap
+msgid "1104506"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3341
+#, no-wrap
+msgid "11-STABLE after adding atomic and `bswap` functions to libcompiler_rt."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3342
+#, no-wrap
+msgid "1104507"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3346
+#, no-wrap
+msgid "11-STABLE after followup commits to libcompiler_rt."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3347
+#, no-wrap
+msgid "1104508"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3348
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/366879[366879]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3351
+#, no-wrap
+msgid "11-STABLE after populating the acquire context field of a `ww_mutex` in the LinuxKPI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3352
+#, no-wrap
+msgid "1104509"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3353
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/366889[366889]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3356
+#, no-wrap
+msgid "11-STABLE after additions to LinuxKPI's `RCU` list."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3357
+#, no-wrap
+msgid "1104510"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3358
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/367513[367513]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3360
+#, no-wrap
+msgid "11-STABLE after the addition of `ptsname_r`."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3363
+#, no-wrap
+msgid "FreeBSD 10 Versions"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3366
+#, no-wrap
+msgid "FreeBSD 10 `__FreeBSD_version` Values"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3375
+#, no-wrap
+msgid "1000000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3376
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/225757[225757]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3377
+#, no-wrap
+msgid "September 26, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3379
+#, no-wrap
+msgid "10.0-CURRENT."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3380
+#, no-wrap
+msgid "1000001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3381
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/227070[227070]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3382
+#, no-wrap
+msgid "November 4, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3384
+#, no-wrap
+msgid "10-CURRENT after addition of the man:posix_fadvise[2] system call."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3385
+#, no-wrap
+msgid "1000002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3386
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/228444[228444]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3387
+#, no-wrap
+msgid "December 12, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3389
+#, no-wrap
+msgid "10-CURRENT after defining boolean true/false in sys/types.h, sizeof(bool) may have changed (rev link:https://svnweb.freebsd.org/changeset/base/228444[228444]). 10-CURRENT after xlocale.h was introduced (rev link:https://svnweb.freebsd.org/changeset/base/227753[227753])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3390
+#, no-wrap
+msgid "1000003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3391
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/228571[228571]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3392
+#, no-wrap
+msgid "December 16, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3394
+#, no-wrap
+msgid "10-CURRENT after major changes to man:carp[4], changing size of struct `in_aliasreq`, struct in6_aliasreq (rev link:https://svnweb.freebsd.org/changeset/base/228571[228571]) and straitening arguments check of SIOCAIFADDR (rev link:https://svnweb.freebsd.org/changeset/base/228574[228574])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3395
+#, no-wrap
+msgid "1000004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3396
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/229204[229204]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3397
+#, no-wrap
+msgid "January 1, 2012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3399
+#, no-wrap
+msgid "10-CURRENT after the removal of `skpc()` and the addition of man:memcchr[9] (rev link:https://svnweb.freebsd.org/changeset/base/229200[229200])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3400
+#, no-wrap
+msgid "1000005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3401
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/230207[230207]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3402
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4307
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5192
+#, no-wrap
+msgid "January 16, 2012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3404
+#, no-wrap
+msgid "10-CURRENT after the removal of support for SIOCSIFADDR, SIOCSIFNETMASK, SIOCSIFBRDADDR, SIOCSIFDSTADDR ioctls."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3405
+#, no-wrap
+msgid "1000006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3406
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/230590[230590]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3407
+#, no-wrap
+msgid "January 26, 2012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3409
+#, no-wrap
+msgid "10-CURRENT after introduction of read capacity data asynchronous notification in the man:cam[4] layer."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3410
+#, no-wrap
+msgid "1000007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3411
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/231025[231025]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3412
+#, no-wrap
+msgid "February 5, 2012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3414
+#, no-wrap
+msgid "10-CURRENT after introduction of new man:tcp[4] socket options: TCP_KEEPINIT, TCP_KEEPIDLE, TCP_KEEPINTVL, and TCP_KEEPCNT."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3415
+#, no-wrap
+msgid "1000008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3416
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/231505[231505]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3417
+#, no-wrap
+msgid "February 11, 2012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3419
+#, no-wrap
+msgid "10-CURRENT after introduction of the new extensible man:sysctl[3] interface NET_RT_IFLISTL to query address lists."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3420
+#, no-wrap
+msgid "1000009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3421
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/232154[232154]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3422
+#, no-wrap
+msgid "February 25, 2012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3424
+#, no-wrap
+msgid "10-CURRENT after import of libarchive 3.0.3 (rev link:https://svnweb.freebsd.org/changeset/base/232153[232153])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3425
+#, no-wrap
+msgid "1000010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3426
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/233757[233757]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3427
+#, no-wrap
+msgid "March 31, 2012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3429
+#, no-wrap
+msgid "10-CURRENT after `xlocale` cleanup."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3430
+#, no-wrap
+msgid "1000011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3431
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/234355[234355]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3432
+#, no-wrap
+msgid "April 16, 2012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3434
+#, no-wrap
+msgid "10-CURRENT import of LLVM/Clang 3.1 trunk link:https://svnweb.freebsd.org/changeset/base/154661[154661] (rev link:https://svnweb.freebsd.org/changeset/base/234353[234353])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3435
+#, no-wrap
+msgid "1000012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3436
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/234924[234924]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3437
+#, no-wrap
+msgid "May 2, 2012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3439
+#, no-wrap
+msgid "10-CURRENT jemalloc import."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3440
+#, no-wrap
+msgid "1000013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3441
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/235788[235788]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3442
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4327
+#, no-wrap
+msgid "May 22, 2012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3444
+#, no-wrap
+msgid "10-CURRENT after `byacc` import."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3445
+#, no-wrap
+msgid "1000014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3446
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/237631[237631]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3447
+#, no-wrap
+msgid "June 27, 2012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3449
+#, no-wrap
+msgid "10-CURRENT after BSD sort becoming the default sort (rev link:https://svnweb.freebsd.org/changeset/base/237629[237629])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3450
+#, no-wrap
+msgid "1000015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3451
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/238405[238405]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3452
+#, no-wrap
+msgid "July 12, 2012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3454
+#, no-wrap
+msgid "10-CURRENT after import of OpenSSL 1.0.1c."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3456
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/238429[238429]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3457
+#, no-wrap
+msgid "July 13, 2012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3459
+#, no-wrap
+msgid "10-CURRENT after the fix for LLVM/Clang 3.1 regression."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3460
+#, no-wrap
+msgid "1000016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3461
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/239179[239179]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3462
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3467
+#, no-wrap
+msgid "August 8, 2012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3464
+#, no-wrap
+msgid "10-CURRENT after KBI change in man:ucom[4]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3465
+#, no-wrap
+msgid "1000017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3466
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/239214[239214]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3469
+#, no-wrap
+msgid "10-CURRENT after adding streams feature to the USB stack."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3470
+#, no-wrap
+msgid "1000018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3471
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/240233[240233]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3472
+#, no-wrap
+msgid "September 8, 2012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3474
+#, no-wrap
+msgid "10-CURRENT after major rewrite of man:pf[4]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3475
+#, no-wrap
+msgid "1000019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3476
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/241245[241245]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3477
+#, no-wrap
+msgid "October 6, 2012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3479
+#, no-wrap
+msgid "10-CURRENT after man:pfil[9] KBI/KPI changed to supply packets in net byte order to AF_INET filter hooks."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3480
+#, no-wrap
+msgid "1000020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3481
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/241610[241610]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3482
+#, no-wrap
+msgid "October 16, 2012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3484
+#, no-wrap
+msgid "10-CURRENT after the network interface cloning KPI changed and struct `if_clone` becoming opaque."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3485
+#, no-wrap
+msgid "1000021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3486
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/241897[241897]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3487
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3492
+#, no-wrap
+msgid "October 22, 2012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3489
+#, no-wrap
+msgid "10-CURRENT after removal of support for non-MPSAFE filesystems and addition of support for FUSEFS (rev link:https://svnweb.freebsd.org/changeset/base/241519[241519])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3490
+#, no-wrap
+msgid "1000022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3491
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/241913[241913]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3494
+#, no-wrap
+msgid "10-CURRENT after the entire IPv4 stack switched to network byte order for IP packet header storage."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3495
+#, no-wrap
+msgid "1000023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3496
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/242619[242619]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3497
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3502
+#, no-wrap
+msgid "November 5, 2012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3499
+#, no-wrap
+msgid "10-CURRENT after jitter buffer in the common USB serial driver code, to temporarily store characters if the TTY buffer is full. Add flow stop and start signals when this happens."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3500
+#, no-wrap
+msgid "1000024"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3501
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/242624[242624]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3504
+#, no-wrap
+msgid "10-CURRENT after clang was made the default compiler on i386 and amd64."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3505
+#, no-wrap
+msgid "1000025"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3506
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/243443[243443]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3507
+#, no-wrap
+msgid "November 17, 2012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3509
+#, no-wrap
+msgid "10-CURRENT after the sin6_scope_id member variable in struct sockaddr_in6 was changed to being filled by the kernel before passing the structure to the userland via sysctl or routing socket. This means the KAME-specific embedded scope id in sin6_addr.s6_addr[2] is always cleared in userland application."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3510
+#, no-wrap
+msgid "1000026"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3511
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/245313[245313]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3512
+#, no-wrap
+msgid "January 11, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3514
+#, no-wrap
+msgid "10-CURRENT after install gained the -N flag. May also be used to indicate the presence of nmtree."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3515
+#, no-wrap
+msgid "1000027"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3516
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/246084[246084]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3517
+#, no-wrap
+msgid "January 29, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3519
+#, no-wrap
+msgid "10-CURRENT after cat gained the -l flag (rev link:https://svnweb.freebsd.org/changeset/base/246083[246083])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3520
+#, no-wrap
+msgid "1000028"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3521
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/246759[246759]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3522
+#, no-wrap
+msgid "February 13, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3524
+#, no-wrap
+msgid "10-CURRENT after USB moved to the driver structure requiring a rebuild of all USB modules."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3525
+#, no-wrap
+msgid "1000029"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3526
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/247821[247821]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3527
+#, no-wrap
+msgid "March 4, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3529
+#, no-wrap
+msgid "10-CURRENT after the introduction of tickless callout facility which also changed the layout of struct callout (rev link:https://svnweb.freebsd.org/changeset/base/247777[247777])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3530
+#, no-wrap
+msgid "1000030"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3531
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/248210[248210]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3532
+#, no-wrap
+msgid "March 12, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3534
+#, no-wrap
+msgid "10-CURRENT after KPI breakage introduced in the VM subsystem to support read/write locking (rev link:https://svnweb.freebsd.org/changeset/base/248084[248084])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3535
+#, no-wrap
+msgid "1000031"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3536
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/249943[249943]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3537
+#, no-wrap
+msgid "April 26, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3539
+#, no-wrap
+msgid "10-CURRENT after the `dst` parameter of the ifnet `if_output` method was changed to take const qualifier (rev link:https://svnweb.freebsd.org/changeset/base/249925[249925])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3540
+#, no-wrap
+msgid "1000032"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3541
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/250163[250163]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3542
+#, no-wrap
+msgid "May 1, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3544
+#, no-wrap
+msgid "10-CURRENT after the introduction of the man:accept4[2] (rev link:https://svnweb.freebsd.org/changeset/base/250154[250154]) and man:pipe2[2] (rev link:https://svnweb.freebsd.org/changeset/base/250159[250159]) system calls."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3545
+#, no-wrap
+msgid "1000033"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3546
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/250881[250881]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3547
+#, no-wrap
+msgid "May 21, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3549
+#, no-wrap
+msgid "10-CURRENT after flex 2.5.37 import."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3550
+#, no-wrap
+msgid "1000034"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3551
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/251294[251294]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3552
+#, no-wrap
+msgid "June 3, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3554
+#, no-wrap
+msgid "10-CURRENT after the addition of these functions to libm: man:cacos[3], man:cacosf[3], man:cacosh[3], man:cacoshf[3], man:casin[3], man:casinf[3], man:casinh[3], man:casinhf[3], man:catan[3], man:catanf[3], man:catanh[3], man:catanhf[3], man:logl[3], man:log2l[3], man:log10l[3], man:log1pl[3], man:expm1l[3]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3555
+#, no-wrap
+msgid "1000035"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3556
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/251527[251527]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3557
+#, no-wrap
+msgid "June 8, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3559
+#, no-wrap
+msgid "10-CURRENT after the introduction of the man:aio_mlock[2] system call (rev link:https://svnweb.freebsd.org/changeset/base/251526[251526])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3560
+#, no-wrap
+msgid "1000036"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3561
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/253049[253049]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3562
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3567
+#, no-wrap
+msgid "July 9, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3564
+#, no-wrap
+msgid "10-CURRENT after the addition of a new function to the kernel GSSAPI module's function call interface."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3565
+#, no-wrap
+msgid "1000037"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3566
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/253089[253089]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3569
+#, no-wrap
+msgid "10-CURRENT after the migration of statistics structures to PCPU counters. Changed structures include: `ahstat`, `arpstat`, `espstat`, `icmp6_ifstat`, `icmp6stat`, `in6_ifstat`, `ip6stat`, `ipcompstat`, `ipipstat`, `ipsecstat`, `mrt6stat`, `mrtstat`, `pfkeystat`, `pim6stat`, `pimstat`, `rip6stat`, `udpstat` (rev link:https://svnweb.freebsd.org/changeset/base/253081[253081])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3570
+#, no-wrap
+msgid "1000038"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3571
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/253396[253396]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3572
+#, no-wrap
+msgid "July 16, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3574
+#, no-wrap
+msgid "10-CURRENT after making `ARM EABI` the default ABI on arm, armeb, armv6, and armv6eb architectures."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3575
+#, no-wrap
+msgid "1000039"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3576
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/253549[253549]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3577
+#, no-wrap
+msgid "July 22, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3579
+#, no-wrap
+msgid "10-CURRENT after `CAM` and man:mps[4] driver scanning changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3580
+#, no-wrap
+msgid "1000040"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3581
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/253638[253638]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3582
+#, no-wrap
+msgid "July 24, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3584
+#, no-wrap
+msgid "10-CURRENT after addition of libusb `pkgconf` files."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3585
+#, no-wrap
+msgid "1000041"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3586
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/253970[253970]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3587
+#, no-wrap
+msgid "August 5, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3589
+#, no-wrap
+msgid "10-CURRENT after change from `time_second` to `time_uptime` in `PF_INET6`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3590
+#, no-wrap
+msgid "1000042"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3591
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/254138[254138]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3592
+#, no-wrap
+msgid "August 9, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3594
+#, no-wrap
+msgid "10-CURRENT after VM subsystem change to unify soft and hard busy mechanisms."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3595
+#, no-wrap
+msgid "1000043"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3596
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/254273[254273]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3597
+#, no-wrap
+msgid "August 13, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3599
+#, no-wrap
+msgid "10-CURRENT after `WITH_ICONV` is enabled by default. A new man:src.conf[5] option, `WITH_LIBICONV_COMPAT` (disabled by default) adds `libiconv_open` to provide compatibility with the package:converters/libiconv[] port."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3600
+#, no-wrap
+msgid "1000044"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3601
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/254358[254358]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3602
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3607
+#, no-wrap
+msgid "August 15, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3604
+#, no-wrap
+msgid "10-CURRENT after [.filename]#libc.so# conversion to an man:ld[1] script (rev link:https://svnweb.freebsd.org/changeset/base/251668[251668])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3605
+#, no-wrap
+msgid "1000045"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3606
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/254389[254389]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3609
+#, no-wrap
+msgid "10-CURRENT after devfs programming interface change by replacing the cdevsw flag `D_UNMAPPED_IO` with the struct cdev flag `SI_UNMAPPED`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3610
+#, no-wrap
+msgid "1000046"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3611
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/254537[254537]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3612
+#, no-wrap
+msgid "August 19, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3612
+#, no-wrap
+msgid "10-CURRENT after addition of `M_PROTO[9-12]` and removal of `M_FRAG\\"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3612
+#, no-wrap
+msgid "M_FIRSTFRAG\\"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3614
+#, no-wrap
+msgid "M_LASTFRAG` mbuf flags (rev link:https://svnweb.freebsd.org/changeset/base/254524[254524], link:https://svnweb.freebsd.org/changeset/base/254526[254526])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3615
+#, no-wrap
+msgid "1000047"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3616
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/254627[254627]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3617
+#, no-wrap
+msgid "August 21, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3619
+#, no-wrap
+msgid "10-CURRENT after man:stat[2] update to allow storing some Windows/DOS and CIFS file attributes as man:stat[2] flags."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3620
+#, no-wrap
+msgid "1000048"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3621
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/254672[254672]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3622
+#, no-wrap
+msgid "August 22, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3624
+#, no-wrap
+msgid "10-CURRENT after modification of structure `xsctp_inpcb`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3625
+#, no-wrap
+msgid "1000049"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3626
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/254760[254760]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3627
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3632
+#, no-wrap
+msgid "August 24, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3629
+#, no-wrap
+msgid "10-CURRENT after man:physio[9] support for devices that do not function properly with split I/O, such as man:sa[4]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3630
+#, no-wrap
+msgid "1000050"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3631
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/254844[254844]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3634
+#, no-wrap
+msgid "10-CURRENT after modifications of structure `mbuf` (rev link:https://svnweb.freebsd.org/changeset/base/254780[254780], link:https://svnweb.freebsd.org/changeset/base/254799[254799], link:https://svnweb.freebsd.org/changeset/base/254804[254804], link:https://svnweb.freebsd.org/changeset/base/254807[254807]link:https://svnweb.freebsd.org/changeset/base/254842[254842])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3635
+#, no-wrap
+msgid "1000051"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3636
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/254887[254887]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3637
+#, no-wrap
+msgid "August 25, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3639
+#, no-wrap
+msgid "10-CURRENT after Radeon KMS driver import (rev link:https://svnweb.freebsd.org/changeset/base/254885[254885])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3640
+#, no-wrap
+msgid "1000052"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3641
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/255180[255180]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3642
+#, no-wrap
+msgid "September 3, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3644
+#, no-wrap
+msgid "10-CURRENT after import of NetBSD `libexecinfo` is connected to the build."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3645
+#, no-wrap
+msgid "1000053"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3646
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/255305[255305]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3647
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3652
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3657
+#, no-wrap
+msgid "September 6, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3649
+#, no-wrap
+msgid "10-CURRENT after API and ABI changes to the Capsicum framework."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3650
+#, no-wrap
+msgid "1000054"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3651
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/255321[255321]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3654
+#, no-wrap
+msgid "10-CURRENT after `gcc` and `libstdc++` are no longer built by default."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3655
+#, no-wrap
+msgid "1000055"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3656
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/255449[255449]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3659
+#, no-wrap
+msgid "10-CURRENT after addition of `MMAP_32BIT` man:mmap[2] flag (rev link:https://svnweb.freebsd.org/changeset/base/255426[255426])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3660
+#, no-wrap
+msgid "1000100"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3661
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/259065[259065]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3662
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3682
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3687
+#, no-wrap
+msgid "December 7, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3664
+#, no-wrap
+msgid "`releng/10.0` branched from `stable/10`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3665
+#, no-wrap
+msgid "1000500"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3666
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/256283[256283]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3669
+#, no-wrap
+msgid "10-STABLE after branch from `head/`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3670
+#, no-wrap
+msgid "1000501"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3671
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/256916[256916]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3672
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4387
+#, no-wrap
+msgid "October 22, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3674
+#, no-wrap
+msgid "10-STABLE after addition of first-boot man:rc[8] support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3675
+#, no-wrap
+msgid "1000502"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3676
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/258398[258398]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3677
+#, no-wrap
+msgid "November 20, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3679
+#, no-wrap
+msgid "10-STABLE after removal of iconv symbols from `libc.so.7`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3680
+#, no-wrap
+msgid "1000510"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3681
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/259067[259067]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3684
+#, no-wrap
+msgid "`releng/10.0` __FreeBSD_version update to prevent the value from going backwards."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3685
+#, no-wrap
+msgid "1000700"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3686
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/259069[259069]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3689
+#, no-wrap
+msgid "10-STABLE after `releng/10.0` branch."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3690
+#, no-wrap
+msgid "1000701"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3691
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/259447[259447]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3694
+#, no-wrap
+msgid "10.0-STABLE after Heimdal encoding fix."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3695
+#, no-wrap
+msgid "1000702"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3696
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/260135[260135]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3697
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4397
+#, no-wrap
+msgid "December 31, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3699
+#, no-wrap
+msgid "10-STABLE after MAP_STACK fixes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3700
+#, no-wrap
+msgid "1000703"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3701
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4401
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/262801[262801]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3702
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4402
+#, no-wrap
+msgid "March 5, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3704
+#, no-wrap
+msgid "10-STABLE after upgrade of libc++ to 3.4 release."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3705
+#, no-wrap
+msgid "1000704"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3706
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/262889[262889]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3707
+#, no-wrap
+msgid "March 7, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3709
+#, no-wrap
+msgid "10-STABLE after MFC of the man:vt[4] driver (rev link:https://svnweb.freebsd.org/changeset/base/262861[262861])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3710
+#, no-wrap
+msgid "1000705"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3711
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/263508[263508]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3712
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4412
+#, no-wrap
+msgid "March 21, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3714
+#, no-wrap
+msgid "10-STABLE after upgrade of llvm/clang to 3.4 release."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3715
+#, no-wrap
+msgid "1000706"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3716
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/264214[264214]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3719
+#, no-wrap
+msgid "10-STABLE after GCC support for `__block` definition."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3720
+#, no-wrap
+msgid "1000707"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3724
+#, no-wrap
+msgid "10-STABLE after FreeBSD-SA-14:06.openssl."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3725
+#, no-wrap
+msgid "1000708"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3726
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/265122[265122]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3727
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4427
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5232
+#, no-wrap
+msgid "April 30, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3729
+#, no-wrap
+msgid "10-STABLE after FreeBSD-SA-14:07.devfs, FreeBSD-SA-14:08.tcp, and FreeBSD-SA-14:09.openssl."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3730
+#, no-wrap
+msgid "1000709"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3731
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/265946[265946]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3732
+#, no-wrap
+msgid "May 13, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3734
+#, no-wrap
+msgid "10-STABLE after support for UDP-Lite protocol (RFC 3828)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3735
+#, no-wrap
+msgid "1000710"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3736
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/267465[267465]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3739
+#, no-wrap
+msgid "10-STABLE after changes to man:strcasecmp[3], moving man:strcasecmp_l[3] and man:strncasecmp_l[3] from [.filename]#<string.h># to [.filename]#<strings.h># for POSIX 2008 compliance."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3740
+#, no-wrap
+msgid "1000711"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3741
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/268442[268442]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3744
+#, no-wrap
+msgid "10-STABLE after FreeBSD-SA-14:17.kmem (rev link:https://svnweb.freebsd.org/changeset/base/268432[268432])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3745
+#, no-wrap
+msgid "1000712"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3746
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/269400[269400]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3747
+#, no-wrap
+msgid "August 1, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3749
+#, no-wrap
+msgid "10-STABLE after man:nfsd[8] 4.1 merge (rev link:https://svnweb.freebsd.org/changeset/base/269398[269398])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3750
+#, no-wrap
+msgid "1000713"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3751
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/269484[269484]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3754
+#, no-wrap
+msgid "10-STABLE after man:regex[3] library update to add \">\" and \"<\" delimiters."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3755
+#, no-wrap
+msgid "1000714"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3756
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/270174[270174]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3759
+#, no-wrap
+msgid "10-STABLE after `SOCK_DGRAM` bug fix (rev link:https://svnweb.freebsd.org/changeset/base/269490[269490])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3760
+#, no-wrap
+msgid "1000715"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3764
+#, no-wrap
+msgid "10-STABLE after FreeBSD-SA-14:18 (rev link:https://svnweb.freebsd.org/changeset/base/269686[269686])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3765
+#, no-wrap
+msgid "1000716"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3769
+#, no-wrap
+msgid "10-STABLE after FreeBSD-SA-14:19 (rev link:https://svnweb.freebsd.org/changeset/base/271667[271667])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3770
+#, no-wrap
+msgid "1000717"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3771
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/271816[271816]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3772
+#, no-wrap
+msgid "September 18, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3774
+#, no-wrap
+msgid "10-STABLE after i915 HW context support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3775
+#, no-wrap
+msgid "1001000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3776
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/272463[272463]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3777
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3782
+#, no-wrap
+msgid "October 2, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3779
+#, no-wrap
+msgid "10.1-RC1 after releng/10.1 branch."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3780
+#, no-wrap
+msgid "1001500"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3781
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/272464[272464]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3784
+#, no-wrap
+msgid "10-STABLE after releng/10.1 branch."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3785
+#, no-wrap
+msgid "1001501"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3789
+#, no-wrap
+msgid "10-STABLE after FreeBSD-SA-14:20, FreeBSD-SA-14:22, and FreeBSD-SA-14:23 (rev link:https://svnweb.freebsd.org/changeset/base/273411[273411])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3790
+#, no-wrap
+msgid "1001502"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3794
+#, no-wrap
+msgid "10-STABLE after FreeBSD-SA-14:23, FreeBSD-SA-14:24, and FreeBSD-SA-14:25."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3795
+#, no-wrap
+msgid "1001503"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3796
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/275040[275040]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3797
+#, no-wrap
+msgid "November 25, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3799
+#, no-wrap
+msgid "10-STABLE after merging new libraries/utilities (man:dpv[1] man:dpv[3], and man:figpar[3]) for data throughput visualization."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3800
+#, no-wrap
+msgid "1001504"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3801
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4471
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/275742[275742]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3802
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4472
+#, no-wrap
+msgid "December 13, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3804
+#, no-wrap
+msgid "10-STABLE after merging an important fix to the LLVM vectorizer, which could lead to buffer overruns in some cases."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3805
+#, no-wrap
+msgid "1001505"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3806
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/276633[276633]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3807
+#, no-wrap
+msgid "January 3, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3809
+#, no-wrap
+msgid "10-STABLE after merging some arm constants in link:https://svnweb.freebsd.org/changeset/base/276312[276312]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3810
+#, no-wrap
+msgid "1001506"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3811
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/277087[277087]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3812
+#, no-wrap
+msgid "January 12, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3814
+#, no-wrap
+msgid "10-STABLE after merging max table size update for yacc."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3815
+#, no-wrap
+msgid "1001507"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3816
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/277790[277790]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3817
+#, no-wrap
+msgid "January 27, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3819
+#, no-wrap
+msgid "10-STABLE after changes to the UDP tunneling callback to provide a context pointer and the source `sockaddr`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3820
+#, no-wrap
+msgid "1001508"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3821
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/278974[278974]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3824
+#, no-wrap
+msgid "10-STABLE after addition of the `CDAI_TYPE_EXT_INQ` request type."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3825
+#, no-wrap
+msgid "1001509"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3826
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4476
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5261
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/279287[279287]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3828
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4478
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5263
+#, no-wrap
+msgid ""
+"February 25, 2015\n"
+"pass:[<!-- vale Vale.Terms = NO -->]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3831
+#, no-wrap
+msgid ""
+"10-STABLE after FreeBSD-EN-15:01.vt, FreeBSD-EN-15:02.openssl, FreeBSD-EN-15:03.freebsd-update, FreeBSD-SA-15:04.igmp, and FreeBSD-SA-15:05.bind.\n"
+"pass:[<!-- vale Vale.Terms = YES -->]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3832
+#, no-wrap
+msgid "1001510"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3833
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/279329[279329]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3834
+#, no-wrap
+msgid "February 26, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3836
+#, no-wrap
+msgid "10-STABLE after MFC of rev link:https://svnweb.freebsd.org/changeset/base/278964[278964]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3837
+#, no-wrap
+msgid "1001511"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3838
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/280246[280246]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3839
+#, no-wrap
+msgid "March 19, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3841
+#, no-wrap
+msgid "10-STABLE after [.filename]#sys/capability.h# is renamed to [.filename]#sys/capsicum.h# (rev link:https://svnweb.freebsd.org/changeset/base/280224/[280224/])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3842
+#, no-wrap
+msgid "1001512"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3843
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/280438[280438]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3844
+#, no-wrap
+msgid "March 24, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3846
+#, no-wrap
+msgid "10-STABLE after addition of new man:mtio[4], man:sa[4] ioctls."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3847
+#, no-wrap
+msgid "1001513"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3848
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/281955[281955]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3849
+#, no-wrap
+msgid "April 24, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3851
+#, no-wrap
+msgid "10-STABLE after starting the process of removing the use of the deprecated \"M_FLOWID\" flag from the network code."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3852
+#, no-wrap
+msgid "1001514"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3853
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/282275[282275]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3854
+#, no-wrap
+msgid "April 30, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3856
+#, no-wrap
+msgid "10-STABLE after MFC of man:iconv[3] fixes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3857
+#, no-wrap
+msgid "1001515"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3858
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/282781[282781]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3859
+#, no-wrap
+msgid "May 11, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3861
+#, no-wrap
+msgid "10-STABLE after adding back `M_FLOWID`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3862
+#, no-wrap
+msgid "1001516"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3863
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/283341[283341]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3864
+#, no-wrap
+msgid "May 24, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3866
+#, no-wrap
+msgid "10-STABLE after MFC of many USB things."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3867
+#, no-wrap
+msgid "1001517"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3868
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/283950[283950]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3869
+#, no-wrap
+msgid "June 3, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3871
+#, no-wrap
+msgid "10-STABLE after MFC of sound related things."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3872
+#, no-wrap
+msgid "1001518"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3873
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/284204[284204]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3876
+#, no-wrap
+msgid "10-STABLE after MFC of zfs vfs fixes (rev link:https://svnweb.freebsd.org/changeset/base/284203[284203])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3877
+#, no-wrap
+msgid "1001519"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3878
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/284720[284720]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3879
+#, no-wrap
+msgid "June 23, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3881
+#, no-wrap
+msgid "10-STABLE after reverting bumping `MAXCPU` on amd64."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3882
+#, no-wrap
+msgid "1002000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3883
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/285830[285830]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3884
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3889
+#, no-wrap
+msgid "July 24, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3886
+#, no-wrap
+msgid "`releng/10.2` branched from 10-STABLE."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3887
+#, no-wrap
+msgid "1002500"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3888
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/285831[285831]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3891
+#, no-wrap
+msgid "10-STABLE after `releng/10.2` branched from 10-STABLE."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3892
+#, no-wrap
+msgid "1002501"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3893
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/289005[289005]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3894
+#, no-wrap
+msgid "October 8, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3896
+#, no-wrap
+msgid "10-STABLE after merge of ZFS changes that affected the internal interface of `zfeature_info` structure (rev link:https://svnweb.freebsd.org/changeset/base/288572[288572])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3897
+#, no-wrap
+msgid "1002502"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3898
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/291243[291243]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3899
+#, no-wrap
+msgid "November 24, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3901
+#, no-wrap
+msgid "10-STABLE after merge of dump device changes that affected the arguments of `g_dev_setdumpdev()`(rev link:https://svnweb.freebsd.org/changeset/base/291215[291215])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3902
+#, no-wrap
+msgid "1002503"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3903
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/292224[292224]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3904
+#, no-wrap
+msgid "December 14, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3906
+#, no-wrap
+msgid "10-STABLE after merge of changes to the internal interface between the nfsd.ko and nfscommon.ko modules, requiring them to be upgraded together (rev link:https://svnweb.freebsd.org/changeset/base/292223[292223])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3907
+#, no-wrap
+msgid "1002504"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3908
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/292589[292589]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3909
+#, no-wrap
+msgid "December 22, 2015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3911
+#, no-wrap
+msgid "10-STABLE after merge of xz 5.2.2 merge (multithread support) (rev link:https://svnweb.freebsd.org/changeset/base/292588[292588])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3912
+#, no-wrap
+msgid "1002505"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3913
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/292908[292908]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3916
+#, no-wrap
+msgid "10-STABLE after merge of changes to man:pci[4] (rev link:https://svnweb.freebsd.org/changeset/base/292907[292907])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3917
+#, no-wrap
+msgid "1002506"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3918
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/293476[293476]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3919
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3924
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3929
+#, no-wrap
+msgid "January 9, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3921
+#, no-wrap
+msgid "10-STABLE after merge of man:utimensat[2] (rev link:https://svnweb.freebsd.org/changeset/base/293473[293473])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3922
+#, no-wrap
+msgid "1002507"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3923
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/293610[293610]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3926
+#, no-wrap
+msgid "10-STABLE after merge of changes to man:linux[4] (rev link:https://svnweb.freebsd.org/changeset/base/293477[293477] through link:https://svnweb.freebsd.org/changeset/base/293609[293609])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3927
+#, no-wrap
+msgid "1002508"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3928
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/293619[293619]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3931
+#, no-wrap
+msgid "10-STABLE after merge of changes to man:figpar[3] types/macros (rev link:https://svnweb.freebsd.org/changeset/base/290275[290275])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3932
+#, no-wrap
+msgid "1002509"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3933
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/295107[295107]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3934
+#, no-wrap
+msgid "February 1, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3936
+#, no-wrap
+msgid "10-STABLE after merge of API change to man:dpv[3]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3937
+#, no-wrap
+msgid "1003000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3938
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/296373[296373]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3939
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3944
+#, no-wrap
+msgid "March 4, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3941
+#, no-wrap
+msgid "`releng/10.3` branched from 10-STABLE."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3942
+#, no-wrap
+msgid "1003500"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3943
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/296374[296374]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3946
+#, no-wrap
+msgid "10-STABLE after `releng/10.3` branched from 10-STABLE."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3947
+#, no-wrap
+msgid "1003501"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3948
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/298299[298299]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3949
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3954
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3959
+#, no-wrap
+msgid "June 19, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3951
+#, no-wrap
+msgid "10-STABLE after adding -P option for `kdbcontrol` (rev link:https://svnweb.freebsd.org/changeset/base/298297[298297])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3952
+#, no-wrap
+msgid "1003502"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3953
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/299966[299966]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3956
+#, no-wrap
+msgid "10-STABLE after libcrypto.so was made position independent."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3957
+#, no-wrap
+msgid "1003503"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3958
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/300235[300235]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3961
+#, no-wrap
+msgid "10-STABLE after allowing `MK_` overrides (rev link:https://svnweb.freebsd.org/changeset/base/300233[300233])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3962
+#, no-wrap
+msgid "1003504"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3963
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/302066[302066]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3966
+#, no-wrap
+msgid "10-STABLE after MFC of `filemon` changes from 11-CURRENT."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3967
+#, no-wrap
+msgid "1003505"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3968
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/302228[302228]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3969
+#, no-wrap
+msgid "June 27, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3971
+#, no-wrap
+msgid "10-STABLE after converting sed to use REG_STARTEND, fixing a Mesa issue."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3972
+#, no-wrap
+msgid "1003506"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3973
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/304611[304611]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3976
+#, no-wrap
+msgid "10-STABLE after adding C++11 `thread_local` support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3977
+#, no-wrap
+msgid "1003507"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3978
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/304864[304864]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3981
+#, no-wrap
+msgid "10-STABLE after `LC_*_MASK` fix."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3982
+#, no-wrap
+msgid "1003508"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3983
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/305734[305734]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3986
+#, no-wrap
+msgid "10-STABLE after resolving a deadlock between `device_detach()` and man:usbd_do_request_flags[9]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3987
+#, no-wrap
+msgid "1003509"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3988
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/307331[307331]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3991
+#, no-wrap
+msgid "10-STABLE after ZFS merges."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3992
+#, no-wrap
+msgid "1003510"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3993
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/308047[308047]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3996
+#, no-wrap
+msgid "10-STABLE after installing header files required development with libzfs_core."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3997
+#, no-wrap
+msgid "1003511"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:3998
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/310121[310121]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4001
+#, no-wrap
+msgid "10-STABLE after exporting whole thread name in `kinfo_proc` (rev link:https://svnweb.freebsd.org/changeset/base/309676[309676])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4002
+#, no-wrap
+msgid "1003512"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4003
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/315730[315730]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4004
+#, no-wrap
+msgid "March 22, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4006
+#, no-wrap
+msgid "10-STABLE after libmd changes (rev link:https://svnweb.freebsd.org/changeset/base/314143[314143])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4007
+#, no-wrap
+msgid "1003513"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4008
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/316499[316499]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4011
+#, no-wrap
+msgid "10-STABLE after making CAM SIM lock optional (revs link:https://svnweb.freebsd.org/changeset/base/315673[315673], link:https://svnweb.freebsd.org/changeset/base/315674[315674])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4012
+#, no-wrap
+msgid "1003514"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4013
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/318198[318198]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4016
+#, no-wrap
+msgid "10-STABLE after merging the addition of the [.filename]#<dev/mmc/mmc_ioctl.h># header."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4017
+#, no-wrap
+msgid "1003515"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4018
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/321222[321222]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4019
+#, no-wrap
+msgid "July 19, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4021
+#, no-wrap
+msgid "10-STABLE after adding C++14 sized deallocation functions to libc++."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4022
+#, no-wrap
+msgid "1003516"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4023
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/321717[321717]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4024
+#, no-wrap
+msgid "July 30, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4026
+#, no-wrap
+msgid "10-STABLE after merging the `MAP_GUARD` man:mmap[2] flag addition."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4027
+#, no-wrap
+msgid "1004000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4028
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/323604[323604]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4029
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4034
+#, no-wrap
+msgid "September 15, 2017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4031
+#, no-wrap
+msgid "`releng/10.4` branched from 10-STABLE."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4032
+#, no-wrap
+msgid "1004500"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4033
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/323605[323605]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4036
+#, no-wrap
+msgid "10-STABLE after `releng/10.4` branched from 10-STABLE."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4037
+#, no-wrap
+msgid "1004501"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4041
+#, no-wrap
+msgid "10-STABLE after merging link:https://svnweb.freebsd.org/changeset/base/325028[325028], fixing `ptrace()` to always clear the correct thread event when resuming."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4042
+#, no-wrap
+msgid "1004502"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4043
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356396[356396]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4046
+#, no-wrap
+msgid "10-STABLE after making USB statistics be per-device instead of per bus."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4047
+#, no-wrap
+msgid "1004503"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4048
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/356681[356681]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4050
+#, no-wrap
+msgid "10-STABLE after adding own counter for cancelled USB transfers."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4053
+#, no-wrap
+msgid "FreeBSD 9 Versions"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4056
+#, no-wrap
+msgid "FreeBSD 9 `__FreeBSD_version` Values"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4065
+#, no-wrap
+msgid "900000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4066
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/196432[196432]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4067
+#, no-wrap
+msgid "August 22, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4069
+#, no-wrap
+msgid "9.0-CURRENT."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4070
+#, no-wrap
+msgid "900001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4071
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/197019[197019]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4072
+#, no-wrap
+msgid "September 8, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4074
+#, no-wrap
+msgid "9.0-CURRENT after importing x86emu, a software emulator for real mode x86 CPU from OpenBSD."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4075
+#, no-wrap
+msgid "900002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4076
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/197430[197430]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4077
+#, no-wrap
+msgid "September 23, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4079
+#, no-wrap
+msgid "9.0-CURRENT after implementing the EVFILT_USER `kevent` filter functionality."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4080
+#, no-wrap
+msgid "900003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4081
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/200039[200039]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4082
+#, no-wrap
+msgid "December 2, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4084
+#, no-wrap
+msgid "9.0-CURRENT after addition of man:sigpause[2] and PIE support in `csu`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4085
+#, no-wrap
+msgid "900004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4086
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/200185[200185]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4087
+#, no-wrap
+msgid "December 6, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4089
+#, no-wrap
+msgid "9.0-CURRENT after addition of libulog and its libutempter compatibility interface."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4090
+#, no-wrap
+msgid "900005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4091
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/200447[200447]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4092
+#, no-wrap
+msgid "December 12, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4094
+#, no-wrap
+msgid "9.0-CURRENT after addition of man:sleepq_sleepcnt[9], which can be used to query the number of waiters on a specific waiting queue."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4095
+#, no-wrap
+msgid "900006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4096
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/201513[201513]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4097
+#, no-wrap
+msgid "January 4, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4099
+#, no-wrap
+msgid "9.0-CURRENT after change of the man:scandir[3] and man:alphasort[3] prototypes to conform to SUSv4."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4100
+#, no-wrap
+msgid "900007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4101
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/202219[202219]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4102
+#, no-wrap
+msgid "January 13, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4104
+#, no-wrap
+msgid "9.0-CURRENT after the removal of man:utmp[5] and the addition of `utmpx` (see man:getutxent[3]) for improved logging of user logins and system events."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4105
+#, no-wrap
+msgid "900008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4106
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/202722[202722]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4107
+#, no-wrap
+msgid "January 20, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4109
+#, no-wrap
+msgid "9.0-CURRENT after the import of BSDL bc/dc and the deprecation of GNU bc/dc."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4110
+#, no-wrap
+msgid "900009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4111
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/203052[203052]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4112
+#, no-wrap
+msgid "January 26, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4114
+#, no-wrap
+msgid "9.0-CURRENT after the addition of SIOCGIFDESCR and SIOCSIFDESCR ioctls to network interfaces. These ioctl can be used to manipulate interface description, as inspired by OpenBSD."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4115
+#, no-wrap
+msgid "900010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4116
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/205471[205471]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4117
+#, no-wrap
+msgid "March 22, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4119
+#, no-wrap
+msgid "9.0-CURRENT after the import of zlib 1.2.4."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4120
+#, no-wrap
+msgid "900011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4121
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/207410[207410]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4122
+#, no-wrap
+msgid "April 24, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4124
+#, no-wrap
+msgid "9.0-CURRENT after adding soft-updates journaling."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4125
+#, no-wrap
+msgid "900012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4126
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/207842[207842]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4127
+#, no-wrap
+msgid "May 10, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4129
+#, no-wrap
+msgid "9.0-CURRENT after adding liblzma, xz, xzdec, and lzmainfo."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4130
+#, no-wrap
+msgid "900013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4131
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/208486[208486]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4132
+#, no-wrap
+msgid "May 24, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4134
+#, no-wrap
+msgid "9.0-CURRENT after bringing in USB fixes for man:linux[4]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4135
+#, no-wrap
+msgid "900014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4136
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/208973[208973]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4137
+#, no-wrap
+msgid "June 10, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4139
+#, no-wrap
+msgid "9.0-CURRENT after adding Clang."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4140
+#, no-wrap
+msgid "900015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4141
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/210390[210390]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4142
+#, no-wrap
+msgid "July 22, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4144
+#, no-wrap
+msgid "9.0-CURRENT after the import of BSD grep."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4145
+#, no-wrap
+msgid "900016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4146
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/210565[210565]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4147
+#, no-wrap
+msgid "July 28, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4149
+#, no-wrap
+msgid "9.0-CURRENT after adding `mti_zone` to struct `malloc_type_internal`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4150
+#, no-wrap
+msgid "900017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4151
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/211701[211701]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4152
+#, no-wrap
+msgid "August 23, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4154
+#, no-wrap
+msgid "9.0-CURRENT after changing back default grep to GNU grep and adding WITH_BSD_GREP knob."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4155
+#, no-wrap
+msgid "900018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4156
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/211735[211735]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4157
+#, no-wrap
+msgid "August 24, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4159
+#, no-wrap
+msgid "9.0-CURRENT after the man:pthread_kill[3] -generated signal is identified as SI_LWP in `si_code`. Previously, `si_code` was SI_USER."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4160
+#, no-wrap
+msgid "900019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4161
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/211937[211937]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4162
+#, no-wrap
+msgid "August 28, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4164
+#, no-wrap
+msgid "9.0-CURRENT after addition of the MAP_PREFAULT_READ flag to man:mmap[2]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4165
+#, no-wrap
+msgid "900020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4166
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/212381[212381]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4167
+#, no-wrap
+msgid "September 9, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4169
+#, no-wrap
+msgid "9.0-CURRENT after adding drain functionality to `sbufs`, which also changed the layout of struct `sbuf`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4170
+#, no-wrap
+msgid "900021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4171
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/212568[212568]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4172
+#, no-wrap
+msgid "September 13, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4174
+#, no-wrap
+msgid "9.0-CURRENT after DTrace has grown support for userland tracing."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4175
+#, no-wrap
+msgid "900022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4176
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/213395[213395]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4177
+#, no-wrap
+msgid "October 2, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4179
+#, no-wrap
+msgid "9.0-CURRENT after addition of the BSDL man utilities and retirement of GNU/GPL man utilities."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4180
+#, no-wrap
+msgid "900023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4181
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/213700[213700]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4182
+#, no-wrap
+msgid "October 11, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4184
+#, no-wrap
+msgid "9.0-CURRENT after updating xz to git 20101010 snapshot."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4185
+#, no-wrap
+msgid "900024"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4186
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/215127[215127]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4187
+#, no-wrap
+msgid "November 11, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4189
+#, no-wrap
+msgid "9.0-CURRENT after libgcc.a was replaced by libcompiler_rt.a."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4190
+#, no-wrap
+msgid "900025"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4191
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/215166[215166]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4192
+#, no-wrap
+msgid "November 12, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4194
+#, no-wrap
+msgid "9.0-CURRENT after the introduction of the modularised congestion control."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4195
+#, no-wrap
+msgid "900026"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4196
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/216088[216088]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4197
+#, no-wrap
+msgid "November 30, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4199
+#, no-wrap
+msgid "9.0-CURRENT after the introduction of Serial Management Protocol (SMP) passthrough and the XPT_SMP_IO and XPT_GDEV_ADVINFO CAM `CCBs`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4200
+#, no-wrap
+msgid "900027"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4201
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/216212[216212]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4202
+#, no-wrap
+msgid "December 5, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4204
+#, no-wrap
+msgid "9.0-CURRENT after the addition of log2 to libm."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4205
+#, no-wrap
+msgid "900028"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4206
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/216615[216615]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4207
+#, no-wrap
+msgid "December 21, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4209
+#, no-wrap
+msgid "9.0-CURRENT after the addition of the Hhook (Helper Hook), Khelp (Kernel Helpers) and Object Specific Data (OSD) KPIs."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4210
+#, no-wrap
+msgid "900029"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4211
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/216758[216758]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4212
+#, no-wrap
+msgid "December 28, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4214
+#, no-wrap
+msgid "9.0-CURRENT after the modification of the TCP stack to allow Khelp modules to interact with it via helper hook points and store per-connection data in the TCP control block."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4215
+#, no-wrap
+msgid "900030"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4216
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/217309[217309]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4217
+#, no-wrap
+msgid "January 12, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4219
+#, no-wrap
+msgid "9.0-CURRENT after the update of libdialog to version 20100428."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4220
+#, no-wrap
+msgid "900031"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4221
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/218414[218414]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4222
+#, no-wrap
+msgid "February 7, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4224
+#, no-wrap
+msgid "9.0-CURRENT after the addition of man:pthread_getthreadid_np[3]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4225
+#, no-wrap
+msgid "900032"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4226
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/218425[218425]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4227
+#, no-wrap
+msgid "February 8, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4229
+#, no-wrap
+msgid "9.0-CURRENT after the removal of the `uio_yield` prototype and symbol."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4230
+#, no-wrap
+msgid "900033"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4231
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/218822[218822]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4232
+#, no-wrap
+msgid "February 18, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4234
+#, no-wrap
+msgid "9.0-CURRENT after the update of binutils to version 2.17.50."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4235
+#, no-wrap
+msgid "900034"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4236
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/219406[219406]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4237
+#, no-wrap
+msgid "March 8, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4239
+#, no-wrap
+msgid "9.0-CURRENT after the struct `sysvec` (`sv_schedtail`) changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4240
+#, no-wrap
+msgid "900035"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4241
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/220150[220150]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4242
+#, no-wrap
+msgid "March 29, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4244
+#, no-wrap
+msgid "9.0-CURRENT after the update of base gcc and libstdc++ to the last GPLv2 licensed revision."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4245
+#, no-wrap
+msgid "900036"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4246
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/220770[220770]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4247
+#, no-wrap
+msgid "April 18, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4249
+#, no-wrap
+msgid "9.0-CURRENT after the removal of libobjc and Objective-C support from the base system."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4250
+#, no-wrap
+msgid "900037"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4251
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/221862[221862]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4252
+#, no-wrap
+msgid "May 13, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4254
+#, no-wrap
+msgid "9.0-CURRENT after importing the man:libprocstat[3] library and man:fuser[1] utility to the base system."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4255
+#, no-wrap
+msgid "900038"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4256
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/222167[222167]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4257
+#, no-wrap
+msgid "May 22, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4259
+#, no-wrap
+msgid "9.0-CURRENT after adding a lock flag argument to man:VFS_FHTOVP[9]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4260
+#, no-wrap
+msgid "900039"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4261
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/223637[223637]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4262
+#, no-wrap
+msgid "June 28, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4264
+#, no-wrap
+msgid "9.0-CURRENT after importing pf from OpenBSD 4.5."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4265
+#, no-wrap
+msgid "900040"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4266
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/224217[224217]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4267
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5162
+#, no-wrap
+msgid "July 19, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4269
+#, no-wrap
+msgid "Increase default MAXCPU for FreeBSD to 64 on amd64 and ia64 and to 128 for XLP (mips)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4270
+#, no-wrap
+msgid "900041"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4271
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/224834[224834]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4272
+#, no-wrap
+msgid "August 13, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4274
+#, no-wrap
+msgid "9.0-CURRENT after the implementation of Capsicum capabilities; man:fget[9] gains a rights argument."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4275
+#, no-wrap
+msgid "900042"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4276
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4281
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/225350[225350]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4277
+#, no-wrap
+msgid "August 28, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4279
+#, no-wrap
+msgid "Bump shared libraries' version numbers for libraries whose ABI has changed in preparation for 9.0."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4280
+#, no-wrap
+msgid "900043"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4282
+#, no-wrap
+msgid "September 2, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4284
+#, no-wrap
+msgid "Add automatic detection of USB mass storage devices which do not support the no synchronize cache SCSI command."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4285
+#, no-wrap
+msgid "900044"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4286
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/225469[225469]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4287
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5172
+#, no-wrap
+msgid "September 10, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4289
+#, no-wrap
+msgid "Re-factor auto-quirk. 9.0-RELEASE."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4290
+#, no-wrap
+msgid "900045"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4291
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/229285[229285]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4292
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4297
+#, no-wrap
+msgid "January 2, 2012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4294
+#, no-wrap
+msgid "9-STABLE after MFC of true/false from 1000002."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4295
+#, no-wrap
+msgid "900500"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4296
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/229318[229318]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4299
+#, no-wrap
+msgid "9.0-STABLE."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4300
+#, no-wrap
+msgid "900501"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4301
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/229723[229723]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4302
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5187
+#, no-wrap
+msgid "January 6, 2012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4304
+#, no-wrap
+msgid "9.0-STABLE after merging of addition of the man:posix_fadvise[2] system call."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4305
+#, no-wrap
+msgid "900502"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4306
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/230237[230237]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4309
+#, no-wrap
+msgid "9.0-STABLE after merging gperf 3.0.3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4310
+#, no-wrap
+msgid "900503"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4311
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/231768[231768]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4312
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5197
+#, no-wrap
+msgid "February 15, 2012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4314
+#, no-wrap
+msgid "9.0-STABLE after introduction of the new extensible man:sysctl[3] interface NET_RT_IFLISTL to query address lists."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4315
+#, no-wrap
+msgid "900504"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4316
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/232728[232728]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4317
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5202
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5207
+#, no-wrap
+msgid "March 3, 2012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4319
+#, no-wrap
+msgid "9.0-STABLE after changes related to mounting of filesystem inside a jail."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4320
+#, no-wrap
+msgid "900505"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4321
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/232945[232945]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4322
+#, no-wrap
+msgid "March 13, 2012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4324
+#, no-wrap
+msgid "9.0-STABLE after introduction of new man:tcp[4] socket options: TCP_KEEPINIT, TCP_KEEPIDLE, TCP_KEEPINTVL, and TCP_KEEPCNT."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4325
+#, no-wrap
+msgid "900506"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4326
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/235786[235786]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4329
+#, no-wrap
+msgid "9.0-STABLE after introduction of the `quick_exit` function and related changes required for C++11."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4330
+#, no-wrap
+msgid "901000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4331
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/239082[239082]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4332
+#, no-wrap
+msgid "August 5, 2012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4334
+#, no-wrap
+msgid "9.1-RELEASE."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4335
+#, no-wrap
+msgid "901500"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4336
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/239081[239081]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4337
+#, no-wrap
+msgid "August 6, 2012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4339
+#, no-wrap
+msgid "9.1-STABLE after branching releng/9.1 (RELENG_9_1)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4340
+#, no-wrap
+msgid "901501"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4341
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/240659[240659]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4342
+#, no-wrap
+msgid "November 11, 2012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4344
+#, no-wrap
+msgid "9.1-STABLE after man:LIST_PREV[3] added to queue.h (rev link:https://svnweb.freebsd.org/changeset/base/242893[242893]) and KBI change in USB serial devices."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4345
+#, no-wrap
+msgid "901502"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4346
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/243656[243656]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4347
+#, no-wrap
+msgid "November 28, 2012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4349
+#, no-wrap
+msgid "9.1-STABLE after USB serial jitter buffer requires rebuild of USB serial device modules."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4350
+#, no-wrap
+msgid "901503"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4351
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/247090[247090]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4352
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5212
+#, no-wrap
+msgid "February 21, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4354
+#, no-wrap
+msgid "9.1-STABLE after USB moved to the driver structure requiring a rebuild of all USB modules. Also indicates the presence of nmtree."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4355
+#, no-wrap
+msgid "901504"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4356
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/248338[248338]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4357
+#, no-wrap
+msgid "March 15, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4359
+#, no-wrap
+msgid "9.1-STABLE after install gained -l, -M, -N and related flags and cat gained the -l option."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4360
+#, no-wrap
+msgid "901505"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4361
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/251687[251687]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4362
+#, no-wrap
+msgid "June 13, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4364
+#, no-wrap
+msgid "9.1-STABLE after fixes in `ctfmerge` bootstrapping (rev link:https://svnweb.freebsd.org/changeset/base/249243[249243])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4365
+#, no-wrap
+msgid "902001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4366
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/253912[253912]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4367
+#, no-wrap
+msgid "August 3, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4369
+#, no-wrap
+msgid "`releng/9.2` branched from `stable/9`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4370
+#, no-wrap
+msgid "902501"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4371
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/253913[253913]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4372
+#, no-wrap
+msgid "August 2, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4374
+#, no-wrap
+msgid "9.2-STABLE after creation of `releng/9.2` branch."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4375
+#, no-wrap
+msgid "902502"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4376
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/254938[254938]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4377
+#, no-wrap
+msgid "August 26, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4379
+#, no-wrap
+msgid "9.2-STABLE after inclusion of the `PIM_RESCAN` CAM path inquiry flag."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4380
+#, no-wrap
+msgid "902503"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4381
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/254979[254979]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4382
+#, no-wrap
+msgid "August 27, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4384
+#, no-wrap
+msgid "9.2-STABLE after inclusion of the `SI_UNMAPPED` cdev flag."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4385
+#, no-wrap
+msgid "902504"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4386
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/256917[256917]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4389
+#, no-wrap
+msgid "9.2-STABLE after inclusion of support for \"first boot\" man:rc[8] scripts."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4390
+#, no-wrap
+msgid "902505"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4391
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/259448[259448]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4392
+#, no-wrap
+msgid "December 12, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4394
+#, no-wrap
+msgid "9.2-STABLE after Heimdal encoding fix."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4395
+#, no-wrap
+msgid "902506"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4396
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/260136[260136]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4399
+#, no-wrap
+msgid "9-STABLE after MAP_STACK fixes (rev link:https://svnweb.freebsd.org/changeset/base/260082[260082])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4400
+#, no-wrap
+msgid "902507"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4404
+#, no-wrap
+msgid "9-STABLE after upgrade of libc++ to 3.4 release."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4405
+#, no-wrap
+msgid "902508"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4406
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/263171[263171]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4409
+#, no-wrap
+msgid "9-STABLE after merge of the Radeon KMS driver (rev link:https://svnweb.freebsd.org/changeset/base/263170[263170])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4410
+#, no-wrap
+msgid "902509"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4411
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/263509[263509]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4414
+#, no-wrap
+msgid "9-STABLE after upgrade of llvm/clang to 3.4 release."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4415
+#, no-wrap
+msgid "902510"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4416
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/263818[263818]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4417
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4422
+#, no-wrap
+msgid "March 27, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4419
+#, no-wrap
+msgid "9-STABLE after merge of the man:vt[4] driver."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4420
+#, no-wrap
+msgid "902511"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4424
+#, no-wrap
+msgid "9-STABLE after FreeBSD-SA-14:06.openssl."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4425
+#, no-wrap
+msgid "902512"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4426
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5231
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/265123[265123]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4429
+#, no-wrap
+msgid "9-STABLE after FreeBSD-SA-14:08.tcp."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4430
+#, no-wrap
+msgid "903000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4431
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/267656[267656]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4432
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4437
+#, no-wrap
+msgid "June 20, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4434
+#, no-wrap
+msgid "9-RC1 `releng/9.3` branch."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4435
+#, no-wrap
+msgid "903500"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4436
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/267657[267657]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4439
+#, no-wrap
+msgid "9.3-STABLE `releng/9.3` branch."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4440
+#, no-wrap
+msgid "903501"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4441
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/268443[268443]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4444
+#, no-wrap
+msgid "9-STABLE after FreeBSD-SA-14:17.kmem (rev link:https://svnweb.freebsd.org/changeset/base/268433[268433])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4445
+#, no-wrap
+msgid "903502"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4446
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/270175[270175]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4447
+#, no-wrap
+msgid "August 19, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4449
+#, no-wrap
+msgid "9-STABLE after `SOCK_DGRAM` bug fix (rev link:https://svnweb.freebsd.org/changeset/base/269789[269789])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4450
+#, no-wrap
+msgid "903503"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4454
+#, no-wrap
+msgid "9-STABLE after FreeBSD-SA-14:18 (rev link:https://svnweb.freebsd.org/changeset/base/269687[269687])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4455
+#, no-wrap
+msgid "903504"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4459
+#, no-wrap
+msgid "9-STABLE after FreeBSD-SA-14:19 (rev link:https://svnweb.freebsd.org/changeset/base/271668[271668])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4460
+#, no-wrap
+msgid "903505"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4464
+#, no-wrap
+msgid "9-STABLE after FreeBSD-SA-14:20, FreeBSD-SA-14:21, and FreeBSD-SA-14:22 (rev link:https://svnweb.freebsd.org/changeset/base/273412[273412])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4465
+#, no-wrap
+msgid "903506"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4469
+#, no-wrap
+msgid "9-STABLE after FreeBSD-SA-14:23, FreeBSD-SA-14:24, and FreeBSD-SA-14:25."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4470
+#, no-wrap
+msgid "903507"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4474
+#, no-wrap
+msgid "9-STABLE after merging an important fix to the LLVM vectorizer, which could lead to buffer overruns in some cases."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4475
+#, no-wrap
+msgid "903508"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4481
+#, no-wrap
+msgid ""
+"9-STABLE after FreeBSD-EN-15:01.vt, FreeBSD-EN-15:02.openssl, FreeBSD-EN-15:03.freebsd-update, FreeBSD-SA-15:04.igmp, and FreeBSD-SA-15:05.bind.\n"
+"pass:[<!-- vale Vale.Terms = YES -->]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4482
+#, no-wrap
+msgid "903509"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4483
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/296219[296219]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4484
+#, no-wrap
+msgid "February 29, 2016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4486
+#, no-wrap
+msgid "9-STABLE after bumping the default value of `compat.linux.osrelease` to `2.6.18` to support the linux-c6-* ports out of the box."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4487
+#, no-wrap
+msgid "903510"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4488
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/300236[300236]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4491
+#, no-wrap
+msgid "9-STABLE after System Binary Interface (SBI) page was moved in latest version of Berkeley Boot Loader (BBL) due to code size increase in link:https://svnweb.freebsd.org/changeset/base/300234[300234]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4492
+#, no-wrap
+msgid "903511"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4493
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/305735[305735]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4495
+#, no-wrap
+msgid "9-STABLE after resolving a deadlock between `device_detach()` and man:usbd_do_request_flags[9]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4498
+#, no-wrap
+msgid "FreeBSD 8 Versions"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4501
+#, no-wrap
+msgid "FreeBSD 8 `__FreeBSD_version` Values"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4510
+#, no-wrap
+msgid "800000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4511
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/172531[172531]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4512
+#, no-wrap
+msgid "October 11, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4514
+#, no-wrap
+msgid "8.0-CURRENT. Separating wide and single byte `ctype`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4515
+#, no-wrap
+msgid "800001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4516
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/172688[172688]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4517
+#, no-wrap
+msgid "October 16, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4519
+#, no-wrap
+msgid "8.0-CURRENT after libpcap 0.9.8 and tcpdump 3.9.8 import."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4520
+#, no-wrap
+msgid "800002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4521
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/172841[172841]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4522
+#, no-wrap
+msgid "October 21, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4524
+#, no-wrap
+msgid "8.0-CURRENT after renaming man:kthread_create[9] and friends to man:kproc_create[9] etc."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4525
+#, no-wrap
+msgid "800003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4526
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/172932[172932]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4527
+#, no-wrap
+msgid "October 24, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4529
+#, no-wrap
+msgid "8.0-CURRENT after ABI backwards compatibility to the FreeBSD 4/5/6 versions of the PCIOCGETCONF, PCIOCREAD and PCIOCWRITE IOCTLs was added, which required the ABI of the PCIOCGETCONF IOCTL to be broken again"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4530
+#, no-wrap
+msgid "800004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4531
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/173573[173573]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4532
+#, no-wrap
+msgid "November 12, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4534
+#, no-wrap
+msgid "8.0-CURRENT after man:agp[4] driver moved from src/sys/pci to src/sys/dev/agp"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4535
+#, no-wrap
+msgid "800005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4536
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/174261[174261]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4537
+#, no-wrap
+msgid "December 4, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4539
+#, no-wrap
+msgid "8.0-CURRENT after changes to the jumbo frame allocator (rev link:https://svnweb.freebsd.org/changeset/base/174247[174247])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4540
+#, no-wrap
+msgid "800006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4541
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/174399[174399]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4542
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6090
+#, no-wrap
+msgid "December 7, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4544
+#, no-wrap
+msgid "8.0-CURRENT after the addition of `callgraph` capture functionality to man:hwpmc[4]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4545
+#, no-wrap
+msgid "800007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4546
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/174901[174901]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4547
+#, no-wrap
+msgid "December 25, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4549
+#, no-wrap
+msgid "8.0-CURRENT after `kdb_enter()` gains a \"why\" argument."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4550
+#, no-wrap
+msgid "800008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4551
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/174951[174951]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4552
+#, no-wrap
+msgid "December 28, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4554
+#, no-wrap
+msgid "8.0-CURRENT after LK_EXCLUPGRADE option removal."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4555
+#, no-wrap
+msgid "800009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4556
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/175168[175168]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4557
+#, no-wrap
+msgid "January 9, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4559
+#, no-wrap
+msgid "8.0-CURRENT after introduction of man:lockmgr_disown[9]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4560
+#, no-wrap
+msgid "800010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4561
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/175204[175204]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4562
+#, no-wrap
+msgid "January 10, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4564
+#, no-wrap
+msgid "8.0-CURRENT after the man:vn_lock[9] prototype change."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4565
+#, no-wrap
+msgid "800011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4566
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/175295[175295]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4567
+#, no-wrap
+msgid "January 13, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4569
+#, no-wrap
+msgid "8.0-CURRENT after the man:VOP_LOCK[9] and man:VOP_UNLOCK[9] prototype changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4570
+#, no-wrap
+msgid "800012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4571
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/175487[175487]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4572
+#, no-wrap
+msgid "January 19, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4574
+#, no-wrap
+msgid "8.0-CURRENT after introduction of man:lockmgr_recursed[9], man:BUF_RECURSED[9] and man:BUF_ISLOCKED[9] and the removal of `BUF_REFCNT()`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4575
+#, no-wrap
+msgid "800013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4576
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/175581[175581]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4577
+#, no-wrap
+msgid "January 23, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4579
+#, no-wrap
+msgid "8.0-CURRENT after introduction of the \"ASCII\" encoding."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4580
+#, no-wrap
+msgid "800014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4581
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/175636[175636]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4582
+#, no-wrap
+msgid "January 24, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4584
+#, no-wrap
+msgid "8.0-CURRENT after changing the prototype of man:lockmgr[9] and removal of `lockcount()` and `LOCKMGR_ASSERT()`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4585
+#, no-wrap
+msgid "800015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4586
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/175688[175688]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4587
+#, no-wrap
+msgid "January 26, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4589
+#, no-wrap
+msgid "8.0-CURRENT after extending the types of the man:fts[3] structures."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4590
+#, no-wrap
+msgid "800016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4591
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/175872[175872]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4592
+#, no-wrap
+msgid "February 1, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4594
+#, no-wrap
+msgid "8.0-CURRENT after adding an argument to man:MEXTADD[9]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4595
+#, no-wrap
+msgid "800017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4596
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/176015[176015]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4597
+#, no-wrap
+msgid "February 6, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4599
+#, no-wrap
+msgid "8.0-CURRENT after the introduction of LK_NODUP and LK_NOWITNESS options in the man:lockmgr[9] space."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4600
+#, no-wrap
+msgid "800018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4601
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/176112[176112]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4602
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5577
+#, no-wrap
+msgid "February 8, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4604
+#, no-wrap
+msgid "8.0-CURRENT after the addition of `m_collapse`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4605
+#, no-wrap
+msgid "800019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4606
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/176124[176124]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4607
+#, no-wrap
+msgid "February 9, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4609
+#, no-wrap
+msgid "8.0-CURRENT after the addition of current working directory, root directory, and jail directory support to the kern.proc.filedesc sysctl."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4610
+#, no-wrap
+msgid "800020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4611
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/176251[176251]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4612
+#, no-wrap
+msgid "February 13, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4614
+#, no-wrap
+msgid "8.0-CURRENT after introduction of man:lockmgr_assert[9] and `BUF_ASSERT` functions."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4615
+#, no-wrap
+msgid "800021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4616
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/176321[176321]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4617
+#, no-wrap
+msgid "February 15, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4619
+#, no-wrap
+msgid "8.0-CURRENT after introduction of man:lockmgr_args[9] and LK_INTERNAL flag removal."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4620
+#, no-wrap
+msgid "800022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4621
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/176556[176556]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4622
+#, no-wrap
+msgid "(backed out)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4624
+#, no-wrap
+msgid "8.0-CURRENT after changing the default system ar to BSD man:ar[1]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4625
+#, no-wrap
+msgid "800023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4626
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/176560[176560]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4627
+#, no-wrap
+msgid "February 25, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4629
+#, no-wrap
+msgid "8.0-CURRENT after changing the prototypes of man:lockstatus[9] and man:VOP_ISLOCKED[9];, more specifically retiring the `struct thread` argument."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4630
+#, no-wrap
+msgid "800024"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4631
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/176709[176709]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4632
+#, no-wrap
+msgid "March 1, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4634
+#, no-wrap
+msgid "8.0-CURRENT after axing out the `lockwaiters` and `BUF_LOCKWAITERS` functions, changing the return value of `brelvp` from void to int and introducing new flags for man:lockinit[9]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4635
+#, no-wrap
+msgid "800025"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4636
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/176958[176958]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4637
+#, no-wrap
+msgid "March 8, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4639
+#, no-wrap
+msgid "8.0-CURRENT after adding F_DUP2FD command to man:fcntl[2]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4640
+#, no-wrap
+msgid "800026"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4641
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/177086[177086]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4642
+#, no-wrap
+msgid "March 12, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4644
+#, no-wrap
+msgid "8.0-CURRENT after changing the priority parameter to `cv_broadcastpri` such that 0 means no priority."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4645
+#, no-wrap
+msgid "800027"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4646
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/177551[177551]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4647
+#, no-wrap
+msgid "March 24, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4649
+#, no-wrap
+msgid "8.0-CURRENT after changing the bpf monitoring ABI when `zerocopy` bpf buffers were added."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4650
+#, no-wrap
+msgid "800028"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4651
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/177637[177637]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4652
+#, no-wrap
+msgid "March 26, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4654
+#, no-wrap
+msgid "8.0-CURRENT after adding `l_sysid` to struct flock."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4655
+#, no-wrap
+msgid "800029"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4656
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/177688[177688]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4657
+#, no-wrap
+msgid "March 28, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4659
+#, no-wrap
+msgid "8.0-CURRENT after reintegration of the `BUF_LOCKWAITERS` function and the addition of man:lockmgr_waiters[9]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4660
+#, no-wrap
+msgid "800030"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4661
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/177844[177844]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4662
+#, no-wrap
+msgid "April 1, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4664
+#, no-wrap
+msgid "8.0-CURRENT after the introduction of the man:rw_try_rlock[9] and man:rw_try_wlock[9] functions."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4665
+#, no-wrap
+msgid "800031"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4666
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/177958[177958]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4667
+#, no-wrap
+msgid "April 6, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4669
+#, no-wrap
+msgid "8.0-CURRENT after the introduction of the `lockmgr_rw` and `lockmgr_args_rw` functions."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4670
+#, no-wrap
+msgid "800032"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4671
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/178006[178006]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4672
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4677
+#, no-wrap
+msgid "April 8, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4674
+#, no-wrap
+msgid "8.0-CURRENT after the implementation of the `openat` and related syscalls, introduction of the O_EXEC flag for the man:open[2], and providing the corresponding Linux compatibility syscalls."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4675
+#, no-wrap
+msgid "800033"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4676
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/178017[178017]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4679
+#, no-wrap
+msgid "8.0-CURRENT after added man:write[2] support for man:psm[4] in native operation level. Now arbitrary commands can be written to [.filename]#/dev/psm%d# and status can be read back from it."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4680
+#, no-wrap
+msgid "800034"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4681
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/178051[178051]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4682
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5587
+#, no-wrap
+msgid "April 10, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4684
+#, no-wrap
+msgid "8.0-CURRENT after introduction of the `memrchr` function."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4685
+#, no-wrap
+msgid "800035"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4686
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/178256[178256]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4687
+#, no-wrap
+msgid "April 16, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4689
+#, no-wrap
+msgid "8.0-CURRENT after introduction of the `fdopendir` function."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4690
+#, no-wrap
+msgid "800036"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4691
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/178362[178362]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4692
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5607
+#, no-wrap
+msgid "April 20, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4694
+#, no-wrap
+msgid "8.0-CURRENT after switchover of 802.11 wireless to multi-bss support (aka `vaps`)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4695
+#, no-wrap
+msgid "800037"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4696
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/178892[178892]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4697
+#, no-wrap
+msgid "May 9, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4699
+#, no-wrap
+msgid "8.0-CURRENT after addition of multi routing table support (aka man:setfib[1], man:setfib[2])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4700
+#, no-wrap
+msgid "800038"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4701
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/179316[179316]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4702
+#, no-wrap
+msgid "May 26, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4704
+#, no-wrap
+msgid "8.0-CURRENT after removal of `netatm` and ISDN4BSD. Also, the addition of the Compact C Type (CTF) tools."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4705
+#, no-wrap
+msgid "800039"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4706
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/179784[179784]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4707
+#, no-wrap
+msgid "June 14, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4709
+#, no-wrap
+msgid "8.0-CURRENT after removal of `sgtty`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4710
+#, no-wrap
+msgid "800040"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4711
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/180025[180025]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4712
+#, no-wrap
+msgid "June 26, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4714
+#, no-wrap
+msgid "8.0-CURRENT with kernel NFS `lockd` client."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4715
+#, no-wrap
+msgid "800041"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4716
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/180691[180691]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4717
+#, no-wrap
+msgid "July 22, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4719
+#, no-wrap
+msgid "8.0-CURRENT after addition of man:arc4random_buf[3] and man:arc4random_uniform[3]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4720
+#, no-wrap
+msgid "800042"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4721
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/181439[181439]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4722
+#, no-wrap
+msgid "August 8, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4724
+#, no-wrap
+msgid "8.0-CURRENT after addition of man:cpuctl[4]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4725
+#, no-wrap
+msgid "800043"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4726
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/181694[181694]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4727
+#, no-wrap
+msgid "August 13, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4729
+#, no-wrap
+msgid "8.0-CURRENT after changing man:bpf[4] to use a single device node, instead of device cloning."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4730
+#, no-wrap
+msgid "800044"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4731
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/181803[181803]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4732
+#, no-wrap
+msgid "August 17, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4734
+#, no-wrap
+msgid "8.0-CURRENT after the commit of the first step of the VIMAGE project renaming global variables to be virtualized with a `V_` prefix with macros to map them back to their global names."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4735
+#, no-wrap
+msgid "800045"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4736
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/181905[181905]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4737
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5627
+#, no-wrap
+msgid "August 20, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4739
+#, no-wrap
+msgid "8.0-CURRENT after the integration of the MPSAFE TTY layer, including changes to various drivers and utilities that interact with it."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4740
+#, no-wrap
+msgid "800046"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4741
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/182869[182869]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4742
+#, no-wrap
+msgid "September 8, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4744
+#, no-wrap
+msgid "8.0-CURRENT after the separation of the GDT per CPU on amd64 architecture."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4745
+#, no-wrap
+msgid "800047"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4746
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/182905[182905]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4747
+#, no-wrap
+msgid "September 10, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4749
+#, no-wrap
+msgid "8.0-CURRENT after removal of VSVTX, VSGID and VSUID."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4750
+#, no-wrap
+msgid "800048"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4751
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/183091[183091]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4752
+#, no-wrap
+msgid "September 16, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4754
+#, no-wrap
+msgid "8.0-CURRENT after converting the kernel NFS mount code to accept individual mount options in the man:nmount[2] `iovec`, not just one big struct nfs_args."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4755
+#, no-wrap
+msgid "800049"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4756
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/183114[183114]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4757
+#, no-wrap
+msgid "September 17, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4759
+#, no-wrap
+msgid "8.0-CURRENT after the removal of man:suser[9] and man:suser_cred[9]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4760
+#, no-wrap
+msgid "800050"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4761
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/184099[184099]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4762
+#, no-wrap
+msgid "October 20, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4764
+#, no-wrap
+msgid "8.0-CURRENT after buffer cache API change."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4765
+#, no-wrap
+msgid "800051"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4766
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/184205[184205]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4767
+#, no-wrap
+msgid "October 23, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4769
+#, no-wrap
+msgid "8.0-CURRENT after the removal of the man:MALLOC[9] and man:FREE[9] macros."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4770
+#, no-wrap
+msgid "800052"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4771
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/184419[184419]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4772
+#, no-wrap
+msgid "October 28, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4774
+#, no-wrap
+msgid "8.0-CURRENT after the introduction of `accmode_t` and renaming of VOP_ACCESS `a_mode` argument to `a_accmode`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4775
+#, no-wrap
+msgid "800053"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4776
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/184555[184555]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4777
+#, no-wrap
+msgid "November 2, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4779
+#, no-wrap
+msgid "8.0-CURRENT after the prototype change of man:vfs_busy[9] and the introduction of its MBF_NOWAIT and MBF_MNTLSTLOCK flags."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4780
+#, no-wrap
+msgid "800054"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4781
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/185162[185162]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4782
+#, no-wrap
+msgid "November 22, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4784
+#, no-wrap
+msgid "8.0-CURRENT after the addition of `buf_ring`, memory barriers and ifnet functions to facilitate multiple hardware transmit queues for cards that support them, and a lockless ring-buffer implementation to enable drivers to more efficiently manage queuing of packets."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4785
+#, no-wrap
+msgid "800055"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4786
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/185363[185363]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4787
+#, no-wrap
+msgid "November 27, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4789
+#, no-wrap
+msgid "8.0-CURRENT after the addition of Intel(TM) Core, Core2, and Atom support to man:hwpmc[4]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4790
+#, no-wrap
+msgid "800056"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4791
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/185435[185435]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4792
+#, no-wrap
+msgid "November 29, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4794
+#, no-wrap
+msgid "8.0-CURRENT after the introduction of multi-/no-IPv4/v6 jails."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4795
+#, no-wrap
+msgid "800057"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4796
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/185522[185522]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4797
+#, no-wrap
+msgid "December 1, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4799
+#, no-wrap
+msgid "8.0-CURRENT after the switch to the ath `hal` source code."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4800
+#, no-wrap
+msgid "800058"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4801
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/185968[185968]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4802
+#, no-wrap
+msgid "December 12, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4804
+#, no-wrap
+msgid "8.0-CURRENT after the introduction of the VOP_VPTOCNP operation."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4805
+#, no-wrap
+msgid "800059"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4806
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/186119[186119]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4807
+#, no-wrap
+msgid "December 15, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4809
+#, no-wrap
+msgid "8.0-CURRENT incorporates the new arp-v2 rewrite."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4810
+#, no-wrap
+msgid "800060"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4811
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/186344[186344]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4812
+#, no-wrap
+msgid "December 19, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4814
+#, no-wrap
+msgid "8.0-CURRENT after the addition of makefs."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4815
+#, no-wrap
+msgid "800061"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4816
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/187289[187289]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4817
+#, no-wrap
+msgid "January 15, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4819
+#, no-wrap
+msgid "8.0-CURRENT after TCP Appropriate Byte Counting."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4820
+#, no-wrap
+msgid "800062"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4821
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/187830[187830]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4822
+#, no-wrap
+msgid "January 28, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4824
+#, no-wrap
+msgid "8.0-CURRENT after removal of `minor()`, `minor2unit()`, `unit2minor()`, etc."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4825
+#, no-wrap
+msgid "800063"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4826
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/188745[188745]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4827
+#, no-wrap
+msgid "February 18, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4829
+#, no-wrap
+msgid "8.0-CURRENT after GENERIC config change to use the USB2 stack, but also the addition of man:fdevname[3]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4830
+#, no-wrap
+msgid "800064"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4831
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/188946[188946]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4832
+#, no-wrap
+msgid "February 23, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4834
+#, no-wrap
+msgid "8.0-CURRENT after the USB2 stack is moved to and replaces dev/usb."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4835
+#, no-wrap
+msgid "800065"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4836
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/189092[189092]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4837
+#, no-wrap
+msgid "February 26, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4839
+#, no-wrap
+msgid "8.0-CURRENT after the renaming of all functions in man:libmp[3]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4840
+#, no-wrap
+msgid "800066"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4841
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/189110[189110]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4842
+#, no-wrap
+msgid "February 27, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4844
+#, no-wrap
+msgid "8.0-CURRENT after changing USB devfs handling and layout."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4845
+#, no-wrap
+msgid "800067"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4846
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/189136[189136]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4847
+#, no-wrap
+msgid "February 28, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4849
+#, no-wrap
+msgid "8.0-CURRENT after adding `getdelim()`, `getline()`, `stpncpy()`, `strnlen()`, `wcsnlen()`, `wcscasecmp()`, and `wcsncasecmp()`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4850
+#, no-wrap
+msgid "800068"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4851
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/189276[189276]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4852
+#, no-wrap
+msgid "March 2, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4854
+#, no-wrap
+msgid "8.0-CURRENT after renaming the `ushub` devclass to `uhub`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4855
+#, no-wrap
+msgid "800069"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4856
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/189585[189585]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4857
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4862
+#, no-wrap
+msgid "March 9, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4859
+#, no-wrap
+msgid "8.0-CURRENT after libusb20.so.1 was renamed to libusb.so.1."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4860
+#, no-wrap
+msgid "800070"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4861
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/189592[189592]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4864
+#, no-wrap
+msgid "8.0-CURRENT after merging IGMPv3 and Source-Specific Multicast (SSM) to the IPv4 stack."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4865
+#, no-wrap
+msgid "800071"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4866
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/189825[189825]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4867
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5672
+#, no-wrap
+msgid "March 14, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4869
+#, no-wrap
+msgid "8.0-CURRENT after gcc was patched to use C99 inline semantics in c99 and gnu99 mode."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4870
+#, no-wrap
+msgid "800072"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4871
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/189853[189853]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4872
+#, no-wrap
+msgid "March 15, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4874
+#, no-wrap
+msgid "8.0-CURRENT after the IFF_NEEDSGIANT flag has been removed; non-MPSAFE network device drivers are no longer supported."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4875
+#, no-wrap
+msgid "800073"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4876
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/190265[190265]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4877
+#, no-wrap
+msgid "March 18, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4879
+#, no-wrap
+msgid "8.0-CURRENT after the dynamic string token substitution has been implemented for rpath and needed paths."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4880
+#, no-wrap
+msgid "800074"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4881
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/190373[190373]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4882
+#, no-wrap
+msgid "March 24, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4884
+#, no-wrap
+msgid "8.0-CURRENT after tcpdump 4.0.0 and libpcap 1.0.0 import."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4885
+#, no-wrap
+msgid "800075"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4886
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/190787[190787]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4887
+#, no-wrap
+msgid "April 6, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4889
+#, no-wrap
+msgid "8.0-CURRENT after layout of structs vnet_net, vnet_inet and vnet_ipfw has been changed."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4890
+#, no-wrap
+msgid "800076"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4891
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/190866[190866]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4892
+#, no-wrap
+msgid "April 9, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4894
+#, no-wrap
+msgid "8.0-CURRENT after adding delay profiles in dummynet."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4895
+#, no-wrap
+msgid "800077"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4896
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/190914[190914]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4897
+#, no-wrap
+msgid "April 14, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4899
+#, no-wrap
+msgid "8.0-CURRENT after removing `VOP_LEASE()` and vop_vector.vop_lease."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4900
+#, no-wrap
+msgid "800078"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4901
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/191080[191080]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4902
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4907
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4912
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5677
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5682
+#, no-wrap
+msgid "April 15, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4904
+#, no-wrap
+msgid "8.0-CURRENT after struct `rt_weight` fields have been added to struct `rt_metrics` and struct `rt_metrics_lite`, changing the layout of struct `rt_metrics_lite`. A bump to RTM_VERSION was made, but backed out."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4905
+#, no-wrap
+msgid "800079"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4906
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/191117[191117]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4909
+#, no-wrap
+msgid "8.0-CURRENT after struct `llentry` pointers are added to struct route and struct route_in6."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4910
+#, no-wrap
+msgid "800080"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4911
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/191126[191126]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4914
+#, no-wrap
+msgid "8.0-CURRENT after layout of struct inpcb has been changed."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4915
+#, no-wrap
+msgid "800081"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4916
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/191267[191267]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4917
+#, no-wrap
+msgid "April 19, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4919
+#, no-wrap
+msgid "8.0-CURRENT after the layout of struct `malloc_type` has been changed."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4920
+#, no-wrap
+msgid "800082"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4921
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/191368[191368]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4922
+#, no-wrap
+msgid "April 21, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4924
+#, no-wrap
+msgid "8.0-CURRENT after the layout of struct ifnet has changed, and with `if_ref()` and `if_rele()` ifnet `refcounting`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4925
+#, no-wrap
+msgid "800083"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4926
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/191389[191389]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4927
+#, no-wrap
+msgid "April 22, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4929
+#, no-wrap
+msgid "8.0-CURRENT after the implementation of a low-level Bluetooth HCI API."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4930
+#, no-wrap
+msgid "800084"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4931
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/191672[191672]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4932
+#, no-wrap
+msgid "April 29, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4934
+#, no-wrap
+msgid "8.0-CURRENT after IPv6 SSM and MLDv2 changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4935
+#, no-wrap
+msgid "800085"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4936
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/191688[191688]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4937
+#, no-wrap
+msgid "April 30, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4939
+#, no-wrap
+msgid "8.0-CURRENT after enabling support for VIMAGE kernel builds with one active image."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4940
+#, no-wrap
+msgid "800086"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4941
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/191910[191910]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4942
+#, no-wrap
+msgid "May 8, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4944
+#, no-wrap
+msgid "8.0-CURRENT after adding support for input lines of arbitrarily length in man:patch[1]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4945
+#, no-wrap
+msgid "800087"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4946
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/191990[191990]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4947
+#, no-wrap
+msgid "May 11, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4949
+#, no-wrap
+msgid "8.0-CURRENT after some VFS KPI changes. The thread argument has been removed from the FSD parts of the VFS. `VFS_*` functions do not need the context any more because it always refers to `curthread`. In some special cases, the old behavior is retained."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4950
+#, no-wrap
+msgid "800088"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4951
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/192470[192470]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4952
+#, no-wrap
+msgid "May 20, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4954
+#, no-wrap
+msgid "8.0-CURRENT after net80211 monitor mode changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4955
+#, no-wrap
+msgid "800089"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4956
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/192649[192649]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4957
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4962
+#, no-wrap
+msgid "May 23, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4959
+#, no-wrap
+msgid "8.0-CURRENT after adding UDP control block support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4960
+#, no-wrap
+msgid "800090"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4961
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/192669[192669]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4964
+#, no-wrap
+msgid "8.0-CURRENT after virtualizing interface cloning."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4965
+#, no-wrap
+msgid "800091"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4966
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/192895[192895]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4967
+#, no-wrap
+msgid "May 27, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4969
+#, no-wrap
+msgid "8.0-CURRENT after adding hierarchical jails and removing global securelevel."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4970
+#, no-wrap
+msgid "800092"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4971
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/193011[193011]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4972
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4977
+#, no-wrap
+msgid "May 29, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4974
+#, no-wrap
+msgid "8.0-CURRENT after changing `sx_init_flags()` KPI. The `SX_ADAPTIVESPIN` is retired and a new `SX_NOADAPTIVE` flag is introduced to handle the reversed logic."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4975
+#, no-wrap
+msgid "800093"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4976
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/193047[193047]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4979
+#, no-wrap
+msgid "8.0-CURRENT after adding `mnt_xflag` to struct mount."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4980
+#, no-wrap
+msgid "800094"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4981
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/193093[193093]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4982
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4987
+#, no-wrap
+msgid "May 30, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4984
+#, no-wrap
+msgid "8.0-CURRENT after adding man:VOP_ACCESSX[9]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4985
+#, no-wrap
+msgid "800095"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4986
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/193096[193096]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4989
+#, no-wrap
+msgid "8.0-CURRENT after changing the polling KPI. The polling handlers now return the number of packets processed. A new `IFCAP_POLLING_NOCOUNT` is also introduced to specify that the return value is not significant and the counting should be skipped."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4990
+#, no-wrap
+msgid "800096"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4991
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/193219[193219]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4992
+#, no-wrap
+msgid "June 1, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4994
+#, no-wrap
+msgid "8.0-CURRENT after updating to the new netisr implementation and after changing the way of storing and accessing FIBs."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4995
+#, no-wrap
+msgid "800097"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4996
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/193731[193731]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4997
+#, no-wrap
+msgid "June 8, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:4999
+#, no-wrap
+msgid "8.0-CURRENT after the introduction of vnet destructor hooks and infrastructure."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5001
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/194012[194012]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5002
+#, no-wrap
+msgid "June 11, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5004
+#, no-wrap
+msgid "8.0-CURRENT after the introduction of netgraph outbound to inbound path call detection and queuing, which also changed the layout of struct thread."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5005
+#, no-wrap
+msgid "800098"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5006
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/194210[194210]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5007
+#, no-wrap
+msgid "June 14, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5009
+#, no-wrap
+msgid "8.0-CURRENT after OpenSSL 0.9.8k import."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5010
+#, no-wrap
+msgid "800099"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5011
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/194675[194675]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5012
+#, no-wrap
+msgid "June 22, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5014
+#, no-wrap
+msgid "8.0-CURRENT after NGROUPS update and moving route virtualization into its own VImage module."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5015
+#, no-wrap
+msgid "800100"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5016
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/194920[194920]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5017
+#, no-wrap
+msgid "June 24, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5019
+#, no-wrap
+msgid "8.0-CURRENT after SYSVIPC ABI change."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5020
+#, no-wrap
+msgid "800101"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5021
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/195175[195175]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5022
+#, no-wrap
+msgid "June 29, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5024
+#, no-wrap
+msgid "8.0-CURRENT after the removal of the /dev/net/* per-interface character devices."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5025
+#, no-wrap
+msgid "800102"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5026
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/195634[195634]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5027
+#, no-wrap
+msgid "July 12, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5029
+#, no-wrap
+msgid "8.0-CURRENT after padding was added to struct `sackhint`, struct tcpcb, and struct `tcpstat`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5030
+#, no-wrap
+msgid "800103"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5031
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/195654[195654]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5032
+#, no-wrap
+msgid "July 13, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5034
+#, no-wrap
+msgid "8.0-CURRENT after replacing struct `tcpopt` with struct `toeopt` in the TOE driver interface to the TCP `syncache`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5035
+#, no-wrap
+msgid "800104"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5036
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/195699[195699]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5037
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5702
+#, no-wrap
+msgid "July 14, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5039
+#, no-wrap
+msgid "8.0-CURRENT after the addition of the linker-set based per-vnet allocator."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5040
+#, no-wrap
+msgid "800105"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5041
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/195767[195767]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5042
+#, no-wrap
+msgid "July 19, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5044
+#, no-wrap
+msgid "8.0-CURRENT after version bump for all shared libraries that do not have symbol versioning turned on."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5045
+#, no-wrap
+msgid "800106"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5046
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/195852[195852]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5047
+#, no-wrap
+msgid "July 24, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5049
+#, no-wrap
+msgid "8.0-CURRENT after introduction of OBJT_SG VM object type."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5050
+#, no-wrap
+msgid "800107"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5051
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/196037[196037]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5052
+#, no-wrap
+msgid "August 2, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5054
+#, no-wrap
+msgid "8.0-CURRENT after making the newbus subsystem Giant free by adding the newbus `sxlock` and 8.0-RELEASE."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5055
+#, no-wrap
+msgid "800108"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5056
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/199627[199627]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5057
+#, no-wrap
+msgid "November 21, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5059
+#, no-wrap
+msgid "8.0-STABLE after implementing EVFILT_USER `kevent` filter."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5060
+#, no-wrap
+msgid "800500"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5061
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/201749[201749]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5062
+#, no-wrap
+msgid "January 7, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5064
+#, no-wrap
+msgid "8.0-STABLE after `__FreeBSD_version` bump to make `pkg_add -r` use packages-8-stable."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5065
+#, no-wrap
+msgid "800501"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5066
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/202922[202922]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5067
+#, no-wrap
+msgid "January 24, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5069
+#, no-wrap
+msgid "8.0-STABLE after change of the man:scandir[3] and man:alphasort[3] prototypes to conform to SUSv4."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5070
+#, no-wrap
+msgid "800502"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5071
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/203299[203299]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5072
+#, no-wrap
+msgid "January 31, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5074
+#, no-wrap
+msgid "8.0-STABLE after addition of man:sigpause[2]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5075
+#, no-wrap
+msgid "800503"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5076
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/204344[204344]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5077
+#, no-wrap
+msgid "February 25, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5079
+#, no-wrap
+msgid "8.0-STABLE after addition of SIOCGIFDESCR and SIOCSIFDESCR ioctls to network interfaces. These ioctl can be used to manipulate interface description, as inspired by OpenBSD."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5080
+#, no-wrap
+msgid "800504"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5081
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/204546[204546]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5082
+#, no-wrap
+msgid "March 1, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5084
+#, no-wrap
+msgid "8.0-STABLE after MFC of importing x86emu, a software emulator for real mode x86 CPU from OpenBSD."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5085
+#, no-wrap
+msgid "800505"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5086
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/208259[208259]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5087
+#, no-wrap
+msgid "May 18, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5089
+#, no-wrap
+msgid "8.0-STABLE after MFC of adding liblzma, xz, xzdec, and lzmainfo."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5090
+#, no-wrap
+msgid "801000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5091
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/209150[209150]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5092
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5097
+#, no-wrap
+msgid "June 14, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5094
+#, no-wrap
+msgid "8.1-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5095
+#, no-wrap
+msgid "801500"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5096
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/209146[209146]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5099
+#, no-wrap
+msgid "8.1-STABLE after 8.1-RELEASE."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5100
+#, no-wrap
+msgid "801501"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5101
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/214762[214762]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5102
+#, no-wrap
+msgid "November 3, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5104
+#, no-wrap
+msgid "8.1-STABLE after KBI change in struct `sysentvec`, and implementation of PL_FLAG_SCE/SCX/EXEC/SI and `pl_siginfo` for ptrace(PT_LWPINFO) ."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5105
+#, no-wrap
+msgid "802000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5106
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/216639[216639]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5107
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5112
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5727
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5732
+#, no-wrap
+msgid "December 22, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5109
+#, no-wrap
+msgid "8.2-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5110
+#, no-wrap
+msgid "802500"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5111
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/216654[216654]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5114
+#, no-wrap
+msgid "8.2-STABLE after 8.2-RELEASE."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5115
+#, no-wrap
+msgid "802501"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5116
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/219107[219107]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5117
+#, no-wrap
+msgid "February 28, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5119
+#, no-wrap
+msgid "8.2-STABLE after merging DTrace changes, including support for userland tracing."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5120
+#, no-wrap
+msgid "802502"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5121
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/219324[219324]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5122
+#, no-wrap
+msgid "March 6, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5124
+#, no-wrap
+msgid "8.2-STABLE after merging log2 and log2f into libm."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5125
+#, no-wrap
+msgid "802503"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5126
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/221275[221275]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5127
+#, no-wrap
+msgid "May 1, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5129
+#, no-wrap
+msgid "8.2-STABLE after upgrade of the gcc to the last GPLv2 version from the FSF gcc-4_2-branch."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5130
+#, no-wrap
+msgid "802504"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5131
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/222401[222401]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5132
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5137
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5142
+#, no-wrap
+msgid "May 28, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5134
+#, no-wrap
+msgid "8.2-STABLE after introduction of the KPI and supporting infrastructure for modular congestion control."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5135
+#, no-wrap
+msgid "802505"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5136
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/222406[222406]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5139
+#, no-wrap
+msgid "8.2-STABLE after introduction of Hhook and Khelp KPIs."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5140
+#, no-wrap
+msgid "802506"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5141
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/222408[222408]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5144
+#, no-wrap
+msgid "8.2-STABLE after addition of OSD to struct tcpcb."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5145
+#, no-wrap
+msgid "802507"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5146
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/222741[222741]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5147
+#, no-wrap
+msgid "June 6, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5149
+#, no-wrap
+msgid "8.2-STABLE after ZFS v28 import."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5150
+#, no-wrap
+msgid "802508"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5151
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/222846[222846]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5152
+#, no-wrap
+msgid "June 8, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5154
+#, no-wrap
+msgid "8.2-STABLE after removal of the `schedtail` event handler and addition of the `sv_schedtail` method to struct `sysvec`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5155
+#, no-wrap
+msgid "802509"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5156
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/224017[224017]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5157
+#, no-wrap
+msgid "July 14, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5159
+#, no-wrap
+msgid "8.2-STABLE after merging the SSSE3 support into binutils."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5160
+#, no-wrap
+msgid "802510"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5161
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/224214[224214]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5164
+#, no-wrap
+msgid "8.2-STABLE after addition of RFTSIGZMB flag for man:rfork[2]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5165
+#, no-wrap
+msgid "802511"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5166
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/225458[225458]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5167
+#, no-wrap
+msgid "September 9, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5169
+#, no-wrap
+msgid "8.2-STABLE after addition of automatic detection of USB mass storage devices which do not support the no synchronize cache SCSI command."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5170
+#, no-wrap
+msgid "802512"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5171
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/225470[225470]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5174
+#, no-wrap
+msgid "8.2-STABLE after merging of re-factoring of auto-quirk."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5175
+#, no-wrap
+msgid "802513"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5176
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/226763[226763]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5177
+#, no-wrap
+msgid "October 25, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5179
+#, no-wrap
+msgid "8.2-STABLE after merging of the MAP_PREFAULT_READ flag to man:mmap[2]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5180
+#, no-wrap
+msgid "802514"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5181
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/227573[227573]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5182
+#, no-wrap
+msgid "November 16, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5184
+#, no-wrap
+msgid "8.2-STABLE after merging of addition of man:posix_fallocate[2] syscall."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5185
+#, no-wrap
+msgid "802515"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5186
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/229725[229725]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5189
+#, no-wrap
+msgid "8.2-STABLE after merging of addition of the man:posix_fadvise[2] system call."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5190
+#, no-wrap
+msgid "802516"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5191
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/230239[230239]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5194
+#, no-wrap
+msgid "8.2-STABLE after merging gperf 3.0.3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5195
+#, no-wrap
+msgid "802517"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5196
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/231769[231769]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5199
+#, no-wrap
+msgid "8.2-STABLE after introduction of the new extensible man:sysctl[3] interface NET_RT_IFLISTL to query address lists."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5200
+#, no-wrap
+msgid "803000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5201
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/232446[232446]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5204
+#, no-wrap
+msgid "8.3-RELEASE."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5205
+#, no-wrap
+msgid "803500"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5206
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/232439[232439]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5209
+#, no-wrap
+msgid "8.3-STABLE after branching releng/8.3 (RELENG_8_3)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5210
+#, no-wrap
+msgid "803501"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5211
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/247091[247091]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5214
+#, no-wrap
+msgid "8.3-STABLE after MFC of two USB fixes (rev link:https://svnweb.freebsd.org/changeset/base/246616[246616] and link:https://svnweb.freebsd.org/changeset/base/246759[246759])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5215
+#, no-wrap
+msgid "804000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5216
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/248850[248850]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5217
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5222
+#, no-wrap
+msgid "March 28, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5219
+#, no-wrap
+msgid "8.4-RELEASE."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5220
+#, no-wrap
+msgid "804500"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5221
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/248819[248819]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5224
+#, no-wrap
+msgid "8.4-STABLE after 8.4-RELEASE."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5225
+#, no-wrap
+msgid "804501"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5226
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/259449[259449]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5227
+#, no-wrap
+msgid "December 16, 2013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5229
+#, no-wrap
+msgid "8.4-STABLE after MFC of upstream Heimdal encoding fix."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5230
+#, no-wrap
+msgid "804502"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5234
+#, no-wrap
+msgid "8.4-STABLE after FreeBSD-SA-14:08.tcp."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5235
+#, no-wrap
+msgid "804503"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5236
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/268444[268444]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5237
+#, no-wrap
+msgid "July 9, 2014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5239
+#, no-wrap
+msgid "8.4-STABLE after FreeBSD-SA-14:17.kmem."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5240
+#, no-wrap
+msgid "804504"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5244
+#, no-wrap
+msgid "8.4-STABLE after FreeBSD-SA-14:18 (rev link:https://svnweb.freebsd.org/changeset/base/271305[271305])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5245
+#, no-wrap
+msgid "804505"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5249
+#, no-wrap
+msgid "8.4-STABLE after FreeBSD-SA-14:19 (rev link:https://svnweb.freebsd.org/changeset/base/271668[271668])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5250
+#, no-wrap
+msgid "804506"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5254
+#, no-wrap
+msgid "8.4-STABLE after FreeBSD-SA-14:21 (rev link:https://svnweb.freebsd.org/changeset/base/273413[273413])."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5255
+#, no-wrap
+msgid "804507"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5259
+#, no-wrap
+msgid "8.4-STABLE after FreeBSD-SA-14:23, FreeBSD-SA-14:24, and FreeBSD-SA-14:25."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5260
+#, no-wrap
+msgid "804508"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5266
+#, no-wrap
+msgid ""
+"8-STABLE after FreeBSD-EN-15:01.vt, FreeBSD-EN-15:02.openssl, FreeBSD-EN-15:03.freebsd-update, FreeBSD-SA-15:04.igmp, and FreeBSD-SA-15:05.bind.\n"
+"pass:[<!-- vale Vale.Terms = YES -->]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5267
+#, no-wrap
+msgid "804509"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5268
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/305736[305736]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5270
+#, no-wrap
+msgid "8-STABLE after resolving a deadlock between `device_detach()` and man:usbd_do_request_flags[9]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5273
+#, no-wrap
+msgid "FreeBSD 7 Versions"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5276
+#, no-wrap
+msgid "FreeBSD 7 `__FreeBSD_version` Values"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5285
+#, no-wrap
+msgid "700000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5286
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/147925[147925]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5287
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5915
+#, no-wrap
+msgid "July 11, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5289
+#, no-wrap
+msgid "7.0-CURRENT."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5290
+#, no-wrap
+msgid "700001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5291
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/148341[148341]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5292
+#, no-wrap
+msgid "July 23, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5294
+#, no-wrap
+msgid "7.0-CURRENT after bump of all shared library versions that had not been changed since RELENG_5."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5295
+#, no-wrap
+msgid "700002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5296
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/149039[149039]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5297
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5925
+#, no-wrap
+msgid "August 13, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5299
+#, no-wrap
+msgid "7.0-CURRENT after credential argument is added to `dev_clone` event handler."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5300
+#, no-wrap
+msgid "700003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5301
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/149470[149470]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5302
+#, no-wrap
+msgid "August 25, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5304
+#, no-wrap
+msgid "7.0-CURRENT after man:memmem[3] is added to libc."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5305
+#, no-wrap
+msgid "700004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5306
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/151888[151888]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5307
+#, no-wrap
+msgid "October 30, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5309
+#, no-wrap
+msgid "7.0-CURRENT after man:solisten[9] kernel arguments are modified to accept a backlog parameter."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5310
+#, no-wrap
+msgid "700005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5311
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/152296[152296]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5312
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5317
+#, no-wrap
+msgid "November 11, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5314
+#, no-wrap
+msgid "7.0-CURRENT after `IFP2ENADDR()` was changed to return a pointer to `IF_LLADDR()`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5315
+#, no-wrap
+msgid "700006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5316
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/152315[152315]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5319
+#, no-wrap
+msgid "7.0-CURRENT after addition of `if_addr` member to `struct ifnet` and `IFP2ENADDR()` removal."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5320
+#, no-wrap
+msgid "700007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5321
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/153027[153027]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5322
+#, no-wrap
+msgid "December 2, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5324
+#, no-wrap
+msgid "7.0-CURRENT after incorporating scripts from the `local_startup` directories into the base man:rcorder[8]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5325
+#, no-wrap
+msgid "700008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5326
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/153107[153107]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5327
+#, no-wrap
+msgid "December 5, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5329
+#, no-wrap
+msgid "7.0-CURRENT after removal of MNT_NODEV mount option."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5330
+#, no-wrap
+msgid "700009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5331
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/153519[153519]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5332
+#, no-wrap
+msgid "December 19, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5334
+#, no-wrap
+msgid "7.0-CURRENT after ELF-64 type changes and symbol versioning."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5335
+#, no-wrap
+msgid "700010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5336
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/153579[153579]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5337
+#, no-wrap
+msgid "December 20, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5339
+#, no-wrap
+msgid "7.0-CURRENT after addition of `hostb` and `vgapci` drivers, addition of `pci_find_extcap()`, and changing the AGP drivers to no longer map the aperture."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5340
+#, no-wrap
+msgid "700011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5341
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/153936[153936]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5342
+#, no-wrap
+msgid "December 31, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5344
+#, no-wrap
+msgid "7.0-CURRENT after `tv_sec` was made `time_t` on all platforms but Alpha."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5345
+#, no-wrap
+msgid "700012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5346
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/154114[154114]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5347
+#, no-wrap
+msgid "January 8, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5349
+#, no-wrap
+msgid "7.0-CURRENT after ldconfig_local_dirs change."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5350
+#, no-wrap
+msgid "700013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5351
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/154269[154269]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5352
+#, no-wrap
+msgid "January 12, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5354
+#, no-wrap
+msgid "7.0-CURRENT after changes to [.filename]#/etc/rc.d/abi# to support [.filename]#/compat/linux/etc/ld.so.cache# being a symlink in a read-only filesystem."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5355
+#, no-wrap
+msgid "700014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5356
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/154863[154863]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5357
+#, no-wrap
+msgid "January 26, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5359
+#, no-wrap
+msgid "7.0-CURRENT after pts import."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5360
+#, no-wrap
+msgid "700015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5361
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/157144[157144]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5362
+#, no-wrap
+msgid "March 26, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5364
+#, no-wrap
+msgid "7.0-CURRENT after the introduction of version 2 of man:hwpmc[4]'s ABI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5365
+#, no-wrap
+msgid "700016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5366
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/157962[157962]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5367
+#, no-wrap
+msgid "April 22, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5369
+#, no-wrap
+msgid "7.0-CURRENT after addition of man:fcloseall[3] to libc."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5370
+#, no-wrap
+msgid "700017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5371
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/158513[158513]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5372
+#, no-wrap
+msgid "May 13, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5374
+#, no-wrap
+msgid "7.0-CURRENT after removal of ip6fw."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5375
+#, no-wrap
+msgid "700018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5376
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/160386[160386]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5377
+#, no-wrap
+msgid "July 15, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5379
+#, no-wrap
+msgid "7.0-CURRENT after import of snd_emu10kx."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5380
+#, no-wrap
+msgid "700019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5381
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/160821[160821]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5382
+#, no-wrap
+msgid "July 29, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5384
+#, no-wrap
+msgid "7.0-CURRENT after import of OpenSSL 0.9.8b."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5385
+#, no-wrap
+msgid "700020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5386
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/161931[161931]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5387
+#, no-wrap
+msgid "September 3, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5389
+#, no-wrap
+msgid "7.0-CURRENT after addition of `bus_dma_get_tag` function"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5390
+#, no-wrap
+msgid "700021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5391
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/162023[162023]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5392
+#, no-wrap
+msgid "September 4, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5394
+#, no-wrap
+msgid "7.0-CURRENT after libpcap 0.9.4 and tcpdump 3.9.4 import."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5395
+#, no-wrap
+msgid "700022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5396
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/162170[162170]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5397
+#, no-wrap
+msgid "September 9, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5399
+#, no-wrap
+msgid "7.0-CURRENT after `dlsym` change to look for a requested symbol both in specified DSO and its implicit dependencies."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5400
+#, no-wrap
+msgid "700023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5401
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/162588[162588]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5402
+#, no-wrap
+msgid "September 23, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5404
+#, no-wrap
+msgid "7.0-CURRENT after adding new sound IOCTLs for the OSSv4 mixer API."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5405
+#, no-wrap
+msgid "700024"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5406
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/162919[162919]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5407
+#, no-wrap
+msgid "September 28, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5409
+#, no-wrap
+msgid "7.0-CURRENT after import of OpenSSL 0.9.8d."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5410
+#, no-wrap
+msgid "700025"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5411
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/164190[164190]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5412
+#, no-wrap
+msgid "November 11, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5414
+#, no-wrap
+msgid "7.0-CURRENT after the addition of libelf."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5415
+#, no-wrap
+msgid "700026"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5416
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/164614[164614]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5417
+#, no-wrap
+msgid "November 26, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5419
+#, no-wrap
+msgid "7.0-CURRENT after major changes on sound sysctls."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5420
+#, no-wrap
+msgid "700027"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5421
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/164770[164770]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5422
+#, no-wrap
+msgid "November 30, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5424
+#, no-wrap
+msgid "7.0-CURRENT after the addition of Wi-Spy quirk."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5425
+#, no-wrap
+msgid "700028"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5426
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/165242[165242]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5427
+#, no-wrap
+msgid "December 15, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5429
+#, no-wrap
+msgid "7.0-CURRENT after the addition of `sctp` calls to libc"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5430
+#, no-wrap
+msgid "700029"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5431
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/166259[166259]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5432
+#, no-wrap
+msgid "January 26, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5434
+#, no-wrap
+msgid "7.0-CURRENT after the GNU man:gzip[1] implementation was replaced with a BSD licensed version ported from NetBSD."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5435
+#, no-wrap
+msgid "700030"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5436
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/166549[166549]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5437
+#, no-wrap
+msgid "February 7, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5439
+#, no-wrap
+msgid "7.0-CURRENT after the removal of IPIP tunnel encapsulation (VIFF_TUNNEL) from the IPv4 multicast forwarding code."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5440
+#, no-wrap
+msgid "700031"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5441
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/166907[166907]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5442
+#, no-wrap
+msgid "February 23, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5444
+#, no-wrap
+msgid "7.0-CURRENT after the modification of `bus_setup_intr()` (newbus)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5445
+#, no-wrap
+msgid "700032"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5446
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/167165[167165]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5447
+#, no-wrap
+msgid "March 2, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5449
+#, no-wrap
+msgid "7.0-CURRENT after the inclusion of man:ipw[4] and man:iwi[4] firmware."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5450
+#, no-wrap
+msgid "700033"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5451
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/167360[167360]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5452
+#, no-wrap
+msgid "March 9, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5454
+#, no-wrap
+msgid "7.0-CURRENT after the inclusion of ncurses wide character support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5455
+#, no-wrap
+msgid "700034"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5456
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/167684[167684]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5457
+#, no-wrap
+msgid "March 19, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5459
+#, no-wrap
+msgid "7.0-CURRENT after changes to how `insmntque()`, `getnewvnode()`, and `vfs_hash_insert()` work."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5460
+#, no-wrap
+msgid "700035"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5461
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/167906[167906]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5462
+#, no-wrap
+msgid "March 26, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5464
+#, no-wrap
+msgid "7.0-CURRENT after addition of a notify mechanism for CPU frequency changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5465
+#, no-wrap
+msgid "700036"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5466
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/168413[168413]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5467
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6035
+#, no-wrap
+msgid "April 6, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5469
+#, no-wrap
+msgid "7.0-CURRENT after import of the ZFS filesystem."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5470
+#, no-wrap
+msgid "700037"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5471
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/168504[168504]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5472
+#, no-wrap
+msgid "April 8, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5474
+#, no-wrap
+msgid "7.0-CURRENT after addition of CAM 'SG' peripheral device, which implements a subset of Linux SCSI SG passthrough device API."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5475
+#, no-wrap
+msgid "700038"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5476
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/169151[169151]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5477
+#, no-wrap
+msgid "April 30, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5479
+#, no-wrap
+msgid "7.0-CURRENT after changing man:getenv[3], man:putenv[3], man:setenv[3] and man:unsetenv[3] to be POSIX conformant."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5480
+#, no-wrap
+msgid "700039"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5481
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/169190[169190]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5482
+#, no-wrap
+msgid "May 1, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5484
+#, no-wrap
+msgid "7.0-CURRENT after the changes in 700038 were backed out."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5485
+#, no-wrap
+msgid "700040"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5486
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/169453[169453]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5487
+#, no-wrap
+msgid "May 10, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5489
+#, no-wrap
+msgid "7.0-CURRENT after the addition of man:flopen[3] to libutil."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5490
+#, no-wrap
+msgid "700041"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5491
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/169526[169526]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5492
+#, no-wrap
+msgid "May 13, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5494
+#, no-wrap
+msgid "7.0-CURRENT after enabling symbol versioning, and changing the default thread library to libthr."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5495
+#, no-wrap
+msgid "700042"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5496
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/169758[169758]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5497
+#, no-wrap
+msgid "May 19, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5499
+#, no-wrap
+msgid "7.0-CURRENT after the import of gcc 4.2.0."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5500
+#, no-wrap
+msgid "700043"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5501
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/169830[169830]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5502
+#, no-wrap
+msgid "May 21, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5504
+#, no-wrap
+msgid "7.0-CURRENT after bump of all shared library versions that had not been changed since RELENG_6."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5505
+#, no-wrap
+msgid "700044"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5506
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/170395[170395]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5507
+#, no-wrap
+msgid "June 7, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5509
+#, no-wrap
+msgid "7.0-CURRENT after changing the argument for `vn_open()`/`VOP_OPEN()` from file descriptor index to the struct file *."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5510
+#, no-wrap
+msgid "700045"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5511
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/170510[170510]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5512
+#, no-wrap
+msgid "June 10, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5514
+#, no-wrap
+msgid "7.0-CURRENT after changing man:pam_nologin[8] to provide an account management function instead of an authentication function to the PAM framework."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5515
+#, no-wrap
+msgid "700046"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5516
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/170530[170530]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5517
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5522
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6055
+#, no-wrap
+msgid "June 11, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5519
+#, no-wrap
+msgid "7.0-CURRENT after updated 802.11 wireless support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5520
+#, no-wrap
+msgid "700047"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5521
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/170579[170579]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5524
+#, no-wrap
+msgid "7.0-CURRENT after adding TCP LRO interface capabilities."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5525
+#, no-wrap
+msgid "700048"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5526
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/170613[170613]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5527
+#, no-wrap
+msgid "June 12, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5529
+#, no-wrap
+msgid "7.0-CURRENT after RFC 3678 API support added to the IPv4 stack. Legacy RFC 1724 behavior of the IP_MULTICAST_IF ioctl has now been removed; 0.0.0.0/8 may no longer be used to specify an interface index. Use struct `ipmreqn` instead."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5530
+#, no-wrap
+msgid "700049"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5531
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/171175[171175]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5532
+#, no-wrap
+msgid "July 3, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5534
+#, no-wrap
+msgid "7.0-CURRENT after importing pf from OpenBSD 4.1"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5536
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/171167[171167]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5539
+#, no-wrap
+msgid "7.0-CURRENT after adding IPv6 support for FAST_IPSEC, deleting KAME IPSEC, and renaming FAST_IPSEC to IPSEC."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5540
+#, no-wrap
+msgid "700050"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5541
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/171195[171195]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5542
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5547
+#, no-wrap
+msgid "July 4, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5544
+#, no-wrap
+msgid "7.0-CURRENT after converting setenv/putenv/etc. calls from traditional BSD to POSIX."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5545
+#, no-wrap
+msgid "700051"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5546
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/171211[171211]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5549
+#, no-wrap
+msgid "7.0-CURRENT after adding new mmap/lseek/etc syscalls."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5550
+#, no-wrap
+msgid "700052"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5551
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/171275[171275]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5552
+#, no-wrap
+msgid "July 6, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5554
+#, no-wrap
+msgid "7.0-CURRENT after moving I4B headers to include/i4b."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5555
+#, no-wrap
+msgid "700053"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5556
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/172394[172394]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5557
+#, no-wrap
+msgid "September 30, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5559
+#, no-wrap
+msgid "7.0-CURRENT after the addition of support for PCI domains"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5560
+#, no-wrap
+msgid "700054"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5561
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/172988[172988]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5562
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6065
+#, no-wrap
+msgid "October 25, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5564
+#, no-wrap
+msgid "7.0-STABLE after MFC of wide and single byte ctype separation."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5565
+#, no-wrap
+msgid "700055"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5566
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/173104[173104]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5567
+#, no-wrap
+msgid "October 28, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5569
+#, no-wrap
+msgid "7.0-RELEASE, and 7.0-CURRENT after ABI backwards compatibility to the FreeBSD 4/5/6 versions of the PCIOCGETCONF, PCIOCREAD and PCIOCWRITE IOCTLs was MFCed, which required the ABI of the PCIOCGETCONF IOCTL to be broken again"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5570
+#, no-wrap
+msgid "700100"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5571
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/174864[174864]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5572
+#, no-wrap
+msgid "December 22, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5574
+#, no-wrap
+msgid "7.0-STABLE after 7.0-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5575
+#, no-wrap
+msgid "700101"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5576
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/176111[176111]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5579
+#, no-wrap
+msgid "7.0-STABLE after the MFC of `m_collapse()`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5580
+#, no-wrap
+msgid "700102"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5581
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/177735[177735]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5582
+#, no-wrap
+msgid "March 30, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5584
+#, no-wrap
+msgid "7.0-STABLE after the MFC of `kdb_enter_why()`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5585
+#, no-wrap
+msgid "700103"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5586
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/178061[178061]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5589
+#, no-wrap
+msgid "7.0-STABLE after adding `l_sysid` to struct flock."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5590
+#, no-wrap
+msgid "700104"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5591
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/178108[178108]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5592
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5597
+#, no-wrap
+msgid "April 11, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5594
+#, no-wrap
+msgid "7.0-STABLE after the MFC of man:procstat[1]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5595
+#, no-wrap
+msgid "700105"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5596
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/178120[178120]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5599
+#, no-wrap
+msgid "7.0-STABLE after the MFC of `umtx` features."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5600
+#, no-wrap
+msgid "700106"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5601
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/178225[178225]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5602
+#, no-wrap
+msgid "April 15, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5604
+#, no-wrap
+msgid "7.0-STABLE after the MFC of man:write[2] support to man:psm[4]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5605
+#, no-wrap
+msgid "700107"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5606
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/178353[178353]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5609
+#, no-wrap
+msgid "7.0-STABLE after the MFC of F_DUP2FD command to man:fcntl[2]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5610
+#, no-wrap
+msgid "700108"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5611
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/178783[178783]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5612
+#, no-wrap
+msgid "May 5, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5614
+#, no-wrap
+msgid "7.0-STABLE after some man:lockmgr[9] changes, which makes it necessary to include [.filename]#sys/lock.h# to use man:lockmgr[9]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5615
+#, no-wrap
+msgid "700109"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5616
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6099
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/179367[179367]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5617
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6100
+#, no-wrap
+msgid "May 27, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5619
+#, no-wrap
+msgid "7.0-STABLE after MFC of the man:memrchr[3] function."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5620
+#, no-wrap
+msgid "700110"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5621
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/181328[181328]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5622
+#, no-wrap
+msgid "August 5, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5624
+#, no-wrap
+msgid "7.0-STABLE after MFC of kernel NFS `lockd` client."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5625
+#, no-wrap
+msgid "700111"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5626
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/181940[181940]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5629
+#, no-wrap
+msgid "7.0-STABLE after addition of physically contiguous jumbo frame support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5630
+#, no-wrap
+msgid "700112"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5631
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/182294[182294]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5632
+#, no-wrap
+msgid "August 27, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5634
+#, no-wrap
+msgid "7.0-STABLE after MFC of kernel DTrace support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5635
+#, no-wrap
+msgid "701000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5636
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/185315[185315]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5637
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5642
+#, no-wrap
+msgid "November 25, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5639
+#, no-wrap
+msgid "7.1-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5640
+#, no-wrap
+msgid "701100"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5641
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/185302[185302]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5644
+#, no-wrap
+msgid "7.1-STABLE after 7.1-RELEASE."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5645
+#, no-wrap
+msgid "701101"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5646
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/187023[187023]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5647
+#, no-wrap
+msgid "January 10, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5649
+#, no-wrap
+msgid "7.1-STABLE after man:strndup[3] merge."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5650
+#, no-wrap
+msgid "701102"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5651
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/187370[187370]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5652
+#, no-wrap
+msgid "January 17, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5654
+#, no-wrap
+msgid "7.1-STABLE after man:cpuctl[4] support added."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5655
+#, no-wrap
+msgid "701103"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5656
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/188281[188281]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5657
+#, no-wrap
+msgid "February 7, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5659
+#, no-wrap
+msgid "7.1-STABLE after the merge of multi-/no-IPv4/v6 jails."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5660
+#, no-wrap
+msgid "701104"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5661
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/188625[188625]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5662
+#, no-wrap
+msgid "February 14, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5664
+#, no-wrap
+msgid "7.1-STABLE after the store of the suspension owner in the struct mount, and introduction of vfs_susp_clean method into the struct vfsops."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5665
+#, no-wrap
+msgid "701105"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5666
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/189740[189740]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5667
+#, no-wrap
+msgid "March 12, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5669
+#, no-wrap
+msgid "7.1-STABLE after the incompatible change to the kern.ipc.shmsegs sysctl to allow allocating larger SysV shared memory segments on 64bit architectures."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5670
+#, no-wrap
+msgid "701106"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5671
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/189786[189786]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5674
+#, no-wrap
+msgid "7.1-STABLE after the merge of a fix for POSIX semaphore wait operations."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5675
+#, no-wrap
+msgid "702000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5676
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/191099[191099]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5679
+#, no-wrap
+msgid "7.2-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5680
+#, no-wrap
+msgid "702100"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5681
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/191091[191091]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5684
+#, no-wrap
+msgid "7.2-STABLE after 7.2-RELEASE."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5685
+#, no-wrap
+msgid "702101"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5686
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/192149[192149]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5687
+#, no-wrap
+msgid "May 15, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5689
+#, no-wrap
+msgid "7.2-STABLE after man:ichsmb[4] was changed to use left-adjusted secondary addressing to match other SMBus controller drivers."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5690
+#, no-wrap
+msgid "702102"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5691
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/193020[193020]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5692
+#, no-wrap
+msgid "May 28, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5694
+#, no-wrap
+msgid "7.2-STABLE after MFC of the man:fdopendir[3] function."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5695
+#, no-wrap
+msgid "702103"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5696
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/193638[193638]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5697
+#, no-wrap
+msgid "June 6, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5699
+#, no-wrap
+msgid "7.2-STABLE after MFC of PmcTools."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5700
+#, no-wrap
+msgid "702104"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5701
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/195694[195694]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5704
+#, no-wrap
+msgid "7.2-STABLE after MFC of the man:closefrom[2] system call."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5705
+#, no-wrap
+msgid "702105"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5706
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/196006[196006]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5707
+#, no-wrap
+msgid "July 31, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5709
+#, no-wrap
+msgid "7.2-STABLE after MFC of the SYSVIPC ABI change."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5710
+#, no-wrap
+msgid "702106"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5711
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/197198[197198]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5712
+#, no-wrap
+msgid "September 14, 2009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5714
+#, no-wrap
+msgid "7.2-STABLE after MFC of the x86 PAT enhancements and addition of `d_mmap_single()` and the scatter/gather list VM object type."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5715
+#, no-wrap
+msgid "703000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5716
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/203740[203740]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5717
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5722
+#, no-wrap
+msgid "February 9, 2010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5719
+#, no-wrap
+msgid "7.3-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5720
+#, no-wrap
+msgid "703100"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5721
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/203742[203742]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5724
+#, no-wrap
+msgid "7.3-STABLE after 7.3-RELEASE."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5725
+#, no-wrap
+msgid "704000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5726
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/216647[216647]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5729
+#, no-wrap
+msgid "7.4-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5730
+#, no-wrap
+msgid "704100"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5731
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/216658[216658]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5734
+#, no-wrap
+msgid "7.4-STABLE after 7.4-RELEASE."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5735
+#, no-wrap
+msgid "704101"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5736
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/221318[221318]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5737
+#, no-wrap
+msgid "May 2, 2011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5738
+#, no-wrap
+msgid "7.4-STABLE after the gcc MFC in rev link:https://svnweb.freebsd.org/changeset/base/221317[221317]."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5741
+#, no-wrap
+msgid "FreeBSD 6 Versions"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5744
+#, no-wrap
+msgid "FreeBSD 6 `__FreeBSD_version` Values"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5753
+#, no-wrap
+msgid "600000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5754
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/133921[133921]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5755
+#, no-wrap
+msgid "August 18, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5757
+#, no-wrap
+msgid "6.0-CURRENT"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5758
+#, no-wrap
+msgid "600001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5759
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/134396[134396]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5760
+#, no-wrap
+msgid "August 27, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5762
+#, no-wrap
+msgid "6.0-CURRENT after permanently enabling PFIL_HOOKS in the kernel."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5763
+#, no-wrap
+msgid "600002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5764
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/134514[134514]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5765
+#, no-wrap
+msgid "August 30, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5767
+#, no-wrap
+msgid "6.0-CURRENT after initial addition of `ifi_epoch` to struct `if_data`. Backed out after a few days. Do not use this value."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5768
+#, no-wrap
+msgid "600003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5769
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/134933[134933]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5770
+#, no-wrap
+msgid "September 8, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5772
+#, no-wrap
+msgid "6.0-CURRENT after the re-addition of the `ifi_epoch` member of struct `if_data`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5773
+#, no-wrap
+msgid "600004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5774
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/135920[135920]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5775
+#, no-wrap
+msgid "September 29, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5777
+#, no-wrap
+msgid "6.0-CURRENT after addition of the struct inpcb argument to the pfil API."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5778
+#, no-wrap
+msgid "600005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5779
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/136172[136172]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5780
+#, no-wrap
+msgid "October 5, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5782
+#, no-wrap
+msgid "6.0-CURRENT after addition of the \"-d DESTDIR\" argument to newsyslog."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5783
+#, no-wrap
+msgid "600006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5784
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/137192[137192]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5785
+#, no-wrap
+msgid "November 4, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5787
+#, no-wrap
+msgid "6.0-CURRENT after addition of glibc style man:strftime[3] padding options."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5788
+#, no-wrap
+msgid "600007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5789
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/138760[138760]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5790
+#, no-wrap
+msgid "December 12, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5792
+#, no-wrap
+msgid "6.0-CURRENT after addition of 802.11 framework updates."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5793
+#, no-wrap
+msgid "600008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5794
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/140809[140809]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5795
+#, no-wrap
+msgid "January 25, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5797
+#, no-wrap
+msgid "6.0-CURRENT after changes to `VOP_*VOBJECT()` functions and introduction of `MNTK_MPSAFE` flag for Giant-free filesystems."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5798
+#, no-wrap
+msgid "600009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5799
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/141250[141250]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5800
+#, no-wrap
+msgid "February 4, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5802
+#, no-wrap
+msgid "6.0-CURRENT after addition of the cpufreq framework and drivers."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5803
+#, no-wrap
+msgid "600010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5804
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/141394[141394]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5805
+#, no-wrap
+msgid "February 6, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5807
+#, no-wrap
+msgid "6.0-CURRENT after importing OpenBSD's man:nc[1]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5808
+#, no-wrap
+msgid "600011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5809
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/141727[141727]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5810
+#, no-wrap
+msgid "February 12, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5812
+#, no-wrap
+msgid "6.0-CURRENT after removing semblance of SVID2 `matherr()` support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5813
+#, no-wrap
+msgid "600012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5814
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/141940[141940]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5815
+#, no-wrap
+msgid "February 15, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5817
+#, no-wrap
+msgid "6.0-CURRENT after increase of default thread stacks' size."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5818
+#, no-wrap
+msgid "600013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5819
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/142089[142089]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5820
+#, no-wrap
+msgid "February 19, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5822
+#, no-wrap
+msgid "6.0-CURRENT after fixes in [.filename]#<src/include/stdbool.h># and [.filename]#<src/sys/i386/include/_types.h># for using the GCC-compatibility of the Intel C/C++ compiler."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5823
+#, no-wrap
+msgid "600014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5824
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/142184[142184]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5825
+#, no-wrap
+msgid "February 21, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5827
+#, no-wrap
+msgid "6.0-CURRENT after EOVERFLOW checks in man:vswprintf[3] fixed."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5828
+#, no-wrap
+msgid "600015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5829
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/142501[142501]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5830
+#, no-wrap
+msgid "February 25, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5832
+#, no-wrap
+msgid "6.0-CURRENT after changing the struct `if_data` member, `ifi_epoch`, from wall clock time to uptime."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5833
+#, no-wrap
+msgid "600016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5834
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/142582[142582]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5835
+#, no-wrap
+msgid "February 26, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5837
+#, no-wrap
+msgid "6.0-CURRENT after LC_CTYPE disk format changed."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5838
+#, no-wrap
+msgid "600017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5839
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/142683[142683]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5840
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5845
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6688
+#, no-wrap
+msgid "February 27, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5842
+#, no-wrap
+msgid "6.0-CURRENT after NLS catalogs disk format changed."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5843
+#, no-wrap
+msgid "600018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5844
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/142686[142686]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5847
+#, no-wrap
+msgid "6.0-CURRENT after LC_COLLATE disk format changed."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5848
+#, no-wrap
+msgid "600019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5849
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/142752[142752]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5850
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6693
+#, no-wrap
+msgid "February 28, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5852
+#, no-wrap
+msgid "Installation of `acpica` includes into /usr/include."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5853
+#, no-wrap
+msgid "600020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5854
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/143308[143308]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5855
+#, no-wrap
+msgid "March 9, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5857
+#, no-wrap
+msgid "Addition of MSG_NOSIGNAL flag to man:send[2] API."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5858
+#, no-wrap
+msgid "600021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5859
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/143746[143746]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5860
+#, no-wrap
+msgid "March 17, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5862
+#, no-wrap
+msgid "Addition of fields to cdevsw"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5863
+#, no-wrap
+msgid "600022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5864
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/143901[143901]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5865
+#, no-wrap
+msgid "March 21, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5867
+#, no-wrap
+msgid "Removed gtar from base system."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5868
+#, no-wrap
+msgid "600023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5869
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/144980[144980]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5870
+#, no-wrap
+msgid "April 13, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5872
+#, no-wrap
+msgid "LOCAL_CREDS, LOCAL_CONNWAIT socket options added to man:unix[4]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5873
+#, no-wrap
+msgid "600024"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5874
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5879
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/145565[145565]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5875
+#, no-wrap
+msgid "April 19, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5877
+#, no-wrap
+msgid "man:hwpmc[4] and related tools added to 6.0-CURRENT."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5878
+#, no-wrap
+msgid "600025"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5880
+#, no-wrap
+msgid "April 26, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5882
+#, no-wrap
+msgid "struct `icmphdr` added to 6.0-CURRENT."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5883
+#, no-wrap
+msgid "600026"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5884
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/145843[145843]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5885
+#, no-wrap
+msgid "May 3, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5887
+#, no-wrap
+msgid "pf updated to 3.7."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5888
+#, no-wrap
+msgid "600027"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5889
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/145966[145966]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5890
+#, no-wrap
+msgid "May 6, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5892
+#, no-wrap
+msgid "Kernel libalias and `ng_nat` introduced."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5893
+#, no-wrap
+msgid "600028"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5894
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/146191[146191]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5895
+#, no-wrap
+msgid "May 13, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5897
+#, no-wrap
+msgid "POSIX man:ttyname_r[3] made available through unistd.h and libc."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5898
+#, no-wrap
+msgid "600029"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5899
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/146780[146780]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5900
+#, no-wrap
+msgid "May 29, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5902
+#, no-wrap
+msgid "6.0-CURRENT after libpcap updated to v0.9.1 alpha 096."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5903
+#, no-wrap
+msgid "600030"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5904
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/146988[146988]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5905
+#, no-wrap
+msgid "June 5, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5907
+#, no-wrap
+msgid "6.0-CURRENT after importing NetBSD's man:if_bridge[4]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5908
+#, no-wrap
+msgid "600031"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5909
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/147256[147256]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5910
+#, no-wrap
+msgid "June 10, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5912
+#, no-wrap
+msgid "6.0-CURRENT after struct ifnet was broken out of the driver `softcs`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5913
+#, no-wrap
+msgid "600032"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5914
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/147898[147898]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5917
+#, no-wrap
+msgid "6.0-CURRENT after the import of libpcap v0.9.1."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5918
+#, no-wrap
+msgid "600033"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5919
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/148388[148388]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5920
+#, no-wrap
+msgid "July 25, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5922
+#, no-wrap
+msgid "6.0-STABLE after bump of all shared library versions that had not been changed since RELENG_5."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5923
+#, no-wrap
+msgid "600034"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5924
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/149040[149040]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5927
+#, no-wrap
+msgid "6.0-STABLE after credential argument is added to `dev_clone` event handler. 6.0-RELEASE."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5928
+#, no-wrap
+msgid "600100"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5929
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/151958[151958]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5930
+#, no-wrap
+msgid "November 1, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5932
+#, no-wrap
+msgid "6.0-STABLE after 6.0-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5933
+#, no-wrap
+msgid "600101"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5934
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/153601[153601]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5935
+#, no-wrap
+msgid "December 21, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5937
+#, no-wrap
+msgid "6.0-STABLE after incorporating scripts from the `local_startup` directories into the base man:rcorder[8]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5938
+#, no-wrap
+msgid "600102"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5939
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/153912[153912]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5940
+#, no-wrap
+msgid "December 30, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5942
+#, no-wrap
+msgid "6.0-STABLE after updating the ELF types and constants."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5943
+#, no-wrap
+msgid "600103"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5944
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/154396[154396]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5945
+#, no-wrap
+msgid "January 15, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5947
+#, no-wrap
+msgid "6.0-STABLE after MFC of man:pidfile[3] API."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5948
+#, no-wrap
+msgid "600104"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5949
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/154453[154453]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5950
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6733
+#, no-wrap
+msgid "January 17, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5952
+#, no-wrap
+msgid "6.0-STABLE after MFC of ldconfig_local_dirs change."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5953
+#, no-wrap
+msgid "600105"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5954
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/156019[156019]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5955
+#, no-wrap
+msgid "February 26, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5957
+#, no-wrap
+msgid "6.0-STABLE after NLS catalog support of man:csh[1]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5958
+#, no-wrap
+msgid "601000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5959
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/158330[158330]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5960
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5965
+#, no-wrap
+msgid "May 6, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5962
+#, no-wrap
+msgid "6.1-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5963
+#, no-wrap
+msgid "601100"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5964
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/158331[158331]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5967
+#, no-wrap
+msgid "6.1-STABLE after 6.1-RELEASE."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5968
+#, no-wrap
+msgid "601101"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5969
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/159861[159861]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5970
+#, no-wrap
+msgid "June 22, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5972
+#, no-wrap
+msgid "6.1-STABLE after the import of `csup`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5973
+#, no-wrap
+msgid "601102"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5974
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/160253[160253]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5975
+#, no-wrap
+msgid "July 11, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5977
+#, no-wrap
+msgid "6.1-STABLE after the man:iwi[4] update."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5978
+#, no-wrap
+msgid "601103"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5979
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/160429[160429]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5980
+#, no-wrap
+msgid "July 17, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5982
+#, no-wrap
+msgid "6.1-STABLE after the resolver update to BIND9, and exposure of reentrant version of `netdb` functions."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5983
+#, no-wrap
+msgid "601104"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5984
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/161098[161098]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5985
+#, no-wrap
+msgid "August 8, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5987
+#, no-wrap
+msgid "6.1-STABLE after DSO (dynamic shared objects) support has been enabled in OpenSSL."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5988
+#, no-wrap
+msgid "601105"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5989
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/161900[161900]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5990
+#, no-wrap
+msgid "September 2, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5992
+#, no-wrap
+msgid "6.1-STABLE after 802.11 fix-ups changed the API for the IEEE80211_IOC_STA_INFO ioctl."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5993
+#, no-wrap
+msgid "602000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5994
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/164312[164312]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5995
+#, no-wrap
+msgid "November 15, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5997
+#, no-wrap
+msgid "6.2-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5998
+#, no-wrap
+msgid "602100"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:5999
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/162329[162329]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6000
+#, no-wrap
+msgid "September 15, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6002
+#, no-wrap
+msgid "6.2-STABLE after 6.2-RELEASE."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6003
+#, no-wrap
+msgid "602101"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6004
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/165122[165122]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6005
+#, no-wrap
+msgid "December 12, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6007
+#, no-wrap
+msgid "6.2-STABLE after the addition of Wi-Spy quirk."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6008
+#, no-wrap
+msgid "602102"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6009
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/165596[165596]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6010
+#, no-wrap
+msgid "December 28, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6012
+#, no-wrap
+msgid "6.2-STABLE after `pci_find_extcap()` addition."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6013
+#, no-wrap
+msgid "602103"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6014
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/166039[166039]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6015
+#, no-wrap
+msgid "January 16, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6017
+#, no-wrap
+msgid "6.2-STABLE after MFC of `dlsym` change to look for a requested symbol both in specified DSO and its implicit dependencies."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6018
+#, no-wrap
+msgid "602104"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6019
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/166314[166314]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6020
+#, no-wrap
+msgid "January 28, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6022
+#, no-wrap
+msgid "6.2-STABLE after MFC of man:ng_deflate[4] and man:ng_pred1[4] netgraph nodes and new compression and encryption modes for man:ng_ppp[4] node."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6023
+#, no-wrap
+msgid "602105"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6024
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/166840[166840]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6025
+#, no-wrap
+msgid "February 20, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6027
+#, no-wrap
+msgid "6.2-STABLE after MFC of BSD licensed version of man:gzip[1] ported from NetBSD."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6028
+#, no-wrap
+msgid "602106"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6029
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/168133[168133]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6030
+#, no-wrap
+msgid "March 31, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6032
+#, no-wrap
+msgid "6.2-STABLE after MFC of PCI MSI and MSI-X support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6033
+#, no-wrap
+msgid "602107"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6034
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/168438[168438]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6037
+#, no-wrap
+msgid "6.2-STABLE after MFC of ncurses 5.6 and wide character support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6038
+#, no-wrap
+msgid "602108"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6039
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/168611[168611]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6040
+#, no-wrap
+msgid "April 11, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6042
+#, no-wrap
+msgid "6.2-STABLE after MFC of CAM 'SG' peripheral device, which implements a subset of Linux SCSI SG passthrough device API."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6043
+#, no-wrap
+msgid "602109"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6044
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/168805[168805]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6045
+#, no-wrap
+msgid "April 17, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6047
+#, no-wrap
+msgid "6.2-STABLE after MFC of readline 5.2 patch-set 002."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6048
+#, no-wrap
+msgid "602110"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6049
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/169222[169222]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6050
+#, no-wrap
+msgid "May 2, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6052
+#, no-wrap
+msgid "6.2-STABLE after MFC of `pmap_invalidate_cache()`, `pmap_change_attr()`, `pmap_mapbios()`, `pmap_mapdev_attr()`, and `pmap_unmapbios()` for amd64 and i386."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6053
+#, no-wrap
+msgid "602111"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6054
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/170556[170556]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6057
+#, no-wrap
+msgid "6.2-STABLE after MFC of BOP_BDFLUSH and caused breakage of the filesystem modules KBI."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6058
+#, no-wrap
+msgid "602112"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6059
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/172284[172284]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6060
+#, no-wrap
+msgid "September 21, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6062
+#, no-wrap
+msgid "6.2-STABLE after man:libutil[3] MFC's."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6063
+#, no-wrap
+msgid "602113"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6064
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/172986[172986]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6067
+#, no-wrap
+msgid "6.2-STABLE after MFC of wide and single byte ctype separation. Newly compiled binary that references to ctype.h may require a new symbol, `__mb_sb_limit`, which is not available on older systems."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6068
+#, no-wrap
+msgid "602114"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6069
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/173170[173170]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6070
+#, no-wrap
+msgid "October 30, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6072
+#, no-wrap
+msgid "6.2-STABLE after ctype ABI forward compatibility restored."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6073
+#, no-wrap
+msgid "602115"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6074
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/173794[173794]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6075
+#, no-wrap
+msgid "November 21, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6077
+#, no-wrap
+msgid "6.2-STABLE after back out of wide and single byte ctype separation."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6078
+#, no-wrap
+msgid "603000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6079
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/173897[173897]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6080
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6085
+#, no-wrap
+msgid "November 25, 2007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6082
+#, no-wrap
+msgid "6.3-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6083
+#, no-wrap
+msgid "603100"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6084
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/173891[173891]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6087
+#, no-wrap
+msgid "6.3-STABLE after 6.3-RELEASE."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6089
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/174434[174434]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6092
+#, no-wrap
+msgid "6.3-STABLE after fixing multibyte type support in bit macro."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6093
+#, no-wrap
+msgid "603102"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6094
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/178459[178459]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6095
+#, no-wrap
+msgid "April 24, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6097
+#, no-wrap
+msgid "6.3-STABLE after adding `l_sysid` to struct flock."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6098
+#, no-wrap
+msgid "603103"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6102
+#, no-wrap
+msgid "6.3-STABLE after MFC of the man:memrchr[3] function."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6103
+#, no-wrap
+msgid "603104"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6104
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/179810[179810]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6105
+#, no-wrap
+msgid "June 15, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6107
+#, no-wrap
+msgid "6.3-STABLE after MFC of support for `:u` variable modifier in man:make[1]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6108
+#, no-wrap
+msgid "604000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6109
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/183583[183583]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6110
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6115
+#, no-wrap
+msgid "October 4, 2008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6112
+#, no-wrap
+msgid "6.4-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6113
+#, no-wrap
+msgid "604100"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6114
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/183584[183584]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6116
+#, no-wrap
+msgid "6.4-STABLE after 6.4-RELEASE."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6119
+#, no-wrap
+msgid "FreeBSD 5 Versions"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6122
+#, no-wrap
+msgid "FreeBSD 5 `__FreeBSD_version` Values"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6131
+#, no-wrap
+msgid "500000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6132
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/58009[58009]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6133
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6846
+#, no-wrap
+msgid "March 13, 2000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6135
+#, no-wrap
+msgid "5.0-CURRENT"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6136
+#, no-wrap
+msgid "500001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6137
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/59348[59348]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6138
+#, no-wrap
+msgid "April 18, 2000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6140
+#, no-wrap
+msgid "5.0-CURRENT after adding addition ELF header fields, and changing ELF binary branding method."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6141
+#, no-wrap
+msgid "500002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6142
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/59906[59906]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6143
+#, no-wrap
+msgid "May 2, 2000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6145
+#, no-wrap
+msgid "5.0-CURRENT after kld metadata changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6146
+#, no-wrap
+msgid "500003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6147
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/60688[60688]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6148
+#, no-wrap
+msgid "May 18, 2000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6150
+#, no-wrap
+msgid "5.0-CURRENT after buf/bio changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6151
+#, no-wrap
+msgid "500004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6152
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/60936[60936]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6153
+#, no-wrap
+msgid "May 26, 2000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6155
+#, no-wrap
+msgid "5.0-CURRENT after binutils upgrade."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6156
+#, no-wrap
+msgid "500005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6157
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/61221[61221]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6158
+#, no-wrap
+msgid "June 3, 2000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6160
+#, no-wrap
+msgid "5.0-CURRENT after merging libxpg4 code into libc and after TASKQ interface introduction."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6161
+#, no-wrap
+msgid "500006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6162
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/61500[61500]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6163
+#, no-wrap
+msgid "June 10, 2000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6165
+#, no-wrap
+msgid "5.0-CURRENT after the addition of AGP interfaces."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6166
+#, no-wrap
+msgid "500007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6167
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/62235[62235]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6168
+#, no-wrap
+msgid "June 29, 2000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6170
+#, no-wrap
+msgid "5.0-CURRENT after Perl upgrade to 5.6.0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6171
+#, no-wrap
+msgid "500008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6172
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/62764[62764]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6173
+#, no-wrap
+msgid "July 7, 2000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6175
+#, no-wrap
+msgid "5.0-CURRENT after the update of KAME code to 2000/07 sources."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6176
+#, no-wrap
+msgid "500009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6177
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/63154[63154]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6178
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6871
+#, no-wrap
+msgid "July 14, 2000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6180
+#, no-wrap
+msgid "5.0-CURRENT after `ether_ifattach()` and `ether_ifdetach()` changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6181
+#, no-wrap
+msgid "500010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6182
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/63265[63265]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6183
+#, no-wrap
+msgid "July 16, 2000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6185
+#, no-wrap
+msgid "5.0-CURRENT after changing mtree defaults back to original variant, adding -L to follow symlinks."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6186
+#, no-wrap
+msgid "500011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6187
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/63459[63459]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6188
+#, no-wrap
+msgid "July 18, 2000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6190
+#, no-wrap
+msgid "5.0-CURRENT after kqueue API changed."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6191
+#, no-wrap
+msgid "500012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6192
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/65353[65353]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6193
+#, no-wrap
+msgid "September 2, 2000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6195
+#, no-wrap
+msgid "5.0-CURRENT after man:setproctitle[3] moved from libutil to libc."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6196
+#, no-wrap
+msgid "500013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6197
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/65671[65671]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6198
+#, no-wrap
+msgid "September 10, 2000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6200
+#, no-wrap
+msgid "5.0-CURRENT after the first SMPng commit."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6201
+#, no-wrap
+msgid "500014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6202
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/70650[70650]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6203
+#, no-wrap
+msgid "January 4, 2001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6205
+#, no-wrap
+msgid "5.0-CURRENT after <sys/select.h> moved to <sys/selinfo.h>."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6206
+#, no-wrap
+msgid "500015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6207
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/70894[70894]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6208
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6901
+#, no-wrap
+msgid "January 10, 2001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6210
+#, no-wrap
+msgid "5.0-CURRENT after combining libgcc.a and libgcc_r.a, and associated GCC linkage changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6211
+#, no-wrap
+msgid "500016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6212
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/71583[71583]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6213
+#, no-wrap
+msgid "January 24, 2001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6215
+#, no-wrap
+msgid "5.0-CURRENT after change allowing libc and libc_r to be linked together, deprecating -pthread option."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6216
+#, no-wrap
+msgid "500017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6217
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/72650[72650]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6218
+#, no-wrap
+msgid "February 18, 2001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6220
+#, no-wrap
+msgid "5.0-CURRENT after switch from struct `ucred` to struct `xucred` to stabilize kernel-exported API for mountd et al."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6221
+#, no-wrap
+msgid "500018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6222
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/72975[72975]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6223
+#, no-wrap
+msgid "February 24, 2001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6225
+#, no-wrap
+msgid "5.0-CURRENT after addition of CPUTYPE make variable for controlling CPU-specific optimizations."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6226
+#, no-wrap
+msgid "500019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6227
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/77937[77937]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6228
+#, no-wrap
+msgid "June 9, 2001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6230
+#, no-wrap
+msgid "5.0-CURRENT after moving machine/ioctl_fd.h to sys/fdcio.h"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6231
+#, no-wrap
+msgid "500020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6232
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/78304[78304]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6233
+#, no-wrap
+msgid "June 15, 2001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6235
+#, no-wrap
+msgid "5.0-CURRENT after locale names renaming."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6236
+#, no-wrap
+msgid "500021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6237
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/78632[78632]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6238
+#, no-wrap
+msgid "June 22, 2001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6240
+#, no-wrap
+msgid "5.0-CURRENT after Bzip2 import. Also signifies removal of S/Key."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6241
+#, no-wrap
+msgid "500022"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6242
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6247
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/83435[83435]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6243
+#, no-wrap
+msgid "July 12, 2001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6245
+#, no-wrap
+msgid "5.0-CURRENT after SSE support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6246
+#, no-wrap
+msgid "500023"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6248
+#, no-wrap
+msgid "September 14, 2001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6250
+#, no-wrap
+msgid "5.0-CURRENT after KSE Milestone 2."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6251
+#, no-wrap
+msgid "500024"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6252
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/84324[84324]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6253
+#, no-wrap
+msgid "October 1, 2001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6255
+#, no-wrap
+msgid "5.0-CURRENT after `d_thread_t`, and moving UUCP to ports."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6256
+#, no-wrap
+msgid "500025"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6257
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/84481[84481]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6258
+#, no-wrap
+msgid "October 4, 2001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6260
+#, no-wrap
+msgid "5.0-CURRENT after ABI change for descriptor and `creds` passing on 64 bit platforms."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6261
+#, no-wrap
+msgid "500026"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6262
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/84710[84710]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6263
+#, no-wrap
+msgid "October 9, 2001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6265
+#, no-wrap
+msgid "5.0-CURRENT after moving to XFree86 4 by default for package builds, and after the new libc `strnstr()` function was added."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6266
+#, no-wrap
+msgid "500027"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6267
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/84743[84743]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6268
+#, no-wrap
+msgid "October 10, 2001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6270
+#, no-wrap
+msgid "5.0-CURRENT after the new libc `strcasestr()` function was added."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6271
+#, no-wrap
+msgid "500028"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6272
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/87879[87879]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6273
+#, no-wrap
+msgid "December 14, 2001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6275
+#, no-wrap
+msgid "5.0-CURRENT after the userland components of smbfs were imported."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6280
+#, no-wrap
+msgid "5.0-CURRENT after the new C99 specific-width integer types were added."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6281
+#, no-wrap
+msgid "500029"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6282
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/89938[89938]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6283
+#, no-wrap
+msgid "January 29, 2002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6285
+#, no-wrap
+msgid "5.0-CURRENT after a change was made in the return value of man:sendfile[2]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6286
+#, no-wrap
+msgid "500030"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6287
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/90711[90711]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6288
+#, no-wrap
+msgid "February 15, 2002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6290
+#, no-wrap
+msgid "5.0-CURRENT after the introduction of the type `fflags_t`, which is the appropriate size for file flags."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6291
+#, no-wrap
+msgid "500031"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6292
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6945
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/91203[91203]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6293
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6946
+#, no-wrap
+msgid "February 24, 2002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6295
+#, no-wrap
+msgid "5.0-CURRENT after the usb structure element rename."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6296
+#, no-wrap
+msgid "500032"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6297
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/92453[92453]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6298
+#, no-wrap
+msgid "March 16, 2002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6300
+#, no-wrap
+msgid "5.0-CURRENT after the introduction of Perl 5.6.1."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6301
+#, no-wrap
+msgid "500033"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6302
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/93722[93722]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6303
+#, no-wrap
+msgid "April 3, 2002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6305
+#, no-wrap
+msgid "5.0-CURRENT after the `sendmail_enable` man:rc.conf[5] variable was made to take the value `NONE`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6306
+#, no-wrap
+msgid "500034"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6307
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/95831[95831]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6308
+#, no-wrap
+msgid "April 30, 2002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6310
+#, no-wrap
+msgid "5.0-CURRENT after `mtx_init()` grew a third argument."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6311
+#, no-wrap
+msgid "500035"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6312
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/96498[96498]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6313
+#, no-wrap
+msgid "May 13, 2002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6315
+#, no-wrap
+msgid "5.0-CURRENT with Gcc 3.1."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6316
+#, no-wrap
+msgid "500036"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6317
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/96781[96781]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6318
+#, no-wrap
+msgid "May 17, 2002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6320
+#, no-wrap
+msgid "5.0-CURRENT without Perl in /usr/src"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6321
+#, no-wrap
+msgid "500037"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6322
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/97516[97516]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6323
+#, no-wrap
+msgid "May 29, 2002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6325
+#, no-wrap
+msgid "5.0-CURRENT after the addition of man:dlfunc[3]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6326
+#, no-wrap
+msgid "500038"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6327
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/100591[100591]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6328
+#, no-wrap
+msgid "July 24, 2002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6330
+#, no-wrap
+msgid "5.0-CURRENT after the types of some struct `sockbuf` members were changed and the structure was reordered."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6331
+#, no-wrap
+msgid "500039"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6332
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/102757[102757]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6333
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7001
+#, no-wrap
+msgid "September 1, 2002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6335
+#, no-wrap
+msgid "5.0-CURRENT after GCC 3.2.1 import. Also after headers stopped using _BSD_FOO_T_ and started using _FOO_T_DECLARED. This value can also be used as a conservative estimate of the start of man:bzip2[1] package support."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6336
+#, no-wrap
+msgid "500040"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6337
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/103675[103675]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6338
+#, no-wrap
+msgid "September 20, 2002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6340
+#, no-wrap
+msgid "5.0-CURRENT after various changes to disk functions were made in the name of removing dependency on disklabel structure internals."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6341
+#, no-wrap
+msgid "500041"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6342
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/104250[104250]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6343
+#, no-wrap
+msgid "October 1, 2002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6345
+#, no-wrap
+msgid "5.0-CURRENT after the addition of man:getopt_long[3] to libc."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6346
+#, no-wrap
+msgid "500042"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6347
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/105178[105178]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6348
+#, no-wrap
+msgid "October 15, 2002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6350
+#, no-wrap
+msgid "5.0-CURRENT after Binutils 2.13 upgrade, which included new FreeBSD emulation, `vec`, and output format."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6351
+#, no-wrap
+msgid "500043"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6352
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/106289[106289]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6353
+#, no-wrap
+msgid "November 1, 2002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6355
+#, no-wrap
+msgid "5.0-CURRENT after adding weak pthread_XXX stubs to libc, obsoleting libXThrStub.so. 5.0-RELEASE."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6356
+#, no-wrap
+msgid "500100"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6357
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/109405[109405]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6358
+#, no-wrap
+msgid "January 17, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6360
+#, no-wrap
+msgid "5.0-CURRENT after branching for RELENG_5_0"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6361
+#, no-wrap
+msgid "500101"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6362
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/111120[111120]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6363
+#, no-wrap
+msgid "February 19, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6365
+#, no-wrap
+msgid "<sys/dkstat.h> is empty. Do not include it."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6366
+#, no-wrap
+msgid "500102"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6367
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/111482[111482]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6368
+#, no-wrap
+msgid "February 25, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6370
+#, no-wrap
+msgid "5.0-CURRENT after the d_mmap_t interface change."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6371
+#, no-wrap
+msgid "500103"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6372
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/111540[111540]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6373
+#, no-wrap
+msgid "February 26, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6375
+#, no-wrap
+msgid "5.0-CURRENT after `taskqueue_swi` changed to run without Giant, and `taskqueue_swi_giant` added to run with Giant."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6376
+#, no-wrap
+msgid "500104"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6377
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/111600[111600]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6378
+#, no-wrap
+msgid "February 27, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6380
+#, no-wrap
+msgid "`cdevsw_add()` and `cdevsw_remove()` no longer exists. Appearance of `MAJOR_AUTO` allocation facility."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6381
+#, no-wrap
+msgid "500105"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6382
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/111864[111864]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6383
+#, no-wrap
+msgid "March 4, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6385
+#, no-wrap
+msgid "5.0-CURRENT after new cdevsw initialization method."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6386
+#, no-wrap
+msgid "500106"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6387
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/112007[112007]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6388
+#, no-wrap
+msgid "March 8, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6390
+#, no-wrap
+msgid "`devstat_add_entry()` has been replaced by `devstat_new_entry()`"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6391
+#, no-wrap
+msgid "500107"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6392
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/112288[112288]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6393
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6398
+#, no-wrap
+msgid "March 15, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6395
+#, no-wrap
+msgid "`devstat` interface change; see sys/sys/param.h 1.149"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6396
+#, no-wrap
+msgid "500108"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6397
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/112300[112300]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6400
+#, no-wrap
+msgid "Token-Ring interface changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6401
+#, no-wrap
+msgid "500109"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6402
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/112571[112571]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6403
+#, no-wrap
+msgid "March 25, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6405
+#, no-wrap
+msgid "Addition of `vm_paddr_t`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6406
+#, no-wrap
+msgid "500110"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6407
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/112741[112741]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6408
+#, no-wrap
+msgid "March 28, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6410
+#, no-wrap
+msgid "5.0-CURRENT after man:realpath[3] has been made thread-safe"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6411
+#, no-wrap
+msgid "500111"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6412
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/113273[113273]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6413
+#, no-wrap
+msgid "April 9, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6415
+#, no-wrap
+msgid "5.0-CURRENT after man:usbhid[3] has been synced with NetBSD"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6416
+#, no-wrap
+msgid "500112"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6417
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/113597[113597]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6418
+#, no-wrap
+msgid "April 17, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6420
+#, no-wrap
+msgid "5.0-CURRENT after new NSS implementation and addition of POSIX.1 getpw*_r, getgr*_r functions"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6421
+#, no-wrap
+msgid "500113"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6422
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/114492[114492]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6423
+#, no-wrap
+msgid "May 2, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6425
+#, no-wrap
+msgid "5.0-CURRENT after removal of the old rc system."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6426
+#, no-wrap
+msgid "501000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6427
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/115816[115816]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6428
+#, no-wrap
+msgid "June 4, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6430
+#, no-wrap
+msgid "5.1-RELEASE."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6431
+#, no-wrap
+msgid "501100"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6432
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/115710[115710]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6433
+#, no-wrap
+msgid "June 2, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6435
+#, no-wrap
+msgid "5.1-CURRENT after branching for RELENG_5_1."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6436
+#, no-wrap
+msgid "501101"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6437
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/117025[117025]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6438
+#, no-wrap
+msgid "June 29, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6440
+#, no-wrap
+msgid "5.1-CURRENT after correcting the semantics of man:sigtimedwait[2] and man:sigwaitinfo[2]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6441
+#, no-wrap
+msgid "501102"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6442
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/117191[117191]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6443
+#, no-wrap
+msgid "July 3, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6445
+#, no-wrap
+msgid "5.1-CURRENT after adding the `lockfunc` and `lockfuncarg` fields to man:bus_dma_tag_create[9]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6446
+#, no-wrap
+msgid "501103"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6447
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/118241[118241]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6448
+#, no-wrap
+msgid "July 31, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6450
+#, no-wrap
+msgid "5.1-CURRENT after GCC 3.3.1-pre 20030711 snapshot integration."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6451
+#, no-wrap
+msgid "501104"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6452
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/118511[118511]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6453
+#, no-wrap
+msgid "August 5, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6455
+#, no-wrap
+msgid "5.1-CURRENT 3ware API changes to twe."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6456
+#, no-wrap
+msgid "501105"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6457
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/119021[119021]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6458
+#, no-wrap
+msgid "August 17, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6460
+#, no-wrap
+msgid "5.1-CURRENT dynamically linked /bin and /sbin support and movement of libraries to /lib."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6461
+#, no-wrap
+msgid "501106"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6462
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/119881[119881]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6463
+#, no-wrap
+msgid "September 8, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6465
+#, no-wrap
+msgid "5.1-CURRENT after adding kernel support for Coda 6.x."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6466
+#, no-wrap
+msgid "501107"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6467
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/120180[120180]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6468
+#, no-wrap
+msgid "September 17, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6470
+#, no-wrap
+msgid "5.1-CURRENT after 16550 UART constants moved from [.filename]#<dev/sio/sioreg.h># to [.filename]#<dev/ic/ns16550.h>#. Also when libmap functionality was unconditionally supported by rtld."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6471
+#, no-wrap
+msgid "501108"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6472
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/120386[120386]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6473
+#, no-wrap
+msgid "September 23, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6475
+#, no-wrap
+msgid "5.1-CURRENT after PFIL_HOOKS API update"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6476
+#, no-wrap
+msgid "501109"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6477
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/120503[120503]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6478
+#, no-wrap
+msgid "September 27, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6480
+#, no-wrap
+msgid "5.1-CURRENT after adding man:kiconv[3]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6481
+#, no-wrap
+msgid "501110"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6482
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/120556[120556]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6483
+#, no-wrap
+msgid "September 28, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6485
+#, no-wrap
+msgid "5.1-CURRENT after changing default operations for open and close in cdevsw"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6486
+#, no-wrap
+msgid "501111"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6487
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/121125[121125]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6488
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6493
+#, no-wrap
+msgid "October 16, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6490
+#, no-wrap
+msgid "5.1-CURRENT after changed layout of cdevsw"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6491
+#, no-wrap
+msgid "501112"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6492
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/121129[121129]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6495
+#, no-wrap
+msgid "5.1-CURRENT after adding kobj multiple inheritance"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6496
+#, no-wrap
+msgid "501113"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6497
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/121816[121816]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6498
+#, no-wrap
+msgid "October 31, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6500
+#, no-wrap
+msgid "5.1-CURRENT after the `if_xname` change in struct ifnet"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6501
+#, no-wrap
+msgid "501114"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6502
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/122779[122779]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6503
+#, no-wrap
+msgid "November 16, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6505
+#, no-wrap
+msgid "5.1-CURRENT after changing /bin and /sbin to be dynamically linked"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6506
+#, no-wrap
+msgid "502000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6507
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/123198[123198]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6508
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6518
+#, no-wrap
+msgid "December 7, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6510
+#, no-wrap
+msgid "5.2-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6511
+#, no-wrap
+msgid "502010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6512
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/126150[126150]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6513
+#, no-wrap
+msgid "February 23, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6515
+#, no-wrap
+msgid "5.2.1-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6516
+#, no-wrap
+msgid "502100"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6517
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/123196[123196]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6520
+#, no-wrap
+msgid "5.2-CURRENT after branching for RELENG_5_2"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6521
+#, no-wrap
+msgid "502101"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6522
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/123677[123677]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6523
+#, no-wrap
+msgid "December 19, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6525
+#, no-wrap
+msgid "5.2-CURRENT after `__cxa_atexit`/`__cxa_finalize` functions were added to libc."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6526
+#, no-wrap
+msgid "502102"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6527
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/125236[125236]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6528
+#, no-wrap
+msgid "January 30, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6530
+#, no-wrap
+msgid "5.2-CURRENT after change of default thread library from libc_r to libpthread."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6531
+#, no-wrap
+msgid "502103"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6532
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/126083[126083]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6533
+#, no-wrap
+msgid "February 21, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6535
+#, no-wrap
+msgid "5.2-CURRENT after device driver API mega patch."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6536
+#, no-wrap
+msgid "502104"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6537
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/126208[126208]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6538
+#, no-wrap
+msgid "February 25, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6540
+#, no-wrap
+msgid "5.2-CURRENT after `getopt_long_only()` addition."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6541
+#, no-wrap
+msgid "502105"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6542
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/126644[126644]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6543
+#, no-wrap
+msgid "March 5, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6545
+#, no-wrap
+msgid "5.2-CURRENT after NULL is made into ((void *)0) for C, creating more warnings."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6546
+#, no-wrap
+msgid "502106"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6547
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/126757[126757]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6548
+#, no-wrap
+msgid "March 8, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6550
+#, no-wrap
+msgid "5.2-CURRENT after pf is linked to the build and install."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6551
+#, no-wrap
+msgid "502107"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6552
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/126819[126819]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6553
+#, no-wrap
+msgid "March 10, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6555
+#, no-wrap
+msgid "5.2-CURRENT after `time_t` is changed to a 64-bit value on sparc64."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6556
+#, no-wrap
+msgid "502108"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6557
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/126891[126891]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6558
+#, no-wrap
+msgid "March 12, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6560
+#, no-wrap
+msgid "5.2-CURRENT after Intel C/C++ compiler support in some headers and man:execve[2] changes to be more strictly conforming to POSIX."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6561
+#, no-wrap
+msgid "502109"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6562
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/127312[127312]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6563
+#, no-wrap
+msgid "March 22, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6565
+#, no-wrap
+msgid "5.2-CURRENT after the introduction of the `bus_alloc_resource_any` API"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6566
+#, no-wrap
+msgid "502110"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6567
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/127475[127475]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6568
+#, no-wrap
+msgid "March 27, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6570
+#, no-wrap
+msgid "5.2-CURRENT after the addition of UTF-8 locales"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6571
+#, no-wrap
+msgid "502111"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6572
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/128144[128144]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6573
+#, no-wrap
+msgid "April 11, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6575
+#, no-wrap
+msgid "5.2-CURRENT after the removal of the man:getvfsent[3] API"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6576
+#, no-wrap
+msgid "502112"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6577
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/128182[128182]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6578
+#, no-wrap
+msgid "April 13, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6580
+#, no-wrap
+msgid "5.2-CURRENT after the addition of the .warning directive for make."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6581
+#, no-wrap
+msgid "502113"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6582
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/130057[130057]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6583
+#, no-wrap
+msgid "June 4, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6585
+#, no-wrap
+msgid "5.2-CURRENT after `ttyioctl()` was made mandatory for serial drivers."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6586
+#, no-wrap
+msgid "502114"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6587
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/130418[130418]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6588
+#, no-wrap
+msgid "June 13, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6590
+#, no-wrap
+msgid "5.2-CURRENT after import of the ALTQ framework."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6591
+#, no-wrap
+msgid "502115"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6592
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/130481[130481]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6593
+#, no-wrap
+msgid "June 14, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6595
+#, no-wrap
+msgid "5.2-CURRENT after changing man:sema_timedwait[9] to return 0 on success and a non-zero error code on failure."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6596
+#, no-wrap
+msgid "502116"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6597
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/130585[130585]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6598
+#, no-wrap
+msgid "June 16, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6600
+#, no-wrap
+msgid "5.2-CURRENT after changing kernel `dev_t` to be pointer to struct cdev *."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6601
+#, no-wrap
+msgid "502117"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6602
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/130640[130640]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6603
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6608
+#, no-wrap
+msgid "June 17, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6605
+#, no-wrap
+msgid "5.2-CURRENT after changing kernel `udev_t` to `dev_t`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6606
+#, no-wrap
+msgid "502118"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6607
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/130656[130656]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6610
+#, no-wrap
+msgid "5.2-CURRENT after adding support for CLOCK_VIRTUAL and CLOCK_PROF to man:clock_gettime[2] and man:clock_getres[2]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6611
+#, no-wrap
+msgid "502119"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6612
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/130934[130934]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6613
+#, no-wrap
+msgid "June 22, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6615
+#, no-wrap
+msgid "5.2-CURRENT after changing network interface cloning overhaul."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6616
+#, no-wrap
+msgid "502120"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6617
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/131429[131429]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6618
+#, no-wrap
+msgid "July 2, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6620
+#, no-wrap
+msgid "5.2-CURRENT after the update of the package tools to revision 20040629."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6621
+#, no-wrap
+msgid "502121"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6622
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/131883[131883]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6623
+#, no-wrap
+msgid "July 9, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6625
+#, no-wrap
+msgid "5.2-CURRENT after marking Bluetooth code as non-i386 specific."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6626
+#, no-wrap
+msgid "502122"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6627
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/131971[131971]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6628
+#, no-wrap
+msgid "July 11, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6630
+#, no-wrap
+msgid "5.2-CURRENT after the introduction of the KDB debugger framework, the conversion of DDB into a backend and the introduction of the GDB backend."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6631
+#, no-wrap
+msgid "502123"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6632
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/132025[132025]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6633
+#, no-wrap
+msgid "July 12, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6635
+#, no-wrap
+msgid "5.2-CURRENT after change to make VFS_ROOT take a struct thread argument as does vflush. Struct `kinfo_proc` now has a user data pointer. The switch of the default X implementation to `xorg` was also made at this time."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6636
+#, no-wrap
+msgid "502124"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6637
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/132597[132597]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6638
+#, no-wrap
+msgid "July 24, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6640
+#, no-wrap
+msgid "5.2-CURRENT after the change to separate the way ports rc.d and legacy scripts are started."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6641
+#, no-wrap
+msgid "502125"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6642
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/132726[132726]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6643
+#, no-wrap
+msgid "July 28, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6645
+#, no-wrap
+msgid "5.2-CURRENT after the backout of the previous change."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6646
+#, no-wrap
+msgid "502126"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6647
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/132914[132914]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6648
+#, no-wrap
+msgid "July 31, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6650
+#, no-wrap
+msgid "5.2-CURRENT after the removal of `kmem_alloc_pageable()` and the import of gcc 3.4.2."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6651
+#, no-wrap
+msgid "502127"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6652
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/132991[132991]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6653
+#, no-wrap
+msgid "August 2, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6655
+#, no-wrap
+msgid "5.2-CURRENT after changing the UMA kernel API to allow ctors/inits to fail."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6656
+#, no-wrap
+msgid "502128"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6657
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/133306[133306]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6658
+#, no-wrap
+msgid "August 8, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6660
+#, no-wrap
+msgid "5.2-CURRENT after the change of the vfs_mount signature as well as global replacement of PRISON_ROOT with SUSER_ALLOWJAIL for the man:suser[9] API."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6661
+#, no-wrap
+msgid "503000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6662
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/134189[134189]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6663
+#, no-wrap
+msgid "August 23, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6665
+#, no-wrap
+msgid "5.3-BETA/RC before the pfil API change"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6666
+#, no-wrap
+msgid "503001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6667
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/135580[135580]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6668
+#, no-wrap
+msgid "September 22, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6670
+#, no-wrap
+msgid "5.3-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6671
+#, no-wrap
+msgid "503100"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6672
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/136595[136595]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6673
+#, no-wrap
+msgid "October 16, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6675
+#, no-wrap
+msgid "5.3-STABLE after branching for RELENG_5_3"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6676
+#, no-wrap
+msgid "503101"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6677
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/138459[138459]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6678
+#, no-wrap
+msgid "December 3, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6680
+#, no-wrap
+msgid "5.3-STABLE after addition of glibc style man:strftime[3] padding options."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6681
+#, no-wrap
+msgid "503102"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6682
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/141788[141788]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6683
+#, no-wrap
+msgid "February 13, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6685
+#, no-wrap
+msgid "5.3-STABLE after OpenBSD's man:nc[1] import MFC."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6686
+#, no-wrap
+msgid "503103"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6687
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/142639[142639]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6690
+#, no-wrap
+msgid "5.4-PRERELEASE after the MFC of the fixes in [.filename]#<src/include/stdbool.h># and [.filename]#<src/sys/i386/include/_types.h># for using the GCC-compatibility of the Intel C/C++ compiler."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6691
+#, no-wrap
+msgid "503104"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6692
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/142835[142835]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6695
+#, no-wrap
+msgid "5.4-PRERELEASE after the MFC of the change of `ifi_epoch` from wall clock time to uptime."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6696
+#, no-wrap
+msgid "503105"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6697
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/143029[143029]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6698
+#, no-wrap
+msgid "March 2, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6700
+#, no-wrap
+msgid "5.4-PRERELEASE after the MFC of the fix of EOVERFLOW check in man:vswprintf[3]."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6701
+#, no-wrap
+msgid "504000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6702
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/144575[144575]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6703
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6708
+#, no-wrap
+msgid "April 3, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6705
+#, no-wrap
+msgid "5.4-RELEASE."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6706
+#, no-wrap
+msgid "504100"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6707
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/144581[144581]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6710
+#, no-wrap
+msgid "5.4-STABLE after branching for RELENG_5_4"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6711
+#, no-wrap
+msgid "504101"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6712
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/146105[146105]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6713
+#, no-wrap
+msgid "May 11, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6715
+#, no-wrap
+msgid "5.4-STABLE after increasing the default thread stacksizes"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6716
+#, no-wrap
+msgid "504102"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6717
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/504101[504101]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6718
+#, no-wrap
+msgid "June 24, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6720
+#, no-wrap
+msgid "5.4-STABLE after the addition of sha256"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6721
+#, no-wrap
+msgid "504103"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6722
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/150892[150892]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6723
+#, no-wrap
+msgid "October 3, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6725
+#, no-wrap
+msgid "5.4-STABLE after the MFC of if_bridge"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6726
+#, no-wrap
+msgid "504104"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6727
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/152370[152370]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6728
+#, no-wrap
+msgid "November 13, 2005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6730
+#, no-wrap
+msgid "5.4-STABLE after the MFC of bsdiff and portsnap"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6731
+#, no-wrap
+msgid "504105"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6732
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/154464[154464]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6735
+#, no-wrap
+msgid "5.4-STABLE after MFC of ldconfig_local_dirs change."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6736
+#, no-wrap
+msgid "505000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6737
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/158481[158481]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6738
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6743
+#, no-wrap
+msgid "May 12, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6740
+#, no-wrap
+msgid "5.5-RELEASE."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6741
+#, no-wrap
+msgid "505100"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6742
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/158482[158482]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6744
+#, no-wrap
+msgid "5.5-STABLE after branching for RELENG_5_5"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6747
+#, no-wrap
+msgid "FreeBSD 4 Versions"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6750
+#, no-wrap
+msgid "FreeBSD 4 `__FreeBSD_version` Values"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6759
+#, no-wrap
+msgid "400000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6760
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/43041[43041]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6761
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7154
+#, no-wrap
+msgid "January 22, 1999"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6763
+#, no-wrap
+msgid "4.0-CURRENT after 3.4 branch"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6764
+#, no-wrap
+msgid "400001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6765
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/44177[44177]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6766
+#, no-wrap
+msgid "February 20, 1999"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6768
+#, no-wrap
+msgid "4.0-CURRENT after change in dynamic linker handling"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6769
+#, no-wrap
+msgid "400002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6770
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/44699[44699]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6771
+#, no-wrap
+msgid "March 13, 1999"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6773
+#, no-wrap
+msgid "4.0-CURRENT after C++ constructor/destructor order change"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6774
+#, no-wrap
+msgid "400003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6775
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/45059[45059]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6776
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7164
+#, no-wrap
+msgid "March 27, 1999"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6778
+#, no-wrap
+msgid "4.0-CURRENT after functioning man:dladdr[3]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6779
+#, no-wrap
+msgid "400004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6780
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/45321[45321]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6781
+#, no-wrap
+msgid "April 5, 1999"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6783
+#, no-wrap
+msgid "4.0-CURRENT after `__deregister_frame_info` dynamic linker bug fix (also 4.0-CURRENT after EGCS 1.1.2 integration)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6784
+#, no-wrap
+msgid "400005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6785
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/46113[46113]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6786
+#, no-wrap
+msgid "April 27, 1999"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6788
+#, no-wrap
+msgid "4.0-CURRENT after man:suser[9] API change (also 4.0-CURRENT after newbus)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6789
+#, no-wrap
+msgid "400006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6790
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/47640[47640]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6791
+#, no-wrap
+msgid "May 31, 1999"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6793
+#, no-wrap
+msgid "4.0-CURRENT after cdevsw registration change"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6794
+#, no-wrap
+msgid "400007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6795
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/47992[47992]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6796
+#, no-wrap
+msgid "June 17, 1999"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6798
+#, no-wrap
+msgid "4.0-CURRENT after the addition of `so_cred` for socket level credentials"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6799
+#, no-wrap
+msgid "400008"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6800
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/48048[48048]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6801
+#, no-wrap
+msgid "June 20, 1999"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6803
+#, no-wrap
+msgid "4.0-CURRENT after the addition of a poll syscall wrapper to libc_r"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6804
+#, no-wrap
+msgid "400009"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6805
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/48936[48936]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6806
+#, no-wrap
+msgid "July 20, 1999"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6808
+#, no-wrap
+msgid "4.0-CURRENT after the change of the kernel's `dev_t` type to `struct specinfo` pointer"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6809
+#, no-wrap
+msgid "400010"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6810
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/51649[51649]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6811
+#, no-wrap
+msgid "September 25, 1999"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6813
+#, no-wrap
+msgid "4.0-CURRENT after fixing a hole in man:jail[2]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6814
+#, no-wrap
+msgid "400011"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6815
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/51791[51791]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6816
+#, no-wrap
+msgid "September 29, 1999"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6818
+#, no-wrap
+msgid "4.0-CURRENT after the `sigset_t` datatype change"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6819
+#, no-wrap
+msgid "400012"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6820
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/53164[53164]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6821
+#, no-wrap
+msgid "November 15, 1999"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6823
+#, no-wrap
+msgid "4.0-CURRENT after the cutover to the GCC 2.95.2 compiler"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6824
+#, no-wrap
+msgid "400013"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6825
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/54123[54123]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6826
+#, no-wrap
+msgid "December 4, 1999"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6828
+#, no-wrap
+msgid "4.0-CURRENT after adding pluggable linux-mode ioctl handlers"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6829
+#, no-wrap
+msgid "400014"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6830
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/56216[56216]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6831
+#, no-wrap
+msgid "January 18, 2000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6833
+#, no-wrap
+msgid "4.0-CURRENT after importing OpenSSL"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6834
+#, no-wrap
+msgid "400015"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6835
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/56700[56700]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6836
+#, no-wrap
+msgid "January 27, 2000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6838
+#, no-wrap
+msgid "4.0-CURRENT after the C++ ABI change in GCC 2.95.2 from -fvtable-thunks to -fno-vtable-thunks by default"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6839
+#, no-wrap
+msgid "400016"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6840
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/57529[57529]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6841
+#, no-wrap
+msgid "February 27, 2000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6843
+#, no-wrap
+msgid "4.0-CURRENT after importing OpenSSH"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6844
+#, no-wrap
+msgid "400017"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6845
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/58005[58005]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6848
+#, no-wrap
+msgid "4.0-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6849
+#, no-wrap
+msgid "400018"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6850
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/58170[58170]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6851
+#, no-wrap
+msgid "March 17, 2000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6853
+#, no-wrap
+msgid "4.0-STABLE after 4.0-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6854
+#, no-wrap
+msgid "400019"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6855
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/60047[60047]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6856
+#, no-wrap
+msgid "May 5, 2000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6858
+#, no-wrap
+msgid "4.0-STABLE after the introduction of delayed checksums."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6859
+#, no-wrap
+msgid "400020"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6860
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/61262[61262]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6861
+#, no-wrap
+msgid "June 4, 2000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6863
+#, no-wrap
+msgid "4.0-STABLE after merging libxpg4 code into libc."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6864
+#, no-wrap
+msgid "400021"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6865
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/62820[62820]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6866
+#, no-wrap
+msgid "July 8, 2000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6868
+#, no-wrap
+msgid "4.0-STABLE after upgrading Binutils to 2.10.0, ELF branding changes, and tcsh in the base system."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6869
+#, no-wrap
+msgid "410000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6870
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/63095[63095]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6873
+#, no-wrap
+msgid "4.1-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6874
+#, no-wrap
+msgid "410001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6875
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/64012[64012]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6876
+#, no-wrap
+msgid "July 29, 2000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6878
+#, no-wrap
+msgid "4.1-STABLE after 4.1-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6879
+#, no-wrap
+msgid "410002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6880
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/65962[65962]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6881
+#, no-wrap
+msgid "September 16, 2000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6883
+#, no-wrap
+msgid "4.1-STABLE after man:setproctitle[3] moved from libutil to libc."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6884
+#, no-wrap
+msgid "411000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6885
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/66336[66336]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6886
+#, no-wrap
+msgid "September 25, 2000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6888
+#, no-wrap
+msgid "4.1.1-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6889
+#, no-wrap
+msgid "411001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6893
+#, no-wrap
+msgid "4.1.1-STABLE after 4.1.1-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6894
+#, no-wrap
+msgid "420000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6895
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/68066[68066]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6896
+#, no-wrap
+msgid "October 31, 2000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6898
+#, no-wrap
+msgid "4.2-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6899
+#, no-wrap
+msgid "420001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6900
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/70895[70895]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6903
+#, no-wrap
+msgid "4.2-STABLE after combining libgcc.a and libgcc_r.a, and associated GCC linkage changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6904
+#, no-wrap
+msgid "430000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6905
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/73800[73800]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6906
+#, no-wrap
+msgid "March 6, 2001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6908
+#, no-wrap
+msgid "4.3-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6909
+#, no-wrap
+msgid "430001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6910
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/76779[76779]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6911
+#, no-wrap
+msgid "May 18, 2001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6913
+#, no-wrap
+msgid "4.3-STABLE after `wint_t` introduction."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6914
+#, no-wrap
+msgid "430002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6915
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/80157[80157]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6916
+#, no-wrap
+msgid "July 22, 2001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6918
+#, no-wrap
+msgid "4.3-STABLE after PCI powerstate API merge."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6919
+#, no-wrap
+msgid "440000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6920
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/80923[80923]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6921
+#, no-wrap
+msgid "August 1, 2001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6923
+#, no-wrap
+msgid "4.4-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6924
+#, no-wrap
+msgid "440001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6925
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/85341[85341]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6926
+#, no-wrap
+msgid "October 23, 2001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6928
+#, no-wrap
+msgid "4.4-STABLE after `d_thread_t` introduction."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6929
+#, no-wrap
+msgid "440002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6930
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/86038[86038]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6931
+#, no-wrap
+msgid "November 4, 2001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6933
+#, no-wrap
+msgid "4.4-STABLE after mount structure changes (affects filesystem klds)."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6934
+#, no-wrap
+msgid "440003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6935
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/88130[88130]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6936
+#, no-wrap
+msgid "December 18, 2001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6938
+#, no-wrap
+msgid "4.4-STABLE after the userland components of smbfs were imported."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6939
+#, no-wrap
+msgid "450000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6940
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/88271[88271]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6941
+#, no-wrap
+msgid "December 20, 2001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6943
+#, no-wrap
+msgid "4.5-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6944
+#, no-wrap
+msgid "450001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6948
+#, no-wrap
+msgid "4.5-STABLE after the usb structure element rename."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6949
+#, no-wrap
+msgid "450002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6950
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/92151[92151]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6951
+#, no-wrap
+msgid "March 12, 2002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6953
+#, no-wrap
+msgid "4.5-STABLE after locale changes."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6954
+#, no-wrap
+msgid "450003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6958
+#, no-wrap
+msgid "(Never created)"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6959
+#, no-wrap
+msgid "450004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6960
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/94840[94840]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6961
+#, no-wrap
+msgid "April 16, 2002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6963
+#, no-wrap
+msgid "4.5-STABLE after the `sendmail_enable` man:rc.conf[5] variable was made to take the value `NONE`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6964
+#, no-wrap
+msgid "450005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6965
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/95555[95555]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6966
+#, no-wrap
+msgid "April 27, 2002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6968
+#, no-wrap
+msgid "4.5-STABLE after moving to XFree86 4 by default for package builds."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6969
+#, no-wrap
+msgid "450006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6970
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/95846[95846]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6971
+#, no-wrap
+msgid "May 1, 2002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6973
+#, no-wrap
+msgid "4.5-STABLE after accept filtering was fixed so that is no longer susceptible to an easy DoS."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6974
+#, no-wrap
+msgid "460000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6975
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/97923[97923]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6976
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6981
+#, no-wrap
+msgid "June 21, 2002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6978
+#, no-wrap
+msgid "4.6-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6979
+#, no-wrap
+msgid "460001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6980
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/98730[98730]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6983
+#, no-wrap
+msgid "4.6-STABLE man:sendfile[2] fixed to comply with documentation, not to count any headers sent against the amount of data to be sent from the file."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6984
+#, no-wrap
+msgid "460002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6985
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/100366[100366]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6986
+#, no-wrap
+msgid "July 19, 2002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6988
+#, no-wrap
+msgid "4.6.2-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6989
+#, no-wrap
+msgid "460100"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6990
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/98857[98857]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6991
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6996
+#, no-wrap
+msgid "June 26, 2002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6993
+#, no-wrap
+msgid "4.6-STABLE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6994
+#, no-wrap
+msgid "460101"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6995
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/98880[98880]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6998
+#, no-wrap
+msgid "4.6-STABLE after MFC of `sed -i`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:6999
+#, no-wrap
+msgid "460102"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7000
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/102759[102759]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7003
+#, no-wrap
+msgid "4.6-STABLE after MFC of many new pkg_install features from the HEAD."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7004
+#, no-wrap
+msgid "470000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7005
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/104655[104655]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7006
+#, no-wrap
+msgid "October 8, 2002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7008
+#, no-wrap
+msgid "4.7-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7009
+#, no-wrap
+msgid "470100"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7010
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/104717[104717]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7011
+#, no-wrap
+msgid "October 9, 2002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7013
+#, no-wrap
+msgid "4.7-STABLE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7014
+#, no-wrap
+msgid "470101"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7015
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/106732[106732]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7016
+#, no-wrap
+msgid "November 10, 2002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7018
+#, no-wrap
+msgid "Start generated __std{in,out,err}p references rather than __sF. This changes std{in,out,err} from a compile time expression to a runtime one."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7019
+#, no-wrap
+msgid "470102"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7020
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/109753[109753]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7021
+#, no-wrap
+msgid "January 23, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7023
+#, no-wrap
+msgid "4.7-STABLE after MFC of mbuf changes to replace `m_aux` mbufs by `m_tag`'s"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7024
+#, no-wrap
+msgid "470103"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7025
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/110887[110887]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7026
+#, no-wrap
+msgid "February 14, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7028
+#, no-wrap
+msgid "4.7-STABLE gets OpenSSL 0.9.7"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7029
+#, no-wrap
+msgid "480000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7030
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/112852[112852]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7031
+#, no-wrap
+msgid "March 30, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7033
+#, no-wrap
+msgid "4.8-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7034
+#, no-wrap
+msgid "480100"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7035
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/113107[113107]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7036
+#, no-wrap
+msgid "April 5, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7038
+#, no-wrap
+msgid "4.8-STABLE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7039
+#, no-wrap
+msgid "480101"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7040
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/115232[115232]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7041
+#, no-wrap
+msgid "May 22, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7043
+#, no-wrap
+msgid "4.8-STABLE after man:realpath[3] has been made thread-safe"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7044
+#, no-wrap
+msgid "480102"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7045
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/118737[118737]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7046
+#, no-wrap
+msgid "August 10, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7048
+#, no-wrap
+msgid "4.8-STABLE 3ware API changes to twe."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7049
+#, no-wrap
+msgid "490000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7050
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/121592[121592]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7051
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7056
+#, no-wrap
+msgid "October 27, 2003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7053
+#, no-wrap
+msgid "4.9-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7054
+#, no-wrap
+msgid "490100"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7055
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/121593[121593]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7058
+#, no-wrap
+msgid "4.9-STABLE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7059
+#, no-wrap
+msgid "490101"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7060
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/124264[124264]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7061
+#, no-wrap
+msgid "January 8, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7063
+#, no-wrap
+msgid "4.9-STABLE after `e_sid` was added to struct `kinfo_eproc`."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7064
+#, no-wrap
+msgid "490102"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7065
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/125417[125417]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7066
+#, no-wrap
+msgid "February 4, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7068
+#, no-wrap
+msgid "4.9-STABLE after MFC of libmap functionality for rtld."
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7069
+#, no-wrap
+msgid "491000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7070
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/129700[129700]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7071
+#, no-wrap
+msgid "May 25, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7073
+#, no-wrap
+msgid "4.10-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7074
+#, no-wrap
+msgid "491100"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7075
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/129918[129918]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7076
+#, no-wrap
+msgid "June 1, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7078
+#, no-wrap
+msgid "4.10-STABLE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7079
+#, no-wrap
+msgid "491101"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7080
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/133506[133506]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7081
+#, no-wrap
+msgid "August 11, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7083
+#, no-wrap
+msgid "4.10-STABLE after MFC of revision 20040629 of the package tools"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7084
+#, no-wrap
+msgid "491102"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7085
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/137786[137786]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7086
+#, no-wrap
+msgid "November 16, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7088
+#, no-wrap
+msgid "4.10-STABLE after VM fix dealing with unwiring of fictitious pages"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7089
+#, no-wrap
+msgid "492000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7090
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/138960[138960]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7091
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7096
+#, no-wrap
+msgid "December 17, 2004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7093
+#, no-wrap
+msgid "4.11-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7094
+#, no-wrap
+msgid "492100"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7095
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/138959[138959]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7098
+#, no-wrap
+msgid "4.11-STABLE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7099
+#, no-wrap
+msgid "492101"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7100
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/157843[157843]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7101
+#, no-wrap
+msgid "April 18, 2006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7102
+#, no-wrap
+msgid "4.11-STABLE after adding libdata/ldconfig directories to mtree files."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7105
+#, no-wrap
+msgid "FreeBSD 3 Versions"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7108
+#, no-wrap
+msgid "FreeBSD 3 `__FreeBSD_version` Values"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7117
+#, no-wrap
+msgid "300000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7118
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/22917[22917]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7119
+#, no-wrap
+msgid "February 19, 1996"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7121
+#, no-wrap
+msgid "3.0-CURRENT before man:mount[2] change"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7122
+#, no-wrap
+msgid "300001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7123
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/36283[36283]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7124
+#, no-wrap
+msgid "September 24, 1997"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7126
+#, no-wrap
+msgid "3.0-CURRENT after man:mount[2] change"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7127
+#, no-wrap
+msgid "300002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7128
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/36592[36592]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7129
+#, no-wrap
+msgid "June 2, 1998"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7131
+#, no-wrap
+msgid "3.0-CURRENT after man:semctl[2] change"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7132
+#, no-wrap
+msgid "300003"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7133
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/36735[36735]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7134
+#, no-wrap
+msgid "June 7, 1998"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7136
+#, no-wrap
+msgid "3.0-CURRENT after ioctl arg changes"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7137
+#, no-wrap
+msgid "300004"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7138
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/38768[38768]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7139
+#, no-wrap
+msgid "September 3, 1998"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7141
+#, no-wrap
+msgid "3.0-CURRENT after ELF conversion"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7142
+#, no-wrap
+msgid "300005"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7143
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/40438[40438]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7144
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7149
+#, no-wrap
+msgid "October 16, 1998"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7146
+#, no-wrap
+msgid "3.0-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7147
+#, no-wrap
+msgid "300006"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7148
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/40445[40445]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7151
+#, no-wrap
+msgid "3.0-CURRENT after 3.0-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7152
+#, no-wrap
+msgid "300007"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7153
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/43042[43042]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7156
+#, no-wrap
+msgid "3.0-STABLE after 3/4 branch"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7157
+#, no-wrap
+msgid "310000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7158
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/43807[43807]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7159
+#, no-wrap
+msgid "February 9, 1999"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7161
+#, no-wrap
+msgid "3.1-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7162
+#, no-wrap
+msgid "310001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7163
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/45060[45060]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7166
+#, no-wrap
+msgid "3.1-STABLE after 3.1-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7167
+#, no-wrap
+msgid "310002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7168
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/45689[45689]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7169
+#, no-wrap
+msgid "April 14, 1999"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7171
+#, no-wrap
+msgid "3.1-STABLE after C++ constructor/destructor order change"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7172
+#, no-wrap
+msgid "320000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7176
+#, no-wrap
+msgid "3.2-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7177
+#, no-wrap
+msgid "320001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7178
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/46742[46742]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7179
+#, no-wrap
+msgid "May 8, 1999"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7181
+#, no-wrap
+msgid "3.2-STABLE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7182
+#, no-wrap
+msgid "320002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7183
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/50563[50563]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7184
+#, no-wrap
+msgid "August 29, 1999"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7186
+#, no-wrap
+msgid "3.2-STABLE after binary-incompatible IPFW and socket changes"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7187
+#, no-wrap
+msgid "330000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7188
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/50813[50813]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7189
+#, no-wrap
+msgid "September 2, 1999"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7191
+#, no-wrap
+msgid "3.3-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7192
+#, no-wrap
+msgid "330001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7193
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/51328[51328]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7194
+#, no-wrap
+msgid "September 16, 1999"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7196
+#, no-wrap
+msgid "3.3-STABLE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7197
+#, no-wrap
+msgid "330002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7198
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/53671[53671]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7199
+#, no-wrap
+msgid "November 24, 1999"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7201
+#, no-wrap
+msgid "3.3-STABLE after adding man:mkstemp[3] to libc"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7202
+#, no-wrap
+msgid "340000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7203
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/54166[54166]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7204
+#, no-wrap
+msgid "December 5, 1999"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7206
+#, no-wrap
+msgid "3.4-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7207
+#, no-wrap
+msgid "340001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7208
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/54730[54730]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7209
+#, no-wrap
+msgid "December 17, 1999"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7211
+#, no-wrap
+msgid "3.4-STABLE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7212
+#, no-wrap
+msgid "350000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7213
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/61876[61876]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7214
+#, no-wrap
+msgid "June 20, 2000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7216
+#, no-wrap
+msgid "3.5-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7217
+#, no-wrap
+msgid "350001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7218
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/63043[63043]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7219
+#, no-wrap
+msgid "July 12, 2000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7220
+#, no-wrap
+msgid "3.5-STABLE"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7223
+#, no-wrap
+msgid "FreeBSD 2.2 Versions"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7226
+#, no-wrap
+msgid "FreeBSD 2.2 `__FreeBSD_version` Values"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7235
+#, no-wrap
+msgid "220000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7236
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/22918[22918]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7237
+#, no-wrap
+msgid "February 19, 1997"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7239
+#, no-wrap
+msgid "2.2-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7244
+#, no-wrap
+msgid "2.2.1-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7249
+#, no-wrap
+msgid "2.2-STABLE after 2.2.1-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7250
+#, no-wrap
+msgid "221001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7251
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/24941[24941]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7252
+#, no-wrap
+msgid "April 15, 1997"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7254
+#, no-wrap
+msgid "2.2-STABLE after texinfo-3.9"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7255
+#, no-wrap
+msgid "221002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7256
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/25325[25325]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7257
+#, no-wrap
+msgid "April 30, 1997"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7259
+#, no-wrap
+msgid "2.2-STABLE after top"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7260
+#, no-wrap
+msgid "222000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7261
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/25851[25851]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7262
+#, no-wrap
+msgid "May 16, 1997"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7264
+#, no-wrap
+msgid "2.2.2-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7265
+#, no-wrap
+msgid "222001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7266
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/25921[25921]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7267
+#, no-wrap
+msgid "May 19, 1997"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7269
+#, no-wrap
+msgid "2.2-STABLE after 2.2.2-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7270
+#, no-wrap
+msgid "225000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7271
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/30053[30053]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7272
+#, no-wrap
+msgid "October 2, 1997"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7274
+#, no-wrap
+msgid "2.2.5-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7275
+#, no-wrap
+msgid "225001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7276
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/31300[31300]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7277
+#, no-wrap
+msgid "November 20, 1997"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7279
+#, no-wrap
+msgid "2.2-STABLE after 2.2.5-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7280
+#, no-wrap
+msgid "225002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7281
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/32019[32019]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7282
+#, no-wrap
+msgid "December 27, 1997"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7284
+#, no-wrap
+msgid "2.2-STABLE after ldconfig -R merge"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7285
+#, no-wrap
+msgid "226000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7286
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/34445[34445]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7287
+#, no-wrap
+msgid "March 24, 1998"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7289
+#, no-wrap
+msgid "2.2.6-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7290
+#, no-wrap
+msgid "227000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7291
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/37803[37803]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7292
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7297
+#, no-wrap
+msgid "July 21, 1998"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7294
+#, no-wrap
+msgid "2.2.7-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7295
+#, no-wrap
+msgid "227001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7296
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/37809[37809]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7299
+#, no-wrap
+msgid "2.2-STABLE after 2.2.7-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7300
+#, no-wrap
+msgid "227002"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7301
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/39489[39489]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7302
+#, no-wrap
+msgid "September 19, 1998"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7304
+#, no-wrap
+msgid "2.2-STABLE after man:semctl[2] change"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7305
+#, no-wrap
+msgid "228000"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7306
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/41403[41403]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7307
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7312
+#, no-wrap
+msgid "November 29, 1998"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7309
+#, no-wrap
+msgid "2.2.8-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7310
+#, no-wrap
+msgid "228001"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7311
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/41418[41418]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7313
+#, no-wrap
+msgid "2.2-STABLE after 2.2.8-RELEASE"
+msgstr ""
+
+#. type: delimited block = 4
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7318
+msgid ""
+"Note that 2.2-STABLE sometimes identifies itself as \"2.2.5-STABLE\" after "
+"the 2.2.5-RELEASE. The pattern used to be year followed by the month, but "
+"the community decided to change it to a more straightforward major/minor "
+"system starting from 2.2. This is because the parallel development on "
+"several branches made it infeasible to classify the releases merely by their "
+"real release dates. Do not worry about old -CURRENTs; they are listed here "
+"just for reference."
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7321
+#, no-wrap
+msgid "FreeBSD 2 Before 2.2-RELEASE Versions"
+msgstr ""
+
+#. type: Block title
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7324
+#, no-wrap
+msgid "FreeBSD 2 Before 2.2-RELEASE `__FreeBSD_version` Values"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7333
+#, no-wrap
+msgid "119411"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7337
+#, no-wrap
+msgid "2.0-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7338
+#, no-wrap
+msgid "199501"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7339
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/7153[7153]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7340
+#, no-wrap
+msgid "March 19, 1995"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7342
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7347
+#, no-wrap
+msgid "2.1-CURRENT"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7343
+#, no-wrap
+msgid "199503"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7344
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/7310[7310]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7345
+#, no-wrap
+msgid "March 24, 1995"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7348
+#, no-wrap
+msgid "199504"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7349
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/7704[7704]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7350
+#, no-wrap
+msgid "April 9, 1995"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7352
+#, no-wrap
+msgid "2.0.5-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7353
+#, no-wrap
+msgid "199508"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7354
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/10297[10297]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7355
+#, no-wrap
+msgid "August 26, 1995"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7357
+#, no-wrap
+msgid "2.2-CURRENT before 2.1"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7358
+#, no-wrap
+msgid "199511"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7359
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/12189[12189]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7360
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7365
+#, no-wrap
+msgid "November 10, 1995"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7362
+#, no-wrap
+msgid "2.1.0-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7363
+#, no-wrap
+msgid "199512"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7364
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/12196[12196]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7367
+#, no-wrap
+msgid "2.2-CURRENT before 2.1.5"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7368
+#, no-wrap
+msgid "199607"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7369
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/17067[17067]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7370
+#, no-wrap
+msgid "July 10, 1996"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7372
+#, no-wrap
+msgid "2.1.5-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7373
+#, no-wrap
+msgid "199608"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7374
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/17127[17127]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7375
+#, no-wrap
+msgid "July 12, 1996"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7377
+#, no-wrap
+msgid "2.2-CURRENT before 2.1.6"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7378
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7383
+#, no-wrap
+msgid "199612"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7379
+#, no-wrap
+msgid "link:https://svnweb.freebsd.org/changeset/base/19358[19358]"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7380
+#, no-wrap
+msgid "November 15, 1996"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7382
+#, no-wrap
+msgid "2.1.6-RELEASE"
+msgstr ""
+
+#. type: Table
+#: documentation/content/en/books/porters-handbook/versions/_index.adoc:7386
+#, no-wrap
+msgid "2.1.7-RELEASE"
+msgstr ""
diff --git a/documentation/content/en/languages.po b/documentation/content/en/languages.po
new file mode 100644
index 0000000000..d2599e29d6
--- /dev/null
+++ b/documentation/content/en/languages.po
@@ -0,0 +1,24 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-07-07 23:23-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: documentation/content/en/languages.adoc:1
+#: documentation/content/en/languages.adoc:6
+#, no-wrap
+msgid "Languages"
+msgstr ""
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 63d36a47e2..4b5de262de 100644
--- a/documentation/content/es/articles/contributing/_index.adoc
+++ b/documentation/content/es/articles/contributing/_index.adoc
@@ -126,6 +126,24 @@ Las contribuciones al sistema generalmente pueden catalogarse en las siguientes
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.
@@ -189,7 +207,11 @@ Las donaciones se pueden enviar en forma de cheque a:
[.address]
****
-The FreeBSD Foundation + 3980 Broadway Street + STE #103-107 + Boulder CO 80304 + 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.
@@ -210,21 +232,14 @@ 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 extref:{porters-handbook}[Porter's Handbook]. _Por favor no te comprometas a más de lo que te sientes cómodo de manejar._
@@ -413,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
@@ -442,8 +450,6 @@ extref:{problem-reports}[Writing FreeBSD Problem Reports] describe como formular
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]
diff --git a/documentation/content/es/articles/contributing/_index.po b/documentation/content/es/articles/contributing/_index.po
index 3b1b2576c0..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-11-04 20:26-0300\n"
-"PO-Revision-Date: 2021-11-17 15:13+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.1\n"
+"X-Generator: Weblate 4.17\n"
#. type: YAML Front Matter: description
#: documentation/content/en/articles/contributing/_index.adoc:1
@@ -31,17 +31,6 @@ msgid "Contributing to FreeBSD"
msgstr "Contribuir a FreeBSD"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_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/contributing/_index.adoc:46
msgid "Abstract"
msgstr "Resumen"
@@ -515,7 +504,141 @@ msgstr ""
"para más información acerca de ésta y otras listas de correo."
#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:152
+msgid ""
+"If you are submitting a simple patch to the src repo, please consider "
+"submitting it to the project's GitHub mirror as https://github.com/freebsd/"
+"freebsd-src/pulls[a pull request]. Suitable submissions should:"
+msgstr ""
+"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 "
@@ -538,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:159
+#: 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 "
@@ -549,7 +672,7 @@ msgstr ""
"pueda informarnos con nuevos detalles sobre el problema."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:161
+#: documentation/content/en/articles/contributing/_index.adoc:184
msgid ""
"See also extref:{problem-reports}[this article] on how to write good problem "
"reports."
@@ -558,13 +681,13 @@ msgstr ""
"buenos informes de error."
#. type: Title ===
-#: documentation/content/en/articles/contributing/_index.adoc:162
+#: 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:167
+#: documentation/content/en/articles/contributing/_index.adoc:190
msgid ""
"Changes to the documentation are overseen by the {freebsd-doc}. Please look "
"at the extref:{fdp-primer}[FreeBSD Documentation Project Primer] for "
@@ -578,13 +701,13 @@ msgstr ""
"error."
#. type: Title ===
-#: documentation/content/en/articles/contributing/_index.adoc:168
+#: 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:173
+#: 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 "
@@ -603,7 +726,7 @@ msgstr ""
"para más información acerca de cómo obtener y utilizar FreeBSD-CURRENT."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:176
+#: 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 "
@@ -619,7 +742,7 @@ msgstr ""
"sistema."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:179
+#: 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 "
@@ -631,7 +754,7 @@ msgstr ""
"diff[1]."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:181
+#: 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`."
@@ -640,24 +763,24 @@ msgstr ""
"unificada generado por `diff -u`."
#. type: delimited block . 4
-#: documentation/content/en/articles/contributing/_index.adoc:185
+#: 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:188
+#: documentation/content/en/articles/contributing/_index.adoc:211
msgid "or"
msgstr "o"
#. type: delimited block . 4
-#: documentation/content/en/articles/contributing/_index.adoc:192
+#: 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:195
+#: documentation/content/en/articles/contributing/_index.adoc:218
msgid ""
"would generate a set of unified diffs for the given source file or directory "
"hierarchy."
@@ -666,12 +789,12 @@ msgstr ""
"la jerarquía de directorios."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:197
+#: 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:201
+#: 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 "
@@ -690,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:204
+#: 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] "
@@ -701,7 +824,7 @@ msgstr ""
"shar[1] también son bienvenidos."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:208
+#: 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 "
@@ -719,7 +842,7 @@ msgstr ""
"solo debe enviarles correos cuando realmente sea necesario."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:211
+#: 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 "
@@ -730,13 +853,13 @@ msgstr ""
"información antes de enviar código."
#. type: Title ===
-#: documentation/content/en/articles/contributing/_index.adoc:212
+#: 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:216
+#: 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 "
@@ -753,7 +876,7 @@ msgstr ""
"para que alguien busque un sitio para alojar los cambios."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:221
+#: 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 "
@@ -768,13 +891,13 @@ msgstr ""
"FreeBSD.org/internal/software-license/[core team licensing policy]."
#. type: Title ===
-#: documentation/content/en/articles/contributing/_index.adoc:222
+#: 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:225
+#: 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 "
@@ -789,13 +912,13 @@ msgstr ""
"generalmente no podemos permitirnos comprar estos artículos nosotros mismos."
#. type: Title ====
-#: documentation/content/en/articles/contributing/_index.adoc:227
+#: 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:232
+#: 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 "
@@ -811,17 +934,28 @@ msgstr ""
"se pueden deducir de la declaración de impuestos federal."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:234
+#: 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:242
-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:245
+#: 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."
@@ -830,7 +964,7 @@ msgstr ""
"donate/[donaciones online] mediante diversas opciones de pago."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:248
+#: 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 "
@@ -843,13 +977,13 @@ msgstr ""
"escribe a mailto:info@FreeBSDFoundation.org[info@FreeBSDFoundation.org]."
#. type: Title ====
-#: documentation/content/en/articles/contributing/_index.adoc:249
+#: 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:253
+#: 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 "
@@ -861,25 +995,25 @@ msgstr ""
"Enlace de Donaciones]."
#. type: Title ==
-#: documentation/content/en/articles/contributing/_index.adoc:255
+#: 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:258
+#: 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:260
+#: 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:266
+#: 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 "
@@ -894,21 +1028,19 @@ msgstr ""
"idea empezar adoptando un port que use de forma regular."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:269
+#: 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:271
+#: 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."
@@ -917,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:273
-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:276
+#: 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 "
@@ -940,7 +1061,7 @@ msgstr ""
"para mantener dichos ports."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:280
+#: 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 "
@@ -957,24 +1078,14 @@ 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:284
-#: documentation/content/en/articles/contributing/_index.adoc:542
-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:286
+#: 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:291
+#: documentation/content/en/articles/contributing/_index.adoc:307
msgid ""
"First make sure you understand your <<maintain-port>>. Also read the extref:"
"{porters-handbook}[Porter's Handbook]. _Please do not commit yourself to "
@@ -985,7 +1096,7 @@ msgstr ""
"más de lo que te sientes cómodo de manejar._"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:297
+#: 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 "
@@ -1008,7 +1119,7 @@ msgstr ""
"actualizando ports."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:301
+#: 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. "
@@ -1021,13 +1132,13 @@ msgstr ""
"committers también son voluntarios :)."
#. type: Title ===
-#: documentation/content/en/articles/contributing/_index.adoc:303
+#: 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:306
+#: 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."
@@ -1036,13 +1147,13 @@ msgstr ""
"mantenerse y describirá las responsabilidades de un maintainer de port."
#. type: Title ====
-#: documentation/content/en/articles/contributing/_index.adoc:308
+#: 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:313
+#: 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. "
@@ -1056,7 +1167,7 @@ msgstr ""
"objetivos."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:316
+#: 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 "
@@ -1070,66 +1181,70 @@ msgstr ""
"que este evoluciona."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:318
+#: 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:320
+#: 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:322
+#: 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:324
+#: 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:326
+#: 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:328
+#: 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:330
+#: 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:332
+#: 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:333
+#: 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:335
+#: 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:338
+#: documentation/content/en/articles/contributing/_index.adoc:354
msgid ""
"This section outlines the process to follow to keep your ports up to date."
msgstr ""
@@ -1137,7 +1252,7 @@ msgstr ""
"actualizados."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:341
+#: documentation/content/en/articles/contributing/_index.adoc:357
msgid ""
"This is an overview. More information about upgrading a port is available "
"in the extref:{porters-handbook}[Porter's Handbook]."
@@ -1146,12 +1261,12 @@ msgstr ""
"un port en el extref:{porters-handbook}[Porter's Handbook]."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:345
+#: 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:350
+#: 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 "
@@ -1168,7 +1283,7 @@ msgstr ""
"puede ayudarte enviándote una actualización."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:353
+#: 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. "
@@ -1181,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:354
+#: 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:357
+#: 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 "
@@ -1197,17 +1312,17 @@ msgstr ""
"actualizado."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:358
+#: 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:360
+#: 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:362
+#: 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 "
@@ -1218,7 +1333,7 @@ msgstr ""
"otra."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:363
+#: 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 "
@@ -1229,7 +1344,7 @@ msgstr ""
"<<resources>> para más información."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:364
+#: 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."
@@ -1239,7 +1354,7 @@ msgstr ""
"utilizadas."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:365
+#: 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."
@@ -1248,7 +1363,7 @@ msgstr ""
"para información importante acerca del uso de portlint."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:366
+#: 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 "
@@ -1266,13 +1381,13 @@ msgstr ""
"portupgrade[1]."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:368
-#: documentation/content/en/articles/contributing/_index.adoc:435
+#: 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:371
+#: 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 "
@@ -1286,7 +1401,7 @@ msgstr ""
"bueno."
#. type: delimited block = 6
-#: documentation/content/en/articles/contributing/_index.adoc:377
+#: 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 "
@@ -1296,17 +1411,17 @@ msgid ""
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 extref"
-":{porters-handbook}[Upgrading, port-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:379
+#: documentation/content/en/articles/contributing/_index.adoc:395
msgid "Wait"
msgstr "Esperar"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:383
+#: 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 "
@@ -1319,12 +1434,12 @@ msgstr ""
"IRC: #bsdports en EFNet o #freebsd-ports en Libera por ejemplo."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:384
+#: documentation/content/en/articles/contributing/_index.adoc:400
msgid "Give feedback"
msgstr "Proporciona feedback"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:387
+#: 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 "
@@ -1337,12 +1452,12 @@ msgstr ""
"acelerar la resolución de cualquier problema."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:388
+#: 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:391
+#: 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!"
@@ -1351,13 +1466,13 @@ msgstr ""
"se cerrará el PR. ¡Eso es todo!"
#. type: Title =====
-#: documentation/content/en/articles/contributing/_index.adoc:393
+#: 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:396
+#: documentation/content/en/articles/contributing/_index.adoc:412
msgid ""
"This section is about discovering and fixing problems that stop your ports "
"from building correctly."
@@ -1366,7 +1481,7 @@ msgstr ""
"tus ports se compilen correctamente."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:399
+#: 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 "
@@ -1379,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:403
+#: 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 "
@@ -1394,7 +1509,7 @@ msgstr ""
"dispone de una de estas máquinas."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:408
+#: 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 "
@@ -1411,7 +1526,7 @@ msgstr ""
"es posible que debas hacerlo tú mismo."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:411
+#: 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:"
@@ -1420,12 +1535,12 @@ msgstr ""
"compilarse:"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:415
+#: 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:417
+#: 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 "
@@ -1436,13 +1551,13 @@ msgstr ""
"están fallando están desactualizados."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:418
-#: documentation/content/en/articles/contributing/_index.adoc:466
+#: 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:422
+#: 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 "
@@ -1457,12 +1572,12 @@ msgstr ""
"ayudar a identificar el problema, como por ejemplo:"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:424
+#: 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:425
+#: 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#)"
@@ -1471,7 +1586,7 @@ msgstr ""
"opciones establecidas en [.filename]#/etc/make.conf#)"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:426
+#: 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 ""
@@ -1479,30 +1594,30 @@ msgstr ""
"info[8]"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:427
+#: 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:428
+#: 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:429
+#: 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:431
+#: 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:434
+#: 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 "
@@ -1514,7 +1629,7 @@ msgstr ""
"ser de mucha ayuda."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:437
+#: 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."
@@ -1524,12 +1639,12 @@ msgstr ""
"feedback si es necesario."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:438
+#: 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:443
+#: 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 "
@@ -1545,18 +1660,18 @@ msgstr ""
"autores originales."
#. type: Title =====
-#: documentation/content/en/articles/contributing/_index.adoc:445
+#: 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:448
+#: 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:451
+#: 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 "
@@ -1569,7 +1684,7 @@ msgstr ""
"ser sutiles y difíciles de diagnosticar."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:453
+#: 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:"
@@ -1578,12 +1693,12 @@ msgstr ""
"funcionando según lo previsto:"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:457
+#: 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:460
+#: 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 "
@@ -1594,7 +1709,7 @@ msgstr ""
"se te pueden reportar directamente por los usuarios."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:463
+#: 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 "
@@ -1605,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:465
+#: 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`."
@@ -1614,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:468
+#: 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."
@@ -1623,7 +1738,7 @@ msgstr ""
"obligación recopilar la suficiente información para proporcionar una."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:471
+#: 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 "
@@ -1634,7 +1749,7 @@ msgstr ""
"reportó el error que te proporcione la siguiente información:"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:473
+#: documentation/content/en/articles/contributing/_index.adoc:489
msgid ""
"A detailed description of their actions, expected program behavior and "
"actual behavior"
@@ -1643,12 +1758,12 @@ msgstr ""
"programa y comportamiento real"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:474
+#: 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:475
+#: 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]"
@@ -1657,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:476
+#: documentation/content/en/articles/contributing/_index.adoc:492
msgid "Core dumps"
msgstr "Core dumps"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:477
+#: documentation/content/en/articles/contributing/_index.adoc:493
msgid "Stack traces"
msgstr "Stack traces"
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:479
+#: 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:485
+#: 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 "
@@ -1690,12 +1805,12 @@ msgstr ""
"de la próxima versión original."
#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:486
+#: 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:489
+#: 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!"
@@ -1704,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:490
+#: 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:493
+#: 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 "
@@ -1723,13 +1838,13 @@ msgstr ""
"no los cambios."
#. type: Title =====
-#: documentation/content/en/articles/contributing/_index.adoc:495
+#: 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:500
+#: 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. "
@@ -1743,7 +1858,7 @@ msgstr ""
"específicos de FreeBSD."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:504
+#: 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 "
@@ -1761,7 +1876,7 @@ msgstr ""
"claro). Y sugiérele que pruebe FreeBSD."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:507
+#: 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:"
@@ -1771,22 +1886,22 @@ msgstr ""
"ejemplo, podrían:"
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:509
+#: 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:510
+#: 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:511
+#: 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:517
+#: 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 "
@@ -1802,7 +1917,7 @@ msgstr ""
"con ellos lo antes posible."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:519
+#: 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 "
@@ -1812,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:521
+#: 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:524
+#: documentation/content/en/articles/contributing/_index.adoc:540
msgid ""
"There are some really good places to find a port that needs some attention."
msgstr ""
@@ -1826,7 +1941,7 @@ msgstr ""
"atención."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:527
+#: 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 "
@@ -1842,18 +1957,7 @@ msgstr ""
"empezar)."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:530
-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:532
+#: documentation/content/en/articles/contributing/_index.adoc:545
msgid ""
"https://portsfallout.com/[PortsFallout] shows port issues gathered from the "
"FreeBSD package building."
@@ -1862,7 +1966,7 @@ msgstr ""
"recogidos de la construcción de paquetes de FreeBSD."
#. type: delimited block = 4
-#: documentation/content/en/articles/contributing/_index.adoc:534
+#: 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."
@@ -1871,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:538
+#: 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 "
@@ -1883,13 +1987,13 @@ msgstr ""
"aceptados y se hará el commit."
#. type: Title ===
-#: documentation/content/en/articles/contributing/_index.adoc:545
+#: 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:551
+#. 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 "
@@ -1909,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:555
+#. 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 "
@@ -1926,13 +2030,13 @@ msgstr ""
"este periodo."
#. type: Title ===
-#: documentation/content/en/articles/contributing/_index.adoc:557
+#: 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:560
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:568
msgid ""
"The extref:{porters-handbook}[Porter's Handbook] is your hitchhiker's guide "
"to the ports system. Keep it handy!"
@@ -1940,8 +2044,8 @@ msgstr ""
"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:563
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:571
msgid ""
"extref:{problem-reports}[Writing FreeBSD Problem Reports] describes how to "
"best formulate and submit a PR. In 2005 more than eleven thousand ports PRs "
@@ -1953,32 +2057,16 @@ msgstr ""
"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:565
+#. 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:569
-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:572
+#. 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 "
@@ -1990,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:575
+#. 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. "
@@ -2003,8 +2091,8 @@ 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:579
+#. 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 "
@@ -2019,8 +2107,8 @@ msgstr ""
"no parecen razonables, consulta el extref:{porters-handbook}[Porter's "
"Handbook] o busca consejo."
-#. type: Plain text
-#: documentation/content/en/articles/contributing/_index.adoc:584
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:588
msgid ""
"The {freebsd-ports} is for general ports-related discussion. It is a good "
"place to ask for help. You can link:https://lists.freebsd.org/[subscribe, "
@@ -2028,12 +2116,12 @@ msgid ""
"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 link:https://lists.freebsd.org/["
-"suscribirte, o leer y buscar en el archivo de la lista]. Leer los archivos "
+"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:586
+#. 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-"
@@ -2044,13 +2132,13 @@ msgstr ""
"de package-fallout de FreeBSD]."
#. type: Title ==
-#: documentation/content/en/articles/contributing/_index.adoc:588
+#: 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:591
+#. 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 "
@@ -2062,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:593
+#. 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 "
@@ -2073,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:594
+#. 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."
@@ -2083,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 45c69e2665..0837f2f6b3 100644
--- a/documentation/content/es/articles/contributors/_index.adoc
+++ b/documentation/content/es/articles/contributors/_index.adoc
@@ -60,7 +60,7 @@ 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>>.
'''
@@ -76,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:_
+
@@ -120,13 +120,13 @@ 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:_
@@ -137,7 +137,7 @@ Las siguientes personas y empresas han contribuido generosamente con hardware pa
[[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):
@@ -153,7 +153,6 @@ _En orden cronológico inverso aproximado:_
include::{include-contrib-corealumni}[]
[[contrib-develalumni]]
-
== Antiguos miembros del equipo de desarrollo
Las siguientes personas fueron miembros del equipo de desarrollo de FreeBSD durante los períodos indicados. Les agradecemos sus esfuerzos pasados al servicio del proyecto FreeBSD.
diff --git a/documentation/content/es/articles/contributors/_index.po b/documentation/content/es/articles/contributors/_index.po
index 218715762f..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,24 +425,24 @@ 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 "
@@ -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/filtering-bridges/_index.adoc b/documentation/content/es/articles/filtering-bridges/_index.adoc
index 86abd00d2e..75d5710fb2 100644
--- a/documentation/content/es/articles/filtering-bridges/_index.adoc
+++ b/documentation/content/es/articles/filtering-bridges/_index.adoc
@@ -1,12 +1,15 @@
---
-title: Filtering Bridges
authors:
- - author: Alex Dupre
+ -
+ author: 'Alex Dupre'
email: ale@FreeBSD.org
+description: 'Configurando firewalls y filtrando en hosts FreeBSD que actúan como bridges en lugar de routers'
+tags: ["network", "filtering", "bridges", "FreeBSD"]
+title: 'Bridges de Filtrado'
trademarks: ["freebsd", "3com", "intel", "general"]
---
-= Filtering Bridges
+= Bridges de Filtrado
:doctype: article
:toc: macro
:toclevels: 1
@@ -51,7 +54,7 @@ toc::[]
[[filtering-bridges-why]]
== ¿Por qué utilizar un bridge que haga filtrado?
-Sucede con bastante frecuencia que, gracias a la reducción del coste de las conexiones de banda ancha a Internet (xDSL) y a la reducción de las direcciones IPv4 disponibles, muchas empresas están conectadas a Internet las 24 horas del día y con pocas (a veces ni siquiera dos) direcciones IP. A menudo en estas situaciones es necesario tener un firewall (también conocido como cortafuegos) que filtre el tráfico entrante y saliente desde y hacia Internet, pero una solución de filtrado de paquetes puede que no sea posible posible, ya sea por problemas de subredes, porque el router sea de propiedad del proveedor de servicios de internet (ISP), o porque no admite tales funcionalidades. En escenarios como estos se recomienda el uso de un brigde que realice el filtrado.
+Sucede con bastante frecuencia que, gracias a la reducción del coste de las conexiones de banda ancha a Internet (xDSL) y a la reducción de las direcciones IPv4 disponibles, muchas empresas están conectadas a Internet las 24 horas del día y con pocas (a veces ni siquiera dos) direcciones IP. A menudo en estas situaciones es necesario tener un firewall (también conocido como cortafuegos) que filtre el tráfico entrante y saliente desde y hacia Internet, pero una solución de filtrado de paquetes puede que no sea posible, ya sea por problemas de subredes, porque el router sea de propiedad del proveedor de servicios de internet (ISP), o porque no admite tales funcionalidades. En escenarios como estos se recomienda el uso de un brigde que realice el filtrado.
Una buena solución sería configurar un firewall basado en un bridge. Lo instalaremos entre el router xDSL y su hub/switch Ethernet, evitando así problemas de numeración IP.
@@ -62,7 +65,7 @@ No es difícil añadir funcionalidades de brigde a un sistema FreeBSD. Desde la
[IMPORTANT]
====
-_No_ siga ambas instrucciones: un procedimiento _excluye_ el otro. Seleccione la mejor opción de acuerdo a sus necesidades y habilidades.
+_No sigas_ ambas instrucciones: un procedimiento _es excluyente_ con el otro. Escoge la mejor opción de acuerdo a tus necesidades y habilidades.
====
Antes de continuar asegúrese de tener al menos dos tarjetas Ethernet que admitan el modo promiscuo tanto para la recepción como para la transmisión, ya que deben poder enviar paquetes Ethernet con cualquier dirección, no solo la suya. Además, para tener una buena tasa de transferencia, las tarjetas deben ser tarjetas del bus PCI. Las mejores opciones siguen siendo Intel EtherExpress(TM) Pro, seguida de la 3Com(R) 3c9xx series. Para simplificar la configuración del firewall, puede ser útil tener dos tarjetas de diferentes fabricantes (con diferentes controladores) para distinguir claramente qué interfaz está conectada al router y cuál a la red interna.
@@ -70,7 +73,7 @@ Antes de continuar asegúrese de tener al menos dos tarjetas Ethernet que admita
[[filtering-bridges-kernel]]
=== Configuración del kernel
-Si sigue este método es porque ha decidido utilizar el método de instalación más antiguo y también el que ha sido probado más. Para empezar, debe agregar las siguientes líneas a su archivo de configuración del kernel:
+Si sigues este método es porque has decidido utilizar el método de instalación más antiguo y también el que ha sido más probado. Para empezar, debes agregar las siguientes líneas a tu archivo de configuración del kernel:
[.programlisting]
....
@@ -81,12 +84,12 @@ 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 compilar e instalar el nuevo kernel. Puede encontrar instrucciones detalladas en la sección extref:{handbook}kernelconfig/[compilar e instalar un kernel personalizado, kernelconfig-building] del manual de FreeBSD.
+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
-Si ha elegido usar el nuevo método de instalación (más simple), lo único que debe hacer es añadir la siguiente línea a [.filename]#/boot/loader.conf#:
+Si has elegido usar el nuevo método de instalación (más simple), lo único que debes hacer es añadir la siguiente línea a [.filename]#/boot/loader.conf#::
[.programlisting]
....
@@ -98,7 +101,7 @@ Así el módulo [.filename]#bridge.ko# se cargará junto con el kernel durante e
[[filtering-bridges-finalprep]]
== Preparación final
-Antes de reiniciar para cargar el nuevo kernel o los módulos requeridos (de acuerdo con el método de instalación elegido anteriormente) debe realizar algunos cambios en el archivo de configuración [.filename]#/etc/rc.conf#. La regla predeterminada del firewall es rechazar todos los paquetes IP. Inicialmente configuraremos un firewall en modo `open` para verificar que funciona sin ningún problema en relación con el filtrado de paquetes (en el caso de que vaya a ejecutar este procedimiento de forma remota dicha configuración evitará que permanezca aislado de la red). Coloque estas líneas en el archivo [.filename]#/etc/rc.conf#:
+Antes de reiniciar para cargar el nuevo kernel o los módulos requeridos (de acuerdo con el método de instalación elegido anteriormente) debes realizar algunos cambios en el archivo de configuración [.filename]#/etc/rc.conf#. La regla predeterminada del firewall es rechazar todos los paquetes IP. Inicialmente configuraremos un firewall en modo `open` para verificar que funciona sin ningún problema en relación con el filtrado de paquetes (en el caso de que vaya a ejecutar este procedimiento de forma remota dicha configuración evitará que permanezca aislado de la red). Coloca estas líneas en el archivo [.filename]#/etc/rc.conf#:
[.programlisting]
....
@@ -108,22 +111,22 @@ firewall_quiet="YES"
firewall_logging="YES"
....
-La primera línea activará el firewall (y cargará el módulo [.filename]#ipfw.ko# si no está compilado en el kernel), la segunda lo configurará en modo `open` (como se explica en el archivo [.filename]#/etc/rc.firewall#), la tercera hará que no se muestren la carga de las reglas y la cuarta habilitará el soporte de logging.
+La primera línea activará el firewall (y cargará el módulo [.filename]#ipfw.ko# si no está compilado en el kernel), la segunda lo configurará en modo `open` (como se explica en el archivo <[.filename]#/etc/rc.firewall#), la tercera hará que no se muestren la carga de las reglas y la cuarta habilitará el soporte de logging.
-En cuanto a la configuración de las interfaces de red la forma más utilizada es asignar solo una IP a una de las tarjetas de red; el bridge funcionará igualmente, aunque ambas interfaces tengan una o no tengan ninguna IP configurada. En el último caso (IP-less) la máquina bridge quedará aún más oculta, ya que es inaccesible desde la red. Para configurarla, debe iniciar sesión desde la consola o mediante una tercera interfaz de red separada del bridge. A veces durante el inicio del sistema algunos programas requieren acceso a la red, por ejemplo para la resolución del dominio. En este caso es necesario asignar una IP a la interfaz externa (la que está conectada a Internet, donde se encuentra el servidor `DNS`) ya que el bridge se activará al final del procedimiento de arranque. Esto significa que la interfaz [.filename]#fxp0# (en nuestro caso) debe añadirse en la sección ifconfig del archivo [.filename]#/etc/rc.conf#, mientras que [.filename]#xl0# no. Asignar una IP a ambas tarjetas de red no tiene mucho sentido, a menos que durante el procedimiento de inicio las aplicaciones tengan que acceder a servicios en ambos segmentos Ethernet.
+En cuanto a la configuración de las interfaces de red la forma más utilizada es asignar solo una IP a una de las tarjetas de red; el bridge funcionará igualmente, aunque ambas interfaces tengan una o no tengan ninguna IP configurada. En el último caso (IP-less) la máquina bridge quedará aún más oculta, ya que es inaccesible desde la red. Para configurarla, debes iniciar sesión desde la consola o mediante una tercera interfaz de red separada del bridge. A veces durante el inicio del sistema algunos programas requieren acceso a la red, por ejemplo para la resolución del dominio. En este caso es necesario asignar una IP a la interfaz externa (la que está conectada a Internet, donde se encuentra el servidor DNS) ya que el bridge se activará al final del procedimiento de arranque. Esto significa que la interfaz [.filename]#fxp0# (en nuestro caso) debe añadirse en la sección ifconfig del archivo [.filename]#/etc/rc.conf#, mientras que [.filename]#fxp0# no. Asignar una IP a ambas tarjetas de red no tiene mucho sentido, a menos que durante el procedimiento de inicio las aplicaciones tengan que acceder a servicios en ambos segmentos Ethernet.
-Hay otra cosa importante que hay que saber. Cuando se ejecuta IP over Ethernet, en realidad hay dos protocolos Ethernet en uso: uno es IP, el otro es `ARP`. `ARP` realiza la conversión de la dirección IP de un host a su dirección de Ethernet (capa MAC). Para permitir la comunicación entre dos hosts separados por el bridge, es necesario que el bridge reenvíe los paquetes `ARP`. Dicho protocolo no está incluido en la capa IP, ya que solo existe con IP over Ethernet. El firewall de FreeBSD filtra exclusivamente en la capa IP y, por lo tanto, todos los paquetes no IP (`ARP` incluido) se reenvían sin ser filtrados, aunque el firewall esté configurado para no permitir nada.
+Hay otra cosa importante que hay que saber. Cuando se ejecuta IP over Ethernet, en realidad hay dos protocolos Ethernet en uso: uno es IP, el otro es ARP. ARP realiza la conversión de la dirección IP de un host a su dirección de Ethernet (capa MAC). Para permitir la comunicación entre dos hosts separados por el bridge, es necesario que el bridge reenvíe los paquetes ARP. Dicho protocolo no está incluido en la capa IP, ya que solo existe con IP over Ethernet. El firewall de FreeBSD filtra exclusivamente en la capa IP y, por lo tanto, todos los paquetes no IP (ARP incluido) se reenvían sin ser filtrados, aunque el firewall esté configurado para no permitir nada.
Ahora es el momento de reiniciar el sistema y usarlo como antes: habrá algunos mensajes nuevos sobre el bridge y el firewall, pero el bridge no se activará y el firewall, en el modo `open`, no bloqueará ninguna operación.
-Si hay algún problema, debe solucionarlo ahora antes de continuar.
+Si hay algún problema, debes solucionarlo ahora antes de continuar.
[[filtering-bridges-enabling]]
== Habilitando el bridge
-En este momento para habilitar el bridge debe ejecutar los siguientes comandos (no olvide reemplazar los nombres de las dos interfaces de red [.filename]#fxp0# y [.filename]#xl0# por las suyas):
+En este momento para habilitar el bridge debes ejecutar los siguientes comandos (no olvide reemplazar los nombres de las dos interfaces de red <[.filename]#fxp0# y [.filename]#xl0# por las suyas):
-[source,shell]
+[source, shell]
....
# sysctl net.link.ether.bridge.config=fxp0:0,xl0:0
# sysctl net.link.ether.bridge.ipfw=1
@@ -132,16 +135,16 @@ En este momento para habilitar el bridge debe ejecutar los siguientes comandos (
La primera línea especifica qué interfaces deben ser activadas por el bridge, la segunda habilitará el firewall en el bridge y finalmente la tercera habilitará el bridge.
-En este momento debería poder insertar la máquina entre dos conjuntos de host sin comprometer ninguna capacidad de comunicación entre ellos. Si ha funcionado, el siguiente paso es añadir lo siguiente `net.link.ether.bridge._[blah]_=_[blah]_` al archivo [.filename]#/etc/sysctl.conf#, para que se ejecute al inicio.
+En este punto deberías poder insertar la máquina entre dos conjuntos de hosts sin comprometer las habilidades de comunicación entre ellas. Si es así, el siguiente paso es añadir las partes `net.link.ether.bridge._[blah]_=_[blah]_` de estas filas al fichero [.filename]#/etc/sysctl.conf# para que se ejecuten en el arranque.
[[filtering-bridges-ipfirewall]]
== Configurando el firewall
-Ahora es el momento de crear su propio archivo de configuración con las reglas personalizadas del firewall para proteger la red interna. Se encontrará con algunas complicaciones porque no todas las funcionalidades del firewall están disponibles en los paquetes bridge. Hay además una diferencia entre los paquetes que están en proceso de reenvío y los paquetes que está recibiendo la máquina local. En general, los paquetes de entrada pasan por el firewall solo una vez, no dos veces, como suele ser el caso; en realidad se filtran solo después de la recepción, por lo que las reglas que usan `out` o `xmit` nunca coincidirán. Yo utilizo `in via`, que es una sintaxis más antigua pero tiene sentido cuando la lees. Otra limitación es que usted solo puede usar solo los comandos `pass` o `reject` para los paquetes filtrados por un bridge. Opciones más complejas como `divert`, `forward` o `reject` no están disponibles. Estas opciones pueden seguir utilizándose, pero solo en el tráfico hacia o desde la propia máquina bridge (si tiene una dirección IP).
+Ahora es el momento de crear tu propio archivo de configuración con las reglas personalizadas del firewall para proteger la red interna. Te encontrarás con algunas complicaciones porque no todas las funcionalidades del firewall están disponibles en los paquetes bridge. Hay además una diferencia entre los paquetes que están en proceso de reenvío y los paquetes que estás recibiendo la máquina local. En general, los paquetes de entrada pasan por el firewall solo una vez, no dos veces, como suele ser el caso; en realidad se filtran solo después de la recepción, por lo que las reglas que usan `out` o `xmit` nunca coincidirán. Yo utilizo`in via`, que es una sintaxis más antigua pero tiene sentido cuando la lees. Otra limitación es que solo puedes usar solo los comandos `pass` o `reject` para los paquetes filtrados por un bridge. Opciones más complejas como `divert`, `forward` o `reject` no están disponibles. Estas opciones pueden seguir utilizándose, pero solo en el tráfico hacia o desde la propia máquina bridge (si tiene una dirección IP).
-El concepto de firewall con estado se incluyó por primera vez en FreeBSD 4.0. Es una gran mejora para el tráfico `UDP`, el cual generalmente es una solicitud de salida seguida poco después por una respuesta con exactamente el mismo conjunto de direcciones IP y números de puerto (pero obviamente con origen y destino invertidos). Con los firewalls que no mantienen el estado no hay forma de lidiar con este tipo de tráfico en una única sesión. Pero con un firewall que puede "recordar" un paquete saliente de `UDP` y, durante los próximos minutos, permitir una respuesta el manejo de servicios `UDP` es trivial. El siguiente ejemplo muestra cómo hacerlo. Es posible hacer lo mismo con los paquetes `TCP`. Esto le permite evitar algunos ataques de denegación de servicio y y otras maldades, pero también hace que su tabla de estado crezca rápidamente de tamaño.
+El concepto de firewall con estado se incluyó por primera vez en FreeBSD 4.0. Es una gran mejora para el tráfico UDP, el cual generalmente es una solicitud de salida seguida poco después por una respuesta con exactamente el mismo conjunto de direcciones IP y números de puerto (pero obviamente con origen y destino invertidos). Con los firewalls que no mantienen el estado no hay forma de lidiar con este tipo de tráfico en una única sesión. Pero con un firewall que puede "recordar" un paquete saliente de UDP y, durante los próximos minutos, permitir una respuesta el manejo de servicios UDP es trivial. El siguiente ejemplo muestra cómo hacerlo. Es posible hacer lo mismo con los paquetes TCP. Esto le permite evitar algunos ataques de denegación de servicio y y otras maldades, pero también hace que su tabla de estado crezca rápidamente de tamaño.
-Veamos una configuración de ejemplo. Lo primero, tenga en cuenta que en la parte superior del archivo [.filename]#/etc/rc.firewall# ya existen reglas predeterminadas para la interfaz de loopback [.filename]#lo0#, por lo que no es necesario preocuparse de ellas. Las reglas personalizadas deben colocarse en un archivo separado (por ejemplo, [.filename]#/etc/rc.firewall.local#) y cargarse al inicio del sistema, modificando la línea en el archivo [.filename]#/etc/rc.conf# donde definimos el firewall en modo `open`:
+Veamos una configuración de ejemplo. Lo primero, ten en cuenta que en la parte superior del archivo [.filename]#/etc/rc.firewall# ya existen reglas predeterminadas para la interfaz de loopback [.filename]#lo0#, por lo que no es necesario preocuparse de ellas. Las reglas personalizadas deben colocarse en un archivo separado (por ejemplo, [.filename]#/etc/rc.firewall.local#) y cargarse al inicio del sistema, modificando la línea en el archivo [.filename]#/etc/rc.conf# donde definimos el firewall en modo `open`:
[.programlisting]
....
@@ -150,82 +153,82 @@ firewall_type="/etc/rc.firewall.local"
[IMPORTANT]
====
-Debe especificar la ruta __completa__, de lo contrario, no se cargará, con el riesgo de permanecer aislado de la red.
+Tienes que especificar la ruta _completa_, de otro modo no será cargada con el riesgo de quedar aislado de la red.
====
-Para nuestro ejemplo, imagine que tiene la interfaz [.filename]#fxp0# conectada hacia el exterior (Internet) y la [.filename]#xl0# hacia el interior (LAN). La máquina que haga de brigde tiene la IP `1.2.3.4` (su ISP no puede proporcionarle una dirección así, pero para nuestro ejemplo nos sirve).
+Para nuestro ejemplo imagina tener el interfaz [.filename]#fxp0# conectado hacia el exterior (Internet) y el [.filename]#xl0# hacia el interior (LAN). La máquina bridge tiene la IP `1.2.3.4` (no es posible que tu ISP te proporcione una dirección como esta, pero para nuestro ejemplo vale).
[.programlisting]
....
-# Cosas para las que tenemos que mantener el estado
+# Things that we have kept state on before get to go through in a hurry
add check-state
-# Desechar todas las redes RFC 1918
+# Throw away RFC 1918 networks
add drop all from 10.0.0.0/8 to any in via fxp0
add drop all from 172.16.0.0/12 to any in via fxp0
add drop all from 192.168.0.0/16 to any in via fxp0
-# Permitir que la máquina bridge diga lo que quiera
-# (si la máquina es IP-less no incluya estas líneas)
+# Allow the bridge machine to say anything it wants
+# (if the machine is IP-less do not include these rows)
add pass tcp from 1.2.3.4 to any setup keep-state
add pass udp from 1.2.3.4 to any keep-state
add pass ip from 1.2.3.4 to any
-# Permitir que los hosts internos digan lo que quieran
+# Allow the inside hosts to say anything they want
add pass tcp from any to any in via xl0 setup keep-state
add pass udp from any to any in via xl0 keep-state
add pass ip from any to any in via xl0
-# Sección TCP
-# Permitir SSH
+# TCP section
+# Allow SSH
add pass tcp from any to any 22 in via fxp0 setup keep-state
-# Permitir SMTP solo hacia el servidor de correo
+# Allow SMTP only towards the mail server
add pass tcp from any to relay 25 in via fxp0 setup keep-state
-# Permitir transferencias de zona solo por el servidor de nombres esclavo [dns2.nic.it]
+# Allow zone transfers only by the secondary name server [dns2.nic.it]
add pass tcp from 193.205.245.8 to ns 53 in via fxp0 setup keep-state
-# Dejar pasar ident probes. Es mejor que esperar a que se agote el tiempo
+# Pass ident probes. It is better than waiting for them to timeout
add pass tcp from any to any 113 in via fxp0 setup keep-state
-# Dejar paso al rango "quarantine"
+# Pass the "quarantine" range
add pass tcp from any to any 49152-65535 in via fxp0 setup keep-state
-# Sección UDP
-# Permitir DNS solo hacia el servidor de nombres
+# UDP section
+# Allow DNS only towards the name server
add pass udp from any to ns 53 in via fxp0 keep-state
-# Dejar pasar el rango "quarantine"
+# Pass the "quarantine" range
add pass udp from any to any 49152-65535 in via fxp0 keep-state
-# Sección ICMP
-# Dejar paso a 'ping'
+# ICMP section
+# Pass 'ping'
add pass icmp from any to any icmptypes 8 keep-state
-# Dejar paso a los mensajes de error generados por 'traceroute'
+# Pass error messages generated by 'traceroute'
add pass icmp from any to any icmptypes 3
add pass icmp from any to any icmptypes 11
-# Todo lo demás es sospechoso.
+# Everything else is suspect
add drop log all from any to any
....
-Aquellos de ustedes que hayan instalado firewalls antes notarán que faltan algunas cosas. En particular, no hay reglas contra la suplantación de identidad, de hecho, _no_ las añadimos:
+Aquellos de vosotros que hayáis configurado firewalls antes habréis notado que faltan algunas cosas. En particular, no hay reglas anti-spoofing, de hecho _no_ añadimos:
[.programlisting]
....
add deny all from 1.2.3.4/8 to any in via fxp0
....
-Es decir, descartar los paquetes que vienen del exterior diciendo pertenecer a nuestra red. Esto es algo que normalmente haría para asegurarse de que alguien no trata de evadir el filtrado de paquetes, generando paquetes corruptos que parecen ser de dentro de la red. El problema es que hay _al menos_ un host en la interfaz externa que no desea ignorar: el router. Pero, por lo general, el ISP tiene reglas contra la suplantación de identidad en su router, por lo que no tenemos que preocuparnos excesivamente.
+Es decir, descarta paquetes que vienen de fuera pero que dicen que son de nuestra red. Esto es algo que harías de forma habitual para intentar que nadie evita el filtrado de paquetes generando paquetes malvados que parece que provienen del interior. El problema con eso es que hay _al menos_ un host en el interfaz exterior que no quieres ignorar: el router. Pero normalmente, el ISP hace anti-spoofing en su router, así que no nos tenemos que preocupar demasiado.
La última regla parece ser un duplicado exacto de la regla predeterminada, es decir, no dejar pasar nada que no esté específicamente permitido. Pero hay una diferencia: todo tráfico sospechoso será registrado.
-Hay dos reglas para permitir el tráfico SMTP y `DNS` hacia los servidores de correo y de nombres, si dispone de ellos. Obviamente todo el conjunto de reglas debe ser definido de acuerdo con sus preferencias personales; esto es solo un ejemplo específico (el formato de la regla se describe con precisión en la página del manual de man:ipfw[8]). Tenga en cuenta que para que el "relay" y el "ns" funcionen las búsquedas del servicio de nombres deben funcionar _antes de_ que el bridge esté activado. Este es un ejemplo de cómo asegurarse de configurar la IP en la tarjeta de red correcta. Otra forma de hacer las cosas sería especificar la dirección IP en lugar del nombre del host (requerido si la máquina no tiene IP).
+Hay dos reglas para pasar el tráfico SMTP y DNS hacia el servidor de correo y el servidor de nombres si los tienes. Obviamente el conjunto entero de reglas debería estar personalizado al estilo de cada uno, esto es sólo un ejemplo específico (el formato de las reglas está descrito con detalle en la página de manual de man:ipfw[8]). Como alternativa es posible especificar la dirección IP en lugar del nombre del host (requerido si la máquina no tiene IP).
-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 dæmon 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).
+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
-Muchas partes de este artículo han sido obtenidas, actualizadas y adaptadas de un texto antiguo sobre el bridging, editado por Nick Sayer. Unas cuantas ideas muy inspiradoras vienen de una introducción sobre el bridging que escribió Steve Peterson.
+Muchas partes de este artículo han sido obtenidas, actualizadas y adaptadas de un texto antiguo sobre bridging, editado por Nick Sayer. Unas cuantas ideas muy inspiradoras vienen de una introducción sobre bridging que escribió Steve Peterson.
Mi más sincero agradecimiento a Luigi Rizzo por la implementación del código de bridge en FreeBSD y por el tiempo que ha dedicado a responder todas mis preguntas.
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/freebsd-releng/_index.adoc b/documentation/content/es/articles/freebsd-releng/_index.adoc
index e1614931a8..2e3acb07ee 100644
--- a/documentation/content/es/articles/freebsd-releng/_index.adoc
+++ b/documentation/content/es/articles/freebsd-releng/_index.adoc
@@ -46,7 +46,10 @@ 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[]
+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[]
@@ -122,7 +125,7 @@ Aproximadamente dos meses antes del ciclo de lanzamiento, el {teamRe} decide una
[cols="1,1", frame="none", options="header"]
|===
| Hito
-| Fecha Prevista
+| Fecha Esperada
|{branchHead} slush:
|May 27, 2016
@@ -136,52 +139,52 @@ Aproximadamente dos meses antes del ciclo de lanzamiento, el {teamRe} decide una
|`doc/` tree slush [1]:
|June 24, 2016
-|Ports quarterly branch [2]:
+|Rama trimestral de ports [2]:
|July 1, 2016
-|{branchStablex} branch:
+|rama {branchStablex}:
|July 8, 2016
|`doc/` tree tag [3]:
|July 8, 2016
-|BETA1 build starts:
+|Comienzo de la construcción de BETA1:
|July 8, 2016
|{branchHead} thaw:
|July 9, 2016
-|BETA2 build starts:
+|Comienzo de la construcción de BETA2:
|July 15, 2016
-|BETA3 build starts [*]:
+|Comienzo de la construcción de BETA3 [*]:
|July 22, 2016
-|{branchRelengx} branch:
+|rama {branchRelengx}:
|July 29, 2016
-|RC1 build starts:
+|Comienzo de la construcción de RC1:
|July 29, 2016
-|{branchStablex} thaw:
+|rama {branchStablex} thaw:
|July 30, 2016
-|RC2 build starts:
+|Comienzo de la construcción de RC2:
|August 5, 2016
-|Final Ports package builds [4]:
+|Construcción final de paquetes de Ports [4]:
|August 6, 2016
-|Ports release tag:
+|Etiqueta de versión de Ports:
|August 12, 2016
-|RC3 build starts [*]:
+|Comienzo de la construcción de RC3 [*]:
|August 12, 2016
-|RELEASE build starts:
+|Comienzo de la construcción de RELEASE:
|August 19, 2016
-|RELEASE announcement:
+|Anuncio de RELEASE:
|September 2, 2016
|===
@@ -191,7 +194,7 @@ Los elementos marcados con "[*]" identifican los pasos realizados solo "cuando s
====
. El "slush" (semi congelación) del árbol `doc/` está coordinado por el {teamDoceng}.
-. La rama trimestral de Ports que se 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}.
+. 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).
@@ -215,7 +218,7 @@ Para realizar el seguimiento de los "blanket approvals", el {teamRe} usa un repo
[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.
+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}.
@@ -226,7 +229,7 @@ El programa también se añade a la página web del Proyecto, en el repositorio
[NOTE]
====
-La mayor parte de las veces, el fichero the [.filename]#schedule.adoc# se puede copiar de una versión anterior y actualizarlo como corresponda.
+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.
@@ -290,10 +293,10 @@ Cuando el programa del ciclo de lanzamientos está disponible, estos archivos de
| Qué Cambiar
|[.filename]#~/shared/releases.adoc#
-|Cambiar `beta-upcoming` de `IGNORE` a `INCLUDE`
+|Cambia `beta-upcoming` de `IGNORE` a `INCLUDE`
|[.filename]#~/shared/releases.adoc#
-|Cambiar `beta-testing` de `IGNORE` a `INCLUDE`
+|Cambia `beta-testing` de `IGNORE` a `INCLUDE`
|===
@@ -309,16 +312,16 @@ Cuando se transita de `PRERELEASE` a `BETA`, estos ficheros necesitan ser actual
| Qué Cambiar
|[.filename]#share/releases.adoc#
-|Actualizar `betarel-vers` a `BETA__1__`
+|Actualiza `betarel-vers` a `BETA__1__`
|[.filename]#~/website/data/en/news/news.toml#
-|Añadir una entrada anunciando la `BETA`
+|Añade una entrada anunciando la `BETA`
|[.filename]#~/website/static/security/advisory-template.txt#
-|Añadir la nueva `BETA`, `RC`, o `RELEASE` final a la plantilla
+|Añade la nueva `BETA`, `RC` o `RELEASE` final a la plantilla
|[.filename]#~/website/static/security/errata-template.txt#
-|Añadir la nueva `BETA`, `RC`, o `RELEASE` final a la plantilla
+|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/`.
@@ -335,7 +338,7 @@ Los documentos relevantes relacionados con una versión están en el repositorio
[[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.
+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}
@@ -374,13 +377,50 @@ Una vez que la rama {branchStablex} ha sido escrita en el repositorio, haz los s
| Qué Cambiar
|[.filename]#stable/12/UPDATING#
-|Actualizar la versión de FreeBSD y eliminar la nota acerca de `WITNESS`
+|Actualiza la versión de FreeBSD y elimina el aviso acerca de `WITNESS`
|[.filename]#stable/12/contrib/jemalloc/include/jemalloc/jemalloc_FreeBSD.h#
-a|
+a|
-[source, shell, subs="attributes"]
-.... #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`
+[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:
@@ -392,34 +432,34 @@ Después, en la rama {branchHead} , que se convertirá en una nueva versión may
| Qué Cambiar
|[.filename]#head/UPDATING#
-|Actualizar la versión de FreeBSD
+|Actualiza la versión de FreeBSD
|[.filename]#head/sys/conf/newvers.sh#
-|Actualizar el valor de `BRANCH` para reflejar `CURRENT`, e incrementar `REVISION`
+|Actualiza el valor de `BRANCH` para que muestre el valor `CURRENT` e incrementa `REVISION`
|[.filename]#head/Makefile.inc1#
-|Actalizar `TARGET_TRIPLE` y `MACHINE_TRIPLE`
+|Actualiza `TARGET_TRIPLE` y `MACHINE_TRIPLE`
|[.filename]#head/sys/sys/param.h#
-|Actualizar `__FreeBSD_version`
+|Actualiza `__FreeBSD_version`
|[.filename]#head/gnu/usr.bin/cc/cc_tools/freebsd-native.h#
-|Actualizar `FBSD_MAJOR` y `FBSD_CC_VER`
+|Actualiza `FBSD_MAJOR` y `FBSD_CC_VER`
|[.filename]#head/contrib/gcc/config.gcc#
-|Añadir la sección `freebsdversion.h`
+|Añade la sección `freebsdversion.h`
|[.filename]#head/lib/clang/llvm.build.mk#
-|Actualizar el valor de `OS_VERSION`
+|Actualiza el valor de `OS_VERSION`
|[.filename]#head/lib/clang/freebsd_cc_version.h#
-|Actualizar `FREEBSD_CC_VERSION`
+|Actualiza `FREEBSD_CC_VERSION`
|[.filename]#head/lib/clang/include/lld/Common/Version.inc#
-|Actualizar `LLD_REVISION_STRING`
+|Actualiza `LLD_REVISION_STRING`
|[.filename]#head/Makefile.libcompat#
-|Actualizar `LIB32CPUFLAGS`
+|Actualiza `LIB32CPUFLAGS`
|===
[[releng-stable]]
@@ -439,16 +479,16 @@ En preparación para la congelación del código en una rama `estable`, varios a
| Qué Cambiar
|[.filename]#sys/conf/newvers.sh#
-|Actualizar el valor de `BRANCH` para reflejar `PRERELEASE`
+|Actualiza el valor de `BRANCH` para que muestre `PRERELEASE`
|[.filename]#Makefile.inc1#
-|Actualizar `TARGET_TRIPLE`
+|Actualiza `TARGET_TRIPLE`
|[.filename]#lib/clang/llvm.build.mk#
-|Actualizar `OS_VERSION`
+|Actualiza `OS_VERSION`
|[.filename]#Makefile.libcompat#
-|Actualizar `LIB32CPUFLAGS`
+|Actualiza `LIB32CPUFLAGS`
|===
[[releng-stable-builds-beta]]
@@ -488,25 +528,28 @@ Cuando la primera construcción `RC` (Release Candidate) está lista para comenz
| Qué Cambiar
|[.filename]#releng/12.0/sys/conf/newvers.sh#
-|Cambiar `BETA__X__` a `RC1`
+|Cambia `BETA__X__` a `RC1`
|[.filename]#releng/12.0/sys/sys/param.h#
-|Actualizar `__FreeBSD_version`
+|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#
-|Reemplazar `latest` con `quarterly` como repositorio de paquetes por defecto
+|Sustituye `latest` con `quarterly` para la localización por defecto del repositorio de paquetes
|[.filename]#releng/12.0/release/pkg_repos/release-dvd.conf#
-|Reemplazar `latest` with `quarterly` como repositorio de paquetes por defecto
+|Sustituye `latest` con `quarterly` para la localización por defecto del repositorio de paquetes
|[.filename]#stable/12/sys/conf/newvers.sh#
-|Actualizar `BETA__X__` con `PRERELEASE`
+|Actualiza `BETA__X__` con `PRERELEASE`
|[.filename]#stable/12/sys/sys/param.h#
-|Actualizar `__FreeBSD_version`
+|Actualiza `__FreeBSD_version`
|[.filename]#svnadmin/conf/approvers#
-|Añadir una nueva línea "approvers" para la rama "releng" como se hizo para la rama "stable"
+|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"]
@@ -621,7 +664,7 @@ Asumiendo estas rutas de sistemas de archivos, [.filename]#thermite.sh# sería i
# ./thermite.sh -c ./builds-12.conf
....
-Una vez que se han completado las compilaciones, se dispone de guiones 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`:
+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"]
....
@@ -644,7 +687,7 @@ Los scripts de apoyo sólo se utilizan en las construcciones de instantáneas de
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.
+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}.
@@ -659,13 +702,13 @@ En preparación para la construcción de la liberación, varios archivos necesit
| Qué Cambiar
|[.filename]#sys/conf/newvers.sh#
-|Actualizar el valor de `BRANCH` a `RELEASE`
+|Actualiza el valor de `BRANCH` a `RELEASE`
|[.filename]#UPDATING#
-|Añadir la fecha prevista del anuncio
+|Añade la fecha prevista del anuncio
-|[.filename]#lib/csu/common/crtbrand.c#
-|Reemplazar `__FreeBSD_version` con el valor en [.filename]#sys/sys/param.h#
+|[.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:
@@ -748,7 +791,7 @@ Según se acerca el final del ciclo de liberación, es común tener varios EN ca
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.
+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}.
@@ -777,26 +820,26 @@ Cuando un lanzamiento llega al final de su vida, las referencias a ese lanzamien
|[.filename]#~/website/themes/beastie/layouts/index.html#
-|Eliminar las referencias a `u-relXXX-announce` y `u-relXXX-announce`.
+|Elimina las referencias a `u-relXXX-announce` y `u-relXXX-announce`.
|[.filename]#~/website/content/en/releases/_index.adoc#
-|Mover las variables `u-relXXX-*` de la lista de versiones soportadas a la lista de Legacy Releases.
+|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#
-|Actualizar la rama releng apropiada para reflejar que la rama ya no está soportada.
+|Actualiza la rama releng apropiada para que se refleje que la rama ya no está soportada.
|[.filename]#~/website/content/en/security/_index.adoc#
-|Eliminar la rama de la lista de ramas soportadas.
+|Elimina la rama de la lista de ramas soportadas.
|[.filename]#~/website/content/en/where.adoc#
-|Eliminar las URLs de la versión.
+|Elimina las URLs para la release.
|[.filename]#~/website/themes/beastie/layouts/partials/sidenav.html#
-|Eliminar las referencias a `u-relXXX-announce` y `u-relXXX-announce`.
+|Elimina las referencias a `u-relXXX-announce` y `u-relXXX-announce`.
|[.filename]#~/website/static/security/advisory-template.txt#
-|Eliminar las referencias a las ramas releng y release.
+|Elimina las referencias a las ramas de release y releng.
|[.filename]#~/website/static/security/errata-template.txt#
-|Eliminar las referencias a las ramas releng y release.
+|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
index 58f0c047cb..6045bf93d0 100644
--- a/documentation/content/es/articles/freebsd-releng/_index.po
+++ b/documentation/content/es/articles/freebsd-releng/_index.po
@@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2021-11-04 20:26-0300\n"
-"PO-Revision-Date: 2022-01-12 15:04+0000\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"
@@ -21,12 +21,7 @@ msgstr ""
#: 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"
+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
@@ -36,18 +31,6 @@ msgid "FreeBSD Release Engineering"
msgstr "Ingeniería de versiones de FreeBSD"
#. type: Plain text
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:50
-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-releng/_index.adoc:63
msgid "Abstract"
msgstr "Resumen"
@@ -139,10 +122,10 @@ msgid ""
"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)."
+"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
@@ -195,8 +178,8 @@ 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."
+"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
@@ -276,134 +259,231 @@ msgstr ""
"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 ""
-"| 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"
+msgid "September 2, 2016"
+msgstr "September 2, 2016"
#. type: delimited block = 4
#: documentation/content/en/articles/freebsd-releng/_index.adoc:197
@@ -428,8 +508,8 @@ msgid ""
"milestones into account. The quarterly branch is created by the "
"{teamPortmgr}."
msgstr ""
-"La rama trimestral de Ports que se va a ser utilizada se determina por el "
-"momento en el que se planifica la construcción de la `RC`final. Una nueva "
+"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}."
@@ -498,8 +578,8 @@ msgid ""
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."
+"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
@@ -547,7 +627,7 @@ 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 "
+"que el Ingeniero de Lanzamientos especifica el período límite con un correo "
"electrónico a los desarrolladores de FreeBSD."
#. type: Plain text
@@ -593,8 +673,8 @@ 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 the [.filename]#schedule.adoc# se "
-"puede copiar de una versión anterior y actualizarlo como corresponda."
+"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
@@ -711,8 +791,8 @@ msgid ""
"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á "
+"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
@@ -723,8 +803,8 @@ msgid ""
"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]."
+"seguir las link:https://wiki.freebsd.org/Releng/"
+"ChangeRequestGuidelines[Change Request Guidelines]."
#. type: Title ===
#: documentation/content/en/articles/freebsd-releng/_index.adoc:283
@@ -782,28 +862,48 @@ msgstr ""
"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 ""
-"| 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"
+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
@@ -824,38 +924,49 @@ msgstr ""
"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 ""
-"| 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"
+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
@@ -877,10 +988,10 @@ msgid ""
"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."
+"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
@@ -917,7 +1028,7 @@ msgid ""
"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 "
+"`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 "
@@ -1025,66 +1136,170 @@ msgstr ""
"los siguientes cambios:"
#. type: Table
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:404
+#: 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 ""
-"| 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"
+"[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 ""
-"| 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"
+"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
-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 "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
@@ -1095,75 +1310,129 @@ msgstr ""
"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 ""
-"| 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"
+msgid "Update `LIB32CPUFLAGS`"
+msgstr "Actualiza `LIB32CPUFLAGS`"
#. type: Title ==
#: documentation/content/en/articles/freebsd-releng/_index.adoc:485
@@ -1199,38 +1468,47 @@ msgstr ""
"alto de la rama estable:"
#. type: Table
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:512
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:502
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:745
#, 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"
+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
@@ -1333,62 +1611,86 @@ msgid "% svn cp ^/{branchStablex} {branchRelengx}\n"
msgstr "% svn cp ^/{branchStablex} {branchRelengx}\n"
#. type: Table
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:578
-#, 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"
+#: 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:585
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:588
#, no-wrap
msgid ""
"% svn propdel -R svn:mergeinfo {branchRelengx}\n"
@@ -1400,7 +1702,7 @@ msgstr ""
"% svn commit {branchStablex}\n"
#. type: Plain text
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:588
+#: 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 "
@@ -1411,7 +1713,7 @@ msgstr ""
"chapter.adoc# en el repositorio del Proyecto de Documentación."
#. type: Plain text
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:590
+#: 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} "
@@ -1423,24 +1725,25 @@ msgstr ""
"approvers#."
#. type: Plain text
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:592
+#: 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."
+"{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:594
+#: 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:597
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:600
msgid ""
"This section describes the general procedures producing FreeBSD development "
"snapshots and releases."
@@ -1449,13 +1752,13 @@ msgstr ""
"y versiones del desarrollo de FreeBSD."
#. type: Title ===
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:599
+#: 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:602
+#: 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."
@@ -1464,13 +1767,13 @@ msgstr ""
"para producir instantáneas de desarrollo y versiones."
#. type: Title ====
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:604
+#: 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:607
+#: 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 "
@@ -1482,7 +1785,7 @@ msgstr ""
"invocación de los distintos objetivos."
#. type: Plain text
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:610
+#: 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."
@@ -1500,7 +1803,7 @@ msgstr ""
"separado para cada invocación."
#. type: Plain text
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:612
+#: 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#:"
@@ -1509,13 +1812,13 @@ msgstr ""
"construir una única versión en [.filename]#/scratch#:"
#. type: delimited block . 4
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:616
+#: 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:619
+#: 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 "
@@ -1526,7 +1829,7 @@ msgstr ""
"diferente, cree un [.filename]#release.conf# personalizado que contenga:"
#. type: delimited block . 4
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:627
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:630
#, no-wrap
msgid ""
"# release.sh configuration for powerpc/powerpc64\n"
@@ -1542,18 +1845,18 @@ msgstr ""
"KERNEL=\"GENERIC64\"\n"
#. type: Plain text
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:630
+#: 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:634
+#: 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:637
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:640
msgid ""
"See and [.filename]#src/release/release.conf.sample# for more details and "
"example usage."
@@ -1562,13 +1865,13 @@ msgstr ""
"detalles y ejemplos de uso."
#. type: Title ====
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:639
+#: 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:642
+#: 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 "
@@ -1584,7 +1887,7 @@ msgstr ""
"utilizando un archivo de configuración específico para esa arquitectura."
#. type: Plain text
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:644
+#: 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/"
@@ -1597,7 +1900,7 @@ msgstr ""
"las instantáneas de desarrollo de {branchHead} y {branchStablex}."
#. type: Plain text
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:646
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:649
msgid ""
"Using [.filename]#thermite.sh# is covered in <<releng-build-snapshot>> and "
"<<releng-build-release>>."
@@ -1606,7 +1909,7 @@ msgstr ""
"<<releng-build-release>>."
#. type: Plain text
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:649
+#: 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 [."
@@ -1621,7 +1924,7 @@ msgstr ""
"variables especiales en los archivos por construcción."
#. type: Plain text
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:651
+#: 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 "
@@ -1637,7 +1940,7 @@ msgstr ""
"versión mayor de la respectiva rama."
#. type: Plain text
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:654
+#: 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 "
@@ -1647,30 +1950,30 @@ msgid ""
"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 "
+"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:656
+#: 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:658
+#: 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:660
+#: 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:661
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:664
msgid ""
"[.filename]#12-amd64-GENERIC-snap.conf# - [.filename]#defaults-12.conf# - [."
"filename]#main.conf#"
@@ -1679,14 +1982,14 @@ msgstr ""
"filename]#main.conf#"
#. type: Plain text
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:663
+#: 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:667
+#: 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 "
@@ -1697,13 +2000,13 @@ msgstr ""
"la repetición entre los archivos de cada construcción."
#. type: Title ===
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:670
+#: 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:673
+#: 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 "
@@ -1715,20 +2018,20 @@ msgstr ""
"construcción prístino."
#. type: Plain text
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:675
+#: 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# "
+"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:678
+#: 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 "
@@ -1741,7 +2044,7 @@ msgstr ""
"`EVERYTHINGISFINE` está definida en [.filename]#main.conf#."
#. type: delimited block = 4
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:682
+#: 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 "
@@ -1753,7 +2056,7 @@ msgstr ""
"al estar definida."
#. type: Plain text
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:687
+#: 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 "
@@ -1766,14 +2069,14 @@ 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-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:689
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:692
msgid ""
"Assuming these filesystem paths, [.filename]#thermite.sh# would be invoked "
"as:"
@@ -1782,7 +2085,7 @@ msgstr ""
"sería invocado como:"
#. type: delimited block . 4
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:696
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:699
#, no-wrap
msgid ""
"# cd /releng/scripts-snapshot/scripts\n"
@@ -1796,30 +2099,29 @@ msgstr ""
"# ./thermite.sh -c ./builds-12.conf\n"
#. type: Plain text
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:699
+#: 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 guiones "
+"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:704
+#: 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"
+"# ./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:709
+#: 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."
@@ -1829,7 +2131,7 @@ msgstr ""
"PGP."
#. type: delimited block = 4
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:716
+#: 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 "
@@ -1843,13 +2145,13 @@ msgstr ""
"encontrar link:here[aquí]."
#. type: Title ===
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:719
+#: 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:723
+#: 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 "
@@ -1864,17 +2166,17 @@ msgstr ""
"`release` en lugar de `snap` como se mencionaba anteriormente."
#. type: Plain text
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:725
+#: 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 [."
+"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:729
+#: 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, "
@@ -1896,7 +2198,7 @@ msgstr ""
"{branchStablex} o {branchRelengx}."
#. type: Plain text
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:732
+#: 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} "
@@ -1914,43 +2216,46 @@ msgstr ""
"Colección de Ports."
#. type: Plain text
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:734
+#: 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:749
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:747
#, 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"
+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 ""
-"| 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"
+"Reemplaza `__FreeBSD_version` con el valor del fichero [.filename]#sys/sys/"
+"param.h#"
#. type: Plain text
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:754
+#: 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. "
@@ -1963,7 +2268,7 @@ msgstr ""
"{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:759
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:762
#, no-wrap
msgid ""
"% svn cp ^/{branchRelengx}@r306420 {branchReleasex}\n"
@@ -1973,14 +2278,13 @@ msgstr ""
"% svn commit {branchReleasex}\n"
#. type: Title ==
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:762
+#: 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"
+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:765
+#: 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."
@@ -1989,27 +2293,27 @@ msgstr ""
"desarrollo de FreeBSD y las versiones en los mirrors del Proyecto."
#. type: Title ===
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:767
+#: 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:770
+#: 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:772
+#: 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:775
+#: 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 "
@@ -2027,27 +2331,26 @@ msgstr ""
"ejecutar directamente lo siguiente:"
#. type: delimited block . 4
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:779
+#: 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"
+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:782
+#: 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 "
+"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:783
+#: 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"
@@ -2057,7 +2360,7 @@ msgstr ""
"mirrors del Proyecto"
#. type: Plain text
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:785
+#: 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 "
@@ -2070,7 +2373,7 @@ msgstr ""
"snapshots# o [.filename]#/archive/tmp/releases#, respectivamente."
#. type: delimited block = 4
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:789
+#: 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."
@@ -2080,13 +2383,13 @@ msgstr ""
"usuario `archive`."
#. type: Title ===
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:792
+#: 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:796
+#: 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 "
@@ -2099,7 +2402,7 @@ msgstr ""
"filename]#/archive/tmp# a [.filename]#/archive/pub/FreeBSD#."
#. type: delimited block = 4
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:800
+#: 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."
@@ -2108,7 +2411,7 @@ msgstr ""
"filename]#/archive/pub# deben estar en el mismo sistema de ficheros lógico."
#. type: Plain text
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:803
+#: 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# "
@@ -2119,7 +2422,7 @@ msgstr ""
"serán reemplazados con enlaces duros, incrementando el tiempo de propagación."
#. type: delimited block = 4
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:807
+#: 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."
@@ -2128,12 +2431,12 @@ msgstr ""
"ya que este paso debe ser ejecutado como el usuario `archive`."
#. type: Plain text
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:810
+#: 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:816
+#: documentation/content/en/articles/freebsd-releng/_index.adoc:819
#, no-wrap
msgid ""
"% cd /archive/tmp/snapshots\n"
@@ -2142,35 +2445,34 @@ msgid ""
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"
+"% /usr/local/bin/rsync -avH /archive/tmp/snapshots/* /archive/pub/FreeBSD/snapshots/\n"
#. type: Plain text
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:819
+#: 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:821
+#: 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:824
+#: 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:826
+#: 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:830
+#: 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 "
@@ -2185,12 +2487,12 @@ msgstr ""
"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:834
+#: 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:837
+#: 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."
@@ -2200,11 +2502,11 @@ 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."
+"secciones `Background`, `Problem Description`, `Impact`, y `Workaround` si "
+"es aplicable."
#. type: Plain text
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:839
+#: 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 "
@@ -2215,7 +2517,7 @@ msgstr ""
"{branchStable}."
#. type: Plain text
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:842
+#: 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 "
@@ -2230,13 +2532,13 @@ msgstr ""
"de Errata Notice deberían ser enviadas al {teamSecteam}."
#. type: Title ===
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:844
+#: 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:847
+#: 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 "
@@ -2248,13 +2550,13 @@ msgstr ""
"{branchRelengx}."
#. type: Title ==
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:849
+#: 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:852
+#: 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)."
@@ -2263,13 +2565,13 @@ msgstr ""
"cuando una versión alcanza su EoL (End-of-Life)."
#. type: Title ===
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:854
+#: 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:857
+#: 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:"
@@ -2278,63 +2580,571 @@ msgstr ""
"lanzamiento deben ser eliminadas y/o actualizadas en el sitio web:"
#. type: Table
-#: documentation/content/en/articles/freebsd-releng/_index.adoc:888
-#, 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"
+#: 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
index bccc770ae3..d97a5fde16 100644
--- a/documentation/content/es/articles/freebsd-update-server/_index.adoc
+++ b/documentation/content/es/articles/freebsd-update-server/_index.adoc
@@ -26,7 +26,10 @@ 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[]
+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[]
@@ -41,7 +44,7 @@ endif::[]
[.abstract-title]
Resumen
-Este artículo describe cómo construir un Servidor de FreeBSD Update interno. El https://svnweb.freebsd.org/base/user/cperciva/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.
+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.
'''
@@ -76,11 +79,11 @@ Como mínimo, las actualizaciones requieren que cree una versión de FreeBSD que
[[Configuration]]
== Configuración: Instalación & Preparación
-Descarga el software https://svnweb.freebsd.org/base/user/cperciva/freebsd-update-build/[freebsd-update-server] instalando los paquetes package:devel/subversion[] y package:security/ca_root_nss[] y ejecuta:
+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]
....
-% svn co https://svn.freebsd.org/base/user/cperciva/freebsd-update-build freebsd-update-server
+% git clone https://github.com/freebsd/freebsd-update-build.git freebsd-update-server
....
Actualiza el fichero [.filename]#scripts/build.conf# apropiadamente. Se crea durante todas las operaciones de construcción (build).
@@ -114,7 +117,7 @@ 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 port 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.
+<.> 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:
+
@@ -123,7 +126,7 @@ Los parámetros a considerar son:
% 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 paŕametro 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.
+<.> 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.
@@ -157,7 +160,7 @@ export KERNELPARTS="generic"
export EOL=1275289200 <.>
....
+
-<.> La clave hash man:sha256[1] para la versión que se desea, se publica en el respectivo link:https://www.FreeBSD.org/releases/[anuncio de liberación].
+<.> 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]
@@ -255,7 +258,7 @@ Entonces, se vuelve a realizar la construcción de todo (build world), con los p
[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://svnweb.freebsd.org/base/user/cperciva/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."
+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]
@@ -333,7 +336,7 @@ they look sensible, then run
to sign the release.
....
-Aprobar la construccińo 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.
+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]
....
@@ -404,7 +407,7 @@ Cree el directorio de parches para la versión correspondiente en [.filename]#/u
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, but 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:
+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]
....
@@ -531,7 +534,7 @@ files to confirm that they look sensible, then run
to sign the build.
....
-Sigue el mismo proceso descrito anteriormente para dar su aprobación a una compilación:
+Sigue el mismo proceso descrito anteriormente para dar tu aprobación a una compilación:
[source, shell]
....
diff --git a/documentation/content/es/articles/freebsd-update-server/_index.po b/documentation/content/es/articles/freebsd-update-server/_index.po
index ca4df1a7d6..5da313495c 100644
--- a/documentation/content/es/articles/freebsd-update-server/_index.po
+++ b/documentation/content/es/articles/freebsd-update-server/_index.po
@@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2021-11-04 20:26-0300\n"
-"PO-Revision-Date: 2022-01-18 15:31+0000\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"
@@ -21,10 +21,7 @@ msgstr ""
#: 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"
+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
@@ -34,18 +31,6 @@ 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: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[]\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-update-server/_index.adoc:45
msgid "Abstract"
msgstr "Resumen"
@@ -54,23 +39,22 @@ msgstr "Resumen"
#: documentation/content/en/articles/freebsd-update-server/_index.adoc:49
msgid ""
"This article describes building an internal FreeBSD Update Server. The "
-"https://svnweb.freebsd.org/base/user/cperciva/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."
+"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://svnweb.freebsd.org/base/user/cperciva/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."
+"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
@@ -89,8 +73,8 @@ 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]."
+"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
@@ -196,21 +180,21 @@ msgstr "Configuración: Instalación & Preparación"
#. type: Plain text
#: documentation/content/en/articles/freebsd-update-server/_index.adoc:88
msgid ""
-"Download the https://svnweb.freebsd.org/base/user/cperciva/freebsd-update-"
-"build/[freebsd-update-server] software by installing package:devel/"
-"subversion[] and package:security/ca_root_nss[], and execute:"
+"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://svnweb.freebsd.org/base/user/cperciva/"
-"freebsd-update-build/[freebsd-update-server] instalando los paquetes package:"
-"devel/subversion[] y package:security/ca_root_nss[] y ejecuta:"
+"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 "% svn co https://svn.freebsd.org/base/user/cperciva/freebsd-update-build freebsd-update-server\n"
+msgid "% git clone https://github.com/freebsd/freebsd-update-build.git freebsd-update-server\n"
msgstr ""
-"% svn co https://svn.freebsd.org/base/user/cperciva/freebsd-update-build "
-"freebsd-update-server\n"
+"% 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
@@ -310,7 +294,7 @@ 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 "
+"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()` "
@@ -318,11 +302,11 @@ msgid ""
"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 port defecto [."
+"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."
@@ -330,10 +314,10 @@ msgstr ""
#. 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:"
+"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 "
+"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
@@ -345,30 +329,30 @@ 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 "
+"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 "
+"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 paŕametro es opcional; se utilizará autenticación estándar por "
+"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."
+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."
+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."
+"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
@@ -420,11 +404,9 @@ msgid ""
"export KERNELPARTS=\"generic\"\n"
msgstr ""
"# SHA256 hash of RELEASE disc1.iso image.\n"
-"export RELH=1ea1f6f652d7c5f5eab7ef9f8edbed50cb664b08ed761850f95f48e86cc71ef5 "
-"<.>\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 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"
@@ -441,20 +423,24 @@ msgstr ""
"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 ""
-"<.> The man:sha256[1] hash key for the desired release, is published within "
-"the respective link:https://www.FreeBSD.org/releases/[release "
-"announcement]. <.> 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 ""
-"<.> La clave hash man:sha256[1] para la versión que se desea, se publica en "
-"el respectivo link:https://www.FreeBSD.org/releases/[anuncio de liberación]"
-". <.> 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/"
+"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:"
@@ -504,15 +490,13 @@ 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"
+"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"
"...................++\n"
"e is 65537 (0x10001)\n"
@@ -594,31 +578,19 @@ msgid ""
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"
+"/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"
+"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"
@@ -683,19 +655,19 @@ msgstr ""
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://svnweb.freebsd.org/base/user/cperciva/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.\""
+"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://svnweb."
-"freebsd.org/base/user/cperciva/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 "
+"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.\""
@@ -719,34 +691,21 @@ msgid ""
"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"
+"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"
+"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"
+"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
@@ -875,7 +834,7 @@ msgid ""
"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ńo si todo es correcto. Puedes encontrar más "
+"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 "
@@ -904,14 +863,10 @@ msgid ""
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"
+"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
@@ -964,8 +919,8 @@ 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."
+"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
@@ -975,8 +930,8 @@ msgid ""
"[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."
+"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
@@ -1017,9 +972,9 @@ msgid ""
"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."
+"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
@@ -1076,8 +1031,8 @@ 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]."
+"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
@@ -1094,17 +1049,15 @@ msgstr ""
"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, but 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:"
+"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"
+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
@@ -1240,56 +1193,31 @@ msgid ""
"...\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"
+"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"
@@ -1363,20 +1291,15 @@ msgid ""
"to sign the build.\n"
msgstr ""
"New updates:\n"
-"kernel|generic|/GENERIC/kernel.symbols|f|0|0|0555|0|7c8dc176763f96ced0a57fc04"
-"e7c1b8d793f27e006dd13e0b499e1474ac47e10|\n"
-"kernel|generic|/GENERIC/kernel|f|0|0|0555|0|33197e8cf15bbbac263d17f39c153c9d4"
-"89348c2c534f7ca1120a1183dec67b1|\n"
+"kernel|generic|/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|4d434abf0983df"
-"9bc47435670d307fa882ef4b348ed8ca90928d250f42ea0757|\n"
-"src|contrib|/contrib/bind9/lib/dns/openssldsa_link.c|f|0|10000|0644|0|c6805c3"
-"9f3da2a06dd3f163f26c314a4692d4cd9a2d929c0acc88d736324f550|\n"
-"src|contrib|/contrib/bind9/lib/dns/opensslrsa_link.c|f|0|10000|0644|0|fa0f741"
-"7ee9da42cc8d0fd96ad24e7a34125e05b5ae075bd6e3238f1c022a712|\n"
+"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"
@@ -1388,7 +1311,7 @@ msgstr ""
#: 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 su aprobación a una "
+"Sigue el mismo proceso descrito anteriormente para dar tu aprobación a una "
"compilación:"
#. type: delimited block . 4
@@ -1404,14 +1327,10 @@ msgid ""
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"
+"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
@@ -1480,9 +1399,9 @@ msgstr ""
"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."
+"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
@@ -1568,3 +1487,13 @@ 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 e584b3d893..94bc14311f 100644
--- a/documentation/content/es/articles/ipsec-must/_index.adoc
+++ b/documentation/content/es/articles/ipsec-must/_index.adoc
@@ -1,8 +1,11 @@
---
-title: Verificación independiente de la funcionalidad de IPsec en FreeBSD
authors:
- - author: David Honig
+ -
+ author: 'David Honig'
email: honig@sprynet.com
+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"]
---
@@ -40,62 +43,61 @@ 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
@@ -114,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
@@ -124,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 extref:{handbook}security[Manual de FreeBSD, ipsec] 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]
....
@@ -141,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]
....
@@ -152,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 a017de0258..85509f86d3 100644
--- a/documentation/content/es/articles/leap-seconds/_index.adoc
+++ b/documentation/content/es/articles/leap-seconds/_index.adoc
@@ -1,8 +1,10 @@
---
-title: Soporte para segundos intercalares en 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
@@ -40,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 extref:{handbook}network-servers[NTP, network-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 1b3837fce6..cb87f9d468 100644
--- a/documentation/content/es/articles/linux-users/_index.adoc
+++ b/documentation/content/es/articles/linux-users/_index.adoc
@@ -1,12 +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
+ -
+ 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
@@ -40,7 +43,7 @@ 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.
'''
@@ -49,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 extref:{handbook}bsdinstall[Installing FreeBSD, bsdinstall] 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 extref:{handbook}ports[paquetes de FreeBSD y la Colección de Ports, 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.
@@ -76,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: extref:{handbook}ports[Uso de pkgng para la administración de paquetes binarios, pkgng-intro].
+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 extref:{handbook}ports[sección 5.5, ports-using] 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 extref:{handbook}ports[Usando la Colección de Ports, ports-using] 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 extref:{handbook}ports[Paquetes o Ports, ports-using]. 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]
....
@@ -141,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
@@ -176,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]
....
@@ -185,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]
....
@@ -196,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:
-* extref:{handbook}firewalls[PF, firewalls-pf]
-* extref:{handbook}firewalls[IPFILTER, firewalls-ipf]
-* extref:{handbook}firewalls[IPFW, firewalls-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]
....
@@ -213,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]
....
@@ -232,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]
....
@@ -249,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 extref:{handbook}updating-upgrading[capítulo sobre la actualización, updating-upgrading] 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_`
@@ -309,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`
@@ -325,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 extref:{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 dbf63c9a84..79edec91dc 100644
--- a/documentation/content/es/articles/mailing-list-faq/_index.adoc
+++ b/documentation/content/es/articles/mailing-list-faq/_index.adoc
@@ -1,8 +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
+ -
+ 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
@@ -39,7 +42,7 @@ 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 extref:{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/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].
'''
@@ -50,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?
@@ -58,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 extref:{faq}[Las preguntas más frecuentes en 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 FreeBSD-questions], extref:{explaining-bsd}[Explicando BSD], y extref:{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]]
@@ -149,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 extref:{faq}[este documento, bikeshed-painting]. 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 extref:{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 fa0446375c..287ea3e9bb 100644
--- a/documentation/content/es/articles/nanobsd/_index.adoc
+++ b/documentation/content/es/articles/nanobsd/_index.adoc
@@ -1,8 +1,11 @@
---
-title: Introducción a NanoBSD
authors:
- - author: Daniel Gerzo
-copyright: 2006 The FreeBSD Documentation Project
+ -
+ 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"]
---
@@ -40,7 +43,7 @@ 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.
'''
@@ -49,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
[...]
@@ -89,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 <.>
@@ -112,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
....
@@ -136,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]
....
@@ -176,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]
....
@@ -253,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 848aae8b44..84e66b0984 100644
--- a/documentation/content/es/articles/port-mentor-guidelines/_index.adoc
+++ b/documentation/content/es/articles/port-mentor-guidelines/_index.adoc
@@ -1,12 +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
-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
@@ -41,76 +43,76 @@ 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 extref:{porters-handbook}[Manual del Porter], la extref:{pr-guidelines}[Guía para el manejo de informes de problemas], y la extref:{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 8f22947060..39f0c4d396 100644
--- a/documentation/content/es/articles/pr-guidelines/_index.adoc
+++ b/documentation/content/es/articles/pr-guidelines/_index.adoc
@@ -1,12 +1,16 @@
---
-title: Guía para el manejo de informes de problemas
authors:
- - author: Dag-Erling Smørgrav
- - author: Hiten Pandya
+ -
+ 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
@@ -40,7 +44,7 @@ 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.
'''
@@ -49,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]
====
@@ -108,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>>
@@ -123,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_
@@ -144,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
@@ -182,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
@@ -218,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
@@ -253,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
@@ -268,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
@@ -288,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
@@ -298,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
@@ -444,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.
-* extref:{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 678bdfc25a..be565b7905 100644
--- a/documentation/content/es/articles/problem-reports/_index.adoc
+++ b/documentation/content/es/articles/problem-reports/_index.adoc
@@ -1,12 +1,16 @@
---
-title: Escribiendo informes de problemas de FreeBSD
authors:
- - author: Dag-Erling Smørgrav
- - author: Mark Linimon
+ -
+ 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
@@ -40,7 +44,7 @@ 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.
'''
@@ -49,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 extref:{porters-handbook}[Manual del Porter, port-upgrading] dará los mejores resultados. (Es posible que también desee leer extref:{contributing}[Cómo contribuir a la colección de ports de FreeBSD, ports-contributing]).
+* 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 extref:{faq}[versiones de FreeBSD, LATEST-VERSION], 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 extref:{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 extref:{faq}[compatibilidad del hardware, hardware], las extref:{faq}[aplicaciones de usuario, applications] y la extref:{faq}[configuración del kernel, kernelconfig].
-* Las extref:{handbook}eresources[listas de correo, eresources-mail], 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 extref:{handbook}eresources[la lista del manual, eresources-mail] 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 extref:{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).
-* extref:{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/remote-install/_index.adoc b/documentation/content/es/articles/remote-install/_index.adoc
index 08519b2825..c64720369c 100644
--- a/documentation/content/es/articles/remote-install/_index.adoc
+++ b/documentation/content/es/articles/remote-install/_index.adoc
@@ -1,9 +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
+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"]
---
@@ -41,7 +44,7 @@ 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}`.
'''
@@ -50,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
@@ -63,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
@@ -100,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#
@@ -115,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]
....
@@ -124,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]
....
@@ -135,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 extref:{handbook}install-steps[Instalación de FreeBSD, install] 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
@@ -223,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
@@ -249,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]
....
@@ -298,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
@@ -341,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 196569f725..28977fcea3 100644
--- a/documentation/content/es/articles/solid-state/_index.adoc
+++ b/documentation/content/es/articles/solid-state/_index.adoc
@@ -1,13 +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
+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
@@ -52,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.
@@ -61,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]
....
@@ -98,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/*
@@ -217,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
@@ -244,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 798c43d82e..68d6db89a1 100644
--- a/documentation/content/es/articles/vinum/_index.adoc
+++ b/documentation/content/es/articles/vinum/_index.adoc
@@ -63,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 extref:{handbook}geom[arquitectura GEOM, 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]]
@@ -150,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]]
@@ -510,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.
+
@@ -586,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 extref:{handbook}boot[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`.
+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 extref:{handbook}boot[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.
+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/books/handbook/advanced-networking/_index.adoc b/documentation/content/es/books/handbook/advanced-networking/_index.adoc
index 361443e8b4..beb4a8ad3f 100644
--- a/documentation/content/es/books/handbook/advanced-networking/_index.adoc
+++ b/documentation/content/es/books/handbook/advanced-networking/_index.adoc
@@ -1,22 +1,24 @@
---
-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
-showBookMenu: true
-weight: 34
-path: "/books/handbook/"
+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: 29
+:sectnumoffset: 34
:partnums:
:source-highlighter: rouge
:experimental:
@@ -47,234 +49,164 @@ 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.
-Para ilustrar diferentes aspectos del sistema de encaminamiento veamos el siguiente ejemplo obtenido mediante `netstat`.
+[[network-routing-default]]
+=== Enrutamiento Básico
+
+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"]
+|La ruta incluye referencias a hardware Ethernet (link).
|===
-| 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)
-|===
-
-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].
-
-=== Máquinas con doble pertenencia (Dual Homed Hosts)
-
-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.
-
-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.
+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].
-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-static-routes]]
+=== Configurando un Router con Rutas Estáticas
-[[network-dedicated-router]]
-=== Construcción de un "route"
+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.
-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.
-
-=== Configuración de rutas estáticas
-
-==== Configuración manual
-
-Vamos a suponer que tenemos la siguiente topología de red:
+[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[].
+====
-....
+Considera la siguiente red:
- 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
-....
+image::static-routes.png[]
-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".
+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.
-Si observamos la tabla de rutas de `RouterA` veremos algo como lo siguiente:
+Antes de añadir ninguna ruta estática, la tabla de enrutamiento de `RouterA` tiene este aspecto:
-[source,shell]
+[source, shell]
....
% netstat -nr
Routing tables
@@ -283,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.
+
+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`:
-[source,shell]
+[.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.
-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:
+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.
+
+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-advanced-wireless]]
+== Autenticación Inalámbrica Avanzada
-[[network-wireless]]
-== Redes sin cables ("wireless")
+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.
-=== Introducción
+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.
-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".
+[[network-wireless-wpa-eap-tls]]
+=== WPA with EAP-TLS
-=== Modos de operación Wireless
+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).
-Existen dos formas diferentes de configurar dispositivos wireless 802.11: BSS e IBSS.
+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.
-==== Modo BSS
+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.
-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.
+Como antes, la configuración se hace mediante [.filename]#/etc/wpa_supplicant.conf#:
-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.
-
-==== 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.
-
-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:
+El siguiente paso es levantar la interfaz:
-[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.
-En FreeBSD 5.2-RELEASE y posteriores se deben emplear las siguientes opciones en lugar de las anteriormente expuestas:
+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.
-[source,shell]
+Añade las siguientes líneas a [.filename]#/etc/wpa_supplicant.conf# para configurar los parámetros relacionados con EAP-PEAP:
+
+[.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.
-==== Clientes
+Ahora `B` debería ser capaz de detecta a `A`:
-Un cliente "wireless" es un sistema que se comunica con un punto de acceso o directamente con otro cliente "wireless".
+[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
+....
+
+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.
-[source,shell]
+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]
....
-# 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.
-
-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:
+después regenerado con la opción correcta antes de establecer otros parámetros:
-[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.
+El parámetro `hostap` indica que el interfaz está funcionando en modo punto de acceso basado en host.
-==== Cifrado
+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#:
-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.
-
-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"
+....
-===== El paquete bsd-airtools
+Antes de intentar configurar man:hostapd[8], primero configura los parámetros básicos presentados en <<network-wireless-ap-basic>>.
-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.
+===== WPA2-PSK
-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.
+WPA2-PSK está pensado para pequeñas redes donde no se puede o no es deseable utilizar un servidor de autenticación.
-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.
+La configuración se hace en [.filename]#/etc/hostapd.conf#:
-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.
+[.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 <.>
+....
-===== Las utilidades `wicontrol`, `ancontrol` y `raycontrol`
+<.> 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.
-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].
+El siguiente paso es arrancar man:hostapd[8]:
-===== `ifconfig`
+[source, shell]
+....
+# service hostapd forcestart
+....
-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.
+[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
+....
+
+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`.
+
+[[network-usb-tethering]]
+== Tethering USB
+
+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).
+
+* 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
@@ -635,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>
@@ -653,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
@@ -675,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
+
+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.
+
+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.
+
+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.
+
+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:
+
+[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]
+....
+# rfcomm_pppd -s -C 7 -l rfcomm-server
+....
+
+=== Protocolos Bluetooth
-=== Protocolo de adaptación y de control de enlace a nivel lógico (L2CAP)
+Esta sección proporciona un resumen de varios protocolos Bluetooth, sus funciones, y sus utilidades asociadas.
-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.
+==== Logical Link Control and Adaptation Protocol (L2CAP)
-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.
+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.
-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].
+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.
-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:
+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].
-[source,shell]
+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
@@ -725,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:
@@ -739,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
@@ -755,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.
-
-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).
-
-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.
-
-En FreeBSD el protocolo RFCOMM se implementa utilizando la capa de "sockets" de Bluetooth.
+==== Comunicación por Radio Frecuencia (RFCOMM)
-=== Enparejamiento de dispositivos
+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.
-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";
- }
-....
+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.
-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`.
+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.
-[.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
@@ -829,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:
-
-* 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.
-
-El Acceso a Redes con perfiles PPP (LAN) se puede utilizar en las siguientes situaciones:
+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.
-* 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).
+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:
-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]
-....
-# rfcomm_pppd -a 00:80:37:29:19:a4 -c -C dun -l rfcomm-dialup
+[source, shell]
....
-
-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)
+==== Perfil de Puerto Serie (SPP)
-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.
+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.
-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.
+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]
....
-# rfcomm_sppd -a 00:07:E0:00:0B:CA -t /dev/ttyp6
-rfcomm_sppd[94692]: Starting on /dev/ttyp6...
+# rfcomm_sppd -a 00:07:E0:00:0B:CA -t
+rfcomm_sppd[94692]: Starting on /dev/pts/6...
+/dev/pts/6
....
-Una vez conectado el pseudo tty se puede utilizar como un puerto serie.
+Una vez conectado, el pseudo tty puede ser usado como un puerto serie:
-[source,shell]
+[source, shell]
....
-# cu -l ttyp6
+# cu -l /dev/pts/6
....
-=== Solución de problemas
-
-==== Un dispositivo remoto no puede conectarse
-
-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.
-
-[source,shell]
-....
-# hccontrol -n ubt0hci write_node_role_switch 0
-....
-
-==== 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
-
-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
+El pseudo tty se imprime en stdout y se puede leer mediante scripts:
[.programlisting]
....
-options BRIDGE
+PTS=`rfcomm_sppd -a 00:07:E0:00:0B:CA -t`
+cu -l $PTS
....
-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.
+=== Resolución de problemas
-==== Soporte de conformado de tráfico
+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:
-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:
-
-[.programlisting]
-....
-net.link.ether.bridge=1
+[source, shell]
....
-
-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
-....
-
-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:
-
-[.programlisting]
-....
-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:
+=== Habilitando el Bridge
-[.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.
-|===
+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.
-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.
+El bridge se crea clonando una interfaz. Para crear la interfaz bridge:
-[[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]
+[source, shell]
....
-portmap_enable="YES"
-nfs_server_enable="YES"
-mountd_flags="-r"
+# 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
....
-mountd se ejecuta automáticamente cuando se activa el servidor NFS.
+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.
-En el cliente debemos asegurarnos de que se encuentra activada la activada la siguiente opción dentro de [.filename]#/etc/rc.conf#:
+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]
-....
-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 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]
+[source, shell]
....
-/cdrom -ro host1 host2 host3
+# ifconfig bridge0 addm fxp0 addm fxp1 up
+# ifconfig fxp0 up
+# ifconfig fxp1 up
....
-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.
+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]
....
-/home -alldirs 10.0.0.2 10.0.0.3 10.0.0.4
+cloned_interfaces="bridge0"
+ifconfig_bridge0="addm fxp0 addm fxp1 up"
+ifconfig_fxp0="up"
+ifconfig_fxp1="up"
....
-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.
+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]
....
-/a -maproot=root host.example.com box.example.org
+# ifconfig bridge0 inet 192.168.0.1/24
....
-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#.
-
-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:
-
-[.programlisting]
-....
-/usr/src client
-/usr/ports client
-....
-
-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:
-
-[.programlisting]
-....
-/usr/src /usr/ports client
-....
-
-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:
-
-[.programlisting]
-....
-# 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]
-....
-# 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#:
-
-[.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:
+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#.
-* 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.
+=== Activando Spanning Tree
-Se ruega consultar las páginas del manual de man:amd[8] y de man:amd.conf[8] para obtener más información.
+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.
-[[network-nfs-integration]]
-=== Problemas de integración con otras plataformas
+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.
-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.
+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:
-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.
-
-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.
-
-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.
-
-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.
-
-Ejemplos de configuración para el sistema FreeBSD (`freebox`) que actúa como cliente. Configuración del archivo [.filename]#/etc/fstab# de `freebox`:
-
-[.programlisting]
+[source, shell]
....
-fastws:/sfcompartido /projecto nfs rw,-r=1024 0 0
+# 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
....
-Orden de ejecución manual para `freebox`:
+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.
-[source,shell]
-....
-# mount -t nfs -o -r=1024 fastws:/sfcompartido /projecto
-....
-
-Ejemplos de configuración para el sistema FreeBSD que actúa como servidor. Configuración de [.filename]#/etc/fstab# de `fastws`:
+Otro bridge en la red tiene STP activado:
-[.programlisting]
+[source, shell]
....
-freebox:/sfcompartido /projecto nfs rw,-w=1024 0 0
+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
....
-Orden de ejecución manual para `fastws`:
-
-[source,shell]
-....
-# mount -t nfs -o -w=1024 freebox:/sfcompartido /projecto
-....
-
-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.
-
-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.
-
-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.
-
-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.
-
-[[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:
+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#.
-** 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.
+=== Parámetros de la Interfaz del Bridge
-* 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.
+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.
-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.
+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.
-* 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]
+[source, shell]
....
-
-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]
+# ifconfig bridge0 span fxp4
....
-.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
-....
-
-==== 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]
-....
-# 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).
+=== Monitorización SNMP
-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).
+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.
-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#.
-
-[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
-
-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
+Después, arranca man:bsnmpd[1]:
-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]
-....
-
-/volumenintercambiored -maproot=0:10 -alldirs margaux corbieres
+% 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)
....
-+
-A continuación indicar a mountd que vuelva a leer el fichero [.filename]#/etc/exports# como se ha indicado anteriormente.
-
-====
-===== NFS swap en FreeBSD 5.X
+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.
-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:
+Para monitorizar múltiples interfaces del bridge, se puede usar el BEGEMOT-BRIDGE-MIB privado:
-[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`.
+[[network-aggregation]]
+== Agregación de Enlaces y Conmutación
-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).
+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.
-[[network-isdn]]
-== RDSI
+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]:
-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.
+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.
-A continuación se comenta un esquema rápido sobre RDSI:
+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.
-* 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 extref:{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.
-
-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.
-
-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.
-
-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.
-
-.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
-
-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.
-====
-
-* _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.
-
-* _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.
-
-=== 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í.
-====
-
-==== Planificación
-
-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.
+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.
-La configuración de nuestro laboratorio debería ser algo parecido a lo siguiente:
+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.
-[.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`.
+broadcast::
+Este modo envía tráfico de salida a todos los puertos configurados en la interfaz lagg, y recibe tramas desde cualquier puerto.
-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.
+=== Ejemplos de Configuración
-===== 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.
-====
+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.
-[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)).
-
-[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.
-====
+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_:
-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]
-....
-20 * * * * root /usr/libexec/ypxfr passwd.byname
-21 * * * * root /usr/libexec/ypxfr passwd.byuid
+[source, shell]
....
+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
-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.
-
-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"
-....
-+
-. 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]
-....
-+:::::::::
+ 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
....
-+
-[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?.
+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_:
-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
-
-|`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 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.
-. 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.
-
-[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:
+Ahora puedes saber la dirección MAC del interfaz inalámbrico:
-`+:::::::::/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.
-====
-
-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]
-....
-# 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]
+[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:
+[[network-pxe-nfs]]
+=== Configurando el Entorno PXE
-[.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.
-
-=== Contenido de esta seccións
-
-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
+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#.
-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]
+. Arranca man:inetd[8]:
++
+[source, shell]
....
- /*
- * 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]
+# service inetd start
....
-/*
-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;
- };
-};
-*/
-....
-
-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.
+=== Depurando problemas en PXE
-=== 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.
-
-[[network-named-sandbox]]
-=== Ejecución de named en una " Sandbox"
-
-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`.
-
-[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.
-====
+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.
-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:
+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.
-* 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"
+# mount -t nfs 192.168.0.1:/b/tftpboot/FreeBSD/install /mnt
....
-+
-[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]
-....
-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.
-
-=== Elección de los servidores de hora adecuados
-
-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.
+****
-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.
+[[carp]]
+== Common Address Redundancy Protocol (CARP)
-=== Configuración de la máquina
+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.
-==== Configuración básica
+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.
-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].
+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.
-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.
+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`.
-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`.
+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.
-==== Configuración general
+[[carp-10x]]
+=== Usando CARP en FreeBSD 10 y Posterior
-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
-....
-
-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.
-
-==== 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]
+carp_load="YES"
....
-restrict default ignore
-....
-
-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:
-
-[.programlisting]
-....
-restrict 192.168.1.0 mask 255.255.255.0 notrust nomodify notrap
-....
-
-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:
+Para cargar el módulo ahora sin reiniciar:
-[source,shell]
+[source, shell]
....
-# ntpd -p /var/run/ntpd.pid
+# kldload carp
....
-[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:
+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]
....
- 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
+device carp
....
-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#:
+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:
-[.programlisting]
+[source, shell]
....
-natd_flags="-f /etc/natd.conf"
+# ifconfig em0 vhid 1 state backup
....
-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]
-....
-redirect_port tcp 192.168.0.2:6667 6667
-redirect_port tcp 192.168.0.3:80 80
-....
-
-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.
+Una vez completada la configuración, reinicia la red o reinicia cada sistema. Ahora la alta disponibilidad está habilitada.
-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.
+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].
-[[network-natdport-redirection]]
-=== Redirección de puertos
+[[carp-9x]]
+=== Usando CARP en FreeBSD 9 y Anteriores
-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.
+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.
-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.
-
-Se debe pasar la opción `-redirect_port` a man:natd[8] con los valores apropiados. La sintaxis es como sigue:
+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 proto IPdestino:PUERTOdestino[-PUERTOdestino]
- [aliasIP:]aliasPUERTO[-aliasPUERTO]
- [IPremota[:PUERTOremoto[-PUERTOremoto]]]
+if_carp_load="YES"
....
-Continuando con el ejemplo anterior los valores serían:
+Para cargar el módulo ahora sin reiniciar:
-[.programlisting]
+[source, shell]
....
- -redirect_port tcp 192.168.0.2:6667 6667
- -redirect_port tcp 192.168.0.3:80 80
+# kldload carp
....
-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]
-
-[[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:
+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]
....
--redirect_address IPlocal IPpública
+device carp
....
-[.informaltable]
-[cols="1,1", frame="none"]
-|===
-
-|IPlocal
-|La dirección IP interna del cliente de la LAN.
+Después, en cada host, crea un dispositivo CARP:
-|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]
+[source, shell]
....
--redirect_address 192.168.0.2 128.1.1.2
--redirect_address 192.168.0.3 128.1.1.3
+# ifconfig carp0 create
....
-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.
-
-[[network-inetd]]
-== El "Superservidor" inetd
+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`:
-[[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"
+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"
....
-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`.
-
--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]
-....
-# kill -HUP `cat /var/run/inetd.pid`
-....
-
-====
-
-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:
+En `hostb.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="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"
....
-A continuación se muestra una entrada de ejemplo para el dæmon ftpd para IPv4:
-
-[.programlisting]
-....
-ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l
-....
-
-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
+La tercera máquina, `hostc.example.org`, se configura para manejar el failover de cualquiera de los hosts maestros:
-|tcp6
-|TCP IPv6
-
-|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.
+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:
-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:
-
-[.programlisting]
+[source, shell]
....
- host1 <-----> host2
-Dirección IP 10.0.0.1 10.0.0.2
-....
-
-Configure la interfaz de `host1` así:
-
-[source,shell]
-....
-# ifconfig lp0 10.0.0.1 10.0.0.2
-....
-
-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
+# ifconfig carp0 down && ifconfig carp0 up
....
-[[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 436c066913..77e641218d 100644
--- a/documentation/content/es/books/handbook/audit/_index.adoc
+++ b/documentation/content/es/books/handbook/audit/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mac
next: books/handbook/disks
showBookMenu: true
weight: 21
-path: "/books/handbook/"
+path: "/books/handbook/audit/"
---
[[audit]]
diff --git a/documentation/content/es/books/handbook/basics/_index.adoc b/documentation/content/es/books/handbook/basics/_index.adoc
index 5b9082a604..d64db471d3 100644
--- a/documentation/content/es/books/handbook/basics/_index.adoc
+++ b/documentation/content/es/books/handbook/basics/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/install
next: books/handbook/ports
showBookMenu: true
weight: 5
-path: "/books/handbook/"
+path: "/books/handbook/basics/"
---
[[basics]]
diff --git a/documentation/content/es/books/handbook/bibliography/_index.adoc b/documentation/content/es/books/handbook/bibliography/_index.adoc
index 61fe4a2511..cbc64cc71f 100644
--- a/documentation/content/es/books/handbook/bibliography/_index.adoc
+++ b/documentation/content/es/books/handbook/bibliography/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mirrors
next: books/handbook/eresources
showBookMenu: true
weight: 37
-path: "/books/handbook/"
+path: "/books/handbook/bibliography/"
---
[appendix]
diff --git a/documentation/content/es/books/handbook/boot/_index.adoc b/documentation/content/es/books/handbook/boot/_index.adoc
index 088257bd75..22d8ec6f1e 100644
--- a/documentation/content/es/books/handbook/boot/_index.adoc
+++ b/documentation/content/es/books/handbook/boot/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/config
next: books/handbook/users
showBookMenu: true
weight: 16
-path: "/books/handbook/"
+path: "/books/handbook/boot/"
---
[[boot]]
diff --git a/documentation/content/es/books/handbook/config/_index.adoc b/documentation/content/es/books/handbook/config/_index.adoc
index 18a6474ece..5ad31b5fa1 100644
--- a/documentation/content/es/books/handbook/config/_index.adoc
+++ b/documentation/content/es/books/handbook/config/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partiii
next: books/handbook/boot
showBookMenu: true
weight: 15
-path: "/books/handbook/"
+path: "/books/handbook/config/"
---
[[config-tuning]]
diff --git a/documentation/content/es/books/handbook/cutting-edge/_index.adoc b/documentation/content/es/books/handbook/cutting-edge/_index.adoc
index 269a7e08a8..ca82196533 100644
--- a/documentation/content/es/books/handbook/cutting-edge/_index.adoc
+++ b/documentation/content/es/books/handbook/cutting-edge/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/l10n
next: books/handbook/partiv
showBookMenu: true
weight: 27
-path: "/books/handbook/"
+path: "/books/handbook/cutting-edge/"
---
[[updating-upgrading]]
diff --git a/documentation/content/es/books/handbook/desktop/_index.adoc b/documentation/content/es/books/handbook/desktop/_index.adoc
index 173e08e2b1..76ec90fe25 100644
--- a/documentation/content/es/books/handbook/desktop/_index.adoc
+++ b/documentation/content/es/books/handbook/desktop/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partii
next: books/handbook/multimedia
showBookMenu: true
weight: 9
-path: "/books/handbook/"
+path: "/books/handbook/desktop/"
---
[[desktop]]
diff --git a/documentation/content/es/books/handbook/disks/_index.adoc b/documentation/content/es/books/handbook/disks/_index.adoc
index 42b52bc402..045872543b 100644
--- a/documentation/content/es/books/handbook/disks/_index.adoc
+++ b/documentation/content/es/books/handbook/disks/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/audit
next: books/handbook/geom
showBookMenu: true
weight: 22
-path: "/books/handbook/"
+path: "/books/handbook/disks/"
---
[[disks]]
diff --git a/documentation/content/es/books/handbook/eresources/_index.adoc b/documentation/content/es/books/handbook/eresources/_index.adoc
index a540545c71..b3c5a6cc1f 100644
--- a/documentation/content/es/books/handbook/eresources/_index.adoc
+++ b/documentation/content/es/books/handbook/eresources/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/bibliography
next: books/handbook/pgpkeys
showBookMenu: true
weight: 38
-path: "/books/handbook/"
+path: "/books/handbook/eresources/"
---
[appendix]
diff --git a/documentation/content/es/books/handbook/firewalls/_index.adoc b/documentation/content/es/books/handbook/firewalls/_index.adoc
index a3bc6ba734..dc019bcbe5 100644
--- a/documentation/content/es/books/handbook/firewalls/_index.adoc
+++ b/documentation/content/es/books/handbook/firewalls/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/ppp-and-slip
next: books/handbook/mail
showBookMenu: true
weight: 31
-path: "/books/handbook/"
+path: "/books/handbook/firewalls/"
---
[[firewalls]]
diff --git a/documentation/content/es/books/handbook/geom/_index.adoc b/documentation/content/es/books/handbook/geom/_index.adoc
index 8b9caa3078..e197dde820 100644
--- a/documentation/content/es/books/handbook/geom/_index.adoc
+++ b/documentation/content/es/books/handbook/geom/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/disks
next: books/handbook/vinum
showBookMenu: true
weight: 23
-path: "/books/handbook/"
+path: "/books/handbook/geom/"
---
[[geom]]
diff --git a/documentation/content/es/books/handbook/install/_index.adoc b/documentation/content/es/books/handbook/install/_index.adoc
index ab49032fe4..5ae2ab0732 100644
--- a/documentation/content/es/books/handbook/install/_index.adoc
+++ b/documentation/content/es/books/handbook/install/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/introduction
next: books/handbook/basics
showBookMenu: true
weight: 4
-path: "/books/handbook/"
+path: "/books/handbook/install/"
---
[[bsdinstall]]
diff --git a/documentation/content/es/books/handbook/introduction/_index.adoc b/documentation/content/es/books/handbook/introduction/_index.adoc
index 3bf180c301..f15c2a554e 100644
--- a/documentation/content/es/books/handbook/introduction/_index.adoc
+++ b/documentation/content/es/books/handbook/introduction/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/parti
next: books/handbook/install
showBookMenu: true
weight: 3
-path: "/books/handbook/"
+path: "/books/handbook/introduction/"
---
[[introduction]]
diff --git a/documentation/content/es/books/handbook/jails/_index.adoc b/documentation/content/es/books/handbook/jails/_index.adoc
index de4a648073..35d3237ac4 100644
--- a/documentation/content/es/books/handbook/jails/_index.adoc
+++ b/documentation/content/es/books/handbook/jails/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/security
next: books/handbook/mac
showBookMenu: true
weight: 19
-path: "/books/handbook/"
+path: "/books/handbook/jails/"
---
[[jails]]
diff --git a/documentation/content/es/books/handbook/kernelconfig/_index.adoc b/documentation/content/es/books/handbook/kernelconfig/_index.adoc
index 5b9d9e5a4c..2c1d39391e 100644
--- a/documentation/content/es/books/handbook/kernelconfig/_index.adoc
+++ b/documentation/content/es/books/handbook/kernelconfig/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/multimedia
next: books/handbook/printing
showBookMenu: true
weight: 11
-path: "/books/handbook/"
+path: "/books/handbook/kernelconfig/"
---
[[kernelconfig]]
diff --git a/documentation/content/es/books/handbook/l10n/_index.adoc b/documentation/content/es/books/handbook/l10n/_index.adoc
index 1aead7da39..e171635d8c 100644
--- a/documentation/content/es/books/handbook/l10n/_index.adoc
+++ b/documentation/content/es/books/handbook/l10n/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/virtualization
next: books/handbook/cutting-edge
showBookMenu: true
weight: 26
-path: "/books/handbook/"
+path: "/books/handbook/l10n/"
---
[[l10n]]
diff --git a/documentation/content/es/books/handbook/linuxemu/_index.adoc b/documentation/content/es/books/handbook/linuxemu/_index.adoc
index 242b48c365..f87d6a1fb1 100644
--- a/documentation/content/es/books/handbook/linuxemu/_index.adoc
+++ b/documentation/content/es/books/handbook/linuxemu/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/printing
next: books/handbook/partiii
showBookMenu: true
weight: 13
-path: "/books/handbook/"
+path: "/books/handbook/linuxemu/"
---
[[linuxemu]]
diff --git a/documentation/content/es/books/handbook/mac/_index.adoc b/documentation/content/es/books/handbook/mac/_index.adoc
index bafb62a01e..36b2249051 100644
--- a/documentation/content/es/books/handbook/mac/_index.adoc
+++ b/documentation/content/es/books/handbook/mac/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/jails
next: books/handbook/audit
showBookMenu: true
weight: 20
-path: "/books/handbook/"
+path: "/books/handbook/mac/"
---
[[mac]]
diff --git a/documentation/content/es/books/handbook/mail/_index.adoc b/documentation/content/es/books/handbook/mail/_index.adoc
index de82abfb8d..48931b8cea 100644
--- a/documentation/content/es/books/handbook/mail/_index.adoc
+++ b/documentation/content/es/books/handbook/mail/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/firewalls
next: books/handbook/network-servers
showBookMenu: true
weight: 32
-path: "/books/handbook/"
+path: "/books/handbook/mail/"
---
[[mail]]
diff --git a/documentation/content/es/books/handbook/mirrors/_index.adoc b/documentation/content/es/books/handbook/mirrors/_index.adoc
index fb537896f4..3f4be5e456 100644
--- a/documentation/content/es/books/handbook/mirrors/_index.adoc
+++ b/documentation/content/es/books/handbook/mirrors/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partv
next: books/handbook/bibliography
showBookMenu: true
weight: 36
-path: "/books/handbook/"
+path: "/books/handbook/mirrors/"
---
[appendix]
diff --git a/documentation/content/es/books/handbook/multimedia/_index.adoc b/documentation/content/es/books/handbook/multimedia/_index.adoc
index 15ed67f3f0..1a2d165a1a 100644
--- a/documentation/content/es/books/handbook/multimedia/_index.adoc
+++ b/documentation/content/es/books/handbook/multimedia/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/desktop
next: books/handbook/kernelconfig
showBookMenu: true
weight: 10
-path: "/books/handbook/"
+path: "/books/handbook/multimedia/"
---
[[multimedia]]
diff --git a/documentation/content/es/books/handbook/network-servers/_index.adoc b/documentation/content/es/books/handbook/network-servers/_index.adoc
index 7280790fe2..790212e9c2 100644
--- a/documentation/content/es/books/handbook/network-servers/_index.adoc
+++ b/documentation/content/es/books/handbook/network-servers/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mail
next: books/handbook/advanced-networking
showBookMenu: true
weight: 33
-path: "/books/handbook/"
+path: "/books/handbook/network-servers/"
---
[[network-servers]]
diff --git a/documentation/content/es/books/handbook/parti.adoc b/documentation/content/es/books/handbook/parti.adoc
index 7c6258759d..bcbecc88d2 100644
--- a/documentation/content/es/books/handbook/parti.adoc
+++ b/documentation/content/es/books/handbook/parti.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/preface
next: books/handbook/introduction
showBookMenu: true
weight: 2
-path: "/books/handbook/"
+path: "/books/handbook/parti/"
---
[[getting-started]]
diff --git a/documentation/content/es/books/handbook/partii.adoc b/documentation/content/es/books/handbook/partii.adoc
index 5c061fac75..b2e25dfbd2 100644
--- a/documentation/content/es/books/handbook/partii.adoc
+++ b/documentation/content/es/books/handbook/partii.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/x11
next: books/handbook/desktop
showBookMenu: true
weight: 8
-path: "/books/handbook/"
+path: "/books/handbook/partii/"
---
[[common-tasks]]
diff --git a/documentation/content/es/books/handbook/partiii.adoc b/documentation/content/es/books/handbook/partiii.adoc
index e7f2e25d75..f5f29c0101 100644
--- a/documentation/content/es/books/handbook/partiii.adoc
+++ b/documentation/content/es/books/handbook/partiii.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/linuxemu
next: books/handbook/config
showBookMenu: true
weight: 14
-path: "/books/handbook/"
+path: "/books/handbook/partiii/"
---
[[system-administration]]
diff --git a/documentation/content/es/books/handbook/partiv.adoc b/documentation/content/es/books/handbook/partiv.adoc
index 9e75531f30..30ea4b5229 100644
--- a/documentation/content/es/books/handbook/partiv.adoc
+++ b/documentation/content/es/books/handbook/partiv.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/cutting-edge
next: books/handbook/serialcomms
showBookMenu: true
weight: 28
-path: "/books/handbook/"
+path: "/books/handbook/partiv/"
---
[[network-communication]]
diff --git a/documentation/content/es/books/handbook/partv.adoc b/documentation/content/es/books/handbook/partv.adoc
index 747b114800..de624a3ee7 100644
--- a/documentation/content/es/books/handbook/partv.adoc
+++ b/documentation/content/es/books/handbook/partv.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/advanced-networking
next: books/handbook/mirrors
showBookMenu: true
weight: 35
-path: "/books/handbook/"
+path: "/books/handbook/partv/"
---
[[appendices]]
diff --git a/documentation/content/es/books/handbook/pgpkeys/_index.adoc b/documentation/content/es/books/handbook/pgpkeys/_index.adoc
index 4b64405ca8..58975396a0 100644
--- a/documentation/content/es/books/handbook/pgpkeys/_index.adoc
+++ b/documentation/content/es/books/handbook/pgpkeys/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/eresources
next: books/handbook/freebsd-glossary
showBookMenu: true
weight: 39
-path: "/books/handbook/"
+path: "/books/handbook/pgpkeys/"
---
[appendix]
@@ -59,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 56d7863dd9..5de38dcdad 100644
--- a/documentation/content/es/books/handbook/ports/_index.adoc
+++ b/documentation/content/es/books/handbook/ports/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/basics
next: books/handbook/x11
showBookMenu: true
weight: 6
-path: "/books/handbook/"
+path: "/books/handbook/ports/"
---
[[ports]]
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 dbfbc15f6d..dccb64a6b6 100644
--- a/documentation/content/es/books/handbook/ppp-and-slip/_index.adoc
+++ b/documentation/content/es/books/handbook/ppp-and-slip/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/serialcomms
next: books/handbook/firewalls
showBookMenu: true
weight: 30
-path: "/books/handbook/"
+path: "/books/handbook/ppp-and-slip/"
---
[[ppp-and-slip]]
diff --git a/documentation/content/es/books/handbook/preface/_index.adoc b/documentation/content/es/books/handbook/preface/_index.adoc
index 6947f378d8..c1a9eb19b2 100644
--- a/documentation/content/es/books/handbook/preface/_index.adoc
+++ b/documentation/content/es/books/handbook/preface/_index.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/
next: books/handbook/parti
showBookMenu: true
weight: 1
-path: "/books/handbook/"
+path: "/books/handbook/preface/"
---
[preface]
diff --git a/documentation/content/es/books/handbook/printing/_index.adoc b/documentation/content/es/books/handbook/printing/_index.adoc
index 82267ef753..e64f964840 100644
--- a/documentation/content/es/books/handbook/printing/_index.adoc
+++ b/documentation/content/es/books/handbook/printing/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/kernelconfig
next: books/handbook/linuxemu
showBookMenu: true
weight: 12
-path: "/books/handbook/"
+path: "/books/handbook/printing/"
---
[[printing]]
diff --git a/documentation/content/es/books/handbook/security/_index.adoc b/documentation/content/es/books/handbook/security/_index.adoc
index 947632348f..f001e9d719 100644
--- a/documentation/content/es/books/handbook/security/_index.adoc
+++ b/documentation/content/es/books/handbook/security/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/users
next: books/handbook/jails
showBookMenu: true
weight: 18
-path: "/books/handbook/"
+path: "/books/handbook/security/"
---
[[security]]
diff --git a/documentation/content/es/books/handbook/serialcomms/_index.adoc b/documentation/content/es/books/handbook/serialcomms/_index.adoc
index 5624bf3b91..eeba86c9fa 100644
--- a/documentation/content/es/books/handbook/serialcomms/_index.adoc
+++ b/documentation/content/es/books/handbook/serialcomms/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partiv
next: books/handbook/ppp-and-slip
showBookMenu: true
weight: 29
-path: "/books/handbook/"
+path: "/books/handbook/serialcomms/"
---
[[serialcomms]]
diff --git a/documentation/content/es/books/handbook/users/_index.adoc b/documentation/content/es/books/handbook/users/_index.adoc
index 810dbb0608..f07c1022b5 100644
--- a/documentation/content/es/books/handbook/users/_index.adoc
+++ b/documentation/content/es/books/handbook/users/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/boot
next: books/handbook/security
showBookMenu: true
weight: 17
-path: "/books/handbook/"
+path: "/books/handbook/users/"
---
[[users]]
diff --git a/documentation/content/es/books/handbook/vinum/_index.adoc b/documentation/content/es/books/handbook/vinum/_index.adoc
index e76a07ac0a..d2e640d65a 100644
--- a/documentation/content/es/books/handbook/vinum/_index.adoc
+++ b/documentation/content/es/books/handbook/vinum/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/geom
next: books/handbook/virtualization
showBookMenu: true
weight: 24
-path: "/books/handbook/"
+path: "/books/handbook/vinum/"
---
[[vinum-vinum]]
diff --git a/documentation/content/es/books/handbook/virtualization/_index.adoc b/documentation/content/es/books/handbook/virtualization/_index.adoc
index 9678c86bd5..81d1745a4d 100644
--- a/documentation/content/es/books/handbook/virtualization/_index.adoc
+++ b/documentation/content/es/books/handbook/virtualization/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/vinum
next: books/handbook/l10n
showBookMenu: true
weight: 25
-path: "/books/handbook/"
+path: "/books/handbook/virtualization/"
---
[[virtualization]]
diff --git a/documentation/content/es/books/handbook/x11/_index.adoc b/documentation/content/es/books/handbook/x11/_index.adoc
index 357f059aac..7b7b852d0c 100644
--- a/documentation/content/es/books/handbook/x11/_index.adoc
+++ b/documentation/content/es/books/handbook/x11/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/ports
next: books/handbook/partii
showBookMenu: true
weight: 7
-path: "/books/handbook/"
+path: "/books/handbook/x11/"
---
[[x11]]
diff --git a/documentation/content/fr/books/handbook/_index.adoc b/documentation/content/fr/books/handbook/_index.adoc
index 6437981c87..7394e2a618 100644
--- a/documentation/content/fr/books/handbook/_index.adoc
+++ b/documentation/content/fr/books/handbook/_index.adoc
@@ -1,11 +1,17 @@
---
title: Manuel FreeBSD
-authors:
+authors:
+ - author: The FreeBSD Documentation Project
+copyright: 1995-2022 The FreeBSD Documentation Project
+description: A constantly evolving, comprehensive resource for FreeBSD users
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"]
+tags: ["FreeBSD Handbook", "Handbook"]
next: books/handbook/preface
+add_single_page_link: true
showBookMenu: true
weight: 0
path: "/books/handbook/"
+bookOrder: 1
---
= Manuel FreeBSD
@@ -29,23 +35,21 @@ 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::[]
ifdef::backend-pdf,backend-epub3[]
+:chapters-path:
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]
ifndef::env-beastie[]
+:chapters-path:
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
-[.abstract-title]
-Résumé
+include::{chapters-path}introduction.adoc[]
-Bienvenue à FreeBSD! Ce manuel décrit l'installation et l'utilisation quotidienne de _FreeBSD {rel121-current}-RELEASE_, et _FreeBSD {rel113-current}-RELEASE_. Ce document est le résultat du travail toujours en cours de nombreuses personnes. Certaines sections peuvent ne pas être à jour. Les personnes qui sont intéressées pour aider à mettre à jour et à compléter ce document devraient envoyer un courrier électronique à la {freebsd-doc}.
-
-La dernière version anglaise de ce document est disponible sur le https://www.FreeBSD.org/[site Web de FreeBSD]. Les versions antérieures peuvent être obtenues auprès de https://docs.FreeBSD.org/doc/[http://docs.FreeBSD.org/doc/]). Il peut être aussi téléchargé dans divers formats et options de compression depuis le https://download.freebsd.org/doc/[serveur FTP FreeBSD] ou l'un des nombreux crossref:mirrors[mirrors-ftp,sites miroirs]. Des versions imprimées peuvent être achetées auprès de https://www.freebsdmall.com/[FreeBSD Mall]. Des recherches dans le Manuel et les autres documents peuvent être effectuées à partir de la link:https://www.FreeBSD.org/search/[page de recherches].
-
-N.d.T.: Contactez {fonvieille} si vous voulez collaborer à la traduction.
+N.d.T.: Contactez {blackend} si vous voulez collaborer à la traduction.
'''
diff --git a/documentation/content/fr/books/handbook/advanced-networking/_index.adoc b/documentation/content/fr/books/handbook/advanced-networking/_index.adoc
index 267f96751c..5caca6fc40 100644
--- a/documentation/content/fr/books/handbook/advanced-networking/_index.adoc
+++ b/documentation/content/fr/books/handbook/advanced-networking/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/firewalls
next: books/handbook/partv
showBookMenu: true
weight: 37
-path: "/books/handbook/"
+path: "/books/handbook/advanced-networking/"
---
[[advanced-networking]]
diff --git a/documentation/content/fr/books/handbook/audit/_index.adoc b/documentation/content/fr/books/handbook/audit/_index.adoc
index 02cee30d48..ad936e2026 100644
--- a/documentation/content/fr/books/handbook/audit/_index.adoc
+++ b/documentation/content/fr/books/handbook/audit/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mac
next: books/handbook/disks
showBookMenu: true
weight: 21
-path: "/books/handbook/"
+path: "/books/handbook/audit/"
---
[[audit]]
diff --git a/documentation/content/fr/books/handbook/basics/_index.adoc b/documentation/content/fr/books/handbook/basics/_index.adoc
index 4a8526a51b..6786a43515 100644
--- a/documentation/content/fr/books/handbook/basics/_index.adoc
+++ b/documentation/content/fr/books/handbook/basics/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/bsdinstall
next: books/handbook/ports
showBookMenu: true
weight: 5
-path: "/books/handbook/"
+path: "/books/handbook/basics/"
---
[[basics]]
diff --git a/documentation/content/fr/books/handbook/bibliography/_index.adoc b/documentation/content/fr/books/handbook/bibliography/_index.adoc
index c45394b330..eb2064c42c 100644
--- a/documentation/content/fr/books/handbook/bibliography/_index.adoc
+++ b/documentation/content/fr/books/handbook/bibliography/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mirrors
next: books/handbook/eresources
showBookMenu: true
weight: 40
-path: "/books/handbook/"
+path: "/books/handbook/bibliography/"
---
[appendix]
diff --git a/documentation/content/fr/books/handbook/book.adoc b/documentation/content/fr/books/handbook/book.adoc
index 1b8886fdce..323d4a742b 100644
--- a/documentation/content/fr/books/handbook/book.adoc
+++ b/documentation/content/fr/books/handbook/book.adoc
@@ -2,7 +2,7 @@
title: Manuel FreeBSD
authors:
- author: Groupe de Documentation FreeBSD
-copyright: 1995-2020 Groupe de Documentation FreeBSD
+copyright: 1995-2022 Groupe de Documentation 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"]
---
@@ -42,15 +42,9 @@ ifndef::env-beastie[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
-[.abstract-title]
-[abstract]
-Résumé
+include::{chapters-path}introduction.adoc[]
-Bienvenue à FreeBSD! Ce manuel décrit l'installation et l'utilisation quotidienne de _FreeBSD {rel121-current}-RELEASE_, et _FreeBSD {rel113-current}-RELEASE_. Ce document est le résultat du travail toujours en cours de nombreuses personnes. Certaines sections peuvent ne pas être à jour. Les personnes qui sont intéressées pour aider à mettre à jour et à compléter ce document devraient envoyer un courrier électronique à la {freebsd-doc}.
-
-La dernière version anglaise de ce document est disponible sur le https://www.FreeBSD.org/[site Web de FreeBSD]. Les versions antérieures peuvent être obtenues auprès de https://docs.FreeBSD.org/doc/[http://docs.FreeBSD.org/doc/]). Il peut être aussi téléchargé dans divers formats et options de compression depuis le https://download.freebsd.org/doc/[serveur FTP FreeBSD] ou l'un des nombreux crossref:mirrors[mirrors-ftp,sites miroirs]. Des versions imprimées peuvent être achetées auprès de https://www.freebsdmall.com/[FreeBSD Mall]. Des recherches dans le Manuel et les autres documents peuvent être effectuées à partir de la link:https://www.FreeBSD.org/search/[page de recherches].
-
-N.d.T.: Contactez {fonvieille} si vous voulez collaborer à la traduction.
+N.d.T.: Contactez {blackend} si vous voulez collaborer à la traduction.
'''
@@ -88,6 +82,8 @@ include::{chapters-path}printing/_index.adoc[leveloffset=+1]
include::{chapters-path}linuxemu/_index.adoc[leveloffset=+1]
+include::{chapters-path}wine/_index.adoc[leveloffset=+1]
+
// Section three
include::{chapters-path}partiii.adoc[]
diff --git a/documentation/content/fr/books/handbook/boot/_index.adoc b/documentation/content/fr/books/handbook/boot/_index.adoc
index b5ba9fef37..ff55605f62 100644
--- a/documentation/content/fr/books/handbook/boot/_index.adoc
+++ b/documentation/content/fr/books/handbook/boot/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/config
next: books/handbook/users
showBookMenu: true
weight: 16
-path: "/books/handbook/"
+path: "/books/handbook/boot/"
---
[[boot]]
diff --git a/documentation/content/fr/books/handbook/bsdinstall/_index.adoc b/documentation/content/fr/books/handbook/bsdinstall/_index.adoc
index 7f11713a14..765e7a43d2 100644
--- a/documentation/content/fr/books/handbook/bsdinstall/_index.adoc
+++ b/documentation/content/fr/books/handbook/bsdinstall/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/introduction
next: books/handbook/basics
showBookMenu: true
weight: 4
-path: "/books/handbook/"
+path: "/books/handbook/bsdinstall/"
---
[[bsdinstall]]
diff --git a/documentation/content/fr/books/handbook/config/_index.adoc b/documentation/content/fr/books/handbook/config/_index.adoc
index 89f66d41a6..dd97adde51 100644
--- a/documentation/content/fr/books/handbook/config/_index.adoc
+++ b/documentation/content/fr/books/handbook/config/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partiii
next: books/handbook/boot
showBookMenu: true
weight: 15
-path: "/books/handbook/"
+path: "/books/handbook/config/"
---
[[config-tuning]]
@@ -1359,6 +1359,6 @@ Plus d'information au sujet de l'ACPI peut être trouvé aux emplacements suivan
* La liste de diffusion {freebsd-acpi}
* Les archives de la liste de diffusion ACPI http://lists.freebsd.org/pipermail/freebsd-acpi/[http://lists.freebsd.org/pipermail/freebsd-acpi/]
* Les archives de l'ancienne liste de diffusion ACPI http://home.jp.FreeBSD.org/mail-list/acpi-jp/[http://home.jp.FreeBSD.org/mail-list/acpi-jp/]
-* La spécification ACPI 2.0 http://acpi.info/spec.htm[http://acpi.info/spec.htm]
+* La https://uefi.org/specifications#ACPI[spécification ACPI]
* Les pages de manuel: man:acpi[4], man:acpi_thermal[4], man:acpidump[8], man:iasl[8], man:acpidb[8]
* http://www.cpqlinux.com/acpi-howto.html#fix_broken_dsdt[Ressource sur le débogage de la DSDT]. (Utilise un exemple basé sur du matériel Compaq mais qui est en général intéressant.)
diff --git a/documentation/content/fr/books/handbook/cutting-edge/_index.adoc b/documentation/content/fr/books/handbook/cutting-edge/_index.adoc
index fadd46c05b..4abc007de1 100644
--- a/documentation/content/fr/books/handbook/cutting-edge/_index.adoc
+++ b/documentation/content/fr/books/handbook/cutting-edge/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/l10n
next: books/handbook/dtrace
showBookMenu: true
weight: 29
-path: "/books/handbook/"
+path: "/books/handbook/cutting-edge/"
---
[[updating-upgrading]]
diff --git a/documentation/content/fr/books/handbook/desktop/_index.adoc b/documentation/content/fr/books/handbook/desktop/_index.adoc
index 08af7d89e1..a2cffcee2f 100644
--- a/documentation/content/fr/books/handbook/desktop/_index.adoc
+++ b/documentation/content/fr/books/handbook/desktop/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partii
next: books/handbook/multimedia
showBookMenu: true
weight: 9
-path: "/books/handbook/"
+path: "/books/handbook/desktop/"
---
[[desktop]]
diff --git a/documentation/content/fr/books/handbook/disks/_index.adoc b/documentation/content/fr/books/handbook/disks/_index.adoc
index 342af88582..81fd0b22cc 100644
--- a/documentation/content/fr/books/handbook/disks/_index.adoc
+++ b/documentation/content/fr/books/handbook/disks/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/audit
next: books/handbook/geom
showBookMenu: true
weight: 22
-path: "/books/handbook/"
+path: "/books/handbook/disks/"
---
[[disks]]
diff --git a/documentation/content/fr/books/handbook/dtrace/_index.adoc b/documentation/content/fr/books/handbook/dtrace/_index.adoc
index b086357a51..6e52c03e8f 100644
--- a/documentation/content/fr/books/handbook/dtrace/_index.adoc
+++ b/documentation/content/fr/books/handbook/dtrace/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/cutting-edge
next: books/handbook/partiv
showBookMenu: true
weight: 30
-path: "/books/handbook/"
+path: "/books/handbook/dtrace/"
---
[[dtrace]]
diff --git a/documentation/content/fr/books/handbook/eresources/_index.adoc b/documentation/content/fr/books/handbook/eresources/_index.adoc
index 012e244dbd..0009318ac3 100644
--- a/documentation/content/fr/books/handbook/eresources/_index.adoc
+++ b/documentation/content/fr/books/handbook/eresources/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/bibliography
next: books/handbook/pgpkeys
showBookMenu: true
weight: 41
-path: "/books/handbook/"
+path: "/books/handbook/eresources/"
---
[appendix]
diff --git a/documentation/content/fr/books/handbook/filesystems/_index.adoc b/documentation/content/fr/books/handbook/filesystems/_index.adoc
index 576348e4e8..60ae790ec4 100644
--- a/documentation/content/fr/books/handbook/filesystems/_index.adoc
+++ b/documentation/content/fr/books/handbook/filesystems/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/zfs
next: books/handbook/vinum
showBookMenu: true
weight: 25
-path: "/books/handbook/"
+path: "/books/handbook/filesystems/"
---
[[filesystems]]
diff --git a/documentation/content/fr/books/handbook/firewalls/_index.adoc b/documentation/content/fr/books/handbook/firewalls/_index.adoc
index 694f3ec36e..78de441946 100644
--- a/documentation/content/fr/books/handbook/firewalls/_index.adoc
+++ b/documentation/content/fr/books/handbook/firewalls/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/network-servers
next: books/handbook/advanced-networking
showBookMenu: true
weight: 36
-path: "/books/handbook/"
+path: "/books/handbook/firewalls/"
---
[[firewalls]]
diff --git a/documentation/content/fr/books/handbook/geom/_index.adoc b/documentation/content/fr/books/handbook/geom/_index.adoc
index b9aadaeae0..0d9f7db9cb 100644
--- a/documentation/content/fr/books/handbook/geom/_index.adoc
+++ b/documentation/content/fr/books/handbook/geom/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/disks
next: books/handbook/zfs
showBookMenu: true
weight: 23
-path: "/books/handbook/"
+path: "/books/handbook/geom/"
---
[[geom]]
diff --git a/documentation/content/fr/books/handbook/introduction.adoc b/documentation/content/fr/books/handbook/introduction.adoc
new file mode 100644
index 0000000000..492822f11a
--- /dev/null
+++ b/documentation/content/fr/books/handbook/introduction.adoc
@@ -0,0 +1,13 @@
+[.abstract-title]
+Résumé
+
+Bienvenue à FreeBSD! Ce manuel décrit l'installation et l'utilisation quotidienne de _FreeBSD {rel131-current}-RELEASE_, et _FreeBSD {rel123-current}-RELEASE_.
+Ce document est le résultat du travail toujours en cours de nombreuses personnes.
+Certaines sections peuvent ne pas être à jour.
+Les personnes qui sont intéressées pour aider à mettre à jour et à compléter ce document devraient envoyer un courrier électronique à la {freebsd-doc}.
+
+La dernière version anglaise de ce document est disponible sur le https://www.FreeBSD.org/[site Web de FreeBSD].
+Les versions antérieures peuvent être obtenues auprès de https://docs.FreeBSD.org/doc/[http://docs.FreeBSD.org/doc/]).
+Il peut être aussi téléchargé dans divers formats et options de compression depuis le https://download.freebsd.org/doc/[serveur de téléchargement FreeBSD] ou l'un des nombreux crossref:mirrors[mirrors,sites miroirs].
+Des recherches dans le Manuel et les autres documents peuvent être effectuées à partir de la link:https://www.FreeBSD.org/search/[page de recherches].
+
diff --git a/documentation/content/fr/books/handbook/introduction/_index.adoc b/documentation/content/fr/books/handbook/introduction/_index.adoc
index 37d5d60986..5b81610ead 100644
--- a/documentation/content/fr/books/handbook/introduction/_index.adoc
+++ b/documentation/content/fr/books/handbook/introduction/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/parti
next: books/handbook/bsdinstall
showBookMenu: true
weight: 3
-path: "/books/handbook/"
+path: "/books/handbook/introduction/"
---
[[introduction]]
diff --git a/documentation/content/fr/books/handbook/jails/_index.adoc b/documentation/content/fr/books/handbook/jails/_index.adoc
index e3e4819e73..20661b6291 100644
--- a/documentation/content/fr/books/handbook/jails/_index.adoc
+++ b/documentation/content/fr/books/handbook/jails/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/security
next: books/handbook/mac
showBookMenu: true
weight: 19
-path: "/books/handbook/"
+path: "/books/handbook/jails/"
---
[[jails]]
diff --git a/documentation/content/fr/books/handbook/kernelconfig/_index.adoc b/documentation/content/fr/books/handbook/kernelconfig/_index.adoc
index 92ad29b555..825d5d2ed8 100644
--- a/documentation/content/fr/books/handbook/kernelconfig/_index.adoc
+++ b/documentation/content/fr/books/handbook/kernelconfig/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/multimedia
next: books/handbook/printing
showBookMenu: true
weight: 11
-path: "/books/handbook/"
+path: "/books/handbook/kernelconfig/"
---
[[kernelconfig]]
diff --git a/documentation/content/fr/books/handbook/l10n/_index.adoc b/documentation/content/fr/books/handbook/l10n/_index.adoc
index cb30b63681..36d6a50d69 100644
--- a/documentation/content/fr/books/handbook/l10n/_index.adoc
+++ b/documentation/content/fr/books/handbook/l10n/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/virtualization
next: books/handbook/cutting-edge
showBookMenu: true
weight: 28
-path: "/books/handbook/"
+path: "/books/handbook/l10n/"
---
[[l10n]]
diff --git a/documentation/content/fr/books/handbook/linuxemu/_index.adoc b/documentation/content/fr/books/handbook/linuxemu/_index.adoc
index 05710c9660..4ffc7bddaf 100644
--- a/documentation/content/fr/books/handbook/linuxemu/_index.adoc
+++ b/documentation/content/fr/books/handbook/linuxemu/_index.adoc
@@ -7,7 +7,7 @@ description: FreeBSD offre une compatibilité binaire avec Linux, permettant aux
tags: ["linux", "linuxulator", "émulation", "binaire", "compatibilité"]
showBookMenu: true
weight: 13
-path: "/books/handbook/"
+path: "/books/handbook/linuxemu/"
---
[[linuxemu]]
diff --git a/documentation/content/fr/books/handbook/mac/_index.adoc b/documentation/content/fr/books/handbook/mac/_index.adoc
index 649b885a85..997c4cf0a1 100644
--- a/documentation/content/fr/books/handbook/mac/_index.adoc
+++ b/documentation/content/fr/books/handbook/mac/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/jails
next: books/handbook/audit
showBookMenu: true
weight: 20
-path: "/books/handbook/"
+path: "/books/handbook/mac/"
---
[[mac]]
diff --git a/documentation/content/fr/books/handbook/mail/_index.adoc b/documentation/content/fr/books/handbook/mail/_index.adoc
index 5cc9fa05a2..0faa527880 100644
--- a/documentation/content/fr/books/handbook/mail/_index.adoc
+++ b/documentation/content/fr/books/handbook/mail/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/ppp-and-slip
next: books/handbook/network-servers
showBookMenu: true
weight: 34
-path: "/books/handbook/"
+path: "/books/handbook/mail/"
---
[[mail]]
diff --git a/documentation/content/fr/books/handbook/mirrors/_index.adoc b/documentation/content/fr/books/handbook/mirrors/_index.adoc
index fe0df41f93..92713f187c 100644
--- a/documentation/content/fr/books/handbook/mirrors/_index.adoc
+++ b/documentation/content/fr/books/handbook/mirrors/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partv
next: books/handbook/bibliography
showBookMenu: true
weight: 39
-path: "/books/handbook/"
+path: "/books/handbook/mirrors/"
---
[appendix]
diff --git a/documentation/content/fr/books/handbook/multimedia/_index.adoc b/documentation/content/fr/books/handbook/multimedia/_index.adoc
index 52e93aa7f8..754119d544 100644
--- a/documentation/content/fr/books/handbook/multimedia/_index.adoc
+++ b/documentation/content/fr/books/handbook/multimedia/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/desktop
next: books/handbook/kernelconfig
showBookMenu: true
weight: 10
-path: "/books/handbook/"
+path: "/books/handbook/multimedia/"
---
[[multimedia]]
diff --git a/documentation/content/fr/books/handbook/network-servers/_index.adoc b/documentation/content/fr/books/handbook/network-servers/_index.adoc
index fd70f9e297..5d3302e22b 100644
--- a/documentation/content/fr/books/handbook/network-servers/_index.adoc
+++ b/documentation/content/fr/books/handbook/network-servers/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mail
next: books/handbook/firewalls
showBookMenu: true
weight: 35
-path: "/books/handbook/"
+path: "/books/handbook/network-servers/"
---
[[network-servers]]
diff --git a/documentation/content/fr/books/handbook/parti.adoc b/documentation/content/fr/books/handbook/parti.adoc
index 1d14074802..0eb358fca9 100644
--- a/documentation/content/fr/books/handbook/parti.adoc
+++ b/documentation/content/fr/books/handbook/parti.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/preface
next: books/handbook/introduction
showBookMenu: true
weight: 2
-path: "/books/handbook/"
+path: "/books/handbook/parti/"
---
[[getting-started]]
diff --git a/documentation/content/fr/books/handbook/partii.adoc b/documentation/content/fr/books/handbook/partii.adoc
index a16d2fc121..ef70e1cf81 100644
--- a/documentation/content/fr/books/handbook/partii.adoc
+++ b/documentation/content/fr/books/handbook/partii.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/x11
next: books/handbook/desktop
showBookMenu: true
weight: 8
-path: "/books/handbook/"
+path: "/books/handbook/partii/"
---
[[common-tasks]]
diff --git a/documentation/content/fr/books/handbook/partiii.adoc b/documentation/content/fr/books/handbook/partiii.adoc
index 923fd8c6e0..5ae92c0b27 100644
--- a/documentation/content/fr/books/handbook/partiii.adoc
+++ b/documentation/content/fr/books/handbook/partiii.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/linuxemu
next: books/handbook/config
showBookMenu: true
weight: 14
-path: "/books/handbook/"
+path: "/books/handbook/partiii/"
---
[[system-administration]]
diff --git a/documentation/content/fr/books/handbook/partiv.adoc b/documentation/content/fr/books/handbook/partiv.adoc
index 6841970dc8..6814f8376b 100644
--- a/documentation/content/fr/books/handbook/partiv.adoc
+++ b/documentation/content/fr/books/handbook/partiv.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/dtrace
next: books/handbook/serialcomms
showBookMenu: true
weight: 31
-path: "/books/handbook/"
+path: "/books/handbook/partiv/"
---
[[network-communication]]
diff --git a/documentation/content/fr/books/handbook/partv.adoc b/documentation/content/fr/books/handbook/partv.adoc
index c96db19738..95cafddf1d 100644
--- a/documentation/content/fr/books/handbook/partv.adoc
+++ b/documentation/content/fr/books/handbook/partv.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/advanced-networking
next: books/handbook/mirrors
showBookMenu: true
weight: 38
-path: "/books/handbook/"
+path: "/books/handbook/partv/"
---
[[appendices]]
diff --git a/documentation/content/fr/books/handbook/pgpkeys/_index.adoc b/documentation/content/fr/books/handbook/pgpkeys/_index.adoc
index a139e3dbf2..90de57461d 100644
--- a/documentation/content/fr/books/handbook/pgpkeys/_index.adoc
+++ b/documentation/content/fr/books/handbook/pgpkeys/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/eresources
next: books/handbook/freebsd-glossary
showBookMenu: true
weight: 42
-path: "/books/handbook/"
+path: "/books/handbook/pgpkeys/"
---
[appendix]
@@ -59,9 +59,6 @@ Les clés OpenPGP des officiers `FreeBSD.org` sont données ici. Ces clés peuve
=== {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/fr/books/handbook/ports/_index.adoc b/documentation/content/fr/books/handbook/ports/_index.adoc
index a7a0b1710a..fb10dd2376 100644
--- a/documentation/content/fr/books/handbook/ports/_index.adoc
+++ b/documentation/content/fr/books/handbook/ports/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/basics
next: books/handbook/x11
showBookMenu: true
weight: 6
-path: "/books/handbook/"
+path: "/books/handbook/ports/"
---
[[ports]]
diff --git a/documentation/content/fr/books/handbook/ppp-and-slip/_index.adoc b/documentation/content/fr/books/handbook/ppp-and-slip/_index.adoc
index 29a177922a..762c8cacee 100644
--- a/documentation/content/fr/books/handbook/ppp-and-slip/_index.adoc
+++ b/documentation/content/fr/books/handbook/ppp-and-slip/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/serialcomms
next: books/handbook/mail
showBookMenu: true
weight: 33
-path: "/books/handbook/"
+path: "/books/handbook/ppp-and-slip/"
---
[[ppp-and-slip]]
diff --git a/documentation/content/fr/books/handbook/preface/_index.adoc b/documentation/content/fr/books/handbook/preface/_index.adoc
index 2b50298187..0be94e3af0 100644
--- a/documentation/content/fr/books/handbook/preface/_index.adoc
+++ b/documentation/content/fr/books/handbook/preface/_index.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/
next: books/handbook/parti
showBookMenu: true
weight: 1
-path: "/books/handbook/"
+path: "/books/handbook/preface/"
---
[preface]
diff --git a/documentation/content/fr/books/handbook/printing/_index.adoc b/documentation/content/fr/books/handbook/printing/_index.adoc
index 127a2911aa..0f42667f7b 100644
--- a/documentation/content/fr/books/handbook/printing/_index.adoc
+++ b/documentation/content/fr/books/handbook/printing/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/kernelconfig
next: books/handbook/linuxemu
showBookMenu: true
weight: 12
-path: "/books/handbook/"
+path: "/books/handbook/printing/"
---
[[printing]]
diff --git a/documentation/content/fr/books/handbook/security/_index.adoc b/documentation/content/fr/books/handbook/security/_index.adoc
index c966cc8400..6aaaa74cbd 100644
--- a/documentation/content/fr/books/handbook/security/_index.adoc
+++ b/documentation/content/fr/books/handbook/security/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/users
next: books/handbook/jails
showBookMenu: true
weight: 18
-path: "/books/handbook/"
+path: "/books/handbook/security/"
---
[[security]]
diff --git a/documentation/content/fr/books/handbook/serialcomms/_index.adoc b/documentation/content/fr/books/handbook/serialcomms/_index.adoc
index 1330b415e2..9fd75c0520 100644
--- a/documentation/content/fr/books/handbook/serialcomms/_index.adoc
+++ b/documentation/content/fr/books/handbook/serialcomms/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partiv
next: books/handbook/ppp-and-slip
showBookMenu: true
weight: 32
-path: "/books/handbook/"
+path: "/books/handbook/serialcomms/"
---
[[serialcomms]]
diff --git a/documentation/content/fr/books/handbook/users/_index.adoc b/documentation/content/fr/books/handbook/users/_index.adoc
index 7c88a06be7..c9fe49f000 100644
--- a/documentation/content/fr/books/handbook/users/_index.adoc
+++ b/documentation/content/fr/books/handbook/users/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/boot
next: books/handbook/security
showBookMenu: true
weight: 17
-path: "/books/handbook/"
+path: "/books/handbook/users/"
---
[[users]]
diff --git a/documentation/content/fr/books/handbook/vinum/_index.adoc b/documentation/content/fr/books/handbook/vinum/_index.adoc
index 77d690df7f..0e5544cb52 100644
--- a/documentation/content/fr/books/handbook/vinum/_index.adoc
+++ b/documentation/content/fr/books/handbook/vinum/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/filesystems
next: books/handbook/virtualization
showBookMenu: true
weight: 26
-path: "/books/handbook/"
+path: "/books/handbook/vinum/"
---
[[vinum-vinum]]
diff --git a/documentation/content/fr/books/handbook/virtualization/_index.adoc b/documentation/content/fr/books/handbook/virtualization/_index.adoc
index 21240db408..9a1f0fea08 100644
--- a/documentation/content/fr/books/handbook/virtualization/_index.adoc
+++ b/documentation/content/fr/books/handbook/virtualization/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/vinum
next: books/handbook/l10n
showBookMenu: true
weight: 27
-path: "/books/handbook/"
+path: "/books/handbook/virtualization/"
---
[[virtualization]]
diff --git a/documentation/content/fr/books/handbook/wine/_index.adoc b/documentation/content/fr/books/handbook/wine/_index.adoc
new file mode 100644
index 0000000000..480d2dbc8e
--- /dev/null
+++ b/documentation/content/fr/books/handbook/wine/_index.adoc
@@ -0,0 +1,898 @@
+---
+title: Chapitre 11. WINE
+part: Partie II. Tâches courantes
+prev: books/handbook/linuxemu
+next: books/handbook/partiii
+description: Ce chapitre décrira comment installer WINE sur un système FreeBSD et comment configurer WINE
+tags: ["WINE", "emulation", "guide", "tutorial"]
+showBookMenu: true
+weight: 14
+path: "/books/handbook/wine/"
+---
+
+[[wine]]
+= WINE
+:doctype: book
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:sectnumoffset: 11
+:partnums:
+:source-highlighter: rouge
+:experimental:
+:images-path: books/handbook/wine/
+
+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::[]
+
+[[wine-synopsis]]
+== Synopsis
+
+https://www.winehq.org/[WINE], qui signifie Wine Is Not an Emulator, car c'est en fait un programme faisant office de surcouche d'interprétation des instructions système.
+Celui-ci permet l'installation et l'utilisation de programmes à l'origine prévus pour fonctionner sous Windows(R) sur FreeBSD (mais aussi sous d'autres systèmes d'exploitation).
+
+Il fonctionne par l'interception des appels systèmes, ou des requêtes venant d'un programme vers le système d'exploitation, et transforme les appels systèmes Windows(R) en appels systèmes que FreeBSD peut comprendre.
+Il fera également en sorte de traduire dans le sens inverse les nouvelles instructions afin que le programme Windows(R) fonctionne comme espéré.
+Alors oui dans un certain sens, il _émule_ bien un environnement Windows(R), car il fournit bons nombres des ressources nécessaires au bon fonctionnement des applications Windows(R).
+
+Cependant, il ne s'agit pas d'un émulateur au sens strict du terme.
+En effet, dans la plupart des émulateurs, le fonctionnement est sensiblement différent. Ces derniers simulent des composants physiques informatiques afin de faire tourner des logiciels. C'est le cas notamment des solutions de virtualisation (comme: package:emulators/qemu[]).
+L'un des bénéfices notables de cette approche est la capacité d'installation d'un système d'exploitation entier.
+Cela signifie, que du point de vue des applications exécutées au sein de cet émulateur, tout se passe comme sur un véritable système non émulé. De cette manière les programmes ont de bonnes chances de fonctionner comme escomptés.
+Le mauvais côté inhérent à cette approche est tout simplement qu'un programme simulant du matériel informatique est forcément plus lent que ledit matériel qu'il tente de reproduire.
+Le système émulé (appelé _invité_) a besoin des ressources de la machine physique (appelée _hôte_), et réserve ces ressources tant qu'il fonctionne.
+
+D'un autre côté, le projet WINE, est plus économe en ressources système.
+Il fera en sorte de traduire des instructions systèmes à la volée. Ce n'est en théorie pas aussi rapide qu'un véritable système Windows(R), mais la différence de vitesse d'exécution reste minime.
+D'un autre côté, WINE essaie d'interpréter au mieux les différentes évolutions des systèmes Windows(R) pour rester compatible avec les applications originellement conçues pour ces systèmes.
+C'est une tâche complexe, ce qui veut dire qu'il faut garder en tête le fait que de nombreuses applications puissent ne pas fonctionner comme espéré sous WINE, ne marchent pas du tout, voire ne s'installent même pas.
+
+De cette manière, WINE constitue une autre option dans le but d'essayer de faire fonctionner un programme Windows(R) sous FreeBSD.
+Il peut servir de première solution, si cela fonctionne, car cela peut permettre de lancer l'application escomptée sans pour autant monopoliser toutes les ressources du système hôte FreeBSD.
+
+Ce chapitre va décrire:
+
+* Comment installer WINE sur système un FreeBSD.
+* Comment WINE fonctionne et quelles sont ses différences vis-à-vis des autres alternatives comme la virtualisation.
+* Comment adapter WINE aux besoins spécifiques de certaines applications.
+* Comment installer des interfaces graphiques pour assister à la configuration de WINE.
+* Des astuces et des solutions à utiliser sous FreeBSD.
+* La prise en compte de WINE au sein d'un environnement multi-utilisateur.
+
+Avant de lire ce chapitre, il serait utile de:
+
+* Comprendre crossref:basics[basics,quelques bases d'UNIX(R)].
+* Savoir crossref:bsdinstall[bsdinstall,installer FreeBSD].
+* Savoir crossref:advanced-networking[advanced-networking,configurer une connexion réseau].
+* Savoir crossref:ports[ports,installer des applications].
+
+[[wine-overview-concepts]]
+== WINE généralités et concepts
+
+WINE est un système complexe, avant de pouvoir s'en servir au mieux sur FreeBSD, il convient de comprendre ce que c'est et comment il fonctionne.
+
+[[what-is-wine]]
+=== WINE qu'est-ce que c'est?
+
+Comme nous l'avons déjà vu dans le <<wine-synopsis,Synopsis>> de ce chapitre, WINE constitue une surcouche de compatibilité logicielle permettant l'utilisation d'applications Windows(R) sur d'autres systèmes d'exploitation.
+En théorie, cela signifie que ces programmes pourront être exécutés sous des systèmes comme FreeBSD, macOS et Android.
+
+Lorsque WINE lance un exécutable Windows(R), il se passe deux choses:
+
+* Tout d'abord, WINE implémente un environnement qui imite celui de diverses versions de Windows(R). Par exemple, si une application demande l'accès à une ressource de la machine comme la RAM, WINE possède une interface mémoire qui ressemble et se comporte (en tout cas pour l'application en question) comme Windows(R).
+* Ensuite, une fois que l'application utilise cette interface, WINE reçoit les requêtes d'adressage mémoire et les transforme en instructions compatibles avec le système hôte. À l'inverse, lorsque l'application sous WINE veut obtenir des données, elles sont converties pour être exploitées par cette application Windows(R).
+
+[[wine-and-the-os-system]]
+=== WINE et le système FreeBSD
+
+L'installation de WINE sur un système FreeBSD entraînera celle de différents composants:
+
+* Les applications FreeBSD permettant l'exécution de tâches comme lancer un exécutable Windows(R), configurer le sous-système WINE, ou compiler un programme avec une compatibilité WINE.
+* Un grand nombre de dépendances implémentant les fonctionnalités centrales de Windows(R) (par exemple [.filename]#/lib/wine/api-ms-core-memory-l1-1-1.dll.so#, qui fait partie de l'interface mémoire mentionnée un petit peu plus haut).
+* Un certain nombre d'exécutables Windows(R), qui sont (ou en tout cas imitent) les programmes courants (comme [.filename]#/lib/wine/notepad.exe.so#, qui fournit l'éditeur de texte standard de Windows(R)).
+* Des composants additionnels de Windows(R), en particulier les polices de caractères (comme Tahoma, qui se trouve [.filename]#share/wine/fonts/tahoma.ttf# à la racine de l'installation).
+
+[[graphical-versus-text-modeterminal-programs-in-wine]]
+=== Programmes avec interface graphique et programmes en mode texte/terminal sous WINE
+
+Comme dans le monde de FreeBSD, les terminaux sont extrêmement courants, il est naturel de penser que WINE possède une excellente prise en charge des programmes en mode texte.
+Cependant, la majorité des applications pour Windows(R), surtout les applications les plus populaires, sont conçues pour une utilisation avec une interface utilisateur graphique.
+De ce fait, les outils de WINE sont conçus pour lancer par défaut des programmes possédant une interface graphique.
+
+Néanmoins, il existe trois méthodes disponibles pour lancer ces programmes en interface utilisateur console:
+
+* L'approche _sortie directe_ qui affichera directement sur la sortie standard d'un terminal.
+* La _wineconsole_ qui est un outil qui peut être utilisé avec les options _user_ ou _curses_ afin d'utiliser certaines améliorations que fournit le système de WINE pour les applications consoles.
+
+Ces méthodes sont détaillées en profondeur sur cette page : https://wiki.winehq.org/Wine_User%27s_Guide#Text_mode_programs_.28CUI:_Console_User_Interface.29[Wiki du projet WINE].
+
+[[wine-derivative-projects]]
+=== Projets dérivés de WINE
+
+WINE est en lui-même un projet open source mature, de ce fait, ce n'est pas étonnant qu'il serve de base à d'autres solutions logicielles plus complexes.
+
+[[commercial-wine-implementations]]
+==== Implémentations commerciales de WINE
+
+Un certain nombre d'entreprises ont utilisé WINE comme base centrale d'un de leur propre produit propriétaire (sachant que la licence LGPL permet ceci).
+Voici deux solutions populaires basées sur le projet WINE:
+
+* CrossOver de Codeweavers
+
+Cette solution propose des installations en un clic de différentes versions de WINE contenant différentes améliorations et optimisations (l'entreprise contribue au projet WINE en partageant certaines de ses améliorations).
+La principale préoccupation de Codeweavers est de faire en sorte que la plupart des applications les plus populaires puissent s'installer et s'exécuter parfaitement.
+
+Bien que l'entreprise ait par le passé produit une version native de CrossOver pour FreeBSD, ce n'est plus le cas depuis longtemps.
+Certaines références en ligne sont encore disponibles (comme ici sur un https://www.codeweavers.com/compatibility/crossover/forum/freebsd[forum dédié]), cela fait cependant un certains temps qu'elles ne sont plus mises à jour.
+
+* Proton de Steam
+
+Steam qui distribue principalement des jeux vidéo utilise aussi WINE afin de permettre l'installation et l'exécution de jeux prévus pour Windows(R) sur d'autres systèmes d'exploitation.
+Cela vise surtout à la base les systèmes de type Linux, bien qu'une certaine prise en charge de macOS existe également.
+
+Tandis que Steam ne propose pas de version FreeBSD de leur client, il existe plusieurs options pour utiliser la versions Linux(R) du client en utilisant la surcouche de compatibilité Linux de FreeBSD.
+
+[[wine-companion-programs]]
+==== Programmes d'accompagnement de WINE
+
+Aux solutions propriétaires, nous pouvons ajouter d'autres projet ayant publié des applications conçues pour fonctionner en tandem avec la version standard et open source de WINE.
+Le but de ces solutions va de rendre l'installation de WINE plus facile à la simplification de l'installation des programmes les plus populaires.
+
+Ces solutions sont abordées avec plus de détails dans une partie ultérieure de ce chapitre: <<wine-management-guis,interfaces graphiques pour la gestion de WINE >>, avec notamment:
+
+* winetricks
+* Homura
+
+[[alternatives-to-wine]]
+=== Les alternatives à WINE
+
+Pour les utilisateurs de FreeBSD, certaines alternatives à WINE existent:
+
+* Le double-amorçage: Une solution évidente est de directement lancer les programmes conçus pour Windows(R) sur ce dernier. Cela veut bien sûr dire qu'il faudra quitter FreeBSD afin de démarrer sous Windows(R), aussi cette méthode n'est pas envisageable si l'accès aux programmes des deux systèmes en simultané est nécessaire.
+* Les machines virtuelles: les machines virtuelles (ou VMs), comme mentionné plus tôt dans ce chapitre, sont des procédés logiciels qui émulent un ensemble complet de matériels informatiques, sur lequel un autre système d'exploitation (comprenant Windows(R)) peut être installé et utilisé. Les outils modernes rendent les VMs simples à créer et à gérer, mais cette méthode a un coût. En effet, une bonne portion des ressources du système hôte doit être allouée à chaque VM, sachant que ces ressources ne pourront pas être libérées tant que la VM est en fonctionnement. Il existe plusieurs solutions de gestion de machines virtuelles disponibles sous FreeBSD, les solutions open source comme qemu, bhyve et VirtualBox en sont un bon exemple. Voir le chapitre sur la <<virtualization,Virtualisation>> pour plus de détails.
+* L'accès distant: Comme beaucoup d'autres systèmes de type UNIX(R), FreeBSD est capable d'utiliser un ensemble d'applications permettant aux utilisateurs d'accéder à des ordinateurs Windows(R) à distance afin d'utiliser leurs programmes et données. En plus des clients comme xrdp qui sont compatibles avec le protocole de bureau distant (RDP) standard de Windows(R), il existe d'autres standards open source comme vnc pouvant aussi être utilisé (si un serveur compatible est présent à l'autre bout).
+
+[[installing-wine-on-freebsd]]
+== Installer WINE sur FreeBSD
+
+WINE peut être installé grâce à l'outil de gestion de logiciels pré-compilés de FreeBSD (pkg), ou bien en compilant le programme depuis le catalogue de logiciels portés.
+
+[[wine-prerequistes]]
+=== WINE les prérequis
+
+Avant de procéder à l'installation de WINE lui-même, il convient d'avoir préinstallé ce qui suit:
+
+* Une interface utilisateur graphique
+
+La plupart des programmes Windows(R) s'attendent à pouvoir interagir avec une interface graphique.
+Si WINE est installé sans une interface graphique déjà présente, ses dépendances comprendront également le compositeur Wayland, et de ce fait, une interface graphique sera effectivement installée aux côtés de WINE.
+Cela dit, il vaut mieux installer au préalable une interface graphique de votre choix, configurée et fonctionnelle avant de procéder à l'installation de WINE.
+
+* wine-gecko
+
+Pendant une longue période Windows(R) avait, par défaut, pré-installé le navigateur Web: Internet Explorer.
+Par conséquent, certaines applications s'exécuteront en partant du principe qu'il y aura toujours quelque chose capable d'afficher des pages Web.
+Dans le but de fournir cette fonctionnalité, la surcouche logicielle de WINE inclue un navigateur Internet basique utilisant le moteur de rendu Web Gecko issu du projet Mozilla.
+Lorsque WINE sera lancé pour la première fois, une fenêtre de dialogue apparaîtra pour proposer le téléchargement et l'installation de Gecko. Il existe un certain nombre de raisons pour vouloir procéder ainsi (cela sera abordé plus loin).
+Mais, il peut aussi être installé avant même d'installer WINE ou en parallèle de l'installation de ce dernier.
+
+Pour installer ce programme en version pré-compilée, il faut procéder comme ce qui suit:
+
+[source,shell]
+....
+# pkg install wine-gecko
+....
+
+ou alors, il est aussi possible de le compiler depuis le catalogue de logiciels portés:
+
+[source,shell]
+....
+# cd /usr/ports/emulator/wine-gecko
+# make install
+....
+
+* wine-mono
+
+MONO est une implémentation open source de la plateforme de développement .NET de Microsoft.
+Installer MONO devrait rendre plus facile l'installation et l'utilisation des applications écrites en .NET sous FreeBSD.
+
+Pour l'installer la version pré-compilée:
+
+[source,shell]
+....
+# pkg install wine-mono
+....
+
+Pour compiler MONO à partir du catalogue de logiciels portés:
+
+[source,shell]
+....
+# cd /usr/ports/emulator/wine-mono
+# make install
+....
+
+[[installing-wine]]
+=== Installer WINE depuis le dépôt de paquets de FreeBSD
+
+Une fois les prérequis installés, il suffit de procéder à l'installation de WINE via la commande suivante:
+
+[source,shell]
+....
+# pkg install wine
+....
+
+ou alors, WINE peut être compilé depuis le catalogue de logiciels portés avec les commandes suivantes:
+
+[source,shell]
+....
+# cd /usr/ports/emulator/wine
+# make install
+....
+
+[[thirtytwo-vs-sixtyfour-bit-wine]]
+=== Préoccupations concernant les différences entre les versions 32 et 64 bits de WINE
+
+Comme la plupart des applications, les programmes Windows(R), sont, eux aussi, passés de l'ancienne architecture 32 bits à l'architecture 64 bits.
+La plupart des logiciels récents sont écrits pour des systèmes d'exploitation 64 bits, cependant, les systèmes d'exploitation modernes peuvent parfois continuer d'utiliser des programmes plus anciens en 32 bits.
+FreeBSD ne diffère en rien sur ce point, il supporte effectivement les architectures 64 bits depuis les versions 5.X du système.
+
+Ainsi, le fait que les programmes les plus anciens ne soient plus pris en charge, peut justifier l'emploi d'émulateurs. Les utilisateurs se tournent bien souvent vers WINE afin de pouvoir jouer à des jeux et utiliser divers programmes qui ne fonctionnent plus correctement sur du matériel moderne.
+Heureusement, FreeBSD prend en charge les trois cas de figures:
+
+* Pour une machine moderne 64 bits sur laquelle vous désirez lancer une application 64 bits Windows(R), il suffit de procéder à l'installation des outils WINE comme détaillés dans les rubriques précédentes. En procédant ainsi, le système installera automatiquement la version 64 bits de Wine.
+* Si jamais, un utilisateur possède une vieille machine prenant en charge exclusivement les architectures 32 bits, il peut installer une version 32 bits de FreeBSD et ensuite procéder à l'installation de WINE comme indiqué précédemment.
+
+[[running-first-wine-program]]
+== Lancer un premier programme WINE sous FreeBSD
+
+Maintenant que WINE est installé, la prochaine étape est d'essayer WINE en tentant de lancer un programme simple.
+Une manière simple de faire cela est de télécharger une application autonome, par exemple, un programme qu'il suffit d'extraire de son archive et de lancer directement sans aucun autre processus d'installation plus complexe.
+
+Ces applications de types "portables" constituent de bons choix pour procéder à ce genre de tests, tout comme les programmes pouvant s'exécuter en s'appuyant sur un unique fichier exécutable.
+
+[[running-a-program-from-the-command-line]]
+=== Lancer un programme WINE en ligne de commande
+
+Il existe deux méthodes différentes pour lancer des programmes Windows depuis un émulateur de terminal.
+La première et la plus directe, est de naviguer dans le répertoire contenant l'exécutable du programme en question ([.filename]#.EXE#) et de taper ce qui suit:
+
+[source,shell]
+....
+% wine program.exe
+....
+
+Pour les applications qui acceptent des arguments en ligne de commande, il suffit de les ajouter après l'exécutable comme habituellement:
+
+[source,shell]
+....
+% wine program2.exe -file file.txt
+....
+
+Il est aussi possible de fournir le chemin complet vers l'exécutable afin de l'utiliser dans un script, par exemple:
+
+[source,shell]
+....
+% wine /home/user/bin/program.exe
+....
+
+[[running-a-program-from-a-gui]]
+=== Lancer un programme WINE depuis une interface graphique
+
+Après l'installation de WINE, les environnements graphiques doivent être configurés pour associer les fichiers exécutables Windows(R) ([.filename]#.EXE#) avec WINE.
+Il sera ensuite possible de parcourir le système avec un gestionnaire de fichiers, puis de lancer une application Windows(R) de la même manière que n'importe quel autre programme (avec un clic ou en double-cliquant selon la manière dont est configurée l'interface graphique).
+
+Sur la plupart des environnements de bureau, il suffit de vérifier que l'association est correcte en faisant un clic droit sur le fichier, puis de chercher une option de lancement correspondante dans le menu.
+Une des options (normalement celle par défaut) devrait être lancer avec *Wine - Chargeur de programmes Windows*, comme dans la capture d'écran ci-dessous:
+
+image::wine-run-np++-1.png[]
+
+Dans l'éventualité où le programme ne se lancerait pas comme escompté, essayez de le lancer depuis un terminal afin de voir si un éventuel message d'erreur apparaît, vous donnant ainsi un indice pour débloquer la situation.
+Dans le cas où WINE ne serait pas l'application par défaut pour ouvrir les fichiers [.filename]#.EXE# après l'installation, veuillez vérifier les associations MIME pour cette extension de fichier dans l'environnement de bureau courant, l'interface système ou bien le gestionnaire de fichiers.
+
+[[configuring-wine-installation]]
+== Configurer WINE après installation
+
+Après avoir compris ce qu'était WINE et comment il fonctionne dans les grandes lignes, la prochaine étape consiste savoir l'utiliser de manière efficiente sur FreeBSD et de s'habituer à ses configurations.
+Ce qui va suivre détaillera le concept clé de _préfixe WINE_, et comment il est utilisé pour contrôler la façon dont les applications fonctionnent via WINE.
+
+[[wine-prefixes]]
+=== Les préfixes WINE
+
+Un _préfixe_ WINE est un répertoire, il se trouve généralement (par défaut) ici: [.filename]#$HOME/.wine# mais peut aussi se situer ailleurs.
+Le préfixe est un ensemble de configurations et de fichiers utilisés par WINE pour configurer et utiliser l'environnement Windows(R) dont a besoin une application donnée.
+Par défaut, une installation toute fraîche de WINE va mettre en place la structure suivante lors de la première utilisation par un utilisateur:
+
+* [.filename]#.update-timestamp#: contient la date de la dernière modification de [.filename]#file /usr/share/wine/wine.inf#. WINE utilise cela pour déterminer si un préfixe n'est plus à jour et le met à jour automatiquement si besoin.
+* [.filename]#dosdevices/#: contient la correspondance entre les ressources de Windows(R) et les ressources du système hôte (FreeBSD) afin de rendre possible les interactions entre les deux systèmes.
+Par exemple, après une nouvelle installation de WINE, ce répertoire devrait contenir au moins deux éléments permettant l'accès au système de fichiers de FreeBSD en utilisant le modèle de Windows(R), c'est-à-dire avec les lecteurs associés à des lettres:
+
+** [.filename]#c:@# : un lien vers [.filename]#drive_c# décrit juste après.
+** [.filename]#z:@# : un lien vers le répertoire racine du système hôte.
+
+* [.filename]#drive_c/#: émule le disque principal d'un système Windows(R) (c'est-à-dire: [.filename]#C:#). Il contient une arborescence de répertoires et fichiers imitant celui d'un système Windows(R) standard. Un préfixe WINE fraîchement créé devrait contenir les répertoires Windows(R) 10 comme _Users_ et _Windows_ qui contiennent le système d'exploitation lui-même. Par la suite, les applications qui seront installées au sein de ce préfixe se situeront soit dans _Program Files_ ou _Program Files (x86)_, en fonction de leurs architectures respectives.
+* [.filename]#system.reg#: Ce fichier de registres contient les informations sur l'installation de Windows(R), qui est dans le cas de WINE, l'environnement se trouvant dans [.filename]#drive_c#.
+* [.filename]#user.reg#: Ce fichier de registres contient les configurations personnelles de l'utilisateur courant, générées par divers programmes ou bien via l'utilisation de l'éditeur de registres.
+* [.filename]#userdef.reg#: Ce fichier de registres comprends un ensemble de configurations par défaut pour les utilisateurs nouvellement crées.
+
+[[creating-and-using-wine-prefixes]]
+=== Créer et utiliser un préfixe WINE
+
+Alors que WINE créera par défaut un préfixe dans le répertoire utilisateur [.filename]#$HOME/.wine/#, il est possible de mettre en place plusieurs préfixes.
+Il existe plusieurs raisons de procéder ainsi:
+
+* La raison la plus courante à cela est d'émuler différentes versions de Windows(R), en fonctions des besoins en compatibilité de divers logiciels.
+* Il est également courant de rencontrer certaines applications ne fonctionnant pas correctement dans un environnement WINE par défaut, nécessitant ainsi une configuration spéciale. Il est généralement pratique d'isoler ce genre de programmes dans leur propre préfixe taillé sur mesure, de cette manière cela n'impactera pas le fonctionnement d'autres applications Windows(R).
+* De façon similaire, cela peut aussi servir dans l'optique de tests. En effet, on peut très bien dupliquer le préfixe par défaut pour réaliser divers tests de compatibilité sans risquer de compromettre le préfixe principal.
+
+Pour créer un préfixe depuis le terminal, tapez la commande suivante:
+
+[source,shell]
+....
+% WINEPREFIX="/home/username/.wine-new" winecfg
+....
+
+Ce qui lancera l'utilitaire de configuration des préfixes `winecfg` (nous verrons ceci de façon plus approfondie dans la section ultérieure).
+En définissant un chemin de répertoire pour la variable `WINEPREFIX`, un nouveau préfixe sera créé à cet endroit, à supposer qu'un préfixe ayant un nom identique ne se trouve pas déjà là.
+
+En fournissant la même variable au programme principal de WINE, le logiciel Windows(R) s'exécutera au sein de ce nouveau préfixe :
+[source,shell]
+....
+% WINEPREFIX="/home/username/.wine-new" wine program.exe
+....
+
+[[configuring-wine-prefixes-with-winecfg]]
+=== Configuration des préfixes WINE à l'aide de winecfg
+
+Comme expliqué plus haut, WINE inclut `winecfg` un outil qui permet la configuration des préfixes depuis une interface graphique.
+Il comprend plusieurs fonctionnalités qui sont détaillées dans les sections suivantes.
+Quand `winecfg` est lancé depuis un préfixe, ou bien lancé en combinaison avec l'emplacement d'un préfixe dans la variable `WINEPREFIX`, cela autorisera la configuration de préfixe ainsi sélectionné comme décrit plus loin.
+
+Les sélections faites dans l'onglet _Applications_ affecterons la portée des changements effectués dans les onglets _Libraries_ et _Graphics_, cela signifie que les changements apportés seront cantonnés aux applications sélectionnées.
+Voir https://wiki.winehq.org/Wine_User%27s_Guide#Using_Winecfg[Utiliser Winecfg] sur le Wiki de WINE pour plus d'informations.
+
+[[applications]]
+==== Applications
+
+image::wine-config-1.png[]
+
+L'onglet _Applications_ permet d'associer des programmes avec une version particulière de Windows(R).
+Au premier démarrage de WINE, cet onglet contiendra simplement une seule entrée: _Default Settings_.
+Cela correspond à toutes les configurations par défaut du préfixe, cette entrée (comme l'implique le bouton _Remove application_ désactivé) ne peut être pas supprimée du préfixe.
+
+Mais, des applications additionnelles peuvent être ajoutées en suivant le procédé ci-dessous:
+
+. Cliquez sur le bouton _Add application_;
+. Utilisez la fenêtre qui apparaît alors pour sélectionner l'exécutable du programme voulu;
+. Sélectionnez la version de Windows(R) qui sera utilisée pour le programme sélectionné.
+
+[[libraries]]
+==== Bibliothèques (onglet _Libraries_)
+
+image::wine-config-2.png[]
+
+WINE fourni par défaut un ensemble de bibliothèques open source reproduisant les mêmes fonctionnalités que leurs équivalent Windows(R).
+Cependant, comme vu précédemment dans ce chapitre, le projet WINE fait en sorte de s'adapter au rythme des mise à jour de ces bibliothèques.
+De ce fait, les versions fournies avec WINE peuvent ne pas disposer de certaines fonctionnalités attendues par les programmes Windows(R) les plus récents.
+
+Il est toutefois possible, grâce à `winecfg`, de remplacer spécifiquement les bibliothèques de bases de WINE, tout particulièrement si une installation de Windows(R) est disponible sur la machine hôte.
+Pour chaque dépendance ayant besoin d'être remplacée, il suffit de procéder comme indiqué en dessous:
+
+. Ouvrez le menu déroulant _New override for library_ et sélectionnez la bibliothèque à remplacer;
+. Cliquez sur le bouton _Add_;
+. Le nouveau remplacement apparaîtra dans la liste _Existing overrides_, notez les mentions _native, builtin_ entre parenthèses;
+. Cliquez pour sélectionner une bibliothèque;
+. Cliquez sur le bouton _Edit_;
+. Servez-vous de la fenêtre de dialogue pour sélectionner la bibliothèque à utiliser à la place de celle intégrée par défaut dans WINE.
+
+Faites attention à bien sélectionner un fichier qui correspond à la version de la bibliothèque intégrée à WINE, dans le cas contraire, les programmes pourraient ne pas fonctionner comme attendu.
+
+[[graphics]]
+==== Configuration graphique (onglet _Graphics_)
+
+image::wine-config-3.png[]
+
+L'onglet _Graphics_ fournit des options permettant à la fenêtre du programme lancé via WINE de fonctionner avec des performances optimales sous FreeBSD:
+
+* Capture automatique de la souris lorsqu'il s'agit d'une fenêtre en plein écran;
+* Autoriser le gestionnaire de fenêtre de FreeBSD à prendre en charge la décoration des fenêtres, comme la barre de titre des applications WINE par exemple;
+* Autoriser le gestionnaire de fenêtre de FreeBSD à contrôler les fenêtres des applications WINE, cela concerne les fonctionnalités telles que redimensionner une fenêtre;
+* Créer un bureau virtuel émulé dans lequel seront lancés tous les programmes WINE.
+Une fois cette option cochée, il est possible de définir la taille de ce bureau virtuel via les zones de saisie en face de _Desktop size_;
+* Définir la définition de l'écran pour les programmes lancés via WINE.
+
+[[desktop-integration]]
+==== Intégration avec l'environnement de bureau (onglet _Desktop Integration_)
+
+image::wine-config-4.png[]
+
+Cet onglet permet la configuration des éléments suivants:
+
+* Les paramètres de thème et d'aspect visuel pour les programmes lancés via WINE;
+* Si le sous-système WINE doit gérer les associations MIME (utilisé pour déterminer quelle application ouvre tel type de fichier particulier) de manière interne ou non;
+* La correspondance des répertoires de la machine FreeBSD hôte avec les répertoires utiles au sein de l'environnement Windows(R).
+Afin de changer les associations présentes par défaut, sélectionnez l'élément voulu et cliquez sur _Browse_, puis sélectionnez un répertoire dans la fenêtre qui apparaît.
+
+[[drives]]
+==== Disques (onglet _Drives_)
+
+image::wine-config-5.png[]
+
+L'onglet _Drives_ permet de créer un lien d'un répertoire du système hôte FreeBSD vers une lettre de lecteurs de l'environnement Windows(R).
+Les valeurs par défaut devraient être familières, car elles affichent le contenu de [.filename]#dosdevices/# dans le préfixe WINE courant.
+Les changements effectués dans cet onglet se répercuteront dans [.filename]#dosdevices#, et les liens correctement formatés présents dans ce répertoire apparaîtront dans cet onglet également.
+
+Pour créer une nouvelle entrée, par exemple pour un CD-ROM (monté dans [.filename]#/mnt/cdrom#), il suffit réaliser les étapes suivantes:
+
+. Cliquez sur le bouton _Add_;
+. Dans la nouvelle fenêtre, choisissez une lettre de lecteur disponible;
+. Cliquez sur _OK_;
+. Remplissez la zone de saisie _Path_ soit en tapant le chemin vers la ressource, soit en cliquant sur _Browse_ pour sélectionner la ressource en question.
+
+Par défaut, WINE détecte le type de ressource liée, mais cela peut être changé manuellement si besoin.
+Voir https://wiki.winehq.org/Wine_User%27s_Guide#Drive_Settings[la section correspondante dans le Wiki de WINE] pour plus de détails sur les options avancées.
+
+[[audio]]
+==== Audio
+
+image::wine-config-6.png[]
+
+Cet onglet comprend des options configurable afin de router le son depuis les programmes Windows(R) vers le système de son natif de FreeBSD, notamment:
+
+* La sélection du pilote;
+* La sélection du périphérique audio par défaut;
+* Un test audio.
+
+[[about]]
+==== A propos (onglet _About_)
+
+image::wine-config-7.png[]
+
+Le dernier onglet contient des informations à propos du projet WINE, comme un lien vers le site Web.
+Cet onglet contient par ailleurs des champs de saisies pour les informations de l'utilisateur (complètement optionnel), bien que ces informations ne soient envoyées absolument nulle part au contraire d'autres systèmes d'exploitation.
+
+[[wine-management-guis]]
+== Interfaces graphiques de gestion de WINE
+
+Bien que WINE soit fourni avec `winecfg`, un outil de configuration par interface graphique, ce dernier sert surtout à: configurer dans les grandes ligne un préfixe WINE existant.
+Cependant, il existe des applications plus avancées qui pourront assister les installations de certaines applications de même qu'optimiser leur environnement WINE lié.
+La section qui suit, inclut une sélection des outils de ce type les plus populaires.
+
+[[winetricks]]
+=== Winetricks
+
+Le programme `winetricks` est un assistant multiplate-forme et complet pour WINE.
+Il n'est pas développé par le projet WINE, mais est maintenu par un groupe de contributeurs sur https://github.com/Winetricks/winetricks[Github].
+Il contient "recettes" automatisées pour faire fonctionner un certain nombre d'applications communes sous WINE, en optimisant à la fois les paramètres et en installant certaines DLL automatiquement.
+
+[[installing-winetricks]]
+==== Installer winetricks
+
+Pour installer winetricks sur FreeBSD en version pré-compilée, utilisez la commande suivante (notez que cela nécessite que le paquet i386-wine ou bien i386-wine-devel soit installé, par conséquent ils seront installés automatiquement avec d'autres dépendances):
+
+[source,shell]
+....
+# pkg install i386-wine winetricks
+....
+
+Pour compiler `winetricks` depuis les sources, tapez les commandes suivantes:
+
+[source,shell]
+....
+# cd /usr/ports/emulators/i386-wine
+# make install
+# cd /usr/ports/emulators/winetricks
+# make install
+....
+
+Si une installation manuelle est requise, référez-vous la page suivante pour des instructions: https://github.com/Winetricks/winetricks[Github].
+
+[[using-winetricks]]
+==== Utiliser winetricks
+
+Lancer `winetricks` avec la commande suivante:
+
+[source,shell]
+....
+% winetricks
+....
+
+Notez qu'un préfixe WINE en 32 bits doit être présent pour lancer effectivement `winetricks`.
+Lancer `winetricks` aura pour effet de faire apparaître une fenêtre proposant un certain nombre de choix, comme celle-ci:
+
+image::winetricks-run-1.png[]
+
+Sélectionner soit _Install an application_, soit _Install a benchmark_, ou encore _Install a game_ affichera une liste avec une liste d'options prises en charge, comme ci-dessous pour les applications:
+
+image::winetricks-run-2.png[]
+
+Sélectionner un ou plusieurs éléments et cliquer sur _OK_ démarrera automatiquement leur(s) processus d'installation.
+Au début, certains messages qui ont l'air d'être des erreurs peuvent apparaître, mais il s'agit en fait d'informations et d'alertes mentionnant la manière de contourner certains problèmes éventuels pour certaines applications:
+
+image::winetricks-app-install-1.png[]
+
+Une fois ces messages contournés, l'installation des applications en question sera effectivement lancée:
+
+image::winetricks-app-install-2.png[]
+
+Une fois l'installation terminée, le nouveau logiciel Windows(R) devrait être disponible depuis le menu de l'environnement de bureau (comme ici, avec l'environnement de bureau LXQT):
+
+image::winetricks-menu-1.png[]
+
+Pour supprimer l'application, lancez de nouveau `winetricks` et sélectionnez _Run an uninstaller_:
+
+image::winetricks-uninstall-1.png[]
+
+Une fenêtre Windows(R) apparaîtra pour lister tous les programmes et composants installés au sein de ce préfixe.
+Choisissez l'application à supprimer, puis cliquez sur le bouton _Modify/Remove_:
+
+image::winetricks-uninstall-2.png[]
+
+Cela lancera l'installateur interne de l'application en question, qui devrait également comprendre une option pour la désinstallation:
+
+image::winetricks-uninstall-3.png[]
+
+[[homura]]
+=== Homura
+
+Homura est une application qui ressemble à `winetricks`, mais ce dernier s'inspire surtout de https://lutris.net/[Lutris], qui est un système axé sur le jeu vidéo pour les plateformes Linux.
+Bien que cela soit centré sur le jeu vidéo, il y a aussi des applications n'étant pas des jeux qui sont disponibles pour l'installation au sein d'Homura.
+
+[[installing-homura]]
+==== Installer Homura
+
+Pour installer la version compilée d'Homura, tapez la commande suivante:
+
+[source,shell]
+....
+# pkg install homura
+....
+
+Homura est aussi disponible via le catalogue de logiciels portés de FreeBSD.
+Cependant, au contraire de WINE ou `winetricks`, il se trouve dans la section _games_ plutôt que dans la section _emulators_.
+
+[source,shell]
+....
+# cd /usr/ports/games/homura
+# make install
+....
+
+[[using-homura]]
+==== Utiliser Homura
+
+L'utilisation d'Homura est relativement similaire à celle de `winetricks`.
+Lorsque vous le lancez pour la première fois, via une ligne de commande (ou via un lanceur de votre environnement de bureau):
+
+[source,shell]
+....
+% Homura
+....
+
+Cela devrait afficher le message d'accueil du programme.
+Cliquez sur _OK_ pour continuer.
+
+image::homura-launch-1.png[]
+
+Le logiciel proposera la création d'un raccourci dans le menu des environnements de bureaux compatibles:
+
+image::homura-run-2.png[]
+
+En fonction de la configuration de la machine FreeBSD hôte, il se peut qu'Homura affiche un message vous incitant à rapidement installer les pilotes natifs pour votre carte graphique.
+
+image::homura-run-3.png[]
+
+La fenêtre principale de l'application devrait désormais apparaître, elle correspond plus ou moins à une sorte de menu principal avec toutes ses options.
+Nombre de ces éléments sont identiques à ceux trouvés dans `winetricks`, néanmoins, Homura en propose également des nouveaux, comme une option utile pour ouvrir le répertoire des données (_Open Homura Folder_) ou de lancer un programme particulier au sein du préfixe (_Run a executable in prefix_).
+
+image::homura-install-1.png[]
+
+Pour choisir une application prise en charge et l'installer, sélectionnez _Installation_, puis cliquez sur _OK_.
+Cela affichera une liste d'applications qu'Homura pourra installer automatiquement.
+Choisissez-en une, puis cliquez sur _OK_ pour en commencer l'installation.
+
+image::homura-install-2.png[]
+
+Homura commencera d'abord par télécharger l'application en question.
+Dans un environnement de bureau le prenant en charge, une notification est susceptible d'apparaître.
+
+image::homura-install-3.png[]
+
+De plus, le programme se chargera de générer un nouveau préfixe pour l'application.
+Une fenêtre standard de WINE devrait apparaître avec ce message:
+
+image::homura-install-4.png[]
+
+Ensuite, Homura se chargera d'installer tous les prérequis pour ledit programme.
+Ce qui peut impliquer le téléchargement et l'extraction d'un certain nombre de fichiers, les détails de ces actions apparaîtront dans une fenêtre comme ceci:
+
+image::homura-install-5.png[]
+
+Les paquets téléchargés seront automatiquement extraits et installés en fonction des besoins.
+
+image::homura-install-6.png[]
+
+L'installation peut se solder par une simple notification de bureau ou un message dans le terminal, en fonction de la manière dont Homura a été lancé.
+Mais dans tous les cas, Homura devrait de nouveau afficher son écran principal.
+Afin de vérifier si l'installation a effectivement été menée à bien, choisissez _Launcher_, puis cliquez sur _OK_.
+
+image::homura-install-7.png[]
+
+Cela affichera une liste des programmes installés.
+
+image::homura-install-8.png[]
+
+Pour lancer le nouveau programme, sélectionnez le depuis la liste, puis cliquez sur _OK_.
+Afin de procéder à la désinstallation d'une application, choisissez _Uninstallation_ depuis le menu principal, ce qui devrait afficher une liste similaire.
+Choisissez un programme à supprimer, puis cliquez sur _OK_.
+
+image::homura-uninstall-1.png[]
+
+[[running-multiple-management-guis]]
+=== Utiliser plusieurs outils graphiques de gestion
+
+Il est à noter que l'installation d'un outil n'exclut pas l'utilisation d'un autre.
+Il est totalement possible, et même intéressant, d'avoir plusieurs outils installés en même temps, comme ils offrent le support de différents programmes.
+
+Cependant, assurez-vous au préalable qu'ils n'accèdent pas au même préfixe WINE.
+Chacun de ces logiciels applique des solutions de contournement et appliquent des changements aux registres en fonction de problèmes connus au sein de WINE afin de permettre la bonne exécution d'un programme.
+Utiliser `wintricks` et Homura sur le même préfixe WINE pourrait compromettre ces changements et rendre ainsi certaines applications instables.
+
+[[wine-in-multi-user-os-installations]]
+== WINE sur un système FreeBSD avec plusieurs utilisateurs
+
+[[issues-with-using-a-common-wine-prefix]]
+=== Problèmes avec l'utilisation d'un préfixe WINE commun
+
+Comme la plupart des systèmes d'exploitation de type UNIX(R), FreeBSD est conçu de sorte que plusieurs utilisateurs puissent être connectés et peuvent travailler sur la même machine en même temps.
+D'un autre côté, Windows(R) est aussi un système multi-utilisateurs, mais dans le sens où il peut y avoir plusieurs comptes utilisateur sur un même système.
+Mais, l'objectif est qu'un seul utilisateur à la fois se serve de la machine physique (ordinateur portable ou fixe).
+
+Les récentes versions grand public de Windows(R) ont amélioré l'utilisation du système dans le cas d'un scénario multi-utilisateurs.
+Mais le système reste largement structuré pour une utilisation mono-utilisateur.
+De plus, les mesures prises par le projet WINE afin de créer un environnement compatible Windows(R) impliquent, contrairement à aux applications FreeBSD (y compris WINE lui-même), qu'il s'approchera d'un environnement mono-utilisateur.
+
+Ce qui veut dire, dans cette optique, que chaque utilisateur devra gérer son propre ensemble de configurations, ce qui est potentiellement une bonne chose.
+Cela dit, il peut être avantageux d'installer certaines applications une seule fois, notamment les plus lourdes, comme les suites de bureautique ou les jeux vidéo.
+Deux raisons évidentes pour vouloir procéder ainsi: la maintenance (les mises à jour ne devront être effectuées qu'une seule fois) et l'efficacité en termes d'espace disque (pas de duplications de fichiers).
+
+Il existe deux stratégies dans le but de minimiser l'impact de plusieurs utilisateurs WINE sur le système.
+
+[[installing-applications-to-a-common-drivesettings]]
+=== Installer des applications sur un disque dur commun
+
+Comme montré dans la section sur la configuration de WINE, ce dernier fourni la possibilité d'intégrer des disques supplémentaires à un préfixe donné.
+De cette manière, les applications peuvent être installées à un endroit commun, alors que les utilisateurs pourront toujours avoir un préfixe avec leurs configurations propres (selon le programme).
+C'est un bon choix, s'il y a peu d'applications devant être partagées entre les utilisateurs, et s'il y a des programmes qui n'ont besoin que de configurations minimes de leur préfixe pour leur permettre de fonctionner.
+
+Les étapes pour procéder comme ceci sont les suivantes:
+
+. Premièrement, mettre en place un répertoire partagé sur le système avec lequel seront stockés les fichiers, comme [.filename]#/mnt/windows-drive_d/#.
+Créer un nouveau dossier, cela est détaillé dans la page de manuel de man:mkdir[1].
+. Puis, définir les permissions pour ce nouveau répertoire afin d'autoriser l'accès uniquement aux utilisateurs voulus.
+Une manière de procéder est de créer un nouveau groupe, "windows" par exemple, ajouter les utilisateurs en question à ce groupe (voir la sous-section sur les groupes dans la section crossref:basics[users-groups,Gestion des comptes et des utilisateurs] de ce manuel), puis définir les permissions du répertoire sur `770` (la section sur les crossref:basics[permissions,permissions] sous FreeBSD illustre ce processus).
+. Enfin, ajouter ce répertoire au préfixe de l'utilisateur en utilisant `winecfg` comme décrit plus haut, dans la section sur la configuration de WINE.
+
+Une fois ceci terminé, les applications pourrons être installées à cet emplacement, et ensuite être lancées en utilisant la lettre de lecteur assignée (ou bien en utilisant le chemin standard façon UNIX(R).
+Cependant, comme noté plus haut, un seul utilisateur devrait utiliser ces applications (qui pourraient accéder à des fichiers dans leur répertoire d'installation) à la fois.
+Il se peut que certaines applications présentent un comportement inattendu lorsqu'elles seront exécutées par un utilisateur qui n'en n'est pas le propriétaire, malgré le fait que ce dernier appartienne bien au groupe ayant les permissions "lecture/écriture/exécution" pour tout le répertoire.
+
+[[using-a-common-installation-of-wine]]
+=== Utiliser une installation commune de WINE
+
+Si jamais beaucoup d'applications doivent être partagées, ou bien qu'elles nécessitent des réglages spéciaux pour fonctionner correctement, une autre approche peut être requise.
+Dans cette méthode, un autre utilisateur est créé tout spécialement dans le but de stocker les préfixes WINE et les applications installées.
+Chaque utilisateur voulu sera autorisé à lancer les programmes en tant que ce nouvel utilisateur en utilisant la commande man:sudo[8].
+Cela a pour résultat, que ces utilisateurs peuvent désormais lancer une application WINE comme ils le feraient en temps normal, cela agira simplement comme si cette dernière était lancée par l'utilisateur nouvellement crée, et donc utilisera le préfixe centralisé contenant les configurations ainsi que les programmes.
+Pour parvenir à cela, il faut suivre les étapes suivantes:
+
+Créez un nouvel utilisateur avec la commande suivante en tant que `root`:
+
+[source,shell]
+....
+# adduser
+....
+
+Entrez le nom d'utilisateur (par exemple _windows_) et le nom complet ("Microsoft Windows").
+Ensuite acceptez les options par défauts pour les questions restantes.
+Puis, installez l'utilitaire `sudo` en version pré-compilé avec la commande suivante:
+
+[source,shell]
+....
+# pkg install sudo
+....
+
+Une fois l'installation terminée, éditez [.filename]#/etc/sudoers# comme ce qui suit:
+
+[.programlisting]
+....
+# User alias specification
+
+# define which users can run the wine/windows programs
+User_Alias WINDOWS_USERS = user1,user2
+
+# define which users can administrate (become root)
+User_Alias ADMIN = user1
+
+# Cmnd alias specification
+
+# define which commands the WINDOWS_USERS may run
+Cmnd_Alias WINDOWS = /usr/bin/wine,/usr/bin/winecfg
+
+# Defaults
+Defaults:WINDOWS_USERS env_reset
+Defaults:WINDOWS_USERS env_keep += DISPLAY
+Defaults:WINDOWS_USERS env_keep += XAUTHORITY
+Defaults !lecture,tty_tickets,!fqdn
+
+# User privilege specification
+root ALL=(ALL) ALL
+
+# Members of the admin user_alias, defined above, may gain root privileges
+ADMIN ALL=(ALL) ALL
+
+# The WINDOWS_USERS may run WINDOWS programs as user windows without a password
+WINDOWS_USERS ALL = (windows) NOPASSWD: WINDOWS
+....
+
+Cela permet aux utilisateurs nommés dans la section _User_Alias_ de lancer les programmes listés à la section _Cmnd Alias_ en utilisant les ressources listées dans la section _Defaults_ (sur l'affichage en cours d'utilisation) comme s'il s'agissait de l'utilisateur listé dans la dernière ligne du fichier.
+Autrement dit, les utilisateurs désignés comme _WINDOWS_USERS_ peuvent lancer les applications WINE et `winecfg` comme étant l'utilisateur _windows_.
+De plus, cette configuration signifie que les utilisateurs membres de ce groupe n'auront pas à entrer le mot de passe pour l'utilisateur _windows_.
+
+Ensuite, il faut donner l'accès à l'affichage pour l'utilisateur _windows_, sachant que c'est sous cet utilisateur que les programmes WINE seront lancés:
+
+[source,shell]
+....
+% xhost +local:windows
+....
+
+C'est une commande qui devrait être ajoutée à la liste des commandes lancées à la connexion ou au démarrage de l'environnement de bureau.
+Une fois que tout ceci est prêt, un utilisateur configuré comme un de `WINDOW_USERS` dans [.filename]#sudoers# peut lancer les programmes en utilisant le préfixe en commun avec la commande suivante:
+
+[source,shell]
+....
+% sudo -u windows wine program.exe
+....
+
+Il faut noter cela dit, que si plusieurs utilisateurs accèdent à cet environnement partagé en même temps, cela présente toujours un risque.
+Cependant, il faut aussi garder en tête que cet environnement partagé peut contenir plusieurs préfixes WINE.
+De cette manière, un administrateur peut créer, tester et vérifier un ensemble de programmes, chacun dans son propre préfixe.
+Dans le même temps, un utilisateur peut jouer à un jeu pendant qu'un autre utilise une suite bureautique sans pour autant multiplier des installations redondantes.
+
+[[wine-on-os-faq]]
+== WINE sur FreeBSD Foire Aux Questions
+
+La section suivante détaille les questions posées fréquemment, les trucs et astuces, ou bien les problèmes souvent rencontrés avec WINE sur FreeBSD, avec leurs réponses respectives.
+
+[[basic-installation-and-usage]]
+=== Installation et utilisation basique
+
+[[how-to-install-32-bit-and-64-bit-wine-on-the-same-system]]
+==== Comment installer la version 32 bits et la versions 64 bits sur le même système?
+
+
+Comme déjà mentionné, les paquets wine et i386-wine entrent en conflit s'ils sont installés normalement sur le même système.
+Néanmoins, plusieurs types d'installations peuvent être mis en place en utilisant des mécanismes comme chroots/jails, ou en compilant WINE directement depuis les sources (hors catalogue de logiciels portés de FreeBSD).
+
+[[can-dos-programs-be-run-on-wine]]
+==== Peut-on utiliser un programme DOS sous WINE ?
+
+Théoriquement oui, car ce sont des programmes en interfaces console comme nous l'avons vu plus haut.
+Cela dit, il existe une méthode plus adaptée à cela, il suffit d'utiliser package:emulators/dosbox[DOSBox].
+Bien sûr, cela ne coûte rien d'essayer.
+Créez simplement un nouveau préfixe WINE, installez le programme et si cela ne marche pas, supprimez le préfixe.
+
+[[should-the-wine-devel-packageport-be-installed-to-use-the-development-version-of-wine-instead-of-stable]]
+==== Est-ce que le paquet package:emulators/wine-devel[] doit être installé pour pouvoir utiliser la version en développement de WINE à la place de la version stable?
+
+Oui, cette version installe la version développement de WINE.
+Comme avec les versions 32 et 64 bits de WINE, la version développement ne peux pas être installée en même temps que la version stable sans mesures additionnelles.
+
+Notez qu'il existait aussi une version "Staging" de WINE, contenant les mises à jour les plus récentes du projet.
+Cette version était disponible dans le catalogue de logiciels portés de FreeBSD, mais a depuis été supprimée.
+Cette version est toujours compilable depuis les sources cela dit.
+
+[[install-optimization]]
+=== Optimisation de l'installation
+
+[[how-should-windows-hardware-graphics-drivers-be-handled]]
+==== Comment les pilotes (de carte graphique par exemple) Windows(R) sont pris en charge?
+
+Les pilotes de périphériques se chargent de transférer des commandes depuis une application vers le matériel de la machine.
+WINE émule un environnement Windows(R), ce qui inclut les pilotes, qui utilisent ensuite les pilotes natifs de FreeBSD pour effectuer ce transfert.
+Il n'est pas recommandé d'installer des pilotes Windows(R), car WINE est conçu de manière à interagir avec les pilotes du système hôte.
+Si par exemple, des pilotes de cartes graphiques améliorent ses performances, veuillez plutôt installer la version FreeBSD et non leur équivalent Windows(R).
+
+[[is-there-a-way-to-make-windows-fonts-look-better]]
+==== Est-il possible d'améliorer l'apparence des polices de caractères Windows(R)?
+
+Un utilisateur sur le forum FreeBSD propose cette configuration pour régler l'apparence des polices Windows(R) qui sont par défaut légèrement pixélisées.
+
+Selon https://forums.freebsd.org/threads/make-wine-ui-fonts-look-good.68273/[ce post sur le forum FreeBSD], ajouter ce qui suit au fichier [.filename]#.config/fontconfig/fonts.conf# devrait ajouter de l'anti-crenélage et rendre le texte plus lisible.
+
+[.programlisting]
+....
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd>"
+
+<fontconfig>
+
+ <!-- antialias all fonts -->
+ <match target="font">
+ <edit name="antialias" mode="assign"><bool>true</bool></edit>>
+ <edit name="hinting" mode="assign"><bool>true</bool></edit>>
+ <edit name="hintstyle" mode="assign"><const>hintslight</const></edit>>
+ <edit name="rgba" mode="assign"><const>rgb</const></edit>>
+ </match>
+</fontconfig>
+....
+
+
+[[does-having-windows-installed-elsewhere-on-a-system-help-wine-operate]]
+==== Installer Windows(R) ailleurs sur le système peut-il aider WINE à fonctionner?
+
+C'est possible, en fonction de l'application devant être exécutée.
+Comme mentionné dans la section sur `winecfg`, certaines DLLs intégrées par défaut avec WINE et d'autres bibliothèques peuvent être remplacés en fournissant le chemin de versions alternatives.
+Si la partition ou le disque Windows(R) est montée et accessible pour l'utilisateur sous FreeBSD, il est alors possible de remplacer certaines DLL de WINE par les versions natives du système Windows(R), diminuant potentiellement le risque de fonctionnement inattendus de certaines applications.
+
+[[application-specific]]
+=== Spécifique à une application
+
+[[where-is-the-best-place-to-see-if-application-x-works-on-wine]]
+==== Quel est le meilleur endroit pour savoir si une application fonctionne sous WINE?
+
+La première étape pour savoir si une application est compatible doit être le site https://appdb.winehq.org/[WINE AppDB].
+Il s'agit d'un site qui répertorie les programmes fonctionnant ou non sous WINE sur toutes les plateformes supportées, et les solutions pour les faire fonctionner, solutions qui sont souvent applicables sur d'autres plateformes.
+
+[[is-there-anything-that-will-help-games-run-better]]
+==== Y a-t-il quelque chose permettant à un jeu vidéo de mieux fonctionner?
+
+Peut-être.
+Beaucoup de jeux Windows(R) se basent sur DirectX, une surcouche graphique propriétaire de Microsoft.
+Cependant, il existe des projets open source qui tentent d'implémenter une prise en charge pour cette technologie.
+
+Le projet _dxvk_, est une tentative d'implémenter DirectX en utilisant le sous-système graphique Vulkan compatible avec FreeBSD.
+Bien que ce système soit avant tout conçu pour fonctionner pour la version Linux de WINE; il est apparemment possible d'utiliser ce système sur FreeBSD https://forums.freebsd.org/threads/what-about-gaming-on-freebsd.723/page-9[selon certains utilisateurs du forum FreeBSD].
+
+De plus, des initiatives sont en cours pour intégrer https://www.freshports.org/emulators/wine-proton/[WINE Proton].
+Cela devrait amener la version de Valve, développeur de la plateforme de jeux vidéo Steam, sur FreeBSD.
+Proton est une version de WINE spécialement conçue pour que nombre de jeux Windows(R) puissent tourner avec un minimum de manipulation de la part de l'utilisateur.
+
+[[is-there-anywhere-freebsd-wine-users-gather-to-exchange-tips-and-tricks]]
+==== Où les utilisateurs de WINE sous FreeBSD se ressemblent pour échanger des conseils et astuces?
+
+Il existe pas mal d'endroits où les utilisateurs FreeBSD discutent de problèmes liés à WINE, qui peuvent être utilisés pour rechercher des solutions:
+
+* https://forums.freebsd.org/[Le forum FreeBSD], tout particulièrement les sections _Installation and Maintenance of Ports or Packages_ ou _Emulation and virtualization_.
+* https://wiki.freebsd.org/IRC/Channels[Les canaux IRC de FreeBSD], dont #freebsd (pour un support général), #freebsd-games, ou autres.
+* https://discord.gg/2CCuhCt[Le serveur discord: The BSD World], notamment les canaux _bsd-desktop_, _bsd-gaming_, _bsd-wine_, et autres.
+
+[[other-os-resources]]
+=== Les ressource provenant d'autres systèmes d'exploitation
+
+Il existe un certain nombre de ressources relatives au fonctionnement de WINE sous d'autres systèmes d'exploitation qui peuvent cependant s'avérer utiles pour les utilisateurs de FreeBSD:
+
+* https://wiki.winehq.org/[Le Wiki de WINE] sur lequel se trouve des tonnes d'informations relatives à l'utilisation de WINE, qui sont bien souvent applicables à tous les systèmes d'exploitation pris en charge par WINE;
+* De plus, la documentation d'autre systèmes d'exploitation peut aussi s'avérer utile comme https://wiki.archlinux.org/index.php/wine[la page WINE] sur le Wiki de la distribution Arch Linux, bien que certaines applications tierces (i.e., "companion applications") ne soient bien évidemment pas disponibles sous FreeBSD;
+* Enfin, Codeweavers (le développeur d'une version commerciale de WINE) est un contributeur actif au projet WINE. Souvent, les réponses aux questions https://www.codeweavers.com/support/forums[sur leur forum] peuvent également être utiles pour dépanner des problèmes avec la version open source de WINE.
diff --git a/documentation/content/fr/books/handbook/x11/_index.adoc b/documentation/content/fr/books/handbook/x11/_index.adoc
index 5dedb7cd2e..25077645a7 100644
--- a/documentation/content/fr/books/handbook/x11/_index.adoc
+++ b/documentation/content/fr/books/handbook/x11/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/ports
next: books/handbook/partii
showBookMenu: true
weight: 7
-path: "/books/handbook/"
+path: "/books/handbook/x11/"
---
[[x11]]
diff --git a/documentation/content/fr/books/handbook/zfs/_index.adoc b/documentation/content/fr/books/handbook/zfs/_index.adoc
index 06850df7fc..594ce2797d 100644
--- a/documentation/content/fr/books/handbook/zfs/_index.adoc
+++ b/documentation/content/fr/books/handbook/zfs/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/geom
next: books/handbook/filesystems
showBookMenu: true
weight: 24
-path: "/books/handbook/"
+path: "/books/handbook/zfs/"
---
[[zfs]]
diff --git a/documentation/content/hu/books/handbook/advanced-networking/_index.adoc b/documentation/content/hu/books/handbook/advanced-networking/_index.adoc
index 0ccae5e24d..a2e09ee241 100644
--- a/documentation/content/hu/books/handbook/advanced-networking/_index.adoc
+++ b/documentation/content/hu/books/handbook/advanced-networking/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/firewalls
next: books/handbook/partv
showBookMenu: true
weight: 35
-path: "/books/handbook/"
+path: "/books/handbook/advanced-networking/"
---
[[advanced-networking]]
diff --git a/documentation/content/hu/books/handbook/audit/_index.adoc b/documentation/content/hu/books/handbook/audit/_index.adoc
index 948dc40bf2..7e75aa6fe5 100644
--- a/documentation/content/hu/books/handbook/audit/_index.adoc
+++ b/documentation/content/hu/books/handbook/audit/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mac
next: books/handbook/disks
showBookMenu: true
weight: 21
-path: "/books/handbook/"
+path: "/books/handbook/audit/"
---
[[audit]]
diff --git a/documentation/content/hu/books/handbook/basics/_index.adoc b/documentation/content/hu/books/handbook/basics/_index.adoc
index e7d66f7bbb..8dd20932ff 100644
--- a/documentation/content/hu/books/handbook/basics/_index.adoc
+++ b/documentation/content/hu/books/handbook/basics/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/install
next: books/handbook/ports
showBookMenu: true
weight: 5
-path: "/books/handbook/"
+path: "/books/handbook/basics/"
---
[[basics]]
diff --git a/documentation/content/hu/books/handbook/bibliography/_index.adoc b/documentation/content/hu/books/handbook/bibliography/_index.adoc
index 618975ad80..37625efb0e 100644
--- a/documentation/content/hu/books/handbook/bibliography/_index.adoc
+++ b/documentation/content/hu/books/handbook/bibliography/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mirrors
next: books/handbook/eresources
showBookMenu: true
weight: 38
-path: "/books/handbook/"
+path: "/books/handbook/bibliography/"
---
[appendix]
diff --git a/documentation/content/hu/books/handbook/boot/_index.adoc b/documentation/content/hu/books/handbook/boot/_index.adoc
index 63024b2b1a..edd6c23e5b 100644
--- a/documentation/content/hu/books/handbook/boot/_index.adoc
+++ b/documentation/content/hu/books/handbook/boot/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/config
next: books/handbook/users
showBookMenu: true
weight: 16
-path: "/books/handbook/"
+path: "/books/handbook/boot/"
---
[[boot]]
diff --git a/documentation/content/hu/books/handbook/config/_index.adoc b/documentation/content/hu/books/handbook/config/_index.adoc
index 794bc41c38..3f34aff79c 100644
--- a/documentation/content/hu/books/handbook/config/_index.adoc
+++ b/documentation/content/hu/books/handbook/config/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partiii
next: books/handbook/boot
showBookMenu: true
weight: 15
-path: "/books/handbook/"
+path: "/books/handbook/config/"
---
[[config-tuning]]
@@ -1406,6 +1406,6 @@ Az ACPI-rõl az alábbi helyeken találunk részletesebb információkat:
* A {freebsd-acpi}
* Az ACPI levelezési lista archívuma: http://lists.freebsd.org/pipermail/freebsd-acpi/[http://lists.freebsd.org/pipermail/freebsd-acpi/]
* A korábbi ACPI levelezési lista archívuma: http://home.jp.FreeBSD.org/mail-list/acpi-jp/[http://home.jp.FreeBSD.org/mail-list/acpi-jp/]
-* Az ACPI 2.0 specifikációja: http://acpi.info/spec.htm[http://acpi.info/spec.htm]
+* Az https://uefi.org/specifications#ACPI[ACPI specifikációja]
* A FreeBSD következõ man oldalai: man:acpi[4], man:acpi_thermal[4], man:acpidump[8], man:iasl[8], man:acpidb[8]
* http://www.cpqlinux.com/acpi-howto.html#fix_broken_dsdt[ A DSDT nyomkövetése (angolul)]. (Példának a Compaqot hozza fel, de általánosságban véve hasznos.)
diff --git a/documentation/content/hu/books/handbook/cutting-edge/_index.adoc b/documentation/content/hu/books/handbook/cutting-edge/_index.adoc
index 587045d159..e5f078993b 100644
--- a/documentation/content/hu/books/handbook/cutting-edge/_index.adoc
+++ b/documentation/content/hu/books/handbook/cutting-edge/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/l10n
next: books/handbook/dtrace
showBookMenu: true
weight: 28
-path: "/books/handbook/"
+path: "/books/handbook/cutting-edge/"
---
[[updating-upgrading]]
diff --git a/documentation/content/hu/books/handbook/desktop/_index.adoc b/documentation/content/hu/books/handbook/desktop/_index.adoc
index 69a0e0427f..b3bd5eb68b 100644
--- a/documentation/content/hu/books/handbook/desktop/_index.adoc
+++ b/documentation/content/hu/books/handbook/desktop/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partii
next: books/handbook/multimedia
showBookMenu: true
weight: 9
-path: "/books/handbook/"
+path: "/books/handbook/desktop/"
---
[[desktop]]
diff --git a/documentation/content/hu/books/handbook/disks/_index.adoc b/documentation/content/hu/books/handbook/disks/_index.adoc
index e425eb63dc..cbcf847c03 100644
--- a/documentation/content/hu/books/handbook/disks/_index.adoc
+++ b/documentation/content/hu/books/handbook/disks/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/audit
next: books/handbook/geom
showBookMenu: true
weight: 22
-path: "/books/handbook/"
+path: "/books/handbook/disks/"
---
[[disks]]
diff --git a/documentation/content/hu/books/handbook/dtrace/_index.adoc b/documentation/content/hu/books/handbook/dtrace/_index.adoc
index 06bdd0de16..df6ce6b2f1 100644
--- a/documentation/content/hu/books/handbook/dtrace/_index.adoc
+++ b/documentation/content/hu/books/handbook/dtrace/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/cutting-edge
next: books/handbook/partiv
showBookMenu: true
weight: 29
-path: "/books/handbook/"
+path: "/books/handbook/dtrace/"
---
[[dtrace]]
diff --git a/documentation/content/hu/books/handbook/eresources/_index.adoc b/documentation/content/hu/books/handbook/eresources/_index.adoc
index dc48ec3441..1203364c24 100644
--- a/documentation/content/hu/books/handbook/eresources/_index.adoc
+++ b/documentation/content/hu/books/handbook/eresources/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/bibliography
next: books/handbook/pgpkeys
showBookMenu: true
weight: 39
-path: "/books/handbook/"
+path: "/books/handbook/eresources/"
---
[appendix]
diff --git a/documentation/content/hu/books/handbook/filesystems/_index.adoc b/documentation/content/hu/books/handbook/filesystems/_index.adoc
index 32c7ed99bc..78681e5249 100644
--- a/documentation/content/hu/books/handbook/filesystems/_index.adoc
+++ b/documentation/content/hu/books/handbook/filesystems/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/geom
next: books/handbook/vinum
showBookMenu: true
weight: 24
-path: "/books/handbook/"
+path: "/books/handbook/filesystems/"
---
[[filesystems]]
diff --git a/documentation/content/hu/books/handbook/firewalls/_index.adoc b/documentation/content/hu/books/handbook/firewalls/_index.adoc
index 188a68f0b3..529245538e 100644
--- a/documentation/content/hu/books/handbook/firewalls/_index.adoc
+++ b/documentation/content/hu/books/handbook/firewalls/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/network-servers
next: books/handbook/advanced-networking
showBookMenu: true
weight: 34
-path: "/books/handbook/"
+path: "/books/handbook/firewalls/"
---
[[firewalls]]
diff --git a/documentation/content/hu/books/handbook/geom/_index.adoc b/documentation/content/hu/books/handbook/geom/_index.adoc
index 95016e96b9..629c83fd89 100644
--- a/documentation/content/hu/books/handbook/geom/_index.adoc
+++ b/documentation/content/hu/books/handbook/geom/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/disks
next: books/handbook/filesystems
showBookMenu: true
weight: 23
-path: "/books/handbook/"
+path: "/books/handbook/geom/"
---
[[geom]]
diff --git a/documentation/content/hu/books/handbook/install/_index.adoc b/documentation/content/hu/books/handbook/install/_index.adoc
index ebe5799e1f..9ccc216b7d 100644
--- a/documentation/content/hu/books/handbook/install/_index.adoc
+++ b/documentation/content/hu/books/handbook/install/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/introduction
next: books/handbook/basics
showBookMenu: true
weight: 4
-path: "/books/handbook/"
+path: "/books/handbook/install/"
---
[[install]]
diff --git a/documentation/content/hu/books/handbook/introduction/_index.adoc b/documentation/content/hu/books/handbook/introduction/_index.adoc
index 8890b97170..641b429ac0 100644
--- a/documentation/content/hu/books/handbook/introduction/_index.adoc
+++ b/documentation/content/hu/books/handbook/introduction/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/parti
next: books/handbook/install
showBookMenu: true
weight: 3
-path: "/books/handbook/"
+path: "/books/handbook/introduction/"
---
[[introduction]]
diff --git a/documentation/content/hu/books/handbook/jails/_index.adoc b/documentation/content/hu/books/handbook/jails/_index.adoc
index 881f2ebfce..cf0d9a05ac 100644
--- a/documentation/content/hu/books/handbook/jails/_index.adoc
+++ b/documentation/content/hu/books/handbook/jails/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/security
next: books/handbook/mac
showBookMenu: true
weight: 19
-path: "/books/handbook/"
+path: "/books/handbook/jails/"
---
[[jails]]
diff --git a/documentation/content/hu/books/handbook/kernelconfig/_index.adoc b/documentation/content/hu/books/handbook/kernelconfig/_index.adoc
index efe1abbb29..e24b263e06 100644
--- a/documentation/content/hu/books/handbook/kernelconfig/_index.adoc
+++ b/documentation/content/hu/books/handbook/kernelconfig/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/multimedia
next: books/handbook/printing
showBookMenu: true
weight: 11
-path: "/books/handbook/"
+path: "/books/handbook/kernelconfig/"
---
[[kernelconfig]]
diff --git a/documentation/content/hu/books/handbook/l10n/_index.adoc b/documentation/content/hu/books/handbook/l10n/_index.adoc
index 64b6fcb8c1..4170270ddb 100644
--- a/documentation/content/hu/books/handbook/l10n/_index.adoc
+++ b/documentation/content/hu/books/handbook/l10n/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/virtualization
next: books/handbook/cutting-edge
showBookMenu: true
weight: 27
-path: "/books/handbook/"
+path: "/books/handbook/l10n/"
---
[[l10n]]
diff --git a/documentation/content/hu/books/handbook/linuxemu/_index.adoc b/documentation/content/hu/books/handbook/linuxemu/_index.adoc
index f1a9491a3a..8a7401d293 100644
--- a/documentation/content/hu/books/handbook/linuxemu/_index.adoc
+++ b/documentation/content/hu/books/handbook/linuxemu/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/printing
next: books/handbook/partiii
showBookMenu: true
weight: 13
-path: "/books/handbook/"
+path: "/books/handbook/linuxemu/"
---
[[linuxemu]]
diff --git a/documentation/content/hu/books/handbook/mac/_index.adoc b/documentation/content/hu/books/handbook/mac/_index.adoc
index d67b993ff9..81d8c17869 100644
--- a/documentation/content/hu/books/handbook/mac/_index.adoc
+++ b/documentation/content/hu/books/handbook/mac/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/jails
next: books/handbook/audit
showBookMenu: true
weight: 20
-path: "/books/handbook/"
+path: "/books/handbook/mac/"
---
[[mac]]
diff --git a/documentation/content/hu/books/handbook/mail/_index.adoc b/documentation/content/hu/books/handbook/mail/_index.adoc
index 27f0f330db..9bfe42f03a 100644
--- a/documentation/content/hu/books/handbook/mail/_index.adoc
+++ b/documentation/content/hu/books/handbook/mail/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/ppp-and-slip
next: books/handbook/network-servers
showBookMenu: true
weight: 32
-path: "/books/handbook/"
+path: "/books/handbook/mail/"
---
[[mail]]
@@ -420,7 +420,7 @@ Cw tartomány.net sort az /etc/mail/sendmail.cf
A sendmail GYIK a http://www.sendmail.org/faq/[http://www.sendmail.org/faq/] címen található meg (angolul) és mindenképpen javasolt elolvasni, ha "fel szeretnénk piszkálni" a levelezõ rendszerünk beállításait.
-=== Hogyan tudok levelezõ szervert futtatni egy betárcsázós PPPPPP kapcsolat esetében?
+=== Hogyan tudok levelezõ szervert futtatni egy betárcsázós PPP kapcsolat esetében?
Egy helyi hálózaton levõ FreeBSD-s gépet akarunk tehát az internethez kapcsolni. Ez a FreeBSD-s gép lesz a helyi hálózat leveleket továbbító átjárója. A PPP kapcsolat nem dedikált.
diff --git a/documentation/content/hu/books/handbook/mirrors/_index.adoc b/documentation/content/hu/books/handbook/mirrors/_index.adoc
index a4a4dbef23..f73ee3678d 100644
--- a/documentation/content/hu/books/handbook/mirrors/_index.adoc
+++ b/documentation/content/hu/books/handbook/mirrors/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partv
next: books/handbook/bibliography
showBookMenu: true
weight: 37
-path: "/books/handbook/"
+path: "/books/handbook/mirrors/"
---
[appendix]
diff --git a/documentation/content/hu/books/handbook/multimedia/_index.adoc b/documentation/content/hu/books/handbook/multimedia/_index.adoc
index 23c03868cb..3739205f75 100644
--- a/documentation/content/hu/books/handbook/multimedia/_index.adoc
+++ b/documentation/content/hu/books/handbook/multimedia/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/desktop
next: books/handbook/kernelconfig
showBookMenu: true
weight: 10
-path: "/books/handbook/"
+path: "/books/handbook/multimedia/"
---
[[multimedia]]
diff --git a/documentation/content/hu/books/handbook/network-servers/_index.adoc b/documentation/content/hu/books/handbook/network-servers/_index.adoc
index ceb2c6d665..8afaed597c 100644
--- a/documentation/content/hu/books/handbook/network-servers/_index.adoc
+++ b/documentation/content/hu/books/handbook/network-servers/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mail
next: books/handbook/firewalls
showBookMenu: true
weight: 33
-path: "/books/handbook/"
+path: "/books/handbook/network-servers/"
---
[[network-servers]]
diff --git a/documentation/content/hu/books/handbook/parti.adoc b/documentation/content/hu/books/handbook/parti.adoc
index c53719fc52..5cfc559f66 100644
--- a/documentation/content/hu/books/handbook/parti.adoc
+++ b/documentation/content/hu/books/handbook/parti.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/preface
next: books/handbook/introduction
showBookMenu: true
weight: 2
-path: "/books/handbook/"
+path: "/books/handbook/parti/"
---
[[getting-started]]
diff --git a/documentation/content/hu/books/handbook/partii.adoc b/documentation/content/hu/books/handbook/partii.adoc
index f7f64041cc..72003d4b04 100644
--- a/documentation/content/hu/books/handbook/partii.adoc
+++ b/documentation/content/hu/books/handbook/partii.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/x11
next: books/handbook/desktop
showBookMenu: true
weight: 8
-path: "/books/handbook/"
+path: "/books/handbook/partii/"
---
[[common-tasks]]
diff --git a/documentation/content/hu/books/handbook/partiii.adoc b/documentation/content/hu/books/handbook/partiii.adoc
index 5d6e1e00b6..3208b4b38c 100644
--- a/documentation/content/hu/books/handbook/partiii.adoc
+++ b/documentation/content/hu/books/handbook/partiii.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/linuxemu
next: books/handbook/config
showBookMenu: true
weight: 14
-path: "/books/handbook/"
+path: "/books/handbook/partiii/"
---
[[system-administration]]
diff --git a/documentation/content/hu/books/handbook/partiv.adoc b/documentation/content/hu/books/handbook/partiv.adoc
index 5b0b32dd1f..292b8d69e5 100644
--- a/documentation/content/hu/books/handbook/partiv.adoc
+++ b/documentation/content/hu/books/handbook/partiv.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/usb-device-mode
next: books/handbook/serialcomms
showBookMenu: true
weight: 30
-path: "/books/handbook/"
+path: "/books/handbook/partiv/"
---
[[network-communication]]
diff --git a/documentation/content/hu/books/handbook/partv.adoc b/documentation/content/hu/books/handbook/partv.adoc
index eabb4ddfd5..1f61dac343 100644
--- a/documentation/content/hu/books/handbook/partv.adoc
+++ b/documentation/content/hu/books/handbook/partv.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/advanced-networking
next: books/handbook/mirrors
showBookMenu: true
weight: 36
-path: "/books/handbook/"
+path: "/books/handbook/partv/"
---
[[appendices]]
diff --git a/documentation/content/hu/books/handbook/pgpkeys/_index.adoc b/documentation/content/hu/books/handbook/pgpkeys/_index.adoc
index 151fac196e..4297e4a1e5 100644
--- a/documentation/content/hu/books/handbook/pgpkeys/_index.adoc
+++ b/documentation/content/hu/books/handbook/pgpkeys/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/eresources
next: books/handbook/freebsd-glossary
showBookMenu: true
weight: 40
-path: "/books/handbook/"
+path: "/books/handbook/pgpkeys/"
---
[appendix]
@@ -59,9 +59,6 @@ The OpenPGP keys of the `FreeBSD.org` officers are shown here. These keys can be
=== {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/hu/books/handbook/ports/_index.adoc b/documentation/content/hu/books/handbook/ports/_index.adoc
index bfb1bdeb57..44b2c18ed6 100644
--- a/documentation/content/hu/books/handbook/ports/_index.adoc
+++ b/documentation/content/hu/books/handbook/ports/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/basics
next: books/handbook/x11
showBookMenu: true
weight: 6
-path: "/books/handbook/"
+path: "/books/handbook/ports/"
---
[[ports]]
diff --git a/documentation/content/hu/books/handbook/ppp-and-slip/_index.adoc b/documentation/content/hu/books/handbook/ppp-and-slip/_index.adoc
index 25f6958d17..44c371e863 100644
--- a/documentation/content/hu/books/handbook/ppp-and-slip/_index.adoc
+++ b/documentation/content/hu/books/handbook/ppp-and-slip/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/serialcomms
next: books/handbook/mail
showBookMenu: true
weight: 31
-path: "/books/handbook/"
+path: "/books/handbook/ppp-and-slip/"
---
[[ppp-and-slip]]
diff --git a/documentation/content/hu/books/handbook/preface/_index.adoc b/documentation/content/hu/books/handbook/preface/_index.adoc
index 2bd812ce37..5a9dc5b85a 100644
--- a/documentation/content/hu/books/handbook/preface/_index.adoc
+++ b/documentation/content/hu/books/handbook/preface/_index.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/
next: books/handbook/parti
showBookMenu: true
weight: 1
-path: "/books/handbook/"
+path: "/books/handbook/preface/"
---
[preface]
diff --git a/documentation/content/hu/books/handbook/printing/_index.adoc b/documentation/content/hu/books/handbook/printing/_index.adoc
index 5582242cf9..f313999495 100644
--- a/documentation/content/hu/books/handbook/printing/_index.adoc
+++ b/documentation/content/hu/books/handbook/printing/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/kernelconfig
next: books/handbook/linuxemu
showBookMenu: true
weight: 12
-path: "/books/handbook/"
+path: "/books/handbook/printing/"
---
[[printing]]
diff --git a/documentation/content/hu/books/handbook/security/_index.adoc b/documentation/content/hu/books/handbook/security/_index.adoc
index 3c4eb6d6e4..d38808cbdd 100644
--- a/documentation/content/hu/books/handbook/security/_index.adoc
+++ b/documentation/content/hu/books/handbook/security/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/users
next: books/handbook/jails
showBookMenu: true
weight: 18
-path: "/books/handbook/"
+path: "/books/handbook/security/"
---
[[security]]
diff --git a/documentation/content/hu/books/handbook/serialcomms/_index.adoc b/documentation/content/hu/books/handbook/serialcomms/_index.adoc
index 3737f7559c..71de14bd46 100644
--- a/documentation/content/hu/books/handbook/serialcomms/_index.adoc
+++ b/documentation/content/hu/books/handbook/serialcomms/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partiv
next: books/handbook/ppp-and-slip
showBookMenu: true
weight: 31
-path: "/books/handbook/"
+path: "/books/handbook/serialcomms/"
---
[[serialcomms]]
diff --git a/documentation/content/hu/books/handbook/users/_index.adoc b/documentation/content/hu/books/handbook/users/_index.adoc
index a66ed723e7..9abefd5cb0 100644
--- a/documentation/content/hu/books/handbook/users/_index.adoc
+++ b/documentation/content/hu/books/handbook/users/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/boot
next: books/handbook/security
showBookMenu: true
weight: 17
-path: "/books/handbook/"
+path: "/books/handbook/users/"
---
[[users]]
diff --git a/documentation/content/hu/books/handbook/vinum/_index.adoc b/documentation/content/hu/books/handbook/vinum/_index.adoc
index 868e675f3d..7818b4026e 100644
--- a/documentation/content/hu/books/handbook/vinum/_index.adoc
+++ b/documentation/content/hu/books/handbook/vinum/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/filesystems
next: books/handbook/virtualization
showBookMenu: true
weight: 25
-path: "/books/handbook/"
+path: "/books/handbook/vinum/"
---
[[vinum-vinum]]
diff --git a/documentation/content/hu/books/handbook/virtualization/_index.adoc b/documentation/content/hu/books/handbook/virtualization/_index.adoc
index 4ce1fdb06e..da28b6004f 100644
--- a/documentation/content/hu/books/handbook/virtualization/_index.adoc
+++ b/documentation/content/hu/books/handbook/virtualization/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/vinum
next: books/handbook/l10n
showBookMenu: true
weight: 26
-path: "/books/handbook/"
+path: "/books/handbook/virtualization/"
---
[[virtualization]]
diff --git a/documentation/content/hu/books/handbook/x11/_index.adoc b/documentation/content/hu/books/handbook/x11/_index.adoc
index e75ae9e1e2..1db6dbbcf4 100644
--- a/documentation/content/hu/books/handbook/x11/_index.adoc
+++ b/documentation/content/hu/books/handbook/x11/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/ports
next: books/handbook/partii
showBookMenu: true
weight: 7
-path: "/books/handbook/"
+path: "/books/handbook/x11/"
---
[[x11]]
diff --git a/documentation/content/it/books/handbook/advanced-networking/_index.adoc b/documentation/content/it/books/handbook/advanced-networking/_index.adoc
index 61a72f4c8a..637f6e4462 100644
--- a/documentation/content/it/books/handbook/advanced-networking/_index.adoc
+++ b/documentation/content/it/books/handbook/advanced-networking/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/firewalls
next: books/handbook/partv
showBookMenu: true
weight: 34
-path: "/books/handbook/"
+path: "/books/handbook/advanced-networking/"
---
[[advanced-networking]]
diff --git a/documentation/content/it/books/handbook/audit/_index.adoc b/documentation/content/it/books/handbook/audit/_index.adoc
index 78dd8ec827..e5a3bd3196 100644
--- a/documentation/content/it/books/handbook/audit/_index.adoc
+++ b/documentation/content/it/books/handbook/audit/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mac
next: books/handbook/disks
showBookMenu: true
weight: 21
-path: "/books/handbook/"
+path: "/books/handbook/audit/"
---
[[audit]]
diff --git a/documentation/content/it/books/handbook/basics/_index.adoc b/documentation/content/it/books/handbook/basics/_index.adoc
index 275c68c24c..f541115ef2 100644
--- a/documentation/content/it/books/handbook/basics/_index.adoc
+++ b/documentation/content/it/books/handbook/basics/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/install
next: books/handbook/ports
showBookMenu: true
weight: 5
-path: "/books/handbook/"
+path: "/books/handbook/basics/"
---
[[basics]]
diff --git a/documentation/content/it/books/handbook/bibliography/_index.adoc b/documentation/content/it/books/handbook/bibliography/_index.adoc
index 1d1312cd58..c1a0df0440 100644
--- a/documentation/content/it/books/handbook/bibliography/_index.adoc
+++ b/documentation/content/it/books/handbook/bibliography/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mirrors
next: books/handbook/eresources
showBookMenu: true
weight: 37
-path: "/books/handbook/"
+path: "/books/handbook/bibliography/"
---
[appendix]
diff --git a/documentation/content/it/books/handbook/boot/_index.adoc b/documentation/content/it/books/handbook/boot/_index.adoc
index 1029e1d4a1..e6f936f178 100644
--- a/documentation/content/it/books/handbook/boot/_index.adoc
+++ b/documentation/content/it/books/handbook/boot/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/config
next: books/handbook/users
showBookMenu: true
weight: 16
-path: "/books/handbook/"
+path: "/books/handbook/boot/"
---
[[boot]]
diff --git a/documentation/content/it/books/handbook/config/_index.adoc b/documentation/content/it/books/handbook/config/_index.adoc
index 5cc5f27092..226906fc9e 100644
--- a/documentation/content/it/books/handbook/config/_index.adoc
+++ b/documentation/content/it/books/handbook/config/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partiii
next: books/handbook/boot
showBookMenu: true
weight: 15
-path: "/books/handbook/"
+path: "/books/handbook/config/"
---
[[config-tuning]]
@@ -1361,6 +1361,6 @@ Maggiori informazioni su ACPI possono essere trovate nei seguenti posti:
* La {freebsd-acpi}
* Gli archivi della mailing list ACPI http://lists.freebsd.org/pipermail/freebsd-acpi/[http://lists.freebsd.org/pipermail/freebsd-acpi/]
* I vecchi archivi della mailing list ACPI http://home.jp.FreeBSD.org/mail-list/acpi-jp/[http://home.jp.FreeBSD.org/mail-list/acpi-jp/]
-* La specificazione ACPI 2.0 http://acpi.info/spec.htm[http://acpi.info/spec.htm]
+* La https://uefi.org/specifications#ACPI[specificazione ACPI]
* Le pagine man di FreeBSD: man:acpi[4], man:acpi_thermal[4], man:acpidump[8], man:iasl[8], man:acpidb[8]
* http://www.cpqlinux.com/acpi-howto.html#fix_broken_dsdt[ Le risorse di debugging di DSDT]. (Usa Compaq come esempio ma è sempre utile.)
diff --git a/documentation/content/it/books/handbook/cutting-edge/_index.adoc b/documentation/content/it/books/handbook/cutting-edge/_index.adoc
index 1da324db3e..5be32d1b1b 100644
--- a/documentation/content/it/books/handbook/cutting-edge/_index.adoc
+++ b/documentation/content/it/books/handbook/cutting-edge/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/l10n
next: books/handbook/partiv
showBookMenu: true
weight: 27
-path: "/books/handbook/"
+path: "/books/handbook/cutting-edge/"
---
[[updating-upgrading]]
diff --git a/documentation/content/it/books/handbook/desktop/_index.adoc b/documentation/content/it/books/handbook/desktop/_index.adoc
index c6cf3b7c4d..0934c9842d 100644
--- a/documentation/content/it/books/handbook/desktop/_index.adoc
+++ b/documentation/content/it/books/handbook/desktop/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partii
next: books/handbook/multimedia
showBookMenu: true
weight: 9
-path: "/books/handbook/"
+path: "/books/handbook/desktop/"
---
[[desktop]]
diff --git a/documentation/content/it/books/handbook/disks/_index.adoc b/documentation/content/it/books/handbook/disks/_index.adoc
index e016a5ea32..402bede4ec 100644
--- a/documentation/content/it/books/handbook/disks/_index.adoc
+++ b/documentation/content/it/books/handbook/disks/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/audit
next: books/handbook/geom
showBookMenu: true
weight: 22
-path: "/books/handbook/"
+path: "/books/handbook/disks/"
---
[[disks]]
diff --git a/documentation/content/it/books/handbook/eresources/_index.adoc b/documentation/content/it/books/handbook/eresources/_index.adoc
index 411128be3f..075c3c8f93 100644
--- a/documentation/content/it/books/handbook/eresources/_index.adoc
+++ b/documentation/content/it/books/handbook/eresources/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/bibliography
next: books/handbook/pgpkeys
showBookMenu: true
weight: 38
-path: "/books/handbook/"
+path: "/books/handbook/eresources/"
---
[appendix]
diff --git a/documentation/content/it/books/handbook/firewalls/_index.adoc b/documentation/content/it/books/handbook/firewalls/_index.adoc
index 7bf479d2b8..c8715485ff 100644
--- a/documentation/content/it/books/handbook/firewalls/_index.adoc
+++ b/documentation/content/it/books/handbook/firewalls/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/network-servers
next: books/handbook/advanced-networking
showBookMenu: true
weight: 33
-path: "/books/handbook/"
+path: "/books/handbook/firewalls/"
---
[[firewalls]]
diff --git a/documentation/content/it/books/handbook/geom/_index.adoc b/documentation/content/it/books/handbook/geom/_index.adoc
index 2561bd1669..69811262b4 100644
--- a/documentation/content/it/books/handbook/geom/_index.adoc
+++ b/documentation/content/it/books/handbook/geom/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/disks
next: books/handbook/vinum
showBookMenu: true
weight: 23
-path: "/books/handbook/"
+path: "/books/handbook/geom/"
---
[[geom]]
diff --git a/documentation/content/it/books/handbook/install/_index.adoc b/documentation/content/it/books/handbook/install/_index.adoc
index 5383c961ad..cdf7545264 100644
--- a/documentation/content/it/books/handbook/install/_index.adoc
+++ b/documentation/content/it/books/handbook/install/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/introduction
next: books/handbook/basics
showBookMenu: true
weight: 4
-path: "/books/handbook/"
+path: "/books/handbook/install/"
---
[[install]]
diff --git a/documentation/content/it/books/handbook/introduction/_index.adoc b/documentation/content/it/books/handbook/introduction/_index.adoc
index fdeee65a96..670f3364ab 100644
--- a/documentation/content/it/books/handbook/introduction/_index.adoc
+++ b/documentation/content/it/books/handbook/introduction/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/parti
next: books/handbook/install
showBookMenu: true
weight: 3
-path: "/books/handbook/"
+path: "/books/handbook/introduction/"
---
[[introduction]]
diff --git a/documentation/content/it/books/handbook/jails/_index.adoc b/documentation/content/it/books/handbook/jails/_index.adoc
index 03547d9158..fbc41df37b 100644
--- a/documentation/content/it/books/handbook/jails/_index.adoc
+++ b/documentation/content/it/books/handbook/jails/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/security
next: books/handbook/mac
showBookMenu: true
weight: 19
-path: "/books/handbook/"
+path: "/books/handbook/jails/"
---
[[jails]]
diff --git a/documentation/content/it/books/handbook/kernelconfig/_index.adoc b/documentation/content/it/books/handbook/kernelconfig/_index.adoc
index a93a89052e..4cdf562bdd 100644
--- a/documentation/content/it/books/handbook/kernelconfig/_index.adoc
+++ b/documentation/content/it/books/handbook/kernelconfig/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/multimedia
next: books/handbook/printing
showBookMenu: true
weight: 11
-path: "/books/handbook/"
+path: "/books/handbook/kernelconfig/"
---
[[kernelconfig]]
diff --git a/documentation/content/it/books/handbook/l10n/_index.adoc b/documentation/content/it/books/handbook/l10n/_index.adoc
index 07e7310298..4b8d633ac1 100644
--- a/documentation/content/it/books/handbook/l10n/_index.adoc
+++ b/documentation/content/it/books/handbook/l10n/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/virtualization
next: books/handbook/cutting-edge
showBookMenu: true
weight: 26
-path: "/books/handbook/"
+path: "/books/handbook/l10n/"
---
[[l10n]]
diff --git a/documentation/content/it/books/handbook/linuxemu/_index.adoc b/documentation/content/it/books/handbook/linuxemu/_index.adoc
index 6004536231..c75b7a0269 100644
--- a/documentation/content/it/books/handbook/linuxemu/_index.adoc
+++ b/documentation/content/it/books/handbook/linuxemu/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/printing
next: books/handbook/partiii
showBookMenu: true
weight: 13
-path: "/books/handbook/"
+path: "/books/handbook/linuxemu/"
---
[[linuxemu]]
diff --git a/documentation/content/it/books/handbook/mac/_index.adoc b/documentation/content/it/books/handbook/mac/_index.adoc
index b12bf45944..e464d9ccdb 100644
--- a/documentation/content/it/books/handbook/mac/_index.adoc
+++ b/documentation/content/it/books/handbook/mac/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/jails
next: books/handbook/audit
showBookMenu: true
weight: 20
-path: "/books/handbook/"
+path: "/books/handbook/mac/"
---
[[mac]]
diff --git a/documentation/content/it/books/handbook/mail/_index.adoc b/documentation/content/it/books/handbook/mail/_index.adoc
index f3561cb486..ef180b01aa 100644
--- a/documentation/content/it/books/handbook/mail/_index.adoc
+++ b/documentation/content/it/books/handbook/mail/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/ppp-and-slip
next: books/handbook/network-servers
showBookMenu: true
weight: 31
-path: "/books/handbook/"
+path: "/books/handbook/mail/"
---
[[mail]]
@@ -476,7 +476,7 @@ in /etc/mail/sendmail.cf.
Le FAQ di sendmail possono essere trovate su http://www.sendmail.org/faq/[http://www.sendmail.org/faq/] ed è raccomandato leggerle se vuoi "perfezionare" la tua configurazione di posta.
-=== Come posso eseguire un server di posta su un host connesso in dial-up tramite PPPPPP ?
+=== Come posso eseguire un server di posta su un host connesso in dial-up tramite PPP ?
Vuoi collegare ad Internet una macchina FreeBSD posta sulla tua LAN. La macchina FreeBSD sarà un gateway di posta per la LAN. La connessione PPP non è molto indicata per questo scopo.
diff --git a/documentation/content/it/books/handbook/mirrors/_index.adoc b/documentation/content/it/books/handbook/mirrors/_index.adoc
index f059086b5c..6cb38468b3 100644
--- a/documentation/content/it/books/handbook/mirrors/_index.adoc
+++ b/documentation/content/it/books/handbook/mirrors/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partv
next: books/handbook/bibliography
showBookMenu: true
weight: 36
-path: "/books/handbook/"
+path: "/books/handbook/mirrors/"
---
[appendix]
diff --git a/documentation/content/it/books/handbook/multimedia/_index.adoc b/documentation/content/it/books/handbook/multimedia/_index.adoc
index e29e40934f..d0a27e00a6 100644
--- a/documentation/content/it/books/handbook/multimedia/_index.adoc
+++ b/documentation/content/it/books/handbook/multimedia/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/desktop
next: books/handbook/kernelconfig
showBookMenu: true
weight: 10
-path: "/books/handbook/"
+path: "/books/handbook/multimedia/"
---
[[multimedia]]
diff --git a/documentation/content/it/books/handbook/network-servers/_index.adoc b/documentation/content/it/books/handbook/network-servers/_index.adoc
index 5f531e834e..566b4fc2de 100644
--- a/documentation/content/it/books/handbook/network-servers/_index.adoc
+++ b/documentation/content/it/books/handbook/network-servers/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mail
next: books/handbook/firewalls
showBookMenu: true
weight: 32
-path: "/books/handbook/"
+path: "/books/handbook/network-servers/"
---
[[network-servers]]
diff --git a/documentation/content/it/books/handbook/parti.adoc b/documentation/content/it/books/handbook/parti.adoc
index e84d68cf24..755ccb698c 100644
--- a/documentation/content/it/books/handbook/parti.adoc
+++ b/documentation/content/it/books/handbook/parti.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/preface
next: books/handbook/introduction
showBookMenu: true
weight: 2
-path: "/books/handbook/"
+path: "/books/handbook/parti/"
---
[[getting-started]]
diff --git a/documentation/content/it/books/handbook/partii.adoc b/documentation/content/it/books/handbook/partii.adoc
index 16ee66b193..5662342e64 100644
--- a/documentation/content/it/books/handbook/partii.adoc
+++ b/documentation/content/it/books/handbook/partii.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/x11
next: books/handbook/desktop
showBookMenu: true
weight: 8
-path: "/books/handbook/"
+path: "/books/handbook/partii/"
---
[[common-tasks]]
diff --git a/documentation/content/it/books/handbook/partiii.adoc b/documentation/content/it/books/handbook/partiii.adoc
index ee802a8a1b..1eed524cb4 100644
--- a/documentation/content/it/books/handbook/partiii.adoc
+++ b/documentation/content/it/books/handbook/partiii.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/linuxemu
next: books/handbook/config
showBookMenu: true
weight: 14
-path: "/books/handbook/"
+path: "/books/handbook/partiii/"
---
[[system-administration]]
diff --git a/documentation/content/it/books/handbook/partiv.adoc b/documentation/content/it/books/handbook/partiv.adoc
index 695e4684e8..f7579acd12 100644
--- a/documentation/content/it/books/handbook/partiv.adoc
+++ b/documentation/content/it/books/handbook/partiv.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/usb-device-mode
next: books/handbook/serialcomms
showBookMenu: true
weight: 28
-path: "/books/handbook/"
+path: "/books/handbook/partiv/"
---
[[network-communication]]
diff --git a/documentation/content/it/books/handbook/partv.adoc b/documentation/content/it/books/handbook/partv.adoc
index 56f56ebe40..dc21f5727b 100644
--- a/documentation/content/it/books/handbook/partv.adoc
+++ b/documentation/content/it/books/handbook/partv.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/advanced-networking
next: books/handbook/mirrors
showBookMenu: true
weight: 35
-path: "/books/handbook/"
+path: "/books/handbook/partv/"
---
[[appendices]]
diff --git a/documentation/content/it/books/handbook/pgpkeys/_index.adoc b/documentation/content/it/books/handbook/pgpkeys/_index.adoc
index b039364ac9..643562dde0 100644
--- a/documentation/content/it/books/handbook/pgpkeys/_index.adoc
+++ b/documentation/content/it/books/handbook/pgpkeys/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/eresources
next: books/handbook/freebsd-glossary
showBookMenu: true
weight: 39
-path: "/books/handbook/"
+path: "/books/handbook/pgpkeys/"
---
[appendix]
@@ -59,9 +59,6 @@ Nel caso tu debba verificare una firma o inviare un messaggio cifrato a una dell
=== {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/it/books/handbook/ports/_index.adoc b/documentation/content/it/books/handbook/ports/_index.adoc
index 601e233f18..315ead631e 100644
--- a/documentation/content/it/books/handbook/ports/_index.adoc
+++ b/documentation/content/it/books/handbook/ports/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/basics
next: books/handbook/x11
showBookMenu: true
weight: 6
-path: "/books/handbook/"
+path: "/books/handbook/ports/"
---
[[ports]]
diff --git a/documentation/content/it/books/handbook/ppp-and-slip/_index.adoc b/documentation/content/it/books/handbook/ppp-and-slip/_index.adoc
index ebabf6fa93..0d0cc119d4 100644
--- a/documentation/content/it/books/handbook/ppp-and-slip/_index.adoc
+++ b/documentation/content/it/books/handbook/ppp-and-slip/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/serialcomms
next: books/handbook/mail
showBookMenu: true
weight: 30
-path: "/books/handbook/"
+path: "/books/handbook/ppp-and-slip/"
---
[[ppp-and-slip]]
diff --git a/documentation/content/it/books/handbook/preface/_index.adoc b/documentation/content/it/books/handbook/preface/_index.adoc
index a7a4fd1114..033a1dd4de 100644
--- a/documentation/content/it/books/handbook/preface/_index.adoc
+++ b/documentation/content/it/books/handbook/preface/_index.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/
next: books/handbook/parti
showBookMenu: true
weight: 1
-path: "/books/handbook/"
+path: "/books/handbook/preface/"
---
[preface]
diff --git a/documentation/content/it/books/handbook/printing/_index.adoc b/documentation/content/it/books/handbook/printing/_index.adoc
index f794c40a21..be5093aec0 100644
--- a/documentation/content/it/books/handbook/printing/_index.adoc
+++ b/documentation/content/it/books/handbook/printing/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/kernelconfig
next: books/handbook/linuxemu
showBookMenu: true
weight: 12
-path: "/books/handbook/"
+path: "/books/handbook/printing/"
---
[[printing]]
diff --git a/documentation/content/it/books/handbook/security/_index.adoc b/documentation/content/it/books/handbook/security/_index.adoc
index e57891ac4c..616f090427 100644
--- a/documentation/content/it/books/handbook/security/_index.adoc
+++ b/documentation/content/it/books/handbook/security/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/users
next: books/handbook/jails
showBookMenu: true
weight: 18
-path: "/books/handbook/"
+path: "/books/handbook/security/"
---
[[security]]
@@ -189,7 +189,7 @@ A good security script will also check for changes to user and staff members acc
If you have a huge amount of user disk space, it may take too long to run through every file on those partitions. In this case, setting mount flags to disallow suid binaries and devices on those partitions is a good idea. The `nodev` and `nosuid` options (see man:mount[8]) are what you want to look into. You should probably scan them anyway, at least once a week, since the object of this layer is to detect a break-in attempt, whether or not the attempt succeeds.
-Process accounting (see man:accton[8]) is a relatively low-overhead feature of the operating system which might help as a post-break-in evaluation mechanism. It is especially useful in tracking down how an intruder has actually broken into a system, assuming the file is still intact after the break-in has occured.
+Process accounting (see man:accton[8]) is a relatively low-overhead feature of the operating system which might help as a post-break-in evaluation mechanism. It is especially useful in tracking down how an intruder has actually broken into a system, assuming the file is still intact after the break-in has occurred.
Finally, security scripts should process the log files, and the logs themselves should be generated in as secure a manner as possible - remote syslog can be very useful. An intruder will try to cover his tracks, and log files are critical to the sysadmin trying to track down the time and method of the initial break-in. One way to keep a permanent record of the log files is to run the system console to a serial port and collect the information to a secure machine monitoring the consoles.
diff --git a/documentation/content/it/books/handbook/serialcomms/_index.adoc b/documentation/content/it/books/handbook/serialcomms/_index.adoc
index d024b13d4e..457353a32e 100644
--- a/documentation/content/it/books/handbook/serialcomms/_index.adoc
+++ b/documentation/content/it/books/handbook/serialcomms/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partiv
next: books/handbook/ppp-and-slip
showBookMenu: true
weight: 29
-path: "/books/handbook/"
+path: "/books/handbook/serialcomms/"
---
[[serialcomms]]
diff --git a/documentation/content/it/books/handbook/users/_index.adoc b/documentation/content/it/books/handbook/users/_index.adoc
index 08dfa1c9e9..6a7b0b91cb 100644
--- a/documentation/content/it/books/handbook/users/_index.adoc
+++ b/documentation/content/it/books/handbook/users/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/boot
next: books/handbook/security
showBookMenu: true
weight: 17
-path: "/books/handbook/"
+path: "/books/handbook/users/"
---
[[users]]
diff --git a/documentation/content/it/books/handbook/vinum/_index.adoc b/documentation/content/it/books/handbook/vinum/_index.adoc
index c41b126e3e..302f8ae3c0 100644
--- a/documentation/content/it/books/handbook/vinum/_index.adoc
+++ b/documentation/content/it/books/handbook/vinum/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/filesystems
next: books/handbook/virtualization
showBookMenu: true
weight: 24
-path: "/books/handbook/"
+path: "/books/handbook/vinum/"
---
[[vinum-vinum]]
diff --git a/documentation/content/it/books/handbook/virtualization/_index.adoc b/documentation/content/it/books/handbook/virtualization/_index.adoc
index fb6c82b3fe..529bdb8613 100644
--- a/documentation/content/it/books/handbook/virtualization/_index.adoc
+++ b/documentation/content/it/books/handbook/virtualization/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/vinum
next: books/handbook/l10n
showBookMenu: true
weight: 25
-path: "/books/handbook/"
+path: "/books/handbook/virtualization/"
---
[[virtualization]]
diff --git a/documentation/content/it/books/handbook/x11/_index.adoc b/documentation/content/it/books/handbook/x11/_index.adoc
index 14a5c83225..b3506d3f44 100644
--- a/documentation/content/it/books/handbook/x11/_index.adoc
+++ b/documentation/content/it/books/handbook/x11/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/ports
next: books/handbook/partii
showBookMenu: true
weight: 7
-path: "/books/handbook/"
+path: "/books/handbook/x11/"
---
[[x11]]
diff --git a/documentation/content/ja/books/handbook/_index.adoc b/documentation/content/ja/books/handbook/_index.adoc
index c0cf74743d..43e1ac7732 100644
--- a/documentation/content/ja/books/handbook/_index.adoc
+++ b/documentation/content/ja/books/handbook/_index.adoc
@@ -2,7 +2,7 @@
title: FreeBSD ハンドブック
authors:
- author: FreeBSD ドキュメンテーションプロジェクト
-copyright: 1995-2022 The FreeBSD Documentation Project
+copyright: 1995-2023 The FreeBSD Documentation Project
description: 絶えず進化している、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"]
tags: ["FreeBSD ハンドブック", "ハンドブック"]
diff --git a/documentation/content/ja/books/handbook/advanced-networking/_index.adoc b/documentation/content/ja/books/handbook/advanced-networking/_index.adoc
index 6ada5ec7fa..6f0af8ee34 100644
--- a/documentation/content/ja/books/handbook/advanced-networking/_index.adoc
+++ b/documentation/content/ja/books/handbook/advanced-networking/_index.adoc
@@ -1,11 +1,11 @@
---
-title: 第21章 高度なネットワーク
+title: 第20章 高度なネットワーク
part: パートIV. ネットワーク通信
prev: books/handbook/mail
next: books/handbook/partv
showBookMenu: true
-weight: 26
-path: "/books/handbook/"
+weight: 25
+path: "/books/handbook/advanced-networking/"
---
[[advanced-networking]]
@@ -16,7 +16,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 21
+:sectnumoffset: 20
:partnums:
:source-highlighter: rouge
:experimental:
diff --git a/documentation/content/ja/books/handbook/basics/_index.adoc b/documentation/content/ja/books/handbook/basics/_index.adoc
index 71e7c7cf65..043faad85d 100644
--- a/documentation/content/ja/books/handbook/basics/_index.adoc
+++ b/documentation/content/ja/books/handbook/basics/_index.adoc
@@ -1,15 +1,18 @@
---
-title: 第3章 UNIX の基礎知識
+title: 第3章 FreeBSD の基礎知識
part: パートI. 導入
prev: books/handbook/bsdinstall
next: books/handbook/ports
+description: FreeBSD オペレーティングシステムの基本的なコマンドと機能について
+tags: ["basics", "virtual consoles", "users", "management", "permissions", "directory structure", "disk organization", "mounting", "processes", "daemons", "shell", "editor", "manual pages", "devices"]
showBookMenu: true
weight: 5
-path: "/books/handbook/"
+path: "/books/handbook/basics/"
+aliases: ["/ja/books/handbook/consoles/","/ja/books/handbook/users-synopsis/","/ja/books/handbook/permissions/","/ja/books/handbook/dirstructure/","/ja/books/handbook/disk-organization/","/ja/books/handbook/mount-unmount/","/ja/books/handbook/basics-processes/","/ja/books/handbook/shells/","/ja/books/handbook/editors/","/ja/books/handbook/basics-devices/","/ja/books/handbook/basics-more-information/"]
---
[[basics]]
-= UNIX の基礎知識
+= FreeBSD の基礎知識
:doctype: book
:toc: macro
:toclevels: 1
@@ -49,11 +52,14 @@ endif::[]
[[basics-synopsis]]
== この章では
-この章では FreeBSD オペレーティングシステムの基本的なコマンドと機能について記述しています。 ここに書かれてあることのほとんどは、 どんな UNIX(R) オペレーティングシステムにもあてはまります。 この章に書いてあることに馴染みがあるなら、 この章は気軽に流し読みしてください。 あなたが FreeBSD の初心者なら、 何か質問する前にこの章を読んでおいた方がきっといいはずです。
+この章では FreeBSD オペレーティングシステムの基本的なコマンドと機能について記述しています。
+ここに書かれてあることのほとんどは、どんな UNIX(R) -like なオペレーティングシステムにもあてはまります。
+FreeBSD の初心者であれば、この章を読んでおいた方がきっといいはずです。
この章を読んで分かることは、次のようなことです。
-* FreeBSD の "仮想コンソール" の使い方
+* 仮想コンソールの使い方と設定方法
+* FreeBSD システム上でユーザやグループを作成し管理する方法
* UNIX(R) のファイルの許可属性の仕組みと FreeBSD のファイルフラグについて
* FreeBSD のファイルシステムの構成
* FreeBSD のディスク構成
@@ -67,170 +73,595 @@ endif::[]
[[consoles]]
== 仮想コンソールと端末
-FreeBSD は様々な使い方ができます。その中の一つが、 テキスト端末でコマンドを入力することです。この方法で FreeBSD を使えば、 UNIX(R) オペレーティングシステムの能力と柔軟性を手にすることができます。 この節では、"コンソール" と "端末" はどのようなもので、FreeBSD でどう使うかを 説明します。
-
-[[consoles-intro]]
-=== コンソール
-
-起動時に自動的にグラフィカルな環境が起動するように FreeBSD を設定していなければ、システムが起動してスタートアップ スクリプトが実行されると、すぐにログインプロンプトが出てくるでしょう。 次のようものが表示されるはずです。
+起動時に自動的にグラフィカルな環境が起動するように FreeBSD を設定していなければ、システムが起動すると、以下のようなコマンドラインのログインプロンプトが表示されます。
[source,shell]
....
-Additional ABI support:.
-Local package initialization:.
-Additional TCP options:.
-
-Fri Sep 20 13:01:06 EEST 2002
-
-FreeBSD/i386 (pc3.example.org) (ttyv0)
+FreeBSD/amd64 (pc3.example.org) (ttyv0)
login:
....
-あなたのシステムではメッセージが多少異なるかもしれませんが、 似たようなものが見られるはずです。 最後の 2 行が、今関心を向けているものです。 最後から 2 行目は、以下のようになっています。
+最初の行はシステムの情報です。
+`amd64` は、このシステム上で 64 ビット版の FreeBSD が動作していることを示しています。
+ホスト名は `pc3.example.org`、`ttyv0` は "システムコンソール" であることを示しています。
+次の行はログインプロンプトです。
+
+FreeBSD はマルチユーザシステムなので、ユーザを区別する何がしかの手段が必要です。
+システム上のプログラムを実行できるようになるには、すべてのユーザに対してシステムにログインすることが義務付けられています。
+すべてのユーザは、一意な "ユーザ名" と "パスワード" を持っています。
+
+システムコンソールにログインするには、システムのインストール時に crossref:bsdinstall[bsdinstall-addusers,ユーザの追加] で追加したユーザ名を入力して、kbd:[Enter] を押してください。
+次にそのユーザのパスワードを入力して、kbd:[Enter] を押してください。
+セキュリティの観点から、パスワードは _表示されません_。
+
+パスワードを正確に入力したら、日々のメッセージ (MOTD) が表示され、
+コマンドプロンプトが表示されます。
+ユーザ作成時に選択したシェルに依存しますが、このプロンプトは `+#+`, `$` または `%` といった記号です。
+プロンプトはユーザが FreeBSD のシステムコンソールへログインし、利用可能なコマンドを実行する準備ができていることを示しています。
+
+[[consoles-virtual]]
+=== 仮想コンソール
+
+システムコンソールからシステムに対話的にコマンドを実行できますが、FreeBSD システム上でキーボードによりコマンドラインから利用しているユーザは、通常代わりに仮想コンソールにログインします。
+デフォルトではシステムからのメッセージはシステムコンソールに出力され、これらのメッセージが、ユーザが作業しているコマンドまたはファイル上に表示されるため、ユーザが現在の作業に集中できなくなるためです。
+
+デフォルトでは FreeBSD は、複数の仮想コンソールを表示してコマンドを入力できるように設定されています。
+各仮想コンソールは、個別のログインプロンプトおよびシェルを持っており、簡単に仮想コンソール間の切り替えができます。
+これにより、グラフィカルな環境において同時に複数のウィンドウを開いてコマンドラインの環境を提供できます。
+
+FreeBSD では kbd:[Alt+F1] から kbd:[Alt+F8] までのキーの組み合わせが、仮想コンソール間の切り替えに予約されています。
+システムコンソール (`ttyv0`) に切り替えるには、kbd:[Alt+F1] を使ってください。
+最初の仮想コンソール (`ttyv1`) にアクセスするには kbd:[Alt+F2]、2 番目の仮想コンソール (`ttyv2`) にアクセスするには kbd:[Alt+F3]、といったように使ってください。
+Xorg をグラフィカルなコンソールとして使用しているときには、kbd:[Ctrl+Alt+F1] の組み合わせを使用すると、テキストベースの仮想コンソールへ戻ります。
+
+あるコンソールから他に切り替えるのに応じて、FreeBSD は画面への出力を管理します。
+結果として、FreeBSD で動かすコマンドを入力するのに使える複数の画面とキーボードを仮想的に実現できるのです。
+ある仮想コンソールで実行したプログラムは、ユーザが別の仮想コンソールに切り替えても実行を停止しません。
+
+FreeBSD のコンソールおよびキーボードドライバに関するさらなる技術的な説明については、man:kbdcontrol[1], man:vidcontrol[1], man:atkbd[4], man:syscons[4] および man:vt[4] を参照してください。
+
+FreeBSD では以下の `/etc/ttys` のセクションのように複数の利用可能な仮想コンソールが設定されています。
[.programlisting]
....
-FreeBSD/i386 (pc3.example.org) (ttyv0)
+# name getty type status comments
+#
+ttyv0 "/usr/libexec/getty Pc" xterm on secure
+# Virtual terminals
+ttyv1 "/usr/libexec/getty Pc" xterm on secure
+ttyv2 "/usr/libexec/getty Pc" xterm on secure
+ttyv3 "/usr/libexec/getty Pc" xterm on secure
+ttyv4 "/usr/libexec/getty Pc" xterm on secure
+ttyv5 "/usr/libexec/getty Pc" xterm on secure
+ttyv6 "/usr/libexec/getty Pc" xterm on secure
+ttyv7 "/usr/libexec/getty Pc" xterm on secure
+ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure
....
-この行には、 起動したばかりのシステムについていくばくかの情報があります。 あなたは、x86 アーキテクチャ上の Intel または その互換プロセッサ上で動作している "FreeBSD" の コンソールを目にしているのです。このマシンの名称 (どの UNIX(R) 機にも名前がついて います) は `pc3.example.org` で、 あなたはそのシステムコンソール、[.filename]#ttyv0# 端末に向かっています。
+仮想コンソールを無効にするには、無効にしたい仮想コンソールの行をコメント記号 (`+#+`) から始まるように設定してください。
+たとえば、利用可能な仮想コンソールを 8 つから 4 つに減らす場合には、`ttyv5` から `ttyv8` までの仮想コンソールを表す最後の 4 行の先頭に `+#+` を挿入してください。
+システムコンソールを表す `ttyv0` から始まる行はコメントアウト _しないでください。_
+最後の仮想コンソール (`ttyv8`) は、 crossref:x11[x11,X Window System] で説明されているように Xrog がインストールされて設定されている場合に、グラフィカル環境にアクセスするために使用されます。
+
+このファイルのそれぞれのカラムと仮想コンソールに設定可能なオプションの詳しい説明は、man:ttys[5] のマニュアルを参照してください。
+
+[[consoles-singleuser]]
+=== シングルユーザモード
-最後の行は、常に以下のものになります。
+FreeBSD のブートメニューでは、"シングルユーザモード" と表示されているオプションが提供されています。
+このオプションを選択すると、システムは "シングルユーザモード" と呼ばれる特別なモードで起動します。
+このモードは、システムが起動しない場合に修正のため、または `root` のパスワードが分からなくなってしまいリセットするときなど、特別な状況で利用されます。
+シングルユーザモードで動かしている場合は、ネットワークや他の仮想コンソールは利用できません。
+しかし、システムへの完全な `root` 権限を利用でき、デフォルトの設定では `root` のパスワードは必要ありません。
+このような理由のため、このモードで起動する場合には物理的なキーボードへのアクセスが必要であり、FreeBSD システムの安全性の観点からキーボードに物理的にアクセスできる人を決めておく事が必要です。
+シングルユーザモードを管理する設定は、`/etc/ttys` ファイルの以下のセクションにあります。
[.programlisting]
....
-login:
+# name getty type status comments
+#
+# If console is marked "insecure", then init will ask for the root password
+# when going to single-user mode.
+console none unknown off secure
....
-ここは、FreeBSD にログインするために "ユーザ名" を入力するところです。次の節でどうするか説明します。
+デフォルトでは、status は `secure` に設定されています。
+これは、キーボードへアクセスできるかユーザが誰であるかが重要ではない、もしくはアクセスできるユーザについては物理的なセキュリティポリシーでコントロールされていることが前提となっています。
+この設定を `insecure` に変更するケースとしては、システムは安全ではなく、誰でもキーボードにアクセスできる環境が想定されます。
+この行を `insecure` に変更すると、FreeBSD がシングルユーザモードで起動した場合に `root` のパスワードが要求されます。
+
+[NOTE]
+====
+__ `insecure` に変更する場合は十分注意してください! __
+`root` のパスワードを忘れてしまうと、シングルユーザモードで起動することはできますが、FreeBSD の起動のプロセスに詳しくない人が起動できるようにするのは難しいかも知れません。
+====
-[[consoles-login]]
-=== FreeBSD にログインする
+[[consoles-vidcontrol]]
+=== コンソールのビデオモードの変更
-FreeBSD は、マルチユーザ、マルチプロセスなシステムです。 これは、1 台のマシンで何人もの人が交互に多くのプログラムを 動かせるシステムに与えられる正式な説明です。
+FreeBSD のデフォルトのビデオモードは 1024x768 や 1280x1024 など、グラフィックチップおよびディスプレイが対応しているサイズに調整されます。
+別のビデオモードを使うには、`VESA` モジュールをロードしてください。
-あらゆるマルチユーザシステムには、ある "ユーザ" を他のユーザと区別する何がしかの手段が必要です。 FreeBSD (とすべての UNIX(R) like なオペレーティングシステム) では、 すべてのユーザに対してプログラムの実行を可能にするのに、システムに "ログイン" することを義務付けてこれを実現しています。 どのユーザにも、一意な名前 ("ユーザ名") と個人的な秘密の鍵 ("パスワード") があります。 FreeBSD はユーザにプログラムの実行を許可する前に、 この 2 つの入力を要求します。
+[source,shell]
+....
+# kldload vesa
+....
-FreeBSD が起動してスタートアップスクリプトを実行し終わった 直後に、プロンプトを表示して有効なユーザ名の入力を促します。
+その後、ハードウェアが対応しているビデオモードを man:vidcontrol[1] を使って確認してください。
+以下を実行すると、対応しているビデオモードを調べることができます。
[source,shell]
....
-login:
+# vidcontrol -i mode
+....
+
+このコマンドは、使用しているハードウェアが対応しているビデオモードの一覧を表示します。
+その後、man:vidcontrol[1] を `root` ユーザで実行して、新しく使用するビデオモードを選択してください。
+
+[source,shell]
+....
+# vidcontrol MODE_279
+....
+
+このビデオモードで良ければ、起動時に自動的に設定されるように `/etc/rc.conf` に以下のように追加してください。
+
+[.programlisting]
+....
+allscreens_flags="MODE_279"
....
-この例では `john` というユーザ名を使う ことにしましょう。このプロンプトに対して `john` と入力して、kbd:[Enter] を 押してください。そうすると、 次のような"パスワード"の入力を要求するプロンプトが 表示されます。
+[[users-synopsis]]
+== ユーザと基本的なアカウント管理
+
+FreeBSD は、複数のユーザが同時にコンピュータを使えるようにします。 スクリーンとキーボードの前に一度に座れるのはその中の一人だけですが ユーザは何人でもネットワークを通してログインできます。 システムを使うためには、 どのユーザもアカウントがなければなりません。
+
+この章では、以下のことを説明します。
+
+* FreeBSD システムにおけるさまざまな種類のユーザアカウントについて
+* ユーザアカウントを追加、削除および変更する方法
+* ユーザやグループが利用できるリソースの上限を制御する方法
+* グループの作成、 およびグループにユーザをメンバとして追加する方法
+
+[[users-introduction]]
+=== アカウントの種類
+
+FreeBSD システムへアクセスするには、 かならずアカウントが使われ、 また、プロセスもすべてユーザによって実行されるので、 ユーザとアカウントの管理は、重要なものです。
+
+アカウントには大きく分けて三種類あります。 システムアカウント (system accounts)、ユーザアカウント (user accounts)、 そしてスーパーユーザ (superuser) です。
+
+[[users-system]]
+==== システムアカウント
+
+システムアカウントは、DNS、メール、 ウェブサーバといった各種サービスを運用するために使われます。 この目的は、セキュリティを確保するためです。 もしすべてのサービスがスーパーユーザで実行されていると、 それらのサービスはどんな動作でも可能となり、 適切な制限を適用することができません。
+
+システムアカウントの具体例は、 `daemon`, `operator`, `bind`, `news` および `www` といったものです。
+
+`nobody` は通常の特権を持たないシステムアカウントです。 しかし、`nobody` を利用するサービスが増えれば増えるほど、 それに所属するファイルやプロセスも増え、 その特権も大きくなるということを忘れないようにしてください。
+
+[[users-user]]
+==== ユーザアカウント
+
+ユーザアカウントは、 主に現実のユーザがシステムにアクセスする手段として用いられるものです。 システムにアクセスするすべてのユーザは、 それぞれ唯一のユーザアカウントを持つべきです。 こうすることで管理者は誰が何を行なっているかがわかりますし、 他の人の設定を壊してしまうようなことを避けることができます。
+
+それぞれのユーザは快適にシステムを利用するため、 シェル、エディタ、キー設定、言語など、 各自の環境をセットアップすることができます。
+
+FreeBSD システム上のどのアカウントにも、 以下のような情報がなにかしら結び付けられています。
+
+ユーザ名::
+`login:` プロンプトに対して入力するユーザの名前です。
+各ユーザは一意なユーザ名を持つ必要があります。
+有効なユーザ名を作成するには man:passwd[5] に記載されているいくつもの規則があります。
+アプリケーションの上位互換性を保つために、8 文字以下の小文字からなるユーザ名を使うことが推奨されています。
+
+パスワード::
+各アカウントにはパスワードがあります。
+
+ユーザ ID (UID)::
+ユーザ ID (UID) は、 FreeBSD システムがユーザを一意に識別するための数値です。 ユーザ名を指定できるコマンドは、 ユーザ名を UID に変換してから扱っています。
+65535 より大きな UID は、ソフトウェアによっては互換性の問題を引き起こす可能性があるので、65535 以下の UID を使用することが推奨されています。
+
+グループ ID (GID)::
+グループ ID (GID) は、 ユーザが属する第一グループを一意に識別するための数値です。 グループは、UID ではなく、 ユーザの GID に基づいて資源へのアクセスを制御する仕組みです。 これは、ある種の設定ファイルのサイズを大幅に小さくします。 ユーザは、複数のグループに所属できます。 65535 より大きな GID は、ソフトウェアに問題を引き起こす可能性があるので、 65535 以下の GID を使うことを推奨します。
+
+ログインクラス::
+ログインクラスはグループの仕組みを拡張したもので、 別々のユーザに対してシステムを調整する時に、 さらなる柔軟性を提供します。ログインクラスの詳細については、 <<users-limiting>> で説明します。
+
+パスワードの有効期限::
+デフォルトでは、パスワードに有効期限は設定されていません。
+しかしながら、パスワードの有効期限をユーザごとに設定し、一部またはすべてのユーザに、一定の時間がたったらパスワードを強制的に変更させることができます。
+
+アカウント失効時間::
+デフォルトでは、FreeBSD はアカウントを失効させません。 たとえば学校で生徒のアカウントがある場合など、 限られた期間だけのアカウントを作成するなら、 そのアカウントがいつ失効するか man:pw[8] を使って指定できます。 有効期間が経過したら、 そのアカウントのディレクトリやファイルは残っていますが、 システムへのログインはできなくなります。
+
+ユーザの氏名::
+FreeBSD ではユーザ名でアカウントを一意に識別しますが、 必ずしもユーザの本名を反映したものではありません。 この情報をアカウントに関連付けることもできます。 この情報は、コメントのように、空白、大文字、および 8 字以上で記載できます。
+
+ホームディレクトリ::
+ホームディレクトリは、システム中のディレクトリへのフルパスです。
+これはユーザがログインした時に作業を開始するディレクトリです。
+一般的な慣習は、すべてのユーザのホームディレクトリを `/home/username` か `/usr/home/username` の下に置くことです。
+各ユーザは、個人のファイルやサブディレクトリを、ユーザのホームディレクトリに保存します。
+
+ユーザシェル::
+シェルは、 ユーザがシステムと対話するデフォルトの環境を提供します。 いろいろな種類のシェルがあり、 経験を積んだユーザはそれぞれ好みがあり、 それをアカウントの設定に反映できます。
+
+[[users-superuser]]
+==== スーパーユーザアカウント
+
+スーパーユーザアカウントは通常 `root` と呼ばれ、 システム管理を行なうために使われ、権限に制限がありません。 そのため、このアカウントはメールのやりとり、システムの調査、 プログラミングといった日常的な作業を行なうために使われるべきものではありません。
+
+その理由は、スーパーユーザが通常のユーザアカウントと異なり、 操作にまったく制限を受けないことによります。 そのためスーパーユーザアカウントで操作を間違えると、 システムに重大な影響を与えてしまう恐れがあるのです。 ユーザアカウントでは、 仮に操作を間違えてもシステムを壊してしまうようなことはできないようになっています。 そのため、ユーザアカウントでログインし、 高い権限が必要なコマンドを実行するときだけスーパーユーザになることが推奨されています。
+
+スーパーユーザで実行するコマンドはいつでも、 二回、三回と確認してください。 なぜならスペースが多かったり、文字が欠けていたりするだけで、 取り返しのつかないデータの破壊につながる可能性があるからです。
+
+スーパーユーザの権限を得るには、さまざまな方法があります。 `root` ユーザとしてログインする方法もありますが、 これはまったくお勧めできません。
+
+スーパーユーザの権限を手に入れるには、かわりに man:su[1] を使って下さい。 `-` オプションをつけて実行すると、 実行したユーザに root ユーザの環境が設定されます。 このコマンドは `wheel` グループに入ってるユーザのみが実行でき、他のユーザは実行出来ません。 また、実行時には `root` ユーザのパスワードを必要とします。
+以下の例では、`make install` を行うときにスーパーユーザの権限が必要なので、 このコマンドを実行する時だけユーザはスーパーユーザになります。 コマンドを実行したら、ユーザは `exit` を実行してスーパーユーザからログアウトし、 通常のユーザアカウントの権限に戻ります。
+
+.スーパーユーザ権限でプログラムをインストールする
+[example]
+====
[source,shell]
....
-login: john
+% configure
+% make
+% su -
Password:
+# make install
+# exit
+%
....
+====
-それでは `john` のパスワードを入力して kbd:[Enter] を押してください。パスワードは _表示されません_。これについては、当面は 気にする必要はありません。セキュリティのためといえば十分でしょう。
+1 人の管理者が一台のマシン、 もしくは小規模なネットワークを管理する場合には、 man:su[1] のフレームワークはうまく機能するでしょう。 この代わりとなるのは、 package:security/sudo[] package または port です。これはログ機能や、 スーパーユーザの権限で実行できるユーザやコマンドを設定できます。
-パスワードを正確に入力したら、FreeBSD にログインして 利用可能なすべてのコマンドを試せるようになっているはずです。
+[[users-modifying]]
+=== アカウント情報の管理
-MOTD、もしくはコマンドプロンプト (`#`, `$` または `%`) に表示されるメッセージを読むようにしましょう。 これは FreeBSD へのログインに成功したときに表示されます。
+FreeBSD は、ユーザアカウントを操作するためにさまざまなコマンドを用意しています。
+もっとも一般的なコマンドが <<users-modifying-utilities>> にまとめられています。
+その後で、各コマンドについて詳しい使用例を示します。
+各ユーティリティの詳細や使用例についてはマニュアルページを参照してください。
-[[consoles-virtual]]
-=== 多数のコンソール
+[[users-modifying-utilities]]
+.ユーザアカウントを管理するためのユーティティ
+[cols="25h,~"]
+|===
+| コマンド
+| 要約
-一つのコンソールで UNIX(R) コマンドを動かすのは結構なことですが、 FreeBSD は多くのプログラムを一度に動かせます。 コマンドを入力できるコンソールが一つというのは、 FreeBSD のようにいくつものプログラムを同時に動かせる オペレーティングシステムの場合は少しもったいないことです。 ここで、"仮想コンソール" が非常に役に立ちます。
+|man:adduser[8]
+|コマンドラインからユーザを追加するための推奨アプリケーション
-FreeBSD は、異なる仮想コンソールを複数 表示するように設定できます。キーボード上である組合せのキーを押せば、 その中の一つから他の仮想コンソールのどれかに切り替えられます。 それぞれのコンソールは、個別の出力チャンネルを持っており、 また FreeBSD はある仮想コンソールから次に切り替えるのに応じて、 キーボード入力とモニター出力を適切につなぎ直します。
+|man:rmuser[8]
+|コマンドラインからユーザを削除するための推奨アプリケーション
-FreeBSD は、コンソールを切り替えるために、 特別なキーの組合せを予約しています。FreeBSD では kbd:[Alt+F1], kbd:[Alt+F2] から kbd:[Alt+F8] までを、 別の仮想コンソールに切り替えるのに使えます。
+|man:chpass[1]
+|ユーザデータベースの情報を変更するための柔軟なツール
-あるコンソールから他に切り替えるのに応じて、FreeBSD は画面 への出力を保存して戻します。結果として、FreeBSD で動かすコマン ドを入力するのに使える複数の画面とキーボードを "仮想的に" 実現できるのです。 ある仮想コンソールで実行したプログラムは、 そのコンソールが見えなくなっている時も実行を停止しません。 別の仮想コンソールに切り替えても動き続けます。
+|man:passwd[1]
+|ユーザのパスワードを変更するコマンドラインツール
-[[consoles-ttys]]
-=== [.filename]#/etc/ttys# ファイル
+|man:pw[8]
+|ユーザアカウントのあらゆる箇所を変更する強力で柔軟なツール
-初期設定では、FreeBSD は 8 つの仮想コンソールを立ち上げます。 この設定はもともと埋め込まれているわけではなく、 インストールしたものが、もっと多いまたは少ない数の仮想コンソールで 起動するように、容易にカスタマイズできます。仮想コンソールの数と 設定は [.filename]#/etc/ttys# ファイルに書かれています。
+|man:bsdconfig[8]
+|システムの設定のためのユーティリティ。アカウント管理に対応しています。
+|===
-FreeBSD の仮想コンソールを設定するには [.filename]#/etc/ttys# ファイルを利用します。 このファイルのコメントアウトされていない (`#` 文字で始まっていない) 行は、一つの端末または仮想コンソールの 設定があります。FreeBSD の初期設定では、 仮想コンソールを 9 つ設定し、そのうち 8 つを有効にしています。 `ttyv` で始まる行がそれです。
+[[users-adduser]]
+==== ユーザの追加
-[.programlisting]
+新しいユーザの登録に推奨されるプログラムは man:adduser[8] です。
+ユーザを追加すると、このプログラムは、`/etc/passwd` と `/etc/group` を自動的に更新します。
+また、新規ユーザのホームディレクトリを作成し、`/usr/share/skel` から、デフォルトで使用される設定ファイルをコピーします。
+また、新しく作成されたユーザに対して、ウェルカムメッセージをメールで送信することも可能です。
+このユーティリティは、スーパーユーザ権限で実行する必要があります。
+
+man:adduser[8] は、新しいユーザアカウントを対話的に段階的に作成するユーティリティです。
+<<users-modifying-adduser>> で示されているように、必要な情報を入力するか、括弧内に示されているデフォルトの値を kbd:[Return] を押して承認してください。
+この例では、ユーザは man:su[1] によってスーパユーザ権限を取得することが可能となる `wheel` グループに所属します。
+操作が終了すると、ユーティリティは別のユーザを追加するか、終了するかを尋ねてきます。
+
+[[users-modifying-adduser]]
+.FreeBSD におけるユーザの追加
+[example]
+====
+[source,shell]
....
-# name getty type status comments
-#
-ttyv0 "/usr/libexec/getty Pc" cons25 on secure
-# Virtual terminals
-ttyv1 "/usr/libexec/getty Pc" cons25 on secure
-ttyv2 "/usr/libexec/getty Pc" cons25 on secure
-ttyv3 "/usr/libexec/getty Pc" cons25 on secure
-ttyv4 "/usr/libexec/getty Pc" cons25 on secure
-ttyv5 "/usr/libexec/getty Pc" cons25 on secure
-ttyv6 "/usr/libexec/getty Pc" cons25 on secure
-ttyv7 "/usr/libexec/getty Pc" cons25 on secure
-ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure
+# adduser
+Username: jru
+Full name: J. Random User
+Uid (Leave empty for default):
+Login group [jru]:
+Login group is jru. Invite jru into other groups? []: wheel
+Login class [default]:
+Shell (sh csh tcsh zsh nologin) [sh]: zsh
+Home directory [/home/jru]:
+Home directory permissions (Leave empty for default):
+Use password-based authentication? [yes]:
+Use an empty password? (yes/no) [no]:
+Use a random password? (yes/no) [no]:
+Enter password:
+Enter password again:
+Lock out the account after creation? [no]:
+Username : jru
+Password : ****
+Full Name : J. Random User
+Uid : 1001
+Class :
+Groups : jru wheel
+Home : /home/jru
+Shell : /usr/local/bin/zsh
+Locked : no
+OK? (yes/no): yes
+adduser: INFO: Successfully added (jru) to the user database.
+Add another user? (yes/no): no
+Goodbye!
....
+====
-このファイルのそれぞれのカラムと仮想コンソールに設定可能な 全オプションの詳しい説明は、man:ttys[5] のマニュアルを 参照してください。
+[NOTE]
+====
+入力したパスワードは画面に表示されませんので、 ユーザアカウントを作成する際には、 パスワードを間違えて入力してしまわないように注意してください。
+====
-[[consoles-singleuser]]
-=== シングルユーザモードのコンソール
+[[users-rmuser]]
+==== ユーザの削除
-"シングルユーザモード" とは何かという詳しい説明は、 crossref:boot[boot-singleuser,「シングルユーザモード」] にあります。FreeBSD を シングルユーザモードで動かしている場合は一つしかコンソールが ないということは注意しておくに値するでしょう。仮想コンソールは 利用できません。シングルユーザモードのコンソールの設定は、同じく [.filename]#/etc/ttys# ファイルにあります。 `console` で始まる行を探してください。
+システムから完全にユーザを削除するには、スーパーユーザ権限で man:rmuser[8] を実行してください。
+このコマンドは、次の手順を実行します。
-[.programlisting]
+[.procedure]
+====
+. 指定されたユーザの man:crontab[1] エントリが存在する場合には削除。
+. 指定されたユーザの man:at[1] ジョブをすべて削除。
+. 指定されたユーザが所有するすべてのプロセスに対して SIGKILL シグナルを送信。
+. ローカルパスワードファイルから、 指定されたユーザのエントリを削除。
+. 指定されたユーザのホームディレクトリを削除 (ディレクトリの所有者が指定されたユーザのものだった場合)。実際のホームディレクトリへのシンボリックリンクの削除も含まれます。
+. `/var/mail` から、指定されたユーザの到着メールファイルを削除。
+. `/tmp`, `/var/tmp`, および `/var/tmp/vi.recover` から、指定されたユーザの所有するファイルを削除。
+. `/etc/group` にある すべてのグループから、指定されたユーザを削除します
+(指定されたユーザと同じ名前のグループで、そのユーザが削除されると空のグループとなる場合は、そのグループ自体が削除されます。
+これは man:adduser[8] によってユーザごとに作成される、ユニークなグループに対応するものです)。
+. 指定されたユーザが所有するすべてのメッセージキュー、共通メモリセグメントおよびセマフォを削除
+====
+
+スーパユーザアカウントの削除に man:rmuser[8] を利用することはできません。 スーパユーザアカウントの削除はほとんどすべての場合、 大規模なシステムの破壊を意味するからです。
+
+デフォルトでは、以下の例のような対話モードが使われます。
+
+.`rmuser` による対話的なアカウントの削除
+[example]
+====
+[source,shell]
....
-# name getty type status comments
-#
-# If console is marked "insecure", then init will ask for the root password
-# when going to single-user mode.
-console none unknown off secure
+# rmuser jru
+Matching password entry:
+jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh
+Is this the entry you wish to remove? y
+Remove user's home directory (/home/jru)? y
+Removing user (jru): mailspool home passwd.
....
+====
+
+[[users-chpass]]
+==== ユーザ情報の変更
+
+すべてのユーザは、man:chpass[1] を用いてデフォルトシェルやユーザアカウントに関連した個人情報を変更できます。
+スーパユーザ権限に限り、このユーティリティを用いて他のユーザのアカウント情報も変更できます。
+
+ユーザ名の他にオプションを指定しないと、 man:chpass[1] はユーザ情報を編集するエディタを表示します。 ユーザがエディタを終了すると、 ユーザデータベースが新しい情報に更新されます。
[NOTE]
====
-`console` 行の上のコメントが示すように、 この行を編集して `secure` を `insecure` に変更できます。そうすると、 FreeBSD がシングルユーザモードで起動した場合にも `root` のパスワードを要求します。
+スーパユーザ権限以外でこのユーティリティを実行した場合は、 エディタを抜けた後にユーザのパスワードを聞かれます。
+====
+
+<<users-modifying-chpass-su>> では、スーパーユーザは `chpass jru` と入力し、このユーザに対して変更可能なフィールドが表示されています。
+`jru` がこのコマンドを実行すると、最後の 6 フィールドのみが表示され編集が可能です。
+この場合については、<<users-modifying-chpass-ru>> で示されています。
+
+[[users-modifying-chpass-su]]
+.スーパユーザによる `chpass` の使用
+[example]
+====
+[source,shell]
+....
+#Changing user database information for jru.
+Login: jru
+Password: *
+Uid [#]: 1001
+Gid [# or name]: 1001
+Change [month day year]:
+Expire [month day year]:
+Class:
+Home directory: /home/jru
+Shell: /usr/local/bin/zsh
+Full Name: J. Random User
+Office Location:
+Office Phone:
+Home Phone:
+Other information:
+....
+====
-_これを `_insecure_` に 変更する場合は十分注意してください。_`root` のパスワードを忘れてしまったら、 シングルユーザモードで起動するのは少しややこしくなります。 できることはできますが、FreeBSD の起動の過程とそれに関わる プログラムにあまり親しんでいない人には少し難しいかも知れません。
+[[users-modifying-chpass-ru]]
+.通常のユーザによる `chpass` の使用
+[example]
+====
+[source,shell]
+....
+#Changing user database information for jru.
+Shell: /usr/local/bin/zsh
+Full Name: J. Random User
+Office Location:
+Office Phone:
+Home Phone:
+Other information:
+....
====
-[[consoles-vidcontrol]]
-=== コンソールのビデオモードの変更
+[NOTE]
+====
+man:chfn[1] および man:chsh[1] コマンドはいずれも、man:chpass[1] へのリンクです。
+また、man:ypchpass[1], man:ypchfn[1] および man:ypchsh[1] も同様です。
+NIS のサポートは自動的に行なわれますの、 コマンドの先頭に `yp` をつける必要はありません。
+NIS の設定については、ネットワークサーバの章で説明されています。
+====
-FreeBSD のデフォルトのビデオモードは 1024x768 や 1280x1024 など、グラフィックカードとディスプレイが対応しているサイズに調整されます。
-別のビデオモードを使うには、`VESA` モジュールをロードしてください。
+[[users-passwd]]
+==== ユーザのパスワードの変更
-[.programlisting]
+いかなるユーザも man:passwd[1] を使って簡単に自身のパスワードを変更できます。
+誤って、または不正なパスワードの変更を避けるため、新しいパスワードを設定する前に、もとのパスワードの入力が求められます。
+
+.自分のパスワードの変更
+[example]
+====
+[source,shell]
....
-# kldload vesa
+% passwd
+Changing local password for jru.
+Old password:
+New password:
+Retype new password:
+passwd: updating the database...
+passwd: done
....
+====
-その後、ハードウェアが対応しているビデオモードを man:vidcontrol[1] を使って確認してください。
-以下を実行すると、対応しているビデオモードを調べることができます。
+スーパーユーザは、man:passwd[1] をユーザ名を指定して実行することにより、いかなるユーザのパスワードを変更できます。
+スーパーユーザの権限でこのユーティリティを実行する際には、もとのパスワードを入力する必要はありません。
+そのため、ユーザが元のパスワードを忘れてしまっても、パスワードを変更できます。
+.スーパーユーザ権限での他のユーザのパスワード変更
+[example]
+====
[source,shell]
....
-# vidcontrol -i mode
+# passwd jru
+Changing local password for jru.
+New password:
+Retype new password:
+passwd: updating the database...
+passwd: done
+....
+====
+
+[NOTE]
+====
+man:chpass[1] 同様、man:yppasswd[1] は、 man:passwd[1] へのリンクになっていますので、 NIS はどちらのコマンドでも動作します。
+====
+
+[[users-pw]]
+==== システムユーザおよびグループの作成、削除、変更および表示
+
+man:pw[8] は、ユーザやグループの作成、削除、変更および表示を行なうコマンドラインのユーティリティです。
+これは、システムユーザファイルやシステムグループファイルのフロントエンドとして働きます。
+man:pw[8] はとても強力な一連のコマンドラインオプションを有しており、シェルスクリプトで使うのに向いていますが、新しいユーザは、この章で紹介されている他のコマンドに比べて難しいと感じるかもしれません。
+
+[[users-groups]]
+=== グループの管理
+
+グループとは、ユーザを羅列したものです。 グループは、グループ名と GID で識別されます。 FreeBSD では、 あるプロセスが何かするのを許可するかどうかをカーネルが判断する際に、 プロセスの UID とそのユーザが所属するグループの一覧を利用します。 ほとんどの場合、ユーザもしくはプロセスの GID は一覧の最初のグループを指しています。
+
+グループ名から GID への写像は `/etc/group` にあります。
+これは、コロンで区切られた 4 項目からなるテキストファイルです。
+1 番目の項目はグループ名、2 番目は暗号化されたパスワード、3 番目が GID、4 番目がカンマで区切られたメンバの一覧です。
+文法についての完全な説明は、man:group[5] をご覧ください。
+
+スーパーユーザは、`/etc/group` をテキストエディタで編集できます。
+ただし、よくある間違いを見つけてくれる man:vigr[8] を用いてグループファイルを編集することが好ましいです。
+もしくは、man:pw[8] を使ってグループの追加や編集をできます。
+たとえば、`teamtwo` というグループを追加して、その存在を確認するには、次のように使います。
+
+[WARNING]
+====
+operator グループを使う時には、意図しないスーパーユーザへのアクセス権を与える可能性があるため注意が必要です。
+シャットダウン、リブートおよびこのグループが所有する `/dev` のすべてにアクセスできるといったことが可能になってしまいます。
+====
+
+.man:pw[8] によるグループの追加
+[example]
+====
+[source,shell]
+....
+# pw groupadd teamtwo
+# pw groupshow teamtwo
+teamtwo:*:1100:
....
+====
-このコマンドの出力結果があなたのハードウェアが対応しているビデオモードです。 その後 `root` ユーザで man:vidcontrol[1] を実行することで、 新しくどのビデオモードを使うかを選択できます。
+この例では、`1100` という番号は、 `teamtwo` の GID です。 この時点では、`teamtwo` にメンバはいません。 以下のコマンドは、 `jru` を `teamtwo` のメンバに追加します。
+.man:pw[8] により新しいグループにメンバを追加する
+[example]
+====
[source,shell]
....
-# vidcontrol MODE_279
+# pw groupmod teamtwo -M jru
+# pw groupshow teamtwo
+teamtwo:*:1100:jru
....
+====
-このビデオモードで良いと思ったら、起動時に自動的に設定されるように [.filename]#/etc/rc.conf# ファイルに以下のように設定してください。
+`-M` の引数は、カンマで区切られた新しい (空の) グループに追加するもしくは存在するグループのメンバを置き換えるユーザの一覧です。
+ユーザにとっては、このグループのメンバーシップはパスワードファイルに記載されているプライマリのグループとは異なります。
+man:pw[8] の `groupshow` コマンドを使った時は、そのユーザはグループの一員として表示されませんが、man:id[1] などのツールを使って情報を問い合わせれば、その情報を引き出せます。
+ユーザをグループに追加をする際に、man:pw[8] は `/etc/group` しか扱わず、 `/etc/passwd` から追加のデータを読んだりはしません。
-[.programlisting]
+.man:pw[8] によるグループへのユーザ追加
+[example]
+====
+[source,shell]
....
-allscreens_flags="MODE_279"
+# pw groupmod teamtwo -m db
+# pw groupshow teamtwo
+teamtwo:*:1100:jru,db
....
+====
+
+この例では、`-m` の引数は、 カンマで区切られたグループに追加するユーザの一覧です。
+前の例と異なり、これらのユーザはグループに追加され、既存のグループのユーザを置き換えることはありません。
+
+.グループに所属しているユーザを調べるための man:id[1] の使い方
+[example]
+====
+[source,shell]
+....
+% id jru
+uid=1001(jru) gid=1001(jru) groups=1001(jru), 1100(teamtwo)
+....
+====
+
+この例では、`jru` は `jru` グループと `teamtwo` グループのメンバです。
+
+このコマンドや `/etc/group` のフォーマットの詳細については、 man:pw[8] および man:group[5] をご覧ください。
[[permissions]]
== 許可属性
-FreeBSD は BSD UNIX(R) の直系の子孫であり、 いくつかの鍵となる UNIX(R) 思想にもとづいています。 まず最も際だった特徴として最初に言えるのは、FreeBSD がマルチユーザのオペレーティングシステムだということです。 FreeBSD は同時に働いている複数のユーザすべてを、 完全に分離したタスク上で処理する能力を持っています。 また FreeBSD は、ハードウェアデバイス、周辺装置、メモリ、 CPU 時間等への要求を、各ユーザが平等に利用できるように適切に共有し、 管理する役割を担っています。
+FreeBSD では、すべてのファイルおよびディレクトリは一組の許可属性を持っています。
+これらの許可属性は、ユーティリティを使って確認したり変更できます。
+許可属性がどのように機能するかを知ることで、ユーザが必要とするファイルにアクセスできるかどうか、オペレーティングシステムが使用しているファイルや他のユーザが所有するファイルにアクセスできないことを理解できるようになります。
-システムがマルチユーザをサポートしているため、 システムが管理する資源はすべて、 誰がその資源を読み・書き・実行できるかを支配する、 一組の許可属性を持っています。 これらの許可属性は 3 つの部分からなる 3 桁の 8 進数の形で格納されています。 それはそのファイルの所有者 (owner) に対するもの、 そのファイルが所属するグループ (group) に対するもの、 その他 (others) に対するものの 3 つです。 これを数字を使って表現すると、次のようになります。
+この節では、FreeBSD で使用される伝統的な UNIX(R) の許可属性について説明します。
+より細かいファイルシステムのアクセス制御に関しては、crossref:security[fs-acl,アクセス制御リスト] をご覧ください。
-[.informaltable]
+UNIX(R) では、基本の許可属性は 3 つのアクセスタイプ (読み・書き・実行) を使って割り当てられます。
+これらのアクセスタイプを使って、ファイルの所有者 (owner)、グループ (group) その他 (others) に対するファイルアクセスを設定します。
+読み、書き、実行に関する許可属性は、それぞれ `r`, `w`, および `x` 文字で表されます。
+これらの許可属性を表す際に、オンかオフ (`0`) による 2 進数表記も使われます。
+数字で表現する場合には、 `r` は `4`、`w` は `2` そして `x` は `1` の値を持つよう、`rwx` の順番で表されます。
+
+以下は、許可属性を表す際に用いられる数字およびアルファベットをまとめた表です。
+"ディレクトリの表示" カラムでは、`-` は許可属性がオフに設定されていることを表します。
+
+.UNIX(R) 許可属性
[cols="1,1,1", frame="none", options="header"]
|===
| 値
@@ -270,7 +701,8 @@ FreeBSD は BSD UNIX(R) の直系の子孫であり、 いくつかの鍵とな
|`rwx`
|===
-man:ls[1] に対してコマンドライン引数 `-l` を使うと、 詳細なディレクトリリストを見ることができ、 ファイルの所有者、グループ、その他への許可属性を示す欄があるのがわかります。 例えば、`ls -l` を実行して、 適当なディレクトリを表示させると以下のようになります。
+コマンドライン引数 `-l` とともに man:ls[1] を使うと、詳細なディレクトリリストを見ることができ、ファイルの所有者、グループ、その他への許可属性を示す欄があるのがわかります。
+例えば、`ls -l` を実行して、 適当なディレクトリを表示させると以下のようになります。
[source,shell]
....
@@ -279,29 +711,40 @@ total 530
-rw-r--r-- 1 root wheel 512 Sep 5 12:31 myfile
-rw-r--r-- 1 root wheel 512 Sep 5 12:31 otherfile
-rw-r--r-- 1 root wheel 7680 Sep 5 12:31 email.txt
-...
-....
-
-以下に示すのは、 `ls -l` の最初の行を抜き出したものです。
-
-[source,shell]
-....
--rw-r--r--
....
-最初の (一番左の) 文字は、それが 普通のファイルなのか、ディレクトリなのか、 キャラクタ型のデバイス特殊ファイルなのか、 ソケットなのか、 その他の特殊な疑似ファイルデバイスなのかといった種類を示す特別な文字です。 この場合、`-` という文字は、 普通のファイルであることを示します。 この例でその次に来る `rw-` と書かれた 3 文字は、 そのファイルの所有者に許可を与えるものです。 その次の `r--` の 3 文字は、 そのファイルが所属しているグループに許可を与えます。 最後の `r--` の 3 文字は、 システムに存在するその他のユーザに許可を与えます。 "-" は許可が与えられていないことを示します。 このファイルの例では、ファイルの所有者はこのファイルを読み書きでき、 ファイルの所属しているグループに属するユーザはファイルを読むことだけでき、 そのどちらでもないユーザは、 このファイルを読むだけできるように許可属性が与えられています。 上の表によれば、このファイルに与えられた許可属性は `644` となります。 ここで各数字は、このファイルの許可属性の 3 つの部分を表しています。
+`myfile` が含まれている行の一番目の列の最初の `(一番左の)` 文字は、そのファイルが普通のファイルなのか、ディレクトリなのか、キャラクタ型のデバイス特殊ファイルなのか、ソケットなのか、その他の特殊な疑似ファイルデバイスなのかといった種類を示す特別な文字です。
+この例において、`-` という文字は、普通のファイルであることを示します。
+その次に来る `rw-` と書かれた 3 文字は、そのファイルの所有者に許可を与えるものです。
+その次の `r--` の 3 文字は、そのファイルが所属しているグループに許可を与えます。
+最後の `r--` の 3 文字は、 システムに存在するその他のユーザに許可を与えます。
+"-" は許可が与えられていないことを示します。
+この例では、ファイルの所有者はこのファイルを読み書きでき、ファイルの所属しているグループに属するユーザはファイルを読むことだけでき、そのどちらでもないユーザは、 このファイルを読むだけできるように許可属性が与えられています。
+上の表によれば、このファイルに与えられた許可属性は `644` となります。
+ここで各数字は、このファイルの許可属性の 3 つの部分を表しています。
-ファイルについてはここまでの説明で十分です。 しかし、 デバイスの場合の許可属性はどのようにコントロールされているのでしょうか? FreeBSD は、大部分のハードウェアをファイルとして取り扱います。 そのため、プログラムからは普通のファイルとまったく同じようにオープンし、 データの読み書きができるようになっています。 これらのデバイス特殊ファイルは [.filename]#/dev# ディレクトリに収められています。
+デバイスの場合の許可属性はどのようにコントロールされているのでしょうか?
+FreeBSD は、大部分のハードウェアをファイルとして取り扱います。
+そのため、プログラムからは普通のファイルとまったく同じようにオープンし、 データの読み書きができるようになっています。
+これらのデバイス特殊ファイルは `/dev/` に収められています。
-ディレクトリもまた、ファイルと同様に扱われます。 それは読み込み/書き込み/実行の許可属性を持ちます。 ディレクトリの実行ビットはファイルのそれとは少し違った意味を持ちます。 ディレクトリが実行可能になっているとき、 そのディレクトリに移動することができます。 つまり、そのディレクトリに "cd" (change directory) することが可能です。 また、実行可能属性がついているディレクトリでは、 名前が分かっているファイルにアクセスすることもできます (もちろんそのファイル自体の許可属性によります)。
+ディレクトリもまた、ファイルと同様に扱われます。
+それは読み込み/書き込み/実行の許可属性を持ちます。
+ディレクトリの実行ビットはファイルのそれとは少し違った意味を持ちます。
+ディレクトリが実行可能になっているとき、man:cd[1] を使ってそのディレクトリに移動することができます。
+これは、そのディレクトリにあるファイルにアクセスできることを意味しています (ファイル自体の許可属性によります)。
-特に、ディレクトリの中の一覧を表示するには、 そのディレクトリに読み込み属性が設定されていなければなりません。 一方、名前が分かっているファイルを削除するには、 そのファイルが含まれているディレクトリに 書き込み属性_と_実行属性 の両方が必要です。
+ディレクトリの中の一覧を表示するには、そのディレクトリに読み込み属性が設定されていなければなりません。
+名前が分かっているファイルを削除するには、そのファイルが含まれているディレクトリに 書き込み属性 _と_ 実行属性 の両方が必要です。
-この他にも許可属性ビットはありますが、いずれも setuid バイナリや sticky ディレクトリなどといった特殊な状況で使われます。 ファイルの許可属性そのものについて、 また、それらの設定のしかたに関する詳しい情報は、 man:chmod[1] マニュアルページを参照してください。
+この他にも許可属性ビットはありますが、いずれも setuid バイナリや sticky ディレクトリなどといった特殊な状況で使われます。
+ファイルの許可属性そのものについて、また、それらの設定方法に関する詳しい情報は、 man:chmod[1] マニュアルページを参照してください。
=== シンボリック表記
-シンボリック表記と呼ばれる許可属性を表す方法では、 ファイルやディレクトリの許可属性を、 8 進数ではなく記号を用いて設定します。 シンボリック表記では、(who), (action), (permissions) という書式が用いられます。 利用できる値は以下の通りです。
+シンボリック表記と呼ばれる許可属性を表す方法では、ファイルやディレクトリの許可属性を、8 進数ではなく記号を用いて設定します。
+シンボリック表記による許可属性を表す方法では、(who), (action), (permissions) という書式が用いられます。
+利用できる値は以下の通りです。
[.informaltable]
[cols="1,1,1", frame="none", options="header"]
@@ -359,14 +802,16 @@ total 530
|UID または GID を設定する
|===
-これらの値は、これまでと同様に man:chmod[1] コマンドで用いますが、文字で指定します。 たとえば、_FILE_ に対して自分以外のユーザからアクセスを一切受け付けたくない、 というときには以下のコマンドを実行してください。
+これらの値は、これまでと同様に man:chmod[1] で用いますが、数字ではなく文字で指定します。
+たとえば、_FILE_ に対して _FILE_ のグループメンバーおよび自分以外のすべてのユーザからアクセスを一切受け付けたくない、というときには以下のコマンドを実行してください。
[source,shell]
....
% chmod go= FILE
....
-カンマ区切りで設定することで、 ファイルの属性を一度に 2 つ以上変更できます。 以下の例では、_FILE_ に対して自分以外のユーザから書き込みの権限を取り上げ、 かわりにすべてのユーザが _FILE_ を実行できるようにします。
+カンマ区切りで設定することで、ファイルの属性を一度に 2 つ以上変更できます。
+以下の例では、_FILE_ に対して自分以外のユーザから書き込みの権限を取り上げ、かわりにすべてのユーザが _FILE_ を実行できるようにします。
[source,shell]
....
@@ -375,41 +820,42 @@ total 530
=== FreeBSD のファイルフラグ
-先ほど説明したファイルの許可属性に加え、 FreeBSD では "ファイルフラグ" を使えます。 これはファイルにセキュリティや管理上の属性を追加するものですが、 ディレクトリには追加しません。
-
-これらのファイルフラグはファイルに管理上の属性を追加し、 `root` ユーザでさえ誤ってファイルを消去、変更してしまうことを防ぎます。
+ファイルの許可属性に加え、FreeBSD では "ファイルフラグ" を使えます。
+これはファイルにセキュリティや管理上の属性を追加するものですが、ディレクトリには追加しません。
+ファイルフラグにより、`root` ユーザでさえ誤ってファイルを消去、変更してしまうことを防ぐことができます。
-ファイルフラグは、man:chflags[1] を使って、簡単なインタフェースで設定できます。 例えば、[.filename]#file1# というファイルにシステムレベルで消去不可のフラグを設定するには、 以下のコマンドを実行してください。
+ファイルフラグは、man:chflags[1] を使って、簡単なインタフェースで設定できます。
+例えば、`file1` というファイルにシステムレベルで消去不可のフラグを設定するには、以下のコマンドを実行してください。
[source,shell]
....
# chflags sunlink file1
....
-また、消去不可のフラグを削除するには、以下のように先ほどのコマンドの `sunlink` の前に "no" をつけて実行してください。
+消去不可のフラグを削除するには、以下のように `sunlink` の前に "no" をつけて実行してください。
[source,shell]
....
# chflags nosunlink file1
....
-ファイルにどのフラグが設定されているのかを見るには、man:ls[1] コマンドを `-lo` オプションと一緒に使ってください。
+ファイルに設定されているフラグを確認するには、`-lo` と一緒に man:ls[1] を実行してください。
[source,shell]
....
# ls -lo file1
....
-出力は以下のようになります。
-
[.programlisting]
....
-rw-r--r-- 1 trhodes trhodes sunlnk 0 Mar 1 05:54 file1
....
-いくつかのフラグの追加、削除は `root` ユーザしかできません。 他のフラグは、ファイルの所有者が変更できます。 システム管理者は man:chflags[1] と man:chflags[2] から、 より詳細な情報を得ることをおすすめします。
+いくつかのファイルフラグの追加、削除は `root` ユーザしかできません。
+他のフラグは、ファイルの所有者が変更できます。
+man:chflags[1] と man:chflags[2] から、より詳細な情報を得ることをおすすめします。
-=== `setuid`, `setgid` および `sticky` 許可属性
+=== setuid, setgid および sticky 許可属性
これまでに説明した許可属性のほかに、
すべての管理者が知っておくべき特別な設定が 3 つあります。
@@ -422,16 +868,23 @@ total 530
実効 UID は、プロセスを実行するユーザ ID です。
たとえば、ユーザがパスワードを変更するときに利用する man:passwd[1] は、実ユーザ ID で起動します。
しかしながら、パスワードデータベースのアップデートの際は、実効 ID の `root` ユーザの権限で実行されます。
-この仕組みにより、`Permission Denied` エラーが表示されることなく、パスワードを変更できます。
+この仕組みにより、`Permission Denied` エラーが表示されることなく、ユーザはパスワードを変更できます。
+
+setuid 許可属性は、以下の例で示されているように、ユーザに対して `s` の許可属性をつけることで設定できます。
+
+[source,shell]
+....
+# chmod u+s suidexample.sh
+....
-setuid 許可属性は、以下の例で示されているように、指定する許可属性に数字の 4 をつけて設定します。
+setuid 許可属性は、以下の例で示されているように、指定する許可属性に数字の 4 をつけることでも設定できます。
[source,shell]
....
# chmod 4755 suidexample.sh
....
-これで [.filename]#suidexample.sh# の許可属性は以下のように設定されます。
+これで `suidexample.sh` の許可属性は以下のように設定されます。
[.programlisting]
....
@@ -448,7 +901,7 @@ setuid 許可属性は、以下の例で示されているように、指定す
====
リアルタイムに確認するために、2 つのターミナルを開いてください。
-1 つのターミナル上で、通常のユーザ権限で `passwd` を実行してください。
+1 つのターミナル上で、通常のユーザ権限で `passwd` と入力してください。
パスワードの入力を待つ間に、もう一つのターミナル上で、プロセステーブルおよび man:passwd[1] のユーザ情報を確認してください。
ターミナル A:
@@ -475,9 +928,16 @@ root 5211 0.0 0.2 3620 1724 2 I+ 2:09AM 0:00.01 passwd
通常のユーザ権限で man:passwd[1] を実行したにもかかわらず、実効 UID の `root` が使われています。
`setgid` 許可属性は `setuid` 許可属性と同様の機能を提供しますが、この許可属性はグループの設定を変更します。
-アプリケーションまたはユーティリティに対してこの設定を行うと、プロセスを開始するユーザではなく、ファイルを所有するグループに対してこの許可属性を与えます。
+この設定を行った上でアプリケーションまたはユーティリティを実行すると、プロセスを開始するユーザではなく、ファイルを所有するグループに対してこの許可属性を与えます。
+
+記号を用いてファイルに `setgid` 許可属性を設定するには、man:chmod[1] で設定するグループに `s` の許可属性をつけて実行してください。
-ファイルに `setgid` 許可属性を設定するには、man:chmod[1] で設定する許可属性の先頭に 2 をつけて実行してください。
+[source,shell]
+....
+# chmod g+s sgidexample.sh
+....
+
+または、man:chmod[1] で設定する許可属性の先頭に 2 をつけて実行してください。
[source,shell]
....
@@ -501,8 +961,15 @@ root 5211 0.0 0.2 3620 1724 2 I+ 2:09AM 0:00.01 passwd
一方 3 番目の特殊な許可属性 `sticky bit` は、システムのセキュリティを強化します。
ディレクトリに `sticky bit` を設定すると、ファイルの所有者のみがファイルを削除できるようになります。
-[.filename]#/tmp# といった共有のディレクトリにおいて、ファイルの所有者以外のユーザがファイルを削除できなくなるので有用です、
-この許可属性を有効にするには、許可属性に 1 をつけて設定してください。
+`/tmp` といった共有のディレクトリにおいて、ファイルの所有者以外のユーザがファイルを削除できなくなるので有用です。
+この許可属性を有効にするには、ファイルに対して `t` モードを追加してください。
+
+[source,shell]
+....
+# chmod +t /tmp
+....
+
+または、許可属性に 1 をつけて設定してください。
[source,shell]
....
@@ -524,197 +991,251 @@ drwxrwxrwt 10 root wheel 512 Aug 31 01:49 tmp
[[dirstructure]]
== ディレクトリ構造
-FreeBSD のディレクトリ構造は、 システム全体を理解するに当たって重要です。 把握しておくべき最も重要なものは、"/" ディレクトリです。 このディレクトリは起動時に一番最初にマウントされ、 オペレーティングシステムをマルチユーザで動作させるために 必要な基本システムが含まれています。 また、ルートディレクトリには、 マルチユーザへの移行中に他のファイルシステムをマウントするためのマウントポイントも含まれます。
+FreeBSD のディレクトリ構造は、システム全体を理解するに当たって重要です。
+最も重要なディレクトリは、ルートまたは "/" です。
+このディレクトリは起動時に一番最初にマウントされ、オペレーティングシステムをマルチユーザで動作させるために必要なベースシステムが含まれています。
+また、ルートディレクトリには、マルチユーザへの移行中に他のファイルシステムをマウントするためのマウントポイントも含まれます。
-マウントポイントとは、 追加のファイルシステムと接続するためのディレクトリのことです (普通はルートファイルシステムにあります) 。 より詳細な説明は <<disk-organization>> の節にあります。 標準的なマウントポイントには [.filename]#/usr#, [.filename]#/var#, [.filename]#/tmp#, [.filename]#/mnt#, [.filename]#/cdrom# があります。 通常これらのディレクトリについては、 [.filename]#/etc/fstab# というファイル中のエントリが参照されます。 [.filename]#/etc/fstab# はさまざまなファイルシステムとマウントポイントの表であり、 システムが参照します。 [.filename]#/etc/fstab# に書かれたファイルシステムは `noauto` オプションが指定されていなければ、 起動時に man:rc[8] スクリプトによって自動的にマウントされます。 詳細は <<disks-fstab>> をご覧ください。
+マウントポイントとは、追加するファイルシステムを接続する先の親のファイルシステム (普通はルートファイルシステム) のディレクトリのことです。
+より詳細な説明は <<disk-organization>> の節にあります。
+標準的なマウントポイントには `/usr/`, `/var/`, `/tmp/`, `/mnt/` および `/cdrom/` があります。
+通常これらのディレクトリについては、`/etc/fstab` というファイル中のエントリが参照されます。
+このファイルは、さまざまなファイルシステムとマウントポイントの表であり、システムが参照します。
+`/etc/fstab` に書かれたファイルシステムは `noauto` オプションが指定されていなければ、起動時に man:rc[8] スクリプトによって自動的にマウントされます。
+詳細は <<disks-fstab>> の節をご覧ください。
-ファイルシステム構造を網羅した説明は man:hier[7] に書かれています。 ここでは、もっともよく使われるディレクトリについて簡単に 見るだけで十分でしょう。
+ファイルシステム構造を網羅した説明は man:hier[7] に書かれています。
+以下の表は、もっともよく使われるディレクトリの簡単な概要です。
-[.informaltable]
-[cols="1,1", frame="none", options="header"]
+[cols="25h,~"]
|===
| ディレクトリ
| 説明
-|[.filename]#/#
+|`/`
|ファイルシステムのルートディレクトリ
-|[.filename]#/bin/#
+|`/bin/`
|シングルユーザ環境とマルチユーザ環境の両方で重要な ユーザユーティリティ
-|[.filename]#/boot/#
+|`/boot/`
|オペレーティングシステムの起動時に使われるプログラムと設定ファイル
-|[.filename]#/boot/defaults/#
+|`/boot/defaults/`
|デフォルトの起動設定ファイル; man:loader.conf[5] 参照
-|[.filename]#/dev/#
-|デバイスノード; man:intro[4] 参照
+|`/dev/`
+|man:devfs[4] により管理されるデバイスファイル
-|[.filename]#/etc/#
+|`/etc/`
|システム設定ファイルとスクリプト
-|[.filename]#/etc/defaults/#
-|デフォルトのシステム設定ファイル; man:rc[8] 参照
+|`/etc/defaults/`
+|デフォルトのシステム設定ファイル; 詳細については man:rc[8] 参照
+
+|`/etc/periodic/`
+|man:cron[8] 経由で毎日・毎週・毎月実行されるスクリプト; 詳細については man:periodic[8] 参照
-|[.filename]#/etc/mail/#
-|man:sendmail[8] のようなメール転送エージェントの設定ファイル
+|`/lib/`
+|`/bin` および `/sbin` にあるバイナリで必要とされる重要なシステムライブラリ
-|[.filename]#/etc/namedb/#
-|`named` 設定ファイル; man:named[8] 参照
+|`/libexec/`
+|重要なシステムファイル
-|[.filename]#/etc/periodic/#
-|man:cron[8] 経由で毎日・毎週・毎月実行されるスクリプト; man:periodic[8] 参照
+|`/media/`
+|CD, USB ドライブおよびフロッピーディスクなどのリムーバブルメディアのマウントポイントとして使用されるサブディレクトリを含むディレクトリ
-|[.filename]#/etc/ppp/#
-|`ppp` 設定ファイル; man:ppp[8] 参照
+|`/mnt/`
+|システム管理者が一時的なマウントポイントとしてよく使う空のディレクトリ
-|[.filename]#/mnt/#
-|システム管理者が一時的なマウントポイントとしてよく使う 空のディレクトリ
+|`/net/`
+|自動マウント NFS 共有。man:auto_master[5] を参照
-|[.filename]#/proc/#
-|プロセスファイルシステム; man:procfs[5] と man:mount_procfs[8] 参照
+|`/proc/`
+|プロセスファイルシステム; 詳細については man:procfs[5] と man:mount_procfs[8] 参照
-|[.filename]#/rescue/#
-|緊急時のために静的にリンクされているプログラム; 詳しくは man:rescue[8] 参照
+|`/rescue/`
+|man:rescue[8] で説明されている緊急時のために静的にリンクされているプログラム
-|[.filename]#/root/#
+|`/root/`
|`root` アカウントのホームディレクトリ
-|[.filename]#/sbin/#
-|シングルユーザ環境とマルチユーザ環境の両方で重要な システムプログラムと管理ユーティリティ
+|`/sbin/`
+|シングルユーザ環境とマルチユーザ環境の両方で重要なシステムプログラムと管理ユーティリティ
-|[.filename]#/tmp/#
-|一時的なファイル。 通常、[.filename]#/tmp# の内容はシステムの再起動で失われます。 メモリファイルシステムはよく [.filename]#/tmp# にマウントされます。 これは man:rc.conf[5] の tmpmfs 関係の変数を使うか、 [.filename]#/etc/fstab# に設定項目を記入することで自動化できます。 詳しくは man:mdmfs[8] を参照して下さい。
+|`/tmp/`
+|システムの再起動では通常保存 _されない_ 一時的なファイル。
+メモリファイルシステムはよく `/tmp` にマウントされます。
+これは man:rc.conf[5] の tmpmfs 関係の変数を使うか、`/etc/fstab` に設定項目を記入することで自動化できます。
+詳しくは man:mdmfs[8] を参照して下さい。
-|[.filename]#/usr/#
+|`/usr/`
|大部分のユーザユーティリティとアプリケーション
-|[.filename]#/usr/bin/#
+|`/usr/bin/`
|よく使うユーティリティとプログラミングツールとアプリケーション
-|[.filename]#/usr/include/#
+|`/usr/include/`
|C の標準ヘッダファイル
-|[.filename]#/usr/lib/#
+|`/usr/lib/`
|ライブラリ
-|[.filename]#/usr/libdata/#
+|`/usr/libdata/`
|いろいろなユーティリティのデータファイル
-|[.filename]#/usr/libexec/#
-|システムデーモンとシステムユーティリティ (他のプログラムから実行される)
+|`/usr/libexec/`
+|他のプログラムから実行されるシステムデーモンとシステムユーティリティ
-|[.filename]#/usr/local/#
-|ローカルのプログラムやライブラリなど。 FreeBSD ports 構成のデフォルトインストール先としても使われます。 [.filename]#/usr/local# 内では、 man:hier[7] に書かれている [.filename]#/usr# のための一般構造が使われます。 例外は man ディレクトリで、 [.filename]#/usr/local/share# の下ではなく [.filename]#/usr/local# の下に直接置かれ、 ports 関係文書は [.filename]#share/doc/port# にあります。
+|`/usr/local/`
+|ローカルのプログラムやライブラリなど。
+FreeBSD ports フレームワークのデフォルトインストール先としても使われます。
+`/usr/local` 内では、 man:hier[7] に書かれている `/usr` のための一般構造が使われます。
+例外は man ディレクトリで、`/usr/local/share` の下ではなく `/usr/local` の下に直接置かれ、ports 関係文書は `share/doc/port` に置かれます。
-|[.filename]#/usr/obj/#
-|[.filename]#/usr/src# ツリーのビルドで作られる アーキテクチャ依存のターゲットツリー
+|`/usr/ports/`
+|FreeBSD Ports Collection (オプション)。
-|[.filename]#/usr/ports/#
-|FreeBSD Ports Collection (インストールしなくてもよい)。
+|`/usr/sbin/`
+|ユーザにより実行されるシステムデーモンおよびシステムユーティリティ
-|[.filename]#/usr/sbin/#
-|(ユーザが実行する) システムデーモンとシステムユーティリティ
-
-|[.filename]#/usr/shared/#
+|`/usr/share/`
|アーキテクチャに依存しないファイル
-|[.filename]#/usr/src/#
-|BSD のソースファイルまたはローカルのソースファイル、 あるいは両方
-
-|[.filename]#/usr/X11R6/#
-|X11R6 のプログラム、ライブラリなど (インストールしなくてもよい)
+|`/usr/src/`
+|BSD のソースファイルまたはローカルのソースファイル、あるいは両方
-|[.filename]#/var/#
-|ログ・一時的なファイル・スプールファイルなどいろいろな用途。 メモリファイルシステムは時々 [.filename]#/var# にマウントされます。 これは man:rc.conf[5] の varmfs 関係の変数を使うか、 [.filename]#/etc/fstab# に設定項目を記入することで自動化できます。 詳しくは man:mdmfs[8] を参照して下さい。
+|`/var/`
+|さまざまな用途のログ・一時的なファイル・スプールファイル。
-|[.filename]#/var/log/#
+|`/var/log/`
|いろいろなシステムログファイル
-|[.filename]#/var/mail/#
-|ユーザのメールボックスファイル
-
-|[.filename]#/var/spool/#
-|プリンタとメールシステムのスプールディレクトリなどなど
-
-|[.filename]#/var/tmp/#
-|一時的なファイル。 [.filename]#/var# がメモリファイルシステムでなければ、 ここにあるファイルはシステムが再起動しても失われません。
-
-|[.filename]#/var/yp/#
-|NIS のマップ
+|`/var/tmp/`
+|一時的なファイル。通常の設定では、ここにあるファイルはシステムが再起動しても失われません。
|===
[[disk-organization]]
== ディスク構成
-ファイルを見つけるために FreeBSD が使用する構成の一番小さな単位はファイル名です。 ファイル名は、大文字と小文字を区別します。 このことは [.filename]#readme.txt# および [.filename]#README.TXT# が異なる二つのファイルであることを意味します。 FreeBSD はそのファイルがプログラム、または文書、 あるいはその他の形式かどうかを決定するために拡張子を使用しません。
-
-ファイルはディレクトリ内に格納されます。 ディレクトリはファイルを一つも含んでいないかもしれせんし、 または数百のファイルを含んでいるかもしれません。 ディレクトリはまた別のディレクトリを含むことができます。 つまり、ディレクトリの階層構造を構築することができます。 このことにより、データ構造がはるかに簡単になります。
-
-ファイルおよびディレクトリは、 必要な他のディレクトリ名とスラッシュ (`/`) を後に続けて ファイル名またはディレクトリ名を与えることによって参照されます。 [.filename]#foo# ディレクトリがあって、その中に [.filename]#bar# ディレクトリがあるとします。 そして、その中に [.filename]#readme.txt# があるとすると、 ファイルへのフルネーム、または_パス_は [.filename]#foo/bar/readme.txt# となります。
+ファイルを見つけるために FreeBSD が使用する構成の一番小さな単位はファイル名です。
+ファイル名は、大文字と小文字を区別します。
+このことは `readme.txt` および `README.TXT` が異なる二つのファイルであることを意味します。
+FreeBSD はそのファイルがプログラム、または文書、あるいはその他の形式かどうかを決定するために拡張子を使用しません。
-ディレクトリおよびファイルはファイルシステム内に格納されます。 どのファイルシステムは、そのファイルシステムのための _ルートディレクトリ_ とよばれる、 まさに頂点の位置にちょうど一つのディレクトリを含んでいます。 このルートディレクトリは他のディレクトリを含むことができます。
+ファイルはディレクトリ内に格納されます。
+ディレクトリはファイルを一つも含んでいないかもしれせんし、または数百のファイルを含んでいるかもしれません。
+ディレクトリはまた別のディレクトリを含むことができるので、
+データを体系づけるディレクトリの階層構造を構築できます。
-これまでのところ、これはあなたの使ったことのある他の OS とおそらく似ているかもしれません。少し違いがあります。 たとえば、MS-DOS(R) ではファイル名とディレクトリ名を分けるのに `\` を使います。 一方、Mac OS(R) では `:` を使います。
+ファイルおよびディレクトリは、必要な他のディレクトリ名とスラッシュ (`/`) を後に続けてファイル名またはディレクトリ名を与えることによって参照されます。
+たとえば、`foo` ディレクトリがあって、その中に `bar` ディレクトリがあるとします。
+そして、その中に `readme.txt` があるとすると、ファイルへのフルネーム、または _パス_ は `foo/bar/readme.txt` となります。
+ファイルとディレクトリ名を分けるために `\` を使う Windows(R) とは違うことに注意してください。
+FreeBSD は、パスの中にドライブレターまたは他のドライブ名を使いません。
+たとえば、FreeBSD では `c:\foo\bar\readme.txt` とは書きません。
-FreeBSD はパス内にドライブレターまたは他のドライブ名を使いません。 あなたは FreeBSD で [.filename]#c:/foo/bar/readme.txt# とは書かないでしょう。
+[[disks-file-systems]]
+=== ファイルシステム
-その代わり、一つのファイルシステムは _ルートファイルシステム_として設計されています。 ルートファイルシステムのルートディレクトリは `/` として参照されます。それから、他のすべてのファイルシステムは、 ルートファイルシステム以下に _マウント_ されます。 あなたが FreeBSD システムでどんなに多くのディスクを使用しても、 すべてのディレクトリは、 同じディスクの一部であるように見えるので問題ありません。
+ディレクトリおよびファイルはファイルシステム内に格納されます。
+どのファイルシステムも、そのファイルシステムのための _ルートディレクトリ_ とよばれる、まさに頂点の位置にちょうど一つのディレクトリを含んでいます。
+このルートディレクトリは他のディレクトリを含むことができます。
+一つのファイルシステムは _ルートファイルシステム_ または `/` として設計されています。
+すべてのファイルシステムは、ルートファイルシステム以下に _マウント_ されます。
+FreeBSD システムでどんなに多くのディスクを使用しても、すべてのディレクトリは、同じディスクの一部であるように見えるので問題ありません。
-`A`,`B` および `C` と呼ばれる三つのファイルシステムがあると仮定しましょう。 それぞれのファイルファイルシステムには一つのルートディレクトリがあり、 `A1`, `A2` と呼ばれている二つの他のディレクトリを含んでいます (同様に `B1`, `B2` および `C1`, `C2` があります)。
+`A`, `B` および `C` と呼ばれる三つのファイルシステムがあるケースを考えます。
+それぞれのファイルファイルシステムには一つのルートディレクトリがあり、`A1`, `A2` と呼ばれている二つの他のディレクトリを含んでいます (同様に `B1`, `B2` および `C1`, `C2` があります)。
-`A` をルートファイルシステムとします。 このディレクトリになにが含まれているか見るために `ls` コマンドを使うと、 `A1` および `A2` の二つのサブディレクトリが現れるでしょう。 ディレクトリツリーは以下のようになります。
+`A` をルートファイルシステムとします。
+このディレクトリになにが含まれているか見るために man:ls[1] コマンドを使うと、`A1` および `A2` の二つのサブディレクトリが表示されるでしょう。
+ディレクトリツリーは以下のようになります。
-image::example-dir1.png[]
+image::example-dir1.png[ルートディレクトリおよび 2 つのサブツリーを持つディレクトリツリー]
-ファイルシステムはファイルシステム内のディレクトリにマウントしなければいけません。 それでは、`A1` ディレクトリに `B` ファイルシステムをマウントすると仮定します。 `B` のルートディレクトリは `A1` に置き換えられ、 そして `B` 内のディレクトリがそれに応じて現れます。
+ファイルシステムはマウント先のファイルシステム内のディレクトリにマウントしなければいけません。
+それでは、`A1` ディレクトリに `B` ファイルシステムをマウントすると仮定します。
+`B` のルートディレクトリは `A1` に置き換えられ、そして `B` 内のディレクトリがそれに応じて現れます。
-image::example-dir2.png[]
+image::example-dir2.png[ルートディレクトリおよび 2 つのサブツリーを持つディレクトリツリー。さらに B1 および B2 サブディレクトリが A1 にぶら下がっています]
-`B1` または `B2` 内にあるどんなファイルも、必要なときに [.filename]#/A1/B1# または [.filename]#/A1/B2# で到達できます。 [.filename]#/A1# にあったすべてのファイルは一時的に隠されました。 それらは `B` が A から_アンマウント_されたら再び現れるでしょう。
+`B1` または `B2` 内にあるどんなファイルも、必要なときに `/A1/B1` または `/A1/B2` で到達できます。
+`/A1` にあったすべてのファイルは一時的に隠されました。
+それらは `B` が `A` から _アンマウント_ されたら再び現れるでしょう。
もし `B` が `A2` にマウントされていたら、この図のようになります。
-image::example-dir3.png[]
+image::example-dir3.png[ルートディレクトリおよび 2 つのサブツリーを持つディレクトリツリー。さらに B1 および B2 サブディレクトリが A2 にぶら下がっています]
-そして、パスはそれぞれ [.filename]#/A2/B1# および [.filename]#/A2/B2# となるでしょう。
+そして、パスはそれぞれ `/A2/B1` および `/A2/B2` となるでしょう。
-ファイルシステムは互いのファイルシステム上にもマウントできます。 上記の最後の例に続けて、`C` ファイルシステム は `B` ファイルシステム内の `B1` ディレクトリ上にマウントできます。 次の図のようになります。
+ファイルシステムは互いのファイルシステム上にもマウントできます。
+上記の最後の例に続けて、`C` ファイルシステム は `B` ファイルシステム内の `B1` ディレクトリ上にマウントできます。
+次の図のようになります。
-image::example-dir4.png[]
+image::example-dir4.png[複雑なディレクトリツリー。さまざまなサブディレクトリがルート以下にぶら下がっています。]
-または `C` は `A1` の下の `A` ファイルシステムに直接マウントできます。
+または `C` を `A` ファイルシステムの `A1` ディレクトリの下に直接マウントできます。
-image::example-dir5.png[]
+image::example-dir5.png[複雑なディレクトリツリー。さまざまなサブディレクトリがルート以下にぶら下がっています。]
-もしあなたが MS-DOS(R) を使いなれているなら、 まったく同じではありませんが、これは `join` コマンドと 似ています。
-
-これは、通常あなた自身が心配する必要のあるものではありません。 一般的に、FreeBSD をインストールするときにファイルシステムを作成し、 どこにマウントするか決定します。そして、 新しいディスクを追加しなければそれらを変更することはありません。
-
-一つの大きなファイルシステムを用意し、 他のファイルシステムを作成する必要としないことはまったくもって可能です。 この方法にはいくつかの短所と一つの利点があります。
+一つの大きなルートファイルシステムを用意し、他のファイルシステムを作成する必要としないことはまったくもって可能です。
+この方法にはいくつかの短所と一つの利点があります。
.マルチファイルシステムの利点
-* 異なったファイルシステムは異なった _マウントオプション_ を使用できます。 たとえば、注意深い考えなのですが、 ルートファイルシステムを読みだし専用でマウントして、 不注意によって重大なファイルを削除、 または編集できないようににすることができます。 また、[.filename]#/home# のようなユーザが書き込み可能なファイルシステムを他のファイルシステムと分けることによって、 _nosuid_ でマウントすることも可能になります。 このオプションは、ファイルシステムに記録されている _suid_/_guid_ の実行可能ビットを有効にしないので、安全性を高めることができるでしょう。
-* FreeBSD はファイルシステムがどのように使われているかによって、 自動的にファイルシステム上のファイルの配置を最適化します。 したがって、連続的に書き込まれた多くの小さなファイルが含まれているファイルシステムは、 より大きく少ないファイルが含まれているファイルシステムと異なる最適化をするでしょう。 一つの大きなファイルシステムを作成すると、 この最適化は成り立たなくなります。
-* FreeBSD のファイルシステムはトラブルが起きてもとても強固です。 しかしながら臨界点でのトラブルは、 ファイルシステムの構造にまだ損害を与えるかもしれません。 マルチファイルシステムへデータを分割しておくことで、 必要なときにバックアップからレストアすることをより容易にして、 まだシステムが回復するかもしれません。
+* 異なったファイルシステムは異なった _マウントオプション_ を使用できます。
+たとえば、ルートファイルシステムを読みだし専用でマウントして、不注意によってユーザが重大なファイルを削除、または編集できないようにすることができます。
+また、`/home` のようなユーザが書き込み可能なファイルシステムを他のファイルシステムと分けることによって、 _nosuid_ でマウントすることが可能になります。
+このオプションは、ファイルシステムに記録されている _suid_/_guid_ の実行可能ビットを有効にしないので、安全性を高めることができるでしょう。
+* FreeBSD はファイルシステムがどのように使われているかによって、自動的にファイルシステム上のファイルの配置を最適化します。 したがって、連続的に書き込まれた多くの小さなファイルが含まれているファイルシステムは、より大きく少ないファイルが含まれているファイルシステムと異なる最適化をするでしょう。 一つの大きなファイルシステムを作成すると、この最適化は成り立たなくなります。
+* FreeBSD のファイルシステムはトラブルが起きても強固です。 しかしながら臨界点でのトラブルは、ファイルシステムの構造にまだ損害を与えるかもしれません。 マルチファイルシステムへデータを分割しておくことで、 必要なときにバックアップからレストアすることをより容易にして、まだシステムが回復するかもしれません。
.シングルファイルシステムの利点
* ファイルシステムは固定サイズです。 FreeBSD をインストールするときにファイルシステムを作成して、 固定サイズを割りあてたなら、 後になってそのパーティションをより大きくする必要があると気づくかもしれません。 パーティションのサイズを変更するには、 バックアップ、新しいサイズを指定したファイルシステムの再作成、 バックアップしたデータをリストアする作業が必要となるでしょう。
+
[IMPORTANT]
====
-FreeBSD には、 man:growfs[8] コマンドがあります。 このコマンドは、この制限を取り除いて、 ファイルシステムのファイルを直ちに増加させることを可能にします。
+FreeBSD には、 man:growfs[8] コマンドがあります。
+このコマンドは、この制限を取り除いて、ファイルシステムのファイルを直ちに増加させることを可能にします。
+ファイルシステムは、そのファイルシステムのあるパーティションの空いている領域に対してのみ拡張できます。
+パーティションを分割した後、空いている領域があれば、man:gpart[8] を用いてパーティションを拡張できます。
+仮想ディスクの最後のパーティションであれば、ディスクを大きくすると、パーティションを拡張できます。
====
-ファイルシステムはパーティション内に含まれています。 FreeBSD の UNIX(R) 遺産のために、 これは普段使われるパーティション (例えば MS-DOS(R) パーティション) という用語の意味とは違う意味を持っています。 それぞれのパーティションは `a` から `h` までの文字で区別されます。 それぞれのパーティションは、 一つのファイルシステムだけを含むことができます。 このことは、ファイルシステムがファイルシステムの階層上の典型的なマウントポイント、 または含まれているパーティションの文字によって記述されることを意味します。
-
-FreeBSD は _スワップ領域_ にもまたディスク領域を使用します。 スワップ領域は FreeBSD に _仮想メモリ_ を提供します。 これはあなたのコンピュータが、 実際に搭載している以上のメモリがあるかのように振舞います。 FreeBSD がメモリを使い果たしたときに、 現在使用されていないデータのいくつかをスワップ領域に移動し、 そのデータが必要となったときに (その他のデータをスワップ領域に移動させてから) メモリ内に移動しなおします。
-
-いくつかのパーティションはある慣習と関係づけられています。
-
-[.informaltable]
-[cols="1,1", frame="none", options="header"]
+[[disks-partitions]]
+=== ディスクパーティション
+
+ファイルシステムは _パーティション_ 内に含まれています。
+ディスクは 1 つのパーティションスキーム (<<bsdinstall-part-manual>>) を用いてパーティションに分割されます。
+新しいスキームは GPT で、古い BIOS-ベースのコンピュータは MBR を使用します。
+GPT は、サイズ、オフセットおよびタイプによるディスクのパーティション分割に対応しています。
+多くのパーティションおよびパーティションタイプに対応しているため、GPT が利用できる場合はこのパーティションスキームを使用することが推奨されます。
+GPT パーティションは、接尾語 `p1` が最初のパーティション、接尾語 `p2` が 2 番目のパーティションといったような接尾語を使います。
+一方 MBR パーティションは少ない数のパーティションにのみ対応しています。
+MBR パーティションは、FreeBSD では `スライス` として知られています。
+スライスは他のオペレーティングシステムでも使うことができます。
+FreeBSD のスライスはさらに、BSD ラベル (man:bsdlabel[8] 参照) を用いてパーディションに分割できます。
+
+スライス番号は 1 から始まり `s` を前につけられて、デバイス名の後に続きます。
+したがって、"da0__s1__" は一番目の SCSI ドライブ上の一番目のスライスです。
+ディスク上に存在できる物理スライスは、4 つまでですが、適切な種類の物理スライス内に論理スライスを作成できます。
+これらの拡張されたスライス番号は 5 から始まります。
+したがって、 "ada0__s5__" は、一番目の SATA ディスク上の一番目の拡張スライスです。
+これらのデバイスは、スライスを占有することを予期するファイルシステムによって使用されます。
+
+GPT または BSD の各パーティションは、一つのファイルシステムだけを含むことができます。
+このことは、ファイルシステムがファイルシステムの階層上の典型的なマウントポイント、または含まれているパーティション名によって記述されることを意味します。
+
+FreeBSD は _スワップ領域_ にもまたディスク領域を使用します。
+スワップ領域は FreeBSD に _仮想メモリ_ を提供します。
+これはあなたのコンピュータが、 実際に搭載している以上のメモリがあるかのように振舞います。
+FreeBSD がメモリを使い果たしたときに、現在使用されていないデータのいくつかをスワップ領域に移動し、そのデータが必要となったときに (その他のデータをスワップ領域に移動させてから) メモリ内に移動しなおします。
+これは _ページング_ と呼ばれます。
+
+いくつかの BSD パーティションはある慣習と関係づけられています。
+
+[cols="25h,~"]
|===
| パーティション
| 慣習
@@ -726,61 +1247,79 @@ FreeBSD は _スワップ領域_ にもまたディスク領域を使用しま
|通常、スワップ領域を含みます。
|`c`
-|通常、スライス全体と同じサイズです。 これは、スライス全体にアクセス必要のあるユーティリティ (たとえば、ひどいブロックスキャナ) が、 `c` パーティションにアクセスすることを可能にします。通常、 このパーティション内にファイルシステムを作成しないでしょう。
+|通常、スライス全体と同じサイズです。
+これは、スライス全体にアクセス必要のあるユーティリティ (たとえば、ひどいブロックスキャナ) が、 `c` パーティションにアクセスすることを可能にします。
+通常、このパーティション内にファイルシステムは作成されません。
|`d`
|`d` パーティションは、 それに関連づけられた特別な意味を持っていましたが、 今は無いので、普通のパーティションとして動作するでしょう。
|===
-ファイルシステムを含んだそれぞれのパーティションは、FreeBSD が _スライス_ と呼ぶものの中に格納されます。 スライスは FreeBSD の用語で、 普通はパーティションと呼ばれるものです。 もう一度言及しますが、これは FreeBSD の UNIX(R) 背景によるものです。 スライスは 1 から 4 までの番号がつけられます。
-
-スライス番号は 1 から始まり `s` を前につけられて、デバイス名の後に続きます。 したがって、"da0_s1_" は一番目の SCSI ドライブ上の 一番目のスライスです。 ディスク上に四つの物理スライスだけが存在できます。しかし、 適切な種類の物理スライス内に論理スライスをもつことができます。 これらの拡張されたスライス番号は 5 から始まります。したがって、 "ad0_s5_" は、一番目の IDE ディスク上の一番目の拡張スライスです。 これらのデバイスは、 スライスを占有することを予期するファイルシステムによって使用されます。
+スライスおよび "危険な専用" の物理ドライブ、 そして他のドライブは `a` から `h` までの文字として表される BSD パーティションを含んでいます。
+この文字はデバイス名に追加されます。
+したがって、 "da0__a__" は一番目の "危険な専用" `da` ドライブ上の `a` パーティションです。
+"ada1s3__e__" は、 二番目の SATA ディスク上の 三番目のスライス内にある五番目のパーティションです。
-スライスや "危険な専用" の物理ドライブ、 そして他のドライブは `a` から `h` までの文字として表される _パーティション_ を含んでいます。 この文字はデバイス名に追加されます。したがって、 "da0_a_" は一番目の "危険な専用" da ドライブ上の a パーティションです。 "ad1s3_e_" は、 二番目の IDE ディスク上の 三番目のスライス内にある五番目のパーティションです。
+最後に、システム上のそれぞれのディスクは識別されます。
+ディスク名はどの種類のディスクであるかを示す記号ではじまり、どのディスクかを示す数字が続きます。
+パーティションやスライスとは異なり、ディスクの番号づけは 0 から始まります。
+共通の記号は <<disks-naming>> に示されます。
-最後に、システム上のそれぞれのディスクは識別されます。 ディスク名はどの種類のディスクであるかを示す記号ではじまり、 どのディスクかを示す数字が続きます。 スライスとは違いディスクの番号づけは 0 から始まります。 共通の記号は <<basics-dev-codes>> に示されます。
+スライスにあるパーティションを参照するときには、ディスク名、`s`、スライス番号、そしてパーティション文字を含めてください。
+<<basics-disk-slice-part>> に例があります。
+GPT パーディションはディスク名、`p` そしてパーティション番号が含まれます。
-パーティションを参照するときには、 FreeBSD はパーティションを含むスライスおよびパーティションも指定することを必要とします。 そしてスライスを参照するときはディスク名も参照しないといけません。 したがって、ディスク名、`s`、スライス番号、 そしてパーティション文字を並べることによってパーティションを参照します。 <<basics-disk-slice-part>>に例があります。
+<<basics-concept-disk-model>> は、MBR スライスを用いたディスク構成の概念のモデルを示します。
-<<basics-concept-disk-model>> は理解をより明らかにすることを助けるための、 ディスク構成の概念のモデルを示します。
+FreeBSD をインストールする際には、MBR を使用する場合にはディスクスライスを設定し、次に FreeBSD に用いるスライス内のパーティションを作成します。
+GPT を使用する場合には、各ファイルシステムにパーティションを設定します。
+どちらのケースでも、それぞれのパーティション内にファイルシステムまたはスワップ領域を作成し、ファイルシステムがどこにマウントされるか決定してください。
+パーティションの操作についての詳細は man:gpart[8] をご覧ください。
-FreeBSD をインストールするために、 まずはじめにディスクスライスの設定をし、 次に FreeBSD に用いるスライス内のパーティションを作成し、 それからそれぞれのパーティション内にファイルシステム (またはスワップ領域) を作成し、 ファイルシステムがどこにマウントされるか決定しなければいけません。
-
-[[basics-dev-codes]]
-.ディスクデバイス記号
+[[disks-naming]]
+.ディスクデバイス名
[cols="1,1", frame="none", options="header"]
|===
-| 記号
-| 意味
+| ドライブタイプ
+| ドライブデバイス名
-|[.filename]#ad#
-|ATAPI (IDE) ディスク
+|SATA および IDE ハードドライブ
+|`ada`
-|[.filename]#da#
-|SCSI ダイレクトアクセスディスク
+|SCSI ハードドライブおよび USB ストレージデバイス
+|`da`
-|[.filename]#acd#
-|ATAPI (IDE) CDROM
+|NVMe ストレージ
+|`nvd` または `nda`
-|[.filename]#cd#
-|SCSI CDROM
+|SATA および IDE CD-ROM ドライブ
+|`cd`
-|[.filename]#fd#
-|フロッピーディスク
+|SCSI CD-ROM ドライブ
+|`cd`
+
+|フロッピードライブ
+|`fd`
+
+|SCSI テープドライブ
+|`sa`
+
+|RAID ドライバ
+|`aacd` (Adaptec(R) AdvancedRAID), `mlxd` および `mlyd` (Mylex(R)), `amrd` (AMI MegaRAID(R)), `idad` (Compaq Smart RAID), `twed` (3ware(R) RAID) など
|===
-[[basics-disk-slice-part]]
-.ディスク名、スライス名、パーティション名のサンプル
[example]
====
+[[basics-disk-slice-part]]
+.ディスク名、スライス名、パーティション名のサンプル
[.informaltable]
[cols="1,1", frame="none", options="header"]
|===
-| 記号
+| 名前
| 意味
-|`ad0s1a`
-|一番目の IDE ディスク (`ad0`) 上の一番目のスライス (`s1`) 内の一番目のパーティション (`a`)。
+|`ada0s1a`
+|一番目の SATA ディスク (`ada0`) 上の一番目のスライス (`s1`) 内の一番目のパーティション (`a`)。
|`da1s2e`
|二番目の SCSI ディスク (`da1`) 上の二番目のスライス (`s2`) 内の五番目のパーティション (`e`)。
@@ -791,29 +1330,37 @@ FreeBSD をインストールするために、 まずはじめにディスク
.ディスクの概念的構成
[example]
====
-これはシステムに接続された一番目の IDE ディスクの FreeBSD から見た図を示します。 ディスクサイズは 4 GB と仮定し、 2 GB のスライス (MS-DOS(R) でいうパーティション) が二つあるとします。 一番目のスライスは MS-DOS(R) ディスクの [.filename]#C:# を含んでいます。 そして、二番目のスライスは FreeBSD のディスクを含んでいます。 これは FreeBSD インストーラが三つのデータパーティションと一つのスワップパーティションを作成した例です。
-
-三つのパーティションはそれぞれファイルシステムを含んでいます。 `a` パーティションはルートファイルシステムに使用され、 `e` パーティションは [.filename]#/var# ディレクトリ階層に、 `f` パーティションは [.filename]#/usr# ディレクトリ階層に使用されるでしょう。
+これはシステムに接続された一番目の SATA ディスクの FreeBSD から見た図を示します。
+ディスクサイズは 250 GB と仮定し、80 GB のスライス (MS-DOS(R) でいうパーティション) および 170 GB のスライスがあるとします。
+一番目のスライスは Windows(R) NTFS ファイルシステム `C:` を含んでいます。
+そして、二番目のスライスは FreeBSD のディスクを含んでいます。
+これは FreeBSD インストーラが四つのデータパーティションと一つのスワップパーティションを作成した例です。
-image::disk-layout.png[]
+四つのパーティションはそれぞれファイルシステムを含んでいます。
+パティション `a` はルートファイルシステム、`d` は `/var`, `e` は `/usr`、そして `f` は `/usr` に使用されています。
+パーティション `c` はスライス全体を示しており、通常のパーティションとは異なる使われ方をします。
+image::disk-layout.png[Windows と FreeBSD を 1 つのドライブに共存させたレイアウト]
====
[[mount-unmount]]
== ファイルシステムのマウントとアンマウント
-ファイルシステムは [.filename]#/# をルート (根) とする木構造として考えると視覚的に理解しやすいでしょう。 ルートディレクトリにある [.filename]#/dev# や [.filename]#/usr#、 その他のディレクトリは枝に相当し、 それらには、[.filename]#/usr/local# などのように、さらに枝分かれすることができます。
+ファイルシステムは `/` をルート (根) とする木構造として考えると視覚的に理解しやすいでしょう。
+ルートディレクトリにある `/dev` や `/usr`、その他のディレクトリは枝に相当し、それらには、`/usr/local` などのように、さらに枝分かれすることができます。
-さまざまな理由がありますが、 ディレクトリをいくつかの異なるファイルシステム上に構築するのが良いでしょう。 たとえば [.filename]#/var# には、 [.filename]#log/# や [.filename]#spool/# など、さまざまな種類の一時ファイルを置くディレクトリがあるため、 あふれてしまう可能性があります。 ルートファイルシステムをあふれさせるのは得策ではありませんので、 普通は [.filename]#/var# を [.filename]#/# から分離します。
+さまざまな理由がありますが、 ディレクトリをいくつかの異なるファイルシステム上に構築するのが良いでしょう。
+たとえば `/var` には、 `log/` や `spool/` など、さまざまな種類の一時ファイルを置くディレクトリがあるため、あふれてしまう可能性があります。
+ルートファイルシステムをあふれさせるのは得策ではありませんので、普通は `/var` を `/` から分離します。
-また、次のような場合も、ディレクトリツリーを 別のファイルシステムに置く理由として良くあげられます。 それは、たとえば物理的に別のディスクにディレクトリツリーを置く場合、 crossref:advanced-networking[network-nfs,ネットワークファイルシステム (Network File System)] や CDROM ドライブのような別の仮想ディスクに置くという場合です。
+また、次のような場合も、ディレクトリツリーを別のファイルシステムに置く理由として良くあげられます。
+それは、たとえば物理的に別のディスクにディレクトリツリーを置く場合、 crossref:advanced-networking[network-nfs, 「ネットワークファイルシステム (NFS)」] で説明されているようにネットワークファイルシステムをマウントしたり、CDROM ドライブのような別の仮想ディスクに置くという場合です。
[[disks-fstab]]
-=== [.filename]#fstab# ファイル
+=== fstab ファイル
-[.filename]#/etc/fstab# に書かれているファイルシステムは (`noauto` オプションがなければ) crossref:boot[boot,起動プロセス]の途中で 自動的にマウントされます。
-
-[.filename]#/etc/fstab# ファイルは、 次のような書式で書かれた行のリストになっています。
+`/etc/fstab` に書かれているファイルシステムは、`noauto` オプション指定されているエントリを除いて crossref:boot[boot,起動プロセス] の途中で自動的にマウントされます。
+このファイルは、 次のような書式で書かれたエントリを含んでいます。
[.programlisting]
....
@@ -821,10 +1368,10 @@ device /mount-point fstype options dumpfreq passno
....
`device`::
-デバイスの名前 (存在していなければなりません)。 crossref:disks[disks-naming,「デバイス名」] に説明があります。
+デバイス名。crossref:disks[disks-naming,「デバイス名」] に説明があります。
`mount-point`::
-ファイルシステムがマウントするディレクトリの名前 (存在していなければなりません)。
+ファイルシステムがマウントするディレクトリ。
`fstype`::
man:mount[8] に渡されるファイルシステムタイプ。 FreeBSD ファイルシステムのデフォルトは `ufs` です。
@@ -836,27 +1383,34 @@ man:mount[8] に渡されるファイルシステムタイプ。 FreeBSD ファ
これは man:dump[8] が使うもので、 どのファイルシステムにダンプが必要なのかを決めます。 この項目がなければ、0 であるものとみなされます。
`passno`::
-これはファイルシステムをチェックする順番を決めます。 ファイルシステムチェックを飛ばしたいファイルシステムには、 `passno` を 0 に設定してください。 ルートファイルシステム (どれよりも先にチェックしなければなりません) は `passno` を 1 に設定してください。 他のファイルシステムの `passno` は 1 以上に設定してください。 同じ `passno` のファイルシステムがあった場合、 man:fsck[8] は可能であれば並行してファイルシステムのチェック を行なおうとします。
+これは再起動後に man:fsck[8] がチェックする UFS ファイルシステムの順番を決めます。
+ファイルシステムチェックを飛ばしたいファイルシステムには、`passno` を 0 に設定してください。
+ルートファイルシステムはどれよりも先にチェックする必要があり、`passno` は 1 に設定してください。 他のファイルシステムの `passno` は 1 以上に設定してください。 同じ `passno` のファイルシステムがあった場合、 man:fsck[8] は可能であれば並行してファイルシステムのチェック を行なおうとします。
-[.filename]#/etc/fstab# ファイルの書式やオプションに関しての詳細は、 man:fstab[5] をご覧ください。
+`/etc/fstab` の書式やオプションに関しての詳細は、 man:fstab[5] をご覧ください。
[[disks-mount]]
-=== `mount` コマンド
-
-man:mount[8] コマンドは、 ファイルシステムをマウントするために使われるものです。
+=== man:mount[8] の使い方
-基本的には、次のように使います。
+ファイルシステムは man:mount[8] を用いてマウントされます。
+基本な構文は以下のようになります。
+[example]
+====
[source,shell]
....
# mount device mountpoint
....
+====
-man:mount[8] マニュアルページにはたくさんのオプションが書かれていますが、 いちばんよく使われるのは次のものです。
+`/etc/fstab` に記載されているファイルシステムについても、マウントポイントを指定することでマウントできます。
+
+man:mount[8] で説明されているように、このコマンドはたくさんのオプションを提供します。
+最もよく使われるのは次のものです。
.マウントオプション
`-a`::
-[.filename]#/etc/fstab# にある全てのファイルシステムをマウントします。 例外は "noauto" の印がついているものと、 `-t` フラグで除外されたものと、 すでにマウントされているファイルシステムです。
+`/etc/fstab` にある全てのファイルシステムをマウントします。 例外は "noauto" の印がついているものと、 `-t` フラグで除外されたものと、 すでにマウントされているファイルシステムです。
`-d`::
実際にマウントシステムコールする以外のすべてのことをします。 このオプションは `-v` フラグと組み合わせて使い、 man:mount[8] が実際なにをしようとしているのか調べるのに便利です。
@@ -866,11 +1420,10 @@ man:mount[8] マニュアルページにはたくさんのオプションが書
`-r`::
ファイルシステムを読み込み専用でマウントします。
-これは `ro` 引数を `-o` オプションに使うのと同じです。
+`-o ro` を使うのと同じです。
-`-t` _fstype_::
-ファイルシステムを指定のファイルシステムタイプでマウントします。 または、`-a` を使った場合、 指定したタイプのファイルシステムのみマウントします。
-+
+``-t _fstype_``::
+指定のファイルシステムタイプでマウントします。 または、`-a` を使った場合、 指定したタイプのファイルシステムのみマウントします。
デフォルトのファイルシステムタイプは "ufs" です。
`-u`::
@@ -882,168 +1435,200 @@ man:mount[8] マニュアルページにはたくさんのオプションが書
`-w`::
ファイルシステムを読み書き可能にマウントします。
-`-o` には、 次のようなオプションを複数カンマで区切って指定します。 以下に挙げるのはその一部です。
-
-noexec::
-そのファイルシステム上のバイナリの実行を禁止します。 セキュリティのために有用なオプションです。
+`-o` には、 次のようなオプションを複数カンマで区切って指定できます。
nosuid::
そのファイルシステム上の setuid や setgid フラグを解釈しません。 これもセキュリティのために有用なオプションです。
[[disks-umount]]
-=== `umount` コマンド
+=== man:umount[8] の使い方
-man:umount[8] コマンドは、パラメータとしてマウントポイントの一つ、 デバイス名、もしくは `-a` や `-A` といったオプションを取ります。
+ファイルシステムをアンマウントするには、man:umount[8] を使ってください。
+このコマンドは、パラメータとしてマウントポイントの一つ、 デバイス名、もしくは `-a` や `-A` といったオプションを取ります。
-いずれの形式でも `-f` で強制的なアンマウントを行ない、 `-v` で詳細な出力を出します。 ただしほとんどの場合、`-f` は使わないほうがよいでしょう。 強制的にファイルシステムをアンマウントすると、 計算機がクラッシュしたりファイルシステム上部のデータが 破壊されたりする恐れがあるためです。
+いずれの形式でも `-f` で強制的なアンマウントを行ない、 `-v` で詳細な出力を出します。
+ただしほとんどの場合、`-f` は使わないほうがよいでしょう。
+計算機がクラッシュしたりファイルシステム上部のデータが破壊されたりする恐れがあります。
-オプション `-a` と `-A` はマウントされているファイルシステムすべてをアンマウントするのに使います。 `-t` にファイルシステムタイプを指定すると、 指定されたものだけがアンマウントされます。 また、`-A` を使うとルートファイルシステムはアンマウントしません。
-[[basics-processes]]
-== プロセス
-
-FreeBSD はマルチタスクのオペレーティングシステムです。 つまり、1つ以上のプログラムがあたかも同時に動いているかのように見える、 ということです。動作中のプログラムはそれぞれ _プロセス_ と呼ばれます。 コマンドを実行すると、最低でも1つの新しいプロセスがスタートします。 システムを正常に機能させるために常に動作しているシステムプロセスもたくさんあります。
-
-各プロセスは_プロセス ID_、もしくは _PID_ と呼ばれる数字でただ一つに識別されます。 また、ファイルのように各プロセスには所有者とグループがあります。 所有者とグループの情報は、 これまでに見たファイル許可属性を用い、 そのプロセスが開けるファイルやデバイスを決定するために使われます。 多くのプロセスには親プロセスもあります。 親プロセスとは、そのプロセスをスタートさせたプロセスのことです。 例えば、シェルにコマンドを打ち込んでいるときはシェルがプロセスで、 動かすコマンドもまたどれもプロセスです。 このようにして起動するプロセスはそれぞれシェルが親プロセスになります。 これの例外は man:init[8] という特別なプロセスです。 `init` は常に最初のプロセスなので、 PID は必ず 1 になります。 `init` は FreeBSD がスタートするときカーネルによって自動的に起動されます。
+マウントされているファイルシステムすべてをアンマウントするには、`-a` と `-A` を使ってください。
+`-t` にファイルシステムタイプを指定すると、指定されたものだけがアンマウントされます。
+`-A` を使うとルートファイルシステムはアンマウントしません。
-man:ps[1] と man:top[1] という2つのコマンドが システム上のプロセスを確認するために特に便利です。 `ps` コマンドは現在動作中のプロセスのリストを見るために使い、 PID やプロセスが使っているメモリの量、 どういうコマンドラインで起動されたのか、 などを表示させることができます。 `top` コマンドは動作中の全てのプロセスを表示し、 数秒ごとに表示を更新するので、 計算機がなにをしているのかインタラクティブに知ることができます。
-
-デフォルトでは、`ps` は動作中かつ所有者が自分のコマンドのみを表示します。 例えば:
+[[basics-processes]]
+== プロセスおよびデーモン
+
+FreeBSD はマルチタスクのオペレーティングシステムです。
+動作中のプログラムはそれぞれ _プロセス_ と呼ばれます。
+すべてのコマンドは実行すると、最低でも 1 つの新しいプロセスを開始します。
+FreeBSD により実行されているシステムプロセスもたくさんあります。
+
+各プロセスは _プロセス ID_ (PID) と呼ばれる数字でただ一つに識別されます。
+ファイルのように各プロセスには所有者とグループがあり、
+所有者とグループの許可属性は、そのプロセスが開けるファイルやデバイスを決定するために使われます。
+多くのプロセスには親プロセスもあります。
+親プロセスとは、そのプロセスをスタートさせたプロセスのことです。
+例えば、シェルがプロセスで、シェルから起動されるコマンドは、シェルを親プロセスとするプロセスとなります。
+例外は man:init[8] という特別なプロセスです。
+`init` は FreeBSD がスタートするときに起動される最初のプロセスで、PID は常に `1` です。
+
+ユーザから始終入力があるように設計されていないプログラムがあり、そういったプログラムは最初から端末と切り離されています。
+例えば、ウェブサーバはユーザからの入力ではなくウェブのリクエストを処理します。
+メールサーバも、 こういった種類のアプリケーションの一例です。
+このような種類のプログラムは、 _デーモン_ と呼ばれます。
+デーモンはギリシャ神話から来ており、目に見えないように役立つことをしてくれる善でも悪でもない実体を表します。
+このため、BSD のマスコットはスニーカーをはいてフォークを携えたかわいらしい姿のデーモンなのです。
+
+通常デーモンとして動作するプログラムには末尾に "d" を持った名前をつける慣習があります。
+例えば、BIND は Berkeley Internet Name Domain ですが、 実際実行されるプログラムは `named` です。
+また、Apache ウェブサーバのプログラムは `httpd`、ラインプリンタスプーリングデーモンは `lpd` です。
+これは単なる命名に関する慣習です。
+例えば、Sendmail アプリケーションの主なメールデーモンは `sendmail` で、`maild` ではありません。
+
+=== プロセスを確認する
+
+システム上で実行中のプロセスを確認するには、man:ps[1] または man:top[1] を使ってください。
+現在動作中のプロセスのリスト、プロセスの PID やプロセスが使っているメモリの量、どういうコマンドラインで起動されたのかなどを表示させるには、man:ps[1] を使ってください。
+man:top[1] を使用すると、動作中の全てのプロセスを表示できます。
+数秒ごとに表示を更新するので、計算機が何をしているのかインタラクティブに知ることができます。
+
+デフォルトでは、man:ps[1] はユーザにより動作中かつ所有のコマンドのみを表示します。
+例えば:
[source,shell]
....
% ps
- PID TT STAT TIME COMMAND
- 298 p0 Ss 0:01.10 tcsh
- 7078 p0 S 2:40.88 xemacs mdoc.xsl (xemacs-21.1.14)
-37393 p0 I 0:03.11 xemacs freebsd.dsl (xemacs-21.1.14)
-48630 p0 S 2:50.89 /usr/local/lib/netscape-linux/navigator-linux-4.77.bi
-48730 p0 IW 0:00.00 (dns helper) (navigator-linux-)
-72210 p0 R+ 0:00.00 ps
- 390 p1 Is 0:01.14 tcsh
- 7059 p2 Is+ 1:36.18 /usr/local/bin/mutt -y
- 6688 p3 IWs 0:00.00 tcsh
-10735 p4 IWs 0:00.00 tcsh
-20256 p5 IWs 0:00.00 tcsh
- 262 v0 IWs 0:00.00 -tcsh (tcsh)
- 270 v0 IW+ 0:00.00 /bin/sh /usr/X11R6/bin/startx -- -bpp 16
- 280 v0 IW+ 0:00.00 xinit /home/nik/.xinitrc -- -bpp 16
- 284 v0 IW 0:00.00 /bin/sh /home/nik/.xinitrc
- 285 v0 S 0:38.45 /usr/X11R6/bin/sawfish
-....
-
-この例で分かるとおり、 man:ps[1] の出力はいくつかの行に整形されています。 `PID` は先ほど見たプロセス ID です。 PID は 1 から順に 99999 まで割り当てられ、 足りなくなると最初に戻って使い回されます (使用中の PID は割り当てられません) 。 `TT` の列はプログラムが動いている tty を示します。 差し当たって無視してもかまわないでしょう。 `STAT` はプログラムの状態を示しますが、 これもまた無視してよいでしょう。 `TIME` はプログラムがその CPU 上で動いている時間の長さです- 通常はプログラムをスタートさせたときからの経過時間ではありません。 CPU 上で時間を使う必要があるまでかなりの時間を費すようなプログラムもあるからです。 最後に、`COMMAND` はそのプログラムを起動するのに使われたコマンドラインとなります。
-
-man:ps[1] は表示する情報を変えるためのオプションをたくさんサポートしています。 いちばん便利なのは `auxww` でしょう。 `a` は自分のプロセスだけではなく、 動作中のプロセス全部についての情報を表示します。 `u` はプロセスの所有者の名前をメモリ使用量と同様に表示します。 `x` はデーモンプロセスについての情報を表示し、 `ww` で、スクリーンに入りきらないほど長くなったコマンドラインでも省略せず、 man:ps[1] に各プロセスの全コマンドラインを表示させます。
-
-man:top[1] の出力も同様です。 例は以下の通りです。
-
-[source,shell]
+ PID TT STAT TIME COMMAND
+8203 0 Ss 0:00.59 /bin/csh
+8895 0 R+ 0:00.00 ps
....
-% top
-last pid: 72257; load averages: 0.13, 0.09, 0.03 up 0+13:38:33 22:39:10
-47 processes: 1 running, 46 sleeping
-CPU states: 12.6% user, 0.0% nice, 7.8% system, 0.0% interrupt, 79.7% idle
-Mem: 36M Active, 5256K Inact, 13M Wired, 6312K Cache, 15M Buf, 408K Free
-Swap: 256M Total, 38M Used, 217M Free, 15% Inuse
- PID USERNAME PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND
-72257 nik 28 0 1960K 1044K RUN 0:00 14.86% 1.42% top
- 7078 nik 2 0 15280K 10960K select 2:54 0.88% 0.88% xemacs-21.1.14
- 281 nik 2 0 18636K 7112K select 5:36 0.73% 0.73% XF86_SVGA
- 296 nik 2 0 3240K 1644K select 0:12 0.05% 0.05% xterm
-48630 nik 2 0 29816K 9148K select 3:18 0.00% 0.00% navigator-linu
- 175 root 2 0 924K 252K select 1:41 0.00% 0.00% syslogd
- 7059 nik 2 0 7260K 4644K poll 1:38 0.00% 0.00% mutt
-...
-....
+man:ps[1] の出力はいくつかの列に整形されています。
+`PID` の列はプロセス ID を表示します。
+PID は 1 から順に 99999 まで割り当てられ、その後足りなくなると最初に戻って使い回されます。ただし、使用中の PID には割り当てられません。
+`TT` の列はプログラムが動いている tty を示し、`STAT` はプログラムの状態を示します。
+`TIME` はプログラムがその CPU 上で動いている時間の長さです。
+通常はプログラムをスタートさせたときからの経過時間ではありません。
+多くのプログラムは、CPU 上で時間を使う必要があるまでかなりの時間を費すためです。
+最後に、`COMMAND` はそのプログラムを起動するのに使われたコマンドとなります。
-出力は2つのセクションに分かれています。 ヘッダ (最初の 5 行です) は動作している最新のプロセスの PID、 システムの平均負荷 (システムがどれくらい忙しいかの指標)、 システムの稼働時間 (最後の再起動からの時間) と現在の時刻を示します。 ヘッダの中の他の数字は動作中のプロセスの数 (この場合 47 ですね)、 使われているメモリとスワップ領域の量、 そしてシステムが異なる CPU 状態に消費した時間と関係します。
+表示する情報を変更するオプションが用意されています。
+いちばん便利なのは `auxww` でしょう。
+`a` はすべてのユーザの動作中のプロセス全部についての情報を表示します。
+`u` はプロセスの所有者のユーザ名とメモリ使用量を表示します。
+`x` はデーモンプロセスについての情報を表示し、`ww` で、スクリーンに入りきらないほど長くなったコマンドラインでも省略せず、man:ps[1] に各プロセスの全コマンドラインを表示させます。
-その下には man:ps[1] の出力と同じような情報を持った行が続きます。 前と同様 PID にユーザ名、消費 CPU 時間と実行中のコマンドを知ることができます。 man:top[1] を使うとデフォルトでプロセスが使っているメモリ容量も分かります。 メモリ使用量の欄は2項目に分かれており、 一方は合計使用量、 そしてもう一方は実使用量です-合計使用量はアプリケーションが必要としているメモリ量で、 実使用量はその時点で実際に使われているメモリ量です。 この例では、man:getenv[3] がだいたい 30 MB の RAM を必要としていますが、 いまのところ 9 MB しか使っていないことが分かります。
+man:top[1] の出力も同様です。
-man:top[1] は自動的に2秒ごとに画面を更新します。 `s` オプションを使えば更新間隔を変更することができます。
+[source,shell]
+....
+% top
+last pid: 9609; load averages: 0.56, 0.45, 0.36 up 0+00:20:03 10:21:46
+107 processes: 2 running, 104 sleeping, 1 zombie
+CPU: 6.2% user, 0.1% nice, 8.2% system, 0.4% interrupt, 85.1% idle
+Mem: 541M Active, 450M Inact, 1333M Wired, 4064K Cache, 1498M Free
+ARC: 992M Total, 377M MFU, 589M MRU, 250K Anon, 5280K Header, 21M Other
+Swap: 2048M Total, 2048M Free
+
+ PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
+ 557 root 1 -21 r31 136M 42296K select 0 2:20 9.96% Xorg
+ 8198 dru 2 52 0 449M 82736K select 3 0:08 5.96% kdeinit4
+ 8311 dru 27 30 0 1150M 187M uwait 1 1:37 0.98% firefox
+ 431 root 1 20 0 14268K 1728K select 0 0:06 0.98% moused
+ 9551 dru 1 21 0 16600K 2660K CPU3 3 0:01 0.98% top
+ 2357 dru 4 37 0 718M 141M select 0 0:21 0.00% kdeinit4
+ 8705 dru 4 35 0 480M 98M select 2 0:20 0.00% kdeinit4
+ 8076 dru 6 20 0 552M 113M uwait 0 0:12 0.00% soffice.bin
+ 2623 root 1 30 10 12088K 1636K select 3 0:09 0.00% powerd
+ 2338 dru 1 20 0 440M 84532K select 1 0:06 0.00% kwin
+ 1427 dru 5 22 0 605M 86412K select 1 0:05 0.00% kdeinit4
+....
+
+出力は2つのセクションに分かれています。
+ヘッダ (最初の 5 または 6 行) は動作している最新のプロセスの PID、システムの平均負荷 (システムがどれくらい忙しいかの指標)、システムの稼働時間 (最後の再起動からの時間) と現在の時刻を示します。
+ヘッダの中の他の数字は動作中のプロセスの数、使われているメモリとスワップ領域の量、そしてシステムが異なる CPU 状態に消費した時間と関係します。
+ZFS ファイルシステムのモジュールをロードしている場合には、`ARC` 行にはディスクではなくメモリキャッシュから読み込んだデータ量が表示されます。
+
+ヘッダの下には、PID、ユーザ名、消費 CPU 時間とプロセスを起動したコマンドといった man:ps[1] の出力と同じような情報を持った行が続きます。
+man:top[1] を使うとデフォルトでプロセスが使っているメモリ容量を表示します。
+メモリ使用量の欄は 2 項目に分かれており、 一方は合計使用量、 そしてもう一方は実使用量です。
+合計使用量はアプリケーションが必要としているメモリ量で、実使用量はその時点で実際に使われているメモリ量です。
+
+man:top[1] は自動的に 2 秒ごとに画面を更新します。
+`-s` 使うと更新間隔を変更することができます。
[[basics-daemons]]
-== デーモン、シグナルとプロセス終了
-
-エディタを使っている場合、エディタを操作するのは簡単です。 ファイルを開く、などと動かせばよいのです。 このように操作できるのは、エディタにそういった機能があり、 かつエディタが_端末_に関連づけられているからです。 一方、ユーザから始終入力があるように設計されていないプログラムもあり、 そういったプログラムは最初から端末と切り離されます。 例えば、ウェブサーバは一日中ウェブのリクエストばかり処理するので、 通常全く入力を必要としません。 サイトからサイトへとメールを転送するプログラムも、 こういった種類のアプリケーションの一例です。
-
-このようなプログラムは、_デーモン_と呼ばれます。 デーモンはギリシャ神話の登場人物で、 善でも悪でもなく、大雑把にいうと、 人間のために役立つことをしてくれる小さな妖精さんです。 今日の便利なウェブサーバやメールサーバととてもよく似ていますね。 このため、長い間 BSD のマスコットはスニーカーをはいてフォークを携えた かわいらしい姿のデーモンなのです。
-
-通常デーモンとして動作するプログラムには末尾に "d" を持った名前をつける慣習があります。 BIND は Berkeley Internet Name Domain ですが、 実際実行されるプログラムは `named` という名前です。 Apache ウェブサーバのプログラムは `httpd` と呼ばれ、 ラインプリンタスプーリングデーモンは `lpd`、 などなどです。 これは単なる慣習で、しっかりがっちりとしたルールではありません。 例えば、Sendmail アプリケーションの主なメールデーモンは `sendmail` という名前で、 連想しそうな `maild` ではありません。
+=== プロセスの終了
-時々、デーモンプロセスと通信したいときがあります。 一つの方法として、それ (に限らずどんな動作中のプロセスでも) に _シグナル_と呼ばれるものを送信する方法です。 送信可能なシグナルはたくさんあります-特別な意味があるものもあれば、 アプリケーションによって解釈されるものもありますし、 アプリケーションがシグナルをどう解釈するかは そのアプリケーションの文章を読めば分かるでしょう。 自分が持っているプロセスにしかシグナルを送ることはできません。 他人のプロセスに man:kill[1] や man:kill[2] を使ってシグナルを送っても、許可されないでしょう。 これの例外は `root` ユーザで、 ルートユーザは誰のプロセスでもシグナルを送ることができます。
+動作中のプロセスもしくはデーモンと通信する一つの方法は、man:kill[1] を用いて _シグナル_ を送信する方法です。
+送信可能なシグナルはたくさんあります。
+特別な意味があるものもあれば、アプリケーションの文章に説明されているものもあります。
+ユーザは自分が所有者となっているプロセスにのみシグナルを送ることができます。
+他人のプロセスにシグナルを送ると、permission denied というエラーになるでしょう。
+この例外は `root` ユーザで、 ルートユーザは誰のプロセスに対してもシグナルを送ることができます。
-FreeBSD もアプリケーションにシグナルを送ることがあります。 アプリケーションを下手に書くと、 予想外のメモリにアクセスしようとするので、 FreeBSD がプロセスに _セグメンテーション違反_ シグナル (`SIGSEGV`) を送ります。 ある程度の時間が経ったら man:alarm[3] システムコールを使って警告してもらうようなアプリケーションには、 警告シグナル (`SIGALRM`) が送信される、 などです。
+オペレーティングシステムもプロセスにシグナルを送ることができます。
+アプリケーションを下手に書いてしまい、予想外のメモリにアクセスしようとすると、FreeBSD はプロセスに "セグメンテーション違反" シグナル (`SIGSEGV`) を送ります。
+ある程度の時間が経ったら man:alarm[3] システムコールを使って警告してもらうように書かれているアプリケーションには、"警告" シグナル (`SIGALRM`) が送信されます。
-プロセスを止めるためには2つのシグナル、 `SIGTERM` か `SIGKILL` を使います。 `SIGTERM` は穏かにプロセスを終了させる方法です。 プロセスはシグナルを_受け取る_ことができ、 終了させたいのだなということを理解し、 開いているログファイルを全部を閉じ、 一般的に終了前にしていたことを終えることができます。 中断できない処理の途中だと、`SIGTERM` をプロセスが無視することもあるかもしれません。
+プロセスを止めるためには2つのシグナル、`SIGTERM` か `SIGKILL` を使います。
+`SIGTERM` は穏かにプロセスを終了させる方法です。
+プロセスはシグナルを受け取ることができ、開いているすべてのログファイルを閉じ、終了前にしていたことを終えるように試みることができます。
+中断できない処理の途中だと、`SIGTERM` をプロセスが無視することもあるかもしれません。
-プロセスは `SIGKILL` を無視することができません。 これは、"なにをしていようが構わないから今すぐ止まれ" というシグナルです。 プロセスに `SIGKILL` を送ると、 FreeBSD はそのプロセスをそこで止めます。
+プロセスは `SIGKILL` を無視することができません。
+プロセスに `SIGKILL` を送ると、プロセスは通常その時点で止まります。
-使う可能性のあるシグナルは、他に `SIGHUP`、`SIGUSR1`、と `SIGUSR2` があります。 これらは一般的な用途のシグナルで、 このシグナルが送信されたときアプリケーションによって別のことをします。
+他に良く使われるシグナルには、`SIGHUP`、`SIGUSR1` と `SIGUSR2` があります。
+これらは一般的な用途のシグナルなので、このシグナルが送信されたときの応答は、アプリケーション毎に異なります。
-ウェブサーバの設定ファイルを変更したとしましょう-ウェブサーバに新しい設定を再読み込みさせたいですね。 `httpd` を止めて再起動することもできますが、 そうするとウェブサーバは一瞬ながら停止してしまいますし、 ちょっとでも止まってほしくないこともあるでしょう。 ほとんどのデーモンは `SIGHUP` シグナルに対して設定ファイルを再読み込みする反応を返すよう書かれています。 従って、`httpd` を止めて再起動する代わりに、 `SIGHUP` シグナルを送りましょう。 これらのシグナルへの標準的な反応というものがないために、 デーモンごとに行動が違うので、 疑問があれば必ずそのデーモンの文書を読んでください。
-
-man:kill[1] コマンドを使って送るシグナルはこの例をご覧ください。
-
-[.procedure]
-====
-*Procedure: プロセスにシグナルを送る*
-
-この例では、man:inetd[8] にシグナルを送る方法を示します。 `inetd` の設定ファイルは [.filename]#/etc/inetd.conf# で、 `inetd` は `SIGHUP` が送信されるとこの設定ファイルを再読み込みします。
-
-. man:pgrep[1] を使ってシグナルを送りたいプロセスのプロセス ID を調べます。
-+
-[source,shell]
-....
-% pgrep -l inetd
-198 inetd
-....
-+
-この例では man:inetd[8] の PID は 198 であることが分かります。
-. man:kill[1] を使ってシグナルを送ります。 man:inetd[8] は `root` で起動されているために、 まず man:su[1] を使って `root` にならなければなりません。
-+
-[source,shell]
-....
-% su
-Password:
-# /bin/kill -s HUP 198
-....
-+
-大部分の UNIX(R) コマンドと同じく、 成功したら man:kill[1] は何の出力も表示しません。 自分のものではないプロセスにシグナルを送ると、 `kill: _PID_: Operation not permitted` と表示されます。 PID を打ち間違えると、 悪いことに間違ったプロセスにシグナルを送ってしまうか、 もしくは運がよければその時点で使われていない PID にシグナルを送ったことになり、`kill: _PID_: No such process` と表示されます。
-
-[NOTE]
-.なぜ `/bin/kill` を使うんでしょう?
-======
-多くのシェルは `kill` コマンドを組み込みコマンドとして備えています。 つまり、[.filename]#/bin/kill# を実行するのではなく、 シェルが直接シグナルを送ります。 これはとても便利なのですが、 シェルが違うと送るシグナルの名前の指定の仕方が違います。 シェルによって異なるシグナルの指定の仕方を全部覚えようとはせずに、 `/bin/kill ...` コマンドを直接使うほうが簡単です。
-======
-====
-
-他のシグナルの送り方はほとんど同じで、 コマンドラインの `TERM` や `KILL` を必要に応じて変えるだけです。
+例として、ウェブサーバの設定ファイルを変更後、ウェブサーバに設定を再読み込みさせる必要があります。
+`httpd` を再起動するとウェブサーバは一瞬ながら停止してしまいます。
+その代わりに `SIGHUP` シグナルを送りましょう。
+デーモンごとに行動が違うので、`SIGHUP` が期待する結果となるように、そのデーモンの文書を読んで確認してください。
[IMPORTANT]
====
-システム上のランダムプロセスを終了させるのはよくありません。 特に、プロセス ID が 1 の man:init[8] は特別です。 `/bin/kill -s KILL 1` を使うといとも簡単にシステムをシャットダウンさせることができます。 kbd:[Return] を押す_前_に man:kill[1] を実行する引数を二重にチェックする_癖_をつけてください。
+システム上のランダムプロセスを終了させるのはよくありません。
+特に、PID が 1 の man:init[8] は特別です。
+`/bin/kill -s KILL 1` は推奨されていませんが、実行するといとも簡単にシステムをシャットダウンさせることができます。
+kbd:[Return] を押す _前_ に man:kill[1] を実行する引数を二重にチェックする _癖_ をつけてください。
====
[[shells]]
== シェル
-FreeBSD では日々の作業のほとんどは、 「シェル」と呼ばれるコマンドラインインタフェイスを通して行われます。 シェルの主な仕事はコマンドを入力チャンネルから受け取り、 そしてそれらを実行することです。 大部分のシェルはさらに組み込みの機能を持っていて、日々の作業、 ファイル管理やファイル名の展開、コマンドライン編集、 コマンドマクロ、環境変数などに便利です。 FreeBSD には `sh` (Bourne Shell) や `tcsh` (高機能 C-shell) が含まれています。 また、 これ以外にも `zsh` や `bash` などたくさんのシェルが FreeBSD Ports Collection から利用可能です。
-
-「あなたは、どのシェルを使いますか?」という質問は、 まったく趣味の問題です。 あなたが C のプログラマだったとすれば、 `tcsh` のような C 風のシェルの方が落ち着くかもしれません。 Linux から来た人や UNIX(R) のコマンドラインインタフェイスになじみがなければ、 `bash` を試すのも良いでしょう。 ポイントは、それぞれのシェルは、 あなたの好みの作業環境で利用できる (もしくはできない) 独自の機能を持っているということ、 そして、どのシェルを使うことにするかを決めるのはあなた自身だということです。
-
-シェルの一般的な機能の一つに、ファイル名の補完があります。 コマンドやファイル名の最初の数文字を与えて kbd:[Tab] キーを押すことで、 シェルにコマンドやファイル名の残りの部分を自動的に補完させることができます。 例をあげましょう。 二つのファイル [.filename]#foobar#, [.filename]#foo.bar# が あったとします。 ここで [.filename]#foo.bar# の方を削除するには、 `rm fo[Tab].[Tab]` と入力します。
-
-するとシェルは `rm foo[BEEP].bar` と出力するでしょう。
-
-[BEEP] のところはコンソールのベル (訳注: 通常はビープ音が鳴ります) です。 これは複数のファイルがマッチしたため、 ファイル名の補完を完全に行なえなかったことを伝えています。 [.filename]#foobar# と [.filename]#foo.bar# は 両方とも `fo` ではじまるため、 補完できるのは `foo` までです。 ここで `.` を入力して kbd:[Tab] を押せば、 シェルはファイル名の残りの部分を補完できます。
-
-もう一つあげられるシェルの特徴として、環境変数があります。 環境変数とは、シェルの環境変数空間におけるキーと値とのペアです。 この変数空間は、そのシェルから起動されたプログラムから参照でき、 それを利用してプログラムの設定を保存するのに利用されます。 下の表は、一般的な環境変数とその意味を示したものです。
-
-[.informaltable]
-[cols="1,1", frame="none", options="header"]
+_シェル_ は、オペレーティングシステムを利用するためのコマンドラインインタフェースを提供します。
+シェルは入力チャンネルからコマンドを受け取り、それらを実行します。
+大部分のシェルは、日々の作業、ファイル管理やファイル名の展開、コマンドライン編集、コマンドマクロ、環境変数といった組み込みの機能を持ってます。
+FreeBSD には Bourne Shell (man:sh[1]) や 高機能 C-shell (man:tcsh[1]) が含まれています。
+また、これ以外にも `zsh` や `bash` などのシェルが FreeBSD Ports Collection から利用可能です。
+
+どのシェルを使うかは、まったく趣味の問題です。
+あなたが C のプログラマだったとすれば、man:tcsh[1] のような C 風のシェルの方が落ち着くかもしれません。
+Linux(R) ユーザであれば、`bash` を好まれるでしょう。
+それぞれのシェルは、 ユーザの好みの作業環境で利用できる (もしくはできない) 独自の機能を持っているということ、そして、どのシェルを使うことにするかを決めるのはユーザ自身ということです。
+
+シェルの一般的な機能の一つに、ファイル名の補完があります。
+コマンドやファイル名の最初の数文字を入力して kbd:[Tab] を押すと、シェルにコマンドやファイル名の残りの部分を補完させることができます。
+例として、`foobar` および `footbar` という二つのファイルがあるとします。
+`foobar` を削除するために `rm foo` と入力し、kbd:[Tab] を押してファイル名を補完しようとします。
+
+しかしシェルは `rm foo` とだけ出力します。
+`foobar` および `football` のファイル名は、両方とも `foo` から始まるため、ファイル名の補完を完全には行なえませんでした。
+一つ以上のファイル名にマッチした場合、ビープ音をらすシェルもあれば、選択できるすべてのファイル名を表示するシェルもあります。
+この場合、希望するファイル名を同定するために、ユーザはさらに文字を入力する必要があります。
+`t` を入力してもう一度 kbd:[Tab] を押すと、シェルはファイル名を確定でき、ファイル名の残りの部分が補完されます。
+
+もう一つあげられるシェルの特徴として、環境変数があります。
+環境変数とは、シェルの環境変数におけるキーと値とのペアです。
+この環境変数は、そのシェルから起動されたプログラムから参照でき、それを利用してプログラムの設定を保存するのに利用されます。
+<<shell-env-vars>> は、一般的な環境変数とその意味の一覧です。
+環境変数の名前は常に大文字です。
+
+[[shell-env-vars]]
+.一般的な環境変数
+[cols="25h,~"]
|===
| 変数名
| 意味
@@ -1055,7 +1640,7 @@ FreeBSD では日々の作業のほとんどは、 「シェル」と呼ばれ
|コロンで区切られた実行ファイル探索のための ディレクトリのリスト。
|`DISPLAY`
-|接続する X11 ディスプレイのネットワーク名 (存在する場合のみ)。
+|接続する Xorg ディスプレイのネットワーク名 (存在する場合のみ)。
|`SHELL`
|現在のシェル。
@@ -1067,75 +1652,156 @@ FreeBSD では日々の作業のほとんどは、 「シェル」と呼ばれ
|種々の端末の機能を実現する端末のエスケープコードの データベースのエントリ。
|`OSTYPE`
-|オペレーティングシステムの種別。 たとえば FreeBSD。
+|オペレーティングシステムの種別。
|`MACHTYPE`
-|システムが動作している CPU のアーキテクチャ。
+|システムの CPU アーキテクチャ。
|`EDITOR`
|ユーザの選んだテキストエディタ。
|`PAGER`
-|ユーザの選んだテキストページャ。
+|ユーザの選んだ画面上でテキストを見るためのユーティリティ。
|`MANPATH`
|コロンで区切られたマニュアルページ探索のための ディレクトリのリスト。
|===
-環境変数をセットする方法は、 それぞれのシェルごとに多少異なります。 たとえば、`tcsh` や `csh` 等の C シェルでは `setenv` を使います。 `sh` や `bash` 等の Bourne シェルでは `set` と `export` を使います。 たとえば `csh` か `tcsh` で `EDITOR` 環境変数の値を [.filename]#/usr/local/bin/emacs# に セットするか変更するには、次のようにします。
+環境変数を設定する方法は、シェルごとに多少異なります。
+man:tcsh[1] や man:csh[1] では `setenv` を使います。
+man:sh[1] や `bash` 等の Bourne シェルでは、`export` を使って現在の環境変数を設定します。
+以下の例では、`tcsh` シェルでデフォルトの `EDITOR` を `/usr/local/bin/emacs` に設定します。
[source,shell]
....
% setenv EDITOR /usr/local/bin/emacs
....
-Bourne シェルでは次のようになります。
+`bash` では次のようになります。
[source,shell]
....
% export EDITOR="/usr/local/bin/emacs"
....
-ほとんどのシェルでは、 コマンドライン中の変数名の前に `$` 文字を置くことで、 環境変数を展開させることができます。 たとえば、 `echo $TERM` は `$TERM` が セットされている内容を表示します。 それはシェルが `$TERM` を展開して `echo` に渡しているからです。
+現在の設定を確認するために、コマンドライン中の変数名の前に `$` 文字を置くことで、環境変数を展開させることができます。
+たとえば、`echo $TERM` は `$TERM` が セットされている内容を表示します。
-シェルはさまざまな特殊文字を、特別なデータを表すものとして扱います。 その特殊文字はメタキャラクタと呼ばれます。 もっとも一般的なものは `\*` で、 これはファイル名に含まれる、あらゆる文字を表します。 これらの特殊なメタキャラクタはファイル名の展開に使われます。 たとえば、`echo *` と入力すると `ls` と入力したのとほとんど同じ結果を得られます。 これはシェルが `*` とマッチするすべてのファイルを 受け取って `echo` のコマンドラインに渡し、表示するからです。
+シェルは特殊文字を、特別なデータを表すものとして扱います。
+その特殊文字はメタキャラクタと呼ばれます。
+もっとも一般的なメタキャラクタは `\*` で、これはファイル名に含まれる、あらゆる文字を表します。
+メタキャラクタはファイル名の展開に使われます。
+たとえば、`echo *` と入力すると `ls` と入力したのとほとんど同じ結果を得られます。
+これはシェルが `*` とマッチするすべてのファイルを受け取って `echo` はコマンドラインでそれらを表示するからです。
-これらの特殊文字をシェルに解釈させないようにするため、 特殊文字の前にバックスラッシュ文字 (`\`) を置くことができます。 `echo $TERM` は、 あなたの端末が何にセットされているかを表示します。 `echo \$TERM` は `$TERM` と そのまま表示します。
+特殊文字をシェルに解釈させないようにするため、特殊文字の前にバックスラッシュ文字 (`\`) を置いてエスケープしてください。
+例えば `echo $TERM` は端末の設定を表示し、`echo \$TERM` は `$TERM` とそのまま表示します。
[[changing-shells]]
=== シェルの変更
-シェルを変更する一番簡単な方法は `chsh` コマンドを使うことです。 `chsh` を実行すると 環境変数 `EDITOR` で示されたエディタが立ち上がります。 環境変数をセットしていなかった時は `vi` が立ち上がります。 "Shell:" の行を適宜変更してください。
+デフォルトのシェルを変更する一番簡単な方法は `chsh` を使うことです。
+このコマンドを実行すると、環境変数 `EDITOR` で示されたエディタ (デフォルトでは man:vi[1] が設定されている) が立ち上がります。
+`Shell:` の行を変更するシェルの絶対パスに変更してください。
-`chsh` に `-s` オプションをつけると、 エディタを起動せずにシェルを変更することが可能です。 たとえば、シェルを `bash` に変えたいなら、次のようにしてください。
+代わりに `chsh -s` を使うと、エディタを起動せずにシェルを変更できます。
+たとえば、シェルを `bash` に変えたいなら、次のようにしてください。
[source,shell]
....
% chsh -s /usr/local/bin/bash
....
+プロンプトに対してパスワードを入力し、kbd:[Return] を押すと、シェルが変更されます。
+新しいシェルを使うには、一度ログオフしてから再ログインしてください。
+
[NOTE]
====
-使おうと思っているシェルは__必ず__[.filename]##/etc/shells## 中に書かれているものでなければなりません。 シェルを crossref:ports[ports,Ports Collection] からインストールしていたのであれば、すでにそれは行なわれていますが、 手動でインストールした場合は、それを忘れずに行ってください。
-
-たとえば、`bash` を手動で [.filename]#/usr/local/bin# にインストールした場合 以下のようにする必要があります。
+使おうと思っているシェルは__必ず__ `/etc/shells` 中に書かれていなければなりません。
+シェルを crossref:ports[ports,アプリケーションのインストール - packages と ports] で説明されている FreeBSD の Ports Collection からインストールしたのであれば、自動的にこのファイルに追加されています。
+もし書かれていなければ、以下のコマンドで、パスをシェルのパスに置き換えて使って追加してください。
[source,shell]
....
-# echo "/usr/local/bin/bash" >> /etc/shells
+# echo /usr/local/bin/bash >> /etc/shells
....
-そして `chsh` を実行してください。
+その後 man:chsh[1] を実行してください。
====
+=== 高度なシェルの機能
+
+UNIX(R) のシェルは単なるコマンドインタプリタではなく、ユーザが実行したコマンドの出力をリダイレクトしたり、入力をリダイレクトすることによりコマンドをお互いに繋げることで、最終的なコマンドの出力結果を改良できます。
+この機能をビルトインコマンドとともに用いることで、ユーザは最大化された効率の環境を入手できます。
+
+シェルのリダイレクト機能を使うことで、コマンドの出力や入力を別のコマンドに送ったり、ファイルに送ることができます。
+たとえば、 man:ls[1] コマンドの出力をキャプチャするには、
+出力をファイルにリダイレクトしてください。
+以下はその例です。
+
+[source,shell]
+....
+% ls > directory_listing.txt
+....
+
+実行すると、現在の作業ディレクトリにあるファイルの一覧が `directory_listing.txt` に出力されます。
+man:sort[1] のようなコマンドは、入力を読み込むことができます。
+先ほど得たファイルの一覧をソートするには、入力元をファイルにリダイレクトしてください。
+
+[source,shell]
+....
+% sort < directory_listing.txt
+....
+
+入力された内容はソートされ画面に出力されます。
+この出力を他のファイルにリダイレクトするには、リダイレクトの向きを混ぜるように man:sort[1] の出力をリダイレクトしてください。
+
+[source,shell]
+....
+% sort < directory_listing.txt > sorted.txt
+....
+
+これまでの例では、ファイルディスクリプタを用いてコマンドに対しリダイレクトを行っています。
+すべての UNIX(R) システムは標準入力 (stdin)、標準出力 (stdout) および標準エラー (stderr) といったファイルディスクリプタを持っています。
+それぞれに対象があり、
+入力はキーボードまたはマウスなどの入力を提供するものが対象、出力はスクリーンであったりプリンタ用紙が対象です。
+また、エラーは診断やエラーメッセージに用いられるものが対象です。
+これらは、I/O ベースのファイルディスクリプタ、時にはストリームと考えられます。
+
+これらのディスクリプタを使用することで、シェルは出力と入力についてさまざまなコマンドを経由させ、また、ファイルに対して出力し、もしくはファイルから読み込むようにリダイレクトできます。
+リダイレクトの他の方法は、パイプの機能です。
+
+UNIX(R) のパイプ記号 "|" は、コマンドの出力を他のプログラムに直接渡します。
+基本的には、パイプはコマンドの標準出力を他のコマンドの標準出力に渡します。
+以下はその例です。
+
+[source,shell]
+....
+% cat directory_listing.txt | sort | less
+....
+
+この例では、`directory_listing.txt` の内容がソートされ、その結果が man:less[1] に渡されます。
+このコマンドを実行すると、出力がスクロールして画面から見えなくなることをさけることができて、ユーザは出力を自分のペースでスクロールできます。
+
[[editors]]
== テキストエディタ
-さまざまな FreeBSD の設定は、テキストファイルを編集することで行われます。 そのため、テキストエディタの扱いに慣れると良いでしょう。 FreeBSD には、基本システムの一部として二、三提供されるものと、 Ports Collection から利用できる、たくさんのテキストエディタが用意されています。
+FreeBSD の設定の多くは、テキストファイルの編集で行われます。
+そのため、テキストエディタの扱いに慣れると良いでしょう。
+FreeBSD には、基本システムの一部として二、三提供されるものと、Ports Collection から利用できる、たくさんのテキストエディタが用意されています。
-最も学習が簡単なエディタは、 easy editor の略で ee と呼ばれるものです。 ee を立ち上げるには、コマンドラインから `ee _filename_` と入力します。 ここで _filename_ は、 編集しようとしているファイルの名前です。 たとえば、[.filename]#/etc/rc.conf# を編集するには `ee /etc/rc.conf` と入力します。 一旦 `ee` の中に入れば、 エディタの機能を操作するコマンドはすべてディスプレイの上部に 表示されています。キャレット `^` 文字は キーボードの kbd:[Ctrl] キーを意味しますので、 `^e` はキーのコンビネーション kbd:[Ctrl+e] を押すという意味になります。 ee を終了するには kbd:[Esc] キーを押し、 そして leave editor を選びます。 ファイルが更新されていたときは、 エディタは変更をセーブするかどうかプロンプトを出します。
+学習が簡単なエディタは、 easy editor の略で man:ee[1] と呼ばれるものです。
+このエディタを立ち上げるには、`ee _filename_` と入力してください。
+ここで _filename_ は、 編集しようとしているファイルの名前です。
+一旦このコマンドの中に入れば、 エディタの機能を操作するコマンドはすべてディスプレイの上部に表示されています。
+キャレット (`^`) は kbd:[Ctrl] を意味するので、`^e` は kbd:[Ctrl+e] を押すという意味になります。
+man:ee[1] を終了するには kbd:[Esc] を押し、そしてメインメニューから "leave editor" オプションを選択してください。
+ファイルが更新されていたときは、エディタは変更をセーブするかどうかプロンプトを出します。
-FreeBSD には、基本システムの一部として vi、 一方 Emacs や vim といった他のエディタは Ports Collection の一部として、 より強力なテキストエディタが用意されています ([.filename]#editors/emacs#, [.filename]#editors/vim#)。 これらのエディタはやや学習が複雑ですが、より強力で高い機能性を提供します。 しかし、あなたが多量のテキストを編集することを考えているなら、 vim や Emacs といった強力なエディタを習得することは、 より多くの時間を節約することでしょう。
+FreeBSD には、ベースシステムの一部として man:vi[1] といったより強力なテキストエディタが用意されています。
+package:editors/emacs[] および package:editors/vim[] といった他のエディタは Ports Collection の一部として用意されています。
+これらのエディタはやや学習が複雑ですが、より高い機能性を提供します。
+しかし、あなたが多量のテキストを編集することを考えているなら、 vim や Emacs といった強力なエディタを習得することは、 より多くの時間を節約することでしょう。
ファイルを編集したり、文字入力を必要とするようなアプリケーションの多くは、自動的にテキストエディタを起動します。
<<shells>> の節で説明したように、デフォルトのエディタを変更するには `EDITOR` 環境変数に希望するエディタを設定してください。
@@ -1143,43 +1809,37 @@ FreeBSD には、基本システムの一部として vi、 一方 Emacs や vim
[[basics-devices]]
== デバイスとデバイスノード
-デバイスとはシステム上のハードウェアに関するものに対してよく使われる用語で、 ディスクやプリンタ、グラフィックカードやキーボードが含まれます。 FreeBSD が起動するとき、FreeBSD が表示しているものの大部分は検出されたデバイスです。 [.filename]#/var/run/dmesg.boot# を眺めれば起動メッセージを読み直すことができます。
-
-例えば、[.filename]#acd0# は最初の IDE CDROM ドライブで、[.filename]#kbd0# はキーボードを表します。
-
-UNIX(R) オペレーティングシステムにおけるデバイスのほとんどは、 デバイスノードと呼ばれる [.filename]#/dev# ディレクトリにあるスペシャルファイルを通してアクセスしなければなりません。
+デバイスとはシステム上のハードウェアに関するものに対してよく使われる用語で、ディスクやプリンタ、グラフィックカードやキーボードが含まれます。
+FreeBSD が起動するとき、ブートメッセージの大部分は検出されたデバイスについてのものです。
+ブートメッセージは `/var/run/dmesg.boot` に保存されています。
-=== デバイスノードを作成する
+各デバイスはデバイス名と番号を持ちます。
+例えば、`ada0` は最初の SATA CD-ROM ドライブで、`kbd0` はキーボードを表します。
-新しいデバイスをシステムにつけ足したり、 追加デバイスのサポートをコンパイルして加えたりするときは、 デバイスノードを作成しなければなりません。
-
-==== `DEVFS` (デバイスファイルシステム: Device File System)
-
-デバイスファイルシステム `DEVFS` は、 グローバルファイルシステム名前空間の中のカーネルデバイス名前空間へのアクセスを提供します。 デバイスノードを作成したり変更したりするのではなく、 `DEVFS` がこの特別なファイルシステムを管理するのです。
-
-詳しくは man:devfs[5] マニュアルページをご覧ください。
+FreeBSD におけるほとんどのデバイス、デバイスノードと呼ばれる `/dev` にあるスペシャルファイルを通してアクセスしなければなりません。
[[basics-more-information]]
-== さらに詳しい情報を得るには...
+== マニュアルページ
-[[basics-man]]
-=== オンラインマニュアル
-
-FreeBSD についてのもっとも包括的な文書は、 マニュアルページの形式になっているものです。 FreeBSD システム上のほとんどすべてのプログラムには、 基本的な操作方法とさまざまな引数を説明しているリファレンスマニュアルが添付されています。 これらのマニュアルは `man` コマンドで見ることができます。`man` コマンドの使い方は簡単です。
+FreeBSD についてのもっとも包括的な文書は、 マニュアルページの形式になっているものです。
+FreeBSD システム上のほとんどすべてのプログラムには、基本的な操作方法と利用可能な引数を説明しているリファレンスマニュアルが添付されています。
+これらのマニュアルは `man` を使って見ることができます。
[source,shell]
....
% man コマンド名
....
-`コマンド名` のところには、知りたいコマンドの名前を入れます。 たとえば `ls` コマンドについて知りたい場合には、 次のように入力します。
+ここで `コマンド名` のところには、知りたいコマンドの名前を入れます。
+たとえば man:ls[1] について知りたい場合には、次のように入力します。
[source,shell]
....
% man ls
....
-オンラインマニュアルは、 セクション番号で分類されています。
+マニュアルは、トピックごとにセクション番号で分類されています。
+FreeBSD では、以下のセクションがあります。
. ユーザコマンド
. システムコールとエラー番号
@@ -1189,52 +1849,55 @@ FreeBSD についてのもっとも包括的な文書は、 マニュアルペ
. ゲームや娯楽
. さまざまな情報
. システムの管理と操作のためのコマンド
-. カーネル開発者のための情報
+. システムカーネルインタフェース
-時折、 同じトピックがオンラインマニュアルの複数のセクションに記載されている場合があります。 たとえば、`chmod` ユーザコマンドと `chmod()` システムコールの場合がそれに該当します。 この場合、`man` コマンドにセクション番号を与えることで、 どちらを参照したいかを指定することができます。
+時折、 同じトピックがオンラインマニュアルの複数のセクションに記載されている場合があります。
+たとえば、`chmod` ユーザコマンドと `chmod()` システムコールの場合がそれに該当します。
+man:man[1] にセクション番号を与えることで、 表示したいセクションを指定できます。
[source,shell]
....
% man 1 chmod
....
-上のようにすれば、 ユーザコマンド `chmod` のマニュアルページが表示されます。 オンラインマニュアルの特定セクションへの参照は、 慣習的に書かれている文書で括弧の中に示されます。 すなわち、man:chmod[1] は `chmod` ユーザコマンドを、man:chmod[2] はシステムコールの方を示しています。
+上のようにすれば、ユーザコマンド man:chmod[1] のマニュアルページが表示されます。
+オンラインマニュアルの特定セクションへの参照は、慣習的に書かれている文書で括弧の中に示されます。
+すなわち、man:chmod[1] はユーザコマンドを、man:chmod[2] はシステムコールの方を示しています。
-コマンドの名前を知っていて、その使い方を知りたいだけの場合はここまでの説明で十分でしょう。
-しかし、 もしコマンドの名前を思い出せない場合にはどうしたら良いのでしょうか?
-`man` に `-k` スイッチをつければ、コマンド解説 (description) の文章から、指定したキーワードを検索することができます。
+マニュアルページの名前を知らない場合には、`man -k` を使ってマニュアルページの解説 (description) からキーワードを検索してください。
[source,shell]
....
% man -k mail
....
-このコマンドにより、 "mail" というキーワードをコマンド解説に含むコマンドの一覧が表示されます。 実際には、これは `apropos` コマンドを使う場合と同等の機能です。
+このコマンドは、"mail" というキーワードをコマンド解説に含むコマンドの一覧を表示します。
+これは man:apropos[1] と同等の機能です。
-それでは、[.filename]#/usr/bin# にあるさまざまなコマンドすべてを見ていて、それらが実際にどう働くのかが、まったく見当もつかないときにはどうしたら良いでしょう? そのときは、
+`/usr/sbin` にあるすべてのコマンドの説明を読むには、以下のように実行してください。
[source,shell]
....
-% cd /usr/bin
-% man -f *
+% cd /usr/sbin
+% man -f * | more
....
-と入力するか、あるいは同じ働きをする
+または、以下を実行してください。
[source,shell]
....
-% cd /usr/bin
-% whatis *
+% cd /usr/sbin
+% whatis * |more
....
-としてください。
-
[[basics-info]]
=== GNU の Info ファイル
-FreeBSD には Free Software Foundation (FSF) によるアプリケーションや ユーティリティがたくさん含まれています。 これらのプログラムには、マニュアルページに加えて `info` ファイルと呼ばれる ハイパーテキスト形式の文書が付属しています。 この文書は `info` コマンド、 あるいは emacs をインストールしているなら emacs の info モードで読むことができます。
+FreeBSD には Free Software Foundation (FSF) によるアプリケーションやユーティリティが含まれています。
+これらのプログラムには、マニュアルページに加えて `info` ファイルと呼ばれるハイパーテキスト形式の文書が付属しています。
+この文書は man:info[1]、あるいは package:editors/emacs[] をインストールしているなら emacs の info モードで読むことができます。
-man:info[1] コマンドを使うには、次のように入力してください。
+man:info[1] を使うには、次のように入力してください。
[source,shell]
....
diff --git a/documentation/content/ja/books/handbook/bibliography/_index.adoc b/documentation/content/ja/books/handbook/bibliography/_index.adoc
index 352202bdfe..76ab6ca86e 100644
--- a/documentation/content/ja/books/handbook/bibliography/_index.adoc
+++ b/documentation/content/ja/books/handbook/bibliography/_index.adoc
@@ -4,8 +4,8 @@ part: パートV. 付録
prev: books/handbook/mirrors
next: books/handbook/eresources
showBookMenu: true
-weight: 29
-path: "/books/handbook/"
+weight: 28
+path: "/books/handbook/bibliography/"
---
[appendix]
diff --git a/documentation/content/ja/books/handbook/book.adoc b/documentation/content/ja/books/handbook/book.adoc
index 68f597106f..004a57d9d7 100644
--- a/documentation/content/ja/books/handbook/book.adoc
+++ b/documentation/content/ja/books/handbook/book.adoc
@@ -89,8 +89,6 @@ include::{chapters-path}config/_index.adoc[leveloffset=+1]
include::{chapters-path}boot/_index.adoc[leveloffset=+1]
-include::{chapters-path}users/_index.adoc[leveloffset=+1]
-
include::{chapters-path}security/_index.adoc[leveloffset=+1]
include::{chapters-path}disks/_index.adoc[leveloffset=+1]
diff --git a/documentation/content/ja/books/handbook/boot/_index.adoc b/documentation/content/ja/books/handbook/boot/_index.adoc
index aa9f28b298..7280292cb9 100644
--- a/documentation/content/ja/books/handbook/boot/_index.adoc
+++ b/documentation/content/ja/books/handbook/boot/_index.adoc
@@ -2,10 +2,13 @@
title: 第12章 FreeBSD の起動のプロセス
part: パートIII. システム管理
prev: books/handbook/config
-next: books/handbook/users
+next: books/handbook/security
+description: FreeBSD のブートプロセスおよび FreeBSD カーネルがスタートし、デバイスを検出し、init を起動するまでに起きることすべてを含む FreeBSD の起動プロセスのカスタマイズ方法について説明します。
+tags: ["boot", "boot process", "device hints", "x86", "amd64", "MBR", "GPT", "UEFI", "bsdlabel", "boot0", "Single-User Mode", "Multi-User Mode"]
showBookMenu: true
weight: 16
-path: "/books/handbook/"
+path: "/books/handbook/boot/"
+aliases: ["/ja/books/handbook/boot-introduction/","/ja/books/handbook/boot-splash/","/ja/books/handbook/device-hints/","/ja/books/handbook/boot-shutdown/"]
---
[[boot]]
@@ -79,7 +82,16 @@ x86 ハードウェアでは、基本入出力システム (Basic Input/Output S
FreeBSD は古い標準の MBR、 または新しい GUID Partition Table (GPT) から起動できます。 GPT パーティションは、Unified Extensible Firmware Interface (UEFI) に対応したコンピュータで良く用いられます。 しかしながら、FreeBSD はレガシーな BIOS にのみに対応したコンピュータからも、man:gptboot[8] により、 GPT パーティションから起動できます。 UEFI からの直接の起動への対応は進行中です。
====
-MBR 内部のコードは、 一般的に_ブートマネージャ_と呼ばれます。 とりわけユーザとの対話がある場合にそう呼ばれます。 通常ブートマネージャのもっと多くのコードが、 ディスクの最初のトラック、またはファイルシステム上におかれます。 ブートマネージャの例としては、Boot Easy とも呼ばれる FreeBSD 標準のブートマネージャの boot0、 多くの Linux(R) ディストリビューションが採用している Grub 等があります。
+MBR 内部のコードは、 一般的に _ブートマネージャ_ と呼ばれます。
+とりわけユーザとの対話がある場合にそう呼ばれます。
+通常ブートマネージャのもっと多くのコードが、ディスクの最初のトラック、またはファイルシステム上におかれます。
+ブートマネージャの例としては、Boot Easy とも呼ばれる FreeBSD 標準のブートマネージャの boot0、多くの Linux(R) ディストリビューションが採用している GNU Grub 等があります。
+
+[NOTE]
+====
+// There is extref:{faq}[a frequently asked question] about GRUB. Beyond the answer there, //
+GRUB のユーザは https://www.gnu.org/software/grub/grub-documentation.html[GNU-provided documentation] を参照してください。
+====
ディスク上にインストールされているオペレーティングシステムが 1 つの時は、MBR はディスク上の最初の起動可能な (アクティブな) スライスを探し、 そのスライスにあるコードを起動してオペレーティングシステムの残りをロードします。 ディスク上に複数のオペレーティングシステムが存在しているのなら、 複数のオペレーティングシステムの一覧を表示できて、 起動するオペレーティングシステムを選択できるような、 別のブートマネージャをインストールすることもできます。
diff --git a/documentation/content/ja/books/handbook/bsdinstall/_index.adoc b/documentation/content/ja/books/handbook/bsdinstall/_index.adoc
index 4b32e180c3..32cbe769fa 100644
--- a/documentation/content/ja/books/handbook/bsdinstall/_index.adoc
+++ b/documentation/content/ja/books/handbook/bsdinstall/_index.adoc
@@ -7,7 +7,8 @@ description: FreeBSD のインストール方法、最小ハードウェア要
tags: ["bsdinstall", "FreeBSD のインストール", "必要要件", "チュートリアル", "gガイド"]
showBookMenu: true
weight: 4
-path: "/books/handbook/"
+path: "/books/handbook/bsdinstall/"
+aliases: ["/ja/books/handbook/bsdinstall-hardware/","/ja/books/handbook/bsdinstall-pre/","/ja/books/handbook/bsdinstall-start/","/ja/books/handbook/using-bsdinstall/","/ja/books/handbook/bsdinstall-partitioning/","/ja/books/handbook/bsdinstall-fetching-distribution/","/ja/books/handbook/bsdinstall-post/","/ja/books/handbook/bsdinstall-network/","/ja/books/handbook/bsdinstall-install-trouble/","/ja/books/handbook/using-live-cd/"]
---
[[bsdinstall]]
@@ -51,102 +52,75 @@ endif::[]
[[bsdinstall-synopsis]]
== この章では
-FreeBSD を入手して実行する方法は、環境に依存します。 以下のようにさまざま方法が用意されています。
+FreeBSD は、amd64, ARM(R), RISC-V(R), および PowerPC(R) 等のさまざまなアーキテクチャに対応しています。
-* ダウンロードして仮想環境にインストールするための仮想マシンイメージ。 これらのイメージは、link:https://www.freebsd.org/ja/where/[FreeBSD を入手する] ページからダウンロードできます。 仮想マシンのイメージとして KVM ("qcow2"), VMWare ("vmdk"), Hyper-V ("vhd") および広くサポートされている raw デバイスイメージが用意されています。 これらはインストール用のイメージではなく、 すでに設定済みの ("すでにインストールされた") インスタンスで、すぐに起動して、 インストール後の作業を行うことができます。
-* Amazon link:https://aws.amazon.com/marketplace/pp/prodview-ukzmy5dzc6nbq[AWS Marketplace], link:https://azuremarketplace.microsoft.com/en-US/marketplace/apps/thefreebsdfoundation.freebsd-13_0[Microsoft Azure Marketplace] および link:https://console.cloud.google.com/marketplace/product/freebsd-cloud/freebsd-13[Google Cloud Platform] において、それぞれのホスティングサービスで実行可能な仮想マシンイメージを利用できます。
-Azure での FreeBSD のデプロイについての詳細な情報については、 link:https://docs.microsoft.com/en-us/azure/virtual-machines/linux/freebsd-intro-on-azure[Azure Documentation] の関連する章をご覧ください。
-* Raspberry Pi または BeagleBone Black といった組み込みシステム用に、SD カードイメージが用意されています。 これらのイメージは、 link:https://www.freebsd.org/where/[FreeBSD を入手する] ページからダウンロードしてください。 これらのファイルをダウンロードしたら、展開し、 ボードが起動するように raw イメージとして SD カードに書き込んでください。
-* FreeBSD を通常のデスクトップ、ラップトップ、 サーバシステムのハードディスク上にインストールするためのインストールイメージ。
+インストールまたは直接 FreeBSD を実行するためのイメージは、アーキテクチャおよびプラットフォームごとに link:https://www.freebsd.org/ja/where/[ダウンロード] できます。
-この章では、4 番目のケースに関連して、 テキストベースの bsdinstall と呼ばれるインストールプログラムの使い方について説明します。
+利用できるイメージのタイプは以下の通りです。
-この章で記載されているインストールの手順は、 i386(TM) および AMD64 アーキテクチャを対象にしています。 必要に応じて、他のプラットフォームに特有の手順についても明記しています。 インストーラとこの文書で記載している内容には、 いくらかズレがあることがありますので、 この章を正確で忠実な手順書としてではなく、 一般的なガイドとしてご利用ください。
+* `qcow2`, `vmdk`, `vhd` および raw デバイスイメージといった仮想マシンのディスクイメージ。これらはインストール用のイメージではなく、FreeBSD がすでにインストールされたインスタンスで、すぐに起動して、インストール後の作業を行うことができます。仮想マシンのイメージは、クラウド環境でも使われます。
+* Raspberry Pi のような組み込みシステム用の SD カードイメージ。これらのファイルをダウンロードしたら、展開し、ボードが起動するように raw イメージとして SD カードに書き込んでください。
+* ISO または USB デバイスから起動して、FreeBSD を通常のデスクトップ、ラップトップ、サーバシステムのドライブ上にインストールするためのインストールイメージ。
-[NOTE]
-====
-グラフィカルなインストーラで FreeBSD をインストールしたいと考えているユーザは、
-https://ghostbsd.org[GhostBSD], https://www.midnightbsd.org[MidnightBSD] または https://nomadbsd.org/[NomadBSD] に興味を持たれることでしょう。
-====
+この章では、3 番目のケースについて、bsdinstall と呼ばれるテキストベースのインストールプログラムを用いた FreeBSD のインストール方法について説明します。
この章では、以下について説明します。
-* 最小ハードウェア要件、および FreeBSD が対応しているアーキテクチャについて。
-* FreeBSD インストールメディアの作り方。
+* FreeBSD イメージの入手方法および FreeBSD インストールメディアの作り方。
* bsdinstall の起動方法。
* bsdinstall が聞いてくる質問がどのような意味であり、 またどのように答えれば良いか。
* インストールに失敗した時の問題の解決方法。
* インストールを確定する前に、 FreeBSD の live 版へアクセスする方法。
-この章を読む前に、以下のことを確認して下さい。
-
-* インストールしようとしているバージョンに付属しているサポートハードウェア一覧を読み、 システムのハードウェアがサポートされているかどうかを確認して下さい。
-
[[bsdinstall-hardware]]
== 最小ハードウェア要件
-FreeBSD をインストールするために必要なハードウェア要件は、 アーキテクチャごとに異なります。FreeBSD の各リリースが対応しているハードウェアアーキテクチャおよびデバイスの一覧は、 link:https://www.FreeBSD.org/ja/releases/[FreeBSD リリース情報] のページにまとめられています。 アーキテクチャごとのイメージの選択に関しては、 link:https://www.FreeBSD.org/ja/where/[FreeBSD ダウンロードページ] でも説明されています。
-
-FreeBSD をインストールするためには、 少なくとも 96 MB の RAM および 1.5 GB のハードディスクの空き容量が必要です。 しかしながら、このような少ないメモリやディスク容量のシステムは、 組み込みアプライアンスのような、 カスタムアプリケーションでのみ適しており、 一般使用のデスクトップのシステムでは、 より多くのリソースが必要となります。 2-4 GB RAM そして少なくとも 8 GB のハードディスク容量を検討してください。
-
-以下は、各アーキテクチャごとのプロセッサの必要要件です。
-
-amd64::
-デスクトップおよびラップトップのプロセッサとしては最も一般的で、 最近のほとんどのシステムで使われています。 Intel(R) は Intel64 と呼び、 他の製造ベンダはしばしば x86-64 と呼びます。
-+
-amd64 互換のプロセッサの例は、 AMD Athlon(TM)64, AMD Opteron(TM), マルチコアの Intel(R) Xeon(TM) および Intel(R) Core(TM) 2 以降のプロセッサです。
-
-i386::
-古いデスクトップおよびラップトップでは、 この 32 ビットの X86 アーキテクチャが用いられています。
-+
-浮動小数点演算ユニットを持つ i386 互換のほとんどのプロセッサに対応しています。 486 以上のすべての Intel(R) プロセッサに対応しています。
-ただし、プロジェクトで公開されているバイナリは、686 プロセッサでコンパイルされているので、486 および 586 システムに特化したビルドが必要となることがあります。
-+
-FreeBSD は、Physical Address Extensions (PAE) に対応した CPU でこの機能を利用可能です。 PAE 機能を有効にしたカーネルでは、 4 ギガバイト以上のメモリを認識し、システムが利用できます。 しかしながら、PAE を使うと、 デバイスドライバや FreeBSD の他の機能に制限を課してしまいます。
-
-arm64::
-ほとんどの組み込み用のボードは、64 ビットの ARM コンピュータです。
-数多くの arm64 サーバに対応しています。
-
-arm::
-古い armv7 ボードに対応しています。
-
-powerpc::
-USB 内蔵のすべての New World ROM Apple(R) Mac(R) システムに対応しています。 複数の CPU を持つコンピュータは SMP に対応しています。
-+
-32-bit カーネルは、RAM の最初の 2 GB だけを利用できます。
+FreeBSD をインストールするために必要なハードウェア要件は、アーキテクチャおよびバージョンごとに異なります。
+FreeBSD の各リリースが対応しているハードウェアアーキテクチャおよびデバイスの一覧は、 link:https://www.FreeBSD.org/ja/releases/[FreeBSD リリース情報] のページにまとめられています。
+アーキテクチャごとに推奨される適切なイメージの選択に関しては、 link:https://www.FreeBSD.org/ja/where/[FreeBSD ダウンロードページ] でも説明されています。
[[bsdinstall-pre]]
== インストール前に行う作業
-システムが FreeBSD のインストールにおける最小ハードウェア要件を満たしていることを確認したら、 インストールファイルをダウンロードして、 インストール用のメディアを用意してください。 その前に、以下のチェックリストを確認して、 システムをインストールする準備ができていることを確認してください。
+システムが FreeBSD のインストールのための最小ハードウェア要件を満たしていることを確認したら、インストールファイルをダウンロードして、インストール用のメディアを用意してください。
+その前に、以下のチェックリストを確認して、システムをインストールする準備ができていることを確認してください。
[.procedure]
+====
. 重要なデータのバックアップ
+
-オペレーティングシステムをインストールする前に、 _常に_ 価値のあるすべてのデータを最初にバックアップしてください。 インストールしようとしているシステムにはバックをとらないでください。 そのかわり、USB ドライブ、 ネットワーク上の他のシステム、 もしくはオンラインのバックアップサービスといったリムーバルディスクにデータを保存してください。 インストールを始める前に、バックアップを調べて、 必要なすべてのファイルがバックアップに含まれていることを確認してください。 インストーラがシステムのディスクをフォーマットしてしまうと、 ディスクに保存されていたすべてのデータは失われます。
+オペレーティングシステムをインストールする前に、 *常に* 価値のあるすべてのデータを最初にバックアップしてください。
+インストールしようとしているシステムにはバックアップを保存しないでください。
+そのかわり、USB ドライブ、ネットワーク上の他のシステム、もしくはオンラインのバックアップサービスといったリムーバルディスクにデータを保存してください。
+インストールを始める前に、バックアップを調べて、必要なすべてのファイルがバックアップに含まれていることを確認してください。
+インストーラがシステムのディスクをフォーマットしてしまうと、ディスクに保存されていたすべてのデータは失われます。
. FreeBSD をインストールする場所の決定
+
インストールするオペレーティングシステムが FreeBSD のみであれば、 このステップは飛ばすことができます。 しかし、ディスクに FreeBSD と 他のオペレーティングシステムを共存させる必要がある場合には、FreeBSD が利用するディスクおよびパーティションを決める必要があります。
+
-i386 および amd64 アーキテクチャでは、 二つのパーティションスキームのどちらかを使って、 ハードディスクを複数の塊に分割することができます。 伝統的な _Master Boot Record_ (MBR) では、 ディスク 1 台あたり最大 4 つの _プライマリパーティション_ をパーティションテーブルに持つことができます 歴史的な理由により、FreeBSD では、これらのパーティションのことを _スライス_ と呼びます。 プライマリパーティションの 1 つに、 複数の _論理パーティション_ を含む _拡張パーティション_ を作成できます。 _GUID Partition Table_ (GPT) は、 ディスクをパーティションに分ける簡単で新しい方法です。 一般的な GPT の実装では、 1 つのディスクに 128 個までのパーティションの作成が可能であり、 論理パーティションは必要ありません。
+i386 および amd64 アーキテクチャでは、 二つのパーティションスキームのどちらかを使って、 ハードディスクを複数の塊に分割することができます。
+伝統的な _Master Boot Record_ (MBR) では、ディスク 1 台あたり最大 4 つの _プライマリパーティション_ をパーティションテーブルに持つことができます。
+歴史的な理由により、FreeBSD では、これらのパーティションのことを _スライス_ と呼びます。 プライマリパーティションの 1 つに、複数の _論理パーティション_ を含む _拡張パーティション_ を作成できます。
+_GUID Partition Table_ (GPT) は、ディスクをパーティションに分ける簡単で新しい方法です。
+一般的な GPT の実装では、1 つのディスクに 128 個までのパーティションの作成が可能であり、論理パーティションは必要ありません。
+
FreeBSD のブートローダは、プライマリまたは GPT パーティションのどちらかを必要とします。 ディスク上のプライマリ、もしくは GPT パーティションがすべて使われているのであれば、 そのひとつを FreeBSD のために開放してください。 ディスクにあるデータを消去せずにパーティションを作成するには、 パーティションサイズを変更するツールを使って今あるパーティションのサイズを小さくし、 空いたスペースに新しいパーティションを作成してください。
+
-パーティションサイズを変更するフリーや商用のツールは、 link:http://en.wikipedia.org/wiki/List_of_disk_partitioning_software[http://en.wikipedia.org/wiki/List_of_disk_partitioning_software] にまとめられています。
-GParted Live (link:https://gparted.org/livecd.php[https://gparted.org/livecd.php]) は、GParted パーティションエディタを含む完全なライブ CD です。 多くの Linux Live CD ディストリビューションでも GParted を利用できます。
+パーティションサイズを変更するためのフリーまたは商用のツールは、 link:https://en.wikipedia.org/wiki/List_of_disk_partitioning_software[List of disk partitioning software wikipedia entry] にまとめられています。
+link:https://gparted.org/livecd.php[GParted Live] は、GParted パーティションエディタを含むフリーのライブ CD です。
+
[WARNING]
-====
+======
ディスクパーティションを縮小するユーティリティは、 適切に用いるとパーティション用の空き容量を新しく安全に作成できます。 すでにあるパーティションを間違って選択してしまう可能性があるので、 ディスクのパーティションを変更する前に、 必ず重要なデータのバックアップをとり、 バックアップが正しくとれていることを検証してください。
-====
+======
+
-ディスクパーティションごとに異なるオペレーティングシステムをインストールすることで、 一つのコンピュータに複数のオペレーティングシステムをインストールできます。 crossref:virtualization[virtualization,仮想化技術] を用いると、ディスクパーティションを変更することなく、 複数のオペレーティングシステムを同時に起動できます。
+ディスクパーティションごとに異なるオペレーティングシステムをインストールすることで、 一つのコンピュータに複数のオペレーティングシステムをインストールできます。link:https://docs.freebsd.org/en/books/handbook/virtualization/#virtualization[仮想化技術] を用いると、ディスクパーティションを変更することなく、複数のオペレーティングシステムを同時に起動できます。
. ネットワーク情報の収集
+
FreeBSD のインストール方法によっては、ネットワークに接続し、 インストールファイルをダウンロードする必要があります。 インストールする方法に関わらず、インストール後に、 インストーラはシステムのネットワークインタフェースの設定をする機会を提供します。
+
ネットワークに DHCP サーバがあると、 自動的にネットワークの設定情報を取得できます。 DHCP を利用できない環境では、 システムの以下のネットワーク情報について、 システム管理者かプロバイダにネットワーク情報を問い合わせる必要があります。
+
.. IP アドレス
.. サブネットマスク
.. デフォルトゲートウェイの IP アドレス
@@ -155,38 +129,69 @@ FreeBSD のインストール方法によっては、ネットワークに接続
. FreeBSD Errata の確認
+
-FreeBSD プロジェクトでは FreeBSD の各リリースができる限り安定するよう努力していますが、 時々バグが発生してしまうことがあります。極まれに、 発生したバグがインストールプロセスに影響を与えることがあります。 これらの問題は発見され解決されると、 FreeBSD のウェブサイトの FreeBSD Errata (link:https://www.FreeBSD.org/releases/{rel130-current}R/errata/[https://www.freebsd.org/releases/{rel130-current}R/errata/]) に記載されます。 インストールに影響するような既知の問題が無いことを、 インストールする前に Errata で確認してください。
+FreeBSD プロジェクトでは FreeBSD の各リリースができる限り安定するよう努力していますが、 時々バグが発生してしまうことがあります。
+極まれに、発生したバグがインストールプロセスに影響を与えることがあります。
+これらの問題は発見され解決されると、FreeBSD の各バージョンごとに Errata ページに記載されます。
+インストールに影響するような既知の問題が無いことを、インストールする前に Errata で確認してください。
+
-すべてのリリースに関する情報や Errata は、FreeBSD のウェブサイトの リリース情報の項 (link:https://www.FreeBSD.org/ja/releases/[https://www.freebsd.org/ja/releases/]) で確認できます。
+すべてのリリースに関する情報や Errata は、 link:https://www.FreeBSD.org/ja/releases/[リリース情報] のページで確認できます。
+====
[[bsdinstall-installation-media]]
=== インストールメディアの準備
FreeBSD のインストーラは、 他のオペレーティングシステムで実行できるようなプログラムではありません。 そのかわり、FreeBSD インストールファイルをダウンロードしたら、 ファイルタイプやサイズに合わせてメディア (CD, DVD または USB) に焼いてください。そして、挿入したメディアからインストールするように、 システムを起動してください。
-FreeBSD のインストールファイルは link:https://www.FreeBSD.org/ja/where/#download[www.freebsd.org/ja/where/#download] から入手できます。 各インストールファイルの名前は、FreeBSD のリリースバージョンおよびアーキテクチャ、ファイルタイプからなります。 たとえば、amd64 システムに DVD から FreeBSD 13.0 をインストールするには、 [.filename]##FreeBSD-13.0-RELEASE-amd64-dvd1.iso## をダウンロードして、ファイルを DVD に焼き、DVD を挿入してからシステムを起動してください。
+FreeBSD のインストールファイルは link:https://www.FreeBSD.org/ja/where/#download[FreeBSD ダウンロードページ] から入手できます。
+各インストールファイルの名前は、FreeBSD のリリースバージョンおよびアーキテクチャ、ファイルタイプから構成されます。
+
+インストールファイルは、さまざまな形式で、man:xz[1] により圧縮されたファイルまたは圧縮されていないファイルが用意されています。
+用意されているフォーマットは、 コンピュータのアーキテクチャやメディアのタイプによって異なります。
+
+インストールファイルの形式
-インストールファイルは、さまざまな形式で用意されています。 用意されているフォーマットは、 コンピュータのアーキテクチャやメディアのタイプによって異なります。
+* `*-bootonly.iso*`: インストーラのみを含む最小のインストールファイルです。
+インストールを行う間、インストーラは FreeBSD をインストールするために必要なファイルをダウンロードするため、ネットワーク接続が必要です。
+このファイルは、光学メディアに書き込む必要があります。
+* `*-disc1.iso*`: FreeBSD のインストールに必要となる、ソースおよび Ports Collection といったすべてのファイルが含まれています。
+このファイルは、光学メディアに書き込む必要があります。
+* `*-dvd1.iso*`: FreeBSD のインストールに必要となる、ソースおよび Ports Collection といったすべてのファイルが含まれています。
+インターネットに接続することなく、メディアのみでシステムのインストールを完了できるように、良く使われるウィンドウマネージャおよびアプリケーションをインストールするためのバイナリ package も含まれています。
+このファイルは、光学メディアに書き込む必要があります。
+* `*-memstick.img*`: FreeBSD のインストールに必要となる、ソースおよび Ports Collection といったすべてのファイルが含まれています。
+<<bsdinstall-usb>> で説明されている手順に従って、このファイルを USB スティックに書き込んでください。
+* `*-mini-memstick.img*`: `*-bootonly.iso*` と同じく、インストールファイルは含まれていないため、必要に応じてダウンロードする必要があります。
+インストールを行う間、ネットワーク接続が必要です。
+<<bsdinstall-usb>> の説明に従って、USB スティックに書き込んでください。
-[[bsdinstall-installation-media-uefi]]
-UEFI (Unified Extensible Firmware Interface) で起動するコンピュータのために、 追加のインストールファイルも用意されています。 これらのファイルの名前には、[.filename]#uefi# という文字列が含まれています。
+イメージファイルをダウンロードしたら、同じディレクトリから少なくとも一つの _チェックサム_ ファイルをダウンロードしてください。
+2 つの _チェックサム_ ファイルが利用可能です。
+これのファイル名にはリリース番号とアーキテクチャ名がついています。
+たとえば `CHECKSUM.SHA256-FreeBSD-13.1-RELEASE-amd64` および `CHECKSUM.SHA512-FreeBSD-13.1-RELEASE-amd64` という名前がつけられます。
-ファイルの形式
+どちらかの (もしくは両方の) ファイルをダウンロードしたら、イメージファイルの _チェックサム_ を計算し、 _チェックサム_ ファイルに示されている値と比較してください。
+計算した _チェックサム_ は、2 つの異なるアルゴリズム (SHA256 および SHA512) に対応する適切なファイルと比較してください。
+FreeBSD では、_チェックサム_ のために man:sha256[1] および man:sha512[1] を提供しています。
+他のオペレーティングシステムでも同じようなプログラムを利用できます。
-* `-bootonly.iso`: インストーラのみを含む最小のインストールファイルです。 インストールを行う間、インストーラは FreeBSD をインストールするために必要なファイルをダウンロードするため、 ネットワーク接続が必要です。 このファイルは、CD を焼くためのアプリケーションを用いて、 CD に書き込む必要があります。
-* `-disc1.iso`: FreeBSD のインストールに必要となる、ソースおよび Ports Collection といったすべてのファイルが含まれています。 このファイルは、CD を焼くためのアプリケーションを用いて、 CD に書き込む必要があります。
-* `-dvd1.iso`: FreeBSD のインストールに必要となる、ソースおよび Ports Collection といったすべてのファイルが含まれています。 インターネットに接続することなく、 メディアのみでシステムのインストールを完了できるように、 良く使われるウィンドウマネージャおよびアプリケーションをインストールするためのバイナリ package も含まれています。 DVD を焼くためのアプリケーションを使って、 DVD に書き込む必要があります。
-* `-memstick.img`: FreeBSD のインストールに必要となる、ソースおよび Ports Collection といったすべてのファイルが含まれています。 以下の手順に従って、USB スティックに書き込んでください。
-* `-mini-memstick.img`: `-bootonly.iso` と同じく、 インストールファイルは含まれていないため、 必要に応じてダウンロードする必要があります。 インストールを行う間、ネットワーク接続が必要です。 <<bsdinstall-usb>> の説明に従って、 USB スティックに書き込んでください。
+FreeBSD での _チェックサム_ の検証は、以下のように man:sha256sum[1] (または man:sha512sum[1]) を使用して自動的に行うことができます。
-イメージファイルをダウンロードしたら、同じディレクトリから [.filename]#CHECKSUM.SHA256# をダウンロードしてください。 その後、イメージファイルの _チェックサム_ を計算してください。 FreeBSD では、この計算のために man:sha256[1] を提供しています。 `sha256 _イメージファイルの名前_` のように使用してください。 他のオペレーティングシステムでも同じようなプログラムを利用できます。
+[source,shell]
+....
+% sha256sum -c CHECKSUM.SHA256-FreeBSD-13.1-RELEASE-amd64 FreeBSD-13.1-RELEASE-amd64-dvd1.iso
+FreeBSD-13.1-RELEASE-amd64-dvd1.iso: OK
+....
-計算したチェックサムと [.filename]#CHECKSUM.SHA256# に示されている値を比較してください。 チェックサムは完全に一致している必要があります。 もしチェックサムが一致しなければ、 イメージファイルは壊れているので、もう一度ダウンロードしてください。
+チェックサムは完全に一致している必要があります。
+もしチェックサムが一致しなければ、 イメージファイルが壊れている可能性があるので、もう一度ダウンロードしてください。
[[bsdinstall-usb]]
==== イメージファイルを USB に書き込む
-[.filename]#\*.img# ファイルは、 完全なメモリスティックの内容の _イメージ_ です。これは、 通常のファイルのように対象のデバイスにコピーすることは _できません_。 USB スティックへ [.filename]#*.img# を書き込むためのアプリケーションは複数あります。 この節ではこのうちの二つのユーティリティについて説明します。
+`\*memstick.img` ファイルは、完全なメモリスティックの内容の _イメージ_ です。
+これは、通常のファイルのように対象のデバイスにコピーすることは _できません_。
+USB スティックへ `*.img` を書き込むためのアプリケーションは複数あります。
+この節ではこのうちの二つのユーティリティについて説明します。
[IMPORTANT]
====
@@ -195,11 +200,15 @@ UEFI (Unified Extensible Firmware Interface) で起動するコンピュータ
[[bsdinstall-usb-dd]]
[.procedure]
-.Procedure: `dd` を使ってイメージを書き込む
-[WARNING]
-====
-この例では、イメージの書き込み先のターゲットデバイスとして、 [.filename]#/dev/da0# が使われています。 ここで使われるコマンドは、 指定したターゲットデバイスに存在しているデータを破壊してしまうので、 正しいデバイスが指定されていることに _細心の注意を払ってください_。
====
+*Procedure. `dd` を使ってイメージを書き込む* +
+
+[WARNING]
+======
+この例では、イメージの書き込み先のターゲットデバイスとして、`/dev/da0` が使われています。
+ここで使われるコマンドは、 指定したターゲットデバイスに存在しているデータを破壊してしまうので、 正しいデバイスが指定されていることに *細心の注意を払ってください*。
+======
+
. man:dd[1] コマンドユーティリティは、 BSD, Linux(R), および Mac OS(R) システムで利用できます。 `dd` を使ってイメージを焼くには、 USB スティックを挿入して、 デバイス名を確定してください。 その後、ダウンロードしたインストールファイルおよび、 USB スティックのデバイス名を指定してください。 この例では、amd64 インストールイメージを FreeBSD システムの最初の USB デバイスに書き込みます。
+
[source,shell]
@@ -207,27 +216,33 @@ UEFI (Unified Extensible Firmware Interface) で起動するコンピュータ
# dd if=FreeBSD-13.0-RELEASE-amd64-memstick.img of=/dev/da0 bs=1M conv=sync
....
+
-もし上記のコマンドに失敗するようでしたら、USB スティックがマウントされていないことや、デバイス名がディスクに対してのものであり、パーティションではないことを確認してください。
+もし上記のコマンドに失敗するようでしたら、USB スティックがマウントされているかどうか、デバイス名が (パーティションではなく) ディスクに対して指定されていることを確認してください。
++
オペレーティングシステムによっては、このコマンドを man:sudo[8] で実行することが求められる場合があります。
man:dd[1] の書式は、プラットフォームによって少し変わります。
たとえば Mac OS(R) では、小文字の `bs=1m` を使う必要があります。
Linux(R) のようなシステムでは、書き込みをバッファします。
すべての書き込みを完了させるには、man:sync[8] を使用してください。
+====
[.procedure]
-.Procedure: Windows(R) を使ってイメージを書き込む
-[WARNING]
====
+*Procedure. Windows(R) を使ってイメージを書き込む* +
+
+[WARNING]
+======
適切なドライブレターを出力先に設定していることを十分に確認してください。 さもなければ、現在あるデータは上書きされ、 破壊されてしまうでしょう。
-====
-. Image Writer for Windows(R) を入手する
+======
+
+. *Image Writer for Windows(R) を入手する*
+
-Image Writer for Windows(R) は、 イメージファイルをメモリスティックに正しく書き込むことのできるフリーのアプリケーションです。 link:https://sourceforge.net/projects/win32diskimager/[https://sourceforge.net/projects/win32diskimager/] からダウンロードして、フォルダに展開してください。
+Image Writer for Windows(R) は、 イメージファイルをメモリスティックに正しく書き込むことのできるフリーのアプリケーションです。
+link:https://sourceforge.net/projects/win32diskimager/[win32diskimager ホームページ] からダウンロードして、フォルダに展開してください。
+
. イメージライタを使ってイメージを書き込む
+
Win32DiskImager アイコンをダブルクリックして、プログラムを起動してください。 `Device` の下に表示されるデバイスレターが、 メモリスティックのドライブであることを確認してください。 フォルダのアイコンをクリックして、 メモリスティックに書き込むイメージファイルを選択します。 btn:[Save] をクリックして、 イメージファイルの名前を確定してください。 すべてが正しく行われたかどうか、また、 他のウィンドウでメモリスティックのフォルダが開かれていないことを確認してください。 準備ができたら、btn:[Write] をクリックして、 メモリスティックにイメージファイルを書き込んでください。
-
-これで FreeBSD をインストールする用意ができました。
+====
[[bsdinstall-start]]
== インストールの開始
@@ -247,29 +262,10 @@ commit your changes?
この警告の前であれば、いつでもインストールを中断できます。 もし、何かを間違って設定してしまったことが心配ならば、 最後の警告の前に単にコンピュータをオフにしてください。 システムのハードディスクを変更せずに済みます。
====
-この章では、<<bsdinstall-installation-media>> で説明されている手順によって準備されたインストールメディアから、 システムを起動する方法について説明します。 起動可能な USB スティックを使用する場合には、 コンピュータを立ち上げる前に、 USB スティックを挿入してください。 CD もしくは DVD から起動する場合には、 コンピュータを立ち上げ、 すぐにメディアを挿入してください。 挿入したメディアからシステムを起動するように設定する方法は、 アーキテクチャによって異なります。
-
-[[bsdinstall-starting-i386]]
-=== i386(TM) および amd64 での起動
-
-これらのアーキテクチャでは、 BIOS メニューが用意されており、 ブートデバイスを選択できます。 利用するインストールメディアに合わせて、 最初のブートデバイスに、 CD/DVD または USB を選択してください。 ほとんどのシステムでは、BIOS に入らずとも、起動時に特定のキーを押すことで、 起動するデバイスを選択できます。 通常、このキーは、 kbd:[F10], kbd:[F11], kbd:[F12] または kbd:[Escape] のどれかです。
-
-もし、コンピュータが FreeBSD のインストーラではなく、 すでに存在しているオペレーティングシステムで起動してしまったのであれば、 以下の原因が考えられます。
-
-. インストールメディアが起動プロセスにおいて十分早いタイミングで挿入されていません。 メディアをそのままにしてコンピュータを再起動してください。
-. BIOS の変更が適切に行われていなかったり、 変更が保存されていません。 最初のブートデバイスに正しいブートデバイスが設定されていることを確認してください。
-. システムが古く、 希望しているメディアからの起動に対応していません。 この場合には、Plop Boot Manager (link:http://www.plop.at/en/bootmanagers.html[]) を使うと、選択したメディアからシステムを起動できます。
-
-=== PowerPC(R) での起動
-
-ほとんどのコンピュータでは、 起動中にキーボードの kbd:[C] を押しておくと、CD から起動します。 別の方法では kbd:[Command+Option+O+F]、 または non-Apple(R) キーボードでは kbd:[Windows+Alt+O+F] を押してください。`0 >` プロンプトで
-
-[source,shell]
-....
- boot cd:,\ppc\loader cd:0
-....
-
-と入力してください。
+この章では、<<bsdinstall-installation-media>> で説明されている手順によって準備されたインストールメディアから、システムを起動する方法について説明します。
+起動可能な USB スティックを使用する場合には、コンピュータを立ち上げる前に、USB スティックを挿入してください。
+CD もしくは DVD から起動する場合には、コンピュータを立ち上げ、すぐにメディアを挿入してください。
+挿入したメディアからシステムを起動するように設定する方法は、アーキテクチャ毎に異なります。
[[bsdinstall-view-probe]]
=== FreeBSD ブートメニュー
@@ -278,20 +274,21 @@ commit your changes?
[[bsdinstall-newboot-loader-menu]]
.FreeBSD ブートローダメニュー
-image::bsdinstall-newboot-loader-menu.png[]
+image::bsdinstall-newboot-loader-menu.png[FreeBSD ブートローダメニュー]
デフォルトでは、メニューは、FreeBSD インストーラが起動するまで (FreeBSD がインストールされているシステムでは、FreeBSD が起動するまで)、 ユーザからの入力を 10 秒間受け付けます。 タイマーを停止してオプションを確認には、 kbd:[Space] を押してください。オプションを選択するには、 ハイライトされている番号、文字、もしくはキーを押してください。 以下のオプションが利用可能です。
* `Boot Multi User`: FreeBSD の起動プロセスを続けます。 ブートタイマが停止しているのであれば kbd:[1]、 大文字もしくは小文字の kbd:[B] または、 kbd:[Enter] を押してください。
-* `Boot Single User`: このモードは、 すでにインストールされている FreeBSD を修復するために利用できます。  シングルユーザモードについては、 crossref:boot[boot-singleuser,「シングルユーザモード」] で説明されています。 kbd:[2] もしくは、小文字もしくは、大文字の kbd:[S] を押すとこのモードに入ることができます。
+* `Boot Single User`: このモードは、すでにインストールされている FreeBSD を修復するために利用できます。 シングルユーザモードについては、 crossref:boot[boot-singleuser,「シングルユーザモード」] で説明されています。 kbd:[2] もしくは、小文字もしくは、大文字の kbd:[S] を押すとこのモードに入ることができます。
* `Escape to loader prompt`: 制限された低レベルのコマンドのみが利用可能な修復用プロンプトでシステムを起動します。 このプロンプトについては、 crossref:boot[boot-loader,「起動ステージ 3」] で説明されています。 kbd:[3] または kbd:[Esc] を押すとこのプロンプトで起動します。
* `Reboot`: システムを再起動します。
+* `Cons`: `video`, `serial`, `Dual (serial primary)` または `Dual (Video primary)` でインストールを続けます。
* `Kernel`: 別のカーネルを読み込みます。
-* `Configure Boot Options`: <<bsdinstall-boot-options-menu>> で示されるメニューを開きます。
+* `Boot Options`: <<bsdinstall-boot-options-menu>> で示されるメニューを開きます。
[[bsdinstall-boot-options-menu]]
.FreeBSD ブートオプションメニュー
-image::bsdinstall-boot-options-menu.png[]
+image::bsdinstall-boot-options-menu.png[サポートされているブートオプションのメニュー]
この起動オプションメニューは、 2 つのセクションから構成されています。 最初のセクションは、メインのブートメニューに戻ったり、 オプションをデフォルト値に戻すために利用できます。
@@ -306,9 +303,14 @@ image::bsdinstall-boot-options-menu.png[]
[[bsdinstall-choose-mode]]
.ウェルカムメニュー
-image::bsdinstall-choose-mode.png[]
+image::bsdinstall-choose-mode.png[FreeBSD インストーラのウェルカムメニュー]
-kbd:[Enter] を押して、デフォルトの btn:[Install] を選択すると、インストール作業が始まります。 この章の残りの部分では、このインストーラの使い方について説明します。 メニュー項目を選択する他の方法としては、 左右の矢印キーを使ったり、色が変わっている文字を使ってください。 btn:[Shell] を選択すると、 インストールの前に、FreeBSD シェルからコマンドラインユーティリティでディスクを準備できます。 btn:[Live CD] オプションを選択すると、 インストール前に FreeBSD を試すことができます。 live 版については、<<using-live-cd>> で説明されています。
+kbd:[Enter] を押して、デフォルトの btn:[Install] を選択すると、インストール作業が始まります。
+この章の残りの部分では、このインストーラの使い方について説明します。
+メニュー項目を選択するには、左右の矢印キーを使ったり、色付けされた文字を使ってください。
+btn:[Shell] を選択すると、インストールの前に、FreeBSD シェルからコマンドラインユーティリティでディスクを準備できます。
+btn:[Live CD] オプションを選択すると、 インストール前に FreeBSD を試すことができます。
+live 版については、<<using-live-cd>> で説明されています。
[TIP]
====
@@ -327,13 +329,15 @@ kbd:[Enter] を押して、デフォルトの btn:[Install] を選択すると
[[bsdinstall-keymap-loading]]
.キーマップの読み込み
-image::bsdinstall-keymap-loading.png[]
+image::bsdinstall-keymap-loading.png[キーマップの読み込み]
-キーマップが読み込まれると、 bsdinstall は <<bsdinstall-keymap-10>> を表示します。 上下の矢印キーを使って、 システムのキーボードに最も近いキーマップを選択してください。 選択を保存するには、kbd:[Enter] キーを押してください。
+キーマップが読み込まれると、bsdinstall は <<bsdinstall-keymap-10>> を表示します。
+上下の矢印キーを使って、システムのキーボードに最も近いキーマップを選択してください。
+選択を保存するには、kbd:[Enter] キーを押してください。
[[bsdinstall-keymap-10]]
.キーマップ選択メニュー
-image::bsdinstall-keymap-10.png[]
+image::bsdinstall-keymap-10.png[キーマップ選択メニュー。対応しているすべてのキーボードが表示されます。]
[NOTE]
====
@@ -344,7 +348,7 @@ kbd:[Esc] を押すと、メニューは終了し、 デフォルトのキーボ
[[bsdinstall-keymap-testing]]
.キーマップテストメニュー
-image::bsdinstall-keymap-testing.png[]
+image::bsdinstall-keymap-testing.png[キーマップテストメニュー]
[[bsdinstall-hostname]]
=== ホスト名の設定
@@ -353,7 +357,7 @@ image::bsdinstall-keymap-testing.png[]
[[bsdinstall-config-hostname]]
.ホスト名の設定
-image::bsdinstall-config-hostname.png[]
+image::bsdinstall-config-hostname.png[ホスト名の設定]
ネットワーク上でユニークなホスト名を入力してください。 入力するホスト名は、`machine3.example.com` のように完全修飾のホスト名で入力してください。
@@ -364,7 +368,7 @@ image::bsdinstall-config-hostname.png[]
[[bsdinstall-config-components]]
.インストールするコンポーネントの設定
-image::bsdinstall-config-components.png[]
+image::bsdinstall-config-components.png[base-dbg, lib32, ports などのインストールするコンポーネントの設定]
どのコンポーネントをインストールするかは、 システムの用途と用意されているディスク容量に依存します。 _base system_ として知られている FreeBSD カーネルとユーザランドは、 常にインストールされます。 アーキテクチャによっては、表示されないコンポーネントもあります。
@@ -376,7 +380,8 @@ image::bsdinstall-config-components.png[]
+
[WARNING]
====
-インストールプログラムは、 システムのディスクに十分な空き容量があるかどうかを確認しないので、 ハードディスクに十分な容量があるときだけ、 このオプションを選択するしてください。 FreeBSD 9.0 では、Ports Collection が必要とする容量は、 約 {ports.size} です。
+インストールプログラムは、システムのディスクに十分な空き容量があるかどうかを確認しないので、ハードディスクに十分な容量があるときだけ、このオプションを選択するしてください。
+FreeBSD Ports Collection が必要とする容量は、約 {ports-size} です。
====
* `src` - FreeBSD のカーネルおよびユーザランド両方の完全なソースコードです。 ほとんどのアプリケーションは必要としませんが、 デバイスドライバやカーネルモジュール、 Ports Collection のアプリケーションによってはコンパイル時に必要となります。 このソースは、FreeBSD そのものの開発に使うこともできます。 すべてのソースツリーをインストールするには 1 GB のディスク容量を必要とします。 また、FreeBSD システム全体のコンパイルには、 さらに 5 GB の容量が必要です。
@@ -385,11 +390,14 @@ image::bsdinstall-config-components.png[]
[[bsdinstall-netinstall]]
=== ネットワークからのインストール
-<<bsdinstall-netinstall-notify>> で示されているメニューは、 [.filename]#-bootonly.iso# または [.filename]#-mini-memstick.img# からインストールする時のみ表示されます。この インストールメディアは、インストールファイルを含んでいません。 このメニューは、 ネットワーク経由でインストールファイルをダウンロードする必要があるため、 ネットワークインタフェースを最初に設定する必要があることを示しています。 このメニューがインストールのプロセスで表示された場合には、 <<bsdinstall-config-network-dev>> に書かれている手順に従ってください。
+<<bsdinstall-netinstall-notify>> で示されているメニューは、`-bootonly.iso` または `-mini-memstick.img` からインストールする時のみ表示されます。
+これらのインストールメディアはインストールファイルを含んでいません。
+このメニューは、 ネットワーク経由でインストールファイルをダウンロードする必要があるため、ネットワークインタフェースを最初に設定する必要があることを示しています。
+このメニューがインストールのプロセスで表示された場合には、 <<bsdinstall-config-network-dev>> に書かれている手順に従ってください。
[[bsdinstall-netinstall-notify]]
.ネットワークからのインストール
-image::bsdinstall-netinstall-files.png[]
+image::bsdinstall-netinstall-files.png[インストールするコンポーネントが見つからないため、ネットワークからダウンロードを試みることを示しています。]
[[bsdinstall-partitioning]]
== ディスク領域の割り当て
@@ -398,38 +406,62 @@ image::bsdinstall-netinstall-files.png[]
[[bsdinstall-zfs-partmenu]]
.パーティション分割の選択
-image::bsdinstall-zfs-partmenu.png[]
+image::bsdinstall-zfs-partmenu.png[パーティションのオプションを示しています。例: マニュアル、シェルなど]
bsdinstall では、ディスク領域の割り当てのために 4 つの方法が用意されています。
+* `Auto (ZFS)` によるパーティションの分割では、root-on-ZFS システムを構築します。GELI 暗号に対応した _ブート環境_ を構築することもできます。
* `Auto (UFS)` によるパーティションの分割では、 `UFS` ファイルシステムを使ってディスクパーティションを自動的に分割します。
* `Manual` によるパーティションの分割は、 高度な知識を持つユーザ向けで、 メニューオプションからカスタマイズしたパーティションを作成できます。
* `Shell` では、シェルプロンプトを起動し、 高度な知識を持つユーザが、 man:gpart[8], man:fdisk[8], man:bsdlabel[8] のようなコマンドラインのプログラムを実行して、 カスタマイズしたパーティションを作成できます。
-* `Auto (ZFS)` によるパーティションの分割では、 root-on-ZFS システムを構築します。 GELI 暗号に対応した _ブート環境_ を構築することもできます。
この章では、 ディスクパーティションをレイアウトする際の検討事項を説明します。 その後、各パーティションの作成方法について説明します。
[[configtuning-initial]]
=== パーティションレイアウトのデザイン
-ファイルシステムのレイアウトを行う際には、 ハードディスクの外周部は内周部よりもデータ転送が速いということを思い出してください。 これに従えば、 小さくて激しくアクセスされるファイルシステムを外周付近に、 [.filename]#/usr# のようなより大きなパーティションはディスクの内側に配置すべきでしょう。 そのため、パーティションを作成する際には、[.filename]#/#、 スワップ、[.filename]#/var#, [.filename]#/usr# のような順で作ってゆくのがよいでしょう。
+デフォルトのファイルシステムのパーティションレイアウトは、システム全体をひとつのファイルシステムで構成します。
+十分なディスク容量または複数のディスクを用いる環境において `UFS` を用いる場合は、複数のファイルシステムを検討する価値があります。
+ファイルシステムのレイアウトを行う際には、 ハードディスクの外周部は内周部よりもデータ転送が速いということを思い出してください。
+これに従えば、 小さくて激しくアクセスされるファイルシステムを外周付近に、`/usr` のようなより大きなパーティションはディスクの内側に配置すべきでしょう。
+そのため、パーティションを作成する際には、`/`、 スワップ、`/var`, `/usr` のような順で作ってゆくのがよいでしょう。
-[.filename]#/var# パーティションのサイズは、 あなたが計算機をどのように使おうとしているかを反映します。 このパーティションには主としてメールボックスやログファイル、 プリンタスプールが置かれます。 メールボックスとログファイルは、 システムのユーザ数やログの保持期間に依存して予期し得ぬサイズにまで成長する可能性があります。 概して、ほとんどのユーザは、[.filename]#/var# にギガバイト以上の空き容量を必要とはしないでしょう。
+`/var` パーティションのサイズは、あなたが計算機をどのように使おうとしているかを反映します。
+このパーティションには主としてメールボックスやログファイル、 プリンタスプールが置かれます。
+メールボックスとログファイルは、 システムのユーザ数やログの保持期間に依存して予期し得ぬサイズにまで成長する可能性があります。
+概して、ほとんどのユーザは、`/var` にギガバイト以上の空き容量を必要とはしないでしょう。
[NOTE]
====
-時には、たくさんのディスク容量が [.filename]#/var/tmp# に必要になるときがあります。 新しいソフトウェアをインストールする際、 package のツールは、package の一時的なコピーを [.filename]#/var/tmp# 以下に展開します。 [.filename]#/var/tmp# 以下に十分なディスク容量が用意されていないと、 Firefox や LibreOffice のような、 大きなソフトウェア package のインストールが、 困難になることがあります。
+時には、たくさんのディスク容量が `/var/tmp` に必要になるときがあります。
+新しいソフトウェアをインストールする際、package のツールは、package の一時的なコピーを `/var/tmp` 以下に展開します。
+`/var/tmp` 以下に十分なディスク容量が用意されていないと、Firefox や LibreOffice のような、大きなソフトウェア package のインストールが、困難になることがあります。
====
-[.filename]#/usr# パーティションには、 FreeBSD Ports Collection およびシステムのソースコードを含む、 システムをサポートするのに必要な多くのファイル群が置かれます。 このパーティションには、 少なくとも 2 ギガバイトの容量を用意することをおすすめします。
+`/usr` パーティションには、FreeBSD Ports Collection およびシステムのソースコードを含む、システムをサポートするのに必要な多くのファイル群が置かれます。
+このパーティションには、少なくとも 2 ギガバイトの容量を用意することをおすすめします。
+また、デフォルトではユーザのホームディレクトリは `/usr/home` に置かれますが、他のパーティションに置くこともできます。
+デフォルトでは、`/home` は `/usr/home` へのシンボリックリンクです。
パーティションのサイズを考える時、 必要量を念頭に置いてください。 別のパーティションには潤沢にスペースが余っているのに、 あるパーティションでスペースが足らないままというのは、 フラストレーションがたまるものです。
-経験からスワップパーティションのサイズは物理メモリ (RAM) の 2 倍というのが一般的です。 RAM の少ないシステムでは、 もっとスワップを増した方が性能がよくなります。 スワップが少なすぎる設定は、 あなたが後にメモリを増設したときに問題を起すばかりではなく、 VM ページスキャニングコードの能率を落します。
+経験からスワップパーティションのサイズは物理メモリ (RAM) の 2 倍というのが一般的です。
+RAM の少ないシステムでは、もっとスワップを増した方が性能がよくなります (大きなメモリの設定では少なくて済みます)。
+スワップが少なすぎる設定は、あなたが後にメモリを増設したときに問題を起すばかりではなく、VM ページスキャニングコードの能率を落します。
-複数の SCSI ディスクや異なるコントローラで操作される複数の IDE ディスクを持つ大規模なシステムでは、 それぞれのドライブ (4 台まで) にスワップを設定することを推奨します。 各ドライブのスワップパーティションはほぼ同一サイズであるべきです。 カーネルは任意のサイズを扱うことができますが、 内部のデータ構造は最大のスワップパーティションの 4 倍に調節されます。 スワップパーティションをほぼ同一のサイズにしておくことで、 カーネルはスワップスペースを最適なかたちでディスクをまたいでストライプさせることができます。 あなたが通常スワップをたくさん使わないとしても、 多くのスワップサイズを用意しておくと良いでしょう。 プログラムが暴走しても再起動させられる前に回復することが容易になります。
+複数の SCSI ディスクや異なるコントローラで操作される複数の IDE ディスクを持つ大規模なシステムでは、それぞれのドライブ (4 台まで) にスワップを設定することを推奨します。
+各ドライブのスワップパーティションはほぼ同一サイズであるべきです。
+カーネルは任意のサイズを扱うことができますが、内部のデータ構造は最大のスワップパーティションの 4 倍に調節されます。
+スワップパーティションをほぼ同一のサイズにしておくことで、カーネルはスワップスペースを最適なかたちでディスクをまたいでストライプさせることができます。
+多くのスワップサイズを用意すると、全体のスワップに関するカーネルの警告メッセージがが表示されることがあります。
+警告メッセージに示される手順に従って、スワップの割り当てのために許容されるメモリ量を増やすことで、この制限容量を増やすことができます。
-システムを適切にパーティション化することで、 小さいが書き込みの激しいパーティションによって引き起こされるフラグメント化を、 読み出し専門のパーティションにまで波及させずにすみます。 また、書き込みの激しいパーティションをディスクの周辺部に配置することで、 I/O パフォーマンスを増大させることができます。 大きなパーティション内の I/O パフォーマンスもまた必要とされているでしょうが、 ディスク周辺部へ移動させたとしても、 [.filename]#/var# を周辺部に移動させることによって大きな効果が得られたのとは対照的に、 意味のあるパフォーマンスの増加は見込めないでしょう。
+あなたが通常スワップをたくさん使わないとしても、
+プログラムが暴走しても再起動させられる前に回復することが容易になります。
+
+システムを適切にパーティション化することで、小さいが書き込みの激しいパーティションによって引き起こされるフラグメント化を、読み出し専門のパーティションにまで波及させずにすみます。
+また、書き込みの激しいパーティションをディスクの周辺部に配置することで、I/O パフォーマンスを増大させることができます。
+大きなパーティション内の I/O パフォーマンスもまた必要とされているでしょうが、ディスク周辺部へ移動させたとしても、`/var` を周辺部に移動させることによって大きな効果が得られたのとは対照的に、意味のあるパフォーマンスの増加は見込めないでしょう。
[[bsdinstall-part-guided]]
=== UFS を用いた Guided によるパーティションの分割
@@ -438,37 +470,48 @@ bsdinstall では、ディスク領域の割り当てのために 4 つの方法
[[bsdinstall-part-guided-disk]]
.複数のディスクから選択する
-image::bsdinstall-part-guided-disk.png[]
+image::bsdinstall-part-guided-disk.png[FreeBSD をインストールすることのできるディスクの一覧が表示されます]
ディスクを選択したら、次のメニューでは、 ディスクのすべてにインストールを行うか、 または空き容量にパーティションを作成してインストールを行うかを設定します。 btn:[Entire Disk] を選択すると、 一般的なパーティションレイアウトが自動的に作成されます。 btn:[Partition] を選択すると、 ディスクの使用していない領域にパーティションレイアウトを作成します。
[[bsdinstall-part-entire-part]]
.Entire Disk または Partition の選択
-image::bsdinstall-part-entire-part.png[]
+image::bsdinstall-part-entire-part.png[使用するディスク上で利用可能な領域をすべて使うか、もしくはパーティションを作成するかを選択するメニュー]
-btn:[Entire Disk] を選択すると、 bsdinstall は、 ディスクの内容が消去されることを確認するダイアログを表示します。
+btn:[Entire Disk] オプションを選択すると、bsdinstall はディスクの内容が消去されることを確認するダイアログを表示します。
[[bsdinstall-ufs-warning]]
.確認
-image::bsdinstall-ufs-warning.png[]
+image::bsdinstall-ufs-warning.png[ユーザに対しディスク上のすべてのデータが消去されることの確認メニュー]
-次のメニューでは、 パーティションスキームタイプの一覧が表示されます。 amd64 コンピュータでは、通常 GPT が最も適切な選択となります。 GPT に対応していないような古いコンピュータでは、 MBR を使う必要があります。 他のパーティションスキームは、使うことがまれであったり、 古いコンピュータで用いられるものです。 <<partition-schemes>> に詳細があります。
+次のメニューでは、 利用可能なパーティションスキームタイプの一覧が表示されます。
+amd64 コンピュータでは、通常 GPT が最も適切な選択となります。
+GPT に対応していないような古いコンピュータでは、MBR を使う必要があります。
+他のパーティションスキームは、使うことがまれであったり、古いコンピュータで用いられるものです。
+<<partition-schemes>> に詳細があります。
[[bsdinstall-ufs-scheme]]
.パーティションスキームの選択
-image::bsdinstall-part-manual-partscheme.png[]
+image::bsdinstall-part-manual-partscheme.png[ユーザに対して選択可能なさまざまなパーティションタイプを示し、そのうちのどれかを選択するためのメニュー]
-パーティションのレイアウトを作成したら、 インストールの条件を満たしているかどうかを深く確認してください。 btn:[Revert] を選択すると、 パーティションをオリジナルの値にリセットします。 また、btn:[Auto] を選択すると、 FreeBSD パーティションを自動的に作成します。 パーティションを手動で作成、変更、削除することもできます。 正しくパーティションを作成出来たら、 btn:[Finish] を選択し、 インストールを進めてください。
+パーティションのレイアウトを作成したら、インストールの条件を満たしているかどうかを深く確認してください。
+btn:[Revert] を選択すると、パーティションをオリジナルの値にリセットします。
+また、btn:[Auto] を選択すると、FreeBSD パーティションを自動的に作成します。
+パーティションを手動で作成、変更、削除することもできます。
+正しくパーティションを作成出来たら、 btn:[Finish] を選択し、インストールを進めてください。
[[bsdinstall-part-review]]
.作成されたパーティションの確認
-image::bsdinstall-part-review.png[]
+image::bsdinstall-part-review.png[作成されたパーティションを表示するメニュー]
-ディスクを一度設定すると、次のメニューは、 選択したハードドライブをフォーマットする前に、 設定を変更する最後のチャンスです。 もし変更が必要であれば、 btn:[Back] を選択してメインのパーティションエディタまで戻ってください。 btn:[Revert & Exit] を選択すると、 ハードドライブへの変更なしにインストールを終了します。 インストールプロセスを開始するのには、 btn:[Commit] を選択してしてください。
+ディスクを一度設定すると、次のメニューは、選択したハードドライブをフォーマットする前に、設定を変更できる最後のチャンスです。
+もし変更が必要であれば、 btn:[Back] を選択してメインのパーティションエディタまで戻ってください。
+btn:[Revert & Exit] を選択すると、ハードドライブへの変更なしにインストールを終了します。
+インストールプロセスを開始するには、 btn:[Commit] を選択してしてください。
[[bsdinstall-ufs-final-confirmation]]
.最後の確認
-image::bsdinstall-final-confirmation.png[]
+image::bsdinstall-final-confirmation.png[ユーザに対してインストールを開始すると、すべての変更がディスクに書き込まれ、ディスクに存在するデータは完全に削除されることを確認するメニュー]
<<bsdinstall-fetching-distribution>> に進んで、インストールプロセスを続けてください。
@@ -479,19 +522,19 @@ image::bsdinstall-final-confirmation.png[]
[[bsdinstall-part-manual-create]]
.Manual によるパーティションの分割
-image::bsdinstall-part-manual-create.png[]
+image::bsdinstall-part-manual-create.png[パーティションエディタを表示しているメニュー]
-インストール先のドライブ (この例では [.filename]#ada0#) を選び、 btn:[Create] を選択すると、 利用可能なパーティションスキームの一覧が表示されます。
+インストール先のドライブ (この例では `ada0`) を選び、 btn:[Create] を選択すると、 利用可能なパーティションスキームの一覧が表示されます。
[[bsdinstall-part-manual-partscheme]]
.手動でパーティションを作成する
-image::bsdinstall-part-manual-partscheme.png[]
+image::bsdinstall-part-manual-partscheme.png[選択可能なパーティションスキームを表示しているメニュー]
amd64 コンピュータでは、通常 GPT が最も適切な選択となります。 GPT に対応していないような古いコンピュータでは、 MBR を使う必要があります。 他のパーティションスキームは、使うことがまれであったり、 古いコンピュータで用いられるものです。
[[partition-schemes]]
.パーティションスキーム
-[cols="1,1", frame="none", options="header"]
+[cols="25h,~", frame="none", options="header"]
|===
<| 省略形
<| 説明
@@ -503,28 +546,36 @@ amd64 コンピュータでは、通常 GPT が最も適切な選択となりま
|MBR を用いない BSD ラベル。 BSD 以外のディスクユーティリティは認識しないため、しばしば _dangerously dedicated mode_ と呼ばれます。
|GPT
-|GUID Partition Table (link:http://en.wikipedia.org/wiki/GUID_Partition_Table[http://en.wikipedia.org/wiki/GUID_Partition_Table])
+|link:https://en.wikipedia.org/wiki/GUID_Partition_Table[GUID Partition Table]
|MBR
-|Master Boot Record (link:http://en.wikipedia.org/wiki/Master_boot_record[http://en.wikipedia.org/wiki/Master_boot_record])
+|link:https://en.wikipedia.org/wiki/Master_boot_record[Master Boot Record]
|===
パーティションスキームを選択して作成した後で、 もう一度 btn:[Create] を選択すると、 パーティションが作成されます。kbd:[Tab] キーを使ってカーソルをフィールド間で移動できます。
[[bsdinstall-part-manual-addpart]]
.手動でパーティションを作成する
-image::bsdinstall-part-manual-addpart.png[]
+image::bsdinstall-part-manual-addpart.png[追加するパーティションのタイプ、サイズ、マウントポイントおよびラベル情報を入力するためのメニュー]
-標準の FreeBSD GPT のインストールでは、 少なくとも 3 つのパーティションが使われます。
+標準の FreeBSD GPT のインストールでは、UFS または ZFS を含む少なくとも 3 つのパーティションが使われます。
-* `freebsd-boot` - FreeBSD ブートコードを含んでいます。
+* `freebsd-boot` または `efi` - FreeBSD ブートコードを含んでいます。
* `freebsd-ufs` - FreeBSD UFS ファイルシステム。
-* `freebsd-zfs` - FreeBSD ZFS ファイルシステム。 詳細については、 (crossref:zfs[filesystems-zfs,The Z File System (ZFS)]) をご覧ください。
+* `freebsd-zfs` - FreeBSD ZFS ファイルシステム。 詳細については、 link:https://docs.freebsd.org/en/books/handbook/zfs/#zfs[The Z File System (ZFS)] をご覧ください。
* `freebsd-swap` - FreeBSD スワップ空間。
利用可能な GPT パーティションタイプについては、man:gpart[8] をご覧ください。
-複数のファイルシステムのパーティションを作成できます。 [.filename]#/#, [.filename]#/var#, [.filename]#/tmp# そして [.filename]#/usr# といった伝統的なパーティション分割のレイアウトを好む人もいます。 レイアウトの例が <<bsdinstall-part-manual-splitfs>> にあります。
+複数のファイルシステムのパーティションを作成できます。
+人によっては `/`, `/var`, `/tmp` および `/usr` にパーティションを分割する伝統的なレイアウトが好まれます。
+
+[TIP]
+====
+十分なメモリを搭載したシステムでは、メモリベースのファイルシステム (man:tmpfs[5]) を `/tmp` として後で追加できます。
+====
+
+レイアウトの例が <<bsdinstall-part-manual-splitfs>> にあります。
`Size` には、 _K_ (キロバイト)、 _M_ (メガバイト)、 _G_ (ギガバイト) といった通常の省略形を使用出来ます。
@@ -533,9 +584,14 @@ image::bsdinstall-part-manual-addpart.png[]
セクタを適切に配置することで、 最良のパフォーマンスを得ることができます。 また、パーティションサイズを 4K バイトの偶数倍にすると、 512 バイトまたは 4K バイトのセクタでドライブが配置しやすくなります。 一般的に、 4K の偶数倍の場所からパーティションが開始するように設定する簡単な方法は、 1M または 1G の偶数倍のパーティションサイズを用いることです。 ただし、例外があります。 _freebsd-boot_ パーティションは、 ブートコードの制限により 512K 以下である必要があります。
====
-ファイルシステムを持つパーティションでは、 `Mountpoint` が必要となります。 1 つの UFS パーティションだけを作成したのであれば、 マウントポイントは [.filename]#/# となります。
+ファイルシステムを持つパーティションでは、`マウントポイント` が必要となります。
+1 つの UFS パーティションだけを作成したのであれば、マウントポイントは `/` となります。
-`Label` は作成したパーティションを認識するための名前です。 ドライブ名や番号は、 ドライブが別のコントローラやポートに接続されると変わることがありますが、 パーティションラベルは変わりません。 [.filename]#/etc/fstab# のようなファイルの中で、 ドライブ名やパーティション番号ではなく、ラベルを参照することにより、 システムがハードウェアの変更に対して、より寛容になります。 GPT ラベルは、 ディスクが接続されると [.filename]#/dev/gpt/# に現れます。他のパーティションスキームでは別のラベルとなり、 [.filename]#/dev/# 以下の異なるディレクトリにラベルが現れます。
+`Label` は作成したパーティションを認識するための名前です。
+ドライブ名や番号は、ドライブが別のコントローラやポートに接続されると変わることがありますが、パーティションラベルは変わりません。
+`/etc/fstab` のようなファイルの中で、ドライブ名やパーティション番号ではなく、ラベルを参照することにより、システムがハードウェアの変更に対して、より寛容になります。
+GPT ラベルは、ディスクが接続されると `/dev/gpt/` に現れます。
+他のパーティションスキームでは別のラベルとなり、`/dev/` 以下の異なるディレクトリにラベルが現れます。
[TIP]
====
@@ -543,12 +599,15 @@ image::bsdinstall-part-manual-addpart.png[]
====
[[bsdinstall-part-manual-splitfs]]
-.伝統的なファイルシステムのパーティションを作成する。
+.伝統的なファイルシステムのパーティションの作成
[example]
====
-伝統的なパーティションレイアウト ([.filename]#/#, [.filename]#/var#, [.filename]#/tmp# および [.filename]#/usr# ディレクトリが各パーティションの別のファイルシステム) を作成するには、 GPT パーティションスキームを作成し、 その後、示されているようにパーティションを作成してください。 示されているパーティションサイズは 20G のディスク用です。 ディスクにより多くの容量があれば、swap または [.filename]#/var# パーティションを大きく取ると良いでしょう。 ここで示されているラベルには、 `example` を意味する `ex` が付けられていますが、 実際には上で説明したように、 これとは別のユニークなラベルをつけてください。
+伝統的なパーティションレイアウト (`/`, `/var`, `/tmp` および `/usr` ディレクトリが各パーティションの別のファイルシステム) を作成するには、GPT パーティションスキームを作成し、その後、示されているようにパーティションを作成してください。
+示されているパーティションサイズは 20G のディスク用です。
+ディスクにより多くの容量があれば、swap または `/var` パーティションを大きく取ると良いでしょう。
+ここで示されているラベルには、`example` を意味する `ex` が付けられていますが、実際には上で説明したように、これとは別のユニークなラベルをつけてください。
-FreeBSD の [.filename]#gptboot# は、 デフォルトでは最初に見つかった UFS パーティションが、 [.filename]#/# パーティションであることを前提としています。
+FreeBSD の `gptboot` は、 デフォルトでは最初に見つかった UFS パーティションが、 `/` パーティションであることを前提としています。
[.informaltable]
[cols="1,1,1,1", frame="none", options="header"]
@@ -566,7 +625,7 @@ FreeBSD の [.filename]#gptboot# は、 デフォルトでは最初に見つか
|`freebsd-ufs`
|`2G`
-|[.filename]#/#
+|`/`
|`exrootfs`
|`freebsd-swap`
@@ -576,17 +635,17 @@ FreeBSD の [.filename]#gptboot# は、 デフォルトでは最初に見つか
|`freebsd-ufs`
|`2G`
-|[.filename]#/var#
+|`/var`
|`exvarfs`
|`freebsd-ufs`
|`1G`
-|[.filename]#/tmp#
+|`/tmp`
|`extmpfs`
|`freebsd-ufs`
|デフォルト (ディスクの残りのすべての容量)
-|[.filename]#/usr#
+|`/usr`
|`exusrfs`
|=====
====
@@ -600,27 +659,37 @@ FreeBSD の [.filename]#gptboot# は、 デフォルトでは最初に見つか
[[bsdinstall-zfs-menu]]
.ZFS パーティションメニュー
-image::bsdinstall-zfs-menu.png[]
+image::bsdinstall-zfs-menu.png[ZFS プールを設定するためのオプションを表示しているメニュー]
-このメニューで選択できるオプションは以下の通りです。
+このメニューのオプションは以下の通りです。
* `Install` - 選択したオプションでインストールを進めます。
-* `Pool Type/Disks` - プールを構成する `Pool Type` およびディスクについて設定します。 ZFS の自動インストーラは、 現時点で、ストライプモードを除き、 単一のトップレベルの仮想デバイスの作成のみに対応しています。 より複雑なプールを作成するには、 <<bsdinstall-part-shell>> で説明されている方法で作成してください。
+* `Pool Type/Disks` - プールを構成する `Pool Type` およびディスクについて設定します。
+現時点で ZFS の自動インストーラは、ストライプモードを除き、単一のトップレベルの仮想デバイスの作成のみに対応しています。
+より複雑なプールを作成するには、 <<bsdinstall-part-shell>> で説明されている方法で作成してください。
* `Rescan Devices` - 利用可能なディスクの一覧を再表示します。
-* `Disk Info` - Disk Info メニューを使って各ディスクを調べることができます。 パーティションテーブルやそれ以外のデバイスモデルナンバーおよびシリアルナンバーといった情報も、 可能であれば調べることができます。
+* `Disk Info` - このメニューを使って各ディスクを調べることができます。
+パーティションテーブルやそれ以外のデバイスモデルナンバーおよびシリアルナンバーといった情報も、可能であれば調べることができます。
* `Pool Name` - pool の名前を設定します。 デフォルトの名前は _zroot_ です。
* `Force 4K Sectors?` - 4K セクタを使用するようにします。 インストーラは、デフォルトで 4K の境界に整列するようにパーティションを自動的に作成し、 ZFS が 4K セクタを使用するようにします。 これは 512 バイトセクタのディスクでも安全で、 512 バイトのディスク上に作成されたプールが将来的に 4K セクタのディスクを追加できるようにしておくことには、 ストレージ容量の追加や壊れたディスクの交換時に恩恵があります。 有効にするか無効にするかを選択して kbd:[Enter] キーを押してください。
-* `Encrypt Disks?` - GELI を使ってディスクを暗号化できます。 ディスクの暗号化の詳細については、 crossref:disks[disks-encrypting-geli,geli によるディスクの暗号化] をご覧ください。 kbd:[Enter] キーを押して、 暗号化を有効にするか無効にするかを選択してください。
-* `Partition Scheme` - パーティションスキームを選択します。 ほとんどの場合において、GPT が推奨されます。 別のスキームを選択する場合には、 kbd:[Enter] キーを押してください。
+* `Encrypt Disks?` - GELI を使ってディスクを暗号化できます。ディスクの暗号化の詳細については、 link:https://docs.freebsd.org/en/books/handbook/disks/#disks-encrypting-geli[geli によるディスクの暗号化] をご覧ください。 kbd:[Enter] キーを押して、暗号化を有効にするか無効にするかを選択してください。
+* `Partition Scheme` - パーティションスキームを選択します。
+ほとんどの場合において、GPT が推奨されます。
+別のスキームを選択する場合には、 kbd:[Enter] キーを押してください。
* `Swap Size` - スワップ容量を設定します。
-* `Mirror Swap?` - スワップ領域をディスク間でミラー化します。 スワップ領域をミラー化すると、クラッシュダンプを取得できないので、 注意してください。 kbd:[Enter] キーを押して有効/無効を設定してください。
-* `Encrypt Swap?` - スワップ領域を暗号化します。 システムの起動時に一時キーをとともにスワップ領域を暗号化し、 再起動時にキーは破棄されます。 kbd:[Enter] キーを押して有効/無効を設定してください。 詳細については、 crossref:disks[disks-encrypting-geli,swap 領域の暗号化] を参照してください。
+* `Mirror Swap?` - スワップ領域をディスク間でミラー化するかどうかを設定します。
+スワップ領域をミラー化すると、クラッシュダンプを取得できないので注意してください。
+kbd:[Enter] キーを押して有効/無効を設定してください。
+* `Encrypt Swap?` - スワップ領域の暗号化について設定します。
+これはシステムの起動時に一時キーとともにスワップ領域を暗号化し、再起動時にキーは破棄されます。
+kbd:[Enter] キーを押して有効/無効を設定してください。
+詳細については、 link:https://docs.freebsd.org/en/books/handbook/disks/#swap-encrypting[swap 領域の暗号化] を参照してください。
kbd:[T] を選択して、`Pool Type` およびプールに対応するディスクを選択してください。
[[bsdinstall-zfs-vdev_type]]
.ZFS プールタイプ
-image::bsdinstall-zfs-vdev_type.png[]
+image::bsdinstall-zfs-vdev_type.png[stripe, mirror, raidz1 などの仮想デバイスタイプを選択するメニュー]
このメニューで選択可能な `Pool Type` は以下の通りです。
@@ -631,62 +700,70 @@ image::bsdinstall-zfs-vdev_type.png[]
* `raidz2` - ダブルパリティの RAID。 同時に 2 台のディスクの故障に耐えられます。 少なくとも 4 つのディスクが必要です。
* `raidz3` - トリプルパリティの RAID。 同時に 3 台のディスクの故障に耐えられます。 少なくとも 5 つのディスクが必要です。
-`Pool Type` を選択したら、 利用可能なディスクの一覧が表示されます。 その後、プールを構成するディスクを、1 つまたは複数選択してください。 十分なディスクが選択されているかどうかについて検証が行われます。 もし、問題があるようでしたら、btn:[<Change Selection>] を選択して、ディスクの一覧に戻ってください。 もしくは、 btn:[<Back>] を選択して、 `Pool Type` に戻ってください。
+`Pool Type` を選択したら、 利用可能なディスクの一覧が表示されます。 その後、プールを構成するディスクを、1 つまたは複数選択してください。
+十分なディスクが選択されているかどうかについて検証が行われます。
+検証に失敗するようであれば、btn:[<Change Selection>] を選択して、ディスクの一覧に戻ってください。
+もしくは、 btn:[<Back>] を選択して `Pool Type` に戻ってください。
[[bsdinstall-zfs-disk_select]]
.ディスクの選択
-image::bsdinstall-zfs-disk_select.png[]
+image::bsdinstall-zfs-disk_select.png[プールに追加するディスクを選択するメニュー]
[[bsdinstall-zfs-vdev_invalid]]
-.問題のある選択
-image::bsdinstall-zfs-vdev_invalid.png[]
+.無効な選択
+image::bsdinstall-zfs-vdev_invalid.png[十分なディスクが選択されていないことを示しているメニュー]
この一覧の中に抜けているディスクがある時や、 インストーラが立ち上がった後にディスクを接続した場合に、 最新の利用可能なディスクの一覧を見るには、 btn:[- Rescan Devices] を選択してください。
[[bsdinstall-zfs-rescan-devices]]
-.Rescan Devices
-image::bsdinstall-zfs-rescan-devices.png[]
+.デバイスのリスキャン
+image::bsdinstall-zfs-rescan-devices.png[デバイスのリスキャン]
アクシデントで間違ったディスクを削除してしまわないように、 btn:[- Disk Info] メニュー選択して、 各ディスクのパーティションテーブル、および、 デバイスモデル番号およびシリアル番号などのさまざまな情報を確認してください。
[[bsdinstall-zfs-disk_info]]
.ディスクの解析
-image::bsdinstall-zfs-disk_info.png[]
+image::bsdinstall-zfs-disk_info.png[パーティションの情報を表示しているメニュー]
kbd:[N] を選択して、 `Pool Name` を設定してください。 希望する名前を入力後、 btn:[<OK>] を選択して確定するか、 btn:[<Cancel>] を押して、 デフォルト名のままでメインメニューに戻ってください。
[[bsdinstall-zfs-pool-name]]
.Pool Name
-image::bsdinstall-zfs-pool-name.png[]
+image::bsdinstall-zfs-pool-name.png[プールの名前を入力するメニュー]
kbd:[S] を選択してスワップの容量を設定してください。 必要なスワップ容量を入力し、 btn:[<OK>] を押して確定するか、 もしくは btn:[<Cancel>] を押して、 デフォルトの容量のまま、メインメニューに戻ってください。
[[bsdinstall-zfs-swap-amount]]
.Swap 容量
-image::bsdinstall-zfs-swap-amount.png[]
+image::bsdinstall-zfs-swap-amount.png[スワップメモリの容量を入力するメニュー]
-すべてのオプションに希望する値を設定したら、 メニューの上部にある btn:[>>> Install] オプションを選択してください。 インストーラは、ZFS プールを作成するための最終確認を行います。 これは、選択したドライブの内容が壊れることをキャンセルする最後の確認の場です。
+すべてのオプションに希望する値を設定したら、メニューの上部にある btn:[>>> Install] オプションを選択してください。
+インストーラは、最終確認として ZFS プールを作成するために選択したドライブの内容が削除されることをキャンセルできる最後の機会を提供してくれます。
[[bsdinstall-zfs-warning]]
.最終確認
-image::bsdinstall-zfs-warning.png[]
+image::bsdinstall-zfs-warning.png[データが削除されることをユーザに確認するメニュー]
-GELI ディスク暗号化を有効にしていたら、 ディスクを暗号化するために用いるパスフレーズを 2 度求められます。その後、暗号の初期化が開始します。
+GELI ディスク暗号化を有効にしていたら、ディスクを暗号化するために用いるパスフレーズを 2 度求められます。
+その後、暗号の初期化が開始します。
[[bsdinstall-zfs-geli_password]]
.ディスク暗号化パスワード
-image::bsdinstall-zfs-geli_password.png[]
+image::bsdinstall-zfs-geli_password.png[デバイスを暗号化するためのパスワードを入力するメニュー]
[[bsdinstall-zfs-init-encription]]
.暗号の初期化
-image::bsdinstall-zfs-init-encription.png[]
+image::bsdinstall-zfs-init-encription.png[暗号の初期化が行われていることを示すメニュー]
その後のインストールの過程は、通常通りに進みます。 インストールを進めるには、 <<bsdinstall-fetching-distribution>> に進んでください。
[[bsdinstall-part-shell]]
=== シェルモードによるパーティションの作成
-高度なインストールを行うには、bsdinstall が提供するパーティション分割のメニューは柔軟性にかけることがあります。 高度な技術を持つユーザは、パーティションメニューで btn:[Shell] オプションを選択することで、 手動でドライブを分割して、ファイルシステムを作成し、 [.filename]#/tmp/bsdinstall_etc/fstab# を作成し、 [.filename]#/mnt# 以下にファイルシステムをマウントできます。 以上を実行したら、 `exit` を実行して bsdinstall に戻り、 インストールを続けてください。
+高度なインストールを行う上で、bsdinstall が提供するパーティション分割のメニューは柔軟性にかけることがあります。
+手動でドライブの分割、ファイルシステムの作成、`/tmp/bsdinstall_etc/fstab` の作成、そして `/mnt` 以下へのファイルシステムのマウントを行うには、パーティションメニューで btn:[Shell] オプションを選択してください。
+このオプションは高度な技術を持つユーザ向けです。
+以上を実行したら、`exit` を実行して bsdinstall に戻り、インストールを続けてください。
[[bsdinstall-fetching-distribution]]
== 配布ファイルのダウンロード
@@ -697,33 +774,155 @@ image::bsdinstall-zfs-init-encription.png[]
[[bsdinstall-distfile-fetching]]
.配布ファイルのダウンロード
-image::bsdinstall-distfile-fetching.png[]
+image::bsdinstall-distfile-fetching.png[各コンポ―テントのダウンロード状況を表示しているメニュー]
次に、ダウンロードの際にエラーが含まれなかったか、 インストールメディアからの読み取り中に読み間違いが起きなかったかどうか等、 配布ファイルの完全性の検証が行われます。
[[bsdinstall-distfile-verify]]
.配布ファイルの検証
-image::bsdinstall-distfile-verifying.png[]
+image::bsdinstall-distfile-verifying.png[各コンポーネントの検証状況を表示しているメニュー]
最後に、検証された配布ファイルがディスクへ展開されます。
[[bsdinstall-distfile-extract]]
.配布ファイルの展開
-image::bsdinstall-distfile-extracting.png[]
+image::bsdinstall-distfile-extracting.png[配布ファイルの展開状況を表示しているメニュー]
必要な配布ファイルがすべて展開されると、 bsdinstall は、 インストール後の設定画面を表示します。 利用可能なインストール後のオプションについては次の章で説明します。
[[bsdinstall-post]]
-== アカウント、タイムゾーン、 サービスおよびセキュリティオプションの設定
+== ネットワークインターフェース、アカウント、タイムゾーン、 サービスおよびセキュリティオプションの設定
[[bsdinstall-post-root]]
=== `root` パスワードの設定
-最初に `root` のパスワードを設定する必要があります。 パスワードを入力している際には、 入力している文字は画面に表示されません。 パスワードの入力後、もう一度入力する必要があります。 これは入力ミスを防ぐためです。
+最初に `root` のパスワードを設定する必要があります。
+パスワードを入力している際には、入力している文字は画面に表示されません。
+入力ミスを防ぐため、パスワードは 2 回入力する必要があります。
[[bsdinstall-post-set-root-passwd]]
.`root` パスワードの設定
-image::bsdinstall-post-root-passwd.png[]
+image::bsdinstall-post-root-passwd.png[root ユーザのパスワードを入力するメニュー]
+
+[[bsdinstall-config-network-dev]]
+=== ネットワークインタフェースの設定
+
+次に、コンピュータが認識したすべてのネットワークインタフェースが表示されます。
+設定するネットワークインタフェースを選んでください。
+
+[[bsdinstall-configure-net-interface]]
+.イーサネットインタフェースの選択
+image::bsdinstall-configure-network-interface.png[設定を行うネットワークインタフェースを選択するメニュー]
+
+イーサネットインタフェースを選択すると、<<bsdinstall-configure-net-ipv4>> で表示されるメニューが表示されます。
+ワイヤレスネットワークを選択すると、システムはワイヤレスアクセスポイントをスキャンします。
+
+[[bsdinstall-wireless-scan]]
+.ワイヤレスアクセスポイントのスキャン
+image::bsdinstall-configure-wireless-scan.png[ワイヤレスネットワークのスキャンの進捗を表示しているメニュー]
+
+ワイヤレスネットワークは Service Set Identifier (SSID) によって識別されます。
+SSID は、それぞれのネットワークに与えられる、短く、一意的な名前です。
+スキャンで見つかった SSID は、そのネットワークで利用できる暗号化のタイプの説明とともに一覧で表示されます。
+もし、期待した SSID が一覧に表示されていなければ、btn:[Rescan] を選択してもう一度スキャンしてください。
+それでもなお期待したネットワークが表示されなければ、接続のためのアンテナに問題がないかを確認したり、コンピュータをアクセスポイントの近くに移動してみてください。
+その後もう一度スキャンしてください。
+
+[[bsdinstall-wireless-accesspoints]]
+.ワイヤレスネットワークの選択
+image::bsdinstall-configure-wireless-accesspoints.png[接続できるワイヤレスネットワークが表示されているメニュー]
+
+次に、ワイヤレスネットワークに接続するための暗号情報を入力してください。
+WEP のような古い暗号の安全性は低いので、WPA2 暗号が強く推奨されます。
+WPA2 を使用してるネットワークでは、Pre-Shared Key (PSK) と呼ばれるパスワードを入力してください。
+セキュリティ上の観点から、入力ボックスに入力した文字はアスタリスクで表示されます。
+
+[[bsdinstall-wireless-wpa2]]
+.WPA2 のセットアップ
+image::bsdinstall-configure-wireless-wpa2setup.png[ワイヤレスネットワークのパスワードを入力するメニュー]
+
+次に、イーサネットもしくはワイヤレスインタフェースに対して、IPv4 を設定するかどうかを選択します。
+
+[[bsdinstall-configure-net-ipv4]]
+.IPv4 ネットワークの選択
+image::bsdinstall-configure-network-interface-ipv4.png[選択したネットワークインターフェースに対して IPv4 の設定を行うかどうかを確認するメニュー]
+
+IPv4 の設定方法は 2 通りあります。
+_DHCP_ はネットワークインタフェースを自動的に適切に設定する方法で、DHCP サーバのあるネットワークでは使用すべきです。
+DHCP を利用できない環境では、静的な設定として、ネットワークのアドレス情報を手動で入力する必要があります。
+
+[NOTE]
+====
+適当なネットワーク情報を入力しても動かないので、DHCP サーバが利用できなのであれば、ネットワーク管理者またはサービスプロバイダから <<bsdinstall-collect-network-information,必要となるネットワーク情報>> に示されている情報を入手してください。
+====
+
+DHCP サーバを利用できるのであれば、次のメニューで btn:[Yes] を選択して、ネットワークインタフェースの設定を自動的に行ってください。
+DHCP サーバを検索し、システムに対するアドレス情報を入手する間、インストーラは少しの間停止しているように表示されます。
+
+[[bsdinstall-net-ipv4-dhcp]]
+.IPv4 DHCP 設定の選択
+image::bsdinstall-configure-network-interface-ipv4-dhcp.png[選択したインターフェースに対して DHCP で設定を行うかを選択するメニュー]
+
+DHCP サーバを利用できない環境では、btn:[No] を選択し、新しく表示されるメニューにおいて以下のようなアドレス情報を入力してください。
+
+[[bsdinstall-net-ipv4-static]]
+.静的な IPv4 の設定
+image::bsdinstall-configure-network-interface-ipv4-static.png[IPv4 ネットワークを設定するメニュー]
+
+[[bsdinstall-collect-network-information]]
+* `IP Address` - コンピュータに与える IPv4 アドレスです。 このアドレスは一意的である必要があるため、ローカルネットワーク上の他のデバイスですでに使われているアドレスは使えません。
+* `Subnet Mask` - ネットワークのサブネットマスクです。
+* `Default Router` - このネットワークのデフォルトゲートウェイの IP アドレスです。
+
+次の画面では、インタフェースを IPv6 で設定すべきかを選択します。
+IPv6 が利用でき、希望するのであれば、 btn:[Yes] を選択してください。
+
+[[bsdinstall-net-ipv6]]
+.IPv6 ネットワークの選択
+image::bsdinstall-configure-network-interface-ipv6.png[選択したネットワークインターフェースに対して IPv6 の設定を行うかどうかを確認するメニュー]
+
+IPv6 の設定に関しても 2 つの方法があります。
+StateLess Address AutoConfiguration (SLAAC) は、ローカルルータから適切なネットワーク設定情報を入手するように、自動的にリクエストします。
+詳細については http://tools.ietf.org/html/rfc4862[rfc4862] を参照してください。
+静的な設定では、ネットワーク情報を手動で入力する必要があります。
+
+IPv6 ルータを利用できるのであれば、次のメニューで btn:[Yes] を選択し、ネットワークインタフェースの設定を自動的に行ってください。
+インストーラはルータを見つけ出し、システムに対するアドレス情報を入手するため、 少しの間停止しているように表示されます。
+
+[[bsdinstall-net-ipv6-slaac]]
+.IPv6 SLAAC 設定の選択
+image::bsdinstall-configure-network-interface-slaac.png[選択したネットワークインターフェースに対して SLAAC の設定を行うかどうかを確認するメニュー]]
+
+IPv6 ルータが利用できない環境では、btn:[No] を選択して、表示されるメニューで以下のアドレス情報を入力する必要があります。
+
+[[bsdinstall-net-ipv6-static]]
+.IPv6 の静的な設定
+image::bsdinstall-configure-network-interface-ipv6-static.png[IPv6 ネットワークを設定するメニュー]
+
+* `IPv6 Address` - このコンピュータに割り当てられた IPv6 アドレスです。このアドレスは一意的である必要があるため、ローカルネットワーク上の他のデバイスですでに使われているアドレスは使えません。
+* `Default Router` - このネットワークのデフォルトゲートウェイの IPv6 アドレスです。
+
+最後のネットワークメニューでは、ホスト名とネットワークアドレスを変換する Domain Name System (DNS) リゾルバを設定します。
+すでに DHCP または SLAAC を使って自動的にネットワークインタフェースを設定したのであれば、`Resolver Configuration` には値がすでに入っているでしょう。
+そうでなければ、`Search` フィールドにローカルネットワークのドメイン名を入力してください。
+`DNS` #1 および `DNS` #2 は、ローカル DNS サーバの IPv4 または IPv6 アドレスです。
+少なくとも、1 つの DNS サーバは必要です。
+
+[[bsdinstall-net-dns-config]]
+.DNS の設定
+image::bsdinstall-configure-network-ipv4-dns.png[ネットワークの DNS を設定するメニュー]
+
+ネットワーク接続の設定が終わったら、FreeBSD をインストールするコンピュータと同じ地域のミラーサイトを選んでください。
+ターゲットコンピュータの近くのミラーサイトを選択できれば、ファイルのダウンロードは早く終わるので、インストールの時間は短くなります。
+
+[TIP]
+====
+ftp://ftp.freebsd.org (Main Site)` を選択すると、最も近いミラーに自動的にルーティングします。
+====
+
+[[bsdinstall-netinstall-mirror]]
+.ミラーサイトの選択
+image::bsdinstall-netinstall-mirrorselect.png[ミラーサイトを選択するメニュー]
[[bsdinstall-timezone]]
=== タイムゾーンの設定
@@ -734,37 +933,37 @@ image::bsdinstall-post-root-passwd.png[]
[[bsdinstall-timezone-region]]
.地域の選択
-image::bsdinstall-timezone-region.png[]
+image::bsdinstall-timezone-region.png[地域を選択するメニュー]
矢印キーを使って、適切な地域を選択し、 kbd:[Enter] を押してください。
[[bsdinstall-timezone-country]]
.国名の選択
-image::bsdinstall-timezone-country.png[]
+image::bsdinstall-timezone-country.png[国名を選択するメニュー]
矢印キーを使って、適切に国名を選び、 kbd:[Enter] を押してください。
[[bsdinstall-timezone-zone]]
.タイムゾーンの選択
-image::bsdinstall-timezone-zone.png[]
+image::bsdinstall-timezone-zone.png[タイムゾーンを選択するメニュー]
矢印キーを使って適切なタイムゾーンを選択し、 kbd:[Enter] を押してください。
[[bsdinstall-timezone-confirmation]]
.タイムゾーンの確定
-image::bsdinstall-timezone-confirm.png[]
+image::bsdinstall-timezone-confirm.png[タイムゾーンを確定するメニュー]
タイムゾーンの省略形が正しいかどうかを確認してください。
[[bsdinstall-timezone-date]]
.日付の設定
-image::bsdinstall-timezone-date.png[]
+image::bsdinstall-timezone-date.png[システムの日付を設定するメニュー]
矢印キーを使って適切な日付を選択したら、 btn:[Set Date] を押してください。 btn:[Skip] を押すと日付の設定をスキップできます。
[[bsdinstall-timezone-time]]
.時刻の設定
-image::bsdinstall-timezone-time.png[]
+image::bsdinstall-timezone-time.png[システムの時刻を設定するメニュー]
矢印キーを使って適切な時刻に設定したら、 btn:[Set Time] を押してください。 btn:[Skip] を押すと時刻の設定をスキップできます。
@@ -775,17 +974,17 @@ image::bsdinstall-timezone-time.png[]
[[bsdinstall-config-serv]]
.追加で有効にするサービスの選択
-image::bsdinstall-config-services.png[]
+image::bsdinstall-config-services.png[利用可能なサービスを表示しているメニュー]
このメニューで有効にできるサービスは以下の通りです。
-* `local_unbound` - DNS のローカル unbound を有効にします。 この設定はベースシステムの unbound に対するもので、 ローカルキャッシュフォワードリゾルバとしての利用のみを想定しています。 ネットワーク全体のリゾルバを設定したいのであれば、 package:dns/unbound[] をインストールしてください。
+* `local_unbound` - DNS のローカル unbound を有効にします。この設定は、ローカルキャッシュフォワードリゾルバとしての利用のみを想定しています。ネットワーク全体のリゾルバを設定したいのであれば、 package:dns/unbound[] をインストールしてください。
* `sshd` - セキュアシェル (SSH) デーモンは、 暗号化された接続上でリモートアクセスするために使われます。 システムがリモートログインを必要とする場合のみ、 このサービスを有効にしてください。
* `moused` - システムのコンソールで、 マウスを利用する時に、このサービスを有効にしてください。
-* `ntpdate` - 起動時の自動時刻同期を有効にします。 この機能は、現在 man:ntpd[8] デーモンでも利用できます。 猶予期間が経過したら、man:ntpdate[8] ユーティリティはその役目を終える予定です。
-* `ntpd` - 自動時刻同期のための The Network Time Protocol (NTP) デーモン。 ネットワーク上に、 Windows(R), Kerberos または LDAP サーバがあるときには、このサービスを有効にしてください。
+* `ntpdate` - 起動時の自動時刻同期を有効にします。 この機能は、現在 man:ntpd[8] デーモンでも利用できます。 man:ntpdate[8] ユーティリティは近々その役目を終える予定です。
+* `ntpd` - 自動時刻同期のための The Network Time Protocol (NTP) デーモンを有効にします。リモートタイムサーバまたはプールとシステムの時刻を同期する場合は、このサービスを有効にしてください。
* `powerd` - 電源の管理およびエネルギーを節約するための電源コントロールユーティリティ
-* `dumpdev` - システムのデバッグを行う上で、 クラッシュダンプを有効にすることは有用です。 可能であればクラッシュダンプを有効にすると良いでしょう。
+* `dumpdev` - システムのデバッグを行う上で、クラッシュダンプは有用なので、可能であれば有効にすると良いでしょう。
[[bsdinstall-hardening]]
=== セキュリティを強化するオプションを有効にする
@@ -794,21 +993,36 @@ image::bsdinstall-config-services.png[]
[[bsdinstall-hardening-options]]
.セキュリティを強化するオプションの設定
-image::bsdinstall-hardening.png[]
+image::bsdinstall-hardening.png[セキュリティを強化するオプションを表示しているメニュー]
このメニューで有効にできるのは、以下のオプションです。
-* `hide_uids` - 情報漏洩防止のため、特権のないユーザが、他のユーザ (UID) により実行されているプロセスを見れないように、 他のユーザが実行しているプロセスを隠します。
-* `hide_gids` - 情報漏洩防止のため、特権のないユーザが、他のグループ (GID) により実行されているプロセスを見れないように、 他のユーザが実行しているプロセスを隠します。
-* `hide_jail` - 特権のないユーザが、jail の中で実行されているプロセスを見れないように、 jail で実行中のプロセスを隠します。
-* `read_msgbuf` - 権限のないユーザが、man:dmesg[8] を使ってカーネルログバッファのメッセージを見ることで、 カーネルメッセージバッファを読むことを無効にします。
-* `proc_debug` - ptrace() および ktrace() といった procfs 機能を含む、 さまざまな特権のないプロセス間のデバッキングサービスを、 特権のないユーザが無効にしないように、 プロセスデバッキング機能を無効にします。 このオプションによって、PHP などのスクリプト言語に対する組み込みのデバッキング機能と同様に、 たとえば man:lldb[1], man:truss[1], man:procstat[1] などの特権のないユーザによるデバッキングツールも無効になります。
-* `random_pid` - 新しく生成されるプロセスの PID をランダム化します。
-* `clear_tmp` - システムの起動時に [.filename]#/tmp# を空にします。
-* `disable_syslogd` - syslogd ネットワークソケットを閉じます。 デフォルトでは、FreeBSD は syslogd を `-s` を使った安全な方法で実行します。 これは、外からのポート 514 に対する UDP リクエストを待機しません。 このオプションを有効にすると、 syslogd を `-ss` フラグで実行します。 このフラグにより、syslogd は空いているどのポートからも受け付けません。 詳細は、man:syslogd[8] をご覧ください。
+* `hide_uids` - 他のユーザが実行しているプロセス (UID) を隠します。
+特権のないユーザが、他のユーザにより実行されているプロセスを見れないようにします。
+* `hide_gids` - 他のグループが実行しているプロセスを隠します。
+特権のないユーザが、他のグループ (GID) により実行されているプロセスを見れないようにします。
+* `hide_jail` - jail で実行中のプロセスを隠します。
+特権のないユーザが、jail の中で実行されているプロセスを見れないようにします。
+* `read_msgbuf` - 権限のないユーザが、カーネルメッセージバッファを読めなくします。
+権限のないユーザが、man:dmesg[8] を使ってカーネルログバッファのメッセージを見れないようにします。
+* `proc_debug` - 権限のないユーザ対するプロセスデバッキング機能を無効にします。
+`ptrace()` および `ktrace()` といった procfs 機能を含む、権限のないプロセス間のデバッキングサービスを無効にします。
+このオプションによって、PHP などのスクリプト言語に対する組み込みのデバッキング機能と同様に、man:lldb[1], man:truss[1] および man:procstat[1] などの権限のないユーザによるデバッキングツールも無効になります。
+* `random_pid` - プロセスの PID をランダム化します。
+* `clear_tmp` - システムの起動時に `/tmp` を空にします。
+* `disable_syslogd` - syslogd ネットワークソケットを閉じます。
+デフォルトでは、FreeBSD は syslogd を `-s` を使った安全な方法で実行します。
+これは、外からのポート 514 に対する UDP リクエストを待機しません。
+このオプションを有効にすると、syslogd を `-ss` 付きで実行します。
+これにより、syslogd は空いているどのポートからも受け付けません。
+詳細は、man:syslogd[8] をご覧ください。
* `disable_sendmail` - sendmail MTA を無効にします。
-* `secure_console` - このオプションを有効にすると、シングルユーザモードに入る際に、 プロンプトに対して `root` パスワードが必要となります。
-* `disable_ddtrace` - DTrace は、 実行中のカーネルに実際に影響を及ぼすモードで実行できます。 破壊的なアクションは、明示的に有効にしない限りは利用できません。 破壊的なアクションを実行できるようにするには、 `-w` を使って DTrace を実行する必要があります。 詳細については man:dtrace[1] をご覧ください。
+* `secure_console` - シングルユーザモードに入る際に、コマンドプロンプトに対して `root` パスワードが必要となります。
+* `disable_ddtrace` - DTrace は、 実行中のカーネルに影響を及ぼすモードで実行できます。
+破壊的なアクションは、明示的に有効にしない限りは利用できません。
+このオプションを有効にするには、DTrace を実行する際に `-w` を使ってください。
+詳細については man:dtrace[1] をご覧ください。
+* `enable_aslr` - アドレス空間配置のランダム化を有効にします。アドレス空間配置のランダム化の詳細については link:https://en.wikipedia.org/wiki/Address_space_layout_randomization[Wikipedia article] をご覧ください。
[[bsdinstall-addusers]]
=== ユーザの追加
@@ -819,13 +1033,13 @@ btn:[Yes] を選択し、 新しいユーザを追加してください。
[[bsdinstall-add-user1]]
.新しいユーザのアカウントの作成
-image::bsdinstall-adduser1.png[]
+image::bsdinstall-adduser1.png[システムにユーザを作成するか選択するメニュー]
プロンプトに従い、 ユーザアカウントの作成で必要となる情報を入力してください。 <<bsdinstall-add-user2>> で示されている例では、`asample` ユーザアカウントを作成します。
[[bsdinstall-add-user2]]
.ユーザ情報の入力
-image::bsdinstall-adduser2.png[]
+image::bsdinstall-adduser2.png[追加するユーザの情報を入力しているメニュー]
以下は、入力情報のまとめです。
@@ -835,25 +1049,27 @@ image::bsdinstall-adduser2.png[]
* `Login group` - 新しいユーザのログイングループ。 空欄のままにすると、デフォルトに割り当てられます
* `Invite _user_ into other groups?` - ユーザを別のグループのメンバーとして追加するかどうか。 ユーザが管理者としてのアクセス必要であれば、 ここで `wheel` を入力してください。
* `Login class` - 空欄にするとデフォルトの設定になります。
-* `Shell` - 一覧の中から、ユーザのシェルを入力してください。 シェルに関する詳細については crossref:basics[shells,「シェル」] をご覧ください。
+* `Shell` - 一覧の中から、ユーザのシェルを入力してください。 シェルに関する詳細については crossref:basics[shells, シェル] をご覧ください。
* `Home directory` - ユーザのホームディレクトリ。 通常は、デフォルトの場所が適切です。
* `Home directory permissions` - ユーザのホームディレクトリの権限。 通常は、デフォルトが適切です。
* `Use password-based authentication?` - 通常は、ユーザがログイン時にパスワードの入力が要求されるように `yes` と入力してください。
-* `Use an empty password?` - 通常は、パスワードがないと安全ではなくなるので、 `no` です。
+* `Use an empty password?` - 空のパスワードは安全ではないので、通常は `no` です。
* `Use a random password?` - 通常は、次のプロンプトでユーザ自身のパスワードを入力できるように、 `no` です。
-* `Enter password` - ユーザのパスワードです。 入力している文字は画面に表示されません。
+* `Enter password` - ユーザのパスワードです。入力している文字は画面に表示されません。
* `Enter password again` - 確認のため、パスワードをもう一度入力します。
* `Lock out the account after creation?` - 通常は、ユーザがログインできるようにするため、 `no` です。
-すべてを入力したら、サマリが表示され、 正しいかどうかの確認を求められます。 入力した情報に間違いがあれば、 `no` を入力してもう一度作業を行なってください。 すべてが正しく入力されていれば、 `yes` を入力して、 新しいユーザを作成してください。
+すべての詳細を入力したら、サマリが表示され、 正しいかどうかの確認を求められます。
+入力した情報に間違いがあれば、 `no` を入力して修正してください。
+すべてが正しく入力されていれば、 `yes` を入力して新しいユーザを作成してください。
[[bsdinstall-add-user3]]
.ユーザおよびグループの管理を終了する
-image::bsdinstall-adduser3.png[]
+image::bsdinstall-adduser3.png[追加するユーザの情報が正しかを確認しているメニュー]
さらにユーザを追加するのであれば、 `Add another user?` の質問に対し、 `yes` を入力してください。 `no` を入力すると、ユーザの追加が終わり、次に進みます。
-ユーザの追加や、ユーザ管理の詳細については、 crossref:users[users-synopsis,「この章では」] を参照してください。
+ユーザの追加や、ユーザ管理の詳細については、 crossref:basics[users-synopsis, ユーザと基本的なアカウント管理] を参照してください。
[[bsdinstall-final-conf]]
=== 最後の設定
@@ -861,9 +1077,9 @@ image::bsdinstall-adduser3.png[]
すべてをインストールし、設定が終わった後に、 最後に設定を修正する機会が与えられます。
[[bsdinstall-final-config]]
-image::bsdinstall-finalconfiguration.png[]
+image::bsdinstall-finalconfiguration.png[インストールを終わる前に、ユーザを追加したり、タイムゾーンなどを設定するためのメニュー]
-インストールを完了する前に、 このメニューを使って変更、または、追加の設定を行なってください。
+インストールを完了する前に、このメニューを使って変更、または、追加の設定を行なってください。
.最終の設定オプション
* `Add User` - <<bsdinstall-addusers>> で説明しています。
@@ -875,27 +1091,39 @@ image::bsdinstall-finalconfiguration.png[]
* `Time Zone` - <<bsdinstall-timezone>> で説明しています。
* `Handbook` - FreeBSD ハンドブックのダウンロードとインストール。
-最後の設定が完了したら、btn:[Exit] を選んでください。
+設定が完了したら、btn:[Exit] を選んでください。
[[bsdinstall-final-modification-shell]]
.Manual Configuration
-image::bsdinstall-final-modification-shell.png[]
+image::bsdinstall-final-modification-shell.png[インストールが終わり、追加でシェルを開いて手動で変更を行うかどうかを確認しているメニュー]
-新しいシステムを再起動する前に、 bsdinstall は追加の設定が必要かどうかを尋ねてきます。 btn:[Yes] を選択して新しいシステムのシェルに入るか、または btn:[No] を選択して、インストールの最後のステップに進んでください。
+新しいシステムを再起動する前に、 bsdinstall は追加の設定が必要かどうかを尋ねてきます。
+btn:[Yes] を選択して新しいシステムのシェルに入るか、または btn:[No] を選択して、インストールの最後のステップに進んでください。
[[bsdinstall-final-main]]
.インストールの終了
-image::bsdinstall-mainexit.png[]
+image::bsdinstall-mainexit.png[インストールが終了し、システムを再起動するか、Live CD にアクセスするかを選択するメニュー]
追加の設定や、特別なセットアップが必要であれば、 btn:[Live CD] を選んでインストールメディアを Live CD で起動してください。
-インストールが終わったら、 btn:[Reboot] を選んで、 コンピュータを再起動し、新しい FreeBSD システムで起動してください。 再起動する前には、忘れずに FreeBSD インストールメディアを外してください。 さもないと、もう一度インストールメディアから起動してしまいます。
+インストールが終わったら、 btn:[Reboot] を選んで、 コンピュータを再起動し、新しい FreeBSD システムで起動してください。
+再起動する前には、忘れずに FreeBSD インストールメディアを外してください。
+さもないと、もう一度インストールメディアから起動してしまいます。
-FreeBSD の起動時には、多くのメッセージが画面に表示されます。 システムの起動後には、ログインプロンプトが表示されます。 `login:` プロンプトで、 インストール時に追加したユーザ名を入力してください。 `root` でのログインは避けてください。管理者の権限が必要となった時に、 スーパユーザになる方法については、crossref:users[users-superuser,「スーパーユーザアカウント」] を参照してください。
+FreeBSD の起動時には、多くのメッセージが画面に表示されます。
+システムの起動後には、ログインプロンプトが表示されます。
+`login:` プロンプトで、インストール時に追加したユーザ名を入力してください。 `root` でのログインは避けてください。
+管理者の権限が必要となった時に、スーパユーザになる方法については、crossref:basics[users-superuser, スーパーユーザアカウント] を参照してください。
-起動時に表示されていたメッセージは、 kbd:[Scroll-Lock] を押し、 scroll-back buffer で見ることができます。 kbd:[PgUp], kbd:[PgDn] そして矢印キーでメッセージをスクロールバックできます。 メッセージの確認が終わったら、kbd:[Scroll-Lock] をもう一度押すと、ディスプレイのロックを外し、 コンソールに戻ることができます。 何度かシステムを起動した後で、これらのメッセージを見るには、 コマンドプロンプトから `less /var/run/dmesg.boot` と入力してください。 確認後に kbd:[q] を押すと、 コマンドラインに戻ります。
+起動時に表示されていたメッセージは、 kbd:[Scroll-Lock] を押し、scroll-back buffer で見ることができます。
+kbd:[PgUp], kbd:[PgDn] そして矢印キーでメッセージをスクロールバックできます。
+メッセージの確認が終わったら、kbd:[Scroll-Lock] をもう一度押すと、ディスプレイのロックを外し、 コンソールに戻ることができます。
+何度かシステムを起動した後で、これらのメッセージを見るには、コマンドプロンプトから `less /var/run/dmesg.boot` と入力してください。
+確認後に kbd:[q] を押すと、 コマンドラインに戻ります。
-<<bsdinstall-config-serv>> にて、 sshd を有効に設定した場合には、 最初の起動時にシステムが RSA および DSA キーを生成するため、 少々時間がかかるかもしれません。 その後の起動はより速くなるでしょう。 鍵のフィンガープリントは、以下の例のように表示されます。
+<<bsdinstall-config-serv>> で sshd を有効に設定した場合には、最初の起動時にシステムが SSH ホストキーを生成するため、少々時間がかかるかもしれません。
+その後の起動はより速くなるでしょう。
+鍵のフィンガープリントは、以下の例のように表示されます。
[source,shell]
....
@@ -942,107 +1170,13 @@ FreeBSD はデフォルトでは、グラフィカルな環境をインストー
適切に FreeBSD をシャットダウンすることは、 ハードウェアをダメージから守ったり、データの保護につながります。 __システムを適切にシャットダウンする前に、 電源を落すということはしないでください!__``wheel`` グループのメンバとなっているユーザは、 コマンドラインから `su` と入力し、 `root` のパスワードを入力してスーパユーザとなってください。 その後、`shutdown -p now` と入力すると、システムは正しくシャットダウンし、 ハードウェアが対応していれば、電源が落ちます。
-[[bsdinstall-network]]
-== ネットワークインタフェース
-
-[[bsdinstall-config-network-dev]]
-=== ネットワークインタフェースの設定
-
-次に、 コンピュータが認識したすべてのネットワークインタフェースが表示されます。 設定するネットワークインタフェースを選んでください。
-
-[[bsdinstall-configure-net-interface]]
-.イーサネットインタフェースの選択
-image::bsdinstall-configure-network-interface.png[]
-
-イーサネットインタフェースを選択したのであれば、<<bsdinstall-configure-net-ipv4>> で表示されるメニューまで飛びます。 ワイヤレスネットワークを選択したのであれば、 システムはワイヤレスアクセスポイントをスキャンします。
-
-[[bsdinstall-wireless-scan]]
-.ワイヤレスアクセスポイントのスキャン
-image::bsdinstall-configure-wireless-scan.png[]
-
-ワイヤレスネットワークは Service Set Identifier (SSID) によって識別されます。 SSID は、それぞれのネットワークに与えられる、 短く、一意的な名前です。 スキャンで見つかった SSID の一覧は、 そのネットワークで利用できる暗号化のタイプの説明とともに表示されます。 もし、期待した SSID が一覧に表示されていなければ、 btn:[Rescan] を選択してもう一度スキャンしてください。 もし、期待したネットワークが表示されなければ、 接続のためのアンテナを確認したり、 コンピュータをアクセスポイントの近くに移動させてみてください。 その後もう一度スキャンしてください。
-
-[[bsdinstall-wireless-accesspoints]]
-.ワイヤレスネットワークの選択
-image::bsdinstall-configure-wireless-accesspoints.png[]
-
-次に、 ワイヤレスネットワークに接続するための暗号情報を入力してください。 WEP のような古い暗号の安全性は低いので、 WPA2 暗号が強く推奨されます。 WPA2 を使用してるネットワークでは、 Pre-Shared Key (PSK) と呼ばれるパスワードを入力してください。 セキュリティ上の観点から、 入力ボックスに入力した文字はアスタリスクで表示されます。
-
-[[bsdinstall-wireless-wpa2]]
-.WPA2 のセットアップ
-image::bsdinstall-configure-wireless-wpa2setup.png[]
-
-次は、イーサネットもしくはワイヤレスインタフェースに対して、 IPv4 を設定するかどうかを選択します。
-
-[[bsdinstall-configure-net-ipv4]]
-.IPv4 ネットワークの選択
-image::bsdinstall-configure-network-interface-ipv4.png[]
-
-IPv4 の設定方法は 2 通りあります。 _DHCP_ はネットワークインタフェースを自動的に適切に設定する方法で、 DHCP サーバのあるネットワークでは使用すべきです。 もし、DHCP を利用できない環境では、 静的な設定として、 ネットワークのアドレス情報を手動で入力する必要があります。
-
-[NOTE]
-====
-適当なネットワーク情報を入力しても動かないので、 DHCP サーバが利用できなのであれば、 ネットワーク管理者またはサービスプロバイダから <<bsdinstall-collect-network-information,必要となるネットワーク情報>> に示されている情報を入手してください。
-====
-
-DHCP サーバを利用できるのであれば、 次のメニューで btn:[Yes] を選択して、 ネットワークインタフェースの設定を自動的に行ってください。 インストーラは DHCP サーバを検索し、 システムに対するアドレス情報を入手するために、 少しの間停止しているように表示されます。
-
-[[bsdinstall-net-ipv4-dhcp]]
-.IPv4DHCP 設定の選択
-image::bsdinstall-configure-network-interface-ipv4-dhcp.png[]
-
-DHCP サーバを利用できない環境では、 btn:[No] を選択し、 このメニューにおいて以下のアドレス情報を入力してください。
-
-[[bsdinstall-net-ipv4-static]]
-.IPv4 の静的な設定
-image::bsdinstall-configure-network-interface-ipv4-static.png[]
-
-[[bsdinstall-collect-network-information]]
-* `IP Address` - コンピュータに手動で与える IPv4 アドレスです。 このアドレスは一意的なものである必要があり、 すでにローカルネットワーク上の他のネットワーク機器で使われているものではいけません。
-* `Subnet Mask` - ネットワークのサブネットマスクです。
-* `Default Router` - このネットワークのデフォルトゲートウェイの IP アドレスです。
-
-次の画面では、インタフェースを IPv6 で設定すべきかを選択します。 IPv6 が利用でき、希望するのであれば、 btn:[Yes] を選択してください。
-
-[[bsdinstall-net-ipv6]]
-.IPv6 ネットワークの選択
-image::bsdinstall-configure-network-interface-ipv6.png[]
-
-IPv6 の設定に関しても 2 つの方法があります。 StateLess Address AutoConfiguration (_SLAAC_) は、ローカルルータから適切なネットワーク設定情報を入手するように、 自動的にリクエストします。 詳細については link:http://tools.ietf.org/html/rfc4862[http://tools.ietf.org/html/rfc4862] を参照してください。静的な設定では、 ネットワーク情報を手動で入力する必要があります。
-
-IPv6 ルータを利用できるのであれば、 次のメニューで btn:[Yes] を選択し、 ネットワークインタフェースの設定を自動的に行ってください。 インストーラはルータを見つけ出し、 システムに対するアドレス情報を入手するために、 少しの間停止しているように表示されます。
-
-[[bsdinstall-net-ipv6-slaac]]
-.IPv6 SLAAC 設定の選択
-image::bsdinstall-configure-network-interface-slaac.png[]
-
-IPv6 ルータが利用できない環境では、 btn:[No] を選択して、 表示されるメニューで以下のアドレス情報を入力する必要があります。
-
-[[bsdinstall-net-ipv6-static]]
-.IPv6 の静的な設定
-image::bsdinstall-configure-network-interface-ipv6-static.png[]
-
-* `IPv6 Address` - このコンピュータに割り当てられた IPv6 アドレスです。 このアドレスは一意的なものである必要があり、 すでにローカルネットワーク上の他のネットワーク機器で使われているものではいけません。
-* `Default Router` - このネットワークのデフォルトゲートウェイの IPv6 アドレスです。
-
-最後のネットワークメニューでは、 Domain Name System (DNS) リゾルバを設定します。 これは、ホスト名とネットワークアドレスを変換します。 すでに DHCP または SLAAC を使って自動的にネットワークインタフェースを設定したのであれば、 `Resolver Configuration` には値がすでに入っているでしょう。 そうでなければ、`Search` フィールドにローカルネットワークのドメイン名を入力してください。 `DNS` #1 および `DNS` #2 は、 ローカル DNS サーバの IPv4 または IPv6 アドレスです。 少なくとも、1 つの DNS サーバは必要です。
-
-[[bsdinstall-net-dns-config]]
-.DNS の設定
-image::bsdinstall-configure-network-ipv4-dns.png[]
-
-ネットワーク接続の設定が終わったら、FreeBSD をインストールするコンピュータと同じ地域のミラーサイトを選んでください。 ターゲットコンピュータの近くにミラーサイトがあると、 ファイルのダウンロードは早く終わるので、 インストールの時間は短くなります。
-
-[[bsdinstall-netinstall-mirror]]
-.ミラーサイトの選択
-image::bsdinstall-netinstall-mirrorselect.png[]
[[bsdinstall-install-trouble]]
== トラブルシューティング
この章では、インストールの際の、 これまで報告された共通の問題に対する解決のための情報が書いてあります。
-インストールする FreeBSD のバージョンのハードウェアノート (link:https://www.FreeBSD.org/ja/releases/[https://www.freebsd.org/ja/releases/]) を調べて、 使用しているハードウェアに対応しているかどうかを確認してください。 もしハードウェアがサポートされているにもかかわらず、 動作しなかったり他の問題点がある時は、 crossref:kernelconfig[kernelconfig,FreeBSD カーネルのコンフィグレーション] で説明されている方法で カスタムカーネルを構築して、[.filename]#GENERIC# カーネルに含まれていないデバイスへのサポートを追加してください。 起動ディスクのカーネルでは、ほとんどのハードウェアデバイスの IRQ, I/O アドレス、 DMA チャネルが工場出荷時の状態であると設定されています。 もしハードウェアの設定が変更されている場合には、 カーネルコンフィグレーションファイルを編集することにより、 FreeBSD に設定することが可能です。
+link:https://www.FreeBSD.org/ja/releases/[FreeBSD リリース情報] ページにあるインストールする FreeBSD のバージョンのハードウェアノートを調べて、 使用しているハードウェアに対応しているかどうかを確認してください。
[NOTE]
====
@@ -1051,14 +1185,16 @@ image::bsdinstall-netinstall-mirrorselect.png[]
通常、製造メーカーは、 重要な更新のようなそれなりの理由がない限り、マザーボードの BIOS のアップグレードは行わないよう推奨しています。 アップデートの過程で失敗する__可能性があり__、 その場合 BIOS が不完全な状態になり、 コンピュータが動作しない原因となり得るからです。
====
-システムの起動時に、ハードウェアの検出中にシステムが固まったり、 インストール中におかしな振る舞いをする場合には、 ACPI が原因の可能性があります。 i386 および amd64 プラットフォームにおいて、 FreeBSD はシステムの設定を手助けするシステム ACPI サービスを、 起動時に検出された場合に広く使います。 残念ながら、まだいくつかの不具合が、 ACPI ドライバとシステムのマザーボードおよび BIOS ファームウェア両方に存在しています。 起動ステージ 3 において、ヒント情報 `hint.acpi.0.disabled` を以下のように設定すると ACPI を無効にできます。
+システムの起動時に、ハードウェアの検出中にシステムが固まったり、インストールプロセスでおかしな振る舞いをする場合には、ACPI が原因の可能性があります。
+i386 および amd64 プラットフォームにおいて、 FreeBSD はシステムの設定を手助けするシステム ACPI サービスを、 起動時に検出された場合に広く使います。 残念ながら、まだいくつかの不具合が、 ACPI ドライバとシステムのマザーボードおよび BIOS ファームウェア両方に存在しています。 起動ステージ 3 において、ヒント情報 `hint.acpi.0.disabled` を以下のように設定すると ACPI を無効にできます。
[source,shell]
....
- set hint.acpi.0.disabled="1"
+set hint.acpi.0.disabled="1"
....
-この設定はシステムが起動するたびにリセットされるので、 [.filename]#/boot/loader.conf# ファイルに `hint.acpi.0.disabled="1"` を追加する必要があります。 ブートローダのより詳しい情報については crossref:boot[boot-synopsis,「この章では」] で説明します。
+この設定はシステムが起動するたびにリセットされるので、`/boot/loader.conf` ファイルに `hint.acpi.0.disabled="1"` を追加する必要があります。
+ブートローダのより詳しい情報については crossref:boot[boot-synopsis,FreeBSD の起動のプロセス] で説明します。
[[using-live-cd]]
== Live CD を使う
diff --git a/documentation/content/ja/books/handbook/config/_index.adoc b/documentation/content/ja/books/handbook/config/_index.adoc
index dd78fe412d..0a5660bca1 100644
--- a/documentation/content/ja/books/handbook/config/_index.adoc
+++ b/documentation/content/ja/books/handbook/config/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partiii
next: books/handbook/boot
showBookMenu: true
weight: 15
-path: "/books/handbook/"
+path: "/books/handbook/config/"
---
[[config-tuning]]
diff --git a/documentation/content/ja/books/handbook/cutting-edge/_index.adoc b/documentation/content/ja/books/handbook/cutting-edge/_index.adoc
index e3ddb3e644..d08dc665b2 100644
--- a/documentation/content/ja/books/handbook/cutting-edge/_index.adoc
+++ b/documentation/content/ja/books/handbook/cutting-edge/_index.adoc
@@ -1,13 +1,14 @@
---
-title: 第17章 FreeBSD のアップデートとアップグレード
+title: 第16章 FreeBSD のアップデートとアップグレード
part: パートIII. システム管理
prev: books/handbook/l10n
next: books/handbook/partiv
description: freebsd-update もしくは Git を使った FreeBSD システムを最新の状態に更新する方法、ベースシステム全体を再構築しインストールする方法などの説明
tags: ["updating", "upgrading", "documentation", "FreeBSD-STABLE", "FreeBSD-CURRENT", "Security Patches"]
showBookMenu: true
-weight: 21
-path: "/books/handbook/"
+weight: 20
+path: "/books/handbook/cutting-edge/"
+aliases: ["/ja/books/handbook/updating-upgrading-freebsdupdate/","/ja/books/handbook/updating-upgrading-documentation/","/ja/books/handbook/current-stable/","/ja/books/handbook/makeworld/","/ja/books/handbook/small-lan/"]
---
[[updating-upgrading]]
@@ -18,7 +19,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 17
+:sectnumoffset: 16
:partnums:
:source-highlighter: rouge
:experimental:
@@ -53,16 +54,16 @@ endif::[]
あるリリースから次のリリースまでの期間にも、 FreeBSD の開発は休みなく続けられています。
最新の開発ツリーと同期することを好む人がいる一方で、公式のリリース版を好んで使う方もいます。
-しかしながら、公式のリリースといえども、 セキュリティや他の重要な修正のため、時にはアップデートが行われます。
-使用しているバージョンに関わらず、FreeBSD は手元のシステムを最新の開発ツリーと同期するために必要なツールをすべて用意しているので、これらのツールを使ってバージョンのアップグレードを簡単に行うことができます。
+しかしながら、公式のリリースといえども、 セキュリティや他の重要な修正のため、時にはアップデートが必要となります。
+FreeBSD は手元のシステムを最新の開発ツリーと同期するために必要なツールをすべて用意しているので、使用しているバージョンに関わらず、これらのツールを使って簡単にシステムのバージョンをアップグレードできます。
この章では、開発ブランチを追いかける方法、および、FreeBSD システムをアップデートする基本的なツールについて解説します。
-この章を読んで分かるのは:
+この章では以下について説明します。
* freebsd-update もしくは Git を使った FreeBSD システムの更新方法
-* インストールされているシステムと、変更が行われていない状態との比較方法。
-* Git またはドキュメント用の ports を使って、 インストールされているドキュメントを最新版にアップデートする方法。
-* 2 つの開発ブランチ、FreeBSD-STABLE と FreeBSD-CURRENT の違い
+* インストールされているシステムと、変更が行われていない状態との比較方法
+* Git またはドキュメント用の ports を使って、 インストールされているドキュメントを最新版にアップデートする方法
+* 2 つの開発ブランチ、FreeBSD-STABLE と FreeBSD-CURRENT の違いについて
* ベースシステム全体を再構築しインストールする方法
この章を読む前に、以下の準備をしましょう。
@@ -174,6 +175,8 @@ MergeChanges /etc/ /var/named/etc/ /boot/device.hints
このオプションを `yes` に設定すると、`freebsd-update` は `Components` のリストが完全に正しいと判断し、このリスト以外の変更点については取り扱いません。
`freebsd-update` は、効率的に `Components` リストに属するファイルをアップデートします。
+詳細については、man:freebsd-update.conf[5] を参照してください。
+
[[freebsdupdate-security-patches]]
=== セキュリティパッチの適用
@@ -602,7 +605,7 @@ FreeBSD-STABLE を追いかけるには
. 新しい FreeBSD-STABLE システムをインストールするには、 crossref:mirrors[mirrors,ミラーサイト] から最近の FreeBSD-STABLE リリースをインストールするか、毎月公開されている FreeBSD-STABLE からビルドされたスナップショットを使ってください。
スナップショットの詳細については、link:https://www.FreeBSD.org/ja/snapshots/[www.freebsd.org/ja/snapshots] をご覧ください。
+
-既に FreeBSD が動いているシステムを FreeBSD-STABLE にアップグレードするには、 crossref:mirrors[svn,svn] を使って、希望する開発ブランチのソースをチェックアウしてください。
+既に FreeBSD が動いているシステムを FreeBSD-STABLE にアップグレードするには、`git` を使って、希望する開発ブランチのソースをチェックアウしてください。
`stable/9` といったブランチ名は、link:https://www.FreeBSD.org/releng/[www.freebsd.org/releng] で説明されています。
. FreeBSD-STABLE をコンパイルしたり FreeBSD-STABLE へとアップグレードする前に、 [.filename]#/usr/src/Makefile# を注意深く読み、 <<makeworld>> に書かれている手順に従ってください。
{freebsd-stable} と [.filename]#/usr/src/UPDATING# を読んで、次のリリースへ向けて移ってゆくに当たって、ときどき必要となる既存システムからの新システムの構築手順についての最新情報を得てください。
@@ -614,10 +617,11 @@ FreeBSD は、バージョン情報をカーネルのコンパイル時に埋め
man:uname[1] を使ってこの情報を調べることができます。以下はその例です。
[source,shell]
....
-% uname -a
+% uname -v
FreeBSD 14.0-CURRENT #112 main-n247514-031260d64c18: Tue Jun 22 20:43:19 MDT 2021 fred@machine:/usr/home/fred/obj/usr/home/fred/git/head/amd64.amd64/sys/FRED
....
-4 番目のフィールドを見ると、いくつかの要素から構成されていることがわかります。
+最後のフィールドから、カーネル名、ビルドを行ったユーザ、およびコンパイルを行った場所がわかります。
+また、4 番目のフィールドは、いくつかの要素から構成されていることがわかります。
[source,shell]
....
main-n247514-031260d64c18
@@ -668,14 +672,32 @@ n247514 <.>
以下は FreeBSD をソースから構築してアップデートする典型的な方法についてのクイックリファレンスです。
その後の節では、各プロセスをより詳細に説明します。
+[WARNING]
+====
+man:mergemaster[8] から man:etcupdate[8] に移行する際に、初めて man:etcupdate[8] を実行すると、変更点が不適切にマージされ、衝突が起きてしまうことがあります。
+これを避けるには、ソースを更新して新しく buildworld を行う *前に* 以下のステップを行ってください。
+
+[source,shell]
+....
+# etcupdate extract <.>
+# etcupdate diff <.>
+....
+
+<.> [.filename]#/etc# ファイルを保存するデータベースをブートストラップしてください。
+詳細については、 man:etcupdate[8] を参照してください。
+
+<.> ブートストラップ後、差分を確認してください。
+不必要なローカルでの変更点をなくし、将来的なアップデートにおいて、衝突が起きる可能性が低くなるようにしてください。
+====
+
[.procedure]
====
-. アップデートおよびビルド
+* アップデートおよびビルド
+
[source,shell]
....
# git pull /usr/src <.>
-check /usr/src/UPDATING <.>
+/usr/src/UPDATING の確認 <.>
# cd /usr/src <.>
# make -j4 buildworld <.>
# make -j4 kernel <.>
@@ -743,7 +765,7 @@ origin https://git.freebsd.org/src.git (push)
.ソースコードの入手
[NOTE]
====
-`fatal: not a git repository` という出力が出た場合には、ファイルがなかったり、別な方法によりインストールされているので、新しくソースコードをチェックアウトする必要があります。
+`fatal: not a git repository` と出力された場合には、ファイルがなかったり、別な方法によりインストールされているので、新しくソースコードをチェックアウトする必要があります。
[[updating-src-obtaining-src-repopath]]
.FreeBSD のバージョンおよびリポジトリブランチ
@@ -761,7 +783,9 @@ origin https://git.freebsd.org/src.git (push)
|`stable/_X_`
|
-リリースバージョンに対し、 そのブランチにおけるすべての開発の成果が反映されたものです。 _STABLE_ は、 Applications Binary Interface (ABI) が変更されないことを意味しており、 このブランチの以前のバージョンでコンパイルされたソフトウェアは、 このバージョンでも実行できることを意味しています。 たとえば、FreeBSD 10.1 で実行するようにコンパイルされたソフトウェアは、 FreeBSD 10-STABLE においても実行できます。
+リリースバージョンに対し、そのブランチにおけるすべての開発の成果が反映されたものです。
+_STABLE_ では、Applications Binary Interface (ABI) は変更されないため、このブランチのシステムであれば、以前のバージョンでコンパイルされたソフトウェアを実行できます。
+たとえば、FreeBSD 10.1 で実行するようにコンパイルされたソフトウェアは、その後構築された FreeBSD 10-STABLE 上でも実行できます。
STABLE ブランチは、 時期によってはユーザに影響するようなバグや非互換性を持つことがあります。 これらは通常すぐに修正されます。
diff --git a/documentation/content/ja/books/handbook/desktop/_index.adoc b/documentation/content/ja/books/handbook/desktop/_index.adoc
index f5d3415f37..c4e94c031f 100644
--- a/documentation/content/ja/books/handbook/desktop/_index.adoc
+++ b/documentation/content/ja/books/handbook/desktop/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partii
next: books/handbook/multimedia
showBookMenu: true
weight: 9
-path: "/books/handbook/"
+path: "/books/handbook/desktop/"
---
[[desktop]]
diff --git a/documentation/content/ja/books/handbook/disks/_index.adoc b/documentation/content/ja/books/handbook/disks/_index.adoc
index c6754f70ee..3b71836708 100644
--- a/documentation/content/ja/books/handbook/disks/_index.adoc
+++ b/documentation/content/ja/books/handbook/disks/_index.adoc
@@ -1,11 +1,11 @@
---
-title: 第15章 ストレージ
+title: 第14章 ストレージ
part: パートIII. システム管理
prev: books/handbook/security
next: books/handbook/l10n
showBookMenu: true
-weight: 19
-path: "/books/handbook/"
+weight: 18
+path: "/books/handbook/disks/"
---
[[disks]]
@@ -16,7 +16,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 15
+:sectnumoffset: 14
:partnums:
:source-highlighter: rouge
:experimental:
diff --git a/documentation/content/ja/books/handbook/eresources/_index.adoc b/documentation/content/ja/books/handbook/eresources/_index.adoc
index 7ee384aa3b..7786f103a3 100644
--- a/documentation/content/ja/books/handbook/eresources/_index.adoc
+++ b/documentation/content/ja/books/handbook/eresources/_index.adoc
@@ -6,8 +6,8 @@ next: books/handbook/pgpkeys
description: ウェブサイト、メーリングリスト、ミラーサイトといったインターネット上のリソース
tags: ["eresources", "Websites", "Mailing Lists", "Usenet", "Newsgroups"]
showBookMenu: true
-weight: 30
-path: "/books/handbook/"
+weight: 29
+path: "/books/handbook/eresources/"
---
[appendix]
diff --git a/documentation/content/ja/books/handbook/introduction.adoc b/documentation/content/ja/books/handbook/introduction.adoc
index e78af11b76..7ed57400cc 100644
--- a/documentation/content/ja/books/handbook/introduction.adoc
+++ b/documentation/content/ja/books/handbook/introduction.adoc
@@ -1,7 +1,7 @@
[.abstract-title]
概要
-FreeBSD へようこそ! このハンドブックは _FreeBSD {rel131-current}-RELEASE_ および _FreeBSD {rel123-current}-RELEASE_ のインストールと日常での使い方について記述したものです。
+FreeBSD へようこそ! このハンドブックは _FreeBSD {rel131-current}-RELEASE_ および _FreeBSD {rel124-current}-RELEASE_ のインストールと日常での使い方について記述したものです。
本ハンドブックはさまざまな人々による編集の成果で、現在も改編作業中です。
いま存在するセクションの中には情報が古くなってしまっているものがあります。
もし、この文書を新しくしたり、 新しい情報の追加に協力したいとお考えなら、 {freebsd-doc} まで電子メールを (英語で) 送ってください。
diff --git a/documentation/content/ja/books/handbook/introduction/_index.adoc b/documentation/content/ja/books/handbook/introduction/_index.adoc
index c459c5edc6..f7ed678b3e 100644
--- a/documentation/content/ja/books/handbook/introduction/_index.adoc
+++ b/documentation/content/ja/books/handbook/introduction/_index.adoc
@@ -7,7 +7,8 @@ description: この章では FreeBSD の歴史、目標、開発モデルなど
tags: ["introduction", "synopsis", "about", "Who Uses FreeBSD", "goals", "history"]
showBookMenu: true
weight: 3
-path: "/books/handbook/"
+path: "/books/handbook/introduction/"
+aliases: ["/ja/books/handbook/nutshell/","/ja/books/handbook/history/"]
---
[[introduction]]
@@ -107,49 +108,51 @@ FreeBSD は、無料でダウンロードできます。 また、CD-ROM また
[[introduction-nutshell-users]]
=== FreeBSD はどこに使われていますか?
-FreeBSD は、ウェブサービスの能力で知られています。 FreeBSD が利用されている代表的なサイトには https://news.ycombinator.com/[Hacker News], http://www.netcraft.com/[Netcraft], http://www.163.com/[NetEase], https://signup.netflix.com/openconnect[Netflix], http://www.sina.com/[Sina], http://www.sony.co.jp/[Sony Japan], http://www.rambler.ru/[Rambler], http://www.yahoo.com/[Yahoo!] および http://www.yandex.ru/[Yandex] があります。
+FreeBSD は、ウェブサービスの能力で知られています。 FreeBSD が利用されている代表的なサイトには link:https://news.ycombinator.com/[Hacker News], link:http://www.netcraft.com/[Netcraft], link:http://www.163.com/[NetEase], link:https://signup.netflix.com/openconnect[Netflix], link:http://www.sina.com/[Sina], link:http://www.sony.co.jp/[Sony Japan], link:http://www.rambler.ru/[Rambler], link:http://www.yahoo.com/[Yahoo!] および link:http://www.yandex.ru/[Yandex] があります。
FreeBSD は、 先進的な機能、高いセキュリティ、および定期的なリリースサイクル、 そして寛容なライセンスにより、 多くの商用およびオープンソースのアプライアンス、 デバイスおよび製品を構築するプラットフォームとして利用されています。 世界最大規模の多くの IT 会社が FreeBSD を使っています。
-* http://www.apache.org/[Apache] - Apache ソフトウェア財団は、 1.4 百万回を超えるコミットというおそらく世界で最も大規模な SVN リポジトリを含む、数多くの公式のインフラストラクチャで FreeBSD を使っています。
-* http://www.apple.com/[Apple] - OS X は、 FreeBSD から、ネットワークスタック、仮想ファイルシステム、 そして多くのユーザランドコンポーネントを取り入れています。 Apple iOS も FreeBSD から取り入れた要素を含んでいます。
-* http://www.cisco.com/[Cisco] - IronPort ネットワークセキュリティおよびアンチスパムアプライアンスは、 改造された FreeBSD カーネルで動いています。
-* http://www.citrix.com/[Citrix] - NetScaler の一連のセキュリティアプライアンスは、 FreeBSD シェルとともに 4-7 レイヤのロードバランス、 コンテントキャシュ、アプリケーションファイアウォール、 セキュリティ VPN およびモバイルクライド・ネットワークアクセスを提供します。
-* https://www.emc.com/isilon[Dell EMC Isilon] - Isilon 社のエンタープライズストレージアプライアンスは、FreeBSD ベースです。 寛大な FreeBSD ライセンスのおかげで、Isilon は、 彼らの知的財産物をカーネルに統合することができるため、 オペレーティングシステムではなく、 製品そのものに焦点を当てた開発が可能となっています。
-* http://www.quest.com/KACE[Quest KACE] - KACE システム管理アプライアンスでは、 FreeBSD が用いられています。信頼性、 スケーラビリティおよび継続的な開発をサポートしているコミュニティが評価され採用されています。
-* http://www.ixsystems.com/[iXsystems] - 統合ストレージアプライアンスの TrueNAS シリーズは FreeBSD ベースです。
-* http://www.juniper.net/[Juniper] - Juniper のすべてのネットワークギア (ルータ、スイッチ、セキュリティおよびネットワークアプライアンス) を動かしている JunOS オペレーティングシステムは、 FreeBSD ベースです。 Juniper は、FreeBSD プロジェクトと商用製品を提供しているベンダとの間で協力関係が成功している数多くのベンダのひとつです。 将来 FreeBSD の新しい機能を JunOS へと統合する際の複雑さを減らすため、 Juniper で作成された改良点は、FreeBSD に取り込まれています。
-* http://www.mcafee.com/[McAfee] - Sidewinder などの McAfee エンタープライズファイアウォール製品のベースである SecurOS は FreeBSD ベースです。
-* http://www.netapp.com/[NetApp] - ストレージアプライアンスの Data ONTAP GX シリーズは、FreeBSD ベースです。 NetApp は、新しい BSD ライセンスのハイパーバイザである bhyve などの数多くの機能を FreeBSD プロジェクトに還元しています。
-* http://www.netflix.com/[Netflix] - Netflix が顧客へのストリームムービーに使用している OpenConnect アプライアンスは、FreeBSD ベースです。 Netflix は、コードベースに対し多大な貢献を行っており、 FreeBSD のメインラインからの差分がゼロになるように作業を行っています。 Netflix OpenConnect アプライアンスは、 北米の全インターネットトラフィックの 32% の配送を受け持っています。
-* http://www.sandvine.com/[Sandvine] - Sandvine は、 ハイパフォーマンスでリアルタイムのネットワークプロセッシングプラットフォームのベースに FreeBSD を使用しています。このプラットフォームは、 彼らのインテリジェントネットワークポリシーコントロール製品を構成しています。
-* http://www.sony.com/[Sony] - PlayStation 4 のゲームコンソールは、 FreeBSD の改良版が動いています。
-* http://www.sophos.com/[Sophos] - Sophos Email アプライアンス製品は、強化された FreeBSD がベースです。 インバウンドメールに対してスパムやウィルススキャンを行う一方で、 アウトバウンドメールがマルウェアではないか、また、 機密情報がアクシデントで漏洩してしまわないようにモニタします。
-* http://www.spectralogic.com/[Spectra Logic] - アーカイブグレードストレージアプライアンスの nTier シリーズは、FreeBSD および OpenZFS が動いています。
-* https://www.stormshield.com[Stormshield] - Stormshield ネットワークセキュリティアプライアンスは、 強化された FreeBSD がベースです。 BSD ライセンスが、彼らの知的財産のシステムへの統合を可能にする一方で、 コミュニティに非常に多くの興味深い開発結果をもたらしてくれます。
-* http://www.weather.com/[The Weather Channel] - 各ローカルケーブルプロバイダのヘッドエンドにインストールされていて、 ローカルの天気予報をケーブル TV ネットワークプログラムに送る IntelliStar アプライアンスでは FreeBSD が動いています。
-* http://www.verisign.com/[Verisign] - Verisign は .com および .net ルートドメインレジストリおよび関連する DNS インフラストラクチャの運用に責任を持っています。 彼らのインフラストラクチャに一般的な障害点がないように、FreeBSD を含むさまざまなネットワークオペレーティングシステムに信頼を寄せています。
-* http://www.voxer.com/[Voxer] - Voxer のモバイルボイスメッセージのプラットフォームでは、 ZFS が FreeBSD 上で動いています。 Voxer は、Solaris から派生したオペレーティングシステムから、 FreeBSD へと移行しました。優れた文書、 幅広く活動的なコミュニティ、 そして開発者にとって好意的な環境がその理由です。 ZFS および DTrace といった決定的な機能に加え、 FreeBSD では、 ZFS が TRIM に対応しています。
-* https://fudosecurity.com/en/[Fudo セキュリティ] - FUDO セキュリティアプライアンスは、 エンタープライズおよびシステムの管理者に対し、 モニタ、コントロール、レコードおよび audit コントラクタを提供します。 ZFS, GELI, Capsicum, HAST および auditdistd といった FreeBSD の最良なセキュリティ機能がベースとなっています。
+* link:http://www.apache.org/[Apache] - Apache ソフトウェア財団は、 1.4 百万回を超えるコミットというおそらく世界で最も大規模な SVN リポジトリを含む、数多くの公式のインフラストラクチャで FreeBSD を使っています。
+* link:http://www.apple.com/[Apple] - Apple により提供されている最近のオペレーションシステムは、FreeBSD からプロセスモデル、ネットワークスタック、仮想ファイルシステム、ライブラリ、マニュアルページ、そしてコマンドラインユーティリティについてのコードを取り入れています。
+* link:http://www.cisco.com/[Cisco] - IronPort ネットワークセキュリティおよびアンチスパムアプライアンスは、 改造された FreeBSD カーネルで動いています。
+* link:http://www.citrix.com/[Citrix] - NetScaler の一連のセキュリティアプライアンスは、 FreeBSD シェルとともに 4-7 レイヤのロードバランス、 コンテントキャシュ、アプリケーションファイアウォール、 セキュリティ VPN およびモバイルクライド・ネットワークアクセスを提供します。
+* link:https://www.emc.com/isilon[Dell EMC Isilon] - Isilon 社のエンタープライズストレージアプライアンスは、FreeBSD ベースです。 寛大な FreeBSD ライセンスのおかげで、Isilon は、 彼らの知的財産物をカーネルに統合することができるため、 オペレーティングシステムではなく、 製品そのものに焦点を当てた開発が可能となっています。
+* link:http://www.quest.com/KACE[Quest KACE] - KACE システム管理アプライアンスでは、 FreeBSD が用いられています。信頼性、 スケーラビリティおよび継続的な開発をサポートしているコミュニティが評価され採用されています。
+* link:http://www.ixsystems.com/[iXsystems] - 統合ストレージアプライアンスの TrueNAS シリーズは FreeBSD ベースです。
+* link:http://www.juniper.net/[Juniper] - Juniper のすべてのネットワークギア (ルータ、スイッチ、セキュリティおよびネットワークアプライアンス) を動かしている JunOS オペレーティングシステムは、 FreeBSD ベースです。 Juniper は、FreeBSD プロジェクトと商用製品を提供しているベンダとの間で協力関係が成功している数多くのベンダのひとつです。 将来 FreeBSD の新しい機能を JunOS へと統合する際の複雑さを減らすため、 Juniper で作成された改良点は、FreeBSD に取り込まれています。
+* link:http://www.mcafee.com/[McAfee] - Sidewinder などの McAfee エンタープライズファイアウォール製品のベースである SecurOS は FreeBSD ベースです。
+* link:http://www.netapp.com/[NetApp] - ストレージアプライアンスの Data ONTAP GX シリーズは、FreeBSD ベースです。 NetApp は、新しい BSD ライセンスのハイパーバイザである bhyve などの数多くの機能を FreeBSD プロジェクトに還元しています。
+* link:http://www.netflix.com/[Netflix] - Netflix が顧客へのストリームムービーに使用している OpenConnect アプライアンスは、FreeBSD ベースです。 Netflix は、コードベースに対し多大な貢献を行っており、 FreeBSD のメインラインからの差分がゼロになるように作業を行っています。 Netflix OpenConnect アプライアンスは、 北米の全インターネットトラフィックの 32% の配送を受け持っています。
+* link:http://www.sandvine.com/[Sandvine] - Sandvine は、 ハイパフォーマンスでリアルタイムのネットワークプロセッシングプラットフォームのベースに FreeBSD を使用しています。このプラットフォームは、 彼らのインテリジェントネットワークポリシーコントロール製品を構成しています。
+* link:http://www.sony.com/[Sony] - PlayStation Vita, PlayStation 4 および PlayStation 5 のゲームコンソールは、 FreeBSD の改良版が動いています。
+* link:http://www.sophos.com/[Sophos] - Sophos Email アプライアンス製品は、強化された FreeBSD がベースです。 インバウンドメールに対してスパムやウィルススキャンを行う一方で、 アウトバウンドメールがマルウェアではないか、また、 機密情報がアクシデントで漏洩してしまわないようにモニタします。
+* link:http://www.spectralogic.com/[Spectra Logic] - アーカイブグレードストレージアプライアンスの nTier シリーズは、FreeBSD および OpenZFS が動いています。
+* link:https://www.stormshield.com[Stormshield] - Stormshield ネットワークセキュリティアプライアンスは、 強化された FreeBSD がベースです。 BSD ライセンスが、彼らの知的財産のシステムへの統合を可能にする一方で、 コミュニティに非常に多くの興味深い開発結果をもたらしてくれます。
+* link:http://www.weather.com/[The Weather Channel] - 各ローカルケーブルプロバイダのヘッドエンドにインストールされていて、 ローカルの天気予報をケーブル TV ネットワークプログラムに送る IntelliStar アプライアンスでは FreeBSD が動いています。
+* link:http://www.verisign.com/[Verisign] - Verisign は .com および .net ルートドメインレジストリおよび関連する DNS インフラストラクチャの運用に責任を持っています。 彼らのインフラストラクチャに一般的な障害点がないように、FreeBSD を含むさまざまなネットワークオペレーティングシステムに信頼を寄せています。
+* link:http://www.voxer.com/[Voxer] - Voxer のモバイルボイスメッセージのプラットフォームでは、 ZFS が FreeBSD 上で動いています。 Voxer は、Solaris から派生したオペレーティングシステムから、 FreeBSD へと移行しました。優れた文書、 幅広く活動的なコミュニティ、 そして開発者にとって好意的な環境がその理由です。 ZFS および DTrace といった決定的な機能に加え、 FreeBSD では、 ZFS が TRIM に対応しています。
+* link:https://fudosecurity.com/en/[Fudo セキュリティ] - FUDO セキュリティアプライアンスは、 エンタープライズおよびシステムの管理者に対し、 モニタ、コントロール、レコードおよび audit コントラクタを提供します。 ZFS, GELI, Capsicum, HAST および auditdistd といった FreeBSD の最良なセキュリティ機能がベースとなっています。
また、FreeBSD は関連したオープンソースプロジェクトを数多く生み出しています。
-* http://bsdrp.net/[BSD Router] - 広く使われているエンタープライズルータの置き換えとなるような FreeBSD ベースのルータで、標準的な PC ハードウェアで動作するように設計されています。
-* https://www.truenas.com/[TrueNAS] は、ネットワークアタッチトストレージ (NAS) ソフトウェアです。
+* link:http://bsdrp.net/[BSD Router] - 広く使われているエンタープライズルータの置き換えとなるような FreeBSD ベースのルータで、標準的な PC ハードウェアで動作するように設計されています。
+* link:https://www.truenas.com/[TrueNAS] は、ネットワークアタッチトストレージ (NAS) ソフトウェアです。
データの共有およびランサムウェアやマルウェアといった現代の脅威からデータを保護します。
TrueNAS を使うことで、ユーザおよびクライアントデバイスは、仮想化および共有プロトコルを通して共有データに容易にアクセスできます。
-* https://ghostbsd.org/[GhostBSD] - は、FreeBSD から派生しました。 GhostBSD は、GTK 環境を使用し、 美しい見た目や使い勝手の良さを現代の BSD プラットフォームに実現し、 自然でネイティブな UNIX(R) 環境を提供します。
-* http://mfsbsd.vx.sk/[mfsBSD] - メモリから完全に実行可能な FreeBSD システムのイメージを構築するためのツールキットです。
-* https://xigmanas.com/[XigmaNAS] - PHP によるウェブインタフェースを搭載した FreeBSD ベースのファイルサーバのディストリビューションです。
-* http://www.opnsense.org/[OPNSense] - OPNsense は、オープンソースの使いやすく構築が簡単な FreeBSD ベースのファイアウォールおよびルータのプラットフォームです。 OPNsense は、 高価な商用のファイアウォールや標準で利用可能なほとんどの機能を持っています。 オープンで検証可能なソースと共に、 商品が提供している豊富な機能のセットを提供します。
-* https://www.midnightbsd.org[MidnightBSD] - は、 BSD から派生したオペレーティングシステムで、 デスクトップユーザを念頭において開発されています。 このオペレーティングシステムには、 メール、ウェブブラウザ、ワードプロセッサ、ゲームといった、 日々の生活で必要と思われるすべてのソフトウェアが含まれています。
-* https://nomadbsd.org[NomadBSD] - は、FreeBSD ベースの USB フラッシュドライブのための永続的な live システムです。
+* link:https://ghostbsd.org/[GhostBSD] は、FreeBSD から派生しており、GTK 環境を使用して美しい見た目や使い勝手の良さを現代の BSD プラットフォームに実現し、自然でネイティブな UNIX(R) 環境を提供します。
+* link:http://mfsbsd.vx.sk/[mfsBSD] - メモリから完全に実行可能な FreeBSD システムのイメージを構築するためのツールキットです。
+* link:https://xigmanas.com/[XigmaNAS] - PHP によるウェブインタフェースを搭載した FreeBSD ベースのファイルサーバのディストリビューションです。
+* link:http://www.opnsense.org/[OPNSense] は、オープンソースの使いやすく構築が簡単な FreeBSD ベースのファイアウォールおよびルータのプラットフォームです。 OPNsense は、 高価な商用のファイアウォールや標準で利用可能なほとんどの機能を持っています。 オープンで検証可能なソースと共に、 商品が提供している豊富な機能のセットを提供します。
+* link:https://www.midnightbsd.org[MidnightBSD] は、BSD から派生したオペレーティングシステムで、デスクトップユーザを念頭において開発されています。
+このオペレーティングシステムには、メール、ウェブブラウザ、ワードプロセッサ、ゲームといった、日々の生活で必要と思われるすべてのソフトウェアが含まれています。
+* link:https://nomadbsd.org[NomadBSD] は、FreeBSD ベースの USB フラッシュドライブのための永続的な live システムです。
ハードウェアを自動的に認識してセットアップを行い、すぐにデスクトップシステムとして使えるように設定します。
データリカバリ、教育および FreeBSD のハードウェア互換性の試験にも使用できます。
-* http://www.pfsense.org/[pfSense] - 数多くの機能および拡張 IPv6 サポートを持つ FreeBSD ベースのファイアウォールディストリビューションです。
-* http://zrouter.org/[ZRouter] - FreeBSD ベースの組み込みデバイス用のオープンソースのファームウェアです。 いつでも購入できるようなルータ上のプロプリエタリのファームウェアの置き換えとなるように設計されています。
+* link:http://www.pfsense.org/[pfSense] - 数多くの機能および拡張 IPv6 サポートを持つ FreeBSD ベースのファイアウォールディストリビューションです。
+* link:http://zrouter.org/[ZRouter] - FreeBSD ベースの組み込みデバイス用のオープンソースのファームウェアです。 いつでも購入できるようなルータ上のプロプリエタリのファームウェアの置き換えとなるように設計されています。
-FreeBSD Foundation のウェブサイトでは、link:https://www.freebsdfoundation.org/about/testimonials/[FreeBSD を製品やサービスのベースに利用している会社の声] が紹介されています。 Wikipedia にも link:http://en.wikipedia.org/wiki/List_of_products_based_on_FreeBSD[FreeBSD ベースの製品のリスト] がまとめられています。
+FreeBSD Foundation のウェブサイトでは、link:https://www.freebsdfoundation.org/about/testimonials/[FreeBSD を製品やサービスのベースに利用している会社の声] が紹介されています。
+Wikipedia にも link:http://en.wikipedia.org/wiki/List_of_products_based_on_FreeBSD[FreeBSD ベースの製品のリスト] がまとめられています。
[[history]]
== FreeBSD プロジェクトについて
@@ -189,20 +192,20 @@ FreeBSD プロジェクトの目的は、いかなる用途にも使用でき、
[[development]]
=== FreeBSD の開発モデル
-FreeBSD の開発は非常に開かれた、柔軟性のあるプロセスです。
+FreeBSD は extref:{dev-model}[非常に開かれた、柔軟性のあるプロセス] により開発されています。
extref:{contributors}[貢献者リスト] を見ていただければわかるとおり、FreeBSD は文字通り世界中の何千という人々の努力によって開発されています。
FreeBSD の開発環境は、この何千という開発者がインターネット経由で共同作業できるようになっているのです。
-新しい開発者はいつでも大歓迎ですので、link:{freebsd-hackers} にメールを送ってください。
-{freebsd-announce} もありますので、他の FreeBSD ユーザに自分のやっていることを宣伝したい時にはどうぞ使ってください。
+新しいボランティアはいつでも大歓迎です。
+また、より密接に関わりたいと考える方は extref:{contributing}[FreeBSD への貢献] という文書をご覧ください。
あと、FreeBSD プロジェクトとその開発プロセスについて、 どなたにも知っていていただきたいのは以下のようなことです。
Git リポジトリ[[development-cvs-repository]]::
-長年にわたり FreeBSD のソースツリーは、 ソースコード管理用のフリーソフトウェアである http://www.nongnu.org/cvs/[CVS] (Concurrent Versions System) によってメンテナンスされてきました。
-2008 年 6 月、プロジェクトはソースコード管理のシステムを https://subversion.apache.org[SVN] (Subversion) に移行しました。
+長年にわたり FreeBSD のソースツリーは、 ソースコード管理用のフリーソフトウェアである link:http://www.nongnu.org/cvs/[CVS] (Concurrent Versions System) によってメンテナンスされてきました。
+2008 年 6 月、プロジェクトはソースコード管理のシステムを link:https://subversion.apache.org[SVN] (Subversion) に移行しました。
ソースツリーの急速な増加や、これまでに蓄積された膨大な量の履歴によって、CVS の持つ技術的な限界が明かになってきたためです。
ドキュメンテーションプロジェクトと Ports Collection リポジトリも、それぞれ 2012 年 5 月と 7 月に CVS から SVN へと移行しました。
-そして 2020年 12 月、プロジェクトは https://www.freebsd.org/status/report-2020-10-2020-12.html#Git-Migration-Working-Group[ソースおよびドキュメンテーションのリポジトリ] を https://git-scm.com/[Git] へ移行し、2021 年 4 月に https://www.freebsd.org/status/report-2021-04-2021-06/#_git_migration_working_group[Ports] を移行しました。
+そして 2020年 12 月、プロジェクトは link:https://www.freebsd.org/status/report-2020-10-2020-12.html#Git-Migration-Working-Group[ソースおよびドキュメンテーションのリポジトリ] を link:https://git-scm.com/[Git] へ移行し、2021 年 4 月に link:https://www.freebsd.org/status/report-2021-04-2021-06/#_git_migration_working_group[Ports] を移行しました。
FreeBSD `src/` リポジトリを取得するための情報は crossref:cutting-edge[synching,ソースコードの入手] の章を、 FreeBSD Ports Collection を取得するための詳細については crossref:ports[ports-using,Ports Collection の利用] の章をご覧ください。
ソースツリー管理者[[development-committers]]::
@@ -211,7 +214,11 @@ _コミッター (committers)_ は Git リポジトリへの _push 権限_ を
FreeBSD メーリングリスト、IRC チャネルまたはフォーラムは、その問題がバグかどうかを確認する助けとなりますので、障害報告を提出する前に、これらを使って確認してください。
FreeBSD コアチーム[[development-core]]::
-_FreeBSD コアチーム_ は FreeBSD プロジェクトが会社だとすると取締役会にあたるものです。 コアチームとして一番重要な役割は FreeBSD プロジェクトが全体としてよい方向に向かっていることを確認することです。 責任感あふれる開発者を上記のソースツリー管理者として招くこと、 また仕事上の都合などでコアチームをやめた人たちの後任を見つけることもコアチームの役割です。 現在のコアチームは FreeBSD 開発者 (committer) の中から 2020 年 6 月に選挙によって選出されました。 コアチームを選出するための選挙は、2 年ごとに行なわれています。
+_FreeBSD コアチーム_ は FreeBSD プロジェクトが会社だとすると取締役会にあたるものです。
+コアチームとして一番重要な役割は FreeBSD プロジェクトが全体としてよい方向に向かっていることを確認することです。
+責任感あふれる開発者を上記のソースツリー管理者として招くこと、 また仕事上の都合などでコアチームをやめた人たちの後任を見つけることもコアチームの役割です。
+現在のコアチームは FreeBSD 開発者 (committer) の中から 2022 年 5 月に選挙によって選出されました。
+コアチームを選出するための選挙は、2 年ごとに行なわれています。
+
[NOTE]
@@ -219,22 +226,42 @@ _FreeBSD コアチーム_ は FreeBSD プロジェクトが会社だとすると
忘れてほしくないのは、多くの開発者同様に、 コアチームのほとんどは FreeBSD に対してボランティアの立場であり、 FreeBSD プロジェクトからは何ら金銭的な支援を受けていない、 ということです。ですから、 ここでの"責任"は "保証されたサポート"ではありません。 そういう意味で、上記の"取締役会" という例えはあまりよくないかもしれません。むしろ、FreeBSD のために人生を棒に振ってしまった人の集まりといった方が正しいかも...。
====
+The FreeBSD Foundation[[development-foundation]]::
+The link:https://freebsdfoundation.org[FreeBSD Foundation] は、FreeBSD プロジェクトおよびコミュニティを全世界的にサポートしたり促進することを目的としたアメリカ合衆国における 501(c)(3) に認定された非営利団体です。
+この Foundation は、ソフトウェア開発に対するプロジェクトの助成を通じて資金を提供したり、緊急の事態に対する迅速な対応や新しい特徴や機能の実装に対して、スタッフを提供します。
+FreeBSD のインフラストラクチャの改善および維持する目的でハードウェアを購入したり、テストカバレッジ、継続的インテグレーションおよび自動化の改善のためにスタッフを雇用しています。
+世界中で開催されている技術的な会議やイベントにおいて、FreeBSD をプロモーションすることで FreeBSD を宣伝しています。
+また、ワークショップ、教育的な教材やプレゼンテーションを提供して、より多くのユーザや FreeBSD の貢献者をリクルートしています。
+さらに、契約の締結、ライセンス契約、およびその他の法的主体必要となる協定において FreeBSD プロジェクトを代表しています。
+
その他のコントリビュータ::
-最後になりますが、 もっとも重要で多数をしめる開発者はフィードバックやバグフィクスをどんどん送ってくれるユーザ自身です。 FreeBSD の開発に関わっていきたいという人は、 議論の場である {freebsd-hackers} に参加するとよいでしょう。 FreeBSD 関連メーリングリストに関する詳細は、 crossref:eresources[eresources,インターネット上のリソース] をご覧ください。
+最後になりますが、 もっとも重要で多数をしめる開発者はフィードバックやバグフィクスをどんどん送ってくれるユーザ自身です。
+FreeBSD のベースシステムの開発に関わっていきたいという人は、 議論の場である {freebsd-hackers} に参加するとよいでしょう。
+サードパーティ製のアプリケーションの移植に関わる議論は、 {freebsd-ports} で行われています。
+FreeBSD のメーリングリストに関する詳細は、 crossref:eresources[eresources,インターネット上のリソース] をご覧ください。
+
extref:{contributors}[FreeBSD への貢献者リスト] は日に日に長くなっています。
-あなたも今日、何か送ることからはじめてみませんか?
-+
-もちろん FreeBSD に貢献するには、 コードを書くほかにもいろいろな方法があります。 助けが求められている分野については、link:https://www.FreeBSD.org/[FreeBSD プロジェクトのウェブサイト] をご覧ください。
+あなたも今日、extref:{contributing}[FreeBSD へ何か送ることからはじめてみませんか]?
+もちろん、コードを書くほかにもいろいろな方法があります!
-ひとことで言うと、FreeBSD の開発組織はゆるやかな同心円状になっています。 ともすると中央集権的に見えがちなこの組織は、 FreeBSD の _ユーザ_ がきちんと管理されたコードベースを 容易に追いかけられるようにデザインされているもので、 貢献したいという人を締め出す意図は全くありません! 私たちの目標は安定したオペレーティングシステムと 簡単にインストールして使うことのできる crossref:ports[ports,アプリケーション]を提供することです。 この方法は、それを達成するために非常にうまくはたらきます。
+ひとことで言うと、FreeBSD の開発組織はゆるやかな同心円状になっています。
+ともすると中央集権的に見えがちなこの組織は、 FreeBSD の _ユーザ_ がきちんと管理されたコードベースを 容易に追いかけられるようにデザインされているもので、 貢献したいという人を締め出す意図は全くありません!
+私たちの目標は安定したオペレーティングシステムと 簡単にインストールして使うことのできる crossref:ports[ports,アプリケーション]を提供することです。
+この方法は、それを達成するために非常にうまくはたらきます。
これから FreeBSD の開発にたずさわろうという人に、 私たちが望むことはただ一つです。 FreeBSD の成功を継続的なものにするために、 現在の開発者と同じような情熱を持って接してください!
[[third-party-programs]]
=== サードパーティ製プログラム
-FreeBSD では基本配布セットに加え、 移植されたソフトウェア集として数千の人気の高いプログラムを提供しています。 この文書を書いている時点で {numports} 以上の ports (移植ソフトウェア) が存在します。 ports には http サーバから、ゲーム、言語、 エディタまでありとあらゆるものが含まれています。 ports はオリジナルソースに対する "差分"という形で表現されており、 Ports Collection 全体でも {ports-size} 程度にしかなりません。 ports をコンパイルするには、 インストールしたいと思っているプログラムのディレクトリに移動し、 `make install` とすると、 あとはすべてシステムがやってくれます。 どの ports もオリジナルの配布セットを動的に取ってくるので、 ディスクは構築したいと思っている ports の分だけを準備しておけば十分です。 ほとんどの ports は、すでにコンパイルされた状態で "package" として提供されており、 ソースコードからコンパイルしたくない場合、これを使うと (`pkg install` というコマンドで) 簡単にインストールできます。 package と ports に関する詳細は、 crossref:ports[ports,アプリケーションのインストール - packages と ports] をご覧ください。
+FreeBSD では基本配布セットに加え、 移植されたソフトウェア集として数千の人気の高いプログラムを提供しています。
+ports には HTTP サーバから、ゲーム、言語、 エディタまでありとあらゆるものが含まれています。
+{numports} 以上の ports (移植ソフトウェア) が存在します。
+Ports Collection 全体でも {ports-size} 程度にしかなりません。
+ports をコンパイルするには、 インストールしたいと思っているプログラムのディレクトリに移動し、 `make install` とすると、 あとはすべてシステムがやってくれます。
+どの ports もオリジナルの配布セットを動的に取ってくるので、 ディスクは構築したいと思っている ports の分だけを準備しておけば十分です。
+ほとんどの ports は、すでにコンパイルされた状態で "package" として提供されており、ソースコードからコンパイルしたくない場合、これを使うと (`pkg install` というコマンドで) 簡単にインストールできます。
+package と ports に関する詳細は、 crossref:ports[ports,アプリケーションのインストール - packages と ports] をご覧ください。
=== ドキュメント
@@ -254,4 +281,4 @@ FreeBSD ハンドブック (英文オリジナル)::
FreeBSD に関する FAQ (英文オリジナル)::
[.filename]#link:file://localhost/usr/local/share/doc/freebsd/en/books/faq/book.html[/usr/local/share/doc/freebsd/en/books/faq/book.html]#
-最新版は常に link:https://www.FreeBSD.org/[https://www.FreeBSD.org/] にありますので、こちらも参照してください。
+最新版の文書は常に link:https://docs.FreeBSD.org/[https://docs.FreeBSD.org/] にありますので、こちらも参照してください。
diff --git a/documentation/content/ja/books/handbook/kernelconfig/_index.adoc b/documentation/content/ja/books/handbook/kernelconfig/_index.adoc
index c35442f8a7..20898081fb 100644
--- a/documentation/content/ja/books/handbook/kernelconfig/_index.adoc
+++ b/documentation/content/ja/books/handbook/kernelconfig/_index.adoc
@@ -3,9 +3,12 @@ title: 第8章 FreeBSD カーネルのコンフィグレーション
part: パートII. 日々の生活
prev: books/handbook/multimedia
next: books/handbook/printing
+description: この章では、FreeBSD カーネルの設定方法、いつカスタムカーネルの構築が必要になるか、ハードウェア一覧の作成方法、カーネルコンフィグレーションファイルのカスタマイズの方法などを扱っています。
+tags: ["configuring", "kernel", "custom kernel", "hardware requirements", "pciconf"]
showBookMenu: true
weight: 11
-path: "/books/handbook/"
+path: "/books/handbook/kernelconfig/"
+aliases: ["/ja/books/handbook/kernelconfig-custom-kernel/","/ja/books/handbook/kernelconfig-devices/","/ja/books/handbook/kernelconfig-config/","/ja/books/handbook/kernelconfig-building/","/ja/books/handbook/kernelconfig-trouble/"]
---
[[kernelconfig]]
@@ -79,7 +82,10 @@ endif::[]
カスタムカーネルを構築する前に、再構築する理由を考えてください。 ある特定のハードウェアに対応する必要がある場合に、 そのハードウェアに対応するためのモジュールがすでに用意されていることがあります。
-カーネルモジュールは [.filename]#/boot/kernel# にあります。モジュールによっては man:kldload[8] により、 すでに実行中のカーネルに動的に読み込まれています。 ほとんどのカーネルドライバには、 読み込み可能なモジュールやマニュアルページが用意されています。 たとえば、man:ath[4] ワイヤレスイーサネットドライバのマニュアルページには以下のような記述があります。
+カーネルモジュールは [.filename]#/boot/kernel# にあります。
+モジュールによっては man:kldload[8] により、すでに実行中のカーネルに動的に読み込まれています。
+ほとんどのカーネルドライバには、読み込み可能なモジュールやマニュアルページが用意されています。
+たとえば、man:ath[4] ワイヤレスネットワークドライバのマニュアルページには以下のような記述があります。
[source,shell]
....
@@ -147,7 +153,8 @@ ath_hal(4) - Atheros Hardware Access Layer (HAL)
カスタムカーネルのコンフィグレーションファイルを作成し、 カスタムカーネルを構築するには、 FreeBSD の全ソースツリーがまずインストールされている必要があります。
-もし [.filename]#/usr/src/# が存在していなかったり、空であれば、 カーネルのソースはインストールされていません。 crossref:mirrors[svn,「Subversion を使う」] で説明した Subversion を使ってソースをインストールしてください。
+もし [.filename]#/usr/src/# が存在していなかったり、空であれば、 カーネルのソースはインストールされていません。
+crossref:mirrors[git,「Git の利用」] で説明した Git を使ってソースをインストールしてください。
ソースをインストールしたら、 [.filename]#/usr/src/sys# を確認して下さい。 このディレクトリには、いくつものサブディレクトリがあります。 その中には、サポートされている各アーキテクチャ [.filename]#amd64#, [.filename]#i386#, [.filename]#powerpc# および [.filename]#sparc64# のサブディレクトリがあります。 各アーキテクチャのディレクトリ内部にあるファイルはすべてそのアーキテクチャでのみ使用されます。 残りのコードは、アーキテクチャに依存しない、 すべてのプラットフォームで共有されるコードです。 サポートされている各アーキテクチャには、 [.filename]#conf# サブディレクトリがあり、 そのアーキテクチャ用の [.filename]#GENERIC# カーネルコンフィグレーションファイルが用意されています。
@@ -161,7 +168,11 @@ ath_hal(4) - Atheros Hardware Access Layer (HAL)
これで、[.filename]#MYKERNEL# を ASCII テキストエディタで編集できます。 初心者に対してより簡単なエディタである ee も FreeBSD とともにインストールされていますが、 デフォルトのエディタは vi です。
-コンフィグレーションファイルのフォーマットはシンプルです。 各行はデバイスやサブシステム、引数、または簡単な説明を含んでいます。 `#` に続くテキストはすべてコメントとして扱われ、 無視されます。 カーネルからデバイスもしくはサブシステムのサポートを外すには、 対応する行の最初に `#` を入れてください。 理解していない行に対しては、`#` を追加したり削除しないでください。
+コンフィグレーションファイルのフォーマットはシンプルです。
+各行はデバイスやサブシステム、引数、または簡単な説明を含んでいます。
+`+#+` に続くテキストはすべてコメントとして扱われ、無視されます。
+カーネルからデバイスもしくはサブシステムのサポートを外すには、対応する行の最初に `+#+` を入れてください。
+理解していない行に対しては、`+#+` を追加したり削除しないでください。
[WARNING]
====
@@ -220,9 +231,9 @@ options IPDIVERT
カスタムコンフィグレーションファイルを編集して保存したら、 カーネルのソースコードを以下の手順でコンパイルしてください。
[.procedure]
-====
++====
*Procedure: カーネルの構築*
-
++
. 以下のディレクトリに移動してください。
+
[source,shell]
@@ -289,7 +300,9 @@ config: line 17: syntax error
+
[NOTE]
====
-カーネルの構築中にトラブルが起きた時には、 次回の構築で消されないように、 [.filename]#GENERIC# のコピーや他の正常に起動するカーネルを別の名前で保存するようにしてください。 _kernel.old_ は新しいカーネルをインストールする時に、 その一つ前にインストールした、 うまく動かないかもしれないカーネルで上書きされてしまうため、 起動するカーネルを保存しておくことは重要です。 できる限り早く以下のようにして、 正しく起動するカーネルを含むディレクトリ名に変更してください。
+カーネルのトラブルシューティングを行う時には、 [.filename]#GENERIC# といった正常に起動するカーネルのコピーを保存するようにしてください。
+_kernel.old_ は新しいカーネルをインストールする時に、その一つ前にインストールした、うまく動かないかもしれないカーネルで上書きされてしまうため、起動するカーネルを保存しておくことは重要です。
+できる限り早く以下のようにして、正しく起動するカーネルを含むディレクトリ名に変更してください。
[source,shell]
....
diff --git a/documentation/content/ja/books/handbook/l10n/_index.adoc b/documentation/content/ja/books/handbook/l10n/_index.adoc
index 21274c0b82..24ff01e895 100644
--- a/documentation/content/ja/books/handbook/l10n/_index.adoc
+++ b/documentation/content/ja/books/handbook/l10n/_index.adoc
@@ -1,13 +1,13 @@
---
-title: 第16章 地域化 (localization) - i18n/L10n の利用と設定
+title: 第15章 地域化 (localization) - i18n/L10n の利用と設定
part: パートIII. システム管理
prev: books/handbook/disks
next: books/handbook/cutting-edge
description: FreeBSD は多くの言語への地域化に対応しており、 ユーザは、英語以外の言語を見たり、入力したり、処理したりできます。
tags: ["i18n", "L10n", "localization", "Locale", "LANG", "MM_CHARSET", "cap_mkdb"]
showBookMenu: true
-weight: 20
-path: "/books/handbook/"
+weight: 19
+path: "/books/handbook/l10n/"
---
[[l10n]]
@@ -18,7 +18,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 16
+:sectnumoffset: 15
:partnums:
:source-highlighter: rouge
:experimental:
diff --git a/documentation/content/ja/books/handbook/linuxemu/_index.adoc b/documentation/content/ja/books/handbook/linuxemu/_index.adoc
index d312210be9..7dccd9c259 100644
--- a/documentation/content/ja/books/handbook/linuxemu/_index.adoc
+++ b/documentation/content/ja/books/handbook/linuxemu/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/printing
next: books/handbook/partiii
showBookMenu: true
weight: 13
-path: "/books/handbook/"
+path: "/books/handbook/linuxemu/"
---
[[linuxemu]]
diff --git a/documentation/content/ja/books/handbook/mail/_index.adoc b/documentation/content/ja/books/handbook/mail/_index.adoc
index cec908a3c6..150a2b27b9 100644
--- a/documentation/content/ja/books/handbook/mail/_index.adoc
+++ b/documentation/content/ja/books/handbook/mail/_index.adoc
@@ -1,11 +1,11 @@
---
-title: 第20章 電子メール
+title: 第19章 電子メール
part: パートIV. ネットワーク通信
prev: books/handbook/ppp-and-slip
next: books/handbook/advanced-networking
showBookMenu: true
-weight: 25
-path: "/books/handbook/"
+weight: 24
+path: "/books/handbook/mail/"
---
[[mail]]
@@ -16,7 +16,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 20
+:sectnumoffset: 19
:partnums:
:source-highlighter: rouge
:experimental:
@@ -404,7 +404,7 @@ FEATURE(use_cw_file) を指定してある場合には
sendmail FAQ は http://www.sendmail.org/faq[http://www.sendmail.org/faq] にありますので、 メールの設定に "おかしなこと" があれば常に読んでください。
-=== ダイアルアップ PPPPPP ホストでメールサーバを実行するにはどうしたらいいの?
+=== ダイアルアップ PPP ホストでメールサーバを実行するにはどうしたらいいの?
LAN 上にある FreeBSD マシンを、 インターネットに接続したいとします。FreeBSD マシンは、その LAN でのメールゲートウェイになります。FreeBSD マシンは専用線接続ではありません (訳注: ダイアルアップ接続など)。
diff --git a/documentation/content/ja/books/handbook/mirrors/_index.adoc b/documentation/content/ja/books/handbook/mirrors/_index.adoc
index 59e3898721..50f6876d18 100644
--- a/documentation/content/ja/books/handbook/mirrors/_index.adoc
+++ b/documentation/content/ja/books/handbook/mirrors/_index.adoc
@@ -6,8 +6,9 @@ next: books/handbook/bibliography
description: "FreeBSD の入手方法: CD および DVD セット, FTP サイト, Git のインストールおよび利用方法"
tags: ["入手方法", "CD", "DVD", "FTP", "Git"]
showBookMenu: true
-weight: 28
-path: "/books/handbook/"
+weight: 27
+path: "/books/handbook/mirrors/"
+aliases: ["/en/books/handbook/mirrors-ftp/","/en/books/handbook/svn/","/en/books/handbook/mirrors-rsync/"]
---
[appendix]
@@ -53,7 +54,7 @@ endif::[]
FreeBSD の公式のミラーサイトは、プロジェクトクラスタの管理者により運用されている数多くのコンピュータから構成されています。
GeoDNS により、ユーザには近くの利用可能なミラーが提供されます。
-現在ミラーサイトが置かれている地域は、オーストラリア、ブラジル、日本 (2 つのサイト)、マレーシア、オランダ、南アフリカ、台湾、英国、アメリカ合衆国 (カリフォルニア、ニュージャージーおよびワシントン) です。
+現在ミラーサイトが置かれている地域は、オーストラリア、ブラジル、ドイツ、日本 (2 つのサイト)、マレーシア、オランダ、南アフリカ、台湾、英国、アメリカ合衆国 (カリフォルニア、ニュージャージーおよびワシントン) です。
公式のミラーサービス:
@@ -72,6 +73,10 @@ GeoDNS により、ユーザには近くの利用可能なミラーが提供さ
| **pkg.FreeBSD.org**
| `http` および `https` 経由の man:pkg[8]
| man:pkg[8] プログラムにより利用される公式の FreeBSD package リポジトリ
+
+| **vuxml.FreeBSD.org** / **www.VuXML.org**
+| link:https://www.vuxml.org/[https]
+| FreeBSD プロジェクトの VuXML ウェブページ。`pkg audit` はこのサービスから脆弱性に関する一覧をダウンロードします。
|===
すべての公式のミラーは、IPv4 および IPv6 に対応しています。
@@ -196,7 +201,7 @@ http://ftp-archive.FreeBSD.org は GeoDNS インフラストラクチャでは
| ラトビア icon:envelope[link=mailto:{mirrors-latvia-email}, title="mirror contact"]
| ftp.lv.FreeBSD.org
-| link:http://ftp.lv.FreeBSD.org/pub/FreeBSD[http] link:ftp://ftp.lv.FreeBSD.org/pub/FreeBSD[ftp]
+| link:http://ftp.lv.FreeBSD.org/freebsd[http] link:ftp://ftp.lv.FreeBSD.org/freebsd[ftp]
| オランダ icon:envelope[link=mailto:{mirrors-netherlands-email}, title="mirror contact"]
| ftp.nl.FreeBSD.org
@@ -295,7 +300,7 @@ http://ftp-archive.FreeBSD.org は GeoDNS インフラストラクチャでは
====
一般的には Git は開発用ツールです。
ユーザは好みに合わせて、FreeBSD ベースシステムのアップデートに `freebsd-update` (crossref:cutting-edge[updating-upgrading-freebsdupdate,“FreeBSD Update”])、
-FreeBSD Ports Collection のアップデートに `portsnap` (crossref:ports[ports-using,“Ports Collection の利用”]を使用できます。
+FreeBSD Ports Collection のアップデートに `git` (crossref:ports[ports-using,“Ports Collection の利用”]を使用できます。
====
この章では、FreeBSD への Git のインストール方法および FreeBSD ソースコードリポジトリのローカルコピーの作成方法について説明します。
@@ -433,7 +438,7 @@ git リポジトリの `stable/11`, `stable/12` および関連するリリー
[NOTE]
====
-一般的には Subversion は開発者向けのツールです。
-ユーザは好みに応じて、FreeBSD のベースシステムのアップデートに `freebsd-update` (crossref:cutting-edge[updating-upgrading-freebsdupdate,「FreeBSD Update」])、Ports Collection のアップデートには `portsnap` (crossref:ports[ports-using,「Ports Collection の利用」]) を使用できます。
+ユーザは好みに応じて、FreeBSD のベースシステムのアップデートに `freebsd-update` (crossref:cutting-edge[updating-upgrading-freebsdupdate,「FreeBSD Update」])、Ports Collection のアップデートには `git` (crossref:ports[ports-using,「Ports Collection の利用」]) を使用できます。
2021 年 3 月以降、subversion はレガシーブランチ (`stable/11` および `stable/12`) でのみ使用されます。
====
diff --git a/documentation/content/ja/books/handbook/multimedia/_index.adoc b/documentation/content/ja/books/handbook/multimedia/_index.adoc
index 8fe084d028..247b14868d 100644
--- a/documentation/content/ja/books/handbook/multimedia/_index.adoc
+++ b/documentation/content/ja/books/handbook/multimedia/_index.adoc
@@ -7,7 +7,7 @@ description: FreeBSD は数多くの種類のサウンドカードに対応し
tags: ["multimedia", "sound card", "MP3", "MythTV", "scanner", "SANE"]
showBookMenu: true
weight: 10
-path: "/books/handbook/"
+path: "/books/handbook/multimedia/"
---
[[multimedia]]
diff --git a/documentation/content/ja/books/handbook/parti.adoc b/documentation/content/ja/books/handbook/parti.adoc
index 4be154220c..c26e4bc4f1 100644
--- a/documentation/content/ja/books/handbook/parti.adoc
+++ b/documentation/content/ja/books/handbook/parti.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/preface
next: books/handbook/introduction
showBookMenu: true
weight: 2
-path: "/books/handbook/"
+path: "/books/handbook/parti/"
---
[[getting-started]]
diff --git a/documentation/content/ja/books/handbook/partii.adoc b/documentation/content/ja/books/handbook/partii.adoc
index 4369b371b8..690f968be0 100644
--- a/documentation/content/ja/books/handbook/partii.adoc
+++ b/documentation/content/ja/books/handbook/partii.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/x11
next: books/handbook/desktop
showBookMenu: true
weight: 8
-path: "/books/handbook/"
+path: "/books/handbook/partii/"
---
[[common-tasks]]
diff --git a/documentation/content/ja/books/handbook/partiii.adoc b/documentation/content/ja/books/handbook/partiii.adoc
index c5b9f05163..c971b998a7 100644
--- a/documentation/content/ja/books/handbook/partiii.adoc
+++ b/documentation/content/ja/books/handbook/partiii.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/linuxemu
next: books/handbook/config
showBookMenu: true
weight: 14
-path: "/books/handbook/"
+path: "/books/handbook/partiii/"
---
[[system-administration]]
diff --git a/documentation/content/ja/books/handbook/partiv.adoc b/documentation/content/ja/books/handbook/partiv.adoc
index b9a5161a9f..625f694656 100644
--- a/documentation/content/ja/books/handbook/partiv.adoc
+++ b/documentation/content/ja/books/handbook/partiv.adoc
@@ -3,8 +3,8 @@ title: パートIV. ネットワーク通信
prev: books/handbook/cutting-edge
next: books/handbook/serialcomms
showBookMenu: true
-weight: 22
-path: "/books/handbook/"
+weight: 21
+path: "/books/handbook/partiv/"
---
[[network-communication]]
diff --git a/documentation/content/ja/books/handbook/partv.adoc b/documentation/content/ja/books/handbook/partv.adoc
index 359580d680..808e9f0a8f 100644
--- a/documentation/content/ja/books/handbook/partv.adoc
+++ b/documentation/content/ja/books/handbook/partv.adoc
@@ -3,8 +3,8 @@ title: パートV. 付録
prev: books/handbook/advanced-networking
next: books/handbook/mirrors
showBookMenu: true
-weight: 27
-path: "/books/handbook/"
+weight: 26
+path: "/books/handbook/partv/"
---
[[appendices]]
diff --git a/documentation/content/ja/books/handbook/pgpkeys/_index.adoc b/documentation/content/ja/books/handbook/pgpkeys/_index.adoc
index 5ed591f80b..2ed6b3c0c6 100644
--- a/documentation/content/ja/books/handbook/pgpkeys/_index.adoc
+++ b/documentation/content/ja/books/handbook/pgpkeys/_index.adoc
@@ -4,8 +4,8 @@ part: パートV. 付録
prev: books/handbook/eresources
next: books/handbook/freebsd-glossary
showBookMenu: true
-weight: 31
-path: "/books/handbook/"
+weight: 30
+path: "/books/handbook/pgpkeys/"
---
[appendix]
@@ -59,9 +59,6 @@ endif::[]
=== {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/ja/books/handbook/ports/_index.adoc b/documentation/content/ja/books/handbook/ports/_index.adoc
index ff8d4df6b1..f2d72e2271 100644
--- a/documentation/content/ja/books/handbook/ports/_index.adoc
+++ b/documentation/content/ja/books/handbook/ports/_index.adoc
@@ -7,7 +7,8 @@ description: "FreeBSD は、サードパーティ製のソフトウェアの導
tags: ["ports", "collection", "pkg", "poudriere", "管理"]
showBookMenu: true
weight: 6
-path: "/books/handbook/"
+path: "/books/handbook/ports/"
+aliases: ["/ja/books/handbook/ports-overview/","/ja/books/handbook/ports-finding-applications/","/ja/books/handbook/pkgng-intro/","/ja/books/handbook/ports-using/","/ja/books/handbook/ports-poudriere/","/ja/books/handbook/ports-nextsteps/","/ja/books/handbook/ports-broken/"]
---
[[ports]]
@@ -188,7 +189,7 @@ Info: Lists information about open files (similar to fstat(1))
Maint: ler@lerctr.org
Index: sysutils
B-deps:
-R-deps:
+R-deps:
....
+
[TIP]
@@ -611,50 +612,6 @@ port の構築の展開部で、ダウンロードされたソースは自動的
port を用いてアプリケーションをコンパイルできるようにするには、 まず最初に Ports Collection をインストールする必要があります。 FreeBSD のインストール時に Ports Collection をインストールしていない場合には、 以下の方法のどれかを用いてインストールしてください。
-[[ports-using-portsnap-method]]
-[.procedure]
-====
-*Procedure: Portsnap を利用する方法*
-
-FreeBSD のベースシステムには、Portsnap が含まれています。 これは Ports Collection を取得するための速くて使いやすく、 多くのユーザ (FreeBSD-CURRENT を使っているユーザは除きます) に推奨されるツールです。 このユーティリティは、FreeBSD のサイトに接続し、セキュリティキーを検証し、 Ports Collection の最新版をダウンロードします。 セキュリティキーは、 ダウンロードしたすべてのファイルの検証に用いられます。
-
-+Note that Portsnap updates are generated from a snapshot of the main
-+branch of the Ports Collection and cannot be configured to use a
-+different branch (for example, `quarterly`).
-+If it is necessary to use a different branch of the Ports Collection
-+(for instance as referenced earlier in conjunction with binary
-+packages), then the <<ports-using-git-method,Git method>> must be used.
-+
-. 圧縮された Ports Collection のスナップショットを [.filename]#/var/db/portsnap# にダウンロードするには以下を実行してください。
-+
-[source,shell]
-....
-# portsnap fetch
-....
-+
-. 初めて Portsnap を使う時は、 スナップショットをまず [.filename]#/usr/ports# に展開してください。
-+
-[source,shell]
-....
-# portsnap extract
-....
-+
-. 上で示した Portsnap を初めて利用する際に行うコマンドを実行した後は、 以下のコマンドで [.filename]#/usr/ports# をアップデートしてください。
-+
-[source,shell]
-....
-# portsnap fetch
-# portsnap update
-....
-+
-`fetch` を使う場合には、以下のよう `extract` または `update` を連続して行うことができます。
-+
-[source,shell]
-....
-# portsnap fetch update
-....
-====
-
[[ports-using-git-method]]
[.procedure]
====
@@ -855,7 +812,7 @@ port が削除されるときに表示されるメッセージを読むことを
ports のインストール後、時間が経過すると、Ports Collection で新しいバージョンのソフトウェアを利用できるようになります。 この章では、 どのようにしてアップグレードする必要のあるソフトウェアを判断するか、 そしてアップグレードの方法について説明します。
-インストールされている ports の新しいバージョンを利用できるかどうかを知るには、まず、 最新の ports ツリーがインストールされていることを確認してください。 これには、<<ports-using-portsnap-method,「Portsnap を利用する方法」>> もしくは <<ports-using-git-method,「Git を用いる方法」>> で書かれているアップデートのコマンドを使ってください。
+インストールされている ports の新しいバージョンを利用できるかどうかを知るには、まず、 最新の ports ツリーがインストールされていることを確認してください。 これには、<<ports-using-git-method,「Git を用いる方法」>> で書かれているアップデートのコマンドを使ってください。
FreeBSD 10 以降のシステム、または、pkg に変換されたシステムでは、 以下のコマンドを実行すると、現在利用可能なバージョンよりも古い ports の一覧が表示されます。
[source,shell]
@@ -1051,25 +1008,25 @@ poudriere を実行するシステムで、 必ずしも ZFS を使う必要は
[source,shell]
....
-# poudriere jail -c -j 11amd64 -v 11.4-RELEASE
-[00:00:00] Creating 11amd64 fs at /poudriere/jails/11amd64... done
-[00:00:00] Using pre-distributed MANIFEST for FreeBSD 11.4-RELEASE amd64
-[00:00:00] Fetching base for FreeBSD 11.4-RELEASE amd64
-/poudriere/jails/11amd64/fromftp/base.txz 125 MB 4110 kBps 31s
+# poudriere jail -c -j 13amd64 -v 13.1-RELEASE
+[00:00:00] Creating 13amd64 fs at /poudriere/jails/13amd64... done
+[00:00:00] Using pre-distributed MANIFEST for FreeBSD 13.1-RELEASE amd64
+[00:00:00] Fetching base for FreeBSD 13.1-RELEASE amd64
+/poudriere/jails/13amd64/fromftp/base.txz 125 MB 4110 kBps 31s
[00:00:33] Extracting base... done
-[00:00:54] Fetching src for FreeBSD 11.4-RELEASE amd64
-/poudriere/jails/11amd64/fromftp/src.txz 154 MB 4178 kBps 38s
+[00:00:54] Fetching src for FreeBSD 13.1-RELEASE amd64
+/poudriere/jails/13amd64/fromftp/src.txz 154 MB 4178 kBps 38s
[00:01:33] Extracting src... done
-[00:02:31] Fetching lib32 for FreeBSD 11.4-RELEASE amd64
-/poudriere/jails/11amd64/fromftp/lib32.txz 24 MB 3969 kBps 06s
+[00:02:31] Fetching lib32 for FreeBSD 13.1-RELEASE amd64
+/poudriere/jails/13amd64/fromftp/lib32.txz 24 MB 3969 kBps 06s
[00:02:38] Extracting lib32... done
[00:02:42] Cleaning up... done
[00:02:42] Recording filesystem state for clean... done
[00:02:42] Upgrading using ftp
-/etc/resolv.conf -> /poudriere/jails/11amd64/etc/resolv.conf
+/etc/resolv.conf -> /poudriere/jails/13amd64/etc/resolv.conf
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching public key from update4.freebsd.org... done.
-Fetching metadata signature for 11.4-RELEASE from update4.freebsd.org... done.
+Fetching metadata signature for 13.1-RELEASE from update4.freebsd.org... done.
Fetching metadata index... done.
Fetching 2 metadata files... done.
Inspecting system... done.
@@ -1078,7 +1035,7 @@ Fetching 124 patches.....10....20....30....40....50....60....70....80....90....1
Applying patches... done.
Fetching 6 files... done.
The following files will be added as part of updating to
-11.4-RELEASE-p1:
+13.1-RELEASE-p1:
/usr/src/contrib/unbound/.github
/usr/src/contrib/unbound/.github/FUNDING.yml
/usr/src/contrib/unbound/contrib/drop2rpz
@@ -1087,14 +1044,14 @@ The following files will be added as part of updating to
/usr/src/contrib/unbound/services/rpz.h
/usr/src/lib/libc/tests/gen/spawnp_enoexec.sh
The following files will be updated as part of updating to
-11.4-RELEASE-p1:
+13.1-RELEASE-p1:
[…]
Installing updates...Scanning //usr/share/certs/blacklisted for certificates...
Scanning //usr/share/certs/trusted for certificates...
done.
-11.4-RELEASE-p1
+13.1-RELEASE-p1:
[00:04:06] Recording filesystem state for clean... done
-[00:04:07] Jail 11amd64 11.4-RELEASE-p1 amd64 is ready to be used
+[00:04:07] Jail 13amd64 13.1-RELEASE-p1 amd64 is ready to be used
....
[source,shell]
@@ -1107,10 +1064,10 @@ Scanning //usr/share/certs/trusted for certificates...
一つのコンピュータ上で、 複数の設定、複数の jails、異なる port ツリーから poudriere は port をビルドできます。 これらのコンビネーションのカスタム設定は _セット_ と呼ばれます。 詳細については、package:ports-mgmt/poudriere[] もしくは package:ports-mgmt/poudriere-devel[] をインストール後、 man:poudriere[8] の CUSTOMIZATION の章をご覧下さい。
ここで示される基本設定では、jail, ports そしてセット固有の [.filename]#make.conf# を [.filename]#/usr/local/etc/poudriere.d# に置いてください。
-この例でのファイル名 [.filename]#11amd64-local-workstation-make.conf# は、jail 名、port 名そして、セット名の組み合わせで付けられています。
+この例でのファイル名 [.filename]#13amd64-local-workstation-make.conf# は、jail 名、port 名そして、セット名の組み合わせで付けられています。
システムの [.filename]#make.conf# と、この新しいファイルは、ビルド時に結合され、構築した jail で用いられる [.filename]#make.conf# を作成します。
-ビルドする package を [.filename]#11amd64-local-workstation-pkglist# に記載してください。
+ビルドする package を [.filename]#13amd64-local-workstation-pkglist# に記載してください。
[.programlisting]
....
@@ -1124,14 +1081,14 @@ ports-mgmt/pkg
[source,shell]
....
-# poudriere options -j 11amd64 -p local -z workstation -f 11amd64-local-workstation-pkglist
+# poudriere options -j 13amd64 -p local -z workstation -f 13amd64-local-workstation-pkglist
....
最後に packages を構築し、 package リポジトリを生成してください。
[source,shell]
....
-# poudriere bulk -j 11amd64 -p local -z workstation -f 11amd64-local-workstation-pkglist
+# poudriere bulk -j 13amd64 -p local -z workstation -f 13amd64-local-workstation-pkglist
....
このコマンドの実行中に kbd:[Ctrl+t] を押すと、現在のビルド状況が表示されます。 Poudriere は [.filename]#/poudriere/logs/bulk/jailname# にあるファイルも構築します。 このファイルをウェブサーバと共に使うことで、 ビルド情報を表示できます。
@@ -1152,15 +1109,15 @@ FreeBSD: {
....
通常は、HTTP 経由で poudriere リポジトリをクライアントコンピュータに公開すると簡単です。
-package ディレクトリ (たとえば、 [.filename]#/usr/local/poudriere/data/packages/11amd64# ) を公開するようにウェブサーバを設定してください。
-この例で [.filename]#11amd64# は構築名です。
+package ディレクトリ (たとえば、 [.filename]#/usr/local/poudriere/data/packages/13amd64# ) を公開するようにウェブサーバを設定してください。
+この例で [.filename]#13amd64# は構築名です。
-もし、package リポジトリの URL が `http://pkg.example.com/11oamd64` であれば、 リポジトリの設定ファイルである [.filename]#/usr/local/etc/pkg/repos/custom.conf# は、 以下のようになります。
+もし、package リポジトリの URL が `http://pkg.example.com/13amd64` であれば、 リポジトリの設定ファイルである [.filename]#/usr/local/etc/pkg/repos/custom.conf# は、 以下のようになります。
[.programlisting]
....
custom: {
- url: "http://pkg.example.com/11amd64",
+ url: "http://pkg.example.com/13amd64",
enabled: yes,
}
....
diff --git a/documentation/content/ja/books/handbook/ppp-and-slip/_index.adoc b/documentation/content/ja/books/handbook/ppp-and-slip/_index.adoc
index 1cdbf574cc..8ed0a220a3 100644
--- a/documentation/content/ja/books/handbook/ppp-and-slip/_index.adoc
+++ b/documentation/content/ja/books/handbook/ppp-and-slip/_index.adoc
@@ -1,11 +1,11 @@
---
-title: 第19章 PPP と SLIP
+title: 第18章 PPP と SLIP
part: パートIV. ネットワーク通信
prev: books/handbook/serialcomms
next: books/handbook/mail
showBookMenu: true
-weight: 24
-path: "/books/handbook/"
+weight: 23
+path: "/books/handbook/ppp-and-slip/"
---
[[ppp-and-slip]]
@@ -16,7 +16,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 19
+:sectnumoffset: 18
:partnums:
:source-highlighter: rouge
:experimental:
diff --git a/documentation/content/ja/books/handbook/preface/_index.adoc b/documentation/content/ja/books/handbook/preface/_index.adoc
index c159d3f9a0..7489b1f838 100644
--- a/documentation/content/ja/books/handbook/preface/_index.adoc
+++ b/documentation/content/ja/books/handbook/preface/_index.adoc
@@ -6,7 +6,7 @@ description: 最初の部分は FreeBSD を使い始めた人向けで、FreeBSD
tags: ["preface", "audience", "organization", "conventions", "acknowledgments"]
showBookMenu: true
weight: 1
-path: "/books/handbook/"
+path: "/books/handbook/preface/"
---
[preface]
diff --git a/documentation/content/ja/books/handbook/printing/_index.adoc b/documentation/content/ja/books/handbook/printing/_index.adoc
index 471d3f5135..7c3bea7d11 100644
--- a/documentation/content/ja/books/handbook/printing/_index.adoc
+++ b/documentation/content/ja/books/handbook/printing/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/kernelconfig
next: books/handbook/linuxemu
showBookMenu: true
weight: 12
-path: "/books/handbook/"
+path: "/books/handbook/printing/"
---
[[printing]]
diff --git a/documentation/content/ja/books/handbook/security/_index.adoc b/documentation/content/ja/books/handbook/security/_index.adoc
index 56f1ad8df2..cea2aa4fb9 100644
--- a/documentation/content/ja/books/handbook/security/_index.adoc
+++ b/documentation/content/ja/books/handbook/security/_index.adoc
@@ -1,11 +1,11 @@
---
-title: 第14章 セキュリティ
+title: 第13章 セキュリティ
part: パートIII. システム管理
-prev: books/handbook/users
+prev: books/handbook/boot
next: books/handbook/disks
showBookMenu: true
-weight: 18
-path: "/books/handbook/"
+weight: 17
+path: "/books/handbook/security/"
---
[[security]]
@@ -16,7 +16,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 14
+:sectnumoffset: 13
:partnums:
:source-highlighter: rouge
:experimental:
@@ -1648,78 +1648,185 @@ portaudit は強力で、 portmaster port と共に使うときわめて有用
[[security-advisories]]
== FreeBSD セキュリティ勧告
-多くの高品質なオペレーティングシステムと同様、 FreeBSD は "セキュリティ勧告" を発行しています。 これらの勧告は、通常セキュリティに関連したのメーリングリストに投稿され、 サポートされているリリースに対してパッチが作成された後、 Errata に記載されます。 この章では、セキュリティ勧告とは何か、どのように理解すべきか、 システムにパッチを当てるにはどのように対応すればよいかについて説明します。
+多くの高品質なオペレーティングシステムのプロジェクト同様、 FreeBSD プロジェクトはセキュリティチームを持っています。
+このチームは責任をもって、各 FreeBSD リリースに対する保守終了 (End-of-Life (EoL)) 日を決めたり、サポートされているリリースに対して、EoL までセキュリティアップデートを提供しています。
+FreeBSD セキュリティチームおよびサポートされているリリースについての情報は、link:https://www.FreeBSD.org/ja/security[FreeBSD セキュリティページ] で提供されています。
+
+セキュリティチームの仕事の 1 つは FreeBSD オペレーティングシステムのセキュリティ脆弱性に対応することです。
+脆弱性が確認されると、セキュリティチームは脆弱性を修正するために必要となる手続きを検証し、修正を含めるようにソースコードをアップデートします。
+その後、詳細を "セキュリティ勧告" として発行しています。
+セキュリティ勧告は、 link:https://www.FreeBSD.org/ja/security/advisories/[FreeBSD ウェブサイト] で公開され、 {freebsd-security-notifications}, {freebsd-security}, および {freebsd-announce} メーリングリストに投稿されます。
+
+この章では、セキュリティ勧告とはどのようなものか説明します。
=== セキュリティ勧告はどのようなものか?
-FreeBSD セキュリティ勧告では、 以下のようなフォーマットが用いられています。
+以下は FreeBSD セキュリティ勧告の例です。
[.programlisting]
....
=============================================================================
-FreeBSD-SA-XX:XX.UTIL Security Advisory
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA512
+
+=============================================================================
+FreeBSD-SA-14:04.bind Security Advisory
The FreeBSD Project
-Topic: denial of service due to some problem <.>
-
-Category: core <.>
-Module: sys <.>
-Announced: 2003-09-23 <.>
-Credits: Person <.>
-Affects: All releases of FreeBSD <.>
- FreeBSD 4-STABLE prior to the correction date
-Corrected: 2003-09-23 16:42:59 UTC (RELENG_4, 4.9-PRERELEASE)
- 2003-09-23 20:08:42 UTC (RELENG_5_1, 5.1-RELEASE-p6)
- 2003-09-23 20:07:06 UTC (RELENG_5_0, 5.0-RELEASE-p15)
- 2003-09-23 16:44:58 UTC (RELENG_4_8, 4.8-RELEASE-p8)
- 2003-09-23 16:47:34 UTC (RELENG_4_7, 4.7-RELEASE-p18)
- 2003-09-23 16:49:46 UTC (RELENG_4_6, 4.6-RELEASE-p21)
- 2003-09-23 16:51:24 UTC (RELENG_4_5, 4.5-RELEASE-p33)
- 2003-09-23 16:52:45 UTC (RELENG_4_4, 4.4-RELEASE-p43)
- 2003-09-23 16:54:39 UTC (RELENG_4_3, 4.3-RELEASE-p39) <.>
-CVE Name: CVE-XXXX-XXXX <.>
+Topic: BIND remote denial of service vulnerability
+
+Category: contrib
+Module: bind
+Announced: 2014-01-14
+Credits: ISC
+Affects: FreeBSD 8.x and FreeBSD 9.x
+Corrected: 2014-01-14 19:38:37 UTC (stable/9, 9.2-STABLE)
+ 2014-01-14 19:42:28 UTC (releng/9.2, 9.2-RELEASE-p3)
+ 2014-01-14 19:42:28 UTC (releng/9.1, 9.1-RELEASE-p10)
+ 2014-01-14 19:38:37 UTC (stable/8, 8.4-STABLE)
+ 2014-01-14 19:42:28 UTC (releng/8.4, 8.4-RELEASE-p7)
+ 2014-01-14 19:42:28 UTC (releng/8.3, 8.3-RELEASE-p14)
+CVE Name: CVE-2014-0591
For general information regarding FreeBSD Security Advisories,
including descriptions of the fields above, security branches, and the
-following sections, please visit
-http://www.FreeBSD.org/security/.
+following sections, please visit <URL:http://security.FreeBSD.org/>.
+
+I. Background
+
+BIND 9 is an implementation of the Domain Name System (DNS) protocols.
+The named(8) daemon is an Internet Domain Name Server.
+
+II. Problem Description
+
+Because of a defect in handling queries for NSEC3-signed zones, BIND can
+crash with an "INSIST" failure in name.c when processing queries possessing
+certain properties. This issue only affects authoritative nameservers with
+at least one NSEC3-signed zone. Recursive-only servers are not at risk.
+
+III. Impact
+
+An attacker who can send a specially crafted query could cause named(8)
+to crash, resulting in a denial of service.
+
+IV. Workaround
+
+No workaround is available, but systems not running authoritative DNS service
+with at least one NSEC3-signed zone using named(8) are not vulnerable.
+
+V. Solution
+
+Perform one of the following:
+
+1) Upgrade your vulnerable system to a supported FreeBSD stable or
+release / security branch (releng) dated after the correction date.
+
+2) To update your vulnerable system via a source code patch:
+
+The following patches have been verified to apply to the applicable
+FreeBSD release branches.
+
+a) Download the relevant patch from the location below, and verify the
+detached PGP signature using your PGP utility.
+
+[FreeBSD 8.3, 8.4, 9.1, 9.2-RELEASE and 8.4-STABLE]
+# fetch http://security.FreeBSD.org/patches/SA-14:04/bind-release.patch
+# fetch http://security.FreeBSD.org/patches/SA-14:04/bind-release.patch.asc
+# gpg --verify bind-release.patch.asc
+
+[FreeBSD 9.2-STABLE]
+# fetch http://security.FreeBSD.org/patches/SA-14:04/bind-stable-9.patch
+# fetch http://security.FreeBSD.org/patches/SA-14:04/bind-stable-9.patch.asc
+# gpg --verify bind-stable-9.patch.asc
-I. Background <.>
+b) Execute the following commands as root:
+# cd /usr/src
+# patch < /path/to/patch
-II. Problem Description <.>
+Recompile the operating system using buildworld and installworld as
+described in <URL:https://www.FreeBSD.org/handbook/makeworld.html>.
+Restart the applicable daemons, or reboot the system.
-III. Impact <.>
+3) To update your vulnerable system via a binary patch:
+Systems running a RELEASE version of FreeBSD on the i386 or amd64
+platforms can be updated via the man:freebsd-update[8] utility:
-IV. Workaround <.>
+# freebsd-update fetch
+# freebsd-update install
+VI. Correction details
-V. Solution <.>
+The following list contains the correction revision numbers for each
+affected branch.
+Branch/path Revision
+- -------------------------------------------------------------------------
+stable/8/ r260646
+releng/8.3/ r260647
+releng/8.4/ r260647
+stable/9/ r260646
+releng/9.1/ r260647
+releng/9.2/ r260647
+- -------------------------------------------------------------------------
-VI. Correction details <.>
+To see which files were modified by a particular revision, run the
+following command, replacing NNNNNN with the revision number, on a
+machine with Subversion installed:
+# svn diff -cNNNNNN --summarize svn://svn.freebsd.org/base
-VII. References <.>
+Or visit the following URL, replacing NNNNNN with the revision number:
+
+<URL:https://svnweb.freebsd.org/base?view=revision&revision=NNNNNN>
+
+VII. References
+
+<URL:https://kb.isc.org/article/AA-01078>
+
+<URL:http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0591>
+
+The latest revision of this advisory is available at
+<URL:http://security.FreeBSD.org/advisories/FreeBSD-SA-14:04.bind.asc>
+-----BEGIN PGP SIGNATURE-----
+
+iQIcBAEBCgAGBQJS1ZTYAAoJEO1n7NZdz2rnOvQP/2/68/s9Cu35PmqNtSZVVxVG
+ZSQP5EGWx/lramNf9566iKxOrLRMq/h3XWcC4goVd+gZFrvITJSVOWSa7ntDQ7TO
+XcinfRZ/iyiJbs/Rg2wLHc/t5oVSyeouyccqODYFbOwOlk35JjOTMUG1YcX+Zasg
+ax8RV+7Zt1QSBkMlOz/myBLXUjlTZ3Xg2FXVsfFQW5/g2CjuHpRSFx1bVNX6ysoG
+9DT58EQcYxIS8WfkHRbbXKh9I1nSfZ7/Hky/kTafRdRMrjAgbqFgHkYTYsBZeav5
+fYWKGQRJulYfeZQ90yMTvlpF42DjCC3uJYamJnwDIu8OhS1WRBI8fQfr9DRzmRua
+OK3BK9hUiScDZOJB6OqeVzUTfe7MAA4/UwrDtTYQ+PqAenv1PK8DZqwXyxA9ThHb
+zKO3OwuKOVHJnKvpOcr+eNwo7jbnHlis0oBksj/mrq2P9m2ueF9gzCiq5Ri5Syag
+Wssb1HUoMGwqU0roS8+pRpNC8YgsWpsttvUWSZ8u6Vj/FLeHpiV3mYXPVMaKRhVm
+067BA2uj4Th1JKtGleox+Em0R7OFbCc/9aWC67wiqI6KRyit9pYiF3npph+7D5Eq
+7zPsUdDd+qc+UTiLp3liCRp5w6484wWdhZO6wRtmUgxGjNkxFoNnX8CitzF8AaqO
+UWWemqWuz3lAZuORQ9KX
+=OQzQ
+-----END PGP SIGNATURE-----
....
-<.> `Topic` フィールドでは、 問題について明記されています。 セキュリティ勧告の導入部であり、 脆弱性に影響されるユーティリティを示します。
-<.> `Category` フィールドでは、 脆弱性がシステムのどの部分に影響するかを示します。 `core`, `contrib` または `ports` のどれかが示されます。 `core` カテゴリは、 FreeBSD オペレーティングシステムの `core` コンポーネントに影響する脆弱性であることを意味します。 `contrib` カテゴリは、 Sendmail のように、FreeBSD の外で開発され、FreeBSD プロジェクトに取り込まれたソフトウェアに影響する脆弱性であることを意味します。 `ports` カテゴリは、Ports Collection からインストールされるソフトウェアに影響する脆弱性であることを示しています。
-<.> `Module` フィールドは、 影響するコンポーネントについて言及します。 この例では、`sys` モジュールに影響することがわかります。 そのため、この脆弱性は、 カーネルの中で使われるコンポーネントに影響します。
-<.> `Announced` フィールドは、 セキュリティ勧告が発行された日、 またはアナウンスされた日が記載されています。 セキュリティチームによりこの問題が存在することが確認され、 パッチが FreeBSD ソースコードリポジトリにコミットされたことを意味します。
-<.> `Credits` フィールドは、 脆弱性を通知し、報告した個人または組織を示します。
-<.> `Affects` フィールドは、この脆弱性がどの FreeBSD リリースに影響するかを説明します。 カーネルでは、影響するファイルに対して man:ident[1] を実行すると、 その出力からリビジョンを簡単に確認できます。 ports の場合には、 [.filename]#/var/db/pkg# の port の名前の後に、バージョン番号が示されています。 もし、システムが FreeBSD Subversion リポジトリと同期していなかったり、 再構築が毎日行われているような状況でなければ、 おそらく、そのシステムには影響しているでしょう。
-<.> `Corrected` フィールドは、 脆弱性が修正された日、時間、 タイムゾーン、およびリリースが示されます。
-<.> http://cve.mitre.org[Common Vulnerabilities and Exposures] データベースにおいて、 脆弱性を探すために使用できる識別情報を示します。
-<.> `Background` フィールドは、 影響しているユーティリティに関する情報を示します。 大体の場合は、なぜユーティリティが FreeBSD に存在するか、 何のために使われているか、 どのように用いられるようになってきたか、 といった情報が示されます。
-<.> `Problem Description` フィールドは、 より深くセキュリティホールについて説明します。 問題のあるコードの情報や、 このユーティリティが悪意のある使い方により、 どのようにセキュリティホールを開けうるかといったことが示されます。
-<.> `Impact` フィールドは、 この問題がシステムに対して、 どのような形式の影響を与えるかについて示します。 たとえば、DoS 攻撃によるものか、 ユーザに対して意図しない特権を持たせてしまうものか、 または、攻撃者にスーパユーザのアクセスを与えるようなものか、 といったことが示されます。
-<.> `Workaround` フィールドは、 時間による制限や、ネットワークの可用性または他の理由により、 システムをアップグレードできないシステム管理者に対して、 回避方法を提供します。 セキュリティを甘く見るべきではなく、 影響するシステムにはパッチを当てるか、 セキュリティホールの回避方法を実行すべきです。
-<.> `Solution` フィールドは、 影響のあるシステムにパッチを当てる手順を提供します。 ここではステップごとにシステムにパッチを当て、 安全に動作するように、 試験され検証された方法が記載されます。
-<.> `Correction Details` フィールドは、 Subversion ブランチまたはリリース名のピリオドをアンダースコアに置き換えたものを示します。 ここでは、 各ブランチにおいて影響するファイルのリビジョン番号も示します。
-<.> `References` フィールドは、 通常、ウェブページの URL, books, メーリングリストおよびニュースグループといった、 ほかの情報へのソースを提供します。
+すべてのセキュリティ勧告は以下のフォーマットに基づいています。
+
+* 各セキュリティ勧告には、セキュリティオフィサの PGP 鍵により署名されています。セキュリティオフィサの公開鍵は、crossref:pgpkeys[pgpkeys,OpenPGP 鍵] で検証できます。
+* FreeBSD のセキュリティ勧告の名前は常に `FreeBSD-SA-` で始まり、次に年を表す 2 桁の数字 (`14:`)、年毎の勧告の番号 (`04.`) 、そして影響するアプリケーションまたはサブシステムの名前 (`bind`) が続きます。この例は、2014 年の 4 番目の勧告で BIND に影響する脆弱性に対する勧告を意味しています。
+* `Topic` フィールドでは、脆弱性について明記されています。
+* `Category` では、脆弱性がシステムのどの部分に影響するかを示します。 `core`, `contrib` または `ports` のどれかが示されます。 `core` カテゴリは、 FreeBSD オペレーティングシステムの `core` コンポーネントに影響する脆弱性であることを意味します。 `contrib` カテゴリは、BIND のように FreeBSD に取り込まれているソフトウェアに影響する脆弱性であることを意味します。 `ports` カテゴリは、Ports Collection からインストールされるソフトウェアに影響する脆弱性であることを示しています。
+* `Module` フィールドは、 影響するコンポーネントについて言及します。 この例では `bind` モジュールに影響することがわかります。 そのため、この脆弱性は、オペレーティングシステムとともにインストールされたアプリケーションに影響します。
+* `Announced` フィールドには、セキュリティ勧告が発行された日が記載されています。 セキュリティチームによりこの問題が存在することが確認され、パッチが FreeBSD ソースコードリポジトリにコミットされたことを意味します。
+* `Credits` フィールドは、脆弱性を発見し、報告した個人または組織を示します。
+* `Affects` フィールドは、この脆弱性がどの FreeBSD リリースに影響するかを示しています。
+* `Corrected` フィールドには、脆弱性が修正された日、時間、タイムゾーン、およびリリースが示されます。この括弧の中では、修正がマージされた各ブランチ、およびそのブランチで対応するリリースのバージョン番号が示されています。リリースの識別子には、バージョン番号、可能な場合はパッチレベルが含まれています。パッチレベルは `p` に番号が続いたものです。この番号はパッチのシーケンス番号で、この番号を確認することで、ユーザはどのパッチまでがシステムに適用されているかを追跡できます。
+* `CVE Name` フィールドは、該当する脆弱性が http://cve.mitre.org[cve.mitre.org] セキュリティ脆弱性データベースに存在する場合に、脆弱性の番号一覧を示します。
+* `Background` フィールドは、影響しているモジュールに関する情報を示します。
+* `Problem Description` フィールドは、脆弱性について説明します。 問題のあるコードの情報や、このユーティリティがどのように悪意のある使われ方をされうるかといったことが示されます。
+* `Impact` フィールドは、 この問題がシステムに対して、 どのような形式の影響を与えるかについて示します。
+* `Workaround` フィールドは、何らかの理由により、すぐにシステムにパッチを当てることのできないシステム管理者に対して、回避方法が存在する場合にその方法を提供します。
+* `Solution` フィールドは、影響のあるシステムにパッチを当てる手順を提供します。ここではステップごとにシステムにパッチを当て、安全に動作するように、試験され検証された方法が記載されます。
+* `Correction Details` フィールドは、影響する各 Subversion ブランチに対する修正されたコードが取り込まれたリビジョン番号をを示します。
+* `References` フィールドは、脆弱性に関連する他の情報へのソースを提供します。
[[security-accounting]]
== プロセスアカウンティング
@@ -1754,11 +1861,115 @@ VII. References <.>
[[security-resourcelimits]]
== リソースの制限
-長年にわたり FreeBSD は、 リソースを制限するためのデータベースとしてフラットファイル形式の [.filename]#/etc/login.conf# により管理していました。 この方法は、現在でも使われていますが、 リソースを管理する方法としては最適な方法でないことが、 以前から議論されています。 フラットファイル形式では、 クラスとして知られるグループラベルにユーザを分類する必要があります。 この場合、フラットファイルだけではなく、 パスワードデータベースに対しても変更が必要となります。 潜在的に、より多くの制限を加えられたユーザ対してはラベルの追加や、 `cap_mkdb` を使ったリソースデータベースの再構築、 [.filename]#/etc/master.passwd# への変更が必要となります。 さらに、パスワードデータベースは、 `pwd_mkdb` を使って再構築する必要があります。 この複数回に渡るプロセスは、 多くのユーザについて設定する必要がある場合には、 大変な時間の浪費につながる可能性があります。
+FreeBSD は、個々のユーザが利用できるシステムのリソース容量を制限する方法をいくつも用意しています。
+ディスククォータはユーザが使用できるディスク容量を制限します。
+クォータについては crossref:disks[quotas,「ディスククォータ」] で説明されています。
+
+その他のリソースの制限とは、ユーザが消費できる CPU、メモリなどのリソースを制限する手段のことです。
+フラットファイルまたはコマンドによりリソースの制限に関わるデータベースを管理できます。
+伝統的な方法では、ログインクラスを [.filename]#/etc/login.conf# を編集することにより定義します。
+この方法は、現在でも使われていますが、変更を行うには、このファイルの編集、リソースデータベースの再構築、 [.filename]#/etc/master.passwd# への必要な変更、さらに、パスワードデータベースの再構築といった、複数回に渡るプロセスが必要です。
+この複数回に渡るプロセスは、 多くのユーザについて設定する必要がある場合には、 大変な時間の浪費につながる可能性があります。
+
+`rctl` を用いると、よりきめ細かにリソースの制限を管理する方法を提供できます。
+このコマンドは、ユーザだけではなく、プロセスおよび jails に対してもリソースを制限できます。
+
+この節では、リソースを管理する方法について伝統的な方法と高度な方法の両方について説明します。
-FreeBSD の新しいコマンドである man:rctl[8] は、 ユーザに対して、 よりきめ細かにリソースの制限を管理する方法を提供します。 このコマンドは、ユーザだけではなく、プロセス、jails およびオリジナルのログインクラスに対してもリソースの制限を行うことができます。 これらの高度な機能は、管理者およびユーザに対し、 リソースをコマンドラインで管理したり、 設定ファイルを用いることで、システムの初期化時に、 ルールを設定する方法を提供します。
+[[users-limiting]]
+=== ログインクラスの設定
+
+伝統的な方法では、ログインクラスおよびログインクラスに適用するリソースの制限は [.filename]#/etc/login.conf# で定義します。
+各ユーザアカウントにはログインクラスが割り当てられています (デフォルトでは `default` です)。
+それぞれのログインクラスには関連するログインケーパビリティの集合が割り当てられています。
+ログインケーパビリティとは、 `名称=値` の組のことで、_名称_ は周知の識別子、_値_ は、_名称_ に応じて処理される任意の文字列です。
+
+[NOTE]
+====
+[.filename]#/etc/login.conf# を編集する時には [.filename]#/etc/login.conf.db# を次のコマンドを実行してアップデートする必要があります。
+
+[source,shell]
+....
+# cap_mkdb /etc/login.conf
+....
+
+====
-この機能を有効にするには、以下の行を [.filename]#GENERIC# またはカスタムカーネルコンフィグレーションファイルに追加し、 再構築してください。
+リソースの制限は、 2 つの点で標準的なログインケーパビリティと異なっています。
+第一に、どの制限についても、 _ソフト_ リミットと _ハード _リミットがあります。
+ソフトリミットは、ユーザやアプリケーションが調整できますが、 ハードリミットを超えることはできません。
+ユーザはハードリミットを下げることはできますが、 上げることはスーパユーザのみができます。
+第二に、ほとんどのリソースの制限は特定のユーザに対してプロセス毎に適用されるものです。
+
+<<resource-limits>> が最もよく使われるリソースの制限です。
+利用可能なすべてのリソースの制限およびのログインケーパビリティの詳細については、 man:login.conf[5] に書かれています。
+
+[[resource-limits]]
+.ログインクラスのリソースの制限
+[cols="20%,80%", frame="none", options="header"]
+|===
+| リソースの制限
+| 説明
+
+|coredumpsize
+|プログラムが生成する core ファイルのサイズにかかる制限は、 `filesize` やディスククォータなどの、 ほかのディスク使用に関する制限に従属します。
+この制限は、ディスク領域の消費を制御するあまり厳しくない手段としてよく使われています。
+ユーザは core ファイルを自分で生成するわけではなく、削除しないことも多いので、 これを設定すれば大きなプログラムが異常終了してもディスクの空きがなくならずに済みます。
+
+|cputime
+|そのユーザのプロセスが消費できる CPU 時間の上限です。
+これを超えたプロセスは、カーネルにより終了されます。
+これは、消費される CPU _時間_ についての制限であって、`top` や `ps` のフィールドで表示される CPU の割合に関するものではありません。
+
+|filesize
+|ユーザが所有できるファイルの大きさの上限です。
+ディスククォータ (crossref:disks[quotas,「ディスククォータ」) と違い、この制限はユーザのファイルをすべてまとめた集合にではなく、個々のファイルにかかります。
+
+|maxproc
+|ユーザが実行できるフォアグラウンドとバックグラウンドプロセス数の上限です。
+この上限は、`kern.maxproc` で指定されたシステムの制限を超えることはできません。
+この値をあまり小さな値に設定すると、大きなプログラムをコンパイルする場合のように、複数のプロセスが実行されるようなタスクにおいて、ユーザの生産性が悪化する可能性があります。
+
+|memorylocked
+|1 つのプロセスが man:mlock[2] によりメインメモリにロックされることを要求できるメモリの最大容量です。
+man:amd[8] のようなシステムで重要なプログラムは、 メインメモリへロックして、システムがスワップする際に、 ディスクのスラッシングを引き起こさないようにします。
+
+|memoryuse
+|どの時点かを問わず、あるプロセスが消費できる最大のメモリ容量です。
+これは、メインメモリとスワップの使用量を合わせたものです。
+メモリ消費を抑えるための包括的な制限ではありませんが、手始めにはよいでしょう。
+
+|openfiles
+|あるプロセスが開いておける最大のファイル数です。
+FreeBSD では、ファイルは、ソケットや IPC チャンネルを表わすのにも使われているので、あまり低い値に設定しないよう注意してください。
+これに対応するシステム全体の制限は man:sysctl[8] `kern.maxfiles` で定義されます。
+
+|sbsize
+|あるユーザが消費できるネットワークメモリの上限の量です。
+これは、ネットワーク通信を制限するのに使えます。
+
+|stacksize
+|プロセスのスタックサイズの上限です。
+あるプログラムが使用しうるメモリの量を制限するには、これだけでは十分ではないので、他の制限と組み合わせて使わなければなりません。
+|===
+
+リソースの制限を設定するにあたり、ほかにもいくつか覚えておかなければならないことがあります。
+
+* システム起動時に [.filename]#/etc/rc# から起動されたプロセスは、`daemon` ログインクラスに割り当てられます。
+* システムに付属している [.filename]#/etc/login.conf# はほとんどの制限について妥当な値になっていますが、すべてのシステムにおいてふさわしいというわけではありません。
+制限をあまり緩くするとシステムを悪用しやすくしてしまいますし、厳しくしすぎると生産性を悪化させてしまいます。
+* Xorg は多くのリソースを使うだけでなく、より多くのプログラムを並行して使うことをユーザに促します。
+* 多くの制限は個々のプロセスにかかるもので、一人のユーザにまとめてかかるものではありません。
+例えば、`openfiles` を 50 に設定することは、ユーザが動かすそれぞれのプロセスが最大 50 個のファイルを開けるということです。
+あるユーザが開けるファイルの総数は、 `openfiles` の値に `maxproc` をかけたものになります。
+同じことがメモリ消費量にもあてはまります。
+
+リソースの制限と、ログインクラス、 ログインケーパビリティ一般についての詳しい情報は、 man:cap.mkdb[1], man:getrlimit[2] および man:login.conf[5] をご覧ください。
+
+=== リソースの制限を有効にして設定する
+
+`kern.racct.enable` をゼロ以外の値に設定してください。
+カスタムカーネルには以下のような特別な設定が必要となります。
[.programlisting]
....
@@ -1766,18 +1977,24 @@ options RACCT
options RCTL
....
-その後、システムの再起動が必要になります。 この過程の手順については、crossref:kernelconfig[kernelconfig,FreeBSD カーネルのコンフィグレーション] をご覧ください。 これらの準備が完了すると、`rctl` を用いてシステムにルールを設定できるようになります。
+システムを再起動して新しいカーネルで立ち上げると、`rctl` を用いてシステムにルールを設定できるようになります。
-ルールの構文は簡単で、 _subject_, _subject-id_, _resource_ および _action_ を使って管理されます。 以下のルールの例を参照してください。
+ルールの構文は、 subject, subject-id, resource および action を使って管理されます。
+以下のルールの例を参照してください。
[.programlisting]
....
user:trhodes:maxproc:deny=10/user
....
-これは基本的なルールです。 ここで、subject は `user`、 subject-id は `trhodes` です。 maxproc はもちろんプロセスの最大数であり、resource です。 ここで action は、`deny` と設定されており、 新しいプロセスの生成がブロックされます。 この例では、ユーザ `trhodes` のプロセスは `10` 個に制限され、それ以上のプロセスは作成できません。 コンソールにログを出力したり、 man:devd[8] に対し通知したり、プロセスに sigterm を送ったりといった、 他の action も利用できます。
+この例では、subject は `user`、subject-id は `trhodes`、resource の `maxproc` はプロセスの最大数、そして action は `deny` と設定されており、 新しいプロセスの生成がブロックされます。
+これは、ユーザ `trhodes` のプロセスは `10` 個に制限され、それ以上のプロセスは作成できないことを意味しています。
+他には、コンソールにログを出力したり、 man:devd[8] に対し通知したり、プロセスに sigterm を送ったりといった action も利用できます。
-ルールを追加する際には、注意すべき点がいくつかあります。 上の例では、ログインして `screen` セッションを実行してしまうと、 不幸にもユーザは最も簡単なタスクの実行ですらブロックされてしまうでしょう。 リソースの制限が適応されると、エラーが出力されます。 この例では以下のような出力が行われます。
+ルールを追加する際には、注意すべき点がいくつかあります。
+上の例では、プロセスの数が `10` に制限されているため、ログインして `screen` セッションを実行してしまうと、ユーザによる他のタスクの実行はブロックされてしまうでしょう。
+リソースの制限が適応されると、エラーが出力されます。
+この例では以下のような出力が行われます。
[source,shell]
....
@@ -1786,14 +2003,17 @@ user:trhodes:maxproc:deny=10/user
eval: Cannot fork: Resource temporarily unavailable
....
-他の例としては、man:rctl[8] を使って jail がメモリの制限を超えることを防ぐことができます。 このルールは以下のように書くことができます。
+他の例としては、jail がメモリの制限を超えることを防ぐことができます。
+このルールは以下のように書くことができます。
[source,shell]
....
# rctl -a jail:httpd:memoryuse:deny=2G/jail
....
-ルールを [.filename]#/etc/rctl.conf# に追加すると、 再起動してもルールは持続します。 フォーマットは、ルールから最初のコマンドの部分を除いたものとなります。 たとえば、上のルールを追加するには、 以下のように追加してください。
+ルールを [.filename]#/etc/rctl.conf# に追加すると、再起動してもルールは持続します。
+フォーマットは、ルールから最初のコマンドの部分を除いたものとなります。
+たとえば、上のルールを追加するには、以下のように追加してください。
[.programlisting]
....
@@ -1801,18 +2021,20 @@ eval: Cannot fork: Resource temporarily unavailable
jail:httpd:memoryuse:deny=2G/jail
....
-ルールを削除するには、`rctl` に対し、 リストから削除するように指定してください。
+ルールを削除するには、`rctl` に対し、リストから削除するように指定してください。
[source,shell]
....
# rctl -r user:trhodes:maxproc:deny=10/user
....
-マニュアルページには、 ルールをすべて削除する方法が記載されています。 しかしながら、特定のユーザのルールをすべて削除するには、 以下のようなコマンドを実行してください。
+man:rctl[8] には、ルールをすべて削除する方法が記載されています。
+しかしながら、特定のユーザのルールをすべて削除するには、以下のようなコマンドを実行してください。
[source,shell]
....
# rctl -r user:trhodes
....
-`subjects` をコントロールするリソースは他にも多く用意されています。 これらについて知るには、man:rctl[8] をご覧ください。
+`subjects` をコントロールするリソースは他にも多く用意されています。
+これらについて知るには、man:rctl[8] をご覧ください。
diff --git a/documentation/content/ja/books/handbook/serialcomms/_index.adoc b/documentation/content/ja/books/handbook/serialcomms/_index.adoc
index 60596b4a04..322b061126 100644
--- a/documentation/content/ja/books/handbook/serialcomms/_index.adoc
+++ b/documentation/content/ja/books/handbook/serialcomms/_index.adoc
@@ -1,11 +1,11 @@
---
-title: 第18章 シリアル通信
+title: 第17章 シリアル通信
part: パートIV. ネットワーク通信
prev: books/handbook/partiv
next: books/handbook/ppp-and-slip
showBookMenu: true
-weight: 23
-path: "/books/handbook/"
+weight: 22
+path: "/books/handbook/serialcomms/"
---
[[serialcomms]]
@@ -16,7 +16,7 @@ path: "/books/handbook/"
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 18
+:sectnumoffset: 17
:partnums:
:source-highlighter: rouge
:experimental:
diff --git a/documentation/content/ja/books/handbook/users/_index.adoc b/documentation/content/ja/books/handbook/users/_index.adoc
deleted file mode 100644
index 120c3ce312..0000000000
--- a/documentation/content/ja/books/handbook/users/_index.adoc
+++ /dev/null
@@ -1,527 +0,0 @@
----
-title: 第13章 ユーザと基本的なアカウントの管理
-part: パートIII. システム管理
-prev: books/handbook/boot
-next: books/handbook/security
-showBookMenu: true
-weight: 17
-path: "/books/handbook/"
----
-
-[[users]]
-= ユーザと基本的なアカウントの管理
-:doctype: book
-:toc: macro
-:toclevels: 1
-:icons: font
-:sectnums:
-:sectnumlevels: 6
-:sectnumoffset: 13
-:partnums:
-:source-highlighter: rouge
-:experimental:
-:images-path: 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/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]]
-== この章では
-
-FreeBSD は、複数のユーザが同時にコンピュータを使えるようにします。 スクリーンとキーボードの前に一度に座れるのはその中の一人だけですが ユーザは何人でもネットワークを通してログインできます。 システムを使うためには、 どのユーザもアカウントがなければなりません。
-
-この章では、以下のことを説明します。
-
-* FreeBSD システムにおけるさまざまな種類のユーザアカウントについて
-* ユーザアカウントを追加、削除および変更する方法
-* ユーザやグループが利用できるリソースの上限を制御する方法
-* グループの作成、 およびグループにユーザをメンバとして追加する方法
-
-[[users-introduction]]
-== アカウントの種類
-
-FreeBSD システムへアクセスするには、 かならずアカウントが使われ、 また、プロセスもすべてユーザによって実行されるので、 ユーザとアカウントの管理は、重要なものです。
-
-アカウントには大きく分けて三種類あります。 システムアカウント (system accounts)、ユーザアカウント (user accounts)、 そしてスーパーユーザ (superuser) です。
-
-[[users-system]]
-=== システムアカウント
-
-システムアカウントは、DNS、メール、 ウェブサーバといった各種サービスを運用するために使われます。 この目的は、セキュリティを確保するためです。 もしすべてのサービスがスーパーユーザで実行されていると、 それらのサービスはどんな動作でも可能となり、 適切な制限を適用することができません。
-
-システムアカウントの具体例は、 `daemon`, `operator`, `bind`, `news` および `www` といったものです。
-
-`nobody` は通常の特権を持たないシステムアカウントです。 しかし、`nobody` を利用するサービスが増えれば増えるほど、 それに所属するファイルやプロセスも増え、 その特権も大きくなるということを忘れないようにしてください。
-
-[[users-user]]
-=== ユーザアカウント
-
-ユーザアカウントは、 主に現実のユーザがシステムにアクセスする手段として用いられるものです。 システムにアクセスするすべてのユーザは、 それぞれ唯一のユーザアカウントを持つべきです。 こうすることで管理者は誰が何を行なっているかがわかりますし、 他の人の設定を壊してしまうようなことを避けることができます。
-
-それぞれのユーザは快適にシステムを利用するため、 シェル、エディタ、キー設定、言語など、 各自の環境をセットアップすることができます。
-
-FreeBSD システム上のどのアカウントにも、 以下のような情報がなにかしら結び付けられています。
-
-ユーザ名::
-`login:` プロンプトに対して入力するユーザの名前です。 ユーザ名はそのシステムで一意でなければならず、 2 名のユーザに同じユーザ名をつけることはできません。 有効なユーザ名を作成するには man:passwd[5] に記載されているいくつもの規則があります。 アプリケーションの上位互換性を保つために、 8 文字以下の小文字からなるユーザ名を使うことが推奨されています。
-
-パスワード::
-それぞれのユーザアカウントにはパスワードがあります。 パスワードは空白にもできますが、 行うべきではありません。
-
-ユーザ ID (UID)::
-ユーザ ID (UID) は、 FreeBSD システムがユーザを一意に識別するための数値です。 ユーザ名を指定できるコマンドは、 ユーザ名を UID に変換してから扱っています。 65535 より大きな UID は、32 ビット以上の整数に対応していないソフトウェアにおいて互換性の問題を引き起こす可能性があるので、 65535 以下の UID を使用することが推奨されています。
-
-グループ ID (GID)::
-グループ ID (GID) は、 ユーザが属する第一グループを一意に識別するための数値です。 グループは、UID ではなく、 ユーザの GID に基づいて資源へのアクセスを制御する仕組みです。 これは、ある種の設定ファイルのサイズを大幅に小さくします。 ユーザは、複数のグループに所属できます。 65535 より大きな GID は、ソフトウェアに問題を引き起こす可能性があるので、 65535 以下の GID を使うことを推奨します。
-
-ログインクラス::
-ログインクラスはグループの仕組みを拡張したもので、 別々のユーザに対してシステムを調整する時に、 さらなる柔軟性を提供します。ログインクラスの詳細については、 <<users-limiting>> で説明します。
-
-パスワード変更時間::
-デフォルトでは、FreeBSD は定期的にパスワードを変更することをユーザに強制しません。 これを man:pw[8] を使用してユーザごとに設定し、 一部またはすべてのユーザに、 一定の時間がたったらパスワードを強制的に変更させることができます。
-
-アカウント失効時間::
-デフォルトでは、FreeBSD はアカウントを失効させません。 たとえば学校で生徒のアカウントがある場合など、 限られた期間だけのアカウントを作成するなら、 そのアカウントがいつ失効するか man:pw[8] を使って指定できます。 有効期間が経過したら、 そのアカウントのディレクトリやファイルは残っていますが、 システムへのログインはできなくなります。
-
-ユーザの氏名::
-FreeBSD ではユーザ名でアカウントを一意に識別しますが、 必ずしもユーザの本名を反映したものではありません。 この情報をアカウントに関連付けることもできます。 この情報は、コメントのように、空白、大文字、および 8 字以上で記載できます。
-
-ホームディレクトリ::
-ホームディレクトリは、システム中のディレクトリへのフルパスです。 これはユーザがログインした時に作業を開始するディレクトリです。 一般的な慣習は、すべてのユーザのホームディレクトリを [.filename]#/home/username# か [.filename]#/usr/home/username# の下に置くことです。 各ユーザは、個人のファイルやサブディレクトリを、 ユーザのホームディレクトリに保存します。
-
-ユーザシェル::
-シェルは、 ユーザがシステムと対話するデフォルトの環境を提供します。 いろいろな種類のシェルがあり、 経験を積んだユーザはそれぞれ好みがあり、 それをアカウントの設定に反映できます。
-
-[[users-superuser]]
-=== スーパーユーザアカウント
-
-スーパーユーザアカウントは通常 `root` と呼ばれ、 システム管理を行なうために使われ、権限に制限がありません。 そのため、このアカウントはメールのやりとり、システムの調査、 プログラミングといった日常的な作業を行なうために使われるべきものではありません。
-
-その理由は、スーパーユーザが通常のユーザアカウントと異なり、 操作にまったく制限を受けないことによります。 そのためスーパーユーザアカウントで操作を間違えると、 システムに重大な影響を与えてしまう恐れがあるのです。 ユーザアカウントでは、 仮に操作を間違えてもシステムを壊してしまうようなことはできないようになっています。 そのため、ユーザアカウントでログインし、 高い権限が必要なコマンドを実行するときだけスーパーユーザになることが推奨されています。
-
-スーパーユーザで実行するコマンドはいつでも、 二回、三回と確認してください。 なぜならスペースが多かったり、文字が欠けていたりするだけで、 取り返しのつかないデータの破壊につながる可能性があるからです。
-
-スーパーユーザの権限を得るには、さまざまな方法があります。 `root` ユーザとしてログインする方法もありますが、 これはまったくお勧めできません。
-
-スーパーユーザの権限を手に入れるには、かわりに man:su[1] を使って下さい。 `-` オプションをつけて実行すると、 実行したユーザに root ユーザの環境が設定されます。 このコマンドは `wheel` グループに入ってるユーザのみが実行でき、他のユーザは実行出来ません。 また、実行時には `root` ユーザのパスワードを必要とします。
-
-以下の例では、`make install` を行うときにスーパーユーザの権限が必要なので、 このコマンドを実行する時だけユーザはスーパーユーザになります。 コマンドを実行したら、ユーザは `exit` を実行してスーパーユーザからログアウトし、 通常のユーザアカウントの権限に戻ります。
-
-.スーパーユーザ権限でプログラムをインストールする
-[example]
-====
-
-[source,shell]
-....
-% configure
-% make
-% su -
-Password:
-# make install
-# exit
-%
-....
-
-====
-
-1 人の管理者が一台のマシン、 もしくは小規模なネットワークを管理する場合には、 man:su[1] のフレームワークはうまく機能するでしょう。 この代わりとなるのは、 package:security/sudo[] package または port です。これはログ機能や、 スーパーユーザの権限で実行できるユーザやコマンドを設定できます。
-
-[[users-modifying]]
-== アカウント情報の管理
-
-FreeBSD には、 ユーザアカウントを操作するのにさまざまなコマンドが用意されています。 もっとも一般的なコマンドを以下に示し、 それに続いて詳しい使用例を示します。
-
-[.informaltable]
-[cols="1,1", frame="none", options="header"]
-|===
-| コマンド
-| 要約
-
-|man:adduser[8]
-|コマンドラインからユーザを追加するための推奨アプリケーション
-
-|man:rmuser[8]
-|コマンドラインからユーザを削除するための推奨アプリケーション
-
-|man:chpass[1]
-|ユーザデータベースの情報を変更するための柔軟なツール
-
-|man:passwd[1]
-|ユーザのパスワードを変更する簡単なコマンドラインツール
-
-|man:pw[8]
-|ユーザアカウントのあらゆる箇所を変更する強力で柔軟なツール
-|===
-
-[[users-adduser]]
-=== `adduser`
-
-man:adduser[8] は、 新しいユーザを登録するためのシンプルなプログラムです。 ユーザを追加すると、 このプログラムは、[.filename]#/etc/passwd# と [.filename]#/etc/group# を自動的に更新します。 また、新規ユーザのホームディレクトリを作成し、 [.filename]#/usr/shared/skel# から、デフォルトで使用される設定ファイルをコピーします。 また、新しく作成されたユーザに対して、 ウェルカムメッセージをメールで送信することも可能です。
-
-.FreeBSD におけるユーザの追加
-[example]
-====
-
-[source,shell]
-....
-# adduser
-Username: jru
-Full name: J. Random User
-Uid (Leave empty for default):
-Login group [jru]:
-Login group is jru. Invite jru into other groups? []: wheel
-Login class [default]:
-Shell (sh csh tcsh zsh nologin) [sh]: zsh
-Home directory [/home/jru]:
-Home directory permissions (Leave empty for default):
-Use password-based authentication? [yes]:
-Use an empty password? (yes/no) [no]:
-Use a random password? (yes/no) [no]:
-Enter password:
-Enter password again:
-Lock out the account after creation? [no]:
-Username : jru
-Password : ****
-Full Name : J. Random User
-Uid : 1001
-Class :
-Groups : jru wheel
-Home : /home/jru
-Shell : /usr/local/bin/zsh
-Locked : no
-OK? (yes/no): yes
-adduser: INFO: Successfully added (jru) to the user database.
-Add another user? (yes/no): no
-Goodbye!
-#
-....
-
-====
-
-[NOTE]
-====
-入力したパスワードは画面に表示されませんので、 ユーザアカウントを作成する際には、 パスワードを間違えて入力してしまわないように注意してください。
-====
-
-[[users-rmuser]]
-=== `rmuser`
-
-システムから完全にユーザを削除するには、 man:rmuser[8] を使います。 このコマンドは、次の手順を実行します。
-
-[.procedure]
-====
-. 指定されたユーザの man:crontab[1] エントリが存在する場合には削除。
-. 指定されたユーザの man:at[1] ジョブをすべて削除。
-. 指定されたユーザが所有するすべてのプロセスを強制終了。
-. ローカルパスワードファイルから、 指定されたユーザのエントリを削除。
-. 指定されたユーザのホームディレクトリを削除 (ディレクトリの所有者が指定されたユーザのものだった場合)。
-. [.filename]#/var/mail# から、指定されたユーザの到着メールファイルを削除。
-. [.filename]#/tmp# のような一時ファイル保存領域から、 指定されたユーザの所有するファイルを削除。
-. そして最後に、 [.filename]#/etc/group# にある すべてのグループから、指定されたユーザを削除します。
-+
-[NOTE]
-======
-指定されたユーザと同じ名前のグループで、 そのユーザが削除されると空のグループとなる場合は、 そのグループ自体が削除されます。 これは man:adduser[8] によってユーザごとに作成される、 ユニークなグループに対応するものです。
-======
-====
-
-スーパユーザアカウントの削除に man:rmuser[8] を利用することはできません。 スーパユーザアカウントの削除はほとんどすべての場合、 大規模なシステムの破壊を意味するからです。
-
-デフォルトでは、以下の例のような対話モードが使われます。
-
-.`rmuser` による対話的なアカウントの削除
-[example]
-====
-
-[source,shell]
-....
-# rmuser jru
-Matching password entry:
-jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh
-Is this the entry you wish to remove? y
-Remove user's home directory (/home/jru)? y
-Updating password file, updating databases, done.
-Updating group file: trusted (removing group jru -- personal group is empty) done.
-Removing user's incoming mail file /var/mail/jru: done.
-Removing files belonging to jru from /tmp: done.
-Removing files belonging to jru from /var/tmp: done.
-Removing files belonging to jru from /var/tmp/vi.recover: done.
-#
-....
-
-====
-
-[[users-chpass]]
-=== `chpass`
-
-man:chpass[1] を用いて、 パスワード、シェル、その他の個人情報といった、 ユーザデータベース情報を変更できます。
-
-スーパユーザ権限に限り、 man:chpass[1] を用い、 他のユーザの情報やパスワードを変更できます。
-
-ユーザ名の他にオプションを指定しないと、 man:chpass[1] はユーザ情報を編集するエディタを表示します。 ユーザがエディタを終了すると、 ユーザデータベースが新しい情報に更新されます。
-
-[NOTE]
-====
-スーパユーザでない場合は、 エディタを抜けた後にパスワードを聞かれます。
-====
-
-.スーパユーザによる対話的な `chpass`
-[example]
-====
-
-[source,shell]
-....
-#Changing user database information for jru.
-Login: jru
-Password: *
-Uid [#]: 1001
-Gid [# or name]: 1001
-Change [month day year]:
-Expire [month day year]:
-Class:
-Home directory: /home/jru
-Shell: /usr/local/bin/zsh
-Full Name: J. Random User
-Office Location:
-Office Phone:
-Home Phone:
-Other information:
-....
-
-====
-
-ユーザは、この情報の限られた部分のみ変更が可能です。 また、変更できるのはそのユーザ自身のアカウント情報のみです。
-
-.通常のユーザによる対話的な `chpass`
-[example]
-====
-
-[source,shell]
-....
-#Changing user database information for jru.
-Shell: /usr/local/bin/zsh
-Full Name: J. Random User
-Office Location:
-Office Phone:
-Home Phone:
-Other information:
-....
-
-====
-
-[NOTE]
-====
-man:chfn[1] および man:chsh[1] はいずれも、 man:chpass[1] へのリンクです。 また、man:ypchpass[1], man:ypchfn[1] および man:ypchsh[1] も同様です。 NIS のサポートは自動的に行なわれますので、 コマンドの先頭に `yp` をつける必要はありません。 NIS の設定については、 で説明されています。
-====
-
-[[users-passwd]]
-=== `passwd`
-
-man:passwd[1] は、 ユーザが自分のパスワードを変更する通常の方法です。 スーパユーザ権限では、 他のユーザのパスワードを変更するのに使われます。
-
-[NOTE]
-====
-誤って、または不正なパスワードの変更を避けるため、 新しいパスワードを設定する前に、 もとのパスワードを入力しなければなりません。 スーパーユーザの権限でユーザのパスワードを変更する際には、 もとのパスワードを入力する必要はありません。
-====
-
-.自分のパスワードの変更
-[example]
-====
-
-[source,shell]
-....
-% passwd
-Changing local password for jru.
-Old password:
-New password:
-Retype new password:
-passwd: updating the database...
-passwd: done
-....
-
-====
-
-.スーパーユーザ権限での他のユーザのパスワード変更
-[example]
-====
-
-[source,shell]
-....
-# passwd jru
-Changing local password for jru.
-New password:
-Retype new password:
-passwd: updating the database...
-passwd: done
-....
-
-====
-
-[NOTE]
-====
-man:chpass[1] 同様、man:yppasswd[1] は、 man:passwd[1] へのリンクになっていますので、 NIS はどちらのコマンドでも動作します。
-====
-
-[[users-pw]]
-=== `pw`
-
-man:pw[8] は、ユーザやグループの作成、削除、 変更および表示を行なうコマンドラインのユーティリティです。 これは、システムユーザファイルやシステムグループファイルの フロントエンドとして働きます。man:pw[8] はとても強力な一連のコマンドラインオプションを有しており、 シェルスクリプトで使うのに向いていますが、新しいユーザは、 この章で紹介されている他のコマンドに比べて難しいと感じるかもしれません。
-
-[[users-limiting]]
-== ユーザへの制限
-
-FreeBSD は、 個々のユーザが利用できるシステム資源の量を管理者が制限できる方法をいくつも用意しています。 その種の制限は、ディスククォータ (quota) とその他の資源の制限の 2 つの章で説明します。
-
-ディスククォータは、ユーザが利用できるディスク容量を制限し、 その都度計算しなくてもディスク使用量を簡単に確認できる手段も提供しています。 クォータについては、crossref:disks[quotas,「ファイルシステムクォータ」] で解説しています。
-
-その他のリソースの制限とは、ユーザが消費できる CPU、メモリなどのリソースを制限する手段のことです。 これはログインクラスを用いて定義されているもので、 この後で解説しています。
-
-ログインクラスは [.filename]#/etc/login.conf# で定義します。詳細な説明は man:login.conf[5] に詳しく記載されています。 各ユーザアカウントにはログインクラスが割り当てられていて (デフォルトでは `default` です)、 それぞれのログインクラスにはログインケーパビリティの集合が割り当てられています。 ログインケーパビリティとは、 `名称=値` の組のことで、_名称_ は周知の識別子、_値_ は、_名称_ に応じて処理される任意の文字列です。 ログインクラスとケーパビリティを設定するのはどちらかといえば簡単なことで、 man:login.conf[5] でも説明されています。
-
-[NOTE]
-====
-FreeBSD は通常、直接 [.filename]#/etc/login.conf# から設定を読み込まず、 より速く検索できる [.filename]#/etc/login.conf.db# データベースから読み込みます。[.filename]#/etc/login.conf# を編集する時には [.filename]#/etc/login.conf.db# を次のコマンドを実行してアップデートする必要があります。
-
-[source,shell]
-....
-# cap_mkdb /etc/login.conf
-....
-
-====
-
-リソースの制限は、 2 つの点で標準的なログインケーパビリティと異なっています。 第一に、どの制限についても、ソフト (現在の) リミットとハードリミットがあります。 ソフトリミットは、ユーザやアプリケーションが調整できますが、 ハードリミットを超えることはできません。 ユーザはハードリミットを下げることはできますが、 上げることはスーパユーザのみができます。 第二に、ほとんどのリソースの制限は特定のユーザに対してプロセス毎に適用されるもので、 そのユーザが利用するリソースの総量を制限するものではありません。 ただし、この違いは制限を特別扱いすることで実現されるものであり、 ログインケーパビリティフレームワークの実装によるものではありません。
-
-以下が最もよく使われるリソースの制限になります。 残りは、他のすべてのログインケーパビリティと並んで man:login.conf[5] に書かれています。
-
-`coredumpsize`::
-プログラムが生成する core ファイルのサイズにかかる制限は、 `filesize` やディスククォータなどの、 ほかのディスク使用に関する制限に従属します。 この制限は、ディスク領域の消費を制御するあまり厳しくない手段としてよく使われています。 ユーザは core ファイルを自分で生成するわけではなく、 削除しないことも多いので、 これを設定すれば大きなプログラムが異常終了してもディスクの空きがなくならずに済みます。
-
-`cputime`::
-そのユーザのプロセスが消費できる CPU 時間 の上限です。 これを超えたプロセスは、カーネルにより終了されます。
-+
-
-[NOTE]
-====
-これは、消費される CPU _時間_ についての制限であって、man:top[1] や man:ps[1] のフィールドで表示される CPU の割合に関するものではありません。
-====
-
-`filesize`::
-ユーザが所有できるファイルの大きさの上限です。crossref:disks[quotas,ディスククォータ] と違い、 この制限はユーザのファイルをすべてまとめた集合にではなく、 個々のファイルにかかります。
-
-`maxproc`::
-ユーザが実行できるプロセス数の上限です。 フォアグラウンドプロセスとバックグラウンドプロセスの両方を扱います。 この上限は、man:sysctl[8] 変数 `kern.maxproc` で指定されたシステムの制限を超えることはできません。 同時に複数ログインすることや、 パイプライン実行することは便利なことが多いので、 この値をあまり小さな値に設定すると、 そのユーザの生産性が悪化する可能性があります。 大きなプログラムをコンパイルする場合のように、 タスクによっては複数のプロセスやプリプロセッサが実行されます。
-
-`memorylocked`::
-これは、1 つのプロセスが man:mlock[2] によりメインメモリにロックされることを要求できるメモリの最大容量です。 man:amd[8] のようなシステムで重要なプログラムは、 メインメモリへロックして、システムがスワップする際に、 ディスクのスラッシングを引き起こさないようにします。
-
-`memoryuse`::
-これは、どの時点かを問わず、 あるプロセスが消費できる最大のメモリ容量です。 これは、メインメモリとスワップの使用量を合わせたものです。 メモリ消費を抑えるための包括的な制限ではありませんが、 手始めにはよいでしょう。
-
-`openfiles`::
-これは、あるプロセスが開いておける最大のファイル数です。 FreeBSD では、ファイルはまた、ソケットや IPC チャンネルを表わすのにも使われています。 ですから、あまり低い値に設定しないよう注意してください。 これに対応するシステム全体の制限は man:sysctl[8] `kern.maxfiles` で定義されています。
-
-`sbsize`::
-これは、あるユーザが消費できるネットワークメモリ (つまり mbuf) の上限の量です。ユーザは、 ネットワーク通信を制限するのに使えます。
-
-`stacksize`::
-これは、プロセスのスタックサイズの上限です。 あるプログラムが使用しうるメモリの量を制限するには、 これだけでは十分ではありません。 したがって、他の制限と組み合わせて使わなければなりません。
-
-リソースの制限を設定するにあたり、 ほかにもいくつか覚えておかなければならないことがあります。 以下は、一般的なこつやお勧め、さまざまなコメントになります。
-
-* システム起動時に [.filename]#/etc/rc# から起動されたプロセスは、`daemon` ログインクラスに割り当てられます。
-* システムに付属していた [.filename]#/etc/login.conf# はほとんどの制限について妥当な値になっていますが、 すべてのシステムにおいてふさわしいというわけではありません。 制限をあまり緩くするとシステムを悪用しやすくしてしまいますし、 厳しくしすぎると生産性を悪化させてしまいます。
-* Xorg のユーザには、 他のユーザより多くのリソースを与えるべきかもしれません。 Xorg そのものが多くのリソースを使うだけでなく、 より多くのプログラムを並行して使うことをユーザに促します。
-* 多くの制限は個々のプロセスにかかるもので、 一人のユーザにまとめてかかるものではありません。 例えば、`openfiles` を 50 に設定することは、 ユーザが動かすそれぞれのプロセスが最大 50 個のファイルを開けるということです。 あるユーザが開けるファイルの総数は、 `openfiles` の値に `maxproc` をかけたものになります。 同じことがメモリ消費量にもあてはまります。
-
-リソースの制限と、ログインクラス、 ログインケーパビリティ一般についての詳しい情報は、 man:cap.mkdb[1], man:getrlimit[2] および man:login.conf[5] をご覧ください。
-
-[[users-groups]]
-== グループの管理
-
-グループとは、ユーザを羅列したものです。 グループは、グループ名と GID で識別されます。 FreeBSD では、 あるプロセスが何かするのを許可するかどうかをカーネルが判断する際に、 プロセスの UID とそのユーザが所属するグループの一覧を利用します。 ほとんどの場合、ユーザもしくはプロセスの GID は一覧の最初のグループを指しています。
-
-グループ名から GID への写像は [.filename]#/etc/group# にあります。 これは、コロンで区切られた 4 項目からなるテキストファイルです。 1 番目の項目はグループ名、 2 番目は暗号化されたパスワード、 3 番目が GID、 4 番目がカンマで区切られたメンバの一覧です。 文法についての完全な説明は、man:group[5] をご覧ください。
-
-スーパーユーザは、[.filename]#/etc/group# をテキストエディタで編集できます。 もしくは、man:pw[8] を使ってグループの追加や編集をできます。 たとえば、`teamtwo` というグループを追加して、その存在を確認するには、 次のように使います。
-
-.man:pw[8] によるグループの追加
-[example]
-====
-
-[source,shell]
-....
-# pw groupadd teamtwo
-# pw groupshow teamtwo
-teamtwo:*:1100:
-....
-
-====
-
-この例では、`1100` という番号は、 `teamtwo` の GID です。 この時点では、`teamtwo` にメンバはいません。 以下のコマンドは、 `jru` を `teamtwo` のメンバに追加します。
-
-.man:pw[8] により新しいグループにメンバを追加する
-[example]
-====
-
-[source,shell]
-....
-# pw groupmod teamtwo -M jru
-# pw groupshow teamtwo
-teamtwo:*:1100:jru
-....
-
-====
-
-`-M` の引数は、 カンマで区切られた新しい (空の) グループに追加するもしくは存在するグループのメンバを置き換えるユーザの一覧です。 ユーザにとっては、このグループのメンバーシップはパスワードファイルに記載されているプライマリのグループとは異なります。 man:pw[8] の `groupshow` コマンドを使った時は、 そのユーザはグループの一員として表示されませんが、man:id[1] などのツールを使って情報を問い合わせれば、 その情報を引き出せます。ユーザをグループに追加をする際に、man:pw[8] は [.filename]#/etc/group# しか扱わず、 [.filename]#/etc/passwd# から追加のデータを読んだりはしません。
-
-.man:pw[8] によるグループへのユーザ追加
-[example]
-====
-
-[source,shell]
-....
-# pw groupmod teamtwo -m db
-# pw groupshow teamtwo
-teamtwo:*:1100:jru,db
-....
-
-====
-
-この例では、`-m` の引数は、 カンマで区切られたグループに追加するユーザの一覧です。 前の例と異なり、これらのユーザはグループ一覧に追加され、 グループのユーザ一覧を置き換えることはありません。
-
-.グループに所属しているユーザを調べるための man:id[1] の使い方
-[example]
-====
-
-[source,shell]
-....
-% id jru
-uid=1001(jru) gid=1001(jru) groups=1001(jru), 1100(teamtwo)
-....
-
-====
-
-この例では、`jru` は `jru` グループと `teamtwo` グループのメンバです。
-
-このコマンドや [.filename]#/etc/group# のフォーマットの詳細については、 man:pw[8] および man:group[5] をご覧ください。
diff --git a/documentation/content/ja/books/handbook/x11/_index.adoc b/documentation/content/ja/books/handbook/x11/_index.adoc
index 2f41cb5e6e..c36171ddbd 100644
--- a/documentation/content/ja/books/handbook/x11/_index.adoc
+++ b/documentation/content/ja/books/handbook/x11/_index.adoc
@@ -7,7 +7,8 @@ description: この章では、グラフィカル環境で使われるオープ
tags: ["X11", "Xorg", "TrueType", "DE", "KDE", "Plasma", "Xfce", "Gnome", "XDM", "SDDM", "GDM", "KMS", "Intel", "AMD", "NVIDIA", "Anti-Aliased"]
showBookMenu: true
weight: 7
-path: "/books/handbook/"
+path: "/books/handbook/x11/"
+aliases: ["/ja/books/handbook/x-understanding/","/ja/books/handbook/x-install/","/ja/books/handbook/x-config/","/ja/books/handbook/x-fonts/","/ja/books/handbook/x-xdm/","/ja/books/handbook/x11-wm/","/ja/books/handbook/x-compiz-fusion/","/ja/books/handbook/x11-troubleshooting/"]
---
[[x11]]
@@ -833,7 +834,7 @@ Xorg は、 ログインセッションの管理に用いることのできる X
=== XDM の設定
XDM をインストールするには、 package:x11/xdm[] package または port を使ってください。
-インストール後、コンピュータの起動時に、XDM を起動するように設定するには、[.filename]#/etc/ttys# に以下の行を追加してください。
+インストール後、コンピュータの起動時に、XDM を起動するように設定するには、[.filename]#/etc/rc.conf# に以下の行を追加してください。
[.programlisting]
....
@@ -909,14 +910,14 @@ GNOME はユーザフレンドリなデスクトップ環境です。 アプリ
[source,shell]
....
-# pkg install gnome3
+# pkg install gnome
....
ports から GNOME を構築するには、以下のコマンドを実行してください。 GNOME は大きなアプリケーションなので、 コンパイルには高速のコンピュータでも時間がかかります。
[source,shell]
....
-# cd /usr/ports/x11/gnome3
+# cd /usr/ports/x11/gnome
# make install clean
....
diff --git a/documentation/content/ja/books/porters-handbook/changes/_index.adoc b/documentation/content/ja/books/porters-handbook/changes/_index.adoc
index 7cd662ccce..ceff8f4eb0 100644
--- a/documentation/content/ja/books/porters-handbook/changes/_index.adoc
+++ b/documentation/content/ja/books/porters-handbook/changes/_index.adoc
@@ -3,7 +3,7 @@ title: 第19章 この文書と ports システムの変更
prev: books/porters-handbook/porting-autoplist
showBookMenu: true
weight: 19
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/changes/"
---
[[changes]]
diff --git a/documentation/content/ja/books/porters-handbook/makefile/_index.adoc b/documentation/content/ja/books/porters-handbook/makefile/_index.adoc
index 8aca2248fe..f95f281154 100644
--- a/documentation/content/ja/books/porters-handbook/makefile/_index.adoc
+++ b/documentation/content/ja/books/porters-handbook/makefile/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/slow
next: books/porters-handbook/special
showBookMenu: true
weight: 5
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/makefile/"
---
[[makefile]]
diff --git a/documentation/content/ja/books/porters-handbook/own-port/_index.adoc b/documentation/content/ja/books/porters-handbook/own-port/_index.adoc
index 4f049833d0..26e9fd36a5 100644
--- a/documentation/content/ja/books/porters-handbook/own-port/_index.adoc
+++ b/documentation/content/ja/books/porters-handbook/own-port/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/why-port
next: books/porters-handbook/quick-porting
showBookMenu: true
weight: 2
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/own-port/"
---
[[own-port]]
diff --git a/documentation/content/ja/books/porters-handbook/pkg-files/_index.adoc b/documentation/content/ja/books/porters-handbook/pkg-files/_index.adoc
index a24592e2f8..8366d6e256 100644
--- a/documentation/content/ja/books/porters-handbook/pkg-files/_index.adoc
+++ b/documentation/content/ja/books/porters-handbook/pkg-files/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/porting-info
next: books/porters-handbook/testing
showBookMenu: true
weight: 13
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/pkg-files/"
---
[[pkg-files]]
diff --git a/documentation/content/ja/books/porters-handbook/port-upgrading/_index.adoc b/documentation/content/ja/books/porters-handbook/port-upgrading/_index.adoc
index 37e9ec9f04..9ee05a6fcc 100644
--- a/documentation/content/ja/books/porters-handbook/port-upgrading/_index.adoc
+++ b/documentation/content/ja/books/porters-handbook/port-upgrading/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/testing
next: books/porters-handbook/porting-dads
showBookMenu: true
weight: 15
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/port-upgrading/"
---
[[port-upgrading]]
diff --git a/documentation/content/ja/books/porters-handbook/porting-autoplist/_index.adoc b/documentation/content/ja/books/porters-handbook/porting-autoplist/_index.adoc
index 09c3d84d25..08317f770d 100644
--- a/documentation/content/ja/books/porters-handbook/porting-autoplist/_index.adoc
+++ b/documentation/content/ja/books/porters-handbook/porting-autoplist/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/porting-samplem
next: books/porters-handbook/changes
showBookMenu: true
weight: 18
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/porting-autoplist/"
---
[[porting-autoplist]]
diff --git a/documentation/content/ja/books/porters-handbook/porting-dads/_index.adoc b/documentation/content/ja/books/porters-handbook/porting-dads/_index.adoc
index e1e1ea7aa1..68072ac3c9 100644
--- a/documentation/content/ja/books/porters-handbook/porting-dads/_index.adoc
+++ b/documentation/content/ja/books/porters-handbook/porting-dads/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/port-upgrading
next: books/porters-handbook/porting-samplem
showBookMenu: true
weight: 16
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/porting-dads/"
---
[[porting-dads]]
diff --git a/documentation/content/ja/books/porters-handbook/porting-info/_index.adoc b/documentation/content/ja/books/porters-handbook/porting-info/_index.adoc
index b730178c27..c2327fac49 100644
--- a/documentation/content/ja/books/porters-handbook/porting-info/_index.adoc
+++ b/documentation/content/ja/books/porters-handbook/porting-info/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/x11-fonts
next: books/porters-handbook/pkg-files
showBookMenu: true
weight: 12
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/porting-info/"
---
[[porting-info]]
diff --git a/documentation/content/ja/books/porters-handbook/porting-manpages/_index.adoc b/documentation/content/ja/books/porters-handbook/porting-manpages/_index.adoc
index b7707674fc..786ff1ce2f 100644
--- a/documentation/content/ja/books/porters-handbook/porting-manpages/_index.adoc
+++ b/documentation/content/ja/books/porters-handbook/porting-manpages/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/shared
next: books/porters-handbook/porting-motif
showBookMenu: true
weight: 9
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/porting-manpages/"
---
[[porting-manpages]]
diff --git a/documentation/content/ja/books/porters-handbook/porting-masterdir/_index.adoc b/documentation/content/ja/books/porters-handbook/porting-masterdir/_index.adoc
index ab34c0bc66..0458a9946c 100644
--- a/documentation/content/ja/books/porters-handbook/porting-masterdir/_index.adoc
+++ b/documentation/content/ja/books/porters-handbook/porting-masterdir/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/special
next: books/porters-handbook/shared
showBookMenu: true
weight: 7
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/porting-masterdir/"
---
[[porting-masterdir]]
diff --git a/documentation/content/ja/books/porters-handbook/porting-motif/_index.adoc b/documentation/content/ja/books/porters-handbook/porting-motif/_index.adoc
index a3af80bbc2..ca13d7a74b 100644
--- a/documentation/content/ja/books/porters-handbook/porting-motif/_index.adoc
+++ b/documentation/content/ja/books/porters-handbook/porting-motif/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/porting-manpages
next: books/porters-handbook/x11-fonts
showBookMenu: true
weight: 10
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/porting-motif/"
---
[[porting-motif]]
diff --git a/documentation/content/ja/books/porters-handbook/porting-samplem/_index.adoc b/documentation/content/ja/books/porters-handbook/porting-samplem/_index.adoc
index 1887435103..3bbeb66dd2 100644
--- a/documentation/content/ja/books/porters-handbook/porting-samplem/_index.adoc
+++ b/documentation/content/ja/books/porters-handbook/porting-samplem/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/porting-dads
next: books/porters-handbook/porting-autoplist
showBookMenu: true
weight: 17
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/porting-samplem/"
---
[[porting-samplem]]
diff --git a/documentation/content/ja/books/porters-handbook/quick-porting/_index.adoc b/documentation/content/ja/books/porters-handbook/quick-porting/_index.adoc
index 70d5ddfb48..cb245a93ff 100644
--- a/documentation/content/ja/books/porters-handbook/quick-porting/_index.adoc
+++ b/documentation/content/ja/books/porters-handbook/quick-porting/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/own-port
next: books/porters-handbook/slow
showBookMenu: true
weight: 3
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/quick-porting/"
---
[[quick-porting]]
diff --git a/documentation/content/ja/books/porters-handbook/shared/_index.adoc b/documentation/content/ja/books/porters-handbook/shared/_index.adoc
index 923d6a2d5d..7601f9d93f 100644
--- a/documentation/content/ja/books/porters-handbook/shared/_index.adoc
+++ b/documentation/content/ja/books/porters-handbook/shared/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/porting-masterdir
next: books/porters-handbook/porting-manpages
showBookMenu: true
weight: 8
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/shared/"
---
[[shared]]
diff --git a/documentation/content/ja/books/porters-handbook/slow/_index.adoc b/documentation/content/ja/books/porters-handbook/slow/_index.adoc
index 41ad498a3e..0975394451 100644
--- a/documentation/content/ja/books/porters-handbook/slow/_index.adoc
+++ b/documentation/content/ja/books/porters-handbook/slow/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/quick-porting
next: books/porters-handbook/makefile
showBookMenu: true
weight: 4
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/slow/"
---
[[slow]]
diff --git a/documentation/content/ja/books/porters-handbook/special/_index.adoc b/documentation/content/ja/books/porters-handbook/special/_index.adoc
index 5443dc7141..c7fa7626b6 100644
--- a/documentation/content/ja/books/porters-handbook/special/_index.adoc
+++ b/documentation/content/ja/books/porters-handbook/special/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/makefile
next: books/porters-handbook/porting-masterdir
showBookMenu: true
weight: 6
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/special/"
---
[[special]]
diff --git a/documentation/content/ja/books/porters-handbook/testing/_index.adoc b/documentation/content/ja/books/porters-handbook/testing/_index.adoc
index dcd1e8fb1b..19d72f2dd3 100644
--- a/documentation/content/ja/books/porters-handbook/testing/_index.adoc
+++ b/documentation/content/ja/books/porters-handbook/testing/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/pkg-files
next: books/porters-handbook/port-upgrading
showBookMenu: true
weight: 14
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/testing/"
---
[[testing]]
diff --git a/documentation/content/ja/books/porters-handbook/why-port/_index.adoc b/documentation/content/ja/books/porters-handbook/why-port/_index.adoc
index f84481ff1b..f5dafaf31a 100644
--- a/documentation/content/ja/books/porters-handbook/why-port/_index.adoc
+++ b/documentation/content/ja/books/porters-handbook/why-port/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/
next: books/porters-handbook/own-port
showBookMenu: true
weight: 1
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/why-port/"
---
[[why-port]]
diff --git a/documentation/content/ja/books/porters-handbook/x11-fonts/_index.adoc b/documentation/content/ja/books/porters-handbook/x11-fonts/_index.adoc
index c2b46bdee7..45b77e8051 100644
--- a/documentation/content/ja/books/porters-handbook/x11-fonts/_index.adoc
+++ b/documentation/content/ja/books/porters-handbook/x11-fonts/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/porting-motif
next: books/porters-handbook/porting-info
showBookMenu: true
weight: 11
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/x11-fonts/"
---
[[x11-fonts]]
diff --git a/documentation/content/ko/articles/bsdl-gpl/_index.adoc b/documentation/content/ko/articles/bsdl-gpl/_index.adoc
index 22f21f229f..514ea4c42f 100644
--- a/documentation/content/ko/articles/bsdl-gpl/_index.adoc
+++ b/documentation/content/ko/articles/bsdl-gpl/_index.adoc
@@ -1,12 +1,15 @@
---
-title: 오픈 소스 프로젝트에 BSD 형식의 라이선스를 사용해야 하는 이유
authors:
- - author: Bruce Montague
+ -
+ author: 'Bruce Montague'
email: brucem@alumni.cse.ucsc.edu
+description: '오픈소스 프로젝트에 BSD 스타일 라이선스를 사용해야 하는 이유'
+tags: ["bsdl", "gpl", "FreeBSD License"]
+title: '오픈소스 프로젝트에 BSD 스타일 라이선스를 사용해야 하는 이유'
trademarks: ["freebsd", "intel", "general"]
---
-= 오픈 소스 프로젝트에 BSD 형식의 라이선스를 사용해야 하는 이유
+= 오픈소스 프로젝트에 BSD 스타일 라이선스를 사용해야 하는 이유
:doctype: article
:toc: macro
:toclevels: 1
@@ -42,167 +45,161 @@ endif::[]
toc::[]
[[intro]]
-== 개요
+== 소개
-이 문서는 소프트웨어와 데이터에 BSD 형식의 라이선스를 사용해야 하는 이유를 설명합니다; 구체적으로 이 문서는 GPL 대신 BSD 형식의 라이선스를 사용할 것을 권장합니다. 이 문서는 또한 BSD와 GPL 오픈 소스 라이선스에 대한 소개 및 간단한 요약이기도 합니다.
+이 문서는 소프트웨어와 데이터에 BSD 스타일 라이선스를 사용하는 사례를 제시하며, 특히 GPL 대신 BSD 스타일 라이선스를 사용할 것을 권장합니다. 이 문서는 BSD와 GPL 오픈 소스 라이선스 소개 및 요약으로 생각하셔도 됩니다.
[[history]]
-== 오픈 소스의 아주 간략한 역사
+== 아주 간략한 오픈소스 역사
-"오픈 소스"라는 용어가 사용되기 오래 전에, 소프트웨어는 프로그래머들의 자발적인 공동체에 의해 개발되고 자유롭게 주고받아졌습니다. 1950년대 초반을 시작으로, http://www.share.org[SHARE]와 http://www.decus.org[DECUS]와 같은 단체들은 컴퓨터 하드웨어 회사들이 자사의 제품에 동봉한 소프트웨어의 상당수를 개발했습니다. 그 당시 컴퓨터 회사들은 주로 하드웨어 사업을 하고 있었습니다; 소프트웨어의 비용을 낮추고 더 많은 프로그램들을 사용 가능하도록 제공하는 것은 곧 하드웨어 회사들의 경쟁력이 되었습니다.
+“오픈 소스”라는 용어가 사용되기 훨씬 전부터 소프트웨어는 프로그래머들의 느슨한 연합에 의해 개발되고 자유롭게 교환되었습니다. 1950년대 초부터 http://www.share.org[SHARE] 및 http://www.decus.org[DECUS]와 같은 조직이 컴퓨터 하드웨어 회사가 하드웨어 제품에 번들로 제공하는 소프트웨어의 대부분을 개발했습니다. 당시 컴퓨터 회사들은 하드웨어를 주축으로 사업을 하고 있었기 때문에 소프트웨어 비용을 절감하고 더 많은 프로그램을 사용할 수 있게 하면 컴퓨터 회사의 경쟁력이 높아졌습니다.
-이러한 방침은 1960년대에 바뀌었습니다. 1965년에 ADR은 하드웨어 제조사와는 독립적으로 라이선스된 최초의 소프트웨어 제품을 개발했습니다. ADR은 IBM의 고객들에 의해 개발된 무료 IBM 패키지와 경쟁하고 있었습니다. ADR은 1968년에 그들의 소프트웨어에 대한 특허를 출원했습니다. 그들의 프로그램이 (불법으로) 공유되는 것을 막기 위해, 그들은 그들의 프로그램을 (사용하기 위해서는 비용을 지불해야 하는) 임대 형식의 장비에서만 제공했습니다. 그럼으로써 ADR은 소프트웨어에 대한 소유권을 얻었고, 소프트웨어의 재판매와 재사용을 하지 못하도록 통제할 수 있었습니다.
+이 모델은 1960년대에 바뀌었습니다. 1965년 ADR은 하드웨어 회사로부터 독립하여 최초의 라이선스 소프트웨어 제품을 개발했습니다. ADR은 원래 IBM 고객이 개발한 무료 IBM 패키지와 경쟁하고 있었습니다. ADR은 1968년 소프트웨어 특허를 획득했습니다. 프로그램의 공유를 막기 위해 제품 수명 기간 동안 요금을 나눠내는 장비 리스 방식으로 제품을 제공했습니다. 따라서 ADR은 소유권을 유지하고 재판매 및 재사용을 통제할 수 있었습니다.
-1969년에 미국 법무부는 IBM이 그들의 하드웨어에 무료 소프트웨어를 동봉하여 시장을 독점하려 한 것에 대해 벌금을 부과했습니다. 이 소송의 결과로, IBM은 더 이상 그들의 제품에 소프트웨어를 동봉하지 않았습니다; 즉, 소프트웨어는 하드웨어와는 독립적인 제품이 되었습니다.
+1969년 미국 법무부는 IBM이 무료 소프트웨어를 IBM 하드웨어에 번들로 제공함으로써 비즈니스를 파괴했다는 혐의로 IBM을 기소했습니다. 이 소송의 결과로 IBM은 소프트웨어를 번들에서 분리하였고, 소프트웨어가 하드웨어와 분리된 독립적인 제품이 되었습니다.
-1968년에 Informatics는 최초로 상용 killer-app을 발표하고 소프트웨어 제품, 소프트웨어 회사, 그리고 많은 이윤에 대한 개념을 빠르게 정착시켜 나갔습니다. Informatics는 현재 컴퓨터 산업의 표준과도 같은 영구 라이선스를 개발했습니다. 이 라이선스는 소프트웨어의 소유에 대한 권리가 소비자에게 주어지지 않는다는 특징이 있습니다.
+1968년 인포매틱스(Informatics)는 최초의 상용 킬러 앱을 출시하여 소프트웨어 제품, 소프트웨어 회사, 매우 높은 수익률이라는 개념을 빠르게 정립했습니다. 인포매틱스는 현재 컴퓨터 업계에서 표준이 된 영구 라이선스를 개발했는데, 이 라이선스는 소유권이 고객에게 이전되지 않습니다.
[[unix-license]]
-== BSD 라이선스의 관점에서 바라본 유닉스
+== BSD 라이선스 관점에서 본 유닉스
-원본 유닉스 구현을 소유하고 있던 AT&T는 반독점법에 의해 공식적으로 규제를 받고 있었습니다; 그 회사는 합법적으로 소프트웨어 제품을 판매할 수 없었습니다. 그러나 학술 기관에 저장 매체의 비용만을 받고 소프트웨어를 제공하는 것은 가능했습니다.
+최초의 유닉스 구현을 소유한 AT&T는 미국의 반독점법에 묶여 공공 규제를 받는 독점기업이었기 때문에 법적으로 소프트웨어 시장에 제품을 판매할 수 없었습니다. 하지만 학술 기관에는 미디어 가격(순수한 패키지 가격)을 받고 제공할 수 있었습니다.
-OS conference에서 유닉스를 사용 가능하다고 발표한 이후에, 대학교들은 그것을 빠르게 채택했습니다. 유닉스는 대단히 저렴한 16비트 컴퓨터인 PDP-11에서 작동했고, 시스템 프로그래밍에 명백하게 유리한 고급 언어로 작성되어 있었습니다. 이는 대단히 유용한 특징이었습니다. DEC PDP-11은 소비자들이 그들만의 운영체제를 작성(그 당시에는 꽤나 보편적인 일이었습니다)하기 쉽도록 하드웨어 인터페이스를 공개하고 있었습니다. DEC의 창립자인 Ken Olsen이 했던 말은 유명합니다, "당신이 좋은 하드웨어를 가지고 있다면 소프트웨어는 하늘이 내려 준다".
+한 OS 컨퍼런스에서 유닉스를 공적으로 사용할 수 있다는 사실이 알려지면서 많은 대학들은 빠르게 유닉스를 도입했습니다. 유닉스가 매우 저렴한 16비트 컴퓨터인 PDP-11에서 실행되고 시스템 프로그래밍에 매우 적합한 고급 언어로 코딩되어 있었다는 점이 큰 도움이 되었습니다. DEC PDP-11은 고객이 자체 OS를 쉽게 작성할 수 있도록 설계된 개방형 하드웨어 인터페이스를 갖추고 있었는데, 당시에는 이러한 인터페이스가 일반적이었습니다. “좋은 하드웨어가 있으면 소프트웨어는 하늘에서 내려온다”는 DEC 창립자 켄 올슨(Ken Olsen)의 유명한 명언이 있습니다.
-유닉스의 개발자인 Ken Thompson은 1975년에 그의 모교인 캘리포니아 버클리 대학교(UCB)로 돌아왔고, 커널을 한줄씩 가르쳤습니다. 이는 궁극적으로 BSD(Berkeley Standard Distribution)라는 시스템으로 발전했습니다. UCB는 유닉스를 32비트로 변환시켰고, 가상 메모리와 TCP/IP 스택(인터넷의 핵심 기술)을 구현했습니다. UCB는 BSD를 "BSD 라이선스"라고 알려지게 된 규정에 따라 저장 매체의 비용만 받고 누구에게나 제공했습니다. 소비자들은 AT&T에서 유닉스를 구입했고 UCB에서 BSD 테이프(당시의 저장 매체)를 주문했습니다.
+유닉스의 창시자 켄 톰슨(Ken Thompson)은 1975년 모교인 캘리포니아 버클리 대학교(UCB)로 돌아와 커널을 한 줄 한 줄 가르쳤습니다. 그 결과 BSD(버클리 표준 배포판)로 알려진 진화하는 시스템이 탄생했습니다. UCB는 유닉스를 32비트로 변환하고, 가상 메모리를 추가하고, 인터넷의 기본이 되는 TCP/IP 스택 버전을 구현했습니다. UCB는 “BSD 라이선스”라는 이름으로 미디어 비용으로 BSD를 사용할 수 있게 했습니다. 과거에 AT&T에서 유닉스를 구입한 고객들은 이제 UCB에서 BSD 테이프를 주문하게 되었습니다.
-1980년대 중반에 정부의 ATT에 대한 독점 소송은 ATT가 회사의 사업부를 분할하는 것으로 끝났습니다. ATT는 여전히 유닉스를 소유하고 있었고 이제는 판매도 할 수 있었습니다. ATT는 공격적인 라이선스 정책을 추진했으며 오늘날의 주요한 상용 유닉스들은 ATT 기반이 되었습니다.
+1980년대 중반, AT&T에 대한 정부의 반독점 소송으로 인해 AT&T가 해체되었습니다. AT&T는 여전히 유닉스를 소유하고 있었으며 이제 이를 판매할 수 있게 되었습니다. AT&T는 공격적인 라이선스 확보에 나섰고, 당시 대부분의 상용 유닉스는 AT&T에서 파생된 제품이 되었습니다.
-1990년대 초반에 ATT는 BSD에 관련된 라이선스의 위반으로 UCB에 소송을 제기했습니다. UCB는 ATT가 자사의 제품에 BSD의 향상된 기능을 아무런 승인이나 대가 지불 없이 포함시킨 것을 발견했고, 주로 ATT와 UCB 사이의 기나긴 소송 사건이 잇따라 발생했습니다. 이 기간 동안 UCB의 프로그래머들 중 일부는 BSD에 포함된 ATT 코드를 모두 다시 작성하는 작업에 착수했습니다. 이 작업의 결과로 bsd 4.4-lite라고 불리는 시스템이 만들어졌습니다 (이것은 완전한 시스템이 아니었기 때문에 lite라는 표현이 사용되었습니다; 이는 6개의 핵심적인 ATT 파일이 빠졌기 때문입니다).
+1990년대 초, AT&T는 BSD와 관련된 라이선스 위반으로 UCB를 고소했습니다. 이 과정에서 UCB는 AT&T가 BSD로 인한 많은 개선 사항을 승인이나 대가 없이 AT&T의 제품에 통합했다는 사실을 발견했고, AT&T와 UCB 간의 오랜 법정 소송이 이어졌습니다. 이 기간 동안 일부 UCB 프로그래머들은 BSD와 관련된 모든 AT&T 코드를 다시 작성하는 프로젝트에 착수했습니다. 이 프로젝트는 BSD 4.4-lite라는 시스템을 탄생시켰습니다(라이트라고 명명한 것은 6개의 주요 AT&T 파일이 부족해 완전한 시스템이 아니었기 때문입니다).
-얼마 후에, Dr. Dobbs의 잡지에 BSD 파생의 386 PC 버전 유닉스를 설명하는 긴 글이 수록되었습니다. 이것은 4.4 lite에 결손된 6개의 파일들을 BSD 라이선스의 것으로 대체한 버전이었습니다. 386BSD라고 이름지어진 이 시스템은 전 UCB 프로그래머인 William Jolitz에 의한 것이었습니다. 이것은 오늘날 사용되는 PC 호환 BSD들의 기본적인 바탕이 되었습니다.
+조금 후에 닥터 돕스(Dr. Dobbs) 잡지에 실린 긴 기사 시리즈에서는 누락된 6개의 4.4 라이트 파일에 대한 BSD 라이선스 대체 파일과 함께 BSD 파생 386 PC 버전의 유닉스에 대해 설명했습니다. 386BSD로 명명된 이 시스템은 전직 UCB 프로그래머 윌리엄 졸리츠(William Jolitz)가 만든 것입니다. 이 시스템은 현재 사용 중인 모든 PC BSD의 기반이 되었습니다.
-1990년대 중반에, Novell이 ATT의 유닉스에 대한 권리를 인수했고 (그 당시 비밀이었던) 협정에 의해 소송은 종료되었습니다. UCB는 곧 BSD에 대한 지원을 종료했습니다.
+1990년대 중반, 노벨(Novell)은 AT&T의 유닉스 권리를 인수했고, 소송을 종료하기로 (당시엔 비밀리에) 합의가 이루어졌습니다. UCB는 곧 BSD에 대한 지원을 종료했습니다.
[[current-bsdl]]
-== FreeBSD 라이선스와 BSD 라이선스의 현재 상황
+== FreeBSD의 현황과 BSD 라이선스
-지난 몇 년동안 FreeBSD에 적용되어 온 소위 http://www.opensource.org/licenses/bsd-license.php[new BSD license]는 여러분이 프로그램 또는 그 소스를 가지고 무엇이든지 해도 되지만, 아무런 보증도 되지 않으며 저작자 중 아무도 책임지지 않음(즉, 여러분은 아무도 고소할 수 없습니다)을 나타내는 사실상 하나의 선언입니다. 이 new BSD license는 제품의 상용화를 장려하고 있습니다. 어떤 BSD 코드라도 여러분의 코드의 사용 가능성 또는 여러분의 미래의 행동에 아무런 제약을 받지 않고 판매되거나 상용 제품에 포함될 수 있습니다.
+지난 몇 년 동안 FreeBSD에 적용된 소위 http://www.opensource.org/licenses/bsd-license.php[new BSD license]는 사실상 프로그램이나 그 소스로 무엇이든 할 수 있지만, 그 어떤 보증도 없고, 어떤 저작자도 책임을 지지 않는다는 선언입니다(기본적으로 누구에게도 소송을 제기할 수 없습니다). 이 새로운 BSD 라이선스는 제품 상용화를 장려하기 위한 것입니다. 모든 BSD 코드는 코드의 가용성이나 향후 행위에 대한 제한 없이 판매되거나 독점 제품에 포함될 수 있습니다.
-new BSD 라이선스를 "공공재"와 혼동하지 마십시오. 공공재에 속한 대상 역시 모두가 무료로 사용할 수 있지만, 그것은 소유자가 없습니다.
+새로운 BSD 라이선스를 “퍼블릭 도메인”과 혼동하지 마세요. 퍼블릭 도메인의 항목도 누구나 무료로 사용할 수 있지만 소유자가 없습니다.
[[origins-gpl]]
-== GPL의 기원
+== GPL의 유래
-1980년대 말과 1990년대 초에 유닉스의 미래가 혼란스러웠을 동안, 또 다른 주요 라이선스인 GPL이 개발의 결실을 맺었습니다.
+1980년대 말과 1990년대 초, 유닉스의 미래가 매우 혼란스러웠을 때 라이선스를 중요하게 고려한 GPL이 나타났습니다.
-Emacs의 개발자인 Richard Stallman이 MIT의 스태프 멤버였을 때, 그의 연구실은 시스템을 직접 개발하는 방식에서 상용 제품을 사용하는 방식으로 바꾸었습니다. Stallman은 그가 합법적으로 시스템을 개선할 수 없다는 사실을 알고 화가 났습니다. (Stallman의 동료들 대다수는 MIT에서 개발하고 라이선스한 소프트웨어를 기반으로 하는 두 회사를 창업하기 위해 떠났습니다; 이 소프트웨어의 소스 코드에 대한 관점에서 의견의 불일치가 있었던 것으로 보입니다). Stallman은 상용 소프트웨어 라이선스에 대한 대안을 마련했고 이를 GPL, "GNU Public License"라고 이름지었습니다. 그는 또한 http://www.fsf.org[Free Software Foundation] (FSF)라고 불리는 비영리 단체를 만들었는데, 이는 상용 라이선스에 종속적이지 않으면서 관련 소프트웨어를 포함하는 완전한 운영 체제 개발을 목표로 했습니다. 이 시스템은 "GNU is Not Unix"라는 뜻의 GNU라고 불렸습니다.
+Emacs의 개발자인 리처드 스톨먼(Richard Stallman)은 MIT에서 연구실을 자체 개발 시스템에서 독점 시스템으로 전환할 당시 직원으로 근무하고 있었습니다. 스톨만은 시스템에 사소한 개선 사항을 법적으로 추가할 수 없다는 사실을 알게 되자 화가 났습니다. (스톨만의 동료들 중 다수는 MIT에서 개발하고 MIT가 라이선스를 부여한 소프트웨어를 기반으로 한 두 개의 회사를 설립하기 위해 회사를 떠났는데, 이 소프트웨어의 소스 코드에 대한 접근 권한에 대해 이견이 있었던 것으로 보입니다). 스톨만은 상용 소프트웨어 라이선스에 대한 대안을 고안해냈고 이를 GPL, 즉 “GNU 공중 라이선스”라고 불렀습니다. 또한 그는 비영리 재단인 http://www.fsf.org[자유 소프트웨어 재단](FSF)을 설립하여 모든 관련 소프트웨어를 포함한 전체 운영 체제를 독점 라이선스의 적용을 받지 않는 것으로 개발하고자 했습니다. 이 시스템은 “GNU는 유닉스가 아니다”라는 뜻에서 GNU라고 불렀습니다.
-GPL은 표준적인 상용 라이선스의 정반대 역할을 하도록 디자인되었습니다. 이 관점에서, GPL 프로그램에 어떤 수정이라도 가하면 (사용자에게 소스 코드를 제공하도록 요구하는 방식으로) GPL 커뮤니티에 환원해야 하고 GPL 코드를 사용하거나 링크한 프로그램은 모두 GPL 라이선스를 사용해야 합니다. GPL은 소프트웨어가 상용 제품이 되는 것을 막도록 의도하고 있습니다. GPL 본문의 마지막 문단은 다음과 같이 말하고 있습니다:
+GPL은 표준 독점 라이선스와 반대되는 개념으로 설계되었습니다. 이를 위해 GPL 프로그램을 수정할 경우 해당 프로그램의 소스를 사용자가 원하면 접근할 수 있도록 GPL 커뮤니티에 환원해야 했고, GPL 코드를 사용하거나 링크하는 모든 프로그램은 GPL에 따라 사용해야 했습니다. GPL은 소프트웨어가 독점적인 소유물이 되는 것을 막기 위한 것입니다. GPL의 마지막 단락에 명시되어 있듯이:
-"General Public License는 여러분의 프로그램을 상용 프로그램에 포함시키는 것을 허용하지 않습니다."[1]
+“본 일반 공중 사용 허가서는 귀하의 프로그램을 독점 프로그램에 통합하는 것을 허용하지 않습니다.”<<one>>
-http://www.opensource.org/licenses/gpl-license.php[GPL]는 복잡한 라이선스이기 때문에 GPL을 사용하는 데에는 몇 가지 원칙이 있습니다:
+http://www.opensource.org/licenses/gpl-license.php[GPL]은 복잡한 라이선스이므로 GPL을 사용할 때 지켜야 할 몇 가지 규칙이 있습니다:
-* 여러분은 소프트웨어를 배포하고, 지원하고, 관련된 문서에 대해 필요한 요금을 원하는 만큼 책정할 수 있지만, 소프트웨어 그 자체를 판매할 수는 없습니다.
-* 프로그램을 컴파일하는 데 GPL 코드가 필요하다면, 그 프로그램은 GPL을 따라야 합니다. GPL 라이브러리에 정적으로 링크된 프로그램도 GPL을 따라야 합니다.
-* GPL은 GPL 소프트웨어 및 연관된 모든 개발품을 누구든지 자유롭게 사용할 수 있도록 라이선스할 것을 요구하고 있습니다.
-* 단순히 소프트웨어들을 한데 모아 놓는 것은, 예를 들어 여러 프로그램들이 하나의 디스크에 저장되는 경우, GPL 프로그램을 비 GPL 프로그램에 포함시키는 것으로 간주되지 않습니다.
-* 프로그램의 출력 결과는 파생 작업으로 간주되지 않습니다. 이는 gcc 컴파일러를 법적 문제 없이 상용 환경에 사용할 수 있도록 해 줍니다.
-* 리눅스 커널이 GPL이기 때문에, 리눅스 커널에 정적으로 링크된 코드는 모두 GPL을 따라야 합니다. 동적으로 링크되고 로드할 수 있는 커널 모듈을 통해 이 요구사항을 우회할 수 있습니다. 이 허용은 회사로 하여금 바이너리 드라이버를 배포할 수 있도록 해 주지만, 특정한 버전의 리눅스 커널에서만 동작하게 된다는 단점도 있습니다.
+* 소프트웨어 배포, 지원 또는 문서화 비용은 얼마든지 청구할 수 있지만 소프트웨어 자체는 판매할 수 없습니다.
+* 일반적인 원칙상, 프로그램을 컴파일하는 데 GPL 소스가 필요한 경우 해당 프로그램은 반드시 GPL에 따라야 합니다. 또한 GPL 라이브러리에 정적으로 링크하려면 프로그램은 GPL을 따라야 합니다.
+* GPL에 따르면 GPL 소프트웨어와 관련된 모든 특허는 모든 사람이 자유롭게 사용할 수 있도록 라이선스가 부여되어야 합니다.
+* 여러 프로그램을 하나의 디스크에 넣을 때처럼 단순히 소프트웨어를 한데 모으는 것은 GPL이 아닌 프로그램에 GPL이 적용된 프로그램을 포함하는 것으로 간주하지 않습니다.
+* 프로그램의 결과물은 2차적 저작물로 간주되지 않습니다. 따라서 gcc 컴파일러는 법적 문제 없이 상업적 환경에서 사용할 수 있습니다.
+* Linux 커널은 GPL에 따라 사용되므로 Linux 커널과 정적으로 링크된 모든 코드는 GPL을 준수해야 합니다. 로드 가능한 커널 모듈을 동적으로 링크하면 이 요구 사항을 우회할 수 있습니다. 이를 통해 기업은 바이너리 드라이버를 배포할 수 있지만 특정 버전의 Linux 커널에서만 작동한다는 단점이 있습니다.
-이 복잡성 때문에, 오늘날 리눅스 및 그와 연관된 소프트웨어에서는 GPL의 법적 효력이 무시되고 있습니다. 이에 대한 장기적인 결과는 불분명합니다.
+부분적으로는 그 복잡성으로 인해 오늘날 전 세계 많은 지역에서 리눅스 및 관련 소프트웨어와 관련된 GPL 적법성이 무시되고 있습니다. 이로 인한 장기적인 파급 효과는 불분명합니다.
[[origins-lgpl]]
== 리눅스와 LGPL의 기원
-상용 유닉스 전쟁이 벌어지는 동안, 리눅스 커널은 PC 유닉스의 클론으로 개발되었습니다. Linus Torvalds는 리눅스의 탄생에 대한 공로를 GNU C 컴파일러 및 그에 연관된 GNU 도구들에 돌리고 있습니다. 그는 리눅스 커널을 GPL로 만들었습니다.
+상업용 유닉스 전쟁이 치열하게 벌어지는 동안 리눅스 커널은 PC 유닉스 클론으로 개발되었습니다. 리누스 토발즈(Linus Torvalds)는 리눅스가 존재할 수 있었던 이유로 GNU C 컴파일러와 관련 GNU 도구의 존재를 꼽습니다. 그는 리눅스 커널을 GPL로 배포했습니다.
-GPL은 GPL 코드에 정적으로 링크된 모든 코드 역시 GPL을 따르도록 요구하고 있다는 사실을 기억해 주십시오. 즉 해당 프로그램의 소스 코드가 사용자에게 제공되어야 합니다. 그러나 동적 링크는 GPL 위반으로 간주되지 않습니다. 리눅스에서 상용 프로그램을 사용하는 경우가 점점 더 많아졌습니다. 이러한 프로그램들은 대체로 시스템 라이브러리와 링크되어야 합니다. 이 결과로 http://www.opensource.org/licenses/lgpl-license.php[LGPL] ("Library", 나중에 "Lesser"로 다시 명명된, GPL)라고 하는 GPL의 수정판이 나타났습니다. LGPL은 상용 코드를 GNU C 라이브러리인 glibc와 링크하는 것을 허용합니다. 여러분은 LGPL 라이브러리와 동적으로 링크된 코드를 공개해야 할 의무는 없습니다.
+GPL은 GPL에 따라, 어떤 코드에 정적으로 링크하는 모든 것도 GPL에 따를 것을 요구한다는 사실을 기억하세요. 따라서 이 코드의 소스는 프로그램 사용자가 사용할 수 있도록 제공되어야 합니다. 그러나 동적 링크는 GPL 위반으로 간주되지 않습니다. 독점 애플리케이션을 Linux에 설치하라는 압력이 압도적으로 커졌습니다. 이러한 애플리케이션은 종종 시스템 라이브러리와 링크해야 합니다. 그 결과 http://www.opensource.org/licenses/lgpl-license.php[LGPL](“라이브러리”, 이후 “Lesser”, GPL로 이름이 변경됨)라는 수정된 버전의 GPL이 탄생했습니다. LGPL은 독점 코드를 GNU C 라이브러리인 glibc에 링크할 수 있도록 허용합니다. LGPL이 적용된 라이브러리에 동적으로 링크된 소스 코드를 공개할 필요는 없습니다.
-만약 여러분이 임베디드 시스템에서 흔히 요구되는 것처럼 프로그램과 glibc를 정적으로 링크하고자 한다면, 해당 프로그램을 사유 재산으로 유지할 수는 없습니다. 즉, 소스 코드는 반드시 공개되어야 합니다. GPL과 LGPL 모두 해당 코드를 직접 수정한 것은 공개하도록 요구하고 있습니다.
+임베디드 시스템에서 자주 요구되는 것처럼 애플리케이션을 glibc와 정적으로 링크하는 경우 애플리케이션을 독점적으로 유지할 수 없으므로 소스를 공개해야 합니다. GPL과 LGPL 모두, 라이선스의 관리를 받는 코드를 수정할 경우 이를 공개하도록 요구합니다.
[[orphaning]]
== 오픈 소스 라이선스와 방치 문제
-사유 소프트웨어와 연관된 중요한 문제들 중 하나는 "방치"(orphaning)이라고 알려져 있습니다. 이는 하나의 이는 하나의 사업 실패나 제품 전략 변경이 피라미드 형태로 이에 종속된 많은 시스템과 회사들을 그들이 대처할 수 있는 범위 너머의 이유로 망하게 할 때 일어납니다. 수십 년에 걸친 경험은 잠깐 성공한 소프트웨어 공급자가 그 소프트웨어를 언제까지나 사용 가능하게 해 주지는 않을 것이라는 사실을 보여 주었습니다. 이는 현재의 시장 조건과 전략이 빠르게 변화할 수 있기 때문입니다.
+독점 소프트웨어와 관련된 심각한 문제 중 하나는 ‘방치(Orphaning)’로 알려져 있습니다. 이는 어떤 사업의 실패 또는 제품 전략의 변경이 그에 의존하는 시스템의 거대한 피라미드에 영향을 미치는 것을 말하며, 이로인해 기업이 완전히 통제력을 상실하여 발생할 수도 있습니다. 수십 년간의 경험에 따르면 현재의 시장 상황과 전략은 언제든 급변할 수 있기 때문에 소프트웨어 공급업체의 일시적인 규모나 성공이 해당 소프트웨어의 지속적인 사용을 보장하지 않습니다.
-GPL은 사유 지적 재산과의 링크를 막음으로써 방치 현상을 방지하고자 하고 있습니다.
+GPL은 독점 지적 재산권과의 연결 고리를 끊어 방치화를 방지하고자 합니다.
-BSD 라이선스는 중소기업에게 아무런 법적 의무 또는 비용 없이 소프트웨어를 맡겨 놓는 것과 같은 기능을 합니다. 만약 BSD 라이선스 프로그램의 개발이 중단되면, 회사는 그에 종속적인 프로그램을 단순히 사유 재산을 넘겨받듯 계속 사용할 수 있습니다. 보다 나은 상황은 BSD 라이선스의 코드가 비공식 협회에 의해 유지되는 것입니다. 이러면 개발 과정이 하나의 회사 또는 제품 라인의 생존에 종속적이지 않게 됩니다. 개발 팀이 지속적으로 이어지는 것은 단순히 소스 코드를 얻을 수 있는가의 여부보다 훨씬 더 중요합니다.
+BSD 라이선스는 소규모 회사에게 법적 복잡성이나 비용 없이 상용기업에 의해 성능을 보장받는 소프트웨어와 동등한 효과를 제공합니다. 만약 BSD 라이선스를 받은 프로그램이 방치 된다면, 다른 회사가 그 프로그램에 의존하고 있는 프로그램을 독점적인 방식으로 인수할 수 있습니다. 개발 프로세스가 단일 회사나 제품 라인의 생존에 의존하지 않기 때문에, 소규모 비공식 컨소시엄에 의해 BSD 코드베이스가 유지되는 경우 더 나은 상황이 발생합니다. 소스 코드의 단순한 물리적 가용성보다 개발 팀이 정신적으로 그 영역에 있을 때의 생존 가능성이 훨씬 더 중요합니다.
[[license-cannot]]
-== 라이선스가 할 수 없는 일
+== 라이선스로 할 수 없는 일
-어떠한 라이선스도 미래의 소프트웨어 사용 가능성을 보장해 주지는 않습니다. 저작권자가 언제든지 저작권의 내용을 바꿀 수 있지만, BSD 커뮤니티에서 그러한 시도가 있다면 단순히 소스 코드를 fork하게 됩니다.
+어떤 라이선스도 미래의 소프트웨어 가용성을 보장할 수는 없습니다. 저작권자는 전통적으로 언제든지 저작권 조건을 변경할 수 있지만, BSD 커뮤니티에서는 그러한 시도가 단순히 소스를 포크하게 만든다고 가정하고 있습니다.
-GPL은 라이선스를 무효로 하는 것을 명시적으로 금지하고 있습니다. 그런데 그것이 실제로 일어났습니다. 회사(Mattel)가 GPL 저작권을 인수(cphack)하고, 저작권 전체를 무효화시킨 뒤, 법정에 가서, 승소한 경우[2]입니다. 즉, 그들은 합법적으로 해당 배포본 전체와 모든 파생물에 대한 저작권을 무효화시켰습니다. 더 크고 널리 퍼져 있는 배포폰에 대해서도 이런 일이 일어날 수 있는지는 알 수 없습니다; 뿐만 아니라 특정 소프트웨어가 진짜 GPL인지에 대한 혼란이 있기도 합니다.
+GPL은 라이선스 취소를 명시적으로 허용하지 않습니다. 그러나 한 회사(Mattel)가 GPL 저작권(cphack)을 구입한 후 저작권 전체를 취소하고 법정 소송을 제기하여 승소한 사례가 있습니다<<two>>. 즉, 해당 저작권에 기반한 배포판과 2차 저작물 전체를 합법적으로 취소한 것입니다. 더 크고 분산된 배포판에서도 이런 일이 일어날 수 있을지는 아직 미지수이며, 해당 소프트웨어가 실제로 GPL에 따라 배포되었는지에 대해서도 약간의 혼란이 있습니다.
-다른 예시로는, Red Hat이 FSF 컴파일러 또구들의 개발을 인수한 기술 회사인 Cygnus를 인수한 경우가 있습니다. Cygnus는 그들이 GNU 소프트웨어에 대한 지원을 판매하는 사업 모델을 개발했기 때문에 이렇게 할 수 있었습니다. 이는 그들로 하여금 50여 명의 엔지니어들을 고용하고 많은 수정을 할 수 있는 우세함을 통해 프로그램의 개발 방향을 원하는 대로 할 수 있게 하였습니다. Donald Rosenberg가 언급하기를 "GPL과 같은 라이선스를 사용하는 프로젝트들은 누군가 더 나은 코드를 만들어 원 소유자에 비해 빠르게 일을 해나가는 방법을 프로젝트를 손에 넣을지도 모른다는 지속적인 위협 속에서 살아간다." [3]
+또 다른 예로, 레드햇(Red Hat)은 FSF 컴파일러 도구 개발을 맡았던 엔지니어링 회사인 시그너스(Cygnus)를 인수했습니다. 시그너스를 인수할 수 있었던 이유는 이 회사가 GNU 소프트웨어에 대한 지원을 상품으로 판매하는 비즈니스 모델을 개발했기 때문입니다. 이를 통해 약 50명의 엔지니어를 고용할 수 있었고, 수정 사항을 주도적으로 제안하여 프로그램의 방향을 변경할 수 있었습니다. 도널드 로젠버그(Donald Rosenberg)는 “GPL과 같은 라이선스를 사용하는 프로젝트는… 누군가 더 나은 버전의 코드를 만들어서 기존 소유자보다 더 빨리 프로젝트를 장악할 수 있다는 끊임없는 위협에 시달리고 있다”고 말합니다. <<three>>
[[gpl-advantages]]
-== GPL의 장단점
+== GPL의 장점과 단점
-GPL을 사용하는 흔한 이유 중 하나는 gcc 컴파일러를 수정하거나 확장할 때입니다. 이것은 모든 소프트웨어의 비용이 비싼 데 비해 결과로 만들어진 컴파일러를 다른 사람이 사용할 가능성이 거의 없는 CPU를 개발할 때 특히 적합합니다.
+GPL을 사용하는 일반적인 경우는 gcc 컴파일러를 수정하거나 확장할 때입니다. 이는 특히 모든 소프트웨어 비용이 오버헤드로 간주될 가능성이 높은 환경에서, 일회성으로 특수한 CPU로 작업할 때와 같이 아주 적은 수의 사람만이 변경된 컴파일러를 사용하는 상황에 적합합니다.
-GPL은 CD를 판매하는 작은 회사들에게도 매력적일 수 있습니다. 이윤을 충분히 남기면서도 사용자에게 비싸지 않은 제품을 제공할 수 있습니다. GPL은 또한 GPL 지적 재산에 대한 문서 등의 다양한 기술 지원을 제공하는 회사들에게도 매력적입니다.
+GPL은 최종 사용자에게 매우 저렴한 제품을 제공하는 “박리다매” 환경에서 CD를 판매하는 소규모 회사와 같은 곳에 매력적입니다. 또한 GPL이 적용된 지적 재산권 세계에서 문서를 포함한 다양한 형태의 기술 지원을 제공함으로써 생존을 기대하는 기업에게도 매력적입니다.
-GPL의 잘 알려지지 않고 의도적이지도 않은 사용은 대기업들이 소프트웨어 회사들의 가치를 싸게 평가하는 데 좋다는 것입니다. 다시 말해, GPL은 잠재적으로 전체의 경제적 이익을 저해하고 독과점에 기여하는 마케팅 무기에 적합합니다.
+GPL을 따라 충분히 공개하지 않거나 의도치 않게 GPL을 사용하는 것은 소프트웨어 회사를 약화시키려는 대기업에 매우 유리합니다. 즉, GPL은 마케팅 무기로 사용하기에 적합하여 전반적인 경제적 이익을 감소시키고 독과점 행위에 기여할 수 있습니다.
-GPL은 소프트웨어를 상업화하고 이윤을 창출하고자 하는 사람들에게는 현실적인 문제가 될 수 있습니다. 예를 들어, GPL은 대학원생이 자신의 연구 결과를 상업화하기 위해 회사를 차리는 것을 어렵게 하거나, 해당 학생이 연구 결과를 상업화해줄 것으로 기대하는 회사에 입사하는 것을 어렵게 합니다.
+GPL은 소프트웨어를 상업화하여 수익을 창출하고자 하는 사람들에게 실질적인 문제를 야기할 수 있습니다. 예를 들어, 대학원생이 자신의 연구 결과를 상용화하기 위해 직접 회사를 설립하거나, 유망한 연구 프로젝트의 상용화를 전제로 회사에 입사하는 데 GPL은 어려움을 가중시킬 수 있습니다.
-여러 소프트웨어 표준들의 정적 링크 구현을 사용해야 하는 사람들에게 GPL은 좋지 못한 라이선스인데, 이는 상용으로 구현된 표준의 사용을 막기 때문입니다. 그래서 GPL은 GPL 표준을 사용해야 빌드할 수 있는 프로그램의 수를 최소화하고 있습니다. GPL은 하나의 상용 제품이 표준이 되는 방식을 막으려는 의도를 가지고 있습니다. (리눅스 애플리케이션에는 적용되지 않는데, 이는 그것들이 정적 링크 대신 trap-based API를 사용하기 때문입니다.)
+여러 소프트웨어 표준의 정적연결로 구현되는 작업을 하는 사람들에게 GPL은 표준의 독점적 구현을 사용할 수 없기 때문에 좋지 않은 라이선스인 경우가 많습니다. 따라서 GPL은 GPL 표준을 사용하여 만들 수 있는 프로그램의 수를 줄이는 결과를 낳았습니다. GPL은 독점적 제품을 개발하는 표준 메커니즘을 제공하지 않기 때문입니다. (Linux 애플리케이션은 정적으로 링크하지 않고 트랩 기반 API를 사용하기 때문에 적용되지 않습니다.)
-GPL은 프로그래머들이 프로그램의 발전에 기여하고, 이들의 배포와 지원으로 경쟁하도록 하는 것을 시도하고 있습니다. 이 상황은 필요한 많은 코어 시스템 표준에는 현실적이지 않은데, 이는 이러한 시스템이 기존의 비 GPL 라이선스 표준으로 상용화되거나 그러한 표준과 결합되는 환경에 적용될 수 있기 때문입니다. 실시간 시스템들은 대개 정적으로 링크되기 때문에, 많은 임베디드 시스템 회사들에게 GPL과 LGPL은 단연코 잠재적 문제점으로 여겨집니다.
+GPL은 프로그래머들이 진화하는 프로그램 모음에 기여한 후, 이 모음 배포 및 지원에 경쟁하도록 만듭니다. 이러한 상황은 상업적 커스터마이징이나 기존(non-GPL) 라이선스에 따른 레거시 표준과의 통합이 필요한 매우 다양한 환경에 적용될 수 있는, 많은 필수 핵심 시스템 표준에 대해서는 비현실적입니다. 실시간 시스템은 정적으로 연결되는 경우가 많기 때문에 많은 임베디드 시스템 회사에서는 GPL과 LGPL을 잠재적인 문제로 간주하고 있습니다.
-GPL은 연구 및 개발 단계에서, 수요에 관계없이, 노력을 유지시키기 위한 시도입니다. 이는 더 널리 배포하는 데 알 수 없는 비용이 드는 연구자 및 개발자들에게 최대한의 혜택을 제공합니다.
+GPL은 수요에 관계없이 연구 및 개발 단계 노력의 가치를 유지하려고 합니다. 이를 통해 연구자와 개발자에게는 혜택을 극대화하고, 더 많은 배포를 통해 혜택을 받을 수 있는 사람들에게는 알 수 없는 비용을 요구합니다.
-GPL은 연구 결과가 상용 제품으로 변모하는 것을 막기 위해 고안되었습니다. 이는 고전적인 기술이 마침내 다다르게 되는 종착역과 같으며 이렇게 상용화되는 것을 막는 것은 일반적으로 어렵습니다; GPL은 그러한 과정을 봉쇄하도록 만들어졌습니다.
+GPL은 연구 결과가 독점적인 제품으로 전환되는 것을 막기 위해 고안되었습니다. 하지만 이 단계는 전통적인 기술 이전 파이프라인의 마지막 단계로 간주되는 경우가 많으며 이런 과정은 일반적으로 최상의 상황에서도 충분히 어려운 일인데, GPL은 이를 아예 불가능하게 만들었다고 받아들여지고 있습니다.
[[bsd-advantages]]
== BSD의 장점
-BSD 형식의 라이선스는 장기간의 연구 또는 다음과 같은 개발 환경이 필요한 프로젝트에 이상적입니다:
+BSD 스타일 라이선스는 장기간의 연구 또는 개발 환경이 필요한 기타 프로젝트에 적합한 선택입니다:
-* 거의 비용이 들지 않는 경우
-* 오랜 기간 동안 발전할 경우
-* 누구나 법적 제약 없이 최종 결과물을 상용화하는 것을 허용하고자 할 경우
+* 거의 비용이 없습니다
+* 오랜 기간에 걸쳐 계속 개선될 수 있습니다
+* 누구나 법적 문제를 최소화하면서 최종 결과물을 상용화할 수 있습니다.
-마지막 조건은 가장 지배적인 조항인데, 이는 Apache 프로젝트가 그들의 라이선스에 중점을 둔 사항이기도 합니다:
+아파치 프로젝트가 라이선스를 결정할 때와 마찬가지로 이 최종 고려사항이 가장 중요한 부분이 될 수 있습니다:
-"This type of license is ideal for promoting the use of a reference body of code that implements a protocol for common service. This is another reason why we choose it for the Apache group - many of us wanted to see HTTP survive and become a true multiparty standard, and would not have minded in the slightest if Microsoft or Netscape choose to incorporate our HTTP engine or any other component of our code into their products, if it helped further the goal of keeping HTTP common... All this means that, strategically speaking, the project needs to maintain sufficient momentum, and that participants realize greater value by contributing their code to the project, even code that would have had value if kept proprietary."
+“이러한 유형의 라이선스는 공통 서비스를 위한 프로토콜을 구현하는 참조 코드의 사용을 촉진하는 데 이상적입니다. 우리 중 다수는 HTTP가 살아남아 진정한 멀티파티 표준이 되기를 원하며, HTTP의 공용화라는 목표를 달성하는 데 도움이 된다면 Microsoft나 Netscape가 HTTP 엔진이나 우리 코드의 다른 구성 요소를 자사 제품에 통합하는 데 조금도 신경 쓰지 않을 것입니다. 이 모든 것은 전략적으로 볼 때 프로젝트가 계속 충분한 추진력을 유지해야 하며, 참여자들이 자신의 코드를 프로젝트에 기여함으로써 더 큰 가치를 실현할 수 있으며, 심지어 독점적으로 유지되었다면 가치가 있었을 코드도 마찬가지라는 것을 의미합니다.”
-개발자들은 BSD 라이선스를 선호하는 경향이 있는데, 이는 그들이 코드를 다룸에 있어 법적 분쟁으로부터 벗어나 그들이 하고 싶은 대로 하도록 허락하기 때문입니다. 반면, 시스템을 개발하기보다 주로 사용할 것으로 예상되는 사람들, 혹은 다른 사람들이 코드를 개선해 주기를 기대하는 사람들, 혹은 (국가 공무원과 같이) 시스템 작업으로 생계를 유지하지는 않는 사람들의 경우 GPL을 선호하는데, 이는 다른 사람이 개발한 코드를 자신이 사용할 수 있고 그들의 상관이 저작권을 가지고 있는 일을 막을 수도 있으며 결과적으로 잠재적으로 소프트웨어를 "무용지물"로 만들거나 방치하지 않도록 할 수 있기 때문입니다. 만약 여러분이 경쟁자로 하여금 여러분을 돕도록 강제하고 싶다면, GPL은 매력적인 선택지가 될 것입니다.
+개발자들은 법적인 문제를 피할 수 있고 코드에 대해 원하는 모든 것을 할 수 있다는 점에서 BSD 라이선스가 매력적이라고 생각하는 경향이 있습니다. 반면, 시스템을 프로그래밍하기보다는 주로 시스템을 사용하거나 다른 사람이 코드를 발전시키기를 기대하거나 시스템과 관련된 업무로 생계를 유지하지 않는 사람들(예: 공무원)은 다른 사람이 개발한 코드를 강제로 공개하고 고용주가 저작권을 보유하지 못하게 하여 소프트웨어를 “묻어버리거나” 방치되게 할 수 있는 GPL이 매력적이라고 생각합니다. 경쟁업체의 도움을 받고 싶다면 GPL이 매력적입니다.
-BSD 라이선스는 단순한 선물인 것은 아닙니다. "왜 우리는 우리의 경쟁자를 돕거나 그들이 우리가 만든 결과물을 훔쳐 가도록 내버려 두어야 하나요?"라는 질문은 BSD 라이선스에 관련된 질문에서 자주 볼 수 있습니다. BSD 라이선스 하에서, 만약 어떤 회사가 제품 시장을 독점하고 다른 이들이 이를 전략적이었다고 여길 경우, 다른 회사들은 최소한의 노력만으로 시장 경쟁과 공정성을 증대시킬 경쟁 BSD 파생본에 기여하는 작은 협회를 만들 수 있습니다. 이는 각 회사들로 하여금 이것이 제공하는 이점으로부터 이윤을 창출할 수 있을 것이라는 믿음을 주고, 경제적 유연성과 효율성에도 기여할 수 있습니다. 회원들이 더 빠르고 쉽게 이에 협력할수록, 더욱 성공적일 것입니다. BSD 라이선스는 그러한 행동을 가능하게 해 주면서도 가장 덜 복잡한 라이선스입니다.
+BSD 라이선스는 단순한 선물이 아닙니다. “왜 우리가 경쟁사를 도와주거나 경쟁사가 우리의 작업을 훔치도록 내버려둬야 하는가?”라는 질문은 BSD 라이선스와 관련하여 자주 제기됩니다. BSD 라이선스 하에서, 한 회사가 다른 회사가 전략적으로 간주하는 제품의 틈새 시장을 장악하게 되면, 다른 회사들은 최소한의 노력으로 시장 경쟁과 공정성을 높이는 경쟁적 BSD 프로젝트에 기여함으로써 동등성을 회복하는 것을 목표로 하는 미니 컨소시엄을 구성할 수 있습니다. 이를 통해 각 회사는 경제적 유연성과 효율성에 기여하면서 자신이 제공할 수 있는 이점을 통해 이익을 얻을 수 있다고 믿습니다. 협력하는 구성원들이 이를 더 빠르고 쉽게 수행할 수 있을수록 더 큰 성공을 거둘 수 있습니다. BSD 라이선스는 본질적으로 이러한 행동을 가능하게 하는 최소한도의 복잡성을 가진 라이선스입니다.
-완전하고 경쟁력 있는 오픈 소스 시스템을 단지 저장 매체의 가격만으로 널리 쓸 수 있게 한다는 GPL의 핵심적인 효과는 합리적인 목표입니다. BSD 형식의 라이선스는, 협회 창설을 통한 개인의 연합을 통해, 기술 개발 과정에 대한 경제적 기대를 저버리지 않고 이 목표를 달성할 수 있습니다.
+완전하고 경쟁력 있는 오픈 소스 시스템을 미디어 비용(배포 비용)으로 널리 사용할 수 있도록 하는 것은 GPL의 핵심 효과이며, 이는 합리적인 목표입니다. BSD 스타일의 라이선스는 개인들로 구성된 임시 컨소시엄과 함께 기술 이전 파이프라인의 배포-종료 단계에 구축된 경제적 예상을 파괴하지 않으면서도 이러한 목표를 달성할 수 있습니다.
[[recommendations]]
-== BSD 라이선스를 사용하면 좋은 경우
+== BSD 라이선스 사용에 대한 구체적 권장사항
-* BSD 라이선스는 연구 결과를 널리 배포하고 경제적 이윤을 창출할 수 있도록 하는 데 적합합니다. 그것으로서, NSF, ONR 그리고 DARPA와 같은 연구 개발 기관은 자금을 투자받은 프로젝트의 초기 단계 연구를 위해 소프트웨어, 데이터, 결과, 그리고 오픈 하드웨어에 BSD 형식의 라이선스를 적용할 것을 장려해야 합니다. 그들은 또한 오픈 소스 시스템 구현과 진행중인 오픈 소스 프로젝트를 기반으로 표준을 정할 것을 장려해야 합니다.
-* 정부 정책은 비용과 연구 결과를 실무에 적용할 때의 어려움을 최소화해야 합니다. 가능하다면, 연구 결과를 상용화에 친화적인 BSD 형식의 라이선스로 사용 가능하게 할 것을 요구해야 합니다.
-* 많은 경우에, 저작권 또는 특허에 의해 상용 대학 라이선스에 종속되는 것보다 BSD 형식 라이선스의 형식을 취하는 것이 장기적으로 보았을 때 대학의 연구 목표에 더 근접합니다. 대학 입장에서는 장기적으로 보았을 때 연구 결과를 공개하고, 경제적으로 성공한 졸업생들에 의해 기부받는 것이 금전적으로 더 이득이 되는 실제적인 사례들이 존재합니다.
-* 회사들은 사실상의 표준을 만드는 것이 마케팅 기술의 핵심이 된다는 것을 오랜 경험에 걸쳐 알아왔습니다. 만약 회사가 시스템을 발전시키는 데 독특한 강점이 있다면, BSD 라이선스는 이 역할을 잘 수행합니다. 라이선스는 회사의 전문 기술 덕분에 그들이 통제할 수 있으면서도 많은 사람들에게 법적인 관점에서 매력적입니다. 다른 사람들을 방해하거나 그들의 것을 빼앗고자 할 목적으로 그러한 표준을 만드는 경우 GPL은 적절한 선택이 될 수 있습니다. 그러나 GPL은 상용으로 적용 가능한 표준을 지향하지 않고 방해합니다. 그러한 GPL suite를 사용하는 것은 지속적으로 상용화와 법률 상의 문제를 발생시킵니다. GPL 표준과 그렇지 않은 것을 함께 활용하는 것은 대개 가능하지 않습니다. 진정한 기술 표준은 기술적이지 않은 이유 때문에 다른 표준을 배제할 것을 강제해서는 안 됩니다.
-* 다른 회사들의 상용 제품의 핵심이 될 수 있는 표준을 개발하고 장려하는 데 관심이 있는 회사는 GPL에 대해 조심해야 합니다. 사용된 라이선스에 관계없이, 결과가 되는 소프트웨어는 기술적인 변화의 대부분과 시스템의 상태를 가장 잘 아는 사람들에게 맡겨질 것입니다. GPL은 단지 결과에 추가적인 법적 제약을 가할 뿐입니다.
-* 오픈 소스 코드를 개발하는 큰 회사는 오픈 소스를 옹호하는 프로그래머를 조심해야 하는데, 이는 그들이 다른 곳으로 이직할 경우에도 여전히 그 소프트웨어를 사용할 수 있기 때문입니다. 일부 회사들은, 특히 해당 소프트웨어가 핵심 전략에 직접적으로 연관되어 있지 않을 때, 이러한 행동을 직원들의 특권으로써 장려합니다. 이는 사실 직접적인 비용 손실 없이 잠재적인 기회 비용만을 잃는 퇴직 혜택입니다. 직원을 회사 외부를 위해 일하도록 장려하는 것은 종종 회사가 손해 없이 제공할 수 있는 간단한 혜택이 되기도 합니다.
-* 소프트웨어가 방치될 것이 걱정되는 작은 개발 회사는, 가능하다면 BSD 라이선스를 사용하는 것을 고려해볼 필요가 있습니다. 회사들은 그 규모에 관계없이 BSD 형식 오픈 소스 프로젝트를 구성함으로써 법적인, 그리고 구조적인 간접 비용을 최소화하는 상호간의 이익을 도모할 수 있습니다.
-* 비영리단체들은 가능하다면 오픈 소스 프로젝트에 참여해야 합니다. 서로 다른 라이선스의 코드를 함께 사용하는 것과 같은 소프트웨어상의 문제를 최소화하기 위해, BSD 형식의 라이선스가 장려되어야 합니다. 소프트웨어 개발과 밀접하게 관련있는 비영리단체는 GPL을 더욱 경계해야 할 것입니다. 법률을 적용하는 일이 많은 비용을 요구하는 일부 지역에서는, GPL에 비해 단순한 BSD 라이선스가 고려해볼 만한 이점이 될 것입니다.
+* BSD 라이선스는 연구 결과를 널리 배포하고 경제에 가장 큰 혜택을 줄 수 있는 방식으로 이전하는 데 바람직합니다. 따라서 NSF, ONR, DARPA와 같은 연구자금 지원 기관은 자금 지원 연구 프로젝트의 초기 단계에서 소프트웨어, 데이터, 결과물, 개방형 하드웨어에 BSD 스타일의 라이선스를 채택하도록 장려해야 합니다. 또한 구현된 오픈 소스 시스템과 진행 중인 오픈 소스 프로젝트를 중심으로 표준을 형성하도록 장려해야 합니다.
+* 정부 정책은 연구에서 배포로 이동하는 데 드는 비용과 어려움을 최소화해야 합니다. 가능한 경우, 지원금은 상업화 친화적인 BSD 스타일의 라이선스에 따라 결과를 사용할 수 있도록 요구해야 합니다.
+* 많은 경우, BSD 스타일 라이선스의 장기적인 결과는 연구 결과가 저작권이나 특허로 보호되고 대학의 독점적인 라이선스를 따를 때보다 대학의 연구 헌장에 명시된 목표를 더 정확하게 반영합니다. 연구 결과를 공개하고 상업적으로 성공한 동문들의 기부에 호소함으로써 대학이 장기적으로 재정적으로 더 나은 보상을 받는다는 일화가 존재합니다.
+* 기업들은 사실상의 표준을 만드는 것이 중요한 마케팅 기법이라는 것을 오랫동안 인식해 왔습니다. 기업이 시스템을 발전시키는 데 있어 남들과 차별되는 이점을 가지고 있다면 BSD 라이선스는 이러한 특징에 잘 부합됩니다. 이 라이선스는 법적으로 더 많은 사람들에게 매력적으로 다가갈 수 있으며, 회사가 가진 전문성을 통해 회사의 통제권을 보장할 수 있습니다. 만약 누군가가 기술 표준을 훼손하거나 다른 표준을 채택하려고 할 때, GPL은 그러한 행동에 이용할 수 있는 적합한 수단이 될 수 있습니다. 그러나 GPL은 상업적으로 적용 가능한 표준이 아닌 제품군을 장려하기 때문에 장기적으론 해당 표준의 개선에 불이익을 줍니다. 이러한 제품군을 사용하면 상업화 및 법적 문제가 지속적으로 제기됩니다. 또한 어떤 표준은 GPL을 따르고 어떤 표준은 그렇지 않은 경우 표준을 혼합하는 것이 불가능할 수도 있습니다. 진정한 기술 표준은 비기술적인 이유로 다른 표준을 배제하도록 요구해서는 안 됩니다.
+* 다른 회사의 상용 제품의 핵심이 될 수 있는 진화하는 표준을 홍보하는 데 관심이 있는 기업은 GPL을 주의해야 합니다. 어떤 라이선스를 사용하든, 결과물인 소프트웨어는 일반적으로 엔지니어링 변경의 대부분을 실제로 수행하고 시스템 상태를 가장 잘 이해하는 사람에게 귀속됩니다. GPL은 결과물에 법적 마찰을 더할 뿐입니다.
+* 오픈 소스 코드를 개발하는 대기업은 직원이 이직을 하더라도 그 소프트웨어를 계속 사용할 수 있기 때문에 프로그래머들이 오픈 소스를 높이 평가한다는 사실을 인지해야 합니다. 일부 기업에서는 특히 관련된 소프트웨어가 직접적으로 전략적이지 않은 경우 이러한 행동을 고용 특전으로 장려하기도 합니다. 이는 사실상 잠재적인 기회 비용 손실은 있지만 직접적인 비용은 들지 않는 선급 퇴직금과 같습니다. 직원들이 회사 밖에서 동료들의 찬사를 받기 위해 일하도록 장려하는 것은 때때로 회사에게 있어선 거의 단점이 없는 값싼 이동식 혜택을 제공할 수 있습니다(역자 주: 원문에서 “cheap portable benefit”이라고 표현한 것은, 아무래도 회사가 직원을 타 회사에서 데려 왔을때 단순히 그 직원이 개발한 소프트웨어를 마음대로 쓸 수 있다는 뜻 보다는, 향후 그 소프트웨어가 업그레이드 될 때의 이득과 직원의 기술력까지 완전히 다 얻을 수 있다는 의미로 쓰인 것 같습니다).
+* 방치되기 쉬운 소프트웨어 프로젝트를 가진 소규모 회사는 가능하면 BSD 라이선스를 사용해야 합니다. 회사의 규모가 어떻든 모든 회사는 진정한 BSD 스타일의 오픈 소스 프로젝트 형태의 프로젝트를 통해 최소한의 법적 및 조직 오버헤드를 유지할 수 있어 서로에게 이득이 되므로 이런 방법에 대해 진지한 고려를 해야 합니다.
+* 비영리 단체는 가능하면 오픈소스 프로젝트에 참여해야 합니다. 서로 다른 라이선스 하의 코드 혼용과 같은 소프트웨어 엔지니어링 문제를 최소화하려면 BSD 스타일의 라이선스를 권장해야 합니다. 특히 개발도상국과 교류하는 비영리 단체의 경우 GPL을 주의 깊게 살펴야 합니다. 법 적용에 많은 비용이 드는 일부 지역에서는 GPL에 비해 새로운 BSD 라이선스의 단순성이 상당한 이점이 될 수 있습니다.
[[conclusion]]
-== 맺음말
+== 결론
-오픈 소스 코드의 상용화를 막기 위해 만들어진 GPL과는 달리, BSD 라이선스는 미래의 행동에 최소한의 제약만을 가합니다. 이는 프로젝트나 회사의 필요에 따라 BSD 코드를 오픈 소스로 유지하거나 상용 솔루션에 사용될 수 있도록 허락합니다. 다시 말해서, BSD 라이선스는 개발 과정에서 법적인 시한 폭탄이 되지 않습니다.
+오픈 소스 코드의 독점적인 상업화를 방지하기 위해 고안된 GPL과 달리, BSD 라이선스는 향후 행위에 대해 최소한의 제한을 두고 있습니다. 따라서 프로젝트나 회사의 필요에 따라 BSD 코드를 오픈소스로 유지하거나 상용 솔루션에 통합할 수 있습니다. 다시 말해, BSD 라이선스는 개발 과정의 어느 시점에서도 법적 시한폭탄이 되지 않습니다.
-더불어 BSD 라이선스는, GPL이나 LGPL 라이선스와는 달리 복잡한 법적 의무가 주어지지 않기 때문에, 개발자와 회사가 라이선스 위반 여부에 대해 걱정하는 대신 좋은 코드를 작성하고 홍보하는 데 집중할 수 있도록 해 줍니다.
+또한, BSD 라이선스는 GPL이나 LGPL 라이선스처럼 법적 복잡성을 수반하지 않기 때문에, 개발자와 회사는 라이선스 위반 여부를 걱정할 필요 없이 좋은 코드를 만들고 홍보하는 데 시간을 할애할 수 있습니다.
[[addenda]]
-== 추가 정보
+[bibliography]
+== 참고 문헌
-[.programlisting]
-....
+* [[[one,1]]] http://www.gnu.org/licenses/gpl.html
-[1] http://www.gnu.org/licenses/gpl.html
+* [[[two,2]]] http://archives.cnn.com/2000/TECH/computing/03/28/cyberpatrol.mirrors/
-[2] http://archives.cnn.com/2000/TECH/computing/03/28/cyberpatrol.mirrors/
+* [[[three,3]]] Open Source: the Unauthorized White Papers, Donald K. Rosenberg, IDG Books, 2000. Quotes are from page 114, "Effects of the GNU GPL".
-[3] Open Source: the Unauthorized White Papers, Donald K. Rosenberg, IDG Books,
- 2000. Quotes are from page 114, ``Effects of the GNU GPL''.
+* [[[four,4]]] In the "What License to Use?" section of http://www.oreilly.com/catalog/opensources/book/brian.html
-[4] In the "What License to Use?" section of
- http://www.oreilly.com/catalog/opensources/book/brian.html
-
-This whitepaper is a condensation of an original work available at
-http://alumni.cse.ucsc.edu/~brucem/open_source_license.htm
-....
+이 백서는 http://alumni.cse.ucsc.edu/~brucem/open_source_license.htm에서 제공되는 원본 저작물을 요약한 것입니다
diff --git a/documentation/content/ko/articles/bsdl-gpl/_index.po b/documentation/content/ko/articles/bsdl-gpl/_index.po
new file mode 100644
index 0000000000..123995d569
--- /dev/null
+++ b/documentation/content/ko/articles/bsdl-gpl/_index.po
@@ -0,0 +1,1078 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Kyung-tak, Yoo <stonegaze@me.com>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: 2023-03-27 11:54+0000\n"
+"Last-Translator: Kyung-tak, Yoo <stonegaze@me.com>\n"
+"Language-Team: Korean <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesbsdl-gpl/ko/>\n"
+"Language: ko\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 4.15.1\n"
+
+#. type: Title =
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:1
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:11
+#, no-wrap
+msgid "Why you should use a BSD style license for your Open Source Project"
+msgstr "오픈소스 프로젝트에 BSD 스타일 라이선스를 사용해야 하는 이유"
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:43
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:47
+#, no-wrap
+msgid "Introduction"
+msgstr "소개"
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:52
+msgid ""
+"This document makes a case for using a BSD style license for software and "
+"data; specifically it recommends using a BSD style license in place of the "
+"GPL. It can also be read as a BSD versus GPL Open Source License "
+"introduction and summary."
+msgstr ""
+"이 문서는 소프트웨어와 데이터에 BSD 스타일 라이선스를 사용하는 사례를 "
+"제시하며, 특히 GPL 대신 BSD 스타일 라이선스를 사용할 것을 권장합니다. 이 "
+"문서는 BSD와 GPL 오픈 소스 라이선스 소개 및 요약으로 생각하셔도 됩니다."
+
+#. type: Title ==
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:54
+#, no-wrap
+msgid "Very Brief Open Source History"
+msgstr "아주 간략한 오픈소스 역사"
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:60
+msgid ""
+"Long before the term \"Open Source\" was used, software was developed by "
+"loose associations of programmers and freely exchanged. Starting in the "
+"early 1950's, organizations such as http://www.share.org[SHARE] and http://"
+"www.decus.org[DECUS] developed much of the software that computer hardware "
+"companies bundled with their hardware offerings. At that time computer "
+"companies were in the hardware business; anything that reduced software cost "
+"and made more programs available made the hardware companies more "
+"competitive."
+msgstr ""
+"“오픈 소스”라는 용어가 사용되기 훨씬 전부터 소프트웨어는 프로그래머들의 "
+"느슨한 연합에 의해 개발되고 자유롭게 교환되었습니다. 1950년대 초부터 "
+"http://www.share.org[SHARE] 및 http://www.decus.org[DECUS]와 같은 조직이 "
+"컴퓨터 하드웨어 회사가 하드웨어 제품에 번들로 제공하는 소프트웨어의 대부분을 "
+"개발했습니다. 당시 컴퓨터 회사들은 하드웨어를 주축으로 사업을 하고 있었기 "
+"때문에 소프트웨어 비용을 절감하고 더 많은 프로그램을 사용할 수 있게 하면 "
+"컴퓨터 회사의 경쟁력이 높아졌습니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:67
+msgid ""
+"This model changed in the 1960's. In 1965 ADR developed the first licensed "
+"software product independent of a hardware company. ADR was competing "
+"against a free IBM package originally developed by IBM customers. ADR "
+"patented their software in 1968. To stop sharing of their program, they "
+"provided it under an equipment lease in which payment was spread over the "
+"lifetime of the product. ADR thus retained ownership and could control "
+"resale and reuse."
+msgstr ""
+"이 모델은 1960년대에 바뀌었습니다. 1965년 ADR은 하드웨어 회사로부터 "
+"독립하여 최초의 라이선스 소프트웨어 제품을 개발했습니다. ADR은 원래 IBM "
+"고객이 개발한 무료 IBM 패키지와 경쟁하고 있었습니다. ADR은 1968년 "
+"소프트웨어 특허를 획득했습니다. 프로그램의 공유를 막기 위해 제품 수명 기간 "
+"동안 요금을 나눠내는 장비 리스 방식으로 제품을 제공했습니다. 따라서 ADR은 "
+"소유권을 유지하고 재판매 및 재사용을 통제할 수 있었습니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:70
+msgid ""
+"In 1969 the US Department of Justice charged IBM with destroying businesses "
+"by bundling free software with IBM hardware. As a result of this suit, IBM "
+"unbundled its software; that is, software became independent products "
+"separate from hardware."
+msgstr ""
+"1969년 미국 법무부는 IBM이 무료 소프트웨어를 IBM 하드웨어에 번들로 "
+"제공함으로써 비즈니스를 파괴했다는 혐의로 IBM을 기소했습니다. 이 소송의 "
+"결과로 IBM은 소프트웨어를 번들에서 분리하였고, 소프트웨어가 하드웨어와 "
+"분리된 독립적인 제품이 되었습니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:75
+msgid ""
+"In 1968 Informatics introduced the first commercial killer-app and rapidly "
+"established the concept of the software product, the software company, and "
+"very high rates of return. Informatics developed the perpetual license "
+"which is now standard throughout the computer industry, wherein ownership is "
+"never transferred to the customer."
+msgstr ""
+"1968년 인포매틱스(Informatics)는 최초의 상용 킬러 앱을 출시하여 소프트웨어 "
+"제품, 소프트웨어 회사, 매우 높은 수익률이라는 개념을 빠르게 정립했습니다. "
+"인포매틱스는 현재 컴퓨터 업계에서 표준이 된 영구 라이선스를 개발했는데, 이 "
+"라이선스는 소유권이 고객에게 이전되지 않습니다."
+
+#. type: Title ==
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:77
+#, no-wrap
+msgid "Unix from a BSD Licensing Perspective"
+msgstr "BSD 라이선스 관점에서 본 유닉스"
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:83
+msgid ""
+"AT&T, who owned the original Unix implementation, was a publicly regulated "
+"monopoly tied up in anti-trust court; it was legally unable to sell a "
+"product into the software market. It was, however, able to provide it to "
+"academic institutions for the price of media."
+msgstr ""
+"최초의 유닉스 구현을 소유한 AT&T는 미국의 반독점법에 묶여 공공 규제를 받는 "
+"독점기업이었기 때문에 법적으로 소프트웨어 시장에 제품을 판매할 수 "
+"없었습니다. 하지만 학술 기관에는 미디어 가격(순수한 패키지 가격)을 받고 "
+"제공할 수 있었습니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:89
+msgid ""
+"Universities rapidly adopted Unix after an OS conference publicized its "
+"availability. It was extremely helpful that Unix ran on the PDP-11, a very "
+"affordable 16-bit computer, and was coded in a high-level language that was "
+"demonstrably good for systems programming. The DEC PDP-11 had, in effect, "
+"an open hardware interface designed to make it easy for customers to write "
+"their own OS, which was common. As DEC founder Ken Olsen famously "
+"proclaimed, \"software comes from heaven when you have good hardware\"."
+msgstr ""
+"한 OS 컨퍼런스에서 유닉스를 공적으로 사용할 수 있다는 사실이 알려지면서 많은 "
+"대학들은 빠르게 유닉스를 도입했습니다. 유닉스가 매우 저렴한 16비트 컴퓨터인 "
+"PDP-11에서 실행되고 시스템 프로그래밍에 매우 적합한 고급 언어로 코딩되어 "
+"있었다는 점이 큰 도움이 되었습니다. DEC PDP-11은 고객이 자체 OS를 쉽게 "
+"작성할 수 있도록 설계된 개방형 하드웨어 인터페이스를 갖추고 있었는데, "
+"당시에는 이러한 인터페이스가 일반적이었습니다. “좋은 하드웨어가 있으면 "
+"소프트웨어는 하늘에서 내려온다”는 DEC 창립자 켄 올슨(Ken Olsen)의 유명한 "
+"명언이 있습니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:95
+msgid ""
+"Unix author Ken Thompson returned to his alma mater, University of "
+"California Berkeley (UCB), in 1975 and taught the kernel line-by-line. This "
+"ultimately resulted in an evolving system known as BSD (Berkeley Standard "
+"Distribution). UCB converted Unix to 32-bits, added virtual memory, and "
+"implemented the version of the TCP/IP stack upon which the Internet was "
+"essentially built. UCB made BSD available for the cost of media, under what "
+"became known as \"the BSD license\". A customer purchased Unix from AT&T "
+"and then ordered a BSD tape from UCB."
+msgstr ""
+"유닉스의 창시자 켄 톰슨(Ken Thompson)은 1975년 모교인 캘리포니아 버클리 "
+"대학교(UCB)로 돌아와 커널을 한 줄 한 줄 가르쳤습니다. 그 결과 BSD(버클리 "
+"표준 배포판)로 알려진 진화하는 시스템이 탄생했습니다. UCB는 유닉스를 "
+"32비트로 변환하고, 가상 메모리를 추가하고, 인터넷의 기본이 되는 TCP/IP 스택 "
+"버전을 구현했습니다. UCB는 “BSD 라이선스”라는 이름으로 미디어 비용으로 "
+"BSD를 사용할 수 있게 했습니다. 과거에 AT&T에서 유닉스를 구입한 고객들은 "
+"이제 UCB에서 BSD 테이프를 주문하게 되었습니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:99
+msgid ""
+"In the mid-1980s a government anti-trust case against AT&T ended with the "
+"break-up of AT&T. AT&T still owned Unix and was now able to sell it. AT&T "
+"embarked on an aggressive licensing effort and most commercial Unixes of the "
+"day became AT&T-derived."
+msgstr ""
+"1980년대 중반, AT&T에 대한 정부의 반독점 소송으로 인해 AT&T가 "
+"해체되었습니다. AT&T는 여전히 유닉스를 소유하고 있었으며 이제 이를 판매할 "
+"수 있게 되었습니다. AT&T는 공격적인 라이선스 확보에 나섰고, 당시 대부분의 "
+"상용 유닉스는 AT&T에서 파생된 제품이 되었습니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:105
+msgid ""
+"In the early 1990's AT&T sued UCB over license violations related to BSD. "
+"UCB discovered that AT&T had incorporated, without acknowledgment or "
+"payment, many improvements due to BSD into AT&T's products, and a lengthy "
+"court case, primarily between AT&T and UCB, ensued. During this period some "
+"UCB programmers embarked on a project to rewrite any AT&T code associated "
+"with BSD. This project resulted in a system called BSD 4.4-lite (lite "
+"because it was not a complete system; it lacked 6 key AT&T files)."
+msgstr ""
+"1990년대 초, AT&T는 BSD와 관련된 라이선스 위반으로 UCB를 고소했습니다. 이 "
+"과정에서 UCB는 AT&T가 BSD로 인한 많은 개선 사항을 승인이나 대가 없이 AT&T의 "
+"제품에 통합했다는 사실을 발견했고, AT&T와 UCB 간의 오랜 법정 소송이 "
+"이어졌습니다. 이 기간 동안 일부 UCB 프로그래머들은 BSD와 관련된 모든 AT&T "
+"코드를 다시 작성하는 프로젝트에 착수했습니다. 이 프로젝트는 BSD 4.4-"
+"lite라는 시스템을 탄생시켰습니다(라이트라고 명명한 것은 6개의 주요 AT&T "
+"파일이 부족해 완전한 시스템이 아니었기 때문입니다)."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:109
+msgid ""
+"A lengthy series of articles published slightly later in Dr. Dobbs magazine "
+"described a BSD-derived 386 PC version of Unix, with BSD-licensed "
+"replacement files for the 6 missing 4.4 lite files. This system, named "
+"386BSD, was due to ex-UCB programmer William Jolitz. It became the original "
+"basis of all the PC BSDs in use today."
+msgstr ""
+"조금 후에 닥터 돕스(Dr. Dobbs) 잡지에 실린 긴 기사 시리즈에서는 누락된 6개의 "
+"4.4 라이트 파일에 대한 BSD 라이선스 대체 파일과 함께 BSD 파생 386 PC 버전의 "
+"유닉스에 대해 설명했습니다. 386BSD로 명명된 이 시스템은 전직 UCB 프로그래머 "
+"윌리엄 졸리츠(William Jolitz)가 만든 것입니다. 이 시스템은 현재 사용 중인 "
+"모든 PC BSD의 기반이 되었습니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:112
+msgid ""
+"In the mid 1990s, Novell purchased AT&T's Unix rights and a (then secret) "
+"agreement was reached to terminate the lawsuit. UCB soon terminated its "
+"support for BSD."
+msgstr ""
+"1990년대 중반, 노벨(Novell)은 AT&T의 유닉스 권리를 인수했고, 소송을 "
+"종료하기로 (당시엔 비밀리에) 합의가 이루어졌습니다. UCB는 곧 BSD에 대한 "
+"지원을 종료했습니다."
+
+#. type: Title ==
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:114
+#, no-wrap
+msgid "The Current State of FreeBSD and BSD Licenses"
+msgstr "FreeBSD의 현황과 BSD 라이선스"
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:120
+msgid ""
+"The so-called http://www.opensource.org/licenses/bsd-license.php[new BSD "
+"license] applied to FreeBSD within the last few years is effectively a "
+"statement that you can do anything with the program or its source, but you "
+"do not have any warranty and none of the authors has any liability "
+"(basically, you cannot sue anybody). This new BSD license is intended to "
+"encourage product commercialization. Any BSD code can be sold or included "
+"in proprietary products without any restrictions on the availability of your "
+"code or your future behavior."
+msgstr ""
+"지난 몇 년 동안 FreeBSD에 적용된 소위 http://www.opensource.org/licenses/bsd-"
+"license.php[new BSD license]는 사실상 프로그램이나 그 소스로 무엇이든 할 수 "
+"있지만, 그 어떤 보증도 없고, 어떤 저작자도 책임을 지지 않는다는 선언입니다("
+"기본적으로 누구에게도 소송을 제기할 수 없습니다). 이 새로운 BSD 라이선스는 "
+"제품 상용화를 장려하기 위한 것입니다. 모든 BSD 코드는 코드의 가용성이나 "
+"향후 행위에 대한 제한 없이 판매되거나 독점 제품에 포함될 수 있습니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:123
+msgid ""
+"Do not confuse the new BSD license with \"public domain\". While an item in "
+"the public domain is also free for all to use, it has no owner."
+msgstr ""
+"새로운 BSD 라이선스를 “퍼블릭 도메인”과 혼동하지 마세요. 퍼블릭 도메인의 "
+"항목도 누구나 무료로 사용할 수 있지만 소유자가 없습니다."
+
+#. type: Title ==
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:125
+#, no-wrap
+msgid "The origins of the GPL"
+msgstr "GPL의 유래"
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:129
+msgid ""
+"While the future of Unix had been so muddled in the late 1980s and early "
+"1990s, the GPL, another development with important licensing considerations, "
+"reached fruition."
+msgstr "1980년대 말과 1990년대 초, 유닉스의 미래가 매우 혼란스러웠을 때 라이선스를 "
+"중요하게 고려한 GPL이 나타났습니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:138
+msgid ""
+"Richard Stallman, the developer of Emacs, was a member of the staff at MIT "
+"when his lab switched from home-grown to proprietary systems. Stallman "
+"became upset when he found that he could not legally add minor improvements "
+"to the system. (Many of Stallman's co-workers had left to form two "
+"companies based on software developed at MIT and licensed by MIT; there "
+"appears to have been disagreement over access to the source code for this "
+"software). Stallman devised an alternative to the commercial software "
+"license and called it the GPL, or \"GNU Public License\". He also started a "
+"non-profit foundation, the http://www.fsf.org[Free Software Foundation] "
+"(FSF), which intended to develop an entire operating system, including all "
+"associated software, that would not be subject to proprietary licensing. "
+"This system was called GNU, for \"GNU is Not Unix\"."
+msgstr ""
+"Emacs의 개발자인 리처드 스톨먼(Richard Stallman)은 MIT에서 연구실을 자체 "
+"개발 시스템에서 독점 시스템으로 전환할 당시 직원으로 근무하고 있었습니다. "
+"스톨만은 시스템에 사소한 개선 사항을 법적으로 추가할 수 없다는 사실을 알게 "
+"되자 화가 났습니다. (스톨만의 동료들 중 다수는 MIT에서 개발하고 MIT가 "
+"라이선스를 부여한 소프트웨어를 기반으로 한 두 개의 회사를 설립하기 위해 "
+"회사를 떠났는데, 이 소프트웨어의 소스 코드에 대한 접근 권한에 대해 이견이 "
+"있었던 것으로 보입니다). 스톨만은 상용 소프트웨어 라이선스에 대한 대안을 "
+"고안해냈고 이를 GPL, 즉 “GNU 공중 라이선스”라고 불렀습니다. 또한 그는 "
+"비영리 재단인 http://www.fsf.org[자유 소프트웨어 재단](FSF)을 설립하여 모든 "
+"관련 소프트웨어를 포함한 전체 운영 체제를 독점 라이선스의 적용을 받지 않는 "
+"것으로 개발하고자 했습니다. 이 시스템은 “GNU는 유닉스가 아니다”라는 뜻에서 "
+"GNU라고 불렀습니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:143
+msgid ""
+"The GPL was designed to be the antithesis of the standard proprietary "
+"license. To this end, any modifications that were made to a GPL program "
+"were required to be given back to the GPL community (by requiring that the "
+"source of the program be available to the user) and any program that used or "
+"linked to GPL code was required to be under the GPL. The GPL was intended "
+"to keep software from becoming proprietary. As the last paragraph of the "
+"GPL states:"
+msgstr ""
+"GPL은 표준 독점 라이선스와 반대되는 개념으로 설계되었습니다. 이를 위해 GPL "
+"프로그램을 수정할 경우 해당 프로그램의 소스를 사용자가 원하면 접근할 수 "
+"있도록 GPL 커뮤니티에 환원해야 했고, GPL 코드를 사용하거나 링크하는 모든 "
+"프로그램은 GPL에 따라 사용해야 했습니다. GPL은 소프트웨어가 독점적인 "
+"소유물이 되는 것을 막기 위한 것입니다. GPL의 마지막 단락에 명시되어 있듯이:"
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:145
+msgid ""
+"\"This General Public License does not permit incorporating your program "
+"into proprietary programs.\"<<one>>"
+msgstr "“본 일반 공중 사용 허가서는 귀하의 프로그램을 독점 프로그램에 통합하는 것을 "
+"허용하지 않습니다.”<<one>>"
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:147
+msgid ""
+"The http://www.opensource.org/licenses/gpl-license.php[GPL] is a complex "
+"license so here are some rules of thumb when using the GPL:"
+msgstr ""
+"http://www.opensource.org/licenses/gpl-license.php[GPL]은 복잡한 "
+"라이선스이므로 GPL을 사용할 때 지켜야 할 몇 가지 규칙이 있습니다:"
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:149
+msgid ""
+"you can charge as much as you want for distributing, supporting, or "
+"documenting the software, but you cannot sell the software itself."
+msgstr "소프트웨어 배포, 지원 또는 문서화 비용은 얼마든지 청구할 수 있지만 "
+"소프트웨어 자체는 판매할 수 없습니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:150
+msgid ""
+"the rule-of-thumb states that if GPL source is required for a program to "
+"compile, the program must be under the GPL. Linking statically to a GPL "
+"library requires a program to be under the GPL."
+msgstr ""
+"일반적인 원칙상, 프로그램을 컴파일하는 데 GPL 소스가 필요한 경우 해당 "
+"프로그램은 반드시 GPL에 따라야 합니다. 또한 GPL 라이브러리에 정적으로 "
+"링크하려면 프로그램은 GPL을 따라야 합니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:151
+msgid ""
+"the GPL requires that any patents associated with GPLed software must be "
+"licensed for everyone's free use."
+msgstr "GPL에 따르면 GPL 소프트웨어와 관련된 모든 특허는 모든 사람이 자유롭게 사용할 "
+"수 있도록 라이선스가 부여되어야 합니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:152
+msgid ""
+"simply aggregating software together, as when multiple programs are put on "
+"one disk, does not count as including GPLed programs in non-GPLed programs."
+msgstr ""
+"여러 프로그램을 하나의 디스크에 넣을 때처럼 단순히 소프트웨어를 한데 모으는 "
+"것은 GPL이 아닌 프로그램에 GPL이 적용된 프로그램을 포함하는 것으로 간주하지 "
+"않습니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:153
+msgid ""
+"output of a program does not count as a derivative work. This enables the "
+"gcc compiler to be used in commercial environments without legal problems."
+msgstr ""
+"프로그램의 결과물은 2차적 저작물로 간주되지 않습니다. 따라서 gcc 컴파일러는 "
+"법적 문제 없이 상업적 환경에서 사용할 수 있습니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:154
+msgid ""
+"since the Linux kernel is under the GPL, any code statically linked with the "
+"Linux kernel must be GPLed. This requirement can be circumvented by "
+"dynamically linking loadable kernel modules. This permits companies to "
+"distribute binary drivers, but often has the disadvantage that they will "
+"only work for particular versions of the Linux kernel."
+msgstr ""
+"Linux 커널은 GPL에 따라 사용되므로 Linux 커널과 정적으로 링크된 모든 코드는 "
+"GPL을 준수해야 합니다. 로드 가능한 커널 모듈을 동적으로 링크하면 이 요구 "
+"사항을 우회할 수 있습니다. 이를 통해 기업은 바이너리 드라이버를 배포할 수 "
+"있지만 특정 버전의 Linux 커널에서만 작동한다는 단점이 있습니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:157
+msgid ""
+"Due in part to its complexity, in many parts of the world today the "
+"legalities of the GPL are being ignored in regard to Linux and related "
+"software. The long-term ramifications of this are unclear."
+msgstr ""
+"부분적으로는 그 복잡성으로 인해 오늘날 전 세계 많은 지역에서 리눅스 및 관련 "
+"소프트웨어와 관련된 GPL 적법성이 무시되고 있습니다. 이로 인한 장기적인 파급 "
+"효과는 불분명합니다."
+
+#. type: Title ==
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:159
+#, no-wrap
+msgid "The origins of Linux and the LGPL"
+msgstr "리눅스와 LGPL의 기원"
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:164
+msgid ""
+"While the commercial Unix wars raged, the Linux kernel was developed as a PC "
+"Unix clone. Linus Torvalds credits the existence of the GNU C compiler and "
+"the associated GNU tools for the existence of Linux. He put the Linux "
+"kernel under the GPL."
+msgstr ""
+"상업용 유닉스 전쟁이 치열하게 벌어지는 동안 리눅스 커널은 PC 유닉스 클론으로 "
+"개발되었습니다. 리누스 토발즈(Linus Torvalds)는 리눅스가 존재할 수 있었던 "
+"이유로 GNU C 컴파일러와 관련 GNU 도구의 존재를 꼽습니다. 그는 리눅스 커널을 "
+"GPL로 배포했습니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:173
+msgid ""
+"Remember that the GPL requires anything that statically links to any code "
+"under the GPL also be placed under the GPL. The source for this code must "
+"thus be made available to the user of the program. Dynamic linking, "
+"however, is not considered a violation of the GPL. Pressure to put "
+"proprietary applications on Linux became overwhelming. Such applications "
+"often must link with system libraries. This resulted in a modified version "
+"of the GPL called the http://www.opensource.org/licenses/lgpl-license."
+"php[LGPL] (\"Library\", since renamed to \"Lesser\", GPL). The LGPL allows "
+"proprietary code to be linked to the GNU C library, glibc. You do not have "
+"to release the source code which has been dynamically linked to an LGPLed "
+"library."
+msgstr ""
+"GPL은 GPL에 따라, 어떤 코드에 정적으로 링크하는 모든 것도 GPL에 따를 것을 "
+"요구한다는 사실을 기억하세요. 따라서 이 코드의 소스는 프로그램 사용자가 "
+"사용할 수 있도록 제공되어야 합니다. 그러나 동적 링크는 GPL 위반으로 "
+"간주되지 않습니다. 독점 애플리케이션을 Linux에 설치하라는 압력이 압도적으로 "
+"커졌습니다. 이러한 애플리케이션은 종종 시스템 라이브러리와 링크해야 "
+"합니다. 그 결과 http://www.opensource.org/licenses/lgpl-license."
+"php[LGPL](“라이브러리”, 이후 “Lesser”, GPL로 이름이 변경됨)라는 수정된 "
+"버전의 GPL이 탄생했습니다. LGPL은 독점 코드를 GNU C 라이브러리인 glibc에 "
+"링크할 수 있도록 허용합니다. LGPL이 적용된 라이브러리에 동적으로 링크된 "
+"소스 코드를 공개할 필요는 없습니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:177
+msgid ""
+"If you statically link an application with glibc, such as is often required "
+"in embedded systems, you cannot keep your application proprietary, that is, "
+"the source must be released. Both the GPL and LGPL require any "
+"modifications to the code directly under the license to be released."
+msgstr ""
+"임베디드 시스템에서 자주 요구되는 것처럼 애플리케이션을 glibc와 정적으로 "
+"링크하는 경우 애플리케이션을 독점적으로 유지할 수 없으므로 소스를 공개해야 "
+"합니다. GPL과 LGPL 모두, 라이선스의 관리를 받는 코드를 수정할 경우 이를 "
+"공개하도록 요구합니다."
+
+#. type: Title ==
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:179
+#, no-wrap
+msgid "Open Source licenses and the Orphaning Problem"
+msgstr "오픈 소스 라이선스와 방치 문제"
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:184
+msgid ""
+"One of the serious problems associated with proprietary software is known as "
+"\"orphaning\". This occurs when a single business failure or change in a "
+"product strategy causes a huge pyramid of dependent systems and companies to "
+"fail for reasons beyond their control. Decades of experience have shown "
+"that the momentary size or success of a software supplier is no guarantee "
+"that their software will remain available, as current market conditions and "
+"strategies can change rapidly."
+msgstr ""
+"독점 소프트웨어와 관련된 심각한 문제 중 하나는 ‘방치(Orphaning)’로 알려져 "
+"있습니다. 이는 어떤 사업의 실패 또는 제품 전략의 변경이 그에 의존하는 "
+"시스템의 거대한 피라미드에 영향을 미치는 것을 말하며, 이로인해 기업이 완전히 "
+"통제력을 상실하여 발생할 수도 있습니다. 수십 년간의 경험에 따르면 현재의 "
+"시장 상황과 전략은 언제든 급변할 수 있기 때문에 소프트웨어 공급업체의 "
+"일시적인 규모나 성공이 해당 소프트웨어의 지속적인 사용을 보장하지 않습니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:186
+msgid ""
+"The GPL attempts to prevent orphaning by severing the link to proprietary "
+"intellectual property."
+msgstr "GPL은 독점 지적 재산권과의 연결 고리를 끊어 방치화를 방지하고자 합니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:191
+msgid ""
+"A BSD license gives a small company the equivalent of software-in-escrow "
+"without any legal complications or costs. If a BSD-licensed program becomes "
+"orphaned, a company can simply take over, in a proprietary manner, the "
+"program on which they are dependent. An even better situation occurs when a "
+"BSD code-base is maintained by a small informal consortium, since the "
+"development process is not dependent on the survival of a single company or "
+"product line. The survivability of the development team when they are "
+"mentally in the zone is much more important than simple physical "
+"availability of the source code."
+msgstr ""
+"BSD 라이선스는 소규모 회사에게 법적 복잡성이나 비용 없이 상용기업에 의해 "
+"성능을 보장받는 소프트웨어와 동등한 효과를 제공합니다. 만약 BSD 라이선스를 "
+"받은 프로그램이 방치 된다면, 다른 회사가 그 프로그램에 의존하고 있는 "
+"프로그램을 독점적인 방식으로 인수할 수 있습니다. 개발 프로세스가 단일 "
+"회사나 제품 라인의 생존에 의존하지 않기 때문에, 소규모 비공식 컨소시엄에 "
+"의해 BSD 코드베이스가 유지되는 경우 더 나은 상황이 발생합니다. 소스 코드의 "
+"단순한 물리적 가용성보다 개발 팀이 정신적으로 그 영역에 있을 때의 생존 "
+"가능성이 훨씬 더 중요합니다."
+
+#. type: Title ==
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:193
+#, no-wrap
+msgid "What a license cannot do"
+msgstr "라이선스로 할 수 없는 일"
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:197
+msgid ""
+"No license can guarantee future software availability. Although a copyright "
+"holder can traditionally change the terms of a copyright at anytime, the "
+"presumption in the BSD community is that such an attempt simply causes the "
+"source to fork."
+msgstr ""
+"어떤 라이선스도 미래의 소프트웨어 가용성을 보장할 수는 없습니다. 저작권자는 "
+"전통적으로 언제든지 저작권 조건을 변경할 수 있지만, BSD 커뮤니티에서는 "
+"그러한 시도가 단순히 소스를 포크하게 만든다고 가정하고 있습니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:203
+msgid ""
+"The GPL explicitly disallows revoking the license. It has occurred, "
+"however, that a company (Mattel) purchased a GPL copyright (cphack), revoked "
+"the entire copyright, went to court, and prevailed <<two>>. That is, they "
+"legally revoked the entire distribution and all derivative works based on "
+"the copyright. Whether this could happen with a larger and more dispersed "
+"distribution is an open question; there is also some confusion regarding "
+"whether the software was really under the GPL."
+msgstr ""
+"GPL은 라이선스 취소를 명시적으로 허용하지 않습니다. 그러나 한 회사(Mattel)"
+"가 GPL 저작권(cphack)을 구입한 후 저작권 전체를 취소하고 법정 소송을 "
+"제기하여 승소한 사례가 있습니다<<two>>. 즉, 해당 저작권에 기반한 배포판과 "
+"2차 저작물 전체를 합법적으로 취소한 것입니다. 더 크고 분산된 배포판에서도 "
+"이런 일이 일어날 수 있을지는 아직 미지수이며, 해당 소프트웨어가 실제로 GPL에 "
+"따라 배포되었는지에 대해서도 약간의 혼란이 있습니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:208
+msgid ""
+"In another example, Red Hat purchased Cygnus, an engineering company that "
+"had taken over development of the FSF compiler tools. Cygnus was able to do "
+"so because they had developed a business model in which they sold support "
+"for GNU software. This enabled them to employ some 50 engineers and drive "
+"the direction of the programs by contributing the preponderance of "
+"modifications. As Donald Rosenberg states \"projects using licenses like "
+"the GPL...live under constant threat of having someone take over the project "
+"by producing a better version of the code and doing it faster than the "
+"original owners.\" <<three>>"
+msgstr ""
+"또 다른 예로, 레드햇(Red Hat)은 FSF 컴파일러 도구 개발을 맡았던 엔지니어링 "
+"회사인 시그너스(Cygnus)를 인수했습니다. 시그너스를 인수할 수 있었던 이유는 "
+"이 회사가 GNU 소프트웨어에 대한 지원을 상품으로 판매하는 비즈니스 모델을 "
+"개발했기 때문입니다. 이를 통해 약 50명의 엔지니어를 고용할 수 있었고, 수정 "
+"사항을 주도적으로 제안하여 프로그램의 방향을 변경할 수 있었습니다. 도널드 "
+"로젠버그(Donald Rosenberg)는 “GPL과 같은 라이선스를 사용하는 프로젝트는… "
+"누군가 더 나은 버전의 코드를 만들어서 기존 소유자보다 더 빨리 프로젝트를 "
+"장악할 수 있다는 끊임없는 위협에 시달리고 있다”고 말합니다. <<three>>"
+
+#. type: Title ==
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:210
+#, no-wrap
+msgid "GPL Advantages and Disadvantages"
+msgstr "GPL의 장점과 단점"
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:214
+msgid ""
+"A common reason to use the GPL is when modifying or extending the gcc "
+"compiler. This is particularly apt when working with one-off specialty CPUs "
+"in environments where all software costs are likely to be considered "
+"overhead, with minimal expectations that others will use the resulting "
+"compiler."
+msgstr ""
+"GPL을 사용하는 일반적인 경우는 gcc 컴파일러를 수정하거나 확장할 때입니다. "
+"이는 특히 모든 소프트웨어 비용이 오버헤드로 간주될 가능성이 높은 환경에서, "
+"일회성으로 특수한 CPU로 작업할 때와 같이 아주 적은 수의 사람만이 변경된 "
+"컴파일러를 사용하는 상황에 적합합니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:217
+msgid ""
+"The GPL is also attractive to small companies selling CDs in an environment "
+"where \"buy-low, sell-high\" may still give the end-user a very inexpensive "
+"product. It is also attractive to companies that expect to survive by "
+"providing various forms of technical support, including documentation, for "
+"the GPLed intellectual property world."
+msgstr ""
+"GPL은 최종 사용자에게 매우 저렴한 제품을 제공하는 “박리다매” 환경에서 CD를 "
+"판매하는 소규모 회사와 같은 곳에 매력적입니다. 또한 GPL이 적용된 지적 "
+"재산권 세계에서 문서를 포함한 다양한 형태의 기술 지원을 제공함으로써 생존을 "
+"기대하는 기업에게도 매력적입니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:220
+msgid ""
+"A less publicized and unintended use of the GPL is that it is very favorable "
+"to large companies that want to undercut software companies. In other "
+"words, the GPL is well suited for use as a marketing weapon, potentially "
+"reducing overall economic benefit and contributing to monopolistic behavior."
+msgstr ""
+"GPL을 따라 충분히 공개하지 않거나 의도치 않게 GPL을 사용하는 것은 소프트웨어 "
+"회사를 약화시키려는 대기업에 매우 유리합니다. 즉, GPL은 마케팅 무기로 "
+"사용하기에 적합하여 전반적인 경제적 이익을 감소시키고 독과점 행위에 기여할 "
+"수 있습니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:223
+msgid ""
+"The GPL can present a real problem for those wishing to commercialize and "
+"profit from software. For example, the GPL adds to the difficulty a "
+"graduate student will have in directly forming a company to commercialize "
+"his research results, or the difficulty a student will have in joining a "
+"company on the assumption that a promising research project will be "
+"commercialized."
+msgstr ""
+"GPL은 소프트웨어를 상업화하여 수익을 창출하고자 하는 사람들에게 실질적인 "
+"문제를 야기할 수 있습니다. 예를 들어, 대학원생이 자신의 연구 결과를 "
+"상용화하기 위해 직접 회사를 설립하거나, 유망한 연구 프로젝트의 상용화를 "
+"전제로 회사에 입사하는 데 GPL은 어려움을 가중시킬 수 있습니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:228
+msgid ""
+"For those who must work with statically-linked implementations of multiple "
+"software standards, the GPL is often a poor license, because it precludes "
+"using proprietary implementations of the standards. The GPL thus minimizes "
+"the number of programs that can be built using a GPLed standard. The GPL "
+"was intended to not provide a mechanism to develop a standard on which one "
+"engineers proprietary products. (This does not apply to Linux applications "
+"because they do not statically link, rather they use a trap-based API.)"
+msgstr ""
+"여러 소프트웨어 표준의 정적연결로 구현되는 작업을 하는 사람들에게 GPL은 "
+"표준의 독점적 구현을 사용할 수 없기 때문에 좋지 않은 라이선스인 경우가 "
+"많습니다. 따라서 GPL은 GPL 표준을 사용하여 만들 수 있는 프로그램의 수를 "
+"줄이는 결과를 낳았습니다. GPL은 독점적 제품을 개발하는 표준 메커니즘을 "
+"제공하지 않기 때문입니다. (Linux 애플리케이션은 정적으로 링크하지 않고 트랩 "
+"기반 API를 사용하기 때문에 적용되지 않습니다.)"
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:232
+msgid ""
+"The GPL attempts to make programmers contribute to an evolving suite of "
+"programs, then to compete in the distribution and support of this suite. "
+"This situation is unrealistic for many required core system standards, which "
+"may be applied in widely varying environments which require commercial "
+"customization or integration with legacy standards under existing (non-GPL) "
+"licenses. Real-time systems are often statically linked, so the GPL and "
+"LGPL are definitely considered potential problems by many embedded systems "
+"companies."
+msgstr ""
+"GPL은 프로그래머들이 진화하는 프로그램 모음에 기여한 후, 이 모음 배포 및 "
+"지원에 경쟁하도록 만듭니다. 이러한 상황은 상업적 커스터마이징이나 기존(non-"
+"GPL) 라이선스에 따른 레거시 표준과의 통합이 필요한 매우 다양한 환경에 적용될 "
+"수 있는, 많은 필수 핵심 시스템 표준에 대해서는 비현실적입니다. 실시간 "
+"시스템은 정적으로 연결되는 경우가 많기 때문에 많은 임베디드 시스템 "
+"회사에서는 GPL과 LGPL을 잠재적인 문제로 간주하고 있습니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:235
+msgid ""
+"The GPL is an attempt to keep efforts, regardless of demand, at the research "
+"and development stages. This maximizes the benefits to researchers and "
+"developers, at an unknown cost to those who would benefit from wider "
+"distribution."
+msgstr ""
+"GPL은 수요에 관계없이 연구 및 개발 단계 노력의 가치를 유지하려고 합니다. "
+"이를 통해 연구자와 개발자에게는 혜택을 극대화하고, 더 많은 배포를 통해 "
+"혜택을 받을 수 있는 사람들에게는 알 수 없는 비용을 요구합니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:239
+msgid ""
+"The GPL was designed to keep research results from transitioning to "
+"proprietary products. This step is often assumed to be the last step in the "
+"traditional technology transfer pipeline and it is usually difficult enough "
+"under the best of circumstances; the GPL was intended to make it impossible."
+msgstr ""
+"GPL은 연구 결과가 독점적인 제품으로 전환되는 것을 막기 위해 고안되었습니다. "
+"하지만 이 단계는 전통적인 기술 이전 파이프라인의 마지막 단계로 간주되는 "
+"경우가 많으며 이런 과정은 일반적으로 최상의 상황에서도 충분히 어려운 일인데, "
+"GPL은 이를 아예 불가능하게 만들었다고 받아들여지고 있습니다."
+
+#. type: Title ==
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:241
+#, no-wrap
+msgid "BSD Advantages"
+msgstr "BSD의 장점"
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:244
+msgid ""
+"A BSD style license is a good choice for long duration research or other "
+"projects that need a development environment that:"
+msgstr "BSD 스타일 라이선스는 장기간의 연구 또는 개발 환경이 필요한 기타 프로젝트에 "
+"적합한 선택입니다:"
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:246
+msgid "has near zero cost"
+msgstr "거의 비용이 없습니다"
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:247
+msgid "will evolve over a long period of time"
+msgstr "오랜 기간에 걸쳐 계속 개선될 수 있습니다"
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:248
+msgid ""
+"permits anyone to retain the option of commercializing final results with "
+"minimal legal issues."
+msgstr "누구나 법적 문제를 최소화하면서 최종 결과물을 상용화할 수 있습니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:250
+msgid ""
+"This final consideration may often be the dominant one, as it was when the "
+"Apache project decided upon its license:"
+msgstr "아파치 프로젝트가 라이선스를 결정할 때와 마찬가지로 이 최종 고려사항이 가장 "
+"중요한 부분이 될 수 있습니다:"
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:254
+msgid ""
+"\"This type of license is ideal for promoting the use of a reference body of "
+"code that implements a protocol for common service. This is another reason "
+"why we choose it for the Apache group - many of us wanted to see HTTP "
+"survive and become a true multiparty standard, and would not have minded in "
+"the slightest if Microsoft or Netscape choose to incorporate our HTTP engine "
+"or any other component of our code into their products, if it helped further "
+"the goal of keeping HTTP common... All this means that, strategically "
+"speaking, the project needs to maintain sufficient momentum, and that "
+"participants realize greater value by contributing their code to the "
+"project, even code that would have had value if kept proprietary.\""
+msgstr ""
+"“이러한 유형의 라이선스는 공통 서비스를 위한 프로토콜을 구현하는 참조 코드의 "
+"사용을 촉진하는 데 이상적입니다. 우리 중 다수는 HTTP가 살아남아 진정한 "
+"멀티파티 표준이 되기를 원하며, HTTP의 공용화라는 목표를 달성하는 데 도움이 "
+"된다면 Microsoft나 Netscape가 HTTP 엔진이나 우리 코드의 다른 구성 요소를 "
+"자사 제품에 통합하는 데 조금도 신경 쓰지 않을 것입니다. 이 모든 것은 "
+"전략적으로 볼 때 프로젝트가 계속 충분한 추진력을 유지해야 하며, 참여자들이 "
+"자신의 코드를 프로젝트에 기여함으로써 더 큰 가치를 실현할 수 있으며, 심지어 "
+"독점적으로 유지되었다면 가치가 있었을 코드도 마찬가지라는 것을 의미합니다.”"
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:258
+msgid ""
+"Developers tend to find the BSD license attractive as it keeps legal issues "
+"out of the way and lets them do whatever they want with the code. In "
+"contrast, those who expect primarily to use a system rather than program it, "
+"or expect others to evolve the code, or who do not expect to make a living "
+"from their work associated with the system (such as government employees), "
+"find the GPL attractive, because it forces code developed by others to be "
+"given to them and keeps their employer from retaining copyright and thus "
+"potentially \"burying\" or orphaning the software. If you want to force "
+"your competitors to help you, the GPL is attractive."
+msgstr ""
+"개발자들은 법적인 문제를 피할 수 있고 코드에 대해 원하는 모든 것을 할 수 "
+"있다는 점에서 BSD 라이선스가 매력적이라고 생각하는 경향이 있습니다. 반면, "
+"시스템을 프로그래밍하기보다는 주로 시스템을 사용하거나 다른 사람이 코드를 "
+"발전시키기를 기대하거나 시스템과 관련된 업무로 생계를 유지하지 않는 "
+"사람들(예: 공무원)은 다른 사람이 개발한 코드를 강제로 공개하고 고용주가 "
+"저작권을 보유하지 못하게 하여 소프트웨어를 “묻어버리거나” 방치되게 할 수 "
+"있는 GPL이 매력적이라고 생각합니다. 경쟁업체의 도움을 받고 싶다면 GPL이 "
+"매력적입니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:265
+msgid ""
+"A BSD license is not simply a gift. The question \"why should we help our "
+"competitors or let them steal our work?\" comes up often in relation to a "
+"BSD license. Under a BSD license, if one company came to dominate a product "
+"niche that others considered strategic, the other companies can, with "
+"minimal effort, form a mini-consortium aimed at reestablishing parity by "
+"contributing to a competitive BSD variant that increases market competition "
+"and fairness. This permits each company to believe that it will be able to "
+"profit from some advantage it can provide, while also contributing to "
+"economic flexibility and efficiency. The more rapidly and easily the "
+"cooperating members can do this, the more successful they will be. A BSD "
+"license is essentially a minimally complicated license that enables such "
+"behavior."
+msgstr ""
+"BSD 라이선스는 단순한 선물이 아닙니다. “왜 우리가 경쟁사를 도와주거나 "
+"경쟁사가 우리의 작업을 훔치도록 내버려둬야 하는가?”라는 질문은 BSD "
+"라이선스와 관련하여 자주 제기됩니다. BSD 라이선스 하에서, 한 회사가 다른 "
+"회사가 전략적으로 간주하는 제품의 틈새 시장을 장악하게 되면, 다른 회사들은 "
+"최소한의 노력으로 시장 경쟁과 공정성을 높이는 경쟁적 BSD 프로젝트에 "
+"기여함으로써 동등성을 회복하는 것을 목표로 하는 미니 컨소시엄을 구성할 수 "
+"있습니다. 이를 통해 각 회사는 경제적 유연성과 효율성에 기여하면서 자신이 "
+"제공할 수 있는 이점을 통해 이익을 얻을 수 있다고 믿습니다. 협력하는 "
+"구성원들이 이를 더 빠르고 쉽게 수행할 수 있을수록 더 큰 성공을 거둘 수 "
+"있습니다. BSD 라이선스는 본질적으로 이러한 행동을 가능하게 하는 최소한도의 "
+"복잡성을 가진 라이선스입니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:268
+msgid ""
+"A key effect of the GPL, making a complete and competitive Open Source "
+"system widely available at cost of media, is a reasonable goal. A BSD style "
+"license, in conjunction with ad-hoc-consortiums of individuals, can achieve "
+"this goal without destroying the economic assumptions built around the "
+"deployment-end of the technology transfer pipeline."
+msgstr ""
+"완전하고 경쟁력 있는 오픈 소스 시스템을 미디어 비용(배포 비용)으로 널리 "
+"사용할 수 있도록 하는 것은 GPL의 핵심 효과이며, 이는 합리적인 목표입니다. "
+"BSD 스타일의 라이선스는 개인들로 구성된 임시 컨소시엄과 함께 기술 이전 "
+"파이프라인의 배포-종료 단계에 구축된 경제적 예상을 파괴하지 않으면서도 "
+"이러한 목표를 달성할 수 있습니다."
+
+#. type: Title ==
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:270
+#, no-wrap
+msgid "Specific Recommendations for using a BSD license"
+msgstr "BSD 라이선스 사용에 대한 구체적 권장사항"
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:275
+msgid ""
+"The BSD license is preferable for transferring research results in a way "
+"that will widely be deployed and most benefit an economy. As such, research "
+"funding agencies, such as the NSF, ONR and DARPA, should encourage in the "
+"earliest phases of funded research projects, the adoption of BSD style "
+"licenses for software, data, results, and open hardware. They should also "
+"encourage formation of standards based around implemented Open Source "
+"systems and ongoing Open Source projects."
+msgstr ""
+"BSD 라이선스는 연구 결과를 널리 배포하고 경제에 가장 큰 혜택을 줄 수 있는 "
+"방식으로 이전하는 데 바람직합니다. 따라서 NSF, ONR, DARPA와 같은 연구자금 "
+"지원 기관은 자금 지원 연구 프로젝트의 초기 단계에서 소프트웨어, 데이터, "
+"결과물, 개방형 하드웨어에 BSD 스타일의 라이선스를 채택하도록 장려해야 "
+"합니다. 또한 구현된 오픈 소스 시스템과 진행 중인 오픈 소스 프로젝트를 "
+"중심으로 표준을 형성하도록 장려해야 합니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:277
+msgid ""
+"Government policy should minimize the costs and difficulties in moving from "
+"research to deployment. When possible, grants should require results to be "
+"available under a commercialization friendly BSD style license."
+msgstr ""
+"정부 정책은 연구에서 배포로 이동하는 데 드는 비용과 어려움을 최소화해야 "
+"합니다. 가능한 경우, 지원금은 상업화 친화적인 BSD 스타일의 라이선스에 따라 "
+"결과를 사용할 수 있도록 요구해야 합니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:278
+msgid ""
+"In many cases, the long-term results of a BSD style license more accurately "
+"reflect the goals proclaimed in the research charter of universities than "
+"what occurs when results are copyrighted or patented and subject to "
+"proprietary university licensing. Anecdotal evidence exists that "
+"universities are financially better rewarded in the long run by releasing "
+"research results and then appealing to donations from commercially "
+"successful alumni."
+msgstr ""
+"많은 경우, BSD 스타일 라이선스의 장기적인 결과는 연구 결과가 저작권이나 "
+"특허로 보호되고 대학의 독점적인 라이선스를 따를 때보다 대학의 연구 헌장에 "
+"명시된 목표를 더 정확하게 반영합니다. 연구 결과를 공개하고 상업적으로 성공한 "
+"동문들의 기부에 호소함으로써 대학이 장기적으로 재정적으로 더 나은 보상을 "
+"받는다는 일화가 존재합니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:279
+msgid ""
+"Companies have long recognized that the creation of de facto standards is a "
+"key marketing technique. The BSD license serves this role well, if a company "
+"really has a unique advantage in evolving the system. The license is legally "
+"attractive to the widest audience while the company's expertise ensures "
+"their control. There are times when the GPL may be the appropriate vehicle "
+"for an attempt to create such a standard, especially when attempting to "
+"undermine or co-opt others. The GPL, however, penalizes the evolution of "
+"that standard, because it promotes a suite rather than a commercially "
+"applicable standard. Use of such a suite constantly raises commercialization "
+"and legal issues. It may not be possible to mix standards when some are "
+"under the GPL and others are not. A true technical standard should not "
+"mandate exclusion of other standards for non-technical reasons."
+msgstr ""
+"기업들은 사실상의 표준을 만드는 것이 중요한 마케팅 기법이라는 것을 오랫동안 "
+"인식해 왔습니다. 기업이 시스템을 발전시키는 데 있어 남들과 차별되는 이점을 "
+"가지고 있다면 BSD 라이선스는 이러한 특징에 잘 부합됩니다. 이 라이선스는 "
+"법적으로 더 많은 사람들에게 매력적으로 다가갈 수 있으며, 회사가 가진 "
+"전문성을 통해 회사의 통제권을 보장할 수 있습니다. 만약 누군가가 기술 표준을 "
+"훼손하거나 다른 표준을 채택하려고 할 때, GPL은 그러한 행동에 이용할 수 있는 "
+"적합한 수단이 될 수 있습니다. 그러나 GPL은 상업적으로 적용 가능한 표준이 "
+"아닌 제품군을 장려하기 때문에 장기적으론 해당 표준의 개선에 불이익을 줍니다. "
+"이러한 제품군을 사용하면 상업화 및 법적 문제가 지속적으로 제기됩니다. 또한 "
+"어떤 표준은 GPL을 따르고 어떤 표준은 그렇지 않은 경우 표준을 혼합하는 것이 "
+"불가능할 수도 있습니다. 진정한 기술 표준은 비기술적인 이유로 다른 표준을 "
+"배제하도록 요구해서는 안 됩니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:280
+msgid ""
+"Companies interested in promoting an evolving standard, which can become the "
+"core of other companies' commercial products, should be wary of the GPL. "
+"Regardless of the license used, the resulting software will usually devolve "
+"to whoever actually makes the majority of the engineering changes and most "
+"understands the state of the system. The GPL simply adds more legal friction "
+"to the result."
+msgstr ""
+"다른 회사의 상용 제품의 핵심이 될 수 있는 진화하는 표준을 홍보하는 데 관심이 "
+"있는 기업은 GPL을 주의해야 합니다. 어떤 라이선스를 사용하든, 결과물인 "
+"소프트웨어는 일반적으로 엔지니어링 변경의 대부분을 실제로 수행하고 시스템 "
+"상태를 가장 잘 이해하는 사람에게 귀속됩니다. GPL은 결과물에 법적 마찰을 더할 "
+"뿐입니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:281
+msgid ""
+"Large companies, in which Open Source code is developed, should be aware "
+"that programmers appreciate Open Source because it leaves the software "
+"available to the employee when they change employers. Some companies "
+"encourage this behavior as an employment perk, especially when the software "
+"involved is not directly strategic. It is, in effect, a front-loaded "
+"retirement benefit with potential lost opportunity costs but no direct "
+"costs. Encouraging employees to work for peer acclaim outside the company is "
+"a cheap portable benefit a company can sometimes provide with near zero "
+"downside."
+msgstr ""
+"오픈 소스 코드를 개발하는 대기업은 직원이 이직을 하더라도 그 소프트웨어를 "
+"계속 사용할 수 있기 때문에 프로그래머들이 오픈 소스를 높이 평가한다는 사실을 "
+"인지해야 합니다. 일부 기업에서는 특히 관련된 소프트웨어가 직접적으로 "
+"전략적이지 않은 경우 이러한 행동을 고용 특전으로 장려하기도 합니다. 이는 "
+"사실상 잠재적인 기회 비용 손실은 있지만 직접적인 비용은 들지 않는 선급 "
+"퇴직금과 같습니다. 직원들이 회사 밖에서 동료들의 찬사를 받기 위해 일하도록 "
+"장려하는 것은 때때로 회사에게 있어선 거의 단점이 없는 값싼 이동식 혜택을 "
+"제공할 수 있습니다(역자 주: 원문에서 “cheap portable benefit”이라고 표현한 "
+"것은, 아무래도 회사가 직원을 타 회사에서 데려 왔을때 단순히 그 직원이 개발한 "
+"소프트웨어를 마음대로 쓸 수 있다는 뜻 보다는, 향후 그 소프트웨어가 "
+"업그레이드 될 때의 이득과 직원의 기술력까지 완전히 다 얻을 수 있다는 의미로 "
+"쓰인 것 같습니다)."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:282
+msgid ""
+"Small companies with software projects vulnerable to orphaning should "
+"attempt to use the BSD license when possible. Companies of all sizes should "
+"consider forming such Open Source projects when it is to their mutual "
+"advantage to maintain the minimal legal and organization overheads "
+"associated with a true BSD-style Open Source project."
+msgstr ""
+"방치되기 쉬운 소프트웨어 프로젝트를 가진 소규모 회사는 가능하면 BSD "
+"라이선스를 사용해야 합니다. 회사의 규모가 어떻든 모든 회사는 진정한 BSD "
+"스타일의 오픈 소스 프로젝트 형태의 프로젝트를 통해 최소한의 법적 및 조직 "
+"오버헤드를 유지할 수 있어 서로에게 이득이 되므로 이런 방법에 대해 진지한 "
+"고려를 해야 합니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:283
+msgid ""
+"Non-profits should participate in Open Source projects when possible. To "
+"minimize software engineering problems, such as mixing code under different "
+"licenses, BSD-style licenses should be encouraged. Being leery of the GPL "
+"should particularly be the case with non-profits that interact with the "
+"developing world. In some locales where application of law becomes a costly "
+"exercise, the simplicity of the new BSD license, as compared to the GPL, may "
+"be of considerable advantage."
+msgstr ""
+"비영리 단체는 가능하면 오픈소스 프로젝트에 참여해야 합니다. 서로 다른 "
+"라이선스 하의 코드 혼용과 같은 소프트웨어 엔지니어링 문제를 최소화하려면 BSD "
+"스타일의 라이선스를 권장해야 합니다. 특히 개발도상국과 교류하는 비영리 "
+"단체의 경우 GPL을 주의 깊게 살펴야 합니다. 법 적용에 많은 비용이 드는 일부 "
+"지역에서는 GPL에 비해 새로운 BSD 라이선스의 단순성이 상당한 이점이 될 수 "
+"있습니다."
+
+#. type: Title ==
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:285
+#, no-wrap
+msgid "Conclusion"
+msgstr "결론"
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:290
+msgid ""
+"In contrast to the GPL, which is designed to prevent the proprietary "
+"commercialization of Open Source code, the BSD license places minimal "
+"restrictions on future behavior. This allows BSD code to remain Open Source "
+"or become integrated into commercial solutions, as a project's or company's "
+"needs change. In other words, the BSD license does not become a legal time-"
+"bomb at any point in the development process."
+msgstr ""
+"오픈 소스 코드의 독점적인 상업화를 방지하기 위해 고안된 GPL과 달리, BSD "
+"라이선스는 향후 행위에 대해 최소한의 제한을 두고 있습니다. 따라서 "
+"프로젝트나 회사의 필요에 따라 BSD 코드를 오픈소스로 유지하거나 상용 솔루션에 "
+"통합할 수 있습니다. 다시 말해, BSD 라이선스는 개발 과정의 어느 시점에서도 "
+"법적 시한폭탄이 되지 않습니다."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:292
+msgid ""
+"In addition, since the BSD license does not come with the legal complexity "
+"of the GPL or LGPL licenses, it allows developers and companies to spend "
+"their time creating and promoting good code rather than worrying if that "
+"code violates licensing."
+msgstr ""
+"또한, BSD 라이선스는 GPL이나 LGPL 라이선스처럼 법적 복잡성을 수반하지 않기 "
+"때문에, 개발자와 회사는 라이선스 위반 여부를 걱정할 필요 없이 좋은 코드를 "
+"만들고 홍보하는 데 시간을 할애할 수 있습니다."
+
+#. type: Title ==
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:295
+#, no-wrap
+msgid "Bibliographical References"
+msgstr "참고 문헌"
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:298
+msgid "[[[one,1]]] http://www.gnu.org/licenses/gpl.html"
+msgstr "[[[one,1]]] http://www.gnu.org/licenses/gpl.html"
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:300
+msgid ""
+"[[[two,2]]] http://archives.cnn.com/2000/TECH/computing/03/28/cyberpatrol."
+"mirrors/"
+msgstr ""
+"[[[two,2]]] http://archives.cnn.com/2000/TECH/computing/03/28/cyberpatrol."
+"mirrors/"
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:302
+msgid ""
+"[[[three,3]]] Open Source: the Unauthorized White Papers, Donald K. "
+"Rosenberg, IDG Books, 2000. Quotes are from page 114, \"Effects of the GNU "
+"GPL\"."
+msgstr ""
+"[[[three,3]]] Open Source: the Unauthorized White Papers, Donald K. "
+"Rosenberg, IDG Books, 2000. Quotes are from page 114, \"Effects of the GNU "
+"GPL\"."
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:304
+msgid ""
+"[[[four,4]]] In the \"What License to Use?\" section of http://www.oreilly."
+"com/catalog/opensources/book/brian.html"
+msgstr ""
+"[[[four,4]]] In the \"What License to Use?\" section of http://www.oreilly."
+"com/catalog/opensources/book/brian.html"
+
+#. type: Plain text
+#: documentation/content/en/articles/bsdl-gpl/_index.adoc:305
+msgid ""
+"This whitepaper is a condensation of an original work available at http://"
+"alumni.cse.ucsc.edu/~brucem/open_source_license.htm"
+msgstr ""
+"이 백서는 http://alumni.cse.ucsc.edu/~brucem/open_source_license.htm에서 "
+"제공되는 원본 저작물을 요약한 것입니다"
diff --git a/documentation/content/ko/articles/leap-seconds/_index.adoc b/documentation/content/ko/articles/leap-seconds/_index.adoc
new file mode 100644
index 0000000000..977db357ea
--- /dev/null
+++ b/documentation/content/ko/articles/leap-seconds/_index.adoc
@@ -0,0 +1,92 @@
+---
+description: '윤초(leap second)를 FreeBSD에서 조절하는 방법에 대한 간단한 설명'
+tags: ["Leap Seconds", "Support", "Verification", "FreeBSD"]
+title: '윤초에 대한 FreeBSD의 지원'
+---
+
+= 윤초에 대한 FreeBSD의 지원
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+: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::[]
+
+'''
+
+toc::[]
+
+[[leapseconds-definition]]
+== 소개
+
+윤초는 실제 지구의 공전(1년)과 원자시계에 의해 동기화된 UTC간에 발생하는 특징적인 초 단위 오차입니다. 이 문서는 윤초에 대해 FreeBSD가 어떻게 대응하는지에 대해 설명하고 있습니다.
+
+기록에 따르면, 다음 윤초는 2015년 1월 30일 23:59:60 UTC에 있을 예정입니다. 이 윤초는 전체 아메리카 대륙과 아시아 태평양 지역의 업무일 중에 발생할 것입니다.
+
+윤초는 https://datacenter.iers.org/data/latestVersion/16_BULLETIN_C16.txt[Bulletin C]의 https://www.iers.org/IERS/EN/Home/home_node.html[IERS]에서 발표하고 있습니다.
+
+표준적인 윤초에 대한 처리는 https://datatracker.ietf.org/doc/html/rfc7164#section-3[RFC 7164]에서 설명하고 있습니다. man:time2posix[3]를 확인해주세요.
+
+[[leapseconds-posix]]
+== FreeBSD에서 윤초의 디폴트 관리
+
+윤초를 처리하는 가장 쉬운 방법은 extref:{handbook}[NTP, network-ntp]와 FreeBSD에서 디폴트로 사용하는 POSIX time rules FreeBSD을 병합하는 것입니다. man:ntpd[8]가 동작하고 있고 윤초를 수정하고 있는 업스트림 NTP 서버와 동기화 되어 있다면 시스템은 자동으로 하루의 마지막 날에 1초를 추가할 것입니다. 추가적으로 어떤 수정도 필요하지 않습니다.
+
+만약 업스트림 NTP서버가 윤초를 제대로 처리하지 못한다면 man:ntpd[8]는 오류가 발생한 업스트림 서버가 인식하고 자체 단계를 밟는 것을 따라 시간을 1초씩 단축합니다.
+
+NTP를 사용하지 않는 경우 윤초가 경과한 후 시스템 시계를 수동으로 조정해야 합니다.
+
+[[leapseconds-cautions]]
+== 주의
+
+윤초는 전 세계적으로 UTC 자정에 동시에 삽입됩니다. 시기로는 일본은 아침, 태평양은 낮, 아메리카는 오후 늦게, 유럽은 밤에 추가됩니다.
+
+우리는 NTP 서비스가 정확하고 안정적으로 유지되고 있다면 이전 윤초가 있었던 시기와 마찬가지로 FreeBSD 역시 윤초 동안 설계된 대로 작동할 것이라고 믿고 있습니다.
+
+그러나 현실적으로는 어떤 응용프로그램도 커널에 윤초에 대해 요청한 적이 없다는 것을 주의해야 합니다. 우리의 경험에 따르면, 윤초는 본질적으로 윤초 전의 초를 한번 더 재생하는 것이며, 이것은 대부분 응용프로그램 개발자들에게 놀라운 일입니다.
+
+다른 운영 체제와 컴퓨터는 FreeBSD와 동일한 방식으로 윤초를 처리할 수도 있고 그렇지 않을 수도 있으며, 정확하고 안정적인 NTP 서비스가 없는 시스템은 윤초에 대해 전혀 모를 것입니다.
+
+윤초 때문에 컴퓨터가 충돌하는 것은 전례가 없는 일이 아니며, 경험에 따르면 모든 공용 NTP 서버 중 상당수가 윤초를 잘못 처리하고 전달할 수 있습니다.
+
+윤초 때문에 끔찍한 일이 일어나지 않도록 주의해주세요.
+
+[[leapseconds-testing]]
+== 테스트
+
+윤초가 사용되는지에 대한 여부는 테스트를 통해 알 수 있습니다. 이 테스트는 NTP의 특성으로 인해 윤초의 발생까지 24시간이 걸릴 수 있습니다. 몇몇 주요 기준시계의 소스는 윤초 발생 1시간 전에만 윤초를 알립니다. NTP 데몬에 다음을 질의해보세요:
+
+[source, shell]
+....
+% ntpq -c 'rv 0 leap'
+....
+
+`leap_add_sec`를 포함하는 출력은 윤초를 적절하게 지원하고 있다는 것을 나타냅니다. 윤초까지 24시간 전이거나 윤초가 지났다면 `leap_none`가 표시됩니다.
+
+[[leapseconds-conclusion]]
+== 결론
+
+일반적으로 FreeBSD에서는 윤초가 문제가 되지는 않습니다. 우리는 이 개요가 윤초 발생시 어떤 일이 있을지 예상하고 어떻게 해야 보다 부드럽게 처리할 수 있는지에 대해 도움이 되기를 바랍니다.
diff --git a/documentation/content/ko/articles/leap-seconds/_index.po b/documentation/content/ko/articles/leap-seconds/_index.po
new file mode 100644
index 0000000000..3044eedcb7
--- /dev/null
+++ b/documentation/content/ko/articles/leap-seconds/_index.po
@@ -0,0 +1,247 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2023.
+# Kyung-tak, Yoo <stonegaze@me.com>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: 2023-03-10 03:10+0000\n"
+"Last-Translator: Kyung-tak, Yoo <stonegaze@me.com>\n"
+"Language-Team: Korean <https://translate-dev.freebsd.org/projects/"
+"documentation/articlesleap-seconds_index/ko/>\n"
+"Language: ko\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 4.15.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 "윤초(leap second)를 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 "윤초에 대한 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 "소개"
+
+#. 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 ""
+"윤초는 실제 지구의 공전(1년)과 원자시계에 의해 동기화된 UTC간에 발생하는 "
+"특징적인 초 단위 오차입니다. 이 문서는 윤초에 대해 FreeBSD가 어떻게 "
+"대응하는지에 대해 설명하고 있습니다."
+
+#. 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 ""
+"기록에 따르면, 다음 윤초는 2015년 1월 30일 23:59:60 UTC에 있을 "
+"예정입니다. 이 윤초는 전체 아메리카 대륙과 아시아 태평양 지역의 업무일 "
+"중에 발생할 것입니다."
+
+#. 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 ""
+"윤초는 https://datacenter.iers.org/data/latestVersion/16_BULLETIN_C16.txt["
+"Bulletin C]의 https://www.iers.org/IERS/EN/Home/home_node.html[IERS]에서 "
+"발표하고 있습니다."
+
+#. 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 ""
+"표준적인 윤초에 대한 처리는 https://datatracker.ietf.org/doc/html/"
+"rfc7164#section-3[RFC 7164]에서 설명하고 있습니다. man:time2posix[3]를 "
+"확인해주세요."
+
+#. type: Title ==
+#: documentation/content/en/articles/leap-seconds/_index.adoc:57
+#, no-wrap
+msgid "Default Leap Second Handling on FreeBSD"
+msgstr "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 ""
+"윤초를 처리하는 가장 쉬운 방법은 extref:{handbook}[NTP, network-ntp]와 "
+"FreeBSD에서 디폴트로 사용하는 POSIX time rules FreeBSD을 병합하는 것입니다. "
+"man:ntpd[8]가 동작하고 있고 윤초를 수정하고 있는 업스트림 NTP 서버와 동기화 "
+"되어 있다면 시스템은 자동으로 하루의 마지막 날에 1초를 추가할 것입니다. "
+"추가적으로 어떤 수정도 필요하지 않습니다."
+
+#. 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 ""
+"만약 업스트림 NTP서버가 윤초를 제대로 처리하지 못한다면 man:ntpd[8]는 오류가 "
+"발생한 업스트림 서버가 인식하고 자체 단계를 밟는 것을 따라 시간을 1초씩 "
+"단축합니다."
+
+#. 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 "NTP를 사용하지 않는 경우 윤초가 경과한 후 시스템 시계를 수동으로 조정해야 "
+"합니다."
+
+#. type: Title ==
+#: documentation/content/en/articles/leap-seconds/_index.adoc:68
+#, no-wrap
+msgid "Cautions"
+msgstr "주의"
+
+#. 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 ""
+"윤초는 전 세계적으로 UTC 자정에 동시에 삽입됩니다. 시기로는 일본은 아침, "
+"태평양은 낮, 아메리카는 오후 늦게, 유럽은 밤에 추가됩니다."
+
+#. 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 ""
+"우리는 NTP 서비스가 정확하고 안정적으로 유지되고 있다면 이전 윤초가 있었던 "
+"시기와 마찬가지로 FreeBSD 역시 윤초 동안 설계된 대로 작동할 것이라고 믿고 "
+"있습니다."
+
+#. 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 ""
+"그러나 현실적으로는 어떤 응용프로그램도 커널에 윤초에 대해 요청한 적이 "
+"없다는 것을 주의해야 합니다. 우리의 경험에 따르면, 윤초는 본질적으로 윤초 "
+"전의 초를 한번 더 재생하는 것이며, 이것은 대부분 응용프로그램 개발자들에게 "
+"놀라운 일입니다."
+
+#. 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 ""
+"다른 운영 체제와 컴퓨터는 FreeBSD와 동일한 방식으로 윤초를 처리할 수도 있고 "
+"그렇지 않을 수도 있으며, 정확하고 안정적인 NTP 서비스가 없는 시스템은 윤초에 "
+"대해 전혀 모를 것입니다."
+
+#. 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 ""
+"윤초 때문에 컴퓨터가 충돌하는 것은 전례가 없는 일이 아니며, 경험에 따르면 "
+"모든 공용 NTP 서버 중 상당수가 윤초를 잘못 처리하고 전달할 수 있습니다."
+
+#. 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 "윤초 때문에 끔찍한 일이 일어나지 않도록 주의해주세요."
+
+#. type: Title ==
+#: documentation/content/en/articles/leap-seconds/_index.adoc:85
+#, no-wrap
+msgid "Testing"
+msgstr "테스트"
+
+#. 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 ""
+"윤초가 사용되는지에 대한 여부는 테스트를 통해 알 수 있습니다. 이 테스트는 "
+"NTP의 특성으로 인해 윤초의 발생까지 24시간이 걸릴 수 있습니다. 몇몇 주요 "
+"기준시계의 소스는 윤초 발생 1시간 전에만 윤초를 알립니다. 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 ""
+"`leap_add_sec`를 포함하는 출력은 윤초를 적절하게 지원하고 있다는 것을 "
+"나타냅니다. 윤초까지 24시간 전이거나 윤초가 지났다면 `leap_none`가 "
+"표시됩니다."
+
+#. type: Title ==
+#: documentation/content/en/articles/leap-seconds/_index.adoc:101
+#, no-wrap
+msgid "Conclusion"
+msgstr "결론"
+
+#. 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 ""
+"일반적으로 FreeBSD에서는 윤초가 문제가 되지는 않습니다. 우리는 이 개요가 "
+"윤초 발생시 어떤 일이 있을지 예상하고 어떻게 해야 보다 부드럽게 처리할 수 "
+"있는지에 대해 도움이 되기를 바랍니다."
diff --git a/documentation/content/mn/books/handbook/advanced-networking/_index.adoc b/documentation/content/mn/books/handbook/advanced-networking/_index.adoc
index 2cc9e8fe6b..0423e9348f 100644
--- a/documentation/content/mn/books/handbook/advanced-networking/_index.adoc
+++ b/documentation/content/mn/books/handbook/advanced-networking/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/firewalls
next: books/handbook/partv
showBookMenu: true
weight: 37
-path: "/books/handbook/"
+path: "/books/handbook/advanced-networking/"
---
[[advanced-networking]]
diff --git a/documentation/content/mn/books/handbook/audit/_index.adoc b/documentation/content/mn/books/handbook/audit/_index.adoc
index 4afb8b47fa..5a19f10b71 100644
--- a/documentation/content/mn/books/handbook/audit/_index.adoc
+++ b/documentation/content/mn/books/handbook/audit/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mac
next: books/handbook/disks
showBookMenu: true
weight: 22
-path: "/books/handbook/"
+path: "/books/handbook/audit/"
---
[[audit]]
diff --git a/documentation/content/mn/books/handbook/basics/_index.adoc b/documentation/content/mn/books/handbook/basics/_index.adoc
index d1fe217795..48c1297a21 100644
--- a/documentation/content/mn/books/handbook/basics/_index.adoc
+++ b/documentation/content/mn/books/handbook/basics/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/install
next: books/handbook/ports
showBookMenu: true
weight: 6
-path: "/books/handbook/"
+path: "/books/handbook/basics/"
---
[[basics]]
diff --git a/documentation/content/mn/books/handbook/bibliography/_index.adoc b/documentation/content/mn/books/handbook/bibliography/_index.adoc
index e0201011e5..955dfda94f 100644
--- a/documentation/content/mn/books/handbook/bibliography/_index.adoc
+++ b/documentation/content/mn/books/handbook/bibliography/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mirrors
next: books/handbook/eresources
showBookMenu: true
weight: 40
-path: "/books/handbook/"
+path: "/books/handbook/bibliography/"
---
[appendix]
diff --git a/documentation/content/mn/books/handbook/boot/_index.adoc b/documentation/content/mn/books/handbook/boot/_index.adoc
index 8e7fec444c..d4210045f5 100644
--- a/documentation/content/mn/books/handbook/boot/_index.adoc
+++ b/documentation/content/mn/books/handbook/boot/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/config
next: books/handbook/users
showBookMenu: true
weight: 17
-path: "/books/handbook/"
+path: "/books/handbook/boot/"
---
[[boot]]
diff --git a/documentation/content/mn/books/handbook/bsdinstall/_index.adoc b/documentation/content/mn/books/handbook/bsdinstall/_index.adoc
index 22b89757cb..93337ec70e 100644
--- a/documentation/content/mn/books/handbook/bsdinstall/_index.adoc
+++ b/documentation/content/mn/books/handbook/bsdinstall/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/introduction
next: books/handbook/install
showBookMenu: true
weight: 4
-path: "/books/handbook/"
+path: "/books/handbook/bsdinstall/"
---
[[bsdinstall]]
diff --git a/documentation/content/mn/books/handbook/config/_index.adoc b/documentation/content/mn/books/handbook/config/_index.adoc
index 8aa7fcdd11..2d9b51b7db 100644
--- a/documentation/content/mn/books/handbook/config/_index.adoc
+++ b/documentation/content/mn/books/handbook/config/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partiii
next: books/handbook/boot
showBookMenu: true
weight: 16
-path: "/books/handbook/"
+path: "/books/handbook/config/"
---
[[config-tuning]]
@@ -1454,6 +1454,6 @@ ACPI-ийн талаар дэлгэрэнгүй мэдээллийг дараа
* {freebsd-acpi}
* ACPI Захидлын Жагсаалтын Архивууд http://lists.freebsd.org/pipermail/freebsd-acpi/[http://lists.freebsd.org/pipermail/freebsd-acpi/]
* Хуучин ACPI Захидлын Жагсаалтын Архивууд http://home.jp.FreeBSD.org/mail-list/acpi-jp/[http://home.jp.FreeBSD.org/mail-list/acpi-jp/]
-* ACPI 2.0 Тодорхойлолт http://acpi.info/spec.htm[http://acpi.info/spec.htm]
+* https://uefi.org/specifications#ACPI[ACPI Тодорхойлолт]
* FreeBSD Гарын авлагын хуудаснууд: man:acpi[4], man:acpi_thermal[4], man:acpidump[8], man:iasl[8], man:acpidb[8]
* http://www.cpqlinux.com/acpi-howto.html#fix_broken_dsdt[DSDT дибаг эх үүсвэр]. (Compaq-ийг жишээ болгон хэрэглэсэн боловч ерөнхийдөө хэрэгтэй.)
diff --git a/documentation/content/mn/books/handbook/cutting-edge/_index.adoc b/documentation/content/mn/books/handbook/cutting-edge/_index.adoc
index 0fa67b439c..87fdf4ada2 100644
--- a/documentation/content/mn/books/handbook/cutting-edge/_index.adoc
+++ b/documentation/content/mn/books/handbook/cutting-edge/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/l10n
next: books/handbook/dtrace
showBookMenu: true
weight: 29
-path: "/books/handbook/"
+path: "/books/handbook/cutting-edge/"
---
[[updating-upgrading]]
diff --git a/documentation/content/mn/books/handbook/desktop/_index.adoc b/documentation/content/mn/books/handbook/desktop/_index.adoc
index 04382bbaec..eb68f98e3f 100644
--- a/documentation/content/mn/books/handbook/desktop/_index.adoc
+++ b/documentation/content/mn/books/handbook/desktop/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partii
next: books/handbook/multimedia
showBookMenu: true
weight: 10
-path: "/books/handbook/"
+path: "/books/handbook/desktop/"
---
[[desktop]]
diff --git a/documentation/content/mn/books/handbook/disks/_index.adoc b/documentation/content/mn/books/handbook/disks/_index.adoc
index 267b9d1a1e..00b99f2e4a 100644
--- a/documentation/content/mn/books/handbook/disks/_index.adoc
+++ b/documentation/content/mn/books/handbook/disks/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/audit
next: books/handbook/geom
showBookMenu: true
weight: 23
-path: "/books/handbook/"
+path: "/books/handbook/disks/"
---
[[disks]]
diff --git a/documentation/content/mn/books/handbook/dtrace/_index.adoc b/documentation/content/mn/books/handbook/dtrace/_index.adoc
index e158cf02b8..c257f95f0f 100644
--- a/documentation/content/mn/books/handbook/dtrace/_index.adoc
+++ b/documentation/content/mn/books/handbook/dtrace/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/cutting-edge
next: books/handbook/partiv
showBookMenu: true
weight: 30
-path: "/books/handbook/"
+path: "/books/handbook/dtrace/"
---
[[dtrace]]
diff --git a/documentation/content/mn/books/handbook/eresources/_index.adoc b/documentation/content/mn/books/handbook/eresources/_index.adoc
index 2b419925ae..1ad08b3403 100644
--- a/documentation/content/mn/books/handbook/eresources/_index.adoc
+++ b/documentation/content/mn/books/handbook/eresources/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/bibliography
next: books/handbook/pgpkeys
showBookMenu: true
weight: 41
-path: "/books/handbook/"
+path: "/books/handbook/eresources/"
---
[appendix]
diff --git a/documentation/content/mn/books/handbook/filesystems/_index.adoc b/documentation/content/mn/books/handbook/filesystems/_index.adoc
index cf73497c97..61e8f50995 100644
--- a/documentation/content/mn/books/handbook/filesystems/_index.adoc
+++ b/documentation/content/mn/books/handbook/filesystems/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/geom
next: books/handbook/vinum
showBookMenu: true
weight: 25
-path: "/books/handbook/"
+path: "/books/handbook/filesystems/"
---
[[filesystems]]
diff --git a/documentation/content/mn/books/handbook/firewalls/_index.adoc b/documentation/content/mn/books/handbook/firewalls/_index.adoc
index 3f547d4704..2362ef40ef 100644
--- a/documentation/content/mn/books/handbook/firewalls/_index.adoc
+++ b/documentation/content/mn/books/handbook/firewalls/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/network-servers
next: books/handbook/advanced-networking
showBookMenu: true
weight: 36
-path: "/books/handbook/"
+path: "/books/handbook/firewalls/"
---
[[firewalls]]
diff --git a/documentation/content/mn/books/handbook/geom/_index.adoc b/documentation/content/mn/books/handbook/geom/_index.adoc
index 689e8e3687..836a818bf3 100644
--- a/documentation/content/mn/books/handbook/geom/_index.adoc
+++ b/documentation/content/mn/books/handbook/geom/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/disks
next: books/handbook/filesystems
showBookMenu: true
weight: 24
-path: "/books/handbook/"
+path: "/books/handbook/geom/"
---
[[geom]]
diff --git a/documentation/content/mn/books/handbook/install/_index.adoc b/documentation/content/mn/books/handbook/install/_index.adoc
index 0dd659069d..593cb67f84 100644
--- a/documentation/content/mn/books/handbook/install/_index.adoc
+++ b/documentation/content/mn/books/handbook/install/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/bsdinstall
next: books/handbook/basics
showBookMenu: true
weight: 5
-path: "/books/handbook/"
+path: "/books/handbook/install/"
---
[[install]]
diff --git a/documentation/content/mn/books/handbook/introduction/_index.adoc b/documentation/content/mn/books/handbook/introduction/_index.adoc
index 663308e95b..c0db5f7d75 100644
--- a/documentation/content/mn/books/handbook/introduction/_index.adoc
+++ b/documentation/content/mn/books/handbook/introduction/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/parti
next: books/handbook/bsdinstall
showBookMenu: true
weight: 3
-path: "/books/handbook/"
+path: "/books/handbook/introduction/"
---
[[introduction]]
diff --git a/documentation/content/mn/books/handbook/jails/_index.adoc b/documentation/content/mn/books/handbook/jails/_index.adoc
index d490b06f00..0b2e8fc63e 100644
--- a/documentation/content/mn/books/handbook/jails/_index.adoc
+++ b/documentation/content/mn/books/handbook/jails/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/security
next: books/handbook/mac
showBookMenu: true
weight: 20
-path: "/books/handbook/"
+path: "/books/handbook/jails/"
---
[[jails]]
diff --git a/documentation/content/mn/books/handbook/kernelconfig/_index.adoc b/documentation/content/mn/books/handbook/kernelconfig/_index.adoc
index 21f3c5b99f..08bc5f1113 100644
--- a/documentation/content/mn/books/handbook/kernelconfig/_index.adoc
+++ b/documentation/content/mn/books/handbook/kernelconfig/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/multimedia
next: books/handbook/printing
showBookMenu: true
weight: 12
-path: "/books/handbook/"
+path: "/books/handbook/kernelconfig/"
---
[[kernelconfig]]
diff --git a/documentation/content/mn/books/handbook/l10n/_index.adoc b/documentation/content/mn/books/handbook/l10n/_index.adoc
index 6018185707..29a6047dd9 100644
--- a/documentation/content/mn/books/handbook/l10n/_index.adoc
+++ b/documentation/content/mn/books/handbook/l10n/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/virtualization
next: books/handbook/cutting-edge
showBookMenu: true
weight: 28
-path: "/books/handbook/"
+path: "/books/handbook/l10n/"
---
[[l10n]]
diff --git a/documentation/content/mn/books/handbook/linuxemu/_index.adoc b/documentation/content/mn/books/handbook/linuxemu/_index.adoc
index cab1393776..cf44b10b6c 100644
--- a/documentation/content/mn/books/handbook/linuxemu/_index.adoc
+++ b/documentation/content/mn/books/handbook/linuxemu/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/printing
next: books/handbook/partiii
showBookMenu: true
weight: 14
-path: "/books/handbook/"
+path: "/books/handbook/linuxemu/"
---
[[linuxemu]]
diff --git a/documentation/content/mn/books/handbook/mac/_index.adoc b/documentation/content/mn/books/handbook/mac/_index.adoc
index a3670b9150..d977f3f47e 100644
--- a/documentation/content/mn/books/handbook/mac/_index.adoc
+++ b/documentation/content/mn/books/handbook/mac/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/jails
next: books/handbook/audit
showBookMenu: true
weight: 21
-path: "/books/handbook/"
+path: "/books/handbook/mac/"
---
[[mac]]
diff --git a/documentation/content/mn/books/handbook/mail/_index.adoc b/documentation/content/mn/books/handbook/mail/_index.adoc
index d136a8f70e..b19125003a 100644
--- a/documentation/content/mn/books/handbook/mail/_index.adoc
+++ b/documentation/content/mn/books/handbook/mail/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/ppp-and-slip
next: books/handbook/network-servers
showBookMenu: true
weight: 34
-path: "/books/handbook/"
+path: "/books/handbook/mail/"
---
[[mail]]
diff --git a/documentation/content/mn/books/handbook/mirrors/_index.adoc b/documentation/content/mn/books/handbook/mirrors/_index.adoc
index 51e66be8e1..415ee65800 100644
--- a/documentation/content/mn/books/handbook/mirrors/_index.adoc
+++ b/documentation/content/mn/books/handbook/mirrors/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partv
next: books/handbook/bibliography
showBookMenu: true
weight: 39
-path: "/books/handbook/"
+path: "/books/handbook/mirrors/"
---
[appendix]
diff --git a/documentation/content/mn/books/handbook/multimedia/_index.adoc b/documentation/content/mn/books/handbook/multimedia/_index.adoc
index 0ed4fa6d0a..5d372f0f9c 100644
--- a/documentation/content/mn/books/handbook/multimedia/_index.adoc
+++ b/documentation/content/mn/books/handbook/multimedia/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/desktop
next: books/handbook/kernelconfig
showBookMenu: true
weight: 11
-path: "/books/handbook/"
+path: "/books/handbook/multimedia/"
---
[[multimedia]]
diff --git a/documentation/content/mn/books/handbook/network-servers/_index.adoc b/documentation/content/mn/books/handbook/network-servers/_index.adoc
index 84842802f7..8def7472d9 100644
--- a/documentation/content/mn/books/handbook/network-servers/_index.adoc
+++ b/documentation/content/mn/books/handbook/network-servers/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mail
next: books/handbook/firewalls
showBookMenu: true
weight: 35
-path: "/books/handbook/"
+path: "/books/handbook/network-servers/"
---
[[network-servers]]
diff --git a/documentation/content/mn/books/handbook/parti.adoc b/documentation/content/mn/books/handbook/parti.adoc
index 71f48f7601..8dd3524c19 100644
--- a/documentation/content/mn/books/handbook/parti.adoc
+++ b/documentation/content/mn/books/handbook/parti.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/preface
next: books/handbook/introduction
showBookMenu: true
weight: 2
-path: "/books/handbook/"
+path: "/books/handbook/parti/"
---
[[getting-started]]
diff --git a/documentation/content/mn/books/handbook/partii.adoc b/documentation/content/mn/books/handbook/partii.adoc
index b4912b6fd0..63be3b565b 100644
--- a/documentation/content/mn/books/handbook/partii.adoc
+++ b/documentation/content/mn/books/handbook/partii.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/x11
next: books/handbook/desktop
showBookMenu: true
weight: 9
-path: "/books/handbook/"
+path: "/books/handbook/partii/"
---
[[common-tasks]]
diff --git a/documentation/content/mn/books/handbook/partiii.adoc b/documentation/content/mn/books/handbook/partiii.adoc
index 579893d31f..c83bf5f2f3 100644
--- a/documentation/content/mn/books/handbook/partiii.adoc
+++ b/documentation/content/mn/books/handbook/partiii.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/linuxemu
next: books/handbook/config
showBookMenu: true
weight: 15
-path: "/books/handbook/"
+path: "/books/handbook/partiii/"
---
[[system-administration]]
diff --git a/documentation/content/mn/books/handbook/partiv.adoc b/documentation/content/mn/books/handbook/partiv.adoc
index 58b951ff2b..0f1b35d3e2 100644
--- a/documentation/content/mn/books/handbook/partiv.adoc
+++ b/documentation/content/mn/books/handbook/partiv.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/usb-device-mode
next: books/handbook/serialcomms
showBookMenu: true
weight: 31
-path: "/books/handbook/"
+path: "/books/handbook/partiv/"
---
[[network-communication]]
diff --git a/documentation/content/mn/books/handbook/partv.adoc b/documentation/content/mn/books/handbook/partv.adoc
index c259a43dea..07f09c06a6 100644
--- a/documentation/content/mn/books/handbook/partv.adoc
+++ b/documentation/content/mn/books/handbook/partv.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/advanced-networking
next: books/handbook/mirrors
showBookMenu: true
weight: 38
-path: "/books/handbook/"
+path: "/books/handbook/partv/"
---
[[appendices]]
diff --git a/documentation/content/mn/books/handbook/pgpkeys/_index.adoc b/documentation/content/mn/books/handbook/pgpkeys/_index.adoc
index 0e18a4b66d..77b88ffd01 100644
--- a/documentation/content/mn/books/handbook/pgpkeys/_index.adoc
+++ b/documentation/content/mn/books/handbook/pgpkeys/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/eresources
next: books/handbook/freebsd-glossary
showBookMenu: true
weight: 42
-path: "/books/handbook/"
+path: "/books/handbook/pgpkeys/"
---
[appendix]
@@ -59,9 +59,6 @@ The OpenPGP keys of the `FreeBSD.org` officers are shown here. These keys can be
=== {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/mn/books/handbook/ports/_index.adoc b/documentation/content/mn/books/handbook/ports/_index.adoc
index 038863394b..e57a7766f9 100644
--- a/documentation/content/mn/books/handbook/ports/_index.adoc
+++ b/documentation/content/mn/books/handbook/ports/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/basics
next: books/handbook/x11
showBookMenu: true
weight: 7
-path: "/books/handbook/"
+path: "/books/handbook/ports/"
---
[[ports]]
diff --git a/documentation/content/mn/books/handbook/ppp-and-slip/_index.adoc b/documentation/content/mn/books/handbook/ppp-and-slip/_index.adoc
index a4657a59c6..6fc077756b 100644
--- a/documentation/content/mn/books/handbook/ppp-and-slip/_index.adoc
+++ b/documentation/content/mn/books/handbook/ppp-and-slip/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/serialcomms
next: books/handbook/mail
showBookMenu: true
weight: 33
-path: "/books/handbook/"
+path: "/books/handbook/ppp-and-slip/"
---
[[ppp-and-slip]]
diff --git a/documentation/content/mn/books/handbook/preface/_index.adoc b/documentation/content/mn/books/handbook/preface/_index.adoc
index 0a54fc595a..44a8276cd4 100644
--- a/documentation/content/mn/books/handbook/preface/_index.adoc
+++ b/documentation/content/mn/books/handbook/preface/_index.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/
next: books/handbook/parti
showBookMenu: true
weight: 1
-path: "/books/handbook/"
+path: "/books/handbook/preface/"
---
[preface]
diff --git a/documentation/content/mn/books/handbook/printing/_index.adoc b/documentation/content/mn/books/handbook/printing/_index.adoc
index 873a644ff5..00840cb732 100644
--- a/documentation/content/mn/books/handbook/printing/_index.adoc
+++ b/documentation/content/mn/books/handbook/printing/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/kernelconfig
next: books/handbook/linuxemu
showBookMenu: true
weight: 13
-path: "/books/handbook/"
+path: "/books/handbook/printing/"
---
[[printing]]
diff --git a/documentation/content/mn/books/handbook/security/_index.adoc b/documentation/content/mn/books/handbook/security/_index.adoc
index cad21a3ff3..e715d0b153 100644
--- a/documentation/content/mn/books/handbook/security/_index.adoc
+++ b/documentation/content/mn/books/handbook/security/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/users
next: books/handbook/jails
showBookMenu: true
weight: 19
-path: "/books/handbook/"
+path: "/books/handbook/security/"
---
[[security]]
diff --git a/documentation/content/mn/books/handbook/serialcomms/_index.adoc b/documentation/content/mn/books/handbook/serialcomms/_index.adoc
index 6119596615..f8c05e4c75 100644
--- a/documentation/content/mn/books/handbook/serialcomms/_index.adoc
+++ b/documentation/content/mn/books/handbook/serialcomms/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partiv
next: books/handbook/ppp-and-slip
showBookMenu: true
weight: 32
-path: "/books/handbook/"
+path: "/books/handbook/serialcomms/"
---
[[serialcomms]]
diff --git a/documentation/content/mn/books/handbook/users/_index.adoc b/documentation/content/mn/books/handbook/users/_index.adoc
index 97f5a66ff8..69827df558 100644
--- a/documentation/content/mn/books/handbook/users/_index.adoc
+++ b/documentation/content/mn/books/handbook/users/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/boot
next: books/handbook/security
showBookMenu: true
weight: 18
-path: "/books/handbook/"
+path: "/books/handbook/users/"
---
[[users]]
diff --git a/documentation/content/mn/books/handbook/vinum/_index.adoc b/documentation/content/mn/books/handbook/vinum/_index.adoc
index c90af0887e..cda8e1f7f3 100644
--- a/documentation/content/mn/books/handbook/vinum/_index.adoc
+++ b/documentation/content/mn/books/handbook/vinum/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/filesystems
next: books/handbook/virtualization
showBookMenu: true
weight: 26
-path: "/books/handbook/"
+path: "/books/handbook/vinum/"
---
[[vinum-vinum]]
diff --git a/documentation/content/mn/books/handbook/virtualization/_index.adoc b/documentation/content/mn/books/handbook/virtualization/_index.adoc
index 3e214f0a02..af4bc30448 100644
--- a/documentation/content/mn/books/handbook/virtualization/_index.adoc
+++ b/documentation/content/mn/books/handbook/virtualization/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/vinum
next: books/handbook/l10n
showBookMenu: true
weight: 27
-path: "/books/handbook/"
+path: "/books/handbook/virtualization/"
---
[[virtualization]]
diff --git a/documentation/content/mn/books/handbook/x11/_index.adoc b/documentation/content/mn/books/handbook/x11/_index.adoc
index 38ee86bab3..20f3a56b05 100644
--- a/documentation/content/mn/books/handbook/x11/_index.adoc
+++ b/documentation/content/mn/books/handbook/x11/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/ports
next: books/handbook/partii
showBookMenu: true
weight: 8
-path: "/books/handbook/"
+path: "/books/handbook/x11/"
---
[[x11]]
diff --git a/documentation/content/nl/books/handbook/advanced-networking/_index.adoc b/documentation/content/nl/books/handbook/advanced-networking/_index.adoc
index cceb871c07..e83b22ad35 100644
--- a/documentation/content/nl/books/handbook/advanced-networking/_index.adoc
+++ b/documentation/content/nl/books/handbook/advanced-networking/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/firewalls
next: books/handbook/partv
showBookMenu: true
weight: 36
-path: "/books/handbook/"
+path: "/books/handbook/advanced-networking/"
---
[[advanced-networking]]
diff --git a/documentation/content/nl/books/handbook/audit/_index.adoc b/documentation/content/nl/books/handbook/audit/_index.adoc
index 244c6a34a9..7a5db81c22 100644
--- a/documentation/content/nl/books/handbook/audit/_index.adoc
+++ b/documentation/content/nl/books/handbook/audit/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mac
next: books/handbook/disks
showBookMenu: true
weight: 22
-path: "/books/handbook/"
+path: "/books/handbook/audit/"
---
[[audit]]
diff --git a/documentation/content/nl/books/handbook/basics/_index.adoc b/documentation/content/nl/books/handbook/basics/_index.adoc
index b5a0ffff2f..5cbfd2aecc 100644
--- a/documentation/content/nl/books/handbook/basics/_index.adoc
+++ b/documentation/content/nl/books/handbook/basics/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/bsdinstall
next: books/handbook/ports
showBookMenu: true
weight: 6
-path: "/books/handbook/"
+path: "/books/handbook/basics/"
---
[[basics]]
diff --git a/documentation/content/nl/books/handbook/bibliography/_index.adoc b/documentation/content/nl/books/handbook/bibliography/_index.adoc
index d6bfd26de5..ae5c620c54 100644
--- a/documentation/content/nl/books/handbook/bibliography/_index.adoc
+++ b/documentation/content/nl/books/handbook/bibliography/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mirrors
next: books/handbook/eresources
showBookMenu: true
weight: 39
-path: "/books/handbook/"
+path: "/books/handbook/bibliography/"
---
[appendix]
diff --git a/documentation/content/nl/books/handbook/boot/_index.adoc b/documentation/content/nl/books/handbook/boot/_index.adoc
index 0acee5eced..d4e031d70f 100644
--- a/documentation/content/nl/books/handbook/boot/_index.adoc
+++ b/documentation/content/nl/books/handbook/boot/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/config
next: books/handbook/users
showBookMenu: true
weight: 17
-path: "/books/handbook/"
+path: "/books/handbook/boot/"
---
[[boot]]
diff --git a/documentation/content/nl/books/handbook/bsdinstall/_index.adoc b/documentation/content/nl/books/handbook/bsdinstall/_index.adoc
index bd4b2d4e5b..2038632f05 100644
--- a/documentation/content/nl/books/handbook/bsdinstall/_index.adoc
+++ b/documentation/content/nl/books/handbook/bsdinstall/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/install
next: books/handbook/basics
showBookMenu: true
weight: 5
-path: "/books/handbook/"
+path: "/books/handbook/bsdinstall/"
---
[[bsdinstall]]
diff --git a/documentation/content/nl/books/handbook/config/_index.adoc b/documentation/content/nl/books/handbook/config/_index.adoc
index 51268a210f..ce19e542ab 100644
--- a/documentation/content/nl/books/handbook/config/_index.adoc
+++ b/documentation/content/nl/books/handbook/config/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partiii
next: books/handbook/boot
showBookMenu: true
weight: 16
-path: "/books/handbook/"
+path: "/books/handbook/config/"
---
[[config-tuning]]
@@ -1445,6 +1445,6 @@ Meer informatie over ACPI staat op de volgende locaties:
* De {freebsd-acpi}
* De ACPI mailinglijst archieven http://lists.freebsd.org/pipermail/freebsd-acpi/[http://lists.freebsd.org/pipermail/freebsd-acpi/]
* De oude ACPI mailinglijst archieven http://home.jp.FreeBSD.org/mail-list/acpi-jp/[http://home.jp.FreeBSD.org/mail-list/acpi-jp/]
-* De ACPI 2.0 specificatie http://acpi.info/spec.htm[http://acpi.info/spec.htm]
+* De https://uefi.org/specifications#ACPI[ACPI specificatie]
* FreeBSD Handleidingen: man:acpi[4], man:acpi_thermal[4], man:acpidump[8], man:iasl[8], man:acpidb[8]
* http://www.cpqlinux.com/acpi-howto.html#fix_broken_dsdt[ DSDT debugging informatie]. (Gebruikt Compaq als voorbeeld, maar van algemeen nut).
diff --git a/documentation/content/nl/books/handbook/cutting-edge/_index.adoc b/documentation/content/nl/books/handbook/cutting-edge/_index.adoc
index 91fb49f5f6..75c2d48c1f 100644
--- a/documentation/content/nl/books/handbook/cutting-edge/_index.adoc
+++ b/documentation/content/nl/books/handbook/cutting-edge/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/l10n
next: books/handbook/dtrace
showBookMenu: true
weight: 28
-path: "/books/handbook/"
+path: "/books/handbook/cutting-edge/"
---
[[updating-upgrading]]
diff --git a/documentation/content/nl/books/handbook/desktop/_index.adoc b/documentation/content/nl/books/handbook/desktop/_index.adoc
index f62cb7cfe8..b357ad61f0 100644
--- a/documentation/content/nl/books/handbook/desktop/_index.adoc
+++ b/documentation/content/nl/books/handbook/desktop/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partii
next: books/handbook/multimedia
showBookMenu: true
weight: 10
-path: "/books/handbook/"
+path: "/books/handbook/desktop/"
---
[[desktop]]
diff --git a/documentation/content/nl/books/handbook/disks/_index.adoc b/documentation/content/nl/books/handbook/disks/_index.adoc
index 3c6586e9bc..77d5b966bc 100644
--- a/documentation/content/nl/books/handbook/disks/_index.adoc
+++ b/documentation/content/nl/books/handbook/disks/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/audit
next: books/handbook/geom
showBookMenu: true
weight: 23
-path: "/books/handbook/"
+path: "/books/handbook/disks/"
---
[[disks]]
diff --git a/documentation/content/nl/books/handbook/dtrace/_index.adoc b/documentation/content/nl/books/handbook/dtrace/_index.adoc
index 621b189d4d..20b5efc8c9 100644
--- a/documentation/content/nl/books/handbook/dtrace/_index.adoc
+++ b/documentation/content/nl/books/handbook/dtrace/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/cutting-edge
next: books/handbook/partiv
showBookMenu: true
weight: 29
-path: "/books/handbook/"
+path: "/books/handbook/dtrace/"
---
[[dtrace]]
diff --git a/documentation/content/nl/books/handbook/eresources/_index.adoc b/documentation/content/nl/books/handbook/eresources/_index.adoc
index e193592f63..01058c5112 100644
--- a/documentation/content/nl/books/handbook/eresources/_index.adoc
+++ b/documentation/content/nl/books/handbook/eresources/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/bibliography
next: books/handbook/pgpkeys
showBookMenu: true
weight: 40
-path: "/books/handbook/"
+path: "/books/handbook/eresources/"
---
[appendix]
diff --git a/documentation/content/nl/books/handbook/filesystems/_index.adoc b/documentation/content/nl/books/handbook/filesystems/_index.adoc
index d7f1ae0735..78c0667a9e 100644
--- a/documentation/content/nl/books/handbook/filesystems/_index.adoc
+++ b/documentation/content/nl/books/handbook/filesystems/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/geom
next: books/handbook/virtualization
showBookMenu: true
weight: 25
-path: "/books/handbook/"
+path: "/books/handbook/filesystems/"
---
[[filesystems]]
diff --git a/documentation/content/nl/books/handbook/firewalls/_index.adoc b/documentation/content/nl/books/handbook/firewalls/_index.adoc
index d240d1c0d3..cb6ef35de5 100644
--- a/documentation/content/nl/books/handbook/firewalls/_index.adoc
+++ b/documentation/content/nl/books/handbook/firewalls/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/network-servers
next: books/handbook/advanced-networking
showBookMenu: true
weight: 35
-path: "/books/handbook/"
+path: "/books/handbook/firewalls/"
---
[[firewalls]]
diff --git a/documentation/content/nl/books/handbook/geom/_index.adoc b/documentation/content/nl/books/handbook/geom/_index.adoc
index 309522c8e6..582a3cb999 100644
--- a/documentation/content/nl/books/handbook/geom/_index.adoc
+++ b/documentation/content/nl/books/handbook/geom/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/disks
next: books/handbook/filesystems
showBookMenu: true
weight: 24
-path: "/books/handbook/"
+path: "/books/handbook/geom/"
---
[[geom]]
diff --git a/documentation/content/nl/books/handbook/install/_index.adoc b/documentation/content/nl/books/handbook/install/_index.adoc
index 7414b69e9d..22782053ad 100644
--- a/documentation/content/nl/books/handbook/install/_index.adoc
+++ b/documentation/content/nl/books/handbook/install/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/introduction
next: books/handbook/bsdinstall
showBookMenu: true
weight: 4
-path: "/books/handbook/"
+path: "/books/handbook/install/"
---
[[install]]
diff --git a/documentation/content/nl/books/handbook/introduction/_index.adoc b/documentation/content/nl/books/handbook/introduction/_index.adoc
index 1ad73f2b10..20c2ac0329 100644
--- a/documentation/content/nl/books/handbook/introduction/_index.adoc
+++ b/documentation/content/nl/books/handbook/introduction/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/parti
next: books/handbook/install
showBookMenu: true
weight: 3
-path: "/books/handbook/"
+path: "/books/handbook/introduction/"
---
[[introduction]]
diff --git a/documentation/content/nl/books/handbook/jails/_index.adoc b/documentation/content/nl/books/handbook/jails/_index.adoc
index fc54a28fc6..58d687dede 100644
--- a/documentation/content/nl/books/handbook/jails/_index.adoc
+++ b/documentation/content/nl/books/handbook/jails/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/security
next: books/handbook/mac
showBookMenu: true
weight: 20
-path: "/books/handbook/"
+path: "/books/handbook/jails/"
---
[[jails]]
diff --git a/documentation/content/nl/books/handbook/kernelconfig/_index.adoc b/documentation/content/nl/books/handbook/kernelconfig/_index.adoc
index cf1cfcc5a3..355868d5b3 100644
--- a/documentation/content/nl/books/handbook/kernelconfig/_index.adoc
+++ b/documentation/content/nl/books/handbook/kernelconfig/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/multimedia
next: books/handbook/printing
showBookMenu: true
weight: 12
-path: "/books/handbook/"
+path: "/books/handbook/kernelconfig/"
---
[[kernelconfig]]
diff --git a/documentation/content/nl/books/handbook/l10n/_index.adoc b/documentation/content/nl/books/handbook/l10n/_index.adoc
index ac55db6951..05fcb65cd3 100644
--- a/documentation/content/nl/books/handbook/l10n/_index.adoc
+++ b/documentation/content/nl/books/handbook/l10n/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/virtualization
next: books/handbook/cutting-edge
showBookMenu: true
weight: 27
-path: "/books/handbook/"
+path: "/books/handbook/l10n/"
---
[[l10n]]
diff --git a/documentation/content/nl/books/handbook/linuxemu/_index.adoc b/documentation/content/nl/books/handbook/linuxemu/_index.adoc
index 2980e8e760..be9442d7df 100644
--- a/documentation/content/nl/books/handbook/linuxemu/_index.adoc
+++ b/documentation/content/nl/books/handbook/linuxemu/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/printing
next: books/handbook/partiii
showBookMenu: true
weight: 14
-path: "/books/handbook/"
+path: "/books/handbook/linuxemu/"
---
[[linuxemu]]
diff --git a/documentation/content/nl/books/handbook/mac/_index.adoc b/documentation/content/nl/books/handbook/mac/_index.adoc
index 5bc4eab8d2..e06de3bdc1 100644
--- a/documentation/content/nl/books/handbook/mac/_index.adoc
+++ b/documentation/content/nl/books/handbook/mac/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/jails
next: books/handbook/audit
showBookMenu: true
weight: 21
-path: "/books/handbook/"
+path: "/books/handbook/mac/"
---
[[mac]]
diff --git a/documentation/content/nl/books/handbook/mail/_index.adoc b/documentation/content/nl/books/handbook/mail/_index.adoc
index f46601412d..b3c62c405b 100644
--- a/documentation/content/nl/books/handbook/mail/_index.adoc
+++ b/documentation/content/nl/books/handbook/mail/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/ppp-and-slip
next: books/handbook/network-servers
showBookMenu: true
weight: 33
-path: "/books/handbook/"
+path: "/books/handbook/mail/"
---
[[mail]]
diff --git a/documentation/content/nl/books/handbook/mirrors/_index.adoc b/documentation/content/nl/books/handbook/mirrors/_index.adoc
index 52b4143c16..f80f25faad 100644
--- a/documentation/content/nl/books/handbook/mirrors/_index.adoc
+++ b/documentation/content/nl/books/handbook/mirrors/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partv
next: books/handbook/bibliography
showBookMenu: true
weight: 38
-path: "/books/handbook/"
+path: "/books/handbook/mirrors/"
---
[appendix]
diff --git a/documentation/content/nl/books/handbook/multimedia/_index.adoc b/documentation/content/nl/books/handbook/multimedia/_index.adoc
index 67a2f76cfa..e9f4de9323 100644
--- a/documentation/content/nl/books/handbook/multimedia/_index.adoc
+++ b/documentation/content/nl/books/handbook/multimedia/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/desktop
next: books/handbook/kernelconfig
showBookMenu: true
weight: 11
-path: "/books/handbook/"
+path: "/books/handbook/multimedia/"
---
[[multimedia]]
diff --git a/documentation/content/nl/books/handbook/network-servers/_index.adoc b/documentation/content/nl/books/handbook/network-servers/_index.adoc
index b5fd9dcb62..fb44362eed 100644
--- a/documentation/content/nl/books/handbook/network-servers/_index.adoc
+++ b/documentation/content/nl/books/handbook/network-servers/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mail
next: books/handbook/firewalls
showBookMenu: true
weight: 34
-path: "/books/handbook/"
+path: "/books/handbook/network-servers/"
---
[[network-servers]]
diff --git a/documentation/content/nl/books/handbook/parti.adoc b/documentation/content/nl/books/handbook/parti.adoc
index 1ffee79bfc..4212116c30 100644
--- a/documentation/content/nl/books/handbook/parti.adoc
+++ b/documentation/content/nl/books/handbook/parti.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/preface
next: books/handbook/introduction
showBookMenu: true
weight: 2
-path: "/books/handbook/"
+path: "/books/handbook/parti/"
---
[[getting-started]]
diff --git a/documentation/content/nl/books/handbook/partii.adoc b/documentation/content/nl/books/handbook/partii.adoc
index 4b26c9cdb2..f650920af2 100644
--- a/documentation/content/nl/books/handbook/partii.adoc
+++ b/documentation/content/nl/books/handbook/partii.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/x11
next: books/handbook/desktop
showBookMenu: true
weight: 9
-path: "/books/handbook/"
+path: "/books/handbook/partii/"
---
[[common-tasks]]
diff --git a/documentation/content/nl/books/handbook/partiii.adoc b/documentation/content/nl/books/handbook/partiii.adoc
index 786a5302a8..6274c98911 100644
--- a/documentation/content/nl/books/handbook/partiii.adoc
+++ b/documentation/content/nl/books/handbook/partiii.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/linuxemu
next: books/handbook/config
showBookMenu: true
weight: 15
-path: "/books/handbook/"
+path: "/books/handbook/partiii/"
---
[[system-administration]]
diff --git a/documentation/content/nl/books/handbook/partiv.adoc b/documentation/content/nl/books/handbook/partiv.adoc
index 8d862c58f8..69187ad32b 100644
--- a/documentation/content/nl/books/handbook/partiv.adoc
+++ b/documentation/content/nl/books/handbook/partiv.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/usb-device-mode
next: books/handbook/serialcomms
showBookMenu: true
weight: 30
-path: "/books/handbook/"
+path: "/books/handbook/partiv/"
---
[[network-communication]]
diff --git a/documentation/content/nl/books/handbook/partv.adoc b/documentation/content/nl/books/handbook/partv.adoc
index 0ecd4f1c37..ae61a19b32 100644
--- a/documentation/content/nl/books/handbook/partv.adoc
+++ b/documentation/content/nl/books/handbook/partv.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/advanced-networking
next: books/handbook/mirrors
showBookMenu: true
weight: 37
-path: "/books/handbook/"
+path: "/books/handbook/partv/"
---
[[appendices]]
diff --git a/documentation/content/nl/books/handbook/pgpkeys/_index.adoc b/documentation/content/nl/books/handbook/pgpkeys/_index.adoc
index 08f1fc9b80..4ed8ee5ab7 100644
--- a/documentation/content/nl/books/handbook/pgpkeys/_index.adoc
+++ b/documentation/content/nl/books/handbook/pgpkeys/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/eresources
next: books/handbook/freebsd-glossary
showBookMenu: true
weight: 41
-path: "/books/handbook/"
+path: "/books/handbook/pgpkeys/"
---
[appendix]
@@ -59,9 +59,6 @@ In het geval een handtekening van een van de beambten of ontwikkelaars gecontrol
=== {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/nl/books/handbook/ports/_index.adoc b/documentation/content/nl/books/handbook/ports/_index.adoc
index 4662dd69e9..f2d3def19b 100644
--- a/documentation/content/nl/books/handbook/ports/_index.adoc
+++ b/documentation/content/nl/books/handbook/ports/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/basics
next: books/handbook/x11
showBookMenu: true
weight: 7
-path: "/books/handbook/"
+path: "/books/handbook/ports/"
---
[[ports]]
diff --git a/documentation/content/nl/books/handbook/ppp-and-slip/_index.adoc b/documentation/content/nl/books/handbook/ppp-and-slip/_index.adoc
index f127e42e95..69dbe0d2ff 100644
--- a/documentation/content/nl/books/handbook/ppp-and-slip/_index.adoc
+++ b/documentation/content/nl/books/handbook/ppp-and-slip/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/serialcomms
next: books/handbook/mail
showBookMenu: true
weight: 32
-path: "/books/handbook/"
+path: "/books/handbook/ppp-and-slip/"
---
[[ppp-and-slip]]
diff --git a/documentation/content/nl/books/handbook/preface/_index.adoc b/documentation/content/nl/books/handbook/preface/_index.adoc
index bfe2a00db9..d93abfe273 100644
--- a/documentation/content/nl/books/handbook/preface/_index.adoc
+++ b/documentation/content/nl/books/handbook/preface/_index.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/
next: books/handbook/parti
showBookMenu: true
weight: 1
-path: "/books/handbook/"
+path: "/books/handbook/preface/"
---
[preface]
diff --git a/documentation/content/nl/books/handbook/printing/_index.adoc b/documentation/content/nl/books/handbook/printing/_index.adoc
index 7bdbb34baf..753728dff5 100644
--- a/documentation/content/nl/books/handbook/printing/_index.adoc
+++ b/documentation/content/nl/books/handbook/printing/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/kernelconfig
next: books/handbook/linuxemu
showBookMenu: true
weight: 13
-path: "/books/handbook/"
+path: "/books/handbook/printing/"
---
[[printing]]
diff --git a/documentation/content/nl/books/handbook/security/_index.adoc b/documentation/content/nl/books/handbook/security/_index.adoc
index 289a588bb3..bb8ceb87e9 100644
--- a/documentation/content/nl/books/handbook/security/_index.adoc
+++ b/documentation/content/nl/books/handbook/security/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/users
next: books/handbook/jails
showBookMenu: true
weight: 19
-path: "/books/handbook/"
+path: "/books/handbook/security/"
---
[[security]]
diff --git a/documentation/content/nl/books/handbook/serialcomms/_index.adoc b/documentation/content/nl/books/handbook/serialcomms/_index.adoc
index 4aac93dd2c..21c4f2d4e4 100644
--- a/documentation/content/nl/books/handbook/serialcomms/_index.adoc
+++ b/documentation/content/nl/books/handbook/serialcomms/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partiv
next: books/handbook/ppp-and-slip
showBookMenu: true
weight: 31
-path: "/books/handbook/"
+path: "/books/handbook/serialcomms/"
---
[[serialcomms]]
diff --git a/documentation/content/nl/books/handbook/users/_index.adoc b/documentation/content/nl/books/handbook/users/_index.adoc
index e78866535e..e04f83cb79 100644
--- a/documentation/content/nl/books/handbook/users/_index.adoc
+++ b/documentation/content/nl/books/handbook/users/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/boot
next: books/handbook/security
showBookMenu: true
weight: 18
-path: "/books/handbook/"
+path: "/books/handbook/users/"
---
[[users]]
diff --git a/documentation/content/nl/books/handbook/virtualization/_index.adoc b/documentation/content/nl/books/handbook/virtualization/_index.adoc
index f15256307b..20a776b45f 100644
--- a/documentation/content/nl/books/handbook/virtualization/_index.adoc
+++ b/documentation/content/nl/books/handbook/virtualization/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/filesystems
next: books/handbook/l10n
showBookMenu: true
weight: 26
-path: "/books/handbook/"
+path: "/books/handbook/virtualization/"
---
[[virtualization]]
diff --git a/documentation/content/nl/books/handbook/x11/_index.adoc b/documentation/content/nl/books/handbook/x11/_index.adoc
index 554e34e3d5..07c03032b4 100644
--- a/documentation/content/nl/books/handbook/x11/_index.adoc
+++ b/documentation/content/nl/books/handbook/x11/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/ports
next: books/handbook/partii
showBookMenu: true
weight: 8
-path: "/books/handbook/"
+path: "/books/handbook/x11/"
---
[[x11]]
diff --git a/documentation/content/pl/books/handbook/advanced-networking/_index.adoc b/documentation/content/pl/books/handbook/advanced-networking/_index.adoc
index 2dc6e02552..9dd900243e 100644
--- a/documentation/content/pl/books/handbook/advanced-networking/_index.adoc
+++ b/documentation/content/pl/books/handbook/advanced-networking/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/firewalls
next: books/handbook/partv
showBookMenu: true
weight: 37
-path: "/books/handbook/"
+path: "/books/handbook/advanced-networking/"
---
[[advanced-networking]]
diff --git a/documentation/content/pl/books/handbook/audit/_index.adoc b/documentation/content/pl/books/handbook/audit/_index.adoc
index be90a0dafe..d244712b02 100644
--- a/documentation/content/pl/books/handbook/audit/_index.adoc
+++ b/documentation/content/pl/books/handbook/audit/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mac
next: books/handbook/disks
showBookMenu: true
weight: 21
-path: "/books/handbook/"
+path: "/books/handbook/audit/"
---
[[audit]]
diff --git a/documentation/content/pl/books/handbook/basics/_index.adoc b/documentation/content/pl/books/handbook/basics/_index.adoc
index 03fe98fe96..3b0baeb33e 100644
--- a/documentation/content/pl/books/handbook/basics/_index.adoc
+++ b/documentation/content/pl/books/handbook/basics/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/install
next: books/handbook/ports
showBookMenu: true
weight: 5
-path: "/books/handbook/"
+path: "/books/handbook/basics/"
---
[[basics]]
diff --git a/documentation/content/pl/books/handbook/bibliography/_index.adoc b/documentation/content/pl/books/handbook/bibliography/_index.adoc
index 78006c66a2..a9aaaf2d2d 100644
--- a/documentation/content/pl/books/handbook/bibliography/_index.adoc
+++ b/documentation/content/pl/books/handbook/bibliography/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mirrors
next: books/handbook/eresources
showBookMenu: true
weight: 40
-path: "/books/handbook/"
+path: "/books/handbook/bibliography/"
---
[appendix]
diff --git a/documentation/content/pl/books/handbook/boot/_index.adoc b/documentation/content/pl/books/handbook/boot/_index.adoc
index 9b20f44c12..3419e84553 100644
--- a/documentation/content/pl/books/handbook/boot/_index.adoc
+++ b/documentation/content/pl/books/handbook/boot/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/config
next: books/handbook/users
showBookMenu: true
weight: 16
-path: "/books/handbook/"
+path: "/books/handbook/boot/"
---
[[boot]]
diff --git a/documentation/content/pl/books/handbook/config/_index.adoc b/documentation/content/pl/books/handbook/config/_index.adoc
index 2f7704ba36..a42fca70a0 100644
--- a/documentation/content/pl/books/handbook/config/_index.adoc
+++ b/documentation/content/pl/books/handbook/config/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partiii
next: books/handbook/boot
showBookMenu: true
weight: 15
-path: "/books/handbook/"
+path: "/books/handbook/config/"
---
[[config-tuning]]
@@ -1521,5 +1521,5 @@ Most FreeBSD developers watch the {freebsd-current}, but one should submit probl
More information about ACPI may be found in the following locations:
* The FreeBSD ACPI Mailing List Archives (https://lists.freebsd.org/pipermail/freebsd-acpi/[https://lists.freebsd.org/pipermail/freebsd-acpi/])
-* The ACPI 2.0 Specification (http://acpi.info/spec.htm[http://acpi.info/spec.htm])
+* The https://uefi.org/specifications#ACPI[ACPI Specification]
* man:acpi[4], man:acpi_thermal[4], man:acpidump[8], man:iasl[8], and man:acpidb[8]
diff --git a/documentation/content/pl/books/handbook/cutting-edge/_index.adoc b/documentation/content/pl/books/handbook/cutting-edge/_index.adoc
index 7526671979..675f508ec3 100644
--- a/documentation/content/pl/books/handbook/cutting-edge/_index.adoc
+++ b/documentation/content/pl/books/handbook/cutting-edge/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/l10n
next: books/handbook/dtrace
showBookMenu: true
weight: 28
-path: "/books/handbook/"
+path: "/books/handbook/cutting-edge/"
---
[[updating-upgrading]]
diff --git a/documentation/content/pl/books/handbook/desktop/_index.adoc b/documentation/content/pl/books/handbook/desktop/_index.adoc
index b687ed129b..88ede7d50d 100644
--- a/documentation/content/pl/books/handbook/desktop/_index.adoc
+++ b/documentation/content/pl/books/handbook/desktop/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partii
next: books/handbook/multimedia
showBookMenu: true
weight: 9
-path: "/books/handbook/"
+path: "/books/handbook/desktop/"
---
[[desktop]]
diff --git a/documentation/content/pl/books/handbook/disks/_index.adoc b/documentation/content/pl/books/handbook/disks/_index.adoc
index cce1c2efdb..a59a753000 100644
--- a/documentation/content/pl/books/handbook/disks/_index.adoc
+++ b/documentation/content/pl/books/handbook/disks/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/audit
next: books/handbook/geom
showBookMenu: true
weight: 22
-path: "/books/handbook/"
+path: "/books/handbook/disks/"
---
[[disks]]
diff --git a/documentation/content/pl/books/handbook/dtrace/_index.adoc b/documentation/content/pl/books/handbook/dtrace/_index.adoc
index 003f8bfc62..f396c272c3 100644
--- a/documentation/content/pl/books/handbook/dtrace/_index.adoc
+++ b/documentation/content/pl/books/handbook/dtrace/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/cutting-edge
next: books/handbook/usb-device-mode
showBookMenu: true
weight: 29
-path: "/books/handbook/"
+path: "/books/handbook/dtrace/"
---
[[dtrace]]
diff --git a/documentation/content/pl/books/handbook/eresources/_index.adoc b/documentation/content/pl/books/handbook/eresources/_index.adoc
index 81083082bc..8f5adb19fe 100644
--- a/documentation/content/pl/books/handbook/eresources/_index.adoc
+++ b/documentation/content/pl/books/handbook/eresources/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/bibliography
next: books/handbook/pgpkeys
showBookMenu: true
weight: 41
-path: "/books/handbook/"
+path: "/books/handbook/eresources/"
---
[appendix]
diff --git a/documentation/content/pl/books/handbook/filesystems/_index.adoc b/documentation/content/pl/books/handbook/filesystems/_index.adoc
index 5080979f16..a1c08c6a8a 100644
--- a/documentation/content/pl/books/handbook/filesystems/_index.adoc
+++ b/documentation/content/pl/books/handbook/filesystems/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/zfs
next: books/handbook/virtualization
showBookMenu: true
weight: 25
-path: "/books/handbook/"
+path: "/books/handbook/filesystems/"
---
[[filesystems]]
diff --git a/documentation/content/pl/books/handbook/firewalls/_index.adoc b/documentation/content/pl/books/handbook/firewalls/_index.adoc
index 876f9ec338..d168ec82a6 100644
--- a/documentation/content/pl/books/handbook/firewalls/_index.adoc
+++ b/documentation/content/pl/books/handbook/firewalls/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/network-servers
next: books/handbook/advanced-networking
showBookMenu: true
weight: 36
-path: "/books/handbook/"
+path: "/books/handbook/firewalls/"
---
[[firewalls]]
diff --git a/documentation/content/pl/books/handbook/geom/_index.adoc b/documentation/content/pl/books/handbook/geom/_index.adoc
index 22d71cd353..a485c81f14 100644
--- a/documentation/content/pl/books/handbook/geom/_index.adoc
+++ b/documentation/content/pl/books/handbook/geom/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/disks
next: books/handbook/zfs
showBookMenu: true
weight: 23
-path: "/books/handbook/"
+path: "/books/handbook/geom/"
---
[[geom]]
diff --git a/documentation/content/pl/books/handbook/install/_index.adoc b/documentation/content/pl/books/handbook/install/_index.adoc
index bd291465e5..f8b42c0999 100644
--- a/documentation/content/pl/books/handbook/install/_index.adoc
+++ b/documentation/content/pl/books/handbook/install/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/introduction
next: books/handbook/basics
showBookMenu: true
weight: 4
-path: "/books/handbook/"
+path: "/books/handbook/install/"
---
[[install]]
diff --git a/documentation/content/pl/books/handbook/introduction/_index.adoc b/documentation/content/pl/books/handbook/introduction/_index.adoc
index 72091c31a4..f83ec92b57 100644
--- a/documentation/content/pl/books/handbook/introduction/_index.adoc
+++ b/documentation/content/pl/books/handbook/introduction/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/parti
next: books/handbook/install
showBookMenu: true
weight: 3
-path: "/books/handbook/"
+path: "/books/handbook/introduction/"
---
[[introduction]]
diff --git a/documentation/content/pl/books/handbook/jails/_index.adoc b/documentation/content/pl/books/handbook/jails/_index.adoc
index 59fffbe6c6..0f38fd3dfa 100644
--- a/documentation/content/pl/books/handbook/jails/_index.adoc
+++ b/documentation/content/pl/books/handbook/jails/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/security
next: books/handbook/mac
showBookMenu: true
weight: 19
-path: "/books/handbook/"
+path: "/books/handbook/jails/"
---
[[jails]]
diff --git a/documentation/content/pl/books/handbook/kernelconfig/_index.adoc b/documentation/content/pl/books/handbook/kernelconfig/_index.adoc
index a6dc5702b0..cf6e00a6fd 100644
--- a/documentation/content/pl/books/handbook/kernelconfig/_index.adoc
+++ b/documentation/content/pl/books/handbook/kernelconfig/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/multimedia
next: books/handbook/printing
showBookMenu: true
weight: 11
-path: "/books/handbook/"
+path: "/books/handbook/kernelconfig/"
---
[[kernelconfig]]
diff --git a/documentation/content/pl/books/handbook/l10n/_index.adoc b/documentation/content/pl/books/handbook/l10n/_index.adoc
index 441aa7858c..07dd076dc3 100644
--- a/documentation/content/pl/books/handbook/l10n/_index.adoc
+++ b/documentation/content/pl/books/handbook/l10n/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/virtualization
next: books/handbook/cutting-edge
showBookMenu: true
weight: 27
-path: "/books/handbook/"
+path: "/books/handbook/l10n/"
---
[[l10n]]
diff --git a/documentation/content/pl/books/handbook/linuxemu/_index.adoc b/documentation/content/pl/books/handbook/linuxemu/_index.adoc
index b17cbe0c4f..0bcb137226 100644
--- a/documentation/content/pl/books/handbook/linuxemu/_index.adoc
+++ b/documentation/content/pl/books/handbook/linuxemu/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/printing
next: books/handbook/partiii
showBookMenu: true
weight: 13
-path: "/books/handbook/"
+path: "/books/handbook/linuxemu/"
---
[[linuxemu]]
diff --git a/documentation/content/pl/books/handbook/mac/_index.adoc b/documentation/content/pl/books/handbook/mac/_index.adoc
index 1dd6e0d2de..ec7fabdb7b 100644
--- a/documentation/content/pl/books/handbook/mac/_index.adoc
+++ b/documentation/content/pl/books/handbook/mac/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/jails
next: books/handbook/audit
showBookMenu: true
weight: 20
-path: "/books/handbook/"
+path: "/books/handbook/mac/"
---
[[mac]]
diff --git a/documentation/content/pl/books/handbook/mail/_index.adoc b/documentation/content/pl/books/handbook/mail/_index.adoc
index 02678b0b35..f5756b0914 100644
--- a/documentation/content/pl/books/handbook/mail/_index.adoc
+++ b/documentation/content/pl/books/handbook/mail/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/ppp-and-slip
next: books/handbook/network-servers
showBookMenu: true
weight: 34
-path: "/books/handbook/"
+path: "/books/handbook/mail/"
---
[[mail]]
diff --git a/documentation/content/pl/books/handbook/mirrors/_index.adoc b/documentation/content/pl/books/handbook/mirrors/_index.adoc
index 96c6b3ed39..8e7841bab0 100644
--- a/documentation/content/pl/books/handbook/mirrors/_index.adoc
+++ b/documentation/content/pl/books/handbook/mirrors/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partv
next: books/handbook/bibliography
showBookMenu: true
weight: 39
-path: "/books/handbook/"
+path: "/books/handbook/mirrors/"
---
[appendix]
diff --git a/documentation/content/pl/books/handbook/multimedia/_index.adoc b/documentation/content/pl/books/handbook/multimedia/_index.adoc
index 94c8886342..f630a2a8a4 100644
--- a/documentation/content/pl/books/handbook/multimedia/_index.adoc
+++ b/documentation/content/pl/books/handbook/multimedia/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/desktop
next: books/handbook/kernelconfig
showBookMenu: true
weight: 10
-path: "/books/handbook/"
+path: "/books/handbook/multimedia/"
---
[[multimedia]]
diff --git a/documentation/content/pl/books/handbook/network-servers/_index.adoc b/documentation/content/pl/books/handbook/network-servers/_index.adoc
index d2fcce6201..a5269b95a1 100644
--- a/documentation/content/pl/books/handbook/network-servers/_index.adoc
+++ b/documentation/content/pl/books/handbook/network-servers/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mail
next: books/handbook/firewalls
showBookMenu: true
weight: 35
-path: "/books/handbook/"
+path: "/books/handbook/network-servers/"
---
[[network-servers]]
diff --git a/documentation/content/pl/books/handbook/parti.adoc b/documentation/content/pl/books/handbook/parti.adoc
index be65a3f65c..aba5bb6bbd 100644
--- a/documentation/content/pl/books/handbook/parti.adoc
+++ b/documentation/content/pl/books/handbook/parti.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/preface
next: books/handbook/introduction
showBookMenu: true
weight: 2
-path: "/books/handbook/"
+path: "/books/handbook/parti/"
---
[[getting-started]]
diff --git a/documentation/content/pl/books/handbook/partii.adoc b/documentation/content/pl/books/handbook/partii.adoc
index 80f9afbae7..b3120bb378 100644
--- a/documentation/content/pl/books/handbook/partii.adoc
+++ b/documentation/content/pl/books/handbook/partii.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/x11
next: books/handbook/desktop
showBookMenu: true
weight: 8
-path: "/books/handbook/"
+path: "/books/handbook/partii/"
---
[[common-tasks]]
diff --git a/documentation/content/pl/books/handbook/partiii.adoc b/documentation/content/pl/books/handbook/partiii.adoc
index 7904944930..0b1109e8dc 100644
--- a/documentation/content/pl/books/handbook/partiii.adoc
+++ b/documentation/content/pl/books/handbook/partiii.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/linuxemu
next: books/handbook/config
showBookMenu: true
weight: 14
-path: "/books/handbook/"
+path: "/books/handbook/partiii/"
---
[[system-administration]]
diff --git a/documentation/content/pl/books/handbook/partiv.adoc b/documentation/content/pl/books/handbook/partiv.adoc
index 32ef04267f..795ff3a904 100644
--- a/documentation/content/pl/books/handbook/partiv.adoc
+++ b/documentation/content/pl/books/handbook/partiv.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/usb-device-mode
next: books/handbook/serialcomms
showBookMenu: true
weight: 31
-path: "/books/handbook/"
+path: "/books/handbook/partiv/"
---
[[network-communication]]
diff --git a/documentation/content/pl/books/handbook/partv.adoc b/documentation/content/pl/books/handbook/partv.adoc
index f6589aa529..371b54b274 100644
--- a/documentation/content/pl/books/handbook/partv.adoc
+++ b/documentation/content/pl/books/handbook/partv.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/advanced-networking
next: books/handbook/mirrors
showBookMenu: true
weight: 38
-path: "/books/handbook/"
+path: "/books/handbook/partv/"
---
[[appendices]]
diff --git a/documentation/content/pl/books/handbook/pgpkeys/_index.adoc b/documentation/content/pl/books/handbook/pgpkeys/_index.adoc
index 02e81173d6..a0661cb9fd 100644
--- a/documentation/content/pl/books/handbook/pgpkeys/_index.adoc
+++ b/documentation/content/pl/books/handbook/pgpkeys/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/eresources
next: books/handbook/freebsd-glossary
showBookMenu: true
weight: 42
-path: "/books/handbook/"
+path: "/books/handbook/pgpkeys/"
---
[appendix]
@@ -59,9 +59,6 @@ W tym rozdziale zostało zebranych, dla naszej wygody, wiele kluczy oficerów cz
=== {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/pl/books/handbook/ports/_index.adoc b/documentation/content/pl/books/handbook/ports/_index.adoc
index fbaa8292b2..3b028163d9 100644
--- a/documentation/content/pl/books/handbook/ports/_index.adoc
+++ b/documentation/content/pl/books/handbook/ports/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/basics
next: books/handbook/x11
showBookMenu: true
weight: 6
-path: "/books/handbook/"
+path: "/books/handbook/ports/"
---
[[ports]]
diff --git a/documentation/content/pl/books/handbook/ppp-and-slip/_index.adoc b/documentation/content/pl/books/handbook/ppp-and-slip/_index.adoc
index 0a6bbb9ca7..4cfdd499ac 100644
--- a/documentation/content/pl/books/handbook/ppp-and-slip/_index.adoc
+++ b/documentation/content/pl/books/handbook/ppp-and-slip/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/serialcomms
next: books/handbook/mail
showBookMenu: true
weight: 33
-path: "/books/handbook/"
+path: "/books/handbook/ppp-and-slip/"
---
[[ppp-and-slip]]
diff --git a/documentation/content/pl/books/handbook/preface/_index.adoc b/documentation/content/pl/books/handbook/preface/_index.adoc
index e9f3ab06dd..cd0999ff95 100644
--- a/documentation/content/pl/books/handbook/preface/_index.adoc
+++ b/documentation/content/pl/books/handbook/preface/_index.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/
next: books/handbook/parti
showBookMenu: true
weight: 1
-path: "/books/handbook/"
+path: "/books/handbook/preface/"
---
[preface]
diff --git a/documentation/content/pl/books/handbook/printing/_index.adoc b/documentation/content/pl/books/handbook/printing/_index.adoc
index 4f6df4ee45..ee1231df6f 100644
--- a/documentation/content/pl/books/handbook/printing/_index.adoc
+++ b/documentation/content/pl/books/handbook/printing/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/kernelconfig
next: books/handbook/linuxemu
showBookMenu: true
weight: 12
-path: "/books/handbook/"
+path: "/books/handbook/printing/"
---
[[printing]]
@@ -523,11 +523,6 @@ Modify [.filename]#/etc/printcap# to use this new input filter:
Test the filter by printing PostScript(R) and plain text files.
-[[printing-lpd-filters-othersmart]]
-==== Other Smart Filters
-
-Writing a filter that detects many different types of input and formats them correctly is challenging. package:print/apsfilter[] from the Ports Collection is a smart "magic" filter that detects dozens of file types and automatically converts them to the `PDL` understood by the printer. See http://www.apsfilter.org[] for more details.
-
[[printing-lpd-queues]]
=== Multiple Queues
diff --git a/documentation/content/pl/books/handbook/security/_index.adoc b/documentation/content/pl/books/handbook/security/_index.adoc
index edda5738ce..50f6ce4690 100644
--- a/documentation/content/pl/books/handbook/security/_index.adoc
+++ b/documentation/content/pl/books/handbook/security/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/users
next: books/handbook/jails
showBookMenu: true
weight: 18
-path: "/books/handbook/"
+path: "/books/handbook/security/"
---
[[security]]
diff --git a/documentation/content/pl/books/handbook/serialcomms/_index.adoc b/documentation/content/pl/books/handbook/serialcomms/_index.adoc
index ce5a67a965..3dc01903ae 100644
--- a/documentation/content/pl/books/handbook/serialcomms/_index.adoc
+++ b/documentation/content/pl/books/handbook/serialcomms/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partiv
next: books/handbook/ppp-and-slip
showBookMenu: true
weight: 32
-path: "/books/handbook/"
+path: "/books/handbook/serialcomms/"
---
[[serialcomms]]
diff --git a/documentation/content/pl/books/handbook/usb-device-mode/_index.adoc b/documentation/content/pl/books/handbook/usb-device-mode/_index.adoc
index bc99a98087..c703b586bf 100644
--- a/documentation/content/pl/books/handbook/usb-device-mode/_index.adoc
+++ b/documentation/content/pl/books/handbook/usb-device-mode/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/dtrace
next: books/handbook/partiv
showBookMenu: true
weight: 30
-path: "/books/handbook/"
+path: "/books/handbook/usb-device-mode/"
---
[[usb-device-mode]]
diff --git a/documentation/content/pl/books/handbook/users/_index.adoc b/documentation/content/pl/books/handbook/users/_index.adoc
index 877d3bde61..4355c6ed67 100644
--- a/documentation/content/pl/books/handbook/users/_index.adoc
+++ b/documentation/content/pl/books/handbook/users/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/boot
next: books/handbook/security
showBookMenu: true
weight: 17
-path: "/books/handbook/"
+path: "/books/handbook/users/"
---
[[users]]
diff --git a/documentation/content/pl/books/handbook/virtualization/_index.adoc b/documentation/content/pl/books/handbook/virtualization/_index.adoc
index 61798915db..5fe8d55c19 100644
--- a/documentation/content/pl/books/handbook/virtualization/_index.adoc
+++ b/documentation/content/pl/books/handbook/virtualization/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/filesystems
next: books/handbook/l10n
showBookMenu: true
weight: 26
-path: "/books/handbook/"
+path: "/books/handbook/virtualization/"
---
[[virtualization]]
diff --git a/documentation/content/pl/books/handbook/x11/_index.adoc b/documentation/content/pl/books/handbook/x11/_index.adoc
index 75be9ec478..b45fb95f59 100644
--- a/documentation/content/pl/books/handbook/x11/_index.adoc
+++ b/documentation/content/pl/books/handbook/x11/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/ports
next: books/handbook/partii
showBookMenu: true
weight: 7
-path: "/books/handbook/"
+path: "/books/handbook/x11/"
---
[[x11]]
diff --git a/documentation/content/pl/books/handbook/zfs/_index.adoc b/documentation/content/pl/books/handbook/zfs/_index.adoc
index c86f7678fc..3ea8e02f4e 100644
--- a/documentation/content/pl/books/handbook/zfs/_index.adoc
+++ b/documentation/content/pl/books/handbook/zfs/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/geom
next: books/handbook/filesystems
showBookMenu: true
weight: 24
-path: "/books/handbook/"
+path: "/books/handbook/zfs/"
---
[[zfs]]
diff --git a/documentation/content/pt-br/articles/building-products/_index.adoc b/documentation/content/pt-br/articles/building-products/_index.adoc
index 54b4609885..6dc023b5e2 100644
--- a/documentation/content/pt-br/articles/building-products/_index.adoc
+++ b/documentation/content/pt-br/articles/building-products/_index.adoc
@@ -1,10 +1,14 @@
---
-title: Construindo Produtos com o FreeBSD
authors:
- - author: Joseph Koshy
+ -
+ author: 'Joseph Koshy'
email: jkoshy@FreeBSD.org
+description: 'Como o FreeBSD pode ajudá-lo a construir um produto melhor'
organizations:
- - organization: The FreeBSD Project
+ -
+ organization: 'The FreeBSD Project'
+tags: ["FreeBSD", "FreeBSD as base for your product"]
+title: 'Construindo Produtos com o FreeBSD'
trademarks: ["freebsd", "general"]
---
@@ -40,7 +44,7 @@ include::../../../../../shared/asciidoctor.adoc[]
endif::[]
[.abstract-title]
-Sumário
+Resumo
O projeto FreeBSD é um projeto voluntário e colaborativo de âmbito mundial, o qual desenvolve um sistema operacional de alta qualidade, capaz de ser utilizado em diferentes arquiteturas computacionais. O projeto FreeBSD distribui o código fonte do seu produto sob uma licença liberal, com a intenção de incentivar o uso de seu código. Colaborar com o projeto FreeBSD pode ajudar sua empresa a reduzir o tempo necessário para colocar um produto no mercado, a reduzir seus custos de engenharia e a melhorar qualidade de seus produtos.
@@ -55,7 +59,7 @@ toc::[]
Atualmente o FreeBSD é bem conhecido como um sistema operacional de alto desempenho para servidores. Ele está instalado em milhões de servidores web e em outros hosts conectados diretamente a internet em todo o mundo. O código do FreeBSD também é parte integrante de muitos produtos, que vão desde aparelhos como roteadores de rede, firewalls e dispositivos de armazenamento, até computadores pessoais. Partes do FreeBSD também têm sido utilizadas em softwares comerciais (consulte <<freebsd-intro>>).
-Neste artigo, vamos olhar para o link:https://www.FreeBSD.org/[projeto FreeBSD] como um recurso de engenharia de software --como um conjunto de blocos de construção e de processos os quais você pode utilizar para construir produtos.
+Neste artigo, vamos olhar para o link:https://www.FreeBSD.org/[projeto FreeBSD] como um recurso de engenharia de software, como um conjunto de blocos de construção e de processos, os quais você pode utilizar para construir produtos.
Embora o código fonte do FreeBSD seja distribuído gratuitamente ao público, para desfrutar plenamente dos benefícios do trabalho do projeto, as organizações precisam _colaborar_ com o mesmo. Nas seções subsequentes do presente artigo discutiremos formas eficazes de colaborar com o projeto, bem como os perigos que precisam ser evitados ao fazê-lo.
@@ -66,7 +70,7 @@ Embora o código fonte do FreeBSD seja distribuído gratuitamente ao público, p
Este documento tem como público alvo os seguintes grupos de pessoas:
* Tomadores de decisão em empresas que estejam em busca de meios para melhorar a qualidade de seus produtos, de reduzir o tempo necessário para lançá-los no mercado e de reduzir seus custos de engenharia no longo prazo.
-* Consultores de tecnologia procurando as melhores práticas para alavancar projetos de "código aberto".
+* Consultores de tecnologia procurando melhores práticas em alavancar o código aberto.
* Observadores da indústria interessados em compreender a dinâmica dos projetos de código aberto.
* Desenvolvedores de software que utilizam o FreeBSD e que buscam formas de contribuir com o projeto.
@@ -78,15 +82,15 @@ Após a leitura deste artigo, você deve ter:
* Uma visão geral das tecnologias disponíveis no projeto.
* Uma melhor compreensão do modelo de desenvolvimento adotado pelo Projeto FreeBSD e dos processos de engenharia envolvidos no lançamento de uma nova versão do sistema.
* Consciência dos canais de comunicação utilizados pelo projeto e do nível de transparência que você pode esperar.
-* Consciência das melhores formas de se trabalhar com o projeto--a melhor forma de reduzir os custos de engenharia, de reduzir o tempo necessário para levar seu produto ao mercado, de gerir vulnerabilidades de segurança, e de preservar a compatibilidade futura com o seu produto a medida que o Projeto FreeBSD evolui.
+* Consciência das melhores formas de trabalhar com o projeto - a melhor forma de reduzir os custos de engenharia, de reduzir o tempo necessário para levar seu produto ao mercado, de gerir vulnerabilidades de segurança e preservar a compatibilidade futura com seu produto à medida que o projeto FreeBSD evolui.
=== Estrutura do Artigo
O restante deste artigo está estruturado da seguinte forma:
-* A <<freebsd-intro>> apresenta o projeto FreeBSD, explora sua estrutura organizacional, as principais tecnologias e processos de engenharia envolvidos no lançamento de uma nova versão do sistema.
-* A <<freebsd-collaboration>> descreve formas de colaborar com o Projeto FreeBSD. Esta seção também aborda as armadilhas que são geralmente encontradas por empresas que trabalham com projetos voluntários como o FreeBSD.
-* A <<conclusion>> conclui o artigo.
+* <<freebsd-intro>> introduz o projeto FreeBSD, explora a estrutura organizacional, tecnologias principais e processos de engenharia de releases.
+* <<freebsd-collaboration>> descreve meios de colaboração para com o projeto FreeBSD. Examina armadilhas comuns encontrado por empresas trabalhando com projetos voluntários como o FreeBSD.
+* <<conclusion>> conclui.
[[freebsd-intro]]
== O FreeBSD como um conjunto de blocos de construção
@@ -105,68 +109,68 @@ O <<GoldGab2005>> analisa em maior profundidade os motivos comerciais para se ut
Aqui estão alguns exemplos de como as empresas estão utilizando o FreeBSD:
* Como um provedor (upstream source) de códigos testados para bibliotecas e utilitários.
-+
-Sendo o "downstream" do projeto, as organizações se aproveitam das novas funcionalidades, das correções de bugs e dos testes que o código fonte do projeto FreeBSD recebe.
++
+Por estar "downstream" do projeto, as organizações aproveitam os novos recursos, correções de bugs e testes que o código upstream recebe.
* Como sistema operacional integrado (por exemplo, em um roteador OEM e ou em um dispositivo de firewall). Neste modelo, as empresas utilizam uma versão customizada do kernel e do conjunto de aplicativos do FreeBSD, juntamente com uma camada proprietária de gestão para os seus dispositivos. Os fabricantes de equipamentos originais (OEMs) se beneficiam da adição por parte do FreeBSD de suporte a novos componentes de hardware, bem como se beneficia dos testes que o sistema base recebe.
-+
++
O FreeBSD é distribuído com um ambiente de desenvolvimento auto-hospedado o qual permite a fácil criação de tais configurações.
* Como um ambiente Unix compatível para as funções de gerenciamento em dispositivos de armazenamento high-end e em dispositivos de rede, executando em uma lâmina separada "blade".
-+
++
O FreeBSD fornece ferramentas para a criação de imagens do sistema operacional dedicadas a executar uma função específica. Sua implementação da API unix BSD é madura e testada. O FreeBSD também pode proporcionar um ambiente de desenvolvimento cruzado estável para os outros componentes de dispositivos topo de linha.
-* Como um veículo para obter suporte e testes amplos de uma equipe mundial de desenvolvedores para a sua "propriedade intelectual" não-crítica.
-+
-Neste modelo, as organizações contribuem com frameworks de infra-estrutura úteis ao projeto FreeBSD (por exemplo, veja o man:netgraph[3]). A ampla exposição que o código obtém ajuda na rápida identificação de bugs e de problemas de desempenho. O envolvimento de desenvolvedores de alta qualidade também resulta no desenvolvimento de extensões úteis para a infra-estrutura do sistema, e das quais a empresa que está contribuindo com o projeto também se beneficia.
-* Como um ambiente de desenvolvimento apoiando desenvolvimento cruzado para sistemas operacionais embarcados como http://www.rtems.com/[RTEMS] e o http://ecos.sourceware.org/[eCOS].
-+
-Existem muitos ambientes de desenvolvimento completos na forte coleção de mais de 24,000 aplicativos portados e empacotados para o FreeBSD.
+* Como um meio de obter testes abrangentes e suporte de uma equipe mundial de desenvolvedores para "propriedade intelectual" não crítica.
++
+Neste modelo, as organizações contribuem com estruturas infraestruturais úteis para o projeto FreeBSD (por exemplo, veja man:netgraph[3]). A ampla exposição que o código recebe ajuda a identificar rapidamente problemas de desempenho e bugs. O envolvimento de desenvolvedores de primeira linha também leva a extensões úteis à infraestrutura das quais a organização contribuinte também se beneficia.
+* Como um ambiente de desenvolvimento que suporta desenvolvimento cruzado para sistemas operacionais embarcados, como http://www.rtems.com/[RTEMS] e http://ecos.sourceware.org/[eCOS].
++
+Há muitos ambientes de desenvolvimento completos na coleção de {numports} aplicativos portados e empacotados com o FreeBSD.
* Como forma de suportar uma API estilo Unix em um sistema operacional que de outro modo seria proprietário, aumentando a sua palatabilidade para os desenvolvedores de aplicativos.
-+
-Aqui as partes do kernel do FreeBSD e as aplicações são "portadas" para serem executadas juntamente com outras tarefas no sistema operacional proprietário. A disponibilidade de uma implementação estável e bem testada da API Unix(TM) pode reduzir o esforço necessário para portar aplicações populares para um sistema operacional proprietário. Como o FreeBSD é distribuído acompanhado de uma documentação de alta qualidade sobre a sua estrutura interna, e possui processos eficazes de engenharia para gerenciamento de vulnerabilidades e para lançamento de novas versões, os custos para mantê-lo atualizado são baixos.
++
+Aqui, partes do kernel do FreeBSD e dos programas de aplicação são "portadas" para serem executadas junto com outras tarefas no sistema operacional proprietário. A disponibilidade de uma implementação estável e bem testada da API Unix(TM) pode reduzir o esforço necessário para portar aplicativos populares para o sistema operacional proprietário. Como o FreeBSD é fornecido com documentação de alta qualidade para seus componentes internos e possui processos eficazes de gerenciamento de vulnerabilidades e engenharia de release, os custos para se manter atualizado são mantidos baixos.
[[freebsd-technologies]]
=== Tecnologias
Existe um grande número de tecnologias suportadas pelo projeto FreeBSD. Abaixo você encontra uma lista com alguma delas:
-* Um sistema completo que pode compilar a si mesmo para link:https://www.FreeBSD.org/platforms/[muitas arquiteturas:]
+* Um sistema completo que pode hospedar-se cruzadamente para link:https://www.FreeBSD.org/platforms/[muitas arquiteturas:]
* Um kernel modular capaz de multiprocessamento simétrico, com módulos de kernel carregáveis e um sistema de configuração flexível e fácil de usar.
-* Suporta a emulação de binários do Linux(TM) e do SVR4 com velocidades próximas as que você obtém executando os aplicativos de forma nativa. Suporte para os binários dos drivers de rede do Windows(TM) (DIS).
-* Bibliotecas para muitas tarefas de programação: arquivos, suporte a FTP e HTTP, suporte a threads, além de um ambiente completo de programação POSIX(TM).
-* Funcionalidades avançadas de segurança: Controle de Acesso Obrigatório (man:mac[9]), jails (man:jail[2]), ACLs, e suporte no kernel a dispositivos de criptografia.
+* Suporte para emulação de binários Linux(TM) e SVR4 em velocidades próximas às da máquina. Suporte para drivers de rede binários do Windows(TM) (NDIS).
+* Bibliotecas para muitas tarefas de programação: arquivamento, suporte a FTP e HTTP, suporte a threads, além de um ambiente de programação completo semelhante ao POSIX(TM).
+* Recursos de segurança: Controle de Acesso Obrigatório (man:mac[9]), jails (man:jail[2]), ACLs e suporte a dispositivos criptográficos no kernel.
* Funcionalidades avançadas de rede: firewalls, gerenciamento de QoS, rede TCP/IP de alta performance com suporte a muitos recursos avançados.
-+
-O framework Netgraph (man:netgraph[4]) presente no kernel do FreeBSD, permite que os módulos de rede possam ser conectados entre si de formas flexíveis.
-* Suporte para tecnologias avançadas de armazenamento Fibre Channel, SCSI, RAID por software e hardware, ATA e SATA.
-+
-O FreeBSD suporta um grande numero de sistemas de arquivos, e o seu sistema de arquivos nativo UFS2 suporta soft updates, snapshots e sistemas de arquivos de tamanho muito grandes (até 16 TB por sistema de arquivos) <<McKu1999>>.
-+
-O framework GEOM GEOM (man:geom[4]) presente no kernel do FreeBSD permite que módulos de armazenamento sejam compostos de forma flexível.
-* Mais de 24,000 aplicativos portados, tanto comerciais quanto de código aberto, gerenciados através da coleção de ports do FreeBSD.
++
+O framework Netgraph (man:netgraph[4]) no kernel do FreeBSD permite que módulos de rede do kernel sejam conectados de maneiras flexíveis.
+* Suporte para tecnologias de armazenamento: Fibre Channel, SCSI, RAID de software e hardware, ATA e SATA.
++
+O FreeBSD suporta vários sistemas de arquivos, e seu sistema de arquivos nativo UFS2 suporta "soft updates", snapshots e tamanhos de sistema de arquivos muito grandes (16 TB por sistema de arquivos) <<McKu1999>>.
++
+O framework GEOM (man:geom[4]) no kernel do FreeBSD permite que módulos de armazenamento do kernel sejam compostos de maneiras flexíveis.
+* Mais de {numports} aplicativos portados, tanto comerciais quanto de código aberto, gerenciados por meio da coleção de ports do FreeBSD.
=== Estrutura Organizacional
A estrutura organizacional do FreeBSD não é hierárquica.
-Existem basicamente dois tipos de colaboradores no projeto FreeBSD, os usuários em geral e os desenvolvedores com acesso de escrita (conhecidos como _committers_ no jargão) ao repositório de código fonte.
+Existem basicamente dois tipos de contribuidores para o FreeBSD: usuários gerais do FreeBSD e desenvolvedores com acesso de escrita (conhecidos como _committers_ na gíria) à base de código-fonte.
Existem muitos milhares de colaboradores no primeiro grupo, a grande maioria das contribuições para o FreeBSD vêm de indivíduos desse grupo; A permissão de commit (acesso de escrita) no repositório é concedida a pessoas que contribuem de forma consistente para o projeto. O direito de commit vem acompanhado de responsabilidades adicionais, e para facilitar o aprendizado das mesmas, um mentor é atribuído a todos os novos committers.
.Organização do FreeBSD
image::freebsd-organization.png[]
-A resolução de conflitos é realizada por um "Core Team" de 9 pessoas, o qual é eleito a partir do grupo de committers.
+A resolução de conflitos é realizada por uma equipe central ("Core Team") de nove membros que é eleita a partir do grupo de committers.
-O FreeBSD não tem committers "corporativo". Os committers são obrigados a assumir de forma individual a responsabilidade pelas mudanças que introduzem no código. O extref:{committers-guide}[FreeBSD Committer's guide]<<ComGuide>> documenta as regras e responsabilidades que se aplicam aos committers.
+O FreeBSD não tem committers "corporativos". Cada committer individual é responsável pelas alterações que introduz no código. O guia do committer do FreeBSD (extref:{committers-guide}[FreeBSD Committer's guide]) <<ComGuide>> documenta as regras e responsabilidades dos committers.
-O modelo do projeto FreeBSD é examinado em detalhes no <<Nik2005>>.
+O modelo de projeto do FreeBSD é examinado em detalhes em <<Nik2005>>.
=== Processos de Engenharia para liberação de novas versões do FreeBSD
-O processo de engenharia para a liberação de uma nova versão do FreeBSD desempenha um papel importante para assegurar que as suas novas versões sejam de alta qualidade. Em qualquer ponto do tempo, os voluntários do FreeBSD suportam múltiplas versões do código sistema (<<fig-freebsd-branches, Release Branches do FreeBSD>>):
+Os processos de engenharia de release do FreeBSD desempenham um papel importante na garantia de que as versões lançadas sejam de alta qualidade. Em qualquer momento, os voluntários do FreeBSD suportam várias linhas de código (<<fig-freebsd-branches, FreeBSD Release Branches>>):
-* As novas funcionalidades e os códigos disruptivos entram na branch de desenvolvimento, também conhecido como branch _-CURRENT_.
-* A branch _-STABLE_ contém linhas de código que são ramificadas a partir do HEAD em intervalos regulares. Apenas código devidamente testado é permitido na branch -STABLE. Novas funcionalidades são permitidas após terem sido testadas e estabilizadas na branch -CURRENT.
-* A branch _-RELEASE_ é mantido pela equipe de segurança do FreeBSD. Somente correções de bugs críticos são permitidos na branch -RELEASE.
+* Novos recursos e código disruptivo entram na branch de desenvolvimento, também conhecida como branch _-CURRENT_.
+* As branch _-STABLE_ são linhas de código que são ramificadas do HEAD em intervalos regulares. Somente o código testado é permitido em uma branch _-STABLE_. Novos recursos são permitidos apenas depois de terem sido testados e estabilizados na branch _-CURRENT_.
+* As branchs _-RELEASE_ são mantidas pela equipe de segurança do FreeBSD. Somente correções de bugs para problemas críticos são permitidas nas branchs _-RELEASE_.
[[fig-freebsd-branches]]
.Release Branches do FreeBSD
@@ -174,16 +178,16 @@ image::freebsd-branches.png[]
As linhas de código são mantidas vivas enquanto houver interesse dos usuários e dos desenvolvedores nelas.
-As arquiteturas de máquina estão agrupadas em "tiers"; As arquiteturas _Tier 1_ são totalmente suportadas pelas equipes de engenharia de lançamento e de segurança, as arquiteturas _Tier 2_ são suportadas em regime de melhores esforços, e as arquiteturas experimentais compreendem o _Tier 3_. A lista das extref:{committers-guide}[arquiteturas suportadas, archs] é parte da coleção de documentos do FreeBSD.
+As arquiteturas de máquinas são agrupadas em "níveis"; as arquiteturas _Tier 1_ são totalmente suportadas pelas equipes de engenharia de release e segurança do projeto, as arquiteturas _Tier 2_ são suportadas com base no melhor esforço, e as arquiteturas experimentais compõem o _Tier 3_. A lista de extref:{committers-guide}[arquiteturas suportadas, archs] faz parte da coleção de documentação do FreeBSD.
-A equipe de engenharia de lançamentos publica um link:https://www.FreeBSD.org/releng/[road map] para as versões futuras do FreeBSD no web site do projeto. As datas indicadas no road map não são prazos; As novas versões do FreeBSD são liberadas apenas quando o seu código e documentação estão prontos.
+A equipe de engenharia de release publica um link:https://www.FreeBSD.org/releng/[road map] para futuros lançamentos do FreeBSD no site do projeto. As datas estabelecidas no roteiro não são prazos finais; o FreeBSD é lançado quando seu código e documentação estão prontos.
-O processo de engenharia para a liberação de novas versões do FreeBSD é descrito em detalhes no <<RelEngDoc>>.
+Os processos de engenharia de release do FreeBSD são descritos em <<RelEngDoc>>.
[[freebsd-collaboration]]
== Colaborando com o FreeBSD
-Projetos open-source como o FreeBSD oferecem códigos finalizados de altíssima qualidade <<Cov2005>>. Estudos anteriores examinaram o efeito da disponibilidade do código fonte no desenvolvimento de software <<Com2004>>.
+Projetos open-source como o FreeBSD oferecem código final de alta qualidade.
Embora o acesso a um código fonte de qualidade possa reduzir o custo inicial de desenvolvimento, a longo prazo, os custos com o gerenciamento de mudanças começam a dominar. A medida que os ambientes computacionais mudam ao longo dos anos e novas vulnerabilidades de segurança são descobertas, o seu produto também precisará mudar e se adaptar. O uso de código open-source não deve ser encarado como uma atividade pontual, mas sim como um __processo contínuo__. Os melhores projetos para se colaborar são os que estão __vivos__, ou seja, aqueles com uma comunidade ativa, que tenha objetivos claros e que possua um estilo de trabalho transparente.
@@ -193,28 +197,28 @@ Embora o acesso a um código fonte de qualidade possa reduzir o custo inicial de
** Desenvolver um sistema operacional de alta qualidade para o hardware de computadores populares, e,
** Tornar o nosso trabalho disponível para todos sob uma licença liberal.
-* O FreeBSD desfruta de uma cultura aberta e transparente de trabalho. Quase todas as discussões no projeto ocorrem por e-mail, em http://lists.FreeBSD.org/mailman/listinfo[listas publicas de discussão] que também são arquivadas para a posteridade. As políticas do projeto são link:https://www.FreeBSD.org/internal/policies/[documentadas] e mantidas sob controle de revisão. A participação no projeto é aberta a todos.
+* O FreeBSD possui uma cultura de trabalho aberta e transparente. Quase todas as discussões no projeto ocorrem por e-mail, em link:https://lists.freebsd.org/[listas de discussão públicas] que também são arquivadas para a posteridade. As políticas do projeto são link:https://www.FreeBSD.org/internal/policies/[documentadas] e mantidas sob controle de revisão. A participação no projeto está aberta a todos.
[[freebsd-org]]
=== Compreendendo a cultura do FreeBSD
Para ser capaz de trabalhar de forma eficaz com o projeto FreeBSD, você precisa entender a cultura do projeto.
-As regras que regem a operação de um projeto voluntário são diferentes das que regem a operação de uma empresa com fins lucrativos. Um erro comum que as empresas cometem ao se aventurar no mundo open-source é o de desvalorizar essas diferenças.
+As regras que regem a operação de um projeto voluntário são diferentes das que regem a operação de uma empresa com fins lucrativos. Um erro comum que as empresas cometem ao se aventurar no mundo open-source é o de subestimar essas diferenças.
-*Motivação.* A maioria das contribuições feitas para o FreeBSD são feitas voluntariamente, sem que nenhuma recompensa financeira esteja envolvida. Os fatores que motivam as pessoas são complexos, e vão desde o puro altruísmo até o interesse comum em resolver algum tipo de problema que o FreeBSD esteja tentando resolver. Neste tipo de ambiente, a "elegância jamais é opcional"<<Nor1993>>.
+*Motivação.* A maioria das contribuições para o FreeBSD é feita voluntariamente, sem a entrada de recompensas monetárias. Os fatores que motivam os indivíduos são complexos, variando desde o altruísmo até o interesse em resolver os tipos de problemas que o FreeBSD tenta resolver. Nesse ambiente, "a elegância nunca é opcional" <<Nor1993>>.
-*Visão de Longo Prazo.* O FreeBSD tem raízes de quase 20 anos para com o trabalho do Grupo de Pesquisa de Ciências da Computação da Universidade da Califórnia, Berkeley.footnote:[O repositório de códigos do FreeBSD contem a história do projeto desde a sua concepção, e existem CDROMs disponíveis que contém código fonte anterior ao CSRG.] Alguns dos desenvolvedores originais do CSRG permanecem associados com o projeto.
+*A Visão de Longo Prazo.* O FreeBSD remonta quase vinte anos ao trabalho do Computer Science Research Group da Universidade da Califórnia em Berkeley. footnote:[O repositório de código-fonte do FreeBSD contém um histórico do projeto desde o seu início, e há CDs disponíveis que contêm código anterior do CSRG.] Vários dos desenvolvedores originais do CSRG ainda estão associados ao projeto.
-O projeto valoriza perspectivas de longo prazo <<Nor2001>>. Uma sigla encontrada com frequência no projeto DTRT, a qual significa "Faça a Coisa Certa".
+O projeto valoriza perspectivas de longo prazo <<Nor2001>>. Um acrônimo frequente encontrado no projeto é DTRT, que significa "Faça a Coisa Certa".
-*Processo de Desenvolvimento.* Programas de computador são ferramentas de comunicacão: em um nível os programadores comunicam as suas intenções usando uma notação precisa para uma ferramenta (um compilador) que traduz as suas instruções para um código executável. Em outro nível, a mesma notação é usada para a comunicação das intenções entre dois programadores.
+Os programas de computador são ferramentas de comunicação: em um nível, os programadores comunicam suas intenções usando uma notação precisa para uma ferramenta (um compilador) que traduz suas instruções para código executável.
+Em outro nível, a mesma notação é usada para comunicação de intenção entre dois programadores.
-Especificações formais e documentos de design raramente são utilizados no projeto. Código claro e bem escrito, acompanhado de logs bem escritos para as alterações das (<<fig-change-log, Um exemplo de entrada no log de alteração>>) são usados em seu lugar. O desenvolvimento do FreeBSD acontece por "consenso áspero e por código sendo executado"<<Carp1996>>.
+Especificações formais e documentos de design raramente são utilizados no projeto. Em seu lugar, é usado um código claro e bem escrito e registros de alterações bem escritos (<<fig-change-log, Um exemplo de entrada de registro de alterações>>). O desenvolvimento do FreeBSD acontece por meio de "consenso geral e código em execução" (tradução livre de "rough consensus and running code"<<Carp1996>>).
[.programlisting]
....
-
r151864 | bde | 2005-10-29 09:34:50 -0700 (Sat, 29 Oct 2005) | 13 lines
Changed paths:
M /head/lib/msun/src/e_rem_pio2f.c
@@ -232,30 +236,30 @@ double version.
This speeds up arg reduction by a factor of 2 for |x| between 3*pi/4 and
2^7*pi/4, and by a factor of 7 for |x| between 2^7*pi/4 and 2^19*pi/4.
....
-.Um exemplo de entrada no log de alteração [[fig-change-log]]
+.Um exemplo de entrada de log de mudanças [[fig-change-log]]
-A comunicação entre os programadores é reforçada pelo uso de um man:style[9] padrão de codificação, comum entre eles.
+Comunicação entre programadores é melhorada pelo uso de um padrão de codificação comum (man:style[9]).
-*Canais de Comunicação.* Os colaboradores do FreeBSD estão espalhados por todo o mundo. O email (e em menor extensão, o IRC) é o meio de comunicação preferido no projeto.
+*Canais de Comunicação.* Os colaboradores do FreeBSD estão espalhados pelo mundo.
+O e-mail (e, em menor medida, o IRC) é o meio de comunicação preferido no projeto.
=== Melhores práticas para colaborar com o projeto FreeBSD
Agora iremos examinar algumas das melhores práticas para se fazer um melhor uso do FreeBSD no desenvolvimento de produtos.
Se planeje para o longo prazo::
-Implante processos que o ajudem a monitorar o desenvolvimento do FreeBSD. Por exemplo:
+Criar processos que auxiliem no acompanhamento do desenvolvimento do FreeBSD. Por exemplo:
+
-*Acompanhe o código fonte do FreeBSD.* O projeto facilita o espelhamento do seu repositório SVN usando extref:{committers-guide}[svnsync, svn-advanced-use-setting-up-svnsync]. Ter o histórico completo do código fonte é útil quando se está debugando problemas complexos e oferece informações valiosas sobre as intenções dos desenvolvedores originais. Utilize um sistema de controle de código que lhe permita mesclar facilmente as alterações entre o código original do FreeBSD e o seu próprio código.
+*Acompanhar o código-fonte do FreeBSD.* O projeto facilita a criação de um espelho do seu repositório SVN usando o extref:{committers-guide}[svnsync, svn-advanced-use-setting-up-svnsync]. Ter todo o histórico do código-fonte é útil para depurar problemas complexos e oferece informações valiosas sobre as intenções dos desenvolvedores originais. Use um sistema de controle de código capaz que permita mesclar facilmente as alterações entre o código-base upstream do FreeBSD e o seu próprio código interno.
+
-A <<fig-svn-blame, Código fonte exibindo a listagem de anotações gerada utilizando o `svn blame`>> mostra as anotações em uma parte do arquivo referenciado pelo log de alterações da <<fig-change-log, Um exemplo de entrada no log de alteração>>. A ascendência de cada linha de código é claramente visível. Listagens com as anotações mostrando a história de cada arquivo que faz parte do FreeBSD estão https://svnweb.freebsd.org/[disponíveis na web].
+<<fig-svn-blame, Um arquivo de origem anotado gerado usando `svn blame`>> mostra uma parte de um arquivo de listagem anotado do arquivo referenciado pelo registro de alterações em <<fig-change-log, Um exemplo de registro de alterações>>. A ancestralidade de cada linha do código-fonte é claramente visível. Listagens anotadas mostrando a história de cada arquivo que faz parte do FreeBSD estão disponíveis https://svnweb.freebsd.org/[no website].
+
[.programlisting]
....
-
#REV #WHO #DATE #TEXT
176410 bde 2008-02-19 07:42:46 -0800 (Tue, 19 Feb 2008) #include <sys/cdefs.h>
-176410 bde 2008-02-19 07:42:46 -0800 (Tue, 19 Feb 2008) __FBSDID("$FreeBSD: head/pt_BR.ISO8859-1/articles/building-products/article.xml 52185 2018-08-28 03:24:45Z dbaio $");
+176410 bde 2008-02-19 07:42:46 -0800 (Tue, 19 Feb 2008) __FBSDID("$FreeBSD$");
2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994)
2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994) /* __ieee754_rem_pio2f(x,y)
8870 rgrimes 1995-05-29 22:51:47 -0700 (Mon, 29 May 1995) *
@@ -268,66 +272,62 @@ A <<fig-svn-blame, Código fonte exibindo a listagem de anotações gerada utili
176465 bde 2008-02-22 07:55:14 -0800 (Fri, 22 Feb 2008)
2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994) #include "math.h"
....
-.Código fonte exibindo a listagem de anotações gerada utilizando o `svn blame` [[fig-svn-blame]]
+.Uma listagem de origem anotada gerada usando `svn blame` [[fig-svn-blame]]
+
-*Nomeie um guardião.* Nomeie um _guardião_ para monitorar o desenvolvimento do FreeBSD, para manter-se atento a mudanças que poderiam potencialmente afetar os seus produtos.
+*Use um gatekeeper.* Nomeie um _gatekeeper_ para monitorar o desenvolvimento do FreeBSD, para ficar de olho em mudanças que possam potencialmente impactar seus produtos.
+
-*Comunique os erros que encontrar de volta para o projeto.* Se você encontrar um bug no código do FreeBSD que você está utilizando, envie um https://www.FreeBSD.org/support/bugreports/[bug report]. Este procedimento simples irá ajudar a garantir que você não precisará corrigir o erro novamente da próxima vez que precisar importar novamente do código base do FreeBSD.
+*Relate bugs upstream.* Se você notar algum bug no código do FreeBSD que está usando, envie um https://www.FreeBSD.org/support/bugreports/[relatório de bug]. Esse passo ajuda a garantir que você não precise corrigir o bug na próxima vez que fizer uma atualização de código do upstream.
Se alavanque nos esforços de engenharia do FreeBSD para lançamento de novas versões::
-Utilize código da branch de desenvolvimento -STABLE do FreeBSD. Este branch de desenvolvimento é formalmente suportado pelas equipes de engenharia de lançamento e de segurança, e é formada apenas por código testado.
+Utilize código da branch de desenvolvimento -STABLE do FreeBSD. Este branch de desenvolvimento é formalmente suportado pelas equipes de engenharia de release e de segurança, e é formada apenas por código testado.
Doe código para reduzir seus custos::
Uma parte significativa dos custos relacionados ao desenvolvimento de um produto é o de realizar a sua manutenção. Ao doar partes não criticas do seu código para o projeto, você se beneficia por ter o seu código exposto de uma forma ampla, exposição que ele não teria de outra forma. Esta exposição por sua vez leva eliminação de um maior numero de bugs e de vulnerabilidades de segurança, e permite que anomalias de desempenho sejam identificadas e corrigidas.
Obtenha suporte efetivo::
-Para produtos com prazos apertados, é recomendado que você contrate o suporte ou consultoria de um desenvolvedor ou empresa com experiência em FreeBSD. A http://lists.FreeBSD.org/mailman/listinfo/freebsd-jobs[lista de discussão sobre empregos relacionados ao FreeBSD] é um canal de comunicação muito útil para se encontrar talentos. O projeto FreeBSD mantém uma link:https://www.FreeBSD.org/commercial/consult_bycat/[galeria de consultores e empresas de consultoria] que trabalham com FreeBSD. O http://www.bsdcertification.org/[Grupo de Certificação BSD] oferece certificação para todos os principais sistemas operacionais derivados do BSD.
+Para produtos com prazos apertados, é recomendado contratar ou entrar em um acordo de consultoria com um desenvolvedor ou empresa com experiência em FreeBSD. O {freebsd-jobs} é um canal de comunicação útil para encontrar talentos. O projeto FreeBSD mantém uma link:https://www.FreeBSD.org/commercial/consult_bycat/[galeria de consultores e empresas de consultoria] que realizam trabalhos em FreeBSD. O http://www.bsdcertification.org/[Grupo de Certificação BSD] oferece certificação para todos os principais sistemas operacionais derivados do BSD.
+
-Para as necessidades menos importantes, você pode pedir ajuda nas http://lists.FreeBSD.org/mailman/listinfo[listas de discussão do projeto]. Um guia útil para seguir quando precisar pedir está listado em <<Ray2004>>.
+Para necessidades menos críticas, você pode pedir ajuda nas link:https://lists.freebsd.org/[listas de discussão do projeto]. Um guia útil a seguir ao pedir ajuda é dado em <<Ray2004>>.
Divulgue o seu envolvimento::
Você não é obrigado a divulgar que faz uso do FreeBSD, mas ao fazê-lo você estará ajudando ambos os esforços, o seu e o do projeto.
+
Dar visibilidade para a comunidade FreeBSD de que a sua empresa utiliza o sistema ajuda a melhorar as suas chances de atrair talentos de alta qualidade. Quanto maior for a lista de organizações que apoiam o FreeBSD maior será a presença do sistema na cabeça (mind share) dos desenvolvedores. Ao contribuir para aumentar o numero de desenvolvedores interessados no FreeBSD, você estará gerando uma base saudável para o seu futuro.
Suporte os desenvolvedores do FreeBSD::
-Às vezes, o caminho mais direto para ver uma funcionalidade que você deseja implementada no FreeBSD é suportar um desenvolvedor que já esteja olhando um problema relacionado. A ajuda pode variar de uma doação de hardware até uma assistência financeira direta. Em alguns países, as doações para o projeto FreeBSD usufruem de benefícios fiscais. O projeto possui umlink:https://www.FreeBSD.org/donations/[canal de comunicação dedicado] para assuntos relacionados a doações e para ajudar os doadores. O projeto também mantém uma página web na qual os desenvolvedores podem link:https://www.FreeBSD.org/donations/wantlist/[listar suas necessidades].
+Às vezes, a maneira mais direta de obter um recurso desejado no FreeBSD é apoiar um desenvolvedor que já está trabalhando em um problema relacionado. A ajuda pode variar desde doações de hardware até assistência financeira direta. Em alguns países, as doações ao projeto FreeBSD são isentas de impostos. O projeto possui uma link:https://www.FreeBSD.org/donations/[área de doações] dedicada para ajudar doadores. O projeto também mantém uma página da web onde os desenvolvedores link:https://www.FreeBSD.org/donations/wantlist/[listam suas necessidades].
+
-Por uma política do projeto, o FreeBSD extref:{contributors}[reconhece] todas as contribuições recebidas em seu site web.
+Como política, o projeto FreeBSD extref:{contributors}[reconhece] todas as contribuições recebidas em seu site.
[[conclusion]]
== Conclusão
O Objetivo do projeto FreeBSD é criar e distribuir o código fonte de um sistema operacional de alta qualidade. Ao trabalhar com o projeto FreeBSD você pode reduzir os seus custos de desenvolvimento e melhorar o tempo necessário para lançar seus novos produtos no mercado em vários cenários de desenvolvimento de produtos.
-Foram examinadas as características do FreeBSD que o tornam uma excelente opção na estratégia de produto de uma organização. Em seguida, abordamos os aspectos predominantes da cultura do projeto e examinamos formas eficazes de interagir com os seus desenvolvedores. O artigo finaliza com uma lista das melhores práticas que podem ajudar na colaboração da iniciativa privada com o projeto FreeBSD.
+Nós examinamos as características do projeto FreeBSD que o tornam uma excelente escolha para fazer parte da estratégia de produtos de uma organização. Em seguida, examinamos a cultura predominante do projeto e examinamos maneiras eficazes de interagir com seus desenvolvedores. O artigo concluiu com uma lista de melhores práticas que podem ajudar as organizações a colaborar com o projeto.
:sectnums!:
[bibliography]
-== Bibliography
-
-[[Carp1996]] [Carp1996] http://www.ietf.org/rfc/rfc1958.txt[The Architectural Principles of the Internet] B. Carpenter. The Internet Architecture Board.The Internet Architecture Board. Copyright(R)1996.
-
-[[Com2004]] [Com2004] http://csdl.computer.org/comp/mags/so/2004/01/s1028.pdf[How is Open-Source Affecting Software Development?] Diomidis Spinellis. Clemens Szyperski.IEEE Computer Copyright(R)Jan/Feb 2004. IEEE Computer Society.
+== Bibliografia
-[[ComGuide]] [ComGuide] extref:{committers-guide}[Committer's Guide]The FreeBSD Project. Copyright(R)2005.
+[[Carp1996]] [Carp1996] http://www.ietf.org/rfc/rfc1958.txt[Os Princípios Arquitetônicos da Internet]. The Internet Architecture Board. Copyright(R) 1996.
-[[Cov2005]] [Cov2005] http://www.coverity.com/news/nf_news_06_27_05_story_9.html[Coverity study on kernel security holes in Linux and FreeBSD]Coverity Inc.. Copyright(R)2005.
+[[ComGuide]] [ComGuide] extref:{committers-guide}[Guia do Comitter] O Projeto FreeBSD. Direitos Autorais(R) 2005.
-[[GoldGab2005]] [GoldGab2005] http://dreamsongs.com/IHE/IHE.html[Innovation Happens Elsewhere: Open Source as Business Strategy] Ron Goldman. Richard Gabriel. Copyright(R)2005. Morgan-Kaufmann.
+[[GoldGab2005]] [GoldGab2005] http://dreamsongs.com/IHE/IHE.html[Inovação Acontece em Outros Lugares: Código Aberto como Estratégia de Negócios] Ron Goldman. Richard Gabriel. Copyright(R) 2005. Morgan-Kaufmann.
-[[Hub1994]] [Hub1994] extref:{contributing}[Contributing to the FreeBSD Project] Jordan Hubbard. Copyright(R)1994—2005. The FreeBSD Project.
+[[Hub1994]] [Hub1994] extref:{contributing}[Contribuindo para o Projeto FreeBSD] Jordan Hubbard. Copyright(R) 1994-2005. The FreeBSD Project.
-[[McKu1999]] [McKu1999] http://www.usenix.org/publications/library/proceedings/usenix99/mckusick.html[Soft Updates: A Technique for Eliminating Most Synchronous Writes in the Fast Filesystem] Kirk McKusick. Gregory Ganger. Copyright(R)1999.
+[[McKu1999]] [McKu1999] http://www.usenix.org/publications/library/proceedings/usenix99/mckusick.html[Soft Updates: Uma técnica para eliminar a maioria das gravações síncronas no sistema de arquivos rápido] Kirk McKusick. Gregory Ganger. Copyright(R) 1999.
-[[McKu1999-1]] [McKu1999-1] http://www.oreilly.com/catalog/opensources/book/kirkmck.html[Twenty Years of Berkeley Unix: From AT&T-Owned to Freely Redistributable] Marshall Kirk McKusick. http://www.oreilly.com/catalog/opensources/book/toc.html[Open Sources: Voices from the Open Source Revolution] O'Reilly Inc.. Copyright(R)1993.
+[[McKu1999-1]] [McKu1999-1] http://www.oreilly.com/catalog/opensources/book/kirkmck.html[Vinte anos de Unix Berkeley: de propriedade da AT&T à redistribuição livre] Marshall Kirk McKusick. http://www.oreilly.com/catalog/opensources/book/toc.html[Open Sources: Vozes da Revolução Open Source] O'Reilly Inc.. Copyright(R) 1993.
-[[Mon2005]] [Mon2005] extref:{bsdl-gpl}[Why you should use a BSD style license for your Open Source Project] Bruce Montague. The FreeBSD Project. Copyright(R)2005.
+[[Mon2005]] [Mon2005] extref:{bsdl-gpl}[Por que você deveria usar uma licença de estilo BSD para o seu projeto de código aberto.] Bruce Montague. The FreeBSD Project. Copyright(R) 2005.
-[[Nik2005]] [Nik2005] extref:{dev-model}[A project model for the FreeBSD Project] Niklas Saers. Copyright(R)2005. The FreeBSD Project.
+[[Nik2005]] [Nik2005] extref:{dev-model}[Um modelo de projeto para o Projeto FreeBSD] Niklas Saers. Copyright(R) 2005. The FreeBSD Project.
-[[Nor1993]] [Nor1993] http://www.norvig.com/luv-slides.ps[Tutorial on Good Lisp Programming Style] Peter Norvig. Kent Pitman. Copyright(R)1993.
+[[Nor1993]] [Nor1993] http://www.norvig.com/luv-slides.ps[Tutorial sobre Bom Estilo de Programação em Lisp.] Peter Norvig. Kent Pitman. Copyright(R) 1993.
-[[Nor2001]] [Nor2001] http://www.norvig.com/21-days.html[Teach Yourself Programming in Ten Years] Peter Norvig. Copyright(R)2001.
+[[Nor2001]] [Nor2001] http://www.norvig.com/21-days.html[Ensine a si mesmo a programar em dez anos.] Peter Norvig. Copyright(R) 2001.
-[[Ray2004]] [Ray2004] http://www.catb.org/~esr/faqs/smart-questions.html[How to ask questions the smart way] Eric Steven Raymond. Copyright(R)2004.
+[[Ray2004]] [Ray2004] http://www.catb.org/~esr/faqs/smart-questions.html[Como fazer perguntas de forma inteligente] Eric Steven Raymond. Copyright(R) 2004.
-[[RelEngDoc]] [RelEngDoc] extref:{releng}[FreeBSD Release Engineering] Murray Stokely. Copyright(R)2001. The FreeBSD Project.
+[[RelEngDoc]] [RelEngDoc] extref:{releng}[Engenharia de Releases do FreeBSD] Murray Stokely. Copyright(R) 2001. The FreeBSD Project.
diff --git a/documentation/content/pt-br/articles/building-products/_index.po b/documentation/content/pt-br/articles/building-products/_index.po
new file mode 100644
index 0000000000..848e99d34f
--- /dev/null
+++ b/documentation/content/pt-br/articles/building-products/_index.po
@@ -0,0 +1,1504 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2023.
+# Mateus Souza da Silva <mma.teuzzz@gmail.com>, 2023.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: 2023-04-29 16:40+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesbuilding-products_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/building-products/_index.adoc:1
+#, no-wrap
+msgid "How FreeBSD can help you build a better product"
+msgstr "Como o FreeBSD pode ajudá-lo a construir um produto melhor"
+
+#. type: Title =
+#: documentation/content/en/articles/building-products/_index.adoc:1
+#: documentation/content/en/articles/building-products/_index.adoc:13
+#, no-wrap
+msgid "Building Products with FreeBSD"
+msgstr "Construindo Produtos com o FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:46
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:50
+msgid ""
+"The FreeBSD project is a worldwide, volunteer based, and collaborative "
+"project, which develops a portable and high-quality operating system. The "
+"FreeBSD project distributes the source code for its product under a liberal "
+"license, with the intention of encouraging the use of its code. "
+"Collaborating with the FreeBSD project can help organizations reduce their "
+"time to market, reduce engineering costs and improve their product quality."
+msgstr ""
+"O projeto FreeBSD é um projeto voluntário e colaborativo de âmbito mundial, "
+"o qual desenvolve um sistema operacional de alta qualidade, capaz de ser "
+"utilizado em diferentes arquiteturas computacionais. O projeto FreeBSD "
+"distribui o código fonte do seu produto sob uma licença liberal, com a "
+"intenção de incentivar o uso de seu código. Colaborar com o projeto FreeBSD "
+"pode ajudar sua empresa a reduzir o tempo necessário para colocar um produto "
+"no mercado, a reduzir seus custos de engenharia e a melhorar qualidade de "
+"seus produtos."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:54
+msgid ""
+"This article examines the issues in using FreeBSD code in appliances and "
+"software products. It highlights the characteristics of FreeBSD that make "
+"it an excellent substrate for product development. The article concludes by "
+"suggesting a few \"best practices\" for organizations collaborating with the "
+"FreeBSD project."
+msgstr ""
+"Este artigo analisa as questões envolvidas no uso do código do FreeBSD em "
+"appliances e softwares. Ele também destaca as características do FreeBSD, "
+"que o tornam uma excelente base para o desenvolvimento de produtos. O artigo "
+"conclui sugerindo um conjunto das \"melhores práticas\" de organizações que "
+"colaboram com o projeto FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:56
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/building-products/_index.adoc:60
+#, no-wrap
+msgid "Introduction"
+msgstr "Introdução"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:66
+msgid ""
+"FreeBSD today is well-known as a high-performance server operating system. "
+"It is deployed on millions of web servers and internet-facing hosts "
+"worldwide. FreeBSD code also forms an integral part of many products, "
+"ranging from appliances such as network routers, firewalls, and storage "
+"devices, to personal computers. Portions of FreeBSD have also been used in "
+"commercial shrink-wrapped software (see <<freebsd-intro>>)."
+msgstr ""
+"Atualmente o FreeBSD é bem conhecido como um sistema operacional de alto "
+"desempenho para servidores. Ele está instalado em milhões de servidores web "
+"e em outros hosts conectados diretamente a internet em todo o mundo. O "
+"código do FreeBSD também é parte integrante de muitos produtos, que vão "
+"desde aparelhos como roteadores de rede, firewalls e dispositivos de "
+"armazenamento, até computadores pessoais. Partes do FreeBSD também têm sido "
+"utilizadas em softwares comerciais (consulte <<freebsd-intro>>)."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:68
+msgid ""
+"In this article we look at the link:https://www.FreeBSD.org/[FreeBSD "
+"project] as a software engineering resource-as a collection of building "
+"blocks and processes which you can use to build products."
+msgstr ""
+"Neste artigo, vamos olhar para o link:https://www.FreeBSD.org/[projeto "
+"FreeBSD] como um recurso de engenharia de software, como um conjunto de "
+"blocos de construção e de processos, os quais você pode utilizar para "
+"construir produtos."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:71
+msgid ""
+"While FreeBSD's source is distributed freely to the public, to fully enjoy "
+"the benefits of the project's work, organizations need to _collaborate_ with "
+"the project. In subsequent sections of this article we discuss effective "
+"means of collaboration with the project and the pitfalls that need to be "
+"avoided while doing so."
+msgstr ""
+"Embora o código fonte do FreeBSD seja distribuído gratuitamente ao público, "
+"para desfrutar plenamente dos benefícios do trabalho do projeto, as "
+"organizações precisam _colaborar_ com o mesmo. Nas seções subsequentes do "
+"presente artigo discutiremos formas eficazes de colaborar com o projeto, bem "
+"como os perigos que precisam ser evitados ao fazê-lo."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:74
+#, no-wrap
+msgid ""
+"*Caveat Reader.* The author believes that the characteristics of the FreeBSD Project listed in this article were substantially true at the time the article was conceived and written (2005).\n"
+"However, the reader should keep in mind that the practices and processes used by open-source communities can change over time, and that the information in this article should therefore be taken as indicative rather than normative.\n"
+msgstr "*Aviso ao Leitor.* O autor considera que as características do projeto FreeBSD mencionadas neste artigo eram substancialmente verdadeiras no momento em que o artigo foi concebido e escrito (2005). No entanto, o leitor deve ter em mente que as práticas e processos utilizados por comunidades de código aberto podem mudar ao longo do tempo, e que portanto as informações deste artigo devem ser consideradas apenas como indicativas e não como verdades absolutas.\n"
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:75
+#, no-wrap
+msgid "Target Audience"
+msgstr "Público Alvo"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:78
+msgid ""
+"This document would be of interest to the following broad groups of people:"
+msgstr "Este documento tem como público alvo os seguintes grupos de pessoas:"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:80
+msgid ""
+"Decision makers in product companies looking at ways to improve their "
+"product quality, reduce their time to market and lower engineering costs in "
+"the long term."
+msgstr ""
+"Tomadores de decisão em empresas que estejam em busca de meios para melhorar "
+"a qualidade de seus produtos, de reduzir o tempo necessário para lançá-los "
+"no mercado e de reduzir seus custos de engenharia no longo prazo."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:81
+msgid ""
+"Technology consultants looking for best-practices in leveraging \"open-source"
+"\"."
+msgstr ""
+"Consultores de tecnologia procurando melhores práticas em alavancar o código "
+"aberto."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:82
+msgid ""
+"Industry observers interested in understanding the dynamics of open-source "
+"projects."
+msgstr ""
+"Observadores da indústria interessados em compreender a dinâmica dos "
+"projetos de código aberto."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:83
+msgid ""
+"Software developers seeking to use FreeBSD and looking for ways to "
+"contribute back."
+msgstr ""
+"Desenvolvedores de software que utilizam o FreeBSD e que buscam formas de "
+"contribuir com o projeto."
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:84
+#, no-wrap
+msgid "Article Goals"
+msgstr "Objetivos do artigo"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:87
+msgid "After reading this article you should have:"
+msgstr "Após a leitura deste artigo, você deve ter:"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:89
+msgid ""
+"An understanding of the goals of the FreeBSD Project and its organizational "
+"structure."
+msgstr ""
+"Uma melhor compreensão dos objetivos do Projeto FreeBSD e de sua estrutura "
+"organizacional."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:90
+msgid ""
+"An understanding of its development model and release engineering processes."
+msgstr "Uma visão geral das tecnologias disponíveis no projeto."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:91
+msgid ""
+"An understanding of how conventional corporate software development "
+"processes differ from that used in the FreeBSD project."
+msgstr ""
+"Uma melhor compreensão do modelo de desenvolvimento adotado pelo Projeto "
+"FreeBSD e dos processos de engenharia envolvidos no lançamento de uma nova "
+"versão do sistema."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:92
+msgid ""
+"Awareness of the communication channels used by the project and the level of "
+"transparency you can expect."
+msgstr ""
+"Consciência dos canais de comunicação utilizados pelo projeto e do nível de "
+"transparência que você pode esperar."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:93
+msgid ""
+"Awareness of optimal ways of working with the project-how best to reduce "
+"engineering costs, improve time to market, manage security vulnerabilities, "
+"and preserve future compatibility with your product as the FreeBSD project "
+"evolves."
+msgstr ""
+"Consciência das melhores formas de trabalhar com o projeto - a melhor forma "
+"de reduzir os custos de engenharia, de reduzir o tempo necessário para levar "
+"seu produto ao mercado, de gerir vulnerabilidades de segurança e preservar a "
+"compatibilidade futura com seu produto à medida que o projeto FreeBSD evolui."
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:94
+#, no-wrap
+msgid "Article Structure"
+msgstr "Estrutura do Artigo"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:97
+msgid "The rest of the article is structured as follows:"
+msgstr "O restante deste artigo está estruturado da seguinte forma:"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:99
+msgid ""
+"<<freebsd-intro>> introduces the FreeBSD project, explores its "
+"organizational structure, key technologies and release engineering processes."
+msgstr ""
+"<<freebsd-intro>> introduz o projeto FreeBSD, explora a estrutura "
+"organizacional, tecnologias principais e processos de engenharia de releases."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:100
+msgid ""
+"<<freebsd-collaboration>> describes ways to collaborate with the FreeBSD "
+"project. It examines common pitfalls encountered by corporates working with "
+"voluntary projects like FreeBSD."
+msgstr ""
+"<<freebsd-collaboration>> descreve meios de colaboração para com o projeto "
+"FreeBSD. Examina armadilhas comuns encontrado por empresas trabalhando com "
+"projetos voluntários como o FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:101
+msgid "<<conclusion>> concludes."
+msgstr "<<conclusion>> conclui."
+
+#. type: Title ==
+#: documentation/content/en/articles/building-products/_index.adoc:103
+#, no-wrap
+msgid "FreeBSD as a set of building blocks"
+msgstr "O FreeBSD como um conjunto de blocos de construção"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:106
+msgid "FreeBSD makes an excellent foundation on which to build products:"
+msgstr ""
+"O FreeBSD fornece uma excelente base sobre a qual podemos construir produtos:"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:108
+msgid ""
+"FreeBSD source code is distributed under a liberal BSD license facilitating "
+"its adoption in commercial products <<Mon2005>> with minimum hassle."
+msgstr ""
+"O código fonte do FreeBSD é distribuído sob uma licença BSD liberal, o que "
+"facilita sua adoção em produtos comerciais <<Mon2005>> com um mínimo de "
+"preocupações."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:109
+msgid ""
+"The FreeBSD project has excellent engineering practices that can be "
+"leveraged."
+msgstr ""
+"O Projeto FreeBSD possui excelentes práticas de engenharia as quais podem "
+"ser aproveitadas."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:110
+msgid ""
+"The project offers exceptional transparency into its workings, allowing "
+"organizations using its code to plan effectively for the future."
+msgstr ""
+"O projeto oferece uma transparência excepcional em seu funcionamento, "
+"permitindo que as empresas que utilizam o seu código se planejem de forma "
+"eficaz para o futuro."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:111
+msgid ""
+"The culture of the FreeBSD project, carried over from the Computer Science "
+"Research Group at The University of California, Berkeley <<McKu1999-1>>, "
+"fosters high-quality work. Some features in FreeBSD define the state of the "
+"art."
+msgstr ""
+"A cultura do projeto FreeBSD, herdada do Grupo de Pesquisa de Ciências da "
+"Computação da Universidade da Califórnia em Berkeley <<McKu1999-1>>, fomenta "
+"trabalhos de alta qualidade. Algumas funcionalidades do FreeBSD definem o "
+"estado da arte."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:114
+msgid ""
+"<<GoldGab2005>> examines the business reasons for using open-source in "
+"greater detail. For organizations, the benefits of using FreeBSD components "
+"in their products include a shorter time to market, lower development costs "
+"and lower development risks."
+msgstr ""
+"O <<GoldGab2005>> analisa em maior profundidade os motivos comerciais para "
+"se utilizar código fonte aberto. Para as organizações, os benefícios do uso "
+"de componentes do FreeBSD em seus produtos incluem a redução do tempo "
+"necessário para lançar novos produtos no mercado, menores custos e menores "
+"riscos de desenvolvimento."
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:115
+#, no-wrap
+msgid "Building with FreeBSD"
+msgstr "Construindo com o FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:118
+msgid "Here are a few ways organizations have used FreeBSD:"
+msgstr ""
+"Aqui estão alguns exemplos de como as empresas estão utilizando o FreeBSD:"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:120
+msgid "As an upstream source for tested code for libraries and utilities."
+msgstr ""
+"Como um provedor (upstream source) de códigos testados para bibliotecas e "
+"utilitários."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:122
+msgid ""
+"By being \"downstream\" of the project, organizations leverage the new "
+"features, bug fixes and testing that the upstream code receives."
+msgstr ""
+"Por estar \"downstream\" do projeto, as organizações aproveitam os novos "
+"recursos, correções de bugs e testes que o código upstream recebe."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:123
+msgid ""
+"As an embedded OS (for example, for an OEM router and firewall device). In "
+"this model, organizations use a customized FreeBSD kernel and application "
+"program set along with a proprietary management layer for their device. OEMs "
+"benefit from new hardware support being added by the FreeBSD project "
+"upstream, and from the testing that the base system receives."
+msgstr ""
+"Como sistema operacional integrado (por exemplo, em um roteador OEM e ou em "
+"um dispositivo de firewall). Neste modelo, as empresas utilizam uma versão "
+"customizada do kernel e do conjunto de aplicativos do FreeBSD, juntamente "
+"com uma camada proprietária de gestão para os seus dispositivos. Os "
+"fabricantes de equipamentos originais (OEMs) se beneficiam da adição por "
+"parte do FreeBSD de suporte a novos componentes de hardware, bem como se "
+"beneficia dos testes que o sistema base recebe."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:125
+msgid ""
+"FreeBSD ships with a self-hosting development environment that allows easy "
+"creation of such configurations."
+msgstr ""
+"O FreeBSD é distribuído com um ambiente de desenvolvimento auto-hospedado o "
+"qual permite a fácil criação de tais configurações."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:126
+msgid ""
+"As a Unix compatible environment for the management functions of high-end "
+"storage and networking devices, running on a separate processor \"blade\"."
+msgstr ""
+"Como um ambiente Unix compatível para as funções de gerenciamento em "
+"dispositivos de armazenamento high-end e em dispositivos de rede, executando "
+"em uma lâmina separada \"blade\"."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:130
+msgid ""
+"FreeBSD provides the tools for creating dedicated OS and application program "
+"images. Its implementation of a BSD unix API is mature and tested. FreeBSD "
+"can also provide a stable cross-development environment for the other "
+"components of the high-end device."
+msgstr ""
+"O FreeBSD fornece ferramentas para a criação de imagens do sistema "
+"operacional dedicadas a executar uma função específica. Sua implementação da "
+"API unix BSD é madura e testada. O FreeBSD também pode proporcionar um "
+"ambiente de desenvolvimento cruzado estável para os outros componentes de "
+"dispositivos topo de linha."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:131
+msgid ""
+"As a vehicle to get widespread testing and support from a worldwide team of "
+"developers for non-critical \"intellectual property\"."
+msgstr ""
+"Como um meio de obter testes abrangentes e suporte de uma equipe mundial de "
+"desenvolvedores para \"propriedade intelectual\" não crítica."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:135
+msgid ""
+"In this model, organizations contribute useful infrastructural frameworks to "
+"the FreeBSD project (for example, see man:netgraph[3]). The widespread "
+"exposure that the code gets helps to quickly identify performance issues and "
+"bugs. The involvement of top-notch developers also leads to useful "
+"extensions to the infrastructure that the contributing organization also "
+"benefits from."
+msgstr ""
+"Neste modelo, as organizações contribuem com estruturas infraestruturais "
+"úteis para o projeto FreeBSD (por exemplo, veja man:netgraph[3]). A ampla "
+"exposição que o código recebe ajuda a identificar rapidamente problemas de "
+"desempenho e bugs. O envolvimento de desenvolvedores de primeira linha "
+"também leva a extensões úteis à infraestrutura das quais a organização "
+"contribuinte também se beneficia."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:136
+msgid ""
+"As a development environment supporting cross-development for embedded OSes "
+"like http://www.rtems.com/[RTEMS] and http://ecos.sourceware.org/[eCOS]."
+msgstr ""
+"Como um ambiente de desenvolvimento que suporta desenvolvimento cruzado para "
+"sistemas operacionais embarcados, como http://www.rtems.com/[RTEMS] e "
+"http://ecos.sourceware.org/[eCOS]."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:138
+msgid ""
+"There are many full-fledged development environments in the {numports}-"
+"strong collection of applications ported and packaged with FreeBSD."
+msgstr ""
+"Há muitos ambientes de desenvolvimento completos na coleção de {numports} "
+"aplicativos portados e empacotados com o FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:139
+msgid ""
+"As a way to support a Unix-like API in an otherwise proprietary OS, "
+"increasing its palatability for application developers."
+msgstr ""
+"Como forma de suportar uma API estilo Unix em um sistema operacional que de "
+"outro modo seria proprietário, aumentando a sua palatabilidade para os "
+"desenvolvedores de aplicativos."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:143
+msgid ""
+"Here parts of FreeBSD's kernel and application programs are \"ported\" to "
+"run alongside other tasks in the proprietary OS. The availability of a "
+"stable and well tested Unix(TM) API implementation can reduce the effort "
+"needed to port popular applications to the proprietary OS. As FreeBSD ships "
+"with high-quality documentation for its internals and has effective "
+"vulnerability management and release engineering processes, the costs of "
+"keeping up-to-date are kept low."
+msgstr ""
+"Aqui, partes do kernel do FreeBSD e dos programas de aplicação são \"portadas"
+"\" para serem executadas junto com outras tarefas no sistema operacional "
+"proprietário. A disponibilidade de uma implementação estável e bem testada "
+"da API Unix(TM) pode reduzir o esforço necessário para portar aplicativos "
+"populares para o sistema operacional proprietário. Como o FreeBSD é "
+"fornecido com documentação de alta qualidade para seus componentes internos "
+"e possui processos eficazes de gerenciamento de vulnerabilidades e "
+"engenharia de release, os custos para se manter atualizado são mantidos "
+"baixos."
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:145
+#, no-wrap
+msgid "Technologies"
+msgstr "Tecnologias"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:149
+msgid ""
+"There are a large number of technologies supported by the FreeBSD project. "
+"A selection of these are listed below:"
+msgstr ""
+"Existe um grande número de tecnologias suportadas pelo projeto FreeBSD. "
+"Abaixo você encontra uma lista com alguma delas:"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:151
+msgid ""
+"A complete system that can cross-host itself for link:https://www.FreeBSD."
+"org/platforms/[many architectures:]"
+msgstr ""
+"Um sistema completo que pode hospedar-se cruzadamente para link:https://www."
+"FreeBSD.org/platforms/[muitas arquiteturas:]"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:152
+msgid ""
+"A modular symmetric multiprocessing capable kernel, with loadable kernel "
+"modules and a flexible and easy to use configuration system."
+msgstr ""
+"Um kernel modular capaz de multiprocessamento simétrico, com módulos de "
+"kernel carregáveis e um sistema de configuração flexível e fácil de usar."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:153
+msgid ""
+"Support for emulation of Linux(TM) and SVR4 binaries at near machine speeds. "
+"Support for binary Windows(TM) (NDIS) network drivers."
+msgstr ""
+"Suporte para emulação de binários Linux(TM) e SVR4 em velocidades próximas "
+"às da máquina. Suporte para drivers de rede binários do Windows(TM) (NDIS)."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:154
+msgid ""
+"Libraries for many programming tasks: archivers, FTP and HTTP support, "
+"thread support, in addition to a full POSIX(TM) like programming environment."
+msgstr ""
+"Bibliotecas para muitas tarefas de programação: arquivamento, suporte a FTP "
+"e HTTP, suporte a threads, além de um ambiente de programação completo "
+"semelhante ao POSIX(TM)."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:155
+msgid ""
+"Security features: Mandatory Access Control (man:mac[9]), jails (man:"
+"jail[2]), ACLs, and in-kernel cryptographic device support."
+msgstr ""
+"Recursos de segurança: Controle de Acesso Obrigatório (man:mac[9]), jails "
+"(man:jail[2]), ACLs e suporte a dispositivos criptográficos no kernel."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:156
+msgid ""
+"Networking features: firewall-ing, QoS management, high-performance TCP/IP "
+"networking with support for many extensions."
+msgstr ""
+"Funcionalidades avançadas de rede: firewalls, gerenciamento de QoS, rede TCP/"
+"IP de alta performance com suporte a muitos recursos avançados."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:158
+msgid ""
+"FreeBSD's in-kernel Netgraph (man:netgraph[4]) framework allows kernel "
+"networking modules to be connected together in flexible ways."
+msgstr ""
+"O framework Netgraph (man:netgraph[4]) no kernel do FreeBSD permite que "
+"módulos de rede do kernel sejam conectados de maneiras flexíveis."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:159
+msgid ""
+"Support for storage technologies: Fibre Channel, SCSI, software and hardware "
+"RAID, ATA and SATA."
+msgstr ""
+"Suporte para tecnologias de armazenamento: Fibre Channel, SCSI, RAID de "
+"software e hardware, ATA e SATA."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:161
+msgid ""
+"FreeBSD supports a number of filesystems, and its native UFS2 filesystem "
+"supports soft updates, snapshots and very large filesystem sizes (16TB per "
+"filesystem) <<McKu1999>>."
+msgstr ""
+"O FreeBSD suporta vários sistemas de arquivos, e seu sistema de arquivos "
+"nativo UFS2 suporta \"soft updates\", snapshots e tamanhos de sistema de "
+"arquivos muito grandes (16 TB por sistema de arquivos) <<McKu1999>>."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:163
+msgid ""
+"FreeBSD's in-kernel GEOM (man:geom[4]) framework allows kernel storage "
+"modules to be composed in flexible ways."
+msgstr ""
+"O framework GEOM (man:geom[4]) no kernel do FreeBSD permite que módulos de "
+"armazenamento do kernel sejam compostos de maneiras flexíveis."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:164
+msgid ""
+"Over {numports} ported applications, both commercial and open-source, "
+"managed via the FreeBSD ports collection."
+msgstr ""
+"Mais de {numports} aplicativos portados, tanto comerciais quanto de código "
+"aberto, gerenciados por meio da coleção de ports do FreeBSD."
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:165
+#, no-wrap
+msgid "Organizational Structure"
+msgstr "Estrutura Organizacional"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:168
+msgid "FreeBSD's organizational structure is non-hierarchical."
+msgstr "A estrutura organizacional do FreeBSD não é hierárquica."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:170
+msgid ""
+"There are essentially two kinds of contributors to FreeBSD, general users of "
+"FreeBSD, and developers with write access (known as _committers_ in the "
+"jargon) to the source base."
+msgstr ""
+"Existem basicamente dois tipos de contribuidores para o FreeBSD: usuários "
+"gerais do FreeBSD e desenvolvedores com acesso de escrita (conhecidos como "
+"_committers_ na gíria) à base de código-fonte."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:174
+msgid ""
+"There are many thousands of contributors in the first group; the vast "
+"majority of contributions to FreeBSD come from individuals in this group. "
+"Commit rights (write access) to the repository are granted to individuals "
+"who contribute consistently to the project. Commit rights come with "
+"additional responsibilities, and new committers are assigned mentors to help "
+"them learn the ropes."
+msgstr ""
+"Existem muitos milhares de colaboradores no primeiro grupo, a grande maioria "
+"das contribuições para o FreeBSD vêm de indivíduos desse grupo; A permissão "
+"de commit (acesso de escrita) no repositório é concedida a pessoas que "
+"contribuem de forma consistente para o projeto. O direito de commit vem "
+"acompanhado de responsabilidades adicionais, e para facilitar o aprendizado "
+"das mesmas, um mentor é atribuído a todos os novos committers."
+
+#. type: Block title
+#: documentation/content/en/articles/building-products/_index.adoc:175
+#, no-wrap
+msgid "FreeBSD Organization"
+msgstr "Organização do FreeBSD"
+
+#. type: Target for macro image
+#: documentation/content/en/articles/building-products/_index.adoc:176
+#, no-wrap
+msgid "freebsd-organization.png"
+msgstr "freebsd-organization.png"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:179
+msgid ""
+"Conflict resolution is performed by a nine member \"Core Team\" that is "
+"elected from the group of committers."
+msgstr ""
+"A resolução de conflitos é realizada por uma equipe central (\"Core Team\") "
+"de nove membros que é eleita a partir do grupo de committers."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:183
+msgid ""
+"FreeBSD does not have \"corporate\" committers. Individual committers are "
+"required to take responsibility for the changes they introduce to the code. "
+"The extref:{committers-guide}[FreeBSD Committer's guide] <<ComGuide>> "
+"documents the rules and responsibilities for committers."
+msgstr ""
+"O FreeBSD não tem committers \"corporativos\". Cada committer individual é "
+"responsável pelas alterações que introduz no código. O guia do committer do "
+"FreeBSD (extref:{committers-guide}[FreeBSD Committer's guide]) <<ComGuide>> "
+"documenta as regras e responsabilidades dos committers."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:185
+msgid "FreeBSD's project model is examined in detail in <<Nik2005>>."
+msgstr "O modelo de projeto do FreeBSD é examinado em detalhes em <<Nik2005>>."
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:186
+#, no-wrap
+msgid "FreeBSD Release Engineering Processes"
+msgstr "Processos de Engenharia para liberação de novas versões do FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:190
+msgid ""
+"FreeBSD's release engineering processes play a major role in ensuring that "
+"its released versions are of a high quality. At any point of time, "
+"FreeBSD's volunteers support multiple code lines (<<fig-freebsd-branches, "
+"FreeBSD Release Branches>>):"
+msgstr ""
+"Os processos de engenharia de release do FreeBSD desempenham um papel "
+"importante na garantia de que as versões lançadas sejam de alta qualidade. "
+"Em qualquer momento, os voluntários do FreeBSD suportam várias linhas de "
+"código (<<fig-freebsd-branches, FreeBSD Release Branches>>):"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:192
+msgid ""
+"New features and disruptive code enters on the development branch, also "
+"known as the _-CURRENT_ branch."
+msgstr ""
+"Novos recursos e código disruptivo entram na branch de desenvolvimento, "
+"também conhecida como branch _-CURRENT_."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:193
+msgid ""
+"_-STABLE_ branches are code lines that are branched from HEAD at regular "
+"intervals. Only tested code is allowed onto a -STABLE branch. New features "
+"are allowed once they have been tested and stabilized in the -CURRENT branch."
+msgstr ""
+"As branch _-STABLE_ são linhas de código que são ramificadas do HEAD em "
+"intervalos regulares. Somente o código testado é permitido em uma branch _-"
+"STABLE_. Novos recursos são permitidos apenas depois de terem sido testados "
+"e estabilizados na branch _-CURRENT_."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:194
+msgid ""
+"_-RELEASE_ branches are maintained by the FreeBSD security team. Only bug "
+"fixes for critical issues are permitted onto -RELEASE branches."
+msgstr ""
+"As branchs _-RELEASE_ são mantidas pela equipe de segurança do FreeBSD. "
+"Somente correções de bugs para problemas críticos são permitidas nas branchs "
+"_-RELEASE_."
+
+#. type: Block title
+#: documentation/content/en/articles/building-products/_index.adoc:196
+#, no-wrap
+msgid "FreeBSD Release Branches"
+msgstr "Release Branches do FreeBSD"
+
+#. type: Target for macro image
+#: documentation/content/en/articles/building-products/_index.adoc:197
+#, no-wrap
+msgid "freebsd-branches.png"
+msgstr "freebsd-branches.png"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:200
+msgid ""
+"Code lines are kept alive for as long as there is user and developer "
+"interest in them."
+msgstr ""
+"As linhas de código são mantidas vivas enquanto houver interesse dos "
+"usuários e dos desenvolvedores nelas."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:203
+msgid ""
+"Machine architectures are grouped into \"tiers\"; _Tier 1_ architectures are "
+"fully supported by the project's release engineering and security teams, "
+"_Tier 2_ architectures are supported on a best effort basis, and "
+"experimental architectures comprise _Tier 3_. The list of extref:"
+"{committers-guide}[supported architectures, archs] is part of the FreeBSD "
+"documentation collection."
+msgstr ""
+"As arquiteturas de máquinas são agrupadas em \"níveis\"; as arquiteturas "
+"_Tier 1_ são totalmente suportadas pelas equipes de engenharia de release e "
+"segurança do projeto, as arquiteturas _Tier 2_ são suportadas com base no "
+"melhor esforço, e as arquiteturas experimentais compõem o _Tier 3_. A lista "
+"de extref:{committers-guide}[arquiteturas suportadas, archs] faz parte da "
+"coleção de documentação do FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:206
+msgid ""
+"The release engineering team publishes a link:https://www.FreeBSD.org/releng/"
+"[road map] for future releases of FreeBSD on the project's web site. The "
+"dates laid down in the road map are not deadlines; FreeBSD is released when "
+"its code and documentation are ready."
+msgstr ""
+"A equipe de engenharia de release publica um link:https://www.FreeBSD.org/"
+"releng/[road map] para futuros lançamentos do FreeBSD no site do projeto. As "
+"datas estabelecidas no roteiro não são prazos finais; o FreeBSD é lançado "
+"quando seu código e documentação estão prontos."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:208
+msgid "FreeBSD's release engineering processes are described in <<RelEngDoc>>."
+msgstr ""
+"Os processos de engenharia de release do FreeBSD são descritos em "
+"<<RelEngDoc>>."
+
+#. type: Title ==
+#: documentation/content/en/articles/building-products/_index.adoc:210
+#, no-wrap
+msgid "Collaborating with FreeBSD"
+msgstr "Colaborando com o FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:213
+msgid ""
+"Open-source projects like FreeBSD offer finished code of a very high quality."
+msgstr ""
+"Projetos open-source como o FreeBSD oferecem código final de alta qualidade."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:218
+msgid ""
+"While access to quality source code can reduce the cost of initial "
+"development, in the long-term the costs of managing change begin to "
+"dominate. As computing environments change over the years and new security "
+"vulnerabilities are discovered, your product too needs to change and adapt. "
+"Using open-source code is best viewed not as a one-off activity, but as an "
+"__ongoing process__. The best projects to collaborate with are the ones "
+"that are __live__; i.e., with an active community, clear goals and a "
+"transparent working style."
+msgstr ""
+"Embora o acesso a um código fonte de qualidade possa reduzir o custo inicial "
+"de desenvolvimento, a longo prazo, os custos com o gerenciamento de mudanças "
+"começam a dominar. A medida que os ambientes computacionais mudam ao longo "
+"dos anos e novas vulnerabilidades de segurança são descobertas, o seu "
+"produto também precisará mudar e se adaptar. O uso de código open-source não "
+"deve ser encarado como uma atividade pontual, mas sim como um __processo "
+"contínuo__. Os melhores projetos para se colaborar são os que estão "
+"__vivos__, ou seja, aqueles com uma comunidade ativa, que tenha objetivos "
+"claros e que possua um estilo de trabalho transparente."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:220
+msgid ""
+"FreeBSD has an active developer community around it. At the time of writing "
+"there are many thousands of contributors from every populated continent in "
+"the world and over 300 individuals with write access to the project's source "
+"repositories."
+msgstr ""
+"O FreeBSD tem uma comunidade de desenvolvimento ativa em torno dele. No "
+"momento em que este artigo foi escrito, existiam milhares de colaboradores "
+"com representantes de praticamente todos os continentes povoados do mundo, e "
+"mais de 300 indivíduos com acesso de escrita aos repositórios do projeto."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:221
+msgid "The goals of the FreeBSD project are <<Hub1994>>:"
+msgstr "Os objetivos do projeto FreeBSD são <<Hub1994>>:"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:223
+msgid ""
+"To develop a high-quality operating system for popular computer hardware, "
+"and,"
+msgstr ""
+"Desenvolver um sistema operacional de alta qualidade para o hardware de "
+"computadores populares, e,"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:224
+msgid "To make our work available to all under a liberal license."
+msgstr "Tornar o nosso trabalho disponível para todos sob uma licença liberal."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:226
+msgid ""
+"FreeBSD enjoys an open and transparent working culture. Nearly all "
+"discussion in the project happens by email, on link:https://lists.freebsd."
+"org/[public mailing lists] that are also archived for posterity. The "
+"project's policies are link:https://www.FreeBSD.org/internal/policies/"
+"[documented] and maintained under revision control. Participation in the "
+"project is open to all."
+msgstr ""
+"O FreeBSD possui uma cultura de trabalho aberta e transparente. Quase todas "
+"as discussões no projeto ocorrem por e-mail, em link:https://lists.freebsd."
+"org/[listas de discussão públicas] que também são arquivadas para a "
+"posteridade. As políticas do projeto são link:https://www.FreeBSD.org/"
+"internal/policies/[documentadas] e mantidas sob controle de revisão. A "
+"participação no projeto está aberta a todos."
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:228
+#, no-wrap
+msgid "Understanding FreeBSD culture"
+msgstr "Compreendendo a cultura do FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:231
+msgid ""
+"To be able to work effectively with the FreeBSD project, you need to "
+"understand the project's culture."
+msgstr ""
+"Para ser capaz de trabalhar de forma eficaz com o projeto FreeBSD, você "
+"precisa entender a cultura do projeto."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:234
+msgid ""
+"Volunteer driven projects operate under different rules than for-profit "
+"corporates. A common mistake that companies make when venturing into the "
+"open-source world is that of underplaying these differences."
+msgstr ""
+"As regras que regem a operação de um projeto voluntário são diferentes das "
+"que regem a operação de uma empresa com fins lucrativos. Um erro comum que "
+"as empresas cometem ao se aventurar no mundo open-source é o de subestimar "
+"essas diferenças."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:236
+#, no-wrap
+msgid "*Motivation.* Most contributions to FreeBSD are done voluntarily without monetary rewards entering the picture. The factors that motivate individuals are complex, ranging from altruism, to an interest in solving the kinds of problems that FreeBSD attempts to solve. In this environment, \"elegance is never optional\"<<Nor1993>>.\n"
+msgstr ""
+"*Motivação.* A maioria das contribuições para o FreeBSD é feita "
+"voluntariamente, sem a entrada de recompensas monetárias. Os fatores que "
+"motivam os indivíduos são complexos, variando desde o altruísmo até o "
+"interesse em resolver os tipos de problemas que o FreeBSD tenta resolver. "
+"Nesse ambiente, \"a elegância nunca é opcional\" <<Nor1993>>.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:238
+#, no-wrap
+msgid "*The Long Term View.* FreeBSD traces its roots back nearly twenty years to the work of the Computer Science Research Group at the University of California Berkeley.footnote:[FreeBSD's source repository contains a history of the project since its inception, and there are CDROMs available that contain earlier code from the CSRG.] A number of the original CSRG developers remain associated with the project.\n"
+msgstr ""
+"*A Visão de Longo Prazo.* O FreeBSD remonta quase vinte anos ao trabalho do "
+"Computer Science Research Group da Universidade da Califórnia em Berkeley. "
+"footnote:[O repositório de código-fonte do FreeBSD contém um histórico do "
+"projeto desde o seu início, e há CDs disponíveis que contêm código anterior "
+"do CSRG.] Vários dos desenvolvedores originais do CSRG ainda estão "
+"associados ao projeto.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:240
+msgid ""
+"The project values long-term perspectives <<Nor2001>>. A frequent acronym "
+"encountered in the project is DTRT, which stands for \"Do The Right Thing\"."
+msgstr ""
+"O projeto valoriza perspectivas de longo prazo <<Nor2001>>. Um acrônimo "
+"frequente encontrado no projeto é DTRT, que significa \"Faça a Coisa Certa\"."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:243
+#, no-wrap
+msgid ""
+"*Development Processes.* Computer programs are tools for communication: at one level programmers communicate their intentions using a precise notation to a tool (a compiler) that translates their instructions to executable code.\n"
+"At another level, the same notation is used for communication of intent between two programmers.\n"
+msgstr ""
+"Os programas de computador são ferramentas de comunicação: em um nível, os "
+"programadores comunicam suas intenções usando uma notação precisa para uma "
+"ferramenta (um compilador) que traduz suas instruções para código "
+"executável. \n"
+"Em outro nível, a mesma notação é usada para comunicação de intenção entre "
+"dois programadores.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:247
+msgid ""
+"Formal specifications and design documents are seldom used in the project. "
+"Clear and well-written code and well-written change logs (<<fig-change-log, "
+"A sample change log entry>>) are used in their place. FreeBSD development "
+"happens by \"rough consensus and running code\"<<Carp1996>>."
+msgstr ""
+"Especificações formais e documentos de design raramente são utilizados no "
+"projeto. Em seu lugar, é usado um código claro e bem escrito e registros de "
+"alterações bem escritos (<<fig-change-log, Um exemplo de entrada de registro "
+"de alterações>>). O desenvolvimento do FreeBSD acontece por meio de "
+"\"consenso geral e código em execução\" (tradução livre de \"rough consensus "
+"and running code\"<<Carp1996>>)."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/building-products/_index.adoc:253
+#, no-wrap
+msgid ""
+"r151864 | bde | 2005-10-29 09:34:50 -0700 (Sat, 29 Oct 2005) | 13 lines\n"
+"Changed paths:\n"
+" M /head/lib/msun/src/e_rem_pio2f.c\n"
+msgstr ""
+"r151864 | bde | 2005-10-29 09:34:50 -0700 (Sat, 29 Oct 2005) | 13 lines\n"
+"Changed paths:\n"
+" M /head/lib/msun/src/e_rem_pio2f.c\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/building-products/_index.adoc:263
+#, no-wrap
+msgid ""
+"Use double precision to simplify and optimize arg reduction for small\n"
+"and medium size args too: instead of conditionally subtracting a float\n"
+"17+24, 17+17+24 or 17+17+17+24 bit approximation to pi/2, always\n"
+"subtract a double 33+53 bit one. The float version is now closer to\n"
+"the double version than to old versions of itself -- it uses the same\n"
+"33+53 bit approximation as the simplest cases in the double version,\n"
+"and where the float version had to switch to the slow general case at\n"
+"|x| == 2^7*pi/2, it now switches at |x| == 2^19*pi/2 the same as the\n"
+"double version.\n"
+msgstr ""
+"Use double precision to simplify and optimize arg reduction for small\n"
+"and medium size args too: instead of conditionally subtracting a float\n"
+"17+24, 17+17+24 or 17+17+17+24 bit approximation to pi/2, always\n"
+"subtract a double 33+53 bit one. The float version is now closer to\n"
+"the double version than to old versions of itself -- it uses the same\n"
+"33+53 bit approximation as the simplest cases in the double version,\n"
+"and where the float version had to switch to the slow general case at\n"
+"|x| == 2^7*pi/2, it now switches at |x| == 2^19*pi/2 the same as the\n"
+"double version.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/building-products/_index.adoc:266
+#, no-wrap
+msgid ""
+"This speeds up arg reduction by a factor of 2 for |x| between 3*pi/4 and\n"
+"2^7*pi/4, and by a factor of 7 for |x| between 2^7*pi/4 and 2^19*pi/4.\n"
+msgstr ""
+"This speeds up arg reduction by a factor of 2 for |x| between 3*pi/4 and\n"
+"2^7*pi/4, and by a factor of 7 for |x| between 2^7*pi/4 and 2^19*pi/4.\n"
+
+#. type: Block title
+#: documentation/content/en/articles/building-products/_index.adoc:267
+#, no-wrap
+msgid "A sample change log entry [[fig-change-log]]"
+msgstr "Um exemplo de entrada de log de mudanças [[fig-change-log]]"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:270
+msgid ""
+"Communication between programmers is enhanced by the use of a common coding "
+"standard man:style[9]."
+msgstr ""
+"Comunicação entre programadores é melhorada pelo uso de um padrão de "
+"codificação comum (man:style[9])."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:273
+#, no-wrap
+msgid ""
+"*Communication Channels.* FreeBSD's contributors are spread across the world.\n"
+"Email (and to a lesser extent, IRC) is the preferred means of communication in the project.\n"
+msgstr ""
+"*Canais de Comunicação.* Os colaboradores do FreeBSD estão espalhados pelo "
+"mundo. \n"
+"O e-mail (e, em menor medida, o IRC) é o meio de comunicação preferido no "
+"projeto.\n"
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:274
+#, no-wrap
+msgid "Best Practices for collaborating with the FreeBSD project"
+msgstr "Melhores práticas para colaborar com o projeto FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:277
+msgid ""
+"We now look at a few best practices for making the best use of FreeBSD in "
+"product development."
+msgstr ""
+"Agora iremos examinar algumas das melhores práticas para se fazer um melhor "
+"uso do FreeBSD no desenvolvimento de produtos."
+
+#. type: Labeled list
+#: documentation/content/en/articles/building-products/_index.adoc:278
+#, no-wrap
+msgid "Plan for the long term"
+msgstr "Se planeje para o longo prazo"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:281
+msgid ""
+"Setup processes that help in tracking the development of FreeBSD. For "
+"example:"
+msgstr ""
+"Criar processos que auxiliem no acompanhamento do desenvolvimento do "
+"FreeBSD. Por exemplo:"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:283
+#, no-wrap
+msgid "*Track FreeBSD source code.* The project makes it easy to mirror its SVN repository using extref:{committers-guide}[svnsync, svn-advanced-use-setting-up-svnsync]. Having the complete history of the source is useful when debugging complex problems and offers valuable insight into the intentions of the original developers. Use a capable source control system that allows you to easily merge changes between the upstream FreeBSD code base and your own in-house code.\n"
+msgstr ""
+"*Acompanhar o código-fonte do FreeBSD.* O projeto facilita a criação de um "
+"espelho do seu repositório SVN usando o extref:{committers-guide}[svnsync, "
+"svn-advanced-use-setting-up-svnsync]. Ter todo o histórico do código-fonte é "
+"útil para depurar problemas complexos e oferece informações valiosas sobre "
+"as intenções dos desenvolvedores originais. Use um sistema de controle de "
+"código capaz que permita mesclar facilmente as alterações entre o código-"
+"base upstream do FreeBSD e o seu próprio código interno.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:287
+msgid ""
+"<<fig-svn-blame, An annotated source listing generated using `svn blame`>> "
+"shows a portion of an annotated listing of the file referenced by the change "
+"log in <<fig-change-log, A sample change log entry>>. The ancestry of each "
+"line of the source is clearly visible. Annotated listings showing the "
+"history of every file that is part of FreeBSD are https://svnweb.freebsd.org/"
+"[available on the web]."
+msgstr ""
+"<<fig-svn-blame, Um arquivo de origem anotado gerado usando `svn blame`>> "
+"mostra uma parte de um arquivo de listagem anotado do arquivo referenciado "
+"pelo registro de alterações em <<fig-change-log, Um exemplo de registro de "
+"alterações>>. A ancestralidade de cada linha do código-fonte é claramente "
+"visível. Listagens anotadas mostrando a história de cada arquivo que faz "
+"parte do FreeBSD estão disponíveis https://svnweb.freebsd.org/[no website]."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/building-products/_index.adoc:291
+#, no-wrap
+msgid "#REV #WHO #DATE #TEXT\n"
+msgstr "#REV #WHO #DATE #TEXT\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/building-products/_index.adoc:305
+#, no-wrap
+msgid ""
+"176410 bde 2008-02-19 07:42:46 -0800 (Tue, 19 Feb 2008) #include <sys/cdefs.h>\n"
+"176410 bde 2008-02-19 07:42:46 -0800 (Tue, 19 Feb 2008) __FBSDID(\"$FreeBSD$\");\n"
+" 2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994) \n"
+" 2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994) /* __ieee754_rem_pio2f(x,y)\n"
+" 8870 rgrimes 1995-05-29 22:51:47 -0700 (Mon, 29 May 1995) *\n"
+"176552 bde 2008-02-25 05:33:20 -0800 (Mon, 25 Feb 2008) * return the remainder of x rem pi/2 in *y\n"
+"176552 bde 2008-02-25 05:33:20 -0800 (Mon, 25 Feb 2008) * use double precision for everything except passing x\n"
+"152535 bde 2005-11-16 18:20:04 -0800 (Wed, 16 Nov 2005) * use __kernel_rem_pio2() for large x\n"
+" 2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994) */\n"
+" 2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994) \n"
+"176465 bde 2008-02-22 07:55:14 -0800 (Fri, 22 Feb 2008) #include <float.h>\n"
+"176465 bde 2008-02-22 07:55:14 -0800 (Fri, 22 Feb 2008) \n"
+" 2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994) #include \"math.h\"\n"
+msgstr ""
+"176410 bde 2008-02-19 07:42:46 -0800 (Tue, 19 Feb 2008) #include <sys/"
+"cdefs.h>\n"
+"176410 bde 2008-02-19 07:42:46 -0800 (Tue, 19 Feb 2008) __FBSDID(\""
+"$FreeBSD$\");\n"
+" 2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994) \n"
+" 2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994) /* "
+"__ieee754_rem_pio2f(x,y)\n"
+" 8870 rgrimes 1995-05-29 22:51:47 -0700 (Mon, 29 May 1995) *\n"
+"176552 bde 2008-02-25 05:33:20 -0800 (Mon, 25 Feb 2008) * return the "
+"remainder of x rem pi/2 in *y\n"
+"176552 bde 2008-02-25 05:33:20 -0800 (Mon, 25 Feb 2008) * use double "
+"precision for everything except passing x\n"
+"152535 bde 2005-11-16 18:20:04 -0800 (Wed, 16 Nov 2005) * use "
+"__kernel_rem_pio2() for large x\n"
+" 2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994) */\n"
+" 2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994) \n"
+"176465 bde 2008-02-22 07:55:14 -0800 (Fri, 22 Feb 2008) #include "
+"<float.h>\n"
+"176465 bde 2008-02-22 07:55:14 -0800 (Fri, 22 Feb 2008) \n"
+" 2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994) #include "
+"\"math.h\"\n"
+
+#. type: Block title
+#: documentation/content/en/articles/building-products/_index.adoc:306
+#, no-wrap
+msgid "An annotated source listing generated using `svn blame` [[fig-svn-blame]]"
+msgstr ""
+"Uma listagem de origem anotada gerada usando `svn blame` [[fig-svn-blame]]"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:309
+#, no-wrap
+msgid "*Use a gatekeeper.* Appoint a _gatekeeper_ to monitor FreeBSD development, to keep an eye out for changes that could potentially impact your products.\n"
+msgstr ""
+"*Use um gatekeeper.* Nomeie um _gatekeeper_ para monitorar o desenvolvimento "
+"do FreeBSD, para ficar de olho em mudanças que possam potencialmente "
+"impactar seus produtos.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:312
+#, no-wrap
+msgid ""
+"*Report bugs upstream.* If you notice bug in the FreeBSD code that you are using, file a https://www.FreeBSD.org/support/bugreports/[bug report].\n"
+"This step helps ensure that you do not have to fix the bug the next time you take a code drop from upstream.\n"
+msgstr ""
+"*Relate bugs upstream.* Se você notar algum bug no código do FreeBSD que "
+"está usando, envie um https://www.FreeBSD.org/support/bugreports/[relatório "
+"de bug]. Esse passo ajuda a garantir que você não precise corrigir o bug na "
+"próxima vez que fizer uma atualização de código do upstream.\n"
+
+#. type: Labeled list
+#: documentation/content/en/articles/building-products/_index.adoc:312
+#, no-wrap
+msgid "Leverage FreeBSD's release engineering efforts"
+msgstr "Se alavanque nos esforços de engenharia do FreeBSD para lançamento de novas versões"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:315
+msgid ""
+"Use code from a -STABLE development branch of FreeBSD. These development "
+"branches are formally supported by FreeBSD's release engineering and "
+"security teams and comprise of tested code."
+msgstr ""
+"Utilize código da branch de desenvolvimento -STABLE do FreeBSD. Este branch "
+"de desenvolvimento é formalmente suportado pelas equipes de engenharia de "
+"release e de segurança, e é formada apenas por código testado."
+
+#. type: Labeled list
+#: documentation/content/en/articles/building-products/_index.adoc:316
+#, no-wrap
+msgid "Donate code to reduce costs"
+msgstr "Doe código para reduzir seus custos"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:320
+msgid ""
+"A major proportion of the costs associated with developing products is that "
+"of doing maintenance. By donating non-critical code to the project, you "
+"benefit by having your code see much wider exposure than it would otherwise "
+"get. This in turn leads to more bugs and security vulnerabilities being "
+"flushed out and performance anomalies being identified and fixed."
+msgstr ""
+"Uma parte significativa dos custos relacionados ao desenvolvimento de um "
+"produto é o de realizar a sua manutenção. Ao doar partes não criticas do seu "
+"código para o projeto, você se beneficia por ter o seu código exposto de uma "
+"forma ampla, exposição que ele não teria de outra forma. Esta exposição por "
+"sua vez leva eliminação de um maior numero de bugs e de vulnerabilidades de "
+"segurança, e permite que anomalias de desempenho sejam identificadas e "
+"corrigidas."
+
+#. type: Labeled list
+#: documentation/content/en/articles/building-products/_index.adoc:321
+#, no-wrap
+msgid "Get support effectively"
+msgstr "Obtenha suporte efetivo"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:326
+msgid ""
+"For products with tight deadlines, it is recommended that you hire or enter "
+"into a consulting agreement with a developer or firm with FreeBSD "
+"experience. The {freebsd-jobs} is a useful communication channel to find "
+"talent. The FreeBSD project maintains a link:https://www.FreeBSD.org/"
+"commercial/consult_bycat/[gallery of consultants and consulting firms] "
+"undertaking FreeBSD work. The http://www.bsdcertification.org/[BSD "
+"Certification Group] offers certification for all the major BSD derived OSes."
+msgstr ""
+"Para produtos com prazos apertados, é recomendado contratar ou entrar em um "
+"acordo de consultoria com um desenvolvedor ou empresa com experiência em "
+"FreeBSD. O {freebsd-jobs} é um canal de comunicação útil para encontrar "
+"talentos. O projeto FreeBSD mantém uma link:https://www.FreeBSD.org/"
+"commercial/consult_bycat/[galeria de consultores e empresas de consultoria] "
+"que realizam trabalhos em FreeBSD. O http://www.bsdcertification.org/[Grupo "
+"de Certificação BSD] oferece certificação para todos os principais sistemas "
+"operacionais derivados do BSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:329
+msgid ""
+"For less critical needs, you can ask for help on the link:https://lists."
+"freebsd.org/[project mailing lists]. A useful guide to follow when asking "
+"for help is given in <<Ray2004>>."
+msgstr ""
+"Para necessidades menos críticas, você pode pedir ajuda nas "
+"link:https://lists.freebsd.org/[listas de discussão do projeto]. Um guia "
+"útil a seguir ao pedir ajuda é dado em <<Ray2004>>."
+
+#. type: Labeled list
+#: documentation/content/en/articles/building-products/_index.adoc:329
+#, no-wrap
+msgid "Publicize your involvement"
+msgstr "Divulgue o seu envolvimento"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:331
+msgid ""
+"You are not required to publicize your use of FreeBSD, but doing so helps "
+"both your effort as well as that of the project."
+msgstr ""
+"Você não é obrigado a divulgar que faz uso do FreeBSD, mas ao fazê-lo você "
+"estará ajudando ambos os esforços, o seu e o do projeto."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:335
+msgid ""
+"Letting the FreeBSD community know that your company uses FreeBSD helps "
+"improve your chances of attracting high quality talent. A large roster of "
+"support for FreeBSD also means more mind share for it among developers. "
+"This in turn yields a healthier foundation for your future."
+msgstr ""
+"Dar visibilidade para a comunidade FreeBSD de que a sua empresa utiliza o "
+"sistema ajuda a melhorar as suas chances de atrair talentos de alta "
+"qualidade. Quanto maior for a lista de organizações que apoiam o FreeBSD "
+"maior será a presença do sistema na cabeça (mind share) dos desenvolvedores. "
+"Ao contribuir para aumentar o numero de desenvolvedores interessados no "
+"FreeBSD, você estará gerando uma base saudável para o seu futuro."
+
+#. type: Labeled list
+#: documentation/content/en/articles/building-products/_index.adoc:335
+#, no-wrap
+msgid "Support FreeBSD developers"
+msgstr "Suporte os desenvolvedores do FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:341
+msgid ""
+"Sometimes the most direct way to get a desired feature into FreeBSD is to "
+"support a developer who is already looking at a related problem. Help can "
+"range from hardware donations to direct financial assistance. In some "
+"countries, donations to the FreeBSD project enjoy tax benefits. The project "
+"has a dedicated link:https://www.FreeBSD.org/donations/[donations liaison] "
+"to assist donors. The project also maintains a web page where developers "
+"link:https://www.FreeBSD.org/donations/wantlist/[list their needs]."
+msgstr ""
+"Às vezes, a maneira mais direta de obter um recurso desejado no FreeBSD é "
+"apoiar um desenvolvedor que já está trabalhando em um problema relacionado. "
+"A ajuda pode variar desde doações de hardware até assistência financeira "
+"direta. Em alguns países, as doações ao projeto FreeBSD são isentas de "
+"impostos. O projeto possui uma link:https://www.FreeBSD.org/donations/[área "
+"de doações] dedicada para ajudar doadores. O projeto também mantém uma "
+"página da web onde os desenvolvedores link:https://www.FreeBSD.org/donations/"
+"wantlist/[listam suas necessidades]."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:343
+msgid ""
+"As a policy the FreeBSD project extref:{contributors}[acknowledges] all "
+"contributions received on its web site."
+msgstr ""
+"Como política, o projeto FreeBSD extref:{contributors}[reconhece] todas as "
+"contribuições recebidas em seu site."
+
+#. type: Title ==
+#: documentation/content/en/articles/building-products/_index.adoc:345
+#, no-wrap
+msgid "Conclusion"
+msgstr "Conclusão"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:349
+msgid ""
+"The FreeBSD project's goals are to create and give away the source code for "
+"a high-quality operating system. By working with the FreeBSD project you "
+"can reduce development costs and improve your time to market in a number of "
+"product development scenarios."
+msgstr ""
+"O Objetivo do projeto FreeBSD é criar e distribuir o código fonte de um "
+"sistema operacional de alta qualidade. Ao trabalhar com o projeto FreeBSD "
+"você pode reduzir os seus custos de desenvolvimento e melhorar o tempo "
+"necessário para lançar seus novos produtos no mercado em vários cenários de "
+"desenvolvimento de produtos."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:353
+msgid ""
+"We examined the characteristics of the FreeBSD project that make it an "
+"excellent choice for being part of an organization's product strategy. We "
+"then looked at the prevailing culture of the project and examined effective "
+"ways of interacting with its developers. The article concluded with a list "
+"of best-practices that could help organizations collaborating with the "
+"project."
+msgstr ""
+"Nós examinamos as características do projeto FreeBSD que o tornam uma "
+"excelente escolha para fazer parte da estratégia de produtos de uma "
+"organização. Em seguida, examinamos a cultura predominante do projeto e "
+"examinamos maneiras eficazes de interagir com seus desenvolvedores. O artigo "
+"concluiu com uma lista de melhores práticas que podem ajudar as organizações "
+"a colaborar com o projeto."
+
+#. type: Title ==
+#: documentation/content/en/articles/building-products/_index.adoc:357
+#, no-wrap
+msgid "Bibliography"
+msgstr "Bibliografia"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:360
+msgid ""
+"[[Carp1996]] [Carp1996] http://www.ietf.org/rfc/rfc1958.txt[The "
+"Architectural Principles of the Internet] B. Carpenter. The Internet "
+"Architecture Board.The Internet Architecture Board. Copyright(R) 1996."
+msgstr ""
+"[[Carp1996]] [Carp1996] http://www.ietf.org/rfc/rfc1958.txt[Os Princípios "
+"Arquitetônicos da Internet]. The Internet Architecture Board. Copyright(R) "
+"1996."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:362
+msgid ""
+"[[ComGuide]] [ComGuide] extref:{committers-guide}[Committer's Guide] The "
+"FreeBSD Project. Copyright(R) 2005."
+msgstr ""
+"[[ComGuide]] [ComGuide] extref:{committers-guide}[Guia do Comitter] O "
+"Projeto FreeBSD. Direitos Autorais(R) 2005."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:364
+msgid ""
+"[[GoldGab2005]] [GoldGab2005] http://dreamsongs.com/IHE/IHE.html[Innovation "
+"Happens Elsewhere: Open Source as Business Strategy] Ron Goldman. Richard "
+"Gabriel. Copyright(R) 2005. Morgan-Kaufmann."
+msgstr ""
+"[[GoldGab2005]] [GoldGab2005] http://dreamsongs.com/IHE/IHE.html[Inovação "
+"Acontece em Outros Lugares: Código Aberto como Estratégia de Negócios] Ron "
+"Goldman. Richard Gabriel. Copyright(R) 2005. Morgan-Kaufmann."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:366
+msgid ""
+"[[Hub1994]] [Hub1994] extref:{contributing}[Contributing to the FreeBSD "
+"Project] Jordan Hubbard. Copyright(R) 1994-2005. The FreeBSD Project."
+msgstr ""
+"[[Hub1994]] [Hub1994] extref:{contributing}[Contribuindo para o Projeto "
+"FreeBSD] Jordan Hubbard. Copyright(R) 1994-2005. The FreeBSD Project."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:368
+msgid ""
+"[[McKu1999]] [McKu1999] http://www.usenix.org/publications/library/"
+"proceedings/usenix99/mckusick.html[Soft Updates: A Technique for Eliminating "
+"Most Synchronous Writes in the Fast Filesystem] Kirk McKusick. Gregory "
+"Ganger. Copyright(R) 1999."
+msgstr ""
+"[[McKu1999]] [McKu1999] http://www.usenix.org/publications/library/"
+"proceedings/usenix99/mckusick.html[Soft Updates: Uma técnica para eliminar a "
+"maioria das gravações síncronas no sistema de arquivos rápido] Kirk "
+"McKusick. Gregory Ganger. Copyright(R) 1999."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:370
+msgid ""
+"[[McKu1999-1]] [McKu1999-1] http://www.oreilly.com/catalog/opensources/book/"
+"kirkmck.html[Twenty Years of Berkeley Unix: From AT&T-Owned to Freely "
+"Redistributable] Marshall Kirk McKusick. http://www.oreilly.com/catalog/"
+"opensources/book/toc.html[Open Sources: Voices from the Open Source "
+"Revolution] O'Reilly Inc.. Copyright(R) 1993."
+msgstr ""
+"[[McKu1999-1]] [McKu1999-1] http://www.oreilly.com/catalog/opensources/book/"
+"kirkmck.html[Vinte anos de Unix Berkeley: de propriedade da AT&T à "
+"redistribuição livre] Marshall Kirk McKusick. http://www.oreilly.com/catalog/"
+"opensources/book/toc.html[Open Sources: Vozes da Revolução Open Source] "
+"O'Reilly Inc.. Copyright(R) 1993."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:372
+msgid ""
+"[[Mon2005]] [Mon2005] extref:{bsdl-gpl}[Why you should use a BSD style "
+"license for your Open Source Project] Bruce Montague. The FreeBSD Project. "
+"Copyright(R) 2005."
+msgstr ""
+"[[Mon2005]] [Mon2005] extref:{bsdl-gpl}[Por que você deveria usar uma "
+"licença de estilo BSD para o seu projeto de código aberto.] Bruce Montague. "
+"The FreeBSD Project. Copyright(R) 2005."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:374
+msgid ""
+"[[Nik2005]] [Nik2005] extref:{dev-model}[A project model for the FreeBSD "
+"Project] Niklas Saers. Copyright(R) 2005. The FreeBSD Project."
+msgstr ""
+"[[Nik2005]] [Nik2005] extref:{dev-model}[Um modelo de projeto para o Projeto "
+"FreeBSD] Niklas Saers. Copyright(R) 2005. The FreeBSD Project."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:376
+msgid ""
+"[[Nor1993]] [Nor1993] http://www.norvig.com/luv-slides.ps[Tutorial on Good "
+"Lisp Programming Style] Peter Norvig. Kent Pitman. Copyright(R) 1993."
+msgstr ""
+"[[Nor1993]] [Nor1993] http://www.norvig.com/luv-slides.ps[Tutorial sobre Bom "
+"Estilo de Programação em Lisp.] Peter Norvig. Kent Pitman. Copyright(R) 1993."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:378
+msgid ""
+"[[Nor2001]] [Nor2001] http://www.norvig.com/21-days.html[Teach Yourself "
+"Programming in Ten Years] Peter Norvig. Copyright(R) 2001."
+msgstr ""
+"[[Nor2001]] [Nor2001] http://www.norvig.com/21-days.html[Ensine a si mesmo a "
+"programar em dez anos.] Peter Norvig. Copyright(R) 2001."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:380
+msgid ""
+"[[Ray2004]] [Ray2004] http://www.catb.org/~esr/faqs/smart-questions.html[How "
+"to ask questions the smart way] Eric Steven Raymond. Copyright(R) 2004."
+msgstr ""
+"[[Ray2004]] [Ray2004] http://www.catb.org/~esr/faqs/smart-questions.html["
+"Como fazer perguntas de forma inteligente] Eric Steven Raymond. Copyright(R) "
+"2004."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:381
+msgid ""
+"[[RelEngDoc]] [RelEngDoc] extref:{releng}[FreeBSD Release Engineering] "
+"Murray Stokely. Copyright(R) 2001. The FreeBSD Project."
+msgstr ""
+"[[RelEngDoc]] [RelEngDoc] extref:{releng}[Engenharia de Releases do FreeBSD] "
+"Murray Stokely. Copyright(R) 2001. The FreeBSD Project."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/contributing/_index.adoc b/documentation/content/pt-br/articles/contributing/_index.adoc
index a925b0beca..e0be1ae8ad 100644
--- a/documentation/content/pt-br/articles/contributing/_index.adoc
+++ b/documentation/content/pt-br/articles/contributing/_index.adoc
@@ -1,10 +1,16 @@
---
-title: Contribuindo com o FreeBSD
authors:
- - author: Jordan Hubbard
- - author: Sam Lawrance
- - author: Mark Linimon
+ -
+ author: 'Jordan Hubbard'
+ -
+ author: 'Sam Lawrance'
+ -
+ author: 'Mark Linimon'
+description: 'Como contribuir para o Projeto FreeBSD'
+tags: ["Contributing", "FreeBSD", "Non-Programmer Tasks", "Programmer Tasks"]
+title: 'Contribuindo com o FreeBSD'
trademarks: ["freebsd", "ieee", "general"]
+weight: 15
---
= Contribuindo com o FreeBSD
@@ -47,156 +53,170 @@ Este artigo descreve maneiras diferentes sobre como um indivíduo ou organizaç
toc::[]
-Então você quer contribuir com o FreeBSD? Isso é ótimo! O FreeBSD _depende_ das contribuições da sua base de usuários para sobreviver. Suas contribuições não são apenas apreciadas, elas são vitais para que o FreeBSD continue crescendo.
+Então você quer contribuir para o FreeBSD? Isso é ótimo! O FreeBSD _depende_ das contribuições de sua base de usuários para sobreviver. Suas contribuições não são apenas apreciadas, elas são vitais para o crescimento contínuo do FreeBSD.
-Um grande e crescente número de contribuidores internacionais, de uma grande variedade de idade e áreas de conhecimento técnico, desenvolvem o FreeBSD. Sempre existe mais trabalho a ser feito do que pessoas disponíveis para realizá-lo, e mais ajuda é sempre bem vinda.
+Um grande e crescente número de colaboradores internacionais, de idades e áreas de experiência técnica muito diversas, desenvolvem o FreeBSD. Sempre há mais trabalho a ser feito do que pessoas disponíveis para fazê-lo, e mais ajuda sempre é apreciada.
-Como um voluntário, o que você pode fazer só é limitado pelo que você quer fazer. Entretanto, o que lhe pedimos é que esteja ciente a respeito do que outros membros da comunidade FreeBSD esperará de você. Você pode querer levar isso em consideração antes de decidir se voluntariar.
+Como voluntário, o que você faz é limitado apenas pelo que você quer fazer. No entanto, pedimos que você esteja ciente do que outros membros da comunidade FreeBSD esperarão de você. Você pode querer levar isso em consideração antes de decidir ser um voluntário.
-O Projeto FreeBSD é responsável por um ambiente completo de sistema operacional, em vez de apenas um kernel ou alguns utilitários dispersos. Assim sendo, nossa lista [.filename]#TODO# passa por uma grande variedade de tarefas: da documentação do sistema, testes de versão beta e apresentação, ao instalador do sistema e outros tipos altamente especializados de desenvolvimento do kernel. Pessoas de qualquer nível de conhecimento, em quase qualquer área, quase que certamente poderá ajudar no projeto.
+O projeto FreeBSD é responsável por um ambiente completo de sistema operacional, em vez de apenas um kernel ou alguns utilitários espalhados. Como tal, nossas listas de [.filename]#TODO# abrangem uma ampla gama de tarefas: desde documentação, teste beta e apresentação, até o instalador do sistema e tipos altamente especializados de desenvolvimento de kernel. Pessoas de qualquer nível de habilidade, em quase qualquer área, certamente podem ajudar o projeto.
-Entidades comerciais engajadas em iniciativas relacionadas ao FreeBSD também são encorajadas a entrar em contato conosco. Você precisa de uma extensão especial para fazer seu produto funcionar? Você vai nos encontrar receptivos às suas solicitações, considerando que não sejam muito estranhas. Está trabalhando em um produto de valor adicionado? Por favor nos informe! Podemos ser capazes de trabalhar cooperativamente em algum aspecto dele. O mundo do software livre está desafiando muitas premissas sobre como um software é desenvolvido, vendido e mantido, e nós pedimos que você pelo de uma segunda olhada.
+Empresas comerciais envolvidas em empreendimentos relacionados ao FreeBSD também são incentivadas a entrar em contato conosco. Precisa de uma extensão especial para fazer seu produto funcionar? Você nos encontrará receptivos às suas solicitações, desde que não sejam muito absurdas. Você está trabalhando em um produto de valor agregado? Por favor, nos informe! Podemos trabalhar cooperativamente em algum aspecto disso. O mundo do software livre está desafiando muitas suposições existentes sobre como o software é desenvolvido, vendido e mantido, e instamos você a pelo menos dar uma segunda olhada.
[[contrib-what]]
== O que é necessário
-A lista de tarefas e sub-projetos a seguir representa algo como uma amálgama de várias listas de [.filename]#TODO# e outras solicitações.
+A lista a seguir de tarefas e subprojetos representa algo como uma amálgama de várias listas de [.filename]#TODO# e de solicitações de usuários.
[[non-programmer-tasks]]
-=== Tarefas em execução por não-programadores.
+=== Tarefas contínuas não relacionadas à programação
-Muitas pessoas que estão envolvidas com o FreeBSD não são programadores. O Projeto inclui escritores de documentação, Web designers, e pessoas de suporte. Todas estas pessoas contribuem investindo tempo e sua vontade de aprender.
+Muitas pessoas envolvidas no FreeBSD não são programadoras. O Projeto inclui escritores de documentação, web designers e pessoas de suporte. Tudo o que essas pessoas precisam para contribuir é investir tempo e estar dispostas a aprender.
-. Leia o FAQ e Handbook periodicamente. Se algo estiver explicado de forma pobre, ambígua, desatualizada ou incorreta, nos comunique. Melhor ainda, envie-nos uma versão ajustada (O formato Docbook não é difícil de aprender, mas não existem objeções em relação ao envio de material no formato ASCII).
-. Ajude a traduzir a documentação do FreeBSD para a sua linguagem nativa. Se a documentação já existe na sua língua, você pode ajudar a traduzir documentos adicionais ou verificar se as traduções estão atualizadas e corretas. Primeiro dê uma olhada no extref:{fdp-primer}[FAQ de Traduções, translations] contido no Manual de Documentação do Projeto FreeBSD. Você não estará se comprometendo a traduzir toda a documentação do FreeBSD fazendo isto - como um voluntário, você pode fazer tantas quantas traduções desejar. Uma vez que alguém começa a traduzir, outros se unem ao esforço. Se você tem tempo ou energia para traduzir apenas uma parte da documentação, por favor traduza as instruções de instalação.
-. Leia a http://lists.FreeBSD.org/mailman/listinfo/freebsd-questions[lista de discussão para perguntas gerais sobre o FreeBSD] ocasionalmente (ou regularmente se possível). Pode ser muito recompensador compartilhar a sua experiência e ajudar outras pessoas a resolverem seus problemas; Às vezes você poderá até aprender algo novo! Estes fóruns também podem ser uma fonte de ideias de coisas a serem melhoradas.
+. Leia periodicamente o FAQ e o Handbook. Se algo estiver mal explicado, ambíguo, desatualizado ou incorreto, avise-nos. Ainda melhor, envie-nos uma correção (AsciiDoc não é difícil de aprender, mas não há objeção a submissões em texto simples).
+. Ajude a traduzir a documentação do FreeBSD para seu idioma nativo. Se já existir documentação em seu idioma, você pode ajudar a traduzir documentos adicionais ou verificar se as traduções estão atualizadas e corretas. Primeiro, dê uma olhada no extref:{fdp-primer}[FAQ de traduções, translations] no FreeBSD Documentation Project Primer. Ao fazer isso, você não está se comprometendo a traduzir todos os documentos do FreeBSD - como voluntário, você pode traduzir tanto quanto desejar. Uma vez que alguém começa a traduzir, outros quase sempre se juntam ao esforço. Se você só tem tempo ou energia para traduzir uma parte da documentação, por favor, traduza as instruções de instalação.
+. Leia ocasionalmente (ou mesmo regularmente) a {freebsd-questions}. Pode ser muito satisfatório compartilhar sua expertise e ajudar as pessoas a resolverem seus problemas; às vezes, você pode até aprender algo novo! Esses fóruns também podem ser uma fonte de ideias para melhorias.
[[ongoing-programmer-tasks]]
-=== Tarefas em execução por programadores
-
-A maioria das tarefas listadas aqui requerem um investimento considerável de tempo ou conhecimento profundo do kernel do FreeBSD; ou, ambos. Entretanto, também existem muitas tarefas úteis que são apropriadas para os "hackers de final de semana".
-
-. Se você executa o FreeBSD-CURRENT e possui uma boa conexão com a Internet, existe uma máquina `current.FreeBSD.org` a qual compila uma release completa uma vez por dia - de vez em quando, tente instalar uma destas versões e informe quaisquer problemas no processo.
-. Leia a http://lists.FreeBSD.org/mailman/listinfo/freebsd-bugs[Lista de discussão de relatórios de problemas do FreeBSD]. Talvez exista um problema que você possa comentar construtivamente ou existam correções que você possa testar. Ou você pode até consertar um dos problemas por conta própria.
-. Se você souber de qualquer problema que tenha sido corrigido com sucesso no -CURRENT e cuja correção não tenha sido aplicada ao -STABLE após um intervalo razoável de tempo (normalmente algumas semanas), envie ao committer um lembrete educado.
-. Mova as contribuições de software para [.filename]#src/contrib# na árvore do código fonte.
-. Tenha certeza que o código disponível em [.filename]#src/contrib# está atualizado.
-. Compile o sistema (ou apenas uma parte dele) com um nível de debug extra habilitado e corrija a causa dos alertas encontrados.
-. Corrija os alertas existentes para os ports que ainda fazem coisas ultrapassadas tais como utilizar `gets()` ou incluir [.filename]#malloc.h#.
-. Se você contribuiu com algum dos ports, e teve que fazer alguma mudança específica para o FreeBSD, envie suas correções de volta aos autores originais (isto tornará sua vida mais fácil quando eles lançarem a próxima versão).
-. Consiga cópias de padrões formais tais como o POSIX(R). Compare o comportamento do FreeBSD àquele requerido pelo padrão. Se o comportamento diferir, particularmente em pontos sutis ou obscuros da especificação, envie-nos um PR sobre ele. Se você for capaz, descubra como corrigi-lo e inclua um patch em seu PR. Se você acredita que o padrão está errado, peça ao comitê de padrões que considere a pergunta.
+=== Tarefas contínuas para programadores
+
+A maioria das tarefas listadas aqui pode exigir um investimento considerável de tempo, um conhecimento aprofundado do kernel do FreeBSD, ou ambos. No entanto, também existem muitas tarefas úteis que são adequadas para "hackers de fim de semana".
+
+. Se você está executando o FreeBSD-CURRENT e tem uma boa conexão com a Internet, há uma máquina chamada `current.FreeBSD.org` que cria uma versão completa uma vez por dia - de tempos em tempos, tente instalar a versão mais recente dela e relate quaisquer falhas no processo.
+. Leia a {freebsd-bugs}. Pode haver um problema no qual você possa comentar de forma construtiva ou com patches que possa testar. Ou você poderia até mesmo tentar corrigir um dos problemas sozinho.
+. Se você souber de correções de bugs que foram aplicadas com sucesso ao -CURRENT, mas ainda não foram mescladas ao -STABLE após um intervalo razoável (normalmente algumas semanas), envie um lembrete educado ao committer responsável.
+. Mova o software contribuído para [.filename]#src/contrib# no diretório de código-fonte.
+. Certifique-se de que o código em [.filename]#src/contrib# esteja atualizado.
+. Compile o de código-fonte do sistema (ou apenas parte dele) com avisos extras ativados e limpe os avisos. Uma lista de avisos de compilação também pode ser encontrada em nosso https://ci.freebsd.org[CI] selecionando uma compilação e verificando "LLVM/Clang Warnings".
+. Corrija os avisos para ports que fazem coisas depreciadas, como usar `gets()` ou incluir [.filename]#malloc.h#.
+. Se você contribuiu com quaisquer ports e teve que fazer mudanças específicas para o FreeBSD, envie seus patches de volta para os autores originais (isso facilitará sua vida quando eles lançarem a próxima versão).
+. Obtenha cópias dos padrões formais, como o POSIX(R). Compare o comportamento do FreeBSD com o exigido pelo padrão. Se o comportamento for diferente, especialmente em cantos sutis ou obscuros da especificação, envie um PR sobre isso. Se puder, descubra como corrigi-lo e inclua um patch no PR. Se achar que o padrão está errado, peça ao organismo responsável pelos padrões para considerar a questão.
. Sugira novas tarefas para esta lista!
-=== Trabalhe no banco de dados de PR (relatório de problemas)
+=== Trabalhe no Banco de Dados de PR (Relatório de Problema) do FreeBSD
-A https://bugs.FreeBSD.org/search/[Lista de PRs do FreeBSD] mostra todos os relatórios de problemas ativos no momento e os pedidos de melhoria que foram submetidos pelos usuários do FreeBSD. O banco de dados inclui tarefas para programadores e para não-programadores. Consulte os PRs abertos, e veja se algum deles é de seu interesse. Alguns deles podem ser tarefas muito simples que necessitam apenas que um par extra de olhos olhe para eles e confirme que a correção proposta funciona. Outros podem ser muito mais complexos, ou podem nem ter vindo com uma correção.
+A https://bugs.FreeBSD.org/search/[lista de PRs do FreeBSD] mostra todos os relatórios de problemas ativos e solicitações de aprimoramento que foram enviados pelos usuários do FreeBSD. O banco de dados de PRs inclui tarefas tanto para programadores quanto para não-programadores. Olhe através dos PRs abertos e veja se algo lhe interessa. Alguns desses podem ser tarefas muito simples que só precisam de um par extra de olhos para examiná-los e confirmar que a correção no PR é boa. Outros podem ser muito mais complexos, ou podem nem mesmo ter uma correção incluída.
-Comece com os PRs que ainda não foram atribuídos a ninguém. Se um PR estiver atribuído a outra pessoa, mas se parecer com algo que você possa cuidar, envie um e-mail para a pessoa encarregada do mesmo e pergunte se você pode trabalhar nele -- ele pode já ter um patch pronto para ser testado, ou você pode discutir novas idéias com ele.
+Comece com os PRs que não foram atribuídos a mais ninguém. Se um PR foi atribuído a outra pessoa, mas parece algo que você pode lidar, envie um e-mail para a pessoa a quem foi atribuído e pergunte se você pode trabalhar nele - eles podem já ter um patch pronto para ser testado ou outras ideias que você possa discutir com eles.
-=== Tarefas em andamento relacionadas a coleção de Ports
+=== Tarefas contínuas relacionadas a coleção de ports
-A coleção de Ports é um trabalho permanente em andamento. Queremos fornecer aos nossos usuários um repositório de software de terceiros fácil de usar, atualizado e de alta qualidade. Precisamos que as pessoas doem parte de seu tempo e esforço para nos ajudar a alcançar esse objetivo.
+A coleção de ports é um trabalho contínuo em andamento. Queremos fornecer aos nossos usuários um repositório de software de terceiros fácil de usar, atualizado e de alta qualidade. Precisamos que as pessoas doem parte de seu tempo e esforço para nos ajudar a alcançar esse objetivo.
-Qualquer um pode se envolver e existem muitas maneiras diferentes de fazer isso. Contribuir para a coleção de ports é uma excelente maneira de ajudar "a devolver algo" ao projeto. Se você está procurando um papel contínuo ou um desafio divertido para um dia chuvoso, nós adoraríamos ter a sua ajuda!
+Qualquer um pode se envolver e há muitas maneiras diferentes de fazer isso. Contribuir para os ports é uma excelente maneira de ajudar a "retribuir" algo ao projeto. Se você está procurando um papel contínuo ou um desafio divertido para um dia chuvoso, adoraríamos ter a sua ajuda!
-Existem várias maneiras fáceis de contribuir para manter a árvore de ports atualizada e em boas condições de funcionamento:
+Há várias maneiras fáceis de contribuir para manter a árvore de ports atualizada e em bom funcionamento:
* Encontre algum software legal ou útil e extref:{porters-handbook}[crie um port] para ele.
-* Existe um grande número de ports que não possuem nenhum mantenedor. Torne-se um mantenedor e <<adopt-port>>.
-* Se você criou ou adotou um port, esteja ciente <<maintain-port>>.
-* Quando estiver procurando um desafio você poderá <<fix-broken>>.
+* Há muitos ports que não têm mantenedor. Torne-se um mantenedor e adote-o (<<adopt-port>>).
+* Se você criou ou adotou um port, esteja ciente sobre <<maintain-port>>.
+* Quando você estiver procurando um desafio rápido, <<fix-broken>>.
-=== Escolha um dos itens da "`página de idéias`"
+=== Escolha um dos itens da “página de idéias”
-A https://wiki.freebsd.org/IdeasPage[lista de projetos do FreeBSD e de idéias para voluntários] também está disponível para as pessoas dispostas a contribuir com o projeto FreeBSD. Esta lista é atualizada regularmente e contém itens tanto para programadores e como para não programadores e traz ainda informações sobre cada projeto .
+A https://wiki.freebsd.org/IdeasPage[lista de projetos e ideias para voluntários] do FreeBSD também está disponível para pessoas dispostas a contribuir para o projeto FreeBSD. A lista é atualizada regularmente e contém itens para programadores e não-programadores, com informações sobre cada projeto.
[[contrib-how]]
== Como Contribuir
-Contribuições para o sistema geralmente se enquadram em uma das 5 categorias seguintes:
+As contribuições para o sistema geralmente se enquadram em uma ou mais das seguintes 5 categorias:
[[contrib-general]]
=== Relatórios de Bugs e Comentários Gerais
-Uma ideia ou sugestão técnica de interesse _geral_ deverá ser enviada para a http://lists.FreeBSD.org/mailman/listinfo/freebsd-hackers[Lista de discussão de assuntos técnicos do FreeBSD]. Da mesma forma, pessoas com este tipo de interesse (e tolerância para um _alto_ volume de mensagens!) poderão assinar a http://lists.FreeBSD.org/mailman/listinfo/freebsd-hackers[Lista de discussão de assuntos técnicos do FreeBSD]. Veja o extref:{handbook}eresources[Handbook do FreeBSD, eresources-mail] para mais informações sobre esta e outras listas.
+Uma ideia ou sugestão de interesse técnico _geral_ deve ser enviada para a {freebsd-hackers}. Da mesma forma, pessoas com interesse nesses assuntos (e tolerância para um volume _alto_ de mensagens!) podem se inscrever na {freebsd-hackers}. Consulte o extref:{handbook}[Handbook do FreeBSD, eresources-mail] para obter mais informações sobre esta e outras listas de e-mail.
-Se você encontrar um bug ou estiver enviando uma mudança específica, por favor relate-o usando o https://bugs.FreeBSD.org/submit/[relatório de envio de bug]. Tente preencher cada campo com do relato de bug. A não ser que exceda 65KB, inclua qualquer correção diretamente no relatório. Se o patch é apropriado para ser aplicado na árvore do código fonte coloque `[PATCH]` no resumo do relatório. Ao incluir patches, _não_ use copiar-e-colar, pois o copiar-e-colar transforma tabs em espaços e os torna inúteis. Quando os patches são muito maiores que 20KB, considere comprimi-los (por exemplo, com man:gzip[1] ou man:bzip2[1]) antes de fazer o envio.
+Se você está enviando um patch simples para o repositório src, considere enviar um https://github.com/freebsd/freebsd-src/pulls[pull request] para o espelho do projeto no GitHub. Envios adequados devem:
-Após preencher o relatório, você receberá a confirmação com o número de rastreamento. Guarde este número para que você possa nos atualizar com detalhes sobre do problema.
+* Estar pronto ou quase pronto para ser Commitado. Um committer deve ser capaz de aplicar este patch com menos de 10 minutos de trabalho adicional.
+* Ele passa em todos os trabalhos de CI do GitHub.
+* Você pode responder rapidamente a feedbacks.
+* Ele afeta menos de 10 arquivos e as mudanças têm menos de 200 linhas. Mudanças maiores do que isso podem ser OK, ou você pode ser solicitado a enviar vários pull requests de um tamanho mais gerenciável.
+* Cada mudança lógica é um commit separado dentro do pull request. As mensagens de commit para cada mudança devem seguir o extref:{committers-guide}#commit-log-message[guia de log de commit].
+* Todos os commits têm o seu nome e um endereço de e-mail válido como você gostaria de vê-los no repositório do FreeBSD como autor. Endereços falsos do github.com não podem ser usados.
+* O escopo do pull request não deve ser alterado durante a revisão. Se a revisão sugerir mudanças que expandam o escopo, crie um pull request independente.
+* Commits de correção devem ser combinados com o commit que estão corrigindo. Cada commit em seu branch deve ser adequado para o repositório do FreeBSD.
+* Os commits devem incluir uma ou mais linhas `Signed-off-by:` com nome completo e endereço de e-mail certificando o https://developercertificate.org/[Certificado de Origem do Desenvolvedor].
+
+Ao atualizar um pull request, por favor faça o rebase com um push forçado em vez de um commit de merge. Mudanças mais complexas podem ser submetidas como pull requests, mas podem ser fechadas se forem muito grandes, difíceis de manusear, tornarem-se inativas, precisarem de mais discussão na comunidade ou precisarem de uma revisão extensa. Por favor, evite criar grandes patches de limpeza abrangentes: eles são muito grandes e não têm o foco necessário para uma boa revisão. Patches mal direcionados podem ser redirecionados para um fórum mais apropriado para a resolução do patch.
+
+Os pull requests submetidos ao repositório de ports podem ou não receber atenção, dependendo do interesse dos desenvolvedores. Por enquanto, para ter uma melhor experiência é melhor seguir o processo de submissão de ports descrito na seção <<ports-contributing>> .
+
+A equipe de documentação também aceita pull requests via GitHub, mas ainda não estabeleceu nenhuma política para eles.
+
+Se você encontrar um bug ou estiver enviando uma mudança específica, por favor relate-o usando o https://bugs.FreeBSD.org/submit/[formulário de submissão de bug]. Tente preencher cada campo do relatório de bug. A menos que excedam 65KB, inclua quaisquer patches diretamente no relatório. Se o patch for adequado para ser aplicado à árvore de código fonte, coloque `[PATCH]` na sinopse do relatório. Ao incluir patches, _não_ use o copiar e colar, pois o copiar e colar transforma os tabs em espaços e os torna inutilizáveis. Quando os patches são muito maiores do que 20KB, considere comprimi-los (por exemplo, com man:gzip[1] ou man:bzip2[1]) antes de enviá-los.
+
+Depois de enviar um relatório, você deve receber uma confirmação juntamente com um número de rastreamento. Guarde este número de rastreamento para que você possa nos atualizar com detalhes sobre o problema.
Veja também extref:{problem-reports}[este artigo] sobre como escrever bons relatórios de problemas.
=== Mudanças na Documentação
-Mudanças na documentação são supervisionadas pela http://lists.FreeBSD.org/mailman/listinfo/freebsd-doc[lista de documentação do projeto FreeBSD]. Por favor veja o extref:{fdp-primer}[Manual do Projeto de Documentação do FreeBSD] para instruções completas. Envie contribuições e mudanças (mesmo as pequenas são bem vindas!) utilizando o mesmo método de qualquer outro relatório de bug.
+As mudanças na documentação são supervisionadas pelo {freebsd-doc}. Por favor, consulte o extref:{fdp-primer}[FreeBSD Documentation Project Primer] para obter instruções completas. Envie submissões e alterações (mesmo as pequenas são bem-vindas!) usando o mesmo método que qualquer outro relatório de bug.
=== Mudanças no Código Fonte Existente
-Um acréscimo ou mudança em um código fonte existe é um tema um pouco complicado e depende muito de como você está desatualizado com o estado atual do desenvolvimento do FreeBSD. Existe uma release especial do FreeBSD em andamento conhecida como "FreeBSD-CURRENT" que é disponibilizada de várias maneiras para conveniência dos desenvolvedores que trabalham ativamente no sistema. Veja o extref:{handbook}updating-upgrading[Handbook do FreeBSD, current-stable] para mais informação sobre como obter e usar o FreeBSD-CURRENT.
+Uma adição ou mudança no código-fonte existente é um assunto um pouco mais complicado e depende muito de quão desatualizado você está em relação ao estado atual do desenvolvimento do FreeBSD. Há uma versão especial em andamento do FreeBSD conhecida como "FreeBSD-CURRENT" que está disponível de várias maneiras para a conveniência de desenvolvedores que trabalham ativamente no sistema. Veja o extref:{handbook}[Handbook do FreeBSD, current-stable] para mais informações sobre como obter e usar o FreeBSD-CURRENT.
-Trabalhar com versões antigas do código, infelizmente, muitas vezes significa que as suas alterações serão demasiadamente obsoletas ou muito divergentes para possibilitar uma fácil re-integração ao FreeBSD. As possibilidades de que isso ocorra podem ser minimizadas um pouco através da sua inscrição na http://lists.FreeBSD.org/mailman/listinfo/freebsd-announce[lista de distribuição de comunicados oficiais do projeto FreeBSD] e na http://lists.FreeBSD.org/mailman/listinfo/freebsd-current[lista de discussão do FreeBSD-CURRENT], nas quais as discussões sobre o estado atual do sistema ocorrem.
+Trabalhar a partir de fontes mais antigos infelizmente significa que suas alterações às vezes podem ser muito obsoletas ou divergentes demais para uma reintegração fácil no FreeBSD. As chances disso podem ser minimizadas um pouco ao se inscrever nas listas {freebsd-announce} e {freebsd-current}, onde ocorrem discussões sobre o estado atual do sistema.
-Supondo que você consiga obter acesso à uma versão razoavelmente atualizada do código fonte do sistema para basear as suas alterações, o próximo passo é produzir um conjunto de diffs para enviar aos mantenedores do FreeBSD. Isto é feito com o comando man:diff[1].
+Assumindo que você consegue obter fontes razoavelmente atualizadas para basear suas alterações, o próximo passo é produzir um conjunto de diffs para enviar aos mantenedores do FreeBSD. Isso é feito com o comando man:diff[1].
-O formato preferido do man:diff[1] para o envio de um patch, é o formato de saída unificada gerado pelo comando `diff -u`.
+A preferência do formato man:diff[1] para envio de correções é o formato de saída unificada gerado pelo `diff -u`.
-[source,shell]
+[source, shell]
....
% diff -u oldfile newfile
....
ou
-[source,shell]
+[source, shell]
....
% diff -u -r -N olddir newdir
....
-deverá gerar um conjunto de diffs unificados para o arquivo de origem informado ou para a hierarquia de diretórios.
+Iria gerar um conjunto de diffs unificados para o arquivo ou hierarquia de diretórios de origem fornecidos.
-Consulte o manual do man:diff[1] para maiores informações.
+Consulte man:diff[1] para obter mais informações.
-Uma vez que você tenha o conjunto de diffs (os quais você pode testar com o comando man:patch[1]), você deve submetê-lo para inclusão no FreeBSD por meio de um relatório de bug. Você _não_ deve enviar os diffs para a http://lists.FreeBSD.org/mailman/listinfo/freebsd-hackers[lista de discussão de assuntos técnicos do FreeBSD] ou eles irão se perder! Agradecemos imensamente a sua submissão (este é um projeto voluntário!); Devido ao alto volume de trabalho, nós podemos não ser capazes de resolvê-lo imediatamente, mas ele permanecerá em nosso banco de dados até que o façamos. Marque a sua submissão incluindo a palavra `[PATCH]` na sinopse do relatório.
+Uma vez que você tem um conjunto de diffs (que você pode testar com o comando man:patch[1]), você deve enviá-los para inclusão no FreeBSD como um relatório de problema. _Não_ envie apenas os diffs para a {freebsd-hackers}, pois eles serão perdidos! Agradecemos muito sua contribuição (este é um projeto voluntário!); como estamos ocupados, pode ser que não consigamos lidar com isso imediatamente, mas ele permanecerá no banco de dados de PRs até que o façamos. Indique sua submissão incluindo `[PATCH]` no resumo do relatório.
-Se você achar adequado (por ex. você adicionou, deletou ou renomeou arquivos), agrupe as suas mudanças em um arquivo `tar`. Arquivos criados com o man:shar[1] também são bem vindos.
+Se você achar apropriado (por exemplo, você adicionou, removeu ou renomeou arquivos), agrupe suas alterações em um arquivo `tar`. Arquivos criados com o comando man:shar[1] também são bem-vindos.
-Se as suas mudanças são de uma natureza potencialmente sensível, por exemplo, se você não tiver certeza sobre os problemas de direitos autorais que regerão sua distribuição no futuro, envie-as para o Core Team mailto:core@FreeBSD.org[core@FreeBSD.org] ao invés de submetê-las por meio de um relatório de bug. O FreeBSD Core Team mailto:core@FreeBSD.org[core@FreeBSD.org] é formado por um grupo muito pequeno de pessoas as quais cuidam de muitas das tarefas diárias de administração do projeto FreeBSD. Observe que este grupo também é _muito ocupado_ e portanto você só deve enviar um e-mail para eles se for realmente necessário.
+Se a sua alteração for potencialmente sensível, como se você não tem certeza sobre questões de direitos autorais que regem a distribuição posterior, você deve enviá-la diretamente para {core-email} em vez de enviar como um relatório de bug. O {core-email} atinge um grupo muito menor de pessoas que fazem muito do trabalho diário no FreeBSD. Observe que esse grupo também é _muito ocupado_ e, portanto, você só deve enviar e-mails a eles quando for realmente necessário.
-Por favor, consulte os manuais man:intro[9] e man:style[9] para algumas informações sobre estilo de codificação. Nós apreciaríamos se você estivesse ao menos ciente destas informações antes de submeter o seu código.
+Por favor, consulte man:intro[9] e man:style[9] para obter informações sobre o estilo de codificação. Agradecemos se você pelo menos estiver ciente dessas informações antes de enviar código.
-=== Código novo ou pacotes de maior valor agregado
+=== Código Novo ou Pacotes de Grande Valor Adicionado
-No caso de uma contribuição significativa de um trabalho de grande porte, ou a adição de uma nova característica importante ao FreeBSD, torna-se quase sempre necessário que se envie as alterações em um arquivo tar ou então que se faça o upload das mesmas para um servidor WWW ou FTP para que as outras pessoas possam acessá-las. Se você não possui acesso a um servidor WWW ou FTP, pergunte em uma lista de discussão apropriada do FreeBSD se alguém pode hospedar essas alterações para você.
+No caso de uma contribuição significativa de um grande volume de trabalho, ou a adição de um novo recurso importante ao FreeBSD, torna-se quase sempre necessário enviar as alterações como arquivos tar ou carregá-los em um website ou FTP para que outras pessoas possam acessá-los. Se você não tem acesso a um website ou FTP, peça em uma lista de discussão apropriada do FreeBSD para alguém hospedar as alterações para você.
-Quando se trabalha com grandes quantidades de código, o sensível assunto de direitos autorais invariavelmente vem a tona. O Projeto FreeBSD prefere licenças de software livre tais como BSD ou ISC. Licenças copyleft, como a GPLv2, às vezes são permitidas. A lista completa pode ser encontrada na página sobre a link:https://www.FreeBSD.org/internal/software-license/[política de licenciamento do core team].
+Quando se trabalha com grandes quantidades de código, a questão delicada de direitos autorais inevitavelmente surge. O FreeBSD prefere licenças de software livre tais como BSD ou ISC. Licenças copyleft como GPLv2 às vezes são permitidas. A lista completa pode ser encontrada na página da link:https://www.FreeBSD.org/internal/software-license/[política de licenciamento do core team].
=== Dinheiro ou Hardware
-Nós ficamos sempre muito felizes em aceitar doações para agregar a causa do Projeto FreeBSD, em um esforço voluntário como o nosso, um pouco pode significar muito! Doações de hardware também são muito importantes para expandir a nossa lista de periféricos suportados, uma vez que normalmente não temos recursos para comprar estes itens nós mesmos.
+Estamos sempre muito felizes em receber doações para promover a causa do Projeto FreeBSD e, em um esforço voluntário como o nosso, um pouco pode fazer muita diferença! As doações de hardware também são muito importantes para expandir nossa lista de periféricos suportados, já que geralmente não temos fundos para comprar tais itens nós mesmos.
[[donations]]
==== Doando Dinheiro
-A Fundação FreeBSD é uma entidade sem fins lucrativos e isenta de impostos, estabelecida com o objetivo de promover os objetivos do Projeto FreeBSD. Como uma entidade 501(c)3, a fundação é isenta de recolher as taxas do governo federal, bem como as do Estado do Colorado. As doações para uma entidade isenta de impostos são frequentemente dedutíveis dos impostos federais.
+A FreeBSD Foundation é uma fundação sem fins lucrativos e isenta de impostos, estabelecida para promover os objetivos do projeto FreeBSD. Como uma entidade 501(c)3, a fundação é geralmente isenta de imposto de renda federal dos EUA, bem como do imposto de renda estadual do Colorado. As doações para uma entidade isenta de impostos muitas vezes são dedutíveis do imposto de renda federal tributável.
-As doações podem ser enviadas através de cheques para:
+Doações podem ser enviadas em forma de cheque para:
[.address]
****
-The FreeBSD Foundation +
-3980 Broadway Street +
-STE #103-107 +
-Boulder CO 80304 +
-USA
+The FreeBSD Foundation + 3980 Broadway Street + STE #103-107 + Boulder CO 80304 + USA
****
-A Fundação FreeBSD é agora capaz de receber doações através da web com o PayPal. Para fazer uma doação, por favor visite o https://www.freebsdfoundation.org[website a Fundação].
+A FreeBSD Foundation também é capaz de receber https://www.freebsdfoundation.org/donate/[doações online] através de várias opções de pagamento.
-Maiores informações sobre a Fundação FreeBSD podem ser obtidas no documento https://people.FreeBSD.org/~jdp/foundation/announcement.html[A Fundação FreeBSD - Uma introdução]. Para contatar a Fundação por e-mail, escreva para mailto:info@FreeBSDFoundation.org[info@FreeBSDFoundation.org].
+Mais informações sobre a FreeBSD Foundation podem ser encontradas em https://people.FreeBSD.org/~jdp/foundation/announcement.html[The FreeBSD Foundation - uma introdução]. Para entrar em contato com a Fundação por e-mail, escreva para mailto:info@FreeBSDFoundation.org[info@FreeBSDFoundation.org].
==== Doando Hardware
-O projeto FreeBSD aceita alegremente doações de hardware para os quais pode encontrar bom uso. Se você estiver interessado em doar componentes de hardware, por favor contate o link:https://www.FreeBSD.org/donations/[Escritório de Relacionamento com Doadores].
+O Projeto FreeBSD alegremente aceita doações de hardware que possa ser utilizado de forma benéfica. Se você estiver interessado em doar hardware, por favor, entre em contato com o link:https://www.FreeBSD.org/donations/[Departamento de Coordenação de Doações].
[[ports-contributing]]
== Contribuindo com a coleção de ports
@@ -206,178 +226,186 @@ O projeto FreeBSD aceita alegremente doações de hardware para os quais pode en
==== Escolhendo um port não mantido
-Assumir a manutenção de um port sem mantenedor é uma ótima maneira de se envolver. Os ports sem mantenedor só são atualizados e corrigidos quando alguém se oferece para trabalhar neles. Há um grande número de ports não mantidos. É uma boa ideia começar com a adoção de uma port que você usa regularmente.
+Assumir a manutenção de ports que não são mantidos é uma ótima maneira de se envolver. Os ports não mantidos são atualizados e corrigidos somente quando alguém se voluntaria para trabalhar neles. Há um grande número de ports não mantidos. É uma boa ideia começar adotando um port que você usa regularmente.
-Os ports sem um responsável tem o seu `MAINTAINER` configurado como `ports@FreeBSD.org`. Uma lista com todos os ports nesta situação, bem como os seus erros atuais e os seus relatórios de problemas pode ser visualizada no http://portsmon.FreeBSD.org/portsconcordanceformaintainer.py?maintainer=ports%40FreeBSD.org[Sistema de Monitoração da coleção de ports do FreeBSD].
+Os ports não mantidos têm seu campo `MAINTAINER` definido como `ports@FreeBSD.org`. Muitos ports não mantidos podem ter atualizações pendentes, que podem ser vistas no https://portscout.freebsd.org/ports@freebsd.org.html[scanner de arquivos de distribuição dos Ports do FreeBSD].
+
+Em https://portsfallout.com/fallout?port=&maintainer=ports%40FreeBSD.org[PortsFallout], pode ser vista uma lista de ports sem manutenção com erros.
Alguns ports afetam um grande número de outros devido a dependências e relacionamentos de ports escravos. Geralmente, esperamos que as pessoas tenham alguma experiência antes de se voluntariarem para manter tais ports.
-Você pode verificar se um port tem ou não dependências ou se outros ports dependem dele consultando o índice mestre de ports chamado [.filename]#INDEX#. (O nome do arquivo varia de acordo com a versão do FreeBSD; por exemplo, [.filename]#INDEX-8#.) Alguns ports têm dependências condicionais que não estão incluídas na construção do [.filename]#INDEX# padrão. Esperamos que você seja capaz de reconhecer estes ports através da analise do arquivo [.filename]#Makefile# de outros ports.
+Você pode descobrir se um port possui dependências ou ports dependentes olhando para o índice mestre de ports chamado [.filename]#INDEX#. (O nome do arquivo varia de acordo com a versão do FreeBSD; por exemplo, [.filename]#INDEX-8#). Alguns ports têm dependências condicionais que não são incluídas em uma compilação padrão do [.filename]#INDEX#. Esperamos que você seja capaz de reconhecer esses ports através da análise dos [.filename]#Makefile# de outros ports.
-==== Como adotar o port
+==== Como adotar um port
-Primeiro, certifique-se de entender quais serão as suas <<maintain-port>>. Leia também o extref:{porters-handbook}[Porter's Handbook]. _Por favor, não se comprometa com mais do que você acha que pode lidar sem se sobrecarregar._
+Primeiro, certifique-se de entender <<maintain-port>>. Também leia o <<porters-handbook>>. _Por favor, não se comprometa com mais do que você sente que pode lidar confortavelmente._
-Você pode solicitar para se tornar o responsável pela manutenção de qualquer port que não esteja sendo mantido por outra pessoa assim que desejar. Basta definir o parâmetro `MAINTAINER` para o seu próprio endereço de e-mail e enviar um PR (Relatório de Problemas) com a alteração. Se o port tiver erros de compilação ou precisar de atualização, você pode aproveitar para incluir quaisquer outras alterações que sejam necessárias neste mesmo PR. Isso irá acelerar o processo pois muitos committers não estão dispostos a atribuir a responsabilidade de manutenção de um port para alguém que não tenha um histórico conhecido com o FreeBSD. O envio de PRs (relatórios de problema) para corrigir erros de compilação ou para atualizar um port é a melhor maneira de estabelecer este histórico.
+Você pode solicitar a manutenção de qualquer port não mantido assim que desejar. Basta definir `MAINTAINER` para o seu próprio endereço de e-mail e enviar um PR (Relatório de Problema) com a alteração. Se o port tiver erros de compilação ou precisar ser atualizado, talvez você queira incluir outras alterações no mesmo PR. Isso ajudará porque muitos committers estão menos dispostos a atribuir a manutenção a alguém que não tem um histórico conhecido com o FreeBSD. Enviar PRs que corrijam erros de compilação ou atualizem os ports são as melhores maneiras de estabelecer um histórico.
-Submeta o seu relatório de problema na categoria `ports` e utilize a classe `change-request`. Um committer irá examinar o seu relatório, confirmará as alterações e, por fim, fechará o relatório. Às vezes, esse processo pode demorar um pouco (os committers também são voluntários).
+Envie seu PR com a categoria `ports` e a classe `change-request`. Um committer examinará seu PR, confirmará as alterações e, por fim, fechará o PR. Às vezes, esse processo pode levar um pouco de tempo (os committers também são voluntários :).
[[maintain-port]]
-=== O desafio para os mantenedores de um port
+=== O desafio para os mantenedores de ports
-Esta seção lhe dará uma ideia do motivo pelo qual os ports precisam ser mantidos e descreve as responsabilidades de um mantenedor de ports.
+Esta seção lhe dará uma ideia do motivo pelo qual os ports precisam ser mantidos e esboçará as responsabilidades de um mantenedor de port.
[[why-maintenance]]
-==== Por que os ports requerem manutenção
+==== Por que um port requer manutenção
-Criar um port é uma tarefa eventual. Mas garantir que um port esteja sempre atualizado e que continue a ser compilado e executado corretamente requer um esforço de manutenção contínuo. Os mantenedores são as pessoas que dedicam parte do seu tempo para atingir esses objetivos.
+Criar um port é uma tarefa única. Garantir que um port esteja atualizado e continue a ser compilado e executado requer um esforço contínuo de manutenção. Os mantenedores são as pessoas que dedicam parte do seu tempo para atender a esses objetivos.
-O principal motivo pelo qual a coleção de ports precisa de manutenção é o de trazer os mais recentes e o melhores softwares de terceiros para a comunidade FreeBSD. Um desafio adicional é manter os ports individuais funcionando dentro do framework da coleção de ports à medida que ela evolui.
+A razão mais importante pela qual os ports precisam de manutenção é para trazer o que há de mais recente e melhor em software de terceiros para a comunidade FreeBSD. Um desafio adicional é manter os ports individuais funcionando dentro do framework da Coleção de Ports à medida que ele evolui.
Como mantenedor, você precisará gerenciar os seguintes desafios:
-* *Novas versões e atualizações de software.* Novas versões e atualizações de software são disponibilizadas o tempo todo para os aplicativos já convertidos, e elas precisam ser incorporadas à Coleção de Ports a fim de prover software atualizado.
+* *Novas versões de software e atualizações.* Novas versões e atualizações dos softwares portados se tornam disponíveis o tempo todo e precisam ser incorporadas na Coleção de Ports para fornecer software atualizado.
-* *Mudanças nas dependências.* Se forem feitas alterações significativas nas dependências do seu port, talvez seja necessário atualizá-las para que ele continue funcionando corretamente.
+* *Mudanças nas dependências.* Se houverem mudanças significativas nas dependências do seu port, pode ser necessário atualizá-lo para que continue a funcionar corretamente.
-* *Mudanças que afetem os ports que dependem do seu.* Se outros ports dependerem de um port que você mantém, as mudanças no seu port podem requerer um alinhamento prévio com outros mantenedores.
+* *Mudanças que afetam ports dependentes.* Se outros ports dependem de um port que você mantém, as alterações no seu port podem exigir coordenação com outros mantenedores.
-* *Interação com outros usuários, mantenedores e desenvolvedores.* Parte de ser um mantenedor é assumir uma função de suporte. Não existe a expectativa de que você ofereça suporte de uma maneira geral (mas você é bem vindo se quiser fazer isso). O que você deve prover é um ponto de coordenação para as questões específicas do FreeBSD relacionadas aos seus ports.
+* *Interatividade com outros usuários, mantenedores e desenvolvedores.* Parte de ser um mantenedor é assumir um papel de suporte. Não se espera que você forneça suporte geral (mas você é bem vindo se você optar por fazê-lo). O que você deve fornecer é um ponto de coordenação para problemas específicos do FreeBSD relacionados aos seus ports.
-* *Caça aos bugs* Um port pode ser afetado por bugs específicos do FreeBSD. Você precisará investigar, encontrar e consertar estes bugs quando forem reportados. Testar meticulosamente um port para identificar todos os seus possíveis problemas antes que ele seja adicionado à Coleção de Ports é ainda melhor.
+* *Procura de bugs.* Um port pode ser afetado por bugs específicos do FreeBSD. Você precisará investigar, encontrar e corrigir esses bugs quando forem relatados. Testar minuciosamente um port para identificar problemas antes que eles sejam incluídos na Coleção de Ports é ainda melhor.
-* *Alterações na infraestrutura e política de ports.* Ocasionalmente os sistemas utilizados para construir os ports e pacotes são atualizados ou uma nova recomendação que afeta a infraestrutura é realizada. Você deverá estar atento a estas mudanças caso seus ports sejam afetados e necessitem de atualização.
+* *Mudanças na infraestrutura e políticas dos ports.* Às vezes, os sistemas usados para compilar ports e pacotes são atualizados ou uma nova recomendação que afeta a infraestrutura é feita. Você deve estar ciente dessas mudanças no caso de seus ports serem afetados e precisarem de atualização.
-* *Mudanças no sistema base.* O FreeBSD está em constante desenvolvimento. Mudanças no software, bibliotecas, kernel ou até mesmo mudanças de políticas podem resultar em necessidade de mudança nos ports.
+* *Mudanças no sistema base.* O FreeBSD está em constante desenvolvimento. Mudanças no software, bibliotecas, kernel ou até mesmo mudanças de política podem causar a necessidade de alterações em cascata nos ports.
==== Responsabilidades do mantenedor
-===== Manter seus ports atualizados
+===== Mantenha seus ports atualizados
Esta seção descreve o processo a ser seguido para manter seus ports atualizados.
-Esta é uma visão geral. Mais informações sobre a atualização de um port está disponível no extref:{porters-handbook}[Porter's Handbook].
+Este é um resumo. Mais informações sobre atualização de um port estão disponíveis no extref:{porters-handbook}[Handbook do mantenedor de ports].
[.procedure]
+====
. Preste atenção às atualizações
-+
-Monitorar os fabricantes upstream em relação a liberação de novas versões, patches e correções de segurança para o software. Listas de discussão de anúncios ou páginas web de noticias sobre o software são úteis para este propósito. Algumas vezes os usuários entrarão em contato com você perguntando quando seu port será atualizado. Se você estiver ocupado com outras atividades ou devido a qualquer outra razão não puder realizar a atualização naquele momento, pergunte se o usuário pode te ajudar enviando uma atualização.
-+
-Você também pode receber emails automáticos do `Verificador de Versões de Ports do FreeBSD` informando a você que uma nova versão do disftile do seu port está disponível. Mais informações sobre este sistema (incluindo como deixar de receber seus emails no futuro) serão enviadas na mensagem.
++
+Monitorar os fabricantes upstream em relação a liberação de novas versões, patches e correções de segurança para o software. Listas de discussão e de anúncios ou páginas web de noticias sobre o software são úteis para este propósito. Algumas vezes os usuários entrarão em contato com você perguntando quando seu port será atualizado. Se você estiver ocupado com outras atividades ou devido a qualquer outra razão não puder realizar a atualização naquele momento, pergunte se o usuário pode te ajudar enviando uma atualização.
++
+Você também pode receber e-mails automáticos do `FreeBSD Ports Version Check` informando que uma versão mais recente do arquivo de distribuição do seu port está disponível. Mais informações sobre esse sistema (incluindo como interromper futuros e-mails) serão fornecidas na mensagem.
. Incorporar mudanças
-+
-Quando estiverem disponíves, incorpore as mudanças em seu port. Você precisa ser capaz de gerar um patch entre o port original e o port atualizado.
-. Revisão e teste
-+
-Examine cuidadosamente e teste as suas mudanças
-
-** Compile, instale e teste o seu port em todas plataformas e arquiteturas que você puder. É comum um port funcionar em uma branch ou plataforma e falhar em outra.
-** Certifique-se de que as dependências do seu port estão completas. A maneira recomendada de fazer isso é instalando seu próprio ports tinderbox. Consulte a seção sobre <<resources>> para mais informações.
-** Verifique se a lista de componentes do pacote está atualizada. Isto envolve adicionar novos arquivos e diretórios , bem como remover as entradas sem uso.
-** Verifique seu port usando o man:portlint[1] como um guia. Consulte a seção sobre <<resources>> para informações importantes sobre o uso do portlint.
-** Considere se as mudanças no seu port podem fazer com que outros ports tenham problemas. Se este for o caso, coordene as mudanças com os mantenedores destes ports. Isto é especialmente importante se a sua atualização modifica a versão de uma biblioteca compartilhada; neste caso, os ports afetados precisarão obter no mínimo um incremento no seu `PORTREVISION` para que eles possam ser atualizados automaticamente por ferramentas automatizadas como o portmaster ou o man:portupgrade[1].
++
+Quando estiverem disponíveis, incorpore as alterações no port. Você precisa ser capaz de gerar um patch entre o port original e o seu port atualizado.
+. Revisão e testes
++
+Examine cuidadosamente e teste as suas mudanças:
+
+** Compile, instale e teste seu port em quantas plataformas e arquiteturas puder. É comum um port funcionar em um branch ou plataforma e falhar em outro.
+** Certifique-se de que as dependências do seu port estejam completas. A maneira recomendada de fazer isso é instalando o seu próprio tinderbox. Consulte <<resources>> para obter mais informações.
+** Verifique se a lista de pacotes está atualizada. Isso envolve adicionar quaisquer novos arquivos e diretórios e remover entradas não utilizadas.
+** Verifique seu port usando o comando man:portlint[1] como guia. Consulte <<resources>> para obter informações importantes sobre o uso do portlint.
+** Considere se as alterações em seu port podem fazer com que outros ports se quebrem. Se for o caso, coordene as alterações com os mantenedores desses ports. Isso é especialmente importante se sua atualização alterar a versão da biblioteca compartilhada; nesse caso, pelo menos os ports dependentes precisarão receber um incremento no `PORTREVISION` para que sejam atualizados automaticamente por ferramentas automatizadas, como portmaster ou man:portupgrade[1].
. Envie as alterações
-+
-Submeta sua atualização enviando um relatório de problema (PR) com uma explicação das alterações e um patch contendo as diferenças entre o port original e a versão atualizada. Por favor, consulte o artigo extref:{problem-reports}[Escrevendo um Relatório de Problema para o FreeBSD] para mais informações sobre como escrever um PR realmente bom.
++
+Envie sua atualização submetendo um PR com uma explicação das alterações e um patch contendo as diferenças entre o port original e o atualizado. Consulte o extref:{problem-reports}[Redação de Relatórios de Problemas do FreeBSD] para obter informações sobre como escrever um PR realmente bom.
+
[NOTE]
-====
-Por favor não submeta um arquivo man:shar[1] do port inteiro, ao invés disso, utilize o comando man:diff[1] `-ruN`. Desta forma, os committers podem ver com mais facilidade exatamente quais alterações estão sendo feitas. Consulte a seção extref:{porters-handbook}[Upgrading, port-upgrading] do Porter's Handbook para maiores informações.
-====
+======
+Por favor, não envie um arquivo man:shar[1] do port inteiro; em vez disso, use man:git-format-patch[1] ou man:diff[1] `-ruN`. Dessa forma, os committers podem ver com muito mais facilidade exatamente quais mudanças estão sendo feitas. A seção extref:{porters-handbook}[Atualização, port-upgrading] do Handbook do Mantenedor de Ports contém mais informações.
+======
. Aguarde
-+
-Em algum momento, um commiter lidará com o seu PR. Isto pode levar alguns minutos ou pode levar semanas - portanto, seja paciente.
++
+Em algum momento, um committer lidará com o seu PR. Isso pode levar minutos ou pode levar uma ou duas semanas - portanto, tenha paciência. Se levar mais tempo, procure ajuda em listas de discussão ({freebsd-ports}), no IRC: #bsdports na EFNet ou #freebsd-ports na Libera, por exemplo.
. Dê feedback
-+
-Se um committer encontrar um problema nas suas alterações, ele provavelmente o encaminhará de volta para você. Uma resposta rápida a este contato irá ajudá-lo a ter o seu PR resolvido mais rapidamente. É muito importante manter o canal de comunicação aberto para agilizar a resolução de qualquer eventual problema.
++
+Se um committer encontrar um problema com as suas alterações, eles provavelmente o encaminharão de volta para você. Uma resposta rápida ajudará a obter a aprovação do seu PR mais rapidamente e é melhor para manter uma conversa ao tentar resolver qualquer problema.
. E finalmente
-+
-As suas alterações serão incorporadas na arvore de código fonte e o seu port será atualizado. O PR então será fechado pelo committer. É isso!
++
+Suas alterações serão incorporadas e o seu port será atualizada. O PR será então fechado pelo committer. É isso aí!
+====
-===== Certifique-se de que seus ports continuem a ser compilados corretamente
+===== Garanta que seus ports continuem a ser compilados corretamente
Esta seção é sobre a descoberta e a solução de problemas que fazem seus ports deixarem de ser compilados corretamente.
-O projeto FreeBSD garante o funcionamento da coleção de Ports apenas na branch `-STABLE`. Teoricamente, você deve será capaz de garantir o funcionamento do port ao executá-lo na ultima release de cada branch(já que não se espera que as ABIs mudem), mas se você puder executar a branch, será ainda melhor.
+O FreeBSD garante o funcionamento da Coleção de Ports apenas nos branches `-STABLE`. Em teoria, você deveria ser capaz de rodar a versão mais recente de cada branch estável (já que as ABIs não devem mudar), mas se puder rodar o branch, isso é ainda melhor.
-Como a maioria das instalações do FreeBSD rodam em máquinas compatíveis com o PC (o que é chamado de arquitetura `i386`), esperamos que você mantenha o port funcionando nesta arquitetura. Nós preferimos que os ports também funcionem de forma nativa na arquitetura `amd64`. É completamente justo pedir ajuda caso você não tenha uma dessas máquinas para fazer seus testes.
+Como a maioria das instalações do FreeBSD é executada em máquinas compatíveis com PC (o que é chamado de arquitetura `i386`), esperamos que você mantenha o port funcionando nessa arquitetura. Preferimos que os ports também funcionem na arquitetura `amd64` executando nativamente. É completamente justo pedir ajuda se você não tiver uma dessas máquinas.
[NOTE]
====
-Os padrões usuais nas falhas para máquinas não-`x86` são que os programadores originais assumiram que, por exemplo, os ponteiros são `int`-s, ou que um compilador gcc mais antigo seria utilizado. Cada vez mais, os autores de aplicativos estão retrabalhando o código das suas aplicações para remover essas suposições - mas se o autor não estiver mantendo ativamente o código, talvez seja necessário que você mesmo faça isso.
+Os modos comuns de falha para máquinas não-`x86` são que os programadores originais assumiram, por exemplo, que os ponteiros são `int`, ou que um compilador gcc mais antigo e relativamente relaxado estava sendo usado. Cada vez mais, os autores de aplicativos estão retrabalhando seu código para remover essas suposições - mas se o autor não estiver mantendo ativamente seu código, você pode precisar fazer isso sozinho.
====
-Estas são as tarefas que você precisa executar para garantir que o seu port pode ser compilado:
+Estas são as tarefas que você precisa realizar para garantir que o seu port possa ser compilado:
[.procedure]
-. Preste atenção para falhas de compilação
-+
-Confira o seu e-mail e busque por mensagens do `pkg-fallout@FreeBSD.org` e consulte o http://portscout.FreeBSD.org[scanner de arquivos distfiles] para verificar se algum dos ports que estão falhando na compilação estão desatualizados.
+====
+. Fique atento a falhas na compilação
++
+Verifique seu e-mail para ver se há mensagens de `pkg-fallout@FreeBSD.org` e do http://portscout.FreeBSD.org[scanner de distfiles] para ver se algum dos ports que estão falhando na compilação está desatualizado.
. Colete informação
-+
-Quando você estiver ciente de um problema, colete informações para ajudá-lo a solucioná-lo. Os erros de compilação relatados pelo `pkg-fallout` são acompanhados por logs que mostram onde a compilação falhou. Se a falha foi reportada para você por um usuário, peça para que ele lhe envie informações que possam ajudar no diagnóstico do problema, tais como:
++
+Assim que você estiver ciente de um problema, colete informações para ajudá-lo a corrigi-lo. Os erros de compilação relatados pelo `pkg-fallout` são acompanhados por logs que mostrarão onde a compilação falhou. Se a falha foi relatada por um usuário, peça a eles que enviem informações que possam ajudar a diagnosticar o problema, tais como:
** Logs de compilação
** Os comandos e opções usados para compilar o port (incluindo opções definidas no [.filename]#/etc/make.conf#)
-** Uma lista dos pacotes instalados no sistema como mostrado pelo comando man:pkg-info[8]
-** A versão do FreeBSD que ele está executando como mostrado pelo comando man:uname[1] `-a`
-** Quando a coleção de ports dele foi atualizada pela última vez
-** Quando a árvore de ports e o arquivo [.filename]#INDEX# dele foram atualizados pela última vez
+** Uma lista de pacotes instalados no seu sistema, conforme mostrado por man:pkg-info[8]
+** A versão do FreeBSD que estão executando, conforme mostrado por man:uname[1] `-a`
+** Quando a coleção de ports foi atualizada pela última vez
+** Quando a sua coleção de ports e o arquivo [.filename]#INDEX# foram atualizados pela última vez
. Investigue e encontre uma solução
-+
-Infelizmente não existe nenhum processo direto a ser seguido para fazer isso. Porém, lembre-se: se você está emperrado, peça ajuda! A http://lists.FreeBSD.org/mailman/listinfo/freebsd-ports[lista de discussão de ports do FreeBSD] é um bom lugar para começar, e os desenvolvedores de upstream são frequentemente muito prestativos.
++
+Infelizmente, não há um processo direto a seguir para fazer isso. Lembre-se, no entanto: se estiver travado, peça ajuda! O {freebsd-ports} é um bom lugar para começar, e os desenvolvedores upstream geralmente são muito prestativos.
. Envie as alterações
-+
++
Assim como na atualização de um port, agora você deve incorporar as alterações, revisar, testar e enviar suas alterações em um relatório de problemas (PR) e fornecer feedback, se solicitado.
. Envie os patches para os autores upstream
-+
-Em alguns casos, você terá que fazer um patch para que um port execute no FreeBSD. Alguns (mas não todos) autores upstream aceitarão incorporar tais patches em seu código na próxima versão. Se eles aceitarem, isto poderá até ajudar os usuários de outros sistemas BSD e talvez evitar um esforço duplicado. Por favor, considere o envio aos autores de quaisquer patches aplicáveis como uma cortesia.
++
+Em alguns casos, você terá que fazer patches no port para fazê-lo funcionar no FreeBSD. Alguns (mas não todos) os autores upstream aceitarão tais patches em seu código para a próxima versão. Se for o caso, isso pode até ajudar seus usuários em outros sistemas baseados em BSD e talvez economizar esforço duplicado. Considere enviar quaisquer patches aplicáveis aos autores como uma cortesia.
+====
===== Investigue relatórios de bugs e PRs relacionados ao seu port
Esta seção é sobre como descobrir e corrigir bugs.
-Bugs específicos do FreeBSD são causados geralmente por suposições sobre os ambientes de compilação e execução que não se aplicam ao FreeBSD. É pouco provável que você encontre um problema desse tipo, mas se encontrar ele poderá ser mais sutil e difícil de diagnosticar.
+Os bugs específicos do FreeBSD são geralmente causados por suposições sobre os ambientes de compilação e de tempo de execução que não se aplicam ao FreeBSD. É menos provável que você encontre um problema desse tipo, mas ele pode ser mais sutil e difícil de diagnosticar.
-Estas são as tarefas que você precisa executar para garantir que o seu port continuará funcionando como pretendido:
+Essas são as tarefas que você precisa realizar para garantir que seu port continue funcionando conforme o esperado:
[.procedure]
+====
. Responda os relatórios de bugs
-+
-Bugs podem ser reportados para você por e-mail através do https://bugs.FreeBSD.org/search/[Sistema de Relatório de Problemas]. Os bugs também podem ser reportados diretamente a você pelos usuários.
-+
-Você deve responder os PRs (Relatório de Problemas) e outros relatórios dentro de 14 dias, mas por favor, tente não levar tanto tempo. Tente responder o mais rápido possível, mesmo que seja apenas para dizer que você precisa de mais algum tempo antes de poder trabalhar no PR.
-+
-Se você não tiver respondido após 14 dias, qualquer committer poderá efetuar o commit de um PR que você não tenha respondido por meio da regra de `maintainer-timeout`.
++
+Os bugs podem ser relatados a você por e-mail através do https://bugs.FreeBSD.org/search/[banco de dados de relatórios de problemas]. Os bugs também podem ser relatados diretamente a você pelos usuários.
++
+Você deve responder a PRs e outros relatórios dentro de 14 dias, mas tente não levar tanto tempo. Tente responder o mais rápido possível, mesmo que seja apenas para dizer que você precisa de mais tempo antes de poder trabalhar no PR.
++
+Se você não respondeu após 14 dias, qualquer committer pode fazer o commit de um PR que você não respondeu através de um `maintainer-timeout`.
. Colete informação
-+
-Se a pessoa que reportou o bug não tiver fornecido uma correção, você precisará coletar as informações que permitirão gerar uma.
-+
-Se o bug for reproduzível, você poderá coletar a maior parte das informações necessárias você mesmo. Caso contrário, peça à pessoa que relatou o bug para coletar as informações para você, tais como:
++
+Se a pessoa que reportou o bug também não forneceu uma correção, você precisa coletar as informações que permitirão gerar uma correção.
++
+Se o erro puder ser reproduzido, você pode coletar a maioria das informações necessárias por conta própria. Caso contrário, peça para a pessoa que relatou o erro coletar as informações para você, como:
-** Uma descrição detalhada das suas ações, comportamento esperado e comportamento real do aplicativo
+** Uma descrição detalhada das ações realizadas, comportamento esperado do programa e comportamento atual
** Cópias dos dados de entrada usados para acionar o bug
-** Informações sobre seu ambiente de compilação e execução - por exemplo, uma lista de pacotes instalados e a saída de man:env[1]
+** Informações sobre o ambiente de compilação e execução - por exemplo, uma lista de pacotes instalados e a saída de man:env[1]
** Core dumps
** Stack traces
. Elimine os relatórios incorretos
-+
-Alguns relatórios de erros podem estar incorretos. Por exemplo, o usuário pode ter simplesmente usado de forma errada o programa; ou seus pacotes instalados podem estar desatualizados e precisam ser atualizados. Às vezes, um bug relatado não é específico do FreeBSD. Neste caso relate o bug para os desenvolvedores upstream. Se você for capaz de corrigir o bug, você também poderá criar um patch do port para que a correção seja aplicada antes da próxima versão do upstream.
++
+Algumas notificações de bugs podem estar incorretas. Por exemplo, o usuário pode ter simplesmente utilizado o programa de forma inadequada ou seus pacotes instalados podem estar desatualizados e precisarem ser atualizados. Às vezes, um bug reportado não é específico do FreeBSD. Nesse caso, reporte o bug para os desenvolvedores upstream. Se o bug estiver dentro de suas capacidades de corrigir, você também pode corrigir o port para que a correção seja aplicada antes do próximo release upstream.
. Encontre uma solução
-+
++
Tal como acontece com erros de compilação, você precisará encontrar uma correção para o problema. Mais uma vez, lembre-se de perguntar se você estiver emperrado!
. Envie ou aprove alterações
-+
-Assim como na atualização de um port, agora você deve incorporar alterações, revisar, testar e enviar suas alterações em um PR (ou enviar um follow-up se já existir um PR para o problema). Se outro usuário tiver enviado alterações no PR, você também poderá enviar um follow-up dizendo se aprova ou não as alterações.
++
+Assim como na atualização de um port, você deve incorporar as mudanças, revisar e testar e enviar suas mudanças em um PR (ou enviar um acompanhamento se já existir um PR para o problema). Se outro usuário tiver enviado mudanças no PR, você também pode enviar um acompanhamento dizendo se aprova ou não as mudanças.
+====
===== Forneça Suporte
-Parte de ser um mantenedor é prover suporte - não para o software em geral - mas para o port e quaisquer peculiaridades e problemas específicos dele no FreeBSD. Os usuários podem entrar em contato com dúvidas, sugestões, problemas e patches. Na maioria das vezes, sua correspondência será específica para o FreeBSD.
+Parte de ser um mantenedor é fornecer suporte - não para o software em geral - mas para o port e quaisquer peculiaridades e problemas específicos do FreeBSD. Os usuários podem entrar em contato com você com perguntas, sugestões, problemas e patches. Na maioria das vezes, a correspondência deles será específica para o FreeBSD.
-Ocasionalmente, você pode ter que invocar suas habilidades diplomáticas, e gentilmente, direcionar os usuários que buscam suporte genérico para os recursos apropriados. Com menos frequência você encontrará uma pessoa perguntando por que os `RPMS` não estão atualizados ou como eles podem fazer o software rodar sob o Foo Linux. Aproveite a oportunidade para dizer a eles que o seu port está atualizado (se estiver, é claro!) e sugira que eles experimentem o FreeBSD.
+Ocasionalmente, você pode ter que invocar suas habilidades em diplomacia e gentilmente direcionar usuários que buscam suporte geral para os recursos apropriados. Com menos frequência, você encontrará alguém perguntando por que os `RPMS` não estão atualizados ou como eles podem fazer o software rodar no Foo Linux. Aproveite a oportunidade para dizer que seu port está atualizado (se estiver, é claro!) e sugira que eles experimentem o FreeBSD.
Às vezes, os usuários e os desenvolvedores podem decidir que você é uma pessoa ocupada cujo tempo é valioso e farão parte do trabalho para você. Por exemplo, eles podem:
@@ -385,52 +413,54 @@ Ocasionalmente, você pode ter que invocar suas habilidades diplomáticas, e gen
* investigar e talvez fornecer uma correção para um PR, ou
* caso contrário, enviar alterações para o seu port.
-Nestes casos, a sua principal obrigação é responder rapidamente. Mais uma vez, o tempo limite para mantenedores não responsivos é de 14 dias. Após esse período, as alterações podem ser aceitas mesmo sem terem sido aprovadas. Eles se deram ao trabalho de fazer isso por você; por favor, tente pelo menos responder prontamente. Em seguida, revise, aprove, modifique ou discuta as alterações com eles o mais rápido possível.
+Nesses casos, sua principal obrigação é responder de forma rápida. Novamente, o prazo para mantenedores não responsivos é de 14 dias. Após esse período, as alterações podem ser realizadas sem aprovação. Eles fizeram o esforço para ajudá-lo, então tente pelo menos responder prontamente. Em seguida, revise, aprove, modifique ou discuta as alterações com eles o mais rápido possível.
Se você puder fazê-los sentir que a contribuição deles é apreciada (e deveria ser), você terá uma chance maior de persuadi-los a fazer mais coisas para você no futuro :-).
[[fix-broken]]
=== Encontre e conserte um port quebrado
-Existem dois lugares realmente bons para se encontrar um port que precisa de alguma atenção.
+Existem alguns bons lugares para encontrar um port que precisa de atenção.
+
+Você pode usar a https://bugs.freebsd.org/search[interface web] do banco de dados de Relatórios de Problemas para pesquisar e visualizar relatórios de problemas não resolvidos. A maioria dos relatórios de problemas para os ports são atualizações, mas com uma pequena busca e leitura das sinopses você deverá ser capaz de encontrar algo interessante para trabalhar (a classe `sw-bug` é um bom lugar para começar).
-Você pode usar a https://bugs.freebsd.org/search[interface web] do banco de dados dos Relatório de Problemas para pesquisar e visualizar os PRs não resolvidos. A maioria dos PRs relacionados aos ports são atualizações, mas com um pouco de pesquisa e análise das sinopses você deve encontrar algo interessante para trabalhar (a classe `bug-bug` é um bom lugar para começar).
+O https://portsfallout.com/[PortsFallout] mostra problemas de ports coletados durante a compilação de pacotes no FreeBSD.
-O outro lugar é o http://portsmon.FreeBSD.org/[Sistema de Monitoramento de Ports do FreeBSD]. Em particular, procure por ports sem mantenedores com erros de compilação e por ports marcados com `BROKEN`. Não existe nenhum problema em também enviar alterações para um port com um mantenedor ativo, mas antes lembre-se de consultar o mantenedor para o caso dele já estar trabalhando no problema.
+Também é OK enviar alterações para um port que possui um mantenedor, mas lembre-se de perguntar ao mantenedor no caso de já estarem trabalhando no problema.
-Depois de encontrar um bug ou problema, colete informações, investigue e corrija! Se houver um PR existente, de seguimento a ele. Caso contrário, crie um novo PR. Suas alterações serão analisadas e, se tudo estiver OK, elas serão aceitas e incorporadas.
+Depois de encontrar um bug ou problema, colete informações, investigue e corrija! Se houver um PR existente, faça um follow-up nela. Caso contrário, crie um novo PR. Suas alterações serão revisadas e, se tudo estiver correto, serão comitadas.
[[mortal-coil]]
-=== Quando parar
+=== Quando desistir
À medida que seus interesses e compromissos mudam, você pode descobrir que não tem mais tempo para continuar com algumas (ou todas) as suas contribuições para a coleção de ports. Tudo bem! Por favor, nos avise se você não estiver mais usando um port ou se não tiver mais tempo ou interesse em ser um mantenedor. Desta forma, podemos seguir em frente e permitir que outras pessoas tentem trabalhar nos problemas existentes com o port sem termos que esperar por sua resposta. Lembre-se, o FreeBSD é um projeto voluntário, então se a manutenção de um port não for mais divertida, provavelmente é hora de deixar alguém fazer isso!
-De qualquer forma, a Equipe de Gerenciamento da Coleção de Ports (`portmgr`) reserva-se o direito de redefinir o seu status de mantenedor se você não tiver mantido ativamente o seu port durante um determinado período de tempo. (Atualmente, este período é definido como 3 meses.) Com isso, queremos dizer que existem problemas não resolvidos ou atualizações pendentes que não foram tratadas por você durante esse período.
+Em qualquer caso, a equipe de gerenciamento de ports (`portmgr`) se reserva o direito de redefinir sua posição de mantenedor se você não mantiver ativamente seu port por algum tempo. (Atualmente, este tempo é de 3 meses.) Com isso, queremos dizer que existem problemas não resolvidos ou atualizações pendentes que não foram trabalhadas durante esse tempo.
[[resources]]
=== Recursos para mantenedores de ports e contribuidores
-O extref:{porters-handbook}[Porter's Handbook] é o seu Guia de Mochileiro para o sistema de ports. Mantenha-o à mão!
+O extref:{porters-handbook}[Handbook do Mantenedor de Ports] é o seu guia do sistema de ports. Mantenha-o sempre à mão!
-O artigo extref:{problem-reports}[Escrevendo um relatório de problemas para o FreeBSD] descreve como melhor formular e enviar um PR. Em 2005, foram submetidos mais de onze mil relatórios de problemas relacionados aos ports! Ao seguir as boas práticas descritas neste artigo você nos ajudará a reduzir em muito o tempo necessário para lidar com seus PRs.
+o artigo extref:{problem-reports}[Escrevendo Relatórios de Problemas do FreeBSD] descreve como formular e submeter um PR da melhor maneira possível. Em 2005, mais de onze mil PRs de ports foram submetidos! Seguir este artigo ajudará muito a reduzir o tempo necessário para lidar com seus PRs.
-O https://bugs.freebsd.org/bugzilla/query.cgi[Banco de dados de problemas reportados].
+O https://bugs.freebsd.org/bugzilla/query.cgi[banco de dados de Relatórios de Problemas].
-O http://portsmon.FreeBSD.org/[Sistema de Monitoramento de Ports do FreeBSD] pode mostrar informações cruzadas sobre os ports, tais como erros de compilação e relatórios de problemas. Se você é um mantenedor, você pode usá-lo para verificar o status de compilação dos seus ports. Como colaborador, você pode usá-lo para encontrar ports quebrados e ports sem um mantenedor ativo que precisam ser consertados.
+O http://portscout.FreeBSD.org[scanner de arquivos de distribuição de ports do FreeBSD (portscout)] pode mostrar os ports para os quais os arquivos de distribuição não podem ser baixados. Você pode verificar os seus próprios ports ou usá-lo para encontrar ports que precisam atualizar seus `MASTER_SITES`.
-O http://portscout.FreeBSD.org[scanner de arquivos distfile] da coleção de ports do FreeBSD pode lhe mostrar os ports para os quais os arquivos distfiles não estão disponíveis. Você pode utilizá-lo para verificar seus próprios ports ou para encontrar ports que precisam ter seu `MASTER_SITES` atualizado.
+O package:ports-mgmt/poudriere[] é a maneira mais completa de testar um port por todo o ciclo de instalação, empacotamento e desinstalação. A documentação está localizada no https://github.com/freebsd/poudriere[repositório do GitHub do poudriere]
-O uso do package:ports-mgmt/poudriere[] é a maneira mais completa de testar um port durante todo o ciclo de instalação, empacotamento e desinstalação. A documentação está localizada no https://github.com/freebsd/poudriere[Repositório do poudriere no github]
+O man:portlint[1] é um aplicativo que pode ser usado para verificar se o seu port está em conformidade com muitas diretrizes estilísticas e funcionais importantes. O portlint é uma aplicação heurística simples, portanto, você deve usá-lo __apenas como guia__. Se o portlint sugerir mudanças que parecem inaceitáveis, consulte o extref:{porters-handbook}[Porter's Handbook] ou peça conselhos.
-O man:portlint[1] é uma aplicação que pode ser utilizada para verificar se o seu port está em conformidade com muitas diretrizes importantes de estilo e função. O portlint é um aplicativo heurístico simples, portanto você deve usá-lo __apenas como um guia__. Se o portlint sugerir alterações que não sejam razoáveis, consulte o extref:{porters-handbook}[Porter's Handbook] ou peça conselhos.
+A {freebsd-ports} é o local para discussões gerais relacionadas a ports. É um bom lugar para pedir ajuda. Você pode se link:https://lists.freebsd.org/[inscrever], ou ler e pesquisar os arquivos da lista. Ler os arquivos das listas {freebsd-ports-bugs} e {svn-ports-head} também pode ser interessante.
-A http://lists.FreeBSD.org/mailman/listinfo/freebsd-ports[Lista de discussão de ports do FreeBSD ] é destinada para discussões gerais relacionadas aos ports. É um bom lugar para pedir ajuda. Você pode se https://lists.freebsd.org/mailman/listinfo[inscrever, ler e pesquisar os arquivos da lista]. Ler os arquivos da http://lists.FreeBSD.org/mailman/listinfo/freebsd-ports-bugs[Lista de discussão sobre bugs dos ports do FreeBSD] e as http://lists.FreeBSD.org/mailman/listinfo/svn-ports-head[mensagens de commit no SVN da árvore de ports para head/] também pode ser interessante.
+O https://portsfallout.com/[PortsFallout] é um site útil para buscar informações no https://lists.freebsd.org/archives/freebsd-pkg-fallout/[arquivo de erros de pacotes do FreeBSD].
[[ideas-contributing]]
== Começando em outras áreas
Procurando por algo interessante para começar, e que não foi mencionado em outras partes deste artigo? O Projeto FreeBSD tem várias páginas Wiki contendo áreas nas quais novos colaboradores podem ter ideias sobre como começar.
-A página https://wiki.freebsd.org/JuniorJobs[Júnior Jobs] tem uma lista de projetos que podem ser de interesse para pessoas que estão apenas começando no FreeBSD, e querem trabalhar em coisas interessantes para molhar os pés.
+A página https://wiki.freebsd.org/JuniorJobs[Junior Jobs] contém uma lista de projetos que podem interessar pessoas que estão começando no FreeBSD e querem trabalhar em coisas interessantes para se familiarizar com o sistema.
-A https://wiki.freebsd.org/IdeasPage[Página de Idéias] contém várias coisas "legais" ou "interessantes" para se trabalhar no Projeto.
+A https://wiki.freebsd.org/IdeasPage[página de idéias] contém várias sugestões de projetos "interessantes" ou "nice to have" para trabalhar no projeto.
diff --git a/documentation/content/pt-br/articles/contributing/_index.po b/documentation/content/pt-br/articles/contributing/_index.po
new file mode 100644
index 0000000000..509f2305dc
--- /dev/null
+++ b/documentation/content/pt-br/articles/contributing/_index.po
@@ -0,0 +1,2187 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-04-27 23:36+0000\n"
+"PO-Revision-Date: 2023-04-27 23:35+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlescontributing_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/contributing/_index.adoc:1
+#, no-wrap
+msgid "How to contribute to the FreeBSD Project"
+msgstr "Como contribuir para o Projeto FreeBSD"
+
+#. type: Title =
+#: documentation/content/en/articles/contributing/_index.adoc:1
+#: documentation/content/en/articles/contributing/_index.adoc:13
+#, no-wrap
+msgid "Contributing to FreeBSD"
+msgstr "Contribuindo com o FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:46
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:48
+msgid ""
+"This article describes the different ways in which an individual or "
+"organization may contribute to the FreeBSD Project."
+msgstr ""
+"Este artigo descreve maneiras diferentes sobre como um indivíduo ou "
+"organização pode contribuir com o Projeto FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:50
+msgid "'''"
+msgstr "'''"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:55
+msgid ""
+"So you want to contribute to FreeBSD? That is great! FreeBSD _relies_ on the "
+"contributions of its user base to survive. Your contributions are not only "
+"appreciated, they are vital to FreeBSD's continued growth."
+msgstr ""
+"Então você quer contribuir para o FreeBSD? Isso é ótimo! O FreeBSD _depende_ "
+"das contribuições de sua base de usuários para sobreviver. Suas "
+"contribuições não são apenas apreciadas, elas são vitais para o crescimento "
+"contínuo do FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:58
+msgid ""
+"A large and growing number of international contributors, of greatly varying "
+"ages and areas of technical expertise, develop FreeBSD. There is always "
+"more work to be done than there are people available to do it, and more help "
+"is always appreciated."
+msgstr ""
+"Um grande e crescente número de colaboradores internacionais, de idades e "
+"áreas de experiência técnica muito diversas, desenvolvem o FreeBSD. Sempre "
+"há mais trabalho a ser feito do que pessoas disponíveis para fazê-lo, e mais "
+"ajuda sempre é apreciada."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:62
+msgid ""
+"As a volunteer, what you do is limited only by what you want to do. "
+"However, we do ask that you are aware of what other members of the FreeBSD "
+"community will expect of you. You may want to take this into account before "
+"deciding to volunteer."
+msgstr ""
+"Como voluntário, o que você faz é limitado apenas pelo que você quer fazer. "
+"No entanto, pedimos que você esteja ciente do que outros membros da "
+"comunidade FreeBSD esperarão de você. Você pode querer levar isso em "
+"consideração antes de decidir ser um voluntário."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:66
+msgid ""
+"The FreeBSD project is responsible for an entire operating system "
+"environment, rather than just a kernel or a few scattered utilities. As "
+"such, our [.filename]#TODO# lists span a very wide range of tasks: from "
+"documentation, beta testing and presentation, to the system installer and "
+"highly specialized types of kernel development. People of any skill level, "
+"in almost any area, can almost certainly help the project."
+msgstr ""
+"O projeto FreeBSD é responsável por um ambiente completo de sistema "
+"operacional, em vez de apenas um kernel ou alguns utilitários espalhados. "
+"Como tal, nossas listas de [.filename]#TODO# abrangem uma ampla gama de "
+"tarefas: desde documentação, teste beta e apresentação, até o instalador do "
+"sistema e tipos altamente especializados de desenvolvimento de kernel. "
+"Pessoas de qualquer nível de habilidade, em quase qualquer área, certamente "
+"podem ajudar o projeto."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:71
+msgid ""
+"Commercial entities engaged in FreeBSD-related enterprises are also "
+"encouraged to contact us. Do you need a special extension to make your "
+"product work? You will find us receptive to your requests, given that they "
+"are not too outlandish. Are you working on a value-added product? Please "
+"let us know! We may be able to work cooperatively on some aspect of it. The "
+"free software world is challenging many existing assumptions about how "
+"software is developed, sold, and maintained, and we urge you to at least "
+"give it a second look."
+msgstr ""
+"Empresas comerciais envolvidas em empreendimentos relacionados ao FreeBSD "
+"também são incentivadas a entrar em contato conosco. Precisa de uma extensão "
+"especial para fazer seu produto funcionar? Você nos encontrará receptivos às "
+"suas solicitações, desde que não sejam muito absurdas. Você está trabalhando "
+"em um produto de valor agregado? Por favor, nos informe! Podemos trabalhar "
+"cooperativamente em algum aspecto disso. O mundo do software livre está "
+"desafiando muitas suposições existentes sobre como o software é "
+"desenvolvido, vendido e mantido, e instamos você a pelo menos dar uma "
+"segunda olhada."
+
+#. type: Title ==
+#: documentation/content/en/articles/contributing/_index.adoc:73
+#, no-wrap
+msgid "What Is Needed"
+msgstr "O que é necessário"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:76
+msgid ""
+"The following list of tasks and sub-projects represents something of an "
+"amalgam of various [.filename]#TODO# lists and user requests."
+msgstr ""
+"A lista a seguir de tarefas e subprojetos representa algo como uma amálgama "
+"de várias listas de [.filename]#TODO# e de solicitações de usuários."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:78
+#, no-wrap
+msgid "Ongoing Non-Programmer Tasks"
+msgstr "Tarefas contínuas não relacionadas à programação"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:83
+msgid ""
+"Many people who are involved in FreeBSD are not programmers. The Project "
+"includes documentation writers, Web designers, and support people. All that "
+"these people need to contribute is an investment of time and a willingness "
+"to learn."
+msgstr ""
+"Muitas pessoas envolvidas no FreeBSD não são programadoras. O Projeto inclui "
+"escritores de documentação, web designers e pessoas de suporte. Tudo o que "
+"essas pessoas precisam para contribuir é investir tempo e estar dispostas a "
+"aprender."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:85
+msgid ""
+"Read through the FAQ and Handbook periodically. If anything is poorly "
+"explained, ambiguous, out of date or incorrect, let us know. Even better, "
+"send us a fix (AsciiDoc is not difficult to learn, but there is no objection "
+"to plain text submissions)."
+msgstr ""
+"Leia periodicamente o FAQ e o Handbook. Se algo estiver mal explicado, "
+"ambíguo, desatualizado ou incorreto, avise-nos. Ainda melhor, envie-nos uma "
+"correção (AsciiDoc não é difícil de aprender, mas não há objeção a "
+"submissões em texto simples)."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:86
+msgid ""
+"Help translate FreeBSD documentation into your native language. If "
+"documentation already exists for your language, you can help translate "
+"additional documents or verify that the translations are up-to-date and "
+"correct. First take a look at the extref:{fdp-primer}[Translations FAQ, "
+"translations] in the FreeBSD Documentation Project Primer. You are not "
+"committing yourself to translating every single FreeBSD document by doing "
+"this - as a volunteer, you can do as much or as little translation as you "
+"desire. Once someone begins translating, others almost always join the "
+"effort. If you only have the time or energy to translate one part of the "
+"documentation, please translate the installation instructions."
+msgstr ""
+"Ajude a traduzir a documentação do FreeBSD para seu idioma nativo. Se já "
+"existir documentação em seu idioma, você pode ajudar a traduzir documentos "
+"adicionais ou verificar se as traduções estão atualizadas e corretas. "
+"Primeiro, dê uma olhada no extref:{fdp-primer}[FAQ de traduções, "
+"translations] no FreeBSD Documentation Project Primer. Ao fazer isso, você "
+"não está se comprometendo a traduzir todos os documentos do FreeBSD - como "
+"voluntário, você pode traduzir tanto quanto desejar. Uma vez que alguém "
+"começa a traduzir, outros quase sempre se juntam ao esforço. Se você só tem "
+"tempo ou energia para traduzir uma parte da documentação, por favor, traduza "
+"as instruções de instalação."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:87
+msgid ""
+"Read the {freebsd-questions} occasionally (or even regularly). It can be "
+"very satisfying to share your expertise and help people solve their "
+"problems; sometimes you may even learn something new yourself! These forums "
+"can also be a source of ideas for things to improve upon."
+msgstr ""
+"Leia ocasionalmente (ou mesmo regularmente) a {freebsd-questions}. Pode ser "
+"muito satisfatório compartilhar sua expertise e ajudar as pessoas a "
+"resolverem seus problemas; às vezes, você pode até aprender algo novo! Esses "
+"fóruns também podem ser uma fonte de ideias para melhorias."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:89
+#, no-wrap
+msgid "Ongoing Programmer Tasks"
+msgstr "Tarefas contínuas para programadores"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:93
+msgid ""
+"Most of the tasks listed here may require a considerable investment of time, "
+"an in-depth knowledge of the FreeBSD kernel, or both. However, there are "
+"also many useful tasks which are suitable for \"weekend hackers\"."
+msgstr ""
+"A maioria das tarefas listadas aqui pode exigir um investimento considerável "
+"de tempo, um conhecimento aprofundado do kernel do FreeBSD, ou ambos. No "
+"entanto, também existem muitas tarefas úteis que são adequadas para "
+"\"hackers de fim de semana\"."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:95
+msgid ""
+"If you run FreeBSD-CURRENT and have a good Internet connection, there is a "
+"machine `current.FreeBSD.org` which builds a full release once a day-every "
+"now and again, try to install the latest release from it and report any "
+"failures in the process."
+msgstr ""
+"Se você está executando o FreeBSD-CURRENT e tem uma boa conexão com a "
+"Internet, há uma máquina chamada `current.FreeBSD.org` que cria uma versão "
+"completa uma vez por dia - de tempos em tempos, tente instalar a versão mais "
+"recente dela e relate quaisquer falhas no processo."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:96
+msgid ""
+"Read the {freebsd-bugs}. There may be a problem you can comment "
+"constructively on or with patches you can test. Or you could even try to fix "
+"one of the problems yourself."
+msgstr ""
+"Leia a {freebsd-bugs}. Pode haver um problema no qual você possa comentar de "
+"forma construtiva ou com patches que possa testar. Ou você poderia até mesmo "
+"tentar corrigir um dos problemas sozinho."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:97
+msgid ""
+"If you know of any bug fixes which have been successfully applied to -"
+"CURRENT but have not been merged into -STABLE after a decent interval "
+"(normally a couple of weeks), send the committer a polite reminder."
+msgstr ""
+"Se você souber de correções de bugs que foram aplicadas com sucesso ao -"
+"CURRENT, mas ainda não foram mescladas ao -STABLE após um intervalo razoável "
+"(normalmente algumas semanas), envie um lembrete educado ao committer "
+"responsável."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:98
+msgid ""
+"Move contributed software to [.filename]#src/contrib# in the source tree."
+msgstr ""
+"Mova o software contribuído para [.filename]#src/contrib# no diretório de "
+"código-fonte."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:99
+msgid "Make sure code in [.filename]#src/contrib# is up to date."
+msgstr ""
+"Certifique-se de que o código em [.filename]#src/contrib# esteja atualizado."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:100
+msgid ""
+"Build the source tree (or just part of it) with extra warnings enabled and "
+"clean up the warnings. A list of build warnings can also be found from our "
+"https://ci.freebsd.org[CI] by selecting a build and checking \"LLVM/Clang "
+"Warnings\"."
+msgstr ""
+"Compile o de código-fonte do sistema (ou apenas parte dele) com avisos "
+"extras ativados e limpe os avisos. Uma lista de avisos de compilação também "
+"pode ser encontrada em nosso https://ci.freebsd.org[CI] selecionando uma "
+"compilação e verificando \"LLVM/Clang Warnings\"."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:101
+msgid ""
+"Fix warnings for ports which do deprecated things like using `gets()` or "
+"including [.filename]#malloc.h#."
+msgstr ""
+"Corrija os avisos para ports que fazem coisas depreciadas, como usar "
+"`gets()` ou incluir [.filename]#malloc.h#."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:102
+msgid ""
+"If you have contributed any ports and you had to make FreeBSD-specific "
+"changes, send your patches back to the original authors (this will make your "
+"life easier when they bring out the next version)."
+msgstr ""
+"Se você contribuiu com quaisquer ports e teve que fazer mudanças específicas "
+"para o FreeBSD, envie seus patches de volta para os autores originais (isso "
+"facilitará sua vida quando eles lançarem a próxima versão)."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:103
+msgid ""
+"Get copies of formal standards like POSIX(R). Compare FreeBSD's behavior to "
+"that required by the standard. If the behavior differs, particularly in "
+"subtle or obscure corners of the specification, send in a PR about it. If "
+"you are able, figure out how to fix it and include a patch in the PR. If you "
+"think the standard is wrong, ask the standards body to consider the question."
+msgstr ""
+"Obtenha cópias dos padrões formais, como o POSIX(R). Compare o comportamento "
+"do FreeBSD com o exigido pelo padrão. Se o comportamento for diferente, "
+"especialmente em cantos sutis ou obscuros da especificação, envie um PR "
+"sobre isso. Se puder, descubra como corrigi-lo e inclua um patch no PR. Se "
+"achar que o padrão está errado, peça ao organismo responsável pelos padrões "
+"para considerar a questão."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:104
+msgid "Suggest further tasks for this list!"
+msgstr "Sugira novas tarefas para esta lista!"
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:105
+#, no-wrap
+msgid "Work through the PR Database"
+msgstr "Trabalhe no Banco de Dados de PR (Relatório de Problema) do FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:112
+msgid ""
+"The https://bugs.FreeBSD.org/search/[FreeBSD PR list] shows all the current "
+"active problem reports and requests for enhancement that have been submitted "
+"by FreeBSD users. The PR database includes both programmer and non-"
+"programmer tasks. Look through the open PRs, and see if anything there "
+"takes your interest. Some of these might be very simple tasks that just "
+"need an extra pair of eyes to look over them and confirm that the fix in the "
+"PR is a good one. Others might be much more complex, or might not even have "
+"a fix included at all."
+msgstr ""
+"A https://bugs.FreeBSD.org/search/[lista de PRs do FreeBSD] mostra todos os "
+"relatórios de problemas ativos e solicitações de aprimoramento que foram "
+"enviados pelos usuários do FreeBSD. O banco de dados de PRs inclui tarefas "
+"tanto para programadores quanto para não-programadores. Olhe através dos PRs "
+"abertos e veja se algo lhe interessa. Alguns desses podem ser tarefas muito "
+"simples que só precisam de um par extra de olhos para examiná-los e "
+"confirmar que a correção no PR é boa. Outros podem ser muito mais complexos, "
+"ou podem nem mesmo ter uma correção incluída."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:115
+msgid ""
+"Start with the PRs that have not been assigned to anyone else. If a PR is "
+"assigned to someone else, but it looks like something you can handle, email "
+"the person it is assigned to and ask if you can work on it-they might "
+"already have a patch ready to be tested, or further ideas that you can "
+"discuss with them."
+msgstr ""
+"Comece com os PRs que não foram atribuídos a mais ninguém. Se um PR foi "
+"atribuído a outra pessoa, mas parece algo que você pode lidar, envie um e-"
+"mail para a pessoa a quem foi atribuído e pergunte se você pode trabalhar "
+"nele - eles podem já ter um patch pronto para ser testado ou outras ideias "
+"que você possa discutir com eles."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:116
+#, no-wrap
+msgid "Ongoing Ports Tasks"
+msgstr "Tarefas contínuas relacionadas a coleção de ports"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:121
+msgid ""
+"The Ports Collection is a perpetual work in progress. We want to provide "
+"our users with an easy to use, up to date, high quality repository of third "
+"party software. We need people to donate some of their time and effort to "
+"help us achieve this goal."
+msgstr ""
+"A coleção de ports é um trabalho contínuo em andamento. Queremos fornecer "
+"aos nossos usuários um repositório de software de terceiros fácil de usar, "
+"atualizado e de alta qualidade. Precisamos que as pessoas doem parte de seu "
+"tempo e esforço para nos ajudar a alcançar esse objetivo."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:125
+msgid ""
+"Anyone can get involved, and there are lots of different ways to do so. "
+"Contributing to ports is an excellent way to help \"give back\" something to "
+"the project. Whether you are looking for an ongoing role, or a fun "
+"challenge for a rainy day, we would love to have your help!"
+msgstr ""
+"Qualquer um pode se envolver e há muitas maneiras diferentes de fazer isso. "
+"Contribuir para os ports é uma excelente maneira de ajudar a \"retribuir\" "
+"algo ao projeto. Se você está procurando um papel contínuo ou um desafio "
+"divertido para um dia chuvoso, adoraríamos ter a sua ajuda!"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:127
+msgid ""
+"There are a number of easy ways you can contribute to keeping the ports tree "
+"up to date and in good working order:"
+msgstr ""
+"Há várias maneiras fáceis de contribuir para manter a árvore de ports "
+"atualizada e em bom funcionamento:"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:129
+msgid ""
+"Find some cool or useful software and extref:{porters-handbook}[create a "
+"port] for it."
+msgstr ""
+"Encontre algum software legal ou útil e extref:{porters-handbook}[crie um "
+"port] para ele."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:130
+msgid ""
+"There are a large number of ports that have no maintainer. Become a "
+"maintainer and <<adopt-port>>."
+msgstr ""
+"Há muitos ports que não têm mantenedor. Torne-se um mantenedor e adote-o "
+"(<<adopt-port>>)."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:131
+msgid "If you have created or adopted a port, be aware of <<maintain-port>>."
+msgstr ""
+"Se você criou ou adotou um port, esteja ciente sobre <<maintain-port>>."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:132
+msgid "When you are looking for a quick challenge you could <<fix-broken>>."
+msgstr "Quando você estiver procurando um desafio rápido, <<fix-broken>>."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:133
+#, no-wrap
+msgid "Pick one of the items from the Ideas page"
+msgstr "Escolha um dos itens da “página de idéias”"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:137
+msgid ""
+"The https://wiki.freebsd.org/IdeasPage[FreeBSD list of projects and ideas "
+"for volunteers] is also available for people willing to contribute to the "
+"FreeBSD project. The list is being regularly updated and contains items for "
+"both programmers and non-programmers with information about each project."
+msgstr ""
+"A https://wiki.freebsd.org/IdeasPage[lista de projetos e ideias para "
+"voluntários] do FreeBSD também está disponível para pessoas dispostas a "
+"contribuir para o projeto FreeBSD. A lista é atualizada regularmente e "
+"contém itens para programadores e não-programadores, com informações sobre "
+"cada projeto."
+
+#. type: Title ==
+#: documentation/content/en/articles/contributing/_index.adoc:139
+#, no-wrap
+msgid "How to Contribute"
+msgstr "Como Contribuir"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:142
+msgid ""
+"Contributions to the system generally fall into one or more of the following "
+"5 categories:"
+msgstr ""
+"As contribuições para o sistema geralmente se enquadram em uma ou mais das "
+"seguintes 5 categorias:"
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:144
+#, no-wrap
+msgid "Bug Reports and General Commentary"
+msgstr "Relatórios de Bugs e Comentários Gerais"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:149
+msgid ""
+"An idea or suggestion of _general_ technical interest should be mailed to "
+"the {freebsd-hackers}. Likewise, people with an interest in such things "
+"(and a tolerance for a _high_ volume of mail!) may subscribe to the {freebsd-"
+"hackers}. See extref:{handbook}[The FreeBSD Handbook, eresources-mail] for "
+"more information about this and other mailing lists."
+msgstr ""
+"Uma ideia ou sugestão de interesse técnico _geral_ deve ser enviada para a "
+"{freebsd-hackers}. Da mesma forma, pessoas com interesse nesses assuntos (e "
+"tolerância para um volume _alto_ de mensagens!) podem se inscrever na "
+"{freebsd-hackers}. Consulte o extref:{handbook}[Handbook do FreeBSD, "
+"eresources-mail] para obter mais informações sobre esta e outras listas de e-"
+"mail."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:152
+msgid ""
+"If you are submitting a simple patch to the src repo, please consider "
+"submitting it to the project's GitHub mirror as https://github.com/freebsd/"
+"freebsd-src/pulls[a pull request]. Suitable submissions should:"
+msgstr ""
+"Se você está enviando um patch simples para o repositório src, considere "
+"enviar um https://github.com/freebsd/freebsd-src/pulls[pull request] para o "
+"espelho do projeto no GitHub. Envios adequados devem:"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:154
+msgid ""
+"It is ready or nearly ready to be committed. A committer should be able to "
+"land this patch with less than 10 minutes of additional work."
+msgstr ""
+"Estar pronto ou quase pronto para ser Commitado. Um committer deve ser capaz "
+"de aplicar este patch com menos de 10 minutos de trabalho adicional."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:155
+msgid "It passes all the GitHub CI jobs."
+msgstr "Ele passa em todos os trabalhos de CI do GitHub."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:156
+msgid "You can respond to feedback quickly."
+msgstr "Você pode responder rapidamente a feedbacks."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:157
+msgid ""
+"It touches fewer than about 10 files and the changes are less than about 200 "
+"lines. Changes larger than this may be OK, or you may be asked to submit "
+"multiple pull requests of a more manageable size."
+msgstr ""
+"Ele afeta menos de 10 arquivos e as mudanças têm menos de 200 linhas. "
+"Mudanças maiores do que isso podem ser OK, ou você pode ser solicitado a "
+"enviar vários pull requests de um tamanho mais gerenciável."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:158
+msgid ""
+"Each logical change is a separate commit within the pull request. Commit "
+"messages for each change should follow extref:{committers-guide}#commit-log-"
+"message[commit log guide]."
+msgstr ""
+"Cada mudança lógica é um commit separado dentro do pull request. As "
+"mensagens de commit para cada mudança devem seguir o extref:{committers-"
+"guide}#commit-log-message[guia de log de commit]."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:159
+msgid ""
+"All commits have your name and valid email address as you'd like to see them "
+"in the FreeBSD repository as the author. Fake github.com addresses cannot be "
+"used."
+msgstr ""
+"Todos os commits têm o seu nome e um endereço de e-mail válido como você "
+"gostaria de vê-los no repositório do FreeBSD como autor. Endereços falsos do "
+"github.com não podem ser usados."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:160
+msgid ""
+"The scope of the pull request should not change during review. If the review "
+"suggests changes that expand the scope, please create an independent pull "
+"request."
+msgstr ""
+"O escopo do pull request não deve ser alterado durante a revisão. Se a "
+"revisão sugerir mudanças que expandam o escopo, crie um pull request "
+"independente."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:161
+msgid ""
+"Fixup commits should be squashed with the commit they are fixing. Each "
+"commit in your branch should be suitable for FreeBSD's repository."
+msgstr ""
+"Commits de correção devem ser combinados com o commit que estão corrigindo. "
+"Cada commit em seu branch deve ser adequado para o repositório do FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:162
+msgid ""
+"Commits should include one or more `Signed-off-by:` lines with full name and "
+"email address certifying https://developercertificate.org/[Developer "
+"Certificate of Origin]."
+msgstr ""
+"Os commits devem incluir uma ou mais linhas `Signed-off-by:` com nome "
+"completo e endereço de e-mail certificando o https://developercertificate."
+"org/[Certificado de Origem do Desenvolvedor]."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:167
+msgid ""
+"When updating pull request, please rebase with a forced push rather than a "
+"merge commit. More complex changes may be submitted as pull requests, but "
+"they may be closed if they are too large, too unwieldy, become inactive, "
+"need further discussion in the community, or need extensive revision. "
+"Please avoid creating large, wide-ranging cleanup patches: they are too "
+"large and lack the focus needed for a good review. Misdirected patches may "
+"be redirected to a more appropriate forum for the patch to be resolved."
+msgstr ""
+"Ao atualizar um pull request, por favor faça o rebase com um push forçado em "
+"vez de um commit de merge. Mudanças mais complexas podem ser submetidas como "
+"pull requests, mas podem ser fechadas se forem muito grandes, difíceis de "
+"manusear, tornarem-se inativas, precisarem de mais discussão na comunidade "
+"ou precisarem de uma revisão extensa. Por favor, evite criar grandes patches "
+"de limpeza abrangentes: eles são muito grandes e não têm o foco necessário "
+"para uma boa revisão. Patches mal direcionados podem ser redirecionados para "
+"um fórum mais apropriado para a resolução do patch."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:170
+msgid ""
+"Pull requests submitted to the ports repository may or may not see action, "
+"based on the whims of developers. For now, you will have a better "
+"experience if you follow the ports submission process <<ports-contributing>>."
+msgstr ""
+"Os pull requests submetidos ao repositório de ports podem ou não receber "
+"atenção, dependendo do interesse dos desenvolvedores. Por enquanto, para ter "
+"uma melhor experiência é melhor seguir o processo de submissão de ports "
+"descrito na seção <<ports-contributing>> ."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:172
+msgid ""
+"The docs team also accepts pull requests via GitHub, but has not established "
+"any policy for them yet."
+msgstr ""
+"A equipe de documentação também aceita pull requests via GitHub, mas ainda "
+"não estabeleceu nenhuma política para eles."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:179
+msgid ""
+"If you find a bug or are submitting a specific change, please report it "
+"using the https://bugs.FreeBSD.org/submit/[bug submission form]. Try to "
+"fill-in each field of the bug report. Unless they exceed 65KB, include any "
+"patches directly in the report. If the patch is suitable to be applied to "
+"the source tree put `[PATCH]` in the synopsis of the report. When including "
+"patches, _do not_ use cut-and-paste because cut-and-paste turns tabs into "
+"spaces and makes them unusable. When patches are a lot larger than 20KB, "
+"consider compressing them (eg. with man:gzip[1] or man:bzip2[1]) prior to "
+"uploading them."
+msgstr ""
+"Se você encontrar um bug ou estiver enviando uma mudança específica, por "
+"favor relate-o usando o https://bugs.FreeBSD.org/submit/[formulário de "
+"submissão de bug]. Tente preencher cada campo do relatório de bug. A menos "
+"que excedam 65KB, inclua quaisquer patches diretamente no relatório. Se o "
+"patch for adequado para ser aplicado à árvore de código fonte, coloque "
+"`[PATCH]` na sinopse do relatório. Ao incluir patches, _não_ use o copiar e "
+"colar, pois o copiar e colar transforma os tabs em espaços e os torna "
+"inutilizáveis. Quando os patches são muito maiores do que 20KB, considere "
+"comprimi-los (por exemplo, com man:gzip[1] ou man:bzip2[1]) antes de enviá-"
+"los."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:182
+msgid ""
+"After filing a report, you should receive confirmation along with a tracking "
+"number. Keep this tracking number so that you can update us with details "
+"about the problem."
+msgstr ""
+"Depois de enviar um relatório, você deve receber uma confirmação juntamente "
+"com um número de rastreamento. Guarde este número de rastreamento para que "
+"você possa nos atualizar com detalhes sobre o problema."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:184
+msgid ""
+"See also extref:{problem-reports}[this article] on how to write good problem "
+"reports."
+msgstr ""
+"Veja também extref:{problem-reports}[este artigo] sobre como escrever bons "
+"relatórios de problemas."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:185
+#, no-wrap
+msgid "Changes to the Documentation"
+msgstr "Mudanças na Documentação"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:190
+msgid ""
+"Changes to the documentation are overseen by the {freebsd-doc}. Please look "
+"at the extref:{fdp-primer}[FreeBSD Documentation Project Primer] for "
+"complete instructions. Send submissions and changes (even small ones are "
+"welcome!) using the same method as any other bug report."
+msgstr ""
+"As mudanças na documentação são supervisionadas pelo {freebsd-doc}. Por "
+"favor, consulte o extref:{fdp-primer}[FreeBSD Documentation Project Primer] "
+"para obter instruções completas. Envie submissões e alterações (mesmo as "
+"pequenas são bem-vindas!) usando o mesmo método que qualquer outro relatório "
+"de bug."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:191
+#, no-wrap
+msgid "Changes to Existing Source Code"
+msgstr "Mudanças no Código Fonte Existente"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:196
+msgid ""
+"An addition or change to the existing source code is a somewhat trickier "
+"affair and depends a lot on how far out of date you are with the current "
+"state of FreeBSD development. There is a special on-going release of "
+"FreeBSD known as \"FreeBSD-CURRENT\" which is made available in a variety of "
+"ways for the convenience of developers working actively on the system. See "
+"extref:{handbook}[The FreeBSD Handbook, current-stable] for more information "
+"about getting and using FreeBSD-CURRENT."
+msgstr ""
+"Uma adição ou mudança no código-fonte existente é um assunto um pouco mais "
+"complicado e depende muito de quão desatualizado você está em relação ao "
+"estado atual do desenvolvimento do FreeBSD. Há uma versão especial em "
+"andamento do FreeBSD conhecida como \"FreeBSD-CURRENT\" que está disponível "
+"de várias maneiras para a conveniência de desenvolvedores que trabalham "
+"ativamente no sistema. Veja o extref:{handbook}[Handbook do FreeBSD, current-"
+"stable] para mais informações sobre como obter e usar o FreeBSD-CURRENT."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:199
+msgid ""
+"Working from older sources unfortunately means that your changes may "
+"sometimes be too obsolete or too divergent for easy re-integration into "
+"FreeBSD. Chances of this can be minimized somewhat by subscribing to the "
+"{freebsd-announce} and the {freebsd-current} lists, where discussions on the "
+"current state of the system take place."
+msgstr ""
+"Trabalhar a partir de fontes mais antigos infelizmente significa que suas "
+"alterações às vezes podem ser muito obsoletas ou divergentes demais para uma "
+"reintegração fácil no FreeBSD. As chances disso podem ser minimizadas um "
+"pouco ao se inscrever nas listas {freebsd-announce} e {freebsd-current}, "
+"onde ocorrem discussões sobre o estado atual do sistema."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:202
+msgid ""
+"Assuming that you can manage to secure fairly up-to-date sources to base "
+"your changes on, the next step is to produce a set of diffs to send to the "
+"FreeBSD maintainers. This is done with the man:diff[1] command."
+msgstr ""
+"Assumindo que você consegue obter fontes razoavelmente atualizadas para "
+"basear suas alterações, o próximo passo é produzir um conjunto de diffs para "
+"enviar aos mantenedores do FreeBSD. Isso é feito com o comando man:diff[1]."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:204
+msgid ""
+"The preferred man:diff[1] format for submitting patches is the unified "
+"output format generated by `diff -u`."
+msgstr ""
+"A preferência do formato man:diff[1] para envio de correções é o formato de "
+"saída unificada gerado pelo `diff -u`."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/contributing/_index.adoc:208
+#, no-wrap
+msgid "% diff -u oldfile newfile\n"
+msgstr "% diff -u oldfile newfile\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:211
+msgid "or"
+msgstr "ou"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/contributing/_index.adoc:215
+#, no-wrap
+msgid "% diff -u -r -N olddir newdir\n"
+msgstr "% diff -u -r -N olddir newdir\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:218
+msgid ""
+"would generate a set of unified diffs for the given source file or directory "
+"hierarchy."
+msgstr ""
+"Iria gerar um conjunto de diffs unificados para o arquivo ou hierarquia de "
+"diretórios de origem fornecidos."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:220
+msgid "See man:diff[1] for more information."
+msgstr "Consulte man:diff[1] para obter mais informações."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:224
+msgid ""
+"Once you have a set of diffs (which you may test with the man:patch[1] "
+"command), you should submit them for inclusion with FreeBSD as a bug "
+"report. _Do not_ just send the diffs to the {freebsd-hackers} or they will "
+"get lost! We greatly appreciate your submission (this is a volunteer "
+"project!); because we are busy, we may not be able to address it "
+"immediately, but it will remain in the PR database until we do. Indicate "
+"your submission by including `[PATCH]` in the synopsis of the report."
+msgstr ""
+"Uma vez que você tem um conjunto de diffs (que você pode testar com o "
+"comando man:patch[1]), você deve enviá-los para inclusão no FreeBSD como um "
+"relatório de problema. _Não_ envie apenas os diffs para a {freebsd-hackers}, "
+"pois eles serão perdidos! Agradecemos muito sua contribuição (este é um "
+"projeto voluntário!); como estamos ocupados, pode ser que não consigamos "
+"lidar com isso imediatamente, mas ele permanecerá no banco de dados de PRs "
+"até que o façamos. Indique sua submissão incluindo `[PATCH]` no resumo do "
+"relatório."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:227
+msgid ""
+"If you feel it appropriate (e.g. you have added, deleted, or renamed files), "
+"bundle your changes into a `tar` file. Archives created with man:shar[1] "
+"are also welcome."
+msgstr ""
+"Se você achar apropriado (por exemplo, você adicionou, removeu ou renomeou "
+"arquivos), agrupe suas alterações em um arquivo `tar`. Arquivos criados com "
+"o comando man:shar[1] também são bem-vindos."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:231
+msgid ""
+"If your change is of a potentially sensitive nature, such as if you are "
+"unsure of copyright issues governing its further distribution then you "
+"should send it to {core-email} directly rather than submitting as a bug "
+"report. The {core-email} reaches a much smaller group of people who do much "
+"of the day-to-day work on FreeBSD. Note that this group is also _very busy_ "
+"and so you should only send mail to them where it is truly necessary."
+msgstr ""
+"Se a sua alteração for potencialmente sensível, como se você não tem certeza "
+"sobre questões de direitos autorais que regem a distribuição posterior, você "
+"deve enviá-la diretamente para {core-email} em vez de enviar como um "
+"relatório de bug. O {core-email} atinge um grupo muito menor de pessoas que "
+"fazem muito do trabalho diário no FreeBSD. Observe que esse grupo também é "
+"_muito ocupado_ e, portanto, você só deve enviar e-mails a eles quando for "
+"realmente necessário."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:234
+msgid ""
+"Please refer to man:intro[9] and man:style[9] for some information on coding "
+"style. We would appreciate it if you were at least aware of this "
+"information before submitting code."
+msgstr ""
+"Por favor, consulte man:intro[9] e man:style[9] para obter informações sobre "
+"o estilo de codificação. Agradecemos se você pelo menos estiver ciente "
+"dessas informações antes de enviar código."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:235
+#, no-wrap
+msgid "New Code or Major Value-Added Packages"
+msgstr "Código Novo ou Pacotes de Grande Valor Adicionado"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:239
+msgid ""
+"In the case of a significant contribution of a large body work, or the "
+"addition of an important new feature to FreeBSD, it becomes almost always "
+"necessary to either send changes as tar files or upload them to a web or FTP "
+"site for other people to access. If you do not have access to a web or FTP "
+"site, ask on an appropriate FreeBSD mailing list for someone to host the "
+"changes for you."
+msgstr ""
+"No caso de uma contribuição significativa de um grande volume de trabalho, "
+"ou a adição de um novo recurso importante ao FreeBSD, torna-se quase sempre "
+"necessário enviar as alterações como arquivos tar ou carregá-los em um "
+"website ou FTP para que outras pessoas possam acessá-los. Se você não tem "
+"acesso a um website ou FTP, peça em uma lista de discussão apropriada do "
+"FreeBSD para alguém hospedar as alterações para você."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:244
+msgid ""
+"When working with large amounts of code, the touchy subject of copyrights "
+"also invariably comes up. FreeBSD prefers free software licenses such as "
+"BSD or ISC. Copyleft licenses such as GPLv2 are sometimes permitted. The "
+"complete listing can be found on the link:https://www.FreeBSD.org/internal/"
+"software-license/[core team licensing policy] page."
+msgstr ""
+"Quando se trabalha com grandes quantidades de código, a questão delicada de "
+"direitos autorais inevitavelmente surge. O FreeBSD prefere licenças de "
+"software livre tais como BSD ou ISC. Licenças copyleft como GPLv2 às vezes "
+"são permitidas. A lista completa pode ser encontrada na página da link:"
+"https://www.FreeBSD.org/internal/software-license/[política de licenciamento "
+"do core team]."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:245
+#, no-wrap
+msgid "Money or Hardware"
+msgstr "Dinheiro ou Hardware"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:248
+msgid ""
+"We are always very happy to accept donations to further the cause of the "
+"FreeBSD Project and, in a volunteer effort like ours, a little can go a long "
+"way! Donations of hardware are also very important to expanding our list of "
+"supported peripherals since we generally lack the funds to buy such items "
+"ourselves."
+msgstr ""
+"Estamos sempre muito felizes em receber doações para promover a causa do "
+"Projeto FreeBSD e, em um esforço voluntário como o nosso, um pouco pode "
+"fazer muita diferença! As doações de hardware também são muito importantes "
+"para expandir nossa lista de periféricos suportados, já que geralmente não "
+"temos fundos para comprar tais itens nós mesmos."
+
+#. type: Title ====
+#: documentation/content/en/articles/contributing/_index.adoc:250
+#, no-wrap
+msgid "Donating Funds"
+msgstr "Doando Dinheiro"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:255
+msgid ""
+"The https://www.freebsdfoundation.org[FreeBSD Foundation] is a non-profit, "
+"tax-exempt foundation established to further the goals of the FreeBSD "
+"Project. As a 501(c)3 entity, the Foundation is generally exempt from US "
+"federal income tax as well as Colorado State income tax. Donations to a tax-"
+"exempt entity are often deductible from taxable federal income."
+msgstr ""
+"A FreeBSD Foundation é uma fundação sem fins lucrativos e isenta de "
+"impostos, estabelecida para promover os objetivos do projeto FreeBSD. Como "
+"uma entidade 501(c)3, a fundação é geralmente isenta de imposto de renda "
+"federal dos EUA, bem como do imposto de renda estadual do Colorado. As "
+"doações para uma entidade isenta de impostos muitas vezes são dedutíveis do "
+"imposto de renda federal tributável."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:257
+msgid "Donations may be sent in check form to:"
+msgstr "Doações podem ser enviadas em forma de cheque para:"
+
+#. type: delimited block * 4
+#: documentation/content/en/articles/contributing/_index.adoc:265
+#, fuzzy
+#| msgid ""
+#| "The FreeBSD Foundation\n"
+#| "3980 Broadway Street\n"
+#| "STE #103-107\n"
+#| "Boulder CO 80304\n"
+#| "USA"
+msgid ""
+"The FreeBSD Foundation + 3980 Broadway Street + STE #103-107 + Boulder CO "
+"80304 + USA"
+msgstr ""
+"The FreeBSD Foundation\n"
+"3980 Broadway Street\n"
+"STE #103-107\n"
+"Boulder CO 80304\n"
+"USA"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:268
+msgid ""
+"The FreeBSD Foundation is also able to accept https://www.freebsdfoundation."
+"org/donate/[online donations] through various payment options."
+msgstr ""
+"A FreeBSD Foundation também é capaz de receber https://www.freebsdfoundation."
+"org/donate/[doações online] através de várias opções de pagamento."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:271
+msgid ""
+"More information about the FreeBSD Foundation can be found in https://people."
+"FreeBSD.org/~jdp/foundation/announcement.html[The FreeBSD Foundation -- an "
+"Introduction]. To contact the Foundation by email, write to mailto:"
+"info@FreeBSDFoundation.org[info@FreeBSDFoundation.org]."
+msgstr ""
+"Mais informações sobre a FreeBSD Foundation podem ser encontradas em https://"
+"people.FreeBSD.org/~jdp/foundation/announcement.html[The FreeBSD Foundation "
+"- uma introdução]. Para entrar em contato com a Fundação por e-mail, escreva "
+"para mailto:info@FreeBSDFoundation.org[info@FreeBSDFoundation.org]."
+
+#. type: Title ====
+#: documentation/content/en/articles/contributing/_index.adoc:272
+#, no-wrap
+msgid "Donating Hardware"
+msgstr "Doando Hardware"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:276
+msgid ""
+"The FreeBSD Project happily accepts donations of hardware that it can find "
+"good use for. If you are interested in donating hardware, please contact "
+"the link:https://www.FreeBSD.org/donations/[Donations Liaison Office]."
+msgstr ""
+"O Projeto FreeBSD alegremente aceita doações de hardware que possa ser "
+"utilizado de forma benéfica. Se você estiver interessado em doar hardware, "
+"por favor, entre em contato com o link:https://www.FreeBSD.org/donations/"
+"[Departamento de Coordenação de Doações]."
+
+#. type: Title ==
+#: documentation/content/en/articles/contributing/_index.adoc:278
+#, no-wrap
+msgid "Contributing to ports"
+msgstr "Contribuindo com a coleção de ports"
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:281
+#, no-wrap
+msgid "Adopting an unmaintained port"
+msgstr "Adotando um port não mantido"
+
+#. type: Title ====
+#: documentation/content/en/articles/contributing/_index.adoc:283
+#, no-wrap
+msgid "Choosing an unmaintained port"
+msgstr "Escolhendo um port não mantido"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:289
+msgid ""
+"Taking over maintainership of ports that are unmaintained is a great way to "
+"get involved. Unmaintained ports are only updated and fixed when somebody "
+"volunteers to work on them. There are a large number of unmaintained "
+"ports. It is a good idea to start with adopting a port that you use "
+"regularly."
+msgstr ""
+"Assumir a manutenção de ports que não são mantidos é uma ótima maneira de se "
+"envolver. Os ports não mantidos são atualizados e corrigidos somente quando "
+"alguém se voluntaria para trabalhar neles. Há um grande número de ports não "
+"mantidos. É uma boa ideia começar adotando um port que você usa regularmente."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:292
+msgid ""
+"Unmaintained ports have their `MAINTAINER` set to `ports@FreeBSD.org`. Many "
+"unmaintained ports can have pending updates, this can be seen at the https://"
+"portscout.freebsd.org/ports@freebsd.org.html[FreeBSD Ports distfile scanner]."
+msgstr ""
+"Os ports não mantidos têm seu campo `MAINTAINER` definido como "
+"`ports@FreeBSD.org`. Muitos ports não mantidos podem ter atualizações "
+"pendentes, que podem ser vistas no https://portscout.freebsd.org/"
+"ports@freebsd.org.html[scanner de arquivos de distribuição dos Ports do "
+"FreeBSD]."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:294
+msgid ""
+"On https://portsfallout.com/fallout?port=&maintainer=ports%40FreeBSD."
+"org[PortsFallout] can be seen a list of unmaintained ports with errors."
+msgstr ""
+"Em https://portsfallout.com/fallout?port=&maintainer=ports%40FreeBSD."
+"org[PortsFallout], pode ser vista uma lista de ports sem manutenção com "
+"erros."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:297
+msgid ""
+"Some ports affect a large number of others due to dependencies and slave "
+"port relationships. Generally, we want people to have some experience "
+"before they maintain such ports."
+msgstr ""
+"Alguns ports afetam um grande número de outros devido a dependências e "
+"relacionamentos de ports escravos. Geralmente, esperamos que as pessoas "
+"tenham alguma experiência antes de se voluntariarem para manter tais ports."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:301
+msgid ""
+"You can find out whether or not a port has dependencies or slave ports by "
+"looking at a master index of ports called [.filename]#INDEX#. (The name of "
+"the file varies by release of FreeBSD; for instance, [.filename]#INDEX-8#.) "
+"Some ports have conditional dependencies that are not included in a default "
+"[.filename]#INDEX# build. We expect you to be able to recognize such ports "
+"by looking through other ports' [.filename]#Makefile#'s."
+msgstr ""
+"Você pode descobrir se um port possui dependências ou ports dependentes "
+"olhando para o índice mestre de ports chamado [.filename]#INDEX#. (O nome do "
+"arquivo varia de acordo com a versão do FreeBSD; por exemplo, [."
+"filename]#INDEX-8#). Alguns ports têm dependências condicionais que não são "
+"incluídas em uma compilação padrão do [.filename]#INDEX#. Esperamos que você "
+"seja capaz de reconhecer esses ports através da análise dos [."
+"filename]#Makefile# de outros ports."
+
+#. type: Title ====
+#: documentation/content/en/articles/contributing/_index.adoc:302
+#, no-wrap
+msgid "How to adopt the port"
+msgstr "Como adotar um port"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:307
+msgid ""
+"First make sure you understand your <<maintain-port>>. Also read the extref:"
+"{porters-handbook}[Porter's Handbook]. _Please do not commit yourself to "
+"more than you feel you can comfortably handle._"
+msgstr ""
+"Primeiro, certifique-se de entender <<maintain-port>>. Também leia o "
+"<<porters-handbook>>. _Por favor, não se comprometa com mais do que você "
+"sente que pode lidar confortavelmente._"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:313
+msgid ""
+"You may request maintainership of any unmaintained port as soon as you "
+"wish. Simply set `MAINTAINER` to your own email address and send a PR "
+"(Problem Report) with the change. If the port has build errors or needs "
+"updating, you may wish to include any other changes in the same PR. This "
+"will help because many committers are less willing to assign maintainership "
+"to someone who does not have a known track record with FreeBSD. Submitting "
+"PRs that fix build errors or update ports are the best ways to establish one."
+msgstr ""
+"Você pode solicitar a manutenção de qualquer port não mantido assim que "
+"desejar. Basta definir `MAINTAINER` para o seu próprio endereço de e-mail e "
+"enviar um PR (Relatório de Problema) com a alteração. Se o port tiver erros "
+"de compilação ou precisar ser atualizado, talvez você queira incluir outras "
+"alterações no mesmo PR. Isso ajudará porque muitos committers estão menos "
+"dispostos a atribuir a manutenção a alguém que não tem um histórico "
+"conhecido com o FreeBSD. Enviar PRs que corrijam erros de compilação ou "
+"atualizem os ports são as melhores maneiras de estabelecer um histórico."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:317
+msgid ""
+"File your PR with category `ports` and class `change-request`. A committer "
+"will examine your PR, commit the changes, and finally close the PR. "
+"Sometimes this process can take a little while (committers are volunteers, "
+"too :)."
+msgstr ""
+"Envie seu PR com a categoria `ports` e a classe `change-request`. Um "
+"committer examinará seu PR, confirmará as alterações e, por fim, fechará o "
+"PR. Às vezes, esse processo pode levar um pouco de tempo (os committers "
+"também são voluntários :)."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:319
+#, no-wrap
+msgid "The challenge for port maintainers"
+msgstr "O desafio para os mantenedores de ports"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:322
+msgid ""
+"This section will give you an idea of why ports need to be maintained and "
+"outline the responsibilities of a port maintainer."
+msgstr ""
+"Esta seção lhe dará uma ideia do motivo pelo qual os ports precisam ser "
+"mantidos e esboçará as responsabilidades de um mantenedor de port."
+
+#. type: Title ====
+#: documentation/content/en/articles/contributing/_index.adoc:324
+#, no-wrap
+msgid "Why ports require maintenance"
+msgstr "Por que um port requer manutenção"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:329
+msgid ""
+"Creating a port is a once-off task. Ensuring that a port is up to date and "
+"continues to build and run requires an ongoing maintenance effort. "
+"Maintainers are the people who dedicate some of their time to meeting these "
+"goals."
+msgstr ""
+"Criar um port é uma tarefa única. Garantir que um port esteja atualizado e "
+"continue a ser compilado e executado requer um esforço contínuo de "
+"manutenção. Os mantenedores são as pessoas que dedicam parte do seu tempo "
+"para atender a esses objetivos."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:332
+msgid ""
+"The foremost reason ports need maintenance is to bring the latest and "
+"greatest in third party software to the FreeBSD community. An additional "
+"challenge is to keep individual ports working within the Ports Collection "
+"framework as it evolves."
+msgstr ""
+"A razão mais importante pela qual os ports precisam de manutenção é para "
+"trazer o que há de mais recente e melhor em software de terceiros para a "
+"comunidade FreeBSD. Um desafio adicional é manter os ports individuais "
+"funcionando dentro do framework da Coleção de Ports à medida que ele evolui."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:334
+msgid "As a maintainer, you will need to manage the following challenges:"
+msgstr "Como mantenedor, você precisará gerenciar os seguintes desafios:"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:336
+#, no-wrap
+msgid "*New software versions and updates.* New versions and updates of existing ported software become available all the time, and these need to be incorporated into the Ports Collection in order to provide up-to-date software.\n"
+msgstr "*Novas versões de software e atualizações.* Novas versões e atualizações dos softwares portados se tornam disponíveis o tempo todo e precisam ser incorporadas na Coleção de Ports para fornecer software atualizado.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:338
+#, no-wrap
+msgid "*Changes to dependencies.* If significant changes are made to the dependencies of your port, it may need to be updated so that it will continue to work correctly.\n"
+msgstr "*Mudanças nas dependências.* Se houverem mudanças significativas nas dependências do seu port, pode ser necessário atualizá-lo para que continue a funcionar corretamente.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:340
+#, no-wrap
+msgid "*Changes affecting dependent ports.* If other ports depend on a port that you maintain, changes to your port may require coordination with other maintainers.\n"
+msgstr "*Mudanças que afetam ports dependentes.* Se outros ports dependem de um port que você mantém, as alterações no seu port podem exigir coordenação com outros mantenedores.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:342
+#, no-wrap
+msgid "*Interaction with other users, maintainers and developers.* Part of being a maintainer is taking on a support role. You are not expected to provide general support (but we welcome it if you choose to do so). What you should provide is a point of coordination for FreeBSD-specific issues regarding your ports.\n"
+msgstr "*Interatividade com outros usuários, mantenedores e desenvolvedores.* Parte de ser um mantenedor é assumir um papel de suporte. Não se espera que você forneça suporte geral (mas você é bem vindo se você optar por fazê-lo). O que você deve fornecer é um ponto de coordenação para problemas específicos do FreeBSD relacionados aos seus ports.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:344
+#, no-wrap
+msgid "*Bug hunting.* A port may be affected by bugs which are specific to FreeBSD. You will need to investigate, find, and fix these bugs when they are reported. Thoroughly testing a port to identify problems before they make their way into the Ports Collection is even better.\n"
+msgstr "*Procura de bugs.* Um port pode ser afetado por bugs específicos do FreeBSD. Você precisará investigar, encontrar e corrigir esses bugs quando forem relatados. Testar minuciosamente um port para identificar problemas antes que eles sejam incluídos na Coleção de Ports é ainda melhor.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:346
+#, no-wrap
+msgid "*Changes to ports infrastructure and policy.* Occasionally the systems that are used to build ports and packages are updated or a new recommendation affecting the infrastructure is made. You should be aware of these changes in case your ports are affected and require updating.\n"
+msgstr "*Mudanças na infraestrutura e políticas dos ports.* Às vezes, os sistemas usados para compilar ports e pacotes são atualizados ou uma nova recomendação que afeta a infraestrutura é feita. Você deve estar ciente dessas mudanças no caso de seus ports serem afetados e precisarem de atualização.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:348
+#, no-wrap
+msgid "*Changes to the base system.* FreeBSD is under constant development. Changes to software, libraries, the kernel or even policy changes can cause flow-on change requirements to ports.\n"
+msgstr "*Mudanças no sistema base.* O FreeBSD está em constante desenvolvimento. Mudanças no software, bibliotecas, kernel ou até mesmo mudanças de política podem causar a necessidade de alterações em cascata nos ports.\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/contributing/_index.adoc:349
+#, no-wrap
+msgid "Maintainer responsibilities"
+msgstr "Responsabilidades do mantenedor"
+
+#. type: Title =====
+#: documentation/content/en/articles/contributing/_index.adoc:351
+#, no-wrap
+msgid "Keep your ports up to date"
+msgstr "Mantenha seus ports atualizados"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:354
+msgid ""
+"This section outlines the process to follow to keep your ports up to date."
+msgstr ""
+"Esta seção descreve o processo a ser seguido para manter seus ports "
+"atualizados."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:357
+msgid ""
+"This is an overview. More information about upgrading a port is available "
+"in the extref:{porters-handbook}[Porter's Handbook]."
+msgstr ""
+"Este é um resumo. Mais informações sobre atualização de um port estão "
+"disponíveis no extref:{porters-handbook}[Handbook do mantenedor de ports]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:361
+msgid "Watch for updates"
+msgstr "Preste atenção às atualizações"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:366
+msgid ""
+"Monitor the upstream vendor for new versions, updates and security fixes for "
+"the software. Announcement mailing lists or news web pages are useful for "
+"doing this. Sometimes users will contact you and ask when your port will be "
+"updated. If you are busy with other things or for any reason just cannot "
+"update it at the moment, ask if they will help you by submitting an update."
+msgstr ""
+"Monitorar os fabricantes upstream em relação a liberação de novas versões, "
+"patches e correções de segurança para o software. Listas de discussão e de "
+"anúncios ou páginas web de noticias sobre o software são úteis para este "
+"propósito. Algumas vezes os usuários entrarão em contato com você "
+"perguntando quando seu port será atualizado. Se você estiver ocupado com "
+"outras atividades ou devido a qualquer outra razão não puder realizar a "
+"atualização naquele momento, pergunte se o usuário pode te ajudar enviando "
+"uma atualização."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:369
+msgid ""
+"You may also receive automated email from the `FreeBSD Ports Version Check` "
+"informing you that a newer version of your port's distfile is available. "
+"More information about that system (including how to stop future emails) "
+"will be provided in the message."
+msgstr ""
+"Você também pode receber e-mails automáticos do `FreeBSD Ports Version "
+"Check` informando que uma versão mais recente do arquivo de distribuição do "
+"seu port está disponível. Mais informações sobre esse sistema (incluindo "
+"como interromper futuros e-mails) serão fornecidas na mensagem."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:370
+msgid "Incorporate changes"
+msgstr "Incorporar mudanças"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:373
+msgid ""
+"When they become available, incorporate the changes into the port. You need "
+"to be able to generate a patch between the original port and your updated "
+"port."
+msgstr ""
+"Quando estiverem disponíveis, incorpore as alterações no port. Você precisa "
+"ser capaz de gerar um patch entre o port original e o seu port atualizado."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:374
+msgid "Review and test"
+msgstr "Revisão e testes"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:376
+msgid "Thoroughly review and test your changes:"
+msgstr "Examine cuidadosamente e teste as suas mudanças:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:378
+msgid ""
+"Build, install and test your port on as many platforms and architectures as "
+"you can. It is common for a port to work on one branch or platform and fail "
+"on another."
+msgstr ""
+"Compile, instale e teste seu port em quantas plataformas e arquiteturas "
+"puder. É comum um port funcionar em um branch ou plataforma e falhar em "
+"outro."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:379
+msgid ""
+"Make sure your port's dependencies are complete. The recommended way of "
+"doing this is by installing your own ports tinderbox. See <<resources>> for "
+"more information."
+msgstr ""
+"Certifique-se de que as dependências do seu port estejam completas. A "
+"maneira recomendada de fazer isso é instalando o seu próprio tinderbox. "
+"Consulte <<resources>> para obter mais informações."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:380
+msgid ""
+"Check that the packing list is up to date. This involves adding in any new "
+"files and directories and removing unused entries."
+msgstr ""
+"Verifique se a lista de pacotes está atualizada. Isso envolve adicionar "
+"quaisquer novos arquivos e diretórios e remover entradas não utilizadas."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:381
+msgid ""
+"Verify your port using man:portlint[1] as a guide. See <<resources>> for "
+"important information about using portlint."
+msgstr ""
+"Verifique seu port usando o comando man:portlint[1] como guia. Consulte "
+"<<resources>> para obter informações importantes sobre o uso do portlint."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:382
+msgid ""
+"Consider whether changes to your port might cause any other ports to break. "
+"If this is the case, coordinate the changes with the maintainers of those "
+"ports. This is especially important if your update changes the shared "
+"library version; in this case, at the very least, the dependent ports will "
+"need to get a `PORTREVISION` bump so that they will automatically be "
+"upgraded by automated tools such as portmaster or man:portupgrade[1]."
+msgstr ""
+"Considere se as alterações em seu port podem fazer com que outros ports se "
+"quebrem. Se for o caso, coordene as alterações com os mantenedores desses "
+"ports. Isso é especialmente importante se sua atualização alterar a versão "
+"da biblioteca compartilhada; nesse caso, pelo menos os ports dependentes "
+"precisarão receber um incremento no `PORTREVISION` para que sejam "
+"atualizados automaticamente por ferramentas automatizadas, como portmaster "
+"ou man:portupgrade[1]."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:384
+#: documentation/content/en/articles/contributing/_index.adoc:451
+msgid "Submit changes"
+msgstr "Envie as alterações"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:387
+msgid ""
+"Send your update by submitting a PR with an explanation of the changes and a "
+"patch containing the differences between the original port and the updated "
+"one. Please refer to extref:{problem-reports}[Writing FreeBSD Problem "
+"Reports] for information on how to write a really good PR."
+msgstr ""
+"Envie sua atualização submetendo um PR com uma explicação das alterações e "
+"um patch contendo as diferenças entre o port original e o atualizado. "
+"Consulte o extref:{problem-reports}[Redação de Relatórios de Problemas do "
+"FreeBSD] para obter informações sobre como escrever um PR realmente bom."
+
+#. type: delimited block = 6
+#: documentation/content/en/articles/contributing/_index.adoc:393
+msgid ""
+"Please do not submit a man:shar[1] archive of the entire port; instead, use "
+"man:git-format-patch[1] or man:diff[1] `-ruN`. In this way, committers can "
+"much more easily see exactly what changes are being made. The Porter's "
+"Handbook section on extref:{porters-handbook}[Upgrading, port-upgrading] has "
+"more information."
+msgstr ""
+"Por favor, não envie um arquivo man:shar[1] do port inteiro; em vez disso, "
+"use man:git-format-patch[1] ou man:diff[1] `-ruN`. Dessa forma, os "
+"committers podem ver com muito mais facilidade exatamente quais mudanças "
+"estão sendo feitas. A seção extref:{porters-handbook}[Atualização, port-"
+"upgrading] do Handbook do Mantenedor de Ports contém mais informações."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:395
+msgid "Wait"
+msgstr "Aguarde"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:399
+msgid ""
+"At some stage a committer will deal with your PR. It may take minutes, or "
+"it may take one or two weeks - so please be patient. If it takes any "
+"longer, please seek for help on mailing lists ({freebsd-ports}), IRC: "
+"#bsdports on EFNet or #freebsd-ports on Libera for example."
+msgstr ""
+"Em algum momento, um committer lidará com o seu PR. Isso pode levar minutos "
+"ou pode levar uma ou duas semanas - portanto, tenha paciência. Se levar mais "
+"tempo, procure ajuda em listas de discussão ({freebsd-ports}), no IRC: "
+"#bsdports na EFNet ou #freebsd-ports na Libera, por exemplo."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:400
+msgid "Give feedback"
+msgstr "Dê feedback"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:403
+msgid ""
+"If a committer finds a problem with your changes, they will most likely "
+"refer it back to you. A prompt response will help get your PR committed "
+"faster, and is better for maintaining a thread of conversation when trying "
+"to resolve any problems."
+msgstr ""
+"Se um committer encontrar um problema com as suas alterações, eles "
+"provavelmente o encaminharão de volta para você. Uma resposta rápida ajudará "
+"a obter a aprovação do seu PR mais rapidamente e é melhor para manter uma "
+"conversa ao tentar resolver qualquer problema."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:404
+msgid "And Finally"
+msgstr "E finalmente"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:407
+msgid ""
+"Your changes will be committed and your port will have been updated. The PR "
+"will then be closed by the committer. That's it!"
+msgstr ""
+"Suas alterações serão incorporadas e o seu port será atualizada. O PR será "
+"então fechado pelo committer. É isso aí!"
+
+#. type: Title =====
+#: documentation/content/en/articles/contributing/_index.adoc:409
+#, no-wrap
+msgid "Ensure your ports continue to build correctly"
+msgstr "Garanta que seus ports continuem a ser compilados corretamente"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:412
+msgid ""
+"This section is about discovering and fixing problems that stop your ports "
+"from building correctly."
+msgstr ""
+"Esta seção é sobre a descoberta e a solução de problemas que fazem seus "
+"ports deixarem de ser compilados corretamente."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:415
+msgid ""
+"FreeBSD only guarantees that the Ports Collection works on the `-STABLE` "
+"branches. In theory, you should be able to get by with running the latest "
+"release of each stable branch (since the ABIs are not supposed to change) "
+"but if you can run the branch, that is even better."
+msgstr ""
+"O FreeBSD garante o funcionamento da Coleção de Ports apenas nos branches `-"
+"STABLE`. Em teoria, você deveria ser capaz de rodar a versão mais recente de "
+"cada branch estável (já que as ABIs não devem mudar), mas se puder rodar o "
+"branch, isso é ainda melhor."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:419
+msgid ""
+"Since the majority of FreeBSD installations run on PC-compatible machines "
+"(what is termed the `i386` architecture), we expect you to keep the port "
+"working on that architecture. We prefer that ports also work on the `amd64` "
+"architecture running native. It is completely fair to ask for help if you "
+"do not have one of these machines."
+msgstr ""
+"Como a maioria das instalações do FreeBSD é executada em máquinas "
+"compatíveis com PC (o que é chamado de arquitetura `i386`), esperamos que "
+"você mantenha o port funcionando nessa arquitetura. Preferimos que os ports "
+"também funcionem na arquitetura `amd64` executando nativamente. É "
+"completamente justo pedir ajuda se você não tiver uma dessas máquinas."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:424
+msgid ""
+"The usual failure modes for non-`x86` machines are that the original "
+"programmers assumed that, for instance, pointers are `int`-s, or that a "
+"relatively lax older gcc compiler was being used. More and more, "
+"application authors are reworking their code to remove these assumptions - "
+"but if the author is not actively maintaining their code, you may need to do "
+"this yourself."
+msgstr ""
+"Os modos comuns de falha para máquinas não-`x86` são que os programadores "
+"originais assumiram, por exemplo, que os ponteiros são `int`, ou que um "
+"compilador gcc mais antigo e relativamente relaxado estava sendo usado. Cada "
+"vez mais, os autores de aplicativos estão retrabalhando seu código para "
+"remover essas suposições - mas se o autor não estiver mantendo ativamente "
+"seu código, você pode precisar fazer isso sozinho."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:427
+msgid ""
+"These are the tasks you need to perform to ensure your port is able to be "
+"built:"
+msgstr ""
+"Estas são as tarefas que você precisa realizar para garantir que o seu port "
+"possa ser compilado:"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:431
+msgid "Watch for build failures"
+msgstr "Fique atento a falhas na compilação"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:433
+msgid ""
+"Check your mail for mail from `pkg-fallout@FreeBSD.org` and the http://"
+"portscout.FreeBSD.org[distfiles scanner] to see if any of the port which are "
+"failing to build are out of date."
+msgstr ""
+"Verifique seu e-mail para ver se há mensagens de `pkg-fallout@FreeBSD.org` e "
+"do http://portscout.FreeBSD.org[scanner de distfiles] para ver se algum dos "
+"ports que estão falhando na compilação está desatualizado."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:434
+#: documentation/content/en/articles/contributing/_index.adoc:482
+msgid "Collect information"
+msgstr "Colete informação"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:438
+msgid ""
+"Once you are aware of a problem, collect information to help you fix it. "
+"Build errors reported by `pkg-fallout` are accompanied by logs which will "
+"show you where the build failed. If the failure was reported to you by a "
+"user, ask them to send you information which may help in diagnosing the "
+"problem, such as:"
+msgstr ""
+"Assim que você estiver ciente de um problema, colete informações para ajudá-"
+"lo a corrigi-lo. Os erros de compilação relatados pelo `pkg-fallout` são "
+"acompanhados por logs que mostrarão onde a compilação falhou. Se a falha foi "
+"relatada por um usuário, peça a eles que enviem informações que possam "
+"ajudar a diagnosticar o problema, tais como:"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:440
+msgid "Build logs"
+msgstr "Logs de compilação"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:441
+msgid ""
+"The commands and options used to build the port (including options set in [."
+"filename]#/etc/make.conf#)"
+msgstr ""
+"Os comandos e opções usados para compilar o port (incluindo opções definidas "
+"no [.filename]#/etc/make.conf#)"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:442
+msgid ""
+"A list of packages installed on their system as shown by man:pkg-info[8]"
+msgstr ""
+"Uma lista de pacotes instalados no seu sistema, conforme mostrado por man:"
+"pkg-info[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:443
+msgid "The version of FreeBSD they are running as shown by man:uname[1] `-a`"
+msgstr ""
+"A versão do FreeBSD que estão executando, conforme mostrado por man:uname[1] "
+"`-a`"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:444
+msgid "When their ports collection was last updated"
+msgstr "Quando a coleção de ports foi atualizada pela última vez"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:445
+msgid "When their ports tree and [.filename]#INDEX# was last updated"
+msgstr ""
+"Quando a sua coleção de ports e o arquivo [.filename]#INDEX# foram "
+"atualizados pela última vez"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:447
+msgid "Investigate and find a solution"
+msgstr "Investigue e encontre uma solução"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:450
+msgid ""
+"Unfortunately there is no straightforward process to follow to do this. "
+"Remember, though: if you are stuck, ask for help! The {freebsd-ports} is a "
+"good place to start, and the upstream developers are often very helpful."
+msgstr ""
+"Infelizmente, não há um processo direto a seguir para fazer isso. Lembre-se, "
+"no entanto: se estiver travado, peça ajuda! O {freebsd-ports} é um bom lugar "
+"para começar, e os desenvolvedores upstream geralmente são muito prestativos."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:453
+msgid ""
+"Just as with updating a port, you should now incorporate changes, review and "
+"test, submit your changes in a PR, and provide feedback if required."
+msgstr ""
+"Assim como na atualização de um port, agora você deve incorporar as "
+"alterações, revisar, testar e enviar suas alterações em um relatório de "
+"problemas (PR) e fornecer feedback, se solicitado."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:454
+msgid "Send patches to upstream authors"
+msgstr "Envie os patches para os autores upstream"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:459
+msgid ""
+"In some cases, you will have to make patches to the port to make it run on "
+"FreeBSD. Some (but not all) upstream authors will accept such patches back "
+"into their code for the next release. If so, this may even help their users "
+"on other BSD-based systems as well and perhaps save duplicated effort. "
+"Please consider sending any applicable patches to the authors as a courtesy."
+msgstr ""
+"Em alguns casos, você terá que fazer patches no port para fazê-lo funcionar "
+"no FreeBSD. Alguns (mas não todos) os autores upstream aceitarão tais "
+"patches em seu código para a próxima versão. Se for o caso, isso pode até "
+"ajudar seus usuários em outros sistemas baseados em BSD e talvez economizar "
+"esforço duplicado. Considere enviar quaisquer patches aplicáveis aos autores "
+"como uma cortesia."
+
+#. type: Title =====
+#: documentation/content/en/articles/contributing/_index.adoc:461
+#, no-wrap
+msgid "Investigate bug reports and PRs related to your port"
+msgstr "Investigue relatórios de bugs e PRs relacionados ao seu port"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:464
+msgid "This section is about discovering and fixing bugs."
+msgstr "Esta seção é sobre como descobrir e corrigir bugs."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:467
+msgid ""
+"FreeBSD-specific bugs are generally caused by assumptions about the build "
+"and runtime environments that do not apply to FreeBSD. You are less likely "
+"to encounter a problem of this type, but it can be more subtle and difficult "
+"to diagnose."
+msgstr ""
+"Os bugs específicos do FreeBSD são geralmente causados por suposições sobre "
+"os ambientes de compilação e de tempo de execução que não se aplicam ao "
+"FreeBSD. É menos provável que você encontre um problema desse tipo, mas ele "
+"pode ser mais sutil e difícil de diagnosticar."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:469
+msgid ""
+"These are the tasks you need to perform to ensure your port continues to "
+"work as intended:"
+msgstr ""
+"Essas são as tarefas que você precisa realizar para garantir que seu port "
+"continue funcionando conforme o esperado:"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:473
+msgid "Respond to bug reports"
+msgstr "Responda os relatórios de bugs"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:476
+msgid ""
+"Bugs may be reported to you through email via the https://bugs.FreeBSD.org/"
+"search/[Problem Report database]. Bugs may also be reported directly to you "
+"by users."
+msgstr ""
+"Os bugs podem ser relatados a você por e-mail através do https://bugs."
+"FreeBSD.org/search/[banco de dados de relatórios de problemas]. Os bugs "
+"também podem ser relatados diretamente a você pelos usuários."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:479
+msgid ""
+"You should respond to PRs and other reports within 14 days, but please try "
+"not to take that long. Try to respond as soon as possible, even if it is "
+"just to say you need some more time before you can work on the PR."
+msgstr ""
+"Você deve responder a PRs e outros relatórios dentro de 14 dias, mas tente "
+"não levar tanto tempo. Tente responder o mais rápido possível, mesmo que "
+"seja apenas para dizer que você precisa de mais tempo antes de poder "
+"trabalhar no PR."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:481
+msgid ""
+"If you have not responded after 14 days, any committer may commit from a PR "
+"that you have not responded to via a `maintainer-timeout`."
+msgstr ""
+"Se você não respondeu após 14 dias, qualquer committer pode fazer o commit "
+"de um PR que você não respondeu através de um `maintainer-timeout`."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:484
+msgid ""
+"If the person reporting the bug has not also provided a fix, you need to "
+"collect the information that will allow you to generate one."
+msgstr ""
+"Se a pessoa que reportou o bug também não forneceu uma correção, você "
+"precisa coletar as informações que permitirão gerar uma correção."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:487
+msgid ""
+"If the bug is reproducible, you can collect most of the required information "
+"yourself. If not, ask the person who reported the bug to collect the "
+"information for you, such as:"
+msgstr ""
+"Se o erro puder ser reproduzido, você pode coletar a maioria das informações "
+"necessárias por conta própria. Caso contrário, peça para a pessoa que "
+"relatou o erro coletar as informações para você, como:"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:489
+msgid ""
+"A detailed description of their actions, expected program behavior and "
+"actual behavior"
+msgstr ""
+"Uma descrição detalhada das ações realizadas, comportamento esperado do "
+"programa e comportamento atual"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:490
+msgid "Copies of input data used to trigger the bug"
+msgstr "Cópias dos dados de entrada usados para acionar o bug"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:491
+msgid ""
+"Information about their build and execution environment - for example, a "
+"list of installed packages and the output of man:env[1]"
+msgstr ""
+"Informações sobre o ambiente de compilação e execução - por exemplo, uma "
+"lista de pacotes instalados e a saída de man:env[1]"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:492
+msgid "Core dumps"
+msgstr "Core dumps"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:493
+msgid "Stack traces"
+msgstr "Stack traces"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:495
+msgid "Eliminate incorrect reports"
+msgstr "Elimine os relatórios incorretos"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:501
+msgid ""
+"Some bug reports may be incorrect. For example, the user may have simply "
+"misused the program; or their installed packages may be out of date and "
+"require updating. Sometimes a reported bug is not specific to FreeBSD. In "
+"this case report the bug to the upstream developers. If the bug is within "
+"your capabilities to fix, you can also patch the port so that the fix is "
+"applied before the next upstream release."
+msgstr ""
+"Algumas notificações de bugs podem estar incorretas. Por exemplo, o usuário "
+"pode ter simplesmente utilizado o programa de forma inadequada ou seus "
+"pacotes instalados podem estar desatualizados e precisarem ser atualizados. "
+"Às vezes, um bug reportado não é específico do FreeBSD. Nesse caso, reporte "
+"o bug para os desenvolvedores upstream. Se o bug estiver dentro de suas "
+"capacidades de corrigir, você também pode corrigir o port para que a "
+"correção seja aplicada antes do próximo release upstream."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:502
+msgid "Find a solution"
+msgstr "Encontre uma solução"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:505
+msgid ""
+"As with build errors, you will need to sort out a fix to the problem. "
+"Again, remember to ask if you are stuck!"
+msgstr ""
+"Tal como acontece com erros de compilação, você precisará encontrar uma "
+"correção para o problema. Mais uma vez, lembre-se de perguntar se você "
+"estiver emperrado!"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:506
+msgid "Submit or approve changes"
+msgstr "Envie ou aprove alterações"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:509
+msgid ""
+"Just as with updating a port, you should now incorporate changes, review and "
+"test, and submit your changes in a PR (or send a follow-up if a PR already "
+"exists for the problem). If another user has submitted changes in the PR, "
+"you can also send a follow-up saying whether or not you approve the changes."
+msgstr ""
+"Assim como na atualização de um port, você deve incorporar as mudanças, "
+"revisar e testar e enviar suas mudanças em um PR (ou enviar um "
+"acompanhamento se já existir um PR para o problema). Se outro usuário tiver "
+"enviado mudanças no PR, você também pode enviar um acompanhamento dizendo se "
+"aprova ou não as mudanças."
+
+#. type: Title =====
+#: documentation/content/en/articles/contributing/_index.adoc:511
+#, no-wrap
+msgid "Providing support"
+msgstr "Forneça Suporte"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:516
+msgid ""
+"Part of being a maintainer is providing support - not for the software in "
+"general - but for the port and any FreeBSD-specific quirks and problems. "
+"Users may contact you with questions, suggestions, problems and patches. "
+"Most of the time their correspondence will be specific to FreeBSD."
+msgstr ""
+"Parte de ser um mantenedor é fornecer suporte - não para o software em geral "
+"- mas para o port e quaisquer peculiaridades e problemas específicos do "
+"FreeBSD. Os usuários podem entrar em contato com você com perguntas, "
+"sugestões, problemas e patches. Na maioria das vezes, a correspondência "
+"deles será específica para o FreeBSD."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:520
+msgid ""
+"Occasionally you may have to invoke your skills in diplomacy, and kindly "
+"point users seeking general support to the appropriate resources. Less "
+"frequently you will encounter a person asking why the `RPMS` are not up to "
+"date or how can they get the software to run under Foo Linux. Take the "
+"opportunity to tell them that your port is up to date (if it is, of "
+"course!), and suggest that they try FreeBSD."
+msgstr ""
+"Ocasionalmente, você pode ter que invocar suas habilidades em diplomacia e "
+"gentilmente direcionar usuários que buscam suporte geral para os recursos "
+"apropriados. Com menos frequência, você encontrará alguém perguntando por "
+"que os `RPMS` não estão atualizados ou como eles podem fazer o software "
+"rodar no Foo Linux. Aproveite a oportunidade para dizer que seu port está "
+"atualizado (se estiver, é claro!) e sugira que eles experimentem o FreeBSD."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:523
+msgid ""
+"Sometimes users and developers will decide that you are a busy person whose "
+"time is valuable and do some of the work for you. For example, they might:"
+msgstr ""
+"Às vezes, os usuários e os desenvolvedores podem decidir que você é uma "
+"pessoa ocupada cujo tempo é valioso e farão parte do trabalho para você. Por "
+"exemplo, eles podem:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:525
+msgid "submit a PR or send you patches to update your port,"
+msgstr "enviar um PR ou lhe enviar patches para atualizar o seu port,"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:526
+msgid "investigate and perhaps provide a fix to a PR, or"
+msgstr "investigar e talvez fornecer uma correção para um PR, ou"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:527
+msgid "otherwise submit changes to your port."
+msgstr "caso contrário, enviar alterações para o seu port."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:533
+msgid ""
+"In these cases your main obligation is to respond in a timely manner. "
+"Again, the timeout for non-responsive maintainers is 14 days. After this "
+"period changes may be committed unapproved. They have taken the trouble to "
+"do this for you; so please try to at least respond promptly. Then review, "
+"approve, modify or discuss their changes with them as soon as possible."
+msgstr ""
+"Nesses casos, sua principal obrigação é responder de forma rápida. "
+"Novamente, o prazo para mantenedores não responsivos é de 14 dias. Após esse "
+"período, as alterações podem ser realizadas sem aprovação. Eles fizeram o "
+"esforço para ajudá-lo, então tente pelo menos responder prontamente. Em "
+"seguida, revise, aprove, modifique ou discuta as alterações com eles o mais "
+"rápido possível."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:535
+msgid ""
+"If you can make them feel that their contribution is appreciated (and it "
+"should be) you will have a better chance persuading them to do more things "
+"for you in the future :-)."
+msgstr ""
+"Se você puder fazê-los sentir que a contribuição deles é apreciada (e "
+"deveria ser), você terá uma chance maior de persuadi-los a fazer mais coisas "
+"para você no futuro :-)."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:537
+#, no-wrap
+msgid "Finding and fixing a broken port"
+msgstr "Encontre e conserte um port quebrado"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:540
+msgid ""
+"There are some really good places to find a port that needs some attention."
+msgstr ""
+"Existem alguns bons lugares para encontrar um port que precisa de atenção."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:543
+msgid ""
+"You can use the https://bugs.freebsd.org/search[web interface] to the "
+"Problem Report database to search through and view unresolved PRs. The "
+"majority of ports PRs are updates, but with a little searching and skimming "
+"over synopses you should be able to find something interesting to work on "
+"(the `sw-bug` class is a good place to start)."
+msgstr ""
+"Você pode usar a https://bugs.freebsd.org/search[interface web] do banco de "
+"dados de Relatórios de Problemas para pesquisar e visualizar relatórios de "
+"problemas não resolvidos. A maioria dos relatórios de problemas para os "
+"ports são atualizações, mas com uma pequena busca e leitura das sinopses "
+"você deverá ser capaz de encontrar algo interessante para trabalhar (a "
+"classe `sw-bug` é um bom lugar para começar)."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:545
+msgid ""
+"https://portsfallout.com/[PortsFallout] shows port issues gathered from the "
+"FreeBSD package building."
+msgstr ""
+"O https://portsfallout.com/[PortsFallout] mostra problemas de ports "
+"coletados durante a compilação de pacotes no FreeBSD."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:547
+msgid ""
+"It is OK to send changes for a maintained port as well, but remember to ask "
+"the maintainer in case they are already working on the problem."
+msgstr ""
+"Também é OK enviar alterações para um port que possui um mantenedor, mas "
+"lembre-se de perguntar ao mantenedor no caso de já estarem trabalhando no "
+"problema."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:551
+msgid ""
+"Once you have found a bug or problem, collect information, investigate and "
+"fix! If there is an existing PR, follow up to that. Otherwise create a new "
+"PR. Your changes will be reviewed and, if everything checks out, committed."
+msgstr ""
+"Depois de encontrar um bug ou problema, colete informações, investigue e "
+"corrija! Se houver um PR existente, faça um follow-up nela. Caso contrário, "
+"crie um novo PR. Suas alterações serão revisadas e, se tudo estiver correto, "
+"serão comitadas."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:553
+#, no-wrap
+msgid "When to call it quits"
+msgstr "Quando desistir"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:559
+msgid ""
+"As your interests and commitments change, you may find that you no longer "
+"have time to continue some (or all) of your ports contributions. That is "
+"fine! Please let us know if you are no longer using a port or have otherwise "
+"lost time or interest in being a maintainer. In this way we can go ahead "
+"and allow other people to try to work on existing problems with the port "
+"without waiting for your response. Remember, FreeBSD is a volunteer "
+"project, so if maintaining a port is no fun any more, it is probably time to "
+"let someone else do it!"
+msgstr ""
+"À medida que seus interesses e compromissos mudam, você pode descobrir que "
+"não tem mais tempo para continuar com algumas (ou todas) as suas "
+"contribuições para a coleção de ports. Tudo bem! Por favor, nos avise se "
+"você não estiver mais usando um port ou se não tiver mais tempo ou interesse "
+"em ser um mantenedor. Desta forma, podemos seguir em frente e permitir que "
+"outras pessoas tentem trabalhar nos problemas existentes com o port sem "
+"termos que esperar por sua resposta. Lembre-se, o FreeBSD é um projeto "
+"voluntário, então se a manutenção de um port não for mais divertida, "
+"provavelmente é hora de deixar alguém fazer isso!"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:563
+msgid ""
+"In any case, the Ports Management Team (`portmgr`) reserves the right to "
+"reset your maintainership if you have not actively maintained your port in "
+"some time. (Currently, this is set to 3 months.) By this, we mean that "
+"there are unresolved problems or pending updates that have not been worked "
+"on during that time."
+msgstr ""
+"Em qualquer caso, a equipe de gerenciamento de ports (`portmgr`) se reserva "
+"o direito de redefinir sua posição de mantenedor se você não mantiver "
+"ativamente seu port por algum tempo. (Atualmente, este tempo é de 3 meses.) "
+"Com isso, queremos dizer que existem problemas não resolvidos ou "
+"atualizações pendentes que não foram trabalhadas durante esse tempo."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:565
+#, no-wrap
+msgid "Resources for ports maintainers and contributors"
+msgstr "Recursos para mantenedores de ports e contribuidores"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:568
+msgid ""
+"The extref:{porters-handbook}[Porter's Handbook] is your hitchhiker's guide "
+"to the ports system. Keep it handy!"
+msgstr ""
+"O extref:{porters-handbook}[Handbook do Mantenedor de Ports] é o seu guia do "
+"sistema de ports. Mantenha-o sempre à mão!"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:571
+msgid ""
+"extref:{problem-reports}[Writing FreeBSD Problem Reports] describes how to "
+"best formulate and submit a PR. In 2005 more than eleven thousand ports PRs "
+"were submitted! Following this article will greatly assist us in reducing "
+"the time needed to handle your PRs."
+msgstr ""
+"o artigo extref:{problem-reports}[Escrevendo Relatórios de Problemas do "
+"FreeBSD] descreve como formular e submeter um PR da melhor maneira possível. "
+"Em 2005, mais de onze mil PRs de ports foram submetidos! Seguir este artigo "
+"ajudará muito a reduzir o tempo necessário para lidar com seus PRs."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:573
+msgid ""
+"The https://bugs.freebsd.org/bugzilla/query.cgi[Problem Report database]."
+msgstr ""
+"O https://bugs.freebsd.org/bugzilla/query.cgi[banco de dados de Relatórios "
+"de Problemas]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:576
+msgid ""
+"The http://portscout.FreeBSD.org[FreeBSD Ports distfile scanner (portscout)] "
+"can show you ports for which the distfiles are not fetchable. You can check "
+"on your own ports or use it to find ports that need their `MASTER_SITES` "
+"updated."
+msgstr ""
+"O http://portscout.FreeBSD.org[scanner de arquivos de distribuição de ports "
+"do FreeBSD (portscout)] pode mostrar os ports para os quais os arquivos de "
+"distribuição não podem ser baixados. Você pode verificar os seus próprios "
+"ports ou usá-lo para encontrar ports que precisam atualizar seus "
+"`MASTER_SITES`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:579
+msgid ""
+"package:ports-mgmt/poudriere[] is the most thorough way to test a port "
+"through the entire cycle of installation, packaging, and deinstallation. "
+"Documentation is located at the https://github.com/freebsd/"
+"poudriere[poudriere github repository]"
+msgstr ""
+"O package:ports-mgmt/poudriere[] é a maneira mais completa de testar um port "
+"por todo o ciclo de instalação, empacotamento e desinstalação. A "
+"documentação está localizada no https://github.com/freebsd/"
+"poudriere[repositório do GitHub do poudriere]"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:583
+msgid ""
+"man:portlint[1] is an application which can be used to verify that your port "
+"conforms to many important stylistic and functional guidelines. portlint is "
+"a simple heuristic application, so you should use it __only as a guide__. "
+"If portlint suggests changes which seem unreasonable, consult the extref:"
+"{porters-handbook}[Porter's Handbook] or ask for advice."
+msgstr ""
+"O man:portlint[1] é um aplicativo que pode ser usado para verificar se o seu "
+"port está em conformidade com muitas diretrizes estilísticas e funcionais "
+"importantes. O portlint é uma aplicação heurística simples, portanto, você "
+"deve usá-lo __apenas como guia__. Se o portlint sugerir mudanças que parecem "
+"inaceitáveis, consulte o extref:{porters-handbook}[Porter's Handbook] ou "
+"peça conselhos."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:588
+msgid ""
+"The {freebsd-ports} is for general ports-related discussion. It is a good "
+"place to ask for help. You can link:https://lists.freebsd.org/[subscribe, "
+"or read and search the list archives]. Reading the archives of the {freebsd-"
+"ports-bugs} and the {svn-ports-head} may also be of interest."
+msgstr ""
+"A {freebsd-ports} é o local para discussões gerais relacionadas a ports. É "
+"um bom lugar para pedir ajuda. Você pode se link:https://lists.freebsd.org/"
+"[inscrever], ou ler e pesquisar os arquivos da lista. Ler os arquivos das "
+"listas {freebsd-ports-bugs} e {svn-ports-head} também pode ser interessante."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:590
+msgid ""
+"https://portsfallout.com/[PortsFallout] is a place to help in searching for "
+"the https://lists.freebsd.org/archives/freebsd-pkg-fallout/[FreeBSD package-"
+"fallout archive]."
+msgstr ""
+"O https://portsfallout.com/[PortsFallout] é um site útil para buscar "
+"informações no https://lists.freebsd.org/archives/freebsd-pkg-fallout/"
+"[arquivo de erros de pacotes do FreeBSD]."
+
+#. type: Title ==
+#: documentation/content/en/articles/contributing/_index.adoc:592
+#, no-wrap
+msgid "Getting Started in Other Areas"
+msgstr "Começando em outras áreas"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:595
+msgid ""
+"Looking for something interesting to get started that is not mentioned "
+"elsewhere in this article? The FreeBSD Project has several Wiki pages "
+"containing areas within which new contributors can get ideas on how to get "
+"started."
+msgstr ""
+"Procurando por algo interessante para começar, e que não foi mencionado em "
+"outras partes deste artigo? O Projeto FreeBSD tem várias páginas Wiki "
+"contendo áreas nas quais novos colaboradores podem ter ideias sobre como "
+"começar."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:597
+msgid ""
+"The https://wiki.freebsd.org/JuniorJobs[Junior Jobs] page has a list of "
+"projects that might be of interest to people just getting started in "
+"FreeBSD, and want to work on interesting things to get their feet wet."
+msgstr ""
+"A página https://wiki.freebsd.org/JuniorJobs[Junior Jobs] contém uma lista "
+"de projetos que podem interessar pessoas que estão começando no FreeBSD e "
+"querem trabalhar em coisas interessantes para se familiarizar com o sistema."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:598
+msgid ""
+"The https://wiki.freebsd.org/IdeasPage[Ideas Page] contains various \"nice "
+"to have\" or \"interesting\" things to work on in the Project."
+msgstr ""
+"A https://wiki.freebsd.org/IdeasPage[página de idéias] contém várias "
+"sugestões de projetos \"interessantes\" ou \"nice to have\" para trabalhar "
+"no projeto."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+
+#, fuzzy
+#~ msgid ""
+#~ "At some stage a committer will deal with your PR. It may take minutes, "
+#~ "or it may take weeks - so please be patient."
+#~ msgstr ""
+#~ "Em algum momento, um commiter lidará com o seu PR. Isto pode levar alguns "
+#~ "minutos ou pode levar semanas - portanto, seja paciente."
diff --git a/documentation/content/pt-br/articles/contributors/_index.adoc b/documentation/content/pt-br/articles/contributors/_index.adoc
index 926c840b7d..fc4b4abf66 100644
--- a/documentation/content/pt-br/articles/contributors/_index.adoc
+++ b/documentation/content/pt-br/articles/contributors/_index.adoc
@@ -60,84 +60,16 @@ endif::[]
[.abstract-title]
Resumo
-Este artigo lista pessoas e organizações que fizeram alguma contribuição para o FreeBSD.
+Este artigo lista pessoas e organizações que fizeram alguma contribuição para o FreeBSD. Para ver a lista atual de Committers do FreeBSD você pode dar uma olhada na seguinte <<staff-committers, lista>>.
'''
toc::[]
-[[donors]]
-== Galeria de Doadores
-
-[NOTE]
-====
-Como em 2010, a seção a seguir está desatualiza. Doadores de vários anos anteriores aparecerão https://www.FreeBSD.org/donations/donors/[aqui].
-====
-
-O Projeto FreeBSD é suportado financeiramente pelos seguintes doadores, e gostaríamos de agradecer a todos publicamente aqui!
-
-* _Contribuidores para o servidor central do projeto:_
-+
-As pessoas e as organizações a seguir possibilitaram ao Projeto FreeBSD construir um novo servidor central, que substituiu a `freefal.FreeBSD.org` em algum momento, doando os seguintes itens:
-
-** {mbarkah} e seu empregador, http://www.hemi.com/[ Hemisphere Online], doaram um _processador Pentium Pro (P6) 200MHz_
-** http://www.asacomputers.com/[ASA Computers] doou uma _placa mãe Tyan 1662_.
-** Joe McGuckin mailto:joe@via.net[joe@via.net] da http://www.via.net/[ViaNet Communications] doou um _controlador ethernet Kingston._
-** Jack O'Neill mailto:jack@diamond.xtalwind.net[jack@diamond.xtalwind.net] doou uma _controladora SCSI NCR 53C875_.
-** Ulf Zimmermann mailto:ulf@Alameda.net[ulf@Alameda.net] da http://www.Alameda.net/[Alameda Networks] doou _128MB de memória_, e uma _unidade de disco de 4 GB e o seu case._
-
-* _Financiamento direto:_
-+
-As seguintes pessoas e organizações generosamente contribuíram com financiamento direto ao projeto:
-
-** Annelise Anderson mailto:ANDRSN@HOOVER.STANFORD.EDU[ANDRSN@HOOVER.STANFORD.EDU]
-** {dillon}
-** http://www.bluemountain.com/[Blue Mountain Arts]
-** http://www.epilogue.com/[Epilogue Technology Corporation]
-** {sef}
-** http://www.gta.com/[Global Technology Associates, Inc]
-** Don Scott Wilde
-** Gianmarco Giovannelli mailto:gmarco@masternet.it[gmarco@masternet.it]
-** Josef C. Grosch mailto:joeg@truenorth.org[joeg@truenorth.org]
-** Robert T. Morris
-** {chuckr}
-** Kenneth P. Stox mailto:ken@stox.sa.enteract.com[ken@stox.sa.enteract.com] da http://www.imagescape.com/[Imaginary Landscape, LLC.]
-** Dmitry S. Kohmanyuk mailto:dk@dog.farm.org[dk@dog.farm.org]
-** http://www.cdrom.co.jp/[Laser5] do Japão (uma parte dos lucros das vendas de vários CD-ROMs com FreeBSD).
-** http://www.mmjp.or.jp/fuki/[Fuki Shuppan Publishing Co.] doou uma parte dos seus lucros de _Hajimete no FreeBSD_ (FreeBSD, Getting started) para os projetos FreeBSD e XFree86.
-** http://www.ascii.co.jp/[ASCII Corp.] doou uma parte dos seus lucros com a venda de vários livros relacionados ao FreeBSD para o projeto FreeBSD.
-** http://www.yokogawa.co.jp/[Yokogawa Electric Corp] generosamente doou recursos significativos ao projeto FreeBSD.
-** http://www.buffnet.net/[BuffNET]
-** http://www.pacificsolutions.com/[Pacific Solutions]
-** http://www.siemens.de/[Siemens AG] via Andre Albsmeier mailto:andre.albsmeier@mchp.siemens.de[andre.albsmeier@mchp.siemens.de]
-** Chris Silva mailto:ras@interaccess.com[ras@interaccess.com]
-
-* _Doadores de Hardware:_
-+
-As seguintes pessoas e empresas generosamente contribuíram com hardware para testes e desenvolvimento/suporte de drivers de dispositivos:
-
-** BSDi por fornecer os computadores Pentium P5-90 e 486/DX2-66 EISA/VL que são utilizados para o nosso trabalho de desenvolvimento, para não falar do acesso a rede e outras doações de recursos de hardware.
-** http://www.compaq.com[Compaq] doou uma variedade de computadores Alpha systems para o projeto FreeBSD. Dentre várias generosas doações estão 4 AlphaStation DS10s, um AlphaServer DS20, AlphaServer 2100s, um AlphaServer 4100, 8 500Mhz Personal Workstations, 4 433Mhz Personal Workstations, e mais! Estas máquinas são usadas para engenharia de versões, empacotamento, desenvolvimento SMP, e desenvolvimento em geral para a arquitetura Alpha.
-** TRW Financial Systems, Inc. doou 130 PCs, três servidores de arquivos com 68 GB, doze Ethernets, dois roteadores e um switch ATM para debug de códigos diskless.
-** Dermot McDonnell doou o drive de CDROM Toshiba XM3401B atualmente usado na freefall.
-** Chuck Robey mailto:chuckr@glue.umd.edu[chuckr@glue.umd.edu] doou seu drive de fita para trabalho experimental.
-** Larry Altneu mailto:larry@ALR.COM[larry@ALR.COM], e {wilko}, doaram drives de fita Wangtek e Archive QIC-02 para melhorar o driver [.filename]#wt#.
-** Ernst Winter (http://berklix.org/ewinter/[Falecido]) contribuiu com um drive de disquete 2.88 MB para o projeto. Esperamos que isto aumente a pressão para reescrever o driver para disquetes.
-** http://www.tekram.com/[Tekram Technologies] enviou um de cada dos adaptadores FAST e ULTRA SCSI DC-390, DC-390U e DC-390F para testes de regressão dos drivers NCR e AMD com suas placas. Eles também devem ser aplaudidos por criarem o código fonte dos drivers para sistemas operacionais abertos disponíveis em seu servidor FTP em link:ftp://ftp.tekram.com/scsi/FreeBSD/[ftp://ftp.tekram.com/scsi/FreeBSD/].
-** Larry M. Augustin contribuiu não apenas com uma placa SCSI Symbios Sym8751S, mas também com um conjunto de manuais, incluindo um para o próximo chip Sym53c895 com suporte Ultra-2 e LVD, e o último manual de programação com informações sobre como utilizar com segurança as funcionalidades avançadas dos últimos chips SCSI Symbios. Muito obrigado!
-** {kuku} doou um drive de CD-ROM Mitsumi com 12x de velocidade FX120 para o desenvolvimento do driver IDE CDROM.
-** Mike Tancsa mailto:mike@sentex.ca[mike@sentex.ca] doou quatro diversas placas ATM PCI cards com o objetivo de aumentar o suporte a estas placas bem como suportar o desenvolvimento da stack ATM netatm.
-
-* _Contribuidores Especiais:_
-
-** http://www.osd.bsdi.com/[BSDi] (antigo Walnut Creek CDROM) doou mais do que podemos dizer (veja a seção 'Sobre o Projeto FreeBSD' no extref:{handbook}[FreeBSD Handbook] para mais detalhes). Em particular, nós gostaríamos de agradecê-los pelo hardware original utilizado na `freefall.FreeBSD.org`, nossa máquina de desenvolvimento primária, e pela `thud.FreeBSD.org`, uma máquina para compilações e testes. Nós também estamos em débito com eles pelo financiamento de vários contribuidores ao longo dos anos e por prover acesso irrestrito a nós em sua conexão com a Internet T1.
-** A http://www.interface-business.de/[interface business GmbH, Dresden] tem apoiado pacientemente {joerg} que muitas vezes preferiu o trabalho no FreeBSD ao invés de um trabalho remunerado, e costuma usar sua conexão de Internet da EUnet (bem caro) sempre que sua conexão privada se torna lenta demais para trabalhar com ela…
-** http://www.bsdi.com/[Berkeley Software Design, Inc.] contribuiu com seu código de emulação do DOS para o mundo BSD, o qual é utilizado no comando _doscmd_.
-
[[staff-committers]]
== Os Desenvolvedores do FreeBSD
-Estas são as pessoas que possuem privilégios de commit e fazem o trabalho de engenharia na árvore de código fonte do FreeBSD. Todos os membros do Core Team também são desenvolvedores.
+Esta lista, que inclui todos os membros do Core Team, nomeia todos que têm privilégios de commit para uma ou mais das três árvores de código (doc, ports e src). Para ver os membros atuais do Core Team, você pode dar uma olhada na link:https://www.freebsd.org/administration/#t-core[página de administração].
(em ordem alfabética pelo sobrenome):
@@ -199,3 +131,75 @@ include::{include-contrib-additional}[]
(em ordem alfabética pelo primeiro nome):
include::{include-contrib-386bsd}[]
+
+[[donors]]
+== Galeria de Doadores
+
+A FreeBSD Foundation agradece aos https://freebsdfoundation.org/our-donors/donors/[doadores financeiros e em espécie].
+
+A área https://www.freebsd.org/donations/[de contato para doações ao FreeBSD] inclui uma https://www.freebsd.org/donations/donors/[lista de hardwares doados].
+
+O Projeto FreeBSD agradece a todos os doadores!
+
+[NOTE]
+====
+Desde de 2010, a seção abaixo estava desatualizada há vários anos.
+====
+
+=== Contribuidores para o projeto do servidor central
+
+As pessoas e as organizações a seguir possibilitaram ao Projeto FreeBSD construir um novo servidor central, que substituiu a `freefal.FreeBSD.org` em algum momento, doando os seguintes itens:
+
+* {mbarkah} e seu empregador, http://www.hemi.com/[Hemisphere Online], doaram uma _CPU Pentium Pro (P6) de 200MHz_.
+* http://www.asacomputers.com/[ASA Computers] doou uma _placa mãe Tyan 1662_.
+* Joe McGuckin <mailto:joe@via.net[joe@via.net]> da http://www.via.net/[ViaNet Communications] doou um _controlador de ethernet Kingston_.
+* Jack O'Neill <mailto:jack@diamond.xtalwind.net[jack@diamond.xtalwind.net]> doou uma _controladora SCSI NCR 53C875_.
+* Ulf Zimmermann <mailto:ulf@Alameda.net[ulf@Alameda.net]> da http://www.Alameda.net/[Alameda Networks] doou _128 MB de memória_, um _disco rígido de 4 GB e o case_.
+
+=== Financiamento direto
+
+As seguintes pessoas e organizações generosamente contribuíram com financiamento direto ao projeto:
+
+* Annelise Anderson <mailto:andrsn@hoover.stanford.edu[andrsn@hoover.stanford.edu]>.
+* {dillon}.
+* http://www.bluemountain.com/[Blue Mountain Arts].
+* http://www.epilogue.com/[Epilogue Technology Corporation].
+* {sef}.
+* http://www.gta.com/[Global Technology Associates, Inc].
+* Don Scott Wilde.
+* Gianmarco Giovannelli <mailto:gmarco@masternet.it[gmarco@masternet.it]>.
+* Josef C. Grosch <mailto:joeg@truenorth.org[joeg@truenorth.org]>.
+* Robert T. Morris.
+* {chuckr}.
+* Kenneth P. Stox <mailto:ken@stox.sa.enteract.com[ken@stox.sa.enteract.com]> da http://www.imagescape.com/[Imaginary Landscape, LLC.].
+* Dmitry S. Kohmanyuk <mailto:dk@dog.farm.org[dk@dog.farm.org]>.
+* http://www.cdrom.co.jp/[Laser5] do Japão (uma parte dos lucros das vendas de vários CD-ROMs com FreeBSD).
+* http://www.mmjp.or.jp/fuki/[Fuki Shuppan Publishing Co.] doou uma parte dos seus lucros de _Hajimete no FreeBSD_ (FreeBSD, Getting started) para os projetos FreeBSD e XFree86.
+* http://www.ascii.co.jp/[ASCII Corp.] doou uma parte dos seus lucros com a venda de vários livros relacionados ao FreeBSD para o projeto FreeBSD.
+* http://www.yokogawa.co.jp/[Yokogawa Electric Corp] generosamente doou recursos significativos ao projeto FreeBSD.
+* http://www.buffnet.net/[BuffNET].
+* http://www.pacificsolutions.com/[Pacific Solutions].
+* http://www.siemens.de/[Siemens AG] via Andre Albsmeier <mailto:andre.albsmeier@mchp.siemens.de[andre.albsmeier@mchp.siemens.de]>.
+* Chris Silva <mailto:ras@interaccess.com[ras@interaccess.com]>.
+
+=== Doadores de Hardware
+
+As seguintes pessoas e empresas generosamente contribuíram com hardware para testes e desenvolvimento/suporte de drivers de dispositivos:
+
+* BSDi por fornecer os computadores Pentium P5-90 e 486/DX2-66 EISA/VL que são utilizados para o nosso trabalho de desenvolvimento, para não falar do acesso a rede e outras doações de recursos de hardware.
+* A http://www.compaq.com[Compaq] doou uma variedade de sistemas Alpha para o Projeto FreeBSD. Entre as muitas doações generosas estão 4 AlphaStation DS10s, um AlphaServer DS20, AlphaServer 2100s, um AlphaServer 4100, 8 estações de trabalho pessoais de 500 MHz, 4 estações de trabalho pessoais de 433 MHz e mais! Essas máquinas são usadas para engenharia de releases, compilação de pacotes, desenvolvimento SMP e desenvolvimento geral na arquitetura Alpha.
+* A TRW Financial Systems, Inc. forneceu 130 PCs, três servidores de arquivos de 68 GB, doze Ethernets, dois roteadores e um switch ATM para depuração do código "diskless"
+* Dermot McDonnell doou o drive de CDROM Toshiba XM3401B atualmente usado na _freefall_.
+* Chuck Robey <mailto:chuckr@glue.umd.edu[chuckr@glue.umd.edu]> doou seu drive de fita para trabalho experimental.
+* Larry Altneu <mailto:larry@alr.com[larry@alr.com],> e {wilko} forneceram drives de fita Wangtek e Archive QIC-02 para melhorar o driver [.filename]#wt#.
+* Ernst Winter (http://berklix.org/ewinter/[Falecido]) contribuiu com um drive de disquete 2.88 MB para o projeto. Esperamos que isto aumente a pressão para reescrever o driver para disquetes.
+* A http://www.tekram.com/[Tekram Technologies] enviou um de seus cartões adaptadores de host FAST e ULTRA SCSI DC-390, DC-390U e DC-390F para testes de regressão dos drivers NCR e AMD com seus cartões. Eles também devem ser aplaudidos por disponibilizar fontes de driver para sistemas operacionais gratuitos em seu servidor FTP link:ftp://ftp.tekram.com/scsi/FreeBSD/[ftp://ftp.tekram.com/scsi/FreeBSD/].
+* Larry M. Augustin contribuiu não apenas com uma placa SCSI Symbios Sym8751S, mas também com um conjunto de manuais, incluindo um para o próximo chip Sym53c895 com suporte Ultra-2 e LVD, e o último manual de programação com informações sobre como utilizar com segurança as funcionalidades avançadas dos últimos chips SCSI Symbios. Muito obrigado!
+* {kuku} doou um drive de CD-ROM Mitsumi com 12x de velocidade FX120 para o desenvolvimento do driver IDE CDROM.
+* Mike Tancsa <mailto:mike@sentex.ca[mike@sentex.ca]> doou quatro diferentes placas PCI ATM para ajudar a aumentar o suporte dessas placas, bem como apoiar o esforço de desenvolvimento da pilha ATM netatm.
+
+=== Contribuidores Especiais
+
+* http://www.osd.bsdi.com/[BSDi] (antigo Walnut Creek CDROM) doou mais do que podemos dizer (veja a seção 'Sobre o Projeto FreeBSD' no extref:{handbook}[FreeBSD Handbook] para mais detalhes). Em particular, nós gostaríamos de agradecê-los pelo hardware original utilizado na `freefall.FreeBSD.org`, nossa máquina de desenvolvimento primária, e pela `thud.FreeBSD.org`, uma máquina para compilações e testes. Nós também estamos em débito com eles pelo financiamento de vários contribuidores ao longo dos anos e por prover acesso irrestrito a nós em sua conexão com a Internet T1.
+* A http://www.interface-business.de/[interface business GmbH, Dresden] tem apoiado pacientemente {joerg} que muitas vezes preferiu trabalhar no FreeBSD em vez de trabalhos remunerados, e costumava recorrer à conexão com a Internet da EUnet (bastante cara) sempre que sua conexão privada ficava muito lenta ou instável para trabalhar com ela.
+* http://www.bsdi.com/[Berkeley Software Design, Inc.] contribuiu com seu código de emulador do DOS para o restante do mundo BSD, o qual é usado no comando `doscmd`.
diff --git a/documentation/content/pt-br/articles/contributors/_index.po b/documentation/content/pt-br/articles/contributors/_index.po
index 078c50eff6..7554b2dd81 100644
--- a/documentation/content/pt-br/articles/contributors/_index.po
+++ b/documentation/content/pt-br/articles/contributors/_index.po
@@ -1,13 +1,15 @@
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
-# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2022.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2021-06-08 07:32-0300\n"
-"PO-Revision-Date: 2021-07-25 13:04+0000\n"
-"Last-Translator: Danilo G. Baio <dbaio@FreeBSD.org>\n"
+"POT-Creation-Date: 2023-05-21 14:43-0300\n"
+"PO-Revision-Date: 2023-05-26 19:22+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
"projects/documentation/articlescontributors_index/pt_BR/>\n"
"Language: pt_BR\n"
@@ -15,15 +17,13 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.7.2\n"
+"X-Generator: Weblate 4.17\n"
#. type: YAML Front Matter: description
#: documentation/content/en/articles/contributors/_index.adoc:1
#, no-wrap
msgid "A list of organizations and individuals who have contributed to FreeBSD"
-msgstr ""
-"Este artigo lista pessoas e organizações que fizeram alguma contribuição "
-"para o FreeBSD"
+msgstr "Este artigo lista pessoas e organizações que fizeram alguma contribuição para o FreeBSD"
#. type: Title =
#: documentation/content/en/articles/contributors/_index.adoc:1
@@ -33,73 +33,244 @@ msgid "Contributors to FreeBSD"
msgstr "Contribuidores do FreeBSD"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:38
+#: documentation/content/en/articles/contributors/_index.adoc:62
msgid "Abstract"
msgstr "Resumo"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:40
+#: documentation/content/en/articles/contributors/_index.adoc:65
msgid ""
"This article lists individuals and organizations who have made a "
-"contribution to FreeBSD."
+"contribution to FreeBSD. To see the current list of FreeBSD Committers you "
+"can take a look at the following <<staff-committers, list>>."
msgstr ""
"Este artigo lista pessoas e organizações que fizeram alguma contribuição "
-"para o FreeBSD."
+"para o FreeBSD. Para ver a lista atual de Committers do FreeBSD você pode "
+"dar uma olhada na seguinte <<staff-committers, lista>>."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:42
+#: documentation/content/en/articles/contributors/_index.adoc:67
msgid "'''"
msgstr "'''"
#. type: Title ==
-#: documentation/content/en/articles/contributors/_index.adoc:46
+#: documentation/content/en/articles/contributors/_index.adoc:71
+#, no-wrap
+msgid "The FreeBSD Developers"
+msgstr "Os Desenvolvedores do FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:75
+msgid ""
+"This list, which includes all members of the Core Team, names everyone who "
+"has commit privileges for one or more of the three source trees (doc, ports "
+"and src). To see the current Core Team members you can take a look at the "
+"link:https://www.freebsd.org/administration/#t-core[administration page]."
+msgstr ""
+"Esta lista, que inclui todos os membros do Core Team, nomeia todos que têm "
+"privilégios de commit para uma ou mais das três árvores de código (doc, "
+"ports e src). Para ver os membros atuais do Core Team, você pode dar uma "
+"olhada na link:https://www.freebsd.org/administration/#t-core[página de "
+"administração]."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:77
+msgid "(in alphabetical order by last name):"
+msgstr "(em ordem alfabética pelo sobrenome):"
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:81
+#, no-wrap
+msgid "Core Team Alumni"
+msgstr "Ex Membros do Core Team"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:85
+msgid ""
+"The following people were members of the FreeBSD core team during the "
+"periods indicated. We thank them for their past efforts in the service of "
+"the FreeBSD project."
+msgstr ""
+"As seguintes pessoas eram membros do Core Team do FreeBSD durante os "
+"períodos indicados. Agradecemos por seus esforços anteriores a serviço do "
+"projeto FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:87
+#: documentation/content/en/articles/contributors/_index.adoc:97
+#: documentation/content/en/articles/contributors/_index.adoc:107
+msgid "_In rough reverse chronological order:_"
+msgstr "_Em ordem cronológica reversa:_"
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:91
+#, no-wrap
+msgid "Development Team Alumni"
+msgstr "Ex Membros do Time de Desenvolvimento"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:95
+msgid ""
+"The following people were members of the FreeBSD development team during the "
+"periods indicated. We thank them for their past efforts in the service of "
+"the FreeBSD project."
+msgstr ""
+"As seguintes pessoas eram membros do time de desenvolvimento do FreeBSD "
+"durante os períodos indicados. Agradecemos por seus esforços anteriores a "
+"serviço do projeto FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:101
+#, no-wrap
+msgid "Ports Management Team Alumni"
+msgstr "Ex Membros do Ports Management"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:105
+msgid ""
+"The following people were members of the FreeBSD portmgr team during the "
+"periods indicated. We thank them for their past efforts in the service of "
+"the FreeBSD project."
+msgstr ""
+"As seguintes pessoas eram membros do time portmgr do FreeBSD durante os "
+"períodos indicados. Agradecemos por seus esforços anteriores a serviço do "
+"projeto FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:111
+#, no-wrap
+msgid "Development Team: In Memoriam"
+msgstr "Time de Desenvolvimento: Em memória"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:115
+msgid ""
+"During the many years that the FreeBSD Project has been in existence, sadly, "
+"some of our developers have passed away. Here are some remembrances."
+msgstr ""
+"Durante os muitos anos de existência do Projeto FreeBSD, infelizmente, "
+"alguns de nossos desenvolvedores faleceram. Aqui estão algumas lembranças."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:117
+msgid "_In rough reverse chronological order of their passing:_"
+msgstr ""
+"_Em ordem cronológica reversa da data aproximada de seus falecimentos:_"
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:121
+#, no-wrap
+msgid "Derived Software Contributors"
+msgstr "Contribuidores de Software Derivados"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:125
+msgid ""
+"This software was originally derived from William F. Jolitz's 386BSD release "
+"0.1, though almost none of the original 386BSD specific code remains. This "
+"software has been essentially re-implemented from the 4.4BSD-Lite release "
+"provided by the Computer Science Research Group (CSRG) at the University of "
+"California, Berkeley and associated academic contributors."
+msgstr ""
+"Este software foi originalmente derivado do release 0.1 de William F. "
+"Jolitz, embora quase nenhum código específico original do 386BSD permaneça. "
+"Este software foi essencialmente reimplementado a partir da versão 4.4BSD-"
+"Lite fornecida pelo Computer Science Research Group (CSRG) na Universidade "
+"da Califórnia, Berkeley e colaboradores acadêmicos associados."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:127
+msgid ""
+"There are also portions of NetBSD and OpenBSD that have been integrated into "
+"FreeBSD as well, and we would therefore like to thank all the contributors "
+"to NetBSD and OpenBSD for their work."
+msgstr ""
+"Há partes do NetBSD e do OpenBSD que foram integradas no FreeBSD também, e "
+"gostaríamos de agradecer a todos os contribuidores do NetBSD e do OpenBSD "
+"pelo seus trabalhos."
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:129
+#, no-wrap
+msgid "Additional FreeBSD Contributors"
+msgstr "Contribuidores Adicionais do FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:132
+#: documentation/content/en/articles/contributors/_index.adoc:139
+msgid "(in alphabetical order by first name):"
+msgstr "(em ordem alfabética pelo primeiro nome):"
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:136
+#, no-wrap
+msgid "386BSD Patch Kit Patch Contributors"
+msgstr "Contribuidores do Kit Patch 386BSD"
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:143
#, no-wrap
msgid "Donors Gallery"
msgstr "Galeria de Doadores"
-#. type: delimited block = 4
-#: documentation/content/en/articles/contributors/_index.adoc:51
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:146
msgid ""
-"As of 2010, the following section is several years out-of-date. Donations "
-"from the past several years appear https://www.FreeBSD.org/donations/donors/"
-"[here]."
+"The FreeBSD Foundation thanks https://freebsdfoundation.org/our-donors/"
+"donors/[financial and in-kind donors]."
msgstr ""
-"Como em 2010, a seção a seguir está desatualiza. Doadores de vários anos "
-"anteriores aparecerão https://www.FreeBSD.org/donations/donors/[aqui]."
+"A FreeBSD Foundation agradece aos https://freebsdfoundation.org/our-donors/"
+"donors/[doadores financeiros e em espécie]."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:54
+#: documentation/content/en/articles/contributors/_index.adoc:148
msgid ""
-"The FreeBSD Project is indebted to the following donors and would like to "
-"publicly thank them here!"
+"The https://www.freebsd.org/donations/[FreeBSD Donations Liaison] area "
+"includes a https://www.freebsd.org/donations/donors/[list of donated "
+"hardware]."
msgstr ""
-"O Projeto FreeBSD é suportado financeiramente pelos seguintes doadores, e "
-"gostaríamos de agradecer a todos publicamente aqui!"
+"A área https://www.freebsd.org/donations/[de contato para doações ao "
+"FreeBSD] inclui uma https://www.freebsd.org/donations/donors/[lista de "
+"hardwares doados]."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:57
+#: documentation/content/en/articles/contributors/_index.adoc:150
+msgid "The FreeBSD Project thanks all donors!"
+msgstr "O Projeto FreeBSD agradece a todos os doadores!"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributors/_index.adoc:154
+msgid "As of 2010, the section below was several years out-of-date."
+msgstr "Desde de 2010, a seção abaixo estava desatualizada há vários anos."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributors/_index.adoc:156
+#, no-wrap
+msgid "Contributors to the central server project"
+msgstr "Contribuidores para o projeto do servidor central"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:159
msgid ""
-"_Contributors to the central server project:_ The following individuals and "
-"businesses made it possible for the FreeBSD Project to build a new central "
-"server machine, which has replaced `freefall.FreeBSD.org` at one point, by "
-"donating the following items:"
+"The following individuals and businesses made it possible for the FreeBSD "
+"Project to build a new central server machine, which has replaced `freefall."
+"FreeBSD.org` at one point, by donating the following items:"
msgstr ""
-"_Contribuidores para o servidor central do projeto:_ As pessoas e as "
-"organizações a seguir possibilitaram ao Projeto FreeBSD construir um novo "
-"servidor central, que substituiu a `freefal.FreeBSD.org` em algum momento, "
-"doando os seguintes itens:"
+"As pessoas e as organizações a seguir possibilitaram ao Projeto FreeBSD "
+"construir um novo servidor central, que substituiu a `freefal.FreeBSD.org` "
+"em algum momento, doando os seguintes itens:"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:59
+#: documentation/content/en/articles/contributors/_index.adoc:161
msgid ""
-"{mbarkah} and his employer, http://www.hemi.com/[ Hemisphere Online], "
-"donated a _Pentium Pro (P6) 200MHz CPU_"
+"{mbarkah} and his employer, http://www.hemi.com/[Hemisphere Online], donated "
+"a _Pentium Pro (P6) 200MHz CPU_."
msgstr ""
-"{mbarkah} e seu empregador, http://www.hemi.com/[ Hemisphere Online], doaram "
-"um _processador Pentium Pro (P6) 200MHz_"
+"{mbarkah} e seu empregador, http://www.hemi.com/[Hemisphere Online], doaram "
+"uma _CPU Pentium Pro (P6) de 200MHz_."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:60
+#: documentation/content/en/articles/contributors/_index.adoc:162
msgid ""
"http://www.asacomputers.com/[ASA Computers] donated a _Tyan 1662 "
"motherboard_."
@@ -107,41 +278,42 @@ msgstr ""
"http://www.asacomputers.com/[ASA Computers] doou uma _placa mãe Tyan 1662_."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:61
+#: documentation/content/en/articles/contributors/_index.adoc:163
msgid ""
-"Joe McGuckin mailto:joe@via.net[joe@via.net] of http://www.via.net/[ViaNet "
-"Communications] donated a _Kingston ethernet controller._"
+"Joe McGuckin <mailto:joe@via.net[joe@via.net]> of http://www.via.net/[ViaNet "
+"Communications] donated a _Kingston ethernet controller_."
msgstr ""
-"Joe McGuckin mailto:joe@via.net[joe@via.net] da http://www.via.net/[ViaNet "
-"Communications] doou um _controlador ethernet Kingston._"
+"Joe McGuckin <mailto:joe@via.net[joe@via.net]> da http://www.via.net/[ViaNet "
+"Communications] doou um _controlador de ethernet Kingston_."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:62
+#: documentation/content/en/articles/contributors/_index.adoc:164
msgid ""
-"Jack O'Neill mailto:jack@diamond.xtalwind.net[jack@diamond.xtalwind.net] "
+"Jack O'Neill <mailto:jack@diamond.xtalwind.net[jack@diamond.xtalwind.net]> "
"donated an _NCR 53C875 SCSI controller card_."
msgstr ""
-"Jack O'Neill mailto:jack@diamond.xtalwind.net[jack@diamond.xtalwind.net] "
+"Jack O'Neill <mailto:jack@diamond.xtalwind.net[jack@diamond.xtalwind.net]> "
"doou uma _controladora SCSI NCR 53C875_."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:63
+#: documentation/content/en/articles/contributors/_index.adoc:165
msgid ""
-"Ulf Zimmermann mailto:ulf@Alameda.net[ulf@Alameda.net] of http://www.Alameda."
-"net/[Alameda Networks] donated _128MB of memory_, a _4 Gb disk drive and the "
-"case._"
+"Ulf Zimmermann <mailto:ulf@Alameda.net[ulf@Alameda.net]> of http://www."
+"Alameda.net/[Alameda Networks] donated _128MB of memory_, a _4 Gb disk drive "
+"and the case_."
msgstr ""
-"Ulf Zimmermann mailto:ulf@Alameda.net[ulf@Alameda.net] da http://www.Alameda."
-"net/[Alameda Networks] doou _128MB de memória_, e uma _unidade de disco de 4 "
-"GB e o seu case._"
+"Ulf Zimmermann <mailto:ulf@Alameda.net[ulf@Alameda.net]> da http://www."
+"Alameda.net/[Alameda Networks] doou _128 MB de memória_, um _disco rígido de "
+"4 GB e o case_."
-#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:65
-msgid "_Direct funding:_"
-msgstr "_Financiamento direto:_"
+#. type: Title ===
+#: documentation/content/en/articles/contributors/_index.adoc:166
+#, no-wrap
+msgid "Direct funding"
+msgstr "Financiamento direto"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:67
+#: documentation/content/en/articles/contributors/_index.adoc:169
msgid ""
"The following individuals and businesses have generously contributed direct "
"funding to the project:"
@@ -150,80 +322,82 @@ msgstr ""
"financiamento direto ao projeto:"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:69
+#: documentation/content/en/articles/contributors/_index.adoc:171
msgid ""
-"Annelise Anderson mailto:ANDRSN@HOOVER.STANFORD.EDU[ANDRSN@HOOVER.STANFORD."
-"EDU]"
+"Annelise Anderson <mailto:andrsn@hoover.stanford.edu[andrsn@hoover.stanford."
+"edu]>."
msgstr ""
-"Annelise Anderson mailto:ANDRSN@HOOVER.STANFORD.EDU[ANDRSN@HOOVER.STANFORD."
-"EDU]"
+"Annelise Anderson <mailto:andrsn@hoover.stanford.edu[andrsn@hoover.stanford."
+"edu]>."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:70
-msgid "{dillon}"
-msgstr "{dillon}"
+#: documentation/content/en/articles/contributors/_index.adoc:172
+msgid "{dillon}."
+msgstr "{dillon}."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:71
-msgid "http://www.bluemountain.com/[Blue Mountain Arts]"
-msgstr "http://www.bluemountain.com/[Blue Mountain Arts]"
+#: documentation/content/en/articles/contributors/_index.adoc:173
+msgid "http://www.bluemountain.com/[Blue Mountain Arts]."
+msgstr "http://www.bluemountain.com/[Blue Mountain Arts]."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:72
-msgid "http://www.epilogue.com/[Epilogue Technology Corporation]"
-msgstr "http://www.epilogue.com/[Epilogue Technology Corporation]"
+#: documentation/content/en/articles/contributors/_index.adoc:174
+msgid "http://www.epilogue.com/[Epilogue Technology Corporation]."
+msgstr "http://www.epilogue.com/[Epilogue Technology Corporation]."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:73
-msgid "{sef}"
-msgstr "{sef}"
+#: documentation/content/en/articles/contributors/_index.adoc:175
+msgid "{sef}."
+msgstr "{sef}."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:74
-msgid "http://www.gta.com/[Global Technology Associates, Inc]"
-msgstr "http://www.gta.com/[Global Technology Associates, Inc]"
+#: documentation/content/en/articles/contributors/_index.adoc:176
+msgid "http://www.gta.com/[Global Technology Associates, Inc]."
+msgstr "http://www.gta.com/[Global Technology Associates, Inc]."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:75
-msgid "Don Scott Wilde"
-msgstr "Don Scott Wilde"
+#: documentation/content/en/articles/contributors/_index.adoc:177
+msgid "Don Scott Wilde."
+msgstr "Don Scott Wilde."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:76
-msgid "Gianmarco Giovannelli mailto:gmarco@masternet.it[gmarco@masternet.it]"
-msgstr "Gianmarco Giovannelli mailto:gmarco@masternet.it[gmarco@masternet.it]"
+#: documentation/content/en/articles/contributors/_index.adoc:178
+msgid ""
+"Gianmarco Giovannelli <mailto:gmarco@masternet.it[gmarco@masternet.it]>."
+msgstr ""
+"Gianmarco Giovannelli <mailto:gmarco@masternet.it[gmarco@masternet.it]>."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:77
-msgid "Josef C. Grosch mailto:joeg@truenorth.org[joeg@truenorth.org]"
-msgstr "Josef C. Grosch mailto:joeg@truenorth.org[joeg@truenorth.org]"
+#: documentation/content/en/articles/contributors/_index.adoc:179
+msgid "Josef C. Grosch <mailto:joeg@truenorth.org[joeg@truenorth.org]>."
+msgstr "Josef C. Grosch <mailto:joeg@truenorth.org[joeg@truenorth.org]>."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:78
-msgid "Robert T. Morris"
-msgstr "Robert T. Morris"
+#: documentation/content/en/articles/contributors/_index.adoc:180
+msgid "Robert T. Morris."
+msgstr "Robert T. Morris."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:79
-msgid "{chuckr}"
-msgstr "{chuckr}"
+#: documentation/content/en/articles/contributors/_index.adoc:181
+msgid "{chuckr}."
+msgstr "{chuckr}."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:80
+#: documentation/content/en/articles/contributors/_index.adoc:182
msgid ""
-"Kenneth P. Stox mailto:ken@stox.sa.enteract.com[ken@stox.sa.enteract.com] of "
-"http://www.imagescape.com/[Imaginary Landscape, LLC.]"
+"Kenneth P. Stox <mailto:ken@stox.sa.enteract.com[ken@stox.sa.enteract.com]> "
+"of http://www.imagescape.com/[Imaginary Landscape, LLC.]."
msgstr ""
-"Kenneth P. Stox mailto:ken@stox.sa.enteract.com[ken@stox.sa.enteract.com] da "
-"http://www.imagescape.com/[Imaginary Landscape, LLC.]"
+"Kenneth P. Stox <mailto:ken@stox.sa.enteract.com[ken@stox.sa.enteract.com]> "
+"da http://www.imagescape.com/[Imaginary Landscape, LLC.]."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:81
-msgid "Dmitry S. Kohmanyuk mailto:dk@dog.farm.org[dk@dog.farm.org]"
-msgstr "Dmitry S. Kohmanyuk mailto:dk@dog.farm.org[dk@dog.farm.org]"
+#: documentation/content/en/articles/contributors/_index.adoc:183
+msgid "Dmitry S. Kohmanyuk <mailto:dk@dog.farm.org[dk@dog.farm.org]>."
+msgstr "Dmitry S. Kohmanyuk <mailto:dk@dog.farm.org[dk@dog.farm.org]>."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:82
+#: documentation/content/en/articles/contributors/_index.adoc:184
msgid ""
"http://www.cdrom.co.jp/[Laser5] of Japan (a portion of the profits from "
"sales of their various FreeBSD CDROMs)."
@@ -232,7 +406,7 @@ msgstr ""
"vários CD-ROMs com FreeBSD)."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:83
+#: documentation/content/en/articles/contributors/_index.adoc:185
msgid ""
"http://www.mmjp.or.jp/fuki/[Fuki Shuppan Publishing Co.] donated a portion "
"of their profits from _Hajimete no FreeBSD_ (FreeBSD, Getting started) to "
@@ -243,7 +417,7 @@ msgstr ""
"projetos FreeBSD e XFree86."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:84
+#: documentation/content/en/articles/contributors/_index.adoc:186
msgid ""
"http://www.ascii.co.jp/[ASCII Corp.] donated a portion of their profits from "
"several FreeBSD-related books to the FreeBSD project."
@@ -252,7 +426,7 @@ msgstr ""
"venda de vários livros relacionados ao FreeBSD para o projeto FreeBSD."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:85
+#: documentation/content/en/articles/contributors/_index.adoc:187
msgid ""
"http://www.yokogawa.co.jp/[Yokogawa Electric Corp] has generously donated "
"significant funding to the FreeBSD project."
@@ -261,36 +435,37 @@ msgstr ""
"recursos significativos ao projeto FreeBSD."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:86
-msgid "http://www.buffnet.net/[BuffNET]"
-msgstr "http://www.buffnet.net/[BuffNET]"
+#: documentation/content/en/articles/contributors/_index.adoc:188
+msgid "http://www.buffnet.net/[BuffNET]."
+msgstr "http://www.buffnet.net/[BuffNET]."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:87
-msgid "http://www.pacificsolutions.com/[Pacific Solutions]"
-msgstr "http://www.pacificsolutions.com/[Pacific Solutions]"
+#: documentation/content/en/articles/contributors/_index.adoc:189
+msgid "http://www.pacificsolutions.com/[Pacific Solutions]."
+msgstr "http://www.pacificsolutions.com/[Pacific Solutions]."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:88
+#: documentation/content/en/articles/contributors/_index.adoc:190
msgid ""
-"http://www.siemens.de/[Siemens AG] via Andre Albsmeier mailto:andre."
-"albsmeier@mchp.siemens.de[andre.albsmeier@mchp.siemens.de]"
+"http://www.siemens.de/[Siemens AG] via Andre Albsmeier <mailto:andre."
+"albsmeier@mchp.siemens.de[andre.albsmeier@mchp.siemens.de]>."
msgstr ""
-"http://www.siemens.de/[Siemens AG] via Andre Albsmeier mailto:andre."
-"albsmeier@mchp.siemens.de[andre.albsmeier@mchp.siemens.de]"
+"http://www.siemens.de/[Siemens AG] via Andre Albsmeier <mailto:andre."
+"albsmeier@mchp.siemens.de[andre.albsmeier@mchp.siemens.de]>."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:89
-msgid "Chris Silva mailto:ras@interaccess.com[ras@interaccess.com]"
-msgstr "Chris Silva mailto:ras@interaccess.com[ras@interaccess.com]"
+#: documentation/content/en/articles/contributors/_index.adoc:191
+msgid "Chris Silva <mailto:ras@interaccess.com[ras@interaccess.com]>."
+msgstr "Chris Silva <mailto:ras@interaccess.com[ras@interaccess.com]>."
-#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:91
-msgid "_Hardware contributors:_"
-msgstr "_Doadores de Hardware:_"
+#. type: Title ===
+#: documentation/content/en/articles/contributors/_index.adoc:192
+#, no-wrap
+msgid "Hardware contributors"
+msgstr "Doadores de Hardware"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:93
+#: documentation/content/en/articles/contributors/_index.adoc:195
msgid ""
"The following individuals and businesses have generously contributed "
"hardware for testing and device driver development/support:"
@@ -299,7 +474,7 @@ msgstr ""
"testes e desenvolvimento/suporte de drivers de dispositivos:"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:95
+#: documentation/content/en/articles/contributors/_index.adoc:197
msgid ""
"BSDi for providing the Pentium P5-90 and 486/DX2-66 EISA/VL systems that are "
"being used for our development work, to say nothing of the network access "
@@ -310,7 +485,7 @@ msgstr ""
"acesso a rede e outras doações de recursos de hardware."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:96
+#: documentation/content/en/articles/contributors/_index.adoc:198
msgid ""
"http://www.compaq.com[Compaq] has donated a variety of Alpha systems to the "
"FreeBSD Project. Among the many generous donations are 4 AlphaStation DS10s, "
@@ -319,54 +494,55 @@ msgid ""
"machines are used for release engineering, package building, SMP "
"development, and general development on the Alpha architecture."
msgstr ""
-"http://www.compaq.com[Compaq] doou uma variedade de computadores Alpha "
-"systems para o projeto FreeBSD. Dentre várias generosas doações estão 4 "
-"AlphaStation DS10s, um AlphaServer DS20, AlphaServer 2100s, um AlphaServer "
-"4100, 8 500Mhz Personal Workstations, 4 433Mhz Personal Workstations, e "
-"mais! Estas máquinas são usadas para engenharia de versões, empacotamento, "
-"desenvolvimento SMP, e desenvolvimento em geral para a arquitetura Alpha."
+"A http://www.compaq.com[Compaq] doou uma variedade de sistemas Alpha para o "
+"Projeto FreeBSD. Entre as muitas doações generosas estão 4 AlphaStation "
+"DS10s, um AlphaServer DS20, AlphaServer 2100s, um AlphaServer 4100, 8 "
+"estações de trabalho pessoais de 500 MHz, 4 estações de trabalho pessoais de "
+"433 MHz e mais! Essas máquinas são usadas para engenharia de releases, "
+"compilação de pacotes, desenvolvimento SMP e desenvolvimento geral na "
+"arquitetura Alpha."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:97
+#: documentation/content/en/articles/contributors/_index.adoc:199
msgid ""
"TRW Financial Systems, Inc. provided 130 PCs, three 68 GB file servers, "
"twelve Ethernets, two routers and an ATM switch for debugging the diskless "
-"code."
+"code"
msgstr ""
-"TRW Financial Systems, Inc. doou 130 PCs, três servidores de arquivos com 68 "
-"GB, doze Ethernets, dois roteadores e um switch ATM para debug de códigos "
-"diskless."
+"A TRW Financial Systems, Inc. forneceu 130 PCs, três servidores de arquivos "
+"de 68 GB, doze Ethernets, dois roteadores e um switch ATM para depuração do "
+"código \"diskless\""
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:98
+#: documentation/content/en/articles/contributors/_index.adoc:200
msgid ""
"Dermot McDonnell donated the Toshiba XM3401B CDROM drive currently used in "
-"freefall."
+"_freefall_."
msgstr ""
"Dermot McDonnell doou o drive de CDROM Toshiba XM3401B atualmente usado na "
-"freefall."
+"_freefall_."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:99
+#: documentation/content/en/articles/contributors/_index.adoc:201
msgid ""
-"Chuck Robey mailto:chuckr@glue.umd.edu[chuckr@glue.umd.edu] contributed his "
-"floppy tape streamer for experimental work."
+"Chuck Robey <mailto:chuckr@glue.umd.edu[chuckr@glue.umd.edu]> contributed "
+"his floppy tape streamer for experimental work."
msgstr ""
-"Chuck Robey mailto:chuckr@glue.umd.edu[chuckr@glue.umd.edu] doou seu drive "
+"Chuck Robey <mailto:chuckr@glue.umd.edu[chuckr@glue.umd.edu]> doou seu drive "
"de fita para trabalho experimental."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:100
+#: documentation/content/en/articles/contributors/_index.adoc:202
msgid ""
-"Larry Altneu mailto:larry@ALR.COM[larry@ALR.COM], and {wilko}, provided "
-"Wangtek and Archive QIC-02 tape drives in order to improve the [."
-"filename]#wt# driver."
+"Larry Altneu <mailto:larry@alr.com[larry@alr.com],> and {wilko}, provided "
+"Wangtek and Archive QIC-02 tape drives to improve the [.filename]#wt# driver."
msgstr ""
-"Larry Altneu mailto:larry@ALR.COM[larry@ALR.COM], e {wilko}, doaram drives "
-"de fita Wangtek e Archive QIC-02 para melhorar o driver [.filename]#wt#."
+"Larry Altneu <mailto:larry@alr.com[larry@alr.com],> e {wilko} forneceram "
+"drives de fita Wangtek e Archive QIC-02 para melhorar o driver [."
+"filename]#wt#."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:101
+#: documentation/content/en/articles/contributors/_index.adoc:203
msgid ""
"Ernst Winter (http://berklix.org/ewinter/[Deceased]) contributed a 2.88 MB "
"floppy drive to the project. This will hopefully increase the pressure for "
@@ -377,7 +553,7 @@ msgstr ""
"para reescrever o driver para disquetes."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:102
+#: documentation/content/en/articles/contributors/_index.adoc:204
msgid ""
"http://www.tekram.com/[Tekram Technologies] sent one each of their DC-390, "
"DC-390U and DC-390F FAST and ULTRA SCSI host adapter cards for regression "
@@ -386,15 +562,15 @@ msgid ""
"from their FTP server link:ftp://ftp.tekram.com/scsi/FreeBSD/[ftp://ftp."
"tekram.com/scsi/FreeBSD/]."
msgstr ""
-"http://www.tekram.com/[Tekram Technologies] enviou um de cada dos "
-"adaptadores FAST e ULTRA SCSI DC-390, DC-390U e DC-390F para testes de "
-"regressão dos drivers NCR e AMD com suas placas. Eles também devem ser "
-"aplaudidos por criarem o código fonte dos drivers para sistemas operacionais "
-"abertos disponíveis em seu servidor FTP em link:ftp://ftp.tekram.com/scsi/"
-"FreeBSD/[ftp://ftp.tekram.com/scsi/FreeBSD/]."
+"A http://www.tekram.com/[Tekram Technologies] enviou um de seus cartões "
+"adaptadores de host FAST e ULTRA SCSI DC-390, DC-390U e DC-390F para testes "
+"de regressão dos drivers NCR e AMD com seus cartões. Eles também devem ser "
+"aplaudidos por disponibilizar fontes de driver para sistemas operacionais "
+"gratuitos em seu servidor FTP link:ftp://ftp.tekram.com/scsi/FreeBSD/[ftp://"
+"ftp.tekram.com/scsi/FreeBSD/]."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:103
+#: documentation/content/en/articles/contributors/_index.adoc:205
msgid ""
"Larry M. Augustin contributed not only a Symbios Sym8751S SCSI card, but "
"also a set of data books, including one about the forthcoming Sym53c895 chip "
@@ -409,7 +585,7 @@ msgstr ""
"dos últimos chips SCSI Symbios. Muito obrigado!"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:104
+#: documentation/content/en/articles/contributors/_index.adoc:206
msgid ""
"{kuku} donated an FX120 12 speed Mitsumi CDROM drive for IDE CDROM driver "
"development."
@@ -418,23 +594,24 @@ msgstr ""
"desenvolvimento do driver IDE CDROM."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:105
+#: documentation/content/en/articles/contributors/_index.adoc:207
msgid ""
-"Mike Tancsa mailto:mike@sentex.ca[mike@sentex.ca] donated four various ATM "
-"PCI cards in order to help increase support of these cards as well as help "
-"support the development effort of the netatm ATM stack."
+"Mike Tancsa <mailto:mike@sentex.ca[mike@sentex.ca]> donated four various ATM "
+"PCI cards to help increase support of these cards as well as help support "
+"the development effort of the netatm ATM stack."
msgstr ""
-"Mike Tancsa mailto:mike@sentex.ca[mike@sentex.ca] doou quatro diversas "
-"placas ATM PCI cards com o objetivo de aumentar o suporte a estas placas bem "
-"como suportar o desenvolvimento da stack ATM netatm."
+"Mike Tancsa <mailto:mike@sentex.ca[mike@sentex.ca]> doou quatro diferentes "
+"placas PCI ATM para ajudar a aumentar o suporte dessas placas, bem como "
+"apoiar o esforço de desenvolvimento da pilha ATM netatm."
-#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:107
-msgid "_Special contributors:_"
-msgstr "_Contribuidores Especiais:_"
+#. type: Title ===
+#: documentation/content/en/articles/contributors/_index.adoc:208
+#, no-wrap
+msgid "Special contributors"
+msgstr "Contribuidores Especiais"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:109
+#: documentation/content/en/articles/contributors/_index.adoc:211
msgid ""
"http://www.osd.bsdi.com/[BSDi] (formerly Walnut Creek CDROM) has donated "
"almost more than we can say (see the 'About the FreeBSD Project' section of "
@@ -446,8 +623,8 @@ msgid ""
"T1 connection to the Internet."
msgstr ""
"http://www.osd.bsdi.com/[BSDi] (antigo Walnut Creek CDROM) doou mais do que "
-"podemos dizer (veja a seção 'Sobre o Projeto FreeBSD' no extref:{handbook}["
-"FreeBSD Handbook] para mais detalhes). Em particular, nós gostaríamos de "
+"podemos dizer (veja a seção 'Sobre o Projeto FreeBSD' no extref:{handbook}"
+"[FreeBSD Handbook] para mais detalhes). Em particular, nós gostaríamos de "
"agradecê-los pelo hardware original utilizado na `freefall.FreeBSD.org`, "
"nossa máquina de desenvolvimento primária, e pela `thud.FreeBSD.org`, uma "
"máquina para compilações e testes. Nós também estamos em débito com eles "
@@ -455,176 +632,67 @@ msgstr ""
"acesso irrestrito a nós em sua conexão com a Internet T1."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:110
+#: documentation/content/en/articles/contributors/_index.adoc:212
msgid ""
"The http://www.interface-business.de/[interface business GmbH, Dresden] has "
"been patiently supporting {joerg} who has often preferred FreeBSD work over "
"paid work, and used to fall back to their (quite expensive) EUnet Internet "
"connection whenever his private connection became too slow or flaky to work "
-"with it..."
+"with it."
msgstr ""
"A http://www.interface-business.de/[interface business GmbH, Dresden] tem "
-"apoiado pacientemente {joerg} que muitas vezes preferiu o trabalho no "
-"FreeBSD ao invés de um trabalho remunerado, e costuma usar sua conexão de "
-"Internet da EUnet (bem caro) sempre que sua conexão privada se torna lenta "
-"demais para trabalhar com ela…"
+"apoiado pacientemente {joerg} que muitas vezes preferiu trabalhar no FreeBSD "
+"em vez de trabalhos remunerados, e costumava recorrer à conexão com a "
+"Internet da EUnet (bastante cara) sempre que sua conexão privada ficava "
+"muito lenta ou instável para trabalhar com ela."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:111
+#: documentation/content/en/articles/contributors/_index.adoc:212
msgid ""
"http://www.bsdi.com/[Berkeley Software Design, Inc.] has contributed their "
-"DOS emulator code to the remaining BSD world, which is used in the _doscmd_ "
+"DOS emulator code to the remaining BSD world, which is used in the `doscmd` "
"command."
msgstr ""
"http://www.bsdi.com/[Berkeley Software Design, Inc.] contribuiu com seu "
-"código de emulação do DOS para o mundo BSD, o qual é utilizado no comando "
-"_doscmd_."
-
-#. type: Title ==
-#: documentation/content/en/articles/contributors/_index.adoc:113
-#, no-wrap
-msgid "The FreeBSD Developers"
-msgstr "Os Desenvolvedores do FreeBSD"
-
-#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:117
-msgid ""
-"These are the people who have commit privileges and do the engineering work "
-"on the FreeBSD source tree. All core team members are also developers."
-msgstr ""
-"Estas são as pessoas que possuem privilégios de commit e fazem o trabalho de "
-"engenharia na árvore de código fonte do FreeBSD. Todos os membros do Core "
-"Team também são desenvolvedores."
-
-#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:119
-msgid "(in alphabetical order by last name):"
-msgstr "(em ordem alfabética pelo sobrenome):"
-
-#. type: Title ==
-#: documentation/content/en/articles/contributors/_index.adoc:123
-#, no-wrap
-msgid "Core Team Alumni"
-msgstr "Ex Membros do Core Team"
-
-#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:127
-msgid ""
-"The following people were members of the FreeBSD core team during the "
-"periods indicated. We thank them for their past efforts in the service of "
-"the FreeBSD project."
-msgstr ""
-"As seguintes pessoas eram membros do Core Team do FreeBSD durante os "
-"períodos indicados. Agradecemos por seus esforços anteriores a serviço do "
-"projeto FreeBSD."
-
-#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:129
-#: documentation/content/en/articles/contributors/_index.adoc:139
-#: documentation/content/en/articles/contributors/_index.adoc:149
-msgid "_In rough reverse chronological order:_"
-msgstr "_Em ordem cronológica reversa:_"
-
-#. type: Title ==
-#: documentation/content/en/articles/contributors/_index.adoc:133
-#, no-wrap
-msgid "Development Team Alumni"
-msgstr "Ex Membros do Time de Desenvolvimento"
-
-#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:137
-msgid ""
-"The following people were members of the FreeBSD development team during the "
-"periods indicated. We thank them for their past efforts in the service of "
-"the FreeBSD project."
-msgstr ""
-"As seguintes pessoas eram membros do time de desenvolvimento do FreeBSD "
-"durante os períodos indicados. Agradecemos por seus esforços anteriores a "
-"serviço do projeto FreeBSD."
-
-#. type: Title ==
-#: documentation/content/en/articles/contributors/_index.adoc:143
-#, no-wrap
-msgid "Ports Management Team Alumni"
-msgstr "Ex Membros do Ports Management"
-
-#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:147
-msgid ""
-"The following people were members of the FreeBSD portmgr team during the "
-"periods indicated. We thank them for their past efforts in the service of "
-"the FreeBSD project."
-msgstr ""
-"As seguintes pessoas eram membros do time portmgr do FreeBSD durante os "
-"períodos indicados. Agradecemos por seus esforços anteriores a serviço do "
-"projeto FreeBSD."
-
-#. type: Title ==
-#: documentation/content/en/articles/contributors/_index.adoc:153
-#, no-wrap
-msgid "Development Team: In Memoriam"
-msgstr "Time de Desenvolvimento: Em memória"
-
-#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:157
-msgid ""
-"During the many years that the FreeBSD Project has been in existence, sadly, "
-"some of our developers have passed away. Here are some remembrances."
-msgstr ""
-"Durante os muitos anos de existência do Projeto FreeBSD, infelizmente, "
-"alguns de nossos desenvolvedores faleceram. Aqui estão algumas lembranças."
-
-#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:159
-msgid "_In rough reverse chronological order of their passing:_"
-msgstr "_Em ordem cronológica reversa da data aproximada de seus falecimentos:_"
-
-#. type: Title ==
-#: documentation/content/en/articles/contributors/_index.adoc:163
-#, no-wrap
-msgid "Derived Software Contributors"
-msgstr "Contribuidores de Software Derivados"
-
-#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:167
-msgid ""
-"This software was originally derived from William F. Jolitz's 386BSD release "
-"0.1, though almost none of the original 386BSD specific code remains. This "
-"software has been essentially re-implemented from the 4.4BSD-Lite release "
-"provided by the Computer Science Research Group (CSRG) at the University of "
-"California, Berkeley and associated academic contributors."
-msgstr ""
-"Este software foi originalmente derivado do release 0.1 de William F. "
-"Jolitz, embora quase nenhum código específico original do 386BSD permaneça. "
-"Este software foi essencialmente reimplementado a partir da versão 4.4BSD-"
-"Lite fornecida pelo Computer Science Research Group (CSRG) na Universidade "
-"da Califórnia, Berkeley e colaboradores acadêmicos associados."
-
-#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:169
-msgid ""
-"There are also portions of NetBSD and OpenBSD that have been integrated into "
-"FreeBSD as well, and we would therefore like to thank all the contributors "
-"to NetBSD and OpenBSD for their work."
-msgstr ""
-"Há partes do NetBSD e do OpenBSD que foram integradas no FreeBSD também, e "
-"gostaríamos de agradecer a todos os contribuidores do NetBSD e do OpenBSD "
-"pelo seus trabalhos."
-
-#. type: Title ==
-#: documentation/content/en/articles/contributors/_index.adoc:171
-#, no-wrap
-msgid "Additional FreeBSD Contributors"
-msgstr "Contribuidores Adicionais do FreeBSD"
-
-#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:174
-#: documentation/content/en/articles/contributors/_index.adoc:181
-msgid "(in alphabetical order by first name):"
-msgstr "(em ordem alfabética pelo primeiro nome):"
-
-#. type: Title ==
-#: documentation/content/en/articles/contributors/_index.adoc:178
-#, no-wrap
-msgid "386BSD Patch Kit Patch Contributors"
-msgstr "Contribuidores do Kit Patch 386BSD"
+"código de emulador do DOS para o restante do mundo BSD, o qual é usado no "
+"comando `doscmd`."
+
+#~ msgid ""
+#~ "As of 2010, the following section is several years out-of-date. Donations "
+#~ "from the past several years appear https://www.FreeBSD.org/donations/"
+#~ "donors/[here]."
+#~ msgstr ""
+#~ "Como em 2010, a seção a seguir está desatualiza. Doadores de vários anos "
+#~ "anteriores aparecerão https://www.FreeBSD.org/donations/donors/[aqui]."
+
+#~ msgid ""
+#~ "The FreeBSD Project is indebted to the following donors and would like to "
+#~ "publicly thank them here!"
+#~ msgstr ""
+#~ "O Projeto FreeBSD é suportado financeiramente pelos seguintes doadores, e "
+#~ "gostaríamos de agradecer a todos publicamente aqui!"
+
+#~ msgid ""
+#~ "Annelise Anderson <mailto:ANDRSN@HOOVER.STANFORD.EDU[ANDRSN@HOOVER."
+#~ "STANFORD.EDU]>"
+#~ msgstr ""
+#~ "Annelise Anderson <mailto:ANDRSN@HOOVER.STANFORD.EDU[ANDRSN@HOOVER."
+#~ "STANFORD.EDU]>"
+
+#~ msgid ""
+#~ "These are the people who have commit privileges and do the engineering "
+#~ "work on the FreeBSD source tree. All core team members are also "
+#~ "developers."
+#~ msgstr ""
+#~ "Estas são as pessoas que possuem privilégios de commit e fazem o trabalho "
+#~ "de engenharia na árvore de código fonte do FreeBSD. Todos os membros do "
+#~ "Core Team também são desenvolvedores."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/contributors/contrib-develinmemoriam.adoc b/documentation/content/pt-br/articles/contributors/contrib-develinmemoriam.adoc
index 49ef06842f..ad0f5cc2fb 100644
--- a/documentation/content/pt-br/articles/contributors/contrib-develinmemoriam.adoc
+++ b/documentation/content/pt-br/articles/contributors/contrib-develinmemoriam.adoc
@@ -43,18 +43,18 @@ Jürgen fez uma série de contribuições para o FreeBSD, incluindo o trabalho n
* {alexbl} (2006 - 2011; RIP 2012)
+
http://www.legacy.com/obituaries/sfgate/obituary.aspx?pid=159801494[Alexander] foi mais conhecido como um dos principais contribuintes para os ports Python do FreeBSD e um membro fundador da lista de discussão do FreeBSD Python e também pelo seu trabalho no XMMS2.
-* John Birrell (1997 - 2009; RIP 2009)
+* {jb} (1997 - 2009; RIP 2009)
+
http://hub.opensolaris.org/bin/view/Community+Group+ogb/In+Memoriam[John] fez grandes contribuições para o FreeBSD, o mais conhecido foi a importação do código man:dtrace[1]. O senso de humor e a fala simples de John ou irritava alguns ou criava amigos rapidamente. No final de sua vida, ele se mudou para uma área rural e estava tentando viver com o mínimo de impacto possível para o planeta, enquanto ao mesmo tempo ainda trabalhava na área de alta tecnologia.
-* Jean-Marc Zuccon (1994 - 2009; RIP 2009)
+* {jmz} (1994 - 2009; RIP 2009)
+
http://www.obs-besancon.fr/article.php3?id_article=323[Jean-Marc] foi um astrofísico que fez importantes contribuições para a modelagem das atmosferas de planetas e cometas no http://www.obs-besancon.fr/[l'Observatoire de Besançon] em Besançon, França. Enquanto esteve lá, participou da concepção e construção do espectrômetro Vega tricanal que estudou o Cometa Halley. Ele também foi um colaborador de longa data do FreeBSD.
-* Jun-ichiro Itoh (1997 - 2001; RIP 2008)
+* {itojun} (1997 - 2001; RIP 2008)
+
Conhecido por todos como http://astralblue.livejournal.com/350702.html[itojun], Jun-ichiro Hagino foi um pesquisador principal no http://www.kame.net/[KAME Project], que visava fornecer tecnologia IPv6 e IPsec de forma livremente redistribuível. Muito deste código foi incorporado ao FreeBSD. Sem seus esforços, o estado do IPv6 na Internet seria muito diferente.
-* Cameron Grant (1999 - 2005; RIP 2005)
+* {cg} (1999 - 2005; RIP 2005)
+
http://www.dbsi.org/cam/[Cameron] foi um indivíduo único que contribuiu para o projeto apesar de graves deficiências físicas. Ele foi responsável por uma reescrita completa do nosso sistema de som durante o final dos anos 90. Muitos daqueles que se correspondiam com ele não tinham idéia de sua mobilidade limitada, devido ao seu espírito alegre e disposição para ajudar os outros.
-* Alan Eldridge (2002 - 2003; RIP 2003)
+* {alane} (2002 - 2003; RIP 2003)
+
http://freebsd.kde.org/memoriam/alane.php[Alan] foi um grande contribuinte para o KDE no FreeBSD. Além disso, ele manteve muitas outros ports difíceis e que consumiam muito tempo, como o autoconf, CUPS, e python. O caminho de Alan não foi fácil, mas sua paixão pelo FreeBSD e a dedicação à excelência de programação lhe renderam muitos amigos.
diff --git a/documentation/content/pt-br/articles/cups/_index.adoc b/documentation/content/pt-br/articles/cups/_index.adoc
index 4c77bc22d6..8a3fd9f5ca 100644
--- a/documentation/content/pt-br/articles/cups/_index.adoc
+++ b/documentation/content/pt-br/articles/cups/_index.adoc
@@ -1,8 +1,11 @@
---
-title: CUPS no FreeBSD
authors:
- - author: Chess Griffin
+ -
+ author: 'Chess Griffin'
email: chess@chessgriffin.com
+description: 'Como instalar e usar o CUPS no FreeBSD'
+tags: ["CUPS", "FreeBSD", "Guide", "configuration", "introduction"]
+title: 'CUPS no FreeBSD'
trademarks: ["freebsd", "general"]
---
@@ -49,28 +52,28 @@ toc::[]
[[printing-cups]]
== Uma introdução ao Common Unix Printing System (CUPS)
-O CUPS, o Common UNIX Printing System, fornece uma camada de impressão portátil para sistemas operacionais baseados no UNIX(R). Ele foi desenvolvido pela Easy Software Products para prover uma solução de impressão padrão para todos os fornecedores e usuários do UNIX(R).
+O CUPS, o Common UNIX Printing System, fornece uma camada de impressão portátil para sistemas operacionais baseados em UNIX(R). Ele foi desenvolvido pela Easy Software Products para promover uma solução padrão de impressão para todos os fornecedores e usuários de UNIX(R).
-O CUPS usa o Internet Printing Protocol (IPP) como base para gerenciar trabalhos de impressão e filas. O Line Printer Daemon (LPD), os protocolos Server Message Block (SMB) e AppSocket (também conhecido como JetDirect) também são suportados com funcionalidade reduzida. O CUPS adiciona opções de impressão com base em impressoras de rede e de impressão PostScript (PPD) para oferecer suporte à impressão no mundo UNIX(R). Como resultado, o CUPS é ideal para compartilhar e acessar impressoras em ambientes heterogêneos nos quais coexistem equipamentos rodando FreeBSD, Linux(R), Mac OS(R) X, e Windows(R).
+O CUPS utiliza o Protocolo de Impressão pela Internet (IPP) como base para gerenciar trabalhos e filas de impressão. Os protocolos Line Printer Daemon (LPD), Server Message Block (SMB) e AppSocket (também conhecido como JetDirect) também são suportados, porém com funcionalidade reduzida. O CUPS adiciona opções de visualização de impressoras em rede e impressão baseada em PostScript Printer Description (PPD) para suportar as necessidades de impressão do mundo real no ambiente UNIX(R). Como resultado, o CUPS é ideal para compartilhar e acessar impressoras em ambientes mistos de FreeBSD, Linux(R), Mac OS(R) X ou Windows(R).
-O site do CUPS é http://www.cups.org/[http://www.cups.org/].
+O site principal do CUPS é http://www.cups.org/[http://www.cups.org/].
[[printing-cups-install]]
== Instalando o CUPS Print Server
-Para instalar o CUPS utilizando binários pré compilados, execute o seguinte comando como root a partir de um terminal:
+Para instalar o CUPS usando um binário pré-compilado, execute o seguinte comando em um terminal como root:
-[source,shell]
+[source, shell]
....
# pkg install cups
....
-Outros pacotes opcionais, mas recomendados, são o package:print/gutenprint[] e o package:print/hplip[], ambos adicionam drivers e utilitários para uma variedade de impressoras. Uma vez instalados, os arquivos de configuração do CUPS podem ser encontrados no diretório [.filename]#/usr/local/etc/cups#.
+Outros pacotes opcionais, mas recomendados, são o package:print/gutenprint[] e o package:print/hplip[], ambos adicionando drivers e utilitários para uma variedade de impressoras. Após a instalação, os arquivos de configuração do CUPS podem ser encontrados no diretório [.filename]#/usr/local/etc/cups#.
[[printing-cups-configuring-server]]
== Configurando o CUPS Print Server
-Após a instalação, alguns arquivos devem ser editados para configurar o servidor CUPS. Primeiro, crie ou modifique, conforme o caso, o arquivo [.filename]#/etc/devfs.rules# e adicione as seguintes informações para definir as permissões adequadas em todos os dispositivos de impressora e para associar impressoras ao grupo de usuários do `cups`:
+Depois da instalação, alguns arquivos devem ser editados para configurar o servidor CUPS. Primeiramente, crie ou edite, caso necessário, o arquivo [.filename]#/etc/devfs.rules# e adicione a seguinte informação para definir as permissões apropriadas em todos os dispositivos de impressora potenciais e associar as impressoras ao grupo de usuários `cups`:
[.programlisting]
....
@@ -83,10 +86,10 @@ add path 'usb/X.Y.Z' mode 0660 group cups
[NOTE]
====
-Observe que _X_, _Y_ e _Z_ devem ser substituídos pelo dispositivo USB de destino listado no diretório [.filename]#/dev/usb# que corresponde à sua impressora. Para encontrar o dispositivo correto, examine a saída do comando man:dmesg[8], onde [.filename]#ugenX.Y# lista o dispositivo de impressora, que é um link simbólico para um dispositivo USB em [.filename]#/dev/usb#.
+Observe que _X_, _Y_ e _Z_ devem ser substituídos pelo dispositivo USB de destino listado no diretório [.filename]#/dev/usb# que corresponde à impressora. Para encontrar o dispositivo correto, examine a saída do man:dmesg[8], onde [.filename]#ugenX.Y# lista o dispositivo da impressora, que é um link simbólico para um dispositivo USB em [.filename]#/dev/usb#.
====
-Em seguida, adicione as linhas abaixo no [.filename]#/etc/rc.conf# conforme abaixo:
+Em seguida, adicione duas linhas no arquivo [.filename]#/etc/rc.conf# da seguinte maneira:
[.programlisting]
....
@@ -94,18 +97,18 @@ cupsd_enable="YES"
devfs_system_ruleset="system"
....
-Essas duas entradas iniciarão o servidor de impressão do CUPS após o boot do sistema e carregará a regra do devfs local acima, respectivamente.
+Essas duas entradas irão iniciar o servidor de impressão CUPS na inicialização e invocar a regra local do devfs criada acima, respectivamente.
-Para habilitar a impressão via CUPS em alguns clientes Microsoft(R) Windows(R) você deverá remover o comentário da linha abaixo nos arquivos [.filename]#/usr/local/etc/cups/mime.types# e [.filename]#/usr/local/etc/cups/mime.convs#:
+Para habilitar a impressão CUPS em determinados clientes Microsoft(R) Windows(R), a linha abaixo deve ser descomentada nos arquivos [.filename]#/usr/local/etc/cups/mime.types# e [.filename]#/usr/local/etc/cups/mime.convs#:
[.programlisting]
....
application/octet-stream
....
-Uma vez que estas alterações tenham sido feitas, os sistemas man:devfs[8] e CUPS deverão ser reiniciados, seja reiniciando o computador ou executando os dois comandos a seguir como root em um terminal:
+Uma vez que as alterações tenham sido feitas, os sistemas man:devfs[8] e CUPS devem ser reiniciados, seja reiniciando o computador ou executando os seguintes dois comandos em um terminal root:
-[source,shell]
+[source, shell]
....
# /etc/rc.d/devfs restart
# /usr/local/etc/rc.d/cupsd restart
@@ -114,21 +117,21 @@ Uma vez que estas alterações tenham sido feitas, os sistemas man:devfs[8] e CU
[[printing-cups-configuring-printers]]
== Configurando Impressoras no CUPS Print Server
-Depois que o sistema CUPS tiver sido instalado e configurado, o administrador poderá começar a configurar as impressoras locais conectadas ao servidor de impressão CUPS. Essa parte do processo é muito semelhante, se não idêntica, à configuração de impressoras CUPS em outros sistemas operacionais baseados em UNIX(R), como o Linux(R).
+Depois que o sistema CUPS foi instalado e configurado, o administrador pode começar a configurar as impressoras locais conectadas ao servidor de impressão CUPS. Esta parte do processo é muito semelhante, senão idêntica, à configuração de impressoras CUPS em outros sistemas operacionais baseados em UNIX(R), como uma distribuição Linux(R).
-O principal meio para gerenciar e administrar o servidor CUPS é através da sua interface web, que pode ser acessada por meio de um navegador web, para isto execute o navegador e digite a URL http://localhost:631[http://localhost:631] na barra de endereços do navegador. Se o servidor CUPS estiver em outra máquina na rede, substitua o endereço IP local do servidor por `localhost`. A interface Web do CUPS é bastante autoexplicativa, pois há seções para gerenciar impressoras e trabalhos de impressão, autorizar usuários e muito mais. Além disso, no lado direito da tela de administração, existem várias caixas de seleção que permitem acesso fácil a configurações comumente alteradas, como compartilhar impressoras conectadas ao sistema, permitir a administração remota do servidor CUPS, e se deseja permitir aos usuários acesso adicional e privilégios para as impressoras e trabalhos de impressão.
+O principal meio para gerenciar e administrar o servidor CUPS é através da interface baseada na web, que pode ser encontrada ao iniciar um navegador e inserir o endereço http://localhost:631[http://localhost:631] na barra de endereço do navegador. Se o servidor CUPS estiver em outra máquina na rede, substitua o endereço IP local do servidor por `localhost`. A interface web do CUPS é bastante autoexplicativa, pois há seções para gerenciar impressoras e trabalhos de impressão, autorizar usuários e muito mais. Além disso, no lado direito da tela de administração há várias caixas de seleção que permitem fácil acesso às configurações comumente alteradas, como compartilhar impressoras conectadas ao sistema, permitir a administração remota do servidor CUPS e permitir que os usuários tenham acesso e privilégios adicionais às impressoras e trabalhos de impressão.
-Adicionar uma impressora geralmente é tão fácil quanto clicar em "Adicionar impressora" na tela Administração da interface Web do CUPS ou clicar em um dos botões "Novas impressoras encontradas" também na tela Administração. Quando for apresentada a caixa suspensa "Device", basta selecionar a impressora conectada localmente a qual você deseja utilizar e continuar o processo. Se você adicionou os aplicativos package:print/gutenprint-cups[] e/ou package:print/hplip[] via ports ou pacotes conforme mencionado acima, os drivers de impressão adicionais estarão disponíveis nas telas subsequentes, eles lhe fornecer mais estabilidade ou mais recursos.
+Adicionar uma impressora geralmente é tão fácil quanto clicar em "Adicionar Impressora" na tela de Administração da interface web do CUPS, ou clicar em um dos botões "Novas Impressoras Encontradas" também na tela de Administração. Quando for exibida a caixa de seleção "Dispositivo", simplesmente selecione a impressora local desejada e continue o processo. Se você tiver adicionado os pacotes package:print/gutenprint-cups[] ou package:print/hplip[], conforme referido acima, drivers de impressão adicionais estarão disponíveis nas telas subsequentes que podem fornecer mais estabilidade ou recursos.
[[printing-cups-clients]]
== Configurando clientes CUPS
-Depois que o servidor CUPS tiver sido configurado e as impressoras tiverem sido adicionadas e publicadas na rede, a próxima etapa será configurar os clientes ou as máquinas que acessarão o servidor CUPS. Se alguém tiver uma única máquina desktop atuando como servidor e cliente, muitas dessas informações podem não ser necessárias.
+Depois de configurar o servidor CUPS e adicionar as impressoras e publicá-las na rede, o próximo passo é configurar os clientes, ou seja, as máquinas que vão acessar o servidor CUPS. Se você tem um único desktop que atua como servidor e cliente, muitas dessas informações podem não ser necessárias.
[[printing-cups-clients-unix]]
-=== Clientes UNIX(R)
+=== UNIX(R) Clients
-O CUPS também precisará ser instalado em seus clientes UNIX(R). Depois que o CUPS é instalado nos clientes, as impressoras CUPS compartilhadas na rede geralmente são descobertas automaticamente pelos gerenciadores de impressoras de vários ambientes de desktop, como GNOME ou KDE. Como alternativa, pode-se acessar a interface local do CUPS na máquina cliente em http://localhost:631[http://localhost:631] e clicar em em "Adicionar impressora" na seção Administração. Quando visualizar a caixa suspensa "Device", simplesmente selecione a impressora CUPS em rede, se ela foi descoberta automaticamente, ou selecione `ipp` ou `http` e digite o IPP ou HTTP URI da impressora CUPS em rede, geralmente em um das duas seguintes sintaxes:
+O CUPS também precisará ser instalado em seus clientes UNIX(R). Uma vez que o CUPS está instalado nos clientes, as impressoras CUPS compartilhadas na rede muitas vezes são automaticamente descobertas pelos gerenciadores de impressoras de vários ambientes de desktops, como o GNOME ou o KDE. Alternativamente, é possível acessar a interface CUPS local na máquina cliente em http://localhost:631[http://localhost:631] e clicar em "Adicionar Impressora" na seção de Administração. Ao ser apresentado com a caixa de seleção "Dispositivo", basta selecionar a impressora CUPS em rede, se ela foi descoberta automaticamente, ou selecionar `ipp` ou `http` e inserir o URI IPP ou HTTP da impressora CUPS em rede, geralmente em uma das duas seguintes sintaxes:
[.programlisting]
....
@@ -140,31 +143,31 @@ ipp://server-name-or-ip/printers/printername
http://server-name-or-ip:631/printers/printername
....
-Se os clientes CUPS tiverem dificuldade para localizar outras impressoras CUPS compartilhadas na rede, às vezes é útil adicionar ou criar um arquivo [.filename]#/usr/local/etc/cups/client.conf# com uma única entrada da seguinte forma:
+Se os clientes CUPS tiverem dificuldade para encontrar outras impressoras CUPS compartilhadas na rede, às vezes é útil adicionar ou criar um arquivo [.filename]#/usr/local/etc/cups/client.conf# com uma única entrada da seguinte maneira:
[.programlisting]
....
ServerName server-ip
....
-Nesse caso, _server-ip_ seria substituído pelo endereço IP local do servidor CUPS na rede.
+Nesse caso, o _server-ip_ deve ser substituído pelo endereço IP local do servidor CUPS na rede.
[[printing-cups-clients-windows]]
-=== Clientes Windows(R)
+=== Windows(R) Clients
-As versões do Windows(R) anteriores ao XP não tinham a capacidade utilizar impressoras em rede baseadas no protocolo IPP. No entanto, o Windows(R) XP e as versões posteriores têm essa capacidade. Portanto, adicionar uma impressora no CUPS nessas versões do Windows(R) é muito fácil. Geralmente, o administrador Windows(R) deverá executar o assistente do Windows(R) `Adicionar impressora`, e selecionar `Impressora de rede` e, em seguida, inserir o URI na seguinte sintaxe:
+Versões do Windows(R) anteriores ao XP não tinham a capacidade de se conectar em rede com impressoras baseadas em IPP. No entanto, as versões do Windows(R) XP e posteriores têm essa capacidade. Portanto, adicionar uma impressora CUPS nessas versões do Windows(R) é bastante fácil. Geralmente, o administrador do Windows(R) executa o `assistente de adição de impressora` do Windows(R), seleciona `Impressora de rede` e, em seguida, insere a URI no seguinte formato:
[.programlisting]
....
http://server-name-or-ip:631/printers/printername
....
-Se alguém tiver uma versão mais antiga do Windows(R) sem suporte a impressão nativa IPP, o meio geral de se conectar a uma impressora no CUPS é usar o software package:net/samba410[] e o CUPS juntos, o que é um tópico fora do escopo deste artigo.
+Se você tiver uma versão mais antiga do Windows(R) sem suporte nativo de impressão IPP, o meio geral de conexão com uma impressora CUPS é usar o package:net/samba413[] e CUPS juntos, o que é um tópico fora do escopo deste capítulo.
[[printing-cups-troubleshooting]]
-== Solução de problemas do CUPS
+== Resolução de Problemas do CUPS
-A maior parte dos problemas que ocorrem com o CUPS estão geralmente associados a problemas de permissão. Primeiro, verifique novamente as permissões do man:devfs[8] conforme descrito acima. Em seguida, verifique as permissões reais dos dispositivos criados no sistema de arquivos. Também é útil certificar-se de que seu usuário é membro do grupo `cups`. Se as caixas de seleção de permissões na seção Administração da interface Web do CUPS não estiverem funcionando, outra correção poderá ser o backup manual do arquivo de configuração principal do CUPS localizado em [.filename]#/usr/local/etc/cups/cupsd.conf# e edite as várias opções de configuração e experimente diferentes combinações de opções de configuração. Um exemplo do [.filename]#/usr/local/etc/cups/cupsd.conf# para testar está listado abaixo. Por favor note que este exemplo de arquivo [.filename]#cupsd.conf# sacrifica a segurança para facilitar a configuração; Depois que o administrador se conectar com êxito ao servidor do CUPS e configurar os clientes, é aconselhável revisitar esse arquivo de configuração para começar a fechar o acesso.
+As dificuldades com o CUPS geralmente estão relacionadas a permissões. Primeiro, verifique novamente as permissões do man:devfs[8] conforme descrito acima. Em seguida, verifique as permissões reais dos dispositivos criados no sistema de arquivos. Também é útil garantir que seu usuário seja um membro do grupo `cups`. Se as caixas de seleção de permissões na seção de Administração da interface web do CUPS não parecerem estar funcionando, outra solução pode ser fazer backup manualmente do arquivo de configuração principal do CUPS localizado em [.filename]#/usr/local/etc/cups/cupsd.conf# e editar as várias opções de configuração e experimentar diferentes combinações de opções de configuração. Um exemplo de arquivo [.filename]#/usr/local/etc/cups/cupsd.conf# para teste é listado abaixo. Observe que este arquivo de exemplo [.filename]#cupsd.conf# sacrifica a segurança para facilitar a configuração; assim que o administrador se conectar com sucesso ao servidor CUPS e configurar os clientes, é aconselhável revisar este arquivo de configuração e começar a restringir o acesso.
[.programlisting]
....
diff --git a/documentation/content/pt-br/articles/cups/_index.po b/documentation/content/pt-br/articles/cups/_index.po
new file mode 100644
index 0000000000..c1438023c0
--- /dev/null
+++ b/documentation/content/pt-br/articles/cups/_index.po
@@ -0,0 +1,703 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2023.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-05-21 14:43-0300\n"
+"PO-Revision-Date: 2023-05-24 17:47+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlescups_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/cups/_index.adoc:1
+#, no-wrap
+msgid "How to install and use CUPS on FreeBSD"
+msgstr "Como instalar e usar o CUPS no FreeBSD"
+
+#. type: Title =
+#: documentation/content/en/articles/cups/_index.adoc:1
+#: documentation/content/en/articles/cups/_index.adoc:11
+#, no-wrap
+msgid "CUPS on FreeBSD"
+msgstr "CUPS no FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:46
+msgid "An article about configuring CUPS on FreeBSD."
+msgstr "Um artigo sobre como configurar o CUPS no FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:48
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/cups/_index.adoc:52
+#, no-wrap
+msgid "An Introduction to the Common Unix Printing System (CUPS)"
+msgstr "Uma introdução ao Common Unix Printing System (CUPS)"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:56
+msgid ""
+"CUPS, the Common UNIX Printing System, provides a portable printing layer "
+"for UNIX(R)-based operating systems. It has been developed by Easy Software "
+"Products to promote a standard printing solution for all UNIX(R) vendors and "
+"users."
+msgstr ""
+"O CUPS, o Common UNIX Printing System, fornece uma camada de impressão "
+"portátil para sistemas operacionais baseados em UNIX(R). Ele foi "
+"desenvolvido pela Easy Software Products para promover uma solução padrão de "
+"impressão para todos os fornecedores e usuários de UNIX(R)."
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:61
+msgid ""
+"CUPS uses the Internet Printing Protocol (IPP) as the basis for managing "
+"print jobs and queues. The Line Printer Daemon (LPD), Server Message Block "
+"(SMB), and AppSocket (aka JetDirect) protocols are also supported with "
+"reduced functionality. CUPS adds network printer browsing and PostScript "
+"Printer Description (PPD) based printing options to support real-world "
+"printing under UNIX(R). As a result, CUPS is ideally-suited for sharing and "
+"accessing printers in mixed environments of FreeBSD, Linux(R), Mac OS(R) X, "
+"or Windows(R)."
+msgstr ""
+"O CUPS utiliza o Protocolo de Impressão pela Internet (IPP) como base para "
+"gerenciar trabalhos e filas de impressão. Os protocolos Line Printer Daemon "
+"(LPD), Server Message Block (SMB) e AppSocket (também conhecido como "
+"JetDirect) também são suportados, porém com funcionalidade reduzida. O CUPS "
+"adiciona opções de visualização de impressoras em rede e impressão baseada "
+"em PostScript Printer Description (PPD) para suportar as necessidades de "
+"impressão do mundo real no ambiente UNIX(R). Como resultado, o CUPS é ideal "
+"para compartilhar e acessar impressoras em ambientes mistos de FreeBSD, "
+"Linux(R), Mac OS(R) X ou Windows(R)."
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:63
+msgid "The main site for CUPS is http://www.cups.org/[http://www.cups.org/]."
+msgstr "O site principal do CUPS é http://www.cups.org/[http://www.cups.org/]."
+
+#. type: Title ==
+#: documentation/content/en/articles/cups/_index.adoc:65
+#, no-wrap
+msgid "Installing the CUPS Print Server"
+msgstr "Instalando o CUPS Print Server"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:68
+msgid ""
+"To install CUPS using a precompiled binary, issue the following command from "
+"a root terminal:"
+msgstr ""
+"Para instalar o CUPS usando um binário pré-compilado, execute o seguinte "
+"comando em um terminal como root:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:72
+#, no-wrap
+msgid "# pkg install cups\n"
+msgstr "# pkg install cups\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:76
+msgid ""
+"Other optional, but recommended, packages are package:print/gutenprint[] and "
+"package:print/hplip[], both of which add drivers and utilities for a variety "
+"of printers. Once installed, the CUPS configuration files can be found in "
+"the directory [.filename]#/usr/local/etc/cups#."
+msgstr ""
+"Outros pacotes opcionais, mas recomendados, são o package:print/gutenprint[] "
+"e o package:print/hplip[], ambos adicionando drivers e utilitários para uma "
+"variedade de impressoras. Após a instalação, os arquivos de configuração do "
+"CUPS podem ser encontrados no diretório [.filename]#/usr/local/etc/cups#."
+
+#. type: Title ==
+#: documentation/content/en/articles/cups/_index.adoc:78
+#, no-wrap
+msgid "Configuring the CUPS Print Server"
+msgstr "Configurando o CUPS Print Server"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:82
+msgid ""
+"After installation, a few files must be edited to configure the CUPS "
+"server. First, create or modify, as the case may be, the file [.filename]#/"
+"etc/devfs.rules# and add the following information to set the proper "
+"permissions on all potential printer devices and to associate printers with "
+"the `cups` user group:"
+msgstr ""
+"Depois da instalação, alguns arquivos devem ser editados para configurar o "
+"servidor CUPS. Primeiramente, crie ou edite, caso necessário, o arquivo [."
+"filename]#/etc/devfs.rules# e adicione a seguinte informação para definir as "
+"permissões apropriadas em todos os dispositivos de impressora potenciais e "
+"associar as impressoras ao grupo de usuários `cups`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:90
+#, no-wrap
+msgid ""
+"[system=10]\n"
+"add path 'unlpt*' mode 0660 group cups\n"
+"add path 'ulpt*' mode 0660 group cups\n"
+"add path 'lpt*' mode 0660 group cups\n"
+"add path 'usb/X.Y.Z' mode 0660 group cups\n"
+msgstr ""
+"[system=10]\n"
+"add path 'unlpt*' mode 0660 group cups\n"
+"add path 'ulpt*' mode 0660 group cups\n"
+"add path 'lpt*' mode 0660 group cups\n"
+"add path 'usb/X.Y.Z' mode 0660 group cups\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/cups/_index.adoc:96
+msgid ""
+"Note that _X_, _Y_, and _Z_ should be replaced with the target USB device "
+"listed in the [.filename]#/dev/usb# directory that corresponds to the "
+"printer. To find the correct device, examine the output of man:dmesg[8], "
+"where [.filename]#ugenX.Y# lists the printer device, which is a symbolic "
+"link to a USB device in [.filename]#/dev/usb#."
+msgstr ""
+"Observe que _X_, _Y_ e _Z_ devem ser substituídos pelo dispositivo USB de "
+"destino listado no diretório [.filename]#/dev/usb# que corresponde à "
+"impressora. Para encontrar o dispositivo correto, examine a saída do man:"
+"dmesg[8], onde [.filename]#ugenX.Y# lista o dispositivo da impressora, que é "
+"um link simbólico para um dispositivo USB em [.filename]#/dev/usb#."
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:99
+msgid "Next, add two lines to [.filename]#/etc/rc.conf# as follows:"
+msgstr ""
+"Em seguida, adicione duas linhas no arquivo [.filename]#/etc/rc.conf# da "
+"seguinte maneira:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:104
+#, no-wrap
+msgid ""
+"cupsd_enable=\"YES\"\n"
+"devfs_system_ruleset=\"system\"\n"
+msgstr ""
+"cupsd_enable=\"YES\"\n"
+"devfs_system_ruleset=\"system\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:107
+msgid ""
+"These two entries will start the CUPS print server on boot and invoke the "
+"local devfs rule created above, respectively."
+msgstr ""
+"Essas duas entradas irão iniciar o servidor de impressão CUPS na "
+"inicialização e invocar a regra local do devfs criada acima, respectivamente."
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:109
+msgid ""
+"To enable CUPS printing under certain Microsoft(R) Windows(R) clients, the "
+"line below should be uncommented in [.filename]#/usr/local/etc/cups/mime."
+"types# and [.filename]#/usr/local/etc/cups/mime.convs#:"
+msgstr ""
+"Para habilitar a impressão CUPS em determinados clientes Microsoft(R) "
+"Windows(R), a linha abaixo deve ser descomentada nos arquivos [.filename]#/"
+"usr/local/etc/cups/mime.types# e [.filename]#/usr/local/etc/cups/mime.convs#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:113
+#, no-wrap
+msgid "application/octet-stream\n"
+msgstr "application/octet-stream\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:116
+msgid ""
+"Once these changes have been made, the man:devfs[8] and CUPS systems must "
+"both be restarted, either by rebooting the computer or issuing the following "
+"two commands in a root terminal:"
+msgstr ""
+"Uma vez que as alterações tenham sido feitas, os sistemas man:devfs[8] e "
+"CUPS devem ser reiniciados, seja reiniciando o computador ou executando os "
+"seguintes dois comandos em um terminal root:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:121
+#, no-wrap
+msgid ""
+"# /etc/rc.d/devfs restart\n"
+"# /usr/local/etc/rc.d/cupsd restart\n"
+msgstr ""
+"# /etc/rc.d/devfs restart\n"
+"# /usr/local/etc/rc.d/cupsd restart\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/cups/_index.adoc:124
+#, no-wrap
+msgid "Configuring Printers on the CUPS Print Server"
+msgstr "Configurando Impressoras no CUPS Print Server"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:128
+msgid ""
+"After the CUPS system has been installed and configured, the administrator "
+"can begin configuring the local printers attached to the CUPS print server. "
+"This part of the process is very similar, if not identical, to configuring "
+"CUPS printers on other UNIX(R)-based operating systems, such as a Linux(R) "
+"distribution."
+msgstr ""
+"Depois que o sistema CUPS foi instalado e configurado, o administrador pode "
+"começar a configurar as impressoras locais conectadas ao servidor de "
+"impressão CUPS. Esta parte do processo é muito semelhante, senão idêntica, à "
+"configuração de impressoras CUPS em outros sistemas operacionais baseados em "
+"UNIX(R), como uma distribuição Linux(R)."
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:133
+msgid ""
+"The primary means for managing and administering the CUPS server is through "
+"the web-based interface, which can be found by launching a web browser and "
+"entering http://localhost:631[http://localhost:631] in the browser's URL "
+"bar. If the CUPS server is on another machine on the network, substitute "
+"the server's local IP address for `localhost`. The CUPS web interface is "
+"fairly self-explanatory, as there are sections for managing printers and "
+"print jobs, authorizing users, and more. Additionally, on the right-hand "
+"side of the Administration screen are several check-boxes allowing easy "
+"access to commonly-changed settings, such as whether to share published "
+"printers connected to the system, whether to allow remote administration of "
+"the CUPS server, and whether to allow users additional access and privileges "
+"to the printers and print jobs."
+msgstr ""
+"O principal meio para gerenciar e administrar o servidor CUPS é através da "
+"interface baseada na web, que pode ser encontrada ao iniciar um navegador e "
+"inserir o endereço http://localhost:631[http://localhost:631] na barra de "
+"endereço do navegador. Se o servidor CUPS estiver em outra máquina na rede, "
+"substitua o endereço IP local do servidor por `localhost`. A interface web "
+"do CUPS é bastante autoexplicativa, pois há seções para gerenciar "
+"impressoras e trabalhos de impressão, autorizar usuários e muito mais. Além "
+"disso, no lado direito da tela de administração há várias caixas de seleção "
+"que permitem fácil acesso às configurações comumente alteradas, como "
+"compartilhar impressoras conectadas ao sistema, permitir a administração "
+"remota do servidor CUPS e permitir que os usuários tenham acesso e "
+"privilégios adicionais às impressoras e trabalhos de impressão."
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:137
+msgid ""
+"Adding a printer is generally as easy as clicking \"Add Printer\" at the "
+"Administration screen of the CUPS web interface, or clicking one of the "
+"\"New Printers Found\" buttons also at the Administration screen. When "
+"presented with the \"Device\" drop-down box, simply select the desired "
+"locally-attached printer, and then continue through the process. If one has "
+"added the package:print/gutenprint-cups[] or package:print/hplip[] ports or "
+"packages as referenced above, then additional print drivers will be "
+"available in the subsequent screens that might provide more stability or "
+"features."
+msgstr ""
+"Adicionar uma impressora geralmente é tão fácil quanto clicar em \"Adicionar "
+"Impressora\" na tela de Administração da interface web do CUPS, ou clicar em "
+"um dos botões \"Novas Impressoras Encontradas\" também na tela de "
+"Administração. Quando for exibida a caixa de seleção \"Dispositivo\", "
+"simplesmente selecione a impressora local desejada e continue o processo. Se "
+"você tiver adicionado os pacotes package:print/gutenprint-cups[] ou package:"
+"print/hplip[], conforme referido acima, drivers de impressão adicionais "
+"estarão disponíveis nas telas subsequentes que podem fornecer mais "
+"estabilidade ou recursos."
+
+#. type: Title ==
+#: documentation/content/en/articles/cups/_index.adoc:139
+#, no-wrap
+msgid "Configuring CUPS Clients"
+msgstr "Configurando clientes CUPS"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:143
+msgid ""
+"Once the CUPS server has been configured and printers have been added and "
+"published to the network, the next step is to configure the clients, or the "
+"machines that are going to access the CUPS server. If one has a single "
+"desktop machine that is acting as both server and client, then much of this "
+"information may not be needed."
+msgstr ""
+"Depois de configurar o servidor CUPS e adicionar as impressoras e publicá-"
+"las na rede, o próximo passo é configurar os clientes, ou seja, as máquinas "
+"que vão acessar o servidor CUPS. Se você tem um único desktop que atua como "
+"servidor e cliente, muitas dessas informações podem não ser necessárias."
+
+#. type: Title ===
+#: documentation/content/en/articles/cups/_index.adoc:145
+#, no-wrap
+msgid "UNIX(R) Clients"
+msgstr "UNIX(R) Clients"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:151
+msgid ""
+"CUPS will also need to be installed on your UNIX(R) clients. Once CUPS is "
+"installed on the clients, then CUPS printers that are shared across the "
+"network are often automatically discovered by the printer managers for "
+"various desktop environments such as GNOME or KDE. Alternatively, one can "
+"access the local CUPS interface on the client machine at http://"
+"localhost:631[http://localhost:631] and click on \"Add Printer\" in the "
+"Administration section. When presented with the \"Device\" drop-down box, "
+"simply select the networked CUPS printer, if it was automatically "
+"discovered, or select `ipp` or `http` and enter the IPP or HTTP URI of the "
+"networked CUPS printer, usually in one of the two following syntaxes:"
+msgstr ""
+"O CUPS também precisará ser instalado em seus clientes UNIX(R). Uma vez que "
+"o CUPS está instalado nos clientes, as impressoras CUPS compartilhadas na "
+"rede muitas vezes são automaticamente descobertas pelos gerenciadores de "
+"impressoras de vários ambientes de desktops, como o GNOME ou o KDE. "
+"Alternativamente, é possível acessar a interface CUPS local na máquina "
+"cliente em http://localhost:631[http://localhost:631] e clicar em "
+"\"Adicionar Impressora\" na seção de Administração. Ao ser apresentado com a "
+"caixa de seleção \"Dispositivo\", basta selecionar a impressora CUPS em "
+"rede, se ela foi descoberta automaticamente, ou selecionar `ipp` ou `http` e "
+"inserir o URI IPP ou HTTP da impressora CUPS em rede, geralmente em uma das "
+"duas seguintes sintaxes:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:155
+#, no-wrap
+msgid "ipp://server-name-or-ip/printers/printername\n"
+msgstr "ipp://server-name-or-ip/printers/printername\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:160
+#: documentation/content/en/articles/cups/_index.adoc:182
+#, no-wrap
+msgid "http://server-name-or-ip:631/printers/printername\n"
+msgstr "http://server-name-or-ip:631/printers/printername\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:163
+msgid ""
+"If the CUPS clients have difficulty finding other CUPS printers shared "
+"across the network, sometimes it is helpful to add or create a file [."
+"filename]#/usr/local/etc/cups/client.conf# with a single entry as follows:"
+msgstr ""
+"Se os clientes CUPS tiverem dificuldade para encontrar outras impressoras "
+"CUPS compartilhadas na rede, às vezes é útil adicionar ou criar um arquivo [."
+"filename]#/usr/local/etc/cups/client.conf# com uma única entrada da seguinte "
+"maneira:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:167
+#, no-wrap
+msgid "ServerName server-ip\n"
+msgstr "ServerName server-ip\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:170
+msgid ""
+"In this case, _server-ip_ would be replaced by the local IP address of the "
+"CUPS server on the network."
+msgstr ""
+"Nesse caso, o _server-ip_ deve ser substituído pelo endereço IP local do "
+"servidor CUPS na rede."
+
+#. type: Title ===
+#: documentation/content/en/articles/cups/_index.adoc:172
+#, no-wrap
+msgid "Windows(R) Clients"
+msgstr "Windows(R) Clients"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:178
+msgid ""
+"Versions of Windows(R) prior to XP did not have the capability to natively "
+"network with IPP-based printers. However, Windows(R) XP and later versions "
+"do have this capability. Therefore, to add a CUPS printer in these versions "
+"of Windows(R) is quite easy. Generally, the Windows(R) administrator will "
+"run the Windows(R) `Add Printer` wizard, select `Network Printer` and then "
+"enter the URI in the following syntax:"
+msgstr ""
+"Versões do Windows(R) anteriores ao XP não tinham a capacidade de se "
+"conectar em rede com impressoras baseadas em IPP. No entanto, as versões do "
+"Windows(R) XP e posteriores têm essa capacidade. Portanto, adicionar uma "
+"impressora CUPS nessas versões do Windows(R) é bastante fácil. Geralmente, o "
+"administrador do Windows(R) executa o `assistente de adição de impressora` "
+"do Windows(R), seleciona `Impressora de rede` e, em seguida, insere a URI no "
+"seguinte formato:"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:185
+msgid ""
+"If one has an older version of Windows(R) without native IPP printing "
+"support, then the general means of connecting to a CUPS printer is to use "
+"package:net/samba413[] and CUPS together, which is a topic outside the scope "
+"of this chapter."
+msgstr ""
+"Se você tiver uma versão mais antiga do Windows(R) sem suporte nativo de "
+"impressão IPP, o meio geral de conexão com uma impressora CUPS é usar o "
+"package:net/samba413[] e CUPS juntos, o que é um tópico fora do escopo deste "
+"capítulo."
+
+#. type: Title ==
+#: documentation/content/en/articles/cups/_index.adoc:187
+#, no-wrap
+msgid "CUPS Troubleshooting"
+msgstr "Resolução de Problemas do CUPS"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:196
+msgid ""
+"Difficulties with CUPS often lies in permissions. First, double check the "
+"man:devfs[8] permissions as outlined above. Next, check the actual "
+"permissions of the devices created in the file system. It is also helpful "
+"to make sure your user is a member of the `cups` group. If the permissions "
+"check boxes in the Administration section of the CUPS web interface do not "
+"seem to be working, another fix might be to manually backup the main CUPS "
+"configuration file located at [.filename]#/usr/local/etc/cups/cupsd.conf# "
+"and edit the various configuration options and try different combinations of "
+"configuration options. One sample [.filename]#/usr/local/etc/cups/cupsd."
+"conf# to test is listed below. Please note that this sample [."
+"filename]#cupsd.conf# sacrifices security for easier configuration; once the "
+"administrator successfully connects to the CUPS server and configures the "
+"clients, it is advisable to revisit this configuration file and begin "
+"locking down access."
+msgstr ""
+"As dificuldades com o CUPS geralmente estão relacionadas a permissões. "
+"Primeiro, verifique novamente as permissões do man:devfs[8] conforme "
+"descrito acima. Em seguida, verifique as permissões reais dos dispositivos "
+"criados no sistema de arquivos. Também é útil garantir que seu usuário seja "
+"um membro do grupo `cups`. Se as caixas de seleção de permissões na seção de "
+"Administração da interface web do CUPS não parecerem estar funcionando, "
+"outra solução pode ser fazer backup manualmente do arquivo de configuração "
+"principal do CUPS localizado em [.filename]#/usr/local/etc/cups/cupsd.conf# "
+"e editar as várias opções de configuração e experimentar diferentes "
+"combinações de opções de configuração. Um exemplo de arquivo [.filename]#/"
+"usr/local/etc/cups/cupsd.conf# para teste é listado abaixo. Observe que este "
+"arquivo de exemplo [.filename]#cupsd.conf# sacrifica a segurança para "
+"facilitar a configuração; assim que o administrador se conectar com sucesso "
+"ao servidor CUPS e configurar os clientes, é aconselhável revisar este "
+"arquivo de configuração e começar a restringir o acesso."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:202
+#, no-wrap
+msgid ""
+"# Log general information in error_log - change \"info\" to \"debug\" for\n"
+"# troubleshooting...\n"
+"LogLevel info\n"
+msgstr ""
+"# Log general information in error_log - change \"info\" to \"debug\" for\n"
+"# troubleshooting...\n"
+"LogLevel info\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:205
+#, no-wrap
+msgid ""
+"# Administrator user group...\n"
+"SystemGroup wheel\n"
+msgstr ""
+"# Administrator user group...\n"
+"SystemGroup wheel\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:210
+#, no-wrap
+msgid ""
+"# Listen for connections on Port 631.\n"
+"Port 631\n"
+"#Listen localhost:631\n"
+"Listen /var/run/cups.sock\n"
+msgstr ""
+"# Listen for connections on Port 631.\n"
+"Port 631\n"
+"#Listen localhost:631\n"
+"Listen /var/run/cups.sock\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:217
+#, no-wrap
+msgid ""
+"# Show shared printers on the local network.\n"
+"Browsing On\n"
+"BrowseOrder allow,deny\n"
+"#BrowseAllow @LOCAL\n"
+"BrowseAllow 192.168.1.* # change to local LAN settings\n"
+"BrowseAddress 192.168.1.* # change to local LAN settings\n"
+msgstr ""
+"# Show shared printers on the local network.\n"
+"Browsing On\n"
+"BrowseOrder allow,deny\n"
+"#BrowseAllow @LOCAL\n"
+"BrowseAllow 192.168.1.* # change to local LAN settings\n"
+"BrowseAddress 192.168.1.* # change to local LAN settings\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:221
+#, no-wrap
+msgid ""
+"# Default authentication type, when authentication is required...\n"
+"DefaultAuthType Basic\n"
+"DefaultEncryption Never # comment this line to allow encryption\n"
+msgstr ""
+"# Default authentication type, when authentication is required...\n"
+"DefaultAuthType Basic\n"
+"DefaultEncryption Never # comment this line to allow encryption\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:228
+#, no-wrap
+msgid ""
+"# Allow access to the server from any machine on the LAN\n"
+"<Location />\n"
+" Order allow,deny\n"
+" #Allow localhost\n"
+" Allow 192.168.1.* # change to local LAN settings\n"
+"</Location>\n"
+msgstr ""
+"# Allow access to the server from any machine on the LAN\n"
+"<Location />\n"
+" Order allow,deny\n"
+" #Allow localhost\n"
+" Allow 192.168.1.* # change to local LAN settings\n"
+"</Location>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:236
+#, no-wrap
+msgid ""
+"# Allow access to the admin pages from any machine on the LAN\n"
+"<Location /admin>\n"
+" #Encryption Required\n"
+" Order allow,deny\n"
+" #Allow localhost\n"
+" Allow 192.168.1.* # change to local LAN settings\n"
+"</Location>\n"
+msgstr ""
+"# Allow access to the admin pages from any machine on the LAN\n"
+"<Location /admin>\n"
+" #Encryption Required\n"
+" Order allow,deny\n"
+" #Allow localhost\n"
+" Allow 192.168.1.* # change to local LAN settings\n"
+"</Location>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:245
+#, no-wrap
+msgid ""
+"# Allow access to configuration files from any machine on the LAN\n"
+"<Location /admin/conf>\n"
+" AuthType Basic\n"
+" Require user @SYSTEM\n"
+" Order allow,deny\n"
+" #Allow localhost\n"
+" Allow 192.168.1.* # change to local LAN settings\n"
+"</Location>\n"
+msgstr ""
+"# Allow access to configuration files from any machine on the LAN\n"
+"<Location /admin/conf>\n"
+" AuthType Basic\n"
+" Require user @SYSTEM\n"
+" Order allow,deny\n"
+" #Allow localhost\n"
+" Allow 192.168.1.* # change to local LAN settings\n"
+"</Location>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:256
+#, no-wrap
+msgid ""
+"# Set the default printer/job policies...\n"
+"<Policy default>\n"
+" # Job-related operations must be done by the owner or an administrator...\n"
+" <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs \\\n"
+"Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription \\\n"
+"Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job \\\n"
+"CUPS-Move-Job>\n"
+" Require user @OWNER @SYSTEM\n"
+" Order deny,allow\n"
+" </Limit>\n"
+msgstr ""
+"# Set the default printer/job policies...\n"
+"<Policy default>\n"
+" # Job-related operations must be done by the owner or an administrator...\n"
+" <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs \\\n"
+"Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription \\\n"
+"Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job \\\n"
+"CUPS-Move-Job>\n"
+" Require user @OWNER @SYSTEM\n"
+" Order deny,allow\n"
+" </Limit>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:267
+#, no-wrap
+msgid ""
+" # All administration operations require an administrator to authenticate...\n"
+" <Limit Pause-Printer Resume-Printer Set-Printer-Attributes Enable-Printer \\\n"
+"Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs \\\n"
+"Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer \\\n"
+"Promote-Job Schedule-Job-After CUPS-Add-Printer CUPS-Delete-Printer CUPS-Add-Class \\\n"
+"CUPS-Delete-Class CUPS-Accept-Jobs CUPS-Reject-Jobs CUPS-Set-Default>\n"
+" AuthType Basic\n"
+" Require user @SYSTEM\n"
+" Order deny,allow\n"
+" </Limit>\n"
+msgstr ""
+" # All administration operations require an administrator to authenticate...\n"
+" <Limit Pause-Printer Resume-Printer Set-Printer-Attributes Enable-Printer \\\n"
+"Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs \\\n"
+"Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer \\\n"
+"Promote-Job Schedule-Job-After CUPS-Add-Printer CUPS-Delete-Printer CUPS-Add-Class \\\n"
+"CUPS-Delete-Class CUPS-Accept-Jobs CUPS-Reject-Jobs CUPS-Set-Default>\n"
+" AuthType Basic\n"
+" Require user @SYSTEM\n"
+" Order deny,allow\n"
+" </Limit>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:273
+#, no-wrap
+msgid ""
+" # Only the owner or an administrator can cancel or authenticate a job...\n"
+" <Limit Cancel-Job CUPS-Authenticate-Job>\n"
+" Require user @OWNER @SYSTEM\n"
+" Order deny,allow\n"
+" </Limit>\n"
+msgstr ""
+" # Only the owner or an administrator can cancel or authenticate a job...\n"
+" <Limit Cancel-Job CUPS-Authenticate-Job>\n"
+" Require user @OWNER @SYSTEM\n"
+" Order deny,allow\n"
+" </Limit>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:278
+#, no-wrap
+msgid ""
+" <Limit All>\n"
+" Order deny,allow\n"
+" </Limit>\n"
+"</Policy>\n"
+msgstr ""
+" <Limit All>\n"
+" Order deny,allow\n"
+" </Limit>\n"
+"</Policy>\n"
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/explaining-bsd/_index.adoc b/documentation/content/pt-br/articles/explaining-bsd/_index.adoc
index d7b0b26a62..8ce9d50751 100644
--- a/documentation/content/pt-br/articles/explaining-bsd/_index.adoc
+++ b/documentation/content/pt-br/articles/explaining-bsd/_index.adoc
@@ -156,7 +156,7 @@ O Linux está disponível sob a http://www.fsf.org/copyleft/gpl.html[Licença P
=== O que mais eu deveria saber?
-Como menos aplicativos estão disponíveis para o BSD do que para o Linux, os desenvolvedores do BSD criaram um pacote de compatibilidade com o Linux, o qual permite que os programas Linux sejam executados sob o BSD. O pacote inclui tanto as modificações do kernel, necessárias para executar corretamente as chamadas do sistema Linux e quanto os arquivos de compatibilidade do Linux, como a biblioteca C. Não há diferença perceptível na velocidade de execução entre um aplicativo Linux em execução em uma máquina Linux nativa e um aplicativo Linux em execução em uma máquina BSD, contanto que ambas tenham o mesmo hardware.
+Uma vez que há menos aplicativos disponíveis para o BSD em comparação ao Linux, os desenvolvedores do BSD criaram um pacote de compatibilidade com o Linux, que permite que programas do Linux sejam executados no BSD. Esse pacote inclui modificações no kernel para realizar corretamente chamadas de sistema do Linux, além de arquivos de compatibilidade do Linux, como a biblioteca C. Não há diferença perceptível na velocidade de execução entre um aplicativo do Linux rodando em uma máquina Linux e um aplicativo do Linux rodando em uma máquina BSD de mesma velocidade.
A natureza do BSD de ser um sistema em que tudo é provido por "um único fornecedor" significa que as atualizações são muito mais fáceis de se lidar do que frequentemente ocorre no caso no Linux. O BSD lida com as atualizações das versões das bibliotecas fornecendo módulos de compatibilidade para as versões anteriores, portanto, é possível executar binários bastante antigos sem problemas.
diff --git a/documentation/content/pt-br/articles/explaining-bsd/_index.po b/documentation/content/pt-br/articles/explaining-bsd/_index.po
index c090545b64..5811261d69 100644
--- a/documentation/content/pt-br/articles/explaining-bsd/_index.po
+++ b/documentation/content/pt-br/articles/explaining-bsd/_index.po
@@ -2,12 +2,14 @@
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2021-06-08 07:32-0300\n"
-"PO-Revision-Date: 2021-06-10 23:03+0000\n"
-"Last-Translator: Danilo G. Baio <dbaio@FreeBSD.org>\n"
+"POT-Creation-Date: 2023-05-21 14:43-0300\n"
+"PO-Revision-Date: 2023-05-25 18:55+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
"projects/documentation/articlesexplaining-bsd_index/pt_BR/>\n"
"Language: pt_BR\n"
@@ -15,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.6.2\n"
+"X-Generator: Weblate 4.17\n"
#. type: YAML Front Matter: description
#: documentation/content/en/articles/explaining-bsd/_index.adoc:1
@@ -31,12 +33,12 @@ msgid "Explaining BSD"
msgstr "Explicando o BSD"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:23
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:44
msgid "Abstract"
msgstr "Resumo"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:25
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:46
msgid ""
"In the open source world, the word \"Linux\" is almost synonymous with "
"\"Operating System\", but it is not the only open source UNIX(R) operating "
@@ -47,7 +49,7 @@ msgstr ""
"de código aberto."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:27
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:48
msgid ""
"So what is the secret? Why is BSD not better known? This white paper "
"addresses these and other questions."
@@ -56,7 +58,7 @@ msgstr ""
"aborda esta e outras questões."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:29
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:50
msgid ""
"Throughout this paper, differences between BSD and Linux will be noted "
"__like this__."
@@ -65,18 +67,18 @@ msgstr ""
"__desta forma__."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:31
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:52
msgid "'''"
msgstr "'''"
#. type: Title ==
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:35
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:56
#, no-wrap
msgid "What is BSD?"
msgstr "O que é o BSD?"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:42
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:63
msgid ""
"BSD stands for \"Berkeley Software Distribution\". It is the name of "
"distributions of source code from the University of California, Berkeley, "
@@ -95,7 +97,7 @@ msgstr ""
"destaque para os do projeto GNU. O sistema operacional geralmente abrange:"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:44
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:65
msgid ""
"The BSD kernel, which handles process scheduling, memory management, "
"symmetric multi-processing (SMP), device drivers, etc."
@@ -105,12 +107,12 @@ msgstr ""
"drivers de dispositivos, etc."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:45
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:66
msgid "The C library, the base API for the system."
msgstr "A biblioteca C, a API base do sistema."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:47
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:68
msgid ""
"__The BSD C library is based on code from Berkeley, not the GNU project.__"
msgstr ""
@@ -118,50 +120,50 @@ msgstr ""
"__"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:48
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:69
msgid "Utilities such as shells, file utilities, compilers and linkers."
msgstr ""
"Utilitários como shells, gerenciadores de arquivos, compiladores e linkers "
"(conversores de arquivos compilados em executáveis)."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:50
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:71
msgid ""
"__Some of the utilities are derived from the GNU project, others are not.__"
msgstr "__Alguns utilitários são derivados do projeto GNU, outros não são.__"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:51
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:72
msgid "The X Window system, which handles graphical display."
msgstr "O sistema X Window, que gerencia a interface gráfica."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:54
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:75
msgid ""
"The X Window system used in most versions of BSD is maintained by the http://"
"www.X.org/[X.Org project]. FreeBSD allows the user to choose from a variety "
"of desktop environments, such as Gnome, KDE, or Xfce; and lightweight window "
"managers like Openbox, Fluxbox, or Awesome."
msgstr ""
-"O sistema X Window usado na maioria das versões do BSD é mantido pelo "
-"http://www.X.org/[Projeto X.Org]. O FreeBSD permite ao usuário escolher a "
-"partir de uma variedade de ambientes de desktop, tais como o Gnome, KDE ou "
-"Xfce; e gerenciadores gráficos (gerenciadores de janelas) mais leves, como "
-"Openbox, Fluxbox ou Awesome."
+"O sistema X Window usado na maioria das versões do BSD é mantido pelo http://"
+"www.X.org/[Projeto X.Org]. O FreeBSD permite ao usuário escolher a partir de "
+"uma variedade de ambientes de desktop, tais como o Gnome, KDE ou Xfce; e "
+"gerenciadores gráficos (gerenciadores de janelas) mais leves, como Openbox, "
+"Fluxbox ou Awesome."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:55
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:76
msgid "Many other programs and utilities."
msgstr "Diversos outros programas e utilitários."
#. type: Title ==
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:57
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:78
#, no-wrap
msgid "What, a real UNIX(R)?"
msgstr "O que, um verdadeiro UNIX(R)?"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:62
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:83
msgid ""
"The BSD operating systems are not clones, but open source derivatives of "
"AT&T's Research UNIX(R) operating system, which is also the ancestor of the "
@@ -174,7 +176,7 @@ msgstr ""
"possível, uma vez que a AT&T nunca liberou seu código como código aberto?"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:64
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:85
msgid ""
"It is true that AT&T UNIX(R) is not open source, and in a copyright sense "
"BSD is very definitely _not_ UNIX(R), but on the other hand, AT&T has "
@@ -192,7 +194,7 @@ msgstr ""
"_Berkeley Software Distribution_ ou __BSD__."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:68
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:89
msgid ""
"Initial BSD releases consisted mainly of user programs, but that changed "
"dramatically when the CSRG landed a contract with the Defense Advanced "
@@ -211,7 +213,7 @@ msgstr ""
"foi parte do 4.2BSD, em 1982."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:75
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:96
msgid ""
"In the course of the 1980s, a number of new workstation companies sprang "
"up. Many preferred to license UNIX(R) rather than developing operating "
@@ -238,7 +240,7 @@ msgstr ""
"conhecidos como __Berkeley Extensions__."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:84
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:105
msgid ""
"The BSD tapes contained AT&T source code and thus required a UNIX(R) source "
"license. By 1990, the CSRG's funding was running out, and it faced "
@@ -269,7 +271,7 @@ msgstr ""
"alterado para BSD/OS."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:90
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:111
msgid ""
"386BSD never became a stable operating system. Instead, two other projects "
"split off from it in 1993: http://www.NetBSD.org/[NetBSD] and link:https://"
@@ -295,18 +297,18 @@ msgstr ""
"FreeBSD."
#. type: Title ==
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:92
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:113
#, no-wrap
msgid "Why is BSD not better known?"
msgstr "Por que o BSD não é mais conhecido?"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:95
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:116
msgid "For a number of reasons, BSD is relatively unknown:"
msgstr "Por uma série de razões, o BSD é relativamente desconhecido:"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:97
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:118
msgid ""
"The BSD developers are often more interested in polishing their code than "
"marketing it."
@@ -315,7 +317,7 @@ msgstr ""
"do que em divulgá-lo."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:98
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:119
msgid ""
"Much of Linux's popularity is due to factors external to the Linux projects, "
"such as the press, and to companies formed to provide Linux services. Until "
@@ -327,7 +329,7 @@ msgstr ""
"proposta."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:99
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:120
msgid ""
"In 1992, AT&T sued http://www.bsdi.com/[BSDI], the vendor of BSD/386, "
"alleging that the product contained AT&T-copyrighted code. The case was "
@@ -342,7 +344,7 @@ msgstr ""
"publicado na web afirma que o caso foi \"recentemente encerrado\"."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:103
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:124
msgid ""
"One detail that the lawsuit did clarify is the naming: in the 1980s, BSD was "
"known as \"BSD UNIX(R)\". With the elimination of the last vestige of AT&T "
@@ -357,13 +359,13 @@ msgstr ""
"operacional 4.3BSD UNIX(R)\" e o \"sistema operacional 4.4BSD\"."
#. type: Title ==
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:105
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:126
#, no-wrap
msgid "Comparing BSD and Linux"
msgstr "Comparando BSD e Linux"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:111
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:132
msgid ""
"So what is really the difference between, say, Debian Linux and FreeBSD? For "
"the average user, the difference is surprisingly small: Both are UNIX(R) "
@@ -384,13 +386,13 @@ msgstr ""
"diferenças do NetBSD, OpenBSD e Dragon FlyBSD são pequenas."
#. type: Title ===
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:112
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:133
#, no-wrap
msgid "Who owns BSD?"
msgstr "Quem é o dono do BSD?"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:117
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:138
msgid ""
"No one person or corporation owns BSD. It is created and distributed by a "
"community of highly technical and committed contributors all over the "
@@ -404,13 +406,13 @@ msgstr ""
"mantenedores."
#. type: Title ===
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:118
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:139
#, no-wrap
msgid "How is BSD developed and updated?"
msgstr "Como o BSD é desenvolvido e atualizado?"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:123
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:144
msgid ""
"The BSD kernels are developed and updated following the Open Source "
"development model. Each project maintains a publicly accessible _source "
@@ -425,7 +427,7 @@ msgstr ""
"obter uma cópia completa de qualquer versão."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:126
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:147
msgid ""
"A large number of developers worldwide contribute to improvements to BSD. "
"They are divided into three kinds:"
@@ -434,12 +436,12 @@ msgstr ""
"melhorias ao BSD. Eles estão divididos em três categorias:"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:128
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:149
msgid ""
"_Contributors_ write code or documentation. They are not permitted to commit "
-"(add code) directly to the source tree. In order for their code to be "
-"included in the system, it must be reviewed and checked in by a registered "
-"developer, known as a __committer__."
+"(add code) directly to the source tree. For their code to be included in the "
+"system, it must be reviewed and checked in by a registered developer, known "
+"as a __committer__."
msgstr ""
"_Contributors_ escrevem código ou documentação. Eles não têm permissão para "
"adicionar código diretamente ao repositório principal de código fonte. Para "
@@ -447,18 +449,18 @@ msgstr ""
"por um desenvolvedor registrado, conhecido como __committer__."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:129
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:150
msgid ""
-"_Committers_ are developers with write access to the source tree. In order "
-"to become a committer, an individual must show ability in the area in which "
-"they are active."
+"_Committers_ are developers with write access to the source tree. To become "
+"a committer, an individual must show ability in the area in which they are "
+"active."
msgstr ""
"_Committers_ são desenvolvedores com acesso de gravação no repositório "
"principal de código fonte. Para se tornar um committer, um indivíduo deve "
"mostrar habilidade na área em que está ativo."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:136
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:157
msgid ""
"It is at the individual committer's discretion whether they should obtain "
"authority before committing changes to the source tree. In general, an "
@@ -487,14 +489,14 @@ msgstr ""
"alterações para o repositório de código fonte em segredo."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:137
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:158
msgid ""
"The _Core team_. FreeBSD and NetBSD each have a core team which manages the "
"project. The core teams developed in the course of the projects, and their "
-"role is not always well-defined. It is not necessary to be a developer in "
-"order to be a core team member, though it is normal. The rules for the core "
-"team vary from one project to the other, but in general they have more say "
-"in the direction of the project than non-core team members have."
+"role is not always well-defined. It is not necessary to be a developer to be "
+"a core team member, though it is normal. The rules for the core team vary "
+"from one project to the other, but in general they have more say in the "
+"direction of the project than non-core team members have."
msgstr ""
"O _Core Team_. O FreeBSD e o NetBSD possuem uma equipe principal (Core team) "
"que gerenciam o projeto. As equipes principais evoluíram ao longo dos "
@@ -505,12 +507,12 @@ msgstr ""
"demais membros tem."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:139
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:160
msgid "This arrangement differs from Linux in a number of ways:"
msgstr "Esse arranjo difere do Linux de várias maneiras:"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:141
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:162
msgid ""
"No one person controls the content of the system. In practice, this "
"difference is overrated, since the Principal Architect can require that code "
@@ -523,7 +525,7 @@ msgstr ""
"fazer alterações."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:142
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:163
msgid ""
"On the other hand, there _is_ a central repository, a single place where you "
"can find the entire operating system sources, including all older versions."
@@ -533,7 +535,7 @@ msgstr ""
"as versões mais antigas."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:143
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:164
msgid ""
"BSD projects maintain the entire \"Operating System\", not only the kernel. "
"This distinction is only marginally useful: neither BSD nor Linux is useful "
@@ -546,7 +548,7 @@ msgstr ""
"os mesmos aplicativos usados no Linux."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:144
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:165
msgid ""
"As a result of the formalized maintenance of a single SVN source tree, BSD "
"development is clear, and it is possible to access any version of the system "
@@ -561,13 +563,13 @@ msgstr ""
"é atualizado cerca de 100 vezes por dia. A maioria dessas mudanças é pequena."
#. type: Title ===
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:145
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:166
#, no-wrap
msgid "BSD releases"
msgstr "Releases do BSD"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:150
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:171
msgid ""
"FreeBSD, NetBSD and OpenBSD provide the system in three different \"releases"
"\". As with Linux, releases are assigned a number such as 1.4.1 or 3.5. In "
@@ -578,7 +580,7 @@ msgstr ""
"3.5. Além disso, o número da versão tem um sufixo indicando sua finalidade:"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:152
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:173
msgid ""
"The development version of the system is called _CURRENT_. FreeBSD assigns a "
"number to CURRENT, for example FreeBSD 5.0-CURRENT. NetBSD uses a slightly "
@@ -595,7 +597,7 @@ msgstr ""
"novo desenvolvimento no sistema entra neste branch."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:153
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:174
msgid ""
"At regular intervals, between two and four times a year, the projects bring "
"out a _RELEASE_ version of the system, which is available on CD-ROM and for "
@@ -613,7 +615,7 @@ msgstr ""
"1.4.2."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:154
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:175
msgid ""
"As bugs are found in a RELEASE version, they are fixed, and the fixes are "
"added to the SVN tree. In FreeBSD, the resultant version is called the "
@@ -631,7 +633,7 @@ msgstr ""
"são aplicadas a todas as versões RELEASE suportadas."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:161
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:182
msgid ""
"_By contrast, Linux maintains two separate code trees: the stable version "
"and the development version. Stable versions have an even minor version "
@@ -655,13 +657,13 @@ msgstr ""
"\"TurboLinux 6.0 com kernel 2.2.14 \"._"
#. type: Title ===
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:162
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:183
#, no-wrap
msgid "What versions of BSD are available?"
msgstr "Quais versões do BSD estão disponíveis?"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:165
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:186
msgid ""
"In contrast to the numerous Linux distributions, there are only four major "
"open source BSDs. Each BSD project maintains its own source tree and its own "
@@ -675,7 +677,7 @@ msgstr ""
"que no Linux."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:167
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:188
msgid ""
"It is difficult to categorize the goals of each project: the differences are "
"very subjective. Basically,"
@@ -684,7 +686,7 @@ msgstr ""
"subjetivas. Basicamente,"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:169
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:190
msgid ""
"FreeBSD aims for high performance and ease of use by end users, and is a "
"favourite of web content providers. It runs on a link:https://www.FreeBSD."
@@ -697,7 +699,7 @@ msgstr ""
"significativamente mais usuários do que os outros projetos."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:170
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:191
msgid ""
"NetBSD aims for maximum portability: \"of course it runs NetBSD\". It runs "
"on machines from palmtops to large servers, and has even been used on NASA "
@@ -711,7 +713,7 @@ msgstr ""
"Intel(R)."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:171
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:192
msgid ""
"OpenBSD aims for security and code purity: it uses a combination of the open "
"source concept and rigorous code reviews to create a system which is "
@@ -727,7 +729,7 @@ msgstr ""
"executado em várias plataformas."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:172
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:193
msgid ""
"DragonFlyBSD aims for high performance and scalability under everything from "
"a single-node UP system to a massively clustered system. DragonFlyBSD has "
@@ -741,7 +743,7 @@ msgstr ""
"de entender, manter e desenvolver."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:174
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:195
msgid ""
"There are also two additional BSD UNIX(R) operating systems which are not "
"open source, BSD/OS and Apple's Mac OS(R) X:"
@@ -750,7 +752,7 @@ msgstr ""
"aberto, o BSD/OS e Mac OS(R) X da Apple:"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:176
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:197
msgid ""
"BSD/OS was the oldest of the 4.4BSD derivatives. It was not open source, "
"though source code licenses were available at relatively low cost. It "
@@ -769,7 +771,7 @@ msgstr ""
"VxWorks."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:177
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:198
msgid ""
"http://www.apple.com/macosx/server/[Mac OS(R) X] is the latest version of "
"the operating system for Apple(R)'s Mac(R) line. The BSD core of this "
@@ -789,13 +791,13 @@ msgstr ""
"versa."
#. type: Title ===
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:178
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:199
#, no-wrap
msgid "How does the BSD license differ from the GNU Public license?"
msgstr "Como a licença BSD difere da licença GNU Publica?"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:184
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:205
msgid ""
"Linux is available under the http://www.fsf.org/copyleft/gpl.html[GNU "
"General Public License] (GPL), which is designed to eliminate closed source "
@@ -814,34 +816,33 @@ msgstr ""
"particularmente atraente para aplicativos embarcados."
#. type: Title ===
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:185
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:206
#, no-wrap
msgid "What else should I know?"
msgstr "O que mais eu deveria saber?"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:190
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:211
msgid ""
"Since fewer applications are available for BSD than Linux, the BSD "
"developers created a Linux compatibility package, which allows Linux "
"programs to run under BSD. The package includes both kernel modifications, "
-"in order to correctly perform Linux system calls, and Linux compatibility "
-"files such as the C library. There is no noticeable difference in execution "
-"speed between a Linux application running on a Linux machine and a Linux "
+"to correctly perform Linux system calls, and Linux compatibility files such "
+"as the C library. There is no noticeable difference in execution speed "
+"between a Linux application running on a Linux machine and a Linux "
"application running on a BSD machine of the same speed."
msgstr ""
-"Como menos aplicativos estão disponíveis para o BSD do que para o Linux, os "
-"desenvolvedores do BSD criaram um pacote de compatibilidade com o Linux, o "
-"qual permite que os programas Linux sejam executados sob o BSD. O pacote "
-"inclui tanto as modificações do kernel, necessárias para executar "
-"corretamente as chamadas do sistema Linux e quanto os arquivos de "
-"compatibilidade do Linux, como a biblioteca C. Não há diferença perceptível "
-"na velocidade de execução entre um aplicativo Linux em execução em uma "
-"máquina Linux nativa e um aplicativo Linux em execução em uma máquina BSD, "
-"contanto que ambas tenham o mesmo hardware."
+"Uma vez que há menos aplicativos disponíveis para o BSD em comparação ao "
+"Linux, os desenvolvedores do BSD criaram um pacote de compatibilidade com o "
+"Linux, que permite que programas do Linux sejam executados no BSD. Esse "
+"pacote inclui modificações no kernel para realizar corretamente chamadas de "
+"sistema do Linux, além de arquivos de compatibilidade do Linux, como a "
+"biblioteca C. Não há diferença perceptível na velocidade de execução entre "
+"um aplicativo do Linux rodando em uma máquina Linux e um aplicativo do Linux "
+"rodando em uma máquina BSD de mesma velocidade."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:193
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:214
msgid ""
"The \"all from one supplier\" nature of BSD means that upgrades are much "
"easier to handle than is frequently the case with Linux. BSD handles "
@@ -857,13 +858,13 @@ msgstr ""
"binários bastante antigos sem problemas."
#. type: Title ===
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:194
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:215
#, no-wrap
msgid "Which should I use, BSD or Linux?"
msgstr "Qual devo usar, BSD ou Linux?"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:197
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:218
msgid ""
"What does this all mean in practice? Who should use BSD, who should use "
"Linux?"
@@ -872,14 +873,14 @@ msgstr ""
"Linux?"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:200
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:221
msgid "This is a very difficult question to answer. Here are some guidelines:"
msgstr ""
"Esta é uma pergunta muito difícil de responder. Aqui estão algumas "
"diretrizes:"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:202
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:223
msgid ""
"\"If it ain't broke, don't fix it\": If you already use an open source "
"operating system, and you are happy with it, there is probably no good "
@@ -890,7 +891,7 @@ msgstr ""
"nenhuma razão para mudar."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:203
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:224
msgid ""
"BSD systems, in particular FreeBSD, can have notably higher performance than "
"Linux. But this is not across the board. In many cases, there is little or "
@@ -903,7 +904,7 @@ msgstr ""
"casos, o Linux pode ter um desempenho melhor que o FreeBSD."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:204
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:225
msgid ""
"In general, BSD systems have a better reputation for reliability, mainly as "
"a result of the more mature code base."
@@ -913,7 +914,7 @@ msgstr ""
"madura."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:205
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:226
msgid ""
"BSD projects have a better reputation for the quality and completeness of "
"their documentation. The various documentation projects aim to provide "
@@ -926,12 +927,12 @@ msgstr ""
"idiomas, e que cobre todos os aspectos do sistema."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:206
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:227
msgid "The BSD license may be more attractive than the GPL."
msgstr "A licença BSD pode ser mais atraente que a GPL."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:207
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:228
msgid ""
"BSD can execute most Linux binaries, while Linux can not execute BSD "
"binaries. Many BSD implementations can also execute binaries from other "
@@ -945,13 +946,13 @@ msgstr ""
"para o Linux."
#. type: Title ===
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:208
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:229
#, no-wrap
msgid "Who provides support, service, and training for BSD?"
msgstr "Quem fornece suporte, serviços e treinamento para o BSD?"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:211
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:232
msgid ""
"BSDi / http://www.freebsdmall.com[FreeBSD Mall, Inc.] have been providing "
"support contracts for FreeBSD for nearly a decade."
@@ -960,7 +961,7 @@ msgstr ""
"suporte para o FreeBSD já há quase uma década."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:212
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:233
msgid ""
"In addition, each of the projects has a list of consultants for hire: link:"
"https://www.FreeBSD.org/commercial/consult_bycat/[FreeBSD], http://www."
@@ -971,3 +972,12 @@ msgstr ""
"consultores disponíveis para contratação: link:www.FreeBSD.org/commercial/"
"consult_bycat/[FreeBSD], http://www.netbsd.org/gallery/consultants."
"html[NetBSD], e http://www.openbsd.org/support.html[OpenBSD]."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/filtering-bridges/_index.adoc b/documentation/content/pt-br/articles/filtering-bridges/_index.adoc
index 4b1b4755c1..672aa8049c 100644
--- a/documentation/content/pt-br/articles/filtering-bridges/_index.adoc
+++ b/documentation/content/pt-br/articles/filtering-bridges/_index.adoc
@@ -1,8 +1,11 @@
---
-title: Pontes de Filtragem (Filtering Bridges)
authors:
- - author: Alex Dupre
+ -
+ author: 'Alex Dupre'
email: ale@FreeBSD.org
+description: 'Configurando firewalls e filtros em hosts FreeBSD que atuam como bridges em vez de roteadores'
+tags: ["network", "filtering", "bridges", "FreeBSD"]
+title: 'Pontes de Filtragem (Filtering Bridges)'
trademarks: ["freebsd", "3com", "intel", "general"]
---
@@ -40,9 +43,9 @@ endif::[]
[.abstract-title]
Resumo
-Geralmente, é útil dividir uma rede física (como uma Ethernet) em dois segmentos separados, sem precisar criar sub-redes, e usar um roteador para vinculá-los. O dispositivo que conecta as duas redes dessa maneira é chamado de ponte (bridge). Um sistema FreeBSD com duas interfaces de rede é suficiente para atuar como uma ponte.
+Muitas vezes é útil dividir uma rede física (como uma Ethernet) em dois segmentos separados sem precisar criar sub-redes e usar um roteador para conectá-los. O dispositivo que conecta as duas redes dessa forma é chamado de bridge. Um sistema FreeBSD com duas interfaces de rede é suficiente para atuar como uma ponte.
-Uma ponte funciona examinando os endereços do nível MAC (endereços Ethernet) dos dispositivos conectados a cada uma de suas interfaces de rede e encaminhando o tráfego entre as duas redes apenas se a origem e o destino estiverem em diferentes segmentos. Sob muitos pontos de vista, uma ponte é semelhante a um switch Ethernet com apenas duas portas.
+Uma bridge funciona analisando os endereços de nível MAC (endereços Ethernet) dos dispositivos conectados a cada uma de suas interfaces de rede e, em seguida, encaminhando o tráfego entre as duas redes apenas se a origem e o destino estiverem em segmentos diferentes. Em muitos aspectos, um bridge é semelhante a um switch Ethernet com apenas duas portas.
'''
@@ -51,26 +54,26 @@ toc::[]
[[filtering-bridges-why]]
== Por que usar uma ponte de filtragem?
-Cada vez mais frequentemente, graças aos custos reduzidos de conexões de banda larga à Internet (xDSL) e também devido à redução de endereços IPv4 disponíveis, muitas empresas estão conectadas à Internet 24 horas por dia e com poucos (às vezes nem mesmo 2) endereços IP. Nestas situações, geralmente é desejável ter um firewall que filtre o tráfego de entrada e de saída de e para a Internet, mas uma solução de filtragem de pacotes baseada em roteador pode não ser aplicável, quer seja devido a problemas de sub-redes, quer seja porque o roteador é de propriedade do provedor de conectividade (ISP), ou porque ele não suporta tais funcionalidades. Nestes cenários, o uso de uma ponte de filtragem é altamente recomendado.
+Cada vez mais frequentemente, graças à redução nos custos das conexões de banda larga à Internet (xDSL) e também devido à redução dos endereços IPv4 disponíveis, muitas empresas estão conectadas à Internet 24 horas por dia e com poucos (às vezes nem mesmo 2) endereços IP. Nestas situações, muitas vezes é desejável ter um firewall que filtre o tráfego de entrada e saída da Internet, mas uma solução de filtragem de pacotes baseada em roteador pode não ser aplicável, seja devido a problemas de sub-rede, o roteador pertence ao provedor de conectividade (ISP), ou porque não suporta tais funcionalidades. Nestes cenários, é altamente recomendável o uso de uma ponte de filtragem (filtering bridge).
-Um firewall baseado em uma ponte de filtragem pode ser configurado e inserido entre o roteador xDSL e seu hub/switch Ethernet sem causar nenhum problema de numeração IP.
+Um firewall baseado em bridge pode ser configurado e inserido entre o roteador xDSL e seu hub/switch Ethernet sem problemas de numeração IP.
[[filtering-bridges-how]]
-== Como instalar
+== Como Instalar
Adicionar funcionalidades de bridge a um sistema FreeBSD não é difícil. Desde a versão 4.5 é possível carregar tais funcionalidades como módulos ao invés de ter que reconstruir o kernel, simplificando bastante o procedimento. Nas subseções seguintes, explicarei as duas formas de instalação.
[IMPORTANT]
====
-_Não_ siga as duas instruções: um procedimento _exclui_ o outro. Selecione a melhor opção de acordo com suas necessidades e habilidades.
+_Não siga_ ambas as instruções: um procedimento _exclui_ o outro. Selecione a melhor opção de acordo com suas necessidades e habilidades.
====
-Antes de continuar, certifique-se de ter pelo menos duas placas Ethernet compatíveis com o modo promíscuo para recepção e transmissão, pois elas devem ser capazes de enviar pacotes Ethernet com qualquer endereço, não apenas o deles. Além disso, para ter uma boa taxa de transferência, as placas devem ser placas do barramento PCI. As melhores opções ainda são as Intel EtherExpress(TM) Pro, seguido pela série 3Com(R) 3c9xx. Para simplificar a configuração do firewall, pode ser útil ter duas placas de diferentes fabricantes (usando drivers diferentes) para distinguir claramente qual interface está conectada ao roteador e qual está conectada à rede interna.
+Antes de continuar, certifique-se de ter pelo menos duas placas Ethernet que suportem o modo promíscuo tanto para recepção quanto para transmissão, uma vez que elas devem ser capazes de enviar pacotes Ethernet com qualquer endereço, não apenas o próprio. Além disso, para obter um bom desempenho, as placas devem ser placas de barramento PCI master. As melhores opções ainda são as placas Intel EtherExpress(TM) Pro, seguidas pela série 3Com(R) 3c9xx. Para simplificar a configuração do firewall, pode ser útil ter duas placas de fabricantes diferentes (usando drivers diferentes) para distinguir claramente qual interface está conectada ao roteador e qual está na rede interna.
[[filtering-bridges-kernel]]
=== Configuração do Kernel
-Então você decidiu usar o método de instalação mais antigo, e também o mais bem testado. Para começar, você precisa adicionar as seguintes linhas ao seu arquivo de configuração do kernel:
+Então você decidiu usar o método de instalação mais antigo, mas bem testado. Para começar, você precisa adicionar as seguintes linhas ao seu arquivo de configuração do kernel:
[.programlisting]
....
@@ -79,26 +82,26 @@ options IPFIREWALL
options IPFIREWALL_VERBOSE
....
-A primeira linha adiciona o suporte para o serviço de ponte (bridge), a segunda adiciona o suporte ao firewall e a terceira é referente as funções de registro do firewall.
+A primeira linha é para compilar o suporte à bridge, a segunda é para o firewall e a terceira é para as funções de registro do firewall.
-Agora é necessário compilar e instalar o novo kernel. Você pode encontrar instruções detalhadas na seção extref:{handbook}kernelconfig/[Compilando e Instalando um Kernel Personalizado, kernelconfig-building] do Handbook do FreeBSD.
+Agora é necessário compilar e instalar o novo kernel. Instruções detalhadas podem ser encontradas na seção extref:{handbook}[Compilação e Instalação de um Kernel Personalizado, kernelconfig-building] do FreeBSD Handbook.
[[filtering-bridges-modules]]
-=== Carregamento de módulos
+=== Carregamento de Módulos
-Se você escolheu usar o método de instalação mais novo e mais simples, a única coisa a fazer agora é adicionar a seguinte linha ao [.filename]#/boot/loader.conf#:
+Se você escolheu usar o novo e mais simples método de instalação, a única coisa a fazer agora é adicionar a seguinte linha ao [.filename]#/boot/loader.conf#:
[.programlisting]
....
bridge_load="YES"
....
-Desta forma, durante a inicialização do sistema, o módulo [.filename]#bridge.ko# será carregado junto com o kernel. Não é necessário adicionar uma linha semelhante para o módulo [.filename]#ipfw.ko#, pois ele será carregado automaticamente após a execução das etapas na seção a seguir.
+Dessa forma, durante a inicialização do sistema, o módulo [.filename]#bridge.ko# será carregado juntamente com o kernel. Não é necessário adicionar uma linha semelhante para o módulo [.filename]#ipfw.ko#, pois ele será carregado automaticamente após a execução das etapas na seção seguinte.
[[filtering-bridges-finalprep]]
-== Preparação final
+== Preparação Final
-Antes de reinicializar para carregar o novo kernel ou os módulos requeridos (de acordo com o método de instalação escolhido anteriormente), você deve fazer algumas alterações no arquivo de configuração [.filename]#/etc/rc.conf#. A regra padrão do firewall é rejeitar todos os pacotes IP. Inicialmente vamos configurar um firewall `open` (aberto), a fim de verificar sua operação sem qualquer problema relacionado à filtragem de pacotes (no caso de você executar este procedimento remotamente, tal configuração evitará que você permaneça isolado da rede). Coloque estas linhas no [.filename]#/etc/rc.conf#:
+Antes de reiniciar para carregar o novo kernel ou os módulos necessários (de acordo com o método de instalação escolhido anteriormente), você deve fazer algumas alterações no arquivo de configuração [.filename]#/etc/rc.conf#. A regra padrão do firewall é rejeitar todos os pacotes IP. Inicialmente, configuraremos um firewall `open`, para verificar sua operação sem problemas relacionados à filtragem de pacotes (caso você esteja executando este procedimento remotamente, essa configuração evitará que você fique isolado da rede). Adicione estas linhas em [.filename]#/etc/rc.conf#:
[.programlisting]
....
@@ -108,45 +111,40 @@ firewall_quiet="YES"
firewall_logging="YES"
....
-A primeira linha ativará o firewall (e carregará o módulo [.filename]#ipfw.ko# se ele não estiver compilado no kernel), a segunda irá configurá-lo no modo `open` (como explicado em [.filename]#/etc/rc.firewall#), a terceira para não mostrar o carregamento de regras e a quarta para ativar o suporte aos logs.
+A primeira linha ativará o firewall (e carregará o módulo [.filename]#ipfw.ko# caso não esteja compilado no kernel), a segunda configurará o firewall no modo `open` (conforme explicado em [.filename]#/etc/rc.firewall#), a terceira linha não exibirá o carregamento de regras e a quarta linha ativará o suporte a registro de logs.
-Sobre a configuração das interfaces de rede, a maneira mais usada é atribuir um IP a apenas uma das placas de rede, mas a ponte funcionará igualmente, mesmo que ambas as interfaces ou nenhuma tenha um IP configurado. No último caso (IP-less) a máquina bridge ficará ainda mais oculta, e também inacessível pela rede: para configurá-la será necessário efetuar o login a partir do console ou através de uma terceira interface de rede separada da ponte. Às vezes, durante a inicialização do sistema, alguns programas exigem acesso à rede, digamos, para resolução de nomes de domínio: neste caso, é necessário atribuir um IP à interface externa (aquela conectada à Internet, onde o servidor DNS se encontra), uma vez que a ponte será ativada no final do procedimento de inicialização. Isso significa que a interface [.filename]#fxp0# (no nosso caso) deve ser mencionada na seção ifconfig do arquivo [.filename]#/etc/rc.conf#, enquanto o [.filename]#xl0# não é. Atribuir um IP a ambas as placas de rede não faz muito sentido, a menos que, durante o procedimento de inicialização, os aplicativos acessem os serviços em ambos os segmentos de Ethernet.
+Sobre a configuração das interfaces de rede, o modo mais comum é atribuir um endereço IP a apenas uma das placas de rede, mas a ponte funcionará igualmente mesmo que ambas as interfaces ou nenhuma tenha um endereço IP configurado. No último caso (sem IP), a máquina da ponte ainda será mais oculta e inacessível pela rede: para configurá-la, é necessário fazer login pelo console ou por meio de uma terceira interface de rede separada da bridge. Às vezes, durante a inicialização do sistema, alguns programas exigem acesso à rede, por exemplo, para resolução de domínio: nesse caso, é necessário atribuir um endereço IP à interface externa (a que está conectada à Internet, onde o servidor DNS reside), pois a bridge será ativada no final do procedimento de inicialização. Isso significa que a interface [.filename]#fxp0# (no nosso caso) deve ser mencionada na seção ifconfig do arquivo [.filename]#/etc/rc.conf#, enquanto a [.filename]#xl0# não. Atribuir um endereço IP a ambas as placas de rede não faz muito sentido, a menos que, durante o procedimento de inicialização, aplicativos precisem acessar serviços em ambos os segmentos Ethernet.
-Há outra coisa importante a saber. Ao executar o IP sobre Ethernet, existem dois protocolos Ethernet em uso: um é o IP, o outro é o ARP. O ARP faz a conversão do endereço IP de um host em seu endereço Ethernet (camada MAC). Para permitir a comunicação entre dois hosts separados pela ponte, é necessário que a ponte envie pacotes ARP. Esse protocolo não está incluído na camada IP, uma vez que ele existe apenas com IP sobre Ethernet. O firewall do FreeBSD filtra exclusivamente na camada IP e, portanto, todos os pacotes não-IP (ARP incluso) serão encaminhados sem serem filtrados, mesmo que o firewall esteja configurado para não permitir nada.
+Uma outra coisa importante a se saber é que, ao executar IP sobre Ethernet, existem na verdade dois protocolos Ethernet em uso: um é o IP e o outro é o ARP. ARP faz a conversão do endereço IP de um host em seu endereço Ethernet (camada MAC). Para permitir a comunicação entre dois hosts separados pela bridge, é necessário que a bridge encaminhe pacotes ARP. Esse protocolo não está incluído na camada IP, uma vez que ele existe apenas com IP sobre Ethernet. O firewall do FreeBSD filtra exclusivamente na camada IP e, portanto, todos os pacotes não-IP (incluindo ARP) serão encaminhados sem serem filtrados, mesmo se o firewall estiver configurado para não permitir nada.
-Agora é hora de reiniciar o sistema e usá-lo como antes: haverá algumas novas mensagens sobre a ponte e o firewall, mas a ponte não será ativada e o firewall, estando no modo `open`, não evitará operações.
+Agora é hora de reiniciar o sistema e usá-lo como antes: haverá algumas novas mensagens sobre a bridge e o firewall, mas a bridge não será ativada e o firewall, estando no modo `aberto` , não evitará nenhuma operação.
Se houver algum problema, você deve resolvê-los agora antes de prosseguir.
[[filtering-bridges-enabling]]
-== Habilitando a ponte
+== Habilitando a Bridge
-Neste ponto, para habilitar a ponte, você tem que executar os seguintes comandos (tendo a perspicácia para substituir os nomes das duas interfaces de rede [.filename]#fxp0# e [.filename]#xl0# com as suas próprias):
+Neste ponto, para habilitar a ponte, você tem que executar os seguintes comandos (tendo a perspicácia para substituir os nomes das duas interfaces de rede [.filename]#fxp0# e [.filename]#xl0# with your own ones) com as suas próprias):
-[source,shell]
+[source, shell]
....
# sysctl net.link.ether.bridge.config=fxp0:0,xl0:0
# sysctl net.link.ether.bridge.ipfw=1
# sysctl net.link.ether.bridge.enable=1
....
-A primeira linha especifica quais interfaces devem ser ativadas pela ponte, a segunda habilitará o firewall na ponte e, finalmente, a terceira habilitará a ponte.
+A primeira linha especifica quais interfaces devem ser ativadas pela bridge, a segunda irá habilitar o firewall na bridge e, finalmente, a terceira irá habilitar a bridge.
-[NOTE]
-====
-Se você tem o FreeBSD 5.1-RELEASE ou anterior, as variáveis do sysctl são escritas de forma diferente. Veja man:bridge[4] para detalhes.
-====
-
-Neste ponto você deve ser capaz de inserir a máquina entre dois conjuntos de hosts sem comprometer quaisquer habilidades de comunicação entre eles. Em caso afirmativo, o próximo passo é adicionar as partes `net.link.ether.bridge._[blah]_=_[blah]_` dessas linhas ao arquivo [.filename]#/etc/sysctl.conf#, para que eles sejam executados na inicialização.
+Neste ponto, você deverá ser capaz de inserir a máquina entre dois conjuntos de hosts sem comprometer as habilidades de comunicação entre eles. Se sim, o próximo passo é adicionar as partes `net.link.ether.bridge._[blah]_=_[blah]_` dessas linhas ao arquivo [.filename]#/etc/sysctl.conf#, para que elas sejam executadas na inicialização.
[[filtering-bridges-ipfirewall]]
== Configurando o Firewall
-Agora é hora de criar seu próprio arquivo com regras de firewall personalizadas, a fim de proteger a rede interna. Haverá alguma complicação em fazer isso porque nem todas as funcionalidades do firewall estão disponíveis em pacotes em ponte. Além disso, há uma diferença entre os pacotes que estão sendo encaminhados e os pacotes que estão sendo recebidos pela máquina local. Em geral, os pacotes de entrada passam pelo firewall apenas uma vez, não duas vezes, como é normalmente o caso; na verdade eles são filtrados somente após o recebimento, portanto, as regras que usam `out` ou `xmit` nunca darão match. Pessoalmente, eu uso `in via` que é uma sintaxe antiga, mas uma que tem sentido quando você a lê. Outra limitação é que você está restrito a usar somente comandos `pass` ou `drop` para os pacotes filtrados por uma ponte. Coisas sofisticadas como `divert`, `forwar` ou `reject` não estão disponíveis. Essas opções ainda podem ser usadas, mas apenas no tráfego para ou a partir da própria máquina ponte (se ela tiver um endereço IP).
+Agora é hora de criar seu próprio arquivo com regras personalizadas de firewall, para proteger a rede interna. Haverá alguma complicação em fazer isso porque nem todas as funcionalidades do firewall estão disponíveis em pacotes encaminhados através de uma bridge. Além disso, há uma diferença entre os pacotes que estão em processo de encaminhamento e os pacotes que estão sendo recebidos pela máquina local. Em geral, os pacotes de entrada são filtrados apenas uma vez, não duas vezes como normalmente ocorre; de fato, eles são filtrados apenas no momento do recebimento, portanto, as regras que usam `out` ou `xmit` nunca darão match. Pessoalmente, eu uso `in via`, que é uma sintaxe mais antiga, mas que faz sentido quando você lê. Outra limitação é que você está restrito a usar apenas comandos `pass` ou `drop` para pacotes filtrados por uma ponte. Coisas sofisticadas como `divert`, `forward` ou `reject` não estão disponíveis. Tais opções ainda podem ser usadas, mas apenas no tráfego destinado ou originado na máquina que atua como bridge em si (se ela tiver um endereço IP).
-O conceito de filtragem stateful é novo no FreeBSD 4.0. Esta é uma grande melhoria para o tráfego UDP, que normalmente é um pedido que sai, seguido pouco depois por uma resposta com exatamente o mesmo conjunto de endereços IP e números de porta (mas com origem e destino invertidos, é claro). Para firewalls que não possuem manutenção de estado, quase não há como lidar com esse tipo de tráfego como uma sessão única. Mas com um firewall que pode "lembrar" de um pacote UDP de saída e, nos próximos minutos, permitir uma resposta, o manuseio de serviços UDP é trivial. O exemplo a seguir mostra como fazer isso. É possível fazer a mesma coisa com pacotes TCP. Isso permite que você evite alguns ataques de negação de serviço e outros truques desagradáveis, mas também faz com que sua tabela de estado cresça rapidamente em tamanho.
+O conceito de filtragem stateful é novo no FreeBSD 4.0. Esta é uma grande melhoria para o tráfego UDP, que geralmente é uma solicitação que sai, seguida logo depois por uma resposta com o mesmo conjunto de endereços IP e portas (mas com origem e destino invertidos, é claro). Para firewalls que não têm o controle de estado, quase não há como lidar com esse tipo de tráfego como uma sessão única. Mas com um firewall que pode "lembrar" de um pacote UDP de saída e, nos próximos minutos, permitir uma resposta, lidar com serviços UDP é trivial. O exemplo a seguir mostra como fazer isso. É possível fazer a mesma coisa com pacotes TCP. Isso permite evitar alguns ataques de negação de serviço e outros truques desagradáveis, mas também faz com que a tabela de estado cresça rapidamente em tamanho.
-Vamos ver um exemplo de configuração. Note primeiro que no topo do [.filename]#/etc/rc.firewall# já existem regras padrão para a interface de loopback [.filename]#lo0#, então não devemos mais precisar delas. Regras customizadas devem ser colocadas em um arquivo separado (digamos, [.filename]#/etc/rc.firewall.local#) e carregadas na inicialização do sistema, modificando a linha de [.filename]#/etc/rc.conf# onde definimos o firewall `open`:
+Vamos dar uma olhada em um exemplo de configuração. Note primeiro que no início de [.filename]#/etc/rc.firewall#, já existem regras padrão para a interface de loopback [.filename]#lo0#, então não precisamos mais nos preocupar com elas. As regras personalizadas devem ser colocadas em um arquivo separado (digamos [.filename]#/etc/rc.firewall.local#) e carregadas na inicialização do sistema, modificando a linha de [.filename]#/etc/rc.conf# onde definimos o firewall `open`:
[.programlisting]
....
@@ -155,10 +153,10 @@ firewall_type="/etc/rc.firewall.local"
[IMPORTANT]
====
-Você tem que especificar o caminho __completo__, caso contrário ele não será carregado com o risco de permanecer isolado da rede.
+Você tem que especificar o _caminho completo_, caso contrário ele não será carregado com o risco de permanecer isolado da rede.
====
-Para nosso exemplo, imagine ter a interface [.filename]#fxp0# conectada para o exterior (Internet) e a [.filename]#xl0# para o interior (LAN). A máquina ponte tem o IP `1.2.3.4` (não é possível que o seu ISP possa lhe dar um endereço assim, mas para nosso exemplo ele é bom).
+Para o nosso exemplo, imagine ter a interface [.filename]#fxp0# conectada ao exterior (Internet) e a [.filename]#xl0# ao interior (LAN). A máquina bridge tem o IP `1.2.3.4` (não é possível que o seu provedor de serviços de Internet possa lhe fornecer um endereço exatamente como este, mas para o nosso exemplo é suficiente).
[.programlisting]
....
@@ -186,7 +184,7 @@ add pass ip from any to any in via xl0
add pass tcp from any to any 22 in via fxp0 setup keep-state
# Allow SMTP only towards the mail server
add pass tcp from any to relay 25 in via fxp0 setup keep-state
-# Allow zone transfers only by the slave name server [dns2.nic.it]
+# Allow zone transfers only by the secondary name server [dns2.nic.it]
add pass tcp from 193.205.245.8 to ns 53 in via fxp0 setup keep-state
# Pass ident probes. It is better than waiting for them to timeout
add pass tcp from any to any 113 in via fxp0 setup keep-state
@@ -210,27 +208,27 @@ add pass icmp from any to any icmptypes 11
add drop log all from any to any
....
-Aqueles de vocês que já configuraram firewalls antes podem notar algumas coisas que estão faltando. Em particular, não há regras anti-spoofing, na verdade nós _não_ adicionamos:
+Aqueles que já configuraram firewalls antes podem notar que algumas coisas estão faltando. Em particular, não há regras anti-spoofing, na verdade, _não_ adicionamos:
[.programlisting]
....
add deny all from 1.2.3.4/8 to any in via fxp0
....
-Ou seja, dropar os pacotes que estão vindo do lado de fora dizendo ser da nossa rede. Isso é algo que você normalmente faria para ter certeza de que alguém não tentaria escapar do filtro de pacotes, gerando pacotes nefastos que parecem ser de dentro. O problema é que existe _pelo menos_ um host na interface externa que você não deseja ignorar: o roteador. Mas geralmente ISP tem anti-spoofs em seu roteador, então não precisamos nos incomodar muito.
+Isso significa descartar pacotes que estão chegando de fora e alegam ser da nossa rede. Isso é algo que normalmente se faz para garantir que alguém não tente evadir o filtro de pacotes, gerando pacotes maliciosos que parecem ser provenientes de dentro da rede. O problema é que há _pelo menos_ um host na interface externa que você não deseja ignorar: o roteador. Mas geralmente, o ISP faz o anti-spoofing em seu roteador, então não precisamos nos preocupar tanto com isso.
A última regra parece ser uma duplicata exata da regra padrão, ou seja, não deixa passar nada que não seja especificamente permitido. Mas há uma diferença: todo tráfego suspeito será registrado.
-Existem duas regras para passar o tráfego SMTP e o do DNS para o servidor de e-mail e o servidor de nomes, se você os tiver. Obviamente, todo o conjunto de regras deve ser definido de acordo com as suas preferências pessoais, isso é apenas um exemplo específico (o formato da regra é descrito com precisão na página de manual do man:ipfw[8]). Note que, para que o "relay" e o "ns" funcionem, as pesquisas de serviço de nomes devem funcionar _antes_ da ponte ser ativada. Este é um exemplo de quando você precisa ter certeza de que definiu o IP na placa de rede correta. Como alternativa, é possível especificar o endereço IP em vez do nome do host (necessário se a máquina não tiver IP).
+Existem duas regras para permitir o tráfego SMTP e DNS direcionado ao servidor de e-mail e servidor de nomes, se você tiver esses servidores. Obviamente, todo o conjunto de regras deve ser personalizado de acordo com as preferências pessoais, este é apenas um exemplo específico (o formato da regra é descrito com precisão na página do manual man:ipfw[8]). Observe que, para o "relay" e o "ns" funcionarem, as consultas ao serviço de nomes devem funcionar _antes_ de habilitar a ponte. Isto é um exemplo para garantir que você configure o IP no cartão de rede correto. Alternativamente, é possível especificar o endereço IP em vez do nome do host (obrigatório se a máquina não possuir um IP).
-As pessoas que estão acostumadas a configurar firewalls provavelmente também estão acostumadas a ter uma regra `reset` ou `forward` para pacotes ident (TCP porta 113). Infelizmente, esta não é uma opção aplicável com a ponte, então o melhor é simplesmente passá-las ao seu destino. Enquanto essa máquina de destino não estiver executando um daemon ident, isso é relativamente inofensivo. A alternativa é descartar as conexões na porta 113, o que criará alguns problemas com serviços como por exemplo o IRC (o probe do ident irá dar timeout).
+Pessoas acostumadas a configurar firewalls provavelmente também estão acostumadas a ter uma regra de `reset` ou `forward` para pacotes ident (porta TCP 113). Infelizmente, essa não é uma opção aplicável com a bridge, então a melhor coisa a fazer é simplesmente passá-los para o destino. Contanto que a máquina de destino não esteja executando um ident daemon, isso é relativamente inofensivo. A alternativa é descartar conexões na porta 113, o que cria alguns problemas com serviços como IRC (a sondagem ident deve expirar).
-A única outra coisa que é um pouco estranha e que você pode ter notado é que existe uma regra para deixar a máquina ponte falar, e outra para os hosts internos. Lembre-se que isso ocorre porque os dois conjuntos de tráfego terão caminhos diferentes através do kernel e do filtro de pacotes. A rede interna passará pela ponte, enquanto a máquina local usará a pilha IP normal para falar. Assim, as duas regras lidam com casos diferentes. As regras `in via fxp0` funcionam nos dois caminhos. Em geral, se você usar as regras `in via` em todo o filtro, precisará abrir uma exceção para pacotes gerados localmente, porque eles não vieram em nenhuma de nossas interfaces.
+A única outra coisa um pouco estranha que você pode ter notado é que há uma regra para permitir que a máquina da bridge fale, e outra para os hosts internos. Lembre-se de que isso ocorre porque os dois conjuntos de tráfego seguirão caminhos diferentes através do kernel e do filtro de pacotes. A rede interna passará pela ponte, enquanto a máquina local usará o stack de IP normal para falar. Portando, existem duas regras para lidar com os casos diferentes. As regras `in via fxp0` funcionam para ambos os caminhos. Em geral, se você usar regras `in via` em todo o filtro, precisará fazer uma exceção para pacotes gerados localmente, porque eles não entraram por nenhuma de nossas interfaces.
[[filtering-bridges-contributors]]
== Colaboradores
-Muitas partes deste artigo foram tiradas, atualizadas e adaptadas de um texto antigo sobre pontes, editado por Nick Sayer. Um par de inspirações deve-se a uma introdução sobre pontes de Steve Peterson.
+Muitas partes deste artigo foram retiradas, atualizadas e adaptadas de um antigo texto sobre bridges, editado por Nick Sayer. E um par de inspirações vieram de uma introdução sobre bridges de autoria de Steve Peterson.
Um grande obrigado ao Luigi Rizzo pela implementação do código de ponte (bridge) no FreeBSD e pelo tempo que ele dedicou a mim respondendo a todas as minhas perguntas relacionadas.
diff --git a/documentation/content/pt-br/articles/filtering-bridges/_index.po b/documentation/content/pt-br/articles/filtering-bridges/_index.po
new file mode 100644
index 0000000000..81c9a26f22
--- /dev/null
+++ b/documentation/content/pt-br/articles/filtering-bridges/_index.po
@@ -0,0 +1,842 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-05-21 14:43-0300\n"
+"PO-Revision-Date: 2023-05-27 21:40+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesfiltering-bridges_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:1
+#, no-wrap
+msgid "Configuring firewalls and filtering on FreeBSD hosts acting as bridges rather than routers"
+msgstr "Configurando firewalls e filtros em hosts FreeBSD que atuam como bridges em vez de roteadores"
+
+#. type: Title =
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:1
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:11
+#, no-wrap
+msgid "Filtering Bridges"
+msgstr "Pontes de Filtragem (Filtering Bridges)"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:48
+msgid ""
+"Often it is useful to divide one physical network (like an Ethernet) into "
+"two separate segments without having to create subnets, and use a router to "
+"link them together. The device that connects the two networks in this way "
+"is called a bridge. A FreeBSD system with two network interfaces is enough "
+"to act as a bridge."
+msgstr ""
+"Muitas vezes é útil dividir uma rede física (como uma Ethernet) em dois "
+"segmentos separados sem precisar criar sub-redes e usar um roteador para "
+"conectá-los. O dispositivo que conecta as duas redes dessa forma é chamado "
+"de bridge. Um sistema FreeBSD com duas interfaces de rede é suficiente para "
+"atuar como uma ponte."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:51
+msgid ""
+"A bridge works by scanning the addresses of MAC level (Ethernet addresses) "
+"of the devices connected to each of its network interfaces and then "
+"forwarding the traffic between the two networks only if the source and the "
+"destination are on different segments. Under many points of view a bridge "
+"is similar to an Ethernet switch with only two ports."
+msgstr ""
+"Uma bridge funciona analisando os endereços de nível MAC (endereços "
+"Ethernet) dos dispositivos conectados a cada uma de suas interfaces de rede "
+"e, em seguida, encaminhando o tráfego entre as duas redes apenas se a origem "
+"e o destino estiverem em segmentos diferentes. Em muitos aspectos, um bridge "
+"é semelhante a um switch Ethernet com apenas duas portas."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:53
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:57
+#, no-wrap
+msgid "Why use a filtering bridge?"
+msgstr "Por que usar uma ponte de filtragem?"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:62
+msgid ""
+"More and more frequently, thanks to the lowering costs of broad band "
+"Internet connections (xDSL) and also because of the reduction of available "
+"IPv4 addresses, many companies are connected to the Internet 24 hours on 24 "
+"and with few (sometimes not even a power of 2) IP addresses. In these "
+"situations it is often desirable to have a firewall that filters incoming "
+"and outgoing traffic from and towards Internet, but a packet filtering "
+"solution based on router may not be applicable, either due to subnetting "
+"issues, the router is owned by the connectivity supplier (ISP), or because "
+"it does not support such functionalities. In these scenarios the use of a "
+"filtering bridge is highly advised."
+msgstr ""
+"Cada vez mais frequentemente, graças à redução nos custos das conexões de "
+"banda larga à Internet (xDSL) e também devido à redução dos endereços IPv4 "
+"disponíveis, muitas empresas estão conectadas à Internet 24 horas por dia e "
+"com poucos (às vezes nem mesmo 2) endereços IP. Nestas situações, muitas "
+"vezes é desejável ter um firewall que filtre o tráfego de entrada e saída da "
+"Internet, mas uma solução de filtragem de pacotes baseada em roteador pode "
+"não ser aplicável, seja devido a problemas de sub-rede, o roteador pertence "
+"ao provedor de conectividade (ISP), ou porque não suporta tais "
+"funcionalidades. Nestes cenários, é altamente recomendável o uso de uma "
+"ponte de filtragem (filtering bridge)."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:64
+msgid ""
+"A bridge-based firewall can be configured and inserted between the xDSL "
+"router and your Ethernet hub/switch without any IP numbering issues."
+msgstr ""
+"Um firewall baseado em bridge pode ser configurado e inserido entre o "
+"roteador xDSL e seu hub/switch Ethernet sem problemas de numeração IP."
+
+#. type: Title ==
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:66
+#, no-wrap
+msgid "How to Install"
+msgstr "Como Instalar"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:71
+msgid ""
+"Adding bridge functionalities to a FreeBSD system is not difficult. Since "
+"4.5 release it is possible to load such functionalities as modules instead "
+"of having to rebuild the kernel, simplifying the procedure a great deal. In "
+"the following subsections I will explain both installation ways."
+msgstr ""
+"Adicionar funcionalidades de bridge a um sistema FreeBSD não é difícil. "
+"Desde a versão 4.5 é possível carregar tais funcionalidades como módulos ao "
+"invés de ter que reconstruir o kernel, simplificando bastante o "
+"procedimento. Nas subseções seguintes, explicarei as duas formas de "
+"instalação."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:76
+msgid ""
+"_Do not_ follow both instructions: a procedure _excludes_ the other one. "
+"Select the best choice according to your needs and abilities."
+msgstr ""
+"_Não siga_ ambas as instruções: um procedimento _exclui_ o outro. Selecione "
+"a melhor opção de acordo com suas necessidades e habilidades."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:82
+msgid ""
+"Before going on, be sure to have at least two Ethernet cards that support "
+"the promiscuous mode for both reception and transmission, since they must be "
+"able to send Ethernet packets with any address, not just their own. "
+"Moreover, to have a good throughput, the cards should be PCI bus mastering "
+"cards. The best choices are still the Intel EtherExpress(TM) Pro, followed "
+"by the 3Com(R) 3c9xx series. To simplify the firewall configuration it may "
+"be useful to have two cards of different manufacturers (using different "
+"drivers) to distinguish clearly which interface is connected to the router "
+"and which to the inner network."
+msgstr ""
+"Antes de continuar, certifique-se de ter pelo menos duas placas Ethernet que "
+"suportem o modo promíscuo tanto para recepção quanto para transmissão, uma "
+"vez que elas devem ser capazes de enviar pacotes Ethernet com qualquer "
+"endereço, não apenas o próprio. Além disso, para obter um bom desempenho, as "
+"placas devem ser placas de barramento PCI master. As melhores opções ainda "
+"são as placas Intel EtherExpress(TM) Pro, seguidas pela série 3Com(R) 3c9xx. "
+"Para simplificar a configuração do firewall, pode ser útil ter duas placas "
+"de fabricantes diferentes (usando drivers diferentes) para distinguir "
+"claramente qual interface está conectada ao roteador e qual está na rede "
+"interna."
+
+#. type: Title ===
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:84
+#, no-wrap
+msgid "Kernel Configuration"
+msgstr "Configuração do Kernel"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:88
+msgid ""
+"So you have decided to use the older but well tested installation method. "
+"To begin, you have to add the following rows to your kernel configuration "
+"file:"
+msgstr ""
+"Então você decidiu usar o método de instalação mais antigo, mas bem testado. "
+"Para começar, você precisa adicionar as seguintes linhas ao seu arquivo de "
+"configuração do kernel:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:94
+#, no-wrap
+msgid ""
+"options BRIDGE\n"
+"options IPFIREWALL\n"
+"options IPFIREWALL_VERBOSE\n"
+msgstr ""
+"options BRIDGE\n"
+"options IPFIREWALL\n"
+"options IPFIREWALL_VERBOSE\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:97
+msgid ""
+"The first line is to compile the bridge support, the second one is the "
+"firewall and the third one is the logging functions of the firewall."
+msgstr ""
+"A primeira linha é para compilar o suporte à bridge, a segunda é para o "
+"firewall e a terceira é para as funções de registro do firewall."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:100
+msgid ""
+"Now it is necessary to build and install the new kernel. You may find "
+"detailed instructions in the extref:{handbook}[Building and Installing a "
+"Custom Kernel, kernelconfig-building] section of the FreeBSD Handbook."
+msgstr ""
+"Agora é necessário compilar e instalar o novo kernel. Instruções detalhadas "
+"podem ser encontradas na seção extref:{handbook}[Compilação e Instalação de "
+"um Kernel Personalizado, kernelconfig-building] do FreeBSD Handbook."
+
+#. type: Title ===
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:102
+#, no-wrap
+msgid "Modules Loading"
+msgstr "Carregamento de Módulos"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:105
+msgid ""
+"If you have chosen to use the new and simpler installation method, the only "
+"thing to do now is add the following row to [.filename]#/boot/loader.conf#:"
+msgstr ""
+"Se você escolheu usar o novo e mais simples método de instalação, a única "
+"coisa a fazer agora é adicionar a seguinte linha ao [.filename]#/boot/loader."
+"conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:109
+#, no-wrap
+msgid "bridge_load=\"YES\"\n"
+msgstr "bridge_load=\"YES\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:113
+msgid ""
+"In this way, during the system startup, the [.filename]#bridge.ko# module "
+"will be loaded together with the kernel. It is not required to add a "
+"similar row for the [.filename]#ipfw.ko# module, since it will be loaded "
+"automatically after the execution of the steps in the following section."
+msgstr ""
+"Dessa forma, durante a inicialização do sistema, o módulo [.filename]#bridge."
+"ko# será carregado juntamente com o kernel. Não é necessário adicionar uma "
+"linha semelhante para o módulo [.filename]#ipfw.ko#, pois ele será carregado "
+"automaticamente após a execução das etapas na seção seguinte."
+
+#. type: Title ==
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:115
+#, no-wrap
+msgid "Final Preparation"
+msgstr "Preparação Final"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:121
+msgid ""
+"Before rebooting to load the new kernel or the required modules (according "
+"to the previously chosen installation method), you have to make some changes "
+"to the [.filename]#/etc/rc.conf# configuration file. The default rule of "
+"the firewall is to reject all IP packets. Initially we will set up an "
+"`open` firewall, to verify its operation without any issue related to packet "
+"filtering (in case you are going to execute this procedure remotely, such "
+"configuration will avoid you to remain isolated from the network). Put "
+"these lines in [.filename]#/etc/rc.conf#:"
+msgstr ""
+"Antes de reiniciar para carregar o novo kernel ou os módulos necessários (de "
+"acordo com o método de instalação escolhido anteriormente), você deve fazer "
+"algumas alterações no arquivo de configuração [.filename]#/etc/rc.conf#. A "
+"regra padrão do firewall é rejeitar todos os pacotes IP. Inicialmente, "
+"configuraremos um firewall `open`, para verificar sua operação sem problemas "
+"relacionados à filtragem de pacotes (caso você esteja executando este "
+"procedimento remotamente, essa configuração evitará que você fique isolado "
+"da rede). Adicione estas linhas em [.filename]#/etc/rc.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:128
+#, no-wrap
+msgid ""
+"firewall_enable=\"YES\"\n"
+"firewall_type=\"open\"\n"
+"firewall_quiet=\"YES\"\n"
+"firewall_logging=\"YES\"\n"
+msgstr ""
+"firewall_enable=\"YES\"\n"
+"firewall_type=\"open\"\n"
+"firewall_quiet=\"YES\"\n"
+"firewall_logging=\"YES\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:131
+msgid ""
+"The first row will enable the firewall (and will load the module [."
+"filename]#ipfw.ko# if it is not compiled in the kernel), the second one to "
+"set up it in `open` mode (as explained in [.filename]#/etc/rc.firewall#), "
+"the third one to not show rules loading and the fourth one to enable logging "
+"support."
+msgstr ""
+"A primeira linha ativará o firewall (e carregará o módulo [.filename]#ipfw."
+"ko# caso não esteja compilado no kernel), a segunda configurará o firewall "
+"no modo `open` (conforme explicado em [.filename]#/etc/rc.firewall#), a "
+"terceira linha não exibirá o carregamento de regras e a quarta linha ativará "
+"o suporte a registro de logs."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:137
+msgid ""
+"About the configuration of the network interfaces, the most used way is to "
+"assign an IP to only one of the network cards, but the bridge will work "
+"equally even if both interfaces or none has a configured IP. In the last "
+"case (IP-less) the bridge machine will be still more hidden, as inaccessible "
+"from the network: to configure it, you have to login from console or through "
+"a third network interface separated from the bridge. Sometimes, during the "
+"system startup, some programs require network access, say for domain "
+"resolution: in this case it is necessary to assign an IP to the external "
+"interface (the one connected to Internet, where DNS server resides), since "
+"the bridge will be activated at the end of the startup procedure. It means "
+"that the [.filename]#fxp0# interface (in our case) must be mentioned in the "
+"ifconfig section of the [.filename]#/etc/rc.conf# file, while the [."
+"filename]#xl0# is not. Assigning an IP to both the network cards does not "
+"make much sense, unless, during the start procedure, applications should "
+"access to services on both Ethernet segments."
+msgstr ""
+"Sobre a configuração das interfaces de rede, o modo mais comum é atribuir um "
+"endereço IP a apenas uma das placas de rede, mas a ponte funcionará "
+"igualmente mesmo que ambas as interfaces ou nenhuma tenha um endereço IP "
+"configurado. No último caso (sem IP), a máquina da ponte ainda será mais "
+"oculta e inacessível pela rede: para configurá-la, é necessário fazer login "
+"pelo console ou por meio de uma terceira interface de rede separada da "
+"bridge. Às vezes, durante a inicialização do sistema, alguns programas "
+"exigem acesso à rede, por exemplo, para resolução de domínio: nesse caso, é "
+"necessário atribuir um endereço IP à interface externa (a que está conectada "
+"à Internet, onde o servidor DNS reside), pois a bridge será ativada no final "
+"do procedimento de inicialização. Isso significa que a interface [."
+"filename]#fxp0# (no nosso caso) deve ser mencionada na seção ifconfig do "
+"arquivo [.filename]#/etc/rc.conf#, enquanto a [.filename]#xl0# não. Atribuir "
+"um endereço IP a ambas as placas de rede não faz muito sentido, a menos que, "
+"durante o procedimento de inicialização, aplicativos precisem acessar "
+"serviços em ambos os segmentos Ethernet."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:144
+msgid ""
+"There is another important thing to know. When running IP over Ethernet, "
+"there are actually two Ethernet protocols in use: one is IP, the other is "
+"ARP. ARP does the conversion of the IP address of a host into its Ethernet "
+"address (MAC layer). To allow the communication between two hosts separated "
+"by the bridge, it is necessary that the bridge will forward ARP packets. "
+"Such protocol is not included in the IP layer, since it exists only with IP "
+"over Ethernet. The FreeBSD firewall filters exclusively on the IP layer and "
+"therefore all non-IP packets (ARP included) will be forwarded without being "
+"filtered, even if the firewall is configured to not permit anything."
+msgstr ""
+"Uma outra coisa importante a se saber é que, ao executar IP sobre Ethernet, "
+"existem na verdade dois protocolos Ethernet em uso: um é o IP e o outro é o "
+"ARP. ARP faz a conversão do endereço IP de um host em seu endereço Ethernet ("
+"camada MAC). Para permitir a comunicação entre dois hosts separados pela "
+"bridge, é necessário que a bridge encaminhe pacotes ARP. Esse protocolo não "
+"está incluído na camada IP, uma vez que ele existe apenas com IP sobre "
+"Ethernet. O firewall do FreeBSD filtra exclusivamente na camada IP e, "
+"portanto, todos os pacotes não-IP (incluindo ARP) serão encaminhados sem "
+"serem filtrados, mesmo se o firewall estiver configurado para não permitir "
+"nada."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:146
+msgid ""
+"Now it is time to reboot the system and use it as before: there will be some "
+"new messages about the bridge and the firewall, but the bridge will not be "
+"activated and the firewall, being in `open` mode, will not avoid any "
+"operations."
+msgstr ""
+"Agora é hora de reiniciar o sistema e usá-lo como antes: haverá algumas "
+"novas mensagens sobre a bridge e o firewall, mas a bridge não será ativada e "
+"o firewall, estando no modo `aberto` , não evitará nenhuma operação."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:148
+msgid ""
+"If there are any problems, you should sort them out now before proceeding."
+msgstr ""
+"Se houver algum problema, você deve resolvê-los agora antes de prosseguir."
+
+#. type: Title ==
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:150
+#, no-wrap
+msgid "Enabling the Bridge"
+msgstr "Habilitando a Bridge"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:153
+msgid ""
+"At this point, to enable the bridge, you have to execute the following "
+"commands (having the shrewdness to replace the names of the two network "
+"interfaces [.filename]#fxp0# and [.filename]#xl0# with your own ones):"
+msgstr ""
+"Neste ponto, para habilitar a ponte, você tem que executar os seguintes "
+"comandos (tendo a perspicácia para substituir os nomes das duas interfaces "
+"de rede [.filename]#fxp0# e [.filename]#xl0# with your own ones) com as suas "
+"próprias):"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:159
+#, no-wrap
+msgid ""
+"# sysctl net.link.ether.bridge.config=fxp0:0,xl0:0\n"
+"# sysctl net.link.ether.bridge.ipfw=1\n"
+"# sysctl net.link.ether.bridge.enable=1\n"
+msgstr ""
+"# sysctl net.link.ether.bridge.config=fxp0:0,xl0:0\n"
+"# sysctl net.link.ether.bridge.ipfw=1\n"
+"# sysctl net.link.ether.bridge.enable=1\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:162
+msgid ""
+"The first row specifies which interfaces should be activated by the bridge, "
+"the second one will enable the firewall on the bridge and finally the third "
+"one will enable the bridge."
+msgstr ""
+"A primeira linha especifica quais interfaces devem ser ativadas pela bridge, "
+"a segunda irá habilitar o firewall na bridge e, finalmente, a terceira irá "
+"habilitar a bridge."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:165
+msgid ""
+"At this point you should be able to insert the machine between two sets of "
+"hosts without compromising any communication abilities between them. If so, "
+"the next step is to add the `net.link.ether.bridge._[blah]_=_[blah]_` "
+"portions of these rows to the [.filename]#/etc/sysctl.conf# file, to have "
+"them execute at startup."
+msgstr ""
+"Neste ponto, você deverá ser capaz de inserir a máquina entre dois conjuntos "
+"de hosts sem comprometer as habilidades de comunicação entre eles. Se sim, o "
+"próximo passo é adicionar as partes `net.link.ether.bridge._[blah]_=_[blah]_`"
+" dessas linhas ao arquivo [.filename]#/etc/sysctl.conf#, para que elas sejam "
+"executadas na inicialização."
+
+#. type: Title ==
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:167
+#, no-wrap
+msgid "Configuring The Firewall"
+msgstr "Configurando o Firewall"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:177
+msgid ""
+"Now it is time to create your own file with custom firewall rules, to secure "
+"the inside network. There will be some complication in doing this because "
+"not all of the firewall functionalities are available on bridged packets. "
+"Furthermore, there is a difference between the packets that are in the "
+"process of being forwarded and packets that are being received by the local "
+"machine. In general, incoming packets are run through the firewall only "
+"once, not twice as is normally the case; in fact they are filtered only upon "
+"receipt, so rules that use `out` or `xmit` will never match. Personally, I "
+"use `in via` which is an older syntax, but one that has a sense when you "
+"read it. Another limitation is that you are restricted to use only `pass` "
+"or `drop` commands for packets filtered by a bridge. Sophisticated things "
+"like `divert`, `forward` or `reject` are not available. Such options can "
+"still be used, but only on traffic to or from the bridge machine itself (if "
+"it has an IP address)."
+msgstr ""
+"Agora é hora de criar seu próprio arquivo com regras personalizadas de "
+"firewall, para proteger a rede interna. Haverá alguma complicação em fazer "
+"isso porque nem todas as funcionalidades do firewall estão disponíveis em "
+"pacotes encaminhados através de uma bridge. Além disso, há uma diferença "
+"entre os pacotes que estão em processo de encaminhamento e os pacotes que "
+"estão sendo recebidos pela máquina local. Em geral, os pacotes de entrada "
+"são filtrados apenas uma vez, não duas vezes como normalmente ocorre; de "
+"fato, eles são filtrados apenas no momento do recebimento, portanto, as "
+"regras que usam `out` ou `xmit` nunca darão match. Pessoalmente, eu uso `in "
+"via`, que é uma sintaxe mais antiga, mas que faz sentido quando você lê. "
+"Outra limitação é que você está restrito a usar apenas comandos `pass` ou "
+"`drop` para pacotes filtrados por uma ponte. Coisas sofisticadas como "
+"`divert`, `forward` ou `reject` não estão disponíveis. Tais opções ainda "
+"podem ser usadas, mas apenas no tráfego destinado ou originado na máquina "
+"que atua como bridge em si (se ela tiver um endereço IP)."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:185
+msgid ""
+"New in FreeBSD 4.0, is the concept of stateful filtering. This is a big "
+"improvement for UDP traffic, which typically is a request going out, "
+"followed shortly thereafter by a response with the exact same set of IP "
+"addresses and port numbers (but with source and destination reversed, of "
+"course). For firewalls that have no statekeeping, there is almost no way to "
+"deal with this sort of traffic as a single session. But with a firewall "
+"that can \"remember\" an outgoing UDP packet and, for the next few minutes, "
+"allow a response, handling UDP services is trivial. The following example "
+"shows how to do it. It is possible to do the same thing with TCP packets. "
+"This allows you to avoid some denial of service attacks and other nasty "
+"tricks, but it also typically makes your state table grow quickly in size."
+msgstr ""
+"O conceito de filtragem stateful é novo no FreeBSD 4.0. Esta é uma grande "
+"melhoria para o tráfego UDP, que geralmente é uma solicitação que sai, "
+"seguida logo depois por uma resposta com o mesmo conjunto de endereços IP e "
+"portas (mas com origem e destino invertidos, é claro). Para firewalls que "
+"não têm o controle de estado, quase não há como lidar com esse tipo de "
+"tráfego como uma sessão única. Mas com um firewall que pode \"lembrar\" de "
+"um pacote UDP de saída e, nos próximos minutos, permitir uma resposta, lidar "
+"com serviços UDP é trivial. O exemplo a seguir mostra como fazer isso. É "
+"possível fazer a mesma coisa com pacotes TCP. Isso permite evitar alguns "
+"ataques de negação de serviço e outros truques desagradáveis, mas também faz "
+"com que a tabela de estado cresça rapidamente em tamanho."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:189
+msgid ""
+"Let's look at an example setup. Note first that at the top of [.filename]#/"
+"etc/rc.firewall# there are already standard rules for the loopback interface "
+"[.filename]#lo0#, so we should not have to care for them anymore. Custom "
+"rules should be put in a separate file (say [.filename]#/etc/rc.firewall."
+"local#) and loaded at system startup, by modifying the row of [.filename]#/"
+"etc/rc.conf# where we defined the `open` firewall:"
+msgstr ""
+"Vamos dar uma olhada em um exemplo de configuração. Note primeiro que no "
+"início de [.filename]#/etc/rc.firewall#, já existem regras padrão para a "
+"interface de loopback [.filename]#lo0#, então não precisamos mais nos "
+"preocupar com elas. As regras personalizadas devem ser colocadas em um "
+"arquivo separado (digamos [.filename]#/etc/rc.firewall.local#) e carregadas "
+"na inicialização do sistema, modificando a linha de [.filename]#/etc/rc."
+"conf# onde definimos o firewall `open`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:193
+#, no-wrap
+msgid "firewall_type=\"/etc/rc.firewall.local\"\n"
+msgstr "firewall_type=\"/etc/rc.firewall.local\"\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:198
+msgid ""
+"You have to specify the _full_ path, otherwise it will not be loaded with "
+"the risk to remain isolated from the network."
+msgstr ""
+"Você tem que especificar o _caminho completo_, caso contrário ele não será "
+"carregado com o risco de permanecer isolado da rede."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:201
+msgid ""
+"For our example imagine to have the [.filename]#fxp0# interface connected "
+"towards the outside (Internet) and the [.filename]#xl0# towards the inside "
+"(LAN). The bridge machine has the IP `1.2.3.4` (it is not possible that your "
+"ISP can give you an address quite like this, but for our example it is good)."
+msgstr ""
+"Para o nosso exemplo, imagine ter a interface [.filename]#fxp0# conectada ao "
+"exterior (Internet) e a [.filename]#xl0# ao interior (LAN). A máquina bridge "
+"tem o IP `1.2.3.4` (não é possível que o seu provedor de serviços de "
+"Internet possa lhe fornecer um endereço exatamente como este, mas para o "
+"nosso exemplo é suficiente)."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:206
+#, no-wrap
+msgid ""
+"# Things that we have kept state on before get to go through in a hurry\n"
+"add check-state\n"
+msgstr ""
+"# Things that we have kept state on before get to go through in a hurry\n"
+"add check-state\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:211
+#, no-wrap
+msgid ""
+"# Throw away RFC 1918 networks\n"
+"add drop all from 10.0.0.0/8 to any in via fxp0\n"
+"add drop all from 172.16.0.0/12 to any in via fxp0\n"
+"add drop all from 192.168.0.0/16 to any in via fxp0\n"
+msgstr ""
+"# Throw away RFC 1918 networks\n"
+"add drop all from 10.0.0.0/8 to any in via fxp0\n"
+"add drop all from 172.16.0.0/12 to any in via fxp0\n"
+"add drop all from 192.168.0.0/16 to any in via fxp0\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:217
+#, no-wrap
+msgid ""
+"# Allow the bridge machine to say anything it wants\n"
+"# (if the machine is IP-less do not include these rows)\n"
+"add pass tcp from 1.2.3.4 to any setup keep-state\n"
+"add pass udp from 1.2.3.4 to any keep-state\n"
+"add pass ip from 1.2.3.4 to any\n"
+msgstr ""
+"# Allow the bridge machine to say anything it wants\n"
+"# (if the machine is IP-less do not include these rows)\n"
+"add pass tcp from 1.2.3.4 to any setup keep-state\n"
+"add pass udp from 1.2.3.4 to any keep-state\n"
+"add pass ip from 1.2.3.4 to any\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:222
+#, no-wrap
+msgid ""
+"# Allow the inside hosts to say anything they want\n"
+"add pass tcp from any to any in via xl0 setup keep-state\n"
+"add pass udp from any to any in via xl0 keep-state\n"
+"add pass ip from any to any in via xl0\n"
+msgstr ""
+"# Allow the inside hosts to say anything they want\n"
+"add pass tcp from any to any in via xl0 setup keep-state\n"
+"add pass udp from any to any in via xl0 keep-state\n"
+"add pass ip from any to any in via xl0\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:234
+#, no-wrap
+msgid ""
+"# TCP section\n"
+"# Allow SSH\n"
+"add pass tcp from any to any 22 in via fxp0 setup keep-state\n"
+"# Allow SMTP only towards the mail server\n"
+"add pass tcp from any to relay 25 in via fxp0 setup keep-state\n"
+"# Allow zone transfers only by the secondary name server [dns2.nic.it]\n"
+"add pass tcp from 193.205.245.8 to ns 53 in via fxp0 setup keep-state\n"
+"# Pass ident probes. It is better than waiting for them to timeout\n"
+"add pass tcp from any to any 113 in via fxp0 setup keep-state\n"
+"# Pass the \"quarantine\" range\n"
+"add pass tcp from any to any 49152-65535 in via fxp0 setup keep-state\n"
+msgstr ""
+"# TCP section\n"
+"# Allow SSH\n"
+"add pass tcp from any to any 22 in via fxp0 setup keep-state\n"
+"# Allow SMTP only towards the mail server\n"
+"add pass tcp from any to relay 25 in via fxp0 setup keep-state\n"
+"# Allow zone transfers only by the secondary name server [dns2.nic.it]\n"
+"add pass tcp from 193.205.245.8 to ns 53 in via fxp0 setup keep-state\n"
+"# Pass ident probes. It is better than waiting for them to timeout\n"
+"add pass tcp from any to any 113 in via fxp0 setup keep-state\n"
+"# Pass the \"quarantine\" range\n"
+"add pass tcp from any to any 49152-65535 in via fxp0 setup keep-state\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:240
+#, no-wrap
+msgid ""
+"# UDP section\n"
+"# Allow DNS only towards the name server\n"
+"add pass udp from any to ns 53 in via fxp0 keep-state\n"
+"# Pass the \"quarantine\" range\n"
+"add pass udp from any to any 49152-65535 in via fxp0 keep-state\n"
+msgstr ""
+"# UDP section\n"
+"# Allow DNS only towards the name server\n"
+"add pass udp from any to ns 53 in via fxp0 keep-state\n"
+"# Pass the \"quarantine\" range\n"
+"add pass udp from any to any 49152-65535 in via fxp0 keep-state\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:247
+#, no-wrap
+msgid ""
+"# ICMP section\n"
+"# Pass 'ping'\n"
+"add pass icmp from any to any icmptypes 8 keep-state\n"
+"# Pass error messages generated by 'traceroute'\n"
+"add pass icmp from any to any icmptypes 3\n"
+"add pass icmp from any to any icmptypes 11\n"
+msgstr ""
+"# ICMP section\n"
+"# Pass 'ping'\n"
+"add pass icmp from any to any icmptypes 8 keep-state\n"
+"# Pass error messages generated by 'traceroute'\n"
+"add pass icmp from any to any icmptypes 3\n"
+"add pass icmp from any to any icmptypes 11\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:250
+#, no-wrap
+msgid ""
+"# Everything else is suspect\n"
+"add drop log all from any to any\n"
+msgstr ""
+"# Everything else is suspect\n"
+"add drop log all from any to any\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:254
+msgid ""
+"Those of you who have set up firewalls before may notice some things "
+"missing. In particular, there are no anti-spoofing rules, in fact we did "
+"_not_ add:"
+msgstr ""
+"Aqueles que já configuraram firewalls antes podem notar que algumas coisas "
+"estão faltando. Em particular, não há regras anti-spoofing, na verdade, "
+"_não_ adicionamos:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:258
+#, no-wrap
+msgid "add deny all from 1.2.3.4/8 to any in via fxp0\n"
+msgstr "add deny all from 1.2.3.4/8 to any in via fxp0\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:264
+msgid ""
+"That is, drop packets that are coming in from the outside claiming to be "
+"from our network. This is something that you would commonly do to be sure "
+"that someone does not try to evade the packet filter, by generating "
+"nefarious packets that look like they are from the inside. The problem with "
+"that is that there is _at least_ one host on the outside interface that you "
+"do not want to ignore: the router. But usually, the ISP anti-spoofs at "
+"their router, so we do not need to bother that much."
+msgstr ""
+"Isso significa descartar pacotes que estão chegando de fora e alegam ser da "
+"nossa rede. Isso é algo que normalmente se faz para garantir que alguém não "
+"tente evadir o filtro de pacotes, gerando pacotes maliciosos que parecem ser "
+"provenientes de dentro da rede. O problema é que há _pelo menos_ um host na "
+"interface externa que você não deseja ignorar: o roteador. Mas geralmente, o "
+"ISP faz o anti-spoofing em seu roteador, então não precisamos nos preocupar "
+"tanto com isso."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:267
+msgid ""
+"The last rule seems to be an exact duplicate of the default rule, that is, "
+"do not let anything pass that is not specifically allowed. But there is a "
+"difference: all suspected traffic will be logged."
+msgstr ""
+"A última regra parece ser uma duplicata exata da regra padrão, ou seja, não "
+"deixa passar nada que não seja especificamente permitido. Mas há uma "
+"diferença: todo tráfego suspeito será registrado."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:273
+msgid ""
+"There are two rules for passing SMTP and DNS traffic towards the mail server "
+"and the name server, if you have them. Obviously the whole rule set should "
+"be flavored to personal taste, this is only a specific example (rule format "
+"is described accurately in the man:ipfw[8] man page). Note that for \"relay"
+"\" and \"ns\" to work, name service lookups must work _before_ the bridge is "
+"enabled. This is an example of making sure that you set the IP on the "
+"correct network card. Alternatively it is possible to specify the IP "
+"address instead of the host name (required if the machine is IP-less)."
+msgstr ""
+"Existem duas regras para permitir o tráfego SMTP e DNS direcionado ao "
+"servidor de e-mail e servidor de nomes, se você tiver esses servidores. "
+"Obviamente, todo o conjunto de regras deve ser personalizado de acordo com "
+"as preferências pessoais, este é apenas um exemplo específico (o formato da "
+"regra é descrito com precisão na página do manual man:ipfw[8]). Observe que, "
+"para o \"relay\" e o \"ns\" funcionarem, as consultas ao serviço de nomes "
+"devem funcionar _antes_ de habilitar a ponte. Isto é um exemplo para "
+"garantir que você configure o IP no cartão de rede correto. "
+"Alternativamente, é possível especificar o endereço IP em vez do nome do "
+"host (obrigatório se a máquina não possuir um IP)."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:278
+msgid ""
+"People that are used to setting up firewalls are probably also used to "
+"either having a `reset` or a `forward` rule for ident packets (TCP port "
+"113). Unfortunately, this is not an applicable option with the bridge, so "
+"the best thing is to simply pass them to their destination. As long as that "
+"destination machine is not running an ident daemon, this is relatively "
+"harmless. The alternative is dropping connections on port 113, which "
+"creates some problems with services like IRC (the ident probe must timeout)."
+msgstr ""
+"Pessoas acostumadas a configurar firewalls provavelmente também estão "
+"acostumadas a ter uma regra de `reset` ou `forward` para pacotes ident "
+"(porta TCP 113). Infelizmente, essa não é uma opção aplicável com a bridge, "
+"então a melhor coisa a fazer é simplesmente passá-los para o destino. "
+"Contanto que a máquina de destino não esteja executando um ident daemon, "
+"isso é relativamente inofensivo. A alternativa é descartar conexões na porta "
+"113, o que cria alguns problemas com serviços como IRC (a sondagem ident "
+"deve expirar)."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:285
+msgid ""
+"The only other thing that is a little weird that you may have noticed is "
+"that there is a rule to let the bridge machine speak, and another for "
+"internal hosts. Remember that this is because the two sets of traffic will "
+"take different paths through the kernel and into the packet filter. The "
+"inside net will go through the bridge, while the local machine will use the "
+"normal IP stack to speak. Thus the two rules to handle the different "
+"cases. The `in via fxp0` rules work for both paths. In general, if you use "
+"`in via` rules throughout the filter, you will need to make an exception for "
+"locally generated packets, because they did not come in via any of our "
+"interfaces."
+msgstr ""
+"A única outra coisa um pouco estranha que você pode ter notado é que há uma "
+"regra para permitir que a máquina da bridge fale, e outra para os hosts "
+"internos. Lembre-se de que isso ocorre porque os dois conjuntos de tráfego "
+"seguirão caminhos diferentes através do kernel e do filtro de pacotes. A "
+"rede interna passará pela ponte, enquanto a máquina local usará o stack de "
+"IP normal para falar. Portando, existem duas regras para lidar com os casos "
+"diferentes. As regras `in via fxp0` funcionam para ambos os caminhos. Em "
+"geral, se você usar regras `in via` em todo o filtro, precisará fazer uma "
+"exceção para pacotes gerados localmente, porque eles não entraram por "
+"nenhuma de nossas interfaces."
+
+#. type: Title ==
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:287
+#, no-wrap
+msgid "Contributors"
+msgstr "Colaboradores"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:291
+msgid ""
+"Many parts of this article have been taken, updated and adapted from an old "
+"text about bridging, edited by Nick Sayer. A pair of inspirations are due "
+"to an introduction on bridging by Steve Peterson."
+msgstr ""
+"Muitas partes deste artigo foram retiradas, atualizadas e adaptadas de um "
+"antigo texto sobre bridges, editado por Nick Sayer. E um par de inspirações "
+"vieram de uma introdução sobre bridges de autoria de Steve Peterson."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:293
+msgid ""
+"A big thanks to Luigi Rizzo for the implementation of the bridge code in "
+"FreeBSD and for the time he has dedicated to me answering all of my related "
+"questions."
+msgstr ""
+"Um grande obrigado ao Luigi Rizzo pela implementação do código de ponte "
+"(bridge) no FreeBSD e pelo tempo que ele dedicou a mim respondendo a todas "
+"as minhas perguntas relacionadas."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:294
+msgid ""
+"A thanks goes out also to Tom Rhodes who looked over my job of translation "
+"from Italian (the original language of this article) into English."
+msgstr ""
+"Agradeço também a Tom Rhodes, que olhou para o meu trabalho de tradução do "
+"italiano (a língua original deste artigo) para o inglês."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/fonts/_index.adoc b/documentation/content/pt-br/articles/fonts/_index.adoc
index b7ad32c1c0..d15ac65a85 100644
--- a/documentation/content/pt-br/articles/fonts/_index.adoc
+++ b/documentation/content/pt-br/articles/fonts/_index.adoc
@@ -1,9 +1,12 @@
---
-title: Fontes e FreeBSD
-subtitle: Um Tutorial
authors:
- - author: Dave Bodenstab
+ -
+ author: 'Dave Bodenstab'
email: imdave@synet.net
+description: 'Uma descrição das diversas tecnologias de fontes no FreeBSD e como usá-las com diferentes programas'
+subtitle: 'A Tutorial'
+tags: ["Fonts", "syscons", "X11", "Ghostscript", "Groff", "guide", "tutorial", "FreeBSD"]
+title: 'Fontes e FreeBSD'
trademarks: ["freebsd", "adobe", "apple", "linux", "microsoft", "opengroup", "general"]
---
@@ -41,7 +44,7 @@ endif::[]
[.abstract-title]
Resumo
-Este documento contém a descrição de vários arquivos de fontes que podem ser usados no FreeBSD e no driver do console do sistema, X11, Ghostscript e Groff. Manuais passo-a-passo são fornecidos para alterar a exibição do console do sistema para o modo 80x60, e para usar fontes tipo 1 com os aplicativos acima.
+Este documento contém uma descrição dos vários arquivos de fontes que podem ser usados com o FreeBSD e o driver syscons, X11, Ghostscript e Groff. Exemplos de receitas são fornecidos para alternar o display syscons para o modo 80x60 e para usar fontes type 1 com os programas de aplicativos mencionados acima.
'''
@@ -50,21 +53,21 @@ toc::[]
[[intro]]
== Introdução
-Existem muitas origens de fontes disponíveis, e alguém pode questionar como elas podem ser utilizadas no FreeBSD. A resposta pode ser encontrada numa busca cuidadosa na documentação do componente onde você gostaria de utilizar a mesma. Isto pode consumir um bom tempo, portanto esse tutorial é uma tentativa de fornecer um atalho para outros que possam estar interessados.
+Existem muitas fontes disponíveis e alguém pode perguntar como usá-las com o FreeBSD. A resposta pode ser encontrada pesquisando cuidadosamente a documentação do componente que deseja utilizar. Isso pode ser muito demorado, portanto, este tutorial é uma tentativa de fornecer um atalho para outras pessoas interessadas.
[[terminology]]
== Terminologia Básica
-Existem muitos formatos diferentes de fontes e sufixos de arquivos de fontes associados. Alguns deles serão abordados aqui:
+Existem muitos formatos diferentes de fontes e sufixos de arquivos de fontes associados. Alguns que serão abordados aqui são:
[.filename]#.pfa#, [.filename]#.pfb#::
-PostScript(R) fonte tipo 1. O [.filename]#.pfa# é o formato __A__scii e o [.filename]#.pfb# é o formato __B__inário .
+Fontes PostScript(R) type 1. O arquivo [.filename]#.pfa# é a forma __A__scii e o arquivo [.filename]#.pfb# é a forma __B__inária.
[.filename]#.afm#::
-As métricas da fonte associado com a fonte tipo 1.
+As métricas da fonte associado com a fonte type 1.
[.filename]#.pfm#::
-As métricas da fonte para impressora associadas com a fonte tipo 1.
+As métricas da fonte para impressora associadas com a fonte type 1.
[.filename]#.ttf#::
Uma fonte TrueType(R)
@@ -73,14 +76,14 @@ Uma fonte TrueType(R)
Uma referência indireta para uma fonte TrueType (não é realmente uma fonte)
[.filename]#.fon#, [.filename]#.fnt#::
-Fontes de tela bitmap
+Fontes de tela bitmapped
-O arquivo [.filename]#.fot# é usado pelo Windows(R) como um tipo de link simbólico para o arquivo de fonte TrueType(R) ([.filename]#.ttf#). Os arquivos de fonte [.filename]#.fon# também são utilizados no Windows. Eu desconheço uma maneira de utilizar essa fonte no FreeBSD.
+O arquivo [.filename]#.fot# é usado pelo Windows(R) como um tipo de link simbólico para o arquivo de fonte TrueType(R) real ([.filename]#.ttf#). Os arquivos de fonte [.filename]#.fon# também são usados pelo Windows. Não conheço uma maneira de usar esse formato de fonte no FreeBSD.
[[font-formats]]
== Quais Formatos de Fonte eu Posso Utilizar?
-Qual formato de arquivo de fonte é útil depende do aplicativo que está sendo usado. O FreeBSD por si só, não usa fontes. Aplicativos e/ou drivers podem fazer uso de arquivos de fontes. Aqui tem uma pequena referência cruzada de aplicação/driver para os sufixos de tipo de fonte:
+O formato de arquivo de fonte mais adequado depende do aplicativo utilizado. O FreeBSD por si só não utiliza fontes. Programas de aplicativos e/ou drivers podem fazer uso dos arquivos de fonte. Aqui está uma pequena referência cruzada de aplicativos/drivers para os sufixos de tipo de fonte:
Driver::
@@ -90,7 +93,7 @@ vt:::
syscons:::
[.filename]#.fnt#
-Aplicativo::
+Aplicação::
Ghostscript:::
[.filename]#.pfa#, [.filename]#.pfb#, [.filename]#.ttf#
@@ -104,28 +107,28 @@ Groff:::
Povray:::
[.filename]#.ttf#
-O sufixo [.filename]#.fnt# é frequentemente utilizado. Suspeito que, sempre que alguém quisesse criar um arquivo de fonte especializado para seu aplicativo, na maioria das vezes eles escolhiam esse sufixo. Então, é provável que os arquivos com esse sufixo não tenham o mesmo formato; Especificamente, os arquivos [.filename]#.fnt# usados pelo console do sistema do FreeBSD pode não ser do mesmo formato que o arquivo [.filename]#.fnt# encontrado no ambiente MS-DOS(R)/Windows(R). Não fiz nenhuma tentativa de utilizar outro arquivo [.filename]#.fnt# senão aquele fornecido com o FreeBSD.
+O sufixo [.filename]#.fnt# é bastante utilizado. Eu suspeito que sempre que alguém quisesse criar um arquivo de fonte especializado para seu aplicativo, na maioria das vezes escolhia esse sufixo. Portanto, é provável que os arquivos com esse sufixo não sejam todos do mesmo formato; especificamente, os arquivos [.filename]#.fnt# usados pelo syscons no FreeBSD podem não ser do mesmo formato que um [.filename]#.fnt# encontrado no ambiente MS-DOS(R)/Windows(R). Não fiz nenhuma tentativa de usar outros arquivos [.filename]#.fnt# além daqueles fornecidos com o FreeBSD.
[[virtual-console]]
== Configurando um Console Virtual para o Modo de Linhas 80x60
-Primeiro, uma fonte 8x8 deve ser carregada. Para fazer isso, [.filename]#/etc/rc.conf# deve conter a linha (altere o nome da fonte para uma apropriada para a sua região):
+Primeiramente, uma fonte 8x8 deve ser carregada. Para isso, o arquivo [.filename]#/etc/rc.conf# deve conter a linha (mude o nome da fonte para um apropriado para sua localização):
[.programlisting]
....
-font8x8="iso-8x8" # font 8x8 from /usr/shared/syscons/fonts/* (or NO).
+font8x8="iso-8x8" # font 8x8 from /usr/share/syscons/fonts/* (or NO).
....
-O comando para alterar o modo é man:vidcontrol[1]:
+O comando para realmente mudar o modo é man:vidcontrol[1]:
-[source,shell]
+[source, shell]
....
% vidcontrol VGA_80x60
....
-Vários programas orientados à tela, como o man:vi[1], devem ser capazes de determinar a dimensão corrente da tela. Como isto é conseguido através de uma chamada do `ioctl` para o driver do console (tal como o man:syscons[4]) ele irá determinar corretamente as dimensões da nova tela.
+Vários programas orientados a tela, como man:vi[1], devem ser capazes de determinar as dimensões atuais da tela. Como isso é alcançado por meio de chamadas `ioctl` para o driver do console (como man:syscons[4]), eles determinarão corretamente as novas dimensões da tela.
-Para fazer isso de uma maneira mais integrada, é possível incluir esses comandos nos scripts de inicialização de modo que ocorra quando o sistema for iniciado. Para fazer isso basta adicionar essa linha no [.filename]#/etc/rc.conf#
+Para tornar isso mais contínuo, é possível incorporar esses comandos nos scripts de inicialização para que ocorram durante a inicialização do sistema. Para fazer isso, adicione esta linha ao arquivo [.filename]#/etc/rc.conf#.
[.programlisting]
....
@@ -135,29 +138,31 @@ allscreens_flags="VGA_80x60" # Set this vidcontrol mode for all virtual screens
Referências: man:rc.conf[5], man:vidcontrol[1].
[[type1-fonts-x11]]
-== Usando Fontes Type 1 com X11
+== Usando fontes Type 1 com o X11
-O X11 pode tanto usar o formato [.filename]#.pfa# quanto o formato [.filename]#.pfb# de fonte. As fontes do X11 estão localizadas em vários subdiretórios abaixo do [.filename]#/usr/X11R6/lib/X11/fonts#. Cada arquivo de fonte é uma referência cruzada do seu nome X11 com o conteúdo dos arquivos [.filename]#fonts.dir# em cada diretório.
+O X11 pode usar fontes em formato [.filename]#.pfa# ou [.filename]#.pfb#. As fontes X11 estão localizadas em vários subdiretórios em [.filename]#/usr/X11R6/lib/X11/fonts#. Cada arquivo de fonte é cruzado com seu nome X11 pelos conteúdos de [.filename]#fonts.dir# em cada diretório.
-Já existe um diretório chamado [.filename]#Type1#. A forma mais direta de adicionar uma nova fonte é colocá-la nesse diretório. Uma forma melhor seria colocar todas as novas fontes num diretório separado e usar um link simbólico para as fontes adicionais. Isso permite identificar as fontes sem confundir com aquelas que são originalmente fornecidas. Por exemplo:
+Já existe um diretório chamado [.filename]#Type1#. A maneira mais direta de adicionar uma nova fonte é colocá-la neste diretório. Uma maneira melhor é manter todas as novas fontes em um diretório separado e usar um link simbólico para a fonte adicional. Isso permite que você mantenha um controle mais fácil das suas fontes sem confundir com as fontes fornecidas originalmente. Por exemplo:
-[source,shell]
+[source, shell]
....
-Cria um diretório para armazenar os arquivos de fonte
-% mkdir -p /usr/local/shared/fonts/type1
-% cd /usr/local/shared/fonts/type1
+Crie um diretório para conter os arquivos de fonte
+% mkdir -p /usr/local/share/fonts/type1
+% cd /usr/local/share/fonts/type1
-Coloque os arquivos .pfa, .pfb and .afm aqui
-Pode-se querer manter os arquivos readme, e outras documentações
-para as fontes aqui
+Coloque aqui os arquivos .pfa, .pfb e .afm
+
+Pode ser desejável manter arquivos readme e outras documentações
+
+para as fontes aqui também
% cp /cdrom/fonts/atm/showboat/showboat.pfb .
% cp /cdrom/fonts/atm/showboat/showboat.afm .
-Mantenha um índice para a referência cruzada das fontes
+Mantenha um índice para cruzar as fontes de referência.
% echo showboat - InfoMagic CICA, Dec 1994, /fonts/atm/showboat >>INDEX
....
-Agora, para usar a nova fonte com o X11, deve-se tornar os arquivos de fonte disponíveis e atualizados. Os nomes de fontes do X11 se parecem com:
+Agora, para usar uma nova fonte com o X11, é necessário tornar o arquivo de fonte disponível e atualizar os arquivos de nome de fonte. Os nomes das fontes X11 se parecem com:
[.programlisting]
....
@@ -174,9 +179,9 @@ Agora, para usar a nova fonte com o X11, deve-se tornar os arquivos de fonte dis
foundry family weight slant width additional style
....
-Um novo nome precisa ser criado para cada nova fonte. Se você possui alguma informação na documentação que acompanha a fonte, então isso pode servir de base para a criação do nome. Se não há informação, então você pode ter alguma idéia usando man:strings[1] no arquivo da fonte. Por exemplo:
+Um novo nome precisa ser criado para cada nova fonte. Se você tiver alguma informação da documentação que acompanha a fonte, ela pode servir como base para criar o nome. Se não houver informações disponíveis, você pode ter uma ideia usando o comando man:strings[1] no arquivo de fonte. Por exemplo:
-[source,shell]
+[source, shell]
....
% strings showboat.pfb | more
%!FontType1-1.0: Showboat 001.001
@@ -207,7 +212,7 @@ end readonly def
Usando essas informações, um possível nome poderia ser:
-[source,shell]
+[source, shell]
....
-type1-Showboat-medium-r-normal-decorative-0-0-0-0-p-0-iso8859-1
....
@@ -215,44 +220,45 @@ Usando essas informações, um possível nome poderia ser:
Os componentes do nosso nome são:
Companhia::
-Vamos nomear todas as novas fontes como `type1`.
+Vamos apenas nomear todas as novas fontes como `type1`.
Família::
-O nome da fonte
+O nome da fonte.
Densidade::
-Normal, negrito, média, semi-negrito, etc. Pelas informações acima do man:strings[1], essa fonte aparenta ter uma densidade __média__.
+Normal, negrito (bold), médio (medium), seminegrito (semibold), etc. Pelos resultados do comando man:strings[1] mostrados acima, parece que esta fonte tem um peso __médio__ (medium).
Inclinação::
-__r__oman, __i__tálico, __o__blíquo, etc. Como o _Ângulo Itálico_ é zero, o _roman_ será utilizado.
+__r__omano (roman), __i__talico (italic), __o__blíquo (oblique), etc. Já que o ângulo de itálico (_ItalicAngle_) é zero, será usada a versão romana (_roman_).
Largura::
-Normal, ampla, condensada, estendida, etc. Até que possa ser examinada, supomos que será __normal__.
+Normal, ampla (wide), condensada (condensed), estendida (extended), etc. Até que possa ser examinada, a suposição será de que a fonte é __normal__.
Estilo Adicional::
Frequentemente omitido, mas isso indicará que a fonte possui letras maiúsculas decorativas.
Espaçamento::
-proporcional ou monoespaçada. A opção _Poporcional_ é usada quando o _isFixedPitch_ é falso.
+Proporcional (proportional) ou espaçamento fixo (monospaced). Será usada a versão _proporcional_, já que o valor de _isFixedPitch_ é falso.
-Todos esses nomes são arbitrários, mas deve-se tentar ser compatível com as convenções existentes. A fonte é referenciada pelo nome com possíveis curingas pelo programa X11, então o nome escolhido tem que fazer algum sentido. Pode-se começar simplesmente usando
+Todos esses nomes são arbitrários, mas deve-se procurar ser compatível com as convenções existentes. Uma fonte é referenciada pelo nome, com possíveis curingas (wildcards) por um programa X11, então o nome escolhido deve fazer algum sentido. Pode-se começar simplesmente usando
-[source,shell]
+[source, shell]
....
-…-normal-r-normal-…-p-…
+...-normal-r-normal-...-p-...
....
-como o nome, e então usar man:xfontsel[1] para examiná-lo e ajustar o nome com base na aparência da fonte.
+esse nome, e depois usar o comando man:xfontsel[1] para examiná-lo e ajustar o nome com base na aparência da fonte.
Então, para completar nosso exemplo:
-[source,shell]
+[source, shell]
....
-Torne a fonte acessível para o X11
+Torne a fonte acessível ao X11.
% cd /usr/X11R6/lib/X11/fonts/Type1
-% ln -s /usr/local/shared/fonts/type1/showboat.pfb .
+% ln -s /usr/local/share/fonts/type1/showboat.pfb .
-Edite os arquivos fonts.dir e fonts.scale, adicionando a linha que descreve a fonte e incremente o número de fontes que são encontradas na primeira linha.
+Edite o arquivo fonts.dir e fonts.scale, adicionando a linha que descreve a fonte
+e incrementando o número de fontes que é encontrado na primeira linha.
% ex fonts.dir
:1p
25
@@ -264,10 +270,10 @@ showboat.pfb -type1-showboat-medium-r-normal-decorative-0-0-0-0-p-0-iso8859-1
.
:wq
-fonts.scale aparenta ser idêntico ao fonts.dir…
+O arquivo fonts.scale parece ser idêntico ao fonts.dir...
% cp fonts.dir fonts.scale
-Informe ao X11 que arquivos foram alterados
+Informe ao X11 que as coisas mudaram.
% xset fp rehash
Examine a nova fonte
@@ -279,32 +285,32 @@ Referências: man:xfontsel[1], man:xset[1], The X Windows System in a Nutshell,
[[type1-fonts-ghostscript]]
== Usando Fontes Type 1 com Ghostscript
-O Ghostscript referencia uma fonte via seu arquivo de [.filename]#Fontmap#. Este deve ser modificado de uma maneira similar a feita para o arquivo [.filename]#fonts.dir# do X11. O Ghostscript pode usar tanto o formato [.filename]#.pfa# quanto o [.filename]#.pfb#. Usando a fonte do exemplo anterior, segue um passo a passo de como utilizá-la com o Ghostscript:
+O Ghostscript referencia uma fonte por meio de seu arquivo [.filename]#Fontmap#. Este arquivo deve ser modificado de maneira semelhante ao arquivo [.filename]#fonts.dir# do X11. O Ghostscript pode usar fontes em formato [.filename]#.pfa# ou [.filename]#.pfb#. Usando a fonte do exemplo anterior, aqui está como usá-la com o Ghostscript:
-[source,shell]
+[source, shell]
....
-Coloque a fonte no diretório do Ghostscript
-% cd /usr/local/shared/ghostscript/fonts
-% ln -s /usr/local/shared/fonts/type1/showboat.pfb .
+Coloque a fonte no diretório de fontes do Ghostscript.
+% cd /usr/local/share/ghostscript/fonts
+% ln -s /usr/local/share/fonts/type1/showboat.pfb .
-Edite o mapeamento de fontes, assim o Ghostscript saberá sobre a fonte
-% cd /usr/local/shared/ghostscript/4.01
+Edite o arquivo Fontmap para que o Ghostscript saiba sobre a fonte
+% cd /usr/local/share/ghostscript/4.01
% ex Fontmap
:$a
/Showboat (showboat.pfb) ; % From CICA /fonts/atm/showboat
.
:wq
-Use o Ghostscript para checar a fonte
+Use o Ghostscript para examinar a fonte.
% gs prfont.ps
Aladdin Ghostscript 4.01 (1996-7-10)
Copyright (C) 1996 Aladdin Enterprises, Menlo Park, CA. All rights
reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
-Loading Times-Roman font from /usr/local/shared/ghostscript/fonts/tir_____.pfb...
+Loading Times-Roman font from /usr/local/share/ghostscript/fonts/tir_____.pfb...
/1899520 581354 1300084 13826 0 done.
GS>Showboat DoFont
-Loading Showboat font from /usr/local/shared/ghostscript/fonts/showboat.pfb...
+Loading Showboat font from /usr/local/share/ghostscript/fonts/showboat.pfb...
1939688 565415 1300084 16901 0 done.
>>showpage, press <return> to continue<<
>>showpage, press <return> to continue<<
@@ -312,16 +318,16 @@ Loading Showboat font from /usr/local/shared/ghostscript/fonts/showboat.pfb...
GS>quit
....
-Referências: Veja o arquivo [.filename]#fonts.txt# na distribuição do Ghostscript 4.01
+Referências: arquivo [.filename]#fonts.txt# na distribuição do Ghostscript 4.01
[[type1-fonts-groff]]
-== Usando Fontes Type 1 com Groff
+== Usando Fontes Type 1 com o Groff
-Agora que a nova fonte pode ser utilizada tanto pelo X11 quanto pelo Ghostscript, como podemos utilizar a nova fonte com o Groff? Primeiro de tudo, como estamos usando fontes Type 1 PostScript(R), o dispositivo Groff que é aplicável é o device __ps__. Um arquivo de fonte deve ser criado para cada fonte que o Groff possa usar. Um nome de fonte Groff é apenas um arquivo no [.filename]#/usr/shared/groff_font/devps#. Com o nosso exemplo, o arquivo da fonte poderia ser [.filename]#/usr/shared/groff_font/devps/SHOWBOAT#. O arquivo deve ser criado usando ferramentas providas pelo Groff.
+Agora que a nova fonte pode ser usada tanto pelo X11 quanto pelo Ghostscript, como se pode usá-la com o groff? Em primeiro lugar, uma vez que estamos lidando com fontes PostScript(R) type 1, o dispositivo groff que é aplicável é o dispositivo _ps_. Um arquivo de fonte deve ser criado para cada fonte que o groff possa usar. Um nome de fonte groff é apenas um arquivo em [.filename]#/usr/share/groff_font/devps#. Em nosso exemplo, o arquivo de fonte poderia ser [.filename]#/usr/share/groff_font/devps/SHOWBOAT#. O arquivo deve ser criado usando ferramentas fornecidas pelo groff.
-A primeira ferramenta é o `afmtodit`. Ela normalmente não está instalada, então deve ser baixada de uma fonte de distribuição. Eu percebi que teria que mudar a primeira linha do arquivo, então eu fiz:
+A primeira ferramenta é `afmtodit`. Ela não costuma ser instalada por padrão, então é necessário obtê-la da distribuição de origem. Descobri que precisei alterar a primeira linha do arquivo, então fiz o seguinte:
-[source,shell]
+[source, shell]
....
% cp /usr/src/gnu/usr.bin/groff/afmtodit/afmtodit.pl /tmp
% ex /tmp/afmtodit.pl
@@ -331,42 +337,39 @@ A primeira ferramenta é o `afmtodit`. Ela normalmente não está instalada, ent
:wq
....
-Essa ferramenta irá criar o arquivo de fontes do Groff a partir dos arquivos de métrica ([.filename]#.afm# suffix.) Continuando com nosso exemplo:
+Essa ferramenta criará o arquivo de fonte do groff a partir do arquivo de métricas (sufixo [.filename]#.afm#). Continuando com nosso exemplo:
-[source,shell]
+[source, shell]
....
-Muitos arquivos .afm estão no formato do Mac, com ^M delimitando as linhas
-Nós temos que convertê-los para o estilo UNIX que delimita as linhas com ^J
+Muitos arquivos .afm estão no formato Mac, com linhas delimitadas por ^M.
+É necessário convertê-los para o estilo UNIX(R), com linhas delimitadas por ^J.
% cd /tmp
-% cat /usr/local/shared/fonts/type1/showboat.afm |
+% cat /usr/local/share/fonts/type1/showboat.afm |
tr '\015' '\012' >showboat.afm
-Agora crie um arquivo de fonte groff
-% cd /usr/shared/groff_font/devps
+Agora crie o arquivo de fonte do groff.
+% cd /usr/share/groff_font/devps
% /tmp/afmtodit.pl -d DESC -e text.enc /tmp/showboat.afm generate/textmap SHOWBOAT
....
A fonte agora pode ser referenciada pelo nome SHOWBOAT.
-Se o Ghostscript é utilizado para impressão com driver simulado no sistema, então não precisa fazer mais nada. Entretanto, se as impressoras usam PostScript(R) real, então a fonte deve ser baixada pela impressora de maneira que a fonte a ser utilizada (a menos que a impressora tenha a fonte showboat embutida ou acessível a partir de um disco de fontes.) O passo final é criar uma fonte descarregável. A ferramenta `pfbtops` é usada para criar o formato [.filename]#.pfa# da fonte, e o arquivo para [.filename]#download# é modificado para referenciar a nova fonte. O arquivo para [.filename]#download# deve referenciar o nome interno da fonte. Isso pode ser facilmente determinado de um arquivo de fonte groff conforme demonstrado:
+Se o Ghostscript for usado para controlar as impressoras no sistema, então nada mais precisa ser feito. No entanto, se forem usadas impressoras PostScript(R) reais, a fonte deve ser baixada para a impressora para que a fonte seja usada (a menos que a impressora tenha a fonte showboat incorporada ou em um disco de fonte acessível). O último passo é criar uma fonte transferível. A ferramenta `pfbtops` é usada para criar o formato [.filename]#.pfa# da fonte, e o arquivo [.filename]#download# é modificado para referenciar a nova fonte. O arquivo [.filename]#download# deve fazer referência ao nome interno da fonte. Isso pode ser facilmente determinado a partir do arquivo de fonte do groff, como ilustrado:
-[source,shell]
+[source, shell]
....
-Criando o arquivo de fonte .pfa
-
-% pfbtops /usr/local/shared/fonts/type1/showboat.pfb >showboat.pfa
+Crie o arquivo de fonte .pfa.
+% pfbtops /usr/local/share/fonts/type1/showboat.pfb >showboat.pfa
....
-Claro que, se o arquivo [.filename]#.pfa# já existe, apenas crie um link simbólico para referenciá-lo.
+Claro, se o arquivo [.filename]#.pfa# já estiver disponível, basta usar um link simbólico para fazer referência a ele.
-[source,shell]
+[source, shell]
....
-Obtendo o nome interno da fonte
-
+Obtenha o nome interno da fonte
% fgrep internalname SHOWBOAT
internalname Showboat
-Dizendo ao groff que tem que fazer o download da fonte
-
+Informe ao groff que a fonte deve ser baixada.
% ex download
:$a
Showboat showboat.pfa
@@ -376,14 +379,13 @@ Showboat showboat.pfa
Para testar a fonte:
-[source,shell]
+[source, shell]
....
% cd /tmp
-
-% cat >example.t <<EOF
+% cat >exemplo.t <<EOF
.sp 5
.ps 16
-This is an example of the Showboat font:
+Este é um exemplo da fonte Showboat:
.br
.ps 48
.vs (\n(.s+2)p
@@ -399,33 +401,32 @@ STUVWXYZ
.vs (\n(.s+2)p
.fp 5 SHOWBOAT
.ft R
-To use it for the first letter of a paragraph, it will look like:
+Para usá-lo como a primeira letra de um parágrafo, ficará assim:
.sp 50p
-\s(48\f5H\s0\fRere is the first sentence of a paragraph that uses the
-showboat font as its first letter.
-Additional vertical space must be used to allow room for the larger
-letter.
+\s(48\f5H\s0\fRqui está a primeira frase de um parágrafo que usa a
+fonte showboat como a primeira letra.
+Deve-se usar espaço vertical adicional para permitir espaço para a letra maior.
EOF
-% groff -Tps example.t >example.ps
+% groff -Tps example.t > exemplo.ps
-Para usar ghostscript/ghostview
+Para usar o ghostscript/ghostview
% ghostview example.ps
-Para imprimí-la
+Para imprimir:
% lpr -Ppostscript example.ps
....
Referências: [.filename]#/usr/src/gnu/usr.bin/groff/afmtodit/afmtodit.man#, man:groff_font[5], man:groff_char[7], man:pfbtops[1].
[[convert-truetype]]
-== Convertendo Fontes TrueType para um Formato groff/PostScript Para o Groff
+== Convertendo Fontes TrueType para um Formato groff/PostScript para o Groff
-Isso potencialmente requer um pouco de trabalho, simplesmente porque depende de alguns utilitários que não são instalados como parte do sistema base. Eles são:
+Isso pode requerer um pouco de trabalho, simplesmente porque depende de algumas ferramentas que não são instaladas como parte do sistema base. Elas são:
`ttf2pf`::
-Utilitário de conversão TrueType para PostScript. Ee permite a conversão de uma fonte TrueType em um arquivo de métrica de fonte ascii ([.filename]#.afm#).
+Utilitários de conversão de TrueType para PostScript. Isso permite a conversão de uma fonte TrueType para um arquivo de métricas de fonte ascii ([.filename]#.afm#).
+
-Atualmente disponível em http://sunsite.icm.edu.pl/pub/GUST/contrib/BachoTeX98/ttf2pf/[http://sunsite.icm.edu.pl/pub/GUST/contrib/BachoTeX98/ttf2pf/]. Nota: Esses arquivos são programas PostScript e devem ser baixados para o disco mantendo pressionada a tecla kbd:[ Shift ] ao clicar no link. Caso contrário, seu navegador pode tentar iniciar o ghostview para visualizá-los.
+Disponível atualmente em http://sunsite.icm.edu.pl/pub/GUST/contrib/BachoTeX98/ttf2pf/[http://sunsite.icm.edu.pl/pub/GUST/contrib/BachoTeX98/ttf2pf/]. Observe: esses arquivos são programas PostScript e devem ser baixados para o disco mantendo pressionada a tecla kbd:[Shift] ao clicar no link. Caso contrário, o seu navegador pode tentar abrir o ghostview para visualizá-los.
+
Os arquivos de interesse são:
@@ -433,41 +434,41 @@ Os arquivos de interesse são:
** [.filename]#PF2AFM.PS#
** [.filename]#ttf2pf.ps#
+
-O caso engraçado sobre maiúsculas/minúsculas é devido ao fato de serem destinados também para os terminais DOS. O [.filename]#ttf2pf.ps# faz uso dos outros como maiúsculos, portanto, qualquer renomeação deve ser consistente com isso. (Na verdade, [.filename]#GS_TTF.PS# e [.filename]#PFS2AFM.PS# são supostamente parte da distribuição Ghostscript, mas é muito fácil usá-los como utilitários isolados. O FreeBSD parece não incluir o último.) Você também pode querer instalá-los em [.filename]#/usr/local/shared/groff_font/devps# (?).
+A utilização de letras maiúsculas e minúsculas engraçadas deve-se ao fato de serem destinadas também para shells do DOS. O arquivo [.filename]#ttf2pf.ps# faz uso dos outros em letras maiúsculas, então qualquer renomeação deve ser consistente com isso. (Na verdade, os arquivos [.filename]#GS_TTF.PS# e [.filename]#PFS2AFM.PS# supostamente fazem parte da distribuição do Ghostscript, mas é fácil usá-los como uma fonte isolada. O FreeBSD não parece incluir o último.) Você também pode querer tê-los instalados em [.filename]#/usr/local/share/groff_font/devps#(?).
`afmtodit`::
-Cria arquivos de fontes para uso com o Groff a partir do arquivo de métricas de fonte ascii. Isso geralmente fica no diretório [.filename]#/usr/src/contrib/groff/afmtodit# e requer algum trabalho para prosseguir.
+A ferramenta `afmtodit` é utilizada para criar arquivos de fonte para o groff a partir de um arquivo métrico de fonte em formato ASCII ([.filename]#.afm#). Normalmente, essa ferramenta está localizada no diretório [.filename]#/usr/src/contrib/groff/afmtodit#, mas normalmente exige alguma configuração para funcionar corretamente.
+
[NOTE]
====
-Se você é paranóico sobre o trabalhar no diretório [.filename]#/usr/src#, simplesmente copie o conteúdo do diretório acima para um local de trabalho.
+Se você está preocupado com a segurança de trabalhar no diretório [.filename]#/usr/src#, basta copiar o conteúdo do diretório acima para uma localização de trabalho.
====
+
Na área de trabalho, você precisará compilar o utilitário. Apenas digite:
+
-[source,shell]
+[source, shell]
....
# make -f Makefile.sub afmtodit
....
+
-Você também pode precisar copiar o [.filename]#/usr/contrib/groff/devps/generate/textmap# para [.filename]#/usr/shared/groff_font/devps/generate# se ele ainda não existir.
+Você também pode precisar copiar o arquivo [.filename]#/usr/contrib/groff/devps/generate/textmap# para [.filename]#/usr/share/groff_font/devps/generate# se ele ainda não existir.
Depois que todos esses utilitários estiverem no lugar, você está pronto para começar:
. Crie o arquivo [.filename]#.afm# digitando:
+
-[source,shell]
+[source, shell]
....
% gs -dNODISPLAY -q -- ttf2pf.ps TTF_name PS_font_name AFM_name
....
-+
-Onde, _TTF_name_ é o seu arquivo de fonte TrueType, _PS_font_name_ é o nome do arquivo [.filename]#.pfa#, _AFM_name_ é o nome que você deseja para o arquivo [.filename]#.afm#. Se você não especificar nomes de arquivos de saída para os arquivos [.filename]#.pfa# ou [.filename]#.afm#, os nomes padrão serão gerados a partir do nome do arquivo de fonte TrueType.
-+
-Isso também produz um arquivo [.filename]#.pfa#, o arquivo ascii de métricas de fonte PostScript ([.filename]#.pfb# é para o formato binário). Isso não será necessário, mas poderia (eu acho) ser útil para um fontserver.
-+
++
+Onde _TTF_nome_ é o nome do arquivo da sua fonte TrueType, _nome_fonte_PS_ é o nome do arquivo para [.filename]#.pfa#, _nome_AFM_ é o nome desejado para [.filename]#.afm#. Se você não especificar os nomes de arquivo de saída para os arquivos [.filename]#.pfa# ou [.filename]#.afm#, então nomes padrão serão gerados a partir do nome do arquivo da fonte TrueType.
++
+Isso também produz um arquivo [.filename]#.pfa#, o arquivo de métricas de fonte PostScript em formato ASCII ([.filename]#.pfb# é para a forma binária). Isso não será necessário, mas poderia (eu acredito) ser útil para um servidor de fontes.
++
Por exemplo, para converter a fonte de código de barras 30f9 usando o nome de arquivo padrão, use o seguinte comando:
+
-[source,shell]
+[source, shell]
....
% gs -dNODISPLAY -- ttf2pf.ps 3of9.ttf
Aladdin Ghostscript 5.10 (1997-11-23)
@@ -475,10 +476,10 @@ Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Converting 3of9.ttf to 3of9.pfa and 3of9.afm.
....
-+
-Se você quiser que as fontes convertidas sejam armazenadas em [.filename]#A.pfa# e [.filename]#B.afm#, use este comando:
+
-[source,shell]
+Se você quer que as fontes convertidas sejam armazenadas em [.filename]#A.pfa# e [.filename]#B.afm#, use o seguinte comando:
++
+[source, shell]
....
% gs -dNODISPLAY -- ttf2pf.ps 3of9.ttf A B
Aladdin Ghostscript 5.10 (1997-11-23)
@@ -487,50 +488,50 @@ This software comes with NO WARRANTY: see the file PUBLIC for details.
Converting 3of9.ttf to A.pfa and B.afm.
....
-. Crie o arquivo PostScript Groff:
-+
-Vá para o diretório [.filename]#/usr/shared/groff_font/devps# para facilitar a execução do comando abaixo. Você provavelmente precisará de privilégios de root para isso. (Ou, se você é paranoico sobre trabalhar lá, certifique-se de referenciar os arquivos [.filename]#DESC#, [.filename]#text.enc# e [.filename]#generate/textmap# como estando neste diretório.)
+. Crie o arquivo groff PostScript:
++
+Acesse o diretório `/usr/share/groff_font/devps` para facilitar a execução do seguinte comando. É provável que você precise de privilégios de root para executá-lo. (Ou, se você é paranoico em relação a trabalhar lá, certifique-se de que os arquivos `DESC`, `text.enc` e `generate/textmap` estejam localizados neste diretório.)
+
-[source,shell]
+[source, shell]
....
% afmtodit -d DESC -e text.enc file.afm generate/textmap PS_font_name
....
-+
-Onde, [.filename]#file.afm# é o _AFM_name_ criado pelo `ttf2pf.ps` acima e _PS_font_name_ é o nome da fonte usada a partir desse comando, bem como o nome que man:groff[1] usará para referências a essa fonte. Por exemplo, supondo que você usou o primeiro comando `tiff2pf.ps` acima, a fonte 3of9 Barcode pode ser criada usando o comando:
+
-[source,shell]
+Onde, [.filename]#file.afm# é o _AFM_name_ criado pelo `ttf2pf.ps` acima, e _PS_font_name_ é o nome da fonte usado no comando anterior, bem como o nome que man:groff[1] usará para referenciar essa fonte. Por exemplo, assumindo que você usou o primeiro `tiff2pf.ps` acima, a fonte Barcode 3of9 pode ser criada usando o comando:
++
+[source, shell]
....
% afmtodit -d DESC -e text.enc 3of9.afm generate/textmap 3of9
....
-+
-Assegure-se de que o arquivo _PS_font_name_ resultante (por exemplo, [.filename]#3of9# no exemplo acima) esteja localizado no diretório [.filename]#/usr/shared/groff_font/devps# copiando-o ou movendo-o para lá.
-+
-Note que se o [.filename]#ttf2pf.ps# atribuir um nome de fonte usando o nome que ele encontrou no arquivo de fonte TrueType e você quiser usar um nome diferente, você deverá editar o arquivo [.filename]#.afm# antes de executar o `afmtodit`. Esse nome também deve coincidir com o usado no arquivo Fontmap se você deseja redirecionar o man:groff[1] para o man:gs[1].
++
+Certifique-se de que o arquivo _PS_font_name_ resultante (por exemplo, [.filename]#3of9# no exemplo acima) esteja localizado no diretório [.filename]#/usr/share/groff_font/devps# movendo ou copiando-o para lá.
++
+Observe que, se o [.filename]#ttf2pf.ps# atribuir um nome de fonte usando o que ele encontra no arquivo de fonte TrueType e você desejar usar um nome diferente, será necessário editar o arquivo [.filename]#.afm# antes de executar o `afmtodit`. Este nome também deve corresponder ao usado no arquivo Fontmap se você quiser redirecionar o man:groff[1] para o man:gs[1].
[[truetype-for-other-programs]]
== As Fontes TrueType Podem ser Usadas com Outros Programas?
-O formato de fonte TrueType é usado pelo Windows, Windows 95 e Mac. É bastante popular e há um grande número de fontes disponíveis neste formato.
+O formato de fonte TrueType é utilizado pelo Windows, Windows 95 e Mac's. É bastante popular e há uma grande quantidade de fontes disponíveis neste formato.
-Infelizmente, há poucos aplicativos que conheço que podem usar este formato: O Ghostscript e o Povray são os que vem a mente. O suporte do Ghostscript, de acordo com a documentação, é rudimentar e os resultados provavelmente serão inferiores as fontes Type 1. O Povray versão 3 também tem a capacidade de usar fontes TrueType, mas eu duvido que muitas pessoas criem documentos como uma série de páginas tridmensionais traçadas com luz :-).
+Infelizmente, há poucos aplicativos que eu conheço que podem usar este formato: o Ghostscript e o Povray vêm à mente. O suporte do Ghostscript, de acordo com a documentação, é rudimentar e os resultados provavelmente serão inferiores aos das fontes type 1. A versão 3 do Povray também tem a capacidade de usar fontes TrueType, mas eu duvido que muitas pessoas estejam criando documentos como uma série de páginas renderizadas em raytracing :-).
-Esta situação bastante triste pode mudar em breve. O http://www.freetype.org/[Projeto FreeType] está atualmente desenvolvendo um conjunto útil de ferramentas FreeType:
+Essa situação um tanto quanto desanimadora pode mudar em breve. O http://www.freetype.org/[Projeto FreeType] está atualmente desenvolvendo um conjunto de ferramentas FreeType úteis:
-* O servidor de fontes `xfsft` para X11 pode fornecer fontes TrueType além de fontes regulares. Embora esteja atualmente em beta, dizem que está bastante utilizável. Veja http://www.dcs.ed.ac.uk/home/jec/programs/xfsft/[a página de Juliusz Chroboczek] para maiores informações. Instruções de portabilidade para o FreeBSD podem ser encontradas na http://math.missouri.edu/~stephen/software/[página do software de Stephen Montgomery].
-* O xfstt é outro servidor de fontes para o X11, disponível em link:ftp://sunsite.unc.edu/pub/Linux/X11/fonts/[ftp://sunsite.unc.edu/pub/Linux/X11/fonts/].
-* Um programa chamado `ttf2bdf` pode produzir arquivos BDF adequados para uso em um ambiente X a partir de arquivos TrueType. Os binários para o Linux estão disponíveis em link:ftp://crl.nmsu.edu/CLR/multiling/General/[ftp://crl.nmsu.edu/CLR/multiling/Geral/].
-* e outros ...
+* O servidor de fontes `xfsft` para X11 pode servir fontes TrueType além de fontes regulares. Embora esteja atualmente em beta, é dito que ele é bastante utilizável. Veja a página de http://www.dcs.ed.ac.uk/home/jec/programs/xfsft/[Juliusz Chroboczek] para obter mais informações. As instruções de portabilidade para FreeBSD podem ser encontradas em http://math.missouri.edu/~stephen/software/[página de software de Stephen Montgomery].
+* xfstt é outro servidor de fontes para X11, disponível em link:ftp://sunsite.unc.edu/pub/Linux/X11/fonts/[ftp://sunsite.unc.edu/pub/Linux/X11/fonts/].
+* Um programa chamado `ttf2bdf` pode produzir arquivos BDF adequados para uso em um ambiente X a partir de arquivos TrueType. Binários para Linux estão disponíveis em link:ftp://crl.nmsu.edu/CLR/multiling/General/[ftp://crl.nmsu.edu/CLR/multiling/General/].
+* e outros...
[[obtaining-additional-fonts]]
-== Onde Fontes Adicionais Podem ser Obtidas?
+== Onde é possível obter fontes adicionais?
-Muitas fontes estão disponíveis na Internet. Elas são totalmente gratuitas ou sharewares. Além disso, muitas fontes estão disponíveis na categoria [.filename]#x11-fonts/# na coleção do ports
+Muitas fontes estão disponíveis na Internet. Elas são completamente gratuitas ou são sharewares. Além disso, muitas fontes estão disponíveis na categoria [.filename]#x11-fonts/# na coleção de ports
[[additional-questions]]
== Questões Adicionais
-* Quais são os usos dos arquivos [.filename]#.pfm#?
-* Posso gerar o arquivo [.filename]#.afm# a partir de um arquivo [.filename]#.pfa# ou [.filename]#.pfb#?
-* Como gerar os arquivos de mapeamento de caracteres groff para fontes PostScript com nomes de caracteres não padrão?
-* Podem os dispositivos xditview e devX serem configurados para acessar todas as novas fontes?
-* Seria bom ter exemplos de uso de fontes TrueType com Povray e Ghostscript.
+* Para que servem os arquivos [.filename]#.pfm#?
+* É possível gerar o arquivo [.filename]#.afm# a partir de um arquivo [.filename]#.pfa# ou [.filename]#.pfb#?
+* Como gerar os arquivos de mapeamento de caracteres do groff para fontes PostScript com nomes de caracteres não-padrão?
+* É possível configurar o xditview e os dispositivos devX para acessar todas as novas fontes?
+* Seria bom ter exemplos de como usar fontes TrueType com o Povray e o Ghostscript.
diff --git a/documentation/content/pt-br/articles/fonts/_index.po b/documentation/content/pt-br/articles/fonts/_index.po
new file mode 100644
index 0000000000..e64d95cdce
--- /dev/null
+++ b/documentation/content/pt-br/articles/fonts/_index.po
@@ -0,0 +1,1615 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: 2023-05-02 20:44+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesfonts_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/fonts/_index.adoc:1
+#, no-wrap
+msgid "A description of the various font technologies in FreeBSD, and how to use them with different programs"
+msgstr ""
+"Uma descrição das diversas tecnologias de fontes no FreeBSD e como usá-las "
+"com diferentes programas"
+
+#. type: Title =
+#: documentation/content/en/articles/fonts/_index.adoc:1
+#: documentation/content/en/articles/fonts/_index.adoc:12
+#, no-wrap
+msgid "Fonts and FreeBSD"
+msgstr "Fontes e FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:45
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:48
+msgid ""
+"This document contains a description of the various font files that may be "
+"used with FreeBSD and the syscons driver, X11, Ghostscript and Groff. "
+"Cookbook examples are provided for switching the syscons display to 80x60 "
+"mode, and for using type 1 fonts with the above application programs."
+msgstr ""
+"Este documento contém uma descrição dos vários arquivos de fontes que podem "
+"ser usados com o FreeBSD e o driver syscons, X11, Ghostscript e Groff. "
+"Exemplos de receitas são fornecidos para alternar o display syscons para o "
+"modo 80x60 e para usar fontes type 1 com os programas de aplicativos "
+"mencionados acima."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:50
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:54
+#, no-wrap
+msgid "Introduction"
+msgstr "Introdução"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:59
+msgid ""
+"There are many sources of fonts available, and one might ask how they might "
+"be used with FreeBSD. The answer can be found by carefully searching the "
+"documentation for the component that one would like to use. This is very "
+"time consuming, so this tutorial is an attempt to provide a shortcut for "
+"others who might be interested."
+msgstr ""
+"Existem muitas fontes disponíveis e alguém pode perguntar como usá-las com o "
+"FreeBSD. A resposta pode ser encontrada pesquisando cuidadosamente a "
+"documentação do componente que deseja utilizar. Isso pode ser muito "
+"demorado, portanto, este tutorial é uma tentativa de fornecer um atalho para "
+"outras pessoas interessadas."
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:61
+#, no-wrap
+msgid "Basic Terminology"
+msgstr "Terminologia Básica"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:65
+msgid ""
+"There are many different font formats and associated font file suffixes. A "
+"few that will be addressed here are:"
+msgstr ""
+"Existem muitos formatos diferentes de fontes e sufixos de arquivos de fontes "
+"associados. Alguns que serão abordados aqui são:"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:66
+#: documentation/content/en/articles/fonts/_index.adoc:110
+#, no-wrap
+msgid "[.filename]#.pfa#, [.filename]#.pfb#"
+msgstr "[.filename]#.pfa#, [.filename]#.pfb#"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:68
+msgid ""
+"PostScript(R) type 1 fonts. The [.filename]#.pfa# is the __A__scii form and "
+"[.filename]#.pfb# the __B__inary form."
+msgstr ""
+"Fontes PostScript(R) type 1. O arquivo [.filename]#.pfa# é a forma __A__scii "
+"e o arquivo [.filename]#.pfb# é a forma __B__inária."
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:69
+#, no-wrap
+msgid "[.filename]#.afm#"
+msgstr "[.filename]#.afm#"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:71
+msgid "The font metrics associated with a type 1 font."
+msgstr "As métricas da fonte associado com a fonte type 1."
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:72
+#, no-wrap
+msgid "[.filename]#.pfm#"
+msgstr "[.filename]#.pfm#"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:74
+msgid "The printer font metrics associated with a type 1 font."
+msgstr "As métricas da fonte para impressora associadas com a fonte type 1."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:75
+#: documentation/content/en/articles/fonts/_index.adoc:116
+#, no-wrap
+msgid "[.filename]#.ttf#"
+msgstr "[.filename]#.ttf#"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:77
+msgid "A TrueType(R) font"
+msgstr "Uma fonte TrueType(R)"
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:78
+#, no-wrap
+msgid "[.filename]#.fot#"
+msgstr "[.filename]#.fot#"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:80
+msgid "An indirect reference to a TrueType font (not an actual font)"
+msgstr ""
+"Uma referência indireta para uma fonte TrueType (não é realmente uma fonte)"
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:81
+#, no-wrap
+msgid "[.filename]#.fon#, [.filename]#.fnt#"
+msgstr "[.filename]#.fon#, [.filename]#.fnt#"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:83
+msgid "Bitmapped screen fonts"
+msgstr "Fontes de tela bitmapped"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:86
+msgid ""
+"The [.filename]#.fot# is used by Windows(R) as sort of a symbolic link to "
+"the actual TrueType(R) font ([.filename]#.ttf#) file. The [.filename]#.fon# "
+"font files are also used by Windows. I know of no way to use this font "
+"format with FreeBSD."
+msgstr ""
+"O arquivo [.filename]#.fot# é usado pelo Windows(R) como um tipo de link "
+"simbólico para o arquivo de fonte TrueType(R) real ([.filename]#.ttf#). Os "
+"arquivos de fonte [.filename]#.fon# também são usados pelo Windows. Não "
+"conheço uma maneira de usar esse formato de fonte no FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:88
+#, no-wrap
+msgid "What Font Formats Can I Use?"
+msgstr "Quais Formatos de Fonte eu Posso Utilizar?"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:94
+msgid ""
+"Which font file format is useful depends on the application being used. "
+"FreeBSD by itself uses no fonts. Application programs and/or drivers may "
+"make use of the font files. Here is a small cross reference of application/"
+"driver to the font type suffixes:"
+msgstr ""
+"O formato de arquivo de fonte mais adequado depende do aplicativo utilizado. "
+"O FreeBSD por si só não utiliza fontes. Programas de aplicativos e/ou "
+"drivers podem fazer uso dos arquivos de fonte. Aqui está uma pequena "
+"referência cruzada de aplicativos/drivers para os sufixos de tipo de fonte:"
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:95
+#, no-wrap
+msgid "Driver"
+msgstr "Driver"
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:97
+#, no-wrap
+msgid "vt"
+msgstr "vt"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:99
+msgid "[.filename]#.hex#"
+msgstr "[.filename]#.hex#"
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:100
+#, no-wrap
+msgid "syscons"
+msgstr "syscons"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:102
+msgid "[.filename]#.fnt#"
+msgstr "[.filename]#.fnt#"
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:103
+#, no-wrap
+msgid "Application"
+msgstr "Aplicação"
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:105
+#, no-wrap
+msgid "Ghostscript"
+msgstr "Ghostscript"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:107
+msgid "[.filename]#.pfa#, [.filename]#.pfb#, [.filename]#.ttf#"
+msgstr "[.filename]#.pfa#, [.filename]#.pfb#, [.filename]#.ttf#"
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:108
+#, no-wrap
+msgid "X11"
+msgstr "X11"
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:111
+#, no-wrap
+msgid "Groff"
+msgstr "Groff"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:113
+msgid "[.filename]#.pfa#, [.filename]#.afm#"
+msgstr "[.filename]#.pfa#, [.filename]#.afm#"
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:114
+#, no-wrap
+msgid "Povray"
+msgstr "Povray"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:121
+msgid ""
+"The [.filename]#.fnt# suffix is used quite frequently. I suspect that "
+"whenever someone wanted to create a specialized font file for their "
+"application, more often than not they chose this suffix. Therefore, it is "
+"likely that files with this suffix are not all the same format; "
+"specifically, the [.filename]#.fnt# files used by syscons under FreeBSD may "
+"not be the same format as a [.filename]#.fnt# one encounters in the MS-"
+"DOS(R)/Windows(R) environment. I have not made any attempt at using other [."
+"filename]#.fnt# files other than those provided with FreeBSD."
+msgstr ""
+"O sufixo [.filename]#.fnt# é bastante utilizado. Eu suspeito que sempre que "
+"alguém quisesse criar um arquivo de fonte especializado para seu aplicativo, "
+"na maioria das vezes escolhia esse sufixo. Portanto, é provável que os "
+"arquivos com esse sufixo não sejam todos do mesmo formato; especificamente, "
+"os arquivos [.filename]#.fnt# usados pelo syscons no FreeBSD podem não ser "
+"do mesmo formato que um [.filename]#.fnt# encontrado no ambiente MS-"
+"DOS(R)/Windows(R). Não fiz nenhuma tentativa de usar outros arquivos [."
+"filename]#.fnt# além daqueles fornecidos com o FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:123
+#, no-wrap
+msgid "Setting a Virtual Console to 80x60 Line Mode"
+msgstr "Configurando um Console Virtual para o Modo de Linhas 80x60"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:127
+msgid ""
+"First, an 8x8 font must be loaded. To do this, [.filename]#/etc/rc.conf# "
+"should contain the line (change the font name to an appropriate one for your "
+"locale):"
+msgstr ""
+"Primeiramente, uma fonte 8x8 deve ser carregada. Para isso, o arquivo [."
+"filename]#/etc/rc.conf# deve conter a linha (mude o nome da fonte para um "
+"apropriado para sua localização):"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:131
+#, no-wrap
+msgid "font8x8=\"iso-8x8\"\t\t# font 8x8 from /usr/share/syscons/fonts/* (or NO).\n"
+msgstr ""
+"font8x8=\"iso-8x8\"\t\t# font 8x8 from /usr/share/syscons/fonts/* (or NO).\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:134
+msgid "The command to actually switch the mode is man:vidcontrol[1]:"
+msgstr "O comando para realmente mudar o modo é man:vidcontrol[1]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:138
+#, no-wrap
+msgid "% vidcontrol VGA_80x60\n"
+msgstr "% vidcontrol VGA_80x60\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:142
+msgid ""
+"Various screen-oriented programs, such as man:vi[1], must be able to "
+"determine the current screen dimensions. As this is achieved this through "
+"`ioctl` calls to the console driver (such as man:syscons[4]) they will "
+"correctly determine the new screen dimensions."
+msgstr ""
+"Vários programas orientados a tela, como man:vi[1], devem ser capazes de "
+"determinar as dimensões atuais da tela. Como isso é alcançado por meio de "
+"chamadas `ioctl` para o driver do console (como man:syscons[4]), eles "
+"determinarão corretamente as novas dimensões da tela."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:145
+msgid ""
+"To make this more seamless, one can embed these commands in the startup "
+"scripts so it takes place when the system boots. To do this is add this "
+"line to [.filename]#/etc/rc.conf#."
+msgstr ""
+"Para tornar isso mais contínuo, é possível incorporar esses comandos nos "
+"scripts de inicialização para que ocorram durante a inicialização do "
+"sistema. Para fazer isso, adicione esta linha ao arquivo [.filename]#/etc/rc."
+"conf#."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:149
+#, no-wrap
+msgid "allscreens_flags=\"VGA_80x60\"\t# Set this vidcontrol mode for all virtual screens\n"
+msgstr ""
+"allscreens_flags=\"VGA_80x60\"\t# Set this vidcontrol mode for all virtual "
+"screens\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:152
+msgid "References: man:rc.conf[5], man:vidcontrol[1]."
+msgstr "Referências: man:rc.conf[5], man:vidcontrol[1]."
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:154
+#, no-wrap
+msgid "Using Type 1 Fonts with X11"
+msgstr "Usando fontes Type 1 com o X11"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:159
+msgid ""
+"X11 can use either the [.filename]#.pfa# or the [.filename]#.pfb# format "
+"fonts. The X11 fonts are located in various subdirectories under [."
+"filename]#/usr/X11R6/lib/X11/fonts#. Each font file is cross referenced to "
+"its X11 name by the contents of [.filename]#fonts.dir# in each directory."
+msgstr ""
+"O X11 pode usar fontes em formato [.filename]#.pfa# ou [.filename]#.pfb#. As "
+"fontes X11 estão localizadas em vários subdiretórios em [.filename]#/usr/"
+"X11R6/lib/X11/fonts#. Cada arquivo de fonte é cruzado com seu nome X11 pelos "
+"conteúdos de [.filename]#fonts.dir# em cada diretório."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:165
+msgid ""
+"There is already a directory named [.filename]#Type1#. The most straight "
+"forward way to add a new font is to put it into this directory. A better "
+"way is to keep all new fonts in a separate directory and use a symbolic link "
+"to the additional font. This allows one to more easily keep track of ones "
+"fonts without confusing them with the fonts that were originally provided. "
+"For example:"
+msgstr ""
+"Já existe um diretório chamado [.filename]#Type1#. A maneira mais direta de "
+"adicionar uma nova fonte é colocá-la neste diretório. Uma maneira melhor é "
+"manter todas as novas fontes em um diretório separado e usar um link "
+"simbólico para a fonte adicional. Isso permite que você mantenha um controle "
+"mais fácil das suas fontes sem confundir com as fontes fornecidas "
+"originalmente. Por exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:171
+#, no-wrap
+msgid ""
+"Create a directory to contain the font files\n"
+"% mkdir -p /usr/local/share/fonts/type1\n"
+"% cd /usr/local/share/fonts/type1\n"
+msgstr ""
+"Crie um diretório para conter os arquivos de fonte\n"
+"% mkdir -p /usr/local/share/fonts/type1\n"
+"% cd /usr/local/share/fonts/type1\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:173
+#, no-wrap
+msgid "Place the .pfa, .pfb and .afm files here\n"
+msgstr "Coloque aqui os arquivos .pfa, .pfb e .afm\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:175
+#, no-wrap
+msgid "One might want to keep readme files, and other documentation\n"
+msgstr "Pode ser desejável manter arquivos readme e outras documentações\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:179
+#, no-wrap
+msgid ""
+"for the fonts here also\n"
+"% cp /cdrom/fonts/atm/showboat/showboat.pfb .\n"
+"% cp /cdrom/fonts/atm/showboat/showboat.afm .\n"
+msgstr ""
+"para as fontes aqui também\n"
+"% cp /cdrom/fonts/atm/showboat/showboat.pfb .\n"
+"% cp /cdrom/fonts/atm/showboat/showboat.afm .\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:182
+#, no-wrap
+msgid ""
+"Maintain an index to cross reference the fonts\n"
+"% echo showboat - InfoMagic CICA, Dec 1994, /fonts/atm/showboat >>INDEX\n"
+msgstr ""
+"Mantenha um índice para cruzar as fontes de referência.\n"
+"% echo showboat - InfoMagic CICA, Dec 1994, /fonts/atm/showboat >>INDEX\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:186
+msgid ""
+"Now, to use a new font with X11, one must make the font file available and "
+"update the font name files. The X11 font names look like:"
+msgstr ""
+"Agora, para usar uma nova fonte com o X11, é necessário tornar o arquivo de "
+"fonte disponível e atualizar os arquivos de nome de fonte. Os nomes das "
+"fontes X11 se parecem com:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:200
+#, no-wrap
+msgid ""
+"-bitstream-charter-medium-r-normal-xxx-0-0-0-0-p-0-iso8859-1\n"
+" | | | | | | | | | | | | \\ \\\n"
+" | | | | | \\ \\ \\ \\ \\ \\ \\ +----+- character set\n"
+" | | | | \\ \\ \\ \\ \\ \\ \\ +- average width\n"
+" | | | | \\ \\ \\ \\ \\ \\ +- spacing\n"
+" | | | \\\t\\ \\ \\ \\ \\ +- vertical res.\n"
+" | | | \\\t \\\t\\ \\ \\ +- horizontal res.\n"
+" | | | \\\t \\\t \\ \\ +- points\n"
+" | | | \\ \\\t \\ +- pixels\n"
+" | | | \\ \\\t \\\n"
+" foundry family weight slant width additional style\n"
+msgstr ""
+"-bitstream-charter-medium-r-normal-xxx-0-0-0-0-p-0-iso8859-1\n"
+" | | | | | | | | | | | | \\ \\\n"
+" | | | | | \\ \\ \\ \\ \\ \\ \\ +----+- "
+"character set\n"
+" | | | | \\ \\ \\ \\ \\ \\ \\ +- average width\n"
+" | | | | \\ \\ \\ \\ \\ \\ +- spacing\n"
+" | | | \\\t\\ \\ \\ \\ \\ +- vertical res.\n"
+" | | | \\\t \\\t\\ \\ \\ +- horizontal res.\n"
+" | | | \\\t \\\t \\ \\ +- points\n"
+" | | | \\ \\\t \\ +- pixels\n"
+" | | | \\ \\\t \\\n"
+" foundry family weight slant width additional style\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:206
+msgid ""
+"A new name needs to be created for each new font. If you have some "
+"information from the documentation that accompanied the font, then it could "
+"serve as the basis for creating the name. If there is no information, then "
+"you can get some idea by using man:strings[1] on the font file. For example:"
+msgstr ""
+"Um novo nome precisa ser criado para cada nova fonte. Se você tiver alguma "
+"informação da documentação que acompanha a fonte, ela pode servir como base "
+"para criar o nome. Se não houver informações disponíveis, você pode ter uma "
+"ideia usando o comando man:strings[1] no arquivo de fonte. Por exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:234
+#, no-wrap
+msgid ""
+"% strings showboat.pfb | more\n"
+"%!FontType1-1.0: Showboat 001.001\n"
+"%%CreationDate: 1/15/91 5:16:03 PM\n"
+"%%VMusage: 1024 45747\n"
+"% Generated by Fontographer 3.1\n"
+"% Showboat\n"
+" 1991 by David Rakowski. Alle Rechte Vorbehalten.\n"
+"FontDirectory/Showboat known{/Showboat findfont dup/UniqueID known{dup\n"
+"/UniqueID get 4962377 eq exch/FontType get 1 eq and}{pop false}ifelse\n"
+"{save true}{false}ifelse}{false}ifelse\n"
+"12 dict begin\n"
+"/FontInfo 9 dict dup begin\n"
+" /version (001.001) readonly def\n"
+" /FullName (Showboat) readonly def\n"
+" /FamilyName (Showboat) readonly def\n"
+" /Weight (Medium) readonly def\n"
+" /ItalicAngle 0 def\n"
+" /isFixedPitch false def\n"
+" /UnderlinePosition -106 def\n"
+" /UnderlineThickness 16 def\n"
+" /Notice (Showboat\n"
+" 1991 by David Rakowski. Alle Rechte Vorbehalten.) readonly def\n"
+"end readonly def\n"
+"/FontName /Showboat def\n"
+"--stdin--\n"
+msgstr ""
+"% strings showboat.pfb | more\n"
+"%!FontType1-1.0: Showboat 001.001\n"
+"%%CreationDate: 1/15/91 5:16:03 PM\n"
+"%%VMusage: 1024 45747\n"
+"% Generated by Fontographer 3.1\n"
+"% Showboat\n"
+" 1991 by David Rakowski. Alle Rechte Vorbehalten.\n"
+"FontDirectory/Showboat known{/Showboat findfont dup/UniqueID known{dup\n"
+"/UniqueID get 4962377 eq exch/FontType get 1 eq and}{pop false}ifelse\n"
+"{save true}{false}ifelse}{false}ifelse\n"
+"12 dict begin\n"
+"/FontInfo 9 dict dup begin\n"
+" /version (001.001) readonly def\n"
+" /FullName (Showboat) readonly def\n"
+" /FamilyName (Showboat) readonly def\n"
+" /Weight (Medium) readonly def\n"
+" /ItalicAngle 0 def\n"
+" /isFixedPitch false def\n"
+" /UnderlinePosition -106 def\n"
+" /UnderlineThickness 16 def\n"
+" /Notice (Showboat\n"
+" 1991 by David Rakowski. Alle Rechte Vorbehalten.) readonly def\n"
+"end readonly def\n"
+"/FontName /Showboat def\n"
+"--stdin--\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:237
+msgid "Using this information, a possible name might be:"
+msgstr "Usando essas informações, um possível nome poderia ser:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:241
+#, no-wrap
+msgid "-type1-Showboat-medium-r-normal-decorative-0-0-0-0-p-0-iso8859-1\n"
+msgstr "-type1-Showboat-medium-r-normal-decorative-0-0-0-0-p-0-iso8859-1\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:244
+msgid "The components of our name are:"
+msgstr "Os componentes do nosso nome são:"
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:245
+#, no-wrap
+msgid "Foundry"
+msgstr "Companhia"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:247
+msgid "Lets just name all the new fonts `type1`."
+msgstr "Vamos apenas nomear todas as novas fontes como `type1`."
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:248
+#, no-wrap
+msgid "Family"
+msgstr "Família"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:250
+msgid "The name of the font."
+msgstr "O nome da fonte."
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:251
+#, no-wrap
+msgid "Weight"
+msgstr "Densidade"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:254
+msgid ""
+"Normal, bold, medium, semibold, etc. From the man:strings[1] output above, "
+"it appears that this font has a weight of __medium__."
+msgstr ""
+"Normal, negrito (bold), médio (medium), seminegrito (semibold), etc. Pelos "
+"resultados do comando man:strings[1] mostrados acima, parece que esta fonte "
+"tem um peso __médio__ (medium)."
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:255
+#, no-wrap
+msgid "Slant"
+msgstr "Inclinação"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:258
+msgid ""
+"__r__oman, __i__talic, __o__blique, etc. Since the _ItalicAngle_ is zero, "
+"_roman_ will be used."
+msgstr ""
+"__r__omano (roman), __i__talico (italic), __o__blíquo (oblique), etc. Já que "
+"o ângulo de itálico (_ItalicAngle_) é zero, será usada a versão romana "
+"(_roman_)."
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:259
+#, no-wrap
+msgid "Width"
+msgstr "Largura"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:262
+msgid ""
+"Normal, wide, condensed, extended, etc. Until it can be examined, the "
+"assumption will be __normal__."
+msgstr ""
+"Normal, ampla (wide), condensada (condensed), estendida (extended), etc. Até "
+"que possa ser examinada, a suposição será de que a fonte é __normal__."
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:263
+#, no-wrap
+msgid "Additional style"
+msgstr "Estilo Adicional"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:265
+msgid ""
+"Usually omitted, but this will indicate that the font contains decorative "
+"capital letters."
+msgstr ""
+"Frequentemente omitido, mas isso indicará que a fonte possui letras "
+"maiúsculas decorativas."
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:266
+#, no-wrap
+msgid "Spacing"
+msgstr "Espaçamento"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:269
+msgid ""
+"proportional or monospaced. _Proportional_ is used since _isFixedPitch_ is "
+"false."
+msgstr ""
+"Proporcional (proportional) ou espaçamento fixo (monospaced). Será usada a "
+"versão _proporcional_, já que o valor de _isFixedPitch_ é falso."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:273
+msgid ""
+"All of these names are arbitrary, but one should strive to be compatible "
+"with the existing conventions. A font is referenced by name with possible "
+"wild cards by an X11 program, so the name chosen should make some sense. "
+"One might begin by simply using"
+msgstr ""
+"Todos esses nomes são arbitrários, mas deve-se procurar ser compatível com "
+"as convenções existentes. Uma fonte é referenciada pelo nome, com possíveis "
+"curingas (wildcards) por um programa X11, então o nome escolhido deve fazer "
+"algum sentido. Pode-se começar simplesmente usando"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:277
+#, no-wrap
+msgid "...-normal-r-normal-...-p-...\n"
+msgstr "...-normal-r-normal-...-p-...\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:280
+msgid ""
+"as the name, and then use man:xfontsel[1] to examine it and adjust the name "
+"based on the appearance of the font."
+msgstr ""
+"esse nome, e depois usar o comando man:xfontsel[1] para examiná-lo e ajustar "
+"o nome com base na aparência da fonte."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:282
+msgid "So, to complete our example:"
+msgstr "Então, para completar nosso exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:288
+#, no-wrap
+msgid ""
+"Make the font accessible to X11\n"
+"% cd /usr/X11R6/lib/X11/fonts/Type1\n"
+"% ln -s /usr/local/share/fonts/type1/showboat.pfb .\n"
+msgstr ""
+"Torne a fonte acessível ao X11.\n"
+"% cd /usr/X11R6/lib/X11/fonts/Type1\n"
+"% ln -s /usr/local/share/fonts/type1/showboat.pfb .\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:301
+#, no-wrap
+msgid ""
+"Edit fonts.dir and fonts.scale, adding the line describing the font\n"
+"and incrementing the number of fonts which is found on the first line.\n"
+"% ex fonts.dir\n"
+":1p\n"
+"25\n"
+":1c\n"
+"26\n"
+".\n"
+":$a\n"
+"showboat.pfb -type1-showboat-medium-r-normal-decorative-0-0-0-0-p-0-iso8859-1\n"
+".\n"
+":wq\n"
+msgstr ""
+"Edite o arquivo fonts.dir e fonts.scale, adicionando a linha que descreve a "
+"fonte \n"
+"e incrementando o número de fontes que é encontrado na primeira linha.\n"
+"% ex fonts.dir\n"
+":1p\n"
+"25\n"
+":1c\n"
+"26\n"
+".\n"
+":$a\n"
+"showboat.pfb -type1-showboat-medium-r-normal-decorative-0-0-0-0-p-0-iso8859-"
+"1\n"
+".\n"
+":wq\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:304
+#, no-wrap
+msgid ""
+"fonts.scale seems to be identical to fonts.dir...\n"
+"% cp fonts.dir fonts.scale\n"
+msgstr ""
+"O arquivo fonts.scale parece ser idêntico ao fonts.dir...\n"
+"% cp fonts.dir fonts.scale\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:307
+#, no-wrap
+msgid ""
+"Tell X11 that things have changed\n"
+"% xset fp rehash\n"
+msgstr ""
+"Informe ao X11 que as coisas mudaram.\n"
+"% xset fp rehash\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:310
+#, no-wrap
+msgid ""
+"Examine the new font\n"
+"% xfontsel -pattern -type1-*\n"
+msgstr ""
+"Examine a nova fonte\n"
+"% xfontsel -pattern -type1-*\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:313
+msgid ""
+"References: man:xfontsel[1], man:xset[1], The X Windows System in a "
+"Nutshell, http://www.ora.com/[O'Reilly & Associates]."
+msgstr ""
+"Referências: man:xfontsel[1], man:xset[1], The X Windows System in a "
+"Nutshell, http://www.ora.com/[O'Reilly & Associates]."
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:315
+#, no-wrap
+msgid "Using Type 1 Fonts with Ghostscript"
+msgstr "Usando Fontes Type 1 com Ghostscript"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:321
+msgid ""
+"Ghostscript references a font via its [.filename]#Fontmap#. This must be "
+"modified in a similar way to the X11 [.filename]#fonts.dir#. Ghostscript "
+"can use either the [.filename]#.pfa# or the [.filename]#.pfb# format fonts. "
+"Using the font from the previous example, here is how to use it with "
+"Ghostscript:"
+msgstr ""
+"O Ghostscript referencia uma fonte por meio de seu arquivo [."
+"filename]#Fontmap#. Este arquivo deve ser modificado de maneira semelhante "
+"ao arquivo [.filename]#fonts.dir# do X11. O Ghostscript pode usar fontes em "
+"formato [.filename]#.pfa# ou [.filename]#.pfb#. Usando a fonte do exemplo "
+"anterior, aqui está como usá-la com o Ghostscript:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:327
+#, no-wrap
+msgid ""
+"Put the font in Ghostscript's font directory\n"
+"% cd /usr/local/share/ghostscript/fonts\n"
+"% ln -s /usr/local/share/fonts/type1/showboat.pfb .\n"
+msgstr ""
+"Coloque a fonte no diretório de fontes do Ghostscript.\n"
+"% cd /usr/local/share/ghostscript/fonts\n"
+"% ln -s /usr/local/share/fonts/type1/showboat.pfb .\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:335
+#, no-wrap
+msgid ""
+"Edit Fontmap so Ghostscript knows about the font\n"
+"% cd /usr/local/share/ghostscript/4.01\n"
+"% ex Fontmap\n"
+":$a\n"
+"/Showboat (showboat.pfb) ; % From CICA /fonts/atm/showboat\n"
+".\n"
+":wq\n"
+msgstr ""
+"Edite o arquivo Fontmap para que o Ghostscript saiba sobre a fonte\n"
+"% cd /usr/local/share/ghostscript/4.01\n"
+"% ex Fontmap\n"
+":$a\n"
+"/Showboat (showboat.pfb) ; % From CICA /fonts/atm/showboat\n"
+".\n"
+":wq\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:351
+#, no-wrap
+msgid ""
+"Use Ghostscript to examine the font\n"
+"% gs prfont.ps\n"
+"Aladdin Ghostscript 4.01 (1996-7-10)\n"
+"Copyright (C) 1996 Aladdin Enterprises, Menlo Park, CA. All rights\n"
+"reserved.\n"
+"This software comes with NO WARRANTY: see the file PUBLIC for details.\n"
+"Loading Times-Roman font from /usr/local/share/ghostscript/fonts/tir_____.pfb...\n"
+" /1899520 581354 1300084 13826 0 done.\n"
+"GS>Showboat DoFont\n"
+"Loading Showboat font from /usr/local/share/ghostscript/fonts/showboat.pfb...\n"
+" 1939688 565415 1300084 16901 0 done.\n"
+">>showpage, press <return> to continue<<\n"
+">>showpage, press <return> to continue<<\n"
+">>showpage, press <return> to continue<<\n"
+"GS>quit\n"
+msgstr ""
+"Use o Ghostscript para examinar a fonte.\n"
+"% gs prfont.ps\n"
+"Aladdin Ghostscript 4.01 (1996-7-10)\n"
+"Copyright (C) 1996 Aladdin Enterprises, Menlo Park, CA. All rights\n"
+"reserved.\n"
+"This software comes with NO WARRANTY: see the file PUBLIC for details.\n"
+"Loading Times-Roman font from /usr/local/share/ghostscript/fonts/tir_____."
+"pfb...\n"
+" /1899520 581354 1300084 13826 0 done.\n"
+"GS>Showboat DoFont\n"
+"Loading Showboat font from /usr/local/share/ghostscript/fonts/showboat.pfb..."
+"\n"
+" 1939688 565415 1300084 16901 0 done.\n"
+">>showpage, press <return> to continue<<\n"
+">>showpage, press <return> to continue<<\n"
+">>showpage, press <return> to continue<<\n"
+"GS>quit\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:354
+msgid "References: [.filename]#fonts.txt# in the Ghostscript 4.01 distribution"
+msgstr ""
+"Referências: arquivo [.filename]#fonts.txt# na distribuição do Ghostscript 4."
+"01"
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:356
+#, no-wrap
+msgid "Using Type 1 Fonts with Groff"
+msgstr "Usando Fontes Type 1 com o Groff"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:363
+msgid ""
+"Now that the new font can be used by both X11 and Ghostscript, how can one "
+"use the new font with groff? First of all, since we are dealing with type 1 "
+"PostScript(R) fonts, the groff device that is applicable is the _ps_ "
+"device. A font file must be created for each font that groff can use. A "
+"groff font name is just a file in [.filename]#/usr/share/groff_font/devps#. "
+"With our example, the font file could be [.filename]#/usr/share/groff_font/"
+"devps/SHOWBOAT#. The file must be created using tools provided by groff."
+msgstr ""
+"Agora que a nova fonte pode ser usada tanto pelo X11 quanto pelo "
+"Ghostscript, como se pode usá-la com o groff? Em primeiro lugar, uma vez que "
+"estamos lidando com fontes PostScript(R) type 1, o dispositivo groff que é "
+"aplicável é o dispositivo _ps_. Um arquivo de fonte deve ser criado para "
+"cada fonte que o groff possa usar. Um nome de fonte groff é apenas um "
+"arquivo em [.filename]#/usr/share/groff_font/devps#. Em nosso exemplo, o "
+"arquivo de fonte poderia ser [.filename]#/usr/share/groff_font/devps/"
+"SHOWBOAT#. O arquivo deve ser criado usando ferramentas fornecidas pelo "
+"groff."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:367
+msgid ""
+"The first tool is `afmtodit`. This is not normally installed, so it must be "
+"retrieved from the source distribution. I found I had to change the first "
+"line of the file, so I did:"
+msgstr ""
+"A primeira ferramenta é `afmtodit`. Ela não costuma ser instalada por "
+"padrão, então é necessário obtê-la da distribuição de origem. Descobri que "
+"precisei alterar a primeira linha do arquivo, então fiz o seguinte:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:376
+#, no-wrap
+msgid ""
+"% cp /usr/src/gnu/usr.bin/groff/afmtodit/afmtodit.pl /tmp\n"
+"% ex /tmp/afmtodit.pl\n"
+":1c\n"
+"#!/usr/bin/perl -P-\n"
+".\n"
+":wq\n"
+msgstr ""
+"% cp /usr/src/gnu/usr.bin/groff/afmtodit/afmtodit.pl /tmp\n"
+"% ex /tmp/afmtodit.pl\n"
+":1c\n"
+"#!/usr/bin/perl -P-\n"
+".\n"
+":wq\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:380
+msgid ""
+"This tool will create the groff font file from the metrics file ([."
+"filename]#.afm# suffix.) Continuing with our example:"
+msgstr ""
+"Essa ferramenta criará o arquivo de fonte do groff a partir do arquivo de "
+"métricas (sufixo [.filename]#.afm#). Continuando com nosso exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:388
+#, no-wrap
+msgid ""
+"Many .afm files are in Mac format... ^M delimited lines\n"
+"We need to convert them to UNIX(R) style ^J delimited lines\n"
+"% cd /tmp\n"
+"% cat /usr/local/share/fonts/type1/showboat.afm |\n"
+"\ttr '\\015' '\\012' >showboat.afm\n"
+msgstr ""
+"Muitos arquivos .afm estão no formato Mac, com linhas delimitadas por ^M. \n"
+"É necessário convertê-los para o estilo UNIX(R), com linhas delimitadas por "
+"^J.\n"
+"% cd /tmp\n"
+"% cat /usr/local/share/fonts/type1/showboat.afm |\n"
+"\ttr '\\015' '\\012' >showboat.afm\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:392
+#, no-wrap
+msgid ""
+"Now create the groff font file\n"
+"% cd /usr/share/groff_font/devps\n"
+"% /tmp/afmtodit.pl -d DESC -e text.enc /tmp/showboat.afm generate/textmap SHOWBOAT\n"
+msgstr ""
+"Agora crie o arquivo de fonte do groff.\n"
+"% cd /usr/share/groff_font/devps\n"
+"% /tmp/afmtodit.pl -d DESC -e text.enc /tmp/showboat.afm generate/textmap "
+"SHOWBOAT\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:395
+msgid "The font can now be referenced with the name SHOWBOAT."
+msgstr "A fonte agora pode ser referenciada pelo nome SHOWBOAT."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:402
+msgid ""
+"If Ghostscript is used to drive the printers on the system, then nothing "
+"more needs to be done. However, if true PostScript(R) printers are used, "
+"then the font must be downloaded to the printer in order for the font to be "
+"used (unless the printer happens to have the showboat font built in or on an "
+"accessible font disk.) The final step is to create a downloadable font. "
+"The `pfbtops` tool is used to create the [.filename]#.pfa# format of the "
+"font, and [.filename]#download# is modified to reference the new font. The "
+"[.filename]#download# must reference the internal name of the font. This "
+"can easily be determined from the groff font file as illustrated:"
+msgstr ""
+"Se o Ghostscript for usado para controlar as impressoras no sistema, então "
+"nada mais precisa ser feito. No entanto, se forem usadas impressoras "
+"PostScript(R) reais, a fonte deve ser baixada para a impressora para que a "
+"fonte seja usada (a menos que a impressora tenha a fonte showboat "
+"incorporada ou em um disco de fonte acessível). O último passo é criar uma "
+"fonte transferível. A ferramenta `pfbtops` é usada para criar o formato [."
+"filename]#.pfa# da fonte, e o arquivo [.filename]#download# é modificado "
+"para referenciar a nova fonte. O arquivo [.filename]#download# deve fazer "
+"referência ao nome interno da fonte. Isso pode ser facilmente determinado a "
+"partir do arquivo de fonte do groff, como ilustrado:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:407
+#, no-wrap
+msgid ""
+"Create the .pfa font file\n"
+"% pfbtops /usr/local/share/fonts/type1/showboat.pfb >showboat.pfa\n"
+msgstr ""
+"Crie o arquivo de fonte .pfa.\n"
+"% pfbtops /usr/local/share/fonts/type1/showboat.pfb >showboat.pfa\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:410
+msgid ""
+"Of course, if [.filename]#.pfa# is already available, just use a symbolic "
+"link to reference it."
+msgstr ""
+"Claro, se o arquivo [.filename]#.pfa# já estiver disponível, basta usar um "
+"link simbólico para fazer referência a ele."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:422
+#, no-wrap
+msgid ""
+"Get the internal font name\n"
+"% fgrep internalname SHOWBOAT\n"
+"internalname Showboat\n"
+"Tell groff that the font must be downloaded\n"
+"% ex download\n"
+":$a\n"
+"Showboat showboat.pfa\n"
+".\n"
+":wq\n"
+msgstr ""
+"Obtenha o nome interno da fonte\n"
+"% fgrep internalname SHOWBOAT\n"
+"internalname Showboat\n"
+"Informe ao groff que a fonte deve ser baixada.\n"
+"% ex download\n"
+":$a\n"
+"Showboat showboat.pfa\n"
+".\n"
+":wq\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:425
+msgid "To test the font:"
+msgstr "Para testar a fonte:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:456
+#, no-wrap
+msgid ""
+"% cd /tmp\n"
+"% cat >example.t <<EOF\n"
+".sp 5\n"
+".ps 16\n"
+"This is an example of the Showboat font:\n"
+".br\n"
+".ps 48\n"
+".vs (\\n(.s+2)p\n"
+".sp\n"
+".ft SHOWBOAT\n"
+"ABCDEFGHI\n"
+".br\n"
+"JKLMNOPQR\n"
+".br\n"
+"STUVWXYZ\n"
+".sp\n"
+".ps 16\n"
+".vs (\\n(.s+2)p\n"
+".fp 5 SHOWBOAT\n"
+".ft R\n"
+"To use it for the first letter of a paragraph, it will look like:\n"
+".sp 50p\n"
+"\\s(48\\f5H\\s0\\fRere is the first sentence of a paragraph that uses the\n"
+"showboat font as its first letter.\n"
+"Additional vertical space must be used to allow room for the larger\n"
+"letter.\n"
+"EOF\n"
+"% groff -Tps example.t >example.ps\n"
+msgstr ""
+"% cd /tmp\n"
+"% cat >exemplo.t <<EOF\n"
+".sp 5\n"
+".ps 16\n"
+"Este é um exemplo da fonte Showboat:\n"
+".br\n"
+".ps 48\n"
+".vs (\\n"
+"(.s+2)p\n"
+".sp\n"
+".ft SHOWBOAT\n"
+"ABCDEFGHI\n"
+".br\n"
+"JKLMNOPQR\n"
+".br\n"
+"STUVWXYZ\n"
+".sp\n"
+".ps 16\n"
+".vs (\\n"
+"(.s+2)p\n"
+".fp 5 SHOWBOAT\n"
+".ft R\n"
+"Para usá-lo como a primeira letra de um parágrafo, ficará assim:\n"
+".sp 50p\n"
+"\\s(48\\f5H\\s0\\fRqui está a primeira frase de um parágrafo que usa a\n"
+"fonte showboat como a primeira letra.\n"
+"Deve-se usar espaço vertical adicional para permitir espaço para a letra "
+"maior.\n"
+"EOF\n"
+"% groff -Tps example.t > exemplo.ps\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:459
+#, no-wrap
+msgid ""
+"To use ghostscript/ghostview\n"
+"% ghostview example.ps\n"
+msgstr ""
+"Para usar o ghostscript/ghostview\n"
+"% ghostview example.ps\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:462
+#, no-wrap
+msgid ""
+"To print it\n"
+"% lpr -Ppostscript example.ps\n"
+msgstr ""
+"Para imprimir:\n"
+"% lpr -Ppostscript example.ps\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:465
+msgid ""
+"References: [.filename]#/usr/src/gnu/usr.bin/groff/afmtodit/afmtodit.man#, "
+"man:groff_font[5], man:groff_char[7], man:pfbtops[1]."
+msgstr ""
+"Referências: [.filename]#/usr/src/gnu/usr.bin/groff/afmtodit/afmtodit.man#, "
+"man:groff_font[5], man:groff_char[7], man:pfbtops[1]."
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:467
+#, no-wrap
+msgid "Converting TrueType Fonts to a groff/PostScript Format For groff"
+msgstr ""
+"Convertendo Fontes TrueType para um Formato groff/PostScript para o Groff"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:471
+msgid ""
+"This potentially requires a bit of work, simply because it depends on some "
+"utilities that are not installed as part of the base system. They are:"
+msgstr ""
+"Isso pode requerer um pouco de trabalho, simplesmente porque depende de "
+"algumas ferramentas que não são instaladas como parte do sistema base. Elas "
+"são:"
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:472
+#, no-wrap
+msgid "`ttf2pf`"
+msgstr "`ttf2pf`"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:475
+msgid ""
+"TrueType to PostScript conversion utilities. This allows conversion of a "
+"TrueType font to an ascii font metric ([.filename]#.afm#) file."
+msgstr ""
+"Utilitários de conversão de TrueType para PostScript. Isso permite a "
+"conversão de uma fonte TrueType para um arquivo de métricas de fonte ascii (["
+".filename]#.afm#)."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:479
+msgid ""
+"Currently available at http://sunsite.icm.edu.pl/pub/GUST/contrib/BachoTeX98/"
+"ttf2pf/[http://sunsite.icm.edu.pl/pub/GUST/contrib/BachoTeX98/ttf2pf/]. "
+"Note: These files are PostScript programs and must be downloaded to disk by "
+"holding down kbd:[Shift] when clicking on the link. Otherwise, your browser "
+"may try to launch ghostview to view them."
+msgstr ""
+"Disponível atualmente em http://sunsite.icm.edu.pl/pub/GUST/contrib/"
+"BachoTeX98/ttf2pf/[http://sunsite.icm.edu.pl/pub/GUST/contrib/BachoTeX98/"
+"ttf2pf/]. Observe: esses arquivos são programas PostScript e devem ser "
+"baixados para o disco mantendo pressionada a tecla kbd:[Shift] ao clicar no "
+"link. Caso contrário, o seu navegador pode tentar abrir o ghostview para "
+"visualizá-los."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:481
+msgid "The files of interest are:"
+msgstr "Os arquivos de interesse são:"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:483
+msgid "[.filename]#GS_TTF.PS#"
+msgstr "[.filename]#GS_TTF.PS#"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:484
+msgid "[.filename]#PF2AFM.PS#"
+msgstr "[.filename]#PF2AFM.PS#"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:485
+msgid "[.filename]#ttf2pf.ps#"
+msgstr "[.filename]#ttf2pf.ps#"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:491
+msgid ""
+"The funny upper/lower case is due to their being intended also for DOS "
+"shells. [.filename]#ttf2pf.ps# makes use of the others as upper case, so "
+"any renaming must be consistent with this. (Actually, [.filename]#GS_TTF."
+"PS# and [.filename]#PFS2AFM.PS# are supposedly part of the Ghostscript "
+"distribution, but it is just as easy to use these as an isolated utility. "
+"FreeBSD does not seem to include the latter.) You also may want to have "
+"these installed to [.filename]#/usr/local/share/groff_font/devps#(?)."
+msgstr ""
+"A utilização de letras maiúsculas e minúsculas engraçadas deve-se ao fato de "
+"serem destinadas também para shells do DOS. O arquivo [.filename]#ttf2pf.ps# "
+"faz uso dos outros em letras maiúsculas, então qualquer renomeação deve ser "
+"consistente com isso. (Na verdade, os arquivos [.filename]#GS_TTF.PS# e [."
+"filename]#PFS2AFM.PS# supostamente fazem parte da distribuição do "
+"Ghostscript, mas é fácil usá-los como uma fonte isolada. O FreeBSD não "
+"parece incluir o último.) Você também pode querer tê-los instalados em [."
+"filename]#/usr/local/share/groff_font/devps#(?)."
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:492
+#, no-wrap
+msgid "`afmtodit`"
+msgstr "`afmtodit`"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:495
+msgid ""
+"Creates font files for use with groff from ascii font metrics file. This "
+"usually resides in the directory, [.filename]#/usr/src/contrib/groff/"
+"afmtodit#, and requires some work to get going."
+msgstr ""
+"A ferramenta `afmtodit` é utilizada para criar arquivos de fonte para o "
+"groff a partir de um arquivo métrico de fonte em formato ASCII ([.filename]#."
+"afm#). Normalmente, essa ferramenta está localizada no diretório [."
+"filename]#/usr/src/contrib/groff/afmtodit#, mas normalmente exige alguma "
+"configuração para funcionar corretamente."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/fonts/_index.adoc:499
+msgid ""
+"If you are paranoid about working in the [.filename]#/usr/src# tree, simply "
+"copy the contents of the above directory to a work location."
+msgstr ""
+"Se você está preocupado com a segurança de trabalhar no diretório [."
+"filename]#/usr/src#, basta copiar o conteúdo do diretório acima para uma "
+"localização de trabalho."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:503
+msgid "In the work area, you will need to make the utility. Just type:"
+msgstr ""
+"Na área de trabalho, você precisará compilar o utilitário. Apenas digite:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:507
+#, no-wrap
+msgid "# make -f Makefile.sub afmtodit\n"
+msgstr "# make -f Makefile.sub afmtodit\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:510
+msgid ""
+"You may also need to copy [.filename]#/usr/contrib/groff/devps/generate/"
+"textmap# to [.filename]#/usr/share/groff_font/devps/generate# if it does not "
+"already exist."
+msgstr ""
+"Você também pode precisar copiar o arquivo [.filename]#/usr/contrib/groff/"
+"devps/generate/textmap# para [.filename]#/usr/share/groff_font/devps/"
+"generate# se ele ainda não existir."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:512
+msgid "Once all these utilities are in place, you are ready to commence:"
+msgstr ""
+"Depois que todos esses utilitários estiverem no lugar, você está pronto para "
+"começar:"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:514
+msgid "Create [.filename]#.afm# by typing:"
+msgstr "Crie o arquivo [.filename]#.afm# digitando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:518
+#, no-wrap
+msgid "% gs -dNODISPLAY -q -- ttf2pf.ps TTF_name PS_font_name AFM_name\n"
+msgstr "% gs -dNODISPLAY -q -- ttf2pf.ps TTF_name PS_font_name AFM_name\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:521
+msgid ""
+"Where, _TTF_name_ is your TrueType font file, _PS_font_name_ is the file "
+"name for [.filename]#.pfa#, _AFM_name_ is the name you wish for [.filename]#."
+"afm#. If you do not specify output file names for the [.filename]#.pfa# or [."
+"filename]#.afm# files, then default names will be generated from the "
+"TrueType font file name."
+msgstr ""
+"Onde _TTF_nome_ é o nome do arquivo da sua fonte TrueType, _nome_fonte_PS_ é "
+"o nome do arquivo para [.filename]#.pfa#, _nome_AFM_ é o nome desejado para ["
+".filename]#.afm#. Se você não especificar os nomes de arquivo de saída para "
+"os arquivos [.filename]#.pfa# ou [.filename]#.afm#, então nomes padrão serão "
+"gerados a partir do nome do arquivo da fonte TrueType."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:524
+msgid ""
+"This also produces a [.filename]#.pfa#, the ascii PostScript font metrics "
+"file ([.filename]#.pfb# is for the binary form). This will not be needed, "
+"but could (I think) be useful for a fontserver."
+msgstr ""
+"Isso também produz um arquivo [.filename]#.pfa#, o arquivo de métricas de "
+"fonte PostScript em formato ASCII ([.filename]#.pfb# é para a forma binária)"
+". Isso não será necessário, mas poderia (eu acredito) ser útil para um "
+"servidor de fontes."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:526
+msgid ""
+"For example, to convert the 30f9 Barcode font using the default file names, "
+"use the following command:"
+msgstr ""
+"Por exemplo, para converter a fonte de código de barras 30f9 usando o nome "
+"de arquivo padrão, use o seguinte comando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:534
+#, no-wrap
+msgid ""
+"% gs -dNODISPLAY -- ttf2pf.ps 3of9.ttf\n"
+"Aladdin Ghostscript 5.10 (1997-11-23)\n"
+"Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.\n"
+"This software comes with NO WARRANTY: see the file PUBLIC for details.\n"
+"Converting 3of9.ttf to 3of9.pfa and 3of9.afm.\n"
+msgstr ""
+"% gs -dNODISPLAY -- ttf2pf.ps 3of9.ttf\n"
+"Aladdin Ghostscript 5.10 (1997-11-23)\n"
+"Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved."
+"\n"
+"This software comes with NO WARRANTY: see the file PUBLIC for details.\n"
+"Converting 3of9.ttf to 3of9.pfa and 3of9.afm.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:537
+msgid ""
+"If you want the converted fonts to be stored in [.filename]#A.pfa# and [."
+"filename]#B.afm#, then use this command:"
+msgstr ""
+"Se você quer que as fontes convertidas sejam armazenadas em [.filename]#A."
+"pfa# e [.filename]#B.afm#, use o seguinte comando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:545
+#, no-wrap
+msgid ""
+"% gs -dNODISPLAY -- ttf2pf.ps 3of9.ttf A B\n"
+"Aladdin Ghostscript 5.10 (1997-11-23)\n"
+"Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.\n"
+"This software comes with NO WARRANTY: see the file PUBLIC for details.\n"
+"Converting 3of9.ttf to A.pfa and B.afm.\n"
+msgstr ""
+"% gs -dNODISPLAY -- ttf2pf.ps 3of9.ttf A B\n"
+"Aladdin Ghostscript 5.10 (1997-11-23)\n"
+"Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved."
+"\n"
+"This software comes with NO WARRANTY: see the file PUBLIC for details.\n"
+"Converting 3of9.ttf to A.pfa and B.afm.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:548
+msgid "Create the groff PostScript file:"
+msgstr "Crie o arquivo groff PostScript:"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:552
+msgid ""
+"Change directories to [.filename]#/usr/share/groff_font/devps# so as to make "
+"the following command easier to execute. You will probably need root "
+"privileges for this. (Or, if you are paranoid about working there, make "
+"sure you reference the files [.filename]#DESC#, [.filename]#text.enc# and [."
+"filename]#generate/textmap# as being in this directory.)"
+msgstr ""
+"Acesse o diretório `/usr/share/groff_font/devps` para facilitar a execução "
+"do seguinte comando. É provável que você precise de privilégios de root para "
+"executá-lo. (Ou, se você é paranoico em relação a trabalhar lá, certifique-"
+"se de que os arquivos `DESC`, `text.enc` e `generate/textmap` estejam "
+"localizados neste diretório.)"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:556
+#, no-wrap
+msgid "% afmtodit -d DESC -e text.enc file.afm generate/textmap PS_font_name\n"
+msgstr "% afmtodit -d DESC -e text.enc file.afm generate/textmap PS_font_name\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:560
+msgid ""
+"Where, [.filename]#file.afm# is the _AFM_name_ created by `ttf2pf.ps` above, "
+"and _PS_font_name_ is the font name used from that command, as well as the "
+"name that man:groff[1] will use for references to this font. For example, "
+"assuming you used the first `tiff2pf.ps` above, then the 3of9 Barcode font "
+"can be created using the command:"
+msgstr ""
+"Onde, [.filename]#file.afm# é o _AFM_name_ criado pelo `ttf2pf.ps` acima, e "
+"_PS_font_name_ é o nome da fonte usado no comando anterior, bem como o nome "
+"que man:groff[1] usará para referenciar essa fonte. Por exemplo, assumindo "
+"que você usou o primeiro `tiff2pf.ps` acima, a fonte Barcode 3of9 pode ser "
+"criada usando o comando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:564
+#, no-wrap
+msgid "% afmtodit -d DESC -e text.enc 3of9.afm generate/textmap 3of9\n"
+msgstr "% afmtodit -d DESC -e text.enc 3of9.afm generate/textmap 3of9\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:567
+msgid ""
+"Ensure that the resulting _PS_font_name_ file (e.g., [.filename]#3of9# in "
+"the example above) is located in the directory [.filename]#/usr/share/"
+"groff_font/devps# by copying or moving it there."
+msgstr ""
+"Certifique-se de que o arquivo _PS_font_name_ resultante (por exemplo, [."
+"filename]#3of9# no exemplo acima) esteja localizado no diretório [."
+"filename]#/usr/share/groff_font/devps# movendo ou copiando-o para lá."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:570
+msgid ""
+"Note that if [.filename]#ttf2pf.ps# assigns a font name using the one it "
+"finds in the TrueType font file and you want to use a different name, you "
+"must edit the [.filename]#.afm# prior to running `afmtodit`. This name must "
+"also match the one used in the Fontmap file if you wish to pipe man:groff[1] "
+"into man:gs[1]."
+msgstr ""
+"Observe que, se o [.filename]#ttf2pf.ps# atribuir um nome de fonte usando o "
+"que ele encontra no arquivo de fonte TrueType e você desejar usar um nome "
+"diferente, será necessário editar o arquivo [.filename]#.afm# antes de "
+"executar o `afmtodit`. Este nome também deve corresponder ao usado no "
+"arquivo Fontmap se você quiser redirecionar o man:groff[1] para o man:gs[1]."
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:572
+#, no-wrap
+msgid "Can TrueType Fonts be Used with Other Programs?"
+msgstr "As Fontes TrueType Podem ser Usadas com Outros Programas?"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:576
+msgid ""
+"The TrueType font format is used by Windows, Windows 95, and Mac's. It is "
+"quite popular and there are a great number of fonts available in this format."
+msgstr ""
+"O formato de fonte TrueType é utilizado pelo Windows, Windows 95 e Mac's. É "
+"bastante popular e há uma grande quantidade de fontes disponíveis neste "
+"formato."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:580
+msgid ""
+"Unfortunately, there are few applications that I am aware of that can use "
+"this format: Ghostscript and Povray come to mind. Ghostscript's support, "
+"according to the documentation, is rudimentary and the results are likely to "
+"be inferior to type 1 fonts. Povray version 3 also has the ability to use "
+"TrueType fonts, but I rather doubt many people will be creating documents as "
+"a series of raytraced pages :-)."
+msgstr ""
+"Infelizmente, há poucos aplicativos que eu conheço que podem usar este "
+"formato: o Ghostscript e o Povray vêm à mente. O suporte do Ghostscript, de "
+"acordo com a documentação, é rudimentar e os resultados provavelmente serão "
+"inferiores aos das fontes type 1. A versão 3 do Povray também tem a "
+"capacidade de usar fontes TrueType, mas eu duvido que muitas pessoas estejam "
+"criando documentos como uma série de páginas renderizadas em raytracing :-)."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:583
+msgid ""
+"This rather dismal situation may soon change. The http://www.freetype.org/"
+"[FreeType Project] is currently developing a useful set of FreeType tools:"
+msgstr ""
+"Essa situação um tanto quanto desanimadora pode mudar em breve. O http://www."
+"freetype.org/[Projeto FreeType] está atualmente desenvolvendo um conjunto de "
+"ferramentas FreeType úteis:"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:585
+msgid ""
+"The `xfsft` font server for X11 can serve TrueType fonts in addition to "
+"regular fonts. Though currently in beta, it is said to be quite usable. See "
+"http://www.dcs.ed.ac.uk/home/jec/programs/xfsft/[Juliusz Chroboczek's page] "
+"for further information. Porting instructions for FreeBSD can be found at "
+"http://math.missouri.edu/~stephen/software/[Stephen Montgomery's software "
+"page]."
+msgstr ""
+"O servidor de fontes `xfsft` para X11 pode servir fontes TrueType além de "
+"fontes regulares. Embora esteja atualmente em beta, é dito que ele é "
+"bastante utilizável. Veja a página de http://www.dcs.ed.ac.uk/home/jec/"
+"programs/xfsft/[Juliusz Chroboczek] para obter mais informações. As "
+"instruções de portabilidade para FreeBSD podem ser encontradas em http://math"
+".missouri.edu/~stephen/software/[página de software de Stephen Montgomery]."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:586
+msgid ""
+"xfstt is another font server for X11, available under link:ftp://sunsite.unc."
+"edu/pub/Linux/X11/fonts/[ftp://sunsite.unc.edu/pub/Linux/X11/fonts/]."
+msgstr ""
+"xfstt é outro servidor de fontes para X11, disponível em link:ftp://sunsite."
+"unc.edu/pub/Linux/X11/fonts/[ftp://sunsite.unc.edu/pub/Linux/X11/fonts/]."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:587
+msgid ""
+"A program called `ttf2bdf` can produce BDF files suitable for use in an X "
+"environment from TrueType files. Linux binaries are said to be available "
+"from link:ftp://crl.nmsu.edu/CLR/multiling/General/[ftp://crl.nmsu.edu/CLR/"
+"multiling/General/]."
+msgstr ""
+"Um programa chamado `ttf2bdf` pode produzir arquivos BDF adequados para uso "
+"em um ambiente X a partir de arquivos TrueType. Binários para Linux estão "
+"disponíveis em link:ftp://crl.nmsu.edu/CLR/multiling/General/[ftp://crl.nmsu."
+"edu/CLR/multiling/General/]."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:588
+msgid "and others ..."
+msgstr "e outros..."
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:590
+#, no-wrap
+msgid "Where Can Additional Fonts be Obtained?"
+msgstr "Onde é possível obter fontes adicionais?"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:595
+msgid ""
+"Many fonts are available on the Internet. They are either entirely free, or "
+"are share-ware. In addition many fonts are available in the [.filename]#x11-"
+"fonts/# category in the ports collection"
+msgstr ""
+"Muitas fontes estão disponíveis na Internet. Elas são completamente "
+"gratuitas ou são sharewares. Além disso, muitas fontes estão disponíveis na "
+"categoria [.filename]#x11-fonts/# na coleção de ports"
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:597
+#, no-wrap
+msgid "Additional Questions"
+msgstr "Questões Adicionais"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:600
+msgid "What use are the [.filename]#.pfm# files?"
+msgstr "Para que servem os arquivos [.filename]#.pfm#?"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:601
+msgid ""
+"Can one generate the [.filename]#.afm# from a [.filename]#.pfa# or [."
+"filename]#.pfb#?"
+msgstr ""
+"É possível gerar o arquivo [.filename]#.afm# a partir de um arquivo [."
+"filename]#.pfa# ou [.filename]#.pfb#?"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:602
+msgid ""
+"How to generate the groff character mapping files for PostScript fonts with "
+"non-standard character names?"
+msgstr ""
+"Como gerar os arquivos de mapeamento de caracteres do groff para fontes "
+"PostScript com nomes de caracteres não-padrão?"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:603
+msgid "Can xditview and devX?? devices be set up to access all the new fonts?"
+msgstr ""
+"É possível configurar o xditview e os dispositivos devX para acessar todas "
+"as novas fontes?"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:603
+msgid ""
+"It would be good to have examples of using TrueType fonts with Povray and "
+"Ghostscript."
+msgstr ""
+"Seria bom ter exemplos de como usar fontes TrueType com o Povray e o "
+"Ghostscript."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/freebsd-questions/_index.adoc b/documentation/content/pt-br/articles/freebsd-questions/_index.adoc
index 1507961a17..d6e3a22427 100644
--- a/documentation/content/pt-br/articles/freebsd-questions/_index.adoc
+++ b/documentation/content/pt-br/articles/freebsd-questions/_index.adoc
@@ -1,12 +1,15 @@
---
-title: Como obter os melhores resultados da lista de email FreeBSD-questions
authors:
- - author: Greg Lehey
+ -
+ author: 'Greg Lehey'
email: grog@FreeBSD.org
+description: 'Como obter os melhores resultados da lista de discussão FreeBSD-questions'
+tags: ["questions", "mailing", "FreeBSD"]
+title: 'Como obter os melhores resultados da lista de discussão FreeBSD-questions'
trademarks: ["freebsd", "microsoft", "opengroup", "qualcomm", "general"]
---
-= Como obter os melhores resultados da lista de email FreeBSD-questions
+= Como obter os melhores resultados da lista de discussão FreeBSD-questions
:doctype: article
:toc: macro
:toclevels: 1
@@ -40,9 +43,9 @@ endif::[]
[.abstract-title]
Resumo
-Este documento provê informação para pessoas que desejam mandar um email para a lista de discussão FreeBSD-questions. Avisos e dicas são disponibilizados para maximizar a chance do leitor de receber respostas úteis.
+Este documento fornece informações úteis para pessoas que procuram preparar um e-mail para a lista de discussão FreeBSD-questions. São fornecidos conselhos e dicas que maximizarão a chance de o leitor receber respostas úteis.
-Esse documento é regularmente postado na lista de email FreeBSD-questions.
+Este documento é regularmente postado na lista de discussão FreeBSD-questions.
'''
@@ -50,14 +53,14 @@ toc::[]
== Introdução
-A `FreeBSD-questions` é uma lista de emails mantida pelo Projeto FreeBSD para ajudar pessoas que tenham questões sobre o uso normal do FreeBSD. Outra lista, a `FreeBSD-hackers`, aborda questões mais avançadas tais como desenvolvimentos futuros.
+A `FreeBSD-questions` é uma lista de discussão mantida pelo projeto FreeBSD para ajudar pessoas que têm dúvidas sobre o uso normal do FreeBSD. Outro grupo, `FreeBSD-hackers`, discute questões mais avançadas, como trabalho futuro de desenvolvimento.
[NOTE]
====
-O termo "hacker" não tem nada a ver com invasão de computadores alheios.O termo correto para este tipo de atividade é "cracker", mas a mídia popular e a imprensa não tomou conhecimento deste fato ainda. Os hackers do FreeBSD fortemente desaprovam a atividade de cracking e não se envolvem neste tipo de atividades. Para uma descrição mais abrangente sobre hackers, veja o link de Eric Raymond's http://www.catb.org/~esr/faqs/hacker-howto.html[How To Become A Hacker]
+O termo "hacker" não tem nada a ver com invadir computadores de outras pessoas. O termo correto para essa atividade é "cracker", mas a imprensa popular ainda não descobriu isso. Os hackers do FreeBSD desaprovam fortemente a quebra de segurança e não têm nada a ver com isso. Para uma descrição mais longa de hackers, consulte o http://www.catb.org/~esr/faqs/hacker-howto.html[How To Become A Hacker] de Eric Raymond
====
-Esta é uma mensagem padrão com vistas a ajudar tanto quem busca ajuda na lista FreeBSD-questions (os "novatos"), quanto quem responde às questões (os "hackers").
+Este é uma mensagem regular destinada a ajudar tanto aqueles que buscam conselhos da FreeBSD-questions (os "novatos"), quanto aqueles que respondem às perguntas (os "hackers").
Inevitavelmente sempre existe algum atrito, o qual deriva dos diferentes pontos de vista dos dois grupos. Os novatos acusam os hackers de serem arrogantes, orgulhosos e não ajudarem, enquanto os hackers acusam os novatos de serem burros, incapazes de lerem textos em simples Português, e esperarem que tudo seja dado a eles em uma bandeja de prata. Claro que há algum elemento de verdade em cada um dos discursos, mas normalmente estes pontos de vista são frutos de algum tipo de frustração.
@@ -65,136 +68,88 @@ Nesse documento, eu desejo fazer algo para aliviar essa frustração e ajudar to
== Como se Inscrever na FreeBSD-questions
-A FreeBSD-questions é uma lista de email, então você precisa de uma conta de email. Aponte o seu navegador Web para a http://lists.FreeBSD.org/mailman/listinfo/freebsd-questions[página de informações da lista FreeBSD-questions]. Na seção entitulada "Inscrevendo-se na freebsd-questions" preencha o campo "Seu endereço de email"; os demais campos são opcionais.
+A FreeBSD-questions é uma lista de discussão, portanto, você precisa de acesso a uma conta de e-mail. Aponte seu navegador WWW para {freebsd-questions}. Na seção intitulada "Inscreva-se ou cancele a inscrição on-line", preencha o campo "Seu endereço de e-mail" e clique em "Inscrever-se". Ou envie um e-mail para freebsd-questions+subscribe@freebsd.org.
-[NOTE]
-====
-O campo para senha no formulário de inscrição proporciona somente uma segurança moderada, mas deve evitar que outros enviem mensagens usando sua conta. _Não use uma senha importante para você_ pois ela eventualmente poderá ser enviada para você por email em texto plano.
-====
-
-Você receberá uma mensagem de confirmação do mailman; siga as instruções incluídas na mensagem para completar sua inscrição.
-
-Finalmente, quando você receber a mensagem de "Boas-vindas" do mailman informando os detalhes da lista e a senha para acesso à área restrita, __por favor salve-a__. Se você algum dia desejar sair da lista, você necessitará das informações contidas nesta mensagem. Veja a próxima seção para mais detalhes.
+Você receberá uma mensagem de confirmação do mlmmj; siga as instruções incluídas para concluir sua inscrição.
== Como sair da lista FreeBSD-questions
-Quando você se inscreve na lista FreeBSD-questions, você recebe uma mensagem de boas-vindas do mailman. Nessa mensagem, dentre outras coisas, é informado como sair da lista. Segue um exemplo desta mensagem:
-
-....
-Bem-vindo à lista de discussão freebsd-questions@freebsd.org!
-
-Para enviar uma mensagem para esta lista, mande seu email para:
-
- freebsd-questions@freebsd.org
-
-Informações gerais sobre a lista estão em:
-
- https://lists.freebsd.org/mailman/listinfo/freebsd-questions
-
-Se você eventualmente desejar sair da lista ou alterar suas opções (ex. mudar
-para o modo resumo diário ou para sair dele, mudar senha, etc.) visite sua página de
-inscrição em:
-
-https://lists.freebsd.org/mailman/options/freebsd-questions/grog%40lemsi.de
-
-Você pode também fazer estes ajustes por email, enviando uma mensagem para:
-
- freebsd-questions-request@freebsd.org
-
-com a palavra 'help' no campo assunto ou no corpo da mensagem (não inclua
-as aspas), e você receberá uma mensagem com instruções.
+Aponte seu navegador WWW para {freebsd-questions}. Na seção intitulada "Inscreva-se ou cancele a inscrição on-line", preencha o campo "Seu endereço de e-mail" e clique em "Cancelar inscrição". Ou envie um e-mail para freebsd-questions+unsubscribe@freebsd.org.
-Você precisa saber sua senha para alterar as opções (incluindo alterar a
-própria senha) ou para sair da lista. Ela é:
+Uma mensagem de confirmação será enviada a você pelo mlmmj; siga as instruções incluídas para concluir o cancelamento da inscrição.
- 12345
-
-Normalmente, Mailman lembrará você de sua senha na lista do freebsd.org
-uma vez por mês, mas você pode desabilitar isto se assim desejar. Este
-lembrete também incluirá instruções de como sair da lista ou alterar
-suas preferências de conta. Há também um botão na sua página de opções
-que enviará sua senha atual para você.
-....
-
-A partir da URL informada na sua mensagem de "Boas-vindas" você pode visitar a "Página de gerenciamento da sua conta" e fazer uma requisição para "Sair" da lista FreeBSD-questions.
-
-Uma mensagem de confirmação será enviada para você pelo mailman; siga as instruções contidas na mensagem para finalizar o desligamento da lista.
-
-Se você já fez isso, e ainda não conseguiu entender o que está havendo, mande uma mensagem para mailto:freebsd-questions-request@FreeBSD.org[freebsd-questions-request@FreeBSD.org], e eles irão resolver as coisas para você. _Não envie_ uma mensagem para a FreeBSD-questions: eles não podem ajudá-lo.
-
-== Devo perguntar na lista `-questions` ou na `-hackers`?
+== Devo enviar minha pergunta para a lista `-questions` ou `-hackers`?
Duas listas de discussão abordam questões gerais sobre o FreeBSD, `FreeBSD-questions` e `FreeBSD-hackers`. Em alguns casos, não é realmente claro para qual lista você deve enviar sua pergunta. Entretanto, os seguintes critérios devem ajudar em 99% de todas as perguntas:
-. Se a questão é genérica, pergunte na `FreeBSD-questions`. Como exemplo temos questões sobre a instalação do FreeBSD ou o uso de uma ferramenta doUNIX(R).
-. Se você acredita que a pergunta está relacionada a um bug, mas não tem certeza disso, ou você não sabe como pesquisar sobre isso, mande a mensagem para a lista `FreeBSD-questions`.
-. Se você acredita que a pergunta está relacionada com um bug, e você tem _certeza_ que é um bug (por exemplo, você pode apontar o lugar do código onde isso acontece, e você poder ter uma correção para o problema), então envie a mensagem para a lista `FreeBSD-hackers`.
-. Se a questão envolve melhoramentos no FreeBSD, e você pode sugerir em como isto pode ser implementado, então mande a menssagem para a lista `FreeBSD-hackers`.
+. Se a pergunta for de natureza geral, pergunte na lista de discussão `FreeBSD-questions`. Exemplos podem ser perguntas sobre a instalação do FreeBSD ou o uso de uma determinada ferramenta UNIX(R).
+. Se você acha que a pergunta se relaciona a um bug, mas não tem certeza ou não sabe como procurá-lo, envie a mensagem para `FreeBSD-questions`.
+. Se a pergunta se relacionar a um bug, e você _tiver certeza_ de que é um bug (por exemplo, você pode apontar o local no código onde ocorre e talvez tenha uma solução), envie a mensagem para `FreeBSD-hackers`.
+. Se a pergunta se relaciona a melhorias no FreeBSD, e você pode fazer sugestões sobre como implementá-las, envie a mensagem para `FreeBSD-hackers`.
-Há também uma boa quantidade de extref:{handbook}eresources[listas de email especializadas, eresources-mail], que atendem interesses mais específicos. O critério acima ainda se aplica, e é interessante que você o siga, pois há mais chance de você obter melhores resultados desta forma.
+Existem também várias outras listas de discussão extref:{handbook}[especializadas, eresources-mail], que atendem a interesses mais específicos. Os critérios acima ainda se aplicam, e é do seu interesse segui-los, já que é mais provável que você obtenha bons resultados dessa maneira.
== Antes de Enviar uma Pergunta
-Você pode (e deve) fazer algumas coisas você mesmo antes de fazer uma pergunta em uma das listas de discussão:
+Antes de fazer uma pergunta em uma das listas de discussão, você pode (e deve) fazer algumas coisas por conta própria:
-* Tente resolver o problema sozinho. Se você enviar uma pergunta que demonstre que você tentou resolver o problema, sua mensagem vai normalmente atrair mais atenção de uma forma positiva das pessoas que a leram. Tentar resolver o problema sozinho também vai aumentar seu entendimento do FreeBSD, e eventualmente vai proporcionar conhecimento para você poder responder perguntas de outros usuários das listas e também ajudar.
-* Leia as páginas dos manuais, e a documentação do FreeBSD (tanto a instalada em [.filename]#/usr/doc# ou a versão acessível via Web em http://www.FreeBSD.org[http://www.FreeBSD.org]), especialmente o extref:{handbook}[handbook] e o extref:{faq}[FAQ].
-* Procure e/ou pesquise nos arquivos da lista de discussão, para verificar se a sua pergunta ou uma pergunta semelhante já foi feita (e possivelmente respondida) antes na lista. Você pode navegar e/ou pesquisar os arquivos da lista de discussão em https://www.FreeBSD.org/mail[https://www.FreeBSD.org/mail] e https://www.FreeBSD.org/search/#mailinglists[https://www.FreeBSD.org/search/#mailinglists], respectivamente. Isso pode ser feito em outros sites da Web, como por exemplo, em http://marc.theaimsgroup.com[http://marc.theaimsgroup.com].
-* Use um mecanismo de pesquisa como o http://www.google.com[Google] ou http://www.yahoo.com[Yahoo] para encontrar respostas para a sua pergunta.
+* Tente resolver o problema por conta própria. Se você postar uma pergunta que mostre que você tentou resolver o problema, sua pergunta geralmente atrairá mais atenção positiva das pessoas que a lerem. Tentar resolver o problema por si só também aumentará sua compreensão do FreeBSD e eventualmente permitirá que você use seu conhecimento para ajudar os outros, respondendo perguntas postadas nas listas de discussão.
+* Leia as páginas do manual e a documentação do FreeBSD (instaladas em [.filename]#/usr/doc# ou acessíveis via WWW em http://www.FreeBSD.org[http://www.FreeBSD.org]), especialmente o extref:{handbook}[Handbook] e o extref:{faq}[FAQ].
+* Pesquise nos arquivos da lista de discussão para ver se sua pergunta ou uma semelhante já foi feita (e possivelmente respondida) na lista. Você pode navegar e/ou pesquisar os arquivos da lista de discussão em https://www.FreeBSD.org/mail[https://www.FreeBSD.org/mail] e https://www.FreeBSD.org/search/#mailinglists[https://www.FreeBSD.org/search/#mailinglists], respectivamente. Isso também pode ser feito em outros sites da WWW, por exemplo, em http://marc.theaimsgroup.com[http://marc.theaimsgroup.com].
+* Use um mecanismo de pesquisa, como o http://www.google.com[Google] ou http://www.yahoo.com[Yahoo], para encontrar respostas para sua pergunta.
== Como Enviar uma Pergunta
Quando for enviar uma pergunta para a lista FreeBSD-questions, considere as seguintes diretivas:
-* Lembre-se que ninguém é pago por responder uma pergunta sobre o FreeBSD. Eles fazem isso por vontade própria. Você pode influenciar positivamente esse livre arbítrio enviando uma pergunta bem formulada, fornecendo o máximo possível de informações relevantes. Você pode influenciar esse livre arbítrio negativamente enviando uma pergunta incompleta, ilegível ou grosseira. É perfeitamente possível enviar uma mensagem para a lista FreeBSD-questions e não obter uma resposta, mesmo que você siga estas regras. É muito mais fácil não obter uma resposta se você não o fizer. No restante deste documento, veremos como tirar o máximo proveito de uma pergunta para a FreeBSD-questions.
+* Lembre-se de que ninguém recebe remuneração para responder a uma pergunta sobre o FreeBSD. Eles fazem isso por vontade própria. Você pode influenciar positivamente essa vontade enviando uma pergunta bem formulada, fornecendo o máximo de informações relevantes possível. Você pode influenciar negativamente essa vontade enviando uma pergunta incompleta, ilegível ou rude. É perfeitamente possível enviar uma mensagem para a FreeBSD-questions e não obter uma resposta, mesmo se você seguir essas regras. É muito mais possível não obter uma resposta se você não seguir. No restante deste documento, veremos como obter o máximo da sua pergunta para o FreeBSD-questions.
* Nem todo mundo que responde as perguntas sobre o FreeBSD lê todas as mensagens: eles olham para o assunto e decidem se isso lhes interessa. Claramente, é do seu interesse especificar um assunto. Assuntos como "Problema do FreeBSD" ou "Ajuda" não são suficientes. Se você não fornecer nenhum assunto, muitas pessoas não se incomodarão em lê-lo. Se o seu assunto não for específico o suficiente, as pessoas que podem responder sua pergunta podem não ler sua mensagem.
* Formate a sua mensagem para que ela fique legível e, POR FAVOR, NÃO GRITE !!!!! Nós apreciamos que muitas pessoas não falam inglês como sua primeira língua, e tentamos fazer concessões para isso, mas é realmente doloroso tentar ler uma mensagem escrita com erros de digitação ou sem quebras de linha.
-+
-Não subestime o efeito que uma mensagem de correio mal formatada tem, não apenas na lista de discussão FreeBSD-questions. Sua mensagem de e-mail é o que todas as pessoas vêem de você, e se estiver mal formatada, uma linha por parágrafo, mal grafada ou cheia de erros, isso dará às pessoas uma má impressão sobre você.
-+
-Muitas mensagens mal formatadas vêm de http://www.lemis.com/email.html[clientes de email ruins ou mal-configurados]. Os seguintes clientes de email são conhecidos por enviar mensagens mal formatadas sem que você saiba sobre elas:
++
+Não subestime o efeito que uma mensagem de correio mal formatada tem, não apenas na lista de discussão FreeBSD-questions. Sua mensagem de e-mail é tudo o que todas as pessoas vêem de você, e se estiver mal formatada, uma linha por parágrafo, mal grafada ou cheia de erros, isso dará às pessoas uma má impressão sobre você.
++
+Muitas mensagens mal formatadas são provenientes de http://www.lemis.com/email.html[programas de e-mail mal configurados ou com configurações ruins]. Os seguintes programas de e-mail são conhecidos por enviar mensagens mal formatadas sem que você saiba:
** exmh
** Microsoft(R) Exchange
** Microsoft(R) Outlook(R)
-
-+
-Tente não usar MIME: muitas pessoas usam clientes de email que não se dão muito bem com MIME.
-* Verifique se seu horário e fuso horário estão definidos corretamente. Isso pode parecer um pouco bobo, já que sua mensagem ainda será distribuída, mas muitas das pessoas que você está tentando alcançar recebem várias centenas de mensagens por dia. Eles frequentemente classificam as mensagens recebidas por assunto e por data, e se a sua mensagem não vem antes da primeira resposta, eles podem assumir que eles perderam e não se darão ao trabalho de procurar.
++
+Tente não usar MIME: muitas pessoas usam clientes de e-mail que não lidam bem com MIME.
+* Verifique se seu horário e fuso horário estão definidos corretamente. Isso pode parecer um pouco bobo, já que sua mensagem ainda será distribuída, mas muitas das pessoas que você está tentando alcançar recebem várias centenas de mensagens por dia. Eles frequentemente classificam as mensagens recebidas por assunto e por data, e se a sua mensagem não vem antes da primeira resposta, eles podem assumir que eles a perderam e não se darão ao trabalho de procurar.
* Não inclua perguntas não relacionadas na mesma mensagem. Em primeiro lugar, uma mensagem longa tende a assustar as pessoas e, em segundo lugar, é mais difícil conseguir que todas as pessoas que podem responder a todas as perguntas leiam a mensagem.
* Especifique o máximo de informação possível. Essa é uma área difícil, precisamos expandir e detalhar melhor quais informações você precisa enviar, mas aqui está um começo:
-** Em quase todos os casos, é importante conhecer a versão do FreeBSD que você está executando. Este é particularmente o caso do FreeBSD-CURRENT, onde você também deve especificar a data do código fonte, embora, obviamente, você não deva enviar perguntas sobre -CURRENT para a FreeBSD-questions.
-** Com qualquer problema que _possa_ ser relacionado a hardware, informe-nos sobre o seu hardware. Em caso de dúvida, suponha que seja possível que seja hardware. Que tipo de CPU você está usando? Quão rápido? Qual placa-mãe? Quanta memória? Quais periféricos?
-+
-Há uma chamada de julgamento aqui, é claro, mas a saída do comando man:dmesg[8] frequentemente pode ser muito útil, já que não apenas informa qual hardware você está executando, mas qual a versão do FreeBSD também.
-** Se você receber mensagens de erro, não diga "eu recebo mensagens de erro", diga (por exemplo) " eu recebo a mensagem de erro 'No route to host'".
-** Se o seu sistema entrar em panic, não diga "Meu sistema entrou em panic", diga (por exemplo) "meu sistema entrou em panic com a mensagem 'free vnode isn't'".
-** Se você tiver dificuldades em instalar o FreeBSD, por favor, nos diga qual hardware você possui. Em particular, é importante conhecer os IRQs e os endereços de I/O das placas instaladas em sua máquina.
-** Se você tiver dificuldade em executar o PPP, descreva a configuração. Qual versão do PPP você usa? Que tipo de autenticação você tem? Você tem um endereço IP estático ou dinâmico? Que tipo de mensagens você recebe no arquivo de log?
+** Em quase todos os casos, é importante saber a versão do FreeBSD que você está executando. Isso é particularmente importante para o FreeBSD-CURRENT, onde você também deve especificar a data das fontes, embora, é claro, você não deva enviar perguntas sobre o -CURRENT para o FreeBSD-questions.
+** Com qualquer problema que _pode_ estar relacionado ao hardware, informe-nos sobre seu hardware. Em caso de dúvida, assuma que é possível que seja um problema de hardware. Que tipo de CPU você está usando? Quão rápida? Qual placa-mãe? Quanta memória? Quais periféricos?
++
+Há um julgamento envolvido aqui, é claro, mas a saída do comando man:dmesg[8] frequentemente pode ser muito útil, pois não apenas informa qual hardware você está usando, mas também qual versão do FreeBSD.
+** Se você receber mensagens de erro, não diga "Eu recebo mensagens de erro", diga (por exemplo) "Eu recebo a mensagem de erro 'No route to host'".
+** Se o seu sistema "panica", não diga "Meu sistema "panica", diga (por exemplo) "Meu sistema "panica" com a mensagem 'free vnode isn't'".
+** Se você tiver dificuldade para instalar o FreeBSD, informe-nos sobre o seu hardware. É especialmente importante saber os IRQs e os endereços I/O das placas instaladas em sua máquina.
+** Caso você esteja com dificuldades para executar o PPP, descreva a configuração utilizada. Qual versão do PPP está sendo utilizada? Que tipo de autenticação está sendo utilizada? O endereço IP é estático ou dinâmico? Que tipo de mensagens aparecem no arquivo de log?
-* Muitas das informações que você precisa fornecer são a saída de programas, como man:dmesg[8], ou mensagens do console, que geralmente aparecem em [.filename]#/var/log/messages#. Não tente copiar essa informação digitando-a novamente; é um sofrimento real e você está fadado a cometer um erro. Para enviar o conteúdo do arquivo de log, faça uma cópia do arquivo e use um editor para reduzir as informações apenas ao que for relevantes ou copie e cole na sua mensagem. Para a saída de programas como man:dmesg[8], redirecione a saída para um arquivo e inclua-o. Por exemplo,
+* Muitas das informações que você precisa fornecer são a saída de programas, como o man:dmesg[8], ou mensagens de console, que geralmente aparecem no arquivo [.filename]#/var/log/messages#. Não tente copiar essa informação digitando-a novamente; isso é realmente difícil e você provavelmente cometerá um erro. Para enviar o conteúdo do arquivo de log, faça uma cópia do arquivo e use um editor para selecionar apenas as informações relevantes, ou copie e cole na sua mensagem. Para a saída de programas como o man:dmesg[8], redirecione a saída para um arquivo e inclua esse arquivo. Por exemplo,
+
-[source,shell]
+[source, shell]
....
% dmesg > /tmp/dmesg.out
....
-+
++
Isto redireciona a informação para o arquivo [.filename]#/tmp/dmesg.out#.
-* Se você fizer tudo isso e ainda não obtiver uma resposta, pode haver outras razões. Por exemplo, o problema é tão complicado que ninguém sabe a resposta, ou a pessoa que sabe a resposta estava offline. Se você não obtiver uma resposta depois de, digamos, uma semana, pode ajudar se você reenviar a mensagem. Se você não obtiver uma resposta para sua segunda mensagem, provavelmente não obterá uma deste fórum. Reenviar a mesma mensagem de novo e de novo só o tornará impopular.
+* Se você fizer tudo isso e ainda assim não receber uma resposta, pode haver outras razões. Por exemplo, o problema pode ser tão complicado que ninguém sabe a resposta, ou a pessoa que sabe a resposta estava offline. Se você não receber uma resposta após, digamos, uma semana, pode ser útil reenviar a mensagem. No entanto, se você não receber uma resposta para sua segunda mensagem, provavelmente não receberá uma resposta neste fórum. Reenviar a mesma mensagem várias vezes só fará com que você fique impopular.
-Para resumir, vamos supor que você saiba a resposta para a seguinte pergunta (sim, é a mesma em cada caso). Você escolhe qual destas duas perguntas você estaria mais preparado para responder:
+Para resumir, vamos supor que você saiba a resposta para a seguinte pergunta (sim, é a mesma em cada caso). Você escolhe qual dessas duas perguntas você estaria mais preparado para responder:
.Mensagem 1
[example]
====
....
-Subject: HELP!!?!??
-I just can't get hits damn silly FereBSD system to
-workd, and Im really good at this tsuff, but I have never seen
-anythign sho difficult to install, it jst wont work whatever I try
-so why don't you guys tell me what I doing wrong.
+Assunto: AJUDA!!?!??
+Eu simplesmente não consigo fazer esse maldito sistema FreeBSD
+funcionar, e eu sou realmente bom nisso, mas nunca vi nada tão
+difícil de instalar, não importa o que eu tente, simplesmente não
+funciona. Por que vocês não me dizem o que estou fazendo de errado?
....
====
@@ -203,24 +158,23 @@ so why don't you guys tell me what I doing wrong.
====
....
-Subject: Problems installing FreeBSD
-
-I've just got the FreeBSD 2.1.5 CDROM from Walnut Creek, and I'm having a lot
-of difficulty installing it. I have a 66 MHz 486 with 16 MB of
-memory and an Adaptec 1540A SCSI board, a 1.2GB Quantum Fireball
-disk and a Toshiba 3501XA CDROM drive. The installation works just
-fine, but when I try to reboot the system, I get the message
-Missing Operating System.
+Assunto: Problemas na instalação do FreeBSD
+
+Acabei de receber o CD-ROM do FreeBSD 2.1.5 da Walnut Creek e estou tendo
+muita dificuldade para instalá-lo. Tenho um 486 de 66 MHz com 16 MB de memória
+e uma placa SCSI Adaptec 1540A, um disco Quantum Fireball de 1,2 GB e uma unidade
+de CD-ROM Toshiba 3501XA. A instalação funciona muito bem, mas quando tento reiniciar
+o sistema, recebo a mensagem "Sistema Operacional Ausente".
....
====
-== Como Acompanhar uma Pergunta
+== Como fazer o acompanhamento de uma pergunta
-Algumas vezes você vai querer mandar informação adicional para uma questão que você já enviou. A melhor maneira de fazer isso é responder a sua própria mensagem original. Isto tem três vantagens:
+Muitas vezes, você desejará enviar informações adicionais para uma pergunta que já enviou. A melhor maneira de fazer isso é responder à sua mensagem original. Isso tem três vantagens:
. Você inclui o texto da mensagem original, assim as pessoas saberão do que você está falando. Não esqueça de retirar texto desnecessário.
. O texto no campo do assunto permanece o mesmo (você lembrou de colocar o assunto, não foi?). Muitos aplicativos ordenarão as mensagens pelo assunto. Isto ajuda o agrupamento de mensagens.
-. Os números de referência da mensagem no cabeçalho se referem à mensagem anterior. Alguns mailers, como o http://www.mutt.org/[mutt], podem agrupar as mensagens em __thread__, mostrando as relações exatas entre as mensagens.
+. Os números de referência da mensagem no cabeçalho se referirão à mensagem anterior. Alguns programas de e-mail, como o http://www.mutt.org/[mutt], podem _agrupar_ as mensagens, mostrando as relações exatas entre as mensagens.
== Como Responder uma Pergunta
@@ -228,18 +182,18 @@ Antes de responder uma pergunta na FreeBSD-questions, considere:
. Muitas das diretivas usadas quando se está para escrever uma questão também são válidas para respondê-las. Leia-as.
. Alguém já respondeu à pergunta? A maneira mais fácil de conferir isto é ordenando as mensagens recebidas pelo assunto: então (esperançosamente) você verá a pergunta seguida pelas respectivas respostas, todas juntas.
-+
++
Se alguém já respondeu, isso não significa automaticamente que você não deve enviar outra resposta. Mas faz sentido ler todas as outras respostas primeiro.
-. Você tem algo para contribuir além do que já foi dito? Em geral, as respostas do tipo "Sim, eu também" não ajudam muito, embora haja exceções, como quando alguém está descrevendo um problema que está tendo, e não sabe se é culpa dela ou se existe algo de errado com o hardware ou software. Se você for enviar uma resposta do tipo "eu também", você também deverá incluir outras informações relevantes.
-. Tem certeza de que entendeu a pergunta? Muito freqüentemente, a pessoa que faz a pergunta é confusa ou não se expressa muito bem. Mesmo com o melhor entendimento do sistema, é fácil enviar uma resposta que não responde à pergunta. Isso não ajuda: você deixará a pessoa que enviou a pergunta ainda mais frustrada ou confusa do que nunca. Se ninguém mais responder e você também não tiver certeza, você sempre poderá pedir mais informações.
-. Tem certeza de que sua resposta está correta? Se não, espere um dia ou mais. Se ninguém mais aparecer com uma resposta melhor, você ainda pode responder e dizer, por exemplo, "Eu não sei se isso está correto, mas como ninguém mais respondeu, por que você não tenta substituir seu CDROM ATAPI com por sapo?".
-. A menos que haja uma boa razão para fazer o contrário, responda ao remetente e para a FreeBSD-questions. Muitas pessoas na FreeBSD-questions são "lurkers": elas aprendem lendo mensagens enviadas e respondidas por outras pessoas. Se você tirar uma mensagem que é de interesse geral da lista, você está privando essas pessoas de suas informações. Tenha cuidado com as respostas para grupo; Muitas pessoas enviam mensagens com centenas de CCs. Se este for o caso, certifique-se de reduzir as linhas Cc: apropriadamente.
-. Incluir texto relevante da mensagem original. Reduza ao mínimo, mas não exagere. O conteúdo original remanescente ainda deve possibilitar à alguém que não leu a mensagem original entender do que você está falando.
-. Use alguma técnica para identificar qual texto veio da mensagem original e qual texto você adicionou. Eu pessoalmente acho que a adição do "`>`" no inicio da mensagem original funciona bem. Deixando espaço em branco após o "`>`" e deixar linhas vazias entre o seu texto e o texto original, ambos tornam o resultado mais legível.
+. Você tem algo a acrescentar além do que já foi dito? Em geral, respostas como "Sim, eu também" não ajudam muito, embora existam exceções, como quando alguém está descrevendo um problema que está tendo e não sabe se é culpa dele ou se há algo de errado com o hardware ou software. Se você enviar uma resposta do tipo "eu também", lembre-se de incluir qualquer informação adicional relevante.
+. Você tem certeza de que entendeu a pergunta? Com muita frequência, a pessoa que faz a pergunta está confusa ou não se expressa muito bem. Mesmo com o melhor entendimento do sistema, é fácil enviar uma resposta que não responda à pergunta. Isso não ajuda: você deixará a pessoa que fez a pergunta mais frustrada ou confusa do que nunca. Se ninguém mais responder e você também não tiver certeza, sempre pode pedir mais informações.
+. Você tem certeza de que sua resposta está correta? Se não tiver certeza, espere um dia ou mais. Se ninguém mais apresentar uma resposta melhor, você ainda pode responder e dizer, por exemplo, "Não tenho certeza se isso está correto, mas como ninguém mais respondeu, por que você não tenta substituir seu CD-ROM ATAPI por um sapo?".
+. A menos que haja uma boa razão para fazer o contrário, responda ao remetente e à FreeBSD-questions. Muitas pessoas em FreeBSD-questions são "espectadores": elas aprendem lendo as mensagens enviadas e respondidas por outros. Se você tirar uma mensagem de interesse geral da lista, estará privando essas pessoas de suas informações. Tenha cuidado com as respostas em grupo; muitas pessoas enviam mensagens com centenas de CCs. Se esse for o caso, certifique-se de cortar as linhas de Cc: apropriadamente.
+. Inclua o texto relevante da mensagem original. Corte-o ao mínimo, mas não exagere. Deve ainda ser possível para alguém que não leu a mensagem original entender sobre o que você está falando.
+. Use alguma técnica para identificar qual texto veio da mensagem original e qual texto você adicionou. Pessoalmente, acho que adicionar um "`>`" na frente da mensagem original funciona melhor. Deixar um espaço em branco depois do "`> ;`" e deixar linhas vazias entre seu texto e o texto original torna o resultado mais legível.
. Coloque sua resposta no lugar correto (após o texto ao qual ela se refere). É muito difícil ler um encadeamento de respostas em que cada resposta vem antes do texto ao qual ela se refere.
-. A maioria dos programas de email mudam a linha do assunto em um resposta , adicionando no início desta um texto do tipo "Re:". Se seu programa não faz isso automaticamente, você deve fazer manualmente.
-. Se o remetente não respeitar as convenções de formato (linhas muito longas, linha de assunto imprópria), _por favor_ conserte-o. No caso de uma linha de assunto incorreta (como " HELP !! ?? "), mude a linha de assunto para (digamos) "Re: Dificuldades com a sincronização PPP (era: HELP !! ??)". Dessa forma, outras pessoas que tentam seguir o tópico terão menos dificuldade em segui-lo.
-+
-Nesses casos, é apropriado falar o que você fez e porque o fez, mas tente fazê-lo de forma a não ser rude. Se você notar que não consegue responder de uma forma que não seja rude, não responda.
-+
-Se você quer responder a uma mensagem somente pelo seu formato inadequado, responda-a somente para quem a enviou, não à lista. Você pode simplesmente enviar esta mensagem em resposta, se quiser.
+. A maioria dos programas de email altera a linha de assunto em uma resposta adicionando um texto como "Re: ". Se o seu programa de email não fizer isso automaticamente, você deve fazê-lo manualmente.
+. Se o autor da pergunta não seguir as convenções de formato (linhas muito longas, assunto inapropriado), _por favor_ corrija-o. No caso de uma linha de assunto incorreta (como "AJUDA!!??"), altere a linha de assunto para (por exemplo) "Re: Dificuldades com PPP de sincronização (era: AJUDA!!??)". Dessa forma, outras pessoas que tentam seguir a discussão terão menos dificuldade em acompanhá-la.
++
+Nesses casos, é apropriado dizer o que você fez e por que fez, mas tente não ser rude. Se você descobrir que não consegue responder sem ser rude, não responda.
++
+Se você quiser apenas responder a uma mensagem por causa do seu formato ruim, apenas responda ao autor da mensagem, não para a lista. Você pode simplesmente enviar esta mensagem para ele em resposta, se desejar.
diff --git a/documentation/content/pt-br/articles/freebsd-questions/_index.po b/documentation/content/pt-br/articles/freebsd-questions/_index.po
new file mode 100644
index 0000000000..c7b52115e0
--- /dev/null
+++ b/documentation/content/pt-br/articles/freebsd-questions/_index.po
@@ -0,0 +1,965 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: 2023-04-24 18:31+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesfreebsd-questions_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Title =
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:1
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:11
+#, no-wrap
+msgid "How to get Best Results from the FreeBSD-questions Mailing List"
+msgstr ""
+"Como obter os melhores resultados da lista de discussão FreeBSD-questions"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:47
+msgid ""
+"This document provides useful information for people looking to prepare an e-"
+"mail to the FreeBSD-questions mailing list. Advice and hints are given that "
+"will maximize the chance that the reader will receive useful replies."
+msgstr ""
+"Este documento fornece informações úteis para pessoas que procuram preparar "
+"um e-mail para a lista de discussão FreeBSD-questions. São fornecidos "
+"conselhos e dicas que maximizarão a chance de o leitor receber respostas "
+"úteis."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:49
+msgid ""
+"This document is regularly posted to the FreeBSD-questions mailing list."
+msgstr ""
+"Este documento é regularmente postado na lista de discussão FreeBSD-"
+"questions."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:51
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:54
+#, no-wrap
+msgid "Introduction"
+msgstr "Introdução"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:58
+msgid ""
+"`FreeBSD-questions` is a mailing list maintained by the FreeBSD project to "
+"help people who have questions about the normal use of FreeBSD. Another "
+"group, `FreeBSD-hackers`, discusses more advanced questions such as future "
+"development work."
+msgstr ""
+"A `FreeBSD-questions` é uma lista de discussão mantida pelo projeto FreeBSD "
+"para ajudar pessoas que têm dúvidas sobre o uso normal do FreeBSD. Outro "
+"grupo, `FreeBSD-hackers`, discute questões mais avançadas, como trabalho "
+"futuro de desenvolvimento."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:65
+msgid ""
+"The term \"hacker\" has nothing to do with breaking into other people's "
+"computers. The correct term for the latter activity is \"cracker\", but the "
+"popular press has not found out yet. The FreeBSD hackers disapprove "
+"strongly of cracking security, and have nothing to do with it. For a longer "
+"description of hackers, see Eric Raymond's http://www.catb.org/~esr/faqs/"
+"hacker-howto.html[How To Become A Hacker]"
+msgstr ""
+"O termo \"hacker\" não tem nada a ver com invadir computadores de outras "
+"pessoas. O termo correto para essa atividade é \"cracker\", mas a imprensa "
+"popular ainda não descobriu isso. Os hackers do FreeBSD desaprovam "
+"fortemente a quebra de segurança e não têm nada a ver com isso. Para uma "
+"descrição mais longa de hackers, consulte o http://www.catb.org/~esr/faqs/"
+"hacker-howto.html[How To Become A Hacker] de Eric Raymond"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:68
+msgid ""
+"This is a regular posting aimed to help both those seeking advice from "
+"FreeBSD-questions (the \"newcomers\"), and also those who answer the "
+"questions (the \"hackers\")."
+msgstr ""
+"Este é uma mensagem regular destinada a ajudar tanto aqueles que buscam "
+"conselhos da FreeBSD-questions (os \"novatos\"), quanto aqueles que "
+"respondem às perguntas (os \"hackers\")."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:72
+msgid ""
+"Inevitably there is some friction, which stems from the different viewpoints "
+"of the two groups. The newcomers accuse the hackers of being arrogant, "
+"stuck-up, and unhelpful, while the hackers accuse the newcomers of being "
+"stupid, unable to read plain English, and expecting everything to be handed "
+"to them on a silver platter. Of course, there is an element of truth in "
+"both these claims, but for the most part these viewpoints come from a sense "
+"of frustration."
+msgstr ""
+"Inevitavelmente sempre existe algum atrito, o qual deriva dos diferentes "
+"pontos de vista dos dois grupos. Os novatos acusam os hackers de serem "
+"arrogantes, orgulhosos e não ajudarem, enquanto os hackers acusam os novatos "
+"de serem burros, incapazes de lerem textos em simples Português, e esperarem "
+"que tudo seja dado a eles em uma bandeja de prata. Claro que há algum "
+"elemento de verdade em cada um dos discursos, mas normalmente estes pontos "
+"de vista são frutos de algum tipo de frustração."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:75
+msgid ""
+"In this document, I would like to do something to relieve this frustration "
+"and help everybody get better results from FreeBSD-questions. In the "
+"following section, I recommend how to submit a question; after that, we will "
+"look at how to answer one."
+msgstr ""
+"Nesse documento, eu desejo fazer algo para aliviar essa frustração e ajudar "
+"todos a obterem melhores resultados da FreeBSD-questions. Na próxima seção, "
+"eu recomendo como enviar uma pergunta; depois disso, veremos como responder "
+"a uma."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:76
+#, no-wrap
+msgid "How to Subscribe to FreeBSD-questions"
+msgstr "Como se Inscrever na FreeBSD-questions"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:82
+msgid ""
+"FreeBSD-questions is a mailing list, so you need mail access. Point your "
+"WWW browser to the {freebsd-questions}. In the section titled \"Subscribe "
+"or unsubscribe online\" fill in the \"Your email address\" field and hit "
+"\"Subscribe\". Or send an email to freebsd-questions+subscribe@freebsd.org."
+msgstr ""
+"A FreeBSD-questions é uma lista de discussão, portanto, você precisa de "
+"acesso a uma conta de e-mail. Aponte seu navegador WWW para {freebsd-"
+"questions}. Na seção intitulada \"Inscreva-se ou cancele a inscrição on-"
+"line\", preencha o campo \"Seu endereço de e-mail\" e clique em \"Inscrever-"
+"se\". Ou envie um e-mail para freebsd-questions+subscribe@freebsd.org."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:84
+msgid ""
+"You will receive a confirmation message from mlmmj; follow the included "
+"instructions to complete your subscription."
+msgstr ""
+"Você receberá uma mensagem de confirmação do mlmmj; siga as instruções "
+"incluídas para concluir sua inscrição."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:85
+#, no-wrap
+msgid "How to Unsubscribe from FreeBSD-questions"
+msgstr "Como sair da lista FreeBSD-questions"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:90
+msgid ""
+"Point your WWW browser to the {freebsd-questions}. In the section titled "
+"\"Subscribe or unsubscribe online\" fill in the \"Your email address\" field "
+"and hit \"Unsubscribe\". Or send an email to freebsd-questions"
+"+unsubscribe@freebsd.org."
+msgstr ""
+"Aponte seu navegador WWW para {freebsd-questions}. Na seção intitulada "
+"\"Inscreva-se ou cancele a inscrição on-line\", preencha o campo \"Seu "
+"endereço de e-mail\" e clique em \"Cancelar inscrição\". Ou envie um e-mail "
+"para freebsd-questions+unsubscribe@freebsd.org."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:92
+msgid ""
+"A confirmation message will be sent to you from mlmmj; follow the included "
+"instructions to finish unsubscribing."
+msgstr ""
+"Uma mensagem de confirmação será enviada a você pelo mlmmj; siga as "
+"instruções incluídas para concluir o cancelamento da inscrição."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:93
+#, no-wrap
+msgid "Should I ask `-questions` or `-hackers`?"
+msgstr "Devo enviar minha pergunta para a lista `-questions` ou `-hackers`?"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:98
+msgid ""
+"Two mailing lists handle general questions about FreeBSD, `FreeBSD-"
+"questions` and `FreeBSD-hackers`. In some cases, it is not really clear "
+"which group you should ask. The following criteria should help for 99% of "
+"all questions, however:"
+msgstr ""
+"Duas listas de discussão abordam questões gerais sobre o FreeBSD, `FreeBSD-"
+"questions` e `FreeBSD-hackers`. Em alguns casos, não é realmente claro para "
+"qual lista você deve enviar sua pergunta. Entretanto, os seguintes "
+"critérios devem ajudar em 99% de todas as perguntas:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:100
+msgid ""
+"If the question is of a general nature, ask `FreeBSD-questions`. Examples "
+"might be questions about installing FreeBSD or the use of a particular "
+"UNIX(R) utility."
+msgstr ""
+"Se a pergunta for de natureza geral, pergunte na lista de discussão `FreeBSD-"
+"questions`. Exemplos podem ser perguntas sobre a instalação do FreeBSD ou o "
+"uso de uma determinada ferramenta UNIX(R)."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:101
+msgid ""
+"If you think the question relates to a bug, but you are not sure, or you do "
+"not know how to look for it, send the message to `FreeBSD-questions`."
+msgstr ""
+"Se você acha que a pergunta se relaciona a um bug, mas não tem certeza ou "
+"não sabe como procurá-lo, envie a mensagem para `FreeBSD-questions`."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:102
+msgid ""
+"If the question relates to a bug, and you are _sure_ that it is a bug (for "
+"example, you can pinpoint the place in the code where it happens, and you "
+"maybe have a fix), then send the message to `FreeBSD-hackers`."
+msgstr ""
+"Se a pergunta se relacionar a um bug, e você _tiver certeza_ de que é um bug "
+"(por exemplo, você pode apontar o local no código onde ocorre e talvez tenha "
+"uma solução), envie a mensagem para `FreeBSD-hackers`."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:103
+msgid ""
+"If the question relates to enhancements to FreeBSD, and you can make "
+"suggestions about how to implement them, then send the message to `FreeBSD-"
+"hackers`."
+msgstr ""
+"Se a pergunta se relaciona a melhorias no FreeBSD, e você pode fazer "
+"sugestões sobre como implementá-las, envie a mensagem para `FreeBSD-hackers`."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:106
+msgid ""
+"There are also a number of other extref:{handbook}[specialized mailing "
+"lists, eresources-mail], which caters to more specific interests. The "
+"criteria above still apply, and it is in your interest to stick to them, "
+"since you are more likely to get good results that way."
+msgstr ""
+"Existem também várias outras listas de discussão extref:{handbook}["
+"especializadas, eresources-mail], que atendem a interesses mais específicos. "
+"Os critérios acima ainda se aplicam, e é do seu interesse segui-los, já que "
+"é mais provável que você obtenha bons resultados dessa maneira."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:107
+#, no-wrap
+msgid "Before Submitting a Question"
+msgstr "Antes de Enviar uma Pergunta"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:110
+msgid ""
+"You can (and should) do some things yourself before asking a question on one "
+"of the mailing lists:"
+msgstr ""
+"Antes de fazer uma pergunta em uma das listas de discussão, você pode (e "
+"deve) fazer algumas coisas por conta própria:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:112
+msgid ""
+"Try solving the problem on your own. If you post a question which shows that "
+"you have tried to solve the problem, your question will generally attract "
+"more positive attention from people reading it. Trying to solve the problem "
+"yourself will also enhance your understanding of FreeBSD, and will "
+"eventually let you use your knowledge to help others by answering questions "
+"posted to the mailing lists."
+msgstr ""
+"Tente resolver o problema por conta própria. Se você postar uma pergunta que "
+"mostre que você tentou resolver o problema, sua pergunta geralmente atrairá "
+"mais atenção positiva das pessoas que a lerem. Tentar resolver o problema "
+"por si só também aumentará sua compreensão do FreeBSD e eventualmente "
+"permitirá que você use seu conhecimento para ajudar os outros, respondendo "
+"perguntas postadas nas listas de discussão."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:113
+msgid ""
+"Read the manual pages, and the FreeBSD documentation (either installed in [."
+"filename]#/usr/doc# or accessible via WWW at http://www.FreeBSD.org[http://"
+"www.FreeBSD.org]), especially the extref:{handbook}[handbook] and the extref:"
+"{faq}[FAQ]."
+msgstr ""
+"Leia as páginas do manual e a documentação do FreeBSD (instaladas em [."
+"filename]#/usr/doc# ou acessíveis via WWW em http://www.FreeBSD."
+"org[http://www.FreeBSD.org]), especialmente o extref:{handbook}[Handbook] e "
+"o extref:{faq}[FAQ]."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:114
+msgid ""
+"Browse and/or search the archives for the mailing list, to see if your "
+"question or a similar one has been asked (and possibly answered) on the "
+"list. You can browse and/or search the mailing list archives at https://www."
+"FreeBSD.org/mail[https://www.FreeBSD.org/mail] and https://www.FreeBSD.org/"
+"search/#mailinglists[https://www.FreeBSD.org/search/#mailinglists] "
+"respectively. This can be done at other WWW sites as well, for example at "
+"http://marc.theaimsgroup.com[http://marc.theaimsgroup.com]."
+msgstr ""
+"Pesquise nos arquivos da lista de discussão para ver se sua pergunta ou uma "
+"semelhante já foi feita (e possivelmente respondida) na lista. Você pode "
+"navegar e/ou pesquisar os arquivos da lista de discussão em https://www."
+"FreeBSD.org/mail[https://www.FreeBSD.org/mail] e https://www.FreeBSD.org/"
+"search/#mailinglists[https://www.FreeBSD.org/search/#mailinglists], "
+"respectivamente. Isso também pode ser feito em outros sites da WWW, por "
+"exemplo, em http://marc.theaimsgroup.com[http://marc.theaimsgroup.com]."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:115
+msgid ""
+"Use a search engine such as http://www.google.com[Google] or http://www."
+"yahoo.com[Yahoo] to find answers to your question."
+msgstr ""
+"Use um mecanismo de pesquisa, como o http://www.google.com[Google] ou "
+"http://www.yahoo.com[Yahoo], para encontrar respostas para sua pergunta."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:116
+#, no-wrap
+msgid "How to Submit a Question"
+msgstr "Como Enviar uma Pergunta"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:119
+msgid ""
+"When submitting a question to FreeBSD-questions, consider the following "
+"points:"
+msgstr ""
+"Quando for enviar uma pergunta para a lista FreeBSD-questions, considere as "
+"seguintes diretivas:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:121
+msgid ""
+"Remember that nobody gets paid for answering a FreeBSD question. They do it "
+"of their own free will. You can influence this free will positively by "
+"submitting a well-formulated question supplying as much relevant information "
+"as possible. You can influence this free will negatively by submitting an "
+"incomplete, illegible, or rude question. It is perfectly possible to send a "
+"message to FreeBSD-questions and not get an answer even if you follow these "
+"rules. It is much more possible to not get an answer if you do not. In the "
+"rest of this document, we will look at how to get the most out of your "
+"question to FreeBSD-questions."
+msgstr ""
+"Lembre-se de que ninguém recebe remuneração para responder a uma pergunta "
+"sobre o FreeBSD. Eles fazem isso por vontade própria. Você pode influenciar "
+"positivamente essa vontade enviando uma pergunta bem formulada, fornecendo o "
+"máximo de informações relevantes possível. Você pode influenciar "
+"negativamente essa vontade enviando uma pergunta incompleta, ilegível ou "
+"rude. É perfeitamente possível enviar uma mensagem para a FreeBSD-questions "
+"e não obter uma resposta, mesmo se você seguir essas regras. É muito mais "
+"possível não obter uma resposta se você não seguir. No restante deste "
+"documento, veremos como obter o máximo da sua pergunta para o FreeBSD-"
+"questions."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:122
+msgid ""
+"Not everybody who answers FreeBSD questions reads every message: they look "
+"at the subject line and decide whether it interests them. Clearly, it is in "
+"your interest to specify a subject. \"FreeBSD problem\" or \"Help\" are not "
+"enough. If you provide no subject at all, many people will not bother "
+"reading it. If your subject is not specific enough, the people who can "
+"answer it may not read it."
+msgstr ""
+"Nem todo mundo que responde as perguntas sobre o FreeBSD lê todas as "
+"mensagens: eles olham para o assunto e decidem se isso lhes interessa. "
+"Claramente, é do seu interesse especificar um assunto. Assuntos como "
+"\"Problema do FreeBSD\" ou \"Ajuda\" não são suficientes. Se você não "
+"fornecer nenhum assunto, muitas pessoas não se incomodarão em lê-lo. Se o "
+"seu assunto não for específico o suficiente, as pessoas que podem responder "
+"sua pergunta podem não ler sua mensagem."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:123
+msgid ""
+"Format your message so that it is legible, and PLEASE DO NOT SHOUT!!!!!. We "
+"appreciate that a lot of people do not speak English as their first "
+"language, and we try to make allowances for that, but it is really painful "
+"to try to read a message written full of typos or without any line breaks."
+msgstr ""
+"Formate a sua mensagem para que ela fique legível e, POR FAVOR, NÃO "
+"GRITE !!!!! Nós apreciamos que muitas pessoas não falam inglês como sua "
+"primeira língua, e tentamos fazer concessões para isso, mas é realmente "
+"doloroso tentar ler uma mensagem escrita com erros de digitação ou sem "
+"quebras de linha."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:126
+msgid ""
+"Do not underestimate the effect that a poorly formatted mail message has, "
+"not just on the FreeBSD-questions mailing list. Your mail message is all "
+"people see of you, and if it is poorly formatted, one line per paragraph, "
+"badly spelt, or full of errors, it will give people a poor impression of you."
+msgstr ""
+"Não subestime o efeito que uma mensagem de correio mal formatada tem, não "
+"apenas na lista de discussão FreeBSD-questions. Sua mensagem de e-mail é "
+"tudo o que todas as pessoas vêem de você, e se estiver mal formatada, uma "
+"linha por parágrafo, mal grafada ou cheia de erros, isso dará às pessoas uma "
+"má impressão sobre você."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:129
+msgid ""
+"A lot of badly formatted messages come from http://www.lemis.com/email."
+"html[bad mailers or badly configured mailers]. The following mailers are "
+"known to send out badly formatted messages without you finding out about "
+"them:"
+msgstr ""
+"Muitas mensagens mal formatadas são provenientes de http://www.lemis.com/"
+"email.html[programas de e-mail mal configurados ou com configurações ruins]. "
+"Os seguintes programas de e-mail são conhecidos por enviar mensagens mal "
+"formatadas sem que você saiba:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:131
+msgid "exmh"
+msgstr "exmh"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:132
+msgid "Microsoft(R) Exchange"
+msgstr "Microsoft(R) Exchange"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:133
+msgid "Microsoft(R) Outlook(R)"
+msgstr "Microsoft(R) Outlook(R)"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:135
+msgid ""
+"Try not to use MIME: a lot of people use mailers which do not get on very "
+"well with MIME."
+msgstr ""
+"Tente não usar MIME: muitas pessoas usam clientes de e-mail que não lidam "
+"bem com MIME."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:136
+msgid ""
+"Make sure your time and time zone are set correctly. This may seem a little "
+"silly, since your message still gets there, but many of the people you are "
+"trying to reach get several hundred messages a day. They frequently sort the "
+"incoming messages by subject and by date, and if your message does not come "
+"before the first answer, they may assume they missed it and not bother to "
+"look."
+msgstr ""
+"Verifique se seu horário e fuso horário estão definidos corretamente. Isso "
+"pode parecer um pouco bobo, já que sua mensagem ainda será distribuída, mas "
+"muitas das pessoas que você está tentando alcançar recebem várias centenas "
+"de mensagens por dia. Eles frequentemente classificam as mensagens recebidas "
+"por assunto e por data, e se a sua mensagem não vem antes da primeira "
+"resposta, eles podem assumir que eles a perderam e não se darão ao trabalho "
+"de procurar."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:137
+msgid ""
+"Do not include unrelated questions in the same message. Firstly, a long "
+"message tends to scare people off, and secondly, it is more difficult to get "
+"all the people who can answer all the questions to read the message."
+msgstr ""
+"Não inclua perguntas não relacionadas na mesma mensagem. Em primeiro lugar, "
+"uma mensagem longa tende a assustar as pessoas e, em segundo lugar, é mais "
+"difícil conseguir que todas as pessoas que podem responder a todas as "
+"perguntas leiam a mensagem."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:138
+msgid ""
+"Specify as much information as possible. This is a difficult area, and we "
+"need to expand on what information you need to submit, but here is a start:"
+msgstr ""
+"Especifique o máximo de informação possível. Essa é uma área difícil, "
+"precisamos expandir e detalhar melhor quais informações você precisa enviar, "
+"mas aqui está um começo:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:140
+msgid ""
+"In nearly every case, it is important to know the version of FreeBSD you are "
+"running. This is particularly the case for FreeBSD-CURRENT, where you should "
+"also specify the date of the sources, though of course you should not be "
+"sending questions about -CURRENT to FreeBSD-questions."
+msgstr ""
+"Em quase todos os casos, é importante saber a versão do FreeBSD que você "
+"está executando. Isso é particularmente importante para o FreeBSD-CURRENT, "
+"onde você também deve especificar a data das fontes, embora, é claro, você "
+"não deva enviar perguntas sobre o -CURRENT para o FreeBSD-questions."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:141
+msgid ""
+"With any problem which _could_ be hardware related, tell us about your "
+"hardware. In case of doubt, assume it is possible that it is hardware. What "
+"kind of CPU are you using? How fast? What motherboard? How much memory? What "
+"peripherals?"
+msgstr ""
+"Com qualquer problema que _pode_ estar relacionado ao hardware, informe-nos "
+"sobre seu hardware. Em caso de dúvida, assuma que é possível que seja um "
+"problema de hardware. Que tipo de CPU você está usando? Quão rápida? Qual "
+"placa-mãe? Quanta memória? Quais periféricos?"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:143
+msgid ""
+"There is a judgement call here, of course, but the output of the man:"
+"dmesg[8] command can frequently be very useful, since it tells not just what "
+"hardware you are running, but what version of FreeBSD as well."
+msgstr ""
+"Há um julgamento envolvido aqui, é claro, mas a saída do comando man:dmesg[8]"
+" frequentemente pode ser muito útil, pois não apenas informa qual hardware "
+"você está usando, mas também qual versão do FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:144
+msgid ""
+"If you get error messages, do not say \"I get error messages\", say (for "
+"example) \"I get the error message 'No route to host'\"."
+msgstr ""
+"Se você receber mensagens de erro, não diga \"Eu recebo mensagens de erro\", "
+"diga (por exemplo) \"Eu recebo a mensagem de erro 'No route to host'\"."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:145
+msgid ""
+"If your system panics, do not say \"My system panicked\", say (for example) "
+"\"my system panicked with the message 'free vnode isn't'\"."
+msgstr ""
+"Se o seu sistema \"panica\", não diga \"Meu sistema \"panica\", diga (por "
+"exemplo) \"Meu sistema \"panica\" com a mensagem 'free vnode isn't'\"."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:146
+msgid ""
+"If you have difficulty installing FreeBSD, please tell us what hardware you "
+"have. In particular, it is important to know the IRQs and I/O addresses of "
+"the boards installed in your machine."
+msgstr ""
+"Se você tiver dificuldade para instalar o FreeBSD, informe-nos sobre o seu "
+"hardware. É especialmente importante saber os IRQs e os endereços I/O das "
+"placas instaladas em sua máquina."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:147
+msgid ""
+"If you have difficulty getting PPP to run, describe the configuration. Which "
+"version of PPP do you use? What kind of authentication do you have? Do you "
+"have a static or dynamic IP address? What kind of messages do you get in the "
+"log file?"
+msgstr ""
+"Caso você esteja com dificuldades para executar o PPP, descreva a "
+"configuração utilizada. Qual versão do PPP está sendo utilizada? Que tipo de "
+"autenticação está sendo utilizada? O endereço IP é estático ou dinâmico? Que "
+"tipo de mensagens aparecem no arquivo de log?"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:149
+msgid ""
+"A lot of the information you need to supply is the output of programs, such "
+"as man:dmesg[8], or console messages, which usually appear in [.filename]#/"
+"var/log/messages#. Do not try to copy this information by typing it in "
+"again; it is a real pain, and you are bound to make a mistake. To send log "
+"file contents, either make a copy of the file and use an editor to trim the "
+"information to what is relevant, or cut and paste into your message. For the "
+"output of programs like man:dmesg[8], redirect the output to a file and "
+"include that. For example,"
+msgstr ""
+"Muitas das informações que você precisa fornecer são a saída de programas, "
+"como o man:dmesg[8], ou mensagens de console, que geralmente aparecem no "
+"arquivo [.filename]#/var/log/messages#. Não tente copiar essa informação "
+"digitando-a novamente; isso é realmente difícil e você provavelmente "
+"cometerá um erro. Para enviar o conteúdo do arquivo de log, faça uma cópia "
+"do arquivo e use um editor para selecionar apenas as informações relevantes, "
+"ou copie e cole na sua mensagem. Para a saída de programas como o "
+"man:dmesg[8], redirecione a saída para um arquivo e inclua esse arquivo. Por "
+"exemplo,"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:153
+#, no-wrap
+msgid "% dmesg > /tmp/dmesg.out\n"
+msgstr "% dmesg > /tmp/dmesg.out\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:156
+msgid "This redirects the information to the file [.filename]#/tmp/dmesg.out#."
+msgstr ""
+"Isto redireciona a informação para o arquivo [.filename]#/tmp/dmesg.out#."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:157
+msgid ""
+"If you do all this, and you still do not get an answer, there could be other "
+"reasons. For example, the problem is so complicated that nobody knows the "
+"answer, or the person who does know the answer was offline. If you do not "
+"get an answer after, say, a week, it might help to re-send the message. If "
+"you do not get an answer to your second message, though, you are probably "
+"not going to get one from this forum. Resending the same message again and "
+"again will only make you unpopular."
+msgstr ""
+"Se você fizer tudo isso e ainda assim não receber uma resposta, pode haver "
+"outras razões. Por exemplo, o problema pode ser tão complicado que ninguém "
+"sabe a resposta, ou a pessoa que sabe a resposta estava offline. Se você não "
+"receber uma resposta após, digamos, uma semana, pode ser útil reenviar a "
+"mensagem. No entanto, se você não receber uma resposta para sua segunda "
+"mensagem, provavelmente não receberá uma resposta neste fórum. Reenviar a "
+"mesma mensagem várias vezes só fará com que você fique impopular."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:160
+msgid ""
+"To summarize, let's assume you know the answer to the following question "
+"(yes, it is the same one in each case). You choose which of these two "
+"questions you would be more prepared to answer:"
+msgstr ""
+"Para resumir, vamos supor que você saiba a resposta para a seguinte pergunta "
+"(sim, é a mesma em cada caso). Você escolhe qual dessas duas perguntas você "
+"estaria mais preparado para responder:"
+
+#. type: Block title
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:161
+#, no-wrap
+msgid "Message 1"
+msgstr "Mensagem 1"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:171
+#, no-wrap
+msgid ""
+"Subject: HELP!!?!??\n"
+"I just can't get hits damn silly FereBSD system to\n"
+"workd, and Im really good at this tsuff, but I have never seen\n"
+"anythign sho difficult to install, it jst wont work whatever I try\n"
+"so why don't you guys tell me what I doing wrong.\n"
+msgstr ""
+"Assunto: AJUDA!!?!??\n"
+"Eu simplesmente não consigo fazer esse maldito sistema FreeBSD \n"
+"funcionar, e eu sou realmente bom nisso, mas nunca vi nada tão \n"
+"difícil de instalar, não importa o que eu tente, simplesmente não \n"
+"funciona. Por que vocês não me dizem o que estou fazendo de errado?\n"
+
+#. type: Block title
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:174
+#, no-wrap
+msgid "Message 2"
+msgstr "Mensagem 2"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:180
+#, no-wrap
+msgid "Subject: Problems installing FreeBSD\n"
+msgstr "Assunto: Problemas na instalação do FreeBSD\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:187
+#, no-wrap
+msgid ""
+"I've just got the FreeBSD 2.1.5 CDROM from Walnut Creek, and I'm having a lot\n"
+"of difficulty installing it. I have a 66 MHz 486 with 16 MB of\n"
+"memory and an Adaptec 1540A SCSI board, a 1.2GB Quantum Fireball\n"
+"disk and a Toshiba 3501XA CDROM drive. The installation works just\n"
+"fine, but when I try to reboot the system, I get the message\n"
+"Missing Operating System.\n"
+msgstr ""
+"Acabei de receber o CD-ROM do FreeBSD 2.1.5 da Walnut Creek e estou tendo \n"
+"muita dificuldade para instalá-lo. Tenho um 486 de 66 MHz com 16 MB de "
+"memória \n"
+"e uma placa SCSI Adaptec 1540A, um disco Quantum Fireball de 1,2 GB e uma "
+"unidade \n"
+"de CD-ROM Toshiba 3501XA. A instalação funciona muito bem, mas quando tento "
+"reiniciar \n"
+"o sistema, recebo a mensagem \"Sistema Operacional Ausente\".\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:190
+#, no-wrap
+msgid "How to Follow up to a Question"
+msgstr "Como fazer o acompanhamento de uma pergunta"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:195
+msgid ""
+"Often you will want to send in additional information to a question you have "
+"already sent. The best way to do this is to reply to your original "
+"message. This has three advantages:"
+msgstr ""
+"Muitas vezes, você desejará enviar informações adicionais para uma pergunta "
+"que já enviou. A melhor maneira de fazer isso é responder à sua mensagem "
+"original. Isso tem três vantagens:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:197
+msgid ""
+"You include the original message text, so people will know what you are "
+"talking about. Do not forget to trim unnecessary text out, though."
+msgstr ""
+"Você inclui o texto da mensagem original, assim as pessoas saberão do que "
+"você está falando. Não esqueça de retirar texto desnecessário."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:198
+msgid ""
+"The text in the subject line stays the same (you did remember to put one in, "
+"did you not?). Many mailers will sort messages by subject. This helps group "
+"messages together."
+msgstr ""
+"O texto no campo do assunto permanece o mesmo (você lembrou de colocar o "
+"assunto, não foi?). Muitos aplicativos ordenarão as mensagens pelo assunto. "
+"Isto ajuda o agrupamento de mensagens."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:199
+msgid ""
+"The message reference numbers in the header will refer to the previous "
+"message. Some mailers, such as http://www.mutt.org/[mutt], can _thread_ "
+"messages, showing the exact relationships between the messages."
+msgstr ""
+"Os números de referência da mensagem no cabeçalho se referirão à mensagem "
+"anterior. Alguns programas de e-mail, como o http://www.mutt.org/[mutt], "
+"podem _agrupar_ as mensagens, mostrando as relações exatas entre as "
+"mensagens."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:200
+#, no-wrap
+msgid "How to Answer a Question"
+msgstr "Como Responder uma Pergunta"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:203
+msgid "Before you answer a question to FreeBSD-questions, consider:"
+msgstr "Antes de responder uma pergunta na FreeBSD-questions, considere:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:205
+msgid ""
+"A lot of the points on submitting questions also apply to answering "
+"questions. Read them."
+msgstr ""
+"Muitas das diretivas usadas quando se está para escrever uma questão também "
+"são válidas para respondê-las. Leia-as."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:206
+msgid ""
+"Has somebody already answered the question? The easiest way to check this is "
+"to sort your incoming mail by subject: then (hopefully) you will see the "
+"question followed by any answers, all together."
+msgstr ""
+"Alguém já respondeu à pergunta? A maneira mais fácil de conferir isto é "
+"ordenando as mensagens recebidas pelo assunto: então (esperançosamente) você "
+"verá a pergunta seguida pelas respectivas respostas, todas juntas."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:209
+msgid ""
+"If somebody has already answered it, it does not automatically mean that you "
+"should not send another answer. But it makes sense to read all the other "
+"answers first."
+msgstr ""
+"Se alguém já respondeu, isso não significa automaticamente que você não deve "
+"enviar outra resposta. Mas faz sentido ler todas as outras respostas "
+"primeiro."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:210
+msgid ""
+"Do you have something to contribute beyond what has already been said? In "
+"general, \"Yeah, me too\" answers do not help much, although there are "
+"exceptions, like when somebody is describing a problem they are having, and "
+"they do not know whether it is their fault or whether there is something "
+"wrong with the hardware or software. If you do send a \"me too\" answer, you "
+"should also include any further relevant information."
+msgstr ""
+"Você tem algo a acrescentar além do que já foi dito? Em geral, respostas "
+"como \"Sim, eu também\" não ajudam muito, embora existam exceções, como "
+"quando alguém está descrevendo um problema que está tendo e não sabe se é "
+"culpa dele ou se há algo de errado com o hardware ou software. Se você "
+"enviar uma resposta do tipo \"eu também\", lembre-se de incluir qualquer "
+"informação adicional relevante."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:211
+msgid ""
+"Are you sure you understand the question? Very frequently, the person who "
+"asks the question is confused or does not express themselves very well. Even "
+"with the best understanding of the system, it is easy to send a reply which "
+"does not answer the question. This does not help: you will leave the person "
+"who submitted the question more frustrated or confused than ever. If nobody "
+"else answers, and you are not too sure either, you can always ask for more "
+"information."
+msgstr ""
+"Você tem certeza de que entendeu a pergunta? Com muita frequência, a pessoa "
+"que faz a pergunta está confusa ou não se expressa muito bem. Mesmo com o "
+"melhor entendimento do sistema, é fácil enviar uma resposta que não responda "
+"à pergunta. Isso não ajuda: você deixará a pessoa que fez a pergunta mais "
+"frustrada ou confusa do que nunca. Se ninguém mais responder e você também "
+"não tiver certeza, sempre pode pedir mais informações."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:212
+msgid ""
+"Are you sure your answer is correct? If not, wait a day or so. If nobody "
+"else comes up with a better answer, you can still reply and say, for "
+"example, \"I do not know if this is correct, but since nobody else has "
+"replied, why don't you try replacing your ATAPI CDROM with a frog?\"."
+msgstr ""
+"Você tem certeza de que sua resposta está correta? Se não tiver certeza, "
+"espere um dia ou mais. Se ninguém mais apresentar uma resposta melhor, você "
+"ainda pode responder e dizer, por exemplo, \"Não tenho certeza se isso está "
+"correto, mas como ninguém mais respondeu, por que você não tenta substituir "
+"seu CD-ROM ATAPI por um sapo?\"."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:213
+msgid ""
+"Unless there is a good reason to do otherwise, reply to the sender and to "
+"FreeBSD-questions. Many people on the FreeBSD-questions are \"lurkers\": "
+"they learn by reading messages sent and replied to by others. If you take a "
+"message which is of general interest off the list, you are depriving these "
+"people of their information. Be careful with group replies; lots of people "
+"send messages with hundreds of CCs. If this is the case, be sure to trim the "
+"Cc: lines appropriately."
+msgstr ""
+"A menos que haja uma boa razão para fazer o contrário, responda ao remetente "
+"e à FreeBSD-questions. Muitas pessoas em FreeBSD-questions são \"espectadores"
+"\": elas aprendem lendo as mensagens enviadas e respondidas por outros. Se "
+"você tirar uma mensagem de interesse geral da lista, estará privando essas "
+"pessoas de suas informações. Tenha cuidado com as respostas em grupo; muitas "
+"pessoas enviam mensagens com centenas de CCs. Se esse for o caso, certifique-"
+"se de cortar as linhas de Cc: apropriadamente."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:214
+msgid ""
+"Include relevant text from the original message. Trim it to the minimum, but "
+"do not overdo it. It should still be possible for somebody who did not read "
+"the original message to understand what you are talking about."
+msgstr ""
+"Inclua o texto relevante da mensagem original. Corte-o ao mínimo, mas não "
+"exagere. Deve ainda ser possível para alguém que não leu a mensagem original "
+"entender sobre o que você está falando."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:215
+msgid ""
+"Use some technique to identify which text came from the original message, "
+"and which text you add. I personally find that prepending \"`>`\" to the "
+"original message works best. Leaving white space after the \"`> ;`\" and "
+"leave empty lines between your text and the original text both make the "
+"result more readable."
+msgstr ""
+"Use alguma técnica para identificar qual texto veio da mensagem original e "
+"qual texto você adicionou. Pessoalmente, acho que adicionar um \"`>`\" na "
+"frente da mensagem original funciona melhor. Deixar um espaço em branco "
+"depois do \"`> ;`\" e deixar linhas vazias entre seu texto e o texto "
+"original torna o resultado mais legível."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:216
+msgid ""
+"Put your response in the correct place (after the text to which it replies). "
+"It is very difficult to read a thread of responses where each reply comes "
+"before the text to which it replies."
+msgstr ""
+"Coloque sua resposta no lugar correto (após o texto ao qual ela se refere). "
+"É muito difícil ler um encadeamento de respostas em que cada resposta vem "
+"antes do texto ao qual ela se refere."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:217
+msgid ""
+"Most mailers change the subject line on a reply by prepending a text such as "
+"\"Re: \". If your mailer does not do it automatically, you should do it "
+"manually."
+msgstr ""
+"A maioria dos programas de email altera a linha de assunto em uma resposta "
+"adicionando um texto como \"Re: \". Se o seu programa de email não fizer "
+"isso automaticamente, você deve fazê-lo manualmente."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:218
+msgid ""
+"If the submitter did not abide by format conventions (lines too long, "
+"inappropriate subject line) _please_ fix it. In the case of an incorrect "
+"subject line (such as \"HELP!!??\"), change the subject line to (say) \"Re: "
+"Difficulties with sync PPP (was: HELP!!??)\". That way other people trying "
+"to follow the thread will have less difficulty following it."
+msgstr ""
+"Se o autor da pergunta não seguir as convenções de formato (linhas muito "
+"longas, assunto inapropriado), _por favor_ corrija-o. No caso de uma linha "
+"de assunto incorreta (como \"AJUDA!!??\"), altere a linha de assunto para ("
+"por exemplo) \"Re: Dificuldades com PPP de sincronização (era: AJUDA!!??)\". "
+"Dessa forma, outras pessoas que tentam seguir a discussão terão menos "
+"dificuldade em acompanhá-la."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:221
+msgid ""
+"In such cases, it is appropriate to say what you did and why you did it, but "
+"try not to be rude. If you find you can not answer without being rude, do "
+"not answer."
+msgstr ""
+"Nesses casos, é apropriado dizer o que você fez e por que fez, mas tente não "
+"ser rude. Se você descobrir que não consegue responder sem ser rude, não "
+"responda."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:223
+msgid ""
+"If you just want to reply to a message because of its bad format, just reply "
+"to the submitter, not to the list. You can just send him this message in "
+"reply, if you like."
+msgstr ""
+"Se você quiser apenas responder a uma mensagem por causa do seu formato "
+"ruim, apenas responda ao autor da mensagem, não para a lista. Você pode "
+"simplesmente enviar esta mensagem para ele em resposta, se desejar."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+
+#, fuzzy
+#~ msgid ""
+#~ "The password fields in the subscription form provide only mild security, "
+#~ "but should prevent others from messing with your subscription. _Do not "
+#~ "use a valuable password_ as it will occasionally be emailed back to you "
+#~ "in cleartext."
+#~ msgstr ""
+#~ "O campo para senha no formulário de inscrição proporciona somente uma "
+#~ "segurança moderada, mas deve evitar que outros enviem mensagens usando "
+#~ "sua conta. <emphasis>Não use uma senha importante para você</emphasis> "
+#~ "pois ela eventualmente poderá ser enviada para você por email em texto "
+#~ "plano."
diff --git a/documentation/content/pt-br/articles/freebsd-src-lsp/_index.adoc b/documentation/content/pt-br/articles/freebsd-src-lsp/_index.adoc
new file mode 100644
index 0000000000..98dd54ff75
--- /dev/null
+++ b/documentation/content/pt-br/articles/freebsd-src-lsp/_index.adoc
@@ -0,0 +1,268 @@
+---
+authors:
+ -
+ author: 'Ka Ho Ng'
+ email: khng@FreeBSD.org
+copyright: '2021 The FreeBSD Foundation'
+description: 'Utilize servidores de linguagem para o desenvolvimento na árvore src do FreeBSD para obter resultados precisos e completos ao buscar a definição de um termo no código fonte.'
+tags: ["FreeBSD", "Language Server", "LSP"]
+title: 'Utilize Servidores de Linguagem para o Desenvolvimento na Árvore Src do FreeBSD'
+trademarks: ["freebsd"]
+---
+
+= Utilize Servidores de Linguagem para o Desenvolvimento na Árvore Src do FreeBSD
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+:images-path: articles/freebsd-src-lsp/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+
+toc::[]
+
+[[intro]]
+== Introdução
+
+Este guia é sobre como configurar uma árvore src do FreeBSD com servidores de linguagem realizando a indexação de código fonte. O guia descreve os passos para o Vim/NeoVim e o VSCode. Se você usar um editor de texto diferente, pode usar este guia como referência e procurar os comandos equivalentes para o seu editor preferido.
+
+[[requirements]]
+== Requisitos
+
+Para seguir este guia, precisamos instalar certos requisitos. Precisamos de um servidor de linguagem, `ccls` ou `clangd`, e opcionalmente um banco de dados de compilação.
+
+A instalação do servidor de linguagem pode ser realizada via `pkg` ou via ports. Se escolhermos `clangd`, precisaremos instalar o `llvm`.
+
+Usando o `pkg` para instalar o `ccls`:
+
+[source, shell]
+....
+# pkg install ccls
+....
+
+Se quisermos usar o `clangd`, precisaremos instalar o `llvm` (O comando de exemplo usa o `llvm15`, mas escolha a versão que desejar):
+
+[source, shell]
+....
+# pkg install llvm15
+....
+
+Para instalar via ports, escolha a sua combinação favorita de ferramentas de cada categoria abaixo:
+
+* Implementações de servidores de linguagem
+** package:devel/ccls[]
+** package:devel/llvm12[] (Outras versões também são aceitáveis, mas as mais novas são melhores. Substitua `clangd12` por `clangdN` no caso de outras versões serem usadas.)
+* Editores
+** package:editors/vim[]
+** package:editors/neovim[]
+** package:editors/vscode[]
+* Gerador de banco de dados de compilação
+** package:devel/python[] (Para a implementação do scan-build-py do llvm)
+** package:devel/py-pip[] (Para a implementação do scan-build do rizsotto)
+** package:devel/bear[]
+
+[[editor-settings]]
+== Configurações do editor
+
+[[settings-vim]]
+=== Vim/Neovim
+
+==== Plugins de cliente LSP
+
+O gerenciador de plugin integrado é usado para ambos os editores neste exemplo. O plugin do cliente LSP usado é o link:https://github.com/prabirshrestha/vim-lsp[prabirshrestha/vim-lsp].
+
+Para configurar o plugin do cliente LSP para o Neovim:
+
+[source, shell]
+....
+# mkdir -p ~/.config/nvim/pack/lsp/start
+# git clone https://github.com/prabirshrestha/vim-lsp ~/.config/nvim/pack/lsp/start/vim-lsp
+....
+
+e para o Vim:
+
+[source, shell]
+....
+# mkdir -p ~/.vim/pack/lsp/start
+# git clone https://github.com/prabirshrestha/vim-lsp ~/.vim/pack/lsp/start/vim-lsp
+....
+
+Para habilitar o plugin do cliente LSP no editor, adicione o seguinte trecho em [.filepath]#~/.config/nvim/init.vim# ao usar o Neovim, ou [.filepath]#~/.vim/vimrc# ao usar o Vim:
+
+.Para o ccls
+[source, vim]
+....
+au User lsp_setup call lsp#register_server({
+ \ 'name': 'ccls',
+ \ 'cmd': {server_info->['ccls']},
+ \ 'allowlist': ['c', 'cpp', 'objc'],
+ \ 'initialization_options': {
+ \ 'cache': {
+ \ 'hierarchicalPath': v:true
+ \ }
+ \ }})
+....
+
+.Para o clangd
+[source, vim]
+....
+au User lsp_setup call lsp#register_server({
+ \ 'name': 'clangd',
+ \ 'cmd': {server_info->['clangd15', '--background-index', '--header-insertion=never']},
+ \ 'allowlist': ['c', 'cpp', 'objc'],
+ \ 'initialization_options': {},
+ \ })
+....
+
+Dependendo da versão que você instalou para o `clangd`, pode ser necessário atualizar o `server-info` para apontar para o binário correto.
+
+Por favor, consulte link:https://github.com/prabirshrestha/vim-lsp/blob/master/README.md#registering-servers[] para aprender sobre como configurar atalhos e as funções para autocompletar o código. O site oficial do clangd é link:https://clangd.llvm.org[], e o repositório do ccls é link:https://github.com/MaskRay/ccls/[].
+
+Abaixo estão as configurações de referência para atalhos de teclado e o autocomplemento de código. Insira o seguinte trecho em [.filepath]#~/.config/nvim/init.vim# ou [.filepath]#~/.vim/vimrc# para que usuários do Vim possam utilizá-las:
+
+[source, vim]
+....
+function! s:on_lsp_buffer_enabled() abort
+ setlocal omnifunc=lsp#complete
+ setlocal completeopt-=preview
+ setlocal keywordprg=:LspHover
+
+ nmap <buffer> <C-]> <plug>(lsp-definition)
+ nmap <buffer> <C-W>] <plug>(lsp-peek-definition)
+ nmap <buffer> <C-W><C-]> <plug>(lsp-peek-definition)
+ nmap <buffer> gr <plug>(lsp-references)
+ nmap <buffer> <C-n> <plug>(lsp-next-reference)
+ nmap <buffer> <C-p> <plug>(lsp-previous-reference)
+ nmap <buffer> gI <plug>(lsp-implementation)
+ nmap <buffer> go <plug>(lsp-document-symbol)
+ nmap <buffer> gS <plug>(lsp-workspace-symbol)
+ nmap <buffer> ga <plug>(lsp-code-action)
+ nmap <buffer> gR <plug>(lsp-rename)
+ nmap <buffer> gm <plug>(lsp-signature-help)
+endfunction
+
+augroup lsp_install
+ au!
+ autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled()
+augroup END
+....
+
+[[settings-vscode]]
+=== VSCode
+
+==== Plugins de cliente LSP
+
+Plugins de cliente LSP são necessários para iniciar o daemon do servidor de linguagem. Pressione `Ctrl+Shift+X` para exibir o painel de pesquisa de extensões online. Digite `llvm-vs-code-extensions.vscode-clangd` quando estiver usando o clangd, ou `ccls-project.ccls` quando estiver usando o ccls.
+
+Em seguida, pressione `Ctrl+Shift+P` para exibir a paleta de comandos do editor. Digite `Preferences: Open Settings (JSON)` na paleta e pressione `Enter` para abrir o [.filepath]#settings.json#. Dependendo das implementações do servidor de linguagem, adicione um dos seguintes pares chave/valor JSON em [.filepath]#settings.json#:
+
+.Para o clangd
+[source, json]
+....
+[
+ /* Begin of your existing configurations */
+ ...
+ /* End of your existing configurations */
+ "clangd.arguments": [
+ "--background-index",
+ "--header-insertion=never"
+ ],
+ "clangd.path": "clangd12"
+]
+....
+
+.Para o ccls
+[source, json]
+....
+[
+ /* Begin of your existing configurations */
+ ...
+ /* End of your existing configurations */
+ "ccls.cache.hierarchicalPath": true
+]
+....
+
+[[cdb]]
+== Banco de dados de compilação
+
+Um banco de dados de compilação contém um array de objetos de comando de compilação. Cada objeto especifica uma maneira de compilar um arquivo de origem. O arquivo de banco de dados de compilação geralmente é chamado de [.filename]#compile_commands.json#. O banco de dados é usado por implementações de servidores de linguagem para fins de indexação.
+
+Por favor, consulte link:https://clang.llvm.org/docs/JSONCompilationDatabase.html#format[] para obter detalhes sobre o formato do arquivo do banco de dados de compilação.
+
+[[cdb-generators]]
+=== Geradores
+
+[[generators-scan-build-py]]
+==== Usando scan-build-py
+
+===== Instalação
+
+A ferramenta `intercept-build` do scan-build-py é usada para gerar o banco de dados de compilação.
+
+Primeiro instale o package:devel/python[] para obter o interpretador Python. Para obter o `intercept-build` do LLVM:
+
+[source, shell]
+....
+# git clone https://github.com/llvm/llvm-project /path/to/llvm-project
+....
+
+onde [.filename]#/path/to/llvm-project/# é o caminho desejado para o repositório. Crie um alias no arquivo de configuração do shell para conveniência:
+
+[source, shell]
+....
+alias intercept-build='/path/to/llvm-project/clang/tools/scan-build-py/bin/intercept-build'
+....
+
+Você também pode usar o link:https://github.com/rizsotto/scan-build[rizsotto/scan-build] em vez do scan-build-py do LLVM. O scan-build-py do LLVM foi incorporado ao repositório do LLVM. Essa implementação pode ser instalada com o comando `pip install --user scan-build`. O script `intercept-build` é instalado por padrão em [.filename]#~/.local/bin#.
+
+===== Uso
+
+No diretório raiz da árvore src do FreeBSD, gere o banco de dados de compilação com o `intercept-build`:
+
+[source, shell]
+....
+# intercept-build --append make buildworld buildkernel -j`sysctl -n hw.ncpu`
+....
+
+A opção `--append` instrui o `intercept-build` a ler um banco de dados de compilação existente (se existir) e adicionar os resultados ao banco de dados. As entradas com chaves de comando duplicadas são mescladas. O banco de dados de compilação gerado por padrão é salvo no diretório de trabalho atual como [.filename]#compile_commands.json#.
+
+[[generators-bear]]
+==== Usando o devel/bear
+
+===== Uso
+
+No diretório raiz da árvore src do FreeBSD, para gerar o banco de dados de compilação com o `bear`:
+
+[source, shell]
+....
+# bear --append -- make buildworld buildkernel -j`sysctl -n hw.ncpu`
+....
+
+A opção `--append` instrui o `bear` a ler um banco de dados de compilação existente, se estiver presente, e adicionar os resultados ao banco de dados. As entradas com chave de comando duplicada são mescladas. O banco de dados de compilação gerado por padrão é salvo no diretório de trabalho atual como [.filename]#compile_commands.json#.
+
+[[final]]
+== Finalizando
+
+Depois que o banco de dados de compilação for gerado, abra qualquer arquivo de código fonte na árvore src do FreeBSD e o daemon do servidor LSP será lançado em segundo plano. Abrir arquivos de código fonte na árvore src pela primeira vez leva significativamente mais tempo antes que o servidor LSP seja capaz de fornecer um resultado completo, devido à indexação de segundo plano inicial pelo servidor LSP compilando todas as entradas listadas no banco de dados de compilação. No entanto, o daemon do servidor de linguagem não indexa os arquivos de origem que não aparecem no banco de dados de compilação, portanto, nenhum resultado completo é mostrado em arquivos de origem que não estão sendo compilados durante o `make`.
diff --git a/documentation/content/pt-br/articles/freebsd-src-lsp/_index.po b/documentation/content/pt-br/articles/freebsd-src-lsp/_index.po
new file mode 100644
index 0000000000..18684ac133
--- /dev/null
+++ b/documentation/content/pt-br/articles/freebsd-src-lsp/_index.po
@@ -0,0 +1,702 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-04-20 20:56-0300\n"
+"PO-Revision-Date: 2023-05-08 19:31+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesfreebsd-src-lsp_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:1
+#, no-wrap
+msgid "Use Language Servers for development in the FreeBSD src tree to get precise go-to-definition and completion results."
+msgstr ""
+"Utilize servidores de linguagem para o desenvolvimento na árvore src do "
+"FreeBSD para obter resultados precisos e completos ao buscar a definição de "
+"um termo no código fonte."
+
+#. type: Title =
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:1
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:13
+#, no-wrap
+msgid "Use Language Servers for Development in the FreeBSD Src Tree"
+msgstr ""
+"Utilize Servidores de Linguagem para o Desenvolvimento na Árvore Src do "
+"FreeBSD"
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:47
+#, no-wrap
+msgid "Introduction"
+msgstr "Introdução"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:50
+msgid ""
+"This guide is about setting up a FreeBSD src tree with language servers "
+"performing source code indexing. The guide describes the steps for Vim/"
+"NeoVim and VSCode. If you use a different text editor you can use this guide "
+"as a reference and search the equivalent commands for your preferred editor."
+msgstr ""
+"Este guia é sobre como configurar uma árvore src do FreeBSD com servidores "
+"de linguagem realizando a indexação de código fonte. O guia descreve os "
+"passos para o Vim/NeoVim e o VSCode. Se você usar um editor de texto "
+"diferente, pode usar este guia como referência e procurar os comandos "
+"equivalentes para o seu editor preferido."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:52
+#, no-wrap
+msgid "Requirements"
+msgstr "Requisitos"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:55
+msgid ""
+"In order to follow this guide we need to install certain requirements. We "
+"need a Language server, `ccls` or `clangd`, and optionally a compilation "
+"database."
+msgstr ""
+"Para seguir este guia, precisamos instalar certos requisitos. Precisamos de "
+"um servidor de linguagem, `ccls` ou `clangd`, e opcionalmente um banco de "
+"dados de compilação."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:57
+msgid ""
+"The installation of the Language server can be performed via `pkg` or via "
+"ports. If we chose `clangd` we need to install `llvm`."
+msgstr ""
+"A instalação do servidor de linguagem pode ser realizada via `pkg` ou via "
+"ports. Se escolhermos `clangd`, precisaremos instalar o `llvm`."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:59
+msgid "Using `pkg` to install `ccls`:"
+msgstr "Usando o `pkg` para instalar o `ccls`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:63
+#, no-wrap
+msgid "# pkg install ccls\n"
+msgstr "# pkg install ccls\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:66
+msgid ""
+"If we want to use `clangd` we need to install `llvm` (The example command "
+"uses `llvm15` but choose the version you desire):"
+msgstr ""
+"Se quisermos usar o `clangd`, precisaremos instalar o `llvm` (O comando de "
+"exemplo usa o `llvm15`, mas escolha a versão que desejar):"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:70
+#, no-wrap
+msgid "# pkg install llvm15\n"
+msgstr "# pkg install llvm15\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:73
+msgid ""
+"To install via ports choose a favorite combination of tools from each "
+"category below:"
+msgstr ""
+"Para instalar via ports, escolha a sua combinação favorita de ferramentas de "
+"cada categoria abaixo:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:75
+msgid "Language server implementations"
+msgstr "Implementações de servidores de linguagem"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:76
+msgid "package:devel/ccls[]"
+msgstr "package:devel/ccls[]"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:77
+msgid ""
+"package:devel/llvm12[] (Other versions are okay, but newer is better. "
+"Replace `clangd12` with clangdN in case other versions are used.)"
+msgstr ""
+"package:devel/llvm12[] (Outras versões também são aceitáveis, mas as mais "
+"novas são melhores. Substitua `clangd12` por `clangdN` no caso de outras "
+"versões serem usadas.)"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:78
+msgid "Editors"
+msgstr "Editores"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:79
+msgid "package:editors/vim[]"
+msgstr "package:editors/vim[]"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:80
+msgid "package:editors/neovim[]"
+msgstr "package:editors/neovim[]"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:81
+msgid "package:editors/vscode[]"
+msgstr "package:editors/vscode[]"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:82
+msgid "Compilation database generator"
+msgstr "Gerador de banco de dados de compilação"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:83
+msgid "package:devel/python[] (For llvm's scan-build-py implementation)"
+msgstr "package:devel/python[] (Para a implementação do scan-build-py do llvm)"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:84
+msgid "package:devel/py-pip[] (For rizsotto's scan-build implementation)"
+msgstr "package:devel/py-pip[] (Para a implementação do scan-build do rizsotto)"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:85
+msgid "package:devel/bear[]"
+msgstr "package:devel/bear[]"
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:87
+#, no-wrap
+msgid "Editor settings"
+msgstr "Configurações do editor"
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:90
+#, no-wrap
+msgid "Vim/Neovim"
+msgstr "Vim/Neovim"
+
+#. type: Title ====
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:92
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:178
+#, no-wrap
+msgid "LSP client plugins"
+msgstr "Plugins de cliente LSP"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:96
+msgid ""
+"The built-in plugin manager is used for both editors in this example. The "
+"LSP client plugin used is link:https://github.com/prabirshrestha/vim-"
+"lsp[prabirshrestha/vim-lsp]."
+msgstr ""
+"O gerenciador de plugin integrado é usado para ambos os editores neste "
+"exemplo. O plugin do cliente LSP usado é o link:https://github.com/"
+"prabirshrestha/vim-lsp[prabirshrestha/vim-lsp]."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:98
+msgid "To set up the LSP client plugin for Neovim:"
+msgstr "Para configurar o plugin do cliente LSP para o Neovim:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:103
+#, no-wrap
+msgid ""
+"# mkdir -p ~/.config/nvim/pack/lsp/start\n"
+"# git clone https://github.com/prabirshrestha/vim-lsp ~/.config/nvim/pack/lsp/start/vim-lsp\n"
+msgstr ""
+"# mkdir -p ~/.config/nvim/pack/lsp/start\n"
+"# git clone https://github.com/prabirshrestha/vim-lsp ~/.config/nvim/pack/"
+"lsp/start/vim-lsp\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:106
+msgid "and for Vim:"
+msgstr "e para o Vim:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:111
+#, no-wrap
+msgid ""
+"# mkdir -p ~/.vim/pack/lsp/start\n"
+"# git clone https://github.com/prabirshrestha/vim-lsp ~/.vim/pack/lsp/start/vim-lsp\n"
+msgstr ""
+"# mkdir -p ~/.vim/pack/lsp/start\n"
+"# git clone https://github.com/prabirshrestha/vim-lsp ~/.vim/pack/lsp/start/"
+"vim-lsp\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:114
+msgid ""
+"To enable the LSP client plugin in the editor, add the following snippet "
+"into [.filepath]#~/.config/nvim/init.vim# when using Neovim, or [."
+"filepath]#~/.vim/vimrc# when using Vim:"
+msgstr ""
+"Para habilitar o plugin do cliente LSP no editor, adicione o seguinte trecho "
+"em [.filepath]#~/.config/nvim/init.vim# ao usar o Neovim, ou [.filepath]#~/."
+"vim/vimrc# ao usar o Vim:"
+
+#. type: Block title
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:115
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:203
+#, no-wrap
+msgid "For ccls"
+msgstr "Para o ccls"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:127
+#, no-wrap
+msgid ""
+"au User lsp_setup call lsp#register_server({\n"
+" \\ 'name': 'ccls',\n"
+" \\ 'cmd': {server_info->['ccls']},\n"
+" \\ 'allowlist': ['c', 'cpp', 'objc'],\n"
+" \\ 'initialization_options': {\n"
+" \\ 'cache': {\n"
+" \\ 'hierarchicalPath': v:true\n"
+" \\ }\n"
+" \\ }})\n"
+msgstr ""
+"au User lsp_setup call lsp#register_server({\n"
+" \\ 'name': 'ccls',\n"
+" \\ 'cmd': {server_info->['ccls']},\n"
+" \\ 'allowlist': ['c', 'cpp', 'objc'],\n"
+" \\ 'initialization_options': {\n"
+" \\ 'cache': {\n"
+" \\ 'hierarchicalPath': v:true\n"
+" \\ }\n"
+" \\ }})\n"
+
+#. type: Block title
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:129
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:188
+#, no-wrap
+msgid "For clangd"
+msgstr "Para o clangd"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:138
+#, no-wrap
+msgid ""
+"au User lsp_setup call lsp#register_server({\n"
+" \\ 'name': 'clangd',\n"
+" \\ 'cmd': {server_info->['clangd15', '--background-index', '--header-insertion=never']},\n"
+" \\ 'allowlist': ['c', 'cpp', 'objc'],\n"
+" \\ 'initialization_options': {},\n"
+" \\ })\n"
+msgstr ""
+"au User lsp_setup call lsp#register_server({\n"
+" \\ 'name': 'clangd',\n"
+" \\ 'cmd': {server_info->['clangd15', '--background-index', '--header-"
+"insertion=never']},\n"
+" \\ 'allowlist': ['c', 'cpp', 'objc'],\n"
+" \\ 'initialization_options': {},\n"
+" \\ })\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:141
+msgid ""
+"Depending on the version that you installed for `clangd` you might need to "
+"update the `server-info` to point to the correct binary."
+msgstr ""
+"Dependendo da versão que você instalou para o `clangd`, pode ser necessário "
+"atualizar o `server-info` para apontar para o binário correto."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:144
+msgid ""
+"Please refer to link:https://github.com/prabirshrestha/vim-lsp/blob/master/"
+"README.md#registering-servers[] to learn about setting up key bindings and "
+"code completion. The official site of clangd is link:https://clangd.llvm."
+"org[], and the repository link of ccls is link:https://github.com/MaskRay/"
+"ccls/[]."
+msgstr ""
+"Por favor, consulte link:https://github.com/prabirshrestha/vim-lsp/blob/"
+"master/README.md#registering-servers[] para aprender sobre como configurar "
+"atalhos e as funções para autocompletar o código. O site oficial do clangd é "
+"link:https://clangd.llvm.org[], e o repositório do ccls é link:https://github"
+".com/MaskRay/ccls/[]."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:147
+msgid ""
+"Below are the reference settings of keybindings and code completions. Put "
+"the following snippet into [.filepath]#~/.config/nvim/init.vim#, or [."
+"filepath]#~/.vim/vimrc# for Vim users to use it:"
+msgstr ""
+"Abaixo estão as configurações de referência para atalhos de teclado e o "
+"autocomplemento de código. Insira o seguinte trecho em [.filepath]#~/.config/"
+"nvim/init.vim# ou [.filepath]#~/.vim/vimrc# para que usuários do Vim possam "
+"utilizá-las:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:154
+#, no-wrap
+msgid ""
+"function! s:on_lsp_buffer_enabled() abort\n"
+" setlocal omnifunc=lsp#complete\n"
+" setlocal completeopt-=preview\n"
+" setlocal keywordprg=:LspHover\n"
+msgstr ""
+"function! s:on_lsp_buffer_enabled() abort\n"
+" setlocal omnifunc=lsp#complete\n"
+" setlocal completeopt-=preview\n"
+" setlocal keywordprg=:LspHover\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:168
+#, no-wrap
+msgid ""
+" nmap <buffer> <C-]> <plug>(lsp-definition)\n"
+" nmap <buffer> <C-W>] <plug>(lsp-peek-definition)\n"
+" nmap <buffer> <C-W><C-]> <plug>(lsp-peek-definition)\n"
+" nmap <buffer> gr <plug>(lsp-references)\n"
+" nmap <buffer> <C-n> <plug>(lsp-next-reference)\n"
+" nmap <buffer> <C-p> <plug>(lsp-previous-reference)\n"
+" nmap <buffer> gI <plug>(lsp-implementation)\n"
+" nmap <buffer> go <plug>(lsp-document-symbol)\n"
+" nmap <buffer> gS <plug>(lsp-workspace-symbol)\n"
+" nmap <buffer> ga <plug>(lsp-code-action)\n"
+" nmap <buffer> gR <plug>(lsp-rename)\n"
+" nmap <buffer> gm <plug>(lsp-signature-help)\n"
+"endfunction\n"
+msgstr ""
+" nmap <buffer> <C-]> <plug>(lsp-definition)\n"
+" nmap <buffer> <C-W>] <plug>(lsp-peek-definition)\n"
+" nmap <buffer> <C-W><C-]> <plug>(lsp-peek-definition)\n"
+" nmap <buffer> gr <plug>(lsp-references)\n"
+" nmap <buffer> <C-n> <plug>(lsp-next-reference)\n"
+" nmap <buffer> <C-p> <plug>(lsp-previous-reference)\n"
+" nmap <buffer> gI <plug>(lsp-implementation)\n"
+" nmap <buffer> go <plug>(lsp-document-symbol)\n"
+" nmap <buffer> gS <plug>(lsp-workspace-symbol)\n"
+" nmap <buffer> ga <plug>(lsp-code-action)\n"
+" nmap <buffer> gR <plug>(lsp-rename)\n"
+" nmap <buffer> gm <plug>(lsp-signature-help)\n"
+"endfunction\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:173
+#, no-wrap
+msgid ""
+"augroup lsp_install\n"
+" au!\n"
+" autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled()\n"
+"augroup END\n"
+msgstr ""
+"augroup lsp_install\n"
+" au!\n"
+" autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled()\n"
+"augroup END\n"
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:176
+#, no-wrap
+msgid "VSCode"
+msgstr "VSCode"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:183
+msgid ""
+"LSP client plugins are required to launch the language server daemon. Press "
+"`Ctrl+Shift+X` to show the extension online search panel. Enter `llvm-vs-"
+"code-extensions.vscode-clangd` when running clangd, or `ccls-project.ccls` "
+"when running ccls."
+msgstr ""
+"Plugins de cliente LSP são necessários para iniciar o daemon do servidor de "
+"linguagem. Pressione `Ctrl+Shift+X` para exibir o painel de pesquisa de "
+"extensões online. Digite `llvm-vs-code-extensions.vscode-clangd` quando "
+"estiver usando o clangd, ou `ccls-project.ccls` quando estiver usando o ccls."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:187
+msgid ""
+"Then, press `Ctrl+Shift+P` to show the editor commands palette. Enter "
+"`Preferences: Open Settings (JSON)` into the palette and hit `Enter` to open "
+"[.filepath]#settings.json#. Depending on the language server "
+"implementations, put one of the following JSON key/value pairs in [."
+"filepath]#settings.json#:"
+msgstr ""
+"Em seguida, pressione `Ctrl+Shift+P` para exibir a paleta de comandos do "
+"editor. Digite `Preferences: Open Settings (JSON)` na paleta e pressione "
+"`Enter` para abrir o [.filepath]#settings.json#. Dependendo das "
+"implementações do servidor de linguagem, adicione um dos seguintes pares "
+"chave/valor JSON em [.filepath]#settings.json#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:201
+#, no-wrap
+msgid ""
+"[\n"
+" /* Begin of your existing configurations */\n"
+" ...\n"
+" /* End of your existing configurations */\n"
+" \"clangd.arguments\": [\n"
+" \"--background-index\",\n"
+" \"--header-insertion=never\"\n"
+" ],\n"
+" \"clangd.path\": \"clangd12\"\n"
+"]\n"
+msgstr ""
+"[\n"
+" /* Begin of your existing configurations */\n"
+" ...\n"
+" /* End of your existing configurations */\n"
+" \"clangd.arguments\": [\n"
+" \"--background-index\",\n"
+" \"--header-insertion=never\"\n"
+" ],\n"
+" \"clangd.path\": \"clangd12\"\n"
+"]\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:212
+#, no-wrap
+msgid ""
+"[\n"
+" /* Begin of your existing configurations */\n"
+" ...\n"
+" /* End of your existing configurations */\n"
+" \"ccls.cache.hierarchicalPath\": true\n"
+"]\n"
+msgstr ""
+"[\n"
+" /* Begin of your existing configurations */\n"
+" ...\n"
+" /* End of your existing configurations */\n"
+" \"ccls.cache.hierarchicalPath\": true\n"
+"]\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:215
+#, no-wrap
+msgid "Compilation database"
+msgstr "Banco de dados de compilação"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:221
+msgid ""
+"A Compilation database contains an array of compile command objects. Each "
+"object specifies a way of compiling a source file. The compilation database "
+"file is usually [.filename]#compile_commands.json#. The database is used by "
+"language server implementations for indexing purpose."
+msgstr ""
+"Um banco de dados de compilação contém um array de objetos de comando de "
+"compilação. Cada objeto especifica uma maneira de compilar um arquivo de "
+"origem. O arquivo de banco de dados de compilação geralmente é chamado de [."
+"filename]#compile_commands.json#. O banco de dados é usado por "
+"implementações de servidores de linguagem para fins de indexação."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:223
+msgid ""
+"Please refer to link:https://clang.llvm.org/docs/JSONCompilationDatabase."
+"html#format[] for details on the format of the compilation database file."
+msgstr ""
+"Por favor, consulte link:https://clang.llvm.org/docs/JSONCompilationDatabase."
+"html#format[] para obter detalhes sobre o formato do arquivo do banco de "
+"dados de compilação."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:225
+#, no-wrap
+msgid "Generators"
+msgstr "Geradores"
+
+#. type: Title ====
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:228
+#, no-wrap
+msgid "Using scan-build-py"
+msgstr "Usando scan-build-py"
+
+#. type: Title =====
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:230
+#, no-wrap
+msgid "Installation"
+msgstr "Instalação"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:234
+msgid ""
+"`intercept-build` tool from scan-build-py is used to generate compilation "
+"database."
+msgstr ""
+"A ferramenta `intercept-build` do scan-build-py é usada para gerar o banco "
+"de dados de compilação."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:237
+msgid ""
+"Install package:devel/python[] to get python interpreter first. To get "
+"`intercept-build` from LLVM:"
+msgstr ""
+"Primeiro instale o package:devel/python[] para obter o interpretador Python. "
+"Para obter o `intercept-build` do LLVM:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:241
+#, no-wrap
+msgid "# git clone https://github.com/llvm/llvm-project /path/to/llvm-project\n"
+msgstr ""
+"# git clone https://github.com/llvm/llvm-project /path/to/llvm-project\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:244
+msgid ""
+"where [.filename]#/path/to/llvm-project/# is your desired path for the "
+"repository. Make an alias in the shell configuration file for convenience:"
+msgstr ""
+"onde [.filename]#/path/to/llvm-project/# é o caminho desejado para o "
+"repositório. Crie um alias no arquivo de configuração do shell para "
+"conveniência:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:248
+#, no-wrap
+msgid "alias intercept-build='/path/to/llvm-project/clang/tools/scan-build-py/bin/intercept-build'\n"
+msgstr ""
+"alias intercept-build='/path/to/llvm-project/clang/tools/scan-build-py/bin/"
+"intercept-build'\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:254
+msgid ""
+"link:https://github.com/rizsotto/scan-build[rizsotto/scan-build] can be used "
+"instead of LLVM's scan-build-py. The LLVM's scan-build-py was rizsotto/scan-"
+"build merged into the LLVM tree. This implementation can be installed by "
+"`pip install --user scan-build`. The `intercept-build` script is in [."
+"filename]#~/.local/bin# by default."
+msgstr ""
+"Você também pode usar o link:https://github.com/rizsotto/scan-build[rizsotto/"
+"scan-build] em vez do scan-build-py do LLVM. O scan-build-py do LLVM foi "
+"incorporado ao repositório do LLVM. Essa implementação pode ser instalada "
+"com o comando `pip install --user scan-build`. O script `intercept-build` é "
+"instalado por padrão em [.filename]#~/.local/bin#."
+
+#. type: Title =====
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:255
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:271
+#, no-wrap
+msgid "Usage"
+msgstr "Uso"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:258
+msgid ""
+"In the top-level directory of the FreeBSD src tree, generate the compilation "
+"database with `intercept-build`:"
+msgstr ""
+"No diretório raiz da árvore src do FreeBSD, gere o banco de dados de "
+"compilação com o `intercept-build`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:262
+#, no-wrap
+msgid "# intercept-build --append make buildworld buildkernel -j`sysctl -n hw.ncpu`\n"
+msgstr ""
+"# intercept-build --append make buildworld buildkernel -j`sysctl -n hw.ncpu`"
+"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:267
+msgid ""
+"The `--append` flag tells the `intercept-build` to read an existing "
+"compilation database (if a compilation database exists) and append the "
+"results to the database. Entries with duplicated command keys are merged. "
+"The generated compilation database by default is saved in the current "
+"working directory as [.filename]#compile_commands.json#."
+msgstr ""
+"A opção `--append` instrui o `intercept-build` a ler um banco de dados de "
+"compilação existente (se existir) e adicionar os resultados ao banco de "
+"dados. As entradas com chaves de comando duplicadas são mescladas. O banco "
+"de dados de compilação gerado por padrão é salvo no diretório de trabalho "
+"atual como [.filename]#compile_commands.json#."
+
+#. type: Title ====
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:269
+#, no-wrap
+msgid "Using devel/bear"
+msgstr "Usando o devel/bear"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:274
+msgid ""
+"In the top-level directory of the FreeBSD src tree, to generate compilation "
+"database with `bear`:"
+msgstr ""
+"No diretório raiz da árvore src do FreeBSD, para gerar o banco de dados de "
+"compilação com o `bear`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:278
+#, no-wrap
+msgid "# bear --append -- make buildworld buildkernel -j`sysctl -n hw.ncpu`\n"
+msgstr "# bear --append -- make buildworld buildkernel -j`sysctl -n hw.ncpu`\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:283
+msgid ""
+"The `--append` flag tells `bear` to read an existing compilation database if "
+"it is present, and append the results to the database. Entries with "
+"duplicated command key are merged. The generated compilation database by "
+"default is saved in the current working directory as [."
+"filename]#compile_commands.json#."
+msgstr ""
+"A opção `--append` instrui o `bear` a ler um banco de dados de compilação "
+"existente, se estiver presente, e adicionar os resultados ao banco de dados. "
+"As entradas com chave de comando duplicada são mescladas. O banco de dados "
+"de compilação gerado por padrão é salvo no diretório de trabalho atual como ["
+".filename]#compile_commands.json#."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:285
+#, no-wrap
+msgid "Final"
+msgstr "Finalizando"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:289
+msgid ""
+"Once the compilation database is generated, open any source files in the "
+"FreeBSD src tree and LSP server daemon will be launched as well in "
+"background. Opening source files in the src tree for the first time takes "
+"significantly longer time before the LSP server is able to give a complete "
+"result, due to initial background indexing by the LSP server compiling all "
+"the listed entries in the compilation database. The language server daemon "
+"however does not index the source files not appearing in the compilation "
+"database, thus no complete results are shown on source files not being "
+"compiled during the `make`."
+msgstr ""
+"Depois que o banco de dados de compilação for gerado, abra qualquer arquivo "
+"de código fonte na árvore src do FreeBSD e o daemon do servidor LSP será "
+"lançado em segundo plano. Abrir arquivos de código fonte na árvore src pela "
+"primeira vez leva significativamente mais tempo antes que o servidor LSP "
+"seja capaz de fornecer um resultado completo, devido à indexação de segundo "
+"plano inicial pelo servidor LSP compilando todas as entradas listadas no "
+"banco de dados de compilação. No entanto, o daemon do servidor de linguagem "
+"não indexa os arquivos de origem que não aparecem no banco de dados de "
+"compilação, portanto, nenhum resultado completo é mostrado em arquivos de "
+"origem que não estão sendo compilados durante o `make`."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/freebsd-status-report-process/_index.adoc b/documentation/content/pt-br/articles/freebsd-status-report-process/_index.adoc
new file mode 100644
index 0000000000..2fa78261e6
--- /dev/null
+++ b/documentation/content/pt-br/articles/freebsd-status-report-process/_index.adoc
@@ -0,0 +1,244 @@
+---
+authors:
+ -
+ author: 'The FreeBSD Documentation Project'
+copyright: '2023 The FreeBSD Documentation Project'
+description: 'Instruções para escritores e editores dos relatórios de status'
+title: 'Processo de Relatório de Status do FreeBSD'
+trademarks: ["freebsd", "git", "github", "general"]
+---
+
+= Processo de Relatório de Status do FreeBSD
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+
+'''
+
+toc::[]
+
+Os relatórios de status do FreeBSD são publicados trimestralmente e fornecem ao público em geral uma visão do que está acontecendo no projeto, muitas vezes complementados por relatórios especiais de reuniões de desenvolvedores. Como eles são uma das nossas formas mais visíveis de comunicação, são muito importantes.
+
+Em todo este documento e em outros lugares relacionados aos relatórios de status do FreeBSD, a expressão "relatório de status" é usada tanto para indicar o documento publicado trimestralmente quanto as entradas individuais que estão nele.
+
+== Instruções para escritores
+
+Esta seção fornece alguns conselhos sobre como escrever entradas para os relatórios de status do FreeBSD, do mailto:theraven@FreeBSD.org[David Chisnall], experiente em redação técnica. Instruções sobre como enviar suas entradas também são fornecidas.
+
+_Não se preocupe se você não é um falante nativo de inglês. A equipe de status (mailto:status@FreeBSD.org) verificará suas entradas quanto à ortografia e gramática e as corrigirá para você._
+
+=== Introduza o seu trabalho
+
+_Não assuma que a pessoa que lerá o relatório conhece o seu projeto._
+
+Os relatórios de status possuem uma ampla distribuição. Eles são frequentemente um dos principais itens de notícias no site do FreeBSD e são uma das primeiras coisas que as pessoas vão ler se quiserem saber um pouco sobre o que é o FreeBSD. Considere este exemplo:
+
+....
+O suporte ao abc(4) foi adicionado, incluindo a compatibilidade com o frobnicator.
+....
+
+Alguém que esteja lendo isso, se estiver familiarizado com as páginas do manual UNIX, saberá que `abc(4)` é algum tipo de dispositivo. Mas por que o leitor deveria se importar? Que tipo de dispositivo é esse? Compare com esta versão:
+
+....
+Foi adicionado um novo driver, abc(4), na árvore, oferecendo suporte às interfaces de rede Frobnicator da linha Yoyodyne.
+....
+
+Agora o leitor sabe que abc é um driver de interface de rede. Mesmo que eles não usem nenhum produto Yoyodyne, você comunicou que o suporte do FreeBSD para dispositivos de rede está melhorando.
+
+=== Mostre a importância do seu trabalho
+
+_Os relatórios de status não são apenas para informar a todos que coisas foram feitas, eles também precisam explicar por que elas foram feitas._
+
+Continuando com o exemplo anterior. Por que é interessante que agora suportemos os cartões Yoyodyne Frobnicator? Eles são amplamente utilizados? São usados em um dispositivo popular específico? Eles são usados em uma área específica em que o FreeBSD tem (ou gostaria de ter) presença? Eles são os cartões de rede mais rápidos do planeta? Os relatórios de status frequentemente dizem coisas como essas:
+
+....
+Nós importamos o Cyberdyne Systems T800 para a árvore.
+....
+
+E então eles param. Talvez o leitor seja um ávido fã da Cyberdyne e saiba quais novos recursos emocionantes o T800 traz. Isso é improvável. É muito mais provável que eles tenham ouvido vagamente sobre o que você importou (especialmente na árvore de ports: lembre-se de que existem mais de 30.000 outras coisas lá também...). Liste alguns dos novos recursos ou correções de bugs. Diga-lhes por que é uma boa coisa que tenhamos a nova versão.
+
+=== Conte-nos Algo Novo
+
+_Não recicle os mesmos itens do relatório de status._
+
+Tenha em mente que os relatórios de status não são apenas relatórios sobre o status do projeto, são relatórios sobre a mudança de status do projeto. Se houver um projeto em andamento, gaste algumas frases apresentando-o, mas depois gaste o restante do relatório falando sobre o novo trabalho. Qual progresso foi feito desde o último relatório? O que ainda falta ser feito? Quando é provável que esteja concluído (ou, se "concluído" não se aplica realmente, quando é provável que esteja pronto para uso mais amplo, para testes, para implementação em produção e assim por diante)?
+
+=== Patrocínio
+
+_Não se esqueça dos seus patrocinadores._
+
+Se você ou seu projeto receberam patrocínio ou bolsa de estudo de alguém ou você já estava trabalhando como contratado ou funcionário de uma empresa, por favor inclua essa informação. Patrocinadores sempre apreciam quando são agradecidos pelo seu financiamento, mas também é benéfico para eles mostrarem que estão apoiando ativamente o Projeto dessa maneira. Por último, mas não menos importante, isso ajuda o FreeBSD a aprender mais sobre seus importantes consumidores.
+
+=== Tarefas Pendentes
+
+_Se você precisa de ajuda, deixe isso explícito!_
+
+Precisa de ajuda com algo? Existem tarefas que outras pessoas podem fazer? Existem duas maneiras de usar a parte de tarefas pendentes do relatório de status: para solicitar ajuda ou para dar uma visão geral rápida da quantidade de trabalho restante. Se já houver pessoas suficientes trabalhando no projeto, ou se ele estiver em um estado em que adicionar mais pessoas não aceleraria o processo, então é melhor usar a segunda opção. Fale sobre algumas das grandes tarefas em andamento e talvez indique quem está focado em cada uma delas.
+
+Enumere as tarefas, com detalhes suficientes para que as pessoas saibam se são capazes de realizá-las, e convide-as a entrar em contato.
+
+=== Envie seu relatório
+
+Os seguintes métodos estão disponíveis para você enviar os seus relatórios:
+
+* enviar um link:https://reviews.freebsd.org/[review no Phabricator] e adicionar o grupo _status_ à lista de revisores. Você deve colocar seus relatórios no subdiretório apropriado do `doc/website/content/en/status/` (crie-o se ele não existir);
+
+* enviar uma solicitação de pull request para o repositório doc através do link:https://github.com/freebsd/freebsd-doc [seu espelho GitHub]. Você deve colocar seus relatórios no subdiretório apropriado de `doc/website/content/en/status` (crie-o se ele não existir);
+
+* enviar um e-mail para status-submissions@FreeBSD.org incluindo o seu relatório.
+
+Um modelo de relatório em AsciiDoc link:https://www.FreeBSD.org/status/report-sample.adoc[está disponível aqui].
+
+== Instruções para editores
+
+Esta seção descreve como funciona o processo de revisão e publicação.
+
+[.informaltable]
+[cols="1,1", frame="none"]
+|===
+
+|Página principal dos relatórios de status
+|link:https://www.FreeBSD.org/status/[https://www.FreeBSD.org/status/]
+
+|Repositório arquivado do GitHub de relatórios de status (foi usado para os relatórios do 4º trimestre de 2017 até o 4º trimestre de 2022):
+|link:https://www.github.com/freebsd/freebsd-quarterly[https://github.com/freebsd/freebsd-quarterly]
+
+|Endereço de email principal da equipe de status
+|link:mailto:status@FreeBSD.org[status@FreeBSD.org]
+
+|Endereço de e-mail para envio de relatórios
+|link:mailto:status-submissions@FreeBSD.org[status-submissions@FreeBSD.org]
+
+|Lista de discussão para receber chamados para os relatórios de status
+|link:https://lists.freebsd.org/subscription/freebsd-status-calls[freebsd-status-calls@FreeBSD.org]
+
+|Página principal da equipe de status no Phabricator
+|link:https://reviews.freebsd.org/project/profile/88/[https://reviews.freebsd.org/project/88/]
+|===
+
+=== Linha do tempo
+
+Os relatórios são sempre aceitos pela equipe de status, mas o principal processo de coleta ocorre no último mês de cada trimestre, ou seja, em março, junho, setembro e dezembro. Chamadas explícitas para relatórios de status serão enviadas nesses meses. Os meses de janeiro, abril, julho e outubro são dedicados a reunir os relatórios enviados durante o trimestre anterior; isso pode incluir aguardar por envios tardios. A publicação dos relatórios de status é feita durante os mesmos meses assim que os relatórios estiverem prontos.
+
+Todas as submissões de relatórios podem ter o prazo estendido link:mailto:status-submissions@FreeBSD.org[enviando um email para a equipe de status] até o prazo estendido, que é de 8 dias após o final do trimestre. As entradas da link:https://www.freebsd.org/administration/#t-portmgr[equipe de gerenciamento do ports] por padrão utilizam o prazo estendido, devido à sobreposição entre os relatórios de status e os branchs trimestrais do ports.
+
+A revisão dos relatórios enviados por pessoas que não fazem parte da equipe de status deve estar essencialmente concluída até meados de janeiro/abril/julho/outubro (deadline para a revisão de terceiros). Ou seja, exceto por erros de digitação ou outra revisão leve, a equipe de status deve ser capaz de começar a montar os envios logo após o dia 15. Observe que isso não é uma restrição completa e a equipe de status ainda pode aceitar revisões após essa data.
+
+[cols="1,2,2,2,2"]
+|===
+||Primeiro trimestre|Segundo trimestre|Terceiro trimestre|Quarto trimestre
+
+|Primeira chamada para relatórios
+|1º de março
+|1º de junho
+|1º de setembro
+|1º de dezembro
+
+|Lembrete de 2 semanas restantes
+|15 de março
+|15 de junho
+|15 de setembro
+|15 de dezembro
+
+|Último lembrete
+|24 de março
+|24 de junho
+|24 de setembro
+|24 de dezembro
+
+|Prazo padrão
+|31 de março
+|30 de junho
+|30 de setembro
+|31 de dezembro
+
+|Prazo estendido
+|8 de abril
+|8 de julho
+|8 de outubro
+|8 de janeiro
+
+|Revisão por terceiros
+|15 de abril
+|15 de julho
+|15 de outubro
+|15 de janeiro
+|===
+
+=== Chamada para relatórios
+
+As chamadas para relatórios de status são enviadas para os seguintes destinatários:
+
+* a lista de discussão link:https://lists.freebsd.org/subscription/freebsd-status-calls[freebsd-status-calls@FreeBSD.org];
+* a todos os remetentes dos últimos relatórios de status (eles podem ter atualizações ou melhorias adicionais);
+* e, dependendo da época do ano:
+ ** Diversos organizadores de conferências:
+ *** link:mailto:secretary@asiabsdcon.org[AsiaBSDCon] em março (primeiro trimestre);
+ *** link:mailto:info@bsdcan.org[BSDCan] em maio (Segundo Trimestre);
+ *** EuroBSDcon entre setembro e outubro (Terceiro-Quarto Trimestre).
+ A EuroBSDcon como organização não está interessada em escrever relatórios para o FreeBSD (pelo menos não estava em outubro de 2019: sua razão é que a conferência não é específica do FreeBSD), portanto, relatórios sobre este evento devem ser solicitados aos membros da comunidade FreeBSD que participaram dele;
+ ** Para os link:mailto:soc-students@FreeBSD.org[estudantes] do programa Google Summer of Code e seus link:mailto:soc-mentors@FreeBSD.org[mentores].
+
+A maneira mais fácil de enviar chamadas para relatórios de status é usar o script Perl link:https://cgit.freebsd.org/doc/tree/tools/sendcalls/sendcalls[[.filename]#sendcalls#] existente no diretório [.filename]#tools/sendcalls# do repositório doc no git. O script envia automaticamente chamadas para todos os destinatários pretendidos. Ele também pode ser usado por meio de uma tarefa agendada no cron, por exemplo:
+
+....
+0 0 1,15,24 3,6,9,12 * cd ~/doc/tools/sendcalls && git pull && ./sendcalls -s 'Lorenzo Salvadore'
+....
+
+[IMPORTANT]
+====
+Se você está encarregado de enviar chamadas para relatórios de status e está usando um cronjob, execute-o na freefall e assine-o com seu nome para que seja possível inferir quem configurou a tarefa, caso algo dê errado. Além disso, atualize o exemplo acima com seu nome, como uma medida de segurança adicional.
+====
+
+Pode ser que valha a pena fazer uma chamada para relatórios nos fóruns, link:https://forums.freebsd.org/threads/call-for-freebsd-2014q4-october-december-status-reports.49812/[como foi feito no passado].
+
+=== Construindo o relatório
+
+Os relatórios enviados são revisados e mesclados na subpasta apropriada de [.filename]#doc/website/content/en/status/# assim que são recebidos. Enquanto os relatórios estão sendo atualizados, pessoas fora da equipe de status também podem revisar as entradas individuais e propor correções.
+
+Geralmente, o último passo no processo de revisão de conteúdo é escrever a introdução em um arquivo chamado [.filename]#intro.adoc#: uma boa introdução só pode ser escrita depois que todos os relatórios foram coletados. Se possível, é uma boa ideia pedir a diferentes pessoas para escrever a introdução para adicionar variedade: pessoas diferentes trarão diferentes pontos de vista e ajudarão a manter o texto interessante.
+
+Assim que todos os relatórios e a introdução estiverem prontos, o arquivo [.filename]#_index.adoc# precisa ser criado: este é o arquivo no qual os relatórios são distribuídos nas várias categorias e classificados.
+
+=== Publicação do relatório
+
+Quando todos os arquivos do relatório de status estiverem prontos, é hora de publicá-lo.
+
+Primeiramente, o arquivo [.filename]#doc/website/content/en/status/_index.adoc# é editado: a próxima data de entrega é atualizada e um link para o novo relatório é adicionado. A alteração é, então, enviada para o repositório e a equipe de status verifica se tudo está funcionando conforme o esperado.
+
+Em seguida, é adicionada uma entrada de notícias na página principal do site em [.filename]#doc/website/data/en/news/news.toml#.
+
+Aqui está um exemplo para uma entrada de notícias:
+....
+[[news]]
+date = "2021-01-16"
+title = "Relatório de Status de Outubro a Dezembro de 2020"
+description = "O <a href=\"https://www.FreeBSD.org/status/report-2020-10-2020-12.html\">Relatório de Status de Outubro a Dezembro de 2020</a> está agora disponível com 42 entradas."
+....
+
+Assim que a versão HTML do relatório estiver compilada e online, o man:w3m[1] é usado fazer o dump do website em formato de texto simples, por exemplo:
+....
+% w3m -cols 80 -dump https://www.FreeBSD.org/status/report-2021-01-2021-03/ > /tmp/report-2021-01-2021-03.txt
+....
+
+O `man:w3m[1]` possui suporte completo para unicode. O `-dump` simplesmente produz uma saída de texto da renderização do código HTML, que pode então ter alguns elementos recortados, enquanto o `-cols` garante que tudo seja enquadrado em 80 colunas.
+
+Um link para o relatório gerado é adicionado entre a introdução e a primeira entrada.
+
+O relatório está finalmente pronto para ser enviado, alterando o posicionamento (o relatório deve ser inserido) e garantindo que ele esteja codificado em UTF-8.
+
+Duas mensagens de e-mail são enviadas, ambas com o assunto no formato `Relatório de Status do FreeBSD - <Primeiro/Segundo/Terceiro/Quarto> Trimestre de <ano>`:
+
+* um para o link:https://lists.freebsd.org/subscription/freebsd-announce[freebsd-announce@FreeBSD.org];
+
+[IMPORTANT]
+====
+Este deverá ser aprovado, portanto, se você for responsável por enviar este e-mail, certifique-se de que alguém o faça (envie um e-mail para o link:mailto:postmaster@FreeBSD.org[postmaster] se estiver demorando muito).
+====
+
+* um para link:https://lists.freebsd.org/subscription/freebsd-hackers[freebsd-hackers@FreeBSD.org], que também inclua link:https://lists.freebsd.org/subscription/freebsd-current[freebsd-current@FreeBSD.org] e link:https://lists.freebsd.org/subscription/freebsd-stable[freebsd-stable@FreeBSD.org] em cópia (CC), e o `developers@FreeBSD.org` em cópia oculta (BCC).
diff --git a/documentation/content/pt-br/articles/freebsd-status-report-process/_index.po b/documentation/content/pt-br/articles/freebsd-status-report-process/_index.po
new file mode 100644
index 0000000000..7ab6a03eac
--- /dev/null
+++ b/documentation/content/pt-br/articles/freebsd-status-report-process/_index.po
@@ -0,0 +1,1065 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2023.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-04-20 21:10-0300\n"
+"PO-Revision-Date: 2023-04-22 09:09+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesfreebsd-status-report-process_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:1
+#, no-wrap
+msgid "Instructions for both writers and editors of status reports"
+msgstr "Instruções para escritores e editores dos relatórios de status"
+
+#. type: Title =
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:1
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:10
+#, no-wrap
+msgid "FreeBSD Status Report Process"
+msgstr "Processo de Relatório de Status do FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:21
+msgid "'''"
+msgstr "'''"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:26
+msgid ""
+"FreeBSD status reports are published quarterly and provide the general "
+"public with a view of what is going on in the Project, and they are often "
+"augmented by special reports from Developer Summits. As they are one of our "
+"most visible forms of communication, they are very important."
+msgstr ""
+"Os relatórios de status do FreeBSD são publicados trimestralmente e fornecem "
+"ao público em geral uma visão do que está acontecendo no projeto, muitas "
+"vezes complementados por relatórios especiais de reuniões de "
+"desenvolvedores. Como eles são uma das nossas formas mais visíveis de "
+"comunicação, são muito importantes."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:28
+msgid ""
+"Throughout this document and in other places related to FreeBSD status "
+"reports as well, the expression _status report_ is used both to indicate the "
+"document published on a quarterly basis and the single entries that are in "
+"it."
+msgstr ""
+"Em todo este documento e em outros lugares relacionados aos relatórios de "
+"status do FreeBSD, a expressão \"relatório de status\" é usada tanto para "
+"indicar o documento publicado trimestralmente quanto as entradas individuais "
+"que estão nele."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:29
+#, no-wrap
+msgid "Instructions for writers"
+msgstr "Instruções para escritores"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:33
+msgid ""
+"This section provides some advice on writing status report entries from "
+"mailto:theraven@FreeBSD.org[David Chisnall], experienced in technical "
+"writing. Instructions on how to submit your entries are also given."
+msgstr ""
+"Esta seção fornece alguns conselhos sobre como escrever entradas para os "
+"relatórios de status do FreeBSD, do mailto:theraven@FreeBSD.org[David "
+"Chisnall], experiente em redação técnica. Instruções sobre como enviar suas "
+"entradas também são fornecidas."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:36
+msgid ""
+"_Do not worry if you are not a native English speaker. The "
+"mailto:status@FreeBSD.org[status team] will check your entries for spelling "
+"and grammar, and fix it for you._"
+msgstr ""
+"_Não se preocupe se você não é um falante nativo de inglês. A equipe de "
+"status (mailto:status@FreeBSD.org) verificará suas entradas quanto à "
+"ortografia e gramática e as corrigirá para você._"
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:37
+#, no-wrap
+msgid "Introduce Your Work"
+msgstr "Introduza o seu trabalho"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:40
+msgid "_Do not assume that the person reading the report knows about your project._"
+msgstr "_Não assuma que a pessoa que lerá o relatório conhece o seu projeto._"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:44
+msgid ""
+"The status reports have a wide distribution. They are often one of the top "
+"news items on the FreeBSD web site and are one of the first things that "
+"people will read if they want to know a bit about what FreeBSD is. Consider "
+"this example:"
+msgstr ""
+"Os relatórios de status possuem uma ampla distribuição. Eles são "
+"frequentemente um dos principais itens de notícias no site do FreeBSD e são "
+"uma das primeiras coisas que as pessoas vão ler se quiserem saber um pouco "
+"sobre o que é o FreeBSD. Considere este exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:47
+#, no-wrap
+msgid "abc(4) support was added, including frobnicator compatibility.\n"
+msgstr ""
+"O suporte ao abc(4) foi adicionado, incluindo a compatibilidade com o "
+"frobnicator.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:53
+msgid ""
+"Someone reading this, if they are familiar with UNIX man pages, will know "
+"that `abc(4)` is some kind of device. But why should the reader care? What "
+"kind of device is it? Compare with this version:"
+msgstr ""
+"Alguém que esteja lendo isso, se estiver familiarizado com as páginas do "
+"manual UNIX, saberá que `abc(4)` é algum tipo de dispositivo. Mas por que o "
+"leitor deveria se importar? Que tipo de dispositivo é esse? Compare com esta "
+"versão:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:57
+#, no-wrap
+msgid ""
+"A new driver, abc(4), was added to the tree, bringing support for\n"
+"Yoyodyne's range of Frobnicator network interfaces.\n"
+msgstr ""
+"Foi adicionado um novo driver, abc(4), na árvore, oferecendo suporte às "
+"interfaces de rede Frobnicator da linha Yoyodyne.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:61
+msgid ""
+"Now the reader knows that abc is a network interface driver. Even if they "
+"do not use any Yoyodyne products, you have communicated that FreeBSD's "
+"support for network devices is improving."
+msgstr ""
+"Agora o leitor sabe que abc é um driver de interface de rede. Mesmo que eles "
+"não usem nenhum produto Yoyodyne, você comunicou que o suporte do FreeBSD "
+"para dispositivos de rede está melhorando."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:62
+#, no-wrap
+msgid "Show the Importance of Your Work"
+msgstr "Mostre a importância do seu trabalho"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:65
+msgid ""
+"_Status reports are not just about telling everyone that things were done, "
+"they also need to explain why they were done._"
+msgstr ""
+"_Os relatórios de status não são apenas para informar a todos que coisas "
+"foram feitas, eles também precisam explicar por que elas foram feitas._"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:73
+msgid ""
+"Carry on with the previous example. Why is it interesting that we now "
+"support Yoyodyne Frobnicator cards? Are they widespread? Are they used in a "
+"specific popular device? Are they used in a particular niche where FreeBSD "
+"has (or would like to have) a presence? Are they the fastest network cards "
+"on the planet? Status reports often say things like this:"
+msgstr ""
+"Continuando com o exemplo anterior. Por que é interessante que agora "
+"suportemos os cartões Yoyodyne Frobnicator? Eles são amplamente utilizados? "
+"São usados em um dispositivo popular específico? Eles são usados em uma área "
+"específica em que o FreeBSD tem (ou gostaria de ter) presença? Eles são os "
+"cartões de rede mais rápidos do planeta? Os relatórios de status "
+"frequentemente dizem coisas como essas:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:76
+#, no-wrap
+msgid "We imported Cyberdyne Systems T800 into the tree.\n"
+msgstr "Nós importamos o Cyberdyne Systems T800 para a árvore.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:84
+msgid ""
+"And then they stop. Maybe the reader is an avid Cyberdyne fan and knows "
+"what exciting new features the T800 brings. This is unlikely. It is far "
+"more likely that they have vaguely heard of whatever you have imported "
+"(especially into the ports tree: remember that there are over 30,000 other "
+"things there too...). List some of the new features, or bug fixes. Tell "
+"them why it is a good thing that we have the new version."
+msgstr ""
+"E então eles param. Talvez o leitor seja um ávido fã da Cyberdyne e saiba "
+"quais novos recursos emocionantes o T800 traz. Isso é improvável. É muito "
+"mais provável que eles tenham ouvido vagamente sobre o que você importou ("
+"especialmente na árvore de ports: lembre-se de que existem mais de 30.000 "
+"outras coisas lá também...). Liste alguns dos novos recursos ou correções de "
+"bugs. Diga-lhes por que é uma boa coisa que tenhamos a nova versão."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:85
+#, no-wrap
+msgid "Tell Us Something New"
+msgstr "Conte-nos Algo Novo"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:88
+msgid "_Do not recycle the same status report items._"
+msgstr "_Não recicle os mesmos itens do relatório de status._"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:94
+msgid ""
+"Bear in mind that status reports are not just reports on the status of the "
+"project, they are reports on the change of status of the project. If there "
+"is an ongoing project, spend a couple of sentences introducing it, but then "
+"spend the rest of the report talking about the new work. What progress has "
+"been made since the last report? What is left to do? When is it likely to be "
+"finished (or, if \"finished\" does not really apply, when is it likely to be "
+"ready for wider use, for testing, for deployment in production, and so on)?"
+msgstr ""
+"Tenha em mente que os relatórios de status não são apenas relatórios sobre o "
+"status do projeto, são relatórios sobre a mudança de status do projeto. Se "
+"houver um projeto em andamento, gaste algumas frases apresentando-o, mas "
+"depois gaste o restante do relatório falando sobre o novo trabalho. Qual "
+"progresso foi feito desde o último relatório? O que ainda falta ser feito? "
+"Quando é provável que esteja concluído (ou, se \"concluído\" não se aplica "
+"realmente, quando é provável que esteja pronto para uso mais amplo, para "
+"testes, para implementação em produção e assim por diante)?"
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:95
+#, no-wrap
+msgid "Sponsorship"
+msgstr "Patrocínio"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:98
+msgid "_Do not forget about your sponsors._"
+msgstr "_Não se esqueça dos seus patrocinadores._"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:102
+msgid ""
+"If you or your project has received sponsorship, a scholarship from somebody "
+"or you have been already working as a contractor or an employee for a "
+"company, please include it. Sponsors always certainly appreciate if you "
+"thank them for their funding, but it is also beneficial for them to show "
+"that they are actively supporting the Project this way. Last, but not "
+"least, this helps FreeBSD to learn more about its important consumers."
+msgstr ""
+"Se você ou seu projeto receberam patrocínio ou bolsa de estudo de alguém ou "
+"você já estava trabalhando como contratado ou funcionário de uma empresa, "
+"por favor inclua essa informação. Patrocinadores sempre apreciam quando são "
+"agradecidos pelo seu financiamento, mas também é benéfico para eles "
+"mostrarem que estão apoiando ativamente o Projeto dessa maneira. Por último, "
+"mas não menos importante, isso ajuda o FreeBSD a aprender mais sobre seus "
+"importantes consumidores."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:103
+#, no-wrap
+msgid "Open Items"
+msgstr "Tarefas Pendentes"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:106
+msgid "_If help is needed, make this explicit!_"
+msgstr "_Se você precisa de ajuda, deixe isso explícito!_"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:112
+msgid ""
+"Is there any help needed with something? Are there tasks other people can "
+"do? There are two ways in which you can use the open items part of the "
+"status report: to solicit help, or to give a quick overview of the amount of "
+"work left. If there are already enough people working on the project, or it "
+"is in a state where adding more people would not speed it up, then the "
+"latter is better. Give some big work items that are in progress, and maybe "
+"indicate who is focussing on each one."
+msgstr ""
+"Precisa de ajuda com algo? Existem tarefas que outras pessoas podem fazer? "
+"Existem duas maneiras de usar a parte de tarefas pendentes do relatório de "
+"status: para solicitar ajuda ou para dar uma visão geral rápida da "
+"quantidade de trabalho restante. Se já houver pessoas suficientes "
+"trabalhando no projeto, ou se ele estiver em um estado em que adicionar mais "
+"pessoas não aceleraria o processo, então é melhor usar a segunda opção. Fale "
+"sobre algumas das grandes tarefas em andamento e talvez indique quem está "
+"focado em cada uma delas."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:114
+msgid ""
+"List tasks, with enough detail that people know if they are likely to be "
+"able to do them, and invite people to get in contact."
+msgstr ""
+"Enumere as tarefas, com detalhes suficientes para que as pessoas saibam se "
+"são capazes de realizá-las, e convide-as a entrar em contato."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:115
+#, no-wrap
+msgid "Submit your report"
+msgstr "Envie seu relatório"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:118
+msgid "The following methods are available to submit your reports:"
+msgstr ""
+"Os seguintes métodos estão disponíveis para você enviar os seus relatórios:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:121
+msgid ""
+"submit a link:https://reviews.freebsd.org/[Phabricator review] and add the "
+"group _status_ to the reviewers list. You should put your reports in the "
+"appropriate subdirectory of `doc/website/content/en/status/` (create it if "
+"it is missing);"
+msgstr ""
+"enviar um link:https://reviews.freebsd.org/[review no Phabricator] e "
+"adicionar o grupo _status_ à lista de revisores. Você deve colocar seus "
+"relatórios no subdiretório apropriado do `doc/website/content/en/status/` "
+"(crie-o se ele não existir);"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:124
+msgid ""
+"submit a pull request to the doc repository through "
+"link:https://github.com/freebsd/freebsd-doc[its GitHub mirror] . You should "
+"put your reports in the appropriate subdirectory of "
+"`doc/website/content/en/status` (create it if it is missing);"
+msgstr ""
+"enviar uma solicitação de pull request para o repositório doc através do "
+"link:https://github.com/freebsd/freebsd-doc [seu espelho GitHub]. Você deve "
+"colocar seus relatórios no subdiretório apropriado de `doc/website/content/"
+"en/status` (crie-o se ele não existir);"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:126
+msgid "send an email to status-submissions@FreeBSD.org including your report."
+msgstr ""
+"enviar um e-mail para status-submissions@FreeBSD.org incluindo o seu "
+"relatório."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:128
+msgid ""
+"An link:https://www.FreeBSD.org/status/report-sample.adoc[AsciiDoc sample "
+"report template] is available."
+msgstr ""
+"Um modelo de relatório em AsciiDoc link:https://www.FreeBSD.org/status/"
+"report-sample.adoc[está disponível aqui]."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:129
+#, no-wrap
+msgid "Instructions for editors"
+msgstr "Instruções para editores"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:132
+msgid "This section describes how the reviewing and publication process works."
+msgstr "Esta seção descreve como funciona o processo de revisão e publicação."
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:138
+#, no-wrap
+msgid "Status reports main webpage"
+msgstr "Página principal dos relatórios de status"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:140
+#, no-wrap
+msgid "link:https://www.FreeBSD.org/status/[https://www.FreeBSD.org/status/]"
+msgstr "link:https://www.FreeBSD.org/status/[https://www.FreeBSD.org/status/]"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:141
+#, no-wrap
+msgid ""
+"Status reports archived GitHub repository (was used for reports from 2017Q4 "
+"to 2022Q4):"
+msgstr ""
+"Repositório arquivado do GitHub de relatórios de status (foi usado para os "
+"relatórios do 4º trimestre de 2017 até o 4º trimestre de 2022):"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:143
+#, no-wrap
+msgid "link:https://www.github.com/freebsd/freebsd-quarterly[https://github.com/freebsd/freebsd-quarterly]"
+msgstr ""
+"link:https://www.github.com/freebsd/freebsd-quarterly[https://github.com/"
+"freebsd/freebsd-quarterly]"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:144
+#, no-wrap
+msgid "Main status team email address"
+msgstr "Endereço de email principal da equipe de status"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:146
+#, no-wrap
+msgid "link:mailto:status@FreeBSD.org[status@FreeBSD.org]"
+msgstr "link:mailto:status@FreeBSD.org[status@FreeBSD.org]"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:147
+#, no-wrap
+msgid "Email address for reports submission"
+msgstr "Endereço de e-mail para envio de relatórios"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:149
+#, no-wrap
+msgid "link:mailto:status-submissions@FreeBSD.org[status-submissions@FreeBSD.org]"
+msgstr ""
+"link:mailto:status-submissions@FreeBSD.org[status-submissions@FreeBSD.org]"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:150
+#, no-wrap
+msgid "Mailing list for receiving calls for status reports"
+msgstr "Lista de discussão para receber chamados para os relatórios de status"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:152
+#, no-wrap
+msgid "link:https://lists.freebsd.org/subscription/freebsd-status-calls[freebsd-status-calls@FreeBSD.org]"
+msgstr ""
+"link:https://lists.freebsd.org/subscription/freebsd-status-calls[freebsd-"
+"status-calls@FreeBSD.org]"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:153
+#, no-wrap
+msgid "Phabricator status team main page"
+msgstr "Página principal da equipe de status no Phabricator"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:154
+#, no-wrap
+msgid "link:https://reviews.freebsd.org/project/profile/88/[https://reviews.freebsd.org/project/88/]"
+msgstr ""
+"link:https://reviews.freebsd.org/project/profile/88/[https://reviews.freebsd."
+"org/project/88/]"
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:156
+#, no-wrap
+msgid "Timeline"
+msgstr "Linha do tempo"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:162
+msgid ""
+"Reports are always accepted by the status team, but the main collection "
+"process happens the last month of each quarter, hence in March, June, "
+"September and December. Explicit calls for status reports will be sent in "
+"those months. The months of January, April, July and October are dedicated "
+"to putting together the reports submitted during the precedent quarter; this "
+"can include waiting for late submissions. Status reports publication is "
+"done during the same months as soon as the report are ready."
+msgstr ""
+"Os relatórios são sempre aceitos pela equipe de status, mas o principal "
+"processo de coleta ocorre no último mês de cada trimestre, ou seja, em "
+"março, junho, setembro e dezembro. Chamadas explícitas para relatórios de "
+"status serão enviadas nesses meses. Os meses de janeiro, abril, julho e "
+"outubro são dedicados a reunir os relatórios enviados durante o trimestre "
+"anterior; isso pode incluir aguardar por envios tardios. A publicação dos "
+"relatórios de status é feita durante os mesmos meses assim que os relatórios "
+"estiverem prontos."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:165
+msgid ""
+"All report submissions can have the deadline extended by "
+"link:mailto:status-submissions@FreeBSD.org[emailing the status team] up "
+"until the extended deadline, which is 8 days after the end of the quarter. "
+"Entries from the "
+"link:https://www.freebsd.org/administration/#t-portmgr[ports management "
+"team] default to the extended headline, because of the overlap between "
+"status reports and quarterly ports branches."
+msgstr ""
+"Todas as submissões de relatórios podem ter o prazo estendido link:mailto"
+":status-submissions@FreeBSD.org[enviando um email para a equipe de status] "
+"até o prazo estendido, que é de 8 dias após o final do trimestre. As "
+"entradas da link:https://www.freebsd.org/administration/#t-portmgr[equipe de "
+"gerenciamento do ports] por padrão utilizam o prazo estendido, devido à "
+"sobreposição entre os relatórios de status e os branchs trimestrais do ports."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:169
+msgid ""
+"Reviewing of submitted reports by people not part of the status team should "
+"be essentially complete by mid-January/April/July/October (third-party "
+"review slush). That is, barring typos or other light copyediting, the "
+"status team should be able to start assembling the submissions soon after "
+"the 15th. Note that this is not a complete freeze, and the status team may "
+"still be able to accept reviews then."
+msgstr ""
+"A revisão dos relatórios enviados por pessoas que não fazem parte da equipe "
+"de status deve estar essencialmente concluída até meados de janeiro/abril/"
+"julho/outubro (deadline para a revisão de terceiros). Ou seja, exceto por "
+"erros de digitação ou outra revisão leve, a equipe de status deve ser capaz "
+"de começar a montar os envios logo após o dia 15. Observe que isso não é uma "
+"restrição completa e a equipe de status ainda pode aceitar revisões após "
+"essa data."
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:172
+#, no-wrap
+msgid "First quarter"
+msgstr "Primeiro trimestre"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:172
+#, no-wrap
+msgid "Second quarter"
+msgstr "Segundo trimestre"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:172
+#, no-wrap
+msgid "Third quarter"
+msgstr "Terceiro trimestre"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:174
+#, no-wrap
+msgid "Fourth quarter"
+msgstr "Quarto trimestre"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:175
+#, no-wrap
+msgid "First call for reports"
+msgstr "Primeira chamada para relatórios"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:176
+#, no-wrap
+msgid "March 1st"
+msgstr "1º de março"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:177
+#, no-wrap
+msgid "June 1st"
+msgstr "1º de junho"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:178
+#, no-wrap
+msgid "September 1st"
+msgstr "1º de setembro"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:180
+#, no-wrap
+msgid "December 1st"
+msgstr "1º de dezembro"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:181
+#, no-wrap
+msgid "2 weeks left reminder"
+msgstr "Lembrete de 2 semanas restantes"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:182
+#, no-wrap
+msgid "March 15th"
+msgstr "15 de março"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:183
+#, no-wrap
+msgid "June 15th"
+msgstr "15 de junho"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:184
+#, no-wrap
+msgid "September 15th"
+msgstr "15 de setembro"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:186
+#, no-wrap
+msgid "December 15th"
+msgstr "15 de dezembro"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:187
+#, no-wrap
+msgid "Last reminder"
+msgstr "Último lembrete"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:188
+#, no-wrap
+msgid "March 24th"
+msgstr "24 de março"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:189
+#, no-wrap
+msgid "June 24th"
+msgstr "24 de junho"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:190
+#, no-wrap
+msgid "September 24th"
+msgstr "24 de setembro"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:192
+#, no-wrap
+msgid "December 24th"
+msgstr "24 de dezembro"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:193
+#, no-wrap
+msgid "Standard deadline"
+msgstr "Prazo padrão"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:194
+#, no-wrap
+msgid "March 31st"
+msgstr "31 de março"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:195
+#, no-wrap
+msgid "June 30th"
+msgstr "30 de junho"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:196
+#, no-wrap
+msgid "September 30th"
+msgstr "30 de setembro"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:198
+#, no-wrap
+msgid "December 31st"
+msgstr "31 de dezembro"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:199
+#, no-wrap
+msgid "Extended deadline"
+msgstr "Prazo estendido"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:200
+#, no-wrap
+msgid "April 8th"
+msgstr "8 de abril"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:201
+#, no-wrap
+msgid "July 8th"
+msgstr "8 de julho"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:202
+#, no-wrap
+msgid "October 8th"
+msgstr "8 de outubro"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:204
+#, no-wrap
+msgid "January 8th"
+msgstr "8 de janeiro"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:205
+#, no-wrap
+msgid "Third-party review slush"
+msgstr "Revisão por terceiros"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:206
+#, no-wrap
+msgid "April 15th"
+msgstr "15 de abril"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:207
+#, no-wrap
+msgid "July 15th"
+msgstr "15 de julho"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:208
+#, no-wrap
+msgid "October 15th"
+msgstr "15 de outubro"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:209
+#, no-wrap
+msgid "January 15th"
+msgstr "15 de janeiro"
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:211
+#, no-wrap
+msgid "Call for reports"
+msgstr "Chamada para relatórios"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:214
+msgid "Calls for status reports are sent to the following recipients:"
+msgstr ""
+"As chamadas para relatórios de status são enviadas para os seguintes "
+"destinatários:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:216
+msgid ""
+"the "
+"link:https://lists.freebsd.org/subscription/freebsd-status-calls[freebsd-status-calls@FreeBSD.org "
+"mailing list];"
+msgstr ""
+"a lista de discussão link:https://lists.freebsd.org/subscription/freebsd-"
+"status-calls[freebsd-status-calls@FreeBSD.org];"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:217
+msgid ""
+"to all submitters of last status reports (they may have updates or further "
+"improvements);"
+msgstr ""
+"a todos os remetentes dos últimos relatórios de status (eles podem ter "
+"atualizações ou melhorias adicionais);"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:218
+msgid "and, depending on the season:"
+msgstr "e, dependendo da época do ano:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:219
+msgid "Various conference organizers:"
+msgstr "Diversos organizadores de conferências:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:220
+msgid "link:mailto:secretary@asiabsdcon.org[AsiaBSDCon] in March (First Quarter);"
+msgstr ""
+"link:mailto:secretary@asiabsdcon.org[AsiaBSDCon] em março (primeiro "
+"trimestre);"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:221
+msgid "link:mailto:info@bsdcan.org[BSDCan] in May (Second Quarter);"
+msgstr "link:mailto:info@bsdcan.org[BSDCan] em maio (Segundo Trimestre);"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:222
+msgid "EuroBSDcon September - October (Third-Fourth Quarter)."
+msgstr "EuroBSDcon entre setembro e outubro (Terceiro-Quarto Trimestre)."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:223
+msgid ""
+"EuroBSDcon as an organization is not interested in writing reports for "
+"FreeBSD (at least it was not in October 2019: its reason is that the "
+"conference is not FreeBSD specific), so reports about this event should be "
+"asked of members of the FreeBSD community that attended it;"
+msgstr ""
+"A EuroBSDcon como organização não está interessada em escrever relatórios "
+"para o FreeBSD (pelo menos não estava em outubro de 2019: sua razão é que a "
+"conferência não é específica do FreeBSD), portanto, relatórios sobre este "
+"evento devem ser solicitados aos membros da comunidade FreeBSD que "
+"participaram dele;"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:224
+msgid ""
+"Google Summer of Code link:mailto:soc-students@FreeBSD.org[students] and "
+"their link:mailto:soc-mentors@FreeBSD.org[mentors]."
+msgstr ""
+"Para os link:mailto:soc-students@FreeBSD.org[estudantes] do programa Google "
+"Summer of Code e seus link:mailto:soc-mentors@FreeBSD.org[mentores]."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:228
+msgid ""
+"The easiest way to send calls for status reports is to use the "
+"link:https://cgit.freebsd.org/doc/tree/tools/sendcalls/sendcalls[[.filename]#sendcalls# "
+"perl script] in the [.filename]#tools/sendcalls# directory of the doc git "
+"repository. The script automatically sends calls to all intended "
+"recipients. It can also be used through a cron job, for example:"
+msgstr ""
+"A maneira mais fácil de enviar chamadas para relatórios de status é usar o "
+"script Perl link:https://cgit.freebsd.org/doc/tree/tools/sendcalls/"
+"sendcalls[[.filename]#sendcalls#] existente no diretório [.filename]#tools/"
+"sendcalls# do repositório doc no git. O script envia automaticamente "
+"chamadas para todos os destinatários pretendidos. Ele também pode ser usado "
+"por meio de uma tarefa agendada no cron, por exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:231
+#, no-wrap
+msgid ""
+"0 0 1,15,24 3,6,9,12 * cd ~/doc/tools/sendcalls && "
+"git pull && ./sendcalls -s 'Lorenzo Salvadore'\n"
+msgstr ""
+"0 0 1,15,24 3,6,9,12 * cd ~/doc/tools/sendcalls && "
+"git pull && ./sendcalls -s 'Lorenzo Salvadore'\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:237
+msgid ""
+"If you are in charge of sending calls for status reports and you are indeed "
+"using a cron job, please run it on freefall and sign it with your name so "
+"that it is possible to infer who has configured the cronjob, in case "
+"something goes wrong. Also please update the example above with your name, "
+"as an additional safety measure."
+msgstr ""
+"Se você está encarregado de enviar chamadas para relatórios de status e está "
+"usando um cronjob, execute-o na freefall e assine-o com seu nome para que "
+"seja possível inferir quem configurou a tarefa, caso algo dê errado. Além "
+"disso, atualize o exemplo acima com seu nome, como uma medida de segurança "
+"adicional."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:240
+msgid ""
+"It may also be worth making a call for reports on the forums as "
+"link:https://forums.freebsd.org/threads/call-for-freebsd-2014q4-october-december-status-reports.49812/[was "
+"done in the past]."
+msgstr ""
+"Pode ser que valha a pena fazer uma chamada para relatórios nos fóruns, "
+"link:https://forums.freebsd.org/threads/call-for-freebsd-2014q4-october-"
+"december-status-reports.49812/[como foi feito no passado]."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:241
+#, no-wrap
+msgid "Building the report"
+msgstr "Construindo o relatório"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:245
+msgid ""
+"Submitted reports are reviewed and merged in the proper subdirectory of "
+"[.filename]#doc/website/content/en/status/# as they come in. While the "
+"reports are being updated, people outside the status team may also review "
+"the individual entries and propose fixes."
+msgstr ""
+"Os relatórios enviados são revisados e mesclados na subpasta apropriada de [."
+"filename]#doc/website/content/en/status/# assim que são recebidos. Enquanto "
+"os relatórios estão sendo atualizados, pessoas fora da equipe de status "
+"também podem revisar as entradas individuais e propor correções."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:248
+msgid ""
+"Usually the last step in the content review process is writing the "
+"introduction in a file named [.filename]#intro.adoc#: a good introduction "
+"can only be written once all the reports have been collected. If possible, "
+"it is a good idea to ask different people to write the introduction to add "
+"variety: different people will bring different viewpoints and help keep it "
+"fresh."
+msgstr ""
+"Geralmente, o último passo no processo de revisão de conteúdo é escrever a "
+"introdução em um arquivo chamado [.filename]#intro.adoc#: uma boa introdução "
+"só pode ser escrita depois que todos os relatórios foram coletados. Se "
+"possível, é uma boa ideia pedir a diferentes pessoas para escrever a "
+"introdução para adicionar variedade: pessoas diferentes trarão diferentes "
+"pontos de vista e ajudarão a manter o texto interessante."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:250
+msgid ""
+"Once all the reports and the introduction are ready, the "
+"[.filename]#_index.adoc# file needs to be created: this is the file in which "
+"the reports are distributed into the various categories and sorted."
+msgstr ""
+"Assim que todos os relatórios e a introdução estiverem prontos, o arquivo [."
+"filename]#_index.adoc# precisa ser criado: este é o arquivo no qual os "
+"relatórios são distribuídos nas várias categorias e classificados."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:251
+#, no-wrap
+msgid "Publishing the report"
+msgstr "Publicação do relatório"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:254
+msgid "When all the files of the status report are ready, it is time to publish it."
+msgstr ""
+"Quando todos os arquivos do relatório de status estiverem prontos, é hora de "
+"publicá-lo."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:257
+msgid ""
+"First [.filename]#doc/website/content/en/status/_index.adoc# is edited: the "
+"next due date is updated and a link to the new report is added. The change "
+"is then pushed on the repository and the status team checks that everythings "
+"works as expected."
+msgstr ""
+"Primeiramente, o arquivo [.filename]#doc/website/content/en/status/_index."
+"adoc# é editado: a próxima data de entrega é atualizada e um link para o "
+"novo relatório é adicionado. A alteração é, então, enviada para o "
+"repositório e a equipe de status verifica se tudo está funcionando conforme "
+"o esperado."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:259
+msgid ""
+"Then the news entry for the main website page is added to "
+"[.filename]#doc/website/data/en/news/news.toml#."
+msgstr ""
+"Em seguida, é adicionada uma entrada de notícias na página principal do site "
+"em [.filename]#doc/website/data/en/news/news.toml#."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:261
+msgid "Here is a sample for the news entry:"
+msgstr "Aqui está um exemplo para uma entrada de notícias:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:266
+#, no-wrap
+msgid ""
+"[[news]]\n"
+"date = \"2021-01-16\"\n"
+"title = \"October-December 2020 Status Report\"\n"
+"description = \"The <a "
+"href=\\\"https://www.FreeBSD.org/status/report-2020-10-2020-12.html\\\">October "
+"to December 2020 Status Report</a> is now available with 42 entries.\"\n"
+msgstr ""
+"[[news]]\n"
+"date = \"2021-01-16\"\n"
+"title = \"Relatório de Status de Outubro a Dezembro de 2020\"\n"
+"description = \"O <a href=\\\"https://www.FreeBSD.org/status/"
+"report-2020-10-2020-12.html\\\">Relatório de Status de Outubro a Dezembro de "
+"2020</a> está agora disponível com 42 entradas.\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:269
+msgid ""
+"Once the HTML version of the report has been built and is online, man:w3m[1] "
+"is used to dump the website as plain-text, e.g:"
+msgstr ""
+"Assim que a versão HTML do relatório estiver compilada e online, o man:w3m[1]"
+" é usado fazer o dump do website em formato de texto simples, por exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:271
+#, no-wrap
+msgid ""
+"% w3m -cols 80 -dump https://www.FreeBSD.org/status/report-2021-01-2021-03/ "
+"> /tmp/report-2021-01-2021-03.txt\n"
+msgstr ""
+"% w3m -cols 80 -dump https://www.FreeBSD.org/status/report-2021-01-2021-03/ "
+"> /tmp/report-2021-01-2021-03.txt\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:274
+msgid ""
+"man:w3m[1] has full proper unicode support. `-dump` simply outputs text "
+"rendering of the HTML code that can then have a few elements snipped, while "
+"`-cols` ensures that everything is wrapped to 80 columns."
+msgstr ""
+"O `man:w3m[1]` possui suporte completo para unicode. O `-dump` simplesmente "
+"produz uma saída de texto da renderização do código HTML, que pode então ter "
+"alguns elementos recortados, enquanto o `-cols` garante que tudo seja "
+"enquadrado em 80 colunas."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:276
+msgid ""
+"A link to the rendered report is added between the introduction and the "
+"first entry."
+msgstr ""
+"Um link para o relatório gerado é adicionado entre a introdução e a primeira "
+"entrada."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:278
+msgid ""
+"The report is finally ready to be sent, toggling disposition (the report "
+"should be inlined), and ensuring it is encoded as UTF-8."
+msgstr ""
+"O relatório está finalmente pronto para ser enviado, alterando o "
+"posicionamento (o relatório deve ser inserido) e garantindo que ele esteja "
+"codificado em UTF-8."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:280
+msgid ""
+"Two emails are sent, both with subject in the format `FreeBSD Status Report "
+"- <First/Second/Third/Fourth> Quarter <year>`:"
+msgstr ""
+"Duas mensagens de e-mail são enviadas, ambas com o assunto no formato \n"
+"`Relatório de Status do FreeBSD - <Primeiro/Segundo/Terceiro/Quarto> "
+"Trimestre de <ano>`:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:282
+msgid ""
+"one to "
+"link:https://lists.freebsd.org/subscription/freebsd-announce[freebsd-announce@FreeBSD.org];"
+msgstr ""
+"um para o link:https://lists.freebsd.org/subscription/freebsd-announce"
+"[freebsd-announce@FreeBSD.org];"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:286
+msgid ""
+"This one must be approved, so if you are in charge of sending this email, "
+"ensure that someone does it (mail "
+"link:mailto:postmaster@FreeBSD.org[postmaster] if it is taking long)."
+msgstr ""
+"Este deverá ser aprovado, portanto, se você for responsável por enviar este "
+"e-mail, certifique-se de que alguém o faça (envie um e-mail para o "
+"link:mailto:postmaster@FreeBSD.org[postmaster] se estiver demorando muito)."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:288
+msgid ""
+"one to "
+"link:https://lists.freebsd.org/subscription/freebsd-hackers[freebsd-hackers@FreeBSD.org], "
+"which also has "
+"link:https://lists.freebsd.org/subscription/freebsd-current[freebsd-current@FreeBSD.org] "
+"and "
+"link:https://lists.freebsd.org/subscription/freebsd-stable[freebsd-stable@FreeBSD.org] "
+"in CC and `developers@FreeBSD.org` in BCC."
+msgstr ""
+"um para link:https://lists.freebsd.org/subscription/freebsd-hackers[freebsd-"
+"hackers@FreeBSD.org], que também inclua link:https://lists.freebsd.org/"
+"subscription/freebsd-current[freebsd-current@FreeBSD.org] e "
+"link:https://lists.freebsd.org/subscription/freebsd-stable[freebsd-"
+"stable@FreeBSD.org] em cópia (CC), e o `developers@FreeBSD.org` em cópia "
+"oculta (BCC)."
diff --git a/documentation/content/pt-br/articles/freebsd-update-server/_index.adoc b/documentation/content/pt-br/articles/freebsd-update-server/_index.adoc
index 026c8eb734..b6e8a19bd1 100644
--- a/documentation/content/pt-br/articles/freebsd-update-server/_index.adoc
+++ b/documentation/content/pt-br/articles/freebsd-update-server/_index.adoc
@@ -1,9 +1,12 @@
---
-title: Construa seu próprio servidor de atualização do FreeBSD
authors:
- - author: Jason Helfman
+ -
+ author: 'Jason Helfman'
email: jgh@FreeBSD.org
-copyright: 2009-2011, 2013 Jason Helfman
+copyright: '2009-2011, 2013 Jason Helfman'
+description: 'Construir seu próprio servidor freebsd-update permite que um administrador de sistema realize atualizações rápidas para vários computadores a partir de um espelho local'
+tags: ["FreeBSD", "Update", "Server", "internal"]
+title: 'Construa seu próprio servidor de atualização do FreeBSD'
trademarks: ["freebsd", "amd", "intel", "general"]
---
@@ -41,7 +44,7 @@ endif::[]
[.abstract-title]
Resumo
-Este artigo descreve a construção de um servidor de atualizações do FreeBSD interno. O https://svnweb.freebsd.org/base/user/cperciva/freebsd-update-build/[freebsd-update-server] foi escrito por Colin Percival mailto:cperciva@FreeBSD.org[cperciva@FreeBSD.org], Oficial de Segurança Emérito do FreeBSD. Para usuários que acham conveniente atualizar seus sistemas em um servidor de atualização oficial, construir seu próprio FreeBSD Update Server pode ajudar a estender sua funcionalidade suportando versões do FreeBSD ajustadas manualmente ou fornecendo um espelho local que permitirá atualizações mais rápidas para várias máquinas.
+Este artigo descreve a construção de um Servidor Interno de Atualização do FreeBSD. O https://github.com/freebsd/freebsd-update-build/[freebsd-update-server] é escrito por `{cperciva}`, Oficial de Segurança Emérito do FreeBSD. Para usuários que acham conveniente atualizar seus sistemas em relação a um servidor de atualização oficial, a construção de seu próprio Servidor de Atualização do FreeBSD pode ajudar a estender sua funcionalidade ao suportar versões do FreeBSD ajustadas manualmente ou fornecer um espelho local que permitirá atualizações mais rápidas para vários computadores.
'''
@@ -50,17 +53,17 @@ toc::[]
[[acknowledgments]]
== Agradecimentos
-Este artigo foi publicado posteriormente no http://bsdmag.org/magazine/1021-bsd-as-a-desktop[BSD Magazine].
+Este artigo foi posteriormente impresso na revista https://people.freebsd.org/~jgh/files/fus/BSD_03_2010_EN.pdf[BSD Magazine].
[[introduction]]
== Introdução
-Usuários experientes ou administradores são muitas vezes responsáveis por várias máquinas ou ambientes. Eles entendem as difíceis demandas e desafios da manutenção de tal infraestrutura. A execução de um Servidor de Atualização do FreeBSD facilita a implantação de patches de segurança e software em máquinas de teste selecionadas antes de implementá-las nas maquinas em produção. Isso também significa que vários sistemas podem ser atualizados a partir da rede local, em vez de uma conexão de Internet potencialmente mais lenta. Este artigo descreve os passos envolvidos na criação de um Servidor de Atualização do FreeBSD interno.
+Usuários ou administradores experientes frequentemente são responsáveis por várias máquinas ou ambientes. Eles entendem as exigências e desafios difíceis de manter essa infraestrutura. Executar um Servidor de Atualização do FreeBSD torna mais fácil implantar patches de segurança e atualizações de software para máquinas de teste selecionadas antes de implementá-los nos servidores de produção. Também significa que vários sistemas podem ser atualizados a partir da rede local em vez de uma conexão com a Internet potencialmente mais lenta. Este artigo descreve os passos envolvidos na criação de um Servidor Interno de Atualização do FreeBSD.
[[prerequisites]]
== Pré-requisitos
-Para construir um Servidor de Atualização do FreeBSD interno, alguns requisitos devem ser atendidos.
+Para construir um Servidor Interno de Atualização do FreeBSD, alguns requisitos devem ser atendidos.
* Um sistema FreeBSD em execução.
+
@@ -69,79 +72,78 @@ Para construir um Servidor de Atualização do FreeBSD interno, alguns requisito
No mínimo, as atualizações requerem a criação de uma versão do FreeBSD maior ou igual a versão do release alvo para a distribuição.
====
* Uma conta de usuário com pelo menos 4 GB de espaço disponível. Isso permitirá a criação de atualizações para 7.1 e 7.2, mas os requisitos de espaço exatos podem mudar de versão para versão.
-* Uma conta com acesso ao man:ssh[1] em uma máquina remota para carregar atualizações distribuídas.
-* Um servidor web, como o extref:{handbook}network-servers[Apache, network-apache], com mais da metade do espaço necessário para a construção. Por exemplo, as compilações de teste para 7.1 e 7.2 consomem uma quantidade total de 4 GB e o espaço do servidor da web necessário para distribuir essas atualizações é de 2.6 GB.
-* Conhecimento básico de shell script com o Bourne shell, man:sh[1].
+* Uma conta man:ssh[1] em uma máquina remota para fazer o upload das atualizações que serão distribuídas.
+* Um servidor web, como o extref:{handbook}[Apache, network-apache], com mais da metade do espaço necessário para a compilação. Por exemplo, as compilações de teste para 7.1 e 7.2 consomem uma quantidade total de 4 GB, e o espaço necessário no servidor web para distribuir essas atualizações é de 2,6 GB.
+* Conhecimento básico de script shell com o shell Bourne, man:sh[1].
[[Configuration]]
-== Configuração: Instalação & Configuração
+== Configuração: Instalação e Setup
-Faça o download do software https://svnweb.freebsd.org/base/user/cperciva/freebsd-update-build/[freebsd-update-server] instalando package:devel/subversion[] e package:security/ca_root_nss[], e execute:
+Faça o download do software https://github.com/freebsd/freebsd-update-build/[freebsd-update-server] instalando os pacotes package:devel/git[] e package:security/ca_root_nss[], e execute:
-[source,shell]
+[source, shell]
....
-% svn co https://svn.freebsd.org/base/user/cperciva/freebsd-update-build freebsd-update-server
+% git clone https://github.com/freebsd/freebsd-update-build.git freebsd-update-server
....
-Atualize o [.filename]#scripts/build.conf# apropriadamente. Ele é criado durante todas as operações de construção.
+Atualize o arquivo [.filename]#scripts/build.conf# adequadamente. Ele será usado durante todas as operações de compilação.
-Aqui está o [.filename]#build.conf# padrão, que deve ser modificado para se adequar ao seu ambiente.
+Aqui está o [.filename]#build.conf# padrão, que deve ser modificado para atender ao seu ambiente.
[.programlisting]
....
-# Main configuration file for FreeBSD Update builds. The
-# release-specific configuration data is lower down in
-# the scripts tree.
+# Arquivo de configuração principal para compilações do FreeBSD Update.
+# Os dados de configuração específicos do lançamento estão mais abaixo
+# na árvore de scripts.
-# Location from which to fetch releases
+# Local de onde buscar os releases
export FTP=ftp://ftp2.freebsd.org/pub/FreeBSD/releases <.>
-# Host platform
+# Plataforma do host
export HOSTPLATFORM=`uname -m`
-# Host name to use inside jails
+# Nome do host a ser usado dentro das jails
export BUILDHOSTNAME=${HOSTPLATFORM}-builder.daemonology.net <.>
-# Location of SSH key
+# Localização da chave privada SSH
export SSHKEY=/root/.ssh/id_dsa <.>
-# SSH account into which files are uploaded
+# Conta SSH para a qual os arquivos são enviados
MASTERACCT=builder@wadham.daemonology.net <.>
-# Directory into which files are uploaded
+# Diretório para o qual os arquivos são enviados
MASTERDIR=update-master.freebsd.org <.>
....
-Parâmetros para consideração seriam:
+Os parâmetros a serem considerados seriam:
-<.> Este é o local onde as imagens ISO são baixadas (pela sub-rotina `fetchiso()` do [.filename]#scripts/build.subr#). A localização configurada não está limitada a URIs de FTP. Qualquer esquema de URI suportado pelo utilitário padrão man:fetch[] deve funcionar bem.
-Personalizações para o código de `fetchiso()` podem ser instaladas copiando o script padrão [.filename]#build.subr# para a área específica do release e da arquitetura em [.filename]#scripts/RELEASE/ARCHITECTURE/build.subr# e aplicando alterações locais.
+<.> Este é o local de onde as imagens ISO são baixadas (pela sub-rotina `fetchiso()` do arquivo [.filename]#scripts/build.subr#). A localização configurada não se limita a URIs FTP. Qualquer esquema de URI suportado pelo utilitário padrão man:fetch[1] deve funcionar bem. Personalizações para o código `fetchiso()` podem ser instaladas copiando o arquivo padrão [.filename]#build.subr# para a área específica de release e arquitetura em [.filename]#scripts/RELEASE/ARCHITECTURE/build.subr# e aplicando alterações locais.
-<.> O nome do host em construção. Esta informação será exibida em sistemas atualizados ao executar:
+<.> O nome do host de compilação. Essa informação será exibida em sistemas atualizados ao emitir o comando:
+
-[source,shell]
+[source, shell]
....
% uname -v
....
+
-<.> A chave SSH para fazer upload de arquivos para o servidor de atualizações. Um par de chaves pode ser criado digitando `ssh-keygen -t dsa`. Este parâmetro é opcional; a autenticação de senha padrão será usada como um método de autenticação secundário quando a `SSHKEY` não estiver definida.
-A página de manual do man:ssh-keygen[1] contém informações mais detalhadas sobre o SSH e as etapas apropriadas para criar e usar um.
+<.> A chave SSH para enviar arquivos para o servidor de atualização. Um par de chaves pode ser criado digitando `ssh-keygen -t dsa`. Este parâmetro é opcional; a autenticação padrão por senha será usada como método de autenticação de fallback quando o `SSHKEY` não estiver definido. A página do manual man:ssh-keygen[1] contém informações mais detalhadas sobre o SSH e os passos apropriados para criar e usar uma chave.
-<.> Conta para fazer upload de arquivos para o servidor de atualização.
+<.> Conta para enviar os arquivos para o servidor de atualização.
-<.> Diretório no servidor de atualização para o qual os arquivos são enviados.
+<.> Diretório no servidor de atualização onde os arquivos são enviados.
-O arquivo padrão [.filename]#build.conf# fornecido com o código-fonte do freebsd-update-server é adequado para a criação de versões i386 do FreeBSD. Como um exemplo de criação de um servidor de atualização para outras arquiteturas, as etapas a seguir descrevem as alterações necessárias na configuração para o amd64:
+O [.filename]#build.conf# padrão fornecido com o código fonte do freebsd-update-server é adequado para compilar releases do FreeBSD para a arquitetura i386. Como exemplo de compilação de um servidor de atualização para outras arquiteturas, os seguintes passos resumem as alterações de configuração necessárias para a arquitetura amd64:
[.procedure]
+====
. Crie um ambiente de compilação para o amd64:
+
-[source,shell]
+[source, shell]
....
% mkdir -p /usr/local/freebsd-update-server/scripts/7.2-RELEASE/amd64
....
-. Instale um [.filename]#build.conf# no diretório de criação recém-criado. As opções de configuração de compilação para o FreeBSD 7.2-RELEASE com arquitetura amd64 devem ser semelhantes a:
+. Instale um arquivo [.filename]#build.conf# no diretório de compilação recém-criado. As opções de configuração de compilação para o FreeBSD 7.2-RELEASE em amd64 devem ser semelhantes a:
+
[.programlisting]
....
@@ -158,20 +160,21 @@ export KERNELPARTS="generic"
export EOL=1275289200 <.>
....
+
-<.> A chave man:sha256[1] usada para fazer o hash para a release desejada é publicada no respectivo https://www.FreeBSD.org/releases/[anúncio de release].
-<.> Para gerar o número "End of Life" para o [.filename]#build.conf#, consulte o "EOL estimado" publicado no https://www.FreeBSD.org/security/[Site de Segurança do FreeBSD]. O valor de `EOL` pode ser derivado da data listada no site, usando o utilitário man:date[1], por exemplo:
+<.> A chave hash man:sha256[1] para o release desejado está publicada dentro do respectivo link:https://www.FreeBSD.org/releases/[anúncio de release].
+<.> Para gerar o número "End of Life" para o arquivo [.filename]#build.conf#, consulte o "Estimated EOL" publicado no link:https://www.FreeBSD.org/security/security/[Site de Segurança do FreeBSD]. O valor de `EOL` pode ser derivado da data listada no site da web, usando o utilitário man:date[1], por exemplo:
+
-[source,shell]
+[source, shell]
....
% date -j -f '%Y%m%d-%H%M%S' '20090401-000000' '+%s'
....
+====
[[build]]
== Compilando o Código de Atualização
-O primeiro passo é executar o [.filename]#scripts/make.sh#. Isso criará alguns binários, criará diretórios e irá gerar uma chave de assinatura RSA usada para aprovar as compilações. Nesta etapa, uma senha terá que ser fornecida para a criação final da chave de assinatura.
+O primeiro passo é executar o [.filename]#scripts/make.sh#. Isso irá compilar alguns binários, criar diretórios e gerar uma chave de assinatura RSA usada para aprovar as compilações. Nesta etapa, uma frase secreta terá que ser fornecida para a criação final da chave de assinatura.
-[source,shell]
+[source, shell]
....
# sh scripts/make.sh
cc -O2 -fno-strict-aliasing -pipe findstamps.c -o findstamps
@@ -196,20 +199,20 @@ Verifying - enter aes-256-cbc encryption password:
[NOTE]
====
-Mantenha um backup do fingerprint gerado. Este valor é necessário para o arquivo [.filename]#/etc/freebsd-update.conf# para as atualizações binárias.
+Anote a impressão digital da chave gerada. Este valor será necessário no [.filename]#/etc/freebsd-update.conf# para as atualizações binárias.
====
-Neste ponto, estamos prontos para montar uma construção.
+Neste ponto, estamos prontos para preparar uma compilação.
-[source,shell]
+[source, shell]
....
# cd /usr/local/freebsd-update-server
# sh scripts/init.sh amd64 7.2-RELEASE
....
-O que se segue é uma amostra de uma execução da compilação __inicial__.
+A seguir, segue um exemplo da execução de uma compilação _inicial_.
-[source,shell]
+[source, shell]
....
# sh scripts/init.sh amd64 7.2-RELEASE
Mon Aug 24 16:04:36 PDT 2009 Starting fetch for FreeBSD/amd64 7.2-RELEASE
@@ -251,14 +254,14 @@ world|base|/usr/lib/libalias_ftp.a
...
....
-Então a compilação do world é executada novamente, com patches para world. Uma explicação mais detalhada pode ser encontrada em [.filename]#scripts/build.subr#.
+Em seguida, a compilação do target "world" é realizada novamente, com patches de "world". Uma explicação mais detalhada pode ser encontrada em [.filename]#scripts/build.subr#.
[WARNING]
====
-Durante este segundo ciclo de compilação, o daemon do protocolo de tempo de rede, man:ntpd[8], é desativado. Segundo o Colin Percival mailto:cperciva@FreeBSD.org[cperciva@FreeBSD.org], Oficial de segurança emérito do FreeBSD, "a compilação do código do https://svnweb.freebsd.org/base/user/cperciva/freebsd-update-build/[freebsd-update-server] precisa identificar os timestamps que são armazenados nos arquivos para que possam ser ignorados ao comparar builds para determinar quais arquivos precisam ser atualizados. Essa busca de timestamp trabalha com duas construções com 400 dias de diferença e compara os resultados."
+Durante esse segundo ciclo de compilação, o daemon do protocolo de tempo de rede, man:ntpd[8], é desativado. Conforme o `{cperciva}`, Oficial de Segurança Emérito do FreeBSD, "o código de compilação do https://github.com/freebsd/freebsd-update-build/[freebsd-update-server] precisa identificar carimbos de data/hora que são armazenados em arquivos para que eles possam ser ignorados ao comparar compilações e determinar quais arquivos precisam ser atualizados. Esse processo de localização de carimbos de data/hora funciona fazendo duas compilações com 400 dias de intervalo e comparando os resultados."
====
-[source,shell]
+[source, shell]
....
Mon Aug 24 17:54:07 PDT 2009 Extracting world+src for FreeBSD/amd64 7.2-RELEASE
Wed Sep 29 00:54:34 UTC 2010 Building world for FreeBSD/amd64 7.2-RELEASE
@@ -295,9 +298,9 @@ world|base|/usr/lib/libalias_ftp.a
...
....
-Finalmente, a construção é concluída.
+Por fim, a compilação é concluída.
-[source,shell]
+[source, shell]
....
Values of build stamps, excluding library archive headers:
v1.2 (Aug 25 2009 00:40:36)
@@ -333,15 +336,15 @@ they look sensible, then run
to sign the release.
....
-Aprove a compilação se tudo estiver correto. Mais informações sobre como determinar isso podem ser encontradas no arquivo fonte distribuído chamado [.filename]#USAGE#. Execute [.filename]#scripts/approve.sh#, conforme indicado. Isso assinará a release e moverá os componentes para uma área de preparação adequada para o upload.
+Aprove a compilação se tudo estiver correto. Mais informações sobre como determinar isso podem ser encontradas no arquivo de origem da distribuição chamado [.filename]#USAGE#. Execute [.filename]#scripts/approve.sh#, conforme indicado. Isso irá assinar a versão e mover os componentes para uma área de preparação adequada para o upload.
-[source,shell]
+[source, shell]
....
# cd /usr/local/freebsd-update-server
# sh scripts/mountkey.sh
....
-[source,shell]
+[source, shell]
....
# sh -e scripts/approve.sh amd64 7.2-RELEASE
Wed Aug 26 12:50:06 PDT 2009 Signing build for FreeBSD/amd64 7.2-RELEASE
@@ -351,9 +354,9 @@ Wed Aug 26 12:50:07 PDT 2009 Updating databases for FreeBSD/amd64 7.2-RELEASE
Wed Aug 26 12:50:07 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.2-RELEASE
....
-Após o processo de aprovação ser concluído, o procedimento de upload pode ser iniciado.
+Após a conclusão do processo de aprovação, o procedimento de upload pode ser iniciado.
-[source,shell]
+[source, shell]
....
# cd /usr/local/freebsd-update-server
# sh scripts/upload.sh amd64 7.2-RELEASE
@@ -361,9 +364,9 @@ Após o processo de aprovação ser concluído, o procedimento de upload pode se
[NOTE]
====
-No caso de o código de atualização precisar ser reenviado, isso pode ser feito mudando para o diretório de distribuições públicas para o release alvo e atualizando os atributos do arquivo __carregado__.
+Caso o código de atualização precise ser reenviado, isso pode ser feito alterando para o diretório de distribuições públicas do release de destino e atualizando os atributos do arquivo já _enviado_.
-[source,shell]
+[source, shell]
....
# cd /usr/local/freebsd-update-server/pub/7.2-RELEASE/amd64
# touch -t 200801010101.01 uploaded
@@ -371,70 +374,70 @@ No caso de o código de atualização precisar ser reenviado, isso pode ser feit
====
-Os arquivos enviados precisarão estar no diretório de documentos raiz do servidor web para que as atualizações sejam distribuídas. A configuração exata irá variar dependendo do servidor web usado. Para o servidor web Apache, consulte a sessão extref:{handbook}network-servers[Configuração de servidores Apache, network-apache] no Handbook.
+Os arquivos enviados precisarão estar no diretório raiz de documentos do servidor web para que as atualizações possam ser distribuídas. A configuração exata variará dependendo do servidor web utilizado. Para o servidor web Apache, consulte a seção extref:{handbook}[Configuração de servidores Apache, network-apache] no Handbook.
-Atualize o `KeyPrint` e `ServerName` do cliente no arquivo [.filename]#/etc/freebsd-update.conf#, e execute as atualizações conforme instruído na extref:{handbook}updating-upgrading[Seção de Atualização do FreeBSD, updating-upgrading-freebsdupdate] no Handbook.
+Atualize o `KeyPrint` e o `ServerName` do cliente em [.filename]#/etc/freebsd-update.conf#, e execute as atualizações conforme instruído na seção extref:{handbook}[Atualização do FreeBSD, updating-upgrading-freebsdupdate] do Handbook.
[IMPORTANT]
====
-Para que o Servidor de Atualização do FreeBSD funcione corretamente, atualizações para ambas releases _atual_ e a release _que se deseja atualizar_ precisam ser compilados. Isso é necessário para determinar as diferenças de arquivos entre as releases. Por exemplo, ao atualizar um sistema FreeBSD de 7.1-RELEASE para 7.2-RELEASE, as atualizações precisarão ser construídas e carregadas em seu servidor de distribuição para ambas as versões.
+Para que o Servidor de Atualização do FreeBSD funcione corretamente, as atualizações tanto para o release _atual_ quanto para o release _para o qual se deseja atualizar_ precisam ser compiladas. Isso é necessário para determinar as diferenças nos arquivos entre os releases. Por exemplo, ao atualizar um sistema FreeBSD da versão 7.1-RELEASE para a versão 7.2-RELEASE, as atualizações precisarão ser compiladas e enviadas para o seu servidor de distribuição para ambas as versões.
====
-Para referência, toda a execução do link:../../../source/articles/freebsd-update-server/init.txt[init.sh] é anexada.
+Para referência, toda a execução do link:../../source/articles/freebsd-update-server/init.txt[init.sh] está anexada.
[[patch]]
== Compilando um Patch
-Toda vez que é anunciado um https://www.FreeBSD.org/security/advisories/[aviso de segurança] ou uma https://www.FreeBSD.org/security/notices/[notificação de segurança], um patch de atualização pode ser construído.
+Toda vez que uma link:https://www.FreeBSD.org/security/advisories/[recomendação de segurança] ou um link:https://www.FreeBSD.org/security/notices/[aviso de segurança] é anunciado, uma atualização de patch pode ser compilada.
Para este exemplo, o 7.1-RELEASE será usado.
-Algumas suposições são feitas para uma versão diferente:
+Algumas suposições são feitas para compilar uma release diferente:
* Configure a estrutura de diretórios correta para a compilação inicial.
* Execute uma compilação inicial para o 7.1-RELEASE.
-Crie o diretório de correção do respectivo release no diretório [.filename]#/usr/local/freebsd-update-server/patches/#.
+Crie o diretório de patches do respectivo release em [.filename]#/usr/local/freebsd-update-server/patches/#.
-[source,shell]
+[source, shell]
....
% mkdir -p /usr/local/freebsd-update-server/patches/7.1-RELEASE/
% cd /usr/local/freebsd-update-server/patches/7.1-RELEASE
....
-Como exemplo, pegue o patch para man:named[8]. Leia o comunicado, e pegue o arquivo necessário de https://www.FreeBSD.org/security/advisories/[Avisos de Segurança do FreeBSD]. Mais informações sobre a interpretação do comunicado podem ser encontradas no extref:{handbook}security[Handbook do FreeBSD, security-advisories].
+Como exemplo, considere o patch para o man:named[8]. Leia o aviso e pegue o arquivo necessário em link:https://www.FreeBSD.org/security/advisories/[Avisos de Segurança do FreeBSD]. Mais informações sobre a interpretação do aviso podem ser encontradas no extref:{handbook}[Handbook do FreeBSD, security-advisories].
-No https://security.freebsd.org/advisories/FreeBSD-SA-09:12.bind.asc[resumo de segurança], este comunicado é chamado `SA-09:12.bind`. Depois de baixar o arquivo, é necessário renomear o arquivo para um nível de correção apropriado. Sugere-se manter isso consistente com os níveis oficiais de correção do FreeBSD, mas seu nome pode ser escolhido livremente. Para esta compilação, vamos seguir a prática atualmente estabelecida do FreeBSD e chamar isso de `p7`. Renomeie o arquivo:
+No https://security.freebsd.org/advisories/FreeBSD-SA-09:12.bind.asc[informe de segurança], este aviso é chamado de `SA-09:12.bind`. Após o download do arquivo, é necessário renomeá-lo para um nível de patch apropriado. É sugerido manter isso consistente com os níveis de patch oficiais do FreeBSD, mas seu nome pode ser escolhido livremente . Para esta compilação, vamos seguir a prática atualmente estabelecida do FreeBSD e chamá-la de `p7`. Renomeie o arquivo:
-[source,shell]
+[source, shell]
....
-
% cd /usr/local/freebsd-update-server/patches/7.1-RELEASE/; mv bind.patch 7-SA-09:12.bind
....
[NOTE]
====
-Ao executar uma compilação em nível de patch, supõe-se que os patches anteriores estejam no lugar. Quando uma compilação de patch é executada, ela executará todas os patches contidos no diretório de patch.
+Ao executar uma compilação de nível de patch, presume-se que os patches anteriores estão em vigor. Quando uma compilação de patch é executada, ela executará todos os patches contidos no diretório de patch.
-Pode haver patches personalizados adicionados a qualquer compilação. Use o número zero ou qualquer outro número.
+Podem ser adicionados patches personalizados a qualquer compilação. Use o número zero ou qualquer outro número.
====
[WARNING]
====
+
Cabe ao administrador do Servidor de Atualização do FreeBSD tomar as medidas apropriadas para verificar a autenticidade de cada patch.
====
-Neste ponto, um _diff_ está pronto para ser construído. O software verifica primeiro para ver se um [.filename]#scripts/init.sh# foi executado na respectiva versão antes de executar a construção do diff.
+Neste ponto, um _diff_ está pronto para ser compilado. O software verifica primeiro se um [.filename]#scripts/init.sh# foi executado no respectivo release antes de executar a compilação do _diff_.
-[source,shell]
+[source, shell]
....
# cd /usr/local/freebsd-update-server
# sh scripts/diff.sh amd64 7.1-RELEASE 7
....
-O que se segue é um exemplo de uma execução de uma compilação __diferencial__.
+A seguir, segue um exemplo de execução de compilação _diferencial_.
-[source,shell]
+[source, shell]
....
# sh -e scripts/diff.sh amd64 7.1-RELEASE 7
Wed Aug 26 10:09:59 PDT 2009 Extracting world+src for FreeBSD/amd64 7.1-RELEASE-p7
@@ -511,7 +514,7 @@ Wed Aug 26 17:20:39 UTC 2009
As atualizações são impressas e a aprovação é solicitada.
-[source,shell]
+[source, shell]
....
New updates:
kernel|generic|/GENERIC/kernel.symbols|f|0|0|0555|0|7c8dc176763f96ced0a57fc04e7c1b8d793f27e006dd13e0b499e1474ac47e10|
@@ -531,9 +534,9 @@ files to confirm that they look sensible, then run
to sign the build.
....
-Siga o mesmo processo descrito anteriormente para aprovar uma compilação:
+Siga o mesmo processo mencionado anteriormente para aprovar uma compilação:
-[source,shell]
+[source, shell]
....
# sh -e scripts/approve.sh amd64 7.1-RELEASE
Wed Aug 26 12:50:06 PDT 2009 Signing build for FreeBSD/amd64 7.1-RELEASE
@@ -551,18 +554,18 @@ the new builds.
Depois de aprovar a compilação, faça o upload do software:
-[source,shell]
+[source, shell]
....
# cd /usr/local/freebsd-update-server
# sh scripts/upload.sh amd64 7.1-RELEASE
....
-Para referência, toda a execução do link:../../../source/articles/freebsd-update-server/diff.txt[diff.sh] é anexada.
+Para referência, toda a execução do link:../../source/articles/freebsd-update-server/diff.txt[diff.sh] está anexada.
[[tips]]
== Dicas
-* Se uma versão personalizada for criada usando o procedimento `make release` extref:{releng}[nativo, release-build], o `freebsd-update-server` funcionará a partir do seu release. Como exemplo, uma versão sem ports ou documentação pode ser construída limpando funcionalidades de limpeza pertinentes às sub-rotinas de documentação `findextradocs()`, `addextradocs()` e alterando o local de download em `fetchiso()`, respectivamente, em [.filename]#scripts/build.subr#. Como último passo, altere o hash man:sha256[1] no arquivo [.filename]#build.conf# sob sua respectiva versão e arquitetura e você estará pronto para criar sua versão personalizada.
+* Se um release personalizado for compilado usando o extref:{releng}[procedimento, release-build] nativo `make release`, o código do freebsd-update-server funcionará a partir do seu release. Como exemplo, um release sem ports ou documentação pode ser criado limpando a funcionalidade referente às sub-rotinas de documentação `findextradocs ()`, `addextradocs ()` e alterando o local de download em `fetchiso ()`, respectivamente, em [.filename]#scripts/build.subr#. Como último passo, altere a chave man:sha256[1] em [.filename]#build.conf# no seu respectivo release e arquitetura e você estará pronto para compilar o seu release personalizado.
+
[.programlisting]
....
@@ -576,7 +579,7 @@ addextradocs () {
}
....
-* Adicionando flags `-j _NUMERO_` para os alvos `buildworld` e `obj` no script [.filename]#scripts/build.subr# pode acelerar o processamento, dependendo do hardware usado, no entanto, não é necessário. O uso dessas flags em outros alvos não é recomendado, pois pode tornar a construção não confiável.
+* Adicionar flags `-j _NUMERO_` para os alvos `buildworld` e `obj` no script [.filename]#scripts/build.subr# pode acelerar o processamento, dependendo do hardware utilizado, no entanto, não é necessário. Usar esses flags em outros alvos não é recomendado, pois pode fazer com que a compilação se torne pouco confiável.
+
[.programlisting]
....
@@ -591,7 +594,7 @@ addextradocs () {
make ${COMPATFLAGS} release.1 release.2 2>&1
....
-* Crie um registro extref:{handbook}network-servers[DNS, network-dns] apropriado para o servidor de atualizações e coloque outros por trás dele com variáveis de pesos diferentes. O uso desse recurso fornecerá espelhos de atualização, no entanto, essa dica não é necessária, a menos que você deseje fornecer um serviço redundante.
+* Crie um registro extref:{handbook}[DNS, network-dns] SRV apropriado para o servidor de atualização e coloque outros atrás dele com pesos variáveis. O uso dessa facilidade fornecerá espelhos de atualização, no entanto, essa dica não é necessária, a menos que você deseje fornecer um serviço redundante.
+
[.programlisting]
....
diff --git a/documentation/content/pt-br/articles/freebsd-update-server/_index.po b/documentation/content/pt-br/articles/freebsd-update-server/_index.po
new file mode 100644
index 0000000000..2159de25d0
--- /dev/null
+++ b/documentation/content/pt-br/articles/freebsd-update-server/_index.po
@@ -0,0 +1,1562 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-07-07 23:23-0300\n"
+"PO-Revision-Date: 2023-04-22 20:29+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesfreebsd-update-server_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:1
+#, no-wrap
+msgid "Building your own freebsd-update server allows a system administrator to perform fast updates for a number of machines from a local mirror"
+msgstr ""
+"Construir seu próprio servidor freebsd-update permite que um administrador "
+"de sistema realize atualizações rápidas para vários computadores a partir de "
+"um espelho local"
+
+#. type: Title =
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:1
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:12
+#, no-wrap
+msgid "Build Your Own FreeBSD Update Server"
+msgstr "Construa seu próprio servidor de atualização do FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:45
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:49
+msgid ""
+"This article describes building an internal FreeBSD Update Server. The "
+"https://github.com/freebsd/freebsd-update-build/[freebsd-update-server] is "
+"written by `{cperciva}`, Security Officer Emeritus of FreeBSD. For users "
+"that think it is convenient to update their systems against an official "
+"update server, building their own FreeBSD Update Server may help to extend "
+"its functionality by supporting manually-tweaked FreeBSD releases or by "
+"providing a local mirror that will allow faster updates for a number of "
+"machines."
+msgstr ""
+"Este artigo descreve a construção de um Servidor Interno de Atualização do "
+"FreeBSD. O https://github.com/freebsd/freebsd-update-build/[freebsd-update-"
+"server] é escrito por `{cperciva}`, Oficial de Segurança Emérito do FreeBSD. "
+"Para usuários que acham conveniente atualizar seus sistemas em relação a um "
+"servidor de atualização oficial, a construção de seu próprio Servidor de "
+"Atualização do FreeBSD pode ajudar a estender sua funcionalidade ao suportar "
+"versões do FreeBSD ajustadas manualmente ou fornecer um espelho local que "
+"permitirá atualizações mais rápidas para vários computadores."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:51
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:55
+#, no-wrap
+msgid "Acknowledgments"
+msgstr "Agradecimentos"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:58
+msgid ""
+"This article was subsequently printed at https://people.freebsd.org/~jgh/"
+"files/fus/BSD_03_2010_EN.pdf[BSD Magazine]."
+msgstr ""
+"Este artigo foi posteriormente impresso na revista https://people.freebsd."
+"org/~jgh/files/fus/BSD_03_2010_EN.pdf[BSD Magazine]."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:60
+#, no-wrap
+msgid "Introduction"
+msgstr "Introdução"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:67
+msgid ""
+"Experienced users or administrators are often responsible for several "
+"machines or environments. They understand the difficult demands and "
+"challenges of maintaining such an infrastructure. Running a FreeBSD Update "
+"Server makes it easier to deploy security and software patches to selected "
+"test machines before rolling them out to production. It also means a number "
+"of systems can be updated from the local network rather than a potentially "
+"slower Internet connection. This article outlines the steps involved in "
+"creating an internal FreeBSD Update Server."
+msgstr ""
+"Usuários ou administradores experientes frequentemente são responsáveis por "
+"várias máquinas ou ambientes. Eles entendem as exigências e desafios "
+"difíceis de manter essa infraestrutura. Executar um Servidor de Atualização "
+"do FreeBSD torna mais fácil implantar patches de segurança e atualizações "
+"de software para máquinas de teste selecionadas antes de implementá-los nos "
+"servidores de produção. Também significa que vários sistemas podem ser "
+"atualizados a partir da rede local em vez de uma conexão com a Internet "
+"potencialmente mais lenta. Este artigo descreve os passos envolvidos na "
+"criação de um Servidor Interno de Atualização do FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:69
+#, no-wrap
+msgid "Prerequisites"
+msgstr "Pré-requisitos"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:72
+msgid ""
+"To build an internal FreeBSD Update Server some requirements should be met."
+msgstr ""
+"Para construir um Servidor Interno de Atualização do FreeBSD, alguns "
+"requisitos devem ser atendidos."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:74
+msgid "A running FreeBSD system."
+msgstr "Um sistema FreeBSD em execução."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:78
+msgid ""
+"At a minimum, updates require building on a FreeBSD release greater than or "
+"equal to the target release version for distribution."
+msgstr ""
+"No mínimo, as atualizações requerem a criação de uma versão do FreeBSD maior "
+"ou igual a versão do release alvo para a distribuição."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:80
+msgid ""
+"A user account with at least 4 GB of available space. This will allow the "
+"creation of updates for 7.1 and 7.2, but the exact space requirements may "
+"change from version to version."
+msgstr ""
+"Uma conta de usuário com pelo menos 4 GB de espaço disponível. Isso "
+"permitirá a criação de atualizações para 7.1 e 7.2, mas os requisitos de "
+"espaço exatos podem mudar de versão para versão."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:81
+msgid ""
+"An man:ssh[1] account on a remote machine to upload distributed updates."
+msgstr ""
+"Uma conta man:ssh[1] em uma máquina remota para fazer o upload das "
+"atualizações que serão distribuídas."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:82
+msgid ""
+"A web server, like extref:{handbook}[Apache, network-apache], with over half "
+"of the space required for the build. For instance, test builds for 7.1 and "
+"7.2 consume a total amount of 4 GB, and the webserver space needed to "
+"distribute these updates is 2.6 GB."
+msgstr ""
+"Um servidor web, como o extref:{handbook}[Apache, network-apache], com mais "
+"da metade do espaço necessário para a compilação. Por exemplo, as "
+"compilações de teste para 7.1 e 7.2 consomem uma quantidade total de 4 GB, e "
+"o espaço necessário no servidor web para distribuir essas atualizações é de "
+"2,6 GB."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:83
+msgid "Basic knowledge of shell scripting with Bourne shell, man:sh[1]."
+msgstr "Conhecimento básico de script shell com o shell Bourne, man:sh[1]."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:85
+#, no-wrap
+msgid "Configuration: Installation & Setup"
+msgstr "Configuração: Instalação e Setup"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:88
+msgid ""
+"Download the https://github.com/freebsd/freebsd-update-build/[freebsd-update-"
+"server] software by installing package:devel/git[] and package:security/"
+"ca_root_nss[], and execute:"
+msgstr ""
+"Faça o download do software https://github.com/freebsd/freebsd-update-build/"
+"[freebsd-update-server] instalando os pacotes package:devel/git[] e package:"
+"security/ca_root_nss[], e execute:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:92
+#, no-wrap
+msgid "% git clone https://github.com/freebsd/freebsd-update-build.git freebsd-update-server\n"
+msgstr ""
+"% git clone https://github.com/freebsd/freebsd-update-build.git freebsd-"
+"update-server\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:96
+msgid ""
+"Update [.filename]#scripts/build.conf# appropriately. It is sourced during "
+"all build operations."
+msgstr ""
+"Atualize o arquivo [.filename]#scripts/build.conf# adequadamente. Ele será "
+"usado durante todas as operações de compilação."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:98
+msgid ""
+"Here is the default [.filename]#build.conf#, which should be modified to "
+"suit your environment."
+msgstr ""
+"Aqui está o [.filename]#build.conf# padrão, que deve ser modificado para "
+"atender ao seu ambiente."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:104
+#, no-wrap
+msgid ""
+"# Main configuration file for FreeBSD Update builds. The\n"
+"# release-specific configuration data is lower down in\n"
+"# the scripts tree.\n"
+msgstr ""
+"# Arquivo de configuração principal para compilações do FreeBSD Update. \n"
+"# Os dados de configuração específicos do lançamento estão mais abaixo \n"
+"# na árvore de scripts.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:107
+#, no-wrap
+msgid ""
+"# Location from which to fetch releases\n"
+"export FTP=ftp://ftp2.freebsd.org/pub/FreeBSD/releases <.>\n"
+msgstr ""
+"# Local de onde buscar os releases\n"
+"export FTP=ftp://ftp2.freebsd.org/pub/FreeBSD/releases <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:110
+#, no-wrap
+msgid ""
+"# Host platform\n"
+"export HOSTPLATFORM=`uname -m`\n"
+msgstr ""
+"# Plataforma do host\n"
+"export HOSTPLATFORM=`uname -m`\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:113
+#, no-wrap
+msgid ""
+"# Host name to use inside jails\n"
+"export BUILDHOSTNAME=${HOSTPLATFORM}-builder.daemonology.net <.>\n"
+msgstr ""
+"# Nome do host a ser usado dentro das jails\n"
+"export BUILDHOSTNAME=${HOSTPLATFORM}-builder.daemonology.net <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:116
+#, no-wrap
+msgid ""
+"# Location of SSH key\n"
+"export SSHKEY=/root/.ssh/id_dsa <.>\n"
+msgstr ""
+"# Localização da chave privada SSH \n"
+"export SSHKEY=/root/.ssh/id_dsa <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:119
+#, no-wrap
+msgid ""
+"# SSH account into which files are uploaded\n"
+"MASTERACCT=builder@wadham.daemonology.net <.>\n"
+msgstr ""
+"# Conta SSH para a qual os arquivos são enviados\n"
+"MASTERACCT=builder@wadham.daemonology.net <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:122
+#, no-wrap
+msgid ""
+"# Directory into which files are uploaded\n"
+"MASTERDIR=update-master.freebsd.org <.>\n"
+msgstr ""
+"# Diretório para o qual os arquivos são enviados\n"
+"MASTERDIR=update-master.freebsd.org <.>\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:125
+msgid "Parameters for consideration would be:"
+msgstr "Os parâmetros a serem considerados seriam:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:128
+msgid ""
+"This is the location where ISO images are downloaded from (by the "
+"`fetchiso()` subroutine of [.filename]#scripts/build.subr#). The location "
+"configured is not limited to FTP URIs. Any URI scheme supported by standard "
+"man:fetch[1] utility should work fine. Customizations to the `fetchiso()` "
+"code can be installed by copying the default [.filename]#build.subr# script "
+"to the release and architecture-specific area at [.filename]#scripts/RELEASE/"
+"ARCHITECTURE/build.subr# and applying local changes."
+msgstr ""
+"Este é o local de onde as imagens ISO são baixadas (pela sub-rotina "
+"`fetchiso()` do arquivo [.filename]#scripts/build.subr#). A localização "
+"configurada não se limita a URIs FTP. Qualquer esquema de URI suportado pelo "
+"utilitário padrão man:fetch[1] deve funcionar bem. Personalizações para o "
+"código `fetchiso()` podem ser instaladas copiando o arquivo padrão [."
+"filename]#build.subr# para a área específica de release e arquitetura em [."
+"filename]#scripts/RELEASE/ARCHITECTURE/build.subr# e aplicando alterações "
+"locais."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:130
+msgid ""
+"The name of the build host. This information will be displayed on updated "
+"systems when issuing:"
+msgstr ""
+"O nome do host de compilação. Essa informação será exibida em sistemas "
+"atualizados ao emitir o comando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:134
+#, no-wrap
+msgid "% uname -v\n"
+msgstr "% uname -v\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:138
+msgid ""
+"The SSH key for uploading files to the update server. A key pair can be "
+"created by typing `ssh-keygen -t dsa`. This parameter is optional; standard "
+"password authentication will be used as a fallback authentication method "
+"when `SSHKEY` is not defined. The man:ssh-keygen[1] manual page has more "
+"detailed information about SSH and the appropriate steps for creating and "
+"using one."
+msgstr ""
+"A chave SSH para enviar arquivos para o servidor de atualização. Um par de "
+"chaves pode ser criado digitando `ssh-keygen -t dsa`. Este parâmetro é "
+"opcional; a autenticação padrão por senha será usada como método de "
+"autenticação de fallback quando o `SSHKEY` não estiver definido. A página do "
+"manual man:ssh-keygen[1] contém informações mais detalhadas sobre o SSH e os "
+"passos apropriados para criar e usar uma chave."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:140
+msgid "Account for uploading files to the update server."
+msgstr "Conta para enviar os arquivos para o servidor de atualização."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:142
+msgid "Directory on the update server where files are uploaded to."
+msgstr "Diretório no servidor de atualização onde os arquivos são enviados."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:144
+msgid ""
+"The default [.filename]#build.conf# shipped with the freebsd-update-server "
+"sources is suitable for building i386 releases of FreeBSD. As an example of "
+"building an update server for other architectures, the following steps "
+"outline the configuration changes needed for amd64:"
+msgstr ""
+"O [.filename]#build.conf# padrão fornecido com o código fonte do freebsd-"
+"update-server é adequado para compilar releases do FreeBSD para a "
+"arquitetura i386. Como exemplo de compilação de um servidor de atualização "
+"para outras arquiteturas, os seguintes passos resumem as alterações de "
+"configuração necessárias para a arquitetura amd64:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:148
+msgid "Create a build environment for amd64:"
+msgstr "Crie um ambiente de compilação para o amd64:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:152
+#, no-wrap
+msgid "% mkdir -p /usr/local/freebsd-update-server/scripts/7.2-RELEASE/amd64\n"
+msgstr "% mkdir -p /usr/local/freebsd-update-server/scripts/7.2-RELEASE/amd64\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:155
+msgid ""
+"Install a [.filename]#build.conf# in the newly created build directory. The "
+"build configuration options for FreeBSD 7.2-RELEASE on amd64 should be "
+"similar to:"
+msgstr ""
+"Instale um arquivo [.filename]#build.conf# no diretório de compilação recém-"
+"criado. As opções de configuração de compilação para o FreeBSD 7.2-RELEASE "
+"em amd64 devem ser semelhantes a:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:166
+#, no-wrap
+msgid ""
+"# SHA256 hash of RELEASE disc1.iso image.\n"
+"export RELH=1ea1f6f652d7c5f5eab7ef9f8edbed50cb664b08ed761850f95f48e86cc71ef5 <.>\n"
+"# Components of the world, source, and kernels\n"
+"export WORLDPARTS=\"base catpages dict doc games info manpages proflibs lib32\"\n"
+"export SOURCEPARTS=\"base bin contrib crypto etc games gnu include krb5 \\\n"
+" lib libexec release rescue sbin secure share sys tools \\\n"
+" ubin usbin cddl\"\n"
+"export KERNELPARTS=\"generic\"\n"
+msgstr ""
+"# SHA256 hash of RELEASE disc1.iso image.\n"
+"export RELH=1ea1f6f652d7c5f5eab7ef9f8edbed50cb664b08ed761850f95f48e86cc71ef5 "
+"<.>\n"
+"# Components of the world, source, and kernels\n"
+"export WORLDPARTS=\"base catpages dict doc games info manpages proflibs "
+"lib32\"\n"
+"export SOURCEPARTS=\"base bin contrib crypto etc games gnu include krb5 \\\n"
+" lib libexec release rescue sbin secure share sys tools \\\n"
+" ubin usbin cddl\"\n"
+"export KERNELPARTS=\"generic\"\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:169
+#, no-wrap
+msgid ""
+"# EOL date\n"
+"export EOL=1275289200 <.>\n"
+msgstr ""
+"# EOL date\n"
+"export EOL=1275289200 <.>\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:172
+msgid ""
+"The man:sha256[1] hash key for the desired release, is published within the "
+"respective link:https://www.FreeBSD.org/releases/[release announcement]."
+msgstr ""
+"A chave hash man:sha256[1] para o release desejado está publicada dentro do "
+"respectivo link:https://www.FreeBSD.org/releases/[anúncio de release]."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:173
+msgid ""
+"To generate the \"End of Life\" number for [.filename]#build.conf#, refer to "
+"the \"Estimated EOL\" posted on the link:https://www.FreeBSD.org/security/"
+"security/[FreeBSD Security Website]. The value of `EOL` can be derived from "
+"the date listed on the web site, using the man:date[1] utility, for example:"
+msgstr ""
+"Para gerar o número \"End of Life\" para o arquivo [.filename]#build.conf#, "
+"consulte o \"Estimated EOL\" publicado no link:https://www.FreeBSD.org/"
+"security/security/[Site de Segurança do FreeBSD]. O valor de `EOL` pode ser "
+"derivado da data listada no site da web, usando o utilitário man:date[1], "
+"por exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:177
+#, no-wrap
+msgid "% date -j -f '%Y%m%d-%H%M%S' '20090401-000000' '+%s'\n"
+msgstr "% date -j -f '%Y%m%d-%H%M%S' '20090401-000000' '+%s'\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:181
+#, no-wrap
+msgid "Building Update Code"
+msgstr "Compilando o Código de Atualização"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:186
+msgid ""
+"The first step is to run [.filename]#scripts/make.sh#. This will build some "
+"binaries, create directories, and generate an RSA signing key used for "
+"approving builds. In this step, a passphrase will have to be supplied for "
+"the final creation of the signing key."
+msgstr ""
+"O primeiro passo é executar o [.filename]#scripts/make.sh#. Isso irá "
+"compilar alguns binários, criar diretórios e gerar uma chave de assinatura "
+"RSA usada para aprovar as compilações. Nesta etapa, uma frase secreta terá "
+"que ser fornecida para a criação final da chave de assinatura."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:201
+#, no-wrap
+msgid ""
+"# sh scripts/make.sh\n"
+"cc -O2 -fno-strict-aliasing -pipe findstamps.c -o findstamps\n"
+"findstamps.c: In function 'usage':\n"
+"findstamps.c:45: warning: incompatible implicit declaration of built-in function 'exit'\n"
+"cc -O2 -fno-strict-aliasing -pipe unstamp.c -o unstamp\n"
+"install findstamps ../bin\n"
+"install unstamp ../bin\n"
+"rm -f findstamps unstamp\n"
+"Generating RSA private key, 4096 bit long modulus\n"
+"................................................................................++\n"
+"...................++\n"
+"e is 65537 (0x10001)\n"
+msgstr ""
+"# sh scripts/make.sh\n"
+"cc -O2 -fno-strict-aliasing -pipe findstamps.c -o findstamps\n"
+"findstamps.c: In function 'usage':\n"
+"findstamps.c:45: warning: incompatible implicit declaration of built-in "
+"function 'exit'\n"
+"cc -O2 -fno-strict-aliasing -pipe unstamp.c -o unstamp\n"
+"install findstamps ../bin\n"
+"install unstamp ../bin\n"
+"rm -f findstamps unstamp\n"
+"Generating RSA private key, 4096 bit long modulus\n"
+"............................................................................."
+"...++\n"
+"...................++\n"
+"e is 65537 (0x10001)\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:204
+#, no-wrap
+msgid ""
+"Public key fingerprint:\n"
+"27ef53e48dc869eea6c3136091cc6ab8589f967559824779e855d58a2294de9e\n"
+msgstr ""
+"Public key fingerprint:\n"
+"27ef53e48dc869eea6c3136091cc6ab8589f967559824779e855d58a2294de9e\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:208
+#, no-wrap
+msgid ""
+"Encrypting signing key for root\n"
+"enter aes-256-cbc encryption password:\n"
+"Verifying - enter aes-256-cbc encryption password:\n"
+msgstr ""
+"Encrypting signing key for root\n"
+"enter aes-256-cbc encryption password:\n"
+"Verifying - enter aes-256-cbc encryption password:\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:214
+msgid ""
+"Keep a note of the generated key fingerprint. This value is required in [."
+"filename]#/etc/freebsd-update.conf# for binary updates."
+msgstr ""
+"Anote a impressão digital da chave gerada. Este valor será necessário no [."
+"filename]#/etc/freebsd-update.conf# para as atualizações binárias."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:217
+msgid "At this point, we are ready to stage a build."
+msgstr "Neste ponto, estamos prontos para preparar uma compilação."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:222
+#, no-wrap
+msgid ""
+"# cd /usr/local/freebsd-update-server\n"
+"# sh scripts/init.sh amd64 7.2-RELEASE\n"
+msgstr ""
+"# cd /usr/local/freebsd-update-server\n"
+"# sh scripts/init.sh amd64 7.2-RELEASE\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:225
+msgid "What follows is a sample of an _initial_ build run."
+msgstr "A seguir, segue um exemplo da execução de uma compilação _inicial_."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:245
+#, no-wrap
+msgid ""
+"# sh scripts/init.sh amd64 7.2-RELEASE\n"
+"Mon Aug 24 16:04:36 PDT 2009 Starting fetch for FreeBSD/amd64 7.2-RELEASE\n"
+"/usr/local/freebsd-update-server/work/7.2-RELE100 of 588 MB 359 kBps 00m00s\n"
+"Mon Aug 24 16:32:38 PDT 2009 Verifying disc1 hash for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 16:32:44 PDT 2009 Extracting components for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 16:34:05 PDT 2009 Constructing world+src image for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 16:35:57 PDT 2009 Extracting world+src for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 23:36:24 UTC 2009 Building world for FreeBSD/amd64 7.2-RELEASE\n"
+"Tue Aug 25 00:31:29 UTC 2009 Distributing world for FreeBSD/amd64 7.2-RELEASE\n"
+"Tue Aug 25 00:32:36 UTC 2009 Building and distributing kernels for FreeBSD/amd64 7.2-RELEASE\n"
+"Tue Aug 25 00:44:44 UTC 2009 Constructing world components for FreeBSD/amd64 7.2-RELEASE\n"
+"Tue Aug 25 00:44:56 UTC 2009 Distributing source for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 17:46:18 PDT 2009 Moving components into staging area for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 17:46:33 PDT 2009 Identifying extra documentation for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 17:47:13 PDT 2009 Extracting extra docs for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 17:47:18 PDT 2009 Indexing release for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 17:50:44 PDT 2009 Indexing world0 for FreeBSD/amd64 7.2-RELEASE\n"
+msgstr ""
+"# sh scripts/init.sh amd64 7.2-RELEASE\n"
+"Mon Aug 24 16:04:36 PDT 2009 Starting fetch for FreeBSD/amd64 7.2-RELEASE\n"
+"/usr/local/freebsd-update-server/work/7.2-RELE100 of 588 MB 359 kBps "
+"00m00s\n"
+"Mon Aug 24 16:32:38 PDT 2009 Verifying disc1 hash for FreeBSD/amd64 7.2-"
+"RELEASE\n"
+"Mon Aug 24 16:32:44 PDT 2009 Extracting components for FreeBSD/amd64 7.2-"
+"RELEASE\n"
+"Mon Aug 24 16:34:05 PDT 2009 Constructing world+src image for FreeBSD/amd64 7"
+".2-RELEASE\n"
+"Mon Aug 24 16:35:57 PDT 2009 Extracting world+src for FreeBSD/amd64 7.2-"
+"RELEASE\n"
+"Mon Aug 24 23:36:24 UTC 2009 Building world for FreeBSD/amd64 7.2-RELEASE\n"
+"Tue Aug 25 00:31:29 UTC 2009 Distributing world for FreeBSD/amd64 7.2-"
+"RELEASE\n"
+"Tue Aug 25 00:32:36 UTC 2009 Building and distributing kernels for FreeBSD/"
+"amd64 7.2-RELEASE\n"
+"Tue Aug 25 00:44:44 UTC 2009 Constructing world components for FreeBSD/amd64 "
+"7.2-RELEASE\n"
+"Tue Aug 25 00:44:56 UTC 2009 Distributing source for FreeBSD/amd64 7.2-"
+"RELEASE\n"
+"Mon Aug 24 17:46:18 PDT 2009 Moving components into staging area for FreeBSD/"
+"amd64 7.2-RELEASE\n"
+"Mon Aug 24 17:46:33 PDT 2009 Identifying extra documentation for FreeBSD/"
+"amd64 7.2-RELEASE\n"
+"Mon Aug 24 17:47:13 PDT 2009 Extracting extra docs for FreeBSD/amd64 7.2-"
+"RELEASE\n"
+"Mon Aug 24 17:47:18 PDT 2009 Indexing release for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 17:50:44 PDT 2009 Indexing world0 for FreeBSD/amd64 7.2-RELEASE\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:266
+#, no-wrap
+msgid ""
+"Files built but not released:\n"
+"Files released but not built:\n"
+"Files which differ by more than contents:\n"
+"Files which differ between release and build:\n"
+"kernel|generic|/GENERIC/hptrr.ko\n"
+"kernel|generic|/GENERIC/kernel\n"
+"src|sys|/sys/conf/newvers.sh\n"
+"world|base|/boot/loader\n"
+"world|base|/boot/pxeboot\n"
+"world|base|/etc/mail/freebsd.cf\n"
+"world|base|/etc/mail/freebsd.submit.cf\n"
+"world|base|/etc/mail/sendmail.cf\n"
+"world|base|/etc/mail/submit.cf\n"
+"world|base|/lib/libcrypto.so.5\n"
+"world|base|/usr/bin/ntpq\n"
+"world|base|/usr/lib/libalias.a\n"
+"world|base|/usr/lib/libalias_cuseeme.a\n"
+"world|base|/usr/lib/libalias_dummy.a\n"
+"world|base|/usr/lib/libalias_ftp.a\n"
+"...\n"
+msgstr ""
+"Files built but not released:\n"
+"Files released but not built:\n"
+"Files which differ by more than contents:\n"
+"Files which differ between release and build:\n"
+"kernel|generic|/GENERIC/hptrr.ko\n"
+"kernel|generic|/GENERIC/kernel\n"
+"src|sys|/sys/conf/newvers.sh\n"
+"world|base|/boot/loader\n"
+"world|base|/boot/pxeboot\n"
+"world|base|/etc/mail/freebsd.cf\n"
+"world|base|/etc/mail/freebsd.submit.cf\n"
+"world|base|/etc/mail/sendmail.cf\n"
+"world|base|/etc/mail/submit.cf\n"
+"world|base|/lib/libcrypto.so.5\n"
+"world|base|/usr/bin/ntpq\n"
+"world|base|/usr/lib/libalias.a\n"
+"world|base|/usr/lib/libalias_cuseeme.a\n"
+"world|base|/usr/lib/libalias_dummy.a\n"
+"world|base|/usr/lib/libalias_ftp.a\n"
+"...\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:270
+msgid ""
+"Then the build of the world is performed again, with world patches. A more "
+"detailed explanation may be found in [.filename]#scripts/build.subr#."
+msgstr ""
+"Em seguida, a compilação do target \"world\" é realizada novamente, com "
+"patches de \"world\". Uma explicação mais detalhada pode ser encontrada em [."
+"filename]#scripts/build.subr#."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:276
+msgid ""
+"During this second build cycle, the network time protocol daemon, man:"
+"ntpd[8], is turned off. Per `{cperciva}`, Security Officer Emeritus of "
+"FreeBSD, \"the https://github.com/freebsd/freebsd-update-build/[freebsd-"
+"update-server] build code needs to identify timestamps which are stored in "
+"files so that they can be ignored when comparing builds to determine which "
+"files need to be updated. This timestamp-finding works by doing two builds "
+"400 days apart and comparing the results.\""
+msgstr ""
+"Durante esse segundo ciclo de compilação, o daemon do protocolo de tempo de "
+"rede, man:ntpd[8], é desativado. Conforme o `{cperciva}`, Oficial de "
+"Segurança Emérito do FreeBSD, \"o código de compilação do https://github.com/"
+"freebsd/freebsd-update-build/[freebsd-update-server] precisa identificar "
+"carimbos de data/hora que são armazenados em arquivos para que eles possam "
+"ser ignorados ao comparar compilações e determinar quais arquivos precisam "
+"ser atualizados. Esse processo de localização de carimbos de data/hora "
+"funciona fazendo duas compilações com 400 dias de intervalo e comparando os "
+"resultados.\""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:295
+#, no-wrap
+msgid ""
+"Mon Aug 24 17:54:07 PDT 2009 Extracting world+src for FreeBSD/amd64 7.2-RELEASE\n"
+"Wed Sep 29 00:54:34 UTC 2010 Building world for FreeBSD/amd64 7.2-RELEASE\n"
+"Wed Sep 29 01:49:42 UTC 2010 Distributing world for FreeBSD/amd64 7.2-RELEASE\n"
+"Wed Sep 29 01:50:50 UTC 2010 Building and distributing kernels for FreeBSD/amd64 7.2-RELEASE\n"
+"Wed Sep 29 02:02:56 UTC 2010 Constructing world components for FreeBSD/amd64 7.2-RELEASE\n"
+"Wed Sep 29 02:03:08 UTC 2010 Distributing source for FreeBSD/amd64 7.2-RELEASE\n"
+"Tue Sep 28 19:04:31 PDT 2010 Moving components into staging area for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 19:04:46 PDT 2009 Extracting extra docs for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 19:04:51 PDT 2009 Indexing world1 for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 19:08:04 PDT 2009 Locating build stamps for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 19:10:19 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 19:10:19 PDT 2009 Preparing to copy files into staging area for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 19:10:20 PDT 2009 Copying data files into staging area for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 12:16:57 PDT 2009 Copying metadata files into staging area for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 12:16:59 PDT 2009 Constructing metadata index and tag for FreeBSD/amd64 7.2-RELEASE\n"
+msgstr ""
+"Mon Aug 24 17:54:07 PDT 2009 Extracting world+src for FreeBSD/amd64 7.2-"
+"RELEASE\n"
+"Wed Sep 29 00:54:34 UTC 2010 Building world for FreeBSD/amd64 7.2-RELEASE\n"
+"Wed Sep 29 01:49:42 UTC 2010 Distributing world for FreeBSD/amd64 7.2-"
+"RELEASE\n"
+"Wed Sep 29 01:50:50 UTC 2010 Building and distributing kernels for FreeBSD/"
+"amd64 7.2-RELEASE\n"
+"Wed Sep 29 02:02:56 UTC 2010 Constructing world components for FreeBSD/amd64 "
+"7.2-RELEASE\n"
+"Wed Sep 29 02:03:08 UTC 2010 Distributing source for FreeBSD/amd64 7.2-"
+"RELEASE\n"
+"Tue Sep 28 19:04:31 PDT 2010 Moving components into staging area for FreeBSD/"
+"amd64 7.2-RELEASE\n"
+"Mon Aug 24 19:04:46 PDT 2009 Extracting extra docs for FreeBSD/amd64 7.2-"
+"RELEASE\n"
+"Mon Aug 24 19:04:51 PDT 2009 Indexing world1 for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 19:08:04 PDT 2009 Locating build stamps for FreeBSD/amd64 7.2-"
+"RELEASE\n"
+"Mon Aug 24 19:10:19 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.2-"
+"RELEASE\n"
+"Mon Aug 24 19:10:19 PDT 2009 Preparing to copy files into staging area for "
+"FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 19:10:20 PDT 2009 Copying data files into staging area for "
+"FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 12:16:57 PDT 2009 Copying metadata files into staging area for "
+"FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 12:16:59 PDT 2009 Constructing metadata index and tag for FreeBSD/"
+"amd64 7.2-RELEASE\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:313
+#, no-wrap
+msgid ""
+"Files found which include build stamps:\n"
+"kernel|generic|/GENERIC/hptrr.ko\n"
+"kernel|generic|/GENERIC/kernel\n"
+"world|base|/boot/loader\n"
+"world|base|/boot/pxeboot\n"
+"world|base|/etc/mail/freebsd.cf\n"
+"world|base|/etc/mail/freebsd.submit.cf\n"
+"world|base|/etc/mail/sendmail.cf\n"
+"world|base|/etc/mail/submit.cf\n"
+"world|base|/lib/libcrypto.so.5\n"
+"world|base|/usr/bin/ntpq\n"
+"world|base|/usr/include/osreldate.h\n"
+"world|base|/usr/lib/libalias.a\n"
+"world|base|/usr/lib/libalias_cuseeme.a\n"
+"world|base|/usr/lib/libalias_dummy.a\n"
+"world|base|/usr/lib/libalias_ftp.a\n"
+"...\n"
+msgstr ""
+"Files found which include build stamps:\n"
+"kernel|generic|/GENERIC/hptrr.ko\n"
+"kernel|generic|/GENERIC/kernel\n"
+"world|base|/boot/loader\n"
+"world|base|/boot/pxeboot\n"
+"world|base|/etc/mail/freebsd.cf\n"
+"world|base|/etc/mail/freebsd.submit.cf\n"
+"world|base|/etc/mail/sendmail.cf\n"
+"world|base|/etc/mail/submit.cf\n"
+"world|base|/lib/libcrypto.so.5\n"
+"world|base|/usr/bin/ntpq\n"
+"world|base|/usr/include/osreldate.h\n"
+"world|base|/usr/lib/libalias.a\n"
+"world|base|/usr/lib/libalias_cuseeme.a\n"
+"world|base|/usr/lib/libalias_dummy.a\n"
+"world|base|/usr/lib/libalias_ftp.a\n"
+"...\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:316
+msgid "Finally, the build completes."
+msgstr "Por fim, a compilação é concluída."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:345
+#, no-wrap
+msgid ""
+"Values of build stamps, excluding library archive headers:\n"
+"v1.2 (Aug 25 2009 00:40:36)\n"
+"v1.2 (Aug 25 2009 00:38:22)\n"
+"@()FreeBSD 7.2-RELEASE 0: Tue Aug 25 00:38:29 UTC 2009\n"
+"FreeBSD 7.2-RELEASE 0: Tue Aug 25 00:38:29 UTC 2009\n"
+" root@server.myhost.com:/usr/obj/usr/src/sys/GENERIC\n"
+"7.2-RELEASE\n"
+"Mon Aug 24 23:55:25 UTC 2009\n"
+"Mon Aug 24 23:55:25 UTC 2009\n"
+" built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009\n"
+" built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009\n"
+" built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009\n"
+" built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009\n"
+"Mon Aug 24 23:46:47 UTC 2009\n"
+"ntpq 4.2.4p5-a Mon Aug 24 23:55:53 UTC 2009 (1)\n"
+" * Copyright (c) 1992-2009 The FreeBSD Project.\n"
+"Mon Aug 24 23:46:47 UTC 2009\n"
+"Mon Aug 24 23:55:40 UTC 2009\n"
+"Aug 25 2009\n"
+"ntpd 4.2.4p5-a Mon Aug 24 23:55:52 UTC 2009 (1)\n"
+"ntpdate 4.2.4p5-a Mon Aug 24 23:55:53 UTC 2009 (1)\n"
+"ntpdc 4.2.4p5-a Mon Aug 24 23:55:53 UTC 2009 (1)\n"
+"Tue Aug 25 00:21:21 UTC 2009\n"
+"Tue Aug 25 00:21:21 UTC 2009\n"
+"Tue Aug 25 00:21:21 UTC 2009\n"
+"Mon Aug 24 23:46:47 UTC 2009\n"
+msgstr ""
+"Values of build stamps, excluding library archive headers:\n"
+"v1.2 (Aug 25 2009 00:40:36)\n"
+"v1.2 (Aug 25 2009 00:38:22)\n"
+"@()FreeBSD 7.2-RELEASE 0: Tue Aug 25 00:38:29 UTC 2009\n"
+"FreeBSD 7.2-RELEASE 0: Tue Aug 25 00:38:29 UTC 2009\n"
+" root@server.myhost.com:/usr/obj/usr/src/sys/GENERIC\n"
+"7.2-RELEASE\n"
+"Mon Aug 24 23:55:25 UTC 2009\n"
+"Mon Aug 24 23:55:25 UTC 2009\n"
+" built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009\n"
+" built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009\n"
+" built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009\n"
+" built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009\n"
+"Mon Aug 24 23:46:47 UTC 2009\n"
+"ntpq 4.2.4p5-a Mon Aug 24 23:55:53 UTC 2009 (1)\n"
+" * Copyright (c) 1992-2009 The FreeBSD Project.\n"
+"Mon Aug 24 23:46:47 UTC 2009\n"
+"Mon Aug 24 23:55:40 UTC 2009\n"
+"Aug 25 2009\n"
+"ntpd 4.2.4p5-a Mon Aug 24 23:55:52 UTC 2009 (1)\n"
+"ntpdate 4.2.4p5-a Mon Aug 24 23:55:53 UTC 2009 (1)\n"
+"ntpdc 4.2.4p5-a Mon Aug 24 23:55:53 UTC 2009 (1)\n"
+"Tue Aug 25 00:21:21 UTC 2009\n"
+"Tue Aug 25 00:21:21 UTC 2009\n"
+"Tue Aug 25 00:21:21 UTC 2009\n"
+"Mon Aug 24 23:46:47 UTC 2009\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:351
+#, no-wrap
+msgid ""
+"FreeBSD/amd64 7.2-RELEASE initialization build complete. Please\n"
+"review the list of build stamps printed above to confirm that\n"
+"they look sensible, then run\n"
+" sh -e approve.sh amd64 7.2-RELEASE\n"
+"to sign the release.\n"
+msgstr ""
+"FreeBSD/amd64 7.2-RELEASE initialization build complete. Please\n"
+"review the list of build stamps printed above to confirm that\n"
+"they look sensible, then run\n"
+" sh -e approve.sh amd64 7.2-RELEASE\n"
+"to sign the release.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:356
+msgid ""
+"Approve the build if everything is correct. More information on determining "
+"this can be found in the distributed source file named [.filename]#USAGE#. "
+"Execute [.filename]#scripts/approve.sh#, as directed. This will sign the "
+"release, and move components into a staging area suitable for uploading."
+msgstr ""
+"Aprove a compilação se tudo estiver correto. Mais informações sobre como "
+"determinar isso podem ser encontradas no arquivo de origem da distribuição "
+"chamado [.filename]#USAGE#. Execute [.filename]#scripts/approve.sh#, "
+"conforme indicado. Isso irá assinar a versão e mover os componentes para uma "
+"área de preparação adequada para o upload."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:361
+#, no-wrap
+msgid ""
+"# cd /usr/local/freebsd-update-server\n"
+"# sh scripts/mountkey.sh\n"
+msgstr ""
+"# cd /usr/local/freebsd-update-server\n"
+"# sh scripts/mountkey.sh\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:371
+#, no-wrap
+msgid ""
+"# sh -e scripts/approve.sh amd64 7.2-RELEASE\n"
+"Wed Aug 26 12:50:06 PDT 2009 Signing build for FreeBSD/amd64 7.2-RELEASE\n"
+"Wed Aug 26 12:50:06 PDT 2009 Copying files to patch source directories for FreeBSD/amd64 7.2-RELEASE\n"
+"Wed Aug 26 12:50:06 PDT 2009 Copying files to upload staging area for FreeBSD/amd64 7.2-RELEASE\n"
+"Wed Aug 26 12:50:07 PDT 2009 Updating databases for FreeBSD/amd64 7.2-RELEASE\n"
+"Wed Aug 26 12:50:07 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.2-RELEASE\n"
+msgstr ""
+"# sh -e scripts/approve.sh amd64 7.2-RELEASE\n"
+"Wed Aug 26 12:50:06 PDT 2009 Signing build for FreeBSD/amd64 7.2-RELEASE\n"
+"Wed Aug 26 12:50:06 PDT 2009 Copying files to patch source directories for "
+"FreeBSD/amd64 7.2-RELEASE\n"
+"Wed Aug 26 12:50:06 PDT 2009 Copying files to upload staging area for "
+"FreeBSD/amd64 7.2-RELEASE\n"
+"Wed Aug 26 12:50:07 PDT 2009 Updating databases for FreeBSD/amd64 7.2-"
+"RELEASE\n"
+"Wed Aug 26 12:50:07 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.2-"
+"RELEASE\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:374
+msgid ""
+"After the approval process is complete, the upload procedure may be started."
+msgstr ""
+"Após a conclusão do processo de aprovação, o procedimento de upload pode ser "
+"iniciado."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:379
+#, no-wrap
+msgid ""
+"# cd /usr/local/freebsd-update-server\n"
+"# sh scripts/upload.sh amd64 7.2-RELEASE\n"
+msgstr ""
+"# cd /usr/local/freebsd-update-server\n"
+"# sh scripts/upload.sh amd64 7.2-RELEASE\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:384
+msgid ""
+"In the event update code needs to be re-uploaded, this may be done by "
+"changing to the public distributions directory for the target release and "
+"updating attributes of the _uploaded_ file."
+msgstr ""
+"Caso o código de atualização precise ser reenviado, isso pode ser feito "
+"alterando para o diretório de distribuições públicas do release de destino e "
+"atualizando os atributos do arquivo já _enviado_."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:389
+#, no-wrap
+msgid ""
+"# cd /usr/local/freebsd-update-server/pub/7.2-RELEASE/amd64\n"
+"# touch -t 200801010101.01 uploaded\n"
+msgstr ""
+"# cd /usr/local/freebsd-update-server/pub/7.2-RELEASE/amd64\n"
+"# touch -t 200801010101.01 uploaded\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:396
+msgid ""
+"The uploaded files will need to be in the document root of the webserver in "
+"order for updates to be distributed. The exact configuration will vary "
+"depending on the web server used. For the Apache web server, please refer "
+"to the extref:{handbook}[Configuration of Apache servers, network-apache] "
+"section in the Handbook."
+msgstr ""
+"Os arquivos enviados precisarão estar no diretório raiz de documentos do "
+"servidor web para que as atualizações possam ser distribuídas. A "
+"configuração exata variará dependendo do servidor web utilizado. Para o "
+"servidor web Apache, consulte a seção extref:{handbook}[Configuração de "
+"servidores Apache, network-apache] no Handbook."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:398
+msgid ""
+"Update client's `KeyPrint` and `ServerName` in [.filename]#/etc/freebsd-"
+"update.conf#, and perform updates as instructed in the extref:{handbook}"
+"[FreeBSD Update, updating-upgrading-freebsdupdate] section of the Handbook."
+msgstr ""
+"Atualize o `KeyPrint` e o `ServerName` do cliente em [.filename]#/etc/"
+"freebsd-update.conf#, e execute as atualizações conforme instruído na seção "
+"extref:{handbook}[Atualização do FreeBSD, updating-upgrading-freebsdupdate] "
+"do Handbook."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:404
+msgid ""
+"In order for FreeBSD Update Server to work properly, updates for both the "
+"_current_ release and the release _one wants to upgrade to_ need to be "
+"built. This is necessary for determining the differences of files between "
+"releases. For example, when upgrading a FreeBSD system from 7.1-RELEASE to "
+"7.2-RELEASE, updates will need to be built and uploaded to your distribution "
+"server for both versions."
+msgstr ""
+"Para que o Servidor de Atualização do FreeBSD funcione corretamente, as "
+"atualizações tanto para o release _atual_ quanto para o release _para o qual "
+"se deseja atualizar_ precisam ser compiladas. Isso é necessário para "
+"determinar as diferenças nos arquivos entre os releases. Por exemplo, ao "
+"atualizar um sistema FreeBSD da versão 7.1-RELEASE para a versão 7.2-"
+"RELEASE, as atualizações precisarão ser compiladas e enviadas para o seu "
+"servidor de distribuição para ambas as versões."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:407
+msgid ""
+"For reference, the entire run of link:../../source/articles/freebsd-update-"
+"server/init.txt[init.sh] is attached."
+msgstr ""
+"Para referência, toda a execução do link:../../source/articles/"
+"freebsd-update-server/init.txt[init.sh] está anexada."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:409
+#, no-wrap
+msgid "Building a Patch"
+msgstr "Compilando um Patch"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:412
+msgid ""
+"Every time a link:https://www.FreeBSD.org/security/advisories/[security "
+"advisory] or link:https://www.FreeBSD.org/security/notices/[security notice] "
+"is announced, a patch update can be built."
+msgstr ""
+"Toda vez que uma link:https://www.FreeBSD.org/security/advisories/["
+"recomendação de segurança] ou um link:https://www.FreeBSD.org/security/"
+"notices/[aviso de segurança] é anunciado, uma atualização de patch pode ser "
+"compilada."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:414
+msgid "For this example, 7.1-RELEASE will be used."
+msgstr "Para este exemplo, o 7.1-RELEASE será usado."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:416
+msgid "A couple of assumptions are made for a different release build:"
+msgstr "Algumas suposições são feitas para compilar uma release diferente:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:418
+msgid "Setup the correct directory structure for the initial build."
+msgstr "Configure a estrutura de diretórios correta para a compilação inicial."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:419
+msgid "Perform an initial build for 7.1-RELEASE."
+msgstr "Execute uma compilação inicial para o 7.1-RELEASE."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:421
+msgid ""
+"Create the patch directory of the respective release under [.filename]#/usr/"
+"local/freebsd-update-server/patches/#."
+msgstr ""
+"Crie o diretório de patches do respectivo release em [.filename]#/usr/local/"
+"freebsd-update-server/patches/#."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:426
+#, no-wrap
+msgid ""
+"% mkdir -p /usr/local/freebsd-update-server/patches/7.1-RELEASE/\n"
+"% cd /usr/local/freebsd-update-server/patches/7.1-RELEASE\n"
+msgstr ""
+"% mkdir -p /usr/local/freebsd-update-server/patches/7.1-RELEASE/\n"
+"% cd /usr/local/freebsd-update-server/patches/7.1-RELEASE\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:431
+msgid ""
+"As an example, take the patch for man:named[8]. Read the advisory, and grab "
+"the necessary file from link:https://www.FreeBSD.org/security/advisories/"
+"[FreeBSD Security Advisories]. More information on interpreting the "
+"advisory, can be found in the extref:{handbook}[FreeBSD Handbook, security-"
+"advisories]."
+msgstr ""
+"Como exemplo, considere o patch para o man:named[8]. Leia o aviso e pegue o "
+"arquivo necessário em link:https://www.FreeBSD.org/security/advisories/["
+"Avisos de Segurança do FreeBSD]. Mais informações sobre a interpretação do "
+"aviso podem ser encontradas no extref:{handbook}[Handbook do FreeBSD, "
+"security-advisories]."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:436
+msgid ""
+"In the https://security.freebsd.org/advisories/FreeBSD-SA-09:12.bind."
+"asc[security brief], this advisory is called `SA-09:12.bind`. After "
+"downloading the file, it is required to rename the file to an appropriate "
+"patch level. It is suggested to keep this consistent with official FreeBSD "
+"patch levels, but its name may be freely chosen. For this build, let us "
+"follow the currently established practice of FreeBSD and call this `p7`. "
+"Rename the file:"
+msgstr ""
+"No https://security.freebsd.org/advisories/FreeBSD-SA-09:12.bind.asc[informe "
+"de segurança], este aviso é chamado de `SA-09:12.bind`. Após o download do "
+"arquivo, é necessário renomeá-lo para um nível de patch apropriado. É "
+"sugerido manter isso consistente com os níveis de patch oficiais do FreeBSD, "
+"mas seu nome pode ser escolhido livremente . Para esta compilação, vamos "
+"seguir a prática atualmente estabelecida do FreeBSD e chamá-la de `p7`. "
+"Renomeie o arquivo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:440
+#, no-wrap
+msgid "% cd /usr/local/freebsd-update-server/patches/7.1-RELEASE/; mv bind.patch 7-SA-09:12.bind\n"
+msgstr ""
+"% cd /usr/local/freebsd-update-server/patches/7.1-RELEASE/; mv bind.patch "
+"7-SA-09:12.bind\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:446
+msgid ""
+"When running a patch level build, it is assumed that previous patches are in "
+"place. When a patch build is run, it will run all patches contained in the "
+"patch directory."
+msgstr ""
+"Ao executar uma compilação de nível de patch, presume-se que os patches "
+"anteriores estão em vigor. Quando uma compilação de patch é executada, ela "
+"executará todos os patches contidos no diretório de patch."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:448
+msgid ""
+"There can be custom patches added to any build. Use the number zero, or any "
+"other number."
+msgstr ""
+"Podem ser adicionados patches personalizados a qualquer compilação. Use o "
+"número zero ou qualquer outro número."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:454
+msgid ""
+"It is up to the administrator of the FreeBSD Update Server to take "
+"appropriate measures to verify the authenticity of every patch."
+msgstr ""
+"Cabe ao administrador do Servidor de Atualização do FreeBSD tomar as medidas "
+"apropriadas para verificar a autenticidade de cada patch."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:458
+msgid ""
+"At this point, a _diff_ is ready to be built. The software checks first to "
+"see if a [.filename]#scripts/init.sh# has been run on the respective release "
+"prior to running the diff build."
+msgstr ""
+"Neste ponto, um _diff_ está pronto para ser compilado. O software verifica "
+"primeiro se um [.filename]#scripts/init.sh# foi executado no respectivo "
+"release antes de executar a compilação do _diff_."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:463
+#, no-wrap
+msgid ""
+"# cd /usr/local/freebsd-update-server\n"
+"# sh scripts/diff.sh amd64 7.1-RELEASE 7\n"
+msgstr ""
+"# cd /usr/local/freebsd-update-server\n"
+"# sh scripts/diff.sh amd64 7.1-RELEASE 7\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:466
+msgid "What follows is a sample of a _differential_ build run."
+msgstr "A seguir, segue um exemplo de execução de compilação _diferencial_."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:540
+#, no-wrap
+msgid ""
+"# sh -e scripts/diff.sh amd64 7.1-RELEASE 7\n"
+"Wed Aug 26 10:09:59 PDT 2009 Extracting world+src for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 17:10:25 UTC 2009 Building world for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 18:05:11 UTC 2009 Distributing world for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 18:06:16 UTC 2009 Building and distributing kernels for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 18:17:50 UTC 2009 Constructing world components for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 18:18:02 UTC 2009 Distributing source for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 11:19:23 PDT 2009 Moving components into staging area for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 11:19:37 PDT 2009 Extracting extra docs for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 11:19:42 PDT 2009 Indexing world0 for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 11:23:02 PDT 2009 Extracting world+src for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Thu Sep 30 18:23:29 UTC 2010 Building world for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Thu Sep 30 19:18:15 UTC 2010 Distributing world for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Thu Sep 30 19:19:18 UTC 2010 Building and distributing kernels for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Thu Sep 30 19:30:52 UTC 2010 Constructing world components for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Thu Sep 30 19:31:03 UTC 2010 Distributing source for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Thu Sep 30 12:32:25 PDT 2010 Moving components into staging area for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 12:32:39 PDT 2009 Extracting extra docs for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 12:32:43 PDT 2009 Indexing world1 for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 12:35:54 PDT 2009 Locating build stamps for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 12:36:58 PDT 2009 Reverting changes due to build stamps for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 12:37:14 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 12:37:14 PDT 2009 Preparing to copy files into staging area for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 12:37:15 PDT 2009 Copying data files into staging area for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 12:43:23 PDT 2009 Copying metadata files into staging area for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 12:43:25 PDT 2009 Constructing metadata index and tag for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"...\n"
+"Files found which include build stamps:\n"
+"kernel|generic|/GENERIC/hptrr.ko\n"
+"kernel|generic|/GENERIC/kernel\n"
+"world|base|/boot/loader\n"
+"world|base|/boot/pxeboot\n"
+"world|base|/etc/mail/freebsd.cf\n"
+"world|base|/etc/mail/freebsd.submit.cf\n"
+"world|base|/etc/mail/sendmail.cf\n"
+"world|base|/etc/mail/submit.cf\n"
+"world|base|/lib/libcrypto.so.5\n"
+"world|base|/usr/bin/ntpq\n"
+"world|base|/usr/include/osreldate.h\n"
+"world|base|/usr/lib/libalias.a\n"
+"world|base|/usr/lib/libalias_cuseeme.a\n"
+"world|base|/usr/lib/libalias_dummy.a\n"
+"world|base|/usr/lib/libalias_ftp.a\n"
+"...\n"
+"Values of build stamps, excluding library archive headers:\n"
+"v1.2 (Aug 26 2009 18:13:46)\n"
+"v1.2 (Aug 26 2009 18:11:44)\n"
+"@()FreeBSD 7.1-RELEASE-p7 0: Wed Aug 26 18:11:50 UTC 2009\n"
+"FreeBSD 7.1-RELEASE-p7 0: Wed Aug 26 18:11:50 UTC 2009\n"
+" root@server.myhost.com:/usr/obj/usr/src/sys/GENERIC\n"
+"7.1-RELEASE-p7\n"
+"Wed Aug 26 17:29:15 UTC 2009\n"
+"Wed Aug 26 17:29:15 UTC 2009\n"
+" built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009\n"
+" built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009\n"
+" built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009\n"
+" built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009\n"
+"Wed Aug 26 17:20:39 UTC 2009\n"
+"ntpq 4.2.4p5-a Wed Aug 26 17:29:42 UTC 2009 (1)\n"
+" * Copyright (c) 1992-2009 The FreeBSD Project.\n"
+"Wed Aug 26 17:20:39 UTC 2009\n"
+"Wed Aug 26 17:29:30 UTC 2009\n"
+"Aug 26 2009\n"
+"ntpd 4.2.4p5-a Wed Aug 26 17:29:41 UTC 2009 (1)\n"
+"ntpdate 4.2.4p5-a Wed Aug 26 17:29:42 UTC 2009 (1)\n"
+"ntpdc 4.2.4p5-a Wed Aug 26 17:29:42 UTC 2009 (1)\n"
+"Wed Aug 26 17:55:02 UTC 2009\n"
+"Wed Aug 26 17:55:02 UTC 2009\n"
+"Wed Aug 26 17:55:02 UTC 2009\n"
+"Wed Aug 26 17:20:39 UTC 2009\n"
+"...\n"
+msgstr ""
+"# sh -e scripts/diff.sh amd64 7.1-RELEASE 7\n"
+"Wed Aug 26 10:09:59 PDT 2009 Extracting world+src for FreeBSD/amd64 7."
+"1-RELEASE-p7\n"
+"Wed Aug 26 17:10:25 UTC 2009 Building world for FreeBSD/amd64 7.1-RELEASE-"
+"p7\n"
+"Wed Aug 26 18:05:11 UTC 2009 Distributing world for FreeBSD/amd64 7."
+"1-RELEASE-p7\n"
+"Wed Aug 26 18:06:16 UTC 2009 Building and distributing kernels for FreeBSD/"
+"amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 18:17:50 UTC 2009 Constructing world components for FreeBSD/amd64 "
+"7.1-RELEASE-p7\n"
+"Wed Aug 26 18:18:02 UTC 2009 Distributing source for FreeBSD/amd64 7."
+"1-RELEASE-p7\n"
+"Wed Aug 26 11:19:23 PDT 2009 Moving components into staging area for FreeBSD/"
+"amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 11:19:37 PDT 2009 Extracting extra docs for FreeBSD/amd64 7."
+"1-RELEASE-p7\n"
+"Wed Aug 26 11:19:42 PDT 2009 Indexing world0 for FreeBSD/amd64 7.1-RELEASE-"
+"p7\n"
+"Wed Aug 26 11:23:02 PDT 2009 Extracting world+src for FreeBSD/amd64 7."
+"1-RELEASE-p7\n"
+"Thu Sep 30 18:23:29 UTC 2010 Building world for FreeBSD/amd64 7.1-RELEASE-"
+"p7\n"
+"Thu Sep 30 19:18:15 UTC 2010 Distributing world for FreeBSD/amd64 7."
+"1-RELEASE-p7\n"
+"Thu Sep 30 19:19:18 UTC 2010 Building and distributing kernels for FreeBSD/"
+"amd64 7.1-RELEASE-p7\n"
+"Thu Sep 30 19:30:52 UTC 2010 Constructing world components for FreeBSD/amd64 "
+"7.1-RELEASE-p7\n"
+"Thu Sep 30 19:31:03 UTC 2010 Distributing source for FreeBSD/amd64 7."
+"1-RELEASE-p7\n"
+"Thu Sep 30 12:32:25 PDT 2010 Moving components into staging area for FreeBSD/"
+"amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 12:32:39 PDT 2009 Extracting extra docs for FreeBSD/amd64 7."
+"1-RELEASE-p7\n"
+"Wed Aug 26 12:32:43 PDT 2009 Indexing world1 for FreeBSD/amd64 7.1-RELEASE-"
+"p7\n"
+"Wed Aug 26 12:35:54 PDT 2009 Locating build stamps for FreeBSD/amd64 7."
+"1-RELEASE-p7\n"
+"Wed Aug 26 12:36:58 PDT 2009 Reverting changes due to build stamps for "
+"FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 12:37:14 PDT 2009 Cleaning staging area for FreeBSD/amd64 7."
+"1-RELEASE-p7\n"
+"Wed Aug 26 12:37:14 PDT 2009 Preparing to copy files into staging area for "
+"FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 12:37:15 PDT 2009 Copying data files into staging area for "
+"FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 12:43:23 PDT 2009 Copying metadata files into staging area for "
+"FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 12:43:25 PDT 2009 Constructing metadata index and tag for FreeBSD/"
+"amd64 7.1-RELEASE-p7\n"
+"...\n"
+"Files found which include build stamps:\n"
+"kernel|generic|/GENERIC/hptrr.ko\n"
+"kernel|generic|/GENERIC/kernel\n"
+"world|base|/boot/loader\n"
+"world|base|/boot/pxeboot\n"
+"world|base|/etc/mail/freebsd.cf\n"
+"world|base|/etc/mail/freebsd.submit.cf\n"
+"world|base|/etc/mail/sendmail.cf\n"
+"world|base|/etc/mail/submit.cf\n"
+"world|base|/lib/libcrypto.so.5\n"
+"world|base|/usr/bin/ntpq\n"
+"world|base|/usr/include/osreldate.h\n"
+"world|base|/usr/lib/libalias.a\n"
+"world|base|/usr/lib/libalias_cuseeme.a\n"
+"world|base|/usr/lib/libalias_dummy.a\n"
+"world|base|/usr/lib/libalias_ftp.a\n"
+"...\n"
+"Values of build stamps, excluding library archive headers:\n"
+"v1.2 (Aug 26 2009 18:13:46)\n"
+"v1.2 (Aug 26 2009 18:11:44)\n"
+"@()FreeBSD 7.1-RELEASE-p7 0: Wed Aug 26 18:11:50 UTC 2009\n"
+"FreeBSD 7.1-RELEASE-p7 0: Wed Aug 26 18:11:50 UTC 2009\n"
+" root@server.myhost.com:/usr/obj/usr/src/sys/GENERIC\n"
+"7.1-RELEASE-p7\n"
+"Wed Aug 26 17:29:15 UTC 2009\n"
+"Wed Aug 26 17:29:15 UTC 2009\n"
+" built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009\n"
+" built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009\n"
+" built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009\n"
+" built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009\n"
+"Wed Aug 26 17:20:39 UTC 2009\n"
+"ntpq 4.2.4p5-a Wed Aug 26 17:29:42 UTC 2009 (1)\n"
+" * Copyright (c) 1992-2009 The FreeBSD Project.\n"
+"Wed Aug 26 17:20:39 UTC 2009\n"
+"Wed Aug 26 17:29:30 UTC 2009\n"
+"Aug 26 2009\n"
+"ntpd 4.2.4p5-a Wed Aug 26 17:29:41 UTC 2009 (1)\n"
+"ntpdate 4.2.4p5-a Wed Aug 26 17:29:42 UTC 2009 (1)\n"
+"ntpdc 4.2.4p5-a Wed Aug 26 17:29:42 UTC 2009 (1)\n"
+"Wed Aug 26 17:55:02 UTC 2009\n"
+"Wed Aug 26 17:55:02 UTC 2009\n"
+"Wed Aug 26 17:55:02 UTC 2009\n"
+"Wed Aug 26 17:20:39 UTC 2009\n"
+"...\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:543
+msgid "Updates are printed, and approval is requested."
+msgstr "As atualizações são impressas e a aprovação é solicitada."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:562
+#, no-wrap
+msgid ""
+"New updates:\n"
+"kernel|generic|/GENERIC/kernel.symbols|f|0|0|0555|0|7c8dc176763f96ced0a57fc04e7c1b8d793f27e006dd13e0b499e1474ac47e10|\n"
+"kernel|generic|/GENERIC/kernel|f|0|0|0555|0|33197e8cf15bbbac263d17f39c153c9d489348c2c534f7ca1120a1183dec67b1|\n"
+"kernel|generic|/|d|0|0|0755|0||\n"
+"src|base|/|d|0|0|0755|0||\n"
+"src|bin|/|d|0|0|0755|0||\n"
+"src|cddl|/|d|0|0|0755|0||\n"
+"src|contrib|/contrib/bind9/bin/named/update.c|f|0|10000|0644|0|4d434abf0983df9bc47435670d307fa882ef4b348ed8ca90928d250f42ea0757|\n"
+"src|contrib|/contrib/bind9/lib/dns/openssldsa_link.c|f|0|10000|0644|0|c6805c39f3da2a06dd3f163f26c314a4692d4cd9a2d929c0acc88d736324f550|\n"
+"src|contrib|/contrib/bind9/lib/dns/opensslrsa_link.c|f|0|10000|0644|0|fa0f7417ee9da42cc8d0fd96ad24e7a34125e05b5ae075bd6e3238f1c022a712|\n"
+"...\n"
+"FreeBSD/amd64 7.1-RELEASE update build complete. Please review\n"
+"the list of build stamps printed above and the list of updated\n"
+"files to confirm that they look sensible, then run\n"
+" sh -e approve.sh amd64 7.1-RELEASE\n"
+"to sign the build.\n"
+msgstr ""
+"New updates:\n"
+"kernel|generic|/GENERIC/kernel.symbols|f|0|0|0555|0|7c8dc176763f96ced0a57fc04"
+"e7c1b8d793f27e006dd13e0b499e1474ac47e10|\n"
+"kernel|generic|/GENERIC/kernel|f|0|0|0555|0|33197e8cf15bbbac263d17f39c153c9d4"
+"89348c2c534f7ca1120a1183dec67b1|\n"
+"kernel|generic|/|d|0|0|0755|0||\n"
+"src|base|/|d|0|0|0755|0||\n"
+"src|bin|/|d|0|0|0755|0||\n"
+"src|cddl|/|d|0|0|0755|0||\n"
+"src|contrib|/contrib/bind9/bin/named/update.c|f|0|10000|0644|0|4d434abf0983df"
+"9bc47435670d307fa882ef4b348ed8ca90928d250f42ea0757|\n"
+"src|contrib|/contrib/bind9/lib/dns/openssldsa_link.c|f|0|10000|0644|0|c6805c3"
+"9f3da2a06dd3f163f26c314a4692d4cd9a2d929c0acc88d736324f550|\n"
+"src|contrib|/contrib/bind9/lib/dns/opensslrsa_link.c|f|0|10000|0644|0|fa0f741"
+"7ee9da42cc8d0fd96ad24e7a34125e05b5ae075bd6e3238f1c022a712|\n"
+"...\n"
+"FreeBSD/amd64 7.1-RELEASE update build complete. Please review\n"
+"the list of build stamps printed above and the list of updated\n"
+"files to confirm that they look sensible, then run\n"
+" sh -e approve.sh amd64 7.1-RELEASE\n"
+"to sign the build.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:565
+msgid "Follow the same process as noted before for approving a build:"
+msgstr ""
+"Siga o mesmo processo mencionado anteriormente para aprovar uma compilação:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:574
+#, no-wrap
+msgid ""
+"# sh -e scripts/approve.sh amd64 7.1-RELEASE\n"
+"Wed Aug 26 12:50:06 PDT 2009 Signing build for FreeBSD/amd64 7.1-RELEASE\n"
+"Wed Aug 26 12:50:06 PDT 2009 Copying files to patch source directories for FreeBSD/amd64 7.1-RELEASE\n"
+"Wed Aug 26 12:50:06 PDT 2009 Copying files to upload staging area for FreeBSD/amd64 7.1-RELEASE\n"
+"Wed Aug 26 12:50:07 PDT 2009 Updating databases for FreeBSD/amd64 7.1-RELEASE\n"
+"Wed Aug 26 12:50:07 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.1-RELEASE\n"
+msgstr ""
+"# sh -e scripts/approve.sh amd64 7.1-RELEASE\n"
+"Wed Aug 26 12:50:06 PDT 2009 Signing build for FreeBSD/amd64 7.1-RELEASE\n"
+"Wed Aug 26 12:50:06 PDT 2009 Copying files to patch source directories for "
+"FreeBSD/amd64 7.1-RELEASE\n"
+"Wed Aug 26 12:50:06 PDT 2009 Copying files to upload staging area for "
+"FreeBSD/amd64 7.1-RELEASE\n"
+"Wed Aug 26 12:50:07 PDT 2009 Updating databases for FreeBSD/amd64 7.1-"
+"RELEASE\n"
+"Wed Aug 26 12:50:07 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.1-"
+"RELEASE\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:580
+#, no-wrap
+msgid ""
+"The FreeBSD/amd64 7.1-RELEASE update build has been signed and is\n"
+"ready to be uploaded. Remember to run\n"
+" sh -e umountkey.sh\n"
+"to unmount the decrypted key once you have finished signing all\n"
+"the new builds.\n"
+msgstr ""
+"The FreeBSD/amd64 7.1-RELEASE update build has been signed and is\n"
+"ready to be uploaded. Remember to run\n"
+" sh -e umountkey.sh\n"
+"to unmount the decrypted key once you have finished signing all\n"
+"the new builds.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:583
+msgid "After approving the build, upload the software:"
+msgstr "Depois de aprovar a compilação, faça o upload do software:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:588
+#, no-wrap
+msgid ""
+"# cd /usr/local/freebsd-update-server\n"
+"# sh scripts/upload.sh amd64 7.1-RELEASE\n"
+msgstr ""
+"# cd /usr/local/freebsd-update-server\n"
+"# sh scripts/upload.sh amd64 7.1-RELEASE\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:591
+msgid ""
+"For reference, the entire run of link:../../source/articles/freebsd-update-"
+"server/diff.txt[diff.sh] is attached."
+msgstr ""
+"Para referência, toda a execução do link:../../source/articles/"
+"freebsd-update-server/diff.txt[diff.sh] está anexada."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:593
+#, no-wrap
+msgid "Tips"
+msgstr "Dicas"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:596
+msgid ""
+"If a custom release is built using the native `make release` extref:{releng}"
+"[procedure, release-build], freebsd-update-server code will work from your "
+"release. As an example, a release without ports or documentation can be "
+"built by clearing functionality pertaining to documentation subroutines "
+"`findextradocs ()`, `addextradocs ()` and altering the download location in "
+"`fetchiso ()`, respectively, in [.filename]#scripts/build.subr#. As a last "
+"step, change the man:sha256[1] hash in [.filename]#build.conf# under your "
+"respective release and architecture and you are ready to build off your "
+"custom release."
+msgstr ""
+"Se um release personalizado for compilado usando o extref:{releng}["
+"procedimento, release-build] nativo `make release`, o código do freebsd-"
+"update-server funcionará a partir do seu release. Como exemplo, um release "
+"sem ports ou documentação pode ser criado limpando a funcionalidade "
+"referente às sub-rotinas de documentação `findextradocs ()`, `addextradocs "
+"()` e alterando o local de download em `fetchiso ()`, respectivamente, em [."
+"filename]#scripts/build.subr#. Como último passo, altere a chave "
+"man:sha256[1] em [.filename]#build.conf# no seu respectivo release e "
+"arquitetura e você estará pronto para compilar o seu release personalizado."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:607
+#, no-wrap
+msgid ""
+"# Compare ${WORKDIR}/release and ${WORKDIR}/$1, identify which parts\n"
+"# of the world|doc subcomponent are missing from the latter, and\n"
+"# build a tarball out of them.\n"
+"findextradocs () {\n"
+"}\n"
+"# Add extra docs to ${WORKDIR}/$1\n"
+"addextradocs () { \n"
+"}\n"
+msgstr ""
+"# Compare ${WORKDIR}/release and ${WORKDIR}/$1, identify which parts\n"
+"# of the world|doc subcomponent are missing from the latter, and\n"
+"# build a tarball out of them.\n"
+"findextradocs () {\n"
+"}\n"
+"# Add extra docs to ${WORKDIR}/$1\n"
+"addextradocs () { \n"
+"}\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:610
+msgid ""
+"Adding `-j _NUMBER_` flags to `buildworld` and `obj` targets in the [."
+"filename]#scripts/build.subr# script may speed up processing depending on "
+"the hardware used, however it is not necessary. Using these flags in other "
+"targets is not recommended, as it may cause the build to become unreliable."
+msgstr ""
+"Adicionar flags `-j _NUMERO_` para os alvos `buildworld` e `obj` no script [."
+"filename]#scripts/build.subr# pode acelerar o processamento, dependendo do "
+"hardware utilizado, no entanto, não é necessário. Usar esses flags em outros "
+"alvos não é recomendado, pois pode fazer com que a compilação se torne pouco "
+"confiável."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:622
+#, no-wrap
+msgid ""
+" # Build the world\n"
+"\t\t log \"Building world\"\n"
+"\t\t cd /usr/src &&\n"
+"\t\t make -j 2 ${COMPATFLAGS} buildworld 2>&1\n"
+"\t\t# Distribute the world\n"
+"\t\t log \"Distributing world\"\n"
+"\t\t cd /usr/src/release &&\n"
+"\t\t make -j 2 obj &&\n"
+"\t\t make ${COMPATFLAGS} release.1 release.2 2>&1\n"
+msgstr ""
+" # Build the world\n"
+"\t\t log \"Building world\"\n"
+"\t\t cd /usr/src &&\n"
+"\t\t make -j 2 ${COMPATFLAGS} buildworld 2>&1\n"
+"\t\t# Distribute the world\n"
+"\t\t log \"Distributing world\"\n"
+"\t\t cd /usr/src/release &&\n"
+"\t\t make -j 2 obj &&\n"
+"\t\t make ${COMPATFLAGS} release.1 release.2 2>&1\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:625
+msgid ""
+"Create an appropriate extref:{handbook}[DNS, network-dns] SRV record for the "
+"update server, and put others behind it with variable weights. Using this "
+"facility will provide update mirrors, however this tip is not necessary "
+"unless you wish to provide a redundant service."
+msgstr ""
+"Crie um registro extref:{handbook}[DNS, network-dns] SRV apropriado para o "
+"servidor de atualização e coloque outros atrás dele com pesos variáveis. O "
+"uso dessa facilidade fornecerá espelhos de atualização, no entanto, essa "
+"dica não é necessária, a menos que você deseje fornecer um serviço "
+"redundante."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:631
+#, no-wrap
+msgid ""
+"_http._tcp.update.myserver.com.\t\tIN SRV 0 2 80 host1.myserver.com.\n"
+"\t\t\t\t\tIN SRV 0 1 80 host2.myserver.com.\n"
+"\t\t\t\t\tIN SRV 0 0 80 host3.myserver.com.\n"
+msgstr ""
+"_http._tcp.update.myserver.com.\t\tIN SRV 0 2 80 host1.myserver.com.\n"
+"\t\t\t\t\tIN SRV 0 1 80 host2.myserver.com.\n"
+"\t\t\t\t\tIN SRV 0 0 80 host3.myserver.com.\n"
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/geom-class/_index.adoc b/documentation/content/pt-br/articles/geom-class/_index.adoc
index e108fc373c..f05d77126f 100644
--- a/documentation/content/pt-br/articles/geom-class/_index.adoc
+++ b/documentation/content/pt-br/articles/geom-class/_index.adoc
@@ -1,8 +1,11 @@
---
-title: Escrevendo uma classe GEOM
authors:
- - author: Ivan Voras
+ -
+ author: 'Ivan Voras'
email: ivoras@FreeBSD.org
+description: 'Um guia sobre os internals do GEOM e sobre como escrever sua própria classe GEOM'
+tags: ["GEOM", "kernel", "modules", "FreeBSD"]
+title: 'Escrevendo uma classe GEOM'
trademarks: ["freebsd", "intel", "general"]
---
@@ -40,7 +43,7 @@ endif::[]
[.abstract-title]
Resumo
-Este texto documenta alguns pontos de partida no desenvolvimento de classes GEOM e módulos do kernel em geral. Supõe-se que o leitor esteja familiarizado com a programação C do userland.
+Este texto documenta alguns pontos de partida no desenvolvimento de classes GEOM e módulos de kernel em geral. Pressupõe-se que o leitor esteja familiarizado com a programação de espaço de usuário em C.
'''
@@ -52,27 +55,27 @@ toc::[]
[[intro-docs]]
=== Documentação
-A documentação sobre programação do kernel é escassa - é uma das poucas áreas na qual não há quase nada de tutoriais amigáveis, e a frase "usa a fonte!" realmente é verdadeira. No entanto, existem alguns pedaços (alguns deles seriamente desatualizados) flutuando por ai e que devem ser estudados antes de começar a codificar:
+A documentação sobre programação de kernel é escassa - é uma das poucas áreas em que quase não há tutoriais amigáveis, e a frase "use o código fonte!" realmente é verdadeira. No entanto, existem alguns fragmentos (alguns deles seriamente desatualizados) circulando que devem ser estudados antes de começar a codificar:
-* O extref:{developers-handbook}[Manual do Desenvolvedor do FreeBSD] - parte do projeto de documentação, ele não contém nenhum informação específica para a programação do kernel, mas possui algumas informações gerais úteis.
-* O extref:{arch-handbook}[Manual de Arquitetura do FreeBSD] - também do projeto de documentação, contém descrições de várias instalações e procedimentos de baixo nível. O capítulo mais importante é o 13, extref:{arch-handbook}[Escrevendo drivers de dispositivo FreeBSD, driverbasics].
-* A seção Blueprints do site do http://www.freebsddiary.org[FreeBSD Diary] contém vários artigos interessantes sobre os recursos do kernel.
-* As páginas de manual na seção 9 - para documentação importante sobre as funções do kernel.
-* A página man man:geom[4] e os http://phk.freebsd.dk/pubs/[Slides sobre o GEOM de PHK] - para uma introdução geral do subsistema GEOM.
-* Páginas de manual man:g_bio[9], man:g_event[9], man:g_data[9], man:g_geom[9], man:g_provider[9] man:g_consumer[9], man:g_access[9] & outros ligados a partir deles, para documentação sobre funcionalidades específicas.
-* A página do manual man:style[9] - para documentação sobre as convenções de estilo de codificação que devem ser seguidas para qualquer código que se destine a ser incorporado à Árvore do Subversion do FreeBSD.
+* O extref:{developers-handbook}[Handbook do Desenvolvedor do FreeBSD] - parte do projeto de documentação, não contém nada específico sobre programação do kernel, mas sim algumas informações úteis em geral.
+* O extref:{arch-handbook}[Handbook de Arquitetura do FreeBSD] - também do projeto de documentação, contém descrições de várias instalações e procedimentos de baixo nível. O capítulo mais importante é o 13, extref:{arch-handbook}[Escrevendo drivers de dispositivos FreeBSD, driverbasics].
+* A seção Blueprints do site http://www.freebsddiary.org contém vários artigos interessantes sobre as facilidades do kernel.
+* As páginas de manual da seção 9 - para documentação importante sobre as funções do kernel.
+* A página de manual man:geom[4] e os slides sobre o GEOM do PHK em http://phk.freebsd.dk/pubs/ - para uma introdução geral ao subsistema GEOM.
+* As páginas de manual man:g_bio[9], man:g_event[9], man:g_data[9], man:g_geom[9], man:g_provider[9], man:g_consumer[9], man:g_access[9] e outras vinculadas a elas, para documentação sobre funcionalidades específicas.
+* A página de manual man:style[9] - para documentação sobre as convenções de estilo de codificação que devem ser seguidas para qualquer código que seja commitado para a árvore do FreeBSD.
[[prelim]]
== Preliminares
-A melhor maneira de fazer o desenvolvimento do kernel é ter (pelo menos) dois computadores separados. Um deles conteria o ambiente de desenvolvimento e o código fonte, e o outro seria usado para testar o código recém escrito, inicializando por meio da rede e montando seu sistema de arquivo a partir do primeiro computador. Desta forma, se o novo código contiver erros e travar a máquina, isso não irá atrapalhar o código fonte (e nem nenhum outros dado "vivo"). O segundo sistema nem sequer requer um monitor adequado. Em vez disso, ele pode ser conectado por meio de um cabo serial ou KVM ao primeiro computador.
+A melhor maneira de desenvolver para o kernel é ter (pelo menos) dois computadores separados. Um deles conteria o ambiente de desenvolvimento e as fontes, e o outro seria usado para testar o código recém-escrito por meio do boot e montagem de sistemas de arquivos por rede do primeiro. Dessa forma, se o novo código contiver erros e travar a máquina, ele não afetará as fontes (e outros dados "ao vivo"). O segundo sistema nem mesmo precisa de uma tela adequada. Em vez disso, ele pode ser conectado com um cabo serial ou KVM para o primeiro.
-Mas, como nem todo mundo tem dois ou mais computadores à mão, há algumas coisas que podem ser feitas para preparar um sistema "vivo " para desenvolver código para o kernel. Esta configuração também é aplicável para desenvolvimento em uma máquina virtual criada com o http://www.vmware.com/[VMWare] ou com o http://www.qemu.org/[QEmu] (a próxima melhor coisa depois de uma máquina de desenvolvimento dedicada).
+No entanto, como nem todo mundo tem dois ou mais computadores disponíveis, existem algumas coisas que podem ser feitas para preparar um sistema "ao vivo" para o desenvolvimento de código do kernel. Essa configuração também é aplicável para desenvolvimento em uma máquina virtual http://www.vmware.com/[VMWare] ou http://www.qemu.org/[QEmu] (a próxima melhor opção depois de uma máquina de desenvolvimento dedicada).
[[prelim-system]]
=== Modificando um sistema para desenvolvimento
-Para qualquer programação do kernel, um kernel com a opção `INVARIANTS` ativada é obrigatório. Então, digite estas linhas no seu arquivo de configuração do kernel:
+Para qualquer programação de kernel, é essencial ter um kernel com `INVARIANTS` ativado. Portanto, adicione as seguintes opções no arquivo de configuração do kernel:
[.programlisting]
....
@@ -80,7 +83,7 @@ options INVARIANT_SUPPORT
options INVARIANTS
....
-Para ter um maior nível de depuração, você também devrá incluir o suporte ao WITNESS, o qual irá alertá-lo sobre erros relacionados a bloqueios (locking):
+Para obter mais depuração, você também deve incluir o suporte a WITNESS, que alertará sobre erros de bloqueio:
[.programlisting]
....
@@ -88,16 +91,16 @@ options WITNESS_SUPPORT
options WITNESS
....
-Para depurar despejos de memória, é necessário um kernel com símbolos de depuração:
+Para depurar despejos de falhas (crash dumps), é necessário um kernel com símbolos de depuração:
[.programlisting]
....
makeoptions DEBUG=-g
....
-Com a maneira usual de instalar o kernel (`make installkernel`) o kernel de depuração não será instalado automaticamente. Ele é chamado de [.filename]#kernel.debug# e fica localizado em [.filename]#/usr/obj/usr/src/sys/KERNELNAME/#. Por conveniência, deve ser copiado para [.filename]#/boot/kernel/#.
+Com a maneira usual de instalar o kernel (`make installkernel`), o kernel de depuração não será instalado automaticamente. Ele é chamado de [.filename]#kernel.debug# e fica localizado em [.filename]#/usr/obj/usr/src/sys/NOME_DO_KERNEL/#. Por conveniência, ele deve ser copiado para [.filename]#/boot/kernel/#.
-Outra conveniência é habilitar o depurador do kernel para que você possa examinar o panic do kernel quando isso acontece. Para isso, insira as seguintes linhas no seu arquivo de configuração do kernel:
+Outra conveniência é habilitar o depurador do kernel para que você possa examinar um kernel panic quando ele ocorrer. Para isso, adicione as seguintes linhas no arquivo de configuração do kernel:
[.programlisting]
....
@@ -113,7 +116,7 @@ Para que isso funcione, você pode precisar definir um sysctl (se ele não estiv
debug.debugger_on_panic=1
....
-Kernel panics acontecerão, portanto, deve-se ter cuidado com o cache do sistema de arquivos. Em particular, ter o softupdates habilitado pode significar que a versão mais recente do arquivo pode ser perdida se um panic ocorrer antes de ser committed para armazenamento. Desativar o softupdates produz um grande impacto na performance e ainda não garante a consistência dos dados. A montagem do sistema de arquivos com a opção "sync" é necessária para isso. Para um compromisso, os atrasos do cache de softupdates podem ser encurtados. Existem três sysctl's que são úteis para isso (melhor ser configurado em [.filename]#/etc/sysctl.conf#):
+Panics do kernel podem acontecer, portanto, é preciso ter cuidado com o cache do sistema de arquivos. Em particular, ter softupdates pode significar que a versão mais recente de um arquivo pode ser perdida se ocorrer um panic antes que seja gravada no armazenamento. Desabilitar o softupdates implica em uma grande perda de desempenho e ainda não garante a consistência dos dados. É necessário montar o sistema de arquivos com a opção "sync" para garantir isso. Como um compromisso, os atrasos do cache do softupdates podem ser encurtados. Existem três sysctl que são úteis para isso (melhor configurados em [.filename]#/etc/sysctl.conf#):
[.programlisting]
....
@@ -124,7 +127,7 @@ kern.metadelay=3
Os números representam segundos.
-Para depurar os panics do kernel, os dumps do núcleo do kernel são necessários. Como um kernel panic pode tornar os sistemas de arquivos inutilizáveis, esse despejo de memória é primeiramente gravado em uma partição bruta. Normalmente, esta é a partição de swap. Essa partição deve ser pelo menos tão grande quanto a RAM física na máquina. Na próxima inicialização, o despejo é copiado para um arquivo normal. Isso acontece depois que os sistemas de arquivos são verificados e montados e antes que o swap seja ativado. Isto é controlado com duas variáveis [.filename]#/etc/rc.conf#:
+Para depurar panics do kernel, são necessários os despejos de núcleo do kernel. Como um kernel panic pode tornar os sistemas de arquivos inutilizáveis, este despejo de falhas é primeiro gravado em uma partição raw. Geralmente, isso é feito na partição de swap. Esta partição deve ter pelo menos o tamanho da RAM física da máquina. No próximo boot, o despejo é copiado para um arquivo regular. Isso acontece após a verificação e montagem dos sistemas de arquivos e antes que o swap seja ativado. Isso é controlado com duas variáveis do arquivo [.filename]#/etc/rc.conf#:
[.programlisting]
....
@@ -132,35 +135,35 @@ dumpdev="/dev/ad0s4b"
dumpdir="/usr/core
....
-A variável `dumpdev` especifica a partição de swap e `dumpdir` informa ao sistema onde no sistema de arquivos ele deverá realocar o dump principal na reinicialização.
+A variável `dumpdev` especifica a partição de swap e `dumpdir` informa ao sistema onde no sistema de arquivos realocar o core dump no reboot.
-A gravação de core dumps é lenta e leva muito tempo, então se você tiver muita memória (>256M) e muitos panics, pode ser frustrante sentar e esperar enquanto isso é feito (duas vezes - primeiro para gravar para o swap, depois para realocá-lo para o sistema de arquivos). É conveniente limitar a quantidade de RAM que o sistema usará através de uma variável do [.filename]#/boot/loader.conf#:
+Gravar o core dump do kernel é lento e leva muito tempo, portanto, se você tiver muita memória (>256 MB) e muitos panics, pode ser frustrante esperar enquanto isso é feito (duas vezes - primeiro para gravá-lo na troca, depois para realocá-lo no sistema de arquivos). É conveniente, portanto, limitar a quantidade de RAM que o sistema usará por meio de um ajuste no [.filename]#/boot/loader.conf#:
[.programlisting]
....
hw.physmem="256M"
....
-Se os panics são frequentes e os sistemas de arquivos são grandes (ou você simplesmente não confia em softupdates + background fsck), é aconselhável desligar o fsck em background através da variável [.filename]#/etc/rc.conf#:
+Se os panics forem frequentes e os sistemas de arquivos forem grandes (ou se você simplesmente não confiar no softupdates + fsck em segundo plano), é aconselhável desativar o fsck em segundo plano por meio da seguinte variável no arquivo [.filename]#/etc/rc.conf#:
[.programlisting]
....
background_fsck="NO"
....
-Dessa forma, os sistemas de arquivos sempre serão verificados quando necessário. Observe que, com o fsck em segundo plano, um novo panic pode acontecer enquanto ele está verificando os discos. Novamente, a maneira mais segura é não ter muitos sistemas de arquivos locais, usando o outro computador como um servidor NFS.
+Dessa forma, os sistemas de arquivos serão sempre verificados quando necessário. Observe que, com o fsck em segundo plano, um novo panic pode ocorrer enquanto os discos estão sendo verificados. Novamente, a maneira mais segura é não ter muitos sistemas de arquivos locais, usando outro computador como um servidor NFS.
[[prelim-starting]]
=== Começando o projeto
-Para o propósito de criar uma nova classe GEOM, um subdiretório vazio deve ser criado sob um diretório arbitrário acessível pelo usuário. Você não precisa criar o diretório do módulo em [.filename]#/usr/src#.
+Para criar uma nova classe GEOM, um subdiretório vazio deve ser criado em um diretório arbitrário acessível pelo usuário. Você não precisa criar o diretório do módulo em [.filename]#/usr/src#.
[[prelim-makefile]]
=== O Makefile
-É uma boa prática criar [.filename]#Makefiles# para cada projeto de codificação não trivial, o que obviamente inclui módulos do kernel.
+É uma boa prática criar arquivos [.filename]#Makefile# para todos os projetos de codificação não triviais, o que inclui, é claro, módulos do kernel.
-Criar o [.filename]#Makefile# é simples graças a um extenso conjunto de rotinas auxiliares fornecidas pelo sistema. Em suma, aqui está um exemplo de como um Makefile [.filename]#mínimo# para um módulo do kernel se parece:
+Criar o arquivo [.filename]#Makefile# é simples graças a um extenso conjunto de rotinas auxiliares fornecidas pelo sistema. Em resumo, aqui está como um [.filename]#Makefile# mínimo se parece para um módulo do kernel:
[.programlisting]
....
@@ -170,7 +173,7 @@ KMOD=geom_journal
.include <bsd.kmod.mk>
....
-Este [.filename]#Makefile# (com nomes de arquivos alterados) serve para qualquer módulo do kernel, e uma classe GEOM pode residir em apenas um módulo do kernel. Se mais de um arquivo for necessário, liste-o na variável `SRCS`, separado com espaço em branco de outros nomes de arquivos.
+Este [.filename]#Makefile# (com nomes de arquivo alterados) serve para qualquer módulo do kernel e uma classe GEOM pode residir em apenas um módulo do kernel. Se mais de um arquivo for necessário, liste-os na variável `SRCS`, separados por espaço de outros nomes de arquivo.
[[kernelprog]]
== Programação do kernel do FreeBSD
@@ -178,34 +181,34 @@ Este [.filename]#Makefile# (com nomes de arquivos alterados) serve para qualquer
[[kernelprog-memalloc]]
=== Alocação de memória
-Veja o man:malloc[9]. A alocação básica de memória é apenas ligeiramente diferente do seu userland equivalente. Mais notavelmente, `malloc`() e `free`() aceitam parâmetros adicionais conforme descrito na página do manual.
+Consulte man:malloc[9]. A alocação básica de memória é apenas ligeiramente diferente da sua equivalente no espaço do usuário. Mais notavelmente, `malloc()` e `free()` aceitam parâmetros adicionais conforme descrito na página do manual.
-Um "malloc type" deve ser declarado na seção de declaração de um arquivo fonte, assim:
+Um "malloc type" deve ser declarado na seção de declaração de um arquivo de código fonte, por exemplo desta forma:
[.programlisting]
....
static MALLOC_DEFINE(M_GJOURNAL, "gjournal data", "GEOM_JOURNAL Data");
....
-Para usar esta macro, os cabeçalhos [.filename]#sys/param.h#, [.filename]#sys/kernel.h# e [.filename]#sys/malloc.h# devem ser incluídos.
+Para usar essa macro, os cabeçalhos [.filename]#sys/param.h#, [.filename]#sys/kernel.h# e [.filename]#sys/malloc.h# devem ser incluídos.
-Existe outro mecanismo para alocar memória, o UMA (Universal Memory Allocator). Veja man:uma[9] para detalhes, mas ele é um tipo especial de alocador usado principalmente para alocação rápida de listas compostas de itens do mesmo tamanho (por exemplo, matrizes dinâmicas de estruturas).
+Existe outro mecanismo para alocar memória, o UMA (Universal Memory Allocator). Consulte man:uma[9] para obter detalhes, mas é um tipo especial de alocador usado principalmente para alocação rápida de listas compostas por itens do mesmo tamanho (por exemplo, matrizes dinâmicas de estruturas).
[[kernelprog-lists]]
=== Listas e filas
-Veja man:queue[3]. Há MUITOS casos quando uma lista de coisas precisa ser mantida. Felizmente, essa estrutura de dados é implementada (de várias maneiras) por macros C incluídas no sistema. O tipo de lista mais usado é o TAILQ, porque é o mais flexível. É também aquele com os maiores requisitos de memória (seus elementos são duplamente vinculados) e também o mais lento (embora a variação de velocidade seja mais da ordem de várias instruções da CPU, portanto, ela não deve ser levada a sério).
+Consulte man:queue[3]. Existem MUITOS casos em que uma lista de coisas precisa ser mantida. Felizmente, essa estrutura de dados é implementada (de várias maneiras) por macros em C incluídas no sistema. O tipo de lista mais usado é TAILQ porque é o mais flexível. Também é o que tem os maiores requisitos de memória (seus elementos são duplamente vinculados) e também o mais lento (embora a variação de velocidade seja da ordem de algumas instruções de CPU a mais, então não deve ser levado a sério).
-Se a velocidade de recuperação de dados for muito importante, veja man:tree[3] e man:hashinit[9].
+Se a velocidade de recuperação de dados é muito importante, consulte man:tree[3] e man:hashinit[9].
[[kernelprog-bios]]
=== BIOS
-A estrutura `bio` é usada para todas e quaisquer operações de Input/Output relativas ao GEOM. Ele basicamente contém informações sobre qual dispositivo ('provedor') deve satisfazer a solicitação, tipo de pedido, offset, comprimento, ponteiro para um buffer e um monte de sinalizadores "específicos do usuário" e campos que podem ajudar a implementar vários hacks.
+A estrutura `bio` é usada para todas e quaisquer operações de entrada/saída relacionadas ao GEOM. Basicamente, ela contém informações sobre qual dispositivo ('provider') deve satisfazer a solicitação, tipo de solicitação, deslocamento, comprimento, ponteiro para um buffer e um conjunto de flags e campos "específicos do usuário" que podem ajudar a implementar vários ajustes.
-O importante aqui é que os `bio`-s são tratados de forma assíncrona. Isso significa que, na maior parte do código, não há nenhum análogo as chamadas man:read[2] e man:write[2] que não retornam até que uma solicitação seja feita. Em vez disso, uma função fornecida pelo desenvolvedor é chamada como uma notificação quando a solicitação é concluída (ou resulta em erro).
+O importante aqui é que os ``bio``s são manipulados de forma assíncrona. Isso significa que, na maioria das partes do código, não há um análogo das chamadas man:read[2] e man:write[2] do espaço do usuário que não retornam até que uma solicitação seja concluída. Em vez disso, uma função fornecida pelo desenvolvedor é chamada como uma notificação quando a solicitação é concluída (ou resulta em erro).
-O modelo de programação assíncrona (também chamado de "orientado a eventos") é um pouco mais difícil do que o imperativo muito mais usado no userland (pelo menos leva um tempo para se acostumar com isso). Em alguns casos, as rotinas auxiliares `g_write_data`() e `g_read_data`() podem ser usadas, mas __nem sempre__. Em particular, elas não podem ser usadas quando um mutex é mantido; por exemplo, o mutex de topologia GEOM ou o mutex interno mantido durante as funções `.start`() e `.stop`().
+O modelo de programação assíncrono (também chamado de "event-driven") é um pouco mais difícil do que o muito usado modelo imperativo usado no espaço do usuário (pelo menos leva um tempo para se acostumar). Em alguns casos, as rotinas auxiliares `g_write_data()` e `g_read_data()` podem ser usadas, mas __nem sempre__. Em particular, elas não podem ser usadas quando um mutex é mantido; por exemplo, o mutex de topologia GEOM ou o mutex interno mantido durante as funções `.start()` e `.stop()`.
[[geom]]
== Programação GEOM
@@ -218,15 +221,15 @@ Se o desempenho máximo não for necessário, uma maneira muito mais simples de
[[geom-class]]
=== Classe GEOM
-Classes GEOM são transformações nos dados. Essas transformações podem ser combinadas em uma forma de árvore. Instâncias de classes GEOM são chamadas de __geoms__.
+As classes GEOM são transformações nos dados. Essas transformações podem ser combinadas de maneira semelhante a uma árvore. As instâncias de classes GEOM são chamadas de __geoms__.
-Cada classe GEOM possui vários "métodos de classe" que são chamados quando não há nenhuma instância geom disponível (ou simplesmente não estão vinculados a uma única instância):
+Cada classe GEOM tem vários "métodos de classe" que são chamados quando não há uma instância geom disponível (ou simplesmente não estão vinculados a uma única instância):
-* `.init` é chamada quando o GEOM toma conhecimento de uma classe GEOM (quando o módulo do kernel é carregado).
-* `.fini` é chamada quando o GEOM abandona a classe (quando o módulo é descarregado)
-* `.taste` é chamada next, uma vez para cada provedor que o sistema tiver disponível. Se aplicável, essa função geralmente criará e iniciará uma instância geom.
-* `.destroy_geom` é chamada quando o geom deve ser desfeito
-* `.ctlconf` é chamado quando o usuário solicita a reconfiguração do geom existente
+* O `.init` é chamado quando o GEOM toma conhecimento de uma classe GEOM (quando o módulo do kernel é carregado.)
+* O `.fini` é chamado quando o GEOM abandona a classe (quando o módulo é descarregado)
+* O `.taste` é chamado em seguida, uma vez para cada provider que o sistema tem disponível. Se aplicável, esta função geralmente criará e iniciará uma instância geom.
+* O `.destroy_geom` é chamado quando o geom deve ser desmontado
+* O `.ctlconf` é chamado quando o usuário solicita a reconfiguração do geom existente
Também são definidas as funções de evento GEOM, que serão copiadas para a instância geom.
@@ -237,13 +240,13 @@ Estas funções são chamadas a partir da thread g_event do kernel.
[[geom-softc]]
=== Softc
-O nome "softc" é um termo legado para "dados privados do driver". O nome provavelmente vem do termo arcaico "bloco de controle de software". No GEOM, ele é uma estrutura (mais precisamente: ponteiro para uma estrutura) que pode ser anexada a uma instância geom para armazenar quaisquer dados que sejam privados para a instância geom. A maioria das classes GEOM possui os seguintes membros:
+O nome "softc" é um termo legado para "dados privados do driver". O nome provavelmente vem do termo arcaico "bloco de controle de software". No GEOM, é uma estrutura (mais precisamente, um ponteiro para uma estrutura) que pode ser anexada a uma instância geom para manter quaisquer dados que sejam privados à instância geom. A maioria das classes GEOM tem os seguintes membros:
-* `struct g_provider *provider` : O "provedor" que este geom instância
-* `uint16_t n_disks` : Número de consumidores que este geom consome
-* `struct g_consumer \**disks`: Array de `struct g_consumer*`. (Não é possível usar apenas uma única via indireta porque o struct g_consumer* é criado em nosso nome pela GEOM).
+* `struct g_provider *provider`: Instância geom criada a partir do provider correspondente
+* `uint16_t n_disks`: Número de consumidores que esta instância geom consome
+* `struct g_consumer \**disks`: Array de `struct g_consumer*`. (Não é possível usar apenas uma única indireção porque os `struct g_consumer*` são criados em nosso nome pelo GEOM).
-A estrutura `softc` contém todo o estado da instância geom. Cada instância geom possui seu próprio softc.
+A estrutura `softc` contém todo o estado da instância geom. Cada instância geom tem sua própria estrutura `softc`.
[[geom-metadata]]
=== Metadados
@@ -264,22 +267,22 @@ Os metadados estão localizados no último setor do provedor (e, portanto, devem
A sequência de eventos é:
-* o usuário chama o utilitário man:geom[8] (ou um de seus equivalentes hardlinked)
-* o utilitário descobre qual classe geom ele é suposto manipular e procura pela biblioteca [.filename]#geom_CLASSNAME.so# (geralmente em [.filename]#/lib/geom#).
-* ele man:dlopen[3]-s a biblioteca, extrai as definições dos parâmetros da linha de comandos e funções auxiliares.
+* O usuário chama o utilitário man:geom[8] (ou um comandos alternativos para o mesmo utilitário)
+* O utilitário determina qual classe geom ele deve manipular e procura pela biblioteca [.filename]#geom_CLASSNAME.so# (geralmente em [.filename]#/lib/geom#).
+* O utilitário utiliza a função man:dlopen[3] para carregar dinamicamente a biblioteca, extrair as definições dos parâmetros de linha de comando e funções auxiliares.
No caso da criação/rotulação de um novo geom, isso é o que acontece:
-* O man:geom[8] procura no argumento da linha de comando pelo comando (geralmente `label`) e chama uma função auxiliar .
+* O comando man:geom[8] procura na linha de comando pelo comando (geralmente `label`) e chama uma função auxiliar correspondente.
* A função auxiliar verifica parâmetros e reúne metadados, que são gravados em todos os provedores envolvidos.
-* Este "estraga" geoms existentes (se existirem) e inicializa uma nova rodada de "degustação" dos provedores. A classe geom pretendida reconhece os metadados e carrega o geom.
+* Isso "anula" os geoms existentes (se houver) e inicializa uma nova rodada de "degustação" dos providers. A classe geom pretendida reconhece os metadados e coloca o geom em funcionamento.
(A sequência de eventos acima é dependente da implementação, mas todo o código existente funciona assim, e é suportado pelas bibliotecas.)
[[geom-command]]
=== Estrutura do Comando GEOM
-A biblioteca helper [.filename]#geom_CLASSNAME.so# exporta a estrutura `class_commands`, que é uma matriz dos elementos `struct g_command`. Os comandos são uniformes no formato e se parecem com:
+A biblioteca auxiliar [.filename]#geom_CLASSNAME.so# exporta a estrutura `class_commands`, que é um array de elementos `struct g_command`. Os comandos têm um formato uniforme e se parecem com:
[.programlisting]
....
@@ -288,72 +291,72 @@ A biblioteca helper [.filename]#geom_CLASSNAME.so# exporta a estrutura `class_co
Verbos comuns são:
-* label - para gravar metadados em dispositivos para que eles possam ser reconhecidos em degustações e criados em geoms
-* destroy - para destruir metadados, para que as geoms sejam destruídas
+* label - para escrever metadados nos dispositivos para que possam ser reconhecidos durante o processo de "tasting" e trazidos à tona em geoms
+* destroy - para destruir metadados, fazendo com que os geoms sejam destruídos
Opções comuns são:
-* `-v` : be verbose
-* `-f` : force
+* `-v` : ser verboso (mostrar mais informações)
+* `-f` : forçar
-Muitas ações, como rotular e destruir metadados, podem ser executadas no userland. Para isso, `struct g_command` fornece o campo `gc_func` que pode ser definido para uma função (no mesmo [.filename]#.so#) que será chamada para processar um verbo. Se `gc_func` for NULL, o comando será passado para o módulo do kernel, para a função `.ctlreq` da classe geom.
+Muitas ações, como rotular e destruir metadados, podem ser executadas no espaço de usuário. Para isso, `struct g_command` fornece o campo `gc_func`, que pode ser definido como uma função (no mesmo arquivo [.filename]#.so#) que será chamada para processar um verbo. Se `gc_func` for NULL, o comando será passado para o módulo do kernel, para a função `.ctlreq` da classe geom.
[[geom-geoms]]
=== Geoms
-Geoms são instâncias de classes GEOM. Eles possuem dados internos (uma estrutura softc) e algumas funções com as quais eles respondem a eventos externos.
+Os Geoms são instâncias das classes GEOM. Eles têm dados internos (uma estrutura softc) e algumas funções com as quais eles respondem a eventos externos.
As funções de evento são:
-* `.acess`: calcula permissões (leitura / escrita / exclusiva)
-* `.dumpconf`: retorna informações formatadas em XML sobre o geom
-* `.orphan`: chamado quando algum provedor subjacente é desconectado
-* `.spoiled`: chamado quando algum provedor subjacente é gravado
-* `.start`: lida com I/O
+* `.access` : calcula as permissões (leitura/escrita/exclusiva)
+* `.dumpconf` : uma função que retorna informações formatadas em XML sobre o geom
+* `.orphan` : chamado quando algum provedor subjacente é desconectado
+* `.spoiled` : chamado quando algum provedor subjacente é escrito
+* `.start` : lida com operações de entrada/saída (I/O)
-Estas funções são chamadas a partir da thread `g_down` do kernel e não pode haver sleeping neste contexto, (veja a definição de sleeping em outro lugar) o que limita um pouco o que pode ser feito, mas força o manuseio a ser rápido .
+Essas funções são chamadas a partir da thread do kernel `g_down` e não é permitido dormir nesse contexto (consulte a definição de dormir em outro lugar), o que limita bastante o que pode ser feito, mas força o tratamento a ser rápido.
-Destes, a função mais importante para fazer o trabalho útil real é a função `.start`(), que é chamada quando uma requisição BIO chega para um provedor gerenciado por uma instância da classe geom.
+A função mais importante para realizar trabalho útil é a função `.start()`, que é chamada quando uma solicitação BIO chega para um provider gerenciado por uma instância de classe geom.
[[geom-threads]]
=== Threads GEOM
Existem três threads de kernel criados e executados pelo framework GEOM:
-* `g_down` : trata de solicitações provenientes de entidades de alto nível (como uma solicitação do userland) no caminho para dispositivos físicos
-* `g_up` : lida com respostas de drivers de dispositivos para solicitações feitas por entidades de nível superior
-* `g_event` : lida com todos os outros casos: criação de instâncias geom, contagem de acessos, eventos "spoil", etc.
+* `g_down` : responsável por lidar com solicitações vindas de entidades de alto nível (como uma solicitação do espaço do usuário) a caminho de dispositivos físicos
+* `g_up` : Lida com as respostas dos drivers de dispositivo às solicitações feitas por entidades de nível superior
+* `g_event` : lida com todos os outros casos: criação de instâncias de geom, contagem de acesso, eventos de "spoil", etc.
-Quando um processo do usuário emite um pedido de "leitura de dados X no deslocamento Y de um arquivo", isto é o que acontece:
+Quando um processo do usuário emite uma solicitação para "ler dados X no deslocamento Y de um arquivo", o seguinte acontece:
* O sistema de arquivos converte o pedido em uma instância struct bio e o transmite para o subsistema GEOM. Ele sabe o que a instância geom deve manipular porque os sistemas de arquivos são hospedados diretamente em uma instância geom.
* A requisição termina como uma chamada para a função `.start`() feita para a thread g_down e atinge a instância geom de nível superior.
-* Essa instância geom de nível superior (por exemplo, o segmentador de partições) determina que a solicitação deve ser roteada para uma instância de nível inferior (por exemplo, o driver de disco). Ele faz uma cópia da solicitação bio (solicitações bio _SEMPRE_ precisam ser copiadas entre instâncias, com `g_clone_bio`()!), modifica os campos de dados offset e de provedor de destino e executa a cópia com `g_io_request`()
-* O driver de disco obtém a solicitação bio também como uma chamada para `.start`() na thread `g_down`. Ela fala com o hardware, recupera os dados e chama `g_io_deliver`() na bio.
-* Agora, a notificação de bio conclusão "borbulha" na thread `g_up`. Primeiro, o slicer de partição obtém `.done`() chamado na thread `g_up`, ele usa as informações armazenadas na bio para liberar a estrutura `bio` clonada (com `g_destroy_bio`()) e chama `g_io_deliver`() no pedido original.
+* Esta instância geom de nível superior (por exemplo, o "partition slicer") determina que a solicitação deve ser encaminhada para uma instância de nível inferior (por exemplo, o driver de disco). Ela faz uma cópia da solicitação bio (solicitações bio PRECISAM SEMPRE ser copiadas entre instâncias, com `g_clone_bio`()!), modifica o deslocamento dos dados e os campos do provider de destino e executa a cópia com `g_io_request`()
+* O driver de disco também recebe a requisição bio como uma chamada para `.start`() na thread `g_down`. Ele conversa com o hardware, recebe os dados de volta e chama `g_io_deliver`() na bio.
+* Agora, a notificação da conclusão do bio "sobe" na thread `g_up`. Primeiro, o particionador recebe `.done`() chamado na thread `g_up`, usa as informações armazenadas no bio para liberar a estrutura de `bio` clonada (com `g_destroy_bio`()) e chama `g_io_deliver`() no pedido original.
* O sistema de arquivos obtém os dados e os transfere para o usuário.
-Veja a página de manual para o man:g_bio[9] para obter informações sobre como os dados são passados para frente e para trás na estrutura `bio` (observe em particular os campos `bio_parent` e `bio_children` e como eles são manipulados).
+Consulte a página do manual man:g_bio[9] para obter informações sobre como os dados são passados de um lado para o outro na estrutura `bio` (observe em particular os campos `bio_parent` e `bio_children` e como eles são manipulados).
-Uma característica importante: __NAS THREADS G_UP E G_DOWN NÃO SE PODE DORMIR (SELEEPING)__. Isso significa que nenhuma das seguintes coisas pode ser feita nessas threads (a lista não é completa, mas apenas informativa):
+Uma característica importante é que __ NÃO PODEM HAVER CHAMADAS DE FUNÇÃO QUE BLOQUEIEM O PROCESSO (DURMAM) NAS THREADS G_UP E G_DOWN__. Isso significa que nenhuma das seguintes coisas pode ser feita nesses threads (a lista é apenas informativa e não completa):
* Chamadas para `msleep`() e `tsleep`(), obviamente.
-* Chamadas para `g_write_data`() e `g_read_data`(), porque estes dormem entre passar os dados para os consumidores e retornar.
-* Esperando I/O.
-* Chamadas para man:malloc[9] e `uma_zalloc`() com o conjunto de flags `M_WAITOK`
-* sx e outros sleepable locks
+* Chamadas para `g_write_data`() e `g_read_data()`, pois elas dormem entre a passagem dos dados para os consumidores e o retorno.
+* Aguardando I/O.
+* Chamadas a man:malloc[9] e `uma_zalloc`() com a flag `M_WAITOK` definida
+* sx e outros tipos de bloqueios sleepable
-Esta restrição está aqui para impedir que o código GEOM obstrua o caminho da solicitação de I/O, já que sleeping normalmente não é limitado pelo tempo e não pode haver garantias sobre quanto tempo levará (também existem algumas outras razões mais técnicas). Isso também significa que não existe muito o que possa ser feito nessas threads; por exemplo, quase qualquer coisa complexa requer alocação de memória. Felizmente, existe uma saída: criar threads adicionais no kernel.
+Essa restrição foi imposta para evitar que o código GEOM obstrua o caminho de solicitação de E/S, já que a espera geralmente não está relacionada ao tempo e não há garantias sobre quanto tempo levará (há outras razões técnicas também). Isso também significa que não há muito o que se possa fazer nessas threads; por exemplo, quase qualquer coisa complexa requer alocação de memória. Felizmente, há uma saída: criar threads adicionais do kernel.
[[geom-kernelthreads]]
=== Threads de kernel para uso no código GEOM
-As threads do kernel são criadas com a função man:kthread_create[9], e elas são semelhantes aos threads do userland no comportamento, eles somente não podem retornar ao chamador para exprimir a conclusão, mas deve chamar man:kthread_exit[9].
+Threads do Kernel são criados com a função man:kthread_create[9], e eles são parecidos com threads de espaço de usuário em termos de comportamento, apenas que não podem retornar ao chamador para indicar término, mas devem chamar man:kthread_exit[9].
-No código GEOM, o uso usual de threads é para descarregar o processamento de requisições da thread `g_down` (a função `.start`). Estas threads se parecem com um "event handlers": elas têm uma lista encadeada de eventos associados a elas (nos quais eventos podem ser postados por várias funções em várias threads, portanto, devem ser protegidos por um mutex), pegam os eventos da lista, um por um, e processa-os em uma grande instrução `switch`().
+No código do GEOM, o uso usual de threads é para descarregar o processamento de solicitações da thread `g_down` (a função `.start()`). Essas threads se parecem com "manipuladores de eventos": elas têm uma lista vinculada de eventos associados a elas (na qual eventos podem ser postados por várias funções em várias threads, então ela deve ser protegida por um mutex), pegam os eventos da lista um por um e os processam em uma grande declaração `switch()`.
-A principal vantagem de usar uma thread para lidar com solicitações de I/O é que ela pode dormir quando necessário. Agora, isso parece bom, mas deve ser cuidadosamente pensado. Dormir é bom e muito conveniente, mas pode ser muito efetivo em destruir o desempenho da transformação geom. As classes extremamente sensíveis ao desempenho provavelmente devem fazer todo o trabalho na chamada de função `.start`(), tomando muito cuidado para lidar com erros de falta de memória e similares.
+O principal benefício de usar uma thread para lidar com as solicitações de E/S é que ela pode dormir quando necessário. Agora, isso parece bom, mas deve ser cuidadosamente pensado. Dormir é bem conveniente, mas pode destruir efetivamente o desempenho da transformação geom. As classes extremamente sensíveis ao desempenho provavelmente devem fazer todo o trabalho na chamada de função `.start()`, tendo muito cuidado para lidar com erros de falta de memória e similares.
-O outro benefício de ter uma thread de manipulação de eventos como essa é serializar todas as solicitações e respostas provenientes de diferentes threads geom em uma thread. Isso também é muito conveniente, mas pode ser lento. Na maioria dos casos, o tratamento de pedidos `.done`() pode ser deixado para a thread `g_up`.
+O outro benefício de ter uma thread de tratamento de eventos é a serialização de todas as solicitações e respostas vindas de diferentes threads do geom em uma única thread. Isso também é muito conveniente, mas pode ser lento. Na maioria dos casos, o tratamento de solicitações `.done`() pode ser deixado para a thread `g_up`.
-Mutexes no kernel do FreeBSD (veja man:mutex[9]) têm uma distinção de seus primos mais comuns do userland - o código não pode dormir enquanto estiver segurando um mutex). Se o código precisar dormir muito, os bloqueios man:sx[9] podem ser mais apropriados. Por outro lado, se você faz quase tudo em um único thread, você pode se safar sem utilizar mutexes.
+Mutexes no kernel do FreeBSD (veja man:mutex[9]) possuem uma distinção em relação às suas contrapartes mais comuns no userland - o código não pode dormir enquanto segura um mutex. Se o código precisa dormir muito, as travas man:sx[9] podem ser mais apropriadas. Por outro lado, se você fizer quase tudo em um único thread, pode se livrar completamente do uso de mutexes.
diff --git a/documentation/content/pt-br/articles/geom-class/_index.po b/documentation/content/pt-br/articles/geom-class/_index.po
new file mode 100644
index 0000000000..b1a4793bf7
--- /dev/null
+++ b/documentation/content/pt-br/articles/geom-class/_index.po
@@ -0,0 +1,1397 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: 2023-05-04 20:00+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesgeom-class_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/geom-class/_index.adoc:1
+#, no-wrap
+msgid "A guide to GEOM internals, and writing your own GEOM class"
+msgstr ""
+"Um guia sobre os internals do GEOM e sobre como escrever sua própria classe "
+"GEOM"
+
+#. type: Title =
+#: documentation/content/en/articles/geom-class/_index.adoc:1
+#: documentation/content/en/articles/geom-class/_index.adoc:11
+#, no-wrap
+msgid "Writing a GEOM Class"
+msgstr "Escrevendo uma classe GEOM"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:47
+msgid ""
+"This text documents some starting points in developing GEOM classes, and "
+"kernel modules in general. It is assumed that the reader is familiar with C "
+"userland programming."
+msgstr ""
+"Este texto documenta alguns pontos de partida no desenvolvimento de classes "
+"GEOM e módulos de kernel em geral. Pressupõe-se que o leitor esteja "
+"familiarizado com a programação de espaço de usuário em C."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:49
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/geom-class/_index.adoc:53
+#, no-wrap
+msgid "Introduction"
+msgstr "Introdução"
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:56
+#, no-wrap
+msgid "Documentation"
+msgstr "Documentação"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:60
+msgid ""
+"Documentation on kernel programming is scarce - it is one of few areas where "
+"there is nearly nothing in the way of friendly tutorials, and the phrase "
+"\"use the source!\" really holds true. However, there are some bits and "
+"pieces (some of them seriously outdated) floating around that should be "
+"studied before beginning to code:"
+msgstr ""
+"A documentação sobre programação de kernel é escassa - é uma das poucas "
+"áreas em que quase não há tutoriais amigáveis, e a frase \"use o código "
+"fonte!\" realmente é verdadeira. No entanto, existem alguns fragmentos ("
+"alguns deles seriamente desatualizados) circulando que devem ser estudados "
+"antes de começar a codificar:"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:62
+msgid ""
+"The extref:{developers-handbook}[FreeBSD Developer's Handbook] - part of the "
+"documentation project, it does not contain anything specific to kernel "
+"programming, but rather some general useful information."
+msgstr ""
+"O extref:{developers-handbook}[Handbook do Desenvolvedor do FreeBSD] - parte "
+"do projeto de documentação, não contém nada específico sobre programação do "
+"kernel, mas sim algumas informações úteis em geral."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:63
+msgid ""
+"The extref:{arch-handbook}[FreeBSD Architecture Handbook] - also from the "
+"documentation project, contains descriptions of several low-level facilities "
+"and procedures. The most important chapter is 13, extref:{arch-handbook}"
+"[Writing FreeBSD device drivers, driverbasics]."
+msgstr ""
+"O extref:{arch-handbook}[Handbook de Arquitetura do FreeBSD] - também do "
+"projeto de documentação, contém descrições de várias instalações e "
+"procedimentos de baixo nível. O capítulo mais importante é o 13, extref"
+":{arch-handbook}[Escrevendo drivers de dispositivos FreeBSD, driverbasics]."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:64
+msgid ""
+"The Blueprints section of http://www.freebsddiary.org[FreeBSD Diary] web "
+"site - contains several interesting articles on kernel facilities."
+msgstr ""
+"A seção Blueprints do site http://www.freebsddiary.org contém vários artigos "
+"interessantes sobre as facilidades do kernel."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:65
+msgid ""
+"The man pages in section 9 - for important documentation on kernel functions."
+msgstr ""
+"As páginas de manual da seção 9 - para documentação importante sobre as "
+"funções do kernel."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:66
+msgid ""
+"The man:geom[4] man page and http://phk.freebsd.dk/pubs/[PHK's GEOM slides] "
+"- for general introduction of the GEOM subsystem."
+msgstr ""
+"A página de manual man:geom[4] e os slides sobre o GEOM do PHK em http://phk."
+"freebsd.dk/pubs/ - para uma introdução geral ao subsistema GEOM."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:67
+msgid ""
+"Man pages man:g_bio[9], man:g_event[9], man:g_data[9], man:g_geom[9], man:"
+"g_provider[9], man:g_consumer[9], man:g_access[9] & others linked from "
+"those, for documentation on specific functionalities."
+msgstr ""
+"As páginas de manual man:g_bio[9], man:g_event[9], man:g_data[9], "
+"man:g_geom[9], man:g_provider[9], man:g_consumer[9], man:g_access[9] e "
+"outras vinculadas a elas, para documentação sobre funcionalidades "
+"específicas."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:68
+msgid ""
+"The man:style[9] man page - for documentation on the coding-style "
+"conventions which must be followed for any code which is to be committed to "
+"the FreeBSD tree."
+msgstr ""
+"A página de manual man:style[9] - para documentação sobre as convenções de "
+"estilo de codificação que devem ser seguidas para qualquer código que seja "
+"commitado para a árvore do FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/geom-class/_index.adoc:70
+#, no-wrap
+msgid "Preliminaries"
+msgstr "Preliminares"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:77
+msgid ""
+"The best way to do kernel development is to have (at least) two separate "
+"computers. One of these would contain the development environment and "
+"sources, and the other would be used to test the newly written code by "
+"network-booting and network-mounting filesystems from the first one. This "
+"way if the new code contains bugs and crashes the machine, it will not mess "
+"up the sources (and other \"live\" data). The second system does not even "
+"require a proper display. Instead, it could be connected with a serial "
+"cable or KVM to the first one."
+msgstr ""
+"A melhor maneira de desenvolver para o kernel é ter (pelo menos) dois "
+"computadores separados. Um deles conteria o ambiente de desenvolvimento e as "
+"fontes, e o outro seria usado para testar o código recém-escrito por meio do "
+"boot e montagem de sistemas de arquivos por rede do primeiro. Dessa forma, "
+"se o novo código contiver erros e travar a máquina, ele não afetará as "
+"fontes (e outros dados \"ao vivo\"). O segundo sistema nem mesmo precisa de "
+"uma tela adequada. Em vez disso, ele pode ser conectado com um cabo serial "
+"ou KVM para o primeiro."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:80
+msgid ""
+"But, since not everybody has two or more computers handy, there are a few "
+"things that can be done to prepare an otherwise \"live\" system for "
+"developing kernel code. This setup is also applicable for developing in a "
+"http://www.vmware.com/[VMWare] or http://www.qemu.org/[QEmu] virtual machine "
+"(the next best thing after a dedicated development machine)."
+msgstr ""
+"No entanto, como nem todo mundo tem dois ou mais computadores disponíveis, "
+"existem algumas coisas que podem ser feitas para preparar um sistema \"ao "
+"vivo\" para o desenvolvimento de código do kernel. Essa configuração também "
+"é aplicável para desenvolvimento em uma máquina virtual http://www.vmware."
+"com/[VMWare] ou http://www.qemu.org/[QEmu] (a próxima melhor opção depois de "
+"uma máquina de desenvolvimento dedicada)."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:82
+#, no-wrap
+msgid "Modifying a System for Development"
+msgstr "Modificando um sistema para desenvolvimento"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:85
+msgid ""
+"For any kernel programming a kernel with `INVARIANTS` enabled is a must-"
+"have. So enter these in your kernel configuration file:"
+msgstr ""
+"Para qualquer programação de kernel, é essencial ter um kernel com "
+"`INVARIANTS` ativado. Portanto, adicione as seguintes opções no arquivo de "
+"configuração do kernel:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:90
+#, no-wrap
+msgid ""
+"options INVARIANT_SUPPORT\n"
+"options INVARIANTS\n"
+msgstr ""
+"options INVARIANT_SUPPORT\n"
+"options INVARIANTS\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:93
+msgid ""
+"For more debugging you should also include WITNESS support, which will alert "
+"you of mistakes in locking:"
+msgstr ""
+"Para obter mais depuração, você também deve incluir o suporte a WITNESS, que "
+"alertará sobre erros de bloqueio:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:98
+#, no-wrap
+msgid ""
+"options WITNESS_SUPPORT\n"
+"options WITNESS\n"
+msgstr ""
+"options WITNESS_SUPPORT\n"
+"options WITNESS\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:101
+msgid "For debugging crash dumps, a kernel with debug symbols is needed:"
+msgstr ""
+"Para depurar despejos de falhas (crash dumps), é necessário um kernel com "
+"símbolos de depuração:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:105
+#, no-wrap
+msgid " makeoptions DEBUG=-g\n"
+msgstr " makeoptions DEBUG=-g\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:110
+msgid ""
+"With the usual way of installing the kernel (`make installkernel`) the debug "
+"kernel will not be automatically installed. It is called [.filename]#kernel."
+"debug# and located in [.filename]#/usr/obj/usr/src/sys/KERNELNAME/#. For "
+"convenience it should be copied to [.filename]#/boot/kernel/#."
+msgstr ""
+"Com a maneira usual de instalar o kernel (`make installkernel`), o kernel de "
+"depuração não será instalado automaticamente. Ele é chamado de [."
+"filename]#kernel.debug# e fica localizado em [.filename]#/usr/obj/usr/src/"
+"sys/NOME_DO_KERNEL/#. Por conveniência, ele deve ser copiado para [."
+"filename]#/boot/kernel/#."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:113
+msgid ""
+"Another convenience is enabling the kernel debugger so you can examine a "
+"kernel panic when it happens. For this, enter the following lines in your "
+"kernel configuration file:"
+msgstr ""
+"Outra conveniência é habilitar o depurador do kernel para que você possa "
+"examinar um kernel panic quando ele ocorrer. Para isso, adicione as "
+"seguintes linhas no arquivo de configuração do kernel:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:119
+#, no-wrap
+msgid ""
+"options KDB\n"
+"options DDB\n"
+"options KDB_TRACE\n"
+msgstr ""
+"options KDB\n"
+"options DDB\n"
+"options KDB_TRACE\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:122
+msgid ""
+"For this to work you might need to set a sysctl (if it is not on by default):"
+msgstr ""
+"Para que isso funcione, você pode precisar definir um sysctl (se ele não "
+"estiver ativado por padrão):"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:126
+#, no-wrap
+msgid " debug.debugger_on_panic=1\n"
+msgstr " debug.debugger_on_panic=1\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:134
+msgid ""
+"Kernel panics will happen, so care should be taken with the filesystem "
+"cache. In particular, having softupdates might mean the latest file version "
+"could be lost if a panic occurs before it is committed to storage. "
+"Disabling softupdates yields a great performance hit, and still does not "
+"guarantee data consistency. Mounting filesystem with the \"sync\" option is "
+"needed for that. For a compromise, the softupdates cache delays can be "
+"shortened. There are three sysctl's that are useful for this (best to be "
+"set in [.filename]#/etc/sysctl.conf#):"
+msgstr ""
+"Panics do kernel podem acontecer, portanto, é preciso ter cuidado com o "
+"cache do sistema de arquivos. Em particular, ter softupdates pode significar "
+"que a versão mais recente de um arquivo pode ser perdida se ocorrer um panic "
+"antes que seja gravada no armazenamento. Desabilitar o softupdates implica "
+"em uma grande perda de desempenho e ainda não garante a consistência dos "
+"dados. É necessário montar o sistema de arquivos com a opção \"sync\" para "
+"garantir isso. Como um compromisso, os atrasos do cache do softupdates podem "
+"ser encurtados. Existem três sysctl que são úteis para isso (melhor "
+"configurados em [.filename]#/etc/sysctl.conf#):"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:140
+#, no-wrap
+msgid ""
+"kern.filedelay=5\n"
+"kern.dirdelay=4\n"
+"kern.metadelay=3\n"
+msgstr ""
+"kern.filedelay=5\n"
+"kern.dirdelay=4\n"
+"kern.metadelay=3\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:143
+msgid "The numbers represent seconds."
+msgstr "Os números representam segundos."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:151
+msgid ""
+"For debugging kernel panics, kernel core dumps are required. Since a kernel "
+"panic might make filesystems unusable, this crash dump is first written to a "
+"raw partition. Usually, this is the swap partition. This partition must be "
+"at least as large as the physical RAM in the machine. On the next boot, the "
+"dump is copied to a regular file. This happens after filesystems are "
+"checked and mounted, and before swap is enabled. This is controlled with "
+"two [.filename]#/etc/rc.conf# variables:"
+msgstr ""
+"Para depurar panics do kernel, são necessários os despejos de núcleo do "
+"kernel. Como um kernel panic pode tornar os sistemas de arquivos "
+"inutilizáveis, este despejo de falhas é primeiro gravado em uma partição "
+"raw. Geralmente, isso é feito na partição de swap. Esta partição deve ter "
+"pelo menos o tamanho da RAM física da máquina. No próximo boot, o despejo é "
+"copiado para um arquivo regular. Isso acontece após a verificação e montagem "
+"dos sistemas de arquivos e antes que o swap seja ativado. Isso é controlado "
+"com duas variáveis do arquivo [.filename]#/etc/rc.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:156
+#, no-wrap
+msgid ""
+"dumpdev=\"/dev/ad0s4b\"\n"
+"dumpdir=\"/usr/core\n"
+msgstr ""
+"dumpdev=\"/dev/ad0s4b\"\n"
+"dumpdir=\"/usr/core\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:159
+msgid ""
+"The `dumpdev` variable specifies the swap partition and `dumpdir` tells the "
+"system where in the filesystem to relocate the core dump on reboot."
+msgstr ""
+"A variável `dumpdev` especifica a partição de swap e `dumpdir` informa ao "
+"sistema onde no sistema de arquivos realocar o core dump no reboot."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:162
+msgid ""
+"Writing kernel core dumps is slow and takes a long time so if you have lots "
+"of memory (>256M) and lots of panics it could be frustrating to sit and wait "
+"while it is done (twice - first to write it to swap, then to relocate it to "
+"filesystem). It is convenient then to limit the amount of RAM the system "
+"will use via a [.filename]#/boot/loader.conf# tunable:"
+msgstr ""
+"Gravar o core dump do kernel é lento e leva muito tempo, portanto, se você "
+"tiver muita memória (>256 MB) e muitos panics, pode ser frustrante esperar "
+"enquanto isso é feito (duas vezes - primeiro para gravá-lo na troca, depois "
+"para realocá-lo no sistema de arquivos). É conveniente, portanto, limitar a "
+"quantidade de RAM que o sistema usará por meio de um ajuste no [.filename]#/"
+"boot/loader.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:166
+#, no-wrap
+msgid " hw.physmem=\"256M\"\n"
+msgstr " hw.physmem=\"256M\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:169
+msgid ""
+"If the panics are frequent and filesystems large (or you simply do not trust "
+"softupdates+background fsck) it is advisable to turn background fsck off via "
+"[.filename]#/etc/rc.conf# variable:"
+msgstr ""
+"Se os panics forem frequentes e os sistemas de arquivos forem grandes (ou se "
+"você simplesmente não confiar no softupdates + fsck em segundo plano), é "
+"aconselhável desativar o fsck em segundo plano por meio da seguinte variável "
+"no arquivo [.filename]#/etc/rc.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:173
+#, no-wrap
+msgid " background_fsck=\"NO\"\n"
+msgstr " background_fsck=\"NO\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:178
+msgid ""
+"This way, the filesystems will always get checked when needed. Note that "
+"with background fsck, a new panic could happen while it is checking the "
+"disks. Again, the safest way is not to have many local filesystems by using "
+"another computer as an NFS server."
+msgstr ""
+"Dessa forma, os sistemas de arquivos serão sempre verificados quando "
+"necessário. Observe que, com o fsck em segundo plano, um novo panic pode "
+"ocorrer enquanto os discos estão sendo verificados. Novamente, a maneira "
+"mais segura é não ter muitos sistemas de arquivos locais, usando outro "
+"computador como um servidor NFS."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:180
+#, no-wrap
+msgid "Starting the Project"
+msgstr "Começando o projeto"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:184
+msgid ""
+"For the purpose of creating a new GEOM class, an empty subdirectory has to "
+"be created under an arbitrary user-accessible directory. You do not have to "
+"create the module directory under [.filename]#/usr/src#."
+msgstr ""
+"Para criar uma nova classe GEOM, um subdiretório vazio deve ser criado em um "
+"diretório arbitrário acessível pelo usuário. Você não precisa criar o "
+"diretório do módulo em [.filename]#/usr/src#."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:186
+#, no-wrap
+msgid "The Makefile"
+msgstr "O Makefile"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:189
+msgid ""
+"It is good practice to create [.filename]#Makefiles# for every nontrivial "
+"coding project, which of course includes kernel modules."
+msgstr ""
+"É uma boa prática criar arquivos [.filename]#Makefile# para todos os "
+"projetos de codificação não triviais, o que inclui, é claro, módulos do "
+"kernel."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:192
+msgid ""
+"Creating the [.filename]#Makefile# is simple thanks to an extensive set of "
+"helper routines provided by the system. In short, here is how a minimal [."
+"filename]#Makefile# looks for a kernel module:"
+msgstr ""
+"Criar o arquivo [.filename]#Makefile# é simples graças a um extenso conjunto "
+"de rotinas auxiliares fornecidas pelo sistema. Em resumo, aqui está como um ["
+".filename]#Makefile# mínimo se parece para um módulo do kernel:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:197
+#, no-wrap
+msgid ""
+"SRCS=g_journal.c\n"
+"KMOD=geom_journal\n"
+msgstr ""
+"SRCS=g_journal.c\n"
+"KMOD=geom_journal\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:199
+#, no-wrap
+msgid ".include <bsd.kmod.mk>\n"
+msgstr ".include <bsd.kmod.mk>\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:203
+msgid ""
+"This [.filename]#Makefile# (with changed filenames) will do for any kernel "
+"module, and a GEOM class can reside in just one kernel module. If more than "
+"one file is required, list it in the `SRCS` variable, separated with "
+"whitespace from other filenames."
+msgstr ""
+"Este [.filename]#Makefile# (com nomes de arquivo alterados) serve para "
+"qualquer módulo do kernel e uma classe GEOM pode residir em apenas um módulo "
+"do kernel. Se mais de um arquivo for necessário, liste-os na variável `SRCS`"
+", separados por espaço de outros nomes de arquivo."
+
+#. type: Title ==
+#: documentation/content/en/articles/geom-class/_index.adoc:205
+#, no-wrap
+msgid "On FreeBSD Kernel Programming"
+msgstr "Programação do kernel do FreeBSD"
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:208
+#, no-wrap
+msgid "Memory Allocation"
+msgstr "Alocação de memória"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:213
+msgid ""
+"See man:malloc[9]. Basic memory allocation is only slightly different than "
+"its userland equivalent. Most notably, `malloc`() and `free`() accept "
+"additional parameters as is described in the man page."
+msgstr ""
+"Consulte man:malloc[9]. A alocação básica de memória é apenas ligeiramente "
+"diferente da sua equivalente no espaço do usuário. Mais notavelmente, "
+"`malloc()` e `free()` aceitam parâmetros adicionais conforme descrito na "
+"página do manual."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:215
+msgid ""
+"A \"malloc type\" must be declared in the declaration section of a source "
+"file, like this:"
+msgstr ""
+"Um \"malloc type\" deve ser declarado na seção de declaração de um arquivo "
+"de código fonte, por exemplo desta forma:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:219
+#, no-wrap
+msgid " static MALLOC_DEFINE(M_GJOURNAL, \"gjournal data\", \"GEOM_JOURNAL Data\");\n"
+msgstr ""
+" static MALLOC_DEFINE(M_GJOURNAL, \"gjournal data\", \"GEOM_JOURNAL Data\");"
+"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:222
+msgid ""
+"To use this macro, [.filename]#sys/param.h#, [.filename]#sys/kernel.h# and [."
+"filename]#sys/malloc.h# headers must be included."
+msgstr ""
+"Para usar essa macro, os cabeçalhos [.filename]#sys/param.h#, [.filename]#"
+"sys/kernel.h# e [.filename]#sys/malloc.h# devem ser incluídos."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:225
+msgid ""
+"There is another mechanism for allocating memory, the UMA (Universal Memory "
+"Allocator). See man:uma[9] for details, but it is a special type of "
+"allocator mainly used for speedy allocation of lists comprised of same-sized "
+"items (for example, dynamic arrays of structs)."
+msgstr ""
+"Existe outro mecanismo para alocar memória, o UMA (Universal Memory "
+"Allocator). Consulte man:uma[9] para obter detalhes, mas é um tipo especial "
+"de alocador usado principalmente para alocação rápida de listas compostas "
+"por itens do mesmo tamanho (por exemplo, matrizes dinâmicas de estruturas)."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:227
+#, no-wrap
+msgid "Lists and Queues"
+msgstr "Listas e filas"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:234
+msgid ""
+"See man:queue[3]. There are a LOT of cases when a list of things needs to "
+"be maintained. Fortunately, this data structure is implemented (in several "
+"ways) by C macros included in the system. The most used list type is TAILQ "
+"because it is the most flexible. It is also the one with largest memory "
+"requirements (its elements are doubly-linked) and also the slowest (although "
+"the speed variation is on the order of several CPU instructions more, so it "
+"should not be taken seriously)."
+msgstr ""
+"Consulte man:queue[3]. Existem MUITOS casos em que uma lista de coisas "
+"precisa ser mantida. Felizmente, essa estrutura de dados é implementada (de "
+"várias maneiras) por macros em C incluídas no sistema. O tipo de lista mais "
+"usado é TAILQ porque é o mais flexível. Também é o que tem os maiores "
+"requisitos de memória (seus elementos são duplamente vinculados) e também o "
+"mais lento (embora a variação de velocidade seja da ordem de algumas "
+"instruções de CPU a mais, então não deve ser levado a sério)."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:236
+msgid ""
+"If data retrieval speed is very important, see man:tree[3] and man:"
+"hashinit[9]."
+msgstr ""
+"Se a velocidade de recuperação de dados é muito importante, consulte "
+"man:tree[3] e man:hashinit[9]."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:238
+#, no-wrap
+msgid "BIOs"
+msgstr "BIOS"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:242
+msgid ""
+"Structure `bio` is used for any and all Input/Output operations concerning "
+"GEOM. It basically contains information about what device ('provider') "
+"should satisfy the request, request type, offset, length, pointer to a "
+"buffer, and a bunch of \"user-specific\" flags and fields that can help "
+"implement various hacks."
+msgstr ""
+"A estrutura `bio` é usada para todas e quaisquer operações de entrada/saída "
+"relacionadas ao GEOM. Basicamente, ela contém informações sobre qual "
+"dispositivo ('provider') deve satisfazer a solicitação, tipo de solicitação, "
+"deslocamento, comprimento, ponteiro para um buffer e um conjunto de flags e "
+"campos \"específicos do usuário\" que podem ajudar a implementar vários "
+"ajustes."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:246
+msgid ""
+"The important thing here is that ``bio``s are handled asynchronously. That "
+"means that, in most parts of the code, there is no analogue to userland's "
+"man:read[2] and man:write[2] calls that do not return until a request is "
+"done. Rather, a developer-supplied function is called as a notification "
+"when the request gets completed (or results in error)."
+msgstr ""
+"O importante aqui é que os ``bio``s são manipulados de forma assíncrona. "
+"Isso significa que, na maioria das partes do código, não há um análogo das "
+"chamadas man:read[2] e man:write[2] do espaço do usuário que não retornam "
+"até que uma solicitação seja concluída. Em vez disso, uma função fornecida "
+"pelo desenvolvedor é chamada como uma notificação quando a solicitação é "
+"concluída (ou resulta em erro)."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:250
+msgid ""
+"The asynchronous programming model (also called \"event-driven\") is "
+"somewhat harder than the much more used imperative one used in userland (at "
+"least it takes a while to get used to it). In some cases the helper "
+"routines `g_write_data`() and `g_read_data`() can be used, but __not "
+"always__. In particular, they cannot be used when a mutex is held; for "
+"example, the GEOM topology mutex or the internal mutex held during the `."
+"start`() and `.stop`() functions."
+msgstr ""
+"O modelo de programação assíncrono (também chamado de \"event-driven\") é um "
+"pouco mais difícil do que o muito usado modelo imperativo usado no espaço do "
+"usuário (pelo menos leva um tempo para se acostumar). Em alguns casos, as "
+"rotinas auxiliares `g_write_data()` e `g_read_data()` podem ser usadas, mas "
+"__nem sempre__. Em particular, elas não podem ser usadas quando um mutex é "
+"mantido; por exemplo, o mutex de topologia GEOM ou o mutex interno mantido "
+"durante as funções `.start()` e `.stop()`."
+
+#. type: Title ==
+#: documentation/content/en/articles/geom-class/_index.adoc:252
+#, no-wrap
+msgid "On GEOM Programming"
+msgstr "Programação GEOM"
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:255
+#, no-wrap
+msgid "Ggate"
+msgstr "Ggate"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:259
+msgid ""
+"If maximum performance is not needed, a much simpler way of making a data "
+"transformation is to implement it in userland via the ggate (GEOM gate) "
+"facility. Unfortunately, there is no easy way to convert between, or even "
+"share code between the two approaches."
+msgstr ""
+"Se o desempenho máximo não for necessário, uma maneira muito mais simples de "
+"fazer uma transformação de dados é implementá-lo na área do usuário por meio "
+"do recurso ggate (GEOM gate). Infelizmente, não existe uma maneira fácil de "
+"converter ou até mesmo compartilhar código entre as duas abordagens."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:261
+#, no-wrap
+msgid "GEOM Class"
+msgstr "Classe GEOM"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:266
+msgid ""
+"GEOM classes are transformations on the data. These transformations can be "
+"combined in a tree-like fashion. Instances of GEOM classes are called "
+"__geoms__."
+msgstr ""
+"As classes GEOM são transformações nos dados. Essas transformações podem ser "
+"combinadas de maneira semelhante a uma árvore. As instâncias de classes GEOM "
+"são chamadas de __geoms__."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:268
+msgid ""
+"Each GEOM class has several \"class methods\" that get called when there is "
+"no geom instance available (or they are simply not bound to a single "
+"instance):"
+msgstr ""
+"Cada classe GEOM tem vários \"métodos de classe\" que são chamados quando "
+"não há uma instância geom disponível (ou simplesmente não estão vinculados a "
+"uma única instância):"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:270
+msgid ""
+"`.init` is called when GEOM becomes aware of a GEOM class (when the kernel "
+"module gets loaded.)"
+msgstr ""
+"O `.init` é chamado quando o GEOM toma conhecimento de uma classe GEOM ("
+"quando o módulo do kernel é carregado.)"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:271
+msgid ""
+"`.fini` gets called when GEOM abandons the class (when the module gets "
+"unloaded)"
+msgstr ""
+"O `.fini` é chamado quando o GEOM abandona a classe (quando o módulo é "
+"descarregado)"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:272
+msgid ""
+"`.taste` is called next, once for each provider the system has available. If "
+"applicable, this function will usually create and start a geom instance."
+msgstr ""
+"O `.taste` é chamado em seguida, uma vez para cada provider que o sistema "
+"tem disponível. Se aplicável, esta função geralmente criará e iniciará uma "
+"instância geom."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:273
+msgid "`.destroy_geom` is called when the geom should be disbanded"
+msgstr "O `.destroy_geom` é chamado quando o geom deve ser desmontado"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:274
+msgid ""
+"`.ctlconf` is called when user requests reconfiguration of existing geom"
+msgstr ""
+"O `.ctlconf` é chamado quando o usuário solicita a reconfiguração do geom "
+"existente"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:276
+msgid ""
+"Also defined are the GEOM event functions, which will get copied to the geom "
+"instance."
+msgstr ""
+"Também são definidas as funções de evento GEOM, que serão copiadas para a "
+"instância geom."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:278
+msgid ""
+"Field `.geom` in the `g_class` structure is a LIST of geoms instantiated "
+"from the class."
+msgstr ""
+"O campo `.geom` na estrutura `g_class` é uma LISTA de geoms instanciados a "
+"partir da classe."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:280
+msgid "These functions are called from the g_event kernel thread."
+msgstr "Estas funções são chamadas a partir da thread g_event do kernel."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:282
+#, no-wrap
+msgid "Softc"
+msgstr "Softc"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:288
+msgid ""
+"The name \"softc\" is a legacy term for \"driver private data\". The name "
+"most probably comes from the archaic term \"software control block\". In "
+"GEOM, it is a structure (more precise: pointer to a structure) that can be "
+"attached to a geom instance to hold whatever data is private to the geom "
+"instance. Most GEOM classes have the following members:"
+msgstr ""
+"O nome \"softc\" é um termo legado para \"dados privados do driver\". O nome "
+"provavelmente vem do termo arcaico \"bloco de controle de software\". No "
+"GEOM, é uma estrutura (mais precisamente, um ponteiro para uma estrutura) "
+"que pode ser anexada a uma instância geom para manter quaisquer dados que "
+"sejam privados à instância geom. A maioria das classes GEOM tem os seguintes "
+"membros:"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:290
+msgid "`struct g_provider *provider` : The \"provider\" this geom instantiates"
+msgstr ""
+"`struct g_provider *provider`: Instância geom criada a partir do provider "
+"correspondente"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:291
+msgid "`uint16_t n_disks` : Number of consumer this geom consumes"
+msgstr ""
+"`uint16_t n_disks`: Número de consumidores que esta instância geom consome"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:292
+msgid ""
+"`struct g_consumer \\**disks` : Array of `struct g_consumer*`. (It is not "
+"possible to use just single indirection because struct g_consumer* are "
+"created on our behalf by GEOM)."
+msgstr ""
+"`struct g_consumer \\**disks`: Array de `struct g_consumer*`. (Não é "
+"possível usar apenas uma única indireção porque os `struct g_consumer*` são "
+"criados em nosso nome pelo GEOM)."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:295
+msgid ""
+"The `softc` structure contains all the state of geom instance. Every geom "
+"instance has its own softc."
+msgstr ""
+"A estrutura `softc` contém todo o estado da instância geom. Cada instância "
+"geom tem sua própria estrutura `softc`."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:297
+#, no-wrap
+msgid "Metadata"
+msgstr "Metadados"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:300
+msgid ""
+"Format of metadata is more-or-less class-dependent, but MUST start with:"
+msgstr ""
+"O formato dos metadados é mais ou menos dependente da classe, mas DEVE "
+"começar com:"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:302
+msgid "16 byte buffer for null-terminated signature (usually the class name)"
+msgstr ""
+"Buffer de 16 bytes para uma assinatura de terminação nula (geralmente o nome "
+"da classe)"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:303
+msgid "uint32 version ID"
+msgstr "ID da versão uint32"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:305
+msgid ""
+"It is assumed that geom classes know how to handle metadata with version "
+"ID's lower than theirs."
+msgstr ""
+"Assume-se que as classes geom sabem como lidar com metadados com ID de "
+"versão menores que os deles."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:307
+msgid ""
+"Metadata is located in the last sector of the provider (and thus must fit in "
+"it)."
+msgstr ""
+"Os metadados estão localizados no último setor do provedor (e, portanto, "
+"devem caber nele)."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:309
+msgid ""
+"(All this is implementation-dependent but all existing code works like that, "
+"and it is supported by libraries.)"
+msgstr ""
+"(Tudo isso depende da implementação, mas todo o código existente funciona "
+"assim, e é suportado por bibliotecas.)"
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:311
+#, no-wrap
+msgid "Labeling/creating a GEOM"
+msgstr "Rotulando/criando um GEOM"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:314
+msgid "The sequence of events is:"
+msgstr "A sequência de eventos é:"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:316
+msgid "user calls man:geom[8] utility (or one of its hardlinked friends)"
+msgstr ""
+"O usuário chama o utilitário man:geom[8] (ou um comandos alternativos para o "
+"mesmo utilitário)"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:317
+msgid ""
+"the utility figures out which geom class it is supposed to handle and "
+"searches for [.filename]#geom_CLASSNAME.so# library (usually in [.filename]#/"
+"lib/geom#)."
+msgstr ""
+"O utilitário determina qual classe geom ele deve manipular e procura pela "
+"biblioteca [.filename]#geom_CLASSNAME.so# (geralmente em [.filename]#/lib/"
+"geom#)."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:318
+msgid ""
+"it man:dlopen[3]-s the library, extracts the definitions of command-line "
+"parameters and helper functions."
+msgstr ""
+"O utilitário utiliza a função man:dlopen[3] para carregar dinamicamente a "
+"biblioteca, extrair as definições dos parâmetros de linha de comando e "
+"funções auxiliares."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:320
+msgid "In the case of creating/labeling a new geom, this is what happens:"
+msgstr "No caso da criação/rotulação de um novo geom, isso é o que acontece:"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:322
+msgid ""
+"man:geom[8] looks in the command-line argument for the command (usually "
+"`label`), and calls a helper function."
+msgstr ""
+"O comando man:geom[8] procura na linha de comando pelo comando (geralmente "
+"`label`) e chama uma função auxiliar correspondente."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:323
+msgid ""
+"The helper function checks parameters and gathers metadata, which it "
+"proceeds to write to all concerned providers."
+msgstr ""
+"A função auxiliar verifica parâmetros e reúne metadados, que são gravados em "
+"todos os provedores envolvidos."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:324
+msgid ""
+"This \"spoils\" existing geoms (if any) and initializes a new round of "
+"\"tasting\" of the providers. The intended geom class recognizes the "
+"metadata and brings the geom up."
+msgstr ""
+"Isso \"anula\" os geoms existentes (se houver) e inicializa uma nova rodada "
+"de \"degustação\" dos providers. A classe geom pretendida reconhece os "
+"metadados e coloca o geom em funcionamento."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:326
+msgid ""
+"(The above sequence of events is implementation-dependent but all existing "
+"code works like that, and it is supported by libraries.)"
+msgstr ""
+"(A sequência de eventos acima é dependente da implementação, mas todo o "
+"código existente funciona assim, e é suportado pelas bibliotecas.)"
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:328
+#, no-wrap
+msgid "GEOM Command Structure"
+msgstr "Estrutura do Comando GEOM"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:332
+msgid ""
+"The helper [.filename]#geom_CLASSNAME.so# library exports `class_commands` "
+"structure, which is an array of `struct g_command` elements. Commands are "
+"of uniform format and look like:"
+msgstr ""
+"A biblioteca auxiliar [.filename]#geom_CLASSNAME.so# exporta a estrutura "
+"`class_commands`, que é um array de elementos `struct g_command`. Os "
+"comandos têm um formato uniforme e se parecem com:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:336
+#, no-wrap
+msgid " verb [-options] geomname [other]\n"
+msgstr " verb [-options] geomname [other]\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:339
+msgid "Common verbs are:"
+msgstr "Verbos comuns são:"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:341
+msgid ""
+"label - to write metadata to devices so they can be recognized at tasting "
+"and brought up in geoms"
+msgstr ""
+"label - para escrever metadados nos dispositivos para que possam ser "
+"reconhecidos durante o processo de \"tasting\" e trazidos à tona em geoms"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:342
+msgid "destroy - to destroy metadata, so the geoms get destroyed"
+msgstr ""
+"destroy - para destruir metadados, fazendo com que os geoms sejam destruídos"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:344
+msgid "Common options are:"
+msgstr "Opções comuns são:"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:346
+msgid "`-v` : be verbose"
+msgstr "`-v` : ser verboso (mostrar mais informações)"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:347
+msgid "`-f` : force"
+msgstr "`-f` : forçar"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:351
+msgid ""
+"Many actions, such as labeling and destroying metadata can be performed in "
+"userland. For this, `struct g_command` provides field `gc_func` that can be "
+"set to a function (in the same [.filename]#.so#) that will be called to "
+"process a verb. If `gc_func` is NULL, the command will be passed to kernel "
+"module, to `.ctlreq` function of the geom class."
+msgstr ""
+"Muitas ações, como rotular e destruir metadados, podem ser executadas no "
+"espaço de usuário. Para isso, `struct g_command` fornece o campo `gc_func`, "
+"que pode ser definido como uma função (no mesmo arquivo [.filename]#.so#) "
+"que será chamada para processar um verbo. Se `gc_func` for NULL, o comando "
+"será passado para o módulo do kernel, para a função `.ctlreq` da classe geom."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:353
+#, no-wrap
+msgid "Geoms"
+msgstr "Geoms"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:357
+msgid ""
+"Geoms are instances of GEOM classes. They have internal data (a softc "
+"structure) and some functions with which they respond to external events."
+msgstr ""
+"Os Geoms são instâncias das classes GEOM. Eles têm dados internos (uma "
+"estrutura softc) e algumas funções com as quais eles respondem a eventos "
+"externos."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:359
+msgid "The event functions are:"
+msgstr "As funções de evento são:"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:361
+msgid "`.access` : calculates permissions (read/write/exclusive)"
+msgstr "`.access` : calcula as permissões (leitura/escrita/exclusiva)"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:362
+msgid "`.dumpconf` : returns XML-formatted information about the geom"
+msgstr ""
+"`.dumpconf` : uma função que retorna informações formatadas em XML sobre o "
+"geom"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:363
+msgid "`.orphan` : called when some underlying provider gets disconnected"
+msgstr "`.orphan` : chamado quando algum provedor subjacente é desconectado"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:364
+msgid "`.spoiled` : called when some underlying provider gets written to"
+msgstr "`.spoiled` : chamado quando algum provedor subjacente é escrito"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:365
+msgid "`.start` : handles I/O"
+msgstr "`.start` : lida com operações de entrada/saída (I/O)"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:367
+msgid ""
+"These functions are called from the `g_down` kernel thread and there can be "
+"no sleeping in this context, (see definition of sleeping elsewhere) which "
+"limits what can be done quite a bit, but forces the handling to be fast."
+msgstr ""
+"Essas funções são chamadas a partir da thread do kernel `g_down` e não é "
+"permitido dormir nesse contexto (consulte a definição de dormir em outro "
+"lugar), o que limita bastante o que pode ser feito, mas força o tratamento a "
+"ser rápido."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:369
+msgid ""
+"Of these, the most important function for doing actual useful work is the `."
+"start`() function, which is called when a BIO request arrives for a provider "
+"managed by a instance of geom class."
+msgstr ""
+"A função mais importante para realizar trabalho útil é a função `.start()`, "
+"que é chamada quando uma solicitação BIO chega para um provider gerenciado "
+"por uma instância de classe geom."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:371
+#, no-wrap
+msgid "GEOM Threads"
+msgstr "Threads GEOM"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:374
+msgid "There are three kernel threads created and run by the GEOM framework:"
+msgstr ""
+"Existem três threads de kernel criados e executados pelo framework GEOM:"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:376
+msgid ""
+"`g_down` : Handles requests coming from high-level entities (such as a "
+"userland request) on the way to physical devices"
+msgstr ""
+"`g_down` : responsável por lidar com solicitações vindas de entidades de "
+"alto nível (como uma solicitação do espaço do usuário) a caminho de "
+"dispositivos físicos"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:377
+msgid ""
+"`g_up` : Handles responses from device drivers to requests made by higher-"
+"level entities"
+msgstr ""
+"`g_up` : Lida com as respostas dos drivers de dispositivo às solicitações "
+"feitas por entidades de nível superior"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:378
+msgid ""
+"`g_event` : Handles all other cases: creation of geom instances, access "
+"counting, \"spoil\" events, etc."
+msgstr ""
+"`g_event` : lida com todos os outros casos: criação de instâncias de geom, "
+"contagem de acesso, eventos de \"spoil\", etc."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:380
+msgid ""
+"When a user process issues \"read data X at offset Y of a file\" request, "
+"this is what happens:"
+msgstr ""
+"Quando um processo do usuário emite uma solicitação para \"ler dados X no "
+"deslocamento Y de um arquivo\", o seguinte acontece:"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:382
+msgid ""
+"The filesystem converts the request into a struct bio instance and passes it "
+"to the GEOM subsystem. It knows what geom instance should handle it because "
+"filesystems are hosted directly on a geom instance."
+msgstr ""
+"O sistema de arquivos converte o pedido em uma instância struct bio e o "
+"transmite para o subsistema GEOM. Ele sabe o que a instância geom deve "
+"manipular porque os sistemas de arquivos são hospedados diretamente em uma "
+"instância geom."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:383
+msgid ""
+"The request ends up as a call to the `.start`() function made on the g_down "
+"thread and reaches the top-level geom instance."
+msgstr ""
+"A requisição termina como uma chamada para a função `.start`() feita para a "
+"thread g_down e atinge a instância geom de nível superior."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:384
+msgid ""
+"This top-level geom instance (for example the partition slicer) determines "
+"that the request should be routed to a lower-level instance (for example the "
+"disk driver). It makes a copy of the bio request (bio requests _ALWAYS_ need "
+"to be copied between instances, with `g_clone_bio`()!), modifies the data "
+"offset and target provider fields and executes the copy with `g_io_request`()"
+msgstr ""
+"Esta instância geom de nível superior (por exemplo, o \"partition slicer\") "
+"determina que a solicitação deve ser encaminhada para uma instância de nível "
+"inferior (por exemplo, o driver de disco). Ela faz uma cópia da solicitação "
+"bio (solicitações bio PRECISAM SEMPRE ser copiadas entre instâncias, com "
+"`g_clone_bio`()!), modifica o deslocamento dos dados e os campos do provider "
+"de destino e executa a cópia com `g_io_request`()"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:385
+msgid ""
+"The disk driver gets the bio request also as a call to `.start`() on the "
+"`g_down` thread. It talks to hardware, gets the data back, and calls "
+"`g_io_deliver`() on the bio."
+msgstr ""
+"O driver de disco também recebe a requisição bio como uma chamada para `."
+"start`() na thread `g_down`. Ele conversa com o hardware, recebe os dados de "
+"volta e chama `g_io_deliver`() na bio."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:386
+msgid ""
+"Now, the notification of bio completion \"bubbles up\" in the `g_up` thread. "
+"First the partition slicer gets `.done`() called in the `g_up` thread, it "
+"uses information stored in the bio to free the cloned `bio` structure (with "
+"`g_destroy_bio`()) and calls `g_io_deliver`() on the original request."
+msgstr ""
+"Agora, a notificação da conclusão do bio \"sobe\" na thread `g_up`. "
+"Primeiro, o particionador recebe `.done`() chamado na thread `g_up`, usa as "
+"informações armazenadas no bio para liberar a estrutura de `bio` clonada ("
+"com `g_destroy_bio`()) e chama `g_io_deliver`() no pedido original."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:387
+msgid "The filesystem gets the data and transfers it to userland."
+msgstr "O sistema de arquivos obtém os dados e os transfere para o usuário."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:389
+msgid ""
+"See man:g_bio[9] man page for information how the data is passed back and "
+"forth in the `bio` structure (note in particular the `bio_parent` and "
+"`bio_children` fields and how they are handled)."
+msgstr ""
+"Consulte a página do manual man:g_bio[9] para obter informações sobre como "
+"os dados são passados de um lado para o outro na estrutura `bio` (observe em "
+"particular os campos `bio_parent` e `bio_children` e como eles são "
+"manipulados)."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:392
+msgid ""
+"One important feature is: __THERE CAN BE NO SLEEPING IN G_UP AND G_DOWN "
+"THREADS__. This means that none of the following things can be done in "
+"those threads (the list is of course not complete, but only informative):"
+msgstr ""
+"Uma característica importante é que __ NÃO PODEM HAVER CHAMADAS DE FUNÇÃO "
+"QUE BLOQUEIEM O PROCESSO (DURMAM) NAS THREADS G_UP E G_DOWN__. Isso "
+"significa que nenhuma das seguintes coisas pode ser feita nesses threads (a "
+"lista é apenas informativa e não completa):"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:394
+msgid "Calls to `msleep`() and `tsleep`(), obviously."
+msgstr "Chamadas para `msleep`() e `tsleep`(), obviamente."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:395
+msgid ""
+"Calls to `g_write_data`() and `g_read_data`(), because these sleep between "
+"passing the data to consumers and returning."
+msgstr ""
+"Chamadas para `g_write_data`() e `g_read_data()`, pois elas dormem entre a "
+"passagem dos dados para os consumidores e o retorno."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:396
+msgid "Waiting for I/O."
+msgstr "Aguardando I/O."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:397
+msgid "Calls to man:malloc[9] and `uma_zalloc`() with `M_WAITOK` flag set"
+msgstr ""
+"Chamadas a man:malloc[9] e `uma_zalloc`() com a flag `M_WAITOK` definida"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:398
+msgid "sx and other sleepable locks"
+msgstr "sx e outros tipos de bloqueios sleepable"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:402
+msgid ""
+"This restriction is here to stop GEOM code clogging the I/O request path, "
+"since sleeping is usually not time-bound and there can be no guarantees on "
+"how long will it take (there are some other, more technical reasons also). "
+"It also means that there is not much that can be done in those threads; for "
+"example, almost any complex thing requires memory allocation. Fortunately, "
+"there is a way out: creating additional kernel threads."
+msgstr ""
+"Essa restrição foi imposta para evitar que o código GEOM obstrua o caminho "
+"de solicitação de E/S, já que a espera geralmente não está relacionada ao "
+"tempo e não há garantias sobre quanto tempo levará (há outras razões "
+"técnicas também). Isso também significa que não há muito o que se possa "
+"fazer nessas threads; por exemplo, quase qualquer coisa complexa requer "
+"alocação de memória. Felizmente, há uma saída: criar threads adicionais do "
+"kernel."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:404
+#, no-wrap
+msgid "Kernel Threads for Use in GEOM Code"
+msgstr "Threads de kernel para uso no código GEOM"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:407
+msgid ""
+"Kernel threads are created with man:kthread_create[9] function, and they are "
+"sort of similar to userland threads in behavior, only they cannot return to "
+"caller to signify termination, but must call man:kthread_exit[9]."
+msgstr ""
+"Threads do Kernel são criados com a função man:kthread_create[9], e eles são "
+"parecidos com threads de espaço de usuário em termos de comportamento, "
+"apenas que não podem retornar ao chamador para indicar término, mas devem "
+"chamar man:kthread_exit[9]."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:410
+msgid ""
+"In GEOM code, the usual use of threads is to offload processing of requests "
+"from `g_down` thread (the `.start`() function). These threads look like "
+"\"event handlers\": they have a linked list of event associated with them "
+"(on which events can be posted by various functions in various threads so it "
+"must be protected by a mutex), take the events from the list one by one and "
+"process them in a big `switch`() statement."
+msgstr ""
+"No código do GEOM, o uso usual de threads é para descarregar o processamento "
+"de solicitações da thread `g_down` (a função `.start()`). Essas threads se "
+"parecem com \"manipuladores de eventos\": elas têm uma lista vinculada de "
+"eventos associados a elas (na qual eventos podem ser postados por várias "
+"funções em várias threads, então ela deve ser protegida por um mutex), pegam "
+"os eventos da lista um por um e os processam em uma grande declaração "
+"`switch()`."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:415
+msgid ""
+"The main benefit of using a thread to handle I/O requests is that it can "
+"sleep when needed. Now, this sounds good, but should be carefully thought "
+"out. Sleeping is well and very convenient but can very effectively destroy "
+"performance of the geom transformation. Extremely performance-sensitive "
+"classes probably should do all the work in `.start`() function call, taking "
+"great care to handle out-of-memory and similar errors."
+msgstr ""
+"O principal benefício de usar uma thread para lidar com as solicitações de E/"
+"S é que ela pode dormir quando necessário. Agora, isso parece bom, mas deve "
+"ser cuidadosamente pensado. Dormir é bem conveniente, mas pode destruir "
+"efetivamente o desempenho da transformação geom. As classes extremamente "
+"sensíveis ao desempenho provavelmente devem fazer todo o trabalho na chamada "
+"de função `.start()`, tendo muito cuidado para lidar com erros de falta de "
+"memória e similares."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:419
+msgid ""
+"The other benefit of having a event-handler thread like that is to serialize "
+"all the requests and responses coming from different geom threads into one "
+"thread. This is also very convenient but can be slow. In most cases, "
+"handling of `.done`() requests can be left to the `g_up` thread."
+msgstr ""
+"O outro benefício de ter uma thread de tratamento de eventos é a "
+"serialização de todas as solicitações e respostas vindas de diferentes "
+"threads do geom em uma única thread. Isso também é muito conveniente, mas "
+"pode ser lento. Na maioria dos casos, o tratamento de solicitações `.done`() "
+"pode ser deixado para a thread `g_up`."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:422
+msgid ""
+"Mutexes in FreeBSD kernel (see man:mutex[9]) have one distinction from their "
+"more common userland cousins - the code cannot sleep while holding a "
+"mutex). If the code needs to sleep a lot, man:sx[9] locks may be more "
+"appropriate. On the other hand, if you do almost everything in a single "
+"thread, you may get away with no mutexes at all."
+msgstr ""
+"Mutexes no kernel do FreeBSD (veja man:mutex[9]) possuem uma distinção em "
+"relação às suas contrapartes mais comuns no userland - o código não pode "
+"dormir enquanto segura um mutex. Se o código precisa dormir muito, as travas "
+"man:sx[9] podem ser mais apropriadas. Por outro lado, se você fizer quase "
+"tudo em um único thread, pode se livrar completamente do uso de mutexes."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/gjournal-desktop/_index.adoc b/documentation/content/pt-br/articles/gjournal-desktop/_index.adoc
index d25822402a..0b1b33e660 100644
--- a/documentation/content/pt-br/articles/gjournal-desktop/_index.adoc
+++ b/documentation/content/pt-br/articles/gjournal-desktop/_index.adoc
@@ -1,8 +1,11 @@
---
-title: Implementando o UFS Journaling em um Desktop PC
authors:
- - author: Manolis Kiagias
+ -
+ author: 'Manolis Kiagias'
email: manolis@FreeBSD.org
+description: 'Implementando o UFS Journaling em um Desktop PC'
+tags: ["UFS", "Journaling" , "Desktop", "FreeBSD"]
+title: 'Implementando o UFS Journaling em um Desktop PC'
trademarks: ["freebsd", "general"]
---
@@ -40,7 +43,7 @@ endif::[]
[.abstract-title]
Resumo
-Um sistema de arquivos com journaling usa um log para registrar todas as transações que ocorrem no sistema de arquivos e preserva sua integridade em caso de falha do sistema ou falta de energia. Embora ainda seja possível perder as alterações não salvas nos arquivos, o journaling elimina quase completamente a possibilidade de corrupção do sistema de arquivos causada por um desligamento abrupto. Ele também reduz ao mínimo o tempo necessário para a verificação do sistema de arquivos após a falha. Embora o sistema de arquivos UFS empregado pelo FreeBSD não implemente o journaling em si, a nova classe de journal do framework GEOM no FreeBSD 7._X_ pode ser usada para fornecer journaling independente do sistema de arquivos. Este artigo explica como implementar o UFS journaling em um cenário típico de PC de mesa.
+Um sistema de arquivos com journaling utiliza um log para registrar todas as transações que ocorrem no sistema de arquivos e preserva sua integridade em caso de falha do sistema ou queda de energia. Embora ainda seja possível perder alterações não salvas em arquivos, o journaling quase elimina completamente a possibilidade de corrupção do sistema de arquivos causada por uma desligamento incorreto. Ele também reduz ao mínimo o tempo necessário para a verificação do sistema de arquivos após uma falha. Embora o sistema de arquivos UFS utilizado pelo FreeBSD não implemente o journaling por si só, a nova classe de journaling do framework GEOM no FreeBSD 7._X_ pode ser usada para fornecer o journaling independente do sistema de arquivos. Este artigo explica como implementar o journaling do UFS em um cenário típico de um PC desktop.
'''
@@ -49,91 +52,91 @@ toc::[]
[[introduction]]
== Introdução
-Embora os servidores profissionais estejam geralmente bem protegidos contra desligamentos imprevistos, um desktop típico fica à mercê de falhas de energia, reinicializações acidentais e outros incidentes relacionados ao usuário que podem levar a paradas abruptas. Os soft updates costumam proteger o sistema de arquivos de maneira eficiente nestes casos, embora na maioria das vezes seja necessária uma longa verificação em background. Em raras ocasiões, a corrupção do sistema de arquivos atinge um ponto em que a intervenção do usuário é necessária e os dados podem ser perdidos.
+Enquanto servidores profissionais geralmente estão bem protegidos contra desligamentos imprevistos, os desktops típicos estão sujeitos a quedas de energia, reinicializações acidentais e outros incidentes relacionados ao usuário que podem levar a desligamentos incorretos. As Soft Updates geralmente protegem o sistema de arquivos de forma eficiente nesses casos, embora na maioria das vezes seja necessária uma verificação em segundo plano demorada. Em raras ocasiões, a corrupção do sistema de arquivos atinge um ponto em que é necessária a intervenção do usuário e dados podem ser perdidos.
O novo recurso de journaling fornecido pela GEOM pode ajudar bastante nesses cenários, praticamente eliminando o tempo necessário para a verificação do sistema de arquivos e garantindo que o sistema de arquivos seja rapidamente restaurado para um estado consistente.
-Este artigo descreve um procedimento para implementar o journaling do UFS em um cenário típico de PC de mesa (um único disco rígido usado para o sistema operacional e para os dados). Deve ser seguido durante uma nova instalação do FreeBSD. As etapas são simples o suficiente e não requerem interação excessivamente complexa com a linha de comando.
+Este artigo descreve um procedimento para implementar o journaling do UFS em um cenário típico de um PC desktop (um disco rígido usado tanto para o sistema operacional quanto para os dados). Ele deve ser seguido durante uma nova instalação do FreeBSD. Os passos são simples o suficiente e não exigem interações excessivamente complexas com a linha de comando.
Depois de ler este artigo, você saberá:
* Como reservar espaço para o journaling durante uma nova instalação do FreeBSD.
-* Como carregar e ativar o módulo `geom_journal` (ou como compilar o suporte para ele em seu kernel customizado).
-* Como converter seus sistemas de arquivos existentes para utilizar o journaling e quais opções usar em [.filename]#/etc/fstab# para montá-los.
+* Como carregar e ativar o módulo `geom_journal` (ou compilar o suporte para ele em seu kernel personalizado).
+* Como converter seus sistemas de arquivos existentes para utilizar journaling e quais opções usar no arquivo [.filename]#/etc/fstab# para montá-los.
* Como implementar o journaling em novas partições (vazias).
* Como solucionar problemas comuns associados ao journaling.
Antes de ler este artigo, você deve ser capaz de:
* Entender os conceitos básicos do UNIX(R) e do FreeBSD.
-* Estar familiarizado com o procedimento de instalação do FreeBSD e com o utilitário sysinstall.
+* Estar familiarizado com o procedimento de instalação do FreeBSD e com a ferramenta sysinstall.
[WARNING]
====
-O procedimento descrito aqui é destinado a preparar uma nova instalação na qual ainda não temos nenhum dado real do usuário é armazenado no disco. Embora seja possível modificar e estender este procedimento para sistemas já em produção, você deve efetuar o _backup_ de todos os dados importantes antes de fazer isso. Mexer com discos e partições em um baixo nível pode levar a erros fatais e a perda de dados.
+A procedimento descrito aqui destina-se a preparar uma nova instalação na qual ainda não existe nenhum dado do usuário armazenado no disco. Embora seja possível modificar e estender este procedimento para sistemas já em produção, você deve fazer um _backup_ de todos os dados importantes antes de fazê-lo. Mexer com discos e partições em um nível baixo pode levar a erros fatais e a perda de dados.
====
[[understanding-journaling]]
== Compreendendo o journaling no FreeBSD
-O journaling fornecido pelo GEOM no FreeBSD 7._X_ não é específico do sistema de arquivos (diferentemente do sistema de arquivos ext3 no Linux(R)), funcionando a nível de bloco. Embora isso signifique que ele possa ser aplicado a sistemas de arquivos diferentes, no FreeBSD 7.0-RELEASE, ele só pode ser usado com o UFS2.
+O journaling fornecido pelo GEOM no FreeBSD 7._X_ não é específico do sistema de arquivos (ao contrário do sistema de arquivos ext3 no Linux(R)), mas funciona no nível de bloco. Embora isso signifique que ele possa ser aplicado a diferentes sistemas de arquivos, no FreeBSD 7.0-RELEASE, ele só pode ser usado no UFS2.
-Esta funcionalidade é fornecida pelo carregamento do módulo [.filename]#geom_journal.ko# no kernel (ou através da compilação de um kernel personalizado) e pelo uso do comando `gjournal` para configurar os sistemas de arquivos. Em geral, você gostaria de utilizar o journal em grandes sistemas de arquivos, como o [.filename]#/usr#. Você precisará no entanto (veja a seção seguinte) reservar algum espaço livre em disco para isso.
+Essa funcionalidade é fornecida carregando o módulo [.filename]#geom_journal.ko# no kernel (ou compilando-o em um kernel personalizado) e usando o comando `gjournal` para configurar os sistemas de arquivos. Em geral, você gostaria de registrar grandes sistemas de arquivos, como o [.filename]#/usr#. No entanto, você precisará reservar algum espaço livre em disco (consulte a próxima seção).
-Quando um sistema de arquivos é "journaled", é necessário algum espaço em disco para manter o próprio journal. O espaço em disco que contém os dados reais é chamado de __data provider__, enquanto o que contém o journal é chamado de __journal provider__. Os provedores de dados e de journal precisam estar em partições diferentes ao fazer o journaling de uma partição existente (não vazia). Ao fazer o journaling de uma nova partição, você tem a opção de usar um único provedor para os dados e o journal. Em todo caso, o comando `gjournal` combina os dois provedores para criar o sistema de arquivos journaled final. Por exemplo:
+Quando um sistema de arquivos é jornalizado, é necessário um espaço em disco para armazenar o próprio journal. O espaço em disco que contém os dados reais é chamado de __provedor de dados__ (data provider), enquanto o que contém o journal é chamado de __provedor de journal__ (journal provider). Os provedores de dados e de journal precisam estar em partições diferentes ao jornalizar uma partição existente (não vazia). Ao jornalizar uma nova partição, você tem a opção de usar um único provedor para ambos os dados e o journal. Em qualquer caso, o comando `gjournal` combina ambos os provedores para criar o sistema de arquivos final com journaling. Por exemplo:
-* Você deseja fazer o journaling do seu sistema de arquivos [.filename]#/usr#, armazenado em [.filename]#/dev/ad0s1f# (que já contém dados).
-* Você reservou algum espaço livre no disco, na partição [.filename]#/dev/ad0s1g#.
-* Usando o comando `gjournal`, um novo dispositivo [.filename]#/dev/ad0s1f.journal# é criado no qual o [.filename]#/dev/ad0s1f# é o data provider, e o [.filename]#/dev/ad0s1g# é o journal provider. Este novo dispositivo é então usado para todas as operações de arquivo posteriores.
+* Você deseja fazer o journaling do sistema de arquivos [.filename]#/usr#, armazenado em [.filename]#/dev/ad0s1f# (que já contém dados).
+* Você reservou um espaço livre em disco em uma partição em [/dev/ad0s1g].
+* Usando `gjournal`, um novo dispositivo [.filename]#/dev/ad0s1f.journal# é criado, onde [.filename]#/dev/ad0s1f# é o provedor de dados e [.filename]#/dev/ad0s1g# é o provedor de journal. Esse novo dispositivo é então usado para todas as operações de arquivo subsequentes.
-A quantidade de espaço em disco que você precisa reservar para o journal provider depende da carga de uso do sistema de arquivos e não do tamanho do data provider. Por exemplo, em um desktop típico de escritório, um journal provider de 1 GB para o sistema de arquivos [.filename]#/usr# será suficiente, enquanto uma máquina que lida com I/O de disco pesado (por exemplo, edição de vídeo) pode precisar de mais. Um kernel panic ocorrerá se o espaço do journal estiver esgotado antes de ter a chance de ser committed.
+A quantidade de espaço em disco que você precisa reservar para o provedor de journal depende da carga de uso do sistema de arquivos e não do tamanho do provedor de dados. Por exemplo, em um desktop de escritório típico, um provedor de journal de 1 GB para o sistema de arquivos [.filename]#/usr# será suficiente, enquanto uma máquina que lida com intensas operações E/S de disco (por exemplo, edição de vídeo) pode precisar de mais espaço. Ocorrerá um kernel panic se o espaço do journal for esgotado antes que ele tenha a chance de ser confirmado (committed).
[NOTE]
====
-É improvável que os tamanhos de journal sugeridos aqui causem problemas no uso típico de um desktop (como navegação na Web, processamento de texto e reprodução de arquivos de mídia). Se sua carga de trabalho incluir intensa atividade de disco, use a regra a seguir para obter a confiabilidade máxima: o tamanho da RAM deve caber em 30% do espaço do journal provider. Por exemplo, se o seu sistema tiver 1 GB de RAM, crie um journal provider de aproximadamente 3,3 GB. (Multiplique o tamanho total da sua RAM por 3.3 para obter o tamanho do journal).
+Os tamanhos de journal sugeridos aqui são altamente improváveis de causar problemas em uso típico de desktop, como navegação na web, processamento de texto e reprodução de arquivos de mídia. Se a sua carga de trabalho inclui atividade intensa de disco, utilize a seguinte regra para obter máxima confiabilidade: o tamanho da sua memória RAM deve caber em 30% do espaço do provedor de journal. Por exemplo, se o seu sistema possui 1 GB de RAM, crie um provedor de journal de aproximadamente 3,3 GB (multiplique o tamanho da sua RAM por 3,3 para obter o tamanho do journal).
====
-Para mais informações sobre journaling, leia a página de manual do man:gjournal[8].
+Para obter mais informações sobre o journaling, por favor, leia a página do manual man:gjournal[8].
[[reserve-space]]
== Etapas durante a instalação do FreeBSD
=== Reservando espaço para o journaling
-Normalmente, um desktop típico tem um disco rígido que armazena o sistema operacional e os dados do usuário. Indiscutivelmente, o esquema de particionamento padrão selecionado pelo sysinstall é mais ou menos adequado: Um desktop não precisa de uma grande partição [.filename]#/var#, enquanto o [.filename]#/usr# é alocado com a maior parte do espaço em disco, já que os dados do usuário e muitos pacotes são instalados em seus subdiretórios.
+Uma máquina desktop típica geralmente possui um único disco rígido que armazena tanto o sistema operacional quanto os dados do usuário. Argumentavelmente, o esquema de particionamento padrão selecionado pelo sysinstall é mais ou menos adequado: uma máquina desktop não precisa de uma partição [.filename]#/var# grande, enquanto a partição [.filename]#/usr# é alocada para a maior parte do espaço em disco, uma vez que os dados do usuário e muitos pacotes são instalados em seus subdiretórios.
-O particionamento padrão (aquele obtido pressionando kbd:[A] no editor de partições do FreeBSD, chamado Disklabel) não deixa nenhum espaço não alocado. Cada partição que será journaled, requer outra partição para journal. Como a partição [.filename]#/usr# é a maior, faz sentido reduzir ligeiramente essa partição, para obter o espaço necessário para o journaling.
+A partição padrão (aquela obtida ao pressionar kbd:[A] no editor de partição do FreeBSD, chamado Disklabel) não deixa nenhum espaço não alocado. Cada partição que será jornalizada requer outra partição para o journal. Como a partição [.filename]#/usr# é a maior, faz sentido reduzir levemente essa partição para obter o espaço necessário para o journaling.
-No nosso exemplo, um disco de 80 GB é usado. A captura de tela a seguir mostra as partições padrões criadas por Disklabel durante a instalação:
+No nosso exemplo, um disco de 80 GB está sendo utilizado. A captura de tela a seguir mostra as partições padrões criadas pelo Disklabel durante a instalação:
image::disklabel1.png[]
-Se isso é mais ou menos o que você precisa, é muito fácil se ajustar ao journaling. Simplesmente use as teclas de seta para mover o realce para a partição [.filename]#/usr# e pressione kbd:[D] para excluí-la.
+Se isso é mais ou menos o que você precisa, é muito fácil ajustar para o journaling. Basta usar as teclas de seta para mover o destaque para a partição [.filename]#/usr# e pressionar kbd:[D] para excluí-la.
-Agora, mova o realce para o nome do disco na parte superior da tela e pressione kbd:[C] para criar uma nova partição para [.filename]#/usr#. Esta nova partição deve ser menor em 1 GB (se você pretende registrar apenas [.filename]#/usr#), ou 2 GB (se você pretende registrar ambos [.filename]#/usr# e [.filename]#/var#). No pop-up exibido, opte por criar um sistema de arquivos e digite [.filename]#/usr# como o ponto de montagem.
+Agora, mova o destaque para o nome do disco no topo da tela e pressione kbd:[C] para criar uma nova partição para [.filename]#/usr#. Essa nova partição deve ser menor em 1 GB (se você pretende jornalizar apenas [.filename]#/usr#) ou 2 GB (se você pretende jornalizar tanto [.filename]#/usr# quanto [.filename]#/var#). No pop-up que aparece, opte por criar um sistema de arquivos e digite [.filename]#/usr# como ponto de montagem.
[NOTE]
====
-Você deve fazer o journal da partição [.filename]#/var#? Normalmente, o journaling faz sentido em partições grandes. Você pode decidir não fazer o journal do [.filename]#/var#, embora fazê-lo em um desktop típico não cause nenhum dano. Se o sistema de arquivos é usado levemente (bastante provável para um desktop) você pode querer alocar menos espaço em disco para o seu journal.
+Você deve jornalizar a partição [.filename]#/var#? Normalmente, o journaling faz sentido em partições bastante grandes. Você pode optar por não jornalizar [.filename]#/var#, embora fazê-lo em um desktop típico não cause problemas. Se o sistema de arquivos tiver um uso leve (o que é bastante provável para um desktop), você pode desejar alocar menos espaço em disco para o seu journal.
-Em nosso exemplo, nós fizemos o journal em ambos [.filename]#/usr# e [.filename]#/var#. Você pode, naturalmente, ajustar o procedimento às suas próprias necessidades.
+No nosso exemplo, nós aplicamos o journaling nas partições [.filename]#/usr# e [.filename]#/var#. Você pode, é claro, ajustar o procedimento de acordo com suas próprias necessidades.
====
-Para manter as coisas o mais fáceis o possível, vamos usar o sysinstall para criar as partições necessárias para o journaling. No entanto, durante a instalação, o sysinstall insiste em pedir um ponto de montagem para cada partição criada. Neste ponto, você não tem nenhum ponto de montagem para as partições que irão manter os journals, e na realidade você __nem precisa deles__. Estas não são partições que iremos montar em algum lugar.
+Para facilitar o processo o máximo possível, vamos usar o sysinstall para criar as partições necessárias para o journaling. No entanto, durante a instalação, o sysinstall insiste em solicitar um ponto de montagem para cada partição que você cria. Neste momento, você não possui nenhum ponto de montagem para as partições que irão armazenar os journals e, na realidade, você nem mesmo precisa deles. Essas não são partições que serão montadas em algum lugar.
-Para evitar esses problemas com o sysinstall, vamos criar as partições de journal como espaço de troca. O swap nunca é montado, e o sysinstall não tem problemas para criar tantas partições de troca quantas forem necessárias. Após a primeira reinicialização, o [.filename]#/etc/fstab# terá que ser editado, e as entradas extras do espaço de troca serão removidas.
+Para evitar esses problemas com o sysinstall, vamos criar as partições de journal como espaço de swap. O swap nunca é montado, e o sysinstall não tem problemas em criar quantas partições de swap forem necessárias. Após o primeiro reinício, será necessário editar o arquivo [.filename]#/etc/fstab# e remover as entradas de espaço de swap adicionais.
-Para criar o swap, use novamente as teclas de seta para mover o realce para a parte superior da tela do Disklabel, para que o nome do disco seja realçado. Em seguida, pressione kbd:[N], insira o tamanho desejado (_1024M_) e selecione "swap space" no menu pop-up exibido. Repita para cada journal que você deseja criar. Em nosso exemplo, criamos duas partições para fornecer os diários de [.filename]#/usr# e [.filename]#/var#. O resultado final é mostrado na seguinte captura de tela:
+Para criar a partição de swap, novamente use as teclas de seta para mover o destaque para o topo da tela do Disklabel, de modo que o próprio nome do disco seja destacado. Em seguida, pressione kbd:[N], insira o tamanho desejado (_1024M_) e selecione "swap space" no menu pop-up que aparece. Repita esse processo para cada journal que você deseja criar. No nosso exemplo, criaremos duas partições para fornecer os journals de [.filename]#/usr# e [.filename]#/var#. O resultado final é mostrado na captura de tela a seguir:
image::disklabel2.png[]
-Quando tiver concluído a criação das partições, sugerimos que você anote os nomes das partições e os pontos de montagem, para que possa consultar facilmente essas informações durante a fase de configuração. Isso ajudará a reduzir os erros que podem danificar sua instalação. A tabela a seguir mostra nossas anotações para a configuração de exemplo:
+Quando você tiver concluído a criação das partições, sugerimos que anote os nomes das partições e os pontos de montagem para que você possa se referir facilmente a essas informações durante a fase de configuração. Isso ajudará a evitar erros que possam danificar sua instalação. A tabela a seguir mostra nossas anotações para a configuração de exemplo:
.Partições e Journals
[cols="1,1,1", options="header"]
|===
-| Partições
-| Ponto de montagem
+| Partição
+| Ponto de Montagem
| Journal
|ad0s1d
@@ -145,12 +148,12 @@ Quando tiver concluído a criação das partições, sugerimos que você anote o
|ad0s1g
|===
-Continue a instalação como faria normalmente. No entanto, sugerimos que você adie a instalação de softwares de terceiros (pacotes) até que você configure completamente o journaling.
+Continue a instalação como você normalmente faria. No entanto, sugerimos que você adie a instalação de softwares de terceiros (pacotes) até ter configurado completamente o journaling.
[[first-boot]]
=== Inicializando pela primeira vez
-Seu sistema irá iniciar normalmente, mas você precisará editar o [.filename]#/etc/fstab# para remover as partições extras de swap que você criou para os journals. Normalmente, a partição swap que você irá usar é aquela com o sufixo "b" (por exemplo, ad0s1b no nosso exemplo). Remova todas as outras entradas de espaço swap e reinicialize para que o FreeBSD pare de usá-las.
+Seu sistema inicializará normalmente, mas você precisará editar o arquivo [.filename]#/etc/fstab# e remover as partições de swap extras que você criou para os journals. Normalmente, a partição de swap que você realmente usará é aquela com o sufixo "b" (por exemplo, ad0s1b em nosso exemplo). Remova todas as outras entradas de espaço de swap e reinicie para que o FreeBSD deixe de usá-las.
Quando o sistema voltar a funcionar, estaremos prontos para configurar o journaling.
@@ -158,32 +161,32 @@ Quando o sistema voltar a funcionar, estaremos prontos para configurar o journal
== Configurando o journaling
[[running-gjournal]]
-=== Executando o `gjournal`
+=== Executando o comando `gjournal`
-Tendo preparado todas as partições requeridas, é bastante fácil configurar o journaling. Nós precisaremos mudar para o modo de single user, então entre como `root` e digite:
+Depois de preparar todas as partições necessárias, é bastante fácil configurar o journaling. Será necessário mudar para o modo de usuário único (single user mode). Para isso, faça o login como `root` e digite o seguinte comando:
-[source,shell]
+[source, shell]
....
# shutdown now
....
-Pressione kbd:[Enter] para obter o shell padrão. Nós precisaremos desmontar as partições que serão registradas no diário, no nosso exemplo [.filename]#/usr# e [.filename]#/var#:
+Pressione kbd:[Enter] para obter o shell padrão. Agora, você precisará desmontar as partições que serão jornalizadas, no nosso exemplo [.filename]#/usr# e [.filename]#/var#:
-[source,shell]
+[source, shell]
....
# umount /usr /var
....
Carregue o módulo necessário para o journaling:
-[source,shell]
+[source, shell]
....
# gjournal load
....
-Agora, use suas anotações para determinar qual partição será usada para cada diário. Em nosso exemplo, [.filename]#/usr# é [.filename]#ad0s1f# e seu journal será [.filename]#ad0s1g#, enquanto [.filename]#/var# é [.filename]#ad0s1d# e será journaled para [.filename]#ad0s1h#. Os seguintes comandos são necessários:
+Agora, use suas anotações para determinar qual partição será usada para cada journal. No nosso exemplo, [.filename]#/usr# é [.filename]#ad0s1f# e seu journal será [.filename]#ad0s1g#, enquanto [.filename]#/var# é [.filename]#ad0s1d# e será jornalizada em [.filename]#ad0s1h#. Os seguintes comandos são necessários:
-[source,shell]
+[source, shell]
....
# gjournal label ad0s1f ad0s1g
GEOM_JOURNAL: Journal 2948326772: ad0s1f contains data.
@@ -196,9 +199,9 @@ GEOM_JOURNAL: Journal 3193218002: ad0s1h contains journal.
[NOTE]
====
-Se o último setor de qualquer partição for usado, o `gjournal` retornará um erro. Você terá que executar o comando usando o sinalizador `-f` para forçar uma substituição, ou seja:
+Se o último setor de qualquer uma das partições estiver em uso, o `gjournal` retornará um erro. Nesse caso, você precisará executar o comando usando a opção `-f` para forçar a sobrescrita. Por exemplo:
-[source,shell]
+[source, shell]
....
# gjournal label -f ad0s1d ad0s1h
....
@@ -206,9 +209,9 @@ Se o último setor de qualquer partição for usado, o `gjournal` retornará um
Como esta é uma nova instalação, é altamente improvável que qualquer coisa seja realmente sobrescrita.
====
-Neste ponto, dois novos dispositivos são criados, a saber [.filename]#ad0s1d.journal# e [.filename]#ad0s1f.journal#. Os quais representam as partições [.filename]#/var# e [.filename]#/usr# que temos que montar. Antes de montar, devemos definir o flag de Journal e limpar o flag de Soft Updates:
+Neste ponto, dois novos dispositivos são criados, chamados [.filename]#ad0s1d.journal# e [.filename]#ad0s1f.journal#. Eles representam as partições [.filename]#/var# e [.filename]#/usr# que devemos montar. No entanto, antes de montá-los, precisamos definir a flag de journaling neles e desativar a flag de Soft Updates:
-[source,shell]
+[source, shell]
....
# tunefs -J enable -n disable ad0s1d.journal
tunefs: gjournal set
@@ -219,15 +222,15 @@ tunefs: gjournal set
tunefs: soft updates cleared
....
-Agora, monte os novos dispositivos manualmente em seus respectivos locais (note que agora podemos usar a opção de montagem `async`):
+Agora, monte manualmente os novos dispositivos em seus respectivos locais (observe que agora podemos usar a opção de montagem `async`):
-[source,shell]
+[source, shell]
....
# mount -o async /dev/ad0s1d.journal /var
# mount -o async /dev/ad0s1f.journal /usr
....
-Edite o [.filename]#/etc/fstab# e atualize as entradas para [.filename]#/usr# e [.filename]#/var#:
+Edite o arquivo [.filename]#/etc/fstab# e atualize as entradas para [.filename]#/usr# e [.filename]#/var#:
[.programlisting]
....
@@ -240,16 +243,16 @@ Edite o [.filename]#/etc/fstab# e atualize as entradas para [.filename]#/usr# e
Certifique-se de que as entradas acima estão corretas ou você terá problemas para inicializar normalmente após o reboot!
====
-Finalmente, edite o [.filename]#/boot/loader.conf# e adicione a seguinte linha para que o módulo man:gjournal[8] seja carregado em cada boot:
+Por fim, edite o arquivo [.filename]#/boot/loader.conf# e adicione a seguinte linha para carregar o módulo man:gjournal[8] em cada inicialização do sistema:
[.programlisting]
....
geom_journal_load="YES"
....
-Parabéns! Seu sistema está agora configurado para journaling. Você pode digitar `exit` para retornar ao modo multiusuário ou reinicializar para testar sua configuração (recomendado). Durante a inicialização, você verá mensagens como as seguintes:
+Parabéns! Seu sistema está agora configurado para o journaling. Você pode digitar `exit` para retornar ao modo multiusuário ou reiniciar para testar sua configuração (recomendado). Durante a inicialização, você verá mensagens como as seguintes:
-[source,shell]
+[source, shell]
....
ad0: 76293MB XEC XE800JD-00HBC0 08.02D08 at ata0-master SATA150
GEOM_JOURNAL: Journal 2948326772: ad0s1g contains journal.
@@ -262,35 +265,35 @@ GEOM_JOURNAL: Journal ad0s1f clean.
Após um encerramento não limpo, as mensagens variam ligeiramente, ou seja:
-[source,shell]
+[source, shell]
....
GEOM_JOURNAL: Journal ad0s1d consistent.
....
-Isso geralmente significa que o man:gjournal[8] usou as informações no journal provider para retornar o sistema de arquivos a um estado consistente.
+Isso geralmente significa que o man:gjournal[8] utilizou as informações no journal provider para restaurar o sistema de arquivos a um estado consistente.
[[gjournal-new]]
=== Fazendo journaling de partições recém-criadas
-Embora o procedimento acima seja necessário para partições que fazem uso de journaling e que já contêm dados, o journaling de uma partição vazia é um pouco mais fácil, uma vez que os dados e o journal provider podem ser armazenados na mesma partição. Por exemplo, suponha que um novo disco tenha sido instalado e uma nova partição [.filename]#/dev/ad1s1d# tenha sido criada. Criar o journal seria tão simples quanto:
+Enquanto o procedimento acima é necessário para jornalizar partições que já contêm dados, jornalizar uma partição vazia é um pouco mais fácil, pois tanto o provedor de dados quanto o provedor de journal podem ser armazenados na mesma partição. Por exemplo, suponha que um novo disco tenha sido instalado e uma nova partição [.filename]#/dev/ad1s1d# tenha sido criada. Criar o journal seria tão simples quanto:
-[source,shell]
+[source, shell]
....
# gjournal label ad1s1d
....
-O tamanho do journal será 1 GB por padrão. Você pode ajustá-lo usando a opção `-s`. O valor pode ser dado em bytes, ou acrescentado por `K`, `M` ou `G` para indicar Kilobytes, Megabytes ou Gigabytes, respectivamente. Note que o comando `gjournal` não permitirá que você crie journals de tamanhos pequenos e inadequados.
+O tamanho do journal será de 1 GB por padrão. Você pode ajustá-lo usando a opção `-s`. O valor pode ser dado em bytes, ou pode ser seguido por `K`, `M` ou `G` para representar Kilobytes, Megabytes ou Gigabytes, respectivamente. Note que o `gjournal` não permitirá que você crie tamanhos de journal excessivamente pequenos e inadequados.
Por exemplo, para criar um journal de 2 GB, você poderia usar o seguinte comando:
-[source,shell]
+[source, shell]
....
# gjournal label -s 2G ad1s1d
....
-Você pode criar um sistema de arquivos em sua nova partição e ativar o journaling usando a opção `-J`:
+Em seguida, você pode criar um sistema de arquivos na sua nova partição e habilitar o journaling usando a opção `-J`:
-[source,shell]
+[source, shell]
....
# newfs -J /dev/ad1s1d.journal
....
@@ -298,17 +301,18 @@ Você pode criar um sistema de arquivos em sua nova partição e ativar o journa
[[configure-kernel]]
=== Adicionando suporte ao journaling no seu kernel personalizado
-Se você não deseja carregar o `geom_journal` como um módulo, você pode construir suas funções diretamente em seu kernel. Edite seu arquivo de configuração do kernel personalizado e verifique se ele inclui estas duas linhas:
+Se você não deseja carregar `geom_journal` como um módulo, você pode incorporar suas funções diretamente no seu kernel. Edite o arquivo de configuração do seu kernel personalizado e verifique se ele inclui as seguintes linhas:
[.programlisting]
....
options UFS_GJOURNAL # Note: This is already in GENERIC
+
options GEOM_JOURNAL # You will have to add this one
....
-Recompile e reinstale seu kernel seguindo as instruções extref:{handbook}kernelconfig[relevantes no Handbook do FreeBSD, kernelconfig].
+Recompile e reinstale o seu kernel seguindo as instruções relevantes no Handbook do FreeBSD
-Não se esqueça de remover a entrada relevante "load" do [.filename]#/boot/loader.conf# se você a usou anteriormente.
+Não se esqueça de remover a entrada relevante de "load" do arquivo [.filename]#/boot/loader.conf# se você a tiver usado anteriormente.
[[troubleshooting-gjournal]]
== Solução de problemas com journaling
@@ -317,22 +321,23 @@ A seção a seguir aborda as perguntas mais frequentes relacionadas a problemas
=== Estou recebendo um kernel panic durante períodos de alta atividade de disco. Como isso está relacionado ao journaling?
-O journal provavelmente se enche antes que ele tenha a chance de ser enviado (descarregado) para o disco. Lembre-se de que o tamanho do journal depende da carga de uso e não do tamanho do provedor de dados. Se a atividade do disco for alta, você precisará de uma partição maior para o journal. Veja a nota na seção <<understanding-journaling>>.
+O journal provavelmente fica cheio antes de ter a chance de ser confirmado (gravado) no disco. Lembre-se de que o tamanho do journal depende da carga de uso e não do tamanho do provedor de dados. Se a atividade do disco for intensa, será necessário uma partição maior para o journal. Consulte a nota na seção <<understanding-journaling,Compreendendo o Journaling>> para mais informações.
=== Eu cometi algum erro durante a configuração e não consigo inicializar normalmente agora. Isso pode ser resolvido de alguma forma?
-Você esqueceu (ou escreveu incorretamente) a entrada em [.filename]#/boot/loader.conf#, ou existem erros no seu arquivo [.filename]#/etc/fstab#. Estes erros geralmente são fáceis de corrigir. Pressione kbd:[Enter] para acessar o shell padrão do modo single user. Em seguida, localize a raiz do problema:
+Parece que você esqueceu (ou digitou incorretamente) a entrada no arquivo [.filename]#/boot/loader.conf# ou existem erros no arquivo [.filename]#/etc/fstab#. Esses erros geralmente são fáceis de corrigir. Pressione kbd:[Enter] para acessar o shell do sistema no modo de usuário unico. Em seguida, localize a raiz do problema:
-[source,shell]
+[source, shell]
....
# cat /boot/loader.conf
....
-Se a entrada `geom_journal_load` estiver ausente ou incorreta, os dispositivos registrados nunca serão criados. Carregue o módulo manualmente, monte todas as partições e continue com a inicialização do modo multi usuário:
+Se a entrada `geom_journal_load` estiver ausente ou digitada incorretamente, os dispositivos com journaling não serão criados. Carregue o módulo manualmente, monte todas as partições e continue com a inicialização em modo multiusuário:
-[source,shell]
+[source, shell]
....
# gjournal load
+
GEOM_JOURNAL: Journal 2948326772: ad0s1g contains journal.
GEOM_JOURNAL: Journal 3193218002: ad0s1h contains journal.
GEOM_JOURNAL: Journal 3193218002: ad0s1d contains data.
@@ -345,36 +350,36 @@ GEOM_JOURNAL: Journal ad0s1f clean.
(boot continues)
....
-Se, por outro lado, esta entrada estiver correta, dê uma olhada em [.filename]#/etc/fstab#. Você provavelmente encontrará uma entrada incorreta ou faltando. Nesse caso, monte todas as partições restantes manualmente e continue com o boot em modo multi-usuários.
+Por outro lado, se essa entrada estiver correta, verifique o arquivo [.filename]#/etc/fstab#. Provavelmente você encontrará uma entrada ausente ou digitada incorretamente. Nesse caso, monte todas as partições restantes manualmente e continue com a inicialização em modo multiusuário.
=== Posso remover o registro no journal e retornar ao meu sistema de arquivos padrão com o Soft Updates?
-Certo. Use o procedimento a seguir, que inverte as alterações. As partições que você criou para os provedores de journal podem ser usadas para outros propósitos, se você desejar.
+Claro. Use o seguinte procedimento, que reverte as alterações. As partições que você criou para os provedores de journal podem ser usadas para outros fins, se desejar.
-Faça login como `root` e alterne para o modo de usuário único:
+Faça login como `root` e altere para o modo de usuário único:
-[source,shell]
+[source, shell]
....
# shutdown now
....
Desmonte as partições journaled:
-[source,shell]
+[source, shell]
....
# umount /usr /var
....
Sincronize os journals:
-[source,shell]
+[source, shell]
....
# gjournal sync
....
Pare os provedores de journaling:
-[source,shell]
+[source, shell]
....
# gjournal stop ad0s1d.journal
# gjournal stop ad0s1f.journal
@@ -382,7 +387,7 @@ Pare os provedores de journaling:
Limpe os metadados de journaling de todos os dispositivos usados:
-[source,shell]
+[source, shell]
....
# gjournal clear ad0s1d
# gjournal clear ad0s1f
@@ -392,7 +397,7 @@ Limpe os metadados de journaling de todos os dispositivos usados:
Limpe o sinalizador de journaling do sistema de arquivos e restaure a flag do Soft Updates:
-[source,shell]
+[source, shell]
....
# tunefs -J disable -n enable ad0s1d
tunefs: gjournal cleared
@@ -405,13 +410,13 @@ tunefs: soft updates set
Remonte os dispositivos antigos à mão:
-[source,shell]
+[source, shell]
....
# mount -o rw /dev/ad0s1d /var
# mount -o rw /dev/ad0s1f /usr
....
-Edite o [.filename]#/etc/fstab# e restaure-o ao seu estado original:
+Edite o arquivo [.filename]#/etc/fstab# e restaure-o para seu estado original:
[.programlisting]
....
@@ -419,14 +424,14 @@ Edite o [.filename]#/etc/fstab# e restaure-o ao seu estado original:
/dev/ad0s1d /var ufs rw 2 2
....
-Finalmente, edite o [.filename]#/boot/loader.conf#, remova a entrada que carrega o módulo `geom_journal` e reinicie.
+Finalmente, edite o arquivo [.filename]#/boot/loader.conf#, remova a entrada que carrega o módulo `geom_journal` e reinicie o sistema.
[[further-reading]]
== Leitura Adicional
-Journaling é um recurso relativamente novo do FreeBSD e, como tal, ainda não está muito bem documentado. Você pode, no entanto, encontrar as seguintes referências adicionais úteis:
+O journaling é um recurso relativamente novo no FreeBSD e, portanto, ainda não está muito bem documentado. No entanto, você pode encontrar as seguintes referências adicionais úteis:
-* Uma extref:{handbook}geom[nova seção sobre journaling, geom-gjournal] agora faz parte do Handbook do FreeBSD.
-* https://lists.freebsd.org/pipermail/freebsd-current/2006-June/064043.html[Este post] em http://lists.FreeBSD.org/mailman/listinfo/freebsd-current[freebsd-current] pelo desenvolvedor do man:gjournal[8], Paweł Jakub Dawidek mailto:pjd@FreeBSD.org[pjd@FreeBSD.org].
-* https://lists.freebsd.org/pipermail/freebsd-questions/2008-April/173501.html[Este post] em http://lists.FreeBSD.org/mailman/listinfo/freebsd-questions[freebsd-questions] por Ivan Voras mailto:ivoras@FreeBSD.org[ivoras@FreeBSD.org].
-* As páginas de manual do man:gjournal[8] e man:geom[8].
+* A extref:{handbook}[nova seção sobre journaling, geom-gjournal] agora faz parte do FreeBSD Handbook.
+* https://lists.freebsd.org/pipermail/freebsd-current/2006-June/064043.html[Esta mensagem] na {freebsd-current} enviada por um desenvolvedor do man:gjournal[8]'s, `{pjd}`.
+* https://lists.freebsd.org/pipermail/freebsd-questions/2008-April/173501.html[Esta mensagem] na {freebsd-questions} enviada por `{ivoras}`.
+* As páginas de manual man:gjournal[8] e man:geom[8].
diff --git a/documentation/content/pt-br/articles/gjournal-desktop/_index.po b/documentation/content/pt-br/articles/gjournal-desktop/_index.po
new file mode 100644
index 0000000000..ce86348ed1
--- /dev/null
+++ b/documentation/content/pt-br/articles/gjournal-desktop/_index.po
@@ -0,0 +1,1348 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 10:28-0300\n"
+"PO-Revision-Date: 2023-05-15 19:36+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesgjournal-desktop_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Title =
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:1
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:11
+#, no-wrap
+msgid "Implementing UFS Journaling on a Desktop PC"
+msgstr "Implementando o UFS Journaling em um Desktop PC"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:50
+msgid ""
+"A journaling file system uses a log to record all transactions that take "
+"place in the file system, and preserves its integrity in the event of a "
+"system crash or power failure. Although it is still possible to lose "
+"unsaved changes to files, journaling almost completely eliminates the "
+"possibility of file system corruption caused by an unclean shutdown. It "
+"also shortens to a minimum the time required for after-failure file system "
+"checking. Although the UFS file system employed by FreeBSD does not "
+"implement journaling itself, the new journal class of the GEOM framework in "
+"FreeBSD 7._X_ can be used to provide file system independent journaling. "
+"This article explains how to implement UFS journaling on a typical desktop "
+"PC scenario."
+msgstr ""
+"Um sistema de arquivos com journaling utiliza um log para registrar todas as "
+"transações que ocorrem no sistema de arquivos e preserva sua integridade em "
+"caso de falha do sistema ou queda de energia. Embora ainda seja possível "
+"perder alterações não salvas em arquivos, o journaling quase elimina "
+"completamente a possibilidade de corrupção do sistema de arquivos causada "
+"por uma desligamento incorreto. Ele também reduz ao mínimo o tempo "
+"necessário para a verificação do sistema de arquivos após uma falha. Embora "
+"o sistema de arquivos UFS utilizado pelo FreeBSD não implemente o journaling "
+"por si só, a nova classe de journaling do framework GEOM no FreeBSD 7._X_ "
+"pode ser usada para fornecer o journaling independente do sistema de "
+"arquivos. Este artigo explica como implementar o journaling do UFS em um "
+"cenário típico de um PC desktop."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:52
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:56
+#, no-wrap
+msgid "Introduction"
+msgstr "Introdução"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:61
+msgid ""
+"While professional servers are usually well protected from unforeseen "
+"shutdowns, the typical desktop is at the mercy of power failures, accidental "
+"resets, and other user related incidents that can lead to unclean "
+"shutdowns. Soft Updates usually protect the file system efficiently in such "
+"cases, although most of the times a lengthy background check is required. "
+"On rare occasions, file system corruption reaches a point where user "
+"intervention is required and data may be lost."
+msgstr ""
+"Enquanto servidores profissionais geralmente estão bem protegidos contra "
+"desligamentos imprevistos, os desktops típicos estão sujeitos a quedas de "
+"energia, reinicializações acidentais e outros incidentes relacionados ao "
+"usuário que podem levar a desligamentos incorretos. As Soft Updates "
+"geralmente protegem o sistema de arquivos de forma eficiente nesses casos, "
+"embora na maioria das vezes seja necessária uma verificação em segundo plano "
+"demorada. Em raras ocasiões, a corrupção do sistema de arquivos atinge um "
+"ponto em que é necessária a intervenção do usuário e dados podem ser "
+"perdidos."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:63
+msgid ""
+"The new journaling capability provided by GEOM can greatly assist in such "
+"scenarios, by virtually eliminating the time required for file system "
+"checking, and ensuring that the file system is quickly restored to a "
+"consistent state."
+msgstr ""
+"O novo recurso de journaling fornecido pela GEOM pode ajudar bastante nesses "
+"cenários, praticamente eliminando o tempo necessário para a verificação do "
+"sistema de arquivos e garantindo que o sistema de arquivos seja rapidamente "
+"restaurado para um estado consistente."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:67
+msgid ""
+"This article describes a procedure for implementing UFS journaling on a "
+"typical desktop PC scenario (one hard disk used for both operating system "
+"and data). It should be followed during a fresh installation of FreeBSD. "
+"The steps are simple enough and do not require overly complex interaction "
+"with the command line."
+msgstr ""
+"Este artigo descreve um procedimento para implementar o journaling do UFS em "
+"um cenário típico de um PC desktop (um disco rígido usado tanto para o "
+"sistema operacional quanto para os dados). Ele deve ser seguido durante uma "
+"nova instalação do FreeBSD. Os passos são simples o suficiente e não exigem "
+"interações excessivamente complexas com a linha de comando."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:69
+msgid "After reading this article, you will know:"
+msgstr "Depois de ler este artigo, você saberá:"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:71
+msgid ""
+"How to reserve space for journaling during a new installation of FreeBSD."
+msgstr ""
+"Como reservar espaço para o journaling durante uma nova instalação do "
+"FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:72
+msgid ""
+"How to load and enable the `geom_journal` module (or build support for it in "
+"your custom kernel)."
+msgstr ""
+"Como carregar e ativar o módulo `geom_journal` (ou compilar o suporte para "
+"ele em seu kernel personalizado)."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:73
+msgid ""
+"How to convert your existing file systems to utilize journaling, and what "
+"options to use in [.filename]#/etc/fstab# to mount them."
+msgstr ""
+"Como converter seus sistemas de arquivos existentes para utilizar journaling "
+"e quais opções usar no arquivo [.filename]#/etc/fstab# para montá-los."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:74
+msgid "How to implement journaling in new (empty) partitions."
+msgstr "Como implementar o journaling em novas partições (vazias)."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:75
+msgid "How to troubleshoot common problems associated with journaling."
+msgstr "Como solucionar problemas comuns associados ao journaling."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:77
+msgid "Before reading this article, you should be able to:"
+msgstr "Antes de ler este artigo, você deve ser capaz de:"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:79
+msgid "Understand basic UNIX(R) and FreeBSD concepts."
+msgstr "Entender os conceitos básicos do UNIX(R) e do FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:80
+msgid ""
+"Be familiar with the installation procedure of FreeBSD and the sysinstall "
+"utility."
+msgstr ""
+"Estar familiarizado com o procedimento de instalação do FreeBSD e com a "
+"ferramenta sysinstall."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:86
+msgid ""
+"The procedure described here is intended for preparing a new installation "
+"where no actual user data is stored on the disk yet. While it is possible "
+"to modify and extend this procedure for systems already in production, you "
+"should _backup_ all important data before doing so. Messing around with "
+"disks and partitions at a low level can lead to fatal mistakes and data loss."
+msgstr ""
+"A procedimento descrito aqui destina-se a preparar uma nova instalação na "
+"qual ainda não existe nenhum dado do usuário armazenado no disco. Embora "
+"seja possível modificar e estender este procedimento para sistemas já em "
+"produção, você deve fazer um _backup_ de todos os dados importantes antes de "
+"fazê-lo. Mexer com discos e partições em um nível baixo pode levar a erros "
+"fatais e a perda de dados."
+
+#. type: Title ==
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:89
+#, no-wrap
+msgid "Understanding Journaling in FreeBSD"
+msgstr "Compreendendo o journaling no FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:93
+msgid ""
+"The journaling provided by GEOM in FreeBSD 7._X_ is not file system specific "
+"(unlike for example the ext3 file system in Linux(R)) but is functioning at "
+"the block level. Though this means it can be applied to different file "
+"systems, for FreeBSD 7.0-RELEASE, it can only be used on UFS2."
+msgstr ""
+"O journaling fornecido pelo GEOM no FreeBSD 7._X_ não é específico do "
+"sistema de arquivos (ao contrário do sistema de arquivos ext3 no Linux(R)), "
+"mas funciona no nível de bloco. Embora isso signifique que ele possa ser "
+"aplicado a diferentes sistemas de arquivos, no FreeBSD 7.0-RELEASE, ele só "
+"pode ser usado no UFS2."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:97
+msgid ""
+"This functionality is provided by loading the [.filename]#geom_journal.ko# "
+"module into the kernel (or building it into a custom kernel) and using the "
+"`gjournal` command to configure the file systems. In general, you would "
+"like to journal large file systems, like [.filename]#/usr#. You will need "
+"however (see the following section) to reserve some free disk space."
+msgstr ""
+"Essa funcionalidade é fornecida carregando o módulo [.filename]#geom_journal."
+"ko# no kernel (ou compilando-o em um kernel personalizado) e usando o "
+"comando `gjournal` para configurar os sistemas de arquivos. Em geral, você "
+"gostaria de registrar grandes sistemas de arquivos, como o [.filename]#/usr#"
+". No entanto, você precisará reservar algum espaço livre em disco (consulte "
+"a próxima seção)."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:104
+msgid ""
+"When a file system is journaled, some disk space is needed to keep the "
+"journal itself. The disk space that holds the actual data is referred to as "
+"the __data provider__, while the one that holds the journal is referred to "
+"as the __journal provider__. The data and journal providers need to be on "
+"different partitions when journaling an existing (non-empty) partition. "
+"When journaling a new partition, you have the option to use a single "
+"provider for both data and journal. In any case, the `gjournal` command "
+"combines both providers to create the final journaled file system. For "
+"example:"
+msgstr ""
+"Quando um sistema de arquivos é jornalizado, é necessário um espaço em disco "
+"para armazenar o próprio journal. O espaço em disco que contém os dados "
+"reais é chamado de __provedor de dados__ (data provider), enquanto o que "
+"contém o journal é chamado de __provedor de journal__ (journal provider). Os "
+"provedores de dados e de journal precisam estar em partições diferentes ao "
+"jornalizar uma partição existente (não vazia). Ao jornalizar uma nova "
+"partição, você tem a opção de usar um único provedor para ambos os dados e o "
+"journal. Em qualquer caso, o comando `gjournal` combina ambos os provedores "
+"para criar o sistema de arquivos final com journaling. Por exemplo:"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:106
+msgid ""
+"You wish to journal your [.filename]#/usr# file system, stored in [."
+"filename]#/dev/ad0s1f# (which already contains data)."
+msgstr ""
+"Você deseja fazer o journaling do sistema de arquivos [.filename]#/usr#, "
+"armazenado em [.filename]#/dev/ad0s1f# (que já contém dados)."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:107
+msgid ""
+"You reserved some free disk space in a partition in [.filename]#/dev/ad0s1g#."
+msgstr ""
+"Você reservou um espaço livre em disco em uma partição em [/dev/ad0s1g]."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:108
+msgid ""
+"Using `gjournal`, a new [.filename]#/dev/ad0s1f.journal# device is created "
+"where [.filename]#/dev/ad0s1f# is the data provider, and [.filename]#/dev/"
+"ad0s1g# is the journal provider. This new device is then used for all "
+"subsequent file operations."
+msgstr ""
+"Usando `gjournal`, um novo dispositivo [.filename]#/dev/ad0s1f.journal# é "
+"criado, onde [.filename]#/dev/ad0s1f# é o provedor de dados e [.filename]#/"
+"dev/ad0s1g# é o provedor de journal. Esse novo dispositivo é então usado "
+"para todas as operações de arquivo subsequentes."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:112
+msgid ""
+"The amount of disk space you need to reserve for the journal provider "
+"depends on the usage load of the file system and not on the size of the data "
+"provider. For example on a typical office desktop, a 1 GB journal provider "
+"for the [.filename]#/usr# file system will suffice, while a machine that "
+"deals with heavy disk I/O (i.e. video editing) may need more. A kernel "
+"panic will occur if the journal space is exhausted before it has a chance to "
+"be committed."
+msgstr ""
+"A quantidade de espaço em disco que você precisa reservar para o provedor de "
+"journal depende da carga de uso do sistema de arquivos e não do tamanho do "
+"provedor de dados. Por exemplo, em um desktop de escritório típico, um "
+"provedor de journal de 1 GB para o sistema de arquivos [.filename]#/usr# "
+"será suficiente, enquanto uma máquina que lida com intensas operações E/S de "
+"disco (por exemplo, edição de vídeo) pode precisar de mais espaço. Ocorrerá "
+"um kernel panic se o espaço do journal for esgotado antes que ele tenha a "
+"chance de ser confirmado (committed)."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:119
+msgid ""
+"The journal sizes suggested here, are highly unlikely to cause problems in "
+"typical desktop use (such as web browsing, word processing and playback of "
+"media files). If your workload includes intense disk activity, use the "
+"following rule for maximum reliability: Your RAM size should fit in 30% of "
+"the journal provider's space. For example, if your system has 1 GB RAM, "
+"create an approximately 3.3 GB journal provider. (Multiply your RAM size "
+"with 3.3 to obtain the size of the journal)."
+msgstr ""
+"Os tamanhos de journal sugeridos aqui são altamente improváveis de causar "
+"problemas em uso típico de desktop, como navegação na web, processamento de "
+"texto e reprodução de arquivos de mídia. Se a sua carga de trabalho inclui "
+"atividade intensa de disco, utilize a seguinte regra para obter máxima "
+"confiabilidade: o tamanho da sua memória RAM deve caber em 30% do espaço do "
+"provedor de journal. Por exemplo, se o seu sistema possui 1 GB de RAM, crie "
+"um provedor de journal de aproximadamente 3,3 GB (multiplique o tamanho da "
+"sua RAM por 3,3 para obter o tamanho do journal)."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:122
+msgid ""
+"For more information about journaling, please read the manual page of man:"
+"gjournal[8]."
+msgstr ""
+"Para obter mais informações sobre o journaling, por favor, leia a página do "
+"manual man:gjournal[8]."
+
+#. type: Title ==
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:124
+#, no-wrap
+msgid "Steps During the Installation of FreeBSD"
+msgstr "Etapas durante a instalação do FreeBSD"
+
+#. type: Title ===
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:126
+#, no-wrap
+msgid "Reserving Space for Journaling"
+msgstr "Reservando espaço para o journaling"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:130
+msgid ""
+"A typical desktop machine usually has one hard disk that stores both the OS "
+"and user data. Arguably, the default partitioning scheme selected by "
+"sysinstall is more or less suitable: A desktop machine does not need a large "
+"[.filename]#/var# partition, while [.filename]#/usr# is allocated the bulk "
+"of the disk space, since user data and a lot of packages are installed into "
+"its subdirectories."
+msgstr ""
+"Uma máquina desktop típica geralmente possui um único disco rígido que "
+"armazena tanto o sistema operacional quanto os dados do usuário. "
+"Argumentavelmente, o esquema de particionamento padrão selecionado pelo "
+"sysinstall é mais ou menos adequado: uma máquina desktop não precisa de uma "
+"partição [.filename]#/var# grande, enquanto a partição [.filename]#/usr# é "
+"alocada para a maior parte do espaço em disco, uma vez que os dados do "
+"usuário e muitos pacotes são instalados em seus subdiretórios."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:134
+msgid ""
+"The default partitioning (the one obtained by pressing kbd:[A] at the "
+"FreeBSD partition editor, called Disklabel) does not leave any unallocated "
+"space. Each partition that will be journaled, requires another partition "
+"for the journal. Since the [.filename]#/usr# partition is the largest, it "
+"makes sense to shrink this partition slightly, to obtain the space required "
+"for journaling."
+msgstr ""
+"A partição padrão (aquela obtida ao pressionar kbd:[A] no editor de partição "
+"do FreeBSD, chamado Disklabel) não deixa nenhum espaço não alocado. Cada "
+"partição que será jornalizada requer outra partição para o journal. Como a "
+"partição [.filename]#/usr# é a maior, faz sentido reduzir levemente essa "
+"partição para obter o espaço necessário para o journaling."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:137
+msgid ""
+"In our example, an 80 GB disk is used. The following screenshot shows the "
+"default partitions created by Disklabel during installation:"
+msgstr ""
+"No nosso exemplo, um disco de 80 GB está sendo utilizado. A captura de tela "
+"a seguir mostra as partições padrões criadas pelo Disklabel durante a "
+"instalação:"
+
+#. type: Target for macro image
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:138
+#, no-wrap
+msgid "disklabel1.png"
+msgstr "disklabel1.png"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:142
+msgid ""
+"If this is more or less what you need, it is very easy to adjust for "
+"journaling. Simply use the arrow keys to move the highlight to the [."
+"filename]#/usr# partition and press kbd:[D] to delete it."
+msgstr ""
+"Se isso é mais ou menos o que você precisa, é muito fácil ajustar para o "
+"journaling. Basta usar as teclas de seta para mover o destaque para a "
+"partição [.filename]#/usr# e pressionar kbd:[D] para excluí-la."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:146
+msgid ""
+"Now, move the highlight to the disk name at the top of the screen and press "
+"kbd:[C] to create a new partition for [.filename]#/usr#. This new partition "
+"should be smaller by 1 GB (if you intend to journal [.filename]#/usr# only), "
+"or 2 GB (if you intend to journal both [.filename]#/usr# and [.filename]#/"
+"var#). From the pop-up that appears, opt to create a file system, and type "
+"[.filename]#/usr# as the mount point."
+msgstr ""
+"Agora, mova o destaque para o nome do disco no topo da tela e pressione "
+"kbd:[C] para criar uma nova partição para [.filename]#/usr#. Essa nova "
+"partição deve ser menor em 1 GB (se você pretende jornalizar apenas [."
+"filename]#/usr#) ou 2 GB (se você pretende jornalizar tanto [.filename]#/usr#"
+" quanto [.filename]#/var#). No pop-up que aparece, opte por criar um sistema "
+"de arquivos e digite [.filename]#/usr# como ponto de montagem."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:152
+msgid ""
+"Should you journal the [.filename]#/var# partition? Normally, journaling "
+"makes sense on quite large partitions. You may decide not to journal [."
+"filename]#/var#, although doing so on a typical desktop will cause no harm. "
+"If the file system is lightly used (quite probable for a desktop) you may "
+"wish to allocate less disk space for its journal."
+msgstr ""
+"Você deve jornalizar a partição [.filename]#/var#? Normalmente, o journaling "
+"faz sentido em partições bastante grandes. Você pode optar por não "
+"jornalizar [.filename]#/var#, embora fazê-lo em um desktop típico não cause "
+"problemas. Se o sistema de arquivos tiver um uso leve (o que é bastante "
+"provável para um desktop), você pode desejar alocar menos espaço em disco "
+"para o seu journal."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:155
+msgid ""
+"In our example, we journal both [.filename]#/usr# and [.filename]#/var#. "
+"You may of course adjust the procedure to your own needs."
+msgstr ""
+"No nosso exemplo, nós aplicamos o journaling nas partições [.filename]#/usr# "
+"e [.filename]#/var#. Você pode, é claro, ajustar o procedimento de acordo "
+"com suas próprias necessidades."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:161
+msgid ""
+"To keep things as easy going as possible, we are going to use sysinstall to "
+"create the partitions required for journaling. However, during "
+"installation, sysinstall insists on asking a mount point for each partition "
+"you create. At this point, you do not have any mount points for the "
+"partitions that will hold the journals, and in reality you __do not even "
+"need them__. These are not partitions that we are ever going to mount "
+"somewhere."
+msgstr ""
+"Para facilitar o processo o máximo possível, vamos usar o sysinstall para "
+"criar as partições necessárias para o journaling. No entanto, durante a "
+"instalação, o sysinstall insiste em solicitar um ponto de montagem para cada "
+"partição que você cria. Neste momento, você não possui nenhum ponto de "
+"montagem para as partições que irão armazenar os journals e, na realidade, "
+"você nem mesmo precisa deles. Essas não são partições que serão montadas em "
+"algum lugar."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:165
+msgid ""
+"To avoid these problems with sysinstall, we are going to create the journal "
+"partitions as swap space. Swap is never mounted, and sysinstall has no "
+"problem creating as many swap partitions as needed. After the first reboot, "
+"[.filename]#/etc/fstab# will have to be edited, and the extra swap space "
+"entries removed."
+msgstr ""
+"Para evitar esses problemas com o sysinstall, vamos criar as partições de "
+"journal como espaço de swap. O swap nunca é montado, e o sysinstall não tem "
+"problemas em criar quantas partições de swap forem necessárias. Após o "
+"primeiro reinício, será necessário editar o arquivo [.filename]#/etc/fstab# "
+"e remover as entradas de espaço de swap adicionais."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:171
+msgid ""
+"To create the swap, again use the arrow keys to move the highlight to the "
+"top of Disklabel screen, so that the disk name itself is highlighted. Then "
+"press kbd:[N], enter the desired size (_1024M_), and select \"swap space\" "
+"from the pop-up menu that appears. Repeat for every journal you wish to "
+"create. In our example, we create two partitions to provide for the "
+"journals of [.filename]#/usr# and [.filename]#/var#. The final result is "
+"shown in the following screenshot:"
+msgstr ""
+"Para criar a partição de swap, novamente use as teclas de seta para mover o "
+"destaque para o topo da tela do Disklabel, de modo que o próprio nome do "
+"disco seja destacado. Em seguida, pressione kbd:[N], insira o tamanho "
+"desejado (_1024M_) e selecione \"swap space\" no menu pop-up que aparece. "
+"Repita esse processo para cada journal que você deseja criar. No nosso "
+"exemplo, criaremos duas partições para fornecer os journals de [."
+"filename]#/usr# e [.filename]#/var#. O resultado final é mostrado na captura "
+"de tela a seguir:"
+
+#. type: Target for macro image
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:172
+#, no-wrap
+msgid "disklabel2.png"
+msgstr "disklabel2.png"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:177
+msgid ""
+"When you have completed creating the partitions, we suggest you write down "
+"the partition names, and mount points, so you can easily refer to this "
+"information during the configuration phase. This will help alleviate "
+"mistakes that may damage your installation. The following table shows our "
+"notes for the sample configuration:"
+msgstr ""
+"Quando você tiver concluído a criação das partições, sugerimos que anote os "
+"nomes das partições e os pontos de montagem para que você possa se referir "
+"facilmente a essas informações durante a fase de configuração. Isso ajudará "
+"a evitar erros que possam danificar sua instalação. A tabela a seguir mostra "
+"nossas anotações para a configuração de exemplo:"
+
+#. type: Block title
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:178
+#, no-wrap
+msgid "Partitions and Journals"
+msgstr "Partições e Journals"
+
+#. type: Table
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:182
+#, no-wrap
+msgid "Partition"
+msgstr "Partição"
+
+#. type: Table
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:183
+#, no-wrap
+msgid "Mount Point"
+msgstr "Ponto de Montagem"
+
+#. type: Table
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:185
+#, no-wrap
+msgid "Journal"
+msgstr "Journal"
+
+#. type: Table
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:186
+#, no-wrap
+msgid "ad0s1d"
+msgstr "ad0s1d"
+
+#. type: Table
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:187
+#, no-wrap
+msgid "/var"
+msgstr "/var"
+
+#. type: Table
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:189
+#, no-wrap
+msgid "ad0s1h"
+msgstr "ad0s1h"
+
+#. type: Table
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:190
+#, no-wrap
+msgid "ad0s1f"
+msgstr "ad0s1f"
+
+#. type: Table
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:191
+#, no-wrap
+msgid "/usr"
+msgstr "/usr"
+
+#. type: Table
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:192
+#, no-wrap
+msgid "ad0s1g"
+msgstr "ad0s1g"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:196
+msgid ""
+"Continue the installation as you would normally do. We would however "
+"suggest you postpone installation of third party software (packages) until "
+"you have completely setup journaling."
+msgstr ""
+"Continue a instalação como você normalmente faria. No entanto, sugerimos que "
+"você adie a instalação de softwares de terceiros (pacotes) até ter "
+"configurado completamente o journaling."
+
+#. type: Title ===
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:198
+#, no-wrap
+msgid "Booting for the first time"
+msgstr "Inicializando pela primeira vez"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:203
+msgid ""
+"Your system will come up normally, but you will need to edit [.filename]#/"
+"etc/fstab# and remove the extra swap partitions you created for the "
+"journals. Normally, the swap partition you will actually use is the one "
+"with the \"b\" suffix (i.e. ad0s1b in our example). Remove all other swap "
+"space entries and reboot so that FreeBSD will stop using them."
+msgstr ""
+"Seu sistema inicializará normalmente, mas você precisará editar o arquivo [."
+"filename]#/etc/fstab# e remover as partições de swap extras que você criou "
+"para os journals. Normalmente, a partição de swap que você realmente usará é "
+"aquela com o sufixo \"b\" (por exemplo, ad0s1b em nosso exemplo). Remova "
+"todas as outras entradas de espaço de swap e reinicie para que o FreeBSD "
+"deixe de usá-las."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:205
+msgid ""
+"When the system comes up again, we will be ready to configure journaling."
+msgstr ""
+"Quando o sistema voltar a funcionar, estaremos prontos para configurar o "
+"journaling."
+
+#. type: Title ==
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:207
+#, no-wrap
+msgid "Setting Up Journaling"
+msgstr "Configurando o journaling"
+
+#. type: Title ===
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:210
+#, no-wrap
+msgid "Executing `gjournal`"
+msgstr "Executando o comando `gjournal`"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:214
+msgid ""
+"Having prepared all the required partitions, it is quite easy to configure "
+"journaling. We will need to switch to single user mode, so login as `root` "
+"and type:"
+msgstr ""
+"Depois de preparar todas as partições necessárias, é bastante fácil "
+"configurar o journaling. Será necessário mudar para o modo de usuário único ("
+"single user mode). Para isso, faça o login como `root` e digite o seguinte "
+"comando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:218
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:436
+#, no-wrap
+msgid "# shutdown now\n"
+msgstr "# shutdown now\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:222
+msgid ""
+"Press kbd:[Enter] to get the default shell. We will need to unmount the "
+"partitions that will be journaled, in our example [.filename]#/usr# and [."
+"filename]#/var#:"
+msgstr ""
+"Pressione kbd:[Enter] para obter o shell padrão. Agora, você precisará "
+"desmontar as partições que serão jornalizadas, no nosso exemplo [."
+"filename]#/usr# e [.filename]#/var#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:226
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:443
+#, no-wrap
+msgid "# umount /usr /var\n"
+msgstr "# umount /usr /var\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:229
+msgid "Load the module required for journaling:"
+msgstr "Carregue o módulo necessário para o journaling:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:233
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:408
+#, no-wrap
+msgid "# gjournal load\n"
+msgstr "# gjournal load\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:238
+msgid ""
+"Now, use your notes to determine which partition will be used for each "
+"journal. In our example, [.filename]#/usr# is [.filename]#ad0s1f# and its "
+"journal will be [.filename]#ad0s1g#, while [.filename]#/var# is [."
+"filename]#ad0s1d# and will be journaled to [.filename]#ad0s1h#. The "
+"following commands are required:"
+msgstr ""
+"Agora, use suas anotações para determinar qual partição será usada para cada "
+"journal. No nosso exemplo, [.filename]#/usr# é [.filename]#ad0s1f# e seu "
+"journal será [.filename]#ad0s1g#, enquanto [.filename]#/var# é [."
+"filename]#ad0s1d# e será jornalizada em [.filename]#ad0s1h#. Os seguintes "
+"comandos são necessários:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:244
+#, no-wrap
+msgid ""
+"# gjournal label ad0s1f ad0s1g\n"
+"GEOM_JOURNAL: Journal 2948326772: ad0s1f contains data.\n"
+"GEOM_JOURNAL: Journal 2948326772: ad0s1g contains journal.\n"
+msgstr ""
+"# gjournal label ad0s1f ad0s1g\n"
+"GEOM_JOURNAL: Journal 2948326772: ad0s1f contains data.\n"
+"GEOM_JOURNAL: Journal 2948326772: ad0s1g contains journal.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:248
+#, no-wrap
+msgid ""
+"# gjournal label ad0s1d ad0s1h\n"
+"GEOM_JOURNAL: Journal 3193218002: ad0s1d contains data.\n"
+"GEOM_JOURNAL: Journal 3193218002: ad0s1h contains journal.\n"
+msgstr ""
+"# gjournal label ad0s1d ad0s1h\n"
+"GEOM_JOURNAL: Journal 3193218002: ad0s1d contains data.\n"
+"GEOM_JOURNAL: Journal 3193218002: ad0s1h contains journal.\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:254
+msgid ""
+"If the last sector of either partition is used, `gjournal` will return an "
+"error. You will have to run the command using the `-f` flag to force an "
+"overwrite, i.e.:"
+msgstr ""
+"Se o último setor de qualquer uma das partições estiver em uso, o `gjournal` "
+"retornará um erro. Nesse caso, você precisará executar o comando usando a "
+"opção `-f` para forçar a sobrescrita. Por exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:258
+#, no-wrap
+msgid "# gjournal label -f ad0s1d ad0s1h\n"
+msgstr "# gjournal label -f ad0s1d ad0s1h\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:261
+msgid ""
+"Since this is a new installation, it is highly unlikely that anything will "
+"be actually overwritten."
+msgstr ""
+"Como esta é uma nova instalação, é altamente improvável que qualquer coisa "
+"seja realmente sobrescrita."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:266
+msgid ""
+"At this point, two new devices are created, namely [.filename]#ad0s1d."
+"journal# and [.filename]#ad0s1f.journal#. These represent the [.filename]#/"
+"var# and [.filename]#/usr# partitions we have to mount. Before mounting, we "
+"must however set the journal flag on them and clear the Soft Updates flag:"
+msgstr ""
+"Neste ponto, dois novos dispositivos são criados, chamados [.filename]#ad0s1d"
+".journal# e [.filename]#ad0s1f.journal#. Eles representam as partições [."
+"filename]#/var# e [.filename]#/usr# que devemos montar. No entanto, antes de "
+"montá-los, precisamos definir a flag de journaling neles e desativar a flag "
+"de Soft Updates:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:272
+#, no-wrap
+msgid ""
+"# tunefs -J enable -n disable ad0s1d.journal\n"
+"tunefs: gjournal set\n"
+"tunefs: soft updates cleared\n"
+msgstr ""
+"# tunefs -J enable -n disable ad0s1d.journal\n"
+"tunefs: gjournal set\n"
+"tunefs: soft updates cleared\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:276
+#, no-wrap
+msgid ""
+"# tunefs -J enable -n disable ad0s1f.journal\n"
+"tunefs: gjournal set\n"
+"tunefs: soft updates cleared\n"
+msgstr ""
+"# tunefs -J enable -n disable ad0s1f.journal\n"
+"tunefs: gjournal set\n"
+"tunefs: soft updates cleared\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:279
+msgid ""
+"Now, mount the new devices manually at their respective places (note that we "
+"can now use the `async` mount option):"
+msgstr ""
+"Agora, monte manualmente os novos dispositivos em seus respectivos locais ("
+"observe que agora podemos usar a opção de montagem `async`):"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:284
+#, no-wrap
+msgid ""
+"# mount -o async /dev/ad0s1d.journal /var\n"
+"# mount -o async /dev/ad0s1f.journal /usr\n"
+msgstr ""
+"# mount -o async /dev/ad0s1d.journal /var\n"
+"# mount -o async /dev/ad0s1f.journal /usr\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:287
+msgid ""
+"Edit [.filename]#/etc/fstab# and update the entries for [.filename]#/usr# "
+"and [.filename]#/var#:"
+msgstr ""
+"Edite o arquivo [.filename]#/etc/fstab# e atualize as entradas para [."
+"filename]#/usr# e [.filename]#/var#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:292
+#, no-wrap
+msgid ""
+"/dev/ad0s1f.journal /usr ufs rw,async 2 2\n"
+"/dev/ad0s1d.journal /var ufs rw,async 2 2\n"
+msgstr ""
+"/dev/ad0s1f.journal /usr ufs rw,async 2 2\n"
+"/dev/ad0s1d.journal /var ufs rw,async 2 2\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:297
+msgid ""
+"Make sure the above entries are correct, or you will have trouble starting "
+"up normally after you reboot!"
+msgstr ""
+"Certifique-se de que as entradas acima estão corretas ou você terá problemas "
+"para inicializar normalmente após o reboot!"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:300
+msgid ""
+"Finally, edit [.filename]#/boot/loader.conf# and add the following line so "
+"the man:gjournal[8] module is loaded at every boot:"
+msgstr ""
+"Por fim, edite o arquivo [.filename]#/boot/loader.conf# e adicione a "
+"seguinte linha para carregar o módulo man:gjournal[8] em cada inicialização "
+"do sistema:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:304
+#, no-wrap
+msgid "geom_journal_load=\"YES\"\n"
+msgstr "geom_journal_load=\"YES\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:309
+msgid ""
+"Congratulations! Your system is now set for journaling. You can either type "
+"`exit` to return to multi-user mode, or reboot to test your configuration "
+"(recommended). During the boot you will see messages like the following:"
+msgstr ""
+"Parabéns! Seu sistema está agora configurado para o journaling. Você pode "
+"digitar `exit` para retornar ao modo multiusuário ou reiniciar para testar "
+"sua configuração (recomendado). Durante a inicialização, você verá mensagens "
+"como as seguintes:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:319
+#, no-wrap
+msgid ""
+"ad0: 76293MB XEC XE800JD-00HBC0 08.02D08 at ata0-master SATA150\n"
+"GEOM_JOURNAL: Journal 2948326772: ad0s1g contains journal.\n"
+"GEOM_JOURNAL: Journal 3193218002: ad0s1h contains journal.\n"
+"GEOM_JOURNAL: Journal 3193218002: ad0s1d contains data.\n"
+"GEOM_JOURNAL: Journal ad0s1d clean.\n"
+"GEOM_JOURNAL: Journal 2948326772: ad0s1f contains data.\n"
+"GEOM_JOURNAL: Journal ad0s1f clean.\n"
+msgstr ""
+"ad0: 76293MB XEC XE800JD-00HBC0 08.02D08 at ata0-master SATA150\n"
+"GEOM_JOURNAL: Journal 2948326772: ad0s1g contains journal.\n"
+"GEOM_JOURNAL: Journal 3193218002: ad0s1h contains journal.\n"
+"GEOM_JOURNAL: Journal 3193218002: ad0s1d contains data.\n"
+"GEOM_JOURNAL: Journal ad0s1d clean.\n"
+"GEOM_JOURNAL: Journal 2948326772: ad0s1f contains data.\n"
+"GEOM_JOURNAL: Journal ad0s1f clean.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:322
+msgid "After an unclean shutdown, the messages will vary slightly, i.e.:"
+msgstr ""
+"Após um encerramento não limpo, as mensagens variam ligeiramente, ou seja:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:326
+#, no-wrap
+msgid "GEOM_JOURNAL: Journal ad0s1d consistent.\n"
+msgstr "GEOM_JOURNAL: Journal ad0s1d consistent.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:329
+msgid ""
+"This usually means that man:gjournal[8] used the information in the journal "
+"provider to return the file system to a consistent state."
+msgstr ""
+"Isso geralmente significa que o man:gjournal[8] utilizou as informações no "
+"journal provider para restaurar o sistema de arquivos a um estado "
+"consistente."
+
+#. type: Title ===
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:331
+#, no-wrap
+msgid "Journaling Newly Created Partitions"
+msgstr "Fazendo journaling de partições recém-criadas"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:336
+msgid ""
+"While the above procedure is necessary for journaling partitions that "
+"already contain data, journaling an empty partition is somewhat easier, "
+"since both the data and the journal provider can be stored in the same "
+"partition. For example, assume a new disk was installed, and a new "
+"partition [.filename]#/dev/ad1s1d# was created. Creating the journal would "
+"be as simple as:"
+msgstr ""
+"Enquanto o procedimento acima é necessário para jornalizar partições que já "
+"contêm dados, jornalizar uma partição vazia é um pouco mais fácil, pois "
+"tanto o provedor de dados quanto o provedor de journal podem ser armazenados "
+"na mesma partição. Por exemplo, suponha que um novo disco tenha sido "
+"instalado e uma nova partição [.filename]#/dev/ad1s1d# tenha sido criada. "
+"Criar o journal seria tão simples quanto:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:340
+#, no-wrap
+msgid "# gjournal label ad1s1d\n"
+msgstr "# gjournal label ad1s1d\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:346
+msgid ""
+"The journal size will be 1 GB by default. You may adjust it by using the `-"
+"s` option. The value can be given in bytes, or appended by `K`, `M` or `G` "
+"to denote Kilobytes, Megabytes or Gigabytes respectively. Note that "
+"`gjournal` will not allow you to create unsuitably small journal sizes."
+msgstr ""
+"O tamanho do journal será de 1 GB por padrão. Você pode ajustá-lo usando a "
+"opção `-s`. O valor pode ser dado em bytes, ou pode ser seguido por `K`, `M` "
+"ou `G` para representar Kilobytes, Megabytes ou Gigabytes, respectivamente. "
+"Note que o `gjournal` não permitirá que você crie tamanhos de journal "
+"excessivamente pequenos e inadequados."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:348
+msgid ""
+"For example, to create a 2 GB journal, you could use the following command:"
+msgstr ""
+"Por exemplo, para criar um journal de 2 GB, você poderia usar o seguinte "
+"comando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:352
+#, no-wrap
+msgid "# gjournal label -s 2G ad1s1d\n"
+msgstr "# gjournal label -s 2G ad1s1d\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:355
+msgid ""
+"You can then create a file system on your new partition, and enable "
+"journaling using the `-J` option:"
+msgstr ""
+"Em seguida, você pode criar um sistema de arquivos na sua nova partição e "
+"habilitar o journaling usando a opção `-J`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:359
+#, no-wrap
+msgid "# newfs -J /dev/ad1s1d.journal\n"
+msgstr "# newfs -J /dev/ad1s1d.journal\n"
+
+#. type: Title ===
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:362
+#, no-wrap
+msgid "Building Journaling into Your Custom Kernel"
+msgstr "Adicionando suporte ao journaling no seu kernel personalizado"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:366
+msgid ""
+"If you do not wish to load `geom_journal` as a module, you can build its "
+"functions right into your kernel. Edit your custom kernel configuration "
+"file, and make sure it includes these two lines:"
+msgstr ""
+"Se você não deseja carregar `geom_journal` como um módulo, você pode "
+"incorporar suas funções diretamente no seu kernel. Edite o arquivo de "
+"configuração do seu kernel personalizado e verifique se ele inclui as "
+"seguintes linhas:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:370
+#, no-wrap
+msgid "options UFS_GJOURNAL # Note: This is already in GENERIC\n"
+msgstr "options UFS_GJOURNAL # Note: This is already in GENERIC\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:372
+#, no-wrap
+msgid "options GEOM_JOURNAL # You will have to add this one\n"
+msgstr "options GEOM_JOURNAL # You will have to add this one\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:375
+msgid ""
+"Rebuild and reinstall your kernel following the relevant extref:{handbook}"
+"[instructions in the FreeBSD Handbook., kernelconfig]"
+msgstr ""
+"Recompile e reinstale o seu kernel seguindo as instruções relevantes no "
+"Handbook do FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:377
+msgid ""
+"Do not forget to remove the relevant \"load\" entry from [.filename]#/boot/"
+"loader.conf# if you have previously used it."
+msgstr ""
+"Não se esqueça de remover a entrada relevante de \"load\" do arquivo [."
+"filename]#/boot/loader.conf# se você a tiver usado anteriormente."
+
+#. type: Title ==
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:379
+#, no-wrap
+msgid "Troubleshooting Journaling"
+msgstr "Solução de problemas com journaling"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:382
+msgid ""
+"The following section covers frequently asked questions regarding problems "
+"related to journaling."
+msgstr ""
+"A seção a seguir aborda as perguntas mais frequentes relacionadas a "
+"problemas relacionados ao journaling."
+
+#. type: Title ===
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:383
+#, no-wrap
+msgid "I am getting kernel panics during periods of high disk activity. How is this related to journaling?"
+msgstr "Estou recebendo um kernel panic durante períodos de alta atividade de disco. Como isso está relacionado ao journaling?"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:389
+msgid ""
+"The journal probably fills up before it has a chance to get committed "
+"(flushed) to disk. Keep in mind the size of the journal depends on the "
+"usage load, and not the size of the data provider. If your disk activity is "
+"high, you need a larger partition for the journal. See the note in the "
+"<<understanding-journaling>> section."
+msgstr ""
+"O journal provavelmente fica cheio antes de ter a chance de ser confirmado "
+"(gravado) no disco. Lembre-se de que o tamanho do journal depende da carga "
+"de uso e não do tamanho do provedor de dados. Se a atividade do disco for "
+"intensa, será necessário uma partição maior para o journal. Consulte a nota "
+"na seção <<understanding-journaling,Compreendendo o Journaling>> para mais "
+"informações."
+
+#. type: Title ===
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:390
+#, no-wrap
+msgid "I made some mistake during configuration, and I cannot boot normally now. Can this be fixed some way?"
+msgstr "Eu cometi algum erro durante a configuração e não consigo inicializar normalmente agora. Isso pode ser resolvido de alguma forma?"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:396
+msgid ""
+"You either forgot (or misspelled) the entry in [.filename]#/boot/loader."
+"conf#, or there are errors in your [.filename]#/etc/fstab# file. These are "
+"usually easy to fix. Press kbd:[Enter] to get to the default single user "
+"shell. Then locate the root of the problem:"
+msgstr ""
+"Parece que você esqueceu (ou digitou incorretamente) a entrada no arquivo [."
+"filename]#/boot/loader.conf# ou existem erros no arquivo [.filename]#/etc/"
+"fstab#. Esses erros geralmente são fáceis de corrigir. Pressione kbd:[Enter] "
+"para acessar o shell do sistema no modo de usuário unico. Em seguida, "
+"localize a raiz do problema:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:400
+#, no-wrap
+msgid "# cat /boot/loader.conf\n"
+msgstr "# cat /boot/loader.conf\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:404
+msgid ""
+"If the `geom_journal_load` entry is missing or misspelled, the journaled "
+"devices are never created. Load the module manually, mount all partitions, "
+"and continue with multi-user boot:"
+msgstr ""
+"Se a entrada `geom_journal_load` estiver ausente ou digitada incorretamente, "
+"os dispositivos com journaling não serão criados. Carregue o módulo "
+"manualmente, monte todas as partições e continue com a inicialização em modo "
+"multiusuário:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:415
+#, no-wrap
+msgid ""
+"GEOM_JOURNAL: Journal 2948326772: ad0s1g contains journal.\n"
+"GEOM_JOURNAL: Journal 3193218002: ad0s1h contains journal.\n"
+"GEOM_JOURNAL: Journal 3193218002: ad0s1d contains data.\n"
+"GEOM_JOURNAL: Journal ad0s1d clean.\n"
+"GEOM_JOURNAL: Journal 2948326772: ad0s1f contains data.\n"
+"GEOM_JOURNAL: Journal ad0s1f clean.\n"
+msgstr ""
+"GEOM_JOURNAL: Journal 2948326772: ad0s1g contains journal.\n"
+"GEOM_JOURNAL: Journal 3193218002: ad0s1h contains journal.\n"
+"GEOM_JOURNAL: Journal 3193218002: ad0s1d contains data.\n"
+"GEOM_JOURNAL: Journal ad0s1d clean.\n"
+"GEOM_JOURNAL: Journal 2948326772: ad0s1f contains data.\n"
+"GEOM_JOURNAL: Journal ad0s1f clean.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:419
+#, no-wrap
+msgid ""
+"# mount -a\n"
+"# exit\n"
+"(boot continues)\n"
+msgstr ""
+"# mount -a\n"
+"# exit\n"
+"(boot continues)\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:424
+msgid ""
+"If, on the other hand, this entry is correct, have a look at [.filename]#/"
+"etc/fstab#. You will probably find a misspelled or missing entry. In this "
+"case, mount all remaining partitions by hand and continue with the multi-"
+"user boot."
+msgstr ""
+"Por outro lado, se essa entrada estiver correta, verifique o arquivo [."
+"filename]#/etc/fstab#. Provavelmente você encontrará uma entrada ausente ou "
+"digitada incorretamente. Nesse caso, monte todas as partições restantes "
+"manualmente e continue com a inicialização em modo multiusuário."
+
+#. type: Title ===
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:425
+#, no-wrap
+msgid "Can I remove journaling and return to my standard file system with Soft Updates?"
+msgstr "Posso remover o registro no journal e retornar ao meu sistema de arquivos padrão com o Soft Updates?"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:430
+msgid ""
+"Sure. Use the following procedure, which reverses the changes. The "
+"partitions you created for the journal providers can then be used for other "
+"purposes, if you so wish."
+msgstr ""
+"Claro. Use o seguinte procedimento, que reverte as alterações. As partições "
+"que você criou para os provedores de journal podem ser usadas para outros "
+"fins, se desejar."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:432
+msgid "Login as `root` and switch to single user mode:"
+msgstr "Faça login como `root` e altere para o modo de usuário único:"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:439
+msgid "Unmount the journaled partitions:"
+msgstr "Desmonte as partições journaled:"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:446
+msgid "Synchronize the journals:"
+msgstr "Sincronize os journals:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:450
+#, no-wrap
+msgid "# gjournal sync\n"
+msgstr "# gjournal sync\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:453
+msgid "Stop the journaling providers:"
+msgstr "Pare os provedores de journaling:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:458
+#, no-wrap
+msgid ""
+"# gjournal stop ad0s1d.journal\n"
+"# gjournal stop ad0s1f.journal\n"
+msgstr ""
+"# gjournal stop ad0s1d.journal\n"
+"# gjournal stop ad0s1f.journal\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:461
+msgid "Clear journaling metadata from all the devices used:"
+msgstr "Limpe os metadados de journaling de todos os dispositivos usados:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:468
+#, no-wrap
+msgid ""
+"# gjournal clear ad0s1d\n"
+"# gjournal clear ad0s1f\n"
+"# gjournal clear ad0s1g\n"
+"# gjournal clear ad0s1h\n"
+msgstr ""
+"# gjournal clear ad0s1d\n"
+"# gjournal clear ad0s1f\n"
+"# gjournal clear ad0s1g\n"
+"# gjournal clear ad0s1h\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:471
+msgid ""
+"Clear the file system journaling flag, and restore the Soft Updates flag:"
+msgstr ""
+"Limpe o sinalizador de journaling do sistema de arquivos e restaure a flag "
+"do Soft Updates:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:477
+#, no-wrap
+msgid ""
+"# tunefs -J disable -n enable ad0s1d\n"
+"tunefs: gjournal cleared\n"
+"tunefs: soft updates set\n"
+msgstr ""
+"# tunefs -J disable -n enable ad0s1d\n"
+"tunefs: gjournal cleared\n"
+"tunefs: soft updates set\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:481
+#, no-wrap
+msgid ""
+"# tunefs -J disable -n enable ad0s1f\n"
+"tunefs: gjournal cleared\n"
+"tunefs: soft updates set\n"
+msgstr ""
+"# tunefs -J disable -n enable ad0s1f\n"
+"tunefs: gjournal cleared\n"
+"tunefs: soft updates set\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:484
+msgid "Remount the old devices by hand:"
+msgstr "Remonte os dispositivos antigos à mão:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:489
+#, no-wrap
+msgid ""
+"# mount -o rw /dev/ad0s1d /var\n"
+"# mount -o rw /dev/ad0s1f /usr\n"
+msgstr ""
+"# mount -o rw /dev/ad0s1d /var\n"
+"# mount -o rw /dev/ad0s1f /usr\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:492
+msgid "Edit [.filename]#/etc/fstab# and restore it to its original state:"
+msgstr ""
+"Edite o arquivo [.filename]#/etc/fstab# e restaure-o para seu estado "
+"original:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:497
+#, no-wrap
+msgid ""
+"/dev/ad0s1f /usr ufs rw 2 2\n"
+"/dev/ad0s1d /var ufs rw 2 2\n"
+msgstr ""
+"/dev/ad0s1f /usr ufs rw 2 2\n"
+"/dev/ad0s1d /var ufs rw 2 2\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:500
+msgid ""
+"Finally, edit [.filename]#/boot/loader.conf#, remove the entry that loads "
+"the `geom_journal` module and reboot."
+msgstr ""
+"Finalmente, edite o arquivo [.filename]#/boot/loader.conf#, remova a entrada "
+"que carrega o módulo `geom_journal` e reinicie o sistema."
+
+#. type: Title ==
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:502
+#, no-wrap
+msgid "Further Reading"
+msgstr "Leitura Adicional"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:506
+msgid ""
+"Journaling is a fairly new feature of FreeBSD, and as such, it is not very "
+"well documented yet. You may however find the following additional "
+"references useful:"
+msgstr ""
+"O journaling é um recurso relativamente novo no FreeBSD e, portanto, ainda "
+"não está muito bem documentado. No entanto, você pode encontrar as seguintes "
+"referências adicionais úteis:"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:508
+msgid ""
+"A extref:{handbook}[new section on journaling, geom-gjournal] is now part of "
+"the FreeBSD Handbook."
+msgstr ""
+"A extref:{handbook}[nova seção sobre journaling, geom-gjournal] agora faz "
+"parte do FreeBSD Handbook."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:509
+msgid ""
+"https://lists.freebsd.org/pipermail/freebsd-current/2006-June/064043."
+"html[This post] in {freebsd-current} by man:gjournal[8]'s developer, `{pjd}`."
+msgstr ""
+"https://lists.freebsd.org/pipermail/freebsd-current/2006-June/064043.html["
+"Esta mensagem] na {freebsd-current} enviada por um desenvolvedor do "
+"man:gjournal[8]'s, `{pjd}`."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:510
+msgid ""
+"https://lists.freebsd.org/pipermail/freebsd-questions/2008-April/173501."
+"html[This post] in {freebsd-questions} by `{ivoras}`."
+msgstr ""
+"https://lists.freebsd.org/pipermail/freebsd-questions/2008-April/173501.html["
+"Esta mensagem] na {freebsd-questions} enviada por `{ivoras}`."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:510
+msgid "The manual pages of man:gjournal[8] and man:geom[8]."
+msgstr "As páginas de manual man:gjournal[8] e man:geom[8]."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/hubs/_index.adoc b/documentation/content/pt-br/articles/hubs/_index.adoc
index 5394751238..14e82fd686 100644
--- a/documentation/content/pt-br/articles/hubs/_index.adoc
+++ b/documentation/content/pt-br/articles/hubs/_index.adoc
@@ -1,14 +1,20 @@
---
-title: Espelhando o FreeBSD
authors:
- - author: Jun Kuriyama
+ -
+ author: 'Jun Kuriyama'
email: kuriyama@FreeBSD.org
- - author: Valentino Vaschetto
+ -
+ author: 'Valentino Vaschetto'
email: logo@FreeBSD.org
- - author: Daniel Lang
+ -
+ author: 'Daniel Lang'
email: dl@leo.org
- - author: Ken Smith
+ -
+ author: 'Ken Smith'
email: kensmith@FreeBSD.org
+description: 'O guia completo para espelhar o site do FreeBSD, servidores FTP e muito mais'
+tags: ["Mirroring", "FreeBSD", "Hub"]
+title: 'Espelhando o FreeBSD'
trademarks: ["freebsd", "general"]
---
@@ -54,13 +60,13 @@ toc::[]
[NOTE]
====
-Nós não estamos aceitando novos sites espelho neste momento.
+Não estamos aceitando novos espelhos da comunidade neste momento.
====
[[mirror-contact]]
== Informações de contato
-Os Coordenadores do Sistema de Espelhamento podem ser contatados pelo email mailto:mirror-admin@FreeBSD.org[mirror-admin@FreeBSD.org]. Existe também uma http://lists.FreeBSD.org/mailman/listinfo/freebsd-hubs[lista de discussão de sites espelho do FreeBSD].
+Os coordenadores do Sistema de Espelhamento podem ser contatados por e-mail através de mailto:mirror-admin@FreeBSD.org[mirror-admin@FreeBSD.org]. Também existe a {freebsd-hubs}.
[[mirror-requirements]]
== Requisitos para um site espelho do FreeBSD
@@ -68,74 +74,74 @@ Os Coordenadores do Sistema de Espelhamento podem ser contatados pelo email mail
[[mirror-diskspace]]
=== Espaço em disco
-O espaço em disco é um dos requisitos mais importantes. Dependendo do conjunto de releases, arquiteturas e grau de cobertura que você deseja espelhar, uma quantidade enorme de espaço em disco pode ser consumida. Também tenha em mente que espelhos _oficiais_ provavelmente precisam ser completos. As páginas web devem ser sempre espelhadas completamente. Observe também que os números indicados aqui refletem o estado atual (para 10.4-RELEASE/11.2-RELEASE). Desenvolvimentos adicionais e novas releases só aumentarão a quantidade necessária. Também certifique-se de ter algum espaço extra (cerca de 10-20%) apenas para ter certeza de que não irá faltar espaço. Aqui estão alguns números aproximados:
+O espaço em disco é um dos requisitos mais importantes. Dependendo do conjunto de versões, arquiteturas e grau de completude que você deseja espelhar, uma enorme quantidade de espaço em disco pode ser consumida. Além disso, espelhos _oficiais_ provavelmente precisam ser completos. As páginas da web devem sempre ser espelhadas completamente. Observe também que os números aqui declarados refletem o estado atual (em {rel120-current}-RELEASE/{rel113-current}-RELEASE). O desenvolvimento e os lançamentos futuros só aumentarão a quantidade necessária. Certifique-se também de manter cerca de 10-20% de espaço extra apenas para garantir. Aqui estão alguns números aproximados:
* Distribuição FTP completa: 1.4 TB
* Deltas do CTM: 10 GB
* Páginas Web: 1GB
-O uso atual de disco da Distribuição por FTP pode ser encontrado em link:ftp://ftp.FreeBSD.org/pub/FreeBSD/dir.sizes[ftp://ftp.FreeBSD.org/pub/FreeBSD/dir.sizes].
+O uso atual de disco da distribuição FTP pode ser encontrado em link:ftp://ftp.FreeBSD.org/pub/FreeBSD/dir.sizes[ftp://ftp.FreeBSD.org/pub/FreeBSD/dir.sizes].
[[mirror-bandwidth]]
=== Conexão de Rede/Largura de Banda
Claro, você precisa estar conectado à Internet. A largura de banda necessária depende do uso pretendido do site espelho. Se você quiser espelhar apenas algumas partes do FreeBSD para uso na sua rede local/intranet, a demanda pode ser muito menor do que se você quiser disponibilizar os arquivos publicamente. Se você pretende se tornar um site espelho oficial, a largura de banda necessária será ainda maior. Podemos apenas dar estimativas aproximadas aqui:
-* Site local, sem acesso público: basicamente sem valor mínimo, mas se for menor que < 2 Mbps, pode deixar a sincronização bem lenta.
-* Site público não oficial: 34 Mbps é provavelmente um bom começo.
-* Site oficial: > 100 Mbps é recomendado, e seu host deve estar conectado o mais próximo possível do seu roteador de borda.
+* Site local, sem acesso público: basicamente não há mínimo, mas menos de 2 Mbps pode tornar a sincronização muito lenta.
+* Site público não oficial: 34 Mbps provavelmente é um bom começo.
+* Site oficial: é recomendado ter mais de 100 Mbps, e seu host deve estar conectado o mais próximo possível do seu roteador de borda.
[[mirror-system]]
=== Requisitos de Sistema, CPU, RAM
-Isto depende muito do número esperado de clientes, que é determinado pela política do servidor. O dimensionamento também é afetado pelo tipo de serviços que você deseja oferecer. Serviços FTP ou HTTP simples podem não exigir uma quantidade enorme de recursos. Tenha cuidado se você fornecer o rsync. Isso pode ter um grande impacto nos requisitos de CPU e memória, já que este serviço é considerado um devorador de memória. Os exemplos a seguir, visam lhe dar uma ideia simples deste dimensionamento.
+Uma coisa que isso depende é o número esperado de clientes, que é determinado pela política do servidor. Também é afetado pelos tipos de serviços que você deseja oferecer. Serviços FTP ou HTTP simples podem não requerer uma quantidade enorme de recursos. Tenha cuidado se você fornecer o rsync. Isso pode ter um grande impacto nos requisitos de CPU e memória, pois ele é considerado um devorador de memória. Os dados seguintes são apenas exemplos para dar uma ideia aproximada.
-Para um site com visitação moderada o qual ofereça o serviço de rsync, você pode considerar uma CPU entre 800 MHz - 1 GHz, e pelo menos 512 MB de memória RAM. Esta é provavelmente a configuração mínima para um site espelho __oficial__.
+Para um site moderadamente visitado que oferece rsync, você pode considerar uma CPU atual com cerca de 800 MHz - 1 GHz e pelo menos 512MB de RAM. Isso provavelmente é o mínimo que você deseja para um site _oficial_.
Para um site com visitação frequente, você definitivamente vai precisar de mais memória RAM (considere 2 GB como um bom ponto de partida) e possivelmente de mais poder de processamento (CPU), o que pode significar que você precisará ir para um sistema multiprocessado (SMP).
-Você também pode querer considerar um subsistema de disco rápido. As operações no repositório SVN requerem um subsistema de disco rápido (o RAID é altamente recomendado). Um controlador SCSI que possua um cache próprio também pode acelerar as coisas, já que a maioria desses serviços incorrem em um grande número de pequenas modificações no disco.
+Você também deve considerar um subsistema de disco rápido. As operações no repositório SVN requerem um subsistema de disco rápido (RAID é altamente recomendado). Um controlador SCSI que tenha seu próprio cache também pode acelerar as coisas, uma vez que a maioria desses serviços incorre em um grande número de pequenas modificações no disco.
[[mirror-services]]
=== Serviços para oferecer
-Todo site espelho é obrigado a disponibilizar um conjunto de serviços básicos. Em adição a estes serviços obrigatórios, existe um grande número de serviços opcionais aos quais o administrador do servidor pode optar por oferecer. Esta sessão irá detalhar quais serviços você pode oferecer, bem como implementá-los.
+Cada site espelho deve ter um conjunto de serviços básicos disponíveis. Além desses serviços obrigatórios, há vários serviços opcionais que os administradores de servidor podem escolher oferecer. Esta seção explica quais serviços você pode fornecer e como implementá-los.
[[mirror-serv-ftp]]
==== FTP (necessário para o conjunto de arquivos do FTP)
-Este é um dos serviços mais básicos, e ele é obrigatório em todos os sites espelhos que oferecem acesso público às distribuições via FTP. O acesso ao FTP deve ser anônimo, e não é permitido o uso de nenhum controle nas taxas de upload/download (o que seria uma coisa ridícula de qualquer maneira). Não é necessário ter o upload de arquivos habilitado (e isso _nunca_ deve ser permitido na área onde os arquivos do FreeBSD são mantidos). Os arquivos do FreeBSD devem ficar disponíveis sob o caminho [.filename]#/pub/FreeBSD#.
+Este é um dos serviços mais básicos e é necessário para cada espelho que oferece distribuições por meio de FTP publico. O acesso FTP deve ser anônimo e não são permitidas proporções de upload/download (algo ridículo de qualquer maneira). A capacidade de upload não é necessária (e _nunca_ deve ser permitida para o espaço de arquivos do FreeBSD). Além disso, os arquivos do FreeBSD devem estar disponíveis sob o caminho [.filename]#/pub/FreeBSD#.
-Existem diversos softwares disponíveis que podem ser configurados para operar como um servidor de FTP anônimo. Por exemplo (em ordem alfabética)
+Existem diversos softwares disponíveis que podem ser configurados para operar como um servidor de FTP anônimo. Por exemplo (em ordem alfabética).
-* `/usr/libexec/ftpd`: o próprio ftpd do FreeBSD pode ser usado. Não deixe de ler o manual do man:ftpd[8].
-* package:ftp/ncftpd[]: Um pacote comercial, grátis para uso educacional.
-* package:ftp/oftpd[]: Um ftpd projetado tendo a segurança como foco principal.
+* `/usr/libexec/ftpd`: O próprio ftpd do FreeBSD pode ser usado. Certifique-se de ler man:ftpd[8].
+* package:ftp/ncftpd[] Um pacote comercial, gratuito para uso educacional.
+* package:ftp/oftpd[]: Um servidor FTP projetado com segurança como foco principal.
* package:ftp/proftpd[]: Um ftpd modular e muito flexível.
-* package:ftp/pure-ftpd[]: Outro ftpd desenvolvido com segurança em mente.
-* package:ftp/twoftpd[]: Mais um ftpd desenvolvido com segurança em mente.
-* package:ftp/vsftpd[]: Um ftpd "muito seguro".
+* package:ftp/pure-ftpd[]: Outro servidor FTP desenvolvido com segurança em mente.
+* package:ftp/twoftpd[]: Como acima.
+* package:ftp/vsftpd[]: O ftpd "muito seguro".
-O ftpd nativo do FreeBSD, o proftpd, e talvez o ncftpd são alguns dos servidores de FTP mais utilizados. Os demais não possuem uma grande base de usuários entre os sites espelhos. Um item a ser considerado é que você pode precisar de flexibilidade para controlar quantas conexões simultâneas serão permitidas no servidor, limitando desta forma o consumo do seu link IP e dos demais recursos do sistema.
+O `ftpd` do FreeBSD, o `proftpd` e talvez o `ncftpd` estão entre os FTPds mais comumente usados. Os outros não têm uma grande base de usuários entre os sites espelho. Uma coisa a considerar é que você pode precisar de flexibilidade para limitar quantas conexões simultâneas são permitidas, limitando assim quanto de largura de banda de rede e recursos do sistema são consumidos.
[[mirror-serv-rsync]]
==== Rsync (opcional para o conjunto de arquivos do FTP)
-O rsync é muitas vezes oferecido para acesso ao conteúdo da área de FTP de um site espelho do FreeBSD, desta forma outros sites espelhos podem utilizar o seu sistema como fonte para se espelhar. O protocolo do rsync é diferente do FTP em muitos aspectos. Ele é muito mais amigável em relação ao consumo de banda IP, uma vez que quando um arquivo é alterado ao invés de transferí-lo por completo novamente, ele transfere apenas as diferenças entre as duas versões do arquivo. O rsync requer uma grande quantidade de memória para cada instância. A quantidade de memória alocada depende do tamanho do modulo sincronizado em termos do número de diretórios e de arquivos. O rsync pode utilizar `rsh` e o `ssh` (que agora é padrão) para transporte dos dados, ou então utilizar o seu próprio protocolo para acesso stand-alone (este é o método preferido para um servidor público de Rsync). Obrigatoriedade de autenticação, limites ao número de conexões simultâneas e outras restrições podem ser aplicadas. Há apenas um pacote de software disponível para se implementar um servidor de Rsync:
+O Rsync é frequentemente oferecido para acesso ao conteúdo da área FTP do FreeBSD, para que outros sites espelho possam usar seu sistema como fonte. O protocolo é diferente do FTP de muitas maneiras. É muito mais amigável para a largura de banda, pois apenas as diferenças entre os arquivos são transferidas em vez de arquivos inteiros quando são alterados. O Rsync requer uma quantidade significativa de memória para cada instância. O tamanho depende do tamanho do módulo sincronizado em termos do número de diretórios e arquivos. O Rsync pode usar `rsh` e `ssh` (agora padrão) como transporte ou usar seu próprio protocolo para acesso autônomo (este é o método preferido para servidores Rsync públicos). A autenticação, limites de conexão e outras restrições podem ser aplicadas. Há apenas um pacote de software disponível:
* package:net/rsync[]
[[mirror-serv-http]]
==== HTTP (necessário para as páginas web, opcional para o conjunto de arquivos do FTP)
-Se você deseja disponibilizar as páginas web do FreeBSD, você vai precisar instalar um servidor web. Opcionalmente você poderá oferecer acesso a sua árvore de FTP via HTTP. A escolha do software do servidor web é uma escolha do administrador do site espelho. As opções mais populares são:
+Se você deseja oferecer as páginas web do FreeBSD, precisará instalar um servidor web. Você pode opcionalmente oferecer o conjunto de arquivos FTP via HTTP. A escolha do software do servidor web é deixada a critério do administrador do espelho. Algumas das opções mais populares são:
-* package:www/apache24[]: O Apache é o servidor web mais amplamente utilizado na internet. Ele é usado extensivamente pelo projeto FreeBSD.
-* package:www/boa[]: O Boa é um servidor HTTP single-task. Ao contrário dos servidores Web tradicionais, o seu processo não se divide para cada conexão de entrada e nem cria muitas cópias de si mesmo para lidar com várias conexões. Entretanto, ele fornece um desempenho excelente para conteúdo puramente estático.
-* package:www/cherokee[]: O >Cherokee é um servidor web muito rápido, flexível e fácil de configurar. Ele suporta as tecnologias difundidas atualmente: FastCGI, SCGI, PHP, CGI, conexões criptografadas por SSL/TLS, vhosts, autenticação de usuários, codificação on the fly e balanceamento de carga. Ele também gera arquivos de log compatíveis com o Apache.
+* package:www/apache24[]: O Apache ainda é um dos servidores da Web mais amplamente implantados na Internet. Ele é usado extensivamente pelo Projeto FreeBSD.
+* package:www/boa[]: O Boa é um servidor HTTP de single-task. Ao contrário dos servidores web tradicionais, ele não faz um fork para cada conexão recebida, nem faz muitas cópias de si mesmo para lidar com várias conexões. contudo, ele deve fornecer um desempenho consideravelmente melhor para conteúdo puramente estático.
+* package:www/cherokee[]: O Cherokee é um servidor web muito rápido, flexível e fácil de configurar. Ele suporta as tecnologias amplamente utilizadas hoje em dia: FastCGI, SCGI, PHP, CGI, conexões criptografadas SSL/TLS, vhosts, autenticação de usuários, codificação on the fly e balanceamento de carga. Ele também gera arquivos de log compatíveis com o Apache.
* package:www/lighttpd[]: O lighttpd é um servidor web seguro, rápido, compatível com os padrões e muito flexível o qual foi otimizado para ambientes de alto desempenho. Tem um consumo de memória muito baixo em comparação com outros servidores Web, bem como um baixo consumo de CPU.
-* package:www/nginx[]: O nginx é um servidor web de alto desempenho com baixo consumo de memória e recursos-chave para construir uma infraestrutura web moderna e eficiente. Os recursos incluem um servidor HTTP, proxy reverso de HTTP e email, armazenamento em cache, balanceamento de carga, compactação, limitação de solicitações, multiplexação e reutilização de conexões, descarregamento de SSL e streaming de mídia por HTTP.
-* package:www/thttpd[]: Se você estiver servindo uma grande quantidade de conteúdo estático, você pode descobrir que usar uma aplicação como o thttpd é mais eficiente do que outros servidores web. Ele também é otimizado para ter um excelente desempenho no FreeBSD.
+* package:www/nginx[]: O nginx é um servidor web de borda de alta performance com uma pegada de memória baixa e recursos importantes para construir uma infraestrutura web moderna e eficiente. Os recursos incluem um servidor HTTP, proxy reverso HTTP e de e-mail, cache, balanceamento de carga, compressão, limitação de solicitações, multiplexação e reutilização de conexões, offload SSL e streaming de mídia HTTP.
+* package:www/thttpd[]: Se você vai servir uma grande quantidade de conteúdo estático, pode descobrir que usar um aplicativo como o thttpd é mais eficiente do que outros. Ele também é otimizado para ter um excelente desempenho no FreeBSD.
[[mirror-howto]]
== Como espelhar o FreeBSD
@@ -145,65 +151,86 @@ Ok, agora você conhece os requisitos e sabe como oferecer os serviços, mas nã
[[mirror-ftp-rsync]]
=== Espelhando o site FTP
-A área FTP possui a maior quantidade de dados a serem espelhados. Ela inclui os _conjuntos de distribuição_ necessários para a instalação em rede, os _branches_ que são snapshots das árvores de código fonte, as _Imagens ISO_ para gravar CD-ROMs com a distribuição de instalação, um sistema de arquivos ativo e um snapshot da árvore de ports. E claro, tudo isso para as várias versões do FreeBSD e diversas arquiteturas.
+A área FTP possui a maior quantidade de dados que precisa ser espelhada. Inclui os _conjuntos de distribuição_ necessários para instalação via rede, os _branches_, que são na verdade snapshots dos diretórios de código fonte, as _imagens ISO_ para gravar CD-ROMs com a distribuição de instalação, um sistema de arquivos live (ao vivo) e um snapshot da árvore de ports. Tudo, é claro, para várias versões do FreeBSD e várias arquiteturas.
-A melhor maneira de espelhar a área FTP é com o rsync. Você pode instalar o port package:net/rsync[] e então usar o rsync para sincronizar com seu host upstream. O rsync já foi mencionado em <<mirror-serv-rsync>>. Como o acesso rsync não é necessário, seu site de upstream preferido pode não permitir isso. Talvez você precise procurar um pouco mais para localizar um site que permita acesso por rsync.
+A melhor maneira de espelhar a área FTP é com o rsync. Você pode instalar o pacote pelo port: net/rsync[] e, em seguida, usar o rsync para sincronizar com seu host upstream. O rsync já foi mencionado em <<mirror-serv-rsync>>. Como o acesso rsync não é obrigatório, seu site upstream preferido pode não permiti-lo. Você pode precisar procurar um pouco para encontrar um site que permita o acesso rsync.
[NOTE]
====
-Como o número de clientes rsync terá um impacto significativo na performance do servidor, a maioria dos administradores impõe limitações em seus servidores. Para um espelho, você deve perguntar ao mantenedor do site com o qual você está sincronizando sobre sua política, e talvez pedir uma exceção para o seu host (já que você também é um site espelho).
+Como o número de clientes rsync terá um impacto significativo no processamento do servidor, a maioria dos administradores impõe limitações em seu servidor. Para um espelho, você deve perguntar ao mantenedor do site de onde está sincronizando sobre sua política e talvez pedir uma exceção para seu host (já que você é um espelho).
====
Um exemplo de linha de comando para espelhar o FreeBSD pode ser verificada abaixo:
-[source,shell]
+[source, shell]
....
% rsync -vaHz --delete rsync://ftp4.de.FreeBSD.org/FreeBSD/ /pub/FreeBSD/
....
-Consulte a documentação do rsync, que também está disponível em http://rsync.samba.org/[http://rsync.samba.org/], sobre as várias opções a serem usadas com o rsync. Se você sincronizar o módulo inteiro (diferentemente dos subdiretórios), esteja ciente de que o diretório do módulo (aqui "FreeBSD") não será criado, então você não pode omitir o diretório de destino. Além disso, você pode querer configurar um script que chame tal comando via man:cron[8].
+Consulte a documentação do rsync, que também está disponível em http://rsync.samba.org/[http://rsync.samba.org/], sobre as várias opções a serem usadas com o rsync. Se você sincronizar o módulo inteiro (ao contrário de subdiretórios), esteja ciente de que o diretório do módulo (aqui "FreeBSD") não será criado, portanto, você não pode omitir o diretório de destino. Além disso, você pode querer configurar um framework de script que chame esse comando via man:cron[8].
[[mirror-www]]
=== Espelhando as páginas WWW
-O site do FreeBSD deve ser espelhado apenas via rsync.
+[WARNING]
+====
+Desde a migração da documentação para Hugo/Asciidoctor em 25/01/2021, a sincronização do site com rsync não funciona mais.
+====
-Uma linha de comando para espelhar o site do FreeBSD pode parecer com:
+Existem estudos em andamento para implementar um espelho do website com extref:{handbook}mirrors/[infraestrutura oficial].
+Para os antigos espelhos do website, uma maneira de obter o espelhamento hoje em dia é construir o site localmente com o endereço correspondente em que será hospedado.
+
+[source, shell]
+....
+% cd website && env HUGO_baseURL="https://www.XX.freebsd.org/" make
+....
+
+Verifique mais detalhes sobre as ferramentas de construção no livro extref:{fdp-primer}overview/[Primer do Projeto de Documentação do FreeBSD para Novos Contribuidores, overview-quick-start].
+
+////
[source,shell]
....
% rsync -vaHz --delete rsync://bit0.us-west.freebsd.org/FreeBSD-www-data/ /usr/local/www/
....
+////
+
+[NOTE]
+====
+Observe que o site foi dividido em www.FreeBSD.org e docs.FreeBSD.org, e existem links entre eles; além disso, no momento, a variável `HUGO_baseURL` não cobrirá todos os links, dessa forma, o espelhamento do site não é encorajado.
+====
[[mirror-pkgs]]
=== Espelhando os Pacotes
-Devido a exigências muito altas de largura de banda, armazenamento e administração, o Projeto FreeBSD decidiu não permitir espelhos públicos de pacotes. Para sites com muitas máquinas, pode ser vantajoso executar um proxy HTTP para fazer cache do man:pkg[8]. Alternativamente, pacotes específicos e suas dependências podem ser baixados executando algo assim:
+Devido aos requisitos muito altos de largura de banda, armazenamento e administração, o Projeto FreeBSD decidiu não permitir espelhos públicos de pacotes pré compilados. Para sites com muitas máquinas, pode ser vantajoso executar um proxy HTTP com cache habilitado para o processo man:pkg[8]. Alternativamente, pacotes específicos e suas dependências podem ser baixados executando algo como o seguinte:
-[source,shell]
+[source, shell]
....
% pkg fetch -d -o /usr/local/mirror vim
....
Quando esses pacotes forem baixados, os metadados do repositório devem ser gerados executando:
-[source,shell]
+[source, shell]
....
% pkg repo /usr/local/mirror
....
-Uma vez que os pacotes tenham sido baixados e os metadados para o repositório tenham sido gerados, sirva os pacotes até as máquinas clientes via HTTP. Para obter informações adicionais, consulte as páginas de manual do man:pkg[8], mais especificamente a página man:pkg-repo[8].
+Depois que os pacotes forem baixados e os metadados do repositório forem gerados, sirva os pacotes para as máquinas clientes via HTTP. Para obter informações adicionais, consulte as páginas man do man:pkg[8], especificamente a página man:pkg-repo[8].
[[mirror-how-often]]
-=== Com que frequência eu devo atualizar o conteúdo do meu espelho?
+=== Com que frequência eu devo atualizar o conteúdo do meu site espelho?
-Todo site espelho deve ser atualizado no mínimo uma vez por dia. Certamente, um script com bloqueio para impedir que várias execuções ocorram ao mesmo tempo será necessário para executar a partir do man:cron[8]. Como quase todo administrador faz isso à sua maneira, instruções específicas não podem ser fornecidas. Mas poderia ser algo como:
+Todo espelho deve ser atualizado pelo menos uma vez por dia. Certamente, um script com bloqueio para evitar que várias execuções ocorram ao mesmo tempo será necessário para ser executado pelo man:cron[8]. Como cada administrador faz isso de sua própria maneira, instruções específicas não podem ser fornecidas. Este processo poderia funcionar , por exemplo, desta forma:
[.procedure]
-. Coloque o comando para executar seu aplicativo de espelhamento em um script. Recomenda-se o uso de um script simples `/bin/sh`.
+====
+. Coloque o comando para executar sua aplicação de espelhamento em um script. O uso de um script `/bin/sh` simples é recomendado.
. Adicione alguns redirecionamentos de saída para que as mensagens de diagnóstico sejam registradas em um arquivo.
. Teste se o seu script funciona. Verifique os logs.
-. Use o man:crontab[1] para adicionar o script ao man:crontab[5] do usuário apropriado. Este deve ser um usuário diferente daquele sob o qual o daemon FTP está sendo executado, de forma que, se as permissões de arquivo dentro de sua área FTP não forem legíveis por todos, esses arquivos não poderão ser acessados ​​por FTP anônimo. Isto é usado para fazer o "stage" de uma release - assegurando que todos os sites espelhos oficiais tenham todos os arquivos necessários da release no dia do lançamento.
+. Use o man:crontab[1] para adicionar o script ao man:crontab[5] do usuário apropriado. Este deve ser um usuário diferente do que seu daemon FTP é executado, para que, se as permissões de arquivo dentro de sua área FTP não forem legíveis por todo o mundo, esses arquivos não possam ser acessados pelo FTP anônimo. Isso é usado para "preparar" as releases - garantindo que todos os sites de espelho oficiais tenham todos os arquivos da release necessários no dia do seu lançamento.
+====
Aqui estão alguns agendamentos recomendados:
@@ -211,43 +238,45 @@ Aqui estão alguns agendamentos recomendados:
* Páginas WWW: diariamente
[[mirror-where]]
-== De onde espelhar
+== De onde fazer o espelhamento
-Esta é uma questão importante. Então, esta seção vai gastar algum esforço para explicar mais a fundo. Nós diremos isso várias vezes: sob nenhuma circunstância você deve espelhar a partir do `ftp.FreeBSD.org`.
+Esta é uma questão importante. Portanto, esta seção dedicará algum esforço para explicar o os motivos que estão por trás desta orientação. Diremos isso várias vezes: em nenhuma circunstância você deve espelhar a partir de `ftp.FreeBSD.org`.
[[mirror-where-organization]]
=== Algumas palavras sobre a organização
-Os espelhos são organizados por país. Todos os espelhos oficiais possuem uma entrada de DNS no formato `ftpN.CC.FreeBSD.org`. O _CC_ (ou seja, o código do país) é o _domínio de nível superior_ (TLD) do país onde esse espelho está localizado. _N_ é um número, dizendo que o host seria o espelho _Nth_ daquele país. (O mesmo se aplica a `wwwN.CC.FreeBSD.org`, etc.) Há espelhos sem partes __CC__. Esses são os sites espelhos que são muito bem conectados e permitem um grande número de usuários simultâneos. O `ftp.FreeBSD.org` é na verdade duas máquinas, uma atualmente localizada na Dinamarca e outra nos Estados Unidos. Este _NÃO_ é um site mestre e nunca deve ser usado para se espelhar. Muitos documentos on-line conduzem os usuários "interativos" para `ftp.FreeBSD.org`, portanto os sistemas automatizados de espelhamento devem utilizar uma máquina diferente para se espelhar.
+Os espelhos são organizados por país. Todos os espelhos oficiais têm uma entrada DNS com a forma `ftpN.CC.FreeBSD.org`. _CC_ (ou seja, código do país) é o _domínio de nível superior_ (TLD) do país onde esse espelho está localizado. _N_ é um número, indicando que o host seria o _N-ésimo_ espelho nesse país. (O mesmo se aplica a `wwwN.CC.FreeBSD.org`, etc.) Existem espelhos sem a parte _CC_. Esses são os sites de espelho que estão muito bem conectados e permitem um grande número de usuários simultâneos. O `ftp.FreeBSD.org` na verdade são duas máquinas, uma atualmente localizada na Dinamarca e outra nos Estados Unidos. Não é um site principal e nunca deve ser usado para se espelhar a partir dele. Muita documentação online direciona usuários "interativos" para `ftp.FreeBSD.org`, portanto, sistemas automatizados de espelhamento devem encontrar um servidor diferente para espelhar.
-Além disso, existe uma hierarquia de espelhos, descrita em termos de __camadas__. Os sites mestres não são referenciados, mas podem ser descritos como __Tier-0__. Espelhos que espelham desses sites podem ser considerados __Tier-1__, espelhos de __Tier-1__mirrors, são__Tier-2__, etc. Os sites oficiais são encorajados a ter um _nível_ baixo, mas quanto mais baixo o nível, maiores os requisitos em termos, conforme descrito em <<mirror-requirements>>. Também o acesso a espelhos de baixo nível pode ser restrito, e o acesso a sites mestres é definitivamente restrito. A __tier__-hierarchy não é refletida pelo DNS e geralmente não é documentada em nenhum lugar, exceto nos sites mestres. No entanto, os espelhos oficiais com números baixos como 1-4, geralmente são _Tier-1_ (isso é apenas uma dica, e não há regra).
+Além disso, existe uma hierarquia de espelhos, que é descrita em termos de __níveis__. Os sites principais não são mencionados, mas podem ser descritos como __Nível-0__. Espelhos que espelham a partir desses sites podem ser considerados __Nível-1__, espelhos de espelhos __Nível-1__ são __Nível-2__, etc. Sites oficiais são incentivados a ter um nível baixo, mas quanto mais baixo o nível, maiores os requisitos como descrito em <<mirror-requirements>>. O acesso a espelhos de baixo nível pode ser restrito e o acesso a sites principais é definitivamente restrito. A hierarquia de __nível__ não é refletida pelo DNS e geralmente não é documentada em nenhum lugar, exceto para os sites principais. No entanto, espelhos oficiais com números baixos como 1-4, geralmente são __Nível-1__ (isso é apenas uma dica aproximada e não há regra).
[[mirror-where-where]]
=== Ok, mas de onde devo baixar os arquivos agora?
-Em nenhuma circunstância você deve espelhar a partir de `ftp.FreeBSD.org`. A resposta simples é: do site que está mais próximo de você em termos de Internet ou que lhe ofereça o acesso mais rápido.
+Em nenhuma circunstância você deve espelhar a partir de `ftp.FreeBSD.org`. A resposta curta é: a partir do site que estiver mais próximo de você em termos de Internet ou que oferecer o acesso mais rápido.
[[mirror-where-simple]]
==== Eu só quero espelhar de algum lugar!
-Se você não tem nenhuma intenção ou requisito especial, a declaração em <<mirror-where-where>> se aplica. Isso significa:
+Se você não tem intenções ou requisitos especiais, a afirmação em <<mirror-where-where>> se aplica. Isso significa:
[.procedure]
-. Verifique quais fornecem acesso mais rápido (número de saltos, tempos de ida e volta) e ofereçam os serviços que você pretende usar (como rsync).
+====
+. Verifique quais sites oferecem o acesso mais rápido (número de saltos, tempos de ida e volta) e oferecem os serviços que você pretende usar (como rsync).
. Entre em contato com os administradores do site escolhido, informando sua solicitação e perguntando sobre seus termos e políticas.
-. Configure o seu espelho conforme descrito acima.
+. Configure o seu site espelho conforme descrito acima.
+====
[[mirror-where-official]]
-==== Eu sou um espelho oficial, qual é o site certo para mim?
+==== Sou um site espelho oficial, qual é o site certo para mim?
-Em geral, a descrição em <<mirror-where-simple>> ainda se aplica. É claro que você pode querer colocar algum peso no fato de que seu upstream deve ser de nível baixo. Existem algumas outras considerações sobre os espelhos _oficiais_ que são descritos em <<mirror-official>>.
+Em geral, a descrição em <<mirror-where-simple>> ainda se aplica. Claro, você pode querer dar mais importância ao fato de que o site upstream deve ter um nível baixo. Existem algumas outras considerações sobre espelhos _oficiais_ que são descritas em <<mirror-official>>.
[[mirror-where-master]]
==== Eu quero acessar os sites principais!
-Se você tiver boas razões e pré-requisitos, poderá querer e obter acesso a um dos sites mestres. O acesso a esses sites é geralmente restrito e existem políticas especiais para acesso. Se você já é um espelho __oficial__, isso certamente irá ajudar você a obter acesso. Em qualquer outro caso, certifique-se de que seu país realmente precisa de outro espelho. Se já tiver três ou mais, pergunte ao "administrador de região"(mailto:hostmaster@CC.FreeBSD.org[hostmaster@CC.FreeBSD.org]) ou http://lists.FreeBSD.org/mailman/listinfo/freebsd-hubs[Listas de discussão de sites espelho do FreeBSD] primeiro.
+Se você tiver bons motivos e bons pré-requisitos, poderá querer e obter acesso a um dos sites principais. O acesso a esses sites geralmente é restrito e existem políticas especiais para acesso. Se você já é um espelho _oficial_, certamente isso ajuda a obter acesso. Em qualquer outro caso, certifique-se de que seu país realmente precisa de outro espelho. Se já tiver três ou mais, pergunte ao "administrador de zona" (mailto:hostmaster@CC.FreeBSD.org[hostmaster@CC.FreeBSD.org]) ou na {freebsd-hubs} primeiro.
-Quem ajudou você a se tornar um espelho _oficial_ deve ajudar você a obter acesso a um host de upstream apropriado, seja um dos sites mestres ou um site Tier-1 adequado. Caso contrário, você pode enviar um email para mailto:mirror-admin@FreeBSD.org[mirror-admin@FreeBSD.org] para solicitar ajuda com isso.
+Quem o ajudou a se tornar um espelho _oficial_ deve ter lhe ajudado a obter acesso a um host upstream apropriado, seja um dos sites principais ou um site Tier-1 adequado. Se não, você pode enviar um e-mail para mailto:mirror-admin@FreeBSD.org[mirror-admin@FreeBSD.org] para solicitar ajuda com isso.
Existe um site principal para o conjunto de arquivos FTP.
@@ -256,44 +285,44 @@ Existe um site principal para o conjunto de arquivos FTP.
Este é o site principal do conjunto de arquivos FTP.
-O `ftp-master.FreeBSD.org` fornece acesso por rsync, além do acesso normal por FTP. Consulte <<mirror-ftp-rsync>>.
+O `ftp-master.FreeBSD.org` disponibiliza acesso via rsync, além do FTP. Consulte <<mirror-ftp-rsync>> para obter mais informações.
-Os espelhos também são encorajados a permitir acesso por rsync para o conteúdo FTP, já que eles são espelhos de __Tier-1__.
+Também é encorajado que os espelhos permitam o acesso ao rsync para o conteúdo FTP, já que eles são espelhos __Tier-1__.
[[mirror-official]]
== Espelhos Oficiais
Espelhos oficiais são os espelhos que
-* a) tem uma entrada de DNS `FreeBSD.org` (geralmente um CNAME).
+* a) ter uma entrada DNS `FreeBSD.org` (geralmente um CNAME).
* b) são listados como um espelho oficial na documentação do FreeBSD (como no Handbook).
-Até agora, para distinguir espelhos oficiais. Espelhos oficiais não são necessariamente espelhos __Tier-1__. No entanto, você provavelmente não encontrará um espelho _Tier-1_ que também não é oficial.
+Até agora, para distinguir espelhos oficiais. Espelhos oficiais não necessariamente são espelhos __Tier-1__. No entanto, provavelmente você não encontrará um espelho __Tier-1__ que não seja oficial.
[[mirror-official-requirements]]
=== Requisitos especiais para sites espelhos oficiais (Tier-1)
-Não é tão fácil declarar os requisitos para todos os sites espelhos oficiais, uma vez que o projeto é um pouco tolerante aqui. É mais fácil dizer o que um _site espelho oficial Tier-1_ precisa ter. Todos os outros sites espelhos oficiais podem considerar isto como um grande __deve__.
+Não é tão fácil estabelecer requisitos para todos os espelhos oficiais, já que o projeto é bastante tolerante nesse aspecto. É mais fácil dizer o que é exigido dos _espelhos oficiais de nível 1_. Todos os outros espelhos oficiais devem considerar isso uma grande __recomendação__.
Os sites espelhos Tier-1 precisam:
* ter o conjunto completo de arquivos
* permitir acesso a outros sites espelho
-* fornecer acesso por FTP e rsync
+* fornecer acesso FTP e rsync
-Além disso, os administradores devem estar inscritos nas http://lists.FreeBSD.org/mailman/listinfo/freebsd-hubs[listas de discussão de sites espelho do FreeBSD]. Consulte extref:{handbook}eresources[este link, eresources-mail] para obter detalhes em como se inscrever.
+Além disso, os administradores devem se inscrever no {freebsd-hubs}. Consulte extref:{handbook}[este link, eresources-mail] para obter detalhes sobre como se inscrever.
[IMPORTANT]
====
-É _muito_ importante para um administrador de hub, especialmente administradores de hub de Tier-1, verificar o https://www.FreeBSD.org/releng/[calendário de lançamentos] para a próxima versão do FreeBSD. Isto é importante porque lhe dirá quando o próximo lançamento está programado para sair, e assim lhe dará tempo para se preparar para o grande pico de tráfego que virá.
+É _muito_ importante para um administrador de um site espelho, especialmente administradores de espelhos Tier-1, verificar o https://www.FreeBSD.org/releng/[calendário de lançamento] para o próximo release do FreeBSD. Isso é importante porque informará quando o próximo release está programado para sair, dando tempo para se preparar para o grande aumento de tráfego que o segue.
-Também é importante que os administradores do hub tentem manter seus espelhos o mais atualizados possível (novamente, ainda mais importante para os espelhos Tier-1). Se o Mirror1 não for atualizado por um tempo, os espelhos de camada inferior começarão a espelhar os dados antigos do Mirror1 e, portanto, iniciará uma espiral descendente... Mantenha seus espelhos atualizados!
+É importante também que os administradores dos hubs tentem manter seus espelhos atualizados o máximo possível (novamente, ainda mais crucial para os espelhos Tier-1). Se o Mirror1 não atualizar por um tempo, os espelhos de nível inferior começarão a espelhar dados antigos do Mirror1 e, assim, começa uma espiral descendente... Mantenha seus espelhos atualizados!
====
[[mirror-official-become]]
=== Como se tornar um site espelho oficial?
-Não estamos aceitando novos sites espelhos neste momento.
+Por favor, entre em contato com os Administradores do Cluster conforme documentado em https://www.FreeBSD.org/administration/#t-clusteradm.
[[mirror-statpages]]
== Algumas estatísticas dos sites espelho
@@ -303,5 +332,5 @@ Aqui estão os links para as páginas de estatísticas dos seus sites espelho fa
[[mirror-statpagesftp]]
=== Estatísticas do site FTP
-* ftp.is.FreeBSD.org - mailto:hostmaster@is.FreeBSD.org[hostmaster@is.FreeBSD.org] - http://www.rhnet.is/status/draupnir/draupnir.html[(Largura de Banda)] http://www.rhnet.is/status/ftp/ftp-notendur.html[(Processos FTP)] http://www.rhnet.is/status/ftp/http-notendur.html[(Processos HTTP)]
-* ftp2.ru.FreeBSD.org - mailto:mirror@macomnet.ru[mirror@macomnet.ru] - http://mirror.macomnet.net/mrtg/mirror.macomnet.net_195.128.64.25.html[(Largura de Banda)] http://mirror.macomnet.net/mrtg/mirror.macomnet.net_proc.html[(Usuários HTTP e FTP)]
+* ftp.is.FreeBSD.org - mailto:hostmaster@is.FreeBSD.org[hostmaster@is.FreeBSD.org] - http://www.rhnet.is/status/draupnir/draupnir.html[ (Largura de banda)] http://www.rhnet.is/status/ftp/ftp-notendur.html[(Processos FTP)] http://www.rhnet.is/status/ftp/http-notendur.html[(Processos HTTP)]
+* ftp2.ru.FreeBSD.org - mailto:mirror@macomnet.ru[mirror@macomnet.ru] - http://mirror.macomnet.net/mrtg/mirror.macomnet.net_195.128.64.25.html[(Largura de banda)] http://mirror.macomnet.net/mrtg/mirror.macomnet.net_proc.html[(Usuários de HTTP e FTP)]
diff --git a/documentation/content/pt-br/articles/hubs/_index.po b/documentation/content/pt-br/articles/hubs/_index.po
new file mode 100644
index 0000000000..f0dd7ffa2a
--- /dev/null
+++ b/documentation/content/pt-br/articles/hubs/_index.po
@@ -0,0 +1,1219 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+# Wendell Borges <perlporter@gmail.com>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-09-09 18:13-0300\n"
+"PO-Revision-Date: 2023-09-10 13:34+0000\n"
+"Last-Translator: \"Danilo G. Baio\" <dbaio@FreeBSD.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articleshubs_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/hubs/_index.adoc:1
+#, no-wrap
+msgid "The all in one guide for mirroring the FreeBSD website, FTP servers, and more"
+msgstr "O guia completo para espelhar o site do FreeBSD, servidores FTP e muito mais"
+
+#. type: Title =
+#: documentation/content/en/articles/hubs/_index.adoc:1
+#: documentation/content/en/articles/hubs/_index.adoc:17
+#, no-wrap
+msgid "Mirroring FreeBSD"
+msgstr "Espelhando o FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:50
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:52
+msgid ""
+"An in-progress article on how to mirror FreeBSD, aimed at hub administrators."
+msgstr ""
+"Um artigo em andamento sobre como espelhar o FreeBSD, destinado à "
+"administradores de hubs."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:54
+msgid "'''"
+msgstr "'''"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:60
+msgid "We are not accepting new community mirrors at this time."
+msgstr "Não estamos aceitando novos espelhos da comunidade neste momento."
+
+#. type: Title ==
+#: documentation/content/en/articles/hubs/_index.adoc:63
+#, no-wrap
+msgid "Contact Information"
+msgstr "Informações de contato"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:67
+msgid ""
+"The Mirror System Coordinators can be reached through email at mailto:mirror-"
+"admin@FreeBSD.org[mirror-admin@FreeBSD.org]. There is also a {freebsd-hubs}."
+msgstr ""
+"Os coordenadores do Sistema de Espelhamento podem ser contatados por e-mail "
+"através de mailto:mirror-admin@FreeBSD.org[mirror-admin@FreeBSD.org]. Também "
+"existe a {freebsd-hubs}."
+
+#. type: Title ==
+#: documentation/content/en/articles/hubs/_index.adoc:69
+#, no-wrap
+msgid "Requirements for FreeBSD Mirrors"
+msgstr "Requisitos para um site espelho do FreeBSD"
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:72
+#, no-wrap
+msgid "Disk Space"
+msgstr "Espaço em disco"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:82
+msgid ""
+"Disk space is one of the most important requirements. Depending on the set "
+"of releases, architectures, and degree of completeness you want to mirror, a "
+"huge amount of disk space may be consumed. Also keep in mind that "
+"_official_ mirrors are probably required to be complete. The web pages "
+"should always be mirrored completely. Also note that the numbers stated "
+"here are reflecting the current state (at {rel120-current}-RELEASE/{rel113-"
+"current}-RELEASE). Further development and releases will only increase the "
+"required amount. Also make sure to keep some (ca. 10-20%) extra space "
+"around just to be sure. Here are some approximate figures:"
+msgstr ""
+"O espaço em disco é um dos requisitos mais importantes. Dependendo do "
+"conjunto de versões, arquiteturas e grau de completude que você deseja "
+"espelhar, uma enorme quantidade de espaço em disco pode ser consumida. Além "
+"disso, espelhos _oficiais_ provavelmente precisam ser completos. As páginas "
+"da web devem sempre ser espelhadas completamente. Observe também que os "
+"números aqui declarados refletem o estado atual (em {rel120-current}-RELEASE/"
+"{rel113-current}-RELEASE). O desenvolvimento e os lançamentos futuros só "
+"aumentarão a quantidade necessária. Certifique-se também de manter cerca de "
+"10-20% de espaço extra apenas para garantir. Aqui estão alguns números "
+"aproximados:"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:84
+msgid "Full FTP Distribution: 1.4 TB"
+msgstr "Distribuição FTP completa: 1.4 TB"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:85
+msgid "CTM deltas: 10 GB"
+msgstr "Deltas do CTM: 10 GB"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:86
+msgid "Web pages: 1GB"
+msgstr "Páginas Web: 1GB"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:88
+msgid ""
+"The current disk usage of FTP Distribution can be found at link:ftp://ftp."
+"FreeBSD.org/pub/FreeBSD/dir.sizes[ftp://ftp.FreeBSD.org/pub/FreeBSD/dir."
+"sizes]."
+msgstr ""
+"O uso atual de disco da distribuição FTP pode ser encontrado em link:ftp://"
+"ftp.FreeBSD.org/pub/FreeBSD/dir.sizes[ftp://ftp.FreeBSD.org/pub/FreeBSD/dir."
+"sizes]."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:90
+#, no-wrap
+msgid "Network Connection/Bandwidth"
+msgstr "Conexão de Rede/Largura de Banda"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:97
+msgid ""
+"Of course, you need to be connected to the Internet. The required bandwidth "
+"depends on your intended use of the mirror. If you just want to mirror some "
+"parts of FreeBSD for local use at your site/intranet, the demand may be much "
+"smaller than if you want to make the files publicly available. If you "
+"intend to become an official mirror, the bandwidth required will be even "
+"higher. We can only give rough estimates here:"
+msgstr ""
+"Claro, você precisa estar conectado à Internet. A largura de banda "
+"necessária depende do uso pretendido do site espelho. Se você quiser "
+"espelhar apenas algumas partes do FreeBSD para uso na sua rede local/"
+"intranet, a demanda pode ser muito menor do que se você quiser "
+"disponibilizar os arquivos publicamente. Se você pretende se tornar um site "
+"espelho oficial, a largura de banda necessária será ainda maior. Podemos "
+"apenas dar estimativas aproximadas aqui:"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:99
+msgid ""
+"Local site, no public access: basically no minimum, but < 2 Mbps could make "
+"syncing too slow."
+msgstr ""
+"Site local, sem acesso público: basicamente não há mínimo, mas menos de 2 "
+"Mbps pode tornar a sincronização muito lenta."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:100
+msgid "Unofficial public site: 34 Mbps is probably a good start."
+msgstr "Site público não oficial: 34 Mbps provavelmente é um bom começo."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:101
+msgid ""
+"Official site: > 100 Mbps is recommended, and your host should be connected "
+"as close as possible to your border router."
+msgstr ""
+"Site oficial: é recomendado ter mais de 100 Mbps, e seu host deve estar "
+"conectado o mais próximo possível do seu roteador de borda."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:103
+#, no-wrap
+msgid "System Requirements, CPU, RAM"
+msgstr "Requisitos de Sistema, CPU, RAM"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:111
+msgid ""
+"One thing this depends on the expected number of clients, which is "
+"determined by the server's policy. It is also affected by the types of "
+"services you want to offer. Plain FTP or HTTP services may not require a "
+"huge amount of resources. Watch out if you provide rsync. This can have a "
+"huge impact on CPU and memory requirements as it is considered a memory "
+"hog. The following are just examples to give you a very rough hint."
+msgstr ""
+"Uma coisa que isso depende é o número esperado de clientes, que é "
+"determinado pela política do servidor. Também é afetado pelos tipos de "
+"serviços que você deseja oferecer. Serviços FTP ou HTTP simples podem não "
+"requerer uma quantidade enorme de recursos. Tenha cuidado se você fornecer o "
+"rsync. Isso pode ter um grande impacto nos requisitos de CPU e memória, pois "
+"ele é considerado um devorador de memória. Os dados seguintes são apenas "
+"exemplos para dar uma ideia aproximada."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:114
+msgid ""
+"For a moderately visited site that offers rsync, you might consider a "
+"current CPU with around 800MHz - 1 GHz, and at least 512MB RAM. This is "
+"probably the minimum you want for an _official_ site."
+msgstr ""
+"Para um site moderadamente visitado que oferece rsync, você pode considerar "
+"uma CPU atual com cerca de 800 MHz - 1 GHz e pelo menos 512MB de RAM. Isso "
+"provavelmente é o mínimo que você deseja para um site _oficial_."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:116
+msgid ""
+"For a frequently used site you definitely need more RAM (consider 2GB as a "
+"good start) and possibly more CPU, which could also mean that you need to go "
+"for a SMP system."
+msgstr ""
+"Para um site com visitação frequente, você definitivamente vai precisar de "
+"mais memória RAM (considere 2 GB como um bom ponto de partida) e "
+"possivelmente de mais poder de processamento (CPU), o que pode significar "
+"que você precisará ir para um sistema multiprocessado (SMP)."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:120
+msgid ""
+"You also want to consider a fast disk subsystem. Operations on the SVN "
+"repository require a fast disk subsystem (RAID is highly advised). A SCSI "
+"controller that has a cache of its own can also speed up things since most "
+"of these services incur a large number of small modifications to the disk."
+msgstr ""
+"Você também deve considerar um subsistema de disco rápido. As operações no "
+"repositório SVN requerem um subsistema de disco rápido (RAID é altamente "
+"recomendado). Um controlador SCSI que tenha seu próprio cache também pode "
+"acelerar as coisas, uma vez que a maioria desses serviços incorre em um "
+"grande número de pequenas modificações no disco."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:122
+#, no-wrap
+msgid "Services to Offer"
+msgstr "Serviços para oferecer"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:127
+msgid ""
+"Every mirror site is required to have a set of core services available. In "
+"addition to these required services, there are a number of optional services "
+"that server administrators may choose to offer. This section explains which "
+"services you can provide and how to go about implementing them."
+msgstr ""
+"Cada site espelho deve ter um conjunto de serviços básicos disponíveis. Além "
+"desses serviços obrigatórios, há vários serviços opcionais que os "
+"administradores de servidor podem escolher oferecer. Esta seção explica "
+"quais serviços você pode fornecer e como implementá-los."
+
+#. type: Title ====
+#: documentation/content/en/articles/hubs/_index.adoc:129
+#, no-wrap
+msgid "FTP (required for FTP Fileset)"
+msgstr "FTP (necessário para o conjunto de arquivos do FTP)"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:135
+msgid ""
+"This is one of the most basic services, and it is required for each mirror "
+"offering public FTP distributions. FTP access must be anonymous, and no "
+"upload/download ratios are allowed (a ridiculous thing anyway). Upload "
+"capability is not required (and _must_ never be allowed for the FreeBSD file "
+"space). Also the FreeBSD archive should be available under the path [."
+"filename]#/pub/FreeBSD#."
+msgstr ""
+"Este é um dos serviços mais básicos e é necessário para cada espelho que "
+"oferece distribuições por meio de FTP publico. O acesso FTP deve ser anônimo "
+"e não são permitidas proporções de upload/download (algo ridículo de "
+"qualquer maneira). A capacidade de upload não é necessária (e _nunca_ deve "
+"ser permitida para o espaço de arquivos do FreeBSD). Além disso, os arquivos "
+"do FreeBSD devem estar disponíveis sob o caminho [.filename]#/pub/FreeBSD#."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:137
+msgid ""
+"There is a lot of software available which can be set up to allow anonymous "
+"FTP (in alphabetical order)."
+msgstr ""
+"Existem diversos softwares disponíveis que podem ser configurados para "
+"operar como um servidor de FTP anônimo. Por exemplo (em ordem alfabética)."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:139
+msgid ""
+"`/usr/libexec/ftpd`: FreeBSD's own ftpd can be used. Be sure to read man:"
+"ftpd[8]."
+msgstr ""
+"`/usr/libexec/ftpd`: O próprio ftpd do FreeBSD pode ser usado. Certifique-se "
+"de ler man:ftpd[8]."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:140
+msgid "package:ftp/ncftpd[]: A commercial package, free for educational use."
+msgstr ""
+"package:ftp/ncftpd[] Um pacote comercial, gratuito para uso educacional."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:141
+msgid "package:ftp/oftpd[]: An ftpd designed with security as a main focus."
+msgstr ""
+"package:ftp/oftpd[]: Um servidor FTP projetado com segurança como foco "
+"principal."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:142
+msgid "package:ftp/proftpd[]: A modular and very flexible ftpd."
+msgstr "package:ftp/proftpd[]: Um ftpd modular e muito flexível."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:143
+msgid "package:ftp/pure-ftpd[]: Another ftpd developed with security in mind."
+msgstr ""
+"package:ftp/pure-ftpd[]: Outro servidor FTP desenvolvido com segurança em "
+"mente."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:144
+msgid "package:ftp/twoftpd[]: As above."
+msgstr "package:ftp/twoftpd[]: Como acima."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:145
+msgid "package:ftp/vsftpd[]: The \"very secure\" ftpd."
+msgstr "package:ftp/vsftpd[]: O ftpd \"muito seguro\"."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:149
+msgid ""
+"FreeBSD's `ftpd`, `proftpd` and maybe `ncftpd` are among the most commonly "
+"used FTPds. The others do not have a large userbase among mirror sites. "
+"One thing to consider is that you may need flexibility in limiting how many "
+"simultaneous connections are allowed, thus limiting how much network "
+"bandwidth and system resources are consumed."
+msgstr ""
+"O `ftpd` do FreeBSD, o `proftpd` e talvez o `ncftpd` estão entre os FTPds "
+"mais comumente usados. Os outros não têm uma grande base de usuários entre "
+"os sites espelho. Uma coisa a considerar é que você pode precisar de "
+"flexibilidade para limitar quantas conexões simultâneas são permitidas, "
+"limitando assim quanto de largura de banda de rede e recursos do sistema são "
+"consumidos."
+
+#. type: Title ====
+#: documentation/content/en/articles/hubs/_index.adoc:151
+#, no-wrap
+msgid "Rsync (optional for FTP Fileset)"
+msgstr "Rsync (opcional para o conjunto de arquivos do FTP)"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:161
+msgid ""
+"Rsync is often offered for access to the contents of the FTP area of "
+"FreeBSD, so other mirror sites can use your system as their source. The "
+"protocol is different from FTP in many ways. It is much more bandwidth "
+"friendly, as only differences between files are transferred instead of whole "
+"files when they change. Rsync does require a significant amount of memory "
+"for each instance. The size depends on the size of the synced module in "
+"terms of the number of directories and files. Rsync can use `rsh` and `ssh` "
+"(now default) as a transport, or use its own protocol for stand-alone access "
+"(this is the preferred method for public rsync servers). Authentication, "
+"connection limits, and other restrictions may be applied. There is just one "
+"software package available:"
+msgstr ""
+"O Rsync é frequentemente oferecido para acesso ao conteúdo da área FTP do "
+"FreeBSD, para que outros sites espelho possam usar seu sistema como fonte. O "
+"protocolo é diferente do FTP de muitas maneiras. É muito mais amigável para "
+"a largura de banda, pois apenas as diferenças entre os arquivos são "
+"transferidas em vez de arquivos inteiros quando são alterados. O Rsync "
+"requer uma quantidade significativa de memória para cada instância. O "
+"tamanho depende do tamanho do módulo sincronizado em termos do número de "
+"diretórios e arquivos. O Rsync pode usar `rsh` e `ssh` (agora padrão) como "
+"transporte ou usar seu próprio protocolo para acesso autônomo (este é o "
+"método preferido para servidores Rsync públicos). A autenticação, limites de "
+"conexão e outras restrições podem ser aplicadas. Há apenas um pacote de "
+"software disponível:"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:163
+msgid "package:net/rsync[]"
+msgstr "package:net/rsync[]"
+
+#. type: Title ====
+#: documentation/content/en/articles/hubs/_index.adoc:165
+#, no-wrap
+msgid "HTTP (required for Web Pages, Optional for FTP Fileset)"
+msgstr "HTTP (necessário para as páginas web, opcional para o conjunto de arquivos do FTP)"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:171
+msgid ""
+"If you want to offer the FreeBSD web pages, you will need to install a web "
+"server. You may optionally offer the FTP fileset via HTTP. The choice of "
+"web server software is left up to the mirror administrator. Some of the "
+"most popular choices are:"
+msgstr ""
+"Se você deseja oferecer as páginas web do FreeBSD, precisará instalar um "
+"servidor web. Você pode opcionalmente oferecer o conjunto de arquivos FTP "
+"via HTTP. A escolha do software do servidor web é deixada a critério do "
+"administrador do espelho. Algumas das opções mais populares são:"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:173
+msgid ""
+"package:www/apache24[]: Apache is still one of the most widely deployed web "
+"servers on the Internet. It is used extensively by the FreeBSD Project."
+msgstr ""
+"package:www/apache24[]: O Apache ainda é um dos servidores da Web mais "
+"amplamente implantados na Internet. Ele é usado extensivamente pelo Projeto "
+"FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:174
+msgid ""
+"package:www/boa[]: Boa is a single-tasking HTTP server. Unlike traditional "
+"web servers, it does not fork for each incoming connection, nor does it fork "
+"many copies of itself to handle multiple connections. Although, it should "
+"provide considerably great performance for purely static content."
+msgstr ""
+"package:www/boa[]: O Boa é um servidor HTTP de single-task. Ao contrário dos "
+"servidores web tradicionais, ele não faz um fork para cada conexão recebida, "
+"nem faz muitas cópias de si mesmo para lidar com várias conexões. contudo, "
+"ele deve fornecer um desempenho consideravelmente melhor para conteúdo "
+"puramente estático."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:175
+msgid ""
+"package:www/cherokee[]: Cherokee is a very fast, flexible and easy to "
+"configure web server. It supports the widespread technologies nowadays: "
+"FastCGI, SCGI, PHP, CGI, SSL/TLS encrypted connections, vhosts, users "
+"authentication, on the fly encoding and load balancing. It also generates "
+"Apache compatible log files."
+msgstr ""
+"package:www/cherokee[]: O Cherokee é um servidor web muito rápido, flexível "
+"e fácil de configurar. Ele suporta as tecnologias amplamente utilizadas hoje "
+"em dia: FastCGI, SCGI, PHP, CGI, conexões criptografadas SSL/TLS, vhosts, "
+"autenticação de usuários, codificação on the fly e balanceamento de carga. "
+"Ele também gera arquivos de log compatíveis com o Apache."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:176
+msgid ""
+"package:www/lighttpd[]: lighttpd is a secure, fast, compliant and very "
+"flexible web server which has been optimized for high-performance "
+"environments. It has a very low memory footprint compared to other web "
+"servers and takes care of cpu-load."
+msgstr ""
+"package:www/lighttpd[]: O lighttpd é um servidor web seguro, rápido, "
+"compatível com os padrões e muito flexível o qual foi otimizado para "
+"ambientes de alto desempenho. Tem um consumo de memória muito baixo em "
+"comparação com outros servidores Web, bem como um baixo consumo de CPU."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:177
+msgid ""
+"package:www/nginx[]: nginx is a high performance edge web server with a low "
+"memory footprint and key features to build a modern and efficient web "
+"infrastructure. Features include a HTTP server, HTTP and mail reverse proxy, "
+"caching, load balancing, compression, request throttling, connection "
+"multiplexing and reuse, SSL offload and HTTP media streaming."
+msgstr ""
+"package:www/nginx[]: O nginx é um servidor web de borda de alta performance "
+"com uma pegada de memória baixa e recursos importantes para construir uma "
+"infraestrutura web moderna e eficiente. Os recursos incluem um servidor "
+"HTTP, proxy reverso HTTP e de e-mail, cache, balanceamento de carga, "
+"compressão, limitação de solicitações, multiplexação e reutilização de "
+"conexões, offload SSL e streaming de mídia HTTP."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:178
+msgid ""
+"package:www/thttpd[]: If you are going to be serving a large amount of "
+"static content you may find that using an application such as thttpd is more "
+"efficient than others. It is also optimized for excellent performance on "
+"FreeBSD."
+msgstr ""
+"package:www/thttpd[]: Se você vai servir uma grande quantidade de conteúdo "
+"estático, pode descobrir que usar um aplicativo como o thttpd é mais "
+"eficiente do que outros. Ele também é otimizado para ter um excelente "
+"desempenho no FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/hubs/_index.adoc:180
+#, no-wrap
+msgid "How to Mirror FreeBSD"
+msgstr "Como espelhar o FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:184
+msgid ""
+"Ok, now you know the requirements and how to offer the services, but not how "
+"to get it. :-) This section explains how to actually mirror the various "
+"parts of FreeBSD, what tools to use, and where to mirror from."
+msgstr ""
+"Ok, agora você conhece os requisitos e sabe como oferecer os serviços, mas "
+"não sabe como obtê-los. :-) Esta seção explica como realmente espelhar as "
+"várias partes do FreeBSD, quais ferramentas utilizar e de onde espelhar."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:186
+#, no-wrap
+msgid "Mirroring the FTP Site"
+msgstr "Espelhando o site FTP"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:191
+msgid ""
+"The FTP area is the largest amount of data that needs to be mirrored. It "
+"includes the _distribution sets_ required for network installation, the "
+"_branches_ which are actually snapshots of checked-out source trees, the "
+"_ISO Images_ to write CD-ROMs with the installation distribution, a live "
+"file system, and a snapshot of the ports tree. All of course for various "
+"FreeBSD versions, and various architectures."
+msgstr ""
+"A área FTP possui a maior quantidade de dados que precisa ser espelhada. "
+"Inclui os _conjuntos de distribuição_ necessários para instalação via rede, "
+"os _branches_, que são na verdade snapshots dos diretórios de código fonte, "
+"as _imagens ISO_ para gravar CD-ROMs com a distribuição de instalação, um "
+"sistema de arquivos live (ao vivo) e um snapshot da árvore de ports. Tudo, é "
+"claro, para várias versões do FreeBSD e várias arquiteturas."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:197
+msgid ""
+"The best way to mirror the FTP area is rsync. You can install the port "
+"package:net/rsync[] and then use rsync to sync with your upstream host. "
+"rsync is already mentioned in <<mirror-serv-rsync>>. Since rsync access is "
+"not required, your preferred upstream site may not allow it. You may need "
+"to hunt around a little bit to find a site that allows rsync access."
+msgstr ""
+"A melhor maneira de espelhar a área FTP é com o rsync. Você pode instalar o "
+"pacote pelo port: net/rsync[] e, em seguida, usar o rsync para sincronizar "
+"com seu host upstream. O rsync já foi mencionado em <<mirror-serv-rsync>>. "
+"Como o acesso rsync não é obrigatório, seu site upstream preferido pode não "
+"permiti-lo. Você pode precisar procurar um pouco para encontrar um site que "
+"permita o acesso rsync."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:202
+msgid ""
+"Since the number of rsync clients will have a significant impact on the "
+"server machine, most admins impose limitations on their server. For a "
+"mirror, you should ask the site maintainer you are syncing from about their "
+"policy, and maybe an exception for your host (since you are a mirror)."
+msgstr ""
+"Como o número de clientes rsync terá um impacto significativo no "
+"processamento do servidor, a maioria dos administradores impõe limitações em "
+"seu servidor. Para um espelho, você deve perguntar ao mantenedor do site de "
+"onde está sincronizando sobre sua política e talvez pedir uma exceção para "
+"seu host (já que você é um espelho)."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:205
+msgid "A command line to mirror FreeBSD might look like:"
+msgstr ""
+"Um exemplo de linha de comando para espelhar o FreeBSD pode ser verificada "
+"abaixo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/hubs/_index.adoc:209
+#, no-wrap
+msgid "% rsync -vaHz --delete rsync://ftp4.de.FreeBSD.org/FreeBSD/ /pub/FreeBSD/\n"
+msgstr "% rsync -vaHz --delete rsync://ftp4.de.FreeBSD.org/FreeBSD/ /pub/FreeBSD/\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:213
+msgid ""
+"Consult the documentation for rsync, which is also available at http://rsync."
+"samba.org/[http://rsync.samba.org/], about the various options to be used "
+"with rsync. If you sync the whole module (unlike subdirectories), be aware "
+"that the module-directory (here \"FreeBSD\") will not be created, so you "
+"cannot omit the target directory. Also you might want to set up a script "
+"framework that calls such a command via man:cron[8]."
+msgstr ""
+"Consulte a documentação do rsync, que também está disponível em http://rsync."
+"samba.org/[http://rsync.samba.org/], sobre as várias opções a serem usadas "
+"com o rsync. Se você sincronizar o módulo inteiro (ao contrário de "
+"subdiretórios), esteja ciente de que o diretório do módulo (aqui \"FreeBSD"
+"\") não será criado, portanto, você não pode omitir o diretório de destino. "
+"Além disso, você pode querer configurar um framework de script que chame "
+"esse comando via man:cron[8]."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:215
+#, no-wrap
+msgid "Mirroring the WWW Pages"
+msgstr "Espelhando as páginas WWW"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:220
+msgid ""
+"Since doc migration to Hugo/Asciidoctor on 2021-01-25, mirroring the website "
+"with rsync no longer works."
+msgstr ""
+"Desde a migração da documentação para Hugo/Asciidoctor em 25/01/2021, a "
+"sincronização do site com rsync não funciona mais."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:223
+msgid ""
+"There are ongoing studies to implement a website mirror with the extref:"
+"{handbook}mirrors/[official infrastructure]."
+msgstr ""
+"Existem estudos em andamento para implementar um espelho do website com "
+"extref:{handbook}mirrors/[infraestrutura oficial]."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:225
+msgid ""
+"For the former website mirrors, a way to achieve mirroring the website today "
+"is building the website locally with the corresponding address it will be "
+"hosted."
+msgstr ""
+"Para os antigos espelhos do website, uma maneira de obter o espelhamento "
+"hoje em dia é construir o site localmente com o endereço correspondente em "
+"que será hospedado."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/hubs/_index.adoc:229
+#, no-wrap
+msgid "% cd website && env HUGO_baseURL=\"https://www.XX.freebsd.org/\" make\n"
+msgstr "% cd website && env HUGO_baseURL=\"https://www.XX.freebsd.org/\" make\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:232
+msgid ""
+"Check for more details about the build tools on extref:{fdp-primer}overview/"
+"[FreeBSD Documentation Project Primer for New Contributors, overview-quick-"
+"start] book."
+msgstr ""
+"Verifique mais detalhes sobre as ferramentas de construção no livro extref:"
+"{fdp-primer}overview/[Primer do Projeto de Documentação do FreeBSD para "
+"Novos Contribuidores, overview-quick-start]."
+
+#. [source,shell]
+#. ....
+#. % rsync -vaHz --delete rsync://bit0.us-west.freebsd.org/FreeBSD-www-data/ /usr/local/www/
+#. ....
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:243
+msgid ""
+"Notice the website was split into www.FreeBSD.org and docs.FreeBSD.org, and "
+"there are links between them; plus, at this moment, `HUGO_baseURL` variable "
+"won't cover all links, this way, mirroring the website is discouraged."
+msgstr ""
+"Observe que o site foi dividido em www.FreeBSD.org e docs.FreeBSD.org, e "
+"existem links entre eles; além disso, no momento, a variável `HUGO_baseURL` "
+"não cobrirá todos os links, dessa forma, o espelhamento do site não é "
+"encorajado."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:246
+#, no-wrap
+msgid "Mirroring Packages"
+msgstr "Espelhando os Pacotes"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:251
+msgid ""
+"Due to very high requirements of bandwidth, storage and adminstration the "
+"FreeBSD Project has decided not to allow public mirrors of packages. For "
+"sites with lots of machines, it might be advantagous to run a caching HTTP "
+"proxy for the man:pkg[8] process. Alternatively specific packages and their "
+"dependencies can be fetched by running something like the following:"
+msgstr ""
+"Devido aos requisitos muito altos de largura de banda, armazenamento e "
+"administração, o Projeto FreeBSD decidiu não permitir espelhos públicos de "
+"pacotes pré compilados. Para sites com muitas máquinas, pode ser vantajoso "
+"executar um proxy HTTP com cache habilitado para o processo man:pkg[8]. "
+"Alternativamente, pacotes específicos e suas dependências podem ser baixados "
+"executando algo como o seguinte:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/hubs/_index.adoc:255
+#, no-wrap
+msgid "% pkg fetch -d -o /usr/local/mirror vim\n"
+msgstr "% pkg fetch -d -o /usr/local/mirror vim\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:258
+msgid ""
+"Once those packages have been fetched, the repository metadata must be "
+"generated by running:"
+msgstr ""
+"Quando esses pacotes forem baixados, os metadados do repositório devem ser "
+"gerados executando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/hubs/_index.adoc:262
+#, no-wrap
+msgid "% pkg repo /usr/local/mirror\n"
+msgstr "% pkg repo /usr/local/mirror\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:266
+msgid ""
+"Once the packages have been fetched and the metadata for the repository has "
+"been generated, serve the packages up to the client machines via HTTP. For "
+"additional information see the man pages for man:pkg[8], specifically the "
+"man:pkg-repo[8] page."
+msgstr ""
+"Depois que os pacotes forem baixados e os metadados do repositório forem "
+"gerados, sirva os pacotes para as máquinas clientes via HTTP. Para obter "
+"informações adicionais, consulte as páginas man do man:pkg[8], "
+"especificamente a página man:pkg-repo[8]."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:268
+#, no-wrap
+msgid "How Often Should I Mirror?"
+msgstr "Com que frequência eu devo atualizar o conteúdo do meu site espelho?"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:274
+msgid ""
+"Every mirror should be updated at a minimum of once per day. Certainly a "
+"script with locking to prevent multiple runs happening at the same time will "
+"be needed to run from man:cron[8]. Since nearly every admin does this in "
+"their own way, specific instructions cannot be provided. It could work "
+"something like this:"
+msgstr ""
+"Todo espelho deve ser atualizado pelo menos uma vez por dia. Certamente, um "
+"script com bloqueio para evitar que várias execuções ocorram ao mesmo tempo "
+"será necessário para ser executado pelo man:cron[8]. Como cada administrador "
+"faz isso de sua própria maneira, instruções específicas não podem ser "
+"fornecidas. Este processo poderia funcionar , por exemplo, desta forma:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:278
+msgid ""
+"Put the command to run your mirroring application in a script. Use of a "
+"plain `/bin/sh` script is recommended."
+msgstr ""
+"Coloque o comando para executar sua aplicação de espelhamento em um script. "
+"O uso de um script `/bin/sh` simples é recomendado."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:279
+msgid ""
+"Add some output redirections so diagnostic messages are logged to a file."
+msgstr ""
+"Adicione alguns redirecionamentos de saída para que as mensagens de "
+"diagnóstico sejam registradas em um arquivo."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:280
+msgid "Test if your script works. Check the logs."
+msgstr "Teste se o seu script funciona. Verifique os logs."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:281
+msgid ""
+"Use man:crontab[1] to add the script to the appropriate user's man:"
+"crontab[5]. This should be a different user than what your FTP daemon runs "
+"as so that if file permissions inside your FTP area are not world-readable "
+"those files cannot be accessed by anonymous FTP. This is used to \"stage\" "
+"releases - making sure all of the official mirror sites have all of the "
+"necessary release files on release day."
+msgstr ""
+"Use o man:crontab[1] para adicionar o script ao man:crontab[5] do usuário "
+"apropriado. Este deve ser um usuário diferente do que seu daemon FTP é "
+"executado, para que, se as permissões de arquivo dentro de sua área FTP não "
+"forem legíveis por todo o mundo, esses arquivos não possam ser acessados "
+"pelo FTP anônimo. Isso é usado para \"preparar\" as releases - garantindo "
+"que todos os sites de espelho oficiais tenham todos os arquivos da release "
+"necessários no dia do seu lançamento."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:284
+msgid "Here are some recommended schedules:"
+msgstr "Aqui estão alguns agendamentos recomendados:"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:286
+msgid "FTP fileset: daily"
+msgstr "Conjunto de arquivos FTP: diariamente"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:287
+msgid "WWW pages: daily"
+msgstr "Páginas WWW: diariamente"
+
+#. type: Title ==
+#: documentation/content/en/articles/hubs/_index.adoc:289
+#, no-wrap
+msgid "Where to Mirror From"
+msgstr "De onde fazer o espelhamento"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:294
+msgid ""
+"This is an important issue. So this section will spend some effort to "
+"explain the backgrounds. We will say this several times: under no "
+"circumstances should you mirror from `ftp.FreeBSD.org`."
+msgstr ""
+"Esta é uma questão importante. Portanto, esta seção dedicará algum esforço "
+"para explicar o os motivos que estão por trás desta orientação. Diremos isso "
+"várias vezes: em nenhuma circunstância você deve espelhar a partir de `ftp."
+"FreeBSD.org`."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:296
+#, no-wrap
+msgid "A few Words About the Organization"
+msgstr "Algumas palavras sobre a organização"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:307
+msgid ""
+"Mirrors are organized by country. All official mirrors have a DNS entry of "
+"the form `ftpN.CC.FreeBSD.org`. _CC_ (i.e., country code) is the _top level "
+"domain_ (TLD) of the country where this mirror is located. _N_ is a number, "
+"telling that the host would be the _Nth_ mirror in that country. (Same "
+"applies to `wwwN.CC.FreeBSD.org`, etc.) There are mirrors with no _CC_ "
+"part. These are the mirror sites that are very well connected and allow a "
+"large number of concurrent users. `ftp.FreeBSD.org` is actually two "
+"machines, one currently located in Denmark and the other in the United "
+"States. It is _NOT_ a master site and should never be used to mirror from. "
+"Lots of online documentation leads \"interactive\"users to `ftp.FreeBSD.org` "
+"so automated mirroring systems should find a different machine to mirror "
+"from."
+msgstr ""
+"Os espelhos são organizados por país. Todos os espelhos oficiais têm uma "
+"entrada DNS com a forma `ftpN.CC.FreeBSD.org`. _CC_ (ou seja, código do "
+"país) é o _domínio de nível superior_ (TLD) do país onde esse espelho está "
+"localizado. _N_ é um número, indicando que o host seria o _N-ésimo_ espelho "
+"nesse país. (O mesmo se aplica a `wwwN.CC.FreeBSD.org`, etc.) Existem "
+"espelhos sem a parte _CC_. Esses são os sites de espelho que estão muito bem "
+"conectados e permitem um grande número de usuários simultâneos. O `ftp."
+"FreeBSD.org` na verdade são duas máquinas, uma atualmente localizada na "
+"Dinamarca e outra nos Estados Unidos. Não é um site principal e nunca deve "
+"ser usado para se espelhar a partir dele. Muita documentação online "
+"direciona usuários \"interativos\" para `ftp.FreeBSD.org`, portanto, "
+"sistemas automatizados de espelhamento devem encontrar um servidor diferente "
+"para espelhar."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:315
+msgid ""
+"Additionally there exists a hierarchy of mirrors, which is described in "
+"terms of __tiers__. The master sites are not referred to but can be "
+"described as __Tier-0__. Mirrors that mirror from these sites can be "
+"considered __Tier-1__, mirrors of __Tier-1__-mirrors, are __Tier-2__, etc. "
+"Official sites are encouraged to be of a low __tier__, but the lower the "
+"tier the higher the requirements in terms as described in <<mirror-"
+"requirements>>. Also access to low-tier-mirrors may be restricted, and "
+"access to master sites is definitely restricted. The __tier__-hierarchy is "
+"not reflected by DNS and generally not documented anywhere except for the "
+"master sites. However, official mirrors with low numbers like 1-4, are "
+"usually _Tier-1_ (this is just a rough hint, and there is no rule)."
+msgstr ""
+"Além disso, existe uma hierarquia de espelhos, que é descrita em termos de "
+"__níveis__. Os sites principais não são mencionados, mas podem ser descritos "
+"como __Nível-0__. Espelhos que espelham a partir desses sites podem ser "
+"considerados __Nível-1__, espelhos de espelhos __Nível-1__ são __Nível-2__, "
+"etc. Sites oficiais são incentivados a ter um nível baixo, mas quanto mais "
+"baixo o nível, maiores os requisitos como descrito em <<mirror-"
+"requirements>>. O acesso a espelhos de baixo nível pode ser restrito e o "
+"acesso a sites principais é definitivamente restrito. A hierarquia de "
+"__nível__ não é refletida pelo DNS e geralmente não é documentada em nenhum "
+"lugar, exceto para os sites principais. No entanto, espelhos oficiais com "
+"números baixos como 1-4, geralmente são __Nível-1__ (isso é apenas uma dica "
+"aproximada e não há regra)."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:317
+#, no-wrap
+msgid "Ok, but Where Should I get the Stuff Now?"
+msgstr "Ok, mas de onde devo baixar os arquivos agora?"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:321
+msgid ""
+"Under no circumstances should you mirror from `ftp.FreeBSD.org`. The short "
+"answer is: from the site that is closest to you in Internet terms, or gives "
+"you the fastest access."
+msgstr ""
+"Em nenhuma circunstância você deve espelhar a partir de `ftp.FreeBSD.org`. A "
+"resposta curta é: a partir do site que estiver mais próximo de você em "
+"termos de Internet ou que oferecer o acesso mais rápido."
+
+#. type: Title ====
+#: documentation/content/en/articles/hubs/_index.adoc:323
+#, no-wrap
+msgid "I Just Want to Mirror from Somewhere!"
+msgstr "Eu só quero espelhar de algum lugar!"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:327
+msgid ""
+"If you have no special intentions or requirements, the statement in <<mirror-"
+"where-where>> applies. This means:"
+msgstr ""
+"Se você não tem intenções ou requisitos especiais, a afirmação em <<mirror-"
+"where-where>> se aplica. Isso significa:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:331
+msgid ""
+"Check for those which provide fastest access (number of hops, round-trip-"
+"times) and offer the services you intend to use (like rsync)."
+msgstr ""
+"Verifique quais sites oferecem o acesso mais rápido (número de saltos, "
+"tempos de ida e volta) e oferecem os serviços que você pretende usar (como "
+"rsync)."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:332
+msgid ""
+"Contact the administrators of your chosen site stating your request, and "
+"asking about their terms and policies."
+msgstr ""
+"Entre em contato com os administradores do site escolhido, informando sua "
+"solicitação e perguntando sobre seus termos e políticas."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:333
+msgid "Set up your mirror as described above."
+msgstr "Configure o seu site espelho conforme descrito acima."
+
+#. type: Title ====
+#: documentation/content/en/articles/hubs/_index.adoc:336
+#, no-wrap
+msgid "I am an Official Mirror, What is the Right Site for Me?"
+msgstr "Sou um site espelho oficial, qual é o site certo para mim?"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:341
+msgid ""
+"In general the description in <<mirror-where-simple>> still applies. Of "
+"course you may want to put some weight on the fact that your upstream should "
+"be of a low tier. There are some other considerations about _official_ "
+"mirrors that are described in <<mirror-official>>."
+msgstr ""
+"Em geral, a descrição em <<mirror-where-simple>> ainda se aplica. Claro, "
+"você pode querer dar mais importância ao fato de que o site upstream deve "
+"ter um nível baixo. Existem algumas outras considerações sobre espelhos "
+"_oficiais_ que são descritas em <<mirror-official>>."
+
+#. type: Title ====
+#: documentation/content/en/articles/hubs/_index.adoc:343
+#, no-wrap
+msgid "I Want to Access the Master Sites!"
+msgstr "Eu quero acessar os sites principais!"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:350
+msgid ""
+"If you have good reasons and good prerequisites, you may want and get access "
+"to one of the master sites. Access to these sites is generally restricted, "
+"and there are special policies for access. If you are already an _official_ "
+"mirror, this certainly helps you getting access. In any other case make "
+"sure your country really needs another mirror. If it already has three or "
+"more, ask the \"zone administrator\" (mailto:hostmaster@CC.FreeBSD."
+"org[hostmaster@CC.FreeBSD.org]) or {freebsd-hubs} first."
+msgstr ""
+"Se você tiver bons motivos e bons pré-requisitos, poderá querer e obter "
+"acesso a um dos sites principais. O acesso a esses sites geralmente é "
+"restrito e existem políticas especiais para acesso. Se você já é um espelho "
+"_oficial_, certamente isso ajuda a obter acesso. Em qualquer outro caso, "
+"certifique-se de que seu país realmente precisa de outro espelho. Se já "
+"tiver três ou mais, pergunte ao \"administrador de zona\" (mailto:"
+"hostmaster@CC.FreeBSD.org[hostmaster@CC.FreeBSD.org]) ou na {freebsd-hubs} "
+"primeiro."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:353
+msgid ""
+"Whoever helped you become, an _official_ should have helped you gain access "
+"to an appropriate upstream host, either one of the master sites or a "
+"suitable Tier-1 site. If not, you can send email to mailto:mirror-"
+"admin@FreeBSD.org[mirror-admin@FreeBSD.org] to request help with that."
+msgstr ""
+"Quem o ajudou a se tornar um espelho _oficial_ deve ter lhe ajudado a obter "
+"acesso a um host upstream apropriado, seja um dos sites principais ou um "
+"site Tier-1 adequado. Se não, você pode enviar um e-mail para mailto:mirror-"
+"admin@FreeBSD.org[mirror-admin@FreeBSD.org] para solicitar ajuda com isso."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:355
+msgid "There is one master site for the FTP fileset."
+msgstr "Existe um site principal para o conjunto de arquivos FTP."
+
+#. type: Title =====
+#: documentation/content/en/articles/hubs/_index.adoc:357
+#, no-wrap
+msgid "ftp-master.FreeBSD.org"
+msgstr "ftp-master.FreeBSD.org"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:360
+msgid "This is the master site for the FTP fileset."
+msgstr "Este é o site principal do conjunto de arquivos FTP."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:363
+msgid ""
+"`ftp-master.FreeBSD.org` provides rsync access, in addition to FTP. Refer "
+"to <<mirror-ftp-rsync>>."
+msgstr ""
+"O `ftp-master.FreeBSD.org` disponibiliza acesso via rsync, além do FTP. "
+"Consulte <<mirror-ftp-rsync>> para obter mais informações."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:365
+msgid ""
+"Mirrors are also encouraged to allow rsync access for the FTP contents, "
+"since they are __Tier-1__-mirrors."
+msgstr ""
+"Também é encorajado que os espelhos permitam o acesso ao rsync para o "
+"conteúdo FTP, já que eles são espelhos __Tier-1__."
+
+#. type: Title ==
+#: documentation/content/en/articles/hubs/_index.adoc:367
+#, no-wrap
+msgid "Official Mirrors"
+msgstr "Espelhos Oficiais"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:370
+msgid "Official mirrors are mirrors that"
+msgstr "Espelhos oficiais são os espelhos que"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:372
+msgid "a) have a `FreeBSD.org` DNS entry (usually a CNAME)."
+msgstr "a) ter uma entrada DNS `FreeBSD.org` (geralmente um CNAME)."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:373
+msgid ""
+"b) are listed as an official mirror in the FreeBSD documentation (like "
+"handbook)."
+msgstr ""
+"b) são listados como um espelho oficial na documentação do FreeBSD (como no "
+"Handbook)."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:376
+msgid ""
+"So far to distinguish official mirrors. Official mirrors are not necessarily "
+"__Tier-1__-mirrors. However you probably will not find a __Tier-1__-mirror, "
+"that is not also official."
+msgstr ""
+"Até agora, para distinguir espelhos oficiais. Espelhos oficiais não "
+"necessariamente são espelhos __Tier-1__. No entanto, provavelmente você não "
+"encontrará um espelho __Tier-1__ que não seja oficial."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:378
+#, no-wrap
+msgid "Special Requirements for Official (tier-1) Mirrors"
+msgstr "Requisitos especiais para sites espelhos oficiais (Tier-1)"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:383
+msgid ""
+"It is not so easy to state requirements for all official mirrors, since the "
+"project is sort of tolerant here. It is more easy to say, what _official "
+"tier-1 mirrors_ are required to. All other official mirrors can consider "
+"this a big __should__."
+msgstr ""
+"Não é tão fácil estabelecer requisitos para todos os espelhos oficiais, já "
+"que o projeto é bastante tolerante nesse aspecto. É mais fácil dizer o que é "
+"exigido dos _espelhos oficiais de nível 1_. Todos os outros espelhos "
+"oficiais devem considerar isso uma grande __recomendação__."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:385
+msgid "Tier-1 mirrors are required to:"
+msgstr "Os sites espelhos Tier-1 precisam:"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:387
+msgid "carry the complete fileset"
+msgstr "ter o conjunto completo de arquivos"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:388
+msgid "allow access to other mirror sites"
+msgstr "permitir acesso a outros sites espelho"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:389
+msgid "provide FTP and rsync access"
+msgstr "fornecer acesso FTP e rsync"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:392
+msgid ""
+"Furthermore, admins should be subscribed to the {freebsd-hubs}. See extref:"
+"{handbook}[this link, eresources-mail] for details, how to subscribe."
+msgstr ""
+"Além disso, os administradores devem se inscrever no {freebsd-hubs}. "
+"Consulte extref:{handbook}[este link, eresources-mail] para obter detalhes "
+"sobre como se inscrever."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:397
+msgid ""
+"It is _very_ important for a hub administrator, especially Tier-1 hub "
+"admins, to check the https://www.FreeBSD.org/releng/[release schedule] for "
+"the next FreeBSD release. This is important because it will tell you when "
+"the next release is scheduled to come out, and thus giving you time to "
+"prepare for the big spike of traffic which follows it."
+msgstr ""
+"É _muito_ importante para um administrador de um site espelho, especialmente "
+"administradores de espelhos Tier-1, verificar o https://www.FreeBSD.org/"
+"releng/[calendário de lançamento] para o próximo release do FreeBSD. Isso é "
+"importante porque informará quando o próximo release está programado para "
+"sair, dando tempo para se preparar para o grande aumento de tráfego que o "
+"segue."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:400
+msgid ""
+"It is also important that hub administrators try to keep their mirrors as up-"
+"to-date as possible (again, even more crucial for Tier-1 mirrors). If "
+"Mirror1 does not update for a while, lower tier mirrors will begin to mirror "
+"old data from Mirror1 and thus begins a downward spiral... Keep your mirrors "
+"up to date!"
+msgstr ""
+"É importante também que os administradores dos hubs tentem manter seus "
+"espelhos atualizados o máximo possível (novamente, ainda mais crucial para "
+"os espelhos Tier-1). Se o Mirror1 não atualizar por um tempo, os espelhos de "
+"nível inferior começarão a espelhar dados antigos do Mirror1 e, assim, "
+"começa uma espiral descendente... Mantenha seus espelhos atualizados!"
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:403
+#, no-wrap
+msgid "How to Become Official Then?"
+msgstr "Como se tornar um site espelho oficial?"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:406
+msgid ""
+"Please contact the Cluster Administrators as documented at https://www."
+"FreeBSD.org/administration/#t-clusteradm."
+msgstr ""
+"Por favor, entre em contato com os Administradores do Cluster conforme "
+"documentado em https://www.FreeBSD.org/administration/#t-clusteradm."
+
+#. type: Title ==
+#: documentation/content/en/articles/hubs/_index.adoc:408
+#, no-wrap
+msgid "Some Statistics from Mirror Sites"
+msgstr "Algumas estatísticas dos sites espelho"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:411
+msgid ""
+"Here are links to the stat pages of your favorite mirrors (aka the only ones "
+"who feel like providing stats)."
+msgstr ""
+"Aqui estão os links para as páginas de estatísticas dos seus sites espelho "
+"favoritos (também conhecidos como os únicos que têm a boa vontade de "
+"fornecer as estatísticas)."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:413
+#, no-wrap
+msgid "FTP Site Statistics"
+msgstr "Estatísticas do site FTP"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:416
+msgid ""
+"ftp.is.FreeBSD.org - mailto:hostmaster@is.FreeBSD.org[hostmaster@is.FreeBSD."
+"org] - http://www.rhnet.is/status/draupnir/draupnir.html[ (Bandwidth)] "
+"http://www.rhnet.is/status/ftp/ftp-notendur.html[(FTP processes)] http://www."
+"rhnet.is/status/ftp/http-notendur.html[(HTTP processes)]"
+msgstr ""
+"ftp.is.FreeBSD.org - mailto:hostmaster@is.FreeBSD.org[hostmaster@is.FreeBSD."
+"org] - http://www.rhnet.is/status/draupnir/draupnir.html[ (Largura de "
+"banda)] http://www.rhnet.is/status/ftp/ftp-notendur.html[(Processos FTP)] "
+"http://www.rhnet.is/status/ftp/http-notendur.html[(Processos HTTP)]"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:416
+msgid ""
+"ftp2.ru.FreeBSD.org - mailto:mirror@macomnet.ru[mirror@macomnet.ru] - http://"
+"mirror.macomnet.net/mrtg/mirror.macomnet.net_195.128.64.25.html[(Bandwidth)] "
+"http://mirror.macomnet.net/mrtg/mirror.macomnet.net_proc.html[(HTTP and FTP "
+"users)]"
+msgstr ""
+"ftp2.ru.FreeBSD.org - mailto:mirror@macomnet.ru[mirror@macomnet.ru] - http://"
+"mirror.macomnet.net/mrtg/mirror.macomnet.net_195.128.64.25.html[(Largura de "
+"banda)] http://mirror.macomnet.net/mrtg/mirror.macomnet.net_proc."
+"html[(Usuários de HTTP e FTP)]"
+
+#~ msgid "We are not accepting any new mirrors at this time."
+#~ msgstr "Não estamos aceitando novos sites espelhos neste momento."
+
+#~ msgid "A command line to mirror the FreeBSD web site might look like:"
+#~ msgstr ""
+#~ "Uma linha de comando para espelhar o site do FreeBSD pode parecer com:"
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/ipsec-must/_index.adoc b/documentation/content/pt-br/articles/ipsec-must/_index.adoc
index e753e4f3af..5b0996171f 100644
--- a/documentation/content/pt-br/articles/ipsec-must/_index.adoc
+++ b/documentation/content/pt-br/articles/ipsec-must/_index.adoc
@@ -1,8 +1,11 @@
---
-title: Verificação Independente da Funcionalidade IPsec no FreeBSD
authors:
- - author: David Honig
+ -
+ author: 'David Honig'
email: honig@sprynet.com
+description: 'Verificação Independente da Funcionalidade IPsec no FreeBSD'
+tags: ["IPsec", "verification", "FreeBSD"]
+title: 'Verificação Independente da Funcionalidade IPsec no FreeBSD'
trademarks: ["freebsd", "opengroup", "general"]
---
@@ -49,7 +52,7 @@ toc::[]
[[problem]]
== O problema
-Primeiro, vamos assumir que você tem o <<ipsec-install>>. Como você sabe que ele está <<caveat>>? Claro, sua conexão não funcionará se ele estiver mal configurado, e funcionará quando você finalmente acertar a configuração. O man:netstat[1]irá listá-lo. Mas você pode confirmar isso de forma independente?
+Primeiramente, vamos supor que você tenha o instalado o IPsec (<<ipsec-install>>). Como você sabe se há algum problema (<<caveat>>)? É verdade que sua conexão não funcionará se estiver mal configurada, e funcionará quando você finalmente acertar. O comando man:netstat[1] listará isso. Mas você pode confirmar isso de forma independente?
[[solution]]
== A solução
@@ -59,26 +62,26 @@ Em primeiro lugar, vejamos alguma informação teórica relevante em relação
. Dados criptografados são uniformemente distribuídos, ou seja, possuem entropia máxima por símbolo;
. Os dados brutos, não comprimidos são tipicamente redundantes, isto é, possuem entropia submáxima.
-Suponha que você possa medir a entropia dos dados destinados para a sua interface de rede e também dos dados originados dela. Então você pode ver a diferença entre dados não criptografados e dados criptografados. Isso seria verdade mesmo que alguns dos dados no "modo criptografado" não estivessem criptografados --- como deve o cabeçalho IP mais externo para que o pacote seja roteável.
+Suponha que você pudesse medir a entropia dos dados que entram e saem de sua interface de rede. Então, você poderia ver a diferença entre dados não criptografados e dados criptografados. Isso seria verdade mesmo que alguns dos dados no "modo criptografado" não estivessem criptografados - como o cabeçalho IP mais externo deve estar se o pacote for roteável.
[[MUST]]
=== MUST
-O teste de "Estatística Universal para Geradores de Bits Aleatórios" de Ueli Maurer (https://web.archive.org/web/20011115002319/http://www.geocities.com/SiliconValley/Code/4704/universal.pdf[MUST ]) mede rapidamente a entropia de uma amostra. Ele usa um algoritmo semelhante à compressão. <<code>> para uma variante que mede partes sucessivas (aproximadamente um quarto de megabyte) de um arquivo.
+O "Universal Statistical Test for Random Bit Generators" de Ueli Maurer (https://web.archive.org/web/20011115002319/http://www.geocities.com/SiliconValley/Code/4704/universal.pdf[MUST]) mede rapidamente a entropia de uma amostra. Ele usa um algoritmo semelhante ao de compressão. O <<Código>> de uma variante que mede blocos sucessivos (de cerca de um quarto de megabyte) de um arquivo.
[[tcpdump]]
=== Tcpdump
-Também precisamos de uma maneira de capturar os dados brutos da rede. Um programa chamado man:tcpdump[1] permite que você faça isso, se você ativou a interface _Berkeley Packet Filter_ no seu <<kernel>>.
+Também precisamos de uma maneira de capturar os dados brutos da rede. Um programa chamado man:tcpdump[1] permite que você faça isso, se você habilitou a interface do _Berkeley Packet Filter_ no seu <<kernel>>.
O comando:
-[source,shell]
+[source, shell]
....
tcpdump -c 4000 -s 10000 -w dumpfile.bin
....
-irá capturar 4000 pacotes brutos no arquivo _dumpfile.bin_. Até 10.000 bytes por pacote serão capturados neste exemplo.
+serão capturados 4000 pacotes brutos e salvos em _dumpfile.bin_. Neste exemplo, serão capturados até 10.000 bytes por pacote.
[[experiment]]
== O Experimento
@@ -86,15 +89,15 @@ irá capturar 4000 pacotes brutos no arquivo _dumpfile.bin_. Até 10.000 bytes p
Aqui está o experimento:
[.procedure]
+====
. Abra uma janela para um host IPsec e outra janela para um host inseguro.
-. Agora comece a <<tcpdump>>.
-. Na janela "segura", execute o comando UNIX(R) man:yes[1], que transmitirá o caractere `y`. Depois de um tempo, pare com isso. Alterne para a janela insegura e repita. Depois de um tempo, pare.
-. Agora execute o <<code>> nos pacotes capturados. Você deve ver algo como o seguinte. O importante é notar que a conexão segura tem 93% (6,7) do valor esperado (7,18), e a conexão "normal" tem 29% (2,1) do valor esperado.
+. Agora, inicie o <<tcpdump>>.
+. Na janela "segura", execute o comando UNIX(R) man:yes[1], que transmitirá o caractere `y`. Após um tempo, pare este comando. Mude para a janela "insegura" e repita o processo. Após um tempo, pare também esse comando.
+. Agora execute o <<code>> nos pacotes capturados. Você deverá ver algo como o seguinte. O importante a ser observado é que a conexão segura tem 93% (6,7) do valor esperado (7,18), enquanto a conexão "normal" tem 29% (2,1) do valor esperado.
+
-[source,shell]
+[source, shell]
....
% tcpdump -c 4000 -s 10000 -w ipsecdemo.bin
-
% uliscan ipsecdemo.bin
Uliscan 21 Dec 98
L=8 256 258560
@@ -108,28 +111,29 @@ Expected value for L=8 is 7.1836656
2.0838 -----------------
2.0983 -----------------
....
+====
[[caveat]]
== Embargo
-Esta experiência mostra que o IPsec _parece_ estar distribuindo os dados de carga __uniformemente__, como a criptografia deveria. No entanto, o experimento descrito aqui _não pode_ detectar muitas das falhas possíveis em um sistema (nenhum dos quais eu tenho qualquer evidência para). Estes incluem geração ou troca deficiente de chaves, dados ou chaves sendo visíveis para outros, uso de algoritmos fracos, subversão do kernel, etc. Estude a fonte; conheça o código.
+Este experimento mostra que o IPsec parece estar distribuindo os dados do payload __uniformly__, como a criptografia deveria fazer. No entanto, o experimento descrito aqui não pode detectar muitas possíveis falhas em um sistema (das quais não tenho nenhuma evidência). Estes incluem geração ou troca de chave fraca, dados ou chaves visíveis para outros, uso de algoritmos fracos, subversão do kernel, etc. Estude o código-fonte; conheça o código.
[[IPsec]]
== IPsec --- Definição
-Extensões de segurança do protocolo Internet para o IPv4; obrigatório para o IPv6. Um protocolo para negociar criptografia e autenticação no nível IP (host para host). O SSL protege apenas um soquete de aplicativo; O SSH protege apenas um login; PGP protege apenas um arquivo ou mensagem especifico. O IPsec criptografa tudo entre dois hosts.
+As extensões de segurança do Protocolo de Internet para o IPv4; obrigatório para o IPv6. Um protocolo para negociar criptografia e autenticação no nível IP (host-to-host). O SSL protege apenas um socket de aplicativo; O SSH protege apenas um login; O PGP protege apenas um arquivo ou mensagem especificada. O IPsec criptografa tudo entre dois hosts.
[[ipsec-install]]
== Instalando o IPsec
-A maioria das versões modernas do FreeBSD tem suporte a IPsec em sua fonte base. Portanto, você precisará incluir a opção `IPSEC` em sua configuração de kernel e, após a reconstrução e reinstalação do kernel, configurar as conexões IPsec usando o comando man:setkey[8].
+A maioria das versões modernas do FreeBSD possui suporte IPsec em seu código base. Portanto, você precisará incluir a opção `IPSEC` na configuração do seu kernel e, após recompilar e reinstalar o kernel, configurar as conexões IPsec usando o comando man:setkey[8].
-Um guia completo sobre como executar o IPsec no FreeBSD é fornecido no extref:{handbook}security[Handbook do FreeBSD, ipsec].
+Um guia abrangente sobre como executar o IPsec no FreeBSD está disponível no extref:{handbook}[Handbook do FreeBSD, ipsec].
[[kernel]]
== src/sys/i386/conf/KERNELNAME
-Isto precisa estar presente no arquivo de configuração do kernel para habilitar o suporte para captura de dados de rede com o man:tcpdump[1]. Certifique-se de executar o man:config[8] depois de adicionar a linha, de recompilar e de reinstalar.
+Isso precisa estar presente no arquivo de configuração do kernel para capturar dados de rede com o comando man:tcpdump[1]. Certifique-se de executar man:config[8] após adicionar isso e reconstruir e reinstalar o kernel.
[.programlisting]
....
@@ -137,9 +141,9 @@ device bpf
....
[[code]]
-== Teste Estatístico Universal de Maurer (para tamanho de bloco = 8 bits)
+== Teste estatístico universal de Maurer (para tamanho de bloco = 8 bits)
-Você pode encontrar o mesmo código em https://web.archive.org/web/20031204230654/http://www.geocities.com:80/SiliconValley/Code/4704/uliscanc.txt[neste link].
+Você pode encontrar o mesmo código https://web.archive.org/web/20031204230654/http://www.geocities.com:80/SiliconValley/Code/4704/uliscanc.txt[neste link].
[.programlisting]
....
diff --git a/documentation/content/pt-br/articles/ipsec-must/_index.po b/documentation/content/pt-br/articles/ipsec-must/_index.po
new file mode 100644
index 0000000000..d4e7639071
--- /dev/null
+++ b/documentation/content/pt-br/articles/ipsec-must/_index.po
@@ -0,0 +1,741 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-05-21 14:43-0300\n"
+"PO-Revision-Date: 2023-05-29 22:23+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesipsec-must_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Title =
+#: documentation/content/en/articles/ipsec-must/_index.adoc:1
+#: documentation/content/en/articles/ipsec-must/_index.adoc:11
+#, no-wrap
+msgid "Independent Verification of IPsec Functionality in FreeBSD"
+msgstr "Verificação Independente da Funcionalidade IPsec no FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:47
+msgid ""
+"You installed IPsec and it seems to be working. How do you know? I describe "
+"a method for experimentally verifying that IPsec is working."
+msgstr ""
+"Você instalou o IPsec e ele parece estar funcionando. Como você sabe? Eu "
+"descrevo um método para verificar experimentalmente se o IPsec está "
+"funcionando."
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:49
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:53
+#, no-wrap
+msgid "The Problem"
+msgstr "O problema"
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:58
+msgid ""
+"First, lets assume you have <<ipsec-install>>. How do you know it is "
+"<<caveat>>? Sure, your connection will not work if it is misconfigured, and "
+"it will work when you finally get it right. man:netstat[1] will list it. "
+"But can you independently confirm it?"
+msgstr ""
+"Primeiramente, vamos supor que você tenha o instalado o IPsec (<<ipsec-"
+"install>>). Como você sabe se há algum problema (<<caveat>>)? É verdade que "
+"sua conexão não funcionará se estiver mal configurada, e funcionará quando "
+"você finalmente acertar. O comando man:netstat[1] listará isso. Mas você "
+"pode confirmar isso de forma independente?"
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:60
+#, no-wrap
+msgid "The Solution"
+msgstr "A solução"
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:63
+msgid "First, some crypto-relevant info theory:"
+msgstr ""
+"Em primeiro lugar, vejamos alguma informação teórica relevante em relação à "
+"criptografia:"
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:65
+msgid ""
+"Encrypted data is uniformly distributed, i.e., has maximal entropy per "
+"symbol;"
+msgstr ""
+"Dados criptografados são uniformemente distribuídos, ou seja, possuem "
+"entropia máxima por símbolo;"
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:66
+msgid ""
+"Raw, uncompressed data is typically redundant, i.e., has sub-maximal entropy."
+msgstr ""
+"Os dados brutos, não comprimidos são tipicamente redundantes, isto é, "
+"possuem entropia submáxima."
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:70
+msgid ""
+"Suppose you could measure the entropy of the data to- and from- your network "
+"interface. Then you could see the difference between unencrypted data and "
+"encrypted data. This would be true even if some of the data in \"encrypted "
+"mode\" was not encrypted---as the outermost IP header must be if the packet "
+"is to be routable."
+msgstr ""
+"Suponha que você pudesse medir a entropia dos dados que entram e saem de sua "
+"interface de rede. Então, você poderia ver a diferença entre dados não "
+"criptografados e dados criptografados. Isso seria verdade mesmo que alguns "
+"dos dados no \"modo criptografado\" não estivessem criptografados - como o "
+"cabeçalho IP mais externo deve estar se o pacote for roteável."
+
+#. type: Title ===
+#: documentation/content/en/articles/ipsec-must/_index.adoc:72
+#, no-wrap
+msgid "MUST"
+msgstr "MUST"
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:77
+msgid ""
+"Ueli Maurer's \"Universal Statistical Test for Random Bit Generators"
+"\"(https://web.archive.org/web/20011115002319/http://www.geocities.com/"
+"SiliconValley/Code/4704/universal.pdf[MUST]) quickly measures the entropy of "
+"a sample. It uses a compression-like algorithm. <<code>> for a variant "
+"which measures successive (~quarter megabyte) chunks of a file."
+msgstr ""
+"O \"Universal Statistical Test for Random Bit Generators\" de Ueli Maurer "
+"(https://web.archive.org/web/20011115002319/http://www.geocities.com/"
+"SiliconValley/Code/4704/universal.pdf[MUST]) mede rapidamente a entropia de "
+"uma amostra. Ele usa um algoritmo semelhante ao de compressão. O <<Código>> "
+"de uma variante que mede blocos sucessivos (de cerca de um quarto de "
+"megabyte) de um arquivo."
+
+#. type: Title ===
+#: documentation/content/en/articles/ipsec-must/_index.adoc:79
+#, no-wrap
+msgid "Tcpdump"
+msgstr "Tcpdump"
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:83
+msgid ""
+"We also need a way to capture the raw network data. A program called man:"
+"tcpdump[1] lets you do this, if you have enabled the _Berkeley Packet "
+"Filter_ interface in your <<kernel>>."
+msgstr ""
+"Também precisamos de uma maneira de capturar os dados brutos da rede. Um "
+"programa chamado man:tcpdump[1] permite que você faça isso, se você "
+"habilitou a interface do _Berkeley Packet Filter_ no seu <<kernel>>."
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:85
+msgid "The command:"
+msgstr "O comando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:89
+#, no-wrap
+msgid " tcpdump -c 4000 -s 10000 -w dumpfile.bin\n"
+msgstr " tcpdump -c 4000 -s 10000 -w dumpfile.bin\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:93
+msgid ""
+"will capture 4000 raw packets to _dumpfile.bin_. Up to 10,000 bytes per "
+"packet will be captured in this example."
+msgstr ""
+"serão capturados 4000 pacotes brutos e salvos em _dumpfile.bin_. Neste "
+"exemplo, serão capturados até 10.000 bytes por pacote."
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:95
+#, no-wrap
+msgid "The Experiment"
+msgstr "O Experimento"
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:98
+msgid "Here is the experiment:"
+msgstr "Aqui está o experimento:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:102
+msgid "Open a window to an IPsec host and another window to an insecure host."
+msgstr ""
+"Abra uma janela para um host IPsec e outra janela para um host inseguro."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:103
+msgid "Now start <<tcpdump>>."
+msgstr "Agora, inicie o <<tcpdump>>."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:104
+msgid ""
+"In the \"secure\" window, run the UNIX(R) command man:yes[1], which will "
+"stream the `y` character. After a while, stop this. Switch to the insecure "
+"window, and repeat. After a while, stop."
+msgstr ""
+"Na janela \"segura\", execute o comando UNIX(R) man:yes[1], que transmitirá "
+"o caractere `y`. Após um tempo, pare este comando. Mude para a janela "
+"\"insegura\" e repita o processo. Após um tempo, pare também esse comando."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:105
+msgid ""
+"Now run <<code>> on the captured packets. You should see something like the "
+"following. The important thing to note is that the secure connection has 93% "
+"(6.7) of the expected value (7.18), and the \"normal\" connection has 29% "
+"(2.1) of the expected value."
+msgstr ""
+"Agora execute o <<code>> nos pacotes capturados. Você deverá ver algo como o "
+"seguinte. O importante a ser observado é que a conexão segura tem 93% (6,7) "
+"do valor esperado (7,18), enquanto a conexão \"normal\" tem 29% (2,1) do "
+"valor esperado."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:121
+#, no-wrap
+msgid ""
+"% tcpdump -c 4000 -s 10000 -w ipsecdemo.bin\n"
+"% uliscan ipsecdemo.bin\n"
+"Uliscan 21 Dec 98\n"
+"L=8 256 258560\n"
+"Measuring file ipsecdemo.bin\n"
+"Init done\n"
+"Expected value for L=8 is 7.1836656\n"
+"6.9396 --------------------------------------------------------\n"
+"6.6177 -----------------------------------------------------\n"
+"6.4100 ---------------------------------------------------\n"
+"2.1101 -----------------\n"
+"2.0838 -----------------\n"
+"2.0983 -----------------\n"
+msgstr ""
+"% tcpdump -c 4000 -s 10000 -w ipsecdemo.bin\n"
+"% uliscan ipsecdemo.bin\n"
+"Uliscan 21 Dec 98\n"
+"L=8 256 258560\n"
+"Measuring file ipsecdemo.bin\n"
+"Init done\n"
+"Expected value for L=8 is 7.1836656\n"
+"6.9396 --------------------------------------------------------\n"
+"6.6177 -----------------------------------------------------\n"
+"6.4100 ---------------------------------------------------\n"
+"2.1101 -----------------\n"
+"2.0838 -----------------\n"
+"2.0983 -----------------\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:125
+#, no-wrap
+msgid "Caveat"
+msgstr "Embargo"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:131
+msgid ""
+"This experiment shows that IPsec _does_ seem to be distributing the payload "
+"data __uniformly__, as encryption should. However, the experiment described "
+"here _cannot_ detect many possible flaws in a system (none of which do I "
+"have any evidence for). These include poor key generation or exchange, data "
+"or keys being visible to others, use of weak algorithms, kernel subversion, "
+"etc. Study the source; know the code."
+msgstr ""
+"Este experimento mostra que o IPsec parece estar distribuindo os dados do "
+"payload __uniformly__, como a criptografia deveria fazer. No entanto, o "
+"experimento descrito aqui não pode detectar muitas possíveis falhas em um "
+"sistema (das quais não tenho nenhuma evidência). Estes incluem geração ou "
+"troca de chave fraca, dados ou chaves visíveis para outros, uso de "
+"algoritmos fracos, subversão do kernel, etc. Estude o código-fonte; conheça "
+"o código."
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:133
+#, no-wrap
+msgid "IPsec---Definition"
+msgstr "IPsec --- Definição"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:139
+msgid ""
+"Internet Protocol security extensions to IPv4; required for IPv6. A "
+"protocol for negotiating encryption and authentication at the IP (host-to-"
+"host) level. SSL secures only one application socket; SSH secures only a "
+"login; PGP secures only a specified file or message. IPsec encrypts "
+"everything between two hosts."
+msgstr ""
+"As extensões de segurança do Protocolo de Internet para o IPv4; obrigatório "
+"para o IPv6. Um protocolo para negociar criptografia e autenticação no nível "
+"IP (host-to-host). O SSL protege apenas um socket de aplicativo; O SSH "
+"protege apenas um login; O PGP protege apenas um arquivo ou mensagem "
+"especificada. O IPsec criptografa tudo entre dois hosts."
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:141
+#, no-wrap
+msgid "Installing IPsec"
+msgstr "Instalando o IPsec"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:145
+msgid ""
+"Most of the modern versions of FreeBSD have IPsec support in their base "
+"source. So you will need to include the `IPSEC` option in your kernel "
+"config and, after kernel rebuild and reinstall, configure IPsec connections "
+"using man:setkey[8] command."
+msgstr ""
+"A maioria das versões modernas do FreeBSD possui suporte IPsec em seu código "
+"base. Portanto, você precisará incluir a opção `IPSEC` na configuração do "
+"seu kernel e, após recompilar e reinstalar o kernel, configurar as conexões "
+"IPsec usando o comando man:setkey[8]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:147
+msgid ""
+"A comprehensive guide on running IPsec on FreeBSD is provided in extref:"
+"{handbook}[FreeBSD Handbook, ipsec]."
+msgstr ""
+"Um guia abrangente sobre como executar o IPsec no FreeBSD está disponível no "
+"extref:{handbook}[Handbook do FreeBSD, ipsec]."
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:149
+#, no-wrap
+msgid "src/sys/i386/conf/KERNELNAME"
+msgstr "src/sys/i386/conf/KERNELNAME"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:153
+msgid ""
+"This needs to be present in the kernel config file to capture network data "
+"with man:tcpdump[1]. Be sure to run man:config[8] after adding this, and "
+"rebuild and reinstall."
+msgstr ""
+"Isso precisa estar presente no arquivo de configuração do kernel para "
+"capturar dados de rede com o comando man:tcpdump[1]. Certifique-se de "
+"executar man:config[8] após adicionar isso e reconstruir e reinstalar o "
+"kernel."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:157
+#, no-wrap
+msgid "device\tbpf\n"
+msgstr "device\tbpf\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:160
+#, no-wrap
+msgid "Maurer's Universal Statistical Test (for block size=8 bits)"
+msgstr "Teste estatístico universal de Maurer (para tamanho de bloco = 8 bits)"
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:163
+msgid ""
+"You can find the same code at https://web.archive.org/web/20031204230654/"
+"http://www.geocities.com:80/SiliconValley/Code/4704/uliscanc.txt[this link]."
+msgstr ""
+"Você pode encontrar o mesmo código https://web.archive.org/"
+"web/20031204230654/http://www.geocities.com:80/SiliconValley/Code/4704/"
+"uliscanc.txt[neste link]."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:168
+#, no-wrap
+msgid ""
+"/*\n"
+" ULISCAN.c ---blocksize of 8\n"
+msgstr ""
+"/*\n"
+" ULISCAN.c ---blocksize of 8\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:172
+#, no-wrap
+msgid ""
+" 1 Oct 98\n"
+" 1 Dec 98\n"
+" 21 Dec 98 uliscan.c derived from ueli8.c\n"
+msgstr ""
+" 1 Oct 98\n"
+" 1 Dec 98\n"
+" 21 Dec 98 uliscan.c derived from ueli8.c\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:174
+#, no-wrap
+msgid " This version has // comments removed for Sun cc\n"
+msgstr " This version has // comments removed for Sun cc\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:177
+#, no-wrap
+msgid ""
+" This implements Ueli M Maurer's \"Universal Statistical Test for Random\n"
+" Bit Generators\" using L=8\n"
+msgstr ""
+" This implements Ueli M Maurer's \"Universal Statistical Test for Random\n"
+" Bit Generators\" using L=8\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:180
+#, no-wrap
+msgid ""
+" Accepts a filename on the command line; writes its results, with other\n"
+" info, to stdout.\n"
+msgstr ""
+" Accepts a filename on the command line; writes its results, with other\n"
+" info, to stdout.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:182
+#, no-wrap
+msgid " Handles input file exhaustion gracefully.\n"
+msgstr " Handles input file exhaustion gracefully.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:185
+#, no-wrap
+msgid ""
+" Ref: J. Cryptology v 5 no 2, 1992 pp 89-105\n"
+" also on the web somewhere, which is where I found it.\n"
+msgstr ""
+" Ref: J. Cryptology v 5 no 2, 1992 pp 89-105\n"
+" also on the web somewhere, which is where I found it.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:188
+#, no-wrap
+msgid ""
+" -David Honig\n"
+" honig@sprynet.com\n"
+msgstr ""
+" -David Honig\n"
+" honig@sprynet.com\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:193
+#, no-wrap
+msgid ""
+" Usage:\n"
+" ULISCAN filename\n"
+" outputs to stdout\n"
+"*/\n"
+msgstr ""
+" Usage:\n"
+" ULISCAN filename\n"
+" outputs to stdout\n"
+"*/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:199
+#, no-wrap
+msgid ""
+"#define L 8\n"
+"#define V (1<<L)\n"
+"#define Q (10*V)\n"
+"#define K (100 *Q)\n"
+"#define MAXSAMP (Q + K)\n"
+msgstr ""
+"#define L 8\n"
+"#define V (1<<L)\n"
+"#define Q (10*V)\n"
+"#define K (100 *Q)\n"
+"#define MAXSAMP (Q + K)\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:202
+#, no-wrap
+msgid ""
+"#include <stdio.h>\n"
+"#include <math.h>\n"
+msgstr ""
+"#include <stdio.h>\n"
+"#include <math.h>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:214
+#, no-wrap
+msgid ""
+"int main(argc, argv)\n"
+"int argc;\n"
+"char **argv;\n"
+"{\n"
+" FILE *fptr;\n"
+" int i,j;\n"
+" int b, c;\n"
+" int table[V];\n"
+" double sum = 0.0;\n"
+" int iproduct = 1;\n"
+" int run;\n"
+msgstr ""
+"int main(argc, argv)\n"
+"int argc;\n"
+"char **argv;\n"
+"{\n"
+" FILE *fptr;\n"
+" int i,j;\n"
+" int b, c;\n"
+" int table[V];\n"
+" double sum = 0.0;\n"
+" int iproduct = 1;\n"
+" int run;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:216
+#, no-wrap
+msgid " extern double log(/* double x */);\n"
+msgstr " extern double log(/* double x */);\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:218
+#, no-wrap
+msgid " printf(\"Uliscan 21 Dec 98 \\nL=%d %d %d \\n\", L, V, MAXSAMP);\n"
+msgstr " printf(\"Uliscan 21 Dec 98 \\nL=%d %d %d \\n\", L, V, MAXSAMP);\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:225
+#, no-wrap
+msgid ""
+" if (argc < 2) {\n"
+" printf(\"Usage: Uliscan filename\\n\");\n"
+" exit(-1);\n"
+" } else {\n"
+" printf(\"Measuring file %s\\n\", argv[1]);\n"
+" }\n"
+msgstr ""
+" if (argc < 2) {\n"
+" printf(\"Usage: Uliscan filename\\n\");\n"
+" exit(-1);\n"
+" } else {\n"
+" printf(\"Measuring file %s\\n\", argv[1]);\n"
+" }\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:227
+#, no-wrap
+msgid " fptr = fopen(argv[1],\"rb\");\n"
+msgstr " fptr = fopen(argv[1],\"rb\");\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:232
+#, no-wrap
+msgid ""
+" if (fptr == NULL) {\n"
+" printf(\"Can't find %s\\n\", argv[1]);\n"
+" exit(-1);\n"
+" }\n"
+msgstr ""
+" if (fptr == NULL) {\n"
+" printf(\"Can't find %s\\n\", argv[1]);\n"
+" exit(-1);\n"
+" }\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:236
+#, no-wrap
+msgid ""
+" for (i = 0; i < V; i++) {\n"
+" table[i] = 0;\n"
+" }\n"
+msgstr ""
+" for (i = 0; i < V; i++) {\n"
+" table[i] = 0;\n"
+" }\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:241
+#, no-wrap
+msgid ""
+" for (i = 0; i < Q; i++) {\n"
+" b = fgetc(fptr);\n"
+" table[b] = i;\n"
+" }\n"
+msgstr ""
+" for (i = 0; i < Q; i++) {\n"
+" b = fgetc(fptr);\n"
+" table[b] = i;\n"
+" }\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:243
+#, no-wrap
+msgid " printf(\"Init done\\n\");\n"
+msgstr " printf(\"Init done\\n\");\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:245
+#, no-wrap
+msgid " printf(\"Expected value for L=8 is 7.1836656\\n\");\n"
+msgstr " printf(\"Expected value for L=8 is 7.1836656\\n\");\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:247
+#, no-wrap
+msgid " run = 1;\n"
+msgstr " run = 1;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:251
+#, no-wrap
+msgid ""
+" while (run) {\n"
+" sum = 0.0;\n"
+" iproduct = 1;\n"
+msgstr ""
+" while (run) {\n"
+" sum = 0.0;\n"
+" iproduct = 1;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:256
+#, no-wrap
+msgid ""
+" if (run)\n"
+" for (i = Q; run && i < Q + K; i++) {\n"
+" j = i;\n"
+" b = fgetc(fptr);\n"
+msgstr ""
+" if (run)\n"
+" for (i = Q; run && i < Q + K; i++) {\n"
+" j = i;\n"
+" b = fgetc(fptr);\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:259
+#, no-wrap
+msgid ""
+" if (b < 0)\n"
+" run = 0;\n"
+msgstr ""
+" if (b < 0)\n"
+" run = 0;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:263
+#, no-wrap
+msgid ""
+" if (run) {\n"
+" if (table[b] > j)\n"
+" j += K;\n"
+msgstr ""
+" if (run) {\n"
+" if (table[b] > j)\n"
+" j += K;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:265
+#, no-wrap
+msgid " sum += log((double)(j-table[b]));\n"
+msgstr " sum += log((double)(j-table[b]));\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:269
+#, no-wrap
+msgid ""
+" table[b] = i;\n"
+" }\n"
+" }\n"
+msgstr ""
+" table[b] = i;\n"
+" }\n"
+" }\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:272
+#, no-wrap
+msgid ""
+" if (!run)\n"
+" printf(\"Premature end of file; read %d blocks.\\n\", i - Q);\n"
+msgstr ""
+" if (!run)\n"
+" printf(\"Premature end of file; read %d blocks.\\n\", i - Q);\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:275
+#, no-wrap
+msgid ""
+" sum = (sum/((double)(i - Q))) / log(2.0);\n"
+" printf(\"%4.4f \", sum);\n"
+msgstr ""
+" sum = (sum/((double)(i - Q))) / log(2.0);\n"
+" printf(\"%4.4f \", sum);\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:278
+#, no-wrap
+msgid ""
+" for (i = 0; i < (int)(sum*8.0 + 0.50); i++)\n"
+" printf(\"-\");\n"
+msgstr ""
+" for (i = 0; i < (int)(sum*8.0 + 0.50); i++)\n"
+" printf(\"-\");\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:280
+#, no-wrap
+msgid " printf(\"\\n\");\n"
+msgstr " printf(\"\\n\");\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:294
+#, no-wrap
+msgid ""
+" /* refill initial table */\n"
+" if (0) {\n"
+" for (i = 0; i < Q; i++) {\n"
+" b = fgetc(fptr);\n"
+" if (b < 0) {\n"
+" run = 0;\n"
+" } else {\n"
+" table[b] = i;\n"
+" }\n"
+" }\n"
+" }\n"
+" }\n"
+"}\n"
+msgstr ""
+" /* refill initial table */\n"
+" if (0) {\n"
+" for (i = 0; i < Q; i++) {\n"
+" b = fgetc(fptr);\n"
+" if (b < 0) {\n"
+" run = 0;\n"
+" } else {\n"
+" table[b] = i;\n"
+" }\n"
+" }\n"
+" }\n"
+" }\n"
+"}\n"
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/license-guide/_index.adoc b/documentation/content/pt-br/articles/license-guide/_index.adoc
new file mode 100644
index 0000000000..e9f4d96af8
--- /dev/null
+++ b/documentation/content/pt-br/articles/license-guide/_index.adoc
@@ -0,0 +1,233 @@
+---
+authors:
+ -
+ author: 'Warner Losh'
+ email: imp@FreeBSD.org
+title: 'Política de Licenciamento do FreeBSD'
+trademarks: ["freebsd", "general"]
+---
+
+= Política de Licenciamento do FreeBSD
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+
+'''
+
+toc::[]
+
+[[intro]]
+
+[[pref-license]]
+== Licença Preferencial para Novos Arquivos
+
+O restante desta seção tem como objetivo ajudá-lo a começar. Em caso de dúvida, pergunte. É muito mais fácil receber conselhos do que corrigir o código fonte. O Projeto FreeBSD usa tanto licenças explícitas (onde o texto literal da licença é reproduzido em cada arquivo) quanto licenças desvinculadas (onde uma etiqueta no arquivo especifica a licença, como descrito neste documento).
+
+O Projeto FreeBSD usa este texto como licença preferencial:
+
+[.programlisting]
+....
+/*-
+ * Copyright (c) [year] [your name]
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+....
+
+O projeto FreeBSD não permite o uso da "cláusula de publicidade" em novos códigos. Devido ao grande número de colaboradores do projeto FreeBSD, se tornou difícil para muitos fornecedores comerciais cumprir com esta cláusula. Se você tiver código no repositório com a cláusula de publicidade, considere mudar para uma licença sem ela. Novas contribuições ao FreeBSD devem usar a licença BSD-2-Clause.
+
+O projeto FreeBSD desencoraja completamente novas licenças e variações das licenças padrão. Novas licenças requerem a aprovação do {core-email} para residir no repositório principal. No passado, licenças não padrão geraram mais problemas do que as padrão. Uma redação inadequada de licenças não padrão muitas vezes causa mais consequências não intencionais, então elas são improváveis de serem aprovadas pelo {core-email}. O projeto FreeBSD está padronizando na licença BSD-2-Clause, como publicada pelo SPDX.
+
+Além disso, a política do projeto requer que o código licenciado sob algumas licenças não-BSD deve ser colocado em seções específicas do repositório. Para algumas licenças, a compilação deve ser condicional ou desativada por padrão. Por exemplo, o código na parte estática do kernel GENERIC deve ser licenciado sob a licença BSD ou substancialmente similar. O software licenciado sob GPL, APSL, CDDL, etc., não deve ser compilado no kernel GENERIC estático. No entanto, o código com essas licenças pode ser usado em módulos pré-compilados.
+
+Os desenvolvedores são lembrados que, em código aberto, acertar a questão do "aberto" é tão importante quanto acertar a questão do "código fonte". O manuseio inadequado de propriedade intelectual tem consequências graves. Qualquer dúvida ou preocupação deve ser imediatamente levada ao conhecimento do {core-email}.
+
+[[license-policy]]
+== Política de Licença de Software
+
+As seções seguintes detalham as Políticas de Licenciamento de Software do projeto. Em sua maior parte, esperamos que os desenvolvedores leiam, entendam e utilizem as seções acima desta para aplicar as licenças apropriadas às suas contribuições. O restante deste documento detalha o histórico filosófico das políticas, bem como as políticas em grande detalhe. Como sempre, se o texto abaixo for confuso ou se precisar de ajuda para aplicar essas políticas, entre em contato com {core-email}.
+
+=== Princípios Orientadores
+
+O Projeto FreeBSD tem como objetivo produzir um sistema operacional completo licenciado sob a licença BSD, permitindo que os usuários do sistema criem produtos derivados sem restrições ou obrigações adicionais de licença. Nós convidamos e apreciamos muito a contribuição de alterações e adições sob a licença BSD de duas cláusulas, e incentivamos a adoção desta licença por outros projetos de código aberto. O uso da licença BSD é fundamental para incentivar a adoção de tecnologia avançada de sistema operacional, e em muitas ocasiões notáveis foi decisivo para o uso generalizado de novas tecnologias.
+
+No entanto, reconhecemos que existem razões importantes para permitir que softwares com licenças diferentes sejam incluídos no FreeBSD.
+
+Nós exigimos que o software licenciado sob algumas licenças não-BSD seja cuidadosamente isolado na árvore de código fonte, de modo que não contamine os componentes BSD puros. Essa gestão cautelosa incentiva a clareza de licenciamento e facilita a criação de produtos derivados regidos exclusivamente pela licença BSD.
+
+A menos que seja feita uma exceção especial, nenhum componente licenciado sob a licença BSD pode ser substituído por software com licença mais restritiva. Incentivamos os desenvolvedores do FreeBSD e de terceiros a buscar o re-licenciamento, o licenciamento duplo ou a reimplementação de componentes críticos sob a licença BSD. Isso facilitaria sua adoção mais integral no sistema operacional FreeBSD.
+
+=== Política
+
+* A importação de novo software licenciado sob qualquer licença que não seja a BSD e licenças semelhantes à BSD (conforme definido abaixo) requer a aprovação prévia do FreeBSD Core Team. As solicitações de importação devem incluir:
+** Uma lista de recursos ou correções de bugs que a nova versão ou patches contêm, juntamente com evidências de que nossos usuários precisam desses recursos. PRs ou referências a discussões nas listas de discussão são formas ideais de evidência.
+** Este processo deve ser utilizado para todas as importações de software, não apenas aquelas que exigem revisão do Core Team. A mera existência de uma nova versão não justifica a importação do software para o repositório do src ou do ports.
+** Uma lista das branches do FreeBSD que podem ser afetadas. A expansão do escopo requer uma nova solicitação e aprovação do FreeBSD Core Team.
+
+* A Licença Apache 2.0 é aceitável para uso em alguns casos. O Core Team deve aprovar a importação de novos componentes licenciados pela Licença Apache ou a mudança de licença de componentes existentes para a Licença Apache.
+** Esta licença é aprovada para os seguintes componentes:
+*** Conjunto de ferramentas LLVM e componentes de tempo de execução (com exceções LLVM).
+
+* A Licença BSD+Patent é aceitável para uso em alguns casos. O Core Team deve aprovar a importação de novos componentes licenciados sob a Licença BSD+Patent ou a mudança da licença de componentes existentes para a Licença BSD+Patent.
+** Esta licença é aprovada para os seguintes componentes:
+*** Código derivado do EDK2 relacionado à funcionalidade UEFI
+
+* A Licença Comum de Desenvolvimento e Distribuição (CDDL) é aceitável para uso em alguns casos. O Core Team deve aprovar a importação de novos componentes licenciados com a CDDL ou a alteração da licença de componentes existentes para a CDDL.
+** Esta licença é aprovada para os seguintes componentes:
+*** DTrace
+*** Sistema de arquivos ZFS, incluindo suporte do kernel e utilitários do espaço do usuário
+
+* Historicamente, a expressão "Todos os direitos reservados" era incluída em todos os avisos de direitos autorais. Todos os releases do BSD tinham essa expressão, para cumprir a https://en.wikipedia.org/wiki/Buenos_Aires_Convention[Convenção de Buenos Aires de 1910] nas Américas. Com a ratificação da https://en.wikipedia.org/wiki/Berne_Convention[Convenção de Berna] em 2000 pela Nicarágua, a Convenção de Buenos Aires - e a expressão - se tornaram obsoletas. Como tal, o projeto FreeBSD recomenda que os novos códigos omitam a frase e incentiva os detentores de direitos autorais existentes a removê-la. Em 2018, o projeto atualizou seus modelos para removê-la.
+* Inicialmente, muitos itens no repositório do FreeBSD eram marcados com a licença BSD-2-Clause-FreeBSD. No entanto, o SPDX obsoletou a licença como uma variante; e o texto do SPDX da tag obsoleta difere o suficiente da licença padrão do FreeBSD para não ser usado. Uma revisão do uso atual está em andamento.
+
+==== Licenças aceitáveis
+
+As seguintes licenças são consideradas aceitáveis como Licenças BSD-Like para fins desta Política. Desvios ou o uso de qualquer outra licença devem ser aprovados pelo Core Team do FreeBSD:
+
+* A versão de 2 cláusulas da licença BSD
+
+[.programlisting]
+....
+/*-
+ * Copyright (c) [year] [your name]
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+....
+* A versão de 3 cláusulas da licença BSD
+
+[.programlisting]
+....
+/*-
+ * Copyright (c) [year] [your name]
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+....
+* A Licença ISC
+
+[.programlisting]
+....
+/*-
+ * Copyright (c) [year] [copyright holder]
+ *
+ * SPDX-License-Identifier: ISC
+ */
+....
+* A licença do MIT
+
+[.programlisting]
+....
+/*-
+ * Copyright (c) [year] [copyright holders]
+ *
+ * SPDX-License-Identifier: MIT
+ */
+....
+== A Licença de Coleção de Software
+
+O Projeto FreeBSD licencia sua compilação de software conforme descrito em [.filename]#COPYRIGHT# sob a licença BSD-2-Clause. Essa licença não substitui a licença dos arquivos individuais, que é descrita abaixo. Arquivos que não possuem uma licença explícita são licenciados sob a licença BSD-2-Clause.
+
+== Localização do arquivo de licença
+
+Para cumprir com o padrão https://reuse.software/[REUSE Software] tanto quanto possível, todos os arquivos de licença serão armazenados no diretório [.filename]#LICENSES/# do repositório. Existem três subdiretórios neste diretório de nível superior. O subdiretório [.filename]#LICENSES/text/# contém, em forma destacada, o texto de todas as licenças permitidas na coleção de software do FreeBSD. Esses arquivos são armazenados usando o nome SPDX-License-Identifier seguido de .txt. O subdiretório [.filename]#LICENSES/exceptions/# contém o texto de todas as exceções permitidas em forma destacada na coleção de software do FreeBSD. Esses arquivos são armazenados usando o nome de identificador da exceção seguido de .txt. O subdiretório [.filename]#LICENSES/other/# contém, em forma destacada, os arquivos de licença referenciados em expressões SPDX-License-Identifier, mas que não são permitidos como licenças destacadas. Todos esses arquivos devem aparecer pelo menos uma vez na coleção de software do FreeBSD e devem ser removidos quando o último arquivo que os referenciar for removido. As licenças que não possuem uma correspondência adequada no SPDX devem estar em [.filename]#LICENSES/other/# e ter um nome de arquivo que comece com LicenseRef-, seguido por uma sequência de identificação exclusiva. Nenhum desses arquivos foi identificado atualmente, mas se forem, uma lista completa será apresentada aqui.
+
+O Projeto FreeBSD atualmente não utiliza os arquivos `DEP5` descritos no padrão `REUSE Software`. O Projeto FreeBSD ainda não marcou todos os arquivos da árvore de acordo com este padrão, como descrito posteriormente neste documento. O Projeto FreeBSD ainda não incluiu esses arquivos em seus repositórios, uma vez que esta política ainda está em evolução.
+
+[[individual-files]]
+== Licença de Arquivos Individuais
+
+Cada arquivo individual na coleção de software do FreeBSD possui seu próprio direito autoral e licença. A forma como eles são marcados varia e é descrita nesta seção.
+
+Uma notificação de direitos autorais identifica quem reivindica os direitos autorais legais de um arquivo. Esses são fornecidos pelo projeto com o melhor esforço possível. Como os direitos autorais podem ser transferidos legalmente, o detentor atual dos direitos autorais pode ser diferente do que está listado no arquivo.
+
+Uma licença é um documento legal entre o colaborador e os usuários do software concedendo permissão para usar as partes protegidas por direitos autorais do software, sujeito a certos termos e condições estabelecidos na licença. As licenças podem ser expressas de duas maneiras na coleção de software do FreeBSD. As licenças podem ser explícitas em um arquivo. Quando uma concessão de licença é explícita no arquivo, esse arquivo pode ser usado, copiado e modificado de acordo com essa licença. As licenças também podem ser expressas indiretamente, onde o texto da licença está em outro lugar. O projeto usa os identificadores de licença Software Package Data Exchange (SPDX) para essa finalidade, conforme descrito nas subseções a seguir. Os identificadores de licença SPDX são gerenciados pelo SPDX Workgroup da Linux Foundation e foram acordados por parceiros do setor, fornecedores de ferramentas e equipes jurídicas. Para obter mais informações, consulte https://spdx.org/ e as seções a seguir para saber como o Projeto FreeBSD os usa.
+
+Entidades que contribuem com correções e melhorias para a coleção de software sem uma licença explícita concordam em licenciar essas mudanças sob os termos que se aplicam aos arquivo(s) modificados. A política do projeto, em linha com a prática da indústria, inclui apenas um aviso de direitos autorais dos contribuintes significativos para os arquivos na coleção.
+
+Existem quatro tipos de arquivos na coleção de software do FreeBSD:
+
+. Arquivos que possuem apenas um aviso explícito de direitos autorais e de licença.
+. Arquivos que possuem tanto um aviso explícito de direitos autorais e de licença, quanto uma tag SPDX-License-Identifier.
+. Arquivos que possuem apenas um aviso de direitos autorais e uma tag SPDX-License-Identifier, mas sem uma licença explícita.
+. Arquivos que não possuem nenhum aviso de direitos autorais ou de licença.
+
+=== Apenas Direitos Autorais e Licença
+
+Muitos arquivos na coleção de software do FreeBSD possuem tanto um aviso de direitos autorais quanto uma licença explícita contida no arquivo. Nesses casos, a licença contida no arquivo é a que governa.
+
+=== Direitos autorais e licença com a expressão SPDX-License-Identifier
+
+Alguns arquivos na coleção de software do FreeBSD contêm uma declaração de direitos autorais, uma tag SPDX-License-Identifier e uma licença explícita. A licença explícita tem precedência sobre a tag SPDX-License-Identifier. A tag SPDX-License-Identifier é uma tentativa do projeto de caracterizar a licença da melhor forma possível, mas é apenas informativa para ferramentas automatizadas. Consulte <<expressions, Expressões SPDX-License-Identifier>> para saber como interpretar a expressão.
+
+=== Apenas direitos autorais e a expressão SPDX-License-Identifier.
+
+Alguns arquivos na árvore de software contêm licenças desanexadas. Esses arquivos contêm apenas um aviso de direitos autorais e uma expressão SPDX-License-Identifier, mas nenhuma licença explícita. Consulte <<expressions, Expressões SPDX-License-Identifier>> para saber como interpretar a expressão. Observação: as expressões permitidas para licenças desanexadas pelo projeto são um subconjunto das expressões usadas informativamente ou definidas pelo padrão.
+
+A licença para arquivos que contêm apenas o SPDX-License-Identifier deve ser construida da seguinte forma
+
+. Inicie a licença com o aviso de direitos autorais do arquivo, incluindo todos os detentores dos direitos autorais.
+. Para cada sub-expressão, copie o texto da licença de [.filename]#LICENSE/text/`id`.txt#. Quando exceções estiverem presentes, anexe-as de [.filename]#src/share/license/exceptions/`id`.txt#. As expressões SPDX-License-Identifier devem ser interpretadas conforme descrito no padrão SPDX.
+
+Onde o`id` é o identificador curto de licença SPDX da coluna `Identifier` de https://spdx.org/licenses/[SPDX Identifiers] ou da lista de https://spdx.org/licenses/exceptions-index.html[exceções de licença]. Se não houver um arquivo em [.filename]#LICENSE/#, então essa licença ou exceção não pode ser especificada como uma licença desanexada nesta seção.
+
+Ao ler o texto da licença que está desanexado de um arquivo, algumas considerações devem ser tomadas para que a licença desanexada faça sentido.
+
+. Qualquer referência a um aviso de direitos autorais deve se referir ao aviso de direitos autorais construído a partir do arquivo licenciado, e não de qualquer aviso de direitos autorais contido no próprio arquivo de texto da licença. Muitos arquivos SPDX têm exemplos de avisos de direitos autorais que são entendidos apenas como exemplos.
+. Quando os nomes das entidades são mencionados no texto da licença, eles devem ser interpretados como se aplicando à lista de todos os detentores de direitos autorais listados nos avisos de direitos autorais do arquivo licenciado. Por exemplo, a licença BSD-4-clause contém a frase "Este produto inclui software desenvolvido pela organização". A frase 'a organização' deve ser substituída pelos detentores de direitos autorais.
+. Quando o SPDX oferece variações da licença, entende-se que a licença no arquivo [.filename]#LICENSE/# representa a versão exata da licença selecionada. O padrão SPDX existe para corresponder a famílias de licenças e essas variações ajudam a corresponder a licenças semelhantes que a organização SPDX acredita serem legalmente idênticas.
+
+Para licenças que possuem pequenas variações no texto, o SPDX possui diretrizes para correspondê-las. Essas diretrizes não são relevantes aqui. Os colaboradores que desejam licenciar sob uma variante de uma licença SPDX que não está contida textualmente em [.filename]#LICENSE/# não podem usar a opção desanexada e devem especificar explicitamente a licença.
+
+=== Arquivos sem marcação de direitos autorais ou de licença
+
+Alguns arquivos não podem ter comentários adequados adicionados a eles. Nesses casos, uma licença pode ser encontrada em [.filename]#file.ext.license#. Por exemplo, um arquivo chamado [.filename]#foo.jpg# pode ter uma licença em [.filename]#foo.jpg.license#, seguindo as convenções de software REUSE.
+
+Arquivos criados pelo projeto que não possuem um aviso de direitos autorais são entendidos como estando sob o direito autoral e licenciamento geral em [.filename]#COPYRIGHT#. Ou o arquivo é uma mera citação de fatos, não protegíveis pela Lei de Direitos Autorais, ou o conteúdo é tão trivial que não justifica a sobrecarga de uma licença explícita.
+
+Arquivos que não possuem marcação e possuem mais do que uma quantidade trivial de material protegido por direitos autorais, ou cujo autor acredita que estejam marcados incorretamente, devem ser trazidos à atenção do Core Team do FreeBSD. É uma forte política do Projeto FreeBSD cumprir todas as licenças apropriadas.
+
+No futuro, todos esses arquivos serão marcados explicitamente ou seguirão a convenção de software REUSE [.filename]#.license#.
+
+[[expressions]]
+=== Expressões SPDX-License-Identifier
+
+A "expressão de licença SPDX" é usada em dois contextos na coleção de software do FreeBSD. Em primeiro lugar, sua forma completa é usada para arquivos que possuem declarações explícitas de licença contidas no arquivo, bem como uma expressão resumida SPDX-License-Identifier. Nesse contexto, todo o poder dessas expressões pode ser usado. Em segundo lugar, em uma forma restrita descrita acima, é usada para denotar a licença real de um determinado arquivo. Nesse segundo contexto, apenas um subconjunto dessa expressão é permitido pelo projeto.
+
+Uma "sub-expressão de licença SPDX" é um identificador de licença de forma curta SPDX da https://spdx.org/licenses/[Lista de Licenças SPDX], ou a combinação de dois identificadores de licença de forma curta SPDX separados por "WITH" quando uma https://spdx.org/licenses/exceptions-index.html[licença de exceção] se aplica. Quando várias licenças se aplicam, uma expressão consiste em palavras-chave "AND", "OR" que separam as sub-expressões e são cercadas por "(", ")". A https://spdx.github.io/spdx-spec/appendix-IV-SPDX-license-expressions/[especificação completa de expressões] explica todos os detalhes e tem precedência em caso de conflito com o tratamento simplificado desta seção.
+
+Algumas identificações de licença, como a [L]GPL, têm a opção de usar apenas aquela versão ou qualquer versão posterior. O SPDX define o sufixo "-or-later" para significar aquela versão da licença ou uma versão posterior. Define "-only" para significar apenas aquela versão específica do arquivo. Existe uma convenção antiga de não ter um sufixo (o que significa o que o novo sufixo '-only' significa, mas que as pessoas confundem com '-or-later'). Além disso, adicionar um sufixo `+` significava `-or-later`. Novos arquivos no FreeBSD não devem usar essas duas convenções. Arquivos antigos que usam essa convenção devem ser convertidos conforme apropriado.
+
+[.programlisting]
+....
+ // SPDX-License-Identifier: GPL-2.0-only
+ // SPDX-License-Identifier: LGPL-2.1-or-later
+....
+
+"WITH" deve ser usado quando um modificador de licença é necessário. No projeto FreeBSD, vários arquivos do LLVM possuem uma exceção à licença Apache 2.0:
+
+[.programlisting]
+....
+ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+....
+
+https://spdx.org/licenses/exceptions-index.html[Tags de exceção] são gerenciadas pelo SPDX. As exceções de licença só podem ser aplicadas a determinadas licenças, conforme especificado na exceção.
+
+"OR" deve ser usado se o arquivo tiver uma escolha de licença e uma licença for selecionada. Por exemplo, alguns arquivos dtsi estão disponíveis sob licenças duplas:
+
+[.programlisting]
+....
+ // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
+....
+
+"AND" deve ser usado se o arquivo tiver várias licenças cujos termos se aplicam ao uso do arquivo. Por exemplo, se o código foi incorporado por vários projetos, cada um com sua própria licença:
+
+[.programlisting]
+....
+ // SPDX-License-Identifier: BSD-2-Clause AND MIT
+....
diff --git a/documentation/content/pt-br/articles/license-guide/_index.po b/documentation/content/pt-br/articles/license-guide/_index.po
new file mode 100644
index 0000000000..5dab8f16bc
--- /dev/null
+++ b/documentation/content/pt-br/articles/license-guide/_index.po
@@ -0,0 +1,1067 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2023.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-05-21 14:43-0300\n"
+"PO-Revision-Date: 2023-05-30 20:22+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articleslicense-guide_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/articles/license-guide/_index.adoc:1
+#, no-wrap
+msgid "FreeBSD Licensing Policy"
+msgstr "Política de Licenciamento do FreeBSD"
+
+#. type: Title =
+#: documentation/content/en/articles/license-guide/_index.adoc:9
+#, no-wrap
+msgid "FreeBSD License Policies"
+msgstr "Política de Licenciamento do FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:20
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/license-guide/_index.adoc:26
+#, no-wrap
+msgid "Preferred License for New Files"
+msgstr "Licença Preferencial para Novos Arquivos"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:32
+msgid ""
+"The rest of this section is intended to help you get started. As a rule, "
+"when in doubt, ask. It is much easier to receive advice than to fix the "
+"source tree. The FreeBSD Project makes use of both explicit licenses (where "
+"the verbatim text of the license is reproduced in each file) and detached "
+"licenses (where a tag in the file specifies the license, as described in "
+"this document)."
+msgstr ""
+"O restante desta seção tem como objetivo ajudá-lo a começar. Em caso de "
+"dúvida, pergunte. É muito mais fácil receber conselhos do que corrigir o "
+"código fonte. O Projeto FreeBSD usa tanto licenças explícitas (onde o texto "
+"literal da licença é reproduzido em cada arquivo) quanto licenças "
+"desvinculadas (onde uma etiqueta no arquivo especifica a licença, como "
+"descrito neste documento)."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:34
+msgid "The FreeBSD Project uses this text as the preferred license:"
+msgstr "O Projeto FreeBSD usa este texto como licença preferencial:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/license-guide/_index.adoc:42
+#: documentation/content/en/articles/license-guide/_index.adoc:138
+#, no-wrap
+msgid ""
+"/*-\n"
+" * Copyright (c) [year] [your name]\n"
+" *\n"
+" * SPDX-License-Identifier: BSD-2-Clause\n"
+" */\n"
+msgstr ""
+"/*-\n"
+" * Copyright (c) [year] [your name]\n"
+" *\n"
+" * SPDX-License-Identifier: BSD-2-Clause\n"
+" */\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:48
+msgid ""
+"The FreeBSD project does not allow using the \"advertising clause\" in new "
+"code. Due to the large number of contributors to the FreeBSD project, "
+"complying with this clause for many commercial vendors has become "
+"difficult. If you have code in the tree with the advertising clause, please "
+"consider switching to a license without it. New contributions to FreeBSD "
+"should use the BSD-2-Clause license."
+msgstr ""
+"O projeto FreeBSD não permite o uso da \"cláusula de publicidade\" em novos "
+"códigos. Devido ao grande número de colaboradores do projeto FreeBSD, se "
+"tornou difícil para muitos fornecedores comerciais cumprir com esta "
+"cláusula. Se você tiver código no repositório com a cláusula de publicidade, "
+"considere mudar para uma licença sem ela. Novas contribuições ao FreeBSD "
+"devem usar a licença BSD-2-Clause."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:54
+msgid ""
+"The FreeBSD project discourages completely new licenses and variations on "
+"the standard licenses. New licenses require the approval of {core-email} to "
+"reside in the main repository. In the past, non-standard licenses have "
+"generated more problems than standard ones. Poor drafting of non-standard "
+"licenses often causes more unintended consequences, so they are unlikely to "
+"be approved by {core-email}. The FreeBSD project is standardizing on the "
+"BSD-2-Clause license, as published by SPDX."
+msgstr ""
+"O projeto FreeBSD desencoraja completamente novas licenças e variações das "
+"licenças padrão. Novas licenças requerem a aprovação do {core-email} para "
+"residir no repositório principal. No passado, licenças não padrão geraram "
+"mais problemas do que as padrão. Uma redação inadequada de licenças não "
+"padrão muitas vezes causa mais consequências não intencionais, então elas "
+"são improváveis de serem aprovadas pelo {core-email}. O projeto FreeBSD está "
+"padronizando na licença BSD-2-Clause, como publicada pelo SPDX."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:60
+msgid ""
+"In addition, project policy requires that code licensed under some non-BSD "
+"licenses must be placed in specific sections of the repository. For some "
+"licenses, compilation must be conditional or disabled by default. For "
+"example, code in the static part of the GENERIC kernel must be licensed "
+"under the BSD or substantially similar licenses. GPL, APSL, CDDL, etc, "
+"licensed software must not be compiled into the static GENERIC kernel. Code "
+"with these licenses may be used in pre-compiled modules, however."
+msgstr ""
+"Além disso, a política do projeto requer que o código licenciado sob algumas "
+"licenças não-BSD deve ser colocado em seções específicas do repositório. "
+"Para algumas licenças, a compilação deve ser condicional ou desativada por "
+"padrão. Por exemplo, o código na parte estática do kernel GENERIC deve ser "
+"licenciado sob a licença BSD ou substancialmente similar. O software "
+"licenciado sob GPL, APSL, CDDL, etc., não deve ser compilado no kernel "
+"GENERIC estático. No entanto, o código com essas licenças pode ser usado em "
+"módulos pré-compilados."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:64
+msgid ""
+"Developers are reminded that, in open source, getting \"open\" correct is "
+"just as important as getting \"source\" correct. Improper handling of "
+"intellectual property has serious consequences. Any questions or concerns "
+"should immediately be brought to the attention of {core-email}."
+msgstr ""
+"Os desenvolvedores são lembrados que, em código aberto, acertar a questão do "
+"\"aberto\" é tão importante quanto acertar a questão do \"código fonte\". O "
+"manuseio inadequado de propriedade intelectual tem consequências graves. "
+"Qualquer dúvida ou preocupação deve ser imediatamente levada ao conhecimento "
+"do {core-email}."
+
+#. type: Title ==
+#: documentation/content/en/articles/license-guide/_index.adoc:66
+#, no-wrap
+msgid "Software License Policy"
+msgstr "Política de Licença de Software"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:72
+msgid ""
+"The following sections outline the project's Software License Policies in "
+"detail. For the most part we expect developers to read, understand and "
+"utilize the sections above this one to apply appropriate licenses to their "
+"contributions. The rest of this document details the philosophical "
+"background to the policies as well as the policies in great detail. As "
+"always, if the text below is confusing or you need help with applying these "
+"policies, please reach out to {core-email}."
+msgstr ""
+"As seções seguintes detalham as Políticas de Licenciamento de Software do "
+"projeto. Em sua maior parte, esperamos que os desenvolvedores leiam, "
+"entendam e utilizem as seções acima desta para aplicar as licenças "
+"apropriadas às suas contribuições. O restante deste documento detalha o "
+"histórico filosófico das políticas, bem como as políticas em grande detalhe. "
+"Como sempre, se o texto abaixo for confuso ou se precisar de ajuda para "
+"aplicar essas políticas, entre em contato com {core-email}."
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:73
+#, no-wrap
+msgid "Guiding Principles"
+msgstr "Princípios Orientadores"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:78
+msgid ""
+"The FreeBSD Project aims to produce a complete, BSD-licensed operating "
+"system allowing consumers of the system to produce derivative products "
+"without constraint or further license obligations. We invite and greatly "
+"appreciate the contribution of both changes and additions under the two-"
+"clause BSD license, and encourage the adoption of this license by other open "
+"source projects. Use of the BSD license is key to encouraging the adoption "
+"of advanced operating system technology, and on many notable occasions has "
+"been pivotal to widespread use of new technology."
+msgstr ""
+"O Projeto FreeBSD tem como objetivo produzir um sistema operacional completo "
+"licenciado sob a licença BSD, permitindo que os usuários do sistema criem "
+"produtos derivados sem restrições ou obrigações adicionais de licença. Nós "
+"convidamos e apreciamos muito a contribuição de alterações e adições sob a "
+"licença BSD de duas cláusulas, e incentivamos a adoção desta licença por "
+"outros projetos de código aberto. O uso da licença BSD é fundamental para "
+"incentivar a adoção de tecnologia avançada de sistema operacional, e em "
+"muitas ocasiões notáveis foi decisivo para o uso generalizado de novas "
+"tecnologias."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:80
+msgid ""
+"We accept however that compelling reasons exist to allow differently-"
+"licensed software to be included in the FreeBSD source tree."
+msgstr ""
+"No entanto, reconhecemos que existem razões importantes para permitir que "
+"softwares com licenças diferentes sejam incluídos no FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:83
+msgid ""
+"We require software licensed under some non-BSD licenses to be carefully "
+"isolated in the source tree so that it cannot contaminate BSD-only "
+"components. Such cautious management encourages licensing clarity and "
+"facilitates the production of BSD-only derivative products."
+msgstr ""
+"Nós exigimos que o software licenciado sob algumas licenças não-BSD seja "
+"cuidadosamente isolado na árvore de código fonte, de modo que não contamine "
+"os componentes BSD puros. Essa gestão cautelosa incentiva a clareza de "
+"licenciamento e facilita a criação de produtos derivados regidos "
+"exclusivamente pela licença BSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:87
+msgid ""
+"Unless a special exception is made, no existing BSD-licensed components may "
+"be replaced with more restrictively licensed software. We encourage FreeBSD "
+"and third party developers to seek the relicensing, dual-licensing, or "
+"reimplementing of critical components under the BSD license instead. Such "
+"would ease their more integral adoption into the FreeBSD operating system."
+msgstr ""
+"A menos que seja feita uma exceção especial, nenhum componente licenciado "
+"sob a licença BSD pode ser substituído por software com licença mais "
+"restritiva. Incentivamos os desenvolvedores do FreeBSD e de terceiros a "
+"buscar o re-licenciamento, o licenciamento duplo ou a reimplementação de "
+"componentes críticos sob a licença BSD. Isso facilitaria sua adoção mais "
+"integral no sistema operacional FreeBSD."
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:88
+#, no-wrap
+msgid "Policy"
+msgstr "Política"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:92
+msgid ""
+"The import of new software licensed under any licenses other than the BSD "
+"license and BSD-Like Licenses (as defined below) requires the prior approval "
+"of the FreeBSD Core Team. Requests for import must include:"
+msgstr ""
+"A importação de novo software licenciado sob qualquer licença que não seja a "
+"BSD e licenças semelhantes à BSD (conforme definido abaixo) requer a "
+"aprovação prévia do FreeBSD Core Team. As solicitações de importação devem "
+"incluir:"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:94
+msgid ""
+"A list of features or bug fixes that the new version or patches contain, "
+"along with evidence that our users need those features. PRs or references "
+"to mailing list discussions are ideal forms of evidence."
+msgstr ""
+"Uma lista de recursos ou correções de bugs que a nova versão ou patches "
+"contêm, juntamente com evidências de que nossos usuários precisam desses "
+"recursos. PRs ou referências a discussões nas listas de discussão são formas "
+"ideais de evidência."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:96
+msgid ""
+"This process should be used for all software imports, not just those that "
+"require Core Team review. The mere existence of a new version does not "
+"justify an import of software to source or ports."
+msgstr ""
+"Este processo deve ser utilizado para todas as importações de software, não "
+"apenas aquelas que exigem revisão do Core Team. A mera existência de uma "
+"nova versão não justifica a importação do software para o repositório do src "
+"ou do ports."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:98
+msgid ""
+"A list of FreeBSD branches that may be affected. Expansions of scope "
+"require a new request to and approval from the FreeBSD Core Team."
+msgstr ""
+"Uma lista das branches do FreeBSD que podem ser afetadas. A expansão do "
+"escopo requer uma nova solicitação e aprovação do FreeBSD Core Team."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:101
+msgid ""
+"The Apache License 2.0 is acceptable for use in some cases. The Core Team "
+"must approve the import of new Apache License licensed components or the "
+"change of license of existing components to the Apache License."
+msgstr ""
+"A Licença Apache 2.0 é aceitável para uso em alguns casos. O Core Team deve "
+"aprovar a importação de novos componentes licenciados pela Licença Apache ou "
+"a mudança de licença de componentes existentes para a Licença Apache."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:102
+#: documentation/content/en/articles/license-guide/_index.adoc:107
+#: documentation/content/en/articles/license-guide/_index.adoc:112
+msgid "This license is approved for the following components:"
+msgstr "Esta licença é aprovada para os seguintes componentes:"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:103
+msgid "LLVM toolchain and (with LLVM Exceptions) runtime components."
+msgstr ""
+"Conjunto de ferramentas LLVM e componentes de tempo de execução (com "
+"exceções LLVM)."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:106
+msgid ""
+"The BSD+Patent License is acceptable for use in some cases. The Core Team "
+"must approve the import of new BSD+Patent License licensed components or the "
+"change of license of existing components to the BSD+Patent License."
+msgstr ""
+"A Licença BSD+Patent é aceitável para uso em alguns casos. O Core Team deve "
+"aprovar a importação de novos componentes licenciados sob a Licença BSD"
+"+Patent ou a mudança da licença de componentes existentes para a Licença BSD"
+"+Patent."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:108
+msgid "EDK2 derived code related to UEFI functionality"
+msgstr "Código derivado do EDK2 relacionado à funcionalidade UEFI"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:111
+msgid ""
+"The Common Development and Distribution License (CDDL) is acceptable for use "
+"in some cases. The Core Team must approve the import of new CDDL licensed "
+"components or the change of license of existing components to the CDDL."
+msgstr ""
+"A Licença Comum de Desenvolvimento e Distribuição (CDDL) é aceitável para "
+"uso em alguns casos. O Core Team deve aprovar a importação de novos "
+"componentes licenciados com a CDDL ou a alteração da licença de componentes "
+"existentes para a CDDL."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:113
+msgid "DTrace"
+msgstr "DTrace"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:114
+msgid "ZFS filesystem, including kernel support and userland utilities"
+msgstr ""
+"Sistema de arquivos ZFS, incluindo suporte do kernel e utilitários do espaço "
+"do usuário"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:120
+msgid ""
+"Historically, the phrase 'All Rights Reserved.' was included in all "
+"copyright notices. All the BSD releases had it, to comply with the https://"
+"en.wikipedia.org/wiki/Buenos_Aires_Convention[Buenos Aires Convention of "
+"1910] in the Americas. With the ratification of the https://en.wikipedia."
+"org/wiki/Berne_Convention[Berne Convention] in 2000 by Nicaragua, the Buenos "
+"Aires Convention -- and the phrase -- became obsolete. As such, the FreeBSD "
+"project recommends that new code omit the phrase and encourages existing "
+"copyright holders to remove it. In 2018, the project updated its templates "
+"to remove it."
+msgstr ""
+"Historicamente, a expressão \"Todos os direitos reservados\" era incluída em "
+"todos os avisos de direitos autorais. Todos os releases do BSD tinham essa "
+"expressão, para cumprir a https://en.wikipedia.org/wiki/"
+"Buenos_Aires_Convention[Convenção de Buenos Aires de 1910] nas Américas. Com "
+"a ratificação da https://en.wikipedia.org/wiki/Berne_Convention[Convenção de "
+"Berna] em 2000 pela Nicarágua, a Convenção de Buenos Aires - e a expressão - "
+"se tornaram obsoletas. Como tal, o projeto FreeBSD recomenda que os novos "
+"códigos omitam a frase e incentiva os detentores de direitos autorais "
+"existentes a removê-la. Em 2018, o projeto atualizou seus modelos para "
+"removê-la."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:123
+msgid ""
+"Initially, many items in the FreeBSD tree were marked with BSD-2-Clause-"
+"FreeBSD. However, SPDX has obsoleted the license as a variant; and the SPDX "
+"text of the obsolete tag differs enough from the standard FreeBSD license "
+"that it shouldn't be used. A review of its current use is ongoing."
+msgstr ""
+"Inicialmente, muitos itens no repositório do FreeBSD eram marcados com a "
+"licença BSD-2-Clause-FreeBSD. No entanto, o SPDX obsoletou a licença como "
+"uma variante; e o texto do SPDX da tag obsoleta difere o suficiente da "
+"licença padrão do FreeBSD para não ser usado. Uma revisão do uso atual está "
+"em andamento."
+
+#. type: Title ====
+#: documentation/content/en/articles/license-guide/_index.adoc:124
+#, no-wrap
+msgid "Acceptable licenses"
+msgstr "Licenças aceitáveis"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:128
+msgid ""
+"The following licenses are considered to be acceptable BSD-Like Licenses for "
+"the purpose of this Policy. Deviations or the use of any other license must "
+"be approved by the FreeBSD Core Team:"
+msgstr ""
+"As seguintes licenças são consideradas aceitáveis como Licenças BSD-Like "
+"para fins desta Política. Desvios ou o uso de qualquer outra licença devem "
+"ser aprovados pelo Core Team do FreeBSD:"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:130
+msgid "The 2 clause version of the BSD license"
+msgstr "A versão de 2 cláusulas da licença BSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:140
+msgid "The 3 clause version of the BSD license"
+msgstr "A versão de 3 cláusulas da licença BSD"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/license-guide/_index.adoc:148
+#, no-wrap
+msgid ""
+"/*-\n"
+" * Copyright (c) [year] [your name]\n"
+" *\n"
+" * SPDX-License-Identifier: BSD-3-Clause\n"
+" */\n"
+msgstr ""
+"/*-\n"
+" * Copyright (c) [year] [your name]\n"
+" *\n"
+" * SPDX-License-Identifier: BSD-3-Clause\n"
+" */\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:150
+msgid "The ISC License"
+msgstr "A Licença ISC"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/license-guide/_index.adoc:158
+#, no-wrap
+msgid ""
+"/*-\n"
+" * Copyright (c) [year] [copyright holder]\n"
+" *\n"
+" * SPDX-License-Identifier: ISC\n"
+" */\n"
+msgstr ""
+"/*-\n"
+" * Copyright (c) [year] [copyright holder]\n"
+" *\n"
+" * SPDX-License-Identifier: ISC\n"
+" */\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:160
+msgid "The MIT License"
+msgstr "A licença do MIT"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/license-guide/_index.adoc:168
+#, no-wrap
+msgid ""
+"/*-\n"
+" * Copyright (c) [year] [copyright holders]\n"
+" *\n"
+" * SPDX-License-Identifier: MIT\n"
+" */\n"
+msgstr ""
+"/*-\n"
+" * Copyright (c) [year] [copyright holders]\n"
+" *\n"
+" * SPDX-License-Identifier: MIT\n"
+" */\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/license-guide/_index.adoc:169
+#, no-wrap
+msgid "Software Collection License"
+msgstr "A Licença de Coleção de Software"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:174
+msgid ""
+"The FreeBSD Project licenses its compilation of software as described in [."
+"filename]#COPYRIGHT# under the BSD-2-Clause license. This license does not "
+"supersede the license of individual files, which is described below. Files "
+"that do not have an explicit license are licensed under the BSD-2-Clause "
+"license."
+msgstr ""
+"O Projeto FreeBSD licencia sua compilação de software conforme descrito em [."
+"filename]#COPYRIGHT# sob a licença BSD-2-Clause. Essa licença não substitui "
+"a licença dos arquivos individuais, que é descrita abaixo. Arquivos que não "
+"possuem uma licença explícita são licenciados sob a licença BSD-2-Clause."
+
+#. type: Title ==
+#: documentation/content/en/articles/license-guide/_index.adoc:175
+#, no-wrap
+msgid "License File Location"
+msgstr "Localização do arquivo de licença"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:187
+msgid ""
+"To comply with the https://reuse.software/[REUSE Software] standard as much "
+"as possible, all license files will be stored in the [.filename]#LICENSES/# "
+"directory of the repository. There are three subdirectories under this top "
+"level directory. The [.filename]#LICENSES/text/# subdirectory contains, in "
+"detached form, the text of all the licenses that are allowed in the FreeBSD "
+"software collection. These files are stored using the SPDX-License-"
+"Identifier name followed by .txt. The [.filename]#LICENSES/exceptions/# "
+"subdirectory has the text of all exceptions that are allowed in detached "
+"form in the FreeBSD software collection. These files are stored using the "
+"exception identifier name followed by .txt. The [.filename]#LICENSES/other/"
+"# contains, in detached form, the license files references in SPDX-License-"
+"Identifier expressions, but aren't otherwise allowed as detached licenses. "
+"All such files must appear at least once in the FreeBSD software collection, "
+"and should be removed when the last file that references them is removed. "
+"Licenses that have no adequate SPDX matching license must be in [."
+"filename]#LICENSES/other/# and have a filename that starts with LicenseRef- "
+"followed by a unique idstring. No such files have currently been "
+"identified, but if they are, a full list will appear here."
+msgstr ""
+"Para cumprir com o padrão https://reuse.software/[REUSE Software] tanto "
+"quanto possível, todos os arquivos de licença serão armazenados no diretório "
+"[.filename]#LICENSES/# do repositório. Existem três subdiretórios neste "
+"diretório de nível superior. O subdiretório [.filename]#LICENSES/text/# "
+"contém, em forma destacada, o texto de todas as licenças permitidas na "
+"coleção de software do FreeBSD. Esses arquivos são armazenados usando o nome "
+"SPDX-License-Identifier seguido de .txt. O subdiretório [.filename]#LICENSES/"
+"exceptions/# contém o texto de todas as exceções permitidas em forma "
+"destacada na coleção de software do FreeBSD. Esses arquivos são armazenados "
+"usando o nome de identificador da exceção seguido de .txt. O subdiretório [."
+"filename]#LICENSES/other/# contém, em forma destacada, os arquivos de "
+"licença referenciados em expressões SPDX-License-Identifier, mas que não são "
+"permitidos como licenças destacadas. Todos esses arquivos devem aparecer "
+"pelo menos uma vez na coleção de software do FreeBSD e devem ser removidos "
+"quando o último arquivo que os referenciar for removido. As licenças que não "
+"possuem uma correspondência adequada no SPDX devem estar em [."
+"filename]#LICENSES/other/# e ter um nome de arquivo que comece com "
+"LicenseRef-, seguido por uma sequência de identificação exclusiva. Nenhum "
+"desses arquivos foi identificado atualmente, mas se forem, uma lista "
+"completa será apresentada aqui."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:191
+msgid ""
+"The FreeBSD Project currently does not make use of the `DEP5` files "
+"described in the `REUSE Software` standard. The FreeBSD Project has not "
+"marked all the files in the tree yet in accordance with this standard, as "
+"described later in this document. The FreeBSD Project has not yet included "
+"these files in its repositories since this policy is still evolving."
+msgstr ""
+"O Projeto FreeBSD atualmente não utiliza os arquivos `DEP5` descritos no "
+"padrão `REUSE Software`. O Projeto FreeBSD ainda não marcou todos os "
+"arquivos da árvore de acordo com este padrão, como descrito posteriormente "
+"neste documento. O Projeto FreeBSD ainda não incluiu esses arquivos em seus "
+"repositórios, uma vez que esta política ainda está em evolução."
+
+#. type: Title ==
+#: documentation/content/en/articles/license-guide/_index.adoc:193
+#, no-wrap
+msgid "Individual Files License"
+msgstr "Licença de Arquivos Individuais"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:197
+msgid ""
+"Each individual file in the FreeBSD software collection has its own "
+"copyright and license. How they are marked varies and is described in this "
+"section."
+msgstr ""
+"Cada arquivo individual na coleção de software do FreeBSD possui seu próprio "
+"direito autoral e licença. A forma como eles são marcados varia e é descrita "
+"nesta seção."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:201
+msgid ""
+"A copyright notice identifies who claims the legal copyright to a file. "
+"These are provided on a best effort basis by the project. Because "
+"copyrights may be legally transferred, the current copyright holder may "
+"differ from what is listed in the file."
+msgstr ""
+"Uma notificação de direitos autorais identifica quem reivindica os direitos "
+"autorais legais de um arquivo. Esses são fornecidos pelo projeto com o "
+"melhor esforço possível. Como os direitos autorais podem ser transferidos "
+"legalmente, o detentor atual dos direitos autorais pode ser diferente do que "
+"está listado no arquivo."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:210
+msgid ""
+"A license is a legal document between the contributor and the users of the "
+"software granting permission to use the copyrighted portions of the "
+"software, subject to certain terms and conditions set forth in the license. "
+"Licenses can be expressed in one of two ways in the FreeBSD software "
+"collection. Licenses can be explicit in a file. When a license grant is "
+"explicit in the file, that file may be used, copied, and modified in "
+"accordance with that license. Licenses can also be expressed indirectly, "
+"where the text of the license is elsewhere. The project uses the Software "
+"Package Data Exchange (SPDX) license identifiers for this purpose, as "
+"described in the following subsections. SPDX license identifiers are "
+"managed by the SPDX Workgroup at the Linux Foundation, and have been agreed "
+"on by partners throughout the industry, tool vendors, and legal teams. For "
+"further information see https://spdx.org/ and the following sections for how "
+"the FreeBSD Project uses them."
+msgstr ""
+"Uma licença é um documento legal entre o colaborador e os usuários do "
+"software concedendo permissão para usar as partes protegidas por direitos "
+"autorais do software, sujeito a certos termos e condições estabelecidos na "
+"licença. As licenças podem ser expressas de duas maneiras na coleção de "
+"software do FreeBSD. As licenças podem ser explícitas em um arquivo. Quando "
+"uma concessão de licença é explícita no arquivo, esse arquivo pode ser "
+"usado, copiado e modificado de acordo com essa licença. As licenças também "
+"podem ser expressas indiretamente, onde o texto da licença está em outro "
+"lugar. O projeto usa os identificadores de licença Software Package Data "
+"Exchange (SPDX) para essa finalidade, conforme descrito nas subseções a "
+"seguir. Os identificadores de licença SPDX são gerenciados pelo SPDX "
+"Workgroup da Linux Foundation e foram acordados por parceiros do setor, "
+"fornecedores de ferramentas e equipes jurídicas. Para obter mais "
+"informações, consulte https://spdx.org/ e as seções a seguir para saber como "
+"o Projeto FreeBSD os usa."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:213
+msgid ""
+"Entities that contribute fixes and enhancements to the software collection "
+"without an explicit license agree to license those changes under the terms "
+"that apply to the modified file(s). Project policy, in line with industry "
+"practice, only includes a copyright notice from significant contributors to "
+"the files in the collection."
+msgstr ""
+"Entidades que contribuem com correções e melhorias para a coleção de "
+"software sem uma licença explícita concordam em licenciar essas mudanças sob "
+"os termos que se aplicam aos arquivo(s) modificados. A política do projeto, "
+"em linha com a prática da indústria, inclui apenas um aviso de direitos "
+"autorais dos contribuintes significativos para os arquivos na coleção."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:215
+msgid "There are four types of files in the FreeBSD software collection:"
+msgstr "Existem quatro tipos de arquivos na coleção de software do FreeBSD:"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:217
+msgid "Files that have only an explicit copyright notice and license."
+msgstr ""
+"Arquivos que possuem apenas um aviso explícito de direitos autorais e de "
+"licença."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:218
+msgid ""
+"Files that have both an explicit copyright notice and license, and a SPDX-"
+"License-Identifier tag."
+msgstr ""
+"Arquivos que possuem tanto um aviso explícito de direitos autorais e de "
+"licença, quanto uma tag SPDX-License-Identifier."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:219
+msgid ""
+"Files that have only a copyright notice and an SPDX-License-Identifier tag, "
+"but no explicit license."
+msgstr ""
+"Arquivos que possuem apenas um aviso de direitos autorais e uma tag SPDX-"
+"License-Identifier, mas sem uma licença explícita."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:220
+msgid "Files that lack any copyright or license at all."
+msgstr ""
+"Arquivos que não possuem nenhum aviso de direitos autorais ou de licença."
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:221
+#, no-wrap
+msgid "Only Copyright and License"
+msgstr "Apenas Direitos Autorais e Licença"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:225
+msgid ""
+"Many files in the FreeBSD software collection have both a copyright notice "
+"and an explicit license contained in the file. In these cases, the license "
+"contained in the file governs."
+msgstr ""
+"Muitos arquivos na coleção de software do FreeBSD possuem tanto um aviso de "
+"direitos autorais quanto uma licença explícita contida no arquivo. Nesses "
+"casos, a licença contida no arquivo é a que governa."
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:226
+#, no-wrap
+msgid "Copyright and License with SPDX-License-Identifier expression"
+msgstr "Direitos autorais e licença com a expressão SPDX-License-Identifier"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:232
+msgid ""
+"Some files in the FreeBSD software collection contain a copyright statement, "
+"an SPDX-License-Identifier tag and an explicit license. The explicit "
+"license takes precedence over the SPDX-License-Identifier tag. The SPDX-"
+"License-Identifier tag is the project's best effort attempt to characterize "
+"the license, but is only informative for automated tools. See <<expressions,"
+"SPDX-License-Identifier Expressions>> for how to interpret the expression."
+msgstr ""
+"Alguns arquivos na coleção de software do FreeBSD contêm uma declaração de "
+"direitos autorais, uma tag SPDX-License-Identifier e uma licença explícita. "
+"A licença explícita tem precedência sobre a tag SPDX-License-Identifier. A "
+"tag SPDX-License-Identifier é uma tentativa do projeto de caracterizar a "
+"licença da melhor forma possível, mas é apenas informativa para ferramentas "
+"automatizadas. Consulte <<expressions, Expressões SPDX-License-Identifier>> "
+"para saber como interpretar a expressão."
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:233
+#, no-wrap
+msgid "Only Copyright and SPDX-License-Identifier expression."
+msgstr "Apenas direitos autorais e a expressão SPDX-License-Identifier."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:239
+msgid ""
+"Some files in the tree contain detached licenses. These files contain only "
+"a copyright notice and an SPDX-License-Identifier expression, but no "
+"explicit license. See <<expressions,SPDX-License-Identifier Expressions>> "
+"for how to interpret the expression. Note: the expressions allowed for "
+"detached licenses by the project are a subset of the expressions used "
+"informationally or that are defined by the standard."
+msgstr ""
+"Alguns arquivos na árvore de software contêm licenças desanexadas. Esses "
+"arquivos contêm apenas um aviso de direitos autorais e uma expressão SPDX-"
+"License-Identifier, mas nenhuma licença explícita. Consulte <<expressions, "
+"Expressões SPDX-License-Identifier>> para saber como interpretar a "
+"expressão. Observação: as expressões permitidas para licenças desanexadas "
+"pelo projeto são um subconjunto das expressões usadas informativamente ou "
+"definidas pelo padrão."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:241
+msgid ""
+"The license for files containing only the SPDX-License-Identifier should be "
+"construed to be"
+msgstr ""
+"A licença para arquivos que contêm apenas o SPDX-License-Identifier deve ser "
+"construida da seguinte forma"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:244
+msgid ""
+"Start the license with the copyright notice from the file. Include all the "
+"copyright holders."
+msgstr ""
+"Inicie a licença com o aviso de direitos autorais do arquivo, incluindo "
+"todos os detentores dos direitos autorais."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:247
+msgid ""
+"For each sub-expression, copy the license text from [.filename]#LICENSE/text/"
+"`id`.txt#. When exceptions are present, append them from [.filename]#src/"
+"share/license/exceptions/`id`.txt#. SPDX-License-Identifier expressions "
+"should be construed as described in the SPDX standard."
+msgstr ""
+"Para cada sub-expressão, copie o texto da licença de [.filename]#LICENSE/"
+"text/`id`.txt#. Quando exceções estiverem presentes, anexe-as de [."
+"filename]#src/share/license/exceptions/`id`.txt#. As expressões SPDX-License-"
+"Identifier devem ser interpretadas conforme descrito no padrão SPDX."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:250
+msgid ""
+"Where `id` is the SPDX short license identifier from the `Identifier` column "
+"of https://spdx.org/licenses/[SPDX Identifiers] or https://spdx.org/licenses/"
+"exceptions-index.html[license exception]. If there is no file in [."
+"filename]#LICENSE/#, then that license or exception cannot be specified as a "
+"detached license under this section."
+msgstr ""
+"Onde o`id` é o identificador curto de licença SPDX da coluna `Identifier` de "
+"https://spdx.org/licenses/[SPDX Identifiers] ou da lista de https://spdx.org/"
+"licenses/exceptions-index.html[exceções de licença]. Se não houver um "
+"arquivo em [.filename]#LICENSE/#, então essa licença ou exceção não pode ser "
+"especificada como uma licença desanexada nesta seção."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:252
+msgid ""
+"When reading the license text that is detached from a file, a number of "
+"considerations must be taken to make the detached license make sense."
+msgstr ""
+"Ao ler o texto da licença que está desanexado de um arquivo, algumas "
+"considerações devem ser tomadas para que a licença desanexada faça sentido."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:255
+msgid ""
+"Any reference to a copyright notice shall refer to the copyright notice "
+"constructed from the licensed file, not from any copyright notice in the "
+"license text file itself. Many SPDX files have sample copyright notices "
+"that are understood to be examples only."
+msgstr ""
+"Qualquer referência a um aviso de direitos autorais deve se referir ao aviso "
+"de direitos autorais construído a partir do arquivo licenciado, e não de "
+"qualquer aviso de direitos autorais contido no próprio arquivo de texto da "
+"licença. Muitos arquivos SPDX têm exemplos de avisos de direitos autorais "
+"que são entendidos apenas como exemplos."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:258
+msgid ""
+"When names of entities are referred to in the license text, they shall be "
+"construed to apply to the list of all copyright holders listed in the "
+"copyright notices of the licensed file. For example, the BSD-4-clause "
+"license contains the phrase \"This product includes software developed by "
+"the organization\". The phrase 'the organization' should be replaced by the "
+"copyright holders."
+msgstr ""
+"Quando os nomes das entidades são mencionados no texto da licença, eles "
+"devem ser interpretados como se aplicando à lista de todos os detentores de "
+"direitos autorais listados nos avisos de direitos autorais do arquivo "
+"licenciado. Por exemplo, a licença BSD-4-clause contém a frase \"Este "
+"produto inclui software desenvolvido pela organização\". A frase 'a "
+"organização' deve ser substituída pelos detentores de direitos autorais."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:260
+msgid ""
+"When the SPDX offers variations of the license, it is understood the license "
+"in the [.filename]#LICENSE/# file represents the exact version of the "
+"license selected. The SPDX standard exists to match families of licenses "
+"and these variations help match similar licenses that the SPDX organization "
+"believes to be legally identical."
+msgstr ""
+"Quando o SPDX oferece variações da licença, entende-se que a licença no "
+"arquivo [.filename]#LICENSE/# representa a versão exata da licença "
+"selecionada. O padrão SPDX existe para corresponder a famílias de licenças e "
+"essas variações ajudam a corresponder a licenças semelhantes que a "
+"organização SPDX acredita serem legalmente idênticas."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:264
+msgid ""
+"For licenses that have slight variations in text, the SPDX has guidelines to "
+"match them. These guidelines are not relevant here. Contributors wishing "
+"to license under a variant of a SPDX license not contained verbatim in [."
+"filename]#LICENSE/# cannot use the detached option and must specify the "
+"license explicitly."
+msgstr ""
+"Para licenças que possuem pequenas variações no texto, o SPDX possui "
+"diretrizes para correspondê-las. Essas diretrizes não são relevantes aqui. "
+"Os colaboradores que desejam licenciar sob uma variante de uma licença SPDX "
+"que não está contida textualmente em [.filename]#LICENSE/# não podem usar a "
+"opção desanexada e devem especificar explicitamente a licença."
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:265
+#, no-wrap
+msgid "Files without Copyright or any License Marking"
+msgstr "Arquivos sem marcação de direitos autorais ou de licença"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:270
+msgid ""
+"Some files cannot have suitable comments added to them. In such cases, a "
+"license may be found in [.filename]#file.ext.license#. For example, a file "
+"named [.filename]#foo.jpg# may have a license in [.filename]#foo.jpg."
+"license#, following the REUSE Software conventions."
+msgstr ""
+"Alguns arquivos não podem ter comentários adequados adicionados a eles. "
+"Nesses casos, uma licença pode ser encontrada em [.filename]#file.ext."
+"license#. Por exemplo, um arquivo chamado [.filename]#foo.jpg# pode ter uma "
+"licença em [.filename]#foo.jpg.license#, seguindo as convenções de software "
+"REUSE."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:273
+msgid ""
+"Files created by the project that lack a copyright notice are understood to "
+"fall under the blanket copyright and licensing in [.filename]#COPYRIGHT#. "
+"Either the file is a mere recitation of facts, not protectable by Copyright "
+"Law, or the content is so trivial as to not warrant the overhead of an "
+"explicit license."
+msgstr ""
+"Arquivos criados pelo projeto que não possuem um aviso de direitos autorais "
+"são entendidos como estando sob o direito autoral e licenciamento geral em [."
+"filename]#COPYRIGHT#. Ou o arquivo é uma mera citação de fatos, não "
+"protegíveis pela Lei de Direitos Autorais, ou o conteúdo é tão trivial que "
+"não justifica a sobrecarga de uma licença explícita."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:276
+msgid ""
+"Files that lack marking and have more than a trivial amount of copyrightable "
+"material, or whose author believes them to be improperly marked, should be "
+"brought to the attention of the FreeBSD core team. It is the strong policy "
+"of the FreeBSD Project to comply with all appropriate licenses."
+msgstr ""
+"Arquivos que não possuem marcação e possuem mais do que uma quantidade "
+"trivial de material protegido por direitos autorais, ou cujo autor acredita "
+"que estejam marcados incorretamente, devem ser trazidos à atenção do Core "
+"Team do FreeBSD. É uma forte política do Projeto FreeBSD cumprir todas as "
+"licenças apropriadas."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:278
+msgid ""
+"In the future, all such files will be marked explicitly, or follow the REUSE "
+"Software [.filename]#.license# convention."
+msgstr ""
+"No futuro, todos esses arquivos serão marcados explicitamente ou seguirão a "
+"convenção de software REUSE [.filename]#.license#."
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:280
+#, no-wrap
+msgid "SPDX-License-Identifier Expressions"
+msgstr "Expressões SPDX-License-Identifier"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:287
+msgid ""
+"An 'SPDX License expression' is used in two contexts in the FreeBSD software "
+"collection. First, its full form is used for files that have explicit "
+"license statements contained within the file as well as a summarizing SPDX-"
+"License-Identifier expression. In this context, the full power of these "
+"expressions may be used. Second, in a restricted form described above, it "
+"is used to denote the actual license for a given file. In the second "
+"context, only a subset of this expression is allowed by the project."
+msgstr ""
+"A \"expressão de licença SPDX\" é usada em dois contextos na coleção de "
+"software do FreeBSD. Em primeiro lugar, sua forma completa é usada para "
+"arquivos que possuem declarações explícitas de licença contidas no arquivo, "
+"bem como uma expressão resumida SPDX-License-Identifier. Nesse contexto, "
+"todo o poder dessas expressões pode ser usado. Em segundo lugar, em uma "
+"forma restrita descrita acima, é usada para denotar a licença real de um "
+"determinado arquivo. Nesse segundo contexto, apenas um subconjunto dessa "
+"expressão é permitido pelo projeto."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:291
+msgid ""
+"An `SPDX License sub-expression` is either an SPDX short form license "
+"identifier from the https://spdx.org/licenses/[SPDX License List], or the "
+"combination of two SPDX short form license identifiers separated by \"WITH\" "
+"when a https://spdx.org/licenses/exceptions-index.html[license exception] "
+"applies. When multiple licenses apply, an expression consists of keywords "
+"\"AND\", \"OR\" separating sub-expressions and surrounded by \"(\", \")\" . "
+"The https://spdx.github.io/spdx-spec/appendix-IV-SPDX-license-expressions/"
+"[full specification of expressions] spells out all the details and takes "
+"precedence when it conflicts with the simplified treatment of this section."
+msgstr ""
+"Uma \"sub-expressão de licença SPDX\" é um identificador de licença de forma "
+"curta SPDX da https://spdx.org/licenses/[Lista de Licenças SPDX], ou a "
+"combinação de dois identificadores de licença de forma curta SPDX separados "
+"por \"WITH\" quando uma https://spdx.org/licenses/exceptions-index."
+"html[licença de exceção] se aplica. Quando várias licenças se aplicam, uma "
+"expressão consiste em palavras-chave \"AND\", \"OR\" que separam as sub-"
+"expressões e são cercadas por \"(\", \")\". A https://spdx.github.io/spdx-"
+"spec/appendix-IV-SPDX-license-expressions/[especificação completa de "
+"expressões] explica todos os detalhes e tem precedência em caso de conflito "
+"com o tratamento simplificado desta seção."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:299
+msgid ""
+"Some license identifiers, like [L]GPL, have the option to use only that "
+"version, or any later version. SPDX defines the suffix `-or-later` to mean "
+"that version of the license or a later version. It defines `-only` to mean "
+"only that specific version of the file. There is an old convention to have "
+"no suffix (which means what the new '-only' suffix means, but which people "
+"confuse for `-or-later`). In addition, affixing a `+` suffix was meant to "
+"mean `-or-later`. New files in FreeBSD should not use these two "
+"conventions. Old files that use this convention should be converted as "
+"appropriate."
+msgstr ""
+"Algumas identificações de licença, como a [L]GPL, têm a opção de usar apenas "
+"aquela versão ou qualquer versão posterior. O SPDX define o sufixo \"-or-"
+"later\" para significar aquela versão da licença ou uma versão posterior. "
+"Define \"-only\" para significar apenas aquela versão específica do arquivo. "
+"Existe uma convenção antiga de não ter um sufixo (o que significa o que o "
+"novo sufixo '-only' significa, mas que as pessoas confundem com '-or-"
+"later'). Além disso, adicionar um sufixo `+` significava `-or-later`. Novos "
+"arquivos no FreeBSD não devem usar essas duas convenções. Arquivos antigos "
+"que usam essa convenção devem ser convertidos conforme apropriado."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/license-guide/_index.adoc:304
+#, no-wrap
+msgid ""
+" // SPDX-License-Identifier: GPL-2.0-only\n"
+" // SPDX-License-Identifier: LGPL-2.1-or-later\n"
+msgstr ""
+" // SPDX-License-Identifier: GPL-2.0-only\n"
+" // SPDX-License-Identifier: LGPL-2.1-or-later\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:308
+msgid ""
+"`WITH` should be used when a license modifier is needed. In the FreeBSD "
+"project, a number of files from LLVM have an exception to the Apache 2.0 "
+"license:"
+msgstr ""
+"\"WITH\" deve ser usado quando um modificador de licença é necessário. No "
+"projeto FreeBSD, vários arquivos do LLVM possuem uma exceção à licença "
+"Apache 2.0:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/license-guide/_index.adoc:312
+#, no-wrap
+msgid " // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\n"
+msgstr " // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:316
+msgid ""
+"https://spdx.org/licenses/exceptions-index.html[Exception tags] are managed "
+"by SPDX. License exceptions can only be applied to certain licenses, as "
+"specified in the exception."
+msgstr ""
+"https://spdx.org/licenses/exceptions-index.html[Tags de exceção] são "
+"gerenciadas pelo SPDX. As exceções de licença só podem ser aplicadas a "
+"determinadas licenças, conforme especificado na exceção."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:319
+msgid ""
+"`OR` should be used if the file has a choice of license and one license is "
+"selected. For example, some dtsi files are available under dual licenses:"
+msgstr ""
+"\"OR\" deve ser usado se o arquivo tiver uma escolha de licença e uma "
+"licença for selecionada. Por exemplo, alguns arquivos dtsi estão disponíveis "
+"sob licenças duplas:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/license-guide/_index.adoc:323
+#, no-wrap
+msgid " // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause\n"
+msgstr " // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:327
+msgid ""
+"`AND` should be used if the file has multiple licenses whose terms all apply "
+"to use the file. For example, if code has been incorporated by several "
+"projects, each with their own license:"
+msgstr ""
+"\"AND\" deve ser usado se o arquivo tiver várias licenças cujos termos se "
+"aplicam ao uso do arquivo. Por exemplo, se o código foi incorporado por "
+"vários projetos, cada um com sua própria licença:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/license-guide/_index.adoc:331
+#, no-wrap
+msgid " // SPDX-License-Identifier: BSD-2-Clause AND MIT\n"
+msgstr " // SPDX-License-Identifier: BSD-2-Clause AND MIT\n"
diff --git a/documentation/content/pt-br/articles/linux-emulation/_index.adoc b/documentation/content/pt-br/articles/linux-emulation/_index.adoc
index ae077d52cf..27ae1fe7ca 100644
--- a/documentation/content/pt-br/articles/linux-emulation/_index.adoc
+++ b/documentation/content/pt-br/articles/linux-emulation/_index.adoc
@@ -1,12 +1,15 @@
---
-title: Emulação de Linux no FreeBSD
authors:
- - author: Roman Divacky
+ -
+ author: 'Roman Divacky'
email: rdivacky@FreeBSD.org
+description: 'Uma descrição técnica sobre os internals da camada de emulação do Linux no FreeBSD'
+tags: ["Emulation", "Linuxulator", "kernel", "FreeBSD"]
+title: 'Emulação do Linux® no FreeBSD'
trademarks: ["freebsd", "ibm", "adobe", "netbsd", "realnetworks", "oracle", "linux", "sun", "general"]
---
-= Emulação de Linux no FreeBSD
+= Emulação do Linux(R) no FreeBSD
:doctype: article
:toc: macro
:toclevels: 1
@@ -40,7 +43,7 @@ endif::[]
[.abstract-title]
Resumo
-Essa tese master lida com a atualização da camada de emulação do Linux(R) (o chamado _Linuxulator_). A tarefa foi atualizar a camada para casar com a funcionalidade do Linux(R) 2.6. Como uma referencia a implementação, o kernel Linux(R) 2.6.16 foi escolhido. O conceito é perdidamente baseado na implementação do NetBSD. Maior parte do trabalho foi feito no verão de 2006 como parte de um programa de estudante do Google Summer of Code. O foco foi trazer o suporte do _NPTL_ (nova biblioteca de threads POSIX(R)) pra dentro da camada de emulação, incluindo _TLS_ (thread local storage), _futexes_ (mutexes rapidos na camada de usuario), _PID mangling_, e algumas outras coisas menores. Muitos pequenos problemas foram identificados e corrigidos. Meu trabalho foi integrado dentro do repositório de principal do FreeBSD e vai ser ligado ao 7.0R release. Nós, o time de desenvolvimento de emulação estamos trabalhando na emulação do Linux(R) 2.6 a camada de emulação padr ão do FreeBSD.
+Esta tese de mestrado trata da atualização da camada de emulação do Linux(R) (chamada de _Linuxulator_). A tarefa consistiu em atualizar a camada para corresponder à funcionalidade do Linux(R) 2.6. Como implementação de referência, foi escolhido o kernel Linux(R) 2.6.16. O conceito é vagamente baseado na implementação do NetBSD. A maior parte do trabalho foi realizada no verão de 2006 como parte do programa de estudantes do Google Summer of Code. O foco foi trazer o suporte do _NPTL_ (nova biblioteca de threads POSIX(R)) para a camada de emulação, incluindo _TLS_ (armazenamento local de threads), _futexes_ (mutexes de espaço do usuário rápidos), _PID mangling_ e algumas outras pequenas coisas. Muitos problemas pequenos foram identificados e corrigidos durante o processo. Meu trabalho foi integrado ao repositório principal do FreeBSD e será incluído na próxima versão 7.0R. Nós, a equipe de desenvolvimento de emulação, estamos trabalhando para tornar a emulação do Linux(R) 2.6 a camada de emulação padrão no FreeBSD.
'''
@@ -49,138 +52,139 @@ toc::[]
[[intro]]
== Introdução
-Nos últimos anos, os sistemas operacionais baseados em código aberto UNIX(R) começaram a ser amplamente implantados em máquinas servidores e clientes. Entre esses sistemas operacionais eu gostaria de destacar dois: FreeBSD, por sua herança BSD, base de código comprovada pelo tempo e muitos recursos interessantes e Linux(R) por sua ampla base de usuários, entusiasta comunidade aberta de desenvolvedores e apoio de grandes empresas. O FreeBSD tende a ser usado em máquinas de classe servidor, tarefas de rede pesadas com menos uso em máquinas de classe desktop para usuários comuns. Embora o Linux(R) tenha o mesmo uso em servidores, mas é muito mais usado por usuários domésticos. Isto leva a uma situação onde existem muitos programas binários disponíveis apenas para Linux(R) que não suportam o FreeBSD.
+Nos últimos anos, os sistemas operacionais de código aberto baseados em UNIX(R) começaram a ser amplamente implantados em servidores e máquinas clientes. Entre esses sistemas operacionais, gostaria de destacar dois: o FreeBSD, por sua herança BSD, código comprovado ao longo do tempo e muitos recursos interessantes, e o Linux(R), por sua ampla base de usuários, comunidade de desenvolvedores entusiastas e apoio de grandes empresas. O FreeBSD tende a ser usado em máquinas de classe servidor que executam tarefas de rede intensivas, com menos uso em máquinas de classe desktop para usuários comuns. Enquanto o Linux(R) tem o mesmo uso em servidores, mas é usado muito mais por usuários domésticos. Isso leva a uma situação em que há muitos programas somente binários disponíveis para Linux(R) que não possuem suporte para o FreeBSD.
-Naturalmente, surge a necessidade da habilidade de executar binários Linux(R) em um sistema FreeBSD e é com isso que esta tese trata: a emulação do kernel do Linux(R) no sistema operacional FreeBSD.
+Naturalmente, surge a necessidade da capacidade de executar binários Linux(R) em um sistema FreeBSD e é isso que esta tese trata: a emulação do kernel Linux(R) no sistema operacional FreeBSD.
-Durante o verão de 2006, a Google Inc. patrocinou um projeto que se concentrava em estender a camada de emulação do Linux(R) (o chamado Linuxulator) no FreeBSD para incluir necessidades do Linux(R) 2.6. Esta tese é escrita como parte deste projeto.
+Durante o verão de 2006, a Google Inc. patrocinou um projeto que se concentrou na extensão da camada de emulação do Linux® (chamada de Linuxulator) no FreeBSD para incluir as funcionalidades do Linux® 2.6. Esta tese foi escrita como parte deste projeto.
[[inside]]
-== Um olhar para dentro...
+== Uma olhada por dentro...
-Nesta seção vamos descrever cada sistema operacional em questão. Como eles lidam com syscalls, trapframes etc., todo o material de baixo nível. Também descrevemos a maneira como eles entendem primitivas comuns UNIX(R), como o que é um PID, o que é uma thread, etc. Na terceira subseção, falamos sobre como UNIX(R) em emuladores UNIX(R) pode ser feita em geral.
+Nesta seção, vamos descrever cada sistema operacional em questão. Como eles lidam com syscalls, trapframes, etc., tudo o que é de baixo nível. Também descrevemos a maneira como eles entendem os recursos comuns do UNIX(R), como o que é um PID, o que é uma thread, etc. Na terceira subseção, falamos sobre como a emulação do UNIX(R) em cima do UNIX(R) poderia ser feita de maneira geral.
[[what-is-unix]]
-=== O que é o UNIX (R)
+=== O que é UNIX(R)
-UNIX(R) é um sistema operacional com um longo histórico que influenciou quase todos os outros sistemas operacionais atualmente em uso. Começando na década de 1960, seu desenvolvimento continua até hoje (embora em projetos diferentes). O desenvolvimento de UNIX(R) logo se bifurcou em duas formas principais: as famílias BSDs e System III/V. Eles se influenciaram mutuamente ao desenvolver um padrão UNIX(R) comum. Entre as contribuições originadas no BSD, podemos nomear memória virtual, rede TCP/IP, FFS e muitas outras. A ramificação SystemV contribuiu para as primitivas de comunicação entre processos SysV, copy-on-write, etc. UNIX(R) em si não existe mais, mas suas idéias têm sido usadas por muitos outros sistemas operacionais amplos formando assim os chamados sistemas operacionais como UNIX(R). Hoje em dia os mais influentes são Linux(R), Solaris e possivelmente (até certo ponto) FreeBSD. Existem sistemas UNIX(R) de companhias derivados como (AIX, HP-UX etc.), mas estas foram cada vez mais migrados para os sistemas acima mencionados. Vamos resumir as características típicas do UNIX(R).
+UNIX(R) é um sistema operacional com uma longa história que influenciou praticamente todos os outros sistemas operacionais atualmente em uso. Desde os anos 1960, seu desenvolvimento continua até os dias de hoje (embora em projetos diferentes). O desenvolvimento do UNIX(R) logo se dividiu em duas principais vertentes: as famílias BSDs e System III/V. Elas se influenciaram mutuamente ao adotar um padrão comum para o UNIX(R). Entre as contribuições originadas no BSD, podemos citar memória virtual, rede TCP/IP, FFS e muitas outras. O branch do System V contribuiu com primitivas de comunicação interprocesso do SysV, copy-on-write, etc. O UNIX(R) em si não existe mais, mas suas ideias foram utilizadas por muitos outros sistemas operacionais ao redor do mundo, formando o que chamamos de sistemas operacionais semelhantes ao UNIX(R). Nos dias atuais, os mais influentes são Linux(R), Solaris e possivelmente (em certa medida) o FreeBSD. Existem também derivados do UNIX(R) desenvolvidos por empresas (AIX, HP-UX etc.), mas eles têm migrado cada vez mais para os sistemas mencionados anteriormente. Vamos resumir as características típicas do UNIX(R).
[[tech-details]]
=== Detalhes técnicos
-Todo programa em execução constitui um processo que representa um estado da computação. O processo de execução é dividido entre o espaço do kernel e o espaço do usuário. Algumas operações podem ser feitas somente a partir do espaço do kernel (lidando com hardware, etc.), mas o processo deve passar a maior parte de sua vida útil no espaço do usuário. O kernel é onde o gerenciamento dos processos, hardware e detalhes de baixo nível acontecem. O kernel fornece uma API unificada padrão UNIX(R) para o espaço do usuário. Os mais importantes são abordados abaixo.
+Cada programa em execução constitui um processo que representa um estado da computação. Um processo em execução é dividido entre o espaço do kernel e o espaço do usuário. Algumas operações só podem ser realizadas a partir do espaço do kernel (lidar com hardware etc.), mas o processo deve passar a maior parte de sua vida útil no espaço do usuário. O kernel é onde ocorre o gerenciamento dos processos, hardware e detalhes de baixo nível. O kernel fornece uma API UNIX(R) padronizada e unificada para o espaço do usuário. As mais importantes estão descritas abaixo.
[[kern-proc-comm]]
==== Comunicação entre o kernel e o processo de espaço do usuário
-A API comum do UNIX(R) define uma syscall como uma forma de emitir comandos de um processo do espaço do usuário para o kernel. A implementação mais comum é usando uma instrução de interrupção ou especializada (pense em instruções `SYSENTER`/`SYSCALL` para ia32). Syscalls são definidos por um número. Por exemplo, no FreeBSD, a syscall número 85 é a syscall man:swapon[2] e a syscall número 132 é a syscall man:mkfifo[2]. Algumas syscalls precisam de parâmetros, que são passados do espaço do usuário para o espaço do kernel de várias maneiras (dependente da implementação). Syscalls são síncronas.
+A API comum do UNIX(R) define uma syscall como uma forma de emitir comandos de um processo do espaço do usuário para o kernel. A implementação mais comum é feita por meio de uma interrupção ou instrução especializada (pense nas instruções `SYSENTER`/`SYSCALL` para ia32). As syscalls são definidas por um número. Por exemplo, no FreeBSD, o número da syscall 85 é a man:swapon[2] e o número da syscall 132 é a man:mkfifo[2]. Algumas syscalls requerem parâmetros, que são passados do espaço do usuário para o espaço do kernel de várias maneiras (dependendo da implementação). As syscalls são síncronas.
-Outra maneira possível de se comunicar é usando uma _trap_. As traps ocorrem de forma assíncrona após a ocorrência de algum evento (divisão por zero, falha de página, etc.). Uma trap pode ser transparente para um processo (falha de página) ou pode resultar em uma reação como o envio de um _signal_ (divisão por zero).
+Outra forma possível de comunicação é por meio de uma _trap_. As traps ocorrem de forma assíncrona após algum evento ocorrer (divisão por zero, falta de página etc.). Uma trap pode ser transparente para um processo (falta de página) ou pode resultar em uma reação, como o envio de um _sinal_ (divisão por zero).
[[proc-proc-comm]]
==== Comunicação entre processos
-Existem outras APIs (System V IPC, memória compartilhada, etc.), mas a API mais importante é o signal. Os signals são enviados por processos ou pelo kernel e recebidos por processos. Alguns signals podem ser ignorados ou manipulados por uma rotina fornecida pelo usuário, alguns resultam em uma ação predefinida que não pode ser alterada ou ignorada.
+Existem outras APIs (System V IPC, memória compartilhada, etc.), mas a API mais importante é o sinal. Os sinais são enviados por processos ou pelo kernel e recebidos por processos. Alguns sinais podem ser ignorados ou tratados por uma rotina fornecida pelo usuário, enquanto outros resultam em uma ação predefinida que não pode ser alterada ou ignorada.
[[proc-mgmt]]
==== Gerenciamento de processos
-As instâncias do kernel são processadas primeiro no sistema (chamado init). Todo processo em execução pode criar sua cópia idêntica usando a syscall man:fork[2]. Algumas versões ligeiramente modificadas desta syscall foram introduzidas, mas a semântica básica é a mesma. Todo processo em execução pode se transformar em algum outro processo usando a syscall man:exec[3]. Algumas modificações desta syscall foram introduzidas, mas todas servem ao mesmo propósito básico. Os processos terminam suas vidas chamando a syscall man:exit[2]. Todo processo é identificado por um número único chamado PID. Todo processo tem um processo pai definido (identificado pelo seu PID).
+As instâncias do kernel são processadas primeiro no sistema (chamado de init). Todo processo em execução pode criar uma cópia idêntica de si mesmo usando a syscall man:fork[2]. Algumas versões ligeiramente modificadas dessa syscall foram introduzidas, mas a semântica básica é a mesma. Todo processo em execução pode se transformar em outro processo usando a syscall man:exec[3]. Foram introduzidas algumas modificações nessa syscall, mas todas servem ao mesmo propósito básico. Os processos encerram suas vidas chamando a syscall man:exit[2]. Cada processo é identificado por um número único chamado PID. Todo processo possui um processo pai (parent) definido (identificado pelo seu PID).
[[thread-mgmt]]
==== Gerenciamento de threads
-O UNIX(R) tradicional não define nenhuma API nem implementação para threading, enquanto POSIX(R) define sua API de threading, mas a implementação é indefinida. Tradicionalmente, havia duas maneiras de implementar threads. Manipulando-as como processos separados (threading 1:1) ou envolver todo o grupo de thread em um processo e gerenciando a threading no espaço do usuário (threading 1:N). Comparando as principais características de cada abordagem:
+No traditional UNIX(R), não é definida nenhuma API nem implementação para threads, enquanto o POSIX(R) define sua API de threads, mas a implementação é indefinida. Tradicionalmente, havia duas maneiras de implementar threads. Tratá-los como processos separados (threading 1:1) ou envolver todo o grupo de threads em um único processo e gerenciar as threads no espaço do usuário (threading 1:N). Vamos comparar as principais características de cada abordagem:
1:1 threading
-* - threads pesadas
-* - o agendamento não pode ser alterado pelo usuário (ligeiramente mitigado pela API POSIX (R))
-* + não necessita de envolvimento do syscall
-* + pode utilizar várias CPUs
+- Threads pesadas
+- O agendamento não pode ser alterado pelo usuário (ligeiramente atenuada
+ pela API POSIX(R))
++ não necessita de envolvimento do syscall
++ pode utilizar várias CPUs
1: N threading
-* + threads leves
-* + agendamento pode ser facilmente alterado pelo usuário
-* - syscalls devem ser acondicionadas
-* - não pode utilizar mais de uma CPU
++ threads leves
++ agendamento pode ser facilmente alterado pelo usuário
+- As chamadas de sistema devem ser encapsuladas
+- Não pode utilizar mais do que uma CPU
[[what-is-freebsd]]
=== O que é o FreeBSD?
-O projeto FreeBSD é um dos mais antigos sistemas operacionais de código aberto atualmente disponíveis para uso diário. É um descendente direto do verdadeiro UNIX(R), portanto, pode-se afirmar que ele é um verdadeiro UNIX(R) embora os problemas de licenciamento não permitam isso. O início do projeto remonta ao início dos anos 90, quando uma equipe de usuários BSD corrigiu o sistema operacional 386BSD. Baseado neste patchkit surgiu um novo sistema operacional, chamado FreeBSD por sua licença liberal. Outro grupo criou o sistema operacional NetBSD com diferentes objetivos em mente. Vamos nos concentrar no FreeBSD.
+O projeto FreeBSD é um dos sistemas operacionais de código aberto mais antigos atualmente disponíveis para uso diário. É um descendente direto do UNIX(R) genuíno, portanto, poderia ser considerado um verdadeiro UNIX(R), embora questões de licenciamento não permitam isso. O início do projeto remonta ao início dos anos 1990, quando um grupo de usuários do BSD modificou o sistema operacional 386BSD. Com base neste conjunto de patches, um novo sistema operacional surgiu, chamado FreeBSD por causa de sua licença liberal. Outro grupo criou o sistema operacional NetBSD com objetivos diferentes em mente. Vamos nos concentrar no FreeBSD.
-O FreeBSD é um sistema operacional baseado no UNIX(R) com todos os recursos do UNIX(R). Multitarefa preemptiva, necessidades de multiusuário, rede TCP/IP, proteção de memória, suporte a multiprocessamento simétrico, memória virtual com VM mesclada e cache de buffer, todos eles estão lá. Um dos recursos interessantes e extremamente úteis é a capacidade de emular outros sistemas operacionais UNIX(R)-like. A partir de dezembro de 2006 e do desenvolvimento do 7-CURRENT, as seguintes funcionalidades de emulação são suportadas:
+O FreeBSD é um sistema operacional baseado em UNIX(R) moderno, com todos os recursos do UNIX(R). Multitarefa preemptiva, facilidades multiusuário, rede TCP/IP, proteção de memória, suporte a multiprocessamento simétrico , memória virtual com cache de memória e buffer combinados, todos estão presentes. Uma das características interessantes e extremamente úteis é a capacidade de emular outros sistemas operacionais semelhantes ao UNIX(R). A partir de dezembro de 2006 e do desenvolvimento 7-CURRENT, as seguintes funcionalidades de emulação são suportadas:
* Emulação FreeBSD/i386 no FreeBSD/amd64
* Emulação de FreeBSD/i386 no FreeBSD/ia64
-* Emulação-Linux(R) do sistema operacional Linux (R) no FreeBSD
+* Emulação do sistema operacional Linux(R) no FreeBSD
* Emulação de NDIS da interface de drivers de rede do Windows
* Emulação de NetBSD do sistema operacional NetBSD
* Suporte PECoff para executáveis PECoff do FreeBSD
-* Emulação SVR4 do UNIX(R) System V revisão 4
+* SVR4-emulação do UNIX(R) da revisão 4 do System V
-Emulações ativamente desenvolvidas são a camada Linux(R) e várias camadas FreeBSD-on-FreeBSD. Outros não devem funcionar corretamente nem ser utilizáveis nos dias de hoje.
+As emulações desenvolvidas ativamente são a camada Linux(R) e várias camadas FreeBSD-on-FreeBSD. Outras não devem funcionar corretamente ou serem utilizáveis atualmente.
[[freebsd-tech-details]]
==== Detalhes técnicos
-O FreeBSD é o gostinho tradicional de UNIX(R) no sentido de dividir a execução dos processos em duas metades: espaço do kernel e execução do espaço do usuário. Existem dois tipos de entrada de processo no kernel: uma syscall e uma trap. Há apenas uma maneira de retornar. Nas seções subseqüentes, descreveremos as três portas de/para o kernel. Toda a descrição se aplica à arquitetura i386, pois o Linuxulator só existe lá, mas o conceito é semelhante em outras arquiteturas. A informação foi retirada de [1] e do código fonte.
+O FreeBSD é uma variante tradicional do UNIX(R) no sentido de dividir a execução dos processos em dois espaços: espaço do kernel e espaço do usuário. Existem dois tipos de entrada de processo no kernel: uma syscall e uma armadilha (trap). Existe apenas uma maneira de retornar. Nas seções subsequentes, descreveremos os três portões de/para o kernel. Toda a descrição se aplica à arquitetura i386, já que o Linuxulator existe apenas lá, mas o conceito é semelhante em outras arquiteturas. As informações foram retiradas de [1] e do código-fonte.
[[freebsd-sys-entries]]
===== Entradas do sistema
-O FreeBSD tem uma abstração chamada loader de classes de execução, que é uma entrada na syscall man:execve[2]. Isto emprega uma estrutura `sysentvec`, que descreve uma ABI executável. Ele contém coisas como tabela de tradução de errno, tabela de tradução de sinais, várias funções para atender às necessidades da syscall (correção de pilha, coredumping, etc.). Toda ABI que o kernel do FreeBSD deseja suportar deve definir essa estrutura, como é usado posteriormente no código de processamento da syscall e em alguns outros lugares. As entradas do sistema são tratadas pelos manipuladores de traps, onde podemos acessar o espaço do kernel e o espaço do usuário de uma só vez.
+O O FreeBSD tem uma abstração chamada de carregador de classe de execução, que é uma cunha no syscall man:execve[2]. Isso utiliza uma estrutura `sysentvec`, que descreve uma ABI executável. Ela contém coisas como uma tabela de tradução de errno, uma tabela de tradução de sinais, várias funções para atender às necessidades de syscall (ajuste de pilha, coredumping, etc.). Cada ABI que o kernel do FreeBSD deseja suportar deve definir essa estrutura, pois ela é usada posteriormente no código de processamento de syscall e em alguns outros lugares. As entradas do sistema são tratadas por manipuladores de interrupção, onde podemos acessar tanto o espaço do kernel quanto o espaço do usuário de uma só vez.
[[freebsd-syscalls]]
===== Syscalls
-Syscalls no FreeBSD são emitidos executando a interrupção `0x80` com o registrador `%eax` definido para um número de syscall desejado com argumentos passados na pilha.
+As chamadas de sistema (syscalls) no FreeBSD são realizadas executando a interrupção `0x80` com o registro `%eax` definido para o número desejado da syscall e os argumentos passados na pilha.
-Quando um processo emite uma interrupção `0x80`, a syscall manipuladora de trap `int0x80` é proclamada (definida em [.filename]#sys/i386/i386/exception.s#), que prepara argumentos (ou seja, copia-os para a pilha) para uma chamada para uma função C man:syscall[2] (definida em [.filename]#sys/i386/i386/trap.c#), que processa o trapframe passado. O processamento consiste em preparar a syscall (dependendo da entrada `sysvec`), determinando se a syscall é de 32 ou 64 bits (muda o tamanho dos parâmetros), então os parâmetros são copiados, incluindo a syscall. Em seguida, a função syscall real é executada com o processamento do código de retorno (casos especiais para erros `ERESTART` e `EJUSTRETURN`). Finalmente, um `userret()` é agendado, trocando o processo de volta ao ritmo do usuário. Os parâmetros para a syscall manipuladora atual são passados na forma de argumentos `struct thread \*td`, `struct syscall args*` onde o segundo parâmetro é um ponteiro para o copiado na estrutura de parâmetros.
+Quando um processo emite a interrupção `0x80`, o tratador de interrupção `int0x80` da syscall é acionado (definido em [.filename]#sys/i386/i386/exception.s#), que prepara os argumentos (ou seja, copia-os para a pilha) para uma chamada à função C man:syscall[2] (definida em [.filename]#sys/i386/i386/trap.c#), que processa o trapframe passado. O processamento consiste em preparar a syscall (dependendo da entrada `sysvec`), determinar se a syscall é de 32 bits ou 64 bits (alterando o tamanho dos parâmetros), em seguida, os parâmetros são copiados, incluindo a syscall. Em seguida, a função da syscall real é executada com o processamento do código de retorno (casos especiais para erros `ERESTART` e `EJUSTRETURN`). Por fim, é agendado um `userret()`, alternando o processo de volta para o espaço do usuário. Os parâmetros para o manipulador da syscall real são passados na forma de `struct thread *td`, `struct syscall args *`, em que o segundo parâmetro é um ponteiro para a estrutura de parâmetros copiada.
[[freebsd-traps]]
===== Armadilhas (Traps)
-O manuseio de traps no FreeBSD é similar ao manuseio de syscalls. Sempre que ocorre uma trap, um manipulador de assembler é chamado. É escolhido entre alltraps, alltraps com regs push ou calltrap, dependendo do tipo de trap. Este manipulador prepara argumentos para uma chamada para uma função C `trap()` (definida em [.filename]#sys/i386/i386/trap.c#), que então processa a trap ocorrida. Após o processamento, ele pode enviar um sinal para o processo e/ou sair para o espaço do usuário usando `userret()`.
+O tratamento de traps no FreeBSD é semelhante ao tratamento de syscalls. Sempre que ocorre uma trap, um manipulador em assembly é chamado. Ele é escolhido entre alltraps, alltraps com registradores empurrados ou calltrap, dependendo do tipo de trap. Esse manipulador prepara os argumentos para uma chamada à função em C `trap()` (definida em [.filename]#sys/i386/i386/trap.c#), que então processa a trap ocorrida. Após o processamento, pode ser enviado um sinal para o processo e/ou retornar para o espaço do usuário usando `userret()`.
[[freebsd-exits]]
===== Saídas
-As saídas do kernel para o userspace acontecem usando a rotina assembler `doreti`, independentemente de o kernel ter sido acessado por meio de uma trap ou via syscall. Isso restaura o status do programa da pilha e retorna ao espaço do usuário.
+As saídas do kernel para o espaço do usuário acontecem usando a rotina em assembly `doreti`, independentemente se o kernel foi acessado por uma interrupção (trap) ou por uma chamada de sistema. Isso restaura o status do programa da pilha e retorna para o espaço do usuário.
[[freebsd-unix-primitives]]
-===== primitivas UNIX(R)
+===== Primitivas do UNIX(R)
-O sistema operacional FreeBSD adere ao esquema tradicional UNIX(R), onde cada processo possui um número de identificação único, o chamado _PID_ (ID do processo). Números PID são alocados de forma linear ou aleatória variando de `0` para `PID_MAX`. A alocação de números PID é feita usando pesquisa linear de espaço PID. Cada thread em um processo recebe o mesmo número PID como resultado da chamada man:getpid[2].
+O sistema operacional FreeBSD adere ao esquema tradicional do UNIX(R), onde cada processo possui um número de identificação exclusivo, chamado de _PID_ (Process ID). Os números de PID são alocados linearmente ou aleatoriamente, variando de `0` a `PID_MAX`. A alocação dos números de PID é feita usando busca linear no espaço de PID. Cada thread em um processo recebe o mesmo número de PID como resultado da chamada do man:getpid[2].
-Atualmente existem duas maneiras de implementar o threading no FreeBSD. A primeira maneira é o threading M:N seguido pelo modelo de threading 1:1. A biblioteca padrão usada é o threading M:N (`libpthread`) e você pode alternar no tempo de execução para threading 1:1 (`libthr`). O plano é mudar para a biblioteca 1:1 por padrão em breve. Embora essas duas bibliotecas usem as mesmas primitivas do kernel, elas são acessadas por API(s) diferentes. A biblioteca M:N usa a família `kse_*` das syscalls enquanto a biblioteca 1:1 usa a família `thr_*` das syscalls. Por causa disso, não existe um conceito geral de ID de threading compartilhado entre o kernel e o espaço do usuário. Obviamente, as duas bibliotecas de threads implementam a API de ID de threading pthread. Todo threading do kernel (como descrito por `struct thread`) possui identificadores td tid, mas isso não é diretamente acessível a partir do espaço do usuário e serve apenas as necessidades do kernel. Ele também é usado para a biblioteca de threading 1:1 como o ID de threading do pthread, mas a manipulação desta é interna à biblioteca e não pode ser confiável.
+Atualmente, existem duas maneiras de implementar threading no FreeBSD. A primeira maneira é a modelagem de threads M:N, seguida pelo modelo de thread 1:1. A biblioteca padrão usada é a de thread M:N (`libpthread`), e você pode alternar em tempo de execução para a thread 1:1 (`libthr`). O plano é mudar em breve para a biblioteca 1:1 por padrão. Embora essas duas bibliotecas usem as mesmas primitivas do kernel, elas são acessadas por meio de APIs diferentes. A biblioteca M:N usa a família de syscalls `kse_*`, enquanto a biblioteca 1:1 usa a família de syscalls `thr_*`. Devido a isso, não há um conceito geral de ID de thread compartilhado entre o espaço do kernel e o espaço do usuário. Claro, ambas as bibliotecas de threads implementam a API de ID de thread pthread. Cada thread do kernel (conforme descrito por `struct thread`) tem um identificador `td tid`, mas isso não é acessível diretamente do espaço do usuário e serve exclusivamente às necessidades do kernel. Também é usado para a biblioteca de thread 1:1 como ID de thread pthread, mas o tratamento disso é interno à biblioteca e não se pode confiar.
-Como dito anteriormente, existem duas implementações de threads no FreeBSD. A biblioteca M:N divide o trabalho entre o espaço do kernel e o espaço do usuário. Thread é uma entidade que é agendada no kernel, mas pode representar vários números de threads do userspace. Threads M do userspace são mapeadas para threads N do kernel, economizando recursos e mantendo a capacidade de explorar o paralelismo de multiprocessadores. Mais informações sobre a implementação podem ser obtidas na página do manual ou [1]. A biblioteca 1:1 mapeia diretamente um segmento userland para uma thread do kernel, simplificando muito o esquema. Nenhum desses designs implementa um mecanismo justo (tal mecanismo foi implementado, mas foi removido recentemente porque causou séria lentidão e tornou o código mais difícil de lidar).
+Como mencionado anteriormente, existem duas implementações de threading no FreeBSD. A biblioteca M:N divide o trabalho entre o espaço do kernel e o espaço do usuário. Uma thread é uma entidade agendada no kernel, mas pode representar vários threads no espaço do usuário. M threads no espaço do usuário são mapeadas para N threads no kernel, economizando recursos e aproveitando o paralelismo de multiprocessadores. Mais informações sobre a implementação podem ser obtidas na página do manual ou [1]. A biblioteca 1:1 mapeia diretamente um thread do espaço do usuário para um thread do kernel, simplificando bastante o esquema. Nenhum desses designs implementa um mecanismo de justiça (um mecanismo desse tipo foi implementado, mas foi removido recentemente porque causava uma desaceleração significativa e tornava o código mais difícil de lidar).
[[what-is-linux]]
-=== O que é Linux(R)
+=== O que é o Linux(R)
-Linux(R) é um kernel do tipo UNIX(R) originalmente desenvolvido por Linus Torvalds, e agora está sendo contribuído por uma grande quantidade de programadores em todo o mundo. De seu simples começo até hoje, com amplo suporte de empresas como IBM ou Google, o Linux(R) está sendo associado ao seu rápido ritmo de desenvolvimento, suporte completo a hardware e seu benevolente modelo despota de organização.
+O Linux(R) é um kernel semelhante ao UNIX(R) originalmente desenvolvido por Linus Torvalds e que agora recebe contribuições de uma grande comunidade de programadores ao redor do mundo. Desde os seus humildes começos até os dias de hoje, com amplo suporte de empresas como IBM e Google, o Linux(R) é associado à sua rápida velocidade de desenvolvimento, suporte completo de hardware e modelo de organização com um ditador benevolente.
-O desenvolvimento do Linux(R) começou em 1991 como um projeto amador na Universidade de Helsinque na Finlândia. Desde então, ele obteve todos os recursos de um sistema operacional semelhante ao UNIX: multiprocessamento, suporte multiusuário, memória virtual, rede, basicamente tudo está lá. Também há recursos altamente avançados, como virtualização, etc.
+O desenvolvimento do Linux(R) começou em 1991 como um projeto de hobby na Universidade de Helsinki, na Finlândia. Desde então, ele adquiriu todas as características de um sistema operacional moderno semelhante ao UNIX(R): suporte a multiprocessamento, suporte a vários usuários, memória virtual, rede, basicamente tudo está presente. Existem também recursos altamente avançados, como virtualização, entre outros.
-A partir de 2006, o Linux parece ser o sistema operacional de código aberto mais utilizado com o apoio de fornecedores independentes de software como Oracle, RealNetworks, Adobe, etc. A maioria dos softwares comerciais distribuídos para Linux(R) só pode ser obtido de forma binária, portanto a recompilação para outros sistemas operacionais é impossível.
+A partir de 2006, o Linux(R) parece ser o sistema operacional de código aberto mais amplamente utilizado, com suporte de fornecedores independentes de software como Oracle, RealNetworks, Adobe, etc. A maioria do software comercial distribuído para Linux(R) só está disponível em forma binária, tornando impossível a recompilação para outros sistemas operacionais.
-A maior parte do desenvolvimento do Linux(R) acontece em um sistema de controle de versão Git. O Git é um sistema distribuído, de modo que não existe uma fonte central do código Linux(R), mas algumas ramificações são consideradas proeminentes e oficiais. O esquema de número de versão implementado pelo Linux(R) consiste em quatro números A.B.C.D. Atualmente, o desenvolvimento acontece em 2.6.C.D, onde C representa a versão principal, onde novos recursos são adicionados ou alterados, enquanto D é uma versão secundária somente para correções de bugs.
+A maioria do desenvolvimento do Linux(R) ocorre em um sistema de controle de versão chamado Git. O Git é um sistema distribuído, então não há uma fonte central do código do Linux(R), mas alguns branches são considerados proeminentes e oficiais. O esquema de numeração de versão implementado pelo Linux(R) consiste em quatro números A.B.C.D. Atualmente, o desenvolvimento ocorre na versão 2.6.C.D, onde C representa a versão principal, onde novos recursos são adicionados ou alterados, enquanto D é uma versão menor para correções de bugs apenas.
Mais informações podem ser obtidas em [3].
[[linux-tech-details]]
==== Detalhes técnicos
-O Linux(R) segue o esquema tradicional do UNIX(R) de dividir a execução de um processo em duas metades: o kernel e o espaço do usuário. O kernel pode ser inserido de duas maneiras: via trap ou via syscall. O retorno é tratado apenas de uma maneira. A descrição mais detalhada aplica-se ao Linux(R) 2.6 na arquitetura i386(TM). Esta informação foi retirada de [2].
+Linux(R) segue o esquema tradicional do UNIX(R) de dividir a execução de um processo em duas partes: o espaço do kernel e o espaço do usuário. O kernel pode ser acessado de duas maneiras: por meio de uma interrupção (trap) ou por meio de uma chamada de sistema (syscall). O retorno é tratado apenas de uma maneira. A descrição a seguir se aplica ao Linux(R) 2.6 na arquitetura i386(TM). Essas informações foram obtidas em [2].
[[linux-syscalls]]
===== Syscalls
-Syscalls em Linux(R) são executados (no espaço de usuário) usando macros `syscallX` onde X substitui um número que representa o número de parâmetros da syscall dada. Essa macro traduz um código que carrega o registro `% eax` com um número da syscall e executa a interrupção `0x80`. Depois disso, um retorn da syscall é chamado, o que traduz valores de retorno negativos para valores `errno` positivos e define `res` para `-1` em caso de erro. Sempre que a interrupção `0x80` é chamada, o processo entra no kernel no manipulador de trap das syscalls. Essa rotina salva todos os registros na pilha e chama a entrada syscall selecionada. Note que a convenção de chamadas Linux(R) espera que os parâmetros para o syscall sejam passados pelos registradores como mostrado aqui:
+As chamadas de sistema no Linux(R) são realizadas (no espaço do usuário) usando macros `syscallX`, em que X substitui um número representando a quantidade de parâmetros da chamada de sistema específica. Essa macro é traduzida para um código que carrega o registro `%eax` com o número da chamada de sistema e executa a interrupção `0x80`. Após o retorno da chamada de sistema, é feita a chamada para tratar o retorno, que converte valores de retorno negativos em valores `errno` positivos e define `res` como `-1` em caso de erro. Sempre que a interrupção `0x80` é chamada, o processo entra no kernel no tratador de interrupção de chamada de sistema. Essa rotina salva todos os registros na pilha e chama a entrada da chamada de sistema selecionada. Observa-se que a convenção de chamada do Linux(R) espera que os parâmetros da chamada de sistema sejam passados via registros, como mostrado aqui:
. parameter -> `%ebx`
. parameter -> `%ecx`
@@ -189,45 +193,45 @@ Syscalls em Linux(R) são executados (no espaço de usuário) usando macros `sys
. parameter -> `%edi`
. parameter -> `%ebp`
-Existem algumas exceções, onde Linux(R) usa diferentes convenções de chamada (mais notavelmente a syscall `clone`).
+Existem algumas exceções a isso, onde o Linux(R) usa convenções de chamada diferentes (a mais notável é a chamada de sistema `clone`).
[[linux-traps]]
===== Armadilhas (Traps)
-Os manipuladores de traps são apresentados em [.filename]#arch/i386/kernel/traps.c# e a maioria desses manipuladores vive em [.filename]#arch/i386/kernel/entry.S#, onde a manipulação das traps acontecem.
+Os tratadores de exceção são introduzidos em [.filename]#arch/i386/kernel/traps.c# e a maioria desses tratadores ficam localizados em [.filename]#arch/i386/kernel/entry.S#, onde o tratamento das exceções ocorre.
[[linux-exits]]
===== Saídas
-O retorno da syscall é gerenciado pela syscall man:exit[3], que verifica se o processo não está concluído e verifica se usamos seletores fornecidos pelo usuário . Se isso acontecer, a correção da pilha é aplicada e, finalmente, os registros são restaurados da pilha e o processo retorna ao espaço do usuário.
+O retorno da chamada de sistema é gerenciado pela função `exit` do sistema, que verifica se o processo possui trabalho inacabado e, em seguida, verifica se foram utilizados seletores fornecidos pelo usuário. Se isso ocorrer, é aplicada uma correção de pilha e, finalmente, os registros são restaurados da pilha e o processo retorna ao espaço do usuário.
[[linux-unix-primitives]]
-===== primitivas UNIX(R)
+===== Primitivas do UNIX(R)
-Na versão 2.6, o sistema operacional Linux(R) redefiniu algumas das primitivas tradicionais do UNIX(R), especialmente PID, TID e thread. O PID é definido para não ser exclusivo para cada processo, portanto, para alguns processos (threading) man:getppid[2] retorna o mesmo valor. A identificação exclusiva do processo é fornecida pelo TID. Isso ocorre porque o _NPTL_ (Nova Biblioteca de threading POSIX(R)) define threading para serem processos normais (assim chamado threading 1:1). Gerar um novo processo no Linux(R) 2.6 acontece usando a syscall `clone` (as variantes do fork são reimplementadas usando-o). Esta syscall clone define um conjunto de sinalizadores que afetam o comportamento do processo de clonagem em relação à implementação do threading. A semântica é um pouco confusa, pois não existe uma única bandeira dizendo a syscall para criar uma thread.
+Na versão 2.6, o sistema operacional Linux(R) redefiniu algumas das primitivas tradicionais do UNIX(R), principalmente PID, TID e thread. O PID não é mais definido como único para cada processo, portanto, para alguns processos (threads), a função man:getppid[2] retorna o mesmo valor. A identificação única de um processo é fornecida pelo TID. Isso ocorre porque o _NPTL_ (New POSIX(R) Thread Library) define threads como processos normais (chamados de 1:1 threading). A criação de um novo processo no Linux(R) 2.6 ocorre usando a chamada de sistema `clone` (as variantes de fork são reimplementadas usando essa chamada). Essa chamada clone define um conjunto de flags que afetam o comportamento do processo clonado em relação à implementação de threads. A semântica é um pouco complexa, pois não há uma única flag que indique à chamada de sistema para criar uma thread.
Flags de clone implementados são:
* `CLONE_VM` - os processos compartilham seu espaço de memória
* `CLONE_FS` - compartilha umask, cwd e namespace
-* `CLONE_FILES` - compartilham arquivos abertos
-* `CLONE_SIGHAND` - compartilha manipuladores de sinais e bloqueia sinais
-* `CLONE_PARENT` - compartilha processo pai
-* `CLONE_THREAD` - ser a thread (mais explicações abaixo)
+* `CLONE_FILES` - compartilha arquivos abertos
+* `CLONE_SIGHAND` - compartilha manipuladores de sinal e sinais bloqueados
+* `CLONE_PARENT` - compartilha o processo pai
+* `CLONE_THREAD` - ser uma thread (mais explicações abaixo)
* `CLONE_NEWNS` - novo namespace
-* `CLONE_SYSVSEM` - compartilha SysV sob estruturas
+* `CLONE_SYSVSEM` - compartilha estruturas de reversão SysV
* `CLONE_SETTLS` - configura o TLS no endereço fornecido
-* `CLONE_PARENT_SETTID` - define o TID no processo pai
-* `CLONE_CHILD_CLEARTID` - limpe o TID no processo filho
-* `CLONE_CHILD_SETTID` - define o TID no processo filho
+* `CLONE_PARENT_SETTID` - define o TID (Thread ID) no processo pai
+* `CLONE_CHILD_CLEARTID` - limpa o TID (Thread ID) no processo filho
+* `CLONE_CHILD_SETTID` - define o TID (Thread ID) no processo filho
-`CLONE_PARENT` define o processo real para o processo pai do requisitante. Isso é útil para threads porque, se a thread A criar a thread B, queremos que a thread B parenteada para o processo pai de todo o grupo de threads. `CLONE_THREAD` faz exatamente a mesma coisa que `CLONE_PARENT`, `CLONE_VM` e `CLONE_SIGHAND`, reescreve o PID para ser o mesmo que PID do requisitante, define o sinal de saída como none e entra no grupo de threads. `CLONE_SETTLS` configura entradas GDT para tratamento de TLS. O conjunto de flags `CLONE_*_*TID` define/limpa o endereço fornecido pelo usuário para TID ou 0.
+A `CLONE_PARENT` define o pai real como o pai do chamador. Isso é útil para threads, porque se a thread A cria a thread B, queremos que a thread B tenha o mesmo pai do grupo de threads inteiro. A `CLONE_THREAD` faz exatamente a mesma coisa que `CLONE_PARENT`, `CLONE_VM` e `CLONE_SIGHAND`, reescreve o PID para ser o mesmo do chamador, define o sinal de saída como nenhum (none) e entra no grupo de threads. A `CLONE_SETTLS` configura as entradas do GDT (Global Descriptor Table) para manipulação de TLS (Thread Local Storage). O conjunto de flags `CLONE_*_*TID` define ou limpa o endereço fornecido pelo usuário para o TID ou 0.
-Como você pode ver, o `CLONE_THREAD` faz a maior parte do trabalho e não parece se encaixar muito bem no esquema. A intenção original não é clara (mesmo para autores, de acordo com comentários no código), mas acho que originalmente havia uma flag de thread, que foi então dividida entre muitas outras flags, mas essa separação nunca foi totalmente concluída. Também não está claro para que serve esta partição, uma vez que a glibc não usa isso, portanto, apenas o uso do clone escrito à mão permite que um programador acesse esses recursos.
+Como você pode ver, o `CLONE_THREAD` faz a maior parte do trabalho e parece não se encaixar muito bem no esquema. A intenção original é incerta (até mesmo para os autores, de acordo com comentários no código), mas acredito que originalmente existia uma única flag de threading, que foi posteriormente dividida entre muitas outras flags, mas essa separação nunca foi totalmente concluída. Também não está claro para que serve essa partição, já que a glibc não a utiliza, então apenas o uso manual do clone permite que um programador acesse esses recursos.
-Para programas não segmentados, o PID e o TID são os mesmos. Para programas em threadings, os primeiros PID e TID da thread são os mesmos e todos os threading criados compartilham o mesmo PID e são atribuídos a um TID exclusivo (porque `CLONE_THREAD` é passado), o processo pai também é compartilhado para todos os processos que formam esse threading do programa.
+Para programas não-threaded, o PID e TID são os mesmos. Para programas threaded, o PID e TID da primeira thread são os mesmos, e cada thread criada compartilha o mesmo PID e recebe um TID único (porque `CLONE_THREAD` é passado), também o pai é compartilhado por todos os processos que formam esse programa threaded.
-O código que implementa man:pthread_create[3] no NPTL define as flags de clone como este:
+O código que implementa o man:pthread_create[3] em NPTL define as flags de clone da seguinte forma:
[.programlisting]
....
@@ -244,7 +248,7 @@ int clone_flags = (CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGNAL
| 0);
....
-O `CLONE_SIGNAL` é definido como
+A `CLONE_SIGNAL` é definida como
[.programlisting]
....
@@ -256,44 +260,44 @@ o último 0 significa que nenhum sinal é enviado quando qualquer uma das thread
[[what-is-emu]]
=== O que é emulação
-De acordo com uma definição de dicionário, emulação é a capacidade de um programa ou dispositivo de imitar um outro programa ou dispositivo. Isto é conseguido fornecendo a mesma reação a um determinado estímulo que o objeto emulado. Na prática, o mundo do software vê três tipos de emulação - um programa usado para emular uma máquina (QEMU, vários emuladores de consoles de jogos etc.), emulação de software de uma instalação de hardware (emuladores OpenGL, emulação de unidades de ponto flutuante etc.) e emulação do sistema (no kernel do sistema operacional ou como um programa de espaço do usuário).
+De acordo com a definição de dicionário, emulação é a capacidade de um programa ou dispositivo imitar outro programa ou dispositivo. Isso é alcançado ao fornecer a mesma reação a um estímulo dado como o objeto emulado. Na prática, o mundo do software geralmente vê três tipos de emulação: um programa usado para emular uma máquina (QEMU, vários emuladores de consoles de jogos, etc.), emulação de software de uma funcionalidade de hardware (emuladores de OpenGL, emulação de unidades de ponto flutuante, etc.) e emulação de sistemas operacionais (seja no núcleo do sistema operacional ou como um programa no espaço do usuário).
-Emulação é geralmente usada em um lugar, onde o uso do componente original não é viável nem possível a todos. Por exemplo, alguém pode querer usar um programa desenvolvido para um sistema operacional diferente do que eles usam. Então a emulação vem a calhar. Por vezes, não há outra maneira senão usar emulação - por ex. Quando o dispositivo de hardware que você tenta usar não existe (ainda/mais), então não há outro caminho além da emulação. Isso acontece com frequência ao transferir um sistema operacional para uma nova plataforma (inexistente). Às vezes é mais barato emular.
+A emulação é geralmente utilizada em situações em que não é viável ou possível utilizar o componente original. Por exemplo, alguém pode querer usar um programa desenvolvido para um sistema operacional diferente do que estão usando. Nesse caso, a emulação é útil. Às vezes, não há outra opção além da emulação - por exemplo, quando o dispositivo de hardware que você está tentando usar não existe (ainda/não mais), não há outra opção além da emulação. Isso ocorre com frequência ao portar um sistema operacional para uma plataforma nova (e inexistente). Às vezes, é apenas mais econômico utilizar a emulação.
-Olhando do ponto de vista da implementação, existem duas abordagens principais para a implementação da emulação. Você pode emular a coisa toda - aceitando possíveis entradas do objeto original, mantendo o estado interno e emitindo a saída correta com base no estado e/ou na entrada. Este tipo de emulação não requer condições especiais e basicamente pode ser implementado em qualquer lugar para qualquer dispositivo/programa. A desvantagem é que a implementação de tal emulação é bastante difícil, demorada e propensa a erros. Em alguns casos, podemos usar uma abordagem mais simples. Imagine que você deseja emular uma impressora que imprime da esquerda para a direita em uma impressora que imprime da direita para a esquerda. É óbvio que não há necessidade de uma camada de emulação complexa, mas a simples reversão do texto impresso é suficiente. Às vezes, o ambiente de emulação é muito semelhante ao emulado, portanto, apenas uma camada fina de alguma tradução é necessária para fornecer uma emulação totalmente funcional! Como você pode ver, isso é muito menos exigente de implementar, portanto, menos demorado e propenso a erros do que a abordagem anterior. Mas a condição necessária é que os dois ambientes sejam semelhantes o suficiente. A terceira abordagem combina os dois anteriores. Na maioria das vezes, os objetos não fornecem os mesmos recursos, portanto, em um caso de emulação, o mais poderoso é o menos poderoso que temos para emular os recursos ausentes com a emulação completa descrita acima.
+Olhando a partir de um ponto de vista de implementação, existem duas abordagens principais para a implementação da emulação. Você pode emular o objeto inteiro - aceitando possíveis entradas do objeto original, mantendo o estado interno e emitindo a saída correta com base no estado e/ou na entrada. Esse tipo de emulação não requer condições especiais e basicamente pode ser implementado em qualquer lugar para qualquer dispositivo/programa. A desvantagem é que a implementação de tal emulação é bastante difícil, demorada e propensa a erros. Em alguns casos, podemos usar uma abordagem mais simples. Imagine que você queira emular uma impressora que imprime da esquerda para a direita em uma impressora que imprime da direita para a esquerda. É óbvio que não há necessidade de uma camada de emulação complexa, apenas reverter o texto impresso é suficiente. Às vezes, o ambiente de emulação é muito semelhante ao ambiente emulado, então apenas uma fina camada de tradução é necessária para fornecer uma emulação totalmente funcional! Como você pode ver, isso é muito menos exigente de ser implementado, portanto, menos demorado e propenso a erros em comparação com a abordagem anterior. Mas a condição necessária é que os dois ambientes sejam suficientemente semelhantes. A terceira abordagem combina as duas anteriores. Na maioria das vezes, os objetos não fornecem as mesmas capacidades, então, ao emular um objeto mais poderoso em um objeto menos poderoso, temos que emular os recursos ausentes com emulação completa descrita anteriormente.
-Esta tese de mestrado lida com a emulação de UNIX(R) em UNIX(R), que é exatamente o caso, onde apenas uma camada fina de tradução é suficiente para fornecer emulação completa. A API do UNIX(R) consiste em um conjunto de syscalls, que geralmente são autônomas e não afetam algum estado global do kernel.
+Esta tese de mestrado trata da emulação do UNIX(R) em UNIX(R), que é exatamente o caso em que apenas uma camada fina de tradução é suficiente para fornecer uma emulação completa. A API do UNIX(R) consiste em um conjunto de syscalls, que geralmente são autônomas e não afetam algum estado global do kernel.
Existem algumas syscalls que afetam o estado interno, mas isso pode ser resolvido fornecendo algumas estruturas que mantêm o estado extra.
-Nenhuma emulação é perfeita e as emulações tendem a não ter algumas partes, mas isso geralmente não causa nenhuma desvantagem séria. Imagine um emulador de console de jogos que emula tudo, menos a saída de música. Não há dúvida de que os jogos são jogáveis e pode-se usar o emulador. Pode não ser tão confortável quanto o console original, mas é um compromisso aceitável entre preço e conforto.
+Nenhuma emulação é perfeita e emulações tendem a ter algumas partes ausentes, mas isso geralmente não causa grandes inconvenientes. Imagine um emulador de console de jogos que emula tudo, exceto a saída de música. Sem dúvida, os jogos são jogáveis e é possível usar o emulador. Pode não ser tão confortável quanto o console de jogos original, mas é um compromisso aceitável entre preço e conforto.
-O mesmo acontece com a API do UNIX(R). A maioria dos programas pode viver com um conjunto muito limitado de syscalls funcionando. Essas syscalls tendem a ser as mais antigas (man:read[2]/man:write[2], man:fork[2] family, man:signal[3] handling, man:exit[3], man:socket[2] API), portanto, é fácil emular porque sua semântica é compartilhada entre todos os UNIX(R), que existem hoje.
+O mesmo acontece com a API do UNIX(R). A maioria dos programas pode funcionar com um conjunto muito limitado de syscalls. Essas syscalls tendem a ser as mais antigas (man:read[2]/man:write[2], família man:fork[2], manipulação de man:signal[3], man:exit[3], API man:socket[2]), o que torna mais fácil a emulação, pois sua semântica é compartilhada entre todos os sistemas UNIX(R) existentes hoje em dia.
[[freebsd-emulation]]
== Emulação
=== Como funciona a emulação no FreeBSD
-Como dito anteriormente, o FreeBSD suporta a execução de binários a partir de vários outros UNIX(R). Isso funciona porque o FreeBSD tem uma abstração chamada loader de classes de execução. Isso se encaixa na syscall man:execve[2], então quando man:execve[2] está prestes a executar um binário que examina seu tipo.
+Como mencionado anteriormente, o FreeBSD suporta a execução de binários de vários outros sistemas UNIX(R). Isso é possível porque o FreeBSD possui uma abstração chamada de "execução do carregador de classe" (execution class loader). Isso é inserido na chamada de sistema man:execve[2], então quando o man:execve[2] está prestes a executar um binário, ele examina o tipo do binário.
-Existem basicamente dois tipos de binários no FreeBSD. Scripts de texto semelhantes a shell que são identificados por `#!` como seus dois primeiros caracteres e binários normais (normalmente _ELF_), que são uma representação de um objeto executável compilado. A grande maioria (pode-se dizer todos eles) de binários no FreeBSD é do tipo ELF. Os arquivos ELF contêm um cabeçalho, que especifica a ABI do OS para este arquivo ELF. Ao ler essas informações, o sistema operacional pode determinar com precisão o tipo de binário do arquivo fornecido.
+Existem basicamente dois tipos de binários no FreeBSD. Scripts de texto semelhantes a shell, que são identificados pelos primeiros dois caracteres `#!`, e binários normais (geralmente ELF), que são uma representação de um objeto executável compilado. A grande maioria (pode-se dizer que todos) os binários no FreeBSD são do tipo ELF. Os arquivos ELF contêm um cabeçalho que especifica a ABI do sistema operacional para este arquivo ELF. Lendo essa informação, o sistema operacional pode determinar com precisão qual é o tipo de arquivo binário.
-Toda ABI de OS deve ser registrada no kernel do FreeBSD. Isso também se aplica ao sistema operacional nativo do FreeBSD. Então, quando man:execve[2] executa um binário, ele itera através da lista de APIs registradas e quando ele encontra a correta, ele começa a usar as informações contidas na descrição da ABI do OS (sua tabela syscall, tabela de tradução `errno`, etc.). Assim, toda vez que o processo chama uma syscall, ele usa seu próprio conjunto de syscalls em vez de uma global. Isso efetivamente fornece uma maneira muito elegante e fácil de suportar a execução de vários formatos binários.
+Cada ABI de sistema operacional deve ser registrada no kernel do FreeBSD. Isso também se aplica à ABI nativa do FreeBSD. Portanto, quando o man:execve[2] executa um binário, ele itera pela lista de APIs registradas e, quando encontra a correspondente, começa a usar as informações contidas na descrição da ABI do sistema operacional (sua tabela de syscalls, tabela de tradução de `errno`, etc.). Portanto, cada vez que o processo chama uma syscall, ele usa seu próprio conjunto de syscalls em vez de um conjunto global. Isso fornece uma maneira muito elegante e fácil de oferecer suporte à execução de vários formatos binários.
-A natureza da emulação de diferentes sistemas operacionais (e também alguns outros subsistemas) levou os desenvolvedores a invitar um mecanismo de evento manipulador. Existem vários locais no kernel, onde uma lista de manipuladores de eventos é chamada. Cada subsistema pode registrar um manipulador de eventos e eles são chamados de acordo com sua necessidade. Por exemplo, quando um processo é encerrado, há um manipulador chamado que possivelmente limpa o que o subsistema que ele precisa de limpeza.
+A natureza da emulação de diferentes sistemas operacionais (e também de outros subsistemas) levou os desenvolvedores a adotarem um mecanismo de tratamento de eventos. Existem vários pontos no kernel em que uma lista de manipuladores de eventos é chamada. Cada subsistema pode registrar um manipulador de evento e eles são chamados de acordo. Por exemplo, quando um processo é encerrado, é chamado um manipulador que possivelmente realiza a limpeza necessária no subsistema.
-Essas facilidades simples fornecem basicamente tudo o que é necessário para a infra-estrutura de emulação e, de fato, essas são basicamente as únicas coisas necessárias para implementar a camada de emulação do Linux(R).
+Essas facilidades simples fornecem basicamente tudo o que é necessário para a infraestrutura de emulação e, na verdade, são basicamente as únicas coisas necessárias para implementar a camada de emulação do Linux(R).
[[freebsd-common-primitives]]
=== Primitivas comuns no kernel do FreeBSD
-Camadas de emulação precisam de algum suporte do sistema operacional. Eu vou descrever algumas das primitivas suportadas no sistema operacional FreeBSD.
+As camadas de emulação precisam de suporte por parte do sistema operacional. Vou descrever alguns dos primitivos suportados no sistema operacional FreeBSD.
[[freebsd-locking-primitives]]
==== Primitivas de Bloqueio
-Contribuído por: Attilio Rao mailto:attilio@FreeBSD.org[attilio@FreeBSD.org]
+Contribuído por: `{attilio}`
O conjunto de primitivas de sincronização do FreeBSD é baseado na idéia de fornecer um grande número de diferentes primitivas de uma maneira que a melhor possa ser usada para cada situação específica e apropriada.
@@ -303,22 +307,22 @@ Para um ponto de vista de alto nível, você pode considerar três tipos de prim
* locks
* barreiras de agendamento
-Abaixo, há descrições para as 3 famílias. Para cada bloqueio, você deve verificar a página de manual vinculada (onde for possível) para obter explicações mais detalhadas.
+Abaixo estão as descrições das 3 famílias. Para cada trava, é recomendado verificar a página do manual vinculada (quando possível) para obter explicações mais detalhadas.
[[freebsd-atomic-op]]
===== Operações atômicas e barreiras de memória
-Operações atômicas são implementadas através de um conjunto de funções que executam aritmética simples em operandos de memória de maneira atômica com relação a eventos externos (interrupções, preempção, etc.). Operações atômicas podem garantir atomicidade apenas em pequenos tipos de dados (na ordem de magnitude do tipo de dados C da arquitetura `.long.`), portanto raramente devem ser usados diretamente no código de nível final, se não apenas para operações muito simples (como configuração de flags em um bitmap, por exemplo). De fato, é bastante simples e comum escrever uma semântica errada baseada apenas em operações atômicas (geralmente referidas como lock-less). O kernel do FreeBSD oferece uma maneira de realizar operações atômicas em conjunto com uma barreira de memória. As barreiras de memória garantirão que uma operação atômica ocorrerá seguindo alguma ordem especificas em relação a outros acessos à memória. Por exemplo, se precisarmos que uma operação atômica aconteça logo depois que todas as outras gravações pendentes (em termos de instruções reordenando atividades de buffers) forem concluídas, precisamos usar explicitamente uma barreira de memória em conjunto com essa operação atômica. Portanto, é simples entender por que as barreiras de memória desempenham um papel fundamental na construção de bloqueios de alto nível (assim como referências, exclusões mútuas, etc.). Para uma explicação detalhada sobre operações atômicas, consulte man:atomic[9]. É muito, no entanto, notar que as operações atômicas (e as barreiras de memória também) devem, idealmente, ser usadas apenas para construir bloqueios front-ending (como mutexes).
+As operações atômicas são implementadas por meio de um conjunto de funções que realizam operações aritméticas simples em operandos de memória de maneira atômica em relação a eventos externos (interrupções, preempção, etc.). As operações atômicas podem garantir atomicidade apenas em tipos de dados pequenos (da ordem de magnitude do tipo de dados C `.long.` da arquitetura), portanto, devem ser raramente usadas diretamente no código de nível final, a menos que seja apenas para operações muito simples (como definir uma bandeira em um bitmap, por exemplo). Na verdade, é bastante simples e comum escrever uma semântica errada baseada apenas em operações atômicas (geralmente referidas como "sem bloqueio"). O kernel do FreeBSD oferece uma maneira de realizar operações atômicas em conjunto com uma barreira de memória. As barreiras de memória garantem que uma operação atômica ocorra seguindo alguma ordem especificada em relação a outros acessos à memória. Por exemplo, se precisamos que uma operação atômica ocorra logo após todas as gravações pendentes (em termos de reordenação de instruções nos buffers) sejam concluídas, precisamos usar explicitamente uma barreira de memória em conjunto com essa operação atômica. Portanto, é fácil entender por que as barreiras de memória desempenham um papel fundamental na construção de travas de nível superior (como refcount, mutexes, etc.). Para uma explicação detalhada sobre as operações atômicas, consulte o man:atomic[9]. No entanto, é importante notar que as operações atômicas (assim como as barreiras de memória) idealmente devem ser usadas apenas para a construção de travas de nível superior (como mutexes).
[[freebsd-refcounts]]
===== Refcounts
-Refcounts são interfaces para manipular contadores de referência. Eles são implementados por meio de operações atômicas e destinam-se a ser usados apenas para casos em que o contador de referência é a única coisa a ser protegida, portanto, até mesmo algo como um spin-mutex é obsoleto. Usar a interface de recontagem para estruturas, onde um mutex já é usado, geralmente está errado, pois provavelmente devemos fechar o contador de referência em alguns caminhos já protegidos. Uma manpage discutindo refcount não existe atualmente, apenas verifique [.filename]#sys/refcount.h# para uma visão geral da API existente.
+Refcounts são interfaces para lidar com contadores de referência. Eles são implementados por meio de operações atômicas e destinam-se a serem usados apenas em casos em que o contador de referência é a única coisa a ser protegida, então até mesmo algo como um spin-mutex é considerado obsoleto. O uso da interface refcount para estruturas em que já é usado um mutex geralmente está incorreto, pois provavelmente devemos fechar o contador de referência em algum caminho já protegido. Atualmente, não existe uma página de manual que discuta refcount, apenas verifique [.filename]#sys/refcount.h# para obter uma visão geral da API existente.
[[freebsd-locks]]
===== Locks
-O kernel do FreeBSD tem enormes classes de bloqueios. Cada bloqueio é definido por algumas propriedades peculiares, mas provavelmente o mais importante é o evento vinculado a detentores de contestação (ou, em outros termos, o comportamento de threading incapazes de adquirir o bloqueio). O esquema de bloqueio do FreeBSD apresenta três comportamentos diferentes para contendores:
+O kernel do FreeBSD possui várias classes de locks. Cada lock é definido por algumas propriedades específicas, mas provavelmente a mais importante é o evento vinculado aos detentores em disputa (ou em outras palavras, o comportamento das threads incapazes de adquirir o lock). O esquema de locking do FreeBSD apresenta três comportamentos diferentes para os contendores:
. spinning
. blocking
@@ -332,28 +336,28 @@ números não são casuais
[[freebsd-spinlocks]]
===== Spinning locks
-Spin locks permitem que os acumuladores rotacionarem até que eles não consigam adquirir um lock. Uma questão importante é quando um segmento contesta em um spin lock se não for desmarcado. Uma vez que o kernel do FreeBSD é preventivo, isto expõe o spin lock ao risco de deadlocks que podem ser resolvidos apenas desabilitando as interrupções enquanto elas são adquiridas. Por essa e outras razões (como falta de suporte à propagação de prioridade, falta de esquemas de balanceamento de carga entre CPUs, etc.), os spin locks têm a finalidade de proteger endereçamentos muito pequenos de código ou, idealmente, não serem usados se não solicitados explicitamente ( explicado posteriormente).
+Spin locks permitem que os aguardantes fiquem girando em um loop até que não possam adquirir o lock. Uma questão importante a lidar é quando uma thread disputa um spin lock se ela não for despachada. Como o kernel do FreeBSD é preemptivo, isso expõe o spin lock ao risco de deadlocks que podem ser resolvidos desabilitando as interrupções enquanto eles são adquiridos. Por esse e outros motivos (como a falta de suporte à propagação de prioridade, deficiência em esquemas de balanceamento de carga entre CPUs, etc.), os spin locks são destinados a proteger trechos muito pequenos de código, ou idealmente não devem ser usados se não forem explicitamente solicitados (explicado posteriormente).
[[freebsd-blocking]]
===== Bloqueio
-Os locks em blocos permitem que as tarefas dos acumuladores sejam removidas e bloqueados até que o proprietário do bloqueio não os libere e ative um ou mais contendores. Para evitar problemas de fome, os locks em bloco fazem a propagação de prioridade dos acumuladores para o proprietário. Os locks em bloco devem ser implementados por meio da interface turnstile e devem ser o tipo mais usado de bloqueios no kernel, se nenhuma condição específica for atendida.
+Block locks let waiters to be descheduled and blocked until the lock owner does not drop it and wakes up one or more contenders. To avoid starvation issues, blocking locks do priority propagation from the waiters to the owner. Block locks must be implemented through the turnstile interface and are intended to be the most used kind of locks in the kernel, if no particular conditions are met.
[[freebsd-sleeping]]
===== Sleeping
-Sleep locks permitem que as tarefas dos waiters sejam removidas e eles adormecem até que o suporte do lock não os deixe cair e desperte um ou mais waiters. Como os sleep locks se destinam a proteger grandes endereçamentos de código e a atender a eventos assíncronos, eles não fazem nenhuma forma de propagação de prioridade. Eles devem ser implementados por meio da interface man:sleepqueue[9].
+As travas de suspensão (sleep locks) permitem que os processos em espera sejam despachados (descheduled ) e adormeçam até que o detentor da trava a solte e acorde um ou mais processos em espera. Como as travas de suspensão são projetadas para proteger grandes trechos de código e lidar com eventos assíncronos, elas não realizam qualquer forma de propagação de prioridade. Elas devem ser implementadas por meio da interface man:sleepqueue[9].
-A ordem usada para adquirir locks é muito importante, não apenas pela possibilidade de deadlock devido a reversões de ordem de bloqueio, mas também porque a aquisição de lock deve seguir regras específicas vinculadas a naturezas de bloqueios. Se você der uma olhada na tabela acima, a regra prática é que, se um segmento contiver um lock de nível n (onde o nível é o número listado próximo ao tipo de bloqueio), não é permitido adquirir um lock de níveis superiores , pois isso quebraria a semântica especificada para um caminho. Por exemplo, se uma thread contiver um lock em bloco (nível 2), ele poderá adquirir um spin lock (nível 1), mas não um sleep lock (nível 3), pois os locks em bloco são destinados a proteger caminhos menores que o sleep lock ( essas regras não são sobre operações atômicas ou agendamento de barreiras, no entanto).
+A ordem usada para adquirir locks é muito importante, não apenas devido à possibilidade de deadlock devido a inversões na ordem dos locks, mas também porque a aquisição de locks deve seguir regras específicas relacionadas às naturezas dos locks. Se você observar a tabela acima, a regra prática é que se um thread possui um lock de nível n (onde o nível é o número listado próximo ao tipo de lock), ele não pode adquirir um lock de níveis superiores, pois isso quebraria a semântica especificada para um determinado caminho. Por exemplo, se um thread possui um bloqueio de bloqueio (nível 2), é permitido adquirir um lock de rotação (nível 1), mas não um lock de suspensão (nível 3), pois os bloqueios de bloqueio são destinados a proteger caminhos menores do que os bloqueios de suspensão (essas regras não se aplicam a operações atômicas ou barreiras de agendamento, no entanto).
Esta é uma lista de bloqueio com seus respectivos comportamentos:
-* spin mutex - spinning - man:mutex[9]
-* sleep mutex - blocking - man:mutex[9]
-* pool mutex - blocking - man:mtx_pool[9]
-* família sleep - sleeping - man:sleep[9] pausa tsleep msleep msleep spin msleep rw msleep sx
+* spin mutex - girando - man:mutex[9]
+* Sleep mutex - bloqueio - man:mutex[9]
+* pool mutex - blocking - man:mtx[pool]
+* A família de funções de suspensão (sleep family) - sleeping - man:sleep[9] pause tsleep msleep msleep spin msleep rw msleep sx
* condvar - sleeping - man:condvar[9]
-* wlock - blocking - man:rwlock[9]
+* rwlock - blocking - man:rwlock[9]
* sxlock - sleeping - man:sx[9]
* lockmgr - sleeping - man:lockmgr[9]
* semáforos - sleeping - man:sema[9]
@@ -363,100 +367,100 @@ Entre esses bloqueios, apenas mutexes, sxlocks, rwlocks e lockmgrs são destinad
[[freebsd-scheduling]]
===== Barreiras de agendamento
-As barreiras de agendamento devem ser usadas para orientar o agendamento de threads. Eles consistem principalmente de três diferentes stubs:
+Scheduling barriers are intended to be used to drive scheduling of threading. They consist mainly of three different stubs:
* seções críticas (e preempção)
* sched_bind
* sched_pin
-Geralmente, eles devem ser usados apenas em um contexto específico e, mesmo que possam substituir bloqueios, eles devem ser evitados porque eles não permitem o diagnóstico de problemas simples com ferramentas de depuração de bloqueio (como man:witness[4]).
+Em geral, esses devem ser usados apenas em um contexto específico e, mesmo que possam substituir bloqueios em muitos casos, eles devem ser evitados porque não permitem diagnosticar problemas simples com ferramentas de depuração de bloqueio (como man:witness[4]).
[[freebsd-critical]]
===== Seções críticas
-O kernel do FreeBSD foi feito basicamente para lidar com threads de interrupção. De fato, para evitar latência de interrupção alta, os segmentos de prioridade de compartilhamento de tempo podem ser precedidos por threads de interrupção (dessa forma, eles não precisam aguardar para serem agendados como as visualizações de caminho normais). Preempção, no entanto, introduz novos pontos de corrida que precisam ser manipulados também. Muitas vezes, para lidar com a preempção, a coisa mais simples a fazer é desativá-la completamente. Uma seção crítica define um pedaço de código (delimitado pelo par de funções man:critical_enter[9] e man:critical_exit[9], onde é garantido que a preempção não aconteça (até que o código protegido seja totalmente executado) Isso pode substituir um bloqueio efetivamente, mas deve ser usado com cuidado para não perder toda a vantagem essa preempção traz.
+The FreeBSD kernel has been made preemptive basically to deal with interrupt threads. In fact, to avoid high interrupt latency, time-sharing priority threads can be preempted by interrupt threads (in this way, they do not need to wait to be scheduled as the normal path previews). Preemption, however, introduces new racing points that need to be handled, as well. Often, to deal with preemption, the simplest thing to do is to completely disable it. A critical section defines a piece of code (borderlined by the pair of functions man:critical_enter[9] and man:critical_exit[9], where preemption is guaranteed to not happen (until the protected code is fully executed). This can often replace a lock effectively but should be used carefully to not lose the whole advantage that preemption brings.
[[freebsd-schedpin]]
===== sched_pin/sched_unpin
-Outra maneira de lidar com a preempção é a interface `sched_pin()`. Se um trecho de código é fechado no par de funções `sched_pin()` e `sched_unpin()`, é garantido que a respectiva thread, mesmo que possa ser antecipada, sempre ser executada na mesma CPU. Fixar é muito eficaz no caso particular quando temos que acessar por dados do cpu e assumimos que outras threads não irão alterar esses dados. A última condição determinará uma seção crítica como uma condição muito forte para o nosso código.
+Outra forma de lidar com a preempção é a interface `sched_pin()`. Se um trecho de código é envolvido pelas funções `sched_pin()` e `sched_unpin()`, é garantido que a respectiva thread, mesmo que possa ser preemptada, será sempre executada na mesma CPU. Fixar (pinning) é muito efetivo no caso particular em que precisamos acessar dados específicos de cada CPU e assumimos que outras threads não alterarão esses dados. A última condição determinará uma seção crítica como uma condição muito rigorosa para nosso código.
[[freebsd-schedbind]]
===== sched_bind/sched_unbind
-`sched_bind` é uma API usada para vincular uma thread a uma CPU em particular durante todo o tempo em que ele executa o código, até que uma chamada de função `sched_unbind` não a desvincule. Esse recurso tem um papel importante em situações em que você não pode confiar no estado atual das CPUs (por exemplo, em estágios iniciais de inicialização), já que você deseja evitar que sua thread migre em CPUs inativas. Como `sched_bind` e `sched_unbind` manipulam as estruturas internas do agendador, elas precisam estar entre a aquisição/liberação de `sched_lock` quando usadas.
+`sched_bind` is an API used to bind a thread to a particular CPU for all the time it executes the code, until a `sched_unbind` function call does not unbind it. This feature has a key role in situations where you cannot trust the current state of CPUs (for example, at very early stages of boot), as you want to avoid your thread to migrate on inactive CPUs. Since `sched_bind` and `sched_unbind` manipulate internal scheduler structures, they need to be enclosed in `sched_lock` acquisition/releasing when used.
[[freebsd-proc]]
==== Estrutura Proc
-Várias camadas de emulação exigem alguns dados adicionais por processo. Ele pode gerenciar estruturas separadas (uma lista, uma árvore etc.) contendo esses dados para cada processo, mas isso tende a ser lento e consumir memória. Para resolver este problema, a estrutura `proc` do FreeBSD contém `p_emuldata`, que é um ponteiro vazio para alguns dados específicos da camada de emulação. Esta entrada `proc` é protegida pelo mutex proc.
+Em algumas camadas de emulação, às vezes é necessário ter dados adicionais específicos para cada processo. Pode-se gerenciar estruturas separadas (como uma lista, uma árvore etc.) que contenham esses dados para cada processo, mas isso pode ser lento e consumir muita memória. Para resolver esse problema, a estrutura `proc` do FreeBSD contém o campo `p_emuldata`, que é um ponteiro vazio para dados específicos da camada de emulação. Essa entrada `proc` é protegida pelo mutex do processo.
-A estrutura `proc` do FreeBSD contém uma entrada `p_sysent` que identifica, qual ABI este processo está executando. Na verdade, é um ponteiro para o `sysentvec` descrito acima. Portanto, comparando esse ponteiro com o endereço em que a estrutura `sysentvec` da ABI especificada está armazenada, podemos efetivamente determinar se o processo pertence à nossa camada de emulação. O código normalmente se parece com:
+A estrutura `proc` do FreeBSD contém uma entrada `p_sysent` que identifica qual ABI esse processo está executando. Na verdade, é um ponteiro para a estrutura `sysentvec` descrita anteriormente. Portanto, ao comparar esse ponteiro com o endereço onde a estrutura `sysentvec` para a ABI específica está armazenada, podemos determinar efetivamente se o processo pertence à nossa camada de emulação. O código geralmente se parece com:
[.programlisting]
....
-if (__predict_true(p->p_sysent != &elf_Linux_sysvec))
+if (__predict_true(p->p_sysent != &elf_Linux(R)_sysvec))
return;
....
-Como você pode ver, usamos efetivamente o modificador `__predict_true` para recolher o caso mais comum (processo do FreeBSD) para uma operação de retorno simples, preservando assim o alto desempenho. Este código deve ser transformado em uma macro porque atualmente não é muito flexível, ou seja, não suportamos emulação Linux(R)64 nem processa A.OUT Linux(R) em i386.
+Como você pode ver, usamos efetivamente o modificador `__predict_true` para colapsar o caso mais comum (processo FreeBSD) em uma simples operação de retorno, preservando assim o alto desempenho. Esse código deve ser transformado em uma macro porque atualmente não é muito flexível, ou seja, não suportamos emulação Linux(R)64 nem processos Linux(R) A.OUT em i386.
[[freebsd-vfs]]
==== VFS
-O subsistema FreeBSD VFS é muito complexo, mas a camada de emulação Linux(R) usa apenas um pequeno subconjunto através de uma API bem definida. Ele pode operar em vnodes ou manipuladores de arquivos. Vnode representa um vnode virtual, isto é, representação de um nó no VFS. Outra representação é um manipulador de arquivos, que representa um arquivo aberto da perspectiva de um processo. Um manipulador de arquivos pode representar um socket ou um arquivo comum. Um manipulador de arquivos contém um ponteiro para seu vnode. Mais de um manipulador de arquivos pode apontar para o mesmo vnode.
+O subsistema VFS do FreeBSD é muito complexo, mas a camada de emulação do Linux(R) utiliza apenas um pequeno subconjunto por meio de uma API bem definida. Ela pode operar em vnodes ou manipuladores de arquivo. Vnode representa um vnode virtual, ou seja, uma representação de um nó no VFS. Outra representação é um manipulador de arquivo, que representa um arquivo aberto do ponto de vista de um processo. Um manipulador de arquivo pode representar um socket ou um arquivo comum. Um manipulador de arquivo contém um ponteiro para seu vnode. Mais de um manipulador de arquivo pode apontar para o mesmo vnode.
[[freebsd-namei]]
===== namei
-A rotina man:namei[9] é um ponto de entrada central para a pesquisa e o nome do caminho. Ele percorre o caminho ponto a ponto do ponto inicial até o ponto final usando a função de pesquisa, que é interna ao VFS. A syscall man:namei[9]pode lidar com links simbólicos, absolutos e relativos. Quando um caminho é procurado usando man:namei[9] ele é inserido no cache de nomes. Esse comportamento pode ser suprimido. Essa rotina é usada em todo o kernel e seu desempenho é muito crítico.
+A rotina man:namei[9] é um ponto de entrada central para a pesquisa e tradução de caminhos de nomes. Ela percorre o caminho ponto a ponto, do ponto de partida ao ponto final, usando a função de pesquisa, que é interna ao VFS. A chamada man:namei[9] pode lidar com links simbólicos, caminhos absolutos e relativos. Quando um caminho é pesquisado usando man:namei[9], ele é inserido no cache de nomes. Esse comportamento pode ser suprimido. Essa rotina é usada em todo o kernel e seu desempenho é muito crítico.
[[freebsd-vn]]
===== vn_fullpath
-A função man:vn_fullpath[9] faz o melhor esforço para percorrer o cache de nomes do VFS e retorna um caminho para um determinado vnode (bloqueado). Esse processo não é confiável, mas funciona bem nos casos mais comuns. A falta de confiabilidade é porque ela depende do cache do VFS (ele não atravessa as estruturas intermediárias), não funciona com hardlinks, etc. Essa rotina é usada em vários locais no Linuxulator.
+A função man:vn_fullpath[9] faz o melhor esforço para percorrer o cache de nomes do VFS e retorna um caminho para um vnode específico (bloqueado). Esse processo é não confiável, mas funciona muito bem na maioria dos casos comuns. A falta de confiabilidade ocorre porque ela depende do cache do VFS (não percorre as estruturas no meio físico) e não funciona com links rígidos, entre outras limitações. Essa rotina é usada em vários lugares no Linuxulator.
[[freebsd-vnode]]
===== Operações de vnode
-* `fgetvp` - dado um encadeamento e um número de descritor de arquivo, ele retorna o vnode associado
+* `fgetvp` - dado um thread e um número de descritor de arquivo, ele retorna o vnode associado
* man:vn_lock[9] - bloqueia um vnode
* `vn_unlock` - desbloqueia um vnode
* man:VOP_READDIR[9] - lê um diretório referenciado por um vnode
* man:VOP_GETATTR[9] - obtém atributos de um arquivo ou diretório referenciado por um vnode
-* man:VOP_LOOKUP[9] - procura um caminho para um determinado diretório
+* man:VOP_LOOKUP[9] - busca um caminho para um diretório específico
* man:VOP_OPEN[9] - abre um arquivo referenciado por um vnode
* man:VOP_CLOSE[9] - fecha um arquivo referenciado por um vnode
-* man:vput[9] - decrementa a contagem de uso para um vnode e o desbloqueia
-* man:vrele[9] - diminui a contagem de uso para um vnode
-* man:vref[9] - incrementa a contagem de uso para um vnode
+* man:vput[9] - decrementa a contagem de uso de um vnode e desbloqueia
+* man:vrele[9] - diminui o contador de uso para um vnode
+* man:vref[9] - incrementa a contagem de uso de um vnode
[[freebsd-file-handler]]
===== Operações do manipulador de arquivos
-* `fget` - dado uma thread e um número de file descriptor, ele retorna o manipulador de arquivos associado e faz referência a ele
-* `fdrop` - elimina uma referência a um manipulador de arquivos
-* `fhold` - faz referência a um manipulador de arquivos
+* `fget` - dado um thread e um número de descritor de arquivo, ele retorna o file handler associado e o referencia
+* `fdrop` - remove uma referência a um file handler
+* `fhold` - referencia um file handler
[[md]]
-== Parte da camada de emulação -MD do Linux(R)
+== A camada de emulação do Linux(R) - parte MD
-Esta seção trata da implementação da camada de emulação do Linux(R) no sistema operacional FreeBSD. Ele primeiro descreve a parte dependente da máquina falando sobre como e onde a interação entre o usuário e o kernel é implementada. Ele fala sobre syscalls, signals, ptrace, traps, correção de pilha. Esta parte discute o i386, mas ele é escrito geralmente para que outras arquiteturas não sejam muito diferentes. A próxima parte é a parte independente da máquina do Linuxulator. Esta seção abrange apenas o tratamento de i386 e ELF. A.OUT está obsoleto e não foi testado.
+Esta seção trata da implementação da camada de emulação do Linux(R) no sistema operacional FreeBSD. Ela descreve primeiramente a parte dependente da máquina, abordando como e onde a interação entre o espaço do usuário e o kernel é implementada. Ela fala sobre syscalls, sinais, ptrace, traps e ajuste de pilha. Essa parte discute o i386, mas é escrita de forma geral, então outras arquiteturas não devem diferir muito. A próxima parte é a parte independente da máquina do Linuxulator. Esta seção aborda apenas o i386 e o tratamento de arquivos ELF. O formato A.OUT está obsoleto e não foi testado.
[[syscall-handling]]
=== Manipulação de Syscall
-A manipulação de Syscall é principalmente escrita em [.filename]#linux_sysvec.c#, que cobre a maioria das rotinas apontadas na estrutura `sysentvec`. Quando um processo Linux(R) executado no FreeBSD emite um syscall, a rotina syscall geral chama a rotina prepsyscall do linux para a ABI do Linux(R).
+O tratamento de syscalls é principalmente escrito em [.filename]#linux_sysvec.c#, que abrange a maioria das rotinas apontadas na estrutura `sysentvec`. Quando um processo do Linux(R) em execução no FreeBSD faz uma syscall, a rotina geral de syscall chama a rotina linux prepsyscall para a ABI do Linux(R).
[[linux-prepsyscall]]
==== Linux(R) prepsyscall
-Linux(R) passa argumentos via registradores de syscalls (isso porque ele é limitado a 6 parametros no i386) enquanto o FreeBSD usa uma pilha. A rotina prepsyscall do Linux(R) deve copiar parametros dos registradores para a pilha. A ordem dos registradores é: `%ebx`, `%ecx`, `%edx`, `%esi`, `%edi`, `%ebp`. O fato é que isso é verdadeiro apenas para _a maioria_ das syscalls. Algumas (mais provavelmente `clone`) usam uma ordem diferente, mas é demasiadamente facil de arrumar inserindo um parametro dummy no prototype `linux_clone`.
+No Linux(R), os argumentos das syscalls são passados via registradores (por isso é limitado a 6 parâmetros no i386), enquanto no FreeBSD eles são passados pela pilha. A rotina linux prepsyscall deve copiar os parâmetros dos registradores para a pilha. A ordem dos registradores é: `%ebx`, `%ecx`, `%edx`, `%esi`, `%edi`, `%ebp`. A questão é que isso é verdade apenas para _a maioria_ das syscalls. Algumas (mais notavelmente `clone`) usam uma ordem diferente, mas felizmente é fácil corrigir isso inserindo um parâmetro fictício no protótipo `linux_clone`.
[[syscall-writing]]
==== Escrevendo syscall
-Cada syscall implementada no Linuxulator deve ter seu protótipo com vários flags no [.filename]#syscalls.master#. A forma do arquivo é:
+Cada chamada de sistema implementada no Linuxulator deve ter seu protótipo com várias flags no arquivo `syscalls.master`. A estrutura do arquivo é a seguinte:
[.programlisting]
....
@@ -467,9 +471,9 @@ Cada syscall implementada no Linuxulator deve ter seu protótipo com vários fla
...
....
-A primeira coluna representa o número da syscall. A segunda coluna é para suporte de auditoria. A terceira coluna representa o tipo da syscall. É `STD`, `OBSOL`, `NOPROTO` e `UNIMPL`. `STD` é uma syscall padrão com protótipo e implementação completos. `OBSOL` é obsoleto e define apenas o protótipo. `NOPROTO` significa que a syscall é implementado em outro lugar, portanto, não precede o prefixo da ABI, etc. `UNIMPL` significa que a syscall será substituída pela syscall `nosys` (uma syscall apenas imprime uma mensagem sobre a syscall não sendo implementado e retornando `ENOSYS`).
+A primeira coluna representa o número da syscall. A segunda coluna é para suporte de auditoria. A terceira coluna representa o tipo de syscall. Pode ser `STD`, `OBSOL`, `NOPROTO` ou `UNIMPL`. `STD` é uma syscall padrão com protótipo e implementação completos. `OBSOL` é obsoleta e define apenas o protótipo. `NOPROTO` significa que a syscall é implementada em outro lugar, então não é necessário adicionar o prefixo ABI, etc. `UNIMPL` significa que a syscall será substituída pela syscall `nosys` (uma syscall que apenas imprime uma mensagem informando que a syscall não está implementada e retorna `ENOSYS`).
-De um script [.filename]#syscalls.master#, gera três arquivos: [.filename]#linux_syscall.h#, [.filename]#linux_proto.h# e [.filename]#linux_sysent.c#. O [.filename]#linux_syscall.h# contém definições de nomes de syscall e seus valores numéricos, por exemplo:
+Do [.filename]#syscalls.master#, um script gera três arquivos: [.filename]#linux_syscall.h#, [.filename]#linux_proto.h# e [.filename]#linux_sysent.c#. O arquivo [.filename]#linux_syscall.h# contém as definições dos nomes das syscalls e seus valores numéricos, por exemplo:
[.programlisting]
....
@@ -489,7 +493,7 @@ struct linux_fork_args {
};
....
-E finalmente, [.filename]#linux_sysent.c# contém uma estrutura descrevendo a tabela de entrada do sistema, usada para realmente enviar um syscall, por exemplo:
+E finalmente, o [.filename]#linux_sysent.c# contém uma estrutura descrevendo a tabela de entrada do sistema, usada para realmente enviar um syscall, por exemplo:
[.programlisting]
....
@@ -497,46 +501,46 @@ E finalmente, [.filename]#linux_sysent.c# contém uma estrutura descrevendo a ta
{ AS(close_args), (sy_call_t *)close, AUE_CLOSE, NULL, 0, 0 }, /* 6 = close */
....
-Como você pode ver, `linux_fork` é implementado no próprio Linuxulator, então a definição é do tipo `STD` e não possui argumento, que é exibido pela estrutura de argumento fictícia. Por outro lado, `close` é apenas um apelido para o verdadeiro man:close[2] do FreeBSD para que ele não possua estrutura de argumentos do linux associada e na tabela de entrada do sistema ele não é prefixado com linux, pois ele chama o verdadeiro man:close[2] no kernel.
+Como você pode ver, `linux_fork` é implementado no próprio Linuxulator, então a definição é do tipo `STD` e não tem argumentos, o que é exibido pela estrutura de argumentos fictícia. Por outro lado, `close` é apenas um alias para o verdadeiro man:close[2] do FreeBSD, então não possui uma estrutura de argumentos específica do Linux associada e na tabela de entrada do sistema não é prefixado com linux, pois chama o verdadeiro man:close[2] no kernel.
[[dummy-syscalls]]
==== Dummy syscalls
-A camada de emulação do Linux(R) não está completa, pois algumas syscalls não estão implementadas corretamente e algumas não estão implementadas. A camada de emulação emprega um recurso para marcar syscalls não implementadas com a macro `DUMMY`. Estas definições fictícias residem em [.filename]#linux_dummy.c# em uma forma de `DUMMY(syscall);`, que é então traduzido para vários arquivos auxiliares de syscall e a implementação consiste em imprimir uma mensagem dizendo que esta syscall não está implementada. O protótipo `UNIMPL` não é usado porque queremos ser capazes de identificar o nome da syscall que foi chamado para saber o que é mais importante implementar na syscalls.
+The Linux(R) emulation layer is not complete, as some syscalls are not implemented properly and some are not implemented at all. The emulation layer employs a facility to mark unimplemented syscalls with the `DUMMY` macro. These dummy definitions reside in [.filename]#linux_dummy.c# in a form of `DUMMY(syscall);`, which is then translated to various syscall auxiliary files and the implementation consists of printing a message saying that this syscall is not implemented. The `UNIMPL` prototype is not used because we want to be able to identify the name of the syscall that was called to know what syscalls are more important to implement.
[[signal-handling]]
=== Manuseio de signals
-A manipulação de sinais é feita geralmente no kernel do FreeBSD para todas as compatibilidades binárias com uma chamada para uma camada dependente de compatibilidade. A camada de compatibilidade do Linux(R) define a `rotina linux_sendsig` para essa finalidade.
+O tratamento de sinais é feito geralmente no kernel do FreeBSD para todas as compatibilidades binárias com uma chamada a uma camada dependente de compatibilidade. A camada de compatibilidade do Linux(R) define a rotina `linux_sendsig` para este propósito.
[[linux-sendsig]]
==== Linux(R) sendsig
-Esta rotina primeiro verifica se o signal foi instalado com um `SA_SIGINFO`, caso em que chama a rotina `linux_rt_sendsig`. Além disso, ele aloca (ou reutiliza um contexto de identificador de sinal já existente) e cria uma lista de argumentos para o manipulador de signal. Ele traduz o número do signal baseado na tabela de tradução do signal, atribui um manipulador, traduz o sigset. Em seguida, ele salva o contexto para a rotina `sigreturn` (vários registradores, número da trap traduzida e máscara de signal). Finalmente, copia o contexto do signal para o espaço do usuário e prepara o contexto para que o manipulador de sinal real seja executado.
+Essa rotina primeiro verifica se o sinal foi instalado com `SA_SIGINFO`, caso contrário, ela chama a rotina `linux_rt_sendsig`. Além disso, aloca (ou reutiliza um já existente) o contexto do manipulador de sinal, em seguida, constrói uma lista de argumentos para o manipulador de sinal. Traduz o número do sinal com base na tabela de tradução de sinais, atribui um manipulador e traduz o conjunto de sinais. Em seguida, salva o contexto para a rotina `sigreturn` (diversos registradores, número de interrupção traduzido e máscara de sinais). Por fim, copia o contexto do sinal para o espaço do usuário e prepara o contexto para a execução real do manipulador de sinal.
[[linux-rt-sendsig]]
==== linux_rt_sendsig
-Esta rotina é similar a `linux_sendsig` apenas a preparação do contexto do sinal é diferente. Adiciona `siginfo`, `ucontext` e algumas partes do POSIX(R). Pode valer a pena considerar se essas duas funções não poderiam ser mescladas com um benefício de menos duplicação de código e, possivelmente, até mesmo execução mais rápida.
+Esta rotina é semelhante à `linux_sendsig`, mas a preparação do contexto do sinal é diferente. Ela adiciona `siginfo`, `ucontext` e algumas partes POSIX(R). Pode valer a pena considerar se essas duas funções não poderiam ser mescladas com o benefício de menos duplicação de código e possivelmente até execução mais rápida.
[[linux-sigreturn]]
==== linux_sigreturn
-Esta syscall é usada para retornar do manipulador de sinal. Ela faz algumas verificações de segurança e restaura o contexto do processo original. Também desmascara o sinal na máscara de sinal do processo.
+Essa chamada de sistema é usada para retornar do manipulador de sinal. Ela realiza algumas verificações de segurança e restaura o contexto original do processo. Além disso, desativa o sinal na máscara de sinais do processo.
[[ptrace]]
=== Ptrace
-Muitos derivados do UNIX(R) implementam a syscall man:ptrace[2] para permitir vários recursos de rastreamento e depuração . Esse recurso permite que o processo de rastreamento obtenha várias informações sobre o processo rastreado, como registros de despejos, qualquer memória do espaço de endereço do processo, etc. e também para rastrear o processo, como em uma instrução ou entre entradas do sistema (syscalls e traps). man:ptrace[2] também permite definir várias informações no processo de rastreamento (registros, etc.). man:ptrace[2] é um padrão de toda o UNIX(R) implementado na maioria dos UNIX(R)es em todo o mundo.
+Many UNIX(R) derivates implement the man:ptrace[2] syscall to allow various tracking and debugging features. This facility enables the tracing process to obtain various information about the traced process, like register dumps, any memory from the process address space, etc. and also to trace the process like in stepping an instruction or between system entries (syscalls and traps). man:ptrace[2] also lets you set various information in the traced process (registers etc.). man:ptrace[2] is a UNIX(R)-wide standard implemented in most UNIX(R)es around the world.
-Emulação do Linux(R) no FreeBSD implementa a habilidade man:ptrace[2] em [.filename]#linux_ptrace.c#. As rotinas para converter registradores entre Linux(R) and FreeBSD e a atual emulação de syscall, syscall man:ptrace[2]. A syscall é um longo bloco de trocas que implementa em contraparte no FreeBSD para todo comando man:ptrace[2]. Os comandos man:ptrace[2] são em sua maioria igual entre Linux(R) e FreeBSD então uma pequena modificação é necessária. Por exemplo, `PT_GETREGS` em Linux(R) opera diretamente dos dados enquanto o FreeBSD usa um ponteiro para o dado e depois performa a syscall man:ptrace[2] (nativa), uma cópia deve ser feita pra preservar a semantica do Linux(R).
+A emulação do Linux(R) no FreeBSD implementa a facilidade man:ptrace[2] em [.filename]#linux_ptrace.c#. As rotinas de conversão de registradores entre Linux(R) e FreeBSD e a própria syscall de emulação man:ptrace[2]. A syscall é um longo bloco switch que implementa seu equivalente no FreeBSD para cada comando man:ptrace[2]. Os comandos man:ptrace[2] são principalmente iguais entre Linux(R) e FreeBSD, então geralmente apenas uma pequena modificação é necessária. Por exemplo, `PT_GETREGS` no Linux(R) opera em dados diretos, enquanto o FreeBSD usa um ponteiro para os dados, então após a execução de uma syscall man:ptrace[2] (nativa), é necessário fazer uma cópia dos dados usando copyout para preservar a semântica do Linux(R).
-A implementação de man:ptrace[2] no Linuxulator tem algumas fraquezas conhecidas. Houve pânico ao usar o `strace` (que é um consumidor man:ptrace[2]) no ambiente Linuxulator. `PT_SYSCALL` também não está implementado.
+A implementação man:ptrace[2] no Linuxulator tem algumas fraquezas conhecidas. Houve panes vistas ao usar `strace` (que é um consumidor man:ptrace[2]) no ambiente Linuxulator. Além disso, `PT_SYSCALL` não está implementado.
[[traps]]
=== Armadilhas (Traps)
-Sempre que um processo Linux(R) executado na camada de emulação captura a própria trap, ela é tratada de forma transparente com a única exceção da tradução de trap. Linux(R) e o FreeBSD difere de opinião sobre o que é uma trap, então isso é tratado aqui. O código é realmente muito curto:
+Sempre que um processo Linux(R) executando na camada de emulação sofre uma interrupção, a própria interrupção é tratada de forma transparente com a única exceção da tradução da interrupção. O Linux(R) e o FreeBSD diferem em suas opiniões sobre o que é uma interrupção, então isso é tratado aqui. O código é realmente muito curto:
[.programlisting]
....
@@ -564,45 +568,45 @@ translate_traps(int signal, int trap_code)
[[stack-fixup]]
=== Correção de pilha
-O editor de links em tempo de execução do RTLD espera as chamadas tags AUX na pilha durante uma `execve`, portanto, uma correção deve ser feita para garantir isso. Naturalmente, cada sistema RTLD é diferente, portanto, a camada de emulação deve fornecer sua própria rotina de correção de pilha para fazer isso. O mesmo acontece com o Linuxulator. O `elf_linux_fixup` simplesmente copia tags AUX para a pilha e ajusta a pilha do processo de espaço do usuário para apontar logo após essas tags. Então, a RTLD funciona de maneira inteligente.
+O link-editor em tempo de execução RTLD espera que as chamadas AUX estejam presentes na pilha durante um `execve`, então é necessário fazer um ajuste para garantir isso. Naturalmente, cada sistema RTLD é diferente, então a camada de emulação deve fornecer sua própria rotina de ajuste da pilha para realizar isso. Isso também se aplica ao Linuxulator. A função `elf_linux_fixup` simplesmente copia as chamadas AUX para a pilha e ajusta o ponteiro da pilha do processo de espaço de usuário para apontar imediatamente após essas chamadas. Dessa forma, o RTLD funciona de maneira inteligente.
[[aout-support]]
=== Suporte para A.OUT
-A camada de emulação Linux(R) em i386 também suporta os binários Linux(R) A.OUT. Praticamente tudo o que foi descrito nas seções anteriores deve ser implementado para o suporte A.OUT (além da tradução de traps e o envio de sinais). O suporte para binários A.OUT não é mais mantido, especialmente a emulação 2.6 não funciona com ele, mas isso não causa nenhum problema, já que os ports linux-base provavelmente não suportam binários A.OUT. Esse suporte provavelmente será removido no futuro. A maioria das coisas necessárias para carregar os binários Linux(R) A.OUT está no arquivo [.filename]#imgact_linux.c#.
+A camada de emulação do Linux(R) no i386 também suporta binários A.OUT do Linux(R). Praticamente tudo o que foi descrito nas seções anteriores deve ser implementado para oferecer suporte ao formato A.OUT (exceto a tradução de traps e o envio de sinais). O suporte para binários A.OUT não é mais mantido, especialmente a emulação 2.6 não funciona com esse formato. No entanto, isso não causa nenhum problema, já que o linux-base nos ports provavelmente não suporta binários A.OUT. Esse suporte provavelmente será removido no futuro. A maior parte do necessário para carregar binários A.OUT do Linux(R) está no arquivo [.filename]#imgact_linux.c#.
[[mi]]
-== Parte da camada de emulação -MI do Linux(R)
+== Camada de emulação do Linux(R) - Parte MI
-Esta seção fala sobre parte independente de máquina do Linuxulator. Ele cobre a infra-estrutura de emulação necessária para a emulação do Linux(R) 2.6, a implementação do TLS (thread local storage) (no i386) e os futexes. Então falamos brevemente sobre algumas syscalls.
+Esta seção aborda a parte independente de máquina do Linuxulator. Ela cobre a infraestrutura de emulação necessária para a emulação do Linux(R) 2.6, a implementação do armazenamento local de threads (TLS) (em i386) e futexes. Em seguida, falamos brevemente sobre algumas syscalls.
[[nptl-desc]]
=== Descrição do NPTL
-Uma das principais áreas de progresso no desenvolvimento do Linux(R) 2.6 foi o threading. Antes do 2.6, o suporte ao threading Linux(R) era implementado na biblioteca linuxthreads. A biblioteca foi uma implementação parcial do threading POSIX(R). A segmentação foi implementada usando processos separados para cada threading usando a syscall `clone` para permitir que eles compartilhem o espaço de endereço (e outras coisas). A principal fraqueza desta abordagem era que cada thread tinha um PID diferente, o tratamento de sinal era quebrado (da perspectiva pthreads), etc. O desempenho também não era muito bom (uso de sinais `SIGUSR` para sincronização de threads) , consumo de recursos do kernel, etc.) para superar esses problemas, um novo sistema de threading foi desenvolvido e denominado NPTL.
+Um dos principais avanços no desenvolvimento do Linux(R) 2.6 foi a implementação de threads. Antes do 2.6, o suporte a threading no Linux(R) era implementado na biblioteca linuxthreads. Essa biblioteca era uma implementação parcial da threading POSIX(R). A threading era implementada usando processos separados para cada thread, usando a syscall `clone` para permitir que compartilhassem o espaço de endereçamento (e outras coisas). As principais fraquezas dessa abordagem eram que cada thread tinha um PID diferente, o tratamento de sinais era problemático (do ponto de vista do pthreads), etc. Além disso, o desempenho não era muito bom (uso de sinais `SIGUSR` para sincronização de threads, consumo de recursos do kernel, etc.), então, para superar esses problemas, um novo sistema de threading foi desenvolvido e chamado de NPTL.
-A biblioteca NPTL focou em duas coisas, mas uma terceira coisa apareceu, então é normalmente considerada parte do NPTL. Essas duas coisas eram a incorporação de threads em uma estrutura de processo e futexes. A terceira coisa adicional foi o TLS, que não é diretamente exigido pelo NPTL, mas toda a biblioteca de usuário do NPTL depende dele. Essas melhorias resultaram em muito melhor desempenho e conformidade com os padrões. O NPTL é uma biblioteca de threading padrão nos sistemas Linux(R) atualmente.
+A biblioteca NPTL concentrou-se em duas coisas, mas uma terceira acabou sendo incluída e é geralmente considerada parte do NPTL. Essas duas coisas eram a incorporação de threads em uma estrutura de processo e futexes. A terceira coisa adicional foi TLS (Thread-Local Storage), que não é diretamente exigida pelo NPTL, mas toda a biblioteca NPTL do espaço do usuário depende dela. Essas melhorias resultaram em um desempenho muito melhorado e conformidade com padrões. O NPTL é uma biblioteca padrão de threading em sistemas Linux(R) nos dias de hoje.
-A implementação do FreeBSD Linuxulator se aproxima do NPTL em três áreas principais. O TLS, futexes e PID mangling, que serve para simular as threadings Linux(R). Outras seções descrevem cada uma dessas áreas.
+A implementação do Linuxulator no FreeBSD aborda o NPTL em três áreas principais. O TLS (Thread-Local Storage), os futexes e a manipulação de PID, que tem como objetivo simular as threads do Linux(R). Seções adicionais descrevem cada uma dessas áreas em detalhes.
[[linux26-emu]]
-=== Infra-estrutura de emulação do Linux(R) 2.6
+=== Infraestrutura de emulação do Linux(R) 2.6
-Estas seções tratam da maneira como as threadings Linux(R) são gerenciadas e como nós simulamos isso no FreeBSD.
+Essas seções lidam com a forma como as threads do Linux(R) são gerenciadas e como simulamos isso no FreeBSD.
[[linux26-runtime]]
==== Determinação de tempo de execução de emulação 2.6
-A camada de emulação do Linux(R) no FreeBSD suporta a configuração de tempo de execução da versão emulada. Isso é feito via man:sysctl[8], a saber `compat.linux.osrelease`. A configuração dessa man:sysctl[8] afeta o comportamento de tempo de execução da camada de emulação. Quando definido como 2.6.x, ele configura o valor de `linux_use_linux26` enquanto a configuração para algo mais o mantém não definido. Essa variável (mais variáveis por prisão do mesmo tipo) determina se a infraestrutura 2.6 (principalmente o PID) é usada no código ou não. A configuração da versão é feita em todo o sistema e isso afeta todos os processos Linux(R). A man:sysctl[8] não deve ser alterada ao executar qualquer binário do Linux(R), pois pode causar danos .
+A camada de emulação do Linux(R) no FreeBSD suporta a configuração em tempo de execução da versão emulada. Isso é feito por meio do man:sysctl[8], mais especificamente através do parâmetro `compat.linux.osrelease`. Configurar esse man:sysctl[8] afeta o comportamento em tempo de execução da camada de emulação. Ao definir para 2.6.x, ele define o valor de `linux_use_linux26`, enquanto definir para qualquer outro valor mantém esse valor como indefinido. Essa variável (juntamente com as variáveis específicas de cada prisão) determina se a infraestrutura 2.6 (principalmente o processo de manipulação de PID) é usada no código ou não. A configuração da versão é feita em todo o sistema e isso afeta todos os processos do Linux(R). O man:sysctl[8] não deve ser alterado ao executar qualquer binário do Linux(R), pois isso pode causar problemas.
[[linux-proc-thread]]
-==== Processos e identificadores de threading Linux(R)
+==== Processos e Identificadores de Thread no Linux(R)
-A semântica de threading Linux(R) é um pouco confusa e usa uma nomenclatura inteiramente diferente do FreeBSD. Um processo em Linux(R) consiste em uma `struct task` incorporando dois campos identificadores - PID e TGID. O PID _não é_ um ID de processo, mas é um ID de thread. O TGID identifica um grupo de threads em outras palavras, um processo. Para o processo single-threaded, o PID é igual ao TGID.
+A semântica de threading no Linux(R) é um pouco confusa e utiliza uma nomenclatura completamente diferente do FreeBSD. Em um processo no Linux(R), há uma estrutura chamada `struct task` que contém dois campos de identificação - PID e TGID. O PID _não_ é um identificador de processo, mas sim um identificador de thread. O TGID identifica um grupo de threads, ou seja, um processo. Para processos com apenas uma thread, o PID é igual ao TGID.
-A thread no NPTL é apenas um processo comum que acontece de ter TGID diferente de PID e ter um líder de grupo diferente de si mesmo (e VM compartilhada, é claro). Tudo o mais acontece da mesma maneira que em um processo comum. Não há separação de um status compartilhado para alguma estrutura externa como no FreeBSD. Isso cria alguma duplicação de informações e possível inconsistência de dados. O kernel Linux(R) parece usar a tarefa -> grupo de informações em alguns lugares e informações de tarefas em outros lugares e isso não é muito consistente e parece propenso a erros.
+No NPTL, uma thread é apenas um processo comum que tem o TGID diferente do PID e tem um líder de grupo diferente de si mesmo (além de compartilhar a memória virtual, é claro). Todo o resto acontece da mesma maneira que em um processo comum. Não há separação de um status compartilhado em uma estrutura externa, como no FreeBSD. Isso cria alguma duplicação de informações e possíveis inconsistências de dados. O kernel do Linux(R) parece usar informações de tarefa -> grupo em alguns lugares e informações de tarefa em outros lugares, e isso realmente não é muito consistente e parece propenso a erros.
-Cada threading NPTL é criada por uma chamada a syscall `clone` com um conjunto específico de flags (mais na próxima subseção). O NPTL implementa segmentação rígida de 1:1.
+Cada thread NPTL é criado por meio de uma chamada ao syscall `clone` com um conjunto específico de flags (mais detalhes na próxima subseção). O NPTL implementa uma estrita relação de threading 1:1.
No FreeBSD nós emulamos threads NPTL com processos comuns do FreeBSD que compartilham espaço de VM, etc. e a ginástica PID é apenas imitada na estrutura específica de emulação anexada ao processo. A estrutura anexada ao processo se parece com:
@@ -622,7 +626,7 @@ struct linux_emuldata {
};
....
-O PID é usado para identificar o processo do FreeBSD que liga esta estrutura. `child_se_tid` e `child_clear_tid` são usadas para cópia do endereço TID quando um processo existe e é criado. O ponteiro `shared` aponta para uma estrutura compartilhada entre as threads. A variável `pdeath_signal` identifica o sinal de morte do processo pai e o ponteiro `threads` é usado para vincular essa estrutura à lista de threads. A estrutura `linux_emuldata_shared` se parece com:
+O PID é usado para identificar o processo FreeBSD que se conecta a esta estrutura. Os campos `child_se_tid` e `child_clear_tid` são usados para copiar o endereço TID quando um processo termina ou é criado. O ponteiro `shared` aponta para uma estrutura compartilhada entre as threads. A variável `pdeath_signal` identifica o sinal de término do pai e o ponteiro `threads` é usado para vincular essa estrutura à lista de threads. A estrutura `linux_emuldata_shared` se parece com:
[.programlisting]
....
@@ -636,28 +640,28 @@ struct linux_emuldata_shared {
};
....
-O `refs` é um contador de referência sendo usado para determinar quando podemos liberar a estrutura para evitar vazamentos de memória. O `group_pid` é para identificar o PID (=TGID) de todo o processo (=grupo de threads). O ponteiro `threads` é o cabeçalho da lista de threading no processo.
+O campo `refs` é um contador de referências usado para determinar quando podemos liberar a estrutura para evitar vazamentos de memória. O campo `group_pid` é usado para identificar o PID ( = TGID) do processo completo ( = grupo de threads). O ponteiro `threads` é a cabeça da lista de threads no processo.
-A estrutura `linux_emuldata` pode ser obtida a partir do processo usando `em_find`. O protótipo da função é:
+A estrutura `linux_emuldata` pode ser obtida do processo usando `em_find`. O protótipo da função é:
[.programlisting]
....
-struct linux_emuldata * em_find (struct proc *, int bloqueado);
+struct linux_emuldata *em_find(struct proc *, int locked);
....
-Aqui, `proc` é o processo em que queremos a estrutura emuldata e o parâmetro locked determina se queremos ou não bloquear. Os valores aceitos são `EMUL_DOLOCK` e `EMUL_DOUNLOCK`. Mais sobre o bloqueio mais tarde.
+Aqui, `proc` é o processo do qual queremos obter a estrutura emuldata e o parâmetro `locked` determina se queremos realizar o bloqueio ou não. Os valores aceitos são `EMUL_DOLOCK` e `EMUL_DOUNLOCK`. Mais sobre bloqueio será explicado posteriormente.
[[pid-mangling]]
==== Maqueando PID
-Por causa da visão diferente descrita sabendo o que é um ID de processo e ID de thread entre o FreeBSD e o Linux(R) nós temos que traduzir a view de alguma forma. Nós fazemos isso pelo manuseio do PID. Isto significa que nós falsificamos o que um PID (=TGID) e um TID (=PID) é entre o kernel e o userland. A regra é que no kernel (no Linuxulator) PID=PID e TGID=grupo de id -> compartilhado e para userland nós apresentamos `PID=shared -> group_pid` e `TID=proc -> p_pid`. O membro PID da estrutura `linux_emuldata` é um PID do FreeBSD.
+Devido à diferença na interpretação do conceito de PID e TID entre o FreeBSD e o Linux(R), precisamos fazer uma tradução para conciliar essas visões. Fazemos isso através da manipulação de PIDs. Isso significa que simulamos o que seria um PID (=TGID) e TID (=PID) entre o kernel e o espaço do usuário. A regra geral é que, no kernel (no Linuxulator), PID = PID e TGID = shared->group_pid, e no espaço do usuário apresentamos `PID = shared->group_pid` e `TID = proc->p_pid`. O membro PID da estrutura `linux_emuldata` é um PID do FreeBSD.
-O acima afeta principalmente syscalls getyscl, getppid, gettid. Onde usamos PID/TGID, respectivamente. Em cópia de TIDs em `child_clear_tid` e `child_set_tid` copiamos o PID FreeBSD.
+A situação acima afeta principalmente as chamadas de sistema getpid, getppid e gettid. Nelas, utilizamos o PID/TGID respectivamente. Na cópia de TIDs em `child_clear_tid` e `child_set_tid`, copiamos o PID do FreeBSD.
[[clone-syscall]]
==== syscall Clone
-A syscall `clone` é o modo como as threads são criadas no Linux(R). O protótipo syscall é assim:
+A chamada de sistema `clone` é a forma como as threads são criadas no Linux(R). O protótipo da syscall é assim:
[.programlisting]
....
@@ -665,16 +669,16 @@ int linux_clone(l_int flags, void *stack, void *parent_tidptr, int dummy,
void * child_tidptr);
....
-O parâmetro `flags` informa a syscall como exatamente os processos devem ser clonados. Como descrito acima, o Linux(R) pode criar processos compartilhando várias coisas independentemente, por exemplo, dois processos podem compartilhar file descriptors, mas não VM, etc. Ultimo byte do parametro `flags` é o sinal de saída do processo recém-criado. O parâmetro `stack` se não `NULL` diz, onde está a pilha de threading e se é `NULL` nós devemos copiar-na-escrita chamando a pilha de processos (isto é, faz a rotina normal de man:fork[2]). O parâmetro `parent_tidptr` é usado como um endereço para copiar o PID do processo (ou seja, o id do thread), uma vez que o processo esteja suficientemente instanciado, mas ainda não seja executável. O parâmetro `dummy` está aqui devido à convenção de chamada muito estranha desta syscall em i386. Ele usa os registradores diretamente e não deixa o compilador fazer o que resulta na necessidade de uma syscall falsa. O parâmetro `child_tidptr` é usado como um endereço para copiar o PID assim que o processo terminar de bifurcar e quando o processo terminar.
+O parâmetro `flags` informa à syscall como exatamente os processos devem ser clonados. Como descrito anteriormente, o Linux(R) pode criar processos que compartilham várias coisas de forma independente, por exemplo, dois processos podem compartilhar descritores de arquivo, mas não a VM, etc. O último byte do parâmetro `flags` é o sinal de saída do novo processo criado. O parâmetro `stack`, se não for `NULL`, indica onde está a pilha da thread, e se for `NULL`, devemos fazer uma cópia em escrita-compartilhada da pilha do processo chamador (ou seja, fazer o que a rotina normal do man:fork[2] faz). O parâmetro `parent_tidptr` é usado como endereço para copiar o PID do processo (ou seja, ID da thread) assim que o processo estiver suficientemente instanciado, mas ainda não estiver em execução. O parâmetro `dummy` está aqui por causa da convenção de chamada muito estranha dessa syscall no i386. Ela usa os registradores diretamente e não permite que o compilador o faça, o que resulta na necessidade de um syscall dummy. O parâmetro `child_tidptr` é usado como endereço para copiar o PID assim que o processo terminar de criar um novo processo e quando o processo terminar.
-O syscall prossegue definindo flags correspondentes dependendo dos flags passadas. Por exemplo, mapas `CLONE_VM` para RFMEM (compartilhamento de VM), etc. O único nit aqui é `CLONE_FS` e `CLONE_FILES` porque o FreeBSD não permite configurar isso separadamente, então nós o falsificamos não configurando RFFDG (copiando a tabela fd e outras informações fs) se qualquer uma delas estiver definida. Isso não causa nenhum problema, porque essas flags são sempre definidas juntas. Depois de definir as flags, o processo é bifurcado usando a rotina `fork1` interna, o processo é instrumentado para não ser colocado em uma fila de execução, ou seja, não deve ser definido como executável. Depois que a bifurcação é feita, possivelmente reparamos o processo recém-criado para emular a semântica `CLONE_PARENT`. A próxima parte está criando os dados de emulação. Threads no Linux(R) não sinalizam seus processos pais, então nós definimos o sinal de saída como 0 para desabilitar isso. Depois que a configuração de `child_set_tid` e `child_clear_tid` é executada, habilitando a funcionalidade posteriormente no código. Neste ponto, copiamos o PID para o endereço especificado por `parent_tidptr`. A configuração da pilha de processos é feita simplesmente reescrevendo o registro do quadro de linha `% esp` (`% rsp` no amd64). A próxima parte é configurar o TLS para o processo recém-criado. Depois disso, a semântica man:vfork[2] pode ser emulada e, finalmente, o processo recém-criado é colocado em uma fila de execução e copiando seu PID para o processo pai através do valor de retorno `clone` é feito.
+A syscall em si prossegue configurando as flags correspondentes com base nas flags passadas. Por exemplo, `CLONE_VM` mapeia para RFMEM (compartilhamento de VM), etc. O único detalhe aqui é `CLONE_FS` e `CLONE_FILES`, porque o FreeBSD não permite configurar isso separadamente, então simulamos não configurando RFFDG (cópia da tabela de descritores de arquivo e outras informações do sistema de arquivos) se algum desses estiver definido. Isso não causa problemas, porque essas flags são sempre configuradas juntas. Após configurar as flags, o processo é bifurcado usando a rotina interna `fork1`, e instruímos o processo a não ser colocado em uma fila de execução, ou seja, não ser definido como executável. Depois que a bifurcação é concluída, possivelmente reparentamos o processo recém-criado para emular a semântica `CLONE_PARENT`. A próxima parte é a criação dos dados de emulação. As threads no Linux(R) não sinalizam seus pais, então definimos o sinal de saída como 0 para desativar isso. Em seguida, é feita a configuração de `child_set_tid` e `child_clear_tid`, habilitando a funcionalidade posteriormente no código. Nesse ponto, copiamos o PID para o endereço especificado por `parent_tidptr`. A configuração da pilha do processo é feita simplesmente reescrevendo o registro `%esp` do quadro da thread (`%rsp` no amd64). A próxima parte é configurar o TLS para o processo recém-criado. Após isso, as semânticas de man:vfork[2] podem ser emuladas e, finalmente, o processo recém-criado é colocado em uma fila de execução e a cópia de seu PID para o processo pai é feita por meio do valor de retorno do `clone`.
-A syscall `clone` é capaz e de fato é usado para emulação de syscalls man:fork[] e man:vfork[2]. O glibc mais novo em um caso de kernel 2.6 usa o `clone` para implementar syscalls man:fork[2] e man:vfork[2].
+O syscall `clone` é capaz e, de fato, é usado para emular as chamadas de sistema clássicas man:fork[2] e man:vfork[2]. O glibc mais recente, no caso do kernel 2.6, usa `clone` para implementar as chamadas de sistema man:fork[2] e man:vfork[2].
[[locking]]
==== Bloqueio
-O bloqueio é implementado como per-subsystem porque não esperamos muita disputa sobre eles. Existem dois bloqueios: `emul_lock` usado para proteger a manipulação de `linux_emuldata` e `emul_shared_lock` usado para manipular `linux_emuldata_shared`. O `emul_lock` é um mutex bloqueador não tolerável, enquanto `emul_shared_lock` é um bloqueio travável `sx_lock`. Devido ao bloqueio por subsistema, podemos unir alguns bloqueios e é por isso que o em-find oferece o acesso sem bloqueio.
+O sistema de bloqueio é implementado por subsistema, pois não esperamos muita contenção nesses pontos. Existem dois bloqueios: `emul_lock`, usado para proteger a manipulação de `linux_emuldata`, e `emul_shared_lock`, usado para manipular `linux_emuldata_shared`. O `emul_lock` é uma mutex de bloqueio não adormecível, enquanto o `emul_shared_lock` é um bloqueio `sx_lock` de bloqueio adormecível. Devido ao bloqueio por subsistema, podemos combinar alguns bloqueios e é por isso que a função `em_find` oferece acesso sem bloqueio.
[[tls]]
=== TLS
@@ -684,24 +688,24 @@ Esta seção trata do TLS também conhecido como armazenamento local de thread.
[[trheading-intro]]
==== Introdução ao threading
-Threads na ciência da computação são entidades com um processo que podem ser agendados independentemente de qualquer outro. As threads nos processos compartilham amplos dados de processos (file descriptors, etc.) mas também tem sua prŕopria pilha para seus próprios dados. Algumas vezes é preciso para um processamento amplo de dados dado uma thread. Imagine um nome de uma thread algo assim. A tradicional API de threading do UNIX(R), pthreads prove um caminho para isso em man:pthread_key_create[3], man:pthread_setspecific[3] and man:pthread_getspecific[3] onde a thread pode criar uma chave para os dados da thread local man:pthread_getspecific[3] ou man:pthread_getspecific[3] para manipular esses dados. Você pode ver que esse não é o caminho mais confortavel que poderia ser usado. Então varios produtores de compiladores C/C++ introduziram um caminho melhor. Eles definiram uma nova chave modificadora de thread que especifica que a variavel é especifica de uma thread. Um novo método de acessar as variaveis foi desenvolvio como (ao menos no i386). O método pthreads tende a ser implementado no espaço de usuário como uma tabela de lookup trivial. A performance como uma solução não é muito boa. Então o novo método (no i386) registradores de segmentos para endereçar um segmento, onde a área do TLS é armazenada, então o atual acesso da variável de uma thread é apenas adicionada ao registrador de segmentos para o endereçamento via it. Os registradores de segmentos são usualmente `%gs` e `%fs` agindo como seletores de segmento. Toda thread tem sua própria área onde os dados da thread local são armazenados e o segmento deve ser carregado em toda troca de contexto. Esse método é muito rapido e usado em todo mundo em volta do UNIX(R) i386. Ambos FreeBSD e Linux(R) Implementam sua abordagem e seus resultados tem sido muito bons. Unico ponto negativo é ter que recarregar o segmento em toda troca de contexto que pode deixar o processo lento. FreeBSD tenta evitar essa sobrecarga usando apenas 1 descritor de segmento enquanto Linux(R) usa 3. Interessante que isso quase nunca usa mais que 1 descritor (apenas o Wine parece usar 2) então o Linux(R) paga esse preço desnecessário na troca de contexto.
+As threads na ciência da computação são entidades dentro de um processo que podem ser agendadas independentemente umas das outras. As threads no processo compartilham dados em todo o processo (descritores de arquivos, etc.), mas também possuem sua própria pilha para seus próprios dados. Às vezes, há necessidade de dados específicos de um thread em todo o processo, como o nome do thread em execução, por exemplo. A API de threads tradicional do UNIX(R), pthreads, oferece uma maneira de fazer isso usando as funções `pthread_key_create`, `pthread_setspecific` e `pthread_getspecific`, onde um thread pode criar uma chave para os dados específicos do thread local e manipular esses dados usando as funções `pthread_setspecific` e `pthread_getspecific`. É fácil perceber que essa não é a maneira mais conveniente de fazer isso. Portanto, vários fabricantes de compiladores C/C++ introduziram uma maneira melhor. Eles definiram uma nova palavra-chave de modificação, `thread`, que especifica que uma variável é específica de um thread. Também foi desenvolvido um novo método de acesso a essas variáveis, pelo menos na arquitetura i386. O método tradicional do pthreads tende a ser implementado no espaço do usuário como uma tabela de pesquisa trivial. O desempenho de tal solução não é muito bom. Portanto, o novo método usa (no i386) registradores de segmento para endereçar um segmento, onde a área TLS é armazenada, de modo que o acesso real a uma variável do thread é apenas a concatenação do registrador de segmento ao endereço, permitindo o acesso direto através do registrador de segmento. Os registradores de segmento geralmente são `%gs` e `%fs`, agindo como seletores de segmento. Cada thread tem sua própria área onde os dados locais do thread são armazenados, e o registrador de segmento precisa ser carregado em cada troca de contexto. Esse método é muito rápido e amplamente usado em todo o mundo UNIX(R) na arquitetura i386. Tanto o FreeBSD quanto o Linux(R) implementam essa abordagem e obtêm resultados muito bons. A única desvantagem é a necessidade de recarregar o segmento em cada troca de contexto, o que pode retardar as trocas de contexto. O FreeBSD tenta evitar essa sobrecarga usando apenas um descritor de segmento para isso, enquanto o Linux(R) usa 3. É interessante observar que quase nada usa mais de 1 descritor (apenas o Wine parece usar 2), então o Linux(R) paga um preço desnecessário pelas trocas de contexto.
[[i386-segs]]
==== Segmentos em i386
-A arquitetura i386 implementa os então chamados segmentos.Um segmento é uma descrição de um espaço na memória. A base de endereço (baixa) na area da memória, o fim disso (teto), tipo, proteção, etc. A memória descrita por um segmento pode ser acessada usando um seletor de segmento (`%cs`, `%ds`, `%ss`, `%es`, `%fs`, `%gs`). Por exemplo, deixe nos supor que temos um segmento com base no endereço 0x1234 e comprimento e esse codigo:
+A arquitetura i386 implementa os chamados segmentos. Um segmento é uma descrição de uma área de memória. Ele contém informações como o endereço base (início) da área de memória, o final (teto), tipo, proteção, etc. A memória descrita por um segmento pode ser acessada usando registradores de seleção de segmento (`%cs`, `%ds`, `%ss`, `%es`, `%fs`, `%gs`). Por exemplo, vamos supor que temos um segmento cujo endereço base é 0x1234 e comprimento e o seguinte código:
[.programlisting]
....
mov %edx,%gs:0x10
....
-Isso carregará o conteúdo do registro `% edx` na localização da memória 0x1244. Alguns registradores de segmento têm um uso especial, por exemplo `% cs` é usado para segmento de código e `% ss` é usado para o segmento de pilha, mas `% fs` e `% gs` geralmente não são usados. Os segmentos são armazenados em uma tabela GDT global ou em uma tabela LDT local. O LDT é acessado por meio de uma entrada no GDT. O LDT pode armazenar mais tipos de segmentos. LDT pode ser por processo. Ambas as tabelas definem até 8191 entradas.
+Isso irá carregar o conteúdo do registro `%edx` no endereço de memória 0x1244. Alguns registradores de segmento têm um uso especial, por exemplo, `%cs` é usado para o segmento de código e `%ss` é usado para o segmento de pilha, mas `%fs` e `%gs` geralmente não são usados. Os segmentos são armazenados em uma tabela global GDT ou em uma tabela local LDT. A LDT é acessada por meio de uma entrada na GDT. A LDT pode armazenar mais tipos de segmentos. A LDT pode ser por processo. Ambas as tabelas definem até 8191 entradas.
[[linux-i386]]
==== Implementação no Linux(R) i386
-Existem duas maneiras principais de configurar o TLS no Linux(R). Pode ser definido ao clonar um processo usando a syscall `clone` ou ele pode chamar `set_thread_area`. Quando um processo passa a flag `CLONE_SETTLS` para `clone`, o kernel espera que a memória apontada pelo registrador `% esi` uma representação Linux(R) do espaço do usuário de um segmento, que é traduzido para a representação da máquina de um segmento e carregado em um slot GDT. O slot GDT pode ser especificado com um número ou -1 pode ser usado, o que significa que o próprio sistema deve escolher o primeiro slot livre. Na prática, a grande maioria dos programas usa apenas uma entrada de TLS e não se importa com o número da entrada. Nós exploramos isso na emulação e dependemos disso.
+Existem duas principais maneiras de configurar o TLS no Linux(R). Pode ser definido ao clonar um processo usando a chamada de sistema `clone` ou pode chamar `set_thread_area`. Quando um processo passa a flag `CLONE_SETTLS` para `clone`, o kernel espera que a memória apontada pelo registro `%esi` seja uma representação do espaço do usuário Linux(R) de um segmento, que é traduzido para a representação do segmento da máquina e carregado em um slot GDT. O slot GDT pode ser especificado com um número ou -1 pode ser usado, o que significa que o sistema deve escolher automaticamente o primeiro slot livre. Na prática, a grande maioria dos programas usa apenas uma entrada TLS e não se preocupa com o número da entrada. Exploramos isso na emulação e, na verdade, dependemos disso.
[[tls-emu]]
==== Emulação de TLS do Linux(R)
@@ -709,12 +713,12 @@ Existem duas maneiras principais de configurar o TLS no Linux(R). Pode ser defin
[[tls-i386]]
===== i386
-O carregamento de TLS para o segmento atual acontece chamando `set_thread_area` enquanto o TLS é carregado para um segundo processo em `clone` é feito no bloco separado em `clone`. Essas duas funções são muito semelhantes. A única diferença é o carregamento real do segmento GDT, que acontece na próxima troca de contexto para o processo recém-criado, enquanto `set_thread_area` deve carregar isso diretamente. O código basicamente faz isso. Ele copia o descritor de segmento de formulário Linux(R) da área de usuário. O código verifica o número do descritor, mas como isso difere entre o FreeBSD e o Linux(R), maquiamos um pouco. Nós suportamos apenas índices de 6, 3 e -1. O número 6 é genuíno do Linux(R), 3 é genuíno do FreeBSD one e -1 significa uma auto seleção. Em seguida, definimos o número do descritor como constante 3 e copiamos isso para o espaço do usuário. Contamos com o processo em espaço de usuário usando o número do descritor, mas isso funciona na maior parte do tempo (nunca vi um caso em que isso não funcionou), como o processo em espaço de usuário normalmente passa em 1. Então, convertemos o descritor da classe do Linux(R) para um formulário dependente da máquina (isto é, independente do sistema operacional) e copie isto para o descritor de segmento definido pelo FreeBSD. Finalmente podemos carregá-lo. Atribuímos o descritor às threads PCB (bloco de controle de processo) e carregamos o segmento `% gs` usando `load_gs`. Este carregamento deve ser feito em uma seção crítica para que nada possa nos interromper. O caso `CLONE_SETTLS` funciona exatamente como este, apenas o carregamento usando `load_gs` não é executado. O segmento usado para isso (segmento número 3) é compartilhado para este uso entre os processos do FreeBSD e do Linux(R) para que a camada de emulação Linux(R) não adicione nenhuma sobrecarga sobre o FreeBSD.
+O carregamento do TLS para a thread atual é feito chamando `set_thread_area`, enquanto o carregamento do TLS para um segundo processo no `clone` é feito em um bloco separado no `clone`. Essas duas funções são muito semelhantes. A única diferença é o carregamento real do segmento GDT, que ocorre na próxima troca de contexto para o processo recém-criado, enquanto o `set_thread_area` deve carregar isso diretamente. O código basicamente faz isso. Ele copia o descritor do segmento no formato Linux(R) do espaço do usuário. O código verifica o número do descritor, mas como isso difere entre FreeBSD e Linux(R), nós fazemos uma pequena manipulação. Nós suportamos apenas os índices 6, 3 e -1. O 6 é um número genuíno do Linux(R), o 3 é um número genuíno do FreeBSD e -1 significa seleção automática. Em seguida, definimos o número do descritor como o valor constante 3 e copiamos isso de volta para o espaço do usuário. Nós confiamos no processo do espaço do usuário usando o número do descritor, e isso funciona na maioria das vezes (nunca vi um caso em que isso não funcionasse), pois o processo do espaço do usuário normalmente passa o número 1. Em seguida, convertemos o descritor do formato Linux(R) para um formato dependente da máquina (ou seja, independente do sistema operacional) e copiamos isso para o descritor de segmento definido no FreeBSD. Finalmente, podemos carregá-lo. Atribuímos o descritor ao PCB (process control block) das threads e carregamos o segmento `%gs` usando `load_gs`. Esse carregamento deve ser feito em uma seção crítica para que nada possa nos interromper. O caso `CLONE_SETTLS` funciona exatamente da mesma maneira, apenas o carregamento usando `load_gs` não é realizado. O segmento usado para isso (número do segmento 3) é compartilhado entre processos FreeBSD e processos Linux(R), portanto, a camada de emulação do Linux(R) não adiciona nenhum overhead além do FreeBSD puro.
[[tls-amd64]]
===== amd64
-A implementação do amd64 é semelhante à do i386, mas inicialmente não havia um descritor de segmento de 32 bits usado para esse propósito (por isso nem usuários nativos de TLB de 32 bits trabalhavam), então tivemos que adicionar esse segmento e implementar seu carregamento em cada troca de contexto (quando a flag sinalizando uso de 32 bits está definida). Além disso, o carregamento de TLS é exatamente o mesmo, apenas os números de segmento são diferentes e o formato do descritor e o carregamento diferem ligeiramente.
+A implementação do amd64 é semelhante à do i386, mas inicialmente não havia um descritor de segmento de 32 bits usado para esse propósito (portanto, nem mesmo os usuários nativos de TLS de 32 bits funcionavam), então tivemos que adicionar esse segmento e implementar seu carregamento em cada troca de contexto (quando uma flag sinalizando o uso de 32 bits é definida). Além disso, o carregamento de TLS é exatamente o mesmo, apenas os números de segmento são diferentes e o formato do descritor e o carregamento diferem um pouco.
[[futexes]]
=== Futexes
@@ -722,14 +726,14 @@ A implementação do amd64 é semelhante à do i386, mas inicialmente não havia
[[sync-intro]]
==== Introdução à sincronização
-Threads precisam de algum tipo de sincronização e POSIX(R) fornece alguns deles: mutexes para exclusão mútua, bloqueios de leitura/gravação para exclusão mútua com relação de polarização de leituras e gravações e variáveis de condição para sinalizar um mudança de status. É interessante observar que a API de thread POSIX(R) não tem suporte para semáforos. Essas implementações de rotinas de sincronização são altamente dependentes do tipo de suporte a threading que temos. No modelo puro 1:M (espaço de usuário), a implementação pode ser feita apenas no espaço do usuário e, portanto, ser muito rápida (as variáveis de condição provavelmente serão implementadas usando sinais, ou seja, não rápido) e simples. No modelo 1:1, a situação também é bastante clara - as threading devem ser sincronizadas usando as facilidades do kernel (o que é muito lento porque uma syscall deve ser executada). O cenário M:N misto combina apenas a primeira e a segunda abordagem ou depende apenas do kernel. A sincronização de threads é uma parte vital da programação ativada por threads e seu desempenho pode afetar muito o programa resultante. Benchmarks recentes no sistema operacional FreeBSD mostraram que uma implementação sx_lock melhorada gerou 40% de aceleração no _ZFS_ (um usuário sx pesado), isso é algo in-kernel, mas mostra claramente quão importante é o desempenho das primitivas de sincronização. .
+As threads necessitam de algum tipo de sincronização, o POSIX(R) fornece alguns mecanismos de sincronização, como mutexes para exclusão mútua, read-write locks para exclusão mútua com uma proporção enviesada de leituras e escritas, e variáveis de condição para sinalizar mudanças de status. É interessante notar que a API de threads POSIX(R) não oferece suporte para semáforos. A implementação dessas rotinas de sincronização depende fortemente do tipo de suporte a threading disponível. Em um modelo puro 1:M (userspace), a implementação pode ser feita exclusivamente no espaço de usuário, resultando em uma abordagem rápida e simples (embora as variáveis de condição possam ser implementadas usando sinais, o que pode ser mais lento). Em um modelo 1:1, as threads devem ser sincronizadas usando recursos do kernel, o que pode ser mais lento devido à necessidade de chamadas de sistema. O cenário misto M:N combina as abordagens anteriormente mencionadas ou depende exclusivamente do kernel. A sincronização de threads é uma parte vital da programação com threads, e seu desempenho pode afetar significativamente o programa resultante. Testes recentes no sistema operacional FreeBSD demonstraram um aumento de desempenho de 40% na implementação aprimorada do sx_lock no _ZFS_ (que faz uso intensivo de primitivas de sincronização). Embora esse exemplo se refira a operações no kernel, ele destaca a importância de primitivas de sincronização eficientes para o desempenho geral.
-Os programas em threading devem ser escritos com o mínimo de contenção possível em bloqueios. Caso contrário, em vez de fazer um trabalho útil, a threading apenas espera em um bloqueio. Devido a isso, os programas encadeados mais bem escritos mostram pouca contenção de bloqueios.
+Programas com threads devem ser escritos com o mínimo possível de contenção em locks. Caso contrário, em vez de realizar um trabalho útil, a thread apenas espera em um lock. Como resultado disso, os programas com threads bem escritos mostram pouca contenção em locks.
[[futex-intro]]
==== Introdução a Futexes
-O Linux(R) implementa a segmentação 1:1, ou seja, tem de utilizar primitivas de sincronização no kernel. Como afirmado anteriormente, programas encadeados bem escritos possuem pouca contenção de bloqueio. Assim, uma sequência típica poderia ser executada como dois contador de referência de mutex de aumento/redução atômico, que é muito rápido, conforme apresentado pelo exemplo a seguir:
+O Linux(R) implementa threading 1:1, ou seja, ele utiliza primitivas de sincronização no kernel. Como mencionado anteriormente, programas com threads bem escritos têm pouca contenção em locks. Assim, uma sequência típica pode ser realizada com o aumento/diminuição atômica do contador de referência do mutex, o que é muito rápido, conforme apresentado no seguinte exemplo:
[.programlisting]
....
@@ -740,7 +744,7 @@ pthread_mutex_unlock(&mutex);
O threading 1:1 nos força a executar dois syscalls para as chamadas mutex, o que é muito lento.
-A solução que o Linux(R) 2.6 implementa é chamada de futexes. Futexes implementam a verificação de contenção no espaço do usuário e chama primitivas do kernel apenas em um caso de contenção. Assim, o caso típico ocorre sem qualquer intervenção do kernel. Isso produz uma implementação de primitivas de sincronização razoavelmente rápida e flexível.
+A solução implementada pelo Linux(R) 2.6 é chamada de "futexes". Os futexes implementam a verificação de contenção no espaço do usuário e chamam as primitivas do kernel apenas em caso de contenção. Dessa forma, o caso típico ocorre sem qualquer intervenção do kernel. Isso resulta em uma implementação de primitivas de sincronização razoavelmente rápida e flexível.
[[futex-api]]
==== API do Futex
@@ -752,7 +756,7 @@ A syscall do futex é assim:
int futex(void *uaddr, int op, int val, struct timespec *timeout, void *uaddr2, int val3);
....
-Neste exemplo `uaddr` é um endereço do mutex no espaço do usuário, `op` é uma operação que estamos prestes a executar e os outros parâmetros têm significado por operação.
+Neste exemplo, `uaddr` é o endereço do mutex no espaço do usuário, `op` é a operação que estamos prestes a realizar e os outros parâmetros têm significado específico para cada operação.
Futexes implementam as seguintes operações:
@@ -766,12 +770,12 @@ Futexes implementam as seguintes operações:
[[futex-wait]]
===== FUTEX_WAIT
-Esta operação verifica que no endereço `uaddr` o valor `val` é gravado. Se não, `EWOULDBLOCK` é retornado, caso contrário, a thread é enfileirada no futex e é suspensa. Se o argumento `timeout` for diferente de zero, ele especificará o tempo máximo para a suspensão, caso contrário, a suspensão será infinita.
+Essa operação verifica se o valor `val` está escrito no endereço `uaddr`. Se não estiver, retorna `EWOULDBLOCK`. Caso contrário, a thread é colocada na fila do futex e é suspensa. Se o argumento `timeout` for diferente de zero, ele especifica o tempo máximo de suspensão. Caso contrário, a suspensão é infinita.
[[futex-wake]]
===== FUTEX_WAKE
-Esta operação tem um futex em `uaddr` e acorda os primeiros futexes `val` enfileirados neste futex.
+Essa operação pega um futex em `uaddr` e acorda os primeiros `val` futexes na fila desse futex.
[[futex-fd]]
===== FUTEX_FD
@@ -781,19 +785,19 @@ Esta operação associa um descritor de arquivo com um determinado futex.
[[futex-requeue]]
===== FUTEX_REQUEUE
-Esta operação pega threads `val` enfileirados no futex em `uaddr`, acorda-os e pega as próximas threads `val2` e enfileira-os no futex em `uaddr2`.
+Essa operação pega `val` threads na fila do futex em `uaddr`, acorda-as e pega `val2` threads seguintes e as coloca novamente na fila do futex em `uaddr2`.
[[futex-cmp-requeue]]
===== FUTEX_CMP_REQUEUE
-Essa operação faz o mesmo que `FUTEX_REQUEUE`, mas verifica se `val3` é igual a `val` primeiro.
+Essa operação faz o mesmo que `FUTEX_REQUEUE`, mas verifica primeiro se `val3` é igual a `val`.
[[futex-wake-op]]
===== FUTEX_WAKE_OP
-Esta operação executa uma operação atômica em `val3` (que contém algum outro valor codificado) e `uaddr`. Então, ele acorda threads `val` em futex em `uaddr` e se a operação atômica retornar um número positivo, ele ativa os threadings `val2` em futex em `uaddr2`.
+Essa operação realiza uma operação atômica em `val3` (que contém codificado algum outro valor) e `uaddr`. Em seguida, acorda `val` threads no futex em `uaddr` e, se a operação atômica retornar um número positivo, acorda `val2` threads no futex em `uaddr2`.
-As operações implementadas em `FUTEX_WAKE_OP`:
+As operações implementadas em FUTEX_WAKE_OP são:
* `FUTEX_OP_SET`
* `FUTEX_OP_ADD`
@@ -803,13 +807,13 @@ As operações implementadas em `FUTEX_WAKE_OP`:
[NOTE]
====
-Não existe um parâmetro `val2` no protótipo do futex. O `val2` é obtido do parâmetro `struct timespec *timeout` para as operações `FUTEX_REQUEUE`, `FUTEX_CMP_REQUEUE` e `FUTEX_WAKE_OP`.
+Não há parâmetro `val2` no protótipo do futex. O `val2` é obtido do parâmetro `struct timespec *timeout` para as operações `FUTEX_REQUEUE`, `FUTEX_CMP_REQUEUE` e `FUTEX_WAKE_OP`.
====
[[futex-emu]]
==== Emulação de Futex no FreeBSD
-A emulação de futex no FreeBSD é retirada do NetBSD e posteriormente estendida por nós. Ele é colocado nos arquivos [.filename]#linux_futex.c# e [.filename]#linux_futex.h#. A estrutura `futex` se parece com:
+A emulação de futex no FreeBSD é baseada no NetBSD e posteriormente estendida por nós. Ela é implementada nos arquivos `linux_futex.c` e [.filename]#linux_futex.h#. A estrutura `futex` se parece com:
[.programlisting]
....
@@ -840,27 +844,27 @@ struct waiting_proc {
[[futex-get]]
===== futex_get / futex_put
-Um futex é obtido usando a função `futex_get`, que busca uma lista linear de futexes e retorna o encontrado ou cria um novo futex. Ao liberar um futex do uso, chamamos a função `futex_put`, que diminui um contador de referência do futex e, se o refcount chegar a zero, ele é liberado.
+Um futex é obtido usando a função `futex_get`, que busca em uma lista linear de futexes e retorna o encontrado ou cria um novo futex. Ao liberar um futex do uso, chamamos a função `futex_put`, que diminui um contador de referência do futex e, se o contador de referência chegar a zero, ele é liberado.
[[futex-sleep]]
===== futex_sleep
-Quando um futex enfileira uma thread para dormir, ele cria uma estrutura `working_proc` e coloca essa estrutura na lista dentro da estrutura do futex, então apenas executa um man:tsleep[9] para suspender a threading. O sleep pode ser expirado. Depois de man:tsleep[9] retornar (a thread foi acordada ou expirou) a estrutura `working_proc` é removida da lista e é destruído. Tudo isso é feito na função `futex_sleep`. Se nós formos acordados de `futex_wake` nós temos `wp_new_futex` setado então nós dormimos nele. Desta forma, um novo enfileiramento é feito nesta função.
+Quando um futex coloca uma thread em espera, ele cria uma estrutura `working_proc` e a coloca na lista dentro da estrutura do futex. Em seguida, ele executa um `man:tsleep[9]` para suspender a thread. A suspensão pode ter um tempo limite. Após o retorno do `man:tsleep[9]` (quando a thread foi acordada ou quando expirou o tempo limite), a estrutura `working_proc` é removida da lista e destruída. Tudo isso é feito na função `futex_sleep`. Se acordamos de um `futex_wake`, `wp_new_futex` é definido para que durmamos nele. Dessa forma, o reenfileiramento real é feito nessa função.
[[futex-wake-2]]
===== futex_wake
-Acordar uma thread em sleep em uma futex é performado na função `futex_wake`. Primeiro nesta função nós imitamos o comportamento estranho do Linux(R), onde ele acorda N threads para todas as operações, a única exceção é que as operações REQUEUE são executadas em threads N+1. Mas isso geralmente não faz diferença, pois estamos acordando todos as threads. Em seguida na função no loop nós acordamos n threads, depois disso nós checamos se existe um novo futex para requeuering. Se assim for, nós enfileiramos novamente até n2 threads no novo futex. Isso coopera com o `futex_sleep`.
+Acordar uma thread que está dormindo em um futex é realizado na função `futex_wake`. Primeiro, nesta função, imitamos o comportamento estranho do Linux(R), onde ele acorda N threads para todas as operações, com a única exceção de que as operações REQUEUE são realizadas em N+1 threads. Mas isso geralmente não faz diferença, pois estamos acordando todas as threads. Em seguida, no loop da função, acordamos n threads e, em seguida, verificamos se há um novo futex para reenfileiramento. Se houver, reenfileiramos até n2 threads no novo futex. Isso coopera com a função `futex_sleep`.
[[futex-wake-op-2]]
===== futex_wake_op
-A operação `FUTEX_WAKE_OP` é bastante complicada. Primeiro nós obtemos dois futexes nos endereços `uaddr` e `uaddr2` e então executamos a operação atômica usando `val3` e `uaddr2`. Então os waiters `val` no primeiro futex são acordados e se a condição de operação atômica se mantém, nós acordamos o waiter `val2` (ex `timeout`) no segundo futex.
+A operação `FUTEX_WAKE_OP` é bastante complexa. Primeiro, obtemos dois futexes nos endereços `uaddr` e `uaddr2`, em seguida, realizamos a operação atômica usando `val3` e `uaddr2`. Em seguida, acordamos as threads em espera com valor `val` no primeiro futex e, se a condição da operação atômica for satisfeita, acordamos a thread em espera com valor `val2` (ou seja, `timeout`) no segundo futex.
[[futex-atomic-op]]
===== operação atômica futex
-A operação atômica usa dois parâmetros `encoded_op` e `uaddr`. A operação codificada, codifica a operação em si, comparando valor, argumento de operação e argumento de comparação. O pseudocódigo da operação é como este:
+A operação atômica recebe dois parâmetros: `encoded_op` e `uaddr`. A operação codificada codifica a própria operação, o valor de comparação, o argumento da operação e o argumento de comparação. O pseudocódigo para a operação é semelhante a este:
[.programlisting]
....
@@ -868,12 +872,12 @@ oldval = *uaddr2
*uaddr2 = oldval OP oparg
....
-E isso é feito atomicamente. Primeiro, uma cópia do número em `uaddr` é executada e a operação é concluída. O código manipula falhas de página e, se nenhuma falha de página ocorrer, `oldval` é comparado ao argumento `cmparg` com o comparador cmp.
+E isso é feito atomicamente. Primeiro, é feita uma cópia do número em `uaddr` e, em seguida, a operação é realizada. O código lida com faltas de página e, se nenhuma falta de página ocorrer, `oldval` é comparado com o argumento `cmparg` usando o comparador `cmp`.
[[futex-locking]]
===== Bloqueio Futex
-A implementação do Futex usa duas listas de lock que protegndo `sx_lock` e locks globais (Giant ou outra `sx_lock`). Cada operação é executada bloqueada desde o início até o final.
+A implementação do futex utiliza duas listas de bloqueio para proteger o `sx_lock` e os bloqueios globais (seja Giant ou outro `sx_lock`). Cada operação é realizada com bloqueio desde o início até o final.
[[syscall-impl]]
=== Implementação de várias syscalls
@@ -883,7 +887,7 @@ Nesta seção, descreverei algumas syscalls menores que merecem destaque, pois s
[[syscall-at]]
==== *na família de syscalls
-Durante o desenvolvimento do kernel 2.6.16 do Linux(R), os *at syscalls foram adicionados. Essas syscalls (`openat`, por exemplo) funcionam exatamente como suas contrapartes sem-menos, com a pequena exceção do parâmetro `dirfd`. Este parâmetro muda onde o arquivo dado, no qual a syscall deve ser executado, está. Quando o parâmetro `filename` é absoluto `dirfd` é ignorado, mas quando o caminho para o arquivo é relativo, ele é checado. O parâmetro `dirfd` é um diretório relativo ao qual o nome do caminho relativo é verificado. O parâmetro `dirfd` é um file descriptor de algum diretório ou `AT_FDCWD`. Então, por exemplo, a syscall `openat` pode ser assim:
+Durante o desenvolvimento do kernel Linux(R) 2.6.16, as chamadas de sistema *at foram adicionadas. Essas chamadas de sistema (`openat`, por exemplo) funcionam exatamente como suas contrapartes sem o "at", com a pequena exceção do parâmetro `dirfd`. Esse parâmetro altera onde o arquivo fornecido, no qual a chamada de sistema será executada, está localizado. Quando o parâmetro `filename` é absoluto, o `dirfd` é ignorado, mas quando o caminho para o arquivo é relativo, ele entra em jogo. O parâmetro `dirfd` é um diretório relativo ao qual o caminho relativo do arquivo é verificado. O `dirfd` é um descritor de arquivo de algum diretório ou `AT_FDCWD`. Portanto, por exemplo, a chamada de sistema `openat` pode ser assim:
[.programlisting]
....
@@ -895,31 +899,31 @@ openat(AT_FDWCWD, bah\, flags, mode) /* opens /tmp/bah */
openat(stdio, bah\, flags, mode) /* returns error because stdio is not a directory */
....
-Esta infra-estrutura é necessária para evitar corridas ao abrir arquivos fora do diretório de trabalho. Imagine que um processo consiste em duas threads, thread A e thread B. Thread A emite `open (./tmp/foo/bah., Flags, mode)` e antes de retornar ele se antecipa e a thread B é executada. A thread B não se preocupa com as necessidades da thread A e renomeia ou remove o [.filename]#/tmp/foo/#. Nós temos uma corrida. Para evitar isso, podemos abrir o [.filename]#/tmp/foo# e usá-lo como `dirfd` para a syscall `openat`. Isso também permite que o usuário implemente diretórios de trabalho por thread.
+Essa infraestrutura é necessária para evitar corridas ao abrir arquivos fora do diretório de trabalho. Imagine que um processo consista em dois threads, thread A e thread B. A thread A chama `open(./tmp/foo/bah., flags, mode)` e antes de retornar, ela é preemptada e a thread B é executada. A thread B não se importa com as necessidades da thread A e renomeia ou remove [.filename]#/tmp/foo/#. Temos uma corrida. Para evitar isso, podemos abrir [.filename]#/tmp/foo# e usá-lo como `dirfd` para a chamada de sistema `openat`. Isso também permite que o usuário implemente diretórios de trabalho específicos por thread.
-A família do Linux(R) de *at syscalls contém: `linux_openat`, `linux_mkdirat`, `linux_mknodat`, `linux_fchownat`, `linux_futimesat`, `linux_fstatat64`, `linux_unlinkat`, `linux_renameat`, `linux_linkat` , `linux_symlinkat`, `linux_readlinkat`, `linux_fchmodat` e `linux_faccessat`. Tudo isso é implementado usando a rotina modificada man:namei[9] e a simples camada de quebra automática.
+A família de syscalls *at do Linux(R) contém: `linux_openat`, `linux_mkdirat`, `linux_mknodat`, `linux_fchownat`, `linux_futimesat`, `linux_fstatat64`, `linux_unlinkat`, `linux_renameat`, `linux_linkat`, `linux_symlinkat`, `linux_readlinkat`, `linux_fchmodat` e `linux_faccessat`. Todas essas syscalls são implementadas usando a rotina modificada man:namei[9] e uma camada de encapsulamento simples.
[[implementation]]
===== Implementação
-A implementação é feita alterando a rotina man:namei[9] (descrita acima) para obter o parâmetro adicional `dirfd` no sua estrutura `nameidata` , que especifica o ponto inicial da pesquisa do nome do caminho, em vez de usar o diretório de trabalho atual todas as vezes. A resolução de `dirfd` do número do file descriptor para um vnode é feita em *at syscalls nativo. Quando `dirfd` é `AT_FDCWD`, a entrada `dvp` na estrutura `nameidata` é `NULL`, mas `dirfd` é um número diferente, obtemos um arquivo para este file descriptor, verificamos se este arquivo é válido e se há vnode anexado a ele, então obtemos um vnode. Então nós verificamos este vnode por ser um diretório. Na rotina real man:namei[9] simplesmente substituímos a variável `dvp` vnode pela variável `dp` na função man:namei[9], que determina o ponto de partida. O man:namei[9] não é usado diretamente, mas através de um rastreamento de diferentes funções em vários níveis. Por exemplo, o `openat` é assim:
+A implementação é feita alterando a rotina man:namei[9] (descrita anteriormente) para receber um parâmetro adicional `dirfd` em sua estrutura `nameidata`, que especifica o ponto de partida da pesquisa do caminho em vez de usar o diretório de trabalho atual todas as vezes. A resolução do `dirfd` do número de descritor de arquivo para um vnode é feita nas syscalls *at nativas. Quando `dirfd` é `AT_FDCWD`, a entrada `dvp` na estrutura `nameidata` é `NULL`, mas quando `dirfd` é um número diferente, obtemos um arquivo para esse descritor de arquivo, verificamos se esse arquivo é válido e, se houver um vnode associado a ele, obtemos um vnode. Em seguida, verificamos se esse vnode é um diretório. Na própria rotina man:namei[9], simplesmente substituímos o vnode `dvp` pela variável `dp`, que determina o ponto de partida. A rotina man:namei[9] não é usada diretamente, mas sim através de uma sequência de diferentes funções em vários níveis. Por exemplo, o `openat` funciona da seguinte maneira:
[.programlisting]
....
openat() --> kern_openat() --> vn_open() -> namei()
....
-Por esse motivo, `kern_open` e `vn_open` devem ser alterados para incorporar o parâmetro `dirfd` adicional. Nenhuma camada de compatibilidade é criada para esses, porque não há muitos usuários disso e os usuários podem ser facilmente convertidos. Esta implementação geral permite ao FreeBSD implementar suas próprias *at syscalls. Isso está sendo discutido agora.
+Por esse motivo, `kern_open` e `vn_open` devem ser alterados para incorporar o parâmetro adicional `dirfd`. Nenhuma camada de compatibilidade é criada para essas funções porque não há muitos usuários desse recurso e os usuários existentes podem ser facilmente convertidos. Essa implementação geral permite que o FreeBSD implemente seus próprios syscalls *at. Isso está sendo discutido atualmente.
[[ioctl]]
==== Ioctl
-A interface ioctl é bastante frágil devido à sua generalidade. Nós temos que ter em mente que os dispositivos diferem entre Linux(R) e FreeBSD, então alguns cuidados devem ser aplicados para fazer o trabalho de emulação de ioctl corretamente. O manuseio ioctl é implementado em [.filename]#linux_ioctl.c#, onde a função `linux_ioctl` é definida. Esta função simplesmente itera sobre conjuntos de manipuladores ioctl para encontrar um manipulador que implementa um dado comando. A syscall ioctl tem três parâmetros, o file descriptor, comando e um argumento. O comando é um número de 16 bits, que, em teoria, é dividido em alta classe determinante de 8 bits do comando ioctl e 8 bits baixos, que são o comando real dentro do conjunto dado. A emulação aproveita essa divisão. Implementamos manipuladores para cada conjunto, como `sound_handler` ou `disk_handler`. Cada manipulador tem um comando máximo e um comando mínimo definido, que é usado para determinar qual manipulador é usado. Existem pequenos problemas com esta abordagem porque Linux(R) não usa a divisão definida consistentemente, por isso as ioctls para um conjunto diferente estão dentro de um conjunto ao qual não devem pertencer (ioctls genéricos SCSI dentro do cdrom conjunto, etc.). O FreeBSD atualmente não implementa muitos ioctls do Linux(R) (comparado ao NetBSD, por exemplo), mas o plano é portar os do NetBSD. A tendência é usar o ioctls Linux(R) mesmo nos drivers nativos do FreeBSD, devido à fácil portabilidade dos aplicativos.
+A interface ioctl é bastante frágil devido à sua generalidade. Devemos ter em mente que os dispositivos diferem entre o Linux(R) e o FreeBSD, então é necessário ter cuidado para garantir que a emulação do ioctl funcione corretamente. O tratamento do ioctl é implementado em [.filename]#linux_ioctl.c#, onde a função `linux_ioctl` é definida. Essa função simplesmente itera sobre conjuntos de manipuladores de ioctl para encontrar um manipulador que implemente um determinado comando. A chamada de sistema ioctl possui três parâmetros: o descritor de arquivo, o comando e um argumento. O comando é um número de 16 bits, que teoricamente é dividido em 8 bits superiores que determinam a classe do comando ioctl e 8 bits inferiores, que são o comando real dentro do conjunto dado. A emulação aproveita essa divisão. Implementamos manipuladores para cada conjunto, como `sound_handler` ou `disk_handler`. Cada manipulador possui um comando máximo e um comando mínimo definido, que é usado para determinar qual manipulador será usado. Existem pequenos problemas com essa abordagem porque o Linux(R) não usa a divisão de conjunto de forma consistente, então às vezes os ioctl de um conjunto diferente estão dentro de um conjunto ao qual não deveriam pertencer (ioctl genéricos do SCSI dentro do conjunto de cdrom, etc.). Atualmente, o FreeBSD não implementa muitos ioctl do Linux(R) (em comparação com o NetBSD, por exemplo), mas o plano é portá-los do NetBSD. A tendência é usar os ioctl do Linux(R) mesmo nos drivers nativos do FreeBSD devido à facilidade de portar aplicativos.
[[debugging]]
==== Depuração
-Cada syscall deve ser debugável. Para isso, introduzimos uma pequena infra-estrutura. Nós temos o recurso ldebug, que informa se uma dada syscall deve ser depurada (configurável através de um sysctl). Para impressão, temos as macros LMSG e ARGS. Essas são usadas para alterar uma string imprimível para mensagens uniformes de depuração.
+Cada chamada de sistema deve ser passível de depuração. Para esse propósito, introduzimos uma pequena infraestrutura. Temos a facilidade ldebug, que indica se uma determinada chamada de sistema deve ser depurada (configurável através de um sysctl). Para impressão, temos as macros LMSG e ARGS. Essas macros são usadas para modificar uma string imprimível para mensagens de depuração uniformes.
[[conclusion]]
== Conclusão
@@ -927,37 +931,37 @@ Cada syscall deve ser debugável. Para isso, introduzimos uma pequena infra-estr
[[results]]
=== Resultados
-Em abril de 2007, a camada de emulação do Linux(R) é capaz de emular o kernel Linux(R) 2.6.16 muito bem. Os problemas remanescentes dizem respeito a futexes, inacabado na família de syscalls *at, entrega de sinais problemáticos, falta de `epoll` e `inotify` e provavelmente alguns bugs que ainda não descobrimos. Apesar disso, somos capazes de executar basicamente todos os programas Linux(R) incluídos na coleção de ports do FreeBSD com o Fedora Core 4 em 2.6.16 e há alguns relatos rudimentares de sucesso com o Fedora Core 6 em 2.6.16. O linux_base do Fedora Core 6 foi recentemente comprometido permitindo alguns testes adicionais da camada de emulação e nos dando mais algumas dicas onde devemos nos esforçar para implementar o material que está faltando.
+A partir de abril de 2007, a camada de emulação do Linux(R) é capaz de emular bem o kernel Linux(R) 2.6.16. Os problemas restantes envolvem futexes, chamadas de sistema inacabadas da família *at, entrega problemática de sinais, falta de suporte a `epoll` e `inotify`, e provavelmente alguns bugs que ainda não foram descobertos. Apesar disso, somos capazes de executar basicamente todos os programas Linux(R) incluídos na Coleção de Ports do FreeBSD com o Fedora Core 4 no kernel 2.6.16, e existem alguns relatos rudimentares de sucesso com o Fedora Core 6 no kernel 2.6.16. O linux_base do Fedora Core 6 foi recentemente adicionado, permitindo testes adicionais da camada de emulação e fornecendo mais informações sobre onde devemos concentrar nossos esforços na implementação do que está faltando.
-Nós podemos rodar os aplicativos mais usados como o package:www/linux-firefox[], package:net-im/skype[] e alguns jogos da coleção dos ports. Alguns dos programas exibem mau comportamento na emulação 2.6, mas isso está atualmente sob investigação e, espera-se, será corrigido em breve. A única grande aplicação que se sabe que não funciona é o Java(TM) Development Kit do Linux(R) e isto é devido ao requisito de `epoll` habilidade que não está diretamente relacionada ao kernel do Linux(R) 2.6.
+Somos capazes de executar os aplicativos mais usados, como o pacote `www/linux-firefox`, o pacote `net-im/skype` e alguns jogos da Coleção de Ports. Alguns desses programas apresentam comportamento inadequado sob a emulação do 2.6, mas isso está atualmente em investigação e esperamos que seja corrigido em breve. O único grande aplicativo conhecido por não funcionar é o Java(TM) Development Kit do Linux(R), devido ao requisito da facilidade `epoll`, que não está diretamente relacionada ao kernel do Linux(R) 2.6.
-Esperamos habilitar a emulação 2.6.16 por padrão algum tempo depois que o FreeBSD 7.0 for lançado pelo menos para expor as partes da emulação 2.6 para alguns testes mais amplos. Feito isso, podemos mudar para o Fedora Core 6 linux_base, que é o plano final.
+Esperamos habilitar a emulação do 2.6.16 como padrão algum tempo depois do lançamento do FreeBSD 7.0, pelo menos para expor as partes de emulação 2.6 para um teste mais amplo. Uma vez feito isso, podemos mudar para o linux_base do Fedora Core 6, que é o plano final.
[[future-work]]
=== Trabalho futuro
-O trabalho futuro deve focar na correção dos problemas remanescentes com futexes, implementar o restante da família de syscalls, corrigir a entrega de sinal e possivelmente implementar os recursos de `epoll` e `inotify`.
+O trabalho futuro deve se concentrar em corrigir os problemas restantes com futexes, implementar o restante da família de chamadas de sistema *at, corrigir a entrega de sinais e possivelmente implementar as facilidades `epoll` e `inotify`.
Esperamos poder executar os programas mais importantes com perfeição em breve, por isso poderemos alternar para a emulação 2.6 por padrão e fazer do Fedora Core 6 o linux_base padrão porque o nosso atualmente usado Fedora Core 4 não é mais suportado.
-O outro objetivo possível é compartilhar nosso código com o NetBSD e o DragonflyBSD. O NetBSD tem algum suporte para emulação 2.6, mas está longe de ser concluído e não foi realmente testado. O DragonflyBSD manifestou algum interesse em portar as melhorias do 2.6.
+Outro objetivo possível é compartilhar nosso código com o NetBSD e o DragonflyBSD. O NetBSD tem algum suporte para emulação 2.6, mas está longe de estar completo e não foi realmente testado. O DragonflyBSD mostrou interesse em portar as melhorias do 2.6.
-Geralmente, como o Linux(R) se desenvolve, gostaríamos de acompanhar seu desenvolvimento, implementando a syscalls recém-adicionado. Splice vem em mente primeiro. Algumas syscalls já implementadas também são altamente danificadas, por exemplo `mremap` e outras. Alguns aprimoramentos de desempenho também podem ser feitos, um lock mais refinado e outros.
+Em geral, à medida que o Linux(R) se desenvolve, gostaríamos de acompanhar o seu desenvolvimento, implementando as novas chamadas de sistema adicionadas. O `splice` é uma delas que vem à mente em primeiro lugar. Algumas chamadas de sistema já implementadas também podem ser aprimoradas, por exemplo, `mremap` e outras. Também podem ser feitas melhorias de desempenho, como bloqueio mais refinado e outros.
[[team]]
=== Equipe
Eu colaborei neste projeto com (em ordem alfabética):
-* John Baldwin mailto:jhb@FreeBSD.org[jhb@FreeBSD.org]
-* Konstantin Belousov mailto:kib@FreeBSD.org[kib@FreeBSD.org]
+* `{jhb}`
+* `{kib}`
* Emmanuel Dreyfus
* Scot Hetzel
-* Jung-uk Kim mailto:jkim@FreeBSD.org[jkim@FreeBSD.org]
-* Alexander Leidinger mailto:netchild@FreeBSD.org[netchild@FreeBSD.org]
-* Suleiman Souhlal mailto:ssouhlal@FreeBSD.org[ssouhlal@FreeBSD.org]
+* `{jkim}`
+* `{netchild}`
+* `{ssouhlal}`
* Li Xiao
-* David Xu mailto:davidxu@FreeBSD.org[davidxu@FreeBSD.org]
+* `{davidxu}`
Gostaria de agradecer a todas as pessoas por seus conselhos, revisões de código e apoio geral.
diff --git a/documentation/content/pt-br/articles/linux-emulation/_index.po b/documentation/content/pt-br/articles/linux-emulation/_index.po
new file mode 100644
index 0000000000..6b2b16255a
--- /dev/null
+++ b/documentation/content/pt-br/articles/linux-emulation/_index.po
@@ -0,0 +1,4509 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-05-21 16:43+0100\n"
+"PO-Revision-Date: 2023-05-21 15:24+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articleslinux-emulation_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1
+#, no-wrap
+msgid "A technical description about the internals of the Linux emulation layer in FreeBSD"
+msgstr "Uma descrição técnica sobre os internals da camada de emulação do Linux no FreeBSD"
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1
+#, no-wrap
+msgid "Linux® emulation in FreeBSD"
+msgstr "Emulação do Linux® no FreeBSD"
+
+#. type: Title =
+#: documentation/content/en/articles/linux-emulation/_index.adoc:11
+#, no-wrap
+msgid "Linux(R) emulation in FreeBSD"
+msgstr "Emulação do Linux(R) no FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:54
+msgid ""
+"This masters thesis deals with updating the Linux(R) emulation layer (the so "
+"called _Linuxulator_). The task was to update the layer to match the "
+"functionality of Linux(R) 2.6. As a reference implementation, the Linux(R) "
+"2.6.16 kernel was chosen. The concept is loosely based on the NetBSD "
+"implementation. Most of the work was done in the summer of 2006 as a part "
+"of the Google Summer of Code students program. The focus was on bringing "
+"the _NPTL_ (new POSIX(R) thread library) support into the emulation layer, "
+"including _TLS_ (thread local storage), _futexes_ (fast user space mutexes), "
+"_PID mangling_, and some other minor things. Many small problems were "
+"identified and fixed in the process. My work was integrated into the main "
+"FreeBSD source repository and will be shipped in the upcoming 7.0R release. "
+"We, the emulation development team, are working on making the Linux(R) 2.6 "
+"emulation the default emulation layer in FreeBSD."
+msgstr ""
+"Esta tese de mestrado trata da atualização da camada de emulação do Linux(R) "
+"(chamada de _Linuxulator_). A tarefa consistiu em atualizar a camada para "
+"corresponder à funcionalidade do Linux(R) 2.6. Como implementação de "
+"referência, foi escolhido o kernel Linux(R) 2.6.16. O conceito é vagamente "
+"baseado na implementação do NetBSD. A maior parte do trabalho foi realizada "
+"no verão de 2006 como parte do programa de estudantes do Google Summer of "
+"Code. O foco foi trazer o suporte do _NPTL_ (nova biblioteca de threads "
+"POSIX(R)) para a camada de emulação, incluindo _TLS_ (armazenamento local de "
+"threads), _futexes_ (mutexes de espaço do usuário rápidos), _PID mangling_ e "
+"algumas outras pequenas coisas. Muitos problemas pequenos foram "
+"identificados e corrigidos durante o processo. Meu trabalho foi integrado ao "
+"repositório principal do FreeBSD e será incluído na próxima versão 7.0R. "
+"Nós, a equipe de desenvolvimento de emulação, estamos trabalhando para "
+"tornar a emulação do Linux(R) 2.6 a camada de emulação padrão no FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:56
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-emulation/_index.adoc:60
+#, no-wrap
+msgid "Introduction"
+msgstr "Introdução"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:67
+msgid ""
+"In the last few years the open source UNIX(R) based operating systems "
+"started to be widely deployed on server and client machines. Among these "
+"operating systems I would like to point out two: FreeBSD, for its BSD "
+"heritage, time proven code base and many interesting features and Linux(R) "
+"for its wide user base, enthusiastic open developer community and support "
+"from large companies. FreeBSD tends to be used on server class machines "
+"serving heavy duty networking tasks with less usage on desktop class "
+"machines for ordinary users. While Linux(R) has the same usage on servers, "
+"but it is used much more by home based users. This leads to a situation "
+"where there are many binary only programs available for Linux(R) that lack "
+"support for FreeBSD."
+msgstr ""
+"Nos últimos anos, os sistemas operacionais de código aberto baseados em "
+"UNIX(R) começaram a ser amplamente implantados em servidores e máquinas "
+"clientes. Entre esses sistemas operacionais, gostaria de destacar dois: o "
+"FreeBSD, por sua herança BSD, código comprovado ao longo do tempo e muitos "
+"recursos interessantes, e o Linux(R), por sua ampla base de usuários, "
+"comunidade de desenvolvedores entusiastas e apoio de grandes empresas. O "
+"FreeBSD tende a ser usado em máquinas de classe servidor que executam "
+"tarefas de rede intensivas, com menos uso em máquinas de classe desktop para "
+"usuários comuns. Enquanto o Linux(R) tem o mesmo uso em servidores, mas é "
+"usado muito mais por usuários domésticos. Isso leva a uma situação em que há "
+"muitos programas somente binários disponíveis para Linux(R) que não possuem "
+"suporte para o FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:69
+msgid ""
+"Naturally, a need for the ability to run Linux(R) binaries on a FreeBSD "
+"system arises and this is what this thesis deals with: the emulation of the "
+"Linux(R) kernel in the FreeBSD operating system."
+msgstr ""
+"Naturalmente, surge a necessidade da capacidade de executar binários "
+"Linux(R) em um sistema FreeBSD e é isso que esta tese trata: a emulação do "
+"kernel Linux(R) no sistema operacional FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:72
+msgid ""
+"During the Summer of 2006 Google Inc. sponsored a project which focused on "
+"extending the Linux(R) emulation layer (the so called Linuxulator) in "
+"FreeBSD to include Linux(R) 2.6 facilities. This thesis is written as a "
+"part of this project."
+msgstr ""
+"Durante o verão de 2006, a Google Inc. patrocinou um projeto que se "
+"concentrou na extensão da camada de emulação do Linux® (chamada de "
+"Linuxulator) no FreeBSD para incluir as funcionalidades do Linux® 2.6. Esta "
+"tese foi escrita como parte deste projeto."
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-emulation/_index.adoc:74
+#, no-wrap
+msgid "A look inside..."
+msgstr "Uma olhada por dentro..."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:80
+msgid ""
+"In this section we are going to describe every operating system in "
+"question. How they deal with syscalls, trapframes etc., all the low-level "
+"stuff. We also describe the way they understand common UNIX(R) primitives "
+"like what a PID is, what a thread is, etc. In the third subsection we talk "
+"about how UNIX(R) on UNIX(R) emulation could be done in general."
+msgstr ""
+"Nesta seção, vamos descrever cada sistema operacional em questão. Como eles "
+"lidam com syscalls, trapframes, etc., tudo o que é de baixo nível. Também "
+"descrevemos a maneira como eles entendem os recursos comuns do UNIX(R), como "
+"o que é um PID, o que é uma thread, etc. Na terceira subseção, falamos sobre "
+"como a emulação do UNIX(R) em cima do UNIX(R) poderia ser feita de maneira "
+"geral."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:82
+#, no-wrap
+msgid "What is UNIX(R)"
+msgstr "O que é UNIX(R)"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:94
+msgid ""
+"UNIX(R) is an operating system with a long history that has influenced "
+"almost every other operating system currently in use. Starting in the "
+"1960s, its development continues to this day (although in different "
+"projects). UNIX(R) development soon forked into two main ways: the BSDs and "
+"System III/V families. They mutually influenced themselves by growing a "
+"common UNIX(R) standard. Among the contributions originated in BSD we can "
+"name virtual memory, TCP/IP networking, FFS, and many others. The System V "
+"branch contributed to SysV interprocess communication primitives, copy-on-"
+"write, etc. UNIX(R) itself does not exist any more but its ideas have been "
+"used by many other operating systems world wide thus forming the so called "
+"UNIX(R)-like operating systems. These days the most influential ones are "
+"Linux(R), Solaris, and possibly (to some extent) FreeBSD. There are in-"
+"company UNIX(R) derivatives (AIX, HP-UX etc.), but these have been more and "
+"more migrated to the aforementioned systems. Let us summarize typical "
+"UNIX(R) characteristics."
+msgstr ""
+"UNIX(R) é um sistema operacional com uma longa história que influenciou "
+"praticamente todos os outros sistemas operacionais atualmente em uso. Desde "
+"os anos 1960, seu desenvolvimento continua até os dias de hoje (embora em "
+"projetos diferentes). O desenvolvimento do UNIX(R) logo se dividiu em duas "
+"principais vertentes: as famílias BSDs e System III/V. Elas se influenciaram "
+"mutuamente ao adotar um padrão comum para o UNIX(R). Entre as contribuições "
+"originadas no BSD, podemos citar memória virtual, rede TCP/IP, FFS e muitas "
+"outras. O branch do System V contribuiu com primitivas de comunicação "
+"interprocesso do SysV, copy-on-write, etc. O UNIX(R) em si não existe mais, "
+"mas suas ideias foram utilizadas por muitos outros sistemas operacionais ao "
+"redor do mundo, formando o que chamamos de sistemas operacionais semelhantes "
+"ao UNIX(R). Nos dias atuais, os mais influentes são Linux(R), Solaris e "
+"possivelmente (em certa medida) o FreeBSD. Existem também derivados do "
+"UNIX(R) desenvolvidos por empresas (AIX, HP-UX etc.), mas eles têm migrado "
+"cada vez mais para os sistemas mencionados anteriormente. Vamos resumir as "
+"características típicas do UNIX(R)."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:96
+#: documentation/content/en/articles/linux-emulation/_index.adoc:187
+#: documentation/content/en/articles/linux-emulation/_index.adoc:279
+#, no-wrap
+msgid "Technical details"
+msgstr "Detalhes técnicos"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:104
+msgid ""
+"Every running program constitutes a process that represents a state of the "
+"computation. Running process is divided between kernel-space and user-"
+"space. Some operations can be done only from kernel space (dealing with "
+"hardware etc.), but the process should spend most of its lifetime in the "
+"user space. The kernel is where the management of the processes, hardware, "
+"and low-level details take place. The kernel provides a standard unified "
+"UNIX(R) API to the user space. The most important ones are covered below."
+msgstr ""
+"Cada programa em execução constitui um processo que representa um estado da "
+"computação. Um processo em execução é dividido entre o espaço do kernel e o "
+"espaço do usuário. Algumas operações só podem ser realizadas a partir do "
+"espaço do kernel (lidar com hardware etc.), mas o processo deve passar a "
+"maior parte de sua vida útil no espaço do usuário. O kernel é onde ocorre o "
+"gerenciamento dos processos, hardware e detalhes de baixo nível. O kernel "
+"fornece uma API UNIX(R) padronizada e unificada para o espaço do usuário. As "
+"mais importantes estão descritas abaixo."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:106
+#, no-wrap
+msgid "Communication between kernel and user space process"
+msgstr "Comunicação entre o kernel e o processo de espaço do usuário"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:114
+msgid ""
+"Common UNIX(R) API defines a syscall as a way to issue commands from a user "
+"space process to the kernel. The most common implementation is either by "
+"using an interrupt or specialized instruction (think of `SYSENTER`/`SYSCALL` "
+"instructions for ia32). Syscalls are defined by a number. For example in "
+"FreeBSD, the syscall number 85 is the man:swapon[2] syscall and the syscall "
+"number 132 is man:mkfifo[2]. Some syscalls need parameters, which are "
+"passed from the user-space to the kernel-space in various ways "
+"(implementation dependant). Syscalls are synchronous."
+msgstr ""
+"A API comum do UNIX(R) define uma syscall como uma forma de emitir comandos "
+"de um processo do espaço do usuário para o kernel. A implementação mais "
+"comum é feita por meio de uma interrupção ou instrução especializada (pense "
+"nas instruções `SYSENTER`/`SYSCALL` para ia32). As syscalls são definidas "
+"por um número. Por exemplo, no FreeBSD, o número da syscall 85 é a man:"
+"swapon[2] e o número da syscall 132 é a man:mkfifo[2]. Algumas syscalls "
+"requerem parâmetros, que são passados do espaço do usuário para o espaço do "
+"kernel de várias maneiras (dependendo da implementação). As syscalls são "
+"síncronas."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:118
+msgid ""
+"Another possible way to communicate is by using a _trap_. Traps occur "
+"asynchronously after some event occurs (division by zero, page fault etc.). "
+"A trap can be transparent for a process (page fault) or can result in a "
+"reaction like sending a _signal_ (division by zero)."
+msgstr ""
+"Outra forma possível de comunicação é por meio de uma _trap_. As traps "
+"ocorrem de forma assíncrona após algum evento ocorrer (divisão por zero, "
+"falta de página etc.). Uma trap pode ser transparente para um processo "
+"(falta de página) ou pode resultar em uma reação, como o envio de um _sinal_ "
+"(divisão por zero)."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:120
+#, no-wrap
+msgid "Communication between processes"
+msgstr "Comunicação entre processos"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:125
+msgid ""
+"There are other APIs (System V IPC, shared memory etc.) but the single most "
+"important API is signal. Signals are sent by processes or by the kernel and "
+"received by processes. Some signals can be ignored or handled by a user "
+"supplied routine, some result in a predefined action that cannot be altered "
+"or ignored."
+msgstr ""
+"Existem outras APIs (System V IPC, memória compartilhada, etc.), mas a API "
+"mais importante é o sinal. Os sinais são enviados por processos ou pelo "
+"kernel e recebidos por processos. Alguns sinais podem ser ignorados ou "
+"tratados por uma rotina fornecida pelo usuário, enquanto outros resultam em "
+"uma ação predefinida que não pode ser alterada ou ignorada."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:127
+#, no-wrap
+msgid "Process management"
+msgstr "Gerenciamento de processos"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:137
+msgid ""
+"Kernel instances are processed first in the system (so called init). Every "
+"running process can create its identical copy using the man:fork[2] "
+"syscall. Some slightly modified versions of this syscall were introduced "
+"but the basic semantic is the same. Every running process can morph into "
+"some other process using the man:exec[3] syscall. Some modifications of "
+"this syscall were introduced but all serve the same basic purpose. "
+"Processes end their lives by calling the man:exit[2] syscall. Every process "
+"is identified by a unique number called PID. Every process has a defined "
+"parent (identified by its PID)."
+msgstr ""
+"As instâncias do kernel são processadas primeiro no sistema (chamado de "
+"init). Todo processo em execução pode criar uma cópia idêntica de si mesmo "
+"usando a syscall man:fork[2]. Algumas versões ligeiramente modificadas dessa "
+"syscall foram introduzidas, mas a semântica básica é a mesma. Todo processo "
+"em execução pode se transformar em outro processo usando a syscall man:"
+"exec[3]. Foram introduzidas algumas modificações nessa syscall, mas todas "
+"servem ao mesmo propósito básico. Os processos encerram suas vidas chamando "
+"a syscall man:exit[2]. Cada processo é identificado por um número único "
+"chamado PID. Todo processo possui um processo pai (parent) definido "
+"(identificado pelo seu PID)."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:139
+#, no-wrap
+msgid "Thread management"
+msgstr "Gerenciamento de threads"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:145
+msgid ""
+"Traditional UNIX(R) does not define any API nor implementation for "
+"threading, while POSIX(R) defines its threading API but the implementation "
+"is undefined. Traditionally there were two ways of implementing threads. "
+"Handling them as separate processes (1:1 threading) or envelope the whole "
+"thread group in one process and managing the threading in userspace (1:N "
+"threading). Comparing main features of each approach:"
+msgstr ""
+"No traditional UNIX(R), não é definida nenhuma API nem implementação para "
+"threads, enquanto o POSIX(R) define sua API de threads, mas a implementação "
+"é indefinida. Tradicionalmente, havia duas maneiras de implementar threads. "
+"Tratá-los como processos separados (threading 1:1) ou envolver todo o grupo "
+"de threads em um único processo e gerenciar as threads no espaço do usuário "
+"(threading 1:N). Vamos comparar as principais características de cada "
+"abordagem:"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:147
+msgid "1:1 threading"
+msgstr "1:1 threading"
+
+#. type: Bullet: '- '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:149
+msgid "heavyweight threads"
+msgstr "Threads pesadas"
+
+#. type: Bullet: '- '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:150
+msgid ""
+"the scheduling cannot be altered by the user (slightly mitigated by the "
+"POSIX(R) API)"
+msgstr ""
+"O agendamento não pode ser alterado pelo usuário (ligeiramente atenuada pela "
+"API POSIX(R))"
+
+#. type: Bullet: '+ '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:151
+msgid "no syscall wrapping necessary"
+msgstr "não necessita de envolvimento do syscall"
+
+#. type: Bullet: '+ '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:152
+msgid "can utilize multiple CPUs"
+msgstr "pode utilizar várias CPUs"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:154
+msgid "1:N threading"
+msgstr "1: N threading"
+
+#. type: Bullet: '+ '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:156
+msgid "lightweight threads"
+msgstr "threads leves"
+
+#. type: Bullet: '+ '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:157
+msgid "scheduling can be easily altered by the user"
+msgstr "agendamento pode ser facilmente alterado pelo usuário"
+
+#. type: Bullet: '- '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:158
+msgid "syscalls must be wrapped"
+msgstr "As chamadas de sistema devem ser encapsuladas"
+
+#. type: Bullet: '- '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:159
+msgid "cannot utilize more than one CPU"
+msgstr "Não pode utilizar mais do que uma CPU"
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:161
+#, no-wrap
+msgid "What is FreeBSD?"
+msgstr "O que é o FreeBSD?"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:169
+msgid ""
+"The FreeBSD project is one of the oldest open source operating systems "
+"currently available for daily use. It is a direct descendant of the genuine "
+"UNIX(R) so it could be claimed that it is a true UNIX(R) although licensing "
+"issues do not permit that. The start of the project dates back to the early "
+"1990's when a crew of fellow BSD users patched the 386BSD operating system. "
+"Based on this patchkit a new operating system arose named FreeBSD for its "
+"liberal license. Another group created the NetBSD operating system with "
+"different goals in mind. We will focus on FreeBSD."
+msgstr ""
+"O projeto FreeBSD é um dos sistemas operacionais de código aberto mais "
+"antigos atualmente disponíveis para uso diário. É um descendente direto do "
+"UNIX(R) genuíno, portanto, poderia ser considerado um verdadeiro UNIX(R), "
+"embora questões de licenciamento não permitam isso. O início do projeto "
+"remonta ao início dos anos 1990, quando um grupo de usuários do BSD "
+"modificou o sistema operacional 386BSD. Com base neste conjunto de patches, "
+"um novo sistema operacional surgiu, chamado FreeBSD por causa de sua licença "
+"liberal. Outro grupo criou o sistema operacional NetBSD com objetivos "
+"diferentes em mente. Vamos nos concentrar no FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:174
+msgid ""
+"FreeBSD is a modern UNIX(R)-based operating system with all the features of "
+"UNIX(R). Preemptive multitasking, multiuser facilities, TCP/IP networking, "
+"memory protection, symmetric multiprocessing support, virtual memory with "
+"merged VM and buffer cache, they are all there. One of the interesting and "
+"extremely useful features is the ability to emulate other UNIX(R)-like "
+"operating systems. As of December 2006 and 7-CURRENT development, the "
+"following emulation functionalities are supported:"
+msgstr ""
+"O FreeBSD é um sistema operacional baseado em UNIX(R) moderno, com todos os "
+"recursos do UNIX(R). Multitarefa preemptiva, facilidades multiusuário, rede "
+"TCP/IP, proteção de memória, suporte a multiprocessamento simétrico , "
+"memória virtual com cache de memória e buffer combinados, todos estão "
+"presentes. Uma das características interessantes e extremamente úteis é a "
+"capacidade de emular outros sistemas operacionais semelhantes ao UNIX(R). A "
+"partir de dezembro de 2006 e do desenvolvimento 7-CURRENT, as seguintes "
+"funcionalidades de emulação são suportadas:"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:176
+msgid "FreeBSD/i386 emulation on FreeBSD/amd64"
+msgstr "Emulação FreeBSD/i386 no FreeBSD/amd64"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:177
+msgid "FreeBSD/i386 emulation on FreeBSD/ia64"
+msgstr "Emulação de FreeBSD/i386 no FreeBSD/ia64"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:178
+msgid "Linux(R)-emulation of Linux(R) operating system on FreeBSD"
+msgstr "Emulação do sistema operacional Linux(R) no FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:179
+msgid "NDIS-emulation of Windows networking drivers interface"
+msgstr "Emulação de NDIS da interface de drivers de rede do Windows"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:180
+msgid "NetBSD-emulation of NetBSD operating system"
+msgstr "Emulação de NetBSD do sistema operacional NetBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:181
+msgid "PECoff-support for PECoff FreeBSD executables"
+msgstr "Suporte PECoff para executáveis PECoff do FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:182
+msgid "SVR4-emulation of System V revision 4 UNIX(R)"
+msgstr "SVR4-emulação do UNIX(R) da revisão 4 do System V"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:185
+msgid ""
+"Actively developed emulations are the Linux(R) layer and various FreeBSD-on-"
+"FreeBSD layers. Others are not supposed to work properly nor be usable "
+"these days."
+msgstr ""
+"As emulações desenvolvidas ativamente são a camada Linux(R) e várias camadas "
+"FreeBSD-on-FreeBSD. Outras não devem funcionar corretamente ou serem "
+"utilizáveis atualmente."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:195
+msgid ""
+"FreeBSD is traditional flavor of UNIX(R) in the sense of dividing the run of "
+"processes into two halves: kernel space and user space run. There are two "
+"types of process entry to the kernel: a syscall and a trap. There is only "
+"one way to return. In the subsequent sections we will describe the three "
+"gates to/from the kernel. The whole description applies to the i386 "
+"architecture as the Linuxulator only exists there but the concept is similar "
+"on other architectures. The information was taken from [1] and the source "
+"code."
+msgstr ""
+"O FreeBSD é uma variante tradicional do UNIX(R) no sentido de dividir a "
+"execução dos processos em dois espaços: espaço do kernel e espaço do "
+"usuário. Existem dois tipos de entrada de processo no kernel: uma syscall e "
+"uma armadilha (trap). Existe apenas uma maneira de retornar. Nas seções "
+"subsequentes, descreveremos os três portões de/para o kernel. Toda a "
+"descrição se aplica à arquitetura i386, já que o Linuxulator existe apenas "
+"lá, mas o conceito é semelhante em outras arquiteturas. As informações foram "
+"retiradas de [1] e do código-fonte."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:197
+#, no-wrap
+msgid "System entries"
+msgstr "Entradas do sistema"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:204
+msgid ""
+"FreeBSD has an abstraction called an execution class loader, which is a "
+"wedge into the man:execve[2] syscall. This employs a structure `sysentvec`, "
+"which describes an executable ABI. It contains things like errno "
+"translation table, signal translation table, various functions to serve "
+"syscall needs (stack fixup, coredumping, etc.). Every ABI the FreeBSD "
+"kernel wants to support must define this structure, as it is used later in "
+"the syscall processing code and at some other places. System entries are "
+"handled by trap handlers, where we can access both the kernel-space and the "
+"user-space at once."
+msgstr ""
+"O O FreeBSD tem uma abstração chamada de carregador de classe de execução, "
+"que é uma cunha no syscall man:execve[2]. Isso utiliza uma estrutura "
+"`sysentvec`, que descreve uma ABI executável. Ela contém coisas como uma "
+"tabela de tradução de errno, uma tabela de tradução de sinais, várias "
+"funções para atender às necessidades de syscall (ajuste de pilha, "
+"coredumping, etc.). Cada ABI que o kernel do FreeBSD deseja suportar deve "
+"definir essa estrutura, pois ela é usada posteriormente no código de "
+"processamento de syscall e em alguns outros lugares. As entradas do sistema "
+"são tratadas por manipuladores de interrupção, onde podemos acessar tanto o "
+"espaço do kernel quanto o espaço do usuário de uma só vez."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:206
+#: documentation/content/en/articles/linux-emulation/_index.adoc:288
+#, no-wrap
+msgid "Syscalls"
+msgstr "Syscalls"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:209
+msgid ""
+"Syscalls on FreeBSD are issued by executing interrupt `0x80` with register "
+"`%eax` set to a desired syscall number with arguments passed on the stack."
+msgstr ""
+"As chamadas de sistema (syscalls) no FreeBSD são realizadas executando a "
+"interrupção `0x80` com o registro `%eax` definido para o número desejado da "
+"syscall e os argumentos passados na pilha."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:215
+msgid ""
+"When a process issues an interrupt `0x80`, the `int0x80` syscall trap "
+"handler is issued (defined in [.filename]#sys/i386/i386/exception.s#), which "
+"prepares arguments (i.e. copies them on to the stack) for a call to a C "
+"function man:syscall[2] (defined in [.filename]#sys/i386/i386/trap.c#), "
+"which processes the passed in trapframe. The processing consists of "
+"preparing the syscall (depending on the `sysvec` entry), determining if the "
+"syscall is 32-bit or 64-bit one (changes size of the parameters), then the "
+"parameters are copied, including the syscall. Next, the actual syscall "
+"function is executed with processing of the return code (special cases for "
+"`ERESTART` and `EJUSTRETURN` errors). Finally an `userret()` is scheduled, "
+"switching the process back to the users-pace. The parameters to the actual "
+"syscall handler are passed in the form of `struct thread *td`, `struct "
+"syscall args *` arguments where the second parameter is a pointer to the "
+"copied in structure of parameters."
+msgstr ""
+"Quando um processo emite a interrupção `0x80`, o tratador de interrupção "
+"`int0x80` da syscall é acionado (definido em [.filename]#sys/i386/i386/"
+"exception.s#), que prepara os argumentos (ou seja, copia-os para a pilha) "
+"para uma chamada à função C man:syscall[2] (definida em [.filename]#sys/i386/"
+"i386/trap.c#), que processa o trapframe passado. O processamento consiste em "
+"preparar a syscall (dependendo da entrada `sysvec`), determinar se a syscall "
+"é de 32 bits ou 64 bits (alterando o tamanho dos parâmetros), em seguida, os "
+"parâmetros são copiados, incluindo a syscall. Em seguida, a função da "
+"syscall real é executada com o processamento do código de retorno (casos "
+"especiais para erros `ERESTART` e `EJUSTRETURN`). Por fim, é agendado um "
+"`userret()`, alternando o processo de volta para o espaço do usuário. Os "
+"parâmetros para o manipulador da syscall real são passados na forma de "
+"`struct thread *td`, `struct syscall args *`, em que o segundo parâmetro é "
+"um ponteiro para a estrutura de parâmetros copiada."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:217
+#: documentation/content/en/articles/linux-emulation/_index.adoc:307
+#: documentation/content/en/articles/linux-emulation/_index.adoc:794
+#, no-wrap
+msgid "Traps"
+msgstr "Armadilhas (Traps)"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:224
+msgid ""
+"Handling of traps in FreeBSD is similar to the handling of syscalls. "
+"Whenever a trap occurs, an assembler handler is called. It is chosen "
+"between alltraps, alltraps with regs pushed or calltrap depending on the "
+"type of the trap. This handler prepares arguments for a call to a C "
+"function `trap()` (defined in [.filename]#sys/i386/i386/trap.c#), which then "
+"processes the occurred trap. After the processing it might send a signal to "
+"the process and/or exit to userland using `userret()`."
+msgstr ""
+"O tratamento de traps no FreeBSD é semelhante ao tratamento de syscalls. "
+"Sempre que ocorre uma trap, um manipulador em assembly é chamado. Ele é "
+"escolhido entre alltraps, alltraps com registradores empurrados ou calltrap, "
+"dependendo do tipo de trap. Esse manipulador prepara os argumentos para uma "
+"chamada à função em C `trap()` (definida em [.filename]#sys/i386/i386/trap."
+"c#), que então processa a trap ocorrida. Após o processamento, pode ser "
+"enviado um sinal para o processo e/ou retornar para o espaço do usuário "
+"usando `userret()`."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:226
+#: documentation/content/en/articles/linux-emulation/_index.adoc:312
+#, no-wrap
+msgid "Exits"
+msgstr "Saídas"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:230
+msgid ""
+"Exits from kernel to userspace happen using the assembler routine `doreti` "
+"regardless of whether the kernel was entered via a trap or via a syscall. "
+"This restores the program status from the stack and returns to the userspace."
+msgstr ""
+"As saídas do kernel para o espaço do usuário acontecem usando a rotina em "
+"assembly `doreti`, independentemente se o kernel foi acessado por uma "
+"interrupção (trap) ou por uma chamada de sistema. Isso restaura o status do "
+"programa da pilha e retorna para o espaço do usuário."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:232
+#: documentation/content/en/articles/linux-emulation/_index.adoc:318
+#, no-wrap
+msgid "UNIX(R) primitives"
+msgstr "Primitivas do UNIX(R)"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:238
+msgid ""
+"FreeBSD operating system adheres to the traditional UNIX(R) scheme, where "
+"every process has a unique identification number, the so called _PID_ "
+"(Process ID). PID numbers are allocated either linearly or randomly ranging "
+"from `0` to `PID_MAX`. The allocation of PID numbers is done using linear "
+"searching of PID space. Every thread in a process receives the same PID "
+"number as result of the man:getpid[2] call."
+msgstr ""
+"O sistema operacional FreeBSD adere ao esquema tradicional do UNIX(R), onde "
+"cada processo possui um número de identificação exclusivo, chamado de _PID_ "
+"(Process ID). Os números de PID são alocados linearmente ou aleatoriamente, "
+"variando de `0` a `PID_MAX`. A alocação dos números de PID é feita usando "
+"busca linear no espaço de PID. Cada thread em um processo recebe o mesmo "
+"número de PID como resultado da chamada do man:getpid[2]."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:249
+msgid ""
+"There are currently two ways to implement threading in FreeBSD. The first "
+"way is M:N threading followed by the 1:1 threading model. The default "
+"library used is M:N threading (`libpthread`) and you can switch at runtime "
+"to 1:1 threading (`libthr`). The plan is to switch to 1:1 library by "
+"default soon. Although those two libraries use the same kernel primitives, "
+"they are accessed through different API(es). The M:N library uses the "
+"`kse_*` family of syscalls while the 1:1 library uses the `thr_*` family of "
+"syscalls. Due to this, there is no general concept of thread ID shared "
+"between kernel and userspace. Of course, both threading libraries implement "
+"the pthread thread ID API. Every kernel thread (as described by `struct "
+"thread`) has td tid identifier but this is not directly accessible from "
+"userland and solely serves the kernel's needs. It is also used for 1:1 "
+"threading library as pthread's thread ID but handling of this is internal to "
+"the library and cannot be relied on."
+msgstr ""
+"Atualmente, existem duas maneiras de implementar threading no FreeBSD. A "
+"primeira maneira é a modelagem de threads M:N, seguida pelo modelo de thread "
+"1:1. A biblioteca padrão usada é a de thread M:N (`libpthread`), e você pode "
+"alternar em tempo de execução para a thread 1:1 (`libthr`). O plano é mudar "
+"em breve para a biblioteca 1:1 por padrão. Embora essas duas bibliotecas "
+"usem as mesmas primitivas do kernel, elas são acessadas por meio de APIs "
+"diferentes. A biblioteca M:N usa a família de syscalls `kse_*`, enquanto a "
+"biblioteca 1:1 usa a família de syscalls `thr_*`. Devido a isso, não há um "
+"conceito geral de ID de thread compartilhado entre o espaço do kernel e o "
+"espaço do usuário. Claro, ambas as bibliotecas de threads implementam a API "
+"de ID de thread pthread. Cada thread do kernel (conforme descrito por "
+"`struct thread`) tem um identificador `td tid`, mas isso não é acessível "
+"diretamente do espaço do usuário e serve exclusivamente às necessidades do "
+"kernel. Também é usado para a biblioteca de thread 1:1 como ID de thread "
+"pthread, mas o tratamento disso é interno à biblioteca e não se pode confiar."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:257
+msgid ""
+"As stated previously there are two implementations of threading in FreeBSD. "
+"The M:N library divides the work between kernel space and userspace. Thread "
+"is an entity that gets scheduled in the kernel but it can represent various "
+"number of userspace threads. M userspace threads get mapped to N kernel "
+"threads thus saving resources while keeping the ability to exploit "
+"multiprocessor parallelism. Further information about the implementation "
+"can be obtained from the man page or [1]. The 1:1 library directly maps a "
+"userland thread to a kernel thread thus greatly simplifying the scheme. "
+"None of these designs implement a fairness mechanism (such a mechanism was "
+"implemented but it was removed recently because it caused serious slowdown "
+"and made the code more difficult to deal with)."
+msgstr ""
+"Como mencionado anteriormente, existem duas implementações de threading no "
+"FreeBSD. A biblioteca M:N divide o trabalho entre o espaço do kernel e o "
+"espaço do usuário. Uma thread é uma entidade agendada no kernel, mas pode "
+"representar vários threads no espaço do usuário. M threads no espaço do "
+"usuário são mapeadas para N threads no kernel, economizando recursos e "
+"aproveitando o paralelismo de multiprocessadores. Mais informações sobre a "
+"implementação podem ser obtidas na página do manual ou [1]. A biblioteca 1:1 "
+"mapeia diretamente um thread do espaço do usuário para um thread do kernel, "
+"simplificando bastante o esquema. Nenhum desses designs implementa um "
+"mecanismo de justiça (um mecanismo desse tipo foi implementado, mas foi "
+"removido recentemente porque causava uma desaceleração significativa e "
+"tornava o código mais difícil de lidar)."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:259
+#, no-wrap
+msgid "What is Linux(R)"
+msgstr "O que é o Linux(R)"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:263
+msgid ""
+"Linux(R) is a UNIX(R)-like kernel originally developed by Linus Torvalds, "
+"and now being contributed to by a massive crowd of programmers all around "
+"the world. From its mere beginnings to today, with wide support from "
+"companies such as IBM or Google, Linux(R) is being associated with its fast "
+"development pace, full hardware support and benevolent dictator model of "
+"organization."
+msgstr ""
+"O Linux(R) é um kernel semelhante ao UNIX(R) originalmente desenvolvido por "
+"Linus Torvalds e que agora recebe contribuições de uma grande comunidade de "
+"programadores ao redor do mundo. Desde os seus humildes começos até os dias "
+"de hoje, com amplo suporte de empresas como IBM e Google, o Linux(R) é "
+"associado à sua rápida velocidade de desenvolvimento, suporte completo de "
+"hardware e modelo de organização com um ditador benevolente."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:267
+msgid ""
+"Linux(R) development started in 1991 as a hobbyist project at University of "
+"Helsinki in Finland. Since then it has obtained all the features of a "
+"modern UNIX(R)-like OS: multiprocessing, multiuser support, virtual memory, "
+"networking, basically everything is there. There are also highly advanced "
+"features like virtualization etc."
+msgstr ""
+"O desenvolvimento do Linux(R) começou em 1991 como um projeto de hobby na "
+"Universidade de Helsinki, na Finlândia. Desde então, ele adquiriu todas as "
+"características de um sistema operacional moderno semelhante ao UNIX(R): "
+"suporte a multiprocessamento, suporte a vários usuários, memória virtual, "
+"rede, basicamente tudo está presente. Existem também recursos altamente "
+"avançados, como virtualização, entre outros."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:270
+msgid ""
+"As of 2006 Linux(R) seems to be the most widely used open source operating "
+"system with support from independent software vendors like Oracle, "
+"RealNetworks, Adobe, etc. Most of the commercial software distributed for "
+"Linux(R) can only be obtained in a binary form so recompilation for other "
+"operating systems is impossible."
+msgstr ""
+"A partir de 2006, o Linux(R) parece ser o sistema operacional de código "
+"aberto mais amplamente utilizado, com suporte de fornecedores independentes "
+"de software como Oracle, RealNetworks, Adobe, etc. A maioria do software "
+"comercial distribuído para Linux(R) só está disponível em forma binária, "
+"tornando impossível a recompilação para outros sistemas operacionais."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:275
+msgid ""
+"Most of the Linux(R) development happens in a Git version control system. "
+"Git is a distributed system so there is no central source of the Linux(R) "
+"code, but some branches are considered prominent and official. The version "
+"number scheme implemented by Linux(R) consists of four numbers A.B.C.D. "
+"Currently development happens in 2.6.C.D, where C represents major version, "
+"where new features are added or changed while D is a minor version for "
+"bugfixes only."
+msgstr ""
+"A maioria do desenvolvimento do Linux(R) ocorre em um sistema de controle de "
+"versão chamado Git. O Git é um sistema distribuído, então não há uma fonte "
+"central do código do Linux(R), mas alguns branches são considerados "
+"proeminentes e oficiais. O esquema de numeração de versão implementado pelo "
+"Linux(R) consiste em quatro números A.B.C.D. Atualmente, o desenvolvimento "
+"ocorre na versão 2.6.C.D, onde C representa a versão principal, onde novos "
+"recursos são adicionados ou alterados, enquanto D é uma versão menor para "
+"correções de bugs apenas."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:277
+msgid "More information can be obtained from [3]."
+msgstr "Mais informações podem ser obtidas em [3]."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:286
+msgid ""
+"Linux(R) follows the traditional UNIX(R) scheme of dividing the run of a "
+"process in two halves: the kernel and user space. The kernel can be entered "
+"in two ways: via a trap or via a syscall. The return is handled only in one "
+"way. The further description applies to Linux(R) 2.6 on the i386(TM) "
+"architecture. This information was taken from [2]."
+msgstr ""
+"Linux(R) segue o esquema tradicional do UNIX(R) de dividir a execução de um "
+"processo em duas partes: o espaço do kernel e o espaço do usuário. O kernel "
+"pode ser acessado de duas maneiras: por meio de uma interrupção (trap) ou "
+"por meio de uma chamada de sistema (syscall). O retorno é tratado apenas de "
+"uma maneira. A descrição a seguir se aplica ao Linux(R) 2.6 na arquitetura "
+"i386(TM). Essas informações foram obtidas em [2]."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:296
+msgid ""
+"Syscalls in Linux(R) are performed (in userspace) using `syscallX` macros "
+"where X substitutes a number representing the number of parameters of the "
+"given syscall. This macro translates to a code that loads `%eax` register "
+"with a number of the syscall and executes interrupt `0x80`. After this "
+"syscall return is called, which translates negative return values to "
+"positive `errno` values and sets `res` to `-1` in case of an error. "
+"Whenever the interrupt `0x80` is called the process enters the kernel in "
+"system call trap handler. This routine saves all registers on the stack and "
+"calls the selected syscall entry. Note that the Linux(R) calling convention "
+"expects parameters to the syscall to be passed via registers as shown here:"
+msgstr ""
+"As chamadas de sistema no Linux(R) são realizadas (no espaço do usuário) "
+"usando macros `syscallX`, em que X substitui um número representando a "
+"quantidade de parâmetros da chamada de sistema específica. Essa macro é "
+"traduzida para um código que carrega o registro `%eax` com o número da "
+"chamada de sistema e executa a interrupção `0x80`. Após o retorno da chamada "
+"de sistema, é feita a chamada para tratar o retorno, que converte valores de "
+"retorno negativos em valores `errno` positivos e define `res` como `-1` em "
+"caso de erro. Sempre que a interrupção `0x80` é chamada, o processo entra no "
+"kernel no tratador de interrupção de chamada de sistema. Essa rotina salva "
+"todos os registros na pilha e chama a entrada da chamada de sistema "
+"selecionada. Observa-se que a convenção de chamada do Linux(R) espera que os "
+"parâmetros da chamada de sistema sejam passados via registros, como mostrado "
+"aqui:"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:298
+msgid "parameter -> `%ebx`"
+msgstr "parameter -> `%ebx`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:299
+msgid "parameter -> `%ecx`"
+msgstr "parameter -> `%ecx`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:300
+msgid "parameter -> `%edx`"
+msgstr "parameter -> `%edx`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:301
+msgid "parameter -> `%esi`"
+msgstr "parameter -> `%esi`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:302
+msgid "parameter -> `%edi`"
+msgstr "parameter -> `%edi`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:303
+msgid "parameter -> `%ebp`"
+msgstr "parameter -> `%ebp`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:305
+msgid ""
+"There are some exceptions to this, where Linux(R) uses different calling "
+"convention (most notably the `clone` syscall)."
+msgstr ""
+"Existem algumas exceções a isso, onde o Linux(R) usa convenções de chamada "
+"diferentes (a mais notável é a chamada de sistema `clone`)."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:310
+msgid ""
+"The trap handlers are introduced in [.filename]#arch/i386/kernel/traps.c# "
+"and most of these handlers live in [.filename]#arch/i386/kernel/entry.S#, "
+"where handling of the traps happens."
+msgstr ""
+"Os tratadores de exceção são introduzidos em [.filename]#arch/i386/kernel/"
+"traps.c# e a maioria desses tratadores ficam localizados em [.filename]#arch/"
+"i386/kernel/entry.S#, onde o tratamento das exceções ocorre."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:316
+msgid ""
+"Return from the syscall is managed by syscall man:exit[3], which checks for "
+"the process having unfinished work, then checks whether we used user-"
+"supplied selectors. If this happens stack fixing is applied and finally the "
+"registers are restored from the stack and the process returns to the "
+"userspace."
+msgstr ""
+"O retorno da chamada de sistema é gerenciado pela função `exit` do sistema, "
+"que verifica se o processo possui trabalho inacabado e, em seguida, verifica "
+"se foram utilizados seletores fornecidos pelo usuário. Se isso ocorrer, é "
+"aplicada uma correção de pilha e, finalmente, os registros são restaurados "
+"da pilha e o processo retorna ao espaço do usuário."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:327
+msgid ""
+"In the 2.6 version, the Linux(R) operating system redefined some of the "
+"traditional UNIX(R) primitives, notably PID, TID and thread. PID is defined "
+"not to be unique for every process, so for some processes (threads) man:"
+"getppid[2] returns the same value. Unique identification of process is "
+"provided by TID. This is because _NPTL_ (New POSIX(R) Thread Library) "
+"defines threads to be normal processes (so called 1:1 threading). Spawning "
+"a new process in Linux(R) 2.6 happens using the `clone` syscall (fork "
+"variants are reimplemented using it). This clone syscall defines a set of "
+"flags that affect behavior of the cloning process regarding thread "
+"implementation. The semantic is a bit fuzzy as there is no single flag "
+"telling the syscall to create a thread."
+msgstr ""
+"Na versão 2.6, o sistema operacional Linux(R) redefiniu algumas das "
+"primitivas tradicionais do UNIX(R), principalmente PID, TID e thread. O PID "
+"não é mais definido como único para cada processo, portanto, para alguns "
+"processos (threads), a função man:getppid[2] retorna o mesmo valor. A "
+"identificação única de um processo é fornecida pelo TID. Isso ocorre porque "
+"o _NPTL_ (New POSIX(R) Thread Library) define threads como processos normais "
+"(chamados de 1:1 threading). A criação de um novo processo no Linux(R) 2.6 "
+"ocorre usando a chamada de sistema `clone` (as variantes de fork são "
+"reimplementadas usando essa chamada). Essa chamada clone define um conjunto "
+"de flags que afetam o comportamento do processo clonado em relação à "
+"implementação de threads. A semântica é um pouco complexa, pois não há uma "
+"única flag que indique à chamada de sistema para criar uma thread."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:329
+msgid "Implemented clone flags are:"
+msgstr "Flags de clone implementados são:"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:331
+msgid "`CLONE_VM` - processes share their memory space"
+msgstr "`CLONE_VM` - os processos compartilham seu espaço de memória"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:332
+msgid "`CLONE_FS` - share umask, cwd and namespace"
+msgstr "`CLONE_FS` - compartilha umask, cwd e namespace"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:333
+msgid "`CLONE_FILES` - share open files"
+msgstr "`CLONE_FILES` - compartilha arquivos abertos"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:334
+msgid "`CLONE_SIGHAND` - share signal handlers and blocked signals"
+msgstr ""
+"`CLONE_SIGHAND` - compartilha manipuladores de sinal e sinais bloqueados"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:335
+msgid "`CLONE_PARENT` - share parent"
+msgstr "`CLONE_PARENT` - compartilha o processo pai"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:336
+msgid "`CLONE_THREAD` - be thread (further explanation below)"
+msgstr "`CLONE_THREAD` - ser uma thread (mais explicações abaixo)"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:337
+msgid "`CLONE_NEWNS` - new namespace"
+msgstr "`CLONE_NEWNS` - novo namespace"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:338
+msgid "`CLONE_SYSVSEM` - share SysV undo structures"
+msgstr "`CLONE_SYSVSEM` - compartilha estruturas de reversão SysV"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:339
+msgid "`CLONE_SETTLS` - setup TLS at supplied address"
+msgstr "`CLONE_SETTLS` - configura o TLS no endereço fornecido"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:340
+msgid "`CLONE_PARENT_SETTID` - set TID in the parent"
+msgstr "`CLONE_PARENT_SETTID` - define o TID (Thread ID) no processo pai"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:341
+msgid "`CLONE_CHILD_CLEARTID` - clear TID in the child"
+msgstr "`CLONE_CHILD_CLEARTID` - limpa o TID (Thread ID) no processo filho"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:342
+msgid "`CLONE_CHILD_SETTID` - set TID in the child"
+msgstr "`CLONE_CHILD_SETTID` - define o TID (Thread ID) no processo filho"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:348
+msgid ""
+"`CLONE_PARENT` sets the real parent to the parent of the caller. This is "
+"useful for threads because if thread A creates thread B we want thread B to "
+"be parented to the parent of the whole thread group. `CLONE_THREAD` does "
+"exactly the same thing as `CLONE_PARENT`, `CLONE_VM` and `CLONE_SIGHAND`, "
+"rewrites PID to be the same as PID of the caller, sets exit signal to be "
+"none and enters the thread group. `CLONE_SETTLS` sets up GDT entries for "
+"TLS handling. The `CLONE_*_*TID` set of flags sets/clears user supplied "
+"address to TID or 0."
+msgstr ""
+"A `CLONE_PARENT` define o pai real como o pai do chamador. Isso é útil para "
+"threads, porque se a thread A cria a thread B, queremos que a thread B tenha "
+"o mesmo pai do grupo de threads inteiro. A `CLONE_THREAD` faz exatamente a "
+"mesma coisa que `CLONE_PARENT`, `CLONE_VM` e `CLONE_SIGHAND`, reescreve o "
+"PID para ser o mesmo do chamador, define o sinal de saída como nenhum (none) "
+"e entra no grupo de threads. A `CLONE_SETTLS` configura as entradas do GDT "
+"(Global Descriptor Table) para manipulação de TLS (Thread Local Storage). O "
+"conjunto de flags `CLONE_*_*TID` define ou limpa o endereço fornecido pelo "
+"usuário para o TID ou 0."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:352
+msgid ""
+"As you can see the `CLONE_THREAD` does most of the work and does not seem to "
+"fit the scheme very well. The original intention is unclear (even for "
+"authors, according to comments in the code) but I think originally there was "
+"one threading flag, which was then parcelled among many other flags but this "
+"separation was never fully finished. It is also unclear what this partition "
+"is good for as glibc does not use that so only hand-written use of the clone "
+"permits a programmer to access this features."
+msgstr ""
+"Como você pode ver, o `CLONE_THREAD` faz a maior parte do trabalho e parece "
+"não se encaixar muito bem no esquema. A intenção original é incerta (até "
+"mesmo para os autores, de acordo com comentários no código), mas acredito "
+"que originalmente existia uma única flag de threading, que foi "
+"posteriormente dividida entre muitas outras flags, mas essa separação nunca "
+"foi totalmente concluída. Também não está claro para que serve essa "
+"partição, já que a glibc não a utiliza, então apenas o uso manual do clone "
+"permite que um programador acesse esses recursos."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:355
+msgid ""
+"For non-threaded programs the PID and TID are the same. For threaded "
+"programs the first thread PID and TID are the same and every created thread "
+"shares the same PID and gets assigned a unique TID (because `CLONE_THREAD` "
+"is passed in) also parent is shared for all processes forming this threaded "
+"program."
+msgstr ""
+"Para programas não-threaded, o PID e TID são os mesmos. Para programas "
+"threaded, o PID e TID da primeira thread são os mesmos, e cada thread criada "
+"compartilha o mesmo PID e recebe um TID único (porque `CLONE_THREAD` é "
+"passado), também o pai é compartilhado por todos os processos que formam "
+"esse programa threaded."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:357
+msgid ""
+"The code that implements man:pthread_create[3] in NPTL defines the clone "
+"flags like this:"
+msgstr ""
+"O código que implementa o man:pthread_create[3] em NPTL define as flags de "
+"clone da seguinte forma:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:361
+#, no-wrap
+msgid "int clone_flags = (CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGNAL\n"
+msgstr "int clone_flags = (CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGNAL\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:363
+#, no-wrap
+msgid " | CLONE_SETTLS | CLONE_PARENT_SETTID\n"
+msgstr " | CLONE_SETTLS | CLONE_PARENT_SETTID\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:366
+#, no-wrap
+msgid ""
+"| CLONE_CHILD_CLEARTID | CLONE_SYSVSEM\n"
+"#if __ASSUME_NO_CLONE_DETACHED == 0\n"
+msgstr ""
+"| CLONE_CHILD_CLEARTID | CLONE_SYSVSEM\n"
+"#if __ASSUME_NO_CLONE_DETACHED == 0\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:369
+#, no-wrap
+msgid ""
+"| CLONE_DETACHED\n"
+"#endif\n"
+msgstr ""
+"| CLONE_DETACHED\n"
+"#endif\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:371
+#, no-wrap
+msgid "| 0);\n"
+msgstr "| 0);\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:374
+msgid "The `CLONE_SIGNAL` is defined like"
+msgstr "A `CLONE_SIGNAL` é definida como"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:378
+#, no-wrap
+msgid "#define CLONE_SIGNAL (CLONE_SIGHAND | CLONE_THREAD)\n"
+msgstr "#define CLONE_SIGNAL (CLONE_SIGHAND | CLONE_THREAD)\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:381
+msgid "the last 0 means no signal is sent when any of the threads exits."
+msgstr ""
+"o último 0 significa que nenhum sinal é enviado quando qualquer uma das "
+"threads finaliza."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:383
+#, no-wrap
+msgid "What is emulation"
+msgstr "O que é emulação"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:388
+msgid ""
+"According to a dictionary definition, emulation is the ability of a program "
+"or device to imitate another program or device. This is achieved by "
+"providing the same reaction to a given stimulus as the emulated object. In "
+"practice, the software world mostly sees three types of emulation - a "
+"program used to emulate a machine (QEMU, various game console emulators "
+"etc.), software emulation of a hardware facility (OpenGL emulators, floating "
+"point units emulation etc.) and operating system emulation (either in kernel "
+"of the operating system or as a userspace program)."
+msgstr ""
+"De acordo com a definição de dicionário, emulação é a capacidade de um "
+"programa ou dispositivo imitar outro programa ou dispositivo. Isso é "
+"alcançado ao fornecer a mesma reação a um estímulo dado como o objeto "
+"emulado. Na prática, o mundo do software geralmente vê três tipos de "
+"emulação: um programa usado para emular uma máquina (QEMU, vários emuladores "
+"de consoles de jogos, etc.), emulação de software de uma funcionalidade de "
+"hardware (emuladores de OpenGL, emulação de unidades de ponto flutuante, "
+"etc.) e emulação de sistemas operacionais (seja no núcleo do sistema "
+"operacional ou como um programa no espaço do usuário)."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:395
+msgid ""
+"Emulation is usually used in a place, where using the original component is "
+"not feasible nor possible at all. For example someone might want to use a "
+"program developed for a different operating system than they use. Then "
+"emulation comes in handy. Sometimes there is no other way but to use "
+"emulation - e.g. when the hardware device you try to use does not exist (yet/"
+"anymore) then there is no other way but emulation. This happens often when "
+"porting an operating system to a new (non-existent) platform. Sometimes it "
+"is just cheaper to emulate."
+msgstr ""
+"A emulação é geralmente utilizada em situações em que não é viável ou "
+"possível utilizar o componente original. Por exemplo, alguém pode querer "
+"usar um programa desenvolvido para um sistema operacional diferente do que "
+"estão usando. Nesse caso, a emulação é útil. Às vezes, não há outra opção "
+"além da emulação - por exemplo, quando o dispositivo de hardware que você "
+"está tentando usar não existe (ainda/não mais), não há outra opção além da "
+"emulação. Isso ocorre com frequência ao portar um sistema operacional para "
+"uma plataforma nova (e inexistente). Às vezes, é apenas mais econômico "
+"utilizar a emulação."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:407
+msgid ""
+"Looking from an implementation point of view, there are two main approaches "
+"to the implementation of emulation. You can either emulate the whole thing "
+"- accepting possible inputs of the original object, maintaining inner state "
+"and emitting correct output based on the state and/or input. This kind of "
+"emulation does not require any special conditions and basically can be "
+"implemented anywhere for any device/program. The drawback is that "
+"implementing such emulation is quite difficult, time-consuming and error-"
+"prone. In some cases we can use a simpler approach. Imagine you want to "
+"emulate a printer that prints from left to right on a printer that prints "
+"from right to left. It is obvious that there is no need for a complex "
+"emulation layer but simply reversing of the printed text is sufficient. "
+"Sometimes the emulating environment is very similar to the emulated one so "
+"just a thin layer of some translation is necessary to provide fully working "
+"emulation! As you can see this is much less demanding to implement, so less "
+"time-consuming and error-prone than the previous approach. But the "
+"necessary condition is that the two environments must be similar enough. "
+"The third approach combines the two previous. Most of the time the objects "
+"do not provide the same capabilities so in a case of emulating the more "
+"powerful one on the less powerful we have to emulate the missing features "
+"with full emulation described above."
+msgstr ""
+"Olhando a partir de um ponto de vista de implementação, existem duas "
+"abordagens principais para a implementação da emulação. Você pode emular o "
+"objeto inteiro - aceitando possíveis entradas do objeto original, mantendo o "
+"estado interno e emitindo a saída correta com base no estado e/ou na "
+"entrada. Esse tipo de emulação não requer condições especiais e basicamente "
+"pode ser implementado em qualquer lugar para qualquer dispositivo/programa. "
+"A desvantagem é que a implementação de tal emulação é bastante difícil, "
+"demorada e propensa a erros. Em alguns casos, podemos usar uma abordagem "
+"mais simples. Imagine que você queira emular uma impressora que imprime da "
+"esquerda para a direita em uma impressora que imprime da direita para a "
+"esquerda. É óbvio que não há necessidade de uma camada de emulação complexa, "
+"apenas reverter o texto impresso é suficiente. Às vezes, o ambiente de "
+"emulação é muito semelhante ao ambiente emulado, então apenas uma fina "
+"camada de tradução é necessária para fornecer uma emulação totalmente "
+"funcional! Como você pode ver, isso é muito menos exigente de ser "
+"implementado, portanto, menos demorado e propenso a erros em comparação com "
+"a abordagem anterior. Mas a condição necessária é que os dois ambientes "
+"sejam suficientemente semelhantes. A terceira abordagem combina as duas "
+"anteriores. Na maioria das vezes, os objetos não fornecem as mesmas "
+"capacidades, então, ao emular um objeto mais poderoso em um objeto menos "
+"poderoso, temos que emular os recursos ausentes com emulação completa "
+"descrita anteriormente."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:410
+msgid ""
+"This master thesis deals with emulation of UNIX(R) on UNIX(R), which is "
+"exactly the case, where only a thin layer of translation is sufficient to "
+"provide full emulation. The UNIX(R) API consists of a set of syscalls, "
+"which are usually self contained and do not affect some global kernel state."
+msgstr ""
+"Esta tese de mestrado trata da emulação do UNIX(R) em UNIX(R), que é "
+"exatamente o caso em que apenas uma camada fina de tradução é suficiente "
+"para fornecer uma emulação completa. A API do UNIX(R) consiste em um "
+"conjunto de syscalls, que geralmente são autônomas e não afetam algum estado "
+"global do kernel."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:412
+msgid ""
+"There are a few syscalls that affect inner state but this can be dealt with "
+"by providing some structures that maintain the extra state."
+msgstr ""
+"Existem algumas syscalls que afetam o estado interno, mas isso pode ser "
+"resolvido fornecendo algumas estruturas que mantêm o estado extra."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:416
+msgid ""
+"No emulation is perfect and emulations tend to lack some parts but this "
+"usually does not cause any serious drawbacks. Imagine a game console "
+"emulator that emulates everything but music output. No doubt that the games "
+"are playable and one can use the emulator. It might not be that comfortable "
+"as the original game console but its an acceptable compromise between price "
+"and comfort."
+msgstr ""
+"Nenhuma emulação é perfeita e emulações tendem a ter algumas partes "
+"ausentes, mas isso geralmente não causa grandes inconvenientes. Imagine um "
+"emulador de console de jogos que emula tudo, exceto a saída de música. Sem "
+"dúvida, os jogos são jogáveis e é possível usar o emulador. Pode não ser tão "
+"confortável quanto o console de jogos original, mas é um compromisso "
+"aceitável entre preço e conforto."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:420
+msgid ""
+"The same goes with the UNIX(R) API. Most programs can live with a very "
+"limited set of syscalls working. Those syscalls tend to be the oldest ones "
+"(man:read[2]/man:write[2], man:fork[2] family, man:signal[3] handling, man:"
+"exit[3], man:socket[2] API) hence it is easy to emulate because their "
+"semantics is shared among all UNIX(R)es, which exist todays."
+msgstr ""
+"O mesmo acontece com a API do UNIX(R). A maioria dos programas pode "
+"funcionar com um conjunto muito limitado de syscalls. Essas syscalls tendem "
+"a ser as mais antigas (man:read[2]/man:write[2], família man:fork[2], "
+"manipulação de man:signal[3], man:exit[3], API man:socket[2]), o que torna "
+"mais fácil a emulação, pois sua semântica é compartilhada entre todos os "
+"sistemas UNIX(R) existentes hoje em dia."
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-emulation/_index.adoc:422
+#, no-wrap
+msgid "Emulation"
+msgstr "Emulação"
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:424
+#, no-wrap
+msgid "How emulation works in FreeBSD"
+msgstr "Como funciona a emulação no FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:429
+msgid ""
+"As stated earlier, FreeBSD supports running binaries from several other "
+"UNIX(R)es. This works because FreeBSD has an abstraction called the "
+"execution class loader. This wedges into the man:execve[2] syscall, so when "
+"man:execve[2] is about to execute a binary it examines its type."
+msgstr ""
+"Como mencionado anteriormente, o FreeBSD suporta a execução de binários de "
+"vários outros sistemas UNIX(R). Isso é possível porque o FreeBSD possui uma "
+"abstração chamada de \"execução do carregador de classe\" (execution class "
+"loader). Isso é inserido na chamada de sistema man:execve[2], então quando o "
+"man:execve[2] está prestes a executar um binário, ele examina o tipo do "
+"binário."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:435
+msgid ""
+"There are basically two types of binaries in FreeBSD. Shell-like text "
+"scripts which are identified by `#!` as their first two characters and "
+"normal (typically _ELF_) binaries, which are a representation of a compiled "
+"executable object. The vast majority (one could say all of them) of "
+"binaries in FreeBSD are from type ELF. ELF files contain a header, which "
+"specifies the OS ABI for this ELF file. By reading this information, the "
+"operating system can accurately determine what type of binary the given file "
+"is."
+msgstr ""
+"Existem basicamente dois tipos de binários no FreeBSD. Scripts de texto "
+"semelhantes a shell, que são identificados pelos primeiros dois caracteres "
+"`#!`, e binários normais (geralmente ELF), que são uma representação de um "
+"objeto executável compilado. A grande maioria (pode-se dizer que todos) os "
+"binários no FreeBSD são do tipo ELF. Os arquivos ELF contêm um cabeçalho que "
+"especifica a ABI do sistema operacional para este arquivo ELF. Lendo essa "
+"informação, o sistema operacional pode determinar com precisão qual é o tipo "
+"de arquivo binário."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:441
+msgid ""
+"Every OS ABI must be registered in the FreeBSD kernel. This applies to the "
+"FreeBSD native OS ABI, as well. So when man:execve[2] executes a binary it "
+"iterates through the list of registered APIs and when it finds the right one "
+"it starts to use the information contained in the OS ABI description (its "
+"syscall table, `errno` translation table, etc.). So every time the process "
+"calls a syscall, it uses its own set of syscalls instead of some global "
+"one. This effectively provides a very elegant and easy way of supporting "
+"execution of various binary formats."
+msgstr ""
+"Cada ABI de sistema operacional deve ser registrada no kernel do FreeBSD. "
+"Isso também se aplica à ABI nativa do FreeBSD. Portanto, quando o man:"
+"execve[2] executa um binário, ele itera pela lista de APIs registradas e, "
+"quando encontra a correspondente, começa a usar as informações contidas na "
+"descrição da ABI do sistema operacional (sua tabela de syscalls, tabela de "
+"tradução de `errno`, etc.). Portanto, cada vez que o processo chama uma "
+"syscall, ele usa seu próprio conjunto de syscalls em vez de um conjunto "
+"global. Isso fornece uma maneira muito elegante e fácil de oferecer suporte "
+"à execução de vários formatos binários."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:446
+msgid ""
+"The nature of emulation of different OSes (and also some other subsystems) "
+"led developers to invite a handler event mechanism. There are various "
+"places in the kernel, where a list of event handlers are called. Every "
+"subsystem can register an event handler and they are called accordingly. "
+"For example, when a process exits there is a handler called that possibly "
+"cleans up whatever the subsystem needs to be cleaned."
+msgstr ""
+"A natureza da emulação de diferentes sistemas operacionais (e também de "
+"outros subsistemas) levou os desenvolvedores a adotarem um mecanismo de "
+"tratamento de eventos. Existem vários pontos no kernel em que uma lista de "
+"manipuladores de eventos é chamada. Cada subsistema pode registrar um "
+"manipulador de evento e eles são chamados de acordo. Por exemplo, quando um "
+"processo é encerrado, é chamado um manipulador que possivelmente realiza a "
+"limpeza necessária no subsistema."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:448
+msgid ""
+"Those simple facilities provide basically everything that is needed for the "
+"emulation infrastructure and in fact these are basically the only things "
+"necessary to implement the Linux(R) emulation layer."
+msgstr ""
+"Essas facilidades simples fornecem basicamente tudo o que é necessário para "
+"a infraestrutura de emulação e, na verdade, são basicamente as únicas coisas "
+"necessárias para implementar a camada de emulação do Linux(R)."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:450
+#, no-wrap
+msgid "Common primitives in the FreeBSD kernel"
+msgstr "Primitivas comuns no kernel do FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:454
+msgid ""
+"Emulation layers need some support from the operating system. I am going to "
+"describe some of the supported primitives in the FreeBSD operating system."
+msgstr ""
+"As camadas de emulação precisam de suporte por parte do sistema operacional. "
+"Vou descrever alguns dos primitivos suportados no sistema operacional "
+"FreeBSD."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:456
+#, no-wrap
+msgid "Locking primitives"
+msgstr "Primitivas de Bloqueio"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:459
+msgid "Contributed by: `{attilio}`"
+msgstr "Contribuído por: `{attilio}`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:461
+msgid ""
+"The FreeBSD synchronization primitive set is based on the idea to supply a "
+"rather huge number of different primitives in a way that the better one can "
+"be used for every particular, appropriate situation."
+msgstr ""
+"O conjunto de primitivas de sincronização do FreeBSD é baseado na idéia de "
+"fornecer um grande número de diferentes primitivas de uma maneira que a "
+"melhor possa ser usada para cada situação específica e apropriada."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:463
+msgid ""
+"To a high level point of view you can consider three kinds of "
+"synchronization primitives in the FreeBSD kernel:"
+msgstr ""
+"Para um ponto de vista de alto nível, você pode considerar três tipos de "
+"primitivas de sincronização no kernel do FreeBSD:"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:465
+msgid "atomic operations and memory barriers"
+msgstr "operações atômicas e barreiras de memória"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:466
+msgid "locks"
+msgstr "locks"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:467
+msgid "scheduling barriers"
+msgstr "barreiras de agendamento"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:470
+msgid ""
+"Below there are descriptions for the 3 families. For every lock, you should "
+"really check the linked manpage (where possible) for more detailed "
+"explanations."
+msgstr ""
+"Abaixo estão as descrições das 3 famílias. Para cada trava, é recomendado "
+"verificar a página do manual vinculada (quando possível) para obter "
+"explicações mais detalhadas."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:472
+#, no-wrap
+msgid "Atomic operations and memory barriers"
+msgstr "Operações atômicas e barreiras de memória"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:483
+msgid ""
+"Atomic operations are implemented through a set of functions performing "
+"simple arithmetics on memory operands in an atomic way with respect to "
+"external events (interrupts, preemption, etc.). Atomic operations can "
+"guarantee atomicity just on small data types (in the magnitude order of the "
+"`.long.` architecture C data type), so should be rarely used directly in the "
+"end-level code, if not only for very simple operations (like flag setting in "
+"a bitmap, for example). In fact, it is rather simple and common to write "
+"down a wrong semantic based on just atomic operations (usually referred as "
+"lock-less). The FreeBSD kernel offers a way to perform atomic operations in "
+"conjunction with a memory barrier. The memory barriers will guarantee that "
+"an atomic operation will happen following some specified ordering with "
+"respect to other memory accesses. For example, if we need that an atomic "
+"operation happen just after all other pending writes (in terms of "
+"instructions reordering buffers activities) are completed, we need to "
+"explicitly use a memory barrier in conjunction to this atomic operation. So "
+"it is simple to understand why memory barriers play a key role for higher-"
+"level locks building (just as refcounts, mutexes, etc.). For a detailed "
+"explanatory on atomic operations, please refer to man:atomic[9]. It is far, "
+"however, noting that atomic operations (and memory barriers as well) should "
+"ideally only be used for building front-ending locks (as mutexes)."
+msgstr ""
+"As operações atômicas são implementadas por meio de um conjunto de funções "
+"que realizam operações aritméticas simples em operandos de memória de "
+"maneira atômica em relação a eventos externos (interrupções, preempção, "
+"etc.). As operações atômicas podem garantir atomicidade apenas em tipos de "
+"dados pequenos (da ordem de magnitude do tipo de dados C `.long.` da "
+"arquitetura), portanto, devem ser raramente usadas diretamente no código de "
+"nível final, a menos que seja apenas para operações muito simples (como "
+"definir uma bandeira em um bitmap, por exemplo). Na verdade, é bastante "
+"simples e comum escrever uma semântica errada baseada apenas em operações "
+"atômicas (geralmente referidas como \"sem bloqueio\"). O kernel do FreeBSD "
+"oferece uma maneira de realizar operações atômicas em conjunto com uma "
+"barreira de memória. As barreiras de memória garantem que uma operação "
+"atômica ocorra seguindo alguma ordem especificada em relação a outros "
+"acessos à memória. Por exemplo, se precisamos que uma operação atômica "
+"ocorra logo após todas as gravações pendentes (em termos de reordenação de "
+"instruções nos buffers) sejam concluídas, precisamos usar explicitamente uma "
+"barreira de memória em conjunto com essa operação atômica. Portanto, é fácil "
+"entender por que as barreiras de memória desempenham um papel fundamental na "
+"construção de travas de nível superior (como refcount, mutexes, etc.). Para "
+"uma explicação detalhada sobre as operações atômicas, consulte o man:"
+"atomic[9]. No entanto, é importante notar que as operações atômicas (assim "
+"como as barreiras de memória) idealmente devem ser usadas apenas para a "
+"construção de travas de nível superior (como mutexes)."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:485
+#, no-wrap
+msgid "Refcounts"
+msgstr "Refcounts"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:491
+msgid ""
+"Refcounts are interfaces for handling reference counters. They are "
+"implemented through atomic operations and are intended to be used just for "
+"cases, where the reference counter is the only one thing to be protected, so "
+"even something like a spin-mutex is deprecated. Using the refcount "
+"interface for structures, where a mutex is already used is often wrong since "
+"we should probably close the reference counter in some already protected "
+"paths. A manpage discussing refcount does not exist currently, just check [."
+"filename]#sys/refcount.h# for an overview of the existing API."
+msgstr ""
+"Refcounts são interfaces para lidar com contadores de referência. Eles são "
+"implementados por meio de operações atômicas e destinam-se a serem usados "
+"apenas em casos em que o contador de referência é a única coisa a ser "
+"protegida, então até mesmo algo como um spin-mutex é considerado obsoleto. O "
+"uso da interface refcount para estruturas em que já é usado um mutex "
+"geralmente está incorreto, pois provavelmente devemos fechar o contador de "
+"referência em algum caminho já protegido. Atualmente, não existe uma página "
+"de manual que discuta refcount, apenas verifique [.filename]#sys/refcount.h# "
+"para obter uma visão geral da API existente."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:493
+#, no-wrap
+msgid "Locks"
+msgstr "Locks"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:498
+msgid ""
+"FreeBSD kernel has huge classes of locks. Every lock is defined by some "
+"peculiar properties, but probably the most important is the event linked to "
+"contesting holders (or in other terms, the behavior of threads unable to "
+"acquire the lock). FreeBSD's locking scheme presents three different "
+"behaviors for contenders:"
+msgstr ""
+"O kernel do FreeBSD possui várias classes de locks. Cada lock é definido por "
+"algumas propriedades específicas, mas provavelmente a mais importante é o "
+"evento vinculado aos detentores em disputa (ou em outras palavras, o "
+"comportamento das threads incapazes de adquirir o lock). O esquema de "
+"locking do FreeBSD apresenta três comportamentos diferentes para os "
+"contendores:"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:500
+msgid "spinning"
+msgstr "spinning"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:501
+msgid "blocking"
+msgstr "blocking"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:502
+msgid "sleeping"
+msgstr "sleeping"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:506
+msgid "numbers are not casual"
+msgstr "números não são casuais"
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:509
+#, no-wrap
+msgid "Spinning locks"
+msgstr "Spinning locks"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:515
+msgid ""
+"Spin locks let waiters to spin until they cannot acquire the lock. An "
+"important matter do deal with is when a thread contests on a spin lock if it "
+"is not descheduled. Since the FreeBSD kernel is preemptive, this exposes "
+"spin lock at the risk of deadlocks that can be solved just disabling "
+"interrupts while they are acquired. For this and other reasons (like lack "
+"of priority propagation support, poorness in load balancing schemes between "
+"CPUs, etc.), spin locks are intended to protect very small paths of code, or "
+"ideally not to be used at all if not explicitly requested (explained later)."
+msgstr ""
+"Spin locks permitem que os aguardantes fiquem girando em um loop até que não "
+"possam adquirir o lock. Uma questão importante a lidar é quando uma thread "
+"disputa um spin lock se ela não for despachada. Como o kernel do FreeBSD é "
+"preemptivo, isso expõe o spin lock ao risco de deadlocks que podem ser "
+"resolvidos desabilitando as interrupções enquanto eles são adquiridos. Por "
+"esse e outros motivos (como a falta de suporte à propagação de prioridade, "
+"deficiência em esquemas de balanceamento de carga entre CPUs, etc.), os spin "
+"locks são destinados a proteger trechos muito pequenos de código, ou "
+"idealmente não devem ser usados se não forem explicitamente solicitados "
+"(explicado posteriormente)."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:517
+#, no-wrap
+msgid "Blocking"
+msgstr "Bloqueio"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:522
+#, fuzzy
+#| msgid ""
+#| "Block locks let waiters to be descheduled and blocked until the lock "
+#| "owner does not drop it and wakes up one or more contenders. In order to "
+#| "avoid starvation issues, blocking locks do priority propagation from the "
+#| "waiters to the owner. Block locks must be implemented through the "
+#| "turnstile interface and are intended to be the most used kind of locks in "
+#| "the kernel, if no particular conditions are met."
+msgid ""
+"Block locks let waiters to be descheduled and blocked until the lock owner "
+"does not drop it and wakes up one or more contenders. To avoid starvation "
+"issues, blocking locks do priority propagation from the waiters to the "
+"owner. Block locks must be implemented through the turnstile interface and "
+"are intended to be the most used kind of locks in the kernel, if no "
+"particular conditions are met."
+msgstr ""
+"Os block locks permitem que os waiters sejam despachados e bloqueados até "
+"que o proprietário do lock o libere e acorde um ou mais contendores. Para "
+"evitar problemas de inanição (starvation), os blocking locks realizam a "
+"propagação de prioridade dos aguardantes para o proprietário. Os block locks "
+"devem ser implementados por meio da interface de turnstile e são destinadas "
+"a ser o tipo de lock mais utilizado no kernel, se nenhuma condição "
+"particular for atendida."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:524
+#, no-wrap
+msgid "Sleeping"
+msgstr "Sleeping"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:529
+msgid ""
+"Sleep locks let waiters to be descheduled and fall asleep until the lock "
+"holder does not drop it and wakes up one or more waiters. Since sleep locks "
+"are intended to protect large paths of code and to cater asynchronous "
+"events, they do not do any form of priority propagation. They must be "
+"implemented through the man:sleepqueue[9] interface."
+msgstr ""
+"As travas de suspensão (sleep locks) permitem que os processos em espera "
+"sejam despachados (descheduled ) e adormeçam até que o detentor da trava a "
+"solte e acorde um ou mais processos em espera. Como as travas de suspensão "
+"são projetadas para proteger grandes trechos de código e lidar com eventos "
+"assíncronos, elas não realizam qualquer forma de propagação de prioridade. "
+"Elas devem ser implementadas por meio da interface man:sleepqueue[9]."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:533
+msgid ""
+"The order used to acquire locks is very important, not only for the "
+"possibility to deadlock due at lock order reversals, but even because lock "
+"acquisition should follow specific rules linked to locks natures. If you "
+"give a look at the table above, the practical rule is that if a thread holds "
+"a lock of level n (where the level is the number listed close to the kind of "
+"lock) it is not allowed to acquire a lock of superior levels, since this "
+"would break the specified semantic for a path. For example, if a thread "
+"holds a block lock (level 2), it is allowed to acquire a spin lock (level 1) "
+"but not a sleep lock (level 3), since block locks are intended to protect "
+"smaller paths than sleep lock (these rules are not about atomic operations "
+"or scheduling barriers, however)."
+msgstr ""
+"A ordem usada para adquirir locks é muito importante, não apenas devido à "
+"possibilidade de deadlock devido a inversões na ordem dos locks, mas também "
+"porque a aquisição de locks deve seguir regras específicas relacionadas às "
+"naturezas dos locks. Se você observar a tabela acima, a regra prática é que "
+"se um thread possui um lock de nível n (onde o nível é o número listado "
+"próximo ao tipo de lock), ele não pode adquirir um lock de níveis "
+"superiores, pois isso quebraria a semântica especificada para um determinado "
+"caminho. Por exemplo, se um thread possui um bloqueio de bloqueio (nível 2), "
+"é permitido adquirir um lock de rotação (nível 1), mas não um lock de "
+"suspensão (nível 3), pois os bloqueios de bloqueio são destinados a proteger "
+"caminhos menores do que os bloqueios de suspensão (essas regras não se "
+"aplicam a operações atômicas ou barreiras de agendamento, no entanto)."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:535
+msgid "This is a list of lock with their respective behaviors:"
+msgstr "Esta é uma lista de bloqueio com seus respectivos comportamentos:"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:537
+msgid "spin mutex - spinning - man:mutex[9]"
+msgstr "spin mutex - girando - man:mutex[9]"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:538
+msgid "sleep mutex - blocking - man:mutex[9]"
+msgstr "Sleep mutex - bloqueio - man:mutex[9]"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:539
+msgid "pool mutex - blocking - man:mtx[pool]"
+msgstr "pool mutex - blocking - man:mtx[pool]"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:540
+msgid ""
+"sleep family - sleeping - man:sleep[9] pause tsleep msleep msleep spin "
+"msleep rw msleep sx"
+msgstr ""
+"A família de funções de suspensão (sleep family) - sleeping - man:sleep[9] "
+"pause tsleep msleep msleep spin msleep rw msleep sx"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:541
+msgid "condvar - sleeping - man:condvar[9]"
+msgstr "condvar - sleeping - man:condvar[9]"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:542
+msgid "rwlock - blocking - man:rwlock[9]"
+msgstr "rwlock - blocking - man:rwlock[9]"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:543
+msgid "sxlock - sleeping - man:sx[9]"
+msgstr "sxlock - sleeping - man:sx[9]"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:544
+msgid "lockmgr - sleeping - man:lockmgr[9]"
+msgstr "lockmgr - sleeping - man:lockmgr[9]"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:545
+msgid "semaphores - sleeping - man:sema[9]"
+msgstr "semáforos - sleeping - man:sema[9]"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:547
+msgid ""
+"Among these locks only mutexes, sxlocks, rwlocks and lockmgrs are intended "
+"to handle recursion, but currently recursion is only supported by mutexes "
+"and lockmgrs."
+msgstr ""
+"Entre esses bloqueios, apenas mutexes, sxlocks, rwlocks e lockmgrs são "
+"destinados a tratar recursão, mas atualmente a recursão é suportada apenas "
+"por mutexes e lockmgrs."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:549
+#, no-wrap
+msgid "Scheduling barriers"
+msgstr "Barreiras de agendamento"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:553
+#, fuzzy
+#| msgid ""
+#| "Scheduling barriers are intended to be used in order to drive scheduling "
+#| "of threading. They consist mainly of three different stubs:"
+msgid ""
+"Scheduling barriers are intended to be used to drive scheduling of "
+"threading. They consist mainly of three different stubs:"
+msgstr ""
+"As barreiras de agendamento são destinadas a serem usadas para controlar o "
+"agendamento de threads. Elas consistem principalmente em três tipos "
+"diferentes de stubs (trechos de código):"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:555
+msgid "critical sections (and preemption)"
+msgstr "seções críticas (e preempção)"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:556
+msgid "sched_bind"
+msgstr "sched_bind"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:557
+msgid "sched_pin"
+msgstr "sched_pin"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:559
+msgid ""
+"Generally, these should be used only in a particular context and even if "
+"they can often replace locks, they should be avoided because they do not let "
+"the diagnose of simple eventual problems with locking debugging tools (as "
+"man:witness[4])."
+msgstr ""
+"Em geral, esses devem ser usados apenas em um contexto específico e, mesmo "
+"que possam substituir bloqueios em muitos casos, eles devem ser evitados "
+"porque não permitem diagnosticar problemas simples com ferramentas de "
+"depuração de bloqueio (como man:witness[4])."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:561
+#, no-wrap
+msgid "Critical sections"
+msgstr "Seções críticas"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:569
+#, fuzzy
+#| msgid ""
+#| "The FreeBSD kernel has been made preemptive basically to deal with "
+#| "interrupt threads. In fact, in order to avoid high interrupt latency, "
+#| "time-sharing priority threads can be preempted by interrupt threads (in "
+#| "this way, they do not need to wait to be scheduled as the normal path "
+#| "previews). Preemption, however, introduces new racing points that need "
+#| "to be handled, as well. Often, in order to deal with preemption, the "
+#| "simplest thing to do is to completely disable it. A critical section "
+#| "defines a piece of code (borderlined by the pair of functions man:"
+#| "critical_enter[9] and man:critical_exit[9], where preemption is "
+#| "guaranteed to not happen (until the protected code is fully executed). "
+#| "This can often replace a lock effectively but should be used carefully in "
+#| "order to not lose the whole advantage that preemption brings."
+msgid ""
+"The FreeBSD kernel has been made preemptive basically to deal with interrupt "
+"threads. In fact, to avoid high interrupt latency, time-sharing priority "
+"threads can be preempted by interrupt threads (in this way, they do not need "
+"to wait to be scheduled as the normal path previews). Preemption, however, "
+"introduces new racing points that need to be handled, as well. Often, to "
+"deal with preemption, the simplest thing to do is to completely disable it. "
+"A critical section defines a piece of code (borderlined by the pair of "
+"functions man:critical_enter[9] and man:critical_exit[9], where preemption "
+"is guaranteed to not happen (until the protected code is fully executed). "
+"This can often replace a lock effectively but should be used carefully to "
+"not lose the whole advantage that preemption brings."
+msgstr ""
+"O kernel do FreeBSD foi tornado preemptivo principalmente para lidar com "
+"threads de interrupção. Na verdade, para evitar latência alta de "
+"interrupção, threads de prioridade de tempo compartilhado podem ser "
+"preemptadas por threads de interrupção (assim, elas não precisam esperar "
+"para serem agendadas como no caminho normal). No entanto, a preempção "
+"introduz novos pontos de corrida que também precisam ser tratados. "
+"Frequentemente, para lidar com a preempção, a coisa mais simples a se fazer "
+"é desabilitá-la completamente. Uma seção crítica define um trecho de código "
+"(delimitado pelo par de funções `critical_enter` e `critical_exit`) onde a "
+"preempção é garantida de não ocorrer (até que o código protegido seja "
+"totalmente executado). Isso muitas vezes pode substituir efetivamente um "
+"bloqueio, mas deve ser usado com cuidado para não perder todas as vantagens "
+"que a preempção traz."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:571
+#, no-wrap
+msgid "sched_pin/sched_unpin"
+msgstr "sched_pin/sched_unpin"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:577
+msgid ""
+"Another way to deal with preemption is the `sched_pin()` interface. If a "
+"piece of code is closed in the `sched_pin()` and `sched_unpin()` pair of "
+"functions it is guaranteed that the respective thread, even if it can be "
+"preempted, it will always be executed on the same CPU. Pinning is very "
+"effective in the particular case when we have to access at per-cpu datas and "
+"we assume other threads will not change those data. The latter condition "
+"will determine a critical section as a too strong condition for our code."
+msgstr ""
+"Outra forma de lidar com a preempção é a interface `sched_pin()`. Se um "
+"trecho de código é envolvido pelas funções `sched_pin()` e `sched_unpin()`, "
+"é garantido que a respectiva thread, mesmo que possa ser preemptada, será "
+"sempre executada na mesma CPU. Fixar (pinning) é muito efetivo no caso "
+"particular em que precisamos acessar dados específicos de cada CPU e "
+"assumimos que outras threads não alterarão esses dados. A última condição "
+"determinará uma seção crítica como uma condição muito rigorosa para nosso "
+"código."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:579
+#, no-wrap
+msgid "sched_bind/sched_unbind"
+msgstr "sched_bind/sched_unbind"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:584
+#, fuzzy
+#| msgid ""
+#| "`sched_bind` is an API used in order to bind a thread to a particular CPU "
+#| "for all the time it executes the code, until a `sched_unbind` function "
+#| "call does not unbind it. This feature has a key role in situations where "
+#| "you cannot trust the current state of CPUs (for example, at very early "
+#| "stages of boot), as you want to avoid your thread to migrate on inactive "
+#| "CPUs. Since `sched_bind` and `sched_unbind` manipulate internal "
+#| "scheduler structures, they need to be enclosed in `sched_lock` "
+#| "acquisition/releasing when used."
+msgid ""
+"`sched_bind` is an API used to bind a thread to a particular CPU for all the "
+"time it executes the code, until a `sched_unbind` function call does not "
+"unbind it. This feature has a key role in situations where you cannot trust "
+"the current state of CPUs (for example, at very early stages of boot), as "
+"you want to avoid your thread to migrate on inactive CPUs. Since "
+"`sched_bind` and `sched_unbind` manipulate internal scheduler structures, "
+"they need to be enclosed in `sched_lock` acquisition/releasing when used."
+msgstr ""
+"O `sched_bind` é uma API usada para vincular uma thread a uma CPU específica "
+"durante todo o tempo em que ela executa o código, até que uma chamada da "
+"função `sched_unbind` a desvincule. Essa funcionalidade desempenha um papel "
+"importante em situações em que você não pode confiar no estado atual das "
+"CPUs (por exemplo, nas primeiras etapas de inicialização), pois deseja "
+"evitar que sua thread migre para CPUs inativas. Como o `sched_bind` e o "
+"`sched_unbind` manipulam estruturas internas do escalonador, eles devem ser "
+"envolvidos na aquisição/liberação do `sched_lock` ao serem usados."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:586
+#, no-wrap
+msgid "Proc structure"
+msgstr "Estrutura Proc"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:592
+msgid ""
+"Various emulation layers sometimes require some additional per-process "
+"data. It can manage separate structures (a list, a tree etc.) containing "
+"these data for every process but this tends to be slow and memory "
+"consuming. To solve this problem the FreeBSD `proc` structure contains "
+"`p_emuldata`, which is a void pointer to some emulation layer specific "
+"data. This `proc` entry is protected by the proc mutex."
+msgstr ""
+"Em algumas camadas de emulação, às vezes é necessário ter dados adicionais "
+"específicos para cada processo. Pode-se gerenciar estruturas separadas (como "
+"uma lista, uma árvore etc.) que contenham esses dados para cada processo, "
+"mas isso pode ser lento e consumir muita memória. Para resolver esse "
+"problema, a estrutura `proc` do FreeBSD contém o campo `p_emuldata`, que é "
+"um ponteiro vazio para dados específicos da camada de emulação. Essa entrada "
+"`proc` é protegida pelo mutex do processo."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:597
+msgid ""
+"The FreeBSD `proc` structure contains a `p_sysent` entry that identifies, "
+"which ABI this process is running. In fact, it is a pointer to the "
+"`sysentvec` described above. So by comparing this pointer to the address "
+"where the `sysentvec` structure for the given ABI is stored we can "
+"effectively determine whether the process belongs to our emulation layer. "
+"The code typically looks like:"
+msgstr ""
+"A estrutura `proc` do FreeBSD contém uma entrada `p_sysent` que identifica "
+"qual ABI esse processo está executando. Na verdade, é um ponteiro para a "
+"estrutura `sysentvec` descrita anteriormente. Portanto, ao comparar esse "
+"ponteiro com o endereço onde a estrutura `sysentvec` para a ABI específica "
+"está armazenada, podemos determinar efetivamente se o processo pertence à "
+"nossa camada de emulação. O código geralmente se parece com:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:602
+#, no-wrap
+msgid ""
+"if (__predict_true(p->p_sysent != &elf_Linux(R)_sysvec))\n"
+"\t return;\n"
+msgstr ""
+"if (__predict_true(p->p_sysent != &elf_Linux(R)_sysvec))\n"
+"\t return;\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:606
+msgid ""
+"As you can see, we effectively use the `__predict_true` modifier to collapse "
+"the most common case (FreeBSD process) to a simple return operation thus "
+"preserving high performance. This code should be turned into a macro "
+"because currently it is not very flexible, i.e. we do not support Linux(R)64 "
+"emulation nor A.OUT Linux(R) processes on i386."
+msgstr ""
+"Como você pode ver, usamos efetivamente o modificador `__predict_true` para "
+"colapsar o caso mais comum (processo FreeBSD) em uma simples operação de "
+"retorno, preservando assim o alto desempenho. Esse código deve ser "
+"transformado em uma macro porque atualmente não é muito flexível, ou seja, "
+"não suportamos emulação Linux(R)64 nem processos Linux(R) A.OUT em i386."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:608
+#, no-wrap
+msgid "VFS"
+msgstr "VFS"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:617
+msgid ""
+"The FreeBSD VFS subsystem is very complex but the Linux(R) emulation layer "
+"uses just a small subset via a well defined API. It can either operate on "
+"vnodes or file handlers. Vnode represents a virtual vnode, i.e. "
+"representation of a node in VFS. Another representation is a file handler, "
+"which represents an opened file from the perspective of a process. A file "
+"handler can represent a socket or an ordinary file. A file handler contains "
+"a pointer to its vnode. More then one file handler can point to the same "
+"vnode."
+msgstr ""
+"O subsistema VFS do FreeBSD é muito complexo, mas a camada de emulação do "
+"Linux(R) utiliza apenas um pequeno subconjunto por meio de uma API bem "
+"definida. Ela pode operar em vnodes ou manipuladores de arquivo. Vnode "
+"representa um vnode virtual, ou seja, uma representação de um nó no VFS. "
+"Outra representação é um manipulador de arquivo, que representa um arquivo "
+"aberto do ponto de vista de um processo. Um manipulador de arquivo pode "
+"representar um socket ou um arquivo comum. Um manipulador de arquivo contém "
+"um ponteiro para seu vnode. Mais de um manipulador de arquivo pode apontar "
+"para o mesmo vnode."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:619
+#, no-wrap
+msgid "namei"
+msgstr "namei"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:626
+msgid ""
+"The man:namei[9] routine is a central entry point to pathname lookup and "
+"translation. It traverses the path point by point from the starting point "
+"to the end point using lookup function, which is internal to VFS. The man:"
+"namei[9] syscall can cope with symlinks, absolute and relative paths. When "
+"a path is looked up using man:namei[9] it is inputed to the name cache. This "
+"behavior can be suppressed. This routine is used all over the kernel and "
+"its performance is very critical."
+msgstr ""
+"A rotina man:namei[9] é um ponto de entrada central para a pesquisa e "
+"tradução de caminhos de nomes. Ela percorre o caminho ponto a ponto, do "
+"ponto de partida ao ponto final, usando a função de pesquisa, que é interna "
+"ao VFS. A chamada man:namei[9] pode lidar com links simbólicos, caminhos "
+"absolutos e relativos. Quando um caminho é pesquisado usando man:namei[9], "
+"ele é inserido no cache de nomes. Esse comportamento pode ser suprimido. "
+"Essa rotina é usada em todo o kernel e seu desempenho é muito crítico."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:628
+#, no-wrap
+msgid "vn_fullpath"
+msgstr "vn_fullpath"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:634
+msgid ""
+"The man:vn_fullpath[9] function takes the best effort to traverse VFS name "
+"cache and returns a path for a given (locked) vnode. This process is "
+"unreliable but works just fine for the most common cases. The unreliability "
+"is because it relies on VFS cache (it does not traverse the on medium "
+"structures), it does not work with hardlinks, etc. This routine is used in "
+"several places in the Linuxulator."
+msgstr ""
+"A função man:vn_fullpath[9] faz o melhor esforço para percorrer o cache de "
+"nomes do VFS e retorna um caminho para um vnode específico (bloqueado). Esse "
+"processo é não confiável, mas funciona muito bem na maioria dos casos "
+"comuns. A falta de confiabilidade ocorre porque ela depende do cache do VFS "
+"(não percorre as estruturas no meio físico) e não funciona com links "
+"rígidos, entre outras limitações. Essa rotina é usada em vários lugares no "
+"Linuxulator."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:636
+#, no-wrap
+msgid "Vnode operations"
+msgstr "Operações de vnode"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:639
+msgid ""
+"`fgetvp` - given a thread and a file descriptor number it returns the "
+"associated vnode"
+msgstr ""
+"`fgetvp` - dado um thread e um número de descritor de arquivo, ele retorna o "
+"vnode associado"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:640
+msgid "man:vn_lock[9] - locks a vnode"
+msgstr "man:vn_lock[9] - bloqueia um vnode"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:641
+msgid "`vn_unlock` - unlocks a vnode"
+msgstr "`vn_unlock` - desbloqueia um vnode"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:642
+msgid "man:VOP_READDIR[9] - reads a directory referenced by a vnode"
+msgstr "man:VOP_READDIR[9] - lê um diretório referenciado por um vnode"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:643
+msgid ""
+"man:VOP_GETATTR[9] - gets attributes of a file or a directory referenced by "
+"a vnode"
+msgstr ""
+"man:VOP_GETATTR[9] - obtém atributos de um arquivo ou diretório referenciado "
+"por um vnode"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:644
+msgid "man:VOP_LOOKUP[9] - looks up a path to a given directory"
+msgstr "man:VOP_LOOKUP[9] - busca um caminho para um diretório específico"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:645
+msgid "man:VOP_OPEN[9] - opens a file referenced by a vnode"
+msgstr "man:VOP_OPEN[9] - abre um arquivo referenciado por um vnode"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:646
+msgid "man:VOP_CLOSE[9] - closes a file referenced by a vnode"
+msgstr "man:VOP_CLOSE[9] - fecha um arquivo referenciado por um vnode"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:647
+msgid "man:vput[9] - decrements the use count for a vnode and unlocks it"
+msgstr "man:vput[9] - decrementa a contagem de uso de um vnode e desbloqueia"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:648
+msgid "man:vrele[9] - decrements the use count for a vnode"
+msgstr "man:vrele[9] - diminui o contador de uso para um vnode"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:649
+msgid "man:vref[9] - increments the use count for a vnode"
+msgstr "man:vref[9] - incrementa a contagem de uso de um vnode"
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:651
+#, no-wrap
+msgid "File handler operations"
+msgstr "Operações do manipulador de arquivos"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:654
+msgid ""
+"`fget` - given a thread and a file descriptor number it returns associated "
+"file handler and references it"
+msgstr ""
+"`fget` - dado um thread e um número de descritor de arquivo, ele retorna o "
+"file handler associado e o referencia"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:655
+msgid "`fdrop` - drops a reference to a file handler"
+msgstr "`fdrop` - remove uma referência a um file handler"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:656
+msgid "`fhold` - references a file handler"
+msgstr "`fhold` - referencia um file handler"
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-emulation/_index.adoc:658
+#, no-wrap
+msgid "Linux(R) emulation layer -MD part"
+msgstr "A camada de emulação do Linux(R) - parte MD"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:666
+msgid ""
+"This section deals with implementation of Linux(R) emulation layer in "
+"FreeBSD operating system. It first describes the machine dependent part "
+"talking about how and where interaction between userland and kernel is "
+"implemented. It talks about syscalls, signals, ptrace, traps, stack fixup. "
+"This part discusses i386 but it is written generally so other architectures "
+"should not differ very much. The next part is the machine independent part "
+"of the Linuxulator. This section only covers i386 and ELF handling. A.OUT "
+"is obsolete and untested."
+msgstr ""
+"Esta seção trata da implementação da camada de emulação do Linux(R) no "
+"sistema operacional FreeBSD. Ela descreve primeiramente a parte dependente "
+"da máquina, abordando como e onde a interação entre o espaço do usuário e o "
+"kernel é implementada. Ela fala sobre syscalls, sinais, ptrace, traps e "
+"ajuste de pilha. Essa parte discute o i386, mas é escrita de forma geral, "
+"então outras arquiteturas não devem diferir muito. A próxima parte é a parte "
+"independente da máquina do Linuxulator. Esta seção aborda apenas o i386 e o "
+"tratamento de arquivos ELF. O formato A.OUT está obsoleto e não foi testado."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:668
+#, no-wrap
+msgid "Syscall handling"
+msgstr "Manipulação de Syscall"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:672
+msgid ""
+"Syscall handling is mostly written in [.filename]#linux_sysvec.c#, which "
+"covers most of the routines pointed out in the `sysentvec` structure. When "
+"a Linux(R) process running on FreeBSD issues a syscall, the general syscall "
+"routine calls linux prepsyscall routine for the Linux(R) ABI."
+msgstr ""
+"O tratamento de syscalls é principalmente escrito em [."
+"filename]#linux_sysvec.c#, que abrange a maioria das rotinas apontadas na "
+"estrutura `sysentvec`. Quando um processo do Linux(R) em execução no FreeBSD "
+"faz uma syscall, a rotina geral de syscall chama a rotina linux prepsyscall "
+"para a ABI do Linux(R)."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:674
+#, no-wrap
+msgid "Linux(R) prepsyscall"
+msgstr "Linux(R) prepsyscall"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:681
+msgid ""
+"Linux(R) passes arguments to syscalls via registers (that is why it is "
+"limited to 6 parameters on i386) while FreeBSD uses the stack. The Linux(R) "
+"prepsyscall routine must copy parameters from registers to the stack. The "
+"order of the registers is: `%ebx`, `%ecx`, `%edx`, `%esi`, `%edi`, `%ebp`. "
+"The catch is that this is true for only _most_ of the syscalls. Some (most "
+"notably `clone`) uses a different order but it is luckily easy to fix by "
+"inserting a dummy parameter in the `linux_clone` prototype."
+msgstr ""
+"No Linux(R), os argumentos das syscalls são passados via registradores (por "
+"isso é limitado a 6 parâmetros no i386), enquanto no FreeBSD eles são "
+"passados pela pilha. A rotina linux prepsyscall deve copiar os parâmetros "
+"dos registradores para a pilha. A ordem dos registradores é: `%ebx`, `%ecx`, "
+"`%edx`, `%esi`, `%edi`, `%ebp`. A questão é que isso é verdade apenas para "
+"_a maioria_ das syscalls. Algumas (mais notavelmente `clone`) usam uma ordem "
+"diferente, mas felizmente é fácil corrigir isso inserindo um parâmetro "
+"fictício no protótipo `linux_clone`."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:683
+#, no-wrap
+msgid "Syscall writing"
+msgstr "Escrevendo syscall"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:687
+msgid ""
+"Every syscall implemented in the Linuxulator must have its prototype with "
+"various flags in [.filename]#syscalls.master#. The form of the file is:"
+msgstr ""
+"Cada chamada de sistema implementada no Linuxulator deve ter seu protótipo "
+"com várias flags no arquivo `syscalls.master`. A estrutura do arquivo é a "
+"seguinte:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:695
+#, no-wrap
+msgid ""
+"...\n"
+"\tAUE_FORK STD\t\t{ int linux_fork(void); }\n"
+"...\n"
+"\tAUE_CLOSE NOPROTO\t{ int close(int fd); }\n"
+"...\n"
+msgstr ""
+"...\n"
+"\tAUE_FORK STD\t\t{ int linux_fork(void); }\n"
+"...\n"
+"\tAUE_CLOSE NOPROTO\t{ int close(int fd); }\n"
+"...\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:705
+msgid ""
+"The first column represents the syscall number. The second column is for "
+"auditing support. The third column represents the syscall type. It is "
+"either `STD`, `OBSOL`, `NOPROTO` and `UNIMPL`. `STD` is a standard syscall "
+"with full prototype and implementation. `OBSOL` is obsolete and defines "
+"just the prototype. `NOPROTO` means that the syscall is implemented "
+"elsewhere so do not prepend ABI prefix, etc. `UNIMPL` means that the "
+"syscall will be substituted with the `nosys` syscall (a syscall just "
+"printing out a message about the syscall not being implemented and returning "
+"`ENOSYS`)."
+msgstr ""
+"A primeira coluna representa o número da syscall. A segunda coluna é para "
+"suporte de auditoria. A terceira coluna representa o tipo de syscall. Pode "
+"ser `STD`, `OBSOL`, `NOPROTO` ou `UNIMPL`. `STD` é uma syscall padrão com "
+"protótipo e implementação completos. `OBSOL` é obsoleta e define apenas o "
+"protótipo. `NOPROTO` significa que a syscall é implementada em outro lugar, "
+"então não é necessário adicionar o prefixo ABI, etc. `UNIMPL` significa que "
+"a syscall será substituída pela syscall `nosys` (uma syscall que apenas "
+"imprime uma mensagem informando que a syscall não está implementada e "
+"retorna `ENOSYS`)."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:708
+msgid ""
+"From [.filename]#syscalls.master# a script generates three files: [."
+"filename]#linux_syscall.h#, [.filename]#linux_proto.h# and [."
+"filename]#linux_sysent.c#. The [.filename]#linux_syscall.h# contains "
+"definitions of syscall names and their numerical value, e.g.:"
+msgstr ""
+"Do [.filename]#syscalls.master#, um script gera três arquivos: [."
+"filename]#linux_syscall.h#, [.filename]#linux_proto.h# e [."
+"filename]#linux_sysent.c#. O arquivo [.filename]#linux_syscall.h# contém as "
+"definições dos nomes das syscalls e seus valores numéricos, por exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:716
+#, no-wrap
+msgid ""
+"...\n"
+"#define LINUX_SYS_linux_fork 2\n"
+"...\n"
+"#define LINUX_SYS_close 6\n"
+"...\n"
+msgstr ""
+"...\n"
+"#define LINUX_SYS_linux_fork 2\n"
+"...\n"
+"#define LINUX_SYS_close 6\n"
+"...\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:719
+msgid ""
+"The [.filename]#linux_proto.h# contains structure definitions of arguments "
+"to every syscall, e.g.:"
+msgstr ""
+"O [.filename]#linux_proto.h# contém definições de estrutura de argumentos "
+"para cada syscall, por exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:725
+#, no-wrap
+msgid ""
+"struct linux_fork_args {\n"
+" register_t dummy;\n"
+"};\n"
+msgstr ""
+"struct linux_fork_args {\n"
+" register_t dummy;\n"
+"};\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:728
+msgid ""
+"And finally, [.filename]#linux_sysent.c# contains structure describing the "
+"system entry table, used to actually dispatch a syscall, e.g.:"
+msgstr ""
+"E finalmente, o [.filename]#linux_sysent.c# contém uma estrutura descrevendo "
+"a tabela de entrada do sistema, usada para realmente enviar um syscall, por "
+"exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:733
+#, no-wrap
+msgid ""
+"{ 0, (sy_call_t *)linux_fork, AUE_FORK, NULL, 0, 0 }, /* 2 = linux_fork */\n"
+"{ AS(close_args), (sy_call_t *)close, AUE_CLOSE, NULL, 0, 0 }, /* 6 = close */\n"
+msgstr ""
+"{ 0, (sy_call_t *)linux_fork, AUE_FORK, NULL, 0, 0 }, /* 2 = linux_fork */\n"
+"{ AS(close_args), (sy_call_t *)close, AUE_CLOSE, NULL, 0, 0 }, /* 6 = close */\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:737
+msgid ""
+"As you can see `linux_fork` is implemented in Linuxulator itself so the "
+"definition is of `STD` type and has no argument, which is exhibited by the "
+"dummy argument structure. On the other hand `close` is just an alias for "
+"real FreeBSD man:close[2] so it has no linux arguments structure associated "
+"and in the system entry table it is not prefixed with linux as it calls the "
+"real man:close[2] in the kernel."
+msgstr ""
+"Como você pode ver, `linux_fork` é implementado no próprio Linuxulator, "
+"então a definição é do tipo `STD` e não tem argumentos, o que é exibido pela "
+"estrutura de argumentos fictícia. Por outro lado, `close` é apenas um alias "
+"para o verdadeiro man:close[2] do FreeBSD, então não possui uma estrutura de "
+"argumentos específica do Linux associada e na tabela de entrada do sistema "
+"não é prefixado com linux, pois chama o verdadeiro man:close[2] no kernel."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:739
+#, no-wrap
+msgid "Dummy syscalls"
+msgstr "Dummy syscalls"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:745
+#, fuzzy
+#| msgid ""
+#| "The Linux(R) emulation layer is not complete, as some syscalls are not "
+#| "implemented properly and some are not implemented at all. The emulation "
+#| "layer employs a facility to mark unimplemented syscalls with the `DUMMY` "
+#| "macro. These dummy definitions reside in [.filename]#linux_dummy.c# in a "
+#| "form of `DUMMY(syscall);`, which is then translated to various syscall "
+#| "auxiliary files and the implementation consists of printing a message "
+#| "saying that this syscall is not implemented. The `UNIMPL` prototype is "
+#| "not used because we want to be able to identify the name of the syscall "
+#| "that was called in order to know what syscalls are more important to "
+#| "implement."
+msgid ""
+"The Linux(R) emulation layer is not complete, as some syscalls are not "
+"implemented properly and some are not implemented at all. The emulation "
+"layer employs a facility to mark unimplemented syscalls with the `DUMMY` "
+"macro. These dummy definitions reside in [.filename]#linux_dummy.c# in a "
+"form of `DUMMY(syscall);`, which is then translated to various syscall "
+"auxiliary files and the implementation consists of printing a message saying "
+"that this syscall is not implemented. The `UNIMPL` prototype is not used "
+"because we want to be able to identify the name of the syscall that was "
+"called to know what syscalls are more important to implement."
+msgstr ""
+"A camada de emulação do Linux(R) não está completa, pois alguns syscalls não "
+"estão implementados corretamente e alguns não estão implementados de forma "
+"alguma. A camada de emulação utiliza uma função para marcar os syscalls não "
+"implementados com a macro `DUMMY`. Essas definições fictícias residem no "
+"arquivo [.filename]#linux_dummy.c# na forma de `DUMMY(syscall);`, que é "
+"então traduzido para vários arquivos auxiliares de syscalls. A implementação "
+"consiste em imprimir uma mensagem informando que esse syscall não está "
+"implementado. O protótipo `UNIMPL` não é usado porque queremos ser capazes "
+"de identificar o nome do syscall que foi chamado para saber quais syscalls "
+"são mais importantes de implementar."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:747
+#, no-wrap
+msgid "Signal handling"
+msgstr "Manuseio de signals"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:751
+msgid ""
+"Signal handling is done generally in the FreeBSD kernel for all binary "
+"compatibilities with a call to a compat-dependent layer. Linux(R) "
+"compatibility layer defines `linux_sendsig` routine for this purpose."
+msgstr ""
+"O tratamento de sinais é feito geralmente no kernel do FreeBSD para todas as "
+"compatibilidades binárias com uma chamada a uma camada dependente de "
+"compatibilidade. A camada de compatibilidade do Linux(R) define a rotina "
+"`linux_sendsig` para este propósito."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:753
+#, no-wrap
+msgid "Linux(R) sendsig"
+msgstr "Linux(R) sendsig"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:760
+msgid ""
+"This routine first checks whether the signal has been installed with a "
+"`SA_SIGINFO` in which case it calls `linux_rt_sendsig` routine instead. "
+"Furthermore, it allocates (or reuses an already existing) signal handle "
+"context, then it builds a list of arguments for the signal handler. It "
+"translates the signal number based on the signal translation table, assigns "
+"a handler, translates sigset. Then it saves context for the `sigreturn` "
+"routine (various registers, translated trap number and signal mask). "
+"Finally, it copies out the signal context to the userspace and prepares "
+"context for the actual signal handler to run."
+msgstr ""
+"Essa rotina primeiro verifica se o sinal foi instalado com `SA_SIGINFO`, "
+"caso contrário, ela chama a rotina `linux_rt_sendsig`. Além disso, aloca (ou "
+"reutiliza um já existente) o contexto do manipulador de sinal, em seguida, "
+"constrói uma lista de argumentos para o manipulador de sinal. Traduz o "
+"número do sinal com base na tabela de tradução de sinais, atribui um "
+"manipulador e traduz o conjunto de sinais. Em seguida, salva o contexto para "
+"a rotina `sigreturn` (diversos registradores, número de interrupção "
+"traduzido e máscara de sinais). Por fim, copia o contexto do sinal para o "
+"espaço do usuário e prepara o contexto para a execução real do manipulador "
+"de sinal."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:762
+#, no-wrap
+msgid "linux_rt_sendsig"
+msgstr "linux_rt_sendsig"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:767
+msgid ""
+"This routine is similar to `linux_sendsig` just the signal context "
+"preparation is different. It adds `siginfo`, `ucontext`, and some POSIX(R) "
+"parts. It might be worth considering whether those two functions could not "
+"be merged with a benefit of less code duplication and possibly even faster "
+"execution."
+msgstr ""
+"Esta rotina é semelhante à `linux_sendsig`, mas a preparação do contexto do "
+"sinal é diferente. Ela adiciona `siginfo`, `ucontext` e algumas partes "
+"POSIX(R). Pode valer a pena considerar se essas duas funções não poderiam "
+"ser mescladas com o benefício de menos duplicação de código e possivelmente "
+"até execução mais rápida."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:769
+#, no-wrap
+msgid "linux_sigreturn"
+msgstr "linux_sigreturn"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:774
+msgid ""
+"This syscall is used for return from the signal handler. It does some "
+"security checks and restores the original process context. It also unmasks "
+"the signal in process signal mask."
+msgstr ""
+"Essa chamada de sistema é usada para retornar do manipulador de sinal. Ela "
+"realiza algumas verificações de segurança e restaura o contexto original do "
+"processo. Além disso, desativa o sinal na máscara de sinais do processo."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:776
+#, no-wrap
+msgid "Ptrace"
+msgstr "Ptrace"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:782
+#, fuzzy
+#| msgid ""
+#| "Many UNIX(R) derivates implement the man:ptrace[2] syscall in order to "
+#| "allow various tracking and debugging features. This facility enables the "
+#| "tracing process to obtain various information about the traced process, "
+#| "like register dumps, any memory from the process address space, etc. and "
+#| "also to trace the process like in stepping an instruction or between "
+#| "system entries (syscalls and traps). man:ptrace[2] also lets you set "
+#| "various information in the traced process (registers etc.). man:"
+#| "ptrace[2] is a UNIX(R)-wide standard implemented in most UNIX(R)es around "
+#| "the world."
+msgid ""
+"Many UNIX(R) derivates implement the man:ptrace[2] syscall to allow various "
+"tracking and debugging features. This facility enables the tracing process "
+"to obtain various information about the traced process, like register dumps, "
+"any memory from the process address space, etc. and also to trace the "
+"process like in stepping an instruction or between system entries (syscalls "
+"and traps). man:ptrace[2] also lets you set various information in the "
+"traced process (registers etc.). man:ptrace[2] is a UNIX(R)-wide standard "
+"implemented in most UNIX(R)es around the world."
+msgstr ""
+"Muitos derivados do UNIX(R) implementam a syscall man:ptrace[2] para "
+"permitir várias funcionalidades de rastreamento e depuração. Essa facilidade "
+"permite que o processo de rastreamento obtenha várias informações sobre o "
+"processo rastreado, como despejos de registradores, qualquer memória do "
+"espaço de endereços do processo, etc., e também rastreie o processo, como "
+"passar instruções ou entre entradas do sistema (syscalls e traps). A man:"
+"ptrace[2] também permite definir várias informações no processo rastreado "
+"(registradores, etc.). A man:ptrace[2] é um padrão amplamente adotado no "
+"UNIX(R) e implementado na maioria dos sistemas UNIX(R) ao redor do mundo."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:788
+msgid ""
+"Linux(R) emulation in FreeBSD implements the man:ptrace[2] facility in [."
+"filename]#linux_ptrace.c#. The routines for converting registers between "
+"Linux(R) and FreeBSD and the actual man:ptrace[2] syscall emulation "
+"syscall. The syscall is a long switch block that implements its counterpart "
+"in FreeBSD for every man:ptrace[2] command. The man:ptrace[2] commands are "
+"mostly equal between Linux(R) and FreeBSD so usually just a small "
+"modification is needed. For example, `PT_GETREGS` in Linux(R) operates on "
+"direct data while FreeBSD uses a pointer to the data so after performing a "
+"(native) man:ptrace[2] syscall, a copyout must be done to preserve Linux(R) "
+"semantics."
+msgstr ""
+"A emulação do Linux(R) no FreeBSD implementa a facilidade man:ptrace[2] em [."
+"filename]#linux_ptrace.c#. As rotinas de conversão de registradores entre "
+"Linux(R) e FreeBSD e a própria syscall de emulação man:ptrace[2]. A syscall "
+"é um longo bloco switch que implementa seu equivalente no FreeBSD para cada "
+"comando man:ptrace[2]. Os comandos man:ptrace[2] são principalmente iguais "
+"entre Linux(R) e FreeBSD, então geralmente apenas uma pequena modificação é "
+"necessária. Por exemplo, `PT_GETREGS` no Linux(R) opera em dados diretos, "
+"enquanto o FreeBSD usa um ponteiro para os dados, então após a execução de "
+"uma syscall man:ptrace[2] (nativa), é necessário fazer uma cópia dos dados "
+"usando copyout para preservar a semântica do Linux(R)."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:792
+msgid ""
+"The man:ptrace[2] implementation in Linuxulator has some known weaknesses. "
+"There have been panics seen when using `strace` (which is a man:ptrace[2] "
+"consumer) in the Linuxulator environment. Also `PT_SYSCALL` is not "
+"implemented."
+msgstr ""
+"A implementação man:ptrace[2] no Linuxulator tem algumas fraquezas "
+"conhecidas. Houve panes vistas ao usar `strace` (que é um consumidor man:"
+"ptrace[2]) no ambiente Linuxulator. Além disso, `PT_SYSCALL` não está "
+"implementado."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:799
+msgid ""
+"Whenever a Linux(R) process running in the emulation layer traps the trap "
+"itself is handled transparently with the only exception of the trap "
+"translation. Linux(R) and FreeBSD differs in opinion on what a trap is so "
+"this is dealt with here. The code is actually very short:"
+msgstr ""
+"Sempre que um processo Linux(R) executando na camada de emulação sofre uma "
+"interrupção, a própria interrupção é tratada de forma transparente com a "
+"única exceção da tradução da interrupção. O Linux(R) e o FreeBSD diferem em "
+"suas opiniões sobre o que é uma interrupção, então isso é tratado aqui. O "
+"código é realmente muito curto:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:805
+#, no-wrap
+msgid ""
+"static int\n"
+"translate_traps(int signal, int trap_code)\n"
+"{\n"
+msgstr ""
+"static int\n"
+"translate_traps(int signal, int trap_code)\n"
+"{\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:808
+#, no-wrap
+msgid ""
+" if (signal != SIGBUS)\n"
+" return signal;\n"
+msgstr ""
+" if (signal != SIGBUS)\n"
+" return signal;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:810
+#, no-wrap
+msgid " switch (trap_code) {\n"
+msgstr " switch (trap_code) {\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:816
+#, no-wrap
+msgid ""
+" case T_PROTFLT:\n"
+" case T_TSSFLT:\n"
+" case T_DOUBLEFLT:\n"
+" case T_PAGEFLT:\n"
+" return SIGSEGV;\n"
+msgstr ""
+" case T_PROTFLT:\n"
+" case T_TSSFLT:\n"
+" case T_DOUBLEFLT:\n"
+" case T_PAGEFLT:\n"
+" return SIGSEGV;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:821
+#, no-wrap
+msgid ""
+" default:\n"
+" return signal;\n"
+" }\n"
+"}\n"
+msgstr ""
+" default:\n"
+" return signal;\n"
+" }\n"
+"}\n"
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:824
+#, no-wrap
+msgid "Stack fixup"
+msgstr "Correção de pilha"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:831
+msgid ""
+"The RTLD run-time link-editor expects so called AUX tags on stack during an "
+"`execve` so a fixup must be done to ensure this. Of course, every RTLD "
+"system is different so the emulation layer must provide its own stack fixup "
+"routine to do this. So does Linuxulator. The `elf_linux_fixup` simply "
+"copies out AUX tags to the stack and adjusts the stack of the user space "
+"process to point right after those tags. So RTLD works in a smart way."
+msgstr ""
+"O link-editor em tempo de execução RTLD espera que as chamadas AUX estejam "
+"presentes na pilha durante um `execve`, então é necessário fazer um ajuste "
+"para garantir isso. Naturalmente, cada sistema RTLD é diferente, então a "
+"camada de emulação deve fornecer sua própria rotina de ajuste da pilha para "
+"realizar isso. Isso também se aplica ao Linuxulator. A função "
+"`elf_linux_fixup` simplesmente copia as chamadas AUX para a pilha e ajusta o "
+"ponteiro da pilha do processo de espaço de usuário para apontar "
+"imediatamente após essas chamadas. Dessa forma, o RTLD funciona de maneira "
+"inteligente."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:833
+#, no-wrap
+msgid "A.OUT support"
+msgstr "Suporte para A.OUT"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:840
+msgid ""
+"The Linux(R) emulation layer on i386 also supports Linux(R) A.OUT binaries. "
+"Pretty much everything described in the previous sections must be "
+"implemented for A.OUT support (beside traps translation and signals "
+"sending). The support for A.OUT binaries is no longer maintained, "
+"especially the 2.6 emulation does not work with it but this does not cause "
+"any problem, as the linux-base in ports probably do not support A.OUT "
+"binaries at all. This support will probably be removed in future. Most of "
+"the stuff necessary for loading Linux(R) A.OUT binaries is in [."
+"filename]#imgact_linux.c# file."
+msgstr ""
+"A camada de emulação do Linux(R) no i386 também suporta binários A.OUT do "
+"Linux(R). Praticamente tudo o que foi descrito nas seções anteriores deve "
+"ser implementado para oferecer suporte ao formato A.OUT (exceto a tradução "
+"de traps e o envio de sinais). O suporte para binários A.OUT não é mais "
+"mantido, especialmente a emulação 2.6 não funciona com esse formato. No "
+"entanto, isso não causa nenhum problema, já que o linux-base nos ports "
+"provavelmente não suporta binários A.OUT. Esse suporte provavelmente será "
+"removido no futuro. A maior parte do necessário para carregar binários A.OUT "
+"do Linux(R) está no arquivo [.filename]#imgact_linux.c#."
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-emulation/_index.adoc:842
+#, no-wrap
+msgid "Linux(R) emulation layer -MI part"
+msgstr "Camada de emulação do Linux(R) - Parte MI"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:847
+msgid ""
+"This section talks about machine independent part of the Linuxulator. It "
+"covers the emulation infrastructure needed for Linux(R) 2.6 emulation, the "
+"thread local storage (TLS) implementation (on i386) and futexes. Then we "
+"talk briefly about some syscalls."
+msgstr ""
+"Esta seção aborda a parte independente de máquina do Linuxulator. Ela cobre "
+"a infraestrutura de emulação necessária para a emulação do Linux(R) 2.6, a "
+"implementação do armazenamento local de threads (TLS) (em i386) e futexes. "
+"Em seguida, falamos brevemente sobre algumas syscalls."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:849
+#, no-wrap
+msgid "Description of NPTL"
+msgstr "Descrição do NPTL"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:857
+msgid ""
+"One of the major areas of progress in development of Linux(R) 2.6 was "
+"threading. Prior to 2.6, the Linux(R) threading support was implemented in "
+"the linuxthreads library. The library was a partial implementation of "
+"POSIX(R) threading. The threading was implemented using separate processes "
+"for each thread using the `clone` syscall to let them share the address "
+"space (and other things). The main weaknesses of this approach was that "
+"every thread had a different PID, signal handling was broken (from the "
+"pthreads perspective), etc. Also the performance was not very good (use of "
+"`SIGUSR` signals for threads synchronization, kernel resource consumption, "
+"etc.) so to overcome these problems a new threading system was developed and "
+"named NPTL."
+msgstr ""
+"Um dos principais avanços no desenvolvimento do Linux(R) 2.6 foi a "
+"implementação de threads. Antes do 2.6, o suporte a threading no Linux(R) "
+"era implementado na biblioteca linuxthreads. Essa biblioteca era uma "
+"implementação parcial da threading POSIX(R). A threading era implementada "
+"usando processos separados para cada thread, usando a syscall `clone` para "
+"permitir que compartilhassem o espaço de endereçamento (e outras coisas). As "
+"principais fraquezas dessa abordagem eram que cada thread tinha um PID "
+"diferente, o tratamento de sinais era problemático (do ponto de vista do "
+"pthreads), etc. Além disso, o desempenho não era muito bom (uso de sinais "
+"`SIGUSR` para sincronização de threads, consumo de recursos do kernel, "
+"etc.), então, para superar esses problemas, um novo sistema de threading foi "
+"desenvolvido e chamado de NPTL."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:863
+msgid ""
+"The NPTL library focused on two things but a third thing came along so it is "
+"usually considered a part of NPTL. Those two things were embedding of "
+"threads into a process structure and futexes. The additional third thing "
+"was TLS, which is not directly required by NPTL but the whole NPTL userland "
+"library depends on it. Those improvements yielded in much improved "
+"performance and standards conformance. NPTL is a standard threading library "
+"in Linux(R) systems these days."
+msgstr ""
+"A biblioteca NPTL concentrou-se em duas coisas, mas uma terceira acabou "
+"sendo incluída e é geralmente considerada parte do NPTL. Essas duas coisas "
+"eram a incorporação de threads em uma estrutura de processo e futexes. A "
+"terceira coisa adicional foi TLS (Thread-Local Storage), que não é "
+"diretamente exigida pelo NPTL, mas toda a biblioteca NPTL do espaço do "
+"usuário depende dela. Essas melhorias resultaram em um desempenho muito "
+"melhorado e conformidade com padrões. O NPTL é uma biblioteca padrão de "
+"threading em sistemas Linux(R) nos dias de hoje."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:867
+msgid ""
+"The FreeBSD Linuxulator implementation approaches the NPTL in three main "
+"areas. The TLS, futexes and PID mangling, which is meant to simulate the "
+"Linux(R) threads. Further sections describe each of these areas."
+msgstr ""
+"A implementação do Linuxulator no FreeBSD aborda o NPTL em três áreas "
+"principais. O TLS (Thread-Local Storage), os futexes e a manipulação de PID, "
+"que tem como objetivo simular as threads do Linux(R). Seções adicionais "
+"descrevem cada uma dessas áreas em detalhes."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:869
+#, no-wrap
+msgid "Linux(R) 2.6 emulation infrastructure"
+msgstr "Infraestrutura de emulação do Linux(R) 2.6"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:872
+msgid ""
+"These sections deal with the way Linux(R) threads are managed and how we "
+"simulate that in FreeBSD."
+msgstr ""
+"Essas seções lidam com a forma como as threads do Linux(R) são gerenciadas e "
+"como simulamos isso no FreeBSD."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:874
+#, no-wrap
+msgid "Runtime determining of 2.6 emulation"
+msgstr "Determinação de tempo de execução de emulação 2.6"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:883
+msgid ""
+"The Linux(R) emulation layer in FreeBSD supports runtime setting of the "
+"emulated version. This is done via man:sysctl[8], namely `compat.linux."
+"osrelease`. Setting this man:sysctl[8] affects runtime behavior of the "
+"emulation layer. When set to 2.6.x it sets the value of `linux_use_linux26` "
+"while setting to something else keeps it unset. This variable (plus per-"
+"prison variables of the very same kind) determines whether 2.6 "
+"infrastructure (mainly PID mangling) is used in the code or not. The "
+"version setting is done system-wide and this affects all Linux(R) "
+"processes. The man:sysctl[8] should not be changed when running any "
+"Linux(R) binary as it might harm things."
+msgstr ""
+"A camada de emulação do Linux(R) no FreeBSD suporta a configuração em tempo "
+"de execução da versão emulada. Isso é feito por meio do man:sysctl[8], mais "
+"especificamente através do parâmetro `compat.linux.osrelease`. Configurar "
+"esse man:sysctl[8] afeta o comportamento em tempo de execução da camada de "
+"emulação. Ao definir para 2.6.x, ele define o valor de `linux_use_linux26`, "
+"enquanto definir para qualquer outro valor mantém esse valor como "
+"indefinido. Essa variável (juntamente com as variáveis específicas de cada "
+"prisão) determina se a infraestrutura 2.6 (principalmente o processo de "
+"manipulação de PID) é usada no código ou não. A configuração da versão é "
+"feita em todo o sistema e isso afeta todos os processos do Linux(R). O man:"
+"sysctl[8] não deve ser alterado ao executar qualquer binário do Linux(R), "
+"pois isso pode causar problemas."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:885
+#, no-wrap
+msgid "Linux(R) processes and thread identifiers"
+msgstr "Processos e Identificadores de Thread no Linux(R)"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:892
+msgid ""
+"The semantics of Linux(R) threading are a little confusing and uses entirely "
+"different nomenclature to FreeBSD. A process in Linux(R) consists of a "
+"`struct task` embedding two identifier fields - PID and TGID. PID is _not_ "
+"a process ID but it is a thread ID. The TGID identifies a thread group in "
+"other words a process. For single-threaded process the PID equals the TGID."
+msgstr ""
+"A semântica de threading no Linux(R) é um pouco confusa e utiliza uma "
+"nomenclatura completamente diferente do FreeBSD. Em um processo no Linux(R), "
+"há uma estrutura chamada `struct task` que contém dois campos de "
+"identificação - PID e TGID. O PID _não_ é um identificador de processo, mas "
+"sim um identificador de thread. O TGID identifica um grupo de threads, ou "
+"seja, um processo. Para processos com apenas uma thread, o PID é igual ao "
+"TGID."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:898
+msgid ""
+"The thread in NPTL is just an ordinary process that happens to have TGID not "
+"equal to PID and have a group leader not equal to itself (and shared VM etc. "
+"of course). Everything else happens in the same way as to an ordinary "
+"process. There is no separation of a shared status to some external "
+"structure like in FreeBSD. This creates some duplication of information and "
+"possible data inconsistency. The Linux(R) kernel seems to use task -> group "
+"information in some places and task information elsewhere and it is really "
+"not very consistent and looks error-prone."
+msgstr ""
+"No NPTL, uma thread é apenas um processo comum que tem o TGID diferente do "
+"PID e tem um líder de grupo diferente de si mesmo (além de compartilhar a "
+"memória virtual, é claro). Todo o resto acontece da mesma maneira que em um "
+"processo comum. Não há separação de um status compartilhado em uma estrutura "
+"externa, como no FreeBSD. Isso cria alguma duplicação de informações e "
+"possíveis inconsistências de dados. O kernel do Linux(R) parece usar "
+"informações de tarefa -> grupo em alguns lugares e informações de tarefa em "
+"outros lugares, e isso realmente não é muito consistente e parece propenso a "
+"erros."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:901
+msgid ""
+"Every NPTL thread is created by a call to the `clone` syscall with a "
+"specific set of flags (more in the next subsection). The NPTL implements "
+"strict 1:1 threading."
+msgstr ""
+"Cada thread NPTL é criado por meio de uma chamada ao syscall `clone` com um "
+"conjunto específico de flags (mais detalhes na próxima subseção). O NPTL "
+"implementa uma estrita relação de threading 1:1."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:903
+msgid ""
+"In FreeBSD we emulate NPTL threads with ordinary FreeBSD processes that "
+"share VM space, etc. and the PID gymnastic is just mimicked in the emulation "
+"specific structure attached to the process. The structure attached to the "
+"process looks like:"
+msgstr ""
+"No FreeBSD nós emulamos threads NPTL com processos comuns do FreeBSD que "
+"compartilham espaço de VM, etc. e a ginástica PID é apenas imitada na "
+"estrutura específica de emulação anexada ao processo. A estrutura anexada ao "
+"processo se parece com:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:908
+#, no-wrap
+msgid ""
+"struct linux_emuldata {\n"
+" pid_t pid;\n"
+msgstr ""
+"struct linux_emuldata {\n"
+" pid_t pid;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:911
+#, no-wrap
+msgid ""
+" int *child_set_tid; /* in clone(): Child.s TID to set on clone */\n"
+" int *child_clear_tid;/* in clone(): Child.s TID to clear on exit */\n"
+msgstr ""
+" int *child_set_tid; /* in clone(): Child.s TID to set on clone */\n"
+" int *child_clear_tid;/* in clone(): Child.s TID to clear on exit */\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:913
+#, no-wrap
+msgid " struct linux_emuldata_shared *shared;\n"
+msgstr " struct linux_emuldata_shared *shared;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:915
+#, no-wrap
+msgid " int pdeath_signal; /* parent death signal */\n"
+msgstr " int pdeath_signal; /* parent death signal */\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:918
+#, no-wrap
+msgid ""
+" LIST_ENTRY(linux_emuldata) threads; /* list of linux threads */\n"
+"};\n"
+msgstr ""
+" LIST_ENTRY(linux_emuldata) threads; /* list of linux threads */\n"
+"};\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:925
+msgid ""
+"The PID is used to identify the FreeBSD process that attaches this "
+"structure. The `child_se_tid` and `child_clear_tid` are used for TID "
+"address copyout when a process exits and is created. The `shared` pointer "
+"points to a structure shared among threads. The `pdeath_signal` variable "
+"identifies the parent death signal and the `threads` pointer is used to link "
+"this structure to the list of threads. The `linux_emuldata_shared` "
+"structure looks like:"
+msgstr ""
+"O PID é usado para identificar o processo FreeBSD que se conecta a esta "
+"estrutura. Os campos `child_se_tid` e `child_clear_tid` são usados para "
+"copiar o endereço TID quando um processo termina ou é criado. O ponteiro "
+"`shared` aponta para uma estrutura compartilhada entre as threads. A "
+"variável `pdeath_signal` identifica o sinal de término do pai e o ponteiro "
+"`threads` é usado para vincular essa estrutura à lista de threads. A "
+"estrutura `linux_emuldata_shared` se parece com:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:929
+#, no-wrap
+msgid "struct linux_emuldata_shared {\n"
+msgstr "struct linux_emuldata_shared {\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:931
+#, no-wrap
+msgid " int refs;\n"
+msgstr " int refs;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:933
+#, no-wrap
+msgid " pid_t group_pid;\n"
+msgstr " pid_t group_pid;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:936
+#, no-wrap
+msgid ""
+" LIST_HEAD(, linux_emuldata) threads; /* head of list of linux threads */\n"
+"};\n"
+msgstr ""
+" LIST_HEAD(, linux_emuldata) threads; /* head of list of linux threads */\n"
+"};\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:941
+msgid ""
+"The `refs` is a reference counter being used to determine when we can free "
+"the structure to avoid memory leaks. The `group_pid` is to identify PID ( = "
+"TGID) of the whole process ( = thread group). The `threads` pointer is the "
+"head of the list of threads in the process."
+msgstr ""
+"O campo `refs` é um contador de referências usado para determinar quando "
+"podemos liberar a estrutura para evitar vazamentos de memória. O campo "
+"`group_pid` é usado para identificar o PID ( = TGID) do processo completo "
+"( = grupo de threads). O ponteiro `threads` é a cabeça da lista de threads "
+"no processo."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:944
+msgid ""
+"The `linux_emuldata` structure can be obtained from the process using "
+"`em_find`. The prototype of the function is:"
+msgstr ""
+"A estrutura `linux_emuldata` pode ser obtida do processo usando `em_find`. O "
+"protótipo da função é:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:948
+#, no-wrap
+msgid "struct linux_emuldata *em_find(struct proc *, int locked);\n"
+msgstr "struct linux_emuldata *em_find(struct proc *, int locked);\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:953
+msgid ""
+"Here, `proc` is the process we want the emuldata structure from and the "
+"locked parameter determines whether we want to lock or not. The accepted "
+"values are `EMUL_DOLOCK` and `EMUL_DOUNLOCK`. More about locking later."
+msgstr ""
+"Aqui, `proc` é o processo do qual queremos obter a estrutura emuldata e o "
+"parâmetro `locked` determina se queremos realizar o bloqueio ou não. Os "
+"valores aceitos são `EMUL_DOLOCK` e `EMUL_DOUNLOCK`. Mais sobre bloqueio "
+"será explicado posteriormente."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:955
+#, no-wrap
+msgid "PID mangling"
+msgstr "Maqueando PID"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:962
+msgid ""
+"As there is a difference in view as what to the idea of a process ID and "
+"thread ID is between FreeBSD and Linux(R) we have to translate the view "
+"somehow. We do it by PID mangling. This means that we fake what a PID "
+"(=TGID) and TID (=PID) is between kernel and userland. The rule of thumb is "
+"that in kernel (in Linuxulator) PID = PID and TGID = shared -> group pid and "
+"to userland we present `PID = shared -> group_pid` and `TID = proc -> "
+"p_pid`. The PID member of `linux_emuldata structure` is a FreeBSD PID."
+msgstr ""
+"Devido à diferença na interpretação do conceito de PID e TID entre o FreeBSD "
+"e o Linux(R), precisamos fazer uma tradução para conciliar essas visões. "
+"Fazemos isso através da manipulação de PIDs. Isso significa que simulamos o "
+"que seria um PID (=TGID) e TID (=PID) entre o kernel e o espaço do usuário. "
+"A regra geral é que, no kernel (no Linuxulator), PID = PID e TGID = shared-"
+">group_pid, e no espaço do usuário apresentamos `PID = shared->group_pid` e "
+"`TID = proc->p_pid`. O membro PID da estrutura `linux_emuldata` é um PID do "
+"FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:966
+msgid ""
+"The above affects mainly getpid, getppid, gettid syscalls. Where we use PID/"
+"TGID respectively. In copyout of TIDs in `child_clear_tid` and "
+"`child_set_tid` we copy out FreeBSD PID."
+msgstr ""
+"A situação acima afeta principalmente as chamadas de sistema getpid, getppid "
+"e gettid. Nelas, utilizamos o PID/TGID respectivamente. Na cópia de TIDs em "
+"`child_clear_tid` e `child_set_tid`, copiamos o PID do FreeBSD."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:968
+#, no-wrap
+msgid "Clone syscall"
+msgstr "syscall Clone"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:972
+msgid ""
+"The `clone` syscall is the way threads are created in Linux(R). The syscall "
+"prototype looks like this:"
+msgstr ""
+"A chamada de sistema `clone` é a forma como as threads são criadas no "
+"Linux(R). O protótipo da syscall é assim:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:977
+#, no-wrap
+msgid ""
+"int linux_clone(l_int flags, void *stack, void *parent_tidptr, int dummy,\n"
+"void * child_tidptr);\n"
+msgstr ""
+"int linux_clone(l_int flags, void *stack, void *parent_tidptr, int dummy,\n"
+"void * child_tidptr);\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:987
+msgid ""
+"The `flags` parameter tells the syscall how exactly the processes should be "
+"cloned. As described above, Linux(R) can create processes sharing various "
+"things independently, for example two processes can share file descriptors "
+"but not VM, etc. Last byte of the `flags` parameter is the exit signal of "
+"the newly created process. The `stack` parameter if non-`NULL` tells, where "
+"the thread stack is and if it is `NULL` we are supposed to copy-on-write the "
+"calling process stack (i.e. do what normal man:fork[2] routine does). The "
+"`parent_tidptr` parameter is used as an address for copying out process PID "
+"(i.e. thread id) once the process is sufficiently instantiated but is not "
+"runnable yet. The `dummy` parameter is here because of the very strange "
+"calling convention of this syscall on i386. It uses the registers directly "
+"and does not let the compiler do it what results in the need of a dummy "
+"syscall. The `child_tidptr` parameter is used as an address for copying out "
+"PID once the process has finished forking and when the process exits."
+msgstr ""
+"O parâmetro `flags` informa à syscall como exatamente os processos devem ser "
+"clonados. Como descrito anteriormente, o Linux(R) pode criar processos que "
+"compartilham várias coisas de forma independente, por exemplo, dois "
+"processos podem compartilhar descritores de arquivo, mas não a VM, etc. O "
+"último byte do parâmetro `flags` é o sinal de saída do novo processo criado. "
+"O parâmetro `stack`, se não for `NULL`, indica onde está a pilha da thread, "
+"e se for `NULL`, devemos fazer uma cópia em escrita-compartilhada da pilha "
+"do processo chamador (ou seja, fazer o que a rotina normal do man:fork[2] "
+"faz). O parâmetro `parent_tidptr` é usado como endereço para copiar o PID do "
+"processo (ou seja, ID da thread) assim que o processo estiver "
+"suficientemente instanciado, mas ainda não estiver em execução. O parâmetro "
+"`dummy` está aqui por causa da convenção de chamada muito estranha dessa "
+"syscall no i386. Ela usa os registradores diretamente e não permite que o "
+"compilador o faça, o que resulta na necessidade de um syscall dummy. O "
+"parâmetro `child_tidptr` é usado como endereço para copiar o PID assim que o "
+"processo terminar de criar um novo processo e quando o processo terminar."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1001
+msgid ""
+"The syscall itself proceeds by setting corresponding flags depending on the "
+"flags passed in. For example, `CLONE_VM` maps to RFMEM (sharing of VM), "
+"etc. The only nit here is `CLONE_FS` and `CLONE_FILES` because FreeBSD does "
+"not allow setting this separately so we fake it by not setting RFFDG "
+"(copying of fd table and other fs information) if either of these is "
+"defined. This does not cause any problems, because those flags are always "
+"set together. After setting the flags the process is forked using the "
+"internal `fork1` routine, the process is instrumented not to be put on a run "
+"queue, i.e. not to be set runnable. After the forking is done we possibly "
+"reparent the newly created process to emulate `CLONE_PARENT` semantics. "
+"Next part is creating the emulation data. Threads in Linux(R) does not "
+"signal their parents so we set exit signal to be 0 to disable this. After "
+"that setting of `child_set_tid` and `child_clear_tid` is performed enabling "
+"the functionality later in the code. At this point we copy out the PID to "
+"the address specified by `parent_tidptr`. The setting of process stack is "
+"done by simply rewriting thread frame `%esp` register (`%rsp` on amd64). "
+"Next part is setting up TLS for the newly created process. After this man:"
+"vfork[2] semantics might be emulated and finally the newly created process "
+"is put on a run queue and copying out its PID to the parent process via "
+"`clone` return value is done."
+msgstr ""
+"A syscall em si prossegue configurando as flags correspondentes com base nas "
+"flags passadas. Por exemplo, `CLONE_VM` mapeia para RFMEM (compartilhamento "
+"de VM), etc. O único detalhe aqui é `CLONE_FS` e `CLONE_FILES`, porque o "
+"FreeBSD não permite configurar isso separadamente, então simulamos não "
+"configurando RFFDG (cópia da tabela de descritores de arquivo e outras "
+"informações do sistema de arquivos) se algum desses estiver definido. Isso "
+"não causa problemas, porque essas flags são sempre configuradas juntas. Após "
+"configurar as flags, o processo é bifurcado usando a rotina interna `fork1`, "
+"e instruímos o processo a não ser colocado em uma fila de execução, ou seja, "
+"não ser definido como executável. Depois que a bifurcação é concluída, "
+"possivelmente reparentamos o processo recém-criado para emular a semântica "
+"`CLONE_PARENT`. A próxima parte é a criação dos dados de emulação. As "
+"threads no Linux(R) não sinalizam seus pais, então definimos o sinal de "
+"saída como 0 para desativar isso. Em seguida, é feita a configuração de "
+"`child_set_tid` e `child_clear_tid`, habilitando a funcionalidade "
+"posteriormente no código. Nesse ponto, copiamos o PID para o endereço "
+"especificado por `parent_tidptr`. A configuração da pilha do processo é "
+"feita simplesmente reescrevendo o registro `%esp` do quadro da thread "
+"(`%rsp` no amd64). A próxima parte é configurar o TLS para o processo recém-"
+"criado. Após isso, as semânticas de man:vfork[2] podem ser emuladas e, "
+"finalmente, o processo recém-criado é colocado em uma fila de execução e a "
+"cópia de seu PID para o processo pai é feita por meio do valor de retorno do "
+"`clone`."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1004
+msgid ""
+"The `clone` syscall is able and in fact is used for emulating classic man:"
+"fork[2] and man:vfork[2] syscalls. Newer glibc in a case of 2.6 kernel uses "
+"`clone` to implement man:fork[2] and man:vfork[2] syscalls."
+msgstr ""
+"O syscall `clone` é capaz e, de fato, é usado para emular as chamadas de "
+"sistema clássicas man:fork[2] e man:vfork[2]. O glibc mais recente, no caso "
+"do kernel 2.6, usa `clone` para implementar as chamadas de sistema man:"
+"fork[2] e man:vfork[2]."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1006
+#, no-wrap
+msgid "Locking"
+msgstr "Bloqueio"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1012
+msgid ""
+"The locking is implemented to be per-subsystem because we do not expect a "
+"lot of contention on these. There are two locks: `emul_lock` used to "
+"protect manipulating of `linux_emuldata` and `emul_shared_lock` used to "
+"manipulate `linux_emuldata_shared`. The `emul_lock` is a nonsleepable "
+"blocking mutex while `emul_shared_lock` is a sleepable blocking `sx_lock`. "
+"Due to of the per-subsystem locking we can coalesce some locks and that is "
+"why the em find offers the non-locking access."
+msgstr ""
+"O sistema de bloqueio é implementado por subsistema, pois não esperamos "
+"muita contenção nesses pontos. Existem dois bloqueios: `emul_lock`, usado "
+"para proteger a manipulação de `linux_emuldata`, e `emul_shared_lock`, usado "
+"para manipular `linux_emuldata_shared`. O `emul_lock` é uma mutex de "
+"bloqueio não adormecível, enquanto o `emul_shared_lock` é um bloqueio "
+"`sx_lock` de bloqueio adormecível. Devido ao bloqueio por subsistema, "
+"podemos combinar alguns bloqueios e é por isso que a função `em_find` "
+"oferece acesso sem bloqueio."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1014
+#, no-wrap
+msgid "TLS"
+msgstr "TLS"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1017
+msgid "This section deals with TLS also known as thread local storage."
+msgstr ""
+"Esta seção trata do TLS também conhecido como armazenamento local de thread."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1019
+#, no-wrap
+msgid "Introduction to threading"
+msgstr "Introdução ao threading"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1040
+msgid ""
+"Threads in computer science are entities within a process that can be "
+"scheduled independently from each other. The threads in the process share "
+"process wide data (file descriptors, etc.) but also have their own stack for "
+"their own data. Sometimes there is a need for process-wide data specific to "
+"a given thread. Imagine a name of the thread in execution or something like "
+"that. The traditional UNIX(R) threading API, pthreads provides a way to do "
+"it via man:pthread_key_create[3], man:pthread_setspecific[3] and man:"
+"pthread_getspecific[3] where a thread can create a key to the thread local "
+"data and using man:pthread_getspecific[3] or man:pthread_getspecific[3] to "
+"manipulate those data. You can easily see that this is not the most "
+"comfortable way this could be accomplished. So various producers of C/C++ "
+"compilers introduced a better way. They defined a new modifier keyword "
+"thread that specifies that a variable is thread specific. A new method of "
+"accessing such variables was developed as well (at least on i386). The "
+"pthreads method tends to be implemented in userspace as a trivial lookup "
+"table. The performance of such a solution is not very good. So the new "
+"method uses (on i386) segment registers to address a segment, where TLS area "
+"is stored so the actual accessing of a thread variable is just appending the "
+"segment register to the address thus addressing via it. The segment "
+"registers are usually `%gs` and `%fs` acting like segment selectors. Every "
+"thread has its own area where the thread local data are stored and the "
+"segment must be loaded on every context switch. This method is very fast "
+"and used almost exclusively in the whole i386 UNIX(R) world. Both FreeBSD "
+"and Linux(R) implement this approach and it yields very good results. The "
+"only drawback is the need to reload the segment on every context switch "
+"which can slowdown context switches. FreeBSD tries to avoid this overhead "
+"by using only 1 segment descriptor for this while Linux(R) uses 3. "
+"Interesting thing is that almost nothing uses more than 1 descriptor (only "
+"Wine seems to use 2) so Linux(R) pays this unnecessary price for context "
+"switches."
+msgstr ""
+"As threads na ciência da computação são entidades dentro de um processo que "
+"podem ser agendadas independentemente umas das outras. As threads no "
+"processo compartilham dados em todo o processo (descritores de arquivos, "
+"etc.), mas também possuem sua própria pilha para seus próprios dados. Às "
+"vezes, há necessidade de dados específicos de um thread em todo o processo, "
+"como o nome do thread em execução, por exemplo. A API de threads tradicional "
+"do UNIX(R), pthreads, oferece uma maneira de fazer isso usando as funções "
+"`pthread_key_create`, `pthread_setspecific` e `pthread_getspecific`, onde um "
+"thread pode criar uma chave para os dados específicos do thread local e "
+"manipular esses dados usando as funções `pthread_setspecific` e "
+"`pthread_getspecific`. É fácil perceber que essa não é a maneira mais "
+"conveniente de fazer isso. Portanto, vários fabricantes de compiladores C/C+"
+"+ introduziram uma maneira melhor. Eles definiram uma nova palavra-chave de "
+"modificação, `thread`, que especifica que uma variável é específica de um "
+"thread. Também foi desenvolvido um novo método de acesso a essas variáveis, "
+"pelo menos na arquitetura i386. O método tradicional do pthreads tende a ser "
+"implementado no espaço do usuário como uma tabela de pesquisa trivial. O "
+"desempenho de tal solução não é muito bom. Portanto, o novo método usa (no "
+"i386) registradores de segmento para endereçar um segmento, onde a área TLS "
+"é armazenada, de modo que o acesso real a uma variável do thread é apenas a "
+"concatenação do registrador de segmento ao endereço, permitindo o acesso "
+"direto através do registrador de segmento. Os registradores de segmento "
+"geralmente são `%gs` e `%fs`, agindo como seletores de segmento. Cada thread "
+"tem sua própria área onde os dados locais do thread são armazenados, e o "
+"registrador de segmento precisa ser carregado em cada troca de contexto. "
+"Esse método é muito rápido e amplamente usado em todo o mundo UNIX(R) na "
+"arquitetura i386. Tanto o FreeBSD quanto o Linux(R) implementam essa "
+"abordagem e obtêm resultados muito bons. A única desvantagem é a necessidade "
+"de recarregar o segmento em cada troca de contexto, o que pode retardar as "
+"trocas de contexto. O FreeBSD tenta evitar essa sobrecarga usando apenas um "
+"descritor de segmento para isso, enquanto o Linux(R) usa 3. É interessante "
+"observar que quase nada usa mais de 1 descritor (apenas o Wine parece usar "
+"2), então o Linux(R) paga um preço desnecessário pelas trocas de contexto."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1042
+#, no-wrap
+msgid "Segments on i386"
+msgstr "Segmentos em i386"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1049
+msgid ""
+"The i386 architecture implements the so called segments. A segment is a "
+"description of an area of memory. The base address (bottom) of the memory "
+"area, the end of it (ceiling), type, protection, etc. The memory described "
+"by a segment can be accessed using segment selector registers (`%cs`, `%ds`, "
+"`%ss`, `%es`, `%fs`, `%gs`). For example let us suppose we have a segment "
+"which base address is 0x1234 and length and this code:"
+msgstr ""
+"A arquitetura i386 implementa os chamados segmentos. Um segmento é uma "
+"descrição de uma área de memória. Ele contém informações como o endereço "
+"base (início) da área de memória, o final (teto), tipo, proteção, etc. A "
+"memória descrita por um segmento pode ser acessada usando registradores de "
+"seleção de segmento (`%cs`, `%ds`, `%ss`, `%es`, `%fs`, `%gs`). Por exemplo, "
+"vamos supor que temos um segmento cujo endereço base é 0x1234 e comprimento "
+"e o seguinte código:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1053
+#, no-wrap
+msgid "mov %edx,%gs:0x10\n"
+msgstr "mov %edx,%gs:0x10\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1062
+msgid ""
+"This will load the content of the `%edx` register into memory location "
+"0x1244. Some segment registers have a special use, for example `%cs` is "
+"used for code segment and `%ss` is used for stack segment but `%fs` and "
+"`%gs` are generally unused. Segments are either stored in a global GDT "
+"table or in a local LDT table. LDT is accessed via an entry in the GDT. "
+"The LDT can store more types of segments. LDT can be per process. Both "
+"tables define up to 8191 entries."
+msgstr ""
+"Isso irá carregar o conteúdo do registro `%edx` no endereço de memória "
+"0x1244. Alguns registradores de segmento têm um uso especial, por exemplo, "
+"`%cs` é usado para o segmento de código e `%ss` é usado para o segmento de "
+"pilha, mas `%fs` e `%gs` geralmente não são usados. Os segmentos são "
+"armazenados em uma tabela global GDT ou em uma tabela local LDT. A LDT é "
+"acessada por meio de uma entrada na GDT. A LDT pode armazenar mais tipos de "
+"segmentos. A LDT pode ser por processo. Ambas as tabelas definem até 8191 "
+"entradas."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1064
+#, no-wrap
+msgid "Implementation on Linux(R) i386"
+msgstr "Implementação no Linux(R) i386"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1072
+msgid ""
+"There are two main ways of setting up TLS in Linux(R). It can be set when "
+"cloning a process using the `clone` syscall or it can call "
+"`set_thread_area`. When a process passes `CLONE_SETTLS` flag to `clone`, "
+"the kernel expects the memory pointed to by the `%esi` register a Linux(R) "
+"user space representation of a segment, which gets translated to the machine "
+"representation of a segment and loaded into a GDT slot. The GDT slot can be "
+"specified with a number or -1 can be used meaning that the system itself "
+"should choose the first free slot. In practice, the vast majority of "
+"programs use only one TLS entry and does not care about the number of the "
+"entry. We exploit this in the emulation and in fact depend on it."
+msgstr ""
+"Existem duas principais maneiras de configurar o TLS no Linux(R). Pode ser "
+"definido ao clonar um processo usando a chamada de sistema `clone` ou pode "
+"chamar `set_thread_area`. Quando um processo passa a flag `CLONE_SETTLS` "
+"para `clone`, o kernel espera que a memória apontada pelo registro `%esi` "
+"seja uma representação do espaço do usuário Linux(R) de um segmento, que é "
+"traduzido para a representação do segmento da máquina e carregado em um slot "
+"GDT. O slot GDT pode ser especificado com um número ou -1 pode ser usado, o "
+"que significa que o sistema deve escolher automaticamente o primeiro slot "
+"livre. Na prática, a grande maioria dos programas usa apenas uma entrada TLS "
+"e não se preocupa com o número da entrada. Exploramos isso na emulação e, na "
+"verdade, dependemos disso."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1074
+#, no-wrap
+msgid "Emulation of Linux(R) TLS"
+msgstr "Emulação de TLS do Linux(R)"
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1077
+#, no-wrap
+msgid "i386"
+msgstr "i386"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1095
+msgid ""
+"Loading of TLS for the current thread happens by calling `set_thread_area` "
+"while loading TLS for a second process in `clone` is done in the separate "
+"block in `clone`. Those two functions are very similar. The only "
+"difference being the actual loading of the GDT segment, which happens on the "
+"next context switch for the newly created process while `set_thread_area` "
+"must load this directly. The code basically does this. It copies the "
+"Linux(R) form segment descriptor from the userland. The code checks for the "
+"number of the descriptor but because this differs between FreeBSD and "
+"Linux(R) we fake it a little. We only support indexes of 6, 3 and -1. The "
+"6 is genuine Linux(R) number, 3 is genuine FreeBSD one and -1 means "
+"autoselection. Then we set the descriptor number to constant 3 and copy out "
+"this to the userspace. We rely on the userspace process using the number "
+"from the descriptor but this works most of the time (have never seen a case "
+"where this did not work) as the userspace process typically passes in 1. "
+"Then we convert the descriptor from the Linux(R) form to a machine dependant "
+"form (i.e. operating system independent form) and copy this to the FreeBSD "
+"defined segment descriptor. Finally we can load it. We assign the "
+"descriptor to threads PCB (process control block) and load the `%gs` segment "
+"using `load_gs`. This loading must be done in a critical section so that "
+"nothing can interrupt us. The `CLONE_SETTLS` case works exactly like this "
+"just the loading using `load_gs` is not performed. The segment used for "
+"this (segment number 3) is shared for this use between FreeBSD processes and "
+"Linux(R) processes so the Linux(R) emulation layer does not add any overhead "
+"over plain FreeBSD."
+msgstr ""
+"O carregamento do TLS para a thread atual é feito chamando "
+"`set_thread_area`, enquanto o carregamento do TLS para um segundo processo "
+"no `clone` é feito em um bloco separado no `clone`. Essas duas funções são "
+"muito semelhantes. A única diferença é o carregamento real do segmento GDT, "
+"que ocorre na próxima troca de contexto para o processo recém-criado, "
+"enquanto o `set_thread_area` deve carregar isso diretamente. O código "
+"basicamente faz isso. Ele copia o descritor do segmento no formato Linux(R) "
+"do espaço do usuário. O código verifica o número do descritor, mas como isso "
+"difere entre FreeBSD e Linux(R), nós fazemos uma pequena manipulação. Nós "
+"suportamos apenas os índices 6, 3 e -1. O 6 é um número genuíno do Linux(R), "
+"o 3 é um número genuíno do FreeBSD e -1 significa seleção automática. Em "
+"seguida, definimos o número do descritor como o valor constante 3 e copiamos "
+"isso de volta para o espaço do usuário. Nós confiamos no processo do espaço "
+"do usuário usando o número do descritor, e isso funciona na maioria das "
+"vezes (nunca vi um caso em que isso não funcionasse), pois o processo do "
+"espaço do usuário normalmente passa o número 1. Em seguida, convertemos o "
+"descritor do formato Linux(R) para um formato dependente da máquina (ou "
+"seja, independente do sistema operacional) e copiamos isso para o descritor "
+"de segmento definido no FreeBSD. Finalmente, podemos carregá-lo. Atribuímos "
+"o descritor ao PCB (process control block) das threads e carregamos o "
+"segmento `%gs` usando `load_gs`. Esse carregamento deve ser feito em uma "
+"seção crítica para que nada possa nos interromper. O caso `CLONE_SETTLS` "
+"funciona exatamente da mesma maneira, apenas o carregamento usando `load_gs` "
+"não é realizado. O segmento usado para isso (número do segmento 3) é "
+"compartilhado entre processos FreeBSD e processos Linux(R), portanto, a "
+"camada de emulação do Linux(R) não adiciona nenhum overhead além do FreeBSD "
+"puro."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1097
+#, no-wrap
+msgid "amd64"
+msgstr "amd64"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1101
+msgid ""
+"The amd64 implementation is similar to the i386 one but there was initially "
+"no 32bit segment descriptor used for this purpose (hence not even native "
+"32bit TLS users worked) so we had to add such a segment and implement its "
+"loading on every context switch (when a flag signaling use of 32bit is "
+"set). Apart from this the TLS loading is exactly the same just the segment "
+"numbers are different and the descriptor format and the loading differs "
+"slightly."
+msgstr ""
+"A implementação do amd64 é semelhante à do i386, mas inicialmente não havia "
+"um descritor de segmento de 32 bits usado para esse propósito (portanto, nem "
+"mesmo os usuários nativos de TLS de 32 bits funcionavam), então tivemos que "
+"adicionar esse segmento e implementar seu carregamento em cada troca de "
+"contexto (quando uma flag sinalizando o uso de 32 bits é definida). Além "
+"disso, o carregamento de TLS é exatamente o mesmo, apenas os números de "
+"segmento são diferentes e o formato do descritor e o carregamento diferem um "
+"pouco."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1103
+#, no-wrap
+msgid "Futexes"
+msgstr "Futexes"
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1106
+#, no-wrap
+msgid "Introduction to synchronization"
+msgstr "Introdução à sincronização"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1116
+msgid ""
+"Threads need some kind of synchronization and POSIX(R) provides some of "
+"them: mutexes for mutual exclusion, read-write locks for mutual exclusion "
+"with biased ratio of reads and writes and condition variables for signaling "
+"a status change. It is interesting to note that POSIX(R) threading API "
+"lacks support for semaphores. Those synchronization routines "
+"implementations are heavily dependant on the type threading support we "
+"have. In pure 1:M (userspace) model the implementation can be solely done "
+"in userspace and thus be very fast (the condition variables will probably "
+"end up being implemented using signals, i.e. not fast) and simple. In 1:1 "
+"model, the situation is also quite clear - the threads must be synchronized "
+"using kernel facilities (which is very slow because a syscall must be "
+"performed). The mixed M:N scenario just combines the first and second "
+"approach or rely solely on kernel. Threads synchronization is a vital part "
+"of thread-enabled programming and its performance can affect resulting "
+"program a lot. Recent benchmarks on FreeBSD operating system showed that an "
+"improved sx_lock implementation yielded 40% speedup in _ZFS_ (a heavy sx "
+"user), this is in-kernel stuff but it shows clearly how important the "
+"performance of synchronization primitives is."
+msgstr ""
+"As threads necessitam de algum tipo de sincronização, o POSIX(R) fornece "
+"alguns mecanismos de sincronização, como mutexes para exclusão mútua, read-"
+"write locks para exclusão mútua com uma proporção enviesada de leituras e "
+"escritas, e variáveis de condição para sinalizar mudanças de status. É "
+"interessante notar que a API de threads POSIX(R) não oferece suporte para "
+"semáforos. A implementação dessas rotinas de sincronização depende "
+"fortemente do tipo de suporte a threading disponível. Em um modelo puro 1:M "
+"(userspace), a implementação pode ser feita exclusivamente no espaço de "
+"usuário, resultando em uma abordagem rápida e simples (embora as variáveis "
+"de condição possam ser implementadas usando sinais, o que pode ser mais "
+"lento). Em um modelo 1:1, as threads devem ser sincronizadas usando recursos "
+"do kernel, o que pode ser mais lento devido à necessidade de chamadas de "
+"sistema. O cenário misto M:N combina as abordagens anteriormente mencionadas "
+"ou depende exclusivamente do kernel. A sincronização de threads é uma parte "
+"vital da programação com threads, e seu desempenho pode afetar "
+"significativamente o programa resultante. Testes recentes no sistema "
+"operacional FreeBSD demonstraram um aumento de desempenho de 40% na "
+"implementação aprimorada do sx_lock no _ZFS_ (que faz uso intensivo de "
+"primitivas de sincronização). Embora esse exemplo se refira a operações no "
+"kernel, ele destaca a importância de primitivas de sincronização eficientes "
+"para o desempenho geral."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1120
+msgid ""
+"Threaded programs should be written with as little contention on locks as "
+"possible. Otherwise, instead of doing useful work the thread just waits on "
+"a lock. As a result of this, the most well written threaded programs show "
+"little locks contention."
+msgstr ""
+"Programas com threads devem ser escritos com o mínimo possível de contenção "
+"em locks. Caso contrário, em vez de realizar um trabalho útil, a thread "
+"apenas espera em um lock. Como resultado disso, os programas com threads bem "
+"escritos mostram pouca contenção em locks."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1122
+#, no-wrap
+msgid "Futexes introduction"
+msgstr "Introdução a Futexes"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1127
+msgid ""
+"Linux(R) implements 1:1 threading, i.e. it has to use in-kernel "
+"synchronization primitives. As stated earlier, well written threaded "
+"programs have little lock contention. So a typical sequence could be "
+"performed as two atomic increase/decrease mutex reference counter, which is "
+"very fast, as presented by the following example:"
+msgstr ""
+"O Linux(R) implementa threading 1:1, ou seja, ele utiliza primitivas de "
+"sincronização no kernel. Como mencionado anteriormente, programas com "
+"threads bem escritos têm pouca contenção em locks. Assim, uma sequência "
+"típica pode ser realizada com o aumento/diminuição atômica do contador de "
+"referência do mutex, o que é muito rápido, conforme apresentado no seguinte "
+"exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1133
+#, no-wrap
+msgid ""
+"pthread_mutex_lock(&mutex);\n"
+"...\n"
+"pthread_mutex_unlock(&mutex);\n"
+msgstr ""
+"pthread_mutex_lock(&mutex);\n"
+"...\n"
+"pthread_mutex_unlock(&mutex);\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1136
+msgid ""
+"1:1 threading forces us to perform two syscalls for those mutex calls, which "
+"is very slow."
+msgstr ""
+"O threading 1:1 nos força a executar dois syscalls para as chamadas mutex, o "
+"que é muito lento."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1141
+msgid ""
+"The solution Linux(R) 2.6 implements is called futexes. Futexes implement "
+"the check for contention in userspace and call kernel primitives only in a "
+"case of contention. Thus the typical case takes place without any kernel "
+"intervention. This yields reasonably fast and flexible synchronization "
+"primitives implementation."
+msgstr ""
+"A solução implementada pelo Linux(R) 2.6 é chamada de \"futexes\". Os "
+"futexes implementam a verificação de contenção no espaço do usuário e chamam "
+"as primitivas do kernel apenas em caso de contenção. Dessa forma, o caso "
+"típico ocorre sem qualquer intervenção do kernel. Isso resulta em uma "
+"implementação de primitivas de sincronização razoavelmente rápida e flexível."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1143
+#, no-wrap
+msgid "Futex API"
+msgstr "API do Futex"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1146
+msgid "The futex syscall looks like this:"
+msgstr "A syscall do futex é assim:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1150
+#, no-wrap
+msgid "int futex(void *uaddr, int op, int val, struct timespec *timeout, void *uaddr2, int val3);\n"
+msgstr "int futex(void *uaddr, int op, int val, struct timespec *timeout, void *uaddr2, int val3);\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1153
+msgid ""
+"In this example `uaddr` is an address of the mutex in userspace, `op` is an "
+"operation we are about to perform and the other parameters have per-"
+"operation meaning."
+msgstr ""
+"Neste exemplo, `uaddr` é o endereço do mutex no espaço do usuário, `op` é a "
+"operação que estamos prestes a realizar e os outros parâmetros têm "
+"significado específico para cada operação."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1155
+msgid "Futexes implement the following operations:"
+msgstr "Futexes implementam as seguintes operações:"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1157
+msgid "`FUTEX_WAIT`"
+msgstr "`FUTEX_WAIT`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1158
+msgid "`FUTEX_WAKE`"
+msgstr "`FUTEX_WAKE`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1159
+msgid "`FUTEX_FD`"
+msgstr "`FUTEX_FD`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1160
+msgid "`FUTEX_REQUEUE`"
+msgstr "`FUTEX_REQUEUE`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1161
+msgid "`FUTEX_CMP_REQUEUE`"
+msgstr "`FUTEX_CMP_REQUEUE`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1162
+msgid "`FUTEX_WAKE_OP`"
+msgstr "`FUTEX_WAKE_OP`"
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1164
+#, no-wrap
+msgid "FUTEX_WAIT"
+msgstr "FUTEX_WAIT"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1169
+msgid ""
+"This operation verifies that on address `uaddr` the value `val` is written. "
+"If not, `EWOULDBLOCK` is returned, otherwise the thread is queued on the "
+"futex and gets suspended. If the argument `timeout` is non-zero it "
+"specifies the maximum time for the sleeping, otherwise the sleeping is "
+"infinite."
+msgstr ""
+"Essa operação verifica se o valor `val` está escrito no endereço `uaddr`. Se "
+"não estiver, retorna `EWOULDBLOCK`. Caso contrário, a thread é colocada na "
+"fila do futex e é suspensa. Se o argumento `timeout` for diferente de zero, "
+"ele especifica o tempo máximo de suspensão. Caso contrário, a suspensão é "
+"infinita."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1171
+#, no-wrap
+msgid "FUTEX_WAKE"
+msgstr "FUTEX_WAKE"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1174
+msgid ""
+"This operation takes a futex at `uaddr` and wakes up `val` first futexes "
+"queued on this futex."
+msgstr ""
+"Essa operação pega um futex em `uaddr` e acorda os primeiros `val` futexes "
+"na fila desse futex."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1176
+#, no-wrap
+msgid "FUTEX_FD"
+msgstr "FUTEX_FD"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1179
+msgid "This operations associates a file descriptor with a given futex."
+msgstr ""
+"Esta operação associa um descritor de arquivo com um determinado futex."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1181
+#, no-wrap
+msgid "FUTEX_REQUEUE"
+msgstr "FUTEX_REQUEUE"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1184
+msgid ""
+"This operation takes `val` threads queued on futex at `uaddr`, wakes them "
+"up, and takes `val2` next threads and requeues them on futex at `uaddr2`."
+msgstr ""
+"Essa operação pega `val` threads na fila do futex em `uaddr`, acorda-as e "
+"pega `val2` threads seguintes e as coloca novamente na fila do futex em "
+"`uaddr2`."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1186
+#, no-wrap
+msgid "FUTEX_CMP_REQUEUE"
+msgstr "FUTEX_CMP_REQUEUE"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1189
+msgid ""
+"This operation does the same as `FUTEX_REQUEUE` but it checks that `val3` "
+"equals to `val` first."
+msgstr ""
+"Essa operação faz o mesmo que `FUTEX_REQUEUE`, mas verifica primeiro se "
+"`val3` é igual a `val`."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1191
+#, no-wrap
+msgid "FUTEX_WAKE_OP"
+msgstr "FUTEX_WAKE_OP"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1195
+msgid ""
+"This operation performs an atomic operation on `val3` (which contains coded "
+"some other value) and `uaddr`. Then it wakes up `val` threads on futex at "
+"`uaddr` and if the atomic operation returned a positive number it wakes up "
+"`val2` threads on futex at `uaddr2`."
+msgstr ""
+"Essa operação realiza uma operação atômica em `val3` (que contém codificado "
+"algum outro valor) e `uaddr`. Em seguida, acorda `val` threads no futex em "
+"`uaddr` e, se a operação atômica retornar um número positivo, acorda `val2` "
+"threads no futex em `uaddr2`."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1197
+msgid "The operations implemented in `FUTEX_WAKE_OP`:"
+msgstr "As operações implementadas em FUTEX_WAKE_OP são:"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1199
+msgid "`FUTEX_OP_SET`"
+msgstr "`FUTEX_OP_SET`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1200
+msgid "`FUTEX_OP_ADD`"
+msgstr "`FUTEX_OP_ADD`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1201
+msgid "`FUTEX_OP_OR`"
+msgstr "`FUTEX_OP_OR`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1202
+msgid "`FUTEX_OP_AND`"
+msgstr "`FUTEX_OP_AND`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1203
+msgid "`FUTEX_OP_XOR`"
+msgstr "`FUTEX_OP_XOR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1208
+msgid ""
+"There is no `val2` parameter in the futex prototype. The `val2` is taken "
+"from the `struct timespec *timeout` parameter for operations "
+"`FUTEX_REQUEUE`, `FUTEX_CMP_REQUEUE` and `FUTEX_WAKE_OP`."
+msgstr ""
+"Não há parâmetro `val2` no protótipo do futex. O `val2` é obtido do "
+"parâmetro `struct timespec *timeout` para as operações `FUTEX_REQUEUE`, "
+"`FUTEX_CMP_REQUEUE` e `FUTEX_WAKE_OP`."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1211
+#, no-wrap
+msgid "Futex emulation in FreeBSD"
+msgstr "Emulação de Futex no FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1216
+msgid ""
+"The futex emulation in FreeBSD is taken from NetBSD and further extended by "
+"us. It is placed in `linux_futex.c` and [.filename]#linux_futex.h# files. "
+"The `futex` structure looks like:"
+msgstr ""
+"A emulação de futex no FreeBSD é baseada no NetBSD e posteriormente "
+"estendida por nós. Ela é implementada nos arquivos `linux_futex.c` e [."
+"filename]#linux_futex.h#. A estrutura `futex` se parece com:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1222
+#, no-wrap
+msgid ""
+"struct futex {\n"
+" void *f_uaddr;\n"
+" int f_refcount;\n"
+msgstr ""
+"struct futex {\n"
+" void *f_uaddr;\n"
+" int f_refcount;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1224
+#, no-wrap
+msgid " LIST_ENTRY(futex) f_list;\n"
+msgstr " LIST_ENTRY(futex) f_list;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1227
+#, no-wrap
+msgid ""
+" TAILQ_HEAD(lf_waiting_paroc, waiting_proc) f_waiting_proc;\n"
+"};\n"
+msgstr ""
+" TAILQ_HEAD(lf_waiting_paroc, waiting_proc) f_waiting_proc;\n"
+"};\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1230
+msgid "And the structure `waiting_proc` is:"
+msgstr "E a estrutura `waiting_proc` é:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1234
+#, no-wrap
+msgid "struct waiting_proc {\n"
+msgstr "struct waiting_proc {\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1236
+#, no-wrap
+msgid " struct thread *wp_t;\n"
+msgstr " struct thread *wp_t;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1238
+#, no-wrap
+msgid " struct futex *wp_new_futex;\n"
+msgstr " struct futex *wp_new_futex;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1241
+#, no-wrap
+msgid ""
+" TAILQ_ENTRY(waiting_proc) wp_list;\n"
+"};\n"
+msgstr ""
+" TAILQ_ENTRY(waiting_proc) wp_list;\n"
+"};\n"
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1244
+#, no-wrap
+msgid "futex_get / futex_put"
+msgstr "futex_get / futex_put"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1248
+msgid ""
+"A futex is obtained using the `futex_get` function, which searches a linear "
+"list of futexes and returns the found one or creates a new futex. When "
+"releasing a futex from the use we call the `futex_put` function, which "
+"decreases a reference counter of the futex and if the refcount reaches zero "
+"it is released."
+msgstr ""
+"Um futex é obtido usando a função `futex_get`, que busca em uma lista linear "
+"de futexes e retorna o encontrado ou cria um novo futex. Ao liberar um futex "
+"do uso, chamamos a função `futex_put`, que diminui um contador de referência "
+"do futex e, se o contador de referência chegar a zero, ele é liberado."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1250
+#, no-wrap
+msgid "futex_sleep"
+msgstr "futex_sleep"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1258
+msgid ""
+"When a futex queues a thread for sleeping it creates a `working_proc` "
+"structure and puts this structure to the list inside the futex structure "
+"then it just performs a man:tsleep[9] to suspend the thread. The sleep can "
+"be timed out. After man:tsleep[9] returns (the thread was woken up or it "
+"timed out) the `working_proc` structure is removed from the list and is "
+"destroyed. All this is done in the `futex_sleep` function. If we got woken "
+"up from `futex_wake` we have `wp_new_futex` set so we sleep on it. This way "
+"the actual requeueing is done in this function."
+msgstr ""
+"Quando um futex coloca uma thread em espera, ele cria uma estrutura "
+"`working_proc` e a coloca na lista dentro da estrutura do futex. Em seguida, "
+"ele executa um `man:tsleep[9]` para suspender a thread. A suspensão pode ter "
+"um tempo limite. Após o retorno do `man:tsleep[9]` (quando a thread foi "
+"acordada ou quando expirou o tempo limite), a estrutura `working_proc` é "
+"removida da lista e destruída. Tudo isso é feito na função `futex_sleep`. Se "
+"acordamos de um `futex_wake`, `wp_new_futex` é definido para que durmamos "
+"nele. Dessa forma, o reenfileiramento real é feito nessa função."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1260
+#, no-wrap
+msgid "futex_wake"
+msgstr "futex_wake"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1268
+msgid ""
+"Waking up a thread sleeping on a futex is performed in the `futex_wake` "
+"function. First in this function we mimic the strange Linux(R) behavior, "
+"where it wakes up N threads for all operations, the only exception is that "
+"the REQUEUE operations are performed on N+1 threads. But this usually does "
+"not make any difference as we are waking up all threads. Next in the "
+"function in the loop we wake up n threads, after this we check if there is a "
+"new futex for requeueing. If so, we requeue up to n2 threads on the new "
+"futex. This cooperates with `futex_sleep`."
+msgstr ""
+"Acordar uma thread que está dormindo em um futex é realizado na função "
+"`futex_wake`. Primeiro, nesta função, imitamos o comportamento estranho do "
+"Linux(R), onde ele acorda N threads para todas as operações, com a única "
+"exceção de que as operações REQUEUE são realizadas em N+1 threads. Mas isso "
+"geralmente não faz diferença, pois estamos acordando todas as threads. Em "
+"seguida, no loop da função, acordamos n threads e, em seguida, verificamos "
+"se há um novo futex para reenfileiramento. Se houver, reenfileiramos até n2 "
+"threads no novo futex. Isso coopera com a função `futex_sleep`."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1270
+#, no-wrap
+msgid "futex_wake_op"
+msgstr "futex_wake_op"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1275
+msgid ""
+"The `FUTEX_WAKE_OP` operation is quite complicated. First we obtain two "
+"futexes at addresses `uaddr` and `uaddr2` then we perform the atomic "
+"operation using `val3` and `uaddr2`. Then `val` waiters on the first futex "
+"is woken up and if the atomic operation condition holds we wake up `val2` (i."
+"e. `timeout`) waiter on the second futex."
+msgstr ""
+"A operação `FUTEX_WAKE_OP` é bastante complexa. Primeiro, obtemos dois "
+"futexes nos endereços `uaddr` e `uaddr2`, em seguida, realizamos a operação "
+"atômica usando `val3` e `uaddr2`. Em seguida, acordamos as threads em espera "
+"com valor `val` no primeiro futex e, se a condição da operação atômica for "
+"satisfeita, acordamos a thread em espera com valor `val2` (ou seja, "
+"`timeout`) no segundo futex."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1277
+#, no-wrap
+msgid "futex atomic operation"
+msgstr "operação atômica futex"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1282
+msgid ""
+"The atomic operation takes two parameters `encoded_op` and `uaddr`. The "
+"encoded operation encodes the operation itself, comparing value, operation "
+"argument, and comparing argument. The pseudocode for the operation is like "
+"this one:"
+msgstr ""
+"A operação atômica recebe dois parâmetros: `encoded_op` e `uaddr`. A "
+"operação codificada codifica a própria operação, o valor de comparação, o "
+"argumento da operação e o argumento de comparação. O pseudocódigo para a "
+"operação é semelhante a este:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1287
+#, no-wrap
+msgid ""
+"oldval = *uaddr2\n"
+"*uaddr2 = oldval OP oparg\n"
+msgstr ""
+"oldval = *uaddr2\n"
+"*uaddr2 = oldval OP oparg\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1291
+msgid ""
+"And this is done atomically. First a copying in of the number at `uaddr` is "
+"performed and the operation is done. The code handles page faults and if no "
+"page fault occurs `oldval` is compared to `cmparg` argument with cmp "
+"comparator."
+msgstr ""
+"E isso é feito atomicamente. Primeiro, é feita uma cópia do número em "
+"`uaddr` e, em seguida, a operação é realizada. O código lida com faltas de "
+"página e, se nenhuma falta de página ocorrer, `oldval` é comparado com o "
+"argumento `cmparg` usando o comparador `cmp`."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1293
+#, no-wrap
+msgid "Futex locking"
+msgstr "Bloqueio Futex"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1297
+msgid ""
+"Futex implementation uses two lock lists protecting `sx_lock` and global "
+"locks (either Giant or another `sx_lock`). Every operation is performed "
+"locked from the start to the very end."
+msgstr ""
+"A implementação do futex utiliza duas listas de bloqueio para proteger o "
+"`sx_lock` e os bloqueios globais (seja Giant ou outro `sx_lock`). Cada "
+"operação é realizada com bloqueio desde o início até o final."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1299
+#, no-wrap
+msgid "Various syscalls implementation"
+msgstr "Implementação de várias syscalls"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1302
+msgid ""
+"In this section I am going to describe some smaller syscalls that are worth "
+"mentioning because their implementation is not obvious or those syscalls are "
+"interesting from other point of view."
+msgstr ""
+"Nesta seção, descreverei algumas syscalls menores que merecem destaque, pois "
+"sua implementação não é óbvia ou as syscalls são interessantes de outro "
+"ponto de vista."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1304
+#, no-wrap
+msgid "*at family of syscalls"
+msgstr "*na família de syscalls"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1313
+msgid ""
+"During development of Linux(R) 2.6.16 kernel, the *at syscalls were added. "
+"Those syscalls (`openat` for example) work exactly like their at-less "
+"counterparts with the slight exception of the `dirfd` parameter. This "
+"parameter changes where the given file, on which the syscall is to be "
+"performed, is. When the `filename` parameter is absolute `dirfd` is ignored "
+"but when the path to the file is relative, it comes to the play. The "
+"`dirfd` parameter is a directory relative to which the relative pathname is "
+"checked. The `dirfd` parameter is a file descriptor of some directory or "
+"`AT_FDCWD`. So for example the `openat` syscall can be like this:"
+msgstr ""
+"Durante o desenvolvimento do kernel Linux(R) 2.6.16, as chamadas de sistema "
+"*at foram adicionadas. Essas chamadas de sistema (`openat`, por exemplo) "
+"funcionam exatamente como suas contrapartes sem o \"at\", com a pequena "
+"exceção do parâmetro `dirfd`. Esse parâmetro altera onde o arquivo "
+"fornecido, no qual a chamada de sistema será executada, está localizado. "
+"Quando o parâmetro `filename` é absoluto, o `dirfd` é ignorado, mas quando o "
+"caminho para o arquivo é relativo, ele entra em jogo. O parâmetro `dirfd` é "
+"um diretório relativo ao qual o caminho relativo do arquivo é verificado. O "
+"`dirfd` é um descritor de arquivo de algum diretório ou `AT_FDCWD`. "
+"Portanto, por exemplo, a chamada de sistema `openat` pode ser assim:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1317
+#, no-wrap
+msgid "file descriptor 123 = /tmp/foo/, current working directory = /tmp/\n"
+msgstr "file descriptor 123 = /tmp/foo/, current working directory = /tmp/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1322
+#, no-wrap
+msgid ""
+"openat(123, /tmp/bah\\, flags, mode)\t/* opens /tmp/bah */\n"
+"openat(123, bah\\, flags, mode)\t\t/* opens /tmp/foo/bah */\n"
+"openat(AT_FDWCWD, bah\\, flags, mode)\t/* opens /tmp/bah */\n"
+"openat(stdio, bah\\, flags, mode)\t/* returns error because stdio is not a directory */\n"
+msgstr ""
+"openat(123, /tmp/bah\\, flags, mode)\t/* opens /tmp/bah */\n"
+"openat(123, bah\\, flags, mode)\t\t/* opens /tmp/foo/bah */\n"
+"openat(AT_FDWCWD, bah\\, flags, mode)\t/* opens /tmp/bah */\n"
+"openat(stdio, bah\\, flags, mode)\t/* returns error because stdio is not a directory */\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1331
+msgid ""
+"This infrastructure is necessary to avoid races when opening files outside "
+"the working directory. Imagine that a process consists of two threads, "
+"thread A and thread B. Thread A issues `open(./tmp/foo/bah., flags, mode)` "
+"and before returning it gets preempted and thread B runs. Thread B does not "
+"care about the needs of thread A and renames or removes [.filename]#/tmp/foo/"
+"#. We got a race. To avoid this we can open [.filename]#/tmp/foo# and use "
+"it as `dirfd` for `openat` syscall. This also enables user to implement per-"
+"thread working directories."
+msgstr ""
+"Essa infraestrutura é necessária para evitar corridas ao abrir arquivos fora "
+"do diretório de trabalho. Imagine que um processo consista em dois threads, "
+"thread A e thread B. A thread A chama `open(./tmp/foo/bah., flags, mode)` e "
+"antes de retornar, ela é preemptada e a thread B é executada. A thread B não "
+"se importa com as necessidades da thread A e renomeia ou remove [.filename]#/"
+"tmp/foo/#. Temos uma corrida. Para evitar isso, podemos abrir [.filename]#/"
+"tmp/foo# e usá-lo como `dirfd` para a chamada de sistema `openat`. Isso "
+"também permite que o usuário implemente diretórios de trabalho específicos "
+"por thread."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1334
+msgid ""
+"Linux(R) family of *at syscalls contains: `linux_openat`, `linux_mkdirat`, "
+"`linux_mknodat`, `linux_fchownat`, `linux_futimesat`, `linux_fstatat64`, "
+"`linux_unlinkat`, `linux_renameat`, `linux_linkat`, `linux_symlinkat`, "
+"`linux_readlinkat`, `linux_fchmodat` and `linux_faccessat`. All these are "
+"implemented using the modified man:namei[9] routine and simple wrapping "
+"layer."
+msgstr ""
+"A família de syscalls *at do Linux(R) contém: `linux_openat`, "
+"`linux_mkdirat`, `linux_mknodat`, `linux_fchownat`, `linux_futimesat`, "
+"`linux_fstatat64`, `linux_unlinkat`, `linux_renameat`, `linux_linkat`, "
+"`linux_symlinkat`, `linux_readlinkat`, `linux_fchmodat` e `linux_faccessat`. "
+"Todas essas syscalls são implementadas usando a rotina modificada man:"
+"namei[9] e uma camada de encapsulamento simples."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1336
+#, no-wrap
+msgid "Implementation"
+msgstr "Implementação"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1344
+msgid ""
+"The implementation is done by altering the man:namei[9] routine (described "
+"above) to take additional parameter `dirfd` in its `nameidata` structure, "
+"which specifies the starting point of the pathname lookup instead of using "
+"the current working directory every time. The resolution of `dirfd` from "
+"file descriptor number to a vnode is done in native *at syscalls. When "
+"`dirfd` is `AT_FDCWD` the `dvp` entry in `nameidata` structure is `NULL` but "
+"when `dirfd` is a different number we obtain a file for this file "
+"descriptor, check whether this file is valid and if there is vnode attached "
+"to it then we get a vnode. Then we check this vnode for being a directory. "
+"In the actual man:namei[9] routine we simply substitute the `dvp` vnode for "
+"`dp` variable in the man:namei[9] function, which determines the starting "
+"point. The man:namei[9] is not used directly but via a trace of different "
+"functions on various levels. For example the `openat` goes like this:"
+msgstr ""
+"A implementação é feita alterando a rotina man:namei[9] (descrita "
+"anteriormente) para receber um parâmetro adicional `dirfd` em sua estrutura "
+"`nameidata`, que especifica o ponto de partida da pesquisa do caminho em vez "
+"de usar o diretório de trabalho atual todas as vezes. A resolução do `dirfd` "
+"do número de descritor de arquivo para um vnode é feita nas syscalls *at "
+"nativas. Quando `dirfd` é `AT_FDCWD`, a entrada `dvp` na estrutura "
+"`nameidata` é `NULL`, mas quando `dirfd` é um número diferente, obtemos um "
+"arquivo para esse descritor de arquivo, verificamos se esse arquivo é válido "
+"e, se houver um vnode associado a ele, obtemos um vnode. Em seguida, "
+"verificamos se esse vnode é um diretório. Na própria rotina man:namei[9], "
+"simplesmente substituímos o vnode `dvp` pela variável `dp`, que determina o "
+"ponto de partida. A rotina man:namei[9] não é usada diretamente, mas sim "
+"através de uma sequência de diferentes funções em vários níveis. Por "
+"exemplo, o `openat` funciona da seguinte maneira:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1348
+#, no-wrap
+msgid "openat() --> kern_openat() --> vn_open() -> namei()\n"
+msgstr "openat() --> kern_openat() --> vn_open() -> namei()\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1354
+msgid ""
+"For this reason `kern_open` and `vn_open` must be altered to incorporate the "
+"additional `dirfd` parameter. No compat layer is created for those because "
+"there are not many users of this and the users can be easily converted. "
+"This general implementation enables FreeBSD to implement their own *at "
+"syscalls. This is being discussed right now."
+msgstr ""
+"Por esse motivo, `kern_open` e `vn_open` devem ser alterados para incorporar "
+"o parâmetro adicional `dirfd`. Nenhuma camada de compatibilidade é criada "
+"para essas funções porque não há muitos usuários desse recurso e os usuários "
+"existentes podem ser facilmente convertidos. Essa implementação geral "
+"permite que o FreeBSD implemente seus próprios syscalls *at. Isso está sendo "
+"discutido atualmente."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1356
+#, no-wrap
+msgid "Ioctl"
+msgstr "Ioctl"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1370
+msgid ""
+"The ioctl interface is quite fragile due to its generality. We have to bear "
+"in mind that devices differ between Linux(R) and FreeBSD so some care must "
+"be applied to do ioctl emulation work right. The ioctl handling is "
+"implemented in [.filename]#linux_ioctl.c#, where `linux_ioctl` function is "
+"defined. This function simply iterates over sets of ioctl handlers to find "
+"a handler that implements a given command. The ioctl syscall has three "
+"parameters, the file descriptor, command and an argument. The command is a "
+"16-bit number, which in theory is divided into high 8 bits determining class "
+"of the ioctl command and low 8 bits, which are the actual command within the "
+"given set. The emulation takes advantage of this division. We implement "
+"handlers for each set, like `sound_handler` or `disk_handler`. Each handler "
+"has a maximum command and a minimum command defined, which is used for "
+"determining what handler is used. There are slight problems with this "
+"approach because Linux(R) does not use the set division consistently so "
+"sometimes ioctls for a different set are inside a set they should not belong "
+"to (SCSI generic ioctls inside cdrom set, etc.). FreeBSD currently does not "
+"implement many Linux(R) ioctls (compared to NetBSD, for example) but the "
+"plan is to port those from NetBSD. The trend is to use Linux(R) ioctls even "
+"in the native FreeBSD drivers because of the easy porting of applications."
+msgstr ""
+"A interface ioctl é bastante frágil devido à sua generalidade. Devemos ter "
+"em mente que os dispositivos diferem entre o Linux(R) e o FreeBSD, então é "
+"necessário ter cuidado para garantir que a emulação do ioctl funcione "
+"corretamente. O tratamento do ioctl é implementado em [."
+"filename]#linux_ioctl.c#, onde a função `linux_ioctl` é definida. Essa "
+"função simplesmente itera sobre conjuntos de manipuladores de ioctl para "
+"encontrar um manipulador que implemente um determinado comando. A chamada de "
+"sistema ioctl possui três parâmetros: o descritor de arquivo, o comando e um "
+"argumento. O comando é um número de 16 bits, que teoricamente é dividido em "
+"8 bits superiores que determinam a classe do comando ioctl e 8 bits "
+"inferiores, que são o comando real dentro do conjunto dado. A emulação "
+"aproveita essa divisão. Implementamos manipuladores para cada conjunto, como "
+"`sound_handler` ou `disk_handler`. Cada manipulador possui um comando máximo "
+"e um comando mínimo definido, que é usado para determinar qual manipulador "
+"será usado. Existem pequenos problemas com essa abordagem porque o Linux(R) "
+"não usa a divisão de conjunto de forma consistente, então às vezes os ioctl "
+"de um conjunto diferente estão dentro de um conjunto ao qual não deveriam "
+"pertencer (ioctl genéricos do SCSI dentro do conjunto de cdrom, etc.). "
+"Atualmente, o FreeBSD não implementa muitos ioctl do Linux(R) (em comparação "
+"com o NetBSD, por exemplo), mas o plano é portá-los do NetBSD. A tendência é "
+"usar os ioctl do Linux(R) mesmo nos drivers nativos do FreeBSD devido à "
+"facilidade de portar aplicativos."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1372
+#, no-wrap
+msgid "Debugging"
+msgstr "Depuração"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1379
+msgid ""
+"Every syscall should be debuggable. For this purpose we introduce a small "
+"infrastructure. We have the ldebug facility, which tells whether a given "
+"syscall should be debugged (settable via a sysctl). For printing we have "
+"LMSG and ARGS macros. Those are used for altering a printable string for "
+"uniform debugging messages."
+msgstr ""
+"Cada chamada de sistema deve ser passível de depuração. Para esse propósito, "
+"introduzimos uma pequena infraestrutura. Temos a facilidade ldebug, que "
+"indica se uma determinada chamada de sistema deve ser depurada (configurável "
+"através de um sysctl). Para impressão, temos as macros LMSG e ARGS. Essas "
+"macros são usadas para modificar uma string imprimível para mensagens de "
+"depuração uniformes."
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1381
+#, no-wrap
+msgid "Conclusion"
+msgstr "Conclusão"
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1384
+#, no-wrap
+msgid "Results"
+msgstr "Resultados"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1390
+msgid ""
+"As of April 2007 the Linux(R) emulation layer is capable of emulating the "
+"Linux(R) 2.6.16 kernel quite well. The remaining problems concern futexes, "
+"unfinished *at family of syscalls, problematic signals delivery, missing "
+"`epoll` and `inotify` and probably some bugs we have not discovered yet. "
+"Despite this we are capable of running basically all the Linux(R) programs "
+"included in FreeBSD Ports Collection with Fedora Core 4 at 2.6.16 and there "
+"are some rudimentary reports of success with Fedora Core 6 at 2.6.16. The "
+"Fedora Core 6 linux_base was recently committed enabling some further "
+"testing of the emulation layer and giving us some more hints where we should "
+"put our effort in implementing missing stuff."
+msgstr ""
+"A partir de abril de 2007, a camada de emulação do Linux(R) é capaz de "
+"emular bem o kernel Linux(R) 2.6.16. Os problemas restantes envolvem "
+"futexes, chamadas de sistema inacabadas da família *at, entrega problemática "
+"de sinais, falta de suporte a `epoll` e `inotify`, e provavelmente alguns "
+"bugs que ainda não foram descobertos. Apesar disso, somos capazes de "
+"executar basicamente todos os programas Linux(R) incluídos na Coleção de "
+"Ports do FreeBSD com o Fedora Core 4 no kernel 2.6.16, e existem alguns "
+"relatos rudimentares de sucesso com o Fedora Core 6 no kernel 2.6.16. O "
+"linux_base do Fedora Core 6 foi recentemente adicionado, permitindo testes "
+"adicionais da camada de emulação e fornecendo mais informações sobre onde "
+"devemos concentrar nossos esforços na implementação do que está faltando."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1394
+msgid ""
+"We are able to run the most used applications like package:www/linux-"
+"firefox[], package:net-im/skype[] and some games from the Ports Collection. "
+"Some of the programs exhibit bad behavior under 2.6 emulation but this is "
+"currently under investigation and hopefully will be fixed soon. The only "
+"big application that is known not to work is the Linux(R) Java(TM) "
+"Development Kit and this is because of the requirement of `epoll` facility "
+"which is not directly related to the Linux(R) kernel 2.6."
+msgstr ""
+"Somos capazes de executar os aplicativos mais usados, como o pacote `www/"
+"linux-firefox`, o pacote `net-im/skype` e alguns jogos da Coleção de Ports. "
+"Alguns desses programas apresentam comportamento inadequado sob a emulação "
+"do 2.6, mas isso está atualmente em investigação e esperamos que seja "
+"corrigido em breve. O único grande aplicativo conhecido por não funcionar é "
+"o Java(TM) Development Kit do Linux(R), devido ao requisito da facilidade "
+"`epoll`, que não está diretamente relacionada ao kernel do Linux(R) 2.6."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1397
+msgid ""
+"We hope to enable 2.6.16 emulation by default some time after FreeBSD 7.0 is "
+"released at least to expose the 2.6 emulation parts for some wider testing. "
+"Once this is done we can switch to Fedora Core 6 linux_base, which is the "
+"ultimate plan."
+msgstr ""
+"Esperamos habilitar a emulação do 2.6.16 como padrão algum tempo depois do "
+"lançamento do FreeBSD 7.0, pelo menos para expor as partes de emulação 2.6 "
+"para um teste mais amplo. Uma vez feito isso, podemos mudar para o "
+"linux_base do Fedora Core 6, que é o plano final."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1399
+#, no-wrap
+msgid "Future work"
+msgstr "Trabalho futuro"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1402
+msgid ""
+"Future work should focus on fixing the remaining issues with futexes, "
+"implement the rest of the *at family of syscalls, fix the signal delivery "
+"and possibly implement the `epoll` and `inotify` facilities."
+msgstr ""
+"O trabalho futuro deve se concentrar em corrigir os problemas restantes com "
+"futexes, implementar o restante da família de chamadas de sistema *at, "
+"corrigir a entrega de sinais e possivelmente implementar as facilidades "
+"`epoll` e `inotify`."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1404
+msgid ""
+"We hope to be able to run the most important programs flawlessly soon, so we "
+"will be able to switch to the 2.6 emulation by default and make the Fedora "
+"Core 6 the default linux_base because our currently used Fedora Core 4 is "
+"not supported any more."
+msgstr ""
+"Esperamos poder executar os programas mais importantes com perfeição em "
+"breve, por isso poderemos alternar para a emulação 2.6 por padrão e fazer do "
+"Fedora Core 6 o linux_base padrão porque o nosso atualmente usado Fedora "
+"Core 4 não é mais suportado."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1408
+msgid ""
+"The other possible goal is to share our code with NetBSD and DragonflyBSD. "
+"NetBSD has some support for 2.6 emulation but its far from finished and not "
+"really tested. DragonflyBSD has expressed some interest in porting the 2.6 "
+"improvements."
+msgstr ""
+"Outro objetivo possível é compartilhar nosso código com o NetBSD e o "
+"DragonflyBSD. O NetBSD tem algum suporte para emulação 2.6, mas está longe "
+"de estar completo e não foi realmente testado. O DragonflyBSD mostrou "
+"interesse em portar as melhorias do 2.6."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1413
+msgid ""
+"Generally, as Linux(R) develops we would like to keep up with their "
+"development, implementing newly added syscalls. Splice comes to mind "
+"first. Some already implemented syscalls are also suboptimal, for example "
+"`mremap` and others. Some performance improvements can also be made, finer "
+"grained locking and others."
+msgstr ""
+"Em geral, à medida que o Linux(R) se desenvolve, gostaríamos de acompanhar o "
+"seu desenvolvimento, implementando as novas chamadas de sistema adicionadas. "
+"O `splice` é uma delas que vem à mente em primeiro lugar. Algumas chamadas "
+"de sistema já implementadas também podem ser aprimoradas, por exemplo, "
+"`mremap` e outras. Também podem ser feitas melhorias de desempenho, como "
+"bloqueio mais refinado e outros."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1415
+#, no-wrap
+msgid "Team"
+msgstr "Equipe"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1418
+msgid "I cooperated on this project with (in alphabetical order):"
+msgstr "Eu colaborei neste projeto com (em ordem alfabética):"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1420
+msgid "`{jhb}`"
+msgstr "`{jhb}`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1421
+msgid "`{kib}`"
+msgstr "`{kib}`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1422
+msgid "Emmanuel Dreyfus"
+msgstr "Emmanuel Dreyfus"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1423
+msgid "Scot Hetzel"
+msgstr "Scot Hetzel"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1424
+msgid "`{jkim}`"
+msgstr "`{jkim}`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1425
+msgid "`{netchild}`"
+msgstr "`{netchild}`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1426
+msgid "`{ssouhlal}`"
+msgstr "`{ssouhlal}`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1427
+msgid "Li Xiao"
+msgstr "Li Xiao"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1428
+msgid "`{davidxu}`"
+msgstr "`{davidxu}`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1430
+msgid ""
+"I would like to thank all those people for their advice, code reviews and "
+"general support."
+msgstr ""
+"Gostaria de agradecer a todas as pessoas por seus conselhos, revisões de "
+"código e apoio geral."
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1432
+#, no-wrap
+msgid "Literatures"
+msgstr "Literaturas"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1435
+msgid ""
+"Marshall Kirk McKusick - George V. Nevile-Neil. Design and Implementation of "
+"the FreeBSD operating system. Addison-Wesley, 2005."
+msgstr ""
+"Marshall Kirk McKusick - George V. Nevile-Neil. Design and Implementation of "
+"the FreeBSD operating system. Addison-Wesley, 2005."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1436
+msgid "https://tldp.org[https://tldp.org]"
+msgstr "https://tldp.org[https://tldp.org]"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1436
+msgid "https://www.kernel.org[https://www.kernel.org]"
+msgstr "https://www.kernel.org[https://www.kernel.org]"
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/linux-users/_index.adoc b/documentation/content/pt-br/articles/linux-users/_index.adoc
index be03dd4fd4..3e7f05ea65 100644
--- a/documentation/content/pt-br/articles/linux-users/_index.adoc
+++ b/documentation/content/pt-br/articles/linux-users/_index.adoc
@@ -1,12 +1,15 @@
---
-title: Guia rápido de FreeBSD para usuários de Linux
authors:
- - author: John Ferrell
-copyright: 2008 Projeto de Documentação do FreeBSD
+ -
+ author: 'John Ferrell'
+copyright: '2008 The FreeBSD Documentation Project'
+description: 'Este documento destina-se a familiarizar rapidamente os usuários intermediários a avançados do Linux® com os conceitos básicos do FreeBSD.'
+tags: ["Quickstart", "guide", "Linux", "FreeBSD"]
+title: 'Guia de Início Rápido do FreeBSD para Usuários do Linux®'
trademarks: ["freebsd", "intel", "redhat", "linux", "unix", "general"]
---
-= Guia rápido de FreeBSD para usuários de Linux
+= Guia de Início Rápido do FreeBSD para Usuários do Linux(R)
:doctype: article
:toc: macro
:toclevels: 1
@@ -40,7 +43,7 @@ endif::[]
[.abstract-title]
Resumo
-Este documento tem a intenção de familiarizar rapidamente usuários intermediários ou avançados do Linux(R) com o básico do FreeBSD.
+Este documento tem como objetivo familiarizar rapidamente os usuários intermediários a avançados do Linux(R) com os conceitos básicos do FreeBSD.
'''
@@ -49,86 +52,86 @@ toc::[]
[[intro]]
== Introdução
-Esse documento destaca algumas diferenças técnicas entre o FreeBSD e o Linux(R) para que os usuários intermediários ou avançados do Linux(R) possam se familiarizar rapidamente com o básico do FreeBSD.
+Este documento destaca algumas das diferenças técnicas entre o FreeBSD e o Linux(R) para que os usuários intermediários a avançados do Linux® possam se familiarizar rapidamente com os conceitos básicos do FreeBSD.
-Este documento assume que o FreeBSD já está instalado. Acesse o link do capítulo extref:{handbook}bsdinstall[Instalando o FreeBSD, bsdinstall] no Handbook do FreeBSD para obter ajuda no processo de instalação.
+Este documento pressupõe que o FreeBSD já está instalado. Consulte o capítulo extref:{handbook}[Instalando o FreeBSD, bsdinstall] no Handbook para obter ajuda com o processo de instalação.
[[shells]]
== Shell Padrão
-Os usuários do Linux(R) são geralmente surpreendidos quando descobrem que o Bash não é o shell padrão do FreeBSD. De fato, o Bash não é incluído na instalação padrão. Ao invés disto, o FreeBSD usa o man:tcsh[1] como shell padrão para o usuário root, e o man:sh[1], um shell compatível com o Bourne shell, como shell padrão para os demais usuários. O man:sh[1] é muito similar ao Bash mas com um conjunto de funcionalidades muito menor. Geralmente os scripts shell escritos para o man:sh[1] irão ser executados no Bash, mas o contrário não.
+Usuários de Linux(R) muitas vezes se surpreendem ao descobrir que o Bash não é a shell padrão no FreeBSD. Na verdade, o Bash não está incluído na instalação padrão. Em vez disso, a shell compatível com o shell Bourne, man:sh[1], é a shell padrão dos usuários. Por padrão a shell do usuário root é a man:tcsh[1] no FreeBSD 13 e nas versões anteriores, já no FreeBSD 14 e versões posteriores é a man:sh[1]. A man:sh[1] é muito semelhante ao Bash, mas com um conjunto de recursos muito menor. Geralmente, os scripts de shell escritos para aman:sh[1] serão executados no Bash, mas o contrário nem sempre é verdadeiro.
-Entretanto, o Bash e outros shells estão disponíveis para a instalação usando a extref:{handbook}ports[Coleção de Pacotes e a Árvore de Ports, ports].
+No entanto, o Bash e outros shells estão disponíveis para instalação usando a extref:{handbook}[Coleção de Pacotes e Ports do FreeBSD, ports].
-Depois de instalar um novo shell, use o comando man:chsh[1] para trocar o shell padrão do usuário. É recomendado que o shell padrão do usuário `root` se mantenha inalterado uma vez que os shells que não fazem parte da base do sistema são instalados em [.filename]#/usr/local/bin#. No caso de ocorrer algum problema com o sistema de arquivos onde o diretório [.filename]#/usr/local/bin# está localizado e este não puder ser utilizado, o usuário `root` poderá não ter acesso ao shell padrão, evitando que o usuário `root` entre no sistema para corrigir o problema.
+Após instalar outro shell, use o man:chsh[1] para mudar o shell padrão do usuário. É recomendado que o shell padrão do usuário `root` permaneça inalterado, já que shells que não estão incluídas na distribuição base são instalados em [.filename]#/usr/local/bin#. Em caso de problema, o sistema de arquivos onde o [.filename]#/usr/local/bin# está localizado pode não estar montado. Nesse caso, o usuário `root` não teria acesso ao seu shell padrão, o que impediria o `root` de fazer login e corrigir o problema.
[[software]]
-== Coleção de Pacotes e Árvore de Ports: Instalando novos programas no FreeBSD
+== Pacotes e Ports: Adicionando Softwares no FreeBSD
-FreeBSD provê dois métodos para a instalação de novos aplicativos: pacotes binários e através da compilação do código fonte (Árvore de ports). Cada método tem seu benefício:
+O FreeBSD oferece dois métodos para instalar aplicativos: pacotes binários e ports compilados. Cada método tem seus próprios benefícios:
.Pacotes Binários
-* Instalação rápida quando comparada com a compilação de grandes aplicativos .
-* Não há a necessidade de compreender como compilar um software.
-* Não é necessário a instalação de um compilador.
+* Instalação mais rápida em comparação à compilação de aplicativos grandes.
+* Não requer compreensão de como compilar o software.
+* Não é necessário instalar um compilador.
.Árvore de Ports
-* Possibilidade de customizar as opções de instalação
-* Possibilidade de se aplicar patchs customizados
+* Capacidade de personalizar as opções de instalação.
+* Possibilidade de aplicar patches personalizados.
-Se a instalação da aplicação não necessitar de opções customizadas, a instalação via pacotes é suficiente. Compile o port sempre que o aplicativo exigir a personalização das opções padrão. Se você necessita de pacotes customizados, você poderá obtê-los através da compilação a partir do ports utilizando o comando `make Pacotes`.
+Se a instalação de um aplicativo não requer personalização, a instalação do pacote é suficiente. Compile o port sempre que um aplicativo exigir personalização das opções padrão. Se necessário, um pacote personalizado pode ser compilado a partir do ports usando o comando `make package`.
-A lista completa da árvore de ports e dos pacotes pode ser encontrada https://www.freebsd.org/ports/[aqui].
+Uma lista completa de todos os ports e pacotes disponíveis pode ser encontrada https://www.freebsd.org/ports/[aqui].
[[packages]]
=== Pacotes
-Pacotes são aplicações pré-compiladas, os equivalentes no FreeBSD aos arquivos [.filename]#.deb# nos sistemas baseados no Debian/Ubuntu e aos arquivos [.filename]#.rpm# nos sistemas baseados no Fedora/Red Hat. Pacotes são instalados através do comando `pkg`. Por exemplo, o comando a seguir instala o Apache 2.4:
+Pacotes são aplicativos pré-compilados, os equivalentes no FreeBSD dos arquivos [.filename]#.deb# em sistemas baseados em Debian/Ubuntu e [.filename]#.rpm# em sistemas baseados em Red Hat/Fedora. Os pacotes são instalados usando o comando `pkg`. Por exemplo, o seguinte comando instala o Apache 2.4:
-[source,shell]
+[source, shell]
....
# pkg install apache24
....
-Para mais informações sobre pacotes, veja a seção 5.4 do Handbook do FreeBSD: extref:{handbook}ports[Usando pkgng para gerenciar pacotes binários, pkgng-intro].
+Para mais informações sobre pacotes, consulte a seção 5.4 do Handbook do FreeBSD: extref:{handbook}[Usando o pkgng para Gerenciamento de Pacotes Binários, pkgng-intro].
[[ports]]
=== Árvore de Ports
-A árvore de ports do FreeBSD é um framework de [.filename]##Makefiles##s e patches customizados especificamente para a instalação através do código fonte no FreeBSD. Quando um port é instalado, o sistema irá buscar o código fonte, aplicar qualquer patch que seja necessário, compilar o código, instalar a aplicação e qualquer outra dependência da qual ela necessite.
+A Coleção de Ports do FreeBSD é um conjunto de [.filename]#Makefiles# e patches específicos para instalar aplicativos a partir do código-fonte no FreeBSD. Ao instalar um port, o sistema buscará o código-fonte, aplicará os patches necessários, compilando o código e instalando o aplicativo e quaisquer dependências necessárias.
-A Coleção de Ports, algumas vezes referenciada como a árvore de ports, pode ser instalada em [.filename]#/usr/ports# usando o comando man:portsnap[8] (se estiver rodando FreeBSD 11.4 ou 12.1) ou Subversion (se estiver rodando FreeBSD-CURRENT). Instruções detalhadas para instalação da Coleção de Ports podem ser encontradas na extref:{handbook}ports[seção 5.5, ports-using] do Handbook do FreeBSD.
+A Coleção de Ports, às vezes referida como árvore de ports, pode ser instalada em [.filename]#/usr/ports# usando o link:{handbook}mirrors/#git[Git]. Instruções detalhadas para a instalação da Coleção de Ports podem ser encontradas na extref:{handbook}[seção 4.5.1, ports-using-installation-methods] do Handbook do FreeBSD.
-Para compilar um port, mude para o diretório do port e inicie o processo de compilação. O exemplo abaixo instala o Apache 2.4 através da Coleção de Ports:
+Para compilar um port, mude para o diretório do port e inicie o processo de compilação. O seguinte exemplo instala o Apache 2.4 a partir da Coleção de Ports:
-[source,shell]
+[source, shell]
....
# cd /usr/ports/www/apache24
# make install clean
....
-Um dos benefícios de usar a árvore de ports para realizar a instalação de um software é a possibilidade de customizar as opções de instalação. O exemplo a seguir, especifica que o módulo mod_ldap também deve ser instalado:
+Um benefício de usar o ports para instalar software é a capacidade de personalizar as opções de instalação. Este exemplo especifica que o módulo mod_ldap também deve ser instalado:
-[source,shell]
+[source, shell]
....
# cd /usr/ports/www/apache24
# make WITH_LDAP="YES" install clean
....
-Veja extref:{handbook}ports[Usando a Coleção de Ports, ports-using] para mais informações.
+Para mais informações, consulte extref:{handbook}[Usando a Coleção de Ports, ports-using] no Handbook do FreeBSD.
[[startup]]
== Inicialização do Sistema
-Muitas distribuições Linux(R) usam o sistema init do SysV, enquanto o FreeBSD usa o tradicional man:init[8] estilo BSD. Por utilizar este sistema man:init[8], não existe níveis diferenciados de execução e o arquivo [.filename]#/etc/inittab# não existe. Ao invés disto, a inicialização é controlada por meio de scripts man:rc[8]. Na inicialização do sistema, o [.filename]#/etc/rc# lê o arquivo [.filename]#/etc/rc.conf# e o arquivo [.filename]#/etc/defaults/rc.conf# para determinar quais são os serviços que devem ser inicializados. Os serviços especificados são inicializados pela execução de scripts de inicialização localizados em [.filename]#/etc/rc.d/# e [.filename]#/usr/local/etc/rc.d/#. Esses scripts são similares aos contidos no diretório [.filename]#/etc/init.d/# dos sistemas Linux(R).
+Muitas distribuições Linux(R) usam o sistema SysV init, enquanto o FreeBSD usa o tradicional estilo BSD de man:init[8]. Sob o estilo BSD de man:init[8], não há run-levels e o arquivo [.filename]#/etc/inittab# não existe. Em vez disso, a inicialização é controlada pelos scripts man:rc[8]. No boot do sistema, o arquivo [.filename]#/etc/rc# lê os arquivos [.filename]#/etc/rc.conf# e [.filename]#/etc/defaults/rc.conf# para determinar quais serviços devem ser iniciados. Os serviços especificados são então iniciados executando os scripts de inicialização de serviço correspondentes localizados em [.filename]#/etc/rc.d/# e [.filename]#/usr/local/etc/rc.d/#. Esses scripts são semelhantes aos scripts localizados em [.filename]#/etc/init.d/# nos sistemas Linux(R).
-Os scripts encontrados no diretório [.filename]#/etc/rc.d/# fazem parte das aplicações da "base" do sistema, tais como man:cron[8], man:sshd[8], e man:syslog[3]. Os scripts encontrados no diterório [.filename]#/usr/local/etc/rc.d/# correspondem aos aplicativos instalados pelo usuário, como por exemplo: Apache e Squid.
+Os scripts encontrados em [.filename]#/etc/rc.d/# são relacionados aos aplicativos que fazem parte do sistema "base", como man:cron[8], man:sshd[8] e man:syslog[3]. Os scripts em [.filename]#/usr/local/etc/rc.d/# são relacionados aos aplicativos instalados pelo usuário, como o Apache e o Squid.
-Uma vez que o FreeBSD é desenvolvido como um sistema completo, aplicações instaladas pelos usuários não são consideradas parte do sistema "base". As aplicações dos usuários são geralmente instaladas por meio extref:{handbook}ports[dos Pacotes Binários ou da Coleção de Ports, ports-using]. Para mantê-los separados da base do sistema, eles são instalados sob o diretório [.filename]#/usr/local/#. Portanto, os aplicativos binários instalados pelos usuários localizam-se em [.filename]#/usr/local/bin/#, e os arquivos de configuração em [.filename]#/usr/local/etc/#.
+Como o FreeBSD é desenvolvido como um sistema operacional completo, os aplicativos instalados pelo usuário não são considerados parte do sistema "base". Os aplicativos instalados pelo usuário geralmente são instalados usando extref:{handbook}[Pacotes ou Ports, ports-using]. Para mantê-los separados do sistema base, os aplicativos instalados pelo usuário são instalados em [.filename]#/usr/local/#. Portanto, os binários instalados pelo usuário residem em [.filename]#/usr/local/bin/#, os arquivos de configuração estão em [.filename]#/usr/local/etc/# e assim por diante.
-Os serviços são habilitados pela adição de uma entrada no arquivo [.filename]#/etc/rc.conf# . As configurações padrões são encontradas no arquivo [.filename]#/etc/defaults/rc.conf# e essas configurações padrões são sobre postas pelas configurações realizadas no arquivo [.filename]#/etc/rc.conf#. Veja o manual do man:rc.conf[5] para maiores informações sobre as entradas disponíveis. Quando você instalar aplicações adicionais, leia as mensagens de instalação da aplicação para determinar como habilitar os serviços associados a essa aplicação.
+Os serviços são ativados adicionando uma entrada para o serviço em [.filename]#/etc/rc.conf#. As configurações padrão do sistema são encontradas no [.filename]#/etc/defaults/rc.conf# e essas configurações padrão são substituídas por configurações definidas no [.filename]#/etc/rc.conf#. Consulte man:rc.conf[5] para obter mais informações sobre as entradas disponíveis. Ao instalar aplicativos adicionais, revise a mensagem de instalação do aplicativo para determinar como ativar quaisquer serviços associados.
-As seguintes entradas no arquivo [.filename]#/etc/rc.conf# habilitam o man:sshd[8], o Apache 2.4, e especifica que o Apache deve ser inicializado com SSL ativado.
+As seguintes entradas em [.filename]#/etc/rc.conf# habilitam o man:sshd[8], habilitam o Apache 2.4 e especificam que o Apache deve ser iniciado com SSL.
[.programlisting]
....
@@ -139,30 +142,28 @@ apache24_enable="YES"
apache24_flags="-DSSL"
....
-Uma vez que o serviço tenha sido habilitado no arquivo [.filename]#/etc/rc.conf#, ele pode ser inicializado sem a necessidade de uma reinicialização do sistema.
+Depois que um serviço foi habilitado no [.filename]#/etc/rc.conf#, ele pode ser iniciado sem reiniciar o sistema:
-[source,shell]
+[source, shell]
....
# service sshd start
# service apache24 start
....
-Se o serviço não tiver sido habilitado, ele poderá ser inicializado a partir da linha de comando usando a opção `onestart`:
+Se um serviço não tiver sido habilitado, ele pode ser iniciado a partir da linha de comando usando o comando `onestart`:
-[source,shell]
+[source, shell]
....
-
# service sshd onestart
....
[[network]]
== Configuração de Rede
-Diferente da identificação genérica _ethX_ usada pelo Linux(R) para identificar a interface de rede, o FreeBSD usa o nome do driver seguido por um número. A seguinte saída do comando man:ifconfig[8] mostra duas interfaces de rede Intel(R) Pro 1000 ([.filename]#em0# e [.filename]#em1#):
+Em vez de um identificador genérico _ethX_ que o Linux(R) usa para identificar uma interface de rede, o FreeBSD usa o nome do driver seguido por um número. A saída a seguir do man:ifconfig[8] mostra duas interfaces de rede Intel(R) Pro 1000 ([.filename]#em0# e [.filename]#em1#):
-[source,shell]
+[source, shell]
....
-
% ifconfig
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=b<RXCSUM,TXCSUM,VLAN_MTU>
@@ -178,7 +179,7 @@ em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
status: active
....
-Um endereço IP pode ser designado à uma interface utilizando o comando man:ifconfig[8]. Para torna-lo definitivo e persistente entre as reinicializações, o endereço IP deve ser incluído no arquivo [.filename]#/etc/rc.conf#. A seguinte entrada no arquivo [.filename]#/etc/rc.conf# especifica o nome da máquina, o endereço IP e o gateway padrão da rede:
+Um endereço IP pode ser atribuído a uma interface usando o comando man:ifconfig[8]. Para que a configuração de IP permaneça persistente através das reinicializações, ela deve ser incluída no [.filename]#/etc/rc.conf#. As seguintes entradas no [.filename]#/etc/rc.conf# especificam o nome do host, o endereço IP e o gateway padrão:
[.programlisting]
....
@@ -187,7 +188,7 @@ ifconfig_em0="inet 10.10.10.100 netmask 255.255.255.0"
defaultrouter="10.10.10.1"
....
-Use a seguinte entrada para configurar uma interface para obter sua configuração por meio do DHCP:
+Use as seguintes entradas para configurar uma interface para utilizar DHCP:
[.programlisting]
....
@@ -198,33 +199,33 @@ ifconfig_em0="DHCP"
[[firewall]]
== Firewall
-O sistema FreeBSD não utiliza o Linux(R) IPTABLES como seu firewall, o FreeBSD oferece três tipos de firewall a nível de kernel:
+O FreeBSD não usa o IPTABLES do Linux(R) para o seu firewall. Em vez disso, o FreeBSD oferece uma escolha de três firewalls em nível de kernel:
-* extref:{handbook}firewalls[PF, firewalls-pf]
-* extref:{handbook}firewalls[IPFILTER, firewalls-ipf]
-* extref:{handbook}firewalls[IPFW, firewalls-ipfw]
+* extref:{handbook}[PF, firewalls-pf]
+* extref:{handbook}[IPFILTER, firewalls-ipf]
+* extref:{handbook}[IPFW, firewalls-ipfw]
-O PF é desenvolvido pelo projeto OpenBSD e portado para o FreeBSD. O PF foi criado para substituir o IPFILTER e sua sintaxe é similar ao IPFILTER. O PF pode ser utilizado em conjunto com man:altq[4] para prover funcionalidade de QoS.
+O PF é desenvolvido pelo projeto OpenBSD e portado para o FreeBSD. O PF foi criado como um substituto para o IPFILTER e sua sintaxe é semelhante à do IPFILTER. O PF pode ser combinado com o man:altq[4] para fornecer recursos de QoS.
-O exemplo abaixo mostra uma regra do PF para permitir conexões de entrada do SSH:
+Este exemplo de regra do PF permite as conexões de entrada do SSH:
[.programlisting]
....
pass in on $ext_if inet proto tcp from any to ($ext_if) port 22
....
-O IPFILTER é uma aplicação de firewall desenvolvida por Darren Reed. Ela não é específica para o FreeBSD e foi portado para diversos sistemas operacionais, incluindo NetBSD, OpenBSD, SunOS, HP/UX, e Solaris.
+O IPFILTER é o aplicativo de firewall desenvolvido por Darren Reed. Não é específico do FreeBSD e foi portado para vários sistemas operacionais, incluindo NetBSD, OpenBSD, SunOS, HP/UX e Solaris.
-A sintaxe do IPFILTER para permitir conexões de entrada do SSH é:
+A sintaxe do IPFILTER para permitir o recebimento de conexões no SSH é a seguinte:
[.programlisting]
....
pass in on $ext_if proto tcp from any to any port = 22
....
-O IPFW é o firewall desenvolvido e mantido pelo FreeBSD. Ele pode ser utilizado em conjunto com o man:dummynet[4] para prover a funcionalidade de traffic shaping e simular diferentes tipos de conexões de rede.
+O IPFW é o firewall desenvolvido e mantido pelo FreeBSD. Ele pode ser combinado com o man:dummynet[4] para fornecer recursos de controle de tráfego e simular diferentes tipos de conexões de rede.
-A sintaxe do IPFW para permitir conexões de entrada do SSH é:
+A sintaxe do IPFW para permitir a entrada de conexões SSH é a seguinte:
[.programlisting]
....
@@ -234,15 +235,15 @@ ipfw add allow tcp from any to me 22 in via $ext_if
[[updates]]
== Atualizando o FreeBSD
-Existem dois métodos para realizar a atualização em um sistema FreeBSD: a partir do código fonte ou atualização binária.
+Existem dois métodos para atualizar um sistema FreeBSD: a partir do código-fonte ou a partir de atualizações binárias.
-Atualizar através do código fonte é a forma mais trabalhosa, mas ela oferece uma grande flexibilidade. O processo envolve a sincronização da cópia local do código fonte do FreeBSD com os servidores de Subversion do FreeBSD. Uma vez que o código fonte local esteja atualizado, uma nova versão do kernel e da userland poderão ser compiladas.
+Atualizar a partir do código-fonte é o método de atualização mais complexo, mas oferece a maior flexibilidade. O processo envolve sincronizar uma cópia local do código-fonte do FreeBSD com o repositório Git do FreeBSD. Assim que o código-fonte local estiver atualizado, uma nova versão do kernel e do userland pode ser compilada.
-Atualização binária é similar ao uso do comando `yum` ou `apt-get` para atualizar um sistema Linux(R). No FreeBSD, o comando man:freebsd-update[8] pode ser utilizado para buscar uma nova atualização binária e a instalá-la. Estas atualizações podem ser agendada usando o man:cron[8].
+As atualizações binárias são semelhantes ao uso do `yum` ou do `apt-get` para atualizar um sistema Linux(R). No FreeBSD, o man:freebsd-update[8] pode ser usado para buscar novas atualizações binárias e instalá-las. Essas atualizações podem ser agendadas usando o man:cron[8].
[NOTE]
====
-Quando utilizar o man:cron[8] para agendar as atualizações, use o comando `freebsd-update cron` no arquivo man:crontab[1] para reduzir a possibilidade de que um grande número de máquinas busquem a atualização ao mesmo tempo:
+Ao usar o man:cron[8] para agendar atualizações, use o `freebsd-update cron` no man:crontab[1] para reduzir a possibilidade de que um grande número de máquinas busque atualizações ao mesmo tempo:
[.programlisting]
....
@@ -251,41 +252,40 @@ Quando utilizar o man:cron[8] para agendar as atualizações, use o comando `fre
====
-Para maiores informações sobre a atualização por meio do código fonte ou dos updates binários, acesse o extref:{handbook}updating-upgrading[capítulo sobre atualização, updating-upgrading] do Handbook do FreeBSD.
+Para obter mais informações sobre as atualizações a partir do código-fonte e a partir de binários, consulte o extref:{handbook}[capítulo sobre atualizações, updating-upgrading-freebsdupdate] do Handbook do FreeBSD.
[[procfs]]
-== procfs: É passado, mas foi não esquecido
+== procfs: desaparecido, mas não esquecido
-Em algumas distribuições do Linux(R), você pode consultar o [.filename]#/proc/sys/net/ipv4/ip_forward# para verificar se o encaminhamento de IP está ou não abilitado. No FreeBSD, o comando man:sysctl[8] é utilizado para ver o status desta e também de outras variáveis do sistema.
+Em algumas distribuições Linux(R), é possível verificar se o encaminhamento de IP está habilitado verificando o arquivo [.filename]#/proc/sys/net/ipv4/ip_forward#. No FreeBSD, o comando man:sysctl[8] é utilizado para visualizar essa e outras configurações do sistema.
-Por exemplo, use o seguinte comando para determinar se o encaminhamento de IP está ou não habilitado.
+Por exemplo, use o seguinte comando para verificar se o encaminhamento de IP está habilitado em um sistema FreeBSD:
-[source,shell]
+[source, shell]
....
% sysctl net.inet.ip.forwarding
net.inet.ip.forwarding: 0
....
-Use a opção `-a` para ver todas as variáveis do sistema:
+Use a opção `-a` para listar todas as configurações do sistema:
-[source,shell]
+[source, shell]
....
-
% sysctl -a | more
....
-Se alguma aplicação necessitar do procfs, adicione a seguinte entrada no arquivo [.filename]#/etc/fstab#:
+Se um aplicativo requer o uso do procfs, adicione a seguinte entrada ao arquivo [.filename]#/etc/fstab#:
-[source,shell]
+[source, shell]
....
proc /proc procfs rw,noauto 0 0
....
-Incluindo a opção `noauto` irá previnir que o [.filename]#/proc# seja montado automaticamente durante a inicialização do sistema.
+Incluir o parâmetro `noauto` faz com que o diretório [.filename]#/proc# não seja montado automaticamente durante a inicialização do sistema.
-Para montar o sistema de arquivos sem reinicializar:
+Para montar o sistema de arquivos sem reiniciar o sistema:
-[source,shell]
+[source, shell]
....
# mount /proc
....
@@ -298,21 +298,21 @@ Alguns comandos comuns e equivalentes são os seguintes:
[.informaltable]
[cols="1,1,1", frame="none", options="header"]
|===
-| Comandos do Linux (Red Hat/Debian)
-| Equivalente no FreeBSD
+| Comando Linux(R) (Red Hat/Debian)
+| Equivalente FreeBSD
| Propósito
|`yum install _package_` / `apt-get install _package_`
|`pkg install _package_`
-|Instalação de um pacote binário de um repositório remoto
+|Instala um pacote a partir de um repositório remoto
|`rpm -ivh _package_` / `dpkg -i _package_`
|`pkg add _package_`
-|Instalação de um pacote local.
+|Instala um pacote local
|`rpm -qa` / `dpkg -l`
|`pkg info`
-|Listar os pacotes instalados (Pacotes binários e através da árvore de ports)
+|Lista os pacotes instalados
|`lspci`
|`pciconf`
@@ -320,18 +320,18 @@ Alguns comandos comuns e equivalentes são os seguintes:
|`lsmod`
|`kldstat`
-|Lista os módulos do kernel que foram carregados
+|Lista os módulos do kernel carregados
|`modprobe`
|`kldload` / `kldunload`
-|Carrega/Descarrega módulos do kernel.
+|Carrega / Descarrega módulos do kernel
|`strace`
|`truss`
-|Rastreia chamadas do sistema
+|Rastrea as chamadas de sistema
|===
[[conclusion]]
== Conclusão
-EEste documento forneceu uma visão geral do FreeBSD. Veja o extref:{handbook}[Handbook do FreeBSD] para uma cobertura mais profunda desses tópicos, assim como outros não cobertos por este documento.
+Este documento forneceu uma visão geral do FreeBSD. Consulte o extref:{handbook}[Handbook do FreeBSD] para obter uma cobertura mais detalhada desses tópicos, bem como de muitos outros tópicos não abordados por este documento.
diff --git a/documentation/content/pt-br/articles/linux-users/_index.po b/documentation/content/pt-br/articles/linux-users/_index.po
new file mode 100644
index 0000000000..cb174479f0
--- /dev/null
+++ b/documentation/content/pt-br/articles/linux-users/_index.po
@@ -0,0 +1,1007 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-06-19 21:08-0300\n"
+"PO-Revision-Date: 2023-06-21 21:54+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articleslinux-users_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/linux-users/_index.adoc:1
+#, no-wrap
+msgid "This document is intended to quickly familiarize intermediate to advanced Linux® users with the basics of FreeBSD."
+msgstr "Este documento destina-se a familiarizar rapidamente os usuários intermediários a avançados do Linux® com os conceitos básicos do FreeBSD."
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/articles/linux-users/_index.adoc:1
+#, no-wrap
+msgid "FreeBSD Quickstart Guide for Linux® Users"
+msgstr "Guia de Início Rápido do FreeBSD para Usuários do Linux®"
+
+#. type: Title =
+#: documentation/content/en/articles/linux-users/_index.adoc:11
+#, no-wrap
+msgid "FreeBSD Quickstart Guide for Linux(R) Users"
+msgstr "Guia de Início Rápido do FreeBSD para Usuários do Linux(R)"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:46
+msgid ""
+"This document is intended to quickly familiarize intermediate to advanced "
+"Linux(R) users with the basics of FreeBSD."
+msgstr ""
+"Este documento tem como objetivo familiarizar rapidamente os usuários "
+"intermediários a avançados do Linux(R) com os conceitos básicos do FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:48
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:52
+#, no-wrap
+msgid "Introduction"
+msgstr "Introdução"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:55
+msgid ""
+"This document highlights some of the technical differences between FreeBSD "
+"and Linux(R) so that intermediate to advanced Linux(R) users can quickly "
+"familiarize themselves with the basics of FreeBSD."
+msgstr ""
+"Este documento destaca algumas das diferenças técnicas entre o FreeBSD e o "
+"Linux(R) para que os usuários intermediários a avançados do Linux® possam se "
+"familiarizar rapidamente com os conceitos básicos do FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:58
+msgid ""
+"This document assumes that FreeBSD is already installed. Refer to the "
+"extref:{handbook}[Installing FreeBSD, bsdinstall] chapter of the FreeBSD "
+"Handbook for help with the installation process."
+msgstr ""
+"Este documento pressupõe que o FreeBSD já está instalado. Consulte o "
+"capítulo extref:{handbook}[Instalando o FreeBSD, bsdinstall] no Handbook "
+"para obter ajuda com o processo de instalação."
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:60
+#, no-wrap
+msgid "Default Shell"
+msgstr "Shell Padrão"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:68
+msgid ""
+"Linux(R) users are often surprised to find that Bash is not the default "
+"shell in FreeBSD. In fact, Bash is not included in the default "
+"installation. Instead, the Bourne shell-compatible man:sh[1] as the default "
+"user shell. The root shell is man:tcsh[1] by default on FreeBSD 13 and "
+"earlier and man:sh[1] on FreeBSD 14 and later. man:sh[1] is very similar to "
+"Bash but with a much smaller feature-set. Generally shell scripts written "
+"for man:sh[1] will run in Bash, but the reverse is not always true."
+msgstr ""
+"Usuários de Linux(R) muitas vezes se surpreendem ao descobrir que o Bash não "
+"é a shell padrão no FreeBSD. Na verdade, o Bash não está incluído na "
+"instalação padrão. Em vez disso, a shell compatível com o shell Bourne, man:"
+"sh[1], é a shell padrão dos usuários. Por padrão a shell do usuário root é "
+"a man:tcsh[1] no FreeBSD 13 e nas versões anteriores, já no FreeBSD 14 e "
+"versões posteriores é a man:sh[1]. A man:sh[1] é muito semelhante ao Bash, "
+"mas com um conjunto de recursos muito menor. Geralmente, os scripts de shell "
+"escritos para aman:sh[1] serão executados no Bash, mas o contrário nem "
+"sempre é verdadeiro."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:70
+msgid ""
+"However, Bash and other shells are available for installation using the "
+"FreeBSD extref:{handbook}[Packages and Ports Collection, ports]."
+msgstr ""
+"No entanto, o Bash e outros shells estão disponíveis para instalação usando "
+"a extref:{handbook}[Coleção de Pacotes e Ports do FreeBSD, ports]."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:75
+msgid ""
+"After installing another shell, use man:chsh[1] to change a user's default "
+"shell. It is recommended that the `root` user's default shell remain "
+"unchanged since shells which are not included in the base distribution are "
+"installed to [.filename]#/usr/local/bin#. In the event of a problem, the "
+"file system where [.filename]#/usr/local/bin# is located may not be "
+"mounted. In this case, `root` would not have access to its default shell, "
+"preventing `root` from logging in and fixing the problem."
+msgstr ""
+"Após instalar outro shell, use o man:chsh[1] para mudar o shell padrão do "
+"usuário. É recomendado que o shell padrão do usuário `root` permaneça "
+"inalterado, já que shells que não estão incluídas na distribuição base são "
+"instalados em [.filename]#/usr/local/bin#. Em caso de problema, o sistema de "
+"arquivos onde o [.filename]#/usr/local/bin# está localizado pode não estar "
+"montado. Nesse caso, o usuário `root` não teria acesso ao seu shell padrão, "
+"o que impediria o `root` de fazer login e corrigir o problema."
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:77
+#, no-wrap
+msgid "Packages and Ports: Adding Software in FreeBSD"
+msgstr "Pacotes e Ports: Adicionando Softwares no FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:81
+msgid ""
+"FreeBSD provides two methods for installing applications: binary packages "
+"and compiled ports. Each method has its own benefits:"
+msgstr ""
+"O FreeBSD oferece dois métodos para instalar aplicativos: pacotes binários e "
+"ports compilados. Cada método tem seus próprios benefícios:"
+
+#. type: Block title
+#: documentation/content/en/articles/linux-users/_index.adoc:82
+#, no-wrap
+msgid "Binary Packages"
+msgstr "Pacotes Binários"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:84
+msgid "Faster installation as compared to compiling large applications."
+msgstr ""
+"Instalação mais rápida em comparação à compilação de aplicativos grandes."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:85
+msgid "Does not require an understanding of how to compile software."
+msgstr "Não requer compreensão de como compilar o software."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:86
+msgid "No need to install a compiler."
+msgstr "Não é necessário instalar um compilador."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-users/_index.adoc:87
+#: documentation/content/en/articles/linux-users/_index.adoc:112
+#, no-wrap
+msgid "Ports"
+msgstr "Árvore de Ports"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:89
+msgid "Ability to customize installation options."
+msgstr "Capacidade de personalizar as opções de instalação."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:90
+msgid "Custom patches can be applied."
+msgstr "Possibilidade de aplicar patches personalizados."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:94
+msgid ""
+"If an application installation does not require any customization, "
+"installing the package is sufficient. Compile the port instead whenever an "
+"application requires customization of the default options. If needed, a "
+"custom package can be compiled from ports using `make package`."
+msgstr ""
+"Se a instalação de um aplicativo não requer personalização, a instalação do "
+"pacote é suficiente. Compile o port sempre que um aplicativo exigir "
+"personalização das opções padrão. Se necessário, um pacote personalizado "
+"pode ser compilado a partir do ports usando o comando `make package`."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:96
+msgid ""
+"A complete list of all available ports and packages can be found https://www."
+"freebsd.org/ports/[here]."
+msgstr ""
+"Uma lista completa de todos os ports e pacotes disponíveis pode ser "
+"encontrada https://www.freebsd.org/ports/[aqui]."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-users/_index.adoc:98
+#, no-wrap
+msgid "Packages"
+msgstr "Pacotes"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:103
+msgid ""
+"Packages are pre-compiled applications, the FreeBSD equivalents of [."
+"filename]#.deb# files on Debian/Ubuntu based systems and [.filename]#.rpm# "
+"files on Red Hat/Fedora based systems. Packages are installed using `pkg`. "
+"For example, the following command installs Apache 2.4:"
+msgstr ""
+"Pacotes são aplicativos pré-compilados, os equivalentes no FreeBSD dos "
+"arquivos [.filename]#.deb# em sistemas baseados em Debian/Ubuntu e [."
+"filename]#.rpm# em sistemas baseados em Red Hat/Fedora. Os pacotes são "
+"instalados usando o comando `pkg`. Por exemplo, o seguinte comando instala o "
+"Apache 2.4:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:107
+#, no-wrap
+msgid "# pkg install apache24\n"
+msgstr "# pkg install apache24\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:110
+msgid ""
+"For more information on packages refer to section 5.4 of the FreeBSD "
+"Handbook: extref:{handbook}[Using pkgng for Binary Package Management, pkgng-"
+"intro]."
+msgstr ""
+"Para mais informações sobre pacotes, consulte a seção 5.4 do Handbook do "
+"FreeBSD: extref:{handbook}[Usando o pkgng para Gerenciamento de Pacotes "
+"Binários, pkgng-intro]."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:116
+msgid ""
+"The FreeBSD Ports Collection is a framework of [.filename]#Makefiles# and "
+"patches specifically customized for installing applications from source on "
+"FreeBSD. When installing a port, the system will fetch the source code, "
+"apply any required patches, compile the code, and install the application "
+"and any required dependencies."
+msgstr ""
+"A Coleção de Ports do FreeBSD é um conjunto de [.filename]#Makefiles# e "
+"patches específicos para instalar aplicativos a partir do código-fonte no "
+"FreeBSD. Ao instalar um port, o sistema buscará o código-fonte, aplicará os "
+"patches necessários, compilando o código e instalando o aplicativo e "
+"quaisquer dependências necessárias."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:119
+msgid ""
+"The Ports Collection, sometimes referred to as the ports tree, can be "
+"installed to [.filename]#/usr/ports# using link:{handbook}mirrors/"
+"#git[Git]. Detailed instructions for installing the Ports Collection can be "
+"found in extref:{handbook}[section 4.5.1, ports-using-installation-methods] "
+"of the FreeBSD Handbook."
+msgstr ""
+"A Coleção de Ports, às vezes referida como árvore de ports, pode ser "
+"instalada em [.filename]#/usr/ports# usando o link:{handbook}mirrors/"
+"#git[Git]. Instruções detalhadas para a instalação da Coleção de Ports podem "
+"ser encontradas na extref:{handbook}[seção 4.5.1, ports-using-installation-"
+"methods] do Handbook do FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:121
+msgid ""
+"To compile a port, change to the port's directory and start the build "
+"process. The following example installs Apache 2.4 from the Ports Collection:"
+msgstr ""
+"Para compilar um port, mude para o diretório do port e inicie o processo de "
+"compilação. O seguinte exemplo instala o Apache 2.4 a partir da Coleção de "
+"Ports:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:126
+#, no-wrap
+msgid ""
+"# cd /usr/ports/www/apache24\n"
+"# make install clean\n"
+msgstr ""
+"# cd /usr/ports/www/apache24\n"
+"# make install clean\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:130
+msgid ""
+"A benefit of using ports to install software is the ability to customize the "
+"installation options. This example specifies that the mod_ldap module "
+"should also be installed:"
+msgstr ""
+"Um benefício de usar o ports para instalar software é a capacidade de "
+"personalizar as opções de instalação. Este exemplo especifica que o módulo "
+"mod_ldap também deve ser instalado:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:135
+#, no-wrap
+msgid ""
+"# cd /usr/ports/www/apache24\n"
+"# make WITH_LDAP=\"YES\" install clean\n"
+msgstr ""
+"# cd /usr/ports/www/apache24\n"
+"# make WITH_LDAP=\"YES\" install clean\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:138
+msgid ""
+"Refer to extref:{handbook}[Using the Ports Collection, ports-using] for more "
+"information."
+msgstr ""
+"Para mais informações, consulte extref:{handbook}[Usando a Coleção de Ports, "
+"ports-using] no Handbook do FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:140
+#, no-wrap
+msgid "System Startup"
+msgstr "Inicialização do Sistema"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:147
+msgid ""
+"Many Linux(R) distributions use the SysV init system, whereas FreeBSD uses "
+"the traditional BSD-style man:init[8]. Under the BSD-style man:init[8], "
+"there are no run-levels and [.filename]#/etc/inittab# does not exist. "
+"Instead, startup is controlled by man:rc[8] scripts. At system boot, [."
+"filename]#/etc/rc# reads [.filename]#/etc/rc.conf# and [.filename]#/etc/"
+"defaults/rc.conf# to determine which services are to be started. The "
+"specified services are then started by running the corresponding service "
+"initialization scripts located in [.filename]#/etc/rc.d/# and [.filename]#/"
+"usr/local/etc/rc.d/#. These scripts are similar to the scripts located in [."
+"filename]#/etc/init.d/# on Linux(R) systems."
+msgstr ""
+"Muitas distribuições Linux(R) usam o sistema SysV init, enquanto o FreeBSD "
+"usa o tradicional estilo BSD de man:init[8]. Sob o estilo BSD de man:"
+"init[8], não há run-levels e o arquivo [.filename]#/etc/inittab# não existe. "
+"Em vez disso, a inicialização é controlada pelos scripts man:rc[8]. No boot "
+"do sistema, o arquivo [.filename]#/etc/rc# lê os arquivos [.filename]#/etc/"
+"rc.conf# e [.filename]#/etc/defaults/rc.conf# para determinar quais serviços "
+"devem ser iniciados. Os serviços especificados são então iniciados "
+"executando os scripts de inicialização de serviço correspondentes "
+"localizados em [.filename]#/etc/rc.d/# e [.filename]#/usr/local/etc/rc.d/#. "
+"Esses scripts são semelhantes aos scripts localizados em [.filename]#/etc/"
+"init.d/# nos sistemas Linux(R)."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:150
+msgid ""
+"The scripts found in [.filename]#/etc/rc.d/# are for applications that are "
+"part of the \"base\" system, such as man:cron[8], man:sshd[8], and man:"
+"syslog[3]. The scripts in [.filename]#/usr/local/etc/rc.d/# are for user-"
+"installed applications such as Apache and Squid."
+msgstr ""
+"Os scripts encontrados em [.filename]#/etc/rc.d/# são relacionados aos "
+"aplicativos que fazem parte do sistema \"base\", como man:cron[8], man:"
+"sshd[8] e man:syslog[3]. Os scripts em [.filename]#/usr/local/etc/rc.d/# são "
+"relacionados aos aplicativos instalados pelo usuário, como o Apache e o "
+"Squid."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:155
+msgid ""
+"Since FreeBSD is developed as a complete operating system, user-installed "
+"applications are not considered to be part of the \"base\" system. User-"
+"installed applications are generally installed using extref:{handbook}"
+"[Packages or Ports, ports-using]. In order to keep them separate from the "
+"base system, user-installed applications are installed under [.filename]#/"
+"usr/local/#. Therefore, user-installed binaries reside in [.filename]#/usr/"
+"local/bin/#, configuration files are in [.filename]#/usr/local/etc/#, and so "
+"on."
+msgstr ""
+"Como o FreeBSD é desenvolvido como um sistema operacional completo, os "
+"aplicativos instalados pelo usuário não são considerados parte do sistema "
+"\"base\". Os aplicativos instalados pelo usuário geralmente são instalados "
+"usando extref:{handbook}[Pacotes ou Ports, ports-using]. Para mantê-los "
+"separados do sistema base, os aplicativos instalados pelo usuário são "
+"instalados em [.filename]#/usr/local/#. Portanto, os binários instalados "
+"pelo usuário residem em [.filename]#/usr/local/bin/#, os arquivos de "
+"configuração estão em [.filename]#/usr/local/etc/# e assim por diante."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:160
+msgid ""
+"Services are enabled by adding an entry for the service in [.filename]#/etc/"
+"rc.conf#. The system defaults are found in [.filename]#/etc/defaults/rc."
+"conf# and these default settings are overridden by settings in [.filename]#/"
+"etc/rc.conf#. Refer to man:rc.conf[5] for more information about the "
+"available entries. When installing additional applications, review the "
+"application's install message to determine how to enable any associated "
+"services."
+msgstr ""
+"Os serviços são ativados adicionando uma entrada para o serviço em [."
+"filename]#/etc/rc.conf#. As configurações padrão do sistema são encontradas "
+"no [.filename]#/etc/defaults/rc.conf# e essas configurações padrão são "
+"substituídas por configurações definidas no [.filename]#/etc/rc.conf#. "
+"Consulte man:rc.conf[5] para obter mais informações sobre as entradas "
+"disponíveis. Ao instalar aplicativos adicionais, revise a mensagem de "
+"instalação do aplicativo para determinar como ativar quaisquer serviços "
+"associados."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:162
+msgid ""
+"The following entries in [.filename]#/etc/rc.conf# enable man:sshd[8], "
+"enable Apache 2.4, and specify that Apache should be started with SSL."
+msgstr ""
+"As seguintes entradas em [.filename]#/etc/rc.conf# habilitam o man:sshd[8], "
+"habilitam o Apache 2.4 e especificam que o Apache deve ser iniciado com SSL."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:170
+#, no-wrap
+msgid ""
+"# enable SSHD\n"
+"sshd_enable=\"YES\"\n"
+"# enable Apache with SSL\n"
+"apache24_enable=\"YES\"\n"
+"apache24_flags=\"-DSSL\"\n"
+msgstr ""
+"# enable SSHD\n"
+"sshd_enable=\"YES\"\n"
+"# enable Apache with SSL\n"
+"apache24_enable=\"YES\"\n"
+"apache24_flags=\"-DSSL\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:173
+msgid ""
+"Once a service has been enabled in [.filename]#/etc/rc.conf#, it can be "
+"started without rebooting the system:"
+msgstr ""
+"Depois que um serviço foi habilitado no [.filename]#/etc/rc.conf#, ele pode "
+"ser iniciado sem reiniciar o sistema:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:178
+#, no-wrap
+msgid ""
+"# service sshd start\n"
+"# service apache24 start\n"
+msgstr ""
+"# service sshd start\n"
+"# service apache24 start\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:181
+msgid ""
+"If a service has not been enabled, it can be started from the command line "
+"using `onestart`:"
+msgstr ""
+"Se um serviço não tiver sido habilitado, ele pode ser iniciado a partir da "
+"linha de comando usando o comando `onestart`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:185
+#, no-wrap
+msgid "# service sshd onestart\n"
+msgstr "# service sshd onestart\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:188
+#, no-wrap
+msgid "Network Configuration"
+msgstr "Configuração de Rede"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:192
+msgid ""
+"Instead of a generic _ethX_ identifier that Linux(R) uses to identify a "
+"network interface, FreeBSD uses the driver name followed by a number. The "
+"following output from man:ifconfig[8] shows two Intel(R) Pro 1000 network "
+"interfaces ([.filename]#em0# and [.filename]#em1#):"
+msgstr ""
+"Em vez de um identificador genérico _ethX_ que o Linux(R) usa para "
+"identificar uma interface de rede, o FreeBSD usa o nome do driver seguido "
+"por um número. A saída a seguir do man:ifconfig[8] mostra duas interfaces de "
+"rede Intel(R) Pro 1000 ([.filename]#em0# e [.filename]#em1#):"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:208
+#, no-wrap
+msgid ""
+"% ifconfig\n"
+"em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n"
+" options=b<RXCSUM,TXCSUM,VLAN_MTU>\n"
+" inet 10.10.10.100 netmask 0xffffff00 broadcast 10.10.10.255\n"
+" ether 00:50:56:a7:70:b2\n"
+" media: Ethernet autoselect (1000baseTX <full-duplex>)\n"
+" status: active\n"
+"em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n"
+" options=b<RXCSUM,TXCSUM,VLAN_MTU>\n"
+" inet 192.168.10.222 netmask 0xffffff00 broadcast 192.168.10.255\n"
+" ether 00:50:56:a7:03:2b\n"
+" media: Ethernet autoselect (1000baseTX <full-duplex>)\n"
+" status: active\n"
+msgstr ""
+"% ifconfig\n"
+"em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n"
+" options=b<RXCSUM,TXCSUM,VLAN_MTU>\n"
+" inet 10.10.10.100 netmask 0xffffff00 broadcast 10.10.10.255\n"
+" ether 00:50:56:a7:70:b2\n"
+" media: Ethernet autoselect (1000baseTX <full-duplex>)\n"
+" status: active\n"
+"em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n"
+" options=b<RXCSUM,TXCSUM,VLAN_MTU>\n"
+" inet 192.168.10.222 netmask 0xffffff00 broadcast 192.168.10.255\n"
+" ether 00:50:56:a7:03:2b\n"
+" media: Ethernet autoselect (1000baseTX <full-duplex>)\n"
+" status: active\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:213
+msgid ""
+"An IP address can be assigned to an interface using man:ifconfig[8]. To "
+"remain persistent across reboots, the IP configuration must be included in [."
+"filename]#/etc/rc.conf#. The following [.filename]#/etc/rc.conf# entries "
+"specify the hostname, IP address, and default gateway:"
+msgstr ""
+"Um endereço IP pode ser atribuído a uma interface usando o comando man:"
+"ifconfig[8]. Para que a configuração de IP permaneça persistente através das "
+"reinicializações, ela deve ser incluída no [.filename]#/etc/rc.conf#. As "
+"seguintes entradas no [.filename]#/etc/rc.conf# especificam o nome do host, "
+"o endereço IP e o gateway padrão:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:219
+#, no-wrap
+msgid ""
+"hostname=\"server1.example.com\"\n"
+"ifconfig_em0=\"inet 10.10.10.100 netmask 255.255.255.0\"\n"
+"defaultrouter=\"10.10.10.1\"\n"
+msgstr ""
+"hostname=\"server1.example.com\"\n"
+"ifconfig_em0=\"inet 10.10.10.100 netmask 255.255.255.0\"\n"
+"defaultrouter=\"10.10.10.1\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:222
+msgid "Use the following entries to instead configure an interface for DHCP:"
+msgstr ""
+"Use as seguintes entradas para configurar uma interface para utilizar DHCP:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:227
+#, no-wrap
+msgid ""
+"hostname=\"server1.example.com\"\n"
+"ifconfig_em0=\"DHCP\"\n"
+msgstr ""
+"hostname=\"server1.example.com\"\n"
+"ifconfig_em0=\"DHCP\"\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:230
+#, no-wrap
+msgid "Firewall"
+msgstr "Firewall"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:234
+msgid ""
+"FreeBSD does not use Linux(R) IPTABLES for its firewall. Instead, FreeBSD "
+"offers a choice of three kernel level firewalls:"
+msgstr ""
+"O FreeBSD não usa o IPTABLES do Linux(R) para o seu firewall. Em vez disso, "
+"o FreeBSD oferece uma escolha de três firewalls em nível de kernel:"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:236
+msgid "extref:{handbook}[PF, firewalls-pf]"
+msgstr "extref:{handbook}[PF, firewalls-pf]"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:237
+msgid "extref:{handbook}[IPFILTER, firewalls-ipf]"
+msgstr "extref:{handbook}[IPFILTER, firewalls-ipf]"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:238
+msgid "extref:{handbook}[IPFW, firewalls-ipfw]"
+msgstr "extref:{handbook}[IPFW, firewalls-ipfw]"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:242
+msgid ""
+"PF is developed by the OpenBSD project and ported to FreeBSD. PF was "
+"created as a replacement for IPFILTER and its syntax is similar to that of "
+"IPFILTER. PF can be paired with man:altq[4] to provide QoS features."
+msgstr ""
+"O PF é desenvolvido pelo projeto OpenBSD e portado para o FreeBSD. O PF foi "
+"criado como um substituto para o IPFILTER e sua sintaxe é semelhante à do "
+"IPFILTER. O PF pode ser combinado com o man:altq[4] para fornecer recursos "
+"de QoS."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:244
+msgid "This sample PF entry allows inbound SSH:"
+msgstr "Este exemplo de regra do PF permite as conexões de entrada do SSH:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:248
+#, no-wrap
+msgid "pass in on $ext_if inet proto tcp from any to ($ext_if) port 22\n"
+msgstr "pass in on $ext_if inet proto tcp from any to ($ext_if) port 22\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:252
+msgid ""
+"IPFILTER is the firewall application developed by Darren Reed. It is not "
+"specific to FreeBSD and has been ported to several operating systems "
+"including NetBSD, OpenBSD, SunOS, HP/UX, and Solaris."
+msgstr ""
+"O IPFILTER é o aplicativo de firewall desenvolvido por Darren Reed. Não é "
+"específico do FreeBSD e foi portado para vários sistemas operacionais, "
+"incluindo NetBSD, OpenBSD, SunOS, HP/UX e Solaris."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:254
+msgid "The IPFILTER syntax to allow inbound SSH is:"
+msgstr ""
+"A sintaxe do IPFILTER para permitir o recebimento de conexões no SSH é a "
+"seguinte:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:258
+#, no-wrap
+msgid "pass in on $ext_if proto tcp from any to any port = 22\n"
+msgstr "pass in on $ext_if proto tcp from any to any port = 22\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:262
+msgid ""
+"IPFW is the firewall developed and maintained by FreeBSD. It can be paired "
+"with man:dummynet[4] to provide traffic shaping capabilities and simulate "
+"different types of network connections."
+msgstr ""
+"O IPFW é o firewall desenvolvido e mantido pelo FreeBSD. Ele pode ser "
+"combinado com o man:dummynet[4] para fornecer recursos de controle de "
+"tráfego e simular diferentes tipos de conexões de rede."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:264
+msgid "The IPFW syntax to allow inbound SSH would be:"
+msgstr ""
+"A sintaxe do IPFW para permitir a entrada de conexões SSH é a seguinte:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:268
+#, no-wrap
+msgid "ipfw add allow tcp from any to me 22 in via $ext_if\n"
+msgstr "ipfw add allow tcp from any to me 22 in via $ext_if\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:271
+#, no-wrap
+msgid "Updating FreeBSD"
+msgstr "Atualizando o FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:274
+msgid ""
+"There are two methods for updating a FreeBSD system: from source or binary "
+"updates."
+msgstr ""
+"Existem dois métodos para atualizar um sistema FreeBSD: a partir do código-"
+"fonte ou a partir de atualizações binárias."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:278
+msgid ""
+"Updating from source is the most involved update method, but offers the "
+"greatest amount of flexibility. The process involves synchronizing a local "
+"copy of the FreeBSD source code with the FreeBSD Git repository. Once the "
+"local source code is up-to-date, a new version of the kernel and userland "
+"can be compiled."
+msgstr ""
+"Atualizar a partir do código-fonte é o método de atualização mais complexo, "
+"mas oferece a maior flexibilidade. O processo envolve sincronizar uma cópia "
+"local do código-fonte do FreeBSD com o repositório Git do FreeBSD. Assim que "
+"o código-fonte local estiver atualizado, uma nova versão do kernel e do "
+"userland pode ser compilada."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:282
+msgid ""
+"Binary updates are similar to using `yum` or `apt-get` to update a Linux(R) "
+"system. In FreeBSD, man:freebsd-update[8] can be used fetch new binary "
+"updates and install them. These updates can be scheduled using man:cron[8]."
+msgstr ""
+"As atualizações binárias são semelhantes ao uso do `yum` ou do `apt-get` "
+"para atualizar um sistema Linux(R). No FreeBSD, o man:freebsd-update[8] pode "
+"ser usado para buscar novas atualizações binárias e instalá-las. Essas "
+"atualizações podem ser agendadas usando o man:cron[8]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/linux-users/_index.adoc:286
+msgid ""
+"When using man:cron[8] to schedule updates, use `freebsd-update cron` in the "
+"man:crontab[1] to reduce the possibility of a large number of machines all "
+"pulling updates at the same time:"
+msgstr ""
+"Ao usar o man:cron[8] para agendar atualizações, use o `freebsd-update cron` "
+"no man:crontab[1] para reduzir a possibilidade de que um grande número de "
+"máquinas busque atualizações ao mesmo tempo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:290
+#, no-wrap
+msgid "0 3 * * * root /usr/sbin/freebsd-update cron\n"
+msgstr "0 3 * * * root /usr/sbin/freebsd-update cron\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/linux-users/_index.adoc:295
+msgid ""
+"For more information on source and binary updates, refer to extref:{handbook}"
+"[the chapter on updating, updating-upgrading-freebsdupdate] in the FreeBSD "
+"Handbook."
+msgstr ""
+"Para obter mais informações sobre as atualizações a partir do código-fonte e "
+"a partir de binários, consulte o extref:{handbook}[capítulo sobre "
+"atualizações, updating-upgrading-freebsdupdate] do Handbook do FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:297
+#, no-wrap
+msgid "procfs: Gone But Not Forgotten"
+msgstr "procfs: desaparecido, mas não esquecido"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/linux-users/_index.adoc:301
+msgid ""
+"In some Linux(R) distributions, one could look at [.filename]#/proc/sys/net/"
+"ipv4/ip_forward# to determine if IP forwarding is enabled. In FreeBSD, man:"
+"sysctl[8] is instead used to view this and other system settings."
+msgstr ""
+"Em algumas distribuições Linux(R), é possível verificar se o encaminhamento "
+"de IP está habilitado verificando o arquivo [.filename]#/proc/sys/net/ipv4/"
+"ip_forward#. No FreeBSD, o comando man:sysctl[8] é utilizado para visualizar "
+"essa e outras configurações do sistema."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/linux-users/_index.adoc:303
+msgid ""
+"For example, use the following to determine if IP forwarding is enabled on a "
+"FreeBSD system:"
+msgstr ""
+"Por exemplo, use o seguinte comando para verificar se o encaminhamento de IP "
+"está habilitado em um sistema FreeBSD:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:308
+#, no-wrap
+msgid ""
+"% sysctl net.inet.ip.forwarding\n"
+"net.inet.ip.forwarding: 0\n"
+msgstr ""
+"% sysctl net.inet.ip.forwarding\n"
+"net.inet.ip.forwarding: 0\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:311
+msgid "Use `-a` to list all the system settings:"
+msgstr "Use a opção `-a` para listar todas as configurações do sistema:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:315
+#, no-wrap
+msgid "% sysctl -a | more\n"
+msgstr "% sysctl -a | more\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:318
+msgid ""
+"If an application requires procfs, add the following entry to [.filename]#/"
+"etc/fstab#:"
+msgstr ""
+"Se um aplicativo requer o uso do procfs, adicione a seguinte entrada ao "
+"arquivo [.filename]#/etc/fstab#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:322
+#, no-wrap
+msgid "proc /proc procfs rw,noauto 0 0\n"
+msgstr "proc /proc procfs rw,noauto 0 0\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:325
+msgid ""
+"Including `noauto` will prevent [.filename]#/proc# from being automatically "
+"mounted at boot."
+msgstr ""
+"Incluir o parâmetro `noauto` faz com que o diretório [.filename]#/proc# não "
+"seja montado automaticamente durante a inicialização do sistema."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:327
+msgid "To mount the file system without rebooting:"
+msgstr "Para montar o sistema de arquivos sem reiniciar o sistema:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:331
+#, no-wrap
+msgid "# mount /proc\n"
+msgstr "# mount /proc\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:334
+#, no-wrap
+msgid "Common Commands"
+msgstr "Comandos Comuns"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:337
+msgid "Some common command equivalents are as follows:"
+msgstr "Alguns comandos comuns e equivalentes são os seguintes:"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:342
+#, no-wrap
+msgid "Linux(R) command (Red Hat/Debian)"
+msgstr "Comando Linux(R) (Red Hat/Debian)"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:343
+#, no-wrap
+msgid "FreeBSD equivalent"
+msgstr "Equivalente FreeBSD"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:345
+#, no-wrap
+msgid "Purpose"
+msgstr "Propósito"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:346
+#, no-wrap
+msgid "`yum install _package_` / `apt-get install _package_`"
+msgstr "`yum install _package_` / `apt-get install _package_`"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:347
+#, no-wrap
+msgid "`pkg install _package_`"
+msgstr "`pkg install _package_`"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:349
+#, no-wrap
+msgid "Install package from remote repository"
+msgstr "Instala um pacote a partir de um repositório remoto"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:350
+#, no-wrap
+msgid "`rpm -ivh _package_` / `dpkg -i _package_`"
+msgstr "`rpm -ivh _package_` / `dpkg -i _package_`"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:351
+#, no-wrap
+msgid "`pkg add _package_`"
+msgstr "`pkg add _package_`"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:353
+#, no-wrap
+msgid "Install local package"
+msgstr "Instala um pacote local"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:354
+#, no-wrap
+msgid "`rpm -qa` / `dpkg -l`"
+msgstr "`rpm -qa` / `dpkg -l`"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:355
+#, no-wrap
+msgid "`pkg info`"
+msgstr "`pkg info`"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:357
+#, no-wrap
+msgid "List installed packages"
+msgstr "Lista os pacotes instalados"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:358
+#, no-wrap
+msgid "`lspci`"
+msgstr "`lspci`"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:359
+#, no-wrap
+msgid "`pciconf`"
+msgstr "`pciconf`"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:361
+#, no-wrap
+msgid "List PCI devices"
+msgstr "Lista os dispositivos PCI"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:362
+#, no-wrap
+msgid "`lsmod`"
+msgstr "`lsmod`"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:363
+#, no-wrap
+msgid "`kldstat`"
+msgstr "`kldstat`"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:365
+#, no-wrap
+msgid "List loaded kernel modules"
+msgstr "Lista os módulos do kernel carregados"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:366
+#, no-wrap
+msgid "`modprobe`"
+msgstr "`modprobe`"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:367
+#, no-wrap
+msgid "`kldload` / `kldunload`"
+msgstr "`kldload` / `kldunload`"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:369
+#, no-wrap
+msgid "Load/Unload kernel modules"
+msgstr "Carrega / Descarrega módulos do kernel"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:370
+#, no-wrap
+msgid "`strace`"
+msgstr "`strace`"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:371
+#, no-wrap
+msgid "`truss`"
+msgstr "`truss`"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:372
+#, no-wrap
+msgid "Trace system calls"
+msgstr "Rastrea as chamadas de sistema"
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:375
+#, no-wrap
+msgid "Conclusion"
+msgstr "Conclusão"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:378
+msgid ""
+"This document has provided an overview of FreeBSD. Refer to the extref:"
+"{handbook}[FreeBSD Handbook] for more in-depth coverage of these topics as "
+"well as the many topics not covered by this document."
+msgstr ""
+"Este documento forneceu uma visão geral do FreeBSD. Consulte o extref:"
+"{handbook}[Handbook do FreeBSD] para obter uma cobertura mais detalhada "
+"desses tópicos, bem como de muitos outros tópicos não abordados por este "
+"documento."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/mailing-list-faq/_index.adoc b/documentation/content/pt-br/articles/mailing-list-faq/_index.adoc
index ac8d2818ef..ef465efa37 100644
--- a/documentation/content/pt-br/articles/mailing-list-faq/_index.adoc
+++ b/documentation/content/pt-br/articles/mailing-list-faq/_index.adoc
@@ -63,6 +63,8 @@ As listas de discussão do FreeBSD servem como um canal primário de comunicaç
Isto depende da premissa de cada lista. Algumas listas são mais orientadas a desenvolvedores; outras para a comunidade FreeBSD como um todo. Por favor veja link:https://lists.FreeBSD.org/[esta lista] para o resumo atual.
+As listas estão em Inglês, salvo indicação em contrário.
+
=== As listas de discussão do FreeBSD são abertas para a participação de qualquer pessoa?
Novamente, isto dependerá das regras de cada lista. Por favor leia o objetivo da lista antes de postar, e respeite estes objetivos quando você postar. Isto ajudará a todos os participantes a terem uma experiência melhor com as listas.
@@ -120,7 +122,7 @@ Para os que não são, nós apreciamos que muitas pessoas não falam inglês com
** Microsoft(R) Exchange
** Microsoft(R) Outlook(R)
+
-Tente não usar MIME: muitas pessoas usam clientes de email que não se dão muito bem com MIME.
+Tente não usar MIME: muitas pessoas usam clientes de e-mail que não lidam bem com MIME.
* Verifique se o seu horário e fuso horário estão definidos corretamente. Isso pode parecer um pouco bobo, já que sua mensagem ainda chegará na lista, mas muitas das pessoas nestas listas recebem centenas de mensagens por dia. Eles frequentemente classificam as mensagens recebidas por assunto e por data, e se sua mensagem não vier antes da primeira resposta, eles podem assumir que eles perderam a mensagem e não se darão ao trabalho de procurar.
* Muitas das informações que você precisará fornecer referem-se a saída de programas, como man:dmesg[8], ou mensagens do console, que geralmente aparecem no [.filename]#/var/log/messages#. Não tente copiar essa informação digitando-a novamente; Isso será não só um sofrimento real, mas você é provavelmente irá cometer um erro. Para enviar o conteúdo do arquivo de log, faça uma cópia do arquivo e use um editor para reduzi-lo às informações relevantes ou copie e cole na sua mensagem. Para a saída de programas como `dmesg`, redirecione a saída para um arquivo e inclua-o. Por exemplo,
+
diff --git a/documentation/content/pt-br/articles/mailing-list-faq/_index.po b/documentation/content/pt-br/articles/mailing-list-faq/_index.po
index 51789cc635..94734cecf3 100644
--- a/documentation/content/pt-br/articles/mailing-list-faq/_index.po
+++ b/documentation/content/pt-br/articles/mailing-list-faq/_index.po
@@ -2,12 +2,14 @@
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2022.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2022-02-01 09:21-0300\n"
-"PO-Revision-Date: 2022-02-06 11:20+0000\n"
-"Last-Translator: Danilo G. Baio <dbaio@FreeBSD.org>\n"
+"POT-Creation-Date: 2023-07-15 16:42-0300\n"
+"PO-Revision-Date: 2023-09-10 13:35+0000\n"
+"Last-Translator: \"Danilo G. Baio\" <dbaio@FreeBSD.org>\n"
"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
"projects/documentation/articlesmailing-list-faq_index/pt_BR/>\n"
"Language: pt_BR\n"
@@ -15,15 +17,13 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.10.1\n"
+"X-Generator: Weblate 4.17\n"
#. type: YAML Front Matter: description
#: documentation/content/en/articles/mailing-list-faq/_index.adoc:1
#, no-wrap
msgid "How to best use the mailing lists, such as how to help avoid frequently-repeated discussions"
-msgstr ""
-"Saiba como usar melhor as listas de discussão, por exemplo, como ajudar a "
-"evitar discussões repetidas com frequência"
+msgstr "Saiba como usar melhor as listas de discussão, por exemplo, como ajudar a evitar discussões repetidas com frequência"
#. type: Title =
#: documentation/content/en/articles/mailing-list-faq/_index.adoc:1
@@ -94,8 +94,8 @@ msgstr ""
"Este documento tenta representar um consenso da comunidade, e como tal nunca "
"poderá realmente ser __oficial__. Entretanto, se você encontrar erros "
"técnicos neste documento, ou se tiver sugestões sobre itens que devam ser "
-"adicionados, por favor submeta um PR, ou envie um email para a {freebsd-doc}"
-". Obrigado."
+"adicionados, por favor submeta um PR, ou envie um email para a {freebsd-"
+"doc}. Obrigado."
#. type: Title ===
#: documentation/content/en/articles/mailing-list-faq/_index.adoc:64
@@ -132,14 +132,19 @@ msgstr ""
"desenvolvedores; outras para a comunidade FreeBSD como um todo. Por favor "
"veja link:https://lists.FreeBSD.org/[esta lista] para o resumo atual."
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:75
+msgid "Lists are English language, unless stated otherwise."
+msgstr "As listas estão em Inglês, salvo indicação em contrário."
+
#. type: Title ===
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:74
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:76
#, no-wrap
msgid "Are the FreeBSD mailing lists open for anyone to participate?"
msgstr "As listas de discussão do FreeBSD são abertas para a participação de qualquer pessoa?"
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:79
+#: 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 "
@@ -151,7 +156,7 @@ msgstr ""
"com as listas."
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:81
+#: 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 "
@@ -162,7 +167,7 @@ msgstr ""
"(mas antes, veja abaixo)."
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:85
+#: 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 "
@@ -180,13 +185,13 @@ msgstr ""
"que são apropriados."
#. type: Title ===
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:86
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:88
#, no-wrap
msgid "How can I subscribe?"
msgstr "Como posso me inscrever?"
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:89
+#: 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."
@@ -195,13 +200,13 @@ msgstr ""
"para se inscrever em qualquer uma das listas públicas."
#. type: Title ===
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:90
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:92
#, no-wrap
msgid "How can I unsubscribe?"
msgstr "Como cancelo minha inscrição?"
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:93
+#: 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."
@@ -210,7 +215,7 @@ msgstr ""
"no rodapé de cada mensagem enviada pela lista."
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:97
+#: 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 "
@@ -224,13 +229,13 @@ msgstr ""
"tente evitar isso."
#. type: Title ===
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:98
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:100
#, no-wrap
msgid "Are archives available?"
msgstr "O histórico da listas está disponível?"
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:102
+#: 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 "
@@ -238,28 +243,28 @@ msgid ""
msgstr ""
"Sim. Os históricos das mensagens, agrupadas por tópicos de conversa, estão "
"disponíveis link:https://docs.FreeBSD.org/mail/[aqui]. Você também pode "
-"acessar o https://lists.freebsd.org/pipermail[arquivo mailman] e o "
-"link:https://lists.freebsd.org/archives[arquivo mlmmj] diretamente."
+"acessar o https://lists.freebsd.org/pipermail[arquivo mailman] e o link:"
+"https://lists.freebsd.org/archives[arquivo mlmmj] diretamente."
#. type: Title ===
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:103
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:105
#, no-wrap
msgid "Are mailing lists available in a digest format?"
msgstr "As listas de discussão estão disponíveis em um formato sumarizado (digest)?"
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:106
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:108
msgid "Yes. See link:https://lists.FreeBSD.org/[the Mlmmj web interface]."
msgstr "Sim. Veja a link:https://lists.FreeBSD.org/[interface web do Mlmmj]."
#. type: Title ==
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:108
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:110
#, no-wrap
msgid "Mailing List Etiquette"
msgstr "Etiqueta em Listas de Discussão"
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:112
+#: 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 "
@@ -270,13 +275,13 @@ msgstr ""
"postagens apropriadas, e siga regras comuns de etiqueta."
#. type: Title ===
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:113
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:115
#, no-wrap
msgid "What should I do before I post?"
msgstr "O que devo fazer antes de postar?"
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:118
+#: 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 "
@@ -291,17 +296,16 @@ msgid ""
msgstr ""
"Você já deu o passo mais importante ao ler este documento. Entretanto, se "
"você é novo no FreeBSD, você primeiro precisa se familiarizar com o "
-"software, e a história social que o envolve lendo os numerosos "
-"link:https://www.FreeBSD.org/docs/books/[livros e artigos] que estão "
-"disponíveis. Itens de interesse particular incluem o documento extref:{faq}["
-"Perguntas Frequentes do FreeBSD (FAQ)], o extref:{handbook}[Handbook do "
-"FreeBSD], e os artigos extref:{freebsd-questions-article}[Como obter "
-"melhores resultados na lista de discussão FreeBSD-questions], extref"
-":{explaining-bsd}[Explicando o BSD], e extref:{new-users}[Primeiros passos "
-"no FreeBSD]."
+"software, e a história social que o envolve lendo os numerosos link:https://"
+"www.FreeBSD.org/docs/books/[livros e artigos] que estão disponíveis. Itens "
+"de interesse particular incluem o documento extref:{faq}[Perguntas "
+"Frequentes do FreeBSD (FAQ)], o extref:{handbook}[Handbook do FreeBSD], e os "
+"artigos extref:{freebsd-questions-article}[Como obter melhores resultados na "
+"lista de discussão FreeBSD-questions], extref:{explaining-bsd}[Explicando o "
+"BSD], e extref:{new-users}[Primeiros passos no FreeBSD]."
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:123
+#: 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 "
@@ -321,19 +325,19 @@ msgstr ""
"humanos."
#. type: Title ===
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:124
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:126
#, no-wrap
msgid "What constitutes an inappropriate posting?"
msgstr "O que constitui uma postagem inadequada?"
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:127
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:129
msgid "Postings must be in accordance with the charter of the mailing list."
msgstr ""
"As mensagens devem estar de acordo com as regras da lista de discussão."
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:128
+#: 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."
@@ -342,7 +346,7 @@ msgstr ""
"nos manter com altos padrões de comportamento."
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:129
+#: 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."
@@ -351,13 +355,13 @@ msgstr ""
"ativamente para banir os infratores dessa regra."
#. type: Title ===
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:130
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:132
#, no-wrap
msgid "What is considered proper etiquette when posting to the mailing lists?"
msgstr "O que é considerado etiqueta apropriada ao postar nas listas de discussão?"
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:133
+#: 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."
@@ -366,7 +370,7 @@ msgstr ""
"mundo usa clientes de email em uma interface gráfica."
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:134
+#: 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 "
@@ -378,15 +382,15 @@ msgid ""
msgstr ""
"Por favor, respeite o fato de que a largura de banda não é infinita. Nem "
"todo mundo lê e-mails através de conexões de alta velocidade, então se sua "
-"postagem envolve algo como o conteúdo de um arquivo como o [.filename]#config"
-".log# ou um extenso stack trace, por favor considere colocar essas "
-"informações em algum lugar e apenas fornecer uma URL para eles. Lembre-se, "
-"também, de que essas postagens serão arquivadas indefinidamente, de modo que "
-"postagens enormes simplesmente aumentarão o tamanho dos arquivos muito "
+"postagem envolve algo como o conteúdo de um arquivo como o [."
+"filename]#config.log# ou um extenso stack trace, por favor considere colocar "
+"essas informações em algum lugar e apenas fornecer uma URL para eles. Lembre-"
+"se, também, de que essas postagens serão arquivadas indefinidamente, de modo "
+"que postagens enormes simplesmente aumentarão o tamanho dos arquivos muito "
"depois que o propósito deles tiver expirado."
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:135
+#: 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 "
@@ -403,7 +407,7 @@ msgstr ""
"impressão de você."
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:136
+#: 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/"
@@ -414,7 +418,7 @@ msgstr ""
"estão link:https://www.FreeBSD.org/community/mailinglists/[disponíveis]."
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:140
+#: 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 "
@@ -429,7 +433,7 @@ msgstr ""
"aspecto; por favor, ajude-nos a manter essa tradição."
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:141
+#: 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 "
@@ -437,37 +441,37 @@ msgid ""
"send out badly formatted messages without you finding out about them:"
msgstr ""
"Por favor, use um Mail User Agent (MUA) compatível com os padrões. Muitas "
-"mensagens mal formatadas vêm de http://www.lemis.com/grog/email/email.php["
-"clientes de email ruins ou mal-configurados]. Os seguintes clientes de email "
-"são conhecidos por enviar mensagens mal formatadas sem que você saiba sobre "
-"elas:"
+"mensagens mal formatadas vêm de http://www.lemis.com/grog/email/email."
+"php[clientes de email ruins ou mal-configurados]. Os seguintes clientes de "
+"email são conhecidos por enviar mensagens mal formatadas sem que você saiba "
+"sobre elas:"
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:143
+#: 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:144
+#: 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:145
+#: 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:147
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:149
msgid ""
"Try not to use MIME: a lot of people use mailers which do not get on very "
"well with MIME."
msgstr ""
-"Tente não usar MIME: muitas pessoas usam clientes de email que não se dão "
-"muito bem com MIME."
+"Tente não usar MIME: muitas pessoas usam clientes de e-mail que não lidam "
+"bem com MIME."
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:148
+#: 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 "
@@ -484,7 +488,7 @@ msgstr ""
"eles perderam a mensagem e não se darão ao trabalho de procurar."
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:149
+#: 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]#/"
@@ -505,19 +509,19 @@ msgstr ""
"`dmesg`, redirecione a saída para um arquivo e inclua-o. Por exemplo,"
#. type: delimited block . 4
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:153
+#: 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:156
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:158
msgid "This redirects the information to the file [.filename]#/tmp/dmesg.out#."
msgstr ""
"Isto redireciona a informação para o arquivo [.filename]#/tmp/dmesg.out#."
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:157
+#: 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 "
@@ -537,13 +541,13 @@ msgstr ""
"para os committers."
#. type: Title ===
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:158
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:160
#, no-wrap
msgid "What are the special etiquette consideration when replying to an existing posting on the mailing lists?"
msgstr "Qual é a consideração de etiqueta especial ao responder a uma postagem existente nas listas de discussão?"
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:161
+#: 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 "
@@ -554,7 +558,7 @@ msgstr ""
"mensagem original entenda do que você está falando."
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:163
+#: 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."
@@ -563,7 +567,7 @@ msgstr ""
"isso\", em que a postagem inicial era de dezenas ou centenas de linhas."
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:164
+#: 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 "
@@ -578,7 +582,7 @@ msgstr ""
"mais legível."
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:165
+#: 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 "
@@ -589,7 +593,7 @@ msgstr ""
"palavras a elas que elas mesmas não escreveram."
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:166
+#: 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."
@@ -599,28 +603,28 @@ msgstr ""
"sua resposta."
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:168
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:170
msgid "A: Because it reverses the logical flow of conversation."
msgstr "R: Porque inverte o fluxo lógico da conversa."
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:169
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:171
msgid "Q: Why is top posting frowned upon?"
msgstr "P: Por que a publicação superior é desaprovada?"
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:171
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:173
msgid "(Thanks to Randy Bush for the joke.)"
msgstr "(Obrigado Randy Bush pela piada.)"
#. type: Title ==
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:173
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:175
#, no-wrap
msgid "Recurring Topics On The Mailing Lists"
msgstr "Tópicos recorrentes nas listas de discussão"
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:180
+#: 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 "
@@ -641,7 +645,7 @@ msgstr ""
"provavelmente se salve de ser queimado no processo."
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:184
+#: 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 "
@@ -650,15 +654,16 @@ msgid ""
"that method does not yield useful results, please supplement it with a "
"search with your favorite major search engine)."
msgstr ""
-"O melhor método para evitar isso é familiarizar-se com os http://docs.FreeBSD"
-".org/mail/[arquivos da lista de discussão], para ajudar você a entender o "
-"histórico do que aconteceu antes. E para isso, a https://www.FreeBSD.org/"
-"search/#mailinglists[interface de pesquisa das listas de discussões] é "
-"inestimável. (Se esse método não produzir resultados úteis, por favor, "
-"complemente-o com uma pesquisa no seu mecanismo de busca favorito)."
+"O melhor método para evitar isso é familiarizar-se com os http://docs."
+"FreeBSD.org/mail/[arquivos da lista de discussão], para ajudar você a "
+"entender o histórico do que aconteceu antes. E para isso, a https://www."
+"FreeBSD.org/search/#mailinglists[interface de pesquisa das listas de "
+"discussões] é inestimável. (Se esse método não produzir resultados úteis, "
+"por favor, complemente-o com uma pesquisa no seu mecanismo de busca "
+"favorito)."
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:187
+#: 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 "
@@ -673,7 +678,7 @@ msgstr ""
"discussão, não apenas em uma lista de discussão do FreeBSD."
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:190
+#: 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 "
@@ -687,13 +692,13 @@ msgstr ""
"ajudar a evitar esses tópicos recorrentes."
#. type: Title ==
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:192
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:194
#, no-wrap
msgid "What Is A \"Bikeshed\"?"
msgstr "O que é um \"Bikeshed\" (Garagem de bicicletas)?"
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:197
+#: 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 "
@@ -712,7 +717,7 @@ msgstr ""
"conceito antes de postar em qualquer lista de discussão do FreeBSD."
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:199
+#: 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."
@@ -721,7 +726,7 @@ msgstr ""
"discussões imediatas e interações hostis com usuários você ainda nem conhece."
#. type: Plain text
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:202
+#: 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."
@@ -730,19 +735,19 @@ msgstr ""
"numero possível de pessoas evitando bikesheds sempre que puder. Obrigado."
#. type: Title ==
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:204
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:206
#, no-wrap
msgid "Acknowledgments"
msgstr "Agradecimentos"
#. type: Labeled list
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:206
+#: 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:208
+#: 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 "
@@ -753,13 +758,13 @@ msgstr ""
"para obter os melhores resultados da lista de discussão FreeBSD-questions]."
#. type: Labeled list
-#: documentation/content/en/articles/mailing-list-faq/_index.adoc:209
+#: 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:210
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:212
msgid "Creation of the rough draft of this FAQ."
msgstr "Pela criação do rascunho deste FAQ."
diff --git a/documentation/content/pt-br/articles/nanobsd/_index.adoc b/documentation/content/pt-br/articles/nanobsd/_index.adoc
index a36ac3f521..1563861b50 100644
--- a/documentation/content/pt-br/articles/nanobsd/_index.adoc
+++ b/documentation/content/pt-br/articles/nanobsd/_index.adoc
@@ -1,8 +1,11 @@
---
-title: Introdução ao NanoBSD
authors:
- - author: Daniel Gerzo
-copyright: 2006 Projeto de Documentação do FreeBSD
+ -
+ author: 'Daniel Gerzo'
+copyright: '2006 The FreeBSD Documentation Project'
+description: 'Este documento fornece informações sobre as ferramentas NanoBSD, que podem ser usadas para criar imagens de sistema FreeBSD para aplicações embarcadas, adequadas para uso em uma chave USB, cartão de memória ou outro meio de armazenamento em massa.'
+tags: ["nanobsd", "guide", "embedded", "FreeBSD"]
+title: 'Introdução ao NanoBSD'
trademarks: ["freebsd", "general"]
---
@@ -40,7 +43,7 @@ endif::[]
[.abstract-title]
Resumo
-Este documento fornece informações sobre as ferramentas NanoBSD, que podem ser usadas para criar imagens do sistema FreeBSD para aplicativos embarcados, adequadas para uso em um cartão Compact Flash (ou outro meio de armazenamento em massa).
+Este documento fornece informações sobre as ferramentas NanoBSD, que podem ser usadas para criar imagens de sistema FreeBSD para aplicações embarcadas, adequadas para uso em uma chave USB, cartão de memória ou outro meio de armazenamento em massa.
'''
@@ -49,39 +52,39 @@ toc::[]
[[intro]]
== Introdução ao NanoBSD
-O NanoBSD é uma ferramenta atualmente desenvolvida por Poul-Henning Kamp mailto:phk@FreeBSD.org[phk@FreeBSD.org]. Ele cria uma imagem do sistema FreeBSD para aplicativos embarcados, adequada para uso em um cartão Compact Flash (ou outro meio de armazenamento em massa).
+O NanoBSD é uma ferramenta desenvolvida por {phk} e agora mantida por {imp}. Ela cria uma imagem do sistema FreeBSD para aplicações embarcadas, adequada para uso em uma chave USB, cartão de memória ou outro meio de armazenamento em massa.
-Ele pode ser usado para construir imagens de instalação especializadas, projetadas para fácil instalação e manutenção de sistemas comumente chamados de "appliances". Os appliances têm seu hardware e software agrupados no produto, o que significa que todos os aplicativos são pré-instalados. O appliance é conectado a uma rede existente e pode começar a funcionar (quase) imediatamente.
+Pode ser usado para construir imagens de instalação especializadas, projetadas para facilitar a instalação e manutenção de sistemas comumente chamados de "computer appliances". Os computer appliances têm seu hardware e software empacotados no produto, o que significa que todos os aplicativos estão pré-instalados. O aparelho é conectado a uma rede existente e pode começar a funcionar (quase) imediatamente.
-Os recursos do NanoBSD incluem:
+As características do NanoBSD incluem:
-* Os Ports e os pacotes funcionam como no FreeBSD - Cada aplicativo pode ser instalado e usado em uma imagem do NanoBSD, da mesma forma que no FreeBSD.
-* Nenhuma funcionalidade ausente - Se é possível fazer algo com o FreeBSD, é possível fazer a mesma coisa com o NanoBSD, a menos que o recurso ou os recursos específicos sejam explicitamente removidos do NanoBSD quando a imagem foi criada.
-* Todo o sistema opera em modo read-only em tempo de execução - É seguro puxar o plugue de alimentação. Não há necessidade de executar man:fsck[8] após um desligamento abrupto do sistema.
-* É fácil de criar e personalizar - Usando apenas um script de shell e um arquivo de configuração, é possível criar imagens reduzidas e personalizadas, satisfazendo qualquer conjunto arbitrário de requisitos.
+* Os Ports e pacotes funcionam como no FreeBSD - Cada aplicação pode ser instalada e usada em uma imagem NanoBSD, da mesma forma que no FreeBSD.
+* Nenhuma funcionalidade faltante - Se é possível fazer algo com o FreeBSD, é possível fazer a mesma coisa com o NanoBSD, a menos que a funcionalidade específica tenha sido explicitamente removida da imagem do NanoBSD quando ela foi criada.
+* O sistema opera em modo read-only em tempo de execução - É seguro puxar o plugue de energia. Não há necessidade de executar o man:fsck[8] após um desligamento abrupto do sistema.
+* É fácil de compilar e personalizar - Usando apenas um script de shell e um arquivo de configuração, é possível criar imagens reduzidas e personalizadas, satisfazendo qualquer conjunto arbitrário de requisitos.
[[howto]]
-== NanoBSD Howto
+== Guia do NanoBSD
[[design]]
=== O Design do NanoBSD
-Quando a imagem estiver presente na midia, é possível inicializar o NanoBSD. O meio de armazenamento em massa é dividido em três partes por padrão:
+Uma vez que a imagem está presente no meio de armazenamento, é possível inicializar o NanoBSD. O meio de armazenamento em massa é dividido em três partes por padrão:
* Duas partições de imagem: `code#1` e `code#2`.
-* A partição do arquivo de configuração, que pode ser montada no diretório [.filename]#/cfg# em tempo de execução.
+* A partição do arquivo de configuração, que pode ser montada sob o diretório [.filename]#/cfg# em tempo de execução.
Essas partições são normalmente montadas em modo read-only (somente leitura).
-Os diretórios [.filename]#/etc# e [.filename]#/var# são discos criados em memória (malloc) pelo comando man:md[4].
+Os diretórios [.filename]#/etc# e [.filename]#/var# são discos man:md[4] (malloc).
-A partição do arquivo de configuração persiste no diretório [.filename]#/cfg#. Ele contém arquivos para o diretório [.filename]#/etc# e é brevemente montado como read-only logo após a inicialização do sistema, portanto é necessário copiar os arquivos modificados de [.filename]#/etc# de volta para o [.filename]#/cfg# se as alterações precisarem ser mantidas após a reinicialização do sistema.
+A partição do arquivo de configuração persiste no diretório [.filename]#/cfg#. Ele contém arquivos para o diretório [.filename]#/etc# e é montado brevemente como somente leitura logo após a inicialização do sistema. Portanto, é necessário copiar os arquivos modificados do diretório [.filename]#/etc# de volta para o diretório [.filename]#/cfg# se as alterações precisarem ser mantidas após a reinicialização do sistema.
-.Fazendo Mudanças Persistentes no [.filename]#/etc/resolv.conf#
+.Fazendo alterações persistentes no arquivo [.filename]#/etc/resolv.conf#
[example]
====
-[source,shell]
+[source, shell]
....
# vi /etc/resolv.conf
[...]
@@ -89,45 +92,93 @@ A partição do arquivo de configuração persiste no diretório [.filename]#/cf
# cp /etc/resolv.conf /cfg
# umount /cfg
....
+
====
[NOTE]
====
-A partição que contém o [.filename]#/cfg# deve ser montada somente no momento da inicialização ou quando for preciso sobrescrever os arquivos de configuração.
+A partição que contém o diretório [.filename]#/cfg# deve ser montada somente no momento da inicialização e enquanto sobrescreve os arquivos de configuração.
-Manter o [.filename]#/cfg# montado o tempo todo não é uma boa ideia, especialmente se o sistema NanoBSD for executado em um meio de armazenamento em massa que pode ser afetado negativamente por um grande número de gravações na partição (como quando o sistema de arquivos sincroniza os dados para os discos do sistema).
+Manter o [.filename]#/cfg# montado o tempo todo não é uma boa idéia, especialmente se o sistema NanoBSD rodar em um meio de armazenamento em massa que pode ser afetado adversamente por um grande número de gravações na partição (como quando o sincronizador do sistema de arquivos libera dados para os discos do sistema).
====
=== Construindo uma imagem NanoBSD
-Uma imagem NanoBSD é construída usando um simples shell script [.filename]#nanobsd.sh#, que pode ser encontrado no diretório [.filename]#/usr/src/tools/tools/nanobsd#. Este script cria uma imagem, que pode ser copiada no meio de armazenamento usando o utilitário man:dd[1].
+Uma imagem NanoBSD é compilada usando um simples shell script [.filename]#nanobsd.sh#, que pode ser encontrado no diretório [.filename]#/usr/src/tools/tools/nanobsd#. Este script cria uma imagem, que pode ser copiada no meio de armazenamento usando o utilitário man:dd[1].
Os comandos necessários para construir uma imagem NanoBSD são:
-[source,shell]
+[source, shell]
....
-
# cd /usr/src/tools/tools/nanobsd <.>
# sh nanobsd.sh <.>
# cd /usr/obj/nanobsd.full <.>
# dd if=_.disk.full of=/dev/da0 bs=64k <.>
....
-<.> Altere o diretório atual para o diretório base do script de construção do NanoBSD.
+<.> Altere o diretório atual para o diretório base do script de compilação do NanoBSD.
-<.> Comece o processo de construção.
+<.> Inicie o processo de compilação.
-<.> Altere o diretório atual para o local onde as imagens construídas estão localizadas.
+<.> Altere o diretório atual para o local onde as imagens compiladas estão localizadas.
<.> Instale o NanoBSD no meio de armazenamento.
+==== Opções ao compilar uma imagem NanoBSD
+
+Ao construir uma imagem NanoBSD, várias opções de compilação podem ser passadas para [.filename]#nanobsd.sh# na linha de comando. Essas opções podem ter um impacto significativo no processo de compilação.
+
+Algumas opções são para fins de verbosidade:
+
+* `-h`: imprime a página resumida de ajuda.
+* `-q`: torna a saída mais silenciosa.
+* `-v`: torna a saída mais detalhada (verbose)
+
+Algumas outras opções podem ser usadas para restringir o processo de compilação. Às vezes, não é necessário reconstruir tudo a partir das fontes, especialmente se uma imagem já foi compilada e apenas poucas alterações foram feitas.
+
+* `-k`: não compilar o kernel
+* `-w`: não compilar o mundo (world)
+* `-b`: não compilar nem o kernel e nem o mundo (world)
+* `-i`: não compilar uma imagem de disco. Como um arquivo não será criado, não será possível usá-lo com o comando man:dd[1] para gravá-lo em um dispositivo de armazenamento.
+* `-f`: não compilar uma imagem de disco para a primeira partição (o que é útil para fins de atualização)
+* `-n`: adiciona `-DNO_CLEAN` as etapas `buildworld` e `buildkernel`. Além disso, todos os arquivos que já foram compilados em uma execução anterior são mantidos.
+
+Um arquivo de configuração pode ser usado para ajustar quantos elementos desejar. Carregue-o com `-c`
+
+As últimas opções são:
+
+* `-K`: não instalar um kernel. Uma imagem de disco sem um kernel não poderá executar uma sequência de inicialização normal.
+
+==== O Processo Completo de Compilação de Imagens
+
+O processo completo de compilação de imagens passa por muitas etapas. As etapas exatas dependerão das opções selecionadas ao iniciar o script. Supondo que o script seja executado sem opções específicas, isso é o que acontecerá.
+
+. `run_early_customize`: comandos que são definidos em um arquivo de configuração fornecido.
+. `clean_build`: Apenas limpa o ambiente de compilação excluindo os arquivos previamente compilados.
+. `make_conf_build`: Monta o arquivo make.conf a partir das variáveis `CONF_WORLD` e `CONF_BUILD`.
+. `build_world`: Compila o mundo (world).
+. `build_kernel`: Compila os arquivos do kernel.
+. `clean_world`: Limpa o diretório de destino.
+. `make_conf_install`: Monta o arquivo make.conf a partir das variáveis `CONF_WORLD` e `CONF_INSTALL`.
+. `install_world`: Instala todos os arquivos construídos durante o `buildworld`.
+. `install_etc`: Instala os arquivos necessários no diretório [.filename]#/etc#, com base no comando `make distribution`.
+. `setup_nanobsd_etc`: a primeira configuração específica do NanoBSD ocorre nesta etapa. O diretório [.filename]#/etc/diskless# é criado e o sistema de arquivos raiz é definido como somente leitura.
+. `install_kernel`: os arquivos do kernel e dos módulos são instalados.
+. `run_customize`: todas as rotinas de personalização definidas pelo usuário serão chamadas.
+. `setup_nanobsd`: uma estrutura especial de diretórios de configuração é configurada. O diretório [.filename]#/usr/local/etc# é movido para [.filename]#/etc/local# e um link simbólico é criado de volta de [.filename]#/etc/local# para [.filename]#/usr/local/etc#.
+. `prune_usr`: os diretórios vazios de [.filename]#/usr# são removidos.
+. `run_late_customize`: os últimos scripts personalizados podem ser executados neste ponto.
+. `fixup_before_diskimage`: Lista todos os arquivos instalados em um metalog
+. `create_diskimage`: cria a imagem de disco, com base nos parâmetros de geometria de disco fornecidos.
+. `last_orders`: não faz nada por enquanto.
+
=== Personalizando uma imagem NanoBSD
-Este é provavelmente o recurso mais importante e interessante do NanoBSD. Este também é o lugar onde você passará a maior parte do tempo desenvolvendo com o NanoBSD.
+Esta é provavelmente a característica mais importante e mais interessante do NanoBSD. É também onde você passará a maior parte do tempo ao desenvolver com o NanoBSD.
-A execução do seguinte comando forçará o [.filename]#nanobsd.sh# a ler sua configuração do [.filename]#myconf.nano# localizado no diretório atual:
+A invocação do seguinte comando forçará o [.filename]#nanobsd.sh# a ler sua configuração de [.filename]#myconf.nano# localizado no diretório atual:
-[source,shell]
+[source, shell]
....
# sh nanobsd.sh -c myconf.nano
....
@@ -139,21 +190,65 @@ A personalização é feita de duas maneiras:
==== Opções de configuração
-Com as definições de configuração, é possível configurar as opções passadas tanto para o estágio `buildworld` quando para o `installworld` do processo de construção do NanoBSD, bem como opções internas passadas para o processo principal de construção do NanoBSD. Através destas opções, é possível reduzir o sistema para que ele caiba, por exemplo, em um cartão de memória de 64 MB. Você pode usar as opções de configuração para reduzir ainda mais o FreeBSD, até que ele consista apenas no kernel e em dois ou três arquivos na área de usuário.
+Com as configurações de configuração, é possível configurar as opções passadas tanto para as etapas `buildworld` quanto `installworld` do processo de compilação do NanoBSD, bem como opções internas passadas para o processo de compilação principal do NanoBSD. Através dessas opções, é possível reduzir o sistema, para que ele caiba em tão pouco quanto 64MB. Você pode usar as opções de configuração para reduzir ainda mais o FreeBSD, até que consista apenas no kernel e em dois ou três arquivos no espaço do usuário.
-O arquivo de configuração consiste em opções de configuração, que substituem os valores padrões. As diretivas mais importantes são:
+O arquivo de configuração consiste em opções de configuração, que substituem os valores padrão. As diretivas mais importantes são:
-* `NANO_NAME` - Nome da compilação (usada para construir os nomes do diretório de trabalho).
-* `NANO_SRC` - Caminho para o diretório com o código fonte que será utilizado na construção da imagem.
-* `NANO_KERNEL` - Nome do arquivo de configuração do kernel usado para construir o kernel.
+* `NANO_NAME` - Nome da compilação (usado para construir os nomes dos diretórios de trabalho).
+* `NANO_SRC` - Caminho para a árvore de código-fonte usada para compilar a imagem.
+* `NANO_KERNEL` - Nome do arquivo de configuração do kernel usado para compilar o kernel.
* `CONF_BUILD` - Opções passadas para o estágio `buildworld` da compilação.
* `CONF_INSTALL` - Opções passadas para o estágio `installworld` da compilação.
-* `CONF_WORLD` - Opções passadas para o estágio `buildworld` e o `installworld` da compilação.
-* `FlashDevice` - define o tipo de mídia a ser usado. Verifique o [.filename]#FlashDevice.sub# para mais detalhes.
+* `CONF_WORLD` - Opções passadas tanto para o estágio `buildworld` quanto para o estágio `installworld` da compilação.
+* `FlashDevice` - Define qual tipo de mídia usar. Verifique [.filename]#FlashDevice.sub# para obter mais detalhes.
+
+Existem muitas outras opções de configuração que podem ser relevantes, dependendo do tipo de NanoBSD desejado.
+
+===== Personalização Geral
+
+Existem três estágios, por design, nos quais é possível fazer alterações que afetam o processo de compilação, apenas configurando uma variável no arquivo de configuração fornecido:
+
+* `run_early_customize`: antes de qualquer outra coisa acontecer.
+* `run_customize`: depois que todos os arquivos padrões tiverem sido organizados
+* `run_late_customize`: no final do processo, antes da compilação da imagem real do NanoBSD.
+
+Para personalizar uma imagem do NanoBSD em qualquer um desses passos, é melhor adicionar um valor específico a uma das variáveis correspondentes.
+
+A variável `NANO_EARLY_CUSTOMIZE` é usada no primeiro passo do processo de construção. Neste momento, não há um exemplo específico do que pode ser feito usando essa variável, mas isso pode mudar no futuro.
+
+A variável `NANO_CUSTOMIZE` é usada depois que os arquivos de configuração do kernel, world e etc foram instalados, e os arquivos etc foram configurados como uma instalação do NanoBSD. Portanto, é o passo correto no processo de compilação para ajustar opções de configuração e adicionar pacotes, como no exemplo cust_nobeastie.
+
+A variável `NANO_LATE_CUSTOMIZE` é usada imediatamente antes da criação da imagem do disco, portanto, é o momento final para fazer qualquer alteração. Lembre-se de que a rotina `setup_nanobsd` já foi executada e que os diretórios [.filename]#etc#, [.filename]#conf# e [.filename]#cfg# e seus subdiretórios já foram modificados, então não é o momento de alterá-los neste ponto. Em vez disso, é possível adicionar ou remover arquivos específicos.
+
+===== Opções de Inicialização
+
+Também existem variáveis que podem alterar a forma como a imagem do NanoBSD é inicializada. Duas opções são passadas para o man:boot0cfg[8] para inicializar o setor de boot da imagem do disco:
+
+* `NANO_BOOT0CFG`
+* `NANO_BOOTLOADER`
+
+Com o `NANO_BOOTLOADER`, é possível escolher um arquivo de bootloader. As opções mais comuns são entre [.filename]#boot0sio# e [.filename]#boot0#, dependendo se o aparelho possui uma porta serial ou não. É melhor evitar fornecer um bootloader diferente, mas é possível fazê-lo. Para isso, é recomendável ter verificado o capítulo sobre o processo de inicialização no extref:{handbook}boot[Handbook do FreeBSD].
+
+Com o `NANO_BOOT0CFG`, é possível ajustar o processo de inicialização, como selecionar em qual partição a imagem do NanoBSD será inicializada. É melhor verificar a página man:boot0cfg[8] antes de alterar o valor padrão dessa variável. Uma opção interessante para alterar é o tempo limite do procedimento de inicialização. Para fazer isso, a variável `NANO_BOOT0CFG` pode ser alterada para `"-o packet -s 1 -m 3 -t 36"`. Dessa forma, o processo de inicialização começaria após aproximadamente 2 segundos, porque é raro que seja desejado esperar 10 segundos antes de iniciar o boot.
+
+Bom saber: a variável `NANO_BOOT2CFG` é usada apenas na rotina `cust_comconsole`, que pode ser chamada no passo `NANO_CUSTOMIZE` se o aparelho tiver uma porta serial e toda a entrada e saída do console tiver que ser feita por meio dela. Certifique-se de verificar os parâmetros relevantes da porta serial, pois definir um valor incorreto pode torná-la inútil.
+
+===== Criação da Imagem do Disco
+
+No final do processo de inicialização está a criação da imagem do disco. Com essa etapa, o script do NanoBSD fornece um arquivo que pode ser simplesmente copiado para um disco do aparelho, e isso fará com que ele seja inicializado e iniciado.
+
+Existem muitas variáveis que precisam ser configuradas corretamente para que o script produza uma imagem de disco utilizável.
+
+* A variável `NANO_DRIVE` deve ser definida como o nome da unidade de mídia em tempo de execução. Geralmente, o valor padrão `ada0`, que representa o primeiro dispositivo `IDE`/`ATA`/`SATA` no aparelho, é esperado como o correto, mas um tipo diferente de armazenamento também pode ser usado - como uma chave USB, nesse caso seria `da0`.
+* A variável `NANO_MEDIASIZE` deve ser definida como o tamanho (em setores de 512 bytes) da mídia de armazenamento que será usada. Se você definir isso incorretamente, é possível que a imagem do NanoBSD não inicialize e uma mensagem durante a inicialização avisará sobre a geometria de disco incorreta.
+
+* Os diretórios [.filename]#/etc#, [.filename]#/var# e [.filename]#/tmp# são alocados como discos man:md[4] (malloc) durante a inicialização; portanto, seus tamanhos podem ser ajustados para atender às necessidades do aparelho. A variável `NANO_RAM_ETCSIZE` define o tamanho do [.filename]#/etc# e a variável `NANO_RAM_TMPVARSIZE` define o tamanho tanto do diretório [.filename]#/var# quanto do diretório [.filename]#/tmp#, já que [.filename]#/tmp# está simbolicamente vinculado a [.filename]#/var/tmp#. Por padrão, ambos os tamanhos dos discos malloc são definidos em 20MB cada. Eles podem ser alterados, mas geralmente o [.filename]#/etc# não cresce muito em tamanho, portanto, 20MB é um bom ponto de partida, enquanto o [.filename]#/var# e especialmente o [.filename]#/tmp# podem aumentar muito de tamanho se não tiver cuidado. Para sistemas com restrição de memória, tamanhos menores de sistema de arquivos podem ser escolhidos.
+* Como o NanoBSD é projetado principalmente para criar uma imagem de sistema para um aparelho, presume-se que a mídia de armazenamento usada seja relativamente pequena. Por esse motivo, o sistema de arquivos que é organizado é configurado com um tamanho de bloco pequeno (4Kb) e um tamanho de fragmento pequeno (512b). As opções de configuração do sistema de arquivos podem ser modificadas por meio da variável `NANO_NEWFS`, mas a sintaxe deve respeitar o formato do comando man:newfs[8]. Além disso, por padrão, o sistema de arquivos tem Soft Updates ativado. O extref:{handbook}[Handbook do FreeBSD] pode ser consultado para obter mais informações sobre isso.
+* Os diferentes tamanhos das partições podem ser definidos por meio do uso de `NANO_CODESIZE`, `NANO_CONFSIZE` e `NANO_DATASIZE` como múltiplos de setores de 512 bytes. `NANO_CODESIZE` define o tamanho das duas primeiras partições da imagem: `code#1` e `code#2`. Elas devem ser grandes o suficiente para armazenar todos os arquivos que serão produzidos como resultado dos processos `buildworld` e `buildkernel`. `NANO_CONFSIZE` define o tamanho da partição do arquivo de configuração, portanto, não precisa ser muito grande, mas não a faça tão pequena que não possa armazenar todos os arquivos de configuração. Por fim, `NANO_DATASIZE` define o tamanho de uma partição opcional que pode ser usada no aparelho. A última partição pode ser usada, por exemplo, para manter arquivos criados dinamicamente no disco.
==== Funções Personalizadas
-É possível ajustar o NanoBSD usando as funções do shell no arquivo de configuração. O exemplo a seguir ilustra o modelo básico de funções personalizadas:
+É possível ajustar o NanoBSD usando funções de shell no arquivo de configuração. O exemplo a seguir ilustra o modelo básico de funções personalizadas:
[.programlisting]
....
@@ -164,7 +259,7 @@ cust_foo () (
customize_cmd cust_foo
....
-Um exemplo mais útil de uma função de customização é o seguinte, o qual altera o tamanho padrão do diretório [.filename]#/etc# de 5MB para 30MB:
+Um exemplo mais útil de uma função de personalização é o seguinte, que altera o tamanho padrão do diretório [.filename]#/etc# de 5MB para 30MB:
[.programlisting]
....
@@ -177,29 +272,25 @@ customize_cmd cust_etc_size
Existem algumas funções de customização pré-definidas por padrão e prontas para uso:
-* `cust_comconsole` -- Desabilita o man:getty[8] nos dispositivos VGA (os device nodes [.filename]#/dev/ttyv*#) e habilita o uso do console do sistema na serial COM1.
-* `cust_allow_ssh_root` -- Permite que o `root` faça o login via man:sshd[8].
-* `cust_install_files` -- Instala arquivos do diretório [.filename]#nanobsd/Files#, que contém alguns scripts úteis para administração do sistema.
+* `cust_comconsole` - Desabilita o man:getty[8] nos dispositivos VGA (os nós de dispositivo [.filename]#/dev/ttyv*#) e habilita o uso da porta serial COM1 como console do sistema.
+* `cust_allow_ssh_root` - Permite que o usuário `root` faça login via man:sshd[8].
+* `cust_install_files` - Instala arquivos do diretório [.filename]#nanobsd/Files#, que contém alguns scripts úteis para administração do sistema.
+* `cust_pkgng` - Instala pacotes do diretório [.filename]#nanobsd/Pkg#, (necessita também do pacote pkg-* para inicialização).
==== Adicionando Pacotes
-Pacotes podem ser adicionados a uma imagem NanoBSD usando uma função customizada. A seguinte função irá instalar todos os pacotes localizados em [.filename]#/usr/src/files/tools/nanobsd/packages#:
+Pacotes podem ser adicionados a uma imagem do NanoBSD para fornecer funcionalidades específicas no aparelho. Para fazer isso, você pode escolher uma das seguintes opções:
-[.programlisting]
-....
-install_packages () (
-mkdir -p ${NANO_WORLDDIR}/packages
-cp /usr/src/tools/tools/nanobsd/packages/* ${NANO_WORLDDIR}/packages
-cp $(which pkg-static) ${NANO_WORLDDIR}/
-chroot ${NANO_WORLDDIR} sh -c 'cd packages; /pkg-static add *;cd ..;'
-rm -rf ${NANO_WORLDDIR}/packages ${NANO_WORLDDIR}/pkg-static
-)
-customize_cmd install_packages
-....
+* Adicionar `cust_pkgng` à variável `NANO_CUSTOMIZE`, ou
+* Adicionar o comando `'customize_cmd cust_pkgng'` em um arquivo de configuração personalizado.
+
+Ambos os métodos alcançam o mesmo resultado: executar a rotina `cust_pkgng`. Essa rotina percorrerá o diretório `NANO_PACKAGE_DIR` para encontrar todos os pacotes ou apenas a lista de pacotes na variável `NANO_PACKAGE_LIST`.
+
+É comum, ao instalar aplicativos por meio do pkg em um ambiente FreeBSD padrão, que o processo de instalação coloque arquivos de configuração no diretório [.filename]#usr/local/etc# e scripts de inicialização no diretório [.filename]#/usr/local/etc/rc.d#. Portanto, após a instalação dos pacotes necessários, eles precisam ser configurados para iniciar imediatamente. Para fazer isso, os arquivos de configuração necessários devem ser instalados nos diretórios corretos. Isso pode ser feito escrevendo rotinas dedicadas ou utilizando a rotina genérica `cust_install_files` para organizar os arquivos corretamente a partir do diretório [.filename]#/usr/src/tools/tools/nanobsd/Files#. Geralmente, também é necessário adicionar uma ou várias declarações no arquivo [.filename]#/etc/rc.conf# para cada pacote.
==== Exemplo do arquivo de configuração
-Um exemplo completo de um arquivo de configuração para criar uma imagem NanoBSD personalizada pode ser:
+Um exemplo completo de um arquivo de configuração para construir uma imagem personalizada do NanoBSD pode ser:
[.programlisting]
....
@@ -254,61 +345,71 @@ customize_cmd cust_allow_ssh_root
customize_cmd cust_nobeastie
....
+Todas as opções de compilação e instalação podem ser encontradas na página do manual man:src.conf[5], mas nem todas as opções podem ou devem ser usadas ao construir uma imagem do NanoBSD. As opções de compilação e instalação devem ser definidas de acordo com as necessidades da imagem sendo construída.
+
+Por exemplo, o cliente e servidor FTP podem não ser necessários. Adicionar `WITHOUT_FTP=TRUE` em um arquivo de configuração na seção `CONF_BUILD` evitará que eles sejam compilados. Além disso, se o aparelho NanoBSD não será usado para compilar programas, é possível adicionar `WITHOUT_BINUTILS=TRUE` na seção `CONF_INSTALL`; mas não na seção `CONF_BUILD`, pois eles serão usados para construir a imagem do NanoBSD.
+
+Não compilar um conjunto específico de programas - por meio de uma opção de compilação - reduz o tempo total de compilação e diminui o tamanho necessário para a imagem do disco, enquanto não instalar o mesmo conjunto específico de programas não reduz o tempo total de compilação.
+
=== Atualizando o NanoBSD
O processo de atualização do NanoBSD é relativamente simples:
[.procedure]
-. Crie uma nova imagem NanoBSD, como de costume.
-. Carregue a nova imagem em uma partição não usada de um dispositivo NanoBSD em execução.
-+
-A diferença mais importante deste passo da instalação inicial do NanoBSD é que agora, em vez de usar [.filename]#_. Disk.full# (que contém uma imagem do disco todo), a imagem [.filename]#\_.disk.image# está instalada (a qual contém uma imagem de uma única partição do sistema).
+====
+. Construa uma nova imagem do NanoBSD, como de costume.
+. Faça o upload da nova imagem para uma partição não utilizada de um aparelho NanoBSD em execução.
++
+A diferença mais importante deste passo em relação à instalação inicial do NanoBSD é que, em vez de usar o arquivo [.filename]#\_.disk.full# (que contém uma imagem do disco inteiro), é instalada a imagem [.filename]#_.disk.image# (que contém uma imagem de uma única partição do sistema).
. Reinicie e inicie o sistema a partir da partição recém-instalada.
. Se tudo correr bem, a atualização está concluída.
. Se algo der errado, reinicie a partição anterior (que contém a imagem antiga que estava em funcionamento) para restaurar a funcionalidade do sistema o mais rápido possível. Corrija quaisquer problemas da nova compilação e repita o processo.
+====
-Para instalar uma nova imagem no sistema NanoBSD, é possível usar o script [.filename]#updatep1# ou [.filename]#updatep2# localizado no diretório [.filename]#/root#, dependendo de qual partição o sistema atual está executando.
+Para instalar uma nova imagem em um sistema NanoBSD em execução, é possível usar o script [.filename]#updatep1# ou [.filename]#updatep2#, localizados no diretório [.filename]#/root#, dependendo de qual partição o sistema atual está sendo executado.
-De acordo com os serviços que estiverem disponíveis no servidor que contem a nova imagem NanoBSD e o tipo de transferência preferido, é possível seguir por uma destas três maneiras:
+Dependendo dos serviços disponíveis no host que está servindo a nova imagem do NanoBSD e do tipo de transferência preferido, é possível examinar uma dessas três opções:
-==== Usando man:ftp[1]
+==== Usando o comando man:ftp[1]
Se a velocidade de transferência estiver em primeiro lugar, use este exemplo:
-[source,shell]
+[source, shell]
....
# ftp myhost
get _.disk.image "| sh updatep1"
....
-==== Usando man:ssh[1]
+==== Usando o comando man:ssh[1]
Se uma transferência segura for preferida, considere usar este exemplo:
-[source,shell]
+[source, shell]
....
# ssh myhost cat _.disk.image.gz | zcat | sh updatep1
....
-==== Usando man:nc[1]
+==== Usando o comando man:nc[1]
-Tente este exemplo se o host remoto que contem a nova imagem não estiver executando o serviço man:ftpd[8] e nem o serviço man:sshd[8]:
+Experimente este exemplo se o host remoto não estiver executando os serviços man:ftpd[8] ou man:sshd[8]:
[.procedure]
+====
. Primeiramente, abra um socket TCP em modo escuta no host que serve a imagem e envie a imagem para o cliente:
+
-[source,shell]
+[source, shell]
....
myhost# nc -l 2222 < _.disk.image
....
+
[NOTE]
-====
-Certifique-se de que a porta usada não esteja bloqueada para receber conexões de entrada do host NanoBSD pelo firewall.
-====
+======
+Verifique se a porta utilizada não está bloqueada pelo firewall para receber conexões originadas do host NanoBSD.
+======
. Conecte-se ao host que está servindo a nova imagem e execute o script [.filename]#updatep1#:
+
-[source,shell]
+[source, shell]
....
# nc myhost 2222 | sh updatep1
....
+====
diff --git a/documentation/content/pt-br/articles/nanobsd/_index.po b/documentation/content/pt-br/articles/nanobsd/_index.po
new file mode 100644
index 0000000000..634715dc8d
--- /dev/null
+++ b/documentation/content/pt-br/articles/nanobsd/_index.po
@@ -0,0 +1,1567 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-01-21 20:00-0300\n"
+"PO-Revision-Date: 2023-05-12 19:10+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesnanobsd_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:1
+#: documentation/content/en/articles/nanobsd/_index.adoc:46
+#, no-wrap
+msgid "This document provides information about the NanoBSD tools, which can be used to create FreeBSD system images for embedded applications, suitable for use on a USB key, memory card or other mass storage media."
+msgstr ""
+"Este documento fornece informações sobre as ferramentas NanoBSD, que podem "
+"ser usadas para criar imagens de sistema FreeBSD para aplicações embarcadas, "
+"adequadas para uso em uma chave USB, cartão de memória ou outro meio de "
+"armazenamento em massa."
+
+#. type: Title ==
+#: documentation/content/en/articles/nanobsd/_index.adoc:1
+#: documentation/content/en/articles/nanobsd/_index.adoc:11
+#: documentation/content/en/articles/nanobsd/_index.adoc:52
+#, no-wrap
+msgid "Introduction to NanoBSD"
+msgstr "Introdução ao NanoBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:48
+msgid "'''"
+msgstr "'''"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:56
+msgid ""
+"NanoBSD is a tool developed by {phk} and now maintained by {imp}. It "
+"creates a FreeBSD system image for embedded applications, suitable for use "
+"on a USB key, memory card or other mass storage media."
+msgstr ""
+"O NanoBSD é uma ferramenta desenvolvida por {phk} e agora mantida por {imp}. "
+"Ela cria uma imagem do sistema FreeBSD para aplicações embarcadas, adequada "
+"para uso em uma chave USB, cartão de memória ou outro meio de armazenamento "
+"em massa."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:60
+msgid ""
+"It can be used to build specialized install images, designed for easy "
+"installation and maintenance of systems commonly called \"computer appliances"
+"\". Computer appliances have their hardware and software bundled in the "
+"product, which means all applications are pre-installed. The appliance is "
+"plugged into an existing network and can begin working (almost) immediately."
+msgstr ""
+"Pode ser usado para construir imagens de instalação especializadas, "
+"projetadas para facilitar a instalação e manutenção de sistemas comumente "
+"chamados de \"computer appliances\". Os computer appliances têm seu hardware "
+"e software empacotados no produto, o que significa que todos os aplicativos "
+"estão pré-instalados. O aparelho é conectado a uma rede existente e pode "
+"começar a funcionar (quase) imediatamente."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:62
+msgid "The features of NanoBSD include:"
+msgstr "As características do NanoBSD incluem:"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:64
+msgid ""
+"Ports and packages work as in FreeBSD - Every single application can be "
+"installed and used in a NanoBSD image, the same way as in FreeBSD."
+msgstr ""
+"Os Ports e pacotes funcionam como no FreeBSD - Cada aplicação pode ser "
+"instalada e usada em uma imagem NanoBSD, da mesma forma que no FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:65
+msgid ""
+"No missing functionality - If it is possible to do something with FreeBSD, "
+"it is possible to do the same thing with NanoBSD, unless the specific "
+"feature or features were explicitly removed from the NanoBSD image when it "
+"was created."
+msgstr ""
+"Nenhuma funcionalidade faltante - Se é possível fazer algo com o FreeBSD, é "
+"possível fazer a mesma coisa com o NanoBSD, a menos que a funcionalidade "
+"específica tenha sido explicitamente removida da imagem do NanoBSD quando "
+"ela foi criada."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:66
+msgid ""
+"Everything is read-only at run-time - It is safe to pull the power-plug. "
+"There is no necessity to run man:fsck[8] after a non-graceful shutdown of "
+"the system."
+msgstr ""
+"O sistema opera em modo read-only em tempo de execução - É seguro puxar o "
+"plugue de energia. Não há necessidade de executar o man:fsck[8] após um "
+"desligamento abrupto do sistema."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:67
+msgid ""
+"Easy to build and customize - Making use of just one shell script and one "
+"configuration file it is possible to build reduced and customized images "
+"satisfying any arbitrary set of requirements."
+msgstr ""
+"É fácil de compilar e personalizar - Usando apenas um script de shell e um "
+"arquivo de configuração, é possível criar imagens reduzidas e "
+"personalizadas, satisfazendo qualquer conjunto arbitrário de requisitos."
+
+#. type: Title ==
+#: documentation/content/en/articles/nanobsd/_index.adoc:69
+#, no-wrap
+msgid "NanoBSD Howto"
+msgstr "Guia do NanoBSD"
+
+#. type: Title ===
+#: documentation/content/en/articles/nanobsd/_index.adoc:72
+#, no-wrap
+msgid "The Design of NanoBSD"
+msgstr "O Design do NanoBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:76
+msgid ""
+"Once the image is present on the medium, it is possible to boot NanoBSD. "
+"The mass storage medium is divided into three parts by default:"
+msgstr ""
+"Uma vez que a imagem está presente no meio de armazenamento, é possível "
+"inicializar o NanoBSD. O meio de armazenamento em massa é dividido em três "
+"partes por padrão:"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:78
+msgid "Two image partitions: `code#1` and `code#2`."
+msgstr "Duas partições de imagem: `code#1` e `code#2`."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:79
+msgid ""
+"The configuration file partition, which can be mounted under the [."
+"filename]#/cfg# directory at run time."
+msgstr ""
+"A partição do arquivo de configuração, que pode ser montada sob o diretório ["
+".filename]#/cfg# em tempo de execução."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:81
+msgid "These partitions are normally mounted read-only."
+msgstr ""
+"Essas partições são normalmente montadas em modo read-only (somente leitura)."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:83
+msgid ""
+"The [.filename]#/etc# and [.filename]#/var# directories are man:md[4] "
+"(malloc) disks."
+msgstr ""
+"Os diretórios [.filename]#/etc# e [.filename]#/var# são discos man:md[4] "
+"(malloc)."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:86
+msgid ""
+"The configuration file partition persists under the [.filename]#/cfg# "
+"directory. It contains files for [.filename]#/etc# directory and is briefly "
+"mounted read-only right after the system boot, therefore it is required to "
+"copy modified files from [.filename]#/etc# back to the [.filename]#/cfg# "
+"directory if changes are expected to persist after the system restarts."
+msgstr ""
+"A partição do arquivo de configuração persiste no diretório [.filename]#/cfg#"
+". Ele contém arquivos para o diretório [.filename]#/etc# e é montado "
+"brevemente como somente leitura logo após a inicialização do sistema. "
+"Portanto, é necessário copiar os arquivos modificados do diretório [."
+"filename]#/etc# de volta para o diretório [.filename]#/cfg# se as alterações "
+"precisarem ser mantidas após a reinicialização do sistema."
+
+#. type: Block title
+#: documentation/content/en/articles/nanobsd/_index.adoc:87
+#, no-wrap
+msgid "Making Persistent Changes to [.filename]#/etc/resolv.conf#"
+msgstr ""
+"Fazendo alterações persistentes no arquivo [.filename]#/etc/resolv.conf#"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:98
+#, no-wrap
+msgid ""
+"# vi /etc/resolv.conf\n"
+"[...]\n"
+"# mount /cfg\n"
+"# cp /etc/resolv.conf /cfg\n"
+"# umount /cfg\n"
+msgstr ""
+"# vi /etc/resolv.conf\n"
+"[...]\n"
+"# mount /cfg\n"
+"# cp /etc/resolv.conf /cfg\n"
+"# umount /cfg\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:105
+msgid ""
+"The partition containing [.filename]#/cfg# should be mounted only at boot "
+"time and while overriding the configuration files."
+msgstr ""
+"A partição que contém o diretório [.filename]#/cfg# deve ser montada somente "
+"no momento da inicialização e enquanto sobrescreve os arquivos de "
+"configuração."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:107
+msgid ""
+"Keeping [.filename]#/cfg# mounted at all times is not a good idea, "
+"especially if the NanoBSD system runs off a mass storage medium that may be "
+"adversely affected by a large number of writes to the partition (like when "
+"the filesystem syncer flushes data to the system disks)."
+msgstr ""
+"Manter o [.filename]#/cfg# montado o tempo todo não é uma boa idéia, "
+"especialmente se o sistema NanoBSD rodar em um meio de armazenamento em "
+"massa que pode ser afetado adversamente por um grande número de gravações na "
+"partição (como quando o sincronizador do sistema de arquivos libera dados "
+"para os discos do sistema)."
+
+#. type: Title ===
+#: documentation/content/en/articles/nanobsd/_index.adoc:109
+#, no-wrap
+msgid "Building a NanoBSD Image"
+msgstr "Construindo uma imagem NanoBSD"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:113
+msgid ""
+"A NanoBSD image is built using a simple [.filename]#nanobsd.sh# shell "
+"script, which can be found in the [.filename]#/usr/src/tools/tools/nanobsd# "
+"directory. This script creates an image, which can be copied on the storage "
+"medium using the man:dd[1] utility."
+msgstr ""
+"Uma imagem NanoBSD é compilada usando um simples shell script [."
+"filename]#nanobsd.sh#, que pode ser encontrado no diretório [.filename]#/usr/"
+"src/tools/tools/nanobsd#. Este script cria uma imagem, que pode ser copiada "
+"no meio de armazenamento usando o utilitário man:dd[1]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:115
+msgid "The necessary commands to build a NanoBSD image are:"
+msgstr "Os comandos necessários para construir uma imagem NanoBSD são:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:122
+#, no-wrap
+msgid ""
+"# cd /usr/src/tools/tools/nanobsd <.>\n"
+"# sh nanobsd.sh <.>\n"
+"# cd /usr/obj/nanobsd.full <.>\n"
+"# dd if=_.disk.full of=/dev/da0 bs=64k <.>\n"
+msgstr ""
+"# cd /usr/src/tools/tools/nanobsd <.>\n"
+"# sh nanobsd.sh <.>\n"
+"# cd /usr/obj/nanobsd.full <.>\n"
+"# dd if=_.disk.full of=/dev/da0 bs=64k <.>\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:125
+msgid ""
+"Change the current directory to the base directory of the NanoBSD build "
+"script."
+msgstr ""
+"Altere o diretório atual para o diretório base do script de compilação do "
+"NanoBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:127
+msgid "Start the build process."
+msgstr "Inicie o processo de compilação."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:129
+msgid ""
+"Change the current directory to the place where the built images are located."
+msgstr ""
+"Altere o diretório atual para o local onde as imagens compiladas estão "
+"localizadas."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:131
+msgid "Install NanoBSD onto the storage medium."
+msgstr "Instale o NanoBSD no meio de armazenamento."
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:132
+#, no-wrap
+msgid "Options When Building a NanoBSD Image"
+msgstr "Opções ao compilar uma imagem NanoBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:136
+msgid ""
+"When building a NanoBSD image, several build options can be passed to [."
+"filename]#nanobsd.sh# on the command line. These options can have a "
+"significant impact on the build process."
+msgstr ""
+"Ao construir uma imagem NanoBSD, várias opções de compilação podem ser "
+"passadas para [.filename]#nanobsd.sh# na linha de comando. Essas opções "
+"podem ter um impacto significativo no processo de compilação."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:138
+msgid "Some options are for verbosity purposes:"
+msgstr "Algumas opções são para fins de verbosidade:"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:140
+msgid "`-h`: prints the help summary page."
+msgstr "`-h`: imprime a página resumida de ajuda."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:141
+msgid "`-q`: makes output quieter."
+msgstr "`-q`: torna a saída mais silenciosa."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:142
+msgid "`-v`: makes output more verbose"
+msgstr "`-v`: torna a saída mais detalhada (verbose)"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:145
+msgid ""
+"Some other options can be used to restrict the building process. Sometimes "
+"it is not necessary to rebuild everything from sources, especially if an "
+"image has already been built, and only little change is made."
+msgstr ""
+"Algumas outras opções podem ser usadas para restringir o processo de "
+"compilação. Às vezes, não é necessário reconstruir tudo a partir das fontes, "
+"especialmente se uma imagem já foi compilada e apenas poucas alterações "
+"foram feitas."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:147
+msgid "`-k`: do not build the kernel"
+msgstr "`-k`: não compilar o kernel"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:148
+msgid "`-w`: do not build world"
+msgstr "`-w`: não compilar o mundo (world)"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:149
+msgid "`-b`: do not build either kernel and world"
+msgstr "`-b`: não compilar nem o kernel e nem o mundo (world)"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:150
+msgid ""
+"`-i`: do not build a disk image at all. As a file will not be created, it "
+"will not be possible to man:dd[1] it to a storage media."
+msgstr ""
+"`-i`: não compilar uma imagem de disco. Como um arquivo não será criado, não "
+"será possível usá-lo com o comando man:dd[1] para gravá-lo em um dispositivo "
+"de armazenamento."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:151
+msgid ""
+"`-f`: do not build a disk image of the first partition (which is useful for "
+"upgrade purposes)"
+msgstr ""
+"`-f`: não compilar uma imagem de disco para a primeira partição (o que é "
+"útil para fins de atualização)"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:152
+msgid ""
+"`-n`: add `-DNO_CLEAN` to `buildworld`, `buildkernel`. Also, all the files "
+"that have already been built in a previous run are kept."
+msgstr ""
+"`-n`: adiciona `-DNO_CLEAN` as etapas `buildworld` e `buildkernel`. Além "
+"disso, todos os arquivos que já foram compilados em uma execução anterior "
+"são mantidos."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:155
+msgid ""
+"A configuration file can be used to tweak as many elements as desired. Load "
+"it with `-c`"
+msgstr ""
+"Um arquivo de configuração pode ser usado para ajustar quantos elementos "
+"desejar. Carregue-o com `-c`"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:157
+msgid "The last options are:"
+msgstr "As últimas opções são:"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:159
+msgid ""
+"`-K`: do not install a kernel. A disk image without a kernel will not be "
+"able to achieve a normal boot sequence."
+msgstr ""
+"`-K`: não instalar um kernel. Uma imagem de disco sem um kernel não poderá "
+"executar uma sequência de inicialização normal."
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:160
+#, no-wrap
+msgid "The Complete Image Building Process"
+msgstr "O Processo Completo de Compilação de Imagens"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:165
+msgid ""
+"The complete image building process is going through a lot of steps. The "
+"exact steps taken will depend on the chosen options when starting the "
+"script. Assuming the script is run with no particular options, this is what "
+"will happen."
+msgstr ""
+"O processo completo de compilação de imagens passa por muitas etapas. As "
+"etapas exatas dependerão das opções selecionadas ao iniciar o script. "
+"Supondo que o script seja executado sem opções específicas, isso é o que "
+"acontecerá."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:167
+msgid ""
+"`run_early_customize`: commands that are defined in a supplied configuration "
+"file."
+msgstr ""
+"`run_early_customize`: comandos que são definidos em um arquivo de "
+"configuração fornecido."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:168
+msgid ""
+"`clean_build`: Just cleans the build environment by deleting the previously "
+"built files."
+msgstr ""
+"`clean_build`: Apenas limpa o ambiente de compilação excluindo os arquivos "
+"previamente compilados."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:169
+msgid ""
+"`make_conf_build`: Assemble make.conffrom the `CONF_WORLD` and `CONF_BUILD` "
+"variables."
+msgstr ""
+"`make_conf_build`: Monta o arquivo make.conf a partir das variáveis "
+"`CONF_WORLD` e `CONF_BUILD`."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:170
+msgid "`build_world`: Build world."
+msgstr "`build_world`: Compila o mundo (world)."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:171
+msgid "`build_kernel`: Build the kernel files."
+msgstr "`build_kernel`: Compila os arquivos do kernel."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:172
+msgid "`clean_world`: Clean the destination directory."
+msgstr "`clean_world`: Limpa o diretório de destino."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:173
+msgid ""
+"`make_conf_install`: Assemble make.conf from the `CONF_WORLD` and "
+"`CONF_INSTALL` variables."
+msgstr ""
+"`make_conf_install`: Monta o arquivo make.conf a partir das variáveis "
+"`CONF_WORLD` e `CONF_INSTALL`."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:174
+msgid "`install_world`: Install all files built during `buildworld`."
+msgstr ""
+"`install_world`: Instala todos os arquivos construídos durante o "
+"`buildworld`."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:175
+msgid ""
+"`install_etc`: Install the necessary files in the [.filename]#/etc# "
+"directory, based on the `make distribution` command."
+msgstr ""
+"`install_etc`: Instala os arquivos necessários no diretório [.filename]#/etc#"
+", com base no comando `make distribution`."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:176
+msgid ""
+"`setup_nanobsd_etc`: the first configuration specific to NanoBSD takes place "
+"at this stage. The [.filename]#/etc/diskless# is created and the root "
+"filesystem is defined as read-only."
+msgstr ""
+"`setup_nanobsd_etc`: a primeira configuração específica do NanoBSD ocorre "
+"nesta etapa. O diretório [.filename]#/etc/diskless# é criado e o sistema de "
+"arquivos raiz é definido como somente leitura."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:177
+msgid "`install_kernel`: the kernel and modules files are installed."
+msgstr "`install_kernel`: os arquivos do kernel e dos módulos são instalados."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:178
+msgid ""
+"`run_customize`: all the customizing routines defined by the user will be "
+"called."
+msgstr ""
+"`run_customize`: todas as rotinas de personalização definidas pelo usuário "
+"serão chamadas."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:179
+msgid ""
+"`setup_nanobsd`: a special configuration directory layout is setup. The [."
+"filename]#/usr/local/etc# gets moved to [.filename]#/etc/local# and a "
+"symbolic link is created back from [.filename]#/etc/local# to [.filename]#/"
+"usr/local/etc#."
+msgstr ""
+"`setup_nanobsd`: uma estrutura especial de diretórios de configuração é "
+"configurada. O diretório [.filename]#/usr/local/etc# é movido para [."
+"filename]#/etc/local# e um link simbólico é criado de volta de [.filename]#/"
+"etc/local# para [.filename]#/usr/local/etc#."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:180
+msgid "`prune_usr`: the empty directories from [.filename]#/usr# are removed."
+msgstr "`prune_usr`: os diretórios vazios de [.filename]#/usr# são removidos."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:181
+msgid ""
+"`run_late_customize`: the very last custom scripts can be run at this point."
+msgstr ""
+"`run_late_customize`: os últimos scripts personalizados podem ser executados "
+"neste ponto."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:182
+msgid "`fixup_before_diskimage`: List all installed files in a metalog"
+msgstr ""
+"`fixup_before_diskimage`: Lista todos os arquivos instalados em um metalog"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:183
+msgid ""
+"`create_diskimage`: creates the actual disk image, based on the disk "
+"geometries provides parameters."
+msgstr ""
+"`create_diskimage`: cria a imagem de disco, com base nos parâmetros de "
+"geometria de disco fornecidos."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:184
+msgid "`last_orders`: does nothing for now."
+msgstr "`last_orders`: não faz nada por enquanto."
+
+#. type: Title ===
+#: documentation/content/en/articles/nanobsd/_index.adoc:185
+#, no-wrap
+msgid "Customizing a NanoBSD Image"
+msgstr "Personalizando uma imagem NanoBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:189
+msgid ""
+"This is probably the most important and most interesting feature of "
+"NanoBSD. This is also where you will be spending most of the time when "
+"developing with NanoBSD."
+msgstr ""
+"Esta é provavelmente a característica mais importante e mais interessante do "
+"NanoBSD. É também onde você passará a maior parte do tempo ao desenvolver "
+"com o NanoBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:191
+msgid ""
+"Invocation of the following command will force the [.filename]#nanobsd.sh# "
+"to read its configuration from [.filename]#myconf.nano# located in the "
+"current directory:"
+msgstr ""
+"A invocação do seguinte comando forçará o [.filename]#nanobsd.sh# a ler sua "
+"configuração de [.filename]#myconf.nano# localizado no diretório atual:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:195
+#, no-wrap
+msgid "# sh nanobsd.sh -c myconf.nano\n"
+msgstr "# sh nanobsd.sh -c myconf.nano\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:198
+msgid "Customization is done in two ways:"
+msgstr "A personalização é feita de duas maneiras:"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:200
+msgid "Configuration options"
+msgstr "Opções de configuração"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:201
+msgid "Custom functions"
+msgstr "Funções personalizadas"
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:202
+#, no-wrap
+msgid "Configuration Options"
+msgstr "Opções de configuração"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:207
+msgid ""
+"With configuration settings, it is possible to configure options passed to "
+"both the `buildworld` and `installworld` stages of the NanoBSD build "
+"process, as well as internal options passed to the main build process of "
+"NanoBSD. Through these options it is possible to cut the system down, so it "
+"will fit on as little as 64MB. You can use the configuration options to "
+"trim down FreeBSD even more, until it will consists of just the kernel and "
+"two or three files in the userland."
+msgstr ""
+"Com as configurações de configuração, é possível configurar as opções "
+"passadas tanto para as etapas `buildworld` quanto `installworld` do processo "
+"de compilação do NanoBSD, bem como opções internas passadas para o processo "
+"de compilação principal do NanoBSD. Através dessas opções, é possível "
+"reduzir o sistema, para que ele caiba em tão pouco quanto 64MB. Você pode "
+"usar as opções de configuração para reduzir ainda mais o FreeBSD, até que "
+"consista apenas no kernel e em dois ou três arquivos no espaço do usuário."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:210
+msgid ""
+"The configuration file consists of configuration options, which override the "
+"default values. The most important directives are:"
+msgstr ""
+"O arquivo de configuração consiste em opções de configuração, que substituem "
+"os valores padrão. As diretivas mais importantes são:"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:212
+msgid "`NANO_NAME` - Name of build (used to construct the workdir names)."
+msgstr ""
+"`NANO_NAME` - Nome da compilação (usado para construir os nomes dos "
+"diretórios de trabalho)."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:213
+msgid "`NANO_SRC` - Path to the source tree used to build the image."
+msgstr ""
+"`NANO_SRC` - Caminho para a árvore de código-fonte usada para compilar a "
+"imagem."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:214
+msgid "`NANO_KERNEL` - Name of kernel configuration file used to build kernel."
+msgstr ""
+"`NANO_KERNEL` - Nome do arquivo de configuração do kernel usado para "
+"compilar o kernel."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:215
+msgid "`CONF_BUILD` - Options passed to the `buildworld` stage of the build."
+msgstr ""
+"`CONF_BUILD` - Opções passadas para o estágio `buildworld` da compilação."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:216
+msgid ""
+"`CONF_INSTALL` - Options passed to the `installworld` stage of the build."
+msgstr ""
+"`CONF_INSTALL` - Opções passadas para o estágio `installworld` da compilação."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:217
+msgid ""
+"`CONF_WORLD` - Options passed to both the `buildworld` and the "
+"`installworld` stage of the build."
+msgstr ""
+"`CONF_WORLD` - Opções passadas tanto para o estágio `buildworld` quanto para "
+"o estágio `installworld` da compilação."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:218
+msgid ""
+"`FlashDevice` - Defines what type of media to use. Check [."
+"filename]#FlashDevice.sub# for more details."
+msgstr ""
+"`FlashDevice` - Define qual tipo de mídia usar. Verifique [."
+"filename]#FlashDevice.sub# para obter mais detalhes."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:220
+msgid ""
+"There are many more configuration options that could be relevant depending "
+"upon the kind of NanoBSD that is desired."
+msgstr ""
+"Existem muitas outras opções de configuração que podem ser relevantes, "
+"dependendo do tipo de NanoBSD desejado."
+
+#. type: Title =====
+#: documentation/content/en/articles/nanobsd/_index.adoc:221
+#, no-wrap
+msgid "General Customization"
+msgstr "Personalização Geral"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:224
+msgid ""
+"There are three stages, by design, at which it is possible to make changes "
+"that affect the building process, just by setting up a variable in the "
+"provided configuration file:"
+msgstr ""
+"Existem três estágios, por design, nos quais é possível fazer alterações que "
+"afetam o processo de compilação, apenas configurando uma variável no arquivo "
+"de configuração fornecido:"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:226
+msgid "`run_early_customize`: before anything else happens."
+msgstr "`run_early_customize`: antes de qualquer outra coisa acontecer."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:227
+msgid "`run_customize`: after all the standard files have been laid out"
+msgstr ""
+"`run_customize`: depois que todos os arquivos padrões tiverem sido "
+"organizados"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:228
+msgid ""
+"`run_late_customize`: at the very end of the process, just before the actual "
+"NanoBSD image is built."
+msgstr ""
+"`run_late_customize`: no final do processo, antes da compilação da imagem "
+"real do NanoBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:230
+msgid ""
+"To customize a NanoBSD image, at any of these steps, it is best to add a "
+"specific value to one of the corresponding variables."
+msgstr ""
+"Para personalizar uma imagem do NanoBSD em qualquer um desses passos, é "
+"melhor adicionar um valor específico a uma das variáveis correspondentes."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:233
+msgid ""
+"The `NANO_EARLY_CUSTOMIZE` variable is used at the first step of the "
+"building process. At this point, there is no example as to what can be done "
+"using that variable, but it may change in the future."
+msgstr ""
+"A variável `NANO_EARLY_CUSTOMIZE` é usada no primeiro passo do processo de "
+"construção. Neste momento, não há um exemplo específico do que pode ser "
+"feito usando essa variável, mas isso pode mudar no futuro."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:236
+msgid ""
+"The `NANO_CUSTOMIZE` variable is used after the kernel, world and etc "
+"configuration files have been installed, and the etc files have been setup "
+"as to be a NanoBSD installation. So it is the correct step in the building "
+"process to tweak configuration options and add packages, like in the "
+"cust_nobeastie example."
+msgstr ""
+"A variável `NANO_CUSTOMIZE` é usada depois que os arquivos de configuração "
+"do kernel, world e etc foram instalados, e os arquivos etc foram "
+"configurados como uma instalação do NanoBSD. Portanto, é o passo correto no "
+"processo de compilação para ajustar opções de configuração e adicionar "
+"pacotes, como no exemplo cust_nobeastie."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:240
+msgid ""
+"The `NANO_LATE_CUSTOMIZE` variable is used just before the disk image is "
+"created, so it is the very last moment to change anything. Remember that "
+"the `setup_nanobsd` routine already executed and that the [.filename]#etc#, "
+"[.filename]#conf# and [.filename]#cfg# directories and subdirectories are "
+"already modified, so it is not time to change them at this point. Rather, "
+"it is possible to add or remove specific files."
+msgstr ""
+"A variável `NANO_LATE_CUSTOMIZE` é usada imediatamente antes da criação da "
+"imagem do disco, portanto, é o momento final para fazer qualquer alteração. "
+"Lembre-se de que a rotina `setup_nanobsd` já foi executada e que os "
+"diretórios [.filename]#etc#, [.filename]#conf# e [.filename]#cfg# e seus "
+"subdiretórios já foram modificados, então não é o momento de alterá-los "
+"neste ponto. Em vez disso, é possível adicionar ou remover arquivos "
+"específicos."
+
+#. type: Title =====
+#: documentation/content/en/articles/nanobsd/_index.adoc:241
+#, no-wrap
+msgid "Booting Options"
+msgstr "Opções de Inicialização"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:245
+msgid ""
+"There are also variables that can change the way the NanoBSD image boots. "
+"Two options are passed to man:boot0cfg[8] to initialize the boot sector of "
+"the disk image:"
+msgstr ""
+"Também existem variáveis que podem alterar a forma como a imagem do NanoBSD "
+"é inicializada. Duas opções são passadas para o man:boot0cfg[8] para "
+"inicializar o setor de boot da imagem do disco:"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:247
+msgid "`NANO_BOOT0CFG`"
+msgstr "`NANO_BOOT0CFG`"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:248
+msgid "`NANO_BOOTLOADER`"
+msgstr "`NANO_BOOTLOADER`"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:253
+msgid ""
+"With `NANO_BOOTLOADER` a bootloader file can be chosen. The most common "
+"possible options are between [.filename]#boot0sio# and [.filename]#boot0# "
+"depending on whether the appliance has a serial port or not. It is best to "
+"avoid supplying a different bootloader, but it is possible. To do so, it is "
+"best to have checked the extref:{handbook}boot[FreeBSD Handbook] chapter on "
+"the boot process."
+msgstr ""
+"Com o `NANO_BOOTLOADER`, é possível escolher um arquivo de bootloader. As "
+"opções mais comuns são entre [.filename]#boot0sio# e [.filename]#boot0#, "
+"dependendo se o aparelho possui uma porta serial ou não. É melhor evitar "
+"fornecer um bootloader diferente, mas é possível fazê-lo. Para isso, é "
+"recomendável ter verificado o capítulo sobre o processo de inicialização no "
+"extref:{handbook}boot[Handbook do FreeBSD]."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:260
+msgid ""
+"With `NANO_BOOT0CFG`, the booting process can be tweaked, like selecting on "
+"which partition the NanoBSD image will actually boot. It is best to check "
+"the man:boot0cfg[8] page before changing the default value of this "
+"variable. One option that could be interesting to change is the timeout of "
+"the booting procedure. To do so, the `NANO_BOOT0CFG` variable can be "
+"changed to `\"-o packet -s 1 -m 3 -t 36\"`. That way the booting process "
+"would start after approximately 2 seconds; because it is rare that waiting "
+"10 seconds before actually booting is desired."
+msgstr ""
+"Com o `NANO_BOOT0CFG`, é possível ajustar o processo de inicialização, como "
+"selecionar em qual partição a imagem do NanoBSD será inicializada. É melhor "
+"verificar a página man:boot0cfg[8] antes de alterar o valor padrão dessa "
+"variável. Uma opção interessante para alterar é o tempo limite do "
+"procedimento de inicialização. Para fazer isso, a variável `NANO_BOOT0CFG` "
+"pode ser alterada para `\"-o packet -s 1 -m 3 -t 36\"`. Dessa forma, o "
+"processo de inicialização começaria após aproximadamente 2 segundos, porque "
+"é raro que seja desejado esperar 10 segundos antes de iniciar o boot."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:263
+msgid ""
+"Good to know: the `NANO_BOOT2CFG` variable is only used in the "
+"`cust_comconsole` routine that can be called at the `NANO_CUSTOMIZE` step if "
+"the appliance has a serial port and all console input and output has to take "
+"place through it. Be sure to check the relevant parameters of the serial "
+"port, as setting a bad parameter value can make it useless."
+msgstr ""
+"Bom saber: a variável `NANO_BOOT2CFG` é usada apenas na rotina "
+"`cust_comconsole`, que pode ser chamada no passo `NANO_CUSTOMIZE` se o "
+"aparelho tiver uma porta serial e toda a entrada e saída do console tiver "
+"que ser feita por meio dela. Certifique-se de verificar os parâmetros "
+"relevantes da porta serial, pois definir um valor incorreto pode torná-la "
+"inútil."
+
+#. type: Title =====
+#: documentation/content/en/articles/nanobsd/_index.adoc:264
+#, no-wrap
+msgid "Disk Image Creation"
+msgstr "Criação da Imagem do Disco"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:268
+msgid ""
+"In the end of the boot process is the disk image creation. With this step, "
+"the NanoBSD script provides a file that can simply be copied onto a disk for "
+"the appliance, and that will make it boot and start."
+msgstr ""
+"No final do processo de inicialização está a criação da imagem do disco. Com "
+"essa etapa, o script do NanoBSD fornece um arquivo que pode ser simplesmente "
+"copiado para um disco do aparelho, e isso fará com que ele seja inicializado "
+"e iniciado."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:270
+msgid ""
+"There are many variable that need to be set just right for the script to "
+"produce a usable disk image."
+msgstr ""
+"Existem muitas variáveis que precisam ser configuradas corretamente para que "
+"o script produza uma imagem de disco utilizável."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:272
+msgid ""
+"The `NANO_DRIVE` variable must be set to the drive name of the media at "
+"runtime. Usually, the default value `ada0`, which represents the first `IDE`/"
+"`ATA`/`SATA` device on the appliance is expected to be the correct one, but "
+"a different type of storage could also be used - like a USB key, in which "
+"case, it would rather be da0."
+msgstr ""
+"A variável `NANO_DRIVE` deve ser definida como o nome da unidade de mídia em "
+"tempo de execução. Geralmente, o valor padrão `ada0`, que representa o "
+"primeiro dispositivo `IDE`/`ATA`/`SATA` no aparelho, é esperado como o "
+"correto, mas um tipo diferente de armazenamento também pode ser usado - como "
+"uma chave USB, nesse caso seria `da0`."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:273
+msgid ""
+"The `NANO_MEDIASIZE` variable must be set to the size (in 512 bytes sectors) "
+"of the storage media that will be used. If you set it wrong, it is possible "
+"that the NanoBSD image will not boot at all, and a message at boot time will "
+"be warning about incorrect disk geometry."
+msgstr ""
+"A variável `NANO_MEDIASIZE` deve ser definida como o tamanho (em setores de "
+"512 bytes) da mídia de armazenamento que será usada. Se você definir isso "
+"incorretamente, é possível que a imagem do NanoBSD não inicialize e uma "
+"mensagem durante a inicialização avisará sobre a geometria de disco "
+"incorreta."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:275
+msgid ""
+"The [.filename]#/etc#, [.filename]#/var#, and [.filename]#/tmp# directories "
+"are allocated as man:md[4] (malloc) disks at boot time; so their sizes can "
+"be tailored to suit the appliance needs. The `NANO_RAM_ETCSIZE` variable "
+"sets the size of the [.filename]#/etc#; and the `NANO_RAM_TMPVARSIZE` "
+"variable sets the size of both the [.filename]#/var# and [.filename]#/tmp# "
+"directory, as [.filename]#/tmp# is symbolically linked to [.filename]#/var/"
+"tmp#. By default, both malloc disks sizes are set at 20MB each. They can "
+"always be changed, but usually the [.filename]#/etc# does not grow too much "
+"in size, so 20MB is a good starting point, whereas the [.filename]#/var# and "
+"especially [.filename]#/tmp# can grow much larger if not careful about it. "
+"For memory constrained systems, smaller filesystem sizes may be chosen."
+msgstr ""
+"Os diretórios [.filename]#/etc#, [.filename]#/var# e [.filename]#/tmp# são "
+"alocados como discos man:md[4] (malloc) durante a inicialização; portanto, "
+"seus tamanhos podem ser ajustados para atender às necessidades do aparelho. "
+"A variável `NANO_RAM_ETCSIZE` define o tamanho do [.filename]#/etc# e a "
+"variável `NANO_RAM_TMPVARSIZE` define o tamanho tanto do diretório [."
+"filename]#/var# quanto do diretório [.filename]#/tmp#, já que [."
+"filename]#/tmp# está simbolicamente vinculado a [.filename]#/var/tmp#. Por "
+"padrão, ambos os tamanhos dos discos malloc são definidos em 20MB cada. Eles "
+"podem ser alterados, mas geralmente o [.filename]#/etc# não cresce muito em "
+"tamanho, portanto, 20MB é um bom ponto de partida, enquanto o [."
+"filename]#/var# e especialmente o [.filename]#/tmp# podem aumentar muito de "
+"tamanho se não tiver cuidado. Para sistemas com restrição de memória, "
+"tamanhos menores de sistema de arquivos podem ser escolhidos."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:276
+msgid ""
+"As NanoBSD is mainly designed to build a system image for an appliance, it "
+"is assumed that the storage media used will be relatively small. For that "
+"reason, the filesystem that is laid out is configured to have a small block "
+"size (4Kb) and a small fragment size (512b). The configuration options of "
+"the filesystem can be modified through the `NANO_NEWFS` variable, but the "
+"syntax must respect the man:newfs[8] command format. Also, by default, the "
+"filesystem has Soft Updates enabled. The extref:{handbook}[FreeBSD Handbook] "
+"can be checked about this."
+msgstr ""
+"Como o NanoBSD é projetado principalmente para criar uma imagem de sistema "
+"para um aparelho, presume-se que a mídia de armazenamento usada seja "
+"relativamente pequena. Por esse motivo, o sistema de arquivos que é "
+"organizado é configurado com um tamanho de bloco pequeno (4Kb) e um tamanho "
+"de fragmento pequeno (512b). As opções de configuração do sistema de "
+"arquivos podem ser modificadas por meio da variável `NANO_NEWFS`, mas a "
+"sintaxe deve respeitar o formato do comando man:newfs[8]. Além disso, por "
+"padrão, o sistema de arquivos tem Soft Updates ativado. O extref:{handbook}["
+"Handbook do FreeBSD] pode ser consultado para obter mais informações sobre "
+"isso."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:277
+msgid ""
+"The different partition sizes can be set through the use of `NANO_CODESIZE`, "
+"`NANO_CONFSIZE`, and `NANO_DATASIZE` as a multiple of 512 bytes sectors. "
+"`NANO_CODESIZE` defines the size of the first two image partitions: `code#1` "
+"and `code#2`. They have to be big enough to hold all the files that will be "
+"produced as a result of the `buildworld` and `buildkernel` processes. "
+"`NANO_CONFSIZE` defines the size of the configuration file partition, so it "
+"does not need to be very big; but do not make it so small that it will not "
+"hold all configuration files. Finally, `NANO_DATASIZE` defines the size of "
+"an optional partition, that can be used on the appliance. The last partition "
+"can be used, for example, to keep files created on the fly on disk."
+msgstr ""
+"Os diferentes tamanhos das partições podem ser definidos por meio do uso de "
+"`NANO_CODESIZE`, `NANO_CONFSIZE` e `NANO_DATASIZE` como múltiplos de setores "
+"de 512 bytes. `NANO_CODESIZE` define o tamanho das duas primeiras partições "
+"da imagem: `code#1` e `code#2`. Elas devem ser grandes o suficiente para "
+"armazenar todos os arquivos que serão produzidos como resultado dos "
+"processos `buildworld` e `buildkernel`. `NANO_CONFSIZE` define o tamanho da "
+"partição do arquivo de configuração, portanto, não precisa ser muito grande, "
+"mas não a faça tão pequena que não possa armazenar todos os arquivos de "
+"configuração. Por fim, `NANO_DATASIZE` define o tamanho de uma partição "
+"opcional que pode ser usada no aparelho. A última partição pode ser usada, "
+"por exemplo, para manter arquivos criados dinamicamente no disco."
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:278
+#, no-wrap
+msgid "Custom Functions"
+msgstr "Funções Personalizadas"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:282
+msgid ""
+"It is possible to fine-tune NanoBSD using shell functions in the "
+"configuration file. The following example illustrates the basic model of "
+"custom functions:"
+msgstr ""
+"É possível ajustar o NanoBSD usando funções de shell no arquivo de "
+"configuração. O exemplo a seguir ilustra o modelo básico de funções "
+"personalizadas:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:290
+#, no-wrap
+msgid ""
+"cust_foo () (\n"
+"\techo \"bar=baz\" > \\\n"
+"\t\t${NANO_WORLDDIR}/etc/foo\n"
+")\n"
+"customize_cmd cust_foo\n"
+msgstr ""
+"cust_foo () (\n"
+"\techo \"bar=baz\" > \\\n"
+"\t\t${NANO_WORLDDIR}/etc/foo\n"
+")\n"
+"customize_cmd cust_foo\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:293
+msgid ""
+"A more useful example of a customization function is the following, which "
+"changes the default size of the [.filename]#/etc# directory from 5MB to 30MB:"
+msgstr ""
+"Um exemplo mais útil de uma função de personalização é o seguinte, que "
+"altera o tamanho padrão do diretório [.filename]#/etc# de 5MB para 30MB:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:301
+#, no-wrap
+msgid ""
+"cust_etc_size () (\n"
+"\tcd ${NANO_WORLDDIR}/conf\n"
+"\techo 30000 > default/etc/md_size\n"
+")\n"
+"customize_cmd cust_etc_size\n"
+msgstr ""
+"cust_etc_size () (\n"
+"\tcd ${NANO_WORLDDIR}/conf\n"
+"\techo 30000 > default/etc/md_size\n"
+")\n"
+"customize_cmd cust_etc_size\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:304
+msgid ""
+"There are a few default pre-defined customization functions ready for use:"
+msgstr ""
+"Existem algumas funções de customização pré-definidas por padrão e prontas "
+"para uso:"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:306
+msgid ""
+"`cust_comconsole` - Disables man:getty[8] on the VGA devices (the [."
+"filename]#/dev/ttyv*# device nodes) and enables the use of the COM1 serial "
+"port as the system console."
+msgstr ""
+"`cust_comconsole` - Desabilita o man:getty[8] nos dispositivos VGA (os nós "
+"de dispositivo [.filename]#/dev/ttyv*#) e habilita o uso da porta serial "
+"COM1 como console do sistema."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:307
+msgid "`cust_allow_ssh_root` - Allow `root` to login via man:sshd[8]."
+msgstr ""
+"`cust_allow_ssh_root` - Permite que o usuário `root` faça login via "
+"man:sshd[8]."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:308
+msgid ""
+"`cust_install_files` - Installs files from the [.filename]#nanobsd/Files# "
+"directory, which contains some useful scripts for system administration."
+msgstr ""
+"`cust_install_files` - Instala arquivos do diretório [.filename]#nanobsd/"
+"Files#, que contém alguns scripts úteis para administração do sistema."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:309
+msgid ""
+"`cust_pkgng` - Installs packages from the [.filename]#nanobsd/Pkg# directory "
+"(needs also pkg-* package to bootstrap)."
+msgstr ""
+"`cust_pkgng` - Instala pacotes do diretório [.filename]#nanobsd/Pkg#, ("
+"necessita também do pacote pkg-* para inicialização)."
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:310
+#, no-wrap
+msgid "Adding Packages"
+msgstr "Adicionando Pacotes"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:313
+msgid ""
+"Packages can be added to a NanoBSD image, to provide specific "
+"functionalities on the appliance. To do so, either:"
+msgstr ""
+"Pacotes podem ser adicionados a uma imagem do NanoBSD para fornecer "
+"funcionalidades específicas no aparelho. Para fazer isso, você pode escolher "
+"uma das seguintes opções:"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:315
+msgid "Add the `cust_pkgng` to the `NANO_CUSTOMIZE` variable, or"
+msgstr "Adicionar `cust_pkgng` à variável `NANO_CUSTOMIZE`, ou"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:316
+msgid ""
+"Add a `'customize_cmd cust_pkgng'` command in a customized configuration "
+"file."
+msgstr ""
+"Adicionar o comando `'customize_cmd cust_pkgng'` em um arquivo de "
+"configuração personalizado."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:319
+msgid ""
+"Both methods achieve the same result: launching the `cust_pkgng` routine. "
+"This routine will go through `NANO_PACKAGE_DIR` directory to find either all "
+"packages or just the list of packages in the `NANO_PACKAGE_LIST` variable."
+msgstr ""
+"Ambos os métodos alcançam o mesmo resultado: executar a rotina `cust_pkgng`. "
+"Essa rotina percorrerá o diretório `NANO_PACKAGE_DIR` para encontrar todos "
+"os pacotes ou apenas a lista de pacotes na variável `NANO_PACKAGE_LIST`."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:325
+msgid ""
+"It is common, when installing applications through pkg on a standard FreeBSD "
+"environment, that the install process puts configuration files, in the [."
+"filename]#usr/local/etc# directory, and startup scripts in the [.filename]#/"
+"usr/local/etc/rc.d# directory. So, after the required packages have been "
+"installed, they need to be configured in order for them to start right out "
+"of the box. To do so, the necessary configuration files have to be "
+"installed in the correct directories. This can be achieved by writing "
+"dedicated routines or the generic `cust_install_files` routine can be used "
+"to lay out files properly from the [.filename]#/usr/src/tools/tools/nanobsd/"
+"Files# directory. Usually a statement, sometimes multiple statements, in "
+"the [.filename]#/etc/rc.conf# also needs to be added for each package."
+msgstr ""
+"É comum, ao instalar aplicativos por meio do pkg em um ambiente FreeBSD "
+"padrão, que o processo de instalação coloque arquivos de configuração no "
+"diretório [.filename]#usr/local/etc# e scripts de inicialização no diretório "
+"[.filename]#/usr/local/etc/rc.d#. Portanto, após a instalação dos pacotes "
+"necessários, eles precisam ser configurados para iniciar imediatamente. Para "
+"fazer isso, os arquivos de configuração necessários devem ser instalados nos "
+"diretórios corretos. Isso pode ser feito escrevendo rotinas dedicadas ou "
+"utilizando a rotina genérica `cust_install_files` para organizar os arquivos "
+"corretamente a partir do diretório [.filename]#/usr/src/tools/tools/nanobsd/"
+"Files#. Geralmente, também é necessário adicionar uma ou várias declarações "
+"no arquivo [.filename]#/etc/rc.conf# para cada pacote."
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:326
+#, no-wrap
+msgid "Configuration File Example"
+msgstr "Exemplo do arquivo de configuração"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:329
+msgid ""
+"A complete example of a configuration file for building a custom NanoBSD "
+"image can be:"
+msgstr ""
+"Um exemplo completo de um arquivo de configuração para construir uma imagem "
+"personalizada do NanoBSD pode ser:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:336
+#, no-wrap
+msgid ""
+"NANO_NAME=custom\n"
+"NANO_SRC=/usr/src\n"
+"NANO_KERNEL=MYKERNEL\n"
+"NANO_IMAGES=2\n"
+msgstr ""
+"NANO_NAME=custom\n"
+"NANO_SRC=/usr/src\n"
+"NANO_KERNEL=MYKERNEL\n"
+"NANO_IMAGES=2\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:342
+#, no-wrap
+msgid ""
+"CONF_BUILD='\n"
+"WITHOUT_KLDLOAD=YES\n"
+"WITHOUT_NETGRAPH=YES\n"
+"WITHOUT_PAM=YES\n"
+"'\n"
+msgstr ""
+"CONF_BUILD='\n"
+"WITHOUT_KLDLOAD=YES\n"
+"WITHOUT_NETGRAPH=YES\n"
+"WITHOUT_PAM=YES\n"
+"'\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:358
+#, no-wrap
+msgid ""
+"CONF_INSTALL='\n"
+"WITHOUT_ACPI=YES\n"
+"WITHOUT_BLUETOOTH=YES\n"
+"WITHOUT_FORTRAN=YES\n"
+"WITHOUT_HTML=YES\n"
+"WITHOUT_LPR=YES\n"
+"WITHOUT_MAN=YES\n"
+"WITHOUT_SENDMAIL=YES\n"
+"WITHOUT_SHAREDOCS=YES\n"
+"WITHOUT_EXAMPLES=YES\n"
+"WITHOUT_INSTALLLIB=YES\n"
+"WITHOUT_CALENDAR=YES\n"
+"WITHOUT_MISC=YES\n"
+"WITHOUT_SHARE=YES\n"
+"'\n"
+msgstr ""
+"CONF_INSTALL='\n"
+"WITHOUT_ACPI=YES\n"
+"WITHOUT_BLUETOOTH=YES\n"
+"WITHOUT_FORTRAN=YES\n"
+"WITHOUT_HTML=YES\n"
+"WITHOUT_LPR=YES\n"
+"WITHOUT_MAN=YES\n"
+"WITHOUT_SENDMAIL=YES\n"
+"WITHOUT_SHAREDOCS=YES\n"
+"WITHOUT_EXAMPLES=YES\n"
+"WITHOUT_INSTALLLIB=YES\n"
+"WITHOUT_CALENDAR=YES\n"
+"WITHOUT_MISC=YES\n"
+"WITHOUT_SHARE=YES\n"
+"'\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:369
+#, no-wrap
+msgid ""
+"CONF_WORLD='\n"
+"WITHOUT_BIND=YES\n"
+"WITHOUT_MODULES=YES\n"
+"WITHOUT_KERBEROS=YES\n"
+"WITHOUT_GAMES=YES\n"
+"WITHOUT_RESCUE=YES\n"
+"WITHOUT_LOCALES=YES\n"
+"WITHOUT_SYSCONS=YES\n"
+"WITHOUT_INFO=YES\n"
+"'\n"
+msgstr ""
+"CONF_WORLD='\n"
+"WITHOUT_BIND=YES\n"
+"WITHOUT_MODULES=YES\n"
+"WITHOUT_KERBEROS=YES\n"
+"WITHOUT_GAMES=YES\n"
+"WITHOUT_RESCUE=YES\n"
+"WITHOUT_LOCALES=YES\n"
+"WITHOUT_SYSCONS=YES\n"
+"WITHOUT_INFO=YES\n"
+"'\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:371
+#, no-wrap
+msgid "FlashDevice SanDisk 1G\n"
+msgstr "FlashDevice SanDisk 1G\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:376
+#, no-wrap
+msgid ""
+"cust_nobeastie() (\n"
+"\ttouch ${NANO_WORLDDIR}/boot/loader.conf\n"
+"\techo \"beastie_disable=\\\"YES\\\"\" >> ${NANO_WORLDDIR}/boot/loader.conf\n"
+")\n"
+msgstr ""
+"cust_nobeastie() (\n"
+"\ttouch ${NANO_WORLDDIR}/boot/loader.conf\n"
+"\techo \"beastie_disable=\\\"YES\\\"\" >> ${NANO_WORLDDIR}/boot/loader.conf\n"
+")\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:381
+#, no-wrap
+msgid ""
+"customize_cmd cust_comconsole\n"
+"customize_cmd cust_install_files\n"
+"customize_cmd cust_allow_ssh_root\n"
+"customize_cmd cust_nobeastie\n"
+msgstr ""
+"customize_cmd cust_comconsole\n"
+"customize_cmd cust_install_files\n"
+"customize_cmd cust_allow_ssh_root\n"
+"customize_cmd cust_nobeastie\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:385
+msgid ""
+"All the build and install compilation options can be found in the man:src."
+"conf[5] man page, but not all options can or should be used when building a "
+"NanoBSD image. The build and install options should be defined according to "
+"the needs of the image being built."
+msgstr ""
+"Todas as opções de compilação e instalação podem ser encontradas na página "
+"do manual man:src.conf[5], mas nem todas as opções podem ou devem ser usadas "
+"ao construir uma imagem do NanoBSD. As opções de compilação e instalação "
+"devem ser definidas de acordo com as necessidades da imagem sendo construída."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:389
+msgid ""
+"For example, the ftp client and server might not be needed. Adding "
+"`WITHOUT_FTP=TRUE` to a configuration file in the `CONF_BUILD` section will "
+"avoid having them built. Also, if the NanoBSD appliance will not be used to "
+"build programs then it is possible to add the `WITHOUT_BINUTILS=TRUE` in the "
+"`CONF_INSTALL` section; but not in the `CONF_BUILD` section as they will be "
+"used to build the NanoBSD image."
+msgstr ""
+"Por exemplo, o cliente e servidor FTP podem não ser necessários. Adicionar "
+"`WITHOUT_FTP=TRUE` em um arquivo de configuração na seção `CONF_BUILD` "
+"evitará que eles sejam compilados. Além disso, se o aparelho NanoBSD não "
+"será usado para compilar programas, é possível adicionar "
+"`WITHOUT_BINUTILS=TRUE` na seção `CONF_INSTALL`; mas não na seção "
+"`CONF_BUILD`, pois eles serão usados para construir a imagem do NanoBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:391
+msgid ""
+"Not building a particular set of programs - through a compilation option - "
+"shortens the overall building time and lowers the required size for the disk "
+"image, whereas not installing the same specific set of programs does not "
+"lower the overall building time."
+msgstr ""
+"Não compilar um conjunto específico de programas - por meio de uma opção de "
+"compilação - reduz o tempo total de compilação e diminui o tamanho "
+"necessário para a imagem do disco, enquanto não instalar o mesmo conjunto "
+"específico de programas não reduz o tempo total de compilação."
+
+#. type: Title ===
+#: documentation/content/en/articles/nanobsd/_index.adoc:392
+#, no-wrap
+msgid "Updating NanoBSD"
+msgstr "Atualizando o NanoBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:395
+msgid "The update process of NanoBSD is relatively simple:"
+msgstr "O processo de atualização do NanoBSD é relativamente simples:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:399
+msgid "Build a new NanoBSD image, as usual."
+msgstr "Construa uma nova imagem do NanoBSD, como de costume."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:400
+msgid ""
+"Upload the new image into an unused partition of a running NanoBSD appliance."
+msgstr ""
+"Faça o upload da nova imagem para uma partição não utilizada de um aparelho "
+"NanoBSD em execução."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:402
+msgid ""
+"The most important difference of this step from the initial NanoBSD "
+"installation is that now instead of using [.filename]#\\_.disk.full# (which "
+"contains an image of the entire disk), the [.filename]#_.disk.image# image "
+"is installed (which contains an image of a single system partition)."
+msgstr ""
+"A diferença mais importante deste passo em relação à instalação inicial do "
+"NanoBSD é que, em vez de usar o arquivo [.filename]#\\_.disk.full# (que "
+"contém uma imagem do disco inteiro), é instalada a imagem [.filename]#_.disk."
+"image# (que contém uma imagem de uma única partição do sistema)."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:403
+msgid "Reboot, and start the system from the newly installed partition."
+msgstr "Reinicie e inicie o sistema a partir da partição recém-instalada."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:404
+msgid "If all goes well, the upgrade is finished."
+msgstr "Se tudo correr bem, a atualização está concluída."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:405
+msgid ""
+"If anything goes wrong, reboot back into the previous partition (which "
+"contains the old, working image), to restore system functionality as fast as "
+"possible. Fix any problems of the new build, and repeat the process."
+msgstr ""
+"Se algo der errado, reinicie a partição anterior (que contém a imagem antiga "
+"que estava em funcionamento) para restaurar a funcionalidade do sistema o "
+"mais rápido possível. Corrija quaisquer problemas da nova compilação e "
+"repita o processo."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:408
+msgid ""
+"To install new image onto the running NanoBSD system, it is possible to use "
+"either the [.filename]#updatep1# or [.filename]#updatep2# script located in "
+"the [.filename]#/root# directory, depending from which partition is running "
+"the current system."
+msgstr ""
+"Para instalar uma nova imagem em um sistema NanoBSD em execução, é possível "
+"usar o script [.filename]#updatep1# ou [.filename]#updatep2#, localizados no "
+"diretório [.filename]#/root#, dependendo de qual partição o sistema atual "
+"está sendo executado."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:410
+msgid ""
+"According to which services are available on host serving new NanoBSD image "
+"and what type of transfer is preferred, it is possible to examine one of "
+"these three ways:"
+msgstr ""
+"Dependendo dos serviços disponíveis no host que está servindo a nova imagem "
+"do NanoBSD e do tipo de transferência preferido, é possível examinar uma "
+"dessas três opções:"
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:411
+#, no-wrap
+msgid "Using man:ftp[1]"
+msgstr "Usando o comando man:ftp[1]"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:414
+msgid "If the transfer speed is in first place, use this example:"
+msgstr ""
+"Se a velocidade de transferência estiver em primeiro lugar, use este exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:419
+#, no-wrap
+msgid ""
+"# ftp myhost\n"
+"get _.disk.image \"| sh updatep1\"\n"
+msgstr ""
+"# ftp myhost\n"
+"get _.disk.image \"| sh updatep1\"\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:421
+#, no-wrap
+msgid "Using man:ssh[1]"
+msgstr "Usando o comando man:ssh[1]"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:424
+msgid "If a secure transfer is preferred, consider using this example:"
+msgstr ""
+"Se uma transferência segura for preferida, considere usar este exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:428
+#, no-wrap
+msgid "# ssh myhost cat _.disk.image.gz | zcat | sh updatep1\n"
+msgstr "# ssh myhost cat _.disk.image.gz | zcat | sh updatep1\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:430
+#, no-wrap
+msgid "Using man:nc[1]"
+msgstr "Usando o comando man:nc[1]"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:433
+msgid ""
+"Try this example if the remote host is not running neither man:ftpd[8] or "
+"man:sshd[8] service:"
+msgstr ""
+"Experimente este exemplo se o host remoto não estiver executando os serviços "
+"man:ftpd[8] ou man:sshd[8]:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:437
+msgid ""
+"At first, open a TCP listener on host serving the image and make it send the "
+"image to client:"
+msgstr ""
+"Primeiramente, abra um socket TCP em modo escuta no host que serve a imagem "
+"e envie a imagem para o cliente:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:441
+#, no-wrap
+msgid "myhost# nc -l 2222 < _.disk.image\n"
+msgstr "myhost# nc -l 2222 < _.disk.image\n"
+
+#. type: delimited block = 6
+#: documentation/content/en/articles/nanobsd/_index.adoc:446
+msgid ""
+"Make sure that the used port is not blocked to receive incoming connections "
+"from NanoBSD host by firewall."
+msgstr ""
+"Verifique se a porta utilizada não está bloqueada pelo firewall para receber "
+"conexões originadas do host NanoBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:448
+msgid ""
+"Connect to the host serving new image and execute [.filename]#updatep1# "
+"script:"
+msgstr ""
+"Conecte-se ao host que está servindo a nova imagem e execute o script [."
+"filename]#updatep1#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:452
+#, no-wrap
+msgid "# nc myhost 2222 | sh updatep1\n"
+msgstr "# nc myhost 2222 | sh updatep1\n"
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/new-users/_index.adoc b/documentation/content/pt-br/articles/new-users/_index.adoc
index 86c790143d..7c43238448 100644
--- a/documentation/content/pt-br/articles/new-users/_index.adoc
+++ b/documentation/content/pt-br/articles/new-users/_index.adoc
@@ -1,12 +1,15 @@
---
-title: Aos iniciantes em FreeBSD e UNIX
authors:
- - author: Annelise Anderson
+ -
+ author: 'Annelise Anderson'
email: andrsn@andrsn.stanford.edu
+description: 'Introdução para iniciantes tanto no FreeBSD quanto no UNIX®'
+tags: ["Introduction", "basics", "FreeBSD", "UNIX"]
+title: 'Para iniciantes tanto no FreeBSD quanto no UNIX®'
trademarks: ["freebsd", "ibm", "microsoft", "opengroup", "general"]
---
-= Aos iniciantes em FreeBSD e UNIX
+= Para iniciantes tanto no FreeBSD quanto no UNIX®
:doctype: article
:toc: macro
:toclevels: 1
@@ -40,7 +43,7 @@ endif::[]
[.abstract-title]
Resumo
-Parabéns por instalar o FreeBSD! Esta introdução é para iniciantes em FreeBSD _e_ UNIX(R)-então vamos começar do básico.
+Parabéns por instalar o FreeBSD! Esta introdução é destinada a usuários iniciantes tanto no FreeBSD quanto no UNIX(R) - então ela começa com o básico.
'''
@@ -49,169 +52,169 @@ toc::[]
[[in-and-out]]
== Logando e Deslogando
-Entre com o usuário que você criou na instalação (quando você visualizar o prompt `login:`) ou como `root`. (Sua instalação do FreeBSD já terá uma conta para o `root`; esse usuário pode ir a qualquer lugar e fazer qualquer coisa, incluindo deletar arquivos essenciais do sistema, então tenha cuidado!) Os símbolos `%` e `#` no prompt (o seu pode ser diferente) indicam o tipo do usuário logado, o símbolo `%` indica um usuário comum e `#` indica que o usuário é `root`.
+Faça login (quando você ver `login:`) com o usuário que você criou durante a instalação ou como `root`. (Sua instalação do FreeBSD já terá uma conta para o usuário `root`, o qual pode ir a qualquer lugar e fazer qualquer coisa, incluindo excluir arquivos essenciais, então tenha cuidado!) Os símbolos % e # abaixo representam o prompt (o seu pode ser diferente), sendo que o % indica um usuário comum e o # indica o usuário `root`.
-Para se sair (e obter um novo `login:`), digite
+Para sair (e obter um novo prompt `login:`), digite
-[source,shell]
+[source, shell]
....
# exit
....
-quantas vezes forem necessárias. Pressione kbd:[enter] após digitar os comandos, e lembre-se que o UNIX(R) diferencia letras maiúsculas de minúsculas, então, digite `exit`, e não `EXIT`.
+quantas vezes for necessário. Sim, pressione kbd:[enter] após os comandos e lembre-se de que o UNIX(R) é sensível a maiúsculas e minúsculas - use ``exit``, não EXIT.
Para desligar o computador, digite
-[source,shell]
+[source, shell]
....
# /sbin/shutdown -h now
....
Ou para reiniciar, digite
-[source,shell]
+[source, shell]
....
# /sbin/shutdown -r now
....
ou
-[source,shell]
+[source, shell]
....
# /sbin/reboot
....
-Você também pode reiniciar com kbd:[Ctrl+Alt+Delete]. Aguarde um instante para a conclusão do processo. Esta sequência de teclas é equivalente ao `/sbin/reboot` nas versões recentes do FreeBSD, e claro, este procedimento é muito, mas muito melhor do que simplesmente pressionar o botão reset do seu computador. Você não quer ter que reinstalar o sistema, não é mesmo?
+Você também pode reiniciar o sistema com kbd:[Ctrl+Alt+Delete]. Dê um pouco de tempo para que o sistema execute suas tarefas. Isso é equivalente a `/sbin/reboot` nas versões recentes do FreeBSD e é muito, muito melhor do que pressionar o botão de reset. Você não quer ter que reinstalar tudo, certo?
[[adding-a-user]]
-== Adicionando um usuário com privilégios de Root
+== Adicionando um Usuário com Privilégios de Root
-Se você não criou um usuário quando instalou o sistema operacional e está logado como `root`, você provavelmente deve criar um usuário com
+Se você não criou nenhum usuário durante a instalação do sistema e, portanto, está conectado como `root`, é provável que você queira criar um usuário agora com o seguinte comando
-[source,shell]
+[source, shell]
....
# adduser
....
-A primeira vez que você usar o comando `adduser`, ele poderá solicitar alguns padrões para salvar. Você pode querer tornar o man:csh[1] no shell padrão ao invés do man:sh[1], se for sugerido o `sh` como padrão. Caso contrário, basta pressionar enter para aceitar cada padrão. Esses padrões são salvos em [.filename]#/etc/adduser.conf#, um arquivo editável.
+A primeira vez que você usa o comando `adduser`, ele pode solicitar algumas opções padrão para salvar. Você pode querer definir o shell padrão como man:csh[1] em vez de man:sh[1], se ele sugerir `sh` como padrão. Caso contrário, basta pressionar Enter para aceitar cada opção padrão. Essas opções padrão são salvas em [.filename]#/etc/adduser.conf#, um arquivo que pode ser editado.
-Suponha que você crie um usuário `jack`, o qual possui _Jack Benimble_ como nome completo. Dê a `jack` uma senha se a segurança (até mesmo crianças ao redor que podem esbarrar no teclado) for um problema. Quando perguntarem se você deseja convidar `jack` para outros grupos, digite `wheel`
+Suponha que você crie um usuário chamado `jack` com o nome completo _Jack Benimble_. Defina uma senha para `jack` se a segurança for uma preocupação (mesmo que sejam apenas crianças por perto que possam bater no teclado). Quando o comando `adduser` perguntar se você deseja convidar `jack` para outros grupos, digite `wheel`
-[source,shell]
+[source, shell]
....
-O grupo de login é "jack". Convide o jack para outros grupos: wheel
+Login group is "jack". Invite jack into other groups: wheel
....
-Isso tornará possível efetuar login como `jack` e usar o comando man:su[1] para tornar-se `root`. Dessa forma, você não será mais repreendido por fazer login como `root`.
+Isso tornará possível fazer login como `jack` e usar o comando man:su[1] para se tornar `root`. Então, você não receberá mais repreensões por fazer login como `root`.
-Você pode sair do `adduser` a qualquer momento digitando kbd:[Ctrl+C], e no final você terá a chance de aprovar seu novo usuário ou simplesmente digitar kbd:[n] para não criá-lo. Você pode querer criar um segundo novo usuário para que ao editar os arquivos de login do `jack`, você tenha um login de reserva caso algo dê errado.
+Você pode interromper o comando `adduser` a qualquer momento digitando kbd:[Ctrl+C], e no final você terá a chance de aprovar o novo usuário ou simplesmente digitar kbd:[n] para não aprovar. Você pode querer criar um segundo usuário para que, ao editar os arquivos de login de `jack`, você tenha um usuário reserva caso algo dê errado.
-Depois de fazer isso, use `exit` para voltar a um prompt de login e efetuar login como `jack`. Em geral, é uma boa ideia fazer o máximo possível de trabalho como um usuário comum que não tenha o poder --e o risco-- do usuário `root`.
+Depois de ter feito isso, use o comando `exit` para voltar ao prompt de login e faça login como `jack`. Em geral, é uma boa ideia fazer o máximo de trabalho possível como um usuário comum que não possui o poder - e o risco - de `root`.
-Se você já criou um usuário e deseja que o usuário seja capaz de executar o comando `su` para logar-se como `root`, é possível efetuar login como `root` e editar o arquivo [.filename]#/etc/group#, adicionando `jack` à primeira linha (no grupo `wheel`). Mas primeiro você precisa praticar com o man:vi[1], o editor de texto - ou usar um editor de texto mais simples, como por exemplo, o man:ee[1], instalado em versões recentes do FreeBSD.
+Se você já criou um usuário e deseja que o usuário possa fazer `su` para `root`, faça login como `root` e edite o arquivo [.filename]#/etc/group#, adicionando `jack` à primeira linha (o grupo `wheel`). Mas primeiro, você precisa praticar o uso do editor de texto man:vi[1], ou usar um editor de texto mais simples, o man:ee[1], instalado em versões recentes do FreeBSD.
Para excluir um usuário, use o comando `rmuser`.
[[looking-around]]
-== Explorando
+== Explorando o Sistema
-Logado como um usuário comum, explore e experimente alguns comandos que acessarão as fontes de ajuda e informações dentro do FreeBSD.
+Conectado como um usuário comum, explore e experimente alguns comandos que acessarão as fontes de ajuda e informações dentro do FreeBSD.
-Aqui estão descritos alguns comandos e o que eles fazem:
+Aqui estão alguns comandos e o que eles fazem:
`id`::
-Diz a você quem você é!
+Diz quem você é!
`pwd`::
-Mostra onde você está--quanto ao diretório atual de trabalho.
+Exibe o diretório de trabalho atual.
`ls`::
Lista os arquivos presentes no diretório atual.
`ls -F`::
-Lista os arquivos do diretório atual com um `*` depois dos executáveis, um `/` depois dos diretórios, e um `@` depois de links simbólicos.
+Lista os arquivos no diretório atual com um * após os arquivos executáveis, uma `/` após os diretórios e um `@` após os links simbólicos.
`ls -l`::
-Lista os arquivos em formatos estendidos--tamanho, data, permissões.
+Lista os arquivos no diretório atual em formato longo, mostrando informações como tamanho, data e hora de modificação, permissões de arquivo e proprietário/grupo.
`ls -a`::
-Lista arquivos "dot" junto com os outros. Se você é `root`, os arquivos com nome iniciando por um "ponto" serão mostradas sem a opção `-a`.
+Lista todos os arquivos no diretório atual, incluindo arquivos ocultos (com ponto no início do nome). Se você estiver logado como `root`, os arquivos ocultos serão listados sem a necessidade do uso do parâmetro `-a`.
`cd`::
-Altera o diretório atual de trabalho. `cd ..` te leva ao diretório antecessor do atual; note o espaço depois de `cd`. `cd /usr/local` te leva a esse mesmo diretório. `cd ~` te leva ao diretório home do usuário que você está logado--exemplo: [.filename]#/usr/home/jack#. Tente `cd /cdrom`, e depois `ls`, para saber se o CDROM está montado e funcionando.
+O comando `cd` é usado para mudar de diretório. `cd ..` volta um nível; observe o espaço após o `cd`. `cd /usr/local` navega até esse diretório. `cd ~` navega até o diretório home do usuário logado, por exemplo, [.filename]#/usr/home/jack#. Experimente o comando `cd /cdrom`, e em seguida `ls`, para descobrir se o seu CDROM está montado e funcionando.
`less _filename_`::
-Te permite ver um arquivo (chamado _filename_) sem alterá-lo. Tente `less /etc/fstab`. Digite `q` para sair.
+Permite visualizar o conteúdo de um arquivo (chamado _filename_) sem modificá-lo. Experimente o comando `less /etc/fstab`. Digite `q` para sair do modo de visualização.
`cat _filename_`::
-Exibe o conteúdo do arquivo _filename_ na tela. Se o conteúdo for longo a ponto de que você consiga ler apenas o final, pressione kbd:[ScrollLock] e use kbd:[up-arrow] para retroceder; você pode usar kbd:[ScrollLock] em páginas de manual também. Pressione kbd:[ScrollLock] novamente para parar de rolar. Você também pode querer experimentar `cat` em alguns arquivos com nomes iniciados por ponto em seu diretório home -- `cat .cshrc`, `cat .login`, `cat .profile`.
+Exibe o conteúdo do arquivo _filename_ na tela. Se o arquivo for muito longo e você conseguir visualizar apenas o final, pressione kbd:[ScrollLock] e use a tecla de seta para cima (kbd:[up-arrow]) para rolar para trás. Você também pode usar kbd:[ScrollLock] com páginas de manual (man pages). Pressione kbd:[ScrollLock] novamente para sair do modo de rolagem. Você pode experimentar o comando `cat` em alguns dos arquivos ocultos em seu diretório home, por exemplo: `cat .cshrc`, `cat .login`, `cat .profile`.
-Você notará os aliases em [.filename]#.cshrc# para alguns dos comandos `ls`. (Eles são muito convenientes). Você pode criar aliases ao editar [.filename]#.cshrc#. Você pode disponibilizar esses aliases para todos os usuários do sistema, colocando-os no arquivo de configuração global do `csh` localizado em [.filename]#/etc/csh.cshrc#.
+Você notará que existem aliases no arquivo [.filename]#.cshrc# para alguns dos comandos `ls` (eles são muito convenientes). Você pode criar outros aliases editando o arquivo [.filename]#.cshrc#. Você pode tornar esses aliases disponíveis para todos os usuários do sistema colocando-os no arquivo de configuração global do `csh`, o [.filename]#/etc/csh.cshrc#.
[[getting-help]]
== Obtendo ajuda e informações
-Aqui estão algumas fontes úteis de ajuda. A palavra _Texto_ deve ser substituída por algo de sua escolha--geralmente um comando ou nome de arquivo.
+Aqui estão algumas fontes úteis de ajuda. O termo _Text_ significa algo de sua escolha que você digita, geralmente um comando ou nome de arquivo.
-`apropos _texto_`::
-Tudo que contém a palavra _texto_ no `whatis database`.
+`apropos _text_`::
+Irá retornar todos os comandos e arquivos que contenham a palavra-chave especificada _text_ no `banco de dados whatis`.
-`man _texto_`::
-Exibe a página de manual referente ao _texto_. A principal fonte de documentação para os sistemas UNIX(R). O comando `man ls` lhe dirá todas as maneiras de usar o comando `ls`. Pressione kbd:[Enter] para percorrer o texo, kbd:[Ctrl+B] para voltar a página anterior, kbd:[Ctrl+F] para avançar, kbd:[q] ou kbd:[Ctrl+C] para sair.
+`man _text_`::
+A página de manual para _text_. A principal fonte de documentação para sistemas UNIX(R). `man ls` lhe dirá todas as maneiras de usar o comando`ls`. Pressione kbd:[Enter] para mover pelo texto, kbd:[Ctrl+B] para voltar uma página, kbd:[Ctrl+F] para avançar, kbd:[q] ou kbd:[Ctrl+C] para sair .
-`which _texto_`::
-Te informa em qual local no path do usuário o comando _texto_ é encontrado.
+`which _text_`::
+Mostra o caminho completo para o executável do comando _text_ especificado.
-`locate _texto_`::
-Todos os paths nos quais a string _texto_ é encontrada.
+`locate _text_`::
+Todos os caminhos onde a string _text_ é encontrada.
-`whatis _texto_`::
-Te informa o que o comando _texto_ faz e sua página de manual. Digitando `whatis *` a saída do comando te informará sobre todos os binários no diretório atual.
+`whatis _text_`::
+Informa o que o comando _text_ faz e sua página de manual. Digitando `whatis *` irá falar sobre todos os binários no diretório atual.
-`whereis _texto_`::
-Encontra o arquivo _texto_, te informando seu path completo.
+`whereis _text_`::
+Localiza o arquivo _text_, fornecendo seu caminho completo.
-Você pode experimentar usar `whatis` em alguns comandos utéis e comuns como `cat`, `more`, `grep`, `mv`, `find`, `tar`, `chmod`, `chown`, `date`, e `script`. `more` te permite ler uma página por vez como no DOS, exemplo: `ls -l | more` ou `more _filename_`. O símbolo * funciona como um caractere curinga--exemplo: `ls w*` mostrará os arquivos que começam com `w`.
+Você pode tentar usar `whatis` em alguns comandos úteis comuns como `cat`, `more`, `grep`, `mv`, `find`, `tar`, `chmod`, `chown`, `date` , e `script`. `more` permite que você leia uma página por vez como no DOS, por exemplo, `ls -l | more` ou `more _filename_`. O * funciona como um curinga, por exemplo, `ls w*` mostrará os arquivos que começam com `w`.
-Alguns deles não estão funcionado muito bem? Ambos man:locate[1] e man:whatis[1] dependem de um banco de dados que é reconstruído semanalmente. Se a sua máquina não for ficar ligada nos fins de semana (e rodando FreeBSD), você pode executar os comandos a seguir para que ela execute manutenções diárias, semanais, mensais ou apenas de vez em quando. Execute-os como `root` e dê a cada comando o tempo necessário para ser finalizado antes de executar o próximo.
+Alguns deles não estão funcionando muito bem? Ambos man:locate[1] e man:whatis[1] dependem de um banco de dados que é reconstruído semanalmente. Se sua máquina não vai ficar ligada no fim de semana (e rodando o FreeBSD), você pode querer executar os comandos para manutenção diária, semanal e mensal de vez em quando. Execute-os como `root` e, por enquanto, dê a cada um tempo para terminar antes de iniciar o próximo.
-[source,shell]
+[source, shell]
....
# periodic daily
-output omitted
+saída omitida
# periodic weekly
-output omitted
+saída omitida
# periodic monthly
-output omitted
+saída omitida
....
-Se você se cansar de esperar, pressione kbd:[Alt+F2] para obter outro _console virtual_, e efetue seu login novamente. Afinal, é um sistema multi-usuário e multitarefa. No entanto, esses comandos provavelmente irão piscar mensagens na tela enquanto eles estiverem em execução; você pode digitar `clear` no prompt para limpar a tela. Uma vez executados, você pode querer olhar o conteúdo do [.filename]#/var/mail/root# e do [.filename]#/var/log/messages#.
+Se você cansar de esperar, pressione kbd:[Alt+F2] para obter outro _virtual console_ e faça login novamente. Afinal, é um sistema multiusuário e multitarefa. No entanto, esses comandos provavelmente exibirão mensagens em sua tela enquanto estiverem sendo executados; você pode digitar `clear` no prompt para limpar a tela. Uma vez executados, você pode querer olhar para [.filename]#/var/mail/root# e [.filename]#/var/log/messages#.
-A execução de tais comandos faz parte da administração do sistema--e como usuário único de um sistema UNIX(R), você é seu próprio administrador de rede. Praticamente tudo o que você precisa para ser `root` é administrar o sistema. Tais responsabilidades não são abordadas nem mesmo naqueles livros gigantescos de UNIX(R), os quais parecem dedicar muito espaço para menus e gerenciadores de janelas. Você pode querer obter um dos dois principais livros sobre administração de sistemas, pode ser o Evi Nemeth et.al.'s UNIX System Administration Handbook (Prentice-Hall, 1995, ISBN 0-13-15051-7)--a segunda edição com a capa vermelha; ou o livro Æleen Frisch's Essential System Administration (O'Reilly & Associates, 2002, ISBN 0-596-00343-9). Eu usei Nemeth.
+Executar esses comandos faz parte da administração do sistema - e como único usuário de um sistema UNIX(R), você é seu próprio administrador de sistema. Praticamente tudo o que você precisa fazer como `root` é administração do sistema. Essas responsabilidades não são bem cobertas, mesmo nos grandes e grossos livros sobre UNIX(R), que parecem dedicar muito espaço a abrir menus em gerenciadores de janelas. Se você deseja aprofundar seus conhecimentos em administração de sistemas, pode ser útil obter um dos dois principais livros sobre o assunto. Os dois livros recomendados são "UNIX System Administration Handbook" de Evi Nemeth et al. (Prentice-Hall, 1995, ISBN 0-13-15051-7) - a segunda edição com a capa vermelha; ou "Essential System Administration" de Æleen Frisch (O'Reilly & Associates, 2002, ISBN 0-596-00343-9). Ambos os livros são excelentes recursos para administradores de sistemas e fornecem informações detalhadas sobre administração de sistemas UNIX(R). Eu usei o livro da Nemeth.
[[editing-text]]
== Editando textos
-Para configurar o seu sistema, você precisará editar arquivos de texto. A maioria deles estará no diretório [.filename]#/etc#; e você precisará utilizar o comando `su` para acessar o usuário `root` do sistema e assim poder alterá-los. Você pode utilizar um editor de texto simples, como o `ee`, mas a longo prazo, é recomendado aprender a utilizar o editor de texto `vi`. Existe um excelente tutorial do editor de texto vi disponível em [.filename]#/usr/src/contrib/nvi/docs/tutorial#, se você tiver o código fonte do sistema instalado.
+Para configurar o sistema, você precisa editar arquivos de texto. A maioria deles estará no diretório [.filename]#/etc#, e você precisará usar o comando `su` para se tornar `root` e poder alterá-los. Você pode usar o editor de texto `ee` para edição mais simples, mas a longo prazo, vale a pena aprender o editor de texto `vi`. Há um excelente tutorial sobre o vi em [.filename]#/usr/src/contrib/nvi/docs/tutorial#, se você tiver as fontes do sistema instaladas.
-Antes de editar um arquivo, é recomendado criar um backup do mesmo. Suponha que você queira editar o [.filename]#/etc/rc.conf#. Você poderia usar apenas `cd /etc` para acessar o diretório [.filename]#/etc# e usar o seguinte comando:
+Antes de editar um arquivo, é recomendável fazer backup dele. Suponha que você deseje editar o arquivo [.filename]#/etc/rc.conf#. Você pode simplesmente usar o comando `cd /etc` para ir para o diretório [.filename]#/etc# e executar o seguinte comando:
-[source,shell]
+[source, shell]
....
# cp rc.conf rc.conf.orig
....
-Isso iria copiar [.filename]#rc.conf# para [.filename]#rc.conf.orig#, e após isso você poderia copiar [.filename]#rc.conf.orig# para [.filename]#rc.conf# para recuperar o original. Mas melhor ainda seria mover (renomear) e depois copiar de volta:
+Isso copiaria o arquivo [.filename]#rc.conf# para [.filename]#rc.conf.orig#, e posteriormente você poderia copiar [.filename]#rc.conf.orig# de volta para [.filename]#rc.conf# para recuperar o original. Mas uma opção ainda melhor seria mover (renomear) e depois copiar de volta:
-[source,shell]
+[source, shell]
....
# mv rc.conf rc.conf.orig
# cp rc.conf.orig rc.conf
....
-porque o comando `mv` preserva a data original e o proprietário do arquivo. Agora você pode editar o [.filename]#rc.conf#. Se você quiser o original de volta, você deve então executar `mv rc.conf rc.conf.myedit` (considerando que você quer preservar sua versão editada) e então
+porque o comando `mv` preserva a data e o proprietário original do arquivo. Agora você pode editar o arquivo [.filename]#rc.conf#. Se quiser recuperar o original, você pode executar o comando `mv rc.conf rc.conf.myedit` (assumindo que você deseja preservar a versão editada) e depois executar o seguinte comando
-[source,shell]
+[source, shell]
....
# mv rc.conf.orig rc.conf
....
@@ -220,18 +223,18 @@ para colocar as coisas de volta da maneira que estavam.
Para editar um arquivo, digite
-[source,shell]
+[source, shell]
....
# vi filename
....
-Movimente-se através do texto com as teclas direcionais. kbd:[Esc] (a tecla de escape) coloca o editor `vi` em modo de comando. Aqui estão alguns comandos:
+Para mover-se pelo texto, use as teclas de seta. Pressione kbd:[Esc] (a tecla de escape) para entrar no modo de comando do `vi`. Aqui estão alguns comandos:
`x`::
deleta a letra localizada onde o cursor está
`dd`::
-Apaga a linha inteira (mesmo se ela não estiver por inteiro aparecendo na tela)
+Apaga a linha inteira (mesmo se ela estiver aparecendo quebrada na tela em varias linhas)
`i`::
Insere um texto na posição do cursor
@@ -239,10 +242,10 @@ Insere um texto na posição do cursor
`a`::
Insere um texto após a posição do cursor
-Uma vez que você digitou `i` ou `a`, você pode entrar com o texto. Se você pressionar `Esc` você colocará novamente o editor em modo de comando, e lá será onde você irá digitar
+Depois de digitar `i` ou `a`, você pode inserir texto. `Esc` coloca você de volta no modo de comando onde você pode digitar
`:w`::
-para escrever suas alterações no disco e continuar editando
+para gravar suas alterações no disco e continuar editando
`:wq`::
para gravar e sair
@@ -250,24 +253,24 @@ para gravar e sair
`:q!`::
para sair do arquivo sem salvar as alterações
-`/_texto_`::
-para mover o cursor para a primeira ocorrência da palavra _texto_; `/` kbd:[Enter] (a tecla Enter) para encontrar a próxima ocorrência da palavra _texto_.
+`/_text_`::
+para mover o cursor para _text_; `/` kbd:[Enter] (a tecla enter) para encontrar a próxima ocorrência de _text_.
`G`::
para ir para o final do arquivo
`nG`::
-para ir para a linha _n_ dentro do arquivo em edição, onde _n_ é um número
+para ir para a linha _n_ no arquivo, onde _n_ é um número
kbd:[Ctrl+L]::
-para recarregar a tela
+para redesenhar a tela
kbd:[Ctrl+b] and kbd:[Ctrl+f]::
-retrocede e avança uma tela, como fazem com `more` e `view`.
+para voltar e avançar uma tela, como fazem o `more` e o `view`.
-Pratique com o `vi` em seu diretório home criando um novo arquivo com `vi _filename_` e adicionando e excluindo texto, salvando o arquivo, e o chamando novamente. O `vi` oferece algumas surpresas porque ele realmente é muito complexo e, às vezes, você irá executar um comando que fará algo que você não espera. (Algumas pessoas realmente gostam do `vi`-- é mais poderoso que o DOS EDIT -- saiba mais sobre o comando `:r`). Use kbd:[Esc] uma ou mais vezes para ter certeza de que você está no modo de comando e prossiga dali quando ele lhe der problema, salve frequentemente com `:w`, e use `:q!` para sair e começar novamente (do seu último `:w`) quando você precisar.
+Pratique com `vi` no seu diretório pessoal, criando um novo arquivo com o comando `vi _nome_do_arquivo_ , adicionando e excluindo texto, salvando o arquivo e chamando-o novamente. O `vi` oferece algumas surpresas porque é realmente bastante complexo e às vezes você inadvertidamente emite um comando que fará algo que você não espera. (Algumas pessoas realmente gostam do `vi` - é mais poderoso que o EDIT do DOS - descubra sobre o `:r`.) Use kbd:[Esc] uma ou mais vezes para ter certeza de que está no modo de comando e prossiga a partir daí quando ele lhe der problemas, salve frequentemente com `:w` e use `:q!` para sair e começar de novo (a partir do último `:w`) quando precisar.
-Agora você pode usar o comando `cd` para ir para o [.filename]#/etc#, use o comando `su` para logar como `root`, use o `vi` para editar o arquivo [.filename]#/etc/group#, e adicione um usuário ao grupo `wheel`, assim, o usuário terá privilégios de root. Basta adicionar uma vírgula e o nome do login do usuário ao final da primeira linha do arquivo, pressione kbd:[Esc], e use `:wq` para salvar as alterações no disco e sair. Instantaneamente eficaz. (Você não colocou um espaço após a vírgula, colocou?)
+Agora você pode fazer `cd` para [.filename]#/etc#, `su` para `root`, usar `vi` para editar o arquivo [.filename]#/etc/group# e adicionar um usuário ao grupo `wheel ` para que ele tenha privilégios de root. Basta adicionar uma vírgula e o nome de login do usuário ao final da primeira linha do arquivo, pressionar kbd:[Esc] e usar `:wq` para gravar o arquivo no disco e sair. Instantaneamente eficaz. (Você não colocou um espaço após a vírgula, colocou?)
[[other-useful-commands]]
== Outros comandos úteis
@@ -276,79 +279,81 @@ Agora você pode usar o comando `cd` para ir para o [.filename]#/etc#, use o com
mostra o espaço dos sistemas de arquivos que estão montados.
`ps aux`::
-mostra os processos em execução. O `ps ax` é uma forma mais básica do comando.
+Mostra os processos em execução. ps ax é uma forma mais simplificada.
`rm _filename_`::
-deleta o arquivo _filename_.
+remove o arquivo _filename_.
`rm -R _dir_`::
-remove o diretório _dir_ e todos os subdiretórios -- use com cuidado!
+remove um diretório _dir_ e todos os subdiretórios - use com cuidado!
`ls -R`::
-lista os arquivos no diretório atual e em todos os subdiretórios; Eu usei uma variante, `ls -AFR > where.txt`, para obter uma lista de todos os arquivos no diretório [.filename]#/# e [.filename]#/usr# (separadamente) antes de encontrar melhores maneiras de encontrar arquivos.
+lista arquivos no diretório atual e todos os subdiretórios; Usei uma variante, `ls -AFR > where.txt`, para obter uma lista de todos os arquivos em [.filename]#/# e (separadamente) [.filename]#/usr# antes de encontrar maneiras melhores de encontrar arquivos.
`passwd`::
-para mudar a senha do usuário (ou a senha do usuário `root`).
+para alterar a senha do usuário (ou a senha do ``root``)
`man hier`::
-exibe as páginas do manual para o sistema de arquivos UNIX(R) e sua estrutura hierárquica.
+página de manual no sistema de arquivos UNIX(R)
-Use o comando `find` para localizar [.filename]#filename# no diretório [.filename]#/usr# e nos seus subdiretórios:
+Use o `find` para localizar o arquivo [.filename]#filename# em [.filename]#/usr# ou qualquer um de seus subdiretórios com
-[source,shell]
+[source, shell]
....
% find /usr -name "filename"
....
-Você pode usar `*` como um caractere curinga em `"_filename_"` (que deve estar entre aspas). Se você utilizar o comando `find` para procurar no [.filename]#/# em vez de [.filename]#/usr# ele procurará o(s) arquivo(s) em todos os sistemas de arquivos montados, incluindo o CDROM e a partição DOS.
+Você pode usar * como curinga em `"_filename_"` (que deve estar entre aspas). Se você disser ao `find` para procurar em [.filename]#/# ao invés de [.filename]#/usr# ele irá procurar o(s) arquivo(s) em todos os sistemas de arquivos montados, incluindo o CD-ROM e a partição DOS.
-Um excelente livro que explica os comandos e demais utilitários do UNIX(R) é o Abrahams & Larson, Unix for the Impatient (Addison-Wesley, 1996, segunda edição). Há também toneladas de informações na internet sobre o UNIX(R).
+Um livro excelente que explica os comandos e utilitários do UNIX(R) é Abrahams & Larson, Unix for the Impacient (2ª ed., Addison-Wesley, 1996). Também há muitas informações sobre o UNIX(R) na Internet.
[[next-steps]]
== Próximos Passos
-Agora você deve ter as ferramentas necessárias para explorar e editar arquivos, para que você possa colocar tudo em funcionamento. Há uma grande quantidade de informações no Handbook do FreeBSD (que provavelmente está no seu disco rígido) e no https://www.FreeBSD.org/[site oficial do FreeBSD]. Uma grande variedade de pacotes e ports estão no CD-ROM e no site. O Handbook traz mais informações sobre como usá-los (obtenha o pacote, se existir, com o comando `pkg_add /cdrom/packages/All/_packagename_`, onde _packagename_ é o nome do pacote). O CDROM possui listas de pacotes e ports com descrições breves em [.filename]#cdrom/packages/index#, [.filename]#cdrom/packages/index.txt#, e [.filename]#cdrom/ports/index#, e descrições completas em [.filename]#/cdrom/ports/\*/*/pkg/DESCR#, onde os *s representam subdiretórios de tipos de programas e nomes de programas, respectivamente.
+Você agora deve ter as ferramentas necessárias para navegar e editar arquivos, para que possa colocar tudo em funcionamento. Existe uma grande quantidade de informações no Handbook do FreeBSD (que provavelmente está no seu disco rígido) e no site do link:https://www.FreeBSD.org/[FreeBSD]. Uma ampla variedade de pacotes e ports estão no CDROM, bem como no site. O Handbook explica mais sobre como usá-los (obtenha o pacote se existir, com `pkg add _nomedopacote_`, onde nomedopacote é o nome do arquivo do pacote). O CDROM contém listas dos pacotes e ports com breves descrições em [.filename]#cdrom/packages/index#, [.filename]#cdrom/packages/index.txt#, e [.filename]#cdrom/ports/index#, e com descrições mais detalhadas em [.filename]#/cdrom/ports/\*/*/pkg/DESCR#, onde os *s representam subdiretórios de tipos de programas e nomes de programas, respectivamente.
Se você achar o handbook muito sofisticado (com isso do `lndir` e tudo mais) ao instalar os ports do CDROM, veja a seguir o que geralmente funciona:
-Encontre o port que você deseja, digamos o `kermit`. Haverá um diretório para ele no CDROM. Copie o subdiretório para [.filename]#/usr/local# (este é um bom lugar para softwares que você adicione no sistema e que devem estar disponíveis para todos os usuários) com:
+Encontre o port que você deseja, digamos o `kermit`. Haverá um diretório para ele no CDROM. Copie o subdiretório para [.filename]#/usr/local# (este é um bom lugar para softwares que você adiciona no sistema e que devem estar disponíveis para todos os usuários) com:
-[source,shell]
+[source, shell]
....
# cp -R /cdrom/ports/comm/kermit /usr/local
....
-Isto deve resultar em um subdiretório [.filename]#/usr/local/kermit# que possui todos os arquivos que o subdiretório `kermit` no CDROM possui.
+Isso deve resultar em um subdiretório [.filename]#/usr/local/kermit# que contém todos os arquivos que o subdiretório `kermit` no CD-ROM possui.
-Em seguida, crie o diretório [.filename]#/usr/ports/distfiles# se ele ainda não existir usando o comando `mkdir`. Agora verifique em [.filename]#/cdrom/ports/distfiles# um arquivo com um nome que indique o port que você deseja. Copie esse arquivo para [.filename]#/usr/ports/distfiles#; você pode pular esse passo em versões recentes, pois o FreeBSD fará isso para você. No caso do `kermit`, não existe um distfile.
+Em seguida, crie o diretório [.filename]#/usr/ports/distfiles# se ele ainda não existir usando o comando `mkdir`. Agora verifique o [.filename]#/cdrom/ports/distfiles# para localizar um arquivo com um nome que indique que é o port que você deseja. Copie esse arquivo para [.filename]#/usr/ports/distfiles#; nas versões recentes, você pode pular esta etapa, pois o FreeBSD fará isso por você. No caso de `kermit`, não há distfile.
-Em seguida, use o comando `cd` para ir para o subdiretório [.filename]#/usr/local/kermit# que contém o arquivo [.filename]#Makefile#. Digite
+Então utilize o `cd` para ir para o subdiretório [.filename]#/usr/local/kermit# que contém o arquivo [.filename]#Makefile#. E execute
-[source,shell]
+[source, shell]
....
# make all install
....
-Durante este processo, o port irá usar o FTP para obter os arquivos compactados de que precisa e que ele não encontrou no CDROM ou no [.filename]#/usr/ports/distfiles#. Se a sua rede ainda não está configurada e não havia nenhum arquivo para o port em [.filename]#/cdrom/ports/distfiles#, você terá que pegar o distfile usando outra máquina e copiá-lo manualmente para [.filename]#/usr/ports/distfiles#. Leia o [.filename]#Makefile# (com `cat` ou `more` ou `view`) para descobrir onde ir (o principal site de distribuição) para obter o arquivo e o nome dele. (Use transferências binárias de arquivos!) Em seguida volte para o diretório [.filename]#/usr/local/kermit#, encontre o diretório com [.filename]#Makefile#, e digite `make all install`.
+Durante esse processo, o port fará o download via FTP de quaisquer arquivos compactados que precise e que não foram encontrados no CDROM ou no diretório [.filename]#/usr/ports/distfiles#. Se você não tiver a rede funcionando ainda e não houver um arquivo para o port em [.filename]#/cdrom/ports/distfiles#, você precisará obter o distfile usando outra máquina e copiá-lo para [.filename]#/usr/ports/distfiles#. Leia o [.filename]#Makefile# (com `cat` ou `more` ou `view`) para descobrir onde obter o arquivo (o site de distribuição principal) e qual é o nome dele. (Use transferências de arquivo binário!) Em seguida, volte para [.filename]#/usr/local/kermit#, encontre o diretório com o [.filename]#Makefile# e execute o `make all install`.
[[your-working-environment]]
== Seu ambiente de trabalho
Seu shell é a parte mais importante do seu ambiente de trabalho. O shell é o que interpreta os comandos que você digita na linha de comando e, assim, se comunica com o restante do sistema operacional. Você também pode escrever scripts de shell, que consiste em uma série de comandos para serem executados sem intervenção.
-Dois shells vem instalados com o FreeBSD: `csh` e `sh`. `csh` é bom para trabalhos na linha de comando, mas scripts devem ser escritos com o `sh` (ou `bash`). Você pode descobrir qual shell você utiliza executando o comando `echo $SHELL`.
+Dois shells vêm instalados com o FreeBSD: `csh` e `sh`. O `csh` é bom para trabalho na linha de comando, mas os scripts devem ser escritos com `sh` (ou `bash`). Você pode descobrir qual shell você tem digitando `echo $SHELL`.
-O `csh` é bom, mas o `tcsh` faz tudo que o `csh` faz e ainda mais. Ele permite recuperar comandos com as teclas de seta e editá-los. Ele permite usar a tecla tab para completar o nome dos arquivos (o `csh` usa a tecla kbd:[Esc]), e permite alternar o diretório em que você estava por último com o comando `cd -`. E também é muito mais fácil alterar o seu prompt com o `tcsh`. Ele tornará sua vida muito mais fácil.
+O shell `csh` é bom, mas o `tcsh` faz tudo o que o `csh` faz e muito mais. Ele permite que você recupere comandos com as teclas de seta e edite-os. Ele completa os nomes dos arquivos com a tecla de tabulação (o `csh` usa kbd:[Esc]) e permite alternar para o último diretório em que você estava com `cd -`. Também é muito mais fácil alterar seu prompt com `tcsh`. Ele torna a vida muito mais fácil.
-Aqui estão os dois passos para instalar um novo shell:
+Aqui estão os três passos para instalar um novo shell:
[.procedure]
+====
. Instale o shell como um port ou um pacote, como faria com qualquer outro port ou pacote.
-. Use o comando `chsh` para alterar permanentemente seu shell para `tcsh`, ou digite `tcsh` no prompt para alterar seu shell sem precisar efetuar login novamente.
+. Use `chsh` para alterar seu shell para `tcsh` permanentemente, ou digite `tcsh` no prompt para alterar seu shell sem fazer login novamente.
+====
[NOTE]
====
-Pode ser perigoso alterar o shell do usuário `root` para outro diferente do `sh` ou `csh` nas primeiras versões do FreeBSD e também em muitas outras versões do UNIX(R); talvez você não tenha um shell funcional quando o sistema entrar em modo de single user. A solução é usar `su -m` para se tornar `root`, o que lhe dará o `tcsh` como `root`, por que o shell faz parte do ambiente. Você pode tornar isso permanente adicionando-o ao seu arquivo [.filename]#.tcshrc# como um alias, para isso, execute:
+Pode ser perigoso mudar o shell `root` para algo diferente de `sh` ou `csh` nas primeiras versões do FreeBSD e muitas outras versões do UNIX(R); você pode não ter um shell funcionando quando o sistema o coloca no modo de usuário único. A solução é usar `su -m` para se tornar `root`, o que lhe dará o `tcsh` como `root`, porque o shell faz parte do ambiente. Você pode torná-lo permanente adicionando-o ao seu arquivo [.filename]#.tcshrc# como um alias com:
[.programlisting]
....
@@ -357,26 +362,26 @@ alias su su -m
====
-Quando o `tcsh` é iniciado, ele lê os arquivos [.filename]#/etc/csh.cshrc# e [.filename]#/etc/csh.login#, assim como o `csh`. Ele também lerá o arquivo [.filename]#.login# no seu diretório home e também o arquivo [.filename]#.cshrc#, a menos que você forneça um arquivo [.filename]#.tcshrc#. Você pode fazer isso simplesmente copiando o [.filename]#.cshrc# para [.filename]#.tcshrc#.
+Quando o `tcsh` iniciar, ele lerá os arquivos [.filename]#/etc/csh.cshrc# e [.filename]#/etc/csh.login#, assim como o `csh`. Ele também lerá [.filename]#.login# em seu diretório inicial e bem como o [.filename]#.cshrc#, a menos que você forneça um [.filename]#.tcshrc#. Isso pode ser feito simplesmente copiando [.filename]#.cshrc# para [.filename]#.tcshrc#.
-Agora que você instalou o `tcsh`, você pode ajustar o seu prompt. Você pode encontrar os detalhes na página de manual do `tcsh`, mas aqui está uma linha para colocar em seu [.filename]#.tcshrc# que informará quantos comandos você digitou, qual o horário atual, e em qual diretório você está. Ele também produz um `>` se você for um usuário comum e # se você for `root`,mas o tcsh fará isso em qualquer caso:
+Agora que você instalou o `tcsh`, você pode ajustar seu prompt. Você pode encontrar os detalhes na página de manual do `tcsh`, mas aqui está uma linha para colocar no seu [.filename]#.tcshrc# que lhe dirá quantos comandos você digitou, que horas são e em qual diretório você está. Ele também produz um `>` se você for um usuário comum e um # se você for `root`, mas o tsch fará isso em qualquer caso:
set prompt = "%h %t %~ %# "
-Isso deve ir no mesmo lugar em que está a linha de prompt atual caso exista uma, ou logo abaixo de "if($?prompt) then" caso ela não exista. Comente a linha antiga; você sempre pode voltar a ela se preferir. Não esqueça os espaços e as aspas. Você pode forçar a releitura do [.filename]#.tcshrc# digitando `source .tcshrc`.
+Isso deve ir no mesmo lugar que a linha de configuração do prompt existente, se houver, ou sob "if($?prompt) then" se não. Comente a linha antiga; você sempre pode voltar para ele, se preferir. Não se esqueça dos espaços e aspas. Você pode reaplicar as opções do [.filename]#.tcshrc# digitando `source .tcshrc`.
-Você pode obter uma listagem de outras variáveis de ambiente que estão configuradas digitando `env` no prompt. O resultado mostrará seu editor padrão, pager e tipo de terminal, entre possivelmente muitas outras variáveis. Um comando útil se você efetuar o seu login a partir de um local remoto e não puder executar um programa porque o terminal não é capaz de fazê-lo é o `setenv TERM vt100`.
+Você pode obter uma lista das outras variáveis de ambiente que foram definidas digitando `env` no prompt. O resultado mostrará seu editor, pager e tipo de terminal padrão, entre possivelmente muitos outros. Um comando útil se você efetuar login de um local remoto e não puder executar um programa porque o terminal não é capaz é `setenv TERM vt100`.
[[other]]
== Outros
-Como `root`, você pode desmontar o CDROM com o comando `/sbin/umount /cdrom`, retire-o da unidade, insira outro e monte-o com `/sbin/mount_cd9660 /dev/cd0a /cdrom` considerando que `cd0a` é o nome do dispositivo da sua unidade de CDROM. As versões mais recentes do FreeBSD permitem montar o CDROM apenas com o comando `/sbin/mount /cdrom`.
+Como `root`, você pode desmontar o CDROM com `/sbin/umount /cdrom`, retirá-lo da unidade, inserir outro e montá-lo com `/sbin/mount_cd9660 /dev/cd0a /cdrom` assumindo que cd0a é o nome do dispositivo para sua unidade de CD-ROM. As versões mais recentes do FreeBSD permitem que você monte o CDROM apenas com `/sbin/mount /cdrom`.
-Usar o live filesystem -- o segundo dos discos de CDROM do FreeBSD -- é útil se você tiver espaço limitado. O que está no live filesystem varia de release para release. Você pode tentar jogar jogos a partir do CDROM. Isso envolve o uso do `lndir`, que é instalado com o X Window System, para informar ao(s) programa(s) onde encontrar os arquivos necessários, porque eles estão no sistema de arquivos do [.filename]#/cdrom# em vez do [.filename]#/usr# e seus subdiretórios, que é onde eles devem estar. Leia o manual deste utilitário executando `man lndir`.
+Usar o sistema de arquivos ao vivo (live filesystem), o segundo dos discos do CDROM do FreeBSD, é útil se você tem espaço limitado. O que está no sistema de arquivos ao vivo varia de versão para versão. Você pode tentar jogar jogos do CDROM. Isso envolve o uso do `lndir`, que é instalado com o X Window System, para informar ao(s) programa(s) onde encontrar os arquivos necessários, pois eles estão em [.filename]#/cdrom# em vez de em [.filename]#/usr# e seus subdiretórios, onde são esperados. Leia `man lndir`.
[[comments-welcome]]
== Comentários são bem-vindos
-Caso você venha a usar este guia, eu estaria interessada em saber onde ele pode não ter ficado claro e o que foi deixado de fora que você acha que deveria ser incluído, e se ele foi útil para você. Meus agradecimentos a Eugene W. Stark, professor de ciência da computação na SUNY-Stony Brook, e também ao John Fieber pelos comentários úteis.
+Se você usou este guia, ficaria interessado em saber onde não ficou claro e o que foi deixado de fora que você acha que deveria ser incluído, e se foi útil. Meus agradecimentos a Eugene W. Stark, professor de ciência da computação da SUNY-Stony Brook, e John Fieber por seus comentários úteis.
Annelise Anderson, mailto:andrsn@andrsn.stanford.edu[andrsn@andrsn.stanford.edu]
diff --git a/documentation/content/pt-br/articles/new-users/_index.po b/documentation/content/pt-br/articles/new-users/_index.po
new file mode 100644
index 0000000000..02b254a0c0
--- /dev/null
+++ b/documentation/content/pt-br/articles/new-users/_index.po
@@ -0,0 +1,1425 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: 2023-04-20 00:00+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesnew-users_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.15.1\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/new-users/_index.adoc:1
+#, no-wrap
+msgid "Introduction for people new to both FreeBSD and UNIX®"
+msgstr "Introdução para iniciantes tanto no FreeBSD quanto no UNIX®"
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/articles/new-users/_index.adoc:1
+#, no-wrap
+msgid "For People New to Both FreeBSD and UNIX®"
+msgstr "Para iniciantes tanto no FreeBSD quanto no UNIX®"
+
+#. type: Title =
+#: documentation/content/en/articles/new-users/_index.adoc:11
+#, no-wrap
+msgid "For People New to Both FreeBSD and UNIX(R)"
+msgstr "Para iniciantes tanto no FreeBSD quanto no UNIX®"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:46
+msgid ""
+"Congratulations on installing FreeBSD! This introduction is for people new "
+"to both FreeBSD _and_ UNIX(R)-so it starts with basics."
+msgstr ""
+"Parabéns por instalar o FreeBSD! Esta introdução é destinada a usuários "
+"iniciantes tanto no FreeBSD quanto no UNIX(R) - então ela começa com o "
+"básico."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:48
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:52
+#, no-wrap
+msgid "Logging in and Getting Out"
+msgstr "Logando e Deslogando"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:58
+msgid ""
+"Log in (when you see `login:`) as a user you created during installation or "
+"as `root`. (Your FreeBSD installation will already have an account for "
+"`root`; who can go anywhere and do anything, including deleting essential "
+"files, so be careful!) The symbols % and # in the following stand for the "
+"prompt (yours may be different), with % indicating an ordinary user and # "
+"indicating `root`."
+msgstr ""
+"Faça login (quando você ver `login:`) com o usuário que você criou durante a "
+"instalação ou como `root`. (Sua instalação do FreeBSD já terá uma conta para "
+"o usuário `root`, o qual pode ir a qualquer lugar e fazer qualquer coisa, "
+"incluindo excluir arquivos essenciais, então tenha cuidado!) Os símbolos % e "
+"# abaixo representam o prompt (o seu pode ser diferente), sendo que o % "
+"indica um usuário comum e o # indica o usuário `root`."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:60
+msgid "To log out (and get a new `login:` prompt) type"
+msgstr "Para sair (e obter um novo prompt `login:`), digite"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:64
+#, no-wrap
+msgid "# exit\n"
+msgstr "# exit\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:68
+msgid ""
+"as often as necessary. Yes, press kbd:[enter] after commands, and remember "
+"that UNIX(R) is case-sensitive-``exit``, not `EXIT`."
+msgstr ""
+"quantas vezes for necessário. Sim, pressione kbd:[enter] após os comandos e "
+"lembre-se de que o UNIX(R) é sensível a maiúsculas e minúsculas - use "
+"``exit``, não EXIT."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:70
+msgid "To shut down the machine type"
+msgstr "Para desligar o computador, digite"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:74
+#, no-wrap
+msgid "# /sbin/shutdown -h now\n"
+msgstr "# /sbin/shutdown -h now\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:77
+msgid "Or to reboot type"
+msgstr "Ou para reiniciar, digite"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:81
+#, no-wrap
+msgid "# /sbin/shutdown -r now\n"
+msgstr "# /sbin/shutdown -r now\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:84
+msgid "or"
+msgstr "ou"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:88
+#, no-wrap
+msgid "# /sbin/reboot\n"
+msgstr "# /sbin/reboot\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:94
+msgid ""
+"You can also reboot with kbd:[Ctrl+Alt+Delete]. Give it a little time to do "
+"its work. This is equivalent to `/sbin/reboot` in recent releases of "
+"FreeBSD and is much, much better than hitting the reset button. You do not "
+"want to have to reinstall this thing, do you?"
+msgstr ""
+"Você também pode reiniciar o sistema com kbd:[Ctrl+Alt+Delete]. Dê um pouco "
+"de tempo para que o sistema execute suas tarefas. Isso é equivalente a `/"
+"sbin/reboot` nas versões recentes do FreeBSD e é muito, muito melhor do que "
+"pressionar o botão de reset. Você não quer ter que reinstalar tudo, certo?"
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:96
+#, no-wrap
+msgid "Adding a User with Root Privileges"
+msgstr "Adicionando um Usuário com Privilégios de Root"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:99
+msgid ""
+"If you did not create any users when you installed the system and are thus "
+"logged in as `root`, you should probably create a user now with"
+msgstr ""
+"Se você não criou nenhum usuário durante a instalação do sistema e, "
+"portanto, está conectado como `root`, é provável que você queira criar um "
+"usuário agora com o seguinte comando"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:103
+#, no-wrap
+msgid "# adduser\n"
+msgstr "# adduser\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:109
+msgid ""
+"The first time you use `adduser`, it might ask for some defaults to save. "
+"You might want to make the default shell man:csh[1] instead of man:sh[1], if "
+"it suggests `sh` as the default. Otherwise just press enter to accept each "
+"default. These defaults are saved in [.filename]#/etc/adduser.conf#, an "
+"editable file."
+msgstr ""
+"A primeira vez que você usa o comando `adduser`, ele pode solicitar algumas "
+"opções padrão para salvar. Você pode querer definir o shell padrão como "
+"man:csh[1] em vez de man:sh[1], se ele sugerir `sh` como padrão. Caso "
+"contrário, basta pressionar Enter para aceitar cada opção padrão. Essas "
+"opções padrão são salvas em [.filename]#/etc/adduser.conf#, um arquivo que "
+"pode ser editado."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:113
+msgid ""
+"Suppose you create a user `jack` with full name _Jack Benimble_. Give "
+"`jack` a password if security (even kids around who might pound on the "
+"keyboard) is an issue. When it asks you if you want to invite `jack` into "
+"other groups, type `wheel`"
+msgstr ""
+"Suponha que você crie um usuário chamado `jack` com o nome completo _Jack "
+"Benimble_. Defina uma senha para `jack` se a segurança for uma preocupação ("
+"mesmo que sejam apenas crianças por perto que possam bater no teclado). "
+"Quando o comando `adduser` perguntar se você deseja convidar `jack` para "
+"outros grupos, digite `wheel`"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:117
+#, no-wrap
+msgid "Login group is \"jack\". Invite jack into other groups: wheel\n"
+msgstr "Login group is \"jack\". Invite jack into other groups: wheel\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:121
+msgid ""
+"This will make it possible to log in as `jack` and use the man:su[1] command "
+"to become `root`. Then you will not get scolded any more for logging in as "
+"`root`."
+msgstr ""
+"Isso tornará possível fazer login como `jack` e usar o comando man:su[1] "
+"para se tornar `root`. Então, você não receberá mais repreensões por fazer "
+"login como `root`."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:124
+msgid ""
+"You can quit `adduser` any time by typing kbd:[Ctrl+C], and at the end you "
+"will have a chance to approve your new user or simply type kbd:[n] for no. "
+"You might want to create a second new user so that when you edit `jack`'s "
+"login files, you will have a hot spare in case something goes wrong."
+msgstr ""
+"Você pode interromper o comando `adduser` a qualquer momento digitando "
+"kbd:[Ctrl+C], e no final você terá a chance de aprovar o novo usuário ou "
+"simplesmente digitar kbd:[n] para não aprovar. Você pode querer criar um "
+"segundo usuário para que, ao editar os arquivos de login de `jack`, você "
+"tenha um usuário reserva caso algo dê errado."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:127
+msgid ""
+"Once you have done this, use `exit` to get back to a login prompt and log in "
+"as `jack`. In general, it is a good idea to do as much work as possible as "
+"an ordinary user who does not have the power-and risk-of `root`."
+msgstr ""
+"Depois de ter feito isso, use o comando `exit` para voltar ao prompt de "
+"login e faça login como `jack`. Em geral, é uma boa ideia fazer o máximo de "
+"trabalho possível como um usuário comum que não possui o poder - e o risco - "
+"de `root`."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:130
+msgid ""
+"If you already created a user and you want the user to be able to `su` to "
+"`root`, you can log in as `root` and edit the file [.filename]#/etc/group#, "
+"adding `jack` to the first line (the group `wheel`). But first you need to "
+"practice man:vi[1], the text editor-or use the simpler text editor, man:"
+"ee[1], installed on recent versions of FreeBSD."
+msgstr ""
+"Se você já criou um usuário e deseja que o usuário possa fazer `su` para "
+"`root`, faça login como `root` e edite o arquivo [.filename]#/etc/group#, "
+"adicionando `jack` à primeira linha (o grupo `wheel`). Mas primeiro, você "
+"precisa praticar o uso do editor de texto man:vi[1], ou usar um editor de "
+"texto mais simples, o man:ee[1], instalado em versões recentes do FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:132
+msgid "To delete a user, use `rmuser`."
+msgstr "Para excluir um usuário, use o comando `rmuser`."
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:134
+#, no-wrap
+msgid "Looking Around"
+msgstr "Explorando o Sistema"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:137
+msgid ""
+"Logged in as an ordinary user, look around and try out some commands that "
+"will access the sources of help and information within FreeBSD."
+msgstr ""
+"Conectado como um usuário comum, explore e experimente alguns comandos que "
+"acessarão as fontes de ajuda e informações dentro do FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:139
+msgid "Here are some commands and what they do:"
+msgstr "Aqui estão alguns comandos e o que eles fazem:"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:140
+#, no-wrap
+msgid "`id`"
+msgstr "`id`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:142
+msgid "Tells you who you are!"
+msgstr "Diz quem você é!"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:143
+#, no-wrap
+msgid "`pwd`"
+msgstr "`pwd`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:145
+msgid "Shows you where you are-the current working directory."
+msgstr "Exibe o diretório de trabalho atual."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:146
+#, no-wrap
+msgid "`ls`"
+msgstr "`ls`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:148
+msgid "Lists the files in the current directory."
+msgstr "Lista os arquivos presentes no diretório atual."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:149
+#, no-wrap
+msgid "`ls -F`"
+msgstr "`ls -F`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:151
+msgid ""
+"Lists the files in the current directory with a * after executables, a `/` "
+"after directories, and an `@` after symbolic links."
+msgstr ""
+"Lista os arquivos no diretório atual com um * após os arquivos executáveis, "
+"uma `/` após os diretórios e um `@` após os links simbólicos."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:152
+#, no-wrap
+msgid "`ls -l`"
+msgstr "`ls -l`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:154
+msgid "Lists the files in long format-size, date, permissions."
+msgstr ""
+"Lista os arquivos no diretório atual em formato longo, mostrando informações "
+"como tamanho, data e hora de modificação, permissões de arquivo e proprietá"
+"rio/grupo."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:155
+#, no-wrap
+msgid "`ls -a`"
+msgstr "`ls -a`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:158
+msgid ""
+"Lists hidden \"dot\" files with the others. If you are `root`, the \"dot\" "
+"files show up without the `-a` switch."
+msgstr ""
+"Lista todos os arquivos no diretório atual, incluindo arquivos ocultos (com "
+"ponto no início do nome). Se você estiver logado como `root`, os arquivos "
+"ocultos serão listados sem a necessidade do uso do parâmetro `-a`."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:159
+#, no-wrap
+msgid "`cd`"
+msgstr "`cd`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:163
+msgid ""
+"Changes directories. `cd ..` backs up one level; note the space after `cd`. "
+"`cd /usr/local` goes there. `cd ~` goes to the home directory of the person "
+"logged in-e.g., [.filename]#/usr/home/jack#. Try `cd /cdrom`, and then "
+"`ls`, to find out if your CDROM is mounted and working."
+msgstr ""
+"O comando `cd` é usado para mudar de diretório. `cd ..` volta um nível; "
+"observe o espaço após o `cd`. `cd /usr/local` navega até esse diretório. `"
+"cd ~` navega até o diretório home do usuário logado, por exemplo, [."
+"filename]#/usr/home/jack#. Experimente o comando `cd /cdrom`, e em seguida "
+"`ls`, para descobrir se o seu CDROM está montado e funcionando."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:164
+#, no-wrap
+msgid "`less _filename_`"
+msgstr "`less _filename_`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:168
+msgid ""
+"Lets you look at a file (named _filename_) without changing it. Try `less /"
+"etc/fstab`. Type `q` to quit."
+msgstr ""
+"Permite visualizar o conteúdo de um arquivo (chamado _filename_) sem "
+"modificá-lo. Experimente o comando `less /etc/fstab`. Digite `q` para sair "
+"do modo de visualização."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:169
+#, no-wrap
+msgid "`cat _filename_`"
+msgstr "`cat _filename_`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:174
+msgid ""
+"Displays _filename_ on screen. If it is too long and you can see only the "
+"end of it, press kbd:[ScrollLock] and use the kbd:[up-arrow] to move "
+"backward; you can use kbd:[ScrollLock] with manual pages too. Press kbd:"
+"[ScrollLock] again to quit scrolling. You might want to try `cat` on some "
+"of the dot files in your home directory-`cat .cshrc`, `cat .login`, `cat ."
+"profile`."
+msgstr ""
+"Exibe o conteúdo do arquivo _filename_ na tela. Se o arquivo for muito longo "
+"e você conseguir visualizar apenas o final, pressione kbd:[ScrollLock] e use "
+"a tecla de seta para cima (kbd:[up-arrow]) para rolar para trás. Você também "
+"pode usar kbd:[ScrollLock] com páginas de manual (man pages). Pressione "
+"kbd:[ScrollLock] novamente para sair do modo de rolagem. Você pode "
+"experimentar o comando `cat` em alguns dos arquivos ocultos em seu diretório "
+"home, por exemplo: `cat .cshrc`, `cat .login`, `cat .profile`."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:178
+msgid ""
+"You will notice aliases in [.filename]#.cshrc# for some of the `ls` commands "
+"(they are very convenient). You can create other aliases by editing [."
+"filename]#.cshrc#. You can make these aliases available to all users on the "
+"system by putting them in the system-wide `csh` configuration file, [."
+"filename]#/etc/csh.cshrc#."
+msgstr ""
+"Você notará que existem aliases no arquivo [.filename]#.cshrc# para alguns "
+"dos comandos `ls` (eles são muito convenientes). Você pode criar outros "
+"aliases editando o arquivo [.filename]#.cshrc#. Você pode tornar esses "
+"aliases disponíveis para todos os usuários do sistema colocando-os no "
+"arquivo de configuração global do `csh`, o [.filename]#/etc/csh.cshrc#."
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:180
+#, no-wrap
+msgid "Getting Help and Information"
+msgstr "Obtendo ajuda e informações"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:184
+msgid ""
+"Here are some useful sources of help. _Text_ stands for something of your "
+"choice that you type in-usually a command or filename."
+msgstr ""
+"Aqui estão algumas fontes úteis de ajuda. O termo _Text_ significa algo de "
+"sua escolha que você digita, geralmente um comando ou nome de arquivo."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:185
+#, no-wrap
+msgid "`apropos _text_`"
+msgstr "`apropos _text_`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:187
+msgid "Everything containing string _text_ in the `whatis database`."
+msgstr ""
+"Irá retornar todos os comandos e arquivos que contenham a palavra-chave "
+"especificada _text_ no `banco de dados whatis`."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:188
+#, no-wrap
+msgid "`man _text_`"
+msgstr "`man _text_`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:193
+msgid ""
+"The manual page for _text_. The major source of documentation for UNIX(R) "
+"systems. `man ls` will tell you all the ways to use `ls`. Press kbd:"
+"[Enter] to move through text, kbd:[Ctrl+B] to go back a page, kbd:[Ctrl+F] "
+"to go forward, kbd:[q] or kbd:[Ctrl+C] to quit."
+msgstr ""
+"A página de manual para _text_. A principal fonte de documentação para "
+"sistemas UNIX(R). `man ls` lhe dirá todas as maneiras de usar o comando`ls`. "
+"Pressione kbd:[Enter] para mover pelo texto, kbd:[Ctrl+B] para voltar uma "
+"página, kbd:[Ctrl+F] para avançar, kbd:[q] ou kbd:[Ctrl+C] para sair ."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:194
+#, no-wrap
+msgid "`which _text_`"
+msgstr "`which _text_`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:196
+msgid "Tells you where in the user's path the command _text_ is found."
+msgstr ""
+"Mostra o caminho completo para o executável do comando _text_ especificado."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:197
+#, no-wrap
+msgid "`locate _text_`"
+msgstr "`locate _text_`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:199
+msgid "All the paths where the string _text_ is found."
+msgstr "Todos os caminhos onde a string _text_ é encontrada."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:200
+#, no-wrap
+msgid "`whatis _text_`"
+msgstr "`whatis _text_`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:203
+msgid ""
+"Tells you what the command _text_ does and its manual page. Typing `whatis "
+"*` will tell you about all the binaries in the current directory."
+msgstr ""
+"Informa o que o comando _text_ faz e sua página de manual. Digitando `whatis "
+"*` irá falar sobre todos os binários no diretório atual."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:204
+#, no-wrap
+msgid "`whereis _text_`"
+msgstr "`whereis _text_`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:206
+msgid "Finds the file _text_, giving its full path."
+msgstr "Localiza o arquivo _text_, fornecendo seu caminho completo."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:210
+msgid ""
+"You might want to try using `whatis` on some common useful commands like "
+"`cat`, `more`, `grep`, `mv`, `find`, `tar`, `chmod`, `chown`, `date`, and "
+"`script`. `more` lets you read a page at a time as it does in DOS, e.g., "
+"`ls -l | more` or `more _filename_`. The * works as a wildcard-e.g., `ls "
+"w*` will show you files beginning with `w`."
+msgstr ""
+"Você pode tentar usar `whatis` em alguns comandos úteis comuns como `cat`, "
+"`more`, `grep`, `mv`, `find`, `tar`, `chmod`, `chown`, `date` , e `script`. "
+"`more` permite que você leia uma página por vez como no DOS, por exemplo, `"
+"ls -l | more` ou `more _filename_`. O * funciona como um curinga, por "
+"exemplo, `ls w*` mostrará os arquivos que começam com `w`."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:214
+msgid ""
+"Are some of these not working very well? Both man:locate[1] and man:"
+"whatis[1] depend on a database that is rebuilt weekly. If your machine is "
+"not going to be left on over the weekend (and running FreeBSD), you might "
+"want to run the commands for daily, weekly, and monthly maintenance now and "
+"then. Run them as `root` and, for now, give each one time to finish before "
+"you start the next one."
+msgstr ""
+"Alguns deles não estão funcionando muito bem? Ambos man:locate[1] e "
+"man:whatis[1] dependem de um banco de dados que é reconstruído semanalmente. "
+"Se sua máquina não vai ficar ligada no fim de semana (e rodando o FreeBSD), "
+"você pode querer executar os comandos para manutenção diária, semanal e "
+"mensal de vez em quando. Execute-os como `root` e, por enquanto, dê a cada "
+"um tempo para terminar antes de iniciar o próximo."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:223
+#, no-wrap
+msgid ""
+"# periodic daily\n"
+"output omitted\n"
+"# periodic weekly\n"
+"output omitted\n"
+"# periodic monthly\n"
+"output omitted\n"
+msgstr ""
+"# periodic daily\n"
+"saída omitida\n"
+"# periodic weekly\n"
+"saída omitida\n"
+"# periodic monthly\n"
+"saída omitida\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:229
+msgid ""
+"If you get tired of waiting, press kbd:[Alt+F2] to get another _virtual "
+"console_, and log in again. After all, it is a multi-user, multi-tasking "
+"system. Nevertheless these commands will probably flash messages on your "
+"screen while they are running; you can type `clear` at the prompt to clear "
+"the screen. Once they have run, you might want to look at [.filename]#/var/"
+"mail/root# and [.filename]#/var/log/messages#."
+msgstr ""
+"Se você cansar de esperar, pressione kbd:[Alt+F2] para obter outro _virtual "
+"console_ e faça login novamente. Afinal, é um sistema multiusuário e "
+"multitarefa. No entanto, esses comandos provavelmente exibirão mensagens em "
+"sua tela enquanto estiverem sendo executados; você pode digitar `clear` no "
+"prompt para limpar a tela. Uma vez executados, você pode querer olhar para [."
+"filename]#/var/mail/root# e [.filename]#/var/log/messages#."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:235
+msgid ""
+"Running such commands is part of system administration-and as a single user "
+"of a UNIX(R) system, you are your own system administrator. Virtually "
+"everything you need to be `root` to do is system administration. Such "
+"responsibilities are not covered very well even in those big fat books on "
+"UNIX(R), which seem to devote a lot of space to pulling down menus in "
+"windows managers. You might want to get one of the two leading books on "
+"systems administration, either Evi Nemeth et.al.'s UNIX System "
+"Administration Handbook (Prentice-Hall, 1995, ISBN 0-13-15051-7)-the second "
+"edition with the red cover; or Æleen Frisch's Essential System "
+"Administration (O'Reilly & Associates, 2002, ISBN 0-596-00343-9). I used "
+"Nemeth."
+msgstr ""
+"Executar esses comandos faz parte da administração do sistema - e como único "
+"usuário de um sistema UNIX(R), você é seu próprio administrador de sistema. "
+"Praticamente tudo o que você precisa fazer como `root` é administração do "
+"sistema. Essas responsabilidades não são bem cobertas, mesmo nos grandes e "
+"grossos livros sobre UNIX(R), que parecem dedicar muito espaço a abrir menus "
+"em gerenciadores de janelas. Se você deseja aprofundar seus conhecimentos em "
+"administração de sistemas, pode ser útil obter um dos dois principais livros "
+"sobre o assunto. Os dois livros recomendados são \"UNIX System "
+"Administration Handbook\" de Evi Nemeth et al. (Prentice-Hall, 1995, ISBN "
+"0-13-15051-7) - a segunda edição com a capa vermelha; ou \"Essential System "
+"Administration\" de Æleen Frisch (O'Reilly & Associates, 2002, ISBN "
+"0-596-00343-9). Ambos os livros são excelentes recursos para administradores "
+"de sistemas e fornecem informações detalhadas sobre administração de "
+"sistemas UNIX(R). Eu usei o livro da Nemeth."
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:237
+#, no-wrap
+msgid "Editing Text"
+msgstr "Editando textos"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:243
+msgid ""
+"To configure your system, you need to edit text files. Most of them will be "
+"in the [.filename]#/etc# directory; and you will need to `su` to `root` to "
+"be able to change them. You can use the easy `ee`, but in the long run the "
+"text editor `vi` is worth learning. There is an excellent tutorial on vi in "
+"[.filename]#/usr/src/contrib/nvi/docs/tutorial#, if you have the system "
+"sources installed."
+msgstr ""
+"Para configurar o sistema, você precisa editar arquivos de texto. A maioria "
+"deles estará no diretório [.filename]#/etc#, e você precisará usar o comando "
+"`su` para se tornar `root` e poder alterá-los. Você pode usar o editor de "
+"texto `ee` para edição mais simples, mas a longo prazo, vale a pena aprender "
+"o editor de texto `vi`. Há um excelente tutorial sobre o vi em [.filename]#/"
+"usr/src/contrib/nvi/docs/tutorial#, se você tiver as fontes do sistema "
+"instaladas."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:247
+msgid ""
+"Before you edit a file, you should probably back it up. Suppose you want to "
+"edit [.filename]#/etc/rc.conf#. You could just use `cd /etc` to get to the "
+"[.filename]#/etc# directory and do:"
+msgstr ""
+"Antes de editar um arquivo, é recomendável fazer backup dele. Suponha que "
+"você deseje editar o arquivo [.filename]#/etc/rc.conf#. Você pode "
+"simplesmente usar o comando `cd /etc` para ir para o diretório [."
+"filename]#/etc# e executar o seguinte comando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:251
+#, no-wrap
+msgid "# cp rc.conf rc.conf.orig\n"
+msgstr "# cp rc.conf rc.conf.orig\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:255
+msgid ""
+"This would copy [.filename]#rc.conf# to [.filename]#rc.conf.orig#, and you "
+"could later copy [.filename]#rc.conf.orig# to [.filename]#rc.conf# to "
+"recover the original. But even better would be moving (renaming) and then "
+"copying back:"
+msgstr ""
+"Isso copiaria o arquivo [.filename]#rc.conf# para [.filename]#rc.conf.orig#, "
+"e posteriormente você poderia copiar [.filename]#rc.conf.orig# de volta para "
+"[.filename]#rc.conf# para recuperar o original. Mas uma opção ainda melhor "
+"seria mover (renomear) e depois copiar de volta:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:260
+#, no-wrap
+msgid ""
+"# mv rc.conf rc.conf.orig\n"
+"# cp rc.conf.orig rc.conf\n"
+msgstr ""
+"# mv rc.conf rc.conf.orig\n"
+"# cp rc.conf.orig rc.conf\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:265
+msgid ""
+"because `mv` preserves the original date and owner of the file. You can now "
+"edit [.filename]#rc.conf#. If you want the original back, you would then "
+"`mv rc.conf rc.conf.myedit` (assuming you want to preserve your edited "
+"version) and then"
+msgstr ""
+"porque o comando `mv` preserva a data e o proprietário original do arquivo. "
+"Agora você pode editar o arquivo [.filename]#rc.conf#. Se quiser recuperar o "
+"original, você pode executar o comando `mv rc.conf rc.conf.myedit` ("
+"assumindo que você deseja preservar a versão editada) e depois executar o "
+"seguinte comando"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:269
+#, no-wrap
+msgid "# mv rc.conf.orig rc.conf\n"
+msgstr "# mv rc.conf.orig rc.conf\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:272
+msgid "to put things back the way they were."
+msgstr "para colocar as coisas de volta da maneira que estavam."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:274
+msgid "To edit a file, type"
+msgstr "Para editar um arquivo, digite"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:278
+#, no-wrap
+msgid "# vi filename\n"
+msgstr "# vi filename\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:283
+msgid ""
+"Move through the text with the arrow keys. kbd:[Esc] (the escape key) puts "
+"`vi` in command mode. Here are some commands:"
+msgstr ""
+"Para mover-se pelo texto, use as teclas de seta. Pressione kbd:[Esc] (a "
+"tecla de escape) para entrar no modo de comando do `vi`. Aqui estão alguns "
+"comandos:"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:284
+#, no-wrap
+msgid "`x`"
+msgstr "`x`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:286
+msgid "delete letter the cursor is on"
+msgstr "deleta a letra localizada onde o cursor está"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:287
+#, no-wrap
+msgid "`dd`"
+msgstr "`dd`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:289
+msgid "delete the entire line (even if it wraps on the screen)"
+msgstr ""
+"Apaga a linha inteira (mesmo se ela estiver aparecendo quebrada na tela em "
+"varias linhas)"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:290
+#, no-wrap
+msgid "`i`"
+msgstr "`i`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:292
+msgid "insert text at the cursor"
+msgstr "Insere um texto na posição do cursor"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:293
+#, no-wrap
+msgid "`a`"
+msgstr "`a`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:295
+msgid "insert text after the cursor"
+msgstr "Insere um texto após a posição do cursor"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:298
+msgid ""
+"Once you type `i` or `a`, you can enter text. `Esc` puts you back in "
+"command mode where you can type"
+msgstr ""
+"Depois de digitar `i` ou `a`, você pode inserir texto. `Esc` coloca você de "
+"volta no modo de comando onde você pode digitar"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:299
+#, no-wrap
+msgid "`:w`"
+msgstr "`:w`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:301
+msgid "to write your changes to disk and continue editing"
+msgstr "para gravar suas alterações no disco e continuar editando"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:302
+#, no-wrap
+msgid "`:wq`"
+msgstr "`:wq`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:304
+msgid "to write and quit"
+msgstr "para gravar e sair"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:305
+#, no-wrap
+msgid "`:q!`"
+msgstr "`:q!`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:307
+msgid "to quit without saving changes"
+msgstr "para sair do arquivo sem salvar as alterações"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:308
+#, no-wrap
+msgid "`/_text_`"
+msgstr "`/_text_`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:310
+msgid ""
+"to move the cursor to _text_; `/` kbd:[Enter] (the enter key) to find the "
+"next instance of _text_."
+msgstr ""
+"para mover o cursor para _text_; `/` kbd:[Enter] (a tecla enter) para "
+"encontrar a próxima ocorrência de _text_."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:311
+#, no-wrap
+msgid "`G`"
+msgstr "`G`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:313
+msgid "to go to the end of the file"
+msgstr "para ir para o final do arquivo"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:314
+#, no-wrap
+msgid "`nG`"
+msgstr "`nG`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:316
+msgid "to go to line _n_ in the file, where _n_ is a number"
+msgstr "para ir para a linha _n_ no arquivo, onde _n_ é um número"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:317
+#, no-wrap
+msgid "kbd:[Ctrl+L]"
+msgstr "kbd:[Ctrl+L]"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:319
+msgid "to redraw the screen"
+msgstr "para redesenhar a tela"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:320
+#, no-wrap
+msgid "kbd:[Ctrl+b] and kbd:[Ctrl+f]"
+msgstr "kbd:[Ctrl+b] and kbd:[Ctrl+f]"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:322
+msgid "go back and forward a screen, as they do with `more` and `view`."
+msgstr "para voltar e avançar uma tela, como fazem o `more` e o `view`."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:327
+msgid ""
+"Practice with `vi` in your home directory by creating a new file with `vi "
+"_filename_` and adding and deleting text, saving the file, and calling it up "
+"again. `vi` delivers some surprises because it is really quite complex, and "
+"sometimes you will inadvertently issue a command that will do something you "
+"do not expect. (Some people actually like `vi`-it is more powerful than DOS "
+"EDIT-find out about `:r`.) Use kbd:[Esc] one or more times to be sure you "
+"are in command mode and proceed from there when it gives you trouble, save "
+"often with `:w`, and use `:q!` to get out and start over (from your last `:"
+"w`) when you need to."
+msgstr ""
+"Pratique com `vi` no seu diretório pessoal, criando um novo arquivo com o "
+"comando `vi _nome_do_arquivo_ , adicionando e excluindo texto, salvando o "
+"arquivo e chamando-o novamente. O `vi` oferece algumas surpresas porque é "
+"realmente bastante complexo e às vezes você inadvertidamente emite um "
+"comando que fará algo que você não espera. (Algumas pessoas realmente gostam "
+"do `vi` - é mais poderoso que o EDIT do DOS - descubra sobre o `:r`.) Use "
+"kbd:[Esc] uma ou mais vezes para ter certeza de que está no modo de comando "
+"e prossiga a partir daí quando ele lhe der problemas, salve frequentemente "
+"com `:w` e use `:q!` para sair e começar de novo (a partir do último `:w`) "
+"quando precisar."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:331
+msgid ""
+"Now you can `cd` to [.filename]#/etc#, `su` to `root`, use `vi` to edit the "
+"file [.filename]#/etc/group#, and add a user to `wheel` so the user has root "
+"privileges. Just add a comma and the user's login name to the end of the "
+"first line in the file, press kbd:[Esc], and use `:wq` to write the file to "
+"disk and quit. Instantly effective. (You did not put a space after the "
+"comma, did you?)"
+msgstr ""
+"Agora você pode fazer `cd` para [.filename]#/etc#, `su` para `root`, usar "
+"`vi` para editar o arquivo [.filename]#/etc/group# e adicionar um usuário ao "
+"grupo `wheel ` para que ele tenha privilégios de root. Basta adicionar uma "
+"vírgula e o nome de login do usuário ao final da primeira linha do arquivo, "
+"pressionar kbd:[Esc] e usar `:wq` para gravar o arquivo no disco e sair. "
+"Instantaneamente eficaz. (Você não colocou um espaço após a vírgula, "
+"colocou?)"
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:333
+#, no-wrap
+msgid "Other Useful Commands"
+msgstr "Outros comandos úteis"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:335
+#, no-wrap
+msgid "`df`"
+msgstr "`df`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:337
+msgid "shows file space and mounted systems."
+msgstr "mostra o espaço dos sistemas de arquivos que estão montados."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:338
+#, no-wrap
+msgid "`ps aux`"
+msgstr "`ps aux`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:340
+msgid "shows processes running. `ps ax` is a narrower form."
+msgstr "Mostra os processos em execução. ps ax é uma forma mais simplificada."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:341
+#, no-wrap
+msgid "`rm _filename_`"
+msgstr "`rm _filename_`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:343
+msgid "remove _filename_."
+msgstr "remove o arquivo _filename_."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:344
+#, no-wrap
+msgid "`rm -R _dir_`"
+msgstr "`rm -R _dir_`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:346
+msgid "removes a directory _dir_ and all subdirectories-careful!"
+msgstr "remove um diretório _dir_ e todos os subdiretórios - use com cuidado!"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:347
+#, no-wrap
+msgid "`ls -R`"
+msgstr "`ls -R`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:349
+msgid ""
+"lists files in the current directory and all subdirectories; I used a "
+"variant, `ls -AFR > where.txt`, to get a list of all the files in [."
+"filename]#/# and (separately) [.filename]#/usr# before I found better ways "
+"to find files."
+msgstr ""
+"lista arquivos no diretório atual e todos os subdiretórios; Usei uma "
+"variante, `ls -AFR > where.txt`, para obter uma lista de todos os arquivos "
+"em [.filename]#/# e (separadamente) [.filename]#/usr# antes de encontrar "
+"maneiras melhores de encontrar arquivos."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:350
+#, no-wrap
+msgid "`passwd`"
+msgstr "`passwd`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:352
+msgid "to change user's password (or ``root``'s password)"
+msgstr "para alterar a senha do usuário (ou a senha do ``root``)"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:353
+#, no-wrap
+msgid "`man hier`"
+msgstr "`man hier`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:355
+msgid "manual page on the UNIX(R) filesystem"
+msgstr "página de manual no sistema de arquivos UNIX(R)"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:357
+msgid ""
+"Use `find` to locate [.filename]#filename# in [.filename]#/usr# or any of "
+"its subdirectories with"
+msgstr ""
+"Use o `find` para localizar o arquivo [.filename]#filename# em [."
+"filename]#/usr# ou qualquer um de seus subdiretórios com"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:361
+#, no-wrap
+msgid "% find /usr -name \"filename\"\n"
+msgstr "% find /usr -name \"filename\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:365
+msgid ""
+"You can use * as a wildcard in `\"_filename_\"` (which should be in "
+"quotes). If you tell `find` to search in [.filename]#/# instead of [."
+"filename]#/usr# it will look for the file(s) on all mounted filesystems, "
+"including the CDROM and the DOS partition."
+msgstr ""
+"Você pode usar * como curinga em `\"_filename_\"` (que deve estar entre "
+"aspas). Se você disser ao `find` para procurar em [.filename]#/# ao invés de "
+"[.filename]#/usr# ele irá procurar o(s) arquivo(s) em todos os sistemas de "
+"arquivos montados, incluindo o CD-ROM e a partição DOS."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:367
+msgid ""
+"An excellent book that explains UNIX(R) commands and utilities is Abrahams & "
+"Larson, Unix for the Impatient (2nd ed., Addison-Wesley, 1996). There is "
+"also a lot of UNIX(R) information on the Internet."
+msgstr ""
+"Um livro excelente que explica os comandos e utilitários do UNIX(R) é "
+"Abrahams & Larson, Unix for the Impacient (2ª ed., Addison-Wesley, 1996). "
+"Também há muitas informações sobre o UNIX(R) na Internet."
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:369
+#, no-wrap
+msgid "Next Steps"
+msgstr "Próximos Passos"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:376
+msgid ""
+"You should now have the tools you need to get around and edit files, so you "
+"can get everything up and running. There is a great deal of information in "
+"the FreeBSD handbook (which is probably on your hard drive) and link:https://"
+"www.FreeBSD.org/[FreeBSD's web site]. A wide variety of packages and ports "
+"are on the CDROM as well as the web site. The handbook tells you more about "
+"how to use them (get the package if it exists, with `pkg add _packagename_`, "
+"where _packagename_ is the filename of the package). The CDROM has lists of "
+"the packages and ports with brief descriptions in [.filename]#cdrom/packages/"
+"index#, [.filename]#cdrom/packages/index.txt#, and [.filename]#cdrom/ports/"
+"index#, with fuller descriptions in [.filename]#/cdrom/ports/\\*/*/pkg/"
+"DESCR#, where the *s represent subdirectories of kinds of programs and "
+"program names respectively."
+msgstr ""
+"Você agora deve ter as ferramentas necessárias para navegar e editar "
+"arquivos, para que possa colocar tudo em funcionamento. Existe uma grande "
+"quantidade de informações no Handbook do FreeBSD (que provavelmente está no "
+"seu disco rígido) e no site do link:https://www.FreeBSD.org/[FreeBSD]. Uma "
+"ampla variedade de pacotes e ports estão no CDROM, bem como no site. O "
+"Handbook explica mais sobre como usá-los (obtenha o pacote se existir, com `"
+"pkg add _nomedopacote_`, onde nomedopacote é o nome do arquivo do pacote). O "
+"CDROM contém listas dos pacotes e ports com breves descrições em [.filename]#"
+"cdrom/packages/index#, [.filename]#cdrom/packages/index.txt#, e [.filename]#"
+"cdrom/ports/index#, e com descrições mais detalhadas em [.filename]#/cdrom/"
+"ports/\\*/*/pkg/DESCR#, onde os *s representam subdiretórios de tipos de "
+"programas e nomes de programas, respectivamente."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:378
+msgid ""
+"If you find the handbook too sophisticated (what with `lndir` and all) on "
+"installing ports from the CDROM, here is what usually works:"
+msgstr ""
+"Se você achar o handbook muito sofisticado (com isso do `lndir` e tudo mais) "
+"ao instalar os ports do CDROM, veja a seguir o que geralmente funciona:"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:381
+msgid ""
+"Find the port you want, say `kermit`. There will be a directory for it on "
+"the CDROM. Copy the subdirectory to [.filename]#/usr/local# (a good place "
+"for software you add that should be available to all users) with:"
+msgstr ""
+"Encontre o port que você deseja, digamos o `kermit`. Haverá um diretório "
+"para ele no CDROM. Copie o subdiretório para [.filename]#/usr/local# (este é "
+"um bom lugar para softwares que você adiciona no sistema e que devem estar "
+"disponíveis para todos os usuários) com:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:385
+#, no-wrap
+msgid "# cp -R /cdrom/ports/comm/kermit /usr/local\n"
+msgstr "# cp -R /cdrom/ports/comm/kermit /usr/local\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:388
+msgid ""
+"This should result in a [.filename]#/usr/local/kermit# subdirectory that has "
+"all the files that the `kermit` subdirectory on the CDROM has."
+msgstr ""
+"Isso deve resultar em um subdiretório [.filename]#/usr/local/kermit# que "
+"contém todos os arquivos que o subdiretório `kermit` no CD-ROM possui."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:393
+msgid ""
+"Next, create the directory [.filename]#/usr/ports/distfiles# if it does not "
+"already exist using `mkdir`. Now check [.filename]#/cdrom/ports/distfiles# "
+"for a file with a name that indicates it is the port you want. Copy that "
+"file to [.filename]#/usr/ports/distfiles#; in recent versions you can skip "
+"this step, as FreeBSD will do it for you. In the case of `kermit`, there is "
+"no distfile."
+msgstr ""
+"Em seguida, crie o diretório [.filename]#/usr/ports/distfiles# se ele ainda "
+"não existir usando o comando `mkdir`. Agora verifique o [.filename]#/cdrom/"
+"ports/distfiles# para localizar um arquivo com um nome que indique que é o "
+"port que você deseja. Copie esse arquivo para [.filename]#/usr/ports/"
+"distfiles#; nas versões recentes, você pode pular esta etapa, pois o FreeBSD "
+"fará isso por você. No caso de `kermit`, não há distfile."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:396
+msgid ""
+"Then `cd` to the subdirectory of [.filename]#/usr/local/kermit# that has the "
+"file [.filename]#Makefile#. Type"
+msgstr ""
+"Então utilize o `cd` para ir para o subdiretório [.filename]#/usr/local/"
+"kermit# que contém o arquivo [.filename]#Makefile#. E execute"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:400
+#, no-wrap
+msgid "# make all install\n"
+msgstr "# make all install\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:406
+msgid ""
+"During this process the port will FTP to get any compressed files it needs "
+"that it did not find on the CDROM or in [.filename]#/usr/ports/distfiles#. "
+"If you do not have your network running yet and there was no file for the "
+"port in [.filename]#/cdrom/ports/distfiles#, you will have to get the "
+"distfile using another machine and copy it to [.filename]#/usr/ports/"
+"distfiles#. Read [.filename]#Makefile# (with `cat` or `more` or `view`) to "
+"find out where to go (the master distribution site) to get the file and what "
+"its name is. (Use binary file transfers!) Then go back to [.filename]#/usr/"
+"local/kermit#, find the directory with [.filename]#Makefile#, and type `make "
+"all install`."
+msgstr ""
+"Durante esse processo, o port fará o download via FTP de quaisquer arquivos "
+"compactados que precise e que não foram encontrados no CDROM ou no diretório "
+"[.filename]#/usr/ports/distfiles#. Se você não tiver a rede funcionando "
+"ainda e não houver um arquivo para o port em [.filename]#/cdrom/ports/"
+"distfiles#, você precisará obter o distfile usando outra máquina e copiá-lo "
+"para [.filename]#/usr/ports/distfiles#. Leia o [.filename]#Makefile# (com "
+"`cat` ou `more` ou `view`) para descobrir onde obter o arquivo (o site de "
+"distribuição principal) e qual é o nome dele. (Use transferências de arquivo "
+"binário!) Em seguida, volte para [.filename]#/usr/local/kermit#, encontre o "
+"diretório com o [.filename]#Makefile# e execute o `make all install`."
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:408
+#, no-wrap
+msgid "Your Working Environment"
+msgstr "Seu ambiente de trabalho"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:413
+msgid ""
+"Your shell is the most important part of your working environment. The "
+"shell is what interprets the commands you type on the command line, and thus "
+"communicates with the rest of the operating system. You can also write "
+"shell scripts a series of commands to be run without intervention."
+msgstr ""
+"Seu shell é a parte mais importante do seu ambiente de trabalho. O shell é o "
+"que interpreta os comandos que você digita na linha de comando e, assim, se "
+"comunica com o restante do sistema operacional. Você também pode escrever "
+"scripts de shell, que consiste em uma série de comandos para serem "
+"executados sem intervenção."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:417
+msgid ""
+"Two shells come installed with FreeBSD: `csh` and `sh`. `csh` is good for "
+"command-line work, but scripts should be written with `sh` (or `bash`). You "
+"can find out what shell you have by typing `echo $SHELL`."
+msgstr ""
+"Dois shells vêm instalados com o FreeBSD: `csh` e `sh`. O `csh` é bom para "
+"trabalho na linha de comando, mas os scripts devem ser escritos com `sh` (ou "
+"`bash`). Você pode descobrir qual shell você tem digitando `echo $SHELL`."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:423
+msgid ""
+"The `csh` shell is okay, but `tcsh` does everything `csh` does and more. It "
+"allows you to recall commands with the arrow keys and edit them. It has tab-"
+"key completion of filenames (`csh` uses kbd:[Esc]), and it lets you switch "
+"to the directory you were last in with `cd -`. It is also much easier to "
+"alter your prompt with `tcsh`. It makes life a lot easier."
+msgstr ""
+"O shell `csh` é bom, mas o `tcsh` faz tudo o que o `csh` faz e muito mais. "
+"Ele permite que você recupere comandos com as teclas de seta e edite-os. Ele "
+"completa os nomes dos arquivos com a tecla de tabulação (o `csh` usa "
+"kbd:[Esc]) e permite alternar para o último diretório em que você estava com "
+"`cd -`. Também é muito mais fácil alterar seu prompt com `tcsh`. Ele torna a "
+"vida muito mais fácil."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:425
+msgid "Here are the three steps for installing a new shell:"
+msgstr "Aqui estão os três passos para instalar um novo shell:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/new-users/_index.adoc:429
+msgid ""
+"Install the shell as a port or a package, just as you would any other port "
+"or package."
+msgstr ""
+"Instale o shell como um port ou um pacote, como faria com qualquer outro "
+"port ou pacote."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/new-users/_index.adoc:430
+msgid ""
+"Use `chsh` to change your shell to `tcsh` permanently, or type `tcsh` at the "
+"prompt to change your shell without logging in again."
+msgstr ""
+"Use `chsh` para alterar seu shell para `tcsh` permanentemente, ou digite "
+"`tcsh` no prompt para alterar seu shell sem fazer login novamente."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/new-users/_index.adoc:438
+msgid ""
+"It can be dangerous to change `root`'s shell to something other than `sh` or "
+"`csh` on early versions of FreeBSD and many other versions of UNIX(R); you "
+"may not have a working shell when the system puts you into single user "
+"mode. The solution is to use `su -m` to become `root`, which will give you "
+"the `tcsh` as `root`, because the shell is part of the environment. You can "
+"make this permanent by adding it to your [.filename]#.tcshrc# as an alias "
+"with:"
+msgstr ""
+"Pode ser perigoso mudar o shell `root` para algo diferente de `sh` ou `csh` "
+"nas primeiras versões do FreeBSD e muitas outras versões do UNIX(R); você "
+"pode não ter um shell funcionando quando o sistema o coloca no modo de "
+"usuário único. A solução é usar `su -m` para se tornar `root`, o que lhe "
+"dará o `tcsh` como `root`, porque o shell faz parte do ambiente. Você pode "
+"torná-lo permanente adicionando-o ao seu arquivo [.filename]#.tcshrc# como "
+"um alias com:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:442
+#, no-wrap
+msgid "alias su su -m\n"
+msgstr "alias su su -m\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/new-users/_index.adoc:449
+msgid ""
+"When `tcsh` starts up, it will read the [.filename]#/etc/csh.cshrc# and [."
+"filename]#/etc/csh.login# files, as does `csh`. It will also read [."
+"filename]#.login# in your home directory and [.filename]#.cshrc# as well, "
+"unless you provide a [.filename]#.tcshrc#. This you can do by simply "
+"copying [.filename]#.cshrc# to [.filename]#.tcshrc#."
+msgstr ""
+"Quando o `tcsh` iniciar, ele lerá os arquivos [.filename]#/etc/csh.cshrc# e ["
+".filename]#/etc/csh.login#, assim como o `csh`. Ele também lerá [.filename]#."
+"login# em seu diretório inicial e bem como o [.filename]#.cshrc#, a menos "
+"que você forneça um [.filename]#.tcshrc#. Isso pode ser feito simplesmente "
+"copiando [.filename]#.cshrc# para [.filename]#.tcshrc#."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/new-users/_index.adoc:453
+msgid ""
+"Now that you have installed `tcsh`, you can adjust your prompt. You can "
+"find the details in the manual page for `tcsh`, but here is a line to put in "
+"your [.filename]#.tcshrc# that will tell you how many commands you have "
+"typed, what time it is, and what directory you are in. It also produces a "
+"`>` if you are an ordinary user and a # if you are `root`, but tsch will do "
+"that in any case:"
+msgstr ""
+"Agora que você instalou o `tcsh`, você pode ajustar seu prompt. Você pode "
+"encontrar os detalhes na página de manual do `tcsh`, mas aqui está uma linha "
+"para colocar no seu [.filename]#.tcshrc# que lhe dirá quantos comandos você "
+"digitou, que horas são e em qual diretório você está. Ele também produz um "
+"`>` se você for um usuário comum e um # se você for `root`, mas o tsch fará "
+"isso em qualquer caso:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/new-users/_index.adoc:455
+msgid "set prompt = \"%h %t %~ %# \""
+msgstr "set prompt = \"%h %t %~ %# \""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/new-users/_index.adoc:460
+msgid ""
+"This should go in the same place as the existing set prompt line if there is "
+"one, or under \"if($?prompt) then\" if not. Comment out the old line; you "
+"can always switch back to it if you prefer it. Do not forget the spaces and "
+"quotes. You can get the [.filename]#.tcshrc# reread by typing `source ."
+"tcshrc`."
+msgstr ""
+"Isso deve ir no mesmo lugar que a linha de configuração do prompt existente, "
+"se houver, ou sob \"if($?prompt) then\" se não. Comente a linha antiga; você "
+"sempre pode voltar para ele, se preferir. Não se esqueça dos espaços e "
+"aspas. Você pode reaplicar as opções do [.filename]#.tcshrc# digitando `"
+"source .tcshrc`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/new-users/_index.adoc:464
+msgid ""
+"You can get a listing of other environmental variables that have been set by "
+"typing `env` at the prompt. The result will show you your default editor, "
+"pager, and terminal type, among possibly many others. A useful command if "
+"you log in from a remote location and cannot run a program because the "
+"terminal is not capable is `setenv TERM vt100`."
+msgstr ""
+"Você pode obter uma lista das outras variáveis de ambiente que foram "
+"definidas digitando `env` no prompt. O resultado mostrará seu editor, pager "
+"e tipo de terminal padrão, entre possivelmente muitos outros. Um comando "
+"útil se você efetuar login de um local remoto e não puder executar um "
+"programa porque o terminal não é capaz é `setenv TERM vt100`."
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:466
+#, no-wrap
+msgid "Other"
+msgstr "Outros"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/new-users/_index.adoc:470
+msgid ""
+"As `root`, you can unmount the CDROM with `/sbin/umount /cdrom`, take it out "
+"of the drive, insert another one, and mount it with `/sbin/mount_cd9660 /dev/"
+"cd0a /cdrom` assuming cd0a is the device name for your CDROM drive. The "
+"most recent versions of FreeBSD let you mount the CDROM with just `/sbin/"
+"mount /cdrom`."
+msgstr ""
+"Como `root`, você pode desmontar o CDROM com `/sbin/umount /cdrom`, retirá-"
+"lo da unidade, inserir outro e montá-lo com `/sbin/mount_cd9660 /dev/cd0a "
+"/cdrom` assumindo que cd0a é o nome do dispositivo para sua unidade de CD-"
+"ROM. As versões mais recentes do FreeBSD permitem que você monte o CDROM "
+"apenas com `/sbin/mount /cdrom`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/new-users/_index.adoc:476
+msgid ""
+"Using the live filesystem-the second of FreeBSD's CDROM disks-is useful if "
+"you have got limited space. What is on the live filesystem varies from "
+"release to release. You might try playing games from the CDROM. This "
+"involves using `lndir`, which gets installed with the X Window System, to "
+"tell the program(s) where to find the necessary files, because they are in [."
+"filename]#/cdrom# instead of in [.filename]#/usr# and its subdirectories, "
+"which is where they are expected to be. Read `man lndir`."
+msgstr ""
+"Usar o sistema de arquivos ao vivo (live filesystem), o segundo dos discos "
+"do CDROM do FreeBSD, é útil se você tem espaço limitado. O que está no "
+"sistema de arquivos ao vivo varia de versão para versão. Você pode tentar "
+"jogar jogos do CDROM. Isso envolve o uso do `lndir`, que é instalado com o X "
+"Window System, para informar ao(s) programa(s) onde encontrar os arquivos "
+"necessários, pois eles estão em [.filename]#/cdrom# em vez de em [."
+"filename]#/usr# e seus subdiretórios, onde são esperados. Leia `man lndir`."
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:478
+#, no-wrap
+msgid "Comments Welcome"
+msgstr "Comentários são bem-vindos"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/new-users/_index.adoc:482
+msgid ""
+"If you use this guide I would be interested in knowing where it was unclear "
+"and what was left out that you think should be included, and if it was "
+"helpful. My thanks to Eugene W. Stark, professor of computer science at "
+"SUNY-Stony Brook, and John Fieber for helpful comments."
+msgstr ""
+"Se você usou este guia, ficaria interessado em saber onde não ficou claro e "
+"o que foi deixado de fora que você acha que deveria ser incluído, e se foi "
+"útil. Meus agradecimentos a Eugene W. Stark, professor de ciência da "
+"computação da SUNY-Stony Brook, e John Fieber por seus comentários úteis."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/new-users/_index.adoc:483
+msgid ""
+"Annelise Anderson, mailto:andrsn@andrsn.stanford.edu[andrsn@andrsn.stanford."
+"edu]"
+msgstr ""
+"Annelise Anderson, mailto:andrsn@andrsn.stanford.edu[andrsn@andrsn.stanford."
+"edu]"
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/pgpkeys/_index.adoc b/documentation/content/pt-br/articles/pgpkeys/_index.adoc
index 880a4ceb72..2b09008f1e 100644
--- a/documentation/content/pt-br/articles/pgpkeys/_index.adoc
+++ b/documentation/content/pt-br/articles/pgpkeys/_index.adoc
@@ -1,5 +1,7 @@
---
-title: Chaves OpenPGP
+description: 'Lista de chaves OpenPGP que podem ser usadas para verificar uma assinatura ou enviar e-mail criptografado para oficiais ou desenvolvedores do FreeBSD.org.'
+tags: ["OpenPGP", "Developers", "Officers", "FreeBSD"]
+title: 'Chaves OpenPGP'
---
= Chaves OpenPGP
@@ -43,1750 +45,1408 @@ endif::[]
toc::[]
-Estas chaves OpenPGP podem ser usadas para verificar uma assinatura ou enviar um email criptografado para officers ou desenvolvedores do `FreeBSD.org`. Todas as chaves podem ser baixadas em link:https://www.FreeBSD.org/doc/pgpkeyring.txt[https://www.FreeBSD.org/doc/pgpkeyring.txt].
+Estas chaves OpenPGP podem ser usadas para verificar uma assinatura ou enviar um email criptografado para oficiais ou desenvolvedores do `FreeBSD.org`. Todas as chaves podem ser baixadas em link:https://docs.FreeBSD.org/pgpkeys/pgpkeys.txt[pgpkeyring.txt].
+
+////
+Do not edit this file except as instructed by the addkey.sh script.
+
+See the README file in /data/pgpkeys for instructions.
+
+This article contains all the keys. The officer keys are also
+shown in the Handbook PGP keys chapter.
+////
[[pgpkeys-officers]]
-== Officers
+== Oficiais
=== {security-officer-name} `<{security-officer-email}>`
-include::static/pgpkeys/security-officer.key[]
-
-=== {secteam-secretary-name} `<{secteam-secretary-email}>`
-include::static/pgpkeys/secteam-secretary.key[]
+include::{include-path}security-officer.key[]
=== {core-secretary-name} `<{core-secretary-email}>`
-include::static/pgpkeys/core-secretary.key[]
+include::{include-path}core-secretary.key[]
=== {portmgr-secretary-name} `<{portmgr-secretary-email}>`
-include::static/pgpkeys/portmgr-secretary.key[]
+include::{include-path}portmgr-secretary.key[]
-=== `{doceng-secretary-email}`
-include::static/pgpkeys/doceng-secretary.key[]
+=== {doceng-secretary-name} `<{doceng-secretary-email}>`
+include::{include-path}doceng-secretary.key[]
[[pgpkeys-core]]
== Membros do Core Team
=== `{bapt}`
-include::static/pgpkeys/bapt.key[]
-
-=== `{emaste}`
-include::static/pgpkeys/emaste.key[]
+include::{include-path}bapt.key[]
-=== `{gnn}`
-include::static/pgpkeys/gnn.key[]
+=== `{bcr}`
+include::{include-path}bcr.key[]
-=== `{hrs}`
-include::static/pgpkeys/hrs.key[]
+=== `{grog}`
+include::{include-path}grog.key[]
-=== `{imp}`
-include::static/pgpkeys/imp.key[]
+=== `{jhb}`
+include::{include-path}jhb.key[]
-=== `{kevans}`
-include::static/pgpkeys/kevans.key[]
+=== `{lwhsu}`
+include::{include-path}lwhsu.key[]
-=== `{markj}`
-include::static/pgpkeys/markj.key[]
+=== `{manu}`
+include::{include-path}manu.key[]
-=== `{scottl}`
-include::static/pgpkeys/scottl.key[]
+=== `{tcberner}`
+include::{include-path}tcberner.key[]
-=== `{seanc}`
-include::static/pgpkeys/seanc.key[]
+=== `{0mp}`
+include::{include-path}0mp.key[]
[[pgpkeys-developers]]
== Desenvolvedores
+=== `{jgh}`
+include::{include-path}jgh.key[]
+
=== `{ariff}`
-include::static/pgpkeys/ariff.key[]
+include::{include-path}ariff.key[]
=== `{tabthorpe}`
-include::static/pgpkeys/tabthorpe.key[]
+include::{include-path}tabthorpe.key[]
=== `{eadler}`
-include::static/pgpkeys/eadler.key[]
+include::{include-path}eadler.key[]
-=== `{mahrens}`
-include::static/pgpkeys/mahrens.key[]
+=== `{pauamma}`
+include::{include-path}pauamma.key[]
=== `{shaun}`
-include::static/pgpkeys/shaun.key[]
+include::{include-path}shaun.key[]
=== `{brix}`
-include::static/pgpkeys/brix.key[]
+include::{include-path}brix.key[]
=== `{mandree}`
-include::static/pgpkeys/mandree.key[]
+include::{include-path}mandree.key[]
=== `{will}`
-include::static/pgpkeys/will.key[]
+include::{include-path}will.key[]
=== `{dim}`
-include::static/pgpkeys/dim.key[]
+include::{include-path}dim.key[]
=== `{anholt}`
-include::static/pgpkeys/anholt.key[]
+include::{include-path}anholt.key[]
=== `{fernape}`
-include::static/pgpkeys/fernape.key[]
+include::{include-path}fernape.key[]
=== `{mva}`
-include::static/pgpkeys/mva.key[]
+include::{include-path}mva.key[]
=== `{araujo}`
-include::static/pgpkeys/araujo.key[]
+include::{include-path}araujo.key[]
=== `{mat}`
-include::static/pgpkeys/mat.key[]
+include::{include-path}mat.key[]
=== `{syuu}`
-include::static/pgpkeys/syuu.key[]
+include::{include-path}syuu.key[]
=== `{asami}`
-include::static/pgpkeys/asami.key[]
-
-=== `{gavin}`
-include::static/pgpkeys/gavin.key[]
+include::{include-path}asami.key[]
=== `{jsa}`
-include::static/pgpkeys/jsa.key[]
+include::{include-path}jsa.key[]
=== `{jadawin}`
-include::static/pgpkeys/jadawin.key[]
+include::{include-path}jadawin.key[]
=== `{jwb}`
-include::static/pgpkeys/jwb.key[]
-
-=== `{badger}`
-include::static/pgpkeys/badger.key[]
+include::{include-path}jwb.key[]
=== `{dbaio}`
-include::static/pgpkeys/dbaio.key[]
+include::{include-path}dbaio.key[]
=== `{timur}`
-include::static/pgpkeys/timur.key[]
+include::{include-path}timur.key[]
=== `{jhb}`
-include::static/pgpkeys/jhb.key[]
+include::{include-path}jhb.key[]
=== `{gjb}`
-include::static/pgpkeys/gjb.key[]
+include::{include-path}gjb.key[]
=== `{snb}`
-include::static/pgpkeys/snb.key[]
+include::{include-path}snb.key[]
=== `{barner}`
-include::static/pgpkeys/barner.key[]
+include::{include-path}barner.key[]
=== `{lbartoletti}`
-include::static/pgpkeys/lbartoletti.key[]
-
-=== `{jbeich}`
-include::static/pgpkeys/jbeich.key[]
+include::{include-path}lbartoletti.key[]
=== `{art}`
-include::static/pgpkeys/art.key[]
+include::{include-path}art.key[]
=== `{tobez}`
-include::static/pgpkeys/tobez.key[]
+include::{include-path}tobez.key[]
=== `{damien}`
-include::static/pgpkeys/damien.key[]
+include::{include-path}damien.key[]
=== `{bdragon}`
-include::static/pgpkeys/bdragon.key[]
+include::{include-path}bdragon.key[]
=== `{tcberner}`
-include::static/pgpkeys/tcberner.key[]
+include::{include-path}tcberner.key[]
=== `{tdb}`
-include::static/pgpkeys/tdb.key[]
-
-=== `{gblach}`
-include::static/pgpkeys/gblach.key[]
+include::{include-path}tdb.key[]
=== `{mbr}`
-include::static/pgpkeys/mbr.key[]
-
-=== `{wblock}`
-include::static/pgpkeys/wblock.key[]
+include::{include-path}mbr.key[]
=== `{bvs}`
-include::static/pgpkeys/bvs.key[]
-
-=== `{zbb}`
-include::static/pgpkeys/zbb.key[]
+include::{include-path}bvs.key[]
=== `{novel}`
-include::static/pgpkeys/novel.key[]
+include::{include-path}novel.key[]
=== `{garga}`
-include::static/pgpkeys/garga.key[]
+include::{include-path}garga.key[]
=== `{kbowling}`
-include::static/pgpkeys/kbowling.key[]
+include::{include-path}kbowling.key[]
=== `{alexbl}`
-include::static/pgpkeys/alexbl.key[]
-
-=== `{sbz}`
-include::static/pgpkeys/sbz.key[]
+include::{include-path}alexbl.key[]
=== `{ebrandi}`
-include::static/pgpkeys/ebrandi.key[]
-
-=== `{dab}`
-include::static/pgpkeys/dab.key[]
+include::{include-path}ebrandi.key[]
=== `{harti}`
-include::static/pgpkeys/harti.key[]
+include::{include-path}harti.key[]
=== `{obraun}`
-include::static/pgpkeys/obraun.key[]
+include::{include-path}obraun.key[]
=== `{makc}`
-include::static/pgpkeys/makc.key[]
+include::{include-path}makc.key[]
=== `{jmb}`
-include::static/pgpkeys/jmb.key[]
+include::{include-path}jmb.key[]
=== `{antoine}`
-include::static/pgpkeys/antoine.key[]
+include::{include-path}antoine.key[]
=== `{db}`
-include::static/pgpkeys/db.key[]
+include::{include-path}db.key[]
=== `{brueffer}`
-include::static/pgpkeys/brueffer.key[]
+include::{include-path}brueffer.key[]
=== `{markus}`
-include::static/pgpkeys/markus.key[]
-
-=== `{sbruno}`
-include::static/pgpkeys/sbruno.key[]
+include::{include-path}markus.key[]
=== `{br}`
-include::static/pgpkeys/br.key[]
-
-=== `{oleg}`
-include::static/pgpkeys/oleg.key[]
-
-=== `{bushman}`
-include::static/pgpkeys/bushman.key[]
-
-=== `{adrian}`
-include::static/pgpkeys/adrian.key[]
+include::{include-path}br.key[]
=== `{jch}`
-include::static/pgpkeys/jch.key[]
+include::{include-path}jch.key[]
=== `{jchandra}`
-include::static/pgpkeys/jchandra.key[]
+include::{include-path}jchandra.key[]
=== `{jcamou}`
-include::static/pgpkeys/jcamou.key[]
+include::{include-path}jcamou.key[]
=== `{acm}`
-include::static/pgpkeys/acm.key[]
+include::{include-path}acm.key[]
=== `{gahr}`
-include::static/pgpkeys/gahr.key[]
+include::{include-path}gahr.key[]
=== `{dchagin}`
-include::static/pgpkeys/dchagin.key[]
+include::{include-path}dchagin.key[]
=== `{perky}`
-include::static/pgpkeys/perky.key[]
+include::{include-path}perky.key[]
=== `{jon}`
-include::static/pgpkeys/jon.key[]
+include::{include-path}jon.key[]
=== `{jonathan}`
-include::static/pgpkeys/jonathan.key[]
+include::{include-path}jonathan.key[]
=== `{loader}`
-include::static/pgpkeys/loader.key[]
+include::{include-path}loader.key[]
=== `{luoqi}`
-include::static/pgpkeys/luoqi.key[]
+include::{include-path}luoqi.key[]
=== `{ache}`
-include::static/pgpkeys/ache.key[]
+include::{include-path}ache.key[]
=== `{melifaro}`
-include::static/pgpkeys/melifaro.key[]
-
-=== `{seanc}`
-include::static/pgpkeys/seanc.key[]
+include::{include-path}melifaro.key[]
=== `{cjh}`
-include::static/pgpkeys/cjh.key[]
+include::{include-path}cjh.key[]
=== `{davidch}`
-include::static/pgpkeys/davidch.key[]
+include::{include-path}davidch.key[]
=== `{milki}`
-include::static/pgpkeys/milki.key[]
+include::{include-path}milki.key[]
=== `{cjc}`
-include::static/pgpkeys/cjc.key[]
+include::{include-path}cjc.key[]
=== `{marcus}`
-include::static/pgpkeys/marcus.key[]
+include::{include-path}marcus.key[]
=== `{nik}`
-include::static/pgpkeys/nik.key[]
+include::{include-path}nik.key[]
=== `{benjsc}`
-include::static/pgpkeys/benjsc.key[]
+include::{include-path}benjsc.key[]
-=== `{ngie}`
-include::static/pgpkeys/ngie.key[]
+=== `{lcook}`
+include::{include-path}lcook.key[]
-=== `{tijl}`
-include::static/pgpkeys/tijl.key[]
+=== `{ngie}`
+include::{include-path}ngie.key[]
=== `{rakuco}`
-include::static/pgpkeys/rakuco.key[]
-
-=== `{dch}`
-include::static/pgpkeys/dch.key[]
+include::{include-path}rakuco.key[]
=== `{alc}`
-include::static/pgpkeys/alc.key[]
+include::{include-path}alc.key[]
=== `{olivier}`
-include::static/pgpkeys/olivier.key[]
-
-=== `{jeb}`
-include::static/pgpkeys/jeb.key[]
+include::{include-path}olivier.key[]
=== `{bcran}`
-include::static/pgpkeys/bcran.key[]
+include::{include-path}bcran.key[]
=== `{culot}`
-include::static/pgpkeys/culot.key[]
-
-=== `{aaron}`
-include::static/pgpkeys/aaron.key[]
+include::{include-path}culot.key[]
=== `{alfredo}`
-include::static/pgpkeys/alfredo.key[]
+include::{include-path}alfredo.key[]
=== `{bapt}`
-include::static/pgpkeys/bapt.key[]
+include::{include-path}bapt.key[]
=== `{ceri}`
-include::static/pgpkeys/ceri.key[]
-
-=== `{brd}`
-include::static/pgpkeys/brd.key[]
+include::{include-path}ceri.key[]
=== `{edavis}`
-include::static/pgpkeys/edavis.key[]
-
-=== `{pjd}`
-include::static/pgpkeys/pjd.key[]
+include::{include-path}edavis.key[]
=== `{alexey}`
-include::static/pgpkeys/alexey.key[]
+include::{include-path}alexey.key[]
=== `{bsd}`
-include::static/pgpkeys/bsd.key[]
+include::{include-path}bsd.key[]
=== `{carl}`
-include::static/pgpkeys/carl.key[]
+include::{include-path}carl.key[]
=== `{carlavilla}`
-include::static/pgpkeys/carlavilla.key[]
-
-=== `{jmd}`
-include::static/pgpkeys/jmd.key[]
+include::{include-path}carlavilla.key[]
=== `{vd}`
-include::static/pgpkeys/vd.key[]
+include::{include-path}vd.key[]
=== `{rdivacky}`
-include::static/pgpkeys/rdivacky.key[]
+include::{include-path}rdivacky.key[]
=== `{danfe}`
-include::static/pgpkeys/danfe.key[]
+include::{include-path}danfe.key[]
=== `{dd}`
-include::static/pgpkeys/dd.key[]
+include::{include-path}dd.key[]
=== `{bdrewery}`
-include::static/pgpkeys/bdrewery.key[]
+include::{include-path}bdrewery.key[]
=== `{gad}`
-include::static/pgpkeys/gad.key[]
+include::{include-path}gad.key[]
+
+=== `{kd}`
+include::{include-path}kd.key[]
=== `{olivierd}`
-include::static/pgpkeys/olivierd.key[]
+include::{include-path}olivierd.key[]
=== `{bruno}`
-include::static/pgpkeys/bruno.key[]
+include::{include-path}bruno.key[]
=== `{ale}`
-include::static/pgpkeys/ale.key[]
+include::{include-path}ale.key[]
=== `{nemysis}`
-include::static/pgpkeys/nemysis.key[]
+include::{include-path}nemysis.key[]
=== `{peadar}`
-include::static/pgpkeys/peadar.key[]
+include::{include-path}peadar.key[]
=== `{deischen}`
-include::static/pgpkeys/deischen.key[]
-
-=== `{josef}`
-include::static/pgpkeys/josef.key[]
+include::{include-path}deischen.key[]
-=== `{lme}`
-include::static/pgpkeys/lme.key[]
+=== `{diizzy}`
+include::{include-path}diizzy.key[]
=== `{ue}`
-include::static/pgpkeys/ue.key[]
-
-=== `{ru}`
-include::static/pgpkeys/ru.key[]
-
-=== `{le}`
-include::static/pgpkeys/le.key[]
-
-=== `{se}`
-include::static/pgpkeys/se.key[]
-
-=== `{kevans}`
-include::static/pgpkeys/kevans.key[]
-
-=== `{bf}`
-include::static/pgpkeys/bf.key[]
-
-=== `{sef}`
-include::static/pgpkeys/sef.key[]
+include::{include-path}ue.key[]
=== `{madpilot}`
-include::static/pgpkeys/madpilot.key[]
+include::{include-path}madpilot.key[]
=== `{rafan}`
-include::static/pgpkeys/rafan.key[]
+include::{include-path}rafan.key[]
=== `{kami}`
-include::static/pgpkeys/kami.key[]
-
-=== `{stefanf}`
-include::static/pgpkeys/stefanf.key[]
+include::{include-path}kami.key[]
=== `{farrokhi}`
-include::static/pgpkeys/farrokhi.key[]
+include::{include-path}farrokhi.key[]
=== `{jedgar}`
-include::static/pgpkeys/jedgar.key[]
+include::{include-path}jedgar.key[]
=== `{mfechner}`
-include::static/pgpkeys/mfechner.key[]
+include::{include-path}mfechner.key[]
=== `{feld}`
-include::static/pgpkeys/feld.key[]
+include::{include-path}feld.key[]
=== `{green}`
-include::static/pgpkeys/green.key[]
-
-=== `{lioux}`
-include::static/pgpkeys/lioux.key[]
-
-=== `{mdf}`
-include::static/pgpkeys/mdf.key[]
+include::{include-path}green.key[]
=== `{fanf}`
-include::static/pgpkeys/fanf.key[]
+include::{include-path}fanf.key[]
=== `{blackend}`
-include::static/pgpkeys/blackend.key[]
+include::{include-path}blackend.key[]
=== `{petef}`
-include::static/pgpkeys/petef.key[]
+include::{include-path}petef.key[]
=== `{decke}`
-include::static/pgpkeys/decke.key[]
+include::{include-path}decke.key[]
=== `{landonf}`
-include::static/pgpkeys/landonf.key[]
+include::{include-path}landonf.key[]
=== `{billf}`
-include::static/pgpkeys/billf.key[]
+include::{include-path}billf.key[]
-=== `{sg}`
-include::static/pgpkeys/sg.key[]
+=== `{grembo}`
+include::{include-path}grembo.key[]
=== `{sgalabov}`
-include::static/pgpkeys/sgalabov.key[]
-
-=== `{ultima}`
-include::static/pgpkeys/ultima.key[]
+include::{include-path}sgalabov.key[]
=== `{avg}`
-include::static/pgpkeys/avg.key[]
+include::{include-path}avg.key[]
=== `{beat}`
-include::static/pgpkeys/beat.key[]
-
-=== `{danger}`
-include::static/pgpkeys/danger.key[]
+include::{include-path}beat.key[]
=== `{sjg}`
-include::static/pgpkeys/sjg.key[]
+include::{include-path}sjg.key[]
=== `{gibbs}`
-include::static/pgpkeys/gibbs.key[]
+include::{include-path}gibbs.key[]
=== `{pfg}`
-include::static/pgpkeys/pfg.key[]
+include::{include-path}pfg.key[]
=== `{girgen}`
-include::static/pgpkeys/girgen.key[]
+include::{include-path}girgen.key[]
=== `{eugen}`
-include::static/pgpkeys/eugen.key[]
+include::{include-path}eugen.key[]
=== `{pgollucci}`
-include::static/pgpkeys/pgollucci.key[]
+include::{include-path}pgollucci.key[]
=== `{trociny}`
-include::static/pgpkeys/trociny.key[]
-
-=== `{danilo}`
-include::static/pgpkeys/danilo.key[]
+include::{include-path}trociny.key[]
=== `{dmgk}`
-include::static/pgpkeys/dmgk.key[]
+include::{include-path}dmgk.key[]
=== `{daichi}`
-include::static/pgpkeys/daichi.key[]
-
-=== `{mnag}`
-include::static/pgpkeys/mnag.key[]
+include::{include-path}daichi.key[]
=== `{grehan}`
-include::static/pgpkeys/grehan.key[]
+include::{include-path}grehan.key[]
=== `{jamie}`
-include::static/pgpkeys/jamie.key[]
+include::{include-path}jamie.key[]
=== `{adridg}`
-include::static/pgpkeys/adridg.key[]
-
-=== `{edwin}`
-include::static/pgpkeys/edwin.key[]
+include::{include-path}adridg.key[]
=== `{wg}`
-include::static/pgpkeys/wg.key[]
+include::{include-path}wg.key[]
=== `{bar}`
-include::static/pgpkeys/bar.key[]
-
-=== `{anish}`
-include::static/pgpkeys/anish.key[]
+include::{include-path}bar.key[]
=== `{jmg}`
-include::static/pgpkeys/jmg.key[]
+include::{include-path}jmg.key[]
=== `{mjg}`
-include::static/pgpkeys/mjg.key[]
+include::{include-path}mjg.key[]
=== `{jhale}`
-include::static/pgpkeys/jhale.key[]
-
-=== `{jah}`
-include::static/pgpkeys/jah.key[]
+include::{include-path}jhale.key[]
=== `{dannyboy}`
-include::static/pgpkeys/dannyboy.key[]
+include::{include-path}dannyboy.key[]
=== `{dhartmei}`
-include::static/pgpkeys/dhartmei.key[]
+include::{include-path}dhartmei.key[]
=== `{ohauer}`
-include::static/pgpkeys/ohauer.key[]
+include::{include-path}ohauer.key[]
=== `{ehaupt}`
-include::static/pgpkeys/ehaupt.key[]
+include::{include-path}ehaupt.key[]
=== `{jhay}`
-include::static/pgpkeys/jhay.key[]
+include::{include-path}jhay.key[]
=== `{bhd}`
-include::static/pgpkeys/bhd.key[]
+include::{include-path}bhd.key[]
=== `{sheldonh}`
-include::static/pgpkeys/sheldonh.key[]
+include::{include-path}sheldonh.key[]
=== `{mikeh}`
-include::static/pgpkeys/mikeh.key[]
+include::{include-path}mikeh.key[]
=== `{mheinen}`
-include::static/pgpkeys/mheinen.key[]
+include::{include-path}mheinen.key[]
=== `{niels}`
-include::static/pgpkeys/niels.key[]
-
-=== `{jh}`
-include::static/pgpkeys/jh.key[]
-
-=== `{jgh}`
-include::static/pgpkeys/jgh.key[]
+include::{include-path}niels.key[]
=== `{ghelmer}`
-include::static/pgpkeys/ghelmer.key[]
+include::{include-path}ghelmer.key[]
=== `{mux}`
-include::static/pgpkeys/mux.key[]
+include::{include-path}mux.key[]
=== `{wen}`
-include::static/pgpkeys/wen.key[]
+include::{include-path}wen.key[]
=== `{dhn}`
-include::static/pgpkeys/dhn.key[]
+include::{include-path}dhn.key[]
=== `{jhibbits}`
-include::static/pgpkeys/jhibbits.key[]
+include::{include-path}jhibbits.key[]
=== `{jhixson}`
-include::static/pgpkeys/jhixson.key[]
+include::{include-path}jhixson.key[]
=== `{pho}`
-include::static/pgpkeys/pho.key[]
+include::{include-path}pho.key[]
+
+=== `{oh}`
+include::{include-path}oh.key[]
=== `{mhorne}`
-include::static/pgpkeys/mhorne.key[]
+include::{include-path}mhorne.key[]
=== `{bhughes}`
-include::static/pgpkeys/bhughes.key[]
-
-=== `{mich}`
-include::static/pgpkeys/mich.key[]
+include::{include-path}bhughes.key[]
=== `{sunpoet}`
-include::static/pgpkeys/sunpoet.key[]
+include::{include-path}sunpoet.key[]
=== `{lwhsu}`
-include::static/pgpkeys/lwhsu.key[]
+include::{include-path}lwhsu.key[]
=== `{foxfair}`
-include::static/pgpkeys/foxfair.key[]
+include::{include-path}foxfair.key[]
=== `{whu}`
-include::static/pgpkeys/whu.key[]
+include::{include-path}whu.key[]
=== `{chinsan}`
-include::static/pgpkeys/chinsan.key[]
-
-=== `{shurd}`
-include::static/pgpkeys/shurd.key[]
-
-=== `{kibab}`
-include::static/pgpkeys/kibab.key[]
+include::{include-path}chinsan.key[]
=== `{davide}`
-include::static/pgpkeys/davide.key[]
+include::{include-path}davide.key[]
=== `{jkh}`
-include::static/pgpkeys/jkh.key[]
-
-=== `{sevan}`
-include::static/pgpkeys/sevan.key[]
+include::{include-path}jkh.key[]
=== `{versus}`
-include::static/pgpkeys/versus.key[]
+include::{include-path}versus.key[]
=== `{pi}`
-include::static/pgpkeys/pi.key[]
+include::{include-path}pi.key[]
=== `{weongyo}`
-include::static/pgpkeys/weongyo.key[]
+include::{include-path}weongyo.key[]
=== `{peterj}`
-include::static/pgpkeys/peterj.key[]
+include::{include-path}peterj.key[]
=== `{jinmei}`
-include::static/pgpkeys/jinmei.key[]
+include::{include-path}jinmei.key[]
=== `{ahze}`
-include::static/pgpkeys/ahze.key[]
+include::{include-path}ahze.key[]
=== `{markj}`
-include::static/pgpkeys/markj.key[]
+include::{include-path}markj.key[]
=== `{trevor}`
-include::static/pgpkeys/trevor.key[]
-
-=== `{thj}`
-include::static/pgpkeys/thj.key[]
-
-=== `{mjoras}`
-include::static/pgpkeys/mjoras.key[]
+include::{include-path}trevor.key[]
=== `{erj}`
-include::static/pgpkeys/erj.key[]
+include::{include-path}erj.key[]
=== `{allanjude}`
-include::static/pgpkeys/allanjude.key[]
-
-=== `{tj}`
-include::static/pgpkeys/tj.key[]
-
-=== `{kan}`
-include::static/pgpkeys/kan.key[]
+include::{include-path}allanjude.key[]
=== `{bjk}`
-include::static/pgpkeys/bjk.key[]
+include::{include-path}bjk.key[]
=== `{phk}`
-include::static/pgpkeys/phk.key[]
+include::{include-path}phk.key[]
=== `{pluknet}`
-include::static/pgpkeys/pluknet.key[]
+include::{include-path}pluknet.key[]
=== `{cokane}`
-include::static/pgpkeys/cokane.key[]
+include::{include-path}cokane.key[]
=== `{karels}`
-include::static/pgpkeys/karels.key[]
+include::{include-path}karels.key[]
=== `{kato}`
-include::static/pgpkeys/kato.key[]
-
-=== `{joe}`
-include::static/pgpkeys/joe.key[]
+include::{include-path}kato.key[]
=== `{vkashyap}`
-include::static/pgpkeys/vkashyap.key[]
-
-=== `{pkelsey}`
-include::static/pgpkeys/pkelsey.key[]
+include::{include-path}vkashyap.key[]
=== `{pkubaj}`
-include::static/pgpkeys/pkubaj.key[]
+include::{include-path}pkubaj.key[]
=== `{kris}`
-include::static/pgpkeys/kris.key[]
+include::{include-path}kris.key[]
=== `{keramida}`
-include::static/pgpkeys/keramida.key[]
+include::{include-path}keramida.key[]
=== `{fjoe}`
-include::static/pgpkeys/fjoe.key[]
+include::{include-path}fjoe.key[]
=== `{manolis}`
-include::static/pgpkeys/manolis.key[]
+include::{include-path}manolis.key[]
=== `{stevek}`
-include::static/pgpkeys/stevek.key[]
+include::{include-path}stevek.key[]
=== `{jkim}`
-include::static/pgpkeys/jkim.key[]
+include::{include-path}jkim.key[]
=== `{zack}`
-include::static/pgpkeys/zack.key[]
+include::{include-path}zack.key[]
=== `{jceel}`
-include::static/pgpkeys/jceel.key[]
+include::{include-path}jceel.key[]
=== `{andreas}`
-include::static/pgpkeys/andreas.key[]
+include::{include-path}andreas.key[]
=== `{kai}`
-include::static/pgpkeys/kai.key[]
+include::{include-path}kai.key[]
=== `{jkois}`
-include::static/pgpkeys/jkois.key[]
+include::{include-path}jkois.key[]
=== `{sergei}`
-include::static/pgpkeys/sergei.key[]
-
-=== `{wulf}`
-include::static/pgpkeys/wulf.key[]
+include::{include-path}sergei.key[]
=== `{maxim}`
-include::static/pgpkeys/maxim.key[]
+include::{include-path}maxim.key[]
=== `{taras}`
-include::static/pgpkeys/taras.key[]
+include::{include-path}taras.key[]
=== `{tobik}`
-include::static/pgpkeys/tobik.key[]
+include::{include-path}tobik.key[]
=== `{jkoshy}`
-include::static/pgpkeys/jkoshy.key[]
+include::{include-path}jkoshy.key[]
=== `{wkoszek}`
-include::static/pgpkeys/wkoszek.key[]
+include::{include-path}wkoszek.key[]
=== `{ak}`
-include::static/pgpkeys/ak.key[]
-
-=== `{skra}`
-include::static/pgpkeys/skra.key[]
-
-=== `{skreuzer}`
-include::static/pgpkeys/skreuzer.key[]
+include::{include-path}ak.key[]
=== `{gabor}`
-include::static/pgpkeys/gabor.key[]
+include::{include-path}gabor.key[]
=== `{anchie}`
-include::static/pgpkeys/anchie.key[]
-
-=== `{rik}`
-include::static/pgpkeys/rik.key[]
+include::{include-path}anchie.key[]
=== `{rushani}`
-include::static/pgpkeys/rushani.key[]
+include::{include-path}rushani.key[]
=== `{kuriyama}`
-include::static/pgpkeys/kuriyama.key[]
-
-=== `{gleb}`
-include::static/pgpkeys/gleb.key[]
+include::{include-path}kuriyama.key[]
=== `{rene}`
-include::static/pgpkeys/rene.key[]
+include::{include-path}rene.key[]
=== `{jlaffaye}`
-include::static/pgpkeys/jlaffaye.key[]
+include::{include-path}jlaffaye.key[]
=== `{clement}`
-include::static/pgpkeys/clement.key[]
+include::{include-path}clement.key[]
=== `{mlaier}`
-include::static/pgpkeys/mlaier.key[]
-
-=== `{dvl}`
-include::static/pgpkeys/dvl.key[]
-
-=== `{erwin}`
-include::static/pgpkeys/erwin.key[]
+include::{include-path}mlaier.key[]
=== `{martymac}`
-include::static/pgpkeys/martymac.key[]
+include::{include-path}martymac.key[]
=== `{glarkin}`
-include::static/pgpkeys/glarkin.key[]
-
-=== `{laszlof}`
-include::static/pgpkeys/laszlof.key[]
+include::{include-path}glarkin.key[]
=== `{dru}`
-include::static/pgpkeys/dru.key[]
+include::{include-path}dru.key[]
=== `{lawrance}`
-include::static/pgpkeys/lawrance.key[]
+include::{include-path}lawrance.key[]
=== `{njl}`
-include::static/pgpkeys/njl.key[]
+include::{include-path}njl.key[]
=== `{jlh}`
-include::static/pgpkeys/jlh.key[]
+include::{include-path}jlh.key[]
=== `{leeym}`
-include::static/pgpkeys/leeym.key[]
+include::{include-path}leeym.key[]
=== `{sam}`
-include::static/pgpkeys/sam.key[]
+include::{include-path}sam.key[]
=== `{jylefort}`
-include::static/pgpkeys/jylefort.key[]
+include::{include-path}jylefort.key[]
=== `{grog}`
-include::static/pgpkeys/grog.key[]
+include::{include-path}grog.key[]
=== `{oliver}`
-include::static/pgpkeys/oliver.key[]
+include::{include-path}oliver.key[]
=== `{netchild}`
-include::static/pgpkeys/netchild.key[]
+include::{include-path}netchild.key[]
=== `{leitao}`
-include::static/pgpkeys/leitao.key[]
+include::{include-path}leitao.key[]
=== `{ae}`
-include::static/pgpkeys/ae.key[]
+include::{include-path}ae.key[]
=== `{lesi}`
-include::static/pgpkeys/lesi.key[]
+include::{include-path}lesi.key[]
=== `{achim}`
-include::static/pgpkeys/achim.key[]
+include::{include-path}achim.key[]
=== `{cel}`
-include::static/pgpkeys/cel.key[]
-
-=== `{truckman}`
-include::static/pgpkeys/truckman.key[]
+include::{include-path}cel.key[]
=== `{glewis}`
-include::static/pgpkeys/glewis.key[]
+include::{include-path}glewis.key[]
-=== `{qingli}`
-include::static/pgpkeys/qingli.key[]
+=== `{vishwin}`
+include::{include-path}vishwin.key[]
=== `{delphij}`
-include::static/pgpkeys/delphij.key[]
+include::{include-path}delphij.key[]
=== `{avatar}`
-include::static/pgpkeys/avatar.key[]
+include::{include-path}avatar.key[]
=== `{ijliao}`
-include::static/pgpkeys/ijliao.key[]
+include::{include-path}ijliao.key[]
=== `{rlibby}`
-include::static/pgpkeys/rlibby.key[]
-
-=== `{lidl}`
-include::static/pgpkeys/lidl.key[]
-
-=== `{lifanov}`
-include::static/pgpkeys/lifanov.key[]
-
-=== `{lulf}`
-include::static/pgpkeys/lulf.key[]
-
-=== `{clive}`
-include::static/pgpkeys/clive.key[]
+include::{include-path}rlibby.key[]
=== `{pclin}`
-include::static/pgpkeys/pclin.key[]
+include::{include-path}pclin.key[]
=== `{yzlin}`
-include::static/pgpkeys/yzlin.key[]
+include::{include-path}yzlin.key[]
=== `{linimon}`
-include::static/pgpkeys/linimon.key[]
+include::{include-path}linimon.key[]
=== `{arved}`
-include::static/pgpkeys/arved.key[]
+include::{include-path}arved.key[]
=== `{dryice}`
-include::static/pgpkeys/dryice.key[]
+include::{include-path}dryice.key[]
=== `{nemoliu}`
-include::static/pgpkeys/nemoliu.key[]
+include::{include-path}nemoliu.key[]
=== `{kevlo}`
-include::static/pgpkeys/kevlo.key[]
+include::{include-path}kevlo.key[]
=== `{zml}`
-include::static/pgpkeys/zml.key[]
+include::{include-path}zml.key[]
=== `{nox}`
-include::static/pgpkeys/nox.key[]
-
-=== `{remko}`
-include::static/pgpkeys/remko.key[]
+include::{include-path}nox.key[]
=== `{avl}`
-include::static/pgpkeys/avl.key[]
-
-=== `{issyl0}`
-include::static/pgpkeys/issyl0.key[]
+include::{include-path}avl.key[]
=== `{scottl}`
-include::static/pgpkeys/scottl.key[]
-
-=== `{jtl}`
-include::static/pgpkeys/jtl.key[]
-
-=== `{luporl}`
-include::static/pgpkeys/luporl.key[]
-
-=== `{wma}`
-include::static/pgpkeys/wma.key[]
+include::{include-path}scottl.key[]
=== `{rmacklem}`
-include::static/pgpkeys/rmacklem.key[]
+include::{include-path}rmacklem.key[]
=== `{vmaffione}`
-include::static/pgpkeys/vmaffione.key[]
+include::{include-path}vmaffione.key[]
=== `{bmah}`
-include::static/pgpkeys/bmah.key[]
+include::{include-path}bmah.key[]
=== `{rm}`
-include::static/pgpkeys/rm.key[]
+include::{include-path}rm.key[]
=== `{mtm}`
-include::static/pgpkeys/mtm.key[]
+include::{include-path}mtm.key[]
=== `{dwmalone}`
-include::static/pgpkeys/dwmalone.key[]
-
-=== `{amdmi3}`
-include::static/pgpkeys/amdmi3.key[]
+include::{include-path}dwmalone.key[]
=== `{marino}`
-include::static/pgpkeys/marino.key[]
-
-=== `{kwm}`
-include::static/pgpkeys/kwm.key[]
-
-=== `{emaste}`
-include::static/pgpkeys/emaste.key[]
+include::{include-path}marino.key[]
=== `{cherry}`
-include::static/pgpkeys/cherry.key[]
+include::{include-path}cherry.key[]
=== `{matusita}`
-include::static/pgpkeys/matusita.key[]
+include::{include-path}matusita.key[]
=== `{mm}`
-include::static/pgpkeys/mm.key[]
+include::{include-path}mm.key[]
=== `{sem}`
-include::static/pgpkeys/sem.key[]
-
-=== `{slm}`
-include::static/pgpkeys/slm.key[]
-
-=== `{mckay}`
-include::static/pgpkeys/mckay.key[]
+include::{include-path}sem.key[]
=== `{mckusick}`
-include::static/pgpkeys/mckusick.key[]
+include::{include-path}mckusick.key[]
=== `{tmclaugh}`
-include::static/pgpkeys/tmclaugh.key[]
-
-=== `{jmcneill}`
-include::static/pgpkeys/jmcneill.key[]
-
-=== `{xmj}`
-include::static/pgpkeys/xmj.key[]
+include::{include-path}tmclaugh.key[]
=== `{jmelo}`
-include::static/pgpkeys/jmelo.key[]
+include::{include-path}jmelo.key[]
=== `{mmel}`
-include::static/pgpkeys/mmel.key[]
+include::{include-path}mmel.key[]
=== `{jmmv}`
-include::static/pgpkeys/jmmv.key[]
+include::{include-path}jmmv.key[]
=== `{kadesai}`
-include::static/pgpkeys/kadesai.key[]
+include::{include-path}kadesai.key[]
=== `{ken}`
-include::static/pgpkeys/ken.key[]
+include::{include-path}ken.key[]
=== `{markm}`
-include::static/pgpkeys/markm.key[]
+include::{include-path}markm.key[]
=== `{dinoex}`
-include::static/pgpkeys/dinoex.key[]
+include::{include-path}dinoex.key[]
=== `{sanpei}`
-include::static/pgpkeys/sanpei.key[]
+include::{include-path}sanpei.key[]
=== `{rmh}`
-include::static/pgpkeys/rmh.key[]
+include::{include-path}rmh.key[]
+
+=== `{driesm}`
+include::{include-path}driesm.key[]
=== `{jrm}`
-include::static/pgpkeys/jrm.key[]
+include::{include-path}jrm.key[]
=== `{freqlabs}`
-include::static/pgpkeys/freqlabs.key[]
-
-=== `{mmokhi}`
-include::static/pgpkeys/mmokhi.key[]
+include::{include-path}freqlabs.key[]
=== `{mmoll}`
-include::static/pgpkeys/mmoll.key[]
+include::{include-path}mmoll.key[]
=== `{cmt}`
-include::static/pgpkeys/cmt.key[]
+include::{include-path}cmt.key[]
=== `{stephen}`
-include::static/pgpkeys/stephen.key[]
+include::{include-path}stephen.key[]
=== `{marcel}`
-include::static/pgpkeys/marcel.key[]
+include::{include-path}marcel.key[]
=== `{dougm}`
-include::static/pgpkeys/dougm.key[]
+include::{include-path}dougm.key[]
=== `{kmoore}`
-include::static/pgpkeys/kmoore.key[]
+include::{include-path}kmoore.key[]
=== `{marck}`
-include::static/pgpkeys/marck.key[]
+include::{include-path}marck.key[]
=== `{mav}`
-include::static/pgpkeys/mav.key[]
-
-=== `{lippe}`
-include::static/pgpkeys/lippe.key[]
+include::{include-path}mav.key[]
=== `{rich}`
-include::static/pgpkeys/rich.key[]
+include::{include-path}rich.key[]
=== `{knu}`
-include::static/pgpkeys/knu.key[]
+include::{include-path}knu.key[]
=== `{tmm}`
-include::static/pgpkeys/tmm.key[]
-
-=== `{jsm}`
-include::static/pgpkeys/jsm.key[]
+include::{include-path}tmm.key[]
=== `{max}`
-include::static/pgpkeys/max.key[]
+include::{include-path}max.key[]
=== `{maho}`
-include::static/pgpkeys/maho.key[]
+include::{include-path}maho.key[]
=== `{yoichi}`
-include::static/pgpkeys/yoichi.key[]
-
-=== `{trasz}`
-include::static/pgpkeys/trasz.key[]
-
-=== `{neel}`
-include::static/pgpkeys/neel.key[]
-
-=== `{dbn}`
-include::static/pgpkeys/dbn.key[]
+include::{include-path}yoichi.key[]
=== `{bland}`
-include::static/pgpkeys/bland.key[]
-
-=== `{joneum}`
-include::static/pgpkeys/joneum.key[]
+include::{include-path}bland.key[]
=== `{gnn}`
-include::static/pgpkeys/gnn.key[]
+include::{include-path}gnn.key[]
+
+=== `{khng}`
+include::{include-path}khng.key[]
=== `{simon}`
-include::static/pgpkeys/simon.key[]
+include::{include-path}simon.key[]
=== `{rnoland}`
-include::static/pgpkeys/rnoland.key[]
+include::{include-path}rnoland.key[]
=== `{anders}`
-include::static/pgpkeys/anders.key[]
+include::{include-path}anders.key[]
=== `{lofi}`
-include::static/pgpkeys/lofi.key[]
+include::{include-path}lofi.key[]
=== `{obrien}`
-include::static/pgpkeys/obrien.key[]
+include::{include-path}obrien.key[]
=== `{olgeni}`
-include::static/pgpkeys/olgeni.key[]
-
-=== `{phil}`
-include::static/pgpkeys/phil.key[]
+include::{include-path}olgeni.key[]
=== `{philip}`
-include::static/pgpkeys/philip.key[]
+include::{include-path}philip.key[]
=== `{jpaetzel}`
-include::static/pgpkeys/jpaetzel.key[]
+include::{include-path}jpaetzel.key[]
-=== `{pgj}`
-include::static/pgpkeys/pgj.key[]
+=== `{zirias}`
+include::{include-path}zirias.key[]
=== `{hiren}`
-include::static/pgpkeys/hiren.key[]
+include::{include-path}hiren.key[]
=== `{hmp}`
-include::static/pgpkeys/hmp.key[]
-
-=== `{yuripv}`
-include::static/pgpkeys/yuripv.key[]
+include::{include-path}hmp.key[]
=== `{fluffy}`
-include::static/pgpkeys/fluffy.key[]
+include::{include-path}fluffy.key[]
=== `{sat}`
-include::static/pgpkeys/sat.key[]
+include::{include-path}sat.key[]
=== `{np}`
-include::static/pgpkeys/np.key[]
+include::{include-path}np.key[]
=== `{royger}`
-include::static/pgpkeys/royger.key[]
+include::{include-path}royger.key[]
=== `{rpaulo}`
-include::static/pgpkeys/rpaulo.key[]
-
-=== `{misha}`
-include::static/pgpkeys/misha.key[]
+include::{include-path}rpaulo.key[]
-=== `{dumbbell}`
-include::static/pgpkeys/dumbbell.key[]
+=== `{rpokala}`
+include::{include-path}rpokala.key[]
=== `{mp}`
-include::static/pgpkeys/mp.key[]
+include::{include-path}mp.key[]
=== `{roam}`
-include::static/pgpkeys/roam.key[]
+include::{include-path}roam.key[]
=== `{den}`
-include::static/pgpkeys/den.key[]
+include::{include-path}den.key[]
=== `{csjp}`
-include::static/pgpkeys/csjp.key[]
+include::{include-path}csjp.key[]
+
+=== `{grahamperrin}`
+include::{include-path}grahamperrin.key[]
=== `{gerald}`
-include::static/pgpkeys/gerald.key[]
+include::{include-path}gerald.key[]
=== `{scottph}`
-include::static/pgpkeys/scottph.key[]
+include::{include-path}scottph.key[]
=== `{jacula}`
-include::static/pgpkeys/jacula.key[]
+include::{include-path}jacula.key[]
=== `{0mp}`
-include::static/pgpkeys/0mp.key[]
-
-=== `{pizzamig}`
-include::static/pgpkeys/pizzamig.key[]
-
-=== `{rpokala}`
-include::static/pgpkeys/rpokala.key[]
+include::{include-path}0mp.key[]
=== `{jdp}`
-include::static/pgpkeys/jdp.key[]
+include::{include-path}jdp.key[]
=== `{krion}`
-include::static/pgpkeys/krion.key[]
+include::{include-path}krion.key[]
=== `{sepotvin}`
-include::static/pgpkeys/sepotvin.key[]
+include::{include-path}sepotvin.key[]
=== `{cpm}`
-include::static/pgpkeys/cpm.key[]
+include::{include-path}cpm.key[]
=== `{markp}`
-include::static/pgpkeys/markp.key[]
+include::{include-path}markp.key[]
=== `{alepulver}`
-include::static/pgpkeys/alepulver.key[]
+include::{include-path}alepulver.key[]
=== `{kp}`
-include::static/pgpkeys/kp.key[]
+include::{include-path}kp.key[]
=== `{thomas}`
-include::static/pgpkeys/thomas.key[]
+include::{include-path}thomas.key[]
=== `{hq}`
-include::static/pgpkeys/hq.key[]
-
-=== `{dfr}`
-include::static/pgpkeys/dfr.key[]
+include::{include-path}hq.key[]
=== `{bofh}`
-include::static/pgpkeys/bofh.key[]
+include::{include-path}bofh.key[]
=== `{fox}`
-include::static/pgpkeys/fox.key[]
+include::{include-path}fox.key[]
=== `{lbr}`
-include::static/pgpkeys/lbr.key[]
+include::{include-path}lbr.key[]
=== `{crees}`
-include::static/pgpkeys/crees.key[]
+include::{include-path}crees.key[]
=== `{rees}`
-include::static/pgpkeys/rees.key[]
+include::{include-path}rees.key[]
=== `{mr}`
-include::static/pgpkeys/mr.key[]
+include::{include-path}mr.key[]
=== `{bcr}`
-include::static/pgpkeys/bcr.key[]
-
-=== `{rezny}`
-include::static/pgpkeys/rezny.key[]
+include::{include-path}bcr.key[]
=== `{trhodes}`
-include::static/pgpkeys/trhodes.key[]
+include::{include-path}trhodes.key[]
=== `{benno}`
-include::static/pgpkeys/benno.key[]
-
-=== `{arichardson}`
-include::static/pgpkeys/arichardson.key[]
+include::{include-path}benno.key[]
=== `{beech}`
-include::static/pgpkeys/beech.key[]
-
-=== `{matteo}`
-include::static/pgpkeys/matteo.key[]
+include::{include-path}beech.key[]
=== `{roberto}`
-include::static/pgpkeys/roberto.key[]
+include::{include-path}roberto.key[]
=== `{rodrigc}`
-include::static/pgpkeys/rodrigc.key[]
+include::{include-path}rodrigc.key[]
=== `{ler}`
-include::static/pgpkeys/ler.key[]
+include::{include-path}ler.key[]
=== `{leres}`
-include::static/pgpkeys/leres.key[]
+include::{include-path}leres.key[]
=== `{robak}`
-include::static/pgpkeys/robak.key[]
+include::{include-path}robak.key[]
=== `{guido}`
-include::static/pgpkeys/guido.key[]
+include::{include-path}guido.key[]
=== `{rea}`
-include::static/pgpkeys/rea.key[]
+include::{include-path}rea.key[]
=== `{ray}`
-include::static/pgpkeys/ray.key[]
-
-=== `{arybchik}`
-include::static/pgpkeys/arybchik.key[]
+include::{include-path}ray.key[]
=== `{niklas}`
-include::static/pgpkeys/niklas.key[]
+include::{include-path}niklas.key[]
=== `{salvadore}`
-include::static/pgpkeys/salvadore.key[]
+include::{include-path}salvadore.key[]
=== `{bsam}`
-include::static/pgpkeys/bsam.key[]
+include::{include-path}bsam.key[]
=== `{marks}`
-include::static/pgpkeys/marks.key[]
-
-=== `{alonso}`
-include::static/pgpkeys/alonso.key[]
+include::{include-path}marks.key[]
=== `{bschmidt}`
-include::static/pgpkeys/bschmidt.key[]
+include::{include-path}bschmidt.key[]
=== `{wosch}`
-include::static/pgpkeys/wosch.key[]
-
-=== `{ed}`
-include::static/pgpkeys/ed.key[]
+include::{include-path}wosch.key[]
=== `{cy}`
-include::static/pgpkeys/cy.key[]
+include::{include-path}cy.key[]
=== `{das}`
-include::static/pgpkeys/das.key[]
+include::{include-path}das.key[]
=== `{scheidell}`
-include::static/pgpkeys/scheidell.key[]
-
-=== `{schweikh}`
-include::static/pgpkeys/schweikh.key[]
+include::{include-path}scheidell.key[]
=== `{matthew}`
-include::static/pgpkeys/matthew.key[]
+include::{include-path}matthew.key[]
=== `{tmseck}`
-include::static/pgpkeys/tmseck.key[]
-
-=== `{stas}`
-include::static/pgpkeys/stas.key[]
-
-=== `{johalun}`
-include::static/pgpkeys/johalun.key[]
+include::{include-path}tmseck.key[]
=== `{johans}`
-include::static/pgpkeys/johans.key[]
-
-=== `{lev}`
-include::static/pgpkeys/lev.key[]
+include::{include-path}johans.key[]
=== `{bakul}`
-include::static/pgpkeys/bakul.key[]
+include::{include-path}bakul.key[]
=== `{gshapiro}`
-include::static/pgpkeys/gshapiro.key[]
-
-=== `{arun}`
-include::static/pgpkeys/arun.key[]
+include::{include-path}gshapiro.key[]
=== `{wxs}`
-include::static/pgpkeys/wxs.key[]
+include::{include-path}wxs.key[]
=== `{nork}`
-include::static/pgpkeys/nork.key[]
+include::{include-path}nork.key[]
=== `{syrinx}`
-include::static/pgpkeys/syrinx.key[]
+include::{include-path}syrinx.key[]
=== `{vanilla}`
-include::static/pgpkeys/vanilla.key[]
+include::{include-path}vanilla.key[]
=== `{ashish}`
-include::static/pgpkeys/ashish.key[]
+include::{include-path}ashish.key[]
+
+=== `{asiciliano}`
+include::{include-path}asiciliano.key[]
=== `{chs}`
-include::static/pgpkeys/chs.key[]
+include::{include-path}chs.key[]
=== `{bms}`
-include::static/pgpkeys/bms.key[]
+include::{include-path}bms.key[]
=== `{demon}`
-include::static/pgpkeys/demon.key[]
+include::{include-path}demon.key[]
=== `{jesper}`
-include::static/pgpkeys/jesper.key[]
+include::{include-path}jesper.key[]
=== `{scop}`
-include::static/pgpkeys/scop.key[]
+include::{include-path}scop.key[]
=== `{anray}`
-include::static/pgpkeys/anray.key[]
+include::{include-path}anray.key[]
=== `{flo}`
-include::static/pgpkeys/flo.key[]
+include::{include-path}flo.key[]
=== `{glebius}`
-include::static/pgpkeys/glebius.key[]
+include::{include-path}glebius.key[]
=== `{kensmith}`
-include::static/pgpkeys/kensmith.key[]
+include::{include-path}kensmith.key[]
=== `{ben}`
-include::static/pgpkeys/ben.key[]
+include::{include-path}ben.key[]
=== `{des}`
-include::static/pgpkeys/des.key[]
+include::{include-path}des.key[]
=== `{sobomax}`
-include::static/pgpkeys/sobomax.key[]
+include::{include-path}sobomax.key[]
=== `{asomers}`
-include::static/pgpkeys/asomers.key[]
+include::{include-path}asomers.key[]
=== `{brian}`
-include::static/pgpkeys/brian.key[]
+include::{include-path}brian.key[]
=== `{sson}`
-include::static/pgpkeys/sson.key[]
+include::{include-path}sson.key[]
=== `{nsouch}`
-include::static/pgpkeys/nsouch.key[]
+include::{include-path}nsouch.key[]
=== `{ssouhlal}`
-include::static/pgpkeys/ssouhlal.key[]
-
-=== `{tsoome}`
-include::static/pgpkeys/tsoome.key[]
+include::{include-path}ssouhlal.key[]
=== `{loos}`
-include::static/pgpkeys/loos.key[]
+include::{include-path}loos.key[]
=== `{brnrd}`
-include::static/pgpkeys/brnrd.key[]
-
-=== `{uqs}`
-include::static/pgpkeys/uqs.key[]
+include::{include-path}brnrd.key[]
=== `{rink}`
-include::static/pgpkeys/rink.key[]
+include::{include-path}rink.key[]
=== `{vsevolod}`
-include::static/pgpkeys/vsevolod.key[]
+include::{include-path}vsevolod.key[]
=== `{pstef}`
-include::static/pgpkeys/pstef.key[]
+include::{include-path}pstef.key[]
=== `{zi}`
-include::static/pgpkeys/zi.key[]
+include::{include-path}zi.key[]
=== `{lstewart}`
-include::static/pgpkeys/lstewart.key[]
-
-=== `{rrs}`
-include::static/pgpkeys/rrs.key[]
+include::{include-path}lstewart.key[]
=== `{murray}`
-include::static/pgpkeys/murray.key[]
+include::{include-path}murray.key[]
=== `{vs}`
-include::static/pgpkeys/vs.key[]
-
-=== `{rstone}`
-include::static/pgpkeys/rstone.key[]
+include::{include-path}vs.key[]
=== `{xride}`
-include::static/pgpkeys/xride.key[]
+include::{include-path}xride.key[]
=== `{marius}`
-include::static/pgpkeys/marius.key[]
+include::{include-path}marius.key[]
=== `{cs}`
-include::static/pgpkeys/cs.key[]
+include::{include-path}cs.key[]
=== `{clsung}`
-include::static/pgpkeys/clsung.key[]
+include::{include-path}clsung.key[]
=== `{gsutter}`
-include::static/pgpkeys/gsutter.key[]
+include::{include-path}gsutter.key[]
=== `{metal}`
-include::static/pgpkeys/metal.key[]
+include::{include-path}metal.key[]
=== `{ryusuke}`
-include::static/pgpkeys/ryusuke.key[]
-
-=== `{garys}`
-include::static/pgpkeys/garys.key[]
+include::{include-path}ryusuke.key[]
=== `{nyan}`
-include::static/pgpkeys/nyan.key[]
+include::{include-path}nyan.key[]
=== `{sahil}`
-include::static/pgpkeys/sahil.key[]
+include::{include-path}sahil.key[]
=== `{tota}`
-include::static/pgpkeys/tota.key[]
+include::{include-path}tota.key[]
=== `{romain}`
-include::static/pgpkeys/romain.key[]
+include::{include-path}romain.key[]
-=== `{sylvio}`
-include::static/pgpkeys/sylvio.key[]
+=== `{eduardo}`
+include::{include-path}eduardo.key[]
-=== `{dteske}`
-include::static/pgpkeys/dteske.key[]
+=== `{sylvio}`
+include::{include-path}sylvio.key[]
=== `{itetcu}`
-include::static/pgpkeys/itetcu.key[]
+include::{include-path}itetcu.key[]
=== `{mi}`
-include::static/pgpkeys/mi.key[]
+include::{include-path}mi.key[]
=== `{gordon}`
-include::static/pgpkeys/gordon.key[]
+include::{include-path}gordon.key[]
=== `{lth}`
-include::static/pgpkeys/lth.key[]
-
-=== `{jase}`
-include::static/pgpkeys/jase.key[]
-
-=== `{lx}`
-include::static/pgpkeys/lx.key[]
+include::{include-path}lth.key[]
=== `{fabient}`
-include::static/pgpkeys/fabient.key[]
+include::{include-path}fabient.key[]
=== `{thierry}`
-include::static/pgpkeys/thierry.key[]
+include::{include-path}thierry.key[]
=== `{thompsa}`
-include::static/pgpkeys/thompsa.key[]
+include::{include-path}thompsa.key[]
=== `{flz}`
-include::static/pgpkeys/flz.key[]
+include::{include-path}flz.key[]
=== `{jilles}`
-include::static/pgpkeys/jilles.key[]
+include::{include-path}jilles.key[]
=== `{ganbold}`
-include::static/pgpkeys/ganbold.key[]
+include::{include-path}ganbold.key[]
=== `{tuexen}`
-include::static/pgpkeys/tuexen.key[]
-
-=== `{andrew}`
-include::static/pgpkeys/andrew.key[]
+include::{include-path}tuexen.key[]
=== `{gonzo}`
-include::static/pgpkeys/gonzo.key[]
+include::{include-path}gonzo.key[]
=== `{ume}`
-include::static/pgpkeys/ume.key[]
-
-=== `{junovitch}`
-include::static/pgpkeys/junovitch.key[]
+include::{include-path}ume.key[]
=== `{ups}`
-include::static/pgpkeys/ups.key[]
+include::{include-path}ups.key[]
=== `{fsu}`
-include::static/pgpkeys/fsu.key[]
+include::{include-path}fsu.key[]
=== `{mikael}`
-include::static/pgpkeys/mikael.key[]
-
-=== `{ivadasz}`
-include::static/pgpkeys/ivadasz.key[]
+include::{include-path}mikael.key[]
=== `{manu}`
-include::static/pgpkeys/manu.key[]
-
-=== `{vangyzen}`
-include::static/pgpkeys/vangyzen.key[]
+include::{include-path}manu.key[]
=== `{ram}`
-include::static/pgpkeys/ram.key[]
+include::{include-path}ram.key[]
=== `{bryanv}`
-include::static/pgpkeys/bryanv.key[]
+include::{include-path}bryanv.key[]
=== `{nectar}`
-include::static/pgpkeys/nectar.key[]
+include::{include-path}nectar.key[]
=== `{avilla}`
-include::static/pgpkeys/avilla.key[]
+include::{include-path}avilla.key[]
=== `{nivit}`
-include::static/pgpkeys/nivit.key[]
+include::{include-path}nivit.key[]
=== `{ivoras}`
-include::static/pgpkeys/ivoras.key[]
-
-=== `{avos}`
-include::static/pgpkeys/avos.key[]
+include::{include-path}ivoras.key[]
=== `{stefan}`
-include::static/pgpkeys/stefan.key[]
+include::{include-path}stefan.key[]
=== `{kaiw}`
-include::static/pgpkeys/kaiw.key[]
+include::{include-path}kaiw.key[]
=== `{adamw}`
-include::static/pgpkeys/adamw.key[]
+include::{include-path}adamw.key[]
=== `{naddy}`
-include::static/pgpkeys/naddy.key[]
+include::{include-path}naddy.key[]
=== `{peter}`
-include::static/pgpkeys/peter.key[]
+include::{include-path}peter.key[]
=== `{nwhitehorn}`
-include::static/pgpkeys/nwhitehorn.key[]
+include::{include-path}nwhitehorn.key[]
=== `{miwi}`
-include::static/pgpkeys/miwi.key[]
+include::{include-path}miwi.key[]
=== `{nate}`
-include::static/pgpkeys/nate.key[]
-
-=== `{swills}`
-include::static/pgpkeys/swills.key[]
+include::{include-path}nate.key[]
=== `{twinterg}`
-include::static/pgpkeys/twinterg.key[]
+include::{include-path}twinterg.key[]
=== `{def}`
-include::static/pgpkeys/def.key[]
-
-=== `{mw}`
-include::static/pgpkeys/mw.key[]
+include::{include-path}def.key[]
=== `{wollman}`
-include::static/pgpkeys/wollman.key[]
-
-=== `{woodsb02}`
-include::static/pgpkeys/woodsb02.key[]
+include::{include-path}wollman.key[]
=== `{joerg}`
-include::static/pgpkeys/joerg.key[]
-
-=== `{davidxu}`
-include::static/pgpkeys/davidxu.key[]
+include::{include-path}joerg.key[]
=== `{ygy}`
-include::static/pgpkeys/ygy.key[]
+include::{include-path}ygy.key[]
=== `{emax}`
-include::static/pgpkeys/emax.key[]
-
-=== `{yongari}`
-include::static/pgpkeys/yongari.key[]
-
-=== `{rcyu}`
-include::static/pgpkeys/rcyu.key[]
+include::{include-path}emax.key[]
=== `{oshogbo}`
-include::static/pgpkeys/oshogbo.key[]
+include::{include-path}oshogbo.key[]
=== `{riggs}`
-include::static/pgpkeys/riggs.key[]
+include::{include-path}riggs.key[]
=== `{egypcio}`
-include::static/pgpkeys/egypcio.key[]
+include::{include-path}egypcio.key[]
=== `{bz}`
-include::static/pgpkeys/bz.key[]
+include::{include-path}bz.key[]
+
+=== `{dsl}`
+include::{include-path}dsl.key[]
=== `{zeising}`
-include::static/pgpkeys/zeising.key[]
+include::{include-path}zeising.key[]
=== `{phantom}`
-include::static/pgpkeys/phantom.key[]
-
-=== `{sephe}`
-include::static/pgpkeys/sephe.key[]
-
-=== `{mizhka}`
-include::static/pgpkeys/mizhka.key[]
-
-=== `{zont}`
-include::static/pgpkeys/zont.key[]
+include::{include-path}phantom.key[]
=== `{tz}`
-include::static/pgpkeys/tz.key[]
-
-=== `{yuri}`
-include::static/pgpkeys/yuri.key[]
-
-=== `{slavash}`
-include::static/pgpkeys/slavash.key[]
-
-=== `{arrowd}`
-include::static/pgpkeys/arrowd.key[]
+include::{include-path}tz.key[]
=== `{rigoletto}`
-include::static/pgpkeys/rigoletto.key[]
+include::{include-path}rigoletto.key[]
=== `{kaktus}`
-include::static/pgpkeys/kaktus.key[]
+include::{include-path}kaktus.key[]
=== `{samm}`
-include::static/pgpkeys/samm.key[]
+include::{include-path}samm.key[]
+
+=== `{arrowd}`
+include::{include-path}arrowd.key[]
[[pgpkeys-other]]
== Outros Detentores de Contas no Cluster
-=== `{arundel}`
-include::static/pgpkeys/arundel.key[]
-
-=== `{bhaga}`
-include::static/pgpkeys/bhaga.key[]
-
=== `{bk}`
-include::static/pgpkeys/bk.key[]
+include::{include-path}bk.key[]
=== `{deb}`
-include::static/pgpkeys/deb.key[]
+include::{include-path}deb.key[]
=== `{debdrup}`
-include::static/pgpkeys/debdrup.key[]
+include::{include-path}debdrup.key[]
=== `{dutchdaemon}`
-include::static/pgpkeys/dutchdaemon.key[]
+include::{include-path}dutchdaemon.key[]
=== `{keymaster}`
-include::static/pgpkeys/keymaster.key[]
-
-=== `{plosher}`
-include::static/pgpkeys/plosher.key[]
+include::{include-path}keymaster.key[]
=== `{mwlucas}`
-include::static/pgpkeys/mwlucas.key[]
+include::{include-path}mwlucas.key[]
=== `{dhw}`
-include::static/pgpkeys/dhw.key[]
+include::{include-path}dhw.key[]
diff --git a/documentation/content/pt-br/articles/pgpkeys/_index.po b/documentation/content/pt-br/articles/pgpkeys/_index.po
new file mode 100644
index 0000000000..04e20cfe61
--- /dev/null
+++ b/documentation/content/pt-br/articles/pgpkeys/_index.po
@@ -0,0 +1,2824 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2022.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-10-07 13:52+0200\n"
+"PO-Revision-Date: 2022-10-09 19:16+0000\n"
+"Last-Translator: Danilo G. Baio <dbaio@FreeBSD.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlespgpkeys_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.10.1\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1
+#, no-wrap
+msgid "List of OpenPGP keys that can be used to verify a signature or send encrypted email to FreeBSD.org officers or developers."
+msgstr ""
+"Lista de chaves OpenPGP que podem ser usadas para verificar uma assinatura "
+"ou enviar e-mail criptografado para oficiais ou desenvolvedores do FreeBSD."
+"org."
+
+#. type: Title =
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1
+#: documentation/content/en/articles/pgpkeys/_index.adoc:7
+#, no-wrap
+msgid "OpenPGP Keys"
+msgstr "Chaves OpenPGP"
+
+#. type: Plain text
+#: documentation/content/en/articles/pgpkeys/_index.adoc:45
+msgid "'''"
+msgstr "'''"
+
+#. type: Plain text
+#: documentation/content/en/articles/pgpkeys/_index.adoc:50
+msgid ""
+"These OpenPGP keys can be used to verify a signature or send encrypted email "
+"to `FreeBSD.org` officers or developers. The complete keyring can be "
+"downloaded at link:https://docs.FreeBSD.org/pgpkeys/pgpkeys.txt[pgpkeyring."
+"txt]."
+msgstr ""
+"Estas chaves OpenPGP podem ser usadas para verificar uma assinatura ou "
+"enviar um email criptografado para oficiais ou desenvolvedores do `FreeBSD."
+"org`. Todas as chaves podem ser baixadas em link:https://docs.FreeBSD.org/"
+"pgpkeys/pgpkeys.txt[pgpkeyring.txt]."
+
+#
+#
+#. Do not edit this file except as instructed by the addkey.sh script.
+#. See the README file in /data/pgpkeys for instructions.
+#. This article contains all the keys. The officer keys are also
+#. shown in the Handbook PGP keys chapter.
+#. type: Title ==
+#: documentation/content/en/articles/pgpkeys/_index.adoc:61
+#, no-wrap
+msgid "Officers"
+msgstr "Oficiais"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:63
+#, no-wrap
+msgid "{security-officer-name} `<{security-officer-email}>`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:66
+#, no-wrap
+msgid "{secteam-secretary-name} `<{secteam-secretary-email}>`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:69
+#, no-wrap
+msgid "{core-secretary-name} `<{core-secretary-email}>`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:72
+#, no-wrap
+msgid "{portmgr-secretary-name} `<{portmgr-secretary-email}>`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:75
+#, no-wrap
+msgid "{doceng-secretary-name} `<{doceng-secretary-email}>`"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/pgpkeys/_index.adoc:79
+#, no-wrap
+msgid "Core Team Members"
+msgstr "Membros do Core Team"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:81
+#: documentation/content/en/articles/pgpkeys/_index.adoc:339
+#, no-wrap
+msgid "`{bapt}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:84
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1074
+#, no-wrap
+msgid "`{bcr}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:87
+#: documentation/content/en/articles/pgpkeys/_index.adoc:750
+#, no-wrap
+msgid "`{grog}`"
+msgstr "`{grog}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:90
+#: documentation/content/en/articles/pgpkeys/_index.adoc:174
+#, no-wrap
+msgid "`{jhb}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:93
+#: documentation/content/en/articles/pgpkeys/_index.adoc:573
+#, no-wrap
+msgid "`{lwhsu}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:96
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1335
+#, no-wrap
+msgid "`{manu}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:99
+#: documentation/content/en/articles/pgpkeys/_index.adoc:201
+#, no-wrap
+msgid "`{tcberner}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:102
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1026
+#, no-wrap
+msgid "`{0mp}`"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/pgpkeys/_index.adoc:106
+#, no-wrap
+msgid "Developers"
+msgstr "Desenvolvedores"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:108
+#, no-wrap
+msgid "`{jgh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:111
+#, no-wrap
+msgid "`{ariff}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:114
+#, no-wrap
+msgid "`{tabthorpe}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:117
+#, no-wrap
+msgid "`{eadler}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:120
+#, no-wrap
+msgid "`{pauamma}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:123
+#, no-wrap
+msgid "`{shaun}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:126
+#, no-wrap
+msgid "`{brix}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:129
+#, no-wrap
+msgid "`{mandree}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:132
+#, no-wrap
+msgid "`{will}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:135
+#, no-wrap
+msgid "`{dim}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:138
+#, no-wrap
+msgid "`{anholt}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:141
+#, no-wrap
+msgid "`{fernape}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:144
+#, no-wrap
+msgid "`{mva}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:147
+#, no-wrap
+msgid "`{araujo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:150
+#, no-wrap
+msgid "`{mat}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:153
+#, no-wrap
+msgid "`{syuu}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:156
+#, no-wrap
+msgid "`{asami}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:159
+#, no-wrap
+msgid "`{jsa}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:162
+#, no-wrap
+msgid "`{jadawin}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:165
+#, no-wrap
+msgid "`{jwb}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:168
+#, no-wrap
+msgid "`{dbaio}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:171
+#, no-wrap
+msgid "`{timur}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:177
+#, no-wrap
+msgid "`{gjb}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:180
+#, no-wrap
+msgid "`{snb}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:183
+#, no-wrap
+msgid "`{barner}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:186
+#, no-wrap
+msgid "`{lbartoletti}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:189
+#, no-wrap
+msgid "`{art}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:192
+#, no-wrap
+msgid "`{tobez}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:195
+#, no-wrap
+msgid "`{damien}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:198
+#, no-wrap
+msgid "`{bdragon}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:204
+#, no-wrap
+msgid "`{tdb}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:207
+#, no-wrap
+msgid "`{mbr}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:210
+#, no-wrap
+msgid "`{bvs}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:213
+#, no-wrap
+msgid "`{novel}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:216
+#, no-wrap
+msgid "`{garga}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:219
+#, no-wrap
+msgid "`{kbowling}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:222
+#, no-wrap
+msgid "`{alexbl}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:225
+#, no-wrap
+msgid "`{ebrandi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:228
+#, no-wrap
+msgid "`{harti}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:231
+#, no-wrap
+msgid "`{obraun}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:234
+#, no-wrap
+msgid "`{makc}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:237
+#, no-wrap
+msgid "`{jmb}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:240
+#, no-wrap
+msgid "`{antoine}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:243
+#, no-wrap
+msgid "`{db}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:246
+#, no-wrap
+msgid "`{brueffer}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:249
+#, no-wrap
+msgid "`{markus}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:252
+#, no-wrap
+msgid "`{br}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:255
+#, no-wrap
+msgid "`{jch}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:258
+#, no-wrap
+msgid "`{jchandra}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:261
+#, no-wrap
+msgid "`{jcamou}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:264
+#, no-wrap
+msgid "`{acm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:267
+#, no-wrap
+msgid "`{gahr}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:270
+#, no-wrap
+msgid "`{dchagin}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:273
+#, no-wrap
+msgid "`{perky}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:276
+#, no-wrap
+msgid "`{jon}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:279
+#, no-wrap
+msgid "`{jonathan}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:282
+#, no-wrap
+msgid "`{loader}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:285
+#, no-wrap
+msgid "`{luoqi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:288
+#, no-wrap
+msgid "`{ache}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:291
+#, no-wrap
+msgid "`{melifaro}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:294
+#, no-wrap
+msgid "`{cjh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:297
+#, no-wrap
+msgid "`{davidch}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:300
+#, no-wrap
+msgid "`{milki}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:303
+#, no-wrap
+msgid "`{cjc}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:306
+#, no-wrap
+msgid "`{marcus}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:309
+#, no-wrap
+msgid "`{nik}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:312
+#, no-wrap
+msgid "`{benjsc}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:315
+#, no-wrap
+msgid "`{lcook}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:318
+#, no-wrap
+msgid "`{ngie}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:321
+#, no-wrap
+msgid "`{rakuco}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:324
+#, no-wrap
+msgid "`{alc}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:327
+#, no-wrap
+msgid "`{olivier}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:330
+#, no-wrap
+msgid "`{bcran}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:333
+#, no-wrap
+msgid "`{culot}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:336
+#, no-wrap
+msgid "`{alfredo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:342
+#, no-wrap
+msgid "`{ceri}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:345
+#, no-wrap
+msgid "`{edavis}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:348
+#, no-wrap
+msgid "`{alexey}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:351
+#, no-wrap
+msgid "`{bsd}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:354
+#, no-wrap
+msgid "`{carl}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:357
+#, no-wrap
+msgid "`{carlavilla}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:360
+#, no-wrap
+msgid "`{vd}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:363
+#, no-wrap
+msgid "`{rdivacky}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:366
+#, no-wrap
+msgid "`{danfe}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:369
+#, no-wrap
+msgid "`{dd}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:372
+#, no-wrap
+msgid "`{bdrewery}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:375
+#, no-wrap
+msgid "`{gad}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:378
+#, no-wrap
+msgid "`{kd}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:381
+#, no-wrap
+msgid "`{olivierd}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:384
+#, no-wrap
+msgid "`{bruno}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:387
+#, no-wrap
+msgid "`{ale}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:390
+#, no-wrap
+msgid "`{nemysis}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:393
+#, no-wrap
+msgid "`{peadar}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:396
+#, no-wrap
+msgid "`{deischen}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:399
+#, no-wrap
+msgid "`{diizzy}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:402
+#, no-wrap
+msgid "`{ue}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:405
+#, no-wrap
+msgid "`{madpilot}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:408
+#, no-wrap
+msgid "`{rafan}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:411
+#, no-wrap
+msgid "`{kami}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:414
+#, no-wrap
+msgid "`{farrokhi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:417
+#, no-wrap
+msgid "`{jedgar}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:420
+#, no-wrap
+msgid "`{mfechner}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:423
+#, no-wrap
+msgid "`{feld}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:426
+#, no-wrap
+msgid "`{green}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:429
+#, no-wrap
+msgid "`{fanf}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:432
+#, no-wrap
+msgid "`{blackend}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:435
+#, no-wrap
+msgid "`{petef}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:438
+#, no-wrap
+msgid "`{decke}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:441
+#, no-wrap
+msgid "`{landonf}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:444
+#, no-wrap
+msgid "`{billf}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:447
+#, fuzzy, no-wrap
+#| msgid "`{grog}`"
+msgid "`{grembo}`"
+msgstr "`{grog}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:450
+#, no-wrap
+msgid "`{sgalabov}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:453
+#, no-wrap
+msgid "`{avg}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:456
+#, no-wrap
+msgid "`{beat}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:459
+#, no-wrap
+msgid "`{sjg}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:462
+#, no-wrap
+msgid "`{gibbs}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:465
+#, no-wrap
+msgid "`{pfg}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:468
+#, no-wrap
+msgid "`{girgen}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:471
+#, no-wrap
+msgid "`{eugen}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:474
+#, no-wrap
+msgid "`{pgollucci}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:477
+#, no-wrap
+msgid "`{trociny}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:480
+#, no-wrap
+msgid "`{dmgk}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:483
+#, no-wrap
+msgid "`{daichi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:486
+#, no-wrap
+msgid "`{grehan}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:489
+#, no-wrap
+msgid "`{jamie}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:492
+#, no-wrap
+msgid "`{adridg}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:495
+#, no-wrap
+msgid "`{wg}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:498
+#, no-wrap
+msgid "`{bar}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:501
+#, no-wrap
+msgid "`{jmg}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:504
+#, no-wrap
+msgid "`{mjg}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:507
+#, no-wrap
+msgid "`{jhale}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:510
+#, no-wrap
+msgid "`{dannyboy}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:513
+#, no-wrap
+msgid "`{dhartmei}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:516
+#, no-wrap
+msgid "`{ohauer}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:519
+#, no-wrap
+msgid "`{ehaupt}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:522
+#, no-wrap
+msgid "`{jhay}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:525
+#, no-wrap
+msgid "`{bhd}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:528
+#, no-wrap
+msgid "`{sheldonh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:531
+#, no-wrap
+msgid "`{mikeh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:534
+#, no-wrap
+msgid "`{mheinen}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:537
+#, no-wrap
+msgid "`{niels}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:540
+#, no-wrap
+msgid "`{ghelmer}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:543
+#, no-wrap
+msgid "`{mux}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:546
+#, no-wrap
+msgid "`{wen}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:549
+#, no-wrap
+msgid "`{dhn}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:552
+#, no-wrap
+msgid "`{jhibbits}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:555
+#, no-wrap
+msgid "`{jhixson}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:558
+#, no-wrap
+msgid "`{pho}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:561
+#, no-wrap
+msgid "`{oh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:564
+#, no-wrap
+msgid "`{mhorne}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:567
+#, no-wrap
+msgid "`{bhughes}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:570
+#, no-wrap
+msgid "`{sunpoet}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:576
+#, no-wrap
+msgid "`{foxfair}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:579
+#, no-wrap
+msgid "`{whu}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:582
+#, no-wrap
+msgid "`{chinsan}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:585
+#, no-wrap
+msgid "`{davide}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:588
+#, no-wrap
+msgid "`{jkh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:591
+#, no-wrap
+msgid "`{versus}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:594
+#, no-wrap
+msgid "`{pi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:597
+#, no-wrap
+msgid "`{weongyo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:600
+#, no-wrap
+msgid "`{peterj}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:603
+#, no-wrap
+msgid "`{jinmei}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:606
+#, no-wrap
+msgid "`{ahze}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:609
+#, no-wrap
+msgid "`{markj}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:612
+#, no-wrap
+msgid "`{trevor}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:615
+#, no-wrap
+msgid "`{erj}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:618
+#, no-wrap
+msgid "`{allanjude}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:621
+#, no-wrap
+msgid "`{bjk}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:624
+#, no-wrap
+msgid "`{phk}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:627
+#, no-wrap
+msgid "`{pluknet}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:630
+#, no-wrap
+msgid "`{cokane}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:633
+#, no-wrap
+msgid "`{karels}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:636
+#, no-wrap
+msgid "`{kato}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:639
+#, no-wrap
+msgid "`{vkashyap}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:642
+#, no-wrap
+msgid "`{pkubaj}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:645
+#, no-wrap
+msgid "`{kris}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:648
+#, no-wrap
+msgid "`{keramida}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:651
+#, no-wrap
+msgid "`{fjoe}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:654
+#, no-wrap
+msgid "`{manolis}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:657
+#, no-wrap
+msgid "`{stevek}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:660
+#, no-wrap
+msgid "`{jkim}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:663
+#, no-wrap
+msgid "`{zack}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:666
+#, no-wrap
+msgid "`{jceel}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:669
+#, no-wrap
+msgid "`{andreas}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:672
+#, no-wrap
+msgid "`{kai}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:675
+#, no-wrap
+msgid "`{jkois}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:678
+#, no-wrap
+msgid "`{sergei}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:681
+#, no-wrap
+msgid "`{maxim}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:684
+#, no-wrap
+msgid "`{taras}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:687
+#, no-wrap
+msgid "`{tobik}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:690
+#, no-wrap
+msgid "`{jkoshy}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:693
+#, no-wrap
+msgid "`{wkoszek}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:696
+#, no-wrap
+msgid "`{ak}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:699
+#, no-wrap
+msgid "`{gabor}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:702
+#, no-wrap
+msgid "`{anchie}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:705
+#, no-wrap
+msgid "`{rushani}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:708
+#, no-wrap
+msgid "`{kuriyama}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:711
+#, no-wrap
+msgid "`{rene}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:714
+#, no-wrap
+msgid "`{jlaffaye}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:717
+#, no-wrap
+msgid "`{clement}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:720
+#, no-wrap
+msgid "`{mlaier}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:723
+#, no-wrap
+msgid "`{martymac}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:726
+#, no-wrap
+msgid "`{glarkin}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:729
+#, no-wrap
+msgid "`{dru}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:732
+#, no-wrap
+msgid "`{lawrance}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:735
+#, no-wrap
+msgid "`{njl}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:738
+#, no-wrap
+msgid "`{jlh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:741
+#, no-wrap
+msgid "`{leeym}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:744
+#, no-wrap
+msgid "`{sam}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:747
+#, no-wrap
+msgid "`{jylefort}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:753
+#, no-wrap
+msgid "`{oliver}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:756
+#, no-wrap
+msgid "`{netchild}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:759
+#, no-wrap
+msgid "`{leitao}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:762
+#, no-wrap
+msgid "`{ae}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:765
+#, no-wrap
+msgid "`{lesi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:768
+#, no-wrap
+msgid "`{achim}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:771
+#, no-wrap
+msgid "`{cel}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:774
+#, no-wrap
+msgid "`{glewis}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:777
+#, no-wrap
+msgid "`{vishwin}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:780
+#, no-wrap
+msgid "`{delphij}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:783
+#, no-wrap
+msgid "`{avatar}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:786
+#, no-wrap
+msgid "`{ijliao}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:789
+#, no-wrap
+msgid "`{rlibby}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:792
+#, no-wrap
+msgid "`{pclin}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:795
+#, no-wrap
+msgid "`{yzlin}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:798
+#, no-wrap
+msgid "`{linimon}`"
+msgstr "`{linimon}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:801
+#, no-wrap
+msgid "`{arved}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:804
+#, no-wrap
+msgid "`{dryice}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:807
+#, no-wrap
+msgid "`{nemoliu}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:810
+#, no-wrap
+msgid "`{kevlo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:813
+#, no-wrap
+msgid "`{zml}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:816
+#, no-wrap
+msgid "`{nox}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:819
+#, no-wrap
+msgid "`{avl}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:822
+#, no-wrap
+msgid "`{scottl}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:825
+#, no-wrap
+msgid "`{rmacklem}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:828
+#, no-wrap
+msgid "`{vmaffione}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:831
+#, no-wrap
+msgid "`{bmah}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:834
+#, no-wrap
+msgid "`{rm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:837
+#, no-wrap
+msgid "`{mtm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:840
+#, no-wrap
+msgid "`{dwmalone}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:843
+#, no-wrap
+msgid "`{marino}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:846
+#, no-wrap
+msgid "`{cherry}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:849
+#, no-wrap
+msgid "`{matusita}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:852
+#, no-wrap
+msgid "`{mm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:855
+#, no-wrap
+msgid "`{sem}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:858
+#, no-wrap
+msgid "`{mckusick}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:861
+#, no-wrap
+msgid "`{tmclaugh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:864
+#, no-wrap
+msgid "`{jmelo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:867
+#, no-wrap
+msgid "`{mmel}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:870
+#, no-wrap
+msgid "`{jmmv}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:873
+#, no-wrap
+msgid "`{kadesai}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:876
+#, no-wrap
+msgid "`{ken}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:879
+#, no-wrap
+msgid "`{markm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:882
+#, no-wrap
+msgid "`{dinoex}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:885
+#, no-wrap
+msgid "`{sanpei}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:888
+#, no-wrap
+msgid "`{rmh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:891
+#, no-wrap
+msgid "`{driesm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:894
+#, no-wrap
+msgid "`{jrm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:897
+#, no-wrap
+msgid "`{freqlabs}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:900
+#, no-wrap
+msgid "`{mmoll}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:903
+#, no-wrap
+msgid "`{cmt}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:906
+#, no-wrap
+msgid "`{stephen}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:909
+#, no-wrap
+msgid "`{marcel}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:912
+#, no-wrap
+msgid "`{dougm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:915
+#, no-wrap
+msgid "`{kmoore}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:918
+#, no-wrap
+msgid "`{marck}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:921
+#, no-wrap
+msgid "`{mav}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:924
+#, no-wrap
+msgid "`{rich}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:927
+#, no-wrap
+msgid "`{knu}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:930
+#, no-wrap
+msgid "`{tmm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:933
+#, no-wrap
+msgid "`{max}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:936
+#, no-wrap
+msgid "`{maho}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:939
+#, no-wrap
+msgid "`{yoichi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:942
+#, no-wrap
+msgid "`{bland}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:945
+#, no-wrap
+msgid "`{gnn}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:948
+#, no-wrap
+msgid "`{khng}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:951
+#, no-wrap
+msgid "`{simon}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:954
+#, no-wrap
+msgid "`{rnoland}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:957
+#, no-wrap
+msgid "`{anders}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:960
+#, no-wrap
+msgid "`{lofi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:963
+#, no-wrap
+msgid "`{obrien}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:966
+#, no-wrap
+msgid "`{olgeni}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:969
+#, no-wrap
+msgid "`{philip}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:972
+#, no-wrap
+msgid "`{jpaetzel}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:975
+#, no-wrap
+msgid "`{zirias}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:978
+#, no-wrap
+msgid "`{hiren}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:981
+#, no-wrap
+msgid "`{hmp}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:984
+#, no-wrap
+msgid "`{fluffy}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:987
+#, no-wrap
+msgid "`{sat}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:990
+#, no-wrap
+msgid "`{np}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:993
+#, no-wrap
+msgid "`{royger}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:996
+#, no-wrap
+msgid "`{rpaulo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:999
+#, no-wrap
+msgid "`{rpokala}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1002
+#, no-wrap
+msgid "`{mp}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1005
+#, no-wrap
+msgid "`{roam}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1008
+#, no-wrap
+msgid "`{den}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1011
+#, no-wrap
+msgid "`{csjp}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1014
+#, no-wrap
+msgid "`{grahamperrin}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1017
+#, no-wrap
+msgid "`{gerald}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1020
+#, no-wrap
+msgid "`{scottph}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1023
+#, no-wrap
+msgid "`{jacula}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1029
+#, no-wrap
+msgid "`{jdp}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1032
+#, no-wrap
+msgid "`{krion}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1035
+#, no-wrap
+msgid "`{sepotvin}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1038
+#, no-wrap
+msgid "`{cpm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1041
+#, no-wrap
+msgid "`{markp}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1044
+#, no-wrap
+msgid "`{alepulver}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1047
+#, no-wrap
+msgid "`{kp}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1050
+#, no-wrap
+msgid "`{thomas}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1053
+#, no-wrap
+msgid "`{hq}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1056
+#, no-wrap
+msgid "`{bofh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1059
+#, no-wrap
+msgid "`{fox}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1062
+#, no-wrap
+msgid "`{lbr}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1065
+#, no-wrap
+msgid "`{crees}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1068
+#, no-wrap
+msgid "`{rees}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1071
+#, no-wrap
+msgid "`{mr}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1077
+#, no-wrap
+msgid "`{trhodes}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1080
+#, no-wrap
+msgid "`{benno}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1083
+#, no-wrap
+msgid "`{beech}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1086
+#, no-wrap
+msgid "`{roberto}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1089
+#, no-wrap
+msgid "`{rodrigc}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1092
+#, no-wrap
+msgid "`{ler}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1095
+#, no-wrap
+msgid "`{leres}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1098
+#, no-wrap
+msgid "`{robak}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1101
+#, no-wrap
+msgid "`{guido}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1104
+#, no-wrap
+msgid "`{rea}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1107
+#, no-wrap
+msgid "`{ray}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1110
+#, no-wrap
+msgid "`{niklas}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1113
+#, no-wrap
+msgid "`{salvadore}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1116
+#, no-wrap
+msgid "`{bsam}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1119
+#, no-wrap
+msgid "`{marks}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1122
+#, no-wrap
+msgid "`{bschmidt}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1125
+#, no-wrap
+msgid "`{wosch}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1128
+#, no-wrap
+msgid "`{cy}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1131
+#, no-wrap
+msgid "`{das}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1134
+#, no-wrap
+msgid "`{scheidell}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1137
+#, no-wrap
+msgid "`{matthew}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1140
+#, no-wrap
+msgid "`{tmseck}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1143
+#, no-wrap
+msgid "`{johans}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1146
+#, no-wrap
+msgid "`{bakul}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1149
+#, no-wrap
+msgid "`{gshapiro}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1152
+#, no-wrap
+msgid "`{wxs}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1155
+#, no-wrap
+msgid "`{nork}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1158
+#, no-wrap
+msgid "`{syrinx}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1161
+#, no-wrap
+msgid "`{vanilla}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1164
+#, no-wrap
+msgid "`{ashish}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1167
+#, no-wrap
+msgid "`{asiciliano}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1170
+#, no-wrap
+msgid "`{chs}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1173
+#, no-wrap
+msgid "`{bms}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1176
+#, no-wrap
+msgid "`{demon}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1179
+#, no-wrap
+msgid "`{jesper}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1182
+#, no-wrap
+msgid "`{scop}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1185
+#, no-wrap
+msgid "`{anray}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1188
+#, no-wrap
+msgid "`{flo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1191
+#, no-wrap
+msgid "`{glebius}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1194
+#, no-wrap
+msgid "`{kensmith}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1197
+#, no-wrap
+msgid "`{ben}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1200
+#, no-wrap
+msgid "`{des}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1203
+#, no-wrap
+msgid "`{sobomax}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1206
+#, no-wrap
+msgid "`{asomers}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1209
+#, no-wrap
+msgid "`{brian}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1212
+#, no-wrap
+msgid "`{sson}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1215
+#, no-wrap
+msgid "`{nsouch}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1218
+#, no-wrap
+msgid "`{ssouhlal}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1221
+#, no-wrap
+msgid "`{loos}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1224
+#, no-wrap
+msgid "`{brnrd}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1227
+#, no-wrap
+msgid "`{rink}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1230
+#, no-wrap
+msgid "`{vsevolod}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1233
+#, no-wrap
+msgid "`{pstef}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1236
+#, no-wrap
+msgid "`{zi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1239
+#, no-wrap
+msgid "`{lstewart}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1242
+#, no-wrap
+msgid "`{murray}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1245
+#, no-wrap
+msgid "`{vs}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1248
+#, no-wrap
+msgid "`{xride}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1251
+#, no-wrap
+msgid "`{marius}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1254
+#, no-wrap
+msgid "`{cs}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1257
+#, no-wrap
+msgid "`{clsung}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1260
+#, no-wrap
+msgid "`{gsutter}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1263
+#, no-wrap
+msgid "`{metal}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1266
+#, no-wrap
+msgid "`{ryusuke}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1269
+#, no-wrap
+msgid "`{nyan}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1272
+#, no-wrap
+msgid "`{sahil}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1275
+#, no-wrap
+msgid "`{tota}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1278
+#, no-wrap
+msgid "`{romain}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1281
+#, no-wrap
+msgid "`{eduardo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1284
+#, no-wrap
+msgid "`{sylvio}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1287
+#, no-wrap
+msgid "`{itetcu}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1290
+#, no-wrap
+msgid "`{mi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1293
+#, no-wrap
+msgid "`{gordon}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1296
+#, no-wrap
+msgid "`{lth}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1299
+#, no-wrap
+msgid "`{fabient}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1302
+#, no-wrap
+msgid "`{thierry}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1305
+#, no-wrap
+msgid "`{thompsa}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1308
+#, no-wrap
+msgid "`{flz}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1311
+#, no-wrap
+msgid "`{jilles}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1314
+#, no-wrap
+msgid "`{ganbold}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1317
+#, no-wrap
+msgid "`{tuexen}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1320
+#, no-wrap
+msgid "`{gonzo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1323
+#, no-wrap
+msgid "`{ume}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1326
+#, no-wrap
+msgid "`{ups}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1329
+#, no-wrap
+msgid "`{fsu}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1332
+#, no-wrap
+msgid "`{mikael}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1338
+#, no-wrap
+msgid "`{ram}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1341
+#, no-wrap
+msgid "`{bryanv}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1344
+#, no-wrap
+msgid "`{nectar}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1347
+#, no-wrap
+msgid "`{avilla}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1350
+#, no-wrap
+msgid "`{nivit}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1353
+#, no-wrap
+msgid "`{ivoras}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1356
+#, no-wrap
+msgid "`{stefan}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1359
+#, no-wrap
+msgid "`{kaiw}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1362
+#, no-wrap
+msgid "`{adamw}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1365
+#, no-wrap
+msgid "`{naddy}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1368
+#, no-wrap
+msgid "`{peter}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1371
+#, no-wrap
+msgid "`{nwhitehorn}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1374
+#, no-wrap
+msgid "`{miwi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1377
+#, no-wrap
+msgid "`{nate}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1380
+#, no-wrap
+msgid "`{twinterg}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1383
+#, no-wrap
+msgid "`{def}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1386
+#, no-wrap
+msgid "`{wollman}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1389
+#, no-wrap
+msgid "`{joerg}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1392
+#, no-wrap
+msgid "`{ygy}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1395
+#, no-wrap
+msgid "`{emax}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1398
+#, no-wrap
+msgid "`{oshogbo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1401
+#, no-wrap
+msgid "`{riggs}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1404
+#, no-wrap
+msgid "`{egypcio}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1407
+#, no-wrap
+msgid "`{bz}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1410
+#, no-wrap
+msgid "`{dsl}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1413
+#, no-wrap
+msgid "`{zeising}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1416
+#, no-wrap
+msgid "`{phantom}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1419
+#, no-wrap
+msgid "`{tz}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1422
+#, no-wrap
+msgid "`{rigoletto}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1425
+#, no-wrap
+msgid "`{kaktus}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1428
+#, no-wrap
+msgid "`{samm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1431
+#, no-wrap
+msgid "`{arrowd}`"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1435
+#, no-wrap
+msgid "Other Cluster Account Holders"
+msgstr "Outros Detentores de Contas no Cluster"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1437
+#, no-wrap
+msgid "`{bk}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1440
+#, no-wrap
+msgid "`{deb}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1443
+#, no-wrap
+msgid "`{debdrup}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1446
+#, no-wrap
+msgid "`{dutchdaemon}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1449
+#, no-wrap
+msgid "`{keymaster}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1452
+#, no-wrap
+msgid "`{mwlucas}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1455
+#, no-wrap
+msgid "`{dhw}`"
+msgstr ""
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/pr-guidelines/_index.adoc b/documentation/content/pt-br/articles/pr-guidelines/_index.adoc
index 39f631b78a..3264d9376e 100644
--- a/documentation/content/pt-br/articles/pr-guidelines/_index.adoc
+++ b/documentation/content/pt-br/articles/pr-guidelines/_index.adoc
@@ -1,12 +1,16 @@
---
-title: Diretrizes para manuseio de relatórios de problemas
authors:
- - author: Dag-Erling Smørgrav
- - author: Hiten Pandya
+ -
+ author: 'Dag-Erling Smørgrav'
+ -
+ author: 'Hiten Pandya'
+description: 'Essas diretrizes descrevem as práticas recomendadas de tratamento para Relatórios de Problemas (PRs) do FreeBSD.'
+tags: ["PR", "guideline", "bugs", "maintenance", "BugZilla", "FreeBSD"]
+title: 'Diretrizes de Tratamento de Relatórios de Problemas'
trademarks: ["freebsd", "general"]
---
-= Diretrizes para manuseio de relatórios de problemas
+= Diretrizes de Tratamento de Relatórios de Problemas
:doctype: article
:toc: macro
:toclevels: 1
@@ -40,7 +44,7 @@ endif::[]
[.abstract-title]
Resumo
-Estas diretrizes descrevem as práticas de manuseio recomendadas para os Relatórios de Problemas do FreeBSD (PRs). Embora desenvolvido para a equipe de manutenção de banco de dados do FreeBSD PR mailto:freebsd-bugbusters@FreeBSD.org[freebsd-bugbusters@FreeBSD.org], essas diretrizes devem ser seguidas por qualquer pessoa que trabalhe com os Relatórios de Problemas do FreeBSD.
+Essas diretrizes descrevem práticas recomendadas de tratamento para Relatórios de Problemas (PRs) do FreeBSD. Embora desenvolvidas para a equipe de manutenção do Banco de Dados de PRs do FreeBSD (mailto:freebsd-bugbusters@FreeBSD.org[freebsd-bugbusters@FreeBSD.org]), essas diretrizes devem ser seguidas por qualquer pessoa que trabalhe com PRs do FreeBSD.
'''
@@ -49,68 +53,66 @@ toc::[]
[[intro]]
== Introdução
-O Bugzilla é um sistema de gerenciamento de problemas usado pelo Projeto FreeBSD. Como o rastreamento preciso de defeitos de software pendentes é importante para a qualidade do FreeBSD, o uso correto do software é essencial para o avanço do projeto.
+O Bugzilla é um sistema de gerenciamento de problemas usado pelo Projeto FreeBSD. Como o rastreamento preciso de defeitos de software pendentes é importante para a qualidade do FreeBSD, o uso correto do software é essencial para o progresso contínuo do Projeto.
-O acesso ao Bugzilla está disponível para toda a comunidade do FreeBSD. Para manter a consistência dentro do banco de dados e fornecer uma experiência de usuário consistente, diretrizes foram estabelecidas cobrindo aspectos comuns do gerenciamento de erros, como apresentação de acompanhamento, tratamento de solicitações de fechamento e assim por diante.
+O acesso ao Bugzilla está disponível para toda a comunidade FreeBSD. Para manter a consistência no banco de dados e fornecer uma experiência de usuário consistente, foram estabelecidas diretrizes que abrangem aspectos comuns de gerenciamento de bugs, como apresentação de acompanhamentos, tratamento de solicitações de encerramento, entre outros.
[[pr-lifecycle]]
-== Ciclo de vida de um relatório de problemas
+== Ciclo de vida do Relatório de Problemas
-* O usuário envia um relatório de bug no site. O bug está no estado `Needs Triage`.
-* Jane Random BugBuster confirma que o relatório de erros tem informação suficiente para ser reproduzível. Se não, ela irá interagir repetidamente com o usuário para obter as informações necessárias. Neste ponto, o bug é definido para o estado `Open`.
-* Joe Random Committer se interessa pelo PR e o atribui a si mesmo, ou Jane Random BugBuster decide que Joe é a pessoa mais adequada para lidar com o problema e atribui o bug a ele. O bug deve ser definido para o estado `In Discussion`.
-* Joe tem uma breve troca com o usuário que originou o relatório de problema (certificando-se de que toda a comunicação ficou registrada na trilha de auditoria) e determina a causa do problema.
-* Joe vira a noite trabalhando e produz um patch que ele acha que corrige o problema, e o envia em um follow-up para o originador, pedindo que ele teste a solução. Em seguida, ele configura o estado do PR para `Patch Ready`.
-* Algumas iterações depois, Joe e o originador estão satisfeitos com o patch, e Joe faz o commit para o branch `-CURRENT` (ou diretamente para o branch `-STABLE` se o problema não existir no `-CURRENT`), certificando-se de fazer referencia ao Relatório de Problemas no seu log de commit (e dando o crédito ao originador caso ele tenha enviado o patch todo ou parte dele) e, se apropriado, iniciará uma contagem regressiva de MFC. O bug é então alterado para o estado `Needs MFC`.
-* Se o patch não precisar de passar por um MFC, Joe então fecha o PR com o status `Issue Resolved`.
+* O autor do relatório envia um relatório de bug no site. O bug está no estado `Precisa ser Triado` (Needs Triage).
+* Jane Random BugBuster confirma que o relatório de bug possui informações suficientes para ser reproduzido. Caso contrário, ela vai e volta com o autor do relatório para obter as informações necessárias. Neste ponto, o bug é definido como estado `Aberto` (Open).
+* Joe Random Committer se interessa pelo PR e o atribui a si mesmo, ou Jane Random BugBuster decide que Joe é o mais adequado para lidar com ele e o atribui a ele. O bug deve ser definido para o estado `Em Discussão` (In Discussion).
+* Joe tem uma breve troca com o autor do relatório (certificando-se de que tudo é registrado no histórico de auditoria) e determina a causa do problema.
+* Joe trabalha a noite toda e desenvolve um patch que ele acha que corrige o problema e o envia em um acompanhamento, pedindo ao autor do relatório que o teste. Em seguida, ele define o estado do PR como `Patch Pronto` (Patch Ready).
+* Algumas iterações depois, tanto Joe quanto o autor do relatório estão satisfeitos com o patch e Joe o faz commit no `-CURRENT` (ou diretamente no `-STABLE` se o problema não existir no `-CURRENT`), certificando-se de fazer referência ao Relatório de Problemas em seu log de commit (e de creditar o autores se eles enviaram todo ou parte do patch) e, se apropriado, iniciar uma contagem regressiva de MFC. O bug é definido como estado `Precisa de MFC` (Needs MFC).
+* Se o patch não precisar de MFCing, Joe então encerra o PR como `Problema Resolvido` (Issue Resolved).
[NOTE]
====
-Muitos PRs são submetidos contendo muito pouca informação sobre o problema, e alguns são muito complexos para resolver, ou apenas arranham a superfície de um problema maior; Nestes casos, é muito importante obter todas as informações necessárias para resolver o problema. Se o problema reportado não puder ser resolvido ou caso ele ocorra novamente, é necessário reabrir o PR.
+Muitos PRs são enviados com muito pouca informação sobre o problema e alguns são muito complexos para resolver ou apenas arranham a superfície de um problema maior; nesses casos, é muito importante obter todas as informações necessárias para resolver o problema. Se o problema não puder ser resolvido ou ocorrer novamente, é necessário reabrir o PR.
====
[[pr-states]]
-== Estado do relatório de problemas
+== Estado do Relatório de Problemas
-É importante atualizar o status de um PR quando determinadas ações são tomadas. O status deve refletir com precisão o estado atual do trabalho no PR.
+É importante atualizar o estado de um PR quando certas ações são tomadas. O estado deve refletir com precisão o estado atual do trabalho no PR.
-.Um pequeno exemplo sobre quando alterar o estado de PR
+.Um pequeno exemplo de quando mudar o estado do PR
[example]
====
-
-Quando um PR tiver sido tratado e o desenvolvedor responsável se sente confortável com a correção, ele enviará um follow up para o PR e mudará o seu estado para "feedback". Neste ponto, o originador deve avaliar a correção em seu contexto e responder indicando se o defeito foi de fato remediado.
+Quando um PR foi trabalhado e o(s) desenvolvedor(es) responsáveis se sentem confortáveis com a correção, eles enviarão um acompanhamento para o PR e alterarão seu estado para "feedback". Neste ponto, o originador deve avaliar a correção em seu contexto e responder indicando se o defeito foi realmente corrigido.
====
-Um Relatório de Problemas pode estar em um dos seguintes estados:
+Um Relatório de Problema pode estar em um dos seguintes estados:
-[.glosslist]
-open::
-Estado inicial; o problema foi apontado e precisa ser revisto.
+open (aberto)::
+Estado inicial; o problema foi relatado, mas ainda não foi avaliado.
-analyzed::
-O problema foi revisto e uma solução está sendo procurada.
+analyzed (analisado)::
+O problema foi avaliado, mas ainda não foi corrigido.
-feedback::
+feedback (retroalimentação)::
Trabalhos adicionais requerem informações adicionais do originador ou da comunidade; possivelmente informações sobre a solução proposta.
-patched::
+patched (corrigido)::
Foi realizado o commit de um patch, mas algo (MFC, ou talvez confirmação do originador) ainda está pendente.
-suspended::
-O problema não está sendo trabalhado, devido à falta de informações ou recursos. Este é um excelente candidato para alguém que está procurando um projeto para assumir. Se o problema não puder ser resolvido, ele será fechado, e não suspenso. O projeto de documentação usa suspended para itens da lista de desejos que envolvem uma quantidade significativa de trabalho para a qual ninguém tem tempo no momento.
+suspended (suspenso)::
+O problema não está sendo trabalhado, devido à falta de informações ou recursos. Este é um candidato ideal para alguém que procura um projeto para assumir. Se o problema não puder ser resolvido de forma alguma, ele será fechado, em vez de suspenso. O projeto de documentação usa "suspenso" para itens de lista de desejos que exigem uma quantidade significativa de trabalho para o qual ninguém tem tempo no momento.
-closed::
+closed (fechado)::
Um relatório de problemas é fechado quando as alterações referentes a ele tiverem sido integradas, documentadas e testadas ou, quando a correção do problema tiver sido abandonada.
[NOTE]
====
-O estado "patched" está diretamente relacionado ao feedback, então você pode passar direto para o estado de "closed" se o originador não puder testar o patch, e ele tiver funcionado no seu próprio teste.
+O estado "corrigido" (patched) está diretamente relacionado ao estado "retroalimentação" (feedback), então você pode ir diretamente para o estado "fechado" (closed) se o originador não puder testar o patch e ele funcionar em seus próprios testes.
====
[[pr-types]]
-== Tipos de relatórios de problemas
+== Tipos de Relatórios de Problema
-Ao lidar com relatórios de problemas, seja como um desenvolvedor que tenha acesso direto ao banco de dados de relatórios de problemas ou como colaborador que navega no banco de dados e envia followups com patches, comentários, sugestões ou solicitações de alteração, você vai encontrar vários tipos diferentes de PRs.
+Ao lidar com relatórios de problemas, seja como um desenvolvedor que tem acesso direto ao banco de dados de relatórios de problemas ou como um colaborador que navega no banco de dados e envia feedbacks com patches, comentários, sugestões ou solicitações de mudança, você se deparará com vários tipos diferentes de PRs.
* <<pr-unassigned>>
* <<pr-assigned>>
@@ -121,115 +123,116 @@ Ao lidar com relatórios de problemas, seja como um desenvolvedor que tenha aces
As seções a seguir descrevem para que cada tipo diferente de PRs é usado, quando um PR pertence a um desses tipos e qual tratamento cada tipo diferente recebe.
[[pr-unassigned]]
-== PRs não atribuídos
+== PRs Não Atribuídos
+
+Quando os Relatórios de Problemas chegam, eles são inicialmente atribuídos a um responsável genérico (placeholder). Esses responsáveis sempre começam com `freebsd-`. O valor exato desse responsável padrão depende da categoria do PR; na maioria dos casos, corresponde a uma lista de discussão específica do FreeBSD. Aqui está a lista atual, com os mais comuns listados primeiro:
-Quando os PRs chegam, eles são inicialmente atribuídos a um responsável genérico (placeholder). Estes são sempre prefixados com `freebsd-`. O valor exato para esse padrão depende da categoria; na maioria dos casos, corresponde a uma lista de discussão específica do FreeBSD. Aqui está a lista atual, com os mais comuns listados primeiro:
[[default-assignees-common]]
-.Responsáveis ​​Padrões - mais comuns
+.Atribuidores Padrões - os mais comuns
[cols="1,1,1", options="header"]
|===
| Tipo
| Categorias
-| Responsável Padrão
+| Responsável padrão (Default Assignee)
-|sistema base
+|Sistema base (Base System)
|bin, conf, gnu, kern, misc
|freebsd-bugs
-|arquitetura específica
+|architecture-specific
|alpha, amd64, arm, i386, ia64, powerpc, sparc64
|freebsd-_arch_
-|Coleção de Ports
+|coleção de ports
|ports
|freebsd-ports-bugs
-|documentação enviada com o sistema
+|Documentação incluída no sistema
|docs
|freebsd-doc
-|Páginas web do FreeBSD (não incluindo docs)
+|páginas web do FreeBSD (excluindo a documentação)
|Website
|freebsd-www
|===
[[default-assignees-other]]
-.Responsável Padrão - outros
+.Atribuidores Padrão - outros
[cols="1,1,1", options="header"]
|===
| Tipo
| Categorias
-| Responsável Padrão
+| Responsável padrão (Default Assignee)
|esforços de advocacia
-|advocacia
+|advocacy
|freebsd-advocacy
-|Problemas com Java Virtual Machine(TM)
-|Java
+|problema com a Java Virtual Machine(TM)
+|java
|freebsd-java
|conformidade com padrões
-|padrões
+|standards
|freebsd-standards
|bibliotecas de threading
|threads
|freebsd-threads
-|Subsistema man:usb[4]
-|USB
+|subsistema man:usb[4]
+|usb
|freebsd-usb
|===
-Não se surpreenda ao descobrir que o usuário responsável pelo PR atribuiu a categoria errada. Se você corrigir a categoria, não se esqueça de corrigir a atribuição também. (Em particular, nossos usuários parecem ter dificuldade em entender que apenas porque seu problema se manifesta em um sistema i386, que ele pode ser genérico para todo o FreeBSD, e assim ser mais apropriado para o `kern`. O oposto também é verdade, claro.)
+Não se surpreenda ao descobrir que o autor do PR atribuiu-o à categoria errada. Se você corrigir a categoria, não se esqueça de corrigir também a atribuição. (Em particular, nossos autores têm dificuldade em entender que só porque seu problema se manifestou em um sistema i386, ele pode ser genérico para todo o FreeBSD e, portanto, ser mais apropriado para `kern`. O inverso também é verdadeiro, é claro.)
-Certos PRs podem ser reatribuídos para longe destes responsáveis genéricos por qualquer pessoa. Existem vários tipos de responsáveis: listas de discussão especializadas; aliases de correio (usados ​​para determinados itens de interesse limitado); e indivíduos.
+Alguns PRs podem ser reatribuídos para longe desses atribuidores genéricos por qualquer pessoa. Existem vários tipos de atribuidores: listas de discussão especializadas; aliases de e-mail (usados para determinados itens de interesse limitado); e indivíduos.
-Para os responsáveis ​​que são listas de discussão, use o formulário longo ao fazer a atribuição (por exemplo, `freebsd-foo` em vez de `foo`); isso evitará emails duplicados enviados para a lista de discussão.
+Para atribuidores que são listas de discussão, por favor, use a forma longa ao fazer a atribuição (por exemplo, `freebsd-foo` em vez de `foo`); isso evitará o envio de e-mails duplicados para a lista de discussão.
[NOTE]
====
-Como a lista de indivíduos que se voluntariaram para ser o responsável padrão para certos tipos de PRs muda com bastante frequência, ela é muito mais adequada para o https://wiki.freebsd.org/AssigningPRs[the FreeBSD wiki].
+Uma vez que a lista de pessoas que se ofereceram para ser o atribuidor padrão para determinados tipos de PRs muda com tanta frequência, é muito mais apropriado consultar https://wiki.freebsd.org/AssigningPRs[a wiki do FreeBSD].
====
-Aqui está uma lista de exemplo de tais entidades; provavelmente não está completa.
+Aqui está uma lista de exemplo dessas entidades; ela provavelmente não está completa.
[[common-assignees-base]]
-.Responsáveis ​​Comuns - sistema base
+.Atribuidores Comuns - Sistema Base
[cols="1,1,1,1", options="header"]
|===
| Tipo
| Categoria Sugerida
-| Responsável Sugerido
-| Tipo de Responsável
+| Atribuidor sugerido
+| Tipo de Atribuidor
-|problema específico da arquitetura ARM(R)
+|problema específico para a arquitetura ARM(R)
|arm
|freebsd-arm
|lista de discussão
-|problema específico da arquitetura MIPS(R)
+|problema específico para a arquitetura MIPS(R)
|kern
|freebsd-mips
|lista de discussão
-|problema específico da arquitetura PowerPC(R)
+|problema específico para a arquitetura PowerPC(R)
|kern
|freebsd-ppc
|lista de discussão
-|problema com Configuração Avançada e Gerenciamento de Energia (man:acpi[4])
+|problema com o Gerenciamento Avançado de Energia e Configuração (man:acpi[4])
|kern
|freebsd-acpi
|lista de discussão
-|problema com os drivers de modo de transferência assíncrona (ATM)
+|problema com os drivers de Modo de Transferência Assíncrona (ATM)
|kern
|freebsd-atm
|lista de discussão
-|problema com sistemas FreeBSD embarcados ou de small-footprint (por exemplo, NanoBSD/PicoBSD/FreeBSD-arm)
+|problema com sistemas FreeBSD incorporados ou small-footprint (por exemplo, NanoBSD/PicoBSD/FreeBSD-arm)
|kern
|freebsd-embedded
|lista de discussão
@@ -254,17 +257,17 @@ Aqui está uma lista de exemplo de tais entidades; provavelmente não está comp
|freebsd-ipfw
|lista de discussão
-|problema com os drivers de rede digital de serviços integrados (ISDN)
+|problema com drivers de Rede Digital de Serviços Integrados (ISDN)
|kern
|freebsd-isdn
|lista de discussão
-|subsistema man:jail[8]
+|problema com o subsistema man:jail[8]
|kern
|freebsd-jail
|lista de discussão
-|problema com a emulação Linux(R) ou SVR4
+|problema com emulação do Linux(R) ou do SVR4
|kern
|freebsd-emulation
|lista de discussão
@@ -289,12 +292,12 @@ Aqui está uma lista de exemplo de tais entidades; provavelmente não está comp
|freebsd-multimedia
|lista de discussão
-|problemas com o subsistema man:wlan[4] e drivers sem fio
+|problema com o subsistema man:wlan[4] e drivers wireless
|kern
|freebsd-wireless
|lista de discussão
-|problema com o man:sysinstall[8] ou man:bsdinstall[8]
+|problema com o man:sysinstall[8] ou o man:bsdinstall[8]
|bin
|freebsd-sysinstall
|lista de discussão
@@ -304,140 +307,141 @@ Aqui está uma lista de exemplo de tais entidades; provavelmente não está comp
|freebsd-rc
|lista de discussão
-|problema com funcionalidade VIMAGE ou VNET e código relacionado
+|problema com a funcionalidade VIMAGE ou VNET e código relacionado
|kern
|freebsd-virtualization
|lista de discussão
-|problema com a emulação de Xen
+|problema com a emulação do Xen
|kern
|freebsd-xen
|lista de discussão
|===
[[common-assignees-ports]]
-.Responsáveis Comuns - Ports Collection
+.Atribuidores Comuns - Coleção de Ports
[cols="1,1,1,1", options="header"]
|===
| Tipo
| Categoria Sugerida
-| Responsável Sugerido
-| Tipo de Responsável
+| Atribuidor sugerido
+| Tipo de Atribuidor
-|problema com o framework da coleção de ports (__não__ com um port individual!)
+|problema com o framework de ports (__não__ com um port individual!)
|ports
|portmgr
|alias
-|port que é mantido por apache@FreeBSD.org
+|port mantido por apache@FreeBSD.org
|ports
|apache
|lista de discussão
-|port que é mantido por autotools@FreeBSD.org
+|port mantido por autotools@FreeBSD.org
|ports
|autotools
|alias
-|port que é mantido por doceng@FreeBSD.org
+|port mantido por doceng@FreeBSD.org
|ports
|doceng
|alias
-|port que é mantido por eclipse@FreeBSD.org
+|port mantido por eclipse@FreeBSD.org
|ports
|freebsd-eclipse
|lista de discussão
-|port que é mantido por gecko@FreeBSD.org
+|port mantido por gecko@FreeBSD.org
|ports
|gecko
|lista de discussão
-|port que é mantido por gnome@FreeBSD.org
+|port mantido por gnome@FreeBSD.org
|ports
|gnome
|lista de discussão
-|port que é mantido por hamradio@FreeBSD.org
+|port mantido por hamradio@FreeBSD.org
|ports
|hamradio
|alias
-|port que é mantido por haskell@FreeBSD.org
+|port mantido por haskell@FreeBSD.org
|ports
|haskell
|alias
-|port que é mantido por java@FreeBSD.org
+|port mantido por java@FreeBSD.org
|ports
|freebsd-java
|lista de discussão
-|port que é mantido por kde@FreeBSD.org
+|port mantido por kde@FreeBSD.org
|ports
|kde
|lista de discussão
-|port que é mantido por mono@FreeBSD.org
+|port mantido por mono@FreeBSD.org
|ports
|mono
|lista de discussão
-|port que é mantido por office@FreeBSD.org
+|port mantido por office@FreeBSD.org
|ports
|freebsd-office
|lista de discussão
-|port que é mantido por perl@FreeBSD.org
+|por mantido por perl@FreeBSD.org
|ports
|perl
|lista de discussão
-|port que é mantido por python@FreeBSD.org
+|port mantido por python@FreeBSD.org
|ports
|freebsd-python
|lista de discussão
-|port que é mantido por ruby@FreeBSD.org
+|port mantido por ruby@FreeBSD.org
|ports
|freebsd-ruby
|lista de discussão
-|port que é mantido por secteam@FreeBSD.org
+|port mantido por secteam@FreeBSD.org
|ports
|secteam
|alias
-|port que é mantido por vbox@FreeBSD.org
+|port mantido por vbox@FreeBSD.org
|ports
|vbox
|alias
-|port que é mantido por x11@FreeBSD.org
+|por mantido por x11@FreeBSD.org
|ports
|freebsd-x11
|lista de discussão
|===
-Os PRs relacionados aos ports que têm um mantenedor que é um committer de ports podem ser reatribuídas por qualquer um (mas note que nem todo committer do FreeBSD é necessariamente um committer de ports, então você não pode simplesmente ir sozinho pelo endereço de email).
+Os relatórios de problemas dos ports que têm um mantenedor que é um colaborador do ports podem ser reatribuídos por qualquer pessoa (mas observe que nem todo committer do FreeBSD é necessariamente um committer do ports, então você não pode simplesmente ir apenas pelo endereço de e-mail.)
+
+Para outros PRs, por favor, não reatribua-os para indivíduos (além de si mesmo) a menos que você esteja certo de que o assignee realmente queira acompanhar o PR. Isso ajudará a evitar situações nas quais em que ninguém olha para corrigir um problema específico porque todo mundo assume que o assignee já está trabalhando no mesmo.
-Para outros PRs, por favor, não os reatribua para outros indivíduos (outros que não sejam você), a menos que tenha certeza de que o responsável realmente deseja acompanhar o PR. Isso ajudará a evitar situações em que ninguém se dedica para consertar um problema em particular, porque todos assumem que o responsável já está trabalhando nele.
[[common-assignees-other]]
-.Responsáveis ​​Comuns - Outros
+.Atribuidores Comuns - Outros
[cols="1,1,1,1", options="header"]
|===
| Tipo
| Categoria Sugerida
-| Responsável Sugerido
-| Tipo de Responsável
+| Atribuidor sugerido
+| Tipo de Atribuidor
-|problema com o banco de dados de PR
+|problema com o banco de dados de PRs
|bin
|bugmeister
|alias
-|problema com o https://bugs.freebsd.org/submit/[formulário web] do Bugzilla.
+|problema com o https://bugs.freebsd.org/submit/[formulario web] do Bugzilla.
|doc
|bugmeister
|alias
@@ -446,44 +450,44 @@ Para outros PRs, por favor, não os reatribua para outros indivíduos (outros qu
[[pr-assigned]]
== PRs Atribuídos
-Se um PR tiver o campo `responsible` configurado para o nome de usuário de um desenvolvedor do FreeBSD, isso significa que o PR foi entregue a essa pessoa em particular para trabalho adicional.
+Se um PR tem o campo `responsável` configurado com o nome de usuário de um desenvolvedor do FreeBSD, isso significa que o PR foi entregue para aquela pessoa específica para trabalhos posteriores.
-PRs designados não devem ser tocados por ninguém além do responsável ou do bugmeister. Se você tiver comentários, envie um followup. Se, por algum motivo, você achar que o PR deve mudar de estado ou ser reatribuído, envie uma mensagem ao responsável. Se o responsável não responder dentro de duas semanas, cancele a atribuição do PR e faça o que quiser.
+Os PRs atribuídos não devem ser alterados por ninguém além do assignee ou do bugmeister. Se você tiver comentários, envie um acompanhamento. Se, por algum motivo, você achar que o PR deve mudar de estado ou ser reatribuído, envie uma mensagem para o assignee. Se o assignee não responder dentro de duas semanas, desfaça a atribuição do PR e faça o que desejar.
[[pr-dups]]
== PRs Duplicados
-Se você encontrar mais de um PR que descreva o mesmo problema, escolha aquele que contém a maior quantidade de informações úteis e feche os outros, indicando claramente o número do PR substituto. Se vários PRs contiverem informações úteis que não se sobrepõem, envie todas as informações ausentes para um para um deles por meio de um followup, incluindo referências aos outros; em seguida, feche os outros PRs (que agora estão completamente substituídos).
+Se você encontrar mais de um PR que descreva o mesmo problema, escolha aquele que contém a maior quantidade de informações úteis e feche os outros, declarando claramente o número do PR substituto. Se vários PRs contêm informações úteis que não se sobrepõem, envie todas as informações ausentes em um acompanhamento para um PR, incluindo referências aos outros; em seguida, feche os outros PRs (que agora foram completamente substituídos).
[[pr-stale]]
== PRs Obsoletos
-Um PR é considerado obsoleto se não tiver sido modificado em mais de seis meses. Aplique o seguinte procedimento para lidar com PRs obsoletos:
+Um PR é considerado obsoleto se não foi modificado há mais de seis meses. Aplique o seguinte procedimento para lidar com PRs obsoletos:
-* Se o PR contiver detalhes suficientes, tente reproduzir o problema no `-CURRENT` e no `-STABLE`. Se você tiver sucesso, envie um followup detalhando suas descobertas e tente encontrar alguém para atribuí-lo. Defina o estado para "analyzed", se apropriado.
-* Se o PR descrever um problema que você sabe ser o resultado de um erro de uso (configuração incorreta ou outra coisa do tipo), envie um followup explicando o que o originador fez de errado e feche o PR com o motivo "User error" ou "Configuration error".
-* Se o PR descreve um erro que você sabe ter sido corrigido no `-CURRENT` e `-STABLE`, feche-o com uma mensagem informando quando ele foi corrigido em cada branch.
-* Se o PR descreve um erro que você sabe ter sido corrigido no `-CURRENT`, mas não no `-STABLE`, tente descobrir quando a pessoa que o corrigiu está planejando o MFC ou tente encontrar alguém (talvez você?) para fazê-lo. Defina o estado para "patched" e atribua-o a quem quer que tenha ficado responsável por fazer o MFC.
-* Em outros casos, peça ao originador para confirmar se o problema ainda existe em versões mais recentes. Se o originador não responder dentro de um mês, feche o PR com a notação "Feedback timeout".
+* Se o PR contém detalhes suficientes, tente reproduzir o problema em `-CURRENT` e `-STABLE`. Se você conseguir reproduzir o problema, envie um acompanhamento detalhando suas descobertas e tente encontrar alguém para atribuí-lo. Defina o estado como "analisado" se for apropriado.
+* Se o PR descreve um problema que você sabe que é o resultado de um erro de uso (configuração incorreta ou de outra forma), envie um acompanhamento explicando o que o originador fez de errado e, em seguida, feche o PR com a razão "Erro do usuário" ou "Erro de configuração".
+* Se o PR descreve um erro que você sabe que foi corrigido tanto em `-CURRENT` quanto em `-STABLE`, feche-o com uma mensagem indicando quando foi corrigido em cada branch.
+* Se o PR descreve um erro que você sabe que foi corrigido em `-CURRENT`, mas não em `-STABLE`, tente descobrir quando a pessoa que corrigiu planeja fazer o MFC (merge from current) para o `-STABLE`, ou tente encontrar outra pessoa (talvez você mesmo?) para fazer isso. Defina o estado como "corrigido" e atribua-o à pessoa que fará o MFC.
+* Em outros casos, peça ao originador para confirmar se o problema ainda existe em versões mais recentes. Se o originador não responder dentro de um mês, feche o PR com a anotação "Tempo limite de feedback".
[[pr-misfiled-notpr]]
-== PRs Sem Erros
+== PRs não relacionados a bugs
-Desenvolvedores que se deparem com PRs que na verdade deveriam ter sido postados na http://lists.FreeBSD.org/mailman/listinfo/freebsd-bugs[freebsd-bugs] ou em alguma outra lista deve fechar o PR, e informar o originador em um comentário do porque o problema reportado não é realmente um PR e orientá-lo sobre onde a mensagem deve ser postada.
+Desenvolvedores que encontram PRs que parecem ter sido postados em {freebsd-bugs} ou em outra lista devem fechar o PR, informando ao remetente em um comentário por que isso não é realmente um PR e onde a mensagem deve ser postada.
-Os endereços de e-mail que o Bugzilla utiliza para receber os PRs foram publicados como parte da documentação do FreeBSD, e também foram anunciados e listados no website. Isso significa que os spammers os encontraram.
+Os endereços de e-mail que o Bugzilla utiliza para receber PRs foram publicados como parte da documentação do FreeBSD, foram anunciados e listados no site. Isso significa que spammers os encontraram.
-Sempre que você fechar um desses PRs, faça o seguinte:
+Sempre que você fechar um desses PRs, por favor, faça o seguinte:
* Defina o componente como `junk` (em `Supporting Services`).
-* Defina o responsável para `nobody@FreeBSD.org`.
-* Defina o estado como `Issue Resolved`.
+* Defina o responsável como `nobody@FreeBSD.org`.
+* Defina o estado como `Problema Resolvido` (ou "Issue Resolved" em inglês).
Definir a categoria como `junk` torna óbvio que não há conteúdo útil dentro do PR e ajuda a reduzir a desordem nas categorias principais.
[[references]]
== Leitura Adicional
-Esta é uma lista de recursos relevantes para a escrita e processamento adequado de um relatório de problema. De forma alguma deve ser considerada completa.
+Esta é uma lista de recursos relevantes para a escrita adequada e o processamento dos relatórios de problemas. De forma alguma é uma lista completa.
-* extref:{problem-reports}[Como escrever relatórios de problemas para o FreeBSD] - diretrizes para usuários que enviam um PR.
+* extref:{problem-reports}[Como Escrever Relatórios de Problemas do FreeBSD] - diretrizes para os autores de PRs.
diff --git a/documentation/content/pt-br/articles/pr-guidelines/_index.po b/documentation/content/pt-br/articles/pr-guidelines/_index.po
new file mode 100644
index 0000000000..f3aabcbc90
--- /dev/null
+++ b/documentation/content/pt-br/articles/pr-guidelines/_index.po
@@ -0,0 +1,1616 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2022.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 10:28-0300\n"
+"PO-Revision-Date: 2023-04-24 20:39+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlespr-guidelines_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:1
+#, no-wrap
+msgid "These guidelines describe recommended handling practices for FreeBSD Problem Reports (PRs)."
+msgstr ""
+"Essas diretrizes descrevem as práticas recomendadas de tratamento para "
+"Relatórios de Problemas (PRs) do FreeBSD."
+
+#. type: Title =
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:1
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:11
+#, no-wrap
+msgid "Problem Report Handling Guidelines"
+msgstr "Diretrizes de Tratamento de Relatórios de Problemas"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:47
+msgid ""
+"These guidelines describe recommended handling practices for FreeBSD Problem "
+"Reports (PRs). Whilst developed for the FreeBSD PR Database Maintenance "
+"Team mailto:freebsd-bugbusters@FreeBSD.org[freebsd-bugbusters@FreeBSD.org], "
+"these guidelines should be followed by anyone working with FreeBSD PRs."
+msgstr ""
+"Essas diretrizes descrevem práticas recomendadas de tratamento para "
+"Relatórios de Problemas (PRs) do FreeBSD. Embora desenvolvidas para a equipe "
+"de manutenção do Banco de Dados de PRs do FreeBSD (mailto:freebsd-"
+"bugbusters@FreeBSD.org[freebsd-bugbusters@FreeBSD.org]), essas diretrizes "
+"devem ser seguidas por qualquer pessoa que trabalhe com PRs do FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:49
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:53
+#, no-wrap
+msgid "Introduction"
+msgstr "Introdução"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:57
+msgid ""
+"Bugzilla is an issue management system used by the FreeBSD Project. As "
+"accurate tracking of outstanding software defects is important to FreeBSD's "
+"quality, the correct use of the software is essential to the forward "
+"progress of the Project."
+msgstr ""
+"O Bugzilla é um sistema de gerenciamento de problemas usado pelo Projeto "
+"FreeBSD. Como o rastreamento preciso de defeitos de software pendentes é "
+"importante para a qualidade do FreeBSD, o uso correto do software é "
+"essencial para o progresso contínuo do Projeto."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:60
+msgid ""
+"Access to Bugzilla is available to the entire FreeBSD community. In order "
+"to maintain consistency within the database and provide a consistent user "
+"experience, guidelines have been established covering common aspects of bug "
+"management such as presenting followup, handling close requests, and so "
+"forth."
+msgstr ""
+"O acesso ao Bugzilla está disponível para toda a comunidade FreeBSD. Para "
+"manter a consistência no banco de dados e fornecer uma experiência de "
+"usuário consistente, foram estabelecidas diretrizes que abrangem aspectos "
+"comuns de gerenciamento de bugs, como apresentação de acompanhamentos, "
+"tratamento de solicitações de encerramento, entre outros."
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:62
+#, no-wrap
+msgid "Problem Report Life-cycle"
+msgstr "Ciclo de vida do Relatório de Problemas"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:65
+msgid ""
+"The Reporter submits a bug report on the website. The bug is in the `Needs "
+"Triage` state."
+msgstr ""
+"O autor do relatório envia um relatório de bug no site. O bug está no estado "
+"`Precisa ser Triado` (Needs Triage)."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:66
+msgid ""
+"Jane Random BugBuster confirms that the bug report has sufficient "
+"information to be reproducible. If not, she goes back and forth with the "
+"reporter to obtain the needed information. At this point the bug is set to "
+"the `Open` state."
+msgstr ""
+"Jane Random BugBuster confirma que o relatório de bug possui informações "
+"suficientes para ser reproduzido. Caso contrário, ela vai e volta com o "
+"autor do relatório para obter as informações necessárias. Neste ponto, o bug "
+"é definido como estado `Aberto` (Open)."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:67
+msgid ""
+"Joe Random Committer takes interest in the PR and assigns it to himself, or "
+"Jane Random BugBuster decides that Joe is best suited to handle it and "
+"assigns it to him. The bug should be set to the `In Discussion` state."
+msgstr ""
+"Joe Random Committer se interessa pelo PR e o atribui a si mesmo, ou Jane "
+"Random BugBuster decide que Joe é o mais adequado para lidar com ele e o "
+"atribui a ele. O bug deve ser definido para o estado `Em Discussão` (In "
+"Discussion)."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:68
+msgid ""
+"Joe has a brief exchange with the originator (making sure it all goes into "
+"the audit trail) and determines the cause of the problem."
+msgstr ""
+"Joe tem uma breve troca com o autor do relatório (certificando-se de que "
+"tudo é registrado no histórico de auditoria) e determina a causa do problema."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:69
+msgid ""
+"Joe pulls an all-nighter and whips up a patch that he thinks fixes the "
+"problem, and submits it in a follow-up, asking the originator to test it. He "
+"then sets the PRs state to `Patch Ready`."
+msgstr ""
+"Joe trabalha a noite toda e desenvolve um patch que ele acha que corrige o "
+"problema e o envia em um acompanhamento, pedindo ao autor do relatório que o "
+"teste. Em seguida, ele define o estado do PR como `Patch Pronto` (Patch "
+"Ready)."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:70
+msgid ""
+"A couple of iterations later, both Joe and the originator are satisfied with "
+"the patch, and Joe commits it to `-CURRENT` (or directly to `-STABLE` if the "
+"problem does not exist in `-CURRENT`), making sure to reference the Problem "
+"Report in his commit log (and credit the originator if they submitted all or "
+"part of the patch) and, if appropriate, start an MFC countdown. The bug is "
+"set to the `Needs MFC` state."
+msgstr ""
+"Algumas iterações depois, tanto Joe quanto o autor do relatório estão "
+"satisfeitos com o patch e Joe o faz commit no `-CURRENT` (ou diretamente no "
+"`-STABLE` se o problema não existir no `-CURRENT`), certificando-se de fazer "
+"referência ao Relatório de Problemas em seu log de commit (e de creditar o "
+"autores se eles enviaram todo ou parte do patch) e, se apropriado, iniciar "
+"uma contagem regressiva de MFC. O bug é definido como estado `Precisa de MFC`"
+" (Needs MFC)."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:71
+msgid ""
+"If the patch does not need MFCing, Joe then closes the PR as `Issue "
+"Resolved`."
+msgstr ""
+"Se o patch não precisar de MFCing, Joe então encerra o PR como `Problema "
+"Resolvido` (Issue Resolved)."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:76
+msgid ""
+"Many PRs are submitted with very little information about the problem, and "
+"some are either very complex to solve, or just scratch the surface of a "
+"larger problem; in these cases, it is very important to obtain all the "
+"necessary information needed to solve the problem. If the problem contained "
+"within cannot be solved, or has occurred again, it is necessary to re-open "
+"the PR."
+msgstr ""
+"Muitos PRs são enviados com muito pouca informação sobre o problema e alguns "
+"são muito complexos para resolver ou apenas arranham a superfície de um "
+"problema maior; nesses casos, é muito importante obter todas as informações "
+"necessárias para resolver o problema. Se o problema não puder ser resolvido "
+"ou ocorrer novamente, é necessário reabrir o PR."
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:79
+#, no-wrap
+msgid "Problem Report State"
+msgstr "Estado do Relatório de Problemas"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:83
+msgid ""
+"It is important to update the state of a PR when certain actions are taken. "
+"The state should accurately reflect the current state of work on the PR."
+msgstr ""
+"É importante atualizar o estado de um PR quando certas ações são tomadas. O "
+"estado deve refletir com precisão o estado atual do trabalho no PR."
+
+#. type: Block title
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:84
+#, no-wrap
+msgid "A small example on when to change PR state"
+msgstr "Um pequeno exemplo de quando mudar o estado do PR"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:89
+msgid ""
+"When a PR has been worked on and the developer(s) responsible feel "
+"comfortable about the fix, they will submit a followup to the PR and change "
+"its state to \"feedback\". At this point, the originator should evaluate "
+"the fix in their context and respond indicating whether the defect has "
+"indeed been remedied."
+msgstr ""
+"Quando um PR foi trabalhado e o(s) desenvolvedor(es) responsáveis se sentem "
+"confortáveis com a correção, eles enviarão um acompanhamento para o PR e "
+"alterarão seu estado para \"feedback\". Neste ponto, o originador deve "
+"avaliar a correção em seu contexto e responder indicando se o defeito foi "
+"realmente corrigido."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:92
+msgid "A Problem Report may be in one of the following states:"
+msgstr "Um Relatório de Problema pode estar em um dos seguintes estados:"
+
+#. type: Labeled list
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:93
+#, no-wrap
+msgid "open"
+msgstr "open (aberto)"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:95
+msgid "Initial state; the problem has been pointed out and it needs reviewing."
+msgstr "Estado inicial; o problema foi relatado, mas ainda não foi avaliado."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:96
+#, no-wrap
+msgid "analyzed"
+msgstr "analyzed (analisado)"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:98
+msgid "The problem has been reviewed and a solution is being sought."
+msgstr "O problema foi avaliado, mas ainda não foi corrigido."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:99
+#, no-wrap
+msgid "feedback"
+msgstr "feedback (retroalimentação)"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:101
+msgid ""
+"Further work requires additional information from the originator or the "
+"community; possibly information regarding the proposed solution."
+msgstr ""
+"Trabalhos adicionais requerem informações adicionais do originador ou da "
+"comunidade; possivelmente informações sobre a solução proposta."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:102
+#, no-wrap
+msgid "patched"
+msgstr "patched (corrigido)"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:104
+msgid ""
+"A patch has been committed, but something (MFC, or maybe confirmation from "
+"originator) is still pending."
+msgstr ""
+"Foi realizado o commit de um patch, mas algo (MFC, ou talvez confirmação do "
+"originador) ainda está pendente."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:105
+#, no-wrap
+msgid "suspended"
+msgstr "suspended (suspenso)"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:110
+msgid ""
+"The problem is not being worked on, due to lack of information or "
+"resources. This is a prime candidate for somebody who is looking for a "
+"project to take on. If the problem cannot be solved at all, it will be "
+"closed, rather than suspended. The documentation project uses suspended for "
+"wish-list items that entail a significant amount of work which no one "
+"currently has time for."
+msgstr ""
+"O problema não está sendo trabalhado, devido à falta de informações ou "
+"recursos. Este é um candidato ideal para alguém que procura um projeto para "
+"assumir. Se o problema não puder ser resolvido de forma alguma, ele será "
+"fechado, em vez de suspenso. O projeto de documentação usa \"suspenso\" para "
+"itens de lista de desejos que exigem uma quantidade significativa de "
+"trabalho para o qual ninguém tem tempo no momento."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:111
+#, no-wrap
+msgid "closed"
+msgstr "closed (fechado)"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:113
+msgid ""
+"A problem report is closed when any changes have been integrated, "
+"documented, and tested, or when fixing the problem is abandoned."
+msgstr ""
+"Um relatório de problemas é fechado quando as alterações referentes a ele "
+"tiverem sido integradas, documentadas e testadas ou, quando a correção do "
+"problema tiver sido abandonada."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:117
+msgid ""
+"The \"patched\" state is directly related to feedback, so you may go "
+"directly to \"closed\" state if the originator cannot test the patch, and it "
+"works in your own testing."
+msgstr ""
+"O estado \"corrigido\" (patched) está diretamente relacionado ao estado "
+"\"retroalimentação\" (feedback), então você pode ir diretamente para o "
+"estado \"fechado\" (closed) se o originador não puder testar o patch e ele "
+"funcionar em seus próprios testes."
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:120
+#, no-wrap
+msgid "Types of Problem Reports"
+msgstr "Tipos de Relatórios de Problema"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:123
+msgid ""
+"While handling problem reports, either as a developer who has direct access "
+"to the Problem Reports database or as a contributor who browses the database "
+"and submits followups with patches, comments, suggestions or change "
+"requests, you will come across several different types of PRs."
+msgstr ""
+"Ao lidar com relatórios de problemas, seja como um desenvolvedor que tem "
+"acesso direto ao banco de dados de relatórios de problemas ou como um "
+"colaborador que navega no banco de dados e envia feedbacks com patches, "
+"comentários, sugestões ou solicitações de mudança, você se deparará com "
+"vários tipos diferentes de PRs."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:125
+msgid "<<pr-unassigned>>"
+msgstr "<<pr-unassigned>>"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:126
+msgid "<<pr-assigned>>"
+msgstr "<<pr-assigned>>"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:127
+msgid "<<pr-dups>>"
+msgstr "<<pr-dups>>"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:128
+msgid "<<pr-stale>>"
+msgstr "<<pr-stale>>"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:129
+msgid "<<pr-misfiled-notpr>>"
+msgstr "<<pr-misfiled-notpr>>"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:131
+msgid ""
+"The following sections describe what each different type of PRs is used for, "
+"when a PR belongs to one of these types, and what treatment each different "
+"type receives."
+msgstr ""
+"As seções a seguir descrevem para que cada tipo diferente de PRs é usado, "
+"quando um PR pertence a um desses tipos e qual tratamento cada tipo "
+"diferente recebe."
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:133
+#, no-wrap
+msgid "Unassigned PRs"
+msgstr "PRs Não Atribuídos"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:139
+msgid ""
+"When PRs arrive, they are initially assigned to a generic (placeholder) "
+"assignee. These are always prepended with `freebsd-`. The exact value for "
+"this default depends on the category; in most cases, it corresponds to a "
+"specific FreeBSD mailing list. Here is the current list, with the most "
+"common ones listed first:"
+msgstr ""
+"Quando os Relatórios de Problemas chegam, eles são inicialmente atribuídos a "
+"um responsável genérico (placeholder). Esses responsáveis sempre começam com "
+"`freebsd-`. O valor exato desse responsável padrão depende da categoria do "
+"PR; na maioria dos casos, corresponde a uma lista de discussão específica do "
+"FreeBSD. Aqui está a lista atual, com os mais comuns listados primeiro:"
+
+#. type: Block title
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:141
+#, no-wrap
+msgid "Default Assignees - most common"
+msgstr "Atribuidores Padrões - os mais comuns"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:145
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:174
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:221
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:341
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:451
+#, no-wrap
+msgid "Type"
+msgstr "Tipo"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:146
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:175
+#, no-wrap
+msgid "Categories"
+msgstr "Categorias"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:148
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:177
+#, no-wrap
+msgid "Default Assignee"
+msgstr "Responsável padrão (Default Assignee)"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:149
+#, no-wrap
+msgid "base system"
+msgstr "Sistema base (Base System)"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:150
+#, no-wrap
+msgid "bin, conf, gnu, kern, misc"
+msgstr "bin, conf, gnu, kern, misc"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:152
+#, no-wrap
+msgid "freebsd-bugs"
+msgstr "freebsd-bugs"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:153
+#, no-wrap
+msgid "architecture-specific"
+msgstr "architecture-specific"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:154
+#, no-wrap
+msgid "alpha, amd64, arm, i386, ia64, powerpc, sparc64"
+msgstr "alpha, amd64, arm, i386, ia64, powerpc, sparc64"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:156
+#, no-wrap
+msgid "freebsd-_arch_"
+msgstr "freebsd-_arch_"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:157
+#, no-wrap
+msgid "ports collection"
+msgstr "coleção de ports"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:158
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:347
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:352
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:357
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:362
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:367
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:372
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:377
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:382
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:387
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:392
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:397
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:402
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:407
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:412
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:417
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:422
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:427
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:432
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:437
+#, no-wrap
+msgid "ports"
+msgstr "ports"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:160
+#, no-wrap
+msgid "freebsd-ports-bugs"
+msgstr "freebsd-ports-bugs"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:161
+#, no-wrap
+msgid "documentation shipped with the system"
+msgstr "Documentação incluída no sistema"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:162
+#, no-wrap
+msgid "docs"
+msgstr "docs"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:164
+#, no-wrap
+msgid "freebsd-doc"
+msgstr "freebsd-doc"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:165
+#, no-wrap
+msgid "FreeBSD web pages (not including docs)"
+msgstr "páginas web do FreeBSD (excluindo a documentação)"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:166
+#, no-wrap
+msgid "Website"
+msgstr "Website"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:167
+#, no-wrap
+msgid "freebsd-www"
+msgstr "freebsd-www"
+
+#. type: Block title
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:170
+#, no-wrap
+msgid "Default Assignees - other"
+msgstr "Atribuidores Padrão - outros"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:178
+#, no-wrap
+msgid "advocacy efforts"
+msgstr "esforços de advocacia"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:179
+#, no-wrap
+msgid "advocacy"
+msgstr "advocacy"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:181
+#, no-wrap
+msgid "freebsd-advocacy"
+msgstr "freebsd-advocacy"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:182
+#, no-wrap
+msgid "Java Virtual Machine(TM) problems"
+msgstr "problema com a Java Virtual Machine(TM)"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:183
+#, no-wrap
+msgid "java"
+msgstr "java"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:185
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:393
+#, no-wrap
+msgid "freebsd-java"
+msgstr "freebsd-java"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:186
+#, no-wrap
+msgid "standards compliance"
+msgstr "conformidade com padrões"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:187
+#, no-wrap
+msgid "standards"
+msgstr "standards"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:189
+#, no-wrap
+msgid "freebsd-standards"
+msgstr "freebsd-standards"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:190
+#, no-wrap
+msgid "threading libraries"
+msgstr "bibliotecas de threading"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:191
+#, no-wrap
+msgid "threads"
+msgstr "threads"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:193
+#, no-wrap
+msgid "freebsd-threads"
+msgstr "freebsd-threads"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:194
+#, no-wrap
+msgid "man:usb[4] subsystem"
+msgstr "subsistema man:usb[4]"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:195
+#, no-wrap
+msgid "usb"
+msgstr "usb"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:196
+#, no-wrap
+msgid "freebsd-usb"
+msgstr "freebsd-usb"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:202
+msgid ""
+"Do not be surprised to find that the submitter of the PR has assigned it to "
+"the wrong category. If you fix the category, do not forget to fix the "
+"assignment as well. (In particular, our submitters seem to have a hard time "
+"understanding that just because their problem manifested on an i386 system, "
+"that it might be generic to all of FreeBSD, and thus be more appropriate for "
+"`kern`. The converse is also true, of course.)"
+msgstr ""
+"Não se surpreenda ao descobrir que o autor do PR atribuiu-o à categoria "
+"errada. Se você corrigir a categoria, não se esqueça de corrigir também a "
+"atribuição. (Em particular, nossos autores têm dificuldade em entender que "
+"só porque seu problema se manifestou em um sistema i386, ele pode ser "
+"genérico para todo o FreeBSD e, portanto, ser mais apropriado para `kern`. O "
+"inverso também é verdadeiro, é claro.)"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:205
+msgid ""
+"Certain PRs may be reassigned away from these generic assignees by anyone. "
+"There are several types of assignees: specialized mailing lists; mail "
+"aliases (used for certain limited-interest items); and individuals."
+msgstr ""
+"Alguns PRs podem ser reatribuídos para longe desses atribuidores genéricos "
+"por qualquer pessoa. Existem vários tipos de atribuidores: listas de "
+"discussão especializadas; aliases de e-mail (usados para determinados itens "
+"de interesse limitado); e indivíduos."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:208
+msgid ""
+"For assignees which are mailing lists, please use the long form when making "
+"the assignment (e.g., `freebsd-foo` instead of `foo`); this will avoid "
+"duplicate emails sent to the mailing list."
+msgstr ""
+"Para atribuidores que são listas de discussão, por favor, use a forma longa "
+"ao fazer a atribuição (por exemplo, `freebsd-foo` em vez de `foo`); isso "
+"evitará o envio de e-mails duplicados para a lista de discussão."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:212
+msgid ""
+"Since the list of individuals who have volunteered to be the default "
+"assignee for certain types of PRs changes so often, it is much more suitable "
+"for https://wiki.freebsd.org/AssigningPRs[the FreeBSD wiki]."
+msgstr ""
+"Uma vez que a lista de pessoas que se ofereceram para ser o atribuidor "
+"padrão para determinados tipos de PRs muda com tanta frequência, é muito "
+"mais apropriado consultar https://wiki.freebsd.org/AssigningPRs[a wiki do "
+"FreeBSD]."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:215
+msgid "Here is a sample list of such entities; it is probably not complete."
+msgstr ""
+"Aqui está uma lista de exemplo dessas entidades; ela provavelmente não está "
+"completa."
+
+#. type: Block title
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:217
+#, no-wrap
+msgid "Common Assignees - base system"
+msgstr "Atribuidores Comuns - Sistema Base"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:222
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:342
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:452
+#, no-wrap
+msgid "Suggested Category"
+msgstr "Categoria Sugerida"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:223
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:343
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:453
+#, no-wrap
+msgid "Suggested Assignee"
+msgstr "Atribuidor sugerido"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:225
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:345
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:455
+#, no-wrap
+msgid "Assignee Type"
+msgstr "Tipo de Atribuidor"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:226
+#, no-wrap
+msgid "problem specific to the ARM(R) architecture"
+msgstr "problema específico para a arquitetura ARM(R)"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:227
+#, no-wrap
+msgid "arm"
+msgstr "arm"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:228
+#, no-wrap
+msgid "freebsd-arm"
+msgstr "freebsd-arm"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:230
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:235
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:240
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:245
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:250
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:255
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:260
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:265
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:270
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:275
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:280
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:285
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:290
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:295
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:300
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:305
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:310
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:315
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:320
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:325
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:330
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:334
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:355
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:370
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:375
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:380
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:395
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:400
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:405
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:410
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:415
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:420
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:425
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:439
+#, no-wrap
+msgid "mailing list"
+msgstr "lista de discussão"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:231
+#, no-wrap
+msgid "problem specific to the MIPS(R) architecture"
+msgstr "problema específico para a arquitetura MIPS(R)"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:232
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:237
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:242
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:247
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:252
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:257
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:262
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:267
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:272
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:277
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:282
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:287
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:292
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:297
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:302
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:307
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:312
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:322
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:327
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:332
+#, no-wrap
+msgid "kern"
+msgstr "kern"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:233
+#, no-wrap
+msgid "freebsd-mips"
+msgstr "freebsd-mips"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:236
+#, no-wrap
+msgid "problem specific to the PowerPC(R) architecture"
+msgstr "problema específico para a arquitetura PowerPC(R)"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:238
+#, no-wrap
+msgid "freebsd-ppc"
+msgstr "freebsd-ppc"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:241
+#, no-wrap
+msgid "problem with Advanced Configuration and Power Management (man:acpi[4])"
+msgstr ""
+"problema com o Gerenciamento Avançado de Energia e Configuração (man:acpi[4])"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:243
+#, no-wrap
+msgid "freebsd-acpi"
+msgstr "freebsd-acpi"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:246
+#, no-wrap
+msgid "problem with Asynchronous Transfer Mode (ATM) drivers"
+msgstr "problema com os drivers de Modo de Transferência Assíncrona (ATM)"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:248
+#, no-wrap
+msgid "freebsd-atm"
+msgstr "freebsd-atm"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:251
+#, no-wrap
+msgid "problem with embedded or small-footprint FreeBSD systems (e.g., NanoBSD/PicoBSD/FreeBSD-arm)"
+msgstr ""
+"problema com sistemas FreeBSD incorporados ou small-footprint (por exemplo, "
+"NanoBSD/PicoBSD/FreeBSD-arm)"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:253
+#, no-wrap
+msgid "freebsd-embedded"
+msgstr "freebsd-embedded"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:256
+#, no-wrap
+msgid "problem with FireWire(R) drivers"
+msgstr "problema com os drivers FireWire(R)"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:258
+#, no-wrap
+msgid "freebsd-firewire"
+msgstr "freebsd-firewire"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:261
+#, no-wrap
+msgid "problem with the filesystem code"
+msgstr "problema com o código do sistema de arquivos"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:263
+#, no-wrap
+msgid "freebsd-fs"
+msgstr "freebsd-fs"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:266
+#, no-wrap
+msgid "problem with the man:geom[4] subsystem"
+msgstr "problema com o subsistema man:geom[4]"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:268
+#, no-wrap
+msgid "freebsd-geom"
+msgstr "freebsd-geom"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:271
+#, no-wrap
+msgid "problem with the man:ipfw[4] subsystem"
+msgstr "problema com o subsistema man:ipfw[4]"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:273
+#, no-wrap
+msgid "freebsd-ipfw"
+msgstr "freebsd-ipfw"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:276
+#, no-wrap
+msgid "problem with Integrated Services Digital Network (ISDN) drivers"
+msgstr "problema com drivers de Rede Digital de Serviços Integrados (ISDN)"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:278
+#, no-wrap
+msgid "freebsd-isdn"
+msgstr "freebsd-isdn"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:281
+#, no-wrap
+msgid "man:jail[8] subsystem"
+msgstr "problema com o subsistema man:jail[8]"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:283
+#, no-wrap
+msgid "freebsd-jail"
+msgstr "freebsd-jail"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:286
+#, no-wrap
+msgid "problem with Linux(R) or SVR4 emulation"
+msgstr "problema com emulação do Linux(R) ou do SVR4"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:288
+#, no-wrap
+msgid "freebsd-emulation"
+msgstr "freebsd-emulation"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:291
+#, no-wrap
+msgid "problem with the networking stack"
+msgstr "problema com a pilha de rede"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:293
+#, no-wrap
+msgid "freebsd-net"
+msgstr "freebsd-net"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:296
+#, no-wrap
+msgid "problem with the man:pf[4] subsystem"
+msgstr "problema com o subsistema man:pf[4]"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:298
+#, no-wrap
+msgid "freebsd-pf"
+msgstr "freebsd-pf"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:301
+#, no-wrap
+msgid "problem with the man:scsi[4] subsystem"
+msgstr "problema com o subsistema man:scsi[4]"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:303
+#, no-wrap
+msgid "freebsd-scsi"
+msgstr "freebsd-scsi"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:306
+#, no-wrap
+msgid "problem with the man:sound[4] subsystem"
+msgstr "problema com o subsistema man:sound[4]"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:308
+#, no-wrap
+msgid "freebsd-multimedia"
+msgstr "freebsd-multimedia"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:311
+#, no-wrap
+msgid "problems with the man:wlan[4] subsystem and wireless drivers"
+msgstr "problema com o subsistema man:wlan[4] e drivers wireless"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:313
+#, no-wrap
+msgid "freebsd-wireless"
+msgstr "freebsd-wireless"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:316
+#, no-wrap
+msgid "problem with man:sysinstall[8] or man:bsdinstall[8]"
+msgstr "problema com o man:sysinstall[8] ou o man:bsdinstall[8]"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:317
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:457
+#, no-wrap
+msgid "bin"
+msgstr "bin"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:318
+#, no-wrap
+msgid "freebsd-sysinstall"
+msgstr "freebsd-sysinstall"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:321
+#, no-wrap
+msgid "problem with the system startup scripts (man:rc[8])"
+msgstr "problema com os scripts de inicialização do sistema (man:rc[8])"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:323
+#, no-wrap
+msgid "freebsd-rc"
+msgstr "freebsd-rc"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:326
+#, no-wrap
+msgid "problem with VIMAGE or VNET functionality and related code"
+msgstr "problema com a funcionalidade VIMAGE ou VNET e código relacionado"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:328
+#, no-wrap
+msgid "freebsd-virtualization"
+msgstr "freebsd-virtualization"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:331
+#, no-wrap
+msgid "problem with Xen emulation"
+msgstr "problema com a emulação do Xen"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:333
+#, no-wrap
+msgid "freebsd-xen"
+msgstr "freebsd-xen"
+
+#. type: Block title
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:337
+#, no-wrap
+msgid "Common Assignees - Ports Collection"
+msgstr "Atribuidores Comuns - Coleção de Ports"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:346
+#, no-wrap
+msgid "problem with the ports framework (__not__ with an individual port!)"
+msgstr "problema com o framework de ports (__não__ com um port individual!)"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:348
+#, no-wrap
+msgid "portmgr"
+msgstr "portmgr"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:350
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:360
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:365
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:385
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:390
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:430
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:435
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:460
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:464
+#, no-wrap
+msgid "alias"
+msgstr "alias"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:351
+#, no-wrap
+msgid "port which is maintained by apache@FreeBSD.org"
+msgstr "port mantido por apache@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:353
+#, no-wrap
+msgid "apache"
+msgstr "apache"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:356
+#, no-wrap
+msgid "port which is maintained by autotools@FreeBSD.org"
+msgstr "port mantido por autotools@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:358
+#, no-wrap
+msgid "autotools"
+msgstr "autotools"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:361
+#, no-wrap
+msgid "port which is maintained by doceng@FreeBSD.org"
+msgstr "port mantido por doceng@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:363
+#, no-wrap
+msgid "doceng"
+msgstr "doceng"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:366
+#, no-wrap
+msgid "port which is maintained by eclipse@FreeBSD.org"
+msgstr "port mantido por eclipse@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:368
+#, no-wrap
+msgid "freebsd-eclipse"
+msgstr "freebsd-eclipse"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:371
+#, no-wrap
+msgid "port which is maintained by gecko@FreeBSD.org"
+msgstr "port mantido por gecko@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:373
+#, no-wrap
+msgid "gecko"
+msgstr "gecko"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:376
+#, no-wrap
+msgid "port which is maintained by gnome@FreeBSD.org"
+msgstr "port mantido por gnome@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:378
+#, no-wrap
+msgid "gnome"
+msgstr "gnome"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:381
+#, no-wrap
+msgid "port which is maintained by hamradio@FreeBSD.org"
+msgstr "port mantido por hamradio@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:383
+#, no-wrap
+msgid "hamradio"
+msgstr "hamradio"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:386
+#, no-wrap
+msgid "port which is maintained by haskell@FreeBSD.org"
+msgstr "port mantido por haskell@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:388
+#, no-wrap
+msgid "haskell"
+msgstr "haskell"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:391
+#, no-wrap
+msgid "port which is maintained by java@FreeBSD.org"
+msgstr "port mantido por java@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:396
+#, no-wrap
+msgid "port which is maintained by kde@FreeBSD.org"
+msgstr "port mantido por kde@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:398
+#, no-wrap
+msgid "kde"
+msgstr "kde"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:401
+#, no-wrap
+msgid "port which is maintained by mono@FreeBSD.org"
+msgstr "port mantido por mono@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:403
+#, no-wrap
+msgid "mono"
+msgstr "mono"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:406
+#, no-wrap
+msgid "port which is maintained by office@FreeBSD.org"
+msgstr "port mantido por office@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:408
+#, no-wrap
+msgid "freebsd-office"
+msgstr "freebsd-office"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:411
+#, no-wrap
+msgid "port which is maintained by perl@FreeBSD.org"
+msgstr "por mantido por perl@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:413
+#, no-wrap
+msgid "perl"
+msgstr "perl"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:416
+#, no-wrap
+msgid "port which is maintained by python@FreeBSD.org"
+msgstr "port mantido por python@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:418
+#, no-wrap
+msgid "freebsd-python"
+msgstr "freebsd-python"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:421
+#, no-wrap
+msgid "port which is maintained by ruby@FreeBSD.org"
+msgstr "port mantido por ruby@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:423
+#, no-wrap
+msgid "freebsd-ruby"
+msgstr "freebsd-ruby"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:426
+#, no-wrap
+msgid "port which is maintained by secteam@FreeBSD.org"
+msgstr "port mantido por secteam@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:428
+#, no-wrap
+msgid "secteam"
+msgstr "secteam"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:431
+#, no-wrap
+msgid "port which is maintained by vbox@FreeBSD.org"
+msgstr "port mantido por vbox@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:433
+#, no-wrap
+msgid "vbox"
+msgstr "vbox"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:436
+#, no-wrap
+msgid "port which is maintained by x11@FreeBSD.org"
+msgstr "por mantido por x11@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:438
+#, no-wrap
+msgid "freebsd-x11"
+msgstr "freebsd-x11"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:442
+msgid ""
+"Ports PRs which have a maintainer who is a ports committer may be reassigned "
+"by anyone (but note that not every FreeBSD committer is necessarily a ports "
+"committer, so you cannot simply go by the email address alone.)"
+msgstr ""
+"Os relatórios de problemas dos ports que têm um mantenedor que é um "
+"colaborador do ports podem ser reatribuídos por qualquer pessoa (mas observe "
+"que nem todo committer do FreeBSD é necessariamente um committer do ports, "
+"então você não pode simplesmente ir apenas pelo endereço de e-mail.)"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:445
+msgid ""
+"For other PRs, please do not reassign them to individuals (other than "
+"yourself) unless you are certain that the assignee really wants to track the "
+"PR. This will help to avoid the case where no one looks at fixing a "
+"particular problem because everyone assumes that the assignee is already "
+"working on it."
+msgstr ""
+"Para outros PRs, por favor, não reatribua-os para indivíduos (além de si "
+"mesmo) a menos que você esteja certo de que o assignee realmente queira "
+"acompanhar o PR. Isso ajudará a evitar situações nas quais em que ninguém "
+"olha para corrigir um problema específico porque todo mundo assume que o "
+"assignee já está trabalhando no mesmo."
+
+#. type: Block title
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:447
+#, no-wrap
+msgid "Common Assignees - Other"
+msgstr "Atribuidores Comuns - Outros"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:456
+#, no-wrap
+msgid "problem with PR database"
+msgstr "problema com o banco de dados de PRs"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:458
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:463
+#, no-wrap
+msgid "bugmeister"
+msgstr "bugmeister"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:461
+#, no-wrap
+msgid "problem with Bugzilla https://bugs.freebsd.org/submit/[web form]."
+msgstr ""
+"problema com o https://bugs.freebsd.org/submit/[formulario web] do Bugzilla."
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:462
+#, no-wrap
+msgid "doc"
+msgstr "doc"
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:467
+#, no-wrap
+msgid "Assigned PRs"
+msgstr "PRs Atribuídos"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:470
+msgid ""
+"If a PR has the `responsible` field set to the username of a FreeBSD "
+"developer, it means that the PR has been handed over to that particular "
+"person for further work."
+msgstr ""
+"Se um PR tem o campo `responsável` configurado com o nome de usuário de um "
+"desenvolvedor do FreeBSD, isso significa que o PR foi entregue para aquela "
+"pessoa específica para trabalhos posteriores."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:475
+msgid ""
+"Assigned PRs should not be touched by anyone but the assignee or "
+"bugmeister. If you have comments, submit a followup. If for some reason "
+"you think the PR should change state or be reassigned, send a message to the "
+"assignee. If the assignee does not respond within two weeks, unassign the "
+"PR and do as you please."
+msgstr ""
+"Os PRs atribuídos não devem ser alterados por ninguém além do assignee ou do "
+"bugmeister. Se você tiver comentários, envie um acompanhamento. Se, por "
+"algum motivo, você achar que o PR deve mudar de estado ou ser reatribuído, "
+"envie uma mensagem para o assignee. Se o assignee não responder dentro de "
+"duas semanas, desfaça a atribuição do PR e faça o que desejar."
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:477
+#, no-wrap
+msgid "Duplicate PRs"
+msgstr "PRs Duplicados"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:481
+msgid ""
+"If you find more than one PR that describe the same issue, choose the one "
+"that contains the largest amount of useful information and close the others, "
+"stating clearly the number of the superseding PR. If several PRs contain "
+"non-overlapping useful information, submit all the missing information to "
+"one in a followup, including references to the others; then close the other "
+"PRs (which are now completely superseded)."
+msgstr ""
+"Se você encontrar mais de um PR que descreva o mesmo problema, escolha "
+"aquele que contém a maior quantidade de informações úteis e feche os outros, "
+"declarando claramente o número do PR substituto. Se vários PRs contêm "
+"informações úteis que não se sobrepõem, envie todas as informações ausentes "
+"em um acompanhamento para um PR, incluindo referências aos outros; em "
+"seguida, feche os outros PRs (que agora foram completamente substituídos)."
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:483
+#, no-wrap
+msgid "Stale PRs"
+msgstr "PRs Obsoletos"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:486
+msgid ""
+"A PR is considered stale if it has not been modified in more than six "
+"months. Apply the following procedure to deal with stale PRs:"
+msgstr ""
+"Um PR é considerado obsoleto se não foi modificado há mais de seis meses. "
+"Aplique o seguinte procedimento para lidar com PRs obsoletos:"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:488
+msgid ""
+"If the PR contains sufficient detail, try to reproduce the problem in `-"
+"CURRENT` and `-STABLE`. If you succeed, submit a followup detailing your "
+"findings and try to find someone to assign it to. Set the state to \"analyzed"
+"\" if appropriate."
+msgstr ""
+"Se o PR contém detalhes suficientes, tente reproduzir o problema em "
+"`-CURRENT` e `-STABLE`. Se você conseguir reproduzir o problema, envie um "
+"acompanhamento detalhando suas descobertas e tente encontrar alguém para "
+"atribuí-lo. Defina o estado como \"analisado\" se for apropriado."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:489
+msgid ""
+"If the PR describes an issue which you know is the result of a usage error "
+"(incorrect configuration or otherwise), submit a followup explaining what "
+"the originator did wrong, then close the PR with the reason \"User error\" "
+"or \"Configuration error\"."
+msgstr ""
+"Se o PR descreve um problema que você sabe que é o resultado de um erro de "
+"uso (configuração incorreta ou de outra forma), envie um acompanhamento "
+"explicando o que o originador fez de errado e, em seguida, feche o PR com a "
+"razão \"Erro do usuário\" ou \"Erro de configuração\"."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:490
+msgid ""
+"If the PR describes an error which you know has been corrected in both `-"
+"CURRENT` and `-STABLE`, close it with a message stating when it was fixed in "
+"each branch."
+msgstr ""
+"Se o PR descreve um erro que você sabe que foi corrigido tanto em `-CURRENT` "
+"quanto em `-STABLE`, feche-o com uma mensagem indicando quando foi corrigido "
+"em cada branch."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:491
+msgid ""
+"If the PR describes an error which you know has been corrected in `-"
+"CURRENT`, but not in `-STABLE`, try to find out when the person who "
+"corrected it is planning to MFC it, or try to find someone else (maybe "
+"yourself?) to do it. Set the state to \"patched\" and assign it to whomever "
+"will do the MFC."
+msgstr ""
+"Se o PR descreve um erro que você sabe que foi corrigido em `-CURRENT`, mas "
+"não em `-STABLE`, tente descobrir quando a pessoa que corrigiu planeja fazer "
+"o MFC (merge from current) para o `-STABLE`, ou tente encontrar outra pessoa "
+"(talvez você mesmo?) para fazer isso. Defina o estado como \"corrigido\" e "
+"atribua-o à pessoa que fará o MFC."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:492
+msgid ""
+"In other cases, ask the originator to confirm if the problem still exists in "
+"newer versions. If the originator does not reply within a month, close the "
+"PR with the notation \"Feedback timeout\"."
+msgstr ""
+"Em outros casos, peça ao originador para confirmar se o problema ainda "
+"existe em versões mais recentes. Se o originador não responder dentro de um "
+"mês, feche o PR com a anotação \"Tempo limite de feedback\"."
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:494
+#, no-wrap
+msgid "Non-Bug PRs"
+msgstr "PRs não relacionados a bugs"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:497
+msgid ""
+"Developers that come across PRs that look like they should have been posted "
+"to {freebsd-bugs} or some other list should close the PR, informing the "
+"submitter in a comment why this is not really a PR and where the message "
+"should be posted."
+msgstr ""
+"Desenvolvedores que encontram PRs que parecem ter sido postados em {freebsd-"
+"bugs} ou em outra lista devem fechar o PR, informando ao remetente em um "
+"comentário por que isso não é realmente um PR e onde a mensagem deve ser "
+"postada."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:500
+msgid ""
+"The email addresses that Bugzilla listens to for incoming PRs have been "
+"published as part of the FreeBSD documentation, have been announced and "
+"listed on the web-site. This means that spammers found them."
+msgstr ""
+"Os endereços de e-mail que o Bugzilla utiliza para receber PRs foram "
+"publicados como parte da documentação do FreeBSD, foram anunciados e "
+"listados no site. Isso significa que spammers os encontraram."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:502
+msgid "Whenever you close one of these PRs, please do the following:"
+msgstr "Sempre que você fechar um desses PRs, por favor, faça o seguinte:"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:504
+msgid "Set the component to `junk` (under `Supporting Services`."
+msgstr "Defina o componente como `junk` (em `Supporting Services`)."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:505
+msgid "Set Responsible to `nobody@FreeBSD.org`."
+msgstr "Defina o responsável como `nobody@FreeBSD.org`."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:506
+msgid "Set State to `Issue Resolved`."
+msgstr ""
+"Defina o estado como `Problema Resolvido` (ou \"Issue Resolved\" em inglês)."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:508
+msgid ""
+"Setting the category to `junk` makes it obvious that there is no useful "
+"content within the PR, and helps to reduce the clutter within the main "
+"categories."
+msgstr ""
+"Definir a categoria como `junk` torna óbvio que não há conteúdo útil dentro "
+"do PR e ajuda a reduzir a desordem nas categorias principais."
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:510
+#, no-wrap
+msgid "Further Reading"
+msgstr "Leitura Adicional"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:514
+msgid ""
+"This is a list of resources relevant to the proper writing and processing of "
+"problem reports. It is by no means complete."
+msgstr ""
+"Esta é uma lista de recursos relevantes para a escrita adequada e o "
+"processamento dos relatórios de problemas. De forma alguma é uma lista "
+"completa."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:515
+msgid ""
+"extref:{problem-reports}[How to Write FreeBSD Problem Reports]-guidelines "
+"for PR originators."
+msgstr ""
+"extref:{problem-reports}[Como Escrever Relatórios de Problemas do FreeBSD] - "
+"diretrizes para os autores de PRs."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/problem-reports/_index.adoc b/documentation/content/pt-br/articles/problem-reports/_index.adoc
index c004d2cfa9..4bc7bf5e5b 100644
--- a/documentation/content/pt-br/articles/problem-reports/_index.adoc
+++ b/documentation/content/pt-br/articles/problem-reports/_index.adoc
@@ -72,7 +72,7 @@ Considere estes fatores ao enviar PRs sobre ports ou outros softwares que não f
* Por favor, não envie relatórios de problemas que simplesmente afirmam que uma versão mais nova de um aplicativo está disponível. Os mantenedores de ports são notificados automaticamente pelo portscout quando uma nova versão de um aplicativo fica disponível. Patches para atualizar um port para uma versão mais recente do software são sempre bem-vindos.
* Para ports não mantidos (O seu `MAINTAINER` é `ports@FreeBSD.org`), é improvável que um PR que não tenha um patch incluído seja escolhido para ser trabalhado por um committer. Para se tornar o mantenedor de um port não mantido, envie um PR com o pedido (será ótimo se o pedido vier com um patch, mas isso não é obrigatório).
-* Em ambos os casos, seguir o processo descrito no extref:{porters-handbook}[Porter's Handbook, port-upgrading] produzirá os melhores resultados. (Você também pode desejar ler a seção extref:{contributing}[Contribuindo para a Coleção de Ports do FreeBSD].)
+* Em ambos os casos, seguir o processo descrito no extref:{porters-handbook}upgrading/[Porter's Handbook] produzirá os melhores resultados. (Você também pode desejar ler a seção extref:{contributing}[Contribuindo para a Coleção de Ports do FreeBSD, ports-contributing].)
Um bug que não pode ser reproduzido raramente pode ser corrigido. Se o bug ocorreu apenas uma vez e você não pode reproduzi-lo, e não parece acontecer com mais ninguém, é muito provável que nenhum dos desenvolvedores consiga reproduzi-lo ou descobrir o que está errado. Isso não significa que isso não tenha acontecido, mas significa que as chances do seu relatório de problema levar à correção do bug são muito pequenas. Para piorar, muitas vezes esses tipos de bugs são causados por discos rígidos com defeito ou por processadores superaquecidos - sempre que possível você deve tentar descartar essas causas antes de enviar um PR.
@@ -84,7 +84,7 @@ Em seguida, para decidir para quem você deve enviar seu relatório de problema,
Em seguida, verifique se o problema é oportuno. Há poucas coisas que incomodarão mais um desenvolvedor do que receber um relatório de problemas sobre um bug que ele já corrigiu.
-Se o problema estiver no sistema base, primeiro leia a seção extref:{faq}[Versões do FreeBSD, LATEST-VERSION] do FAQ, se você ainda não estiver familiarizado com o tópico. Não é possível para o FreeBSD consertar problemas em nada além de certas branches recentes do sistema base, de forma que enviar um relatório de bug sobre uma versão mais antiga provavelmente resultará em um desenvolvedor aconselhando você a atualizar para uma versão suportada para ver se o problema ainda continua ocorrendo. A equipe Security Officer mantém a link:https://www.FreeBSD.org/security/[lista das versões suportadas].
+Se o problema estiver no sistema base, primeiro leia a seção extref:{faq}[Versões do FreeBSD, latest-version] do FAQ, se você ainda não estiver familiarizado com o tópico. Não é possível para o FreeBSD consertar problemas em nada além de certas branches recentes do sistema base, de forma que enviar um relatório de bug sobre uma versão mais antiga provavelmente resultará em um desenvolvedor aconselhando você a atualizar para uma versão suportada para ver se o problema ainda continua ocorrendo. A equipe Security Officer mantém a link:https://www.FreeBSD.org/security/[lista das versões suportadas].
Se o problema estiver em um port, considere submeter o bug para o upstream. O Projeto FreeBSD não pode corrigir todos os erros em todos os softwares.
diff --git a/documentation/content/pt-br/articles/problem-reports/_index.po b/documentation/content/pt-br/articles/problem-reports/_index.po
index ff4f9ad49d..0f14f4c7b1 100644
--- a/documentation/content/pt-br/articles/problem-reports/_index.po
+++ b/documentation/content/pt-br/articles/problem-reports/_index.po
@@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2022-02-01 09:21-0300\n"
-"PO-Revision-Date: 2022-04-17 13:56+0000\n"
+"POT-Creation-Date: 2022-07-07 23:23-0300\n"
+"PO-Revision-Date: 2022-08-07 17:18+0000\n"
"Last-Translator: Danilo G. Baio <dbaio@FreeBSD.org>\n"
"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
"projects/documentation/articlesproblem-reports_index/pt_BR/>\n"
@@ -21,8 +21,7 @@ msgstr ""
#: documentation/content/en/articles/problem-reports/_index.adoc:1
#, no-wrap
msgid "How to best formulate and submit a problem report to the FreeBSD Project"
-msgstr ""
-"Como melhor formular e enviar um relatório de problema para o Projeto FreeBSD"
+msgstr "Como melhor formular e enviar um relatório de problema para o Projeto FreeBSD"
#. type: Title =
#: documentation/content/en/articles/problem-reports/_index.adoc:1
@@ -156,8 +155,8 @@ msgid ""
msgstr ""
"Então, como se determina o que é um bug e o que não é? Como uma regra "
"simples, o problema _não_ é um bug se ele puder ser expresso como uma "
-"pergunta (geralmente na forma \"Como faço X?\" ou \"Onde posso encontrar Y?\""
-"). Nem sempre é tão preto e branco, mas a regra da pergunta cobre a grande "
+"pergunta (geralmente na forma \"Como faço X?\" ou \"Onde posso encontrar Y?"
+"\"). Nem sempre é tão preto e branco, mas a regra da pergunta cobre a grande "
"maioria dos casos. Ao procurar por uma resposta, considere colocar a questão "
"na {freebsd-questions}."
@@ -202,14 +201,14 @@ msgstr ""
#: documentation/content/en/articles/problem-reports/_index.adoc:82
msgid ""
"In either case, following the process described in extref:{porters-handbook}"
-"[Porter's Handbook, port-upgrading] will yield the best results. (You might "
-"also wish to read extref:{contributing}[Contributing to the FreeBSD Ports "
+"upgrading/[Porter's Handbook] will yield the best results. (You might also "
+"wish to read extref:{contributing}[Contributing to the FreeBSD Ports "
"Collection, ports-contributing].)"
msgstr ""
-"Em ambos os casos, seguir o processo descrito no extref:{porters-handbook}["
-"Porter's Handbook, port-upgrading] produzirá os melhores resultados. (Você "
-"também pode desejar ler a seção extref:{contributing}[Contribuindo para a "
-"Coleção de Ports do FreeBSD].)"
+"Em ambos os casos, seguir o processo descrito no extref:{porters-handbook}"
+"upgrading/[Porter's Handbook] produzirá os melhores resultados. (Você também "
+"pode desejar ler a seção extref:{contributing}[Contribuindo para a Coleção "
+"de Ports do FreeBSD, ports-contributing].)"
#. type: Plain text
#: documentation/content/en/articles/problem-reports/_index.adoc:87
@@ -255,8 +254,8 @@ msgid ""
"should be reported to the FreeBSD developers."
msgstr ""
"Código no sistema base que é escrito e mantido por contribuidores do "
-"FreeBSD, como o kernel, a biblioteca C e os drivers de dispositivo ("
-"categorizados como `kern`); os utilitários binários (`bin`); as páginas de "
+"FreeBSD, como o kernel, a biblioteca C e os drivers de dispositivo "
+"(categorizados como `kern`); os utilitários binários (`bin`); as páginas de "
"manual e documentação (`docs`); e as páginas web (`www`). Todos os erros "
"nestas áreas devem ser reportados aos desenvolvedores do FreeBSD."
@@ -270,8 +269,8 @@ msgid ""
"authors instead if the problems are not FreeBSD-specific."
msgstr ""
"Código no sistema base que é escrito e mantido por outras pessoas, o qual é "
-"importado e adaptado para o FreeBSD. Exemplos incluem o man:clang[1] e o "
-"man:sendmail[8]. A maioria dos bugs nessas áreas deve ser reportada aos "
+"importado e adaptado para o FreeBSD. Exemplos incluem o man:clang[1] e o man:"
+"sendmail[8]. A maioria dos bugs nessas áreas deve ser reportada aos "
"desenvolvedores do FreeBSD; mas em alguns casos eles podem precisar ser "
"relatados aos autores originais se os problemas não forem específicos do "
"FreeBSD."
@@ -309,7 +308,7 @@ msgstr ""
#: 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 "
+"{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 "
@@ -318,7 +317,7 @@ msgid ""
"org/security/[list of supported versions]."
msgstr ""
"Se o problema estiver no sistema base, primeiro leia a seção extref:{faq}["
-"Versões do FreeBSD, LATEST-VERSION] do FAQ, se você ainda não estiver "
+"Versões do FreeBSD, latest-version] do FAQ, se você ainda não estiver "
"familiarizado com o tópico. Não é possível para o FreeBSD consertar "
"problemas em nada além de certas branches recentes do sistema base, de forma "
"que enviar um relatório de bug sobre uma versão mais antiga provavelmente "
@@ -372,24 +371,24 @@ msgstr ""
"A lista das extref:{faq}[Perguntas Mais Frequentes] (FAQ) sobre o FreeBSD. A "
"FAQ tenta fornecer respostas para uma ampla variedade de perguntas, como "
"aquelas relacionadas à extref:{faq}[compatibilidade de hardware, hardware], "
-"extref:{faq}[aplicativos de usuário, applications], e extref:{faq}["
-"configuração do kernel, kernelconfig]."
+"extref:{faq}[aplicativos de usuário, applications], e extref:{faq}"
+"[configuração do kernel, kernelconfig]."
#. type: Plain text
#: documentation/content/en/articles/problem-reports/_index.adoc:114
msgid ""
-"The extref:{handbook}[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."
+"The extref:{handbook}eresources/[mailing lists, eresources-mail]-if you are "
+"not subscribed, use https://www.FreeBSD.org/search/#mailinglists[the "
+"searchable archives] on the FreeBSD web site. If the problem has not been "
+"discussed on the lists, you might try posting a message about it and waiting "
+"a few days to see if someone can spot something that has been overlooked."
msgstr ""
-"As extref:{handbook}[listas de discussões, eresources-mail] - se você não "
-"está inscrito, faça uma pesquisa nos arquivos https://www.FreeBSD.org/search/"
-"#mailinglists[históricos das listas] no site do FreeBSD. Se o problema não "
-"tiver sido discutido nas listas, você pode tentar postar uma mensagem sobre "
-"ele e aguardar alguns dias para ver se alguém consegue detectar algo que foi "
-"esquecido."
+"As extref:{handbook}eresources/[listas de discussões, eresources-mail] - se "
+"você não está inscrito, faça uma pesquisa nos arquivos https://www.FreeBSD."
+"org/search/#mailinglists[históricos das listas] no site do FreeBSD. Se o "
+"problema não tiver sido discutido nas listas, você pode tentar postar uma "
+"mensagem sobre ele e aguardar alguns dias para ver se alguém consegue "
+"detectar algo que foi esquecido."
#. type: Plain text
#: documentation/content/en/articles/problem-reports/_index.adoc:115
@@ -410,10 +409,10 @@ msgid ""
"database] (Bugzilla). Unless the problem is recent or obscure, there is a "
"fair chance it has already been reported."
msgstr ""
-"Em seguida, faça uma pesquisa no https://bugs.freebsd.org/bugzilla/query.cgi["
-"banco de dados de Relatórios de Problemas do FreeBSD] (Bugzilla). A menos "
-"que o problema seja recente ou obscuro, há uma boa chance de que ele já "
-"tenha sido relatado."
+"Em seguida, faça uma pesquisa no https://bugs.freebsd.org/bugzilla/query."
+"cgi[banco de dados de Relatórios de Problemas do FreeBSD] (Bugzilla). A "
+"menos que o problema seja recente ou obscuro, há uma boa chance de que ele "
+"já tenha sido relatado."
#. type: Plain text
#: documentation/content/en/articles/problem-reports/_index.adoc:117
@@ -435,8 +434,8 @@ msgid ""
msgstr ""
"Para o código fonte do FreeBSD, você deve estudar cuidadosamente o conteúdo "
"do [.filename]#/usr/src/UPDATING# em seu sistema ou a última versão "
-"disponível em https://cgit.freebsd.org/src/tree/UPDATING[https://cgit.freebsd"
-".org/src/tree/UPDATING]. (Esta é uma informação vital se você estiver "
+"disponível em https://cgit.freebsd.org/src/tree/UPDATING[https://cgit."
+"freebsd.org/src/tree/UPDATING]. (Esta é uma informação vital se você estiver "
"atualizando de uma versão para outra - especialmente se você estiver "
"atualizando para a branch FreeBSD-CURRENT)."
@@ -498,12 +497,12 @@ msgid ""
"the noise."
msgstr ""
"_Não deixe a linha \"Summary\" vazia._ Os PRs são enviados para listas de "
-"discussão no mundo todo (onde o \"Summary\" é usado para a linha de "
-"`Subject:`), além de serem armazenadas em um banco de dados. Qualquer pessoa "
-"que vier a navegar no banco de dados pelas sinopses, e encontrar um PR com a "
-"linha de assunto em branco, tende a pulá-lo. Lembre-se que os PRs permanecem "
-"na base de dados até que sejam fechados por alguém; os anônimos normalmente "
-"irão desaparecer em meio ao ruído."
+"discussão no mundo todo (onde o \"Summary\" é usado para a linha de `Subject:"
+"`), além de serem armazenadas em um banco de dados. Qualquer pessoa que vier "
+"a navegar no banco de dados pelas sinopses, e encontrar um PR com a linha de "
+"assunto em branco, tende a pulá-lo. Lembre-se que os PRs permanecem na base "
+"de dados até que sejam fechados por alguém; os anônimos normalmente irão "
+"desaparecer em meio ao ruído."
#. type: Plain text
#: documentation/content/en/articles/problem-reports/_index.adoc:135
@@ -523,9 +522,9 @@ msgstr ""
"qual parte do sistema o problema se aplica? O problema ocorre durante a "
"instalação ou durante a execução do sistema? Para ilustrar, em vez de usar "
"`Summary: o portupgrade está quebrado`, veja o quanto mais informativo isso "
-"parece: ` Summary: port ports-mgmt/portupgrade gerando coredumps no -current`"
-". (No caso de um port, é especialmente útil ter tanto o nome da categoria "
-"quanto o nome do port na linha \"Summary\".)"
+"parece: ` Summary: port ports-mgmt/portupgrade gerando coredumps no -"
+"current`. (No caso de um port, é especialmente útil ter tanto o nome da "
+"categoria quanto o nome do port na linha \"Summary\".)"
#. type: Plain text
#: documentation/content/en/articles/problem-reports/_index.adoc:136
@@ -589,8 +588,8 @@ msgid ""
"conf#, [.filename]#src.conf#, and [.filename]#src-env.conf#. Given the "
"infinite number of options, not every combination may be fully supported."
msgstr ""
-"Inclua quais opções globais você especificou em seu [.filename]#make.conf#, ["
-".filename]#src.conf# e [.filename]#src-env.conf#. Dado o número infinito de "
+"Inclua quais opções globais você especificou em seu [.filename]#make.conf#, "
+"[.filename]#src.conf# e [.filename]#src-env.conf#. Dado o número infinito de "
"opções, nem todas as combinações podem ser totalmente suportadas."
#. type: Plain text
@@ -638,8 +637,9 @@ msgid ""
"whether or not you have debugging options enabled (such as `WITNESS`), and "
"if so, whether the problem persists when you change the sense of that option"
msgstr ""
-"independente de você ter ou não opções de debug habilitadas (como `WITNESS`)"
-", e se tiver, se o problema persiste quando você muda o sentido da opção"
+"independente de você ter ou não opções de debug habilitadas (como "
+"`WITNESS`), e se tiver, se o problema persiste quando você muda o sentido da "
+"opção"
#. type: Plain text
#: documentation/content/en/articles/problem-reports/_index.adoc:147
@@ -746,10 +746,10 @@ msgid ""
msgstr ""
"_Certifique-se de que ninguém mais tenha submetido um PR similar._ Embora "
"isso já tenha sido mencionado acima, vale a pena repetir aqui. Leva apenas "
-"um ou dois minutos para usar o mecanismo de busca baseado na Web em "
-"https://bugs.freebsd.org/bugzilla/query.cgi[https://bugs.freebsd.org/"
-"bugzilla/query.cgi]. (Claro, todo mundo é culpado de esquecer de fazer isso "
-"de vez em quando.)"
+"um ou dois minutos para usar o mecanismo de busca baseado na Web em https://"
+"bugs.freebsd.org/bugzilla/query.cgi[https://bugs.freebsd.org/bugzilla/query."
+"cgi]. (Claro, todo mundo é culpado de esquecer de fazer isso de vez em "
+"quando.)"
#. type: Plain text
#: documentation/content/en/articles/problem-reports/_index.adoc:160
@@ -847,10 +847,10 @@ msgstr ""
"patches gerados dessa forma incluirão os hashes do Git e incluirão seu nome "
"e endereço de e-mail, tornando mais fácil para os committers aplicarem seu "
"patch e creditarem você como autor (usando `git am`). Para pequenas "
-"alterações em que você prefere não usar o git, certifique-se de usar "
-"man:diff[1] com a opção `-u` para criar um diff unificado, pois isso daria "
-"aos desenvolvedores mais contexto e seria mais legível do que outros "
-"formatos de diff."
+"alterações em que você prefere não usar o git, certifique-se de usar man:"
+"diff[1] com a opção `-u` para criar um diff unificado, pois isso daria aos "
+"desenvolvedores mais contexto e seria mais legível do que outros formatos de "
+"diff."
#. type: Plain text
#: documentation/content/en/articles/problem-reports/_index.adoc:183
@@ -974,11 +974,11 @@ msgid ""
"on your problem faster if you inflate its importance since there are so many "
"other people who have done exactly that."
msgstr ""
-"_Severity (Gravidade):_ Um dos `Affects only me (Afeta somente eu)`, `"
-"Affects some people (Afeta algumas pessoas)` ou `Affects many people (Afeta "
-"muitas pessoas)`. Não exagere; abstenha-se de rotular seu problema como `"
-"Afeta muitas pessoas` a menos que ele realmente afete. Os desenvolvedores do "
-"FreeBSD não irão necessariamente trabalhar no seu problema mais rápido se "
+"_Severity (Gravidade):_ Um dos `Affects only me (Afeta somente eu)`, "
+"`Affects some people (Afeta algumas pessoas)` ou `Affects many people (Afeta "
+"muitas pessoas)`. Não exagere; abstenha-se de rotular seu problema como "
+"`Afeta muitas pessoas` a menos que ele realmente afete. Os desenvolvedores "
+"do FreeBSD não irão necessariamente trabalhar no seu problema mais rápido se "
"você inflar sua importância, uma vez que existem muitas outras pessoas que "
"fizeram exatamente isso."
@@ -1047,10 +1047,10 @@ msgstr ""
"FreeBSD para a Coleção de Ports é instalar tudo abaixo do [.filename]#/usr/"
"local#, embora esse comportamento possa ser alterado por um administrador do "
"sistema. Para estes, você usará a categoria `ports` (sim, mesmo se a "
-"categoria do port for `www`; veja abaixo). Se a localização for [."
-"filename]#/bin#, [.filename]#/usr/bin#, [.filename]#/sbin# , ou [.filename]#/"
-"usr/sbin#, ele faz parte do sistema base, e você deve usar a categoria `bin`"
-". Essas são todas as coisas descritas na seção 1 ou 8 das páginas de manual."
+"categoria do port for `www`; veja abaixo). Se a localização for [.filename]#/"
+"bin#, [.filename]#/usr/bin#, [.filename]#/sbin# , ou [.filename]#/usr/sbin#, "
+"ele faz parte do sistema base, e você deve usar a categoria `bin`. Essas são "
+"todas as coisas descritas na seção 1 ou 8 das páginas de manual."
#. type: Plain text
#: documentation/content/en/articles/problem-reports/_index.adoc:222
@@ -1156,8 +1156,8 @@ msgid ""
"right category."
msgstr ""
"Você tem uma máquina comum baseada em PC e acha que encontrou um problema "
-"específico para um determinado chipset ou uma placa-mãe em particular: `i386`"
-" é a categoria correta."
+"específico para um determinado chipset ou uma placa-mãe em particular: "
+"`i386` é a categoria correta."
#. type: Block title
#: documentation/content/en/articles/problem-reports/_index.adoc:247
@@ -1331,9 +1331,9 @@ msgid ""
"after posting, so that the people from different time zones around the world "
"have a chance to catch up."
msgstr ""
-"Junte-se aos canais relevantes do IRC. Uma lista parcial está aqui: "
-"https://wiki.freebsd.org/IrcChannels[]. Informe as pessoas nesse canal sobre "
-"o relatório de problemas e peça ajuda. Seja paciente e fique no canal depois "
+"Junte-se aos canais relevantes do IRC. Uma lista parcial está aqui: https://"
+"wiki.freebsd.org/IrcChannels[]. Informe as pessoas nesse canal sobre o "
+"relatório de problemas e peça ajuda. Seja paciente e fique no canal depois "
"de postar, para que as pessoas de diferentes fusos horários ao redor do "
"mundo tenham a chance de responder."
diff --git a/documentation/content/pt-br/articles/rc-scripting/_index.adoc b/documentation/content/pt-br/articles/rc-scripting/_index.adoc
index 2f4e667517..786fc7b14d 100644
--- a/documentation/content/pt-br/articles/rc-scripting/_index.adoc
+++ b/documentation/content/pt-br/articles/rc-scripting/_index.adoc
@@ -1,13 +1,16 @@
---
-title: Scripts rc.d práticos no BSD
authors:
- - author: Yar Tikhiy
+ -
+ author: 'Yar Tikhiy'
email: yar@FreeBSD.org
-copyright: 2005-2006, 2012 The FreeBSD Project
+copyright: '2005-2006, 2012 The FreeBSD Project'
+description: 'Um guia para escrever novos scripts rc.d e entender aqueles que já existem'
+tags: ["rc.d", "scripting", "guide", "tutorial", "FreeBSD"]
+title: 'Scripting rc.d na prática no BSD'
trademarks: ["freebsd", "netbsd", "general"]
---
-= Scripts rc.d práticos no BSD
+= Scripting rc.d na prática no BSD
:doctype: article
:toc: macro
:toclevels: 1
@@ -41,7 +44,7 @@ endif::[]
[.abstract-title]
Resumo
-Os iniciantes podem achar difícil relacionar os fatos da documentação formal do framework [.filename]#rc.d# do BSD com as tarefas práticas do script [.filename]#rc.d#. Neste artigo, consideramos alguns casos típicos de complexidade crescente, vamos mostrar os recursos do [.filename]#rc.d# adequados para cada caso e vamos discutir como eles funcionam. Esse exame deve fornecer pontos de referência para um estudo mais aprofundado do design e da aplicação eficiente do [.filename]#rc.d#.
+Os iniciantes podem achar difícil relacionar os fatos da documentação formal sobre o framework [.filename]#rc.d# do BSD com as tarefas práticas de escrever scripts [.filename]#rc.d#. Neste artigo, consideramos alguns casos típicos de crescente complexidade, mostramos recursos do [.filename]#rc.d# adequados para cada caso e discutimos como eles funcionam. Essa análise deve fornecer pontos de referência para estudos posteriores do design e aplicação eficiente do [.filename]#rc.d#.
'''
@@ -50,26 +53,26 @@ toc::[]
[[rcng-intro]]
== Introdução
-Historicamente o BSD tinha um script de inicialização monolítico, o [.filename]#/etc/rc#. Ele era chamado pelo man:init[8] no momento da inicialização do sistema e executava todas as tarefas necessárias para a operação multi-usuário: verificação e montagem do sistemas de arquivos, configuração de rede, iniciava daemons e assim por diante. A lista precisa de tarefas não era a mesma em todos os sistemas; os administradores precisavam personalizá-lo. Com poucas exceções, o [.filename]#/etc/rc# teve que ser modificado, e os verdadeiros hackers gostaram disso.
+No histórico BSD, havia um script de inicialização monolítico, [.filename]#/etc/rc#. Ele era invocado pelo man:init[8] no momento da inicialização do sistema e realizava todas as tarefas de usuário necessárias para a operação multiusuário: verificação e montagem de sistemas de arquivos, configuração da rede, inicialização de daemons e assim por diante. A lista precisa de tarefas não era a mesma em todos os sistemas; os administradores precisavam personalizá-la. Com poucas exceções, o [.filename]#/etc/rc# tinha que ser modificado, e os verdadeiros hackers gostavam disso.
-O problema real com a abordagem monolítica era que ela não fornecia nenhum controle sobre os componentes individuais iniciados a partir do [.filename]#/etc/rc#. Por exemplo, o [.filename]#/etc/rc# não podia reiniciar um único daemon. O administrador do sistema tinha que encontrar o processo daemon manualmente, matá-lo, esperar até que ele realmente finalizasse, então procurar pelas flags no [.filename]#/etc/rc#, e finalmente digitar a linha de comando completa para iniciar o daemon novamente. A tarefa se tornaria ainda mais difícil e propensa a erros se o serviço de reinicialização consistisse em mais de um daemon ou exigisse ações adicionais. Em poucas palavras, o único script não cumpriu o objetivo dos scripts: tornar a vida do administrador do sistema mais fácil.
+O problema real com a abordagem monolítica era que ela não fornecia controle sobre os componentes individuais iniciados a partir do [.filename]#/etc/rc#. Por exemplo, o [.filename]#/etc/rc# não podia reiniciar um único daemon. O administrador do sistema tinha que encontrar o processo do daemon manualmente, matá-lo, aguardar até que ele realmente finalizasse, navegar por [.filename]#/etc/rc# em busca das flags e, finalmente, digitar a linha de comando completa para iniciar o daemon novamente. A tarefa se tornaria ainda mais difícil e propensa a erros se o serviço a ser reiniciado consistisse em mais de um daemon ou exigisse ações adicionais. Em poucas palavras, o script único falhou em cumprir o objetivo pelo qual um script é criado: tornar a vida do administrador do sistema mais fácil.
-Mais tarde, houve uma tentativa de dividir algumas partes do [.filename]#/etc/rc# para iniciar os subsistemas mais importantes separadamente. O exemplo notório foi o [.filename]#/etc/netstart# para configurar a rede. Ele permitia acessar a rede a partir do modo single-user, mas não se integrou bem ao processo de inicialização automática porque partes de seu código precisavam intercalar com ações essencialmente não relacionadas à rede. Foi por isso que o [.filename]#/etc/netstart# mudou para [.filename]#/etc/rc.network#. Este último não era mais um script comum; ele era composto por um emaranhado de funções man:sh[1] chamadas pelo [.filename]#/etc/rc# em diferentes estágios da inicialização do sistema. No entanto, a medida que as tarefas de inicialização cresciam variadas e sofisticadas, a abordagem "quase modular" tornou-se ainda mais engessada do que o monolítico [.filename]#/etc/rc#.
+Mais tarde, houve uma tentativa de dividir algumas partes do [.filename]#/etc/rc# para iniciar os subsistemas mais importantes separadamente. O exemplo notório foi o [.filename]#/etc/netstart# para iniciar a rede. Isso permitiu o acesso à rede no modo de usuário único, mas não se integrou bem ao processo de inicialização automática porque partes de seu código precisavam intercalar com ações essencialmente não relacionadas à rede. Foi por isso que o [.filename]#/etc/netstart# se transformou em [.filename]#/etc/rc.network#. Este último não era mais um script comum; era composto de grandes funções man:sh[1] complexas chamadas pelo [.filename]#/etc/rc# em diferentes estágios da inicialização do sistema. No entanto, à medida que as tarefas de inicialização ficaram mais diversas e sofisticadas, a abordagem "quase modular" tornou-se ainda mais pesada do que o monolítico [.filename]#/etc/rc# tinha sido.
-Sem um framework limpo e bem projetado, os scripts de inicialização tiveram que se curvar para satisfazer as necessidades de desenvolvimento rápido dos sistemas operacionais baseados no BSD. Tornou-se óbvio, finalmente, que mais passos eram necessários no caminho para construção de um sistema [.filename]#rc# extensível e customizável. Assim nasceu o BSD [.filename]#rc.d#. Seus pais reconhecidos foram o Luke Mewburn e a comunidade do NetBSD. Mais tarde ele foi importado para o FreeBSD. Seu nome se refere à localização dos scripts do sistema para serviços individuais, que é o [.filename]#/etc/rc.d#. Em breve, vamos aprender sobre mais componentes do sistema [.filename]#rc.d# e vamos ver como os scripts individuais são invocados.
+Sem um framework limpo e bem projetado, os scripts de inicialização tiveram que se dobrar para atender às necessidades dos sistemas operacionais baseados em BSD que estavam em rápida evolução. Tornou-se evidente, finalmente, que mais etapas eram necessárias para se chegar a um sistema [.filename]#rc# refinado, granular e extensível. Assim nasceu o [.filename]#rc.d# do BSD. Seus pais reconhecidos foram Luke Mewburn e a comunidade NetBSD. Mais tarde, foi importado para o FreeBSD. Seu nome se refere ao local dos scripts do sistema para serviços individuais, que está em [.filename]#/etc/rc.d#. Em breve, aprenderemos mais sobre os componentes do sistema [.filename]#rc.d# e veremos como os scripts individuais são invocados.
-As idéias básicas por trás do BSD [.filename]#rc.d# são _modularidade fina_ e __reutilização de código__. _Modularidade fina_ significa que cada "serviço básico", como um daemon do sistema ou uma tarefa de inicialização primitiva, obtém seu próprio script man:sh[] capaz de iniciar o serviço, pará-lo, recarregá-lo e verificar seu status. Uma ação específica é escolhida pelo argumento da linha de comando para o script. O script [.filename]#/etc/rc# ainda comanda a inicialização do sistema, mas agora ele simplesmente invoca os scripts menores um por um com o argumento `start`. É fácil executar tarefas de desligamento executando o mesmo conjunto de scripts com o argumento `stop`, o que é feito pelo [.filename]#/etc/rc.shutdown#. Observe como isso segue de perto o modo Unix de ter um conjunto de pequenas ferramentas especializadas, cada uma cumprindo sua tarefa da melhor forma possível. _Reutilização de código_ significa que operações comuns são implementadas como funções man:sh[1] e coletadas em [.filename]#/etc/rc.subr#. Agora, um script típico pode conter apenas algumas linhas de código man:sh[1]. Finalmente, uma parte importante do framework do [.filename]#rc.d# é man:rcorder[8], o qual ajuda o [.filename]#/etc/rc# a executar os pequenos scripts ordenadamente em relação às dependências entre eles. Ele também pode ajudar o [.filename]#/etc/rc.shutdown#, porque a ordem apropriada para a sequência de encerramento é oposta à da inicialização.
+As ideias básicas por trás do [.filename]#rc.d# do BSD são _modularidade fina_ e __reutilização de código__. _Modularidade fina_ significa que cada "serviço" básico, como um daemon do sistema ou uma tarefa de inicialização primitiva, possui seu próprio script man:sh[1] capaz de iniciar o serviço, pará-lo, recarregá-lo e verificar seu status. Uma ação específica é escolhida pelo argumento da linha de comando do script. O script [.filename]#/etc/rc# ainda conduz a inicialização do sistema, mas agora ele apenas invoca os scripts menores um por um com o argumento `start`. Também é fácil realizar tarefas de desligamento executando o mesmo conjunto de scripts com o argumento `stop`, que é feito por [.filename]#/etc/rc.shutdown#. Observe como isso segue de perto a maneira Unix de ter um conjunto de ferramentas especializadas pequenas, cada uma cumprindo sua tarefa da melhor maneira possível. _Reutilização de código_ significa que operações comuns são implementadas como funções man:sh[1] e coletadas em [.filename]#/etc/rc.subr#. Agora, um script típico pode ser composto apenas de algumas linhas de código man:sh[1]. Finalmente, uma parte importante do framework [.filename]#rc.d# é o man:rcorder[8], que ajuda o [.filename]#/etc/rc# a executar os pequenos scripts de maneira ordenada com respeito às dependências entre eles. Isso também pode ajudar o [.filename]#/etc/rc.shutdown#, porque a ordem apropriada para a sequência de desligamento é oposta à de inicialização.
-O design do BSD [.filename]#rc.d# é descrito no <<lukem, the original article by Luke Mewburn>>, e os componentes do [.filename]#rc.d# são documentados em grande detalhe nas <<manpages, the respective manual pages>>. No entanto, pode não parecer óbvio para um novato em [.filename]#rc.d# como amarrar os inúmeros pedaços juntos para criar um script bem estilizado para uma tarefa específica. Portanto, este artigo tentará uma abordagem diferente para descrever o [.filename]#rc.d#. Ele mostrará quais recursos devem ser usados em vários casos típicos e por quê. Note que este não é um documento explicativo porque nosso objetivo não é fornecer receitas prontas, mas mostrar algumas entradas fáceis no domínio do [.filename]#rc.d#. Nem este artigo é um substituto para as páginas de manual relevantes. Não hesite em consultá-los para obter uma documentação mais formal e completa ao ler este artigo.
+O design do BSD [.filename]#rc.d# é descrito no <<lukem, artigo original de Luke Mewburn>>, e os componentes do [.filename]#rc.d# são documentados em grande detalhe nas <<manpages, respectivas páginas do manual>>. No entanto, pode não ser óbvio para um iniciante no [.filename]#rc.d# como ele deve unir as numerosas partes para criar um script bem estruturado para uma tarefa específica. Portanto, este artigo tentará abordar o [.filename]#rc.d# de forma diferente. Mostrará quais recursos devem ser usados em vários casos típicos e por que. Observe que este não é um documento de "como fazer", porque nosso objetivo não é fornecer receitas prontas, mas mostrar algumas entradas fáceis no mundo do [.filename]#rc.d#. Este artigo também não substitui as páginas do manual relevantes. Não hesite em consultá-las para obter documentação mais formal e completa enquanto lê este artigo.
-Existem pré-requisitos para entender este artigo. Primeiro de tudo, você deve estar familiarizado com a linguagem de script man:sh[1] para poder dominar o [.filename]#rc.d#. Além disso, você deve saber como o sistema executa as tarefas de inicialização e encerramento do userland, o que está descrito em man:rc[8].
+Existem pré-requisitos para entender este artigo. Em primeiro lugar, você deve estar familiarizado com a linguagem de script man:sh[1] para dominar o [.filename]#rc.d#. Além disso, você deve saber como o sistema realiza tarefas de inicialização e desligamento do espaço do usuário, o que é descrito em man:rc[8].
-Este artigo foca no branch [.filename]#rc.d# do FreeBSD. No entanto, ele também pode ser útil para os desenvolvedores do NetBSD, porque os dois branchs [.filename]#rc.d# do BSD não apenas compartilham o mesmo design, mas também permanecem similares em seus aspectos visíveis aos autores do script.
+Este artigo foca no ramo do FreeBSD do [.filename]#rc.d#. No entanto, ele pode ser útil também para desenvolvedores do NetBSD, pois os dois ramos do [.filename]#rc.d# não apenas compartilham o mesmo design, mas também permanecem similares em seus aspectos visíveis aos autores de scripts.
[[rcng-task]]
== Esboçando a tarefa
-Um pouco de consideração antes de iniciar o `$EDITOR` não irá prejudicar. Para escrever um script [.filename]#rc.d# corretamente customizado para um serviço do sistema, devemos poder responder as seguintes questões primeiro:
+Uma pequena reflexão antes de iniciar o `$EDITOR` não fará mal. Para escrever um script [.filename]#rc.d# bem elaborado para um serviço do sistema, devemos ser capazes de responder às seguintes perguntas primeiro:
* O serviço é obrigatório ou opcional?
* O script servirá um único programa, por exemplo, um daemon, ou realizará ações mais complexas?
@@ -101,67 +104,67 @@ load_rc_config $name <.>
run_rc_command "$1" <.>
....
-Os pontos a serem observadas são:
+Os pontos a serem observados são:
-&#10122; Um script interpretado deve começar com a linha mágica "shebang". Essa linha especifica o programa interpretador para o script. Devido a linha shebang, o script pode ser invocado exatamente como um programa binário, desde que tenha o bit de execução definido. (Veja man:chmod[1].) Por exemplo, um administrador do sistema pode executar nosso script manualmente, a partir da linha de comando:
+&#10122; Um script interpretado deve começar com a linha mágica "shebang". Essa linha especifica o programa interpretador para o script. Devido à linha shebang, o script pode ser invocado exatamente como um programa binário, desde que tenha o bit de execução definido. (Veja man:chmod[1].) Por exemplo, um administrador do sistema pode executar nosso script manualmente, a partir da linha de comando:
-[source,shell]
+[source, shell]
....
# /etc/rc.d/dummy start
....
[NOTE]
====
-Para ser adequadamente gerenciado pelo framework do [.filename]#rc.d#, seus scripts precisam ser escritos na linguagem man:sh[1]. Se você tiver um serviço ou port que use um utilitário de controle binário ou uma rotina de inicialização escrita em outra linguagem, instale este elemento em [.filename]#/usr/sbin# (para o sistema) ou em [.filename]#/usr/local/sbin# (para um port) e invoque-o por meio de um script man:sh[1] no diretório apropriado do [.filename]#rc.d#.
+Para ser gerenciado corretamente pelo framework [.filename]#rc.d#, os scripts devem ser escritos na linguagem man:sh[1]. Se você tiver um serviço ou port que usa um utilitário de controle binário ou uma rotina de inicialização escrita em outra linguagem, instale esse elemento em [.filename]#/usr/sbin# (para o sistema) ou [.filename]#/usr/local/sbin# (para ports) e chame-o a partir de um script man:sh[1] no diretório [.filename]#rc.d# apropriado.
====
[TIP]
====
-Caso você queira aprender os detalhes do porque os scripts [.filename]#rc.d# devem ser escritos na linguagem man:sh[1], veja como o [.filename]#/etc/rc# invoca-os por meio de `run_rc_script`, e então estude a implementação de `run_rc_script` em [.filename]#/etc/rc. subr#.
+Se você gostaria de aprender os detalhes de por que os scripts [.filename]#rc.d# devem ser escritos na linguagem man:sh[1], veja como o [.filename]#/etc/rc# os invoca por meio de `run_rc_script` e, em seguida, estude a implementação de `run_rc_script` em [.filename]#/etc/rc.subr#.
====
-&#10123; Em [.filename]#/etc/rc.subr#, várias funções man:sh[1] estão definidas para serem utilizadas por um script [.filename]#rc.d#. As funções estão documentadas em man:rc.subr[8]. Embora seja teoricamente possível escrever um script [.filename]#rc.d# sem usar o man:rc.subr[8], as suas funções são extremamente úteis e tornam o trabalho mais fácil. Portanto, não é de surpreender que todos recorram a scripts man:rc.subr[8] em [.filename]#rc.d#. Nós não vamos ser uma exceção.
+&#10123; Em [.filename]#/etc/rc.subr#, uma série de funções man:sh[1] estão definidas para serem utilizadas por um script [.filename]#rc.d#. As funções estão documentadas em man:rc.subr[8]. Embora seja teoricamente possível escrever um script [.filename]#rc.d# sem nunca usar o man:rc.subr[8], suas funções provam ser extremamente úteis e tornam o trabalho uma ordem de magnitude mais fácil. Portanto, não é surpresa que todo mundo recorra ao man:rc.subr[8] em scripts [.filename]#rc.d#. Não seremos uma exceção.
-Um script [.filename]#rc.d# deve "incluir" o [.filename]#/etc/rc.subr# (isto por ser feito usando o comando "`.`") _antes_ que ele chame as funções do man:rc.subr[8] para que o man:sh[1] tenha a oportunidade para aprender as funções. O estilo preferido é incluir o [.filename]#/etc/rc.subr# antes de tudo.
+Um script [.filename]#rc.d# deve fazer o "source" do [.filename]#/etc/rc.subr# (inclua-o usando "`.`") _antes_ de chamar as funções man:rc.subr[8] para que o man:sh[1] tenha a oportunidade de aprender as funções. O estilo preferido é incluir o [.filename]#/etc/rc.subr# antes de tudo.
[NOTE]
====
-Algumas funções úteis relacionadas a rede são fornecidas por outro arquivo include, o [.filename]#/etc/network.subr#.
+Algumas funções úteis relacionadas à rede são fornecidas por outro arquivo de inclusão, o [.filename]#/etc/network.subr#.
====
-&#10124; [[name-var]]A variável obrigatória `name` especifica o nome do nosso script. Ela é exigida pelo man:rc.subr[8]. Ou seja, cada script [.filename]#rc.d# __deve__ definir a variável `name` antes de chamar funções do man:rc.subr[8].
+&#10124; A variável obrigatória `name` especifica o nome do nosso script. Ela é exigida pelo man:rc.subr[8]. Isso significa que cada script [.filename]#rc.d# _deve_ definir `name` antes de chamar funções do man:rc.subr[8].
Agora é o momento certo para escolher um nome exclusivo para o nosso script de uma vez por todas. Vamos usá-lo em vários lugares enquanto desenvolvemos o script. Para começar, também vamos dar o mesmo nome ao arquivo de script.
[NOTE]
====
-O estilo atual do script [.filename]#rc.d# é incluir valores atribuídos as variáveis entre aspas duplas. Tenha em mente que é apenas um problema de estilo que nem sempre pode ser aplicável. Você pode omitir com segurança as aspas das palavras simples sem os metacaracteres do man:sh[1] nelas, enquanto em certos casos você precisará de aspas simples para evitar qualquer interpretação do valor pelo man:sh[1]. Um programador deve ser capaz de dizer a sintaxe da linguagem a partir das convenções de estilo e bem como de usá-las sabiamente.
+O estilo atual de escrita de scripts [.filename]#rc.d# é envolver os valores atribuídos às variáveis em aspas duplas. Tenha em mente que isso é apenas uma questão de estilo que nem sempre é aplicável. Você pode seguramente omitir as aspas ao redor de palavras simples sem metacaracteres man:sh[1], enquanto em certos casos você precisará de aspas simples para evitar qualquer interpretação do valor por man:sh[1]. Um programador deve ser capaz de distinguir a sintaxe da linguagem das convenções de estilo e usá-las sabiamente.
====
-&#10125; A idéia principal por trás do man:rc.subr[8] é que um script [.filename]#rc.d# fornece manipuladores, ou métodos, para o man:rc.subr[8] invocar. Em particular, `start`, `stop` e outros argumentos para um script [.filename]#rc.d# são tratados desta maneira. Um método é uma expressão man:sh[1] armazenada em uma variável denominada `argument_cmd`, no qual _argument_ corresponde ao que pode ser especificado na linha de comando do script. Vamos ver mais adiante como o man:rc.subr[8] fornece métodos default para os argumentos padrão.
+&#10125; Cada script [.filename]#rc.d# fornece manipuladores, ou métodos, para o man:rc.subr[8] invocar. Em particular, `start`, `stop`, e outros argumentos para um script [.filename]#rc.d# são manipulados desta forma. Um método é uma expressão man:sh[1] armazenada em uma variável chamada `argument_cmd`, onde _argument_ corresponde ao que pode ser especificado na linha de comando do script. Veremos mais tarde como o man:rc.subr[8] fornece métodos padrão para os argumentos padrão.
[NOTE]
====
-Para tornar o código em [.filename]#rc.d# mais uniforme, é comum usar `${name}` onde for apropriado. Assim, várias linhas podem ser copiadas de um script para outro.
+Para tornar o código em [.filename]#rc.d# mais uniforme, é comum usar `${name}` sempre que apropriado. Assim, várias linhas podem ser simplesmente copiadas de um script para outro.
====
-&#10126; Devemos ter em mente que o man:rc.subr[8] fornece métodos default para os argumentos padrões. Consequentemente, devemos sobrescrever um método default com uma expressão no-op man:sh[] se desejarmos que ele não faça nada.
+&#10126; Devemos ter em mente que o man:rc.subr[8] fornece métodos padrões para os argumentos padrões. Consequentemente, devemos substituir um método padrão por uma expressão man:sh[1] sem efeito se quisermos que ele não faça nada.
-&#10127; O corpo de um método sofisticado pode ser implementado como uma função. É uma boa ideia tornar o nome da função significativo.
+&#10127; O corpo de um método sofisticado pode ser implementado como uma função. É uma boa ideia dar um nome significativo à função.
[IMPORTANT]
====
-É altamente recomendado adicionar o prefixo `${name}` aos nomes de todas as funções definidas em nosso script, para que eles nunca entrem em conflito com as funções do man:rc.subr[8] ou outro arquivo de inclusão comum.
+Recomenda-se fortemente adicionar o prefixo `${name}` aos nomes de todas as funções definidas no nosso script para que nunca entrem em conflito com as funções de man:rc.subr[8] ou outro arquivo de inclusão comum.
====
-&#10128; Essa chamada ao man:rc.subr[8] carrega as variáveis do man:rc.conf[5]. Nosso script não faz uso delas ainda, mas ainda assim é recomendado carregar o man:rc.conf[5] pois podem haver variáveis man:rc.conf[5] controlando o man:rc.subr[8] propriamente dito.
+&#10128; Essa chamada para o man:rc.subr[8] carrega as variáveis do man:rc.conf[5]. Nosso script ainda não as usa, mas ainda é recomendável carregar o man:rc.conf[5] porque pode haver variáveis do man:rc.conf[5] controlando o man:rc.subr[8] em si.
-&#10129; Geralmente este é o último comando em um script [.filename]#rc.d#. Ele invoca o maquinário man:rc.subr[8] para executar a ação solicitada usando as variáveis e métodos que nosso script forneceu.
+&#10129; Geralmente, esse é o último comando em um script [.filename]#rc.d#. Ele invoca a maquinaria do man:rc.subr[8] para realizar a ação solicitada usando as variáveis e métodos que o nosso script forneceu.
[[rcng-confdummy]]
== Um script fictício configurável
-Agora vamos adicionar alguns controles ao nosso script fictício. Como você deve saber, os scripts [.filename]#rc.d# são controlados pelo man:rc.conf[5]. Felizmente, o man:rc.subr[8] esconde todas as complicações de nós. O script a seguir usa o man:rc.conf[5] via man:rc.subr[8] para ver se ele está habilitado em primeiro lugar, e buscar uma mensagem para mostrar no momento da inicialização. Estas duas tarefas são de fato independentes. Por um lado, um script [.filename]#rc.d# pode apenas suportar a ativação e desativação de seu serviço. Por outro lado, um script [.filename]#rc.d# obrigatório pode ter variáveis de configuração. Nós vamos fazer as duas coisas no mesmo script:
+Agora vamos adicionar alguns controles ao nosso script fictício. Como você deve saber, scripts [.filename]#rc.d# são controlados com o man:rc.conf[5]. Felizmente, o man:rc.subr[8] oculta todas as complicações para nós. O script a seguir usa o man:rc.conf[5] por meio do man:rc.subr[8] para verificar se está habilitado em primeiro lugar e para buscar uma mensagem para ser exibida na inicialização. Essas duas tarefas, na verdade, são independentes. Por um lado, um script [.filename]#rc.d# pode apenas suportar a habilitação e desabilitação do seu serviço. Por outro lado, um script [.filename]#rc.d# obrigatório pode ter variáveis de configuração. No entanto, faremos as duas coisas no mesmo script:
[.programlisting]
....
@@ -189,43 +192,43 @@ run_rc_command "$1"
O que mudou neste exemplo?
-&#10122; A variável `rcvar` especifica o nome da variável do botão ON/OFF.
+&#10122; A variável `rcvar` especifica o nome da variável do botão LIGA/DESLIGA.
-&#10123; Agora o `load_rc_config` é invocado anteriormente no script, antes que qualquer variável do man:rc.conf[5] seja acessada.
+&#10123; Agora, o `load_rc_config` é invocado mais cedo no script, antes que quaisquer variáveis do man:rc.conf[5] sejam acessadas.
[NOTE]
====
-Ao examinar os scripts [.filename]#rc.d#, tenha em mente que o man:sh[1] adia a avaliação de expressões em uma função até que a função seja chamada. Portanto, não é um erro invocar `load_rc_config` tão tarde quanto antes do `run_rc_comman` e ainda acessar as variáveis do man:rc.conf[5] a partir do método das funções exportadas para o `run_rc_command`. Isto ocorre porque as funções do método devem ser chamadas por `run_rc_command`, que é chamado _após_ o `load_rc_config`.
+Enquanto examina os scripts [.filename]#rc.d#, tenha em mente que o man:sh[1] adia a avaliação de expressões em uma função até que esta seja chamada. Portanto, não é um erro invocar `load_rc_config` tão tarde quanto logo antes de `run_rc_command` e ainda assim acessar as variáveis man:rc.conf[5] das funções de método exportadas para `run_rc_command`. Isso ocorre porque as funções de método devem ser chamadas por `run_rc_command`, que é invocado _após_ `load_rc_config`.
====
-&#10124; Um aviso será emitido pelo `run_rc_command` se o próprio `rcvar` estiver definido, mas a variável de knob indicada não estiver definida. Se o seu script [.filename]#rc.d# for para o sistema base, você deve adicionar uma configuração padrão para o knob no [.filename]#/etc/defaults/rc.conf# e documentá-lo em man:rc.conf[5]. Caso contrário, será o seu script que deverá fornecer uma configuração padrão para o knob. A abordagem canônica para o último caso é mostrada no exemplo.
+&#10124; Aviso será emitido pelo `run_rc_command` se o `rcvar` em si estiver configurado, mas a variável de controle indicada estiver desativada. Se o seu script [.filename]#rc.d# é para o sistema base, você deve adicionar uma configuração padrão para o knob em [.filename]#/etc/defaults/rc.conf# e documentá-lo em man:rc.conf[5]. Caso contrário, é seu script que deve fornecer uma configuração padrão para o knob. A abordagem canônica para o último caso é mostrada no exemplo.
[NOTE]
====
-Você pode fazer o man:rc.subr[8] agir como se o knob fosse definido como `ON`, independentemente da sua configuração atual, prefixando o argumento para o script com `one` ou `force`, como em `onestart` ou `forcestop`. Tenha em mente que o `force` tem outros efeitos perigosos que mencionaremos abaixo, enquanto `one` apenas sobrescreve o knob ON/OFF. Por exemplo, suponha que `dummy_enable` seja `OFF`. O comando a seguir executará o método `start` apesar da configuração:
+Você pode fazer o man:rc.subr[8] agir como se o botão estivesse definido como `ON`, independentemente de sua configuração atual, prefixando o argumento do script com `one` ou `force`, como em `onestart` ou `forcestop`. No entanto, tenha em mente que `force` tem outros efeitos perigosos que abordaremos abaixo, enquanto `one` apenas substitui o botão ON/OFF. Por exemplo, suponha que `dummy_enable` esteja definido como `OFF`. O seguinte comando executará o método `start` apesar da configuração:
-[source,shell]
+[source, shell]
....
# /etc/rc.d/dummy onestart
....
====
-&#10125; Agora, a mensagem a ser mostrada no momento da inicialização não é mais codificada no script. Ela é especificada por uma variável do man:rc.conf[5] chamada `dummy_msg`. Este é um exemplo trivial de como as variáveis do man:rc.conf[5] podem controlar um script [.filename]#rc.d#.
+&#10125; Agora a mensagem a ser exibida na inicialização não é mais codificada no script. É especificada por uma variável man:rc.conf[5] chamada `dummy_msg`. Este é um exemplo trivial de como as variáveis man:rc.conf[5] podem controlar um script [.filename]#rc.d#.
[IMPORTANT]
====
-Os nomes de todas as variáveis do man:rc.conf[5] usadas exclusivamente pelo nosso script _devem_ possuir o mesmo prefixo: `${name}_`. Por exemplo: `dummy_mode`, `dummy_state_file`, e assim por diante.
+Os nomes de todas as variáveis man:rc.conf[5] usadas exclusivamente pelo nosso script _devem_ ter o mesmo prefixo: `${name}_`. Por exemplo: `dummy_mode`, `dummy_state_file`, e assim por diante.
====
[NOTE]
====
-Embora seja possível usar um nome mais curto internamente, por exemplo, apenas `msg`, adicionar o prefixo exclusivo `${name}_` a todos os nomes globais introduzidos pelo nosso script nos salvará de possíveis colisões com o nome das funções existentes no man:rc.subr[8].
+Embora seja possível usar um nome mais curto internamente, por exemplo, apenas `msg`, adicionar o prefixo único `${name}_` a todos os nomes globais introduzidos pelo nosso script nos salvará de possíveis colisões com o namespace do man:rc.subr[8].
-Como regra, os scripts [.filename]#rc.d# do sistema base não precisam fornecer valores padrões para as suas variáveis man:rc.conf[5] porque os padrões devem ser definidos em [.filename]#/etc/defaults/rc.conf#. Por outro lado, os scripts [.filename]#rc.d# para os ports devem fornecer os valores padrões, conforme mostrado no exemplo.
+Como regra geral, os scripts [.filename]#rc.d# do sistema base não precisam fornecer valores padrão para suas variáveis man:rc.conf[5], pois os valores padrão devem ser definidos em [.filename]#/etc/defaults/rc.conf#. Por outro lado, os scripts [.filename]#rc.d# para ports devem fornecer os valores padrão conforme mostrado no exemplo.
====
-&#10126; Aqui usamos `dummy_msg` para realmente controlar nosso script, ou seja, para emitir uma mensagem variável. O uso de uma função de shell é um exagero aqui, já que ele só executa um único comando; uma alternativa igualmente válida seria:
+&#10126; Aqui usamos `dummy_msg` para controlar nosso script, ou seja, para emitir uma mensagem variável. O uso de uma função shell é excessivo aqui, uma vez que ela executa apenas um único comando; uma alternativa igualmente válida é:
[.programlisting]
....
@@ -235,7 +238,7 @@ start_cmd="echo \"$dummy_msg\""
[[rcng-daemon]]
== Inicialização e desligamento de um daemon simples
-Dissemos anteriormente que o man:rc.subr[8] poderia fornecer métodos padrão. Obviamente, estes padrões não podem ser muito gerais. Eles são adequados para o caso comum de iniciar e encerrar um programa daemon simples. Vamos supor agora que precisamos escrever um script [.filename]#rc.d# para um daemon chamado `mumbled`. Aqui está:
+Dissemos anteriormente que o man:rc.subr[8] pode fornecer métodos padrões. Obviamente, tais padrões não podem ser muito gerais. Eles são adequados para o caso comum de iniciar e desligar um programa de daemon simples. Vamos supor agora que precisamos escrever um script [.filename]#rc.d# para um daemon chamado `mumbled`. Aqui está:
[.programlisting]
....
@@ -254,20 +257,20 @@ run_rc_command "$1"
Agradavelmente simples, não é? Vamos examinar nosso pequeno script. A única coisa nova a observar é o seguinte:
-&#10122; A variável `command` é significativa para o man:rc.subr[8]. Se estiver definido, o man:rc.subr[8] agirá de acordo com o cenário de servir um daemon convencional. Em particular, os métodos padrão serão fornecidos para tais argumentos: `start`, `stop`, `restart`, `poll`, e `status`.
+&#10122; A variável `command` é significativa para man:rc.subr[8]. Se ela estiver definida, man:rc.subr[8] agirá de acordo com o cenário de servir a um daemon convencional. Em particular, os métodos padrão serão fornecidos para esses argumentos: `start`, `stop`, `restart`, `poll` e `status`.
-O daemon será iniciado executando `$command` com os sinalizadores de linha de comando especificados por `$mumbled_flags`. Assim, todos os dados de entrada para o método padrão `start` estão disponíveis nas variáveis configuradas pelo nosso script. Ao contrário do `start`, outros métodos podem requerer informações adicionais sobre o processo iniciado. Por exemplo, `stop` deve conhecer o PID do processo para terminá-lo. No presente caso, man:rc.subr[8]varrerá a lista de todos os processos, procurando por um processo com seu nome igual a `$procname`. Esta última é outra variável de significado para man:rc.subr[8], e seu valor é padronizado para `command`. Em outras palavras, quando definimos o `command`, `procname` é efetivamente definido para o mesmo valor. Isso permite que nosso script mate o daemon e verifique se ele está sendo executado em primeiro lugar.
+O daemon será iniciado executando `$command` com as flags de linha de comando especificadas por `$mumbled_flags`. Assim, todos os dados de entrada para o método `start` padrão estão disponíveis nas variáveis definidas pelo nosso script. Ao contrário de `start`, outros métodos podem exigir informações adicionais sobre o processo iniciado. Por exemplo, `stop` deve saber o PID do processo para terminá-lo. No caso presente, man:rc.subr[8] irá pesquisar a lista de todos os processos, procurando por um processo com o nome igual a `procname`. Este último é outra variável com significado para man:rc.subr[8], e seu valor padrão é o de `command`. Em outras palavras, quando definimos `command`, `procname` é efetivamente definido para o mesmo valor. Isso permite que nosso script mate o daemon e verifique se ele está em execução.
[NOTE]
====
-Alguns programas são, na verdade, scripts executáveis. O sistema executa esse script iniciando seu interpretador e passando o nome do script para ele como um argumento de linha de comando. Isso é refletido na lista de processos, que podem confundir o man:rc.subr[8]. Você também deve definir o `command_interpreter` para permitir que o man:rc.subr[8] saiba o nome real do processo se o `$command` é um script.
+Algumas vezes, programas são de fato scripts executáveis. O sistema executa esse script iniciando o seu interpretador e passando o nome do script como um argumento na linha de comando. Isso é refletido na lista de processos, o que pode confundir man:rc.subr[8]. Você deve adicionalmente definir `command_interpreter` para que man:rc.subr[8] saiba o nome real do processo se `$command` for um script.
-Para cada script [.filename]#rc.d#, existe uma variável man:rc.conf[] que tem precedência sobre `command`. Seu nome é construído da seguinte forma: `${name}_program`, onde `name` é a variável obrigatória que discutimos <<name-var, earlier>>. Por exemplo, neste caso, será `mumbled_program`. É man:rc.subr[8] que organiza `${name}_program` para substituir o comando.
+A cada script [.filename]#rc.d#, há uma variável opcional do man:rc.conf[5] que tem precedência sobre `command`. Seu nome é construído da seguinte forma: `${name}_program`, onde `name` é a variável obrigatória discutida anteriormente. Por exemplo, neste caso, será `mumbled_program`. É o man:rc.subr[8] que arruma `${name}_program` para substituir `command`.
-Obviamente, o man:sh[1] permitirá que você defina `${name}_program` a partir do man:rc.conf[5] ou o próprio script, mesmo que o `command` esteja indefinido. Nesse caso, as propriedades especiais de `${name}_program` são perdidas e se tornam uma variável comum que seu script pode usar para seus próprios propósitos. No entanto, o uso exclusivo de `${name}_program` é desencorajado porque usá-lo junto com o `command` tornou-se um idioma na escrita de scripts [.filename]#rc.d#.
+Claro que o man:sh[1] permite definir `${name}_program` a partir do man:rc.conf[5] ou do próprio script, mesmo se `command` não estiver definido. Nesse caso, as propriedades especiais de `${name}_program` são perdidas, e ela se torna uma variável comum que o script pode usar para seus próprios fins. No entanto, o uso exclusivo de `${name}_program` é desencorajado, pois usá-la em conjunto com `command` se tornou idiomático em [.filename]#rc.d# scripting.
====
-Para obter informações mais detalhadas sobre métodos padrões, consulte man:rc.subr[8].
+Para obter informações mais detalhadas sobre os métodos padrões, consulte man:rc.subr[8].
[[rcng-daemon-adv]]
== Inicialização e desligamento de um daemon avançado
@@ -288,7 +291,7 @@ command_args="mock arguments > /dev/null 2>&1" <.>
pidfile="/var/run/${name}.pid" <.>
-required_files="/etc/${name}.conf /usr/shared/misc/${name}.rules" <.>
+required_files="/etc/${name}.conf /usr/share/misc/${name}.rules" <.>
sig_reload="USR1" <.>
@@ -330,75 +333,75 @@ load_rc_config $name
run_rc_command "$1"
....
-&#10122; Argumentos adicionais para `$command` podem ser passados em `command_args`. Eles serão adicionados a linha de comando após `$mumbled_flags`. Como a linha de comando final é passada para `eval` para sua execução real, os redirecionamentos de entrada e saída podem ser especificados em `command_args`.
+&#10122; Argumentos adicionais para `$command` podem ser passados em `command_args`. Eles serão adicionados à linha de comando após `$mumbled_flags`. Como a linha de comando final é passada para `eval` para sua execução real, redirecionamentos de entrada e saída podem ser especificados em `command_args`.
[NOTE]
====
-_Nunca_ inclua opções tracejadas, como `-X` ou `--foo`, em `command_args`. O conteúdo de `command_args` aparecerá no final da linha de comando final, portanto é provável que eles sigam os argumentos presentes em `${name}_flags`; mas a maioria dos comandos não reconhecerá opções tracejadas após argumentos comuns. Uma maneira melhor de passar opções adicionais para `$command` é adicioná-las ao início de `${name}_flags`. Outra maneira é modificar `rc_flags` <<rc-flags, as shown later>>.
+_Nunca_ inclua opções com hífen, como `-X` ou `--foo`, em `command_args`. O conteúdo de `command_args` aparecerá no final da linha de comando final, portanto, é provável que sigam argumentos presentes em `${name}_flags`; mas a maioria dos comandos não reconhecerá opções com hífen após argumentos comuns. Uma maneira melhor de passar opções adicionais para `$command` é adicioná-las no início de `${name}_flags`. Outra maneira é modificar `rc_flags` <<rc-flags, conforme mostrado posteriormente>>.
====
-&#10123; Um daemon de boas maneiras deve criar um _pidfile_ para que seu processo possa ser encontrado com mais facilidade e confiabilidade. A variável `pidfile`, se configurada, informa ao man:rc.subr[8] onde pode encontrar o pidfile para seus métodos padrão possam usar.
+&#10123; Um daemon bem comportado deve criar um _pidfile_ para que seu processo possa ser encontrado de forma mais fácil e confiável. A variável `pidfile`, se definida, informa ao man:rc.subr[8] onde ele pode encontrar o pidfile para ser utilizado em seus métodos padrões.
[NOTE]
====
-De fato, o man:rc.subr[8] também usará o pidfile para ver se o daemon já está em execução antes de iniciá-lo. Esta verificação pode ser ignorada usando o argumento `faststart`.
+De fato, o man:rc.subr[8] também usa o pidfile para ver se o daemon já está em execução antes de iniciá-lo. Essa verificação pode ser ignorada usando o argumento `faststart`.
====
-&#10124; Se o daemon não puder ser executado a menos que existam certos arquivos, apenas liste-os em `required_files`, e man:rc.subr[8] irá verificar se esses arquivos existem antes de iniciar o daemon. Também existem `required_dirs` e `required_vars` para diretórios e variáveis de ambiente, respectivamente. Todos eles são descritos em detalhes em man:rc.subr[8].
+&#10124; Se o daemon não puder ser executado a menos que certos arquivos existam, basta listá-los em `required_files`, e o man:rc.subr[8] verificará se esses arquivos existem antes de iniciar o daemon. Existem também `required_dirs` e `required_vars` para diretórios e variáveis de ambiente, respectivamente. Todos eles são descritos em detalhes no man:rc.subr[8].
[NOTE]
====
-O método padrão de man:rc.subr[8] pode ser forçado a ignorar as verificações de pré-requisitos usando `forcestart` como o argumento para o script.
+O método padrão do man:rc.subr[8] pode ser forçado a pular as verificações de pré-requisito usando `forcestart` como argumento para o script.
====
-&#10125; Podemos personalizar sinais para enviar para o daemon caso eles sejam diferentes dos mais conhecidos. Em particular, `sig_reload` especifica o sinal que faz o daemon recarregar sua configuração; é `SIGHUP` por padrão. Outro sinal é enviado para parar o processo do daemon; o padrão é `SIGTERM`, mas isso pode ser alterado definindo `sig_stop` apropriadamente.
+&#10125; Podemos personalizar sinais a serem enviados ao daemon caso eles difiram dos sinais conhecidos. Em particular, `sig_reload` especifica o sinal que faz com que o daemon recarregue sua configuração; por padrão, é o SIGHUP. Outro sinal é enviado para interromper o processo do daemon; o padrão é o SIGTERM, mas isso pode ser alterado configurando `sig_stop` adequadamente.
[NOTE]
====
-Os nomes dos sinais devem ser especificados para o man:rc.subr[8] sem o prefixo `SIG`, como é mostrado no exemplo. A versão do FreeBSD do man:kill[1] pode reconhecer o prefixo `SIG`, mas as versões de outros tipos de sistema operacional não.
+As sinalizações devem ser especificadas para o man:rc.subr[8] sem o prefixo `SIG`, como é mostrado no exemplo. A versão do FreeBSD do man:kill[1] pode reconhecer o prefixo `SIG`, mas as versões de outros sistemas operacionais podem não reconhecer.
====
-&#10126;&#10127; Realizar tarefas adicionais antes ou depois dos métodos padrão é fácil. Para cada argumento de comando suportado pelo nosso script, podemos definir o argumento `_precmd` e `_postcmd`. Esses comandos no man:sh[1] são invocados antes e depois do respectivo método, como é evidente em seus nomes.
+&#10126;&#10127; Realizar tarefas adicionais antes ou depois dos métodos padrões é fácil. Para cada argumento de comando suportado por nosso script, podemos definir `argument_precmd` e `argument_postcmd`. Esses comandos man:sh[1] são invocados antes e depois do respectivo método, como é evidente pelos seus nomes.
[NOTE]
====
-Sobrescrever um método padrão com um `argumento _cmd` personalizado ainda não nos impede de fazer uso do `argumento _precmd` ou `argumento _postcmd` se precisarmos. Em particular, o primeiro é bom para verificar condições personalizadas e sofisticadas que devem ser atendidas antes de executar o comando em si. Usar o `argumento _precmd` junto com o `argumento _cmd` nos permite separar logicamente as verificações da ação.
+Sobrescrever um método padrão com um `argument_cmd` personalizado ainda não nos impede de usar `argument_precmd` ou `argument_postcmd` se precisarmos. Em particular, o primeiro é bom para verificar condições personalizadas e sofisticadas que devem ser atendidas antes de executar o próprio comando. Usar `argument_precmd` juntamente com `argument_cmd` nos permite separar logicamente as verificações da ação.
-Não se esqueça de que você pode amontoar qualquer expressão válida do man:sh[1] nos métodos, pré e pós-comandos definidos por você. Apenas invocar uma função que faz com que o trabalho real seja um bom estilo na maioria dos casos, mas nunca deixe o estilo limitar sua compreensão do que está acontecendo por trás da cortina.
+Não se esqueça de que você pode colocar qualquer expressão válida do man:sh[1] nos métodos, pre e pós comandos que você define. Invocar uma função que realiza o trabalho real é um bom estilo na maioria dos casos, mas nunca deixe o estilo limitar sua compreensão do que está acontecendo nos bastidores.
====
-&#10128; Se quisermos implementar argumentos customizados, que também podem ser considerados como _comandos_ para o nosso script, precisamos listá-los em `extra_commands` e fornecer métodos para manipulá-los.
+&#10128; Se quisermos implementar argumentos personalizados, que também podem ser considerados como _comandos_ para o nosso script, precisamos listá-los em `extra_commands` e fornecer métodos para lidar com eles.
[NOTE]
====
-O comando `reload` é especial. Por um lado, tem um método predefinido em man:rc.subr[8]. Por outro lado, `reload` não é oferecido por padrão. A razão é que nem todos os daemons usam o mesmo mecanismo de recarga e alguns não têm nada para recarregar. Portanto, precisamos solicitar explicitamente que a funcionalidade incorporada seja fornecida. Podemos fazer isso via `extra_commands`.
+O comando `reload` é especial. Por um lado, ele possui um método predefinido em man:rc.subr[8]. Por outro lado, `reload` não é oferecido por padrão. A razão é que nem todos os daemons usam o mesmo mecanismo de recarga e alguns não têm nada para recarregar. Portanto, precisamos pedir explicitamente que a funcionalidade integrada seja fornecida. Podemos fazer isso por meio de `extra_commands`.
-O que obtemos do método padrão para `reload`? Muitas vezes, os daemons recarregam sua configuração na recepção de um sinal - normalmente, `SIGHUP`. Portanto, o man:rc.subr[8] tenta recarregar o daemon enviando um sinal para ele. O sinal é predefinido para `SIGHUP`, mas pode ser personalizado via `sig_reload`, caso necessário.
+O que recebemos do método padrão para `reload`? Muitas vezes, os daemons recarregam sua configuração após receber um sinal - geralmente, SIGHUP. Portanto, o man:rc.subr[8] tenta recarregar o daemon enviando um sinal para ele. O sinal é pré-definido como SIGHUP, mas pode ser personalizado via `sig_reload`, se necessário.
====
-&#10129;&#9454; Nosso script suporta dois comandos não padrão, `plugh` e `xyzzy`. Nós os vimos listados em `extra_commands`, e agora é hora de fornecer métodos para eles. O método para `xyzzy` é apenas embutido, enquanto que para `plugh` é implementado como a função `mumbled_plugh`.
+&#10129;&#9454; O nosso script suporta dois comandos não padrão, `plugh` e `xyzzy`. Nós os vimos listados em `extra_commands`, e agora é hora de fornecer métodos para eles. O método para `xyzzy` é apenas inserido em linha enquanto que para `plugh` é implementado como a função `mumbled_plugh`.
-Comandos não padrão não são chamados durante a inicialização ou o desligamento. Geralmente eles são para a conveniência do administrador do sistema. Eles também podem ser usados de outros subsistemas, por exemplo, man:devd[8] se especificado em man:devd.conf[5].
+Comandos não padrão não são invocados durante a inicialização ou desligamento. Geralmente, eles são para a conveniência do administrador do sistema. Eles também podem ser usados em outros subsistemas, por exemplo, o man:devd[8] se especificados em man:devd.conf[5].
-A lista completa de comandos disponíveis pode ser encontrada na linha de uso impressa por man:rc.subr[8] quando o script é invocado sem argumentos. Por exemplo, aqui está a linha de uso do script em estudo:
+A lista completa de comandos disponíveis pode ser encontrada na linha de uso impressa pelo man:rc.subr[8] quando o script é invocado sem argumentos. Por exemplo, aqui está a linha de uso do script em estudo:
-[source,shell]
+[source, shell]
....
# /etc/rc.d/mumbled
-Uso: /etc/rc.d/mumbled [fast|force|one](start|stop|restart|rcvar|reload|plugh|xyzzy|status|poll)
+Usage: /etc/rc.d/mumbled [fast|force|one](start|stop|restart|rcvar|reload|plugh|xyzzy|status|poll)
....
-&#9453; Um script pode invocar seus próprios comandos padrão ou não padrão, se necessário. Isto pode parecer semelhante as funções de chamada, mas sabemos que comandos e funções de shell nem sempre são a mesma coisa. Por exemplo, `xyzzy` não é implementado como uma função aqui. Além disso, pode haver um pré-comando e um pós-comando, que devem ser chamados ordenadamente. Portanto, a maneira correta de um script executar seu próprio comando é por meio de man:rc.subr[8], conforme mostrado no exemplo.
+&#9453; Um script pode invocar seus próprios comandos padrão ou não-padrão, se necessário. Isso pode parecer semelhante a chamar funções, mas sabemos que comandos e funções do shell nem sempre são a mesma coisa. Por exemplo, `xyzzy` não é implementado como uma função aqui. Além disso, pode haver um pré-comando e um pós-comando, que devem ser invocados ordenadamente. Portanto, a maneira adequada para um script executar seu próprio comando é por meio do man:rc.subr[8], como mostrado no exemplo.
-&#10130; Uma função útil chamada `checkyesno` é fornecida por man:rc.subr[8]. Ele usa um nome de variável como argumento e retorna um código de saída zero se, e somente se, a variável estiver configurada como `YES`, ou `TRUE`, ou `ON`, ou `1`, sem distinção entre maiúsculas e minúsculas; um código de saída diferente de zero é retornado de outra forma. No último caso, a função testa a variável como sendo definida como `NO`,`FALSE`,`OFF` ou `0` insensível a maiúsculas e minúsculas; imprime uma mensagem de aviso se a variável contiver qualquer outra coisa, ou seja, lixo.
+&#10130; Uma função útil chamada `checkyesno` é fornecida pelo man:rc.subr[8]. Ela recebe um nome de variável como argumento e retorna um código de saída zero se e somente se a variável estiver definida como `YES`, ou `TRUE`, ou `ON`, ou `1`, insensível a maiúsculas e minúsculas; um código de saída não-zero é retornado caso contrário. Neste último caso, a função testa se a variável está definida como `NO`, `FALSE`, `OFF` ou `0`, insensível a maiúsculas e minúsculas; ela imprime uma mensagem de aviso se a variável contiver qualquer outra coisa, ou seja, lixo.
-Tenha em mente que para o man:sh[1] um código de saída zero significa verdadeiro e um código de saída diferente de zero significa falso.
+Tenha em mente que para o man:sh[1], um código de saída zero significa verdadeiro e um código de saída não-zero significa falso.
[IMPORTANT]
====
-A função `checkyesno` recebe um __nome da variável__. Não passe o _valor_ expandido de uma variável para ele; não funcionará como esperado.
+A função `checkyesno` recebe um __nome de variável__. Não passe o _valor expandido_ de uma variável para ela; isso não funcionará como esperado.
-O uso correto de `checkyesno` é:
+Aqui está o uso correto de `checkyesno`:
[.programlisting]
....
@@ -407,7 +410,7 @@ if checkyesno mumbled_enable; then
fi
....
-Pelo contrário, chamar `checkyesno` como mostrado abaixo não funcionará - pelo menos não como esperado:
+Ao contrário, chamar `checkyesno` como mostrado abaixo não funcionará - pelo menos não como esperado:
[.programlisting]
....
@@ -418,34 +421,34 @@ fi
====
-&#10131; [[rc-flags]] Podemos afetar os sinalizadores a serem passados para `$command` modificando `rc_flags` em `$start_precmd`.
+&#10131; [[rc-flags]]Podemos afetar as flags que serão passadas para `$command` modificando `rc_flags` em `$start_precmd`.
-&#9451; Em certos casos, podemos precisar emitir uma mensagem importante que também deve ser enviada para o `syslog`. Isto pode ser feito facilmente com as seguintes funções man:rc.subr[8]: `debug`, `info`, `warn` e `err`. A última função, em seguida, sai do script com o código especificado.
+&#9451; Em certos casos, podemos precisar emitir uma mensagem importante que também deve ser registrada no `syslog`. Isso pode ser feito facilmente com as seguintes funções do man:rc.subr[8]: `debug`, `info`, `warn` e `err`. Esta última função finaliza o script com o código especificado.
-&#9452; Os códigos de saída dos métodos e seus pré-comandos não são apenas ignorados por padrão. Se o argumento `_precmd` retornar um código de saída diferente de zero, o método principal não será executado. Por sua vez, o `argumento_postcmd` não será invocado a menos que o método principal retorne um código de saída zero.
+&#9452; Os códigos de saída dos métodos e seus pre-comandos não são apenas ignorados por padrão. Se `argument_precmd` retornar um código de saída diferente de zero, o método principal não será executado. Por sua vez, `argument_postcmd` não será chamado, a menos que o método principal retorne um código de saída igual a zero.
[NOTE]
====
-No entanto, o man:rc.subr[8] pode ser instruído a partir da linha de comando para ignorar esses códigos de saída e invocar todos os comandos, prefixando um argumento com `force`, como em `forcestart`.
+Entretanto, é possível instruir o man:rc.subr[8] a ignorar esses códigos de saída e executar todos os comandos mesmo assim, adicionando um argumento com o prefixo `force`, como em `forcestart`.
====
[[rcng-hookup]]
== Conectando um script ao framework rc.d
-Depois que um script foi escrito, ele precisa ser integrado em [.filename]#rc.d>#. O passo crucial é instalar o script em [.filename]#/etc/rc.d# (para o sistema base) ou [.filename]#/usr/local/etc/rc.d# (para ports). Ambos [.filename]#bsd.prog.mk# e [.filename]#bsd.port.mk# fornecer ganchos convenientes para isso, e geralmente você não precisa se preocupar com a propriedade e o modo adequado. Os scripts do sistema devem ser instalados a partir do [.filename]#src /etc/rc.d# através do [.filename]#Makefile# encontrado lá. Os scripts de porta podem ser instalados usando `USE_RC_SUBR` conforme descrito em extref:{porters-handbook}[no Manual do Porter, rc-scripts].
+Depois que um script é escrito, ele precisa ser integrado ao [.filename]#rc.d#. O passo crucial é instalar o script em [.filename]#/etc/rc.d# (para o sistema base) ou [.filename]#/usr/local/etc/rc.d# (para o ports). Tanto o [.filename]#bsd.prog.mk# quanto o [.filename]#bsd.port.mk# fornecem ganchos convenientes para isso, e geralmente você não precisa se preocupar com a propriedade e o modo adequados. Os scripts do sistema devem ser instalados a partir de [.filename]#src/libexec/rc/rc.d# através do [.filename]#Makefile# encontrado lá. Scripts de ports podem ser instalados usando `USE_RC_SUBR` como descrito no extref:{porters-handbook}[Porter's Handbook, rc-scripts].
No entanto, devemos considerar antecipadamente o local do nosso script na sequência de inicialização do sistema. O serviço manipulado pelo nosso script provavelmente depende de outros serviços. Por exemplo, um daemon de rede não pode funcionar sem as interfaces de rede e o roteamento em funcionamento. Mesmo que um serviço pareça não exigir nada, dificilmente pode ser iniciado antes que os sistemas de arquivos básicos tenham sido verificados e montados.
-Nós já mencionamos o man:rcorder[8]. Agora é hora de dar uma olhada de perto. Em poucas palavras, o man:rcorder[8] pega um conjunto de arquivos, examina seu conteúdo e imprime uma lista ordenada por dependência de arquivos do conjunto para `stdout`. O objetivo é manter as informações de dependência _dentro_ dos arquivos para que cada arquivo possa falar por si só. Um arquivo pode especificar as seguintes informações:
+Nós já mencionamos o man:rcorder[8]. Agora é hora de dar uma olhada mais de perto nele. Em poucas palavras, o man:rcorder[8] pega um conjunto de arquivos, examina seus conteúdos e imprime uma lista ordenada por dependência dos arquivos do conjunto no `stdout`. O objetivo é manter as informações de dependência _dentro_ dos arquivos, de modo que cada arquivo possa falar apenas por si mesmo. Um arquivo pode especificar as seguintes informações:
-* os nomes das "condições" (o que significa serviços para nós) que ele __fornece__;
+* os nomes das "condições" (ou seja, serviços para nós) que ele __fornece__;
* os nomes das "condições" que ele __requer__;
-* os nomes das "condições" deste arquivo devem ser executados __antes__;
-* _palavras-chave adicionais_ que podem ser usadas para selecionar um subconjunto de todo o conjunto de arquivos (man:rcorder[8] podem ser instruídos através de opções para incluir ou omitir os arquivos com determinadas palavras-chave listadas.)
+* os nomes das "condições" que este arquivo deve ser executado __antes__;
+* palavras-chave adicionais que podem ser usadas para selecionar um subconjunto do conjunto completo de arquivos (man:rcorder[8] pode ser instruído via opções para incluir ou omitir os arquivos que possuem determinadas palavras-chave listadas.)
-Não é surpresa que man:rcorder[8] possa manipular apenas arquivos de texto com uma sintaxe próxima a de man:sh[1]. Ou seja, linhas especiais compreendidas por man:rcorder[8] se parecem com comentários man:sh[1]. A sintaxe de tais linhas especiais é bastante rígida para simplificar seu processamento. Veja man:rcorder[8] para detalhes.
+Não é surpresa que o man:rcorder[8] possa lidar apenas com arquivos de texto com uma sintaxe próxima à do man:sh[1]. Ou seja, as linhas especiais entendidas pelo man:rcorder[8] se parecem com comentários do man:sh[1]. A sintaxe dessas linhas especiais é bastante rígida para simplificar seu processamento. Consulte man:rcorder[8] para obter detalhes.
-Além de usar linhas especiais do man:rcorder[8], um script pode insistir em sua dependência de outro serviço apenas iniciando-o forçadamente. Isso pode ser necessário quando o outro serviço é opcional e não será iniciado automaticamente porque o administrador do sistema o desativou por engano no man:rc.conf[5].
+Além de usar as linhas especiais entendidas pelo man:rcorder[8], um script pode exigir sua dependência de outro serviço simplesmente iniciando-o forçadamente. Isso pode ser necessário quando o outro serviço é opcional e não iniciará por si só porque o administrador do sistema o desativou por engano em man:rc.conf[5].
Com este conhecimento geral em mente, vamos considerar o simples script daemon aprimorado com coisas de dependência:
@@ -481,44 +484,55 @@ run_rc_command "$1"
Como antes, a análise detalhada segue:
-&#10122; Esta linha declara os nomes das "condições" que nosso script fornece. Agora, outros scripts podem registrar uma dependência em nosso script por estes nomes.
+&#10122; Essa linha declara os nomes das "condições" que nosso script fornece. Agora, outros scripts podem registrar uma dependência em nosso script por esses nomes.
[NOTE]
====
Geralmente, um script especifica uma única condição fornecida. No entanto, nada nos impede de listar várias condições, por exemplo, por razões de compatibilidade.
-Em qualquer caso, o nome da condição principal, ou a única, `PROVIDE:` deve ser o mesmo que `${name}`.
+Em qualquer caso, o nome da condição principal, ou única, `PROVIDE:` deve ser o mesmo que `${name}`.
====
-&#10123;&#10124; Portanto, nosso script indica quais condições "" são fornecidas por outros scripts dos quais depende. De acordo com as linhas, nosso script pede ao man:rcorder[8] para colocá-lo após o(s) script(s) fornecendo [.filename]#DAEMON# e [.filename]#cleanvar#, mas antes disso prover [.filename]#LOGIN#.
+&#10123;&#10124; Então, nosso script indica em quais "condições" fornecidas por outros scripts ele depende. De acordo com as linhas, nosso script pede para o man:rcorder[8] colocá-lo após o(s) script(s) fornecendo o [.filename]#DAEMON# e o [.filename]#cleanvar#, mas antes daquele que fornece [.filename]#LOGIN#.
[NOTE]
====
-A linha `BEFORE:` não deve ser abusada para contornar uma lista de dependências incompleta no outro script. O caso apropriado para usar o `BEFORE:` é quando o outro script não se importa com o nosso, mas nosso script pode fazer sua tarefa melhor se for executado antes do outro. Um típico exemplo da vida real são as interfaces de rede versus o firewall: embora as interfaces não dependam do firewall em realizar seu trabalho, a segurança do sistema se beneficiará do firewall estar pronto antes que haja qualquer tráfego de rede.
+A linha `BEFORE:` não deve ser usada para contornar uma lista de dependências incompleta em outro script. O caso apropriado para usar `BEFORE:` é quando o outro script não se importa com o nosso, mas nosso script pode executar sua tarefa melhor se for executado antes do outro. Um exemplo típico da vida real é a relação entre as interfaces de rede e o firewall: embora as interfaces não dependam do firewall para fazer o trabalho delas, a segurança do sistema se beneficiará se o firewall estiver pronto antes de haver qualquer tráfego de rede.
-Além das condições correspondentes a um único serviço, existem meta-condições e seus scripts "placeholder" usados para garantir que determinados grupos de operações sejam executados antes dos outros. Estes são denotados pelos nomes [.filename]#UPPERCASE#. Sua lista e finalidades podem ser encontradas em man:rc[8].
+Além das condições correspondentes a um único serviço, existem meta-condições e seus scripts "placeholder" usados para garantir que certos grupos de operações sejam executados antes de outros. Estes são denotados por nomes em [.filename]#UPPERCASE#. Sua lista e propósitos podem ser encontrados no manual man:rc[8].
-Tenha em mente que colocar um nome de serviço na linha `REQUIRE:` não garante que o serviço estará realmente em execução no momento em que nosso script for iniciado. O serviço necessário pode falhar ao iniciar ou simplesmente ser desativado em man:rc.conf[5]. Obviamente, o man:rcorder[8] não pode controlar tais detalhes, e o man:rc[8] também não fará isso. Consequentemente, o aplicativo iniciado por nosso script deve ser capaz de lidar com quaisquer serviços necessários indisponíveis. Em certos casos, podemos ajudá-lo conforme discutido <<forcedep, below>>
+Lembre-se de que colocar o nome de um serviço na linha `REQUIRE:` não garante que o serviço realmente estará em execução no momento em que o script começar. O serviço necessário pode falhar ao iniciar ou simplesmente ser desativado em man:rc.conf[5]. Obviamente, o man:rcorder[8] não pode controlar esses detalhes e o man:rc[8] também não fará isso. Consequentemente, a aplicação iniciada pelo nosso script deve ser capaz de lidar com qualquer serviço necessário que esteja indisponível. Em certos casos, podemos ajudá-lo conforme discutido <<forcedep, abaixo>>
====
-&#10125; [[keywords]] Como lembramos do texto acima, as palavras-chave do man:rcorder[8] podem ser usadas para selecionar ou deixar alguns scripts. Ou seja, qualquer consumidor man:rcorder[8] pode especificar através das opções `-k` e `-s` que as palavras-chave estão na "keep list" e na "skip list", respectivamente. De todos os arquivos a serem classificados, o man:rcorder[8] selecionará apenas aqueles que tiverem uma palavra-chave da lista de manutenção (a menos que vazia) e não uma palavra-chave da lista de itens ignorados.
+[[keywords]]&#10125; Como lembramos do texto acima, as palavras-chave do man:rcorder[8] podem ser usadas para selecionar ou deixar de fora alguns scripts. Qualquer consumidor do man:rcorder[8] pode especificar, através das opções `-k` e `-s`, quais palavras-chave estarão na "lista de manutenção" e na "lista de exclusão", respectivamente. De todos os arquivos a serem ordenados por dependência, man:rcorder[8] escolherá apenas aqueles que tiverem uma palavra-chave da lista de manutenção (a menos que esteja vazia) e que não tiverem uma palavra-chave da lista de exclusão.
-No FreeBSD, o man:rcorder[8] é usado por [.filename]#/etc/rc# e [.filename]#/etc/rc.shutdown#. Esses dois scripts definem a lista padrão de palavras-chave do [.filename]#rc.d# do FreeBSD e seus significados da seguinte forma:
+No FreeBSD, o man:rcorder[8] é usado por [.filename]#/etc/rc# e [.filename]#/etc/rc.shutdown#. Esses dois scripts definem a lista padrão de palavras-chaves do FreeBSD [.filename]#rc.d# e seus significados da seguinte forma:
-&#10126; [[forcedep]] Para começar, `force_depend` deve ser usado com muito cuidado. Geralmente é melhor revisar a hierarquia de variáveis de configuração para seus scripts [.filename]#rc.# se eles forem interdependentes.
+nojail:: O serviço não é para ambiente man:jail[8]. Os procedimentos automáticos de inicialização e desligamento ignorarão o script se estiver dentro de uma jail.
-Se você ainda não pode fazer sem `force_depend`, o exemplo oferece uma expressão de como invocá-lo condicionalmente. No exemplo, nosso daemon `mumbled` requer que outro, `frotz`, seja iniciado antecipadamente. No entanto, `frotz` é opcional também; e man:rcorder[8] não sabe nada sobre esses detalhes. Felizmente, nosso script tem acesso a todas as variáveis man:rc.conf[5]. Se `frotz_enable` estiver como true, esperamos pelo melhor e dependemos de [.filename]#rc.d# para iniciar `frotz`. Caso contrário, nós forçadamente verificaremos o status de `frotz`. Finalmente, impomos nossa dependência ao `frotz` se ele não estiver sendo executado. Uma mensagem de aviso será emitida por `force_depend` porque ele deve ser chamado apenas se um erro de configuração for detectado.
+nostart:: O serviço deve ser iniciado manualmente ou não iniciado de forma alguma. O procedimento de inicialização automático ignorará o script. Em conjunto com a palavra-chave [.filename]#shutdown#, isso pode ser usado para escrever scripts que fazem algo apenas no desligamento do sistema.
+
+shutdown:: Este palavra-chave deve ser listada de forma __explícita__ se o serviço precisa ser parado antes do desligamento do sistema.
+
+[NOTE]
+====
+Quando o sistema está prestes a desligar, o arquivo [.filename]#/etc/rc.shutdown# é executado. Ele assume que a maioria dos scripts [.filename]#rc.d# não tem nada a fazer nesse momento. Portanto, o [.filename]#/etc/rc.shutdown# invoca seletivamente scripts [.filename]#rc.d# com a palavra-chave [.filename]#shutdown#, ignorando efetivamente o restante dos scripts. Para desligamento ainda mais rápido, o [.filename]#/etc/rc.shutdown# passa o comando [.filename]#faststop# para os scripts que executa para que eles pulem verificações preliminares, como a verificação do pidfile. Como os serviços dependentes devem ser interrompidos antes de suas dependências, o [.filename]#/etc/rc.shutdown# executa os scripts em ordem de dependência reversa. Se você está escrevendo um script [.filename]#rc.d# real, deve considerar se ele é relevante no momento do desligamento do sistema. Por exemplo, se o seu script faz seu trabalho apenas em resposta ao comando [.filename]#start#, então você não precisa incluir essa palavra-chave. No entanto, se o seu script gerencia um serviço, é provavelmente uma boa ideia pará-lo antes que o sistema prossiga para o estágio final de sua sequência de desligamento descrita em man:halt[8]. Em particular, um serviço deve ser interrompido explicitamente se precisar de tempo considerável ou ações especiais para ser desligado corretamente. Um exemplo típico desse tipo de serviço é um mecanismo de banco de dados.
+====
+
+[[forcedep]] &#10126; Em primeiro lugar, `force_depend` deve ser usado com muito cuidado. Geralmente, é melhor revisar a hierarquia das variáveis de configuração para seus scripts [.filename]#rc.d# se eles são interdependentes.
+
+Se ainda assim você não puder abrir mão do `force_depend`, o exemplo oferece um exemplo de como invocá-lo condicionalmente. No exemplo, nosso daemon `mumbled` requer que outro daemon, `frotz`, seja iniciado antecipadamente. No entanto, `frotz` também é opcional; e o man:rcorder[8] não conhece esses detalhes. Felizmente, nosso script tem acesso a todas as variáveis de man:rc.conf[5]. Se `frotz_enable` for verdadeiro, esperamos o melhor e confiamos no [.filename]#rc.d# para ter iniciado `frotz`. Caso contrário, verificamos forçadamente o status de `frotz`. Finalmente, impomos nossa dependência em `frotz` se ele não estiver em execução. Uma mensagem de aviso será emitida por `force_depend`, pois ele só deve ser invocado se uma configuração incorreta for detectada.
[[rcng-args]]
== Dando mais flexibilidade a um script rc.d
-Quando chamado durante a inicialização ou desligamento, um script [.filename]#rc.d# deve agir em todo o subsistema pelo qual é responsável. Por exemplo, [.filename]#/etc/rc.d/netif# deve iniciar ou parar todas as interfaces de rede descritas por man:rc.conf[5]. Qualquer tarefa pode ser indicada exclusivamente por um único argumento de comando, como `start` ou `stop`. Entre a inicialização e o desligamento, os scripts [.filename]#rc.d# ajudam o administrador a controlar o sistema em execução, e é quando surge a necessidade de mais flexibilidade e precisão. Por exemplo, o administrador pode querer adicionar as configurações de uma nova interface de rede ao man:rc.conf[5] e então iniciá-lo sem interferir o funcionamento das interfaces existentes. Da próxima vez, o administrador pode precisar desligar uma única interface de rede. No espírito da linha de comando, o respectivo script [.filename]#rc.d# solicita um argumento extra, o nome da interface.
+Quando invocado durante a inicialização ou desligamento, um script [.filename]#rc.d# deve agir em todo o subsistema pelo qual é responsável. Por exemplo, o [.filename]#/etc/rc.d/netif# deve iniciar ou parar todas as interfaces de rede descritas em man:rc.conf[5]. Cada tarefa pode ser indicada por um único argumento de comando, como `start` ou `stop`. Entre a inicialização e o desligamento, os scripts [.filename]#rc.d# ajudam o administrador a controlar o sistema em execução e é quando surge a necessidade de mais flexibilidade e precisão. Por exemplo, o administrador pode querer adicionar as configurações de uma nova interface de rede em man:rc.conf[5] e, em seguida, iniciá-la sem interferir na operação das interfaces existentes. Na próxima vez, o administrador pode precisar desligar uma única interface de rede. Para facilitar o uso na linha de comando, o respectivo script [.filename]#rc.d# pede um argumento extra, o nome da interface.
-Felizmente, man:rc.subr[8] permite passar qualquer número de argumentos para os métodos do script (dentro dos limites do sistema). Devido a isso, as alterações no próprio script podem ser mínimas.
+Felizmente, o man:rc.subr[8] permite passar qualquer número de argumentos para os métodos do script (dentro dos limites do sistema). Devido a isso, as mudanças no próprio script podem ser mínimas.
-Como o man:rc.subr[8] pode obter acesso aos argumentos de linha de comando extra. Deveria pegá-los diretamente? Não por qualquer meio. Primeiro, uma função man:sh[1] não tem acesso aos parâmetros posicionais de seu chamador, mas o man:rc.subr[8] é apenas uma despedida de tais funções. Em segundo lugar, a boa maneira de [.filename]#rc.d# determina que é para o script principal decidir quais argumentos devem ser passados para seus métodos.
+Como o man:rc.subr[8] pode ter acesso aos argumentos adicionais da linha de comando? Ele deve simplesmente pegá-los diretamente? De maneira alguma! Em primeiro lugar, uma função do man:sh[1] não tem acesso aos parâmetros posicionais de quem a chamou, mas o man:rc.subr[8] é apenas um conjunto dessas funções. Em segundo lugar, a boa prática do [.filename]#rc.d# dita que é responsabilidade do script principal decidir quais argumentos devem ser passados para seus métodos.
-Portanto, a abordagem adotada por man:rc.subr[8] é a seguinte: `run_rc_command` transmite todos os seus argumentos, mas o primeiro um para o respectivo método na íntegra. O primeiro, omitido, argumento é o nome do próprio método: `start`,`stop`, etc. Ele será deslocado por `run_rc_command`, então o que é `$2` na linha de comando original será apresentado como `$1` ao método, e assim por diante.
+Portanto, a abordagem adotada pelo man:rc.subr[8] é a seguinte: `run_rc_command` passa todos os seus argumentos, exceto o primeiro, ao respectivo método sem alterações. O primeiro argumento omitido é o nome do método em si: `start`, `stop`, etc. Ele será removido por `run_rc_command`, então o que é `$2` na linha de comando original será apresentado como `$1` para o método, e assim por diante.
Para ilustrar essa oportunidade, vamos modificar o script fictício primitivo para que suas mensagens dependam dos argumentos adicionais fornecidos. Aqui vamos nós:
@@ -565,43 +579,45 @@ run_rc_command "$@" <.>
Quais mudanças essenciais podemos notar no script?
-&#10122; Todos os argumentos digitados após `start` podem terminar como parâmetros posicionais para o respectivo método. Podemos usá-los de qualquer maneira de acordo com nossa tarefa, habilidades e fantasia. No exemplo atual, apenas passamos todos eles para man:echo[1] como uma cadeia na linha seguinte - note `$*` entre aspas duplas. Aqui está como o script pode ser chamado agora:
+&#10122; Todos os argumentos que você digita após `start` podem acabar como parâmetros posicionais para o respectivo método. Podemos usá-los de qualquer maneira de acordo com nossa tarefa, habilidades e gosto. No exemplo atual, simplesmente passamos todos eles para o man:echo[1] como uma única string na próxima linha - observe o `$*` dentro das aspas duplas. Aqui está como o script pode ser invocado agora:
-[source,shell]
+[source, shell]
....
# /etc/rc.d/dummy start
Nothing started.
+
# /etc/rc.d/dummy start Hello world!
Greeting message: Hello world!
....
-&#10123; O mesmo se aplica a qualquer método que nosso script forneça, não apenas a um método padrão. Nós adicionamos um método customizado chamado `kiss`, e ele pode tirar proveito dos argumentos extras da mesma forma que o `start` tira. Por exemplo:
+&#10123; O mesmo se aplica a qualquer método que nosso script ofereça, não apenas a um padrão. Adicionamos um método personalizado chamado `kiss`, e ele pode tirar proveito dos argumentos extras da mesma forma que o `start` pode. Por exemplo:
-[source,shell]
+[source, shell]
....
# /etc/rc.d/dummy kiss
A ghost gives you a kiss.
+
# /etc/rc.d/dummy kiss Once I was Etaoin Shrdlu...
A ghost gives you a kiss and whispers: Once I was Etaoin Shrdlu...
....
-&#10124; Se quisermos apenas passar todos os argumentos extras para qualquer método, podemos simplesmente substituir `"$@"` por `"$ 1"` na última linha do nosso script, onde invocamos o `run_rc_command`.
+&#10124; Se quisermos apenas passar todos os argumentos extras para qualquer método, podemos simplesmente substituir `"$1"` por `"$@"` na última linha do nosso script, onde invocamos `run_rc_command`.
[IMPORTANT]
====
-Um programador man:sh[1] deve entender a diferença sutil entre `$*` e `$@` como as formas de designar todos os parâmetros posicionais. Para sua discussão aprofundada, consulte um bom manual sobre programação de scripts man:sh[1]. _Não_ use estas expressões até que você as compreenda completamente, porque o uso incorreto delas resultará em scripts inseguros e contendo bugs.
+Um programador em man:sh[1] deve entender a diferença sutil entre `$*` e `$@` como formas de designar todos os parâmetros posicionais. Para uma discussão aprofundada, consulte um bom manual de man:sh[1]. Não use essas expressões até entender completamente o seu uso, pois o uso incorreto pode resultar em scripts com bugs e inseguros.
====
[NOTE]
====
-Atualmente, o `run_rc_command` pode ter um bug que o impede de manter os limites originais entre os argumentos. Ou seja, argumentos com espaços em branco incorporados podem não ser processados corretamente. O bug deriva do uso inadequado de `$*`.
+Atualmente, o `run_rc_command` pode ter um bug que o impede de manter as fronteiras originais entre os argumentos. Ou seja, argumentos com espaços em branco embutidos podem não ser processados corretamente. O bug decorre do uso inadequado de `$*`.
====
[[rcng-furthur]]
== Leitura adicional
-[[lukem]]http://www.mewburn.net/luke/papers/rc.d.pdf[O artigo original de Luke Mewburn] oferece uma visão geral do [.filename]#rc.d# e o raciocínio detalhado que o levou a suas decisões de design. Ele fornece informações sobre toda o framework do [.filename]#rc.d# e o seu lugar em um moderno sistema operacional BSD.
+[[lukem]]http://www.mewburn.net/luke/papers/rc.d.pdf[O artigo original de Luke Mewburn] oferece uma visão geral do [.filename]#rc.d# e uma justificativa detalhada para suas decisões de design. Ele fornece uma compreensão do quadro geral do [.filename]#rc.d# e seu lugar em um sistema operacional BSD moderno.
-[[manpages]]As páginas de manual man:rc[8], man:rc.subr[8] e man:rcorder[8] documentam os componentes do [.filename]#rc.d# com grande detalhe. Você não pode usar totalmente o poder do [.filename]#rc.d# sem estudar as páginas de manual e se referir a elas enquanto escreve seus próprios scripts.
+[[manpages]]As páginas do manual para man:rc[8], man:rc.subr[8] e man:rcorder[8] documentam em detalhes os componentes do sistema [.filename]#rc.d#. Você não pode aproveitar completamente o poder do [.filename]#rc.d# sem estudar as páginas do manual e consultá-las ao escrever seus próprios scripts.
-A sua principal fonte de inspiração são os exemplos da vida real, existentes em no [.filename]#/etc/rc.d# de um sistema vivo. Seu conteúdo é fácil e agradável de ler, porque a maioria dos cantos ásperos estão escondidos fundo no man:rc.subr[8]. Tenha em mente que os scripts [.filename]#/etc/rc.d# não foram escritos por anjos, então eles podem sofrer de bugs e decisões sub-ótimas de design. Agora você pode melhorá-los!
+A principal fonte de exemplos práticos e funcionais é o diretório [.filename]#/etc/rc.d# em um sistema em operação. O seu conteúdo é fácil e agradável de ler, pois a maioria das partes difíceis está escondida profundamente em man:rc.subr[8]. No entanto, tenha em mente que os scripts em [.filename]#/etc/rc.d# não foram escritos por anjos, então eles podem conter bugs e decisões de design subótimas. Agora você pode melhorá-los!
diff --git a/documentation/content/pt-br/articles/rc-scripting/_index.po b/documentation/content/pt-br/articles/rc-scripting/_index.po
new file mode 100644
index 0000000000..eaee8ffb75
--- /dev/null
+++ b/documentation/content/pt-br/articles/rc-scripting/_index.po
@@ -0,0 +1,2337 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2022.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-07-07 23:23-0300\n"
+"PO-Revision-Date: 2023-04-30 08:49+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesrc-scripting_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/rc-scripting/_index.adoc:1
+#, no-wrap
+msgid "A guide to writing new rc.d scripts and understanding those already written"
+msgstr ""
+"Um guia para escrever novos scripts rc.d e entender aqueles que já existem"
+
+#. type: Title =
+#: documentation/content/en/articles/rc-scripting/_index.adoc:1
+#: documentation/content/en/articles/rc-scripting/_index.adoc:12
+#, no-wrap
+msgid "Practical rc.d scripting in BSD"
+msgstr "Scripting rc.d na prática no BSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:45
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:49
+msgid ""
+"Beginners may find it difficult to relate the facts from the formal "
+"documentation on the BSD [.filename]#rc.d# framework with the practical "
+"tasks of [.filename]#rc.d# scripting. In this article, we consider a few "
+"typical cases of increasing complexity, show [.filename]#rc.d# features "
+"suited for each case, and discuss how they work. Such an examination should "
+"provide reference points for further study of the design and efficient "
+"application of [.filename]#rc.d#."
+msgstr ""
+"Os iniciantes podem achar difícil relacionar os fatos da documentação formal "
+"sobre o framework [.filename]#rc.d# do BSD com as tarefas práticas de "
+"escrever scripts [.filename]#rc.d#. Neste artigo, consideramos alguns casos "
+"típicos de crescente complexidade, mostramos recursos do [.filename]#rc.d# "
+"adequados para cada caso e discutimos como eles funcionam. Essa análise deve "
+"fornecer pontos de referência para estudos posteriores do design e aplicação "
+"eficiente do [.filename]#rc.d#."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:51
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:55
+#, no-wrap
+msgid "Introduction"
+msgstr "Introdução"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:61
+msgid ""
+"The historical BSD had a monolithic startup script, [.filename]#/etc/rc#. "
+"It was invoked by man:init[8] at system boot time and performed all userland "
+"tasks required for multi-user operation: checking and mounting file systems, "
+"setting up the network, starting daemons, and so on. The precise list of "
+"tasks was not the same in every system; admins needed to customize it. With "
+"few exceptions, [.filename]#/etc/rc# had to be modified, and true hackers "
+"liked it."
+msgstr ""
+"No histórico BSD, havia um script de inicialização monolítico, [.filename]#/"
+"etc/rc#. Ele era invocado pelo man:init[8] no momento da inicialização do "
+"sistema e realizava todas as tarefas de usuário necessárias para a operação "
+"multiusuário: verificação e montagem de sistemas de arquivos, configuração "
+"da rede, inicialização de daemons e assim por diante. A lista precisa de "
+"tarefas não era a mesma em todos os sistemas; os administradores precisavam "
+"personalizá-la. Com poucas exceções, o [.filename]#/etc/rc# tinha que ser "
+"modificado, e os verdadeiros hackers gostavam disso."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:67
+msgid ""
+"The real problem with the monolithic approach was that it provided no "
+"control over the individual components started from [.filename]#/etc/rc#. "
+"For instance, [.filename]#/etc/rc# could not restart a single daemon. The "
+"system admin had to find the daemon process by hand, kill it, wait until it "
+"actually exited, then browse through [.filename]#/etc/rc# for the flags, and "
+"finally type the full command line to start the daemon again. The task "
+"would become even more difficult and prone to errors if the service to "
+"restart consisted of more than one daemon or demanded additional actions. "
+"In a few words, the single script failed to fulfil what scripts are for: to "
+"make the system admin's life easier."
+msgstr ""
+"O problema real com a abordagem monolítica era que ela não fornecia controle "
+"sobre os componentes individuais iniciados a partir do [.filename]#/etc/rc#. "
+"Por exemplo, o [.filename]#/etc/rc# não podia reiniciar um único daemon. O "
+"administrador do sistema tinha que encontrar o processo do daemon "
+"manualmente, matá-lo, aguardar até que ele realmente finalizasse, navegar "
+"por [.filename]#/etc/rc# em busca das flags e, finalmente, digitar a linha "
+"de comando completa para iniciar o daemon novamente. A tarefa se tornaria "
+"ainda mais difícil e propensa a erros se o serviço a ser reiniciado "
+"consistisse em mais de um daemon ou exigisse ações adicionais. Em poucas "
+"palavras, o script único falhou em cumprir o objetivo pelo qual um script é "
+"criado: tornar a vida do administrador do sistema mais fácil."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:74
+msgid ""
+"Later there was an attempt to split out some parts of [.filename]#/etc/rc# "
+"for the sake of starting the most important subsystems separately. The "
+"notorious example was [.filename]#/etc/netstart# to bring up networking. It "
+"did allow for accessing the network from single-user mode, but it did not "
+"integrate well into the automatic startup process because parts of its code "
+"needed to interleave with actions essentially unrelated to networking. That "
+"was why [.filename]#/etc/netstart# mutated into [.filename]#/etc/rc."
+"network#. The latter was no longer an ordinary script; it comprised of "
+"large, tangled man:sh[1] functions called from [.filename]#/etc/rc# at "
+"different stages of system startup. However, as the startup tasks grew "
+"diverse and sophisticated, the \"quasi-modular\" approach became even more "
+"of a drag than the monolithic [.filename]#/etc/rc# had been."
+msgstr ""
+"Mais tarde, houve uma tentativa de dividir algumas partes do [.filename]#/"
+"etc/rc# para iniciar os subsistemas mais importantes separadamente. O "
+"exemplo notório foi o [.filename]#/etc/netstart# para iniciar a rede. Isso "
+"permitiu o acesso à rede no modo de usuário único, mas não se integrou bem "
+"ao processo de inicialização automática porque partes de seu código "
+"precisavam intercalar com ações essencialmente não relacionadas à rede. Foi "
+"por isso que o [.filename]#/etc/netstart# se transformou em [.filename]#/etc/"
+"rc.network#. Este último não era mais um script comum; era composto de "
+"grandes funções man:sh[1] complexas chamadas pelo [.filename]#/etc/rc# em "
+"diferentes estágios da inicialização do sistema. No entanto, à medida que as "
+"tarefas de inicialização ficaram mais diversas e sofisticadas, a abordagem "
+"\"quase modular\" tornou-se ainda mais pesada do que o monolítico [."
+"filename]#/etc/rc# tinha sido."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:82
+msgid ""
+"Without a clean and well-designed framework, the startup scripts had to bend "
+"over backwards to satisfy the needs of rapidly developing BSD-based "
+"operating systems. It became obvious at last that more steps are necessary "
+"on the way to a fine-grained and extensible [.filename]#rc# system. Thus "
+"BSD [.filename]#rc.d# was born. Its acknowledged fathers were Luke Mewburn "
+"and the NetBSD community. Later it was imported into FreeBSD. Its name "
+"refers to the location of system scripts for individual services, which is "
+"in [.filename]#/etc/rc.d#. Soon we will learn about more components of the "
+"[.filename]#rc.d# system and see how the individual scripts are invoked."
+msgstr ""
+"Sem um framework limpo e bem projetado, os scripts de inicialização tiveram "
+"que se dobrar para atender às necessidades dos sistemas operacionais "
+"baseados em BSD que estavam em rápida evolução. Tornou-se evidente, "
+"finalmente, que mais etapas eram necessárias para se chegar a um sistema [."
+"filename]#rc# refinado, granular e extensível. Assim nasceu o [.filename]#rc."
+"d# do BSD. Seus pais reconhecidos foram Luke Mewburn e a comunidade NetBSD. "
+"Mais tarde, foi importado para o FreeBSD. Seu nome se refere ao local dos "
+"scripts do sistema para serviços individuais, que está em [.filename]#/etc/rc"
+".d#. Em breve, aprenderemos mais sobre os componentes do sistema [."
+"filename]#rc.d# e veremos como os scripts individuais são invocados."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:93
+msgid ""
+"The basic ideas behind BSD [.filename]#rc.d# are _fine modularity_ and "
+"__code reuse__. _Fine modularity_ means that each basic \"service\" such as "
+"a system daemon or primitive startup task gets its own man:sh[1] script able "
+"to start the service, stop it, reload it, check its status. A particular "
+"action is chosen by the command-line argument to the script. The [."
+"filename]#/etc/rc# script still drives system startup, but now it merely "
+"invokes the smaller scripts one by one with the `start` argument. It is "
+"easy to perform shutdown tasks as well by running the same set of scripts "
+"with the `stop` argument, which is done by [.filename]#/etc/rc.shutdown#. "
+"Note how closely this follows the Unix way of having a set of small "
+"specialized tools, each fulfilling its task as well as possible. _Code "
+"reuse_ means that common operations are implemented as man:sh[1] functions "
+"and collected in [.filename]#/etc/rc.subr#. Now a typical script can be "
+"just a few lines' worth of man:sh[1] code. Finally, an important part of "
+"the [.filename]#rc.d# framework is man:rcorder[8], which helps [.filename]#/"
+"etc/rc# to run the small scripts orderly with respect to dependencies "
+"between them. It can help [.filename]#/etc/rc.shutdown#, too, because the "
+"proper order for the shutdown sequence is opposite to that of startup."
+msgstr ""
+"As ideias básicas por trás do [.filename]#rc.d# do BSD são _modularidade "
+"fina_ e __reutilização de código__. _Modularidade fina_ significa que cada "
+"\"serviço\" básico, como um daemon do sistema ou uma tarefa de inicialização "
+"primitiva, possui seu próprio script man:sh[1] capaz de iniciar o serviço, "
+"pará-lo, recarregá-lo e verificar seu status. Uma ação específica é "
+"escolhida pelo argumento da linha de comando do script. O script [."
+"filename]#/etc/rc# ainda conduz a inicialização do sistema, mas agora ele "
+"apenas invoca os scripts menores um por um com o argumento `start`. Também é "
+"fácil realizar tarefas de desligamento executando o mesmo conjunto de "
+"scripts com o argumento `stop`, que é feito por [.filename]#/etc/rc.shutdown#"
+". Observe como isso segue de perto a maneira Unix de ter um conjunto de "
+"ferramentas especializadas pequenas, cada uma cumprindo sua tarefa da melhor "
+"maneira possível. _Reutilização de código_ significa que operações comuns "
+"são implementadas como funções man:sh[1] e coletadas em [.filename]#/etc/rc."
+"subr#. Agora, um script típico pode ser composto apenas de algumas linhas de "
+"código man:sh[1]. Finalmente, uma parte importante do framework [."
+"filename]#rc.d# é o man:rcorder[8], que ajuda o [.filename]#/etc/rc# a "
+"executar os pequenos scripts de maneira ordenada com respeito às "
+"dependências entre eles. Isso também pode ajudar o [.filename]#/etc/rc."
+"shutdown#, porque a ordem apropriada para a sequência de desligamento é "
+"oposta à de inicialização."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:101
+msgid ""
+"The BSD [.filename]#rc.d# design is described in <<lukem, the original "
+"article by Luke Mewburn>>, and the [.filename]#rc.d# components are "
+"documented in great detail in <<manpages, the respective manual pages>>. "
+"However, it might not appear obvious to an [.filename]#rc.d# newbie how to "
+"tie the numerous bits and pieces together in order to create a well-styled "
+"script for a particular task. Therefore this article will try a different "
+"approach to describe [.filename]#rc.d#. It will show which features should "
+"be used in a number of typical cases, and why. Note that this is not a how-"
+"to document because our aim is not at giving ready-made recipes, but at "
+"showing a few easy entrances into the [.filename]#rc.d# realm. Neither is "
+"this article a replacement for the relevant manual pages. Do not hesitate "
+"to refer to them for more formal and complete documentation while reading "
+"this article."
+msgstr ""
+"O design do BSD [.filename]#rc.d# é descrito no <<lukem, artigo original de "
+"Luke Mewburn>>, e os componentes do [.filename]#rc.d# são documentados em "
+"grande detalhe nas <<manpages, respectivas páginas do manual>>. No entanto, "
+"pode não ser óbvio para um iniciante no [.filename]#rc.d# como ele deve unir "
+"as numerosas partes para criar um script bem estruturado para uma tarefa "
+"específica. Portanto, este artigo tentará abordar o [.filename]#rc.d# de "
+"forma diferente. Mostrará quais recursos devem ser usados em vários casos "
+"típicos e por que. Observe que este não é um documento de \"como fazer\", "
+"porque nosso objetivo não é fornecer receitas prontas, mas mostrar algumas "
+"entradas fáceis no mundo do [.filename]#rc.d#. Este artigo também não "
+"substitui as páginas do manual relevantes. Não hesite em consultá-las para "
+"obter documentação mais formal e completa enquanto lê este artigo."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:105
+msgid ""
+"There are prerequisites to understanding this article. First of all, you "
+"should be familiar with the man:sh[1] scripting language in order to master "
+"[.filename]#rc.d#. In addition, you should know how the system performs "
+"userland startup and shutdown tasks, which is described in man:rc[8]."
+msgstr ""
+"Existem pré-requisitos para entender este artigo. Em primeiro lugar, você "
+"deve estar familiarizado com a linguagem de script man:sh[1] para dominar o ["
+".filename]#rc.d#. Além disso, você deve saber como o sistema realiza tarefas "
+"de inicialização e desligamento do espaço do usuário, o que é descrito em "
+"man:rc[8]."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:108
+msgid ""
+"This article focuses on the FreeBSD branch of [.filename]#rc.d#. "
+"Nevertheless, it may be useful to NetBSD developers, too, because the two "
+"branches of BSD [.filename]#rc.d# not only share the same design but also "
+"stay similar in their aspects visible to script authors."
+msgstr ""
+"Este artigo foca no ramo do FreeBSD do [.filename]#rc.d#. No entanto, ele "
+"pode ser útil também para desenvolvedores do NetBSD, pois os dois ramos do [."
+"filename]#rc.d# não apenas compartilham o mesmo design, mas também "
+"permanecem similares em seus aspectos visíveis aos autores de scripts."
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:110
+#, no-wrap
+msgid "Outlining the task"
+msgstr "Esboçando a tarefa"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:114
+msgid ""
+"A little consideration before starting `$EDITOR` will not hurt. In order to "
+"write a well-tempered [.filename]#rc.d# script for a system service, we "
+"should be able to answer the following questions first:"
+msgstr ""
+"Uma pequena reflexão antes de iniciar o `$EDITOR` não fará mal. Para "
+"escrever um script [.filename]#rc.d# bem elaborado para um serviço do "
+"sistema, devemos ser capazes de responder às seguintes perguntas primeiro:"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:116
+msgid "Is the service mandatory or optional?"
+msgstr "O serviço é obrigatório ou opcional?"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:117
+msgid ""
+"Will the script serve a single program, e.g., a daemon, or perform more "
+"complex actions?"
+msgstr ""
+"O script servirá um único programa, por exemplo, um daemon, ou realizará "
+"ações mais complexas?"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:118
+msgid "Which other services will our service depend on, and vice versa?"
+msgstr "De quais outros serviços nosso serviço dependerá e vice-versa?"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:120
+msgid ""
+"From the examples that follow we will see why it is important to know the "
+"answers to these questions."
+msgstr ""
+"A partir dos exemplos que se seguem, veremos o porque é importante conhecer "
+"as respostas a essas perguntas."
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:122
+#, no-wrap
+msgid "A dummy script"
+msgstr "Um script fictício"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:125
+msgid ""
+"The following script just emits a message each time the system boots up:"
+msgstr ""
+"O script a seguir apenas emite uma mensagem toda vez que o sistema é "
+"inicializado:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:129
+#, no-wrap
+msgid "#!/bin/sh <.>\n"
+msgstr "#!/bin/sh <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:131
+#, no-wrap
+msgid ". /etc/rc.subr <.>\n"
+msgstr ". /etc/rc.subr <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:135
+#, no-wrap
+msgid ""
+"name=\"dummy\" <.>\n"
+"start_cmd=\"${name}_start\" <.>\n"
+"stop_cmd=\":\" <.>\n"
+msgstr ""
+"name=\"dummy\" <.>\n"
+"start_cmd=\"${name}_start\" <.>\n"
+"stop_cmd=\":\" <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:140
+#, no-wrap
+msgid ""
+"dummy_start() <.>\n"
+"{\n"
+"\techo \"Nothing started.\"\n"
+"}\n"
+msgstr ""
+"dummy_start() <.>\n"
+"{\n"
+"\techo \"Nothing started.\"\n"
+"}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:143
+#, no-wrap
+msgid ""
+"load_rc_config $name <.>\n"
+"run_rc_command \"$1\" <.>\n"
+msgstr ""
+"load_rc_config $name <.>\n"
+"run_rc_command \"$1\" <.>\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:146
+msgid "Things to note are:"
+msgstr "Os pontos a serem observados são:"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:152
+msgid ""
+"&#10122; An interpreted script should begin with the magic \"shebang\" "
+"line. That line specifies the interpreter program for the script. Due to "
+"the shebang line, the script can be invoked exactly like a binary program "
+"provided that it has the execute bit set. (See man:chmod[1].) For example, "
+"a system admin can run our script manually, from the command line:"
+msgstr ""
+"&#10122; Um script interpretado deve começar com a linha mágica \"shebang\". "
+"Essa linha especifica o programa interpretador para o script. Devido à linha "
+"shebang, o script pode ser invocado exatamente como um programa binário, "
+"desde que tenha o bit de execução definido. (Veja man:chmod[1].) Por "
+"exemplo, um administrador do sistema pode executar nosso script manualmente, "
+"a partir da linha de comando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:156
+#, no-wrap
+msgid "# /etc/rc.d/dummy start\n"
+msgstr "# /etc/rc.d/dummy start\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:162
+msgid ""
+"In order to be properly managed by the [.filename]#rc.d# framework, its "
+"scripts need to be written in the man:sh[1] language. If you have a service "
+"or port that uses a binary control utility or a startup routine written in "
+"another language, install that element in [.filename]#/usr/sbin# (for the "
+"system) or [.filename]#/usr/local/sbin# (for ports) and call it from a man:"
+"sh[1] script in the appropriate [.filename]#rc.d# directory."
+msgstr ""
+"Para ser gerenciado corretamente pelo framework [.filename]#rc.d#, os "
+"scripts devem ser escritos na linguagem man:sh[1]. Se você tiver um serviço "
+"ou port que usa um utilitário de controle binário ou uma rotina de "
+"inicialização escrita em outra linguagem, instale esse elemento em [."
+"filename]#/usr/sbin# (para o sistema) ou [.filename]#/usr/local/sbin# (para "
+"ports) e chame-o a partir de um script man:sh[1] no diretório [.filename]#rc."
+"d# apropriado."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:167
+msgid ""
+"If you would like to learn the details of why [.filename]#rc.d# scripts must "
+"be written in the man:sh[1] language, see how [.filename]#/etc/rc# invokes "
+"them by means of `run_rc_script`, then study the implementation of "
+"`run_rc_script` in [.filename]#/etc/rc.subr#."
+msgstr ""
+"Se você gostaria de aprender os detalhes de por que os scripts [.filename]#rc"
+".d# devem ser escritos na linguagem man:sh[1], veja como o [.filename]#/etc/"
+"rc# os invoca por meio de `run_rc_script` e, em seguida, estude a "
+"implementação de `run_rc_script` em [.filename]#/etc/rc.subr#."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:173
+msgid ""
+"&#10123; In [.filename]#/etc/rc.subr#, a number of man:sh[1] functions are "
+"defined for an [.filename]#rc.d# script to use. The functions are "
+"documented in man:rc.subr[8]. While it is theoretically possible to write "
+"an [.filename]#rc.d# script without ever using man:rc.subr[8], its functions "
+"prove extremely handy and make the job an order of magnitude easier. So it "
+"is no surprise that everybody resorts to man:rc.subr[8] in [.filename]#rc.d# "
+"scripts. We are not going to be an exception."
+msgstr ""
+"&#10123; Em [.filename]#/etc/rc.subr#, uma série de funções man:sh[1] estão "
+"definidas para serem utilizadas por um script [.filename]#rc.d#. As funções "
+"estão documentadas em man:rc.subr[8]. Embora seja teoricamente possível "
+"escrever um script [.filename]#rc.d# sem nunca usar o man:rc.subr[8], suas "
+"funções provam ser extremamente úteis e tornam o trabalho uma ordem de "
+"magnitude mais fácil. Portanto, não é surpresa que todo mundo recorra ao "
+"man:rc.subr[8] em scripts [.filename]#rc.d#. Não seremos uma exceção."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:176
+msgid ""
+"An [.filename]#rc.d# script must \"source\"[.filename]#/etc/rc.subr# "
+"(include it using \"`.`\") _before_ it calls man:rc.subr[8] functions so "
+"that man:sh[1] has an opportunity to learn the functions. The preferred "
+"style is to source [.filename]#/etc/rc.subr# first of all."
+msgstr ""
+"Um script [.filename]#rc.d# deve fazer o \"source\" do [.filename]#/etc/rc."
+"subr# (inclua-o usando \"`.`\") _antes_ de chamar as funções man:rc.subr[8] "
+"para que o man:sh[1] tenha a oportunidade de aprender as funções. O estilo "
+"preferido é incluir o [.filename]#/etc/rc.subr# antes de tudo."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:180
+msgid ""
+"Some useful functions related to networking are provided by another include "
+"file, [.filename]#/etc/network.subr#."
+msgstr ""
+"Algumas funções úteis relacionadas à rede são fornecidas por outro arquivo "
+"de inclusão, o [.filename]#/etc/network.subr#."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:185
+msgid ""
+"&#10124; [[name-var]]The mandatory variable `name` specifies the name of our "
+"script. It is required by man:rc.subr[8]. That is, each [.filename]#rc.d# "
+"script _must_ set `name` before it calls man:rc.subr[8] functions."
+msgstr ""
+"&#10124; A variável obrigatória `name` especifica o nome do nosso script. "
+"Ela é exigida pelo man:rc.subr[8]. Isso significa que cada script [."
+"filename]#rc.d# _deve_ definir `name` antes de chamar funções do man:rc."
+"subr[8]."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:189
+msgid ""
+"Now it is the right time to choose a unique name for our script once and for "
+"all. We will use it in a number of places while developing the script. For "
+"a start, let us give the same name to the script file, too."
+msgstr ""
+"Agora é o momento certo para escolher um nome exclusivo para o nosso script "
+"de uma vez por todas. Vamos usá-lo em vários lugares enquanto desenvolvemos "
+"o script. Para começar, também vamos dar o mesmo nome ao arquivo de script."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:196
+msgid ""
+"The current style of [.filename]#rc.d# scripting is to enclose values "
+"assigned to variables in double quotes. Keep in mind that it is just a "
+"style issue that may not always be applicable. You can safely omit quotes "
+"from around simple words without man:sh[1] metacharacters in them, while in "
+"certain cases you will need single quotes to prevent any interpretation of "
+"the value by man:sh[1]. A programmer should be able to tell the language "
+"syntax from style conventions and use both of them wisely."
+msgstr ""
+"O estilo atual de escrita de scripts [.filename]#rc.d# é envolver os valores "
+"atribuídos às variáveis em aspas duplas. Tenha em mente que isso é apenas "
+"uma questão de estilo que nem sempre é aplicável. Você pode seguramente "
+"omitir as aspas ao redor de palavras simples sem metacaracteres man:sh[1], "
+"enquanto em certos casos você precisará de aspas simples para evitar "
+"qualquer interpretação do valor por man:sh[1]. Um programador deve ser capaz "
+"de distinguir a sintaxe da linguagem das convenções de estilo e usá-las "
+"sabiamente."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:202
+msgid ""
+"&#10125; The main idea behind man:rc.subr[8] is that an [.filename]#rc.d# "
+"script provides handlers, or methods, for man:rc.subr[8] to invoke. In "
+"particular, `start`, `stop`, and other arguments to an [.filename]#rc.d# "
+"script are handled this way. A method is a man:sh[1] expression stored in a "
+"variable named `argument_cmd`, where _argument_ corresponds to what can be "
+"specified on the script's command line. We will see later how man:rc."
+"subr[8] provides default methods for the standard arguments."
+msgstr ""
+"&#10125; Cada script [.filename]#rc.d# fornece manipuladores, ou métodos, "
+"para o man:rc.subr[8] invocar. Em particular, `start`, `stop`, e outros "
+"argumentos para um script [.filename]#rc.d# são manipulados desta forma. Um "
+"método é uma expressão man:sh[1] armazenada em uma variável chamada "
+"`argument_cmd`, onde _argument_ corresponde ao que pode ser especificado na "
+"linha de comando do script. Veremos mais tarde como o man:rc.subr[8] fornece "
+"métodos padrão para os argumentos padrão."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:207
+msgid ""
+"To make the code in [.filename]#rc.d# more uniform, it is common to use `"
+"${name}` wherever appropriate. Thus a number of lines can be just copied "
+"from one script to another."
+msgstr ""
+"Para tornar o código em [.filename]#rc.d# mais uniforme, é comum usar "
+"`${name}` sempre que apropriado. Assim, várias linhas podem ser simplesmente "
+"copiadas de um script para outro."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:211
+msgid ""
+"&#10126; We should keep in mind that man:rc.subr[8] provides default methods "
+"for the standard arguments. Consequently, we must override a standard "
+"method with a no-op man:sh[1] expression if we want it to do nothing."
+msgstr ""
+"&#10126; Devemos ter em mente que o man:rc.subr[8] fornece métodos padrões "
+"para os argumentos padrões. Consequentemente, devemos substituir um método "
+"padrão por uma expressão man:sh[1] sem efeito se quisermos que ele não faça "
+"nada."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:214
+msgid ""
+"&#10127; The body of a sophisticated method can be implemented as a "
+"function. It is a good idea to make the function name meaningful."
+msgstr ""
+"&#10127; O corpo de um método sofisticado pode ser implementado como uma "
+"função. É uma boa ideia dar um nome significativo à função."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:218
+msgid ""
+"It is strongly recommended to add the prefix `${name}` to the names of all "
+"functions defined in our script so they never clash with the functions from "
+"man:rc.subr[8] or another common include file."
+msgstr ""
+"Recomenda-se fortemente adicionar o prefixo `${name}` aos nomes de todas as "
+"funções definidas no nosso script para que nunca entrem em conflito com as "
+"funções de man:rc.subr[8] ou outro arquivo de inclusão comum."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:222
+msgid ""
+"&#10128; This call to man:rc.subr[8] loads man:rc.conf[5] variables. Our "
+"script makes no use of them yet, but it still is recommended to load man:rc."
+"conf[5] because there can be man:rc.conf[5] variables controlling man:rc."
+"subr[8] itself."
+msgstr ""
+"&#10128; Essa chamada para o man:rc.subr[8] carrega as variáveis do man:rc."
+"conf[5]. Nosso script ainda não as usa, mas ainda é recomendável carregar o "
+"man:rc.conf[5] porque pode haver variáveis do man:rc.conf[5] controlando o "
+"man:rc.subr[8] em si."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:225
+msgid ""
+"&#10129; Usually this is the last command in an [.filename]#rc.d# script. "
+"It invokes the man:rc.subr[8] machinery to perform the requested action "
+"using the variables and methods our script has provided."
+msgstr ""
+"&#10129; Geralmente, esse é o último comando em um script [.filename]#rc.d#. "
+"Ele invoca a maquinaria do man:rc.subr[8] para realizar a ação solicitada "
+"usando as variáveis e métodos que o nosso script forneceu."
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:227
+#, no-wrap
+msgid "A configurable dummy script"
+msgstr "Um script fictício configurável"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:237
+msgid ""
+"Now let us add some controls to our dummy script. As you may know, [."
+"filename]#rc.d# scripts are controlled with man:rc.conf[5]. Fortunately, "
+"man:rc.subr[8] hides all the complications from us. The following script "
+"uses man:rc.conf[5] via man:rc.subr[8] to see whether it is enabled in the "
+"first place, and to fetch a message to show at boot time. These two tasks "
+"in fact are independent. On the one hand, an [.filename]#rc.d# script can "
+"just support enabling and disabling its service. On the other hand, a "
+"mandatory [.filename]#rc.d# script can have configuration variables. We "
+"will do both things in the same script though:"
+msgstr ""
+"Agora vamos adicionar alguns controles ao nosso script fictício. Como você "
+"deve saber, scripts [.filename]#rc.d# são controlados com o man:rc.conf[5]. "
+"Felizmente, o man:rc.subr[8] oculta todas as complicações para nós. O script "
+"a seguir usa o man:rc.conf[5] por meio do man:rc.subr[8] para verificar se "
+"está habilitado em primeiro lugar e para buscar uma mensagem para ser "
+"exibida na inicialização. Essas duas tarefas, na verdade, são independentes. "
+"Por um lado, um script [.filename]#rc.d# pode apenas suportar a habilitação "
+"e desabilitação do seu serviço. Por outro lado, um script [.filename]#rc.d# "
+"obrigatório pode ter variáveis de configuração. No entanto, faremos as duas "
+"coisas no mesmo script:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:241
+#: documentation/content/en/articles/rc-scripting/_index.adoc:332
+#: documentation/content/en/articles/rc-scripting/_index.adoc:389
+#: documentation/content/en/articles/rc-scripting/_index.adoc:621
+#: documentation/content/en/articles/rc-scripting/_index.adoc:752
+#, no-wrap
+msgid "#!/bin/sh\n"
+msgstr "#!/bin/sh\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:243
+#: documentation/content/en/articles/rc-scripting/_index.adoc:334
+#: documentation/content/en/articles/rc-scripting/_index.adoc:391
+#: documentation/content/en/articles/rc-scripting/_index.adoc:628
+#: documentation/content/en/articles/rc-scripting/_index.adoc:754
+#, no-wrap
+msgid ". /etc/rc.subr\n"
+msgstr ". /etc/rc.subr\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:246
+#, no-wrap
+msgid ""
+"name=dummy\n"
+"rcvar=dummy_enable <.>\n"
+msgstr ""
+"name=dummy\n"
+"rcvar=dummy_enable <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:249
+#, no-wrap
+msgid ""
+"start_cmd=\"${name}_start\"\n"
+"stop_cmd=\":\"\n"
+msgstr ""
+"start_cmd=\"${name}_start\"\n"
+"stop_cmd=\":\"\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:253
+#, no-wrap
+msgid ""
+"load_rc_config $name <.>\n"
+": ${dummy_enable:=no} <.>\n"
+": ${dummy_msg=\"Nothing started.\"} <.>\n"
+msgstr ""
+"load_rc_config $name <.>\n"
+": ${dummy_enable:=no} <.>\n"
+": ${dummy_msg=\"Nothing started.\"} <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:258
+#, no-wrap
+msgid ""
+"dummy_start()\n"
+"{\n"
+"\techo \"$dummy_msg\" <.>\n"
+"}\n"
+msgstr ""
+"dummy_start()\n"
+"{\n"
+"\techo \"$dummy_msg\" <.>\n"
+"}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:260
+#, no-wrap
+msgid "run_rc_command \"$1\"\n"
+msgstr "run_rc_command \"$1\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:263
+msgid "What changed in this example?"
+msgstr "O que mudou neste exemplo?"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:265
+msgid ""
+"&#10122; The variable `rcvar` specifies the name of the ON/OFF knob variable."
+msgstr ""
+"&#10122; A variável `rcvar` especifica o nome da variável do botão LIGA/"
+"DESLIGA."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:267
+msgid ""
+"&#10123; Now `load_rc_config` is invoked earlier in the script, before any "
+"man:rc.conf[5] variables are accessed."
+msgstr ""
+"&#10123; Agora, o `load_rc_config` é invocado mais cedo no script, antes que "
+"quaisquer variáveis do man:rc.conf[5] sejam acessadas."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:273
+msgid ""
+"While examining [.filename]#rc.d# scripts, keep in mind that man:sh[1] "
+"defers the evaluation of expressions in a function until the latter is "
+"called. Therefore it is not an error to invoke `load_rc_config` as late as "
+"just before `run_rc_command` and still access man:rc.conf[5] variables from "
+"the method functions exported to `run_rc_command`. This is because the "
+"method functions are to be called by `run_rc_command`, which is invoked "
+"_after_ `load_rc_config`."
+msgstr ""
+"Enquanto examina os scripts [.filename]#rc.d#, tenha em mente que o man:sh[1]"
+" adia a avaliação de expressões em uma função até que esta seja chamada. "
+"Portanto, não é um erro invocar `load_rc_config` tão tarde quanto logo antes "
+"de `run_rc_command` e ainda assim acessar as variáveis man:rc.conf[5] das "
+"funções de método exportadas para `run_rc_command`. Isso ocorre porque as "
+"funções de método devem ser chamadas por `run_rc_command`, que é invocado "
+"_após_ `load_rc_config`."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:279
+msgid ""
+"&#10124; A warning will be emitted by `run_rc_command` if `rcvar` itself is "
+"set, but the indicated knob variable is unset. If your [.filename]#rc.d# "
+"script is for the base system, you should add a default setting for the knob "
+"to [.filename]#/etc/defaults/rc.conf# and document it in man:rc.conf[5]. "
+"Otherwise it is your script that should provide a default setting for the "
+"knob. The canonical approach to the latter case is shown in the example."
+msgstr ""
+"&#10124; Aviso será emitido pelo `run_rc_command` se o `rcvar` em si estiver "
+"configurado, mas a variável de controle indicada estiver desativada. Se o "
+"seu script [.filename]#rc.d# é para o sistema base, você deve adicionar uma "
+"configuração padrão para o knob em [.filename]#/etc/defaults/rc.conf# e "
+"documentá-lo em man:rc.conf[5]. Caso contrário, é seu script que deve "
+"fornecer uma configuração padrão para o knob. A abordagem canônica para o "
+"último caso é mostrada no exemplo."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:286
+msgid ""
+"You can make man:rc.subr[8] act as though the knob is set to `ON`, "
+"irrespective of its current setting, by prefixing the argument to the script "
+"with `one` or `force`, as in `onestart` or `forcestop`. Keep in mind though "
+"that `force` has other dangerous effects we will touch upon below, while "
+"`one` just overrides the ON/OFF knob. E.g., assume that `dummy_enable` is "
+"`OFF`. The following command will run the `start` method in spite of the "
+"setting:"
+msgstr ""
+"Você pode fazer o man:rc.subr[8] agir como se o botão estivesse definido "
+"como `ON`, independentemente de sua configuração atual, prefixando o "
+"argumento do script com `one` ou `force`, como em `onestart` ou `forcestop`. "
+"No entanto, tenha em mente que `force` tem outros efeitos perigosos que "
+"abordaremos abaixo, enquanto `one` apenas substitui o botão ON/OFF. Por "
+"exemplo, suponha que `dummy_enable` esteja definido como `OFF`. O seguinte "
+"comando executará o método `start` apesar da configuração:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:290
+#, no-wrap
+msgid "# /etc/rc.d/dummy onestart\n"
+msgstr "# /etc/rc.d/dummy onestart\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:297
+msgid ""
+"&#10125; Now the message to be shown at boot time is no longer hard-coded in "
+"the script. It is specified by an man:rc.conf[5] variable named "
+"`dummy_msg`. This is a trivial example of how man:rc.conf[5] variables can "
+"control an [.filename]#rc.d# script."
+msgstr ""
+"&#10125; Agora a mensagem a ser exibida na inicialização não é mais "
+"codificada no script. É especificada por uma variável man:rc.conf[5] chamada "
+"`dummy_msg`. Este é um exemplo trivial de como as variáveis man:rc.conf[5] "
+"podem controlar um script [.filename]#rc.d#."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:302
+msgid ""
+"The names of all man:rc.conf[5] variables used exclusively by our script "
+"_must_ have the same prefix: `${name}_`. For example: `dummy_mode`, "
+"`dummy_state_file`, and so on."
+msgstr ""
+"Os nomes de todas as variáveis man:rc.conf[5] usadas exclusivamente pelo "
+"nosso script _devem_ ter o mesmo prefixo: `${name}_`. Por exemplo: "
+"`dummy_mode`, `dummy_state_file`, e assim por diante."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:307
+msgid ""
+"While it is possible to use a shorter name internally, e.g., just `msg`, "
+"adding the unique prefix `${name}_` to all global names introduced by our "
+"script will save us from possible collisions with the man:rc.subr[8] "
+"namespace."
+msgstr ""
+"Embora seja possível usar um nome mais curto internamente, por exemplo, "
+"apenas `msg`, adicionar o prefixo único `${name}_` a todos os nomes globais "
+"introduzidos pelo nosso script nos salvará de possíveis colisões com o "
+"namespace do man:rc.subr[8]."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:310
+msgid ""
+"As a rule, [.filename]#rc.d# scripts of the base system need not provide "
+"defaults for their man:rc.conf[5] variables because the defaults should be "
+"set in [.filename]#/etc/defaults/rc.conf# instead. On the other hand, [."
+"filename]#rc.d# scripts for ports should provide the defaults as shown in "
+"the example."
+msgstr ""
+"Como regra geral, os scripts [.filename]#rc.d# do sistema base não precisam "
+"fornecer valores padrão para suas variáveis man:rc.conf[5], pois os valores "
+"padrão devem ser definidos em [.filename]#/etc/defaults/rc.conf#. Por outro "
+"lado, os scripts [.filename]#rc.d# para ports devem fornecer os valores "
+"padrão conforme mostrado no exemplo."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:314
+msgid ""
+"&#10126; Here we use `dummy_msg` to actually control our script, i.e., to "
+"emit a variable message. Use of a shell function is overkill here, since it "
+"only runs a single command; an equally valid alternative is:"
+msgstr ""
+"&#10126; Aqui usamos `dummy_msg` para controlar nosso script, ou seja, para "
+"emitir uma mensagem variável. O uso de uma função shell é excessivo aqui, "
+"uma vez que ela executa apenas um único comando; uma alternativa igualmente "
+"válida é:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:318
+#, no-wrap
+msgid "start_cmd=\"echo \\\"$dummy_msg\\\"\"\n"
+msgstr "start_cmd=\"echo \\\"$dummy_msg\\\"\"\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:321
+#, no-wrap
+msgid "Startup and shutdown of a simple daemon"
+msgstr "Inicialização e desligamento de um daemon simples"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:328
+msgid ""
+"We said earlier that man:rc.subr[8] could provide default methods. "
+"Obviously, such defaults cannot be too general. They are suited for the "
+"common case of starting and shutting down a simple daemon program. Let us "
+"assume now that we need to write an [.filename]#rc.d# script for such a "
+"daemon called `mumbled`. Here it is:"
+msgstr ""
+"Dissemos anteriormente que o man:rc.subr[8] pode fornecer métodos padrões. "
+"Obviamente, tais padrões não podem ser muito gerais. Eles são adequados para "
+"o caso comum de iniciar e desligar um programa de daemon simples. Vamos "
+"supor agora que precisamos escrever um script [.filename]#rc.d# para um "
+"daemon chamado `mumbled`. Aqui está:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:337
+#: documentation/content/en/articles/rc-scripting/_index.adoc:394
+#: documentation/content/en/articles/rc-scripting/_index.adoc:631
+#, no-wrap
+msgid ""
+"name=mumbled\n"
+"rcvar=mumbled_enable\n"
+msgstr ""
+"name=mumbled\n"
+"rcvar=mumbled_enable\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:339
+#, no-wrap
+msgid "command=\"/usr/sbin/${name}\" <.>\n"
+msgstr "command=\"/usr/sbin/${name}\" <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:342
+#: documentation/content/en/articles/rc-scripting/_index.adoc:440
+#: documentation/content/en/articles/rc-scripting/_index.adoc:646
+#, no-wrap
+msgid ""
+"load_rc_config $name\n"
+"run_rc_command \"$1\"\n"
+msgstr ""
+"load_rc_config $name\n"
+"run_rc_command \"$1\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:346
+msgid ""
+"Pleasingly simple, isn't it? Let us examine our little script. The only new "
+"thing to note is as follows:"
+msgstr ""
+"Agradavelmente simples, não é? Vamos examinar nosso pequeno script. A única "
+"coisa nova a observar é o seguinte:"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:350
+msgid ""
+"&#10122; The `command` variable is meaningful to man:rc.subr[8]. If it is "
+"set, man:rc.subr[8] will act according to the scenario of serving a "
+"conventional daemon. In particular, the default methods will be provided "
+"for such arguments: `start`, `stop`, `restart`, `poll`, and `status`."
+msgstr ""
+"&#10122; A variável `command` é significativa para man:rc.subr[8]. Se ela "
+"estiver definida, man:rc.subr[8] agirá de acordo com o cenário de servir a "
+"um daemon convencional. Em particular, os métodos padrão serão fornecidos "
+"para esses argumentos: `start`, `stop`, `restart`, `poll` e `status`."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:359
+msgid ""
+"The daemon will be started by running `$command` with command-line flags "
+"specified by `$mumbled_flags`. Thus all the input data for the default "
+"`start` method are available in the variables set by our script. Unlike "
+"`start`, other methods may require additional information about the process "
+"started. For instance, `stop` must know the PID of the process to terminate "
+"it. In the present case, man:rc.subr[8] will scan through the list of all "
+"processes, looking for a process with its name equal to `procname`. The "
+"latter is another variable of meaning to man:rc.subr[8], and its value "
+"defaults to that of `command`. In other words, when we set `command`, "
+"`procname` is effectively set to the same value. This enables our script to "
+"kill the daemon and to check if it is running in the first place."
+msgstr ""
+"O daemon será iniciado executando `$command` com as flags de linha de "
+"comando especificadas por `$mumbled_flags`. Assim, todos os dados de entrada "
+"para o método `start` padrão estão disponíveis nas variáveis definidas pelo "
+"nosso script. Ao contrário de `start`, outros métodos podem exigir "
+"informações adicionais sobre o processo iniciado. Por exemplo, `stop` deve "
+"saber o PID do processo para terminá-lo. No caso presente, man:rc.subr[8] "
+"irá pesquisar a lista de todos os processos, procurando por um processo com "
+"o nome igual a `procname`. Este último é outra variável com significado para "
+"man:rc.subr[8], e seu valor padrão é o de `command`. Em outras palavras, "
+"quando definimos `command`, `procname` é efetivamente definido para o mesmo "
+"valor. Isso permite que nosso script mate o daemon e verifique se ele está "
+"em execução."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:366
+msgid ""
+"Some programs are in fact executable scripts. The system runs such a script "
+"by starting its interpreter and passing the name of the script to it as a "
+"command-line argument. This is reflected in the list of processes, which "
+"can confuse man:rc.subr[8]. You should additionally set "
+"`command_interpreter` to let man:rc.subr[8] know the actual name of the "
+"process if `$command` is a script."
+msgstr ""
+"Algumas vezes, programas são de fato scripts executáveis. O sistema executa "
+"esse script iniciando o seu interpretador e passando o nome do script como "
+"um argumento na linha de comando. Isso é refletido na lista de processos, o "
+"que pode confundir man:rc.subr[8]. Você deve adicionalmente definir "
+"`command_interpreter` para que man:rc.subr[8] saiba o nome real do processo "
+"se `$command` for um script."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:371
+msgid ""
+"For each [.filename]#rc.d# script, there is an optional man:rc.conf[5] "
+"variable that takes precedence over `command`. Its name is constructed as "
+"follows: `${name}_program`, where `name` is the mandatory variable we "
+"discussed <<name-var, earlier>>. E.g., in this case it will be "
+"`mumbled_program`. It is man:rc.subr[8] that arranges `${name}_program` to "
+"override `command`."
+msgstr ""
+"A cada script [.filename]#rc.d#, há uma variável opcional do man:rc.conf[5] "
+"que tem precedência sobre `command`. Seu nome é construído da seguinte forma:"
+" `${name}_program`, onde `name` é a variável obrigatória discutida "
+"anteriormente. Por exemplo, neste caso, será `mumbled_program`. É o man:rc."
+"subr[8] que arruma `${name}_program` para substituir `command`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:375
+msgid ""
+"Of course, man:sh[1] will permit you to set `${name}_program` from man:rc."
+"conf[5] or the script itself even if `command` is unset. In that case, the "
+"special properties of `${name}_program` are lost, and it becomes an ordinary "
+"variable your script can use for its own purposes. However, the sole use of "
+"`${name}_program` is discouraged because using it together with `command` "
+"became an idiom of [.filename]#rc.d# scripting."
+msgstr ""
+"Claro que o man:sh[1] permite definir `${name}_program` a partir do man:rc."
+"conf[5] ou do próprio script, mesmo se `command` não estiver definido. Nesse "
+"caso, as propriedades especiais de `${name}_program` são perdidas, e ela se "
+"torna uma variável comum que o script pode usar para seus próprios fins. No "
+"entanto, o uso exclusivo de `${name}_program` é desencorajado, pois usá-la "
+"em conjunto com `command` se tornou idiomático em [.filename]#rc.d# "
+"scripting."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:378
+msgid ""
+"For more detailed information on default methods, refer to man:rc.subr[8]."
+msgstr ""
+"Para obter informações mais detalhadas sobre os métodos padrões, consulte "
+"man:rc.subr[8]."
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:380
+#, no-wrap
+msgid "Startup and shutdown of an advanced daemon"
+msgstr "Inicialização e desligamento de um daemon avançado"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:385
+msgid ""
+"Let us add some meat onto the bones of the previous script and make it more "
+"complex and featureful. The default methods can do a good job for us, but "
+"we may need some of their aspects tweaked. Now we will learn how to tune "
+"the default methods to our needs."
+msgstr ""
+"Vamos adicionar um pouco de carne aos ossos do script anterior e torná-lo "
+"mais complexo e cheio de funcionalidades. Os métodos padrões podem fazer um "
+"bom trabalho para nós, mas podemos precisar ajustar alguns dos seus "
+"aspectos. Agora vamos aprender como ajustar os métodos padrões para as "
+"nossas necessidades."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:397
+#, no-wrap
+msgid ""
+"command=\"/usr/sbin/${name}\"\n"
+"command_args=\"mock arguments > /dev/null 2>&1\" <.>\n"
+msgstr ""
+"command=\"/usr/sbin/${name}\"\n"
+"command_args=\"mock arguments > /dev/null 2>&1\" <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:399
+#, no-wrap
+msgid "pidfile=\"/var/run/${name}.pid\" <.>\n"
+msgstr "pidfile=\"/var/run/${name}.pid\" <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:401
+#, no-wrap
+msgid "required_files=\"/etc/${name}.conf /usr/share/misc/${name}.rules\" <.>\n"
+msgstr ""
+"required_files=\"/etc/${name}.conf /usr/share/misc/${name}.rules\" <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:403
+#, no-wrap
+msgid "sig_reload=\"USR1\" <.>\n"
+msgstr "sig_reload=\"USR1\" <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:406
+#, no-wrap
+msgid ""
+"start_precmd=\"${name}_prestart\" <.>\n"
+"stop_postcmd=\"echo Bye-bye\" <.>\n"
+msgstr ""
+"start_precmd=\"${name}_prestart\" <.>\n"
+"stop_postcmd=\"echo Bye-bye\" <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:408
+#, no-wrap
+msgid "extra_commands=\"reload plugh xyzzy\" <.>\n"
+msgstr "extra_commands=\"reload plugh xyzzy\" <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:411
+#, no-wrap
+msgid ""
+"plugh_cmd=\"mumbled_plugh\" <.>\n"
+"xyzzy_cmd=\"echo 'Nothing happens.'\"\n"
+msgstr ""
+"plugh_cmd=\"mumbled_plugh\" <.>\n"
+"xyzzy_cmd=\"echo 'Nothing happens.'\"\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:432
+#, no-wrap
+msgid ""
+"mumbled_prestart()\n"
+"{\n"
+"\tif checkyesno mumbled_smart; then <.>\n"
+"\t\trc_flags=\"-o smart ${rc_flags}\" <.>\n"
+"\tfi\n"
+"\tcase \"$mumbled_mode\" in\n"
+"\tfoo)\n"
+"\t\trc_flags=\"-frotz ${rc_flags}\"\n"
+"\t\t;;\n"
+"\tbar)\n"
+"\t\trc_flags=\"-baz ${rc_flags}\"\n"
+"\t\t;;\n"
+"\t*)\n"
+"\t\twarn \"Invalid value for mumbled_mode\" <.>\n"
+"\t\treturn 1 <.>\n"
+"\t\t;;\n"
+"\tesac\n"
+"\trun_rc_command xyzzy <.>\n"
+"\treturn 0\n"
+"}\n"
+msgstr ""
+"mumbled_prestart()\n"
+"{\n"
+"\tif checkyesno mumbled_smart; then <.>\n"
+"\t\trc_flags=\"-o smart ${rc_flags}\" <.>\n"
+"\tfi\n"
+"\tcase \"$mumbled_mode\" in\n"
+"\tfoo)\n"
+"\t\trc_flags=\"-frotz ${rc_flags}\"\n"
+"\t\t;;\n"
+"\tbar)\n"
+"\t\trc_flags=\"-baz ${rc_flags}\"\n"
+"\t\t;;\n"
+"\t*)\n"
+"\t\twarn \"Invalid value for mumbled_mode\" <.>\n"
+"\t\treturn 1 <.>\n"
+"\t\t;;\n"
+"\tesac\n"
+"\trun_rc_command xyzzy <.>\n"
+"\treturn 0\n"
+"}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:437
+#, no-wrap
+msgid ""
+"mumbled_plugh() <.>\n"
+"{\n"
+"\techo 'A hollow voice says \"plugh\".'\n"
+"}\n"
+msgstr ""
+"mumbled_plugh() <.>\n"
+"{\n"
+"\techo 'A hollow voice says \"plugh\".'\n"
+"}\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:445
+msgid ""
+"&#10122; Additional arguments to `$command` can be passed in "
+"`command_args`. They will be added to the command line after `"
+"$mumbled_flags`. Since the final command line is passed to `eval` for its "
+"actual execution, input and output redirections can be specified in "
+"`command_args`."
+msgstr ""
+"&#10122; Argumentos adicionais para `$command` podem ser passados em "
+"`command_args`. Eles serão adicionados à linha de comando após "
+"`$mumbled_flags`. Como a linha de comando final é passada para `eval` para "
+"sua execução real, redirecionamentos de entrada e saída podem ser "
+"especificados em `command_args`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:452
+msgid ""
+"_Never_ include dashed options, like `-X` or `--foo`, in `command_args`. "
+"The contents of `command_args` will appear at the end of the final command "
+"line, hence they are likely to follow arguments present in `${name}_flags`; "
+"but most commands will not recognize dashed options after ordinary "
+"arguments. A better way of passing additional options to `$command` is to "
+"add them to the beginning of `${name}_flags`. Another way is to modify "
+"`rc_flags` <<rc-flags, as shown later>>."
+msgstr ""
+"_Nunca_ inclua opções com hífen, como `-X` ou `--foo`, em `command_args`. O "
+"conteúdo de `command_args` aparecerá no final da linha de comando final, "
+"portanto, é provável que sigam argumentos presentes em `${name}_flags`; mas "
+"a maioria dos comandos não reconhecerá opções com hífen após argumentos "
+"comuns. Uma maneira melhor de passar opções adicionais para `$command` é "
+"adicioná-las no início de `${name}_flags`. Outra maneira é modificar "
+"`rc_flags` <<rc-flags, conforme mostrado posteriormente>>."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:456
+msgid ""
+"&#10123; A good-mannered daemon should create a _pidfile_ so that its "
+"process can be found more easily and reliably. The variable `pidfile`, if "
+"set, tells man:rc.subr[8] where it can find the pidfile for its default "
+"methods to use."
+msgstr ""
+"&#10123; Um daemon bem comportado deve criar um _pidfile_ para que seu "
+"processo possa ser encontrado de forma mais fácil e confiável. A variável "
+"`pidfile`, se definida, informa ao man:rc.subr[8] onde ele pode encontrar o "
+"pidfile para ser utilizado em seus métodos padrões."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:461
+msgid ""
+"In fact, man:rc.subr[8] will also use the pidfile to see if the daemon is "
+"already running before starting it. This check can be skipped by using the "
+"`faststart` argument."
+msgstr ""
+"De fato, o man:rc.subr[8] também usa o pidfile para ver se o daemon já está "
+"em execução antes de iniciá-lo. Essa verificação pode ser ignorada usando o "
+"argumento `faststart`."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:466
+msgid ""
+"&#10124; If the daemon cannot run unless certain files exist, just list them "
+"in `required_files`, and man:rc.subr[8] will check that those files do exist "
+"before starting the daemon. There also are `required_dirs` and "
+"`required_vars` for directories and environment variables, respectively. "
+"They all are described in detail in man:rc.subr[8]."
+msgstr ""
+"&#10124; Se o daemon não puder ser executado a menos que certos arquivos "
+"existam, basta listá-los em `required_files`, e o man:rc.subr[8] verificará "
+"se esses arquivos existem antes de iniciar o daemon. Existem também "
+"`required_dirs` e `required_vars` para diretórios e variáveis de ambiente, "
+"respectivamente. Todos eles são descritos em detalhes no man:rc.subr[8]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:470
+msgid ""
+"The default method from man:rc.subr[8] can be forced to skip the "
+"prerequisite checks by using `forcestart` as the argument to the script."
+msgstr ""
+"O método padrão do man:rc.subr[8] pode ser forçado a pular as verificações "
+"de pré-requisito usando `forcestart` como argumento para o script."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:476
+msgid ""
+"&#10125; We can customize signals to send to the daemon in case they differ "
+"from the well-known ones. In particular, `sig_reload` specifies the signal "
+"that makes the daemon reload its configuration; it is SIGHUP by default. "
+"Another signal is sent to stop the daemon process; the default is SIGTERM, "
+"but this can be changed by setting `sig_stop` appropriately."
+msgstr ""
+"&#10125; Podemos personalizar sinais a serem enviados ao daemon caso eles "
+"difiram dos sinais conhecidos. Em particular, `sig_reload` especifica o "
+"sinal que faz com que o daemon recarregue sua configuração; por padrão, é o "
+"SIGHUP. Outro sinal é enviado para interromper o processo do daemon; o "
+"padrão é o SIGTERM, mas isso pode ser alterado configurando `sig_stop` "
+"adequadamente."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:481
+msgid ""
+"The signal names should be specified to man:rc.subr[8] without the `SIG` "
+"prefix, as it is shown in the example. The FreeBSD version of man:kill[1] "
+"can recognize the `SIG` prefix, but the versions from other OS types may not."
+msgstr ""
+"As sinalizações devem ser especificadas para o man:rc.subr[8] sem o prefixo "
+"`SIG`, como é mostrado no exemplo. A versão do FreeBSD do man:kill[1] pode "
+"reconhecer o prefixo `SIG`, mas as versões de outros sistemas operacionais "
+"podem não reconhecer."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:486
+msgid ""
+"&#10126;&#10127; Performing additional tasks before or after the default "
+"methods is easy. For each command-argument supported by our script, we can "
+"define `argument_precmd` and `argument_postcmd`. These man:sh[1] commands "
+"are invoked before and after the respective method, as it is evident from "
+"their names."
+msgstr ""
+"&#10126;&#10127; Realizar tarefas adicionais antes ou depois dos métodos "
+"padrões é fácil. Para cada argumento de comando suportado por nosso script, "
+"podemos definir `argument_precmd` e `argument_postcmd`. Esses comandos "
+"man:sh[1] são invocados antes e depois do respectivo método, como é evidente "
+"pelos seus nomes."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:492
+msgid ""
+"Overriding a default method with a custom `argument_cmd` still does not "
+"prevent us from making use of `argument_precmd` or `argument_postcmd` if we "
+"need to. In particular, the former is good for checking custom, "
+"sophisticated conditions that should be met before performing the command "
+"itself. Using `argument_precmd` along with `argument_cmd` lets us logically "
+"separate the checks from the action."
+msgstr ""
+"Sobrescrever um método padrão com um `argument_cmd` personalizado ainda não "
+"nos impede de usar `argument_precmd` ou `argument_postcmd` se precisarmos. "
+"Em particular, o primeiro é bom para verificar condições personalizadas e "
+"sofisticadas que devem ser atendidas antes de executar o próprio comando. "
+"Usar `argument_precmd` juntamente com `argument_cmd` nos permite separar "
+"logicamente as verificações da ação."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:495
+msgid ""
+"Do not forget that you can cram any valid man:sh[1] expressions into the "
+"methods, pre-, and post-commands you define. Just invoking a function that "
+"makes the real job is a good style in most cases, but never let style limit "
+"your understanding of what is going on behind the curtain."
+msgstr ""
+"Não se esqueça de que você pode colocar qualquer expressão válida do "
+"man:sh[1] nos métodos, pre e pós comandos que você define. Invocar uma "
+"função que realiza o trabalho real é um bom estilo na maioria dos casos, mas "
+"nunca deixe o estilo limitar sua compreensão do que está acontecendo nos "
+"bastidores."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:498
+msgid ""
+"&#10128; If we would like to implement custom arguments, which can also be "
+"thought of as _commands_ to our script, we need to list them in "
+"`extra_commands` and provide methods to handle them."
+msgstr ""
+"&#10128; Se quisermos implementar argumentos personalizados, que também "
+"podem ser considerados como _comandos_ para o nosso script, precisamos listá-"
+"los em `extra_commands` e fornecer métodos para lidar com eles."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:506
+msgid ""
+"The `reload` command is special. On the one hand, it has a preset method in "
+"man:rc.subr[8]. On the other hand, `reload` is not offered by default. The "
+"reason is that not all daemons use the same reload mechanism and some have "
+"nothing to reload at all. So we need to ask explicitly that the builtin "
+"functionality be provided. We can do so via `extra_commands`."
+msgstr ""
+"O comando `reload` é especial. Por um lado, ele possui um método predefinido "
+"em man:rc.subr[8]. Por outro lado, `reload` não é oferecido por padrão. A "
+"razão é que nem todos os daemons usam o mesmo mecanismo de recarga e alguns "
+"não têm nada para recarregar. Portanto, precisamos pedir explicitamente que "
+"a funcionalidade integrada seja fornecida. Podemos fazer isso por meio de "
+"`extra_commands`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:510
+msgid ""
+"What do we get from the default method for `reload`? Quite often daemons "
+"reload their configuration upon reception of a signal - typically, SIGHUP. "
+"Therefore man:rc.subr[8] attempts to reload the daemon by sending a signal "
+"to it. The signal is preset to SIGHUP but can be customized via "
+"`sig_reload` if necessary."
+msgstr ""
+"O que recebemos do método padrão para `reload`? Muitas vezes, os daemons "
+"recarregam sua configuração após receber um sinal - geralmente, SIGHUP. "
+"Portanto, o man:rc.subr[8] tenta recarregar o daemon enviando um sinal para "
+"ele. O sinal é pré-definido como SIGHUP, mas pode ser personalizado via "
+"`sig_reload`, se necessário."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:515
+msgid ""
+"&#10129;&#9454; Our script supports two non-standard commands, `plugh` and "
+"`xyzzy`. We saw them listed in `extra_commands`, and now it is time to "
+"provide methods for them. The method for `xyzzy` is just inlined while that "
+"for `plugh` is implemented as the `mumbled_plugh` function."
+msgstr ""
+"&#10129;&#9454; O nosso script suporta dois comandos não padrão, `plugh` e "
+"`xyzzy`. Nós os vimos listados em `extra_commands`, e agora é hora de "
+"fornecer métodos para eles. O método para `xyzzy` é apenas inserido em linha "
+"enquanto que para `plugh` é implementado como a função `mumbled_plugh`."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:519
+msgid ""
+"Non-standard commands are not invoked during startup or shutdown. Usually "
+"they are for the system admin's convenience. They can also be used from "
+"other subsystems, e.g., man:devd[8] if specified in man:devd.conf[5]."
+msgstr ""
+"Comandos não padrão não são invocados durante a inicialização ou "
+"desligamento. Geralmente, eles são para a conveniência do administrador do "
+"sistema. Eles também podem ser usados em outros subsistemas, por exemplo, o "
+"man:devd[8] se especificados em man:devd.conf[5]."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:522
+msgid ""
+"The full list of available commands can be found in the usage line printed "
+"by man:rc.subr[8] when the script is invoked without arguments. For "
+"example, here is the usage line from the script under study:"
+msgstr ""
+"A lista completa de comandos disponíveis pode ser encontrada na linha de uso "
+"impressa pelo man:rc.subr[8] quando o script é invocado sem argumentos. Por "
+"exemplo, aqui está a linha de uso do script em estudo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:527
+#, no-wrap
+msgid ""
+"# /etc/rc.d/mumbled\n"
+"Usage: /etc/rc.d/mumbled [fast|force|one](start|stop|restart|rcvar|reload|plugh|xyzzy|status|poll)\n"
+msgstr ""
+"# /etc/rc.d/mumbled\n"
+"Usage: /etc/rc.d/mumbled "
+"[fast|force|one](start|stop|restart|rcvar|reload|plugh|xyzzy|status|poll)\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:534
+msgid ""
+"&#9453; A script can invoke its own standard or non-standard commands if "
+"needed. This may look similar to calling functions, but we know that "
+"commands and shell functions are not always the same thing. For instance, "
+"`xyzzy` is not implemented as a function here. In addition, there can be a "
+"pre-command and post-command, which should be invoked orderly. So the "
+"proper way for a script to run its own command is by means of man:rc."
+"subr[8], as shown in the example."
+msgstr ""
+"&#9453; Um script pode invocar seus próprios comandos padrão ou não-padrão, "
+"se necessário. Isso pode parecer semelhante a chamar funções, mas sabemos "
+"que comandos e funções do shell nem sempre são a mesma coisa. Por exemplo, "
+"`xyzzy` não é implementado como uma função aqui. Além disso, pode haver um "
+"pré-comando e um pós-comando, que devem ser invocados ordenadamente. "
+"Portanto, a maneira adequada para um script executar seu próprio comando é "
+"por meio do man:rc.subr[8], como mostrado no exemplo."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:540
+msgid ""
+"&#10130; A handy function named `checkyesno` is provided by man:rc.subr[8]. "
+"It takes a variable name as its argument and returns a zero exit code if and "
+"only if the variable is set to `YES`, or `TRUE`, or `ON`, or `1`, case "
+"insensitive; a non-zero exit code is returned otherwise. In the latter "
+"case, the function tests the variable for being set to `NO`, `FALSE`, `OFF`, "
+"or `0`, case insensitive; it prints a warning message if the variable "
+"contains anything else, i.e., junk."
+msgstr ""
+"&#10130; Uma função útil chamada `checkyesno` é fornecida pelo man:rc.subr[8]"
+". Ela recebe um nome de variável como argumento e retorna um código de saída "
+"zero se e somente se a variável estiver definida como `YES`, ou `TRUE`, ou "
+"`ON`, ou `1`, insensível a maiúsculas e minúsculas; um código de saída não-"
+"zero é retornado caso contrário. Neste último caso, a função testa se a "
+"variável está definida como `NO`, `FALSE`, `OFF` ou `0`, insensível a "
+"maiúsculas e minúsculas; ela imprime uma mensagem de aviso se a variável "
+"contiver qualquer outra coisa, ou seja, lixo."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:542
+msgid ""
+"Keep in mind that for man:sh[1] a zero exit code means true and a non-zero "
+"exit code means false."
+msgstr ""
+"Tenha em mente que para o man:sh[1], um código de saída zero significa "
+"verdadeiro e um código de saída não-zero significa falso."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:547
+msgid ""
+"The `checkyesno` function takes a __variable name__. Do not pass the "
+"expanded _value_ of a variable to it; it will not work as expected."
+msgstr ""
+"A função `checkyesno` recebe um __nome de variável__. Não passe o _valor "
+"expandido_ de uma variável para ela; isso não funcionará como esperado."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:549
+msgid "The following is the correct usage of `checkyesno`:"
+msgstr "Aqui está o uso correto de `checkyesno`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:555
+#, no-wrap
+msgid ""
+"if checkyesno mumbled_enable; then\n"
+" foo\n"
+"fi\n"
+msgstr ""
+"if checkyesno mumbled_enable; then\n"
+" foo\n"
+"fi\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:558
+msgid ""
+"On the contrary, calling `checkyesno` as shown below will not work - at "
+"least not as expected:"
+msgstr ""
+"Ao contrário, chamar `checkyesno` como mostrado abaixo não funcionará - pelo "
+"menos não como esperado:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:564
+#, no-wrap
+msgid ""
+"if checkyesno \"${mumbled_enable}\"; then\n"
+" foo\n"
+"fi\n"
+msgstr ""
+"if checkyesno \"${mumbled_enable}\"; then\n"
+" foo\n"
+"fi\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:569
+msgid ""
+"&#10131; [[rc-flags]]We can affect the flags to be passed to `$command` by "
+"modifying `rc_flags` in `$start_precmd`."
+msgstr ""
+"&#10131; [[rc-flags]]Podemos afetar as flags que serão passadas para "
+"`$command` modificando `rc_flags` em `$start_precmd`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:573
+msgid ""
+"&#9451; In certain cases we may need to emit an important message that "
+"should go to `syslog` as well. This can be done easily with the following "
+"man:rc.subr[8] functions: `debug`, `info`, `warn`, and `err`. The latter "
+"function then exits the script with the code specified."
+msgstr ""
+"&#9451; Em certos casos, podemos precisar emitir uma mensagem importante que "
+"também deve ser registrada no `syslog`. Isso pode ser feito facilmente com "
+"as seguintes funções do man:rc.subr[8]: `debug`, `info`, `warn` e `err`. "
+"Esta última função finaliza o script com o código especificado."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:577
+msgid ""
+"&#9452; The exit codes from methods and their pre-commands are not just "
+"ignored by default. If `argument_precmd` returns a non-zero exit code, the "
+"main method will not be performed. In turn, `argument_postcmd` will not be "
+"invoked unless the main method returns a zero exit code."
+msgstr ""
+"&#9452; Os códigos de saída dos métodos e seus pre-comandos não são apenas "
+"ignorados por padrão. Se `argument_precmd` retornar um código de saída "
+"diferente de zero, o método principal não será executado. Por sua vez, "
+"`argument_postcmd` não será chamado, a menos que o método principal retorne "
+"um código de saída igual a zero."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:581
+msgid ""
+"However, man:rc.subr[8] can be instructed from the command line to ignore "
+"those exit codes and invoke all commands anyway by prefixing an argument "
+"with `force`, as in `forcestart`."
+msgstr ""
+"Entretanto, é possível instruir o man:rc.subr[8] a ignorar esses códigos de "
+"saída e executar todos os comandos mesmo assim, adicionando um argumento com "
+"o prefixo `force`, como em `forcestart`."
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:584
+#, no-wrap
+msgid "Connecting a script to the rc.d framework"
+msgstr "Conectando um script ao framework rc.d"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:591
+msgid ""
+"After a script has been written, it needs to be integrated into [."
+"filename]#rc.d#. The crucial step is to install the script in [.filename]#/"
+"etc/rc.d# (for the base system) or [.filename]#/usr/local/etc/rc.d# (for "
+"ports). Both [.filename]#bsd.prog.mk# and [.filename]#bsd.port.mk# provide "
+"convenient hooks for that, and usually you do not have to worry about the "
+"proper ownership and mode. System scripts should be installed from [."
+"filename]#src/libexec/rc/rc.d# through the [.filename]#Makefile# found "
+"there. Port scripts can be installed using `USE_RC_SUBR` as described "
+"extref:{porters-handbook}[in the Porter's Handbook, rc-scripts]."
+msgstr ""
+"Depois que um script é escrito, ele precisa ser integrado ao [.filename]#rc."
+"d#. O passo crucial é instalar o script em [.filename]#/etc/rc.d# (para o "
+"sistema base) ou [.filename]#/usr/local/etc/rc.d# (para o ports). Tanto o [."
+"filename]#bsd.prog.mk# quanto o [.filename]#bsd.port.mk# fornecem ganchos "
+"convenientes para isso, e geralmente você não precisa se preocupar com a "
+"propriedade e o modo adequados. Os scripts do sistema devem ser instalados a "
+"partir de [.filename]#src/libexec/rc/rc.d# através do [.filename]#Makefile# "
+"encontrado lá. Scripts de ports podem ser instalados usando `USE_RC_SUBR` "
+"como descrito no extref:{porters-handbook}[Porter's Handbook, rc-scripts]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:596
+msgid ""
+"However, we should consider beforehand the place of our script in the system "
+"startup sequence. The service handled by our script is likely to depend on "
+"other services. For instance, a network daemon cannot function without the "
+"network interfaces and routing up and running. Even if a service seems to "
+"demand nothing, it can hardly start before the basic filesystems have been "
+"checked and mounted."
+msgstr ""
+"No entanto, devemos considerar antecipadamente o local do nosso script na "
+"sequência de inicialização do sistema. O serviço manipulado pelo nosso "
+"script provavelmente depende de outros serviços. Por exemplo, um daemon de "
+"rede não pode funcionar sem as interfaces de rede e o roteamento em "
+"funcionamento. Mesmo que um serviço pareça não exigir nada, dificilmente "
+"pode ser iniciado antes que os sistemas de arquivos básicos tenham sido "
+"verificados e montados."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:602
+msgid ""
+"We mentioned man:rcorder[8] already. Now it is time to have a close look at "
+"it. In a nutshell, man:rcorder[8] takes a set of files, examines their "
+"contents, and prints a dependency-ordered list of files from the set to "
+"`stdout`. The point is to keep dependency information _inside_ the files so "
+"that each file can speak for itself only. A file can specify the following "
+"information:"
+msgstr ""
+"Nós já mencionamos o man:rcorder[8]. Agora é hora de dar uma olhada mais de "
+"perto nele. Em poucas palavras, o man:rcorder[8] pega um conjunto de "
+"arquivos, examina seus conteúdos e imprime uma lista ordenada por "
+"dependência dos arquivos do conjunto no `stdout`. O objetivo é manter as "
+"informações de dependência _dentro_ dos arquivos, de modo que cada arquivo "
+"possa falar apenas por si mesmo. Um arquivo pode especificar as seguintes "
+"informações:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:604
+msgid ""
+"the names of the \"conditions\" (which means services to us) it __provides__;"
+msgstr ""
+"os nomes das \"condições\" (ou seja, serviços para nós) que ele __fornece__;"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:605
+msgid "the names of the \"conditions\" it __requires__;"
+msgstr "os nomes das \"condições\" que ele __requer__;"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:606
+msgid "the names of the \"conditions\" this file should run __before__;"
+msgstr ""
+"os nomes das \"condições\" que este arquivo deve ser executado __antes__;"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:607
+msgid ""
+"additional _keywords_ that can be used to select a subset from the whole set "
+"of files (man:rcorder[8] can be instructed via options to include or omit "
+"the files having particular keywords listed.)"
+msgstr ""
+"palavras-chave adicionais que podem ser usadas para selecionar um "
+"subconjunto do conjunto completo de arquivos (man:rcorder[8] pode ser "
+"instruído via opções para incluir ou omitir os arquivos que possuem "
+"determinadas palavras-chave listadas.)"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:612
+msgid ""
+"It is no surprise that man:rcorder[8] can handle only text files with a "
+"syntax close to that of man:sh[1]. That is, special lines understood by man:"
+"rcorder[8] look like man:sh[1] comments. The syntax of such special lines "
+"is rather rigid to simplify their processing. See man:rcorder[8] for "
+"details."
+msgstr ""
+"Não é surpresa que o man:rcorder[8] possa lidar apenas com arquivos de texto "
+"com uma sintaxe próxima à do man:sh[1]. Ou seja, as linhas especiais "
+"entendidas pelo man:rcorder[8] se parecem com comentários do man:sh[1]. A "
+"sintaxe dessas linhas especiais é bastante rígida para simplificar seu "
+"processamento. Consulte man:rcorder[8] para obter detalhes."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:615
+msgid ""
+"Besides using man:rcorder[8] special lines, a script can insist on its "
+"dependency upon another service by just starting it forcibly. This can be "
+"needed when the other service is optional and will not start by itself "
+"because the system admin has disabled it mistakenly in man:rc.conf[5]."
+msgstr ""
+"Além de usar as linhas especiais entendidas pelo man:rcorder[8], um script "
+"pode exigir sua dependência de outro serviço simplesmente iniciando-o "
+"forçadamente. Isso pode ser necessário quando o outro serviço é opcional e "
+"não iniciará por si só porque o administrador do sistema o desativou por "
+"engano em man:rc.conf[5]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:617
+msgid ""
+"With this general knowledge in mind, let us consider the simple daemon "
+"script enhanced with dependency stuff:"
+msgstr ""
+"Com este conhecimento geral em mente, vamos considerar o simples script "
+"daemon aprimorado com coisas de dependência:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:626
+#, no-wrap
+msgid ""
+"# PROVIDE: mumbled oldmumble <.>\n"
+"# REQUIRE: DAEMON cleanvar frotz <.>\n"
+"# BEFORE: LOGIN <.>\n"
+"# KEYWORD: nojail shutdown <.>\n"
+msgstr ""
+"# PROVIDE: mumbled oldmumble <.>\n"
+"# REQUIRE: DAEMON cleanvar frotz <.>\n"
+"# BEFORE: LOGIN <.>\n"
+"# KEYWORD: nojail shutdown <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:634
+#, no-wrap
+msgid ""
+"command=\"/usr/sbin/${name}\"\n"
+"start_precmd=\"${name}_prestart\"\n"
+msgstr ""
+"command=\"/usr/sbin/${name}\"\n"
+"start_precmd=\"${name}_prestart\"\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:643
+#, no-wrap
+msgid ""
+"mumbled_prestart()\n"
+"{\n"
+"\tif ! checkyesno frotz_enable && \\\n"
+"\t ! /etc/rc.d/frotz forcestatus 1>/dev/null 2>&1; then\n"
+"\t\tforce_depend frotz || return 1 <.>\n"
+"\tfi\n"
+"\treturn 0\n"
+"}\n"
+msgstr ""
+"mumbled_prestart()\n"
+"{\n"
+"\tif ! checkyesno frotz_enable && \\\n"
+"\t ! /etc/rc.d/frotz forcestatus 1>/dev/null 2>&1; then\n"
+"\t\tforce_depend frotz || return 1 <.>\n"
+"\tfi\n"
+"\treturn 0\n"
+"}\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:649
+msgid "As before, detailed analysis follows:"
+msgstr "Como antes, a análise detalhada segue:"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:652
+msgid ""
+"&#10122; That line declares the names of \"conditions\" our script "
+"provides. Now other scripts can record a dependency on our script by those "
+"names."
+msgstr ""
+"&#10122; Essa linha declara os nomes das \"condições\" que nosso script "
+"fornece. Agora, outros scripts podem registrar uma dependência em nosso "
+"script por esses nomes."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:657
+msgid ""
+"Usually a script specifies a single condition provided. However, nothing "
+"prevents us from listing several conditions there, e.g., for compatibility "
+"reasons."
+msgstr ""
+"Geralmente, um script especifica uma única condição fornecida. No entanto, "
+"nada nos impede de listar várias condições, por exemplo, por razões de "
+"compatibilidade."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:659
+msgid ""
+"In any case, the name of the main, or the only, `PROVIDE:` condition should "
+"be the same as `${name}`."
+msgstr ""
+"Em qualquer caso, o nome da condição principal, ou única, `PROVIDE:` deve "
+"ser o mesmo que `${name}`."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:663
+msgid ""
+"&#10123;&#10124; So our script indicates which \"conditions\" provided by "
+"other scripts it depends on. According to the lines, our script asks man:"
+"rcorder[8] to put it after the script(s) providing [.filename]#DAEMON# and [."
+"filename]#cleanvar#, but before that providing [.filename]#LOGIN#."
+msgstr ""
+"&#10123;&#10124; Então, nosso script indica em quais \"condições\" "
+"fornecidas por outros scripts ele depende. De acordo com as linhas, nosso "
+"script pede para o man:rcorder[8] colocá-lo após o(s) script(s) fornecendo o "
+"[.filename]#DAEMON# e o [.filename]#cleanvar#, mas antes daquele que fornece "
+"[.filename]#LOGIN#."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:669
+msgid ""
+"The `BEFORE:` line should not be abused to work around an incomplete "
+"dependency list in the other script. The appropriate case for using `BEFORE:"
+"` is when the other script does not care about ours, but our script can do "
+"its task better if run before the other one. A typical real-life example is "
+"the network interfaces vs. the firewall: While the interfaces do not depend "
+"on the firewall in doing their job, the system security will benefit from "
+"the firewall being ready before there is any network traffic."
+msgstr ""
+"A linha `BEFORE:` não deve ser usada para contornar uma lista de "
+"dependências incompleta em outro script. O caso apropriado para usar "
+"`BEFORE:` é quando o outro script não se importa com o nosso, mas nosso "
+"script pode executar sua tarefa melhor se for executado antes do outro. Um "
+"exemplo típico da vida real é a relação entre as interfaces de rede e o "
+"firewall: embora as interfaces não dependam do firewall para fazer o "
+"trabalho delas, a segurança do sistema se beneficiará se o firewall estiver "
+"pronto antes de haver qualquer tráfego de rede."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:673
+msgid ""
+"Besides conditions corresponding to a single service each, there are meta-"
+"conditions and their \"placeholder\" scripts used to ensure that certain "
+"groups of operations are performed before others. These are denoted by [."
+"filename]#UPPERCASE# names. Their list and purposes can be found in man:"
+"rc[8]."
+msgstr ""
+"Além das condições correspondentes a um único serviço, existem meta-"
+"condições e seus scripts \"placeholder\" usados para garantir que certos "
+"grupos de operações sejam executados antes de outros. Estes são denotados "
+"por nomes em [.filename]#UPPERCASE#. Sua lista e propósitos podem ser "
+"encontrados no manual man:rc[8]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:679
+msgid ""
+"Keep in mind that putting a service name in the `REQUIRE:` line does not "
+"guarantee that the service will actually be running by the time our script "
+"starts. The required service may fail to start or just be disabled in man:"
+"rc.conf[5]. Obviously, man:rcorder[8] cannot track such details, and man:"
+"rc[8] will not do that either. Consequently, the application started by our "
+"script should be able to cope with any required services being unavailable. "
+"In certain cases, we can help it as discussed <<forcedep, below>>"
+msgstr ""
+"Lembre-se de que colocar o nome de um serviço na linha `REQUIRE:` não "
+"garante que o serviço realmente estará em execução no momento em que o "
+"script começar. O serviço necessário pode falhar ao iniciar ou simplesmente "
+"ser desativado em man:rc.conf[5]. Obviamente, o man:rcorder[8] não pode "
+"controlar esses detalhes e o man:rc[8] também não fará isso. "
+"Consequentemente, a aplicação iniciada pelo nosso script deve ser capaz de "
+"lidar com qualquer serviço necessário que esteja indisponível. Em certos "
+"casos, podemos ajudá-lo conforme discutido <<forcedep, abaixo>>"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:684
+msgid ""
+"[[keywords]]&#10125; As we remember from the above text, man:rcorder[8] "
+"keywords can be used to select or leave out some scripts. Namely any man:"
+"rcorder[8] consumer can specify through `-k` and `-s` options which keywords "
+"are on the \"keep list\" and \"skip list\", respectively. From all the "
+"files to be dependency sorted, man:rcorder[8] will pick only those having a "
+"keyword from the keep list (unless empty) and not having a keyword from the "
+"skip list."
+msgstr ""
+"[[keywords]]&#10125; Como lembramos do texto acima, as palavras-chave do "
+"man:rcorder[8] podem ser usadas para selecionar ou deixar de fora alguns "
+"scripts. Qualquer consumidor do man:rcorder[8] pode especificar, através das "
+"opções `-k` e `-s`, quais palavras-chave estarão na \"lista de manutenção\" "
+"e na \"lista de exclusão\", respectivamente. De todos os arquivos a serem "
+"ordenados por dependência, man:rcorder[8] escolherá apenas aqueles que "
+"tiverem uma palavra-chave da lista de manutenção (a menos que esteja vazia) "
+"e que não tiverem uma palavra-chave da lista de exclusão."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:687
+msgid ""
+"In FreeBSD, man:rcorder[8] is used by [.filename]#/etc/rc# and [.filename]#/"
+"etc/rc.shutdown#. These two scripts define the standard list of FreeBSD [."
+"filename]#rc.d# keywords and their meanings as follows:"
+msgstr ""
+"No FreeBSD, o man:rcorder[8] é usado por [.filename]#/etc/rc# e [.filename]#/"
+"etc/rc.shutdown#. Esses dois scripts definem a lista padrão de palavras-"
+"chaves do FreeBSD [.filename]#rc.d# e seus significados da seguinte forma:"
+
+#. type: Labeled list
+#: documentation/content/en/articles/rc-scripting/_index.adoc:688
+#, no-wrap
+msgid "nojail"
+msgstr "nojail"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:690
+msgid ""
+"The service is not for man:jail[8] environment. The automatic startup and "
+"shutdown procedures will ignore the script if inside a jail."
+msgstr ""
+"O serviço não é para ambiente man:jail[8]. Os procedimentos automáticos de "
+"inicialização e desligamento ignorarão o script se estiver dentro de uma "
+"jail."
+
+#. type: Labeled list
+#: documentation/content/en/articles/rc-scripting/_index.adoc:691
+#, no-wrap
+msgid "nostart"
+msgstr "nostart"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:694
+msgid ""
+"The service is to be started manually or not started at all. The automatic "
+"startup procedure will ignore the script. In conjunction with the [."
+"filename]#shutdown# keyword, this can be used to write scripts that do "
+"something only at system shutdown."
+msgstr ""
+"O serviço deve ser iniciado manualmente ou não iniciado de forma alguma. O "
+"procedimento de inicialização automático ignorará o script. Em conjunto com "
+"a palavra-chave [.filename]#shutdown#, isso pode ser usado para escrever "
+"scripts que fazem algo apenas no desligamento do sistema."
+
+#. type: Labeled list
+#: documentation/content/en/articles/rc-scripting/_index.adoc:695
+#, no-wrap
+msgid "shutdown"
+msgstr "shutdown"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:696
+msgid ""
+"This keyword is to be listed __explicitly__ if the service needs to be "
+"stopped before system shutdown."
+msgstr ""
+"Este palavra-chave deve ser listada de forma __explícita__ se o serviço "
+"precisa ser parado antes do desligamento do sistema."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:709
+msgid ""
+"When the system is going to shut down, [.filename]#/etc/rc.shutdown# runs. "
+"It assumes that most [.filename]#rc.d# scripts have nothing to do at that "
+"time. Therefore [.filename]#/etc/rc.shutdown# selectively invokes [."
+"filename]#rc.d# scripts with the [.filename]#shutdown# keyword, effectively "
+"ignoring the rest of the scripts. For even faster shutdown, [.filename]#/"
+"etc/rc.shutdown# passes the [.filename]#faststop# command to the scripts it "
+"runs so that they skip preliminary checks, e.g., the pidfile check. As "
+"dependent services should be stopped before their prerequisites, [."
+"filename]#/etc/rc.shutdown# runs the scripts in reverse dependency order. "
+"If writing a real [.filename]#rc.d# script, you should consider whether it "
+"is relevant at system shutdown time. E.g., if your script does its work in "
+"response to the [.filename]#start# command only, then you need not to "
+"include this keyword. However, if your script manages a service, it is "
+"probably a good idea to stop it before the system proceeds to the final "
+"stage of its shutdown sequence described in man:halt[8]. In particular, a "
+"service should be stopped explicitly if it needs considerable time or "
+"special actions to shut down cleanly. A typical example of such a service "
+"is a database engine."
+msgstr ""
+"Quando o sistema está prestes a desligar, o arquivo [.filename]#/etc/rc."
+"shutdown# é executado. Ele assume que a maioria dos scripts [.filename]#rc.d#"
+" não tem nada a fazer nesse momento. Portanto, o [.filename]#/etc/rc."
+"shutdown# invoca seletivamente scripts [.filename]#rc.d# com a palavra-chave "
+"[.filename]#shutdown#, ignorando efetivamente o restante dos scripts. Para "
+"desligamento ainda mais rápido, o [.filename]#/etc/rc.shutdown# passa o "
+"comando [.filename]#faststop# para os scripts que executa para que eles "
+"pulem verificações preliminares, como a verificação do pidfile. Como os "
+"serviços dependentes devem ser interrompidos antes de suas dependências, o [."
+"filename]#/etc/rc.shutdown# executa os scripts em ordem de dependência "
+"reversa. Se você está escrevendo um script [.filename]#rc.d# real, deve "
+"considerar se ele é relevante no momento do desligamento do sistema. Por "
+"exemplo, se o seu script faz seu trabalho apenas em resposta ao comando [."
+"filename]#start#, então você não precisa incluir essa palavra-chave. No "
+"entanto, se o seu script gerencia um serviço, é provavelmente uma boa ideia "
+"pará-lo antes que o sistema prossiga para o estágio final de sua sequência "
+"de desligamento descrita em man:halt[8]. Em particular, um serviço deve ser "
+"interrompido explicitamente se precisar de tempo considerável ou ações "
+"especiais para ser desligado corretamente. Um exemplo típico desse tipo de "
+"serviço é um mecanismo de banco de dados."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:713
+msgid ""
+"[[forcedep]]&#10126; To begin with, `force_depend` should be used with much "
+"care. It is generally better to revise the hierarchy of configuration "
+"variables for your [.filename]#rc.d# scripts if they are interdependent."
+msgstr ""
+"[[forcedep]] &#10126; Em primeiro lugar, `force_depend` deve ser usado com "
+"muito cuidado. Geralmente, é melhor revisar a hierarquia das variáveis de "
+"configuração para seus scripts [.filename]#rc.d# se eles são "
+"interdependentes."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:722
+msgid ""
+"If you still cannot do without `force_depend`, the example offers an idiom "
+"of how to invoke it conditionally. In the example, our `mumbled` daemon "
+"requires that another one, `frotz`, be started in advance. However, `frotz` "
+"is optional, too; and man:rcorder[8] knows nothing about such details. "
+"Fortunately, our script has access to all man:rc.conf[5] variables. If "
+"`frotz_enable` is true, we hope for the best and rely on [.filename]#rc.d# "
+"to have started `frotz`. Otherwise we forcibly check the status of "
+"`frotz`. Finally, we enforce our dependency on `frotz` if it is found to be "
+"not running. A warning message will be emitted by `force_depend` because it "
+"should be invoked only if a misconfiguration has been detected."
+msgstr ""
+"Se ainda assim você não puder abrir mão do `force_depend`, o exemplo oferece "
+"um exemplo de como invocá-lo condicionalmente. No exemplo, nosso daemon "
+"`mumbled` requer que outro daemon, `frotz`, seja iniciado antecipadamente. "
+"No entanto, `frotz` também é opcional; e o man:rcorder[8] não conhece esses "
+"detalhes. Felizmente, nosso script tem acesso a todas as variáveis de man:rc."
+"conf[5]. Se `frotz_enable` for verdadeiro, esperamos o melhor e confiamos no "
+"[.filename]#rc.d# para ter iniciado `frotz`. Caso contrário, verificamos "
+"forçadamente o status de `frotz`. Finalmente, impomos nossa dependência em "
+"`frotz` se ele não estiver em execução. Uma mensagem de aviso será emitida "
+"por `force_depend`, pois ele só deve ser invocado se uma configuração "
+"incorreta for detectada."
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:724
+#, no-wrap
+msgid "Giving more flexibility to an rc.d script"
+msgstr "Dando mais flexibilidade a um script rc.d"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:733
+msgid ""
+"When invoked during startup or shutdown, an [.filename]#rc.d# script is "
+"supposed to act on the entire subsystem it is responsible for. E.g., [."
+"filename]#/etc/rc.d/netif# should start or stop all network interfaces "
+"described by man:rc.conf[5]. Either task can be uniquely indicated by a "
+"single command argument such as `start` or `stop`. Between startup and "
+"shutdown, [.filename]#rc.d# scripts help the admin to control the running "
+"system, and it is when the need for more flexibility and precision arises. "
+"For instance, the admin may want to add the settings of a new network "
+"interface to man:rc.conf[5] and then to start it without interfering with "
+"the operation of the existing interfaces. Next time the admin may need to "
+"shut down a single network interface. In the spirit of the command line, "
+"the respective [.filename]#rc.d# script calls for an extra argument, the "
+"interface name."
+msgstr ""
+"Quando invocado durante a inicialização ou desligamento, um script [."
+"filename]#rc.d# deve agir em todo o subsistema pelo qual é responsável. Por "
+"exemplo, o [.filename]#/etc/rc.d/netif# deve iniciar ou parar todas as "
+"interfaces de rede descritas em man:rc.conf[5]. Cada tarefa pode ser "
+"indicada por um único argumento de comando, como `start` ou `stop`. Entre a "
+"inicialização e o desligamento, os scripts [.filename]#rc.d# ajudam o "
+"administrador a controlar o sistema em execução e é quando surge a "
+"necessidade de mais flexibilidade e precisão. Por exemplo, o administrador "
+"pode querer adicionar as configurações de uma nova interface de rede em "
+"man:rc.conf[5] e, em seguida, iniciá-la sem interferir na operação das "
+"interfaces existentes. Na próxima vez, o administrador pode precisar "
+"desligar uma única interface de rede. Para facilitar o uso na linha de "
+"comando, o respectivo script [.filename]#rc.d# pede um argumento extra, o "
+"nome da interface."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:736
+msgid ""
+"Fortunately, man:rc.subr[8] allows for passing any number of arguments to "
+"script's methods (within the system limits). Due to that, the changes in "
+"the script itself can be minimal."
+msgstr ""
+"Felizmente, o man:rc.subr[8] permite passar qualquer número de argumentos "
+"para os métodos do script (dentro dos limites do sistema). Devido a isso, as "
+"mudanças no próprio script podem ser mínimas."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:741
+msgid ""
+"How can man:rc.subr[8] gain access to the extra command-line arguments. "
+"Should it just grab them directly? Not by any means. Firstly, an man:sh[1] "
+"function has no access to the positional parameters of its caller, but man:"
+"rc.subr[8] is just a sack of such functions. Secondly, the good manner of [."
+"filename]#rc.d# dictates that it is for the main script to decide which "
+"arguments are to be passed to its methods."
+msgstr ""
+"Como o man:rc.subr[8] pode ter acesso aos argumentos adicionais da linha de "
+"comando? Ele deve simplesmente pegá-los diretamente? De maneira alguma! Em "
+"primeiro lugar, uma função do man:sh[1] não tem acesso aos parâmetros "
+"posicionais de quem a chamou, mas o man:rc.subr[8] é apenas um conjunto "
+"dessas funções. Em segundo lugar, a boa prática do [.filename]#rc.d# dita "
+"que é responsabilidade do script principal decidir quais argumentos devem "
+"ser passados para seus métodos."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:745
+msgid ""
+"So the approach adopted by man:rc.subr[8] is as follows: `run_rc_command` "
+"passes on all its arguments but the first one to the respective method "
+"verbatim. The first, omitted, argument is the name of the method itself: "
+"`start`, `stop`, etc. It will be shifted out by `run_rc_command`, so what "
+"is `$2` in the original command line will be presented as `$1` to the "
+"method, and so on."
+msgstr ""
+"Portanto, a abordagem adotada pelo man:rc.subr[8] é a seguinte: "
+"`run_rc_command` passa todos os seus argumentos, exceto o primeiro, ao "
+"respectivo método sem alterações. O primeiro argumento omitido é o nome do "
+"método em si: `start`, `stop`, etc. Ele será removido por `run_rc_command`, "
+"então o que é `$2` na linha de comando original será apresentado como `$1` "
+"para o método, e assim por diante."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:748
+msgid ""
+"To illustrate this opportunity, let us modify the primitive dummy script so "
+"that its messages depend on the additional arguments supplied. Here we go:"
+msgstr ""
+"Para ilustrar essa oportunidade, vamos modificar o script fictício primitivo "
+"para que suas mensagens dependam dos argumentos adicionais fornecidos. Aqui "
+"vamos nós:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:760
+#, no-wrap
+msgid ""
+"name=\"dummy\"\n"
+"start_cmd=\"${name}_start\"\n"
+"stop_cmd=\":\"\n"
+"kiss_cmd=\"${name}_kiss\"\n"
+"extra_commands=\"kiss\"\n"
+msgstr ""
+"name=\"dummy\"\n"
+"start_cmd=\"${name}_start\"\n"
+"stop_cmd=\":\"\n"
+"kiss_cmd=\"${name}_kiss\"\n"
+"extra_commands=\"kiss\"\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:769
+#, no-wrap
+msgid ""
+"dummy_start()\n"
+"{\n"
+" if [ $# -gt 0 ]; then <.>\n"
+" echo \"Greeting message: $*\"\n"
+" else\n"
+" echo \"Nothing started.\"\n"
+" fi\n"
+"}\n"
+msgstr ""
+"dummy_start()\n"
+"{\n"
+" if [ $# -gt 0 ]; then <.>\n"
+" echo \"Greeting message: $*\"\n"
+" else\n"
+" echo \"Nothing started.\"\n"
+" fi\n"
+"}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:785
+#, no-wrap
+msgid ""
+"dummy_kiss()\n"
+"{\n"
+" echo -n \"A ghost gives you a kiss\"\n"
+" if [ $# -gt 0 ]; then <.>\n"
+" echo -n \" and whispers: $*\"\n"
+" fi\n"
+" case \"$*\" in\n"
+" *[.!?])\n"
+" echo\n"
+" ;;\n"
+" *)\n"
+" echo .\n"
+" ;;\n"
+" esac\n"
+"}\n"
+msgstr ""
+"dummy_kiss()\n"
+"{\n"
+" echo -n \"A ghost gives you a kiss\"\n"
+" if [ $# -gt 0 ]; then <.>\n"
+" echo -n \" and whispers: $*\"\n"
+" fi\n"
+" case \"$*\" in\n"
+" *[.!?])\n"
+" echo\n"
+" ;;\n"
+" *)\n"
+" echo .\n"
+" ;;\n"
+" esac\n"
+"}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:788
+#, no-wrap
+msgid ""
+"load_rc_config $name\n"
+"run_rc_command \"$@\" <.>\n"
+msgstr ""
+"load_rc_config $name\n"
+"run_rc_command \"$@\" <.>\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:791
+msgid "What essential changes can we notice in the script?"
+msgstr "Quais mudanças essenciais podemos notar no script?"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:796
+msgid ""
+"&#10122; All arguments you type after `start` can end up as positional "
+"parameters to the respective method. We can use them in any way according "
+"to our task, skills, and fancy. In the current example, we just pass all of "
+"them to man:echo[1] as one string in the next line - note `$*` within the "
+"double quotes. Here is how the script can be invoked now:"
+msgstr ""
+"&#10122; Todos os argumentos que você digita após `start` podem acabar como "
+"parâmetros posicionais para o respectivo método. Podemos usá-los de qualquer "
+"maneira de acordo com nossa tarefa, habilidades e gosto. No exemplo atual, "
+"simplesmente passamos todos eles para o man:echo[1] como uma única string na "
+"próxima linha - observe o `$*` dentro das aspas duplas. Aqui está como o "
+"script pode ser invocado agora:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:801
+#, no-wrap
+msgid ""
+"# /etc/rc.d/dummy start\n"
+"Nothing started.\n"
+msgstr ""
+"# /etc/rc.d/dummy start\n"
+"Nothing started.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:804
+#, no-wrap
+msgid ""
+"# /etc/rc.d/dummy start Hello world!\n"
+"Greeting message: Hello world!\n"
+msgstr ""
+"# /etc/rc.d/dummy start Hello world!\n"
+"Greeting message: Hello world!\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:808
+msgid ""
+"&#10123; The same applies to any method our script provides, not only to a "
+"standard one. We have added a custom method named `kiss`, and it can take "
+"advantage of the extra arguments not less than `start` does. E.g.:"
+msgstr ""
+"&#10123; O mesmo se aplica a qualquer método que nosso script ofereça, não "
+"apenas a um padrão. Adicionamos um método personalizado chamado `kiss`, e "
+"ele pode tirar proveito dos argumentos extras da mesma forma que o `start` "
+"pode. Por exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:813
+#, no-wrap
+msgid ""
+"# /etc/rc.d/dummy kiss\n"
+"A ghost gives you a kiss.\n"
+msgstr ""
+"# /etc/rc.d/dummy kiss\n"
+"A ghost gives you a kiss.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:816
+#, no-wrap
+msgid ""
+"# /etc/rc.d/dummy kiss Once I was Etaoin Shrdlu...\n"
+"A ghost gives you a kiss and whispers: Once I was Etaoin Shrdlu...\n"
+msgstr ""
+"# /etc/rc.d/dummy kiss Once I was Etaoin Shrdlu...\n"
+"A ghost gives you a kiss and whispers: Once I was Etaoin Shrdlu...\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:819
+msgid ""
+"&#10124; If we want just to pass all extra arguments to any method, we can "
+"merely substitute `\"$@\"` for `\"$1\"` in the last line of our script, "
+"where we invoke `run_rc_command`."
+msgstr ""
+"&#10124; Se quisermos apenas passar todos os argumentos extras para qualquer "
+"método, podemos simplesmente substituir `\"$1\"` por `\"$@\"` na última "
+"linha do nosso script, onde invocamos `run_rc_command`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:825
+msgid ""
+"An man:sh[1] programmer ought to understand the subtle difference between `"
+"$*` and `$@` as the ways to designate all positional parameters. For its in-"
+"depth discussion, refer to a good handbook on man:sh[1] scripting. _Do not_ "
+"use the expressions until you fully understand them because their misuse "
+"will result in buggy and insecure scripts."
+msgstr ""
+"Um programador em man:sh[1] deve entender a diferença sutil entre `$*` e `$@`"
+" como formas de designar todos os parâmetros posicionais. Para uma discussão "
+"aprofundada, consulte um bom manual de man:sh[1]. Não use essas expressões "
+"até entender completamente o seu uso, pois o uso incorreto pode resultar em "
+"scripts com bugs e inseguros."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:832
+msgid ""
+"Currently `run_rc_command` may have a bug that prevents it from keeping the "
+"original boundaries between arguments. That is, arguments with embedded "
+"whitespace may not be processed correctly. The bug stems from `$*` misuse."
+msgstr ""
+"Atualmente, o `run_rc_command` pode ter um bug que o impede de manter as "
+"fronteiras originais entre os argumentos. Ou seja, argumentos com espaços em "
+"branco embutidos podem não ser processados corretamente. O bug decorre do "
+"uso inadequado de `$*`."
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:835
+#, no-wrap
+msgid "Further reading"
+msgstr "Leitura adicional"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:839
+msgid ""
+"[[lukem]]http://www.mewburn.net/luke/papers/rc.d.pdf[The original article by "
+"Luke Mewburn] offers a general overview of [.filename]#rc.d# and detailed "
+"rationale for its design decisions. It provides insight on the whole [."
+"filename]#rc.d# framework and its place in a modern BSD operating system."
+msgstr ""
+"[[lukem]]http://www.mewburn.net/luke/papers/rc.d.pdf[O artigo original de "
+"Luke Mewburn] oferece uma visão geral do [.filename]#rc.d# e uma "
+"justificativa detalhada para suas decisões de design. Ele fornece uma "
+"compreensão do quadro geral do [.filename]#rc.d# e seu lugar em um sistema "
+"operacional BSD moderno."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:842
+msgid ""
+"[[manpages]]The manual pages man:rc[8], man:rc.subr[8], and man:rcorder[8] "
+"document the [.filename]#rc.d# components in great detail. You cannot fully "
+"use the [.filename]#rc.d# power without studying the manual pages and "
+"referring to them while writing your own scripts."
+msgstr ""
+"[[manpages]]As páginas do manual para man:rc[8], man:rc.subr[8] e "
+"man:rcorder[8] documentam em detalhes os componentes do sistema [."
+"filename]#rc.d#. Você não pode aproveitar completamente o poder do [."
+"filename]#rc.d# sem estudar as páginas do manual e consultá-las ao escrever "
+"seus próprios scripts."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:846
+msgid ""
+"The major source of working, real-life examples is [.filename]#/etc/rc.d# in "
+"a live system. Its contents are easy and pleasant to read because most "
+"rough corners are hidden deep in man:rc.subr[8]. Keep in mind though that "
+"the [.filename]#/etc/rc.d# scripts were not written by angels, so they might "
+"suffer from bugs and suboptimal design decisions. Now you can improve them!"
+msgstr ""
+"A principal fonte de exemplos práticos e funcionais é o diretório [."
+"filename]#/etc/rc.d# em um sistema em operação. O seu conteúdo é fácil e "
+"agradável de ler, pois a maioria das partes difíceis está escondida "
+"profundamente em man:rc.subr[8]. No entanto, tenha em mente que os scripts "
+"em [.filename]#/etc/rc.d# não foram escritos por anjos, então eles podem "
+"conter bugs e decisões de design subótimas. Agora você pode melhorá-los!"
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/remote-install/_index.adoc b/documentation/content/pt-br/articles/remote-install/_index.adoc
index b6d711f019..ceb3e1762e 100644
--- a/documentation/content/pt-br/articles/remote-install/_index.adoc
+++ b/documentation/content/pt-br/articles/remote-install/_index.adoc
@@ -1,13 +1,16 @@
---
-title: Instalação Remota do Sistema Operacional FreeBSD Sem um Console Remoto
authors:
- - author: Daniel Gerzo
+ -
+ author: 'Daniel Gerzo'
email: danger@FreeBSD.org
-copyright: 2008 Projeto de Documentação do FreeBSD
+copyright: '2008-2021 The FreeBSD Documentation Project'
+description: 'Este documento descreve a instalação remota do sistema operacional FreeBSD quando o console do sistema remoto não está disponível'
+tags: ["Remote", "Installation", "FreeBSD"]
+title: 'Instalação Remota do Sistema Operacional FreeBSD sem um Console Remoto'
trademarks: ["freebsd", "general"]
---
-= Instalação Remota do Sistema Operacional FreeBSD Sem um Console Remoto
+= Instalação Remota do Sistema Operacional FreeBSD sem um Console Remoto
:doctype: article
:toc: macro
:toclevels: 1
@@ -41,7 +44,7 @@ endif::[]
[.abstract-title]
Resumo
-Este artigo documenta a instalação remota do sistema operacional FreeBSD quando o console do sistema remoto não está disponível. A idéia principal por trás deste artigo é o resultado de uma colaboração com Martin Matuska mailto:mm@FreeBSD.org[mm@FreeBSD.org] com informações valiosas fornecidas por Paweł Jakub Dawidek mailto:pjd@FreeBSD.org[pjd@FreeBSD.org].
+Este artigo documenta a instalação remota do sistema operacional FreeBSD quando o console do sistema remoto não está disponível. A ideia principal por trás deste artigo é o resultado de uma colaboração com `{mm}`, com valiosa contribuição fornecida por `{pjd}`.
'''
@@ -50,22 +53,24 @@ toc::[]
[[background]]
== Background
-Existem muitos provedores de hospedagem de servidores no mundo, mas poucos deles oferecem suporte oficial ao FreeBSD. Eles geralmente fornecem suporte para uma distribuição Linux(R) para ser instalada nos servidores que eles oferecem.
+Existem muitos provedores de hospedagem de servidores no mundo, mas muito poucos deles oferecem suporte oficial para o FreeBSD. Geralmente, eles fornecem suporte para uma distribuição Linux(R) a ser instalada nos servidores que oferecem.
-Em alguns casos, estas empresas instalarão sua distribuição Linux(R) preferida se você solicitá-la. Usando esta opção, tentaremos instalar o FreeBSD. Em outros casos, eles podem oferecer um sistema de recuperação para ser usado em uma emergência. É possível usá-la para os nossos propósitos também.
+Em alguns casos, essas empresas podem instalar a distribuição FreeBSD se você solicitar, mesmo que normalmente só ofereçam suporte para distribuições Linux(R). Em outros casos, elas podem oferecer um sistema de resgate que seria usado em uma emergência. É possível usar isso para nossos fins também.
-Este artigo aborda as etapas básicas de instalação e configuração necessárias para inicializar uma instalação remota do FreeBSD com suporte para RAID-1 e ZFS.
+Este artigo cobre os passos básicos de instalação e configuração necessários para inicializar uma instalação remota do FreeBSD com capacidades RAID-1 e ZFS.
[[intro]]
== Introdução
-Esta seção resumirá o objetivo deste artigo e explicará melhor o que é tratado aqui. As instruções incluídas neste artigo beneficiarão aqueles usuários que usam serviços fornecidos por provedores de colocation que não suportam o FreeBSD.
+Esta seção resumirá o objetivo deste artigo e explicará melhor o que é abordado aqui. As instruções incluídas neste artigo beneficiarão aqueles que utilizam serviços fornecidos por provedores de colocation que não suportam o FreeBSD.
[.procedure]
-. Como mencionamos na seção <<background>>, muitas das empresas de hospedagem de servidores renomadas fornecem algum tipo de sistema de recuperação, que é inicializado a partir de sua LAN e acessível por SSH. Eles normalmente fornecem esse suporte para ajudar seus clientes a consertar sistemas operacionais quebrados. Como este artigo explicará, é possível instalar o FreeBSD com a ajuda destes sistemas de recuperação.
+====
+. Como mencionamos na seção <<background>>, muitas das empresas de hospedagem de servidores respeitáveis fornecem algum tipo de sistema de resgate, que é iniciado a partir de sua LAN e acessível por SSH. Geralmente, eles fornecem esse suporte para ajudar seus clientes a corrigir sistemas operacionais com problemas. Como este artigo explicará, é possível instalar o FreeBSD com a ajuda desses sistemas de resgate.
+
-. A próxima seção deste artigo descreverá como configurar e compilar uma versão mínima do FreeBSD na máquina local. Essa versão eventualmente será executada na máquina remota a partir de um ramdisk, o que nos permitirá instalar um sistema operacional completo do FreeBSD a partir de um espelho FTP usando o utilitárioSysinstall.
+. A próxima seção deste artigo descreverá como configurar e compilar um FreeBSD minimalista na máquina local. Essa versão será executada eventualmente na máquina remota a partir de um ramdisk, o que nos permitirá instalar um sistema operacional FreeBSD completo a partir de um espelho FTP usando a ferramenta sysinstall.
. O restante deste artigo descreverá o procedimento de instalação em si, bem como a configuração do sistema de arquivos ZFS.
+====
[[requirements]]
=== Requisitos
@@ -74,21 +79,21 @@ Para continuar com sucesso, você deve:
* Ter um sistema operacional acessível pela rede com acesso SSH
* Entender o processo de instalação do FreeBSD
-* Familiarizar-se com o utilitário man:sysinstall[8]
-* Ter a imagem ISO de instalação do FreeBSD ou o CD de instalação à mão
+* Esteja familiarizado com o utilitário man:sysinstall[8]
+* Tenha a imagem do sistema operacional de instalação do FreeBSD ou o CD em mãos
[[preparation]]
== Preparação - mfsBSD
Antes que o FreeBSD possa ser instalado no sistema de destino, é necessário construir a imagem mínima do sistema operacional FreeBSD que será inicializada a partir do disco rígido. Dessa forma, o novo sistema pode ser acessado a partir da rede e o restante da instalação pode ser feito sem acesso remoto ao console do sistema.
-O conjunto de ferramentas mfsBSD pode ser usado para construir uma pequena imagem do FreeBSD. Como o nome mfsBSD sugere ("mfs" significa "sistema de arquivos em memória"), a imagem resultante é executada inteiramente de um ramdisk. Graças a este recurso, a manipulação de discos rígidos não será limitada, portanto, será possível instalar um sistema operacional completo do FreeBSD. A http://mfsbsd.vx.sk/[página inicial] do mfsBSD inclui links para a versão mais recente do conjunto de ferramentas.
+A ferramenta mfsBSD pode ser utilizada para construir uma imagem mínima do FreeBSD. Como sugere o nome "mfsBSD" ("mfs" significa "sistema de arquivos de memória"), a imagem resultante é executada totalmente de um ramdisk. Graças a essa característica, a manipulação de discos rígidos não será limitada, tornando possível a instalação de um sistema operacional FreeBSD completo. A http://mfsbsd.vx.sk/[página inicial] do mfsBSD inclui referências para a última versão do conjunto de ferramentas.
-Por favor, note que os detalhes de como o mfsBSD funciona internamente e como tudo se encaixa está além do escopo deste artigo. O leitor interessado deve consultar a documentação original do mfsBSD para mais detalhes.
+Por favor, note que os detalhes internos do mfsBSD e como tudo se encaixa estão além do escopo deste artigo. O leitor interessado deve consultar a documentação original do mfsBSD para mais detalhes.
-Faça o download e extraia a versão mais recente do mfsBSD e altere seu diretório de trabalho para o diretório em que os scripts mfsBSD residirão:
+Faça o download e extraia a última versão do mfsBSD e altere seu diretório de trabalho para o diretório onde os scripts do mfsBSD serão armazenados:
-[source,shell]
+[source, shell]
....
# fetch http://mfsbsd.vx.sk/release/mfsbsd-2.1.tar.gz
# tar xvzf mfsbsd-2.1.tar.gz
@@ -98,13 +103,13 @@ Faça o download e extraia a versão mais recente do mfsBSD e altere seu diretó
[[mfsbsd-config]]
=== Configuração do mfsBSD
-Antes de inicializar o mfsBSD, algumas opções importantes de configuração precisam ser definidas. O mais importante que temos que acertar é, naturalmente, a configuração da rede. O método mais adequado para configurar opções de rede depende se sabemos de antemão o tipo de interface de rede que usaremos e o driver da interface de rede a ser carregado para o nosso hardware. Vamos ver como o mfsBSD pode ser configurado em ambos os casos.
+Antes de iniciar o mfsBSD, algumas opções de configuração importantes devem ser definidas. A mais importante que devemos acertar é, naturalmente, a configuração de rede. O método mais adequado para configurar as opções de rede depende se sabemos de antemão o tipo de interface de rede que usaremos e o driver de interface de rede a ser carregado para nosso hardware. Veremos como o mfsBSD pode ser configurado em ambos os casos.
-Outra coisa importante para definir é a senha do usuário `root`. Isto pode ser feito editando o [.filename]#conf/loader.conf#. Por favor, veja os comentários incluídos no arquivo.
+Outro ponto importante a ser definido é a senha do `root`. Isso pode ser feito editando o arquivo [.filename]#conf/loader.conf#. Por favor, consulte os comentários incluídos.
==== O método [.filename]#conf/interfaces.conf#
-Quando a placa de rede instalada é desconhecida, é possível usar os recursos de detecção automática do mfsBSD. Os scripts de inicialização do mfsBSD podem detectar o driver correto a ser usado, com base no endereço MAC da interface, se configurarmos as seguintes opções em [.filename]#conf/interfaces.conf#:
+Quando a placa de rede instalada é desconhecida, é possível usar os recursos de detecção automática do mfsBSD. Os scripts de inicialização do mfsBSD podem detectar o driver correto a ser usado, com base no endereço MAC da interface, se definirmos as seguintes opções em [.filename]#conf/interfaces.conf#:
[.programlisting]
....
@@ -113,18 +118,18 @@ ifconfig_ext1_mac="00:00:00:00:00:00"
ifconfig_ext1="inet 192.168.0.2/24"
....
-Não esqueça de adicionar a informação `defaultrouter` ao [.filename]#conf/rc.conf#:
+Não se esqueça de adicionar as informações do `defaultrouter` no [.filename]#conf/rc.conf#:
[.programlisting]
....
defaultrouter="192.168.0.1"
....
-==== O método [.filename]#conf/rc.conf#
+==== O Método [.filename]#conf/rc.conf#
-Quando o driver da interface de rede é conhecido, é mais conveniente usar [.filename]#conf/rc.conf# para opções de rede. A sintaxe deste arquivo é a mesma usada no arquivo padrão man:rc.conf[5] do FreeBSD.
+Quando o driver da interface de rede é conhecido, é mais conveniente usar o arquivo [.filename]#conf/rc.conf# para as opções de rede. A sintaxe deste arquivo é a mesma usada no arquivo padrão man:rc.conf[5] do FreeBSD.
-Por exemplo, se você souber que uma interface de rede man:re[4] estará disponível, você pode definir as seguintes opções em [.filename]#conf/rc.conf#:
+Por exemplo, se você sabe que uma interface de rede man:re[4] estará disponível, você pode definir as seguintes opções no [.filename]#conf/rc.conf#:
[.programlisting]
....
@@ -133,13 +138,13 @@ ifconfig_re0="inet 192.168.0.2/24"
....
[[mfsbsd-build]]
-=== Construindo uma imagem do mfsBSD
+=== Construindo uma imagem mfsBSD
-O processo de construção de uma imagem mfsBSD é bastante simples.
+O processo de construir uma imagem mfsBSD é bastante simples.
-O primeiro passo é montar o CD de instalação do FreeBSD, ou a imagem ISO de instalação em [.filename]#/cdrom#. Por exemplo, neste artigo vamos supor que você tenha baixado o ISO do FreeBSD 10.1-RELEASE. Montar esta imagem ISO no diretório [.filename]#/cdrom# é fácil de se fazer com o utilitário man:mdconfig[8]:
+O primeiro passo é montar o CD de instalação do FreeBSD, ou a imagem ISO de instalação, no diretório [.filename]#/cdrom#. Para fins de exemplo, neste artigo vamos supor que você tenha baixado a imagem ISO do FreeBSD 10.1-RELEASE. Montar esta imagem ISO no diretório [.filename]#/cdrom# é fácil com o utilitário man:mdconfig[8]:
-[source,shell]
+[source, shell]
....
# mdconfig -a -t vnode -u 10 -f FreeBSD-10.1-RELEASE-amd64-disc1.iso
# mount_cd9660 /dev/md10 /cdrom
@@ -147,64 +152,64 @@ O primeiro passo é montar o CD de instalação do FreeBSD, ou a imagem ISO de i
Como as versões recentes do FreeBSD não contêm conjuntos de distribuição regulares, é necessário extrair os arquivos de distribuição do FreeBSD dos arquivos de distribuição localizados na imagem ISO:
-[source,shell]
+[source, shell]
....
# mkdir DIST
# tar -xvf /cdrom/usr/freebsd-dist/base.txz -C DIST
# tar -xvf /cdrom/usr/freebsd-dist/kernel.txz -C DIST
....
-Em seguida, construa a imagem mfsBSD inicializável:
+Em seguida, crie a imagem de inicialização do mfsBSD:
-[source,shell]
+[source, shell]
....
# make BASE=DIST
....
[NOTE]
====
-O make acima deve ser executado a partir do nível superior da árvore de diretórios do mfsBSD, por exemplo, [.filename]#~/mfsbsd-2.1/#.
+A instrução `make` acima deve ser executada a partir do nível superior da árvore de diretórios do mfsBSD, por exemplo, [.filename]#~/mfsbsd-2.1/#.
====
=== Inicializando o mfsBSD
-Agora que a imagem mfsBSD está pronta, ela deve ser carregada para o sistema remoto executando o sistema de recuperação ou uma distribuição Linux(R) pré-instalada. A ferramenta mais adequada para essa tarefa é o scp:
+Agora que a imagem mfsBSD está pronta, ela deve ser enviada para o sistema remoto que está executando um sistema de resgate ou a distribuição Linux(R) pré-instalada. A ferramenta mais adequada para essa tarefa é o scp:
-[source,shell]
+[source, shell]
....
# scp disk.img root@192.168.0.2:.
....
-Para inicializar corretamente a imagem mfsBSD, ela deve ser colocada no primeiro dispositivo (inicializável) da máquina em questão. Isso pode ser feito usando este exemplo, desde que o [.filename]#sda# seja o primeiro dispositivo de disco inicializável:
+Para inicializar a imagem do mfsBSD corretamente, ela deve ser colocada no primeiro dispositivo (inicializável) da máquina em questão. Isso pode ser feito usando o seguinte exemplo, supondo que o [.filename]#sda# seja o primeiro dispositivo de disco inicializável:
-[source,shell]
+[source, shell]
....
# dd if=/root/disk.img of=/dev/sda bs=1m
....
-Se tudo correu bem, a imagem deve estar agora no MBR do primeiro dispositivo e a máquina pode ser reinicializada. Observe a máquina inicializar corretamente com a ferramenta man:ping[8]. Uma vez que tenha retornado on-line, deve ser possível acessá-la com o man:ssh[1] como o usuário `root` usando a senha configurada.
+Se tudo correu bem, a imagem agora deve estar no MBR do primeiro dispositivo e a máquina pode ser reiniciada. Verifique se a máquina está iniciando corretamente com a ferramenta man:ping[8]. Depois que a máquina voltar on-line, deve ser possível acessá-la via man:ssh[1] como usuário `root` com a senha configurada.
[[installation]]
-== Instalação do sistema operacional do FreeBSD
+== Instalação do Sistema Operacional FreeBSD
-O mfsBSD foi inicializado com sucesso e deve ser possível efetuar login através do man:ssh[1]. Esta seção descreverá como criar e rotular os slices, configurar o gmirror para o RAID-1 e como usar o Sysinstall para instalar uma distribuição mínima do sistema operacional FreeBSD.
+O mfsBSD foi iniciado com sucesso e deve ser possível fazer login por meio do man:ssh[1]. Esta seção descreverá como criar e rotular slices, configurar o `gmirror` para RAID-1 e como usar o `sysinstall` para instalar uma distribuição mínima do sistema operacional FreeBSD.
-=== Preparação de Discos Rígidos
+=== Preparação dos Discos Rígidos
-A primeira tarefa é alocar espaço em disco para o FreeBSD, ou seja: criar slices e partições. Obviamente, o sistema atualmente em execução é totalmente carregado na memória do sistema e, portanto, não haverá problemas com a manipulação dos discos rígidos. Para completar esta tarefa, é possível usar Sysinstall ou man:fdisk[8] em conjunto com o man:bsdlabel[8].
+A primeira tarefa é alocar espaço em disco para o FreeBSD, ou seja, criar slices e partições. Obviamente, o sistema atualmente em execução está totalmente carregado na memória do sistema e, portanto, não haverá problemas com a manipulação de discos rígidos. Para concluir esta tarefa, é possível usar o `sysinstall` ou o man:fdisk[8] em conjunto com o man:bsdlabel[8].
No início, marque todos os discos do sistema como vazios. Repita o seguinte comando para cada disco rígido:
-[source,shell]
+[source, shell]
....
# dd if=/dev/zero of=/dev/ad0 count=2
....
-Em seguida, crie as slices e atribua um label usando sua ferramenta preferida. Embora seja considerado mais fácil usar o Sysinstall, um método poderoso e provavelmente com menos bugs será usar as ferramentas padrões de console UNIX(R), como o man:fdisk[8] e o man:bsdlabel[8], o qual também será abordado nesta seção. A primeira opção está bem documentada no capítulo extref:{handbook}install-steps[Instalando o FreeBSD, install] do Handbook do FreeBSD. Como foi mencionado na introdução, este artigo apresentará como configurar um sistema com recursos RAID-1 e ZFS. Nossa configuração consistirá de uma pequena partição [.filename]#/# (root) , de um dataset composto por um [.filename]#/usr# e um [.filename]#/var# , todos espelhados com o man:gmirror[8], e o restante do espaço em disco alocado para um sistema de arquivos man:zpool[8] espelhado do ZFS. Por favor, observe que o sistema de arquivos ZFS será configurado depois que o sistema operacional FreeBSD for instalado e inicializado com sucesso.
+O próximo passo é criar slices e rotulá-las com a ferramenta de sua preferência. Embora seja considerado mais fácil usar o `sysinstall`, um método poderoso e provavelmente com menos bugs é usar as ferramentas UNIX(R) padrão baseadas em texto, como o man:fdisk[8] e o man:bsdlabel[8], que também serão abordados nesta seção. A primeira opção está bem documentada no capítulo extref:{handbook}[Instalando o FreeBSD, install-steps] do Handbook do FreeBSD. Como mencionado na introdução, este artigo apresentará como configurar um sistema com capacidades RAID-1 e ZFS. A nossa configuração consistirá em um pequeno man:gmirror[8] para o [.filename]#/# (root), [.filename]#/usr# e [.filename]#/var#, e o restante do espaço em disco será alocado para um sistema de arquivos ZFS espelhado por meio do man:zpool[8]. Por favor, note que o sistema de arquivos ZFS será configurado após a instalação e inicialização bem-sucedidas do sistema operacional FreeBSD.
-O exemplo a seguir descreverá como criar slices e labels, inicializar o man:gmirror[8] em cada partição e como criar um sistema de arquivos UFS2 em cada partição espelhada:
+O seguinte exemplo descreverá como criar slices e rótulos, inicializar o man:gmirror[8] em cada partição e como criar um sistema de arquivos UFS2 em cada partição espelhada:
-[source,shell]
+[source, shell]
....
# fdisk -BI /dev/ad0 <.>
# fdisk -BI /dev/ad1
@@ -225,21 +230,21 @@ O exemplo a seguir descreverá como criar slices e labels, inicializar o man:gmi
<.> Escreva um label padrão para cada disco, incluindo o código de bootstrap.
-<.> Agora, edite manualmente o label do disco fornecido. Consulte a página de manual do man:bsdlabel[8] para descobrir como criar partições. Crie as partições `a` para o sistema de arquivos [.filename]#/# (root), `b` para swap, `d` para [.filename]#/var#, `e` para [.filename]#/usr# e finalmente `f`, que será usado posteriormente para o ZFS.
+<.> Agora, edite manualmente o label do disco. Consulte a página do manual man:bsdlabel[8] para descobrir como criar partições. Crie partições `a` para o sistema de arquivos [.filename]#/# (raiz), `b` para swap, `d` para [.filename]#/var#, `e` para [.filename]#/usr# e, finalmente, `f` que será usado posteriormente para o ZFS.
<.> Importe o label recém-criado para o segundo disco rígido, para que ambos os discos sejam rotulados da mesma maneira.
<.> Inicialize o man:gmirror[8] em cada partição.
-<.> Note que `-F` é usado para a partição de swap. Isso instrui o man:gmirror[8] a assumir que o dispositivo está no estado consistente após a falha de energia/sistema.
+<.> Note que `-F` é usado para a partição swap. Isso instrui o man:gmirror[8] a assumir que o dispositivo está em um estado consistente após uma falha de energia/sistema.
<.> Crie um sistema de arquivos UFS2 em cada partição espelhada.
=== Instalação do sistema
-Esta é a parte mais importante. Esta seção irá descrever como instalar a distribuição mínima do FreeBSD nos discos rígidos que preparamos na seção anterior. Para atingir este objetivo, todos os sistemas de arquivos precisam ser montados para que o Sysinstall possa gravar o conteúdo do FreeBSD nos discos rígidos:
+Esta é a parte mais importante. Esta seção irá descrever como instalar a distribuição mínima do FreeBSD nos discos rígidos que preparamos na seção anterior. Para atingir este objetivo, todos os sistemas de arquivos precisam ser montados para que o `sysinstall` possa gravar o conteúdo do FreeBSD nos discos rígidos:
-[source,shell]
+[source, shell]
....
# mount /dev/mirror/root /mnt
# mkdir /mnt/var /mnt/usr
@@ -247,31 +252,31 @@ Esta é a parte mais importante. Esta seção irá descrever como instalar a dis
# mount /dev/mirror/usr /mnt/usr
....
-Quando terminar, inicie o man:sysinstall[8]. Selecione a instalação [.guimenuitem]#Personalizada# no menu principal. Selecione [.guimenuitem]#Opções# e pressione kbd:[Enter]. Com a ajuda das teclas direcionais, mova o cursor para o item `Install Root`, pressione kbd:[Espaço] e altere-o para [.filename]#/mnt#. Pressione kbd:[Enter] para enviar suas alterações e sair do menu [.guimenuitem]#Opções# pressionando kbd:[q].
+Quando terminar, inicie o man:sysinstall[8]. Selecione a instalação [.guimenuitem]#Custom# no menu principal. Selecione [.guimenuitem]#Opções# e pressione kbd:[Enter]. Com a ajuda das teclas de seta, mova o cursor no item `Install Root`, pressione kbd:[Espaço] e altere-o para [.filename]#/mnt#. Pressione kbd:[Enter] para enviar suas alterações e sair do menu [.guimenuitem]#Opções# pressionando kbd:[q].
[WARNING]
====
-Note que este passo é muito importante e se for ignorado, o Sysinstall não poderá instalar o FreeBSD.
+Observe que este passo é muito importante e, se ignorado, o `sysinstall` será incapaz de instalar o FreeBSD.
====
-Vá para o menu [.guimenuitem]#Distributions#, mova o cursor com as teclas de seta para `Minimal` e selecione-o pressionando kbd:[Space]. Este artigo usa a distribuição mínima para salvar o tráfego de rede, porque o próprio sistema será instalado por ftp. Saia deste menu escolhendo `Exit`.
+Vá para o menu [.guimenuitem]#Distributions#, mova o cursor com as teclas de seta para `Minimal` e marque-a pressionando kbd:[Espaço]. Este artigo utiliza a distribuição Minimal para economizar tráfego de rede, pois o próprio sistema será instalado via ftp. Saia deste menu escolhendo `Exit`.
[NOTE]
====
-Os menus [.guimenuitem]#Partition# e [.guimenuitem]#Label# serão ignorados, pois são inúteis agora.
+Os menus [.guimenuitem]#Partition# e [.guimenuitem]#Label# serão ignorados, pois são inúteis neste momento.
====
-No menu [.guimenuitem]#Media#, selecione `FTP`. Selecione o espelho mais próximo e deixe o Sysinstall assumir que a rede já está configurada. Você retornará ao menu [.guimenuitem]#Personalizar#.
+Na tela do menu [.guimenuitem]#Media#[/guimenuitem], selecione a opção "FTP". Escolha o espelho mais próximo e deixe que o `sysinstall` assuma que a rede já está configurada. Você será levado de volta ao menu [.guimenuitem]#Custom#.
-Finalmente, realize a instalação do sistema selecionando a última opção, [.guimenuitem]#Commit#. Saia do sysinstall quando terminar a instalação.
+Por fim, execute a instalação do sistema selecionando a última opção, [.guimenuitem]#Commit#. Saia do `sysinstall` quando a instalação for concluída.
=== Etapas pós-instalação
-O sistema operacional do FreeBSD deve estar instalado agora; no entanto, o processo ainda não está concluído. É necessário executar algumas etapas pós-instalação para permitir que o FreeBSD inicialize no futuro e consiga efetuar o login no sistema.
+O sistema operacional FreeBSD deve estar instalado agora; no entanto, o processo ainda não está concluído. É necessário realizar algumas etapas pós-instalação para permitir que o FreeBSD seja inicializado no futuro e para poder fazer login no sistema.
-Você deve agora executar man:chroot[8] para o sistema recém-instalado para concluir a instalação. Use o seguinte comando:
+Agora você deve executar o comando `man:chroot[8]` no sistema recém-instalado para concluir a instalação. Use o seguinte comando:
-[source,shell]
+[source, shell]
....
# chroot /mnt
....
@@ -280,12 +285,12 @@ Para completar nosso objetivo, execute estas etapas:
* Copie o kernel `GENERIC` para o diretório [.filename]#/boot/kernel#:
+
-[source,shell]
+[source, shell]
....
# cp -Rp /boot/GENERIC/* /boot/kernel
....
-* Crie os arquivos [.filename]#/etc/rc.conf#, [.filename]#/etc/resolv.conf# e [.filename]#/etc/fstab#. Não se esqueça de configurar corretamente as informações de rede e ativar o sshd em [.filename]#/etc/rc.conf#. O conteúdo do [.filename]#/etc/fstab# será semelhante ao seguinte:
+* Crie os arquivos [.filename]#/etc/rc.conf#, [.filename]#/etc/resolv.conf# e [.filename]#/etc/fstab#. Não esqueça de definir corretamente as informações de rede e habilitar o sshd em [.filename]#/etc/rc.conf#. O conteúdo do [.filename]#/etc/fstab# será semelhante ao seguinte:
+
[.programlisting]
....
@@ -296,40 +301,40 @@ Para completar nosso objetivo, execute estas etapas:
/dev/mirror/var /var ufs rw 2 2
/dev/cd0 /cdrom cd9660 ro,noauto 0 0
....
-* Crie o [.filename]#/boot/loader.conf# com o seguinte conteúdo:
+* Crie o arquivo [.filename]#/boot/loader.conf# com o seguinte conteúdo:
+
[.programlisting]
....
geom_mirror_load="YES"
zfs_load="YES"
....
-* Execute o seguinte comando, que disponibilizará o ZFS na próxima inicialização:
+* Execute o seguinte comando, que permitirá o ZFS ser utilizado no próximo boot:
+
-[source,shell]
+[source, shell]
....
-# echo 'zfs_enable="YES"' >> /etc/rc.conf
+# sysrc zfs_enable="YES"
....
-* Adicione usuários adicionais ao sistema usando a ferramenta man:adduser[8]. Não se esqueça de adicionar um usuário ao grupo `wheel` para que você possa obter acesso root após a reinicialização.
+* Adicione usuários adicionais ao sistema usando a ferramenta man:adduser[8]. Não se esqueça de adicionar um usuário ao grupo `wheel` para que possa obter acesso de root após a reinicialização.
* Verifique todas as suas configurações.
-O sistema deve estar pronto para a próxima inicialização. Use o comando man:reboot[8] para reinicializar seu sistema.
+O sistema deve estar pronto para a próxima inicialização. Use o comando man:reboot[8] para reiniciar o sistema.
[[zfs]]
== ZFS
-Se o seu sistema sobreviveu à reinicialização, agora deve ser possível efetuar login. Bem-vindo à nova instalação do FreeBSD, executada remotamente sem o uso de um console remoto!
+Se o seu sistema sobreviveu ao reboot, agora deve ser possível fazer login. Bem-vindo à nova instalação do FreeBSD, realizada remotamente sem o uso de um console remoto!
-O único passo restante é configurar o man:zpool[8] e criar algum sistemas de arquivos man:zfs[8]. Criar e administrar o ZFS é muito simples. Primeiro, crie um pool espelhado:
+O único passo restante é configurar o man:zpool[8] e criar alguns sistemas de arquivos man:zfs[8]. Criar e administrar ZFS é muito simples. Primeiro, crie um pool espelhado:
-[source,shell]
+[source, shell]
....
# zpool create tank mirror /dev/ad[01]s1f
....
Em seguida, crie alguns sistemas de arquivos:
-[source,shell]
+[source, shell]
....
# zfs create tank/ports
# zfs create tank/src
@@ -339,4 +344,4 @@ Em seguida, crie alguns sistemas de arquivos:
# zfs set mountpoint=/usr/src tank/src
....
-Isso é tudo. Se você está interessado em mais detalhes sobre o ZFSno FreeBSD, por favor consulte a seção https://wiki.freebsd.org/ZFS[ZFS] do o Wiki do FreeBSD.
+Isso é tudo. Se você estiver interessado em mais detalhes sobre o ZFS no FreeBSD, consulte a seção https://wiki.freebsd.org/ZFS[ZFS] do Wiki do FreeBSD.
diff --git a/documentation/content/pt-br/articles/remote-install/_index.po b/documentation/content/pt-br/articles/remote-install/_index.po
new file mode 100644
index 0000000000..ac8736e7df
--- /dev/null
+++ b/documentation/content/pt-br/articles/remote-install/_index.po
@@ -0,0 +1,1027 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: 2023-04-29 18:15+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesremote-install_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/remote-install/_index.adoc:1
+#, no-wrap
+msgid "Describes the remote installation of the FreeBSD operating system when the console of the remote system is unavailable"
+msgstr ""
+"Este documento descreve a instalação remota do sistema operacional FreeBSD "
+"quando o console do sistema remoto não está disponível"
+
+#. type: Title =
+#: documentation/content/en/articles/remote-install/_index.adoc:1
+#: documentation/content/en/articles/remote-install/_index.adoc:12
+#, no-wrap
+msgid "Remote Installation of the FreeBSD Operating System Without a Remote Console"
+msgstr "Instalação Remota do Sistema Operacional FreeBSD sem um Console Remoto"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:45
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:48
+msgid ""
+"This article documents the remote installation of the FreeBSD operating "
+"system when the console of the remote system is unavailable. The main idea "
+"behind this article is the result of a collaboration with `{mm}` with "
+"valuable input provided by `{pjd}`."
+msgstr ""
+"Este artigo documenta a instalação remota do sistema operacional FreeBSD "
+"quando o console do sistema remoto não está disponível. A ideia principal "
+"por trás deste artigo é o resultado de uma colaboração com `{mm}`, com "
+"valiosa contribuição fornecida por `{pjd}`."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:50
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/remote-install/_index.adoc:54
+#, no-wrap
+msgid "Background"
+msgstr "Background"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:58
+msgid ""
+"There are many server hosting providers in the world, but very few of them "
+"are officially supporting FreeBSD. They usually provide support for a "
+"Linux(R) distribution to be installed on the servers they offer."
+msgstr ""
+"Existem muitos provedores de hospedagem de servidores no mundo, mas muito "
+"poucos deles oferecem suporte oficial para o FreeBSD. Geralmente, eles "
+"fornecem suporte para uma distribuição Linux(R) a ser instalada nos "
+"servidores que oferecem."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:62
+msgid ""
+"In some cases, these companies will install your preferred Linux(R) "
+"distribution if you request it. Using this option, we will attempt to "
+"install FreeBSD. In other cases, they may offer a rescue system which would "
+"be used in an emergency. It is possible to use this for our purposes as "
+"well."
+msgstr ""
+"Em alguns casos, essas empresas podem instalar a distribuição FreeBSD se "
+"você solicitar, mesmo que normalmente só ofereçam suporte para distribuições "
+"Linux(R). Em outros casos, elas podem oferecer um sistema de resgate que "
+"seria usado em uma emergência. É possível usar isso para nossos fins também."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:64
+msgid ""
+"This article covers the basic installation and configuration steps required "
+"to bootstrap a remote installation of FreeBSD with RAID-1 and ZFS "
+"capabilities."
+msgstr ""
+"Este artigo cobre os passos básicos de instalação e configuração necessários "
+"para inicializar uma instalação remota do FreeBSD com capacidades RAID-1 e "
+"ZFS."
+
+#. type: Title ==
+#: documentation/content/en/articles/remote-install/_index.adoc:66
+#, no-wrap
+msgid "Introduction"
+msgstr "Introdução"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:70
+msgid ""
+"This section will summarize the purpose of this article and better explain "
+"what is covered herein. The instructions included in this article will "
+"benefit those using services provided by colocation facilities not "
+"supporting FreeBSD."
+msgstr ""
+"Esta seção resumirá o objetivo deste artigo e explicará melhor o que é "
+"abordado aqui. As instruções incluídas neste artigo beneficiarão aqueles que "
+"utilizam serviços fornecidos por provedores de colocation que não suportam o "
+"FreeBSD."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/remote-install/_index.adoc:74
+msgid ""
+"As we have mentioned in the <<background>> section, many of the reputable "
+"server hosting companies provide some kind of rescue system, which is booted "
+"from their LAN and accessible over SSH. They usually provide this support in "
+"order to help their customers fix broken operating systems. As this article "
+"will explain, it is possible to install FreeBSD with the help of these "
+"rescue systems."
+msgstr ""
+"Como mencionamos na seção <<background>>, muitas das empresas de hospedagem "
+"de servidores respeitáveis fornecem algum tipo de sistema de resgate, que é "
+"iniciado a partir de sua LAN e acessível por SSH. Geralmente, eles fornecem "
+"esse suporte para ajudar seus clientes a corrigir sistemas operacionais com "
+"problemas. Como este artigo explicará, é possível instalar o FreeBSD com a "
+"ajuda desses sistemas de resgate."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/remote-install/_index.adoc:76
+msgid ""
+"The next section of this article will describe how to configure, and build "
+"minimalistic FreeBSD on the local machine. That version will eventually be "
+"running on the remote machine from a ramdisk, which will allow us to install "
+"a complete FreeBSD operating system from an FTP mirror using the sysinstall "
+"utility."
+msgstr ""
+"A próxima seção deste artigo descreverá como configurar e compilar um "
+"FreeBSD minimalista na máquina local. Essa versão será executada "
+"eventualmente na máquina remota a partir de um ramdisk, o que nos permitirá "
+"instalar um sistema operacional FreeBSD completo a partir de um espelho FTP "
+"usando a ferramenta sysinstall."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/remote-install/_index.adoc:77
+msgid ""
+"The rest of this article will describe the installation procedure itself, as "
+"well as the configuration of the ZFS file system."
+msgstr ""
+"O restante deste artigo descreverá o procedimento de instalação em si, bem "
+"como a configuração do sistema de arquivos ZFS."
+
+#. type: Title ===
+#: documentation/content/en/articles/remote-install/_index.adoc:80
+#, no-wrap
+msgid "Requirements"
+msgstr "Requisitos"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:83
+msgid "To continue successfully, you must:"
+msgstr "Para continuar com sucesso, você deve:"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:85
+msgid "Have a network accessible operating system with SSH access"
+msgstr "Ter um sistema operacional acessível pela rede com acesso SSH"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:86
+msgid "Understand the FreeBSD installation process"
+msgstr "Entender o processo de instalação do FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:87
+msgid "Be familiar with the man:sysinstall[8] utility"
+msgstr "Esteja familiarizado com o utilitário man:sysinstall[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:88
+msgid "Have the FreeBSD installation SO image or CD handy"
+msgstr ""
+"Tenha a imagem do sistema operacional de instalação do FreeBSD ou o CD em "
+"mãos"
+
+#. type: Title ==
+#: documentation/content/en/articles/remote-install/_index.adoc:90
+#, no-wrap
+msgid "Preparation - mfsBSD"
+msgstr "Preparação - mfsBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:94
+msgid ""
+"Before FreeBSD may be installed on the target system, it is necessary to "
+"build the minimal FreeBSD operating system image which will boot from the "
+"hard drive. This way the new system can be accessed from the network, and "
+"the rest of the installation can be done without remote access to the system "
+"console."
+msgstr ""
+"Antes que o FreeBSD possa ser instalado no sistema de destino, é necessário "
+"construir a imagem mínima do sistema operacional FreeBSD que será "
+"inicializada a partir do disco rígido. Dessa forma, o novo sistema pode ser "
+"acessado a partir da rede e o restante da instalação pode ser feito sem "
+"acesso remoto ao console do sistema."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:99
+msgid ""
+"The mfsBSD tool-set can be used to build a tiny FreeBSD image. As the name "
+"of mfsBSD suggests (\"mfs\" means \"memory file system\"), the resulting "
+"image runs entirely from a ramdisk. Thanks to this feature, the "
+"manipulation of hard drives will not be limited, therefore it will be "
+"possible to install a complete FreeBSD operating system. The mfsBSD http://"
+"mfsbsd.vx.sk/[home page] includes pointers to the latest release of the "
+"toolset."
+msgstr ""
+"A ferramenta mfsBSD pode ser utilizada para construir uma imagem mínima do "
+"FreeBSD. Como sugere o nome \"mfsBSD\" (\"mfs\" significa \"sistema de "
+"arquivos de memória\"), a imagem resultante é executada totalmente de um "
+"ramdisk. Graças a essa característica, a manipulação de discos rígidos não "
+"será limitada, tornando possível a instalação de um sistema operacional "
+"FreeBSD completo. A http://mfsbsd.vx.sk/[página inicial] do mfsBSD inclui "
+"referências para a última versão do conjunto de ferramentas."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:102
+msgid ""
+"Please note that the internals of mfsBSD and how it all fits together is "
+"beyond the scope of this article. The interested reader should consult the "
+"original documentation of mfsBSD for more details."
+msgstr ""
+"Por favor, note que os detalhes internos do mfsBSD e como tudo se encaixa "
+"estão além do escopo deste artigo. O leitor interessado deve consultar a "
+"documentação original do mfsBSD para mais detalhes."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:104
+msgid ""
+"Download and extract the latest mfsBSD release and change your working "
+"directory to the directory where the mfsBSD scripts will reside:"
+msgstr ""
+"Faça o download e extraia a última versão do mfsBSD e altere seu diretório "
+"de trabalho para o diretório onde os scripts do mfsBSD serão armazenados:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:110
+#, no-wrap
+msgid ""
+"# fetch http://mfsbsd.vx.sk/release/mfsbsd-2.1.tar.gz\n"
+"# tar xvzf mfsbsd-2.1.tar.gz\n"
+"# cd mfsbsd-2.1/\n"
+msgstr ""
+"# fetch http://mfsbsd.vx.sk/release/mfsbsd-2.1.tar.gz\n"
+"# tar xvzf mfsbsd-2.1.tar.gz\n"
+"# cd mfsbsd-2.1/\n"
+
+#. type: Title ===
+#: documentation/content/en/articles/remote-install/_index.adoc:113
+#, no-wrap
+msgid "Configuration of mfsBSD"
+msgstr "Configuração do mfsBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:119
+msgid ""
+"Before booting mfsBSD, a few important configuration options have to be "
+"set. The most important that we have to get right is, naturally, the "
+"network setup. The most suitable method to configure networking options "
+"depends on whether we know beforehand the type of the network interface we "
+"will use, and the network interface driver to be loaded for our hardware. "
+"We will see how mfsBSD can be configured in either case."
+msgstr ""
+"Antes de iniciar o mfsBSD, algumas opções de configuração importantes devem "
+"ser definidas. A mais importante que devemos acertar é, naturalmente, a "
+"configuração de rede. O método mais adequado para configurar as opções de "
+"rede depende se sabemos de antemão o tipo de interface de rede que usaremos "
+"e o driver de interface de rede a ser carregado para nosso hardware. Veremos "
+"como o mfsBSD pode ser configurado em ambos os casos."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:123
+msgid ""
+"Another important thing to set is the `root` password. This can be done by "
+"editing [.filename]#conf/loader.conf#. Please see the included comments."
+msgstr ""
+"Outro ponto importante a ser definido é a senha do `root`. Isso pode ser "
+"feito editando o arquivo [.filename]#conf/loader.conf#. Por favor, consulte "
+"os comentários incluídos."
+
+#. type: Title ====
+#: documentation/content/en/articles/remote-install/_index.adoc:124
+#, no-wrap
+msgid "The [.filename]#conf/interfaces.conf# method"
+msgstr "O método [.filename]#conf/interfaces.conf#"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:128
+msgid ""
+"When the installed network interface card is unknown, it is possible to use "
+"the auto-detection features of mfsBSD. The startup scripts of mfsBSD can "
+"detect the correct driver to use, based on the MAC address of the interface, "
+"if we set the following options in [.filename]#conf/interfaces.conf#:"
+msgstr ""
+"Quando a placa de rede instalada é desconhecida, é possível usar os recursos "
+"de detecção automática do mfsBSD. Os scripts de inicialização do mfsBSD "
+"podem detectar o driver correto a ser usado, com base no endereço MAC da "
+"interface, se definirmos as seguintes opções em [.filename]#conf/interfaces."
+"conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:134
+#, no-wrap
+msgid ""
+"mac_interfaces=\"ext1\"\n"
+"ifconfig_ext1_mac=\"00:00:00:00:00:00\"\n"
+"ifconfig_ext1=\"inet 192.168.0.2/24\"\n"
+msgstr ""
+"mac_interfaces=\"ext1\"\n"
+"ifconfig_ext1_mac=\"00:00:00:00:00:00\"\n"
+"ifconfig_ext1=\"inet 192.168.0.2/24\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:137
+msgid ""
+"Do not forget to add the `defaultrouter` information to [.filename]#conf/rc."
+"conf#:"
+msgstr ""
+"Não se esqueça de adicionar as informações do `defaultrouter` no [.filename]#"
+"conf/rc.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:141
+#, no-wrap
+msgid "defaultrouter=\"192.168.0.1\"\n"
+msgstr "defaultrouter=\"192.168.0.1\"\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/remote-install/_index.adoc:143
+#, no-wrap
+msgid "The [.filename]#conf/rc.conf# Method"
+msgstr "O Método [.filename]#conf/rc.conf#"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:147
+msgid ""
+"When the network interface driver is known, it is more convenient to use [."
+"filename]#conf/rc.conf# for networking options. The syntax of this file is "
+"the same as the one used in the standard man:rc.conf[5] file of FreeBSD."
+msgstr ""
+"Quando o driver da interface de rede é conhecido, é mais conveniente usar o "
+"arquivo [.filename]#conf/rc.conf# para as opções de rede. A sintaxe deste "
+"arquivo é a mesma usada no arquivo padrão man:rc.conf[5] do FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:149
+msgid ""
+"For example, if you know that a man:re[4] network interface is going to be "
+"available, you can set the following options in [.filename]#conf/rc.conf#:"
+msgstr ""
+"Por exemplo, se você sabe que uma interface de rede man:re[4] estará "
+"disponível, você pode definir as seguintes opções no [.filename]#conf/rc."
+"conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:154
+#, no-wrap
+msgid ""
+"defaultrouter=\"192.168.0.1\"\n"
+"ifconfig_re0=\"inet 192.168.0.2/24\"\n"
+msgstr ""
+"defaultrouter=\"192.168.0.1\"\n"
+"ifconfig_re0=\"inet 192.168.0.2/24\"\n"
+
+#. type: Title ===
+#: documentation/content/en/articles/remote-install/_index.adoc:157
+#, no-wrap
+msgid "Building an mfsBSD Image"
+msgstr "Construindo uma imagem mfsBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:160
+msgid "The process of building an mfsBSD image is pretty straightforward."
+msgstr "O processo de construir uma imagem mfsBSD é bastante simples."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:164
+msgid ""
+"The first step is to mount the FreeBSD installation CD, or the installation "
+"ISO image to [.filename]#/cdrom#. For the sake of example, in this article "
+"we will assume that you have downloaded the FreeBSD 10.1-RELEASE ISO. "
+"Mounting this ISO image to the [.filename]#/cdrom# directory is easy with "
+"the man:mdconfig[8] utility:"
+msgstr ""
+"O primeiro passo é montar o CD de instalação do FreeBSD, ou a imagem ISO de "
+"instalação, no diretório [.filename]#/cdrom#. Para fins de exemplo, neste "
+"artigo vamos supor que você tenha baixado a imagem ISO do FreeBSD 10.1-"
+"RELEASE. Montar esta imagem ISO no diretório [.filename]#/cdrom# é fácil com "
+"o utilitário man:mdconfig[8]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:169
+#, no-wrap
+msgid ""
+"# mdconfig -a -t vnode -u 10 -f FreeBSD-10.1-RELEASE-amd64-disc1.iso\n"
+"# mount_cd9660 /dev/md10 /cdrom\n"
+msgstr ""
+"# mdconfig -a -t vnode -u 10 -f FreeBSD-10.1-RELEASE-amd64-disc1.iso\n"
+"# mount_cd9660 /dev/md10 /cdrom\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:172
+msgid ""
+"Since the recent FreeBSD releases do not contain regular distribution sets, "
+"it is required to extract the FreeBSD distribution files from the "
+"distribution archives located on the ISO image:"
+msgstr ""
+"Como as versões recentes do FreeBSD não contêm conjuntos de distribuição "
+"regulares, é necessário extrair os arquivos de distribuição do FreeBSD dos "
+"arquivos de distribuição localizados na imagem ISO:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:178
+#, no-wrap
+msgid ""
+"# mkdir DIST\n"
+"# tar -xvf /cdrom/usr/freebsd-dist/base.txz -C DIST\n"
+"# tar -xvf /cdrom/usr/freebsd-dist/kernel.txz -C DIST\n"
+msgstr ""
+"# mkdir DIST\n"
+"# tar -xvf /cdrom/usr/freebsd-dist/base.txz -C DIST\n"
+"# tar -xvf /cdrom/usr/freebsd-dist/kernel.txz -C DIST\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:181
+msgid "Next, build the bootable mfsBSD image:"
+msgstr "Em seguida, crie a imagem de inicialização do mfsBSD:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:185
+#, no-wrap
+msgid "# make BASE=DIST\n"
+msgstr "# make BASE=DIST\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/remote-install/_index.adoc:190
+msgid ""
+"The above `make` has to be run from the top level of the mfsBSD directory "
+"tree, for example [.filename]#~/mfsbsd-2.1/#."
+msgstr ""
+"A instrução `make` acima deve ser executada a partir do nível superior da "
+"árvore de diretórios do mfsBSD, por exemplo, [.filename]#~/mfsbsd-2.1/#."
+
+#. type: Title ===
+#: documentation/content/en/articles/remote-install/_index.adoc:192
+#, no-wrap
+msgid "Booting mfsBSD"
+msgstr "Inicializando o mfsBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:196
+msgid ""
+"Now that the mfsBSD image is ready, it must be uploaded to the remote system "
+"running a live rescue system or pre-installed Linux(R) distribution. The "
+"most suitable tool for this task is scp:"
+msgstr ""
+"Agora que a imagem mfsBSD está pronta, ela deve ser enviada para o sistema "
+"remoto que está executando um sistema de resgate ou a distribuição Linux(R) "
+"pré-instalada. A ferramenta mais adequada para essa tarefa é o scp:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:200
+#, no-wrap
+msgid "# scp disk.img root@192.168.0.2:.\n"
+msgstr "# scp disk.img root@192.168.0.2:.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:204
+msgid ""
+"To boot mfsBSD image properly, it must be placed on the first (bootable) "
+"device of the given machine. This may be accomplished using this example "
+"providing that [.filename]#sda# is the first bootable disk device:"
+msgstr ""
+"Para inicializar a imagem do mfsBSD corretamente, ela deve ser colocada no "
+"primeiro dispositivo (inicializável) da máquina em questão. Isso pode ser "
+"feito usando o seguinte exemplo, supondo que o [.filename]#sda# seja o "
+"primeiro dispositivo de disco inicializável:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:208
+#, no-wrap
+msgid "# dd if=/root/disk.img of=/dev/sda bs=1m\n"
+msgstr "# dd if=/root/disk.img of=/dev/sda bs=1m\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:213
+msgid ""
+"If all went well, the image should now be in the MBR of the first device and "
+"the machine can be rebooted. Watch for the machine to boot up properly with "
+"the man:ping[8] tool. Once it has came back on-line, it should be possible "
+"to access it over man:ssh[1] as user `root` with the configured password."
+msgstr ""
+"Se tudo correu bem, a imagem agora deve estar no MBR do primeiro dispositivo "
+"e a máquina pode ser reiniciada. Verifique se a máquina está iniciando "
+"corretamente com a ferramenta man:ping[8]. Depois que a máquina voltar on-"
+"line, deve ser possível acessá-la via man:ssh[1] como usuário `root` com a "
+"senha configurada."
+
+#. type: Title ==
+#: documentation/content/en/articles/remote-install/_index.adoc:215
+#, no-wrap
+msgid "Installation of the FreeBSD Operating System"
+msgstr "Instalação do Sistema Operacional FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:219
+msgid ""
+"The mfsBSD has been successfully booted and it should be possible to log in "
+"through man:ssh[1]. This section will describe how to create and label "
+"slices, set up `gmirror` for RAID-1, and how to use `sysinstall` to install "
+"a minimal distribution of the FreeBSD operating system."
+msgstr ""
+"O mfsBSD foi iniciado com sucesso e deve ser possível fazer login por meio "
+"do man:ssh[1]. Esta seção descreverá como criar e rotular slices, configurar "
+"o `gmirror` para RAID-1 e como usar o `sysinstall` para instalar uma "
+"distribuição mínima do sistema operacional FreeBSD."
+
+#. type: Title ===
+#: documentation/content/en/articles/remote-install/_index.adoc:220
+#, no-wrap
+msgid "Preparation of Hard Drives"
+msgstr "Preparação dos Discos Rígidos"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:225
+msgid ""
+"The first task is to allocate disk space for FreeBSD, i.e.: to create slices "
+"and partitions. Obviously, the currently running system is fully loaded in "
+"system memory and therefore there will be no problems with manipulating hard "
+"drives. To complete this task, it is possible to use either `sysinstall` or "
+"man:fdisk[8] in conjunction to man:bsdlabel[8]."
+msgstr ""
+"A primeira tarefa é alocar espaço em disco para o FreeBSD, ou seja, criar "
+"slices e partições. Obviamente, o sistema atualmente em execução está "
+"totalmente carregado na memória do sistema e, portanto, não haverá problemas "
+"com a manipulação de discos rígidos. Para concluir esta tarefa, é possível "
+"usar o `sysinstall` ou o man:fdisk[8] em conjunto com o man:bsdlabel[8]."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:228
+msgid ""
+"At the start, mark all system disks as empty. Repeat the following command "
+"for each hard drive:"
+msgstr ""
+"No início, marque todos os discos do sistema como vazios. Repita o seguinte "
+"comando para cada disco rígido:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:232
+#, no-wrap
+msgid "# dd if=/dev/zero of=/dev/ad0 count=2\n"
+msgstr "# dd if=/dev/zero of=/dev/ad0 count=2\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:240
+msgid ""
+"Next, create slices and label them with your preferred tool. While it is "
+"considered easier to use `sysinstall`, a powerful and also probably less "
+"buggy method will be to use standard text-based UNIX(R) tools, such as man:"
+"fdisk[8] and man:bsdlabel[8], which will also be covered in this section. "
+"The former option is well documented in the extref:{handbook}[Installing "
+"FreeBSD, install-steps] chapter of the FreeBSD Handbook. As it was "
+"mentioned in the introduction, this article will present how to set up a "
+"system with RAID-1 and ZFS capabilities. Our set up will consist of a small "
+"man:gmirror[8] mirrored [.filename]#/# (root), [.filename]#/usr# and [."
+"filename]#/var# dataset, and the rest of the disk space will be allocated "
+"for a man:zpool[8] mirrored ZFS file system. Please note, that the ZFS file "
+"system will be configured after the FreeBSD operating system is successfully "
+"installed and booted."
+msgstr ""
+"O próximo passo é criar slices e rotulá-las com a ferramenta de sua "
+"preferência. Embora seja considerado mais fácil usar o `sysinstall`, um "
+"método poderoso e provavelmente com menos bugs é usar as ferramentas UNIX(R) "
+"padrão baseadas em texto, como o man:fdisk[8] e o man:bsdlabel[8], que "
+"também serão abordados nesta seção. A primeira opção está bem documentada no "
+"capítulo extref:{handbook}[Instalando o FreeBSD, install-steps] do Handbook "
+"do FreeBSD. Como mencionado na introdução, este artigo apresentará como "
+"configurar um sistema com capacidades RAID-1 e ZFS. A nossa configuração "
+"consistirá em um pequeno man:gmirror[8] para o [.filename]#/# (root), [."
+"filename]#/usr# e [.filename]#/var#, e o restante do espaço em disco será "
+"alocado para um sistema de arquivos ZFS espelhado por meio do man:zpool[8]. "
+"Por favor, note que o sistema de arquivos ZFS será configurado após a "
+"instalação e inicialização bem-sucedidas do sistema operacional FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:242
+msgid ""
+"The following example will describe how to create slices and labels, "
+"initialize man:gmirror[8] on each partition and how to create a UFS2 file "
+"system in each mirrored partition:"
+msgstr ""
+"O seguinte exemplo descreverá como criar slices e rótulos, inicializar o "
+"man:gmirror[8] em cada partição e como criar um sistema de arquivos UFS2 em "
+"cada partição espelhada:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:258
+#, no-wrap
+msgid ""
+"# fdisk -BI /dev/ad0 <.>\n"
+"# fdisk -BI /dev/ad1\n"
+"# bsdlabel -wB /dev/ad0s1 <.>\n"
+"# bsdlabel -wB /dev/ad1s1\n"
+"# bsdlabel -e /dev/ad0s1 <.>\n"
+"# bsdlabel /dev/ad0s1 > /tmp/bsdlabel.txt && bsdlabel -R /dev/ad1s1 /tmp/bsdlabel.txt <.>\n"
+"# gmirror label root /dev/ad[01]s1a <.>\n"
+"# gmirror label var /dev/ad[01]s1d\n"
+"# gmirror label usr /dev/ad[01]s1e\n"
+"# gmirror label -F swap /dev/ad[01]s1b <.>\n"
+"# newfs /dev/mirror/root <.>\n"
+"# newfs /dev/mirror/var\n"
+"# newfs /dev/mirror/usr\n"
+msgstr ""
+"# fdisk -BI /dev/ad0 <.>\n"
+"# fdisk -BI /dev/ad1\n"
+"# bsdlabel -wB /dev/ad0s1 <.>\n"
+"# bsdlabel -wB /dev/ad1s1\n"
+"# bsdlabel -e /dev/ad0s1 <.>\n"
+"# bsdlabel /dev/ad0s1 > /tmp/bsdlabel.txt && bsdlabel -R /dev/ad1s1 /tmp/"
+"bsdlabel.txt <.>\n"
+"# gmirror label root /dev/ad[01]s1a <.>\n"
+"# gmirror label var /dev/ad[01]s1d\n"
+"# gmirror label usr /dev/ad[01]s1e\n"
+"# gmirror label -F swap /dev/ad[01]s1b <.>\n"
+"# newfs /dev/mirror/root <.>\n"
+"# newfs /dev/mirror/var\n"
+"# newfs /dev/mirror/usr\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:261
+msgid ""
+"Create a slice covering the entire disk and initialize the boot code "
+"contained in sector 0 of the given disk. Repeat this command for all hard "
+"drives in the system."
+msgstr ""
+"Crie uma slice cobrindo todo o disco e inicialize o código de inicialização "
+"contido no setor 0 do disco fornecido. Repita este comando para todos os "
+"discos rígidos no sistema."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:263
+msgid "Write a standard label for each disk including the bootstrap code."
+msgstr ""
+"Escreva um label padrão para cada disco, incluindo o código de bootstrap."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:265
+msgid ""
+"Now, manually edit the label of the given disk. Refer to the man:bsdlabel[8] "
+"manual page in order to find out how to create partitions. Create partitions "
+"`a` for [.filename]#/# (root) file system, `b` for swap, `d` for [."
+"filename]#/var#, `e` for [.filename]#/usr# and finally `f` which will later "
+"be used for ZFS."
+msgstr ""
+"Agora, edite manualmente o label do disco. Consulte a página do manual "
+"man:bsdlabel[8] para descobrir como criar partições. Crie partições `a` para "
+"o sistema de arquivos [.filename]#/# (raiz), `b` para swap, `d` para [."
+"filename]#/var#, `e` para [.filename]#/usr# e, finalmente, `f` que será "
+"usado posteriormente para o ZFS."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:267
+msgid ""
+"Import the recently created label for the second hard drive, so both hard "
+"drives will be labeled in the same way."
+msgstr ""
+"Importe o label recém-criado para o segundo disco rígido, para que ambos os "
+"discos sejam rotulados da mesma maneira."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:269
+msgid "Initialize man:gmirror[8] on each partition."
+msgstr "Inicialize o man:gmirror[8] em cada partição."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:271
+msgid ""
+"Note that `-F` is used for the swap partition. This instructs man:gmirror[8] "
+"to assume that the device is in the consistent state after the power/system "
+"failure."
+msgstr ""
+"Note que `-F` é usado para a partição swap. Isso instrui o man:gmirror[8] a "
+"assumir que o dispositivo está em um estado consistente após uma falha de "
+"energia/sistema."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:273
+msgid "Create a UFS2 file system on each mirrored partition."
+msgstr "Crie um sistema de arquivos UFS2 em cada partição espelhada."
+
+#. type: Title ===
+#: documentation/content/en/articles/remote-install/_index.adoc:274
+#, no-wrap
+msgid "System Installation"
+msgstr "Instalação do sistema"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:279
+msgid ""
+"This is the most important part. This section will describe how to actually "
+"install the minimal distribution of FreeBSD on the hard drives that we have "
+"prepared in the previous section. To accomplish this goal, all file systems "
+"need to be mounted so `sysinstall` may write the contents of FreeBSD to the "
+"hard drives:"
+msgstr ""
+"Esta é a parte mais importante. Esta seção irá descrever como instalar a "
+"distribuição mínima do FreeBSD nos discos rígidos que preparamos na seção "
+"anterior. Para atingir este objetivo, todos os sistemas de arquivos precisam "
+"ser montados para que o `sysinstall` possa gravar o conteúdo do FreeBSD nos "
+"discos rígidos:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:286
+#, no-wrap
+msgid ""
+"# mount /dev/mirror/root /mnt\n"
+"# mkdir /mnt/var /mnt/usr\n"
+"# mount /dev/mirror/var /mnt/var\n"
+"# mount /dev/mirror/usr /mnt/usr\n"
+msgstr ""
+"# mount /dev/mirror/root /mnt\n"
+"# mkdir /mnt/var /mnt/usr\n"
+"# mount /dev/mirror/var /mnt/var\n"
+"# mount /dev/mirror/usr /mnt/usr\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:293
+msgid ""
+"When you are done, start man:sysinstall[8]. Select the [."
+"guimenuitem]#Custom# installation from the main menu. Select [."
+"guimenuitem]#Options# and press kbd:[Enter]. With the help of arrow keys, "
+"move the cursor on the `Install Root` item, press kbd:[Space] and change it "
+"to [.filename]#/mnt#. Press kbd:[Enter] to submit your changes and exit the "
+"[.guimenuitem]#Options# menu by pressing kbd:[q]."
+msgstr ""
+"Quando terminar, inicie o man:sysinstall[8]. Selecione a instalação [."
+"guimenuitem]#Custom# no menu principal. Selecione [.guimenuitem]#Opções# e "
+"pressione kbd:[Enter]. Com a ajuda das teclas de seta, mova o cursor no item "
+"`Install Root`, pressione kbd:[Espaço] e altere-o para [.filename]#/mnt#. "
+"Pressione kbd:[Enter] para enviar suas alterações e sair do menu [."
+"guimenuitem]#Opções# pressionando kbd:[q]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/remote-install/_index.adoc:297
+msgid ""
+"Note that this step is very important and if skipped, `sysinstall` will be "
+"unable to install FreeBSD."
+msgstr ""
+"Observe que este passo é muito importante e, se ignorado, o `sysinstall` "
+"será incapaz de instalar o FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:302
+msgid ""
+"Go to the [.guimenuitem]#Distributions# menu, move the cursor with the arrow "
+"keys to `Minimal`, and check it by pressing kbd:[Space]. This article uses "
+"the Minimal distribution in order to save network traffic, because the "
+"system itself will be installed over ftp. Exit this menu by choosing `Exit`."
+msgstr ""
+"Vá para o menu [.guimenuitem]#Distributions#, mova o cursor com as teclas de "
+"seta para `Minimal` e marque-a pressionando kbd:[Espaço]. Este artigo "
+"utiliza a distribuição Minimal para economizar tráfego de rede, pois o "
+"próprio sistema será instalado via ftp. Saia deste menu escolhendo `Exit`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/remote-install/_index.adoc:306
+msgid ""
+"The [.guimenuitem]#Partition# and [.guimenuitem]#Label# menus will be "
+"skipped, as these are useless now."
+msgstr ""
+"Os menus [.guimenuitem]#Partition# e [.guimenuitem]#Label# serão ignorados, "
+"pois são inúteis neste momento."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:311
+msgid ""
+"In the [.guimenuitem]#Media# menu, select `FTP`. Select the nearest mirror "
+"and let `sysinstall` assume that the network is already configured. You "
+"will be returned back to the [.guimenuitem]#Custom# menu."
+msgstr ""
+"Na tela do menu [.guimenuitem]#Media#[/guimenuitem], selecione a opção \"FTP"
+"\". Escolha o espelho mais próximo e deixe que o `sysinstall` assuma que a "
+"rede já está configurada. Você será levado de volta ao menu [."
+"guimenuitem]#Custom#."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:314
+msgid ""
+"Finally, perform the system installation by selecting the last option, [."
+"guimenuitem]#Commit#. Exit `sysinstall` when it finishes the installation."
+msgstr ""
+"Por fim, execute a instalação do sistema selecionando a última opção, [."
+"guimenuitem]#Commit#. Saia do `sysinstall` quando a instalação for concluída."
+
+#. type: Title ===
+#: documentation/content/en/articles/remote-install/_index.adoc:315
+#, no-wrap
+msgid "Post Installation Steps"
+msgstr "Etapas pós-instalação"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:319
+msgid ""
+"The FreeBSD operating system should be installed now; however, the process "
+"is not finished yet. It is necessary to perform some post installation "
+"steps in order to allow FreeBSD to boot in the future and to be able to log "
+"in to the system."
+msgstr ""
+"O sistema operacional FreeBSD deve estar instalado agora; no entanto, o "
+"processo ainda não está concluído. É necessário realizar algumas etapas pós-"
+"instalação para permitir que o FreeBSD seja inicializado no futuro e para "
+"poder fazer login no sistema."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:322
+msgid ""
+"You must now man:chroot[8] into the freshly installed system in order to "
+"finish the installation. Use the following command:"
+msgstr ""
+"Agora você deve executar o comando `man:chroot[8]` no sistema recém-"
+"instalado para concluir a instalação. Use o seguinte comando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:326
+#, no-wrap
+msgid "# chroot /mnt\n"
+msgstr "# chroot /mnt\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:329
+msgid "To complete our goal, perform these steps:"
+msgstr "Para completar nosso objetivo, execute estas etapas:"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:331
+msgid "Copy the `GENERIC` kernel to the [.filename]#/boot/kernel# directory:"
+msgstr "Copie o kernel `GENERIC` para o diretório [.filename]#/boot/kernel#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:335
+#, no-wrap
+msgid "# cp -Rp /boot/GENERIC/* /boot/kernel\n"
+msgstr "# cp -Rp /boot/GENERIC/* /boot/kernel\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:338
+msgid ""
+"Create the [.filename]#/etc/rc.conf#, [.filename]#/etc/resolv.conf# and [."
+"filename]#/etc/fstab# files. Do not forget to properly set the network "
+"information and to enable sshd in [.filename]#/etc/rc.conf#. The contents of "
+"[.filename]#/etc/fstab# will be similar to the following:"
+msgstr ""
+"Crie os arquivos [.filename]#/etc/rc.conf#, [.filename]#/etc/resolv.conf# e ["
+".filename]#/etc/fstab#. Não esqueça de definir corretamente as informações "
+"de rede e habilitar o sshd em [.filename]#/etc/rc.conf#. O conteúdo do [."
+"filename]#/etc/fstab# será semelhante ao seguinte:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:347
+#, no-wrap
+msgid ""
+"# Device Mountpoint FStype Options Dump Pass#\n"
+"/dev/mirror/swap none swap sw 0 0\n"
+"/dev/mirror/root / ufs rw 1 1\n"
+"/dev/mirror/usr /usr ufs rw 2 2\n"
+"/dev/mirror/var /var ufs rw 2 2\n"
+"/dev/cd0 /cdrom cd9660 ro,noauto 0 0\n"
+msgstr ""
+"# Device Mountpoint FStype Options Dump Pass#"
+"\n"
+"/dev/mirror/swap none swap sw 0 0\n"
+"/dev/mirror/root / ufs rw 1 1\n"
+"/dev/mirror/usr /usr ufs rw 2 2\n"
+"/dev/mirror/var /var ufs rw 2 2\n"
+"/dev/cd0 /cdrom cd9660 ro,noauto 0 0\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:349
+msgid "Create [.filename]#/boot/loader.conf# with the following contents:"
+msgstr "Crie o arquivo [.filename]#/boot/loader.conf# com o seguinte conteúdo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:354
+#, no-wrap
+msgid ""
+"geom_mirror_load=\"YES\"\n"
+"zfs_load=\"YES\"\n"
+msgstr ""
+"geom_mirror_load=\"YES\"\n"
+"zfs_load=\"YES\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:356
+msgid ""
+"Perform the following command, which will make ZFS available on the next "
+"boot:"
+msgstr ""
+"Execute o seguinte comando, que permitirá o ZFS ser utilizado no próximo "
+"boot:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:360
+#, no-wrap
+msgid "# sysrc zfs_enable=\"YES\"\n"
+msgstr "# sysrc zfs_enable=\"YES\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:363
+msgid ""
+"Add additional users to the system using the man:adduser[8] tool. Do not "
+"forget to add a user to the `wheel` group so you may obtain root access "
+"after the reboot."
+msgstr ""
+"Adicione usuários adicionais ao sistema usando a ferramenta man:adduser[8]. "
+"Não se esqueça de adicionar um usuário ao grupo `wheel` para que possa obter "
+"acesso de root após a reinicialização."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:364
+msgid "Double-check all your settings."
+msgstr "Verifique todas as suas configurações."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:367
+msgid ""
+"The system should now be ready for the next boot. Use the man:reboot[8] "
+"command to reboot your system."
+msgstr ""
+"O sistema deve estar pronto para a próxima inicialização. Use o comando "
+"man:reboot[8] para reiniciar o sistema."
+
+#. type: Title ==
+#: documentation/content/en/articles/remote-install/_index.adoc:369
+#, no-wrap
+msgid "ZFS"
+msgstr "ZFS"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:373
+msgid ""
+"If your system survived the reboot, it should now be possible to log in. "
+"Welcome to the fresh FreeBSD installation, performed remotely without the "
+"use of a remote console!"
+msgstr ""
+"Se o seu sistema sobreviveu ao reboot, agora deve ser possível fazer login. "
+"Bem-vindo à nova instalação do FreeBSD, realizada remotamente sem o uso de "
+"um console remoto!"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:376
+msgid ""
+"The only remaining step is to configure man:zpool[8] and create some man:"
+"zfs[8] file systems. Creating and administering ZFS is very "
+"straightforward. First, create a mirrored pool:"
+msgstr ""
+"O único passo restante é configurar o man:zpool[8] e criar alguns sistemas "
+"de arquivos man:zfs[8]. Criar e administrar ZFS é muito simples. Primeiro, "
+"crie um pool espelhado:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:380
+#, no-wrap
+msgid "# zpool create tank mirror /dev/ad[01]s1f\n"
+msgstr "# zpool create tank mirror /dev/ad[01]s1f\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:383
+msgid "Next, create some file systems:"
+msgstr "Em seguida, crie alguns sistemas de arquivos:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:392
+#, no-wrap
+msgid ""
+"# zfs create tank/ports\n"
+"# zfs create tank/src\n"
+"# zfs set compression=gzip tank/ports\n"
+"# zfs set compression=on tank/src\n"
+"# zfs set mountpoint=/usr/ports tank/ports\n"
+"# zfs set mountpoint=/usr/src tank/src\n"
+msgstr ""
+"# zfs create tank/ports\n"
+"# zfs create tank/src\n"
+"# zfs set compression=gzip tank/ports\n"
+"# zfs set compression=on tank/src\n"
+"# zfs set mountpoint=/usr/ports tank/ports\n"
+"# zfs set mountpoint=/usr/src tank/src\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:395
+msgid ""
+"That is all. If you are interested in more details about ZFS on FreeBSD, "
+"please refer to the https://wiki.freebsd.org/ZFS[ZFS] section of the FreeBSD "
+"Wiki."
+msgstr ""
+"Isso é tudo. Se você estiver interessado em mais detalhes sobre o ZFS no "
+"FreeBSD, consulte a seção https://wiki.freebsd.org/ZFS[ZFS] do Wiki do "
+"FreeBSD."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/solid-state/_index.adoc b/documentation/content/pt-br/articles/solid-state/_index.adoc
index 5a341e5b9d..1fa708c6e3 100644
--- a/documentation/content/pt-br/articles/solid-state/_index.adoc
+++ b/documentation/content/pt-br/articles/solid-state/_index.adoc
@@ -1,9 +1,12 @@
---
-title: FreeBSD e Dispositivos de Estado Sólido
authors:
- - author: John Kozubik
+ -
+ author: 'John Kozubik'
email: john@kozubik.com
-copyright: 2001, 2009 Projeto de Documentação do FreeBSD
+copyright: '2001 - 2021 The FreeBSD Documentation Project'
+description: 'O uso de dispositivos de disco de estado sólido no FreeBSD'
+tags: ["Solid State", "embedded", "FreeBSD"]
+title: 'FreeBSD e Dispositivos de Estado Sólido'
trademarks: ["freebsd", "general"]
---
@@ -43,7 +46,7 @@ Resumo
Este artigo aborda o uso de dispositivos de disco de estado sólido no FreeBSD para criar sistemas embarcados.
-Os sistemas embarcados têm a vantagem de uma maior estabilidade devido à ausência de partes móveis (discos rígidos). No entanto, é preciso ter em conta que o espaço disponível em disco é geralmente baixo no sistema e a durabilidade do meio de armazenamento.
+Os sistemas embarcados têm a vantagem de maior estabilidade devido à falta de partes móveis integradas (discos rígidos). No entanto, é preciso levar em conta o espaço disponível no sistema que geralmente é baixo e a durabilidade do meio de armazenamento.
Tópicos específicos a serem abordados incluem os tipos e atributos das mídia de estado sólido adequadas para uso como disco no FreeBSD, opções de kernel que são de interesse em tal ambiente, os mecanismos [.filename]#rc.initdiskless# que automatizam a inicialização de tais sistemas e a necessidade de sistemas de arquivos read-only e a construção de sistemas de arquivos a partir do zero. O artigo será concluído com algumas estratégias gerais para ambientes FreeBSD pequenos e read-only .
@@ -65,7 +68,7 @@ Outras soluções de disco de estado sólido existem, mas seu custo, obscuridade
Algumas opções do kernel são de interesse específico para aqueles que criam sistemas FreeBSD embarcados.
-Todos os sistemas embarcados FreeBSD que usam memória flash como disco para o sistema estarão interessados ​​em usar discos em memória e sistemas de arquivos em memória. Devido ao número limitado de gravações que podem ser feitas na memória flash, o disco e os sistemas de arquivos no disco provavelmente serão montados como read-only. Nesse ambiente, sistemas de arquivos tais como [.filename]#/tmp# e [.filename]#/var# são montados como sistemas de arquivos em memória para permitir que o sistema crie logs e atualize contadores e arquivos temporários. Os sistemas de arquivos em memória são um componente crítico para uma implementação bem-sucedida do FreeBSD em dispositivos de estado sólido.
+Todos os sistemas FreeBSD embarcados que utilizam memória flash como disco do sistema terão interesse em discos em memória e sistemas de arquivos em memória. Devido ao número limitado de gravações que podem ser feitas na memória flash, o disco e os sistemas de arquivos no disco provavelmente serão montados como read-only. Nesse ambiente, sistemas de arquivos como [.filename]#/tmp# e [.filename]#/var# são montados como sistemas de arquivos em memória para permitir que o sistema crie logs e atualize contadores e arquivos temporários. Sistemas de arquivos em memória são um componente crítico para uma implementação bem-sucedida do FreeBSD usandp discos de estado sólido.
Você deve ter certeza de que as seguintes linhas existem no seu arquivo de configuração do kernel:
@@ -77,11 +80,11 @@ pseudo-device md # memory disk
....
[[ro-fs]]
-== O Subsistema `rc` e os Sistemas de Arquivos Read-Only
+== O Subsistema `rc` e Sistemas de ArquivosRead-Only
A inicialização pós-boot de um sistema FreeBSD embarcado é controlada por [.filename]#/etc/rc.initdiskless#.
-O [.filename]#/etc/rc.d/var# monta o [.filename]#/var# como um sistema de arquivos em memória, cria uma lista configurável de diretórios em [.filename]#/var# com o comando man:mkdir[1] e altera os modos em alguns desses diretórios. Na execução do [.filename]#/etc/rc.d/var#, uma outra variável [.filename]#rc.conf# entra em jogo – `varsize`. Uma partição [.filename]#/var# é criada por [.filename]#/etc/rc.d/var# baseado no valor desta variável em [.filename]#rc.conf#:
+O [.filename]#/etc/rc.d/var# monta o [.filename]#/var# como um sistema de arquivos em memória, cria uma lista configurável de diretórios em [.filename]#/var# com o comando man:mkdir[1] e altera modos em alguns desses diretórios. Na execução do [.filename]#/etc/rc.d/var#, outra variável [.filename]#rc.conf# entra em ação - `varsize`. Uma partição [.filename]#/var# é criada por [.filename]#/etc/rc.d/var# com base no valor dessa variável em [.filename]#rc.conf#:
[.programlisting]
....
@@ -102,104 +105,106 @@ Alguns aplicativos no sistema começarão a falhar imediatamente como resultado
Uma coisa importante para lembrar é que um sistema de arquivos que foi montado como read-only com o [.filename]#/etc/fstab# pode ser colocado em modo read-write a qualquer momento, executando o comando:
-[source,shell]
+[source, shell]
....
# /sbin/mount -uw partition
....
-e pode ser alternado de volta para somente leitura com o comando:
+e pode ser alternado de volta para read-only com o comando:
-[source,shell]
+[source, shell]
....
# /sbin/mount -ur partition
....
== Construindo um sistema de arquivos a partir do zero
-Como os cartões Compact Flash compatíveis com ATA são vistos pelo FreeBSD como discos rígidos IDE normais, você poderia teoricamente instalar o FreeBSD a partir da rede usando o os disquetes do kern e mfsroot ou de um CD.
+Como os cartões compact-flash compatíveis com ATA são vistos pelo FreeBSD como discos rígidos IDE normais, você poderia teoricamente instalar o FreeBSD a partir da rede usando os disquetes kern e mfsroot ou a partir de um CD.
-No entanto, mesmo uma pequena instalação do FreeBSD utilizando procedimentos normais de instalação pode produzir um sistema com tamanho maior que 200 megabytes. Como a maioria das pessoas usará dispositivos de memória flash menores (128 megabytes são considerados razoavelmente grandes - 32 ou até mesmo 16 megabytes são comuns), uma instalação usando mecanismos normais não será possível - simplesmente não há espaço em disco suficiente nem para as menores instalações convencionais.
+No entanto, mesmo uma pequena instalação do FreeBSD usando procedimentos normais de instalação pode resultar em um sistema de tamanho superior a 200 megabytes. A maioria das pessoas estará usando dispositivos de memória flash menores (128 megabytes é considerado bastante grande - 32 ou até 16 megabytes são comuns), então uma instalação usando mecanismos normais não é possível - simplesmente não há espaço em disco suficiente nem mesmo para a menor das instalações convencionais.
A maneira mais fácil de superar essa limitação de espaço é instalar o FreeBSD usando meios convencionais em um disco rígido normal. Após a conclusão da instalação, reduza o sistema operacional para um tamanho que caiba na mídia flash e compacte o sistema de arquivos inteiro com o tar. Os passos seguintes irão guiá-lo através do processo de preparação de uma parte da memória flash para o seu sistema de arquivos compactado com o tar. Lembre-se de que não estamos executando uma instalação normal, logo as operações como particionamento, criação dos labels, criação do sistema de arquivos, etc. precisam ser executadas manualmente. Além dos disquetes do kern e mfsroot, você também precisará usar o disquete do fixit.
[.procedure]
+====
. Particionando seu Dispositivo de Mídia Flash
-+
-Após inicializar com os disquetes do kern e mfsroot, escolha `custom` no menu de instalação. No menu de instalação personalizada, escolha `partition`. No menu de partições, você deve apagar todas as partições existentes usando a tecla kbd:[d]. Depois de excluir todas as partições existentes, crie uma partição usando a tecla kbd:[c] e aceite o valor padrão para o tamanho da partição. Quando perguntado sobre o tipo da partição, certifique-se de que o valor esteja configurado para `165`. Agora escreva esta tabela de partições no disco pressionando kbd:[w] (esta é uma opção oculta nesta tela). Se você estiver usando um cartão compact flash compatível com ATA, deverá escolher o FreeBSD Boot Manager. Agora pressione kbd:[q] para sair do menu de partições. Você verá novamente o menu do gerenciador de inicialização - repita a escolha feita anteriormente.
++
+Após inicializar com os disquetes kern e mfsroot, escolha `custom` no menu de instalação. No menu de instalação personalizada, escolha `partition`. No menu de partição, você deve excluir todas as partições existentes usando kbd:[d]. Após excluir todas as partições existentes, crie uma partição usando kbd:[c] e aceite o valor padrão para o tamanho da partição. Quando questionado sobre o tipo da partição, certifique-se de que o valor esteja definido como `165`. Agora, escreva essa tabela de partição no disco pressionando kbd:[w] (esta é uma opção oculta nesta tela). Se você estiver usando um cartão compact flash compatível com ATA, escolha o Gerenciador de Inicialização do FreeBSD. Agora pressione kbd:[q] para sair do menu de partição. O menu do gerenciador de inicialização será exibido novamente - repita a escolha que fez anteriormente.
. Criando Sistemas de Arquivos em seu Dispositivo de Memória Flash
-+
-Saia do menu de instalação personalizada e, no menu de instalação principal, escolha a opção `fixit`. Depois de entrar no ambiente do fixit, digite o seguinte comando:
+
-[source,shell]
+Saia do menu de instalação personalizada e, no menu principal de instalação, escolha a opção `fixit`. Depois de entrar no ambiente fixit, insira o seguinte comando:
++
+[source, shell]
....
# disklabel -e /dev/ad0c
....
-+
++
Neste ponto, você terá entrado no editor vi sob os auspícios do comando disklabel. Em seguida, você precisa adicionar uma linha `a:` no final do arquivo. Esta linha `a:` deve ser semelhante a linha abaixo:
+
[.programlisting]
....
a: 123456 0 4.2BSD 0 0
....
-+
-Onde _123456_ é um número o qual é exatamente o mesmo que o número existente na entrada `c:` para o tamanho. Basicamente, você está duplicando a linha `c:` existente como uma linha `a:`, certifique-se de que o fstype seja `4.2BSD`. Salve o arquivo e saia.
+
-[source,shell]
+Onde _123456_ é um número exatamente igual ao número na entrada `c:` existente para o tamanho. Basicamente, você está duplicando a linha `c:` existente como uma linha `a:`, certificando-se de que o fstype seja `4.2BSD`. Salve o arquivo e saia.
++
+[source, shell]
....
# disklabel -B -r /dev/ad0c
# newfs /dev/ad0a
....
. Colocando seu Sistema de Arquivos na Mídia Flash
-+
++
Monte a mídia flash recém-preparada:
+
-[source,shell]
+[source, shell]
....
# mount /dev/ad0a /flash
....
-+
++
Coloque esta máquina na rede para que possamos transferir nosso arquivo tar e extrai-lo em nosso sistema de arquivos de mídia flash. Um exemplo de como fazer isso é:
+
-[source,shell]
+[source, shell]
....
# ifconfig xl0 192.168.0.10 netmask 255.255.255.0
# route add default 192.168.0.1
....
-+
++
Agora que a máquina está na rede, transfira seu arquivo tar. Você pode se deparar com um pequeno dilema neste ponto - se a sua memória flash tiver por exemplo 128 megabytes, e seu arquivo tar for maior que 64 megabytes, você não poderá ter o seu arquivo tar na mídia flash ao mesmo tempo em que realiza a descompressão - você ficará sem espaço. Uma solução para esse problema, se você estiver usando FTP, é descompactar o arquivo enquanto ele é transferido por FTP. Se você realizar sua transferência desta maneira, você nunca terá o arquivo tar e o conteúdo do tar em seu disco ao mesmo tempo:
+
-[source,shell]
+[source, shell]
....
ftp> get tarfile.tar "| tar xvf -"
....
-+
++
Se o seu arquivo tar estiver gzipado, você pode fazer isso também:
+
-[source,shell]
+[source, shell]
....
ftp> get tarfile.tar "| zcat | tar xvf -"
....
-+
++
Depois que o conteúdo do seu sistema de arquivos compactado pelo tar estiver no sistema de arquivos da sua memória flash, você poderá desmontar a memória flash e reinicializar:
+
-[source,shell]
+[source, shell]
....
# cd /
# umount /flash
# exit
....
-+
++
Assumindo que você configurou seu sistema de arquivos corretamente quando ele foi construído no disco rígido normal (com seus sistemas de arquivos montado como read-only, e com as opções necessárias compiladas no kernel) você agora deve inicializar com sucesso seu sistema embarcado FreeBSD.
+====
[[strategies]]
-== Estratégias do Sistema para Ambientes Pequenos e Somente Leitura
+== Estratégias do Sistema para Ambientes Pequenos e Read-Only
-Em <<ro-fs>>, foi apontado que o sistema de arquivos [.filename]#/var# construído pelo [.filename]#/etc/rc.d/var# e a presença de um sistema de arquivos raiz read-only causa problemas com muitos pacotes de software comuns usados ​​com o FreeBSD. Neste artigo, serão fornecidas sugestões para a execução bem-sucedida do cron, do syslog, instalações de ports e do servidor Web Apache.
+Em <<ro-fs>>, foi apontado que o sistema de arquivos [.filename]#/var# construído pelo [.filename]#/etc/rc.d/var# e a presença de um sistema de arquivos raiz read-only causa problemas com muitos pacotes de software comuns usados com o FreeBSD. Neste artigo, serão fornecidas sugestões para a execução bem-sucedida do cron, do syslog, instalações de ports e do servidor Web Apache.
=== Cron
-Na inicialização, o [.filename]#/var# é preenchido pelo [.filename]#/etc/rc.d/var# usando a lista disponível em [.filename]#/etc/mtree/BSD.var.dist#, então o [.filename]#cron#, o [.filename]#cron/tabs#, [.filename]#at#, e alguns outros diretórios padrões são criados.
+Ao inicializar, o [.filename]#/var# é preenchido por [.filename]#/etc/rc.d/var# usando a lista de [.filename]#/etc/mtree/BSD.var.dist#, então os diretórios [.filename]#cron#, [.filename]#cron/tabs#, [.filename]#at# e alguns outros diretórios padrões são criados.
No entanto, isso não resolve o problema de manter as crontabs entre nas reinicializações. Quando o sistema for reinicializado, o sistema de arquivos [.filename]#/var# que está na memória desaparecerá e todas as crontabs que você tenha nele também desaparecerão. Portanto, uma solução seria criar crontabs para os usuários que precisam delas, montar seu sistema de arquivos [.filename]#/# como read-write e copiar estas crontabs para algum lugar seguro, como [.filename]#/etc/tabs#, em seguida, adicione uma linha ao final do [.filename]#/etc/rc.initdiskless# que copie estes crontabs para [.filename]#/var/cron/tabs# depois que o diretório for criado durante inicialização do sistema. Você também pode precisar adicionar uma linha que altere modos e permissões nos diretórios criados e nos arquivos copiados com [.filename]#/etc/rc.initdiskless#.
@@ -207,7 +212,7 @@ No entanto, isso não resolve o problema de manter as crontabs entre nas reinici
O [.filename]#syslog.conf# especifica os locais de certos arquivos de log que existem em [.filename]#/var/log#. Esses arquivos não são criados pelo [.filename]#/etc/rc.d/var# na inicialização do sistema. Portanto, em algum lugar do [.filename]#/etc/rc.d/var#, logo após a seção que cria os diretórios em [.filename]#/var#, você precisará adicionar algo como isto:
-[source,shell]
+[source, shell]
....
# touch /var/log/security /var/log/maillog /var/log/cron /var/log/messages
# chmod 0644 /var/log/*
@@ -217,23 +222,23 @@ O [.filename]#syslog.conf# especifica os locais de certos arquivos de log que ex
Antes de discutir as alterações necessárias para usar com êxito a árvore de ports, é necessário um lembrete sobre a natureza read-only dos seus sistemas de arquivos na mídia flash. Como eles são read-only, você precisará montá-los temporariamente para read-write usando a sintaxe de montagem mostrada em <<ro-fs>>. Você sempre deve remontar esses sistemas de arquivos no modo read-only quando tiver terminado qualquer manutenção - gravações desnecessárias na mídia flash podem reduzir consideravelmente sua vida útil.
-Para tornar possível entrar em um diretório do ports e executar com sucesso o comando make `install`, devemos criar um diretório de pacotes em um sistema de arquivos que não esteja localizado na memória o qual manterá o controle dos nossos pacotes entre as reinicializações . Como é necessário montar seus sistemas de arquivos como read-write para a instalação de um pacote, é sensato supor que uma área na mídia flash também possa ser usada para que as informações do pacote sejam gravadas.
+Para tornar possível entrar em um diretório do ports e executar com sucesso o comando `make install`, devemos criar um diretório de pacotes em um sistema de arquivos que não seja de memória e que acompanhe nossos pacotes entre as reinicializações. Como é necessário montar seus sistemas de arquivos como leitura-gravação para a instalação de um pacote de qualquer maneira, é sensato supor que uma área na mídia flash também possa ser usada para gravar informações do pacote.
Primeiro, crie o diretório do banco de dados de pacotes. Ele fica normalmente em [.filename]#/var/db/pkg#, mas não podemos colocá-lo lá, pois ele irá desaparecer toda vez que o sistema for inicializado.
-[source,shell]
+[source, shell]
....
# mkdir /etc/pkg
....
-Agora, adicione uma linha ao arquivo [.filename]#/etc/rc.d/var# que vincule o [.filename]#/etc/pkg# ao [.filename]#/var/db/pkg#. Um exemplo:
+Agora, adicione uma linha em [.filename]#/etc/rc.d/var# que vincule o diretório [.filename]#/etc/pkg# a [.filename]#/var/db/pkg#. Um exemplo:
-[source,shell]
+[source, shell]
....
# ln -s /etc/pkg /var/db/pkg
....
-Agora, sempre que montar seus sistemas de arquivos como read-write e instalar um pacote, o make `install` funcionará e as informações do pacote serão gravadas com êxito em [.filename]#/etc/pkg# (porque o sistema de arquivos será, naquele momento, montado como read-write) que estará sempre disponível para o sistema operacional como [.filename]#/var/db/pkg#.
+Agora, sempre que você montar seus sistemas de arquivos como leitura-gravação e instalar um pacote, o `make install` funcionará, e as informações do pacote serão gravadas com sucesso em [.filename]#/etc/pkg# (porque o sistema de arquivos estará, naquele momento, montado como leitura-gravação), que sempre estará disponível para o sistema operacional como [.filename]#/var/db/pkg#.
=== Servidor Web Apache
@@ -242,21 +247,21 @@ Agora, sempre que montar seus sistemas de arquivos como read-write e instalar um
As etapas nesta seção são necessárias apenas se o Apache estiver configurado para gravar suas informações de pid ou log fora do [.filename]#/var#. Por padrão, o Apache mantém seu arquivo pid em [.filename]#/var/run/httpd.pid# e seus arquivos de log em [.filename]#/var/log#.
====
-Agora é assumido que o Apache mantém seus arquivos de log em um diretório [.filename]#apache_log_dir# fora do [.filename]#/var#. Quando esse diretório reside em um sistema de arquivos read-only, o Apache não poderá salvar nenhum arquivo de log e pode ter problemas para funcionar. Se assim for, é necessário adicionar um novo diretório à lista de diretórios em [.filename]#/etc/rc.d/var# para criar no [.filename]#/var# e vincular [.filename]#apache_log_dir# ao [.filename]#/var/log/apache#. Também é necessário definir permissões e propriedade neste novo diretório.
+Agora, supõe-se que o Apache mantém seus arquivos de log em um diretório [.filename]#apache_log_dir# fora do [.filename]#/var#. Quando esse diretório está em um sistema de arquivos somente leitura, o Apache não poderá salvar nenhum arquivo de log e pode ter problemas para funcionar. Se for o caso, é necessário adicionar um novo diretório à lista de diretórios em [.filename]#/etc/rc.d/var# para criar em [.filename]#/var# e vincular o [.filename]#apache_log_dir# ao [.filename]#/var/log/apache#. Também é necessário definir as permissões e o proprietário deste novo diretório.
Primeiro, adicione o diretório `log/apache` à lista de diretórios a serem criados em [.filename]#/etc/rc.d/var#.
Segundo, adicione estes comandos ao [.filename]#/etc/rc.d/var# após a seção de criação do diretório:
-[source,shell]
+[source, shell]
....
# chmod 0774 /var/log/apache
# chown nobody:nobody /var/log/apache
....
-Por fim, remova o diretório [.filename]#apache_log_dir# existente e substitua-o por um link:
+Por fim, remova o diretório existente [.filename]#apache_log_dir# e substitua-o por um link:
-[source,shell]
+[source, shell]
....
# rm -rf apache_log_dir
# ln -s /var/log/apache apache_log_dir
diff --git a/documentation/content/pt-br/articles/solid-state/_index.po b/documentation/content/pt-br/articles/solid-state/_index.po
new file mode 100644
index 0000000000..43ff1a682c
--- /dev/null
+++ b/documentation/content/pt-br/articles/solid-state/_index.po
@@ -0,0 +1,907 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: 2023-04-29 13:34+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlessolid-state_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/solid-state/_index.adoc:1
+#, no-wrap
+msgid "The use of solid state disk devices in FreeBSD"
+msgstr "O uso de dispositivos de disco de estado sólido no FreeBSD"
+
+#. type: Title =
+#: documentation/content/en/articles/solid-state/_index.adoc:1
+#: documentation/content/en/articles/solid-state/_index.adoc:12
+#, no-wrap
+msgid "FreeBSD and Solid State Devices"
+msgstr "FreeBSD e Dispositivos de Estado Sólido"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:45
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:47
+msgid ""
+"This article covers the use of solid state disk devices in FreeBSD to create "
+"embedded systems."
+msgstr ""
+"Este artigo aborda o uso de dispositivos de disco de estado sólido no "
+"FreeBSD para criar sistemas embarcados."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:50
+msgid ""
+"Embedded systems have the advantage of increased stability due to the lack "
+"of integral moving parts (hard drives). Account must be taken, however, for "
+"the generally low disk space available in the system and the durability of "
+"the storage medium."
+msgstr ""
+"Os sistemas embarcados têm a vantagem de maior estabilidade devido à falta "
+"de partes móveis integradas (discos rígidos). No entanto, é preciso levar em "
+"conta o espaço disponível no sistema que geralmente é baixo e a durabilidade "
+"do meio de armazenamento."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:53
+msgid ""
+"Specific topics to be covered include the types and attributes of solid "
+"state media suitable for disk use in FreeBSD, kernel options that are of "
+"interest in such an environment, the [.filename]#rc.initdiskless# mechanisms "
+"that automate the initialization of such systems and the need for read-only "
+"filesystems, and building filesystems from scratch. The article will "
+"conclude with some general strategies for small and read-only FreeBSD "
+"environments."
+msgstr ""
+"Tópicos específicos a serem abordados incluem os tipos e atributos das mídia "
+"de estado sólido adequadas para uso como disco no FreeBSD, opções de kernel "
+"que são de interesse em tal ambiente, os mecanismos [.filename]#rc."
+"initdiskless# que automatizam a inicialização de tais sistemas e a "
+"necessidade de sistemas de arquivos read-only e a construção de sistemas de "
+"arquivos a partir do zero. O artigo será concluído com algumas estratégias "
+"gerais para ambientes FreeBSD pequenos e read-only ."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:55
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/solid-state/_index.adoc:59
+#, no-wrap
+msgid "Solid State Disk Devices"
+msgstr "Dispositivos de Disco de Estado Sólido"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:69
+msgid ""
+"The scope of this article will be limited to solid state disk devices made "
+"from flash memory. Flash memory is a solid state memory (no moving parts) "
+"that is non-volatile (the memory maintains data even after all power sources "
+"have been disconnected). Flash memory can withstand tremendous physical "
+"shock and is reasonably fast (the flash memory solutions covered in this "
+"article are slightly slower than a EIDE hard disk for write operations, and "
+"much faster for read operations). One very important aspect of flash "
+"memory, the ramifications of which will be discussed later in this article, "
+"is that each sector has a limited rewrite capacity. You can only write, "
+"erase, and write again to a sector of flash memory a certain number of times "
+"before the sector becomes permanently unusable. Although many flash memory "
+"products automatically map bad blocks, and although some even distribute "
+"write operations evenly throughout the unit, the fact remains that there "
+"exists a limit to the amount of writing that can be done to the device. "
+"Competitive units have between 1,000,000 and 10,000,000 writes per sector in "
+"their specification. This figure varies due to the temperature of the "
+"environment."
+msgstr ""
+"O escopo deste artigo será limitado a dispositivos de disco de estado sólido "
+"feitos de memória flash. A memória flash é uma memória de estado sólido (sem "
+"partes móveis) que é não volátil (a memória mantém os dados mesmo depois de "
+"todas as fontes de energia terem sido desconectadas). A memória flash pode "
+"suportar um enorme choque físico e é razoavelmente rápida (as soluções de "
+"memória flash abordadas neste artigo são um pouco mais lentas que um disco "
+"rígido EIDE para operações de gravação e muito mais rápidas para operações "
+"de leitura). Um aspecto muito importante da memória flash, cujas "
+"ramificações serão discutidas mais adiante neste artigo, é que cada setor "
+"tem uma capacidade limitada de reescrita. Você só pode gravar, apagar e "
+"gravar novamente em um setor de memória flash um certo número de vezes antes "
+"que o setor fique permanentemente inutilizável. Embora muitos produtos de "
+"memória flash mapeiam automaticamente os blocos defeituosos, e embora alguns "
+"até distribuam operações de gravação uniformemente por toda a unidade, a "
+"verdade é que existe um limite para a quantidade de escrita que pode ser "
+"feita no dispositivo. Unidades competitivas possuem entre 1.000.000 e "
+"10.000.000 gravações por setor em suas especificações. Este valor varia com "
+"à temperatura do ambiente."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:74
+msgid ""
+"Specifically, we will be discussing ATA compatible compact-flash units, "
+"which are quite popular as storage media for digital cameras. Of particular "
+"interest is the fact that they pin out directly to the IDE bus and are "
+"compatible with the ATA command set. Therefore, with a very simple and low-"
+"cost adaptor, these devices can be attached directly to an IDE bus in a "
+"computer. Once implemented in this manner, operating systems such as "
+"FreeBSD see the device as a normal hard disk (albeit small)."
+msgstr ""
+"Especificamente, estaremos discutindo unidades compact-flash compatíveis com "
+"ATA, as quais são bastante populares como mídia de armazenamento para "
+"câmeras digitais. De particular interesse é o fato de que eles são fixados "
+"diretamente no barramento IDE e são compatíveis com o conjunto de comandos "
+"ATA. Portanto, com um adaptador muito simples e de baixo custo, esses "
+"dispositivos podem ser conectados diretamente a um barramento IDE em um "
+"computador. Uma vez implementado desta maneira, sistemas operacionais como o "
+"FreeBSD vêem o dispositivo como um disco rígido normal (embora pequeno)."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:76
+msgid ""
+"Other solid state disk solutions do exist, but their expense, obscurity, and "
+"relative unease of use places them beyond the scope of this article."
+msgstr ""
+"Outras soluções de disco de estado sólido existem, mas seu custo, "
+"obscuridade e relativa dificuldade de uso os colocam além do escopo deste "
+"artigo."
+
+#. type: Title ==
+#: documentation/content/en/articles/solid-state/_index.adoc:78
+#, no-wrap
+msgid "Kernel Options"
+msgstr "Opções do Kernel"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:81
+msgid ""
+"A few kernel options are of specific interest to those creating an embedded "
+"FreeBSD system."
+msgstr ""
+"Algumas opções do kernel são de interesse específico para aqueles que criam "
+"sistemas FreeBSD embarcados."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:86
+msgid ""
+"All embedded FreeBSD systems that use flash memory as system disk will be "
+"interested in memory disks and memory filesystems. As a result of the "
+"limited number of writes that can be done to flash memory, the disk and the "
+"filesystems on the disk will most likely be mounted read-only. In this "
+"environment, filesystems such as [.filename]#/tmp# and [.filename]#/var# are "
+"mounted as memory filesystems to allow the system to create logs and update "
+"counters and temporary files. Memory filesystems are a critical component "
+"to a successful solid state FreeBSD implementation."
+msgstr ""
+"Todos os sistemas FreeBSD embarcados que utilizam memória flash como disco "
+"do sistema terão interesse em discos em memória e sistemas de arquivos em "
+"memória. Devido ao número limitado de gravações que podem ser feitas na "
+"memória flash, o disco e os sistemas de arquivos no disco provavelmente "
+"serão montados como read-only. Nesse ambiente, sistemas de arquivos como [."
+"filename]#/tmp# e [.filename]#/var# são montados como sistemas de arquivos "
+"em memória para permitir que o sistema crie logs e atualize contadores e "
+"arquivos temporários. Sistemas de arquivos em memória são um componente "
+"crítico para uma implementação bem-sucedida do FreeBSD usandp discos de "
+"estado sólido."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:88
+msgid ""
+"You should make sure the following lines exist in your kernel configuration "
+"file:"
+msgstr ""
+"Você deve ter certeza de que as seguintes linhas existem no seu arquivo de "
+"configuração do kernel:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:94
+#, no-wrap
+msgid ""
+"options MFS # Memory Filesystem\n"
+"options MD_ROOT # md device usable as a potential root device\n"
+"pseudo-device md # memory disk\n"
+msgstr ""
+"options MFS # Memory Filesystem\n"
+"options MD_ROOT # md device usable as a potential root "
+"device\n"
+"pseudo-device md # memory disk\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/solid-state/_index.adoc:97
+#, no-wrap
+msgid "The `rc` Subsystem and Read-Only Filesystems"
+msgstr "O Subsistema `rc` e Sistemas de ArquivosRead-Only"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:100
+msgid ""
+"The post-boot initialization of an embedded FreeBSD system is controlled by "
+"[.filename]#/etc/rc.initdiskless#."
+msgstr ""
+"A inicialização pós-boot de um sistema FreeBSD embarcado é controlada por [."
+"filename]#/etc/rc.initdiskless#."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:104
+msgid ""
+"[.filename]#/etc/rc.d/var# mounts [.filename]#/var# as a memory filesystem, "
+"makes a configurable list of directories in [.filename]#/var# with the man:"
+"mkdir[1] command, and changes modes on some of those directories. In the "
+"execution of [.filename]#/etc/rc.d/var#, one other [.filename]#rc.conf# "
+"variable comes into play - `varsize`. A [.filename]#/var# partition is "
+"created by [.filename]#/etc/rc.d/var# based on the value of this variable in "
+"[.filename]#rc.conf#:"
+msgstr ""
+"O [.filename]#/etc/rc.d/var# monta o [.filename]#/var# como um sistema de "
+"arquivos em memória, cria uma lista configurável de diretórios em [."
+"filename]#/var# com o comando man:mkdir[1] e altera modos em alguns desses "
+"diretórios. Na execução do [.filename]#/etc/rc.d/var#, outra variável [."
+"filename]#rc.conf# entra em ação - `varsize`. Uma partição [.filename]#/var# "
+"é criada por [.filename]#/etc/rc.d/var# com base no valor dessa variável em ["
+".filename]#rc.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:108
+#, no-wrap
+msgid "varsize=8192\n"
+msgstr "varsize=8192\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:111
+msgid "Remember that this value is in sectors by default."
+msgstr "Lembre-se de que esse valor é informado em setores, por padrão."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:118
+msgid ""
+"The fact that [.filename]#/var# is a read-write filesystem is an important "
+"distinction, as the [.filename]#/# partition (and any other partitions you "
+"may have on your flash media) should be mounted read-only. Remember that in "
+"<<intro>> we detailed the limitations of flash memory - specifically the "
+"limited write capability. The importance of not mounting filesystems on "
+"flash media read-write, and the importance of not using a swap file, cannot "
+"be overstated. A swap file on a busy system can burn through a piece of "
+"flash media in less than one year. Heavy logging or temporary file creation "
+"and destruction can do the same. Therefore, in addition to removing the "
+"`swap` entry from your [.filename]#/etc/fstab#, you should also change the "
+"Options field for each filesystem to `ro` as follows:"
+msgstr ""
+"O fato do [.filename]#/var# ser um sistema de arquivos read-write é uma "
+"distinção importante, pois a partição [.filename]#/# (e quaisquer outras "
+"partições que você possa ter em sua mídia flash) deve ser montada como read-"
+"only. Lembre-se que em <<intro>> detalhamos as limitações da memória flash - "
+"especificamente a capacidade de gravação limitada. A importância de não "
+"montar sistemas de arquivos em mídia flash em modo read-write, e a "
+"importância de não usar um arquivo de swap, não pode ser exagerado. Um "
+"arquivo de swap em um sistema ocupado pode inutilizar uma mídia flash em "
+"menos de um ano. Criação de log pesado ou criação e destruição de arquivos "
+"temporários podem fazer o mesmo. Portanto, além de remover a entrada `swap` "
+"do seu [.filename]#/etc/fstab#, você também deve alterar o campo Options "
+"para cada sistema de arquivos para `ro` como segue:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:123
+#, no-wrap
+msgid ""
+"# Device Mountpoint FStype Options Dump Pass#\n"
+"/dev/ad0s1a / ufs ro 1 1\n"
+msgstr ""
+"# Device Mountpoint FStype Options Dump Pass#"
+"\n"
+"/dev/ad0s1a / ufs ro 1 1\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:128
+msgid ""
+"A few applications in the average system will immediately begin to fail as a "
+"result of this change. For instance, cron will not run properly as a result "
+"of missing cron tabs in the [.filename]#/var# created by [.filename]#/etc/rc."
+"d/var#, and syslog and dhcp will encounter problems as well as a result of "
+"the read-only filesystem and missing items in the [.filename]#/var# that [."
+"filename]#/etc/rc.d/var# has created. These are only temporary problems "
+"though, and are addressed, along with solutions to the execution of other "
+"common software packages in <<strategies>>."
+msgstr ""
+"Alguns aplicativos no sistema começarão a falhar imediatamente como "
+"resultado desta alteração. Por exemplo, o cron não será executado "
+"corretamente como resultado da falta de crontabs no [.filename]#/var# criado "
+"pelo [.filename]#/etc/rc.d/var#, o syslog e o dhcp também irão encontrar "
+"problemas como resultado do sistema de arquivos estar em modo read-only e "
+"dos itens ausentes no [.filename]#/var# que o [.filename]#/etc/rc.d/var# "
+"criou. Estes são apenas problemas temporários, embora sejam abordados, "
+"juntamente com soluções para a execução de outros pacotes de software comuns "
+"em <<strategies>>."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:130
+msgid ""
+"An important thing to remember is that a filesystem that was mounted read-"
+"only with [.filename]#/etc/fstab# can be made read-write at any time by "
+"issuing the command:"
+msgstr ""
+"Uma coisa importante para lembrar é que um sistema de arquivos que foi "
+"montado como read-only com o [.filename]#/etc/fstab# pode ser colocado em "
+"modo read-write a qualquer momento, executando o comando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:134
+#, no-wrap
+msgid "# /sbin/mount -uw partition\n"
+msgstr "# /sbin/mount -uw partition\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:137
+msgid "and can be toggled back to read-only with the command:"
+msgstr "e pode ser alternado de volta para read-only com o comando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:141
+#, no-wrap
+msgid "# /sbin/mount -ur partition\n"
+msgstr "# /sbin/mount -ur partition\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/solid-state/_index.adoc:143
+#, no-wrap
+msgid "Building a File System from Scratch"
+msgstr "Construindo um sistema de arquivos a partir do zero"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:146
+msgid ""
+"Since ATA compatible compact-flash cards are seen by FreeBSD as normal IDE "
+"hard drives, you could theoretically install FreeBSD from the network using "
+"the kern and mfsroot floppies or from a CD."
+msgstr ""
+"Como os cartões compact-flash compatíveis com ATA são vistos pelo FreeBSD "
+"como discos rígidos IDE normais, você poderia teoricamente instalar o "
+"FreeBSD a partir da rede usando os disquetes kern e mfsroot ou a partir de "
+"um CD."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:149
+msgid ""
+"However, even a small installation of FreeBSD using normal installation "
+"procedures can produce a system in size of greater than 200 megabytes. Most "
+"people will be using smaller flash memory devices (128 megabytes is "
+"considered fairly large - 32 or even 16 megabytes is common), so an "
+"installation using normal mechanisms is not possible-there is simply not "
+"enough disk space for even the smallest of conventional installations."
+msgstr ""
+"No entanto, mesmo uma pequena instalação do FreeBSD usando procedimentos "
+"normais de instalação pode resultar em um sistema de tamanho superior a 200 "
+"megabytes. A maioria das pessoas estará usando dispositivos de memória flash "
+"menores (128 megabytes é considerado bastante grande - 32 ou até 16 "
+"megabytes são comuns), então uma instalação usando mecanismos normais não é "
+"possível - simplesmente não há espaço em disco suficiente nem mesmo para a "
+"menor das instalações convencionais."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:155
+msgid ""
+"The easiest way to overcome this space limitation is to install FreeBSD "
+"using conventional means to a normal hard disk. After the installation is "
+"complete, pare down the operating system to a size that will fit onto your "
+"flash media, then tar the entire filesystem. The following steps will guide "
+"you through the process of preparing a piece of flash memory for your tarred "
+"filesystem. Remember, because a normal installation is not being performed, "
+"operations such as partitioning, labeling, file-system creation, etc. need "
+"to be performed by hand. In addition to the kern and mfsroot floppy disks, "
+"you will also need to use the fixit floppy."
+msgstr ""
+"A maneira mais fácil de superar essa limitação de espaço é instalar o "
+"FreeBSD usando meios convencionais em um disco rígido normal. Após a "
+"conclusão da instalação, reduza o sistema operacional para um tamanho que "
+"caiba na mídia flash e compacte o sistema de arquivos inteiro com o tar. Os "
+"passos seguintes irão guiá-lo através do processo de preparação de uma parte "
+"da memória flash para o seu sistema de arquivos compactado com o tar. Lembre-"
+"se de que não estamos executando uma instalação normal, logo as operações "
+"como particionamento, criação dos labels, criação do sistema de arquivos, "
+"etc. precisam ser executadas manualmente. Além dos disquetes do kern e "
+"mfsroot, você também precisará usar o disquete do fixit."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:159
+msgid "Partitioning Your Flash Media Device"
+msgstr "Particionando seu Dispositivo de Mídia Flash"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:169
+msgid ""
+"After booting with the kern and mfsroot floppies, choose `custom` from the "
+"installation menu. In the custom installation menu, choose `partition`. In "
+"the partition menu, you should delete all existing partitions using kbd:"
+"[d]. After deleting all existing partitions, create a partition using kbd:"
+"[c] and accept the default value for the size of the partition. When asked "
+"for the type of the partition, make sure the value is set to `165`. Now "
+"write this partition table to the disk by pressing kbd:[w] (this is a hidden "
+"option on this screen). If you are using an ATA compatible compact flash "
+"card, you should choose the FreeBSD Boot Manager. Now press kbd:[q] to quit "
+"the partition menu. You will be shown the boot manager menu once more - "
+"repeat the choice you made earlier."
+msgstr ""
+"Após inicializar com os disquetes kern e mfsroot, escolha `custom` no menu "
+"de instalação. No menu de instalação personalizada, escolha `partition`. No "
+"menu de partição, você deve excluir todas as partições existentes usando "
+"kbd:[d]. Após excluir todas as partições existentes, crie uma partição "
+"usando kbd:[c] e aceite o valor padrão para o tamanho da partição. Quando "
+"questionado sobre o tipo da partição, certifique-se de que o valor esteja "
+"definido como `165`. Agora, escreva essa tabela de partição no disco "
+"pressionando kbd:[w] (esta é uma opção oculta nesta tela). Se você estiver "
+"usando um cartão compact flash compatível com ATA, escolha o Gerenciador de "
+"Inicialização do FreeBSD. Agora pressione kbd:[q] para sair do menu de "
+"partição. O menu do gerenciador de inicialização será exibido novamente - "
+"repita a escolha que fez anteriormente."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:170
+msgid "Creating Filesystems on Your Flash Memory Device"
+msgstr "Criando Sistemas de Arquivos em seu Dispositivo de Memória Flash"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:173
+msgid ""
+"Exit the custom installation menu, and from the main installation menu "
+"choose the `fixit` option. After entering the fixit environment, enter the "
+"following command:"
+msgstr ""
+"Saia do menu de instalação personalizada e, no menu principal de instalação, "
+"escolha a opção `fixit`. Depois de entrar no ambiente fixit, insira o "
+"seguinte comando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:177
+#, no-wrap
+msgid "# disklabel -e /dev/ad0c\n"
+msgstr "# disklabel -e /dev/ad0c\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:181
+msgid ""
+"At this point you will have entered the vi editor under the auspices of the "
+"disklabel command. Next, you need to add an `a:` line at the end of the "
+"file. This `a:` line should look like:"
+msgstr ""
+"Neste ponto, você terá entrado no editor vi sob os auspícios do comando "
+"disklabel. Em seguida, você precisa adicionar uma linha `a:` no final do "
+"arquivo. Esta linha `a:` deve ser semelhante a linha abaixo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:185
+#, no-wrap
+msgid "a: 123456 0 4.2BSD 0 0\n"
+msgstr "a: 123456 0 4.2BSD 0 0\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:190
+msgid ""
+"Where _123456_ is a number that is exactly the same as the number in the "
+"existing `c:` entry for size. Basically you are duplicating the existing `c:"
+"` line as an `a:` line, making sure that fstype is `4.2BSD`. Save the file "
+"and exit."
+msgstr ""
+"Onde _123456_ é um número exatamente igual ao número na entrada `c:` "
+"existente para o tamanho. Basicamente, você está duplicando a linha `c:` "
+"existente como uma linha `a:`, certificando-se de que o fstype seja `4.2BSD`"
+". Salve o arquivo e saia."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:195
+#, no-wrap
+msgid ""
+"# disklabel -B -r /dev/ad0c\n"
+"# newfs /dev/ad0a\n"
+msgstr ""
+"# disklabel -B -r /dev/ad0c\n"
+"# newfs /dev/ad0a\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:198
+msgid "Placing Your Filesystem on the Flash Media"
+msgstr "Colocando seu Sistema de Arquivos na Mídia Flash"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:200
+msgid "Mount the newly prepared flash media:"
+msgstr "Monte a mídia flash recém-preparada:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:204
+#, no-wrap
+msgid "# mount /dev/ad0a /flash\n"
+msgstr "# mount /dev/ad0a /flash\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:208
+msgid ""
+"Bring this machine up on the network so we may transfer our tar file and "
+"explode it onto our flash media filesystem. One example of how to do this "
+"is:"
+msgstr ""
+"Coloque esta máquina na rede para que possamos transferir nosso arquivo tar "
+"e extrai-lo em nosso sistema de arquivos de mídia flash. Um exemplo de como "
+"fazer isso é:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:213
+#, no-wrap
+msgid ""
+"# ifconfig xl0 192.168.0.10 netmask 255.255.255.0\n"
+"# route add default 192.168.0.1\n"
+msgstr ""
+"# ifconfig xl0 192.168.0.10 netmask 255.255.255.0\n"
+"# route add default 192.168.0.1\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:219
+msgid ""
+"Now that the machine is on the network, transfer your tar file. You may be "
+"faced with a bit of a dilemma at this point - if your flash memory part is "
+"128 megabytes, for instance, and your tar file is larger than 64 megabytes, "
+"you cannot have your tar file on the flash media at the same time as you "
+"explode it - you will run out of space. One solution to this problem, if "
+"you are using FTP, is to untar the file while it is transferred over FTP. "
+"If you perform your transfer in this manner, you will never have the tar "
+"file and the tar contents on your disk at the same time:"
+msgstr ""
+"Agora que a máquina está na rede, transfira seu arquivo tar. Você pode se "
+"deparar com um pequeno dilema neste ponto - se a sua memória flash tiver por "
+"exemplo 128 megabytes, e seu arquivo tar for maior que 64 megabytes, você "
+"não poderá ter o seu arquivo tar na mídia flash ao mesmo tempo em que "
+"realiza a descompressão - você ficará sem espaço. Uma solução para esse "
+"problema, se você estiver usando FTP, é descompactar o arquivo enquanto ele "
+"é transferido por FTP. Se você realizar sua transferência desta maneira, "
+"você nunca terá o arquivo tar e o conteúdo do tar em seu disco ao mesmo "
+"tempo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:223
+#, no-wrap
+msgid "ftp> get tarfile.tar \"| tar xvf -\"\n"
+msgstr "ftp> get tarfile.tar \"| tar xvf -\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:226
+msgid "If your tarfile is gzipped, you can accomplish this as well:"
+msgstr "Se o seu arquivo tar estiver gzipado, você pode fazer isso também:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:230
+#, no-wrap
+msgid "ftp> get tarfile.tar \"| zcat | tar xvf -\"\n"
+msgstr "ftp> get tarfile.tar \"| zcat | tar xvf -\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:233
+msgid ""
+"After the contents of your tarred filesystem are on your flash memory "
+"filesystem, you can unmount the flash memory and reboot:"
+msgstr ""
+"Depois que o conteúdo do seu sistema de arquivos compactado pelo tar estiver "
+"no sistema de arquivos da sua memória flash, você poderá desmontar a memória "
+"flash e reinicializar:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:239
+#, no-wrap
+msgid ""
+"# cd /\n"
+"# umount /flash\n"
+"# exit\n"
+msgstr ""
+"# cd /\n"
+"# umount /flash\n"
+"# exit\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:242
+msgid ""
+"Assuming that you configured your filesystem correctly when it was built on "
+"the normal hard disk (with your filesystems mounted read-only, and with the "
+"necessary options compiled into the kernel) you should now be successfully "
+"booting your FreeBSD embedded system."
+msgstr ""
+"Assumindo que você configurou seu sistema de arquivos corretamente quando "
+"ele foi construído no disco rígido normal (com seus sistemas de arquivos "
+"montado como read-only, e com as opções necessárias compiladas no kernel) "
+"você agora deve inicializar com sucesso seu sistema embarcado FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/solid-state/_index.adoc:245
+#, no-wrap
+msgid "System Strategies for Small and Read Only Environments"
+msgstr "Estratégias do Sistema para Ambientes Pequenos e Read-Only"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:249
+msgid ""
+"In <<ro-fs>>, it was pointed out that the [.filename]#/var# filesystem "
+"constructed by [.filename]#/etc/rc.d/var# and the presence of a read-only "
+"root filesystem causes problems with many common software packages used with "
+"FreeBSD. In this article, suggestions for successfully running cron, "
+"syslog, ports installations, and the Apache web server will be provided."
+msgstr ""
+"Em <<ro-fs>>, foi apontado que o sistema de arquivos [.filename]#/var# "
+"construído pelo [.filename]#/etc/rc.d/var# e a presença de um sistema de "
+"arquivos raiz read-only causa problemas com muitos pacotes de software "
+"comuns usados com o FreeBSD. Neste artigo, serão fornecidas sugestões para a "
+"execução bem-sucedida do cron, do syslog, instalações de ports e do servidor "
+"Web Apache."
+
+#. type: Title ===
+#: documentation/content/en/articles/solid-state/_index.adoc:250
+#, no-wrap
+msgid "Cron"
+msgstr "Cron"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:253
+msgid ""
+"Upon boot, [.filename]#/var# gets populated by [.filename]#/etc/rc.d/var# "
+"using the list from [.filename]#/etc/mtree/BSD.var.dist#, so the [."
+"filename]#cron#, [.filename]#cron/tabs#, [.filename]#at#, and a few other "
+"standard directories get created."
+msgstr ""
+"Ao inicializar, o [.filename]#/var# é preenchido por [.filename]#/etc/rc.d/"
+"var# usando a lista de [.filename]#/etc/mtree/BSD.var.dist#, então os "
+"diretórios [.filename]#cron#, [.filename]#cron/tabs#, [.filename]#at# e "
+"alguns outros diretórios padrões são criados."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:258
+msgid ""
+"However, this does not solve the problem of maintaining cron tabs across "
+"reboots. When the system reboots, the [.filename]#/var# filesystem that is "
+"in memory will disappear and any cron tabs you may have had in it will also "
+"disappear. Therefore, one solution would be to create cron tabs for the "
+"users that need them, mount your [.filename]#/# filesystem as read-write and "
+"copy those cron tabs to somewhere safe, like [.filename]#/etc/tabs#, then "
+"add a line to the end of [.filename]#/etc/rc.initdiskless# that copies those "
+"crontabs into [.filename]#/var/cron/tabs# after that directory has been "
+"created during system initialization. You may also need to add a line that "
+"changes modes and permissions on the directories you create and the files "
+"you copy with [.filename]#/etc/rc.initdiskless#."
+msgstr ""
+"No entanto, isso não resolve o problema de manter as crontabs entre nas "
+"reinicializações. Quando o sistema for reinicializado, o sistema de arquivos "
+"[.filename]#/var# que está na memória desaparecerá e todas as crontabs que "
+"você tenha nele também desaparecerão. Portanto, uma solução seria criar "
+"crontabs para os usuários que precisam delas, montar seu sistema de arquivos "
+"[.filename]#/# como read-write e copiar estas crontabs para algum lugar "
+"seguro, como [.filename]#/etc/tabs#, em seguida, adicione uma linha ao final "
+"do [.filename]#/etc/rc.initdiskless# que copie estes crontabs para [."
+"filename]#/var/cron/tabs# depois que o diretório for criado durante "
+"inicialização do sistema. Você também pode precisar adicionar uma linha que "
+"altere modos e permissões nos diretórios criados e nos arquivos copiados com "
+"[.filename]#/etc/rc.initdiskless#."
+
+#. type: Title ===
+#: documentation/content/en/articles/solid-state/_index.adoc:259
+#, no-wrap
+msgid "Syslog"
+msgstr "Syslog"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:264
+msgid ""
+"[.filename]#syslog.conf# specifies the locations of certain log files that "
+"exist in [.filename]#/var/log#. These files are not created by [.filename]#/"
+"etc/rc.d/var# upon system initialization. Therefore, somewhere in [."
+"filename]#/etc/rc.d/var#, after the section that creates the directories in "
+"[.filename]#/var#, you will need to add something like this:"
+msgstr ""
+"O [.filename]#syslog.conf# especifica os locais de certos arquivos de log "
+"que existem em [.filename]#/var/log#. Esses arquivos não são criados pelo [."
+"filename]#/etc/rc.d/var# na inicialização do sistema. Portanto, em algum "
+"lugar do [.filename]#/etc/rc.d/var#, logo após a seção que cria os "
+"diretórios em [.filename]#/var#, você precisará adicionar algo como isto:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:269
+#, no-wrap
+msgid ""
+"# touch /var/log/security /var/log/maillog /var/log/cron /var/log/messages\n"
+"# chmod 0644 /var/log/*\n"
+msgstr ""
+"# touch /var/log/security /var/log/maillog /var/log/cron /var/log/messages\n"
+"# chmod 0644 /var/log/*\n"
+
+#. type: Title ===
+#: documentation/content/en/articles/solid-state/_index.adoc:271
+#, no-wrap
+msgid "Ports Installation"
+msgstr "Instalação de Ports"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:276
+msgid ""
+"Before discussing the changes necessary to successfully use the ports tree, "
+"a reminder is necessary regarding the read-only nature of your filesystems "
+"on the flash media. Since they are read-only, you will need to temporarily "
+"mount them read-write using the mount syntax shown in <<ro-fs>>. You should "
+"always remount those filesystems read-only when you are done with any "
+"maintenance - unnecessary writes to the flash media could considerably "
+"shorten its lifespan."
+msgstr ""
+"Antes de discutir as alterações necessárias para usar com êxito a árvore de "
+"ports, é necessário um lembrete sobre a natureza read-only dos seus sistemas "
+"de arquivos na mídia flash. Como eles são read-only, você precisará montá-"
+"los temporariamente para read-write usando a sintaxe de montagem mostrada em "
+"<<ro-fs>>. Você sempre deve remontar esses sistemas de arquivos no modo read-"
+"only quando tiver terminado qualquer manutenção - gravações desnecessárias "
+"na mídia flash podem reduzir consideravelmente sua vida útil."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:279
+msgid ""
+"To make it possible to enter a ports directory and successfully run `make "
+"install`, we must create a packages directory on a non-memory filesystem "
+"that will keep track of our packages across reboots. As it is necessary to "
+"mount your filesystems as read-write for the installation of a package "
+"anyway, it is sensible to assume that an area on the flash media can also be "
+"used for package information to be written to."
+msgstr ""
+"Para tornar possível entrar em um diretório do ports e executar com sucesso "
+"o comando `make install`, devemos criar um diretório de pacotes em um "
+"sistema de arquivos que não seja de memória e que acompanhe nossos pacotes "
+"entre as reinicializações. Como é necessário montar seus sistemas de "
+"arquivos como leitura-gravação para a instalação de um pacote de qualquer "
+"maneira, é sensato supor que uma área na mídia flash também possa ser usada "
+"para gravar informações do pacote."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:282
+msgid ""
+"First, create a package database directory. This is normally in [."
+"filename]#/var/db/pkg#, but we cannot place it there as it will disappear "
+"every time the system is booted."
+msgstr ""
+"Primeiro, crie o diretório do banco de dados de pacotes. Ele fica "
+"normalmente em [.filename]#/var/db/pkg#, mas não podemos colocá-lo lá, pois "
+"ele irá desaparecer toda vez que o sistema for inicializado."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:286
+#, no-wrap
+msgid "# mkdir /etc/pkg\n"
+msgstr "# mkdir /etc/pkg\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:289
+msgid ""
+"Now, add a line to [.filename]#/etc/rc.d/var# that links the [.filename]#/"
+"etc/pkg# directory to [.filename]#/var/db/pkg#. An example:"
+msgstr ""
+"Agora, adicione uma linha em [.filename]#/etc/rc.d/var# que vincule o "
+"diretório [.filename]#/etc/pkg# a [.filename]#/var/db/pkg#. Um exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:293
+#, no-wrap
+msgid "# ln -s /etc/pkg /var/db/pkg\n"
+msgstr "# ln -s /etc/pkg /var/db/pkg\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:296
+msgid ""
+"Now, any time that you mount your filesystems as read-write and install a "
+"package, the `make install` will work, and package information will be "
+"written successfully to [.filename]#/etc/pkg# (because the filesystem will, "
+"at that time, be mounted read-write) which will always be available to the "
+"operating system as [.filename]#/var/db/pkg#."
+msgstr ""
+"Agora, sempre que você montar seus sistemas de arquivos como leitura-"
+"gravação e instalar um pacote, o `make install` funcionará, e as informações "
+"do pacote serão gravadas com sucesso em [.filename]#/etc/pkg# (porque o "
+"sistema de arquivos estará, naquele momento, montado como leitura-gravação), "
+"que sempre estará disponível para o sistema operacional como [.filename]#/"
+"var/db/pkg#."
+
+#. type: Title ===
+#: documentation/content/en/articles/solid-state/_index.adoc:297
+#, no-wrap
+msgid "Apache Web Server"
+msgstr "Servidor Web Apache"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:303
+msgid ""
+"The steps in this section are only necessary if Apache is set up to write "
+"its pid or log information outside of [.filename]#/var#. By default, Apache "
+"keeps its pid file in [.filename]#/var/run/httpd.pid# and its log files in [."
+"filename]#/var/log#."
+msgstr ""
+"As etapas nesta seção são necessárias apenas se o Apache estiver configurado "
+"para gravar suas informações de pid ou log fora do [.filename]#/var#. Por "
+"padrão, o Apache mantém seu arquivo pid em [.filename]#/var/run/httpd.pid# e "
+"seus arquivos de log em [.filename]#/var/log#."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:309
+msgid ""
+"It is now assumed that Apache keeps its log files in a directory [."
+"filename]#apache_log_dir# outside of [.filename]#/var#. When this directory "
+"lives on a read-only filesystem, Apache will not be able to save any log "
+"files, and may have problems working. If so, it is necessary to add a new "
+"directory to the list of directories in [.filename]#/etc/rc.d/var# to create "
+"in [.filename]#/var#, and to link [.filename]#apache_log_dir# to [."
+"filename]#/var/log/apache#. It is also necessary to set permissions and "
+"ownership on this new directory."
+msgstr ""
+"Agora, supõe-se que o Apache mantém seus arquivos de log em um diretório [."
+"filename]#apache_log_dir# fora do [.filename]#/var#. Quando esse diretório "
+"está em um sistema de arquivos somente leitura, o Apache não poderá salvar "
+"nenhum arquivo de log e pode ter problemas para funcionar. Se for o caso, é "
+"necessário adicionar um novo diretório à lista de diretórios em [.filename]#/"
+"etc/rc.d/var# para criar em [.filename]#/var# e vincular o [."
+"filename]#apache_log_dir# ao [.filename]#/var/log/apache#. Também é "
+"necessário definir as permissões e o proprietário deste novo diretório."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:311
+msgid ""
+"First, add the directory `log/apache` to the list of directories to be "
+"created in [.filename]#/etc/rc.d/var#."
+msgstr ""
+"Primeiro, adicione o diretório `log/apache` à lista de diretórios a serem "
+"criados em [.filename]#/etc/rc.d/var#."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:313
+msgid ""
+"Second, add these commands to [.filename]#/etc/rc.d/var# after the directory "
+"creation section:"
+msgstr ""
+"Segundo, adicione estes comandos ao [.filename]#/etc/rc.d/var# após a seção "
+"de criação do diretório:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:318
+#, no-wrap
+msgid ""
+"# chmod 0774 /var/log/apache\n"
+"# chown nobody:nobody /var/log/apache\n"
+msgstr ""
+"# chmod 0774 /var/log/apache\n"
+"# chown nobody:nobody /var/log/apache\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:321
+msgid ""
+"Finally, remove the existing [.filename]#apache_log_dir# directory, and "
+"replace it with a link:"
+msgstr ""
+"Por fim, remova o diretório existente [.filename]#apache_log_dir# e "
+"substitua-o por um link:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:326
+#, no-wrap
+msgid ""
+"# rm -rf apache_log_dir\n"
+"# ln -s /var/log/apache apache_log_dir\n"
+msgstr ""
+"# rm -rf apache_log_dir\n"
+"# ln -s /var/log/apache apache_log_dir\n"
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/books/dev-model/_index.adoc b/documentation/content/pt-br/books/dev-model/_index.adoc
index 3429d04854..3cb144efa7 100644
--- a/documentation/content/pt-br/books/dev-model/_index.adoc
+++ b/documentation/content/pt-br/books/dev-model/_index.adoc
@@ -2,7 +2,7 @@
title: Um modelo de projeto para o projeto FreeBSD
authors:
- author: Niklas Saers
-copyright: Copyright © 2002-2005 Niklas Saers
+copyright: 2002-2005 Niklas Saers
trademarks: ["freebsd", "ibm", "ieee", "adobe", "intel", "linux", "microsoft", "opengroup", "sun", "netbsd", "general"]
isIndex: true
---
diff --git a/documentation/content/pt-br/books/fdp-primer/_index.adoc b/documentation/content/pt-br/books/fdp-primer/_index.adoc
index b5efee6dd6..aacb2a95eb 100644
--- a/documentation/content/pt-br/books/fdp-primer/_index.adoc
+++ b/documentation/content/pt-br/books/fdp-primer/_index.adoc
@@ -4,14 +4,14 @@ authors:
-
author: 'The FreeBSD Documentation Project'
bookOrder: 50
-copyright: '1998-2021 DocEng'
+copyright: '1998-2023 The FreeBSD Documentation Project'
description: 'Tudo que você precisa saber para começar a contribuir para o Projeto de Documentação do FreeBSD'
next: books/fdp-primer/preface
path: /books/fdp-primer/
showBookMenu: 'true'
tags: ["FDP", "documentation", "FreeBSD", "Index"]
title: 'Primer do Projeto de Documentação do FreeBSD para Novos Colaboradores'
-trademarks: ["general"]
+trademarks: ["freebsd", "general", "git"]
weight: 10
---
diff --git a/documentation/content/pt-br/books/fdp-primer/_index.po b/documentation/content/pt-br/books/fdp-primer/_index.po
index 777eb3a7fc..4d35de69a3 100644
--- a/documentation/content/pt-br/books/fdp-primer/_index.po
+++ b/documentation/content/pt-br/books/fdp-primer/_index.po
@@ -2,12 +2,14 @@
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
"POT-Creation-Date: 2022-02-01 09:20-0300\n"
-"PO-Revision-Date: 2021-11-05 11:08+0000\n"
-"Last-Translator: Danilo G. Baio <dbaio@FreeBSD.org>\n"
+"PO-Revision-Date: 2023-04-22 03:54+0000\n"
+"Last-Translator: \"Danilo G. Baio\" <dbaio@FreeBSD.org>\n"
"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
"projects/documentation/booksfdp-primer_index/pt_BR/>\n"
"Language: pt_BR\n"
@@ -15,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.8.1\n"
+"X-Generator: Weblate 4.17\n"
#. type: YAML Front Matter: description
#: documentation/content/en/books/fdp-primer/_index.adoc:1
diff --git a/documentation/content/pt-br/books/fdp-primer/asciidoctor-primer/_index.adoc b/documentation/content/pt-br/books/fdp-primer/asciidoctor-primer/_index.adoc
index df89fb146b..03aaa97f8b 100644
--- a/documentation/content/pt-br/books/fdp-primer/asciidoctor-primer/_index.adoc
+++ b/documentation/content/pt-br/books/fdp-primer/asciidoctor-primer/_index.adoc
@@ -1,16 +1,16 @@
---
-description: 'Uma breve introdução ao AsciiDoctor'
+description: 'Uma breve introdução ao Asciidoctor'
next: books/fdp-primer/rosetta
-path: /books/fdp-primer/
+path: "/books/fdp-primer/asciidoctor-primer/"
prev: books/fdp-primer/doc-build
showBookMenu: 'true'
-tags: ["AsciiDoc", "AsciiDoctor", "Primer", "Introduction", "Guide"]
-title: 'Capítulo 6. Primer AsciiDoctor'
+tags: ["AsciiDoc", "Asciidoctor", "Primer", "Introduction", "Guide"]
+title: 'Capítulo 6. Primer Asciidoctor'
weight: 7
---
[[asciidoctor-primer]]
-= Primer AsciiDoctor
+= Primer Asciidoctor
:doctype: book
:toc: macro
:toclevels: 1
@@ -47,7 +47,7 @@ toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
-A maioria das documentações do FDP é escrita em AsciiDoc. Este capítulo explica o que isso significa, como ler e entender o código da documentação e as técnicas usadas. Para obter uma referência completa dos recursos do AsciiDoctor, consulte a link:https://docs.asciidoctor.org/home/[documentação do Asciidoctor]. Alguns exemplos usados neste capítulo foram retirados da link:https://docs.asciidoctor.org/asciidoc/latest/syntax-quick-reference[Referência rápida de sintaxe AsciiDoc].
+A maioria das documentações do FDP é escrita em AsciiDoc. Este capítulo explica o que isso significa, como ler e entender o código da documentação e as técnicas usadas. Para obter uma referência completa dos recursos do Asciidoctor, consulte a link:https://docs.asciidoctor.org/home/[documentação do Asciidoctor]. Alguns exemplos usados neste capítulo foram retirados da link:https://docs.asciidoctor.org/asciidoc/latest/syntax-quick-reference[Referência rápida de sintaxe AsciiDoc].
[[asciidoctor-primer-overview]]
== Visão geral
@@ -83,7 +83,7 @@ Para remover */tmp/foo*, utilize o man:rm[1].
[[asciidoctor-headings]]
== Cabeçalhos
-AsciiDoctor suporta seis níveis de cabeçalhos. Se o tipo de documento for `artigo`, apenas um nível 0 (`=`) pode ser usado. Se o tipo de documento for `livro`, pode haver vários títulos de nível 0 (`=`).
+Asciidoctor suporta seis níveis de cabeçalhos. Se o tipo de documento for `artigo`, apenas um nível 0 (`=`) pode ser usado. Se o tipo de documento for `livro`, pode haver vários títulos de nível 0 (`=`).
Estes são exemplos de cabeçalhos em um `artigo`.
@@ -136,7 +136,7 @@ E este é o segundo parágrafo.
[[asciidoctor-lists]]
== Listas
-AsciiDoctor suporta alguns tipos de listas, as mais comuns são `ordenadas` e` não ordenadas`. Para obter mais informações sobre listas, consulte o link:https://docs.asciidoctor.org/asciidoc/latest/syntax-quick-reference/#lists[Referência Rápida da Sintaxe AsciiDoc].
+Asciidoctor suporta alguns tipos de listas, as mais comuns são `ordenadas` e` não ordenadas`. Para obter mais informações sobre listas, consulte o link:https://docs.asciidoctor.org/asciidoc/latest/syntax-quick-reference/#lists[Referência Rápida da Sintaxe AsciiDoc].
[[asciidoctor-ordered-lists]]
=== Listas ordenadas
@@ -194,13 +194,13 @@ link:https://www.FreeBSD.org[FreeBSD]
[NOTE]
====
-Como a documentação do AsciiDoctor descreve, a macro `link` não é necessária quando o link começa com um esquema de URL como `https`. No entanto, é uma boa prática fazer o uso assim para garantir que o AsciiDoctor renderize o link corretamente, especialmente em idiomas não latinos como o Japonês.
+Como a documentação do Asciidoctor descreve, a macro `link` não é necessária quando o link começa com um esquema de URL como `https`. No entanto, é uma boa prática fazer o uso assim para garantir que o Asciidoctor renderize o link corretamente, especialmente em idiomas não latinos como o Japonês.
====
[[asciidoctor-links-internal]]
=== Link interno
-Para apontar para outro livro ou artigo, as variáveis AsciiDoctor devem ser usadas. Por exemplo, se estamos no artigo `cups` e queremos apontar para `ipsec-must`, esses passos devem ser usados.
+Para apontar para outro livro ou artigo, as variáveis Asciidoctor devem ser usadas. Por exemplo, se estamos no artigo `cups` e queremos apontar para `ipsec-must`, esses passos devem ser usados.
. Inclua o arquivo [.filename]#urls.adoc# da pasta [.filename]#~/doc/shared#.
+
@@ -208,7 +208,7 @@ Para apontar para outro livro ou artigo, as variáveis AsciiDoctor devem ser usa
\include::shared/{lang}/urls.adoc[]
....
+
-. Em seguida, crie um link usando a variável AsciiDoctor para o artigo `ipsec-must`.
+. Em seguida, crie um link usando a variável Asciidoctor para o artigo `ipsec-must`.
+
....
extref:{ipsec-must}[IPSec-Must article]
@@ -218,7 +218,89 @@ E isso seria processado como.
+
extref:{ipsec-must}[IPSec-Must article]
+[[asciidoctor-images-icons]]
+== Imagens e Ícones
+
+Imagens e ícones desempenham um papel crucial na melhoria da experiência geral do usuário. Esses elementos visuais são estrategicamente integrados para transmitir informações, esclarecer conceitos e fornecer uma interface visualmente envolvente.
+
+[[asciidoctor-images]]
+=== Imagens
+
+As imagens ajudam a ilustrar conceitos complexos, tornando-os mais acessíveis aos usuários.
+
+O primeiro passo será adicionar a imagem no diretório de imagens no caminho:
+
+* [.filename]#~/website/static/images/# para o website.
+* [.filename]#~/documentation/static/images/# para a documentação.
+
+Por exemplo, para adicionar uma nova imagem ao processo de instalação do FreeBSD, a imagem será salva no caminho [.filename]#~/documentation/static/images/books/handbook/bsdinstall/new-image3.png#.
+
+O próximo passo será configurar os atributos do Asciidoctor `images-path` e `imagesdir`.
+
+Usaremos como exemplo o cabeçalho do artigo extref:{freebsd-releng}[Engenharia de Releases do FreeBSD].
+
+[source, asciidoc]
+....
+= Engenharia de Release do FreeBSD
+:doctype: article
+
+[...]
+
+:images-path: articles/freebsd-releng/ <1>
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+
+[...]
+
+:imagesdir: ../../../images/{images-path} <2>
+endif::[]
+
+[...]
+
+....
+
+<.> Faz referência ao caminho dentro da pasta [.filename]#/static/images#.
+<.> Faz referência ao atributo Asciidoctor.
+
+Uma vez que a imagem esteja no caminho correto e os atributos do Asciidoctor tenham sido configurados no documento, a macro `image` pode ser usada.
+
+Este é um exemplo:
+
+....
+image::new-image3.png[Nova etapa no processo de instalação do FreeBSD]
+....
+
+[TIP]
+====
+Para melhorar a acessibilidade, é obrigatório adicionar texto descritivo a cada imagem.
+====
+
+[[asciidoctor-icons]]
+=== Ícones
+
+Os ícones servem como símbolos intuitivos para reconhecimento e navegação rápidos.
+
+O primeiro passo para usar ícones é adicionar a propriedade `icons` à seção de propriedades do Asciidoctor, no topo de cada documento.
+
+....
+:icons: font
+....
+
+Depois que a propriedade do ícone do Asciidoctor for definida, um ícone suportado pela link:https://fontawesome.com/v4/icons/[Font Awesome] pode ser adicionado.
+
+Este é um exemplo de como usar o ícone `envelope`:
+
+....
+icon:envelope[link=mailto:test@example.com, title="contact"]
+....
+
+[TIP]
+====
+Para melhorar a acessibilidade do site, o atributo `title` é obrigatório.
+====
+
[[asciidoctor-conclusion]]
== Conclusão
-Esta é a conclusão deste primer do AsciiDoctor. Por razões de espaço e complexidade, várias assuntos não foram abordadas em profundidade (ou completamente).
+Esta é a conclusão deste primer do Asciidoctor. Por razões de espaço e complexidade, várias assuntos não foram abordadas em profundidade (ou completamente).
diff --git a/documentation/content/pt-br/books/fdp-primer/asciidoctor-primer/_index.po b/documentation/content/pt-br/books/fdp-primer/asciidoctor-primer/_index.po
index 1aa268b813..21ff6b6303 100644
--- a/documentation/content/pt-br/books/fdp-primer/asciidoctor-primer/_index.po
+++ b/documentation/content/pt-br/books/fdp-primer/asciidoctor-primer/_index.po
@@ -2,12 +2,13 @@
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2022.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023, 2024.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2022-02-01 09:20-0300\n"
-"PO-Revision-Date: 2022-01-22 14:47+0000\n"
-"Last-Translator: Danilo G. Baio <dbaio@FreeBSD.org>\n"
+"POT-Creation-Date: 2024-01-17 20:34-0300\n"
+"PO-Revision-Date: 2024-01-18 01:21+0000\n"
+"Last-Translator: \"Danilo G. Baio\" <dbaio@FreeBSD.org>\n"
"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
"projects/documentation/booksfdp-primerasciidoctor-primer_index/pt_BR/>\n"
"Language: pt_BR\n"
@@ -15,32 +16,32 @@ 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.10.1\n"
+"X-Generator: Weblate 4.17\n"
#. type: YAML Front Matter: description
#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:1
#, no-wrap
-msgid "A brief introduction to AsciiDoctor"
-msgstr "Uma breve introdução ao AsciiDoctor"
+msgid "A brief introduction to Asciidoctor"
+msgstr "Uma breve introdução ao Asciidoctor"
#. type: YAML Front Matter: title
#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:1
#, no-wrap
-msgid "Chapter 6. AsciiDoctor Primer"
-msgstr "Capítulo 6. Primer AsciiDoctor"
+msgid "Chapter 6. Asciidoctor Primer"
+msgstr "Capítulo 6. Primer Asciidoctor"
#. type: Title =
#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:13
#, no-wrap
-msgid "AsciiDoctor Primer"
-msgstr "Primer AsciiDoctor"
+msgid "Asciidoctor Primer"
+msgstr "Primer Asciidoctor"
#. type: Plain text
#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:54
msgid ""
"Most FDP documentation is written with AsciiDoc. This chapter explains what "
"that means, how to read and understand the documentation source, and the "
-"techniques used. To get a complete reference of the AsciiDoctor "
+"techniques used. To get a complete reference of the Asciidoctor "
"capabilities please consult the link:https://docs.asciidoctor.org/home/"
"[Asciidoctor documentation]. Some of the examples used in this chapter have "
"been taken from the link:https://docs.asciidoctor.org/asciidoc/latest/syntax-"
@@ -49,7 +50,7 @@ msgstr ""
"A maioria das documentações do FDP é escrita em AsciiDoc. Este capítulo "
"explica o que isso significa, como ler e entender o código da documentação e "
"as técnicas usadas. Para obter uma referência completa dos recursos do "
-"AsciiDoctor, consulte a link:https://docs.asciidoctor.org/home/[documentação "
+"Asciidoctor, consulte a link:https://docs.asciidoctor.org/home/[documentação "
"do Asciidoctor]. Alguns exemplos usados neste capítulo foram retirados da "
"link:https://docs.asciidoctor.org/asciidoc/latest/syntax-quick-"
"reference[Referência rápida de sintaxe AsciiDoc]."
@@ -175,11 +176,11 @@ msgstr "Cabeçalhos"
#. type: Plain text
#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:103
msgid ""
-"AsciiDoctor supports six headings levels. If the document type is `article` "
+"Asciidoctor supports six headings levels. If the document type is `article` "
"only one level 0 (`=`) can be used. If the document type is `book` then "
"there can be multiple level 0 (`=`) headings."
msgstr ""
-"AsciiDoctor suporta seis níveis de cabeçalhos. Se o tipo de documento for "
+"Asciidoctor suporta seis níveis de cabeçalhos. Se o tipo de documento for "
"`artigo`, apenas um nível 0 (`=`) pode ser usado. Se o tipo de documento for "
"`livro`, pode haver vários títulos de nível 0 (`=`)."
@@ -306,12 +307,12 @@ msgstr "Listas"
#. type: Plain text
#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:160
msgid ""
-"AsciiDoctor supports a few types of lists, the most common are `ordered` and "
+"Asciidoctor supports a few types of lists, the most common are `ordered` and "
"`unordered`. To get more information about lists, see link:https://docs."
"asciidoctor.org/asciidoc/latest/syntax-quick-reference/#lists[AsciiDoc "
"Syntax Quick Reference]."
msgstr ""
-"AsciiDoctor suporta alguns tipos de listas, as mais comuns são `ordenadas` "
+"Asciidoctor suporta alguns tipos de listas, as mais comuns são `ordenadas` "
"e` não ordenadas`. Para obter mais informações sobre listas, consulte o link:"
"https://docs.asciidoctor.org/asciidoc/latest/syntax-quick-reference/"
"#lists[Referência Rápida da Sintaxe AsciiDoc]."
@@ -433,14 +434,14 @@ msgstr "link:https://www.FreeBSD.org[FreeBSD]\n"
#. type: delimited block = 4
#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:219
msgid ""
-"As the AsciiDoctor documentation describes, the `link` macro is not required "
+"As the Asciidoctor documentation describes, the `link` macro is not required "
"when the target starts with a URL scheme like `https`. However, it is a "
-"good practice to do this anyway to ensure that AsciiDoctor renders the link "
+"good practice to do this anyway to ensure that Asciidoctor renders the link "
"correctly, especially in non-latin languages like Japanese."
msgstr ""
-"Como a documentação do AsciiDoctor descreve, a macro `link` não é necessária "
+"Como a documentação do Asciidoctor descreve, a macro `link` não é necessária "
"quando o link começa com um esquema de URL como `https`. No entanto, é uma "
-"boa prática fazer o uso assim para garantir que o AsciiDoctor renderize o "
+"boa prática fazer o uso assim para garantir que o Asciidoctor renderize o "
"link corretamente, especialmente em idiomas não latinos como o Japonês."
#. type: Title ===
@@ -452,11 +453,11 @@ msgstr "Link interno"
#. type: Plain text
#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:226
msgid ""
-"To point to another book or article the AsciiDoctor variables should be "
+"To point to another book or article the Asciidoctor variables should be "
"used. For example, if we are in the `cups` article and we want to point to "
"`ipsec-must` these steps should be used."
msgstr ""
-"Para apontar para outro livro ou artigo, as variáveis AsciiDoctor devem ser "
+"Para apontar para outro livro ou artigo, as variáveis Asciidoctor devem ser "
"usadas. Por exemplo, se estamos no artigo `cups` e queremos apontar para "
"`ipsec-must`, esses passos devem ser usados."
@@ -477,10 +478,10 @@ msgstr "\\include::shared/{lang}/urls.adoc[]\n"
#. type: Plain text
#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:234
msgid ""
-"Then create a link using the AsciiDoctor variable to the `ipsec-must` "
+"Then create a link using the Asciidoctor variable to the `ipsec-must` "
"article."
msgstr ""
-"Em seguida, crie um link usando a variável AsciiDoctor para o artigo `ipsec-"
+"Em seguida, crie um link usando a variável Asciidoctor para o artigo `ipsec-"
"must`."
#. type: delimited block . 4
@@ -497,16 +498,225 @@ msgstr "extref:{ipsec-must}[IPSec-Must article]"
#. type: Title ==
#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:244
#, no-wrap
+msgid "Images and Icons"
+msgstr "Imagens e Ícones"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:248
+msgid ""
+"Images and icons play a crucial role in enhancing the overall user "
+"experience. These visual elements are strategically integrated to convey "
+"information, clarify concepts, and provide a visually engaging interface."
+msgstr ""
+"Imagens e ícones desempenham um papel crucial na melhoria da experiência "
+"geral do usuário. Esses elementos visuais são estrategicamente integrados "
+"para transmitir informações, esclarecer conceitos e fornecer uma interface "
+"visualmente envolvente."
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:250
+#, no-wrap
+msgid "Images"
+msgstr "Imagens"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:253
+msgid ""
+"Images help illustrate complex concepts, making them more accessible to "
+"users."
+msgstr ""
+"As imagens ajudam a ilustrar conceitos complexos, tornando-os mais "
+"acessíveis aos usuários."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:255
+msgid ""
+"The first step will be to add the image in the images directory in the path:"
+msgstr ""
+"O primeiro passo será adicionar a imagem no diretório de imagens no caminho:"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:257
+msgid "[.filename]#~/website/static/images/# for the website."
+msgstr "[.filename]#~/website/static/images/# para o website."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:258
+msgid "[.filename]#~/documentation/static/images/# for the documentation."
+msgstr "[.filename]#~/documentation/static/images/# para a documentação."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:260
+msgid ""
+"For example, to add a new image to the FreeBSD installation process, the "
+"image will be saved to the path [.filename]#~/documentation/static/images/"
+"books/handbook/bsdinstall/new-image3.png#."
+msgstr ""
+"Por exemplo, para adicionar uma nova imagem ao processo de instalação do "
+"FreeBSD, a imagem será salva no caminho [.filename]#~/documentation/static/"
+"images/books/handbook/bsdinstall/new-image3.png#."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:262
+msgid ""
+"The next step will be to configure the Asciidoctor attributes `images-path` "
+"and `imagesdir`."
+msgstr ""
+"O próximo passo será configurar os atributos do Asciidoctor `images-path` e "
+"`imagesdir`."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:264
+msgid ""
+"We are going to use as an example the header of the extref:{freebsd-releng}"
+"[FreeBSD Release Engineering] article."
+msgstr ""
+"Usaremos como exemplo o cabeçalho do artigo extref:{freebsd-releng}["
+"Engenharia de Releases do FreeBSD]."
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:267
+#, no-wrap
+msgid "FreeBSD Release Engineering"
+msgstr "Engenharia de Release do FreeBSD"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:269
+msgid ":doctype: article"
+msgstr ":doctype: article"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:271
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:278
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:283
+msgid "[...]"
+msgstr "[...]"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:273
+msgid ":images-path: articles/freebsd-releng/ <1>"
+msgstr ":images-path: articles/freebsd-releng/ <1>"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:276
+msgid "ifdef::env-beastie[] ifdef::backend-html5[]"
+msgstr "ifdef::env-beastie[] ifdef::backend-html5[]"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:281
+msgid ":imagesdir: ../../../images/{images-path} <2> endif::[]"
+msgstr ":imagesdir: ../../../images/{images-path} <2> endif::[]"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:287
+msgid "Makes reference to the path inside [.filename]#/static/images# folder."
+msgstr "Faz referência ao caminho dentro da pasta [.filename]#/static/images#."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:288
+msgid "Makes reference to the Asciidoctor attribute."
+msgstr "Faz referência ao atributo Asciidoctor."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:290
+msgid ""
+"Once the image is in the correct path and the Asciidoctor attributes have "
+"been configured in the document, the `image` macro can be used."
+msgstr ""
+"Uma vez que a imagem esteja no caminho correto e os atributos do Asciidoctor "
+"tenham sido configurados no documento, a macro `image` pode ser usada."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:292
+msgid "This is an example:"
+msgstr "Este é um exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:295
+#, no-wrap
+msgid "image::new-image3.png[New step in the FreeBSD install process]\n"
+msgstr ""
+"image::new-image3.png[Nova etapa no processo de instalação do FreeBSD]\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:300
+msgid ""
+"To improve accessibility, it is mandatory to add descriptive text to each "
+"image."
+msgstr ""
+"Para melhorar a acessibilidade, é obrigatório adicionar texto descritivo a "
+"cada imagem."
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:303
+#, no-wrap
+msgid "Icons"
+msgstr "Ícones"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:306
+msgid "Icons serve as intuitive symbols for quick recognition and navigation."
+msgstr ""
+"Os ícones servem como símbolos intuitivos para reconhecimento e navegação "
+"rápidos."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:308
+msgid ""
+"The first step to use icons is to add the `icons` property to the "
+"Asciidoctor properties section, at the top of each document."
+msgstr ""
+"O primeiro passo para usar ícones é adicionar a propriedade `icons` à seção "
+"de propriedades do Asciidoctor, no topo de cada documento."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:311
+#, no-wrap
+msgid ":icons: font\n"
+msgstr ":icons: font\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:314
+msgid ""
+"Once the Asciidoctor icon property has been set an icon supported by link:"
+"https://fontawesome.com/v4/icons/[Font Awesome] can be added."
+msgstr ""
+"Depois que a propriedade do ícone do Asciidoctor for definida, um ícone "
+"suportado pela link:https://fontawesome.com/v4/icons/[Font Awesome] pode ser "
+"adicionado."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:316
+msgid "This is an example about how to use the `envelope` icon:"
+msgstr "Este é um exemplo de como usar o ícone `envelope`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:319
+#, no-wrap
+msgid "icon:envelope[link=mailto:test@example.com, title=\"contact\"]\n"
+msgstr "icon:envelope[link=mailto:test@example.com, title=\"contact\"]\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:324
+msgid ""
+"To improve the accessibility of the website, the `title` attribute is "
+"mandatory."
+msgstr ""
+"Para melhorar a acessibilidade do site, o atributo `title` é obrigatório."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:327
+#, no-wrap
msgid "Conclusion"
msgstr "Conclusão"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:247
+#: documentation/content/en/books/fdp-primer/asciidoctor-primer/_index.adoc:330
msgid ""
-"This is the conclusion of this AsciiDoctor primer. For reasons of space and "
+"This is the conclusion of this Asciidoctor primer. For reasons of space and "
"complexity, several things have not been covered in depth (or at all)."
msgstr ""
-"Esta é a conclusão deste primer do AsciiDoctor. Por razões de espaço e "
+"Esta é a conclusão deste primer do Asciidoctor. Por razões de espaço e "
"complexidade, várias assuntos não foram abordadas em profundidade (ou "
"completamente)."
diff --git a/documentation/content/pt-br/books/fdp-primer/book.adoc b/documentation/content/pt-br/books/fdp-primer/book.adoc
index 4607d58591..d0e40494b3 100644
--- a/documentation/content/pt-br/books/fdp-primer/book.adoc
+++ b/documentation/content/pt-br/books/fdp-primer/book.adoc
@@ -3,11 +3,11 @@ add_split_page_link: 'true'
authors:
-
author: 'The FreeBSD Documentation Project'
-copyright: '1998-2021 DocEng'
+copyright: '1998-2023 The FreeBSD Documentation Project'
description: 'Tudo que você precisa saber para começar a contribuir para o Projeto de Documentação do FreeBSD'
tags: ["FDP", "documentation", "FreeBSD", "Index"]
title: 'Primer do Projeto de Documentação do FreeBSD para Novos Colaboradores'
-trademarks: ["general"]
+trademarks: ["freebsd", "general", "git"]
---
= Primer do Projeto de Documentação do FreeBSD para Novos Colaboradores
@@ -83,12 +83,16 @@ include::{chapters-path}translations/_index.adoc[leveloffset=+1]
include::{chapters-path}po-translations/_index.adoc[leveloffset=+1]
+include::{chapters-path}weblate/_index.adoc[leveloffset=+1]
+
include::{chapters-path}manual-pages/_index.adoc[leveloffset=+1]
include::{chapters-path}writing-style/_index.adoc[leveloffset=+1]
include::{chapters-path}editor-config/_index.adoc[leveloffset=+1]
+include::{chapters-path}trademarks/_index.adoc[leveloffset=+1]
+
include::{chapters-path}see-also/_index.adoc[leveloffset=+1]
:sectnums!:
diff --git a/documentation/content/pt-br/books/fdp-primer/book.po b/documentation/content/pt-br/books/fdp-primer/book.po
index 163ec003b7..d332b8a9bb 100644
--- a/documentation/content/pt-br/books/fdp-primer/book.po
+++ b/documentation/content/pt-br/books/fdp-primer/book.po
@@ -2,12 +2,14 @@
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
"POT-Creation-Date: 2022-02-01 09:20-0300\n"
-"PO-Revision-Date: 2021-11-05 11:08+0000\n"
-"Last-Translator: Danilo G. Baio <dbaio@FreeBSD.org>\n"
+"PO-Revision-Date: 2023-04-22 03:54+0000\n"
+"Last-Translator: \"Danilo G. Baio\" <dbaio@FreeBSD.org>\n"
"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
"projects/documentation/booksfdp-primerbook/pt_BR/>\n"
"Language: pt_BR\n"
@@ -15,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.8.1\n"
+"X-Generator: Weblate 4.17\n"
#. type: YAML Front Matter: description
#: documentation/content/en/books/fdp-primer/book.adoc:1
diff --git a/documentation/content/pt-br/books/fdp-primer/doc-build/_index.adoc b/documentation/content/pt-br/books/fdp-primer/doc-build/_index.adoc
index 55cf94f713..ae796458a8 100644
--- a/documentation/content/pt-br/books/fdp-primer/doc-build/_index.adoc
+++ b/documentation/content/pt-br/books/fdp-primer/doc-build/_index.adoc
@@ -1,7 +1,7 @@
---
description: 'Descreve o Processo de Compilação da Documentação do FreeBSD'
next: books/fdp-primer/asciidoctor-primer
-path: /books/fdp-primer/
+path: "/books/fdp-primer/doc-build/"
prev: books/fdp-primer/structure
showBookMenu: 'true'
tags: ["build", "process", "make"]
@@ -115,13 +115,13 @@ Para renderizar a documentação e o site em `html`, use um dos seguintes exempl
Exemplos avançados de compilação são apresentados abaixo:
[[documentation-build-example-verbose]]
-.Compile a documentação com mensagens de debug e no modo verboso
+.Compile a documentação em Inglês e Espanhol com mensagens de debug e no modo verboso
[example]
====
[source, shell]
....
% cd ~/doc/documentation
-% make HUGO_ARGS="--verbose --debug --path-warnings"
+% make DOC_LANG="en es" HUGO_ARGS="--verbose --debug"
....
====
@@ -136,11 +136,11 @@ Exemplos avançados de compilação são apresentados abaixo:
....
Este servidor web roda em `localhost`, porta`1313` por padrão.
-Para servir o conteúdo com o servidor web interno do Hugo em um endereço IP específico:
+Para servir o conteúdo com o servidor web interno do Hugo em um endereço IP e porta específicos:
[source, shell]
....
-% make run BIND=192.168.15.10
+% make run BIND=192.168.15.10 HUGO_ARGS="-p 8080"
....
Um `hostname` também pode ser definido como url base para o servidor web interno do Hugo:
@@ -151,6 +151,25 @@ Um `hostname` também pode ser definido como url base para o servidor web intern
....
====
+[[documentation-build-example-offline]]
+.Compile a documentação em html para uso offline
+[example]
+====
+[source, shell]
+....
+% cd ~/doc/documentation
+% make html
+....
+
+Para compactar a saída em html, adicione `DOC_HTML_ARCHIVE=1`:
+
+[source, shell]
+....
+% cd ~/doc/documentation
+% DOC_HTML_ARCHIVE=1 make html
+....
+====
+
[[doc-build-rendering-pdf]]
=== Renderizando em pdf
diff --git a/documentation/content/pt-br/books/fdp-primer/doc-build/_index.po b/documentation/content/pt-br/books/fdp-primer/doc-build/_index.po
index d865cf3ca8..0762e54bd8 100644
--- a/documentation/content/pt-br/books/fdp-primer/doc-build/_index.po
+++ b/documentation/content/pt-br/books/fdp-primer/doc-build/_index.po
@@ -1,13 +1,14 @@
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
-# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2022.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2022, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2022-02-01 10:28-0300\n"
-"PO-Revision-Date: 2022-02-06 18:52+0000\n"
-"Last-Translator: Danilo G. Baio <dbaio@FreeBSD.org>\n"
+"POT-Creation-Date: 2023-09-09 18:12-0300\n"
+"PO-Revision-Date: 2023-09-10 13:31+0000\n"
+"Last-Translator: \"Danilo G. Baio\" <dbaio@FreeBSD.org>\n"
"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
"projects/documentation/booksfdp-primerdoc-build_index/pt_BR/>\n"
"Language: pt_BR\n"
@@ -15,7 +16,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.10.1\n"
+"X-Generator: Weblate 4.17\n"
#. type: YAML Front Matter: description
#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:1
@@ -205,18 +206,18 @@ msgstr "Exemplos avançados de compilação são apresentados abaixo:"
#. type: Block title
#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:118
#, no-wrap
-msgid "Build the documentation with verbose and debug messages"
-msgstr "Compile a documentação com mensagens de debug e no modo verboso"
+msgid "Build English and Spanish documentation with verbose and debug messages"
+msgstr "Compile a documentação em Inglês e Espanhol com mensagens de debug e no modo verboso"
#. type: delimited block . 4
#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:125
#, no-wrap
msgid ""
"% cd ~/doc/documentation\n"
-"% make HUGO_ARGS=\"--verbose --debug --path-warnings\"\n"
+"% make DOC_LANG=\"en es\" HUGO_ARGS=\"--verbose --debug\"\n"
msgstr ""
"% cd ~/doc/documentation\n"
-"% make HUGO_ARGS=\"--verbose --debug --path-warnings\"\n"
+"% make DOC_LANG=\"en es\" HUGO_ARGS=\"--verbose --debug\"\n"
#. type: Block title
#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:129
@@ -243,16 +244,16 @@ msgstr "Este servidor web roda em `localhost`, porta`1313` por padrão."
#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:140
msgid ""
"To serve the content with Hugo’s internal webserver binding a specific IP "
-"address:"
+"address and port:"
msgstr ""
"Para servir o conteúdo com o servidor web interno do Hugo em um endereço IP "
-"específico:"
+"e porta específicos:"
#. type: delimited block . 4
#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:144
#, no-wrap
-msgid "% make run BIND=192.168.15.10\n"
-msgstr "% make run BIND=192.168.15.10\n"
+msgid "% make run BIND=192.168.15.10 HUGO_ARGS=\"-p 8080\"\n"
+msgstr "% make run BIND=192.168.15.10 HUGO_ARGS=\"-p 8080\"\n"
#. type: Plain text
#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:147
@@ -267,26 +268,57 @@ msgstr ""
msgid "% make run BIND=192.168.15.10 HOSTNAME=example.com\n"
msgstr "% make run BIND=192.168.15.10 HOSTNAME=example.com\n"
-#. type: Title ===
+#. type: Block title
#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:155
#, no-wrap
+msgid "Build documentation in html for offline usage"
+msgstr "Compile a documentação em html para uso offline"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:162
+#, no-wrap
+msgid ""
+"% cd ~/doc/documentation\n"
+"% make html\n"
+msgstr ""
+"% cd ~/doc/documentation\n"
+"% make html\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:165
+msgid "To compress the html output, add `DOC_HTML_ARCHIVE=1`:"
+msgstr "Para compactar a saída em html, adicione `DOC_HTML_ARCHIVE=1`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:170
+#, no-wrap
+msgid ""
+"% cd ~/doc/documentation\n"
+"% DOC_HTML_ARCHIVE=1 make html\n"
+msgstr ""
+"% cd ~/doc/documentation\n"
+"% DOC_HTML_ARCHIVE=1 make html\n"
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:174
+#, no-wrap
msgid "Rendering to pdf"
msgstr "Renderizando em pdf"
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:158
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:177
msgid ""
"To render the documentation to `pdf`, use one of the following examples."
msgstr "Para gerar a documentação em `pdf`, use um dos seguintes exemplos."
#. type: Block title
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:160
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:179
#, no-wrap
msgid "Build all documents in pdf"
msgstr "Compilar todos os documentos em pdf"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:167
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:186
#, no-wrap
msgid ""
"% cd ~/doc/documentation\n"
@@ -296,13 +328,13 @@ msgstr ""
"% make pdf\n"
#. type: Block title
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:171
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:190
#, no-wrap
msgid "Build all articles in pdf"
msgstr "Compilar todos os artigos em pdf"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:178
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:197
#, no-wrap
msgid ""
"% cd ~/doc/documentation\n"
@@ -312,13 +344,13 @@ msgstr ""
"% make pdf-articles\n"
#. type: Block title
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:182
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:201
#, no-wrap
msgid "Build all books in pdf"
msgstr "Compilar todos os livros em pdf"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:189
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:208
#, no-wrap
msgid ""
"% cd ~/doc/documentation\n"
@@ -328,13 +360,13 @@ msgstr ""
"% make pdf-books\n"
#. type: Block title
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:193
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:212
#, no-wrap
msgid "Build documents in pdf for specific languages"
msgstr "Compilar todos os documentos em pdf de um idioma em específico"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:200
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:219
#, no-wrap
msgid ""
"% cd ~/doc/documentation\n"
@@ -344,12 +376,12 @@ msgstr ""
"% make DOC_LANG=\"en\" pdf\n"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:202
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:221
msgid "This will build all English documents in pdf."
msgstr "Este comando irá compilar todos os documentos em pdf do idioma Inglês."
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:207
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:226
#, no-wrap
msgid ""
"% cd ~/doc/documentation\n"
@@ -359,54 +391,54 @@ msgstr ""
"% make DOC_LANG=\"en fr\" pdf-books\n"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:209
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:228
msgid "This will build all English and French books in pdf."
msgstr ""
"Este comando irá compilar todos os livros em pdf dos idiomas Inglês e "
"Francês."
#. type: Title ==
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:212
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:231
#, no-wrap
msgid "The FreeBSD Documentation Build Toolset"
msgstr "O Conjunto de Ferramentas de Compilação da Documentação do FreeBSD"
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:215
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:234
msgid "These are the tools used to build and install the FDP documentation."
msgstr ""
"Essas são as ferramentas usadas para compilar e instalar a documentação FDP."
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:217
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:236
msgid "The primary build tool is man:make[1], specifically Berkeley Make."
msgstr ""
"A principal ferramenta de compilação é o man:make[1], especificamente o "
"Berkeley Make."
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:218
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:237
msgid "Hugo"
msgstr "Hugo"
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:219
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:238
msgid "AsciiDoctor"
msgstr "AsciiDoctor"
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:220
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:239
msgid "Git"
msgstr "Git"
#. type: Title ==
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:222
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:241
#, no-wrap
msgid "Understanding the Makefile in the Documentation Tree"
msgstr "Compreendendo o Makefile na Árvore de Documentação"
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:225
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:244
msgid ""
"There are three [.filename]#Makefile# files for building some or all of the "
"documentation project."
@@ -415,7 +447,7 @@ msgstr ""
"projeto de documentação."
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:227
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:246
msgid ""
"The [.filename]#Makefile# in the [.filename]#documentation# directory will "
"build only the documentation."
@@ -424,7 +456,7 @@ msgstr ""
"apenas a documentação."
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:228
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:247
msgid ""
"The [.filename]#Makefile# in the [.filename]#website# directory will build "
"only the website."
@@ -433,14 +465,14 @@ msgstr ""
"apenas a website."
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:229
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:248
msgid ""
"The [.filename]#Makefile# at the top of the tree will build both the "
"documentation and the website."
msgstr "O [.filename]#Makefile# na raíz irá compilar a documentação e o site."
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:232
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:251
msgid ""
"The [.filename]#Makefile# appearing in subdirectories also support `make "
"run` to serve built content with Hugo's internal webserver. This webserver "
@@ -451,18 +483,18 @@ msgstr ""
"servidor web roda na porta 1313 por padrão."
#. type: Title ===
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:234
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:253
#, no-wrap
msgid "Documentation Makefile"
msgstr "Makefile da Documentação"
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:237
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:256
msgid "This [.filename]#Makefile# takes the following form:"
msgstr "Este [.filename]#Makefile# suporta o seguinte:"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:262
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:281
#, no-wrap
msgid ""
"# Generate the FreeBSD documentation\n"
@@ -512,14 +544,14 @@ msgstr ""
"# webserver on port 1313.\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:264
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:546
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:283
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:565
#, no-wrap
msgid "MAINTAINER=carlavilla@FreeBSD.org <.>\n"
msgstr "MAINTAINER=carlavilla@FreeBSD.org <.>\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:269
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:288
#, no-wrap
msgid ""
"# List of languages without book translations\n"
@@ -533,7 +565,7 @@ msgstr ""
"BOOKONLY_LANGS=\t\tmn\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:272
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:291
#, no-wrap
msgid ""
"# List of all languages we have content for\n"
@@ -543,14 +575,14 @@ msgstr ""
"ALL_LANGUAGES=\tbn-bd da de el en es fr hu it ja ko mn nl pl pt-br ru tr zh-cn zh-tw <.>\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:274
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:551
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:293
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:570
#, no-wrap
msgid "LOCALBASE?=\t/usr/local\n"
msgstr "LOCALBASE?=\t/usr/local\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:281
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:300
#, no-wrap
msgid ""
"RUBY_CMD =\t${LOCALBASE}/bin/ruby <.>\n"
@@ -568,7 +600,7 @@ msgstr ""
"ASCIIDOCTORPDF_CMD=\t${LOCALBASE}/bin/asciidoctor-pdf\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:291
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:310
#, no-wrap
msgid ""
".if defined(DOC_LANG) && !empty(DOC_LANG)\n"
@@ -592,7 +624,7 @@ msgstr ""
".endif\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:294
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:313
#, no-wrap
msgid ""
"RUBYLIB =\t../shared/lib\n"
@@ -602,7 +634,7 @@ msgstr ""
".export\tRUBYLIB\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:298
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:317
#, no-wrap
msgid ""
"RUN_DEPENDS=\t${HUGO_CMD} \\\n"
@@ -614,8 +646,8 @@ msgstr ""
"\t\t${LOCALBASE}/bin/rougify\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:308
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:567
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:327
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:586
#, no-wrap
msgid ""
".ifndef HOSTNAME\n"
@@ -639,7 +671,7 @@ msgstr ""
".endif\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:315
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:334
#, no-wrap
msgid ""
"# Strip the languages with only articles from the list of languages we\n"
@@ -657,7 +689,7 @@ msgstr ""
".endfor\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:322
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:341
#, no-wrap
msgid ""
"# Strip the languages with only books from the list of languages we\n"
@@ -675,7 +707,7 @@ msgstr ""
".endfor\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:331
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:350
#, no-wrap
msgid ""
"# Take the list of all languages, and take out the ones we have been\n"
@@ -697,14 +729,14 @@ msgstr ""
".endfor\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:333
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:588
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:352
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:607
#, no-wrap
msgid ".ORDER: all run <.>\n"
msgstr ".ORDER: all run <.>\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:338
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:357
#, no-wrap
msgid ""
".ORDER: requirements <.>\n"
@@ -718,7 +750,7 @@ msgstr ""
".ORDER: build\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:341
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:360
#, no-wrap
msgid ""
"all: requirements starting-message generate-pgpkeys-txt build\n"
@@ -728,7 +760,7 @@ msgstr ""
"run: requirements starting-message generate-pgpkeys-txt run-local\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:344
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:363
#, no-wrap
msgid ""
"# clean does not call pdf-clean as that is a subset of hugo-clean\n"
@@ -738,7 +770,7 @@ msgstr ""
"clean: hugo-clean pgp-clean\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:351
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:370
#, no-wrap
msgid ""
"requirements:\n"
@@ -756,7 +788,7 @@ msgstr ""
".endfor\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:356
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:375
#, no-wrap
msgid ""
"requirements-pdf:\n"
@@ -770,7 +802,7 @@ msgstr ""
".endif\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:361
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:380
#, no-wrap
msgid ""
"requirements-epub:\n"
@@ -784,7 +816,7 @@ msgstr ""
".endif\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:368
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:387
#, no-wrap
msgid ""
"starting-message: .PHONY <.>\n"
@@ -802,13 +834,13 @@ msgstr ""
"\t@echo ---------------------------------------------------------------\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:370
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:389
#, no-wrap
msgid "generate-pgpkeys-txt: static/pgpkeys/pgpkeys.txt\n"
msgstr "generate-pgpkeys-txt: static/pgpkeys/pgpkeys.txt\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:373
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:392
#, no-wrap
msgid ""
"static/pgpkeys/pgpkeys.txt: static/pgpkeys/*key\n"
@@ -818,7 +850,7 @@ msgstr ""
"\t${RUBY_CMD} ./tools/global-pgpkeys-creator.rb\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:377
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:396
#, no-wrap
msgid ""
"run-local: .PHONY <.>\n"
@@ -830,8 +862,8 @@ msgstr ""
"\t\t${HUGO_ARGS} -D $(BIND:D--bind=$(BIND)) --baseURL=\"http://$(.HOST):1313\"\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:380
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:622
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:399
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:641
#, no-wrap
msgid ""
"build: .PHONY <.>\n"
@@ -841,7 +873,7 @@ msgstr ""
"\tHUGO_DISABLELANGUAGES=\"${SKIP_LANGS}\" ${HUGO_CMD} ${HUGO_ARGS}\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:383
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:402
#, no-wrap
msgid ""
"build-offline: .PHONY\n"
@@ -851,7 +883,7 @@ msgstr ""
"\tHUGO_DISABLELANGUAGES=\"${SKIP_LANGS}\" ${HUGO_CMD} ${HUGO_OFFLINE_ARGS}\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:386
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:405
#, no-wrap
msgid ""
"pgp-clean: .PHONY\n"
@@ -861,7 +893,7 @@ msgstr ""
"\trm -f static/pgpkeys/pgpkeys.txt\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:389
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:408
#, no-wrap
msgid ""
"hugo-clean: .PHONY\n"
@@ -871,7 +903,7 @@ msgstr ""
"\trm -rf resources public\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:395
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:414
#, no-wrap
msgid ""
"#\n"
@@ -887,7 +919,7 @@ msgstr ""
"pdf: pdf-articles pdf-books\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:400
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:419
#, no-wrap
msgid ""
"pdf-books: requirements-pdf\n"
@@ -901,7 +933,7 @@ msgstr ""
".endfor\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:405
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:424
#, no-wrap
msgid ""
"pdf-articles: requirements-pdf\n"
@@ -915,13 +947,13 @@ msgstr ""
".endfor\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:407
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:426
#, no-wrap
msgid "pdf-clean: pdf-articles-clean pdf-books-clean\n"
msgstr "pdf-clean: pdf-articles-clean pdf-books-clean\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:414
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:433
#, no-wrap
msgid ""
"pdf-books-clean:\n"
@@ -939,7 +971,7 @@ msgstr ""
"\t-rmdir ${.CURDIR}/public/\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:423
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:442
#, no-wrap
msgid ""
"pdf-articles-clean:\n"
@@ -961,7 +993,7 @@ msgstr ""
"\t-rmdir ${.CURDIR}/public\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:428
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:447
#, no-wrap
msgid ""
"#\n"
@@ -975,13 +1007,13 @@ msgstr ""
"html: build-offline html-clean-global html-clean-articles html-clean-books html-archive html-archive-clean-files\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:430
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:449
#, no-wrap
msgid "html-clean: hugo-clean\n"
msgstr "html-clean: hugo-clean\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:434
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:453
#, no-wrap
msgid ""
"html-clean-global:\n"
@@ -993,7 +1025,7 @@ msgstr ""
"\trm -rf pgpkeys js\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:440
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:459
#, no-wrap
msgid ""
"html-clean-articles:\n"
@@ -1009,7 +1041,7 @@ msgstr ""
".endfor\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:445
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:464
#, no-wrap
msgid ""
"html-clean-books:\n"
@@ -1023,7 +1055,7 @@ msgstr ""
".endfor\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:455
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:474
#, no-wrap
msgid ""
"html-archive:\n"
@@ -1047,7 +1079,7 @@ msgstr ""
".endif\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:461
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:480
#, no-wrap
msgid ""
"html-archive-clean-files:\n"
@@ -1063,7 +1095,7 @@ msgstr ""
".endif\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:467
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:486
#, no-wrap
msgid ""
"#\n"
@@ -1079,7 +1111,7 @@ msgstr ""
"epub: epub-articles epub-books\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:480
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:499
#, no-wrap
msgid ""
"epub-books: requirements-epub\n"
@@ -1109,7 +1141,7 @@ msgstr ""
".endfor\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:493
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:512
#, no-wrap
msgid ""
"epub-articles: requirements-epub\n"
@@ -1139,13 +1171,13 @@ msgstr ""
".endfor\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:495
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:514
#, no-wrap
msgid "epub-clean: epub-articles-clean epub-books-clean\n"
msgstr "epub-clean: epub-articles-clean epub-books-clean\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:502
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:521
#, no-wrap
msgid ""
"epub-books-clean:\n"
@@ -1163,7 +1195,7 @@ msgstr ""
"\t-rmdir ${.CURDIR}/public/\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:511
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:530
#, no-wrap
msgid ""
"epub-articles-clean:\n"
@@ -1185,13 +1217,13 @@ msgstr ""
"\t-rmdir ${.CURDIR}/public\n"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:514
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:636
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:533
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:655
msgid "The `MAINTAINER` flag specifies who is the maintainer of this Makefile."
msgstr "A flag `MAINTAINER` especifica quem é o mantenedor deste Makefile."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:515
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:534
msgid ""
"`ALL_LANGUAGES` flag specifies in which languages the table of contents has "
"to be generated."
@@ -1199,19 +1231,20 @@ msgstr ""
"A flag `ALL_LANGUAGES` especifica em quais idiomas o índice deve ser gerado."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:516
-msgid "`RUBY_CMD` flag specifies the location of the Python binary."
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:535
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:656
+msgid "`RUBY_CMD` flag specifies the location of the Ruby binary."
msgstr "A flag `RUBY_CMD` especifica a localização do binário Ruby."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:517
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:638
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:536
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:657
msgid "`HUGO_CMD` flag specifies the location of the Hugo binary."
msgstr "A flag `HUGO_CMD` especifica a localização do binário Hugo."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:518
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:639
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:537
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:658
msgid ""
"`.ORDER` directives are used to ensure multiple make jobs may run without "
"problem."
@@ -1220,7 +1253,7 @@ msgstr ""
"executados sem problemas."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:519
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:538
msgid ""
"`all` target builds the documentation and puts the result in *~/doc/"
"documentation/public*."
@@ -1229,8 +1262,8 @@ msgstr ""
"e coloca o resultado em *~/doc/documentation/public*."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:520
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:641
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:539
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:660
msgid ""
"`starting-message` shows a message in the CLI to show the user that the "
"process is running."
@@ -1239,8 +1272,8 @@ msgstr ""
"que o processo está em execução."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:521
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:644
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:540
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:663
msgid ""
"`run-local` runs hugo webserver on port 1313, or a random free port if that "
"is already in use."
@@ -1249,7 +1282,7 @@ msgstr ""
"aleatória se esta já estiver em uso."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:522
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:541
msgid ""
"`build` builds the documentation and puts the result in the *~/doc/"
"documentation/public*."
@@ -1258,18 +1291,18 @@ msgstr ""
"public*."
#. type: Title ===
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:524
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:543
#, no-wrap
msgid "Website Makefile"
msgstr "Makefile do Website"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:527
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:546
msgid "This [.filename]#Makefile# takes the form of:"
msgstr "Este é o [.filename]#Makefile#:"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:544
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:563
#, no-wrap
msgid ""
"# Generate the FreeBSD website\n"
@@ -1303,7 +1336,7 @@ msgstr ""
"# webserver on port 1313.\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:549
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:568
#, no-wrap
msgid ""
"# List of all languages we have content for\n"
@@ -1313,7 +1346,7 @@ msgstr ""
"ALL_LANGUAGES=\tde el en es fr hu it ja nl ru tr zh-cn zh-tw\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:557
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:576
#, no-wrap
msgid ""
"RUBY_CMD =\t${LOCALBASE}/bin/ruby <.>\n"
@@ -1329,7 +1362,7 @@ msgstr ""
".export\tRUBYLIB\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:577
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:596
#, no-wrap
msgid ""
".if defined(DOC_LANG) && !empty(DOC_LANG)\n"
@@ -1353,7 +1386,7 @@ msgstr ""
".endif\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:586
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:605
#, no-wrap
msgid ""
"# Take the list of all languages, and take out the ones we have been\n"
@@ -1375,7 +1408,7 @@ msgstr ""
".endfor\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:594
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:613
#, no-wrap
msgid ""
".ORDER: starting-message generate-releases\n"
@@ -1391,7 +1424,7 @@ msgstr ""
".ORDER: post-build end-message\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:598
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:617
#, no-wrap
msgid ""
"all: starting-message generate-releases build post-build end-message <.>\n"
@@ -1403,7 +1436,7 @@ msgstr ""
"clean: hugo-clean releases-clean\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:605
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:624
#, no-wrap
msgid ""
"starting-message: .PHONY <.>\n"
@@ -1421,7 +1454,7 @@ msgstr ""
"\t@echo \"---------------------------------------------------------------\"\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:610
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:629
#, no-wrap
msgid ""
"end-message: .PHONY\n"
@@ -1435,13 +1468,13 @@ msgstr ""
"\t@echo ---------------------------------------------------------------\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:612
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:631
#, no-wrap
msgid "generate-releases: data/releases.toml <.>\n"
msgstr "generate-releases: data/releases.toml <.>\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:615
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:634
#, no-wrap
msgid ""
"data/releases.toml:\n"
@@ -1451,7 +1484,7 @@ msgstr ""
"\t${RUBY_CMD} ./tools/releases-toml.rb\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:619
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:638
#, no-wrap
msgid ""
"run-local: .PHONY <.>\n"
@@ -1463,13 +1496,13 @@ msgstr ""
"\t ${HUGO_ARGS} -D $(BIND:D--bind=$(BIND)) --baseURL=\"http://$(.HOST):1313\"\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:624
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:643
#, no-wrap
msgid "post-build: cgi-permissions\n"
msgstr "post-build: cgi-permissions\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:627
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:646
#, no-wrap
msgid ""
"cgi-permissions:\n"
@@ -1479,7 +1512,7 @@ msgstr ""
"\t@chmod 555 ./public/cgi/*.cgi\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:630
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:649
#, no-wrap
msgid ""
"hugo-clean:\n"
@@ -1489,7 +1522,7 @@ msgstr ""
"\trm -fr public resources\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:633
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:652
#, no-wrap
msgid ""
"releases-clean:\n"
@@ -1499,12 +1532,7 @@ msgstr ""
"\trm -f data/releases.toml\n"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:637
-msgid "`RUBY_CMD` flag specifies the location of the Ruby binary."
-msgstr "A flag `RUBY_CMD` especifica a localização do binário Ruby."
-
-#. type: Plain text
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:640
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:659
msgid ""
"`all` target builds the website and puts the result in *~/doc/website/"
"public*."
@@ -1513,7 +1541,7 @@ msgstr ""
"public*."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:643
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:662
msgid ""
"`generate-releases` calls the script used to convert from AsciiDoc variables "
"to TOML variables. With this conversion, the releases variables can be used "
@@ -1524,12 +1552,15 @@ msgstr ""
"podem ser utilizadas no AsciiDoc e nos templates personalizados do Hugo."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:644
+#: documentation/content/en/books/fdp-primer/doc-build/_index.adoc:663
msgid ""
"`build` builds the website and puts the result in the *~/doc/website/public*."
msgstr ""
"`build` compila o website e coloca o resultado em *~/doc/website/public*."
+#~ msgid "`RUBY_CMD` flag specifies the location of the Python binary."
+#~ msgstr "A flag `RUBY_CMD` especifica a localização do binário Ruby."
+
#, no-wrap
#~ msgid ""
#~ "| Formats\n"
diff --git a/documentation/content/pt-br/books/fdp-primer/editor-config/_index.adoc b/documentation/content/pt-br/books/fdp-primer/editor-config/_index.adoc
index 661deb9151..899d056db5 100644
--- a/documentation/content/pt-br/books/fdp-primer/editor-config/_index.adoc
+++ b/documentation/content/pt-br/books/fdp-primer/editor-config/_index.adoc
@@ -1,11 +1,11 @@
---
description: 'Configuração usada nos editores de textos do Projeto de Documentação do FreeBSD'
-next: books/fdp-primer/see-also
-path: /books/fdp-primer/
+next: books/fdp-primer/trademarks
+path: "/books/fdp-primer/editor-config/"
prev: books/fdp-primer/writing-style
showBookMenu: 'true'
tags: ["editor", "configuration", "vim", "emacs", "FreeBSD"]
-title: 'Capítulo 12. Configuração do Editor'
+title: 'Capítulo 13. Configuração do Editor'
weight: 13
---
@@ -17,7 +17,7 @@ weight: 13
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 12
+:sectnumoffset: 13
:partnums:
:source-highlighter: rouge
:experimental:
@@ -52,60 +52,119 @@ Ajustar a configuração do editor de texto pode tornar o trabalho nos arquivos
[[editor-config-vim]]
== Vim
-Instale-o a partir de package:editors/vim[], package:editors/vim-console[], ou package:editors/vim-tiny[] e siga as instruções de configuração em <<editor-config-vim-config>>.
+Instale o package:editors/vim[], ou package:editors/vim-console[], em seguida siga as instruções em <<editor-config-vim-config>>. Usuários mais avançados podem usar um linter mais adequado como o link:https://github.com/dense-analysis/ale[Ale] que também pode atuar como um link:https://langserver.org/[Protocolo de Servidor de Idiomas] do Vim.
[[editor-config-vim-use]]
=== Uso
-Pressione kbd:[P] tpara reformatar parágrafos ou texto selecionado no modo Visual. Pressione kbd:[T] para substituir grupos de oito espaços por um tab.
+Os escritores de páginas de manuais podem usar os seguintes atalhos de teclado para reformatar:
+
+* Pressione kbd:[P] para reformatar parágrafos ou texto selecionado no modo Visual.
+* Pressione kbd:[T] para substituir grupos de oito espaços por um tab.
+
+Um linter chamado link:https://vale.sh[Vale] foi adicionado para verificar erros gramaticais e cosméticos nos documentos. O Vale possui suporte para diversos editores e IDEs.
+
+O Vale já é instalado como uma dependência do package:textproc/docproj[] meta-port. Caso contrário, instale package:textproc/vale[] com:
+
+[source, console]
+....
+$ pkg install vale
+....
+
+Instale o link:https://github.com/dense-analysis/ale[Ale] para intergrar o package:textproc/vale[] com o package:editors/vim[].
+
+[source, console?prompt=%]
+....
+% mkdir -p ~/.vim/pack/vendor/start
+% git clone --depth 1 https://github.com/dense-analysis/ale.git ~/.vim/pack/vendor/start/ale
+....
+
+Os usuários que estão usando gerenciadores de plug-in no package:editors/vim[] não precisam dos passos acima e devem seguir as instruções do próprio gerenciador de plug-in para instalar o link:https://github.com/dense-analysis/ale[Ale].
+
+Neste momento devido a um bug no link:https://vale.sh[Vale] é necessário copiar a configuração do link:https://vale.sh[Vale] para o diretório home. Considerando que o repositório foi clonado em [.filename]#~/doc# da seguinte forma:
+
+[source, console?prompt=%]
+....
+% cp -R ~/doc/.vale* ~/
+....
[[editor-config-vim-config]]
=== Configuração
Edite o [.filename]#~/.vimrc#, adicionando estas linhas ao final do arquivo:
-[.programlisting]
+[source.programlisting, viml]
+.`~/.vimrc`
....
if has("autocmd")
- au BufNewFile,BufRead *.sgml,*.ent,*.xsl,*.xml call Set_SGML()
- au BufNewFile,BufRead *.[1-9] call ShowSpecial()
+ au BufNewFile,BufRead *.adoc call Set_ADOC()
+ au BufNewFile,BufRead *.[1-9] call Set_MAN()
endif " has(autocmd)
function Set_Highlights()
- "match ExtraWhitespace /^\s* \s*\|\s\+$/
- highlight default link OverLength ErrorMsg
- match OverLength /\%71v.\+/
- return 0
-endfunction " Set_Highlights()
+ "match ExtraWhitespace /^\s* \s*\|\s\+$/
+ return 0
+endfunction " Set_Highlights_Adoc()
+
+function Set_Highlights_MAN()
+ highlight default link OverLength ErrorMsg
+ match OverLength /\%71v.\+/
+ return 0
+endfunction " Set_Highlights_MAN()
function ShowSpecial()
- setlocal list listchars=tab:>>,trail:*,eol:$
- hi def link nontext ErrorMsg
- return 0
+ setlocal list listchars=tab:>>,trail:*,eol:$
+ hi def link nontext ErrorMsg
+ return 0
endfunction " ShowSpecial()
-function Set_SGML()
- setlocal number
- syn match sgmlSpecial "&[^;]*;"
- setlocal syntax=sgml
- setlocal filetype=xml
- setlocal shiftwidth=2
- setlocal textwidth=70
- setlocal tabstop=8
- setlocal softtabstop=2
- setlocal formatprg="fmt -p"
- setlocal autoindent
- setlocal smartindent
- " Rewrap paragraphs
- noremap P gqj
- " Replace spaces with tabs
- noremap T :s/ /\t/<CR>
- call ShowSpecial()
- call Set_Highlights()
- return 0
-endfunction " Set_SGML()
+function Set_COMMON()
+ setlocal number
+ setlocal shiftwidth=2
+ setlocal tabstop=8
+ setlocal softtabstop=2
+ setlocal formatprg="fmt -p"
+ setlocal autoindent
+ setlocal smartindent
+ call ShowSpecial()
+ call Set_Highlights()
+ return 0
+endfunction " Set_COMMON()
+
+function Set_ADOC()
+ setlocal syntax=asciidoc
+ setlocal filetype=asciidoc
+ call Set_COMMON()
+ return 0
+endfunction " Set_ADOC()
+
+function Set_MAN()
+ setlocal syntax=man
+ setlocal filetype=man
+ setlocal textwidth=70
+ " Rewrap paragraphs
+ noremap P gqj
+ " Replace spaces with tabs
+ noremap T :s/ /\t/<CR>
+ call Set_COMMON()
+ call Set_Highlights_MAN()
+ return 0
+endfunction " Set_Man()
+
+let g:ale_fixers = {
+\ '*': ['remove_trailing_lines', 'trim_whitespace'],
+\}
+let g:ale_linters = {
+\ 'asciidoc': ['vale'],
+\}
+let g:ale_fix_on_save = 1
....
+[IMPORTANT]
+======
+A configuração acima removerá automaticamente a linha final, o espaço final e vários espaços que podem exibir alterações indesejadas adicionais na saída do `git diff`. Nesses casos, mencione isso adequadamente no log de commit.
+======
+
[[editor-config-emacs]]
== Emacs
@@ -116,21 +175,24 @@ Instale-o a partir de package:editors/emacs[] ou package:editors/emacs-devel[].
O modo nxml do Emacs usa esquemas NG relax compacto para validar o XML. Um esquema NG relax compacto para a extensão do FreeBSD para DocBook 5.0 está incluído no repositório de documentação. Para configurar o modo nxml para validar usando este esquema, crie [.filename]#~/.emacs.d/schema/schemas.xml# e adicione estas linhas ao arquivo:
+[source, xml]
+.`~/.emacs.d/schema/schemas.xml`
....
-locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0"
- documentElement localName="section" typeId="DocBook"
- documentElement localName="chapter" typeId="DocBook"
- documentElement localName="article" typeId="DocBook"
- documentElement localName="book" typeId="DocBook"
- typeId id="DocBook" uri="/usr/local/share/xml/docbook/5.0/rng/docbook.rnc"
-locatingRules
+<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0">
+ <documentElement localName="section" typeId="DocBook" />
+ <documentElement localName="chapter" typeId="DocBook" />
+ <documentElement localName="article" typeId="DocBook" />
+ <documentElement localName="book" typeId="DocBook" />
+ <typeId id="DocBook" uri="/usr/local/share/xml/docbook/5.0/rng/docbook.rnc" />
+</locatingRules>
....
[[editor-config-emacs-igor]]
=== Revisão Automatizada com Flycheck e Igor
-O pacote Flycheck está disponível no Emacs Lisp Package Archive da Milkypostman (MELPA). Se a MELPA ainda não estiver nos repositórios de pacotes do Emacs, ele pode ser adicionado executando
+O pacote link:https://www.flycheck.org/[Flycheck] está disponível no link:https://melpa.org/[Emacs Lisp Package Archive da Milkypostman] (MELPA). Se a MELPA ainda não estiver nos repositórios de pacotes do Emacs, ele pode ser adicionado executando
+[source, emacs-lisp]
....
(add-to-list 'package-archives '("melpa" . "http://stable.melpa.org/packages/") t)
....
@@ -139,12 +201,14 @@ Adicione a linha ao arquivo de inicialização do Emacs (qualquer um deles, [.fi
Para instalar o Flycheck, execute
+[source, emacs-lisp]
....
(package-install 'flycheck)
....
Crie um verificador Flycheck para package:textproc/igor[] executando
+[source, emacs-lisp]
....
(flycheck-define-checker igor
"FreeBSD Documentation Project sanity checker.
@@ -187,17 +251,50 @@ Instale o aplicativo partir de package:editors/nano[] ou package:editors/nano-de
[[editor-config-nano-config]]
=== Configuração
-Copie o arquivo com a amostra da regra para realce da sintaxe XML para o diretório inicial do usuário:
+Atualmente não há arquivo de highlight de sintaxe adoc/asciidoc com distribuição nano. Então vamos criar um do zero e usar um editor para criar um novo arquivo ou adicionar linhas no [.filename]#~/.nanorc# com este conteúdo:
-[source, shell]
-....
-% cp /usr/local/share/nano/xml.nanorc ~/.nanorc
+[source]
+.`~/.nanorc`
....
-
-Use um editor para substituir as linhas do [.filename]#~/.nanorc# referentes ao bloco `syntax "xml"` por estas regras:
-
-....
-syntax "xml" "\.([jrs]html?|xml|xslt?)$"
+syntax "asciidoc" "\.(adoc|asc|asciidoc)$"
+# main header
+color red "^====+$"
+# h1
+color red "^==[[:space:]].*$"
+color red "^----+$"
+# h2
+color magenta "^===[[:space:]].*$"
+color magenta "^~~~~+$"
+# h4
+color green "^====[[:space:]].*$"
+color green "^\^\^\^\^+$"
+# h5
+color brightblue "^=====[[:space:]].*$"
+color brightblue "^\+\+\+\++$"
+# attributes
+color brightgreen ":.*:"
+color brightred "\{[a-z0-9]*\}"
+color red "\\\{[a-z0-9]*\}"
+color red "\+\+\+\{[a-z0-9]*\}\+\+\+"
+# Paragraph Title
+color yellow "^\..*$"
+# source
+color magenta "^\[(source,.+|NOTE|TIP|IMPORTANT|WARNING|CAUTION)\]"
+# Other markup
+color yellow ".*[[:space:]]\+$"
+color yellow "_[^_]+_"
+color yellow "\*[^\*]+\*"
+color yellow "\+[^\+]+\+"
+color yellow "`[^`]+`"
+color yellow "\^[^\^]+\^"
+color yellow "~[^~]+~"
+color yellow "'[^']+'"
+color cyan "`{1,2}[^']+'{1,2}"
+# bullets
+color brightmagenta "^[[:space:]]*[\*\.-]{1,5}[[:space:]]"
+# anchors
+color brightwhite "\[\[.*\]\]"
+color brightwhite "<<.*>>"
# trailing whitespace
color ,blue "[[:space:]]+$"
# multiples of eight spaces at the start a line
@@ -207,13 +304,11 @@ color ,blue "^([TAB]*[ ]{8})+"
color ,yellow "( )+TAB"
# highlight indents that have an odd number of spaces
color ,red "^(([ ]{2})+|(TAB+))*[ ]{1}[^ ]{1}"
-# lines longer than 70 characters
-color ,yellow "^(.{71})|(TAB.{63})|(TAB{2}.{55})|(TAB{3}.{47}).+$"
....
Processe o arquivo para criar guias incorporadas:
-[source, shell]
+[source, console?prompt=%]
....
% perl -i'' -pe 's/TAB/\t/g' ~/.nanorc
....
@@ -223,20 +318,21 @@ Processe o arquivo para criar guias incorporadas:
Especifique opções úteis adicionais ao executar o editor:
-[source, shell]
+[source, console?prompt=%]
....
-% nano -AKipwz -r 70 -T8 _index.adoc
+% nano -AKipwz -T8 _index.adoc
....
Usuários do man:csh[1] podem definir um alias em [.filename]#~/.cshrc# para automatizar estas opções:
+[source, shell]
....
alias nano "nano -AKipwz -r 70 -T8"
....
Depois que o alias é definido, as opções serão adicionadas automaticamente:
-[source, shell]
+[source, console?prompt=%]
....
% nano _index.adoc
....
diff --git a/documentation/content/pt-br/books/fdp-primer/editor-config/_index.po b/documentation/content/pt-br/books/fdp-primer/editor-config/_index.po
index 2078fe2d79..3cab9abbd5 100644
--- a/documentation/content/pt-br/books/fdp-primer/editor-config/_index.po
+++ b/documentation/content/pt-br/books/fdp-primer/editor-config/_index.po
@@ -1,13 +1,14 @@
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
-# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2022, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2022-02-01 09:20-0300\n"
-"PO-Revision-Date: 2021-11-05 11:08+0000\n"
-"Last-Translator: Danilo G. Baio <dbaio@FreeBSD.org>\n"
+"POT-Creation-Date: 2023-06-19 21:07-0300\n"
+"PO-Revision-Date: 2023-07-02 17:42+0000\n"
+"Last-Translator: \"Danilo G. Baio\" <dbaio@FreeBSD.org>\n"
"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
"projects/documentation/booksfdp-primereditor-config_index/pt_BR/>\n"
"Language: pt_BR\n"
@@ -15,7 +16,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.1\n"
+"X-Generator: Weblate 4.17\n"
#. type: YAML Front Matter: description
#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:1
@@ -26,8 +27,8 @@ msgstr "Configuração usada nos editores de textos do Projeto de Documentação
#. type: YAML Front Matter: title
#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:1
#, no-wrap
-msgid "Chapter 12. Editor Configuration"
-msgstr "Capítulo 12. Configuração do Editor"
+msgid "Chapter 13. Editor Configuration"
+msgstr "Capítulo 13. Configuração do Editor"
#. type: Title =
#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:13
@@ -52,19 +53,23 @@ msgid "Vim"
msgstr "Vim"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:56
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:57
msgid ""
-"Install from package:editors/vim[], package:editors/vim-console[], or "
-"package:editors/vim-tiny[] then follow the configuration instructions in "
-"<<editor-config-vim-config>>."
+"Install from package:editors/vim[], or package:editors/vim-console[], then "
+"follow the configuration instructions in <<editor-config-vim-config>>. More "
+"advanced users can use a proper linter like link:https://github.com/dense-"
+"analysis/ale[Ale] which can also act as a Vim link:https://langserver.org/"
+"[Language Server Protocol] client."
msgstr ""
-"Instale-o a partir de package:editors/vim[], package:editors/vim-console[], "
-"ou package:editors/vim-tiny[] e siga as instruções de configuração em "
-"<<editor-config-vim-config>>."
+"Instale o package:editors/vim[], ou package:editors/vim-console[], em "
+"seguida siga as instruções em <<editor-config-vim-config>>. Usuários mais "
+"avançados podem usar um linter mais adequado como o link:https://github.com/"
+"dense-analysis/ale[Ale] que também pode atuar como um link:https://"
+"langserver.org/[Protocolo de Servidor de Idiomas] do Vim."
#. type: Title ===
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:58
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:226
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:59
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:326
#, no-wrap
msgid "Use"
msgstr "Uso"
@@ -72,140 +77,310 @@ msgstr "Uso"
#. type: Plain text
#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:62
msgid ""
+"Manual page writers can use the following keyboard shortcuts to reformat:"
+msgstr ""
+"Os escritores de páginas de manuais podem usar os seguintes atalhos de "
+"teclado para reformatar:"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:64
+msgid ""
"Press kbd:[P] to reformat paragraphs or text that has been selected in "
-"Visual mode. Press kbd:[T] to replace groups of eight spaces with a tab."
+"Visual mode."
+msgstr ""
+"Pressione kbd:[P] para reformatar parágrafos ou texto selecionado no modo "
+"Visual."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:65
+msgid "Press kbd:[T] to replace groups of eight spaces with a tab."
+msgstr "Pressione kbd:[T] para substituir grupos de oito espaços por um tab."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:68
+msgid ""
+"A linter named link:https://vale.sh[Vale] has been introduced to check "
+"grammatical and cosmetic errors on the documents. Vale has support for "
+"various editors and IDEs."
+msgstr ""
+"Um linter chamado link:https://vale.sh[Vale] foi adicionado para verificar "
+"erros gramaticais e cosméticos nos documentos. O Vale possui suporte para "
+"diversos editores e IDEs."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:71
+msgid ""
+"Vale may already be installed as a dependency of the package:textproc/"
+"docproj[] meta-port. If not, install package:textproc/vale[] with:"
+msgstr ""
+"O Vale já é instalado como uma dependência do package:textproc/docproj[] "
+"meta-port. Caso contrário, instale package:textproc/vale[] com:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:75
+#, no-wrap
+msgid "$ pkg install vale\n"
+msgstr "$ pkg install vale\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:78
+msgid ""
+"Install link:https://github.com/dense-analysis/ale[Ale] to integrate into "
+"package:editors/vim[], for using package:textproc/vale[]."
+msgstr ""
+"Instale o link:https://github.com/dense-analysis/ale[Ale] para intergrar o "
+"package:textproc/vale[] com o package:editors/vim[]."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:83
+#, no-wrap
+msgid ""
+"% mkdir -p ~/.vim/pack/vendor/start\n"
+"% git clone --depth 1 https://github.com/dense-analysis/ale.git ~/.vim/pack/vendor/start/ale\n"
msgstr ""
-"Pressione kbd:[P] tpara reformatar parágrafos ou texto selecionado no modo "
-"Visual. Pressione kbd:[T] para substituir grupos de oito espaços por um tab."
+"% mkdir -p ~/.vim/pack/vendor/start\n"
+"% git clone --depth 1 https://github.com/dense-analysis/ale.git ~/.vim/pack/vendor/start/ale\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:86
+msgid ""
+"Users who are using plugin managers for package:editors/vim[] do not need "
+"the above and should follow the instructions of that plugin manager to "
+"install link:https://github.com/dense-analysis/ale[Ale]."
+msgstr ""
+"Os usuários que estão usando gerenciadores de plug-in no package:editors/"
+"vim[] não precisam dos passos acima e devem seguir as instruções do próprio "
+"gerenciador de plug-in para instalar o link:https://github.com/dense-"
+"analysis/ale[Ale]."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:89
+msgid ""
+"At this moment due to a bug in link:https://vale.sh[Vale] it is necessary to "
+"copy the link:https://vale.sh[Vale] configuration to the home directory. "
+"Considering the repository was cloned into [.filename]#~/doc# copy as "
+"following:"
+msgstr ""
+"Neste momento devido a um bug no link:https://vale.sh[Vale] é necessário "
+"copiar a configuração do link:https://vale.sh[Vale] para o diretório home. "
+"Considerando que o repositório foi clonado em [.filename]#~/doc# da seguinte "
+"forma:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:93
+#, no-wrap
+msgid "% cp -R ~/doc/.vale* ~/\n"
+msgstr "% cp -R ~/doc/.vale* ~/\n"
#. type: Title ===
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:64
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:192
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:96
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:260
#, no-wrap
msgid "Configuration"
msgstr "Configuração"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:67
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:99
msgid "Edit [.filename]#~/.vimrc#, adding these lines to the end of the file:"
msgstr ""
"Edite o [.filename]#~/.vimrc#, adicionando estas linhas ao final do arquivo:"
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:101
+#, no-wrap
+msgid "`~/.vimrc`"
+msgstr "`~/.vimrc`"
+
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:74
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:107
#, no-wrap
msgid ""
"if has(\"autocmd\")\n"
-" au BufNewFile,BufRead *.sgml,*.ent,*.xsl,*.xml call Set_SGML()\n"
-" au BufNewFile,BufRead *.[1-9] call ShowSpecial()\n"
+" au BufNewFile,BufRead *.adoc call Set_ADOC()\n"
+" au BufNewFile,BufRead *.[1-9] call Set_MAN()\n"
"endif \" has(autocmd)\n"
msgstr ""
"if has(\"autocmd\")\n"
-" au BufNewFile,BufRead *.sgml,*.ent,*.xsl,*.xml call Set_SGML()\n"
-" au BufNewFile,BufRead *.[1-9] call ShowSpecial()\n"
+" au BufNewFile,BufRead *.adoc call Set_ADOC()\n"
+" au BufNewFile,BufRead *.[1-9] call Set_MAN()\n"
"endif \" has(autocmd)\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:81
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:112
#, no-wrap
msgid ""
"function Set_Highlights()\n"
-" \"match ExtraWhitespace /^\\s* \\s*\\|\\s\\+$/\n"
-" highlight default link OverLength ErrorMsg\n"
-" match OverLength /\\%71v.\\+/\n"
-" return 0\n"
-"endfunction \" Set_Highlights()\n"
+" \"match ExtraWhitespace /^\\s* \\s*\\|\\s\\+$/\n"
+" return 0\n"
+"endfunction \" Set_Highlights_Adoc()\n"
msgstr ""
"function Set_Highlights()\n"
-" \"match ExtraWhitespace /^\\s* \\s*\\|\\s\\+$/\n"
-" highlight default link OverLength ErrorMsg\n"
-" match OverLength /\\%71v.\\+/\n"
-" return 0\n"
-"endfunction \" Set_Highlights()\n"
+" \"match ExtraWhitespace /^\\s* \\s*\\|\\s\\+$/\n"
+" return 0\n"
+"endfunction \" Set_Highlights_Adoc()\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:118
+#, no-wrap
+msgid ""
+"function Set_Highlights_MAN()\n"
+" highlight default link OverLength ErrorMsg\n"
+" match OverLength /\\%71v.\\+/\n"
+" return 0\n"
+"endfunction \" Set_Highlights_MAN()\n"
+msgstr ""
+"function Set_Highlights_MAN()\n"
+" highlight default link OverLength ErrorMsg\n"
+" match OverLength /\\%71v.\\+/\n"
+" return 0\n"
+"endfunction \" Set_Highlights_MAN()\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:87
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:124
#, no-wrap
msgid ""
"function ShowSpecial()\n"
-" setlocal list listchars=tab:>>,trail:*,eol:$\n"
-" hi def link nontext ErrorMsg\n"
-" return 0\n"
+" setlocal list listchars=tab:>>,trail:*,eol:$\n"
+" hi def link nontext ErrorMsg\n"
+" return 0\n"
"endfunction \" ShowSpecial()\n"
msgstr ""
"function ShowSpecial()\n"
-" setlocal list listchars=tab:>>,trail:*,eol:$\n"
-" hi def link nontext ErrorMsg\n"
-" return 0\n"
+" setlocal list listchars=tab:>>,trail:*,eol:$\n"
+" hi def link nontext ErrorMsg\n"
+" return 0\n"
"endfunction \" ShowSpecial()\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:108
-#, no-wrap
-msgid ""
-"function Set_SGML()\n"
-" setlocal number\n"
-" syn match sgmlSpecial \"&[^;]*;\"\n"
-" setlocal syntax=sgml\n"
-" setlocal filetype=xml\n"
-" setlocal shiftwidth=2\n"
-" setlocal textwidth=70\n"
-" setlocal tabstop=8\n"
-" setlocal softtabstop=2\n"
-" setlocal formatprg=\"fmt -p\"\n"
-" setlocal autoindent\n"
-" setlocal smartindent\n"
-" \" Rewrap paragraphs\n"
-" noremap P gqj\n"
-" \" Replace spaces with tabs\n"
-" noremap T :s/ /\\t/<CR>\n"
-" call ShowSpecial()\n"
-" call Set_Highlights()\n"
-" return 0\n"
-"endfunction \" Set_SGML()\n"
-msgstr ""
-"function Set_SGML()\n"
-" setlocal number\n"
-" syn match sgmlSpecial \"&[^;]*;\"\n"
-" setlocal syntax=sgml\n"
-" setlocal filetype=xml\n"
-" setlocal shiftwidth=2\n"
-" setlocal textwidth=70\n"
-" setlocal tabstop=8\n"
-" setlocal softtabstop=2\n"
-" setlocal formatprg=\"fmt -p\"\n"
-" setlocal autoindent\n"
-" setlocal smartindent\n"
-" \" Rewrap paragraphs\n"
-" noremap P gqj\n"
-" \" Replace spaces with tabs\n"
-" noremap T :s/ /\\t/<CR>\n"
-" call ShowSpecial()\n"
-" call Set_Highlights()\n"
-" return 0\n"
-"endfunction \" Set_SGML()\n"
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:137
+#, no-wrap
+msgid ""
+"function Set_COMMON()\n"
+" setlocal number\n"
+" setlocal shiftwidth=2\n"
+" setlocal tabstop=8\n"
+" setlocal softtabstop=2\n"
+" setlocal formatprg=\"fmt -p\"\n"
+" setlocal autoindent\n"
+" setlocal smartindent\n"
+" call ShowSpecial()\n"
+" call Set_Highlights()\n"
+" return 0\n"
+"endfunction \" Set_COMMON()\n"
+msgstr ""
+"function Set_COMMON()\n"
+" setlocal number\n"
+" setlocal shiftwidth=2\n"
+" setlocal tabstop=8\n"
+" setlocal softtabstop=2\n"
+" setlocal formatprg=\"fmt -p\"\n"
+" setlocal autoindent\n"
+" setlocal smartindent\n"
+" call ShowSpecial()\n"
+" call Set_Highlights()\n"
+" return 0\n"
+"endfunction \" Set_COMMON()\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:144
+#, no-wrap
+msgid ""
+"function Set_ADOC()\n"
+" setlocal syntax=asciidoc\n"
+" setlocal filetype=asciidoc\n"
+" call Set_COMMON()\n"
+" return 0\n"
+"endfunction \" Set_ADOC()\n"
+msgstr ""
+"function Set_ADOC()\n"
+" setlocal syntax=asciidoc\n"
+" setlocal filetype=asciidoc\n"
+" call Set_COMMON()\n"
+" return 0\n"
+"endfunction \" Set_ADOC()\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:157
+#, no-wrap
+msgid ""
+"function Set_MAN()\n"
+" setlocal syntax=man\n"
+" setlocal filetype=man\n"
+" setlocal textwidth=70\n"
+" \" Rewrap paragraphs\n"
+" noremap P gqj\n"
+" \" Replace spaces with tabs\n"
+" noremap T :s/ /\\t/<CR>\n"
+" call Set_COMMON()\n"
+" call Set_Highlights_MAN()\n"
+" return 0\n"
+"endfunction \" Set_Man()\n"
+msgstr ""
+"function Set_MAN()\n"
+" setlocal syntax=man\n"
+" setlocal filetype=man\n"
+" setlocal textwidth=70\n"
+" \" Rewrap paragraphs\n"
+" noremap P gqj\n"
+" \" Replace spaces with tabs\n"
+" noremap T :s/ /\\t/<CR>\n"
+" call Set_COMMON()\n"
+" call Set_Highlights_MAN()\n"
+" return 0\n"
+"endfunction \" Set_Man()\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:165
+#, no-wrap
+msgid ""
+"let g:ale_fixers = {\n"
+"\\ '*': ['remove_trailing_lines', 'trim_whitespace'],\n"
+"\\}\n"
+"let g:ale_linters = {\n"
+"\\ 'asciidoc': ['vale'],\n"
+"\\}\n"
+"let g:ale_fix_on_save = 1\n"
+msgstr ""
+"let g:ale_fixers = {\n"
+"\\ '*': ['remove_trailing_lines', 'trim_whitespace'],\n"
+"\\}\n"
+"let g:ale_linters = {\n"
+"\\ 'asciidoc': ['vale'],\n"
+"\\}\n"
+"let g:ale_fix_on_save = 1\n"
+
+#. type: delimited block = 6
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:171
+msgid ""
+"Above configuration will automatically remove trailing line, trailing space "
+"and multiple spaces which might display additional unwanted changes in `git "
+"diff` output. In such cases properly mention that in the commit log."
+msgstr ""
+"A configuração acima removerá automaticamente a linha final, o espaço final "
+"e vários espaços que podem exibir alterações indesejadas adicionais na saída "
+"do `git diff`. Nesses casos, mencione isso adequadamente no log de commit."
#. type: Title ==
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:111
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:174
#, no-wrap
msgid "Emacs"
msgstr "Emacs"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:114
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:177
msgid "Install from package:editors/emacs[] or package:editors/emacs-devel[]."
msgstr ""
"Instale-o a partir de package:editors/emacs[] ou package:editors/emacs-"
"devel[]."
#. type: Title ===
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:116
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:179
#, no-wrap
msgid "Validation"
msgstr "Validação"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:121
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:184
msgid ""
"Emacs's nxml-mode uses compact relax NG schemas for validating XML. A "
"compact relax NG schema for FreeBSD's extension to DocBook 5.0 is included "
@@ -219,51 +394,59 @@ msgstr ""
"validar usando este esquema, crie [.filename]#~/.emacs.d/schema/schemas.xml# "
"e adicione estas linhas ao arquivo:"
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:186
+#, no-wrap
+msgid "`~/.emacs.d/schema/schemas.xml`"
+msgstr "`~/.emacs.d/schema/schemas.xml`"
+
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:130
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:195
#, no-wrap
msgid ""
-"locatingRules xmlns=\"http://thaiopensource.com/ns/locating-rules/1.0\"\n"
-" documentElement localName=\"section\" typeId=\"DocBook\"\n"
-" documentElement localName=\"chapter\" typeId=\"DocBook\"\n"
-" documentElement localName=\"article\" typeId=\"DocBook\"\n"
-" documentElement localName=\"book\" typeId=\"DocBook\"\n"
-" typeId id=\"DocBook\" uri=\"/usr/local/share/xml/docbook/5.0/rng/docbook.rnc\"\n"
-"locatingRules\n"
+"<locatingRules xmlns=\"http://thaiopensource.com/ns/locating-rules/1.0\">\n"
+" <documentElement localName=\"section\" typeId=\"DocBook\" />\n"
+" <documentElement localName=\"chapter\" typeId=\"DocBook\" />\n"
+" <documentElement localName=\"article\" typeId=\"DocBook\" />\n"
+" <documentElement localName=\"book\" typeId=\"DocBook\" />\n"
+" <typeId id=\"DocBook\" uri=\"/usr/local/share/xml/docbook/5.0/rng/docbook.rnc\" />\n"
+"</locatingRules>\n"
msgstr ""
-"locatingRules xmlns=\"http://thaiopensource.com/ns/locating-rules/1.0\"\n"
-" documentElement localName=\"section\" typeId=\"DocBook\"\n"
-" documentElement localName=\"chapter\" typeId=\"DocBook\"\n"
-" documentElement localName=\"article\" typeId=\"DocBook\"\n"
-" documentElement localName=\"book\" typeId=\"DocBook\"\n"
-" typeId id=\"DocBook\" uri=\"/usr/local/share/xml/docbook/5.0/rng/docbook.rnc\"\n"
-"locatingRules\n"
+"<locatingRules xmlns=\"http://thaiopensource.com/ns/locating-rules/1.0\">\n"
+" <documentElement localName=\"section\" typeId=\"DocBook\" />\n"
+" <documentElement localName=\"chapter\" typeId=\"DocBook\" />\n"
+" <documentElement localName=\"article\" typeId=\"DocBook\" />\n"
+" <documentElement localName=\"book\" typeId=\"DocBook\" />\n"
+" <typeId id=\"DocBook\" uri=\"/usr/local/share/xml/docbook/5.0/rng/docbook.rnc\" />\n"
+"</locatingRules>\n"
#. type: Title ===
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:133
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:198
#, no-wrap
msgid "Automated Proofreading with Flycheck and Igor"
msgstr "Revisão Automatizada com Flycheck e Igor"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:137
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:202
msgid ""
-"The Flycheck package is available from Milkypostman's Emacs Lisp Package "
-"Archive (MELPA). If MELPA is not already in Emacs's packages-archives, it "
-"can be added by evaluating"
+"The link:https://www.flycheck.org/[Flycheck] package is available from link:"
+"https://melpa.org/[Milkypostman's Emacs Lisp Package Archive] (MELPA). If "
+"MELPA is not already in Emacs's packages-archives, it can be added by "
+"evaluating"
msgstr ""
-"O pacote Flycheck está disponível no Emacs Lisp Package Archive da "
-"Milkypostman (MELPA). Se a MELPA ainda não estiver nos repositórios de "
-"pacotes do Emacs, ele pode ser adicionado executando"
+"O pacote link:https://www.flycheck.org/[Flycheck] está disponível no link:"
+"https://melpa.org/[Emacs Lisp Package Archive da Milkypostman] (MELPA). Se a "
+"MELPA ainda não estiver nos repositórios de pacotes do Emacs, ele pode ser "
+"adicionado executando"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:140
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:206
#, no-wrap
msgid "(add-to-list 'package-archives '(\"melpa\" . \"http://stable.melpa.org/packages/\") t)\n"
msgstr "(add-to-list 'package-archives '(\"melpa\" . \"http://stable.melpa.org/packages/\") t)\n"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:143
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:209
msgid ""
"Add the line to Emacs's initialization file (one of [.filename]#~/.emacs#, [."
"filename]#~/.emacs.el#, or [.filename]#~.emacs.d/init.el#) to make this "
@@ -274,23 +457,23 @@ msgstr ""
"el#) para tornar esta alteração permanente."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:145
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:211
msgid "To install Flycheck, evaluate"
msgstr "Para instalar o Flycheck, execute"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:148
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:215
#, no-wrap
msgid "(package-install 'flycheck)\n"
msgstr "(package-install 'flycheck)\n"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:151
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:218
msgid "Create a Flycheck checker for package:textproc/igor[] by evaluating"
msgstr "Crie um verificador Flycheck para package:textproc/igor[] executando"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:155
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:223
#, no-wrap
msgid ""
"(flycheck-define-checker igor\n"
@@ -300,7 +483,7 @@ msgstr ""
" \"FreeBSD Documentation Project sanity checker.\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:162
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:230
#, no-wrap
msgid ""
"See URLs https://www.freebsd.org/docproj/ and\n"
@@ -318,13 +501,13 @@ msgstr ""
" :standard-input t)\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:164
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:232
#, no-wrap
msgid " (add-to-list 'flycheck-checkers 'igor 'append)\n"
msgstr " (add-to-list 'flycheck-checkers 'igor 'append)\n"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:167
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:235
msgid ""
"Again, add these lines to Emacs's initialization file to make the changes "
"permanent."
@@ -333,13 +516,13 @@ msgstr ""
"tornar as mudanças permanentes."
#. type: Title ===
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:169
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:237
#, no-wrap
msgid "FreeBSD Documentation Specific Settings"
msgstr "Configurações Específicas da Documentação do FreeBSD"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:172
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:240
msgid ""
"To apply settings specific to the FreeBSD documentation project, create [."
"filename]#.dir-locals.el# in the root directory of the documentation "
@@ -350,7 +533,7 @@ msgstr ""
"repositório de documentação e adicione estas linhas ao arquivo:"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:176
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:244
#, no-wrap
msgid ""
";;; Directory Local Variables\n"
@@ -360,7 +543,7 @@ msgstr ""
";;; For more information see (info \"(emacs) Directory Variables\")\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:184
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:252
#, no-wrap
msgid ""
"((nxml-mode\n"
@@ -380,45 +563,79 @@ msgstr ""
" (eval . (add-to-list 'rng-schema-locating-files \"~/.emacs.d/schema/schemas.xml\"))))\n"
#. type: Title ==
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:187
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:255
#, no-wrap
msgid "nano"
msgstr "nano"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:190
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:258
msgid "Install from package:editors/nano[] or package:editors/nano-devel[]."
msgstr ""
"Instale o aplicativo partir de package:editors/nano[] ou package:editors/"
"nano-devel[]."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:195
-msgid "Copy the sample XML syntax highlight file to the user's home directory:"
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:264
+msgid ""
+"Currently there is no adoc/asciidoc syntax highlight file with nano "
+"distribution. So let's create one from scratch and use an editor to create "
+"new file or add lines in the [.filename]#~/.nanorc# with these contents:"
msgstr ""
-"Copie o arquivo com a amostra da regra para realce da sintaxe XML para o "
-"diretório inicial do usuário:"
+"Atualmente não há arquivo de highlight de sintaxe adoc/asciidoc com "
+"distribuição nano. Então vamos criar um do zero e usar um editor para criar "
+"um novo arquivo ou adicionar linhas no [.filename]#~/.nanorc# com este "
+"conteúdo:"
-#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:199
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:266
#, no-wrap
-msgid "% cp /usr/local/share/nano/xml.nanorc ~/.nanorc\n"
-msgstr "% cp /usr/local/share/nano/xml.nanorc ~/.nanorc\n"
-
-#. type: Plain text
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:202
-msgid ""
-"Use an editor to replace the lines in the [.filename]#~/.nanorc# `syntax "
-"\"xml\"` block with these rules:"
-msgstr ""
-"Use um editor para substituir as linhas do [.filename]#~/.nanorc# referentes "
-"ao bloco `syntax \"xml\"` por estas regras:"
+msgid "`~/.nanorc`"
+msgstr "`~/.nanorc`"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:216
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:316
#, no-wrap
msgid ""
-"syntax \"xml\" \"\\.([jrs]html?|xml|xslt?)$\"\n"
+"syntax \"asciidoc\" \"\\.(adoc|asc|asciidoc)$\"\n"
+"# main header\n"
+"color red \"^====+$\"\n"
+"# h1\n"
+"color red \"^==[[:space:]].*$\"\n"
+"color red \"^----+$\"\n"
+"# h2\n"
+"color magenta \"^===[[:space:]].*$\"\n"
+"color magenta \"^~~~~+$\"\n"
+"# h4\n"
+"color green \"^====[[:space:]].*$\"\n"
+"color green \"^\\^\\^\\^\\^+$\"\n"
+"# h5\n"
+"color brightblue \"^=====[[:space:]].*$\"\n"
+"color brightblue \"^\\+\\+\\+\\++$\"\n"
+"# attributes\n"
+"color brightgreen \":.*:\"\n"
+"color brightred \"\\{[a-z0-9]*\\}\"\n"
+"color red \"\\\\\\{[a-z0-9]*\\}\"\n"
+"color red \"\\+\\+\\+\\{[a-z0-9]*\\}\\+\\+\\+\"\n"
+"# Paragraph Title\n"
+"color yellow \"^\\..*$\"\n"
+"# source\n"
+"color magenta \"^\\[(source,.+|NOTE|TIP|IMPORTANT|WARNING|CAUTION)\\]\"\n"
+"# Other markup\n"
+"color yellow \".*[[:space:]]\\+$\"\n"
+"color yellow \"_[^_]+_\"\n"
+"color yellow \"\\*[^\\*]+\\*\"\n"
+"color yellow \"\\+[^\\+]+\\+\"\n"
+"color yellow \"`[^`]+`\"\n"
+"color yellow \"\\^[^\\^]+\\^\"\n"
+"color yellow \"~[^~]+~\"\n"
+"color yellow \"'[^']+'\"\n"
+"color cyan \"`{1,2}[^']+'{1,2}\"\n"
+"# bullets\n"
+"color brightmagenta \"^[[:space:]]*[\\*\\.-]{1,5}[[:space:]]\"\n"
+"# anchors\n"
+"color brightwhite \"\\[\\[.*\\]\\]\"\n"
+"color brightwhite \"<<.*>>\"\n"
"# trailing whitespace\n"
"color ,blue \"[[:space:]]+$\"\n"
"# multiples of eight spaces at the start a line\n"
@@ -428,10 +645,46 @@ msgid ""
"color ,yellow \"( )+TAB\"\n"
"# highlight indents that have an odd number of spaces\n"
"color ,red \"^(([ ]{2})+|(TAB+))*[ ]{1}[^ ]{1}\"\n"
-"# lines longer than 70 characters\n"
-"color ,yellow \"^(.{71})|(TAB.{63})|(TAB{2}.{55})|(TAB{3}.{47}).+$\"\n"
msgstr ""
-"syntax \"xml\" \"\\.([jrs]html?|xml|xslt?)$\"\n"
+"syntax \"asciidoc\" \"\\.(adoc|asc|asciidoc)$\"\n"
+"# main header\n"
+"color red \"^====+$\"\n"
+"# h1\n"
+"color red \"^==[[:space:]].*$\"\n"
+"color red \"^----+$\"\n"
+"# h2\n"
+"color magenta \"^===[[:space:]].*$\"\n"
+"color magenta \"^~~~~+$\"\n"
+"# h4\n"
+"color green \"^====[[:space:]].*$\"\n"
+"color green \"^\\^\\^\\^\\^+$\"\n"
+"# h5\n"
+"color brightblue \"^=====[[:space:]].*$\"\n"
+"color brightblue \"^\\+\\+\\+\\++$\"\n"
+"# attributes\n"
+"color brightgreen \":.*:\"\n"
+"color brightred \"\\{[a-z0-9]*\\}\"\n"
+"color red \"\\\\\\{[a-z0-9]*\\}\"\n"
+"color red \"\\+\\+\\+\\{[a-z0-9]*\\}\\+\\+\\+\"\n"
+"# Paragraph Title\n"
+"color yellow \"^\\..*$\"\n"
+"# source\n"
+"color magenta \"^\\[(source,.+|NOTE|TIP|IMPORTANT|WARNING|CAUTION)\\]\"\n"
+"# Other markup\n"
+"color yellow \".*[[:space:]]\\+$\"\n"
+"color yellow \"_[^_]+_\"\n"
+"color yellow \"\\*[^\\*]+\\*\"\n"
+"color yellow \"\\+[^\\+]+\\+\"\n"
+"color yellow \"`[^`]+`\"\n"
+"color yellow \"\\^[^\\^]+\\^\"\n"
+"color yellow \"~[^~]+~\"\n"
+"color yellow \"'[^']+'\"\n"
+"color cyan \"`{1,2}[^']+'{1,2}\"\n"
+"# bullets\n"
+"color brightmagenta \"^[[:space:]]*[\\*\\.-]{1,5}[[:space:]]\"\n"
+"# anchors\n"
+"color brightwhite \"\\[\\[.*\\]\\]\"\n"
+"color brightwhite \"<<.*>>\"\n"
"# trailing whitespace\n"
"color ,blue \"[[:space:]]+$\"\n"
"# multiples of eight spaces at the start a line\n"
@@ -441,33 +694,31 @@ msgstr ""
"color ,yellow \"( )+TAB\"\n"
"# highlight indents that have an odd number of spaces\n"
"color ,red \"^(([ ]{2})+|(TAB+))*[ ]{1}[^ ]{1}\"\n"
-"# lines longer than 70 characters\n"
-"color ,yellow \"^(.{71})|(TAB.{63})|(TAB{2}.{55})|(TAB{3}.{47}).+$\"\n"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:219
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:319
msgid "Process the file to create embedded tabs:"
msgstr "Processe o arquivo para criar guias incorporadas:"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:223
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:323
#, no-wrap
msgid "% perl -i'' -pe 's/TAB/\\t/g' ~/.nanorc\n"
msgstr "% perl -i'' -pe 's/TAB/\\t/g' ~/.nanorc\n"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:229
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:329
msgid "Specify additional helpful options when running the editor:"
msgstr "Especifique opções úteis adicionais ao executar o editor:"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:233
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:333
#, no-wrap
-msgid "% nano -AKipwz -r 70 -T8 _index.adoc\n"
-msgstr "% nano -AKipwz -r 70 -T8 _index.adoc\n"
+msgid "% nano -AKipwz -T8 _index.adoc\n"
+msgstr "% nano -AKipwz -T8 _index.adoc\n"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:236
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:336
msgid ""
"Users of man:csh[1] can define an alias in [.filename]#~/.cshrc# to automate "
"these options:"
@@ -476,24 +727,78 @@ msgstr ""
"automatizar estas opções:"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:239
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:340
#, no-wrap
msgid "alias nano \"nano -AKipwz -r 70 -T8\"\n"
msgstr "alias nano \"nano -AKipwz -r 70 -T8\"\n"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:242
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:343
msgid "After the alias is defined, the options will be added automatically:"
msgstr ""
"Depois que o alias é definido, as opções serão adicionadas automaticamente:"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:246
+#: documentation/content/en/books/fdp-primer/editor-config/_index.adoc:347
#, no-wrap
msgid "% nano _index.adoc\n"
msgstr "% nano _index.adoc\n"
#~ msgid ""
+#~ "Install from package:editors/vim[], package:editors/vim-console[], or "
+#~ "package:editors/vim-tiny[] then follow the configuration instructions in "
+#~ "<<editor-config-vim-config>>."
+#~ msgstr ""
+#~ "Instale-o a partir de package:editors/vim[], package:editors/vim-"
+#~ "console[], ou package:editors/vim-tiny[] e siga as instruções de "
+#~ "configuração em <<editor-config-vim-config>>."
+
+#~ msgid ""
+#~ "Copy the sample XML syntax highlight file to the user's home directory:"
+#~ msgstr ""
+#~ "Copie o arquivo com a amostra da regra para realce da sintaxe XML para o "
+#~ "diretório inicial do usuário:"
+
+#, no-wrap
+#~ msgid "% cp /usr/local/share/nano/xml.nanorc ~/.nanorc\n"
+#~ msgstr "% cp /usr/local/share/nano/xml.nanorc ~/.nanorc\n"
+
+#~ msgid ""
+#~ "Use an editor to replace the lines in the [.filename]#~/.nanorc# `syntax "
+#~ "\"xml\"` block with these rules:"
+#~ msgstr ""
+#~ "Use um editor para substituir as linhas do [.filename]#~/.nanorc# "
+#~ "referentes ao bloco `syntax \"xml\"` por estas regras:"
+
+#, no-wrap
+#~ msgid ""
+#~ "syntax \"xml\" \"\\.([jrs]html?|xml|xslt?)$\"\n"
+#~ "# trailing whitespace\n"
+#~ "color ,blue \"[[:space:]]+$\"\n"
+#~ "# multiples of eight spaces at the start a line\n"
+#~ "# (after zero or more tabs) should be a tab\n"
+#~ "color ,blue \"^([TAB]*[ ]{8})+\"\n"
+#~ "# tabs after spaces\n"
+#~ "color ,yellow \"( )+TAB\"\n"
+#~ "# highlight indents that have an odd number of spaces\n"
+#~ "color ,red \"^(([ ]{2})+|(TAB+))*[ ]{1}[^ ]{1}\"\n"
+#~ "# lines longer than 70 characters\n"
+#~ "color ,yellow \"^(.{71})|(TAB.{63})|(TAB{2}.{55})|(TAB{3}.{47}).+$\"\n"
+#~ msgstr ""
+#~ "syntax \"xml\" \"\\.([jrs]html?|xml|xslt?)$\"\n"
+#~ "# trailing whitespace\n"
+#~ "color ,blue \"[[:space:]]+$\"\n"
+#~ "# multiples of eight spaces at the start a line\n"
+#~ "# (after zero or more tabs) should be a tab\n"
+#~ "color ,blue \"^([TAB]*[ ]{8})+\"\n"
+#~ "# tabs after spaces\n"
+#~ "color ,yellow \"( )+TAB\"\n"
+#~ "# highlight indents that have an odd number of spaces\n"
+#~ "color ,red \"^(([ ]{2})+|(TAB+))*[ ]{1}[^ ]{1}\"\n"
+#~ "# lines longer than 70 characters\n"
+#~ "color ,yellow \"^(.{71})|(TAB.{63})|(TAB{2}.{55})|(TAB{3}.{47}).+$\"\n"
+
+#~ msgid ""
#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/books/fdp-primer/examples/_index.adoc b/documentation/content/pt-br/books/fdp-primer/examples/_index.adoc
index baa857943d..ab16cd3d35 100644
--- a/documentation/content/pt-br/books/fdp-primer/examples/_index.adoc
+++ b/documentation/content/pt-br/books/fdp-primer/examples/_index.adoc
@@ -1,11 +1,11 @@
---
description: 'Exemplo de um artigo e um livro usados no Projeto de Documentação do FreeBSD'
-path: /books/fdp-primer/
+path: "/books/fdp-primer/examples/"
prev: books/fdp-primer/see-also/
showBookMenu: 'true'
tags: ["examples", "tutorial", "AsciiDoctor", "Book", "Article"]
title: 'Apêndice A. Exemplos'
-weight: 15
+weight: 16
---
[appendix]
@@ -97,7 +97,8 @@ ifeval::["{backend}" == "epub3"]
:chapters-path:
endif::[]
-[abstract] Abstract
+[abstract]
+Abstract
Abstract section
@@ -117,7 +118,6 @@ toc::[]
....
====
-
[[examples-asciidoctor-article]]
== *Artigo* AsciiDoctor
@@ -152,7 +152,7 @@ toc::[]
This is the first section in my article.
-== My First Sub-Section
+=== My First Sub-Section
This is the first sub-section in my article.
diff --git a/documentation/content/pt-br/books/fdp-primer/examples/_index.po b/documentation/content/pt-br/books/fdp-primer/examples/_index.po
index 9b0d034873..b18aa12ee0 100644
--- a/documentation/content/pt-br/books/fdp-primer/examples/_index.po
+++ b/documentation/content/pt-br/books/fdp-primer/examples/_index.po
@@ -2,12 +2,14 @@
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2022.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2022-02-01 09:20-0300\n"
-"PO-Revision-Date: 2022-01-18 02:18+0000\n"
-"Last-Translator: Danilo G. Baio <dbaio@FreeBSD.org>\n"
+"POT-Creation-Date: 2023-04-20 20:56-0300\n"
+"PO-Revision-Date: 2023-04-22 03:54+0000\n"
+"Last-Translator: \"Danilo G. Baio\" <dbaio@FreeBSD.org>\n"
"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
"projects/documentation/booksfdp-primerexamples_index/pt_BR/>\n"
"Language: pt_BR\n"
@@ -15,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.10.1\n"
+"X-Generator: Weblate 4.17\n"
#. type: YAML Front Matter: description
#: documentation/content/en/books/fdp-primer/examples/_index.adoc:1
@@ -236,7 +238,7 @@ msgstr "My First Section"
msgid "This is the first section in my article."
msgstr "This is the first section in my article."
-#. type: Title ==
+#. type: Title ===
#: documentation/content/en/books/fdp-primer/examples/_index.adoc:157
#, no-wrap
msgid "My First Sub-Section"
diff --git a/documentation/content/pt-br/books/fdp-primer/manual-pages/_index.adoc b/documentation/content/pt-br/books/fdp-primer/manual-pages/_index.adoc
index 2ca6787827..36f986ed43 100644
--- a/documentation/content/pt-br/books/fdp-primer/manual-pages/_index.adoc
+++ b/documentation/content/pt-br/books/fdp-primer/manual-pages/_index.adoc
@@ -1,11 +1,11 @@
---
description: 'Como trabalhar com as Páginas de Manual do FreeBSD'
next: books/fdp-primer/writing-style
-path: /books/fdp-primer/
-prev: books/fdp-primer/po-translations
+path: "/books/fdp-primer/manual-pages/"
+prev: books/fdp-primer/weblate
showBookMenu: 'true'
tags: ["manual pages", "introduction", "guide", "reference"]
-title: 'Capítulo 10. Páginas de Manual'
+title: 'Capítulo 11. Páginas de Manual'
weight: 11
---
@@ -17,7 +17,7 @@ weight: 11
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 10
+:sectnumoffset: 11
:partnums:
:source-highlighter: rouge
:experimental:
@@ -462,6 +462,15 @@ Use o package:textproc/igor[] para revisar a página do manual:
% igor ./mynewmanpage.8
....
+Outra ferramenta útil é o package:textproc/vale[]. Ele não suporta a sintaxe man:mdoc[7], mas a página de manual renderizada pode ser lida e analisada a partir da entrada padrão:
+
+[source, shell]
+....
+% man ls | vale
+....
+
+package:textproc/vale[] é altamente configurável. É aconselhável ler sua documentação.
+
Use man:man[1] para verificar o resultado final de suas alterações:
[source, shell]
diff --git a/documentation/content/pt-br/books/fdp-primer/manual-pages/_index.po b/documentation/content/pt-br/books/fdp-primer/manual-pages/_index.po
index 7c029d0248..c333023f8d 100644
--- a/documentation/content/pt-br/books/fdp-primer/manual-pages/_index.po
+++ b/documentation/content/pt-br/books/fdp-primer/manual-pages/_index.po
@@ -2,12 +2,13 @@
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2022.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2022-02-01 10:28-0300\n"
-"PO-Revision-Date: 2022-02-06 19:18+0000\n"
-"Last-Translator: Danilo G. Baio <dbaio@FreeBSD.org>\n"
+"POT-Creation-Date: 2023-09-09 18:12-0300\n"
+"PO-Revision-Date: 2023-09-10 13:31+0000\n"
+"Last-Translator: \"Danilo G. Baio\" <dbaio@FreeBSD.org>\n"
"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
"projects/documentation/booksfdp-primermanual-pages_index/pt_BR/>\n"
"Language: pt_BR\n"
@@ -15,7 +16,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.10.1\n"
+"X-Generator: Weblate 4.17\n"
#. type: YAML Front Matter: description
#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:1
@@ -26,8 +27,8 @@ msgstr "Como trabalhar com as Páginas de Manual do FreeBSD"
#. type: YAML Front Matter: title
#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:1
#, no-wrap
-msgid "Chapter 10. Manual Pages"
-msgstr "Capítulo 10. Páginas de Manual"
+msgid "Chapter 11. Manual Pages"
+msgstr "Capítulo 11. Páginas de Manual"
#. type: Title =
#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:13
@@ -559,8 +560,8 @@ msgid ""
"to the beginning of flags, so this appears in the manual page as `--libxo`."
msgstr ""
"Uma _Optional_ _Flag_ chamada `-libxo` é mostrada. A macro `Fl` adiciona um "
-"traço ao início das flags, então isso aparece na página de manual "
-"como`--libxo`."
+"traço ao início das flags, então isso aparece na página de manual como`--"
+"libxo`."
#. type: Plain text
#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:219
@@ -954,7 +955,7 @@ msgstr "Muitas macros são usadas para marcar texto embutido."
#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:353
#, no-wrap
msgid "Inline Macro"
-msgstr "Macro em linha"
+msgstr "Macro inline"
#. type: Table
#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:357
@@ -970,8 +971,7 @@ msgid ""
"Called with a name as a parameter on the first use, then used later without the parameter to display the name that has already been defined."
msgstr ""
"Nome.\n"
-"Chamado com um nome como parâmetro no primeiro uso, depois usado sem o "
-"parâmetro para exibir o nome que já foi definido."
+"Chamado com um nome como parâmetro no primeiro uso, depois usado sem o parâmetro para exibir o nome que já foi definido."
#. type: Table
#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:361
@@ -1268,18 +1268,43 @@ msgid "% igor ./mynewmanpage.8\n"
msgstr "% igor ./mynewmanpage.8\n"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:505
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:507
+msgid ""
+"Another useful tool is package:textproc/vale[]. It does not support the man:"
+"mdoc[7] syntax but the rendered manual page can be read from standard input:"
+msgstr ""
+"Outra ferramenta útil é o package:textproc/vale[]. Ele não suporta a sintaxe "
+"man:mdoc[7], mas a página de manual renderizada pode ser lida e analisada a "
+"partir da entrada padrão:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:511
+#, no-wrap
+msgid "% man ls | vale\n"
+msgstr "% man ls | vale\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:515
+msgid ""
+"package:textproc/vale[] is highly configurable. It is advised to read its "
+"documentation."
+msgstr ""
+"package:textproc/vale[] é altamente configurável. É aconselhável ler sua "
+"documentação."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:517
msgid "Use man:man[1] to check the final result of your changes:"
msgstr "Use man:man[1] para verificar o resultado final de suas alterações:"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:509
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:521
#, no-wrap
msgid "% man ./mynewmanpage.8\n"
msgstr "% man ./mynewmanpage.8\n"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:512
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:524
msgid ""
"You can use man:col[1] to filter the output of man:man[1] and get rid of the "
"backspace characters before loading the result in your favorite editor for "
@@ -1290,13 +1315,13 @@ msgstr ""
"para verificação ortográfica:"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:516
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:528
#, no-wrap
msgid "% man ./mynewmanpage.8 | col -b | vim -R -\n"
msgstr "% man ./mynewmanpage.8 | col -b | vim -R -\n"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:521
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:533
msgid ""
"Spell-checking with fully-featured dictionaries is encouraged, and can be "
"accomplished by using package:textproc/hunspell[] or package:textproc/"
@@ -1309,117 +1334,117 @@ msgstr ""
"aspell[], respectivamente. Por exemplo:"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:525
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:537
#, no-wrap
msgid "% aspell check --lang=en --mode=nroff ./mynewmanpage.8\n"
msgstr "% aspell check --lang=en --mode=nroff ./mynewmanpage.8\n"
#. type: Title ==
-#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:528
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:540
#, no-wrap
msgid "Example Manual Pages to Use as Templates"
msgstr "Exemplos de páginas de manuais para usar como modelos"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:531
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:543
msgid "Some manual pages are suitable as in-depth examples."
msgstr ""
"Algumas destas páginas de manual são adequadas para serem usadas como "
"exemplos detalhados."
#. type: Table
-#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:536
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:548
#, no-wrap
msgid "Manual Page"
msgstr "Página de Manual"
#. type: Table
-#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:539
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:551
#, no-wrap
msgid "Path to Source Location"
msgstr "Caminho para o arquivo de origem"
#. type: Table
-#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:540
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:552
#, no-wrap
msgid "man:cp[1]"
msgstr "man:cp[1]"
#. type: Table
-#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:542
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:554
#, no-wrap
msgid "[.filename]#/usr/src/bin/cp/cp.1#"
msgstr "[.filename]#/usr/src/bin/cp/cp.1#"
#. type: Table
-#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:543
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:555
#, no-wrap
msgid "man:vt[4]"
msgstr "man:vt[4]"
#. type: Table
-#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:545
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:557
#, no-wrap
msgid "[.filename]#/usr/src/share/man/man4/vt.4#"
msgstr "[.filename]#/usr/src/share/man/man4/vt.4#"
#. type: Table
-#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:546
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:558
#, no-wrap
msgid "man:crontab[5]"
msgstr "man:crontab[5]"
#. type: Table
-#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:548
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:560
#, no-wrap
msgid "[.filename]#/usr/src/usr.sbin/cron/crontab/crontab.5#"
msgstr "[.filename]#/usr/src/usr.sbin/cron/crontab/crontab.5#"
#. type: Table
-#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:549
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:561
#, no-wrap
msgid "man:gpart[8]"
msgstr "man:gpart[8]"
#. type: Table
-#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:550
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:562
#, no-wrap
msgid "[.filename]#/usr/src/sbin/geom/class/part/gpart.8#"
msgstr "[.filename]#/usr/src/sbin/geom/class/part/gpart.8#"
#. type: Title ==
-#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:553
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:565
#, no-wrap
msgid "Resources"
msgstr "Recursos"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:556
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:568
msgid "Resources for manual page writers:"
msgstr "Recursos para escritores de páginas manuais:"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:558
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:570
msgid "man:man[1]"
msgstr "man:man[1]"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:559
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:571
msgid "man:mandoc[1]"
msgstr "man:mandoc[1]"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:560
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:572
msgid "man:groff_mdoc[7]"
msgstr "man:groff_mdoc[7]"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:561
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:573
msgid "http://manpages.bsd.lv/mdoc.html[Practical UNIX Manuals: mdoc]"
msgstr "http://manpages.bsd.lv/mdoc.html[Practical UNIX Manuals: mdoc]"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:561
+#: documentation/content/en/books/fdp-primer/manual-pages/_index.adoc:573
msgid "http://manpages.bsd.lv/history.html[History of UNIX Manpages]"
msgstr "http://manpages.bsd.lv/history.html[History of UNIX Manpages]"
diff --git a/documentation/content/pt-br/books/fdp-primer/overview/_index.adoc b/documentation/content/pt-br/books/fdp-primer/overview/_index.adoc
index ace8fbb15f..45a04cf412 100644
--- a/documentation/content/pt-br/books/fdp-primer/overview/_index.adoc
+++ b/documentation/content/pt-br/books/fdp-primer/overview/_index.adoc
@@ -1,7 +1,7 @@
---
description: 'Visão geral sobre o Processo de Documentação do FreeBSD'
next: books/fdp-primer/tools
-path: /books/fdp-primer/
+path: "/books/fdp-primer/overview/"
prev: books/fdp-primer/preface
showBookMenu: 'true'
tags: ["overview", "FreeBSD Documentation Project", "quick start"]
@@ -55,16 +55,53 @@ Todos são bem vindos para se juntar ao FDP. A vontade de contribuir é o único
Este primer mostra como:
+* Compreender o papel da documentação e seu lugar no ecossistema.
* Identificar quais partes do FreeBSD são mantidas pelo FDP.
* Instalar as ferramentas e arquivos de documentação necessários.
* Realizar alterações na documentação.
* Enviar de volta alterações para revisão e inclusão na documentação do FreeBSD.
+[[overview-documentation-ecosystem]]
+== Documentação no Ecossistema FreeBSD
+
+Todos os documentos são para o benefício de seus leitores, não de seus escritores ou zeladores. Eles devem se adaptar ao leitor e não esperar que o leitor se adapte a eles.
+
+Nunca culpe o leitor por:
+
+* ser incapaz de fazer uso de um documento facilmente ou de tudo
+* achar o documento confuso
+* não entender o documento ou como utilizá-lo
+* não encontrar uma resposta explícita ou preencher lacunas com sucesso (ou conectando pontos) para raciocinar em direção a uma
+
+Em vez disso, reconheça que o documento é:
+
+* inacessível
+* confuso
+* difícil de entender ou utilizar
+* incompleto
+
+Em seguida, faça o documento:
+
+* mais acessível
+* menos confuso
+* mais claro
+* mais completo
+
+Use os seguintes métodos:
+
+* aplique as link:https://webaim.org/intro/#principles[melhores práticas de acessibilidade] para corrigir o problema relatado e quaisquer outros semelhantes que você encontrar
+* refazer ou esclarecer a estrutura ou linguagem confusa
+* adicionar exemplos relevantes para a parte que é difícil de entender ou aplicar
+* preencha as lacunas ou adicione os degraus que faltam
+
[[overview-quick-start]]
== Introdução
Algumas etapas preparatórias devem ser seguidas antes de editar a documentação do FreeBSD. Primeiro, se registre na {freebsd-doc}. Alguns membros do time também interagem no IRC, canal `#bsddocs` na rede http://www.efnet.org/[EFnet]. Estas pessoas podem ajudar com questões e problemas envolvendo documentação.
+[[freebsd-installation-process]]
+=== Processo de instalação do FreeBSD
+
[.procedure]
====
. Instale esses pacotes. O _meta-port_ `docproj` instala todos os aplicativos necessários para editar e compilar a documentação do FreeBSD.
@@ -85,23 +122,185 @@ Algumas etapas preparatórias devem ser seguidas antes de editar a documentaçã
+
Revise a saída e edite o arquivo para corrigir os problemas informados e, em seguida, execute novamente o comando para verificar os problemas restantes. Repita até que todos os erros sejam resolvidos.
+
-. *_Sempre_* realize testes de compilação antes de submeter algo. Execute `make` no diretório de nível superior da documentação e assim será gerado a documentação no formato HTML.
+. *_Sempre_* realize testes de compilação e revise as alterações antes de submeter algo. Execute `make` no diretório `documentation` ou `website` para gerar a documentação no formato HTML.
+
[source, shell]
....
% make
....
+
-. Quando as alterações estiverem completas e testadas, gere um "arquivo diff":
+Para reduzir o tempo de compilação, apenas um idioma pode ser compilado:
+
[source, shell]
....
-% cd ~/doc
-% git diff > bsdinstall.diff.txt
+% make DOC_LANG=en
....
+
-Dê ao arquivo diff um nome. No exemplo acima, foram feitas alterações na parte [.filename]#bsdinstall# do Handbook.
-. Submeta o arquivo diff file pela web para o sistema de https://bugs.FreeBSD.org/bugzilla/enter_bug.cgi?product=Documentation[Relatórios de Problema]. Se estiver usando o formulário web, insira um Sumário com _[patch] descrição curta do problema_. Selecione o Componente `Documentation`. No campo de Descrição, insira uma breve descrição das alterações e quaisquer detalhes importantes sobre elas. Use o botão btn:[Add an attachment] para anexar o arquivo diff. Finalmente, pressione o botão btn:[Submit Bug] para enviar seu diff para o sistema de relatório de problemas.
+A saída da compilação é armazenada em [.filename]#~/doc/documentation/public/en/articles/# e [.filename]#~/doc/documentation/public/en/books/#.
++
+. Revise a saída da compilação e certifique-se de que as edições não contenham erros de digitação, problemas de layout ou erros. Se algum erro for encontrado durante o processo de compilação, edite os arquivos com erro para corrigir quaisquer problemas que apareçam e, em seguida, execute o comando de compilação novamente até que todos os erros sejam resolvidos.
++
+. Adicione todos os arquivos com `git add .`, então revise o diff com `git diff`. Por exemplo:
++
+[source, shell]
+....
+% git add .
+% git diff --staged
+....
++
+Certifique-se de que todos os arquivos necessários estejam incluídos, então confirme a mudança em seu branch local e gere um patch com `git format-patch`
++
+[source, shell]
+....
+% git commit
+% git format-patch origin/main
+....
++
+Patch gerado com `git format-patch` incluirá a identidade do autor e endereços de e-mail, tornando mais fácil para os desenvolvedores aplicarem (com `git am`) e dar os devidos créditos.
++
+[IMPORTANT]
+======
+Para tornar mais fácil para os committers aplicarem o patch em sua cópia de trabalho da árvore de documentação, por favor, gere o [.filename]#.diff# da base de sua árvore de documentação.
+======
++
+No exemplo acima, foram feitas alterações na parte [.filename]#bsdinstall# do Handbook.
++
+. Submeta o patch or arquivo diff pela web para o sistema de https://bugs.FreeBSD.org/bugzilla/enter_bug.cgi?product=Documentation[Relatórios de Problema]. Se estiver usando o formulário web, insira um Sumário com _[patch] descrição curta do problema_. Selecione o Componente `Documentation`. No campo de Descrição, insira uma breve descrição das alterações e quaisquer detalhes importantes sobre elas. Use o botão btn:[Add an attachment] para anexar o patch ou arquivo diff. Finalmente, pressione o botão btn:[Submit Bug] para enviar seu diff para o sistema de relatório de problemas.
+====
+
+[[gnu-linux-installation-process]]
+=== Processo de instalação GNU/Linux
+
+[.procedure]
+====
+. Instale esses pacotes em sistemas baseados em apt como Debian ou Ubuntu. Em outras distribuições GNU/Linux os nomes dos pacotes podem mudar. Consulte o gerenciador de pacotes da sua distribuição em caso de dúvida.
++
+[source, shell]
+....
+# apt install hugo ruby-asciidoctor ruby-asciidoctor-pdf ruby-rouge git bmake
+....
++
+. Obtenha uma cópia local da árvore de documentação do FreeBSD em [.filename]#~/doc# (ver crossref:working-copy[working-copy,A Área de Trabalho]).
++
+[source, shell]
+....
+% git clone https://git.FreeBSD.org/doc.git ~/doc
+....
++
+. Edite os arquivos de documentação que precisam de alterações. Se um arquivo precisar de grandes mudanças, consulte a lista de discussão para obter informações.
++
+Revise a saída e edite os arquivos para corrigir os problemas informados e, em seguida, execute novamente o comando para verificar os problemas restantes. Repita até que todos os erros sejam resolvidos.
++
+. Sempre compile e teste as alterações antes de enviá-las. A execução de `bmake` nos subdiretórios `documentation` ou `website` irá gerar a documentação em formato HTML.
++
+[source, shell]
+....
+% bmake run LOCALBASE=/usr
+....
++
+. Adicione todos os arquivos com `git add .`, então revise o diff com `git diff`. Por exemplo:
++
+[source, shell]
+....
+% git add .
+% git diff --staged
+....
++
+Certifique-se de que todos os arquivos necessários estejam incluídos, então confirme a mudança em seu branch local e gere um patch com `git format-patch`
++
+[source, shell]
+....
+% git commit
+% git format-patch origin/main
+....
++
+Patch gerado com `git format-patch` incluirá a identidade do autor e endereços de e-mail, tornando mais fácil para os desenvolvedores aplicarem (com `git am`) e dar os devidos créditos.
++
+[IMPORTANT]
+======
+Para tornar mais fácil para os committers aplicarem o patch em sua cópia de trabalho da árvore de documentação, por favor, gere o [.filename]#.diff# da base de sua árvore de documentação.
+======
++
+. Submeta o patch ou arquivo diff file pela web para o sistema de https://bugs.FreeBSD.org/bugzilla/enter_bug.cgi?product=Documentation[Relatórios de Problema]. Se estiver usando o formulário web, insira um Sumário com uma _breve descrição do problema_. Selecione o Componente `Documentation`. No campo de Descrição, insira uma breve descrição das alterações e quaisquer detalhes importantes sobre elas e adicione _patch_ no campo _Keywords_. Use o botão btn:[Add an attachment] para anexar o patch ou arquivo diff. Finalmente, pressione o botão btn:[Submit Bug] para enviar seu diff para o sistema de relatório de problemas.
+====
+
+[[mac-os-installation-process]]
+=== Processo de instalação do macOS(R)
+
+[.procedure]
+====
+
+. Instale esses pacotes usando o link:https://brew.sh/[Homebrew] e o link:https://rubygems.org/[RubyGem].
++
+[source, shell]
+....
+$ brew install hugo ruby git bmake
+....
++
+. Adicione o Ruby ao Path.
++
+[source, shell]
+....
+$ echo 'export GEM_PATH="/usr/local/lib/ruby/gems/3.1.0"' >> ~/.zshrc
+$ echo 'export PATH="$(brew --prefix ruby)/bin:$PATH"' >> ~/.zshrc
+$ source ~/.zshrc
+....
++
+. Adicione o alias do git ao Homebrew, pois `git format-patch` do git fornecido pela Apple não funcionará com o Phabricator.
++
+[source, shell]
+....
+$ echo 'alias git=/usr/local/bin/git' >> ~/.zshrc
+$ source ~/.zshrc
+....
+. Instale o pacote rouge usando RubyGem.
++
+[source, shell]
+....
+$ sudo gem install rouge asciidoctor asciidoctor-pdf asciidoctor-epub3
+....
++
+. Obtenha uma cópia local da árvore de documentação do FreeBSD em [.filename]#~/doc# (ver crossref:working-copy[working-copy,A Área de Trabalho]).
++
+[source, shell]
+....
+$ git clone https://git.FreeBSD.org/doc.git ~/doc
+....
++
+. Edite os arquivos de documentação que precisam de alterações. Se um arquivo precisar de grandes mudanças, consulte a lista de discussão para obter informações.
++
+Revise a saída e edite os arquivos para corrigir os problemas informados e, em seguida, execute novamente o comando para verificar os problemas restantes. Repita até que todos os erros sejam resolvidos.
++
+. Sempre compile e teste as alterações antes de enviá-las. A execução de `bmake` nos subdiretórios `documentation` ou `website` irá gerar a documentação em formato HTML.
++
+[source, shell]
+....
+$ bmake run USE_RUBYGEMS=YES RUBY_CMD=$(brew --prefix ruby)/bin/ruby
+....
+. Adicione todos os arquivos com `git add .`, então revise o diff com `git diff`. Por exemplo:
++
+[source, shell]
+....
+% git add .
+% git diff --staged
+....
++
+Certifique-se de que todos os arquivos necessários estejam incluídos, então confirme a mudança em seu branch local e gere um patch com `git format-patch`
++
+[source, shell]
+....
+% git commit
+% git format-patch origin/main
+....
++
+Patch gerado com `git format-patch` incluirá a identidade do autor e endereços de e-mail, tornando mais fácil para os desenvolvedores aplicarem (com `git am`) e dar os devidos créditos.
++
+[IMPORTANT]
+======
+Para tornar mais fácil para os committers aplicarem o patch em sua cópia de trabalho da árvore de documentação, por favor, gere o [.filename]#.diff# da base de sua árvore de documentação.
+======
++
+. Submeta o patch ou arquivo diff file pela web para o sistema de https://bugs.FreeBSD.org/bugzilla/enter_bug.cgi?product=Documentation[Relatórios de Problema]. Se estiver usando o formulário web, insira um Sumário com uma _breve descrição do problema_. Selecione o Componente `Documentation`. No campo de Descrição, insira uma breve descrição das alterações e quaisquer detalhes importantes sobre elas e adicione _patch_ no campo _Keywords_. Use o botão btn:[Add an attachment] para anexar o patch ou arquivo diff. Finalmente, pressione o botão btn:[Submit Bug] para enviar seu diff para o sistema de relatório de problemas.
====
[[overview-doc]]
diff --git a/documentation/content/pt-br/books/fdp-primer/overview/_index.po b/documentation/content/pt-br/books/fdp-primer/overview/_index.po
index db23a0aa2b..e6699977aa 100644
--- a/documentation/content/pt-br/books/fdp-primer/overview/_index.po
+++ b/documentation/content/pt-br/books/fdp-primer/overview/_index.po
@@ -1,13 +1,14 @@
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
-# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2022.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2022, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023, 2024.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2022-02-01 09:20-0300\n"
-"PO-Revision-Date: 2022-01-20 21:56+0000\n"
-"Last-Translator: Danilo G. Baio <dbaio@FreeBSD.org>\n"
+"POT-Creation-Date: 2024-01-17 20:34-0300\n"
+"PO-Revision-Date: 2024-01-18 01:20+0000\n"
+"Last-Translator: \"Danilo G. Baio\" <dbaio@FreeBSD.org>\n"
"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
"projects/documentation/booksfdp-primeroverview_index/pt_BR/>\n"
"Language: pt_BR\n"
@@ -15,7 +16,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.10.1\n"
+"X-Generator: Weblate 4.17\n"
#. type: YAML Front Matter: description
#: documentation/content/en/books/fdp-primer/overview/_index.adoc:1
@@ -72,21 +73,26 @@ msgstr "Este primer mostra como:"
#. type: Plain text
#: documentation/content/en/books/fdp-primer/overview/_index.adoc:61
+msgid "Understand the role of documentation and its place in the ecosystem."
+msgstr "Compreender o papel da documentação e seu lugar no ecossistema."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:62
msgid "Identify which parts of FreeBSD are maintained by the FDP."
msgstr "Identificar quais partes do FreeBSD são mantidas pelo FDP."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/overview/_index.adoc:62
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:63
msgid "Install the required documentation tools and files."
msgstr "Instalar as ferramentas e arquivos de documentação necessários."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/overview/_index.adoc:63
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:64
msgid "Make changes to the documentation."
msgstr "Realizar alterações na documentação."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/overview/_index.adoc:64
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:65
msgid ""
"Submit changes back for review and inclusion in the FreeBSD documentation."
msgstr ""
@@ -94,13 +100,141 @@ msgstr ""
"FreeBSD."
#. type: Title ==
-#: documentation/content/en/books/fdp-primer/overview/_index.adoc:66
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:67
+#, no-wrap
+msgid "Documentation in the FreeBSD Ecosystem"
+msgstr "Documentação no Ecossistema FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:71
+msgid ""
+"All documents are for the benefit of their readers, not their writers or "
+"caretakers. They should adapt to the reader and not expect the reader to "
+"adapt to them."
+msgstr ""
+"Todos os documentos são para o benefício de seus leitores, não de seus "
+"escritores ou zeladores. Eles devem se adaptar ao leitor e não esperar que o "
+"leitor se adapte a eles."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:73
+msgid "Never blame the reader for:"
+msgstr "Nunca culpe o leitor por:"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:75
+msgid "being unable to make use of a document easily or at all"
+msgstr "ser incapaz de fazer uso de um documento facilmente ou de tudo"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:76
+msgid "finding a document confusing"
+msgstr "achar o documento confuso"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:77
+msgid "not understanding a document or how to apply it"
+msgstr "não entender o documento ou como utilizá-lo"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:78
+msgid ""
+"not finding an explicit answer or successfully bridging gaps (or connecting "
+"dots) to reason their way to one"
+msgstr ""
+"não encontrar uma resposta explícita ou preencher lacunas com sucesso (ou "
+"conectando pontos) para raciocinar em direção a uma"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:80
+msgid "Instead, acknowledge that the document is:"
+msgstr "Em vez disso, reconheça que o documento é:"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:82
+msgid "inaccessible"
+msgstr "inacessível"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:83
+msgid "confusing"
+msgstr "confuso"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:84
+msgid "hard to understand or apply"
+msgstr "difícil de entender ou utilizar"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:85
+msgid "incomplete"
+msgstr "incompleto"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:87
+msgid "Then, make the document:"
+msgstr "Em seguida, faça o documento:"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:89
+msgid "more accessible"
+msgstr "mais acessível"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:90
+msgid "less confusing"
+msgstr "menos confuso"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:91
+msgid "clearer"
+msgstr "mais claro"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:92
+msgid "more complete"
+msgstr "mais completo"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:94
+msgid "Use the following methods:"
+msgstr "Use os seguintes métodos:"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:96
+msgid ""
+"apply link:https://webaim.org/intro/#principles[accessibility best "
+"practices] to correct the problem reported and any similar ones you find"
+msgstr ""
+"aplique as link:https://webaim.org/intro/#principles[melhores práticas de "
+"acessibilidade] para corrigir o problema relatado e quaisquer outros "
+"semelhantes que você encontrar"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:97
+msgid "rework or clarify the confusing structure or language"
+msgstr "refazer ou esclarecer a estrutura ou linguagem confusa"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:98
+msgid "add relevant examples to the part that is hard to understand or apply"
+msgstr ""
+"adicionar exemplos relevantes para a parte que é difícil de entender ou "
+"aplicar"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:99
+msgid "fill in the gaps or add the missing stepping stones"
+msgstr "preencha as lacunas ou adicione os degraus que faltam"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:101
#, no-wrap
msgid "Quick Start"
msgstr "Introdução"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/overview/_index.adoc:72
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:107
msgid ""
"Some preparatory steps must be taken before editing the FreeBSD "
"documentation. First, subscribe to the {freebsd-doc}. Some team members "
@@ -114,8 +248,14 @@ msgstr ""
"efnet.org/[EFnet]. Estas pessoas podem ajudar com questões e problemas "
"envolvendo documentação."
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:109
+#, no-wrap
+msgid "FreeBSD installation process"
+msgstr "Processo de instalação do FreeBSD"
+
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/overview/_index.adoc:76
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:114
msgid ""
"Install these packages. The `docproj` _meta-port_ installs all the "
"applications required to do useful work with the FreeBSD documentation."
@@ -124,13 +264,15 @@ msgstr ""
"necessários para editar e compilar a documentação do FreeBSD."
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/overview/_index.adoc:80
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:118
#, no-wrap
msgid "# pkg install docproj\n"
msgstr "# pkg install docproj\n"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/overview/_index.adoc:83
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:121
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:195
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:283
msgid ""
"Install a local working copy of the documentation from the FreeBSD "
"repository in [.filename]#~/doc# (see crossref:working-copy[working-copy,The "
@@ -141,13 +283,16 @@ msgstr ""
"Trabalho])."
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/overview/_index.adoc:87
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:125
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:199
#, no-wrap
msgid "% git clone https://git.FreeBSD.org/doc.git ~/doc\n"
msgstr "% git clone https://git.FreeBSD.org/doc.git ~/doc\n"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/overview/_index.adoc:90
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:128
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:202
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:290
msgid ""
"Edit the documentation files that require changes. If a file needs major "
"changes, consult the mailing list for input."
@@ -157,7 +302,7 @@ msgstr ""
"informações."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/overview/_index.adoc:93
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:131
msgid ""
"Review the output and edit the file to fix any problems shown, then rerun "
"the command to find any remaining problems. Repeat until all of the errors "
@@ -168,76 +313,324 @@ msgstr ""
"Repita até que todos os erros sejam resolvidos."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/overview/_index.adoc:95
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:133
#, no-wrap
-msgid "*_Always_* build and test the changes before submitting them. Running `make` in the top-level directory of the documentation will generate that documentation in HTML format.\n"
-msgstr "*_Sempre_* realize testes de compilação antes de submeter algo. Execute `make` no diretório de nível superior da documentação e assim será gerado a documentação no formato HTML.\n"
+msgid "*_Always_* build and review the changes before submitting them. Running `make` in the `documentation` or `website` subdirectories will generate the documentation in HTML format.\n"
+msgstr "*_Sempre_* realize testes de compilação e revise as alterações antes de submeter algo. Execute `make` no diretório `documentation` ou `website` para gerar a documentação no formato HTML.\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/overview/_index.adoc:99
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:137
#, no-wrap
msgid "% make\n"
msgstr "% make\n"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/overview/_index.adoc:102
-msgid "When changes are complete and tested, generate a \"diff file\":"
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:140
+msgid "To reduce compile time, only one language can be compiled:"
msgstr ""
-"Quando as alterações estiverem completas e testadas, gere um \"arquivo diff"
-"\":"
+"Para reduzir o tempo de compilação, apenas um idioma pode ser compilado:"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/overview/_index.adoc:107
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:144
#, no-wrap
+msgid "% make DOC_LANG=en\n"
+msgstr "% make DOC_LANG=en\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:147
msgid ""
-"% cd ~/doc\n"
-"% git diff > bsdinstall.diff.txt\n"
+"The build output is stored in [.filename]#~/doc/documentation/public/en/"
+"articles/# and [.filename]#~/doc/documentation/public/en/books/#."
msgstr ""
-"% cd ~/doc\n"
-"% git diff > bsdinstall.diff.txt\n"
+"A saída da compilação é armazenada em [.filename]#~/doc/documentation/public/"
+"en/articles/# e [.filename]#~/doc/documentation/public/en/books/#."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/overview/_index.adoc:111
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:149
msgid ""
-"Give the diff file a descriptive name. In the example above, changes have "
-"been made to the [.filename]#bsdinstall# portion of the Handbook."
+"Review the build output and ensure the edits are free from typos, layout "
+"problems, or errors. If any errors are found during the build process, edit "
+"the problematic files to fix any issues that show up, then run the build "
+"command again until all errors are resolved."
msgstr ""
-"Dê ao arquivo diff um nome. No exemplo acima, foram feitas alterações na "
-"parte [.filename]#bsdinstall# do Handbook."
+"Revise a saída da compilação e certifique-se de que as edições não contenham "
+"erros de digitação, problemas de layout ou erros. Se algum erro for "
+"encontrado durante o processo de compilação, edite os arquivos com erro para "
+"corrigir quaisquer problemas que apareçam e, em seguida, execute o comando "
+"de compilação novamente até que todos os erros sejam resolvidos."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/overview/_index.adoc:112
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:151
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:214
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:301
msgid ""
-"Submit the diff file using the web-based https://bugs.FreeBSD.org/bugzilla/"
-"enter_bug.cgi?product=Documentation[Problem Report] system. If using the web "
-"form, enter a Summary of _[patch] short description of problem_. Select the "
-"Component `Documentation`. In the Description field, enter a short "
-"description of the changes and any important details about them. Use the btn:"
-"[Add an attachment] button to attach the diff file. Finally, use the btn:"
-"[Submit Bug] button to submit your diff to the problem report system."
+"Add all the files with `git add .`, then review the diff with `git diff`. "
+"For example:"
msgstr ""
-"Submeta o arquivo diff file pela web para o sistema de https://bugs.FreeBSD."
-"org/bugzilla/enter_bug.cgi?product=Documentation[Relatórios de Problema]. Se "
-"estiver usando o formulário web, insira um Sumário com _[patch] descrição "
-"curta do problema_. Selecione o Componente `Documentation`. No campo de "
-"Descrição, insira uma breve descrição das alterações e quaisquer detalhes "
-"importantes sobre elas. Use o botão btn:[Add an attachment] para anexar o "
-"arquivo diff. Finalmente, pressione o botão btn:[Submit Bug] para enviar seu "
-"diff para o sistema de relatório de problemas."
+"Adicione todos os arquivos com `git add .`, então revise o diff com `git "
+"diff`. Por exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:156
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:219
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:306
+#, no-wrap
+msgid ""
+"% git add .\n"
+"% git diff --staged\n"
+msgstr ""
+"% git add .\n"
+"% git diff --staged\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:159
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:222
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:309
+msgid ""
+"Make sure that all required files are included, then commit the change to "
+"your local branch and generate a patch with `git format-patch`"
+msgstr ""
+"Certifique-se de que todos os arquivos necessários estejam incluídos, então "
+"confirme a mudança em seu branch local e gere um patch com `git format-patch`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:164
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:227
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:314
+#, no-wrap
+msgid ""
+"% git commit\n"
+"% git format-patch origin/main\n"
+msgstr ""
+"% git commit\n"
+"% git format-patch origin/main\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:168
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:231
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:318
+msgid ""
+"Patch generated with `git format-patch` will include author identity and "
+"email addresses, making it easier for developers to apply (with `git am`) "
+"and give proper credit."
+msgstr ""
+"Patch gerado com `git format-patch` incluirá a identidade do autor e "
+"endereços de e-mail, tornando mais fácil para os desenvolvedores aplicarem "
+"(com `git am`) e dar os devidos créditos."
+
+#. type: delimited block = 6
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:173
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:236
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:323
+msgid ""
+"To make it easier for committers to apply the patch on their working copy of "
+"the documentation tree, please generate the [.filename]#.diff# from the base "
+"of your documentation tree."
+msgstr ""
+"Para tornar mais fácil para os committers aplicarem o patch em sua cópia de "
+"trabalho da árvore de documentação, por favor, gere o [.filename]#.diff# da "
+"base de sua árvore de documentação."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:176
+msgid ""
+"In the example above, changes have been made to the *bsdinstall* portion of "
+"the Handbook."
+msgstr ""
+"No exemplo acima, foram feitas alterações na parte [.filename]#bsdinstall# "
+"do Handbook."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:178
+msgid ""
+"Submit the patch or diff file using the web-based https://bugs.FreeBSD.org/"
+"bugzilla/enter_bug.cgi?product=Documentation[Problem Report] system. If "
+"using the web form, enter a Summary of _[patch] short description of "
+"problem_. Select the Component `Documentation`. In the Description field, "
+"enter a short description of the changes and any important details about "
+"them. Use the btn:[Add an attachment] button to attach the patch or diff "
+"file. Finally, use the btn:[Submit Bug] button to submit your diff to the "
+"problem report system."
+msgstr ""
+"Submeta o patch or arquivo diff pela web para o sistema de https://bugs."
+"FreeBSD.org/bugzilla/enter_bug.cgi?product=Documentation[Relatórios de "
+"Problema]. Se estiver usando o formulário web, insira um Sumário com "
+"_[patch] descrição curta do problema_. Selecione o Componente "
+"`Documentation`. No campo de Descrição, insira uma breve descrição das "
+"alterações e quaisquer detalhes importantes sobre elas. Use o botão btn:[Add "
+"an attachment] para anexar o patch ou arquivo diff. Finalmente, pressione o "
+"botão btn:[Submit Bug] para enviar seu diff para o sistema de relatório de "
+"problemas."
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:181
+#, no-wrap
+msgid "GNU/Linux installation process"
+msgstr "Processo de instalação GNU/Linux"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:188
+msgid ""
+"Install these packages in apt-based systems like Debian or Ubuntu. On other "
+"GNU/Linux distributions the package names may change. Consult your "
+"distribution's package manager if in doubt."
+msgstr ""
+"Instale esses pacotes em sistemas baseados em apt como Debian ou Ubuntu. Em "
+"outras distribuições GNU/Linux os nomes dos pacotes podem mudar. Consulte o "
+"gerenciador de pacotes da sua distribuição em caso de dúvida."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:192
+#, no-wrap
+msgid "# apt install hugo ruby-asciidoctor ruby-asciidoctor-pdf ruby-rouge git bmake\n"
+msgstr "# apt install hugo ruby-asciidoctor ruby-asciidoctor-pdf ruby-rouge git bmake\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:205
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:293
+msgid ""
+"Review the output and edit the files to fix any problems shown, then rerun "
+"the command to find any remaining problems. Repeat until all of the errors "
+"are resolved."
+msgstr ""
+"Revise a saída e edite os arquivos para corrigir os problemas informados e, "
+"em seguida, execute novamente o comando para verificar os problemas "
+"restantes. Repita até que todos os erros sejam resolvidos."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:207
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:295
+msgid ""
+"Always build and test the changes before submitting them. Running `bmake` in "
+"the `documentation` or `website` subdirectories will generate the "
+"documentation in HTML format."
+msgstr ""
+"Sempre compile e teste as alterações antes de enviá-las. A execução de "
+"`bmake` nos subdiretórios `documentation` ou `website` irá gerar a "
+"documentação em formato HTML."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:211
+#, no-wrap
+msgid "% bmake run LOCALBASE=/usr\n"
+msgstr "% bmake run LOCALBASE=/usr\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:244
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:331
+msgid ""
+"Submit the patch or diff file using the web-based https://bugs.FreeBSD.org/"
+"bugzilla/enter_bug.cgi?product=Documentation[Problem Report] system. If "
+"using the web form, enter a Summary of _short description of problem_. "
+"Select the Component `Documentation`. In the Description field, enter a "
+"short description of the problem in the _Summary_ field and add _patch_ to "
+"the _Keywords_ field. Use the btn:[Add an attachment] button to attach the "
+"patch or diff file. Finally, use the btn:[Submit Bug] button to submit your "
+"diff to the problem report system."
+msgstr ""
+"Submeta o patch ou arquivo diff file pela web para o sistema de https://bugs."
+"FreeBSD.org/bugzilla/enter_bug.cgi?product=Documentation[Relatórios de "
+"Problema]. Se estiver usando o formulário web, insira um Sumário com uma "
+"_breve descrição do problema_. Selecione o Componente `Documentation`. No "
+"campo de Descrição, insira uma breve descrição das alterações e quaisquer "
+"detalhes importantes sobre elas e adicione _patch_ no campo _Keywords_. Use "
+"o botão btn:[Add an attachment] para anexar o patch ou arquivo diff. "
+"Finalmente, pressione o botão btn:[Submit Bug] para enviar seu diff para o "
+"sistema de relatório de problemas."
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:247
+#, no-wrap
+msgid "macOS(R) installation process"
+msgstr "Processo de instalação do macOS(R)"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:253
+msgid ""
+"Install these packages using link:https://brew.sh/[Homebrew] and link:"
+"https://rubygems.org/[RubyGem]."
+msgstr ""
+"Instale esses pacotes usando o link:https://brew.sh/[Homebrew] e o link:"
+"https://rubygems.org/[RubyGem]."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:257
+#, no-wrap
+msgid "$ brew install hugo ruby git bmake\n"
+msgstr "$ brew install hugo ruby git bmake\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:260
+msgid "Add Ruby to the Path."
+msgstr "Adicione o Ruby ao Path."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:266
+#, no-wrap
+msgid ""
+"$ echo 'export GEM_PATH=\"$(gem environment gemdir)\"' >> ~/.zshrc\n"
+"$ echo 'export PATH=\"$(brew --prefix ruby)/bin:$PATH\"' >> ~/.zshrc\n"
+"$ source ~/.zshrc\n"
+msgstr ""
+"$ echo 'export GEM_PATH=\"/usr/local/lib/ruby/gems/3.1.0\"' >> ~/.zshrc\n"
+"$ echo 'export PATH=\"$(brew --prefix ruby)/bin:$PATH\"' >> ~/.zshrc\n"
+"$ source ~/.zshrc\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:269
+msgid ""
+"Add git alias to Homebrew git since `git format-patch` from Apple-provided "
+"git won't work with Phabricator."
+msgstr ""
+"Adicione o alias do git ao Homebrew, pois `git format-patch` do git "
+"fornecido pela Apple não funcionará com o Phabricator."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:274
+#, no-wrap
+msgid ""
+"$ echo 'alias git=/usr/local/bin/git' >> ~/.zshrc\n"
+"$ source ~/.zshrc\n"
+msgstr ""
+"$ echo 'alias git=/usr/local/bin/git' >> ~/.zshrc\n"
+"$ source ~/.zshrc\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:276
+msgid "Install the rouge package using RubyGem."
+msgstr "Instale o pacote rouge usando RubyGem."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:280
+#, no-wrap
+msgid "$ sudo gem install rouge asciidoctor asciidoctor-pdf asciidoctor-epub3\n"
+msgstr "$ sudo gem install rouge asciidoctor asciidoctor-pdf asciidoctor-epub3\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:287
+#, no-wrap
+msgid "$ git clone https://git.FreeBSD.org/doc.git ~/doc\n"
+msgstr "$ git clone https://git.FreeBSD.org/doc.git ~/doc\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:299
+#, no-wrap
+msgid "$ bmake run USE_RUBYGEMS=YES RUBY_CMD=$(brew --prefix ruby)/bin/ruby\n"
+msgstr "$ bmake run USE_RUBYGEMS=YES RUBY_CMD=$(brew --prefix ruby)/bin/ruby\n"
#. type: Title ==
-#: documentation/content/en/books/fdp-primer/overview/_index.adoc:115
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:334
#, no-wrap
msgid "The FreeBSD Documentation Set"
msgstr "Conjunto de Documentação do FreeBSD"
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/overview/_index.adoc:118
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:337
msgid "The FDP is responsible for four categories of FreeBSD documentation."
msgstr "O FDP é responsável por quatro categorias de documentação do FreeBSD."
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/overview/_index.adoc:120
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:339
msgid ""
"_Handbook_: The Handbook is the comprehensive online resource and reference "
"for FreeBSD users."
@@ -246,7 +639,7 @@ msgstr ""
"online para os usuários do FreeBSD."
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/overview/_index.adoc:121
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:340
msgid ""
"_FAQ_: The FAQ uses a short question and answer format to address questions "
"that are frequently asked on the various mailing lists and forums devoted to "
@@ -257,7 +650,7 @@ msgstr ""
"dedicados ao FreeBSD. Este formato não permite respostas longas e detalhadas."
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/overview/_index.adoc:122
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:341
msgid ""
"_Manual pages_: The English language system manual pages are usually not "
"written by the FDP, as they are part of the base system. However, the FDP "
@@ -270,7 +663,7 @@ msgstr ""
"torná-las mais claras ou para corrigir imprecisões."
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/overview/_index.adoc:123
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:342
msgid ""
"_Web site_: This is the main FreeBSD presence on the web, visible at https://"
"www.freebsd.org/[https://www.FreeBSD.org/] and many mirrors around the "
@@ -282,7 +675,7 @@ msgstr ""
"FreeBSD."
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/overview/_index.adoc:126
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:345
msgid ""
"Translation teams are responsible for translating the Handbook and web site "
"into different languages. Manual pages are not translated at present."
@@ -291,7 +684,7 @@ msgstr ""
"diferentes idiomas. As páginas do manual não são traduzidas no momento."
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/overview/_index.adoc:128
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:347
msgid ""
"Documentation source for the FreeBSD web site, Handbook, and FAQ is "
"available in the documentation repository at `https://cgit.freebsd.org/doc/`."
@@ -300,7 +693,7 @@ msgstr ""
"repositório de documentação em `https://cgit.freebsd.org/doc/`."
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/overview/_index.adoc:130
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:349
msgid ""
"Source for manual pages is available in a separate source repository located "
"at `https://cgit.freebsd.org/src/`."
@@ -309,16 +702,16 @@ msgstr ""
"diferente localizado em `https://cgit.freebsd.org/src/`."
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/overview/_index.adoc:133
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:352
msgid ""
"Documentation commit messages are visible with `git log`. Commit messages "
-"are also archived at link:{git-doc-all}."
+"are also archived at link:{dev-commits-doc-all}."
msgstr ""
"As mensagens de commit de documentação podem ser visualizadas com `git log`. "
-"As mensagens de commit também são arquivadas em link:{git-doc-all}."
+"As mensagens de commit também são arquivadas em link:{dev-commits-doc-all}."
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/overview/_index.adoc:135
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:354
msgid ""
"Web frontends to both of these repositories are available at https://cgit."
"freebsd.org/doc/[] and https://cgit.freebsd.org/src/[]."
@@ -327,7 +720,7 @@ msgstr ""
"org/doc/[] e https://cgit.freebsd.org/src/[]."
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/overview/_index.adoc:139
+#: documentation/content/en/books/fdp-primer/overview/_index.adoc:358
msgid ""
"Many people have written tutorials or how-to articles about FreeBSD. Some "
"are stored as part of the FDP files. In other cases, the author has decided "
@@ -339,6 +732,34 @@ msgstr ""
"decidiu manter a documentação separada. O FDP esforça-se para fornecer links "
"para o máximo possível dessas documentações externas."
+#~ msgid "Hugo version 0.90 or higher must be used"
+#~ msgstr "Hugo versão 0.90 ou superior deve ser utilizado"
+
+#, no-wrap
+#~ msgid "$ bmake run LOCALBASE=/opt/homebrew USE_RUBYGEMS=YES\n"
+#~ msgstr "$ bmake run LOCALBASE=/opt/homebrew USE_RUBYGEMS=YES\n"
+
+#, no-wrap
+#~ msgid "$ echo 'export PATH=\"/usr/local/opt/ruby/bin:$PATH\"' >> ~/.zshrc\n"
+#~ msgstr "$ echo 'export PATH=\"/usr/local/opt/ruby/bin:$PATH\"' >> ~/.zshrc\n"
+
+#, no-wrap
+#~ msgid "$ sudo gem install rouge\n"
+#~ msgstr "$ sudo gem install rouge\n"
+
+#~ msgid "When changes are complete and tested, generate a \"diff file\":"
+#~ msgstr ""
+#~ "Quando as alterações estiverem completas e testadas, gere um \"arquivo "
+#~ "diff\":"
+
+#, no-wrap
+#~ msgid ""
+#~ "% cd ~/doc\n"
+#~ "% git diff > bsdinstall.diff.txt\n"
+#~ msgstr ""
+#~ "% cd ~/doc\n"
+#~ "% git diff > bsdinstall.diff.txt\n"
+
#~ msgid ""
#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
diff --git a/documentation/content/pt-br/books/fdp-primer/po-translations/_index.adoc b/documentation/content/pt-br/books/fdp-primer/po-translations/_index.adoc
index 20d72137ab..2257b1f4e3 100644
--- a/documentation/content/pt-br/books/fdp-primer/po-translations/_index.adoc
+++ b/documentation/content/pt-br/books/fdp-primer/po-translations/_index.adoc
@@ -1,12 +1,12 @@
---
description: 'Como trabalhar com tradução de arquivos PO no Projeto de Documentação do FreeBSD'
-next: books/fdp-primer/manual-pages
-path: /books/fdp-primer/
+next: books/fdp-primer/weblate
+path: "/books/fdp-primer/po-translations/"
prev: books/fdp-primer/translations
showBookMenu: 'true'
tags: ["po", "translations", "tutorial", "quick start"]
title: 'Capítulo 9. Traduções PO'
-weight: 10
+weight: 9
---
[[po-translations]]
@@ -86,13 +86,17 @@ Quando uma nova tradução é criada pela primeira vez, a estrutura do diretóri
% mkdir ~/doc/documentation/content/es/articles/leap-seconds
....
-. Copie o [.filename]#_index.adoc# do documento original para o diretório de tradução:
+. Copie o [.filename]#_index.po# do documento original para o diretório de tradução:
+
[source, shell]
....
-% cp ~/doc/documentation/content/en/articles/leap-seconds/_index.adoc \
+% cp ~/doc/documentation/content/en/articles/leap-seconds/_index.po \
~/doc/documentation/content/es/articles/leap-seconds/
....
+
+Supondo que o documento ou idioma também esteja sendo traduzido via Weblate. Nesse caso, é bom pegar o arquivo `.po` de lá e carregar o documento de tradução de volta na plataforma, centralizando os esforços de tradução via Weblate para evitar retrabalho.
+
+Veja como baixar os arquivos `.po` no capítulo crossref:weblate[weblate-translating-offline,Traduzindo Offline no Weblate].
====
[[po-translations-quick-start-translation]]
@@ -100,26 +104,8 @@ Quando uma nova tradução é criada pela primeira vez, a estrutura do diretóri
====
.Procedimento. Tradução
-A tradução de um documento consiste em duas etapas: extrair strings traduzíveis do documento original e inserir as traduções dessas strings. Essas etapas são repetidas até que o tradutor sinta que o documento foi traduzido o suficiente para produzir um documento traduzido que seja utilizável.
+Use um editor PO para inserir as traduções no arquivo PO. Existem vários editores diferentes disponíveis. O [.filename]#poedit# do package:editors/poedit[] é mostrado aqui.
-. Extraia as strings traduzíveis da versão original em Inglês para um arquivo PO:
-+
-[source, shell]
-....
-% cd ~/doc
-% po4a-gettextize \
- --format asciidoc \
- --option compat=asciidoctor \
- --option yfm_keys=title,part,description \
- --master "documentation/content/en/articles/leap-seconds/_index.adoc" \
- --master-charset "UTF-8" \
- --copyright-holder "The FreeBSD Project" \
- --package-name "FreeBSD Documentation" \
- --po "documentation/content/es/articles/leap-seconds/_index.po"
-....
-+
-. Use um editor PO para inserir as traduções no arquivo PO. Existem vários editores diferentes disponíveis. O [.filename]#poedit# do package:editors/poedit[] é mostrado aqui.
-+
[source, shell]
....
% poedit documentation/content/es/articles/leap-seconds/_index.po
@@ -135,16 +121,7 @@ A tradução de um documento consiste em duas etapas: extrair strings traduzíve
[source, shell]
....
% cd ~/doc
-% po4a-translate \
- --format asciidoc \
- --option compat=asciidoctor \
- --option yfm_keys=title,part,description \
- --master "documentation/content/en/articles/leap-seconds/_index.adoc" \
- --master-charset "UTF-8" \
- --po "documentation/content/es/articles/leap-seconds/_index.po" \
- --localized "documentation/content/es/articles/leap-seconds/_index.adoc" \
- --localized-charset "UTF-8" \
- --keep 0
+% ./tools/translate.sh documentation es articles/leap-seconds
....
+
O nome do documento gerado corresponde ao nome do original em Inglês, geralmente [.filename]#_index.adoc#.
@@ -296,39 +273,9 @@ Um editor PO é usado para editar o arquivo. package:editors/poedit[] é usado n
É importante preservar o arquivo PO. Ele contém todo o trabalho que os tradutores fizeram.
-[[po-translations-translating-example]]
-.Traduzindo o Porter's Handbook para o Espanhol
-[example]
+[IMPORTANT]
====
-
-[.procedure]
-======
-. Mude para o diretório base e atualize todos os arquivos PO.
-+
-[source, shell]
-....
-% cd ~/doc
-% po4a-gettextize \
- --format asciidoc \
- --option compat=asciidoctor \
- --option yfm_keys=title,part,description \
- --master "documentation/content/en/books/porters-handbook/_index.adoc" \
- --master-charset "UTF-8" \
- --copyright-holder "The FreeBSD Project" \
- --package-name "FreeBSD Documentation" \
- --po "documentation/content/es/books/porters-handbook/_index.po"
-....
-
-. Realize as traduções usando um editor de PO:
-+
-[source, shell]
-....
-% poedit documentation/content/es/books/porters-handbook/_index.po
-....
-======
-
-Essas etapas são necessárias para todos os arquivos `.adoc`, exceto `chapters-order.adoc` e `toc-*.adoc`.
-
+Traduzir documentos online tende a ser o método mais fácil para tradução de documentos no FreeBSD, pois permite que vários usuários colaborem no mesmo arquivo, distribuindo a carga de trabalho de forma eficaz. Para obter mais detalhes, consulte o próximo capítulo, crossref:weblate[weblate-introduction,Traduções Weblate].
====
[[po-translations-tips]]
@@ -387,6 +334,8 @@ O conteúdo de algumas tags devem ser copiadas igualmente, sem realizar traduç
Uma versão traduzida do documento original pode ser criada a qualquer momento. Quaisquer porções não traduzidas do original serão incluídas em Inglês no documento resultante. A maioria dos editores PO tem um indicador que mostra quanto da tradução foi realizada. Isso torna mais fácil para o tradutor ver quantas strings foram traduzidas para tornar a compilação do documento final utilizável.
+O capítulo Weblate fornece um exemplo completo sobre crossref:weblate[weblate-building,Compilando o Documento Traduzido].
+
[[po-translations-submitting]]
== Submetendo a Nova Tradução
@@ -410,4 +359,6 @@ Os arquivos diff criados por esses exemplos podem ser anexados a um https://bugs
....
======
+O capítulo Weblate fornece um exemplo completo sobre crossref:weblate[weblate-submit-translations,Enviando Traduções].
+
====
diff --git a/documentation/content/pt-br/books/fdp-primer/po-translations/_index.po b/documentation/content/pt-br/books/fdp-primer/po-translations/_index.po
index 21cdf3fb71..7c9d44f9eb 100644
--- a/documentation/content/pt-br/books/fdp-primer/po-translations/_index.po
+++ b/documentation/content/pt-br/books/fdp-primer/po-translations/_index.po
@@ -2,12 +2,13 @@
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2022.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2022-02-01 10:28-0300\n"
-"PO-Revision-Date: 2022-02-06 18:14+0000\n"
-"Last-Translator: Danilo G. Baio <dbaio@FreeBSD.org>\n"
+"POT-Creation-Date: 2023-06-19 21:07-0300\n"
+"PO-Revision-Date: 2023-07-02 18:16+0000\n"
+"Last-Translator: \"Danilo G. Baio\" <dbaio@FreeBSD.org>\n"
"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
"projects/documentation/booksfdp-primerpo-translations_index/pt_BR/>\n"
"Language: pt_BR\n"
@@ -15,7 +16,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.10.1\n"
+"X-Generator: Weblate 4.17\n"
#. type: YAML Front Matter: description
#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:1
@@ -148,81 +149,54 @@ msgstr "% mkdir ~/doc/documentation/content/es/articles/leap-seconds\n"
#. type: Plain text
#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:97
msgid ""
-"Copy the [.filename]#_index.adoc# from the original document into the "
+"Copy the [.filename]#_index.po# from the original document into the "
"translation directory:"
msgstr ""
-"Copie o [.filename]#_index.adoc# do documento original para o diretório de "
+"Copie o [.filename]#_index.po# do documento original para o diretório de "
"tradução:"
#. type: delimited block . 4
#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:102
#, no-wrap
msgid ""
-"% cp ~/doc/documentation/content/en/articles/leap-seconds/_index.adoc \\\n"
+"% cp ~/doc/documentation/content/en/articles/leap-seconds/_index.po \\\n"
" ~/doc/documentation/content/es/articles/leap-seconds/\n"
msgstr ""
-"% cp ~/doc/documentation/content/en/articles/leap-seconds/_index.adoc \\\n"
+"% cp ~/doc/documentation/content/en/articles/leap-seconds/_index.po \\\n"
" ~/doc/documentation/content/es/articles/leap-seconds/\n"
-#. type: Block title
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:108
-#, no-wrap
-msgid "Procedure: Translation"
-msgstr "Procedimento. Tradução"
-
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:112
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:106
msgid ""
-"Translating a document consists of two steps: extracting translatable "
-"strings from the original document, and entering translations for those "
-"strings. These steps are repeated until the translator feels that enough of "
-"the document has been translated to produce a usable translated document."
+"Suppose the document or language is also being translated via Weblate. In "
+"that case, it is good to get the `.po` file from there and upload the "
+"translation document back into the platform, centralizing the translating "
+"efforts via Weblate to avoid rework."
msgstr ""
-"A tradução de um documento consiste em duas etapas: extrair strings "
-"traduzíveis do documento original e inserir as traduções dessas strings. "
-"Essas etapas são repetidas até que o tradutor sinta que o documento foi "
-"traduzido o suficiente para produzir um documento traduzido que seja "
-"utilizável."
+"Supondo que o documento ou idioma também esteja sendo traduzido via Weblate. "
+"Nesse caso, é bom pegar o arquivo `.po` de lá e carregar o documento de "
+"tradução de volta na plataforma, centralizando os esforços de tradução via "
+"Weblate para evitar retrabalho."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:114
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:108
msgid ""
-"Extract the translatable strings from the original English version into a PO "
-"file:"
+"See how to download the `.po` files in the crossref:weblate[weblate-"
+"translating-offline,Translating Offline on Weblate] chapter."
msgstr ""
-"Extraia as strings traduzíveis da versão original em Inglês para um arquivo "
-"PO:"
+"Veja como baixar os arquivos `.po` no capítulo crossref:weblate[weblate-"
+"translating-offline,Traduzindo Offline no Weblate]."
-#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:127
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:113
#, no-wrap
-msgid ""
-"% cd ~/doc\n"
-"% po4a-gettextize \\\n"
-" --format asciidoc \\\n"
-" --option compat=asciidoctor \\\n"
-" --option yfm_keys=title,part,description \\\n"
-" --master \"documentation/content/en/articles/leap-seconds/_index.adoc\" \\\n"
-" --master-charset \"UTF-8\" \\\n"
-" --copyright-holder \"The FreeBSD Project\" \\\n"
-" --package-name \"FreeBSD Documentation\" \\\n"
-" --po \"documentation/content/es/articles/leap-seconds/_index.po\"\n"
-msgstr ""
-"% cd ~/doc\n"
-"% po4a-gettextize \\\n"
-" --format asciidoc \\\n"
-" --option compat=asciidoctor \\\n"
-" --option yfm_keys=title,part,description \\\n"
-" --master \"documentation/content/en/articles/leap-seconds/_index.adoc\" \\\n"
-" --master-charset \"UTF-8\" \\\n"
-" --copyright-holder \"The FreeBSD Project\" \\\n"
-" --package-name \"FreeBSD Documentation\" \\\n"
-" --po \"documentation/content/es/articles/leap-seconds/_index.po\"\n"
+msgid "Procedure: Translation"
+msgstr "Procedimento. Tradução"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:130
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:117
msgid ""
-"Use a PO editor to enter translations in the PO file. There are several "
+"Use a PO editor to enter translations in the PO file. There are several "
"different editors available. [.filename]#poedit# from package:editors/"
"poedit[] is shown here."
msgstr ""
@@ -231,52 +205,34 @@ msgstr ""
"poedit[] é mostrado aqui."
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:134
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:121
#, no-wrap
msgid "% poedit documentation/content/es/articles/leap-seconds/_index.po\n"
msgstr "% poedit documentation/content/es/articles/leap-seconds/_index.po\n"
#. type: Block title
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:140
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:127
#, no-wrap
msgid "Procedure: Generating a Translated Document"
msgstr "Procedimento. Gerando um Documento Traduzido"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:142
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:129
msgid "Generate the translated document:"
msgstr "Gere o documento traduzido:"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:156
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:134
#, no-wrap
msgid ""
"% cd ~/doc\n"
-"% po4a-translate \\\n"
-" --format asciidoc \\\n"
-" --option compat=asciidoctor \\\n"
-" --option yfm_keys=title,part,description \\\n"
-" --master \"documentation/content/en/articles/leap-seconds/_index.adoc\" \\\n"
-" --master-charset \"UTF-8\" \\\n"
-" --po \"documentation/content/es/articles/leap-seconds/_index.po\" \\\n"
-" --localized \"documentation/content/es/articles/leap-seconds/_index.adoc\" \\\n"
-" --localized-charset \"UTF-8\" \\\n"
-" --keep 0\n"
+"% ./tools/translate.sh documentation es articles/leap-seconds\n"
msgstr ""
"% cd ~/doc\n"
-"% po4a-translate \\\n"
-" --format asciidoc \\\n"
-" --option compat=asciidoctor \\\n"
-" --option yfm_keys=title,part,description \\\n"
-" --master \"documentation/content/en/articles/leap-seconds/_index.adoc\" \\\n"
-" --master-charset \"UTF-8\" \\\n"
-" --po \"documentation/content/es/articles/leap-seconds/_index.po\" \\\n"
-" --localized \"documentation/content/es/articles/leap-seconds/_index.adoc\" \\\n"
-" --localized-charset \"UTF-8\" \\\n"
-" --keep 0\n"
+"% ./tools/translate.sh documentation es articles/leap-seconds\n"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:159
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:137
msgid ""
"The name of the generated document matches the name of the English original, "
"usually [.filename]#_index.adoc#."
@@ -285,7 +241,7 @@ msgstr ""
"geralmente [.filename]#_index.adoc#."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:161
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:139
msgid ""
"Check the generated file by rendering it to HTML and viewing it with a web "
"browser:"
@@ -294,7 +250,7 @@ msgstr ""
"navegador web:"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:166
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:144
#, no-wrap
msgid ""
"% cd ~/doc/documentation\n"
@@ -304,13 +260,13 @@ msgstr ""
"% make\n"
#. type: Title ==
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:170
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:148
#, no-wrap
msgid "Creating New Translations"
msgstr "Criando Novas Traduções"
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:175
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:153
msgid ""
"The first step to creating a new translated document is locating or creating "
"a directory to hold it. FreeBSD puts translated documents in a subdirectory "
@@ -323,368 +279,368 @@ msgstr ""
"_lang_ é um código minúsculo de dois caracteres."
#. type: Block title
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:177
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:155
#, no-wrap
msgid "Language Names"
msgstr "Nomes de Idioma"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:181
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:159
#, no-wrap
msgid "Language"
msgstr "Idioma"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:182
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:160
#, no-wrap
msgid "Region"
msgstr "Região"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:184
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:162
#, no-wrap
msgid "Translated Directory Name"
msgstr "Nome do Diretório da Tradução"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:185
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:163
#, no-wrap
msgid "English"
-msgstr ""
+msgstr "English"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:186
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:164
#, no-wrap
msgid "United States"
-msgstr ""
+msgstr "United States"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:188
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:166
#, no-wrap
msgid "[.filename]#en#"
-msgstr ""
+msgstr "[.filename]#en#"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:189
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:167
#, no-wrap
msgid "Bengali"
-msgstr ""
+msgstr "Bengali"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:190
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:168
#, no-wrap
msgid "Bangladesh"
-msgstr ""
+msgstr "Bangladesh"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:192
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:170
#, no-wrap
msgid "[.filename]#bn-bd#"
-msgstr ""
+msgstr "[.filename]#bn-bd#"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:193
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:171
#, no-wrap
msgid "Danish"
-msgstr ""
+msgstr "Danish"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:194
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:172
#, no-wrap
msgid "Denmark"
-msgstr ""
+msgstr "Denmark"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:196
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:174
#, no-wrap
msgid "[.filename]#da#"
-msgstr ""
+msgstr "[.filename]#da#"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:197
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:175
#, no-wrap
msgid "German"
-msgstr ""
+msgstr "German"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:198
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:176
#, no-wrap
msgid "Germany"
-msgstr ""
+msgstr "Germany"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:200
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:178
#, no-wrap
msgid "[.filename]#de#"
-msgstr ""
+msgstr "[.filename]#de#"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:201
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:179
#, no-wrap
msgid "Greek"
-msgstr ""
+msgstr "Greek"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:202
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:180
#, no-wrap
msgid "Greece"
-msgstr ""
+msgstr "Greece"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:204
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:182
#, no-wrap
msgid "[.filename]#el#"
-msgstr ""
+msgstr "[.filename]#el#"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:205
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:183
#, no-wrap
msgid "Spanish"
-msgstr ""
+msgstr "Spanish"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:206
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:184
#, no-wrap
msgid "Spain"
-msgstr ""
+msgstr "Spain"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:208
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:186
#, no-wrap
msgid "[.filename]#es#"
-msgstr ""
+msgstr "[.filename]#es#"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:209
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:187
#, no-wrap
msgid "French"
-msgstr ""
+msgstr "French"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:210
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:188
#, no-wrap
msgid "France"
-msgstr ""
+msgstr "France"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:212
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:190
#, no-wrap
msgid "[.filename]#fr#"
-msgstr ""
+msgstr "[.filename]#fr#"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:213
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:191
#, no-wrap
msgid "Hungarian"
-msgstr ""
+msgstr "Hungarian"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:214
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:192
#, no-wrap
msgid "Hungary"
-msgstr ""
+msgstr "Hungary"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:216
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:194
#, no-wrap
msgid "[.filename]#hu#"
-msgstr ""
+msgstr "[.filename]#hu#"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:217
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:195
#, no-wrap
msgid "Italian"
-msgstr ""
+msgstr "Italian"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:218
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:196
#, no-wrap
msgid "Italy"
-msgstr ""
+msgstr "Italy"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:220
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:198
#, no-wrap
msgid "[.filename]#it#"
-msgstr ""
+msgstr "[.filename]#it#"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:221
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:199
#, no-wrap
msgid "Japanese"
-msgstr ""
+msgstr "Japanese"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:222
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:200
#, no-wrap
msgid "Japan"
-msgstr ""
+msgstr "Japan"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:224
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:202
#, no-wrap
msgid "[.filename]#ja#"
-msgstr ""
+msgstr "[.filename]#ja#"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:225
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:203
#, no-wrap
msgid "Korean"
-msgstr ""
+msgstr "Korean"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:226
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:204
#, no-wrap
msgid "Korea"
-msgstr ""
+msgstr "Korea"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:228
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:206
#, no-wrap
msgid "[.filename]#ko#"
-msgstr ""
+msgstr "[.filename]#ko#"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:229
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:207
#, no-wrap
msgid "Mongolian"
-msgstr ""
+msgstr "Mongolian"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:230
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:208
#, no-wrap
msgid "Mongolia"
-msgstr ""
+msgstr "Mongolia"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:232
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:210
#, no-wrap
msgid "[.filename]#mn#"
-msgstr ""
+msgstr "[.filename]#mn#"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:233
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:211
#, no-wrap
msgid "Dutch"
-msgstr ""
+msgstr "Dutch"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:234
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:212
#, no-wrap
msgid "Netherlands"
-msgstr ""
+msgstr "Netherlands"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:236
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:214
#, no-wrap
msgid "[.filename]#nl#"
-msgstr ""
+msgstr "[.filename]#nl#"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:237
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:215
#, no-wrap
msgid "Polish"
-msgstr ""
+msgstr "Polish"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:238
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:216
#, no-wrap
msgid "Poland"
-msgstr ""
+msgstr "Poland"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:240
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:218
#, no-wrap
msgid "[.filename]#pl#"
-msgstr ""
+msgstr "[.filename]#pl#"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:241
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:219
#, no-wrap
msgid "Portuguese"
-msgstr ""
+msgstr "Portuguese"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:242
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:220
#, no-wrap
msgid "Brazil"
-msgstr ""
+msgstr "Brazil"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:244
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:222
#, no-wrap
msgid "[.filename]#pt-br#"
-msgstr ""
+msgstr "[.filename]#pt-br#"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:245
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:223
#, no-wrap
msgid "Russian"
-msgstr ""
+msgstr "Russian"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:246
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:224
#, no-wrap
msgid "Russia"
-msgstr ""
+msgstr "Russia"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:248
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:226
#, no-wrap
msgid "[.filename]#ru#"
-msgstr ""
+msgstr "[.filename]#ru#"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:249
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:227
#, no-wrap
msgid "Turkish"
-msgstr ""
+msgstr "Turkish"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:250
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:228
#, no-wrap
msgid "Turkey"
-msgstr ""
+msgstr "Turkey"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:252
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:230
#, no-wrap
msgid "[.filename]#tr#"
-msgstr ""
+msgstr "[.filename]#tr#"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:253
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:257
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:231
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:235
#, no-wrap
msgid "Chinese"
-msgstr ""
+msgstr "Chinese"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:254
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:232
#, no-wrap
msgid "China"
-msgstr ""
+msgstr "China"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:256
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:234
#, no-wrap
msgid "[.filename]#zh-cn#"
-msgstr ""
+msgstr "[.filename]#zh-cn#"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:258
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:236
#, no-wrap
msgid "Taiwan"
-msgstr ""
+msgstr "Taiwan"
#. type: Table
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:259
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:237
#, no-wrap
msgid "[.filename]#zh-tw#"
-msgstr ""
+msgstr "[.filename]#zh-tw#"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:265
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:243
msgid ""
"The translations are in subdirectories of the main documentation directory, "
"here assumed to be [.filename]#~/doc/documentation/# as shown in crossref:"
@@ -700,7 +656,7 @@ msgstr ""
"documentation/content/fr/#."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:267
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:245
msgid ""
"Each language directory contains separate subdirectories named for the type "
"of documents, usually [.filename]#articles/# and [.filename]#books/#."
@@ -709,7 +665,7 @@ msgstr ""
"documentos, geralmente [.filename]#articles/# e [.filename]#books/#."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:271
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:249
msgid ""
"Combining these directory names gives the complete path to an article or "
"book. For example, the French translation of the NanoBSD article is in [."
@@ -724,7 +680,7 @@ msgstr ""
"handbook/#."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:274
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:252
msgid ""
"A new language directory must be created when translating a document to a "
"new language. If the language directory already exists, only a subdirectory "
@@ -735,13 +691,13 @@ msgstr ""
"no diretório [.filename]#articles/# ou [.filename]#books/# será necessário."
#. type: Block title
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:276
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:254
#, no-wrap
msgid "Creating a Spanish Translation of the Porter's Handbook"
msgstr "Criando uma Tradução em Espanhol do Porter's Handbook"
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:281
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:259
msgid ""
"Create a new Spanish translation of the extref:{porters-handbook}[Porter's "
"Handbook]. The original is a book in [.filename]#~/doc/documentation/"
@@ -752,7 +708,7 @@ msgstr ""
"en/books/porters-handbook/#."
#. type: delimited block = 6
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:286
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:264
msgid ""
"The Spanish language books directory [.filename]#~/doc/documentation/content/"
"es/books/# already exists, so only a new subdirectory for the Porter's "
@@ -763,7 +719,7 @@ msgstr ""
"Handbook é necessário:"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:291
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:269
#, no-wrap
msgid ""
"% cd ~/doc/documentation/content/es/books\n"
@@ -773,12 +729,12 @@ msgstr ""
"% mkdir porters-handbook\n"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:294
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:272
msgid "Copy the content from the original book:"
msgstr "Copie o conteúdo do livro original:"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:299
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:277
#, no-wrap
msgid ""
"% cd porters-handbook\n"
@@ -788,7 +744,7 @@ msgstr ""
"% cp -R ~/doc/documentation/content/en/books/porters-handbook/* .\n"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:302
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:280
msgid ""
"Now the document structure is ready for the translator to begin translating "
"with `po4a` command."
@@ -797,13 +753,13 @@ msgstr ""
"tradução com o `poedit`."
#. type: Title ==
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:306
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:284
#, no-wrap
msgid "Translating"
msgstr "Traduzindo"
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:311
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:289
msgid ""
"The gettext system greatly reduces the number of things that must be tracked "
"by a translator. Strings to be translated are extracted from the original "
@@ -816,7 +772,7 @@ msgstr ""
"traduções de cada string."
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:313
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:291
msgid ""
"The FreeBSD PO translation system does not overwrite PO files, so the "
"extraction step can be run at any time to update the PO file."
@@ -826,7 +782,7 @@ msgstr ""
"arquivo PO."
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:318
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:296
msgid ""
"A PO editor is used to edit the file. package:editors/poedit[] is shown in "
"these examples because it is simple and has minimal requirements. Other PO "
@@ -841,7 +797,7 @@ msgstr ""
"gtranslator[]."
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:321
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:299
msgid ""
"It is important to preserve the PO file. It contains all of the work that "
"translators have done."
@@ -849,88 +805,46 @@ msgstr ""
"É importante preservar o arquivo PO. Ele contém todo o trabalho que os "
"tradutores fizeram."
-#. type: Block title
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:323
-#, no-wrap
-msgid "Translating the Porter's Handbook to Spanish"
-msgstr "Traduzindo o Porter's Handbook para o Espanhol"
-
-#. type: delimited block = 6
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:330
-msgid "Change to the base directory and update all PO files."
-msgstr "Mude para o diretório base e atualize todos os arquivos PO."
-
-#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:343
-#, no-wrap
-msgid ""
-"% cd ~/doc\n"
-"% po4a-gettextize \\\n"
-" --format asciidoc \\\n"
-" --option compat=asciidoctor \\\n"
-" --option yfm_keys=title,part,description \\\n"
-" --master \"documentation/content/en/books/porters-handbook/_index.adoc\" \\\n"
-" --master-charset \"UTF-8\" \\\n"
-" --copyright-holder \"The FreeBSD Project\" \\\n"
-" --package-name \"FreeBSD Documentation\" \\\n"
-" --po \"documentation/content/es/books/porters-handbook/_index.po\"\n"
-msgstr ""
-"% cd ~/doc\n"
-"% po4a-gettextize \\\n"
-" --format asciidoc \\\n"
-" --option compat=asciidoctor \\\n"
-" --option yfm_keys=title,part,description \\\n"
-" --master \"documentation/content/en/books/porters-handbook/_index.adoc\" \\\n"
-" --master-charset \"UTF-8\" \\\n"
-" --copyright-holder \"The FreeBSD Project\" \\\n"
-" --package-name \"FreeBSD Documentation\" \\\n"
-" --po \"documentation/content/es/books/porters-handbook/_index.po\"\n"
-
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:346
-msgid "Enter translations using a PO editor:"
-msgstr "Realize as traduções usando um editor de PO:"
-
-#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:350
-#, no-wrap
-msgid "% poedit documentation/content/es/books/porters-handbook/_index.po\n"
-msgstr "% poedit documentation/content/es/books/porters-handbook/_index.po\n"
-
-#. type: delimited block = 6
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:354
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:304
msgid ""
-"These steps are necessary for all `.adoc` files, excluding `chapters-order."
-"adoc` and `toc-*.adoc`."
-msgstr ""
-"Essas etapas são necessárias para todos os arquivos `.adoc`, exceto "
-"`chapters-order.adoc` e `toc-*.adoc`."
+"Translating documents online proves to be the easiest method for document "
+"translation on FreeBSD, as it allows multiple users to collaborate on the "
+"same file, distributing the workload effectively. For more details, please "
+"refer to the next chapter, crossref:weblate[weblate-introduction,Weblate "
+"Translations]."
+msgstr ""
+"Traduzir documentos online tende a ser o método mais fácil para tradução de "
+"documentos no FreeBSD, pois permite que vários usuários colaborem no mesmo "
+"arquivo, distribuindo a carga de trabalho de forma eficaz. Para obter mais "
+"detalhes, consulte o próximo capítulo, crossref:weblate[weblate-"
+"introduction,Traduções Weblate]."
#. type: Title ==
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:358
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:307
#, no-wrap
msgid "Tips for Translators"
msgstr "Dicas para Tradutores"
#. type: Block title
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:361
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:365
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:310
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:314
#, no-wrap
msgid "Preserving AsciiDoc macros"
msgstr "Preservando macros AsciiDoc"
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:364
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:313
msgid "Preserve AsciiDoc macros that are shown in the English original."
msgstr "Preserve as macros AsciiDoc que são mostradas no original em Inglês."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:369
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:318
msgid "English original:"
msgstr "Inglês original:"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:375
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:324
#, no-wrap
msgid ""
"msgid \"\"\n"
@@ -942,12 +856,12 @@ msgstr ""
"\"extref:{leap-seconds}[Leap Seconds] article.\"\n"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:378
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:327
msgid "Spanish translation:"
msgstr "Tradução para o Espanhol:"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:384
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:333
#, no-wrap
msgid ""
"msgid \"\"\n"
@@ -959,13 +873,13 @@ msgstr ""
"\"extref:{leap-seconds}[Leap Seconds].\"\n"
#. type: Title ===
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:389
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:338
#, no-wrap
msgid "Preserving Spaces"
msgstr "Preservando Espaços"
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:393
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:342
msgid ""
"Preserve existing spaces at the beginning and end of strings to be "
"translated. The translated version must have these spaces also."
@@ -974,71 +888,71 @@ msgstr ""
"traduzidas. A versão traduzida também deve ter esses espaços."
#. type: Title ===
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:395
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:344
#, no-wrap
msgid "Verbatim Tags"
msgstr "Tags"
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:398
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:347
msgid "The contents of some tags should be copied verbatim, not translated:"
msgstr ""
"O conteúdo de algumas tags devem ser copiadas igualmente, sem realizar "
"tradução:"
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:400
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:349
msgid "`man:man[1]`"
msgstr "`man:man[1]`"
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:401
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:350
msgid "`package:package[]`"
msgstr "`package:package[]`"
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:402
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:351
msgid "`link`"
msgstr "`link`"
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:403
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:352
msgid "`image`"
msgstr "`image`"
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:404
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:353
msgid "`include`"
msgstr "`include`"
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:405
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:354
msgid "`Admonitions`"
msgstr "`Admonitions`"
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:406
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:355
msgid "`id's`"
msgstr "`id's`"
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:407
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:356
msgid "`Heading tags`"
msgstr "`Heading tags`"
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:408
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:357
msgid "`source`"
msgstr "`source`"
#. type: Title ==
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:410
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:359
#, no-wrap
msgid "Building a Translated Document"
msgstr "Compilando um Documento Traduzido"
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:416
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:365
msgid ""
"A translated version of the original document can be created at any time. "
"Any untranslated portions of the original will be included in English in the "
@@ -1054,14 +968,23 @@ msgstr ""
"tradutor ver quantas strings foram traduzidas para tornar a compilação do "
"documento final utilizável."
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:367
+msgid ""
+"The Weblate chapter provides a complete example of how to crossref:"
+"weblate[weblate-building,Build the Translated Document]."
+msgstr ""
+"O capítulo Weblate fornece um exemplo completo sobre crossref:weblate"
+"[weblate-building,Compilando o Documento Traduzido]."
+
#. type: Title ==
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:418
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:369
#, no-wrap
msgid "Submitting the New Translation"
msgstr "Submetendo a Nova Tradução"
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:422
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:373
msgid ""
"Prepare the new translation files for submission. This includes adding the "
"files to the version control system, setting additional properties on them, "
@@ -1072,7 +995,7 @@ msgstr ""
"criar um diff para a submissão."
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:424
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:375
msgid ""
"The diff files created by these examples can be attached to a https://bugs."
"freebsd.org/bugzilla/enter_bug.cgi?product=Documentation[documentation bug "
@@ -1083,13 +1006,13 @@ msgstr ""
"bug de documentação] ou https://reviews.freebsd.org/[revisão de código]."
#. type: Block title
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:426
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:377
#, no-wrap
msgid "Spanish Translation of the NanoBSD Article"
msgstr "Tradução Espanhola do Artigo NanoBSD"
#. type: delimited block = 6
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:433
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:384
msgid ""
"Create a diff of the new files from the [.filename]#~/doc/# base directory "
"so the full path is shown with the filenames. This helps committers identify "
@@ -1100,7 +1023,7 @@ msgstr ""
"ajuda os committers a identificar o diretório do idioma de destino."
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:438
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:389
#, no-wrap
msgid ""
"% cd ~/doc\n"
@@ -1109,6 +1032,130 @@ msgstr ""
"% cd ~/doc\n"
"% git diff documentation/content/es/articles/nanobsd/ > /tmp/es_nanobsd.diff\n"
+#. type: delimited block = 6
+#: documentation/content/en/books/fdp-primer/po-translations/_index.adoc:393
+msgid ""
+"The Weblate chapter provides a complete example of how to crossref:"
+"weblate[weblate-submitting-translations,Submit the New Translation]."
+msgstr ""
+"O capítulo Weblate fornece um exemplo completo sobre crossref:weblate"
+"[weblate-submit-translations,Enviando Traduções]."
+
+#~ msgid ""
+#~ "Translating a document consists of two steps: extracting translatable "
+#~ "strings from the original document, and entering translations for those "
+#~ "strings. These steps are repeated until the translator feels that enough "
+#~ "of the document has been translated to produce a usable translated "
+#~ "document."
+#~ msgstr ""
+#~ "A tradução de um documento consiste em duas etapas: extrair strings "
+#~ "traduzíveis do documento original e inserir as traduções dessas strings. "
+#~ "Essas etapas são repetidas até que o tradutor sinta que o documento foi "
+#~ "traduzido o suficiente para produzir um documento traduzido que seja "
+#~ "utilizável."
+
+#~ msgid ""
+#~ "Extract the translatable strings from the original English version into a "
+#~ "PO file:"
+#~ msgstr ""
+#~ "Extraia as strings traduzíveis da versão original em Inglês para um "
+#~ "arquivo PO:"
+
+#, no-wrap
+#~ msgid ""
+#~ "% cd ~/doc\n"
+#~ "% po4a-gettextize \\\n"
+#~ " --format asciidoc \\\n"
+#~ " --option compat=asciidoctor \\\n"
+#~ " --option yfm_keys=title,part,description \\\n"
+#~ " --master \"documentation/content/en/articles/leap-seconds/_index.adoc\" \\\n"
+#~ " --master-charset \"UTF-8\" \\\n"
+#~ " --copyright-holder \"The FreeBSD Project\" \\\n"
+#~ " --package-name \"FreeBSD Documentation\" \\\n"
+#~ " --po \"documentation/content/es/articles/leap-seconds/_index.po\"\n"
+#~ msgstr ""
+#~ "% cd ~/doc\n"
+#~ "% po4a-gettextize \\\n"
+#~ " --format asciidoc \\\n"
+#~ " --option compat=asciidoctor \\\n"
+#~ " --option yfm_keys=title,part,description \\\n"
+#~ " --master \"documentation/content/en/articles/leap-seconds/_index.adoc\" \\\n"
+#~ " --master-charset \"UTF-8\" \\\n"
+#~ " --copyright-holder \"The FreeBSD Project\" \\\n"
+#~ " --package-name \"FreeBSD Documentation\" \\\n"
+#~ " --po \"documentation/content/es/articles/leap-seconds/_index.po\"\n"
+
+#, no-wrap
+#~ msgid ""
+#~ "% cd ~/doc\n"
+#~ "% po4a-translate \\\n"
+#~ " --format asciidoc \\\n"
+#~ " --option compat=asciidoctor \\\n"
+#~ " --option yfm_keys=title,part,description \\\n"
+#~ " --master \"documentation/content/en/articles/leap-seconds/_index.adoc\" \\\n"
+#~ " --master-charset \"UTF-8\" \\\n"
+#~ " --po \"documentation/content/es/articles/leap-seconds/_index.po\" \\\n"
+#~ " --localized \"documentation/content/es/articles/leap-seconds/_index.adoc\" \\\n"
+#~ " --localized-charset \"UTF-8\" \\\n"
+#~ " --keep 0\n"
+#~ msgstr ""
+#~ "% cd ~/doc\n"
+#~ "% po4a-translate \\\n"
+#~ " --format asciidoc \\\n"
+#~ " --option compat=asciidoctor \\\n"
+#~ " --option yfm_keys=title,part,description \\\n"
+#~ " --master \"documentation/content/en/articles/leap-seconds/_index.adoc\" \\\n"
+#~ " --master-charset \"UTF-8\" \\\n"
+#~ " --po \"documentation/content/es/articles/leap-seconds/_index.po\" \\\n"
+#~ " --localized \"documentation/content/es/articles/leap-seconds/_index.adoc\" \\\n"
+#~ " --localized-charset \"UTF-8\" \\\n"
+#~ " --keep 0\n"
+
+#, no-wrap
+#~ msgid "Translating the Porter's Handbook to Spanish"
+#~ msgstr "Traduzindo o Porter's Handbook para o Espanhol"
+
+#~ msgid "Change to the base directory and update all PO files."
+#~ msgstr "Mude para o diretório base e atualize todos os arquivos PO."
+
+#, no-wrap
+#~ msgid ""
+#~ "% cd ~/doc\n"
+#~ "% po4a-gettextize \\\n"
+#~ " --format asciidoc \\\n"
+#~ " --option compat=asciidoctor \\\n"
+#~ " --option yfm_keys=title,part,description \\\n"
+#~ " --master \"documentation/content/en/books/porters-handbook/_index.adoc\" \\\n"
+#~ " --master-charset \"UTF-8\" \\\n"
+#~ " --copyright-holder \"The FreeBSD Project\" \\\n"
+#~ " --package-name \"FreeBSD Documentation\" \\\n"
+#~ " --po \"documentation/content/es/books/porters-handbook/_index.po\"\n"
+#~ msgstr ""
+#~ "% cd ~/doc\n"
+#~ "% po4a-gettextize \\\n"
+#~ " --format asciidoc \\\n"
+#~ " --option compat=asciidoctor \\\n"
+#~ " --option yfm_keys=title,part,description \\\n"
+#~ " --master \"documentation/content/en/books/porters-handbook/_index.adoc\" \\\n"
+#~ " --master-charset \"UTF-8\" \\\n"
+#~ " --copyright-holder \"The FreeBSD Project\" \\\n"
+#~ " --package-name \"FreeBSD Documentation\" \\\n"
+#~ " --po \"documentation/content/es/books/porters-handbook/_index.po\"\n"
+
+#~ msgid "Enter translations using a PO editor:"
+#~ msgstr "Realize as traduções usando um editor de PO:"
+
+#, no-wrap
+#~ msgid "% poedit documentation/content/es/books/porters-handbook/_index.po\n"
+#~ msgstr "% poedit documentation/content/es/books/porters-handbook/_index.po\n"
+
+#~ msgid ""
+#~ "These steps are necessary for all `.adoc` files, excluding `chapters-"
+#~ "order.adoc` and `toc-*.adoc`."
+#~ msgstr ""
+#~ "Essas etapas são necessárias para todos os arquivos `.adoc`, exceto "
+#~ "`chapters-order.adoc` e `toc-*.adoc`."
+
#, fuzzy, no-wrap
#~| msgid ""
#~| "| Language\n"
diff --git a/documentation/content/pt-br/books/fdp-primer/preface/_index.adoc b/documentation/content/pt-br/books/fdp-primer/preface/_index.adoc
index 5515f23121..3368a873a4 100644
--- a/documentation/content/pt-br/books/fdp-primer/preface/_index.adoc
+++ b/documentation/content/pt-br/books/fdp-primer/preface/_index.adoc
@@ -1,7 +1,7 @@
---
description: 'Prefácio sobre o Projeto de Documentação do FreeBSD'
next: books/fdp-primer/overview
-path: /books/fdp-primer/
+path: "/books/fdp-primer/preface/"
prev: books/fdp-primer
showBookMenu: 'true'
tags: ["preface", "prompts", "conventions"]
diff --git a/documentation/content/pt-br/books/fdp-primer/rosetta/_index.adoc b/documentation/content/pt-br/books/fdp-primer/rosetta/_index.adoc
index 67cca5b366..ee77a0124c 100644
--- a/documentation/content/pt-br/books/fdp-primer/rosetta/_index.adoc
+++ b/documentation/content/pt-br/books/fdp-primer/rosetta/_index.adoc
@@ -1,7 +1,7 @@
---
description: 'Rosetta Stone com as diferenças entre Docbook e AsciiDoc'
next: books/fdp-primer/translations
-path: /books/fdp-primer/
+path: "/books/fdp-primer/rosetta/"
prev: books/fdp-primer/asciidoctor-primer
showBookMenu: 'true'
tags: ["rosetta", "docbook", "asciidoc", "comparison"]
diff --git a/documentation/content/pt-br/books/fdp-primer/see-also/_index.adoc b/documentation/content/pt-br/books/fdp-primer/see-also/_index.adoc
index 4b820410e9..7c96a8594c 100644
--- a/documentation/content/pt-br/books/fdp-primer/see-also/_index.adoc
+++ b/documentation/content/pt-br/books/fdp-primer/see-also/_index.adoc
@@ -1,12 +1,12 @@
---
description: 'Mais informações sobre o Projeto de Documentação do FreeBSD'
next: books/fdp-primer/examples
-path: /books/fdp-primer/
-prev: books/fdp-primer/editor-config/
+path: "/books/fdp-primer/see-also/"
+prev: books/fdp-primer/trademarks/
showBookMenu: 'true'
tags: ["additional information", "AsciiDoctor", "HTML"]
-title: 'Capítulo 13. Veja também'
-weight: 14
+title: 'Capítulo 15. Veja Também'
+weight: 15
---
[[see-also]]
@@ -17,7 +17,7 @@ weight: 14
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 13
+:sectnumoffset: 15
:partnums:
:source-highlighter: rouge
:experimental:
diff --git a/documentation/content/pt-br/books/fdp-primer/see-also/_index.po b/documentation/content/pt-br/books/fdp-primer/see-also/_index.po
index b05d97daa8..028ef16c6a 100644
--- a/documentation/content/pt-br/books/fdp-primer/see-also/_index.po
+++ b/documentation/content/pt-br/books/fdp-primer/see-also/_index.po
@@ -2,12 +2,13 @@
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2022.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2022-02-01 09:20-0300\n"
-"PO-Revision-Date: 2022-01-20 21:56+0000\n"
-"Last-Translator: Danilo G. Baio <dbaio@FreeBSD.org>\n"
+"POT-Creation-Date: 2023-06-19 21:07-0300\n"
+"PO-Revision-Date: 2023-07-02 17:42+0000\n"
+"Last-Translator: \"Danilo G. Baio\" <dbaio@FreeBSD.org>\n"
"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
"projects/documentation/booksfdp-primersee-also_index/pt_BR/>\n"
"Language: pt_BR\n"
@@ -15,7 +16,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.10.1\n"
+"X-Generator: Weblate 4.17\n"
#. type: YAML Front Matter: description
#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:1
@@ -26,8 +27,8 @@ msgstr "Mais informações sobre o Projeto de Documentação do FreeBSD"
#. type: YAML Front Matter: title
#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:1
#, no-wrap
-msgid "Chapter 13. See Also"
-msgstr "Capítulo 13. Veja também"
+msgid "Chapter 15. See Also"
+msgstr "Capítulo 15. Veja Também"
#. type: Title =
#: documentation/content/en/books/fdp-primer/see-also/_index.adoc:13
diff --git a/documentation/content/pt-br/books/fdp-primer/structure/_index.adoc b/documentation/content/pt-br/books/fdp-primer/structure/_index.adoc
index 9a580bc463..18a80fadb6 100644
--- a/documentation/content/pt-br/books/fdp-primer/structure/_index.adoc
+++ b/documentation/content/pt-br/books/fdp-primer/structure/_index.adoc
@@ -1,7 +1,7 @@
---
description: 'Explicação da Estrutura de Diretórios usada no Projeto de Documentação do FreeBSD'
next: books/fdp-primer/doc-build
-path: /books/fdp-primer/
+path: "/books/fdp-primer/structure/"
prev: books/fdp-primer/working-copy
showBookMenu: 'true'
tags: ["directory structure", "organization"]
@@ -145,7 +145,15 @@ Esta seção contém informações específicas sobre documentos gerenciados pel
Os livros são escritos em AsciiDoc.
-Os livros são organizados como um `livro` AsciiDoc. Os livros estão divididos em partes, cada uma das quais contém vários capítulos. Os capítulos são subdivididos em seções (`=`) e subseções (`==`, `===`) e assim por diante.
+Para cada livro do FreeBSD, o tipo de documento AsciiDoc (também conhecido como doctype) é `book`. Os livros possuem ``part``es, cada uma contendo vários ``capítulos`` (chapter).
+
+Quando o documento é convertido para HTML 5 (usando o backend `html5` embutido):
+
+* A seção AsciiDoc nível 0 (`=`) no início de um ``capítulo `` de um `livro` será `<h1>`
+* A seção AsciiDoc nível 1 (`==`) deve ser usada para a primeira seção lógica de um capítulo e será `<h2>`
+* A seção AsciiDoc nível 2 (`===`) deve ser usada para a primeira subseção lógica e será `<h3>`
+
+– e assim por diante. Referência: link:https://docs.asciidoctor.org/asciidoc/latest/sections/titles-and-levels/[Títulos e Níveis de Seção | Asciidoctor Docs].
[[structure-document-books-physical]]
=== Organização Física
@@ -155,16 +163,16 @@ Existem vários arquivos e diretórios no diretório books, todos com a mesma es
[[structure-document-books-physical-index]]
==== _index.adoc
-O *_index.adoc* define algumas variáveis AsciiDoc que afetam como o código AsciiDoc é convertido para outros formatos e lista o Índice, a Tabela de Exemplos, a Tabela de Figuras, a Tabela de Tabelas e a seção de resumo.
+O arquivo *_index.adoc* define algumas variáveis AsciiDoc que afetam como o código AsciiDoc é convertido para outros formatos e lista o Índice, a Tabela de Exemplos, a Tabela de Figuras, a Tabela de Tabelas e a seção de resumo.
[[structure-document-books-physical-book]]
==== book.adoc
-O *_index.adoc* define algumas variáveis AsciiDoc que afetam como o código AsciiDoc é convertido para outros formatos e lista o Índice, a Tabela de Exemplos, a Tabela de Figuras, a Tabela de Tabelas, a seção de resumo e todos os capítulos. Este arquivo é usado para gerar o PDF com `asciidoctor-pdf` e para gerar o livro em uma página `html`.
+O arquivo *book.adoc* define algumas variáveis AsciiDoc que afetam como o código AsciiDoc é convertido para outros formatos e lista o Índice, a Tabela de Exemplos, a Tabela de Figuras, a Tabela de Tabelas, a seção de resumo e todos os capítulos. Este arquivo é usado para gerar o PDF com `asciidoctor-pdf` e para gerar o livro em uma página `html`.
[[structure-document-books-physical-part]]
==== part*.adoc
-Os arquivos *part*.adoc* armazenam uma breve introdução de uma parte do livro.
+Os arquivos **part*.adoc** armazenam uma breve introdução de uma parte do livro.
[[structure-document-handbook-physical-chapters]]
==== directory/_index.adoc
@@ -173,7 +181,7 @@ Cada capítulo do Handbook é armazenado em um arquivo chamado *_index.adoc* em
Por exemplo, este é um exemplo do cabeçalho de um capítulo:
-[.programlisting]
+[source.programlisting, asciidoc]
....
---
title: Chapter 8. Configuring the FreeBSD Kernel
@@ -215,7 +223,7 @@ O arquivo *_index.adoc* contém todas as variáveis AsciiDoc e o conteúdo.
Por exemplo, este é um exemplo de um artigo, a estrutura é muito semelhante a um capítulo de livro:
-[.programlisting]
+[source.programlisting, asciidoc]
....
---
title: Why you should use a BSD style license for your Open Source Project
diff --git a/documentation/content/pt-br/books/fdp-primer/structure/_index.po b/documentation/content/pt-br/books/fdp-primer/structure/_index.po
index b750e0650f..490792352c 100644
--- a/documentation/content/pt-br/books/fdp-primer/structure/_index.po
+++ b/documentation/content/pt-br/books/fdp-primer/structure/_index.po
@@ -1,13 +1,15 @@
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
-# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2022.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2022, 2023.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2022-02-01 10:28-0300\n"
-"PO-Revision-Date: 2022-02-06 18:42+0000\n"
-"Last-Translator: Danilo G. Baio <dbaio@FreeBSD.org>\n"
+"POT-Creation-Date: 2023-01-21 20:00-0300\n"
+"PO-Revision-Date: 2023-04-22 03:54+0000\n"
+"Last-Translator: \"Danilo G. Baio\" <dbaio@FreeBSD.org>\n"
"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
"projects/documentation/booksfdp-primerstructure_index/pt_BR/>\n"
"Language: pt_BR\n"
@@ -15,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.10.1\n"
+"X-Generator: Weblate 4.17\n"
#. type: YAML Front Matter: description
#: documentation/content/en/books/fdp-primer/structure/_index.adoc:1
@@ -132,10 +134,8 @@ msgid ""
"Contains a set of tools used to translate the documentation and the website using link:https://weblate.org/en/[Weblate].\n"
"The Weblate instance can be found link:https://translate-dev.freebsd.org[here]."
msgstr ""
-"Contém um conjunto de ferramentas usadas para traduzir a documentação e o "
-"site usando link:https://weblate.org/en/[Weblate].\n"
-"A instância do Weblate pode ser acessada link:https://translate-dev.freebsd."
-"org[aqui]."
+"Contém um conjunto de ferramentas usadas para traduzir a documentação e o site usando link:https://weblate.org/en/[Weblate].\n"
+"A instância do Weblate pode ser acessada link:https://translate-dev.freebsd.org[aqui]."
#. type: Table
#: documentation/content/en/books/fdp-primer/structure/_index.adoc:78
@@ -151,11 +151,8 @@ msgid ""
"Contains subdirectories to further categorize the information by languages and three files to store the authors, releases and mirrors information.\n"
"This directory is shared between `documentation` and the `website`."
msgstr ""
-"Contém arquivos que não são específicos para as várias traduções da "
-"documentação.\n"
-"Contém subdiretórios para categorizar ainda mais as informações por idiomas "
-"e três arquivos para armazenar as informações dos autores, lançamentos e "
-"espelhos.\n"
+"Contém arquivos que não são específicos para as várias traduções da documentação.\n"
+"Contém subdiretórios para categorizar ainda mais as informações por idiomas e três arquivos para armazenar as informações dos autores, lançamentos e espelhos.\n"
"Este diretório é compartilhado entre `documentation` e o `website`."
#. type: Table
@@ -206,8 +203,7 @@ msgid ""
"For more information take a look link:https://gohugo.io/content-management/archetypes/[here]."
msgstr ""
"Contém templates para criar novos artigos, livros e páginas web.\n"
-"Para mais informações, veja link:https://gohugo.io/content-management/"
-"archetypes/[aqui]."
+"Para mais informações, veja link:https://gohugo.io/content-management/archetypes/[aqui]."
#. type: Table
#: documentation/content/en/books/fdp-primer/structure/_index.adoc:104
@@ -225,8 +221,7 @@ msgid ""
msgstr ""
"Contém os arquivos de configuração do Hugo.\n"
"Um arquivo principal e um arquivo por idioma.\n"
-"Para mais informações, veja link:https://gohugo.io/getting-started/"
-"configuration[aqui]."
+"Para mais informações, veja link:https://gohugo.io/getting-started/configuration[aqui]."
#. type: Table
#: documentation/content/en/books/fdp-primer/structure/_index.adoc:109
@@ -242,8 +237,7 @@ msgid ""
"One directory exists for each available translation of the documentation, for example `en` and `zh-tw`."
msgstr ""
"Contém os livros, artigos e páginas web.\n"
-"Existe um diretório para cada tradução disponível da documentação, por "
-"exemplo `en` e `zh-tw`."
+"Existe um diretório para cada tradução disponível da documentação, por exemplo `en` e `zh-tw`."
#. type: Table
#: documentation/content/en/books/fdp-primer/structure/_index.adoc:113
@@ -259,11 +253,9 @@ msgid ""
"This directory is used to store the events, news, press, etc.\n"
"For more information take a look link:https://gohugo.io/templates/data-templates/[here]."
msgstr ""
-"Contem dados personalizados para compilar o site no formato link:https://en."
-"wikipedia.org/wiki/TOML[TOML].\n"
+"Contem dados personalizados para compilar o site no formato link:https://en.wikipedia.org/wiki/TOML[TOML].\n"
"Este diretório é usado para armazenar os eventos, notícias, imprensa, etc.\n"
-"Para mais informações, veja link:https://gohugo.io/templates/data-templates/"
-"[aqui]."
+"Para mais informações, veja link:https://gohugo.io/templates/data-templates/[aqui]."
#. type: Table
#: documentation/content/en/books/fdp-primer/structure/_index.adoc:118
@@ -281,8 +273,7 @@ msgid ""
msgstr ""
"Contem ativos estáticos.\n"
"Imagens, avisos de segurança, pgpkeys, etc.\n"
-"Para mais informações, veja link:https://gohugo.io/content-management/"
-"static-files/[aqui]."
+"Para mais informações, veja link:https://gohugo.io/content-management/static-files/[aqui]."
#. type: Table
#: documentation/content/en/books/fdp-primer/structure/_index.adoc:123
@@ -297,8 +288,7 @@ msgid ""
"Contain the templates in the form of `.html` files that specify how the website looks.\n"
"For more information take a look link:https://gohugo.io/templates/[here]."
msgstr ""
-"Contém os modelos na forma de arquivos `.html` que especificam a aparência "
-"do site.\n"
+"Contém os modelos na forma de arquivos `.html` que especificam a aparência do site.\n"
"Para mais informações, veja link:https://gohugo.io/templates/[aqui]."
#. type: Table
@@ -345,9 +335,7 @@ msgstr "*Makefile*"
#: documentation/content/en/books/fdp-primer/structure/_index.adoc:138
#, no-wrap
msgid "The *Makefile* defines the build process of the documentation and the website."
-msgstr ""
-"O *Makefile* que executa o processo de compilação da documentação e do "
-"website."
+msgstr "O *Makefile* que executa o processo de compilação da documentação e do website."
#. type: Title ==
#: documentation/content/en/books/fdp-primer/structure/_index.adoc:141
@@ -376,27 +364,70 @@ msgid "The books are written in AsciiDoc."
msgstr "Os livros são escritos em AsciiDoc."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:153
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:152
+msgid ""
+"For each FreeBSD book, the AsciiDoc document type (aka doctype) is `book`. "
+"Books have ``part``s, each of which contains several ``chapter``s."
+msgstr ""
+"Para cada livro do FreeBSD, o tipo de documento AsciiDoc (também conhecido "
+"como doctype) é `book`. Os livros possuem ``part``es, cada uma contendo "
+"vários ``capítulos`` (chapter)."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:154
msgid ""
-"The books are organized as an AsciiDoc `book`. The books are divided into "
-"``part``s, each of which contains several ``chapter``s. ``chapter``s are "
-"further subdivided into sections (`=`) and subsections (`==`, `===`) and so "
-"on."
+"When the document is converted to HTML 5 (using the built-in `html5` "
+"backend):"
msgstr ""
-"Os livros são organizados como um `livro` AsciiDoc. Os livros estão "
-"divididos em partes, cada uma das quais contém vários capítulos. Os "
-"capítulos são subdivididos em seções (`=`) e subseções (`==`, `===`) e assim "
-"por diante."
+"Quando o documento é convertido para HTML 5 (usando o backend `html5` "
+"embutido):"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:156
+msgid ""
+"AsciiDoc section level 0 (`=`) at the beginning of a ``chapter`` of a `book` "
+"will be `<h1>`"
+msgstr ""
+"A seção AsciiDoc nível 0 (`=`) no início de um ``capítulo `` de um `livro` "
+"será `<h1>`"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:157
+msgid ""
+"AsciiDoc section level 1 (`==`) must be used for the first logical section "
+"of a chapter, and will be `<h2>`"
+msgstr ""
+"A seção AsciiDoc nível 1 (`==`) deve ser usada para a primeira seção lógica "
+"de um capítulo e será `<h2>`"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:158
+msgid ""
+"AsciiDoc section level 2 (`===`) must be used for the first logical "
+"subsection, and will be `<h3>`"
+msgstr ""
+"A seção AsciiDoc nível 2 (`===`) deve ser usada para a primeira subseção "
+"lógica e será `<h3>`"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:160
+msgid ""
+"– and so on. Reference: link:https://docs.asciidoctor.org/asciidoc/latest/"
+"sections/titles-and-levels/[Section Titles and Levels | Asciidoctor Docs]."
+msgstr ""
+"– e assim por diante. Referência: link:https://docs.asciidoctor.org/asciidoc/"
+"latest/sections/titles-and-levels/[Títulos e Níveis de Seção | Asciidoctor "
+"Docs]."
#. type: Title ===
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:155
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:215
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:162
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:222
#, no-wrap
msgid "Physical Organization"
msgstr "Organização Física"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:158
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:165
msgid ""
"There are a number of files and directories within the books directory, all "
"with the same structure."
@@ -405,67 +436,67 @@ msgstr ""
"estrutura."
#. type: Title ====
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:160
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:220
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:167
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:227
#, no-wrap
msgid "_index.adoc"
msgstr "_index.adoc"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:163
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:170
msgid ""
-"The *_index.adoc* defines some AsciiDoc variables that affect how the "
+"The *_index.adoc* file defines some AsciiDoc variables that affect how the "
"AsciiDoc source is converted to other formats and list the Table of "
"Contents, Table of Examples, Table of Figures, Table of Tables and the "
"abstract section."
msgstr ""
-"O *_index.adoc* define algumas variáveis AsciiDoc que afetam como o código "
-"AsciiDoc é convertido para outros formatos e lista o Índice, a Tabela de "
-"Exemplos, a Tabela de Figuras, a Tabela de Tabelas e a seção de resumo."
+"O arquivo *_index.adoc* define algumas variáveis AsciiDoc que afetam como o "
+"código AsciiDoc é convertido para outros formatos e lista o Índice, a Tabela "
+"de Exemplos, a Tabela de Figuras, a Tabela de Tabelas e a seção de resumo."
#. type: Title ====
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:165
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:172
#, no-wrap
msgid "book.adoc"
msgstr "book.adoc"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:169
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:176
msgid ""
-"The *_index.adoc* defines some AsciiDoc variables that affect how the "
+"The *book.adoc* file defines some AsciiDoc variables that affect how the "
"AsciiDoc source is converted to other formats and list the Table of "
"Contents, Table of Examples, Table of Figures, Table of Tables, the abstract "
"section and all the chapters. This file is used to generate the PDF with "
"`asciidoctor-pdf` and to generate the book in one `html` page."
msgstr ""
-"O *_index.adoc* define algumas variáveis AsciiDoc que afetam como o código "
-"AsciiDoc é convertido para outros formatos e lista o Índice, a Tabela de "
-"Exemplos, a Tabela de Figuras, a Tabela de Tabelas, a seção de resumo e "
+"O arquivo *book.adoc* define algumas variáveis AsciiDoc que afetam como o "
+"código AsciiDoc é convertido para outros formatos e lista o Índice, a Tabela "
+"de Exemplos, a Tabela de Figuras, a Tabela de Tabelas, a seção de resumo e "
"todos os capítulos. Este arquivo é usado para gerar o PDF com `asciidoctor-"
"pdf` e para gerar o livro em uma página `html`."
#. type: Title ====
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:171
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:178
#, no-wrap
msgid "part*.adoc"
msgstr "part*.adoc"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:173
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:180
msgid ""
-"The *part*.adoc* files stores a brief introduction of one part of the book."
+"The **part*.adoc** files store a brief introduction of one part of the book."
msgstr ""
-"Os arquivos *part*.adoc* armazenam uma breve introdução de uma parte do "
+"Os arquivos **part*.adoc** armazenam uma breve introdução de uma parte do "
"livro."
#. type: Title ====
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:175
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:182
#, no-wrap
msgid "directory/_index.adoc"
msgstr "directory/_index.adoc"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:178
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:185
msgid ""
"Each chapter in the Handbook is stored in a file called *_index.adoc* in a "
"separate directory from the other chapters."
@@ -474,19 +505,19 @@ msgstr ""
"em um diretório separado dos outros capítulos."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:180
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:187
msgid "For example, this is an example of the header of one chapter:"
msgstr "Por exemplo, este é um exemplo do cabeçalho de um capítulo:"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:183
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:228
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:190
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:235
#, no-wrap
msgid "---\n"
msgstr "---\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:188
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:195
#, no-wrap
msgid ""
"title: Chapter 8. Configuring the FreeBSD Kernel\n"
@@ -502,23 +533,23 @@ msgstr ""
"---\n"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:191
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:198
msgid "[[kernelconfig]]"
msgstr "[[kernelconfig]]"
#. type: Title =
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:191
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:198
#, no-wrap
msgid "Configuring the FreeBSD Kernel"
msgstr "Configurando o kernel do FreeBSD"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:193
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:200
msgid "..."
msgstr "..."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:196
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:203
msgid ""
"When the HTML5 version of the Handbook is produced, this will yield "
"*kernelconfig/index.html*."
@@ -527,7 +558,7 @@ msgstr ""
"index.html*."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:198
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:205
msgid ""
"A brief look will show that there are many directories with individual "
"*_index.adoc* files, including *basics/_index.adoc*, *introduction/_index."
@@ -538,7 +569,7 @@ msgstr ""
"adoc*, e *printing/_index.xml*."
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:204
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:211
msgid ""
"Do not name chapters or directories after their ordering within the "
"Handbook. This ordering can change as the content within the Handbook is "
@@ -551,18 +582,18 @@ msgstr ""
"capítulos inteiros sejam promovidos ou rebaixados dentro da hierarquia."
#. type: Title ==
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:207
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:214
#, no-wrap
msgid "The Articles: articles/"
msgstr "Os Artigos: articles/"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:210
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:217
msgid "The articles are written in AsciiDoc."
msgstr "Os artigos são escritos em AsciiDoc."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:213
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:220
msgid ""
"The articles are organized as an AsciiDoc `article`. The articles are "
"divided into sections (`=`) and subsections (`==`, `===`) and so on."
@@ -571,19 +602,19 @@ msgstr ""
"divididos em seções (`=`) e subseções (`==`, `===`) e assim por diante."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:218
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:225
msgid "There is one *_index.adoc* file per article."
msgstr "Existe um arquivo *_index.adoc* por artigo."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:223
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:230
msgid ""
"The *_index.adoc* file contains all the AsciiDoc variables and the content."
msgstr ""
"O arquivo *_index.adoc* contém todas as variáveis AsciiDoc e o conteúdo."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:225
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:232
msgid ""
"For example, this is an example of one article, the structure is pretty "
"similar to one book chapter:"
@@ -592,7 +623,7 @@ msgstr ""
"a um capítulo de livro:"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:234
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:241
#, no-wrap
msgid ""
"title: Why you should use a BSD style license for your Open Source Project\n"
@@ -610,13 +641,13 @@ msgstr ""
"---\n"
#. type: Title =
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:236
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:243
#, no-wrap
msgid "Why you should use a BSD style license for your Open Source Project"
msgstr "Por que você deve usar uma licença de estilo BSD em seu Projeto Open Source"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:245
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:252
msgid ""
":doctype: article :toc: macro :toclevels: 1 :icons: font :sectnums: :"
"sectnumlevels: 6 :source-highlighter: rouge :experimental:"
@@ -625,26 +656,37 @@ msgstr ""
"sectnumlevels: 6 :source-highlighter: rouge :experimental:"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:247
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:254
msgid "'''"
msgstr "'''"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:249
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:256
msgid "toc::[]"
msgstr "toc::[]"
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:251
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:258
msgid "[[intro]]"
msgstr "[[intro]]"
#. type: Title ==
-#: documentation/content/en/books/fdp-primer/structure/_index.adoc:251
+#: documentation/content/en/books/fdp-primer/structure/_index.adoc:258
#, no-wrap
msgid "Introduction"
msgstr "Introdução"
+#~ msgid ""
+#~ "The books are organized as an AsciiDoc `book`. The books are divided "
+#~ "into ``part``s, each of which contains several ``chapter``s. "
+#~ "``chapter``s are further subdivided into sections (`=`) and subsections "
+#~ "(`==`, `===`) and so on."
+#~ msgstr ""
+#~ "Os livros são organizados como um `livro` AsciiDoc. Os livros estão "
+#~ "divididos em partes, cada uma das quais contém vários capítulos. Os "
+#~ "capítulos são subdivididos em seções (`=`) e subseções (`==`, `===`) e "
+#~ "assim por diante."
+
#, fuzzy, no-wrap
#~| msgid ""
#~| "| Directory\n"
diff --git a/documentation/content/pt-br/books/fdp-primer/tools/_index.adoc b/documentation/content/pt-br/books/fdp-primer/tools/_index.adoc
index 35c0e85886..2ba8d25573 100644
--- a/documentation/content/pt-br/books/fdp-primer/tools/_index.adoc
+++ b/documentation/content/pt-br/books/fdp-primer/tools/_index.adoc
@@ -1,7 +1,7 @@
---
description: 'Ferramentas usadas no Projeto de Documentação do FreeBSD'
next: books/fdp-primer/working-copy
-path: /books/fdp-primer/
+path: "/books/fdp-primer/tools/"
prev: books/fdp-primer/overview
showBookMenu: 'true'
tags: ["tools", "required tools", "optional tools"]
diff --git a/documentation/content/pt-br/books/fdp-primer/trademarks/_index.adoc b/documentation/content/pt-br/books/fdp-primer/trademarks/_index.adoc
new file mode 100644
index 0000000000..2f13833e12
--- /dev/null
+++ b/documentation/content/pt-br/books/fdp-primer/trademarks/_index.adoc
@@ -0,0 +1,94 @@
+---
+description: 'Diretrizes para marcas registradas no Projeto de Documentação do FreeBSD'
+next: books/fdp-primer/see-also
+path: "/books/fdp-primer/trademarks/"
+prev: books/fdp-primer/editor-config/
+showBookMenu: 'true'
+tags: ["trademarks", "AsciiDoctor", "HTML"]
+title: 'Chapter 14. Marcas Registradas'
+weight: 14
+---
+
+[[trademarks]]
+= Marcas Registradas
+:doctype: book
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:sectnumoffset: 14
+:partnums:
+:source-highlighter: rouge
+:experimental:
+:images-path: books/fdp-primer/
+
+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::[]
+
+Para todos os documentos do Projeto de Documentação do FreeBSD, é necessário citar as marcas registradas e os outros tipos são habituais, e isso é um requisito para todo escritor e colaborador.
+
+[[trademark-symbols]]
+== Símbolos de Marca Registrada
+
+Acrescente um símbolo de marca registrada ((TM), (R) ou outros símbolos) na primeira ocorrência do nome da marca e sempre ao usar logotipos. Use a extref:{fdp-primer}/writing-style/#writing-style-special-characters[sequência ASCII equivalente], que será renderizada como o caractere Unicode real. Além disso, escreva o nome da marca registrada seguindo as diretrizes da marca registrada.
+
+Em caso de dúvida, pesquise o site do proprietário da marca registrada, o site do produto e/ou o site link:https://www.uspto.gov/trademarks[United States Patent and Trademark Office trademark search].
+
+[[trademark-citing]]
+== Citação de Marca Registrada
+
+O Projeto de Documentação do FreeBSD fornece um modelo para citar marcas registradas, o que também evita a duplicação de marcas registradas nos documentos.
+
+Primeiro, procure a marca registrada na link:https://cgit.freebsd.org/doc/tree/documentation/themes/beastie/i18n/en.toml#n328[Seção de direitos autorais no modelo do projeto] e adicione-a às tags de marcas registradas na seção 'Front Matter' do documento, localizada no início de cada documento.
+
+O seguinte é um exemplo de `Front Matter` do artigo extref:{contributing}[Contribuindo com o FreeBSD]:
+
+....
+---
+title: Contributing to FreeBSD
+authors:
+ - author: Jordan Hubbard
+ - author: Sam Lawrance
+ - author: Mark Linimon
+description: How to contribute to the FreeBSD Project
+trademarks: ["freebsd", "ieee", "general"]
+weight: 15
+tags: ["Contributing", "FreeBSD", "Non-Programmer Tasks", "Programmer Tasks"]
+---
+....
+
+As tags de marca registrada `freebsd`, `ieee` e `general` serão renderizadas automaticamente ao compilar o documento, ficando desta forma:
+
+....
+FreeBSD is a registered trademark of the FreeBSD Foundation.
+
+IEEE, POSIX, and 802 are registered trademarks of Institute of Electrical and Electronics Engineers, Inc. in the United States.
+
+Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this document, and the FreeBSD Project was aware of the trademark claim, the designations have been followed by the “™” or the “®” symbol.
+....
+
+Caso a marca não esteja presente no template do projeto, ela deve ser submetida. Qualquer desenvolvedor ou colaborador pode atualizar as marcas registradas.
+
+As tags de marca registrada `freebsd` e `general` geralmente estão presentes em todos os documentos.
diff --git a/documentation/content/pt-br/books/fdp-primer/trademarks/_index.po b/documentation/content/pt-br/books/fdp-primer/trademarks/_index.po
new file mode 100644
index 0000000000..3c7789a682
--- /dev/null
+++ b/documentation/content/pt-br/books/fdp-primer/trademarks/_index.po
@@ -0,0 +1,197 @@
+# 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-06-19 21:07-0300\n"
+"PO-Revision-Date: 2023-07-02 17:42+0000\n"
+"Last-Translator: \"Danilo G. Baio\" <dbaio@FreeBSD.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/booksfdp-primertrademarks_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:1
+#, no-wrap
+msgid "Guidelines for trademarks in the FreeBSD Documentation Project"
+msgstr "Diretrizes para marcas registradas no Projeto de Documentação do FreeBSD"
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:1
+#, no-wrap
+msgid "Chapter 14. Trademarks"
+msgstr "Chapter 14. Marcas Registradas"
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:13
+#, no-wrap
+msgid "Trademarks"
+msgstr "Marcas Registradas"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:51
+msgid ""
+"For all documents on the FreeBSD Documentation Project, citing registered "
+"trademarks is necessary and other trademarks is customary, and that is a "
+"requirement for every writer and contributor."
+msgstr ""
+"Para todos os documentos do Projeto de Documentação do FreeBSD, é necessário "
+"citar as marcas registradas e os outros tipos são habituais, e isso é um "
+"requisito para todo escritor e colaborador."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:53
+#, no-wrap
+msgid "Trademark Symbols"
+msgstr "Símbolos de Marca Registrada"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:58
+msgid ""
+"Append a trademark symbol ((TM), (R), or other) to the first occurrence of "
+"the trademarked name, and always when using logos. Use the extref:{fdp-"
+"primer}/writing-style/#writing-style-special-characters[equivalent ASCII "
+"sequence], which will be rendered as the actual Unicode character. Also, "
+"write the trademarked name following its trademark guidelines."
+msgstr ""
+"Acrescente um símbolo de marca registrada ((TM), (R) ou outros símbolos) na "
+"primeira ocorrência do nome da marca e sempre ao usar logotipos. Use a "
+"extref:{fdp-primer}/writing-style/#writing-style-special-"
+"characters[sequência ASCII equivalente], que será renderizada como o "
+"caractere Unicode real. Além disso, escreva o nome da marca registrada "
+"seguindo as diretrizes da marca registrada."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:60
+msgid ""
+"When in doubt, research the trademark owner's website, the product's "
+"website, and or the link:https://www.uspto.gov/trademarks[United States "
+"Patent and Trademark Office trademark search website]."
+msgstr ""
+"Em caso de dúvida, pesquise o site do proprietário da marca registrada, o "
+"site do produto e/ou o site link:https://www.uspto.gov/trademarks[United "
+"States Patent and Trademark Office trademark search]."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:62
+#, no-wrap
+msgid "Trademark Citing"
+msgstr "Citação de Marca Registrada"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:65
+msgid ""
+"The FreeBSD Documentation Project provides a template for citing trademarks, "
+"which also avoids duplicating trademarks in the documents."
+msgstr ""
+"O Projeto de Documentação do FreeBSD fornece um modelo para citar marcas "
+"registradas, o que também evita a duplicação de marcas registradas nos "
+"documentos."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:67
+msgid ""
+"First, look for the trademark in the link:https://cgit.freebsd.org/doc/tree/"
+"documentation/themes/beastie/i18n/en.toml#n328[Copyright section in the "
+"project's template], then add it to the trademarks tag on the `Front Matter` "
+"section of the document, located at the beginning of each document."
+msgstr ""
+"Primeiro, procure a marca registrada na link:https://cgit.freebsd.org/doc/"
+"tree/documentation/themes/beastie/i18n/en.toml#n328[Seção de direitos "
+"autorais no modelo do projeto] e adicione-a às tags de marcas registradas na "
+"seção 'Front Matter' do documento, localizada no início de cada documento."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:69
+msgid ""
+"The following is an example of the `Front Matter` of the extref:"
+"{contributing}[Contributing to FreeBSD] article:"
+msgstr ""
+"O seguinte é um exemplo de `Front Matter` do artigo extref:{contributing}"
+"[Contribuindo com o FreeBSD]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:71
+#, no-wrap
+msgid "---\n"
+msgstr "---\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:81
+#, no-wrap
+msgid ""
+"title: Contributing to FreeBSD\n"
+"authors:\n"
+" - author: Jordan Hubbard\n"
+" - author: Sam Lawrance\n"
+" - author: Mark Linimon\n"
+"description: How to contribute to the FreeBSD Project\n"
+"trademarks: [\"freebsd\", \"ieee\", \"general\"]\n"
+"weight: 15\n"
+"tags: [\"Contributing\", \"FreeBSD\", \"Non-Programmer Tasks\", \"Programmer Tasks\"]\n"
+"---\n"
+msgstr ""
+"title: Contributing to FreeBSD\n"
+"authors:\n"
+" - author: Jordan Hubbard\n"
+" - author: Sam Lawrance\n"
+" - author: Mark Linimon\n"
+"description: How to contribute to the FreeBSD Project\n"
+"trademarks: [\"freebsd\", \"ieee\", \"general\"]\n"
+"weight: 15\n"
+"tags: [\"Contributing\", \"FreeBSD\", \"Non-Programmer Tasks\", \"Programmer Tasks\"]\n"
+"---\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:85
+msgid ""
+"The trademark tags `freebsd`, `ieee`, and `general` will be automatically "
+"rendered when building the document like this:"
+msgstr ""
+"As tags de marca registrada `freebsd`, `ieee` e `general` serão renderizadas "
+"automaticamente ao compilar o documento, ficando desta forma:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:88
+#, no-wrap
+msgid "FreeBSD is a registered trademark of the FreeBSD Foundation.\n"
+msgstr "FreeBSD is a registered trademark of the FreeBSD Foundation.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:90
+#, no-wrap
+msgid "IEEE, POSIX, and 802 are registered trademarks of Institute of Electrical and Electronics Engineers, Inc. in the United States.\n"
+msgstr "IEEE, POSIX, and 802 are registered trademarks of Institute of Electrical and Electronics Engineers, Inc. in the United States.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:92
+#, no-wrap
+msgid "Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this document, and the FreeBSD Project was aware of the trademark claim, the designations have been followed by the “™” or the “®” symbol.\n"
+msgstr "Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this document, and the FreeBSD Project was aware of the trademark claim, the designations have been followed by the “™” or the “®” symbol.\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:96
+msgid ""
+"If a trademark is not present in the project's template, it must be "
+"submitted. Any developer or contributor can update the trademarks."
+msgstr ""
+"Caso a marca não esteja presente no template do projeto, ela deve ser "
+"submetida. Qualquer desenvolvedor ou colaborador pode atualizar as marcas "
+"registradas."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/trademarks/_index.adoc:97
+msgid ""
+"The `freebsd` and `general` trademark tags are usually present in all "
+"documents."
+msgstr ""
+"As tags de marca registrada `freebsd` e `general` geralmente estão presentes "
+"em todos os documentos."
diff --git a/documentation/content/pt-br/books/fdp-primer/translations/_index.adoc b/documentation/content/pt-br/books/fdp-primer/translations/_index.adoc
index 87076224e2..32cb0a40e8 100644
--- a/documentation/content/pt-br/books/fdp-primer/translations/_index.adoc
+++ b/documentation/content/pt-br/books/fdp-primer/translations/_index.adoc
@@ -1,7 +1,7 @@
---
description: 'FAQ sobre o processo de tradução no Projeto de Documentação do FreeBSD'
next: books/fdp-primer/po-translations
-path: /books/fdp-primer/
+path: "/books/fdp-primer/translations/"
prev: books/fdp-primer/rosetta
showBookMenu: 'true'
tags: ["FAQ", "i18n", "i10n", "translation"]
diff --git a/documentation/content/pt-br/books/fdp-primer/weblate/_index.adoc b/documentation/content/pt-br/books/fdp-primer/weblate/_index.adoc
new file mode 100644
index 0000000000..109744bb29
--- /dev/null
+++ b/documentation/content/pt-br/books/fdp-primer/weblate/_index.adoc
@@ -0,0 +1,454 @@
+---
+description: 'Como entrar para a equipe de tradutores do FreeBSD e traduzir online no Weblate'
+next: books/fdp-primer/manual-pages
+path: "/books/fdp-primer/weblate/"
+prev: books/fdp-primer/po-translations
+showBookMenu: 'true'
+tags: ["weblate", "po", "translations", "tutorial", "quick start"]
+title: 'Capítulo 10. Traduções Weblate'
+weight: 10
+---
+
+[[weblate-translations]]
+= Traduções Weblate
+:doctype: book
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:sectnumoffset: 10
+:partnums:
+:source-highlighter: rouge
+:experimental:
+:images-path: books/fdp-primer/
+
+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::[]
+
+[[weblate-introduction]]
+== Introdução
+
+Este capítulo descreve alguns passos básicos para ingressar na equipe de tradutores do FreeBSD, traduzindo online no Weblate ou offline, e algumas sugestões simples sobre tradução, revisão e teste. O foco é na parte da tradução.
+
+Os documentos originais (artigos e livros) estão no {main-site-en}[portal de documentação].
+
+https://weblate.org/en/[Weblate] é um software web de código aberto com foco em idiomas; o projeto FreeBSD possui uma instância local.
+
+[[weblate-become-translator]]
+== Como se Tornar um Tradutor do FreeBSD
+
+A seguir seguem os passos para começar a traduzir artigos e livros do Projeto de Documentação do FreeBSD.
+
+. Crie uma conta na https://translate-dev.freebsd.org/[instância Weblate do FreeBSD] com um endereço de e-mail ou sua conta GitHub.
+. Inscreva-se na {freebsd-translators}.
+. Apresente-se e peça para participar de uma equipe de idiomas. Se a equipe de idiomas não existir, peça para criá-la. A auto-apresentação é essencial. Isso aumenta suas chances de ser aprovado para acesso de escrita.
+. Acesse o https://translate-dev.freebsd.org/[Weblate] com a nova conta.
+. Encontre a equipe de idiomas e escolha um documento inicial para traduzir.
+. Crie uma conta no Bugzilla para enviar as traduções depois de terminar um documento. O projeto de documentação também está aceitando Pull Requests do GitHub com envio de traduções.
+
+[WARNING]
+====
+Todos os arquivos de tradução e documentos devem seguir a https://www.freebsd.org/copyright/freebsd-doc-license/[Licença de Documentação do FreeBSD]; se isso não for aceitável, por favor, não se inscreva ou envie patches ou traduções.
+====
+
+[[weblate-introduce-yourself]]
+== Apresente-se
+
+Forneça uma breve auto-apresentação na {freebsd-translators} para iniciar o processo de concessão de acesso. Isso permitirá que um coordenador ou administrador de idiomas forneça as permissões necessárias para que o novo usuário do Weblate comece a traduzir.
+
+A seguir está um exemplo de como tal e-mail poderia parecer.
+
+[.programlisting]
+....
+Subject: Self-Introduction: Name and language
+
+Name: Name (usar nome preferido)
+Location: City, country (opcional)
+Login: username or email (essencial)
+Language: Language to translate (essencial)
+Profession or student status: (opcional)
+About You: (formato livre -- informações com as quais você se sente à vontade para compartilhar
+ others: empresa, escola, outra afiliação, habilitações históricas, outras
+ projetos em que você trabalhou, nível e tipo de conhecimento de informática, outras habilidades relevantes,
+ etc.)
+You and the FreeBSD Project: (formato livre: outros projetos FreeBSD de interesse, comentários, etc.)
+....
+
+[[weblate-login]]
+== Entrar no Weblate
+
+Abra https://translate-dev.freebsd.org/[] e `Entre`.
+
+image::weblate-login.png["Login Weblate", 800]
+
+Use um nome de usuário, endereço de e-mail ou conta do GitHub para fazer login.
+
+O perfil do usuário contém suas preferências, nome e endereço de e-mail. O nome e o endereço serão usados nos commits; mantenha esta informação atualizada.
+
+Na instância Weblate do FreeBSD, todas as traduções serão enviadas para o https://github.com/freebsd/freebsd-doc-translate[freebsd-doc-translate] (um repositório intermediário no GitHub), e não diretamente para o https://github.com/freebsd/freebsd-doc[freebsd-doc]. Os tradutores devem pegar os arquivos PO gettext (`.po`), converte-los para `.adoc` e submete-los via https://bugs.freebsd.org/bugzilla/[Bugzilla] ou https://github.com/freebsd/freebsd-doc/pulls[GitHub] para publicar ou atualizar o documento traduzido no portal de documentação. Veja mais nas seções a seguir.
+
+O Weblate irá enviar os commits diariamente, pelo menos, para o `freebsd-doc-translate`, se quaisquer novas strings forem traduzidas.
+
+[[weblate-find-language-team]]
+== Encontre uma Equipe de Idiomas para Participar
+
+Clique em `Projetos`, escolha `Documentação`, depois clique em `Idiomas` e veja todos os idiomas disponíveis.
+
+image::weblate-languages.png["Idiomas Weblate", 500]
+
+Observe que alguns idiomas e documentos traduzidos já existem no portal de documentação e repositórios.
+
+Se o idioma desejado para tradução não estiver disponível no Weblate, entre em contato com os https://www.freebsd.org/docproj/translations/[coordenadores de idiomas] antes de solicitar a criação de um novo idioma. Se não houver resposta, entre em contato com a {doceng}.
+
+[[weblate-translating-online]]
+== Traduzindo Online no Weblate
+
+Traduzir documentos online tende a ser o método mais fácil para tradução de documentos no FreeBSD, pois permite que os usuários trabalhem no mesmo arquivo, distribuindo a carga de trabalho.
+
+Assim que um coordenador ou administrador conceder acesso a um idioma específico para um usuário, o botão salvar será habilitado para que esse usuário possa começar a traduzir.
+
+image::weblate-documents.png["Documentos Weblate", 800]
+image::weblate-translate.png["Weblate Translate", 800]
+
+O Weblate possui um conjunto de links que levam à tradução. A tradução é dividida em verificações individuais, como `Não traduzido` ou `Precisando de revisão`. Se todo o documento estiver traduzido sem nenhum erro, o link `Todas as traduções` ainda estará disponível caso uma revisão seja necessária. Como alternativa, o campo de pesquisa pode ser usado para localizar uma string ou termo específico.
+
+Na https://docs.weblate.org/en/latest/user/translating.html#translation-projects[documentação do Weblate], há mais informações sobre traduções, como atalhos de teclado e outras dicas sobre a ferramenta de tradução.
+
+[[weblate-translating-offline]]
+== Traduzindo Offline
+
+O Weblate no FreeBSD usa arquivos PO gettext para traduções. Os usuários familiarizados com os arquivos PO gettext que desejam traduzir offline podem baixar e enviar as traduções através da página do documento no Weblate clicando na seção `Arquivos`.
+
+image::weblate-offline.png["Weblate Offline", 800]
+
+[[weblate-automatic-suggestions]]
+== Tradução baseada em Sugestões Automáticas
+
+Os idiomas que usavam Weblate antes da migração para Hugo/Asciidoctor podem usar esse recurso do Weblate para economizar tempo.
+
+Este recurso do Weblate usa a Memória de Tradução gerada pelos outros componentes e projetos no mesmo servidor. As antigas traduções do Weblate estão hospedadas no mesmo servidor como somente leitura por causa disso.
+
+Strings que correspondem a `100/100` em similaridade podem ser copiadas e salvas diretamente. Outras strings precisarão de pelo menos um pequeno ajuste.
+
+Alguns exemplos:
+
+image::weblate_automatic_suggestion_01.png["Weblate Sugestões Automáticas 01", 800]
+
+Com a migração para Hugo/Asciidoctor, os documentos passaram a utilizar UTF-8. Algumas entidades HTML devem ser substituídas. Algumas strings, como links, requerem alterações na marcação.
+
+image::weblate_automatic_suggestion_02.png["Weblate Sugestões Automáticas 02", 800]
+
+Links:
+
+image::weblate_automatic_suggestion_03.png["Weblate Sugestões Automáticas 03", 800]
+
+[[weblate-proofreading-qa]]
+== Revisão e Verificações de Qualidade do Weblate
+
+O dashboard do documento `Projeto/Idioma/Documento` mostra o status da tradução e o status das strings desse documento. Esta página é útil para revisão e verificações de qualidade.
+
+image::weblate-revision1.png["Weblate Revisão 01", 800]
+
+Neste exemplo, falta o ponto final em duas strings; clicando nesse link será mostrado apenas as strings a serem revisadas/traduzidas.
+
+image::weblate-revision2.png["Weblate Revisão 02", 800]
+
+Tradutores e revisores geralmente gostam da visualização das strings traduzidas em seu contexto.
+
+[[weblate-building]]
+== Compilando o Documento Traduzido
+
+O projeto não usa integração contínua e entrega contínua (CI/CD) para gerar as traduções. Existem estudos para a sua disponibilização.
+
+[NOTE]
+====
+O exemplo a seguir usa o GitHub, pois o Weblate também está no GitHub. Observe que este repositório é um espelho somente leitura, mas as Pull Requests são aceitas.
+====
+
+Para gerar a tradução localmente, siga estas etapas:
+
+[[weblate-clone-repositories]]
+
+[.procedure]
+====
+.Procedimento: Clone os repositórios necessários
+. Clone o repositório `freebsd-doc`:
++
+[source, console?prompt=%]
+....
+% git clone https://github.com/freebsd/freebsd-doc.git ~/freebsd-doc
+....
+
+. Clone o repositório `freebsd-doc-translate`:
++
+[source, console?prompt=%]
+....
+% git clone https://github.com/freebsd/freebsd-doc-translate.git ~/freebsd-doc-translate
+....
+====
+
+[[weblate-copy-translation]]
+
+[.procedure]
+====
+.Procedimento: Copie um arquivo de tradução para `freebsd-doc`
+
+Com ambos os repositórios, copie a tradução de `freebsd-doc-translate` para `freebsd-doc`. Exemplo de tradução do artigo do Committer's Guide em espanhol.
+
+[source, console?prompt=%]
+....
+% cp ~/freebsd-doc-translate/documentation/content/es/articles/committers-guide/_index.po \
+~/freebsd-doc/documentation/content/es/articles/committers-guide/
+....
+====
+
+[[weblate-translate]]
+
+[.procedure]
+====
+.Procedimento: Converter um arquivo de tradução (`.po`) para `.adoc`
+
+Vá para a raiz do `freebsd-doc`.
+
+[source, console?prompt=%]
+....
+% cd ~/freebsd-doc
+....
+
+Traduzir (converter) o arquivo `.po` para `.adoc`
+
+[source, console?prompt=%]
+....
+% ./tools/translate.sh documentation es articles/committers-guide
+....
+
+Por padrão: apenas arquivos com mais de oitenta por cento de strings traduzidas serão convertidos para `.adoc`.
+
+Para ignorar esse limite:
+
+[source, console?prompt=%]
+....
+% KEEP_ENV=0 ./tools/translate.sh documentation es articles/committers-guide
+....
+
+====
+
+Alguns documentos, como livros, possuem muitos arquivos PO gettext. Sempre copie todos eles ao traduzir e compilar. Arquivos que não foram traduzidos serão convertidos com as strings de origem (inglês).
+
+[WARNING]
+====
+A estrutura de diretórios é fundamental. Siga sempre a estrutura de diretórios dos documentos em inglês.
+====
+
+[[weblate-build]]
+
+[.procedure]
+====
+.Procedimento: Gerar o documento traduzido
+
+Por último, a parte da compilação.
+
+Entre no diretório de documentação porque não há necessidade de compilar o site do FreeBSD.
+
+[source, console?prompt=%]
+....
+% cd documentation
+....
+
+E compile a documentação. Observe que `en` é sempre adicionado por padrão ao compilar qualquer outro idioma.
+
+[source, console?prompt=%]
+....
+% DOC_LANG=es make
+....
+
+Este comando irá compilar apenas os documentos em inglês e espanhol do portal de documentação do FreeBSD. A saída estará no diretório [.filename]#public#; abra-o em um navegador. Observe que alguns arquivos de índice podem redirecionar o navegador para a página online.
+
+Outra boa opção é compilar e servir o conteúdo com o servidor web interno do Hugo:
+
+[source, console?prompt=%]
+....
+% DOC_LANG=es make run
+....
+
+Por padrão, o servidor web escuta em `localhost`; Para substituir esse comportamento, especifique o endereço IP desejado no valor do parâmetro `BIND`.
+
+[source, console?prompt=%]
+....
+% DOC_LANG=es make run BIND=192.168.15.10
+....
+
+Isso compila e serve o conteúdo com o servidor web interno de Hugo e deixa ele em espera, quando algum arquivo for alterado, ele o recompila automaticamente.
+====
+
+Para fazer os ajustes necessários na tradução, siga as etapas abaixo para sincronizar novamente todos os componentes:
+
+- Corrija a string de tradução em https://translate-dev.freebsd.org/[Weblate].
+- Force o Weblate a realizar o commit das alterações na aba `Document/Manage/Commit`.
+- Sincronize o repositório Weblate local `freebsd-doc-translate` com o comando `git pull origin main`.
+- Copie a tradução novamente para `freebsd-doc`.
+- Converta a tradução para .adoc com o script `./tools/translate.sh`.
+- Hugo irá recompilar o arquivo e não todo o conjunto se `make run` foi utilizado; ou execute novamente o `make`.
+
+[IMPORTANT]
+====
+Siga os passos anteriores quantas vezes forem necessárias até que o documento esteja pronto para ser publicado.
+====
+
+O capítulo crossref:doc-build[doc-build-rendering,Processo de Compilação da Documentação] inclui informações sobre a renderização para HTML e PDF.
+
+[[weblate-submitting-translations]]
+== Enviando Traduções
+
+Exemplo de envio de atualização do artigo Committer's Guide em Português do Brasil.
+
+
+[[weblate-git-repo-status]]
+
+[.procedure]
+====
+.Verifique o repositório
+
+Depois de seguir os passos em crossref:weblate[weblate-building,Compilando o Documento Traduzido], vá para a raiz do `freebsd-doc` e visualize o que deve ser submetido. Para obter uma visão geral dos arquivos a serem alterados e das diferenças no conteúdo do arquivo:
+
+[source, console?prompt=%]
+....
+% git status
+% git diff
+....
+
+Revise a saída e, se algum arquivo não relacionado à atualização da tradução do Committer's Guide foi alterado ou adicionado, tome a ação apropriada de revertê-lo ou removê-lo, respectivamente, antes de continuar.
+
+Sempre inclua o arquivo PO gettext (`.po`) e o documento traduzido em Hugo/Asciidoctor (`.adoc`).
+====
+
+[[weblate-git-new-branch]]
+
+[.procedure]
+====
+.Crie uma nova branch e faça o commit
+
+Crie outra branch para separar o trabalho, o que ajudará em futuras atualizações no repositório local.
+
+[source, console?prompt=%]
+....
+% git checkout -b committers-guide_pt-br
+....
+
+Registre o commit local.
+
+[source, console?prompt=%]
+....
+% git add .
+% git commit
+....
+
+Exemplo de mensagens de commit para traduções:
+
+[.programlisting]
+....
+pt-br/committers-guide: Sincronizar com en XXXXXXX
+....
+
+Onde `XXXXXXX` é a revisão man:git[1] armazenada no repositório Weblate [.filename]#~/freebsd-doc-translate/revision.txt#.
+
+Se for a primeira tradução de um artigo:
+
+[.programlisting]
+....
+Adicionar tradução Coreana do artigo Leap Seconds
+....
+
+Uma mensagem será exibida após o commit se o man:git[1] não tiver sido configurado anteriormente. Siga as instruções e forneça o nome e o endereço de e-mail usado no Weblate. Esta etapa é crucial para creditar o trabalho dos contribuidores.
+
+Em seguida, verifique todo o commit, revise as alterações e o nome e e-mail do autor.
+
+[source, console?prompt=%]
+....
+% git show
+....
+====
+
+[[weblate-git-patch-submit]]
+
+[.procedure]
+====
+.Gerar um patch
+
+Em seguida, gere um arquivo man:git-format-patch[1].
+
+[source, console?prompt=%]
+....
+% git format-patch main
+0001-pt-br-committers-guide-Sync-with-en-XXXXXXX.patch
+....
+====
+
+Anexe o patch [.filename]#0001-pt-br-committers-guide-Sync-with-en-XXXXXXX.patch# a um relatório de problema no https://bugs.freebsd.org/bugzilla/[Bugzilla do FreeBSD].
+
+Inclua as seguintes informações no relatório:
+
+[[weblate-bugzilla-fields]]
+.Campos do Bugzilla
+[cols="1,1", frame="none", options="header"]
+|===
+| Campo
+| Valor
+
+| *produto*
+| Documentação
+
+| *Componente*
+| Artigos e Livros
+
+| *Resumo*
+| O mesmo que o commit local
+
+| *Descrição*
+| Declare que as instruções deste guia foram seguidas, incluindo revisão e outras etapas necessárias.
+Inclua informações que podem ajudar na triagem e no progresso do relatório.
+
+
+| *CC* (Opcional)
+| Se o idioma tiver coordenadores, inclua seus endereços de e-mail no campo CC.
+|===
+
+Para pessoas familiarizadas com man:git[1] e GitHub: em vez de enviar o patch através do https://bugs.freebsd.org/bugzilla/[Bugzilla], um https://github.com/freebsd/freebsd-doc/pulls[pull request do GitHub] pode ser usado (use o nome e o endereço de e-mail utilizado no Weblate).
+
+https://github.com/freebsd/freebsd-doc/ é um espelho secundário. Alterações na árvore `doc` podem ser feitas apenas por pessoas que possuem um `doc` commit bit.
+
+Quando os tradutores continuam enviando patches de boa qualidade, eles podem ser nomeados por outros committers para receber acesso de escrita (um extref:{committers-guide}[doc commit bit, committer.types] para traduções), uma conta FreeBSD e todas as vantagens associadas.
+
+A lista de extref:{contributors}[Contribuidores Adicionais do FreeBSD, contrib-additional] inclui não-committers cujas contribuições são submetidas à árvore `doc`.
+
+Em caso de dúvida sobre algum procedimento, escreva para a {freebsd-translators}.
+
+[[weblate-faq]]
+== FAQ (Perguntas Frequentes)
+
+[[weblate-copyrights]]
+=== É necessário traduzir todas as mensagens de Copyright?
+
+Cada equipe de idiomas decide isso para o seu próprio idioma; na equipe `pt-br` (Português do Brasil), foi decidido não traduzir essas mensagens.
diff --git a/documentation/content/pt-br/books/fdp-primer/weblate/_index.po b/documentation/content/pt-br/books/fdp-primer/weblate/_index.po
new file mode 100644
index 0000000000..cdfa402c16
--- /dev/null
+++ b/documentation/content/pt-br/books/fdp-primer/weblate/_index.po
@@ -0,0 +1,1258 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-09-09 18:12-0300\n"
+"PO-Revision-Date: 2023-09-10 13:31+0000\n"
+"Last-Translator: \"Danilo G. Baio\" <dbaio@FreeBSD.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/booksfdp-primerweblate_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:1
+#, no-wrap
+msgid "How to join the FreeBSD translators team and translate online on Weblate"
+msgstr "Como entrar para a equipe de tradutores do FreeBSD e traduzir online no Weblate"
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:1
+#, no-wrap
+msgid "Chapter 10. Weblate Translations"
+msgstr "Capítulo 10. Traduções Weblate"
+
+#. type: Title =
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:13
+#, no-wrap
+msgid "Weblate Translations"
+msgstr "Traduções Weblate"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:51
+#, no-wrap
+msgid "Introduction"
+msgstr "Introdução"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:55
+msgid ""
+"This chapter describes some basic steps for joining the FreeBSD translators "
+"team, translating online on Weblate or offline, and some simple suggestions "
+"on translating, proofreading, and testing. It's focused on the translation "
+"part."
+msgstr ""
+"Este capítulo descreve alguns passos básicos para ingressar na equipe de "
+"tradutores do FreeBSD, traduzindo online no Weblate ou offline, e algumas "
+"sugestões simples sobre tradução, revisão e teste. O foco é na parte da "
+"tradução."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:57
+msgid ""
+"The original documents (articles and books) are in the {main-site}"
+"[documentation portal]."
+msgstr ""
+"Os documentos originais (artigos e livros) estão no {main-site-en}[portal de "
+"documentação]."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:59
+msgid ""
+"https://weblate.org/en/[Weblate] is web-based open-source software focused "
+"on localization; the FreeBSD project runs a local instance."
+msgstr ""
+"https://weblate.org/en/[Weblate] é um software web de código aberto com foco "
+"em idiomas; o projeto FreeBSD possui uma instância local."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:61
+#, no-wrap
+msgid "How to Become a FreeBSD Translator"
+msgstr "Como se Tornar um Tradutor do FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:64
+msgid ""
+"Following are simple steps to start translating articles and books of the "
+"FreeBSD Documentation Project."
+msgstr ""
+"A seguir seguem os passos para começar a traduzir artigos e livros do "
+"Projeto de Documentação do FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:66
+msgid ""
+"Create an account on the https://translate-dev.freebsd.org/[FreeBSD Weblate "
+"instance] with an email address or your GitHub account."
+msgstr ""
+"Crie uma conta na https://translate-dev.freebsd.org/[instância Weblate do "
+"FreeBSD] com um endereço de e-mail ou sua conta GitHub."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:67
+msgid "Subscribe to the {freebsd-translators}."
+msgstr "Inscreva-se na {freebsd-translators}."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:71
+msgid ""
+"Introduce yourself and ask to join a language team. If the language team "
+"does not exist, ask to create it. The self-introduction is essential. It "
+"raises your chances of being approved for write access."
+msgstr ""
+"Apresente-se e peça para participar de uma equipe de idiomas. Se a equipe de "
+"idiomas não existir, peça para criá-la. A auto-apresentação é essencial. "
+"Isso aumenta suas chances de ser aprovado para acesso de escrita."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:72
+msgid ""
+"Login to https://translate-dev.freebsd.org/[Weblate] with the new account."
+msgstr "Acesse o https://translate-dev.freebsd.org/[Weblate] com a nova conta."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:73
+msgid "Find the language team and choose an initial document to translate."
+msgstr ""
+"Encontre a equipe de idiomas e escolha um documento inicial para traduzir."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:75
+msgid ""
+"Create a Bugzilla account to submit the translations after finishing a "
+"document. The Documentation project is also accepting GitHub Pull Requests "
+"with translation submissions."
+msgstr ""
+"Crie uma conta no Bugzilla para enviar as traduções depois de terminar um "
+"documento. O projeto de documentação também está aceitando Pull Requests do "
+"GitHub com envio de traduções."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:79
+msgid ""
+"All translation files and documents must follow https://www.freebsd.org/"
+"copyright/freebsd-doc-license/[The FreeBSD Documentation License]; if this "
+"is unacceptable, please do not sign up or send any patches or translations."
+msgstr ""
+"Todos os arquivos de tradução e documentos devem seguir a https://www."
+"freebsd.org/copyright/freebsd-doc-license/[Licença de Documentação do "
+"FreeBSD]; se isso não for aceitável, por favor, não se inscreva ou envie "
+"patches ou traduções."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:82
+#, no-wrap
+msgid "Introduce Yourself"
+msgstr "Apresente-se"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:86
+msgid ""
+"Please provide a brief self-introduction on the {freebsd-translators} to "
+"initiate the process of granting access. This will enable a language "
+"coordinator or administrator to provide the necessary permissions for the "
+"new user of Weblate to start translating."
+msgstr ""
+"Forneça uma breve auto-apresentação na {freebsd-translators} para iniciar o "
+"processo de concessão de acesso. Isso permitirá que um coordenador ou "
+"administrador de idiomas forneça as permissões necessárias para que o novo "
+"usuário do Weblate comece a traduzir."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:88
+msgid "Following is an example of how such an email could look."
+msgstr "A seguir está um exemplo de como tal e-mail poderia parecer."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:92
+#, no-wrap
+msgid "Subject: Self-Introduction: Name and language\n"
+msgstr "Subject: Self-Introduction: Name and language\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:104
+#, no-wrap
+msgid ""
+"Name: Name (use preferred name)\n"
+"Location: City, country (optional)\n"
+"Login: username or email (essential)\n"
+"Language: Language to translate (essential)\n"
+"Profession or student status: (optional)\n"
+"About You: (free format -- info which you feel comfortable sharing with\n"
+" others: company, school, other affiliation, historical qualifications, other\n"
+" projects you have worked on, level and type of computer skills, other relevant skills,\n"
+" etc.)\n"
+"You and the FreeBSD Project: (free format: other FreeBSD projects of\n"
+" interest, comments, etc.)\n"
+msgstr ""
+"Name: Name (usar nome preferido)\n"
+"Location: City, country (opcional)\n"
+"Login: username or email (essencial)\n"
+"Language: Language to translate (essencial)\n"
+"Profession or student status: (opcional)\n"
+"About You: (formato livre -- informações com as quais você se sente à vontade para compartilhar\n"
+" others: empresa, escola, outra afiliação, habilitações históricas, outras\n"
+" projetos em que você trabalhou, nível e tipo de conhecimento de informática, outras habilidades relevantes,\n"
+" etc.)\n"
+"You and the FreeBSD Project: (formato livre: outros projetos FreeBSD de interesse, comentários, etc.)\n"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:107
+#, no-wrap
+msgid "Login to Weblate"
+msgstr "Entrar no Weblate"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:110
+msgid "Open https://translate-dev.freebsd.org/[] and `Sign in`."
+msgstr "Abra https://translate-dev.freebsd.org/[] e `Entre`."
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:111
+#, no-wrap
+msgid "Weblate Login"
+msgstr "Login Weblate"
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:111
+#, no-wrap
+msgid "weblate-login.png"
+msgstr "weblate-login.png"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:114
+msgid "Use a username, email address, or GitHub account to log in."
+msgstr ""
+"Use um nome de usuário, endereço de e-mail ou conta do GitHub para fazer "
+"login."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:117
+msgid ""
+"The user profile contains your preferences, name, and email address. The "
+"name and address will be used in commits; keep this information accurate."
+msgstr ""
+"O perfil do usuário contém suas preferências, nome e endereço de e-mail. O "
+"nome e o endereço serão usados nos commits; mantenha esta informação "
+"atualizada."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:121
+msgid ""
+"On the FreeBSD Weblate instance, all translations will be committed to "
+"https://github.com/freebsd/freebsd-doc-translate[freebsd-doc-translate] (an "
+"intermediate repository on GitHub), not directly to https://github.com/"
+"freebsd/freebsd-doc[freebsd-doc]. Translators must take the PO gettext "
+"files (`.po`), converting them to `.adoc` and submit it via https://bugs."
+"freebsd.org/bugzilla/[Bugzilla] or https://github.com/freebsd/freebsd-doc/"
+"pulls[GitHub] to get the translated document published or updated in the "
+"documentation portal. See more in the following sections."
+msgstr ""
+"Na instância Weblate do FreeBSD, todas as traduções serão enviadas para o "
+"https://github.com/freebsd/freebsd-doc-translate[freebsd-doc-translate] (um "
+"repositório intermediário no GitHub), e não diretamente para o https://"
+"github.com/freebsd/freebsd-doc[freebsd-doc]. Os tradutores devem pegar os "
+"arquivos PO gettext (`.po`), converte-los para `.adoc` e submete-los via "
+"https://bugs.freebsd.org/bugzilla/[Bugzilla] ou https://github.com/freebsd/"
+"freebsd-doc/pulls[GitHub] para publicar ou atualizar o documento traduzido "
+"no portal de documentação. Veja mais nas seções a seguir."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:123
+msgid ""
+"Weblate will commit daily, at least to `freebsd-doc-translate`, if any new "
+"strings are translated."
+msgstr ""
+"O Weblate irá enviar os commits diariamente, pelo menos, para o `freebsd-doc-"
+"translate`, se quaisquer novas strings forem traduzidas."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:125
+#, no-wrap
+msgid "Find a Language Team to Join In"
+msgstr "Encontre uma Equipe de Idiomas para Participar"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:128
+msgid ""
+"Click `Projects`, choose `Documentation`, then click `Languages`, and see "
+"all the available languages."
+msgstr ""
+"Clique em `Projetos`, escolha `Documentação`, depois clique em `Idiomas` e "
+"veja todos os idiomas disponíveis."
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:129
+#, no-wrap
+msgid "Weblate Languages"
+msgstr "Idiomas Weblate"
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:129
+#, no-wrap
+msgid "weblate-languages.png"
+msgstr "weblate-languages.png"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:132
+msgid ""
+"Note that some languages and translated documents already exist in the "
+"documentation portal and repositories."
+msgstr ""
+"Observe que alguns idiomas e documentos traduzidos já existem no portal de "
+"documentação e repositórios."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:135
+msgid ""
+"If the desired language for translation is not available in Weblate, please "
+"contact the https://www.freebsd.org/docproj/translations/[language "
+"coordinators] before asking to create a new language. If there is no "
+"answer, then write to the {doceng}."
+msgstr ""
+"Se o idioma desejado para tradução não estiver disponível no Weblate, entre "
+"em contato com os https://www.freebsd.org/docproj/translations/"
+"[coordenadores de idiomas] antes de solicitar a criação de um novo idioma. "
+"Se não houver resposta, entre em contato com a {doceng}."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:137
+#, no-wrap
+msgid "Translating Online on Weblate"
+msgstr "Traduzindo Online no Weblate"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:140
+msgid ""
+"Translating documents online proves to be the easiest method for document "
+"translation on FreeBSD, as it allows users to collaborate on the same file, "
+"distributing the workload."
+msgstr ""
+"Traduzir documentos online tende a ser o método mais fácil para tradução de "
+"documentos no FreeBSD, pois permite que os usuários trabalhem no mesmo "
+"arquivo, distribuindo a carga de trabalho."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:142
+msgid ""
+"Once a coordinator or administrator grants access to a specific language for "
+"a username, the save button will be enabled, so that this user can start "
+"translating."
+msgstr ""
+"Assim que um coordenador ou administrador conceder acesso a um idioma "
+"específico para um usuário, o botão salvar será habilitado para que esse "
+"usuário possa começar a traduzir."
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:143
+#, no-wrap
+msgid "Weblate Documents"
+msgstr "Documentos Weblate"
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:143
+#, no-wrap
+msgid "weblate-documents.png"
+msgstr "weblate-documents.png"
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:144
+#, no-wrap
+msgid "Weblate Translate"
+msgstr "Weblate Translate"
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:144
+#, no-wrap
+msgid "weblate-translate.png"
+msgstr "weblate-translate.png"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:150
+msgid ""
+"Weblate has a set of links that lead to actual translation. The translation "
+"is further divided into individual checks, like `Untranslated` or `Needing "
+"review`. If the whole document is translated without any error, `All "
+"translations` link is still available in case a review is necessary. "
+"Alternatively, the search field can be used to find a specific string or "
+"term."
+msgstr ""
+"O Weblate possui um conjunto de links que levam à tradução. A tradução é "
+"dividida em verificações individuais, como `Não traduzido` ou `Precisando de "
+"revisão`. Se todo o documento estiver traduzido sem nenhum erro, o link "
+"`Todas as traduções` ainda estará disponível caso uma revisão seja "
+"necessária. Como alternativa, o campo de pesquisa pode ser usado para "
+"localizar uma string ou termo específico."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:152
+msgid ""
+"In the https://docs.weblate.org/en/latest/user/translating.html#translation-"
+"projects[Weblate documentation], there is more info about translations, like "
+"keyboard shortcuts and other tips about the translation tool."
+msgstr ""
+"Na https://docs.weblate.org/en/latest/user/translating.html#translation-"
+"projects[documentação do Weblate], há mais informações sobre traduções, como "
+"atalhos de teclado e outras dicas sobre a ferramenta de tradução."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:154
+#, no-wrap
+msgid "Translating Offline"
+msgstr "Traduzindo Offline"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:158
+msgid ""
+"Weblate on FreeBSD uses PO gettext files for translations. Users familiar "
+"with PO gettext files that want to translate offline can download and upload "
+"the translations through the document page on Weblate by clicking in the "
+"`Files` section."
+msgstr ""
+"O Weblate no FreeBSD usa arquivos PO gettext para traduções. Os usuários "
+"familiarizados com os arquivos PO gettext que desejam traduzir offline podem "
+"baixar e enviar as traduções através da página do documento no Weblate "
+"clicando na seção `Arquivos`."
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:159
+#, no-wrap
+msgid "Weblate Offline"
+msgstr "Weblate Offline"
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:159
+#, no-wrap
+msgid "weblate-offline.png"
+msgstr "weblate-offline.png"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:162
+#, no-wrap
+msgid "Translation based on Automatic Suggestions"
+msgstr "Tradução baseada em Sugestões Automáticas"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:165
+msgid ""
+"Languages using Weblate before the migration to Hugo/Asciidoctor can use "
+"this feature from Weblate to save time."
+msgstr ""
+"Os idiomas que usavam Weblate antes da migração para Hugo/Asciidoctor podem "
+"usar esse recurso do Weblate para economizar tempo."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:168
+msgid ""
+"This feature from Weblate uses the Translation Memory generated by the other "
+"components and projects on the same server. The former Weblate translations "
+"are hosted on the same server as read-only for that."
+msgstr ""
+"Este recurso do Weblate usa a Memória de Tradução gerada pelos outros "
+"componentes e projetos no mesmo servidor. As antigas traduções do Weblate "
+"estão hospedadas no mesmo servidor como somente leitura por causa disso."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:171
+msgid ""
+"Strings that match `100/100` in similarity can be copied and saved "
+"directly. Other strings will need at least minor adjustment."
+msgstr ""
+"Strings que correspondem a `100/100` em similaridade podem ser copiadas e "
+"salvas diretamente. Outras strings precisarão de pelo menos um pequeno "
+"ajuste."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:173
+msgid "Some examples:"
+msgstr "Alguns exemplos:"
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:174
+#, no-wrap
+msgid "Weblate Automatic Suggestions 01"
+msgstr "Weblate Sugestões Automáticas 01"
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:174
+#, no-wrap
+msgid "weblate_automatic_suggestion_01.png"
+msgstr "weblate_automatic_suggestion_01.png"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:179
+msgid ""
+"With the migration to Hugo/Asciidoctor, documents use UTF-8. Some HTML "
+"entities should be replaced. Some strings, such as links, require changes "
+"to markup."
+msgstr ""
+"Com a migração para Hugo/Asciidoctor, os documentos passaram a utilizar "
+"UTF-8. Algumas entidades HTML devem ser substituídas. Algumas strings, como "
+"links, requerem alterações na marcação."
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:180
+#, no-wrap
+msgid "Weblate Automatic Suggestions 02"
+msgstr "Weblate Sugestões Automáticas 02"
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:180
+#, no-wrap
+msgid "weblate_automatic_suggestion_02.png"
+msgstr "weblate_automatic_suggestion_02.png"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:183
+msgid "Links:"
+msgstr "Links:"
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:184
+#, no-wrap
+msgid "Weblate Automatic Suggestions 03"
+msgstr "Weblate Sugestões Automáticas 03"
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:184
+#, no-wrap
+msgid "weblate_automatic_suggestion_03.png"
+msgstr "weblate_automatic_suggestion_03.png"
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:187
+#, no-wrap
+msgid "Proofreading and Weblate Quality Checks"
+msgstr "Revisão e Verificações de Qualidade do Weblate"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:191
+msgid ""
+"The document dashboard `Project/Language/Document` shows the translation "
+"status and string status for that document. This page is handy for "
+"proofreading and quality checks."
+msgstr ""
+"O dashboard do documento `Projeto/Idioma/Documento` mostra o status da "
+"tradução e o status das strings desse documento. Esta página é útil para "
+"revisão e verificações de qualidade."
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:192
+#, no-wrap
+msgid "Weblate Revision 01"
+msgstr "Weblate Revisão 01"
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:192
+#, no-wrap
+msgid "weblate-revision1.png"
+msgstr "weblate-revision1.png"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:195
+msgid ""
+"In this example, two strings are missing the full stop; following that link "
+"will show only those strings to be revised/translated."
+msgstr ""
+"Neste exemplo, falta o ponto final em duas strings; clicando nesse link será "
+"mostrado apenas as strings a serem revisadas/traduzidas."
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:196
+#, no-wrap
+msgid "Weblate Revision 02"
+msgstr "Weblate Revisão 02"
+
+#. type: Target for macro image
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:196
+#, no-wrap
+msgid "weblate-revision2.png"
+msgstr "weblate-revision2.png"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:199
+msgid ""
+"Translators and reviewers often value observing translated strings in "
+"context."
+msgstr ""
+"Tradutores e revisores geralmente gostam da visualização das strings "
+"traduzidas em seu contexto."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:201
+#, no-wrap
+msgid "Building the Translated Document"
+msgstr "Compilando o Documento Traduzido"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:205
+msgid ""
+"The project does not use continuous integration and continuous delivery to "
+"build translations. There are studies to make it available."
+msgstr ""
+"O projeto não usa integração contínua e entrega contínua (CI/CD) para gerar "
+"as traduções. Existem estudos para a sua disponibilização."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:210
+msgid ""
+"The following example uses GitHub, as Weblate is also on GitHub. Note that "
+"this repository is a read-only mirror, but Pull Requests are accepted."
+msgstr ""
+"O exemplo a seguir usa o GitHub, pois o Weblate também está no GitHub. "
+"Observe que este repositório é um espelho somente leitura, mas as Pull "
+"Requests são aceitas."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:213
+msgid "To build the translation locally, follow these steps:"
+msgstr "Para gerar a tradução localmente, siga estas etapas:"
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:218
+#, no-wrap
+msgid "Procedure: Clone the necessary repositories"
+msgstr "Procedimento: Clone os repositórios necessários"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:220
+msgid "Clone the `freebsd-doc` repository:"
+msgstr "Clone o repositório `freebsd-doc`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:224
+#, no-wrap
+msgid "% git clone https://github.com/freebsd/freebsd-doc.git ~/freebsd-doc\n"
+msgstr "% git clone https://github.com/freebsd/freebsd-doc.git ~/freebsd-doc\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:227
+msgid "Clone the `freebsd-doc-translate` repository:"
+msgstr "Clone o repositório `freebsd-doc-translate`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:231
+#, no-wrap
+msgid "% git clone https://github.com/freebsd/freebsd-doc-translate.git ~/freebsd-doc-translate\n"
+msgstr "% git clone https://github.com/freebsd/freebsd-doc-translate.git ~/freebsd-doc-translate\n"
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:238
+#, no-wrap
+msgid "Procedure: Copy a translation file to `freebsd-doc`"
+msgstr "Procedimento: Copie um arquivo de tradução para `freebsd-doc`"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:242
+msgid ""
+"With both repositories in place, copy the translation from `freebsd-doc-"
+"translate` to `freebsd-doc`. Example of the Committer's Guide article "
+"translation in Spanish."
+msgstr ""
+"Com ambos os repositórios, copie a tradução de `freebsd-doc-translate` para "
+"`freebsd-doc`. Exemplo de tradução do artigo do Committer's Guide em "
+"espanhol."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:247
+#, no-wrap
+msgid ""
+"% cp ~/freebsd-doc-translate/documentation/content/es/articles/committers-guide/_index.po \\\n"
+"~/freebsd-doc/documentation/content/es/articles/committers-guide/\n"
+msgstr ""
+"% cp ~/freebsd-doc-translate/documentation/content/es/articles/committers-guide/_index.po \\\n"
+"~/freebsd-doc/documentation/content/es/articles/committers-guide/\n"
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:254
+#, no-wrap
+msgid "Procedure: Convert a translation file (`.po`) to `.adoc`"
+msgstr "Procedimento: Converter um arquivo de tradução (`.po`) para `.adoc`"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:257
+msgid "Go to the root of `freebsd-doc`."
+msgstr "Vá para a raiz do `freebsd-doc`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:261
+#, no-wrap
+msgid "% cd ~/freebsd-doc\n"
+msgstr "% cd ~/freebsd-doc\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:264
+msgid "Translate (convert) the `.po` file to `.adoc`"
+msgstr "Traduzir (converter) o arquivo `.po` para `.adoc`"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:268
+#, no-wrap
+msgid "% ./tools/translate.sh documentation es articles/committers-guide\n"
+msgstr "% ./tools/translate.sh documentation es articles/committers-guide\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:271
+msgid ""
+"By default: only files with more than eighty percent of strings translated "
+"will be converted to `.adoc`."
+msgstr ""
+"Por padrão: apenas arquivos com mais de oitenta por cento de strings "
+"traduzidas serão convertidos para `.adoc`."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:273
+msgid "To ignore that limit:"
+msgstr "Para ignorar esse limite:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:277
+#, no-wrap
+msgid "% KEEP_ENV=0 ./tools/translate.sh documentation es articles/committers-guide\n"
+msgstr "% KEEP_ENV=0 ./tools/translate.sh documentation es articles/committers-guide\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:284
+msgid ""
+"Some documents, like books, have many PO gettext files. Always copy all of "
+"them when translating and building. Files that weren't translated will be "
+"converted with the source (English) strings."
+msgstr ""
+"Alguns documentos, como livros, possuem muitos arquivos PO gettext. Sempre "
+"copie todos eles ao traduzir e compilar. Arquivos que não foram traduzidos "
+"serão convertidos com as strings de origem (inglês)."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:289
+msgid ""
+"The directory structure is fundamental. Always follow the English document "
+"directory structure."
+msgstr ""
+"A estrutura de diretórios é fundamental. Siga sempre a estrutura de "
+"diretórios dos documentos em inglês."
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:295
+#, no-wrap
+msgid "Procedure: Build the translated document"
+msgstr "Procedimento: Gerar o documento traduzido"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:298
+msgid "Last, the building part."
+msgstr "Por último, a parte da compilação."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:300
+msgid ""
+"Enter the documentation directory because there is no need to build the "
+"FreeBSD website."
+msgstr ""
+"Entre no diretório de documentação porque não há necessidade de compilar o "
+"site do FreeBSD."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:304
+#, no-wrap
+msgid "% cd documentation\n"
+msgstr "% cd documentation\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:308
+msgid ""
+"And build the documentation. Note that `en` is always added by default when "
+"building any other language."
+msgstr ""
+"E compile a documentação. Observe que `en` é sempre adicionado por padrão ao "
+"compilar qualquer outro idioma."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:312
+#, no-wrap
+msgid "% DOC_LANG=es make\n"
+msgstr "% DOC_LANG=es make\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:317
+msgid ""
+"This command will build only the English and Spanish documents of the "
+"FreeBSD documentation portal. The output will be in the [.filename]#public# "
+"directory; open that in a browser. Note that some index files can redirect "
+"the browser to the online page."
+msgstr ""
+"Este comando irá compilar apenas os documentos em inglês e espanhol do "
+"portal de documentação do FreeBSD. A saída estará no diretório [."
+"filename]#public#; abra-o em um navegador. Observe que alguns arquivos de "
+"índice podem redirecionar o navegador para a página online."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:319
+msgid ""
+"Another good option is to build and serve the content with Hugo's internal "
+"webserver:"
+msgstr ""
+"Outra boa opção é compilar e servir o conteúdo com o servidor web interno do "
+"Hugo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:323
+#, no-wrap
+msgid "% DOC_LANG=es make run\n"
+msgstr "% DOC_LANG=es make run\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:326
+msgid ""
+"By default, the webserver listens on `localhost`; To override this behavior, "
+"specify the desired IP address in the `BIND` parameter value."
+msgstr ""
+"Por padrão, o servidor web escuta em `localhost`; Para substituir esse "
+"comportamento, especifique o endereço IP desejado no valor do parâmetro "
+"`BIND`."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:330
+#, no-wrap
+msgid "% DOC_LANG=es make run BIND=192.168.15.10\n"
+msgstr "% DOC_LANG=es make run BIND=192.168.15.10\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:333
+msgid ""
+"This builds and serves the content with Hugo's internal webserver and lets "
+"it open, and if any file changes, it rebuilds them automatically."
+msgstr ""
+"Isso compila e serve o conteúdo com o servidor web interno de Hugo e deixa "
+"ele em espera, quando algum arquivo for alterado, ele o recompila "
+"automaticamente."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:336
+msgid ""
+"To make any necessary adjustments in the translation, follow the steps below "
+"to re-sync all components:"
+msgstr ""
+"Para fazer os ajustes necessários na tradução, siga as etapas abaixo para "
+"sincronizar novamente todos os componentes:"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:338
+msgid ""
+"Fix the translation string on https://translate-dev.freebsd.org/[Weblate]."
+msgstr ""
+"Corrija a string de tradução em https://translate-dev.freebsd.org/[Weblate]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:339
+msgid ""
+"Force Weblate to commit the changes on `Document/Manage/Commit` section."
+msgstr ""
+"Force o Weblate a realizar o commit das alterações na aba `Document/Manage/"
+"Commit`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:340
+msgid ""
+"Sync the local Weblate repository `freebsd-doc-translate` with a `git pull "
+"origin main` command."
+msgstr ""
+"Sincronize o repositório Weblate local `freebsd-doc-translate` com o comando "
+"`git pull origin main`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:341
+msgid "Copy the translation again to `freebsd-doc`."
+msgstr "Copie a tradução novamente para `freebsd-doc`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:342
+msgid ""
+"Convert the translation to .adoc with the `./tools/translate.sh` script."
+msgstr "Converta a tradução para .adoc com o script `./tools/translate.sh`."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:343
+msgid ""
+"Hugo will rebuild the file and not build the entire set if `make run` was "
+"used; or re-execute `make`."
+msgstr ""
+"Hugo irá recompilar o arquivo e não todo o conjunto se `make run` foi "
+"utilizado; ou execute novamente o `make`."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:347
+msgid ""
+"Follow the previous steps as many times as is necessary until the document "
+"is ready to be published."
+msgstr ""
+"Siga os passos anteriores quantas vezes forem necessárias até que o "
+"documento esteja pronto para ser publicado."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:350
+msgid ""
+"The crossref:doc-build[doc-build-rendering,Documentation Build Process] "
+"chapter includes information about rendering to HTML and PDF."
+msgstr ""
+"O capítulo crossref:doc-build[doc-build-rendering,Processo de Compilação da "
+"Documentação] inclui informações sobre a renderização para HTML e PDF."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:352
+#, no-wrap
+msgid "Submitting Translations"
+msgstr "Enviando Traduções"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:355
+msgid ""
+"Example of submitting an update to the Brazilian Portuguese article "
+"Committer's Guide."
+msgstr ""
+"Exemplo de envio de atualização do artigo Committer's Guide em Português do "
+"Brasil."
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:361
+#, no-wrap
+msgid "Check the repository"
+msgstr "Verifique o repositório"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:365
+msgid ""
+"After following the steps in crossref:weblate[weblate-building,Building the "
+"Translated Document], go to the root of `freebsd-doc` and preview what's to "
+"be committed. For an overview of files to be changed, and differences in "
+"file content:"
+msgstr ""
+"Depois de seguir os passos em crossref:weblate[weblate-building,Compilando o "
+"Documento Traduzido], vá para a raiz do `freebsd-doc` e visualize o que deve "
+"ser submetido. Para obter uma visão geral dos arquivos a serem alterados e "
+"das diferenças no conteúdo do arquivo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:370
+#, no-wrap
+msgid ""
+"% git status\n"
+"% git diff\n"
+msgstr ""
+"% git status\n"
+"% git diff\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:373
+msgid ""
+"Review the output, and if any files unrelated to the Committer's Guide "
+"translation update were changed or added, take the appropriate action of "
+"reverting or removing them, respectively, before proceeding further."
+msgstr ""
+"Revise a saída e, se algum arquivo não relacionado à atualização da tradução "
+"do Committer's Guide foi alterado ou adicionado, tome a ação apropriada de "
+"revertê-lo ou removê-lo, respectivamente, antes de continuar."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:375
+msgid ""
+"Always include the PO gettext file (`.po`) and the translated document in "
+"Hugo/Asciidoctor (`.adoc`)."
+msgstr ""
+"Sempre inclua o arquivo PO gettext (`.po`) e o documento traduzido em Hugo/"
+"Asciidoctor (`.adoc`)."
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:381
+#, no-wrap
+msgid "Create a new branch and commit"
+msgstr "Crie uma nova branch e faça o commit"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:384
+msgid ""
+"Create another branch to separate the work, which will help with future "
+"updates in the local repository."
+msgstr ""
+"Crie outra branch para separar o trabalho, o que ajudará em futuras "
+"atualizações no repositório local."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:388
+#, no-wrap
+msgid "% git checkout -b committers-guide_pt-br\n"
+msgstr "% git checkout -b committers-guide_pt-br\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:391
+msgid "Register the local commit."
+msgstr "Registre o commit local."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:396
+#, no-wrap
+msgid ""
+"% git add .\n"
+"% git commit\n"
+msgstr ""
+"% git add .\n"
+"% git commit\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:399
+msgid "Example of commit messages for translations:"
+msgstr "Exemplo de mensagens de commit para traduções:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:403
+#, no-wrap
+msgid "pt-br/committers-guide: Sync with en XXXXXXX\n"
+msgstr "pt-br/committers-guide: Sincronizar com en XXXXXXX\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:406
+msgid ""
+"Where `XXXXXXX` is the man:git[1] revision stored in the Weblate repository "
+"[.filename]#~/freebsd-doc-translate/revision.txt#."
+msgstr ""
+"Onde `XXXXXXX` é a revisão man:git[1] armazenada no repositório Weblate [."
+"filename]#~/freebsd-doc-translate/revision.txt#."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:408
+msgid "If it is the first translation of an article:"
+msgstr "Se for a primeira tradução de um artigo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:412
+#, no-wrap
+msgid "Add Korean translation of Leap Seconds article\n"
+msgstr "Adicionar tradução Coreana do artigo Leap Seconds\n"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:417
+msgid ""
+"A message will be displayed after the commit if man:git[1] has not been "
+"configured previously. Please follow the instructions and provide the name "
+"and email address used on Weblate. This step is crucial to proper crediting "
+"of contributors."
+msgstr ""
+"Uma mensagem será exibida após o commit se o man:git[1] não tiver sido "
+"configurado anteriormente. Siga as instruções e forneça o nome e o endereço "
+"de e-mail usado no Weblate. Esta etapa é crucial para creditar o trabalho "
+"dos contribuidores."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:419
+msgid ""
+"Then check the entire commit, review changes, and author name and email."
+msgstr ""
+"Em seguida, verifique todo o commit, revise as alterações e o nome e e-mail "
+"do autor."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:423
+#, no-wrap
+msgid "% git show\n"
+msgstr "% git show\n"
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:430
+#, no-wrap
+msgid "Generate a patch"
+msgstr "Gerar um patch"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:433
+msgid "Next, generate a man:git-format-patch[1] file."
+msgstr "Em seguida, gere um arquivo man:git-format-patch[1]."
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:438
+#, no-wrap
+msgid ""
+"% git format-patch main\n"
+"0001-pt-br-committers-guide-Sync-with-en-XXXXXXX.patch\n"
+msgstr ""
+"% git format-patch main\n"
+"0001-pt-br-committers-guide-Sync-with-en-XXXXXXX.patch\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:442
+msgid ""
+"Attach the patch [.filename]#0001-pt-br-committers-guide-Sync-with-en-"
+"XXXXXXX.patch# to a problem report in https://bugs.freebsd.org/bugzilla/"
+"[FreeBSD Bugzilla]."
+msgstr ""
+"Anexe o patch [.filename]#0001-pt-br-committers-guide-Sync-with-en-XXXXXXX."
+"patch# a um relatório de problema no https://bugs.freebsd.org/bugzilla/"
+"[Bugzilla do FreeBSD]."
+
+#. type: delimited block = 4
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:444
+msgid "Include the following information in the report:"
+msgstr "Inclua as seguintes informações no relatório:"
+
+#. type: Block title
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:446
+#, no-wrap
+msgid "Bugzilla Fields"
+msgstr "Campos do Bugzilla"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:450
+#, no-wrap
+msgid "Field"
+msgstr "Campo"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:452
+#, no-wrap
+msgid "Value"
+msgstr "Valor"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:453
+#, no-wrap
+msgid "*product*"
+msgstr "*produto*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:455
+#, no-wrap
+msgid "Documentation"
+msgstr "Documentação"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:456
+#, no-wrap
+msgid "*Component*"
+msgstr "*Componente*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:458
+#, no-wrap
+msgid "Books & Articles"
+msgstr "Artigos e Livros"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:459
+#, no-wrap
+msgid "*Summary*"
+msgstr "*Resumo*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:461
+#, no-wrap
+msgid "Same as the local commit"
+msgstr "O mesmo que o commit local"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:462
+#, no-wrap
+msgid "*Description*"
+msgstr "*Descrição*"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:466
+#, no-wrap
+msgid ""
+"State that instructions in this guide were followed, including proofreading and other necessary steps.\n"
+"Include things that may help with triage and progression of the report."
+msgstr ""
+"Declare que as instruções deste guia foram seguidas, incluindo revisão e outras etapas necessárias.\n"
+"Inclua informações que podem ajudar na triagem e no progresso do relatório."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:467
+#, no-wrap
+msgid "*CC* (Optional)"
+msgstr "*CC* (Opcional)"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:468
+#, no-wrap
+msgid "If the language has coordinators, include their email addresses in the CC field."
+msgstr "Se o idioma tiver coordenadores, inclua seus endereços de e-mail no campo CC."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:471
+msgid ""
+"For people familiar with man:git[1] and GitHub: instead of submitting the "
+"patch through https://bugs.freebsd.org/bugzilla/[Bugzilla], a https://github."
+"com/freebsd/freebsd-doc/pulls[GitHub pull request] can be used (use the name "
+"and address that you use with Weblate)."
+msgstr ""
+"Para pessoas familiarizadas com man:git[1] e GitHub: em vez de enviar o "
+"patch através do https://bugs.freebsd.org/bugzilla/[Bugzilla], um https://"
+"github.com/freebsd/freebsd-doc/pulls[pull request do GitHub] pode ser usado "
+"(use o nome e o endereço de e-mail utilizado no Weblate)."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:474
+msgid ""
+"https://github.com/freebsd/freebsd-doc/ is a secondary mirror. Changes to "
+"the `doc` tree can be made only by people who have a `doc` commit bit."
+msgstr ""
+"https://github.com/freebsd/freebsd-doc/ é um espelho secundário. Alterações "
+"na árvore `doc` podem ser feitas apenas por pessoas que possuem um `doc` "
+"commit bit."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:476
+msgid ""
+"When translators keep sending good-quality patches, they can be nominated by "
+"other committers to receive write-access (a extref:{committers-guide}[doc "
+"commit bit, committer.types] for translations), a FreeBSD account, and "
+"associated perks."
+msgstr ""
+"Quando os tradutores continuam enviando patches de boa qualidade, eles podem "
+"ser nomeados por outros committers para receber acesso de escrita (um extref:"
+"{committers-guide}[doc commit bit, committer.types] para traduções), uma "
+"conta FreeBSD e todas as vantagens associadas."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:478
+msgid ""
+"The list of extref:{contributors}[Additional FreeBSD Contributors, contrib-"
+"additional] includes non-committers whose contributions are committed to the "
+"`doc` tree."
+msgstr ""
+"A lista de extref:{contributors}[Contribuidores Adicionais do FreeBSD, "
+"contrib-additional] inclui não-committers cujas contribuições são submetidas "
+"à árvore `doc`."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:480
+msgid "If in doubt about any procedure, write to the {freebsd-translators}."
+msgstr ""
+"Em caso de dúvida sobre algum procedimento, escreva para a {freebsd-"
+"translators}."
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:482
+#, no-wrap
+msgid "FAQ (Frequently Asked Questions)"
+msgstr "FAQ (Perguntas Frequentes)"
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:485
+#, no-wrap
+msgid "Is it necessary to translate all the Copyright messages?"
+msgstr "É necessário traduzir todas as mensagens de Copyright?"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/weblate/_index.adoc:487
+msgid ""
+"Every language team decides this for their language; in `pt-br` (Brazilian "
+"Portuguese) team, it was decided not to translate those messages."
+msgstr ""
+"Cada equipe de idiomas decide isso para o seu próprio idioma; na equipe `pt-"
+"br` (Português do Brasil), foi decidido não traduzir essas mensagens."
diff --git a/documentation/content/pt-br/books/fdp-primer/working-copy/_index.adoc b/documentation/content/pt-br/books/fdp-primer/working-copy/_index.adoc
index ab96e96379..3cd386a94e 100644
--- a/documentation/content/pt-br/books/fdp-primer/working-copy/_index.adoc
+++ b/documentation/content/pt-br/books/fdp-primer/working-copy/_index.adoc
@@ -1,7 +1,7 @@
---
description: 'Como obter uma cópia de trabalho do Projeto de Documentação do FreeBSD'
next: books/fdp-primer/structure
-path: /books/fdp-primer/
+path: "/books/fdp-primer/working-copy/"
prev: books/fdp-primer/tools
showBookMenu: 'true'
tags: ["working copy", "documentation", "manual pages", "git"]
@@ -51,7 +51,7 @@ A _área de trabalho_ é uma cópia da árvore de documentação do repositório
Uma cópia completa da árvore de documentação pode ocupar 700 megabytes de espaço em disco. Tenha um gigabyte de espaço total para ter sobra para arquivos temporários e versões de teste dos diversos formatos de saída.
-O link:https://git-scm.com/[Git] é utilizado para gerenciar os arquivos de documentação do FreeBSD. Ele é obtido pela instalação do pacote Git:
+O link:https://git-scm.com/[Git] é utilizado para gerenciar os arquivos de documentação do FreeBSD. Ele é obtido pela instalação do pacote package:devel/git[], e também por uma versão mais leve chamado git-lite:
[source, shell]
....
diff --git a/documentation/content/pt-br/books/fdp-primer/working-copy/_index.po b/documentation/content/pt-br/books/fdp-primer/working-copy/_index.po
index 1eb4fc144c..be64f21724 100644
--- a/documentation/content/pt-br/books/fdp-primer/working-copy/_index.po
+++ b/documentation/content/pt-br/books/fdp-primer/working-copy/_index.po
@@ -2,12 +2,13 @@
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2022-02-01 09:20-0300\n"
-"PO-Revision-Date: 2021-11-05 11:08+0000\n"
-"Last-Translator: Danilo G. Baio <dbaio@FreeBSD.org>\n"
+"POT-Creation-Date: 2023-05-21 14:43-0300\n"
+"PO-Revision-Date: 2023-05-21 19:20+0000\n"
+"Last-Translator: \"Danilo G. Baio\" <dbaio@FreeBSD.org>\n"
"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
"projects/documentation/booksfdp-primerworking-copy_index/pt_BR/>\n"
"Language: pt_BR\n"
@@ -15,7 +16,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.1\n"
+"X-Generator: Weblate 4.17\n"
#. type: YAML Front Matter: description
#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:1
@@ -63,10 +64,12 @@ msgstr ""
#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:58
msgid ""
"link:https://git-scm.com/[Git] is used to manage the FreeBSD documentation "
-"files. It is obtained by installing the Git package:"
+"files. It is obtained by installing the package:devel/git[] package, which "
+"also has a lighter flavor called git-lite:"
msgstr ""
"O link:https://git-scm.com/[Git] é utilizado para gerenciar os arquivos de "
-"documentação do FreeBSD. Ele é obtido pela instalação do pacote Git:"
+"documentação do FreeBSD. Ele é obtido pela instalação do pacote package:"
+"devel/git[], e também por uma versão mais leve chamado git-lite:"
#. type: delimited block . 4
#: documentation/content/en/books/fdp-primer/working-copy/_index.adoc:62
diff --git a/documentation/content/pt-br/books/fdp-primer/writing-style/_index.adoc b/documentation/content/pt-br/books/fdp-primer/writing-style/_index.adoc
index 23fbb87ecc..1e49356767 100644
--- a/documentation/content/pt-br/books/fdp-primer/writing-style/_index.adoc
+++ b/documentation/content/pt-br/books/fdp-primer/writing-style/_index.adoc
@@ -1,11 +1,11 @@
---
description: 'Estilo de Escrita e algumas convenções usadas no Projeto de Documentação do FreeBSD'
next: books/fdp-primer/editor-config
-path: /books/fdp-primer/
+path: "/books/fdp-primer/writing-style/"
prev: books/fdp-primer/manual-pages
showBookMenu: 'true'
-tags: ["writing", "style", "tipos", "one sentence per line"]
-title: 'Capítulo 11. Estilo de Escrita'
+tags: ["writing", "style", "typos", "one sentence per line"]
+title: 'Capítulo 12. Estilo de Escrita'
weight: 12
---
@@ -17,7 +17,7 @@ weight: 12
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 11
+:sectnumoffset: 12
:partnums:
:source-highlighter: rouge
:experimental:
@@ -50,7 +50,7 @@ endif::[]
[[writing-style-tips]]
== Dicas
-A documentação técnica pode ser melhorada pelo uso consistente de vários princípios. A maioria destes pode ser classificada em três objetivos: _ser claro_, _ser completo_ e _ser conciso_. Essas metas podem entrar em conflito umas com as outras. Uma boa escrita consiste em um equilíbrio entre eles.
+A documentação técnica pode ser melhorada pelo uso consistente de vários princípios. A maioria destes pode ser classificada em três objetivos: _ser claro_, _ser completo_ e _ser conciso_. Essas metas podem entrar em conflito umas com as outras. Uma boa escrita consiste em um equilíbrio entre elas.
[[writing-style-be-clear]]
=== Seja claro
@@ -89,7 +89,7 @@ Existem várias variantes do Inglês, com grafias diferentes para a mesma palavr
+
[NOTE]
====
-O uso do Inglês Britânico pode ser aceito no caso de um artigo contribuído, no entanto, a ortografia deve ser consistente em todo o documento. Os outros documentos, como livros, site, páginas de manual, etc., terão que usar o Inglês Americano.
+O uso do Inglês Britânico pode ser aceito no caso de um artigo contribuído, no entanto, a ortografia deve ser consistente em todo o documento. Os outros documentos, como livros, site, páginas de manual, etc, devem usar o Inglês Americano.
====
Não use contrações::
@@ -124,13 +124,13 @@ Errado: ... no nome do arquivo [.filename]#/etc/rc.local#...
+
Correto: ... no [.filename]#/etc/rc.local#...
+
-Referências de páginas de manual (o segundo exemplo usa `citerefentry` com a entidade man:csh[1]):.
+Referências de páginas de manual (o segundo exemplo usa `man:[]` com a entidade man:csh[1]):
+
Errado: veja `man csh` para mais informações.
+
Certo: Veja man:csh[1].
-Para mais informações sobre o estilo de escrita, consulte http://www.bartleby.com/141/[Elements of Style], de William Strunk.
+Para mais informações sobre o estilo de escrita, consulte http://www.bartleby.com/141/[Elements of Style] de William Strunk.
[[writing-style-guide]]
== Guia de estilo
@@ -156,7 +156,7 @@ They are endowed with reason and conscience and should act towards one another i
....
[[writing-style-acronyms]]
-=== Siglas
+== Siglas
As siglas devem ser definidas na primeira vez que aparecerem em um documento, como em: "Network Time Protocol (NTP)". Depois que o acrônimo tiver sido definido, use apenas a sigla, a menos que faça mais sentido contextualmente usar todo o termo. Siglas geralmente são definidos apenas uma vez por capítulo ou por documento.
@@ -212,3 +212,114 @@ Esta lista de caracteres especiais mostra a sintaxe correta e a saída quando us
| <=
|===
+
+[[writing-style-linting-vale]]
+== Linting com Vale
+
+Para manter clareza e consistência em toda a documentação e páginas do site, estilos link:https://vale.sh[Vale] foram introduzidos na árvore de documentação. link:https://vale.sh[Vale] é um linter poderoso para escrever regras personalizadas e pode ser usado em vários cenários. Atualmente o link:https://vale.sh[Vale] pode ser usado como uma ferramenta de linha de comando, para pipelines de CI/CD e integrado a um editor de texto de sua escolha.
+
+A tabela a seguir descreve os nomes das regras atuais e as suas respectivas severidade.
+
+[.informaltable]
+[cols="1,1", frame="none", options="header"]
+|===
+| Nome
+| Severidade
+
+| FreeBSD.BrandTerms
+| erro
+
+| FreeBSD.ConsciousLanguage
+| aviso
+
+| FreeBSD.Contractions
+| sugestão
+
+| FreeBSD.EOLSpacing
+| aviso
+
+| FreeBSD.Hang
+| aviso
+
+| FreeBSD.Hyphens
+| aviso
+
+| FreeBSD.Spacing
+| erro
+
+| FreeBSD.SuperfluousOptArgInLinks
+| sugestão
+
+| Vale.Avoid
+| erro
+
+| Vale.Repetition
+| erro
+
+| Vale.Spelling
+| erro
+
+| Vale.Terms
+| erro
+
+|===
+
+[[writing-style-linting-vale-rules]]
+=== Regras Atuais do Vale
+
+. FreeBSD.BrandTerms: De acordo com as regras de direitos autorais da Fundação FreeBSD, *freebsd* deve ser escrito como *FreeBSD*. Da mesma forma, todos os principais fornecedores e empresas têm regras específicas sobre como escrever seus nomes de marcas e marcas registradas. Deve-se tomar cuidado para respeitar o valor da marca de outras pessoas e reservar um tempo para escrever PostgreSQL, Node.js, Let's Encrypt, etc. Nomes de marcas ausentes devem ser adicionados ao [.filename]#.vale/styles/FreeBSD/BrandTerms.yml# no repositório `doc`.
+
+. FreeBSD.ConsciousLanguage: Esta regra propõe o uso de linguagem consciente para que palavras sensíveis apontando para a cor, idade, raça ou orientação sexual das pessoas sejam evitadas sempre que possível.
+
+. FreeBSD.Contractions: Palavras contraídas não devem ser usadas. Esta regra evita todas as contrações e sugere palavras completas.
+
+. FreeBSD.EOLSpacing: Na maioria dos documentos, espaços presentes no fim da linha (EOL) não são desejáveis.
+
+. FreeBSD.Hang: `Hang` é frequentemente usado para significar de que o aplicativo parou de responder. Esta norma propõe melhor redação.
+
+. FreeBSD.Hyphens: Muitas vezes advérbios que terminam com 'ly' são adicionados com um hífen, o que está errado.
+
+. FreeBSD.Spacing: Muitas vezes, os espaços duplos são difíceis de captar a olho nu e isso é abordado aqui.
+
+. FreeBSD.SuperfluousOptArgInLinks: Sugere colchetes vazios nas macros `link:` quando o texto exibido coincide com a URL.
+
+. Vale.Avoid: Impõe os termos de vocabulário *NÃO USE* para o Projeto FreeBSD. Se for encontrada alguma palavra que não deva estar na documentação, a palavra deve ser adicionada a [.filename]#.vale/styles/Vocab/Terms/reject.txt# no repositório `doc`. A lista está vazia no momento.
+
+. Vale.Repetition: Muitas vezes, as mesmas palavras são digitadas duas vezes ao sair do teclado e voltar ao trabalho novamente. Esta regra encontra palavras repetidas e avisa os usuários.
+
+. Vale.Spelling: No momento, há uma mistura de grafias en_US e en_GB na documentação e no site. Vale vem com um dicionário embutido do qual usa estritamente en_US e não aceita a variante en_GB de nenhuma palavra.
+
+. Vale.Terms: Aplica os termos de vocabulário *PREFERIDO* para o Projeto FreeBSD. No momento, a lista de termos está vazia e os termos específicos do FreeBSD serão adicionados gradualmente. Se alguma palavra estiver correta e não disponível no dicionário, a palavra deve ser adicionada ao [.filename]#.vale/styles/Vocab/Terms/accept.txt# no repositório `doc`.
+
+Mais regras serão introduzidas nos próximos dias, quando e onde for necessário.
+
+[[writing-style-using-vale]]
+=== Utilizando o Vale
+
+O link:https://vale.sh[Vale] pode ser usado em linha de comando e em um editor de texto ou IDE. package:textproc/vale[] pode ser instalado da seguinte forma:
+
+[source, shell]
+....
+$ pkg install vale
+....
+
+[[writing-style-using-vale-commandline]]
+==== Usando o Vale na linha de comando
+
+Assumindo que o repositório `doc` foi clonado em [.filename]#~/doc# os seguintes comandos são necessários para executar:
+
+[source, shell]
+....
+% cd ~/doc
+% vale .
+....
+
+[NOTE]
+======
+O link:https://vale.sh[Vale] é um programa intensivo de CPU e memória devido à natureza do aplicativo e pode demorar um pouco para mostrar qualquer saída na tela. Uma melhor maneira de executar o aplicativo é em diretórios ou arquivos específicos, em vez de todo o repositório `doc`, pois isso já é feito na pipeline de CI.
+======
+
+[[writing-style-using-vale-editors]]
+==== Usando Vale em editores
+
+O link:https://vale.sh[Vale] funciona com os principais editores tradicionais como o package:editors/vim[], package:editors/emacs[], package:editors/vscode[]. No momento a configuração necessária para o package:editors/vim[] estão descritas em rossref:editor-config[editor-config-vim, Vim]. As configuração para o package:editors/emacs[] está sendo desenvolvida.
diff --git a/documentation/content/pt-br/books/fdp-primer/writing-style/_index.po b/documentation/content/pt-br/books/fdp-primer/writing-style/_index.po
index 02b9ae8377..4bed84d021 100644
--- a/documentation/content/pt-br/books/fdp-primer/writing-style/_index.po
+++ b/documentation/content/pt-br/books/fdp-primer/writing-style/_index.po
@@ -1,13 +1,15 @@
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
-# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2022.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2022, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2022-02-01 10:28-0300\n"
-"PO-Revision-Date: 2022-02-06 18:42+0000\n"
-"Last-Translator: Danilo G. Baio <dbaio@FreeBSD.org>\n"
+"POT-Creation-Date: 2023-07-15 16:42-0300\n"
+"PO-Revision-Date: 2023-07-17 02:13+0000\n"
+"Last-Translator: \"Danilo G. Baio\" <dbaio@FreeBSD.org>\n"
"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
"projects/documentation/booksfdp-primerwriting-style_index/pt_BR/>\n"
"Language: pt_BR\n"
@@ -15,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.10.1\n"
+"X-Generator: Weblate 4.17\n"
#. type: YAML Front Matter: description
#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:1
@@ -26,8 +28,8 @@ msgstr "Estilo de Escrita e algumas convenções usadas no Projeto de Documenta
#. type: YAML Front Matter: title
#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:1
#, no-wrap
-msgid "Chapter 11. Writing Style"
-msgstr "Capítulo 11. Estilo de Escrita"
+msgid "Chapter 12. Writing Style"
+msgstr "Capítulo 12. Estilo de Escrita"
#. type: Title =
#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:13
@@ -42,26 +44,26 @@ msgid "Tips"
msgstr "Dicas"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:56
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:57
msgid ""
"Technical documentation can be improved by consistent use of several "
"principles. Most of these can be classified into three goals: _be clear_, "
-"_be complete_, and _be concise_. These goals can conflict with each other. "
+"_be complete_, and _be concise_. These goals can conflict with each other. "
"Good writing consists of a balance between them."
msgstr ""
"A documentação técnica pode ser melhorada pelo uso consistente de vários "
"princípios. A maioria destes pode ser classificada em três objetivos: _ser "
"claro_, _ser completo_ e _ser conciso_. Essas metas podem entrar em conflito "
-"umas com as outras. Uma boa escrita consiste em um equilíbrio entre eles."
+"umas com as outras. Uma boa escrita consiste em um equilíbrio entre elas."
#. type: Title ===
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:58
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:59
#, no-wrap
msgid "Be Clear"
msgstr "Seja claro"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:63
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:64
msgid ""
"Clarity is extremely important. The reader may be a novice, or reading the "
"document in a second language. Strive for simple, uncomplicated text that "
@@ -72,7 +74,7 @@ msgstr ""
"descomplicado que explique claramente os conceitos."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:67
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:68
msgid ""
"Avoid flowery or embellished speech, jokes, or colloquial expressions. "
"Write as simply and clearly as possible. Simple text is easier to "
@@ -83,7 +85,7 @@ msgstr ""
"fácil de se entender e de se traduzir."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:72
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:73
msgid ""
"Keep explanations as short, simple, and clear as possible. Avoid empty "
"phrases like \"in order to\", which usually just means \"to\". Avoid "
@@ -98,7 +100,7 @@ msgstr ""
"desconhecidos fora de grupos acadêmicos ou científicos."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:76
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:77
msgid ""
"Write in a formal style. Avoid addressing the reader as \"you\". For "
"example, say \"copy the file to [.filename]#/tmp#\" rather than \"you can "
@@ -171,7 +173,7 @@ msgid "Be Concise"
msgstr "Seja conciso"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:107
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:104
msgid ""
"While features should be documented completely, sometimes there is so much "
"information that the reader cannot easily find the specific detail needed. "
@@ -188,13 +190,13 @@ msgstr ""
"uma seção de referência aprofundada."
#. type: Title ==
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:109
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:106
#, no-wrap
msgid "Guidelines"
msgstr "Diretrizes"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:113
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:109
msgid ""
"To promote consistency between the myriad authors of the FreeBSD "
"documentation, some guidelines have been drawn up for authors to follow."
@@ -203,13 +205,13 @@ msgstr ""
"FreeBSD, algumas diretrizes foram elaboradas para os autores seguirem."
#. type: Labeled list
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:114
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:110
#, no-wrap
msgid "Use American English Spelling"
msgstr "Use a Ortografia do Inglês Americano"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:118
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:114
msgid ""
"There are several variants of English, with different spellings for the same "
"word. Where spellings differ, use the American English variant. \"color\", "
@@ -220,26 +222,26 @@ msgstr ""
"\", não \"colour\", \"rationalize\", não \"rationalise\", e assim por diante."
#. type: delimited block = 4
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:124
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:119
msgid ""
"The use of British English may be accepted in the case of a contributed "
"article, however the spelling must be consistent within the whole document. "
-"The other documents such as books, web site, manual pages, etc. will have to "
-"use American English."
+"The other documents such as books, web site, manual pages, etc. must use "
+"American English."
msgstr ""
"O uso do Inglês Britânico pode ser aceito no caso de um artigo contribuído, "
"no entanto, a ortografia deve ser consistente em todo o documento. Os outros "
-"documentos, como livros, site, páginas de manual, etc., terão que usar o "
-"Inglês Americano."
+"documentos, como livros, site, páginas de manual, etc, devem usar o Inglês "
+"Americano."
#. type: Labeled list
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:126
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:121
#, no-wrap
msgid "Do not use contractions"
msgstr "Não use contrações"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:130
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:125
msgid ""
"Do not use contractions. Always spell the phrase out in full. \"Don't use "
"contractions\" is wrong."
@@ -248,7 +250,7 @@ msgstr ""
"correta, \"Don't\" é a errada."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:132
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:127
msgid ""
"Avoiding contractions makes for a more formal tone, is more precise, and is "
"slightly easier for translators."
@@ -257,13 +259,13 @@ msgstr ""
"pouco mais fácil para os tradutores."
#. type: Labeled list
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:133
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:128
#, no-wrap
msgid "Use the serial comma"
msgstr "Use a vírgula serial"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:136
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:131
msgid ""
"In a list of items within a paragraph, separate each item from the others "
"with a comma. Separate the last item from the others with a comma and the "
@@ -274,17 +276,17 @@ msgstr ""
"\"e\"."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:138
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:133
msgid "For example:"
msgstr "Por exemplo:"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:140
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:135
msgid "This is a list of one, two and three items."
msgstr "Esta é uma lista de um, dois e três itens."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:142
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:137
msgid ""
"Is this a list of three items, \"one\", \"two\", and \"three\", or a list of "
"two items, \"one\" and \"two and three\"?"
@@ -293,23 +295,23 @@ msgstr ""
"de dois itens, \"um\" e \"dois\" e \"três\"?"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:144
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:139
msgid "It is better to be explicit and include a serial comma:"
msgstr "É melhor ser explícito e incluir uma vírgula serial:"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:146
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:141
msgid "This is a list of one, two, and three items."
msgstr "Esta é uma lista de um, dois, e três itens."
#. type: Labeled list
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:146
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:141
#, no-wrap
msgid "Avoid redundant phrases"
msgstr "Evite frases redundantes"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:149
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:144
msgid ""
"Do not use redundant phrases. In particular, \"the command\", \"the file\", "
"and \"man command\" are often redundant."
@@ -318,71 +320,71 @@ msgstr ""
"\"man command\" são frequentemente redundantes."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:151
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:146
msgid "For example, commands:"
msgstr "Por exemplo, comandos:"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:153
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:148
msgid "Wrong: Use the `git` command to update sources."
msgstr "Errado: Use o comando `git` para atualizar o código fonte."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:155
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:150
msgid "Right: Use `git` to update sources."
msgstr "Correto: Use o `git` para atualizar o código fonte."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:157
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:152
msgid "Filenames:"
msgstr "Nomes de arquivo:"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:159
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:154
msgid "Wrong: ... in the filename [.filename]#/etc/rc.local#..."
msgstr "Errado: ... no nome do arquivo [.filename]#/etc/rc.local#..."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:161
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:156
msgid "Right: ... in [.filename]#/etc/rc.local#..."
msgstr "Correto: ... no [.filename]#/etc/rc.local#..."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:163
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:158
msgid ""
-"Manual page references (the second example uses `citerefentry` with the man:"
-"csh[1] entity):."
+"Manual page references (the second example uses `man:[]` with the man:csh[1] "
+"entity):"
msgstr ""
-"Referências de páginas de manual (o segundo exemplo usa `citerefentry` com a "
-"entidade man:csh[1]):."
+"Referências de páginas de manual (o segundo exemplo usa `man:[]` com a "
+"entidade man:csh[1]):"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:165
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:160
msgid "Wrong: See `man csh` for more information."
msgstr "Errado: veja `man csh` para mais informações."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:167
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:162
msgid "Right: See man:csh[1]."
msgstr "Certo: Veja man:csh[1]."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:169
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:164
msgid ""
"For more information about writing style, see http://www.bartleby.com/141/"
-"[Elements of Style], by William Strunk."
+"[Elements of Style] by William Strunk."
msgstr ""
"Para mais informações sobre o estilo de escrita, consulte http://www."
-"bartleby.com/141/[Elements of Style], de William Strunk."
+"bartleby.com/141/[Elements of Style] de William Strunk."
#. type: Title ==
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:171
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:166
#, no-wrap
msgid "Style Guide"
msgstr "Guia de estilo"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:174
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:169
msgid ""
"To keep the source for the documentation consistent when many different "
"people are editing it, please follow these style conventions."
@@ -391,13 +393,13 @@ msgstr ""
"diferentes a estiverem editando, siga estas convenções de estilo."
#. type: Title ==
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:176
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:171
#, no-wrap
msgid "One sentence per line"
msgstr "Uma frase por linha"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:181
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:176
msgid ""
"Use Semantic Line Breaks in the documentation, a technique called \"one "
"sentence per line\". The idea of this technique is to help the users to "
@@ -410,23 +412,23 @@ msgstr ""
"página link:https://sembr.org/[Semantic Line Breaks]."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:183
-msgid "This is an example which don't use \"one sentence per line\"."
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:178
+msgid "This is an example which does not use \"one sentence per line\"."
msgstr "Este é um exemplo que não usa \"uma frase por linha\"."
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:186
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:181
#, no-wrap
msgid "All human beings are born free and equal in dignity and rights. They are endowed with reason and conscience and should act towards one another in a spirit of brotherhood.\n"
msgstr "All human beings are born free and equal in dignity and rights. They are endowed with reason and conscience and should act towards one another in a spirit of brotherhood.\n"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:189
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:184
msgid "And this is an example which uses the technique."
msgstr "E este é um exemplo que usa a técnica."
#. type: delimited block . 4
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:193
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:188
#, no-wrap
msgid ""
"All human beings are born free and equal in dignity and rights.\n"
@@ -435,14 +437,14 @@ msgstr ""
"All human beings are born free and equal in dignity and rights.\n"
"They are endowed with reason and conscience and should act towards one another in a spirit of brotherhood.\n"
-#. type: Title ===
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:196
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:191
#, no-wrap
msgid "Acronyms"
msgstr "Siglas"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:201
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:196
msgid ""
"Acronyms should be defined the first time they appear in a document, as in: "
"\"Network Time Protocol (NTP)\". After the acronym has been defined, use "
@@ -456,18 +458,18 @@ msgstr ""
"uma vez por capítulo ou por documento."
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:203
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:198
msgid "All acronyms should be enclosed using the ` character."
msgstr "Todas as siglas devem ser incluídas com o caractere `."
#. type: Title ==
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:205
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:200
#, no-wrap
msgid "Special Character List"
msgstr "Lista de Caracteres Especiais"
#. type: Plain text
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:209
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:204
msgid ""
"This list of special characters shows the correct syntax and the output when "
"used in FreeBSD documentation. If a character is not on this list, ask "
@@ -478,184 +480,598 @@ msgstr ""
"pergunte sobre ele na {freebsd-doc}."
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:214
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:209
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:264
#, no-wrap
msgid "Name"
msgstr "Nome"
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:215
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:210
#, no-wrap
msgid "Syntax"
msgstr "Sintaxe"
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:218
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:213
#, no-wrap
msgid "Rendered"
msgstr "Renderizado"
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:219
-#, fuzzy, no-wrap
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:214
+#, no-wrap
msgid "Copyright"
msgstr "Copyright"
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:220
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:215
#, no-wrap
msgid "+(C)+"
-msgstr ""
+msgstr "+(C)+"
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:222
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:217
#, no-wrap
msgid "(C)"
-msgstr ""
+msgstr "(C)"
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:223
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:218
#, no-wrap
msgid "Registered"
msgstr "Registrado"
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:224
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:219
#, no-wrap
msgid "+(R)+"
-msgstr ""
+msgstr "+(R)+"
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:226
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:221
#, no-wrap
msgid "(R)"
-msgstr ""
+msgstr "(R)"
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:227
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:222
#, no-wrap
msgid "Trademark"
msgstr "Marca Comercial"
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:228
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:223
#, no-wrap
msgid "+(TM)+"
-msgstr ""
+msgstr "+(TM)+"
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:230
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:225
#, no-wrap
msgid "(TM)"
-msgstr ""
+msgstr "(TM)"
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:231
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:226
#, no-wrap
msgid "Em dash"
msgstr "Travessão"
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:232
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:227
#, no-wrap
msgid "+--+"
-msgstr ""
+msgstr "+--+"
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:234
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:229
#, no-wrap
msgid "--"
-msgstr ""
+msgstr "--"
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:235
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:230
#, no-wrap
msgid "Ellipses"
msgstr "Elipses"
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:236
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:231
#, no-wrap
msgid "+...+"
-msgstr ""
+msgstr "+...+"
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:238
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:233
#, no-wrap
msgid "..."
-msgstr ""
+msgstr "..."
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:239
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:234
#, no-wrap
msgid "Single right arrow"
msgstr "Seta simples para a direita"
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:240
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:235
#, no-wrap
msgid "+->+"
-msgstr ""
+msgstr "+->+"
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:242
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:237
#, no-wrap
msgid "->"
-msgstr ""
+msgstr "->"
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:243
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:238
#, no-wrap
msgid "Double right arrow"
msgstr "Seta dupla para a direita"
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:244
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:239
#, no-wrap
msgid "+=>+"
-msgstr ""
+msgstr "+=>+"
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:246
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:241
#, no-wrap
msgid "=>"
-msgstr ""
+msgstr "=>"
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:247
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:242
#, no-wrap
msgid "Single left arrow"
msgstr "Seta simples para a esquerda"
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:248
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:243
#, no-wrap
msgid "+<-+"
-msgstr ""
+msgstr "+<-+"
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:250
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:245
#, no-wrap
msgid "<-"
-msgstr ""
+msgstr "<-"
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:251
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:246
#, no-wrap
msgid "Double left arrow"
msgstr "Seta dupla para a esquerda"
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:252
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:247
#, no-wrap
msgid "+<=+"
-msgstr ""
+msgstr "+<=+"
#. type: Table
-#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:254
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:249
#, no-wrap
msgid "<="
+msgstr "<="
+
+#. type: Title ==
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:252
+#, no-wrap
+msgid "Linting with Vale"
+msgstr "Linting com Vale"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:257
+msgid ""
+"To maintain clarity and consistency across all documentation and website "
+"pages, link:https://vale.sh[Vale] styles have been introduced in the "
+"documentation tree. link:https://vale.sh[Vale] is a powerful linter for "
+"writing customized rules and can be used in multiple scenarios. Currently "
+"link:https://vale.sh[Vale] can be used as a command line tool, for CI/CD "
+"pipelines, and integrated into an editor of choice."
+msgstr ""
+"Para manter clareza e consistência em toda a documentação e páginas do site, "
+"estilos link:https://vale.sh[Vale] foram introduzidos na árvore de "
+"documentação. link:https://vale.sh[Vale] é um linter poderoso para escrever "
+"regras personalizadas e pode ser usado em vários cenários. Atualmente o link:"
+"https://vale.sh[Vale] pode ser usado como uma ferramenta de linha de "
+"comando, para pipelines de CI/CD e integrado a um editor de texto de sua "
+"escolha."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:259
+msgid ""
+"The following table describes the current rule names and their respective "
+"severity."
msgstr ""
+"A tabela a seguir descreve os nomes das regras atuais e as suas respectivas "
+"severidade."
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:266
+#, no-wrap
+msgid "Severity"
+msgstr "Severidade"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:267
+#, no-wrap
+msgid "FreeBSD.BrandTerms"
+msgstr "FreeBSD.BrandTerms"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:269
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:287
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:293
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:296
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:299
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:302
+#, no-wrap
+msgid "error"
+msgstr "erro"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:270
+#, no-wrap
+msgid "FreeBSD.ConsciousLanguage"
+msgstr "FreeBSD.ConsciousLanguage"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:272
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:278
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:281
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:284
+#, no-wrap
+msgid "warning"
+msgstr "aviso"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:273
+#, no-wrap
+msgid "FreeBSD.Contractions"
+msgstr "FreeBSD.Contractions"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:275
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:290
+#, no-wrap
+msgid "suggestion"
+msgstr "sugestão"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:276
+#, no-wrap
+msgid "FreeBSD.EOLSpacing"
+msgstr "FreeBSD.EOLSpacing"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:279
+#, no-wrap
+msgid "FreeBSD.Hang"
+msgstr "FreeBSD.Hang"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:282
+#, no-wrap
+msgid "FreeBSD.Hyphens"
+msgstr "FreeBSD.Hyphens"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:285
+#, no-wrap
+msgid "FreeBSD.Spacing"
+msgstr "FreeBSD.Spacing"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:288
+#, no-wrap
+msgid "FreeBSD.SuperfluousOptArgInLinks"
+msgstr "FreeBSD.SuperfluousOptArgInLinks"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:291
+#, no-wrap
+msgid "Vale.Avoid"
+msgstr "Vale.Avoid"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:294
+#, no-wrap
+msgid "Vale.Repetition"
+msgstr "Vale.Repetition"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:297
+#, no-wrap
+msgid "Vale.Spelling"
+msgstr "Vale.Spelling"
+
+#. type: Table
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:300
+#, no-wrap
+msgid "Vale.Terms"
+msgstr "Vale.Terms"
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:305
+#, no-wrap
+msgid "Current Vale Rules"
+msgstr "Regras Atuais do Vale"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:311
+msgid ""
+"FreeBSD.BrandTerms: According to the copyright rules of The FreeBSD "
+"Foundation, *freebsd* should be written as *FreeBSD*. Similarly, every "
+"major vendor and company has specific rules on writing their brand names and "
+"trademarks. Care should be taken to be respectful to the brand value of "
+"others and to take time to write PostgreSQL, Node.js, Let's Encrypt etc. "
+"Missing brand names should be added to the [.filename]#.vale/styles/FreeBSD/"
+"BrandTerms.yml# in the `doc` repository."
+msgstr ""
+"FreeBSD.BrandTerms: De acordo com as regras de direitos autorais da Fundação "
+"FreeBSD, *freebsd* deve ser escrito como *FreeBSD*. Da mesma forma, todos os "
+"principais fornecedores e empresas têm regras específicas sobre como "
+"escrever seus nomes de marcas e marcas registradas. Deve-se tomar cuidado "
+"para respeitar o valor da marca de outras pessoas e reservar um tempo para "
+"escrever PostgreSQL, Node.js, Let's Encrypt, etc. Nomes de marcas ausentes "
+"devem ser adicionados ao [.filename]#.vale/styles/FreeBSD/BrandTerms.yml# no "
+"repositório `doc`."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:313
+msgid ""
+"FreeBSD.ConsciousLanguage: This rule proposes use of conscious language so "
+"that sensitive words pointing to the color, age, race, or sexual orientation "
+"of people are avoided where possible."
+msgstr ""
+"FreeBSD.ConsciousLanguage: Esta regra propõe o uso de linguagem consciente "
+"para que palavras sensíveis apontando para a cor, idade, raça ou orientação "
+"sexual das pessoas sejam evitadas sempre que possível."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:316
+msgid ""
+"FreeBSD.Contractions: Contracted words should not be used. This rule avoids "
+"all contractions and suggests full words."
+msgstr ""
+"FreeBSD.Contractions: Palavras contraídas não devem ser usadas. Esta regra "
+"evita todas as contrações e sugere palavras completas."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:318
+msgid ""
+"FreeBSD.EOLSpacing: In most of the documents EOL spacing is present which is "
+"not the desirable situation."
+msgstr ""
+"FreeBSD.EOLSpacing: Na maioria dos documentos, espaços presentes no fim da "
+"linha (EOL) não são desejáveis."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:321
+msgid ""
+"FreeBSD.Hang: `Hang` is often used to mean that the application has stopped "
+"responding. This rule proposes better wording."
+msgstr ""
+"FreeBSD.Hang: `Hang` é frequentemente usado para significar de que o "
+"aplicativo parou de responder. Esta norma propõe melhor redação."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:323
+msgid ""
+"FreeBSD.Hyphens: Often adverbs ending with 'ly' are added with a hyphen "
+"which is wrong."
+msgstr ""
+"FreeBSD.Hyphens: Muitas vezes advérbios que terminam com 'ly' são "
+"adicionados com um hífen, o que está errado."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:325
+msgid ""
+"FreeBSD.Spacing: Often double spaces are hard to catch with the naked eye "
+"and this is addressed here."
+msgstr ""
+"FreeBSD.Spacing: Muitas vezes, os espaços duplos são difíceis de captar a "
+"olho nu e isso é abordado aqui."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:327
+msgid ""
+"FreeBSD.SuperfluousOptArgInLinks: Suggest to empty square brackets in `link:"
+"` macros when the displayed text coincides with the URL."
+msgstr ""
+"FreeBSD.SuperfluousOptArgInLinks: Sugere colchetes vazios nas macros `link:` "
+"quando o texto exibido coincide com a URL."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:331
+msgid ""
+"Vale.Avoid: Enforces the *DO NOT USE* vocabulary terms for The FreeBSD "
+"Project. If any word is found that should not be in the documentation, the "
+"word should be added to [.filename]#.vale/styles/Vocab/Terms/reject.txt# in "
+"the `doc` repository. The list is empty at the moment."
+msgstr ""
+"Vale.Avoid: Impõe os termos de vocabulário *NÃO USE* para o Projeto FreeBSD. "
+"Se for encontrada alguma palavra que não deva estar na documentação, a "
+"palavra deve ser adicionada a [.filename]#.vale/styles/Vocab/Terms/reject."
+"txt# no repositório `doc`. A lista está vazia no momento."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:334
+msgid ""
+"Vale.Repetition: Same words are often typed twice when leaving the keyboard "
+"and rejoining the work again. This rule finds repeated words and warns the "
+"users."
+msgstr ""
+"Vale.Repetition: Muitas vezes, as mesmas palavras são digitadas duas vezes "
+"ao sair do teclado e voltar ao trabalho novamente. Esta regra encontra "
+"palavras repetidas e avisa os usuários."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:337
+msgid ""
+"Vale.Spelling: At the moment there is a mix of en_US and en_GB spellings in "
+"the documentation and website. Vale comes with an in built dictionary from "
+"which uses strictly en_US and do not accept the en_GB variant of any words."
+msgstr ""
+"Vale.Spelling: No momento, há uma mistura de grafias en_US e en_GB na "
+"documentação e no site. Vale vem com um dicionário embutido do qual usa "
+"estritamente en_US e não aceita a variante en_GB de nenhuma palavra."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:341
+msgid ""
+"Vale.Terms: Enforces the *PREFERRED* vocabulary terms for The FreeBSD "
+"Project. At the moment the list of terms is empty and the FreeBSD specific "
+"terms will be added gradually. If any word is found to be correct and not "
+"available in the dictionary the word should be added to the [.filename]#."
+"vale/styles/Vocab/Terms/accept.txt# in the `doc` repository."
+msgstr ""
+"Vale.Terms: Aplica os termos de vocabulário *PREFERIDO* para o Projeto "
+"FreeBSD. No momento, a lista de termos está vazia e os termos específicos do "
+"FreeBSD serão adicionados gradualmente. Se alguma palavra estiver correta e "
+"não disponível no dicionário, a palavra deve ser adicionada ao [.filename]#."
+"vale/styles/Vocab/Terms/accept.txt# no repositório `doc`."
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:343
+msgid ""
+"More rules will be introduced in the upcoming days when and where required."
+msgstr ""
+"Mais regras serão introduzidas nos próximos dias, quando e onde for "
+"necessário."
+
+#. type: Title ===
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:345
+#, no-wrap
+msgid "Using Vale"
+msgstr "Utilizando o Vale"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:349
+msgid ""
+"link:https://vale.sh[Vale] can be used from the command line and from within "
+"an editor or IDE. package:textproc/vale[] can be installed as following:"
+msgstr ""
+"O link:https://vale.sh[Vale] pode ser usado em linha de comando e em um "
+"editor de texto ou IDE. package:textproc/vale[] pode ser instalado da "
+"seguinte forma:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:353
+#, no-wrap
+msgid "$ pkg install vale\n"
+msgstr "$ pkg install vale\n"
+
+#. type: Title ====
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:356
+#, no-wrap
+msgid "Using Vale on the command line"
+msgstr "Usando o Vale na linha de comando"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:359
+msgid ""
+"Assuming that the `doc` repository was cloned into [.filename]#~/doc# the "
+"following commands are required to run:"
+msgstr ""
+"Assumindo que o repositório `doc` foi clonado em [.filename]#~/doc# os "
+"seguintes comandos são necessários para executar:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:364
+#, no-wrap
+msgid ""
+"% cd ~/doc\n"
+"% vale .\n"
+msgstr ""
+"% cd ~/doc\n"
+"% vale .\n"
+
+#. type: delimited block = 6
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:370
+msgid ""
+"link:https://vale.sh[Vale] is a CPU and memory intensive program due to the "
+"nature of the application and can take a while to show any output on the "
+"screen. A better way to run the application is on specific folders or files "
+"rather than the entire `doc` repository as that is already done in the CI "
+"pipeline."
+msgstr ""
+"O link:https://vale.sh[Vale] é um programa intensivo de CPU e memória devido "
+"à natureza do aplicativo e pode demorar um pouco para mostrar qualquer saída "
+"na tela. Uma melhor maneira de executar o aplicativo é em diretórios ou "
+"arquivos específicos, em vez de todo o repositório `doc`, pois isso já é "
+"feito na pipeline de CI."
+
+#. type: Title ====
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:373
+#, no-wrap
+msgid "Using Vale in editors"
+msgstr "Usando Vale em editores"
+
+#. type: Plain text
+#: documentation/content/en/books/fdp-primer/writing-style/_index.adoc:377
+msgid ""
+"link:https://vale.sh[Vale] works with major mainstream editors like package:"
+"editors/vim[], package:editors/emacs[], package:editors/vscode[]. At the "
+"moment the necessary configuration for package:editors/vim[] is described in "
+"crossref:editor-config[editor-config-vim, Vim]. A configuration for package:"
+"editors/emacs[] is being worked on."
+msgstr ""
+"O link:https://vale.sh[Vale] funciona com os principais editores "
+"tradicionais como o package:editors/vim[], package:editors/emacs[], package:"
+"editors/vscode[]. No momento a configuração necessária para o package:"
+"editors/vim[] estão descritas em rossref:editor-config[editor-config-vim, "
+"Vim]. As configuração para o package:editors/emacs[] está sendo desenvolvida."
+
+#, no-wrap
+#~ msgid "Hang"
+#~ msgstr "Hang"
+
+#, no-wrap
+#~ msgid "Weasel"
+#~ msgstr "Weasel"
+
+#~ msgid ""
+#~ "Weasel: This rule handles avoiding weasel words. The uses of weasel "
+#~ "words is controversial so at the moment the list of words are being "
+#~ "evaluated and the severity level is marked as warning on. In case a "
+#~ "frequently used word is marked as weasel word it should be removed from [."
+#~ "filename]#.vale/styles/FreeBSD/Weasel.yml# in the `doc` repository."
+#~ msgstr ""
+#~ "Weasel: Esta regra trata de evitar palavras de coloquiais. O uso de "
+#~ "palavras coloquiais é controverso, então no momento a lista de palavras "
+#~ "está sendo avaliada e o nível de gravidade está marcado como warning. No "
+#~ "caso de uma palavra usada ser marcada com frequência como palavra "
+#~ "coloquial, ela deve ser removida de [.filename]#.vale/styles/FreeBSD/"
+#~ "Weasel.yml# no repositório `doc`."
+
+#~ msgid ""
+#~ "Spelling: At the moment there is a mix of en_US and en_UK spellings in "
+#~ "the documentation and website. A custom dictionary from link:https://"
+#~ "wordlist.aspell.net[Aspell] has been added which uses strictly en_US and "
+#~ "do not accept the en_UK variant of any words. It has also an exception "
+#~ "list to ignore the FreeBSD specific terms. At the moment the list is a "
+#~ "basic one with minimal words just as a proof of concept but if any word "
+#~ "is found to be correct and not available in the dictionary the word "
+#~ "should be added to the [.filename]#.vale/styles/FreeBSD/spelling-"
+#~ "exceptions.txt# in the `doc` repository."
+#~ msgstr ""
+#~ "Spelling: No momento, há uma mistura de grafias en_US e en_UK na "
+#~ "documentação e no site. Um dicionário personalizado link:https://wordlist."
+#~ "aspell.net[Aspell] foi adicionado, que usa estritamente en_US e não "
+#~ "aceita a variantes en_UK de nenhuma palavra. Ele também possui uma lista "
+#~ "de exceções para ignorar os termos específicos do FreeBSD. No momento a "
+#~ "lista é básica com o mínimo de palavras apenas como uma prova de "
+#~ "conceito, mas se alguma palavra estiver correta e não estiver disponível "
+#~ "no dicionário, a palavra deve ser adicionada ao [.filename]#.vale/styles/"
+#~ "FreeBSD/spelling-exceptions.txt# no repositório `doc`."
#, no-wrap
#~ msgid ""
diff --git a/documentation/content/pt-br/books/handbook/advanced-networking/_index.adoc b/documentation/content/pt-br/books/handbook/advanced-networking/_index.adoc
index d2d10b5c06..9e612fae8e 100644
--- a/documentation/content/pt-br/books/handbook/advanced-networking/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/advanced-networking/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/firewalls
next: books/handbook/partv
showBookMenu: true
weight: 36
-path: "/books/handbook/"
+path: "/books/handbook/advanced-networking/"
---
[[advanced-networking]]
diff --git a/documentation/content/pt-br/books/handbook/audit/_index.adoc b/documentation/content/pt-br/books/handbook/audit/_index.adoc
index 0fb4e63ce5..5a010f95ee 100644
--- a/documentation/content/pt-br/books/handbook/audit/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/audit/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mac
next: books/handbook/disks
showBookMenu: true
weight: 20
-path: "/books/handbook/"
+path: "/books/handbook/audit/"
---
[[audit]]
diff --git a/documentation/content/pt-br/books/handbook/basics/_index.adoc b/documentation/content/pt-br/books/handbook/basics/_index.adoc
index e29488cc1a..ed914ca163 100644
--- a/documentation/content/pt-br/books/handbook/basics/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/basics/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/bsdinstall
next: books/handbook/ports
showBookMenu: true
weight: 5
-path: "/books/handbook/"
+path: "/books/handbook/basics/"
---
[[basics]]
diff --git a/documentation/content/pt-br/books/handbook/bibliography/_index.adoc b/documentation/content/pt-br/books/handbook/bibliography/_index.adoc
index 0ea324f6a7..ac6f32d1f2 100644
--- a/documentation/content/pt-br/books/handbook/bibliography/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/bibliography/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mirrors
next: books/handbook/eresources
showBookMenu: true
weight: 39
-path: "/books/handbook/"
+path: "/books/handbook/bibliography/"
---
[appendix]
diff --git a/documentation/content/pt-br/books/handbook/boot/_index.adoc b/documentation/content/pt-br/books/handbook/boot/_index.adoc
index f2740827c8..122d5d6ecc 100644
--- a/documentation/content/pt-br/books/handbook/boot/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/boot/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/config
next: books/handbook/security
showBookMenu: true
weight: 16
-path: "/books/handbook/"
+path: "/books/handbook/boot/"
---
[[boot]]
diff --git a/documentation/content/pt-br/books/handbook/bsdinstall/_index.adoc b/documentation/content/pt-br/books/handbook/bsdinstall/_index.adoc
index d0c3777b56..63a63e6bfd 100644
--- a/documentation/content/pt-br/books/handbook/bsdinstall/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/bsdinstall/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/introduction
next: books/handbook/basics
showBookMenu: true
weight: 4
-path: "/books/handbook/"
+path: "/books/handbook/bsdinstall/"
---
[[bsdinstall]]
diff --git a/documentation/content/pt-br/books/handbook/config/_index.adoc b/documentation/content/pt-br/books/handbook/config/_index.adoc
index 5552030259..c208f7062a 100644
--- a/documentation/content/pt-br/books/handbook/config/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/config/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partiii
next: books/handbook/boot
showBookMenu: true
weight: 15
-path: "/books/handbook/"
+path: "/books/handbook/config/"
---
[[config-tuning]]
@@ -1524,5 +1524,5 @@ A maioria dos desenvolvedores do FreeBSD assina a lista de discussão http://lis
Mais informações sobre ACPI podem ser encontradas nos seguintes locais:
* Arquivos da lista de e-mail do FreeBSD ACPI (https://lists.freebsd.org/pipermail/freebsd-acpi/[https://lists.freebsd.org/pipermail/freebsd-acpi/])
-* A especificação ACPI 2.0 (http://acpi.info/spec.htm[http://acpi.info/spec.htm])
+* A https://uefi.org/specifications#ACPI[especificação ACPI]
* man:acpi[4], man:acpi_thermal[4], man:acpidump[8], man:iasl[8], e man:acpidb[8]
diff --git a/documentation/content/pt-br/books/handbook/cutting-edge/_index.adoc b/documentation/content/pt-br/books/handbook/cutting-edge/_index.adoc
index c7985f75ad..3fd81d3e49 100644
--- a/documentation/content/pt-br/books/handbook/cutting-edge/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/cutting-edge/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/l10n
next: books/handbook/dtrace
showBookMenu: true
weight: 27
-path: "/books/handbook/"
+path: "/books/handbook/cutting-edge/"
---
[[updating-upgrading]]
diff --git a/documentation/content/pt-br/books/handbook/desktop/_index.adoc b/documentation/content/pt-br/books/handbook/desktop/_index.adoc
index 1963b82424..1e2f3c5f62 100644
--- a/documentation/content/pt-br/books/handbook/desktop/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/desktop/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partii
next: books/handbook/multimedia
showBookMenu: true
weight: 9
-path: "/books/handbook/"
+path: "/books/handbook/desktop/"
---
[[desktop]]
diff --git a/documentation/content/pt-br/books/handbook/disks/_index.adoc b/documentation/content/pt-br/books/handbook/disks/_index.adoc
index ddb07c8b70..0dbb110e1f 100644
--- a/documentation/content/pt-br/books/handbook/disks/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/disks/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/audit
next: books/handbook/geom
showBookMenu: true
weight: 21
-path: "/books/handbook/"
+path: "/books/handbook/disks/"
---
[[disks]]
diff --git a/documentation/content/pt-br/books/handbook/dtrace/_index.adoc b/documentation/content/pt-br/books/handbook/dtrace/_index.adoc
index bb4b16b4d4..4c74a669c6 100644
--- a/documentation/content/pt-br/books/handbook/dtrace/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/dtrace/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/cutting-edge
next: books/handbook/usb-device-mode
showBookMenu: true
weight: 28
-path: "/books/handbook/"
+path: "/books/handbook/dtrace/"
---
[[dtrace]]
diff --git a/documentation/content/pt-br/books/handbook/eresources/_index.adoc b/documentation/content/pt-br/books/handbook/eresources/_index.adoc
index 44c836ed39..f069e47ec1 100644
--- a/documentation/content/pt-br/books/handbook/eresources/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/eresources/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/bibliography
next: books/handbook/pgpkeys
showBookMenu: true
weight: 40
-path: "/books/handbook/"
+path: "/books/handbook/eresources/"
---
[appendix]
diff --git a/documentation/content/pt-br/books/handbook/filesystems/_index.adoc b/documentation/content/pt-br/books/handbook/filesystems/_index.adoc
index 6ab3277132..2a9b9e7bae 100644
--- a/documentation/content/pt-br/books/handbook/filesystems/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/filesystems/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/zfs
next: books/handbook/virtualization
showBookMenu: true
weight: 24
-path: "/books/handbook/"
+path: "/books/handbook/filesystems/"
---
[[filesystems]]
diff --git a/documentation/content/pt-br/books/handbook/firewalls/_index.adoc b/documentation/content/pt-br/books/handbook/firewalls/_index.adoc
index 5da7fee082..40cd7f1d9f 100644
--- a/documentation/content/pt-br/books/handbook/firewalls/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/firewalls/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/network-servers
next: books/handbook/advanced-networking
showBookMenu: true
weight: 35
-path: "/books/handbook/"
+path: "/books/handbook/firewalls/"
---
[[firewalls]]
diff --git a/documentation/content/pt-br/books/handbook/geom/_index.adoc b/documentation/content/pt-br/books/handbook/geom/_index.adoc
index 5f4dbeb5aa..7655bd6f15 100644
--- a/documentation/content/pt-br/books/handbook/geom/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/geom/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/disks
next: books/handbook/zfs
showBookMenu: true
weight: 22
-path: "/books/handbook/"
+path: "/books/handbook/geom/"
---
[[geom]]
diff --git a/documentation/content/pt-br/books/handbook/introduction/_index.adoc b/documentation/content/pt-br/books/handbook/introduction/_index.adoc
index d1b2634753..a942913ec6 100644
--- a/documentation/content/pt-br/books/handbook/introduction/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/introduction/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/parti
next: books/handbook/bsdinstall
showBookMenu: true
weight: 3
-path: "/books/handbook/"
+path: "/books/handbook/introduction/"
---
[[introduction]]
diff --git a/documentation/content/pt-br/books/handbook/jails/_index.adoc b/documentation/content/pt-br/books/handbook/jails/_index.adoc
index 219281ed3b..3caf436edd 100644
--- a/documentation/content/pt-br/books/handbook/jails/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/jails/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/security
next: books/handbook/mac
showBookMenu: true
weight: 18
-path: "/books/handbook/"
+path: "/books/handbook/jails/"
---
[[jails]]
diff --git a/documentation/content/pt-br/books/handbook/kernelconfig/_index.adoc b/documentation/content/pt-br/books/handbook/kernelconfig/_index.adoc
index 2dd4ba37c2..af21c936d1 100644
--- a/documentation/content/pt-br/books/handbook/kernelconfig/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/kernelconfig/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/multimedia
next: books/handbook/printing
showBookMenu: true
weight: 11
-path: "/books/handbook/"
+path: "/books/handbook/kernelconfig/"
---
[[kernelconfig]]
diff --git a/documentation/content/pt-br/books/handbook/l10n/_index.adoc b/documentation/content/pt-br/books/handbook/l10n/_index.adoc
index 827ac1d8db..4a370edf27 100644
--- a/documentation/content/pt-br/books/handbook/l10n/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/l10n/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/virtualization
next: books/handbook/cutting-edge
showBookMenu: true
weight: 26
-path: "/books/handbook/"
+path: "/books/handbook/l10n/"
---
[[l10n]]
diff --git a/documentation/content/pt-br/books/handbook/linuxemu/_index.adoc b/documentation/content/pt-br/books/handbook/linuxemu/_index.adoc
index 8bf483973d..910659955d 100644
--- a/documentation/content/pt-br/books/handbook/linuxemu/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/linuxemu/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/printing
next: books/handbook/partiii
showBookMenu: true
weight: 13
-path: "/books/handbook/"
+path: "/books/handbook/linuxemu/"
---
[[linuxemu]]
diff --git a/documentation/content/pt-br/books/handbook/mac/_index.adoc b/documentation/content/pt-br/books/handbook/mac/_index.adoc
index b47f0969be..b1c75e99cd 100644
--- a/documentation/content/pt-br/books/handbook/mac/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/mac/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/jails
next: books/handbook/audit
showBookMenu: true
weight: 19
-path: "/books/handbook/"
+path: "/books/handbook/mac/"
---
[[mac]]
diff --git a/documentation/content/pt-br/books/handbook/mail/_index.adoc b/documentation/content/pt-br/books/handbook/mail/_index.adoc
index 09ddf959ff..ac1667b737 100644
--- a/documentation/content/pt-br/books/handbook/mail/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/mail/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/ppp-and-slip
next: books/handbook/network-servers
showBookMenu: true
weight: 33
-path: "/books/handbook/"
+path: "/books/handbook/mail/"
---
[[mail]]
diff --git a/documentation/content/pt-br/books/handbook/mirrors/_index.adoc b/documentation/content/pt-br/books/handbook/mirrors/_index.adoc
index 3a6ce84b36..0cfacc9fe2 100644
--- a/documentation/content/pt-br/books/handbook/mirrors/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/mirrors/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partv
next: books/handbook/bibliography
showBookMenu: true
weight: 38
-path: "/books/handbook/"
+path: "/books/handbook/mirrors/"
---
[appendix]
diff --git a/documentation/content/pt-br/books/handbook/multimedia/_index.adoc b/documentation/content/pt-br/books/handbook/multimedia/_index.adoc
index 327c42988a..eb4d8c0a61 100644
--- a/documentation/content/pt-br/books/handbook/multimedia/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/multimedia/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/desktop
next: books/handbook/kernelconfig
showBookMenu: true
weight: 10
-path: "/books/handbook/"
+path: "/books/handbook/multimedia/"
---
[[multimedia]]
diff --git a/documentation/content/pt-br/books/handbook/network-servers/_index.adoc b/documentation/content/pt-br/books/handbook/network-servers/_index.adoc
index 80a6b6f137..28a2864612 100644
--- a/documentation/content/pt-br/books/handbook/network-servers/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/network-servers/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mail
next: books/handbook/firewalls
showBookMenu: true
weight: 34
-path: "/books/handbook/"
+path: "/books/handbook/network-servers/"
---
[[network-servers]]
diff --git a/documentation/content/pt-br/books/handbook/parti.adoc b/documentation/content/pt-br/books/handbook/parti.adoc
index a36de49a9d..559f63f7d6 100644
--- a/documentation/content/pt-br/books/handbook/parti.adoc
+++ b/documentation/content/pt-br/books/handbook/parti.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/preface
next: books/handbook/introduction
showBookMenu: true
weight: 2
-path: "/books/handbook/"
+path: "/books/handbook/parti/"
---
[[getting-started]]
diff --git a/documentation/content/pt-br/books/handbook/partii.adoc b/documentation/content/pt-br/books/handbook/partii.adoc
index 6338c0d8f7..0d611f543d 100644
--- a/documentation/content/pt-br/books/handbook/partii.adoc
+++ b/documentation/content/pt-br/books/handbook/partii.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/x11
next: books/handbook/desktop
showBookMenu: true
weight: 8
-path: "/books/handbook/"
+path: "/books/handbook/partii/"
---
[[common-tasks]]
diff --git a/documentation/content/pt-br/books/handbook/partiii.adoc b/documentation/content/pt-br/books/handbook/partiii.adoc
index 07c7e3c454..b10b2c1de3 100644
--- a/documentation/content/pt-br/books/handbook/partiii.adoc
+++ b/documentation/content/pt-br/books/handbook/partiii.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/linuxemu
next: books/handbook/config
showBookMenu: true
weight: 14
-path: "/books/handbook/"
+path: "/books/handbook/partiii/"
---
[[system-administration]]
diff --git a/documentation/content/pt-br/books/handbook/partiv.adoc b/documentation/content/pt-br/books/handbook/partiv.adoc
index 5f1213c441..bca887efe3 100644
--- a/documentation/content/pt-br/books/handbook/partiv.adoc
+++ b/documentation/content/pt-br/books/handbook/partiv.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/usb-device-mode
next: books/handbook/serialcomms
showBookMenu: true
weight: 30
-path: "/books/handbook/"
+path: "/books/handbook/partiv/"
---
[[network-communication]]
diff --git a/documentation/content/pt-br/books/handbook/partv.adoc b/documentation/content/pt-br/books/handbook/partv.adoc
index c71ed11284..c7998cd899 100644
--- a/documentation/content/pt-br/books/handbook/partv.adoc
+++ b/documentation/content/pt-br/books/handbook/partv.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/advanced-networking
next: books/handbook/mirrors
showBookMenu: true
weight: 37
-path: "/books/handbook/"
+path: "/books/handbook/partv/"
---
[[appendices]]
diff --git a/documentation/content/pt-br/books/handbook/pgpkeys/_index.adoc b/documentation/content/pt-br/books/handbook/pgpkeys/_index.adoc
index ae7b2feab9..01802cf582 100644
--- a/documentation/content/pt-br/books/handbook/pgpkeys/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/pgpkeys/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/eresources
next: books/handbook/freebsd-glossary
showBookMenu: true
weight: 41
-path: "/books/handbook/"
+path: "/books/handbook/pgpkeys/"
---
[appendix]
@@ -59,9 +59,6 @@ As chaves OpenPGP dos Administradores do `FreeBSD.org` são mostradas aqui. Essa
=== {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/pt-br/books/handbook/ports/_index.adoc b/documentation/content/pt-br/books/handbook/ports/_index.adoc
index 6a159e77e8..d65511244b 100644
--- a/documentation/content/pt-br/books/handbook/ports/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/ports/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/basics
next: books/handbook/x11
showBookMenu: true
weight: 6
-path: "/books/handbook/"
+path: "/books/handbook/ports/"
---
[[ports]]
diff --git a/documentation/content/pt-br/books/handbook/ppp-and-slip/_index.adoc b/documentation/content/pt-br/books/handbook/ppp-and-slip/_index.adoc
index 8dc62b2fc1..bc0a014493 100644
--- a/documentation/content/pt-br/books/handbook/ppp-and-slip/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/ppp-and-slip/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/serialcomms
next: books/handbook/mail
showBookMenu: true
weight: 32
-path: "/books/handbook/"
+path: "/books/handbook/ppp-and-slip/"
---
[[ppp-and-slip]]
diff --git a/documentation/content/pt-br/books/handbook/preface/_index.adoc b/documentation/content/pt-br/books/handbook/preface/_index.adoc
index 53c53255dc..7477cbb64f 100644
--- a/documentation/content/pt-br/books/handbook/preface/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/preface/_index.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/
next: books/handbook/parti
showBookMenu: true
weight: 1
-path: "/books/handbook/"
+path: "/books/handbook/preface/"
---
[preface]
diff --git a/documentation/content/pt-br/books/handbook/printing/_index.adoc b/documentation/content/pt-br/books/handbook/printing/_index.adoc
index 75a8dc0261..1bfd467d6d 100644
--- a/documentation/content/pt-br/books/handbook/printing/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/printing/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/kernelconfig
next: books/handbook/linuxemu
showBookMenu: true
weight: 12
-path: "/books/handbook/"
+path: "/books/handbook/printing/"
---
[[printing]]
@@ -506,11 +506,6 @@ Modifique o [.filename]#/etc/printcap# para usar este novo filtro de entrada:
Teste o filtro imprimindo PostScript(TM) e arquivos de texto simples.
-[[printing-lpd-filters-othersmart]]
-==== Outros Filtros Inteligentes
-
-Escrever um filtro que detecte muitos tipos diferentes de entrada e os formate corretamente é um desafio. O package:print/apsfilter[] da Coleção de Ports é um filtro "magico" inteligente que detecta dezenas de tipos de arquivos e os converte automaticamente para o PDL entendido pela impressora. Veja http://www.apsfilter.org[] para mais detalhes.
-
[[printing-lpd-queues]]
=== Múltiplas filas
diff --git a/documentation/content/pt-br/books/handbook/security/_index.adoc b/documentation/content/pt-br/books/handbook/security/_index.adoc
index ac7553ec08..dabd3dc854 100644
--- a/documentation/content/pt-br/books/handbook/security/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/security/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/boot
next: books/handbook/jails
showBookMenu: true
weight: 17
-path: "/books/handbook/"
+path: "/books/handbook/security/"
---
[[security]]
diff --git a/documentation/content/pt-br/books/handbook/serialcomms/_index.adoc b/documentation/content/pt-br/books/handbook/serialcomms/_index.adoc
index 555ed67ee3..cac17611b0 100644
--- a/documentation/content/pt-br/books/handbook/serialcomms/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/serialcomms/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partiv
next: books/handbook/ppp-and-slip
showBookMenu: true
weight: 31
-path: "/books/handbook/"
+path: "/books/handbook/serialcomms/"
---
[[serialcomms]]
diff --git a/documentation/content/pt-br/books/handbook/usb-device-mode/_index.adoc b/documentation/content/pt-br/books/handbook/usb-device-mode/_index.adoc
index 2d776de6f4..53b272cf8f 100644
--- a/documentation/content/pt-br/books/handbook/usb-device-mode/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/usb-device-mode/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/dtrace
next: books/handbook/partiv
showBookMenu: true
weight: 29
-path: "/books/handbook/"
+path: "/books/handbook/usb-device-mode/"
---
[[usb-device-mode]]
diff --git a/documentation/content/pt-br/books/handbook/virtualization/_index.adoc b/documentation/content/pt-br/books/handbook/virtualization/_index.adoc
index a21203e555..1100879458 100644
--- a/documentation/content/pt-br/books/handbook/virtualization/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/virtualization/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/filesystems
next: books/handbook/l10n
showBookMenu: true
weight: 25
-path: "/books/handbook/"
+path: "/books/handbook/virtualization/"
---
[[virtualization]]
diff --git a/documentation/content/pt-br/books/handbook/x11/_index.adoc b/documentation/content/pt-br/books/handbook/x11/_index.adoc
index 55e88b8647..9d95515655 100644
--- a/documentation/content/pt-br/books/handbook/x11/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/x11/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/ports
next: books/handbook/partii
showBookMenu: true
weight: 7
-path: "/books/handbook/"
+path: "/books/handbook/x11/"
---
[[x11]]
diff --git a/documentation/content/pt-br/books/handbook/zfs/_index.adoc b/documentation/content/pt-br/books/handbook/zfs/_index.adoc
index e9919e89c2..77caae03c1 100644
--- a/documentation/content/pt-br/books/handbook/zfs/_index.adoc
+++ b/documentation/content/pt-br/books/handbook/zfs/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/geom
next: books/handbook/filesystems
showBookMenu: true
weight: 23
-path: "/books/handbook/"
+path: "/books/handbook/zfs/"
---
[[zfs]]
diff --git a/documentation/content/pt-br/books/porters-handbook/flavors/_index.adoc b/documentation/content/pt-br/books/porters-handbook/flavors/_index.adoc
index b7da5299f4..28bca6a0c5 100644
--- a/documentation/content/pt-br/books/porters-handbook/flavors/_index.adoc
+++ b/documentation/content/pt-br/books/porters-handbook/flavors/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/special
next: books/porters-handbook/plist
showBookMenu: true
weight: 7
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/flavors/"
---
[[flavors]]
diff --git a/documentation/content/pt-br/books/porters-handbook/keeping-up/_index.adoc b/documentation/content/pt-br/books/porters-handbook/keeping-up/_index.adoc
index b66c9f9a8d..efc33312e2 100644
--- a/documentation/content/pt-br/books/porters-handbook/keeping-up/_index.adoc
+++ b/documentation/content/pt-br/books/porters-handbook/keeping-up/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/order
next: books/porters-handbook/uses
showBookMenu: true
weight: 16
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/keeping-up/"
---
[[keeping-up]]
diff --git a/documentation/content/pt-br/books/porters-handbook/makefiles/_index.adoc b/documentation/content/pt-br/books/porters-handbook/makefiles/_index.adoc
index b0a4023cb4..7625c978ad 100644
--- a/documentation/content/pt-br/books/porters-handbook/makefiles/_index.adoc
+++ b/documentation/content/pt-br/books/porters-handbook/makefiles/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/slow-porting
next: books/porters-handbook/special
showBookMenu: true
weight: 5
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/makefiles/"
---
[[makefiles]]
diff --git a/documentation/content/pt-br/books/porters-handbook/new-port/_index.adoc b/documentation/content/pt-br/books/porters-handbook/new-port/_index.adoc
index 963eb62229..bc706eba8b 100644
--- a/documentation/content/pt-br/books/porters-handbook/new-port/_index.adoc
+++ b/documentation/content/pt-br/books/porters-handbook/new-port/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/porting-why
next: books/porters-handbook/quick-porting
showBookMenu: true
weight: 2
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/new-port/"
---
[[own-port]]
diff --git a/documentation/content/pt-br/books/porters-handbook/order/_index.adoc b/documentation/content/pt-br/books/porters-handbook/order/_index.adoc
index 0c5ed7b3b8..858bf05df0 100644
--- a/documentation/content/pt-br/books/porters-handbook/order/_index.adoc
+++ b/documentation/content/pt-br/books/porters-handbook/order/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/porting-samplem
next: books/porters-handbook/keeping-up
showBookMenu: true
weight: 15
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/order/"
---
[[porting-order]]
diff --git a/documentation/content/pt-br/books/porters-handbook/pkg-files/_index.adoc b/documentation/content/pt-br/books/porters-handbook/pkg-files/_index.adoc
index 11ab3f84dd..dd8e74a117 100644
--- a/documentation/content/pt-br/books/porters-handbook/pkg-files/_index.adoc
+++ b/documentation/content/pt-br/books/porters-handbook/pkg-files/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/plist
next: books/porters-handbook/testing
showBookMenu: true
weight: 9
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/pkg-files/"
---
[[pkg-files]]
diff --git a/documentation/content/pt-br/books/porters-handbook/plist/_index.adoc b/documentation/content/pt-br/books/porters-handbook/plist/_index.adoc
index 693288f68b..76f82bb703 100644
--- a/documentation/content/pt-br/books/porters-handbook/plist/_index.adoc
+++ b/documentation/content/pt-br/books/porters-handbook/plist/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/flavors
next: books/porters-handbook/pkg-files
showBookMenu: true
weight: 8
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/plist/"
---
[[plist]]
diff --git a/documentation/content/pt-br/books/porters-handbook/porting-dads/_index.adoc b/documentation/content/pt-br/books/porters-handbook/porting-dads/_index.adoc
index 9879c71e3a..ef9ee4f00f 100644
--- a/documentation/content/pt-br/books/porters-handbook/porting-dads/_index.adoc
+++ b/documentation/content/pt-br/books/porters-handbook/porting-dads/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/security
next: books/porters-handbook/porting-samplem
showBookMenu: true
weight: 13
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/porting-dads/"
---
[[porting-dads]]
diff --git a/documentation/content/pt-br/books/porters-handbook/porting-samplem/_index.adoc b/documentation/content/pt-br/books/porters-handbook/porting-samplem/_index.adoc
index 5d9f40c05f..e9aaf61293 100644
--- a/documentation/content/pt-br/books/porters-handbook/porting-samplem/_index.adoc
+++ b/documentation/content/pt-br/books/porters-handbook/porting-samplem/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/porting-dads
next: books/porters-handbook/order
showBookMenu: true
weight: 14
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/porting-samplem/"
---
[[porting-samplem]]
diff --git a/documentation/content/pt-br/books/porters-handbook/porting-why/_index.adoc b/documentation/content/pt-br/books/porters-handbook/porting-why/_index.adoc
index a5ecbdbce6..cd67b3c31b 100644
--- a/documentation/content/pt-br/books/porters-handbook/porting-why/_index.adoc
+++ b/documentation/content/pt-br/books/porters-handbook/porting-why/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/
next: books/porters-handbook/new-port
showBookMenu: true
weight: 1
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/porting-why/"
---
[[why-port]]
diff --git a/documentation/content/pt-br/books/porters-handbook/quick-porting/_index.adoc b/documentation/content/pt-br/books/porters-handbook/quick-porting/_index.adoc
index 0466351ea3..80d9567325 100644
--- a/documentation/content/pt-br/books/porters-handbook/quick-porting/_index.adoc
+++ b/documentation/content/pt-br/books/porters-handbook/quick-porting/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/new-port
next: books/porters-handbook/slow-porting
showBookMenu: true
weight: 3
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/quick-porting/"
---
[[quick-porting]]
diff --git a/documentation/content/pt-br/books/porters-handbook/security/_index.adoc b/documentation/content/pt-br/books/porters-handbook/security/_index.adoc
index 8fc41e89da..b179fc7bf9 100644
--- a/documentation/content/pt-br/books/porters-handbook/security/_index.adoc
+++ b/documentation/content/pt-br/books/porters-handbook/security/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/upgrading
next: books/porters-handbook/porting-dads
showBookMenu: true
weight: 12
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/security/"
---
[[security]]
diff --git a/documentation/content/pt-br/books/porters-handbook/slow-porting/_index.adoc b/documentation/content/pt-br/books/porters-handbook/slow-porting/_index.adoc
index 857c9a7710..90b45b8349 100644
--- a/documentation/content/pt-br/books/porters-handbook/slow-porting/_index.adoc
+++ b/documentation/content/pt-br/books/porters-handbook/slow-porting/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/quick-porting
next: books/porters-handbook/makefiles
showBookMenu: true
weight: 4
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/slow-porting/"
---
[[slow-porting]]
diff --git a/documentation/content/pt-br/books/porters-handbook/special/_index.adoc b/documentation/content/pt-br/books/porters-handbook/special/_index.adoc
index 820f8671fd..0e751dd2fe 100644
--- a/documentation/content/pt-br/books/porters-handbook/special/_index.adoc
+++ b/documentation/content/pt-br/books/porters-handbook/special/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/makefiles
next: books/porters-handbook/flavors
showBookMenu: true
weight: 6
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/special/"
---
[[special]]
diff --git a/documentation/content/pt-br/books/porters-handbook/testing/_index.adoc b/documentation/content/pt-br/books/porters-handbook/testing/_index.adoc
index 9b6d99fdf2..16f0ac0ca7 100644
--- a/documentation/content/pt-br/books/porters-handbook/testing/_index.adoc
+++ b/documentation/content/pt-br/books/porters-handbook/testing/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/pkg-files
next: books/porters-handbook/upgrading
showBookMenu: true
weight: 10
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/testing/"
---
[[testing]]
diff --git a/documentation/content/pt-br/books/porters-handbook/upgrading/_index.adoc b/documentation/content/pt-br/books/porters-handbook/upgrading/_index.adoc
index 35610842ae..99541aa920 100644
--- a/documentation/content/pt-br/books/porters-handbook/upgrading/_index.adoc
+++ b/documentation/content/pt-br/books/porters-handbook/upgrading/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/testing
next: books/porters-handbook/security
showBookMenu: true
weight: 11
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/upgrading/"
---
[[port-upgrading]]
diff --git a/documentation/content/pt-br/books/porters-handbook/uses/_index.adoc b/documentation/content/pt-br/books/porters-handbook/uses/_index.adoc
index 1e6eb77d0a..b3b87a01a7 100644
--- a/documentation/content/pt-br/books/porters-handbook/uses/_index.adoc
+++ b/documentation/content/pt-br/books/porters-handbook/uses/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/keeping-up
next: books/porters-handbook/versions
showBookMenu: true
weight: 17
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/uses/"
---
[[uses]]
diff --git a/documentation/content/pt-br/books/porters-handbook/versions/_index.adoc b/documentation/content/pt-br/books/porters-handbook/versions/_index.adoc
index 2473acb423..05563bb2fc 100644
--- a/documentation/content/pt-br/books/porters-handbook/versions/_index.adoc
+++ b/documentation/content/pt-br/books/porters-handbook/versions/_index.adoc
@@ -3,7 +3,7 @@ title: Capítulo 18. Valores __FreeBSD_version
prev: books/porters-handbook/uses
showBookMenu: true
weight: 18
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/versions/"
---
[[versions]]
diff --git a/documentation/content/ru/books/arch-handbook/book.adoc b/documentation/content/ru/books/arch-handbook/book.adoc
index 02fb3a4420..02d82d2ae2 100644
--- a/documentation/content/ru/books/arch-handbook/book.adoc
+++ b/documentation/content/ru/books/arch-handbook/book.adoc
@@ -2,7 +2,7 @@
title: FreeBSD Architecture Handbook
authors:
- author: The FreeBSD Documentation Project
-copyright: Copyright © 2000-2006, 2012-2013 The FreeBSD Documentation Project
+copyright: 2000-2006, 2012-2013 The FreeBSD Documentation Project
description: FreeBSD Architecture Handbook
trademarks: ["freebsd", "apple", "microsoft", "unix", "general"]
tags: ["Arch Handbook", "FreeBSD"]
diff --git a/documentation/content/ru/books/faq/_index.adoc b/documentation/content/ru/books/faq/_index.adoc
index 40da854402..4c7f78082d 100644
--- a/documentation/content/ru/books/faq/_index.adoc
+++ b/documentation/content/ru/books/faq/_index.adoc
@@ -1,12 +1,17 @@
---
-title: Часто задаваемые вопросы по FreeBSD 11.X и 12.X
+title: Часто задаваемые вопросы по FreeBSD 12.X и 13.X
authors:
- - author: Проект документации FreeBSD
-copyright: 1995-2020 The FreeBSD Documentation Project
+ - author: Проект документирования FreeBSD
+copyright: 1995-2023 The FreeBSD Russian Documentation Project
+description: Часто задаваемые вопросы и ответы по FreeBSD 11.X, 12.X и 13.X, касающиеся всех аспектов FreeBSD
trademarks: ["freebsd", "ibm", "ieee", "adobe", "intel", "linux", "microsoft", "opengroup", "sun", "netbsd", "general"]
-isIndex: true
+bookOrder: 5
+tags: ["FAQ", "FreeBSD FAQ"]
+layout: single
---
+// Original EN revision (28.08.2023): 7d1e32e5138658ffb86ea5e0fb14e4740830582c
+
= Часто задаваемые вопросы по FreeBSD {rel2-relx} и {rel-relx}
:doctype: book
:toc: macro
@@ -18,22 +23,18 @@ isIndex: true
:source-highlighter: rouge
:experimental:
:images-path: books/faq/
-:rel-numbranch: 4
+:rel-numbranch: 3
:rel-head: 14-CURRENT
:rel-head-relx: 14.X
-:rel-head-releng: head/
+:rel-head-releng: main
:rel-relx: 13.X
:rel-stable: 13-STABLE
-:rel-releng: stable/13/
-:rel-relengdate: December 2018
+:rel-releng: stable/13
+:rel-relengdate: January 2021
:rel2-relx: 12.X
:rel2-stable: 12-STABLE
-:rel2-releng: stable/12/
+: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[]
@@ -57,9 +58,13 @@ endif::[]
[.abstract-title]
Аннотация
-Этот документ является так называемым FAQ (Frequently Asked Questions), то есть списком Часто Задаваемых Вопросов по FreeBSD версий {rel3-relx}, {rel2-relx} и {rel-relx}. Мы прилагаем все усилия, чтобы сделать этот FAQ максимально информативным; если у вас есть идеи по его усовершенствованию, шлите их на адрес {freebsd-doc}.
+Этот документ является так называемым FAQ (Frequently Asked Questions), то есть списком Часто Задаваемых Вопросов по FreeBSD версий {rel-relx} и {rel2-relx}.
+Мы прилагаем все усилия, чтобы сделать этот FAQ максимально информативным; если у вас есть идеи по его усовершенствованию, присылайте их на адрес {freebsd-doc}.
-Последняя редакция этого документа всегда доступна с extref:{faq}[Web-сервера FreeBSD]. Его также можно получить в виде одного большого link:.[ HTML-файла] по HTTP или в ряде других форматов с link:ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/[FTP-сервера].
+Самая последняя редакция этого документа всегда доступна на extref:{faq}[Web-сайте FreeBSD].
+Его также можно сгрузить в виде одного
+большого файла в формате link:.[HTML] по HTTP или в различных других форматах с
+https://download.freebsd.org/doc/[FTP-сервера FreeBSD].
'''
@@ -69,9 +74,10 @@ toc::[]
=== FreeBSD - что это такое?
-FreeBSD - это современная операционная система для настольных компьютеров, ноутбуков, серверов и встраиваемых систем с поддержкой большого количества http://www.FreeBSD.org/ru/platforms/[платформ].
+FreeBSD - это современная операционная система для настольных компьютеров, ноутбуков, серверов и встраиваемых систем с поддержкой большого количества https://www.FreeBSD.org/ru/platforms/[платформ].
-В основе FreeBSD лежит операционная система "4.4BSD-Lite" Калифорнийского Университета (Беркли) с некоторыми усовершенствованиями из "4.4BSD-Lite2". Также она косвенно базируется на 386BSD (BSD Net/2, перенесённой на платформу i386(TM) Уильямом Джолитцем (William Jolitz)), хотя от того первоначального кода осталось очень мало.
+В основе FreeBSD лежит операционная система "4.4BSD-Lite" Калифорнийского Университета (Беркли) с некоторыми усовершенствованиями из "4.4BSD-Lite2".
+Также она косвенно базируется на 386BSD (BSD Net/2, перенесённой на платформу i386(TM) Уильямом Джолитцем (William Jolitz)), хотя от того первоначального кода осталось очень мало.
FreeBSD используется компаниями, Интернет-провайдерами, научными работниками, профессионалами в вычислительной технике, студентами и рядовыми пользователями по всему миру для работы, образования и отдыха.
@@ -82,28 +88,53 @@ FreeBSD используется компаниями, Интернет-пров
Цель проекта FreeBSD - предоставить быструю и стабильную операционную систему общего назначения, которую можно использовать в любых целях без каких-либо ограничений.
+[[bsd-license-restrictions]]
=== Есть ли в лицензии FreeBSD какие-то ограничения?
-Да. Эти ограничения не касаются аспектов использования кода, но главным образом описывают отношение к Проекту FreeBSD. Текст лицензионного соглашения доступен http://www.FreeBSD.org/ru/copyright/freebsd-license/[здесь], и вкратце он может быть изложен следующим образом:
+Да.
+Эти ограничения не касаются аспектов использования кода, но главным образом описывают отношение к этому коду со стороны Проекта FreeBSD. Текст лицензионного соглашения доступен https://www.FreeBSD.org/ru/copyright/freebsd-license/[здесь], и вкратце он может быть изложен следующим образом:
* Не говорите, что это написано вами.
* Не судитесь с нами, если что-то не работает.
* Не удаляйте и не изменяйте лицензию.
-Многие из нас вкладывают в проект значительные усилия и определённо были бы не против получения финансовой поддержки, но требовать её мы не будем. Мы надеемся, что наша основная и самая значительная "миссия" - предоставить код всем желающим, для любых целей, так чтобы он нашел самое широкое применение и принёс наибольшую пользу. Это, на наш взгляд, одна из самых фундаментальных целей Free Software, которую мы с энтузиазмом поддерживаем.
-
-Часть исходного кода нашей системы, подпадающая под действие http://www.FreeBSD.org/copyright/COPYING[GNU General Public License (GPL)] или http://www.FreeBSD.org/copyright/COPYING.LIB[GNU Library General Public License (LGPL)], имеет несколько больше ограничений, хотя и представляет собой навязывание доступа к исходным текстам, а не наоборот, как обычно. Из-за дополнительных сложностей, которые могут возникнуть в случае коммерческого использования программного обеспечения GPL, мы стараемся, где только это возможно, заменить подобное программное обеспечение аналогичным, но подпадающим под менее строгую http://www.FreeBSD.org/copyright/freebsd-license/[ лицензию FreeBSD].
-
+Многие из нас вкладывают в проект значительные усилия и определённо были бы не против получения небольшой финансовой поддержки сейчас и в будущем, но мы на этом не настаиваем.
+Мы надеемся, что наша основная и самая значительная "миссия" - предоставить код всем желающим, для любых целей, так чтобы он нашел самое широкое применение и принёс наибольшую пользу. Это, на наш взгляд, одна из самых фундаментальных целей Free Software, которую мы с энтузиазмом поддерживаем.
+
+Часть исходного кода нашей системы, подпадающая под действие
+https://www.FreeBSD.org/copyright/COPYING[GNU General Public License (GPL)] или
+https://www.FreeBSD.org/copyright/COPYING.LIB[GNU Library General Public
+License (LGPL)], имеет несколько больше ограничений, хотя и представляет собой
+навязывание доступа к исходным текстам, а не наоборот, как обычно. Из-за
+дополнительных сложностей, которые могут возникнуть в случае коммерческого
+использования программного обеспечения GPL, мы стараемся, где только это
+возможно, заменить подобное программное обеспечение аналогичным, но подпадающим
+под менее строгую https://www.FreeBSD.org/copyright/freebsd-license/[лицензию
+FreeBSD].
+
+[[replace-current-OS]]
=== Может ли FreeBSD заменить операционную систему, используемую мною сейчас?
-Для большинства людей, да. Но этот ответ не так уж однозначен.
+Для большинства людей это возможно.
+Но этот вопрос не так уж и однозначен.
-Большинство пользователей на самом деле не используют операционную систему. Они работают с приложениями. Именно прикладные программы и используют операционную систему. FreeBSD разработана для того, чтобы дать надежное и полнофункциональное окружение для приложений. Она поддерживает широкий спектр Web-браузеров, офисных пакетов, программ для работы с электронной почтой, графических пакетов, программных сред, сетевых серверов и многое другое. Большинство этих приложений могут быть получено из http://www.FreeBSD.org/ports/[Коллекции Портов].
+Большинство пользователей на самом деле не используют операционную систему. Они работают с приложениями. Именно прикладные программы и используют операционную систему. FreeBSD разработана для того, чтобы дать надежное и полнофункциональное окружение для приложений. Она поддерживает широкий спектр Web-браузеров, офисных пакетов, программ для работы с электронной почтой, графических пакетов, программных сред, сетевых серверов и многое другое. Большинство этих приложений могут
+быть получено из https://www.FreeBSD.org/ports/[Коллекции Портов].
Если приложение доступно только для одной операционной системы, то нельзя всего лишь заменить эту операционную систему. Однако есть вероятность, что похожая программа существует для FreeBSD. В качестве сервера для офиса, или сервера Интернет, или надежной рабочей станции FreeBSD практически всегда справится со всем, что вам нужно. Многие пользователи по всему миру, включая как новичков, так и опытных администраторов UNIX(R), используют FreeBSD в качестве своей единственной настольной операционной системы.
-Пользователи при переходе на FreeBSD с другого варианта UNIX(R) найдут для себя FreeBSD очень похожей. Пользователей Windows(R) и Mac OS(R), напротив, может заинтересовать http://www.pcbsd.org/[PC-BSD], дистрибутив на основе FreeBSD. Пользователям, которые не использовали до этого UNIX(R), понадобится затратить дополнительное время на изучение подхода UNIX(R) к работе. Этот FAQ и extref:{handbook}[Руководство по FreeBSD] являются прекрасным способом начать это изучение.
-
+Пользователям, переходящим на FreeBSD с другого варианта UNIX(R)-подобной
+системы, FreeBSD покажется очень знакомой. Пользователей Windows(R) и Mac
+OS(R), напротив, может привлечь использование одного из трёх дистрибутивов
+https://www.ghostbsd.org/[GhostBSD], https://www.midnightbsd.org/[MidnightBSD]
+или https://www.nomadbsd.org/[NomadBSD], предназначенных для настольных систем
+и построенных на базе FreeBSD. Пользователям, которые не использовали до этого
+UNIX(R), нужно понимать, что понадобится потратить дополнительное время на
+изучение подхода UNIX(R) к организации работы. Этот FAQ и
+extref:{handbook}[Руководство по FreeBSD] являются прекрасными отправными
+точками.</para>
+
+[[why-called-FreeBSD]]
=== Почему система называется именно FreeBSD?
* Она может использоваться безо всяческих выплат, даже для извлечения выгоды.
@@ -112,82 +143,130 @@ FreeBSD используется компаниями, Интернет-пров
Следует отметить, что слово "free" используется здесь в двух смыслах: один означает "бесплатно", а другой "делать всё, что хотите". За исключением пары вещей, которые вы _не можете_ делать с FreeBSD, например, претендовать на то, что являетесь её разработчиком, на самом деле можно делать с ней всё, что вам заблагорассудится.
-=== В чём заключается разница между FreeBSD и NetBSD, OpenBSD и другими операционными системами с открытыми кодами семейства BSD?
+[[differences-to-other-bsds]]
+=== В чём заключается разница между FreeBSD и NetBSD, OpenBSD и другими операционными системами с открытым кодом семейства BSD?
-Джеймс Ховард (James Howard) создал хорошее описание истории и различий между различными проектами под названием http://www.freebsdworld.gr/freebsd/bsd-family-tree.html[Семейное древо BSD], в котором даётся подробный ответ на этот вопрос. Некоторая информация там устарела, но историческая часть остаётся точной.
+Джеймс Ховард (James Howard) создал хорошее описание истории и отличий между разными проектами под названием https://jameshoward.us/archive/bsd-family-tree/[Семейное древо BSD], в котором даётся подробный ответ на этот вопрос.
+Часть информации там устарела, однако историческая часть остаётся точной.
-Многие из проектов семейства BSD обмениваются изменениями и готовым кодом даже сегодня. Все они происходят от общего предка.
+Многие из проектов семейства BSD обмениваются изменениями и готовым кодом даже
+сегодня. Все они происходят от общего предка.
-Цели проекта FreeBSD описаны выше в <<FreeBSD-goals>>. Цели других наиболее известных проектов семейства BSD можно кратко описать так:
+Цели проекта FreeBSD описаны выше в <<FreeBSD-goals>>. Цели других наиболее
+известных проектов семейства BSD можно кратко описать так:
-* OpenBSD в первую очередь ориентируется на безопасность операционной системы. Команда OpenBSD написала man:ssh[1] и man:pf[4], которые затем были портированы во FreeBSD.
+* OpenBSD ориентируется на то, что превыше всего является безопасность
+операционной системы.
+Команда OpenBSD написала man:ssh[1] и man:pf[4], которые были перенесены во
+FreeBSD.
* NetBSD ориентируется на простое портирование на другие аппаратные платформы.
* DragonFly BSD отделилась от FreeBSD 4.8, и с тех пор в ней были разработаны многие интересные собственные функциональные возможности, включая файловую систему HAMMER и поддержку "vkernels" - запуска ядра в пользовательском режиме.
+[[latest-version]]
=== Какова последняя версия FreeBSD?
На любом этапе разработки FreeBSD может существовать несколько параллельных веток. Релизы {rel-relx} выполняются из ветки {rel-stable}, а релизы {rel2-relx} выполняются из {rel2-stable}.
-До выпуска 9.0 линейка {rel2-relx} была известна как _-STABLE_. Однако к моменту выхода {rel-head-relx} линейка {rel2-relx} получит статус "extended support" (расширенная поддержка), и исправления будут вноситься только для серьезных проблем, к примеру исправления, связанные с безопасностью.
-
-Версия link:ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/i386/{rel120-current}-RELEASE/[{rel120-current}], дата выхода {rel120-current-date}, является последним релизом в ветке {rel-stable}. Версия link:ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/{rel112-current}-RELEASE/[{rel112-current}], дата выхода {rel112-current-date}, является последним релизом в ветке {rel2-stable}.
-
-Если вкратце, то ветка _-STABLE_ предназначена поставщикам услуг Internet, корпоративным пользователям, а также всем тем, кому в первую очередь нужна надёжность и минимальное количество отличий от последнего релиза по сравнению с новыми (и, возможно, ненадёжно работающими) возможностями последнего снэпшота _-CURRENT_. Релизы можно делать из любой ветки, но _-CURRENT_ предназначен для пользователей, которые готовы к постоянным (по сравнению со _-STABLE_) изменениям в работе системы.
+Вплоть до версии 12.0 ветка {rel2-relx} была известна как _-STABLE_.
+Однако к моменту выхода {rel-head-relx} ветка {rel2-relx} получит статус
+"extended support" (расширенная поддержка), и исправления будут вноситься
+только для серьёзных проблем, к примеру, связанных с безопасностью.
Релизы делаются <<release-freq,раз в несколько месяцев>>. Хотя многие стараются отслеживать актуальное состояние исходных текстов FreeBSD (обратите внимание на вопросы о <<current,FreeBSD-CURRENT>> и <<stable,FreeBSD-STABLE>>), делать это не обязательно, так как исходные тексты постоянно меняются.
-Более полную информацию о релизах FreeBSD можно получить на странице http://www.FreeBSD.org/ru/releng/[Информации о подготовке релизов] и на странице Справочника man:release[7].
+Более полную информацию о релизах FreeBSD можно получить на странице
+https://www.FreeBSD.org/releng/#release-build[Информации о подготовке релизов]
+и на странице Справочника man:release[7].
+[[current]]
=== Что такое FreeBSD-CURRENT?
-extref:{handbook}updating-upgrading, current[FreeBSD-CURRENT] - это версия операционной системы, находящаяся в стадии разработки, которая должна потом стать новой веткой FreeBSD-STABLE. Таким образом, она представляет реальный интерес только для разработчиков системы и её фанатов. Обратитесь к extref:{handbook}updating-upgrading[соответствующему разделу, current] extref:{handbook}[Руководства] для прояснения деталей работы с _-CURRENT_.
-
-Пользователям, не знакомым с FreeBSD, не следует использовать FreeBSD-CURRENT. Эта ветвь зачастую меняется очень быстро и иногда из-за ошибок может быть не работоспособна. Те, кто используют FreeBSD-CURRENT, должны быть в состоянии изучить проблему, найти причину и сообщить о этом.
+extref:{handbook}cutting-edge/[FreeBSD-CURRENT, current] - это версия
+операционной системы, находящаяся в стадии разработки, которая должна потом
+стать новой веткой FreeBSD-STABLE. Таким образом, она представляет реальный
+интерес только для разработчиков системы и её фанатов. Обратитесь к
+extref:{handbook}cutting-edge/[соответствующему разделу, current]
+extref:{handbook}[Руководства] для прояснения деталей работы с _-CURRENT_.
-Из веток _-CURRENT_ и _-STABLE_ выпускаются link:https://www.FreeBSD.org/snapshots/[снэпшоты] FreeBSD. Их предназначение:
+Пользователям, не знакомым с FreeBSD, не следует использовать FreeBSD-CURRENT.
+Эта ветка зачастую меняется очень быстро и иногда из-за ошибок может быть неработоспособной.
+Подразумевается, что те, кто используют FreeBSD-CURRENT, должны быть в состоянии изучить проблему, найти причину и сообщить о этом.
-* Тестирование самой последней версии программы установки системы.
-* Дать людям, которые хотят работать с _-CURRENT_ или _-STABLE_, но не имеют времени или возможности (пропускной способности) для отслеживания ежедневных изменений, простой способ её установки.
-* Фиксация точки для последующих ссылок в случае, если позже мы что-нибудь очень сильно сломаем. (Хотя Subversion, как правило, не позволяет случиться ничему такому ужасному.)
-* Все новые возможности, которым требуется тестирование, должны иметь как можно больше потенциальных тестеров.
+[[stable]]
+=== В чём смысл FreeBSD-STABLE?
-Не утверждается, что всякий снэпшот _-CURRENT_ имеет качество "готового продукта". Если нужна стабильно работающая и полностью оттестированная система, то придерживайтесь использования полных релизов или используйте снэпшоты _-STABLE_.
+_FreeBSD-STABLE_ является веткой разработки, из которой выполняются основные релизы.
+В эту ветку изменения вносятся медленнее, и при этом предполагается, что до этого они были протестированы во FreeBSD-CURRENT.
+Несмотря на это, исходный код FreeBSD-STABLE в любой момент времени может быть пригоден, а может быть и непригоден к широкому использованию, так как может содержать скрытые ошибки и вырожденные случаи, которые ещё не были выявлены во FreeBSD-CURRENT.
+Пользователям, не имеющим возможностей для тестирования, следует работать с самым свежим релизом FreeBSD.
+С другой стороны, _FreeBSD-CURRENT_ продолжает являться единой веткой, не разрываемой с момента выхода версии 2.0.
+
+Для получения более подробной информации о ветках обратитесь к разделу статьи "extref:{releng}[Подготовка релизов FreeBSD: Создание ветки релиза, rel-branch]", а состояние веток и расписание предстоящих релизов можно получить на странице https://www.FreeBSD.org/releng[Информация о подготовке релизов].
+Версия {u-rel123-announce}[{rel123-current}] является самым последним релизом в
+ветке {rel2-stable}; она была выпущена {rel123-current-date}). Версия
+{u-rel131-announce}[{rel131-current}] является самым последним релизом в
+ветке {rel-stable}; она была выпущена {rel131-current-date}).
+
+[[release-freq]]
+=== В какой момент выпускаются новые версии FreeBSD?
-Снэпшот-релизы доступны непосредственно link:https://www.FreeBSD.org/snapshots/[отсюда].
+{re} выпускает новую старшую версию FreeBSD в среднем каждые 18 месяцев и младшие версии каждые 8 месяцев. Даты релизов обычно объявляются заранее, так что те, кто работает над системой, знают, когда их проекты должны быть закончены и протестированы. Период тестирования предшествует выходу каждого релиза, для того, чтобы удостовериться в том, что добавление новых возможностей не повлияло на стабильность работы релиза. Многие пользователи расценивают такую осторожность как одну из приятнейших черт FreeBSD, хотя необходимость дожидаться _-STABLE_ для получения всех этих новых возможностей может несколько разочаровывать.
-Официальные снэпшоты постоянно генерируются для всех активно разрабатываемых веток.
+Дополнительная информация о процессе подготовки релиза (в том числе планы выпуска последующих релизов) может быть найдена на страницах Web-сайта FreeBSD, посвящённых https://www.FreeBSD.org/releng/[выпуску релизов].
-=== В чём смысл FreeBSD-STABLE?
-
-После того, как была выпущена FreeBSD 2.0.5, разработка FreeBSD разделилась на две части. Одна ветка получила название extref:{handbook}updating-upgrading[-STABLE, stable], а другая extref:{handbook}updating-upgrading[-CURRENT, current]. _FreeBSD-STABLE_ предназначена для провайдеров услуг Интернет и других коммерческих пользователей, для которых неожиданные изменения или экспериментальные возможности весьма нежелательны. В неё вносятся только хорошо оттестированные исправления и другие небольшие последовательные усовершенствования. С другой стороны, _FreeBSD-CURRENT_ являлась единой веткой, не разрываемой с момента выхода версии 2.0 и ведущей к {rel120-current}-RELEASE и последующим релизам. Для получения более подробной информации по веткам обратитесь к разделу статьи "extref:{releng}[Подготовка релизов FreeBSD: Создание ветки релиза, rel-branch]". Статус веток и расписание предстоящих релизов можно получить на странице http://www.FreeBSD.org/releng[Информация о подготовке релизов].
+Для тех, кому нужно или хочется, еженедельно выпускаются бинарные снапшоты, как описано выше.
-Активно разрабатываемой веткой _-STABLE_ является {rel120-current}-STABLE. Последним релизом в ветке {rel120-current}-STABLE является {rel120-current}-RELEASE, выпущенный {rel120-current-date}.
+[[snapshot-freq]]
+=== Когда выпускаются снэпшоты FreeBSD?
-Активно разрабатываемой веткой _-CURRENT_ является ветка {rel-head}, которая движется к созданию следующего поколения FreeBSD. Прочтите ответ на вопрос <<current,Что такое FreeBSD-CURRENT?>> для получения более подробной информации об этой ветке.
+link:https://www.FreeBSD.org/snapshots/[Снэпшот]-релизы FreeBSD
+выпускаются исходя из актуального состояния веток _-CURRENT_ и _-STABLE_.
+Цели выпуска каждого такого снэпшот-релиза таковы:
-=== В какой момент выпускаются новые версии FreeBSD?
+* Протестировать самую последнюю версию программы установки системы.
+* Дать людям, которые хотят работать с ветками _-CURRENT_ или _-STABLE_,
+но не имеют достаточно времени или пропускной способности сети
+для отслеживания ежедневных изменений, простой способ их
+начальной установки.
+* Зафиксировать состояние определённого кода на какой-то
+момент времени на случай, если позже мы что-нибудь очень сильно
+сломаем.
+(Хотя Git, как правило, не позволяет случиться ничему такому ужасному).
+* Обеспечить все новые функции и исправления, которым
+требуется тестирование, как можно большим количеством
+потенциальных тестировщиков.
-{re} выпускает новую старшую версию FreeBSD в среднем каждые 18 месяцев и младшие версии каждые 8 месяцев. Даты релизов обычно объявляются заранее, так что те, кто работает над системой, знают, когда их проекты должны быть закончены и протестированы. Период тестирования предшествует выходу каждого релиза, для того, чтобы удостовериться в том, что добавление новых возможностей не повлияло на стабильность работы релиза. Многие пользователи расценивают такую осторожность как одну из приятнейших черт FreeBSD, хотя необходимость дожидаться _-STABLE_ для получения всех этих новых возможностей может несколько разочаровывать.
+Не утверждается, что всякий снэпшот _-CURRENT_ с любой точки зрения имеет
+качество "готового продукта". Если нужна стабильно
+работающая и полностью протестированная система, то
+придерживайтесь политики использования полноценных релизов.
-Дополнительная информация о процессе подготовки релиза (в том числе планы выпуска последующих релизов) может быть найдена на страницах Web-сайта FreeBSD, посвящённых http://www.FreeBSD.org/releng/[выпуску релизов].
+Снэпшот-релизы доступны непосредственно
+link:https://www.FreeBSD.org/snapshots/[отсюда].
-Для тех, кому нужно или хочется, еженедельно выпускаются бинарные снапшоты, как описано выше.
+Официальные снэпшоты регулярно выпускаются для всех активно разрабатываемых
+веток.
-=== Кто разрабатывает FreeBSD?
+[[responsible]]
+=== Кто отвечает за разработку FreeBSD?
-Решения, которые касаются ключевых моментов в проекте FreeBSD, такие, как общее направление развития проекта или кто может добавлять код к дереву исходных текстов, принимаются link:https://www.FreeBSD.org/administration/#t-core[основной командой] разработчиков (Core Team), состоящей из 9 человек. Также существует многочисленная группа, состоящая из более чем 350 так называемых extref:{contributors}[коммиттеров, staff-committers] (committers), которые могут вносить изменения прямо в дерево исходных текстов FreeBSD.
+Ключевые решения, касающиеся проекта FreeBSD, такие, как общее направление развития проекта или кто может добавлять код к дереву исходных текстов, принимаются link:https://www.FreeBSD.org/administration/#t-core[управляющей командой] разработчиков (Core Team), состоящей из 9 человек.
+Также существует многочисленная группа, состоящая из более чем 350 так называемых extref:{contributors}[коммиттеров, staff-committers] (committers), которые могут вносить изменения прямо в дерево исходных текстов FreeBSD.
Однако большинство нетривиальных изменений широко обсуждается в <<mailing,списках рассылки>>, и не существует никаких ограничений на участие в подобных дискуссиях.
+[[where-get]]
=== Где можно найти FreeBSD?
-Все основные релизы FreeBSD доступны по FTP с link:ftp://ftp.FreeBSD.org/pub/FreeBSD/[FTP-сервера FreeBSD]:
+Все поддерживаемые релизы FreeBSD доступны на странице
+https://www.freebsd.org/where/[поиска релизов FreeBSD]:
-* Последний релиз {rel-stable}, {rel120-current}-RELEASE, можно найти в link:ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/i386/{rel120-current}-RELEASE[каталоге {rel120-current}-RELEASE].
-* link:https://www.FreeBSD.org/snapshots/[Снэпшот-релизы] для веток <<current,-CURRENT>> и <<stable,-STABLE>> выпускаются ежемесячно, но они нужны исключительно для разработчиков и тех, кто тестирует самые последние наработки.
-* Последний релиз {rel2-stable}, {rel112-current}-RELEASE, можно найти в link:ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/{rel112-current}-RELEASE/[каталоге {rel112-current}-RELEASE].
+* Для получения самого последнего релиза {rel-stable}, {rel132-current}-RELEASE, перейдите по ссылке для выбора link:https://www.freebsd.org/where/#download-rel132[соответствующей архитектуры и режима установки для {rel132-current}-RELEASE].
+* Для получения самого последнего релиза {rel2-stable}, {rel124-current}-RELEASE, перейдите по ссылке для выбора link:https://www.freebsd.org/where/#download-rel124[соответствующей архитектуры и режима установки для {rel124-current}-RELEASE].
+* link:https://www.FreeBSD.org/snapshots/[Снэпшот-релизы] для веток <<current,-CURRENT>> и <<stable,-STABLE>> выпускаются ежемесячно, но они нужны исключительно для разработчиков и тех, кто тестирует самые последние нововведения.
-Информация о получении/приобретении FreeBSD на CD, DVD и других носителях доступна в extref:{handbook}mirrors/[Руководстве, mirrors].
+Информация о возможностях получения FreeBSD на CD, DVD и других носителях
+доступна в extref:{handbook}mirrors/[Руководстве, mirrors].
=== Как можно получить доступ к базе сообщений о проблемах (Problem Report)?
@@ -199,18 +278,27 @@ extref:{handbook}updating-upgrading, current[FreeBSD-CURRENT] - это верс
== Документация и поддержка
+[[books]]
=== Есть ли хорошие книги по FreeBSD?
-В рамках проекта создан широкий спектр документации, которая доступна on-line по следующей ссылке: http://www.FreeBSD.org/docs/[http://www.FreeBSD.org/docs/]. Кроме того, в <<bibliography,Библиографии>> в конце этого FAQ и в extref:{handbook}bibliography/[Руководстве, bibliography] имеются ссылки на другие рекомендуемые для чтения книги.
+В рамках проекта создаётся обширная документация, которая доступна в онлайне по
+следующей ссылке: https://www.FreeBSD.org/docs/[https://www.FreeBSD.org/docs/].
-=== Есть ли версии документации в другом формате, например, в виде обычного текста ASCII или PostScript(R)?
+[[doc-formats]]
+=== Можно ли получить документацию в другом формате, например, в виде PDF?
-Да. Документация имеется в нескольких различных форматах и упакованная разными способами на FTP-сервере FreeBSD, и находится она в каталоге link:ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/[ /pub/FreeBSD/doc/].
+Да.
+link:https://download.freebsd.org/doc/[Документация доступна к сгрузке также и
+в других форматах] на сайте FreeBSD.
-Документация подразделяется на категории различными способами. Это включает:
+Каталоги с документацией подразделяется на категории в зависимости от:
+
+* Имени документа, например, `faq` или `handbook`.
+* Языка документа на базе наименования региональных настроек, размещаемых в
+каталоге [.filename]#/usr/share/locale# системы FreeBSD, без учёта кодировки,
+так как во всей документации сейчас используется UTF-8.
+На данный момент доступны следующие языки:
-* Имя документа, например, `faq` или `handbook`.
-* Язык и кодировка документа. Они опираются на имена локализаций, которые находятся в каталоге [.filename]#/usr/shared/locale# в системе FreeBSD. На данный момент поддерживаются следующие языки и кодировки:
+
[.informaltable]
[cols="1,1", frame="none", options="header"]
@@ -218,65 +306,62 @@ extref:{handbook}updating-upgrading, current[FreeBSD-CURRENT] - это верс
| Кодировка
| Язык
-|`en_US.ISO8859-1`
-|Английский (США)
+|`en`
+|Английский
-|`bn_BD.ISO10646-1`
+|`bn-bd`
|Бенгальский или Бангла (Бангладеш)
-|`da_DK.ISO8859-1`
-|Датский (Дания)
+|`da`
+|Датский
-|`de_DE.ISO8859-1`
-|Немецкий (Германия)
+|`de`
+|Немецкий
-|`el_GR.ISO8859-7`
-|Греческий (Греция)
+|`el`
+|Греческий
-|`es_ES.ISO8859-1`
-|Испанский (Испания)
+|`es`
+|Испанский
-|`fr_FR.ISO8859-1`
-|Французский (Франция)
+|`fr`
+|Французский
-|`hu_HU.ISO8859-2`
-|Венгерский (Венгрия)
+|`hu`
+|Венгерский
-|`it_IT.ISO8859-15`
-|Итальянский (Италия)
+|`it`
+|Итальянский
-|`ja_JP.eucJP`
-|Японский (Япония, кодировка EUC)
+|`ja`
+|Японский
-|`mn_MN.UTF-8`
-|Монгольский (Монголия, кодировка UTF-8)
+|`ko`
+|Корейский
-|`nl_NL.ISO8859-1`
-|Голландский (Нидерланды)
+|`mn`
+|Монгольский
-|`no_NO.ISO8859-1`
-|Норвежский (Норвегия)
+|`nl`
+|Голландский
-|`pl_PL.ISO8859-2`
-|Польский (Польша)
+|`pl`
+|Польский
-|`pt_BR.ISO8859-1`
+|`pt-br`
|Португальский (Бразилия)
-|`ru_RU.KOI8-R`
-|Русский (Россия, кодировка KOI8-R)
-
-|`sr_YU.ISO8859-2`
-|Сербский (Сербия)
+|`ru`
+|Русский
-|`tr_TR.ISO8859-9`
-|Турецкий (Турция)
+|`tr`
+|Турецкий
-|`zh_CN.UTF-8`
-|Упрощённый китайский (Китай, кодировка UTF-8)
+|`zh-cn`
+|Упрощённый китайский (Китай)
-|`zh_TW.UTF-8`
-|Традиционный китайский (Тайвань, кодировка UTF-8)
+|`zh-tw`
+|Традиционный китайский (Тайвань)
|===
+
[NOTE]
@@ -284,7 +369,12 @@ extref:{handbook}updating-upgrading, current[FreeBSD-CURRENT] - это верс
Некоторые документы могут иметься не на всех языках.
====
-* Формат документа. Мы создаём документацию в нескольких различных форматах. У каждого из форматов имеются свои плюсы и свои минусы. Некоторые форматы лучше подходят для чтения в on-line, когда как другие предназначены для получения эстетично выглядящей на бумаге копии. Наличие документации во всех этих форматах обеспечивает возможность прочтения нашими пользователями любой её части как с экрана монитора, так и на бумаге после вывода на печать. На данный момент поддерживаются следующие форматы;
+* Формат документа.
+Мы распространяем документацию в нескольких различных форматах.
+У каждого из форматов имеются свои плюсы и свои минусы.
+Некоторые форматы лучше подходят для чтения в on-line, тогда как другие предназначены для получения эстетично выглядящей бумажной копии.
+Наличие документации во всех этих форматах обеспечивает возможность прочтения нашими пользователями любой её части как с экрана монитора, так и на бумаге после вывода на печать.
+На данный момент доступны следующие форматы;
+
[.informaltable]
[cols="1,1", frame="none", options="header"]
@@ -292,76 +382,61 @@ extref:{handbook}updating-upgrading, current[FreeBSD-CURRENT] - это верс
| Формат
| Значение
-|`html-split`
-|Набор маленьких связанных друг с другом HTML-файлов.
-
|`html`
-|Один большой HTML-файл, полностью содержащий документ.
+|В зависимости от документа: Один большой HTML-файл, содержащий документ полностью, или набор небольших связанных HTML-файлов, в обоих случаях содержащих изображения, таблицы стилей и код JavaScript
|`pdf`
|Adobe's Portable Document Format
-
-|`ps`
-|PostScript(R)
-
-|`rtf`
-|Rich Text Format от Microsoft(R)
-
-|`txt`
-|Обычный текст
|===
-+
-[NOTE]
-====
-Номера страниц при загрузке Rich Text Format в Word автоматически не обновляются. Для обновления нумерации нажмите kbd:[Ctrl+A], kbd:[Ctrl+End], kbd:[F9] после загрузки документа.
-====
-
* Способ сжатия и создания архива.
-.. В случае формата `html-split`, файлы архивируются с помощью man:tar[1]. Получающийся файл [.filename]#.tar# затем подвергается сжатию по схемам, подробно описываемым далее.
-.. Все другие форматы генерируют один файл. Например, [.filename]#article.pdf#, [.filename]#book.html#, и так далее.
-+
-Эти файлы затем сжимаются по двум схемам сжатия, `zip` или `bz2`. Для работы с этими файлами можно использовать man:tar[1].
-+
-Таким образом, сжатая в `bzip2` версия Руководства в формате PostScript(R), будет находиться в файле с именем [.filename]#book.ps.bz2# в каталоге [.filename]#handbook/#.
+.. В случае формата `html`, файлы пакетируются с помощью man:tar[1].
+Получающийся файл [.filename]#.tar# затем сжимается утилитой man:gzip[1].
+.. При использовании формата PDF создаётся один файл. К примеру,
+[.filename]#explaining-bsd_en.pdf#, [.filename]#faq_en.pdf# и так далее.
-После выбора формата и способа компрессии, сгрузите упакованные файлы, распакуйте их, а затем скопируйте документацию в соответствующие места.
+Выбрав формат, сгрузите файлы, распакуйте их при необходимости, а затем
+скопируйте документацию в соответствующие места.
-Например, версия FAQ в виде отдельных HTML-файлов, упакованная при помощи man:bzip2[1], находится в файле [.filename]#doc/ru_RU.KOI8-R/books/faq/book.html-split.tar.bz2#. Для сгрузки и распаковки этого файла наберите:
+Например, HTML-версию FAQ можно найти в
+[.filename]#doc/en/books/faq/faq_en.tar.gz#. Для сгрузки и распаковки этого
+файла выполните:
[source,shell]
....
-# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/en_US.ISO8859-1/books/faq/book.html-split.tar.bz2
-# tar xvf book.html-split.tar.bz2
+% fetch https://download.freebsd.org/doc/en/books/faq/faq_en.tar.gz
+% tar xvf faq_en.tar.gz
....
-Если файл сжат, tar автоматически определит подходящий формат и корректно распакует файл в набор файлов [.filename]#.html#. Главным является [.filename]#index.html#, и в нём находится оглавление, вводный материал и ссылки на остальные части документа.
+Если файл сжат, tar автоматически определит подходящий формат и корректно его распакует, в результате чего появится набор файлов.
+Главным является [.filename]#index.html#, и в нём находится всё содержимое документа, начиная с оглавления, ссылающегося на остальные части документа.
+[[mailing]]
=== Где найти информацию по спискам рассылки FreeBSD? Какие существуют телеконференции по FreeBSD?
-Исчерпывающая информация содержится в extref:{handbook}eresources[разделе, eresources-mail] Руководства, который посвящён спискам рассылки, и в extref:{handbook}eresources/[разделе, eresources-news] Руководства, касающемся телеконференций.
+Исчерпывающая информация содержится в extref:{handbook}eresources/[разделе
+Руководства, eresources-mail], который посвящён спискам рассылки, и в
+extref:{handbook}eresources/[разделе Руководства, eresources-news], касающемся
+новостных конференций.
+[[irc]]
=== Существуют ли каналы IRC (Internet Relay Chat) по FreeBSD?
-Да, большинство сетей IRC имеют канал FreeBSD:
-
-* Канал `#FreeBSDhelp` в сети http://www.efnet.org/index.php[EFNet] предназначен для помощи пользователям FreeBSD.
-* Канал `#FreeBSD` в сети http://freenode.net/[Freenode] предназначен для помощи общего характера, на нём в любое время присутствует много посетителей. Общение в течение уже некоторого времени известно своей тенденцией сводиться к разговорам не по теме, но приоритет отдается пользователям с вопросами по FreeBSD. Другие пользователи помогут разобраться в основах, отсылая к Руководству по мере возможности и предлагая ссылки для более глубокого изучения интересующих тем. Это преимущественно англоговорящий канал, но туда приходят пользователи со всего мира. Тем, для кого английский не является родным, следует сперва задать вопрос на английском и затем перейти на подходящий канал `##freebsd-lang`.
-* Канал `#FreeBSD` в сети http://www.dal.net/[DALNET] доступен на сервере `irc.dal.net` в США и на `irc.eu.dal.net` в Европе.
-* Канал `#FreeBSD` в сети http://www.undernet.org/[UNDERNET] доступен на серверах `us.undernet.org` в США и `eu.undernet.org` в Европе. Так как это канал взаимопомощи, приготовьтесь к чтению документации, к которой вас отошлют.
-* Канал `#FreeBSD` в сети http://www.rusnet.org.ru/[RUSNET] это канал для русскоговорящих посетителей, посвящённый помощи пользователям FreeBSD. Также это хорошее место для нетехнических дискуссий.
-* Канал `#bsdchat` в сети http://freenode.net/[Freenode] это канал для посетителей, говорящих на китайском традиционном языке (кодировка UTF-8), посвящённый помощи пользователям FreeBSD. Также это хорошее место для нетехнических дискуссий.
+Да, в большинстве крупнейших сетей IRC имеется канал для обсуждения FreeBSD, а
+на wiki-странице FreeBSD размещён актуальный
+https://wiki.freebsd.org/IRC/Channels[список IRC-каналов].
-На FreeBSD wiki имеется http://wiki.freebsd.org/IrcChannels[хороший список] каналов IRC.
-
-Все каналы разные и не имеют отношения друг к другу. Поскольку их стили общения отличаются, попробуйте каждый, пока не найдёте подходящий вашему стилю общения.
+Все эти каналы разные и не связаны друг к другом. Поскольку их манеры общения
+отличаются, попробуйте каждый, пока не найдёте соответствующий вашему стилю.
+[[forums]]
=== Есть ли какие-нибудь web-форумы для обсуждения FreeBSD?
Официальные форумы FreeBSD расположены по адресу https://forums.FreeBSD.org/[https://forums.FreeBSD.org/].
+[[training]]
=== Где можно пройти платные курсы по FreeBSD и получить поддержку?
-http://www.ixsystems.com[iXsystems, Inc.], дочерней компанией которой является http://www.freebsdmall.com/[FreeBSD Mall], предоставляет http://www.ixsystems.com/bsdsupport[поддержку] FreeBSD и программного обеспечения PC-BSD на коммерческой основе, в дополнение к разработке FreeBSD и решениям, требующим тонкой настройки.
+http://www.ixsystems.com[iXsystems, Inc.], дочерней компанией которой является http://www.freebsdmall.com/[FreeBSD Mall], оказывает http://www.ixsystems.com/support[услуги поддержки] программного обеспечения FreeBSD на коммерческой основе, в дополнение к разработкам на платформе FreeBSD и решениям, требующим тонкой настройки.
BSD Certification Group, Inc. предоставляет сертификацию системного администрирования DragonFly BSD, FreeBSD, NetBSD и OpenBSD. Для получения дополнительной информации посетите http://www.BSDCertification.org[их сайт].
@@ -369,13 +444,16 @@ BSD Certification Group, Inc. предоставляет сертификаци
== Установка
+[[which-architecture]]
=== Какую архитектуру нужно загрузить? У меня есть 64-разрядный процессор Intel(R), но я вижу только amd64.
amd64 - это термин, применяемый во FreeBSD для обозначения 64-разрядной архитектуры x86 (также известна как "x86-64" или "x64"). На большинстве современных компьютеров следует использовать amd64. Для более старых подойдёт i386. При установке системы на отличную от x86 архитектуру, выберите платформу, наиболее подходящую для оборудования.
+[[floppy-download]]
=== Какой файл нужно скачать для установки FreeBSD?
-На странице http://www.freebsd.org/ru/where/[Получение FreeBSD] выберите `[iso]` с соответствующей оборудованию архитектурой.
+На странице https://www.freebsd.org/ru/where/[Получение FreeBSD] выберите
+`[iso]` с соответствующей оборудованию архитектурой.
Можно использовать любой из:
@@ -398,11 +476,11 @@ amd64 - это термин, применяемый во FreeBSD для обоз
|Минимальный образ, требующий сетевое подключение для завершения установки FreeBSD.
|===
-Пользователям pc98 нужны образы дискет: [.filename]#floppies/boot.flp#, [.filename]#floppies/kern1.flp#, [.filename]#floppies/kern2.flp# и [.filename]#floppies/mfsroot1.flp#. Эти образы нужно перенести на дискеты с помощью таких утилит, как man:dd[1].
-
-Полные инструкции по этой процедуре и об установке вообще можно найти в extref:{handbook}install/[разделе, install] Руководства, посвящённом установке FreeBSD.
+Полные инструкции по этой процедуре, а также более подробную информацию по
+общим вопросам, возникающим при установке, можно найти в
+extref:{handbook}bsdinstall[разделе Руководства об установке FreeBSD].
-=== Помогите! Установочный образ не загружается!
+=== Что нужно делать, если установочный образ не запускается?
Это может быть вызвано тем, что образ был загружен по FTP не в режиме _binary_.
@@ -410,23 +488,24 @@ amd64 - это термин, применяемый во FreeBSD для обоз
В случае использования командной строки FTP-клиента введите команду _binary_ в командной строке FTP после подключения к серверу, но перед началом передачи файла.
-=== Где инструкции по установке FreeBSD?
-
-Инструкции по установке FreeBSD 9.0 и более поздних версий могут быть найдены в extref:{handbook}bsdinstall/[главе, bsdinstall] Руководства, посвящённой установке FreeBSD. Также имеются инструкции по установке extref:{handbook}install/[предыдущих, install] версий FreeBSD.
-
-=== Какие минимальные требования для запуска FreeBSD?
+[[install-instructions-location]]
+=== Где находятся инструкции по установке FreeBSD?
-Для работы FreeBSD необходим ПК класса 486 и выше с оперативной памятью объёмом не менее 64 Мбайт и дисковым пространством не менее 1.1 Гбайт.
+Инструкции по установке можно найти в extref:{handbook}bsdinstall/[главе
+Руководства], посвящённой установке FreeBSD.
+[[custom-boot-floppy]]
=== Как сделать собственный установочный диск?
Индивидуальный установочный носитель FreeBSD можно создать, запустив процедуру построения индивидуального релиза. Следуйте инструкциям в статье о extref:{releng}[подготовке релизов FreeBSD].
-=== Может ли Windows(R) сосуществовать с FreeBSD?
+[[windows-coexist]]
+=== Может ли Windows(R) сосуществовать с FreeBSD? (специфично для x86)
Да, если Windows(R) установлена первой. Загрузчик FreeBSD будет управлять процессом выбора загрузки Windows(R) или FreeBSD. Если Windows(R) устанавливается следом, то это приведёт к перезаписи загрузчика. Если такое случится, обратитесь к следующему разделу.
-=== Другая операционная система уничтожила мой загрузчик операционной системы! Как мне его вернуть?
+[[bootmanager-restore]]
+=== Другая операционная система уничтожила мой загрузчик операционной системы! Как мне его вернуть? (специфично для x86)
Способ восстановления зависит от используемого загрузчика. Меню выбора загрузки, используемое во FreeBSD, можно переустановить с помощью man:boot0cfg[8]. Пример для восстановления меню загрузки на диске _ada0_:
@@ -444,24 +523,29 @@ amd64 - это термин, применяемый во FreeBSD для обоз
Более сложные ситуации, включая использование дисков GPT, рассматриваются в man:gpart[8].
-=== Я загрузился с компакт-диска, однако программа установки сообщила, что CD-ROM не найден. Куда он подевался?
-
-Обычной причиной возникновения такой проблемы является неправильно сконфигурированный привод CD-ROM. Теперь зачастую ПК продаются с CD-ROM, установленным как ведомое устройство на втором контроллере IDE, но без ведущего устройства на этом контроллере. Согласно спецификации ATAPI, такая конфигурация неверна, однако Windows(R) в таком случае всё же работает, и BIOS игнорирует это при загрузке. Вот почему BIOS может видеть CD-ROM при загрузке, а FreeBSD для завершения установки - нет.
-
-Переконфигурируйте систему так, чтобы CD-ROM оказался либо основным устройством на том IDE-контроллере, на котором он установлен, либо ведомым устройством на контроллере IDE, который имеет ведущее устройство.
-
+[[need-complete-sources]]
=== Нужно ли устанавливать исходные тексты системы?
В общем случае, нет. Для работы основной системы присутствие исходных текстов не требуется. Некоторые порты наподобие [.filename]#sysutils/lsof# не будут собираться без установленных исходных текстов системы. В частности, если порт собирает модуль ядра или напрямую обращается к структурам ядра, в этом случае исходные тексты должны быть установлены.
+[[need-kernel]]
=== Нужно ли перекомпилировать ядро?
-Обычно нет. Поставляемое ядро `GENERIC` содержит драйвера, необходимые для типичного компьютера. Инструмент man:freebsd-update[8] не может использоваться для обновления FreeBSD с собственным ядром. Поэтому по возможности стоит придерживаться использования ядра `GENERIC`. Для компьютеров с очень небольшим объёмом ОЗУ, таких как встраиваемые системы, может потребоваться собственное небольшое ядро, содержащее только необходимые драйверы.
+Обычно нет.
+Поставляемое ядро `GENERIC` содержит драйвера, необходимые для типового компьютера.
+Инструмент man:freebsd-update[8] не может использоваться для обновления FreeBSD с собственным ядром, и это является ещё одной причиной для того, чтобы по возможности придерживаться использования ядра `GENERIC`.
+Для компьютеров с очень небольшим объёмом ОЗУ, таких как встраиваемые системы, может потребоваться собственное небольшое ядро, содержащее только необходимые драйверы.
-=== Какой из паролей DES, Blowfish или MD5 я должен использовать, и как указать, какого типа пароли используются пользователями?
+[[password-encryption]]
+=== Какой из методов шифрования паролей (DES, Blowfish или MD5) я должен использовать, и как указать, шифрование какого типа применяется пользователями?
-Во FreeBSD 9 и выше по умолчанию используется _SHA512_. Пароли DES остаются доступны для обратной совместимости с более старыми операционными системами, в которых используется менее защищённый формат паролей. FreeBSD также поддерживает пароли в форматах Blowfish и MD5. Управление выбором используемого формата для новых паролей осуществляется через параметр входа `passwd_format` в файле [.filename]#/etc/login.conf#, принимающий значения `des`, `blf` (если они есть) или `md5`. Подробная информация о параметрах входа находится на странице Справочника man:login.conf[5].
+Во FreeBSD по умолчанию используется метод шифрования _SHA512_.
+Пароли, зашифрованные методом DES, остаются доступными для обратной совместимости с операционными системами, в которых всё ещё используется менее защищённый метод шифрования паролей.
+FreeBSD также поддерживает пароли в форматах Blowfish и MD5.
+Управление выбором используемого метода для новых паролей осуществляется через параметр входа `passwd_format` в файле [.filename]#/etc/login.conf#, принимающий значения `des`, `blf` (если они доступны) или `md5`.
+Подробная информация о параметрах входа находится на странице Справочника man:login.conf[5].
+[[ffs-limits]]
=== Какие существуют ограничения для файловой системы FFS?
Наибольший размер файловой системы FFS ограничен практически количеством памяти, которая требуется для работы man:fsck[8]. man:fsck[8] использует 1 бит на фрагмент, и для стандартного размера фрагмента 4 Кбайт это эквивалентно использованию 32 Мбайт памяти на терабайт дискового пространства. Это означает, что на архитектурах с ограничением размера пользовательского процесса в 2 Гбайт (например, i386(TM)) максимальный размер файловой системы, доступный для man:fsck[8], составляет ~60 Тбайт.
@@ -470,12 +554,14 @@ amd64 - это термин, применяемый во FreeBSD для обоз
Максимальный размер файла на FFS приблизительно равен 2 петабайт со стандартным размером блока 32 Кбайт. Каждый 32 Кбайтный блок может адресовать до 4096 блоков. С использованием тройной косвенной адресации это составляет 32 Кбайт * 12 + 32 Кбайт * 4096 + 32 Кбайт * 4096^2 + 32 Кбайт * 4096^3. Увеличение размера блока до 64 Кбайт увеличит максимальный размер файла в 16 раз.
+[[archsw-readin-failed-error]]
=== Я скомпилировал новое ядро и при загрузке получил сообщение об ошибке readin failed.
Ядро и компоненты системы не синхронизированы. Такая конфигурация не поддерживается. Обязательно используйте команды `make buildworld` и `make buildkernel` для обновления ядра.
Загрузите систему, непосредственно указав ядро на втором этапе загрузки, нажав любую клавишу до запуска загрузчика при появлении символов `|`.
+[[general-configuration-tool]]
=== Существует ли инструмент для настройки системы после её установки?
Да, bsdconfig предоставляет замечательный интерфейс для пост-установочной настройки FreeBSD.
@@ -486,23 +572,43 @@ amd64 - это термин, применяемый во FreeBSD для обоз
[[compatibility-general]]
=== Вопросы общего характера
-==== Я хочу приобрести аппаратуру для моей системы FreeBSD. Какая модель/производитель/тип лучше всего?
+[[which-hardware-to-get]]
+==== Я хочу приобрести некое оборудование для моей системы FreeBSD. Какая модель/производитель/тип лучше всего?
-Это постоянно обсуждается в списках рассылки FreeBSD и является ожидаемым вопросом, так как аппаратура меняется очень быстро. Обратитесь к Hardware Notes для FreeBSD link:{u-rel120-hardware}[{rel120-current}] или link:[{rel112-current}], а также http://www.FreeBSD.org/search/#mailinglists[архивам] списков рассылки перед тем, как задавать вопросы о самом последнем и лучшем оборудовании. Весьма вероятно, что обсуждение касаемо этого типа оборудования велось как раз на прошлой неделе.
+Это постоянно обсуждается в списках рассылки FreeBSD и является ожидаемым вопросом, так как аппаратура меняется очень быстро. Обратитесь к Hardware Notes для
+FreeBSD link:{u-rel123-hardware}[{rel123-current}] или
+link:{u-rel131-hardware}[{rel131-current}], а также поищите в
+https://www.FreeBSD.org/search/#mailinglists[архивах списков рассылки] перед
+тем, как задавать вопросы о самом последнем и лучшем оборудовании. Весьма
+вероятно, что обсуждение касаемо этого типа оборудования велось как раз на прошлой неделе.
-Перед приобретением лэптопа посмотрите архивы link:{freebsd-mobile} и {freebsd-questions} или, по возможности, более специфичные списки рассылки по данному типу оборудования.
+Перед приобретением лэптопа посмотрите архивы {freebsd-questions} или, возможно, более специфичные списки рассылки по данному типу оборудования.
-==== Какие существуют ограничения по памяти? Поддерживает ли FreeBSD больше 4 Гбайт памяти (ОЗУ)? Больше 16 Гбайт? Больше 48 Гбайт?
+[[memory-upper-limitation]]
+==== Каковы ограничения на оперативную память?
-FreeBSD как операционная система в целом поддерживает столько же физической памяти (ОЗУ), сколько аппаратная платформа, на которой она работает. Имейте в виду, что различные платформы имеют различные ограничения на память; например, i386(TM) без PAE поддерживает максимум 4 Гбайт памяти (и обычно еще меньше из-за адресного пространства PCI), а i386(TM) с PAE поддерживает максимум 64 Гбайт. Для FreeBSD 10 платформы AMD64 поддерживают до 4 Тбайт физической памяти.
+FreeBSD как операционная система в целом поддерживает столько же физической памяти (ОЗУ), сколько аппаратная платформа, на которой она работает.
+Имейте в виду, что различные платформы имеют различные ограничения на память; например, i386(TM) без PAE поддерживает максимум 4 Гбайт памяти (и обычно ещё меньше из-за адресного пространства PCI), а i386(TM) с PAE поддерживает максимум 64 Гбайт.
+Во FreeBSD 10 для платформы AMD64 поддерживается до 4 Тбайт физической памяти.
+[[memory-i386-over-4gb]]
==== Почему FreeBSD видит меньше 4 Гбайт памяти, когда система установлена на машину i386(TM)?
-Общее адресное пространство для машин i386(TM) является 32-разрядным; это означает, что адресоваться (т.е. быть получено) может не более 4 Гбайт памяти. Более того, некоторые адреса в этом диапазоне зарезервированы для различных целей аппаратным обеспечением, например, для использования и управления устройствами PCI, для доступа к видеопамяти, и так далее. Таким образом, общий объем памяти, используемой операционной системой для ядра и приложений, ограничен размером, значительно меньшим, чем 4 Гбайт. В такой конфигурации максимально доступная физическая память составляет от 3.2 Гбайт до 3.7 Гбайт.
+Общее адресное пространство для машин i386(TM) является 32-разрядным; это означает, что адресоваться (т.е. быть получено) может не более 4 Гбайт памяти.
+Более того, некоторые адреса в этом диапазоне зарезервированы для различных целей аппаратным обеспечением, например, для использования и управления устройствами PCI, для доступа к видеопамяти, и так далее.
+Таким образом, общий объем памяти, используемой операционной системой для ядра и приложений, ограничен размером, значительно меньшим, чем 4 Гбайт.
+В такой конфигурации максимально доступная физическая память составляет от 3.2 Гбайт до 3.7 Гбайт.
-Для преодоления ограничения в 3.2 Гбайт-3.7 Гбайт установленной памяти (т.е. для получения 4 Гбайт, но также более 4 Гбайт) должен использоваться специальный механизм, именуемый PAE. Сокращение PAE расшифровывается как Physical Address Extension (расширение физического адреса) и предоставляет для 32-разрядных x86 процессоров способ адресовать более 4 Гбайт памяти. PAE переназначает память, которая иначе была бы перекрыта адресными резервациями для аппаратных устройств выше диапазона 4 Гбайт, и использует ее как дополнительную физическую память (смотрите man:pae[4]). Использование PAE имеет свои недостатки; такая модель доступа к памяти является чуть более медленной по сравнению с обычным режимом (без PAE), и также не работают динамически загружаемые модули (смотрите man:kld[4]). Это означает, что все драйверы должны присутствовать статически в самом ядре.
+Для преодоления ограничения в 3.2 Гбайт-3.7 Гбайт установленной памяти (т.е. для получения 4 Гбайт, но также более 4 Гбайт) должен использоваться специальный механизм, именуемый PAE.
+Сокращение PAE означает Physical Address Extension (расширение физического адреса) и предоставляет для 32-разрядных x86 процессоров способ адресовать более 4 Гбайт памяти.
+PAE переназначает память, которая иначе была бы перекрыта адресными резервациями для аппаратных устройств выше диапазона 4 Гбайт, и использует её как дополнительную физическую память (смотрите man:pae[4]).
+Использование PAE имеет свои недостатки; такая модель доступа к памяти является чуть более медленной по сравнению с обычным режимом (без PAE), и также не работают динамически загружаемые модули (смотрите man:kld[4]).
+Это означает, что все драйверы должны присутствовать статически в самом ядре.
-Самый общий способ включить PAE - это собрать новое ядро со специальным уже подготовленным файлом конфигурации ядра, именуемым [.filename]#PAE#, который уже сконфигурирован для сборки безопасного ядра. Имейте в виду, что некоторые строки в этом файле конфигурации ядра являются слишком консервативными, и некоторые драйверы, помеченные как неготовые для использования с PAE, на самом деле являются годными. На практике, если драйвер работает на 64-разрядной архитектуре (такой как AMD64), он также работает с PAE. При создании своего собственного файла конфигурации ядра можно включить PAE, добавив следующую строку:
+Самый распространённым способом включения PAE является сборка нового ядра со специальным уже подготовленным файлом конфигурации ядра, именуемым [.filename]#PAE#, который уже сконфигурирован для сборки безопасного ядра.
+Имейте в виду, что некоторые строки в этом файле конфигурации ядра являются слишком консервативными, и некоторые драйверы, помеченные как неготовые для использования с PAE, на самом деле являются годными.
+На практике, если драйвер работает на 64-разрядной архитектуре (такой как AMD64), он также работает с PAE.
+При создании своего собственного файла конфигурации ядра можно включить PAE, добавив следующую строку:
[.programlisting]
....
@@ -514,23 +620,31 @@ PAE не является широко используемым в настоя
[[compatibility-processors]]
=== Аппаратные платформы и процессоры
+[[architectures]]
==== Поддерживает ли FreeBSD аппаратные платформы, отличные от x86?
-Да. Поддержка FreeBSD подразделяется на множество классов. Архитектуры первого класса, такие как i386 или amd64, полностью поддерживаются. Архитектуры 2 и 3 класса поддерживаются по мере возможности. Полное описание классов доступно в extref:{committers-guide}[справочнике коммиттера, archs].
+Полноценно поддерживаются архитектуры первого класса, такие, как
+i386 или amd64. Архитектуры 2 и 3 класса поддерживаются, исходя
+из принципа наибольшего внимания при имеющихся возможностях.
+Полное описание классов доступно в extref:{committers-guide}[Руководстве
+коммиттера, archs].
-Полный список поддерживаемых архитектур находится на http://www.FreeBSD.org/ru/platforms/[странице], посвящённой платформам.
+Полный список поддерживаемых архитектур находится на https://www.FreeBSD.org/ru/platforms/[странице], посвящённой платформам.
+[[smp-support]]
==== Поддерживает ли FreeBSD многопроцессорные системы (SMP)?
FreeBSD поддерживает симметричное мультипроцессирование (SMP) на всех невстраиваемых платформах (например, i386, amd64 и так далее). SMP также поддерживается для arm и MIPS, хотя некоторые процессоры могут это не поддерживать. В реализации SMP во FreeBSD используется мелкодисперсная синхронизация, и производительность масштабируется почти линейно с ростом количества процессоров.
За подробной информацией обращайтесь к странице Справочника man:smp[4].
-==== Что такое микрокод? Как установить обновления микрокода для процессоров Intel(R)?
+[[microcode]]
+==== Что такое микрокод? Как установить обновление микрокода для процессоров AMD или Intel?
-Микрокод - это программа, реализующая набор инструкций процессора на аппаратном уровне. Она позволяет исправлять ошибки процессора без замены микросхемы.
+Микрокод является программным средством реализации аппаратных инструкций процессора.
+Его использование позволяет исправлять ошибки процессора без замены микросхемы.
-Установите [.filename]#sysutils/devcpu-data#, а затем добавьте:
+Установите package:sysutils/cpu-microcode[], а затем добавьте:
[.programlisting]
....
@@ -539,34 +653,16 @@ microcode_update_enable="YES"
в [.filename]#/etc/rc.conf#
-[[compatibility-drives]]
-=== Жёсткие диски, ленточные устройства и приводы CD и DVD
-
-==== Какие типы винчестеров поддерживает FreeBSD?
-
-FreeBSD работает с дисками стандартов EIDE, SATA, SCSI и SAS (с совместимыми контроллерами; смотрите следующий раздел), и всеми дисками, использующими оригинальный интерфейс "Western Digital" (MFM, RLL, ESDI и, конечно же, IDE). Некоторые контроллеры ESDI, использующие собственные интерфейсы, могут и не работать: к таким относятся WD1002/3/6/7 и их клоны.
-
-==== Какие поддерживаются контроллеры SCSI или SAS?
-
-Полный список приведён в Hardware Notes для FreeBSD link:{u-rel120-hardware}[{rel120-current}] или link:[{rel112-current}].
-
-=== Какие типы стримеров поддерживаются?
-
-FreeBSD поддерживает все стандартные интерфейсы стримеров SCSI.
-
-==== Поддерживает ли FreeBSD роботов для смены лент?
+[[compatibility-peripherals]]
+=== Периферийные устройства
-FreeBSD поддерживает роботизированные устройства SCSI через устройство man:ch[4] и команду man:chio[1]. Подробная информация об управлении такими роботами находится на странице Справочника man:chio[1].
+[[supported-peripherals]]
+==== Какого рода периферийные устройства поддерживает FreeBSD?
-В то время как AMANDA и ещё ряд программных продуктов умеют работать с роботами, другие приложения могут только переносить ленты с одного места на другое. В этом случае надо отслеживать, в каком слоте находится нужная лента, и в какой слот нужно вернуть ленту, находящуюся в стримере.
-
-==== Какие приводы CD-ROM и CD-RW поддерживаются во FreeBSD?
-
-Поддерживаются любые SCSI-устройства чтения компакт дисков, подключенные к поддерживаемому контроллеру. Поддерживается большинство ATAPI-совместимых IDE CD-ROM.
-
-FreeBSD поддерживает все ATAPI-совместимые IDE-приводы CD-R или CD-RW. Более полная информация находится на странице Справочника man:burncd[8].
-
-FreeBSD поддерживает также все SCSI-приводы CD-R и CD-RW. Используйте команду `cdrecord` из пакета package:sysutils/cdrtools[].
+За информацией о списке оборудования, о котором известно, что оно
+работоспособно, а также данными о каких бы то ни было ограничечниях, обратитесь
+к Hardware Notes для FreeBSD link:{u-rel123-hardware}
+[{rel123-current}] или link:{u-rel131-hardware}[{rel131-current}].
[[compatibility-kbd-mice]]
=== Клавиатуры и мыши
@@ -574,7 +670,7 @@ FreeBSD поддерживает также все SCSI-приводы CD-R и C
[[moused]]
==== Можно ли использовать мышь вне X Window?
-Стандартный драйвер консоли man:syscons[4] предоставляет возможность использования указателя мыши в текстовых консолях для выделения и переноса текста. Запустите демон мыши man:moused[8] и включите отображение указателя мыши в виртуальной консоли:
+Используемый по умолчанию драйвер консоли man:syscons[4] предоставляет возможность использования указателя мыши в текстовых консолях для выделения и переноса текста. Запустите демон мыши man:moused[8] и включите отображение указателя мыши в виртуальной консоли:
[source,shell]
....
@@ -588,54 +684,70 @@ FreeBSD поддерживает также все SCSI-приводы CD-R и C
После запуска даемона мыши, доступ к мыши должен согласовываться между даемоном мыши и другими программами типа X Window. Обратитесь к вопросу из FAQ<<x-and-moused, Почему моя мышь не работает с X?>> для получения более полной информации по этому вопросу.
+[[text-mode-cut-paste]]
==== Как можно вырезать и копировать текст с помощью мыши в текстовой консоли?
-Удалить данные с помощью мыши нельзя. Однако их можно скопировать и вставить. После запуска даемона мыши, как описано в ответе на <<moused,предыдущий вопрос>>, нажмите кнопку 1 (левую) и двигайте мышь для выделения текста. Затем нажмите кнопку 2 (среднюю) для его вставки с позиции текстового курсора. Нажатие кнопки 3 (правой) "расширит" выбранную текстовую область.
+Удалить данные с помощью мыши нельзя.
+Однако их можно скопировать и вставить.
+После запуска даемона мыши, как описано в ответе на <<moused,предыдущий вопрос>>, нажмите кнопку 1 (левую) и двигайте мышь для выделения текста.
+Затем нажмите кнопку 2 (среднюю) для его вставки с позиции текстового курсора.
+Нажатие кнопки 3 (правой) "расширит" выбранную текстовую область.
Если у вашей мыши отсутствует средняя кнопка, её можно сэмулировать либо переназначить кнопки опциями даемона мыши. Обратитесь к справочным страницам по man:moused[8] для получения полной информации.
+[[mouse-wheel-buttons]]
==== У моей мыши есть дополнительные колёсико и кнопочки. Можно ли их использовать во FreeBSD?
Ответ, к сожалению, "в зависимости от обстоятельств". Эти мышки с дополнительными возможностями, как правило, требуют наличия специальных драйверов. До тех пор, пока драйвер мыши или прикладная программа не будут иметь отдельную поддержку такой мыши, она будет работать как стандартная двух- или трёхкнопочная мышь.
Возможные способы использования колёсиков мыши при работе в X Window описаны в <<x-and-wheel,другом разделе>>.
+[[keyboard-delete-key]]
==== Как использовать клавишу delete в sh и csh?
Для Bourne Shell добавьте следующие строки в [.filename]#~/.shrc#. Смотрите man:sh[1] и man:editrc[5].
[.programlisting]
....
-bind ^? ed-delete-next-char # для консоли
-bind ^[[3~ ed-delete-next-char # для xterm
+bind ^[[3~ ed-delete-next-char # for xterm
....
Для C Shell добавьте следующие строки в [.filename]#~/.cshrc#. Смотрите man:csh[1].
[.programlisting]
....
-bindkey ^? delete-char # для консоли
-bindkey ^[[3~ delete-char # для xterm
+bindkey ^[[3~ delete-char # for xterm
....
-За дополнительной информацией обращайтесь к http://www.ibb.net/~anne/keyboard.html[этой странице].
-
[[compatibility-other]]
=== Другое оборудование
+[[es1370-silent-pcm]]
==== Есть ли решение проблемы отсутствия звука при использовании звуковых адаптеров man:pcm[4]?
-Некоторые звуковые адаптеры при каждой загрузке сбрасывают уровень громкости в 0. Выполняйте следующую команду при каждой загрузке машины:
+Некоторые звуковые адаптеры при каждой загрузке устанавливают нулевой уровень
+громкости выводимого звука. При работе с FreeBSD 13 и более ранними версиями
+при каждой загрузке машины выполняйте следующую команду:
[source,shell]
....
# mixer pcm 100 vol 100 cd 100
....
+Используйте следующую команду при работе с FreeBSD 14 и более поздними
+версиями:
+
+[source,shell]
+....
+# mixer pcm.volume=100 vol.volume=100 cd.volume=100
+....
+
+[[power-management-support]]
==== Поддерживает ли FreeBSD управление энергосбережением на лэптопах?
FreeBSD поддерживает функции ACPI, реализованные в современном оборудовании. Дополнительная информация находится на странице Справочника man:acpi[4].
+[[troubleshoot]]
== Устранение некоторых проблем
=== Почему FreeBSD определяет неправильное количество памяти на аппаратуре i386(TM)?
@@ -652,6 +764,7 @@ FreeBSD поддерживает функции ACPI, реализованные
На 64nbsp;битной версии FreeBSD или в случае использования ядра с включённым PAE FreeBSD корректно определит и перераспределит память, так, что она станет годной к использованию. Тем не менее, во время загрузки может показаться, что FreeBSD определяет больше памяти, чем реально имеется в системе из-за описанного перераспределения. Это нормально, и информация о доступной памяти будет скорректирована по окончанию процесса загрузки.
+[[signal11]]
=== Программы аварийно завершают работу с ошибкой Signal 11.
Ошибки выполнения, связанные с сигналом 11, происходят, когда процесс пытается обратиться к области памяти, доступ к которой ему не был дан операционной системой. Если что-то подобное происходит в случайные, казалось бы, промежутки времени, следует начать поиск причины.
@@ -671,45 +784,63 @@ FreeBSD поддерживает функции ACPI, реализованные
Среди часто приводящих к этому причин:
-. Диски могут перегреваться. Проверьте работу вентиляторов.
-. Процессор перегревается. Это может произойти при разгоне процессора или при поломке процессорного вентилятора. В любом из вариантов убедитесь, что ваше оборудование работает так, как ему положено по крайней мере на момент поиска причин неисправности. В противном случае сбросьте частоту на настройки по умолчанию.
-+
-Что касается разгона, дешевле обходится медленная система, чем сгоревшая система, требующая замены! Также общественность не симпатизирует проблемам на таких системах.
-. Хитроумная память. Если установлены различные микросхемы SIMM/DIMM, вытащите их все и попробуйте по одной до локализации проблемы в проблематичной микросхеме DIMM/SIMM, либо их комбинации.
-. Чересчур оптимистичные настройки материнской платы. Настройки BIOS и перемычки на материнской плате предоставляют возможность задавать различные частоты и задержки. Часто бывает достаточно настроек по умолчанию, но иногда установка слишком малых периодов ожидания для ОЗУ или установка параметра "RAM Speed: Turbo" вызывает странное поведение. Возможным решением может стать установка параметров BIOS по умолчанию с предварительной записью текущих значений.
-. Неустойчивое или недостаточное электропитание материнской платы. Уберите неиспользуемые адаптеры ввода/вывода, винчестеры и приводы компакт-дисков или отключите их от кабеля электропитания для проверки, что блок питания может работать с меньшей нагрузкой. Или попробуйте воспользоваться другим блоком питания, желательно большей мощности. Например, если имеющийся блок питания рассчитан на 250 Ватт, попробуйте другой мощностью 300 Ватт).
+. Жёсткие диски могут перегреваться. Проверьте работоспособность вентиляторов, так как жёсткие диски и другое оборудование могут перегреваться.
+. Процессор перегревается. Это может произойти при разгоне процессора или при поломке процессорного вентилятора.
+В любом случае убедитесь, что ваше оборудование работает в нормальном режиме,
+как ему и положено, по крайней мере, на момент поиска причин неисправности.
+В противном случае сбросьте частоту на настройки по умолчанию.)
++
+Что касается разгона, то медленная система обходится дешевле, чем сгоревшая система, требующая замены!
+К тому же проблемы на таких системах не находят понимания общественности.
+. Проблемная память. Если установлены различные микросхемы SIMM/DIMM, вытащите их все и попробуйте по одной до локализации проблемы в проблематичной микросхеме DIMM/SIMM, либо их комбинации.
+. Чересчур оптимистичные настройки материнской платы. Настройки BIOS и перемычки на материнской плате предоставляют возможность задавать различные частоты и задержки.
+Часто бывает достаточно настроек по умолчанию, но иногда установка слишком малых периодов ожидания для ОЗУ или установка параметра "RAM Speed: Turbo" вызывает странное поведение.
+Возможным решением может стать установка параметров BIOS по умолчанию с предварительной записью текущих значений.
+. Неустойчивое или недостаточное электропитание материнской платы.
+Уберите неиспользуемые адаптеры ввода/вывода, жёсткие диски и приводы компакт-дисков или отключите их от кабеля электропитания для проверки, что блок питания может работать с меньшей нагрузкой.
+Или попробуйте воспользоваться другим блоком питания, желательно большей мощности.
+Например, если имеющийся блок питания рассчитан на 250 Ватт, попробуйте другой мощностью 300 Ватт.
Прочитайте раздел про <<signal11,Signal 11>> для дальнейшего объяснения и обсуждения, как аппаратура или программное обеспечение для тестирования памяти могут пропускать сбойную память. Подробная информация по этому вопросу содержится в http://www.bitwizard.nl/sig11/[FAQ по проблеме SIG11].
Наконец, если ничего не помогает, то, возможно, это из-за ошибки во FreeBSD. Следуйте <<access-pr,этим инструкциям>> для отправки сообщения о проблеме.
+[[trap-12-panic]]
=== Моя система аварийно завершает работу с сообщениями Fatal trap 12: page fault in kernel mode либо panic:, и выдаёт много дополнительной информации. Что мне делать?
Разработчики FreeBSD интересуются такими ошибками, но им нужно больше информации, чем просто текст ошибки. Скопируйте весь текст сообщения. Затем обратитесь к разделу FAQ об <<kernel-panic-troubleshooting,аварийных завершениях работы ядра>>, постройте отладочное ядро и получите трассу вызовов. Это может звучать трудной задачей, зато не требует навыков программирования. Просто следуйте указаниям.
+[[proc-table-full]]
=== Что означает сообщение об ошибке maxproc limit exceeded by uid %i, please see tuning(7) and login.conf(5)?
Ядро FreeBSD позволяет одновременно существовать ограниченному числу процессов. Это зависит от значения переменной man:sysctl[8] `kern.maxusers`. `kern.maxusers` также влияет на другие ограничения ядра, такие как буферы работы с сетью. Если система сильно загружена, поднимите `kern.maxusers`. Кроме максимального числа процессов это также увеличит значения других параметров, ограничивающих систему.
-Для корректировки значения `kern.maxusers` обратитесь к разделу extref:{handbook}config-tuning[Ограничения файлов/процессов, kern-maxfiles] Руководства. В нём говорится об открытых файлах, но те же ограничения касаются процессов.
+Для корректировки значения `kern.maxusers` обратитесь к разделу
+extref:{handbook}config/[Ограничения файлов/процессов, kern-maxfiles]
+Руководства. В нём говорится об открытых файлах, но те же ограничения касаются
+и процессов.
Если система загружена слабо, но в ней запущено слишком много процессов, поправьте параметр `kern.maxproc`, определив его значение в [.filename]#/boot/loader.conf#. Изменение не вступит в силу до перезагрузки системы. За дополнительной информацией, касающейся настройки параметров, обращайтесь к странице Справочника man:loader.conf[5]. Если эти процессы запущены одним и тем же пользователем, поправьте значение `kern.maxprocperuid`, чтобы оно было на единицу меньше, чем новое значение `kern.maxproc`. Оно должно быть меньше по крайней мере на единицу, потому что системная программа man:init[8] должна работать всегда.
+[[remote-fullscreen]]
=== Полноэкранные приложения на удалённой машине работают неправильно!
На удалённой машине тип терминала может отличаться от `xterm`, который требуется для использования консоли FreeBSD. Либо же ядро может иметь неправильные значения ширины и высоты терминала.
Проверьте, чтобы переменная окружения `TERM` имела значение `xterm`. Если удалённая машина его не поддерживает, попробуйте `vt100`.
-Запустите `stty -a`, чтобы узнать, какие размеры терминала заданы в ядре. Если значения неправильные, их можно поменять командой `stty rows _RR_ cols _CC_`.
+Запустите `stty -a`, чтобы узнать, какие размеры терминала заданы в ядре.
+Если значения неправильные, их можно поменять командой `stty rows _RR_ cols _CC_`.
Либо же, если на клиентской машине установлен package:x11/xterm[], запуск `resize` позволит узнать у терминала правильные размеры и применить эти значения.
+[[connection-delay]]
=== Почему подключение через ssh или telnet к моему компьютеру занимает так долго времени?
Симптом: между моментом установления TCP-соединения и выдачей клиентским программным обеспечением запроса на ввод пароля (или, в случае использования man:telnet[1], выдачей приглашения на вход) проходит большой промежуток времени.
-Проблема: скорее всего, задержка вызвана программным обеспечением на стороне сервера, которое пытается преобразовать IP-адрес клиента в имя хоста. Многие серверы, включая Telnet и SSH, поставляемые с FreeBSD, делают это для того, чтобы, кроме всего прочего, записать имя хоста в файле журнала для справки администратора.
+Проблема: скорее всего, задержка вызвана программным обеспечением на стороне сервера, которое пытается преобразовать IP-адрес клиента в имя хоста.
+Многие серверы, включая Telnet и SSH, поставляемые с FreeBSD, делают это для того, чтобы, кроме всего прочего, записать имя хоста в файле журнала для справки администратора.
Лечение: Если проблема возникает при подключении клиента к любому серверу, то причина в клиенте. Если проблема возникает только при чьей-либо попытке подключиться к серверу, то проблема в сервере.
@@ -719,10 +850,15 @@ FreeBSD поддерживает функции ACPI, реализованные
Из-за свежей установки FreeBSD, также возможно, что информация о домене и сервере имён отсутствует в [.filename]#/etc/resolv.conf#. Это часто будет вызывать задержку в работе SSH, так как опция `UseDNS` по умолчанию установлена в значение `yes` в [.filename]#/etc/ssh/sshd_config#. Если именно это является причиной проблемы, то добавьте недостающую информацию в [.filename]#/etc/resolv.conf#, либо в качестве временной меры установите `UseDNS` в `no` в файле [.filename]#sshd_config#.
+[[file-table-full]]
=== Почему в man:dmesg[8] регулярно выводятся сообщения file: table is full?
-Такое сообщение об ошибке сигнализирует о том, что в системе закончились доступные файловые дескрипторы. Обратитесь к разделу extref:{handbook}config-tuning[kern.maxfiles, kern-maxfiles] главы о extref:{handbook}config-tuning/[Настройке ограничений ядра, configtuning-kernel-limits] Руководства для выяснения всех подробностей и устранения этой проблемы.
+Такое сообщение об ошибке сигнализирует о том, что в системе закончились
+доступные файловые дескрипторы. Обратитесь к разделу
+extref:{handbook}config/[kern.maxfiles, kern-maxfiles] главы о
+extref:{handbook}config/[настройке ограничений ядра, configtuning-kernel-limits] Руководства для выяснения всех подробностей и поиска решения.
+[[computer-clock-skew]]
=== Почему часы на моем компьютере показывают неправильное время?
На компьютере установлено по меньшей мере два таймера, и FreeBSD выбрала не тот.
@@ -753,7 +889,7 @@ kern.timecounter.hardware: ACPI-fast
debug.acpi.disabled="timer"
....
-Либо же BIOS может изменить частоту TSC-может, для изменения скорости работы процессора при работе от батареек или переводя в режим пониженного электропитания, но FreeBSD не отслеживает это и в результате часы начинают спешить или отставать.
+Либо же BIOS может изменить частоту таймера TSC - возможно, для изменения скорости работы процессора при работе от батареи или переводя в режим пониженного электропитания, но FreeBSD не отслеживает это, и в результате часы начинают спешить или отставать.
В этом примере имеется также и таймер `i8254`, и он может быть выбран записью его имени в man:sysctl[3]-переменную `kern.timecounter.hardware`.
@@ -774,119 +910,146 @@ kern.timecounter.hardware=i8254
=== Что означает сообщение swap_pager: indefinite wait buffer:?
-Это значит, что процесс пытается сбросить страницу памяти на диск, и попытка сделать это оканчивается неудачно в течение более 20 секунд. Это может быть вызвано испорченными блоками на диске, кабелями, подключением или другим оборудованием ввода/вывода. Если диск сам по себе испорчен, вы также увидите ошибки работы с диском в [.filename]#/var/log/messages# и в выводе `dmesg`. В противном случае проверьте кабели и подключения.
+Это значит, что процесс пытается считать страницу памяти с
+диска, но попытки сделать это оканчиваются неудачно в течение
+более 20 секунд. Это может быть вызвано повреждёнными блоками
+на диске, кабелями, подключением или другим оборудованием ввода/вывода. Если диск сам по себе повреждён, вы также увидите ошибки работы с диском в [.filename]#/var/log/messages# и в выводе `dmesg`. В противном случае проверьте кабели и подключения.
-=== Что означают сообщения lock order reversal?
+[[lock-order-reversal]]
+=== Что такое lock order reversal?
-Ядро FreeBSD использует несколько блокировок для арбитража доступа к соответствующим ресурсам. Когда несколько потоков в ядре пытаются захватить несколько блокировок подряд, всегда существует возможность появления мёртвой блокировки (deadlock), где два потока захватили по одной блокировке и заблокированы в ожидании освобождения другим потоком второй блокировки. Такой проблемы синхронизации можно избежать, если все потоки захватывают блокировки в одинаковом порядке.
+Ядро FreeBSD использует несколько блокировок для арбитража доступа к соответствующим ресурсам.
+Когда несколько потоков в ядре пытаются захватить несколько блокировок подряд, всегда существует возможность появления мёртвой блокировки (deadlock), где два потока захватили по одной блокировке и заблокированы в ожидании освобождения другим потоком второй блокировки.
+Такой проблемы синхронизации можно избежать, если все потоки получают блокировки в одинаковом порядке.
-Система диагностирования блокировок man:witness[4], которая по умолчанию включена во FreeBSD-CURRENT и выключена для стабильных веток и релизов, определяет возможность появления мёртвых блокировок из-за ошибок их использования, включая захват нескольких блокировок в различном порядке в разных частях ядра. Инфраструктура man:witness[4] пытается обнаруживать эту проблему по мере её появления и сообщает о ней на системную консоль в сообщении `lock order reversal` (которое также часто называют LOR).
+Система диагностирования блокировок man:witness[4], которая по умолчанию включена во FreeBSD-CURRENT и выключена для стабильных веток и релизов, определяет возможность появления мёртвых блокировок из-за ошибок их использования, включая захват нескольких блокировок в различном порядке в разных частях ядра.
+Механизм man:witness[4] пытается обнаруживать эту проблему по мере её появления и сообщает о ней на системную консоль сообщением `lock order reversal` (которое также часто называют LOR).
-В силу консервативности man:witness[4] возможны ложные срабатывания. При правильном срабатывании такое сообщение _не_ означает, что система находится в состоянии мёртвой блокировки; его следует рассматривать как предупреждение о том, что в этом месте могла бы произойти мёртвая блокировка.
+В силу консервативности man:witness[4] возможны ложные срабатывания.
+При правильном срабатывании такое сообщение _не_ означает, что система находится в состоянии мёртвой блокировки; его следует рассматривать как предупреждение о том, что в этом месте могла произойти мёртвая блокировка.
[NOTE]
====
-Плохие LOR обычно быстро исправляют, поэтому перед написанием сообщения в списки рассылки следует проверить архивы link:{freebsd-current}.
+Плохие LOR обычно быстро исправляют, поэтому перед написанием сообщения в списки рассылки следует проверить архивы {freebsd-current}.
====
-=== Что означают сообщения Called ... with the following non-sleepable locks held?
+[[called-with-non-sleepable-locks-held]]
+=== Что означают сообщения `Called ... with the following non-sleepable locks held`?
Это означает, что функция, которая может находиться в "спящем" состоянии была вызвана во время использования мьютекс (или другого не "засыпающего") блокирования.
-Причина этого - ошибка, потому что мьютексы не предполагают находиться в удерживаемом состоянии длительные промежутки времени, а блокировать только на короткие периоды синхронизации. Это правило позволяет драйверам устройств использовать мьютексы для синхронизации с остальной частью ядра во время прерываний. Прерывания (во FreeBSD) могут находиться не в "спящем состоянии". Следовательно необходимо, чтобы не было подсистем в ядре, которые бы занимались блокировкой длительный период, используя мьютекс.
+Объяснением того, что это ошибка, является то, что мьютексы не предполагают нахождения в удерживаемом состоянии длительные промежутки времени, и блокируются только на короткие периоды синхронизации.
+Это правило позволяет драйверам устройств использовать мьютексы для синхронизации с остальной частью ядра во время прерываний.
+Прерывания (во FreeBSD) могут находиться не в "спящем состоянии". Следовательно необходимо, чтобы не было подсистем в ядре, которые бы занимались блокировкой длительный период, используя мьютекс.
Для нахождения таких ошибок в ядро могут быть добавлены assertions, которые будут взаимодействовать с подсистемой man:witness[4] для генерирования предупреждения или фатальной ошибки (в зависимости от системной конфигурации) в случаях когда производится потенциально блокирующий вызов с удержанием мьютекса.
-В общем, такие предупреждения не критичны, но тем не менее, с неудачной синхронизацией (timing) они могут вызвать нежелательные эффекты, начиная от незначительной задержки в ответной реакции системы до полной блокировки системы.
+В общем, такие предупреждения не критичны, но тем не менее, с неудачной синхронизацией (timing) они могут вызвать нежелательные эффекты, начиная от незначительной задержки в ответной реакции системы до полной её блокировки.
Дополнительная информация о синхронизации во FreeBSD находится на странице Справочника man:locking[9].
+[[touch-not-found]]
=== Почему процесс buildworld/installworld завершается с сообщением touch: not found?
Эта ошибка не означает, что не найдена утилита man:touch[1]. Ошибка наверняка появляется из-за того, что даты модификации файлов установлены в будущем. Если CMOS часы установлены на локальное время, отрегулируйте часовой механизм ядра, запустив команду `adjkerntz -i` в однопользовательском режиме.
+[[applications]]
== Прикладные программы
=== Где находятся все прикладные программы?
-Обратитесь на link:https://www.FreeBSD.org/ports/[страницу портов], содержащую информацию о программных продуктах, перенесённых во FreeBSD. На данный момент в этом списке находится более {numports} приложений и он ежедневно увеличивается, так что почаще туда заглядывайте или подпишитесь на {freebsd-announce}, в котором публикуется информация о появлении новых приложений.
+Обратитесь на link:https://www.FreeBSD.org/ports/[страницу портов], содержащую
+информацию о программных продуктах, перенесённых во FreeBSD.
-Большинство портов должно нормально работать во всех поддерживаемых версиях FreeBSD. Неработающие порты специально помечаются соответствующим образом. При выходе нового релиза FreeBSD в него в каталог [.filename]#ports/# включается актуальная на момент выхода Коллекция Портов.
+Большинство портов должно нормально работать во всех поддерживаемых версиях FreeBSD. Неработоспособные порты специально помечаются соответствующим образом. При выходе нового релиза FreeBSD в него в каталог [.filename]#ports/# также включается актуальная на момент выхода Коллекция Портов.
FreeBSD умеет работать со сжатыми двоичными пакетами для упрощения установки и удаления портов. Используйте man:pkg[7] для управления процессом установки пакетов.
-=== Как загрузить дерево Портов? Следует ли использовать SVN?
-
-Любым из указанных способов:
-
-* Используйте portsnap в большинстве случаев. Обратитесь к разделу extref:{handbook}ports/[Использование Коллекции Портов, ports-using] для получения инструкций по использованию этого инструмента.
-* Используйте SVN, если нужны собственные патчи для дерева портов. Обратитесь к разделу extref:{handbook}mirrors/[Использование Subversion, svn] для получения дополнительной информации.
-* Используйте CTM как это описано в разделе extref:{handbook}[Использование CTM] для получения изменений по почте при нестабильном соединении.
+[[how-do-download-ports-tree]]
+=== Как загрузить дерево Портов? Следует ли использовать Git?
-=== Поддерживает ли FreeBSD среду Java(TM)?
-
-Да. Для получения дополнительной информации посетите страницу link:https://www.FreeBSD.org/java/[http://www.FreeBSD.org/java/].
+Обратитесь к разделу
+extref:{handbook}ports/[Установка Коллекции Портов, ports-using-installation-methods].
+[[ports-4x]]
=== Почему этот порт не компилируется на моей машине с {rel2-relx} - или {rel-relx} -STABLE?
-Если установленная версия FreeBSD, значительно отстаёт от _-CURRENT_ или _-STABLE_, обновите Коллекцию Портов с использованием указаний в разделе extref:{handbook}ports/[Использование Коллекции Портов, ports-using]. Если система в актуальном состоянии, значит кто-то мог внести изменение в порт, с которым он работает в _-CURRENT_, но не работает в _-STABLE_. https://bugs.FreeBSD.org/submit/[Пошлите] сообщение об ошибке, так как Коллекция Портов должна работать как в _-CURRENT_, так и в ветках _-STABLE_.
+Если установленная версия FreeBSD значительно отстаёт от _-CURRENT_ или
+_-STABLE_, обновите Коллекцию Портов, следуя указаниям раздела
+extref:{handbook}ports/[Использование Коллекции Портов, ports-using]. Если
+система находится в актуальном состоянии, то, возможно, кто-то внёс изменение в
+порт, который работоспособен в _-CURRENT_, но
+не работает в _-STABLE_. https://bugs.FreeBSD.org/submit/[Отправьте]
+сообщение об ошибке, так как предполагается, что Коллекция Портов
+работает как для ветки _-CURRENT_, так и _-STABLE_.
+[[make-index]]
=== Я попытался сформировать файл INDEX командой make index, однако попытка окончилась неудачей. Почему?
Первым делом убедитесь, что Коллекция Портов находится в актуальном состоянии. Ошибки, которые отражаются на построении файла [.filename]#INDEX# из актуальной копии Коллекции Портов, бросаются в глаза и поэтому практически всегда исправляются немедленно.
-В редких случаях [.filename]#INDEX# не перестраивается из-за странных комбинаций значений переменных `WITH__*_` или `WITHOUT__*_`, заданных в файле [.filename]#make.conf#. Если вы думаете, что это ваш случай, прежде чем сообщать об этом в {freebsd-ports}, попытайтесь сформировать [.filename]#INDEX# с отключенными значениями этих переменных.
+В редких случаях [.filename]#INDEX# не перестраивается из-за странных
+комбинаций значений переменных `OPTIONS_SET`, заданных в
+файле [.filename]#make.conf#. Если вы подозреваете, что
+дело именно в этом, то, прежде чем сообщать об этом в {freebsd-ports},
+попытайтесь сформировать [.filename]#INDEX# с отключенными значениями этих
+переменных.
+[[ports-update]]
=== Я обновил исходные тексты. Как теперь обновить установленные порты?
-С FreeBSD не поставляется инструмент обновления портов, но есть несколько инструментов, немного облегчающих этот процесс. Кроме того, для упрощения работы с портами доступны дополнительные инструменты; смотрите раздел Руководства FreeBSD extref:{handbook}ports/[Использование Коллекции Портов, ports-using].
+С FreeBSD не поставляется инструмент обновления портов, но есть несколько инструментов, немного облегчающих этот процесс. Кроме того, для упрощения работы с портами доступны дополнительные инструменты; смотрите раздел Руководства FreeBSD extref:{handbook}ports/[об обновлении портов, ports-using].
+[[ports-major-upgrade]]
=== Нужно ли мне перекомпилировать все порты каждый раз, когда я выполняю мажорное обновление (со сменой старшей версии FreeBSD)?
-Да! На свежеобновленной системе программное обеспечение, скомпилированное под более старый релиз, будет по прежнему работать, но только до тех пор, пока вы не начнете устанавливать другие порты или обновлять существующие.
+Да!
+Хотя на новой системе программное обеспечение, скомпилированное под более старый релиз, будет работать, но только до тех пор, пока вы не начнёте устанавливать другие порты или обновлять существующие.
-Когда система обновлена, различные совместно используемые библиотеки, загружаемые модули и другие части системы замещаются более новыми версиями. Приложения, скомпонованные с более старыми версиями, могут перестать запускаться либо начнут функционировать неправильно.
+Когда система обновляется, различные совместно используемые библиотеки, загружаемые модули и другие части системы замещаются более новыми версиями. Приложения, скомпонованные с более старыми версиями, могут перестать запускаться либо начнут функционировать неправильно.
-Для получения дополнительной информации обращайтесь к link:{handbook.en}#freebsdupdate-upgrade[разделу, посвящённому обновлениям,] руководства FreeBSD.
+Для получения дополнительной информации обращайтесь к
+extref:{handbook}cutting-edge/[разделу, посвящённому обновлениям, freebsdupdate-upgrade]
+Руководства по FreeBSD.
+[[ports-minor-upgrade]]
=== Нужно ли мне перекомпилировать все порты каждый раз, когда я выполняю минорное обновление (без изменения старшей версии FreeBSD)?
-В общем случае, нет. Разработчики FreeBSD делают всё возможное для сохранения двоичной совместимости между всеми релизами в пределах одной старшей версии. Любые исключения из этого правила документируются в "Примечаниях к релизу", и там же даются советы, которых следует придерживаться.
+В общем случае этого не требуется.
+Разработчики FreeBSD делают всё возможное для сохранения двоичной совместимости между всеми релизами в пределах одной старшей версии. Любые исключения из этого правила документируются в "Примечаниях к релизу", и там же даются советы, которых следует придерживаться.
+[[minimal-sh]]
=== Почему возможности /bin/sh так малы? Почему бы во FreeBSD не использовать bash или какой-либо другой командный процессор?
Многим требуется, чтобы разрабатываемые скрипты для командного процессора были переносимы между многими системами. Именно поэтому в POSIX(R) очень подробно описан командный процессор и набор утилит. Большинство скриптов пишутся на языке процессора Bourne shell (man:sh[1]), к тому же некоторые важные программные вызовы (man:make[1], man:system[3], man:popen[3] и их аналоги на языках скриптов высокого уровня, таких как Perl или Tcl) предполагают для интерпретации команд использование именно Bourne shell. Так как Bourne shell используется столь широко и часто, то очень важно, чтобы он стартовал очень быстро, его поведение было строго регламентировано и при этом потребности в оперативной памяти были малы.
В имеющейся реализации мы приложили максимум усилий для воплощения в жизнь всех этих требований одновременно. Для того, чтобы сохранить `/bin/sh` небольшим по размеру, мы не включили многие из обычных возможностей, которые имеются в других командных процессорах. Для этого имеются в наличии командные процессоры, обладающие гораздо большими возможностями, такие как `bash`, `scsh`, man:tcsh[1] и `zsh`. Сравните использование памяти этими оболочками, посмотрев в колонки "VSZ" и "RSS" вывода команды `ps -u`.
-=== Как создать аудио-CD из файлов MIDI?
-
-Для создания аудио-CD из MIDI-файлов сначала установите из портов программу package:audio/timidity[], затем установите набор патчей GUS от Эрика Уэлша (Eric A. Welsh), доступный по адресу http://alleg.sourceforge.net/digmid.html[http://alleg.sourceforge.net/digmid.html]. После корректной установки TiMidity++ MIDI-файлы могут быть преобразованы в WAV-файлы следующей командой:
-
-[source,shell]
-....
-% timidity -Ow -s 44100 -o /tmp/juke/01.wav 01.mid
-....
-
-WAV-файлы затем могут быть преобразованы в другие форматы или записаны как аудио-CD, что описано в extref:{handbook}disks/[Руководстве FreeBSD, creating-cds].
-
+[[kernelconfig]]
== Конфигурирование ядра
[[make-kernel]]
=== Я хочу изменить настройки ядра. Это сложно?
-Вовсе нет! Обратитесь к extref:{handbook}kernelconfig/[соответствующему разделу, kernelconfig] Руководства, который посвящён этому вопросу.
+Вовсе нет!
+Обратитесь к extref:{handbook}kernelconfig/[разделу о настройке ядра]
+Руководства, который посвящён этому вопросу.
[NOTE]
====
-Новый файл [.filename]#kernel# будет установлен в каталог [.filename]#/boot/kernel# вместе со своими модулями, а старое ядро и его модули будут сдвинуты в каталог [.filename]#/boot/kernel.old#. Если сделана ошибка в конфигурации, просто загрузите предыдущую версию ядра.
+Новый файл [.filename]#kernel# будет установлен в каталог [.filename]#/boot/kernel# вместе со своими модулями, а старое ядро и его модули будут перемещены в каталог [.filename]#/boot/kernel.old#.
+Если сделана ошибка в конфигурации, просто загрузите предыдущую версию ядра.
====
+[[why-kernel-big]]
=== Почему моё ядро такое большое?
-Конфигурация ядра `GENERIC`, которая содержится в дистрибутиве FreeBSD, компилируется в _отладочном режиме_. В таком режиме ядра содержат много символьной информации в разных файлах, которая используется для отладки и сильно увеличивает размер [.filename]#/boot/kernel/#. Заметьте, что уменьшения производительности при использовании отладочного ядра нет или оно незначительно, однако отладочное ядро полезно иметь под рукой на случай аварийного завершения работы системы.
+Ядра `GENERIC`, поставляемые в составе FreeBSD, компилируется в _режиме отладки_.
+Ядра, построенные в таком режиме, содержат отладочную информацию, которая хранится в отдельных файлах, используемых для отладки.
+Файлы для отладки размещаются в [.filename]#/usr/lib/debug/boot/kernel/#.
+Заметьте, что снижения производительности при использовании отладочного ядра нет или оно незначительно, и отладочное ядро полезно иметь под рукой на случай аварийного завершения работы системы.
-Однако при нехватке дискового пространства существует несколько вариантов уменьшения размера [.filename]#>/boot/kernel/#.
+При нехватке дискового пространства существует несколько вариантов уменьшения размера [.filename]#/boot/kernel/# и [.filename]#/usr/lib/debug/#.
Чтобы не устанавливать файлы с символьной информацией, убедитесь в наличии следующей строки в [.filename]#/etc/src.conf#:
@@ -897,7 +1060,8 @@ WITHOUT_KERNEL_SYMBOLS=yes
Для получения дополнительной информации смотрите страницу Справочника man:src.conf[5].
-Если вы не хотите компилировать отладочное ядро, убедитесь в выполнении следующих условий:
+Если вы хотите совсем избежать создания файлов для отладки, убедитесь в
+выполнении следующих двух условий:
* В конфигурационном файле ядра нет такой строчки:
+
@@ -917,22 +1081,39 @@ makeoptions DEBUG=-g
MODULES_OVERRIDE= accf_http ipfw
....
-Замените _accf_httpd ipfw_ на нужный список модулей. Это уменьшит размер каталога с ядром, а также время сборки. Для получения дополнительной информации почитайте [.filename]#/usr/shared/examples/etc/make.conf#.
+Замените _accf_httpd ipfw_ на нужный список модулей. Это уменьшит размер
+каталога с ядром, а также время сборки. Для получения дополнительной
+информации почитайте [.filename]#/usr/share/examples/etc/make.conf#.
Для дальнейшего уменьшения размера также можно удалить ненужные устройства из ядра. Для получения дополнительной информации смотрите <<make-kernel>>.
-Для вступления любого из этих действий в силу следуйте указаниям по extref:{handbook}kernelconfig/[сборке и установке, kernelconfig-building] нового ядра.
+Для вступления любого из этих действий в силу следуйте указаниям по
+extref:{handbook}kernelconfig/[сборке и установке, kernelconfig-building] нового ядра.
-Большинство ядер ([.filename]#/boot/kernel/kernel#), как правило, занимают от 12 до 16 Мбайт.
+К вашему сведению, примерный размер ядра FreeBSD 11 amd64
+([.filename]#/boot/kernel/kernel#) составляет 25 Mбайт.
=== Почему мне не удаётся откомпилировать ни один вариант ядра, даже GENERIC?
Есть несколько причин, приводящих к возникновению этой проблемы:
-* Дерево исходных текстов отличается от того, что использовалось для построения работающей в данный момент системы. Перед обновлением прочитайте файл [.filename]#/usr/src/UPDATING#, обращая особое внимание на раздел "COMMON ITEMS" в его конце.
-* Команда `make buildkernel` не завершилась успешно. Корректное выполнение цели `make buildkernel` зависит от файлов, полученных после выполнения `make buildworld`.
-* Даже при построении <<stable,FreeBSD-STABLE>> возможно, что дерево исходных текстов было загружено в тот момент, когда оно модифицировалось или было неработоспособно. Построение гарантируется только для релизов, хотя в большинстве случаев <<stable,FreeBSD-STABLE>> строится без проблем. Попробуйте сгрузить дерево исходных текстов повторно и посмотрите, разрешилась ли проблема. Если с сервером есть проблемы, попробуйте другое зеркало.
-
+* Дерево исходных текстов отличается от того, что использовалось для построения
+работающей в данный момент системы.
+Перед обновлением прочитайте файл [.filename]#/usr/src/UPDATING#, обращая
+особое внимание на раздел "COMMON ITEMS" в его конце.
+* Выполнение команды `make buildkernel` не было успешно завершено. Корректное
+исполнение задачи `make buildkernel` зависит от файлов, полученных после
+выполнения `make buildworld`.
+* Даже при построении <<stable,FreeBSD-STABLE>> возможно, что дерево исходных
+текстов было загружено в тот момент, когда оно модифицировалось или было
+неработоспособно.
+Построение гарантируется только для релизов, хотя в большинстве случаев
+<<stable,FreeBSD-STABLE>> строится без проблем.
+Попробуйте сгрузить дерево исходных текстов повторно и посмотрите, решилась
+ли проблема. Если с зеркалирующим сервером есть проблемы, попробуйте
+использовать другое зеркало.
+
+[[scheduler-in-use]]
=== Какой планировщик используется в работающей системе?
Название используемого планировщика доступно напрямую в виде значения sysctl-параметра `kern.sched.name`:
@@ -949,10 +1130,12 @@ kern.sched.name: ULE
== Диски, файловые системы и начальные загрузчики
+[[adding-disks]]
=== Как добавить в систему новый диск?
-Обратитесь к разделу extref:{handbook}disks/[Добавление дисков, disks-adding] Руководства FreeBSD.
+Обратитесь к разделу extref:{handbook}disks/[Добавление дисков, disks-adding] Руководства по FreeBSD.
+[[new-huge-disk]]
=== Как перенести систему на большой новый диск?
Самый лучший способ заключается в переустановке операционной системы на новый диск с последующим переносом пользовательских данных. Это настоятельно рекомендуется при отслеживании ветки _-STABLE_ в течение более одного релиза или при обновлении релиза вместо установки нового. Установите booteasy на оба диска с помощью man:boot0cfg[8] и выполняйте загрузку с любого из них, пока не будете довольны новой конфигурацией. Пропустите следующий абзац, чтобы перейти к вопросу переноса данных после этой операции.
@@ -1008,6 +1191,7 @@ kern.sched.name: ULE
Для перемещения пользовательских данных также имеются программы man:cpio[1] и man:pax[1]. Известно, что они теряют информацию о флагах файлов, так что используйте их с осторожностью.
+[[safe-softupdates]]
=== На каких разделах можно без опаски использовать механизм Soft Updates? Я слышал, что использование Soft Updates на / могут приводить к проблемам. Что насчёт журналируемых Soft Updates?
Краткий ответ: обычно Soft Updates можно использовать без опаски на всех разделах.
@@ -1031,13 +1215,17 @@ kern.sched.name: ULE
FreeBSD поддерживает ряд других файловых систем.
UFS::
-Компакт-диски с файловой системой UFS могут быть смонтированы без всяких проблем. Монтирование файловых систем Digital UNIX или других систем, поддерживающих UFS, может быть более сложным, в зависимости от особенностей разбиения диска конкретной операционной системой.
+Компакт-диски с файловой системой UFS могут быть смонтированы без всяких проблем.
+Монтирование файловых систем Digital UNIX или других систем, поддерживающих UFS, может быть более сложным, в зависимости от особенностей разбиения диска конкретной операционной системой.
ext2/ext3::
-FreeBSD поддерживает разделы `ext2fs` и `ext3fs`. За дополнительной информацией обратитесь к странице Справочника man:ext2fs[5].
+FreeBSD поддерживает разделы `ext2fs`, `ext3fs` и `ext4fs`. За дополнительной
+информацией обратитесь к странице Справочника man:ext2fs[5].
NTFS::
-Поддержка NTFS через FUSE доступна через порт package:sysutils/fusefs-ntfs[]. Для получения более полной информации смотрите документацию к http://www.tuxera.com/community/ntfs-3g-manual/[ntfs-3g].
+Поддержка NTFS, реализованная на базе FUSE, доступна в виде порта
+package:sysutils/fusefs-ntfs[]. Для получения более полной информации
+обратитесь к man:ntfs-3g[8].
FAT::
Во FreeBSD имеется драйвер для работы с FAT в режиме чтения-записи. Для получения дополнительной информации обратитесь к странице справочника man:mount_msdosfs[8].
@@ -1047,19 +1235,27 @@ FreeBSD включает в себя портированную из Sun(TM) р
FreeBSD включает сетевую файловую систему NFS. В Коллекции портов FreeBSD имеется несколько приложений FUSE для поддержки многих других файловых систем.
+[[mount-dos]]
=== Как смонтировать вторичный раздел DOS?
-Вторичные разделы DOS находятся после _всех_ первичных разделов. Например, если "E" является вторым разделом DOS на втором диске SCSI, то здесь будет файл устройства для пятого "слайса" в каталоге [.filename]#/dev#. Чтобы смонтировать:
+Вторичные разделы DOS находятся после _всех_ первичных разделов.
+Например, если "E" является вторым разделом DOS на втором диске SCSI, то в
+каталоге [.filename]#/dev# будет находиться файл устройства для "слайса 5".
+Чтобы его смонтировать, выполните следующую команду:
[source,shell]
....
# mount -t msdosfs /dev/da1s5 /dos/e
....
+[[crypto-file-system]]
=== Существует ли криптографическая файловая система для FreeBSD?
-Да, man:gbde[8] и man:geli[8]. Смотрите раздел extref:{handbook}disks/[Шифрование дисковых разделов, disks-encrypting] Руководства FreeBSD.
+Да, man:gbde[8] и man:geli[8]. Обратитесь к разделу
+extref:{handbook}disks/[Шифрование дисковых разделов, disks-encrypting]
+Руководства по FreeBSD.
+[[grub-loader]]
=== Как загрузить FreeBSD и Linux(R) с помощью GRUB?
Для загрузки FreeBSD с использованием GRUB добавьте следующие строки в [.filename]#/boot/grub/menu.lst# или [.filename]#/boot/grub/grub.conf#, в зависимости от используемого дистрибутива Linux(R).
@@ -1073,16 +1269,20 @@ kernel /boot/loader
Где _hd0,a_ указывает на корневой раздел на первом диске. Чтобы указать номер слайса, напишите что-то вроде _(hd0,2,a)_. По умолчанию, если номер слайса не указан, GRUB ищет первый слайс c разделом `a`.
+[[booteasy-loader]]
=== Как загрузить FreeBSD и Linux(R) с помощью BootEasy?
-Установите LILO в начало загрузочного раздела Linux(R), а не в Master Boot Record. После этого LILO можно будет запустить LILO из BootEasy.
+Установите LILO в начало загрузочного раздела Linux(R), а не в Master Boot
+Record. После этого загрузите LILO из BootEasy.
Это рекомендуется делать при одновременном использовании Windows(R) и Linux(R), чтобы упростить восстановление работоспособности Linux(R) в случае переустановки Windows(R).
+[[changing-bootprompt]]
=== Как сменить приглашение загрузчика с ??? на что-нибудь более значащее?
Этого нельзя сделать со стандартным загрузчиком, не переписав его. В категории [.filename]#sysutils# Коллекции Портов есть ряд других менеджеров загрузки.
+[[removable-drives]]
=== Как использовать устройство для чтения сменных дисков?
Если у вас уже есть файловая система на устройстве, то используйте такую команду:
@@ -1122,34 +1322,51 @@ kernel /boot/loader
/dev/da0p1 /mnt ufs rw,noauto 0 0
....
-=== При монтировании компакт-диска выдаётся сообщение Incorrect super block.
+[[mount-cd-superblock]]
+=== Почему при монтировании компакт-диска выдаётся сообщение Incorrect super block?
-Необходимо указать тип монтируемого устройства. Это описано в в разделе Руководства extref:{handbook}disks[Использование CD с данными, creating-cds].
+Необходимо указать тип монтируемого устройства. Это описано в разделе
+Руководства extref:{handbook}disks/[Использование CD с данными, mounting-cd].
+[[cdrom-not-configured]]
=== При монтировании компакт-диска выдаётся сообщение Device not configured.
-Обычно это означает, что в приводе нет компакт-диска либо устройство не обнаружено на шине. Обратитесь к разделу extref:{handbook}disks[Использование CD с данными, mounting-cd] в Руководстве, где подробно обсуждается этот вопрос.
+Обычно это означает, что в приводе нет компакт-диска либо устройство не
+обнаружено на шине. Обратитесь к разделу extref:{handbook}disks/[Использование
+CD с данными, mounting-cd] в Руководстве, где подробно обсуждается этот вопрос.
-=== Когда я монтирую CD-ROM, все неанглийские символы в именах файлов выводятся как ?.
+[[cdrom-unicode-filenames]]
+=== Почему при монтировании CD-ROM во FreeBSD все неанглийские символы в именах файлов отображаются как вопросительные знаки?
-Скорее всего, на компакт-диске для хранения информации о файлах и каталогах используется расширение "Joliet". Это описано в разделе Руководства об extref:{handbook}disks[использовании CD с данными, mounting-cd].
+Скорее всего, на компакт-диске для хранения информации о файлах и каталогах используется расширение "Joliet". Это описано в разделе Руководства об
+extref:{handbook}disks/[использовании CD с данными, mounting-cd].
+[[burncd-isofs]]
=== Записанный во FreeBSD CD не читается ни в какой другой операционной системой. Почему?
-Это означает, что на CD был записан непосредственно необработанный файл без создания файловой системы ISO 9660. Прочтите раздел Руководства о extref:{handbook}disks[записи данных непосредственно на компакт-диски, rawdata-cd].
+Это означает, что на CD был записан непосредственно необработанный файл без создания файловой системы ISO 9660. Прочтите раздел Руководства об
+extref:{handbook}disks/[использовании CD с данными].
+[[copy-cd]]
=== Как создать образ CD с данными?
-Это описано в разделе Руководства о extref:{handbook}disks[копировании CD с данными, imaging-cd]. Более полную информацию о работе с компакт-дисками можно найти в разделе о extref:{handbook}disks/[создании компакт-дисков, creating-cds] в главе Руководства об устройствах хранения данных.
+Это описано в разделе Руководства о extref:{handbook}disks/[записи данных на
+файловую систему ISO, mkisofs]. Более полную информацию о работе с
+компакт-дисками можно найти в разделе о extref:{handbook}disks/[создании
+компакт-дисков, creating-cds] в главе Руководства об устройствах хранения
+данных.
-=== Почему я не могу смонтировать (командой mount аудио CD?
+[[mount-audio-CD]]
+=== Почему я не могу смонтировать аудио CD?
-Попытка смонтировать аудио CD приведёт к сообщению об ошибке вида: `cd9660: /dev/acd0c: Invalid argument`. Причина этого заключается в том, что команда `mount` работает только с файловыми системами. На аудио CD файловых систем нет; они содержат только данные. Используйте вместо этого программу, которая умеет читать аудио CD, например, порт package:audio/xmcd[].
+Попытка смонтировать аудио CD приведёт к сообщению об ошибке вида `cd9660: /dev/acd0c: Invalid argument`. Причина этого заключается в том, что команда `mount` работает только с файловыми системами. На аудио CD файловых систем нет; они содержат только данные. Используйте вместо этого программу, которая умеет читать аудио CD, например, порт package:audio/xmcd[].
+[[multi-session-CD]]
=== Как выполнить mount для многосеансового CD?
По умолчанию man:mount[8] будет пытаться смонтировать последнюю дорожку (сеанс) CD с данными. Для загрузки более раннего сеанса используйте параметр командной строки `-s`. За конкретными примерами обращайтесь к странице Справочника man:mount_cd9660[8].
+[[user-floppymount]]
=== Как разрешить обычным пользователям монтировать компакт-диски, DVD, USB-диски и другие сменные носители?
Как пользователь `root`, установите системную переменную `vfs.usermount` в значение `1`.
@@ -1194,66 +1411,109 @@ kernel /boot/loader
Имя устройства, использованное в предыдущих примерах, должно быть изменено в соответствии с конфигурацией.
====
-=== Команды du и df показывают разный объем доступного дискового пространства. Что происходит?
-
-Это связано с тем, как эти команды на самом деле работают. `du` проходит по дереву каталогов, замеряя, насколько большой объем занимает каждый файл, и выдает общий объем. `df` просто запрашивает файловую систему об оставшемся объеме. Это выглядит как одно и то же, однако файл без записи в каталоге затронет `df`, но не повлияет на `du`.
-
-Когда программа использует файл и этот файл удаляется, то на самом деле он не удаляется из файловой системы, пока программа не прекратит его использовать. Однако файл тут же удаляется из списка каталога. Представим себе файл достаточно большого размера, чтобы его присутствие влияло на вывод `du` и `df`. Если файл удаляется в процессе работы с ним команды `more`, команда `more` не сообщает сразу же, что не может просматривать файл. Запись о файле просто удалена из каталога, так что другие программы или пользователи не смогут к нему обратиться. Тем не менее, `du` покажет, что файл исчез, поскольку она просматривает дерево каталогов, а файла там нет. `df` показывает, что файл всё ещё здесь, так как файловая система знает, что `more` всё ещё использует это пространство. Как только закончится работа с `more`, команды `du` и `df` придут в соответствие.
-
-Такая ситуация часта на Web-серверах. Многие устанавливают Web-сервер на FreeBSD и забывают обновлять файлы протоколов. Журнал доступа заполняет [.filename]#/var#. Новый администратор удаляет файл, но система все еще сообщает о том, что раздел заполнен. Остановка и перезапуск программы Web-сервера освободит файл, позволяя системе освободить дисковое пространство. Для предотвращения этого настройте man:newsyslog[8].
+[[du-vs-df]]
+=== Команды du и df показывают разный объём доступного дискового пространства. Что происходит?
+
+Это связано с тем, как эти команды на самом деле работают. `du` проходит по дереву каталогов, подсчитывая, насколько большой объём занимает каждый файл, и выдает общий объем. `df` просто запрашивает файловую систему об оставшемся объеме. Это выглядит как одно и то же, однако файл без записи в каталоге затронет `df`, но не повлияет на `du`.
+
+Когда программа использует файл и этот файл удаляется, то на самом деле он не
+удаляется из файловой системы, пока программа не прекратит его использовать.
+Однако файл тут же удаляется из списка каталога. В качестве примера можно
+представить файл, размер которого достаточен, чтобы повлиять на результаты
+работы команд `du` и `df`. Любой файл, просматриваемый при помощи команды
+`more`, может быть удалён без выдачи сообщений об ошибке. Запись о файле
+просто удаляется из каталога, так что другие программы или пользователи не
+смогут к нему обратиться.
+Тем не менее, `du` покажет, что файл исчез, поскольку она просматривает дерево каталогов, а файла там нет. `df` показывает, что файл всё ещё здесь, так как файловая система знает, что `more` всё ещё использует это пространство. Как только закончится работа с `more`, команды `du` и `df` придут в соответствие.
+
+Такая ситуация часто встречается на Web-серверах.
+Многие устанавливают Web-сервер на FreeBSD и забывают выполнять ротацию файлов
+протоколов.
+Журнал доступа заполняет [.filename]#/var#.
+Новый администратор удаляет файл, но система всё ещё сообщает о том, что раздел
+заполнен.
+Остановка и перезапуск программы Web-сервера освободит файл, позволяя системе
+освободить дисковое пространство.
+Для предотвращения подобной ситуации настройте man:newsyslog[8].
Заметьте, что подсистема отложенных обновлений (Soft Updates) может задерживать освобождение дискового пространства, и может потребоваться до 30 секунд, чтобы изменения стали заметны.
=== Как добавить дополнительную виртуальную память?
-В этом разделе extref:{handbook}config-tuning/[Руководства, adding-swap-space] описывается, как это сделать.
+В этом разделе extref:{handbook}config/[Руководства, adding-swap-space]
+описывается, как это сделать.
+[[manufacturer-disk-size]]
=== Почему FreeBSD считает, что размер моего диска меньше, чем заявляет его производитель?
Производители дисков считают гигабайт равным миллиарду байт, а FreeBSD приравнивает его к 1073741824 байт. Это объясняет, почему, к примеру, в сообщениях при загрузке FreeBSD указывается, что ёмкость диска, объём которого должен быть равным 80 Гбайт, составляет 76319 Мбайт.
Заметьте также, что FreeBSD будет (по умолчанию) <<disk-more-than-full,резервировать>> 8% ёмкости диска.
+[[disk-more-than-full]]
=== Почему возможно заполнение раздела больше чем на 100%?
Часть каждого раздела UFS (по умолчанию 8%) зарезервировано для использования операционной системой и пользователем `root`. Утилита man:df[1] не учитывает это при подсчёте значения в колонке `Capacity`, так что оно может превышать 100%. Обратите внимание, что колонка `Blocks` всегда больше, чем сумма значений в колонках `Used` и `Avail`, обычно на 8%.
Для получения более подробной информации обратитесь к описанию опции `-m` в справке по man:tunefs[8].
-=== Почему загрузка FreeBSD задерживается на длительное время на системах с большим объёмом ОЗУ?
-
-FreeBSD выполняет короткую проверку памяти на раннем этапе загрузки. Обычно эта проверка занимает всего несколько секунд, но если система имеет много десятков или сотен Гбайт памяти, это можно занять до нескольких минут. Эту проверку можно отключить, установив `hw.memtest.tests` в значение `0` в [.filename]#/boot/loader.conf#.
-
-Для получения дополнительной информации смотрите страницу Справочника man:loader.conf[5].
-
== ZFS
-=== Какой минимальный объём ОЗУ нужно иметь для ZFS?
+=== Какой минимальный объём ОЗУ требуется для ZFS?
Для комфортного использования требуется 4 Гбайт ОЗУ, но конкретная нагрузка может сильно различаться.
-=== Что такое ZIL и когда оно используется?
-
-ZIL ((ZFS intent log) - это журнал записи, используемый для фиксации операций записи. Обычно операции собираются в группу транзакций и при заполнении группы пишутся на диск ("Transaction Group Commit"). Однако системные вызовы типа man:fsync[2] требуют фиксацию записи данных на устройстве перед возвратом управления. ZIL нужен для подтверждения такой записи, но когда данные ещё не находятся на диске. Группа транзакций помечается временной меткой. В случае системного сбоя ищется последняя неповреждённая метка и из ZIL извлекаются недостающие данные.
-
+[[what-is-zil]]
+=== Что такое ZIL и когда он используется?
+
+ZIL (ZFS intent log) представляет собой журнал операций записи, используемый
+для реализации логики подтверждения записи на диск в стандарте
+posix, которая работает при сбоях. При нормальной работе отдельные
+операции записи объединяются в группу транзакций и записываются на
+диск при заполнении группы ("Transaction Group Commit"). Однако системные
+вызовы типа man:fsync[2] требуют подтверждения записи данных на надёжное
+устройство перед возвратом управления. ZIL нужен для работы с операциями
+записи, которые были подтверждены как выполненные, но в рамках транзакции
+на диск ещё не записаны. Группы транзакций помечаются меткой
+времени. В случае сбоя выполняется поиск последней корректной
+метки и из ZIL извлекаются недостающие данные.
+
+[[need-ssd-for-zil]]
=== Нужен ли мне SSD для ZIL?
-По умолчанию ZFS хранит ZIL в пуле со всеми данными. Если приложение имеет большой процент записи, вынос ZIL на отдельное устройство с очень быстрой синхронной последовательной записью может улучшить общую производительность. В остальных случаях SSD вряд ли сможет что-то сильно улучшить.
+По умолчанию ZFS хранит ZIL в пуле со всеми данными.
+Если приложение интенсивно выполняет операции записи, то размещение
+ZIL на отдельном устройстве, обладающем высокими показателями
+скорости синхронной последовательной записи, может улучшить общую
+производительность системы. При другом характере нагрузки SSD вряд
+ли сможет что-то сильно улучшить.
+[[what-is-l2arc]]
=== Что такое L2ARC?
-L2ARC - это кеш на чтение, хранимый на быстром устройстве, таком как SSD. Этот кеш не сохраняется между перезагрузками. Следует заметить, что ОЗУ выступает как кеш первого уровня, а L2ARC задействуется только при нехватке ОЗУ.
+L2ARC - это кэш на чтение, хранимый на быстром устройстве, таком как SSD. Этот кэш не сохраняется между перезагрузками. Следует заметить, что ОЗУ выступает
+как кэширующее устройство первого уровня, а L2ARC необходим
+только при нехватке оперативной памяти.
-Для L2ARC нужно пространство в ARC для его индексации. Таким образом, рабочий набор, который идеально помещается в ARC, не будет помещаться при использовании L2ARC, потому что часть ARC будет отведена под индекс L2ARC с вытеснением части рабочего набора в L2ARC, более медленный, чем ОЗУ.
+L2ARC требует пространства в ARC для его индексации. Таким образом, рабочий
+набор, который идеально помещается в ARC, не будет там помещаться при
+использовании L2ARC, поскольку часть ARC будет отведена под индекс L2ARC с
+вытеснением части рабочего набора в L2ARC, более медленный, чем ОЗУ.
+[[should-enable-dedup]]
=== Целесообразно ли включение дедупликации?
В общем случае нет.
-Дедупликация занимает значительный объём ОЗУ и может увеличить задержки операций ввода/вывода. Если данные не являются сильно дублированными (образы виртуальных машин или пользовательские бекапы), то, возможно, дедупликация даст больше вреда. Другое соображение касается невозможности отменить статус дедупликации. Если данные записаны при включённой дедупликации, её выключение не приведёт к обратной репликации объединённых блоков до момента следующей перезаписи.
+Дедупликация занимает значительный объём ОЗУ и может увеличить задержки операций ввода/вывода.
+Если только данные не являются сильно дублированными (сильно дублированными являются образы виртуальных машин или резервные копии пользовательских данных), то дедупликация может принести больше вреда, чем пользы.
+Другое соображение касается невозможности отменить статус дедупликации.
+Если данные записаны при включённой дедупликации, её выключение не приведёт к обратной репликации объединённых блоков до момента их модификации.
-Дедупликация также может приводить к некоторым неожиданным ситуациям. В частности, удаление файлов может сильно замедлиться.
+Дедупликация также может приводить к некоторым неожиданным ситуациям.
+В частности, удаление файлов может сильно замедлиться.
+[[zpool-fully-full]]
=== Я не могу создать или удалить файлы на пуле ZFS. Как я могу это исправить?
Такое может произойти при 100% заполненности пула. ZFS требуется свободное место на диске для записи метаданных транзакций. Для восстановления работоспособного состояния пула обрежьте файл перед его удалением.
@@ -1263,50 +1523,65 @@ L2ARC - это кеш на чтение, хранимый на быстром у
% truncate -s 0 unimportant-file
....
-Обрезание файла работает по той причине, что новая транзакция при этом не запускается; вместо этого создаются новые свободные блоки.
+Обрезка файла работает по той причине, что новая транзакция при этом не
+запускается, но вместо этого создаются новые свободные блоки.
[NOTE]
====
-На системах с дополнительной настройкой ZFS dataset, такой как дедупликация, свободное место может не быть доступно сразу.
+На системах с дополнительными настройками наборов данных ZFS,
+такими, как дедупликация, свободное место может не быть доступно сразу.
====
+[[zfs-ssd-trim]]
=== Поддерживается ли TRIM в ZFS для твердотельных накопителей?
-Поддержка ZFS TRIM была добавлена во FreeBSD 10-CURRENT в ревизии rlink:https://svnweb.freebsd.org/changeset/base/240868[r240868] и стала доступна в ветках -STABLE в rlink:https://svnweb.freebsd.org/changeset/base/252162[r252162] и rlink:https://svnweb.freebsd.org/changeset/base/251419[r251419].
-
-ZFS TRIM включена по умолчанию и может быть отключена посредством добавления такой строки в [.filename]#/etc/sysctl.conf#:
+ZFS во FreeBSD 12.3 и 12.4: TRIM включен по умолчанию.
+Для отключения TRIM: добавьте строку ниже в файл
+[.filename]#/etc/sysctl.conf#, затем перезапустите систему.
[.programlisting]
....
-vfs.zfs.trim_disable=1
+vfs.zfs.trim.enabled=0
....
-[NOTE]
-====
-ZFS TRIM может не работать на всех конфигурациях, в частности для файловой системы ZFS на устройствах с использованием GELI.
-====
+OpenZFS во FreeBSD 13.0 и более старших версиях: обратитесь к
+man:zpool-trim[8] и изучите параметр `autotrim` в man:zpoolprops[7].
== Системное администрирование
+[[startup-config-files]]
=== Где расположены файлы конфигурации системы?
-Основным конфигурационным файлом является [.filename]#/etc/defaults/rc.conf#, который описан в man:rc.conf[5]). Этот файл подключают системные скрипты запуска, такие как [.filename]#/etc/rc# и [.filename]#/etc/rc.d#, которые описаны в man:rc[8]. _Не редактируйте этот файл!_ Вместо изменения параметра в [.filename]#/etc/defaults/rc.conf# скопируйте эту строку в [.filename]#/etc/rc.conf# и поменяйте значение там.
+Основным конфигурационным файлом является [.filename]#/etc/defaults/rc.conf#, который описан в man:rc.conf[5].
+Этот файл используют скрипты запуска системы, такие как [.filename]#/etc/rc# и [.filename]#/etc/rc.d#, которые описаны в man:rc[8].
+_Не редактируйте этот файл!_
+Вместо изменения параметра в [.filename]#/etc/defaults/rc.conf# скопируйте соответствующую строку в [.filename]#/etc/rc.conf# и поменяйте значение там.
-Пример запуска man:named[8], поставляемого с системой сервера DNS:
+К примеру, для запуска man:sshd[8], поставляемого с системой сервера OpenSSH:
[source,shell]
....
-# echo 'named_enable="YES"' >> /etc/rc.conf
+# echo 'sshd_enable="YES"' >> /etc/rc.conf
....
-Чтобы запустить местные сервисы, поместите скрипты в каталог [.filename]#/usr/local/etc/rc.d#. У этих скриптов должен быть выставлен бит выполнимости, по умолчанию используются права доступа `555`.
+Альтернативным способом является использование man:sysrc[8] для
+корректировки [.filename]#/etc/rc.conf#:
+[source,shell]
+....
+# sysrc sshd_enable="YES"
+....
+
+Для запуска локальных сервисов поместите соответствующие скрипты в каталог [.filename]#/usr/local/etc/rc.d#. У этих скриптов должен быть выставлен бит выполнимости, по умолчанию используются права доступа `555`.
+
+[[adding-users]]
=== Как проще всего добавить пользователя?
Используйте команду man:adduser[8] или man:pw[8] в случае выполнения более сложных операций.
Чтобы удалить пользователя, используйте команду man:rmuser[8] или, если это будет необходимо, man:pw[8].
+[[root-not-found-cron-errors]]
=== Почему после редактирования моего файла crontab я получаю сообщения вида root: not found?
Обычно это случается при редактировании системного файла crontab.
@@ -1320,7 +1595,8 @@ ZFS TRIM может не работать на всех конфигурация
# crontab -r
....
-=== Команда su выдает ошибку you are not in the correct group to su root, когда я пытаюсь сменить привилегии на root.
+[[su-wheel-group]]
+=== Команда su выдаёт сообщение you are not in the correct group to su root, когда я пытаюсь сменить привилегии на root.
Это особенность работы системы защиты. Для того, чтобы сменить пользовательский идентификатор с помощью `su` на пользователя `root` или любого другого с привилегиями суперпользователя, учётная запись должна являться членом группы `wheel`. Если бы этого не было, то любой, имеющий доступ к системе и узнавший пароль пользователя `root`, смог бы получить в системе уровень доступа суперпользователя.
@@ -1333,22 +1609,27 @@ ZFS TRIM может не работать на всех конфигурация
В примере выше пользователь `lisa` будет добавлен в группу `wheel`.
+[[rcconf-readonly]]
=== Я сделал ошибку в файле rc.conf или в каком-то другом файле начальной загрузки, и теперь не могу его отредактировать из-за того, что файловая система находится в режиме только для чтения. Что мне делать?
-Перезапустите систему, используя в приглашении загрузчика команду `boot -s` для входа в однопользовательский режим. При получении приглашения на ввод полного пути до командного процессора нажмите `Enter`, а затем выполните команду `mount -urw /` для повторного монтирования корневой файловой системы в режиме чтения/записи. Вам может также потребоваться выполнить команду `mount -a -t ufs` для монтирования файловой системы, в которой расположен ваш любимый текстовый редактор. Если редактор расположен на сетевой файловой системе, либо выполните сетевые настройки вручную до монтирования сетевой файловой системы, либо воспользоваться редактором, находящимся в локальной файловой системе, таким, как man:ed[1].
+Перезапустите систему, используя в приглашении загрузчика команду `boot -s` для входа в однопользовательский режим. При получении приглашения на ввод полного пути до командного процессора нажмите `Enter`, а затем выполните команду `mount -urw /` для повторного монтирования корневой файловой системы в режиме чтения/записи. Вам может также потребоваться выполнить команду `mount -a -t ufs` для монтирования файловой системы, в которой расположен ваш любимый текстовый редактор.
+Если редактор расположен на сетевой файловой системе, выполните сетевые настройки вручную до монтирования сетевой файловой системы, либо воспользуйтесь редактором, находящимся в локальной файловой системе, таким, как man:ed[1].
-Чтобы использовать полноэкранный редактор, такой как man:vi[1] или man:emacs[1], выполните команду `export TERM=xterm` во FreeBSD 9.0+ или `export TERM=cons25` во FreeBSD 8.X, чтобы такие редакторы смогли корректно взять данные из базы данных man:termcap[5].
+Чтобы использовать полноэкранный редактор, такой как man:vi[1] или man:emacs[1], выполните команду `export TERM=xterm`, чтобы эти редакторы смогли получить корректную информацию из базы данных man:termcap[5].
После выполнения этих шагов отредактируйте файл [.filename]#/etc/rc.conf# для исправления ошибки. Сообщение об ошибке, выводимое сразу же после сообщений при загрузке ядра, должно указать на номер строки в файле, которая содержит ошибку.
-=== У меня проблемы с установкой принтера.
+[[printer-setup]]
+=== Почему у меня возникают проблемы с установкой принтера?
-Обратитесь к соответствующему extref:{handbook}printing/[разделу, printing] Руководства, посвящённому печати, за советами по разрешению проблем.
+Обратитесь к соответствующему extref:{handbook}printing/[разделу] Руководства, посвящённому печати, за советами по разрешению проблем.
-=== Раскладка клавиатуры неверна.
+[[keyboard-mappings]]
+=== Как я могу откорректировать раскладку клавиатуры для моей системы?
-Обратитесь к разделу Руководства, посвящённому extref:{handbook}l10n/[использованию локализации, using-localization], а именно к части, описывающей extref:{handbook}l10n[настройку консоли, setting-console].
+Обратитесь к разделу Руководства, посвящённому extref:{handbook}l10n/[использованию локализации, using-localization], а именно к части, описывающей extref:{handbook}l10n/[настройку консоли, setting-console].
+[[user-quotas]]
=== Почему не получается заставить работать дисковые квоты?
. Возможно, что ядро не сконфигурировано должным образом для работы с квотами. В этом случае добавьте следующую строчку в конфигурационный файл ядра и пересоберите ядро:
@@ -1358,8 +1639,9 @@ ZFS TRIM может не работать на всех конфигурация
options QUOTA
....
-+
-Прочтитеextref:{handbook}disks/[главу руководства по квотам, quotas] для полной информации.
++
+Прочтите link:{handbook}disks/[главу Руководства по квотам, quotas] для
+получения полной информации.
. Не включайте квотирование на разделе [.filename]#/#.
. Помещайте файл с квотами в ту файловую систему, которую он обслуживает:
+
@@ -1379,9 +1661,11 @@ options QUOTA
|...
|===
+[[sysv-ipc]]
=== Поддерживает ли FreeBSD вызовы IPC из System V?
-Да, во FreeBSD в ядро [.filename]#GENERIC# включена поддержка IPC в стиле System V, в том числе совместно используемой памяти, сообщений и семафоров. В вашем собственном ядре поддержка может быть включена посредством загрузки модулей ядра [.filename]#sysvshm.ko#, [.filename]#sysvsem.ko# и [.filename]#sysvmsg.ko# или добавлением в конфигурационный файл ядра следующих строк:
+Да, во FreeBSD в ядро [.filename]#GENERIC# включена поддержка IPC в стиле System V, в том числе совместно используемой памяти, сообщений и семафоров.
+В нестандартном ядре поддержка может быть включена посредством загрузки модулей ядра [.filename]#sysvshm.ko#, [.filename]#sysvsem.ko# и [.filename]#sysvmsg.ko# или добавлением в конфигурационный файл ядра следующих строк:
[.programlisting]
....
@@ -1392,13 +1676,22 @@ options SYSVMSG # enable for messaging
Перекомпилируйте и переустановите ядро.
+[[sendmail-alternative]]
=== Какое другое программное обеспечение для почтового сервера можно использовать вместо Sendmail?
Сервер http://www.sendmail.org/[Sendmail] является программным обеспечением для работы почтового сервера во FreeBSD, используемым по умолчанию, но его можно заменить другим MTA, установленным из Коллекции Портов. В дереве портов имеется package:mail/exim[], package:mail/postfix[] и package:mail/qmail[]. Проверьте архивы списков рассылки на предмет обсуждения достоинств и недостатков имеющихся MTA.
+[[forgot-root-pw]]
=== Я забыл пароль пользователя root! Что делать?
-Без паники! Перезапустите систему, наберите `boot -s` в приглашении `Boot:` для входа в однопользовательский режим. На вопрос об используемой оболочке нажмите kbd:[Enter] для получения приглашения # . Введите `mount -urw /`, чтобы перемонтировать корневую файловую систему в режиме чтения/записи, после чего выполните команду `mount -a` для монтирования всех файловых систем. Запустите команду `passwd root`, чтобы сменить пароль пользователя `root`, а затем man:exit[1] для продолжения процесса загрузки.
+Без паники!
+Перезапустите систему, наберите `boot -s` в приглашении `Boot:` для входа в
+однопользовательский режим.
+На вопрос об используемой оболочке нажмите kbd:[Enter] для получения # в качестве приглашения.
+Выполните команду `mount -urw /`, чтобы перемонтировать корневую файловую
+систему в режиме чтения/записи, после чего выполните команду `mount -a` для
+монтирования всех файловых систем.
+Запустите команду `passwd root`, чтобы сменить пароль пользователя `root`, а затем man:exit[1] для продолжения процесса загрузки.
[NOTE]
====
@@ -1407,30 +1700,21 @@ options SYSVMSG # enable for messaging
[NOTE]
====
-Если корневой раздел не получается смонтировать в однопользовательском режиме, то возможно, что разделы являются зашифрованными, и смонтировать их без ключей доступа не представляется возможным. За дополнительной информацией обращайтесь к разделу extref:{handbook}disks/[Руководства, disks-encrypting], посвященному шифрованию дисков во FreeBSD.
+Если корневой раздел не получается смонтировать в однопользовательском режиме, то возможно, что разделы являются зашифрованными, и смонтировать их без ключей доступа не представляется возможным.
+За дополнительной информацией обратитесь к разделу extref:{handbook}disks/[Руководства, disks-encrypting], посвящённому шифрованию дисков во FreeBSD.
====
+[[CAD-reboot]]
=== Как запретить перезагрузку по нажатию Control Alt Delete?
-При использовании стандартного драйвера консоли man:syscons[4] перегенерируйте и установите новое ядро с таким параметром в конфигурационном файле:
-
-[.programlisting]
-....
-options SC_DISABLE_REBOOT
-....
-
-Этого также можно достичь установкой следующего man:sysctl[8], что не требует перезагрузки или пересборки ядра:
+При использовании стандартного драйвера консоли man:vt[4] этого можно добиться,
+задав следующий системный параметр man:sysctl[8]:
[source,shell]
....
-# sysctl hw.syscons.kbd_reboot=0
+# sysctl kern.vt.kbd_reboot=0
....
-[NOTE]
-====
-Оба этих метода являются взаимоисключающими. Данный man:sysctl[8] не существует, если ядро скомпилировано с параметром `SC_DISABLE_REBOOT`.
-====
-
=== Как преобразовать текстовые файлы DOS в формат UNIX(R)?
Воспользуйтесь следующей командой man:perl[1]:
@@ -1453,6 +1737,7 @@ options SC_DISABLE_REBOOT
Еще один способ отформатировать тестовые файлы DOS состоит в использовании package:converters/dosunix[] из Коллекции Портов. Для получения дополнительной информации ознакомьтесь с документацией порта.
+[[reread-rc]]
=== Как перечитать содержимое /etc/rc.conf и перестартовать /etc/rc без перезагрузки системы?
Перейдите в однопользовательский режим, а затем возвратитесь обратно в многопользовательский.
@@ -1464,6 +1749,7 @@ options SC_DISABLE_REBOOT
# exit
....
+[[release-candidate]]
=== Я пытался обновить мою систему до последней -STABLE, а получил -BETAx, -RC или -PRERELEASE! Что происходит?
Краткий ответ: это же просто название. _RC_ означает "Release Candidate". Это значит, что вскоре произойдет выход релиза. Во FreeBSD появление _-PRERELEASE_, как правило, равнозначно прекращению внесения изменений в код системы перед появлением релиза. (Для некоторых релизом метка _-BETA_ использовалась точно так же, как и _-PRERELEASE_.)
@@ -1472,8 +1758,9 @@ options SC_DISABLE_REBOOT
Когда делается релиз, то ветвь, из которой он выпускается, подвергается некоторой подготовке. Частью этого процесса является замораживание кода. Когда инициируется замораживание кода, то имя ветки изменяется для того, чтобы отразить факт близости релиза. Например, если ветка называлась 6.2-STABLE, то её имя будет изменено на 6.3-PRERELEASE, чтобы обозначить момент прекращения внесения изменений в код системы и период дополнительного тестирования перед выходом релиза. В это время исправления ошибок могут быть внесены в код системы для того, чтобы быть включенными в релиз. Когда исходный код подготовлен к выпуску релиза, имя будет изменено на 6.3-RC для обозначения того, что релиз будет сделан, скорее всего, именно из этого кода. Когда код находится на этапе RC, в нём могут исправляться только самые критичные ошибки. Как только релиз (в нашем примере 6.3-RELEASE) и ветка релиза будут созданы, ветвь будет переименована в 6.3-STABLE.
-Для получения дополнительной информации о номерах версий и различных ветках Subversion обратитесь к статье о extref:{releng}[выпуске релизов].
+Для получения дополнительной информации о номерах версий и различных ветках Git обратитесь к статье о extref:{releng}[выпуске релизов].
+[[kernel-chflag-failure]]
=== Я попытался установить новое ядро, однако утилита man:chflags[1] не сработала. Как это обойти?
Краткий ответ: Режим безопасности имеет значение больше нуля. Для установки ядра перезагрузите машину и войдите в однопользовательский режим.
@@ -1487,6 +1774,7 @@ options SC_DISABLE_REBOOT
Уровень безопасности нельзя понизить в многопользовательском режиме, поэтому для установки ядра загрузитесь в однопользовательский режим, или измените уровень безопасности в [.filename]#/etc/rc.conf#, а затем выполните перезагрузку. Обратитесь к странице Справочника по man:init[8] за подробной информацией о `securelevel` и посмотрите [.filename]#/etc/defaults/rc.conf# и справочную страницу по man:rc.conf[5] для выяснения подробностей о файле [.filename]#rc.conf#.
+[[kernel-securelevel-time]]
=== Не получается изменить системное время больше чем на одну секунду! Как это обойти?
Краткий ответ: Система работает на уровне безопасности со значением выше 1. Для смены даты перезагрузите машину и войдите в однопользовательский режим.
@@ -1500,40 +1788,62 @@ options SC_DISABLE_REBOOT
Уровень безопасности нельзя понизить в многопользовательском режиме. Для изменения даты перезагрузите систему в однопользовательский режим, либо измените уровень безопасности в [.filename]#/etc/rc.conf#, а затем выполните перезагрузку. Обратитесь к странице Справочника по man:init[8] за подробной информацией о `securelevel` и посмотрите [.filename]#/etc/defaults/rc.conf# и справочную страницу по man:rc.conf[5] для выяснения подробностей о файле [.filename]#rc.conf#.
-=== В rpc.statd; есть ошибка работы с памятью! Он использует 256 Мбайт оперативной памяти!
+[[statd-mem-leak]]
+=== Для чего rpc.statd использует 256 Мбайт оперативной памяти?
-Нет, там нет ошибок и он не использует 256 Мбайт памяти. Для удобства `rpc.statd` отображает неприлично большой кусок памяти в своё адресное пространство. Здесь нет ничего неправильного с технической точки зрения, это просто сбивает с толку программы вроде man:top[1] и man:ps[1]
+Нет, это не ошибка утечки памяти и он не использует 256 Мбайт оперативной памяти.
+Для удобства `rpc.statd` отображает большой объём памяти в своё адресное пространство.
+Здесь нет ничего ужасно неправильного с технической точки зрения; просто это сбивает с толку программы вроде man:top[1] и man:ps[1].
-man:rpc.statd[8] отображает свой статусный файл (находящийся на [.filename]#/var#) в свое адресное пространство. Для того, чтобы постоянно не беспокоиться о будущих переотражениях, когда файл вырастет в размерах, он просто отображает его с огромным размером заранее. Это просто заметить в исходных текстах, где как вы можете увидеть параметр длина к функции man:mmap[2] имеет значение `0x10000000`, или одна шестнадцатая адресного пространства для IA32, то есть 256 Мбайт.
+man:rpc.statd[8] отображает свой статусный файл ([.filename]#/var/db/statd.status#) в сообственное адресное пространство; для того, чтобы избежать последующих беспокойств о повторном отображении статусного файла в память, когда его размер нужно будет увеличить, под этот файл выделяется щедро заданный объём.
+[[unsetting-schg]]
=== Почему я не могу снять с файла флаг schg?
-Система работает с уровнем защиты выше нуля. Понизьте уровень защиты и попробуйте еще раз. Для получения более подробной информации обратитесь к <<securelevel,разделу FAQ об уровне защиты>> и справочной странице man:init[8].
+Система работает на уровне защиты выше нуля. Понизьте уровень защиты и
+попробуйте ещё раз. Для получения более подробной информации обратитесь к
+<<securelevel,разделу FAQ об уровне защиты>> и справочной странице man:init[8].
+[[vnlru]]
=== Что такое vnlru?
`vnlru` сбрасывает и освобождает vnode, когда система достигает ограничения по параметру `kern.maxvnodes`. Этот поток ядра в основном работает вхолостую и активируется только при наличии огромного объема ОЗУ и обращении к десяткам тысяч файлов небольшого размера.
+[[top-memory-states]]
=== Что означают различные состояния памяти, показываемые утилитой top?
* `Active`: по статистике страницы недавно использовались.
* `Inactive`: по статистике страницы недавно не использовались.
-* `Cache`: (наиболее часто) страницы, которых перемещены из числа неактивных в статус, в котором они содержат данные, но которые могут часто сразу же использоваться повторно (как с их старым содержимым, так и повторно с новым). Это может быть некоторое непосредственное перемещение из состояния `active` в состояние `cache`, если известно, что страница чиста (не модифицировалась), но такое перемещение определяется политикой, зависящей от выбора алгоритма разработчиком VM-системы.
-* `Free`: страницы, не содержащие данных, и которые могут быть использованы при некоторых условиях, когда страницы кэша могут не подойти. Свободные страницы могут повторно использоваться в состояниях прерывания или процессах.
+* `Laundry`: страницы, которые, согласно статистике, давно не использовались,
+но содержат данные, то есть их содержимое необходимо сохранить перед тем, как
+повторно использовать.
+* `Free`: страницы, не содержащие данных, и которые можно повторно использовать
+прямо сейчас.
* `Wired`: страницы, зафиксированные в памяти, обычно для использования ядром, а также иногда для специального использования процессами.
-Страницы чаще всего записываются на диск (типа синхронизации VM), когда они находятся в неактивном состоянии, однако страницы в активном состоянии также могут сбрасываться. Это зависит от наличия и возможности отслеживания со стороны ЦП бита 'модифицированности', и в некоторых ситуациях это может быть лучше для блока синхронизируемых страниц VM, вне зависимости от их активности. В большинстве встречающихся ситуаций лучше всего представлять неактивную очередь как очередь сравнительно неиспользуемых страниц, которые могут быть, а могут и не быть в процессе записи на диск. Кэшируемые страницы уже синхронизированы, не отображаются, но доступны для непосредственного использования процессом со своей старой или новой привязкой. Свободные страницы доступны на уровне прерывания, однако кэшируемые или свободные страницы могут использоваться в процессе повторно. Кэшируемые страницы недостаточно заблокированы для того, чтобы быть доступными на уровне прерывания.
+Страницы чаще всего записываются на диск (типа синхронизации VM), когда они находятся в состоянии Laundry, однако синхронизироваться могут также и страницы в состоянии Active и Inactive.
+Это зависит от возможности отслеживания центральным процессором бита 'модифицированности', и в некоторых ситуациях это может быть лучше для блока синхронизируемых страниц VM, вне зависимости от их принадлежности к той или иной очереди.
+В большинстве встречающихся ситуаций лучше всего представлять очередь Laundry как очередь условно неиспользуемых страниц, которые могут быть, а могут и не быть в процессе записи на диск.
+Очередь Inactive содержит как чистые, так и грязные страницы; чистые страницы ближе к голове очереди потребляются сразу же для восполнения нехватки свободных страниц памяти, а грязные страницы перемещаются в очередь Laundry для последующей обработки.
-Есть ещё некоторые другие флаги (например, флаг занятости или счётчик занятости), которые могут изменить некоторые описанные правила.
+Есть ещё некоторые другие флаги (например, флаг занятости или счётчик занятости), которые могут влиять на описанные правила.
+[[free-memory-amount]]
=== Сколько свободной памяти доступно?
-Есть несколько понятий "свободной памяти". В одном случае это объём памяти, непосредственно доступной в данный момент без страничной выгрузки чего-либо. Этот объём равен примерно размеру очереди кэша + размер очереди на высвобождение (с учётом допустимых отклонений, зависящих от настроек системы). В другом случае "свободная память" обозначает общий объём пространства VM. Он может сложно вычисляться, но зависит от объёма раздела подкачки и памяти. Другие определения "свободной памяти" также возможны, но они достаточно бесполезны, ведь в любом случае важно сохранять низкий уровень подкачки и избегать исчерпания раздела подкачки.
+Есть пара определений "свободной памяти".
+В наиболее распространённом случае это объём памяти, доступной к немедленному потреблению без высвобождения уже используемой.
+Этот объём равен объёму очереди свободных страниц вместе с некоторыми другими зарезервированными страницами.
+Этот размер доступен в виде man:sysctl[8]-переменной `vm.stats.vm.v_free_count`, которая показывается, например, утилитой man:top[1].
+Во втором случае "свободная память" обозначает общий объём виртуальной памяти, доступной пользовательским процессам, который зависит от объёма раздела подкачки и доступной к использованию оперативной памяти.
+Другие определения "свободной памяти" также возможны, но они достаточно бесполезны, ведь в любом случае важно сохранять низкий уровень подкачки и избегать исчерпания раздела подкачки.
-=== Что такое /var/empty?
+[[var-empty]]
+=== Что такое [.filename]#/var/empty#?
[.filename]#/var/empty# представляет собой каталог, который используется в программе man:sshd[8] при выполнении разделения полномочий. Каталог [.filename]#/var/empty# пуст, его владельцем является `root`, и на нём установлен флаг `schg`. Этот каталог не должен удаляться.
+[[newsyslog-expectations]]
=== Я поменял /etc/newsyslog.conf. Как проверить правильность изменений?
Чтобы посмотреть, что будет делать man:newsyslog[8], используйте следующую команду:
@@ -1549,12 +1859,14 @@ man:rpc.statd[8] отображает свой статусный файл (на
== X Window System и виртуальные консоли
+[[whatis-X]]
=== Что такое X Window System?
X Window System (обычно `X11`) является наиболее общедоступной оконной системой, которая может работать на UNIX(R) и UNIX(R)-подобных системах, в том числе и во FreeBSD. Разработкой стандартов на используемый http://en.wikipedia.org/wiki/X_Window_System_core_protocol[X-протокол] занимается организация http://www.x.org/wiki/[The X.Org Foundation], с текущей эталонной реализацией version 11 release 7.7, поэтому название часто сокращается до `X11`.
Для разных архитектур и операционных систем существует множество реализаций этой системы. Реализацию кода для серверной части называют `X-сервером`.
+[[running-X]]
=== Я хочу запустить Xorg, как это сделать?
Для установки Xorg выполните одно из действий:
@@ -1567,22 +1879,26 @@ X Window System (обычно `X11`) является наиболее обще
[source,shell]
....
-# pkg install xorg
+# pkg install xorg
....
-После установки Xorg следуйте указаниям в разделе extref:{handbook}x11/[Конфигурация X11, x-config] Руководства FreeBSD.
+После установки Xorg следуйте указаниям в разделе
+extref:{handbook}x11/[Конфигурация X11, x-config] Руководства по FreeBSD.
-=== Я попытался запустить X, но получил сообщение No devices detected. после ввода команды startx. Что мне теперь делать?
+[[running-X-securelevels]]
+=== Я попытался запустить X, но получил сообщение 'No devices detected' после ввода команды startx. Что мне теперь делать?
Вероятно, в системе установлен повышенный уровень безопасности (`securelevel`). При повышенном уровне защиты систему X запустить невозможно, потому что X требуются права на операции записи в устройство man:io[4]. Дополнительная информация находится на странице Справочника man:init[8].
-Существует два решения проблемы: установить значение `securelevel` обратно в ноль или запускать man:xdm[1] (или любой другой оконный менеджер) во время загрузки, до того как повышается значение `securelevel`.
+Существует два решения проблемы: возвратить нулевое значение `securelevel` или запускать man:xdm[8] (или любой другой менеджер дисплеев) во время загрузки, до того, как будет повышено значение `securelevel`.
-Обратитесь к <<xdm-boot>> для получения более полной информации о запуске man:xdm[1] во время загрузки.
+Обратитесь к <<xdm-boot>> для получения более полной информации о запуске
+man:xdm[8] во время загрузки.
+[[x-and-moused]]
=== Почему моя мышь не работает с X?
-При использовании стандартного драйвера консоли man:syscons[4] во FreeBSD можно включить поддержку указателя мыши во всех виртуальных экранах. Во избежание конфликтов с X, драйвер man:syscons[4] поддерживает виртуальное устройство [.filename]#/dev/sysmouse#. Все события от реального устройства мыши пишутся в устройство man:sysmouse[4] через man:moused[8]. Чтобы использовать мышь на одной и более виртуальных консолях, и при этом продолжать использовать X, посмотрите <<moused>> и настройте man:moused[8].
+При использовании стандартного драйвера консоли man:vt[4] во FreeBSD можно включить поддержку указателя мыши во всех виртуальных экранах. Во избежание конфликтов с X, драйвер man:vt[4] поддерживает виртуальное устройство [.filename]#/dev/sysmouse#. Все события от реального устройства мыши пишутся в устройство man:sysmouse[4] через man:moused[8]. Чтобы использовать мышь на одной и более виртуальных консолях, и при этом продолжать использовать X, посмотрите <<moused>> и настройте man:moused[8].
Затем отредактируйте [.filename]#/etc/X11/xorg.conf#, чтобы в нём были следующие строки:
@@ -1615,6 +1931,7 @@ link sysmouse mouse
# service devfs restart
....
+[[x-and-wheel]]
=== У моей мыши есть колёсико. Могу ли я его использовать при работе в X?
Да, если X настроена для использования 5-кнопочной мыши. Для этого добавьте строчки `Buttons 5` и `ZAxisMapping 4 5` в раздел "InputDevice" файла [.filename]#/etc/X11/xorg.conf# как показано в этом примере:
@@ -1631,7 +1948,8 @@ Section "InputDevice"
EndSection
....
-Для использования мыши в Emacs также добавьте в [.filename]#~/.emacs# следующие строки:
+Использование мыши может быть активировано в Emacs путём добавления в
+[.filename]#~/.emacs# следующих строк:
[.programlisting]
....
@@ -1665,7 +1983,7 @@ Option "Device" "/dev/psm0"
EndSection
....
-И не забыть добавить следующее в раздел "ServerLayout":
+Добавьте в раздел "ServerLayout" вот что:
[.programlisting]
....
@@ -1707,11 +2025,6 @@ ttyvb "/usr/libexec/getty Pc" xterm on secure
Чем больше виртуальных терминалов, тем больше ресурсов используется. Это может привести к проблемам на системах с 8 Мбайт ОЗУ или меньше. Подумайте о смене статуса консолей с `secure` на `insecure`.
-[NOTE]
-====
-Во FreeBSD до версии 9.0 использовался тип терминала "cons25" вместо "xterm". При добавлении в [.filename]#/etc/ttys# новых записей используйте существующий формат.
-====
-
[IMPORTANT]
====
Чтобы запустить сервер X, нужно зарезервировать под него хотя бы один виртуальный терминал со значением `off`. Это означает, что под виртуальные консоли можно отвести только одиннадцать функциональных клавиш, и ещё одна остаётся за X-сервером.
@@ -1726,32 +2039,35 @@ ttyvb "/usr/libexec/getty Pc" xterm off secure
Самым простым способом активировать виртуальные консоли является перезагрузка.
+[[vty-from-x]]
=== Как осуществляется доступ к виртуальным консолям из X?
Используйте комбинацию клавиш kbd:[Ctrl+Alt+Fn] для переключения обратно в виртуальную консоль. Нажмите kbd:[Ctrl+Alt+F1], чтобы вернуться на первую виртуальную консоль.
После того, как вы оказались в текстовой консоли, используйте комбинации kbd:[Alt+Fn] для переключения между ними.
-Чтобы вернуться в сеанс работы X, переключитесь в виртуальную консоль, на которой запущена X Window. Если X был запущен из командной строки с использованием команды `startx`, то сеанс работы X будет привязан к следующей неиспользуемой виртуальной консоли, а не к той текстовой консоли, с которой он был запущен. В случае восьми активных виртуальных терминалов X будет работать на девятом, поэтому используйте комбинацию kbd:[Alt+F9].
+Чтобы вернуться в сеанс работы X, переключитесь в виртуальную консоль, на которой запущена X Window.
+Если X была запущена из командной строки с использованием команды `startx`, то сеанс работы X будет привязан к следующей неиспользуемой виртуальной консоли, а не к той текстовой консоли, с которой она была запущен.
+В случае восьми активных виртуальных терминалов X будет работать на девятом, поэтому используйте комбинацию kbd:[Alt+F9].
[[xdm-boot]]
=== Как запустить XDM во время загрузки?
-Есть две философские школы, проповедующие различные методы запуска man:xdm[1]. Последователи одного течения запускают `xdm` из [.filename]#/etc/ttys# (посмотрите man:ttys[5]), используя приводимый пример, тогда как другие вставляют запуск `xdm` в скрипт [.filename]#rc.local# (посмотрите справку по man:rc[8]) или [.filename]#X#, помещая последний в каталог [.filename]#/usr/local/etc/rc.d#. Оба метода равноправны, и один из них может работать в ситуациях, с которыми не справляется другой и наоборот. В обоих случаях результат один и тот же: X выводит графическое приглашение для входа в систему.
+Есть две философские школы, проповедующие различные методы запуска man:xdm[8].
+Последователи одного течения запускают `xdm` из [.filename]#/etc/ttys#
+(посмотрите man:ttys[5]), используя приводимый там пример, тогда как другие
+устанавливают значение параметра `xdm_enable=yes` в [.filename]#/etc/rc.conf#.
+Оба метода равноправны, и один из них может работать в ситуациях, с которыми не
+справляется другой, и наоборот. В обоих случаях результат один и тот же: X
+выводит графическое приглашение для входа в систему.
Плюсом метода с использованием man:ttys[5] является документирование того, на каком vty будет запущен X и то, что ответственность за перезапуск X-сервера при завершении сеанса работы лежит на процессе man:init[8]. Метод с использованием man:rc[8] позволяет просто прекратить работу xdm командой `kill xdm`, если при запуске X возникли какие-нибудь проблемы.
-Из man:rc[8] `xdm` должен быть запущен без аргументов. `xdm` должен быть запущен _после_ запуска man:getty[8], иначе они будут конфликтовать, блокируя консоль. Лучше всего выдержать паузу секунд на 10 и потом запустить `xdm`.
-
-Если `xdm` запускается из [.filename]#/etc/ttys#, остаётся вероятность конфликта между `xdm` и man:getty[8]. Одним из способов избежать этого является добавление номера `vt` в файл [.filename]#/usr/local/lib/X11/xdm/Xservers#:
-
-[.programlisting]
-....
-:0 local /usr/local/bin/X vt4
-....
-
-В вышеприведённом случае X-серверу указывается работать на [.filename]#/dev/ttyv3#. Заметьте, что номера отличаются на единицу. Дело в том, что X-сервер считает vty от единицы, когда как отсчёт vty в ядре FreeBSD ведётся с нуля.
+При использовании метода с man:rc[8] значение `xdm_tty` (которое по умолчанию
+определено как `ttyv8`) может быть задано в файле [.filename]#/etc/rc.conf#
+для указания виртуального терминала, на котором запускается man:xdm[8].
+[[xconsole-failure]]
=== При запуске xconsole выдаётся сообщение Couldn't open console.
Если X запускается с помощью startx, права на устройство [.filename]#/dev/console#_не_ изменяются, поэтому такие программы как xterm -C и xconsole не будут работать.
@@ -1767,6 +2083,7 @@ ttyvb "/usr/libexec/getty Pc" xterm off secure
Этого будет достаточно для того, чтобы всякий, кто вошёл в систему с терминала [.filename]#/dev/ttyv0#, имел доступ к консоли.
+[[ps2-x]]
=== Моя мышь PS/2 в X работает неправильно.
Мышь и драйвер могли рассинхронизироваться. В редких случаях драйвер может ошибочно сообщать о проблемах синхронизации:
@@ -1778,17 +2095,21 @@ psmintr: out of sync (xxxx != yyyy)
Если это случилось, отмените проверку согласования, установив значение флага для драйвера мыши PS/2 в `0x100`. Проще всего это сделать добавлением `hint.psm.0.flags="0x100"` в [.filename]#/boot/loader.conf# с перезагрузкой.
+[[mouse-button-reverse]]
=== Как поменять местами кнопки мыши?
Наберите `xmodmap -e "pointer = 3 2 1"`. Добавьте эту команду в [.filename]#~/.xinitrc# или [.filename]#~/.xsession# для автоматического запуска.
+[[install-splash]]
=== Как установить экранную заставку и где такие заставки можно найти?
-Подробный ответ находится в разделе extref:{handbook}boot[Загрузочные экранные заставки, boot-blocks] Руководства FreeBSD.
+Подробный ответ находится в разделе extref:{handbook}[Загрузочные
+экранные заставки, boot-splash] Руководства FreeBSD.
-=== Можно ли в X использовать клавишу Windows?
+=== Можно ли в X задействовать kbd:[Windows]-клавиши на клавиатуре?
-Да. Используйте man:xmodmap[1] для привязки функций к этим клавишам.
+Да.
+Воспользуйтесь man:xmodmap[1] для привязки функций к этим клавишам.
Если все клавиатуры Windows стандартны, то эти три клавиши имеют следующие клавиатурные коды:
@@ -1803,7 +2124,7 @@ psmintr: out of sync (xxxx != yyyy)
# xmodmap -e "keycode 115 = comma"
....
-Для того, чтобы переопределения клавиш kbd:[Windows] выполнялось автоматически каждый раз при запуске X, поместите команды `xmodmap` в [.filename]#~/.xinitrc# либо, что предпочтительней, создайте файл [.filename]#~/.xmodmaprc# и включите в него параметры `xmodmap` по одному на строку, затем добавьте в [.filename]#~/.xinitrc# такую строку:
+Для того, чтобы переопределения клавиш kbd:[Windows] выполнялись автоматически каждый раз при запуске X, поместите команды `xmodmap` в [.filename]#~/.xinitrc# либо, что предпочтительней, создайте файл [.filename]#~/.xmodmaprc# и включите в него параметры `xmodmap` по одному на строку, затем добавьте в [.filename]#~/.xinitrc# такую строку:
[.programlisting]
....
@@ -1821,7 +2142,7 @@ keycode 116 = F14
keycode 117 = F15
....
-При использовании оконного менеджера package:x11-wm/fvwm2[] клавиши можно переопределить так, чтобы kbd:[F13] сворачивал в иконку (и восстанавливал предыдущий размер) то окно, на которое указывает курсор, kbd:[F14] перемещал окно с курсором на передний план или, если оно уже впереди, возвращал обратно, а kbd:[F15] вызывал главное меню Workplace, даже если курсор находится не на рабочем столе, что бывает полезно, когда не видно ни одного кусочка рабочего стола.
+При использовании менеджера рабочего стола package:x11-wm/fvwm2[] клавиши можно переопределить так, чтобы нажатие kbd:[F13] сворачивало в иконку (и восстанавливало предыдущий размер) того окна, на которое указывает курсор, kbd:[F14] перемещало окно с курсором на передний план или, если оно уже впереди, возвращало обратно, а kbd:[F15] вызывало главное меню Workplace, даже если курсор находится не на рабочем столе, что бывает полезно, когда рабочий стол совсем не виден.
Следующие записи в [.filename]#~/.fvwmrc# позволяют достичь описанных выше функций:
@@ -1832,48 +2153,57 @@ Key F14 FTIWS A RaiseLower
Key F15 A A Menu Workplace Nop
....
-=== Как заставить работать аппаратное ускорение 3D-графики для OpenGL(R)?
+[[x-3d-acceleration]]
+=== Как активировать аппаратное ускорение 3D-графики для OpenGL(R)?
-Наличие 3D-ускорения зависит от версии сервера Xorg и типа графического адаптера. Для адаптера nVidia используйте двоичный драйвер для FreeBSD, установив один из нижеследующих портов:
+Наличие 3D-ускорения зависит от версии сервера Xorg и типа графического
+адаптера. Для адаптера nVidia используйте предскомпилированный драйвер для
+FreeBSD, установив один из нижеследующих портов:
-Последние версии адаптеров nVidia поддерживаются портом package:x11/nvidia-driver[].
+Последние версии адаптеров nVidia поддерживаются портом
+package:x11/nvidia-driver[].
-Более старые драйверы доступны как package:x11/nvidia-driver-###[].
+Более старые драйверы доступны в следующем виде:
+
+* package:x11/nvidia-driver-390[]
+* package:x11/nvidia-driver-340[]
+* package:x11/nvidia-driver-304[]
nVidia предоставляет подробную информацию о том, какие адаптеры поддерживаются тем или иным драйвером, на своём сайте: http://www.nvidia.com/object/IO_32667.html[http://www.nvidia.com/object/IO_32667.html].
-Для адаптеров Matrox G200/G400 следует попробовать порт package:x11-servers/mga_hal[].
+Для адаптеров Matrox G200/G400 следует попробовать порт
+package:x11-drivers/xf86-video-mga[].
Для ATI Rage 128 и Radeon посмотрите страницы Справочника man:ati[4], man:r128[4] и man:radeon[4].
== Работа в сети
+[[diskless-booting]]
=== Где можно найти информацию о бездисковой загрузке?
-"Бездисковая загрузка" означает, что машина с FreeBSD загружается по сети и читает необходимые файлы с сервера, а не со своего диска. Подробное описание есть в extref:{handbook}advanced-networking/[ соответствующей главе, network-diskless] Руководства.
-
-=== Может ли машина с FreeBSD использоваться как маршрутизатор?
-
-Да. Обратитесь к разделу Руководства, посвящённому extref:{handbook}advanced-networking/[сложным вопросам работы в сети, advanced-networking], особенно в той части, что касается extref:{handbook}advanced-networking/[маршрутизации и маршрутизаторов, network-routing].
+"Бездисковая загрузка" означает, что машина с FreeBSD загружается по сети и
+читает необходимые файлы с сервера, а не со своего диска. Подробное описание
+есть в extref:{handbook}advanced-networking/[соответствующей главе,
+network-diskless] Руководства.
-=== Можно ли подключить машину с Windows(R) к Internet с помощью FreeBSD?
+[[router]]
+=== Может ли машина с FreeBSD использоваться как выделенный маршрутизатор?
-Как правило, те, кто задают такие вопросы, имеют дома два компьютера, один с FreeBSD, а другой с какой-то версией Windows(R). Идея состоит в использовании FreeBSD для подключения к Internet, а затем осуществлять выход в Internet из Windows(R) через FreeBSD. На самом деле это просто частный случай предыдущего вопроса, который хорошо отработан.
-
-Для подключения к Internet с использованием коммутируемого соединения нужно указать параметр `-nat` и установить в файле [.filename]#/etc/rc.conf# переменную `gateway_enable` в значение _YES_. Для получения дополнительной информации обратитесь к страницам справочной системы по команде man:ppp[8] или extref:{handbook}ppp-and-slip/[ разделу Руководства о PPP режима пользователя, userppp].
-
-Если подключение к Internet выполняется через Ethernet, используйте man:natd[8]. Вводная информация находится в разделе Руководства extref:{handbook}/[natd, network-natd].
-
-=== Поддерживает ли FreeBSD протокол PPP?
-
-Да. man:ppp[8] может обслуживать как входящие, так и исходящие соединения.
-
-Более подробная информация об их использовании находится в extref:{handbook}ppp-and-slip/[разделе Руководства о протоколе PPP, ppp-and-slip].
+Да.
+Обратитесь к разделу Руководства, посвящённому
+extref:{handbook}advanced-networking/[сложным вопросам работы в сети, advanced-networking], а
+именно к той части, где рассказывается о extref:{handbook}advanced-networking/[маршрутизации и шлюзах маршрутизации, network-routing].
+[[natd]]
=== Поддерживает ли FreeBSD технологию NAT или Masquerading?
-Да. Для получения указаний по использованию NAT через подключение PPP обратитесь к extref:{handbook}ppp-and-slip/[разделу Руководства о PPP, userppp]. Чтобы использовать NAT вместе с другим типом сетевого подключения, взгляните на раздел Руководства extref:{handbook}/[natd, network-natd].
+Да.
+Для получения указаний по использованию NAT через подключение PPP
+обратитесь к extref:{handbook}}ppp-and-slip/[разделу Руководства о PPP, userppp].
+Чтобы использовать NAT вместе с другим типом сетевого подключения, взгляните
+на раздел Руководства, посвящённый extref:[natd, network-natd].
+[[ethernet-aliases]]
=== Как настроить алиас в сети Ethernet?
Если алиас находится в той же самой сети, что и уже настроенный на интерфейсе адрес, допишите к этой команде `netmask 0xffffffff`:
@@ -1890,7 +2220,8 @@ nVidia предоставляет подробную информацию о т
# ifconfig ed0 alias 172.16.141.5 netmask 0xffffff00
....
-Дополнительная информация находится в extref:{handbook}config-tuning/[Руководстве, configtuning-virtual-hosts] FreeBSD.
+Дополнительная информация может быть найдена в extref:{handbook}config/[Руководстве,
+configtuning-virtual-hosts] по FreeBSD.
=== Почему я не могу смонтировать диск Linux(R) по NFS?
@@ -1901,21 +2232,27 @@ nVidia предоставляет подробную информацию о т
# mount -o -P linuxbox:/blah /mnt
....
+[[exports-errors]]
=== Почему mountd продолжает выдавать сообщения can't change attributes и bad exports list на моём сервере NFS, работающем под управлением FreeBSD?
-В большинстве случаев проблема заключается в недостаточном понимании корректного формата файла [.filename]#/etc/exports#. Просмотрите ещё раз справочную информацию по man:exports[5] и раздел об extref:{handbook}network-servers/[NFS, network-nfs] в Руководстве, особенно в части extref:{handbook}[настройки NFS, configuring-nfs].
+В большинстве случаев проблема заключается в недостаточном понимании корректного формата файла [.filename]#/etc/exports#.
+Просмотрите ещё раз справочную информацию по man:exports[5] и раздел об extref:{handbook}network-servers/[NFS, network-nfs] Руководства, особенно в части extref:{handbook}[настройки NFS, configuring-nfs].
+[[ip-multicast]]
=== Как включить поддержку multicast IP?
Установите пакет package:net/mrouted[] и добавьте `mrouted_enable="YES"` в [.filename]#/etc/rc.conf# для запуска этого сервиса во время загрузки.
+[[fqdn-hosts]]
=== Почему я должен использовать FQDN для хостов не в моей сети?
-За ответом на этот вопрос обращайтесь к extref:{handbook}mail/[Руководству, mail-trouble] FreeBSD.
+За ответом на этот вопрос обратитесь к extref:{handbook}mail/[Руководству,
+mail-trouble] по FreeBSD.
-=== Permission denied для любых действий, связанных с работой сети.
+[[network-permission-denied]]
+=== Почему при выполнении любых сетевых операций выдаётся сообщение Permission denied?
-Если ядро скомпилировано с параметром `IPFIREWALL`, имейте в виду, что политикой по умолчанию является запрет прохождения всех пакетов, которые явно не разрешены.
+Если ядро скомпилировано с параметром `IPFIREWALL`, имейте в виду, что политикой по умолчанию является запрет прохождения любых пакетов, которые не разрешены явным образом.
Если межсетевой экран был случайно сконфигурирован неверным образом, то для восстановления работоспособности сети наберите такую команду из-под пользователя `root`:
@@ -1926,22 +2263,30 @@ nVidia предоставляет подробную информацию о т
Рассмотрите использование `firewall_type='open'` в файле [.filename]#/etc/rc.conf#.
-Дополнительная информация о настройке данного межсетевого экрана находится в extref:{handbook}firewalls/[соответствующей главе, firewalls-ipfw] Руководства.
+Дополнительная информация о настройке данного межсетевого экрана находится в
+extref:{handbook}firewalls/[соответствующей главе, firewalls-ipfw] Руководства.
-=== Почему моё правило fwd для ipfw по перенаправлению сервиса на другую машину не работает?
+[[ipfw-fwd]]
+=== Почему моё правило “fwd” для `ipfw` по перенаправлению сервиса на другую машину не работает?
-Возможно, потому, что вместо простого перенаправления пакетов нужна трансляция сетевых адресов (NAT). Правило "fwd" только перенаправляет пакеты и данные внутри него не меняет. Рассмотрим такое правило:
+Возможно, потому что вместо простого перенаправления пакетов нужна трансляция сетевых адресов (NAT). Правило "fwd" только перенаправляет пакеты и данные внутри него не меняет.
+Рассмотрим такое правило:
[source,shell]
....
01000 fwd 10.0.0.1 from any to foo 21
....
-Когда пакет с адресом назначения _foo_ достигает машины с этим правилом, пакет перенаправляется на _10.0.0.1_, но в нём остаётся адрес назначения _foo_. Адрес назначения пакета не меняется на _10.0.0.1_. Большинство машин, скорее всего, отбросят полученный пакет, имеющий адрес назначения, им не соответствующий. Таким образом, правило "fwd" не часто работает так, как ожидает пользователь. Такое поведение является особенностью, а не ошибкой.
+Когда пакет с адресом назначения _foo_ достигает машины с этим правилом, пакет перенаправляется на _10.0.0.1_, но в нём остаётся адрес назначения _foo_.
+Адрес назначения пакета не меняется на _10.0.0.1_.
+Большинство машин, скорее всего, отбросят полученный пакет, имеющий адрес назначения, им не соответствующий.
+Таким образом, правило "fwd" часто работает не так, как ожидает пользователь.
+Описанное поведение является особенностью, а не ошибкой.
-Обратитесь к <<service-redirect,FAQ о перенаправлении сервисов>>, руководству по man:natd[8] или одной из нескольких утилит для перенаправления из link:https://www.FreeBSD.org/ports/[Коллекции Портов] для того, чтобы сделать это правильно.
+Обратитесь к <<service-redirect,FAQ о перенаправлении сервисов>>, руководству по man:natd[8] или одной из нескольких утилит для перенаправления портов из link:https://www.FreeBSD.org/ports/[Коллекции Портов] для того, чтобы сделать это правильно.
-=== Как можно перенаправить запросы с одной машины на другую?
+[[service-redirect]]
+=== Как можно перенаправить запросы сервисов с одной машины на другую?
Запросы FTP и других сервисов можно перенаправить с помощью порта package:sysutils/socket[]. Замените запись для этого сервиса в [.filename]#/etc/inetd.conf# на вызов `socket`, как показано в этом примере для ftpd:
@@ -1952,10 +2297,12 @@ ftp stream tcp nowait nobody /usr/local/bin/socket socket ftp.example.com ftp
где _ftp.example.com_ и _ftp_ являются соответственно хостом и портом для перенаправления.
+[[bandwidth-mgr-tool]]
=== Где можно найти средства управления сетевым трафиком?
Для FreeBSD имеются три средства управления трафиком. man:dummynet[4] интегрирован в систему FreeBSD как составная часть man:ipfw[4]. http://www.sonycsl.co.jp/person/kjc/programs.html[ ALTQ] включен во FreeBSD как составная часть man:pf[4]. Bandwidth Manager компании http://www.etinc.com/[Emerging Technologies] является коммерческим продуктом.
+[[bpf-not-configured]]
=== Почему появляются сообщения /dev/bpf0: device not configured?
Для работы приложения требуется Berkeley Packet Filter (man:bpf[4]), однако это устройство удалено из вашего ядра. Постройте новое ядро с добавлением в его конфигурационный файл следующей строки:
@@ -1965,10 +2312,12 @@ ftp stream tcp nowait nobody /usr/local/bin/socket socket ftp.example.com ftp
device bpf # Berkeley Packet Filter
....
+[[mount-smb-share]]
=== Как смонтировать диск Windows(R)-машины в моей локальной сети, как это делает smbmount в Linux(R)?
Используйте пакет SMBFS. В него включён набор изменений в ядре и пользовательские программы. Программы и информация доступны как man:mount_smbfs[8] и входят в состав базовой системы.
+[[icmp-response-bw-limit]]
=== Что значат сообщения Limiting icmp/open port/closed port response в файле журнала?
Данное сообщение ядра означает, что имеет место некоторая активность, приводящая к отправке большого количества ответных пакетов ICMP или сбросов TCP (RST). Ответы ICMP часто генерируются в результате попыток подключения к незанятым портам UDP. Сбросы TCP генерируются в результате попыток подключения к закрытым портам TCP. Помимо всего прочего, такие сообщения могут быть вызваны следующими действиями:
@@ -1976,7 +2325,10 @@ device bpf # Berkeley Packet Filter
* Лобовая атака типа отказ в обслуживании DoS (в отличие от атак в один пакет, которые используют конкретную брешь в защите).
* Сканирование портов в попытке осуществить подключение к большому количеству портов (в отличие от проб нескольких известных портов).
-Первое число в сообщении показывает количество пакетов, которое ядро посылало бы при отсутствии ограничений, а второе число указывает лимит. Этот лимит меняется при помощи `net.inet.icmp.icmplim`. В этом примере устанавливается лимит на `300` пакетов в секунду:
+Первое число в сообщении показывает количество пакетов, которое ядро отправило
+бы при отсутствии ограничений, а второе число отражает лимит.
+Этот лимит управляется при помощи переменной `net.inet.icmp.icmplim`.
+В этом примере устанавливается лимит на `300` пакетов в секунду:
[source,shell]
....
@@ -1992,14 +2344,30 @@ device bpf # Berkeley Packet Filter
И наконец, чтобы полностью выключить это ограничение, сделайте `net.inet.icmp.icmplim` равным `0`. Выключение этого лимита не приветствуется по причинам, изложенным выше.
+[[unknown-hw-addr-format]]
=== Что это за сообщения arp: unknown hardware address format?
Это означает, что какое-то устройство в локальной сети Ethernet использует MAC-адрес в формате, неизвестном FreeBSD. Вероятно, это происходит из-за того, что кто-то в сети экспериментирует с сетевым адаптером. Чаще всего это происходит в сетях с кабельными модемами. Это безобидно и не должно влиять на производительность системы FreeBSD.
+[[arp-wrong-iface]]
=== Почему я постоянно вижу сообщения вида 192.168.0.10 is on fxp1 but got reply from 00:15:17:67:cf:82 on rl0 и как мне их отключить?
Это так, потому что пакет приходит извне сети, чего не должно быть. Чтобы отключить эти сообщения, установите `net.link.ether.inet.log_arp_wrong_iface` в значение `0`.
+[[ipv6-only]]
+=== Как скомпилировать ядро, поддерживающее только IPv6?
+
+Выполните конфигурацию ядра со следующими параметрами:
+
+[source,shell]
+....
+include GENERIC
+ident GENERIC-IPV6ONLY
+makeoptions MKMODULESENV+="WITHOUT_INET_SUPPORT="
+nooptions INET
+nodevice gre
+....
+
== Безопасность
=== Что означает термин sandbox (песочница)?
@@ -2007,18 +2375,27 @@ device bpf # Berkeley Packet Filter
"Sandbox" - это термин, используемый при обеспечении безопасности. Он имеет два значения:
* Процесс, помещённый внутрь некоторых виртуальных стен, которые предназначены для предотвращения взлома всей системы в результате взлома этого конкретного процесса.
-+
-Процесс может работать в границах этих стен. Поскольку, что бы этот процесс ни делал, он эти стены разрушить не может, особый аудит его кода не нужен для того, чтобы с уверенностью сказать, насколько его работа безопасна для системы.
-+
++
+Процесс может работать только в границах этих стен.
+Поскольку, что бы этот процесс ни делал, он эти стены разрушить не может, особый аудит его кода не нужен для того, чтобы с уверенностью сказать, насколько его работа безопасна для системы.
++
Стеной может служить, например, идентификатор пользователя. Вот определение, даваемое на страницах Справочника man:security[7] и man:named[8].
-+
-Рассмотрим, например, службу `ntalk` (смотрите man:inetd[8]). Раньше эта служба запускалась с идентификатором пользователя `root`, а сейчас - `tty`. Пользователь `tty` - это та песочница, которая осложняет взлом системы через `ntalk` посредством использования этого идентификатора пользователя.
-* Процесс, помещённый внутрь симулируемой машины. Это даёт больший уровень безопасности. Это означает, что некто, взломавший процесс, может думать, что может сломать и систему в целом, однако фактически может сломать только симулятор этой машины и не может модифицировать никаких реальных данных.
-+
++
+Рассмотрим, например, службу `ntalk` (смотрите man:inetd[8]).
+Раньше эта служба запускалась с полномочиями пользователя `root`.
+Теперь она запускается с полномочиями пользователя с идентификатором `tty`.
+Пользователь `tty` является песочницей, предназначенной для того, чтобы
+пользователю, которому удалось проникнуть в систему через `ntalk`, было сложнее
+взломать систему и получить полномочия больше, чем обладает этот идентификатор.
+* Процесс, помещённый внутрь симулируемой машины.
+Это означает, что некто, взломавший процесс, может думать, что может сломать и
+систему в целом, однако фактически может сломать только симулятор этой машины
+и не может модифицировать никаких реальных данных.
++
Самым распространённым способом достигнуть такого результата является построение имитирующего окружения в каталоге и затем запуск процессов в этом каталоге через chroot (т.е. задав этот каталог в качестве [.filename]#/# для этого процесса, а не реальный [.filename]#/# всей системы).
-+
++
Другим часто используемым методом является монтирование низлежащей файловой системы в режиме "только для чтения" и затем создание уровня файловой системы поверх неё, что даёт процессу видимость доступа по записи на ту файловую систему. Процесс будет полагать, что может записывать в те файлы, но это будет единственный процесс, который увидит результат - другие процессы не будут этого делать ни в коем случае.
-+
++
Попытка сделать такой тип песочницы настолько прозрачна, что пользователь (или взломщик) даже не поймёт, что он в ней находится.
В UNIX(R) реализованы два типа "песочниц". Один на уровне процесса, и один на уровне идентификаторов пользователей.
@@ -2027,7 +2404,8 @@ device bpf # Berkeley Packet Filter
В UNIX(R) каждым процессом владеет некоторый идентификатор пользователя. Если этот пользователь не `root`, он ограждает процесс от других, владельцами которых являются другие пользователи. Этот идентификатор используется также для защиты данных на диске.
-=== Что такое уровень защиты (securelevel)?
+[[securelevel]]
+=== Что такое уровень безопасности (securelevel)?
`securelevel` является механизмом обеспечения безопасности, который реализован в ядре. Когда уровень защиты больше нуля, ядро ограничивает выполнение некоторых операций; даже суперпользователю `root` запрещается их выполнять. Механизм уровня защиты ограничивает возможности по:
@@ -2043,9 +2421,11 @@ device bpf # Berkeley Packet Filter
# sysctl -n kern.securelevel
....
-Результат содержит текущее значение уровня защиты. Если оно больше нуля, то по крайней мере некоторые из защит этого механизма включены.
+Результат содержит текущее значение уровня защиты.
+Если оно больше нуля, то по крайней мере некоторые из защит этого механизма включены.
-Уровень защиты работающей системы не может быть понижен, поскольку это противоречит назначению этого механизма. Если для задачи требуется неположительный уровень защиты, измените значения переменных `kern_securelevel` и `kern_securelevel_enable` в файле [.filename]#/etc/rc.conf# и перезагрузите систему.
+Уровень защиты работающей системы не может быть понижен, поскольку это противоречит назначению этого механизма.
+Если для задачи требуется неположительный уровень защиты, измените значения переменных `kern_securelevel` и `kern_securelevel_enable` в файле [.filename]#/etc/rc.conf#, а затем перезагрузите систему.
Более подробная информация об уровнях защиты и о том, какие специфические действия выполняют все уровни, может быть найдена на справочных страницах о man:init[8].
@@ -2054,441 +2434,60 @@ device bpf # Berkeley Packet Filter
Уровень защиты не является панацеей; в нём есть много недостатков. Зачастую он даёт обманчивое чувство безопасности.
-Одной из самых больших проблем является то, что для его эффективной работы все файлы, используемые в процессе загрузки, должны быть защищены. Если атакующий сможет заставить систему выполнять свой код до установки уровня защиты (что происходит достаточно поздно во время процесса загрузки, так как некоторые вещи, выполняемые системой в это время, не могут быть сделаны при повышенном уровне защиты), то эта защита может быть отключена. Хотя такая задача по защите всех файлов, используемых в процессе загрузки, технически вполне осуществима, если это будет сделано, то поддержка системы станет кошмаром, так как для изменения конфигурационного файла придётся останавливать систему, переводя её по крайней мере в однопользовательский режим.
-
-Это обстоятельство, а также ряд других, часто обсуждаются в списках рассылки, в частности, во {freebsd-security}. Поищите в link:https://www.FreeBSD.org/search/[ архивах] более подробное обсуждение. Предпочтителен более гибкий механизм.
-====
-
-=== BIND (named) работает на одном из портов с большим номером. Что происходит?
+Одной из самых больших проблем является то, что для его эффективной работы все файлы, используемые в процессе загрузки, должны быть защищены.
+Если атакующий сможет заставить систему выполнять свой код до установки уровня защиты (что происходит достаточно поздно во время процесса загрузки, так как некоторые вещи, выполняемые системой в это время, не могут быть сделаны при повышенном уровне защиты), то эта защита может быть отключена.
+Хотя такая задача по защите всех файлов, используемых в процессе загрузки, технически вполне осуществима, если это будет сделано, то поддержка системы станет кошмаром, так как для изменения конфигурационного файла придётся останавливать систему, переводя её по крайней мере в однопользовательский режим.
-Для исходящих запросов BIND использует случайно выбираемый порт с большим номером. В последних версиях при каждом запросе выбирается новый случайный порт UDP. Это может вызвать проблемы в некоторых сетевых конфигурациях, особенно если фаервол блокирует входящие UDP пакеты на определенных портах. Чтобы обеспечить прохождение пакетов через фаервол, попробуйте параметры `avoid-v4-udp-ports` и `avoid-v6-udp-ports`, чтобы предотвратить случайный выбор номеров портов, пересекающихся с блокируемым диапазоном.
-
-[WARNING]
-====
-
-Если в [.filename]#/etc/namedb/named.conf# указан номер порта (такой как 53) в параметре `query-source` или `query-source-v6`, то случайный выбор порта использоваться не будет. Настоятельно рекомендуется, чтобы эти параметры не использовались для указания фиксированных номеров порта.
+Это обстоятельство, а также ряд других, часто обсуждаются в списках рассылки, в частности, во {freebsd-security}.
+Поищите в link:https://www.FreeBSD.org/search/[архивах] более подробное обсуждение. Предпочтителен более гибкий механизм.
====
-Кстати, поздравляем. Прекрасно, что вы читаете вывод команды man:sockstat[1] и обращаете внимание на аномалии!
-
-=== Даемон Sendmail ждёт соединений как на стандартном порту 25, так и на порту 587! Что происходит?
-
-Последние версии Sendmail поддерживают механизм посылки почты, который работает по порту 587. Эта возможность пока широко не используется, но её популярность растёт.
-
+[[toor-account]]
=== Что это за пользователь toor с UID 0? Я подвергся взлому?
-Не волнуйтесь, `toor` является "альтернативной" учётной записью суперпользователя (toor - это root, записанный задом наперёд). Его предлагается использовать с нестандартным командным интерпретатором, так чтобы не нужно было менять используемый по умолчанию командный процессор для `root`. Это важно, так как оболочки, не являющиеся частью дистрибутива системы, устанавливаются в каталог [.filename]#/usr/local/bin#, который по умолчанию располагается в другой файловой системе. Если командный процессор для пользователя `root` располагается в [.filename]#/usr/local/bin# и файловая система, содержащая [.filename]#/usr/local/bin#, не смонтирована, то `root` не сможет войти в систему для исправления проблемы и понадобится перезагрузиться в однопользовательском режиме, чтобы указать командный процессор.
-
-Некоторые используют `toor` для выполнения повседневных административных работ с нестандартным командным процессором, оставляя `root` со стандартной оболочкой для работы в однопользовательском режиме или выполнения аварийных работ. По умолчанию пользователь не сможет войти в систему как `toor`, потому что для него не указан пароль, поэтому войдите из-под `root` и установите пароль для `toor` до того как использовать его для входа в систему.
-
-== PPP
-
-=== Не могу заставить работать ppp. Что я делаю не так?
-
-Первым делом прочтите страницу Справочника man:ppp[8] и extref:{handbook}ppp-and-slip[раздел PPP, ppp-and-slip] Руководства. Для помощи с устранением неполадок включите протоколирование следующей командой:
-
-[.programlisting]
-....
-set log Phase Chat Connect Carrier lcp ipcp ccp command
-....
-
-Эту команду можно набрать в командной строке man:ppp[8] или ввести в начале раздела `default` в [.filename]#/etc/ppp/ppp.conf#. Проверьте, что файл [.filename]#/etc/syslog.conf# содержит указанные ниже строки и существует файл [.filename]#/var/log/ppp.log#:
-
-[.programlisting]
-....
-!ppp
-*.* /var/log/ppp.log
-....
-
-Полную информацию о происходящем можно найти в файле протокола. Не беспокойтесь, если не всё будет понятно, ведь это может быть понятно кому-то ещё.
-
-=== Ppp просто зависает, когда я его запускаю
-
-Обычно это происходит, когда имя хоста не может быть преобразовано в адрес. Наилучший способ исправить это - удостовериться, что файл [.filename]#/etc/hosts# читается первым. Для этого нужно проверить, что в файле [.filename]#/etc/host.conf# на первом месте стоит строчка `hosts`. Затем добавьте в файл [.filename]#/etc/hosts# запись о локальной машине. Если локальная сеть отсутствует, измените строку для `localhost`:
-
-[.programlisting]
-....
-127.0.0.1 foo.example.com foo localhost
-....
-
-В противном случае добавьте для хоста ещё одну запись. Обратитесь к соответствующим страницам Справочника за подробным описанием.
-
-В конце убедитесь, что эта команда выполняется успешно: `ping -c1 hostname`.
-
-=== Ppp не звонит в режиме -auto
-
-Сначала проверьте наличие маршрута по умолчанию. Команда `netstat -rn` должна показать две строки:
-
-[.programlisting]
-....
-Destination Gateway Flags Refs Use Netif Expire
-default 10.0.0.2 UGSc 0 0 tun0
-10.0.0.2 10.0.0.1 UH 0 0 tun0
-....
-
-Если нет маршрута по умолчанию, убедитесь, что строка `HISADDR` была добавлена в [.filename]#/etc/ppp/ppp.conf#.
-
-Другая причина отсутствия строки с маршрутом по умолчанию может крыться в том, что маршрут по умолчанию был добавлен в [.filename]#/etc/rc.conf#, и эта строка отсутствует в [.filename]#/etc/ppp/ppp.conf#:
-
-[.programlisting]
-....
-delete ALL
-....
-
-В таком случае обратитесь к соответствующему extref:{handbook}ppp-and-slip[разделу, userppp-final] Руководства.
-
-=== Что означает сообщение No route to host?
-
-Обычно эта ошибка появляется из-за отсутствия в файле [.filename]#/etc/ppp/ppp.linkup# следующего раздела:
-
-[.programlisting]
-....
-MYADDR:
- delete ALL
- add 0 0 HISADDR
-....
-
-Он необходим только для динамического IP адреса или когда адрес маршрутизатора не известен. При использовании интерактивного режима можно набрать следующие команды после входа в пакетный режим. Пакетный режим обозначается заглавными буквами PPP в приглашении:
-
-[.programlisting]
-....
-delete ALL
-add 0 0 HISADDR
-....
-
-Обратитесь к разделу extref:{handbook}[PPP и динамические IP адреса, userppp-dynamicip] Руководства за подробной информацией.
-
-=== Соединение разрывается через 3 минуты
-
-Таймаут для PPP по умолчанию равен 3 минутам. Это может быть изменено такой строкой:
-
-[.programlisting]
-....
-set timeout NNN
-....
-
-где _NNN_ - время неактивности в секундах, после которого соединение закрывается. Если _NNN_ равно нулю, соединение никогда не разрывается по таймауту. Эту команду можно поместить в файл [.filename]#ppp.conf# или набрать ее в интерактивном режиме. Изменение этого параметра также возможно при активном соединении, если подключиться к сокету ppp сервера с помощью программ man:telnet[1] или man:pppctl[8]. Обратитесь к страницам Справочника, посвящённым man:ppp[8].
-
-=== Соединение разрывается при большой нагрузке
-
-Если включен Link Quality Reporting (LQR), то возможно слишком много пакетов LQR теряется в канале. man:ppp[8] делает вывод, что канал плох, и разрывает соединение. LQR по умолчанию выключен. Включить LQR можно так:
-
-[.programlisting]
-....
-enable lqr
-....
-
-=== Соединение разрывается в случайные промежутки времени
-
-Иногда на шумной линии или даже на линии с включенным режимом ожидания звонка модем может вешать трубку, ошибочно полагая, что потеряна несущая.
-
-В большинстве модемов есть параметр, определяющий чувствительность к временной потере несущей. Обратитесь к документации модема.
-
-=== Соединение часто рвётся в случайные промежутки времени
-
-Многие сообщают об обрывах соединений без видимой причины. Первым делом нужно выяснить, с какой стороны рвётся соединение.
-
-При использовании внешнего модема проверьте утилитой man:ping[8], мигает ли индикатор TD при передаче данных. Если он мигает, а индикатор RD нет, проблема с той стороны. Если TD не загорается, проблема является локальной. Для внутреннего модема используйте команду `set server` в [.filename]#ppp.conf#. При обрыве связи подключитесь к man:ppp[8] с помощью man:pppctl[8]. Если сетевое подключение неожиданно восстанавливается при проявлении активности на диагностическом сокете или нет соединения, но команда `set socket` в начальный момент была выполнена успешно, то проблема имеет локальный характер. Если получается подключиться, но связи всё равно нет, включите вывод локальной отладочной информации командой `set log local async` и используйте man:ping[8] в другом окне или терминале, чтобы проверить связь. В отладочном выводе будут показаны данные, передаваемые и получаемые из канала связи. Если данные посылаются, но не принимаются обратно, то проблема с той стороны.
-
-Теперь, после выяснения местонахождения проблемы, имеется два варианта действий:
-
-* Если проблема на удалённой машине, то прочтите <<ppp-remote-not-responding>>.
-* Если проблема с вашей стороны, прочтите <<ppp-hung>>.
-
-[[ppp-remote-not-responding]]
-=== Удалённая система не отвечает
-
-Здесь мало что можно сделать. Большинство провайдеров отказываются помогать пользователям, которые не используют ОС от Microsoft(R). Добавьте `enable lqr` в [.filename]#/etc/ppp/ppp.conf#, чтобы позволить man:ppp[8] отследить ошибки в удалённой системе и закрыть соединение. Такое обнаружение достаточно медленно и поэтому не так уж полезно.
-
-Первым делом попробуйте отключить любое сжатие, указав в конфигурационном файле следующее:
-
-[.programlisting]
-....
-disable pred1 deflate deflate24 protocomp acfcomp shortseq vj
-deny pred1 deflate deflate24 protocomp acfcomp shortseq vj
-....
-
-Теперь попробуйте установить соединение ещё раз и удостоверьтесь, что ситуация не изменилась. Если качество соединения улучшилось или проблема оказалась полностью решённой, выясните, настройка чего приводила к проблемам методом проб и ошибок. Это полезная информация для провайдера, хотя при этом может обнаружиться, что вы работаете не с продуктом Microsoft(R).
-
-Перед тем, как звонить провайдеру, включите вывод отладочной информации и подождите, пока соединение снова не прервётся. Для этого может потребоваться некоторое дисковое пространство. Интерес могут представлять последние прочитанные из порта данные. Обычно это данные в формате ASCII и они могут даже содержать описание проблемы (`Memory fault`, `Core dumped`).
-
-Если провайдер согласен помочь, нужно будет включить режим отладки с их стороны, и затем, когда связь прервётся в следующий раз, они смогут сказать, почему с их стороны возникли проблемы.
-
-[[ppp-hung]]
-=== Ppp зависает
-
-В этом случае перекомпилируйте man:ppp[8] с отладочной информацией, и затем используйте man:gdb[1] для получения стека вызовов для зависшего процесса ppp. Чтобы откомпилировать программу ppp с отладочной информацией, наберите такие команды:
-
-[source,shell]
-....
-# cd /usr/src/usr.sbin/ppp
-# env DEBUG_FLAGS='-g' make clean
-# env DEBUG_FLAGS='-g' make install
-....
-
-Затем перезапустите ppp и дождитесь следующего зависания. Когда отладочная сборка man:ppp[8] зависнет, запустите gdb для зависшего процесса:
-
-[source,shell]
-....
-# gdb ppp `pgrep ppp`
-....
-
-В приглашении gdb используйте команду `bt` или `where` для получения стека вызовов. Сохраните вывод сессии gdb и "отключитесь" от работающего процесса, выполнив команду `quit` в gdb.
-
-=== В протоколе есть сообщения о том, что magic being the same.
-
-Иногда, сразу после установления соединения, в журнале могут возникать сообщения `Magic is the same`. Иногда эти сообщения проходят безболезненно, а иногда одна из сторон прекращает работу. Большинство реализаций PPP не может справиться с такой ситуацией, и даже когда связь выглядит установившейся, вы будeт только бесконечно повторяющиеся конфигурационные запросы и подтверждения в файле протокола до тех пор, пока man:ppp[8] окончательно не закроет соединение.
-
-Обычно это происходит на серверах с медленными дисками, на которых порт обслуживает программа man:getty[8], а man:ppp[8] выполняется из сценария регистрации или другой программы после регистрации пользователя. Были сообщения, что такое случается постоянно при использовании slirp. Причина заключается в том, что во время, проходящее между завершением работы man:getty[8] и запуском man:ppp[8], man:ppp[8] со стороны клиента начинает посылать пакеты Line Control Protocol (LCP). Так как режим эха остаётся всё ещё включенным, man:ppp[8] клиента получает "отражения" своих запросов.
-
-Частью процесса согласования параметров LCP является определение "магического" числа для каждой стороны соединения для обнаружения "отражений". Согласно спецификации, когда одна сторона пытается использовать совпадающее "магическое" число, должен быть послан ответ NAK и должно быть выбрано новое "магическое" число. В тот момент, когда на порту сервера включен режим эха, клиент man:ppp[8] посылает пакеты LCP, получает то же самое "магическое" число в отражённом пакете и отвечает на него NAK. Он также видит отражённый NAK (который также означает, что man:ppp[8] должен изменить своё "магическое" число). В потенциале это может вызвать появление огромного количества процессов смен "магических" чисел, и все они накапливаются в буфере терминала. Как только запустится сервер man:ppp[8], он будет перегружен запросами на смену "магических", немедленно решит, что этого много для согласования LCP и прервёт соединение. В то же самое время, клиент, который больше не видит отражений, останавливается для того, чтобы увидеть, что сервер закрыл соединение.
-
-Этого можно избежать, позволив начинать согласование противоположной стороне следующей строкой в файле [.filename]#ppp.conf#:
-
-[.programlisting]
-....
-set openmode passive
-....
-
-Это заставит man:ppp[8] ожидать начала согласования LCP. Некоторые серверы, однако, могут никогда не начать согласование. В этом случае попробуйте сделать следующее:
-
-[.programlisting]
-....
-set openmode active 3
-....
-
-Это заставит man:ppp[8] пассивно ждать 3 секунды, и только затем посылать запросы LCP. Если противоположная сторона начнёт посылать в этот момент запросы, man:ppp[8] немедленно ответит, не ожидая истечения трёхсекундного интервала.
-
-=== Согласование LCP продолжается, пока не закроется соединение
-
-В настоящий момент одной из неприятных особенностей реализации man:ppp[8] является то, что она не связывает сообщения LCP, CCP & IPCP с запросами. Как результат, если реализация PPP с одной стороны более чем на 6 секунд медленнее, чем с другой, противоположная сторона будет посылать два дополнительных запроса на согласование параметров LCP. Это фатально.
-
-Предположим, что у нас работают две реализации, на машинах `A` и `B`. `A` начинает посылать запросы LCP сразу же после соединения, а `B` требуется 7 секунд для запуска. Когда `B` запускается, `A` послало 3 LCP-запроса. Полагаем, что режим эха выключен, в противном случае мы столкнулись бы с проблемами "магического" числа, описанными в предыдущем разделе. `B` посылает REQ, затем ACK на первый REQ от `A`. Это приводит к тому, что `A` входит в состояние OPENED и посылает (первый) ACK обратно `B`. В то же самое время `B` посылает обратно ещё два ACK в ответ на два дополнительных REQ, посланные `A` до старта `B`. `B` затем получает первый ACK от `A` и возвращается в состояние REQ-SENT, послав ещё один (четвёртый) REQ согласно RFC. Затем он получает третий ACK и входит в состояние OPENED. В это же время `B` принимает четвёртый REQ от `A`, что возвращает его в состояние ACK-SENT и посылает ещё один (второй) REQ и (четвёртый) ACK согласно RFC. `A` получает REQ, переходит в состояние REQ-SENT и посылает ещё один REQ. Он немедленно принимает последующий ACK и входит в состояние OPENED.
-
-Это будет продолжаться до тех пор, пока одна из сторон не обнаружит, что это ни к чему не приводит и не закроет соединение.
-
-Лучшим способом избежать этой ситуации является конфигурация одной из сторон как `passive`, чтобы она ждала другую для начала согласования. Это можно сделать следующей командой:
-
-[.programlisting]
-....
-set openmode passive
-....
-
-С этой командой нужно быть осторожным. Эту команду можно также использовать для ограничения периода ожидания, в течении которого man:ppp[8] ждёт начала согласования с противоположной стороны:
-
-[.programlisting]
-....
-set stopped N
-....
-
-Как вариант, может быть использована следующая команда (где _N_ - период ожидания в секундах перед тем, как начать согласование):
-
-[.programlisting]
-....
-set openmode active N
-....
-
-За дополнительной информацией обращайтесь к странице Справочника.
-
-=== Когда я выполняю команду shell для тестирования соединения, ppp блокируется
-
-При использовании `shell` или `!` man:ppp[8] запускает оболочку или переданные параметры. Программа ppp будет ждать окончания выполнения команды, прежде чем продолжить. При любой попытке воспользоваться связью PPP во время выполнения команды связь будет выглядеть заблокированной. Это происходит из-за того, что man:ppp[8] ждёт завершения команды.
-
-Для выполнения подобных команд используйте вместо этого `!bg`. В этом случае нужная команда будет выполняться в фоновом режиме, а man:ppp[8] сможет продолжить обслуживание канала связи.
-
-=== Почему программа ppp, обслуживающая нуль-модем, никогда не закрывается?
-
-man:ppp[8] не может определить, что соединение было закрыто. Это происходит из-за метода использования сигнальных линий нуль-модемного кабеля. При использовании такого типа соединения всегда включайте LQR:
-
-[.programlisting]
-....
-enable lqr
-....
-
-По умолчанию LQR включается, если это было затребовано с противоположной стороны на этапе согласования параметров соединения.
-
-=== В режиме -auto ppp неожиданно начинает звонить
-
-Если man:ppp[8] начинает неожиданно звонить, определите причину и настройте фильтры дозвона для предотвращения подобных звонков.
-
-Для выяснения причины такого поведения, используйте строку:
-
-[.programlisting]
-....
-set log +tcp/ip
-....
-
-Это включит протоколирование всего трафика через соединение. В следующий раз, когда неожиданно будет установлено соединение, в файл протокола будет следом занесена причина с отметкой времени.
+Не волнуйтесь, `toor` является "альтернативной" учётной записью суперпользователя (toor - это root, записанный задом наперёд).
+Его предлагается использовать с нестандартным командным интерпретатором, так чтобы не нужно было менять используемый по умолчанию командный процессор для `root`.
+Это важно, так как оболочки, не являющиеся частью дистрибутива системы, но установленные из портов или пакаджей, размещаются в каталоге [.filename]#/usr/local/bin#, который по умолчанию располагается в другой файловой системе.
+Если командный процессор для пользователя `root` располагается в [.filename]#/usr/local/bin# и файловая система, содержащая [.filename]#/usr/local/bin#, не смонтирована, то пользователь `root` не сможет войти в систему для исправления проблемы и понадобится перезагрузиться в однопользовательском режиме, чтобы указать путь до командного процессора.
-Теперь отключите дозвон при данных условиях. Как правило, такие проблемы возникают из-за обращений к DNS. Для предотвращения обращений к DNS и установления соединения (что _не_ запретит man:ppp[8] пропускать пакеты через уже установленное соединение), используйте такую комбинацию:
-
-[.programlisting]
-....
-set dfilter 1 deny udp src eq 53
-set dfilter 2 deny udp dst eq 53
-set dfilter 3 permit 0/0 0/0
-....
-
-Это не всегда удобно, так как закрывает возможность дозвона по запросу. Большинству программ нужно обратиться к DNS до того, как начать работать.
-
-В случае DNS попытайтесь установить, что именно пытается определить имя хоста. В большинстве случаев виновным оказывается Sendmail. Проверьте, чтобы в конфигурационном файле программы Sendmail не было указано обращаться к DNS. Обратитесь к разделу об extref:{handbook}mail/[использовании электронной почты при коммутируемом соединении, smtp-dialup] в Руководстве FreeBSD за подробным описанием. Вам может понадобиться добавить в файл [.filename]#.mc# строку:
-
-[.programlisting]
-....
-define(`confDELIVERY_MODE', `d')dnl
-....
-
-Это заставит Sendmail добавлять все сообщения в очередь до тех пор, пока не будет запущена её обработка, как правило, каждые 30 минут, или пока не будет выполнена команда `sendmail -q`, возможно, из файла [.filename]#/etc/ppp/ppp.linkup#).
-
-=== Что означают ошибки CCP
-
-В файле протокола появляются такие сообщения об ошибках:
-
-[.programlisting]
-....
-CCP: CcpSendConfigReq
-CCP: Received Terminate Ack (1) state = Req-Sent (6)
-....
-
-Это происходит, если man:ppp[8] пытается установить сжатие Predictor1, а противоположная сторона не хочет устанавливать никакого сжатия. Эти сообщения безобидны, но их можно заглушить отключением сжатия:
-
-[.programlisting]
-....
-disable pred1
-....
-
-=== Почему ppp не протоколирует скорость соединения?
-
-Для записи полного протокола взаимодействия с модемом включите следующее:
-
-[.programlisting]
-....
-set log +connect
-....
-
-Это заставит man:ppp[8] протоколировать всё, вплоть до последней прочтённой через "expect" строки.
-
-Чтобы увидеть скорость соединения при использовании PAP или CHAP, укажите man:ppp[8] ожидать полную строку CONNECT:
-
-[.programlisting]
-....
-set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 4 \
- \"\" ATZ OK-ATZ-OK ATDT\\T TIMEOUT 60 CONNECT \\c \\n"
-....
-
-Здесь мы получаем строку CONNECT, ничего не посылаем, а затем ожидаем символа перевода строки, заставляя man:ppp[8] читать целиком содержимое ответа CONNECT.
-
-=== Ppp игнорирует символ \ в chat-скрипте
-
-Программа ppp разбирает каждую строку в конфигурационных файлах и поэтому может правильно интерпретировать строки вида `set phone "123 456 789"` и обнаруживать, что на самом деле номер является единственным аргументом. Для того, чтобы указать символ `"`, заэкранируйте его символом обратного слэша (`\`).
-
-Когда интерпретатор chat разбирает каждый параметр, он ещё раз просматривает аргумент на предмет каких-либо специальных последовательностей типа `\P` или `\T`. Вследствие этой двойной интерпретации не забывайте об использовании нужного количества экранирующих символов.
-
-Чтобы передать сам символ `\`, укажите что-то типа:
-
-[.programlisting]
-....
-set dial "\"\" ATZ OK-ATZ-OK AT\\\\X OK"
-....
-
-Это приведёт к такой последовательности:
-
-[.programlisting]
-....
-ATZ
-OK
-AT\X
-OK
-....
-
-Или:
-
-[.programlisting]
-....
-set phone 1234567
-set dial "\"\" ATZ OK ATDT\\T"
-....
-
-Это даст такую последовательность:
-
-[.programlisting]
-....
-ATZ
-OK
-ATDT1234567
-....
-
-=== Процесс, вызвавший прозвонку в режиме -auto, никогда не получает затребованного соединения
-
-Эта проблема проявлялась, когда man:ppp[8] в режиме `-auto` был настроен на динамическое согласование локального IP-адреса с противоположной стороной. Это было давно исправлено - поищите на странице справочника слово `iface`.
-
-Причиной было то, что когда эта программа использует системный вызов man:connect[2], для сокета назначается IP-адрес интерфейса man:tun[4]. Ядро создаёт первый исходящий пакет и записывает его в устройство man:tun[4]. Затем man:ppp[8] читает пакет и устанавливает соединение. Если в результате согласования man:ppp[8] динамического IP-адреса адрес интерфейса изменится, сокет будет работать некорректно. Любые IP-пакеты, передаваемые через сокет, будут отброшены. Если даже этого не произойдёт, ответные данные не будут достигать отправителя, так как этот адрес больше ему не принадлежит.
-
-Теоретически есть несколько способов решить эту проблему. Лучше всего, если противоположная сторона назначит интерфейсу тот же самый IP-адрес. Текущая версия man:ppp[8] именно так и поступает, но большинство других реализаций этого не делают.
-
-Самым простым решением будет просто никогда не менять IP-адрес интерфейса man:tun[4], а вместо этого изменять на лету все исходящие пакеты так, чтобы IP-адрес источника менялся с IP-адреса интерфейса на соответствующий с противоположной стороны. Это, в сущности, то же самое, что делает опция `iface-alias` в самой последней версии man:ppp[8] (с помощью библиотеки man:libalias[3] и ключа `-nat` для man:ppp[8]) - она отслеживает все назначенные ранее интерфейсу адреса и замещает их на последний из назначенных.
-
-Другой возможный (и, наверное, самый надёжный) способ - это создать системный вызов, меняющий IP-адреса всем уже связанным сокетам. man:ppp[8] использовал бы этот вызов для модификации сокетов всех работающих программ после согласования нового IP-адреса. Этот же самый системный вызов могли бы использовать клиенты DHCP, когда они осуществляют повторную привязку к сокету, вызывая для этого функцию `bind()`.
-
-Ещё одной возможностью является разрешение интерфейсу становиться активным без IP-адреса. Исходящим пакетам будет даваться IP адрес `255.255.255.255` до первого вызова man:ioctl[2] `SIOCAIFADDR`, приводящего к полной привязке сокета. man:ppp[8] нужно будет изменять исходящий IP-адрес и контрольную сумму пакета, только если он установлен в `255.255.255.255`. Это, однако, является некоторым хаком, так как ядро будет посылать некорректные пакеты на не полностью сконфигурированный интерфейс, в предположении, что существует механизм исправления этих пакетов.
-
-=== Что такое ошибки FCS?
-
-FCS является сокращением от Frame Check Sequence (контроль последовательности кадров). Каждый кадр PPP имеет контрольную сумму для проверки того, что принятые данные совпадают с переданными. Если FCS принятого пакета некорректна, пакет отбрасывается и счётчик FCS для HDLC увеличивается. Значения ошибок уровня HDLC можно вывести командой `show hdlc`.
-
-Если линия плохого качества или драйвер коммуникационного адаптера отбрасывает пакеты, будут появляться случайные ошибки FCS. Это обычно не является причиной для волнений, хотя это существенно замедляет протоколы компрессии.
-
-Если связь замирает сразу при установлении соединения и наблюдается большое количество ошибок FCS, убедитесь, чтобы модем не использовал программное управление потоком (XON/XOFF). Если же для соединения должно использоваться программное управление потоком, то воспользуйтесь командой `set accmap 0x000a0000` для указания man:ppp[8] экранировать символы `^Q` и `^S`.
-
-Другой причиной слишком большого количества ошибок FCS может быть прекращение противоположной стороной сеанса PPP. В этом случае включите протоколирование `async` для проверки того, не являются ли поступаемые из линии данные на самом деле приглашением login или shell. Если с противоположной стороны находится приглашение shell, завершить man:ppp[8] без обрыва связи можно командой `close lcp` и последующей командой `term`, чтобы переподключиться к приглашению shell на удалённой машине.
-
-Если ничего в файле протокола не говорит о причине разрыва связи, спросите у администратора удалённой машины или вашего провайдера, почему сеанс был закрыт.
-
-=== Ничего не помогает - я уже отчаялся!
-
-Если всё уже перепробовано, и ничего не получается, пошлите подробности об ошибке, конфигурационные файлы, способ запуска man:ppp[8], соответствующие части файла протокола, и вывод команды `netstat -rn` до и после соединения в {freebsd-questions}.
+Некоторые используют `toor` для выполнения повседневных административных работ с нестандартным командным процессором, оставляя `root` со стандартной оболочкой для работы в однопользовательском режиме или выполнения аварийных работ.
+По умолчанию ни один пользователь не сможет войти в систему как `toor`, потому что для этой учётной записи не указан пароль, поэтому войдите из-под `root` и установите пароль для `toor` до того, как использовать его для входа в систему.
+[[serial]]
== Коммуникационные адаптеры
-В этом разделе освещены вопросы о работе последовательных адаптеров во FreeBSD. Протокол PPP рассматривается в разделе <<networking,Работа в сети>>.
-
-=== Какие многопортовые последовательные адаптеры поддерживаются во FreeBSD?
-
-Список таких устройств находится в главе Руководства extref:{handbook}serialcomms/[Последовательные соединения, serial].
-
-Большинство многопортовых PCI адаптеров на базе 16550 и их клоны поддерживаются без дополнительных усилий.
+В этом разделе освещены вопросы о работе последовательных адаптеров во FreeBSD.
-Некоторые безымянные клоны таких адаптеров тоже работают нормально, особенно те, которые заявляют о своей совместимости с AST.
-
-Прочтите страницы Справочника man:uart[4] и man:sio[4] для получения подробной информации о конфигурировании таких адаптеров.
-
-=== Как сделать, чтобы приглашение boot: выводилось на консоль на последовательном порту?
+[[serial-console-prompt]]
+=== Как сделать так, чтобы приглашение boot: выводилось на консоль на последовательном порту?
Подробная информация находится в extref:{handbook}serialcomms/[этом разделе Руководства, serialconsole-setup].
+[[found-serial]]
=== Как узнать, обнаружила ли FreeBSD последовательные порты или внутренние модемы?
В процессе своей загрузки ядро FreeBSD будет пытаться найти последовательные порты, с поддержкой которых ядро сконфигурировано. Внимательно просмотрите сообщения загрузки либо выполните такую команду после того, как система запустилась и работает:
[source,shell]
....
-% dmesg | grep -E "^sio[0-9]"
-sio0: <16550A-compatible COM port> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0
-sio0: type 16550A
-sio1: <16550A-compatible COM port> port 0x2f8-0x2ff irq 3 on acpi0
-sio1: type 16550A
+% grep -E '^(sio|uart)[0-9]' < /var/run/dmesg.boot
+uart0: <16550 or compatible> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0
+uart0: console (115200,n,8,1)
+uart1: <16550 or compatible> port 0x2f8-2x3ff irq 3 on acpi0
....
-Здесь присутствуют два последовательных порта. Первый находится на IRQ4, порт ввода/вывода `0x3f8`, и построен на микросхеме UART типа 16550A. Второй использует тот же тип микросхемы, но находится на IRQ3 и использует адрес порта ввода/вывода `0x2f8`. Внутренние модемы выглядят точно также, как последовательные порты, за исключением того, что модем к ним подключен всегда.
+В этом примере присутствуют два последовательных порта. Первый находится на IRQ4, порт ввода/вывода `0x3f8`, и построен на микросхеме UART типа 16550. Второй использует тот же тип микросхемы, но находится на IRQ3 и использует адрес порта ввода/вывода `0x2f8`. Внутренние модемы выглядят точно также, как последовательные порты, за исключением того, что модем к ним подключен всегда.
В ядро [.filename]#GENERIC# встроена поддержка двух последовательных портов, с теми же IRQ и адресами портов ввода/вывода, как указано в примере выше. Если эти настройки не соответствуют системе или имеется больше внутренних модемов или последовательных портов, чем описано в ядре, переконфигурируйте его, следуя инструкциям в разделе <<make-kernel,о построении ядра>>.
-=== Как осуществляется доступ к последовательным портам во FreeBSD?
+[[access-serial-ports]]
+=== Как осуществляется доступ к последовательным портам во FreeBSD? (специфично для x86)
Третий последовательный порт, [.filename]#sio2# или [.filename]#COM3#, обозначается как [.filename]#/dev/cuad2# для устройств, выполняющих исходящие звонки, и [.filename]#/dev/ttyd2# для устройств, принимающих входящие звонки. Какая разница между этими двумя классами устройств?
При открытии [.filename]#/dev/ttydX# в блокирующем режиме процесс будет ожидать неактивности соответствующего устройства [.filename]#cuadX#, а затем появления сигнала о наличии несущей. При открытии устройства [.filename]#cuadX# он проверяет, что последовательный порт не занят устройством [.filename]#ttydX#. Если порт доступен, он похищает его у устройства [.filename]#ttydX#. Также устройство [.filename]#cuadX# не следит за наличием несущей. С такой схемой работы и модемом в режиме автоответа удалённые пользователи могут входить в систему, а локальные пользователи через тот же модем могут по прежнему осуществлять исходящие звонки, а система позаботится о возможных конфликтах.
+[[enable-multiport-serial]]
=== Как включить поддержку многопортовых последовательных адаптеров?
Информация о конфигурировании ядра содержится в соответствующем разделе, посвящённом этому вопросу. Для многопортовых последовательных адаптеров добавьте в файл man:device.hints[5] по строке man:sio[4] на каждый порт. Но IRQ должен быть указан только у одного порта. Все порты на адаптере должны использовать одно и то же значение IRQ. Для обеспечения согласованности используйте для указания IRQ последний последовательный порт. Также укажите следующую опцию в файле конфигурации ядра:
@@ -2519,18 +2518,13 @@ hint.sio.7.irq="12"
Флаги указывают, что управляющий порт имеет младший номер устройства `7` (`0x700`), и все порты совместно используют один и тот же номер IRQ (`0x001`).
-=== Можно ли настроить для порта режим работы по умолчанию?
-
-Смотрите раздел Руководства FreeBSD, посвящённый extref:{handbook}serialcomms[последовательным соединениям, serial].
-
-=== Как сделать вход через модем?
+[[default-serial-params]]
+=== Можно ли настроить для последовательного порта режим работы по умолчанию?
-Ознакомьтесь с разделом Руководства FreeBSD, посвящённым extref:{handbook}serialcomms/[входящим соединениям, dialup].
-
-=== Как подключить терминал к FreeBSD?
-
-Информация по этому вопросу находится в разделе extref:{handbook}serialcomms/[Терминалы, term] Руководства FreeBSD.
+Смотрите раздел Руководства по FreeBSD, посвящённый
+extref:{handbook}serialcomms/[последовательным соединениям, serial-hw-config].
+[[cannot-tip]]
=== Почему не удаётся запустить tip или cu?
Встроенные утилиты man:tip[1] и man:cu[1] могут получить доступ к каталогу [.filename]#/var/spool/lock# только из-под пользователя `uucp` и членов группы `dialer`. Используйте группу `dialer` для управления доступом к модему или удалённым системам посредством добавления в неё пользовательских учётных записей.
@@ -2545,16 +2539,23 @@ hint.sio.7.irq="12"
== Разное
+[[more-swap]]
=== Почему FreeBSD использует много места в разделе подкачки даже при большом объёме свободной памяти?
FreeBSD активно перемещает неиспользуемые страницы памяти, к которым не было обращений, в раздел подкачки, чтобы увеличить объём доступной физической памяти для активного использования. Такое активное использование раздела подкачки компенсируется использованием дополнительной свободной оперативной памяти для кеширования.
Заметьте, что хотя FreeBSD предпочитает использовать раздел подкачки, страницы не перемещаются произвольно при полностью неактивной системе. По этой причине система не будет находиться целиком в разделе подкачки после ночного простаивания.
+[[top-freemem]]
=== Почему утилита man:top[1] показывает очень маленький объём свободной памяти, даже когда запущено всего лишь несколько приложений?
-Просто дело в том, что под свободной памятью подразумевается никак не используемая память. Вся память, которая программам явно не выделялась, используется ядром FreeBSD для дискового кэша. Значения, показываемые утилитой man:top[1], помеченные как `Inact`, `Cache` и `Buf` - это всё кэшированные данные разных степеней устаревания. То, что данные находятся в кэше, означает, что система не будет обращаться к медленному диску снова за теми данными, обращение к которым было недавно, повышая таким образом общую производительность. В общем случае маленькие значения в пункте `Free`, показываемые утилитой man:top[1] для свободной памяти - это хорошо, если, конечно они не _очень_ маленькие.
+Просто дело в том, что под свободной памятью подразумевается никак не
+используемая память. Вся память, которая программам явно не выделялась,
+используется ядром FreeBSD для дискового кэша. Значения, показываемые
+утилитой &man.top.1; с метками `Inact` и `Laundry`, являются кэшированными
+данными разных степеней устаревания. То, что данные находятся в кэше, означает, что система не будет обращаться к медленному диску снова за теми данными, обращение к которым было недавно, повышая таким образом общую производительность. В общем случае маленькие значения в пункте `Free`, показываемые утилитой man:top[1] для свободной памяти - это хорошо, если, конечно они не _очень_ маленькие.
+[[chmod-symlinks]]
=== Почему командой chmod невозможно изменить права на символические ссылки?
Символические ссылки не имеют атрибутов доступа, и по умолчанию утилита man:chmod[1] следует по символической ссылке, чтобы по возможности изменить права доступа на исходный файл. Для файла [.filename]#foo# с символической ссылкой [.filename]#bar# на этот файл эта команда всегда будет выполняться успешно.
@@ -2581,21 +2582,26 @@ FreeBSD активно перемещает неиспользуемые стр
Если задан ведущий слэш, то man:chmod[1] будет следовать символической ссылке [.filename]#foo#, меняя права на каталог [.filename]#bar#.
====
-=== Можно ли запускать программы для DOS во FreeBSD?
+[[dos-binaries]]
+=== Могу ли я запускать программы для DOS во FreeBSD?
-Да. Программа эмуляции DOS package:emulators/doscmd[] включена в Коллекцию Портов FreeBSD.
+Да.
+Программа эмуляции DOS, package:emulators/doscmd[], доступна в Коллекции Портов
+FreeBSD.
Если doscmd не достаточно, package:emulators/pcemu[] эмулирует 8088 и набор сервисов BIOS, достаточный для запуска многих приложений текстового режима DOS. Требуется X Window System.
В Коллекции Портов FreeBSD также имеется package:emulators/dosbox[]. Программа в основном предназначена для эмуляции старых игр, написанных под DOS, для хранения файлов которых используется локальная файловая система.
-=== Что мне нужно сделать, чтобы перевести документацию FreeBSD на родной язык?
+[[translation]]
+=== Что мне нужно сделать, чтобы перевести документацию FreeBSD на мой родной язык?
Ознакомьтесь с extref:{fdp-primer}[FAQ по Переводам, translations] из FreeBSD Documentation Project Primer.
+[[freebsd-mail-bounces]]
=== Почему возвращается моя электронная почта, отправленная на любой из адресов FreeBSD.org?
-В почтовой системе `FreeBSD.org` в Postfix применяются некоторые проверки входящей почты, и отвергаются сообщения, которые были неправильно сформированы при пересылке либо как-то иначе похожи на спам. Некоторые из требований:
+В почтовой системе `FreeBSD.org` в Postfix применяются некоторые проверки входящей почты, и отвергаются сообщения, которые были неправильно сформированы при пересылке либо как-то иначе похожи на спам. Вот некоторые из требований:
* IP-адрес клиента SMTP должен иметь обратное преобразование в символическое имя.
* Полное имя хоста, указанное на этапе EHLO/HELO в процессе обмена сообщениями SMTP, должно разрешаться в IP-адрес клиента.
@@ -2603,46 +2609,61 @@ FreeBSD активно перемещает неиспользуемые стр
Дополнительные советы по доставке письма:
* Письмо должно быть отправлено в текстовом формате. Сообщение в почтовый список рассылки, как правило, не должно иметь размер больше 200 Кбайт.
-* Избегайте избыточного кросспостинга. Выберите _один_ список рассылки, который кажется наиболее подходящим.
+* Избегайте избыточного кросспостинга.
+Выберите _один_ список рассылки, который кажется наиболее подходящим.
Если у вас всё ещё остались трудности при работе с почтовой инфраструктурой `FreeBSD.org`, отправьте сообщение с подробным описанием на адрес mailto:postmaster@freebsd.org[postmaster@freebsd.org]. Укажите в нём временной интервал для проверки логов - и обратите внимание, что мы держим журнал почтовых логов всего за неделю. (Обязательно укажите часовой пояс или разницу в UTC.)
+[[free-account]]
=== Где можно получить бесплатный доступ к FreeBSD?
Хотя FreeBSD не предоставляет бесплатный доступ ни к одному из своих серверов, другие компании предоставляют UNIX(R)-системы с открытым доступом. Стоимость этой услуги различна, также как и ограниченный набор услуг.
http://www.arbornet.org/[Arbornet, Inc], также известный как _M-Net_, предоставляет свободный доступ к UNIX(R)-системам с 1983 года. Начиная на платформе Altos с работающей System III, сайт перешёл на BSD/OS в 1991. В июне 2000 сайт сменил систему снова, теперь на FreeBSD. _M-Net_ может быть доступна через протоколы telnet и SSH и предоставляет доступ к полному набору программного обеспечения FreeBSD. Однако доступ к сети ограничен для членов и спонсоров, которые поддерживают систему, которая работает как неприбыльная организация. _M-Net_ предоставляет также услуги электронной доски объявлений (BBS) и интерактивного чата.
+[[daemon-name]]
=== Как зовут этого маленького симпатичного красного парня?
-У него нет определённого имени, он называется просто "даемон BSD". Если вам непременно нужно имя, называйте его "beastie". Заметьте, что "beastie" произносится как "BSD".
+У него нет определённого имени, он называется просто "даемон BSD".
+Если вам непременно нужно имя, называйте его "beastie".
+Заметьте, что "beastie" произносится как "BSD".
Больше о даемоне BSD можно узнать из его http://www.mckusick.com/beastie/index.html[домашней страницы].
+[[use-beastie]]
=== Могу ли я использовать изображение даемона BSD?
-Вполне. Права на даемона BSD имеет Marshall Kirk McKusick. Для выяснения подробностей относительно правил его использования обратитесь к странице автора http://www.mckusick.com/beastie/mainpage/copyright.html[Statement on the Use of the BSD Daemon Figure].
+Вполне может быть.
+Правами на даемона BSD обладает Marshall Kirk McKusick.
+Для выяснения подробностей относительно правил его использования обратитесь к странице автора http://www.mckusick.com/beastie/mainpage/copyright.html[Statement on the Use of the BSD Daemon Figure].
В общем, использовать изображение можно в высокохудожественном стиле и в личных целях, если даются соответствующие отсылки. Перед использованием знака в коммерческих целях обратитесь за разрешением к {mckusick}. Дополнительная информация находится на http://www.mckusick.com/beastie/index.html[домашней странице Даемона BSD].
-=== Не найдется ли у вас изображений даемона BSD, которые можно использовать?
+[[daemon-images]]
+=== Не найдётся ли у вас изображений даемона BSD, которые можно использовать?
-В каталоге [.filename]#/usr/shared/examples/BSD_daemon/# есть рисунки в форматах eps и Xfig.
+В каталоге [.filename]#/usr/share/examples/BSD_daemon/# есть рисунки в форматах
+eps и Xfig.
-=== При просмотре списков рассылки, я встретил акроним или другой термин, который мне не понятен. Где я должен посмотреть, что он значит?
+[[glossary]]
+=== При просмотре списков рассылки я встретил сокращение или другой термин, который мне не понятен. Где я должен посмотреть, что он значит?
-Пожалуйста, обращайтесь к extref:{handbook}glossary/[Глоссарию FreeBSD, freebsd-glossary].
+Обратитесь к extref:{handbook}glossary/[Глоссарию FreeBSD].
+[[bikeshed-painting]]
=== Почему я должен беспокоиться о цвете велосипедных навесов (bikeshed)?
На самом деле, очень краткий ответ на этот вопрос заключается в том, что вы этого делать не должны. Если давать более подробный ответ, то ваше умение делать навесы не должно означать, что вы должны препятствовать другим делать их просто потому, что вам не нравится цвет, в который они собираются их окрашивать. Эта метафора означает, что вам не нужно обсуждать каждую мелочь просто потому, что вы знаете о ней достаточно много. Некоторые люди отмечают, что объём шума, генерируемый при появлении некоторого изменения, находится в обратной зависимости от сложности самого изменения.
-Более пространный и полный ответ заключается в том, что после очень долгого обсуждения того, должна ли утилита man:sleep[1] обрабатывать дробное число, заданное в качестве второго аргумента, {phk} опубликовал большое сообщение, озаглавленное "link:http://www.FreeBSD.org/cgi/getmsg.cgi?fetch=506636+517178+/usr/local/www/db/text/1999/freebsd-hackers/19991003.freebsd-hackers[Велосипедный навес (подставьте здесь цвет) на зелёной траве...]". Соответствующие части этого сообщения цитируются ниже.
+Более пространный и полный ответ заключается в том, что после очень долгого обсуждения того, должна ли утилита man:sleep[1] обрабатывать дробное число, заданное в качестве второго аргумента, {phk} опубликовал большое сообщение,
+озаглавленное link:http://www.bikeshed.com[Велосипедный навес (любого цвета) на
+зелёной траве...]. Соответствующие части этого сообщения цитируются ниже.
{phk} on freebsd-hackers, October 2, 1999
-"Что это за история с навесом для велосипеда?" Кто-то из вас задавал такой вопрос.
+"Что это за история с этим навесом для велосипеда?", кто-то из вас спрашивал меня.
-Это долгая история, или же это старая история, но на самом деле она коротка. В начале 1960-х годов Паркинсон (C. Northcote Parkinson) написал книгу "Закон Паркинсона", которая содержит много интересных взглядов на процесс управления.
+Это долгая история, точнее, это старая история, но на самом деле она коротка.
+В начале 1960-х годов Сирил Норткот Паркинсон (C. Northcote Parkinson) написал книгу "Законы Паркинсона", которая содержит много интересных взглядов на процесс управления.
_[немного выдержек из краткого содержания книги]_
@@ -2654,25 +2675,61 @@ _[немного выдержек из краткого содержания к
Велосипедный навес - это противоположный случай. Любой может построить навес за один уикэнд, и у него ещё останется время посмотреть футбол по телевизору. Так что не важно, насколько хорошо вы готовились к обсуждению, насколько убедительны будут ваши аргументы, кто-нибудь воспользуется шансом показать, что он не зря ест свой хлеб, что он обращает внимание, что он _здесь_.
-В Дании это называется "оставить отпечаток своего пальца". Это касается личной гордости и престижа, это похоже на возможность указать куда-то и сказать: " Вон там! Это сделал _я_." Это сильно выражено в политиках, но присутствует во многих людях, которые получают возможность сделать это. Просто вспомните об отпечатках ног во влажном цементе.
+В Дании это называется “оставить отпечаток своего пальца”.
+Это всё касается личной гордости и престижа, это возможность указать куда-то и сказать: “Вот! Это сделал я”.
+Это сильно выражено в политиках, но присутствует во многих людях, которые получают возможность сделать это.
+Просто вспомните об отпечатках ног во влажном цементе.
== Юмор от FreeBSD
-=== Насколько греется процессор при работе FreeBSD?
-
-В. Кто-нибудь делал замеры температуры при работе FreeBSD? Я знаю, что Linux(R) греется меньше, чем DOS, но никогда не видел упоминания FreeBSD. Наверное, он сильно греется.
-
-О. Нет, но мы сделали различные вкусовые тесты у добровольцев с завязанными глазами, которые до этого приняли по 250 микрограмм LSD-25. 35% добровольцев заявило, что FreeBSD имеет вкус апельсина, тогда как вкус Linux(R) расценивался как фиолетовый туман. Ни одна из групп не отметила значительной разницы в температуре. Мы хотели опубликовать полные результаты этого опроса, когда обнаружили, что слишком много добровольцев покинули помещение во время тестов, что несколько смазало результаты. Думаем, что большинство из них работают сейчас в Apple над их новым GUI "чеши и нюхай". Это старый добрый бизнес!
-
-Если серьёзно, то FreeBSD использует инструкцию HLT (halt), когда система простаивает, что уменьшает потребление энергии и, в свою очередь, выделение тепла. Вдобавок, если у вас настроен ACPI (усовершенствованный интерфейс управления конфигурацией и питанием), то FreeBSD может переводить процессор в режим пониженного энергопотребления.
-
+[[very-very-cool]]
+=== Насколько FreeBSD горяча?
+
+_В._ Кто-нибудь делал замеры температуры при работе FreeBSD?
+Я знаю, что Linux(R) греется меньше, чем DOS, но никогда не видел упоминания FreeBSD.
+Наверное, эта система - горячая штучка.
+
+_О._ Нет, но мы сделали различные вкусовые тесты у добровольцев с завязанными
+глазами, которые до этого приняли по 250 микрограмм LSD-25. 35% участников
+заявили, что FreeBSD имеет вкус апельсина, тогда как вкус Linux(R) был похож на
+фиолетовый туман. Ни одна из групп не отметила значительной разницы в
+температуре. Мы уже собирались опубликовать полные результаты этого опроса,
+когда обнаружили, что слишком много добровольцев покинули помещение во время
+тестов, что несколько смазало результаты. Думаем, что большинство добровольцев
+работают сейчас в Apple над их новым GUI "чеши и нюхай". Это ведь старый
+добрый бизнес!
+
+Если серьёзно, то FreeBSD использует инструкцию HLT (halt), когда система
+простаивает, что уменьшает потребление энергии и, в свою очередь, выделение
+тепла.
+Вдобавок, если у вас настроен ACPI (усовершенствованный интерфейс
+управления конфигурацией и питанием), то FreeBSD может переводить процессор в
+режим пониженного энергопотребления.
+
+[[letmeoutofhere]]
=== Кто там скребётся в микросхемах памяти??
-В. Делает ли FreeBSD что-нибудь "эдакое" при компиляции ядра, что вызывает поскрипывание микросхем памяти? При компиляции (и в короткий промежуток времени после обнаружения дисковода при старте системы) от микросхем памяти исходит странный царапающий звук.
-
-О. Да! Вы, наверное, видели частое упоминание "даемонов" в документации по BSD, но не многие знают, что это настоящие нематериальные существа, которые теперь завладели вашим компьютером. Царапающий звук, издаваемый микросхемами памяти - это на самом деле высокочастотное перешёптывание между даемонами, когда они решают, как лучше справиться с различными задачами по администрированию системы.
-
-Если шум достиг ваших ушей, команда DOS `fdisk /mbr` их спугнёт, но не удивляйтесь, если они отреагируют соответствующим образом и попытаются вас остановить. Фактически, если во время выполнения этой команды вы услышите сатанинский голос Билла Гейтса из встроенного динамика, бегите и даже не оглядывайтесь! Избавленные от противостояния с даемонами BSD, близнецы-демоны DOS и Windows(R) часто могут захватить полный контроль не только над вашей машиной и навлечь вечное проклятие на вашу душу. Теперь, когда вы это знаете, если бы у вас был выбор, думаем, что вы бы предпочли слышать царапающий звук, не так ли?
+_В._ Делает ли FreeBSD что-нибудь "эдакое" при компиляции ядра, что вызывает поскрипывание микросхем памяти?
+При компиляции (и в короткий промежуток времени после обнаружения дисковода при старте системы) от, видимо, микросхем памяти исходит странный царапающий звук.
+
+_О._ Да!
+Вы встретите частое упоминание "даемонов" в документации по BSD, но
+не все знают, что речь идёт о настоящих нематериальных существах, которые
+теперь завладели и вашим компьютером. Царапающий звук, издаваемый микросхемами
+памяти - это на самом деле высокочастотное перешёптывание между даемонами,
+когда они решают, как лучше справиться с различными задачами по
+администрированию системы.
+
+Если шум достиг ваших ушей, команда DOS `fdisk /mbr` их спугнёт, но не
+удивляйтесь, если они отреагируют соответствующим образом и попытаются вас
+остановить.
+Фактически, если во время выполнения этой команды вы услышите сатанинский голос
+Билла Гейтса из встроенного динамика, бегите и даже не оглядывайтесь!
+Избавленные от противостояния с даемонами BSD, близнецы-демоны DOS и Windows(R)
+часто могут захватить полный контроль над вашей машиной, чтобы навлечь
+вечное проклятие на вашу душу.
+Теперь, когда вы это знаете, если бы у вас был выбор, думаем, что вы бы
+предпочли привыкнуть к царапающему звуку, не так ли?
=== Сколько требуется разработчиков FreeBSD, чтобы сменить электрическую лампочку?
@@ -2740,6 +2797,7 @@ _И на меня снизошло озарение :-)_
_{tabthorpe}_ говорит: "Нет, _настоящие_ хакеры FreeBSD не боятся темноты!"
+[[dev-null]]
=== Куда направляются данные, записываемые в /dev/null?
Они отправляются в специальную сточную трубу для данных в CPU, где преобразуются в тепло, выдуваемое через охлаждающие вентиляторы. Вот почему охлаждение ЦП становится все более важным; так как люди используют все более быстрые процессоры, они все менее заботятся о данных, все большее их количество оканчивает свой путь в [.filename]#/dev/null#, перегревая ЦП. Если вы удалите [.filename]#/dev/null# (что соответственно отключит трубу данных в ЦП), то ваш процессор может охладиться, но система начнет переполняться излишними данными и начнет работать с ошибками. Если у вас быстрое сетевое подключение, вы можете охладить CPU, читая данные из [.filename]#/dev/random# и посылая их куда-нибудь; однако вы рискуете перегреть ваше сетевое соединение и [.filename]#/# или разозлить вашего провайдера, так как большинство данных преобразуется в тепло на его оборудовании, но, как правило, у него хорошее охлаждение, так что если вы не перестараетесь, все должно быть в порядке.
@@ -2752,40 +2810,46 @@ _Пол Робинсон (Paul Robinson) добавляет:_
Как бывший администратор крупного провайдера, который имел много проблем при попытке поддерживать постоянную температуру в серверной комнате, я выступаю против того, чтобы люди посылали ненужные им данные в сеть. Волшебников, которые выполняют коммутацию пакетов и маршрутизацию, это также затрудняет.
+[[punk-my-friend]]
+=== Мой коллега проводит слишком много времени за компьютером.
+Как я могу отвадить его от этого?
+
+Установите пакет package:games/sl[] и дождитесь момента, когда коллега ошибочно
+введёт `sl` вместо `ls`.
+
== Сложные темы
+[[learn-advanced]]
=== Как можно узнать больше о внутреннем устройстве FreeBSD?
-Список относящихся к делу книг можно найти в разделе Руководства extref:{handbook}bibliography/[ Библиография по внутреннему устройству операционной системы, bibliography-osinternals].
+Обратитесь к extref:{arch-handbook}[Руководству по архитектуре FreeBSD].
Кроме того, большинство общих знаний о UNIX(R) непосредственно применимо к FreeBSD.
-=== Как можно оказать помощь проекту FreeBSD?
+[[how-to-contribute]]
+=== Как внести свой вклад в проект FreeBSD? Что можно сделать в качестве помощи?
-Пожалуйста, обратитесь к соответствующей extref:{contributing}[статье], в которой вы получите советы относительно того, как это сделать. Ваша помощь более чем приветствуется!
+Мы принимаем помощь в любой форме: документации, кода и даже
+художественной графики. Обратитесь к соответствующей статье
+extref:{contributing}[Участие в проекте FreeBSD], в которой вы найдёте советы
+относительно того, как это сделать.</para>
+И спасибо вам за то, что вы об этом подумали!
+
+[[define-snap-release]]
=== Что такое снапшоты и релизы?
-В http://svnweb.FreeBSD.org/base/[Хранилище Subversion] сейчас находятся {rel-numbranch} активно/полуактивно развивающихся ветки FreeBSD. (Более ранние ветки изменяются очень редко, именно поэтому в разработке только {rel-numbranch} активные ветки):
+В http://cgit.FreeBSD.org/src/[хранилище Git] сейчас находятся {rel-numbranch} активно/полуактивно развивающихся ветки FreeBSD.
+(Более ранние ветки изменяются очень редко, именно поэтому в разработке только {rel-numbranch} активные ветки):
-* {rel3-releng}, также известная как {rel3-stable}
* {rel2-releng}, также известная как {rel2-stable}
* {rel-releng}, также известная как {rel-stable}
* {rel-head-releng}, также известная как _-CURRENT_ и {rel-head}
-`HEAD` - это не настоящий тэг ветки. Это символьная константа для обозначения текущего, не ветвящегося, находящегося в разработке дерева, то есть _-CURRENT_.
-
-На данный момент _-CURRENT_ является находящимся в разработке деревом {rel-head-relx}; ветка {rel-stable}, {rel-releng}, отделилась от _-CURRENT_ {rel-relengdate} года, а ветка {rel2-stable}, {rel2-releng}, отделилась от _-CURRENT_ {rel2-relengdate}.
-
-=== Можно ли работать с -CURRENT при ограниченном доступе в Internet?
-
-Да, это можно делать _без_ скачивания полного дерева исходных текстов с помощью extref:{handbook}[системы CTM].
-
-=== Я написал некоторое добавление к ядру, кому его послать?
-
-Обратитесь к статье о том, как extref:{contributing}[помочь проекту FreeBSD], чтобы выяснить, как это сделать.
-
-И спасибо Вам за Ваши усилия!
+На данный момент _-CURRENT_ является находящимся в разработке деревом
+{rel-head-relx}; ветка {rel-stable}, {rel-releng}, отделилась от _-CURRENT_
+{rel-relengdate}, а ветка {rel2-stable}, {rel2-releng}, отделилась от
+_-CURRENT_ {rel2-relengdate}.
=== Что делать при аварийном останове системы?
@@ -2808,27 +2872,30 @@ trap number = 12
panic: page fault
....
-Этого сообщения не достаточно. Здесь важно значение указателя инструкций, но оно зависит от конфигурации, поскольку значение меняется для каждого конкретного файла ядра. Если это ядро [.filename]#GENERIC# из одного из снэпшотов, то кто-то ещё может отследить функцию, вызвавшую ошибку, но в случае со специально сконфигурированным ядром только вы можете сказать нам, где случилась ошибка.
+Этого сообщения не достаточно.
+Хотя значение указателя инструкций важно, но оно зависит от конфигурации, поскольку значение меняется для каждого конкретного файла ядра.
+Если это ядро [.filename]#GENERIC# из одного из снэпшотов, то кто-то ещё может отследить функцию, вызвавшую ошибку, но в случае со специально сконфигурированным ядром только вы можете сказать нам, где случилась ошибка.
Чтобы продолжить:
[.procedure]
====
-. Запишите значение указателя инструкций. Заметьте, что часть `0x8:` в этом случае не важна: нам нужна часть `0xf0xxxxxx`.
+. Запишите значение указателя инструкций.
+Заметьте, что часть `0x8:` в этом случае не важна: нам нужна часть `0xf0xxxxxx`.
. Когда система перезагрузится, сделайте следующее:
+
[source,shell]
....
% nm -n kernel.that.caused.the.panic | grep f0xxxxxx
....
-+
++
где `f0xxxxxx` - это значение указателя инструкций. Однако неприятность заключается в том, что вы не получите точного соответствия, так как в таблице имен ядра для точек входа в функции даны адреса на начало функций, а указатель инструкций будет указывать куда-то внутрь её тела. Если вы не получили точного соответствия, опустите последнюю цифру в значении указателя инструкций и попробуйте снова:
+
[source,shell]
....
% nm -n kernel.that.caused.the.panic | grep f0xxxxx
....
-+
++
Если и это не привело ни к каким результатам, отрежьте следующую цифру. Повторяйте, пока не получите хоть что-то. Результатом будет список функций, которые, возможно, привели к аварийному останову. Этот механизм обнаружения ошибочного места довольно неточен, но это всё же лучше, чем ничего.
====
@@ -2874,9 +2941,11 @@ makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols
Если не указать `KERNCONF`, то будет собрано и установлено ядро [.filename]#GENERIC#.
====
-В процессе выполнения команды man:make[1] будут построены два ядра, [.filename]#/usr/obj/usr/src/sys/MYKERNEL/kernel# и [.filename]#/usr/obj/usr/src/sys/MYKERNEL/kernel.debug#. [.filename]#kernel# будет установлен как [.filename]#/boot/kernel/kernel#, тогда как [.filename]#kernel.debug# может быть использован в качестве источника отладочных символов для man:kgdb[1].
+В процессе выполнения команды man:make[1] будут построены два ядра, [.filename]#/usr/obj/usr/src/sys/MYKERNEL/kernel# и [.filename]#/usr/obj/usr/src/sys/MYKERNEL/kernel.debug#.
+[.filename]#kernel# будет установлен как [.filename]#/boot/kernel/kernel#, тогда как [.filename]#kernel.debug# может быть использован в качестве источника отладочной информации для man:kgdb[1].
-Чтобы получать аварийный дамп, отредактируйте файл [.filename]#/etc/rc.conf# так, чтобы устройство `dumpdev` указывало на раздел подкачки или имело значение `AUTO`. В этом случае скрипты man:rc[8] будут вызывать команду man:dumpon[8] для создания аварийных дампов. Эту команду можно также запускать вручную. После аварийной остановки аварийный дамп может быть получен с помощью программы man:savecore[8] если значение переменной `dumpdev` было установлено в [.filename]#/etc/rc.conf#, скрипты man:rc[8] запустят man:savecore[8] автоматически и поместят аварийный дамп в каталог [.filename]#/var/crash#.
+Чтобы получать аварийный дамп, отредактируйте файл [.filename]#/etc/rc.conf# так, чтобы устройство `dumpdev` указывало на раздел подкачки или имело значение `AUTO`. В этом случае скрипты man:rc[8] будут вызывать команду man:dumpon[8] для создания аварийных дампов. Эту команду можно также запускать вручную.
+После аварийной остановки аварийный дамп может быть получен с помощью программы man:savecore[8]; если значение переменной `dumpdev` было задано в [.filename]#/etc/rc.conf#, то скрипты man:rc[8] запустят man:savecore[8] автоматически и поместят аварийный дамп в каталог [.filename]#/var/crash#.
[NOTE]
====
@@ -2896,7 +2965,7 @@ makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols
[TIP]
====
-Если есть второй компьютер, то можно настроить man:kgdb[1] для удалённой отладки, включая точки останова и пошаговый проход по коду ядра.
+Если есть второй компьютер, то можно настроить man:kgdb[1] на режим удалённой отладки, включая определение точек останова и пошаговый проход по коду ядра.
====
[NOTE]
@@ -2904,12 +2973,14 @@ makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols
Если включена поддержка `DDB` и ядро переходит в режим отладки, можно намеренно вызвать аварийный останов и создание аварийного дампа, набрав `panic` в приглашении командной строки `ddb`. Выполнение фазы аварийного останова может снова остановиться с вызовом отладчика. В этом случае наберите `continue`, и процесс будет завершён созданием аварийного дампа.
====
+[[dlsym-failure]]
=== Перестала работать функция dlsym() для исполняемых файлов ELF!
По умолчанию при работе с форматом ELF символы, определённые в исполняемом файле, не доступны динамическому загрузчику. Поэтому при вызове функции `dlsym()`, которая осуществляет поиск по дескриптору, полученному после вызова `dlopen(NULL, flags)`, желаемый результат достигнут не будет.
Чтобы осуществить поиск символов в исполняемом файле процесса с помощью функции `dlsym()`, выполните компоновку исполняемого файла с параметром `--export-dynamic` компоновщика ELF (man:ld[1]).
+[[change-kernel-address-space]]
=== Как я могу увеличить или уменьшить адресное пространство ядра в архитектуре i386?
По умолчанию размер адресного пространства ядра для i386 равен 1 Гбайт (2 Гбайт для PAE). Для работы сервера с интенсивной сетевой нагрузкой или при использовании ZFS этого может быть недостаточно.
@@ -2923,140 +2994,11 @@ options KVA_PAGES=N
Чтобы получить нужное значение для _N_, разделите желаемый размер адресного пространства (в мегабайтах) на четыре (для 2 Гбайт это будет `512`).
+[[acknowledgments]]
== Наши благодарности
-Этот небольшой скромный документ с ответами на часто задаваемые вопросы создавался, переписывался, редактировался, сокращался, растягивался, уродовался, потрошился, пристально разглядывался, полностью перетряхивался, обдумывался, отвергался, перестраивался, критиковался и снова укреплялся в течение последнего десятилетия силами сотен, если не тысяч, людей. Постоянно.
-
-Мы хотим поблагодарить всех их и приглашаем вас extref:{contributing}[присоединиться], чтобы сделать этот FAQ ещё лучше.
-
-[bibliography]
-[[bibliography]]
-== Bibliographie
-
-[biblio-unleashed] FreeBSD Unleashed. Michael Urban und Brian Tiemann. Sams. Erste Ausgabe. 992 Seiten. Oktober 2001. ISBN 0-67232-206-4.
-
-[biblio-44sysman] 4.4BSD System Manager's Manual. Computer Systems Research Group, University of California, Berkeley. O'Reilly and Associates. Erste Ausgabe. Juni 1994. 804 Seiten. ISBN 1-56592-080-5.
-
-[biblio-44userman] 4.4BSD User's Reference Manual. Computer Systems Research Group, University of California, Berkeley. O'Reilly and Associates. Erste Ausgabe. Juni 1994. 905 Seiten. ISBN 1-56592-075-9.
-
-[biblio-44suppman] 4.4BSD User's Supplementary Documents. Computer Systems Research Group, University of California, Berkeley. O'Reilly and Associates. Erste Ausgabe. Juni 1994. 712 Seiten. ISBN 1-56592-076-7.
-
-[biblio-44progman] 4.4BSD Programmer's Reference Manual. Computer Systems Research Group, University of California, Berkeley. O'Reilly and Associates. Erste Ausgabe. Juni 1994. 866 Seiten. ISBN 1-56592-078-3.
-
-[biblio-44progsupp] 4.4BSD Programmer's Supplementary Documents. Computer Systems Research Group, University of California, Berkeley. O'Reilly and Associates. Erste Ausgabe. Juni 1994. 596 Seiten. ISBN 1-56592-079-1.
-
-[biblio-44kernel] The Design and Implementation of the 4.4BSD Operating System. M. K. McKusick, Kirk Marshall, Keith Bostic, Michael J Karels und John Quarterman. Addison-Wesley. Reading MA . 1996. ISBN 0-201-54979-4.
-
-[biblio-freebsdkernel] The Design and Implementation of the FreeBSD Operating System. M. K. McKusick und George V. Neville-Neil. Addison-Wesley. Boston MA . 2004. ISBN 0-201-70245-2.
-
-[biblio-nemeth3rd] Unix System Administration Handbook. Evi Nemeth, Garth Snyder, Scott Seebass, Trent R. Hein und John Quarterman. Prentice-Hall. Dritte Ausgabe. 2000. ISBN 0-13-020601-6.
-
-[lehey3rd] The Complete FreeBSD. Greg Lehey. Walnut Creek. Dritte Ausgabe. Juni 1999. 773 Seiten. ISBN 1-57176-246-9.
-
-[McKusick et al, 1994] Berkeley Software Architecture Manual, 4.4BSD Edition. M. K. McKusick, M. J. Karels, S. J. Leffler, W. N. Joy und R. S. Faber. 5:1-42.
-
-[biblio-ja-fbsdpc98] FreeBSD for PC 98'ers (in Japanisch). SHUWA System Co, LTD.. ISBN 4-87966-468-5 C3055 P2900E.
-
-[biblio-ja-fbsd] FreeBSD (in Japanisch). CUTT. ISBN 4-906391-22-2.
-
-[biblio-ja-compintro] Complete Introduction to FreeBSD (in Japanisch). Shoeisha Co., Ltd. ISBN 4-88135-473-6 P3600E.
-
-[biblio-ja-unixstarterkit] Personal UNIX Starter Kit FreeBSD (in Japanisch). ASCII. ISBN 4-7561-1733-3 P3000E.
-
-[biblio-ja-fbsdhb] FreeBSD Handbook (Japanische Übersetzung). ASCII. ISBN 4-7561-1580-2 P3800E.
-
-[biblio-ge-fbsdmitmeth] FreeBSD mit Methode (in Deutsch). Computer und Literature Verlag/Vertrieb Hanser. 1998. ISBN 3-932311-31-0.
-
-[biblio-ja-fbsdinstandutil] FreeBSD install and Utilization Manual (in Japanisch). Mainichi Communications Inc..
-
-[biblio-indo-intserv] Building Internet Server with FreeBSD (in Indonesisch). Elex Media Komputindo. Onno W Purbo, Dodi Maryanto, Syahrial Hubbany und Widjil Widodo.
-
-[biblio-fbsdcorpnetguide] The FreeBSD Corporate Networker's Guide. Addison-Wesley.
-
-[biblio-unixnutshell] UNIX in a Nutshell. O'Reilly & Associates, Inc.. 1990. ISBN 093717520X.
-
-[biblio-cantfindadmin] What You Need To Know When You Can't Find Your Unix System Administrator. O'Reilly & Associates, Inc.. 1995. Linda Mui. ISBN 1-56592-104-6.
-
-[biblio-ja-fbsdusrrefman] FreeBSD User's Reference Manual (Japanische Übersetzung). Mainichi Communications Inc.. Jpman Project, Japan FreeBSD Users Group. 1998. ISBN 4-8399-0088-4 P3800E.
-
-[biblio-newcomeunix] http://unixhelp.ed.ac.uk/[Online Guide for newcomers to the UNIX environment]“. http://www.ed.ac.uk/[Edinburgh University].
-
-[biblio-dnsandbind] DNS and BIND. O'Reilly & Associates, Inc. ISBN 1-56592-512-2. Paul Albitz Albitz und Cricket Liu. 1998. Dritte Ausgabe.
-
-[biblio-sendmail] Sendmail. O'Reilly & Associates, Inc. 1997. Zweite Auflage. Brian Costales. ISBN 1-56592-222-0.
-
-[biblio-esssysadmin] Essential System Administration. Æleen Frisch. Zweite Auflage. O'Reilly & Associates. 1995. ISBN 1-56592-127-5.
-
-[biblio-tcpipnetworkadministration] TCP/IP Network Administration. Craig Hunt. Zweite Auflage. O'Reilly & Associates, Inc. 1997. ISBN 1-56592-322-7.
-
-[biblio-managingnfsandnis] Managing NFS and NIS. Hal Stern. O'Reilly & Associates, Inc. 1991. ISBN 0-937175-75-7.
-
-[biblio-jpmanprojectjfug] http://www.pc.mycom.co.jp/FreeBSD/sam.html[FreeBSD System Administration's Manual]. http://www.jp.freebsd.org/[Jpman Project, Japan FreeBSD Users Group]. http://www.pc.mycom.co.jp/[Mainichi Communications Inc.]. 1998. ISBN 4-8399-0109-0 P3300E.
-
-[biblio-xwinsystoolkit] X Window System Toolkit. Digital Press. Paul Asente. ISBN 1-55558-051-3.
-
-[biblio-carefman] C: A Reference Manual. Prentice Hall. 1995. Vierte Auflage. Samuel P. Harbison und Guy L. Jr. Steele. ISBN 0-13-326224-3.
-
-[biblio-thecproglang] The C Programming Language. Prentice Hall. 1998. Brian Kernighan und Dennis Ritchie. ISBN 0-13-110362-9.
-
-[biblio-portingunixsoft] Porting UNIX Software. Greg Lehey. O'Reilly & Associates, Inc.. 1995. ISBN 1-56592-126-7.
-
-[biblio-thestandardclibrary] The Standard C Library. Prentice Hall. 1992. P. J. Plauger. ISBN 0-13-131509-9.
-
-[biblio-advprogintheunixenv] Advanced Programming in the UNIX Environment. Addison-Wesley. 1992. W. Richard Stevens. ISBN 0-201-56317-7.
-
-[biblio-unixnetprog] UNIX Network Programming. W. Richard Stevens. Prentice Hall. 1998. Zweite Auflage. ISBN 0-13-490012-X.
-
-[biblio-writeserialdriverforunix] Writing Serial Drivers for UNIX. Bill Wells. Dezember 1994. Dr. Dobb's Journal. pp68-71, pp97-99.
-
-[biblio-unixsysarch] UNIX System Architecture. Prentice-Hall, Inc. 1990. Prabhat K. Andleigh. ISBN 0-13-949843-5.
-
-[biblio-portingunixtothe386] Porting UNIX to the 386. William Jolitz. Dr. Dobb's Journal. Januar 1991 - Juli 1992.
-
-[biblio-tcpipillv1theprotocols] TCP/IP Illustrated, Volume 1: The Protocols. W. Richard Stevens. Addison-Wesley. 1996. ISBN 0-201-63346-9.
-
-[biblio-unixsysformodrnarch] Unix Systems for Modern Architectures. Addison-Wesley. Curt Schimmel. 1994. ISBN 0-201-63338-8.
-
-[biblio-tcpipillvol3] TCP/IP Illustrated, Volume 3: TCP for Transactions, HTTP, NNTP and the UNIX Domain Protocols. Addison-Wesley. 1996. W. Richard Stevens. ISBN 0-201-63495-3.
-
-[biblio-unixinternthenewfrontiers] UNIX Internals -- The New Frontiers. Uresh Vahalia. Prentice Hall. 1996. ISBN 0-13-101908-2.
-
-[biblio-tcpipillvol2theimplementation] TCP/IP Illustrated, Volume 2: The Implementation. Gary R. Wright und W. Richard Stevens. 1995. Addison-Wesley. ISBN 0-201-63354-X.
-
-[biblio-firewallsandinternetsecurity] Firewalls and Internet Security: Repelling the Wily Hacker. William R. CHeswick und Steven M. Bellovin. Addison-Wesley. 1995. ISBN 0-201-63357-4.
-
-[biblio-practicalunixsecurity] Practical UNIX Security. Simson Garfinkel und Gene Spafford. 1996. Zweite Auflage. O'Reilly & Associates, Inc. ISBN 1-56592-148-8.
-
-[biblio-pgpprettygoodprivacy] PGP Pretty Good Privacy. Simson Garfinkel. O'Reilly & Associates, Inc. 1995. ISBN 1-56592-098-8.
-
-[biblio-pentiumprocarch] Pentium Processor System Architecture. Don Anderson und Tom Shanley. Addison-Wesley. 1995. Zweite Auflage. ISBN 0-201-40992-5.
-
-[biblio-progguidetothesvgacards] Programmer's Guide to the EGA, VGA, and Super VGA Cards. Richard F. Ferraro. Dritte Ausgabe. Addison-Wesley. 1995. ISBN 0-201-62490-7.
-
-[biblio-80486] 80486 System Architecture. Tom Shanley. Addison-Wesley. 1995. Dritte Ausgabe. ISBN 0-201-40994-1.
-
-[biblio-isasysarch] ISA System Architecture. Tom Shanley. Addison-Wesley. Dritte Ausgabe. 1995. ISBN 0-201-40996-8.
-
-[biblio-pcisysarch] PCI System Architecture. Tom Shanley. Addison-Wesley. 1995. Dritte Ausgabe. ISBN 0-201-40993-3.
-
-[biblio-theundocumentedpc] The Undocumented PC. Frank Van Gilluwe. Addison-Wesley. 1994. ISBN 0-201-62277-7.
-
-[biblio-bellsystemtechnicaljournal] Bell System Technical Journal, Unix Time-Sharing System. American Telephone & Telegraph Company. Juli - August 1978. Vol 57, No 6, Part 2. ISSN0005-8580.
-
-[biblio-commentaryonunix] Lion's Commentary on UNIX. John Lion. ITP Media Group. 1996. Sechste Ausgabe. ISBN 1573980137.
-
-[biblio-newhackerdict] The New Hacker's Dictionary. Eric S. Raymond. MIT Press. 1996. Dritte Ausgabe. ISBN 0-262-68092-0.
-
-[biblio-aqtrcentofunix] A quarter century of UNIX. Peter H. Salus. Addison-Wesley. 1994. ISBN 0-201-54777-5.
-
-[biblio-unixhatershandbook] The UNIX-HATERS Handbook. Steven Strassman, Daniel Weise und Simon Garfinkel. IDG Books Worldwide, Inc. 1994. ISBN 1-56884-203-1.
-
-[biblio-lifewithunix] Life with UNIX - special edition. Don Libes und Sandy Ressler. Prentice-Hall. 1989. ISBN 0-13-536657-7.
-
-[biblio-bsdfamilytree] https://svnweb.freebsd.org/base/head/shared/misc/bsd-family-tree?view=co[The BSD Family Tree]. 1997.
-
-[absolutebsd] Absolute BSD. Michael Lucas. No Starch Press. Juni 2002. ISBN 1-886411-74-3.
-
-[biblio-ccppusersjournal] The C/C++ Users Journal. R&D Publications Inc.. ISSN 1075-2838.
+Этот небольшой скромный документ с ответами на часто задаваемые вопросы создавался, переписывался, редактировался, сокращался, растягивался, уродовался, потрошился, пристально разглядывался, полностью перетряхивался, обдумывался, отвергался, перестраивался, критиковался и снова укреплялся в течение последнего десятилетия силами сотен, если не тысяч, людей.
+Постоянно.
-[biblio-sysadminthejournalforunixsysadmins] Sys Admin - The Journal for UNIX System Administrators. Miller Freeman, Inc. ISSN 1061-2688.
+Мы хотим поблагодарить каждого из них и приглашаем вас
+extref:{contributing}[присоединиться к ним], чтобы сделать этот FAQ ещё лучше.
diff --git a/documentation/content/ru/books/handbook/advanced-networking/_index.adoc b/documentation/content/ru/books/handbook/advanced-networking/_index.adoc
index aa794aaac5..4a66f95d99 100644
--- a/documentation/content/ru/books/handbook/advanced-networking/_index.adoc
+++ b/documentation/content/ru/books/handbook/advanced-networking/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/firewalls
next: books/handbook/partv
showBookMenu: true
weight: 32
-path: "/books/handbook/"
+path: "/books/handbook/advanced-networking/"
---
[[advanced-networking]]
diff --git a/documentation/content/ru/books/handbook/audit/_index.adoc b/documentation/content/ru/books/handbook/audit/_index.adoc
index 5c8d4a143c..e13f4bb84b 100644
--- a/documentation/content/ru/books/handbook/audit/_index.adoc
+++ b/documentation/content/ru/books/handbook/audit/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mac
next: books/handbook/disks
showBookMenu: true
weight: 20
-path: "/books/handbook/"
+path: "/books/handbook/audit/"
---
[[audit]]
diff --git a/documentation/content/ru/books/handbook/basics/_index.adoc b/documentation/content/ru/books/handbook/basics/_index.adoc
index df487b3c91..d79f7077c9 100644
--- a/documentation/content/ru/books/handbook/basics/_index.adoc
+++ b/documentation/content/ru/books/handbook/basics/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/bsdinstall
next: books/handbook/ports
showBookMenu: true
weight: 6
-path: "/books/handbook/"
+path: "/books/handbook/basics/"
---
[[basics]]
diff --git a/documentation/content/ru/books/handbook/bibliography/_index.adoc b/documentation/content/ru/books/handbook/bibliography/_index.adoc
index f56b24b8de..c571365920 100644
--- a/documentation/content/ru/books/handbook/bibliography/_index.adoc
+++ b/documentation/content/ru/books/handbook/bibliography/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mirrors
next: books/handbook/eresources
showBookMenu: true
weight: 35
-path: "/books/handbook/"
+path: "/books/handbook/bibliography/"
---
[appendix]
diff --git a/documentation/content/ru/books/handbook/boot/_index.adoc b/documentation/content/ru/books/handbook/boot/_index.adoc
index 38d73b6e43..9946d856fe 100644
--- a/documentation/content/ru/books/handbook/boot/_index.adoc
+++ b/documentation/content/ru/books/handbook/boot/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/config
next: books/handbook/security
showBookMenu: true
weight: 17
-path: "/books/handbook/"
+path: "/books/handbook/boot/"
---
[[boot]]
diff --git a/documentation/content/ru/books/handbook/bsdinstall/_index.adoc b/documentation/content/ru/books/handbook/bsdinstall/_index.adoc
index b9ca7b96d4..611a0a8782 100644
--- a/documentation/content/ru/books/handbook/bsdinstall/_index.adoc
+++ b/documentation/content/ru/books/handbook/bsdinstall/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/install
next: books/handbook/basics
showBookMenu: true
weight: 5
-path: "/books/handbook/"
+path: "/books/handbook/bsdinstall/"
---
[[bsdinstall]]
diff --git a/documentation/content/ru/books/handbook/config/_index.adoc b/documentation/content/ru/books/handbook/config/_index.adoc
index 2ca8b8ac76..c9ee512703 100644
--- a/documentation/content/ru/books/handbook/config/_index.adoc
+++ b/documentation/content/ru/books/handbook/config/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partiii
next: books/handbook/boot
showBookMenu: true
weight: 16
-path: "/books/handbook/"
+path: "/books/handbook/config/"
---
[[config-tuning]]
@@ -1293,6 +1293,6 @@ debug.acpi.level="ACPI_LV_ERROR"
* {freebsd-acpi}
* Архивы списка рассылки ACPI http://lists.freebsd.org/pipermail/freebsd-acpi/[http://lists.freebsd.org/pipermail/freebsd-acpi/]
* Старые архивы списка рассылки ACPI http://home.jp.FreeBSD.org/mail-list/acpi-jp/[http://home.jp.FreeBSD.org/mail-list/acpi-jp/]
-* Спецификация ACPI 2.0 http://acpi.info/spec.htm[http://acpi.info/spec.htm]
+* https://uefi.org/specifications#ACPI[Спецификация ACPI]
* Страницы справочника FreeBSD: man:acpi[4], man:acpi_thermal[4], man:acpidump[8], man:iasl[8], man:acpidb[8]
* http://www.cpqlinux.com/acpi-howto.html#fix_broken_dsdt[ Ресурс по отладке DSDT]. (Использует в качестве примера Compaq, но обычно полезен.)
diff --git a/documentation/content/ru/books/handbook/cutting-edge/_index.adoc b/documentation/content/ru/books/handbook/cutting-edge/_index.adoc
index 8866e97fc4..7e035cf7ea 100644
--- a/documentation/content/ru/books/handbook/cutting-edge/_index.adoc
+++ b/documentation/content/ru/books/handbook/cutting-edge/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/l10n
next: books/handbook/partiv
showBookMenu: true
weight: 25
-path: "/books/handbook/"
+path: "/books/handbook/cutting-edge/"
---
[[updating-upgrading]]
diff --git a/documentation/content/ru/books/handbook/desktop/_index.adoc b/documentation/content/ru/books/handbook/desktop/_index.adoc
index 6cd99943e0..14c8b37e56 100644
--- a/documentation/content/ru/books/handbook/desktop/_index.adoc
+++ b/documentation/content/ru/books/handbook/desktop/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partii
next: books/handbook/multimedia
showBookMenu: true
weight: 10
-path: "/books/handbook/"
+path: "/books/handbook/desktop/"
---
[[desktop]]
diff --git a/documentation/content/ru/books/handbook/disks/_index.adoc b/documentation/content/ru/books/handbook/disks/_index.adoc
index 2447a7a97d..4bfd70b635 100644
--- a/documentation/content/ru/books/handbook/disks/_index.adoc
+++ b/documentation/content/ru/books/handbook/disks/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/audit
next: books/handbook/geom
showBookMenu: true
weight: 21
-path: "/books/handbook/"
+path: "/books/handbook/disks/"
---
[[disks]]
diff --git a/documentation/content/ru/books/handbook/eresources/_index.adoc b/documentation/content/ru/books/handbook/eresources/_index.adoc
index d99e6f8d71..201b37c36a 100644
--- a/documentation/content/ru/books/handbook/eresources/_index.adoc
+++ b/documentation/content/ru/books/handbook/eresources/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/bibliography
next: books/handbook/pgpkeys
showBookMenu: true
weight: 36
-path: "/books/handbook/"
+path: "/books/handbook/eresources/"
---
[appendix]
diff --git a/documentation/content/ru/books/handbook/filesystems/_index.adoc b/documentation/content/ru/books/handbook/filesystems/_index.adoc
index 60b7610988..7e0b87032d 100644
--- a/documentation/content/ru/books/handbook/filesystems/_index.adoc
+++ b/documentation/content/ru/books/handbook/filesystems/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/geom
next: books/handbook/l10n
showBookMenu: true
weight: 23
-path: "/books/handbook/"
+path: "/books/handbook/filesystems/"
---
[[filesystems]]
diff --git a/documentation/content/ru/books/handbook/firewalls/_index.adoc b/documentation/content/ru/books/handbook/firewalls/_index.adoc
index 35afb65282..6644920c37 100644
--- a/documentation/content/ru/books/handbook/firewalls/_index.adoc
+++ b/documentation/content/ru/books/handbook/firewalls/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/network-servers
next: books/handbook/advanced-networking
showBookMenu: true
weight: 31
-path: "/books/handbook/"
+path: "/books/handbook/firewalls/"
---
[[firewalls]]
diff --git a/documentation/content/ru/books/handbook/geom/_index.adoc b/documentation/content/ru/books/handbook/geom/_index.adoc
index 009f644fa7..e0bd7547c2 100644
--- a/documentation/content/ru/books/handbook/geom/_index.adoc
+++ b/documentation/content/ru/books/handbook/geom/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/disks
next: books/handbook/filesystems
showBookMenu: true
weight: 22
-path: "/books/handbook/"
+path: "/books/handbook/geom/"
---
[[geom]]
diff --git a/documentation/content/ru/books/handbook/install/_index.adoc b/documentation/content/ru/books/handbook/install/_index.adoc
index 14411ac545..a0b643f4be 100644
--- a/documentation/content/ru/books/handbook/install/_index.adoc
+++ b/documentation/content/ru/books/handbook/install/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/introduction
next: books/handbook/bsdinstall
showBookMenu: true
weight: 4
-path: "/books/handbook/"
+path: "/books/handbook/install/"
---
[[install]]
diff --git a/documentation/content/ru/books/handbook/introduction/_index.adoc b/documentation/content/ru/books/handbook/introduction/_index.adoc
index 3345976593..c53be15762 100644
--- a/documentation/content/ru/books/handbook/introduction/_index.adoc
+++ b/documentation/content/ru/books/handbook/introduction/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/parti
next: books/handbook/install
showBookMenu: true
weight: 3
-path: "/books/handbook/"
+path: "/books/handbook/introduction/"
---
[[introduction]]
diff --git a/documentation/content/ru/books/handbook/kernelconfig/_index.adoc b/documentation/content/ru/books/handbook/kernelconfig/_index.adoc
index 68ce2c76e7..c5e215f50a 100644
--- a/documentation/content/ru/books/handbook/kernelconfig/_index.adoc
+++ b/documentation/content/ru/books/handbook/kernelconfig/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/multimedia
next: books/handbook/printing
showBookMenu: true
weight: 12
-path: "/books/handbook/"
+path: "/books/handbook/kernelconfig/"
---
[[kernelconfig]]
diff --git a/documentation/content/ru/books/handbook/l10n/_index.adoc b/documentation/content/ru/books/handbook/l10n/_index.adoc
index 471fca6689..5e3d8c3870 100644
--- a/documentation/content/ru/books/handbook/l10n/_index.adoc
+++ b/documentation/content/ru/books/handbook/l10n/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/filesystems
next: books/handbook/cutting-edge
showBookMenu: true
weight: 24
-path: "/books/handbook/"
+path: "/books/handbook/l10n/"
---
[[l10n]]
diff --git a/documentation/content/ru/books/handbook/linuxemu/_index.adoc b/documentation/content/ru/books/handbook/linuxemu/_index.adoc
index c872b425a8..38ecc1e3c8 100644
--- a/documentation/content/ru/books/handbook/linuxemu/_index.adoc
+++ b/documentation/content/ru/books/handbook/linuxemu/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/printing
next: books/handbook/partiii
showBookMenu: true
weight: 14
-path: "/books/handbook/"
+path: "/books/handbook/linuxemu/"
---
[[linuxemu]]
diff --git a/documentation/content/ru/books/handbook/mac/_index.adoc b/documentation/content/ru/books/handbook/mac/_index.adoc
index 3d51a7aea0..0c7993732e 100644
--- a/documentation/content/ru/books/handbook/mac/_index.adoc
+++ b/documentation/content/ru/books/handbook/mac/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/security
next: books/handbook/audit
showBookMenu: true
weight: 19
-path: "/books/handbook/"
+path: "/books/handbook/mac/"
---
[[mac]]
diff --git a/documentation/content/ru/books/handbook/mail/_index.adoc b/documentation/content/ru/books/handbook/mail/_index.adoc
index 6be113ff21..ac3e649f74 100644
--- a/documentation/content/ru/books/handbook/mail/_index.adoc
+++ b/documentation/content/ru/books/handbook/mail/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/ppp-and-slip
next: books/handbook/network-servers
showBookMenu: true
weight: 29
-path: "/books/handbook/"
+path: "/books/handbook/mail/"
---
[[mail]]
diff --git a/documentation/content/ru/books/handbook/mirrors/_index.adoc b/documentation/content/ru/books/handbook/mirrors/_index.adoc
index 19550754da..e0282d868e 100644
--- a/documentation/content/ru/books/handbook/mirrors/_index.adoc
+++ b/documentation/content/ru/books/handbook/mirrors/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partv
next: books/handbook/bibliography
showBookMenu: true
weight: 34
-path: "/books/handbook/"
+path: "/books/handbook/mirrors/"
---
[appendix]
diff --git a/documentation/content/ru/books/handbook/multimedia/_index.adoc b/documentation/content/ru/books/handbook/multimedia/_index.adoc
index 2cbacd9059..eda59da6cb 100644
--- a/documentation/content/ru/books/handbook/multimedia/_index.adoc
+++ b/documentation/content/ru/books/handbook/multimedia/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/desktop
next: books/handbook/kernelconfig
showBookMenu: true
weight: 11
-path: "/books/handbook/"
+path: "/books/handbook/multimedia/"
---
[[multimedia]]
diff --git a/documentation/content/ru/books/handbook/network-servers/_index.adoc b/documentation/content/ru/books/handbook/network-servers/_index.adoc
index dd28fe42f6..0019470f55 100644
--- a/documentation/content/ru/books/handbook/network-servers/_index.adoc
+++ b/documentation/content/ru/books/handbook/network-servers/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mail
next: books/handbook/firewalls
showBookMenu: true
weight: 30
-path: "/books/handbook/"
+path: "/books/handbook/network-servers/"
---
[[network-servers]]
diff --git a/documentation/content/ru/books/handbook/parti.adoc b/documentation/content/ru/books/handbook/parti.adoc
index 568acfe495..fa25b0e8d1 100644
--- a/documentation/content/ru/books/handbook/parti.adoc
+++ b/documentation/content/ru/books/handbook/parti.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/preface
next: books/handbook/introduction
showBookMenu: true
weight: 2
-path: "/books/handbook/"
+path: "/books/handbook/parti/"
---
[[getting-started]]
diff --git a/documentation/content/ru/books/handbook/partii.adoc b/documentation/content/ru/books/handbook/partii.adoc
index bb09439e48..5df33e8f77 100644
--- a/documentation/content/ru/books/handbook/partii.adoc
+++ b/documentation/content/ru/books/handbook/partii.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/x11
next: books/handbook/desktop
showBookMenu: true
weight: 9
-path: "/books/handbook/"
+path: "/books/handbook/partii/"
---
[[common-tasks]]
diff --git a/documentation/content/ru/books/handbook/partiii.adoc b/documentation/content/ru/books/handbook/partiii.adoc
index 212d750cfd..881f289c90 100644
--- a/documentation/content/ru/books/handbook/partiii.adoc
+++ b/documentation/content/ru/books/handbook/partiii.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/linuxemu
next: books/handbook/config
showBookMenu: true
weight: 15
-path: "/books/handbook/"
+path: "/books/handbook/partiii/"
---
[[system-administration]]
diff --git a/documentation/content/ru/books/handbook/partiv.adoc b/documentation/content/ru/books/handbook/partiv.adoc
index 43c872845a..f7f9d6af30 100644
--- a/documentation/content/ru/books/handbook/partiv.adoc
+++ b/documentation/content/ru/books/handbook/partiv.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/cutting-edge
next: books/handbook/serialcomms
showBookMenu: true
weight: 26
-path: "/books/handbook/"
+path: "/books/handbook/partiv/"
---
[[network-communication]]
diff --git a/documentation/content/ru/books/handbook/partv.adoc b/documentation/content/ru/books/handbook/partv.adoc
index 18f3bab7ba..5db28223f2 100644
--- a/documentation/content/ru/books/handbook/partv.adoc
+++ b/documentation/content/ru/books/handbook/partv.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/advanced-networking
next: books/handbook/mirrors
showBookMenu: true
weight: 33
-path: "/books/handbook/"
+path: "/books/handbook/partv/"
---
[[appendices]]
diff --git a/documentation/content/ru/books/handbook/pgpkeys/_index.adoc b/documentation/content/ru/books/handbook/pgpkeys/_index.adoc
index f7825bfd00..aeed966d7b 100644
--- a/documentation/content/ru/books/handbook/pgpkeys/_index.adoc
+++ b/documentation/content/ru/books/handbook/pgpkeys/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/eresources
next: books/handbook/freebsd-glossary
showBookMenu: true
weight: 37
-path: "/books/handbook/"
+path: "/books/handbook/pgpkeys/"
---
[appendix]
@@ -59,9 +59,6 @@ endif::[]
=== {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/ru/books/handbook/ports/_index.adoc b/documentation/content/ru/books/handbook/ports/_index.adoc
index af8725ca87..454e9d82cd 100644
--- a/documentation/content/ru/books/handbook/ports/_index.adoc
+++ b/documentation/content/ru/books/handbook/ports/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/basics
next: books/handbook/x11
showBookMenu: true
weight: 7
-path: "/books/handbook/"
+path: "/books/handbook/ports/"
---
[[ports]]
diff --git a/documentation/content/ru/books/handbook/ppp-and-slip/_index.adoc b/documentation/content/ru/books/handbook/ppp-and-slip/_index.adoc
index 22b08e605c..8260ffcf74 100644
--- a/documentation/content/ru/books/handbook/ppp-and-slip/_index.adoc
+++ b/documentation/content/ru/books/handbook/ppp-and-slip/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/serialcomms
next: books/handbook/mail
showBookMenu: true
weight: 28
-path: "/books/handbook/"
+path: "/books/handbook/ppp-and-slip/"
---
[[ppp-and-slip]]
diff --git a/documentation/content/ru/books/handbook/preface/_index.adoc b/documentation/content/ru/books/handbook/preface/_index.adoc
index a0403a97d4..a0150441b3 100644
--- a/documentation/content/ru/books/handbook/preface/_index.adoc
+++ b/documentation/content/ru/books/handbook/preface/_index.adoc
@@ -1,10 +1,12 @@
---
title: Предисловие
-prev: books/handbook/
+prev: books/handbook
next: books/handbook/parti
+description: Начинающий пользователь FreeBSD увидит, что первая часть этой книги помогает пройти процесс установки FreeBSD и ненавязчиво объясняет концепции и соглашения, лежащие в основе UNIX
+tags: ["предисловие", "аудитория", "организация", "соглашения", "благодарности"]
showBookMenu: true
weight: 1
-path: "/books/handbook/"
+path: "/books/handbook/preface/"
---
[preface]
@@ -42,149 +44,210 @@ toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
+//
+// The FreeBSD Russian Documentation Project
+//
+// Original EN revision (08.01.2023): d17f5a8e61630f4514fdc93d113e4173234b1395
+//
+
[[preface-audience]]
== Целевая аудитория
-Люди, которые используют FreeBSD с недавнего времени, найдут, что первая часть этой книги проводит читателя через процесс установки FreeBSD и кратко освещает идеи и традиции, на которых базируется UNIX(R). Работа с этой частью требует несколько большего, чем просто желание исследовать - необходима возможность принимать к сведению новые идеи.
+Начинающим пользователям FreeBSD будет полезна первая часть этой книги, которая проводит читателя через процесс установки FreeBSD и ненавязчиво объясняет концепции и соглашения, на которых базируется UNIX(R).
+Работа с этой частью требует несколько большего, чем желания исследовать и способности принятия новых концепций по мере их описания.
+
+Если вы преодолеете все сложности, то вас будет ждать вторая, много большая часть Руководства, которая является всеобъемлющим справочником обо всех темах, которые могут интересовать администраторов FreeBSD.
+Некоторые из глав этой части могут рекомендовать вам предварительное изучение других материалов, о чём упоминается в кратком обзоре в начале каждой главы.
+
+Список рекомендуемой дополнительной литературы вы можете найти в crossref:bibliography[bibliography,Библиографии].
+
+[[preface-changes-from4]]
+== Четвёртое издание
-Вторая, много большая часть Руководства, является всеобъемлющим справочником о всех темах, которые могут интересовать администраторов FreeBSD. Некоторые из глав этой части могут рекомендовать вам предварительное чтение других документов, о чём упоминается в кратком обзоре в начале каждой главы.
+Актуальная версия Руководства является результатом усилий рабочей группы, которая занималась рецензированием и обновлением содержимого документа.
+Вот те ключевые изменения, появившиеся после выхода четвёртого издания Руководства:
-Список рекомендуемой дополнительной литературы вы можете найти в crossref:bibliography[bibliography,Библиография].
+* Выполнен перевод формата Руководства с link:https://docbook.org/[Docbook] на link:https://gohugo.io/[Hugo] и link:https://asciidoctor.org/[AsciiDoctor]
+* Создан link:https://docs.FreeBSD.org[Портал документации FreeBSD].
+* Добавлена глава crossref:wayland[wayland,Wayland], описывающая установку и настройку Wayland во FreeBSD.
+* Существенно дополнена crossref:bibliography[bibliography,Библиография].
+
+[[preface-changes-from3]]
+== Третье издание
+
+Текущая онлайновая версия Руководства является результатом совместных усилий многих сотен добровольных участников за последние 10 лет.
+Ниже перечисляются некоторые значимые изменения, появившиеся после публикации двухтомного третьего издания в 2004 году:
+
+* Добавлена глава crossref:wine[wine,WINE], описывающая порядок запуска приложений Windows(R) во FreeBSD.
+* Добавлена глава crossref:dtrace[dtrace,DTrace], содержащая информацию о мощном инструменте анализа производительности DTrace.
+* Добавлена глава crossref:filesystems[filesystems,Другие файловые системы], содержащая информацию о поддержке прочих файловых систем во FreeBSD, таких как ZFS от компании Sun(TM).
+* Добавлена глава crossref:audit[audit,Аудит Событий Безопасности], посвящённая новым возможностям аудита во FreeBSD и описывающая его использование.
+* Добавлена глава crossref:virtualization[virtualization,Виртуализация] с информацией об установке FreeBSD в виртуализированном программном окружении.
+* Добавлена глава crossref:bsdinstall[bsdinstall,Установка FreeBSD], описывающая установку FreeBSD при помощи новой установочной утилиты bsdinstall.
[[preface-changes-from2]]
-== Изменения по сравнению со второй редакцией
-
-Третья редакция является кульминацией более чем двух лет работы отдельных членов проекта документации FreeBSD. Вот основные изменения в новой редакции:
-
-* crossref:config[config-tuning, Настройка и оптимизация], Настройка и оптимизация, была расширена новой информацией о ACPI управлении питанием и ресурсами, системной утилите cron и дополнительных параметрах оптимизации ядра.
-* crossref:security[security, Безопасность], Безопасность, была расширена новой информацией о виртуальных частных сетях (VPN), списках контроля доступа файловой системы (ACL), и сообщениях безопасности.
-* crossref:mac[mac, Принудительный контроль доступа (MAC)], Принудительный контроль доступа (MAC), новая глава этой редакции. Она описывает, что такое MAC и как этот механизм может быть использован для защиты системы FreeBSD.
-* crossref:disks[disks, Устройства хранения], Устройства хранения, была расширена новой информацией о устройствах хранения USB, образах файловой системы, квотах файловой системы, файловых системах в файлах и в сети, зашифрованных дисковых разделах.
-* К crossref:ppp-and-slip[ppp-and-slip, PPP и SLIP], PPP и SLIP, был добавлен раздел о решении проблем.
-* crossref:mail[mail, Электронная почта], Электронная почта, была расширена новой информацией об использовании альтернативных транспортных агентов, SMTP аутентификации, UUCP, fetchmail, procmail, и другими разделами повышенной сложности.
-* crossref:network-servers[network-servers, Сетевые серверы], Сетевые серверы, появилась в этой редакции. Эта главы включает информацию о установке Apache HTTP Server, FTPd, и настройке Samba сервера для клиентов Microsoft Windows. Некоторые разделы были перемещены сюда из crossref:advanced-networking[advanced-networking, Сложные вопросы работы в сети], Сложные вопросы работы в сети.
-* crossref:advanced-networking[advanced-networking, Сложные вопросы работы в сети], Сложные вопросы работы в сети, была расширена новой информацией об использовании устройств Bluetooth в FreeBSD, настройке беспроводных сетей, и сетях Asynchronous Transfer Mode (ATM).
+== Второе издание (2004)
+
+Третье Издание являлось кульминацией более чем двух лет работы отдельных членов проекта документации FreeBSD.
+Печатная версия выросла до размера, потребовавшего публикации в виде двух отдельных томов.
+Вот основные изменения в новой редакции:
+
+* Глава crossref:config[config-tuning,Настройка и оптимизация] была расширена новой информацией о стандарте ACPI управления электропитанием и ресурсами, системной утилите `cron` и дополнительных параметрах оптимизации ядра.
+* Глава crossref:security[security,Безопасность] была дополнена новой информацией о виртуальных частных сетях (VPN), списках контроля доступа файловой системы (ACL) и бюллетенях безопасности.
+* Глава crossref:mac[mac,Принудительный контроль доступа (MAC)] является новой главой этого Издания. Она описывает, что такое MAC и как этот механизм может быть использован для защиты системы FreeBSD.
+* Глава crossref:disks[disks,Устройства хранения] была расширена новой информацией об устройствах хранения USB, образах файловой системы, квотах файловой системы, файловых системах в файлах и в сети, а также зашифрованных дисковых разделах.
+* К главе crossref:ppp-and-slip[ppp-and-slip, PPP и SLIP] был добавлен раздел об устранении неполадок.
+* Глава crossref:mail[mail,Электронная почта] была дополнена новой информацией об использовании альтернативных транспортных агентов, аутентификации SMTP, UUCP, fetchmail, procmail и другими темами повышенной сложности.
+* Глава crossref:network-servers[network-servers,Сетевые серверы] появилась в этой редакции. В неё включена информация о настройке Apache HTTP Server и ftpd, а также настройке сервера Samba для работы с клиентами Microsoft(R) Windows(R). Некоторые разделы были перемещены сюда из главы crossref:advanced-networking[advanced-networking,Сложные вопросы работы в сети].
+* Глава crossref:advanced-networking[advanced-networking,Сложные вопросы работы в сети] была расширена новой информацией об использовании устройств Bluetooth(R) во FreeBSD, настройке беспроводных сетей, и сетях Asynchronous Transfer Mode (ATM).
* Был добавлен глоссарий, объединяющий информацию о технических терминах, используемых в книге.
* Множество эстетических улучшений были внесены в таблицы и иллюстрации этой книги.
[[preface-changes]]
-== Изменения во второй редакции
+== Первое издание (2001)
-Вторая редакция является кульминацией более чем двухлетней работы членов Проекта документации FreeBSD. Нижеследующий список перечисляет все значительные изменения, внесенные в эту редакцию:
+Вторая редакция стала кульминацией более чем двухлетней работы членов Проекта документации FreeBSD.
+Нижеследующий список перечисляет все значительные изменения, внесённые в эту редакцию:
* Был добавлен полный указатель тем.
* Все ASCII-иллюстрации были заменены на графические.
* Был добавлен стандартный краткий обзор к каждому разделу для того, чтобы читатель мог получить представление о содержании раздела и о том, что необходимо знать для его изучения.
* Содержимое было логически реорганизовано на три части: "В Начале", "Системное администрирование" и "Приложения".
-* crossref:install[install, Установка FreeBSD версий 8.X и более ранних] ("Установка FreeBSD") была полностью переписана, добавлено большое количество снимков экрана, чтобы облегчить понимание текста для новых пользователей.
-* crossref:basics[basics, Основы UNIX] ("Основы UNIX(R)") была расширена и содержит дополнительную информацию о процессах, даемонах и сигналах.
-* crossref:ports[ports, Установка приложений. порты и пакеты] ("Установка приложений: порты и пакеты") была расширена и содержит дополнительную информации об управлении бинарными пакетами.
-* crossref:x11[x11, X Window System] ("X Window System") была полностью переписана и обращает больше внимания на современные технологии для рабочего стола, такие, как KDE и GNOME на XFree86(TM) 4.X.
-* crossref:boot[boot, Процесс загрузки FreeBSD] ("Процесс загрузки FreeBSD") была расширена.
-* crossref:disks[disks, Устройства хранения] ("Устройства хранения") была составлена из того, что раньше было двумя различными главами: "Диски" и "Резервное копирование". Мы считаем, что данные темы будут проще и более полно описаны как одна глава. Был добавлен раздел о программном и аппаратном RAID.
-* crossref:serialcomms[serialcomms, Последовательные соединения] ("Последовательные коммуникации") была полностью реорганизована и обновлена для FreeBSD 4.X/5.X.
-* crossref:ppp-and-slip[ppp-and-slip, PPP и SLIP] ("PPP и SLIP") была существенно обновлена.
-* Было добавлено множество новых разделов в crossref:advanced-networking[advanced-networking, Сложные вопросы работы в сети] ("Сложные вопросы работы в сети").
-* crossref:mail[mail, Электронная почта] ("Электронная почта") была расширена, теперь она включает больше информации о настройке sendmail.
-* crossref:linuxemu[linuxemu, Двоичная совместимость с Linux] ("Работа с приложениями, написанными для Linux(R)") была дополнена включением информации об установке Oracle(R) и SAP(R) R/3(R).
+* Глава crossref:basics[basics,Основы FreeBSD] была расширена и содержит дополнительную информацию о процессах, даемонах и сигналах.
+* Глава crossref:ports[ports,Установка приложений] была расширена и содержит дополнительную информации об управлении бинарными пакетами.
+* Глава crossref:x11[x11,X Window System] была полностью переписана и обращает больше внимания на современные технологии для рабочего стола, такие, как KDE и GNOME на XFree86(TM) 4.X.
+* Глава crossref:boot[boot,Процесс загрузки FreeBSD] была расширена.
+* Глава crossref:disks[disks,Устройства хранения] была составлена из того, что раньше было двумя различными главами: "Диски" и "Резервное копирование". Мы считаем, что данные темы будут проще и более полно описаны как одна глава. Был добавлен раздел о программном и аппаратном RAID.
+* Глава crossref:serialcomms[serialcomms,Последовательные соединения] была полностью реорганизована и обновлена для FreeBSD 4.X/5.X.
+* Глава crossref:ppp-and-slip[ppp-and-slip,PPP и SLIP] была существенно обновлена.
+* Было добавлено множество новых разделов в главу crossref:advanced-networking[advanced-networking,Сложные вопросы работы в сети].
+* Глава crossref:mail[mail,Электронная почта] была расширена, теперь она включает больше информации о настройке sendmail.
+* Глава crossref:linuxemu[linuxemu,Двоичная совместимость с Linux] была дополнена включением информации об установке Oracle(R) и SAP(R) R/3(R).
* Следующие новые темы были рассмотрены в этой, второй, редакции:
-** Настройка и оптимизация (crossref:config[config-tuning, Настройка и оптимизация]).
-** Мультимедиа (crossref:multimedia[multimedia, Мультимедиа])
+** crossref:config[config-tuning,Настройка и оптимизация].
+** crossref:multimedia[multimedia, Мультимедиа].
[[preface-overview]]
== Структура этой книги
-Эта книга разбита на пять частей. В первой части, _В начале_, рассматривается установка и основные навыки использования FreeBSD. Предполагается, что читатель освоит эти разделы последовательно, возможно пропуская разделы, в которых обсуждаются уже знакомые для него темы. Вторая часть, _Общие задачи_, рассказывает о некоторых наиболее часто используемых возможностях FreeBSD. Этот раздел и все последующие могут быть прочитаны не по порядку. Каждая глава начинается с краткого обзора, который описывает, о чём говорится в ней и что читатель должен будет знать для прочтения этой главы. Это сделано для того, чтобы случайно встретивший этот материал читатель мог найти разделы, которые его интересуют. В третьей части, _Системное администрирование_, рассмотрены вопросы администрирования. В четвертой части, _Сетевые коммуникации_, охвачены темы, связанные с серверами и сетью. Пятая часть содержит приложения и справочную информацию.
-
-_crossref:introduction[introduction, Введение], Введение_::
+Эта книга разбита на пять частей.
+В первой части, _В начале_, рассматривается установка и основные навыки использования FreeBSD.
+Предполагается, что читатель освоит эти разделы последовательно, возможно пропуская разделы, в которых обсуждаются уже знакомые для него темы.
+Вторая часть, _Общие задачи_, рассказывает о некоторых наиболее часто используемых возможностях FreeBSD.
+Этот раздел и все последующие могут быть прочитаны не по порядку.
+Каждая глава начинается с краткого обзора, который описывает, о чём говорится в ней и что читатель должен будет знать для прочтения этой главы.
+Это сделано для того, чтобы случайно встретивший этот материал читатель мог найти разделы, которые его интересуют.
+В третьей части, _Системное администрирование_, рассмотрены вопросы администрирования.
+В четвертой части, _Сетевые коммуникации_, охвачены темы, связанные с серверами и сетью.
+Пятая часть содержит приложения и справочную информацию.
+
+_crossref:introduction[introduction,Введение]_::
Знакомит пользователя с FreeBSD. Рассказывает об истории проекта FreeBSD, его задачах и модели разработки.
-_crossref:install[install, Установка FreeBSD версий 8.X и более ранних], Установка_::
-Проводит пользователя через весь процесс установки. Обсуждаются также некоторые более сложные вопросы установки, такие как установка по последовательной консоли.
+_crossref:bsdinstall[bsdinstall,Установка FreeBSD]_::
+Проводит пользователя через весь процесс установки FreeBSD 9.x и более поздних версий с использованием sysinstall.
-_crossref:basics[basics, Основы UNIX], Основы UNIX(R)_::
+_crossref:basics[basics,Основы FreeBSD]_::
Рассказывает об основных командах и функциональности операционной системы FreeBSD. Если вы знакомы с Linux(R) или другой UNIX(R)-подобной операционной системой, возможно, вы пропустите эту главу.
-_crossref:ports[ports, Установка приложений. порты и пакеты], Установка приложений: порты и пакеты_::
+_crossref:ports[ports,Установка приложений]_::
Рассказывает о процессе установки программного обеспечения сторонних производителей с использованием "Коллекции Портов FreeBSD" и стандартных бинарных пакетов.
-_crossref:x11[x11, X Window System], X Window System_::
+_crossref:x11[x11,X Window System]_::
Описывает X Window System вообще и использование X11 под управлением FreeBSD в частности. Также описывает популярные окружения рабочего стола, такие как KDE и GNOME.
-_crossref:desktop[desktop, Приложения для настольного компьютера], Приложения для настольного компьютера_::
+_crossref:wayland[wayland,Wayland]_::
+Описывает сервер дисплеев Wayland в целом и использование Wayland во FreeBSD в частности. Также рассказывает о популярных композитных менеджерах, таких как Wayfire, Hikari и Sway.
+
+_crossref:desktop[desktop,Приложения для настольного компьютера]_::
Перечисляет некоторые популярные приложения для рабочей станции, такие как веб-браузеры и офисные пакеты и описывает процесс их установки на FreeBSD.
-_crossref:multimedia[multimedia, Мультимедиа], Мультимедиа_::
+_crossref:multimedia[multimedia,Мультимедиа]_::
Показывает, как настроить поддержку воспроизведения звука и видео на вашей системе. Также описывает некоторые примеры приложений для воспроизведения звука и видео.
-_crossref:kernelconfig[kernelconfig, Настройка ядра FreeBSD], Настройка ядра FreeBSD_::
+_crossref:kernelconfig[kernelconfig,Настройка ядра FreeBSD]_::
Объясняет, почему вам может понадобиться перенастроить ядро и детально описывает процесс настройки, сборки и установки нового ядра.
-_crossref:printing[printing, Печать], Печать_::
+_crossref:printing[printing,Печать]_::
Рассказывает об управлении принтерами в FreeBSD, включая информацию об титульных страницах, учёте использования принтеров и первоначальной настройке.
-_crossref:linuxemu[linuxemu, Двоичная совместимость с Linux], Двоичная совместимость с Linux(R)_::
-Описывает возможности Linux(R)-совместимости в FreeBSD. Также предоставляет детальные инструкции по установке многих популярных приложений для Linux(R), таких как: Oracle(R), SAP(R) R/3(R) и Mathematica(R).
+_crossref:linuxemu[linuxemu,Двоичная совместимость с Linux®]_::
+Описывает возможности Linux(R)-совместимости во FreeBSD. Также содержит подробные инструкции по установке многих популярных приложений для Linux(R), таких как Oracle(R) и Mathematica(R).
+
+_crossref:wine[wine,WINE]_::
+Описывает WINE и содержит подробные инструкции по установке. Также рассказывает о том, как работает WINE, как установить вспомогательный модуль для GUI, как запускать приложения Windows(R) во FreeBSD, и содержит другие советы и решения.
-_crossref:config[config-tuning, Настройка и оптимизация], Настройка и оптимизация_::
+_crossref:config[config-tuning,Настройка и оптимизация]_::
Описывает всевозможные параметры настройки FreeBSD, которые может использовать системный администратор для оптимальной настройки системы. Также описывает различные конфигурационные файлы, используемые в FreeBSD и расположение этих файлов на диске.
-_crossref:boot[boot, Процесс загрузки FreeBSD], Процесс загрузки FreeBSD_::
+_crossref:boot[boot,Процесс загрузки FreeBSD]_::
Рассказывает о процессе загрузки FreeBSD и объясняет, как управлять этим процессом при помощи различных настроек.
-_crossref:users[users-synopsis, Пользователи и основы управления учётными записями], Пользователи и основы управления учётными записями_::
-Рассказывает о создании и управлении пользовательскими учётными записями. Также обсуждает установку ограничений ресурсов для пользователей и другие задачи управления пользователями.
-
-_crossref:security[security, Безопасность], Безопасность_::
+_crossref:security[security,Безопасность]_::
Описывает множество различных утилит, которые помогут вам поддерживать FreeBSD в безопасном, надёжном состоянии, включая Kerberos, IPsec и OpenSSH.
-_crossref:mac[mac, Принудительный контроль доступа (MAC)], Принудительный контроль доступа (MAC)_::
+_crossref:jail[jails,Изоляторы]_::
+Описывает технологию изоляции и преимущества изоляторов перед традиционной технологией chroot, поддерживаемой во FreeBSD.
+
+_crossref:mac[mac,Принудительный контроль доступа (MAC)]_::
Описывает что такое принудительный контроль доступа (Mandatory Access Control, MAC) и как этот механизм может быть использован для защиты системы FreeBSD.
-_crossref:disks[disks, Устройства хранения], Устройства хранения_::
+_crossref:audit[audit,Аудит Событий Безопасности]_::
+Описывает, что представляет из себя Аудит Событий FreeBSD, как его можно установить и настроить, а также то, как можно анализировать или отслеживать аудиторские следы.
+
+_crossref:disks[disks,Устройства хранения]_::
Описывает как управлять накопителями информации и файловыми системами в FreeBSD, включая физические диски, массивы RAID, оптические и ленточные носители, диски в оперативной памяти и сетевые файловые системы.
-_crossref:geom[GEOM, GEOM. Модульная инфраструктура преобразования дисковых запросов], GEOM_::
+_crossref:geom[geom,GEOM]_::
Рассказывает о подсистеме GEOM в FreeBSD и описывает различные поддерживаемые уровни RAID.
-_crossref:filesystems[filesystems, Поддержка файловых систем], Поддержка файловых систем_::
-Исследует поддержку неосновных файловых систем во FreeBSD, таких как, например, Sun(TM) Z File System.
+_crossref:zfs[zfs,Платформа хранения OpenZFS]_::
+Описывает платформу хранения OpenZFS и содержит руководство по её быстрому запуску, а также информацию о сложных вопросах эксплуатации OpenZFS под управлением FreeBSD.
+
+_crossref:filesystems[filesystems,Поддержка файловых систем]_::
+Рассматривает поддержку дополнительных файловых систем во FreeBSD, таких как ext2, ext3 и ext4.
-_crossref:l10n[l10n, Локализация - использование и настройка i18n/L10n], Локализация - I18N/L10N использование и настройка_::
+_crossref:virtualization[virtualization,Виртуализация]_::
+Описывает возможности систем виртуализации и то, как они могут использоваться с FreeBSD.
+
+_crossref:l10n[l10n,Локализация - использование и настройка i18n/L10n]_::
Описывает использование FreeBSD с языками, отличными от английского. Рассказывает о локализации на уровне системы и отдельных приложений.
-_crossref:cutting-edge[updating-upgrading, Обновление системы и смена версии FreeBSD], Обновление системы и смена версии_::
-Объясняет различия между FreeBSD-STABLE, FreeBSD-CURRENT и FreeBSD-RELEASE. Рассказывает, кому из пользователей будет полезно отслеживать версию системы в разработке и вкратце описывает этот процесс.
+_crossref:updating-upgrading[updating-upgrading,Обновление системы и смена версии FreeBSD]_::
+Объясняет различия между FreeBSD-STABLE, FreeBSD-CURRENT и FreeBSD-RELEASE. Рассказывает, кому из пользователей будет полезно отслеживать версию системы в разработке и вкратце описывает этот процесс. Описывает методы, которык могут быть применены пользователями для обновления их систем до самой последнего безопасного релиза.
+
+_crossref:dtrace[dtrace,DTrace]_::
+Описывает порядок настройки и использования инструмента DTrace компании Sun(TM) во FreeBSD. Динамическая трассировка может помочь в локализации проблем с производительностью за счёт выполнения анализа системы в реальном режиме времени.
-_crossref:serialcomms[serialcomms, Последовательные соединения], Последовательные соединения_::
-Объясняет, как подключать терминалы и модемы к вашей системе FreeBSD, как в серверном, так и в клиентском режиме.
+_crossref:usb-device-mode[usb-device-mode,USB Device Mode / USB OTG]_::
+Описывает использование USB Device Mode и USB On The Go (USB OTG) во FreeBSD.
-_crossref:ppp-and-slip[ppp-and-slip, PPP и SLIP], PPP и SLIP_::
-Описывает использование PPP, SLIP или PPP через Ethernet для соединения с удалёнными системами при помощи FreeBSD.
+_crossref:ppp-and-slip[ppp-and-slip,PPP и SLIP]_::
+Описывает использование PPP для соединения с удалёнными системами во FreeBSD.
-_crossref:mail[mail, Электронная почта], Электронная почта_::
+_crossref:mail[mail,Электронная почта]_::
Описывает использование различных компонентов почтового сервера и более углублённо рассматривает простые вопросы конфигурации для наиболее популярного программного обеспечения почтовых серверов: sendmail.
-_crossref:network-servers[network-servers, Сетевые серверы], Сетевые серверы_::
+_crossref:network-servers[network-servers,Сетевые серверы]_::
Предоставляет детальные инструкции и примеры файлов настройки для использования компьютера с FreeBSD в качестве файлового сервера (NFS), сервера доменных имен (DNS), сервера сетевой информационной системы (NIS), или сервера точного времени (ntpd).
-_crossref:firewalls[firewalls, Межсетевые экраны], Брандмауэры_::
+_crossref:firewalls[firewalls,Межсетевые экраны]_::
Описывает принципы, на которых основаны программные брандмауэры, и содержит детали конфигурирования различных брандмауэров, доступных в FreeBSD.
-_crossref:advanced-networking[advanced-networking, Сложные вопросы работы в сети], Сложные вопросы работы в сети_::
-Рассматривает множество вопросов работы с сетью, включая совместный доступ компьютеров вашей локальной сети к интернет, расширенные вопросы маршрутизации, беспроводные соединения, bluetooth, ATM, IPv6 и многое другое.
+_crossref:advanced-networking[advanced-networking,Сложные вопросы работы в сети]_::
+Рассматривает множество вопросов работы с сетью, включая совместный доступ компьютеров вашей локальной сети к интернет, расширенные вопросы маршрутизации, беспроводные соединения, Bluetooth(R), ATM, IPv6 и многое другое.
-_crossref:mirrors[mirrors, Получение FreeBSD], Получение FreeBSD_::
+_crossref:mirrors[mirrors,Получение FreeBSD]_::
Перечисляет различные источники, из которых можно получить FreeBSD на CDROM или DVD, равно как и различные сайты в интернет, с которых можно скачать и установить FreeBSD.
-_crossref:bibliography[bibliography, Библиография], Библиография_::
+_crossref:bibliography[bibliography,Библиография]_::
Эта книга касается многих различных тем, которые могут сподвигнуть вас на более детальное изучение. Библиография перечисляет множество отличных книг, упоминаемых в тексте.
-_crossref:eresources[eresources, Ресурсы в интернет], Ресурсы в интернет_::
+_crossref:eresources[eresources,Ресурсы в Интернет]_::
Описывает множество форумов, доступных для пользователей FreeBSD, где можно задать вопросы и поучаствовать в технических обсуждениях FreeBSD.
-_crossref:pgpkeys[pgpkeys, Ключи PGP], Ключи PGP_::
+_crossref:pgpkeys[pgpkeys,Ключи PGP]_::
Содержит ключи PGP некоторых разработчиков FreeBSD.
[[preface-conv]]
@@ -202,12 +265,13 @@ _Наклонный шрифт_ используется для имен фай
`Моноширинных шрифт` используется для сообщений об ошибках, команд, имен пользователей, названий групп, названий устройств, переменных и фрагментов кода.
Полужирный шрифт::
-Полужирный шрифт используется для обозначения приложений, команд и параметров.
+*Полужирный* шрифт используется для обозначения приложений, команд и комбинаций клавиш.
[[preface-conv-commands]]
=== Пользовательский ввод
-Клавиши представляются в виде *полужирного текста* для того, чтобы выделяться среди остального текста. Комбинации клавиш, которые должны вводиться одновременно, разделяются символом `+`, например:
+Клавиши представляются в виде *полужирного текста* для того, чтобы выделяться среди остального текста.
+Комбинации клавиш, которые должны вводиться одновременно, разделяются символом `+`, например:
kbd:[Ctrl+Alt+Del]
@@ -222,21 +286,24 @@ kbd:[Ctrl+X], kbd:[Ctrl+S]
[[preface-conv-examples]]
=== Примеры
-Примеры, которые начинаются с [.filename]#E:\># обозначают команды MS-DOS(R). Если не указано обратного, эти команды могут вводиться из окна "Сеанс MS-DOS(R)" в современных системах Microsoft(R) Windows(R).
+Примеры, которые начинаются с [.filename]#C:\>#, обозначают команды MS-DOS(R).
+Если не указано обратного, эти команды могут вводиться из окна "Командная строка" в современных системах Microsoft(R) Windows(R).
[source,shell]
....
-E:\> tools\fdimage floppies\kern.flp A:
+C:\> tools\fdimage floppies\kern.flp A:
....
-Примеры, которые начинаются с # обозначают команды, которые должны быть запущены с правами суперпользователя в FreeBSD. Вы можете войти в систему как пользователь `root` для того, чтобы ввести эти команды или войти в систему обычным пользователем и использовать man:su[1] для того, чтобы получить привилегии суперпользователя.
+Примеры, которые начинаются с # обозначают команды, которые должны быть запущены с правами суперпользователя в FreeBSD.
+Вы можете войти в систему как пользователь `root` для того, чтобы ввести эти команды или войти в систему обычным пользователем и использовать man:su[1] для того, чтобы получить привилегии суперпользователя.
[source,shell]
....
# dd if=kern.flp of=/dev/fd0
....
-Примеры, начинающиеся с %, указывают, что команда должна быть исполнена с правами обычного пользователя. Если не указано обратного, используется синтаксис C-shell для установки переменных окружения и других команд.
+Примеры, начинающиеся с %, указывают, что команда должна быть исполнена с правами обычного пользователя.
+Если не указано обратного, используется синтаксис C-shell для установки переменных окружения и других команд.
[source,shell]
....
@@ -246,6 +313,13 @@ E:\> tools\fdimage floppies\kern.flp A:
[[preface-acknowledgements]]
== Благодарности
-Книга, которую вы держите в руках являет собой результат труда многих сотен людей по всему миру. Не имеет значения, присылали ли они исправления опечаток или предоставляли целые главы, их труд был полезен.
+Книга, которую вы держите в руках являет собой результат труда многих сотен людей по всему миру.
+Не имеет значения, присылали ли они исправления опечаток или предоставляли целые главы, их труд был полезен.
-Несколько компаний поддерживали разработку этого документа, оплачивая авторам их труд, оплачивая публикацию и т.д. В частности, BSDi (в последствии приобретённая компанией http://www.windriver.com[Wind River Systems]) оплачивала труд по улучшению этой книги участникам Проекта Документации FreeBSD, что в итоге сделало возможным выпуск первой печатной версии в марте 2000 года (ISBN 1-57176-241-8). Впоследствии компания Wind River Systems оплатила работу нескольких авторов по улучшению генерации книги в удобном для печати виде и добавлению нескольких глав. Кульминация этой работы являла собой публикацию второй печатной версии в ноябре 2001 года (ISBN 1-57176-303-1). В 2003-2004 годах http://www.freebsdmall.com[FreeBSD Mall, Inc] заплатила нескольким контрибьюторам за улучшение Handbook при подготовке к третьей редакции.
+Несколько компаний поддерживали разработку этого документа, оплачивая авторам их труд, оплачивая публикацию и т.д.
+В частности, BSDi (в последствии приобретённая компанией http://www.windriver.com[Wind River Systems]) оплачивала труд по улучшению этой книги участникам Проекта Документации FreeBSD, что в итоге сделало возможным выпуск первой печатной версии в марте 2000 года (ISBN 1-57176-241-8).
+Впоследствии компания Wind River Systems оплатила работу нескольких авторов по улучшению генерации книги в удобном для печати виде и добавлению нескольких глав.
+Кульминация этой работы являла собой публикацию второй печатной версии в ноябре 2001 года (ISBN 1-57176-303-1).
+В 2003-2004 годах http://www.freebsdmall.com[FreeBSD Mall, Inc] заплатила нескольким контрибьюторам за улучшение Handbook при подготовке к третьей редакции.
+Третье печатное издание было разделено на два тома.
+Оба тома были опубликованы и получили названия The FreeBSD Handbook 3rd Edition Volume 1:User Guide (ISBN 1-57176-327-9) и The FreeBSD Handbook 3rd Edition Volume 2: Administrators Guide (ISBN 1-57176-328-7).
diff --git a/documentation/content/ru/books/handbook/printing/_index.adoc b/documentation/content/ru/books/handbook/printing/_index.adoc
index 3ffb621e37..de6039394d 100644
--- a/documentation/content/ru/books/handbook/printing/_index.adoc
+++ b/documentation/content/ru/books/handbook/printing/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/kernelconfig
next: books/handbook/linuxemu
showBookMenu: true
weight: 13
-path: "/books/handbook/"
+path: "/books/handbook/printing/"
---
[[printing]]
diff --git a/documentation/content/ru/books/handbook/security/_index.adoc b/documentation/content/ru/books/handbook/security/_index.adoc
index ac31affb33..4aa8bc256f 100644
--- a/documentation/content/ru/books/handbook/security/_index.adoc
+++ b/documentation/content/ru/books/handbook/security/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/boot
next: books/handbook/mac
showBookMenu: true
weight: 18
-path: "/books/handbook/"
+path: "/books/handbook/security/"
---
[[security]]
diff --git a/documentation/content/ru/books/handbook/serialcomms/_index.adoc b/documentation/content/ru/books/handbook/serialcomms/_index.adoc
index ad06bdd613..c47f401d25 100644
--- a/documentation/content/ru/books/handbook/serialcomms/_index.adoc
+++ b/documentation/content/ru/books/handbook/serialcomms/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partiv
next: books/handbook/ppp-and-slip
showBookMenu: true
weight: 27
-path: "/books/handbook/"
+path: "/books/handbook/serialcomms/"
---
[[serialcomms]]
diff --git a/documentation/content/ru/books/handbook/wayland/_index.adoc b/documentation/content/ru/books/handbook/wayland/_index.adoc
new file mode 100644
index 0000000000..19d1a17efb
--- /dev/null
+++ b/documentation/content/ru/books/handbook/wayland/_index.adoc
@@ -0,0 +1,699 @@
+---
+title: Глава 6. Wayland
+part: Часть I. Начало работы
+prev: books/handbook/x11
+next: books/handbook/network
+description: Эта глава описывает установку и настройку Wayland и композитных менеджеров во FreeBSD, обеспечивающих пользовательскую графическую оболочку
+tags: ["Wayland", "XWayland", "KDE", "Plasma", "Xfce", "Gnome", "Intel", "AMD", "NVIDIA", "Wayfire", "Sway", "Hikari"]
+showBookMenu: true
+weight: 8
+path: "/books/handbook/wayland/"
+---
+
+[[wayland]]
+= Wayland во FreeBSD
+:doctype: book
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:sectnumoffset: 6
+:partnums:
+:source-highlighter: rouge
+:experimental:
+:images-path: books/handbook/wayland/
+
+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::[]
+
+[[wayland-synopsis]]
+== Общие сведения о Wayland
+Wayland представляет собой новый сервер дисплеев, однако он отличается от Xorg в нескольких важных аспектах.
+Во-первых, Wayland является всего лишь протоколом, который выступает в качестве промежуточного слоя между клиентами и использует для этого альтернативный механизм, исключающий зависимость от X-сервера.
+Xorg включает как протокол X11, используемый для управления удалёнными дисплеями, так и X-сервер, который будет принимать соединения и отображать окна.
+В случае Wayland композитный менеджер или оконный менеджер вместо традиционного X-сервера предоставляет сервер дисплея.
+
+Так как Wayland не является X-сервером, то традиционные подключения к экранам X будут требовать использования других методов, таких, как VNC или RDP, для управления удалёнными рабочими столами.
+Во-вторых, Wayland может управлять композитными соединениями между клиентами и композитным менеджером как отдельной сущностью, которой не нужно поддерживать протоколы X.
+
+Wayland относительно нов, и не всё программное обеспечение обновлено для работы без дополнительной поддержки `Xwayland`.
+Так как Wayland не обеспечивает функцию X-сервера и ожидает, что эту поддержку обеспечивают композитные менеджеры, то оконным менеджерам X11, которые ещё не поддерживают Wayland, будет требоваться запуск `Xwayland` без параметра `-rootless`.
+При исключении параметра `-rootless` обеспечивается поддержка оконного менеджера X11.
+
+[NOTE]
+====
+Актуальный драйвер NVidia должен работать с большинством композитных менеджеров, основанных на wl-roots, но в настоящее время может быть несколько нестабильным и поддерживать не все возможности.
+Требуются добровольцы для помощи в работе над NVidia DRM.
+====
+
+В настоящее время большое количество программного обеспечения, включая Firefox, будет работать с Wayland с минимальными проблемами.
+Также доступно несколько оболочек рабочего стола, таких, как замена Compiz Fusion, известная как Wayfire, а также Sway, замена для оконного менеджера i3.
+
+[NOTE]
+====
+С мая 2021 года plasma5-kwin поддерживает Wayland во FreeBSD.
+Для использования Plasma вместе с Wayland используйте параметр `startplasma-wayland` для `ck-launch-session` в связке с dbus при помощи команды `ck-launch-session dbus-run-session startplasma-wayland`, чтобы это заработало.
+====
+
+Чтобы использовать функциональность определения клавиатурных комбинаций в композитных менеджерах, ядро системы должно поддерживать драйвер man:evdev[4].
+По умолчанию он включён в ядро [.filename]#GENERIC#, однако, если оно было кастомизировано и поддержка man:evdev[4] была исключена, то будет требоваться загрузка модуля ядра man:evdev[4].
+Кроме того, пользователи `Wayland` должны быть членами группы `video`.
+Для того, чтобы быстро выполнить это изменение, воспользуйтесь командой `pw`:
+
+[source,shell]
+----
+pw groupmod video -m user
+----
+
+Установка Wayland проста; нет ничего сложного в собственно настройке протокола.
+Основной объём действий будет зависеть от выбранного композитного менеджера.
+Приступим к установке `seatd` прямо сейчас и пропустим один шаг, являющийся частью установки и настройки композитного менеджера, так как для работы `seatd` необходимо предоставить пользовательский доступ к определённым устройствам.
+
+Все композитные менеджеры, описанные здесь, должны работать с драйверами с открытым кодом package:graphics/drm-kmod[]; однако графические адаптеры NVidia могут иметь проблемы при использовании проприетарных драйверов.
+Начнём с установки следующих пакетов:
+
+[source,shell]
+----
+# pkg install wayland seatd
+----
+
+Как только протокол и поддерживающие пакеты будут установлены, композитный менеджер должен создать пользовательский интерфейс.
+В следующих разделах будут рассмотрены несколько композитных менеджеров.
+Всем композитным менеджерам, использующим Wayland, для работы потребуется каталог, заданный в переменной окружения, что может быть выполнено следующей командой интерпретатора командной строки bourne shell:
+
+[source,shell]
+----
+% export XDG_RUNTIME_DIR=/var/run/user/`id -u`
+----
+
+Важно отметить, что большинство композитных менеджеров будут выполнять поиск конфигурационных файлов в каталоге XDG_RUNTIME_DIR.
+В показываемых здесь примерах будет использоваться параметр для указания конфигурационного файла в [.filename]#~/.config#, чтобы разделить хранение временных и конфигурационных файлов.
+Для каждого композитного менеджера рекомендуется настроить алиас для загрузки соответствующего конфигурационного файла.
+
+[WARNING]
+====
+Сообщается, что пользователи ZFS могут сталкиваться с трудностями с некоторыми клиентами Wayland, потому что им требуется доступ к возможности выполнить `posix_fallocate()` в рабочем каталоге.
+Хотя автор не смог воспроизвести эту проблему на системе ZFS, рекомендуемым обходным решением является отказ от использования ZFS для рабочего каталога и использование вместо него `tmpfs` для каталога [.filename]#/var/run#.
+В таком случае файловая система `tmpfs` используется для [.filename]#/var/run# и монтируется при помощи команды `mount -t tmpfs tmpfs /var/run`, при этом для сохранения такого изменения между перезагрузками используется [.filename]#/etc/fstab#.
+Во избежание потенциальных подводных камней с ZFS переменная окружения XDG_RUNTIME_DIR может быть настроена на использование [.filename]#/var/run/user/$UID#.
+Имейте в виду такую возможность при рассмотрении примеров конфигураций в последующих разделах.
+====
+
+Даемон seatd помогает композитным менеджерам управлять доступом к совместно используемым системным устройствам, в том числе графическим адаптерам, для непривилегированных пользователей.
+Для традиционных менеджеров X11, таких как Plasma и GNOME, необходимости в `seatd` нет, однако для композитных менеджеров Wayland, обсуждаемых здесь, его необходимо будет активировать на уровне системы, и он должен быть запущен до начала работы в окружении композитного менеджера.
+Для активации и запуска даемона `seatd` прямо сейчас, а также на этапе инициализации системы:
+
+[source,shell]
+----
+# sysrc seatd_enable=”YES”
+# service seatd start
+----
+
+После этого для получения GUI необходимо будет установить композитный менеджер, который похож на оболочку X11.
+Здесь рассматриваются три из них, а также базовые параметры настройки, настройки блокировки экрана и рекомендации по получению дополнительной информации.
+
+[[wayland-wayfire]]
+== Композитный менеджер Wayfire
+
+Wayfire является композитным менеджером, нацеленным на простоту и широкие возможности настройки.
+Доступно несколько функций, и он возвращает несколько элементов из ранее выпущенной графической оболочки Compiz Fusion.
+Все его компоненты на современном оборудовании выглядят прекрасно.
+Для запуска и работы Wayfire начните с установки требуемых пакетов:
+
+[source,shell]
+----
+# pkg install wayfire wf-shell alacritty swaylock-effects swayidle wlogout kanshi mako wlsunset
+----
+
+Пакет `alacritty` представляет собой эмулятор терминала.
+Однако он не совсем обязателен, так как другие эмуляторы терминала, такие как `kitty` и `Terminal` из XFCE-4, были протестированы и проверены на предмет работоспособности под управлением композитного менеджера Wayfire.
+Настройка Wayfire относительно проста; он использует файл, который нужно адаптировать при проведении любых настроек.
+Для начала скопируйте файл с примером в каталог с настройками среды исполнения, а затем отредактируйте его:
+
+[source,shell]
+----
+% mkdir ~/.config/wayfire
+% cp /usr/local/share/examples/wayfire/wayfire.ini ~/.config/wayfire
+----
+
+Значения по умолчания должны удовлетворить большинство пользователей.
+Внутри конфигурационного файла уже настроены такие пункты, как знаменитый `cube`, и имеются инструкции, помогающие с доступными настройками.
+Несколько ключевых настроек включают в себя:
+
+[.programlisting]
+....
+[output]
+mode = 1920x1080@60000
+position = 0,0
+transform = normal
+scale = 1.000000
+....
+
+В этом примере из конфигурационного файла подразумевается работа монитора в указанном режиме с указанной частотой в герцах.
+К примеру, режим должен задаваться как `widthxheight@refresh_rate`.
+Параметр position указывает на выдачу в заданную точку экрана.
+Значения по умолчанию должно подойти большинству пользователей.
+Наконец, параметр transform определяет преобразование фона, а scale будет масштабировать выдачу с заданным коэффициентом.
+Значения по умолчанию для этих параметров должно подойти большинству пользователей; для получения дополнительной информации обратитесь к документации.
+
+Как отмечалось, Wayland является новой технологией, и ещё не все приложения работают с этим протоколом.
+На данный момент `sddm`, видимо, не поддерживает запуск и управление композитными менеджерами в Wayland.
+Вместо него в этих примерах использовалась утилита `swaylock`.
+Конфигурационный файл содержит параметры для запуска `swayidle` и `swaylock` для режимов простоя и блокировки экрана.
+
+Параметр, который служит для определения действия, выполняемого тогда, когда система находится в режиме простоя, задаётся следующим образом:
+
+[.programlisting]
+....
+idle = swaylock
+....
+
+А таймаут для блокировки определяется при помощи следующих строк:
+
+[.programlisting]
+....
+[idle]
+toggle = <super> KEY_Z
+screensaver_timeout = 300
+dpms_timeout = 600
+....
+
+Первый параметр заблокирует экран по истечении 300 секунд, а после ещё 300 экран выключится в соответствии с опцией `dpms_timeout`.
+
+И, наконец, следует описать клавишу <super>.
+В большинстве конфигураций используется этот параметр, и он соответствует обычной клавише `Windows` на клавиатуре.
+Эта клавиша присутствует на большинстве клавиатур; в случае её отсутствия она должна быть переопределена в этом конфигурационном файле.
+К примеру, чтобы блокировать экран, нажмите и удерживайте клавишу super, клавишу kbd:[shift] и нажмите kbd:[escape].
+Если определения не были изменены, это приведёт к вызову приложения swaylock.
+В соответствии с настройками по умолчанию `swaylock` будет демонстрировать серый экран; однако приложение имеет массу настроек и хорошо документировано.
+Кроме того, так как установливалась версия swaylock-effects, имеется несколько доступных опций, таких как эффект размытия, который можно увидеть при помощи следующей команды:
+
+[source,shell]
+----
+% swaylock --effect-blur 7x5
+----
+
+Имеется также параметр `--clock`, который на экране блокировки будет отображать часы с датой и временем.
+При установке пакета package:x11/swaylock-effects[] также была установлена используемая по умолчанию конфигурация [.filename]#pam.d#.
+В ней заданы параметры, которые должны подойти большинству пользователей.
+Имеются и более сложные опции; обратитесь к документации по PAM для получения дополнительной информации.
+
+Подошло время протестировать Wayfire и посмотреть, сможет ли он запуститься на системе.
+Просто наберите следующую команду:
+
+[source,shell]
+----
+% wayfire -c ~/.config/wayfire/wayfire.ini
+----
+
+Композитный менеджер должен запуститься и отобразить фоновое изображение с полоской меню вверху экрана.
+Wayfire попытается выдать список установленных совместимых приложений для оболочки рабочего стола и представить их в этом выпадающем меню; к примеру, если установлен файловый менеджер XFCE-4, то он отобразится в этом выпадающем меню.
+Если какое-то конкретное приложение совместимо и имеет определённую ценность для назначения комбинации клавиш для его вызова, то это может быть сделано определением клавиатурной последовательности при помощи конфгурационного файла [.filename]#wayfire.ini#.
+В Wayfire также имеется инструмент настройки под названием Wayfire Config Manager.
+Он имеется в выпадающем меню, но также может быть запущен из терминала выдачей следующей команды:
+
+[source,shell]
+----
+% wcm
+----
+
+В этом приложении могут быть активированы, отключены или настроены различные конфигурационные параметры Wayfire, включая специальные эффекты.
+Кроме того, для организации более удобного пользовательского интерфейса в конфигурационном файле могут быть активированы менеджер фоновых изображений, панель и инструмент запуска приложений.
+
+[.programlisting]
+....
+panel = wf-panel
+dock = wf-dock
+background = wf-background
+....
+
+[WARNING]
+====
+Изменения, выполненные при помощи `wcm`, будут перезаписывать пользовательские изменения в конфигурационной файле [.filename]#wayfire.ini#.
+Для того, чтобы любые важные изменения могли быть восстановлены, настоятельно рекомендуется сделать резервкную копию файла [.filename]#wayfire.ini#.
+====
+
+Наконец, диспетчер задач, используемый по умолчанию и указанный в файле [.filename]#wayfire.ini#, является пакетом package:x11/wf-shell[], и может быть заменён другими панелями, если этого захочет пользователь.
+
+[[wayland-hikari]]
+== Композитный менеджер Hikari
+
+Композитный менеджер Hikari использует несколько концепций, направленных на организацию работы, таких как листы, рабочие пространства и так далее.
+В этом смысле он подобен панельному оконному менеджеру.
+Если описывать подробнее, то работа композитного менеджера начинается с одного рабочего простанства, что похоже на виртуальные рабочие столы.
+Hikari использует одно рабочее пространство или виртуальный рабочий стол для взаиодействия с пользователем.
+Рабочее пространство состоит из нескольких ракурсов, которые являются рабочими окнами в композитном менеджере, сгруппированными в виде листов или групп.
+Как листы, так и группы формируются из набора ракурсов; повторимся, что это окна, которые группируются вместе.
+При переключении между листами или группами активный лист или группа становится рабочим пространством.
+Страница справки содержит больше подробностей о функциях каждого объекта, однако для целей этого документа просто считайте, что одно рабочее пространство использует один лист.
+Установка Hikari состоит из одного пакета, package:x11-wm/hikari[], и эмулятора терминала `alacritty`:
+
+[source,shell]
+----
+# pkg install hikari alacritty
+----
+
+[NOTE]
+====
+Другие интерпретаторы командной строки, такие как `kitty` или `Terminal` среды Plasma, будут функционировать под управлением Wayland.
+Пользователям следут поэкспериментировать с предпочитаемыми терминальными редакторами, чтобы удостовериться в совместимости.
+====
+
+Hikari использует конфигурационный файл [.filename]#hikari.conf#, который может быть размещён в XDG_RUNTIME_DIR либо указан при запуске при помощи параметра `-c`.
+Конфигурационный файл автозапуска не является обязательным, однако может несколько упростить миграцию на этот композитный менеджер.
+Настройка начинается с создания конфигурационного каталога Hikari и копирования в него конфигурационного файла для редактирования:
+
+[source,shell]
+----
+% mkdir ~/.config/hikari
+% cp /usr/local/etc/hikari/hikari.conf ~/.config/hikari
+----
+
+Настройка структурирована в несколько различных разделов, таких как ui, outputs, layouts и так далее.
+Для большинства пользователей значения по умолчанию будут работать достаточно хорошо; однако понадобится сделать несколько важных изменений.
+К примеру, переменная $TERMINAL в пользовательском окружении обычно не задаётся.
+Изменение этой переменной или корректировка файла [.filename]#hikari.conf# таким образом:
+
+[.programlisting]
+....
+terminal = "/usr/local/bin/alacritty"
+....
+
+Приведёт к запуску терминала `alacritty` при нажатии привязанной клавиатурной комбинации.
+Проходя по конфигурационному файлу, следует отметить, что заглавные буквы используются для обозначения клавиш для пользователя.
+К примеру, клавиша kbd:[L], используемая для запуска терминала по нажатию kbd:[L+Return], на самом деле является ранее обсуждённой супер клавишей, или клавишей с логотипом Windows.
+Таким образом, при настройках по умолчанию удержание клавиши kbd:[L/super/Windows] и нажатие kbd:[Enter] откроет заданный эмулятор терминала.
+Переопределение других клавиш для запуска приложений требует создания определений для действий.
+Для этого действие должно быть указано в разделе с действиями, к примеру:
+
+[.programlisting]
+....
+actions {
+ terminal = "/usr/local/bin/alacritty"
+ browser = "/usr/local/bin/firefox"
+}
+....
+
+После этого действие может быть назначено в разделе keyboard, который определён внутри раздела bindings:
+
+[.programlisting]
+....
+bindings {
+ keyboard {
+ФРАГМЕНТ
+ "L+Return" = action-terminal
+ "L+b" = action-browser
+ФРАГМЕНТ
+....
+
+После перезапуска Hikari удерживание клавиши с логотипом Windows и нажатие клавиши kbd:[b] запустит веб-браузер.
+У этого композитного менеджера отсутствует полоска меню, и пользователям рекомендуется как минимум настроить эмулятор терминала перед миграцией.
+Страница справки содержит большой объём документации, с которой необходимо ознакомиться перед выполнением полной миграции
+Ещё одной положительной стороной Hikari является то, что при миграции на этот композитный менеджер он может быть запущен в окружении рабочего стола Plasma и GNOME, позволяя апробировать его до полного перехода.
+
+Блокировка экрана в Hikari проста, так как стандартный конфигурационный файл [.filename]#pam.d# и утилита разблокировки включены в пакет.
+Функция блокировки экрана привязана к клавишам kbd:[L] (клавиша с логотипом Windows)+ kbd:[Shift] + kbd:[Backspace].
+Следует отметить, что все ракурсы, не помеченные как публичные, будут скрыты.
+Эти ракурсы никогда не будут принимать ввод в режиме блокировки, однако следует озаботиться о том, что может быть показаны чувствительные данные.
+Для некоторых пользователей может оказаться проще перейти на другой инструмент блокировки, такой как swaylock-effects, рассмотренный в этом разделе.
+Для запуска Hikari используйте следующую команду:
+
+[source,shell]
+----
+% hikari -c ~/.config/hikari/hikari.conf
+----
+
+[[wayland-sway]]
+== Композитный менеджер Sway
+
+Sway является плиточным композитным менеджером, который пытается быть заменой оконному менеджеру i3.
+Он должен работать с актуальной пользовательской конфигурацией i3; однако новые возможности могут потребовать некоторой дополнительной настройки.
+В последующих примерах предполагается новая установка без какой-либо миграции конфигураций i3.
+Для того, чтобы установить Sway и важные компоненты, выполните следующую команду пользователем root:
+
+[source,shell]
+----
+# pkg install sway swayidle swaylock-effects alacritty dmenu-wayland dmenu
+----
+
+Для получения базового конфигурационного файла выполните следующие команды, а затем отредактируйте конфигурационный файл после его копирования:
+
+[source,shell]
+----
+% mkdir ~/.config/sway
+% cp /usr/local/etc/sway/config ~/.config/sway
+----
+
+Базовый конфигурационный файл имеет много настроек по умолчанию, которые подойдут большинству пользователей.
+Необходимо сделать несколько важных изменений, как показано ниже:
+
+[.programlisting]
+....
+# Клавиша с логотипом. Используйте Mod1 для указания на Alt.
+input * xkb_rules evdev
+set $mod Mod4
+# Предпочитаемый вами эмулятор терминала
+set $term alacritty
+set $lock swaylock -f -c 000000
+output "My Workstation" mode 1366x786@60Hz position 1366 0
+output * bg ~/wallpapers/mywallpaper.png stretch
+### Настройка простоя
+exec swayidle -w \
+ timeout 300 'swaylock -f -c 000000' \
+ timeout 600 'swaymsg "output * dpms off"' resume 'swaymsg "output * dpms on"' \
+ before-sleep 'swaylock -f -c 000000'
+....
+
+В предыдущем примере загружаются правила `xkb` для man:evdev[4], а клавиша $mod настроена на клавишу с логотипом Windows для определения клавиш быстрого вызова.
+Затем эмулятор терминала был настроен на `alacritty` и была определена команда для блокирования экрана; подробности об этом следуют позже.
+Ключевое слово output указало Sway на режим, позицию, рисунок фона, а также на растяжение этого фонового рисунка для заполнения всего экрана.
+Наконец, `swaylock` настроен на работу в фоновом режиме и блокировку экрана после таймаута в 300 секунд, с переводом экрана или монитора в спящий режжим после 600 секунд.
+Цвет экрана блокировки задан как 000000, что соответствует чёрному цвету, что также определено здесь.
+При использовании swaylock-effects с параметром `--clock` могут также отображаться часы.
+Обратитесь к странице справки для получения информации о дополнительных опциях.
+Также следует изучить страницу справки о man:sway-output[5]; в ней содержится большой объём информации о доступных настройках параметров отображения.
+
+При работе в Sway для вызова меню приложения удерживайте клавишу с логотипом Windows (mod) и нажмите клавишу kbd:[d].
+Навигация по меню может осуществляться при помощи клавиш со стрелками на клавиатуре.
+Есть также возможности по созданию панели инструментов и добавлению панели задач; прочтите страницу справки по man:sway-bar[5] для получения дополнительной информации.
+Конфигурация, применяемая по умолчанию, добавляет дату и время в правый верхний угол.
+Пример можно найти в разделе `Bar` конфигурационного файла.
+По умолчанию в конфигурацию на включена блокировка экрана, кроме примера выше, активирующего таймер блокировки.
+Для создания клавиатурной комбинации для блокировки экрана требуется следующая строка в разделе `Key bindings`:
+
+[.programlising]
+....
+# Ручная блокировка экрана
+bindsym $mod+Shift+Return exec $lock
+....
+
+Теперь экран может быть заблокирован при помощи комбинации, заключающейся в удержании клавиши с логотипом Windows, нажатии и удержании клавиши shift и затем нажатия клавиши ввода.
+При установке Sway, как из пакета, так и из Коллекции Портов FreeBSD, устанавливается файл по умолчанию для [.filename]#pam.d#.
+Конфигурация по умолчанию должна подойти большинству пользователей, однако также доступны и более сложные настройки.
+Прочтите документацию по PAM для получения дополнительной информации.
+
+Наконец, для выхода из Sway и возвращения в интерпретатор командной строки удерживайте клавишу с логотипом Windows, клавишу shift, и нажмите клавишу kbd:[e].
+Будет выдано сообщение с вариантом выхода из Sway.
+Во время миграции Sway может быть запущен из эмулятора терминала на рабочем столе X11, таком как Plasma.
+Это несколько упрощает тестирование различных изменений и клавиатурных комбинаций до момента полной миграции на этот композитный менеджер.
+Для запуска Sway выполните следующую команду:
+
+[source,shell]
+----
+% sway -c ~/.config/sway/config
+----
+
+[[wayland-xwayland]]
+== Использование Xwayland
+
+При установке Wayland должен быть установлен двоичный файл `Xwayland`, если только Wayland не строился без поддержки X11.
+Если файл [.filename]#/usr/local/bin/Xwayland# не существует, установите его при помощи следующей команды:
+
+[source,shell]
+----
+# pkg install xwayland-devel
+----
+
+[NOTE]
+====
+Рекомендуется использовать версию Xwayland для разработчиков, и, скорее всего, она и устанавливается с пакетом Wayland.
+В каждом композитном менеджере имеется метод активации или отключения такой функции.
+====
+
+После того, как `Xwayland` будет установлен, настройте его при помощи выбранного композитного менеджера.
+Для Wayfire в файле [.filename]#wayfire.ini# требуется следующая строка:
+
+[.programlisting]
+....
+xwayland = true
+....
+
+В композитном менеджере Sway по умолчанию `Xwayland` должен быть включён.
+Несмотря на это, рекомендуется вручную добавить конфигурационную строку в файл [.filename]#~/.config/sway/config#, подобно следующему:
+
+[.programlisting]
+.....
+xwayland enable
+.....
+
+Наконец, для Hikari изменения не требуются.
+Поддержка `Xwayland` встроена по умолчанию.
+Для отключения такой поддержки перестройте пакет из коллекции портов и отключите поддержку Xwayland на этом этапе.
+
+После внесения этих изменений запустите композитный менеджер из командной строки и вызовите терминал при помощи комбинации клавиш.
+Работая в этом терминале, выполните команду `env` и поищите переменные `DISPLAY`.
+Если композитному менеджеру удалось полноценно запустить X-сервер Xwayland, то эти переменные окружения должны иметь вид, подобный следующему:
+
+[source,shell]
+----
+% env | grep DISPLAY
+----
+
+[.programlisting]
+....
+WAYLAND_DISPLAY=wayland-1
+DISPLAY=:0
+....
+
+В этой выдаче присутствует дисплей Wayland, используемый по умолчанию, а также дисплей, заданный для сервера Xwayland.
+Другим способом удостовериться в том, что `Xwayland` функционирует корректно, является установка и проверка работы небольшого пакета package:[x11/eyes].
+Если приложение `xeyes` запускается, и глаза следят за указателем мыши, то Xwayland функционирует корректно.
+Если выдаётся сообщение об ошибке, подобное тому, что ниже, то что-то произошло при инициализации `Xwayland`, и может потребоваться переустановка:
+
+[.programlisting]
+....
+Error: Cannot open display wayland-0
+....
+
+[WARNING]
+====
+Особенностью Wayland, имеющей отношение к информационной безопасности, является то, что без запуска X-сервера отсутствует дополнительный сервис, ожидающий сетевое подключение к нему.
+После активации `Xwayland` это утверждение становится нерелевантным для конкретной системы.
+====
+
+В случае использования некоторых композитных менеджеров, таких как Wayfire, `Xwayland` может не запускаться корректно.
+В таких случаях `env` будет выдавать следующую информацию о переменных окружения `DISPLAY`:
+
+[source,shell]
+----
+% env | grep DISPLAY
+----
+
+[.programlisting]
+....
+DISPLAY=wayland-1
+WAYLAND_DISPLAY=wayland-1
+....
+
+Несмотря на то, что `Xwayfire` был установлен и настроен, приложения X11 не будут запускаться ввиду проблемы с дисплеем.
+Для обхода этой ситуации удостоверьтесь, что уже имеется экземпляр `Xwayland`, использующий UNIX-сокет, следующими двумя методами.
+Во-первых, проверьте выдачу команды `sockstat` и поищите X11-unix:
+
+[source,shell]
+----
+% sockstat | grep x11
+----
+
+Должно выдаваться что-то, подобное следующим данным:
+
+[.programlisting]
+....
+trhodes Xwayland 2734 8 stream /tmp/.X11-unix/X0
+trhodes Xwayland 2734 9 stream /tmp/.X11-unix/X0
+trhodes Xwayland 2734 10 stream /tmp/.X11-unix/X0
+trhodes Xwayland 2734 27 stream /tmp/.X11-unix/X0_
+trhodes Xwayland 2734 28 stream /tmp/.X11-unix/X0
+....
+
+Это предполагает существование сокета X11.
+Затем это может быть верифицировано попыткой выполнения команды `Xwayland` в ручном режиме из эмулятора терминала, работающего под управлением композитного менеджера:
+
+[source,shell]
+----
+% Xwayland
+----
+
+Если сокет X11 уже доступен, то пользователю должно быть выдано следующее сообщение об ошибке:
+
+[.programlisting]
+....
+(EE)
+Fatal server error:
+(EE) Server is already active for display 0
+ If this server is no longer running, remove /tmp/.X0-lock
+ and start again.
+(EE)
+....
+
+Так как имеется активный X-дисплей, использующий нулевой номер, переменная окружения была просто некорректно задана, для исправления чего измените значение переменной окружения `DISPLAY` на `:0` и попробуйте запустить приложение ещё раз.
+В следующем примере используется пакет package:mail/claws-mail[] в качестве приложения, которому требуется сервис `Xwayland`:
+
+[source,shell]
+----
+export DISPLAY=:0
+----
+
+После этого изменения приложение package:mail/claws-mail[] должно теперь использовать `Xwayland` и работать так, как ожидалось.
+
+[[wayland-remotedesktop]]
+== Организация Удалённого Рабочего Стола при помощи VNC
+
+Ранее в этом документе отмечалось, что Wayland не предоставляет доступ в стиле X-сервера, как это делает Xorg.
+Вместо этого пользователи свободны в выборе протокола доступа к удалённому рабочему столу, такого как RDP или VNC.
+В Коллекцию Портов FreeBSD включён `wayvnc`, который будет поддерживать композитные менеджеры, основанные на wlroots, вроде тех, что описываются здесь.
+Это приложение может быть установлено при помощи:
+
+[source,shell]
+----
+# pkg install wayvnc
+----
+
+В отличие от некоторых других пакетов, `wayvnc` поставляется без конфигурационного файла.
+К счастью, страница справки описывает важные параметры, и они могут быть перенесены в простой конфигурационный файл:
+
+[.programlisting]
+....
+address=0.0.0.0
+enable_auth=true
+username=username
+password=password
+private_key_file=/path/to/key.pem
+certificate_file=/path/to/cert.pem
+....
+
+Потребуется сформировать файлы с ключами безопасности, а их использование настоятельно рекомендуется для обеспечения повышенного уровня безопасности соединений.
+При запуске wayvnc будет искать конфигурационный файл в [.filename]#~/.config/wayvnc/config#.
+Такое поведение может быть переопределено опцией `-C конфигурационный_файл` при запуске сервера.
+Таким образом, для запуска сервера `wayvnc` выполните следующую команду:
+
+[source,shell]
+----
+% wayvnc -C ~/.config/wayvnc/config
+----
+
+[NOTE]
+====
+На момент написания данного текста скрипт rc.d для запуска `wayvnc` при инициализации системы отсутствовал.
+Если такая функциональность нужна, то необходимо будет создать локальный файл запуска.
+Можно считать это запросом на добавление такой возможности для майнтайнера данного порта.
+====
+
+[[wayland-ly]]
+== Менеджер регистраций Wayland
+Хотя существует несколько менеджеров регистраций, которые постепенно переходят на использование Wayland, одним из вариантов является менеджер package:x11/ly[] с текстовым пользовательским интерфейсом (TUI).
+Обходясь минимальными настройками, `ly` будет запускать Sway, Wayfire и другие менеджеры, выдавая окно регистрации в процессе инициализации системы.
+Для установки `ly` запустите следующую команду:
+
+[source,shell]
+----
+# pkg install ly
+----
+
+Будет выдано несколько советов по настройке, при этом шагами по активации является добавление следующих строк в файл [.filename]#/etc/gettytab#:
+
+[programlisting]
+....
+Ly:\
+ :lo=/usr/local/bin/ly:\
+ :al=root:
+....
+
+Затем откорректируйте строку ttyv1 в файле [.filename]#/etc/ttys# так, чтобы она соответствовала следующей:
+
+[programlisting]
+....
+ttyv1 "/usr/libexec/getty Ly" xterm onifexists secure
+....
+
+После перезагрузки системы должно появиться приглашение ко входу в систему.
+Для настройки специфичных параметров, таких как используемый язык, отредактируйте [.filename]#/usr/local/etc/ly/config.ini#.
+Как минимум, этот файл должен указывать на выделенный tty, заданный ранее в [.filename]#/etc/ttys#.
+
+[NOTE]
+====
+При указании ttyv0 в качестве терминала входа в систему может потребоваться нажать клавиши kbd:[alt] и kbd:[F1] для того, чтобы увидеть регистрационное окно.
+====
+
+Когда отобразится окно входа в систему, нажатие клавиш со стрелками влево и вправо будет изменять выбор оконного менеджера из списка различных поддерживаемых.
+
+[[wayland-utilities]]
+== Полезные Инструменты
+
+Одной полезной утилитой Wayland, которую могут использовать любые композитные менеджеры, является waybar.
+Хотя Wayfire поставляется с меню запуска, лёгкая в использовании и быстрая панель задач является хорошим инструментом для любого композитного менеджера или оболочки рабочего стола.
+Панелью задач, совместимой с Wayland, быстрой и лёгкой в настройке, и является waybar.
+Для установки пакета и утилиты, поддерживающей управление аудио, запустите следующую команду:
+
+[source,shell]
+----
+# pkg install pavucontrol waybar
+----
+
+Для создания конфигурационного каталога и копирования конфигурационного файла по умолчанию выполните следующие команды:
+
+[source,shell]
+----
+% mkdir ~/.config/waybar
+% cp /usr/local/etc/xdg/waybar/config ~/.config/waybar
+----
+
+Утилита `lavalauncher` обеспечивает панель запуска для различных приложений.
+С пакетом не поставляется пример конфигурационного файла, поэтому должны быть выполнены следующие действия:
+
+[source,shell]
+----
+mkdir ~/.config/lavalauncher
+----
+
+Пример конфигурационного файла, который включает только Firefox и предполагает размещение на экране справа, приводится ниже:
+
+[.programlising]
+....
+global-settings {
+ watch-config-file = true;
+}
+
+bar {
+ output = eDP-1;
+ position = bottom;
+ background-colour = "#202020";
+
+ # Условие для конфигурационного набора, используемого по умолчанию.
+ condition-resolution = wider-than-high;
+
+ config {
+ position = right;
+ }
+
+ button {
+ image-path = /usr/local/lib/firefox/browser/chrome/icons/default/default48.png;
+ command[mouse-left] = /usr/local/bin/firefox;
+ }
+ button {
+ image-path = /usr/local/share/pixmaps/thunderbird.png;
+ command[mouse-left] = /usr/local/bin/thunderbird;
+}
+....
+
diff --git a/documentation/content/ru/books/handbook/x11/_index.adoc b/documentation/content/ru/books/handbook/x11/_index.adoc
index 75510a62ab..1ebdc96a39 100644
--- a/documentation/content/ru/books/handbook/x11/_index.adoc
+++ b/documentation/content/ru/books/handbook/x11/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/ports
next: books/handbook/partii
showBookMenu: true
weight: 8
-path: "/books/handbook/"
+path: "/books/handbook/x11/"
---
[[x11]]
diff --git a/documentation/content/ru/books/porters-handbook/keeping-up/_index.adoc b/documentation/content/ru/books/porters-handbook/keeping-up/_index.adoc
index 62f822875d..b2c5af38b5 100644
--- a/documentation/content/ru/books/porters-handbook/keeping-up/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/keeping-up/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/porting-samplem
next: books/porters-handbook/uses
showBookMenu: true
weight: 14
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/keeping-up/"
---
[[keeping-up]]
diff --git a/documentation/content/ru/books/porters-handbook/makefiles/_index.adoc b/documentation/content/ru/books/porters-handbook/makefiles/_index.adoc
index d75341c2c4..21a4e5fec2 100644
--- a/documentation/content/ru/books/porters-handbook/makefiles/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/makefiles/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/slow-porting
next: books/porters-handbook/special
showBookMenu: true
weight: 5
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/makefiles/"
---
[[makefiles]]
diff --git a/documentation/content/ru/books/porters-handbook/new-port/_index.adoc b/documentation/content/ru/books/porters-handbook/new-port/_index.adoc
index cceee1d790..1212099082 100644
--- a/documentation/content/ru/books/porters-handbook/new-port/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/new-port/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/porting-why
next: books/porters-handbook/quick-porting
showBookMenu: true
weight: 2
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/new-port/"
---
[[own-port]]
diff --git a/documentation/content/ru/books/porters-handbook/pkg-files/_index.adoc b/documentation/content/ru/books/porters-handbook/pkg-files/_index.adoc
index a9aeadd3df..c168ae3458 100644
--- a/documentation/content/ru/books/porters-handbook/pkg-files/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/pkg-files/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/plist
next: books/porters-handbook/testing
showBookMenu: true
weight: 8
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/pkg-files/"
---
[[pkg-files]]
diff --git a/documentation/content/ru/books/porters-handbook/plist/_index.adoc b/documentation/content/ru/books/porters-handbook/plist/_index.adoc
index 4acc9600e3..d713a15369 100644
--- a/documentation/content/ru/books/porters-handbook/plist/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/plist/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/special
next: books/porters-handbook/pkg-files
showBookMenu: true
weight: 7
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/plist/"
---
[[plist]]
diff --git a/documentation/content/ru/books/porters-handbook/porting-dads/_index.adoc b/documentation/content/ru/books/porters-handbook/porting-dads/_index.adoc
index 5978b3924e..3e8514a185 100644
--- a/documentation/content/ru/books/porters-handbook/porting-dads/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/porting-dads/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/security
next: books/porters-handbook/porting-samplem
showBookMenu: true
weight: 12
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/porting-dads/"
---
[[porting-dads]]
diff --git a/documentation/content/ru/books/porters-handbook/porting-samplem/_index.adoc b/documentation/content/ru/books/porters-handbook/porting-samplem/_index.adoc
index 6a7ac649c4..85dbc9d69c 100644
--- a/documentation/content/ru/books/porters-handbook/porting-samplem/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/porting-samplem/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/porting-dads
next: books/porters-handbook/keeping-up
showBookMenu: true
weight: 13
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/porting-samplem/"
---
[[porting-samplem]]
diff --git a/documentation/content/ru/books/porters-handbook/porting-why/_index.adoc b/documentation/content/ru/books/porters-handbook/porting-why/_index.adoc
index 7a024c6800..cec5603c1a 100644
--- a/documentation/content/ru/books/porters-handbook/porting-why/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/porting-why/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/
next: books/porters-handbook/new-port
showBookMenu: true
weight: 1
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/porting-why/"
---
[[why-port]]
diff --git a/documentation/content/ru/books/porters-handbook/quick-porting/_index.adoc b/documentation/content/ru/books/porters-handbook/quick-porting/_index.adoc
index 788e93925f..9f93d316e1 100644
--- a/documentation/content/ru/books/porters-handbook/quick-porting/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/quick-porting/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/new-port
next: books/porters-handbook/slow-porting
showBookMenu: true
weight: 3
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/quick-porting/"
---
[[quick-porting]]
diff --git a/documentation/content/ru/books/porters-handbook/security/_index.adoc b/documentation/content/ru/books/porters-handbook/security/_index.adoc
index 475cc1a3a3..a751abf73e 100644
--- a/documentation/content/ru/books/porters-handbook/security/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/security/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/upgrading
next: books/porters-handbook/porting-dads
showBookMenu: true
weight: 11
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/security/"
---
[[security]]
diff --git a/documentation/content/ru/books/porters-handbook/slow-porting/_index.adoc b/documentation/content/ru/books/porters-handbook/slow-porting/_index.adoc
index 08419fa83e..48af78675d 100644
--- a/documentation/content/ru/books/porters-handbook/slow-porting/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/slow-porting/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/quick-porting
next: books/porters-handbook/makefiles
showBookMenu: true
weight: 4
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/slow-porting/"
---
[[slow-porting]]
diff --git a/documentation/content/ru/books/porters-handbook/special/_index.adoc b/documentation/content/ru/books/porters-handbook/special/_index.adoc
index ae42403d78..5b9b2423ba 100644
--- a/documentation/content/ru/books/porters-handbook/special/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/special/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/makefiles
next: books/porters-handbook/plist
showBookMenu: true
weight: 6
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/special/"
---
[[special]]
diff --git a/documentation/content/ru/books/porters-handbook/testing/_index.adoc b/documentation/content/ru/books/porters-handbook/testing/_index.adoc
index 908d299ab0..9c4d296e6b 100644
--- a/documentation/content/ru/books/porters-handbook/testing/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/testing/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/pkg-files
next: books/porters-handbook/upgrading
showBookMenu: true
weight: 9
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/testing/"
---
[[testing]]
diff --git a/documentation/content/ru/books/porters-handbook/upgrading/_index.adoc b/documentation/content/ru/books/porters-handbook/upgrading/_index.adoc
index cf016a1117..b24ef2a4bf 100644
--- a/documentation/content/ru/books/porters-handbook/upgrading/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/upgrading/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/testing
next: books/porters-handbook/security
showBookMenu: true
weight: 10
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/upgrading/"
---
[[port-upgrading]]
diff --git a/documentation/content/ru/books/porters-handbook/uses/_index.adoc b/documentation/content/ru/books/porters-handbook/uses/_index.adoc
index f12e37b321..5afac7f055 100644
--- a/documentation/content/ru/books/porters-handbook/uses/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/uses/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/keeping-up
next: books/porters-handbook/versions
showBookMenu: true
weight: 15
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/uses/"
---
[[uses]]
diff --git a/documentation/content/ru/books/porters-handbook/versions/_index.adoc b/documentation/content/ru/books/porters-handbook/versions/_index.adoc
index f15256b9f5..2c9b882709 100644
--- a/documentation/content/ru/books/porters-handbook/versions/_index.adoc
+++ b/documentation/content/ru/books/porters-handbook/versions/_index.adoc
@@ -3,7 +3,7 @@ title: Глава 16. Значения __FreeBSD_version
prev: books/porters-handbook/uses
showBookMenu: true
weight: 16
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/versions/"
---
[[versions]]
diff --git a/documentation/content/zh-cn/books/arch-handbook/_index.adoc b/documentation/content/zh-cn/books/arch-handbook/_index.adoc
index 4116613b30..2c1d130ee9 100644
--- a/documentation/content/zh-cn/books/arch-handbook/_index.adoc
+++ b/documentation/content/zh-cn/books/arch-handbook/_index.adoc
@@ -3,7 +3,7 @@ title: FreeBSD 系统结构手册
authors:
- author: The FreeBSD Documentation Project
- author: FreeBSD 中文计划
-copyright: Copyright © 2000-2006, 2012-2013 The FreeBSD Documentation Project
+copyright: 2000-2006, 2012-2013 The FreeBSD Documentation Project
trademarks: ["freebsd", "apple", "microsoft", "unix", "general"]
next: books/arch-handbook/parti
add_single_page_link: true
diff --git a/documentation/content/zh-cn/books/arch-handbook/bibliography/_index.adoc b/documentation/content/zh-cn/books/arch-handbook/bibliography/_index.adoc
index b30f6aabdd..28852a1dab 100644
--- a/documentation/content/zh-cn/books/arch-handbook/bibliography/_index.adoc
+++ b/documentation/content/zh-cn/books/arch-handbook/bibliography/_index.adoc
@@ -3,7 +3,7 @@ title: 参考书目
prev: books/arch-handbook/partiii
showBookMenu: true
weight: 20
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/bibliography/"
---
[bibliography]
diff --git a/documentation/content/zh-cn/books/arch-handbook/book.adoc b/documentation/content/zh-cn/books/arch-handbook/book.adoc
index 2dfb61b545..16fa76cc5a 100644
--- a/documentation/content/zh-cn/books/arch-handbook/book.adoc
+++ b/documentation/content/zh-cn/books/arch-handbook/book.adoc
@@ -3,7 +3,7 @@ title: FreeBSD 系统结构手册
authors:
- author: The FreeBSD Documentation Project
- author: FreeBSD 中文计划
-copyright: Copyright © 2000-2006, 2012-2013 The FreeBSD Documentation Project
+copyright: 2000-2006, 2012-2013 The FreeBSD Documentation Project
trademarks: ["freebsd", "apple", "microsoft", "unix", "general"]
add_split_page_link: true
---
diff --git a/documentation/content/zh-cn/books/arch-handbook/boot/_index.adoc b/documentation/content/zh-cn/books/arch-handbook/boot/_index.adoc
index 298957a4ff..602a7148d7 100644
--- a/documentation/content/zh-cn/books/arch-handbook/boot/_index.adoc
+++ b/documentation/content/zh-cn/books/arch-handbook/boot/_index.adoc
@@ -4,7 +4,7 @@ prev: books/arch-handbook/parti
next: books/arch-handbook/locking
showBookMenu: true
weight: 2
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/boot/"
---
[[boot]]
diff --git a/documentation/content/zh-cn/books/arch-handbook/driverbasics/_index.adoc b/documentation/content/zh-cn/books/arch-handbook/driverbasics/_index.adoc
index 4e5ac0677c..cae4b14fbe 100644
--- a/documentation/content/zh-cn/books/arch-handbook/driverbasics/_index.adoc
+++ b/documentation/content/zh-cn/books/arch-handbook/driverbasics/_index.adoc
@@ -4,7 +4,7 @@ prev: books/arch-handbook/partii
next: books/arch-handbook/isa
showBookMenu: true
weight: 11
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/driverbasics/"
---
[[driverbasics]]
diff --git a/documentation/content/zh-cn/books/arch-handbook/isa/_index.adoc b/documentation/content/zh-cn/books/arch-handbook/isa/_index.adoc
index 7ae0592767..d7105f9128 100644
--- a/documentation/content/zh-cn/books/arch-handbook/isa/_index.adoc
+++ b/documentation/content/zh-cn/books/arch-handbook/isa/_index.adoc
@@ -4,7 +4,7 @@ prev: books/arch-handbook/driverbasics
next: books/arch-handbook/pci
showBookMenu: true
weight: 12
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/isa/"
---
[[isa-driver]]
diff --git a/documentation/content/zh-cn/books/arch-handbook/jail/_index.adoc b/documentation/content/zh-cn/books/arch-handbook/jail/_index.adoc
index 1bf2aede01..462bea9c50 100644
--- a/documentation/content/zh-cn/books/arch-handbook/jail/_index.adoc
+++ b/documentation/content/zh-cn/books/arch-handbook/jail/_index.adoc
@@ -4,7 +4,7 @@ prev: books/arch-handbook/kobj
next: books/arch-handbook/sysinit
showBookMenu: true
weight: 5
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/jail/"
---
[[jail]]
diff --git a/documentation/content/zh-cn/books/arch-handbook/kobj/_index.adoc b/documentation/content/zh-cn/books/arch-handbook/kobj/_index.adoc
index 1093e39426..1dac9737ea 100644
--- a/documentation/content/zh-cn/books/arch-handbook/kobj/_index.adoc
+++ b/documentation/content/zh-cn/books/arch-handbook/kobj/_index.adoc
@@ -4,7 +4,7 @@ prev: books/arch-handbook/locking
next: books/arch-handbook/jail
showBookMenu: true
weight: 4
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/kobj/"
---
[[kernel-objects]]
diff --git a/documentation/content/zh-cn/books/arch-handbook/locking/_index.adoc b/documentation/content/zh-cn/books/arch-handbook/locking/_index.adoc
index 7851167292..70388bd9b6 100644
--- a/documentation/content/zh-cn/books/arch-handbook/locking/_index.adoc
+++ b/documentation/content/zh-cn/books/arch-handbook/locking/_index.adoc
@@ -4,7 +4,7 @@ prev: books/arch-handbook/boot
next: books/arch-handbook/kobj
showBookMenu: true
weight: 3
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/locking/"
---
[[locking]]
diff --git a/documentation/content/zh-cn/books/arch-handbook/mac/_index.adoc b/documentation/content/zh-cn/books/arch-handbook/mac/_index.adoc
index 1a33f770db..b8c46bac76 100644
--- a/documentation/content/zh-cn/books/arch-handbook/mac/_index.adoc
+++ b/documentation/content/zh-cn/books/arch-handbook/mac/_index.adoc
@@ -4,7 +4,7 @@ prev: books/arch-handbook/sysinit
next: books/arch-handbook/vm
showBookMenu: true
weight: 7
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/mac/"
---
[[mac]]
diff --git a/documentation/content/zh-cn/books/arch-handbook/newbus/_index.adoc b/documentation/content/zh-cn/books/arch-handbook/newbus/_index.adoc
index fda3045508..ae3db70310 100644
--- a/documentation/content/zh-cn/books/arch-handbook/newbus/_index.adoc
+++ b/documentation/content/zh-cn/books/arch-handbook/newbus/_index.adoc
@@ -4,7 +4,7 @@ prev: books/arch-handbook/usb
next: books/arch-handbook/sound
showBookMenu: true
weight: 16
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/newbus/"
---
[[newbus]]
diff --git a/documentation/content/zh-cn/books/arch-handbook/parti.adoc b/documentation/content/zh-cn/books/arch-handbook/parti.adoc
index a37753af43..b97aef923f 100644
--- a/documentation/content/zh-cn/books/arch-handbook/parti.adoc
+++ b/documentation/content/zh-cn/books/arch-handbook/parti.adoc
@@ -4,7 +4,7 @@ prev: books/arch-handbook
next: books/arch-handbook/boot
showBookMenu: true
weight: 1
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/parti/"
---
[[kernel]]
diff --git a/documentation/content/zh-cn/books/arch-handbook/partii.adoc b/documentation/content/zh-cn/books/arch-handbook/partii.adoc
index 8128b66462..f9c2a91a38 100644
--- a/documentation/content/zh-cn/books/arch-handbook/partii.adoc
+++ b/documentation/content/zh-cn/books/arch-handbook/partii.adoc
@@ -4,7 +4,7 @@ prev: books/arch-handbook/smp
next: books/arch-handbook/driverbasics
showBookMenu: true
weight: 10
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/partii/"
---
[[devicedrivers]]
diff --git a/documentation/content/zh-cn/books/arch-handbook/partiii.adoc b/documentation/content/zh-cn/books/arch-handbook/partiii.adoc
index 99c703f853..7a2ea372e1 100644
--- a/documentation/content/zh-cn/books/arch-handbook/partiii.adoc
+++ b/documentation/content/zh-cn/books/arch-handbook/partiii.adoc
@@ -4,7 +4,7 @@ prev: books/arch-handbook/pccard
next: books/arch-handbook/bibliography
showBookMenu: true
weight: 19
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/partiii/"
---
[[appendices]]
diff --git a/documentation/content/zh-cn/books/arch-handbook/pccard/_index.adoc b/documentation/content/zh-cn/books/arch-handbook/pccard/_index.adoc
index cfbcb29b72..52e3a8164f 100644
--- a/documentation/content/zh-cn/books/arch-handbook/pccard/_index.adoc
+++ b/documentation/content/zh-cn/books/arch-handbook/pccard/_index.adoc
@@ -4,7 +4,7 @@ prev: books/arch-handbook/sound
next: books/arch-handbook/partiii
showBookMenu: true
weight: 18
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/pccard/"
---
[[pccard]]
diff --git a/documentation/content/zh-cn/books/arch-handbook/pci/_index.adoc b/documentation/content/zh-cn/books/arch-handbook/pci/_index.adoc
index 76c793f2b0..2b1442aa4e 100644
--- a/documentation/content/zh-cn/books/arch-handbook/pci/_index.adoc
+++ b/documentation/content/zh-cn/books/arch-handbook/pci/_index.adoc
@@ -4,7 +4,7 @@ prev: books/arch-handbook/isa
next: books/arch-handbook/scsi
showBookMenu: true
weight: 13
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/pci/"
---
[[pci]]
diff --git a/documentation/content/zh-cn/books/arch-handbook/scsi/_index.adoc b/documentation/content/zh-cn/books/arch-handbook/scsi/_index.adoc
index a58f79d1b0..6bffa23f89 100644
--- a/documentation/content/zh-cn/books/arch-handbook/scsi/_index.adoc
+++ b/documentation/content/zh-cn/books/arch-handbook/scsi/_index.adoc
@@ -4,7 +4,7 @@ prev: books/arch-handbook/pci
next: books/arch-handbook/usb
showBookMenu: true
weight: 14
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/scsi/"
---
[[scsi]]
diff --git a/documentation/content/zh-cn/books/arch-handbook/smp/_index.adoc b/documentation/content/zh-cn/books/arch-handbook/smp/_index.adoc
index dc15fde476..683608393f 100644
--- a/documentation/content/zh-cn/books/arch-handbook/smp/_index.adoc
+++ b/documentation/content/zh-cn/books/arch-handbook/smp/_index.adoc
@@ -4,7 +4,7 @@ prev: books/arch-handbook/vm
next: books/arch-handbook/partii
showBookMenu: true
weight: 9
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/smp/"
---
[[smp]]
diff --git a/documentation/content/zh-cn/books/arch-handbook/sound/_index.adoc b/documentation/content/zh-cn/books/arch-handbook/sound/_index.adoc
index 7ddacdac5b..2c88f57cd0 100644
--- a/documentation/content/zh-cn/books/arch-handbook/sound/_index.adoc
+++ b/documentation/content/zh-cn/books/arch-handbook/sound/_index.adoc
@@ -4,7 +4,7 @@ prev: books/arch-handbook/newbus
next: books/arch-handbook/pccard
showBookMenu: true
weight: 17
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/sound/"
---
[[oss]]
diff --git a/documentation/content/zh-cn/books/arch-handbook/sysinit/_index.adoc b/documentation/content/zh-cn/books/arch-handbook/sysinit/_index.adoc
index 5db3e02ebf..f85b62d9bf 100644
--- a/documentation/content/zh-cn/books/arch-handbook/sysinit/_index.adoc
+++ b/documentation/content/zh-cn/books/arch-handbook/sysinit/_index.adoc
@@ -4,7 +4,7 @@ prev: books/arch-handbook/jail
next: books/arch-handbook/mac
showBookMenu: true
weight: 6
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/sysinit/"
---
[[sysinit]]
diff --git a/documentation/content/zh-cn/books/arch-handbook/usb/_index.adoc b/documentation/content/zh-cn/books/arch-handbook/usb/_index.adoc
index 12d64716f0..20b507cf7c 100644
--- a/documentation/content/zh-cn/books/arch-handbook/usb/_index.adoc
+++ b/documentation/content/zh-cn/books/arch-handbook/usb/_index.adoc
@@ -4,7 +4,7 @@ prev: books/arch-handbook/scsi
next: books/arch-handbook/newbus
showBookMenu: true
weight: 15
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/usb/"
---
[[usb]]
diff --git a/documentation/content/zh-cn/books/arch-handbook/vm/_index.adoc b/documentation/content/zh-cn/books/arch-handbook/vm/_index.adoc
index d38e9228b9..32b40be4da 100644
--- a/documentation/content/zh-cn/books/arch-handbook/vm/_index.adoc
+++ b/documentation/content/zh-cn/books/arch-handbook/vm/_index.adoc
@@ -4,7 +4,7 @@ prev: books/arch-handbook/mac
next: books/arch-handbook/smp
showBookMenu: true
weight: 8
-path: "/books/arch-handbook/"
+path: "/books/arch-handbook/vm/"
---
[[vm]]
diff --git a/documentation/content/zh-cn/books/handbook/advanced-networking/_index.adoc b/documentation/content/zh-cn/books/handbook/advanced-networking/_index.adoc
index 644db38439..e78c2a26e2 100644
--- a/documentation/content/zh-cn/books/handbook/advanced-networking/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/advanced-networking/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/firewalls
next: books/handbook/partv
showBookMenu: true
weight: 37
-path: "/books/handbook/"
+path: "/books/handbook/advanced-networking/"
---
[[advanced-networking]]
diff --git a/documentation/content/zh-cn/books/handbook/audit/_index.adoc b/documentation/content/zh-cn/books/handbook/audit/_index.adoc
index d70f378e4f..4fa7aaf792 100644
--- a/documentation/content/zh-cn/books/handbook/audit/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/audit/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mac
next: books/handbook/disks
showBookMenu: true
weight: 22
-path: "/books/handbook/"
+path: "/books/handbook/audit/"
---
[[audit]]
diff --git a/documentation/content/zh-cn/books/handbook/basics/_index.adoc b/documentation/content/zh-cn/books/handbook/basics/_index.adoc
index d0c19e6b6a..22d6249366 100644
--- a/documentation/content/zh-cn/books/handbook/basics/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/basics/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/install
next: books/handbook/ports
showBookMenu: true
weight: 6
-path: "/books/handbook/"
+path: "/books/handbook/basics/"
---
[[basics]]
diff --git a/documentation/content/zh-cn/books/handbook/bibliography/_index.adoc b/documentation/content/zh-cn/books/handbook/bibliography/_index.adoc
index f455ba6efb..dbd4223fdb 100644
--- a/documentation/content/zh-cn/books/handbook/bibliography/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/bibliography/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mirrors
next: books/handbook/eresources
showBookMenu: true
weight: 40
-path: "/books/handbook/"
+path: "/books/handbook/bibliography/"
---
[appendix]
diff --git a/documentation/content/zh-cn/books/handbook/boot/_index.adoc b/documentation/content/zh-cn/books/handbook/boot/_index.adoc
index 80cb0db897..2fddb10e20 100644
--- a/documentation/content/zh-cn/books/handbook/boot/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/boot/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/config
next: books/handbook/users
showBookMenu: true
weight: 17
-path: "/books/handbook/"
+path: "/books/handbook/boot/"
---
[[boot]]
diff --git a/documentation/content/zh-cn/books/handbook/bsdinstall/_index.adoc b/documentation/content/zh-cn/books/handbook/bsdinstall/_index.adoc
index c84d811d9c..42b72f5b7b 100644
--- a/documentation/content/zh-cn/books/handbook/bsdinstall/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/bsdinstall/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/install
next: books/handbook/basics
showBookMenu: true
weight: 5
-path: "/books/handbook/"
+path: "/books/handbook/bsdinstall/"
---
[[bsdinstall]]
diff --git a/documentation/content/zh-cn/books/handbook/config/_index.adoc b/documentation/content/zh-cn/books/handbook/config/_index.adoc
index dbfa9ed88d..aa934308b2 100644
--- a/documentation/content/zh-cn/books/handbook/config/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/config/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partiii
next: books/handbook/boot
showBookMenu: true
weight: 16
-path: "/books/handbook/"
+path: "/books/handbook/config/"
---
[[config-tuning]]
@@ -1385,6 +1385,6 @@ debug.acpi.level="ACPI_LV_ERROR"
* The {freebsd-acpi}
* ACPI 邮件列表存档 http://lists.freebsd.org/pipermail/freebsd-acpi/[http://lists.freebsd.org/pipermail/freebsd-acpi/]
* 旧的 ACPI 邮件列表存档 http://home.jp.FreeBSD.org/mail-list/acpi-jp/[http://home.jp.FreeBSD.org/mail-list/acpi-jp/]
-* The ACPI 2.0 标准 http://acpi.info/spec.htm[http://acpi.info/spec.htm]
+* The https://uefi.org/specifications#ACPI[ACPI 标准]
* FreeBSD 手册页: man:acpi[4], man:acpi_thermal[4], man:acpidump[8], man:iasl[8], man:acpidb[8]
* http://www.cpqlinux.com/acpi-howto.html#fix_broken_dsdt[DSDT 调试资源]. (使用 Compaq 作为例子但通常情况下都很有用。)
diff --git a/documentation/content/zh-cn/books/handbook/cutting-edge/_index.adoc b/documentation/content/zh-cn/books/handbook/cutting-edge/_index.adoc
index c02d99f614..b6e034d6fb 100644
--- a/documentation/content/zh-cn/books/handbook/cutting-edge/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/cutting-edge/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/l10n
next: books/handbook/dtrace
showBookMenu: true
weight: 29
-path: "/books/handbook/"
+path: "/books/handbook/cutting-edge/"
---
[[updating-upgrading]]
diff --git a/documentation/content/zh-cn/books/handbook/desktop/_index.adoc b/documentation/content/zh-cn/books/handbook/desktop/_index.adoc
index c23d29cdee..24330363ef 100644
--- a/documentation/content/zh-cn/books/handbook/desktop/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/desktop/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partii
next: books/handbook/multimedia
showBookMenu: true
weight: 10
-path: "/books/handbook/"
+path: "/books/handbook/desktop/"
---
[[desktop]]
diff --git a/documentation/content/zh-cn/books/handbook/disks/_index.adoc b/documentation/content/zh-cn/books/handbook/disks/_index.adoc
index edf653b17a..772a2a8aa4 100644
--- a/documentation/content/zh-cn/books/handbook/disks/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/disks/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/audit
next: books/handbook/geom
showBookMenu: true
weight: 23
-path: "/books/handbook/"
+path: "/books/handbook/disks/"
---
[[disks]]
diff --git a/documentation/content/zh-cn/books/handbook/dtrace/_index.adoc b/documentation/content/zh-cn/books/handbook/dtrace/_index.adoc
index 1ef8582582..121e8f1d15 100644
--- a/documentation/content/zh-cn/books/handbook/dtrace/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/dtrace/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/cutting-edge
next: books/handbook/partiv
showBookMenu: true
weight: 30
-path: "/books/handbook/"
+path: "/books/handbook/dtrace/"
---
[[dtrace]]
diff --git a/documentation/content/zh-cn/books/handbook/eresources/_index.adoc b/documentation/content/zh-cn/books/handbook/eresources/_index.adoc
index d091511777..8bc2858d21 100644
--- a/documentation/content/zh-cn/books/handbook/eresources/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/eresources/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/bibliography
next: books/handbook/pgpkeys
showBookMenu: true
weight: 41
-path: "/books/handbook/"
+path: "/books/handbook/eresources/"
---
[appendix]
diff --git a/documentation/content/zh-cn/books/handbook/filesystems/_index.adoc b/documentation/content/zh-cn/books/handbook/filesystems/_index.adoc
index 8e9ffc2538..f5d21d614d 100644
--- a/documentation/content/zh-cn/books/handbook/filesystems/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/filesystems/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/geom
next: books/handbook/vinum
showBookMenu: true
weight: 25
-path: "/books/handbook/"
+path: "/books/handbook/filesystems/"
---
[[filesystems]]
diff --git a/documentation/content/zh-cn/books/handbook/firewalls/_index.adoc b/documentation/content/zh-cn/books/handbook/firewalls/_index.adoc
index bf8441a917..5e0efc211e 100644
--- a/documentation/content/zh-cn/books/handbook/firewalls/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/firewalls/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/network-servers
next: books/handbook/advanced-networking
showBookMenu: true
weight: 36
-path: "/books/handbook/"
+path: "/books/handbook/firewalls/"
---
[[firewalls]]
diff --git a/documentation/content/zh-cn/books/handbook/geom/_index.adoc b/documentation/content/zh-cn/books/handbook/geom/_index.adoc
index d521c64116..782da399da 100644
--- a/documentation/content/zh-cn/books/handbook/geom/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/geom/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/disks
next: books/handbook/filesystems
showBookMenu: true
weight: 24
-path: "/books/handbook/"
+path: "/books/handbook/geom/"
---
[[geom]]
diff --git a/documentation/content/zh-cn/books/handbook/install/_index.adoc b/documentation/content/zh-cn/books/handbook/install/_index.adoc
index 5a417c2859..83ddf54bde 100644
--- a/documentation/content/zh-cn/books/handbook/install/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/install/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/introduction
next: books/handbook/bsdinstall
showBookMenu: true
weight: 4
-path: "/books/handbook/"
+path: "/books/handbook/install/"
---
[[install]]
diff --git a/documentation/content/zh-cn/books/handbook/introduction/_index.adoc b/documentation/content/zh-cn/books/handbook/introduction/_index.adoc
index 2ef0d8ed24..cda4791c26 100644
--- a/documentation/content/zh-cn/books/handbook/introduction/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/introduction/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/parti
next: books/handbook/install
showBookMenu: true
weight: 3
-path: "/books/handbook/"
+path: "/books/handbook/introduction/"
---
[[introduction]]
diff --git a/documentation/content/zh-cn/books/handbook/jails/_index.adoc b/documentation/content/zh-cn/books/handbook/jails/_index.adoc
index 5ba1ed489a..f1ab033a4c 100644
--- a/documentation/content/zh-cn/books/handbook/jails/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/jails/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/security
next: books/handbook/mac
showBookMenu: true
weight: 20
-path: "/books/handbook/"
+path: "/books/handbook/jails/"
---
[[jails]]
diff --git a/documentation/content/zh-cn/books/handbook/kernelconfig/_index.adoc b/documentation/content/zh-cn/books/handbook/kernelconfig/_index.adoc
index 8dcf035bdd..b16c2d3e0e 100644
--- a/documentation/content/zh-cn/books/handbook/kernelconfig/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/kernelconfig/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/multimedia
next: books/handbook/printing
showBookMenu: true
weight: 12
-path: "/books/handbook/"
+path: "/books/handbook/kernelconfig/"
---
[[kernelconfig]]
diff --git a/documentation/content/zh-cn/books/handbook/l10n/_index.adoc b/documentation/content/zh-cn/books/handbook/l10n/_index.adoc
index 39a7d77af1..a986a6d32b 100644
--- a/documentation/content/zh-cn/books/handbook/l10n/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/l10n/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/virtualization
next: books/handbook/cutting-edge
showBookMenu: true
weight: 28
-path: "/books/handbook/"
+path: "/books/handbook/l10n/"
---
[[l10n]]
diff --git a/documentation/content/zh-cn/books/handbook/linuxemu/_index.adoc b/documentation/content/zh-cn/books/handbook/linuxemu/_index.adoc
index d24528468f..cadd6238f3 100644
--- a/documentation/content/zh-cn/books/handbook/linuxemu/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/linuxemu/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/printing
next: books/handbook/partiii
showBookMenu: true
weight: 14
-path: "/books/handbook/"
+path: "/books/handbook/linuxemu/"
---
[[linuxemu]]
diff --git a/documentation/content/zh-cn/books/handbook/mac/_index.adoc b/documentation/content/zh-cn/books/handbook/mac/_index.adoc
index d57c7b59a9..b90a6b4f6c 100644
--- a/documentation/content/zh-cn/books/handbook/mac/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/mac/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/jails
next: books/handbook/audit
showBookMenu: true
weight: 21
-path: "/books/handbook/"
+path: "/books/handbook/mac/"
---
[[mac]]
diff --git a/documentation/content/zh-cn/books/handbook/mail/_index.adoc b/documentation/content/zh-cn/books/handbook/mail/_index.adoc
index 073bb001fc..ffa5e52793 100644
--- a/documentation/content/zh-cn/books/handbook/mail/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/mail/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/ppp-and-slip
next: books/handbook/network-servers
showBookMenu: true
weight: 34
-path: "/books/handbook/"
+path: "/books/handbook/mail/"
---
[[mail]]
diff --git a/documentation/content/zh-cn/books/handbook/mirrors/_index.adoc b/documentation/content/zh-cn/books/handbook/mirrors/_index.adoc
index e99d72cbac..e5772a1dfd 100644
--- a/documentation/content/zh-cn/books/handbook/mirrors/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/mirrors/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partv
next: books/handbook/bibliography
showBookMenu: true
weight: 39
-path: "/books/handbook/"
+path: "/books/handbook/mirrors/"
---
[appendix]
diff --git a/documentation/content/zh-cn/books/handbook/multimedia/_index.adoc b/documentation/content/zh-cn/books/handbook/multimedia/_index.adoc
index aaf5e19d08..945c7621f1 100644
--- a/documentation/content/zh-cn/books/handbook/multimedia/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/multimedia/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/desktop
next: books/handbook/kernelconfig
showBookMenu: true
weight: 11
-path: "/books/handbook/"
+path: "/books/handbook/multimedia/"
---
[[multimedia]]
diff --git a/documentation/content/zh-cn/books/handbook/network-servers/_index.adoc b/documentation/content/zh-cn/books/handbook/network-servers/_index.adoc
index 52b2877f50..37d1f00070 100644
--- a/documentation/content/zh-cn/books/handbook/network-servers/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/network-servers/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mail
next: books/handbook/firewalls
showBookMenu: true
weight: 35
-path: "/books/handbook/"
+path: "/books/handbook/network-servers/"
---
[[network-servers]]
diff --git a/documentation/content/zh-cn/books/handbook/parti.adoc b/documentation/content/zh-cn/books/handbook/parti.adoc
index 1499a49cee..1982abfe34 100644
--- a/documentation/content/zh-cn/books/handbook/parti.adoc
+++ b/documentation/content/zh-cn/books/handbook/parti.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/preface
next: books/handbook/introduction
showBookMenu: true
weight: 2
-path: "/books/handbook/"
+path: "/books/handbook/parti/"
---
[[getting-started]]
diff --git a/documentation/content/zh-cn/books/handbook/partii.adoc b/documentation/content/zh-cn/books/handbook/partii.adoc
index 02a66cdc23..9640e87334 100644
--- a/documentation/content/zh-cn/books/handbook/partii.adoc
+++ b/documentation/content/zh-cn/books/handbook/partii.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/x11
next: books/handbook/desktop
showBookMenu: true
weight: 9
-path: "/books/handbook/"
+path: "/books/handbook/partii/"
---
[[common-tasks]]
diff --git a/documentation/content/zh-cn/books/handbook/partiii.adoc b/documentation/content/zh-cn/books/handbook/partiii.adoc
index c1c20f8991..1615883b27 100644
--- a/documentation/content/zh-cn/books/handbook/partiii.adoc
+++ b/documentation/content/zh-cn/books/handbook/partiii.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/linuxemu
next: books/handbook/config
showBookMenu: true
weight: 15
-path: "/books/handbook/"
+path: "/books/handbook/partiii/"
---
[[system-administration]]
diff --git a/documentation/content/zh-cn/books/handbook/partiv.adoc b/documentation/content/zh-cn/books/handbook/partiv.adoc
index e033b56173..872a50ae99 100644
--- a/documentation/content/zh-cn/books/handbook/partiv.adoc
+++ b/documentation/content/zh-cn/books/handbook/partiv.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/dtrace
next: books/handbook/serialcomms
showBookMenu: true
weight: 31
-path: "/books/handbook/"
+path: "/books/handbook/partiv/"
---
[[network-communication]]
diff --git a/documentation/content/zh-cn/books/handbook/partv.adoc b/documentation/content/zh-cn/books/handbook/partv.adoc
index 4728c6245d..2a03a71a8b 100644
--- a/documentation/content/zh-cn/books/handbook/partv.adoc
+++ b/documentation/content/zh-cn/books/handbook/partv.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/advanced-networking
next: books/handbook/mirrors
showBookMenu: true
weight: 38
-path: "/books/handbook/"
+path: "/books/handbook/partv/"
---
[[appendices]]
diff --git a/documentation/content/zh-cn/books/handbook/pgpkeys/_index.adoc b/documentation/content/zh-cn/books/handbook/pgpkeys/_index.adoc
index f75750e3c6..a6fc373957 100644
--- a/documentation/content/zh-cn/books/handbook/pgpkeys/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/pgpkeys/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/eresources
next: books/handbook/freebsd-glossary
showBookMenu: true
weight: 42
-path: "/books/handbook/"
+path: "/books/handbook/pgpkeys/"
---
[appendix]
@@ -59,9 +59,6 @@ endif::[]
=== {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/zh-cn/books/handbook/ports/_index.adoc b/documentation/content/zh-cn/books/handbook/ports/_index.adoc
index ef3b9f42de..4209643037 100644
--- a/documentation/content/zh-cn/books/handbook/ports/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/ports/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/basics
next: books/handbook/x11
showBookMenu: true
weight: 7
-path: "/books/handbook/"
+path: "/books/handbook/ports/"
---
[[ports]]
diff --git a/documentation/content/zh-cn/books/handbook/ppp-and-slip/_index.adoc b/documentation/content/zh-cn/books/handbook/ppp-and-slip/_index.adoc
index 55915b5e36..c3ac22ae48 100644
--- a/documentation/content/zh-cn/books/handbook/ppp-and-slip/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/ppp-and-slip/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/serialcomms
next: books/handbook/mail
showBookMenu: true
weight: 33
-path: "/books/handbook/"
+path: "/books/handbook/ppp-and-slip/"
---
[[ppp-and-slip]]
diff --git a/documentation/content/zh-cn/books/handbook/preface/_index.adoc b/documentation/content/zh-cn/books/handbook/preface/_index.adoc
index f377f438b3..27402ee6b3 100644
--- a/documentation/content/zh-cn/books/handbook/preface/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/preface/_index.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/
next: books/handbook/parti
showBookMenu: true
weight: 1
-path: "/books/handbook/"
+path: "/books/handbook/preface/"
---
[preface]
diff --git a/documentation/content/zh-cn/books/handbook/printing/_index.adoc b/documentation/content/zh-cn/books/handbook/printing/_index.adoc
index 44239be43d..8175314fe8 100644
--- a/documentation/content/zh-cn/books/handbook/printing/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/printing/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/kernelconfig
next: books/handbook/linuxemu
showBookMenu: true
weight: 13
-path: "/books/handbook/"
+path: "/books/handbook/printing/"
---
[[printing]]
diff --git a/documentation/content/zh-cn/books/handbook/security/_index.adoc b/documentation/content/zh-cn/books/handbook/security/_index.adoc
index b925cd165f..fd039ac4d1 100644
--- a/documentation/content/zh-cn/books/handbook/security/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/security/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/users
next: books/handbook/jails
showBookMenu: true
weight: 19
-path: "/books/handbook/"
+path: "/books/handbook/security/"
---
[[security]]
diff --git a/documentation/content/zh-cn/books/handbook/serialcomms/_index.adoc b/documentation/content/zh-cn/books/handbook/serialcomms/_index.adoc
index e7e1f68e1b..02b59a2737 100644
--- a/documentation/content/zh-cn/books/handbook/serialcomms/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/serialcomms/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partiv
next: books/handbook/ppp-and-slip
showBookMenu: true
weight: 32
-path: "/books/handbook/"
+path: "/books/handbook/serialcomms/"
---
[[serialcomms]]
diff --git a/documentation/content/zh-cn/books/handbook/users/_index.adoc b/documentation/content/zh-cn/books/handbook/users/_index.adoc
index 9ed98cdde5..0636e929c5 100644
--- a/documentation/content/zh-cn/books/handbook/users/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/users/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/boot
next: books/handbook/security
showBookMenu: true
weight: 18
-path: "/books/handbook/"
+path: "/books/handbook/users/"
---
[[users]]
diff --git a/documentation/content/zh-cn/books/handbook/vinum/_index.adoc b/documentation/content/zh-cn/books/handbook/vinum/_index.adoc
index 929a62fa77..2d592d2ede 100644
--- a/documentation/content/zh-cn/books/handbook/vinum/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/vinum/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/filesystems
next: books/handbook/virtualization
showBookMenu: true
weight: 26
-path: "/books/handbook/"
+path: "/books/handbook/vinum/"
---
[[vinum-vinum]]
diff --git a/documentation/content/zh-cn/books/handbook/virtualization/_index.adoc b/documentation/content/zh-cn/books/handbook/virtualization/_index.adoc
index 95342bc41f..85cbc7fe78 100644
--- a/documentation/content/zh-cn/books/handbook/virtualization/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/virtualization/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/vinum
next: books/handbook/l10n
showBookMenu: true
weight: 27
-path: "/books/handbook/"
+path: "/books/handbook/virtualization/"
---
[[virtualization]]
diff --git a/documentation/content/zh-cn/books/handbook/x11/_index.adoc b/documentation/content/zh-cn/books/handbook/x11/_index.adoc
index 7309c54afe..f2f9e0daf0 100644
--- a/documentation/content/zh-cn/books/handbook/x11/_index.adoc
+++ b/documentation/content/zh-cn/books/handbook/x11/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/ports
next: books/handbook/partii
showBookMenu: true
weight: 8
-path: "/books/handbook/"
+path: "/books/handbook/x11/"
---
[[x11]]
diff --git a/documentation/content/zh-cn/books/porters-handbook/keeping-up/_index.adoc b/documentation/content/zh-cn/books/porters-handbook/keeping-up/_index.adoc
index c505144601..1c9791cf47 100644
--- a/documentation/content/zh-cn/books/porters-handbook/keeping-up/_index.adoc
+++ b/documentation/content/zh-cn/books/porters-handbook/keeping-up/_index.adoc
@@ -3,7 +3,7 @@ title: 第 14 章 保持同步
prev: books/porters-handbook/porting-samplem
showBookMenu: true
weight: 14
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/keeping-up/"
---
[[keeping-up]]
diff --git a/documentation/content/zh-cn/books/porters-handbook/makefile/_index.adoc b/documentation/content/zh-cn/books/porters-handbook/makefile/_index.adoc
index 75b5b9f239..4e62f674ce 100644
--- a/documentation/content/zh-cn/books/porters-handbook/makefile/_index.adoc
+++ b/documentation/content/zh-cn/books/porters-handbook/makefile/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/slow
next: books/porters-handbook/special
showBookMenu: true
weight: 5
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/makefile/"
---
[[makefile]]
diff --git a/documentation/content/zh-cn/books/porters-handbook/own-port/_index.adoc b/documentation/content/zh-cn/books/porters-handbook/own-port/_index.adoc
index 3cb04d5cbd..3f09d54bcc 100644
--- a/documentation/content/zh-cn/books/porters-handbook/own-port/_index.adoc
+++ b/documentation/content/zh-cn/books/porters-handbook/own-port/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/why-port
next: books/porters-handbook/quick-porting
showBookMenu: true
weight: 2
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/own-port/"
---
[[own-port]]
diff --git a/documentation/content/zh-cn/books/porters-handbook/pkg-files/_index.adoc b/documentation/content/zh-cn/books/porters-handbook/pkg-files/_index.adoc
index adc7b2bdcb..e44206577f 100644
--- a/documentation/content/zh-cn/books/porters-handbook/pkg-files/_index.adoc
+++ b/documentation/content/zh-cn/books/porters-handbook/pkg-files/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/plist
next: books/porters-handbook/testing
showBookMenu: true
weight: 8
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/pkg-files/"
---
[[pkg-files]]
diff --git a/documentation/content/zh-cn/books/porters-handbook/plist/_index.adoc b/documentation/content/zh-cn/books/porters-handbook/plist/_index.adoc
index 838a2d7e3f..ba3c579e61 100644
--- a/documentation/content/zh-cn/books/porters-handbook/plist/_index.adoc
+++ b/documentation/content/zh-cn/books/porters-handbook/plist/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/special
next: books/porters-handbook/pkg-files
showBookMenu: true
weight: 7
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/plist/"
---
[[plist]]
diff --git a/documentation/content/zh-cn/books/porters-handbook/port-upgrading/_index.adoc b/documentation/content/zh-cn/books/porters-handbook/port-upgrading/_index.adoc
index 6b0e1c31b1..b66c469a61 100644
--- a/documentation/content/zh-cn/books/porters-handbook/port-upgrading/_index.adoc
+++ b/documentation/content/zh-cn/books/porters-handbook/port-upgrading/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/testing
next: books/porters-handbook/security
showBookMenu: true
weight: 10
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/port-upgrading/"
---
[[port-upgrading]]
diff --git a/documentation/content/zh-cn/books/porters-handbook/porting-dads/_index.adoc b/documentation/content/zh-cn/books/porters-handbook/porting-dads/_index.adoc
index b459f02a7f..8f1218d401 100644
--- a/documentation/content/zh-cn/books/porters-handbook/porting-dads/_index.adoc
+++ b/documentation/content/zh-cn/books/porters-handbook/porting-dads/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/security
next: books/porters-handbook/porting-samplem
showBookMenu: true
weight: 12
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/porting-dads/"
---
[[porting-dads]]
diff --git a/documentation/content/zh-cn/books/porters-handbook/porting-samplem/_index.adoc b/documentation/content/zh-cn/books/porters-handbook/porting-samplem/_index.adoc
index a2f8eb5053..fe294a557d 100644
--- a/documentation/content/zh-cn/books/porters-handbook/porting-samplem/_index.adoc
+++ b/documentation/content/zh-cn/books/porters-handbook/porting-samplem/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/porting-dads
next: books/porters-handbook/keeping-up
showBookMenu: true
weight: 13
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/porting-samplem/"
---
[[porting-samplem]]
diff --git a/documentation/content/zh-cn/books/porters-handbook/quick-porting/_index.adoc b/documentation/content/zh-cn/books/porters-handbook/quick-porting/_index.adoc
index bd4abe4521..c041c0b458 100644
--- a/documentation/content/zh-cn/books/porters-handbook/quick-porting/_index.adoc
+++ b/documentation/content/zh-cn/books/porters-handbook/quick-porting/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/own-port
next: books/porters-handbook/slow
showBookMenu: true
weight: 3
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/quick-porting/"
---
[[quick-porting]]
diff --git a/documentation/content/zh-cn/books/porters-handbook/security/_index.adoc b/documentation/content/zh-cn/books/porters-handbook/security/_index.adoc
index a8f39f3e5c..6814f31745 100644
--- a/documentation/content/zh-cn/books/porters-handbook/security/_index.adoc
+++ b/documentation/content/zh-cn/books/porters-handbook/security/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/port-upgrading
next: books/porters-handbook/porting-dads
showBookMenu: true
weight: 11
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/security/"
---
[[security]]
diff --git a/documentation/content/zh-cn/books/porters-handbook/slow/_index.adoc b/documentation/content/zh-cn/books/porters-handbook/slow/_index.adoc
index db536d9e5a..84e54a19e0 100644
--- a/documentation/content/zh-cn/books/porters-handbook/slow/_index.adoc
+++ b/documentation/content/zh-cn/books/porters-handbook/slow/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/quick-porting
next: books/porters-handbook/makefile
showBookMenu: true
weight: 4
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/slow/"
---
[[slow]]
diff --git a/documentation/content/zh-cn/books/porters-handbook/special/_index.adoc b/documentation/content/zh-cn/books/porters-handbook/special/_index.adoc
index a98f1ba4d0..1cc3698735 100644
--- a/documentation/content/zh-cn/books/porters-handbook/special/_index.adoc
+++ b/documentation/content/zh-cn/books/porters-handbook/special/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/makefile
next: books/porters-handbook/plist
showBookMenu: true
weight: 6
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/special/"
---
[[special]]
diff --git a/documentation/content/zh-cn/books/porters-handbook/testing/_index.adoc b/documentation/content/zh-cn/books/porters-handbook/testing/_index.adoc
index 76942b21e9..a08fc98e2d 100644
--- a/documentation/content/zh-cn/books/porters-handbook/testing/_index.adoc
+++ b/documentation/content/zh-cn/books/porters-handbook/testing/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/pkg-files
next: books/porters-handbook/port-upgrading
showBookMenu: true
weight: 9
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/testing/"
---
[[testing]]
diff --git a/documentation/content/zh-cn/books/porters-handbook/why-port/_index.adoc b/documentation/content/zh-cn/books/porters-handbook/why-port/_index.adoc
index 85ed298e5d..d0cac55a3e 100644
--- a/documentation/content/zh-cn/books/porters-handbook/why-port/_index.adoc
+++ b/documentation/content/zh-cn/books/porters-handbook/why-port/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/
next: books/porters-handbook/own-port
showBookMenu: true
weight: 1
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/why-port/"
---
[[why-port]]
diff --git a/documentation/content/zh-tw/books/developers-handbook/bibliography/_index.adoc b/documentation/content/zh-tw/books/developers-handbook/bibliography/_index.adoc
index 442f8b345a..f93e2197cf 100644
--- a/documentation/content/zh-tw/books/developers-handbook/bibliography/_index.adoc
+++ b/documentation/content/zh-tw/books/developers-handbook/bibliography/_index.adoc
@@ -3,7 +3,7 @@ title: 附錄
prev: books/developers-handbook/partv
showBookMenu: true
weight: 17
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/bibliography/"
---
[bibliography]
diff --git a/documentation/content/zh-tw/books/developers-handbook/introduction/_index.adoc b/documentation/content/zh-tw/books/developers-handbook/introduction/_index.adoc
index 8fcb16070e..3cc3fbfd4e 100644
--- a/documentation/content/zh-tw/books/developers-handbook/introduction/_index.adoc
+++ b/documentation/content/zh-tw/books/developers-handbook/introduction/_index.adoc
@@ -7,7 +7,7 @@ prev: books/developers-handbook/parti
next: books/developers-handbook/tools
showBookMenu: true
weight: 2
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/introduction/"
---
[[introduction]]
diff --git a/documentation/content/zh-tw/books/developers-handbook/ipv6/_index.adoc b/documentation/content/zh-tw/books/developers-handbook/ipv6/_index.adoc
index f1c02793b1..60bf3b80d0 100644
--- a/documentation/content/zh-tw/books/developers-handbook/ipv6/_index.adoc
+++ b/documentation/content/zh-tw/books/developers-handbook/ipv6/_index.adoc
@@ -6,7 +6,7 @@ prev: books/developers-handbook/sockets
next: books/developers-handbook/partiii
showBookMenu: true
weight: 10
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/ipv6/"
---
[[ipv6]]
diff --git a/documentation/content/zh-tw/books/developers-handbook/kernelbuild/_index.adoc b/documentation/content/zh-tw/books/developers-handbook/kernelbuild/_index.adoc
index d7782a9e42..7c76cec0b3 100644
--- a/documentation/content/zh-tw/books/developers-handbook/kernelbuild/_index.adoc
+++ b/documentation/content/zh-tw/books/developers-handbook/kernelbuild/_index.adoc
@@ -4,7 +4,7 @@ prev: books/developers-handbook/partiii
next: books/developers-handbook/kerneldebug
showBookMenu: true
weight: 12
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/kernelbuild/"
---
[[kernelbuild]]
diff --git a/documentation/content/zh-tw/books/developers-handbook/kerneldebug/_index.adoc b/documentation/content/zh-tw/books/developers-handbook/kerneldebug/_index.adoc
index 94d59be2da..441b7dde82 100644
--- a/documentation/content/zh-tw/books/developers-handbook/kerneldebug/_index.adoc
+++ b/documentation/content/zh-tw/books/developers-handbook/kerneldebug/_index.adoc
@@ -8,7 +8,7 @@ prev: books/developers-handbook/kernelbuild
next: books/developers-handbook/partiv
showBookMenu: true
weight: 13
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/kerneldebug/"
---
[[kerneldebug]]
diff --git a/documentation/content/zh-tw/books/developers-handbook/l10n/_index.adoc b/documentation/content/zh-tw/books/developers-handbook/l10n/_index.adoc
index 0848105b58..414c014759 100644
--- a/documentation/content/zh-tw/books/developers-handbook/l10n/_index.adoc
+++ b/documentation/content/zh-tw/books/developers-handbook/l10n/_index.adoc
@@ -4,7 +4,7 @@ prev: books/developers-handbook/secure
next: books/developers-handbook/policies
showBookMenu: true
weight: 5
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/l10n/"
---
[[l10n]]
diff --git a/documentation/content/zh-tw/books/developers-handbook/parti.adoc b/documentation/content/zh-tw/books/developers-handbook/parti.adoc
index 72a08e0d9d..783f5e2200 100644
--- a/documentation/content/zh-tw/books/developers-handbook/parti.adoc
+++ b/documentation/content/zh-tw/books/developers-handbook/parti.adoc
@@ -4,7 +4,7 @@ prev: books/developers-handbook
next: books/developers-handbook/introduction
showBookMenu: true
weight: 1
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/parti/"
---
[[basics]]
diff --git a/documentation/content/zh-tw/books/developers-handbook/partii.adoc b/documentation/content/zh-tw/books/developers-handbook/partii.adoc
index 03a58d6aef..80a5302492 100644
--- a/documentation/content/zh-tw/books/developers-handbook/partii.adoc
+++ b/documentation/content/zh-tw/books/developers-handbook/partii.adoc
@@ -4,7 +4,7 @@ prev: books/developers-handbook/testing
next: books/developers-handbook/sockets
showBookMenu: true
weight: 8
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/partii/"
---
[[ipc]]
diff --git a/documentation/content/zh-tw/books/developers-handbook/partiii.adoc b/documentation/content/zh-tw/books/developers-handbook/partiii.adoc
index 3ea3bb3b6c..b45141077b 100644
--- a/documentation/content/zh-tw/books/developers-handbook/partiii.adoc
+++ b/documentation/content/zh-tw/books/developers-handbook/partiii.adoc
@@ -4,7 +4,7 @@ prev: books/developers-handbook/ipv6
next: books/developers-handbook/kernelbuild
showBookMenu: true
weight: 11
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/partiii/"
---
[[kernel]]
diff --git a/documentation/content/zh-tw/books/developers-handbook/partiv.adoc b/documentation/content/zh-tw/books/developers-handbook/partiv.adoc
index e868878d34..f0a5f23d50 100644
--- a/documentation/content/zh-tw/books/developers-handbook/partiv.adoc
+++ b/documentation/content/zh-tw/books/developers-handbook/partiv.adoc
@@ -4,7 +4,7 @@ prev: books/developers-handbook/kerneldebug
next: books/developers-handbook/x86
showBookMenu: true
weight: 14
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/partiv/"
---
[[architectures]]
diff --git a/documentation/content/zh-tw/books/developers-handbook/partv.adoc b/documentation/content/zh-tw/books/developers-handbook/partv.adoc
index 8c1d1474e1..4794f4bd89 100644
--- a/documentation/content/zh-tw/books/developers-handbook/partv.adoc
+++ b/documentation/content/zh-tw/books/developers-handbook/partv.adoc
@@ -4,7 +4,7 @@ prev: books/developers-handbook/x86
next: books/developers-handbook/bibliography
showBookMenu: true
weight: 16
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/partv/"
---
[[appendices]]
diff --git a/documentation/content/zh-tw/books/developers-handbook/policies/_index.adoc b/documentation/content/zh-tw/books/developers-handbook/policies/_index.adoc
index 3109411508..d4e2669f5a 100644
--- a/documentation/content/zh-tw/books/developers-handbook/policies/_index.adoc
+++ b/documentation/content/zh-tw/books/developers-handbook/policies/_index.adoc
@@ -7,7 +7,7 @@ prev: books/developers-handbook/l10n
next: books/developers-handbook/testing
showBookMenu: true
weight: 6
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/policies/"
---
[[policies]]
diff --git a/documentation/content/zh-tw/books/developers-handbook/secure/_index.adoc b/documentation/content/zh-tw/books/developers-handbook/secure/_index.adoc
index fd5b8dfe8d..36f47601ea 100644
--- a/documentation/content/zh-tw/books/developers-handbook/secure/_index.adoc
+++ b/documentation/content/zh-tw/books/developers-handbook/secure/_index.adoc
@@ -6,7 +6,7 @@ prev: books/developers-handbook/tools
next: books/developers-handbook/l10n
showBookMenu: true
weight: 4
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/secure/"
---
[[secure]]
diff --git a/documentation/content/zh-tw/books/developers-handbook/sockets/_index.adoc b/documentation/content/zh-tw/books/developers-handbook/sockets/_index.adoc
index 0083f0747c..f0d0d03677 100644
--- a/documentation/content/zh-tw/books/developers-handbook/sockets/_index.adoc
+++ b/documentation/content/zh-tw/books/developers-handbook/sockets/_index.adoc
@@ -6,7 +6,7 @@ prev: books/developers-handbook/partii
next: books/developers-handbook/ipv6
showBookMenu: true
weight: 9
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/sockets/"
---
[[sockets]]
diff --git a/documentation/content/zh-tw/books/developers-handbook/testing/_index.adoc b/documentation/content/zh-tw/books/developers-handbook/testing/_index.adoc
index 036a191084..72c5f3f28c 100644
--- a/documentation/content/zh-tw/books/developers-handbook/testing/_index.adoc
+++ b/documentation/content/zh-tw/books/developers-handbook/testing/_index.adoc
@@ -4,7 +4,7 @@ prev: books/developers-handbook/policies
next: books/developers-handbook/partii
showBookMenu: true
weight: 7
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/testing/"
---
[[testing]]
diff --git a/documentation/content/zh-tw/books/developers-handbook/tools/_index.adoc b/documentation/content/zh-tw/books/developers-handbook/tools/_index.adoc
index ce490709d9..bddf68a885 100644
--- a/documentation/content/zh-tw/books/developers-handbook/tools/_index.adoc
+++ b/documentation/content/zh-tw/books/developers-handbook/tools/_index.adoc
@@ -7,7 +7,7 @@ prev: books/developers-handbook/introduction
next: books/developers-handbook/secure
showBookMenu: true
weight: 3
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/tools/"
---
[[tools]]
@@ -792,9 +792,12 @@ The `lldb` command displays the stack frame every time we go into or out of a fu
==== Examining a Core File with lldb
-A core file is basically a file which contains the complete state of the process when it crashed. In "the good old days", programmers had to print out hex listings of core files and sweat over machine code manuals, but now life is a bit easier. Incidentally, under FreeBSD and other 4.4BSD systems, a core file is called [.filename]#progname.core# instead of just [.filename]#core#, to make it clearer which program a core file belongs to.
+A core file is basically a file which contains the complete state of the process when it crashed.
+In "the good old days", programmers had to print out hex listings of core files and sweat over machine code manuals, but now life is a bit easier.
+Incidentally, under FreeBSD and other 4.4BSD systems, a core file is called [.filename]#progname.core# instead of just [.filename]#core#, to make it clearer which program a core file belongs to.
-To examine a core file, specify the name of the core file in addition to the program itself. Instead of starting up `lldb` in the usual way, type `lldb -c _progname_.core -- _progname_`
+To examine a core file, specify the name of the core file in addition to the program itself.
+Instead of starting up `lldb` in the usual way, type `lldb -c _progname_.core \-- _progname_`.
The debugger will display something like this:
@@ -806,7 +809,10 @@ Core file '/home/pauamma/tmp/[.filename]#progname.core#' (x86_64) was loaded.
(lldb)
....
-In this case, the program was called [.filename]#progname#, so the core file is called [.filename]#progname.core#. The debugger does not display why the program crashed or where. For this, use `thread backtrace all`. This will also show how the function where the program dumped core was called.
+In this case, the program was called [.filename]#progname#, so the core file is called [.filename]#progname.core#.
+The debugger does not display why the program crashed or where.
+For this, use `thread backtrace all`.
+This will also show how the function where the program dumped core was called.
[source,shell,subs="verbatim,quotes"]
....
@@ -818,7 +824,9 @@ In this case, the program was called [.filename]#progname#, so the core file is
(lldb)
....
-`SIGSEGV` indicates that the program tried to access memory (run code or read/write data usually) at a location that does not belong to it, but does not give any specifics. For that, look at the source code at line 10 of file temp2.c, in `bazz()`. The backtrace also says that in this case, `bazz()` was called from `main()`.
+`SIGSEGV` indicates that the program tried to access memory (run code or read/write data usually) at a location that does not belong to it, but does not give any specifics.
+For that, look at the source code at line 10 of file temp2.c, in `bazz()`.
+The backtrace also says that in this case, `bazz()` was called from `main()`.
==== Attaching to a Running Program with lldb
diff --git a/documentation/content/zh-tw/books/developers-handbook/x86/_index.adoc b/documentation/content/zh-tw/books/developers-handbook/x86/_index.adoc
index 48bcad9abe..75dbe64c69 100644
--- a/documentation/content/zh-tw/books/developers-handbook/x86/_index.adoc
+++ b/documentation/content/zh-tw/books/developers-handbook/x86/_index.adoc
@@ -4,7 +4,7 @@ prev: books/developers-handbook/partiv
next: books/developers-handbook/partv
showBookMenu: true
weight: 15
-path: "/books/developers-handbook/"
+path: "/books/developers-handbook/x86/"
---
[[x86]]
diff --git a/documentation/content/zh-tw/books/faq/_index.adoc b/documentation/content/zh-tw/books/faq/_index.adoc
index 99d6ee1744..7f9eb8fe5b 100644
--- a/documentation/content/zh-tw/books/faq/_index.adoc
+++ b/documentation/content/zh-tw/books/faq/_index.adoc
@@ -1,8 +1,8 @@
---
-title: FreeBSD 11.X and 12.X 常見問答集
+title: FreeBSD 12.X and 13.X 常見問答集
authors:
- author: FreeBSD 文件計畫
-copyright: 1995-2020 The FreeBSD Documentation Project
+copyright: 1995-2022 The FreeBSD Documentation Project
trademarks: ["freebsd", "ibm", "ieee", "adobe", "intel", "linux", "microsoft", "opengroup", "sun", "netbsd", "general"]
isIndex: true
---
@@ -57,7 +57,7 @@ endif::[]
[.abstract-title]
摘要
-這份文件是 FreeBSD {rel-relx} 和 {rel2-relx} 常見問答集 ( (FAQ) )。我們盡可能地讓這份 FAQ 提供有用的資訊 ; 如果您有任何改善建議,請寄到 http://lists.FreeBSD.org/mailman/listinfo/freebsd-doc[FreeBSD 文件計畫郵件論壇]。
+這份文件是 FreeBSD {rel-relx} 和 {rel2-relx} 常見問答集 ( (FAQ) )。我們盡可能地讓這份 FAQ 提供有用的資訊 ; 如果您有任何改善建議,請寄到 https://lists.freebsd.org/subscription/freebsd-doc[FreeBSD 文件計畫郵件論壇]。
本文件的最新版本可由 extref:{faq}[FreeBSD 網站]取得。 也可以由 https://download.freebsd.org/doc/[FreeBSD FTP 伺服器] 以 HTTP 下載單一大型 link:.[HTML] 檔或是其他格式的檔案。
@@ -101,7 +101,7 @@ FreeBSD 計畫的目的是提供可以任意使用且沒有限制的穩定快速
但是如果你想要使用的應用程式只能在某個特定的作業系統上面執行 的話,你就不能輕易地把它換掉,或者指望在 FreeBSD 上有很相似的應用程式才有機會。如果你想要的是一個強健的辦公室或是網路伺服器,或是一部穩定的工作站,FreeBSD 無疑是您的最佳選擇。世界各地有很多使用者,包括初學或資深的 UNIX(TM) 管理人員都選用 FreeBSD 當他們唯一的桌上作業系統。
-如果你是從其他的 UNIX(TM)-like 環境轉換到 FreeBSD 的話會很熟悉。 Windows(TM) 或是 Mac OS(TM) 的使用者可能會對 https://www.trueos.org[TrueOS] 有興趣,他是基於 FreeBSD 的一個桌面環境發行版,非UNIX(TM) 使用者可能就要多花一點時間來學習怎麼用 UNIX(TM) 的 方法來做事。你可以從這份 FAQ 和 extref:{handbook}[FreeBSD 使用手冊] 來入門。
+如果你是從其他的 UNIX(TM)-like 環境轉換到 FreeBSD 的話會很熟悉。 Windows(TM) 或是 Mac OS(TM) 的使用者可能會對 https://www.ghostbsd.org[GhostBSD] 、 https://www.midnightbsd.org[MidnightBSD] 、 https://www.nomadbsd.org[NomadBSD] 有興趣,他是基於 FreeBSD 的一個桌面環境發行版,非UNIX(TM) 使用者可能就要多花一點時間來學習怎麼用 UNIX(TM) 的 方法來做事。你可以從這份 FAQ 和 extref:{handbook}[FreeBSD 使用手冊] 來入門。
=== 為什麼要叫做 FreeBSD?
@@ -113,11 +113,11 @@ FreeBSD 計畫的目的是提供可以任意使用且沒有限制的穩定快速
=== FreeBSD 及 NetBSD, OpenBSD 以及其他 open source BSD 作業系統之間有何不同之處呢?
-James Howard 寫了一篇關於不同計畫的差異和歷史淵源的好文章叫 https://jameshoward.us/archive/the-bsd-family-tree/[The BSD Family Tree] 可以回答這個問題。雖然有些資訊有點過時,但是關於歷史淵源的部份仍是相當正確的。
+James Howard 寫了一篇關於不同計畫的差異和歷史淵源的好文章叫 https://jameshoward.us/archive/bsd-family-tree/[The BSD Family Tree] 可以回答這個問題。雖然有些資訊有點過時,但是關於歷史淵源的部份仍是相當正確的。
時至今日,大部分的 BSD 家族仍是共用修補和程式碼的。這些 BSD 家族有著共同的祖先。
- FreeBSD 的設計目的如 <<FreeBSD-goals>> 所述。其他 BSD 家族的設計目的如下所述:
+FreeBSD 的設計目的如 https://docs.freebsd.org/zh-tw/books/faq/#FreeBSD-goals[發展 FreeBSD 計畫的目的是什麼] 所述。其他 BSD 家族的設計目的如下所述:
* OpenBSD 目標在作業系統的安全性。OpenBSD團隊寫的 man:ssh[1] 和 man:pf[4] 都移植到了 FreeBSD。
* NetBSD 目標在易於移植到其他的硬體平台。
@@ -125,9 +125,9 @@ James Howard 寫了一篇關於不同計畫的差異和歷史淵源的好文章
=== 最新版的 FreeBSD 是那一版?
-在 FreeBSD 開發的任何時間點,都有多個平行的分支。12._X_ releases 是從 _12-STABLE_ 分支而來,而 11._X_ releases 是從 _11-STABLE_ 分支而來。
+在 FreeBSD 開發的任何時間點,都有多個平行的分支。13._X_ releases 是從 _13-STABLE_ 分支而來,而 12._X_ releases 是從 _12-STABLE_ 分支而來。
-在 9.0 之前,11.__X__ 系列仍屬 __-STABLE__分支。 然而從13.__X__ 發行開始,11.__X__ 將只著重在重大問題上(比如:漏洞修補、安全維護)以及所謂的 "extended support" 。
+在 12.0 之前,12.__X__ 系列仍屬 __-STABLE__分支。 然而從14.__X__ 發行開始,12.__X__ 將只著重在重大問題上(比如:漏洞修補、安全維護)以及所謂的 "extended support" 。
Version link:ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/i386/12.0-RELEASE/[12.0] is the latest release from the _12-STABLE_ branch; it was released in December 2018. Version link:ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/10.4-RELEASE/[10.4] is the latest release from the _11-STABLE_ branch; it was released in October 2017.
@@ -137,38 +137,43 @@ Releases 版 <<release-freq,每幾個月>> 才會發行一次。 雖然如此,
=== 什麼是 FreeBSD-CURRENT?
-extref:{handbook}updating-upgrading[FreeBSD-CURRENT, current] 指的是正在發展中的作業系統版本,它終將在適當的時機成為 FreeBSD-STABLE 分支。它實在是只適合給系統發展者以及有毅力的業餘愛好者使用 。如果想要得到有關如何使用__-CURRENT__的深入資訊,請參考extref:{handbook}[使用手冊]的extref:{handbook}updating-upgrading[相關部份, current]。
+extref:{handbook}[FreeBSD-CURRENT, current] 指的是正在發展中的作業系統版本,它終將在適當的時機成為 FreeBSD-STABLE 分支。它實在是只適合給系統發展者以及有毅力的業餘愛好者使用 。如果想要得到有關如何使用__-CURRENT__的深入資訊,請參考extref:{handbook}[使用手冊]的extref:{handbook}[相關部份, current]。
如果您對 FreeBSD 本身並不是很熟悉那麼您就不應該使用FreeBSD-CURRENT。 這個分支的程式碼有時候變動得很快,而且可能會因此 而使您有好幾天的時間無法更新您的系統。我們假設使用 FreeBSD-CURRENT 的使用者都有能力去分析他們所遇到的問題,除錯,並且回報問題。
-我們每天都會根據目前 _-CURRENT_ 和 _-STABLE_ 的狀況對這兩個分支各發行一個 https://www.FreeBSD.org/snapshots/[snapshot] 版。發表這些 snapshot 的目的在於:
+=== 什麼是 FreeBSD-STABLE ?
-* 測試最新版的安裝程式。
-* 提供一個簡單的方法給那些喜歡使用 _-CURRENT_ 或是 _-STABLE_ 但是沒有時間和頻寬去每天昇級的使用者。
-* 為了替我們發展中的程式保留一個固定的參考點,以防止我們未來不幸搞砸了。(雖然一般而言 Subversion 可以防止類似這種的可怕事件)
-* 為了確保所有需要測試的新功能或修正都可以得到最多的測試。
+__FreeBSD-STABLE__ 是由主要發行版這個開發分支來的。他的變動較慢,而且一般來說假設他們都已經先在FreeBSD-CURRENT測試過了。然而在任何時候,FreeBSD-STABLE的原始碼仍有可能不一定適合一般用途,因為他可能包含在 FreeBSD-CURRENT 沒有發現到的錯誤。沒有能力和資源的使用者應該改使用 FreeBSD 正式發行版。另一方面,_FreeBSD-CURRENT_ 從2.0開始就是另一個分支。
-我們不對 _-CURRENT_ snapshot 做任何目的的 "品質保證" 。如果你想要的是一個穩定且經過充分測試過的系統的話, 最好選擇使用完整 releases.
+更多關於開發分支的資訊請見 "extref:{handbook}[FreeBSD Release Engineering: Creating the Release Branch]" ,分支的開發狀態和接下來的發行計畫時間表可以在 https://www.FreeBSD.org/releng[Release Engineering 資訊] 找到。
-您可以直接從 https://www.FreeBSD.org/snapshots/[snapshot] 取得 -CURRENT 的 snapshot release。
+link:https://www.freebsd.org/releases/12.3R/announce/[12.3] 版本是 12-STABLE 分支最新的正式發行版本,在 2021年12月7日發行。link:https://www.freebsd.org/releases/13.1R/announce/[13.1] 版本是 13-stable 分支最新的正式發行版本,在 2022年5月16日發行。
-對每個有在活動的分支而言,都會定期產生一次 snapshots。
+=== 每次新的 FreeBSD 將於什麼時候推出?
-=== 什麼是 FreeBSD-STABLE ?
+一般而言,Release Engineering Team mailto:re@FreeBSD.org[<re@FreeBSD.org>] 約每18個月發行一次主要發行版本,約平均每8個月發行一次次要發行版本。每次新版本的發表時程都會事先公告, 相關的開發人員就會知道,什麼時候該先把手邊的計劃完成並且測試過, 此外,這些更動都已經完整地測試過,確保新功能不會影響系統的穩定度。 雖然,等這些好東西進入__-STABLE__ 的時間令人等得有些不耐煩, 但是大多數的使用者都認為這種謹慎的態度是 FreeBSD 最好的優點之一。
+
+有關發行情報的更多細節部分(包括 release 的行程表、進度),都可在 FreeBSD 網站上的 https://www.FreeBSD.org/releng/[發行情報] 上面獲得。
-回溯到 FreeBSD 2.0.5 剛發表的時候,我們決定把 FreeBSD 的發展 分成兩支。一支叫做 extref:{handbook}updating-upgrading[-STABLE, stable],另一支叫 extref:{handbook}updating-upgrading[-CURRENT, current]。主要發行版是由__FreeBSD-STABLE__ 這個開發分支而來。他的變動較慢,而且一般來說假設他們都已經先在FreeBSD-CURRENT測試過了。然而在任何時候,FreeBSD-STABLE的原始碼仍有可能不一定適合一般用途,因為他可能包含在 FreeBSD-CURRENT 沒有發現到的錯誤。沒有能力和資源的使用者應該改使用 FreeBSD 正式發行版。_FreeBSD-CURRENT_ 從2.0開始就是另一個分支,一直到12.0-RELEASE和之後的版本都還是。更多關於開發分支的資訊請見 "extref:{handbook}[FreeBSD Release Engineering: Creating the Release Branch]" ,分支的開發狀態和接下來的發行計畫時間表可以在 https://www.FreeBSD.org/releng[Release Engineering 資訊] 找到。
+為了滿足那些需要 (或想要) 新鮮刺激感的使用者,上面已經提到我們每周都會發行 snapshots 版可供使用。
-12.0-STABLE 是目前正在發展中的 _-STABLE_ 分支。最新的 12.0-STABLE 是在 2018年12月發行的 12.0-RELEASE。
+=== FreeBSD snapshots 版本什麼時候推出?
-_12-CURRENT_ 這個分支是 FreeBSD 的 _-CURRENT_ 分支,仍然不斷地在發展當中。 如果想要知道更多關於這個分支的資訊的話,請參考 <<current,什麼是 FreeBSD-CURRENT?>> 。
+我們會根據目前__-CURRENT__ 和 __-STABLE__ 的狀況發行 link:https://www.freebsd.org/snapshots/[snapshot] 版。發表這些 snapshot 的目的在於:
-=== 每次新的 FreeBSD 將於什麼時候推出?
+* 測試最新版的安裝程式。
-一般而言,Release Engineering Team mailto:re@FreeBSD.org[re@FreeBSD.org] 約每18個月發行一次主要發行版本,約平均每8個月發行一次次要發行版本。每次新版本的發表時程都會事先公告, 相關的開發人員就會知道,什麼時候該先把手邊的計劃完成並且測試過, 此外,這些更動都已經完整地測試過,確保新功能不會影響系統的穩定度。 雖然,等這些好東西進入__-STABLE__ 的時間令人等得有些不耐煩, 但是大多數的使用者都認為這種謹慎的態度是 FreeBSD 最好的優點之一。
+* 提供一個簡單的方法給那些喜歡使用 __-CURRENT__ 或是 __-STABLE__ 但是沒有時間和頻寬去每天升級的使用者。
-有關發行情報的更多細節部分(包括 release 的行程表、進度),都可在 FreeBSD 網站上的 https://www.FreeBSD.org/releng/[發行情報] 上面獲得。
+* 為了替我們發展中的程式保留一個固定的參考點,以防止我們未來不幸搞砸了。(雖然一般而言 Subversion 可以防止類似者種的可怕事件)。
+
+* 為了確保所有需要測試的新功能或修正都可以得到最多的測試。
-為了滿足那些需要 (或想要) 新鮮刺激感的使用者, 上面已經提到我們每周都會發行 snapshots 版可供使用。
+我們不對 __-CURRENT__ snapshot 做任何的 "品質保證" 。如果你想要的是一個穩定且經過充分測試過的系統的話,最好選擇使用完整 releases。
+
+您可以從 link:https://www.freebsd.org/snapshots/[snapshot] 取得 snapshot release。
+
+對每個有在活動的分支,都會定期產生官方的 snapshots。
=== 誰負責 FreeBSD 的發展?
@@ -178,11 +183,13 @@ _12-CURRENT_ 這個分支是 FreeBSD 的 _-CURRENT_ 分支,仍然不斷地在
=== 我要如何取得 FreeBSD?
-Every significant release of FreeBSD is available via anonymous FTP from the link:ftp://ftp.FreeBSD.org/pub/FreeBSD/[FreeBSD FTP site]:
+所有受到支援的版本都在 link:https://www.freebsd.org/where/[FreeBSD release locator pag]e:
+
+* 最新的 __13-STABLE__ 和 13.1-RELEASE 正式發行版本在 link:https://www.freebsd.org/where/#download-rel131[the appropriate architecture and installation mode for 13.1-RELEASE]。
+
+* 最新的 __11-STABLE__ 和 10.4-RELEASE 正式發行版本在 link:https://www.freebsd.org/where/#download-rel123[the appropriate architecture and installation mode for 12.3-RELEASE]。
-* The latest _12-STABLE_ release, 12.0-RELEASE can be found in the link:ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/i386/12.0-RELEASE/[12.0-RELEASE directory].
* <<current,-CURRENT>> 和 <<stable,-STABLE>> 分支的link:https://www.FreeBSD.org/snapshots/[Snapshot]版本通常每個月會做一次, 主要是為了提供給那些熱心的測試者和開發人員。
-* The latest _11-STABLE_ release, 10.4-RELEASE can be found in the link:ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/10.4-RELEASE/[10.4-RELEASE directory].
FreeBSD 的 CD、DVD,還有其他取得方式可以在 extref:{handbook}mirrors[the Handbook, mirrors] 中找到解答。
@@ -295,28 +302,17 @@ FreeBSD 文件計畫已陸續發表了相當廣泛範圍的文件,可在 https
|`pdf`
| Adobe's PDF 格式
-|`ps`
-|PostScript(TM)
-
-|`rtf`
-|Microsoft(TM) 的 RTF 格式
-
|`txt`
|純文字
|===
+
-[NOTE]
-====
-當用 Word 讀取 RTF 格式時,頁碼並不會被自動更新。在開啟檔案後按下kbd:[Ctrl+A], kbd:[Ctrl+End], kbd:[F9] 來更新頁碼。
-====
-
* 壓縮和打包方式
.. 當採用 `html-split` 格式時,檔案先透過 man:tar[1] 工具來進行打包。接著再將產生出來的 [.filename]#.tar# 檔接透過第二點所述的壓縮方式壓縮。
.. 其他的格式都是單一個檔案。例如 [.filename]#article.pdf#、[.filename]#book.html# ,以此類推。
+
這些檔案接著透過 `zip` 或 `bz2` 來壓縮。 man:tar[1] 工具可用來解壓縮這些檔案。
+
-因此 PostScript(TM) 版本的手冊經過 `bzip2` 壓縮後會存成一個叫做 [.filename]#book.ps.bz2# 的檔案,並位於 [.filename]#handbook/# 資料夾。
+因此 PDF 版本的手冊經過 `bzip2` 壓縮後會存成一個叫做 [.filename]#book.ps.bz2# 的檔案,並位於 [.filename]#handbook/# 資料夾。
在選取格式與壓縮方式後,下載壓縮後的檔案並解壓縮,再把文件複製到想要的地方。
@@ -332,20 +328,11 @@ FreeBSD 文件計畫已陸續發表了相當廣泛範圍的文件,可在 https
=== 哪裡有關於 FreeBSD 的郵遞論壇(mailing lists)呢? 有哪些可以使用的 FreeBSD 新聞群組(news groups)呢?
-請參考FreeBSD 使用手冊上的 extref:{handbook}eresources[郵件論壇 (mailing-lists), eresources-mail] 。
+請參考 FreeBSD 使用者手冊上的 link:https://docs.freebsd.org/en/books/handbook/eresources/#eresources-mail[郵件論壇 (mailing-lists)] 和 link:https://docs.freebsd.org/en/books/handbook/eresources/#eresources-news[新聞群組 (news-groups)] 。
=== 有 FreeBSD IRC (Internet Relay Chat)頻道嗎?
-有的,大部分的 IRC 主機都有 FreeBSD 聊天頻道:
-
-* http://www.efnet.org/index.php[EFNet] 上的 `#FreeBSDhelp` 頻道專門用來幫助 FreeBSD 使用著
-* http://freenode.net/[Freenode] 上的 ``\#FreeBSD`` 頻道是一個有許多使用者的一般求助頻道。這個頻道時常聊一些題外話,但主要還是讓使用者問 FreeBSD 相關問題的地方。其他使用者可以協助解答一些基本的問題,並請盡量提供使用手冊的參考或是提供連結來提供更深入的資訊。雖然這個頻道有來自世界各地的使用者,但這是一個英文為主的頻道。非母語人士應該以英文提問,並在必要的時候移駕到 ``##freebsd-lang`` 頻道。
-* http://www.dal.net/[DALNET] 的``#FreeBSD`` 頻道,可由 `irc.dal.net` (位於美國)及``irc.eu.dal.net`` (位於歐洲)進入。
-* http://www.undernet.org/[UNDERNET] 上的 ``#FreeBSD`` 頻道可由 `us.undernet.org`(位於美國)及 `eu.undernet.org` (位於歐洲)進入。由於這是個輔助新手用的頻道, 請記得閱讀別人向你提及的連結或檔案。
-* http://www.rusnet.org.ru/[RUSNET] 上的 ``#FreeBSD`` 頻道是俄語國家的 FreeBSD 使用者頻道。 這裡同時也是一般交流的討論好去處。
-* http://freenode.net/[Freenode] 上的 ``#bsdchat`` 頻道是一個正體中文(UTF-8 編碼)頻道專門用來幫助 FreeBSD 使用著。這裡也歡迎一般非技術的交流討論。
-
-The FreeBSD wiki has a https://wiki.freebsd.org/IRC/Channels[good list] of IRC channels.
+有的,大部分的 IRC 主機都有 FreeBSD 聊天頻道, FreeBSD wiki 有最新的 https://wiki.freebsd.org/IRC/Channels[list of IRC channels] 。
每個頻道都是不同且互相獨立的。因為他們的聊天風格不同,您可以每個都試試看來找到適合您的頻道。
diff --git a/documentation/content/zh-tw/books/handbook/_index.adoc b/documentation/content/zh-tw/books/handbook/_index.adoc
index 1a02a43878..435ad9f832 100644
--- a/documentation/content/zh-tw/books/handbook/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/_index.adoc
@@ -44,8 +44,9 @@ endif::[]
[.abstract-title]
摘要
-歡迎使用 FreeBSD! 本使用手冊涵蓋範圍包括了 _FreeBSD 12.0-RELEASE_ 與 _FreeBSD 11.3-RELEASE_ 的安裝與平日操作的說明。 這份使用手冊是很多人的集體創作,而且仍然『持續不斷』的進行中,因此部份章節可能尚未仍未完成,如果您有興趣協助本計畫的話,請寄電子郵件至 http://lists.FreeBSD.org/mailman/listinfo/freebsd-doc[FreeBSD 文件專案郵遞論壇]。
+歡迎使用 FreeBSD! 本使用手冊涵蓋範圍包括了 _FreeBSD {rel140-current}-RELEASE, {rel132-current}-RELEASE_ 與 _FreeBSD {rel124-current}-RELEASE_ 的安裝與平日操作的說明。 這份使用手冊是很多人的集體創作,而且仍然『持續不斷』的進行中,因此部份章節可能尚未仍未完成,如果您有興趣協助本計畫的話,請寄電子郵件至 {freebsd-doc}[FreeBSD 文件專案郵遞論壇]。
+
+在 https://www.FreeBSD.org/[FreeBSD 網站] 可以找到本手冊的最新版本,舊版文件可從 https://docs.FreeBSD.org/doc/[https://docs.FreeBSD.org/doc/] 取得。本文件也提供各種格式與不同壓縮方式的版本可自 https://download.freebsd.org/doc/[FreeBSD 下載伺服器] 或是其中一個 link:./mirrors#mirrors[鏡像網站] 下載。 此外,您可在 link:https://www.FreeBSD.org/search/[搜尋頁面] 中搜尋本文件或其他文件的資料。
-在 https://www.FreeBSD.org/[FreeBSD 網站] 可以找到本手冊的最新版本,舊版文件可從 https://docs.FreeBSD.org/doc/[https://docs.FreeBSD.org/doc/] 取得。本文件也提供各種格式與不同壓縮方式的版本可自 https://download.freebsd.org/doc/[FreeBSD FTP 伺服器] 或是其中一個 <<mirrors-ftp,鏡像網站>> 下載。 列印出來的實體書面資料可在 https://www.freebsdmall.com/[FreeBSD 商城] 購買。 此外,您可在 https://www.FreeBSD.org/search/[搜尋頁面] 中搜尋本文件或其他文件的資料。
'''
diff --git a/documentation/content/zh-tw/books/handbook/advanced-networking/_index.adoc b/documentation/content/zh-tw/books/handbook/advanced-networking/_index.adoc
index cef31954c7..454b227297 100644
--- a/documentation/content/zh-tw/books/handbook/advanced-networking/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/advanced-networking/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/firewalls
next: books/handbook/partv
showBookMenu: true
weight: 36
-path: "/books/handbook/"
+path: "/books/handbook/advanced-networking/"
---
[[advanced-networking]]
diff --git a/documentation/content/zh-tw/books/handbook/audit/_index.adoc b/documentation/content/zh-tw/books/handbook/audit/_index.adoc
index fb876dd2df..986e886a27 100644
--- a/documentation/content/zh-tw/books/handbook/audit/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/audit/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mac
next: books/handbook/disks
showBookMenu: true
weight: 20
-path: "/books/handbook/"
+path: "/books/handbook/audit/"
---
[[audit]]
diff --git a/documentation/content/zh-tw/books/handbook/basics/_index.adoc b/documentation/content/zh-tw/books/handbook/basics/_index.adoc
index e5916c61bf..4a058c47e9 100644
--- a/documentation/content/zh-tw/books/handbook/basics/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/basics/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/bsdinstall
next: books/handbook/ports
showBookMenu: true
weight: 5
-path: "/books/handbook/"
+path: "/books/handbook/basics/"
---
[[basics]]
diff --git a/documentation/content/zh-tw/books/handbook/bibliography/_index.adoc b/documentation/content/zh-tw/books/handbook/bibliography/_index.adoc
index 5e0fee5c48..9e07cee3e5 100644
--- a/documentation/content/zh-tw/books/handbook/bibliography/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/bibliography/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mirrors
next: books/handbook/eresources
showBookMenu: true
weight: 39
-path: "/books/handbook/"
+path: "/books/handbook/bibliography/"
---
[appendix]
diff --git a/documentation/content/zh-tw/books/handbook/book.adoc b/documentation/content/zh-tw/books/handbook/book.adoc
index 784efc639c..64b7e3d0ee 100644
--- a/documentation/content/zh-tw/books/handbook/book.adoc
+++ b/documentation/content/zh-tw/books/handbook/book.adoc
@@ -46,9 +46,9 @@ endif::[]
[abstract]
摘要
-歡迎使用 FreeBSD! 本使用手冊涵蓋範圍包括了 _FreeBSD 12.0-RELEASE_ 與 _FreeBSD 11.3-RELEASE_ 的安裝與平日操作的說明。 這份使用手冊是很多人的集體創作,而且仍然『持續不斷』的進行中,因此部份章節可能尚未仍未完成,如果您有興趣協助本計畫的話,請寄電子郵件至 http://lists.FreeBSD.org/mailman/listinfo/freebsd-doc[FreeBSD 文件專案郵遞論壇]。
+歡迎使用 FreeBSD! 本使用手冊涵蓋範圍包括了 _FreeBSD {rel140-current}-RELEASE, {rel132-current}-RELEASE_ 與 _FreeBSD {rel124-current}-RELEASE_ 的安裝與平日操作的說明。 這份使用手冊是很多人的集體創作,而且仍然『持續不斷』的進行中,因此部份章節可能尚未仍未完成,如果您有興趣協助本計畫的話,請寄電子郵件至 {freebsd-doc}[FreeBSD 文件專案郵遞論壇]。
-在 https://www.FreeBSD.org/[FreeBSD 網站] 可以找到本手冊的最新版本,舊版文件可從 https://docs.FreeBSD.org/doc/[https://docs.FreeBSD.org/doc/] 取得。本文件也提供各種格式與不同壓縮方式的版本可自 https://download.freebsd.org/doc/[FreeBSD FTP 伺服器] 或是其中一個 <<mirrors-ftp,鏡像網站>> 下載。 列印出來的實體書面資料可在 https://www.freebsdmall.com/[FreeBSD 商城] 購買。 此外,您可在 https://www.FreeBSD.org/search/[搜尋頁面] 中搜尋本文件或其他文件的資料。
+在 https://www.FreeBSD.org/[FreeBSD 網站] 可以找到本手冊的最新版本,舊版文件可從 https://docs.FreeBSD.org/doc/[https://docs.FreeBSD.org/doc/] 取得。本文件也提供各種格式與不同壓縮方式的版本可自 https://download.freebsd.org/doc/[FreeBSD 下載伺服器] 或是其中一個 link:./mirrors#mirrors[鏡像網站] 下載。 此外,您可在 link:https://www.FreeBSD.org/search/[搜尋頁面] 中搜尋本文件或其他文件的資料。
'''
diff --git a/documentation/content/zh-tw/books/handbook/boot/_index.adoc b/documentation/content/zh-tw/books/handbook/boot/_index.adoc
index 64772a0bc1..7d0eb15270 100644
--- a/documentation/content/zh-tw/books/handbook/boot/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/boot/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/config
next: books/handbook/security
showBookMenu: true
weight: 16
-path: "/books/handbook/"
+path: "/books/handbook/boot/"
---
[[boot]]
diff --git a/documentation/content/zh-tw/books/handbook/bsdinstall/_index.adoc b/documentation/content/zh-tw/books/handbook/bsdinstall/_index.adoc
index d10f6f5f48..a39a5c1920 100644
--- a/documentation/content/zh-tw/books/handbook/bsdinstall/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/bsdinstall/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/introduction
next: books/handbook/basics
showBookMenu: true
weight: 4
-path: "/books/handbook/"
+path: "/books/handbook/bsdinstall/"
---
[[bsdinstall]]
@@ -167,7 +167,7 @@ FreeBSD 開機啟動程式需要主分割區或是 GPT 分割區。如果所有
FreeBSD 安裝程式並不是一個可以在其他作業系統上執行的應用程式,反而您需要下載 FreeBSD 安裝檔,燒錄安裝檔到符合其檔案類型與大小的媒體 (CD, DVD 或 USB),然後開機從插入的媒體來安裝。
-FreeBSD 的安裝檔可於 https://www.FreeBSD.org/where/#download[www.freebsd.org/where/#download] 取得。安裝檔的名稱由 FreeBSD 發佈版本、架構、以及檔案類型所組成,舉例,要從 DVD 安裝 FreeBSD 10.2 到 amd64 的系統,需下載 [.filename]#FreeBSD-10.2-RELEASE-amd64-dvd1.iso#,並燒錄這個檔案到 DVD,然後使用插入 DVD 來開機。
+FreeBSD 的安裝檔可於 link:https://www.FreeBSD.org/where/#download[www.freebsd.org/where/#download] 取得。安裝檔的名稱由 FreeBSD 發佈版本、架構、以及檔案類型所組成,舉例,要從 DVD 安裝 FreeBSD 10.2 到 amd64 的系統,需下載 [.filename]#FreeBSD-10.2-RELEASE-amd64-dvd1.iso#,並燒錄這個檔案到 DVD,然後使用插入 DVD 來開機。
安裝檔有許多種可用的格式,格式會依據電腦架構及媒體類型的不同而異。
diff --git a/documentation/content/zh-tw/books/handbook/config/_index.adoc b/documentation/content/zh-tw/books/handbook/config/_index.adoc
index 6a1cc4ef4f..40edbd322d 100644
--- a/documentation/content/zh-tw/books/handbook/config/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/config/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partiii
next: books/handbook/boot
showBookMenu: true
weight: 15
-path: "/books/handbook/"
+path: "/books/handbook/config/"
---
[[config-tuning]]
@@ -1559,5 +1559,5 @@ Most FreeBSD developers watch the http://lists.FreeBSD.org/mailman/listinfo/free
More information about ACPI may be found in the following locations:
* The FreeBSD ACPI Mailing List Archives (https://lists.freebsd.org/pipermail/freebsd-acpi/[https://lists.freebsd.org/pipermail/freebsd-acpi/])
-* The ACPI 2.0 Specification (http://acpi.info/spec.htm[http://acpi.info/spec.htm])
+* The https://uefi.org/specifications#ACPI[ACPI Specification]
* man:acpi[4], man:acpi_thermal[4], man:acpidump[8], man:iasl[8], and man:acpidb[8]
diff --git a/documentation/content/zh-tw/books/handbook/cutting-edge/_index.adoc b/documentation/content/zh-tw/books/handbook/cutting-edge/_index.adoc
index 076ae0fddd..2bdb0ef431 100644
--- a/documentation/content/zh-tw/books/handbook/cutting-edge/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/cutting-edge/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/l10n
next: books/handbook/dtrace
showBookMenu: true
weight: 27
-path: "/books/handbook/"
+path: "/books/handbook/cutting-edge/"
---
[[updating-upgrading]]
diff --git a/documentation/content/zh-tw/books/handbook/desktop/_index.adoc b/documentation/content/zh-tw/books/handbook/desktop/_index.adoc
index 44d7d869c3..e2db611d66 100644
--- a/documentation/content/zh-tw/books/handbook/desktop/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/desktop/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partii
next: books/handbook/multimedia
showBookMenu: true
weight: 9
-path: "/books/handbook/"
+path: "/books/handbook/desktop/"
---
[[desktop]]
diff --git a/documentation/content/zh-tw/books/handbook/disks/_index.adoc b/documentation/content/zh-tw/books/handbook/disks/_index.adoc
index 4b1f4c59a8..e12e7478ad 100644
--- a/documentation/content/zh-tw/books/handbook/disks/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/disks/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/audit
next: books/handbook/geom
showBookMenu: true
weight: 21
-path: "/books/handbook/"
+path: "/books/handbook/disks/"
---
[[disks]]
diff --git a/documentation/content/zh-tw/books/handbook/dtrace/_index.adoc b/documentation/content/zh-tw/books/handbook/dtrace/_index.adoc
index d9fdbbd683..81fa1ca79e 100644
--- a/documentation/content/zh-tw/books/handbook/dtrace/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/dtrace/_index.adoc
@@ -3,9 +3,12 @@ title: 章 24. DTrace
part: 部 III. 系統管理
prev: books/handbook/cutting-edge
next: books/handbook/usb-device-mode
+description: This chapter explains how to use DTrace in FreeBSD
+tags: ["DTrace", "features", "guide", "tutorial", "kldload"]
showBookMenu: true
-weight: 28
-path: "/books/handbook/"
+weight: 30
+path: "/books/handbook/dtrace/"
+aliases: ["/en/books/handbook/dtrace-implementation/","/en/books/handbook/dtrace-enable/","/en/books/handbook/dtrace-using/"]
---
[[dtrace]]
@@ -49,49 +52,69 @@ endif::[]
[[dtrace-synopsis]]
== 概述
-DTrace, also known as Dynamic Tracing, was developed by Sun(TM) as a tool for locating performance bottlenecks in production and pre-production systems. In addition to diagnosing performance problems, DTrace can be used to help investigate and debug unexpected behavior in both the FreeBSD kernel and in userland programs.
+DTrace,又被稱作 Dynamic Tracing ,由 Sun(TM) 開發,用在生產 (production) 跟預生產 (pre-production) 系統中找出效能瓶頸的工具。
+除了診斷性能問題外,DTrace 還可以用於查詢以及除錯 FreeBSD 核心和使用者層級程式的未預期行為。
-DTrace is a remarkable profiling tool, with an impressive array of features for diagnosing system issues. It may also be used to run pre-written scripts to take advantage of its capabilities. Users can author their own utilities using the DTrace D Language, allowing them to customize their profiling based on specific needs.
+DTrace 是一個卓越的分析工具,具有一系列令人驚豔、用於診斷系統問題的功能。
+它還可以執行預先寫好的腳本,以使用其功能。
+使用者可以用 DTrace D 語言編寫自己的工具,從而允許他們根據特定的需求客製化。
-The FreeBSD implementation provides full support for kernel DTrace and experimental support for userland DTrace. Userland DTrace allows users to perform function boundary tracing for userland programs using the `pid` provider, and to insert static probes into userland programs for later tracing. Some ports, such as package:databases/postgres-server[] and package:lang/php56[] have a DTrace option to enable static probes. FreeBSD 10.0-RELEASE has reasonably good userland DTrace support, but it is not considered production ready. In particular, it is possible to crash traced programs.
+FreeBSD 實做提供對核心層級的 DTrace 全面的支援,以及對使用者層級的 DTrace 實驗性的支援。
+使用者層級的 DTrace 允許使用者使用 `pid` 執行函式邊界追蹤 (function boundary tracing),並將 static probes 插入到使用者程式以供之後追蹤。
+一些 ports,像是 package:databases/postgresql12-server[] 和 package:lang/php74[] 提供 DTrace 選項,以提供 static probes 功能。
-The official guide to DTrace is maintained by the Illumos project at http://dtrace.org/guide[DTrace Guide].
+DTrace 的官方指南由 Illumos 維護,在 http://dtrace.org/guide[DTrace Guide]。
讀完這章,您將了解:
-* What DTrace is and what features it provides.
-* Differences between the Solaris(TM) DTrace implementation and the one provided by FreeBSD.
-* How to enable and use DTrace on FreeBSD.
+* 什麼是 DTrace 以及其提供的功能。
+* Solaris(TM) 實做的 DTrace 跟 FreeBSD 提供的 DTrace 之間的不同之處。
+* 如何在 FreeBSD 上啟用和使用 DTrace。
在開始閱讀這章之前,您需要:
* 了解 UNIX(TM) 及 FreeBSD 基礎 (crossref:basics[basics,FreeBSD 基礎])。
-* Have some familiarity with security and how it pertains to FreeBSD (crossref:security[security,安全性]).
+* 了解安全性以及其跟 FreeBSD 的關係 (crossref:security[security,安全性])。
[[dtrace-implementation]]
== 實作差異
-While the DTrace in FreeBSD is similar to that found in Solaris(TM), differences do exist. The primary difference is that in FreeBSD, DTrace is implemented as a set of kernel modules and DTrace can not be used until the modules are loaded. To load all of the necessary modules:
+雖然 FreeBSD 的 DTrace 和 Solaris(TM) 的 DTrace 類似,但是還是有存在差異。
+最重要的區別為,在 FreeBSD 中,DTrace 是作為一組核心模組 (kernel modules) 實做的,並且在載入模組之前無法使用。
+要載入所有需要的模組:
[source,shell]
....
# kldload dtraceall
....
-Beginning with FreeBSD 10.0-RELEASE, the modules are automatically loaded when `dtrace` is run.
+從 FreeBSD 10.0-RELEASE 之後,模組會在執行 `dtrace` 時自動載入。
-FreeBSD uses the `DDB_CTF` kernel option to enable support for loading CTF data from kernel modules and the kernel itself. CTF is the Solaris(TM) Compact C Type Format which encapsulates a reduced form of debugging information similar to DWARF and the venerable stabs. CTF data is added to binaries by the `ctfconvert` and `ctfmerge` build tools. The `ctfconvert` utility parses DWARFELF debug sections created by the compiler and `ctfmerge` merges CTFELF sections from objects into either executables or shared libraries.
+FreeBSD 使用 `DDB_CTF` 核心選項來支援從核心模組和核心本身載入 `CTF` 資料。
+`CTF` 是 Solaris(TM) Compact C Type Format,它封裝了一種簡化形式的除錯資訊,類似於 `DWARF` 和 古老的 stabs。
+`CTF` 資料通過`ctfconvert` and `ctfmerge` 建構工具,加入到二進制文件中。
+`ctfconvert` 工具分析編譯器創建的 `DWARF``ELF` 除錯部份,而 `ctfmerge` 將目標的 `CTF``ELF` 部份合併到執行檔或函式庫中。
-Some different providers exist for FreeBSD than for Solaris(TM). Most notable is the `dtmalloc` provider, which allows tracing `malloc()` by type in the FreeBSD kernel. Some of the providers found in Solaris(TM), such as `cpc` and `mib`, are not present in FreeBSD. These may appear in future versions of FreeBSD. Moreover, some of the providers available in both operating systems are not compatible, in the sense that their probes have different argument types. Thus, D scripts written on Solaris(TM) may or may not work unmodified on FreeBSD, and vice versa.
+與 Solaris(TM) 相比,FreeBSD 存在一些不同的 providers。
+最值得注意的是 `dtmalloc` provider 允許在 FreeBSD 核心中按照類型 (type) 追蹤 `malloc()`。
+Solaris(TM) 中的一些 providers,例如 `cpc` 和 `mib`,在 FreeBSD 中則不存在。
+這些可能會在 FreeBSD 未來的版本中出現。
+此外,兩個作業系統中一些可用的 providers 是不相容的,因為他們具有不同的參數類型。
+因此,在 Solaris(TM) 上拓寫的 `D` 腳本在未經修改的情況下可能可以或不可以在 FreeBSD 上執行,反之亦然。
-Due to security differences, only `root` may use DTrace on FreeBSD. Solaris(TM) has a few low level security checks which do not yet exist in FreeBSD. As such, the [.filename]#/dev/dtrace/dtrace# is strictly limited to `root`.
+因為安全的差異,只有 `root` 可以在 FreeBSD 上使用 DTrace。
+Solaris(TM) 擁有一些 FreeBSD 中還不存在的低階 (low level) 安全檢查。
+因此 [.filename]#/dev/dtrace/dtrace# 被嚴格限制成 `root`。
-DTrace falls under the Common Development and Distribution License (CDDL) license. To view this license on FreeBSD, see [.filename]#/usr/src/cddl/contrib/opensolaris/OPENSOLARIS.LICENSE# or view it online at http://opensource.org/licenses/CDDL-1.0[http://opensource.org/licenses/CDDL-1.0]. While a FreeBSD kernel with DTrace support is BSD licensed, the CDDL is used when the modules are distributed in binary form or the binaries are loaded.
+DTrace 使用 Common Development and Distribution License (`CDDL`) 授權。
+要在 FreeBSD 上查看此授權, 請參閱 [.filename]#/usr/src/cddl/contrib/opensolaris/OPENSOLARIS.LICENSE# 或者在 http://opensource.org/licenses/CDDL-1.0[http://opensource.org/licenses/CDDL-1.0] 線上查看。
+雖然具有 DTrace 支援的 FreeBSD 核心使用 `BSD` 授權,但當模組使用二進制形式或者二進制文件發布時,將使用 `CDDL` 授權。
[[dtrace-enable]]
== 開啟 DTrace 支援
-In FreeBSD 9.2 and 10.0, DTrace support is built into the [.filename]#GENERIC# kernel. Users of earlier versions of FreeBSD or who prefer to statically compile in DTrace support should add the following lines to a custom kernel configuration file and recompile the kernel using the instructions in crossref:kernelconfig[kernelconfig,設定 FreeBSD 核心]:
+在 FreeBSD 9.2 和 10.0 中,DTrace 內建於 [.filename]#GENERIC# 核心裡。
+FreeBSD 早期版本的使用者或喜歡在 DTrace 支援下靜態編譯的使用者應加入下列幾行到客製化核心配置文件,並根據 crossref:kernelconfig[kernelconfig,Configuring the FreeBSD Kernel] 中的說明重新編譯核心:
[.programlisting]
....
@@ -101,52 +124,69 @@ makeoptions DEBUG=-g
makeoptions WITH_CTF=1
....
-Users of the AMD64 architecture should also add this line:
+AMD64 架構的使用者應加入下列幾行:
[.programlisting]
....
options KDTRACE_FRAME
....
-This option provides support for FBT. While DTrace will work without this option, there will be limited support for function boundary tracing.
+此選項提供對 `FBT` 的支援,
+雖然 DTrace 可以在沒有此選項的情況下運作,但對函式邊界追蹤的支援有限。
-Once the FreeBSD system has rebooted into the new kernel, or the DTrace kernel modules have been loaded using `kldload dtraceall`, the system will need support for the Korn shell as the DTrace Toolkit has several utilities written in `ksh`. Make sure that the package:shells/ksh93[] package or port is installed. It is also possible to run these tools under package:shells/pdksh[] or package:shells/mksh[].
+一旦 FreeBSD 系統使用新的核心重新啟動,或者使用 `kldload dtraceall` 載入 DTrace 核心模組後,系統需要支援 Korn shell,因為 DTrace 工具箱有幾個用 `ksh` 拓寫的工具。
+確保已經安裝 package:shells/ksh93[] 套件或者 port,
+也可以在 package:shells/pdksh[] 或者 package:shells/mksh[] 下執行這些工具。
-Finally, install the current DTrace Toolkit, a collection of ready-made scripts for collecting system information. There are scripts to check open files, memory, CPU usage, and a lot more. FreeBSD 10 installs a few of these scripts into [.filename]#/usr/shared/dtrace#. On other FreeBSD versions, or to install the full DTrace Toolkit, use the package:sysutils/dtrace-toolkit[] package or port.
+最後,安裝目前的 DTrace 工具箱,這是一組用於收集系統資訊的現成腳本,
+有一些腳本可以檢查打開的文件、記憶體、`CPU` 使用情況等等。
+FreeBSD 10 將其中一些腳本安裝在 [.filename]#/usr/share/dtrace# 中。
+在其他 FreeBSD 的版本中,要安裝 DTrace 工具箱,請使用 package:sysutils/dtrace-toolkit[] 套件或者 port。
[NOTE]
====
-The scripts found in [.filename]#/usr/shared/dtrace# have been specifically ported to FreeBSD. Not all of the scripts found in the DTrace Toolkit will work as-is on FreeBSD and some scripts may require some effort in order for them to work on FreeBSD.
+[.filename]#/usr/share/dtrace# 中的腳本已專門移植到 FreeBSD,
+並非所有在 DTrace 工具箱中的所有腳本都能在 FreeBSD 上按照原樣運作,一些腳本可能需要一些修改才能在 FreeBSD 上運作。
====
-The DTrace Toolkit includes many scripts in the special language of DTrace. This language is called the D language and it is very similar to C++. An in depth discussion of the language is beyond the scope of this document. It is covered extensively in the http://www.dtrace.org/guide[Illumos Dynamic Tracing Guide].
+DTrace 工具箱包含許多使用 DTrace 特殊語言的腳本,
+這種語言被稱為 D 語言,它與 C++ 非常類似,
+對於該語言的深度討論超出了此文件的範圍,
+他在 http://www.dtrace.org/guide[Illumos Dynamic Tracing Guide] 有廣泛的介紹。
[[dtrace-using]]
== 使用 DTrace
-DTrace scripts consist of a list of one or more _probes_, or instrumentation points, where each probe is associated with an action. Whenever the condition for a probe is met, the associated action is executed. For example, an action may occur when a file is opened, a process is started, or a line of code is executed. The action might be to log some information or to modify context variables. The reading and writing of context variables allows probes to share information and to cooperatively analyze the correlation of different events.
+DTrace 腳本由一個或多個 _probes_ 或檢查點 (instrumentation points) 的列表組成,其中每個 probe 都與一個行為有關,
+只要能滿足 probe 的條件,就會執行相關的行為,
+舉例來說,打開文件、啟動一個行程或執行一行程式。
+該行為可能是紀錄一些資訊,或修改上下文變數 (context variables),
+上下文變數的讀寫允許 probes 分享資訊和共同分析不同事件的相關性。
-To view all probes, the administrator can execute the following command:
+想要查看所有的 probes,系統管理員可以執行以下指令:
[source,shell]
....
# dtrace -l | more
....
-Each probe has an `ID`, a `PROVIDER` (dtrace or fbt), a `MODULE`, and a `FUNCTION NAME`. Refer to man:dtrace[1] for more information about this command.
+每個 probe 都有一個 `ID`、一個 `PROVIDER` (dtrace 或者 fbt)、一個 `MODULE` 和一個 `FUNCTION NAME`。
+有關此指令的更多資訊,請參閱 man:dtrace[1]。
-The examples in this section provide an overview of how to use two of the fully supported scripts from the DTrace Toolkit: the [.filename]#hotkernel# and [.filename]#procsystime# scripts.
+本節中的例子概述如何使用 DTrace 工具箱中完全支援的兩個腳本: [.filename]#hotkernel# 和 [.filename]#procsystime# 腳本。
-The [.filename]#hotkernel# script is designed to identify which function is using the most kernel time. It will produce output similar to the following:
+[.filename]#hotkernel# 腳本設計成觀察哪個函式使用的核心時間最多,
+它會產生類似於以下內容的輸出:
[source,shell]
....
-# cd /usr/shared/dtrace/toolkit
+# cd /usr/local/share/dtrace-toolkit
# ./hotkernel
Sampling... Hit Ctrl-C to end.
....
-As instructed, use the kbd:[Ctrl+C] key combination to stop the process. Upon termination, the script will display a list of kernel functions and timing information, sorting the output in increasing order of time:
+按照說明,使用 kbd:[Ctrl+C] 組合鍵停止行程,
+中止後,腳本將顯示一整列的核心函式和時間資訊,按照時間遞增排序:
[source,shell]
....
@@ -178,7 +218,8 @@ kernel`sched_idletd 137 0.3%
0xc10981a5 42139 99.3%
....
-This script will also work with kernel modules. To use this feature, run the script with `-m`:
+此腳本也是用於核心模組,
+要使用此功能,請使用 `-m` 執行腳本:
[source,shell]
....
@@ -200,7 +241,10 @@ kernel 874 0.4%
0xc10981a5 213781 99.6%
....
-The [.filename]#procsystime# script captures and prints the system call time usage for a given process ID (PID) or process name. In the following example, a new instance of [.filename]#/bin/csh# was spawned. Then, [.filename]#procsystime# was executed and remained waiting while a few commands were typed on the other incarnation of `csh`. These are the results of this test:
+[.filename]#procsystime# 抓取和輸出系統調用時間,給設定行程 ID (PID) 或行程名稱的行程。
+在以下的例子中,生成了 [.filename]#/bin/csh# 新物件,
+然後,[.filename]#procsystime# 被執行並一直等待,同時在 `csh` 的另一個化身上輸入一些指令,
+以下是本次測試的結果:
[source,shell]
....
@@ -231,4 +275,4 @@ Elapsed Times for processes csh,
read 3988049784
....
-As shown, the `read()` system call used the most time in nanoseconds while the `getpid()` system call used the least amount of time.
+如圖所示,`read()` 系統調用使用的時間最多(以奈秒為單位),而 `getpid()` 系統調用使用的時間最少。
diff --git a/documentation/content/zh-tw/books/handbook/eresources/_index.adoc b/documentation/content/zh-tw/books/handbook/eresources/_index.adoc
index 0bca4547c8..9d621f4ec1 100644
--- a/documentation/content/zh-tw/books/handbook/eresources/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/eresources/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/bibliography
next: books/handbook/pgpkeys
showBookMenu: true
weight: 40
-path: "/books/handbook/"
+path: "/books/handbook/eresources/"
---
[appendix]
diff --git a/documentation/content/zh-tw/books/handbook/filesystems/_index.adoc b/documentation/content/zh-tw/books/handbook/filesystems/_index.adoc
index a883c0f5ee..7eedc888a4 100644
--- a/documentation/content/zh-tw/books/handbook/filesystems/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/filesystems/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/zfs
next: books/handbook/virtualization
showBookMenu: true
weight: 24
-path: "/books/handbook/"
+path: "/books/handbook/filesystems/"
---
[[filesystems]]
diff --git a/documentation/content/zh-tw/books/handbook/firewalls/_index.adoc b/documentation/content/zh-tw/books/handbook/firewalls/_index.adoc
index 099b45e041..9174820d05 100644
--- a/documentation/content/zh-tw/books/handbook/firewalls/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/firewalls/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/network-servers
next: books/handbook/advanced-networking
showBookMenu: true
weight: 35
-path: "/books/handbook/"
+path: "/books/handbook/firewalls/"
---
[[firewalls]]
diff --git a/documentation/content/zh-tw/books/handbook/geom/_index.adoc b/documentation/content/zh-tw/books/handbook/geom/_index.adoc
index e8963f6601..a897210232 100644
--- a/documentation/content/zh-tw/books/handbook/geom/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/geom/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/disks
next: books/handbook/zfs
showBookMenu: true
weight: 22
-path: "/books/handbook/"
+path: "/books/handbook/geom/"
---
[[geom]]
diff --git a/documentation/content/zh-tw/books/handbook/introduction/_index.adoc b/documentation/content/zh-tw/books/handbook/introduction/_index.adoc
index f882ecd504..fc7b0d02f7 100644
--- a/documentation/content/zh-tw/books/handbook/introduction/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/introduction/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/parti
next: books/handbook/bsdinstall
showBookMenu: true
weight: 3
-path: "/books/handbook/"
+path: "/books/handbook/introduction/"
---
[[introduction]]
diff --git a/documentation/content/zh-tw/books/handbook/jails/_index.adoc b/documentation/content/zh-tw/books/handbook/jails/_index.adoc
index 099ce18fb5..cf7fceb488 100644
--- a/documentation/content/zh-tw/books/handbook/jails/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/jails/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/security
next: books/handbook/mac
showBookMenu: true
weight: 18
-path: "/books/handbook/"
+path: "/books/handbook/jails/"
---
[[jails]]
diff --git a/documentation/content/zh-tw/books/handbook/kernelconfig/_index.adoc b/documentation/content/zh-tw/books/handbook/kernelconfig/_index.adoc
index 3c571dfb66..928fba6ae1 100644
--- a/documentation/content/zh-tw/books/handbook/kernelconfig/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/kernelconfig/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/multimedia
next: books/handbook/printing
showBookMenu: true
weight: 11
-path: "/books/handbook/"
+path: "/books/handbook/kernelconfig/"
---
[[kernelconfig]]
diff --git a/documentation/content/zh-tw/books/handbook/l10n/_index.adoc b/documentation/content/zh-tw/books/handbook/l10n/_index.adoc
index 94475386fb..f13e50d983 100644
--- a/documentation/content/zh-tw/books/handbook/l10n/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/l10n/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/virtualization
next: books/handbook/cutting-edge
showBookMenu: true
weight: 26
-path: "/books/handbook/"
+path: "/books/handbook/l10n/"
---
[[l10n]]
diff --git a/documentation/content/zh-tw/books/handbook/linuxemu/_index.adoc b/documentation/content/zh-tw/books/handbook/linuxemu/_index.adoc
index 8f18d31e71..3ed1347f6c 100644
--- a/documentation/content/zh-tw/books/handbook/linuxemu/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/linuxemu/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/printing
next: books/handbook/partiii
showBookMenu: true
weight: 13
-path: "/books/handbook/"
+path: "/books/handbook/linuxemu/"
---
[[linuxemu]]
diff --git a/documentation/content/zh-tw/books/handbook/mac/_index.adoc b/documentation/content/zh-tw/books/handbook/mac/_index.adoc
index a1b36f5908..67821758b1 100644
--- a/documentation/content/zh-tw/books/handbook/mac/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/mac/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/jails
next: books/handbook/audit
showBookMenu: true
weight: 19
-path: "/books/handbook/"
+path: "/books/handbook/mac/"
---
[[mac]]
diff --git a/documentation/content/zh-tw/books/handbook/mail/_index.adoc b/documentation/content/zh-tw/books/handbook/mail/_index.adoc
index 9ec558af65..a282679c98 100644
--- a/documentation/content/zh-tw/books/handbook/mail/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/mail/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/ppp-and-slip
next: books/handbook/network-servers
showBookMenu: true
weight: 33
-path: "/books/handbook/"
+path: "/books/handbook/mail/"
---
[[mail]]
diff --git a/documentation/content/zh-tw/books/handbook/mirrors/_index.adoc b/documentation/content/zh-tw/books/handbook/mirrors/_index.adoc
index 007eb77fdc..996172d452 100644
--- a/documentation/content/zh-tw/books/handbook/mirrors/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/mirrors/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partv
next: books/handbook/bibliography
showBookMenu: true
weight: 38
-path: "/books/handbook/"
+path: "/books/handbook/mirrors/"
---
[appendix]
diff --git a/documentation/content/zh-tw/books/handbook/multimedia/_index.adoc b/documentation/content/zh-tw/books/handbook/multimedia/_index.adoc
index 030183ac5a..cdb453fddb 100644
--- a/documentation/content/zh-tw/books/handbook/multimedia/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/multimedia/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/desktop
next: books/handbook/kernelconfig
showBookMenu: true
weight: 10
-path: "/books/handbook/"
+path: "/books/handbook/multimedia/"
---
[[multimedia]]
diff --git a/documentation/content/zh-tw/books/handbook/network-servers/_index.adoc b/documentation/content/zh-tw/books/handbook/network-servers/_index.adoc
index a92d7276b5..f10b246cba 100644
--- a/documentation/content/zh-tw/books/handbook/network-servers/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/network-servers/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/mail
next: books/handbook/firewalls
showBookMenu: true
weight: 34
-path: "/books/handbook/"
+path: "/books/handbook/network-servers/"
---
[[network-servers]]
diff --git a/documentation/content/zh-tw/books/handbook/parti.adoc b/documentation/content/zh-tw/books/handbook/parti.adoc
index b098987271..48cb7235fd 100644
--- a/documentation/content/zh-tw/books/handbook/parti.adoc
+++ b/documentation/content/zh-tw/books/handbook/parti.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/preface
next: books/handbook/introduction
showBookMenu: true
weight: 2
-path: "/books/handbook/"
+path: "/books/handbook/parti/"
---
[[getting-started]]
@@ -14,7 +14,7 @@ path: "/books/handbook/"
* 介紹 FreeBSD 給您。
* 在安裝過程給您指引。
-* T教您 UNIX(R) 的基礎及原理。
+* 教您 UNIX(R) 的基礎及原理。
* 展示給您看如何安裝豐富的 FreeBSD 的應用軟體。
* 向您介紹 X,UNIX(R) 的視窗系統以及詳細的桌面環境設定,讓您更有生產力。
diff --git a/documentation/content/zh-tw/books/handbook/partii.adoc b/documentation/content/zh-tw/books/handbook/partii.adoc
index 3bec77ce37..830be41ffc 100644
--- a/documentation/content/zh-tw/books/handbook/partii.adoc
+++ b/documentation/content/zh-tw/books/handbook/partii.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/x11
next: books/handbook/desktop
showBookMenu: true
weight: 8
-path: "/books/handbook/"
+path: "/books/handbook/partii/"
---
[[common-tasks]]
diff --git a/documentation/content/zh-tw/books/handbook/partiii.adoc b/documentation/content/zh-tw/books/handbook/partiii.adoc
index 4771d5bfe9..d3fa37dd10 100644
--- a/documentation/content/zh-tw/books/handbook/partiii.adoc
+++ b/documentation/content/zh-tw/books/handbook/partiii.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/linuxemu
next: books/handbook/config
showBookMenu: true
weight: 14
-path: "/books/handbook/"
+path: "/books/handbook/partiii/"
---
[[system-administration]]
diff --git a/documentation/content/zh-tw/books/handbook/partiv.adoc b/documentation/content/zh-tw/books/handbook/partiv.adoc
index 1497dfa983..66882fb1db 100644
--- a/documentation/content/zh-tw/books/handbook/partiv.adoc
+++ b/documentation/content/zh-tw/books/handbook/partiv.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/usb-device-mode
next: books/handbook/serialcomms
showBookMenu: true
weight: 30
-path: "/books/handbook/"
+path: "/books/handbook/partiv/"
---
[[network-communication]]
diff --git a/documentation/content/zh-tw/books/handbook/partv.adoc b/documentation/content/zh-tw/books/handbook/partv.adoc
index 8d99637027..ab9cb22bb5 100644
--- a/documentation/content/zh-tw/books/handbook/partv.adoc
+++ b/documentation/content/zh-tw/books/handbook/partv.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/advanced-networking
next: books/handbook/mirrors
showBookMenu: true
weight: 37
-path: "/books/handbook/"
+path: "/books/handbook/partv/"
---
[[appendices]]
diff --git a/documentation/content/zh-tw/books/handbook/pgpkeys/_index.adoc b/documentation/content/zh-tw/books/handbook/pgpkeys/_index.adoc
index 8b720a3bc4..15cac036f7 100644
--- a/documentation/content/zh-tw/books/handbook/pgpkeys/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/pgpkeys/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/eresources
next: books/handbook/freebsd-glossary
showBookMenu: true
weight: 41
-path: "/books/handbook/"
+path: "/books/handbook/pgpkeys/"
---
[appendix]
@@ -59,9 +59,6 @@ The OpenPGP keys of the `FreeBSD.org` officers are shown here. These keys can be
=== {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/zh-tw/books/handbook/ports/_index.adoc b/documentation/content/zh-tw/books/handbook/ports/_index.adoc
index f670305b0f..084eaf6756 100644
--- a/documentation/content/zh-tw/books/handbook/ports/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/ports/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/basics
next: books/handbook/x11
showBookMenu: true
weight: 6
-path: "/books/handbook/"
+path: "/books/handbook/ports/"
---
[[ports]]
diff --git a/documentation/content/zh-tw/books/handbook/ppp-and-slip/_index.adoc b/documentation/content/zh-tw/books/handbook/ppp-and-slip/_index.adoc
index 0535949470..a30c588aba 100644
--- a/documentation/content/zh-tw/books/handbook/ppp-and-slip/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/ppp-and-slip/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/serialcomms
next: books/handbook/mail
showBookMenu: true
weight: 32
-path: "/books/handbook/"
+path: "/books/handbook/ppp-and-slip/"
---
[[ppp-and-slip]]
diff --git a/documentation/content/zh-tw/books/handbook/preface/_index.adoc b/documentation/content/zh-tw/books/handbook/preface/_index.adoc
index 67be68d7a9..61d54b6f0b 100644
--- a/documentation/content/zh-tw/books/handbook/preface/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/preface/_index.adoc
@@ -4,7 +4,7 @@ prev: books/handbook/
next: books/handbook/parti
showBookMenu: true
weight: 1
-path: "/books/handbook/"
+path: "/books/handbook/preface/"
---
[preface]
diff --git a/documentation/content/zh-tw/books/handbook/printing/_index.adoc b/documentation/content/zh-tw/books/handbook/printing/_index.adoc
index 07e78a7b61..2b5d278b27 100644
--- a/documentation/content/zh-tw/books/handbook/printing/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/printing/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/kernelconfig
next: books/handbook/linuxemu
showBookMenu: true
weight: 12
-path: "/books/handbook/"
+path: "/books/handbook/printing/"
---
[[printing]]
@@ -507,11 +507,6 @@ Modify [.filename]#/etc/printcap# to use this new input filter:
Test the filter by printing PostScript(TM) and plain text files.
-[[printing-lpd-filters-othersmart]]
-==== 其他智慧過濾器
-
-Writing a filter that detects many different types of input and formats them correctly is challenging. package:print/apsfilter[] from the Ports Collection is a smart "magic" filter that detects dozens of file types and automatically converts them to the PDL understood by the printer. See http://www.apsfilter.org[] for more details.
-
[[printing-lpd-queues]]
=== 多序列
diff --git a/documentation/content/zh-tw/books/handbook/security/_index.adoc b/documentation/content/zh-tw/books/handbook/security/_index.adoc
index 375953bdaa..39098ca1b5 100644
--- a/documentation/content/zh-tw/books/handbook/security/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/security/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/boot
next: books/handbook/jails
showBookMenu: true
weight: 17
-path: "/books/handbook/"
+path: "/books/handbook/security/"
---
[[security]]
diff --git a/documentation/content/zh-tw/books/handbook/serialcomms/_index.adoc b/documentation/content/zh-tw/books/handbook/serialcomms/_index.adoc
index d246a93ba9..f2c67743a9 100644
--- a/documentation/content/zh-tw/books/handbook/serialcomms/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/serialcomms/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/partiv
next: books/handbook/ppp-and-slip
showBookMenu: true
weight: 31
-path: "/books/handbook/"
+path: "/books/handbook/serialcomms/"
---
[[serialcomms]]
diff --git a/documentation/content/zh-tw/books/handbook/usb-device-mode/_index.adoc b/documentation/content/zh-tw/books/handbook/usb-device-mode/_index.adoc
index 3ff5c75c01..fba569fd57 100644
--- a/documentation/content/zh-tw/books/handbook/usb-device-mode/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/usb-device-mode/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/dtrace
next: books/handbook/partiv
showBookMenu: true
weight: 29
-path: "/books/handbook/"
+path: "/books/handbook/usb-device-mode/"
---
[[usb-device-mode]]
diff --git a/documentation/content/zh-tw/books/handbook/virtualization/_index.adoc b/documentation/content/zh-tw/books/handbook/virtualization/_index.adoc
index 0e3b9a1220..b78e604669 100644
--- a/documentation/content/zh-tw/books/handbook/virtualization/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/virtualization/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/filesystems
next: books/handbook/l10n
showBookMenu: true
weight: 25
-path: "/books/handbook/"
+path: "/books/handbook/virtualization/"
---
[[virtualization]]
diff --git a/documentation/content/zh-tw/books/handbook/x11/_index.adoc b/documentation/content/zh-tw/books/handbook/x11/_index.adoc
index fffe3809cf..419c07c1ce 100644
--- a/documentation/content/zh-tw/books/handbook/x11/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/x11/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/ports
next: books/handbook/partii
showBookMenu: true
weight: 7
-path: "/books/handbook/"
+path: "/books/handbook/x11/"
---
[[x11]]
diff --git a/documentation/content/zh-tw/books/handbook/zfs/_index.adoc b/documentation/content/zh-tw/books/handbook/zfs/_index.adoc
index f8aa244612..be3030f16d 100644
--- a/documentation/content/zh-tw/books/handbook/zfs/_index.adoc
+++ b/documentation/content/zh-tw/books/handbook/zfs/_index.adoc
@@ -5,7 +5,7 @@ prev: books/handbook/geom
next: books/handbook/filesystems
showBookMenu: true
weight: 23
-path: "/books/handbook/"
+path: "/books/handbook/zfs/"
---
[[zfs]]
diff --git a/documentation/content/zh-tw/books/porters-handbook/flavors/_index.adoc b/documentation/content/zh-tw/books/porters-handbook/flavors/_index.adoc
index 46bace6d07..89b2df77ee 100644
--- a/documentation/content/zh-tw/books/porters-handbook/flavors/_index.adoc
+++ b/documentation/content/zh-tw/books/porters-handbook/flavors/_index.adoc
@@ -6,7 +6,7 @@ description: Flavors are a way to have multiple variations of a port
tags: ["Ports", "Flavors", "introduction", "how-to", "guide"]
showBookMenu: true
weight: 7
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/flavors/"
---
[[flavors]]
diff --git a/documentation/content/zh-tw/books/porters-handbook/keeping-up/_index.adoc b/documentation/content/zh-tw/books/porters-handbook/keeping-up/_index.adoc
index 2a8cf3e639..4c35d71be1 100644
--- a/documentation/content/zh-tw/books/porters-handbook/keeping-up/_index.adoc
+++ b/documentation/content/zh-tw/books/porters-handbook/keeping-up/_index.adoc
@@ -6,7 +6,7 @@ description: How to keep up the FreeBSD Ports Collection
tags: ["keeping up", "ports", "updating", "FreshPorts"]
showBookMenu: true
weight: 16
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/keeping-up/"
---
[[keeping-up]]
diff --git a/documentation/content/zh-tw/books/porters-handbook/makefiles/_index.adoc b/documentation/content/zh-tw/books/porters-handbook/makefiles/_index.adoc
index 5d2f4cd1b7..79f992fba8 100644
--- a/documentation/content/zh-tw/books/porters-handbook/makefiles/_index.adoc
+++ b/documentation/content/zh-tw/books/porters-handbook/makefiles/_index.adoc
@@ -6,7 +6,7 @@ description: Configuring the Makefile for FreeBSD Ports
tags: ["makefiles", "configuring", "naming", "versions"]
showBookMenu: true
weight: 5
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/makefiles/"
---
[[makefiles]]
diff --git a/documentation/content/zh-tw/books/porters-handbook/new-port/_index.adoc b/documentation/content/zh-tw/books/porters-handbook/new-port/_index.adoc
index 7787f301bf..20c774da8a 100644
--- a/documentation/content/zh-tw/books/porters-handbook/new-port/_index.adoc
+++ b/documentation/content/zh-tw/books/porters-handbook/new-port/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/porting-why
next: books/porters-handbook/quick-porting
showBookMenu: true
weight: 2
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/new-port/"
---
[[own-port]]
diff --git a/documentation/content/zh-tw/books/porters-handbook/order/_index.adoc b/documentation/content/zh-tw/books/porters-handbook/order/_index.adoc
index 057119bed6..2f032a678d 100644
--- a/documentation/content/zh-tw/books/porters-handbook/order/_index.adoc
+++ b/documentation/content/zh-tw/books/porters-handbook/order/_index.adoc
@@ -6,7 +6,7 @@ description: Order of Variables in FreeBSD Port Makefiles
tags: ["order", "PORTNAME", "PATCHFILES", "MAINTAINER", "LICENSE", "dependencies", "USES"]
showBookMenu: true
weight: 15
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/order/"
---
[[porting-order]]
diff --git a/documentation/content/zh-tw/books/porters-handbook/pkg-files/_index.adoc b/documentation/content/zh-tw/books/porters-handbook/pkg-files/_index.adoc
index 969e0b9f43..35c9bb111e 100644
--- a/documentation/content/zh-tw/books/porters-handbook/pkg-files/_index.adoc
+++ b/documentation/content/zh-tw/books/porters-handbook/pkg-files/_index.adoc
@@ -6,7 +6,7 @@ description: Tricks about the pkg-* files
tags: ["pkg", "pkg-message", "UCL", "pkg-install", "pkg-deinstall"]
showBookMenu: true
weight: 9
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/pkg-files/"
---
[[pkg-files]]
diff --git a/documentation/content/zh-tw/books/porters-handbook/plist/_index.adoc b/documentation/content/zh-tw/books/porters-handbook/plist/_index.adoc
index 7ee24afc97..fbf74d8e4c 100644
--- a/documentation/content/zh-tw/books/porters-handbook/plist/_index.adoc
+++ b/documentation/content/zh-tw/books/porters-handbook/plist/_index.adoc
@@ -6,7 +6,7 @@ description: Advanced pkg-plist Practices
tags: ["pkg-plist", "practices", "configuration"]
showBookMenu: true
weight: 8
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/plist/"
---
[[plist]]
diff --git a/documentation/content/zh-tw/books/porters-handbook/porting-dads/_index.adoc b/documentation/content/zh-tw/books/porters-handbook/porting-dads/_index.adoc
index 9693c0ca93..3daf331e37 100644
--- a/documentation/content/zh-tw/books/porters-handbook/porting-dads/_index.adoc
+++ b/documentation/content/zh-tw/books/porters-handbook/porting-dads/_index.adoc
@@ -6,7 +6,7 @@ description: A list of common dos and don'ts that are encountered during the Fre
tags: ["dos", "don'ts", "porting", "ports", "guide"]
showBookMenu: true
weight: 13
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/porting-dads/"
---
[[porting-dads]]
diff --git a/documentation/content/zh-tw/books/porters-handbook/porting-samplem/_index.adoc b/documentation/content/zh-tw/books/porters-handbook/porting-samplem/_index.adoc
index 2a247922c2..bc88ad70fe 100644
--- a/documentation/content/zh-tw/books/porters-handbook/porting-samplem/_index.adoc
+++ b/documentation/content/zh-tw/books/porters-handbook/porting-samplem/_index.adoc
@@ -6,7 +6,7 @@ description: A sample Makefile that can be used to create a new FreeBSD Port
tags: ["sample", "makefile"]
showBookMenu: true
weight: 14
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/porting-samplem/"
---
[[porting-samplem]]
diff --git a/documentation/content/zh-tw/books/porters-handbook/porting-why/_index.adoc b/documentation/content/zh-tw/books/porters-handbook/porting-why/_index.adoc
index 554ff030b4..121670197d 100644
--- a/documentation/content/zh-tw/books/porters-handbook/porting-why/_index.adoc
+++ b/documentation/content/zh-tw/books/porters-handbook/porting-why/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/
next: books/porters-handbook/new-port
showBookMenu: true
weight: 1
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/porting-why/"
---
[[why-port]]
diff --git a/documentation/content/zh-tw/books/porters-handbook/quick-porting/_index.adoc b/documentation/content/zh-tw/books/porters-handbook/quick-porting/_index.adoc
index bdab09bdc5..21fd475eb4 100644
--- a/documentation/content/zh-tw/books/porters-handbook/quick-porting/_index.adoc
+++ b/documentation/content/zh-tw/books/porters-handbook/quick-porting/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/new-port
next: books/porters-handbook/slow-porting
showBookMenu: true
weight: 3
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/quick-porting/"
---
[[quick-porting]]
@@ -56,7 +56,7 @@ endif::[]
[NOTE]
====
-It is recommended to set the `DEVELOPER` man:make[1] variable in [.filename]#/etc/make.conf# before getting into porting.
+在 porting 之前,建議在 [.filename]#/etc/make.conf# 設定 `DEVELOPER` man:make[1] 變數。
[source,shell]
....
@@ -64,7 +64,7 @@ It is recommended to set the `DEVELOPER` man:make[1] variable in [.filename]#/et
# echo DEVELOPER=yes >> /etc/make.conf
....
-This setting enables the "developer mode" that displays deprecation warnings and activates some further quality checks on calling `make`.
+這個設定開啟了 "developer mode" ,顯示已棄用警告並在使用 `make` 時檢查品質。
====
[[porting-makefile]]
@@ -87,12 +87,7 @@ COMMENT= Cat chasing a mouse all over the screen
.include <bsd.port.mk>
....
-[NOTE]
-====
-In some cases, the [.filename]#Makefile# of an existing port may contain additional lines in the header, such as the name of the port and the date it was created. This additional information has been declared obsolete, and is being phased out.
-====
-
-嗯,大致就是這樣,看看你已經領略多少了呢? 看到 `$FreeBSD: head/zh_TW.UTF-8/books/porters-handbook/book.xml 48496 2016-03-29 01:37:53Z kevlo $` 這一行的話,別想太多 ,當該 port 正式進入 port tree 時, Subversion 就會自動轉換為相關字串囉。 有關這點的細節部份,可以參閱 <<porting-samplem,sample Makefile>> 章節。
+嘗試了解此檔案,有關這點的細節部份,可以參閱 crossref:porting-samplem[porting-samplem,sample Makefile] 章節。
[[porting-desc]]
== 撰寫說明檔
@@ -107,29 +102,17 @@ In some cases, the [.filename]#Makefile# of an existing port may contain additio
[NOTE]
====
請注意,這檔_絕非_「該軟體的說明手冊」或是「如何編譯、使用該 port 的說明」! _若是從該軟體的 [.filename]#README# 或 manpage 直接複製過來的話,請注意_。他們常常不是正確的 port 描述或是格式並不適合。例如,manpage會對齊空白,這用monospace字型來看會特別糟糕。
-====
-A well-written [.filename]#pkg-descr# describes the port completely enough that users would not have to consult the documentation or visit the website to understand what the software does, how it can be useful, or what particularly nice features it has. Mentioning certain requirements like a graphical toolkit, heavy dependencies, runtime environment, or implementation languages help users decide whether this port will work for them.
+另一方面, [.filename]#pkg-descr# 的內容必須比 crossref:makefiles[makefile-comment,COMMENT line from the Makefile] 還要詳細,要能詳細解釋此 port 相關的內容。
+====
-Include a URL to the official WWW homepage. Prepend _one_ of the websites (pick the most common one) with `WWW:` (followed by single space) so that automated tools will work correctly. If the URI is the root of the website or directory, it must be terminated with a slash.
+一個良好的 [.filename]#pkg-descr# 可以讓使用者清楚的了解軟體的功能而無須查詢文件或者訪問網站,提及特定的需求像是圖形工具、依賴、執行的環境跟實作的語言,能大大的幫助使用者了解這個 port 是怎麼運作的。
[NOTE]
====
-If the listed webpage for a port is not available, try to search the Internet first to see if the official site moved, was renamed, or is hosted elsewhere.
+過去在 #pkg-descr# 文件最後一行引入的 URL 已經移到 [.filename]#Makefile# 裡面了。
====
-這是 [.filename]#pkg-descr# 內容的例子 :
-
-[.programlisting]
-....
-This is a port of oneko, in which a cat chases a poor mouse all over
-the screen.
- :
-(etc.)
-
-WWW: http://www.oneko.org/
-....
-
[[porting-pkg-plist]]
=== [.filename]#pkg-plist#
@@ -174,15 +157,23 @@ PLIST_FILES= bin/oneko \
[NOTE]
====
-Usage of `PLIST_FILES` should not be abused. When looking for the origin of a file, people usually try to grep through the [.filename]#pkg-plist# files in the ports tree. Listing files in `PLIST_FILES` in the [.filename]#Makefile# makes that search more difficult.
+`PLIST_FILES` 的使用不應該被濫用,人們通常透過在 ports tree 的 [.filename]#pkg-plist# 文件來了解 port ,在 [.filename]#Makefile# 中使用 `PLIST_FILES` 敘述會增加搜尋的難度。
====
[TIP]
====
-If a port needs to create an empty directory, or creates directories outside of [.filename]#${PREFIX}# during installation, refer to crossref:plist[plist-dir-cleaning, Cleaning Up Empty Directories] for more information.
+如果 port 需要創建空的目錄,或者安裝時在 [.filename]#${PREFIX}# 之外創建目錄,請參考 crossref:plist[plist-dir-cleaning, Cleaning Up Empty Directories] 來獲得更多資訊。
+====
+
+[TIP]
====
+因為 `PLIST_FILES` 是 man:make[1] 的變數,任何在此條目的 sapce 都必須被引入。舉例來說,如果使用 man:pkg-create[8] 和 crossref:plist[plist-keywords, Expanding Package List with Keywords] 描述的關鍵字,以下的條目必須被引入。
-然而,使用這個方法列出 port 的檔案和目錄是必須付出代價: 不能使用 man:pkg-create[8] 和 crossref:plist[plist-keywords, Expanding Package List with Keywords] 描述的關鍵字。 因此,這招僅適用於較簡單的 port ,以及簡化該 port 的作法。 此外,這招還有一個好處:可以減少 ports collection 的整體檔案總數。 所以,在考慮是否要用 [.filename]#pkg-plist# 之前, 可以先斟酌這個替代方案看看。
+[.programlisting]
+....
+PLIST_FILES= "@sample ${ETCDIR}/oneko.conf.sample"
+....
+====
後面會介紹到如何運用 [.filename]#pkg-plist#、 `PLIST_FILES` 這些技巧以因應crossref:plist[plist,更複雜的狀況]。
@@ -198,10 +189,10 @@ If a port needs to create an empty directory, or creates directories outside of
* 若該 port 沒裝的東西,不要列在 [.filename]#pkg-plist# 內。
* 若該 port 有裝的東西,請務必列在 [.filename]#pkg-plist# 內。
-* The port can be installed using the `install` target. This verifies that the install script works correctly.
-* The port can be deinstalled properly using the `deinstall` target. This verifies that the deinstall script works correctly.
-* The port does not access network resources after the `fetch` target. This is important for package builders, such as package:ports-mgmt/poudriere[].
-* Make sure that `make package` can be run as a normal user (that is, not as `root`). If that fails, `NEED_ROOT=yes` must be added to the port [.filename]#Makefile#.
+* port 可以透過 `install` 來安裝,這可以確保安裝的 script 是正常運作的。
+* port 可以透過 `uninstall` 來移除,這可以確保安裝的 script 是正常運作的。
+* port 只有在 `featch` 目標時才能使用網路,這對 package builders 很重要,像是 package:ports-mgmt/poudriere[].
+* 確保 `make package` 可以被一般使用者執行 (也就是說,非 `root` 使用者),如果上述執行失敗,軟體很可能需要修改,請參考 crossref:uses[uses-fakeroot,`fakeroot`] 和 crossref:uses[uses-uidfix,`uidfix`]。
[.procedure]
====
@@ -218,32 +209,88 @@ If a port needs to create an empty directory, or creates directories outside of
確認在任何階段都沒有任何警告出現。
-Thorough automated testing can be done with package:ports-mgmt/tinderbox[] or package:ports-mgmt/poudriere[] from the Ports Collection. These applications maintain `jails` where all of the steps shown above can be tested without affecting the state of the host system.
+可以透過 package:ports-mgmt/tinderbox[] 或者 Ports Collection 的 package:ports-mgmt/poudriere[] 工具來完成自動化測試,參考 crossref:testing[testing-poudriere,Poudriere] 獲得更多的資訊。她維護 `jails` ,可以在不影響系統的情況下執行上述所有的測試。
[[porting-portlint]]
== 以 `portlint` 來作檢查 Port
請用 `portlint` 來檢查該 port 是否有遵循我們的規則。 package:ports-mgmt/portlint[] 是 ports collection 的其中一個套件。 它主要可以用來檢驗 <<porting-samplem,Makefile>> 內容是否正確以及 <<porting-pkgname,package>> 是否有正確命名。
+[IMPORTANT]
+====
+不要盲目的相信 `portlint` 的輸出,他是一個 static lint 工具,並且有可能會出錯。
+====
+
[[porting-submitting]]
== 提交新的 Port
提交新的 Port 前,請閱讀 <<porting-dads,DOs and DON'Ts>> 章節。
-現在你很高興終於打造出 port 來囉,唯一剩下要做的就是把它正式放到 FreeBSD ports tree 內,才能讓每個人都能分享使用這個 port。 我們不需要 [.filename]#work# 目錄或是檔名像 [.filename]#pkgname.tgz# 的 package ,請現在刪除他們。
+現在你很高興終於打造出 port 來囉,唯一剩下要做的就是把它正式放到 FreeBSD ports tree 內,才能讓每個人都能分享使用這個 port。
-Next, build the man:shar[1] file. Assuming the port is called `oneko`, `cd` to the directory above where the `oneko` directory is located, and then type: `shar find oneko > oneko.shar`
+[IMPORTANT]
+====
+我們不需要 [.filename]#work# 目錄或是檔名像 [.filename]#pkgname.tgz# 的 package ,請現在刪除他們。
+====
-To submit [.filename]#oneko.shar#, use the https://bugs.freebsd.org/submit/[bug submit form] (category `Ports Tree`). Add a short description of the program to the Description field of the PR (perhaps a short version of `COMMENT`), and do not forget to add [.filename]#oneko.shar# as an attachment.
+下一步,創建一個 man:patch[1] ,一個文件,假設此 port 叫做 `oneko` 並且屬於 `games` 類別。
-[NOTE]
+[[porting-submitting-diff]]
+.為新的 Port 創建 [.filename]#.diff#
+[example]
====
-Giving a good description in the summary of the problem report makes the work of port committers a lot easier. We prefer something like "New port: _category_/_portname__short description of the port_" for new ports. Using this scheme makes it easier and faster to begin the work of committing the new port.
+透過 `git add .` 加入所有的檔案,然後透過 `git diff` 來檢查不同處,如下。
+
+[source,shell]
+....
+% git add .
+% git diff --staged
+....
+
+確保所有需要的檔案都被引入了,將更改提交到你本地分支並使用 `git format-patch` 產生 patch。
+
+[source,shell]
+....
+% git commit
+% git format-patch origin/main
+....
+
+使用 `git format-patch` 產生的 patch 會包含作者以及電子郵件,讓其他開發者更容易使用 (with `git am`) 以及給予回饋。
+
+
+[IMPORTANT]
+****
+為了讓開發者更容易在他們的 ports tree 使用此 patch ,請基於你的 ports tree 來產生 [.filename]#.diff# 。
+****
+
====
-再次強調一點:_不必附上原始 source 的 distfile ,也就是 [.filename]#work# 目錄。 同時,也不必附上 `make package` 時產生的 package_。新的 port 請使用 man:shar[1] ,不要用 man:diff[1] 。
+透過 https://bugs.freebsd.org/submit/[bug submission form] 繳交 [.filename]#oneko.diff# 。使用 "Ports & Packages" 產品和 "Individual Port(s)" 組件,然後跟著這裡的教學走,在 PR 的描述欄位 (也許是較短的 `COMMENT` ) 加入簡短的敘述,並且記得在附件中加入 [.filename]#oneko.diff# 。
+
+[NOTE]
+====
+在問題回報系統中給一個好的總結可以讓 port 開發者更輕鬆的處理此 port ,我們預期的描述形式為 "[NEW PORT] _category/portname short description of the port_" ,使用此形式能讓我們更快的部屬新的 port 。
+====
送出 port 之後,請耐心等候佳音。 有時候可能需要等個幾天或幾個月時間,才會在 FreeBSD ports tree 上正式出現。 等待中的 port PR 清單可以在 http://www.FreeBSD.org/cgi/query-pr-summary.cgi?category=ports[] 查閱。
+在搜尋表單中選擇 _Open_ and _Ports & Packages_ 來獲得 _open_ port PRs 的清單。
+
在看過新的 port 之後,如果需要的話,我們會回覆您,然後會將它提交到 port tree 。 您的大名會被列在 extref:{contributors}[Additional FreeBSD Contributors, contrib-additional] 列表上,以及其他檔案中。
+也可以透過 man:shar[1] 檔案來提交 port ,請使用之前 `oneko` port 的例子。
+
+.為新的 Port 創建 [.filename]#.shar#
+[[porting-submitting-shar]]
+[example]
+====
+前往 port 所在的目錄,使用 `tar`創建 shar archive:
+
+[source,shell]
+....
+% cd ..
+% tar cf oneko.shar --format shar oneko
+....
+====
+
+可以使用跟提交 [.filename]#oneko.diff# 一樣的方式來提交 [.filename]#oneko.shar# 。 \ No newline at end of file
diff --git a/documentation/content/zh-tw/books/porters-handbook/security/_index.adoc b/documentation/content/zh-tw/books/porters-handbook/security/_index.adoc
index ac663489ae..48b1fbaa40 100644
--- a/documentation/content/zh-tw/books/porters-handbook/security/_index.adoc
+++ b/documentation/content/zh-tw/books/porters-handbook/security/_index.adoc
@@ -6,7 +6,7 @@ description: Security instructions when making a FreeBSD Port
tags: ["security", "porting", "ports", "VuXML"]
showBookMenu: true
weight: 12
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/security/"
---
[[security]]
diff --git a/documentation/content/zh-tw/books/porters-handbook/slow-porting/_index.adoc b/documentation/content/zh-tw/books/porters-handbook/slow-porting/_index.adoc
index 3e7c6c62b3..8d1969ce40 100644
--- a/documentation/content/zh-tw/books/porters-handbook/slow-porting/_index.adoc
+++ b/documentation/content/zh-tw/books/porters-handbook/slow-porting/_index.adoc
@@ -4,7 +4,7 @@ prev: books/porters-handbook/quick-porting
next: books/porters-handbook/makefiles
showBookMenu: true
weight: 4
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/slow-porting/"
---
[[slow-porting]]
diff --git a/documentation/content/zh-tw/books/porters-handbook/special/_index.adoc b/documentation/content/zh-tw/books/porters-handbook/special/_index.adoc
index a7ad7f9aad..b1d06bf88b 100644
--- a/documentation/content/zh-tw/books/porters-handbook/special/_index.adoc
+++ b/documentation/content/zh-tw/books/porters-handbook/special/_index.adoc
@@ -6,7 +6,7 @@ description: Special considerations when creating a new FreeBSD Port
tags: ["special considerations", "Handling Symbolic Links", "Bundled Libraries"]
showBookMenu: true
weight: 6
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/special/"
---
[[special]]
diff --git a/documentation/content/zh-tw/books/porters-handbook/testing/_index.adoc b/documentation/content/zh-tw/books/porters-handbook/testing/_index.adoc
index c32e4205ac..e60c62b01e 100644
--- a/documentation/content/zh-tw/books/porters-handbook/testing/_index.adoc
+++ b/documentation/content/zh-tw/books/porters-handbook/testing/_index.adoc
@@ -6,7 +6,7 @@ description: Testing a FreeBSD Port
tags: ["testing", "port", "Portclippy", "Portfmt", "Portlint", "Poudriere", "sets"]
showBookMenu: true
weight: 10
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/testing/"
---
[[testing]]
diff --git a/documentation/content/zh-tw/books/porters-handbook/upgrading/_index.adoc b/documentation/content/zh-tw/books/porters-handbook/upgrading/_index.adoc
index e420cb5b6b..ad3de83418 100644
--- a/documentation/content/zh-tw/books/porters-handbook/upgrading/_index.adoc
+++ b/documentation/content/zh-tw/books/porters-handbook/upgrading/_index.adoc
@@ -6,7 +6,7 @@ description: Upgrading a FreeBSD Port
tags: ["upgrading", "port", "git"]
showBookMenu: true
weight: 11
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/upgrading/"
---
[[port-upgrading]]
diff --git a/documentation/content/zh-tw/books/porters-handbook/uses/_index.adoc b/documentation/content/zh-tw/books/porters-handbook/uses/_index.adoc
index 2c28bcb748..6556996bd5 100644
--- a/documentation/content/zh-tw/books/porters-handbook/uses/_index.adoc
+++ b/documentation/content/zh-tw/books/porters-handbook/uses/_index.adoc
@@ -6,7 +6,7 @@ description: USES macros make it easy to declare requirements and settings for a
tags: ["uses", "macros", "introduction", "guide"]
showBookMenu: true
weight: 17
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/uses/"
---
[[uses]]
diff --git a/documentation/content/zh-tw/books/porters-handbook/versions/_index.adoc b/documentation/content/zh-tw/books/porters-handbook/versions/_index.adoc
index 3ec6e54eb4..3b34d785fb 100644
--- a/documentation/content/zh-tw/books/porters-handbook/versions/_index.adoc
+++ b/documentation/content/zh-tw/books/porters-handbook/versions/_index.adoc
@@ -5,7 +5,7 @@ description: A list of changes into the sys/param.h file
tags: ["FreeBSD versions"]
showBookMenu: true
weight: 18
-path: "/books/porters-handbook/"
+path: "/books/porters-handbook/versions/"
---
[[versions]]
diff --git a/documentation/static/images/books/dev-model/portsstatus.png b/documentation/static/images/books/dev-model/portsstatus.png
deleted file mode 100644
index 542f24e232..0000000000
--- a/documentation/static/images/books/dev-model/portsstatus.png
+++ /dev/null
Binary files differ
diff --git a/documentation/static/images/books/dev-model/portsstatus.svg b/documentation/static/images/books/dev-model/portsstatus.svg
new file mode 100644
index 0000000000..30619f0a58
--- /dev/null
+++ b/documentation/static/images/books/dev-model/portsstatus.svg
@@ -0,0 +1,341 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<svg
+ width="600" height="480"
+ viewBox="0 0 600 480"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+>
+
+<title>Gnuplot</title>
+<desc>Produced by GNUPLOT 5.4 patchlevel 1 </desc>
+
+<g id="gnuplot_canvas">
+
+<rect x="0" y="0" width="600" height="480" fill="none"/>
+<defs>
+
+ <circle id='gpDot' r='0.5' stroke-width='0.5' stroke='currentColor'/>
+ <path id='gpPt0' stroke-width='0.222' stroke='currentColor' d='M-1,0 h2 M0,-1 v2'/>
+ <path id='gpPt1' stroke-width='0.222' stroke='currentColor' d='M-1,-1 L1,1 M1,-1 L-1,1'/>
+ <path id='gpPt2' stroke-width='0.222' stroke='currentColor' d='M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1'/>
+ <rect id='gpPt3' stroke-width='0.222' stroke='currentColor' x='-1' y='-1' width='2' height='2'/>
+ <rect id='gpPt4' stroke-width='0.222' stroke='currentColor' fill='currentColor' x='-1' y='-1' width='2' height='2'/>
+ <circle id='gpPt5' stroke-width='0.222' stroke='currentColor' cx='0' cy='0' r='1'/>
+ <use xlink:href='#gpPt5' id='gpPt6' fill='currentColor' stroke='none'/>
+ <path id='gpPt7' stroke-width='0.222' stroke='currentColor' d='M0,-1.33 L-1.33,0.67 L1.33,0.67 z'/>
+ <use xlink:href='#gpPt7' id='gpPt8' fill='currentColor' stroke='none'/>
+ <use xlink:href='#gpPt7' id='gpPt9' stroke='currentColor' transform='rotate(180)'/>
+ <use xlink:href='#gpPt9' id='gpPt10' fill='currentColor' stroke='none'/>
+ <use xlink:href='#gpPt3' id='gpPt11' stroke='currentColor' transform='rotate(45)'/>
+ <use xlink:href='#gpPt11' id='gpPt12' fill='currentColor' stroke='none'/>
+ <path id='gpPt13' stroke-width='0.222' stroke='currentColor' d='M0,1.330 L1.265,0.411 L0.782,-1.067 L-0.782,-1.076 L-1.265,0.411 z'/>
+ <use xlink:href='#gpPt13' id='gpPt14' fill='currentColor' stroke='none'/>
+ <filter id='textbox' filterUnits='objectBoundingBox' x='0' y='0' height='1' width='1'>
+ <feFlood flood-color='white' flood-opacity='1' result='bgnd'/>
+ <feComposite in='SourceGraphic' in2='bgnd' operator='atop'/>
+ </filter>
+ <filter id='greybox' filterUnits='objectBoundingBox' x='0' y='0' height='1' width='1'>
+ <feFlood flood-color='lightgrey' flood-opacity='1' result='grey'/>
+ <feComposite in='SourceGraphic' in2='grey' operator='atop'/>
+ </filter>
+</defs>
+<g fill="none" color="white" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M89.31,422.40 L574.82,422.40 '/></g>
+<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M89.31,422.40 L98.31,422.40 M574.82,422.40 L565.82,422.40 '/> <g transform="translate(80.92,426.30)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
+ <text><tspan font-family="Arial" > 0</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M89.31,369.77 L574.82,369.77 '/></g>
+<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M89.31,369.77 L98.31,369.77 M574.82,369.77 L565.82,369.77 '/> <g transform="translate(80.92,373.67)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
+ <text><tspan font-family="Arial" > 5000</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M89.31,317.15 L574.82,317.15 '/></g>
+<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M89.31,317.15 L98.31,317.15 M574.82,317.15 L565.82,317.15 '/> <g transform="translate(80.92,321.05)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
+ <text><tspan font-family="Arial" > 10000</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M89.31,264.52 L574.82,264.52 '/></g>
+<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M89.31,264.52 L98.31,264.52 M574.82,264.52 L565.82,264.52 '/> <g transform="translate(80.92,268.42)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
+ <text><tspan font-family="Arial" > 15000</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M89.31,211.89 L574.82,211.89 '/></g>
+<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M89.31,211.89 L98.31,211.89 M574.82,211.89 L565.82,211.89 '/> <g transform="translate(80.92,215.79)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
+ <text><tspan font-family="Arial" > 20000</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M89.31,159.26 L574.82,159.26 '/></g>
+<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M89.31,159.26 L98.31,159.26 M574.82,159.26 L565.82,159.26 '/> <g transform="translate(80.92,163.16)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
+ <text><tspan font-family="Arial" > 25000</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M89.31,106.64 L574.82,106.64 '/></g>
+<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M89.31,106.64 L98.31,106.64 M574.82,106.64 L565.82,106.64 '/> <g transform="translate(80.92,110.54)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
+ <text><tspan font-family="Arial" > 30000</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M89.31,54.01 L574.82,54.01 '/></g>
+<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M89.31,54.01 L98.31,54.01 M574.82,54.01 L565.82,54.01 '/> <g transform="translate(80.92,57.91)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end">
+ <text><tspan font-family="Arial" > 35000</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M89.31,422.40 L89.31,54.01 '/></g>
+<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M89.31,422.40 L89.31,413.40 M89.31,54.01 L89.31,63.01 '/> <g transform="translate(89.31,444.30)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle">
+ <text><tspan font-family="Arial" >1994</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M105.49,422.40 L105.49,417.90 M105.49,54.01 L105.49,58.51 M121.68,422.40 L121.68,417.90 M121.68,54.01 L121.68,58.51
+ '/></g>
+<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M137.91,422.40 L137.91,54.01 '/></g>
+<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M137.91,422.40 L137.91,413.40 M137.91,54.01 L137.91,63.01 '/> <g transform="translate(137.91,444.30)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle">
+ <text><tspan font-family="Arial" >1997</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M154.04,422.40 L154.04,417.90 M154.04,54.01 L154.04,58.51 M170.23,422.40 L170.23,417.90 M170.23,54.01 L170.23,58.51
+ '/></g>
+<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M186.41,422.40 L186.41,54.01 '/></g>
+<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M186.41,422.40 L186.41,413.40 M186.41,54.01 L186.41,63.01 '/> <g transform="translate(186.41,444.30)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle">
+ <text><tspan font-family="Arial" >2000</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M202.64,422.40 L202.64,417.90 M202.64,54.01 L202.64,58.51 M218.78,422.40 L218.78,417.90 M218.78,54.01 L218.78,58.51
+ '/></g>
+<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M234.96,422.40 L234.96,54.01 '/></g>
+<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M234.96,422.40 L234.96,413.40 M234.96,54.01 L234.96,63.01 '/> <g transform="translate(234.96,444.30)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle">
+ <text><tspan font-family="Arial" >2003</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M251.15,422.40 L251.15,417.90 M251.15,54.01 L251.15,58.51 M267.37,422.40 L267.37,417.90 M267.37,54.01 L267.37,58.51
+ '/></g>
+<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M283.51,422.40 L283.51,54.01 '/></g>
+<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M283.51,422.40 L283.51,413.40 M283.51,54.01 L283.51,63.01 '/> <g transform="translate(283.51,444.30)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle">
+ <text><tspan font-family="Arial" >2006</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M299.70,422.40 L299.70,417.90 M299.70,54.01 L299.70,58.51 M315.88,422.40 L315.88,417.90 M315.88,54.01 L315.88,58.51
+ '/></g>
+<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M332.11,422.40 L332.11,54.01 '/></g>
+<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M332.11,422.40 L332.11,413.40 M332.11,54.01 L332.11,63.01 '/> <g transform="translate(332.11,444.30)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle">
+ <text><tspan font-family="Arial" >2009</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M348.25,422.40 L348.25,417.90 M348.25,54.01 L348.25,58.51 M364.43,422.40 L364.43,417.90 M364.43,54.01 L364.43,58.51
+ '/></g>
+<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M380.62,422.40 L380.62,54.01 '/></g>
+<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M380.62,422.40 L380.62,413.40 M380.62,54.01 L380.62,63.01 '/> <g transform="translate(380.62,444.30)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle">
+ <text><tspan font-family="Arial" >2012</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M396.84,422.40 L396.84,417.90 M396.84,54.01 L396.84,58.51 M412.98,422.40 L412.98,417.90 M412.98,54.01 L412.98,58.51
+ '/></g>
+<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M429.17,422.40 L429.17,54.01 '/></g>
+<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M429.17,422.40 L429.17,413.40 M429.17,54.01 L429.17,63.01 '/> <g transform="translate(429.17,444.30)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle">
+ <text><tspan font-family="Arial" >2015</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M445.35,422.40 L445.35,417.90 M445.35,54.01 L445.35,58.51 M461.58,422.40 L461.58,417.90 M461.58,54.01 L461.58,58.51
+ '/></g>
+<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M477.72,422.40 L477.72,54.01 '/></g>
+<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M477.72,422.40 L477.72,413.40 M477.72,54.01 L477.72,63.01 '/> <g transform="translate(477.72,444.30)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle">
+ <text><tspan font-family="Arial" >2018</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M493.90,422.40 L493.90,417.90 M493.90,54.01 L493.90,58.51 M510.09,422.40 L510.09,417.90 M510.09,54.01 L510.09,58.51
+ '/></g>
+<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M526.31,422.40 L526.31,54.01 '/></g>
+<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M526.31,422.40 L526.31,413.40 M526.31,54.01 L526.31,63.01 '/> <g transform="translate(526.31,444.30)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle">
+ <text><tspan font-family="Arial" >2021</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M542.45,422.40 L542.45,417.90 M542.45,54.01 L542.45,58.51 M558.64,422.40 L558.64,417.90 M558.64,54.01 L558.64,58.51
+ '/></g>
+<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M574.82,422.40 L574.82,54.01 '/></g>
+<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M574.82,422.40 L574.82,413.40 M574.82,54.01 L574.82,63.01 '/> <g transform="translate(574.82,444.30)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle">
+ <text><tspan font-family="Arial" >2024</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M89.31,54.01 L89.31,422.40 L574.82,422.40 L574.82,54.01 L89.31,54.01 Z '/></g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <g transform="translate(19.18,238.21) rotate(270)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle">
+ <text><tspan font-family="Arial" >Ports Count</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <g transform="translate(332.06,471.30)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle">
+ <text><tspan font-family="Arial" >Year</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+ <g id="gnuplot_plot_1" ><title>192</title>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='rgb(255, 0, 0)' d='M121.66,417.30 L137.87,412.75 L154.04,405.48 L170.22,395.60 L186.39,382.97 L202.61,365.08 L218.78,340.44 L234.95,324.78
+ L251.12,301.44 L267.34,279.95 L283.51,262.15 L299.69,239.14 L315.86,223.85 L332.08,207.79 L348.25,194.85 L364.42,181.03
+ L380.59,177.26 L396.81,168.18 L412.98,163.02 L429.16,164.27 L445.33,152.21 L461.55,141.28 L477.72,129.10 L493.89,120.86
+ L510.06,118.98 L526.28,117.68 L542.45,105.08 '/></g>
+ </g>
+<g fill="none" color="white" stroke="rgb(255, 0, 0)" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="black" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M89.31,54.01 L89.31,422.40 L574.82,422.40 L574.82,54.01 L89.31,54.01 Z '/></g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <g transform="translate(332.06,30.91)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle">
+ <text><tspan font-family="Arial" >Number of ports over the year</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+</g>
+</svg>
+
diff --git a/documentation/static/images/books/fdp-primer/weblate-documents.png b/documentation/static/images/books/fdp-primer/weblate-documents.png
new file mode 100644
index 0000000000..4f51a8b1bc
--- /dev/null
+++ b/documentation/static/images/books/fdp-primer/weblate-documents.png
Binary files differ
diff --git a/documentation/static/images/books/fdp-primer/weblate-languages.png b/documentation/static/images/books/fdp-primer/weblate-languages.png
new file mode 100644
index 0000000000..4b3e24d9e4
--- /dev/null
+++ b/documentation/static/images/books/fdp-primer/weblate-languages.png
Binary files differ
diff --git a/documentation/static/images/books/fdp-primer/weblate-login.png b/documentation/static/images/books/fdp-primer/weblate-login.png
new file mode 100644
index 0000000000..d57ec47c09
--- /dev/null
+++ b/documentation/static/images/books/fdp-primer/weblate-login.png
Binary files differ
diff --git a/documentation/static/images/books/fdp-primer/weblate-offline.png b/documentation/static/images/books/fdp-primer/weblate-offline.png
new file mode 100644
index 0000000000..87badbd9cc
--- /dev/null
+++ b/documentation/static/images/books/fdp-primer/weblate-offline.png
Binary files differ
diff --git a/documentation/static/images/books/fdp-primer/weblate-revision1.png b/documentation/static/images/books/fdp-primer/weblate-revision1.png
new file mode 100644
index 0000000000..5f6f9c1d2c
--- /dev/null
+++ b/documentation/static/images/books/fdp-primer/weblate-revision1.png
Binary files differ
diff --git a/documentation/static/images/books/fdp-primer/weblate-revision2.png b/documentation/static/images/books/fdp-primer/weblate-revision2.png
new file mode 100644
index 0000000000..8cea25cc0e
--- /dev/null
+++ b/documentation/static/images/books/fdp-primer/weblate-revision2.png
Binary files differ
diff --git a/documentation/static/images/books/fdp-primer/weblate-translate.png b/documentation/static/images/books/fdp-primer/weblate-translate.png
new file mode 100644
index 0000000000..702837a3d5
--- /dev/null
+++ b/documentation/static/images/books/fdp-primer/weblate-translate.png
Binary files differ
diff --git a/documentation/static/images/books/fdp-primer/weblate_automatic_suggestion_01.png b/documentation/static/images/books/fdp-primer/weblate_automatic_suggestion_01.png
new file mode 100644
index 0000000000..989d1d70bb
--- /dev/null
+++ b/documentation/static/images/books/fdp-primer/weblate_automatic_suggestion_01.png
Binary files differ
diff --git a/documentation/static/images/books/fdp-primer/weblate_automatic_suggestion_02.png b/documentation/static/images/books/fdp-primer/weblate_automatic_suggestion_02.png
new file mode 100644
index 0000000000..cb8956ce71
--- /dev/null
+++ b/documentation/static/images/books/fdp-primer/weblate_automatic_suggestion_02.png
Binary files differ
diff --git a/documentation/static/images/books/fdp-primer/weblate_automatic_suggestion_03.png b/documentation/static/images/books/fdp-primer/weblate_automatic_suggestion_03.png
new file mode 100644
index 0000000000..c53bdf98c2
--- /dev/null
+++ b/documentation/static/images/books/fdp-primer/weblate_automatic_suggestion_03.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-adduser1.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-adduser1.png
index 5887943b92..0b2db2ec8d 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-adduser1.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-adduser1.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-adduser2.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-adduser2.png
index f9c49a2c83..b12664bfb9 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-adduser2.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-adduser2.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-adduser3.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-adduser3.png
index b6406fe9a1..b1d74c2e45 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-adduser3.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-adduser3.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-boot-options-menu.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-boot-options-menu.png
index 2a1bb93930..266f8658e6 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-boot-options-menu.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-boot-options-menu.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-choose-mode.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-choose-mode.png
index 27f1fcf97c..5c872ee934 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-choose-mode.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-choose-mode.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-config-components.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-config-components.png
index 2c07b69390..91b1f5f6cd 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-config-components.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-config-components.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-config-hostname.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-config-hostname.png
index 759e0cffe9..61c38d1380 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-config-hostname.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-config-hostname.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-config-services.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-config-services.png
index ec72879731..0c858fafa6 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-config-services.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-config-services.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-ipv4-dhcp.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-ipv4-dhcp.png
index 2ceac8a74e..520cd7c4c1 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-ipv4-dhcp.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-ipv4-dhcp.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-ipv4-static.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-ipv4-static.png
index 3489984788..4c3ec43f32 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-ipv4-static.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-ipv4-static.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-ipv4.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-ipv4.png
index 549d7b913c..2ef8b16dc4 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-ipv4.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-ipv4.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-ipv6-static.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-ipv6-static.png
index d92e2e6f8a..cb444f1ac7 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-ipv6-static.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-ipv6-static.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-ipv6.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-ipv6.png
index 78bbcd156c..5a8c740d11 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-ipv6.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-ipv6.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-slaac.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-slaac.png
index f76656df08..c0503ed888 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-slaac.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface-slaac.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface.png
index 81728c2ef2..96be08be15 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-interface.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-ipv4-dns.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-ipv4-dns.png
index ad3c45c7e7..1f11010004 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-ipv4-dns.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-network-ipv4-dns.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-wireless-accesspoints.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-wireless-accesspoints.png
index 8b74b1c27f..22a4d8454d 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-wireless-accesspoints.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-wireless-accesspoints.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-wireless-scan.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-wireless-scan.png
index 98c473bbca..596ba50b2d 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-wireless-scan.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-wireless-scan.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-wireless-wpa2setup.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-wireless-wpa2setup.png
index 589de18bb3..a853e66da3 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-wireless-wpa2setup.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-configure-wireless-wpa2setup.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-distfile-extracting.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-distfile-extracting.png
index ecdc5594e2..6ed7fb14c8 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-distfile-extracting.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-distfile-extracting.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-distfile-fetching.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-distfile-fetching.png
index ed0e796751..ba3ce302f1 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-distfile-fetching.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-distfile-fetching.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-distfile-verifying.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-distfile-verifying.png
index e0377d1e69..10449892c5 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-distfile-verifying.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-distfile-verifying.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-final-confirmation.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-final-confirmation.png
index 11619219cc..43af3fec94 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-final-confirmation.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-final-confirmation.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-final-modification-shell.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-final-modification-shell.png
index 61c5a115ca..966e4fbb0b 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-final-modification-shell.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-final-modification-shell.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-finalconfiguration.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-finalconfiguration.png
index aa09c2a8ce..35efe49410 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-finalconfiguration.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-finalconfiguration.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-hardening.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-hardening.png
index a1df8e49fa..b462325871 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-hardening.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-hardening.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-keymap-10.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-keymap-10.png
index 5d76c5f6af..47531f61d7 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-keymap-10.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-keymap-10.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-keymap-loading.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-keymap-loading.png
index d1b05f56e5..d765128845 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-keymap-loading.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-keymap-loading.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-keymap-testing.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-keymap-testing.png
index 69cb77e1b2..6a077ccda6 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-keymap-testing.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-keymap-testing.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-mainexit.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-mainexit.png
index 5fbd539238..91a1cf40d8 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-mainexit.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-mainexit.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-netinstall-files.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-netinstall-files.png
index 0162cf5309..bc77748bee 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-netinstall-files.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-netinstall-files.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-netinstall-mirrorselect.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-netinstall-mirrorselect.png
index ade465494b..03c7fc3cd9 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-netinstall-mirrorselect.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-netinstall-mirrorselect.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-newboot-loader-menu.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-newboot-loader-menu.png
index b600bc48cb..8bb04a0a77 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-newboot-loader-menu.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-newboot-loader-menu.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-entire-part.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-entire-part.png
index 0333c2d49e..42f03d3962 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-entire-part.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-entire-part.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-guided-disk.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-guided-disk.png
index 2562a21896..26edcd926d 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-guided-disk.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-guided-disk.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-manual-addpart.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-manual-addpart.png
index fbab3ce4b2..f7df81b13a 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-manual-addpart.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-manual-addpart.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-manual-create.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-manual-create.png
index 7cd9ccdc52..6aa29777e7 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-manual-create.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-manual-create.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-manual-partscheme.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-manual-partscheme.png
index a1ce30cbfc..0352c03df6 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-manual-partscheme.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-manual-partscheme.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-review.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-review.png
index 0b7eae021d..f839fa5f84 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-review.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-part-review.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-post-root-passwd.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-post-root-passwd.png
index 5a644bf3b3..58a6a0d793 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-post-root-passwd.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-post-root-passwd.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-confirm.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-confirm.png
index 254aba69d3..21c8c5caa4 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-confirm.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-confirm.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-country.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-country.png
index 4a418864d7..fed5a5adf0 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-country.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-country.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-date.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-date.png
index f72d294d83..2941e99589 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-date.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-date.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-region.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-region.png
index 03d2138e64..550bfad7f6 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-region.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-region.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-time.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-time.png
index 3fe48c5e57..ae8f0af482 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-time.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-time.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-zone.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-zone.png
index 3a233bae52..d27e673814 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-zone.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-timezone-zone.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-ufs-warning.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-ufs-warning.png
index 93bfcfeb54..9fbe4c7b75 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-ufs-warning.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-ufs-warning.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-disk_info.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-disk_info.png
index ec4ada9c60..51c47f85a4 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-disk_info.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-disk_info.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-disk_select.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-disk_select.png
index 6829d62a68..188ffcba56 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-disk_select.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-disk_select.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-geli_password.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-geli_password.png
index b54405200a..0adb639917 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-geli_password.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-geli_password.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-init-encription.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-init-encription.png
index 27b6e48c3b..2b7a2791cf 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-init-encription.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-init-encription.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-menu.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-menu.png
index 05a300de06..86d782917f 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-menu.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-menu.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-partmenu.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-partmenu.png
index 8f4bb3feca..9640227c41 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-partmenu.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-partmenu.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-pool-name.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-pool-name.png
index 79b996a46f..0df1358be5 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-pool-name.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-pool-name.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-rescan-devices.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-rescan-devices.png
index 6286813021..6bf35f0faf 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-rescan-devices.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-rescan-devices.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-swap-amount.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-swap-amount.png
index 949cf83b61..c846d0bc53 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-swap-amount.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-swap-amount.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-vdev_invalid.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-vdev_invalid.png
index b2d9a1eab7..d4d3ad3a4f 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-vdev_invalid.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-vdev_invalid.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-vdev_type.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-vdev_type.png
index d5d777ce62..5bfd94cf7d 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-vdev_type.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-vdev_type.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-warning.png b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-warning.png
index eac97b5f00..101a62fed9 100644
--- a/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-warning.png
+++ b/documentation/static/images/books/handbook/bsdinstall/bsdinstall-zfs-warning.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/multimedia/pwcview.png b/documentation/static/images/books/handbook/multimedia/pwcview.png
new file mode 100644
index 0000000000..0a19f62bc3
--- /dev/null
+++ b/documentation/static/images/books/handbook/multimedia/pwcview.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/virtualization/parallels-freebsd1.png b/documentation/static/images/books/handbook/virtualization/parallels-freebsd1.png
index 9b9259230c..6dcb724e2b 100644
--- a/documentation/static/images/books/handbook/virtualization/parallels-freebsd1.png
+++ b/documentation/static/images/books/handbook/virtualization/parallels-freebsd1.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/virtualization/parallels-freebsd2.png b/documentation/static/images/books/handbook/virtualization/parallels-freebsd2.png
index 8ef4e74478..890e6af21e 100644
--- a/documentation/static/images/books/handbook/virtualization/parallels-freebsd2.png
+++ b/documentation/static/images/books/handbook/virtualization/parallels-freebsd2.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/virtualization/parallels-freebsd3.png b/documentation/static/images/books/handbook/virtualization/parallels-freebsd3.png
index c114191b5a..13e7ba1c3d 100644
--- a/documentation/static/images/books/handbook/virtualization/parallels-freebsd3.png
+++ b/documentation/static/images/books/handbook/virtualization/parallels-freebsd3.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/virtualization/parallels-freebsd4.png b/documentation/static/images/books/handbook/virtualization/parallels-freebsd4.png
index ae526c8aee..61bcfad4a1 100644
--- a/documentation/static/images/books/handbook/virtualization/parallels-freebsd4.png
+++ b/documentation/static/images/books/handbook/virtualization/parallels-freebsd4.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/virtualization/parallels-freebsd5.png b/documentation/static/images/books/handbook/virtualization/parallels-freebsd5.png
index d13d2b3925..6ee6eee47a 100644
--- a/documentation/static/images/books/handbook/virtualization/parallels-freebsd5.png
+++ b/documentation/static/images/books/handbook/virtualization/parallels-freebsd5.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/virtualization/parallels-freebsd6.png b/documentation/static/images/books/handbook/virtualization/parallels-freebsd6.png
index 78051ab315..75c66b8ff0 100644
--- a/documentation/static/images/books/handbook/virtualization/parallels-freebsd6.png
+++ b/documentation/static/images/books/handbook/virtualization/parallels-freebsd6.png
Binary files differ
diff --git a/documentation/static/images/books/handbook/virtualization/parallels-freebsd7.png b/documentation/static/images/books/handbook/virtualization/parallels-freebsd7.png
index dd4c21524a..bd09dfe3e2 100644
--- a/documentation/static/images/books/handbook/virtualization/parallels-freebsd7.png
+++ b/documentation/static/images/books/handbook/virtualization/parallels-freebsd7.png
Binary files differ
diff --git a/documentation/static/pgpkeys/README b/documentation/static/pgpkeys/README
index 42de378031..2bceb5a3ea 100644
--- a/documentation/static/pgpkeys/README
+++ b/documentation/static/pgpkeys/README
@@ -2,10 +2,10 @@
How to add your key to the list
===============================
-The addkey.sh script will export your key and generate the correct
-incantations to have your key listed in the "PGP Keys" chapter.
-It was written for GnuPG, but shouldn't be difficult to modify to use
-PGP if you absolutely won't use GnuPG.
+The addkey.sh script (in documentation/tools/) will export your key
+and generate the correct incantations to have your key listed in the
+"PGP Keys" chapter. It was written for GnuPG, but shouldn't be
+difficult to modify to use PGP if you absolutely won't use GnuPG.
For addkey.sh to perform its magic, gpg must be in your path, and the
key(s) you wish to export must be present in the default keyring or in
diff --git a/documentation/static/pgpkeys/acm.key b/documentation/static/pgpkeys/acm.key
index 79a8bca83b..59af933a99 100644
--- a/documentation/static/pgpkeys/acm.key
+++ b/documentation/static/pgpkeys/acm.key
@@ -1,11 +1,12 @@
-// sh addkey.sh acm 82E1399C11E68208 ;
+// sh addkey.sh acm 335B9246BA5E30F4 ;
[.literal-block-margin]
....
-pub rsa4096/82E1399C11E68208 2015-06-17 [caduca: 2018-06-16]
- Huella de clave = 9485 3AA6 4C32 6543 2C83 8201 82E1 399C 11E6 8208
-uid Alonso Cardenas Marquez <acm@FreeBSD.org>
-sub rsa4096/8DAA3CCE41FD26B2 2015-06-17 [caduca: 2018-06-16]
+pub ed25519/335B9246BA5E30F4 2023-09-20 [SC] [expires: 2026-09-19]
+ Key fingerprint = 54DC 99D8 874A DB24 10F3 A8D7 335B 9246 BA5E 30F4
+uid Alonso Cardenas Marquez (Personal) <acardenas@bsd-peru.org>
+uid Jose Alonso Cardenas Marquez (FreeBSD) <acm@FreeBSD.org>
+sub cv25519/B89E506CD25B1E5F 2023-09-20 [E] [expires: 2026-09-19]
....
@@ -13,54 +14,20 @@ sub rsa4096/8DAA3CCE41FD26B2 2015-06-17 [caduca: 2018-06-16]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-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
-HEvJXW3dFBz/0Anl78RlsLBqhA==
-=tXGj
+mDMEZQqPlRYJKwYBBAHaRw8BAQdAWsruAPh+9Grt3Lbt69qfrzib6stW8lEXPLDr
+PE1l9GS0OEpvc2UgQWxvbnNvIENhcmRlbmFzIE1hcnF1ZXogKEZyZWVCU0QpIDxh
+Y21ARnJlZUJTRC5vcmc+iJkEExYKAEEWIQRU3JnYh0rbJBDzqNczW5JGul4w9AUC
+ZQqPlQIbAwUJBaOagAULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgAAKCRAzW5JG
+ul4w9LnQAP4iUs1QdEM5CWkrrGlopzWFP/7tLrj444Y6TaQ/XILm+AD/SavpSaZi
+8o6Y0nW+ji7IEo23tXJCBbvCu+D4ByG/ogG0O0Fsb25zbyBDYXJkZW5hcyBNYXJx
+dWV6IChQZXJzb25hbCkgPGFjYXJkZW5hc0Bic2QtcGVydS5vcmc+iJkEExYKAEEW
+IQRU3JnYh0rbJBDzqNczW5JGul4w9AUCZQqSpwIbAwUJBaOagAULCQgHAgIiAgYV
+CgkICwIEFgIDAQIeBwIXgAAKCRAzW5JGul4w9CGHAP0a5TKOWMp2ZEWZ3ZmaOS8B
+bicj9TaApqDqc3X3zhAzZgD/eocgJJuEb5aGU0sNGveaJ/BMBY2lw7RlpC7kQZIF
+VAW4OARlCo+VEgorBgEEAZdVAQUBAQdA+0MeWj7TM2Q0JFZ7TWPwcPNwQ31thk8m
+a+ZdJwXTRBMDAQgHiH4EGBYKACYWIQRU3JnYh0rbJBDzqNczW5JGul4w9AUCZQqP
+lQIbDAUJBaOagAAKCRAzW5JGul4w9ERZAQDkINq0jnrx+Own9iSmLlyKuywGhTwV
+uPKfKEY2pPvnwQD+JfJd1wcHsF4ZbWZTac/I/bWaQjaUEnE8rKD2uCROVAs=
+=x7QJ
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/akiyano.key b/documentation/static/pgpkeys/akiyano.key
new file mode 100644
index 0000000000..e30a967da5
--- /dev/null
+++ b/documentation/static/pgpkeys/akiyano.key
@@ -0,0 +1,44 @@
+// sh addkey.sh akiyano E1C60F92DEAC657A ;
+
+[.literal-block-margin]
+....
+pub 2048R/E1C60F92DEAC657A 2023-11-16 [expires: 2026-10-01]
+ Key fingerprint = 1961 F23B F66C 0A80 9139 3B1F E1C6 0F92 DEAC 657A
+uid Arthur Kiyanovski <akiyano@FreeBSD.org>
+sub 2048R/925C50410C977517 2023-11-16 [expires: 2026-10-01]
+
+....
+
+[.literal-block-margin]
+....
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQENBGVWmCEBCADU2r/FPoMMmqlMupbzdAy/JYCNCWqSphID5fu6UIkd07tkVJQ2
++aSWNuX80v9L9eLpvHOTMGQqzVXoq3cBI1dddw6jadEpq7OUfpogbJMCaZIrlN5J
+M0b7LMIjEdhhC+3NUDV0hcmGkjRHaUNb1sIXbDgX6JRb/e36HoervtIWhQOzr+aW
+pqh0OflxHDGxrJxdTofuyu8NO/tmd1/NLdebVLh5oXibbRO7yuDAUCQ/mOyscrUA
+Vi05UrOJjv+6KG0uh+JuoHH+4abJDrQBhnSSxCwiOnWGja73wrJvL111KCdsWfcH
+nd4cMUsAjPQ5tKOfplqjAzrdhq8zngYFDA2fABEBAAG0J0FydGh1ciBLaXlhbm92
+c2tpIDxha2l5YW5vQEZyZWVCU0Qub3JnPokBPgQTAQIAKAUCZVaYIQIbAwUJBWhH
+AAYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQ4cYPkt6sZXqpUwgAkBwx1ZvN
+vdUrcMhdSQywgG0fBPOLJ/+hWztB2ofo8DhKdKKwOiLMkzNNZOi8v0TuN8WxiHv4
+skC7pZyWgbxsCf+14PBHRSVbpCuTJzS4Er9Apt2RloNa850LjzLFnuUGkHbwgA3o
+0mjZJD4L8EBKfc8SkYIfT/1RcPycyv2Ee3NmB0dzeffZCY4s5jyfygN4ArUR4oAw
+Lex6pahcb3GO4LdYChC1ouf2u0+Ypp0nOjWbdwUXzt5ZpKYtPzhDtSfqRDfeWflh
+16fIhv/w9IQym7khjCbi4lTTmiHECHGdkYwoD82Qunp9LaUVpT+kuPj1B/CwBJsB
+R/93LjaK9PqDlrkBDQRlVpghAQgA2C1f3qcXH23G8m8RUrkciJKogUrcqOqimIZD
+4EGXHU/uxInNWHD6bRiMiKn1lu9d2MCCZL3953xKdBX/i25Qz8jIg+Q62GhNuGp8
+pkv0FcjKVfmUOhXdmaUKt4rSp945WPsADJWvIqYQqj3yffZQ0ua2jEdz0EvPwfXk
+4qQWASite2pqrulUnWV4ihaCI6nZRSDprNZ6Cub2kEbHG97Wpp6AiUIfdVIwyv1N
+tiqQ1c2GzFChHwbF9xQjMB+MoaUrt69O7g3ArupU/FBVSb+LurfVmpu6MunTwM5Z
+USP3RGRG/e60LJxtauzdx2MVpEU1/voVtCahIxmPlJGZjbCiaQARAQABiQElBBgB
+AgAPBQJlVpghAhsMBQkFaEcAAAoJEOHGD5LerGV6CtwH/2oeSofs2J2q++44dyzD
+rSH/2F/dughPlIqndOi5o+gE498foVYBWncpt61b3//26pg4anOtv+KSb/j0iYqv
+Uk8dATViwhLQmOnRgpn4Z1G3brNzYIW3dPjo/GMM4xiTac3e8e5IDjFjp/M+94ye
+0bOT6p8nGXETCJeVB8ck8+CTbJRO2PPC9WX+56IFH2JCRHtxckMuyEP6mkXCn49G
+QZ6FmN1uGXA6YHJOG2JkCmbFSDogRBFsGfXFGoFrRMFoLeU/pDa2x5kS94Mv0sHZ
+2GwXDpmzLQpiqY8/WE9ipWlp2j+5IlQMTjI6GpN7uSe7sT1co5GC3TsiwEPV0VDD
+CyE=
+=QuGW
+-----END PGP PUBLIC KEY BLOCK-----
+....
diff --git a/documentation/static/pgpkeys/alfredo.key b/documentation/static/pgpkeys/alfredo.key
index 7a877a3c55..7d52c8fe00 100644
--- a/documentation/static/pgpkeys/alfredo.key
+++ b/documentation/static/pgpkeys/alfredo.key
@@ -1,11 +1,11 @@
-// sh addkey.sh alfredo 72D464204FA02D14 ;
+// sh addkey.sh alfredo 021E15FB0068DAEC ;
[.literal-block-margin]
....
-pub rsa4096/72D464204FA02D14 2020-01-29 [SC] [expires: 2023-01-28]
- Key fingerprint = DA2D AFB9 96F2 9661 8141 0A04 72D4 6420 4FA0 2D14
-uid Alfredo Dal'Ava Junior <alfredo@freebsd.org>
-sub rsa4096/DF8F858B2C0C8187 2020-01-29 [E] [expires: 2023-01-28]
+pub rsa3072/021E15FB0068DAEC 2023-02-28 [SC] [expires: 2026-02-27]
+ Key fingerprint = A79E 0CC2 80E9 531F 2C40 5FB9 021E 15FB 0068 DAEC
+uid Alfredo Dal'Ava Junior <alfredo@FreeBSD.org>
+sub rsa3072/32843CC2278F8923 2023-02-28 [E] [expires: 2026-02-27]
....
@@ -13,55 +13,43 @@ sub rsa4096/DF8F858B2C0C8187 2020-01-29 [E] [expires: 2023-01-28]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-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
-12oZOaFGQwOYEM/3Z8Uya/qz3H4=
-=Fmpm
+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
+=9+DQ
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/ashish.key b/documentation/static/pgpkeys/ashish.key
index 39912df1df..0401df707f 100644
--- a/documentation/static/pgpkeys/ashish.key
+++ b/documentation/static/pgpkeys/ashish.key
@@ -2,7 +2,7 @@
[.literal-block-margin]
....
-pub rsa4096/C746CFA9E74FA4B0 2010-04-13 [SC] [expires: 2023-07-22]
+pub rsa4096/C746CFA9E74FA4B0 2010-04-13 [SC] [expires: 2025-07-21]
Key fingerprint = F682 CDCC 39DC 0FEA E116 20B6 C746 CFA9 E74F A4B0
uid Ashish SHUKLA (Lost Case) <ashish.is@lostca.se>
uid Ashish SHUKLA <ashish@INET6.IN>
@@ -1068,19281 +1068,19469 @@ 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
-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
+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
-ILbHRs+p50+ksAUCYWzXFQUJGPbRAQAKCRDHRs+p50+ksAwREACcU05uBHe1EcyQ
-lfZFZNGjkkco8ga1M4lwwReODi9dFy6fz1aj5sB7oePy61tfD9sTSwStgIZZNYOl
-2UPAF+ivFoM/bAn0vaMgoHJPPh2/W7XBc9klhWGaKooCdSbtSovjbwcQb28i9Wmr
-pstdlcwRtDARjkzCELtXcV25xazzVy579HSBacnh0Q6qWOEXtVtvBbglP4G7MjSg
-ot0dL8Cwkr381q6/bXeCjF1nQgxvblautOV0Jgmx4evn/+lVrpcFbKHo8SdlrI1F
-CwNueMVFO1SiqWUV7ALxRllpMev5t6yJED/eTtIQk93wsRevNXuP1DTgPVdK1mjP
-gxReEimZ3yqcFXBEU9TL/JJ5FCXna2aRV2KaK3T2cNYhToZ0F5x52o0fRhQgQw3V
-/JmvNCM36TBaNHA7NGXOmNU6j5yMeil/xnLg4aUQGT2KmZ3eyAG8eVmTqqrEnq6E
-aZNGljuWLwuoL7BRbNNnocdEsM1EsRpaK51/w3CHmp1Rh95GsK/bbmAr0/YNwhRh
-lG6fk1AckycK9y70xpOM51FAy0a7Sz5f2reKOSRoHAb3OieRQGzS1GjhclpqsIcI
-RczQ9EC009khA4r5DqEgP1JnGm7j9xNz2dauHKGFCi4O5ENSF0UMhovZ6tTx1X59
-QjLgZlMLD6bTEXvYMr6LsTPP7gjv5rQjQXNoaXNoIFNIVUtMQSA8d2FoamF2YUBw
-ZXJsLm9yZy5pbj6JAkUEMAEKAC8FAlEjOggoHSBUaGlzIHVzZXIvZW1haWwgaXMg
-bm90IGFjdGl2ZSBhbnltb3JlLgAKCRDHRs+p50+ksHNSEACmiGtMDpAc53dKnB1T
-bWuia595zEMV1AaSEoYHaVBXzU3Et94rWr/UFArNl9NznDCOjdC5A74YHQhAG1dr
-Kr6TQjeD3m4cyoU5k8kjIDyqdUeNKdxrBxWJRvcVhAfgKegJfGkO/O29JMf7KIFV
-MwsdbzaJcX+UZ2epMG4cHm0GSyBXAsijVy5DHxB/vzvGGjkWYNSmBhKSe2i3ABui
-wFxO22k1JwN2AbJRSgslzRzT5CWz5TaOFAPwUZaSoYFxxtKDFijWIKzoqh5xzt+q
-wUVb9hMy5PC4vbpqfHzwStPmCpIFcmISfmUhkTtF/ZBI4b4zOW2WAEmzqjY2SL46
-0qaKGEpigDYhN+lwGZ0j/JYAF672bNt8wMSFh/KDCJaBudgHX65IXfsrwgRNkO5W
-bzXFm21wtQJ5kV14fToMNfsA9NObjreLLICFPGZBzIY6peSGkOVNp4V8gZb8HHBc
-SbzjJ7rmi3vu6rUZMKpgGLNg8h/UrOVF8sZvaaQqoWSRDK2tEIb+h0zFms1VgT32
-oVH8SIE4yn1+5PczFNXvNoVZKMoqwMReZv+7CxgtmovWTJHXyO+W4RZgchEuXxLM
-aJMOf3wkg8PT3vcgyItrRFVRNrbKSwFk0tk2fhabUpKFent4K0T2CYJTPN/C0wXv
-JJ3xMLD4UXR5v28z+HSUrOYgvokCNwQTAQoAIQUCS8a+RAIbAwULCQgHAwUVCgkI
-CwUWAgMBAAIeAQIXgAAKCRDHRs+p50+ksO3jD/0QMQAJsj7sV0ESgzd5uVFaMdXe
-a38v+Z4Y0RpJ1yYhSFS3uLPtmU9WJPCWy4g9CCP82vUCjhRhXPii81L0pv5CToXS
-ZBLB9nsKeYdGQiGGmQi8DJwrsbT0hYEcvdD+hl5dUwHQfkSdFT8uGTPkOzuFBvuv
-9nZHUcfJX/inHp/gvlo/+l8GKRWVp9lE+RpF8erCR/ARz27XtcfWiFPOfMGp9re0
-caOF1YBiYczW3y7rV+4HGlr9GoDcrMqRrGWvfeotFlzEN7Za/LBb5ue3maAS2/EB
-NcNyKlItcnN/AsQAgfJFrY02N18JDC2vQUw5D19SBIbg8spaOlIr04jNd4hIAJPg
-6qAUh+E9PzBmbh1VujdVF8UZOQo0DGhxsX4sq16JqSj77QwFBkvjt0fV95meSpoi
-hlaGMLr7kXFNANJSV+DB8zPNhhlC6/OVDTq0ZePA+9M9uUVbV6bmv775vzvhvg78
-NTSgrUHolMHCR/EKo5BInTgww6hQ/i0MdH2L4X753hBRSL8jjrUqkwV8LA01PSf5
-0RMAE0vAC0Lk5zFVUNpVcL5tAREedQocNwbfLp3Dd3N1j8aNg+F1C3NUqK6KnI5r
-+x8qGgZiZd0yREkbnFGrKKpyURtVKJyOw5bXu+KoUt9XG4xvVe+ucAIZ+G/bBS3O
-AuF2QllpbnNu1BAb/4hKBBARCgAKBQJLxr79AwUCeAAKCRAfL4QQdi5edKdfAKCr
-jiHOZ5JIivwzLry2ap2YHujVfQCgjPA+vWfbb+ebZUgPf3vaASryGEGJASIEEAEC
-AAwFAkvGzu0FAwASdQAACgkQlxC4m8pXrXw/hwf/d2HyzKKoBkgHWnV9jJC7CFo3
-j5/7/cMnFJ79NHbKmhVOTJy1FmziQaHm+J5PkK4cFDGK7tHpuatJiOCcwycOAsZU
-hy3axkotXdj5Jrs2nxO/bh3T2+RRdJRQR6+yszwryi76xoc3L9/wZXU5VVRREhcS
-OdFgQoEf9C/qtYq3d98Az3nFmleyb54Vud8LQbVEMp6NZuvuUZfClMWNgfADEd0U
-4Iu+5HoXK27Vs/vhhlAjDRE+etQUT7yG+TQNLus8C2UeW3hVQRYdHMNhJmTU7sNl
-13+vamvehYNqDaOxVhQoaDXASJK0k9lMp57NVEbLxQRdBTDmNCeGBEK62kG4DYkB
-IgQQAQIADAUCS8bQcgUDABJ1AAAKCRCXELibyletfIY+B/9F3wR6rOI5sejppynd
-wRc1wCx33vFK+OPiZ5AtmVk8Mzgr5X5VPnXcKcYTiGnk2leCvFXvPPaub+1VreJg
-pPVF5170sH3VPyy5n6rvI5ym2T7GouIX770rsuVE620sq4GeR/jYSUgoLMeb+5JZ
-u2dGd8QzuMv+EwmT3kg5BBt98VdJbLdCb7d49fEU8z5QH/qxzHphwCU0YMfiFNah
-59F3te+DMlShmPUnWs9OrfQTQ4wN5qmUBCT7iAGvsRHJEaZs6a1SVg7FZSjSzz4L
-9KcQyUNAtpIQP0qHHBS+lkpf0xLATqAQimBT6dCV1nZs2xoxUfnBLKaFKK0uO25j
-muChiQEiBBABAgAMBQJL2IW6BQMAEnUAAAoJEJcQuJvKV618CQYH/RFH76Y70sh/
-O2Wo8oWB/szLLvBrw+pyXFa2RMwqG7PDNK5ga/fYop2B0yT1ZA8R4Dqk7tzEF1ee
-07LPspGBIs5+s68uETysAAtzW5LodyAHFmHtkRfMzmGYV/Bx9EluCP4g5T71tjmT
-z8TDLB4Ik75k1wV/Ey+RfdoEzEehitppEekWj1zt6DGHAIjCLuztH6DIVOdY4lS8
-zv8Ih1npvGGUa+XS4ZMiwT4t9rpOP0mq4ygm7pB/RU/Z+evCjbA7elauotXZMbkA
-MK1IeExHTXuk7rTE4MCo7REZVqOkplk8KGO2ADHLppeUtZLvtS7JCFja7jdbFjM5
-xQcD+st5yDyJASIEEAECAAwFAkvpqz8FAwASdQAACgkQlxC4m8pXrXxDVwgArT/i
-eFqaYe2TD5ZAaite1y+fjV0cpZFWRwBGYB9/I/TIglxMEY0Dpw7JKxvN4JEQZfWX
-KE1rhAkmrjk6mbZVfEUvZniJ0+QrUpuDdwsOYCLDJDzaObCAnwJ0OaL+KlalHw7W
-ndMgbVQl+Ky9u9JBGFpkcqbSSBqT87TtMRRVGyeCLKvG5gPfQTitToVnNwDxRW9l
-XDmEt9KJ4KYzOagAPAzAUOpU8YV4pQ9aS53LZ6PGxk+A2hc5CXRyVWG0h8wldVn3
-pNS5NTHoJL+iPapBUBGPY/lZI36Kz5tmj9nrYRES+1ErBPsG0y0FmurKqa6coPVn
-H68ti/npxMUJDskrJYkBIgQQAQIADAUCS/t10AUDABJ1AAAKCRCXELibyletfJLx
-B/4hw4GqLmWMpoUkDzZPBOW9JrBwNrogRsAMCe7sK8Mt2zKgNQgaLoLr/Y6OATx0
-Enor075YdqKh3bK+0PIQRjPXsrBQfW6yprUPT/WxjyU6cm+ytKoR7LNK9ktnG8vY
-KDKy50qSfBkTSbjnSA/O1qSqaCfcc2edTJsGkyjDZ29xvVbcMlNDtw1GvCQE/+Ex
-jwnbQBSIwrwu66JXj0x4O44HxJ4nBlP4tEMk9dIoCrfEZyvLsElKuSDjjqB+VXZT
-C6fnt2h76OGe++lvQIFTYpqCPZP3Qzm9jC3jgXWNIxEh7EHqN7WTdT28iDigS2MV
-fQp2iK8DwTVj0eYsKPOk6ir6iQEiBBABAgAMBQJMDJmHBQMAEnUAAAoJEJcQuJvK
-V6183TMH/igYkztJa68nZoPLxJZpTb4yaw++GP+f8FWxMRDjURsdqnQHniyBKdPg
-OCJg1sgMbdk7+L/eREQSZiOdqqLB9jplgCH2H5IHItrMpOZfu4WKWxmMzPmJ8LZB
-u61mE0PmZUVDTNwkb9TPkRg0blmRIHniOHvjjGRRvLNeJJtYsTmRqB4CJJNfD5F0
-sbVF6r5glNXwhQy8G/Ptd1I5ulFUo/H1CKhH7JyQhoHKpsxONv91HmxyWhnW4yjf
-5ZI8h0uQ4CbheGPKKdwQfljsICSVSMm8e45VJURXF7gTBqajLuITuKBBjhCJF6Bk
-hkSEJl9Go0POpTE1m9svjhHCAxvHqU2IRgQQEQIABgUCTDwGhAAKCRA1PcpWtLvz
-xxAZAJwJ37SwQ091Z9YI/+iv8dNtFj9TZwCeMvKBirEipEuOhvQw3zKqGoUTociJ
-ASIEEAECAAwFAkwdvg4FAwASdQAACgkQlxC4m8pXrXxQ7Qf/fH+uqPUReOft/Iyv
-A0NONDgt5TJs1NXFaTcM1T8EqseZfcOM2xuxdgIBDYv5JQjDiwsp/mR/Kgo3zTdo
-+Ogbjjgkvyb2EWaZuGSx/XGwEZ0iQTGEv1Bg9UZCpQj8ykpgEPNGKmtrTiU91sze
-E+y9FzFf+4Hq9IYYtALvGdYN5PAyplPMxD8kZmLCNoA7wJD7IXc6PqOyVLE2bKUA
-xHw4bjZvm9glXx1Men6fsQxjqPOUDXtvSZs8qFruahPM0+KiFLYGmf2yxNCEn/AZ
-NaUSfNJc4E82oHNvVcwX3CDZZE40+0DmXxDzXOFrJM1F6BRX+b7NSHpFDu+QCI1Y
-P83AFYkBIgQQAQIADAUCTC7hrQUDABJ1AAAKCRCXELibyletfKUIB/9RSOKS7nma
-tUA51uho0KXC8n8yA95uyDAWYq4JsarMqBxko4sSKNc0qU3KjRE0uYuzbchX+wGk
-f2cnt1YCw6NfzYpDJ3DKa55oZJLid4EV4ZxM1jWC32WbyzB98r2JTb+50Jgu2OPT
-90IwO46b7Jl9JaXv+zgjYu09VpT8L8qmQ9W+x+PjfDIG9xadNc7fgZtEbO9Bo/e6
-7YiEYgXNl+NlkTPKpNEjGsjgacKAaq7Xy4ZKcRj/eUMnND4dK5knvzX/cWaxBZwR
-QMpcn6ii7XtQoYbP5N0SG+oY1lAzA3x0QUjh9jFU37zlii+Qlj49LDSaEKUR32xS
-QYIwWh1I+H94iQEiBBABAgAMBQJMQK4IBQMAEnUAAAoJEJcQuJvKV618ev8IAJrY
-KUj5xbE/taPx55aFeo8GQTskh3ts/9vE3dGw4rQwu+W39Sab5RCV5VkC4nyoj4CX
-aSO7zw98AiPAzg5kY0atdXJ3n5h/InjjWgEy2tL78T8wkC6J5YMOVtv7FZ40c/uP
-wellgcUT86DhzW7byrkGcf2c/XklrwGrbYr9FN80Lbtceto/YGOo9GFhCioEt5au
-IcP+Z0uVIbCrHrjGHJYE5g3AAczSOO7EPGoc2Y0KTeCitGq6CG05u9z1eRjmt+sh
-B4s9z/TgcD4hj353HeB/PwvGBFWtlN7T8qWrDLsVmdZOnHGMQHS2CUjDmF7WBhbX
-y7MrNA0g9gZsuXEaCZKIRgQQEQIABgUCTK0PCQAKCRCwKi5plrGW/tYYAJ9UM03Y
-K+ab9mcLhJDUTcu8ZEgd2ACfTRZ9sngFTHVHMNBxK81L/GOYB5KJASIEEAECAAwF
-AkxR0ZEFAwASdQAACgkQlxC4m8pXrXyh/wf+PXifCu1kjPHZrrb9lP3lz1N17+3Y
-Jp4U8MKqbvxa2BqVOXfBzzjmhIhe/YSZ1eNI9Ju8N8DgF+5KSnh8A7wMNS8tvu1U
-hI9i4HF0L1pHCbmdP/mEiUYa7aYVyWbVp8hKd2jJ1ruXBDHNSozAaardktp2U4BN
-pgzzBrA06Lm4jqeEXuDr0EqzNYjM+hB3tIcEctlHMbmGIuy1T/TgR+X/kvbvfPzm
-63W4YQ70BimrdYWrrIxIwrgKk/SR8ik3vFbjnZsp7ZwUcjpir2/uI/9Tjdwi7aRx
-b2P8itDMtX1ApKdF5BGsu6XgxFmhD2CmRxcBhM4hW447KOxlP2pg+cTRdYkBIgQQ
-AQIADAUCTF++RAUDABJ1AAAKCRCXELibyletfJtgCACOIJtpBBgLogV3jLwzBQlT
-KKeKY53jil5l/0UqqW3W+JvZQPxcscUhbhdmeEQuTVCEV0UB7M+aiNK1Osn55pAn
-GLMXZfkPTL5JHcKKkXxg/fg947CNAxl4hYDAw3sr3bEW1ABcr2qxrabxOpXbcPQb
-Jfjrxc+pcNzoaiVISFcQanToQOrDkF2DbfvB6NKFwBpEWnncdFb+SypB1xF+Vps1
-ul/qqylAVoF1V5Z2+jJPSq1UAWOj9Xe7i3cBzW6aGakXPyxpB13gMkliiQTfWce8
-8FMmwHUk3GJCfdQX+m6UQyufam01Xr1hxvpqg/vaY/wrc6YHodjCHmcRdHRU4Xim
-iQEiBBABAgAMBQJMcXYvBQMAEnUAAAoJEJcQuJvKV618LvsIAKruVYdeKmEHF7i4
-XeyRAACRPaRi2ML4IGYJyfIJH3XiK+UHG9qGuV/NIspQQpo/NX2GnLhe+58eJZhr
-UCiCjVoU7oZq66kpJsufeRzey86rU9QJb2JMNISvAWLgYGFghyI+g/UBcLFxjMX8
-0hnH1TykBLncPUUBa/MRaWMm03GlU4m3R+mKIvBIbCiwl2TOdQ2yMwzm+FBZn+fE
-XSiNDCWj8F7ilniMH3w9uMft9LU/jN81bv0leWx2Fdib76SHg6i9y7EaeRvMbB5A
-G0veo38Q2WXbVkN8CXorL1VP0psxk3X63OB3F9ynOE36bY/D4P6pOa0GDgYZ09Kc
-fD933XaJASIEEAECAAwFAkxzg6QFAwASdQAACgkQlxC4m8pXrXwUFwgAoGyy7jC8
-FZwjcHfyptSBJP93wJ12kSH7T6S9LNXmoN8fPOg7eN1PSQoZwUOBAgAfbRxbu+rC
-PzSGy9pX+lxxNRnwyW4u2K7PZvpD+o7jZ8P/3QXOAYRVB5EQNBITcon1gnPRQqkZ
-06eEDHrd3amQcRHlZO9SED0VYPiYOaYOYxncjEm0ZwP1gLYXO84y1dWtAkvDmSPi
-gU9/jN/lZkccTuRS2TXUPBaLeX+1zzSL1W04d1+t37ZqEovKFeBQUS4xBVfU4gAU
-iX3qTY9fAhVfEVlAU+w1s9H4djQhr+V+ps2QjCKbcM/yyIldl9ATNkoV6Yp12pZu
-Dj/BLUzdf/DTN4kBIgQQAQIADAUCTIU8WgUDABJ1AAAKCRCXELibyletfHB1B/0U
-6lRvTCpGeiet5GudCuydPgDlyJvhKky6PxyDKIma8qtW1zJVh23oPin/V+VIUWpR
-6G7SEg8haIx3vXjn3VaGoV6lPmxKLz0RsFrdwymfvTrZnM+iymTU30pxbelmI8my
-a7Mtzgg0bQhIf7Fy7cYgChNWYzLiIlDq3ZIC1/CLomga85A0yCMbyAJMquRvdpIq
-X0j1rIr0hYLxpaN/BqhShbZiRmxQ7EjLzmyCfFioXdPRZ1AmTGziVYAyz1johXsR
-qN9UBZJZuGor6nPq3qIrsQ8QrKzdsZwWVEq0M/p84LHb7w7N3IbXx+anDAxm2APG
-hP2BEfg18JxWLEVDUrEziQEiBBABAgAMBQJMlwbPBQMAEnUAAAoJEJcQuJvKV618
-qJkIAIHBQHgEph3LQw+I1qGflvsbCsHfcn7coNeWrYjdFEzAKspUXPTxuCQENwLc
-9fbGz66iSAanCr9oJHf8YqtleBx9w0ysjWIc2mRI9lgixzdHz0QBU4cbq5MCGsgB
-GGO/bInsl3Ae6WJbfmLaQRZBYerfPMJCrqIy0DH2T2MpiSt8tFYKL0icZUxQLbNe
-aFJqZb/JxgdEDbw4JZGelMG4aOD3+Yn9EDZpyQlN74UtcSXUjxmnvdHQupFK7agV
-S6olqimhd8Hnc/gudTFdDdKI1vYU/4w0OByC0l89DhmPSTNgG/gzFTjZzk5uNvkZ
-FROoE0Eji+qA3Lrx+WyNCbleulOJASIEEAECAAwFAkynLdsFAwASdQAACgkQlxC4
-m8pXrXwu+wf/dYHmT42n9RFFGCfg9GlyF8e5wFXdDdD1DmwjpwRmn0QK75/CwXDU
-MaFFGyAsAaX3ahlaOibRnhsZFCEvUI8KZRmwjC6o562eQgckLIXO/lS8fs2od/vx
-/wsLptB5eH7xeaJcdj79HOuD4AXznjS7We27eSHabNJJG8Zyx5MiRCedfbJXR9gB
-n/ton7j8Ri43bwPNi8I6dKNY+2mj2QyntSa+7px59EnqY8RGpZB9TYxnb3JpCnnu
-BCIju7WhVXw10icqKFy0y5SUpAMH70lq4LYXZwbZq5x1l1KbHrCIcK9bvdoSdmq+
-jYrbX/sBihRJGHGwMRQutLU2YCQEhbTsbYkBIgQQAQIADAUCTLilLAUDABJ1AAAK
-CRCXELibyletfIVdB/98q1wuAcPnHylHCoeb92eU35OBBtWz/3at1I61gabTQ8AC
-xh41CLMkXq2THHTCamlqETYO4+BeUfx1y05cTqR4Rp/j9hKSyvMeLs80JZo9JFEm
-IhFjkOCD2E8r7H8jGZ+z2ld/g5sFh/MrwP2FLBdyqGF+XYXdedemTNcZoCdF+LgO
-DZCdxFglKWOpnaV18Qag+0VShJbYbh7wmL37tf90g+tlwvRkH3z3zQcpiU8exqQe
-gkhQOc8ItQewY0H4UMZKjhA+R4BbQPgqBtbisl3lEAhrXX/GRISy/jOEuA+EG3bd
-ctGws5JqFa9lFf0vK64Jzkfl6H3WwpND/ipRfpKAiQEiBBABAgAMBQJMyctGBQMA
-EnUAAAoJEJcQuJvKV618mCYH/2/Zmy8zLaPRvtmVGtNWLmCGXZToS9FF21fZ9rfI
-qHWqBcrz23x26YPS4jHymyoS6cCt7glPwUsdNwrhfLax1u9f7zKN8KclFgJoUU6N
-dZ0d65eBGCmzEnkVhe0D4lUrlA8S8mTUOUuT0V7CRK4Nw4Jr4Ouj/gynlUk9cpqT
-kCekdxX0M5rgy1yfQu1DBNqgfH+A3bF8isviNFSX94GqEbRZRCRLO3DaZPCcuh40
-EpSmPVjmtu1aKa/lz0g9UESUwUkpI2KeOP0OciMs4x+JpWWx2PpppQI92AIoKy1X
-JntxOrtfbsGXgU94qv/bc1RpSh84xlVHO4s25esQtBljnbqJASIEEAECAAwFAkza
-/OIFAwASdQAACgkQlxC4m8pXrXwACQgAhtV6SsBCvXLV3gFG3l6Abus75pyKR23v
-LZRdyFjz0mVRIbT8uDG3QYlD8Sd/BaG+HX4D9aVMBdNe6zjH4Zc4/lVaX218Pb+l
-/IBFzHh6HoU+Fu10AeOOmWYBFjp3AyBdD4W3qtBBHR+vDOQxDQLpvwrMrQ2ES8J/
-jfgDPxBf8OrdNu1vk1zgjTmqjpRyLFbAlzmRKHG+dMiARpKHKa8iVwHbyq/+kLys
-B8MaZgH+9Y96+VB0TNTbbOBFp8TEYjyc6fGlAuxNlyLx7TZZLgv9eXIR/ltG2ow7
-opqBbXLz33xgXXK0ZHnBxLVjjUmFxYirFUKf4xLobmdlaR2bjFhF64kBHAQQAQIA
-BgUCTO/CBwAKCRDZNxCXpHPJkGdWB/919tPa6I31PCPkVlOxHxcuSu4VnX7No6tS
-rhx+XAJYOMuNaETB4jadOg9l9Ahdf7qlaXFMSFrWCmibg+EvMH1s6cwkYV8XH5Qc
-ywAFvZin+xU1IWSfNNZ+17WisF3CUbzVlPbtSSpyDLTiZ5sLHMVbmRV/E+XnWDQM
-GBTRiHNnFV3NV3eMKyKdk0AvvuXgCZRFF3GZO+3GAf11GjTYUFQ8UY6P0kAMXXKf
-IDzi76iX/KnywjiNUnILwaWPWYJmLonkSDZnNvXojK2DS9vJPzGEkBb3uqXL7QTI
-/k9jCwkV6mIOYXB+f0iTGxGyG69vX2f7ROIlYoM4ar0p2g2XO+tkiQEiBBABAgAM
-BQJM7CBwBQMAEnUAAAoJEJcQuJvKV61866wH/0PddEdEHRSPsHuuVOgNDqEeI19+
-/d+zaXHd+fLOESB8FsTRz4VNzGEDmiG9Eu7NwOqRGznY/mJyeGrFuTGEdEorOQct
-XBy4uKaKIfMrWMgsDtlCDfVYs+OA247Zuf1JAH+XvnfpmwJ182ihHQU+0fbkMHqw
-YCH6wP4iY/GgLzxUzIisncP+GKTxe/D7D4ukawSW+t8PsXeowKChN6DJk7pL0bjf
-m+oWa4Vs2VOq3s1EEzta63EBrzNTnimFW4YRjZzjvqVMYH8yu0dspGduWqs5EIJ6
-Ck/wsgnYzw964XI2xeGnOgUoXoJCiknjVDy05qS5ugsoAs2h2ONNlg9hOeCJASIE
-EAECAAwFAkz97cYFAwASdQAACgkQlxC4m8pXrXw80Af+OreihE73R6dVQ2q9qu7f
-Tb22y3hznKKFCA0UgXMRulpG9P+xoYi7TMPW2dwXoNj1NJwNXA4Y6d6PAzwPMv3h
-CMSi8ZZa8SMWX1XxWtNpYoq/9aV0xiM9Pugs5mZoTtOetMq3i9RBXiOXN9GO50Bv
-Sl+H7QFGDMNB8+oHVSsNKXxoFHi2wVIgX6KbP8y1CTqlZ1Wq5RWOsv/jFcip4jVF
-hoTwcoA8dko+ewD6SxS0HpKYojWpj6FVP7+cZTP6YQkpQYQmse23S6pjYLcBStoT
-1nMGCGAMsql0jXyoy1+R5ZJ+vE0rXpfS73YJEL4aAYej8VMLqFHZXhEqQD2xIFoY
-jokBIgQQAQIADAUCTQ+5SwUDABJ1AAAKCRCXELibyletfOkcCAC6hP+dfOQHC+Pz
-aBbs53E06w8feUkzePC23OsYbh77ytsPzWlKD7dt/h0iM6v2P2JgKyN+a4SAEuo1
-H7PD6L3/Z+8kpbelEk+IosMILvFhY0s/uqBWEtvJjV5NjobpmNubECo0HBJBfpMd
-Kcr8HJjRqgt2Gcp+R525XGDaD4bxlmFRc4Xv9WbZ7cyMckXarJNTggUAmdgyFCZc
-qhqG3yU1U5fIMnYp7w8oPohceGQpJFsSI+0NnL6+9o032PmH9Vzv0AzHYRqRMF6T
-dH1oEnxFpQXCfLQMk9QSfgc79n6zpmM/P0702DwDa0ZZyp/N7qgK2TzxUL85NJFU
-u1ebzkm5iQIgBBABAgAKBQJNGhaZAwUCeAAKCRBDJwX6zdQDJXWzD/9FOh6xAcBI
-1o1A6qlBhFG+YJ3Um39QBYy2+m6VzpDxv22mZ1WBT3ha4iRI2soSAu1CFt2o6ezP
-alPTgSei834z9tT/ubTsUz560R/fPtUHcDYSph888eCFlQIXdvHbmYROxRyHd2YA
-NnuqFny59S/pLOIO+qEkykWtaNCTf/wvhMuZpYQOOjExzr2y4MA8Nc7ixrPQY8S2
-iCwZ7pSCu4hvDzirroLThEUaYp0J2qgI0+5zEJMAB0/ie4G2rmbVXklpdL1TCeV3
-UisMeg50BvF0ALGgZ6u6+Wwqo/DhQXz26OIlNAI4l84SAIgmI+QkSXPgnLUK04L7
-trf2WtryuXHDY5PTR+nNdRcYWnXph6bLIRLeFtPfJtnXlJ+4eO4zOAijYRZV7Bjk
-Q7BTjzjb/1vHp/zWNTN+mZmxlrupBjzpqub1BgjapXkWMZ913od/lyaCvb1XiL35
-fA781iADsrMxNi+48udTpOTpuC1P4r13maGFl8PESI4MmkpkwbQNODGnrLWHAdtk
-4RIYVIHq/kHLKeDV7likxvmiNr5ZzAR58GbOFBTlgtLvwtiTRJ8b+xlOC1nKD/vV
-KEvatA4iFcHpjkSc0PxYfne0vn8rX847BEu9YjY6qAXsmK/wApDcde89dJj6/d2T
-tJDIPpY9Vz041reOQa7TNpRYwx5Ykh7AC4kBIgQQAQIADAUCTSGFjAUDABJ1AAAK
-CRCXELibyletfKmwB/9zHUKryeI5FzoSm4UT9iyXqG2K5E6RF/UQjb7Oy2N0nnzy
-gaTHD16hhnSV/PWZbw9IfE9WM8Zekj9QOKStMwfy2isQzRM7ezd+2ZmJEtDo+X+z
-nkiHNLp+FJMdIqJNZrg9o2ATfCekoOfLKC1F4MAIMQR9A2OIuhFmW+AWI5hpKgFw
-aS8OjKGGH7eXFBbDVsC4TqKCb5U3R4FITpQXJ6SiYKmia7Ss46VLBRT+OPCCogb9
-CzHKrqNsa/faRb+rVUvy7kAWcSRz1Y+K55ePGLvMDqiBLlR1mzf75dxCLjXqplwL
-+vejWDCtD1NakNeCiC+APR4WPVlEH2pNY5MSA2xEiQEiBBABAgAMBQJNM1KhBQMA
-EnUAAAoJEJcQuJvKV618qcIH/3RSPQbpCrh5PhKEOjMN09qINlXnFA2ZsYUwf/57
-fNQPWj8p6Imjxl9iSluS+zwyCXQtnpl4NzTieKSo6DzxoTGYhGyeW8E4kaswfeCq
-gaCHOHCDuMvI0nA6HWgoh5IXupKy1BNL3Df5JOtKeARsAHgEmJudR7hwhwF7fQzR
-jPC4MU9GmeCsMMI6s1j7B79OW2MEfVV1CuvHU0nLP1tXbNVEKeo3DpiC5MFqBwIx
-ZpD1acARYsEHGNMB2WjEfAg+/vlyZ8kJZniVqYGA858nqMgCrt2euJDUXkn4Lbj1
-1xMj9vOxAPXpDKS6uUwcxscw6W7ITXJBtLsLNSIqo/aZlumJASIEEAECAAwFAk1B
-TjUFAwASdQAACgkQlxC4m8pXrXyuKQf/c2EWs0Sv8wMAaYaQnnUT8x9Qd1qq8xSG
-8Dboj0z+150PPG00A8shuNqXFuexoRzFWRn47Q2z04dLkoqf6iDrdcMmZnuqvgq1
-Gjv6PUnV7rCl4NB3WcBF3nvuKM/kBt8FLUpUy9bBxD2DteXgjUfJV2z4arVGEneg
-YIM3OAbanyKY55V6vgv09VEGwMekOR/oriNBVnLN5xFEmMIwj9onllPRfxvO1Yqm
-4U8VhffMfhQE93qIJ55I1or/RempIlWmnAlwCVBXQba8D8VfnKF/ZigMH29+HDaE
-r7QZVGDN/GCRZkNj1g+I4/JhBgyISUakPlxazhkg6pZCp5EGT9iNmYkBIgQQAQIA
-DAUCTVL1IAUDABJ1AAAKCRCXELibyletfPjxB/sEW2WZgX5NjhZcgy0sdMuPW8Zw
-V7b9h3GeABkT8p6odjbQGy5WCaoCf0IL+lR4JpfBWQ6kyl5iI+brhaY9bYnrF33r
-GXjOHXBk+fQefbVezG3GKc4ev0qyckRXqeClEuSxuiKpkM9CcObWl2NGHLYnkARZ
-LPPeaBj/wwpARhKHzyLmMu4avbDmcgmsE0CUKiiLdzzg6OodTHLE016N56gc/IzC
-auGtFkYyh1O32LXxbGBZcvD3uJ4v4wMGddIhILjBDaaef8lSG/AgbZY5Im7QJmKJ
-3ir+VNcvZB0g6usr3eZ7v5y2pjvSm9ujh1VoKtRDED4VaDjUWRK9gBoC2OaWiQEi
-BBABAgAMBQJNZBpoBQMAEnUAAAoJEJcQuJvKV618obkH/2+9ZZfqLEMOqB6cc3+C
-r7zVci1OMkZu/8kVwocWBNZN4C+a7fuf1wXu4uMUcjk6fCRa1h288eCzWW4qacXz
-U5GhAM5L5YDwjymg1dmUauaXVbg78cQEgyvAPJabmwzFtfrDPUl7iAP0IouVk80J
-Tq4kTtxfjlS3Z8yZCQUJzyhM6idZHUWmJhb+7chcIeXzNwiDV82OvdOLAw8CmDrN
-PCPeiwbQzcKXW16uXpFcR85NGXV2xfGjC/U3bgkWitR/E8/RzfMG5XXRK6HhpZ+3
-2VJEqlOT92aVYzRxnOY5hqpeBHctvk0LoAtnZaAgJCTEJYwIOSm0S378gZV403sw
-Q32JASIEEAECAAwFAk116GgFAwASdQAACgkQlxC4m8pXrXykcwf/XNX+j4xZ1Ibk
-k/n7aoBN6o/1Se20+JS3x+hWMGg+3SWWRk1PVqgv7zmcYFhg7as3x0t01pRpZO4F
-z6kBCJIWAnTHx2T57IH6F43DmVPoMBDXpXcuicyTngkq3dvbzafRjgLaSidEzU8d
-Sj7jaMtrkr8cmWYtwoEt54pnD3EmLkrvcJyNC6RzXlvk/gyJBk7NAP5WbXVPkL3q
-cDCFJE4tPqsP0LV7KivFXbj0cifPb2QLx6R0Gw9HWsZHBL/VVQvXpBsK5bNYLQ/2
-C2/gnIfXTS5e2iPfuwzuMgpZxVQYIX3vaohMTONlvzEMFrXdEZZzjYYh45Iajxn1
-6KCxtsAYXIkBIgQQAQIADAUCTYR3SAUDABJ1AAAKCRCXELibyletfJVcCACYku++
-tDyXhW6jsTMtFXrLv7ZPbURKLicxLuloEPtq93Vva8o7eNXj9d4oyYGLqcJXVfK9
-fLQaQqGbdht97KR1Be5yaKv5l91/MbdGuViK0r4UeugW9s3GrkS331jboPD71NIm
-jLhZNqsuhwIiOnuHedDy2ojOV2Yt8rOyypWHeiFq7yxhKdrvOZRAiKTM+Qe54/qM
-g3fDceKK3ZaJ07ujxpSBsB27n8RS4nqh5lMRekeBS7JStNyTvuBNtDtNpUTwN8O7
-RIRQaMe3wpmH87TXR7jia/zNS6Fgv9aGqsLHLe45lFT70E3Qw+LFi5h+LlpcIHpU
-bW1zMCnWcwCDpNAXiQEiBBABAgAMBQJNliO7BQMAEnUAAAoJEJcQuJvKV6186NcH
-/A5+p/gco69gOpbXyDuuRPKOpqWc9q+HU0JfzeTcEEVUP/1DRbhXAvXql0yASxQ4
-1BFcjeow8SRfXcmaug+h63W37YQOVSlySUE9bQbnqLyMu0EE2oqvcjwgUZXF3bA2
-d/C6WSbe/sTEVopwptMqbdA8gAI8Q4GAXR6lcO6DRMCMjST5xj4Ml1leQ0zWOm+p
-+6kUUxYq45sfxva5su+jj4XH6SVHRr8F1sF7RJVbGAUeCHoJP+0EAcABps9xYaKL
-P1PjHnWZlpyrIiu6mY24r6z5wV2DhsWPo94B3N3r7dt+MSQtblucyWqdjhztlJWg
-bmPzXxBxnr+aOu25G9E6wIiJASIEEAECAAwFAk2n8ngFAwASdQAACgkQlxC4m8pX
-rXxqNwf/fd9y6eaZNv0SnkRstEXkdXdJnbiSAFekZB19s6G718PlZ544ZpkNK1E8
-VtzSMQO7tTMEz6bLCV2dbY+a6AVnELWmRBmr/U2h4CYa9RCl2WAB7QwUj+a+ZWxK
-bDKG3LaOvrFJGDrqkjaUozn5s+TdkNRS4cqXFfi8tdpamKdwolb0ifKdh5heOYjy
-q4BYxgscseLGlmLr+d1mRmj/KyuqwleeDTRn2BuOmLhCUcCLG8D4ml1hCIC/NTXO
-asYBQPuA/8SRUiVXggnqIf0zghxRpfFkTh1UqrrnvKwbQQjuhBn2QexqhsLbV0X2
-M+mjGmgc6bTDFDGqfyY0Ls3HiH/M8okBIgQQAQIADAUCTbnB7wUDABJ1AAAKCRCX
-ELibyletfMPcB/472U7K+GnTIZPqbGYrPnysgcPbpPWmdu15YiF8Y3t1/u/0Uqbr
-NlXfQNYbchZDwfqojvWuliwQmT0mzKC/cQkybumzt2TsLxwzANoIVvas8bMHR9d2
-pPWBqxjuRY5dtBZezC+Xs1txPRYOfcElp5SFCsvkb8IIFq7IhbrDVzmFt4uAuzfg
-iKV0/eDci7m7wuXx3bnP6qYyu+ksku1LaHSBjhtoqp5Q19e2iaBI4AWpjTDdhP5z
-z4UJb0ly+z8vV4Giea4bnKfkxmVv87zc+ARe2DI7Wbzbl8+85wzwNNAXK7AUY+Bn
-dcI3Jm9OteycmslPB25tdKTy0AWj5aSjLK+FiQEiBBABAgAMBQJNy45CBQMAEnUA
-AAoJEJcQuJvKV618UYgIAJuEeg8StxrCOnWj+GgiryxpWUV2DG6n5qKsDw9+zKce
-nR1320Qas3AQPmsw0RRZt9zd4Jp9Bxz7O3UlmPr2KMFMdbdLr1FrxI1Oieo4XETu
-Sg7pd995S006RexeR9tknFb/jKXY7D/6d812gjHGR0EX1G14GynMZeLDv3HAyB8T
-A2Ahu+bA4ULsPu7avejoD3zHHn1R/zH8M7si4bhiTH6UXKYFp5+jt1ew4i28a4dw
-A7E0dWgVOEY9QQSJGD9eNPqtfyxsk8aRtN+Z+5yJfL2iXdgv8T1REAr3bX4JbsGa
-6vJ9tOyylTpzJrGEBZYTDL/BEBX75mnvBXgsiaZOAsmJASIEEAECAAwFAk3dWW8F
-AwASdQAACgkQlxC4m8pXrXxGBAgAlQhUSc2fgTlPVkFaGFxoDm2p0S1OtvfMfw0t
-ZkpqyCB8CO2rGEEVfZaw2ETR039SSMTjk33THcbXUeK+O7uuaEu6OqEhCJacpH7E
-MgaFv53W1qgweAPcAkN2wraXLAQRjFUWVK5nLL9gmjtK2IRrEOXfrLtcVu2KtL7f
-h7LnsPbFaxG5pWaaG2Zfrg+TmVd4Hm5E0A5hkeXbxkj8GqXu7OFFkKQbY+7Q98K9
-I4ql5ySW8ZX7zMr0C/Qpqj6TRla+XGqdsOnsatHmQ50gaB2PrmRM7scXRN/Ws6SY
-kqREwflcaS050WQgY2GtV+hYmNEVIBve1IllYUw0zioJK6QY9YkBIgQQAQIADAUC
-Te8oUAUDABJ1AAAKCRCXELibyletfBT/B/9Tub2l8LOmuewhifnXAjs589jB+raD
-LW3mfePGoz870Ct3E3YhhHv/meYYhofiu4Pyk5dBKuhl+dMD4gMPv8lYv0MhZSCF
-OS65kYUswfTBqhnPEh+1M6j10499umDp2bFm2kHj3diFdVmDapQmyC4zJIh6sOeG
-KickiLbe3sjVNBZKa0VHSCxVY2JjhOsFZd6HKDSrmiL9K9RxfVRCTcYHY8w0cn6G
-FXGhF3k+lzmcV5J5GDwSBBlWAFXNPTzdtfMgKI05QPrddC0U98IFrxUeT1JkcEaP
-t9/tUt8PUrxEspYFztIvPgzA5S+jkHOUh8b+W8k/P8g/XINl1rD/xA5TiQEiBBAB
-AgAMBQJOAO/bBQMAEnUAAAoJEJcQuJvKV618NMEH/35M0vUT85W7oa9KBMCnd1yJ
-JjOubG8vMwxA1onqb6r+CqzIEsj0dKzcRFVA1Lexh77TSUYY7lzEnzdlJ3J0SFjL
-TQC7x7jy00TjRGZkbu1j1PFmxujCBwEmvd83li2tA1kx8eoQl1Mq22i59OaF00WK
-GiYjntSui1LgIw4CpO1qsvP2yGIIOgLGRUGSvABOP5AXA59g+tV6gj+lVueYnwtD
-aAbWxhEu5WjztbOQvEtmW2EaKZNJZOJ4wEUdogXfo4CWedj/gVruicbP5fAMoKPM
-VYo5RDAhsA/0Tsuzq3wkIu34jgMXPk2WePd5FVmjI/ilbA5NiEjwBVkh0na5l0SJ
-ASIEEAECAAwFAk4SvGIFAwASdQAACgkQlxC4m8pXrXyQfAgAniL9g5JMXajdoZi5
-HV+lpVpqLcxzPX7aqpg+/ad6y7uiLN4Sk7Cx5JtyXBPApEUThg6IN/jlrd+wg68z
-GNll3EDSggXWe9t4FkSk3W4m4lP8F1qMD86lkGAYcNK2h3J1blhLxCYQfsm2nGP4
-MA1Jpl4eOCSWwYGzL5oYdozGZPmwSlxlxSJcB288aFdR55Dy3mczaSxIUUO4H1wz
-+5tkCot4V2KFy9r/zVx3gjEt8WXgZU2uwBzoJIeGi+Toyhf8suJOnlcrKWijF//1
-lAviySaSyGoMmBI7tymKioDK47uM/jisFxDoYUZKDtJ2hL0vxTN8m4j+1eh8b6A/
-8mQdq4kBIgQQAQIADAUCTh8xAgUDABJ1AAAKCRCXELibyletfKp1CACHJXWCaSWG
-eLeE/A7+4O+cPNSsewxx+gwePv3OjiST8hi5nzgwWVNW16TA6w818O454+178HKg
-r9KFWZG33OAKaagCuLfvF+AC2CPtlD/qoC3oMh8cj97hMTSOBZ+0teJrB7jGGAu9
-/WS9neuQ/u5SRWDNhqHMTKMIKn6/5X97dI5Nz12CY42jZhH36xrwmHRMfq0dKD4x
-U3CoPJarZYo5gfND/0pza5mBfdd3lhXj3TDVP2rJ5M9lDvKHp7vc5xb2JANgv+3y
-vPVLret4f51LJ0Vj7xqqvIMFgbflmcthmRI96EkVhw0vQlZG2Yy9O2xfnGQdq83F
-IhjCAq+Cv29LiQEiBBABAgAMBQJOMGPuBQMAEnUAAAoJEJcQuJvKV6184YMH/1f5
-C42d6C/d/eiVzwPA0T13aKi4tUhwytfIIzN5scgDCEmBKrs02VsECNrsMjZOIXEI
-8MXc8zEdgywiBbqdkSAWAdMC5X8O2JMUDK7KzYG8dIEI9kD8X1Tu7R6QHU46U1+t
-E6ExSb4h98Vp3F4EOr3hKOntsGsNDb5X9BrlLu1ADdevBjQGNAGc/bKtdq4n6s1C
-nCbnOmEqNXt+yP8w0snsAsTAhlHOOcbDKSU6FWrXiQRbBi48SmM840EJ3gkzBP9f
-EagN1joQ3+MDEtfYHpfQFoAAyx3Lh9yeBbuFbTnnNgzy/VTJKT4sP91uVyZEe48H
-8Y3XIs5eR5xILHoQ38CJASIEEAECAAwFAk5CMa0FAwASdQAACgkQlxC4m8pXrXzB
-iQf/bktFJFHqCJseZXuEGiuWSzovNXiIeSRqxGhv0u898GL6/3u65Ya5jXCj+XOq
-ZhwgaovPrNayaXNk3gMbtGyzK+KnxahOkyJRFeDEi7qQQMZAUp1HbjBuajRuAzSM
-m4RHom+HnaYYvuAWvOtDqcQQZ8Qkx+TGJqWjBpDs0jzf9rLiGCUTkz9wLfjdtAVQ
-qciPQvvo7fBz7XVNrTW4rjPbsXoCUlTe5yskH5GjsC6BDFQD+6iEdNvza5A9HUbW
-L80pvmwyuA0Y8irosohDT+VszYhrFQz+e0ZG4qVmJpuKsDSLXtmyuSbE4s1MdxJ6
-kuLlIRMBHLIJOisxOVUSI6Ns1IkBIgQQAQIADAUCTlP9xAUDABJ1AAAKCRCXELib
-yletfCBjCACYNTPFpjM+tNiV72oj87JS1ehxh3QwzXwplMw+hI2XXSxhKleWWLa3
-SNJThZug+S1ZbffgjQHKEZGG+/2uZqPiDStD26LGGaca0q6SGDOg0+DwkNChIlxZ
-Np7Fh63HJcBnkHUZkWvP6n80q8F4rCVHzhnBph00EMCg2dUau+tJtKlTZlq6zmY+
-hzg4+hHDpTIyo8ZVuF6/u8gFR4ouMWvILsNLwez+9tWRY5x/p34AQkFG4r9jUEK6
-ELbnjhyDCYSjF+a8SXrrui1MmelRLH7u1X+6S+s3anEeKJ8BIvsyVpgakdpC3qUc
-Oh5a6NdRxAtTGQd9vL7db29F8E72OGB7iQEiBBABAgAMBQJOZPMLBQMAEnUAAAoJ
-EJcQuJvKV618neIH/3/gwPHrJ67nX6pV0htCy46wGHz3Inzy5IDLWocpRDq9ipg1
-whmFHIQAyXVlx4G5YOgeogMG9Yz9gd4PlVMZh0hwUnUWpAXWakyRbGWPy4/UGS+V
-KIT5E2M4ws90MsPSjttEel3xTYV/sm1G3LzOvzi1gj0XOjOTPxUBEbkU4wG4nhJK
-gxSaDUNH9/c7ILAZxlpXSzJa33zjHAKs6m86MiGKhl+ZdfGk3jo/GEs5BccD3tHd
-JHGqC3uGAIiSH9FpTGPVC3EHY0mVwPyieBsMb4Fnh/w2VJpPDq9FGsScJ1mBRNbP
-xzxdcS8phoscHZcO7QBAkhhhZQrcvFQcUxIc+VeJASIEEAECAAwFAk52RacFAwAS
-dQAACgkQlxC4m8pXrXwt3wgAy2VIjN71gHPHjXs0VQAU+VxcKF+xtZ1YDw4edhcs
-ThVD0kkgZawoazQSHDMG2wL33OaY73n5Ym+lYgbc53WFVNWxcv1Pet1vqljAJYUc
-NYw1wD+rlJIET7kJBZAE2H/x1yBp5MVm++/wXpcSP1abHCOTQRttZsy0+3dvrEak
-k/tE6SwMe9aXQkKL+rQy39zNkb1RP4VSFRaoRNqDvwRUmi9Ox0DqoZlN2kdSMQd9
-jMrqvu6jOs4GeANevvwJsFnT3JDTjwcqqSZQuKRUg9P8S8S3uYvfbciLaOALWFsM
-Xu2B94FSBFVca/JPEQ9//M3fQQQ3YlHdzjU6Ps8tdw5NLIkBIgQQAQIADAUCTogS
-4AUDABJ1AAAKCRCXELibyletfO0UB/9JsU1wcXPQfshWOKLeEU2O69DHWLqGaFsL
-XbAuIOPfdVfZCnPCKNny4F45hXLP9BbR1WmD75liUH/MC1KmjRm/EEXZW9/D8JJz
-gfMx+MVMHx3C1WbN2yINKCXLkYsREqtOnuZ6CEuaWUdx4F+ZCmxzDTA9nzkxxQXR
-oAVJi30sbCdDVCqIxc52voWf4jJKLD3Ki89QeRfp3uO05CMPcpLoMyw1tGl5Y6sd
-WxUHO5zvwHyzUFsv+jbSPNVQlS7W4L7dzMJ6DnPnVHOsC8plekB1BQjNbIclvEfh
-bfS9Ayvb98c01m6+hz4HVXrvloFCFg24DUbaF0AZ+T90dGjTm26BiQEiBBABAgAM
-BQJOmd1fBQMAEnUAAAoJEJcQuJvKV618fQcH/RYnXoaeJ+7VTnPYsyupDAEsaFkq
-ayabCGO/cVAH0INB+2CBhNy4fpcJuYP82OOqmwQwUIX6X0PZ9nwibxQ3k4dVeaY+
-Iz9OQvIGmrT19oGJAOXUscZnPd6xUtECbQy45KebrbWiQKAD51bVFRhtdNXwWZyV
-PX2GOt5kWuooZ5SPhYCvJ49IZaObw/koVeJkGIYS+B1E2wN9dWCK1aKDh0OMk9gM
-y69sNGvWa8PUFY2Q4DljrYadbjbed8Sj/yCuwrNHK42SVp+UuCLdq4jIgnOcAfhu
-8Bes9iyFz2jfms4Ui4q7ERtoP34WI/ZmCOwnwY1MAzp6lTLePiAyRSxez3aJAhwE
-EAECAAYFAk5CVasACgkQQycF+s3UAyWT0g/+MONUtIqyG33uGYJ9Ami6M/uRC314
-bnmU99reknOArO/tTAPGxKhHzwb/VbTl7/xIZQ554YjMMhx8cG6D9vUwHf+Zrt7x
-vVsujsG2z07jYuiv/97yM3VejcmpO20Ps0JZdL2NVXZ448XcRMP7dloVoA0a2Hcl
-wDnCcl/OldcqIevM2NXG5Xe1MnD/3L7OgWZTiyCYOBQa944UP5/mBLnmOIm+edWj
-2AGIw97O2al9ur1yQjGgW7RcgMVZTaLhBmJGN1uw4+HP4Br2rdfqs9xmNK4C7ZsW
-0NKZZKctZ6K5mpiiJKfiHAxNgbdmHTjZ+zpqqOV8K2PAJ4jsGDFJmJqhGcRgV2dw
-bmTzsere9cYeXgK/xphj3SZ4R4/D8h21X6YRGRG+FhgG6+pRFmovGeotD9xE9++t
-yt7i681crgctitqrpuRWBz6kaWPYMHWNNqB/yf2aCjioqer74DAGJ5NRuGyis7HU
-uL8fA6mGPPawbcIobAi+WtW2p0xD09aPmESJO7a+aRi0d+1rB37uDMvbrJ+RWyxy
-EqG6qxV47DoNOMc3jCAplPhvYBmKTcv/5DAOY/YdpgVcKdaYap4n9naHRST2nfP1
-bVpY3xSSpMb4vozGvQN6lraBHNM6J/m2fN/fT0cwdjvWVc+fWHAsg0QwZ9/sUvkp
-IagPCHz+r1pbC4WJASIEEAECAAwFAk6rrB0FAwASdQAACgkQlxC4m8pXrXwETwf+
-J/3C5M/rLgS6lehIsFrdgGUVCmR33/bgoFcMT6wDBbpUr5Dfaj/iZpNSeSHNwFQA
-Z2uN8kGbtWxfKX1sbaCa1JdLJ8u4cCmTnDEb1Fjs4Qbs6j04Iqw1Ypdl0pL1hzS8
-2buEQa1NR576UAW/ay1doOOD5aIA++/0MCn13g6rjcsJUFoWXQxgXZ3e0mVxWc6c
-1MdlDyMDpkZyH/vzwC7IkTb66KGcAThqIa2y9nVaPcXzoDIw+CzFVPhRCSn3ZaTg
-L3S3bMCJllfR/iBkaotZzUcUz3cWmp26JxtXZ9Wpq9rm13cOvFhnmtbmkhaayoka
-Ll24cu6PokL4L/lS3AsWNokBIgQQAQIADAUCTrzc3AUDABJ1AAAKCRCXELibylet
-fC26B/9tjfGply6l9BpqcqsUZw7lmyaRiduVEFilgSpauPeX/BN7l/ETzwctGfTc
-oRVbcXs8Hc41cnN+NbwFCqi8ULuCOcUz5vVHl5Bt2dEOX5t0l34umjOLP8YKdLJB
-cao9Eru6FOoyZk95Ur7g+v2OWd7d49hSdQGt7gGeVPzcmCfCtklG7ky36GW+C4RX
-Xh41aSpCMprJI0rjwSP+lwnLBOaMOJvv1pbYsa3A7XvJEa1DbPnkUYMCw2kNhmMg
-0FDup3RIeRvHIrbxztGDq69+qplcOCkDyKCpzMSl6bC/YomkhJi+i51ca1vyVYsf
-pl5ZvWYn7flv0RWyumt3kmb5pEgiiQEiBBABAgAMBQJOzqgvBQMAEnUAAAoJEJcQ
-uJvKV618g50IAKzIF3xdEoV5OZvHFbS4t6C1Osl8pwr1+I3cFZKDLLaccEhRSa6S
-FUwMg6mHxTieIfB9TyTm86PMgs3piEE8uI851clO2n4tib4wvQJrY2gISTf2dIsX
-4UREktf49gJpQS2F9W7GGfFSCj+mz7DzLqotA9rbZxNJVWQtYhMBaa0y26rimpAt
-fUZGOgIaST5U5efxap/WNbyRjREdjp84iDDD78AubSy9YxeaIqOwCOTFcVbWLAEj
-ESWqidOipguVL0qn2hmqYTH1gG8rxtC3/LOaO7Zd9heMjppxkiS2K2/VLbDP9K+k
-TK2UKzucxAZNnNR8dHkR4wqe8Z/s8ZoBMKeJASIEEAECAAwFAk7yQcwFAwASdQAA
-CgkQlxC4m8pXrXwS7Af/elDMatrzAaAsk/WIQLeIfaVeABRjiog298wswxeiU6/Z
-HeTLP1aqdytm8Z2u1k2DqcejhDiEWdaxP1dbZjvq4JxftTINUviobuV1FPYfUarR
-xHsT4+zeAtSJP3Xjr6ncdetmM8S8CRxBfa2M0hefug9332JmNcHh4PYR3IU6MJvp
-GqJr3WShitmSNsNR13TyE8lbdTDHehrYUVWe+sAKt8PCTLSG6QeKkpdyY5CpUukp
-g6mVWpxps2r8gjZtbAm7N/aGlqpbCEB2bwvc07TFpnuj3uVtzcDjzAPpfKNC7hxy
-9FmL+sHk6t5/P04YdSaQ4F13FWVVBvtxeVq5oJOWSYkBIgQQAQIADAUCTwAvjwUD
-ABJ1AAAKCRCXELibyletfE6hB/9f8uWQK15iZUwM9ZCj54658ps7B/1NBHkbmQUc
-FVUtMsiDQ2ndI2UlrZk+NTmQqOdPcseXbQYtikeihz8fFJvYOEUVURJAff37jpPm
-7qHAsh1RwjMmNkmyO0ZCarjvYQuIl+eNwx6Tnqk7YJqqwD6spYySAbqq/JL3Kjyd
-I9E28tqNphKcpt8VRXu842RqihE8XCzytnTmd0WTkHNq7p6Gy3QGSEXgMJT8d3l+
-cTxfDjosc/+diXtRFeCHVPITraigg0WOGqBmw9Ylyb+G8vg+GWetRX0WqCd0gOSn
-7v7xkyP+Ry+KrgeFXMuWh+hzeLhmkPYzdRleF+gYHfapvWlGiQEcBBABAgAGBQJP
-BxzWAAoJEKlT5IkRwmrm74MIAKp0V94rhlAcrxrDcOeP69En7ROQo/oUEviBw1tG
-oogmusOLXdhKenonLRt6pSRWMOcD6xeIaau1sQyzhNyx1nB816ihR+tChJTzx4fC
-y59HPdJVsmKyxq6qSH5Q49YKthoBhM26UgAfmmY3pkNB6O0Z2y6jZy5qS0ouUnrY
-OPD7uC7xAyCXlkSO+kAYlL6azT3zmvY6evcgAr3z0giDZtPXVbMZwsQLV4sU1ECl
-tcw6jcwh9147zVHwuu9ezbkmg5eMnbOiQsJaUAM1ZPYnLAc/sCeAMPD4UryKUyi/
-YSGTHJDNeuvC7BzdllAkcoihWqCUcebHhOP7g6lKNDCKX8SIRgQQEQIABgUCTx99
-PQAKCRB9S24Ynj+b5lnLAJ9NOlC81CJGHvFiJf+92WHYzKICSgCgwFfKmhVBVoQS
-fmuvgzcEbIA5/sSJASIEEAECAAwFAk8R5N4FAwASdQAACgkQlxC4m8pXrXzvgQf/
-Yh7Hb8zGj6H6atT4XjTrDD5EZAU9ZHge76CtmHB3YzbmXd8MEIRxoekgyrVRJS6k
-LYIwx4AtaiAK5hhaDKzHX+44myo+hUjWd59b5/nxmPpAhtJREbwvdq58TeTuD7ZU
-qTdTL8qup8iPy6a/cuiG1xomlVPIrol4GUV0Kv3bxDGk8KiDltB44/4TKweGlvhq
-44AvJ8jY3x5cUtd35PUlp8ass7myyotJkAW6HQF56LnMK1fsZxkuKoLvgD+fY9iP
-uW34drZr2XohK12NFTsX7JulzFSky4W+InYXU22fmQ+9qkf31UO9rSb4fXgToRd+
-RIDN1MxnZm27ao84Eu3blYkBIgQQAQIADAUCTyOztQUDABJ1AAAKCRCXELibylet
-fFWuB/0TRU8pDH/TLeYkiOmaFPQFNxoRIqojepFjOWi8NZy7tq0CqEy1vhkH405g
-669OZ0hkH+kMnz7Z3SZRun7ZQ2PfKPvYFFH76HpuC9hpFrefEZ6PTOf46VJSOtWi
-TPD8/XJENGFnwU+61bTvo/ZWfl2JQVa7pSaB2xbEuWLO+1wMw9JwStE/Z/m1jWFf
-RzUVJ0dR6+vCuNUQqz/RwYCWb6Mz0dBnaAmZHzRfNT7+AS70FXkbZacab9vuprVw
-YTakxBsjlfYyYOxVxqt3wILZn8r+FFC4tHdFtBsfPG4seaIYVITV7o5ekmdP1Uhh
-V+dTHVA5IX9X7x7Xzms9VyX3oHRniQEiBBABAgAMBQJPNX0BBQMAEnUAAAoJEJcQ
-uJvKV618Q0MH+gO+faQtDy0NJoIEMv5PaWKzEAHLPsTth9ye9S4/cSDGP5Q/00uh
-VJxaTRG1snOoxlU1xjCsghlwOuPVZwZ7p5cy1UInlTUAqCSwtqZsf7WzIW1whPn9
-bYZa0yMPMgaEW3EmnXfYJgansyhcbtQ4P7wZMMsf5F/exrQJa6izfG7Knj3W+LKK
-Ef4oeQjkygxJey9CecDotnHWuwUvxcwoRvVbrsPeh/Tpkmtgsaki/QEgoCuwwhl+
-7J/plaPCTRxEPYlVMs1hKS+mdMneJV956/98CXKWHulJTzDyKBwEuDV4180IHFx0
-PynZFRcJmU7A3X2Uf6G+s8i+C2ijAwUB2EeJASIEEAECAAwFAk9GSLcFAwASdQAA
-CgkQlxC4m8pXrXywCAf9FvVBTca7De4YUpa/jsZPwAI2Duub90gx+7409CCl0tSE
-n/UiYMYp8qr1cPO4STm4DNMe2n9oZhzM+qrT+8JKUX5Wu5A+bQEN+rJiNkyh/tey
-B+dBdy8C7gFMRLaPzHwSUzawOjJvXF+yt9w4vHY6eYEt+b0gmi8wRCfjQ1VTjP0C
-4J2P+ImJOZvIA76Y8YdPzi27zlYRLQHHY1DOpLTaWFTAIxp9PssWBGCLm/YjkGUA
-YH93aVRUTZGiH08v4tClfNMN3lThiPBcaAkqfBlkZnL5l3WNNpfCDcxri+lAQ7Ys
-hPeRex90Padv00PepNdgEq9+/NuXRkM9IM7MnIpUKIkCHAQQAQIABgUCT1Dt9gAK
-CRCEY65TcMk6ksgaD/0Qw4XutaWJBaBAbB9/VW65yfYVCR7xIzpZkzs3IaZYxMo4
-00z+vNdPtDS9C3KIPLPAeeTvlktM9fdtTWjjNrPMKdRWArxej/dAi9cmER/MAi2E
-cL5MriIaI9r8lcRLrIqn9DjqHe7pRAXZf3auztCJOzuKd224kHk6jIHtslmBF7wp
-6WQzXdEac1AvCc+Di9L0BYZZ7C3PSIMB1/3PPYbBytUeGQq0T+nJdRVudAIXi1J0
-sKjlRSo+eDDLcnh86t2f0ot2FaoFW3DoqKCOQk5PPPxDmQadui1nvYWpt40X+4K4
-SzkE85+TvDX7UJTDViN//CTyDcNoOUGKgrFAo1ITd6D+CCLPqcdDKouKyeTc46eO
-G9mGrRyONWUnlKsTcVCEsQmuFZypJTpj4ACjgTSdqqjEMaGGI27I7V9dKQnOod1F
-bIfTa8lVQ9hNanwOmBRZ5dhKReiIhWhbe1fLt/gV7lMHMiE+JOziSi1LTF1rvu1n
-ccX73pNdKjALFGfc/SeqE9lh7g24pg/EKtc+aQo1WLz58w9dh7TG/0ZFbarFDBnd
-feFX9celfx4Sx7aB8LSiLG7Xf0Ih11gUJzL7GFq+5xkhM8Lr1YrpwrD+PhPcRYwS
-MLX5LTJ+2zAX/MG7O5me191WJmeWYhQI+NZYtjHtdlq/VGnglkpidpJac3aTXokB
-IgQQAQIADAUCT1fCnAUDABJ1AAAKCRCXELibyletfPRHCACB+Ug2Yadx+AWdfCby
-LpK8BOwLu8gzW/gbpurlRnjKfalGHXkQSKTlFGwhvB3u3MzgHmxc7cHlDcc/W/DP
-49E8HmkOFGMD3QSQ5dXsJiQb7wuvECHKa8uJ9ldsAiXhWlDYqYYhdk/WL5qpEfMr
-tf1X5SeBOWAqblJg7A27gY61qIdZBgXe9Xj/fE+mPRRW9L6E8mfjqwjjCB6PgI6L
-s8U6IyA0gr0yRjzb9spoYbyp5G+655+Ws1vi2wqR0QnCnD56+ddigq/cGj0Dbi3q
-c6qQnomJ3j0aazAxgMKLd29xdJj7fQHwUmKrXmqYfrH7NL0on2e4jreouHLaArPe
-oWsMiQEiBBABAgAMBQJPaYHTBQMAEnUAAAoJEJcQuJvKV618ArYH/1thxnOzKfA/
-Nm35A2Pmu9ZYQxiwhUkeJ7AkMFUdDPngi/roQs1Wi+Ds331izne0ddvZCbHMTsKU
-BA3USmc2cZQ/dtg5Tm/8bMxYJeljx0O/E7p0ulnfW8I7OUhY6D+1dsVvmfiVVJwt
-E6y6oJMOB6kj8cvbKue5SMA0s5LbjbWQcwnUJ5zOJUnIc7Ps0NLq9kr4mpSJW9QP
-MZBfYT4EcBULN053hcmSpdviTjXukgv0D2ul/HmKTCfcKMQmATklK8DSubFr3DFy
-merQssByo4QKsJUkDvHj0X9Qu9/ufi5FafTsppYaSQEMAXsJgyaEaTVpUPWYHqZt
-LxG9RYHsr8qJASIEEAECAAwFAk97SogFAwASdQAACgkQlxC4m8pXrXwIygf9GOhs
-4xXBK0L3nhzzyhkO+l5+cBwHGR3qqYTDny2KyRwbnfmUSORKHccI0bKL5DdVbC0H
-cYut9dsFlnta8OUH+tU+EEPifKK7hk+QY5Cmkhw0uYFmF/XzZiDLm/MN/MYkhy8b
-QMLegf8lnOolvOnuVgG67CpyQWnaIm96V/RQXoF7o2DUcqnIr+cC7Knu66dhsRWV
-wQ/fL29mCRbdQpbgXLyu0S3gUCE7MoLsR3l/USs3XGAvzpTv8KXlUsfUlS89KjE8
-g3LZRlYharFbpGBMpXXv9HVoE9EtS07sURglG/vPliHilIArUkE8MEysDc2Lnmwi
-XRhBBAroZmCZ5MAEnIkBIgQQAQIADAUCT4xuIwUDABJ1AAAKCRCXELibyletfBwp
-CADIHMF+i8ajdvs4bRvIuGbUelxq/MZhOjUVhm36NcvmT1fb2imMriCwJghSSFLc
-cMIPk6/q38NbFgm+8/yJ4XsPEgDZGZhf/wX15NQwLm7BL52VonrGNgaTAVeJYKsv
-RVB9cxjwJYO3T2fLNodh+JRVlz3dIAkRzr6YePpJRACwgqzzNG2UvCVPPzUUlre3
-TqFQBDeT3MfI1Uzwyky9sFUWqAa/BWq4UnSL+tQ/FnQ/l5a2AzmzYZTBw4wDifcL
-2pSLEzsA3HCIbTfWXSQ2sTqB7NdgnQkgRZYzAF+zz/SxdAbcviah1FnHk2fPg3NW
-839+inbxtOMnBF7CXcFV7FkSiQEiBBABAgAMBQJPnZIwBQMAEnUAAAoJEJcQuJvK
-V6183y0H/0lk43BSAVJ0vjmPskUnf0QB99bENZtQK2kBtoN9tz0CbFrQs5LHuLuC
-Ef3qUhr/KixwRof45eER/Yp6tbx2SyaQl0v+OZkEo2lZo79euQkWdvGZRjA5wuqW
-2bjZu3ok8u0br04b87/BjVlZv/bInLbxZId7UA5a45AbDxR2ZxlDcg9nIFebEJ6f
-ToYumuORTdXu2Jr+G6WbMHmFSL5/bv4j6JeRgLJ8db90ZA9kZH8SHJy3xXENX4uT
-WAkuqjSPy+ZCAzhQ8O2Y9euAOjnmGjXQtnZoa+O6STY5X1lDoMKNyhQSbKEW0ARk
-n9GX2TayxmfBnzytuEsQD+WGowykWbOJASIEEAECAAwFAk+vXucFAwASdQAACgkQ
-lxC4m8pXrXyIMwgArKNxPc/ywbe0QHBvRoE7Leg7zyrotR/YZkqpBa5yFz+U7n53
-p9Wx+VWg5nMknbMy2LPT7A2WojslZQEHE3p+35KLtBWuZbyTclZxQIvuf7/YaVjt
-bn0U4VeA7+Y0f5lOzq7GXMrooHdRKBe6ZhOa43mx0slLcBSrCmNeCKeX8kToXc0B
-hvl84ZPCrmjGY/ElwjrNRr5xHCcg+kdzR+i+F+zHizklkJfeUopoKd92jV+u91On
-OtfrzZw7lSwJZIsZhSVrPhzFKF5v6sqSLowyNrv3sc38EzbuYlrNrWv0NVPqfqei
-gO3btzGwnVzikeWtosDgQS65yGynpoK6GVo0qYkBIgQQAQIADAUCT8Eq3gUDABJ1
-AAAKCRCXELibyletfAw2B/4raOsHII08nVd07Z9YzjFaqZ38UVPDI69RS0hVL2n7
-JFU4pHwSeqrrdTDSWkqlmYvNOQ5V7wNc2JF0+T1BXkmPOjqnCPvj17cV3bPy19Ip
-IiNAIU3k1+GrKr7sB11yTwqTOZOQo2yv8avsyM7NmcSl4sVkqkxFMIcThtPmsVkc
-lDQkActrUT3jrUjUb5kL9QsIrgQNSNL5+XjtpOyp5s3n0cWEqxQWpPo4CroZAIFR
-BQKB7PWngfZlgKyx88jjc95kYsMj1i5zlvXhRAk9Yqg1yI/gJgCZpDn03Q9VimI3
-DgTTDJ5CZzio85CGdyeRKew2HUi+/QRYYr5raW8nukiJiQEiBBABAgAMBQJP0vfy
-BQMAEnUAAAoJEJcQuJvKV6186z4H/il3UguKvFKnj0i94oU/w36Wlj6bj2tVoiz7
-NUQCojHclCp2dDQ3prFpgepvOnQcuHjyzlB7Ac58Zu/xjhLaRZKIN+kJKFqfNJk8
-foSzMITR9uOVY2OopEpqtQiUHL1Sqse7RZdmOwBFQDU+oP9YynRgSIiPR2LBA433
-WwrRoi7LZdA6zhRWRGxCom8/hag3SUAiSyc84sxayFm7nACaLOLAs6CRcow+JuHv
-rffxe2VNz+kgXcxRUy+xSNlGnWqKGqCNDhX2VgBgecshdGB1vJ5zf0gSzCjWH/MJ
-bmVn4Z3ZeNp159E7y+uA/c0VefwNe7RmZn7yo6ILJxqDG/xi3hKJASIEEAECAAwF
-Ak/gTvYFAwASdQAACgkQlxC4m8pXrXx+vgf8CbMovNfaDYOKSYj+jzxBirwyztiR
-gm16NrZfM4aaEBNkcDtGTH4iq/JLiT2YeLSjrN1yzueB+M8OeMHVgTJm5Act69Xh
-jKjeTXeDBBvmBZwvGM29cHJAg59utEVaAOws4hIq6ObmHjtnGi1Gv9ZnJi+DSvm9
-UZaTvTTZDqrOF4tQ/yIJhcbOl0zbAs6OPQQnFYSP3hnjJ/OKCcmSf3VLTpmyckIh
-3Gl6mhWJgnyzOckfZELMdOdcc7Q/6mp3v3UygdT3d9euVVoyWV6e9miPo3i4KKJi
-dg93Mgsb65nVOuApvA3uv/9/llLr0Zewjgt6p/rmB0fvacgelb++ZcmTWIkBIgQQ
-AQIADAUCT/HyAwUDABJ1AAAKCRCXELibyletfLTlB/0SVAw/Rxfxa7zQ+/xTqeL4
-oe50IQijPhd0Vabn+ZQ7r2PIxpH5CR7nFzexnitvO0KXN5KGVhZKEiWpP3hfo8RV
-PuDWugaQWHg2jY/BbgBB9qZtBGY+4MJHcK7N2Ta+AwNe/lDXeGgyVRydpSh/hOwf
-dhjVlcspUdAD+WZXiF5XTRcTb5PyUfOHN0xCfwPTWu8jYPUWe4Y3fLV40nC5gSCY
-Fs8Ph2h/tynXW6inPan0HXlT+5GOn+cpM5HUrSDccXtJWFbO8oc4+7OLixfI2lgL
-mLflbGilJx6JBeAOtqPocJgpKhj6acIdqIUI3h9hGWhDzaUG24FJdpb23sABBLtL
-iQEiBBABAgAMBQJQAxaHBQMAEnUAAAoJEJcQuJvKV618HuIIALYzVoPUOGlWzeBE
-0eKTnQsLGI/PghuVjcUHhLhfx8j8SbeBGH1H+WT9uDf4wvjlAfEaOQ68fYt5/gJO
-ynPAKlUhrAyHgv9/sTyQw+wNNmSKNmSZX6TsNSaLNe4icV8uxuioxcMX9THwOzsR
-f2qJf2GErTWhewIJSvyqSGpYHLLfErFeAhLtVWsdHZrBnt95T40oh8Ava4+/M3+u
-55czRqK9x992gT2bhTQQdlahq/Gg7i0b+v3ZZO8swuw3Uk/LO22aGNHyXxMBAXjD
-KwtOED11yt4LOBoWgShshO24M4FZhkmdMPt/+pJ60J3atJmKn/3RMS5OrRPGRyLj
-Zzq0NLeJAiIEEwECAAwFAlAW7WUFgweGH4AACgkQMzvmr22smRh4lBAAn+hG6oEr
-zCg0BPqZhwCKvb9qxEztL1ilIWdtlUp7NjwrtWRQX731i2NSiNLGF5X1ILX1Fx9e
-/N6HmZLrcDLKtnJwBuf2dC0YOFByuPx2rMmsAE2zB+5k5AO6dDtdSUq5bBiIBicJ
-dGWxwqTObUsF5s0SxyutDdLrajxScV3pqQiddZ3qUdVUf+5tJ44ycVCRnQWoLAY5
-jHW2/QnzRaYWxbcDPw2RHuLe8t8246yzsyLEbU+LRQTC770oeZ2ogJ+8Pf+RG99N
-W5jyYrc3bNGORq4Y7WgVEG6I4VWsTOYXGzAyRpgvzSgqSBS2WUynQnUq/ZB8KcjG
-D8yZd8BD4OgLlxWpgMbeCEiUKjBriNTNfRnoVg6CupI9BJDlP3G8glt4kPQC2Iie
-/jl3QupsdQqtZsPRZOvm2WPSq7zzNVRZzcN64v+SVU1t0bvjZtemWrCUV4v6AUAL
-tUcu9FoEgI1qXanqOEti2YdLIGdUKgFIAE7ZdXAJXDro/IQkmHQAsSM19NbR0T8/
-F+kaEni+0KddgP/NtzwnXELeFbWaC9PFxSCFLRBwZ0hJO61ZT9pKr5VRpXDfj0Zx
-0k1IoziSF8ZNcbgbhXyKToC53+GMacCaBFY1lqgCmJKG/e1w/sLg+dRcj8I0iUw6
-0L34kOhvGCp5Q08vTywKmaSM2jLwgGgIZouJASIEEAECAAwFAlAU4vwFAwASdQAA
-CgkQlxC4m8pXrXymyQf9E5P9yG+2cMDsK7d3WcisEJEW6yx3XlcJ2c0iVqxXKw2x
-4T92P/AYWm4WA7QWjzdcAwePV9/O49dZy4nxJWKdWK02aQLvh7Cg6ed2GZKVJe11
-w/MtWaBsAKA8oaK7jO3IGArYXGGpN1wjPWlmzmIlRMQSP/8BhQZs3Ke8I7a9RipW
-bmm5zKNcYPhy1saP4akzf2Iwt/qdLaFp0YRs9KnDvk0lPF0vpijcvFcKJJoaRLC5
-4umjBkVFSwZ2ziiuUIUI3jZgHrO2PUOhir5tMnrXLYZB75X+duJqLZe4TIjT0VuK
-bXkeo2z5K5RVEqzs9X5IEc0OWE62DzlgCRx0xQ7JIrQkQXNoaXNoIFNIVUtMQSA8
-d2FoX2phdmFAaG90bWFpbC5jb20+iQJUBBMBCgA+AhsDAh4BAheABQsJCAcDBRUK
-CQgLBRYCAwEAFiEE9oLNzDncD+rhFiC2x0bPqedPpLAFAl8Xzy8FCRU0XEEACgkQ
-x0bPqedPpLD5jw/+MQp/Bcu6r4BBJOAipsbeJDzN9cL+zoUwu8rcmdfpepf8VWCz
-9X8Tv70FT4l4WInTGaS6hnq88PDNodgL2gYynwvVwvVSLKHgRBHG/YAkpsjI7fGS
-6Lmv+ou5P/UXxGcil/ErWxS0SmMXyn3AQt8dsWPVz19N7/SjGZnEEz3PFjJq0C0D
-C+eQE9/Tbuif/cqok8ziNU+ojVPo/nA4jlEiMKr54aSTEyRnPM4IWvzKg+XegaRf
-BDTsjkEOsN6vRqIywtPpYqwBohnO0oUZp1cEz3zZIiSf9WsqXh3jA9yFJ3mdwOYJ
-796u24TtxpiL3jafQUbR52atgBt/7xILzqBZ7CS8txzmCstTOEhm8BH0HhwIt2jM
-LJaGhYotR/DnrtPF1fn8QQL34KOm6AhGb7CyOCIFX35ujwf5KH8aLkhwZ/sRAxx+
-dzo+x5vbLl40dzQSuJmQYBrkTXN5YEAkYkxdm9xHA9JGLejsgZJRiKOZlLHQYhEA
-kOsIdwLBmaMDZ68xIdQshytg5iUSSfOgm89/ghupRxmWriJ6W2qqpkOVhg8XgY+d
-JaBu/IkSZX6w+iA7v4A3OOClMU4d5dmZ9meQE2ioCvBUWxFNyOQFIBpTUdcJeu0U
-YRiLMyOtX48WLhb/hfPmuD6H3P7IQ6Xg8nDcWXfU7oRqsTgCnfsojafKqgeJAjcE
-EwEKACEFAkvGvnkCGwMFCwkIBwMFFQoJCAsFFgIDAQACHgECF4AACgkQx0bPqedP
-pLD36Q/+I54nR73BE55Su6EQcQujCLYGYemyT0Voi22nYyex9MchPTNrEBBCZukw
-MFNuPkHjNj3qDwS5tQ9XiPJodKccC/eDCdUqWSfzjcGjro/UJN0Ayo7rk1XtlfBN
-Ed9SUWybhoUQvwaRoThZtRZR8fZYSxuIH3/mXVCzOYcXMmjxXC/W2Y4YIQfnOwIy
-j0RJy4PIYv0k2dj7z+kycOpm6xWzoHbQXCgvT94Li/5tNPnpwV9qvzRlfyuTR0KP
-oK2KUVSKzOnq5A0KjZQ2yk0CcVQC3Z6jj7jmIdzjNVGy2neSne6vDS8yKj73YGUA
-Fyh7moodGlKRxHXdh5uFWwr55AeC20dwnzJ3mrJaRIt9VFLrZe3U9t4awEppwZ7b
-VTRAx4lIDJapgb+9SBAJ4SxGZVnD60TnfKWFdXUoL9XGGFp3NERJJ7dv8jdqntJ/
-s1EtvdKp2g7ZS6+/8ase+cWC2eNvarVjUUWs1U4g3NireIgS31yq95TyB3By+DMr
-oVD9RoGvahawcLFrEjxM8aZskXzzf5U4+TLqlfYQjJ7LQTBcyVqdEd43vVhb0lpi
-S38LtRFsnGn0gEqcVit2Mxf6XP7inGDeHdqYfzt2SmiDvi0KviD/TCMEuz9x0RfH
-EY20Cj1Y4tEzFsegoVjWLZgMERdqKIHNBvK+bGZlxlt7cM0Yj/eISgQQEQoACgUC
-S8a+/QMFAngACgkQHy+EEHYuXnSN5gCeJmAOzaNKDKMFYetw5PCoYqHs/D0AoLUK
-8wmmiL8Ykzii9OXvfJSs/JQmiQEiBBABAgAMBQJLxs7tBQMAEnUAAAoJEJcQuJvK
-V618LeUH/07FQcoYLk8IkwyrgQENnAOeKQ2/M4p4kBesvDWW8hP7BfUPzn/+mmyy
-q6k/1gB1aKBvokZlol86F8gMdwUg2/vhhQMSeYU3ZpVuIXaernEv8mgFixRRQci1
-ySdbQDGMoIzTezxeqgLouABd50qqK2WCKCJmP/NAoAQsmDZMGUlMaJRkrpVbIA+S
-Y/OXkfts4pQol82X95cTEhJmpWzS/qfN4Qx2Qsybw9kf5fi8Yo0yHYE9X6HcGGlB
-tegD5KAK8vnCF3TfijowhOeWciJIEaD67gk6la/d5kR7VO3mj6oVilQiu1Foe58E
-bAv/mBiRHhWCiU0PQm5VhlTqWsU++jOJASIEEAECAAwFAkvG0HIFAwASdQAACgkQ
-lxC4m8pXrXwLnwf/edVV0T1yN76iMgiXzU5PQtIrQXOQwrhakUWpOC/twgnFeKcp
-E2E9B2hmQinZQe5Le32GWefJzPvuK3j40UF4++/Qvc1IzVk+AmHK1zoGwNAtxJuM
-S8zhcaaWI7k+Z/R8fZGWYvayyvur3Z0aldubQXQtAoHLt41EyJ8gf0NDPuWGx53s
-JwHE1lEXyoX5Wgk2i6Rk++h144VA2KcVv+yKoVqtzt35yX+c3k24Hhe4B+vCsbV0
-7lgul7DOjIZD8VZGxLurHiYx8I0FDHX6b9z/hXjsnKUM+umW4T7lbaF390KTMa0m
-jOKrDGSSTpSB44zZDmj+NDfsp06+ijfFJtOVCYkBIgQQAQIADAUCS9iFugUDABJ1
-AAAKCRCXELibyletfNdyCACXG7bKukCDHoaVOso+7HXKIljJcIXwP0xGrCaO/UCl
-ADXCnPGgshSfRXCO4Of/N5vaN6fi7eg45DfP/TaBhi6gh5PaX5eG8RmUDGF0B3+6
-GYdpgIuQ9YY77LD5a9KcFvouptrPrtVkGmBFyOKW2jPB88m510SzdWZW7qkIncv4
-/lbHC6sbTc2j1jQ1eu19mQ3wW3NEmRhpwIB3KqXg8zBVPYmJAbtiLpb/oUDs2cLE
-A+XhGPjORVop4NnwAjYkVOL8BBIteQ69gt0Fhah3PMbVd7CgOGJvO6zndd++kIF8
-UziXvPkTx0uvvL6UHr6KPDL0VPeKF5oa1GuXOmGKsIw0iQEiBBABAgAMBQJL6as/
-BQMAEnUAAAoJEJcQuJvKV618qGoIAJv/cRKTgx2Jxeg7KuOuuCHpc7qqjMD2XCwz
-zrVOO4bRvv0k8ZtuIGUnqm9MLcGxuhb53anuq6cHIldae91uq8ZIAYDa5Tge0GTp
-qeTVFEsHd3afy+BnW58rXVhlPxsHkXuu1YRmpvjBekhfAJxA/G6unVlfWNcJCtVb
-om7/MWeErJ/FkYUzAfVuZRTXQxJzkuHhVS/scLO1sE+oyQ+E4p9pmhTNg39k3sxH
-GGS+Q7u5Wa/UnlTUyk3vlMO1FFw3XGonFuRBTPvu5qGO9Zi4F0kn185p8+QEmvvj
-w7hUJK2rUUXMCTv5Jrt6yjRMad9Cr1xnGXzeXGFzPjYUL8AvF9WJASIEEAECAAwF
-Akv7ddAFAwASdQAACgkQlxC4m8pXrXxlngf/XEdrYp54gEXe53zsH4AL1ey9+0D6
-h/xcFEJ51EiWo4ZA40MJOKpXaq6FbImEwloxolwffJyex08D7LDNTB4SGEgXexBW
-ch2B7HsZUvIzXLDOZ7tHKGjfzP7Z2g+qekH4QSZ0JVkbrCcbXQ85LRS9pGLwlA3P
-EnGoPaq9rLtyJadTg59x41c9O+5eBurTIIvGlzibLp1hpWbFmXRRLB/4i86lPdlb
-6dS/jjt+yGHSUHovio0nvXhPrmYyAi7otS0ZOS7dUpmm9v2qZvYGthV7h+SPGcu9
-LztvyLJj7Arc6GCSfyEFvcRg/edFnE9E3lRmS7ZLIglRX7/utz3S/5NA94kBIgQQ
-AQIADAUCTAyZhwUDABJ1AAAKCRCXELibyletfHtuB/9vZBPKbTnoOhUGxFMjmOWF
-96y9pCcZAPs8mLL5T4UqNU/4osHlgbU5SoPUEHHyrtQcfqI0ZEA/8pAkXfQ4rm8a
-hFnYTfbSkXMyUFDZkfCFG6O2BlcGKg+fCSMHy5oNc6comU3qfTFVnmDIKycLz9dc
-0ZlYbQem6YJZn2Rg3gvvxhedn1nrt+WWKDnAWKb9zdFeLCoW9qWkO4dF2yx8lQGg
-DoK+Afr4ZiOWV6CQw+XSN7luHXCpWcXPHrJiHiU8Et0SLDK8mcYju2RLPCqlhzYP
-D1aVWisQUgLSaUFtV6VWyFI8OCTOUo7DL2Euo+GLViVdtmmvK1Bzw73rP6d198J8
-iEYEEBECAAYFAkw8BoQACgkQNT3KVrS788f2yACgrQmmKeqC+gb96hRPIxd8JycW
-nX8AnjkuuNWQ+RXvad759sg8nX6/UgnhiQEiBBABAgAMBQJMHb4OBQMAEnUAAAoJ
-EJcQuJvKV618Xo4H/1Ur7ezPCB3kinrWHtj+S8yXp+BVXgTnm8D22XQHvXtVn2hG
-u6T3Xzb4Q+DMWuVv6qo1MuAwt/xZmbhCmkHw9qTcwKPD4WDr75AAIm/fo6NlQgTE
-OOBxSdhrV+k2QlNvx8JvvM4GpciMfsYBuHhqOHBVlwMXsGiMPbZ92mX7g/FYzmjp
-bNsn6iI/8BMXelZkbbhYHZsKxmACxd4eZ7aZuZDCKtgOW7yrkQs8Z6Giw9Wtm2nL
-0m1BsWlq3O9r14IcK4IPG0Pp9c80+NYN3lRvBb7Qmibzg++YUpFS7XPGIk8CengJ
-xdqxRxefM8wUvsM0P+kdxmS/or3VyMslF24AiYGJASIEEAECAAwFAkwu4a0FAwAS
-dQAACgkQlxC4m8pXrXyomQf/bQAqgBt3T9k3X0OteCOzIx3zgRmy8IJB2i2tMrCt
-A+H9EdpM74yP9QHn/Wr3VRDUU0pJAuqPfMf8l0W4bHql9UdAhdQzm31RLheXCjTQ
-BMy8wsCMXNNSnqAZV7ICHF9aSi/Hki6HIWtxhtBLs8eTjVnLdKy7wm/z4nErdf2v
-taUoLMpoOpyhMkssIme/Yg3AYcsM96VeI+oRMczt2rCkIvwIu6pXvBilZbnqeeoJ
-jEtP0dJTo7JxkltcNZReS2yy1nb+HVAskon/VL2BoRWVz6enyX+lbloA/okfbZnG
-/hOA3uMEuvgnDx0NDG6zpGssRCP3K+T+gPfU0nCX3Zm9cokBIgQQAQIADAUCTECu
-CAUDABJ1AAAKCRCXELibyletfAsWB/9ygpnm0+1KL8v67lAkHoHWVSCvzEa18z+h
-KH4Cwboj/hE3YHRfp2HSu2bkFRU6MYTYLppldsQu5P3cUzVytPXDlVkq6M9dh++c
-MphFn+6tCuBT0PDO3VhbNMJ/QxNMxKD7VgJO66YV3OO0k8Vy+tgpMIhr1KZ1BCIy
-h5WS2I/0xUMRSKtmNYBIN+yslTqIT74EQB3R9+hfEujDj6eY99A0e5Uq6+yO/kLP
-dCOnfoGID3dzxaiZU/VXai/O86q8Qgha9xhcHmkJaV3+2F7BuTeMMFMh6DFoT9A0
-DDoFnR4qK5B9CzxqXIitPWfAFqU31ySEEXuh6dRYcf9xQ6WSpP+xiEYEEBECAAYF
-AkytDwkACgkQsCouaZaxlv7/nACeKHvjzGd2TektkpJkY/tZK2O95+cAoIdUC62h
-TP8AD4DKy5PolOcVaet1iQEhBBABAgAMBQJMuKUsBQMAEnUAAAoJEJcQuJvKV618
-5qMH93a5v45oZSFEPu02aeO5LoeTfINnxBBiybFc4diUKATEeSgIzxVZ4y8JM4wC
-eaQ5GxFpqrcA3MzDGYsoMistS6WGntC7tih7Pq60TWv2R7OqUeqT7LU/8XBMguN7
-z9kgd4n1nx1qP2i6l1ZC8OUZZP8QHzjkf0XhcORuPBWBwV1vvxN/xETrYyhAYyfH
-79LqQJxsY399YQIV9Zx5EjHDc24kNrfdsCR1iE3XT+2dh3FmBBsAJWVQYPzRdsbd
-/ZMYlqlU6XU7tgAZPaGpNNftvlmP/n7VJC3Vn2Yf4If+Jr5uC+du0uVgx1vIiyNM
-diF+g4t/9kWrjXoypfBG98ZlHIkBIgQQAQIADAUCTFHRkQUDABJ1AAAKCRCXELib
-yletfJdnB/wMroGiWwcLY4UMLvac6zbTHxnKKNnWP/J+jUmkDA27/jGeXMYYQzPi
-MftKLzqJl6b6BQPqdsPQ/HULJqAmkZd1W0/tp+Noewp1qy5Tkn13ud0v54ySFQIb
-sh3Bg31Ysp3PvnrY4yh0auYx6cjPheVfe9IsTYzG5u2oUuU36W2MeKtmFywPtL4Z
-JYmytoBq+7Vb7LQFUwQBV/RgbtRsSPemP12rYTTYF4tInPlXFWcHG+uvexdsOnJG
-UvFhe11VtTt+cmMiiapgOKafNLxH5nwoPDReIuTziwsDIxLbIwAcKT0vRGzoe0ri
-UPSQPX377/o2YhqtBHYFI61uZf689EEGiQEiBBABAgAMBQJMX75EBQMAEnUAAAoJ
-EJcQuJvKV618nL8H+wa50w8/DVDx5RMcfD4dRmf5dCT3d2foGFdvg2yiIc0JNVHW
-H7RVO2vXZk44dOuQImFNm0bvHQ/nemNKcYwzVOLR0TxyyODTk/3TbmAZDCZl4562
-iogw8djOhWlMPkm5B34ZFL4oLw3+BJg28Yk6Wjzl0vD/acjCK1jwyvPk5rRUvCKA
-OxMb+/MlkHqj8Lmmcm17/iJWtWWSDZVHIX+Q69lhR7YQmPEToVxNBsreCp4xYE10
-OwNDzmHYvYQY90X4gWwjfbiPSzcm3IGXxtZS3SxJqeq7G+Udt+gav/A+zNGRevdJ
-ldbZnDfNYkLj53A+Hzbzdnqq6ujFBfBbyveur4+JASIEEAECAAwFAkxxdi8FAwAS
-dQAACgkQlxC4m8pXrXz26Af/TxoPcnp644VK9OifJKVUk2ewRqKMVZMz/+R6ZSej
-RXPBV23dALkO8n158e2hRhg0c/RSEwG4EuDiHJFBjlUUMeUyK5hDa6Z7YL9WhN4G
-f8Aeg6GzEvNYP8g1iDQaMv/szT5qpnv0QadDkSeGSiI3CxZCtxu8MU9Qn7MPBgQM
-QVmOfbxJyvCWeEiHeQSkfThG62ZzLYGNS2CEEP9IWxrPNnyeOTFbrYDEoTWKObH2
-CUGE5Tr2rq9imTCygopU18cnQUaLk3EMUC1jPvCP4v+vZ4PEZDEoieGP3aw2/4vv
-/dI03Xl58ATuAyponT8bz2QRA14uraV4fOEy+iD3lkkDeYkBIgQQAQIADAUCTHOD
-pAUDABJ1AAAKCRCXELibyletfJm8B/9nK4TVK4GG/Ki8th/pq5dK+Gu3Zt5FwA5B
-Rv8c0gAUaEXSqajoRWFYIHBFLfi0A9rMrbM+sVTSHI58hGkjB+gKGjutPAvfGsbn
-HPiyIwReYryPEXIxe7m9saQG0Uy1Me07LGc58HiGB2uyl9UoCqpDh1AgCUFwQSTP
-2K412mJ445wHny4ouXK4LZ+QuP1ExEwkMSE2RJz03r4za9QooM0tM2ZP7WngxJwa
-CCPYRmj+G0PDPPbJ+B5flGUBj2eHuapqqKx3TK/122a830sAZRlTcZKRGmDDJcCG
-AAJqsvKbjuzqLOnjHQM2g5NdHbAAb5slZoOO8aRPuloJRAemGdnXiQEiBBABAgAM
-BQJMhTxaBQMAEnUAAAoJEJcQuJvKV6183sQIAJB7dF2nHrh4ktaj8W5M8DZKXwUQ
-clvvCdAfB/5H7oB14IKP5JBqVawW8UOssaPjfyByfbmQ3dq1I4YZuG1aZAlSzZLw
-R6k+25QQjH0Cy2jQcd6OCL1mEYOk/g0iZ5GrVo3hcl3w4Mg2xSE/8APtjtlXVQFm
-URm2hb0Xl/ij2QPz3WDyacyXIgAA46G9xSowq5LLT5Us9fNjo+hoqvA+bhmwWfYl
-qEphJVS6yR/8iyutcykAPBbIUHO9wGEcYQlHzHAe8NWNnUdRzMYfR/tP/u5JlXPi
-hABSQkA9ctWdWEPbATeTCEvzqsmj8ehBwAJ8PthBGDOFbt1XSTJEYmcxjwqJASIE
-EAECAAwFAkyXBs8FAwASdQAACgkQlxC4m8pXrXzh8wf+Kh0h0mQu262TfUcNom18
-QFfyK3nMCy6qt6rOvlePb/THPIkDH5vxMY/vGkPA/ZLUY3GXyBmPR4rzlHkixYkS
-yLipMtkbge9gzAPxBMEu1dyxY+qGPEXjX8pftMJTIqzdah/2iPt0k0CEJEOVBFeN
-LhbSbkvgKtygZ8yzh1LypOkJjQfiOYnMK2hcgPbHcb49CWhksXwWCe124JkKSp8Y
-CfPxkb1/oPgSEkYazqOo+Aat/fQQO21Ox7F08RO3/Dzg9nQhZskiyRz+UvVAt7qj
-MBK5gtxN3mcDuMm0JrYU2ubRoPWo7IpNiHiFhi7qYzLtAPXNrQIm9dWJtzlXstWh
-xYkBIgQQAQIADAUCTKct2wUDABJ1AAAKCRCXELibyletfDuqCAC0KXsNfvsDNAJl
-5ihOO4L/WjMcBB7SXt9QqLXE24NFV+kKFkXWezrQhKaTADzj75UL+bLbOA9Ttm20
-gQVUj4l9d+HZJppNjMo2/VUbOT6vwJGYivz034keNDU5Mv9IKsK/4hNgwr6zYMa0
-OKTRk14hVp5yEjiQ35QmQth7pa7D3zpNkQ5kV0pME2zbMXAWCdzfbqttiJC/kcvH
-WqY1AFYH/zk29YZBikkw1y74W5kvDWlGtk40zPo+gRvOMEGmW773doVrFsKuihXQ
-3eQtSMTC/EPO20iSM4ZfQx5mCHQVmJ1RYmKaa8s24Gn8hunFKdSGnpcnZ5IcSP7L
-qADQh57biQEiBBABAgAMBQJMyctFBQMAEnUAAAoJEJcQuJvKV618qZIH/1SwhFl+
-sSjqcMqPSUJY2qjBfiY0Uk7C1ooDsnNY8Yk0uqYmDWKQlWWinkfIHoI7GRUDtdp2
-hLfhKewBXJun/cFqxdvpiguh0z1vb3+65eK+BDD8y7b4xhAVL/xgDEWWCYugDYaE
-j2LpNcE+7CwgPUDXLHYunQXnLwpzkpSFerWjCIljRp+pi6BHv22bp4zVKXMSCCSY
-ctitWNxi0C076/Qk+5k1e8GMvVK/e8Lnz4Z+uxw2SP0+onnIomoBS8icD3j9YckE
-GutS7QTznBh5djcz4ET61KTw4a7rZWahV0dvByriWBtUMInucxwed4MlTpal208W
-AlCF7DpyD36oFY+JASIEEAECAAwFAkza/OIFAwASdQAACgkQlxC4m8pXrXzFZgf+
-JGhxoIZjW5+u4HRkcNnEQqkT0vt27vKS8XBmcdqb59iLPYZGqxV3FU2k8Ct2j9vY
-0EVXEVKrv55LQyPzkmhSGyVgPwklQV238HaSMha8tvw5C+yI5JetEBhz/4G6qL7A
-+dol2uOr1MQ88ZmVohRTiA1tA2h6IVnJKhx8cnVwTpr79YXS78fHbQGwwKo23VBx
-dqKqWzdOo53MMVJ5eMJrQfZgiXeX0mvbjXixsRrXICMqkDZpkseyiByaHdbIl2H3
-rsxy6xf7mqZ/O+ilg9u6y7cPr8GjHxN+QzwMcoRGaYa/wtjSlRioNU9VTgYMvlpg
-YiDJvMLDkuqbuPyqh6LnJokBHAQQAQIABgUCTO/CBwAKCRDZNxCXpHPJkE3LCAC6
-RlCikFM77EEvtdyPGBmFhbkLinN/otafpL/+3sBLjLs8rasy5xWI1r8rbcAWByNt
-qTn1SjfyAawjC/VFd80UsM3GYCg5vHocQg+Pca/5wK5EaeN6m7nrdWLop4LFR4D/
-IpPOdC+ZNVxpZzm9qc8a+74jvu4ltH4Iomyf9u0lvYjw74mlh/Gn2cBrQ6uUMvBJ
-Yg3oPrVojCnH7BSzihgn9CBl9444kPMdlO1fCgctPByi7OvTQYnmHvcqpKOBMAHl
-xgxIR3WxsBVTicWV0z9RcQsv1Ijs5Sqg5WqkJjalrLkyFy30D87kJNOnb9qsDYR1
-sB0fSZtIs5RE7fU/ecmMiQEiBBABAgAMBQJM7CBvBQMAEnUAAAoJEJcQuJvKV618
-pEsIAKwxQOHp/XENL/RRUp1NafqhhlxXFiUJd3jj8ZX/KVmwKXzYmHV45lGQrDbU
-nbGrZ2MS48eEeYneWFgod0l0Z6XCE6zDUGI2bOGT4ylf81Hs/0pP8Y/Wbv/y+L7j
-D2k1MQP1Nz0goRR70o2vyWh/fX7f/YgH4no5/YEeFVmok+v89gscvJDVXvpiNjtc
-++6WXX4Uxq5YDL61Xu8dX3Td9i3oJPrZZvwi3TL0iSK6r3Z0ujDg+KhI7Qn1r4fY
-eL6mVncNrxyHSpkkOV+nQVqYBOBCuTgN4INIwjSCStZ3yLodbDZlfkT6TPp6J+1h
-oB61F2yjprROF/sEpR30GsAMDb6JASIEEAECAAwFAkz97cYFAwASdQAACgkQlxC4
-m8pXrXwY8AgAsqOXvq3BG9xb3tVVS7+Ax5xj8jz+CmOab0l+TxlNbsTKJoNGFhrh
-EAeXoiMuE2t6y2BFktBAluTcy9jL5utWEWkFN3y/o2LXWM1ttZ8gMH8eGJOb7V9n
-7z9UwtcMJ1L3ZUgvPEypXz2iJH1c9Flgcz84tlbdq0Xqyu5/epsczu4QSI/GTK/V
-HpotNQEFKfIipBwinEg97budu6HmjTTA/czuXLOjLQl40buRBCwZ4RTmTbpAcwGN
-ukkraCGEeRhHOGxESohXh7evYmlqCVWNCDVgcu8gWchbCcAO7CXJl8iLfgi3+rPn
-0TQAv4tXX3uccNwpGjjKey8yLwWyd+hRKIkBIgQQAQIADAUCTQ+5SwUDABJ1AAAK
-CRCXELibyletfG0KCADJUiOXEDlUktGtkFHgcD5FiObNpxJOwBsC8+5cKvN8cVqA
-kNAbN8k9rifM3oSaQZLrb2orexjCmpEvYlYZWYv7mfFtIUtSCyqQ4bIRrGOZ+ZvN
-TGvSw3R+0exN6OlNj6W0NUM+9eUjnGFLCjwmW3snrZPz1ebGNfLz6aMb7qn7cnrA
-enCKamIvCFo6JmK+yUXMJKWsk7MJb+BEpCNJceSsOcaGozyWD27VNV3n3nkHkOZH
-lx8eGvElbIx4nop8V/j7UvxzL1uT1UKNoHqzkTfdmwgGsIpP5FhztDQltFXLVgkm
-WFa4YF27j/1u4bxyciP7MeAQSg3wc1cieYenyYRViQIgBBABAgAKBQJNGhaZAwUC
-eAAKCRBDJwX6zdQDJXRAD/4nz98Yyp1cAk8eSccTOWUMluWXrCfOH3A50RMwEVgr
-8fjPrDMnayaeJdL9Ud90kofNkgA1aJhi2Q7axnvlJaI9XFjb9k3eXY958viJ4pzw
-8SUmpIvSaO7f8j0iUnjwEu+yk+7GRbdPVLbr5SNhYRuo4ad+15kjfqSRIMB8Z5Y0
-dG4YDbSNlKa96/ctwF1ahG5iCOyZoZZjaM4XOsuZrsiK81YV5Egt6cmLNWTVDE9I
-7CZrzXGyiIWml2BYb5h2KdH6xdqYuR+bTiH8CgzkgnmfdCTaTQoX/nitHNkoAA7A
-VoaVFCf4cWhoDl6FpCxGt/zLeyRoUeoLJP4Gx+SzbmLzgOldSu5/Mbx3ABE5ShKb
-SH+pHUNmuFSl0DfUg5H0UvwM7QtGuvYUuyhQ7YB+ELW+2LhC0uXRbbB6swOyIigY
-Elu1vC2bA4A1NklQ8I7GMkRfTAKOpAEgxr3P4fnEfJJ+z5Gff9iWj5fuLGOUvE4g
-eJNAKyLkqdRK41qy69bCqsk4phRqQ5cns2NXq2oQLR+TjcUpU+28MkFG/UBzGC0t
-eN+MxzzBLOHHaLGVZp8OXpYrHIAMTxwiCLCNuyXw29Cwxa8r/thTkOLTy1hEO0ai
-ZYKffcVV5NJqX9KY5CrRSren8eJenn4CZG0JtG4oYuEIorE7AE58tD3HQAw+UPvF
-mYkBIgQQAQIADAUCTSGFjAUDABJ1AAAKCRCXELibyletfJ3lCACEmu8n/KJ+Ubhm
-jCg7S7XLGxOURMDlNcm/KuiloQszlmO8tpHp7bhP759vC9ZtX9o6DP1yUUwcEc7c
-3VONUnA+Qc4VPJP8QyrYelfVJdI6n5LtdAZsTKTRHweJ48+J2tJJ4vWffRAzQ3qq
-92Z+aly5qjjAGS3Dp5iPDxjId3cswNfHDBrAhBjULtjjRzjuGVT1/xO7+mQ+GOHz
-Bht3dNu0yl6uNijrKf/esFPO4iBpck51vwZEzNCwbN8mgr2R+bSbTU4TIM6The9h
-qc+r4TXufE4gZCriB5mNx4Q43dID5x9ON6P0GI4ors9Tm2xVmEmbZrt3dasVtee5
-HpbYZKgYiQEiBBABAgAMBQJNM1KgBQMAEnUAAAoJEJcQuJvKV618Q5EIAIOhYHcv
-/GMO/HaBLoV7XFfOJZa+jp8ddzT55EmH/p8m6PXaqzZQZUtRASabCMn18ph0BjpF
-W1wr8QVuBiyC2jNbRsiPED7P3MAoNMMLrIS54KMnkpIpg6Fhj60B1bGdSEoW4KAO
-iQ/A0Ju3Tw36bA7kL4gTj5tRpFLJWrGFmo4i4X/Syn24mm0kevggthhfZXeFjUTp
-U1DcuUNLHPwagdwZGqq0J6z9JrXCc+WLzeFI+aGsDYggKKN4gIjwMbvGZNG7XVof
-95txLhKXy6CTbt+1yVYy1F75be4f19cBBi3XtFJ8qN/bkqt7fXWS94BbyNkE1SrG
-V28bSJMWOI7+FFyJASIEEAECAAwFAk1BTjQFAwASdQAACgkQlxC4m8pXrXyc4wf/
-b4MO1Z3FG9XL/IrhIw1bsKc5/mBLv7n8L0tZsRMzfrCBs9H8+H5y+f44rKGzA0ue
-LArsGUcrR2jQ/Q5Qs5VTHR/sRgmCJHcE4xKRjNJ/q/58deFFSBtJhO7lx/v04E8v
-Z4neKHvflaeIzszp/uF2zJTM0VwVMXyv8uNdspKrA3aSiDu2yG87waMuXqBlVBRe
-6uSTwRKWCtwJcuXRGgwW7QKm3lmNpkwHVgTpiFcZTVeVQR8qrifhIfX4LWOHb/gH
-hLoELuBU2CHKIZVc0LthUb8dilydakQ3t2izo4YJol5OlD3amfO+k9n4WfMIvB65
-pqVZWt4xYPIRS+k3fUgvxYkBIgQQAQIADAUCTVL1IAUDABJ1AAAKCRCXELibylet
-fM4HCACUTtVUtdg+7FM2VSBg5+KkYMtdzlM9ssiMeDPFRWURlyxr/CrA9x1cvyTA
-7nw4UJ8DVZxmTj2nrQ6NmTKKgSPgU1bXryiFANvEAoxwhK1TgZXh9Che8JR1ONw5
-FS2pgNZ/cV7Lc6kIV5tnX4NlLkVzVNCMIY4CAIbmolD4s26knqYnSMb5VMcVJ4WN
-K4gs242qKPMlLEwdKzfaarcbKcGJeJPSKGTerSBdB8zOXWCBrbg42FdU/Od4q+tA
-5jvpM4G+2gGChvGh2hiZHHCmiF9bRY4rB3nl7xHdkvrbq02tNL+zA7OZXzOF9dlp
-MeyiJLHjY5G9wpD9YMC6d7R8bNvziQEiBBABAgAMBQJNZBpoBQMAEnUAAAoJEJcQ
-uJvKV618iosH/3agZIXLI3DWc8+PpT9snj4+lOaNcYU9Czj7eEHPbfCOJezqLQnv
-8s0PZZDYskE0BWz4Itu3cZMqGIBOKjHUL61phgqFGtTL3tsziuGcuxCld3nKyvmI
-T98qarMqFeID0CVU5FeN/G4yz1ZeVpdszC2AmYqDCKwGfddAwYwn8zpMb7FeRfy1
-5vwEbsXz3AIAhdLRMka/Kwmm/edeH6/nlL0golEz4xCsX2ge9OxDkh7aiVWJ8nJt
-4oWNVGU+AB07WaMYOU/Hl1ENEG01Di6JzIrCm0zi+rWda6j1+2cFdBBHeajnrPOH
-dLF5u5V/LEL/j+DUUBHsJ5Yy86AL7eUCt8eJASIEEAECAAwFAk116GgFAwASdQAA
-CgkQlxC4m8pXrXzWyAgAy20it281kA8U4ZprLzynWLrHy5ItWKgu6Kldqup165H0
-8h7qJc0F2pPcrctMQhe/uAxlajNTF//ukr4zddMdMqgO46HPe1BCX25TDUmW7G8f
-peO1fx8NqRHU828+M3zMg2xRJ5ZmZxe4MGLQFL2qD3rFAAdnQ4wWl2XUcLiEW1U7
-QJ+5zmnUoOKhV5qWnga34ITJpXC/JjLm0oNDMDlk1A2nKBlA6EFylphcpwvma1MM
-cZy1pGj9clLoNsbZ9PD2FB+4/YBlibUC4iWR2BXxH2Hgw1WxJH+xa2DI79dQugNi
-/JBPzkcS7pI3ICv6iLytvA+z23RPA9xMnXhZ3Gb7UokBIgQQAQIADAUCTYR3SAUD
-ABJ1AAAKCRCXELibyletfHHnCACqQRKAYyhiVuaJVW9/LBWzMJIq6Y/nZYoU2GvP
-kdmtCGX8uYgwOieKnTTEzOzMOTzKdYS+Ld9n7GLs3D2Q8B4IHHHHraZxMVhbudYV
-8mJC0n8+RTw6m+Z24D+1hSglVJGLzoR9DQa62vd6V5tdFm0c+rXt1aH8rszM2af2
-3NHQK9xt9qj3eQzmXJ3+yWXlBHjIZrvqtnf2hxrQM9rwmrqlaSUXCp/jrly0MuzY
-/goK71Qa3ngvJh+38H3gSczrsBF1yjCFy2PLTwXmJY3vAPPQsD0m+7PPGE53plYU
-ts3t2orWQ5qoO0tDAFfItlAfKjETEAmRE+YK0N97s8hdnzc+iQEiBBABAgAMBQJN
-liO7BQMAEnUAAAoJEJcQuJvKV618fDoIAKHSiIkRdqfNpHPuwbhTNnDhcRhqR395
-SvpLzNe7HYjVsVTNGm+b6JrEwiQ2mkzGua8lJ2D8Zycg4K/BGJ0+UYq4WmMHvDn0
-FOJ2HQOK4t6hUDi/jCPUwccTuBMn8G8aqjt9E7W0vbmaJM2p+S9M1UH8HRFh2K+P
-3a6yMTJPax6omIPwgmEcBGaZJOEahcLTGlRhPS+tm4OrGl0R76RkSAP3z2e02kRE
-RvTeoEvGsq4UvSq6E8oU7xRpF4gx9UpfIzW9QrTCUxcsr1YI1UBAp/qSXx9hvUWM
-S76mZ91MuZZNOgTnAnFs8KEq5OWRK6Xbl14JO/dSmtTPnJVGgafukE6JASIEEAEC
-AAwFAk2n8ngFAwASdQAACgkQlxC4m8pXrXwmpAgAkayItBzxWahqqiU4FSKTrKzd
-QD/KeIGIB7B159OOpPHVB1XfY70W6bVeb7+pNYKlC5H/K2oDCDQJ3EgnbEmCPqxE
-I0LDgpkt0AEcR3Ckar/LKvDpRma1g5zCWXiYjkvLAn7HZPvSgVmt0OiGJQA4h0Vv
-+yUJsR6aprZy/SrLmFT99Q6nsgl+9Aw6Gosvb3ZA0AN6Rv73Pdj+i8wSBSV4Ttpj
-Tnq00YONdOfEWfNj1mUdopd2GB+7Erttr/uBZFCx4RpbuS0zB3+TJtD9OdikXVc+
-0U7JKFGDtX+k9mZhUfXVeLWu6GLxs9MHG6ij6kR63t5bATNTcR1HvmltjMhpVYkB
-IgQQAQIADAUCTbnB7wUDABJ1AAAKCRCXELibyletfK5kB/9h3aPzoK/I+mb0L4j1
-HP9tQwlWIqf+96XlY0Bo8aS+8fiJS0xFJsS5B8JRO3viJcIffR1v8Uq8nSoJJgS7
-oUWnxz/qv3dNE6E0shRoEim3j5H5a3AHN5YZ9lDK8MZfumLHBJZ3f6oRne5yy5fa
-wivX9o8+E11t5OdrwkJKpqlw2TStTWosKAgiCK4Wix6jJLlAuFVt9xyFrLdwUG62
-MiJqy+wWJpWZZw4kKV1kQAW4ZuLQBgy6ZnB7ag5A9KxLcJI02Ycf1sc3lJWHQSNV
-zYpBeiA3VBMyu50THkeMGUGxfE+eR4G8qp721JnvRQHPM0Zb8KUbAYyj0nKS8f/x
-CeNwiQEiBBABAgAMBQJNy45CBQMAEnUAAAoJEJcQuJvKV618BQoH/19dunahkZvp
-GGSdR5H1FcvwdlQXPwujzQpRwvCtWJknAwcCaAxYpxdKxI5ZnZgsQJ20UINQioDj
-EsQfxfB0Q0BrbEWL+VgPijXl0Je9LRwQ4ikAWg3qCAQFwMMf3J6hWKfStHsyH0Dj
-TefksgGKtEJ5F0djhcgwBzb/lq+OFe9xV3CQ32CkGG3pCHYIdI9/XG5w5vNabBr9
-ZFsYVe2gMDcHKfhqw8bh86UFSc8DkB5sHxLjX3ZJSEOPrZWJQ7ZSd7PPRzkAmjoV
-UTheo2D8hynH5+lnZZCjIMA6Zup0gBMdYJsS0EmV2dpda+451JCzAPvIpWHVHDGe
-imBh6XUSy+mJASIEEAECAAwFAk3dWW4FAwASdQAACgkQlxC4m8pXrXwQhggAlOt7
-h5MazovNJ4w8yzAg+tnWbwm+CLr0Zn6yk7PuGCuYG2ib5Ry6pQD7L509MjPr2Egn
-MbTVZVfwSMt8spHG146bBwnThy0hGTNqSg80D6oZ/MjVQXTJrsQ3WDu2E20VJLY6
-jQNsKq+ZeRbuYlKS1Nw+gSHrI61F1kZhf0t9mBzyoVOBJR4sO0xfrzVdirqB8e4F
-RlnEIR7mo62KdDS1JHq7E1FYBTRtIUREM6Z8FYrXuEWS/JvbNZaL/AIp1uf4SjNu
-yPUkbRnIvxK006fhei8hTgolKqC27cm46R08+F8HDUB1MGkQeFzu50sdbGBkJGtX
-5aIUR8hvQthkHPTOCIkBIgQQAQIADAUCTe8oUAUDABJ1AAAKCRCXELibyletfPz/
-B/9yUrR83LNWFiZQyhENiSfvpZLU4VQdqOU+kqdzSH8DEStM1yX+z4+QFELe2Ptb
-tjj6VeDK8nB+OSAGWnNKDx4l9OZsbEFKNk74ggXKX9ZgQY7Rk7Cv0AM17de/hclo
-13vy6XzAcZqypw2/ZkSdl/0GGRUQkAHAYDASsD1lEy6Iubg4NK+DJwwsNXoM/0SQ
-1edj/6LDtrmCi/XtMhY6xRyEBOUiAkafO8Sg/M2Jl/b9mz1PFdYRcVcwOyF33Y8N
-97BKE60roCgMAg2/bT1gJYZaK1x8tz9rA1QfroBLsxtgBZhJKbdsZaMS6tD5O/MZ
-vpQrvA1o561Hm/sNoULIprVmiQEiBBABAgAMBQJOAO/bBQMAEnUAAAoJEJcQuJvK
-V618cHsIAItBKY1zWdhzflC7pOjDeja9hHEz+e2Aj4WxjS083gEHzGqDsD/8+9mZ
-qBio6y/ghItgC7cxnuk/nISsWoKFKFniuAfLk8t081LSuT4PhsdHbsmyE1GkluX2
-sscI06ECoPn922sc/vkJxRnQ5FLfwc8zOfUd8Nsr8YjA4NYnB9/+OKB/pFfBSBiw
-+93TU6uWh5/c0X8CKu1JqGp2UWZxtuTtaB0YhIjUMxuTmjZAIsytxDRPvlawM8eX
-ellTmmyKDkg/ZsZVBoA+vbY4EV5kFF5PNOEiSl9pW851i2xfrAtCuM8xr7Sho+B/
-TkpTF2gvgVrjzp/nAdq+w81SX5cFOIuJASIEEAECAAwFAk4SvGIFAwASdQAACgkQ
-lxC4m8pXrXz1TwgAkQvP0Yj0Kx0iyApE2cLNH7N8OEA4+XGjuzawCxG0JfdGLRQ6
-5ThFV67hs6dAi+b46kYX0Gyp2zDj+/J5WTqtgHW7bp+CmBXnUIUCaiQr7ywn1Mbo
-+vyCUaKu2/S4y6VLNFegDGEQklV28UHLPKvy5J/C45ZxE1kZz4RRbTIg8waMpVeb
-qQQdMUMV6zC3qrIJ8I0e3YtYyVAv9jRvWqGLc/fx4Z6Ky5pGq341PxbnIYY7TH+w
-aitSBSjej5EP8d7xVzofkVy1P4ATN7hBWm5ahcOYzB9M6PZIOEh5Ad0VKDrXsn5I
-aBl+xNJBH4Tm/g2SENRrPQnPPIQwXcPuhepcS4kBIgQQAQIADAUCTh8xAQUDABJ1
-AAAKCRCXELibyletfOt7CACYCqcK8PXCEegE9HBsJUPq1RxTuYBARuYE6qKXPBac
-tokLZaB1yj/EsJdjHmkvFp+0+ZuptqjAQ09rz+o2uyEqyMr6K38anOR8gxoaRQrr
-XfdJ6zsaSW5OIwuVByJefSeQnTcGvjJnk95Ahue65/zNzAuKjkMmldyrSyqkjhdY
-ZHQMbJ69WHgpWuJiCnn65z3O02wjeBjJWpnH0PoNkQ/gEUudOoymupnbi3hDJI+t
-0iIELlPoGIk7abgs5W2JiMvLTlAJfYZJ0KKctF4/9/0bKmCntpiNnFvLHPOsf4hv
-JpzCp87F6x+bb2hO7thWkTfE0bW60c+7xD+Xo6DhtVzviQEiBBABAgAMBQJOMGPt
-BQMAEnUAAAoJEJcQuJvKV618cxoH/3L8ooGFTOfx3unxwwrR1J+FMOHwyOS8E9c1
-x5/1xB7puKS0mjRt8HsreyoFa+8U4oAvROmu9kulApzAwskSgbmW50ISnXArtS6g
-56C+7SmUk+I54OjmxIJG4xuCoJE0OfSjWOWX56P7UkXokMBcgUFE71QnnkVoiTZD
-nH9UN2z/dh9aBCmzB6g/QGmByJNxpSLPjyK9Cz81aTIkPFBefXDJxESfTOxyg5YQ
-GER26gPANgjpWyAwLrGbncOt2lEHZAfG6j/6E6xVcdjoiGRJPI0RisCwtYMrD6nb
-IoIJj+KhTDA/Cl/QQj4ghFh+OuV7wQxk6zOwDPIVXkg9ceUHQF2JASIEEAECAAwF
-Ak5CMa0FAwASdQAACgkQlxC4m8pXrXz1MQf9HaVkH2cGSHnv7EeG9RLd5w/xx0Mk
-6HQ5ljX4a/KafQrVLp6mM06f80cZ8wxi6nKyaxKttFsVO1O0e3FQzQZEmiGRMH9x
-4PIx27EN7pjDQHIhMsHpcWLcMFxO0nlDGyZj5aignS46irL+16WYJaIs5x9J1KzM
-2YtQXXHQr6XbjjnKjitaO3O3CW5xAyLMh4kBhMkJQ83/+ppsfSu5xc2upzJ17gGC
-cDyLCEE4G7b4tQhtQr+35JSE6o6/hcTS2Nvh8HyyTGRbbkOo5QYSe++yI4R/YO5K
-3yz5/yX0i2tSCy02LMj9QuxtFFeboRrg/PcjuyjfDKvSuGd5yAibcb1GhokBIgQQ
-AQIADAUCTlP9xAUDABJ1AAAKCRCXELibyletfHhFB/0TcDgyGPljn+A9oX53h2A5
-GjbxHDDSxXx21eU7xF7ANQQDYRe6iuNoTUSPfifo/Y6tF3b+pi0vGgFj82O5Lx1Q
-JAQXEmLvkHg6VDs9/e3ZfofXMi8KLtdq1P1akA06HwMxB0YjVfS0MhkZ0O9HbEDc
-Z9caqNw8AWN+0awT7BpcRw018TbXPoSXz4XzteBe801kxKe33VhLMd+JHQodTMgj
-FG0gIb8/e99R74YmOULKEpKuDrjhq+xnPMOKtkB2nu/OnC9TILPz3X4co8X/grYt
-Prg0KC8YgOskbfhwKc7v/OKQR6gMbGbiYapMxEMIavOywWEL8dflhmvk2Zx29XH1
-iQEiBBABAgAMBQJOZPMKBQMAEnUAAAoJEJcQuJvKV618CGMH/iUzFjy1mzLxEKfo
-Eaiv4vUX72CWRRS/a73B3kN+dG3TRe5acjvp6KK5Esp8j8Ut3TYkH4MCH65vMeyB
-tZtAP2tUv63WnQaKCaXKAT6KHeb7VPg0xCasLLnb6Og/W4VrmFrvQ6xqI8EOkhaY
-OVklQ8BbZ3KcrHIRuWylDigNEVRk6kQF4zjRjMlrfZ2JMLqwxdHB79fpdKfrl1/e
-T6wO46m0K3IMBXbbAoD17UimSt2W5YHK2u755i0m0JkrXTwYqBTaOgcneUMCFoiF
-X1/Vuxpnji5jN+g+IRbTM22RydtQCf2+9winJSjA9j9YNBW1J7Z5By7ilnq8mxYq
-bvkTX6+JASIEEAECAAwFAk52RacFAwASdQAACgkQlxC4m8pXrXwVhwf/dooZE9KM
-pL+BX/zTMKyHWMHTIFFCNUvRxSQM8Vr2jzxe71XPqUtwxyUMm8mN0+/GoYS8Llvm
-u9h2CVqVW15kHTGwmJmSU/KPTe6ImuCb849XlwLkzhMTPaJF3FuejI8hUw1WY5So
-7l47dLKabGK6FKyIttdHRmoexisQaRPwN/C86UOm+pLn8DwEVRS89+41I05/sKVD
-NDcuWTaneyRTxRdzq+DrACvb7ZnVpcKZrwObgSuJDAhKWNA9C7frSk1A02BaktOz
-D6626QV6V1LkvGjlcMeUej9OYCkF7IkFUU7W/fcv3xR+NN5aZ0gDcQHeH/0ADn7N
-jUjiSkPar8a9N4kBIgQQAQIADAUCTogS4AUDABJ1AAAKCRCXELibyletfLzmB/9F
-9DR+Sgi7Vuz8WKxjtwKMDCAYNoXda4eL47QgFYHEUAAvws8yCZAWa5ulIGs9stP6
-srmuary7OD700KGyW0sJQxENPdEU8urBoPg3roPWRkgOd+Gn8qT6l+LdKOOkJpCg
-iV2wtQ8tZfhM+xeSTulE9wQ8xILnKlPtHgxjU6G3cDrNzKU9MHtvMf+Resr2bjn/
-fFFbfI+BvDEQds3y/rbNYLd3PB2L1pCq30ECvFGlKUEW6mhdcqebYQIDbW5n8UCR
-YWj6pu5gnEVz8M5sexx/2tEHJs+AFAk0DVIYdHAc6zQu+DWW/wjlYV/u/FLac0TW
-DAcwg7MbGtBq4achBSu/iQEiBBABAgAMBQJOmd1fBQMAEnUAAAoJEJcQuJvKV618
-m1gH/0fIvY1mNPbrYqy+x4KwSbbMBANl1DFNFMX9jywnz+QlE3iZ8ksG7XjMtrnq
-B70eMPOG9PhMciSCzd/gaAnqmZyaZDzVuE7XuyEC7KLzqnPZ6Dra0sRY1H6wE2/R
-0Odvb7BlGvcOXEI5/NEKi+MmNcVtF2ISD9o2McHfzTJLvBNVfu1QGVnXSB/mh8mb
-p+Sr+P9ThMRS5CLLicqRcrbi48XwdNLOU5wGjQAzsGvt/6Nqu6rsNfjEZhoYV8Lx
-TgVT6afmuKPY3sjXVVEqAJsOL4Sj5ptKbsMFPaOQwTRScpOqs9M+5dny3Z7CwKv7
-fID0rP9U5l/TteBd/2OHCo506aqJAhwEEAECAAYFAk5CVasACgkQQycF+s3UAyXn
-0A//QFzE0r2gFtRroKO1w3euBSV1udr9psCc4mWE8hee7Gth9hIs0vypqY1nE7iH
-fEtugdQCqVyC7pGFe4zngq5ZLHG76tTgvkQnUK6muzw3ZlpwEpzowz2yFi73Bya9
-V67iykbYTQI/+Dd8wOqiI90GDcQy6Ywlhogi2LlHKQiNl+gAv6DzH0fbA4VECECs
-57fbpGa3W17ZWEoYtVv8saazFdnh4jtzx0+Crt7eKOAYhOiPLZx5SvNX9PZbHDTN
-2DdNd48OOH+b3Q7Qr0g6/Utfh2+fmcltPs2T7QgvsoE8AZcFL92b/EwTm/utUkbC
-yMNRLrn5+uUxHZEF+TTtRUsoRD1Cbo1nuF4c8YSXxy6aFjx9OXZhRKi/JhC6Bbvh
-C4aDh/Bx06THd8yn79Eo5Bn4AMcAzud1mv5b31l3Lin9+UkzeT68Qp60gBm647CF
-JZ0WbPnIfWUvDt2pqFG2aVIA21vaUO0rKiJtMYbzVls2rfWh52RBP3uaPuIWr3kN
-utQ4054gV5T1ogUieqQmOaJ/lR0I+A9/d9gbnF06GtqossF/TRQY+gxto5Tjd/VF
-jKYlwbHa3yE5oIM+OjArByhDmcEIfzkevKYFkoYzCaH9LsmIm+PnQsVVxCmz36PZ
-yNB5IMFAWbn34CL7N8iZ+M/hbmkHnnvFhqPx4AM0qk+MnKCJASIEEAECAAwFAk6r
-rB0FAwASdQAACgkQlxC4m8pXrXxUzQf/SDxNuDzOHo6DflZumuxhiOL4KUOEnF0E
-tS6+eH35jXFc51BnCOjbnZnoJXwBHnQiwz1o+FtROtZSmK1Nj1IIMsBfrrxy1WA5
-nVqow7cfAAxbtSSP7lLFbNLY97Sg5gTmemljl4m4YqkhWRyrThFFZDw7F+2DCImo
-MeymyQmfow1Juicj/6i3wBr76FOijeunwzQJiLoL96Vbk7c4Ne9PXuJ6zeMXjERU
-SFhUp3+ZvxHFHm0stKFRUvMz2NXp+1zF6K07/CxokvmOhGsuGogU1eddlZ4Uxa+1
-lfXIIIqcx0YQvAkasuuAXLmUe0r2xlBajWs79TM+eVf5S5FmP2vhy4kBIgQQAQIA
-DAUCTrzc3AUDABJ1AAAKCRCXELibyletfKxmCACuYSuGK6S0wfbHzGsHhmehaTdZ
-uaki/zQNIy4BYCB1d6+Ied5lUa/Ta/pYo8+Z4J9RUJYDhu8yMsrJoB7FUjL1Nu9s
-I/Aip8hqO+VhXyz4fPaDFrTjIduTqSCudMrQuRD6aDmFL54FVz3mHXFGQSYtHdzx
-IMSEOjZ+CedHKVR0gdCgfIGhmxrCIjd510rc4tEHxjTQjnjxvLg07iOn51sGIZn5
-jbFfETz7ItzxUysqRqJjQFaS2rqgAx+wCW6QbHWk8QY21ITcQJaSneoGV3mcDCwM
-zM+tYkxQdmYpN8D6Pk3ie4N9bzXMGxHa/Tdz5LHUcyhAIxNrWPXu3DZlW6ODiQEi
-BBABAgAMBQJOzqgvBQMAEnUAAAoJEJcQuJvKV618H6UH/jcJXuyYnAs3VJ2yvDUU
-momu6Y93AwFbWY9jpxfNhS4Ky+Ht0SA+a6MNy6gnAgy8qUE265W/2gQSxqtxjjS3
-yAx70qxyaqFE8K4EffcCRsIgf4LJvMOVziUjwIu6ZavWBaObzA3MDZz1RZTPd8gD
-gHXzWWsm3VTGlVR1AytFaSCaUcmDbQEQOmvBBjOFAMKt48YcFT3PqL1QekTa9l0w
-AYfLVFEl7y3CVIYpAN5PdooPt9Uc3efTpDxZPAfVwubUDAo+EJwpsutmdzQDk2pj
-a40KUkeqVKTg0kpbnQR7widQuciY3lcx72mrCbZ7WQJwhAlBadMxB5hm1D3zgFUV
-OCSJASIEEAECAAwFAk7yQcwFAwASdQAACgkQlxC4m8pXrXwXDwf9GCLGO0aiErac
-+Kf2NQT3S9gJXWDnAA+nl8O2CuSYefKQPNQZKhljO22XdEoYXVaak6E5tVRkhbua
-TNyB9cPt6jLzyXbbuT32qGbwznQf5vkuS78UDAYdiXs632bDsK7A8V4RwQCdRf4j
-n0KyWHpFrCqxv0GQzi+29/G7jcKDEkYYFJRxQAJ9burU0Hn7RspNmcOrMZAjS98l
-s+RkTIv4ATaT4eXsU1e0wjy41d6BVstdPlzbj1rILksiifmvmgkDh2naVAl0skWu
-Y671hpltTumuC6wLmuMPTg1/+25le8WE1TScqSW3NAZGhISqRC71ATurn0XnuupL
-mYNoIqjxSYkBIgQQAQIADAUCTwAvjwUDABJ1AAAKCRCXELibyletfNhGB/9bL+ea
-CU7oy7w6ACyR8e+r1t8OBAhWqmu2mYX7g6SgjYN7qD/XXawngGQp21wSrswTQxA/
-3XhwLOlIEYda7xg3aa0lY0UARm6/hGGh3DNZRavZHDke/LPfIlj5gZpB7ldBPLZR
-XI3oRWgxWI6KplT8qX3m3ziEdDrZiFuD2VQeA4Llc0bmFzAdj25sfKiEINYrJ41C
-jRTYz+JnsedvxK9FcUFk0fYRecWi0gOapXFtAjHD/anYyQK+Evwm9e3ioxl6ZKTh
-sVLj2D07a0GZLobob7TkslnzHNp5PAfKdqc4eNMB0Zty8L9HwLK4E0jIdgOOnGdf
-grxa/+gxeRj6iVdJiQJUBBMBCgA+AhsDAh4BAheABQsJCAcDBRUKCQgLBRYCAwEA
-FiEE9oLNzDncD+rhFiC2x0bPqedPpLAFAlmwZJ8FCQ/M8bEACgkQx0bPqedPpLBD
-aA//VgiSeU8ovUn6Th0KT2CKIiFuPa7TGOcjosbmb+/mKzHLUtLmoOHQ+WpUoash
-kpm0SUTaNFNXybqI5Sx5IKMBGTcBSay81r9Y/Uah7yAfMLv8aPiWbr6mqnTh2+Xn
-OEWc4D4forDEiFnZcoB3GK9byPsXTlmjn+1JGsTXdjs60x5djqX5HP8IjURoUKPj
-KyioiwThn+fZG16PThUQuF604FFTxJqMD024qR2ihd2yxUvP2QjO8BFtpxp1DNNv
-patBnkOkkGxBAOWqfV3+3h4a3MmUt7NFpSkrMUiZUSVp2SSUscARyYX2hgtyalZa
-FBcISJE64v1Vs/Up+Rl3bM4XldkkMwQua5G8nsvmmfpI5DrG5eyq8IlJhrJGyYCd
-472S9hjieJ046/2PFDrsX36AXxb7Jr0QkpGaGgFtLZiPKidMRklwwMYX9p82gaM1
-VtMziKMXaQ0AE+m58oALbp/zMEdip4G+Q3uYYSNmq35aFuzyAnfZU1tPS01VG49G
-Ec6+2+17jEvxkBzLAMmJjdcPYqykWnkTWOKVH4Ck71eu6MXDZfDzxI1IUUP8PtSd
-eD6+ArG2o2gCsBzHyNXizToc7Cn6w05y50sNYD/Y7RYUviQB8kWqkyH6pmRXGu+z
-BbyKXMMqSqxPBUR91lwQthSmE5XwqV9OEmlsC4h944izgh6JARwEEAECAAYFAk8H
-HNYACgkQqVPkiRHCauY6hwgAmX8qlXs37/+2CQcljdu8j4j3Gjhvyjb95ZjtRlgU
-jdaBYnsNfEp8EJSRTv0Y5sFAMucal5OqzrLXXX95xzvlAMwqwaE6upu2g2d2bLML
-f0yVXWS2lBKk/dSXlZ1Qb7G/OprU2Temip5d5UbIHR73PD+r20EH7FXBKnn/LKnI
-4f+FXrqHoCQlJgoQUjlY9ciRh6IbMAPSzD2+8CC8M8ebMNjT1/ZyX2uHTP+sCL+w
-XD2bCd0OQjFswsjQKC72WQiHP0oh/kSN3gczQyzC6x2/Zz+mIrYYuE1mZ8OZW+SN
-kQ6cPo1ojdP5b9qEhxa0gZ7EcjH0E0aFy01/IaCsbhADUYhGBBARAgAGBQJPH309
-AAoJEH1LbhieP5vmfR8AoODMTmUE5+vbkIATsY+JcuXPdRfPAJ4kgu0sBC3zh/g4
-HMbys4JDJWEkS4kBIgQQAQIADAUCTxHk3gUDABJ1AAAKCRCXELibyletfHIaCACB
-iKgDvyKrN1HQ5Hz/F8CQbiIhvx0jVVy+e4a8FfRf+49MataDVdR+5tS2I5EJxNEy
-es4gDO+/1LPqME49pQLf7WrCOsc7Yw0ii5VHvAyuueQ+h4HazLMc7MsY7noAjP1Z
-6mNSamrFgIgVwY/eUjGM680JcNuDBKrCgei8iyylql2okZlI0yS0ZZZRnxe459L8
-mahM6+bXvSfRbifhvRtl7oK4gtgQ7mdvHGB0//vkEviK03HSTRqeljwGoV2zqJTK
-V0OnSJi5Rg/Y1/TC1WA0Eq6le2uZHKFDPbjxR5kpwoRxBVSkEqmOu94yFnpCeeeW
-oj3r2uGL/DfjNr6If3l0iQEiBBABAgAMBQJPI7O1BQMAEnUAAAoJEJcQuJvKV618
-RlkIALJ3cK3vHwY+7O71OMGYgMuDljdrs0HOy1w6QWu4pp+2Um74QqasfBRrWxRJ
-4RKumGEX28C6PiX5c+lcIxBcl6YDOzcbRJ7BBCFmT+PwEiP47rxmVGJV6MpoZCsV
-qwGuZYj8/rRGVzBGK3gEjhTTiij0PTLrJimlvGM9UBffR5p6vIBLpXnDc1MXHlMh
-HbI1uiik25xh2TGPKuG0DB5deH9AFcp1Q7cyUKmxFxUoT8EFrWnLcgfe2FlcToVz
-/D8DVzLNlmiMwmXgr7aPOHFJV9+DsLHknzADCbmYCnVarW7Aga5Q7RtUTfWaoY2x
-NRBfrjM4EYW1zclSLYhMT11oEZKJASIEEAECAAwFAk81fQEFAwASdQAACgkQlxC4
-m8pXrXwMfQgAmDw6zZgUuIMHtrcPIm00JLyjEBsaFwG0ia0qrdbbY2BGo3NILq43
-+DTOfZ5kJdQnauqGd182QMSr3nTJnNszyIBBYCko0eObg3F5TVEKw43rNj5mCtdi
-43+0rLqTi9xw5cIv6qJaggFjbgph2u+MY6/m+06DPAYgdvIjvZ5qpO1dWySQwHfY
-vM5m1VfU/F135OZ1h1bIUsCY5usGSTp1lsB/YpFQPbazHaz35zIY0rKDMYdWWNRv
-isDkoNe3bWA33o0sh8yB+E/XSmGk28p2AQBR6TcFmbmKtZuxOCWGJ2HWjh8d0YkE
-G5xLqCXagvg9ToF/2fgElMbbNKZeSmpUsYkBIgQQAQIADAUCT0ZItgUDABJ1AAAK
-CRCXELibyletfGSXB/49flttpEK5NNe/LfnKXQB5jb5enB4B4DnodAj+pZm6FX9x
-Jn724Mv7OG+JXMa7MvbX8OnWErxBcO4wgVhI3vbviN6M1TtBJsAY5EsYbfigfOFU
-yoaPkolmTo+jJR2WIK8lMqai/z0LVoszBH9AGLbiWWwpXNjuQzzcCzuAi2EQFyQj
-xBJTF4IJLEBJBIuqvNLjcQs3Vda22FjXx0AaXIUfq6UsCw0C6m74rbMZVPahjlXn
-DsuiC1uUqD/s22BffE3uAi+BTp6RGKHYw+6ykW+8xbMpkpgWDt5OrnLiCU4DRlRm
-LT8/XF/wAHnRkmWKBclnQdlpktW6tZJnhCoMuhz9iQIcBBABAgAGBQJPUO32AAoJ
-EIRjrlNwyTqSTRQP/AkuA6tHyQ4BwCLXq1kGu1R4QGZ64EaTG6C4kFPbfXrYZbBi
-ayhKTS+Fs4r676qu8/udquJgAnFgp3iN6yQ7IN2b51xHMEKK/3KBjY2Iud2FZQFF
-z/GCvmDauUpAyNaaJKBgCdAxOWn45sJdZaexuSUldavzNOb1IO/cL5dEro0bSdYg
-AEWbZTv/vKfDNvU3bmDCbYORYKU3ouwFXpk5hV8j68yS7deTUppVEE26feyxZZAy
-86QAsSJQ5zdgGejXzDxfLTbfQRDDGTZmgMbWR01btSgnZPPFJcyVcawc6yYKHEx9
-HlDmQfJolcO3IczeJcJpAD5cxMMRbHotQ1Ol42nmhD8bQWASfxeRcdHpKuxiq6sx
-BwnOsXpPPgNXv2dEf4QT21gUwEblEjXFzGa+x2Alys253UJ/SQ0Kpk+dZeVqq93c
-OSr+vYPHPYvRyI/td7cyk+vY1168RMpyi77WR1i+97yZmE6WsWITcliLKsX/xm1p
-ZOHw+ShYsuHLPvGLF1Vijw98gEYSE9ziOhddlzScQJvIbPVPEtuZiKYANOQg1A+l
-/7PO6qCXOvyDB7qbaduGbqpLiaYIbUMSzRrvCySNZ0yy4krA2w6Z0Luc9A92jyMi
-g+Y3+lHJs1wEEY6uyy9xxtf7Zv09480xgxZlgyJRh9T3YwHQc/ZZfte9hSzPiQEi
-BBABAgAMBQJPV8KbBQMAEnUAAAoJEJcQuJvKV618K40IALT98rujmad61Ne2iRR7
-gul5S11nADO4buzwtWJ7ve9LWZ584tNI/bqF7JzIGMUTYX/dIjX8CmmHgEVG1tb4
-sRdzUW9PYU9cQbEVugwefJiFJtz6qU1BYodbonrExnGKGsR3TqKyV3wKXwpQM9Xa
-CtASF42tFLedKpYvMdpqnYMtPpMGvBfgw6a731cZe4h44Hyr1KYRvAzEk+pj/eBY
-7t3Dg7XQ5Mz+LJpcXA8cPE1AcwL82K7T41BuP/XczsdTki1jbX7MbxS6NskkbYwX
-TkV9uLP3M7UoL/3yBVFtt64gfLRVcKv/IRSp1k0iP89Jsn8QpN02usXuIgsuM3Gc
-kxOJASIEEAECAAwFAk9pgdMFAwASdQAACgkQlxC4m8pXrXxd0Af/Vj+sw1flvoQO
-LfnG8GHvpya1qcLuDGqkonM/yJmoEOEaqrbfKWCXxcos05Ts3cmVonmA4u6NQ+CO
-S8sKPDCopVS3Ozb5eyG/GeXX6MtlB0AZmIA5snmwhriqfet4ts6FsxeK866xLCyd
-5OG9wGSEsd4+3rHHL4EUPz6hVNJAfpRzRsLZk4NG4DmYgxSx7y3VIBnjuUXs7MnD
-7/nfE1I/IJO4vs6L/DVxsxMz28D6MQGQVGjkRnf0WBIZ7BVljVVif6s56nNi0+iZ
-km8oJJ6APiiyFqDsCUvcoo2fjs7iTHD7ZaHpoqjNn4XyNwzUSrzLKZt5phal8keK
-2XhaV87+C4kBIgQQAQIADAUCT3tKhwUDABJ1AAAKCRCXELibyletfIiNB/0Uk+aU
-tolnjUJhB0nFWvdmjudN/xsGPQoyCjAfhrIFvLZWM10ECfDCZ2PpKVlCI2u7ho9I
-S0ZK35Ao7JZH2zOQEfDUjbE+Fk+itFNoLsO39sU+ZEQtg+46O6jp+M3q4AcDV2t9
-RJgpqag6GlSWQgGP6wJT37Z6sBmusGoWH1pLjfiQttTuuBbFH41QdALVpmH2KF0d
-RGmwd2MtF2P6LIs9HuSEPMgE0aPETIdqCeyJBiC3uH3ErKMEtcRrACCXU1Wi4Vo4
-g0ZSt8o9uoZLFsQQ0U3e/HRCEIyZfQYGFj4OU3RqWPrIjFdVJu2UQ+1vEtNljCfZ
-OMokEnd86xfT0FrriQEiBBABAgAMBQJPjG4jBQMAEnUAAAoJEJcQuJvKV618FKgH
-/2eHv19VhkS4ofuuH0FLlwuDJVJ29B/4Rz9wOFQ8ULPZFVXahqVlLUnrbVJZE5t5
-W94761jo9MKy/sYC42ysSoTy1dUWUt/8tPx15GqCgFqEKStqgbXAqqJYacX+4Yn7
-+6SfulzOhnQeEoiXjSetESO+Fe26oCbfLRodC1t9M38zO0uRudZclbkL3mRzaQYo
-pELbW19scoMVeyfJrfsqBC5WH76PKXoM/tqpl3L5MCm6/kZjLvLkW3wiPV+8czyb
-Iu/Fuq6g7DBHBK/Q1aDSf7AzKA3ChfvEnH1/tGntdYz2SWIwN4PjzNJJ/FFUfyP+
-y3ooKUmtjpPJJu13rUHcg62JASIEEAECAAwFAk+dkjAFAwASdQAACgkQlxC4m8pX
-rXyQDwf/aYTtrIXBypNxCLuizDZ8YSgJHL0VVclLsAJ1QTdVt0V1JWTxdWzmLlsI
-CHCnfV5L/W/XRubuBRuGB2p4dGX0o8lby9eZUP/zVY8t/kk74kuTQTXDcsTHkCZk
-Xa2OYoin6RhuToPhI02frElgeQPLYw9eSK8SlUkaTLkcsKXU93SrSVJYW/pF1j5d
-m3K7xu5Eey6KBz6w5kgJwxR6zCyNey3e9dD6fQIZlMsFRhMIJDN0ATORrE0TAITl
-HQzDoJ4N23Y41npkt2XbsKRT669ZAQpGlzKNRVuX/KA9bIxtzqgydy2m1eFMRtiJ
-8zEWRnp8uYmpjTZyl7h5AbvXSeWi1IkBIgQQAQIADAUCT69e5wUDABJ1AAAKCRCX
-ELibyletfJ7eCACcWASI94rupH+ppFQwxVMOyttI5C17h/e+/DoBMqHQenKYs+Kr
-RFhpytvrGp/xwH2D5OB+ctn6iuQANWk7Bh6OXL6DDR9hTWgNHfyaBsXjApo9VWzB
-lfUf8XtFWlJ+KgViBd1A5U73nywvVg4nizwJr9XKNrupWTvqHDDxEN1cTnr2baQI
-isn0FwT1DA+pzGedcTF5J6NHXm406DWEgvtPKtUEkTI6WpTfKoTQXLWBbVqxzB7v
-NChNZrFDTGrMDCd3PpJkwN7bRC2XTt7d2cnaNRZB3bV9+lpV/ujZhgZ6Ktg9cfkl
-0TmPOokhbyY1Xqg0lqUY70tbIDPa781zg0JXiQEiBBABAgAMBQJPwSreBQMAEnUA
-AAoJEJcQuJvKV6184AEH/1TKAs6JZLJfAZ9L+9uk3NQ+pcmLY98sjsQvEFykg1HL
-bNaYx/IDCAeGFXzNguBTmYbgiJiWerNB+mcnQzhhsW5CqB6026Iswaq4lS2t8CDD
-9sdzt2qxQUMa/Q5L3E5Tkk/GxF0tP4NTdTgh60b+Ite4YtGMiVibTV1oRvdFZHlQ
-+3Fes9eJej4biCb4T0/jzB6Uy4ZPIzSzQpxUBvLSq4wcQnXW3GF2Uqc1nmAd2M2/
-sSSCxBtXFeHoaoyY0Ki2u+yOkZnbm303k8DFt5yNnnW3KjxBTPxiiMBnKRazU++J
-aKf0fqvpmsxvdc62qC9y5HsfE//B5Ag8Me7si4JBtcGJASIEEAECAAwFAk/S9/IF
-AwASdQAACgkQlxC4m8pXrXzOKAf/SIfnCvUU/tQtl1uYSAjmECq5V4HelnfLNb1d
-Squ1igYOCu3jF8YfKLEkp5iOCh/GosYifo4ike+JwLTHNSyH8PedTmrsLYO6daK+
-He6rC1+BKSG/E4oOXiQBiF752pdlgdJqqZtsPk4ri4BF8SO7YJye4tQgC+Pk3Fj0
-2QuuNbb/qUkrYwx+JgmDgd4BxMU15x+FNAvqEBofqza8DPGArjPYkQRasGjMplEE
-hhw2ABiTjrt3dbVklC0LzrMvJVrD/BRlg6v/ko7VM6NLGiZkq4JqCW6lBA26U9Qr
-iETAXBBnXunrqcrWDHLQGy2ygD41HL9auujgB6G7Do9XEqgtF4kBIgQQAQIADAUC
-T+BO9gUDABJ1AAAKCRCXELibyletfCwhCACpBgCGtNTyDokiDCeEw0N/6MOMAGKY
-HsCd15vz3yijyZvhTv26KAqDP1cEd+HrU1lFni/m29MuiyaM10K/FYvvovDh4EzN
-kOvweowk/0IiPj7/xf6dFNTFxYNCtrIjMYJtLjRbz8pSx04602raxUIYhmZ/eIlL
-nMdNZATngXzuIxgjlKRlrhjW+BKaVwngZ7ocMYpH2ruUxqPDvdzdKQ9GqebSff0O
-dDPWusV2LiF3PMNpLGtFPyim9lIagNlaRmoeS74Rv4jqsP4quEnE7uauMKUlbm/6
-rNZdeAbBOdxBMHjsQBkZCnrJ2ejspsaZdXGOYr5jPGwX+zg0eM42V7/giQEiBBAB
-AgAMBQJP8fIDBQMAEnUAAAoJEJcQuJvKV6189ggH+wU2YIygTfO0lvYtMFFUod7h
-KH7hGDipTRNyzm4O2vkY5BN3DGJM2/kFHwWyOHY7l2U18i/4gkxkwhHe3AXE8aEG
-NqCYHxB6vMP8GIZ8jrQlCUO5H+JDD8348F1CB8mDqyQswDkT3wCnOS02mxOh2MC1
-kCSDI8iu+3GGUHVWn/3Li4lN4atZREIffH0DMMJCyid6H+4KriJfLKLcenk8ipK1
-P7SJU0oMXVWUJQWMcUT/0HllhpQ7AsHbs2EUa+KEDKX2uAPExhNOOSvMQYxUrqvT
-BZBPHa6AawQ0lP4pNGF8JhtW02OWsifexUhVPmqkbEmF4oSS+/Vu7Oq0bWzv+YaJ
-ASIEEAECAAwFAlADFocFAwASdQAACgkQlxC4m8pXrXxlqAgAvBOj453PjQTxCIwY
-iywHbwIFiXpM08h3HAP9RlqUejaEu6oeYfC2U0LMjKw/KPyCmfaVJeVglIB4yUaG
-dTgdl5/58T7gEXJjserQWILAdtvWzmW1xU+ilG+leeoWjjUbuH7CJUG8tdu14a6z
-q0lZVB9wLSV85ZCSJqFjGYh5h9X17r/Pzf2tx1u4f375yunZNrt4GM/Nlb44gAvL
-iokL20xFLY7GMYFEdJpadljAOTnRPel1r/OvdyBSRcsRTnleAshZaRKE5M5Ey1gd
-2MLDEktmc68hPBlyHon9UKuo3YmbAnP7R4rplj4QEP+wBfgWuF/bvif5nZHLSWq8
-a6tXyokCIgQTAQIADAUCUBbtZwWDB4YfgAAKCRAzO+avbayZGNzmD/9pJv7epstO
-diDJwiYzroRe20LuaGXNIXxedcQvKSBkZq+5fHg7DPHLrKXUdjmjDgIaBi8/ZRyb
-4e2nJSYLu/yhHITdjXwu3UsAYcO/JxxfCRI5tlr8z07mcLBaYBYZvP99BD6EMdjA
-xRn8JOndrpmBUNrXgK0KOKKt7h/+pxBmmuPMfdOUmzfvL6EBqjcFUORKR17xl8WY
-498i7tp1WuWZ8clbWPFzSoyWbaH4usfkTIMV0kzjC9xge9Z9O5tmznpVmRJAzKdT
-aq7eOmjNIN2cYGn2Xp9uW3H8pe6Ffz/Ze4ctPgo03Oxoy3zOFwiqbyWYPscuFJqG
-7d01iLgovMVav4Rb7iYcg5o1mPts49O4raPNebXn90POcfMv9Q+q6sXVa3Y0lL+J
-GcYgGRwUTpR36GZzJoT9WpdYhRpWLngkaYlPhgA/ue59NxoJp7VMhCFcO6qP8rHn
-kOa4AH+c0sb97CjX35IWOU4pTGf/i1sn8qr0LH9JfB6SNplBieXQRWd6l1oWaJZZ
-j+vph4gTaBDcSz74U4/T+mQ0XGaJbM7Cn0lJNsfo/kNDncv0xXf9OiHlxhgNC23M
-ZX1Ib1vPlf5LFpm5SMrPgb0FtBDxzPpkauiCoHoOYGC7d4J4R3fJDco6D5WuSelW
-w2qIalgwDjvKXFZ84DnhOasbsSl0b8HGg4kBIgQQAQIADAUCUBTi/AUDABJ1AAAK
-CRCXELibyletfOVLCADG/F7wCIWwRo22pilMuv965/FONfabtYtlZmZ/GaBiABBN
-QSlNIDDTw7Ngmyzn7zX4q4vTViXBf7t4hNnccWgz0TBJDlq7WNQpoKrUv+eg+VXS
-bIIS7NDWjbUalgga4gwo+O+YHa4N6EiS0FcGKfWi4rPvpe04g96Qd1Wr1z1s1osU
-u3Ke45Z8gCQhCRdpkmY+Ei89P/SMRkgx/qDD8dHHFigTNw3LdjLbZ+uXkRXWd5Gz
-h8V4BU2buK/nxszgAOwNHPoG+jwEEHbFzAK1sT+Gy75RwrQXe4KpSQi79yp7ptQv
-eeEUPxGYfzmjCG6zDR0HimNIc1tDgCdttOM6qBthiQEiBBABAgAMBQJRPYdHBQMA
-EnUAAAoJEJcQuJvKV618OuMH/1I7EU2+Sqow0ni9YJhDFzvpWcx/4JIw79JEQmRo
-HOM6zOJoZby3Dg+NK8ZGsbcf0xpBLlCDH+2zL+9WILzEL5d2LAk6MbZid7pY1v3y
-vEyxppl9DRrbVusSSJKaH3XlneSdA9iqbgmQpWRqHw0bXQNwPCOtf9PAqO4DOlhY
-oS/xCX4o0yNsUvS6GbEfEYPYr+RZm8zFABMwFawFI2pR0qejaUA9zq45VpC7abXb
-azkJL4X0f4NBK0DZwXg4TlfLh8tzow7ZZD5pfX5Yw5ZebOOFJwDmZ+gClm8IiF2H
-AEz4w8wS0Mz8FHwQcmJIwrSgwsK9UVi5WrisUxSIYolkF7+JAhwEEAECAAYFAlG8
-aicACgkQwBMwnW1+RFymgQ//WDVut41tqIR11qDRLroGPMxgAJVxfydlopmc8sMg
-1Z4x6LfDv1SL0hXV+nROROEo0oZ9rdJG0LIK7K65bJanCl8hAlE0MUZ/hpP2sgtp
-0TndH/Le1h+VXRFIN7QYu29IH9tE2W4bU/a4YZTn0nDYA2uJwjWxI3kpTztENuFS
-D6MiD4T+iPzPNtyV16q2M8Ilp8FvEWanxC6cHOOQglw74wlUVXTIgGVm99Zx9IBZ
-yN5os4rUG/OJWJnMrW+x7sWJUBwIng4n0YzLFd8s7sLhppVwbqJOlIlzDuvrIPeK
-RjU7kX6uvwQJLKfWtUx5XN+UmFV3OE8fbAY+dvHQePPS9mtfR06swNS/MCWef2tZ
-KdKwRbp6TlUfrahQWzBshMVQtz/JxZGbKg18yyEiL6+Df9V/Rq/WFKvobKB9zJ4O
-INXAy93Y21QklYUPkO0csAvyrzaScpiVbS+B185a7LBiekOUtmZUIgmy03coD47F
-ZiQ88knyIhr+4JBS5smjUF5CvTXnHR01Fc4uwK3RfYj4ACWP/37SQQKoT1BeQqSd
-+8RRxa7kaCj1VbzMWZVByl/0jDmEivzV4cdR0WmjFoDsFIvxzO1jvuuPyn7XSTeG
-COYuY34yySuhOKnhDZyJALbGygBhdy3Lsxrr5dRXi8n//f89xF2cNPyR3oV0aEhk
-RNiJAjcEEwEKACECGwMCHgECF4AFAk7wUpsFCwkIBwMFFQoJCAsFFgIDAQAACgkQ
-x0bPqedPpLDDOQ/8DLddBGfHgjv4BkG3TCxkKJKccGIhUInHp3U7KWmlgjWLwisV
-b8Af5x+jwJyNGHaRbJ5xYvJKCTbxrI2PChQLMzcHFlmEyiBB4/hHES/2ANeSOZla
-JzJ3TB8MUrSBZpLHdImygtA58iyG6Svo72E88RYy2BoiZv5SP7ASf34/V8YDUmW+
-Nwi38NankrWkSqaUeHAhScTFMISuZol2DAs/sA0REDqWAdjo/nfqdLi22zeqHQGP
-xxDTcQEiyMh1lF+x6NIUhTJglP1df1dfbJmEVkF+BF7MqjRwBOLWqnllyMkHYVMS
-6tO7EsoVxcN8rffdnpwLKter1+2DAH1sY6E4ltMxpq26rlL3Bv7UNhtGv23nuwyN
-2qLAQSQZpKV4oOyZB3fy8OR/lPbQre6wtTXQXgdXZbk/2/BE3nxKooJb/Pof97qZ
-2ThlqAo1+a9Q1SrGtv879dWU/97olL++wweVtM6iNBZWTxp7YLnmTVr3oVYiOXif
-OhNJcR1Xta+fHxBRMr5y3fiw8QapMCv9yqKvNXmMDeIGS/oLZ0NVRxgmoG/K9MbG
-zhxMl5ULXZb7c4ljJbfe7L7JQd/Fjh2voS5OwMwWhQEfgxBXzg0q5T0sdEO73sZF
-serVC86P6TBV6jisTcN1F6hjtJfFKwwhHMmoUMG5FCSjydUoQxzXE6QhRxeJASIE
-EAECAAwFAlN5CDwFAwASdQAACgkQlxC4m8pXrXzCDQf/bdogi91MQvi27VaURS0U
-Kqw1F21KUllh3Dkbs3ThFj9ENZEI6NPXEwZzicaK7M9FFpwsIhMfDkuzf0MtuoMl
-Ku3PzzFcT+rHBKXccsOZ0d/rXV3ww810X4c6QG473U0GK9z9rba0mJIungQhDCSL
-BTynZxrSOLlPo80LNOJEkg1DJL1xjXVyr6U5VSEItxtabrnm4S8LqXZGZ51ehJ7O
-oc02I1sAyfjmG1pVL9wPIUqERBD7oVA4RUwTLvoRKweaUk9DHysrazR7j1JSuDQ1
-7Bd2YyR/37qiSm3Rw5TOLdJDq3vblIrV5oSTIIJwq/moaDXUAOrJc57rXnnus+Tg
-w4kBIgQQAQIADAUCVU+vrwUDABJ1AAAKCRCXELibyletfFJfCACFI5s9bDEttRwk
-JTvCKmQeMpfqCRnWVu47NmS/HHZwj/FB2CS8HXNwged+Z9nqP4xNScrlB1wcpSeH
-UZfldxv3+C/1ugzJ+IQyMr7GJWZq1nOLpaN7Fkd0DZv+lc3gs59EIpCVzQo0YFiZ
-aqjTsHh0RhseeRM25tbf/5F0AXEaVMFbjQKRsX61eGUD6PRq8UuopcVdPzLlimSi
-bxPOWc8WT2pz/Jvl/oD5G6J0mgnjJHCGYs3oin+C2wIITmiMLx6ruOW84gRo5JP/
-DZZaGOypIo6NXtVuAtEFSyzXXSif+5rmPN4ho1DOXteESSUfe1Pv0G7+x44NWuRT
-WzLr+V6miQEiBBABAgAMBQJTitUaBQMAEnUAAAoJEJcQuJvKV618DJoIAKrocwdS
-Fm9Euf12Fx4Igs72E28lHM/MtuYe/2h0JR3aneNq+LWw/++qXbekhmWjeCbBfosP
-qq2mXoQgIS2H9i34Zo4h2G9DcmldqO9sWAN5gTtO64K6S0+hs0jv86uTG9n/aRLr
-R3opwCNpGxVz0VIWnr4vRGFQRePxCDbKnYmc5FMkhiTbH3+Kts3pvN/q+f+hw8sL
-OtGj93iIgaJpKVzgsNbPmyd9V3NyriRjDnEqh4Jrry3GsWNNhoZOEn8mEIf1cqBb
-sUOlnq4XlFiQUW5oIDyzgt27hA28ne3kcAyEw+LfeQ5jl8Ui2+HxpiAzsbeRnHvp
-x6KJdQ0/KEtU4oqJASIEEAECAAwFAlXFA/UFAwASdQAACgkQlxC4m8pXrXw3pwf+
-IhwgZdtsKFhjHWtMJ+9qtkT0c86GXMgcZjNDn1Ii8Fw1CjfhOs9wEVFheERkWivb
-x5ckpxOfMmfVcoDvRnwJZuZ+Rd9lhkxcUbtzb5FuZQA/w1+6RwslzaerVJWC2nMt
-K+0xP3Gs7FSD5Dw3mtUhgRsVLaSJ33n6aAT1o4igiL3AOLxsoCgLwbu0Zg5Low8s
-zl7n04mrOuX3bgFpnRa8A7I1lcuJNJQpdpHPL44jd0nMuldnrY543mcOOOGNZLfm
-Cu65/oO/wcRd9+ZsUzRx0bY4ogsX9DJhiE/ESss/Om6HDI3Ik9tPcA9KHvnoCZDc
-IVGbGlamj6LT2jUqNxvUz4kCHAQQAQIABgUCVesKnAAKCRBrSWZYlD+rICXlD/0e
-m+slK4ODpBlzzTx/znYE66TjjFWHBMXIN/HvgNTIwigwIYXNE3H3HwLfO+SXaUsR
-YzECKKonxt2wA+33trA3Tiu2b8iwIGucltErftwWE5+uX5icMfE9AyfED47afkqB
-Ujx+IwyuKFYGdO68GjZxiR2vq6f0h0kjubLiOhpkdPAWhgIMPBIjBKRHymhBqh1c
-7Mz/VJkTHNZy8SNvVCMXlmXuGcZGpO8hRJJr3z7YbtcVhpkhJfowZO0ybRJDo3oL
-912jT9uCCm5voAFNtTFYxjR5cqBljqdLmujW+IAmB8xKGX1RcZvWXjygAmzFyo/d
-eg3Cu7UEEkH0UfPFZF9MO3ZFc10/nqUzULnZH1NjepyiSAlntpOfUxypjSAdAyYy
-WUqeEfHj32nmtRxkUJZ9XGFhD45SLmPqK4zQjmUJsZtDL4NbRlqocCDO1xdMT7v3
-EkR6NG8ROrTUGzBtQeQze+sOXalCX/wLfVk+PsSLEn7yPvpLuXu7hV14/Q7HSt6G
-36AlVtctY21qVWK0vp4Dr0qZj46BFOkMvZHi8I1tj6dxh4xKqPkGtQ4kLfgNtSPi
-IJCyvIsn1zsHJc338KASArtH5/kDcl/kgTMbhXPZbqh/2s0JGWGsmGyZN/VCs9s3
-zBB3w64KNzwdo/wlZwx6cH7CEcgifKNIV2O2EROb5YkCPQQTAQoAJwIbAwIeAQIX
-gAULCQgHAwUVCgkICwUWAgMBAAUCUkNlPQUJCkElzgAKCRDHRs+p50+ksEJhD/9N
-X/OQu65cGgnl6NBRV40d7OHAxL22cp+OCh8GnANIqHZnrMExj4kNujcaxomZgYpW
-72Ro+YdE0DRVT7UW8Pr0nGYYsE3rkr22usnuwfJUsRjcGM35dBNu5ttT5tpnOXaH
-OQRufXXA/lQxcEIUW0EsC/6Q1Iilo//CIFVkwVOLL1OeJtad5UQEGLCypGnHB8UA
-LXdenBGlCHBWqt0vUuV58bwWZOEGm3rBpieEyW900CsP+7tSFCeVCZ8gFWQAVFpk
-RmJTbgSL/AIAowskFxcEmngs5hFEAU9vfjmBC8hiPe1FrGSxMzbRfzc3JRuPq8bO
-ZWJsGpY7AKITTjXEGc21jVQIDLn4YHGhbdvelNNBIEeh7A8xVirz97JuP+YRftlt
-GNpMAtvb/BWn01Cu682CSRbamfjckoqfaqcYOjJw0XOQvwHIG8CjzPaQudYcGU3B
-u7JfpAqxwduRKO/KYg4mkHKWswgTOACJiE0Opc1hXCULt2xFqkocuNPzmzxuW+jX
-0Glrg+AJ6bKDdRFEYiU9YplbPK7m8kRfC41j6mPfRBm3l9pSE3VYYgvc8V4PclwI
-jeQajH8KrRx0dPg5j9vNSnFvibxzd+Rff04irmeYvJZ8mS/FPdUNx0pRyp9XMXnr
-BxDOF7ryBFlfPGri6wZute/avcVmJqpeCd3LF5zcxIkBIgQQAQIADAUCVtnwlwUD
-ABJ1AAAKCRCXELibyletfPCNB/9tSIqaoVrdNpG4RKcDC/Iqm1eH3C74gZZ60zqj
-F/WaBwY+F390vPdPeqGekhUKdjvz9CNTyde9SbvoSX79TjQ8+Aw2B+4f13cRYGlW
-ZVSxmbM2zZfKZJt6atbtg3IUW/tMi024SQ7uwrxuT4rvrdgiwov8mzIdv4fzKui5
-yBmiByXG22vaGW24VBamMr+aVsvswiWTDMm20XMH+zrKNhG9e1FDE9LFGJVSmhSK
-SttSt7vs3WI/93nWQqfQmgEC+EItfmmTK1Dsb6cg0xKV9ehedzERLC++l8A50BoG
-++dqA61tYIfUyXWwu3qvU81oNRr3kECsZfYQnuw8V2T9W5IgiQEiBBABAgAMBQJX
-pyMUBQMAEnUAAAoJEJcQuJvKV618KPMH/jNCJsre5Y/OzWGNm1qmxlu35qSvMsZn
-kkqPL8fMV6yoLsZr5o+OWDESS8/2vKkoQ3bkSxRVJ4fGxhft/N8A6/51R1ErMtcK
-5zXtFvepCaMQFsj4zd53bmMqJQXovBKIAdMl64NmAM1RgZXIdcI2qa8UbFIP6Jlx
-+6iqAFKyEVj1lC3UQFoelBz8lnk9CGnUUIm3d1AN2j2R6JHNFdbL80KBUuS0688r
-hM/E6JFV2BqSvmLmOJ3SfA8xuSXBrxkz6Lw+UJh30vKOQVrYTygXwwWdZ1h2vW6v
-UCr4sg2fBH5GKfhZowSsXyrOx4jE6wx9QRRk1ICmJIUjoqn24T18OR6JASIEEAEC
-AAwFAle4SBsFAwASdQAACgkQlxC4m8pXrXywbAgAgZt/idYBta7uTgBDQls26mCS
-rNqNWI+mR1ZGHTdOSQy/ckZGdk8XD+4X9DAEfLdgl1dZPnqqLAUwxsuZ6i/g+PeL
-fhsAe7QmezkD+to/vWbv6yghZEAI05lSJfkelvc3xHEsASXpEbPdIm19CC5afG35
-YbTmdTR04s5IhvrkCkL3Dr1pqAaG/0FWXS60d/qpSgwHbx+9ncYoGbW2237lvgLJ
-U4yOL/jZztqwiwPhA9QLo9mZQj1IOCcKJbwOu1FVtj9JIeXVmA/H1Ig+aUVrodAQ
-Bh6oUKDq1jtOYvSiEq9X1ugN4p7SYIoodt1FKbXNUV3otXaRdEMlECjLcnAP+4kB
-IgQQAQIADAUCV8oS6AUDABJ1AAAKCRCXELibyletfA4cB/9czejQgxzyKRkpSvMX
-WH4zFoLVRKGeYRqezcVdzAuR7K7IV1B21nrJ7yVNU1wStx44tWXqO3gzKU0GeXXu
-tnexkp4kpvX2TLd4xfflhy7d6uhJ4myTxjRIuNmA1DlUNPWNKVzN25fWjdiSs3jV
-c0cvJPYBUrM9WVajHTnjy7qPP7Ph+PuRFEeoH6fL/n4GmLMHV/LJrPpFGfQ+XIyy
-eermKwkkopHIkRu63hx1OLY2KEeTG1Ww0L3iVU2J9N17fTBSmvXM6IMcD6Q7/2aI
-QlrdZjE/TlwXMWzA4FuoWxlNjhkKwo4BKTeVA9GI0diRW6zyLXVBuGl9smp+ulo0
-PPJ5iQEiBBABAgAMBQJX298mBQMAEnUAAAoJEJcQuJvKV618etsIAJ69WDwED5EX
-euqVSSV78xlVpQat2/a44qEEwaqANLSp509eY7l4ZlGPSUG/1BCSRpdKVGM5g6uf
-EfFJ2OCKhl8UK04tVHV7mKIRhs4OoylwvcBsQdMphyF0YYt72PUyhveEGIZqMlP4
-kpKOhLn7L36osgxEa8jRnuIasBmIy/9vsNySMW4LbmOMX5F2dEntxhoGrsiZDhQe
-zfwnvgxI0o873JY461GjXvhmfhv61YiOxjiLIJtcmmnXLajz1Aj/yw7WTlTbaKSU
-LsrNyd/jL8JdPuY7D57/ngtcpRuF92G3HP64xNKzbXKd1VaGyNPWMkPwGsbmUunL
-avK4jUp3tISJASIEEAECAAwFAlftAqsFAwASdQAACgkQlxC4m8pXrXykswf/S1AR
-AdnsmarZSwyVp9Jk84zKVNXU71zrkOJZF6v1elvdjn6HVDUY9P758jreGMX8PEnj
-e394V/p50VKpiD8FGQZ+PeZ1mCzqCy3K41Dm9zotiBiNbJ814VGItcXhoT8G/orS
-toVXc+goAONbAOXZLgc0RuSVbJkkw/Vr3SXsD6kXmfsg+ozhCseR1BnAyIHJ74iG
-5Nwvy4yfwTfwHE4Dmhhyw+n52ChWQ60as2BjQWU9DrIQk1hWT6pSpGDpIsrtfpqR
-k/NFLeDYHOSvJYuM22EafNCJS2fXA18DR2eMgvjb4D7wsB8u1yZBErpgRyOdReHf
-gWjfxr5n3HbRRqr4NYkBIgQQAQIADAUCV/4mOAUDABJ1AAAKCRCXELibyletfBmX
-B/4xUeW5qPlUVJE5Ic60o3DyZ2x88G/1izL1HaLccPW72Kub3DDoaQrdgsNGkHHj
-/xCSfj2kfgv7S53oiGVLcUfWv+K0NSSAssjfwJvD7vqp6GPafoJtGz1owpd7o4qE
-aZnfsmTacLDKYVL3Jxdo4ixiaKvO/dr3RuOA6pnlLsNcYUXG3gWd5obehljC+5dj
-YjSSxlJ8cBRPxu0NB/PkV6Zewomzf0RR4Cx5KTbeA/piZpcKwWRQ7leCJo8Uioov
-SvYVkx6Vi3FPhkYDoWlN0JfBv5tt/6qlSmBW5e3AZB3zsls9nPssNbalIZpfhrUi
-GxjECnT1Xvoj1fUVZfZMD9GDiQEiBBABAgAMBQJYD/JoBQMAEnUAAAoJEJcQuJvK
-V618MLgH+wdZykeaJqUg2VCkYfiAIo+HjR8lg9zkzRMQUAwYzMk9rtSAr4g9Ij6k
-6am6gWPvylWNKtS/6Zso3x0CqK+lDPJb/E2X1RYNp5E4iBpobMnxrTwf+n8tU9ot
-yz6lnY8clLOqi3vzRHqxFfA7VGWFfMW01Yd/3qZ/GiYgB3MyaDhr/2shKzh0/6kc
-9grhKEJVWQvc8lve69DuwUoMixHaWQ89e2huTVt7tij2xIvVPwYaIxZtvEgQ3L+d
-jEBihD9LaU1pvwFphrVI0nSzGMcRuEPDVnFIBI12ISr1CMktgyRSsvwkzpSh7SyQ
-Y79ZY0qY0jb+SkgvKF38bNEkuGGcgqyJASIEEAECAAwFAlghXFYFAwASdQAACgkQ
-lxC4m8pXrXx1IAgAixA4odEZn+F5ArA/PUUD15puboSMFxwlritD6hStdxnLfhqP
-2FcnndyOc305WXZ18af+ssGqkqs39B1DAnRZIrK/RMNuWuHLZ7RjsgUCRixBJFRW
-7WpCzVTz8FNWpmQel8MptKz5u8aWjVQXjWSR9M2uDsVKuX4VME0Vba+zFMAqMx/M
-HRCnB3k04tM1VWum/iNUnTgYWgPwR2qCQoEqvCyhKkPEFCMml85XjOywyql7HNYY
-rpVT8ultZQVczxJbUYBViu8jphdC40BZjb5OPfmXE4FwWleQO/BK2c3Rt9rhslmb
-hktoMGkUtSsM4lsF9FNcTp0P6RdRHo/vipjZyokBIgQQAQIADAUCWDLiuwUDABJ1
-AAAKCRCXELibyletfCT3B/sGTZQOHa45Dn80Jly1AxY6FkaJe0/B5Hqi/kr+m4j8
-x+xuO0QuU8hleSdqtYsq8XQASUsR3XNBrrbkdOL99kcsOC+wUYov9xlhtnNjxM36
-NYHwFuGn+4JUYOquTngILr6/idf0n8K9241SVDA7h5uElyaG72VNjQ5PkUQ/5ZU/
-JH7wT0F7ulMLKDMbW6Mexc/zP3O6+AZjXSVMEMsn+GN2Gmxc8jGaJrN6TlrrRmOg
-ODPsEG12AN7sEf/tzUboaT4IlugbX1csLYGlDeHEbMe5Xzo64oepA7CI0Ic1T6tg
-eGtUjTIW7E+mjw+0vSdTlXdTe3k5KOhL9TbgSKAA7w9aiQEiBBABAgAMBQJYRAcu
-BQMAEnUAAAoJEJcQuJvKV618cmUIALHSPM9FCZAzRJEHJHzdabGlq6ykoUEKc+8G
-7v8O3PEyQRo9Umf3zIBGrx9PRl9o99Ewds8JtSst4tSxBiHffLwaCH8SMf53W6l+
-dIgSec3aLUw5nExfQf+XRMAJEakRu1dSGJTRCDGWzdwXYwTh4+aFOrlN9cI0zgr2
-eCAGkNE0xRcP0m+1q566RMV6X6IPKvSvYfD+FLU1VhIjfTpMBrf3t6orHtcrz0O2
-jMfJwNg8wpzg78KDy452A9NXncqXU3iHajcdqgMuNoKfnSTHvDIlYn0lhPVpoCSp
-siMX6NMH1h2JynZNIG1xB6WnPPPTvctV7kkN6gb5D2lHQ3zAW9mJASIEEAECAAwF
-Alhm9UYFAwASdQAACgkQlxC4m8pXrXxJswf8CrbiI6yL0hOYn/UdNn+Fzgxhq5HU
-JTlGwkdr7b1UqGDpgQYQhqJU/cC0I04yUZYxCvSEgUvSNrTurZL+SVfOFGC4aVCC
-UwTcJWNImC4ZXjsVHfynoRkT7oIT7IC09LyPB1UE5kZ7T7FRiAALdBy4Vn0H/P29
-Q3cLzv0+q7+w3QQPlsE0IiNU2nmAezv/xTMMymEUTyOnVRLFDGpCq3zb9AwNLdjO
-LC8j9DiB4l7jwiZ5SiwPfLEG0Pu1N/RUFq3HxOmS0v6c15A/NnjBX3AGlb07pZQt
-jgIfnK8wJIfwKzYguvRrYy5G0Qatykl4wgdUCW82g2ipM+Tz3n4Oqb4mqIkBIgQQ
-AQIADAUCWHgYzQUDABJ1AAAKCRCXELibyletfCU/CADKN+5JxT7QZaXC8Hclk36o
-gQ2rSL2OFF5xrKEH1M/3FE1gGHk7+45LogRtxbt5FKBHJz9L0VUm1RML7kVyYYiS
-3PUf5ofNGc3DAkwvk+YyLRu6SmyRAW29abYEDLEWXBlPCS8MrgcYzC46XUHaqNc7
-viAz89fZ9WXH4byEy+sp4XLlCdopU41HjkkvQCJyRO3vWMG6ziOjIdEDvkBBmuIE
-5MYM0g01jaf7CF4y30ExFzlNmQON9FKM83kqiwg0YUVrgqAEKY6GjvY6KYW+K6u+
-tUYjGERFnIk4dRrRiO5F3rRCx0rPi0IDMHIFqo7to6JIiJRh0JlM+aIyx6Dw+X6j
-iQEiBBABAgAMBQJYieUVBQMAEnUAAAoJEJcQuJvKV618WAAH/3EN1FKVbzkFTvh3
-17FhP4i7/I1KTGO3G33TjkxA9Ym974yUWrzz5tWqvf34hFfXwF5AaOImF+WhxihA
-rd5OKnvjgZRa1nopPY/T+ug48A0Ie7ZFVIpT0RdgMS5RBfmCTUk8RBDgRZbEFFz8
-cyl+oBDdEEj3J4++7kwApCRuuLpZjPccjD/Ib3qr7oNNejZT0nDb3HqvzFXfuSjn
-CHzRkAf6VPtedLRUyBt9HrVqrWMBwekrn0AYi1QgAnHMC0shKVlu8DdhKu9NPEdy
-0tOH9HmH1KMBZnwc/a2G0pHWP/eIxjcFRylwwCAlv9TPZuN3sS8T1JqHM43XtlsU
-yfGKmn+JASIEEAECAAwFAlibCKAFAwASdQAACgkQlxC4m8pXrXyFLAf+IBwyPonq
-ZydYI+CzIruMUVnWCBk/oaQRBbjsDGPJ4I7lSyxuRqp+pa6ny0QRYucZ6txKOEWu
-et5coNFIlDTqLTAIidATE76r+7jX9Z30hmQWmK2fWmyQuu+a2pU0a8z21ppaRb7t
-TE+JBWTERccy1ARmrL5GNVSuWFGHBuCZ3hQs9qTemcbdVe+eI2ax1hMuENcmH/x+
-XFkELtPyfpxOxG+2TyVgJDZdjbhcSKnaag2o0LuOq+PcyuY0L6KLSGdYk0q0Okxm
-PEijpRFEtI7E+dulr6IiffL5BvVrL6cQQxphd6OyU3hWm3NU+yruacLj58mTUppr
-2wTF8ikFVIDPsYkBIgQQAQIADAUCWKzU4gUDABJ1AAAKCRCXELibyletfHCQB/95
-7XHQbSQJVYVSQzLP0WGVYpqfJigDtH897GeCcCAzO5IfC9ZxpbSYsYcvURjq/L/I
-29MTf5TAy6whVF78ded0KW4aQnm0jwZEGaQJzLEvcrJgXHLb15pKZoCpXU4lM9TK
-JGIPC+KDdo939d05u9h2lREHrNhaWeupbGRHTXgbTgFdgWp3MYeC1TVQb1cbgddu
-7TIRjz0l7ra9wungU4qvwE+1ybZhZp4xpe0GmVye+X77fRnK0T3tTDeHyL5GFXxt
-ySX8grWHVFc8JrDrlI1TnGwvxfSOjuwd3U1wmMAm9iTSpyQXOc5VbQMP5Rv3jHgg
-XAx4VPmw2GKfSAnisq68iQIcBBABCAAGBQJX4uHFAAoJEGqmoTMyyAqcwq8P/AyI
-Z7k5EzICI5hlbgwewgUCiH6as2xxXEC4gLtGQG7Wl3zrmBY8GflQwQbazZk2sO0R
-Ac64TLJFtDgN9Y4F5uqKnPwEGmStPDSrYQFOMpc9vE8aHgwmK8H3nHDw63V2ydMT
-SEMbuU9dzgYlP4Ugn496CxHUfaC/F5mioaz+BneafUaasMmHIY8JSBukMc5Qi/bf
-LUaJ/XQgaIGyuZhb899GSsJNpY5dLM8HFzht/hYOGORSP9DKu8Vi+/pweXa/ypFt
-OCAZWx2P9zkH0/P43cqsiJ7LV2ReR/KKJ12rhivBFsDIOWkgC0uCeMaXIdlPu9/5
-MrtoGS8UhtK3r4zVkTJ3c5v5FvhyHwtuycD8QCJMXlnLrV7n9XMMJS041Mp3E19z
-60wvc7bOgf9d6NxFoXnJ0JAFbFqA7IMlEa6RsDpbpmm2muU3avB+BfA12sBS5iT8
-Ly4OrP8LimXQv+plEOgnwmSoEIAtwvKcSNWdOynlK0bB47h46F7KPbFLUHfKXrOT
-WLKI9JFX/G8HogN9ppOnx8RyxgZbrr0nnbBWC1yPUjDt83OsJ0cvVyWBkR00dFdz
-85zAZ7+65y+tEJmEMRGMqbQIBT5LVGOGInS0yL+SRm56TcGEqw5q3Wm1LLdsV7Xg
-1YmW7u0bZLQFxRXx8QR+jUm6PuZutb5727LMy2FfiQI9BBMBCgAnAhsDAh4BAheA
-BQsJCAcDBRUKCQgLBRYCAwEABQJV6oT8BQkN6EWSAAoJEMdGz6nnT6SwmZUP/iwa
-fNhjBwUjD49y7xJdk4/iHC1VuzkEyH+4znH0VtykJDWOeeNlReHy/7z+l5dMriu7
-t5mZAEiwX76phYCDNrSLvjqHmb200REYkn8/DeOz7fH+zRK1Eby3lbaNtYWI3dG/
-YNEsjDpY9vurYIu0UqBmUEsRiErAcFNn3uZ6Fp5QY0Kaav+odqoXmJd0rDJ+mEpT
-E/vZuDA8YoDyERlSGmtANv9uvX3gOQWNZ30iipUHjquCuXKVvM0eAflF50L5D03W
-cnbXf1yaU4eTXW2W8pQzWhcpMyUfgzNrtQuUbG32gl1bc6KCukCWKOJ6meR3y5LO
-Na9hkkRBjOeAdTaNqKQ/RrLugPKecATx2/nHkVGj2kPDqZoEMW/tGi0m8/x9RamJ
-9pui/VHnkQWVckyLsVSSII55clLXUBKEEPAo5N58APT4YXKJ+14JdtpXy4AwKn3h
-EWo24jc2KdArCMnVzZROGyC9LT32L1zbW0+X/2FYJRj92bLz7+Vp4cfCk0igIl9u
-v0HhhChW69BYR+f1S80y3OVt+T3acj1LLRCaaQwT6JMnZO/xtNP1+LY9dGNaqLY4
-FREUyphGZkerj//bUdZBS62e5We8QHu18KWCKFl/JTGER2rJx4jWQFmpzj2Qoso/
-GGEJ9ZNQxcn60erEOLFK70re7p3gspwTZR4rg4aJiQJUBBMBCgA+AhsDAh4BAheA
-BQsJCAcDBRUKCQgLBRYCAwEAFiEE9oLNzDncD+rhFiC2x0bPqedPpLAFAlmv84QF
-CQ/MgJoACgkQx0bPqedPpLB+rQ/5AVdV1MbCYa9ZPK9CA+y/uOE6oyj7oynIWI8c
-B8qbq4v30H+Lbx4YhYHb87w2B74P1+8YPq2tAgBDGynif5/VlpbAoemcpEMwlH0L
-kyE0VOiDAM/1IAR1RMg0TUAS7JWMeKFSaV7qImeyjWGZsIXk4XaHQx6cM5NQQHUj
-gdv7UnSxKdXci1kRgAUFEOX/4mWklOsYdFq2nvH88In2zll6M2ZWhOlQ1xiHr/3n
-aCmZEemAJHDv3YnJgw4O1yyRIEzitUQU7kfmVgEFIpmzSQOo45WX6DfHVapaPIGQ
-cVJqro2NXtZ4qczGofAB7AFB8GO/Hxm3+l9v1Olf3BHWgqC5+smbe3NF5ZKWWVJO
-JGozAa3z30A3Wo0m5xyndjyRWLv1joYfGLbq9tp0PuUaf0UzXC9PgWd4CXfb5e7H
-/k0v013Y6TX25oyoO+brkuBymP6HXl4rs03WZDWOalcDsyasI6iabto1pCD9AyYj
-0kZ76WD6g0JUXkkpS0pZJzyZVLzI/tsZV1/kmDpgDkHuRTSJsLpHQFJqGtOThyEt
-f4OP0IIgGufSukzGiXALYi8/ttGOlNGEZgcdODLQMrKBlalzSjq3YSp1+1gRT/mr
-hhSzfeMvWXIHrcB11lETpa5OgCIPMYCDgwH62kYX0tpWK3iUdYQuZNqDVgCqUYOF
-8FQrwL6JARwEEAECAAYFAlp4p0IACgkQA/oEY/B68xhy5wf/eNZtm3J7+T40Kqdh
-675a2ltm1i9kSmePgD7Zykpw7Iq+RWrSBXi1HIR25xgqxXLiiaZ+j4RD+hL4OE5w
-PX27x3GUsiyWeXnOOX0C8j94CwwU60uTxa/K9mB7zWFHXPRm/Dt8RPrpP0fbztTt
-t/FV/Nr5QeyGbV5lC2bSWKcSrggdju79rWW/FDzklpi6/ys5cJf6WctAxlm00x9S
-OhYmg433/BnrEAIYsBrynPMsXLj7woapzecJJ0yFCkqht+TFhVR4CeK+NxfmzSy8
-wPly4W400i+SoS4XDq4Mhlw/x5yp77fXNxNaNiP2PX1qrQiWaUxHE+A1gRZnGLQV
-ffJQs4kBHAQQAQIABgUCWninQgAKCRAdbmluJN2qxnLnCAC33Lw2W90hNGuOjx2r
-Oz7fK7HACd5oz8KJ/g+c83YR0iSdqTNmmJdxyRVikgJaDTuwiYxDpxwfAPGL07Wk
-VSMR7j77HjuAB+6kmp3T9nxRZtLOdBZBRHvM6ZcfvkxJuWNrOGb4cpEmkJZz63oC
-jEXI03cfdcAjv6/qZEyHV2Nb2cBHsXMtdpUfMouBZ4PvDpT8khIRPgXqvMyhiju8
-KQYtnB4UPJMsGlVxxiCwqDhEMTYxiLqF+fBt9PkcdnRjXb8yBaOgmqtykU3/EkA1
-7rIceI0/jAl4qEcB/w6+C3kKKqrdf5qH7hE2zsoA5F1DahGhYKUk35mdVVyD1d2z
-+eaLiQEcBBABAgAGBQJaeKdCAAoJEFW/nIYTB52VcucH/3kyPKAFw3E5fzS4VX6E
-fDafdWyFHr82+En+39EIUoRKVO69cSlN1V0ivV6cIphxD7IPNBPNhRFrv92je0GG
-2HZidw/4Iabpa/CJZA8mJWC8kLi1/UCgJFSueYpz06TZUG2d4/D1QXNAMJjeB6OP
-+9cKH+0MI6gX4o8JUTlvDqMkKFol2OMQiWF6huSUBjYv0xMwKzvj/ggJ9gp3zSW3
-rbxWqBI8ZJjrLXQkh4AX6i90c0UzvrJhoyoibKpUhw1Tw7a1dPPoSvx7xBL/rQfb
-X89uGWDg1G8Derm6Y2Ab5QFWdjuf1G5rsJBErHKvag2gt5tESkjyjnry8WqHRZPg
-Hf+JARwEEAEIAAYFAlqHG8sACgkQ1Cv/th8jxb2L2wf+MGxF0/I4/GgYF8Pa9+vt
-01k/aJdWkmUDGvVXDLaUMugkM1uWgEEYLkAIlUquuuU1FBOqVm18whZs3l5b3/b6
-rpbyJOyWOhLDIqbZ8SuhMxIf32AAYJdIoI/lZSV5ZAcHtYdBxK1c4L24n6gWwXHk
-SeEnoA5GC/gt/KQ4fyrkkowQXEKRpSThRwxHLyyTARmCYFxZmQFyNR0mnmuQ+rAa
-esnmU0tCaVVAQz57uy9qU6JHgtKuCbRct8ztf3Rq9mfuMYup+D4WH62BW8W6VkFV
-iw6KyUWHVH+al7uoD0n9JCNgtiiraGiUXVySrL06FNDsDK26CUpQxR4CPs0EHMk1
-L4kBswQQAQgAHRYhBMeXSQrJPtsABhVoCvwcHLaAeYXmBQJaha8oAAoJEPwcHLaA
-eYXm0jgL/jygyewSI/2dbCXS9yyiFjd/bau7mqmgIrhgxmWPdYFu1i82l7esvfaw
-Ltt4G3C0/9d8ZJYzRrmkG1DQ0KiwZHsXtm9iIKUApZH/MTCK3BoCDD8kKhStdfAu
-7PHuNrLOlQMQsoHi26tgQcqE0sfizDi8KwKn3ToWA+mgOXhKIjiUdb0We7KGFdzK
-nOio2zdlXMI993JBe4G3IfOL3+ilw7Uji640/BB1rE3A3b9/yBHBFLl7qAKQegZQ
-IjT0D5Q2+devsLCQZwaZbn2D5FNGaalqPdgopfg1eN3QGAtdwJbcMmlh6qdQaKFC
-YjJxWRG9cBSlCpigcRL3+KXr9OjkXK3mKEl5pyPozkIjAlWAdBa1VZf2e2Hspw7j
-xKRbgN1+GG0Pj0gPMAPt66ID5J0KT94hoseJf7UWMdrMgNCUSsHB9d9Ou6931l97
-q5y/z3J9gRQQSuZBSwzFlRdwIKviJudlvgdf5OsL+ZgmWrXdPFP5wmNARNvp4xYR
-4kB+lwa+hIkCHAQTAQgABgUCWnc1rAAKCRAZDl9rP1fDhJBzD/9ptIeOKAmjZu+h
-xHHdLZpD59LdLG28I8QZep5uor1aA9gqY4WOu+o3p+ARGzFCjRaTI9D2tpaexdH0
-zH0xLg0CL5IjFuXz5GnZeDHBzXkMp9Zb/EBaKsNAv6dXGFUK4wmF81G9IkgtQOiA
-FU1fZG5qqe73rmxOn94okV+h/5LasqjfNlLQswTI8Q1fVVnMmn48uGvGbyvT7mpV
-89QRMxA0k1PGwMI2CIyapYS+IkJfaQjreH8G4JAd7/N53Y21gVEb+hOUxPhSnDRA
-d1TXFT8PslGbsT/Lm5zx5aX4z865NTqodlJEdT2FLktKPJDndi6/fHbvwI7Jvg/Q
-V1ZrclzjY6EY//ViGk1Ksn9mZWiEeeNUlVJxFeH/cT49ihJhOEIn3lXvsknP+wNe
-PqD+tWPYm1dxRDGURpKKGstrdqPOi/CFU2fw+VT5lGbn6M04j3263uTorptwI5JH
-N8s9p0QFo9rgEPwa+bvD60Ks9VwLy3dgy+nCEVKmFpoewAklSKN2k9knw2cXecqg
-bZ9nfwhNYD6VnThYPKrd2gQZyYDCxR2J6azg7hJ6rALPLc3Ox1GwvbrDRN/QhQ00
-i3MfCabQ6N0m/S1i7Js41BSYYkCwwshOF6s2KJadObIiQJTyOio3YZYji6v4N4pM
-xrCA/lTNlGB8Omtlvg7vo3//ijtsw4kCHAQTAQgABgUCWnc2EQAKCRAEDjcYLDQD
-YhPzD/9Sin8mcUp4v1Qv6GVhy4FB7+jYZFTqZIF0Ela1gNpZbZQJDakDcp6gDcmO
-jYplvRGw4np91RPumtVhEdyJvyRx9m4sG3wLKcrk9lZ4H0Fsak0gf+xXkBYvY5jy
-mKdFfehdE3OMnnQUlh2deImnj4xA0n0Ui3zSDb1F578luEGjS5qUGFeeCAMMMtmI
-mnMoLnXj3t/mRi3XcTK6DYtKqx3buNxcBkgJkfOXgCHE1QunHSkZ77jHPDO8Nxm9
-NeRv9MnbBVOlvXMvGg5P9ssYMEOrkRLSOk0jsqq9ppm8SGMbYjPIecfaYkH09lSK
-MsyKp55Eyvf0uj35MCi94BSdcTSxn1DY4tl+lM7vihb7V9hwZ41TSwdSq3UnmWPv
-l+UwTHLXm+bZLTgyBJ0TQcrWxuLlzl1ulno0OVZSpv+wuX9K7cOz4Y9GW/m0l7EL
-5cwDF0alvsy9miufYuj8ZpLtQb/ROKklkSx4G5TpaZzOQG1wx8U1c80gfQic86Z/
-oGKlG15ciobLH+P3A9StBVgJ0QYvCWG92yAqq0GeO33a/uCxB0J+vrzbzbKaMchG
-DX3C+u/wBv1r9Y31Wc60ChtOC7o3q2BSbGUvUSVJLoi6G6HShJEILO6Ck16jgKnu
-OvjIBe1xkTxOccLmvFgFqMx+qw/wPC/iufin1D9yLyHktNjtRokCMwQQAQgAHRYh
-BNAsIwHLW8GS4YnfX19X/sHoJU5XBQJakyFAAAoJEF9X/sHoJU5XlpYQALHFy070
-FZci596rAWVk/Y3IZA2koRzYCpNuaIoIWw6KPAcQn/51gpqV4M2949DEpscP4T2R
-6oLStUV9ufxYBtvTf5gTRndy3qUXoVtMgrdKzUwCNAYDM08L9rzX7GvivduL+2F3
-mQxdBPkLSTs2bFiGHEtwaISkUBCfyIOiLi3r863EGItpY8Vpu+TiGKczkeBIkxOY
-ib/78dzU6oSyhlB0n++HIT4+9l6spL0VPo+gHpmwPtsCqwKCYRMpWCjpWDRMA0tH
-kbG3amju2ed5FeXGvvjcnTYgoyfH/K+1sFYle4ZC5ch7ThtJ8Nca4fJ3hB7+2fOO
-AIibkK1cFGQqI/5kQ9sCx8DkJXI/KUY/pRa+1eF7vGIBE1n1ZePFL1sXYtmFw0Qt
-YE4YyC6EXIClPcOeSabqSWtp2fqxu69OiHLZAdLp2oylyFSrB0TsbwNg1g1btW/A
-HLZ/wrzNTf3Uu7JXTA8ccmEcEzLsWAqbD7ieNsG1c2cFkUAziW1j/5nH5b3T2/Mk
-RoaU+so3eFgzgmeSAemLD7vYaAqJH3lp8dOS8XdghevbWy8ve209sRC4WAYJaYKZ
-VkWyYTf5NtBXeUozf3HW4KGGa4EXvOpqlZEnxdfimWIlqQYzA2youwgRFMq66GXG
-4LOsE5Y32Wa5VzmdVDTovfCUj8sk1dD+Z1fHiQIzBBABCAAdFiEE1XksTIxvjeg3
-eUnR9IOAsuyPlEkFAlp4NVUACgkQ9IOAsuyPlEmL2A//T9htmXMsSVh0bX/7ZANV
-6ZX+K8sS9izVAKryu/TdmM9ir72fTAzQmrdj/OvTCcDmhxJphhnvXOJCwbIBBq1K
-HqxXMw+myPa3NdG/GusgurZjv8P0lS7Yo9NRRNy9goZ6x0ytC7dSvPMt5AEI09vV
-jMIlNlOymcxBeeXnZVR8YyR71wjDisovxhcl7t96DFxoZl5s7EckohRmORpMnAL8
-QgO0OiYVLK1lafrUCKQ7FDeVC2wyFIvu3obsJ+ekAb87Pm9+Cd6KKBugfCeT0QIU
-ZlkeiJKWGg2BreQdqw+lyRYQ4KTRATftYUZ9kWc0GIK8IbrbhxSYC4jnQUH8k+Ow
-74U1oWQEhSDwfyv6zfn4YWlGlBumdmuKZWG99BHBSKnw7pjBd1R2s5JUz8yWKaLx
-I9QYsM5t9TGv7nbqHBkNZORge6J5hfh0Kq6+Tznf1thKmcZGeNUz0hCnP5zBxlHm
-sapb1YBCgCBi+cHle+QB7DFh7NxC0s1KOduiW6b3YzFKnJujLEyiIxAKW7L8JZ/H
-j7GZni8Z4F06C1ObSFmrW6/fR69xPFsHl4fWTvMKzXwqHHZNpHMLUjnhV+r5sCyW
-AfLNkKXVXLNIabpIDhN+/OmXEqtoVeTJEslLqCwnqgHg9wpj5bv5Snj1aviY2SVE
-cTkr8xxayfwNrzURgq+/i4qJAjMEEAEKAB0WIQSii/QMPlUTcmYtFPdBqufcyj2D
-UQUCWn9fkAAKCRBBqufcyj2DUYwMD/wJ4EarF++Dgd08ToCDXkYr3Jd6scjZPhgE
-rIWub6KkWY2IMZhbTJx0tJf6xbx0XXVRGs09WDRppHLrLbqLyEqPUEgnkB+jbAA1
-vqHDDrC9WLRArYN6lQgh5gcV0Qv7EKN42tvYy3hDqaRtAiu7AvYzd2zm7tjWfwaq
-hBhMlmfEgk69bx5/LNHA7clb4w6uxQe9x2diT4DGhE9Yxsk6Ggd6Lwf/Lo+lmj+0
-rvtISuemqpE33Tzv4lmQWS2e6KbVXRBS8UTGj2pNDvF9rxIzT2OXqixyTW751GaZ
-bIsfsQjQw0IYBF+hXcMLVh1wDmRbqM0IqH4HGSiVC89g7pJ4v5TOy+mF8Ncxh5JT
-QusUuoy7m6C1tBLfb/bjUSuQfDvrhABctui6Ekj/B8Aq7r2NUugri4twWhNp2kzu
-OE+pI6oBAe1ZnDbXYgP2zZHmBAlqpq979xRjt7ZHy4hLb1ZNsmmQo/jAVwPAb4Lp
-vtFUnXUjXqbeeNahb6Vz9muOMCFAHhlADG92dFPmob4FVM+rC9RUQZfOAK2x+uQY
-ro7VwcTPT58EKcZJdzPrmElQrnyuFWha6hXXLsXwVZpoPSNex448DsExyuEPLNxl
-HMIGzDQHGSYWIr5Vo8y/e5CFlN1hDX5pGO6ud/Ulu0Yf1+m62JpqC3wHJbzCPwAA
-pPokJcdDq4kCMwQSAQoAHRYhBAjNlyqUddz4El3PvriI+7FRIaiVBQJaiYX1AAoJ
-ELiI+7FRIaiVgR8P/j2Hk+IHM6843DX5M7QjVtFGI+FryVMsEnSJQroe6uzTm0iz
-1SXVLwcHXWOn4GGfM8jEzR/YnxVZxS9SVv6AdrDknGIyHFEVPdbAVoo+BhF8/huV
-GsUvpRpEDGKZRumnCb84Q6oImnNZaP/ghEnivXLpkdBMW3qDah0TJyDs6xxRcrdD
-IculAxgV4hGChxJS1IujAO91xwNDdHeHmkwakgVmzkvwd3KmmXGsL82mB3iwUwY4
-Lcz3rJbEq82UDLfeC6jlKwQdTElYF+mBDFv4XqbGzWM/7frh/GfGCxaT8OKijQK3
-9TPNykxQ+ri9W7q4IT0PvivwcfUQSUuzXlBwnKcVxSotfOM32tl7L/5tWn7VDckQ
-t249hnw0S+PUKZg6jJfPiusKsQDTjvkfDVkGyoxzyTbG7qF2f48DwPYPEhzyyv9+
-8g0IuNTs9qRvXCTKiTAO61KN1rHVTNPPb8hqo6O9Ko2fDQfNdemlpnHBWvYElW0v
-0Ipq5ZNM/X19Vltb9MKuUNyq85fMgSpwze918vq1w/YxD1y0qiLLg/Y0nhvBAYJG
-QPw8UfuPQjvlpXExQa8dCCinSoKRyn17A4cETGVvGDb1hYD8W079jE4JpdYRkAbo
-Rea3zGNV6AB5UHlqJo9PQHrXNYWWLHm+gzvxrD4aFTgI5oQ/IPmu7UtBvaL2iQEc
-BBABCAAGBQJa4uQGAAoJEM8mXR8VZjHTMnkH/AxQ4lMbDt/5PUSTZkH22b/f93Jn
-xZq3C5LsVO7w3Zk1vs3InLoP0YF3bienllTJvrWN4ywjtBUbyrr4+3rXjoEGg7iW
-QJEj6x6cK/ROj2AyjPQ76M2geZQYQQzyw+F0R0/uciZl6QdrvXTiBDF/XOtS1pk+
-dRUJj12SCroagFcDxG/O6NDeOY2qUuPadvWIyFJ8GylN7b0Z66xEMZ1gRyOrUH7N
-a4DKNpp/FRqkTSURMzwGdPLr/Ax582UbCKxFsKFeQUfWO5XNS4h4D5Z3PuKgFT8y
-83ZM2fn0vzXtK+2PZo0s1YoSUOGuUKWgNxRI5x7n38Au56OwoEKt2sbpYiqJAjME
-EAEIAB0WIQS9C/WxdDXegeNdXq+lMHCKEmHhzAUCWn3C9gAKCRClMHCKEmHhzMBh
-EAC5F8nkxjoWHJHMJ6nFz4hlO3staROQIk1P5hLD0qOR7p+bpe6DtSIYlYb9M3ef
-yesGF2LhjzUNxljRUA6gs0PssKb7PdQlQTJUhMAeEnIFnrEp89FxmL1cJlp7couf
-phFhPCJyFzfJXdfh+DsPvqXdnOIiXDwuM4tXR+znHjcIDVdvnRSRHrAilNjF5et3
-0hB98uzkjLorK1Q+bouDjEvjIMUwJ2cI//IokEiWhkUEetAyLPkIDbTXz80Rxghm
-vG4JLW6bSNsKuThHFTooB+pwI4b1KuJ6uFQ5G2qv5bMqHmcn4bj33tbXOOHLtK+m
-LvFkTKfqCc5NjpqiC6rgBlJaTo7tpUgqBhnmRGftI8Rf/S72Cb2Gs1YOWcAf0I7v
-x9NmrodEbjhk45JE1J+ZukmJ6+N45ANmorhE6b46js/dmMgqoLDRqC0lA3Et0OQ4
-LfEECQxByRKv91SHtavdFdvqYBOu+Fp4/NWINxJqV9vNV/E904FCHCxCIFAv/qcN
-XFoFRnkor77nDLJb4fUic0LlmN0zGGBkI0RKlV8RscIcVnm/nh+qakMWO8z4gT50
-d8Hh0Fz1EPIVuSbU+0ON+U5D+pH6U0FZe7EXxepEK9gqWzBEK7SUtTCpvD9XpESM
-Lfumn2D3QXvoYWpx153v4ge7r2+hiAqvvVih7depHausKYkCeQQSAQoAYxYhBGcx
-3cKDV77DjjQqr78zQhP1xcoDBQJbKXGpRRpodHRwczovL3d3dy5hbGVzc2FuZHJv
-bWVudGkuaXQvZG93bmxvYWRzL2tleS1zaWduaW5nLXBvbGljeS12MS4wLnR4dAAK
-CRC/M0IT9cXKA9krEACt1J5LWMnkPDsKlmf1C4poP5+Z9x91VC1wFK+60foLaTR1
-9svxHWa35HRBoRbUAZDTbEUH25LC5sa/DO3SEfGs7l08mz5eod8y7u84rvHP34Ae
-sESoU3gKrQhi+bRlrG3gmiJicLta8Kebuny2z0X7KPzFufzYp2dz9V2SLytgUTxr
-EretpS0IxXGoWf9W22ujCUNHqMSvmnXKswJIRlVFF5UoAeobQExzU/Va4qTvR4EL
-Rh1w9zFhb5a2KB9zKRtu8QCO8dsGv34sHp8JQUmTRSCp6lZ4LuTjDcmOzTltsm3p
-uN8xvUBT67zZBntt27LTXzFCZ1ojyk8d0zI0i+2pcKXa4c8S/MriFLudvkX9jIjx
-+3Jb0qc9yvn3a5uKGunRKjvKoI8Db3A7P6x981zOrGgd8elk8RZuvCgBVvicydo6
-WAaZaqXNZfpVmAgMfY6JOTC+QCtsgN3g5bOzWxbFAX4wGWwY/Uko2DMcVw0coB3A
-6/OcWddt+ifdr3OiTadp6iQI8ixT9qlFVDaXehIyMS89nFigjPxJLyTnNTvb08Ow
-BR6u1ruYdHo+eTTkPzoiAm1Smz5DF05JxjgpoBapPzQu14A0wryAkJ8wH3Oj5ymx
-igt1hi6kg4vZGY8fxGFBXKhGkvMMJl6xeFV6azOCinwTPP+nedrTse5/qMkqsokC
-VAQTAQoAPgIbAwIeAQIXgAULCQgHAwUVCgkICwUWAgMBABYhBPaCzcw53A/q4RYg
-tsdGz6nnT6SwBQJbiWoUBQkThyqlAAoJEMdGz6nnT6Sw5KwP/Ao3GNsYDVgMGoxm
-+ilxeE7xDJulV5D0nYS8zcR2Yz5H1aZcPuE41UyNwyP2SIn0wHZ6LTDtz9/vGqkS
-PZa94uKRqsVIM++ixZEpbXGsQCG2Pf1ruPdfDl7yqMunpTvjUcc6pwq46P4oxKjM
-qEQ4c9VmRdjSjifS12rke3R8lx2Rm2TkD6bOo711NssgrR2drFU/8Em1BHQTIat9
-lpPjboCNHuqYskN+j/GF8b8WjyT5EPbfymhL+/qlnoviXpJ4ynLvuemFwMig33iw
-wXyyDaxIMvdqa5eMyR0ki81+dQbfxKzsMi5uDvJY3Sfg1SPEsJ36T0aUya3DRrtQ
-6Yn6j+hEI5Aq/OvfmdR0V21VI38xRyk/LF8bmspBYGtsqYzBXWHu3gDBYMLAFmYN
-VPZS23J2K8zFSy09AY4jO3iAN/mCYbKltkh/OnQiRccpRlp4s76uwZ7tlhcZtKdA
-sZMjcPr64tYr802Zzcwdu7DdLJC51vHqS0ZMbZfqKbm7NMq3A90U/jm41f48Blt8
-0piiY9Ghx/0571AeqUx2fxYnvpP/fJKPbTuj3HzkuCCsLQaBDdd0NT845zg2sm0s
-Eixs0v5YYtzwSdGnKYwpetrJrEDrFJ3sU495gHMvrQ4d+5f3n3/D298bpJPRS6RR
-56jJZJYTSlPJQNGbWCOcwzxIozC+iQJUBBMBCgA+AhsDAh4BAheABQsJCAcDBRUK
-CQgLBRYCAwEAFiEE9oLNzDncD+rhFiC2x0bPqedPpLAFAmDujsEFCRcVp9cACgkQ
-x0bPqedPpLCNfw//VaVKZI472L9xG3Ng+q4TfLqe80DRZPm/3lPDJ2QbmwCPn38q
-8y5oDkI2kjiDI3GBfVAQcezb6sBMWG43Y8E/gRmyKSTAqumY6u4stJgLsZiadb3D
-aJngtiK5EkN1LygvPEfC1FD27SslcL5LqW6fICua8TzcrAyltB7RJVWD2kEseMJN
-gvur1XcmpGvxDPSk9T817+aWl7oLiKVSH+JUiUbyk/ydpUaG/5RQtAP4sCGVykZx
-0KKJntFTWwUNsjESZQTJe1fqv093WLt2jZABdtjPKZDEhc7bn/CnaeDOQuLC73Jf
-P/bsow5B6G0rJTWQmsRIGtgwELSmghjt6UbREbUwPP1d0VBAxXJs6FS/vimVbwpq
-JI3K51k11XPEPvUB2ue4PVaraCAQ5RFBcje1iFOJApY8MswCQ+Qrjm15l2wb9UwL
-Q1WKPh8SLu6TxGWfsUlyetOVe9Is26SAjAd28T3GF7Zl2HPxuYvkp8L22njiGgZA
-n9+TvlbkG5TI5igZhDayAUZHrxLxqcdDPUfbeMkQB0M1fzEsiKfX+C46eVZe1k7k
-5r4aXpb8gb51SgnMwcaBduEAMyT+jNh9ex3BVphDL80TrS3oLF9cf3cbnXwTeEUE
-9W+Tb3cyzfQQ/yO5S9wgMeGLqOP7fSklDguFkbC198QVuoHoZBB91nnufiKJAlQE
-EwEKAD4CGwMCHgECF4AFCwkIBwMFFQoJCAsFFgIDAQAWIQT2gs3MOdwP6uEWILbH
-Rs+p50+ksAUCYWzXFQUJGPbRAQAKCRDHRs+p50+ksGQZD/0Y0qzaw4J5Zx6CjoYC
-4F4D9/0/ymVF2d3dY0H2FkO1ACdA5EKp9AKrTpa/tfF7MM7j+q2tS8b5yvUSptNv
-xrFv8Fcl/oYMvELnu2kajc6nViEG5ULH5m1QX2jXjlKAn6sXk4dVfRdEgB7+qZms
-CFJYrEfij/JPgKFlxvPbJ1ADb+nCpgc6Pg7WKdt+cqzzBcHj+YJjZdfojqr6bL8J
-l5b2LgWJJY0T3ws7W30IJ1yUxWPLW9CjeKZai2qFQKE3hoxANG4EzGmwm/z3V/n4
-357ww+83LJocW9gftgD618K80TRxBW40aR1+rPSNx9wzaz+txlUD+d5YLyDR3S2p
-iaERwAUSI0z+Ruqem8BVgIY1PSIE7UYTjv9onXhv+XDAn6xtQXH9f5xxl/kWDI7E
-giNuQrGR3JhwVpJwRdAstUjis+tZURqCq1WSp9RIQQi1vWWWP2x82jQHtFK6W8kR
-mTWK+hyLuksui/VlcPU7NAIyHwHTWsszfle3W2jJ6WjQGpjuyDuJDZRwsGT8p15u
-JiGbFREw6SbxYgog5dhTBJmLS+9q5qr2S7SvyUTYdnorIk6UfeCT7ufetk3NQ9ho
-ERC3JsreJ2QUlamRHJtSsjGhZaLhR/fIang/GcBuypjvTTSLVVx2RW1kgMqYSycf
-h/w5v4cdm0ASSRNXE5bGs6SrQ7QkQXNoaXNoIFNIVUtMQSA8d2FoamF2YS5tbEBn
-bWFpbC5jb20+iQJUBBMBCgA+AhsDBQsJCAcDBRUKCQgLBRYCAwEAAh4BAheAFiEE
-9oLNzDncD+rhFiC2x0bPqedPpLAFAl8Xzy8FCRU0XEEACgkQx0bPqedPpLDXexAA
-gfQNHBMsRsbVvJ2OHLhpUI/efGIHhtOOeCa2Upx7DFQHK4GN3EHPZHizfL07Lfq5
-8tkKm+uSSf+UHWoueTW8+m96UhT5CM1SYwM8sDH/oBUgFb52XVyLu8QI3noQxg54
-Hqli2BFP0Mz8aCGes1XtWI8IfGkz1A2wkd5Dtp5mvsuen/n3J9//G5Zla3FcJE/I
-lFV/6QzYDUBMISH1Ogj0Oog1tzGRIxYTlkjZSp9f1mWNGkOhkJaTymRYrQxnksHp
-nhx974zsiym40pz+beRKSPz3AMLWHXRTpwJUtWUu6ev7HIYIdVxB+srK+A5xu24k
-RFJK+nHLOIi+xI1P6ynleEY11IMMYX3yqkGbsspr0doQ9dd4UFgfuB2oNoLEqIdT
-czL0fqbghfFnMKDmsKO+7Mb3DJ3EvYvMEOIwnEGUfgqNA0LOYxcJRj9kORr9yK+1
-QWmZT24ZVmAwbQ55LuARguEsV91dJigp/tYKaGVlsfrMVeQPk1Bjqb5YZhmWPF04
-RsXhrjXzenQhr1O6Kzn1mnc7fEyI+cHfz2Y1U/gaYJYgabOD0QilryfIJQgZ0UXu
-X6khS1lDUEP4AEud1mcuUvm6WlFFT8tNhHoPY7nuJUMy0Ftvbi/aW26Csy94A0MQ
-lSNAQOAtx9TAY2cuRl7re/wBFoNCwHp9exePlFGEvfOJAlQEEwEKAD4CGwMFCwkI
-BwMFFQoJCAsFFgIDAQACHgECF4AWIQT2gs3MOdwP6uEWILbHRs+p50+ksAUCWbBk
-nwUJD8zxsQAKCRDHRs+p50+ksAGsEACWrUp/a6/Dr7ejlzoSlAOfvpQYaPlF5JQj
-ttExaD1hYLtTWCcrtKxTtMa045yk9mmIhft07jO9WeZoYh5eM8p3WaRZQuRfUzRd
-SLzzWhQQBGgWCdT7u8IC3UuDilUQudGGTg0yX5fNxRpK+Vw8na9Wz+fV1RGiKeaD
-piT1uDr/2Nc8N19A6sYQ2o4+qVvCgVuRIitE2IufmfyGrZMHhkNEMzbEIOWV5cwY
-V4m2XN/oWYTRA850CH3UM1zaADsEF1fAloBZZLtF5vZjFjL80tiXu36ArNem5lN1
-ORQdy/xdolK87je5m20XmnSkS0BpStS6nvoV8h3EWhNxuCHfpekdok+O16EYv0Bo
-vEaLAlu/VjYui2dWfoq1Ycg9h7EsRBypjsp7W35ON7w03AX5dsZpL2f69lQoKSyw
-Dkv+XvF/YlS/s0b/6+jHjX0Yr13x3S9m1nrUM7g6vQJB7oS1RXnZ5pWQX9G+SoLJ
-yFHoME6BoY0jqfcHy2qpWJd3rG/0DaHQ/YDVlUbwARra8nMw63Xg5mUgV4RSFh91
-NgeYGkG24792+7dxPHGfMn8d8/mIZo0rE0u9OZ9RK+vQCQkytMvKXoGZUpVIhLdH
-iLFAVeqlTXyMQvOVKUqPWRkp18ck8hLjZdjKX95dAurrjGQiW7G35rp+vwLYuD8T
-SMZABBNnPYhKBBARCgAKBQJLxr79AwUCeAAKCRAfL4QQdi5edKoNAJ4sByEakgO9
-dQosX7iU/61pCKOP5ACdGYXsOP2GwfCaEyOwZoNJws0L2ryJASIEEAECAAwFAkvG
-zu0FAwASdQAACgkQlxC4m8pXrXwZmgf/eeTexiWCbT8+kLdjEF4pUmhMJWx635oK
-j8q8gj8shmNEVJM/1oOXHSrJgxkIO/883HNyIZXw/iEQzX1S9WXNvf5xvs8tD2GG
-IUg8/NqlXmRHMMt77LNFjIi1xkn3uSwsS/hOHmVVukVGygh6t/QIulPxQ1S9NFTC
-jY64Eu0HXH11t8s1LJtA38fs6j9dcdJm7Kj/W6z2JSwtwbz5WLd+nMnZBH0IaCNF
-XpNujOHhExjXtXUPyh1VZuPeXctl56AmYNa1r7zb3jtlZQvCguB8IMIbynIQ5Zcq
-cw3owoAL3J14fMc5LmSqMSKwRkft6nmCin9N5J1iMng5xameFIg4MYkBIgQQAQIA
-DAUCS8bQcgUDABJ1AAAKCRCXELibyletfBlSB/9HoSJ2wZ25nxHO32NioraNN5oV
-K4vKoKn0VhsvUe654uonIKTRO07ib9oFORiF+hRHIjQyOn7kPCtl6kXuz7nIfU22
-hHXjVz3eiddcDKqI0wiQxlHcZmf/tpdt+Yte8EA9QzKc1jheth1SMZ6iFhoHLOMA
-e5+lf7OYMolJsWB1SI4HtW5fjxfqcsR9Rwbf/Asg07XTVDOioePI46sofbBPHk6G
-qoGNKRpxaSRE8Jt39Lv7MhfkSuW/etcP0SzADmoy14iyyAfJAqHuz9b3lyrfKkQt
-QHNp//fyF3LI+03M4Zk2ZJ3r+Q5PE8JwFNVy1EsURhy6GfuobFvjqUDHjWKIiQEi
-BBABAgAMBQJL2IW6BQMAEnUAAAoJEJcQuJvKV618AEgIAImQY/pehuerE1pl0bD1
-dNlfzL7sNKJNwf9UQIXekio8kT7WvC+Bpr0DjMhrVcNNLvJdaWGi50F+2b9S5TgC
-RetAJ4xj8+fOFQR12G56xqy7Z8v5vms8ADnv4rYRPO2H+3XLCSSFaXPMC7VJfdZe
-VNMY8X5SmW7+whAJsL1eMZBIY2NXWm4Qh6JR++eMrRhZ2I1TLiObZp50vWBOGntD
-e/vDbIz+1A4HksS+YZQ/X3nLXLHVlmusT1R9m/WiZ/9i0/sdGnDsmQ2K5YsopuMd
-Ke9OiShFA12d8dWRE2rMryC0OGLnXFUITszyiZA7ueSa32ARvGtw68G3kIZ6yiry
-JdyJASIEEAECAAwFAkvpqz8FAwASdQAACgkQlxC4m8pXrXzjVQgAl0BM2E7D9S7V
-tz7YNdoiNsu52UQ5q52sz6NBZK5scISUIrYw5Cdnc9O9R0zQcttNUPt3cPVHCu11
-yAja3YcAy2zPygLFpQ+gf4J3lXVcWkSCsnryoheX3zrqnqoivtuU7fi541l3aQbJ
-/gVLpUh+yLJTv53E0M4J6+a6J45IV5lj18klxZUmoe06bK2h61qWbsQ8SYbHOMPU
-kFMraQVhk1RwSi/uTc060elwPz4CTN+Vg/YPDWzNjZiT5PViNq9DGvh1OaCTPPRc
-ryjyJjaSYxNYZ5gGPOpl9h78WiUgc/Zo2vVpy5OWLSzTNkeYN5wapqXBbtzfSYza
-uEbQI56JFYkBIgQQAQIADAUCS/t10AUDABJ1AAAKCRCXELibyletfFd1B/9RLcAm
-eJAtv9dYoCV1XHSq1OHlPfNBXRPkwMx17SCGPBbBCy46eMGumXXxbsRpF1SetU0W
-H9pttqxiQLhUiOFVDqQOFFKUgJDFwVuuV7IiT8Rzak9U0OiADlnH5fahNAdreT9d
-ea3k7/5fRZktINzU3rcUj3mScq/LgRV4Memw9ajzaHnVBm42rZ5O0s/mGKnrMcMa
-vDuLOjSCCRZGIJk/k5q/dM8WfJBDDwxsIRFoQhHaQalbYoeYChX+Z220hMdKHB5z
-QTzM3Q4c1dmzR9UiPTPl4kmfdkjvXfTk2tiF+Oz7Nuhf6lu7zeoEfpI1lfC6Fw2A
-9E6MRBrmFpHmRR8PiQEiBBABAgAMBQJMDJmHBQMAEnUAAAoJEJcQuJvKV618HPMI
-AJRBVIYd4XPIi4zJ51RD1HBJ5yOyUwE5rAXDA76rTVBAqbhG7CVI7+tPcobZJ8Ut
-OjBRSUR40SwMZJp+FcaPgRfBlc48W3mHH+TUHh25KYAiw94npZuLROOYoMf9gUGY
-rnjmUd6stNHkcZB3HTFVyThdnZi9bmqLsycohnqzfxl6cRsPrrVJeDsqUs297a+/
-Pa9iDyIZWujRrHbSnFAmI8cn7F7if90Uq1JfB6f+GQl6zXxLemsWTT0ealzUYpdF
-mmNwpgPpO3dBcm1cO/qFeRodB8ickk1WUyYer+EqoZh+wvUTq3gYV91aXZY5Qsve
-reIBRyngVwC94QYihY+r8CmIRgQQEQIABgUCTDwGhAAKCRA1PcpWtLvzx1u+AJsF
-AzpEnh9q5aPOgxvV5IHz4kTCqACgkwhl0LtW/Q8f4IhaicCC1yNO9YSJASIEEAEC
-AAwFAkwdvg4FAwASdQAACgkQlxC4m8pXrXyhaAgAx6E1oa7f/ocq57+cxJjvnZ/A
-gUbUIe7rT/k2vGtYEeBKmKvY9o/3PFH4W43UPdOEweHkDZTQcDX7LZyh2TjOiNXI
-39xqfDcOZX5keeITqkTdTmhUzNx/i+2h15yGAmryBEIajZYHQ0NIGxwqrWOA/XQ6
-xUd9TC+Q1v+CA9ns7Jpc6cOLgV89m0ZQyxSbSBcP1Ry7CO9sqN60PrBO+4kNJo5p
-BjXZYEKPZWsCbV7xoLopC8rR5LYBqxDxzP5/Du/jQb3oKlev/BJ4uUSMsxV9Uwkl
-K2NY8DnndN5m940Xy81CxQDzbYfRxDIrMz9LWQ0rwhiwkf0ZwC4FgZFvxhljRokB
-IgQQAQIADAUCTC7hrQUDABJ1AAAKCRCXELibyletfMoBB/9Z3X+v+ZkpxxYoqKT1
-faLWf5IuZ8zmNrP1JOJ912xd2WOPzSovK2G/tp0e/lFJk9K6OKvqetxV0s8PDALD
-Vix2/mZ0QFHkRi7AcFRMSYdy5CdLw+FPcu/gbGZ649Xw1NBALOURzfACOoHc38uc
-jJS9JX4/0wpBjKaoWHg5GlXJSJ99i8XWBQT+FzH2gAzomdzsr2TNeVhw10A1dT4a
-iqyn4O/vBYZey1RH5uul556MQeLHKi2BCbK+1fMHGu1wQBIlg61AABCi8QKBiMqC
-BBOw/OlVCWohUjj/Ho7FLeqabU0BOJKvb3HdPzHgOuQsRnD75fpr6OSpKiltFzCH
-C56ViQEiBBABAgAMBQJMQK4IBQMAEnUAAAoJEJcQuJvKV618jh0IAL0MSatrbUkV
-RQtiZ0fUgrDuCgf8ddP2XfATCWjiPrODFL1OzVKDA5m1Fh3DFrNDRf0DJbiUPFHI
-3pH5EY9yQbxCEEgRuXqv8mAHX7b8MxznNj19nS+qiNAuEyuFlT6LBFSDHWQrvy86
-PQPbaZ+qLYS96qYkhsyxe6QkiGTUcmmstsxoraxZj2xQhxfxFYoFB3YPbvs39F9T
-bvs3ujNQPXETLcm4ojoLMnDsld1Ig164e0qzZdD7oyJHm3jHow6deOSChDT4I6X2
-lJH8cDwpELrrnTSl9VD/Yr0OVJD7runMID9E5Ely1EG9a7rGqWFjTiVhEf59tAWG
-/oN7cWluGgmIRgQQEQIABgUCTK0PCQAKCRCwKi5plrGW/igRAJsGl0RwfP8oJe+Z
-u2ItSmJdBx7WOgCgyW2CD8UFGMgOO1UjdlA1ajfGBw2JASIEEAECAAwFAkxR0ZEF
-AwASdQAACgkQlxC4m8pXrXxfagf/XBmeZ4V48WXt8FllbFILoFKPRmOYCIDhCjkN
-vVOCkwzEe+MoWGlafevRV5Zn2Z8C+UOqZJSKhNqoszTW46J+JAGHZBqRxXwC76js
-2ZFJiIvf/aJOG6cUkg8k7kVBRGWGUKORaEeotXoCKD0t7EKV/N8wMHgSIexH9LFJ
-GWENw9dil6p8H/FCvW7NeraUCE6z3/yU7fwfpknVjiG7yXY+saYT0WLsAPeGqKN9
-P/XyElTUHU3dkfNpUUsKOHiXSOTzyhS4KBwIgu8TskbFhtvHGyn4edqvFowfrzxA
-uUKSai1XKsP/63Hohae78mZG/bZO+rgrL9I5o790PUlTYa3Rd4kBIgQQAQIADAUC
-TF++RAUDABJ1AAAKCRCXELibyletfNzDB/0XU7zJVFrYPMdBucOIDiGWuPAnjUjy
-2NBwv5S/6wR2vwRR38d5KOGsMi4vkLT+74Sv90U7o9/XYs+w8oHNVeTgzpgNvsm+
-ald6GVGKLtjbXFZA/3XovVy0+xhNmjbyZFYiZBJrSpvc/0H3GubtQnH3cDzm0P+o
-ZQ37vtgeShiAwVTXcf/H2K6SlQSyj+xLjpzKMdcuGt6/My4FNBoEHRHCUzmhGqm0
-VNmr7eMga3//Q/MKDpZyKzytb02cuwMtbjG1SCrfMENvKO3orqJrOrZOuSdisPT7
-lymfHOv2CEDrIA2fwhZR44AxJdL7DUNWDnNtKbUC5wSAGQn446Cs6Fy9iQEiBBAB
-AgAMBQJMcXYvBQMAEnUAAAoJEJcQuJvKV6183FAH/R8ukqHp0D9prrSlxZoPBGzt
-pEx+7Bt4qmsjno/9a94P7upt2pnpu6knvk+3EFKLSJZA5krl9gpyJe63DwsvyYNn
-uY+RycTousSNSadoAo94qVqjhRL9ZgIkKzs78Z1U+o9BA0SzrjMQvdGzU9unvQgF
-X2BrpwG4x7hpeOcHrSZi3/JHdr0oeolb1JQvZQ7STerxVBhM0jqlFpCDp12AQP53
-vLLEbJvvP0qfPODe9l4x/ZxIRma/qUj0uWF/wFZeDKgAdX+S8tiyOqyo4MVOFuY5
-/PNpcCSmAU9Ya2l5TMTStbgQqUKa+WGk/Gf7QbrsyEUJau7W0w5h/8nk8OwtgFuJ
-ASIEEAECAAwFAkxzg6QFAwASdQAACgkQlxC4m8pXrXwNhggApXE8SDTfxYbdzwbn
-b84YqjQo3Ary7M914lb9v7J0fjV4uu4Q2J3435Muxo7abVR0mYOf80QnUvYcvKk2
-W0rkFoFicaP62HNtXU47fFNiJkwtD7L3QAAWornoh2WyUnjNG9PwNpzpla4zPrXv
-YIyUt0/uQAIKCmn86v4HlVTWBYjaXApuijD8yopRJgHx9y/Fj9IgZb3xBYJnwFhf
-EU4ARExCireEeZjvfRqWVMzcjFOIF8p3HUQabG1zzySsx33eZu44HRsNIY3cp8hy
-EygFkWw6Uh7+ynjxRl7DUhMLv+MH7L9LtGOCv+yL+5loxI+zG1rBMUwH+MVVmJBk
-dtdhmokBIgQQAQIADAUCTIU8WgUDABJ1AAAKCRCXELibyletfF3TB/wPYfZi+5yH
-zDBtJV4EgKdhheMnaDDGEPxFj2kVFQCvhx2uDxAsk2rTFIaOY9YddN6mdLKbKecq
-RlG1uop0+eSli1fZl6btrqMSdtGxKJrkjXMTOin0aE9SLkzA7TIiBct4ef/we+Wt
-HljzBckL/cB91KgGYxvdb7e0fccbkvb2XQNiOb+r6i5A95XpWyjm0V/SmiAhSsNh
-8tY/8isHlouDtLpp1ZHQl7zCrHx8DbznI1l2lI5UT9WZTmqS/Xlsh8f+RqMdDIxQ
-/4/fvwi3JYLibcSQrcS+mt5bmpwb8ydLUSPGgs9d1OUViZc++3Za3UX9hgpeULkT
-1pPDGOofbsm6iQEiBBABAgAMBQJMlwbPBQMAEnUAAAoJEJcQuJvKV618pNwIAKd3
-h/3dJsTtY4NT6oET+VLXh7ef1Z5hxYOLo92igiZXiQLb5kBk589pzRu93yWHoxwy
-fUuWUBRO6YKFwdv4kDUMDycH7PfJB/WqhU+mCc1eiP0jQfEtxCD2EdZw4j15i2o3
-hp+tU4H7/hg/3IvlC8vskpS3ZAs+TggkNe1oPNI0UMYPtKAOflYd0K7/ueUnikDB
-p6j1df1qIlcyqILrrBzOY3LEFnODPlMe48dVxCUVZdfmLJcqT01H6wjz/8Yv0B1q
-NX627b9BD0WC9Fom1D2Dc97ZS0OEcwj2qzrPSgmNgIhcKWXPIm9Ciq834C1Sr/bv
-CmiUZmMtzAAcJP8TIHWJASIEEAECAAwFAkynLdsFAwASdQAACgkQlxC4m8pXrXyG
-9gf+P8MHOAyY9Ovi3Dk1MtL3i93g0nJyTNCSHpn9ynkJqjDrz+W1nCHmmrZ7seue
-rXmrAUbkEVugRRNgdwZRPZZ5qAtr2X9cHnh59YikFfQoFLlqGSbGzGkBiJYoWby7
-uT4kgTnc9mRvlaNdXUhikSP6ihz+BMZxlT+z6pwGOYVujpvSfQfyZApd0ZjWAXOK
-zWXQT9KNLw2F1znl9/DqdaWO/lWpTNwe2U/KqYf0JWFA3fhG+h12BvrT669Il/LT
-d1Kyn1f2tNS0bH6N+keS3cOO3b5tx0wXp0X44pi6lAS9TzD9zdug01BXnrWuwwL2
-T4NmRLmophxvuZWGhvjJBS2t4okBIgQQAQIADAUCTLilLAUDABJ1AAAKCRCXELib
-yletfJmACACtZuTsAQG9xfjwgXqji+2PVYdf/OyPExqR1Fb4IdP+s2v29H0C0M6B
-tT/MuGdXs9u+VXyJsQNiQxaZqM8humJsK6d/qYyKa9Hf0loxbYniC8Y3VN3dSeaR
-UvQU2sbJtqbS8GyuWt1FGzQYzlNM6ETABQdoXCA9ebWhDzOxpRvO+QSqe9OQYhR8
-/ZxlisQz4fm7A8mzcEyg2dawJ2aj/DsKhwbC8938AsFHRPJMQdUY8Pme7NZhEq4Z
-ITW2y5gm9rKhAjeynquZicVG+txAdCLLgi/lVwmIQFNB/uQ607ePPcK/oKCXzuQU
-SfcMiymtk1Jxmt8GdRHkU67wBYRrhvk5iQEiBBABAgAMBQJMyctGBQMAEnUAAAoJ
-EJcQuJvKV6183UcIAJsgd0FTyA7lus0aLc849YOHv2n15PKFwbhGQVIvisG4vSDm
-z3A4M8QTAwEs1g7Ngq1oQtxwsyY09vhwKBd8zLYIz6PcLIRQ3sFFOjUK6UyuI6sT
-rS2E/KWt5paDyZci2NmvPBDdMlTYbxlkQGJ4XfbKwTfplZvoutHazDAcvEDoK0Wv
-/UKND7CEZszxn+MTjjuNJR+b9RIkK48NPI9eaFkomg0LDKJfiIot+Co8aJRtKvim
-tIZ5OE0Bfl8b8yIUEwEUwMEHZnjz/HINBSOi+6N4HqpFg2ClQ6P7+QzivjOgu9r1
-LsDIQB6Zd0kHxG0matTB0dKGrzGiqk6eD5XPMsCJASIEEAECAAwFAkza/OIFAwAS
-dQAACgkQlxC4m8pXrXy1gQf/dYOO/bGtfaLgUQOpmqSyUWNhPaEnIRB9LLUbtpw5
-qpHlHHD1jNQnwbasxmfTxVfErPNMugzv3oay/4ntxRl8OEUKej+30R6/zxztmis1
-o8ZRwfPpxOsvI/DaRSd84g6pOJIVjN6OWP3IETkgct0hQ3CJuHmezwO0yl0WY9AO
-1kmv1nydPbGR3wfsVGGm9pkTgNHfLMCDN9HvFD8ZL7/lPanXszftUx54g5GVX4hX
-wOw7rVvBdr90ekXacRaR3WFP9OJNLJqn6IdSWEIM5iz5HNM0FNh6YP5az/dMauF1
-0VxJXyKkFBByy+sC7EtUuT6nZ5d/bzK0uL2YFAaKZUL5K4kBHAQQAQIABgUCTO/C
-BwAKCRDZNxCXpHPJkPKDB/9MqeMF3/GzGHWyRRvmIvDYhS1uy2PHNAre7C7DNY+M
-MNGesG0lJZPL4YUEE5fS4ca2oxKhmPlRPzzj3S/fMCEZj/aPMi+0je7sHqIOqq3a
-XEjAtAIjEQOZ6DNRWjNQA+slAK2l7LFFoS+VS59U15p45bjgIYaJcHJJIyAzLsr3
-ocMvfLEZBhgM09x5d5BKpOT7Hm3D1uO+GXdqDqU8+zrX8ENLs1I3ERbKo4xyFIB1
-34oY1tyXaMbfV9oZo6mCC6qQgq46TcAWIPNrj1sxJcflDzmuuDYSubz3W95z+6M2
-94etWGaRpPuG+BjOMf0gzo8dLeZmapndADZcOBhJaigBiQEiBBABAgAMBQJM7CBv
-BQMAEnUAAAoJEJcQuJvKV618kxgIAKEPmVJ5OPtv20OyKaAwuRJsMCoWipxnMmLK
-GmBpnA0bpDam0IiSspXDN4YuD3F9V6sgQH+47UfEBRFeStl9PB0s5sLNT609ehkf
-+TRSsc0f7pCSdpyZ7ihYHfWyK68QYLDh5SUbFVnqe6WYQd1GJvoAEbazrqHRrIa5
-9RNYJIr1J89ANi74IqgnnvTgYnAAsSGQYzaWBtNQ4BwYrpk0bPXNbWDjME7knDFm
-7XmGs9kOnlzgTBSDlTG1NEEX6BbNRlylpJA2lWXUDe9SRwu6/JpLWkVHiNduaRXf
-Qtii2j1AiamIcZzOzmu7NTSwGofVyoo2Vi6/e+Ri0+zciYGBCcKJASIEEAECAAwF
-Akz97cYFAwASdQAACgkQlxC4m8pXrXwXbAf/XUDbul2Y+K1lrynHaimIjbbT7BFf
-aywi7agclAr2JEdRNyNazZ8E3kgK4A4lFztgl7EROpWxj5/k+BBMK6//7Jbau2DB
-xPyhKBKrYqc/2rDA+a+DlxD5odzLJsWAJZSafV6LhooeWZxhhIllOLFG01P26i4J
-S77t4j2PQtfcIFlEjCzvLm7s+R+9MaV7jENx0NF78Vz9d1eF2Sbh83jDBikmJPO8
-1qSU2oEz9M6Uqm5/psPZNdaJ9IUrsUE19ldlYOtoHWsbo9CHMptAORpElBE9alLI
-RFumsqOl4Rh+L/9mFfttcbK4OuGUioDAcolnmJKVztbtTBgEZ7+PB1OgPYkBIgQQ
-AQIADAUCTQ+5SwUDABJ1AAAKCRCXELibyletfI1pB/9A+hrH1qanwPFCgiBjrLc4
-oGbk/7dc2hEIYJZC0hziFS29t0VKm641QrzcP1qoyTvAcKPH7Y7pHhDWnyruKhpe
-bSldMPi6jLXUFVEBIdRX+jBjYxYU2JLNgyacV0UqhC3flHlhET437+LwZiqta6vK
-Em4jSZDkp6Z8IKTHM0fN6xHpfaLnlzzgt6ofgONPe+KKbxKz35uaJIIczUG05JUl
-2x/rRmrNYKLg1OwotzdpJLWV3hGzM1aiCLj5/Y5wSrTHNF2Tm+MISTtwKbOw0e0V
-qmiMaEkDzViNYhYGXo2QdEAZRniji5LdZtjeYl1YfMV7dhJrH8UsOZ8/l80qvfks
-iQIgBBABAgAKBQJNGhaaAwUCeAAKCRBDJwX6zdQDJfrBD/91zI2Mv9lmXnr9M6uH
-6CPxnMx9/rnYvt0/LLhfvSU6wKs4EoXBQHB0t9N67QfE1EPPFivQ/5stWWqjAxf0
-M8PNO4Nhqvz197/z7HZn+P7LeB3zvZAH1Q7amyTfX91r+8nmN71MY2TG3EF47Ent
-FKOar6ID92bRF+e9/kdWSARdGMtfzyruBAdJVRRu7ODv5M8iCXSLrXzJWSe8tzFr
-3SkbEG/9oRE5jEFOTOyoHKQ4H+ZX5bhtySK89FDLc9pAY9Ycqyc2TLNvy3V6nDIn
-6lXC9jOxnHkzrbqhIkUfSpkpoYlcMJRWlapzre6vRZSRx3UuRtEmETbHHJhTOSeG
-bEHI/pPMvLmx4nt36QXvmuittY64eT0UzHdFQ1DIRa1DQTyfbSZA69iZG3VMFS4G
-G15+Z1V1w3c2GTeJXpM3IdsfG0DRt4agwUpu/ZiXR9OOBeGY1ejmdHkm9PpkI7BE
-YnRKOrTdcOX+CzgUhiRNLJcPYcH9vY9g04FKGLszkcGcAv3BUg2qT95GdzYHW56F
-loUblNFc2c9xrrc9oxEbxisF6Dp2zWnF6ewFWkRDmvBxk0isAKRRoIRB6KPP3flH
-z4WkFEzqbGs3hd5qXNe1WgkG209X+2BL0q0rDx/vRV47E3o0MRa5wbGAtRMToWGu
-HM1cuuNUKZ5N7vIF2D23vjnO54kBIQQQAQIADAUCTVL1IAUDABJ1AAAKCRCXELib
-yletfLjTB/drzveLiMQPykzYwO9xG+0wZAMzCkEbopb/S0IT6TMHPX6XzNlqNpq2
-ASx1cUNlV0XS8sNUuqkeTxoYt06IfbdkKTT6W6xGvfwNKEuPXYoucxphY0Uh9Chh
-GgnQFAlWx87AR234nP/Gf7ass8q5xje3NcQ65drk1YkwK7vUBZA0jJMrHXkNv0Op
-KpbyGpUFvK7Bsi08R635qv2quqZmxzsBUwLzPU5d0Xpc0UInmKXHgTqk1Lw+WYk4
-mfH70omW9frWNGY3pi6qPxdjMCEW+PDD4BKViEgdBE4NAYbtNzhX+316inKR1fRo
-xPqeRAHPwV74Ux0/pqXnP2emJ7Bn+iKJASIEEAECAAwFAk0hhYwFAwASdQAACgkQ
-lxC4m8pXrXxrlAgAlyZbcJ900hE1Sake9+XQtedrtBUcgG2EnxxHpPqMYOCcp0ZC
-BkjGpOCpeb5FJeussEkYOBZNHb89/oZCXIh2F2/2cbT/oKj2hsNeqiXOwnJ3yrlB
-Qlm5qeblMumwr5D/LrXZ/kyi1QwNBA1wjURwpd7vodqk2UGIZU5x1rmPX2PM82Ba
-HMSZvSuTXKScpa5tvg1zH3gTlpNJLaUNo4mXrCHcSusMplkJuK86m9xrIrulTw1I
-MYWZriOJWw8Xe/ffZbug9w28bk8kCdUfJnbEy145sYMfqKAlKCpuCVbQIVGkhDVG
-h7aB03p9atqkSpU7exviCpjwp5Pv/DkW70CMeYkBIgQQAQIADAUCTTNSoQUDABJ1
-AAAKCRCXELibyletfDtRB/9VxFuoaxA20OJ7mGRc8FjsY3UyIhFV1dSrvR7eNDH9
-GcBONrhzbkP+Q6P+gLxbSATFCOkK37FelZgq/ieajojkLhbC1Ktsc6IFtJXs4ofn
-e8pcH4XeNiEyzvmg6A9MRSuYCCBl9g67oyPqAiR/rdUNqUCc2ATLX9NvvgalCMl8
-801757H6Gp55miXm5g8SlnR9/Wf04kuRPa9PJk14/o7iC/DKbwLj6kgElhrIMCJ+
-q7C180nNbDkbgJnp70mzX8b6CVYHtJccKXBIBkjX2rYjUEA/EZqcjjNfB/E2Qe6s
-OCj1tSOlKvin8Jz0HH+JDmI90OPTJuiqMbtlhNkDDVBpiQEiBBABAgAMBQJNQU40
-BQMAEnUAAAoJEJcQuJvKV618U0UH/0u8NzKruY93DoWvTwhMTEOvXvR1NxmJPbMV
-x3Ks+Pwnbqy2xp1/OVPyK1K5VDwp4PzZzezGetOwnj7YO9txxrIbVWAy2HjKkWzL
-wpFb2YNdanne8AXqB6h1QAMagtf33O6iSAL+rRCxj2iQZYyyzLeXSGD+hZNRUZMJ
-U+/4vSqDrl19lX4tsP5dZ9rK3UffwY5HMgB+Ic1EmvW0elG8ZKVqrgznHAGSdu0h
-S+jU0nECpMXmozUa5zS/wC3HwHkOe88UNn5z2/Re13YN1o0y/W0Djmh2y6U95eQf
-TQNQ+1XSr+F0YorePttnWraZizLikaaa7HzsHGzhxBdupk1I76+JASIEEAECAAwF
-Ak1kGmgFAwASdQAACgkQlxC4m8pXrXzOSQf+Pp1hvBuQKlfvM3tjx4+IlGbmVQyw
-nWJi1AMLBDda2NCgZVIm72bMSNmFLsulHnUt7jhX7xxyKyooZTEaQiv+mv4DDRqJ
-QWgtC49IARpFP8SswhDXLZhAm/fXTa2C2/ceCdHhx7V+P3xXWMxSgc0U1dQc7qQl
-Sk3FXXJz7iUMe+uoRnQ2Dm5zWnJUAZCkDF1ifMxEJlPwWCcuYlPGV/2eKmOPXDyd
-UYlLDRRdFyDFsvyOQ+N6mUKsKAERw6AAmWSxJIoFID/XpEezQN47g6774Nodrkij
-7VL+t63iZBf+i7/6gLXmFbLN8eqH5Tf01g0ga/48EJcsX/F0ljQS6Jw5pokBIgQQ
-AQIADAUCTXXoaAUDABJ1AAAKCRCXELibyletfFx8CADBycJQ+YZBnQrBALvV8CBl
-LpftCffGYpdUhPMFBx5xw4AqndGsZwxWNCQv2LqHA0Pl67yrikRW4bCzWwoy53yH
-JuUiyjaO/aCIBrM9n99BZ61WizZhG0wP/Du75JADcLaVRhuqcdRyc4o1LY3DUf6G
-4sx28ZYpjiUAIU4r5Ehksc48jRklFzuXpe/E5wFKp/zalAKMESyWLj4opCYlFTKf
-4UBsQoilgaCt/1v7Rxp0FU8GeT26Ke7cDv9pcJ9yD3HqICumllSpE/mDMiPJSei1
-Tl2il5h8gVBRkl49/uiFjGCvpn/FfNxKNon4YORW1S9HIGmSjrnA1G3Fggjvjgkw
-iQEiBBABAgAMBQJNhHdIBQMAEnUAAAoJEJcQuJvKV618B64H/39chY566vxIUmLm
-GGGNgsaljrJKIeOL+Qyi2E8brPnFEua9yUo91knZdtkPzIg9BHQDBz+8pOdiJ/7V
-tfdQqXGJOJWuwA/l9ObtuB4nbThd485K7miItt1LKvriAgowCfuz+cOhnNduS3nr
-w9/LAGhL9H0qcMSrPsj1vVRLOT1XJbBKOv5KeNGOKafR7PHxJw8XJ5mK2xvWjvDF
-UiXfIlub18KdhlIg+a4bxoVRt1RDe5cKV1JdxBlkI6aGxUbkR26mpJsaRhVUQ93y
-W2TG/3ju6otGVeu3b/u1BU9386/q0zB04FEljD6OVft2+CqYiv6MxtifnpnaGEti
-JV54ihCJASIEEAECAAwFAk2WI7sFAwASdQAACgkQlxC4m8pXrXwwjAf+NaMdWnBg
-qx8+w+unKglHGVPTQi4+V7s8ofonIXDDhTFtlIB48Y5LyqBSMeLMuxxDFFk9W2L7
-1Crm8XOKBo3LyFs6xCVAHZ0BBfxb/n/wWEq6u3Rr+RQAve5EewMrscQOoPLg/YOi
-t5CFfFlJVJfFPn6tOesPHIvWLzmN2mNUjnKCAon9Nmpf2YVSZam1BzpoVimfqqpj
-U1kcNFHE8kT6gK2i+iHUC2ZVhSz1g0ERVPrnixadEmlOv/gteiIBUMhgDhyYoYqA
-NE5F5Fny28IJf0L/odfulENqL3uQLbKYCLNVLcnH0VLhura2PFQ4GkJH7KrW2iwi
-QRJgSvbkyrt4YIkBIgQQAQIADAUCTafyeAUDABJ1AAAKCRCXELibyletfC3hB/kB
-tyP0ZhsFdk9BRu8s2MTesqBRHx3qw3Cv4RJkmu3Uma1N7NhXG486uanz/393U0nO
-3qiSqJXmfDdceKhR30eWaD1qllT+z0ngXTP8Hw6PDvadxNjCb9g/BetrXNKOokSe
-0/5dYYRgm7LbZaLnvVPcyR4Ajcbv5AcSNtATlTH7Sex2XQehQ0YSdSdzG/kL3J/t
-/F0SHKRO23lom4eFjV0Kt3dcp1QLtkyRg2tTSIMjLErkY6GYzNMKZk3wJfgH/fz9
-ZOl05QZ+rq5UbfnR7S2My2ltBUjw2XmXhikKigSWV2GLB2dH/b6Jf/I5MNYILjPF
-KgkjvIWW4SPdW5ed99f9iQEiBBABAgAMBQJNucHvBQMAEnUAAAoJEJcQuJvKV618
-XbEH/ibdvkDZ974CPSnBXa5Hg1RDhgX8WhTXt197JxFxicdTQsrz8gJnci1cld56
-eUkibQra/ikHyh4LuuBfTXth/Zv7osJZQ/YHgRR/iW5//3ghbWg/gc0AWRUDQN+n
-pBKGQ1xP8S7TCrTBf0IVbg9Cxu02X6mwQ0E0xdQOCBzi5oQSfj61CjZZO3/bkPdW
-KDDt10KJA+lzotiCENaJyF+0JnU7IPll9UcaWX7qqAmo1diSIp/nJKaT8Yr+h2+0
-1bH1B2EPLaF+ZDzvXTc0tXBj2uTkPdOw+uEi+WpG3KFXv79tUqJVNGBvkdHEf58q
-0OOcNz6tKm7vlKe5UHnhi5/qy8KJASIEEAECAAwFAk3LjkIFAwASdQAACgkQlxC4
-m8pXrXzGcQgAwSrUVod78WRMZbUjjTRuy0rhukGKdpDdPjkjes9KxJ62ZHYfgimu
-BpjcKGnZajB0zLDTiV16p2SgC8/R8h0Qe1xTqjz1xZ2OX9nsiN75adNu9Yn05ur1
-nUjUTzfknRyL0mZH4ULdXIYCcW5DHQiNrciOhPNe6AKudM8ABsAVfPA5v3OBsrLs
-hzbMeK0Lzqsdt0/M7QR4dJuCUBsFuMdlyvyfJFQl2fT9xeI2TOF1YcmaF9QOsVBP
-JfFQed9yplFva97O+yY+Oyg8msyaYCdhlzrzXV42fdFj0zrDj7GOK7LjrpMeCNiZ
-i/iOUdGJz4LNN/R5KWxaZTid9yKrUbaTN4kBIgQQAQIADAUCTd1ZbwUDABJ1AAAK
-CRCXELibyletfKeVCACgocj1261vTWUMFxRGO09adH2ecv2QPvrOgOMPM9V0dCSq
-INEXmYlVJAzyB+ImJAwHOLUaNiVCLhHKP/ZvyHNFkwV9vhmOZGmjJN8umBzxMQLL
-jXlaj7jPRCUl6sMQ15x0IEwMLz6XnH0S6exceHX9DKs4ig9S0gDzDu6ZIzmnctrI
-++7VXMbqjskEBJbqTDYAlzFA9hBquISACaIqWa165xCRtyiudS4xpZMoMh7j0jnX
-/0B9DurKZ8BNG2HuzF+Y/nTsMizX5yl31aOAbIcnZzCN3QGqUVoNBeJ2LKuOOo+C
-D9kC2iPFbR9E7Gw0JPVPMXQcKu3KEQIXbyAJKqDEiQEiBBABAgAMBQJN7yhQBQMA
-EnUAAAoJEJcQuJvKV6182agIAIEIoIpBsler3Fy8B/F0BWiKKRHOaxHzdSG2AXi3
-FMhuknM9azXsmOW5tI0mevpegR8/6lQVC/vgBnn9VeVFU6BNinbcDOGsMVvvuSQo
-3T6+sIShZKMk0zHY0rScf1FO3PyBbfc37Xi+LHYE5tnppljv/aPrngYOKBuwowsL
-H21ijVDrflUPp+RkZ+wFjt25WorBzI/NzPzn5Gy7E6UXBFbHeTi0Q2PObFcLDNfa
-9zXuE0MGCyob/3BSmXowx7RhqjyDImZfVHvqPkza2qVaamvKozY2wW/Cmv8krn08
-cGw49M+8jYJ7Pf9pmKAbMY+HhqywcEaLYNRaGmdzePWDGk6JASIEEAECAAwFAk4A
-79sFAwASdQAACgkQlxC4m8pXrXxVWwf9HfA3v7I3ckjFuJ6ccsnWBN5AQGFdm1JD
-PPZCx+uVn2NmWz0kWOF6VNTgzrpeHxrp+n2pa1WpdLvl3Nk17zqsTfoFKfJnsApM
-t42Sy5iIVzeCJV5NDvSscm+Cqm5n3UxuMn12sQfhjcUZ45A82S+fd7Sr8FcviJDv
-eat6+tu4RHjjcqhOpZ2SelAPKxuQQls7JKOwhl08p98LnxgICIrUzQbbFtnl7kYG
-32f6YtIuyuVISmEk8LEk3nroDQQM3PP6TQB19+qh13tMCe564hBo13vob5LTk/kO
-G3f2TQOC5B7KjLf0DO/vUx4ZYMsXt0jEzcTzABw1d91N9VmrS0LJ9IkBIgQQAQIA
-DAUCThK8YgUDABJ1AAAKCRCXELibyletfPw7B/4l8iYYb9YzXpJ2h18Dnue/frT4
-Y/fWu+/P1NuS/r7Coags0Y7KD0D0S5+B8f7+U/KPbMX1MpuWUY8UTXzwpC7tBzi+
-krtgTTYTSQQWiV1+viMQb+mJ7vZX6Zk41OCcbayFlOBbUWfpn2AUwVo4vLY3wWl0
-3y9SCM3vA4tuKYMMOwEdqXLBw+LtIStIHNLTQ5bXxNKQxUKUhn/oHkZQKD+jHXBZ
-Mf1g8PYHrSp6zCxi9h6xZ9nHRo+pjdkA3Pp5mMc0U9KakI69luFjb5/BJFElzzXA
-8il29rwBJUfCw3dhkN3LUUUvARkNKNMHILbOiatPvjoenFt8WrLbn7EcDgZNiQEi
-BBABAgAMBQJOHzEBBQMAEnUAAAoJEJcQuJvKV618f5MH/0SpxJAwIjeyg/lnGpVD
-OxaYjIwWhITlW8/TzaGnWvF4uQYERmWjfVYv9Hm5Fgx4islq6QSa7efG2LmH/4pv
-IuJk2qarIrFBCq4yo/et1/j6jNOJT8+MAkJ3A7g7UlHeGLZzxhuFY6d288htmv9O
-/l60VAuqw2KXjhapa+IuqbFKkHrvoorwkq6Y0fYWrnfOFk17zxM8UZTLegjz3Qtr
-Q/B5XDH1+fo0dBiIFzJCrbJpgtTJKSsqkYNz7WRIYvEjbp/VRivnx+D4U3nYRs5D
-X3f/Xqn6KLxBX1gGpbIxwr5GUeKvJrb+waWmnOrIkAvyNmUk3etEwq4XYjN2usWD
-XGWJASIEEAECAAwFAk4wY+4FAwASdQAACgkQlxC4m8pXrXzXowf/UgNTM9f8gLAy
-bUjHpMF3HipYygqMEwPHOme8TN0OidAYnCEyOv4S5/cQQQGUaB8sKuG1Sqq7Nu8g
-Jkv+DFo9dkeSzkXcLT2SvdP8eVpOU8APzBt7YRUb+26ztwHdkshSfIYQY3Co1RbC
-Tzu9zIawU/cAAdKrLfUhXerg2fwRhWFn/gjJA7BGvNNyJq/S6JmcLYZvD9itjUh2
-USZG0EAq8H0EPSjaHrRpHaUyTkMl5AOK1B4zAmU5oO/MoNoABGhvKWiCSjQdFlE9
-/R7n//4wZxvD4stADEHy0FdVrQmZQ5sO7MLvx5H/pNWvtu80jDsgsVld3gYiuApv
-am/6sabTd4kBIgQQAQIADAUCTkIxrQUDABJ1AAAKCRCXELibyletfCj/B/9HBJQZ
-PDOM5Qbbj5+N5vkytlatq6MEXH3Cb7jt1ifZ9HthHei3AXyHmbiuiZQytkQ1FfwF
-lNsKhPvG0MQ4IlR4TX2v8NZT3Kmu2SMlsrlULmmXssFVej6lUCOFVaZ0jBg5bV7t
-KnXCguGeJcThXBZyyKcW7M+tQo23MvOGg5LdqwLZw7wa6mMlRrelbpeS1nkpcgxs
-iE641dEDM+qYatMxVthW15pAKilCljz9R5ky9LyvyJZw61880Akp29R7GztdFTzS
-XaA43kP6kyATypcArMDK/0fA84SE6Muoyw7v2Y8xngI02q34KBSR+/a7p5hTr2P2
-WBBqDvDjAQbLUQtjiQEiBBABAgAMBQJOU/3EBQMAEnUAAAoJEJcQuJvKV618kdcH
-/RKVtDCPbJIzDOCfjKPYaaTGIXDZbOFFy6oJRbnjboa4j2B4qtoQdKjhKfgLjJYe
-GYF9JkvE4t5A7QXP/pIdqCLpOk3I48+CkPs7MWZiBPr77x9R+CYstB7YY2gm/IqO
-T0CeIcrkhMLdvjmhzSN8+slDifJs9U/jAEU92tuUcip4DcOujeiAQLflCQmvuj28
-gnJwM9DUlFkG5fmajovxs2++ZOBP5zPdPQBwl6pQHP8jlPZMvJ+G/LgSKrQyKRNX
-bJYrVTSGhWn2lwcmaWMiR4zPrJNk8quUXhb1w1JIIL2GFtiIzxBs3W3ifTf8Wjj5
-dNKvK0U5A0FlWot0DIEAtIKJASIEEAECAAwFAk5k8woFAwASdQAACgkQlxC4m8pX
-rXy4pggAvMXlsffdIA3ghMkmOpPoT+YzhyvcyNvqgCJjYk/NkBIVlYiDofD+jNqD
-xmHCi885lC1CkkgVlZB8fq5HKz2JjKx1IQ5j4dOglFnkHrl0idyShbGf+PMx2om5
-ml6yYbwbSTAqs1OmKIQVhIqNO7iyUK/7x0rI+F0kJh76ZIBn01c/xJrhjlJEvbqd
-i07jLmrRdLyyhGrXFEfT4l476RPY8LQC1NqEZqROhjx5TOyge1YSKfP7DQ/7uPfa
-nmCWdejvketTXmt/QKLZ+7PisBS4Uao1Er4ApD0STIkWXCwuThuwOWeucquKf09B
-jrl9/b0X5/g5804l6AgqWJe4q2omJokBIgQQAQIADAUCTnZFpwUDABJ1AAAKCRCX
-ELibyletfPURB/4mYg41TVDtqisrAHbFP7c86ke1hbQK8zLRbiB4hdIlc52/S4sF
-u6OUPtKBI5ppqXYj9qA5ayRuTmHMRRkSSLDItOjXb/mw7bTzT5Oyo0hescHg6lw2
-AyfFG/7JodSfr/kHNV5amnniuquW8lij5KLaIjzwEfPRWMSXm/acIW332uY+GCqa
-afjA5imM9a7JbXdLqHcCxridjrplIGsgxOGNzUoItDssDHjbjJ86T+/ilp+lC/7X
-e6n+AhmrCK7gxwAY4r1c5e6do5ntly8/CJmVLPvWdpuiT3xdJu5FFFQjxlSE+kR8
-dar0+MW2E9WRzqS4GoTB2H8Pzcq8dw6lToU5iQEiBBABAgAMBQJOiBLgBQMAEnUA
-AAoJEJcQuJvKV618hpcIAI2ZdK2GQ6akY7aoMcMTgNUH6CjZ0kN0yD/PEPu7Wo7w
-LujToC6s7XzkqbSOZxd0VM2hagHfpK+oMo/R9HW3JikcuFOuFEqj89NcoTr7frWE
-3XzpAQD6j7BHqU5T0Z7ZkbydETfd11AJ4X1QvbggPml0Dhh0QnsIdL/cwmq2GCxi
-c8E8HX01DWAu4fFJcSAaJXLo1vWe0kcGL43Kay++3BnEa0WTKw2ADoM3Fncg0XAy
-4G+U6WK+m7nUpI80QWoy+/Hm1oFUwslWu2Tn2uk4id3d+Ll+ApRle8JMKFPthiVX
-ggMiBzA6yIM5keTyCMLkxnmOvuqqgKlhNpBA5773QzKJASIEEAECAAwFAk6Z3V8F
-AwASdQAACgkQlxC4m8pXrXzqeggAnrt1uS0Zj5xMk0WMpwTT4Uf9OHIFvmd05sVz
-tmIBsQSAbGIHwviTwwErfTSMtGZlg9XP4rfTGdtZF0eEuiwKgLNltDOZGTv8ogar
-7676tOuuLTLryt/VonWV6kdLCmsXFy2Dtq3VP+9c91Vzhida2im2ZnOpl83CVy24
-Nju+oyquAK6Jk8RtLi4RpIcZMHtaPNXNVL4eS1HUGqc38rKLXRNZttDfQW95jjbj
-pqFZ2vXCaGwqsYO56Uk8MhSPmTKSruXLhIA3ZnYYIx0lUlPslYE/EZw9CZ/ogveC
-FXANg5sL0uiGEIJHhfBSeLRxs+IpY1Tqyza4hUPj1Y1KykVWKokCHAQQAQIABgUC
-TkJVqwAKCRBDJwX6zdQDJczVD/0Y33Kqug0MsMwcvUbWfRBzZOTwtLG6P/jo0ZKd
-fSv8/9xT1Kd7cYoPLkoDVDCvTYsrs3wHkemcA55qadHAGfpEe/0zejY4aS5FwPOi
-SEirCGSDq7sshQ7KBf6NYJKgOzRPnZ4qk1DcpIHu8wpL4Gpqbk0kx6QUUQp4WS5D
-XXHb0Dns9/Lb0CCwG6plvmog19ztqB3+vXKK79QSj3alugjTtSPIOXWK+TR9gVxY
-UrsTwLTBpvU89X5Bx1OkMvzLrKNGQE3/UEjFm49TY1cY7fyUBsgxRgQcEDGvtY7H
-MuJLKpfBZZwrP2ktth2/6jsUyVWYfjnxyo35Agac37SFe5R8Xat5g5hYLS2x12na
-6uwABPgUuin+Q8FxDrz07eWKddt4X9u+O+e7T07PvaWyDnj/9fpdUBGaIES7yRbe
-5usBDs+Z/abMDNr2dYOjTD3MAVmfOmovohYT9CrPeduCK92CvAxs1T7J3IVSJYKZ
-4j9u1g+xjNV9nZgla/IAYEZx42Lhu5hi8T0SPBVPBf4MO2MW97CGY9GpfeBFLayj
-cl2Y79keZCjgtlzO5YdVg9qIo+9hOagaxVKevLDjE9PT1C2TpoFtu+UgCranU04U
-sN9ftNbYwG0yZT4aN9ererVtjbCT6ymhwUMXyzc+0QZWi+imDnDRKEDvBgY+i8qj
-fRWLzYkBIgQQAQIADAUCTqusHQUDABJ1AAAKCRCXELibyletfHyQB/9m7t/FZdOI
-LHz2LS6ReYtdn88cEMbeeunlKx88kwD+FCQ6SpQ38CkS2VwUn1YiN9zhPPmvBILR
-jXBB4bTE2m5rFearhh0EWRMB9CkjytsxBxwoCrJ+Tn7RX1/vvJIM7xEXipxrhdat
-y4Jz7WxW8oSgJU5eUlUg52RpopXjenMRsjatVoVMzki61idw7EaCk1QkV4vXTrda
-TUuZlXNIzBvkK2mvtmbodwOs1vSNTOy+GKCcRSU46LbaLkO8HODsQfV4Sk6HyHY3
-Ba3qJ+kYo13JbRpO/E7QsaF2aGzJB2N9d/QsjWbzY8k5Bku3n/gEc+iQuxzpXI8G
-sBHw04k/1YjtiQEiBBABAgAMBQJOvNzcBQMAEnUAAAoJEJcQuJvKV618vOkH/1sz
-O3wljME3s2FwGeRGFqhJoDAiB8f1hIFUli10FKkF7UfwRxV12i/GeVVvGPQJBfMY
-rtD58w+9TUIkAtXofIkj6+/ofohe3ufkqEwgJnmD6OYKjljj/sj4ePuk/zNIdMTa
-eNzYl3rwt+Sgcx6xPLrSKG+S4CW7EkOLxUXxggIDYk638lB4dbp3g9oM/fmJkYjk
-rudPtQaBdCXJfhwaLnXOAyRvm2LUGSXpmABPXzTIYk3OZ8b9k7tAUvVVFpGjcc70
-NUJaZPaOFW0YysfkdNkzBIqG/+Csl3Tg8rMxTvD25woIqDQL0ecgBd33tQ8Asyxu
-as8w0GXJymPYhGkKEkWJASIEEAECAAwFAk7OqC8FAwASdQAACgkQlxC4m8pXrXxu
-fggAteVQrEO8qlBaVhLJTszuofbaF2Xu7tS11PPx+tATU1KHwD0ZpM2/7sVtjjmG
-C/zpP0Ba6FCFdvfvlnfx5rLSY8avl64EVU+FhoPl19VhvcgW3aOlYmB7Hc3QIIZi
-Gm3xrKldD6+Xs5PfpnBKGzradM6npU196WclOVeQyoFDKgcjAQ4SGJA+kf02by7l
-6K2DjE/KKF5zBGiDRzBMqLcX8DZoJIIQtS31ULRh7BLx7aoh72nICu8odNQdHSdY
-OWPDl5syH0ygrZAkeRSZY0GOyaqwhjZVXMqqs4/rSpdsKRMgH2iDGLhXE92aGYfO
-R1/dMa43/m39kL6Nqq1lP0LGgIkBIgQQAQIADAUCTvJBzAUDABJ1AAAKCRCXELib
-yletfH0GCACPlRU3PcL9EOnbzDYlIc3a3HNUb0amOxFNfO29JK2djgPfjgnyCkm8
-AYle31ROnwd9YMbkH586d3DVz7kg1HucYxh31jLwyBsIijWBPn46tdkbqBNFXQ5Z
-1mNh6K2dN2jkhLcVhW5yyl/BHvZLpoCnwKZOET9MKccqPXhdoBXejNqZkb9My81K
-T12WnOF9VBmoKvmxG5tT5XpaFM89IRWJ86RMUpWwpj6b5xSPI8oGMWBkSw0POD0q
-tU+OftcSnoQ76Svn00zLoSOPGbMP7mFhwJjp4X6JnN1sx6ZgDDRrX48kHrOyXQ4L
-Z9Fglcy0RIZ7iaFizoztOR/tEbiisqf5iQEiBBABAgAMBQJPAC+PBQMAEnUAAAoJ
-EJcQuJvKV618elcIAL53/rx0NMwjsMQ6C/3lX1mLoPmqStf5yEIu1aNJFfeG/jbX
-0lcGGwSUIhCcPZXQfaBGm/JPHSiRGWWYV0afI+SE0uOrga0+x+TkUupNiUjxfiYt
-KTUp0srXcIv3bMWx9kmTKt75oEcYK3bCQ4NXJFJmRbTvTZaYtNgXsUF62x3msu5S
-ZoWb2ZecK9rVYHWwlqfp5AKN1L9wW+Ad8ufuMakFSlr83qHpBYjnRlMNwAq25NZQ
-5swOBZUttfXl9BVMxH3miHgEvQfggU+xCgZyk5Cvl+3meBCtux3oEJsHPfu1CQs5
-fgORo6KOL4i+nPkSjG7bLVa2uFjo5Gm3abaFaxCJARwEEAECAAYFAk8HHNYACgkQ
-qVPkiRHCauYJwgf8D+wKqz9pxjYl1PuC/9ILn9qL/YNuNZPe/bMzZeahNxu6zNdU
-X2QINXPnB6zj43M0s4UFK95QMrXj+DQrXrcNf1VOxEXS6dwKrDwHn6V6YC3NKu0M
-a5uRYcgJCJJMUW4wBP/xJ6rlu2wkqdOMYTrsS1ddK+eLCm9srpi8uJWazd67G7jN
-t/SJB/nuc2G3FY2cuCsFHg8NTu4gm9fwo3NT0PM3iWy40x/6KVTN/m42PPzEssrx
-gLKAeEKHjZaK4W/xFDl9R9yiWZtuFM+imVTS3Zgcj+N4hp+Kq3PZ8aICRVIHtgmW
-LcPje6wjXb9HicFuhgv01zeUd8WyjxoUlZj9ZohGBBARAgAGBQJPH309AAoJEH1L
-bhieP5vmNSQAoL3tEZ8Nho/SzjAANvY9y+K+eXmjAKCqBC4JI9UCqk0RZ/kmIEV4
-lYRQYYkBIgQQAQIADAUCTxHk3gUDABJ1AAAKCRCXELibyletfN3xB/4/77iOQYQ2
-/JAN1FGorD3i2PGqqdZZGZFb63KBU1nNrefhBexpy/aNeiIwvUPfcd9OVfMWzQjB
-P7eNhxCPDpkpVz83G9FU8t/KS/aE7db+tDS1XGTkuqmVojQwGt0m2ZuFPfjjEEQm
-dDTGX0bFMeBtW83h/TnfNwEJQHKJEwX+XJEdV55KgQcvTSZH8RytAnAv6kMOLmfd
-PHkcQWUykvJaqRpB+hHCfjdccfbU5QakPq1Q7Llghe2SxqYF08hmxFWOgWzOh+8o
-O2mfDNjAGbl6KyZfJGMG1/2JZAL1pj+b+J0iDRcIfTfDjXpbSE8axkLlvKkFGPkz
-GRIGgC28xN+iiQEiBBABAgAMBQJPI7O1BQMAEnUAAAoJEJcQuJvKV618RvUH/3X1
-ErfMr/rrlAr4G6IaIIWocol2Tk1sve5Jt9Jf8a+QtD9sUz26x1/VBjyAB3l/eMux
-/onKho46S5EXE4JPjquVEmAx38ro5kF4e+CusSx21qKJVZmoXYBV6I8NOCNJ7xPe
-BEw8ypBbczoWp5wzG7AV2Pymn9sMPRLErh5Sn1kprSu5msAnaTCDtyHyN1M53UD8
-csaktBu2VwdKTUuiY/vKHYTZCwonUnnWpTsfSdmy4Ee2YhDGXn+WJsT0mw19i8kH
-MoB+CtzwgKVKy8v7maVuuGknKsnsjPGdMM1IF7b3mgT4WPxpbO+x1VMu0Zi2p3N4
-DsLStooyEOZEMngDiQuJASIEEAECAAwFAk81fQEFAwASdQAACgkQlxC4m8pXrXyx
-CAf+Ox91K9E5IY8z5ldaY/BiIC9qgLeHidOzaWdUKkAC+xVZXhLPOhtrFdGkOdsE
-0Fm1W9lhrH+xAXO9JeHvDTB9XlECZ62VZBYqmejCod5uL2xiqxGoYpQE1pzdXxPi
-p5BWYbhXg1aWpIbFiW9dvVZyhCvveYQD7LpvILhq64zo9lzZNKm7GUrqQGelHQAC
-AzLgLv5Kqka8e/WrbPoEUZx7vBNg14l7rakcgLGH3SiEwuruVxBZkIK9OvrmFQ00
-/UAbQmfRSWW0zbNVgiUGSsBA2OhJ2csMMJu5TYGtak7S7B/hpxE1+eVqip9ZgRCl
-gPX4QCys2ERxqBhdgV+tclxrIIkBIgQQAQIADAUCT0ZItgUDABJ1AAAKCRCXELib
-yletfEAnB/4m518qrZHTj+0wdqKECd95xcRvYex0kF54hznrPPYAr2RShWwHwz3s
-QPGv1arFluvUdfqO26Zvi3ti+qu2QIMwXL6399Upvo+B56V+1lnnZrQ54xQNvjkC
-ZRapSStrfSlhAD7MuD1QZPacLC+PO68F7C427EYk8ENte9yCGCL4gDyYrxX3nBKI
-8r/hJ914vM2mUp+8Fec6LdTDC89js5ttGI9qskRPFnGT6YvP4KmhVOe+H2eAg2Kc
-dgueh5qJt8LM0h/j1jb/jD17VA/zFIj9OJcl3n8UlWLOuN1wfSOS33icq655BpE2
-dtLcQJeppNK0ecfjlOIrV0bTuHA/qhqEiQIcBBABAgAGBQJPUO32AAoJEIRjrlNw
-yTqSTykP/inFYixIeaW33874CidXUJuPBHfrNQvcGIMAWEOyWWvVgzwRzVHWRPTl
-xg8isj8Rb/W2Mmh0waMGpRA5dgQixq6eO7udInu7fgYA0qMGJfaf99SwXSVgEgkO
-K0WuXoYDHMviQzLQ0Ypu136/xnj9wO3QGJQnhpa6QzlBYVxCur2lkl/JIvt5y3/i
-JbnsQGwNYXFHMYatCHpzuJC6DNA8JgyzOztc5QsD34+azys40HbnLyooOI2p+tWA
-w8QDZ2o1vRfNc1lXR8HxbkJuOM1Wda8xepCWtY1uclLbXiNUTdsJWdsig8LsPbeL
-npnKbwie+5vdEVQe+wpG8aA5COmTH4Cgd2D5/ZIipe4JW3KX8QaygKi/NwVsKJCb
-/3ob6kLiK5PnJU27EBSpUpWPQ9HkPC9i7DByU8HOshUeLVxPa0LOwKVKp4++GbXK
-S2spfVCmMhEDt/ZOmVlFpzrGb76nv9iVrTC40QXh+vlIVpPX72nIwNubb/ejo7aJ
-K3x63Jyb8JBSgHRlEdKzXTeZrjNRtjvpBNoFgzvSzexFezcEcMuO/JdwEjR4C+CH
-EUFGDpsDQiCpZcGj1OZtzLdyusyc9T3Miqf/Mz+cl4mbGWayZBwUKvfXRVO5qeuq
-vtZQuQ1sHoLqP0QM50LBXUiM1H3wKIOQYG2kDFyET+i8Q2cICP0viQEiBBABAgAM
-BQJPV8KcBQMAEnUAAAoJEJcQuJvKV618EUkH/1PhcKzeUwTyVEE1uAM2pWfuKQ0y
-q8PsWQAlRO5weRp8oygUVTwgYVdixxtUtqvb2NCs9lKp5V1/MMW4zAvs/Q/8eVdT
-yPnqfF9/WtlYcYcM7SH1ixqySwb2Qh7r93Mxm4HnDfzRxnc5BCJKyrIaxi6m++u0
-NsJ4GpOLiz4Qk80fr4ryv75JDEzGzZchUzB8O2qBSOIIKfA7z+Wyn6CgN3iYbf79
-y9dUnawpEvW/wYiQSUc1IttWtmFQmA5k1xWJuvOmszrLDBoC2o78460CFv17NO72
-VW+vSpFOR6cOCyzJXNwP4gmowkLDdTUAwbGYxi1OcrVi1pT644VOqNuYYqyJASIE
-EAECAAwFAk9pgdMFAwASdQAACgkQlxC4m8pXrXz/zQf9H2dORI3LQQwPduU42T9q
-4/vhX9vkLYW6FiyIA1HCT9pi9Mr+O20A3qJpM3NzH0DkSusuHgJyjgajvq3SuNzr
-zfwZxVM7aVwURfibQPkdqIPrOs7HVJmq1h0/7KB5RyeuI5qrITy0XsiG8jIRibZb
-vz71x9dqcu6LWUBuy77WaN0wiJKtjOctCwOp0B8QtZXlYvf1cSsYJLzQbkQaQKQm
-m4/L8lx1KKVDa6zLs6BKVpe6uPBgki4dFZrTFSnlb/tulc4P+PorWtDhIW656Xer
-Gn3fzUAkVVmbBvaehK3YK/jm3P1+PlUXkTHXQGK0nH+dDp2xp1cXDoC4HM7awj4S
-bIkBIgQQAQIADAUCT3tKhwUDABJ1AAAKCRCXELibyletfD40CAC1gjIseSyGCRHD
-laTU212OeW4B4m8guSb5hOfw0oE5I6+npR8hebOvicxE0XhPrB2PwSqQz2ePPAfb
-PUlR3dOJ6e+xV5aovfM+8oRaCStPfYACd4G2TMffUR5wyoiqQLsFI43M4zeyQ+Qj
-PpydZy7y5apqcfqiQVhT3pVQKb2ZGxnNLIX/zeRcnRQ+HLjfMDYr70HMfPa9F68L
-MpK7Lk5cDCd9a88F5UcyJbrgqf2oLTcVm9wUzWJbuy5rzlOzupWuoa/6m5x9rJEo
-7lW7wZslykVS8woiJnPrQ71U/9S5VWgRD/ycW6TKzHZUtC0ntwualAyifuiITZ+Y
-NPFTEmsTiQEiBBABAgAMBQJPjG4jBQMAEnUAAAoJEJcQuJvKV618FzgH/iRie0A4
-tDQyBL0PAsZUOKYzUdgmM1m++bSZunUwa5JiqdvO4ZEGhmeZeViXxe9stS4cfgVo
-JTpQb/bEwlIG3HlVEEJ0uyH9wh4fJkXipQ5W9CbbOhTvKk6XAi4hYCH9Pe/rdcLy
-TEU+5dywOg3v6THFPYn9GICqCKlHFmz6FFyZXmGX6XHxQVHtkOsQD5Uvrclp+Tr+
-Qr0HuY2N2TlHPM4rjhfa6ORb2/4b7G9p+a1QdWzS53sgc9bNpgTzHn4H3eJrYiu/
-7nf9kqKoQSqhfjKxeg4iqzpz5Ho6pbE9EpQwTKXuhl0yUw9bX+gusY35+2DhK3uk
-kLDAGSvzWd05K8+JASIEEAECAAwFAk+dkjAFAwASdQAACgkQlxC4m8pXrXzLrgf+
-LQvEEmdudgV7qdgftbKsngDDRl2pbT6ywUucQtvweK6NgZy0nHJAAj+2eVLFNIPq
-CHakS4slaDHdbXtLWOk27eF7Jk4PUQZpLF353yegCLwdJQVPbBomIDtGRmLQt1vB
-ns74uYgLpoBJ7GLOjRYkzS5OXi17ry7ULvzEXx1vOwxG7y8DzVLgD2rBDnxyZVpe
-oCRs62EHV9/3NwLkJyYl//5IBNcHEaPMEABSQo+xznPmPuSDeyFN4iNnog5hVlzG
-fJ6veTkMwX5pCsy5gIZaE1EOZQnNI6NiMLUCR3rLK7jIoHOC3E4wcoMOtNudZJka
-9deR9tNtmj0inqdeigCnf4kBIgQQAQIADAUCT69e5wUDABJ1AAAKCRCXELibylet
-fJmhB/9OnDuEi/eLAat8EWHqPODQS3AKNkRp+U9CHUk/yxHdGn4Y8/Khhgfj2VIC
-+2zQzXkWFxvZWBuBrQ9BGglKdzxkhi3iT/boMYNJZ6MBHHnGXhxSlBRsGq8g33C1
-fgEeSriV6q7LtF8iTfQ265gzzr2gsVwfMi5UKL2/ZkSuk64UVgx7WOvNaKRTIRZY
-MkjLh7RyW4HQS0E2rBbp1bIfOSn9yJBowCIgzTJ/HIIU/uxbWdN1Gajq4phfqTFb
-GVtABotes1TZPu1QCsaFew+NuG1g32R6NqDJhRA84CLMyuxehqQIBhiZIVI8U9ZF
-j7PwE8tDPiCfEZqWk0MsTvUQzOaEiQEiBBABAgAMBQJPwSreBQMAEnUAAAoJEJcQ
-uJvKV618apkH/19wuX2URSyAVNlrdNoZpQVaaAUMb5GKfe3Kgph53hkjaELR6iTT
-jZbXH+1GGv4k0p8hAARmIrHavynu5rcto9Q6CLtp6uLX6yIekSK3cz6QQyF0+Zjq
-aHYKZD5bfsxKd2qL7F7PYCn9Av9lUHUh70lexGp0g/WkPz6ZgoiOeNpKDkfC3kEq
-wUTl9evf2mfzV0ZdruVz/0iYT30sMTb8EZ1ER8bkk6Pv0g/lkAO13eaQqR3IgCWO
-XauKE4l5UGsDjDpywimlRnm1FpcYP9GCy8WWQgl0fIgu9qW1qsTeztlaTj+OYrOR
-e36fh0JGlJWu2UUSd2+PcsmBes+a1ocozEeJASIEEAECAAwFAk/S9/IFAwASdQAA
-CgkQlxC4m8pXrXyXmgf/d/JSWli721m/PX8M9aRfD93wWyS3IV+09fTHwptxixgC
-GJvQKRkvm2tF4L1jwsbipeaGo3UbCfoD0CkBy8wQU57QyOQn2vqPzguy8F8yl6oG
-Em0akfhaVgn4Z2ImLrsdVIsMEcG/X1FI3YTk9Cfkr+GANCqpsgsjufo/e5VQdPqv
-oq5OZGL/ROo8af0372qLqPbzZKIYGQVXWPjKdaG/4o3RuHG2/Aa39MwH9IvjnzKW
-42OMadT057uHvvQBgeb6tpeFn5h+k5YxfeN7exI5xfssMWyK9lKW6gRcAKvmInAQ
-l3xF0vXT2a2WTA4Tj8LX3H5lqwFbB9pp2ocwrm9e+okBIgQQAQIADAUCT+BO9gUD
-ABJ1AAAKCRCXELibyletfGRMCADJLFF037KlTMgFs692twQfMzBfwGWFbmyYx3ey
-VJKLS02Nr42rhgyd7Is7n/4D/f+0Pdq7yMinBXgxX2LJ1PiOpqeYsNtV9W2uva+K
-tZO+2dxlAn3tX4dtzU2QHurMsoiiqt4EZCmejuQCGe0Ih2eOT77oxsmJM+2q6aOG
-B9QBot+EIBJK0ua6pFdDpbu+IQGbFHDgnG8/UzWE+L7cMfLaAtXcaOjriTjHufov
-d6yU/VfDVW4gBZa/qcNcCyipEFORE1Vn4Udjg6nw4fzw35AR0/+w9L0LMoAmWP0S
-JqP0/E60mBJjrMdPy13OPMrS8FUfX7UR3xvxBlZu7i9pTKBaiQEiBBABAgAMBQJP
-8fIDBQMAEnUAAAoJEJcQuJvKV618B9YH/1j83rDFwH4VQcP8hVSlDTAhAvtLUrda
-RjwUSjtrfrrsYk/DZUZaRly457FFC9OmqobDepWTeE4UslBSYT6SzghBmWrVzVU6
-QaoH2gkgX3tZcaHGjtz1NnVWlDR2vdDu84R7QN82yIRN7STVo1JEUg0T+xyvnWwk
-9zFxGZYl8FFbP774ibHaHwbzpokcoLQ/ubgbumfY6WC/2PY2BDHO3BB/WapyvGi1
-Y88bw/A8fiAdhHDd4dJo/fBAYjPBvg2B6WuhHWEDJzut0G5wqWNNw8a8sPPnljz+
-g2wMhpjn+JwO5UX0A/CypT2wqa/OwP8ccoHIVI68aO+CiKAEL6oj3j+JASIEEAEC
-AAwFAlADFocFAwASdQAACgkQlxC4m8pXrXxHMwgAl8RPAPJiAAv4XRvj/T+bzdIu
-L7D9iTG6L0+pq6j/5juVDeyp77S3RVLpz05LvwntJnivZR4xEn07PqBd122FA46x
-+xL+uN32OkxOqx68W2m/+loRcsZMGamnIqWwYxiWwMcqOkGWkktHaT1Ue0okruNg
-Bp5VxzZ2e7x4GqEntK2ZvFPTRlM526jYfC90kf46eVt5xic9RjOHZlLElmXsXZ2o
-Wg47QX4OZPTXHyLL5OnkhM2GtvC5thLO8neybY37R9Curbe2e4qM0dYSuKpb5Eiq
-pGC6iWNx4yyqA8x4M07/1Z7qviiX4sqBW6jNgketgHaOL3jLGzsxmpybN74M/IkC
-IgQTAQIADAUCUBbtaQWDB4YfgAAKCRAzO+avbayZGOxID/0UQyNVKuu7ddkp/2/z
-Dv5otzfe3KzILReV64PgMhL+fBHcSJxaBXh1hBUSvqrP+o+ogDp9IHREG0n3iePE
-FuVDBB/bRoQa75TjY2PUrsuIZporWTBM5mA8kTXb63Ir4tW+mQeZs9kPYQukmpud
-FPe4M3av4uRHZjUIHiWDEt1j21wxH+WncAQDoBgxCcOTidSc2Yf50VWhFblVyN7o
-4/fc7kpWT0R+VoV5dVFXaqJTcX0hC5QdJCAhl28ZVcFKoA9NTNEUZwEEiwO+VCYh
-yPtKbTLswe42p5d23UrF2QpZDMY9C5YxMbHjhtOAHyauPWEscFHDl13aUJEIgORB
-1y4I4RBhHDKZ3TVZo+XHYI8NNqgeCAfrnjk+g/aL2KqtqdNnTFybbjI+SGK786zD
-a9/wVh1RjebL4YcUCOPQxQ6QQ6I3y+RuSg2kPtPqQ4eaPQqTma1oYfBkQOzB0ffR
-aKLBceqy25UHB4/pT1nZDOGyD3TxcC+pk1aoRDg5FvG9cr+e/xWLISWCLScyH6Ae
-ayUTYYX9WZM6tV9wef1O7YZiR00nroSaiM33iIz4Gv9Andcb3Xzz7mdOAc9l/6MX
-BzYRZf+kOpcFFVYyI9giu/I1PDlY7XAjKc7k77618finer2R8gkXNQNnoJ9MPjLS
-xrsonBx+la1SXje4dwr2BKpsE4kBIgQQAQIADAUCUBTi/AUDABJ1AAAKCRCXELib
-yletfMkSCAC35OwCGdAFPCbZaoGLJ7oQKC4W71mBqm/keuDHUViwNYKNXdNvap3o
-om52BKBosdaBkWAqfs+JaDCTnc+Wvm6OJDzJQlOJ3BnEla9A0vfxwb/Olgrq0USA
-krsfILbk4/9CmHqywPrJrZHrnNkSFI4WQ+j9lfzBRvbkAJv+lWk0dnzkVNd2WICY
-FOVN0QhSQs9YATF5WIdVSTlUvBUba6N/h8baC0FCiSlJOnDJK3J5U9q3jRetqca4
-R6D/m+2/DjfyTUbH3709WyPI6i35p5mYr2/LZMkpOXtFDulqJ87W2u4jXQukY6oV
-dvJuGyoYwo6EndQsP0QzRUInriIYQRcdiQEiBBABAgAMBQJRPYdHBQMAEnUAAAoJ
-EJcQuJvKV618u9AIAMqSmkb4yvPh+DdAwdPXXFWGi9MDSGIl5KRyN7dvYXiI8N7U
-k/ejMghodFSUouiWIDS/9OV0/7nSTkIM1Y7FJTYqYwdtM0vmNuXAFFce0DAe9W0f
-az0+Avep7bWid2DTRGr3KxDaVD+HAMroBEw5Eg16Y9EHg+AKaaZB1dt0UQ8hKMV+
-VdjwGq0fg52qFaSjC5jzqhSF+lYO0uK70hXQ2IvlkJzIjfvRdyS2G70BXUmq8bOU
-28SnUvBgcXFh6LO0CE7hQidmbji+6YtvyKVV4Y/OycQGR/i/iMwHPSm6COFP+be5
-hczBLZkkLs48o+GJveUPd1wP1jP/2UI4xyGjJoWJAhwEEAECAAYFAlG8aigACgkQ
-wBMwnW1+RFxiTxAAtYiUBsEh34QYP/0JdK+zMk8JSc7chN9IQLGvmdMlvzJKe+2a
-JWMUnNMSUGRFguNvLmsnkiRzZ4TlfJH0pzsxxo4z+snlybRrE+vxnjwSeVrSYwUF
-7SdI8AAzaRSv9j5PRcGpZSFEcik+mlNbQEUebc01djAGCGWBYPAFQkrrk4FwrE0h
-hQ5utaHLM5UWPsH87OAbsSG1TIJ6yksdEqluCAtx3jk8oTT4gbYLK0VMB2hRJPtY
-23sU+fHRPYbxtiuxORQCUHkdhqLVLkZUGKItWRD1fqEofsYwZVQLs4oA/+DMOCYo
-ig/KBJPPyQN9KGHS4VB9EvKw1oWdfu8lMuFn24JPSnOsGXz/e5UYtT7/jh/Gw4oS
-KKNNo2gLRG8iSbW2MsP6exjDRUbSuD8oBNUHJNvTDnQfqjAEAu20tbiYF7KQ0Yg0
-iHdSB0w8BY+pEEiAbT29OgmF7QpP2zboExyJUwdQBPLQHQkzo0VeZUcErdPLsRGR
-YkwCfNZzKkME8B0UVdr08iUN33uGgZuVtdRyiPQBcGoCAx92fqE0aRjBGB2J4fUJ
-kC/FQEJmpC2qIGX8FzWIUMzKqImHw2VsB21+j66qi+thf8snh41pY61rzTjrjJam
-kWeAeYUjk1+VA2/DZPgbisoNmrI05Teg7hp+8KAoK+dTAXJsEPQx/o1TH+CJAjcE
-EwEKACEFAkvGviICGwMFCwkIBwMFFQoJCAsFFgIDAQACHgECF4AACgkQx0bPqedP
-pLAOLxAAl9h4Hfz9hUDOArRUZlQtfasfyVTyp/6lQkm+x8U78dMVrwegg+3WVTEL
-t/czqffAy4oQ5tmI5/iuxYfWp5naPpiXBE2berJuAVgIZPA/NMSwFFCo/wjRkVeX
-6FOLfJd+hYjhduZH7dVonFFm9HJiXKnhp4q55fsTQ+QzszGsOt29gSIvYhz4S+Ro
-LW0sERDLOhY7+VfwbaH2B0WB5+7gIATM4vuDONgdy45oFjBqEqJXwCYxF1t0ivxq
-w4Y7wUumSWJWfOXff8zVPiIsxScbkbqXK1/9nkJEsnkt3WfwrUL0Ssu0ydl55eRz
-QfSAdipFjZOvnQvzVaVOwFoY7k/x4KjlGT+UhNkVakNNSNoycDOLK4LBFBng6puY
-PU4wxXxj2NV0/oAHDc+r9oqEY+VLmqVuIWCjnklZTjvZejXfHfJqooVIkPCh21YJ
-VUTW68oJqZ6gGvZ3xdgGMZdtC/MK+DsgvG3e0SgYdj3+qU8cqb4/+Nl0Iw7kV8mr
-IivDWLki1fpx2GVQGroehy+GzH0KugFlp1H2H/CR+vWKxPSewaGCAgeZdsDGRTR0
-eybfMoQq4rMbfD/OOwtP+LYZ6ubwyMZBQ9rDQLj0zyqshyWVpgoeVKkZrV0UY1Im
-6MbZ/6zUkjIQiDC40gZRnA8zSAlRv2cumkJbw7TSrakpUtJ+8NeJASIEEAECAAwF
-AlN5CDwFAwASdQAACgkQlxC4m8pXrXwQxwf/RflBC7yFR51GsDDUJR4i1YNpkziH
-FL2iu24Bo/JVGxUczp3ubEW/dYILyiu+uk735ul+j87vkmqJxHuwXr7F9jJXsxf1
-bKDeOKR09E3tMnFS8Z1XYvMyCfyOkyhEwuY9XPKg9+xRCzoA5ITUIWzyKnm19c5Z
-rAbge0v/LlZbktMDgKCU7y6+5CkIzb9Tw3JjrZU1UQPkJM7xNBjgAHLKCmUoeL3h
-bKWlQ3osOEU60YnGlm4fxEaUo1++7RVIBRPyWWWxcNGeFGwo8lvVhGCBKnQMjwnv
-LuBSEA9MIDZUwe0y45fdq48rOmq5SIb8NOL6LQKX8WIRfcZFzJ/16PIhB4kBIgQQ
-AQIADAUCVU+vrwUDABJ1AAAKCRCXELibyletfPjIB/wOIBgx9CJCM61h00csq8gq
-D07N+ylhbrFkV1TuNAxaQbyQPXLXGIhzBOhR5RPZ036gh0ubDnJeSfgr9RHbLHBQ
-riGQw5RYfLDJp67ny5SlwOpF1qOC5l8yiS3oodvzInAy9K7mNtluvGPYUOZGQNcJ
-cJDx3Hnug4GGjvNCKK2gw8wGzSenyXb+SVgr4xzKFNg14j8ubFEqEMfk3Ke8hE94
-Jo1LQjSPUZ/rKGauuGJUva6cLBIoexYKZEYiW3ExjWRecEDzeEnZH37U/GInUVe0
-9tqlPzRi4dJ4TFwFxpz/oRUVGcS63IpZkU8WjWtgejOpjyvP1FXn9eM2H8so70Nl
-iQEiBBABAgAMBQJTitUaBQMAEnUAAAoJEJcQuJvKV618V6UH/i1Gk2smROFkyBT9
-S3EUI089ZJc0UdxZm3FAvOWNkna8Rn5FPTVofQIrYwpYGa6uAaMmcoLR0+4FVb19
-cs3yVrCorKYh3+End8nYUutFVH38qEQit3luS5H06FZKxOGEisttNS0ExxD4V4o0
-bWIf03d7oRVlfCMpfSNEnGzfWwPvJfNoz2uxWTOI8VlBMIV/fusb5SxfT1jHy5td
-mqc0QDAcxIzMIODnmovw6o8AT+KanUnmfqeHMrTQlSyVO0n29ad5KVyprXqcH88f
-ihrPhOxutiKQsc/YzIuYbcKlJnDSe5vYF9z0TNR8TlvI6p8iVjHsZYKG/andrJYh
-kthTVhSJASIEEAECAAwFAlXFA/UFAwASdQAACgkQlxC4m8pXrXyqQwf9FtbJb11t
-uccu9TzpRtzTGDBjyzY26XQxKHv6u+gL9O5L0XuOBaZxV6gugl0VbeeK6g2x436u
-FyHimn9bbXIGSLRcHrLYbdNlAArpL/Ww+ANlySBPZN/IWujV39cDTkUu1yOVnA3c
-YEDck7ByuLnmIX5I7ZGHL4JrX2f4js96t/EmTzhrQdRC6lBraprgAqHP7dXfOtzA
-LamLMs7759Jqc+UEGlJfACuPq8FGMhp+6l74agiwQX7y/TO+zE5I8ZdeOpdOJBdp
-2o550v/eroGLzgeSzJjNrhlUVkVL0SngTIOlOW1/l/kSMY8ovJqDKXsz4KsV1TFu
-6qdFt719TaXjcYkCHAQQAQIABgUCVesKnAAKCRBrSWZYlD+rIEHrEACFdwn7yCtl
-iSDuf/DgEjLrWSmMVkzWZEfG3ImRFzGorAf016fBHI5y2skOFxDqss1oy5exWWLB
-5U4jQ7S0iKvmzkJoXkcqZbuO5VSOOG/LgGMMkLWnxh3eSXG5fQ/ifKKM0pJzmLn5
-ZgkPRxulAopZuAXyU7Yc/RUd9ZAGmfvcx2B66v0QimJuPcQDB4kQVI2I5+aipgj3
-3YfvSHWyjQu3Wv5gn3r/ieXPlrP8zlgX/k6A/362K3B5pvzbXuBM/9pKbF+Ne0iE
-wE/y5TNdBGH2pe050RrjlCtNOMOA8rR8pDmZOkUDWFWTx8YX64U++tCwX+8S+Wcz
-BJMdQZoWXIx5kuQ6YuZI0Ih1E8Cc2SxiilkyFcxlg1ZV1WyWCGvB2g+D7X0GizUd
-s5piQPcixdAPmie+JSmUwhuqkS3NLwjfmhe6/5QBkZ2XlajQunRWz8kw8fwIOZRP
-4GzMMMbYkyX3JM4V2O2j2QiDfuA6eZ2ftBRISFGD04qmr7Dky3JFcQNox+gp3mVF
-104nY0xUP8mO6FR3lkJw13uNIbSHcQ+tj4YVOHI+Cr3UciYDxAjCWAYVA3DFUjIB
-dykl4XQ8o8gnoGTy2f3v8De4dFNnmRD+6YYIAqLjkT1Qn0bgnMmNqrKnljqu8u3z
-Nm4xP+isCHWe5ZxsJ3MKVP4vxA6fdmLQ4IkCPQQTAQoAJwIbAwULCQgHAwUVCgkI
-CwUWAgMBAAIeAQIXgAUCUkNlPAUJCkElzgAKCRDHRs+p50+ksE9VD/4kxL+YaWXO
-gi0vEKcJ9nVeSQMbZIy+krLPxPi39tWzA0sjCnuu89CHFPOncsFczaMnY8szLAPT
-nGt52pzYsp3llCm7F8py/A45DbhyakrLo1YOIJW+UQcyQ9UOfSDskl60Pziinrfm
-3QM/arP+oRl/4oOmzi2kSdacLJyV6ZNttf1QY6HhJVhUz3MMKa6aJ/XYXIotN6AJ
-RtP0XuUwJaPLu0xj3I3hjHyS0+heoBkb0E1ItuyxuMY8RtIcJbZ54JiIhLoSKV6Z
-lgAhY+r5Lfui+kpRyRyteYhFPdig3LE6qUYHOOTVx5OICBs4i4D5DljpwcR+XhID
-xEE6mLIyp6OAW9TYx/g7t+oGEwAkNinQsyQlUueNR2UHkIKQ1srsaxP/PFtCpoQU
-vXtli5MvYEZD7wB9wUaMnctfTIQK4SLQtvAuJuItXV+G5qE2Ufm8v8JVvdg47ciq
-4UDhF3qVhSHZI2auUbqW0uE9W8WaDR7hREkjGe0lpltl58qFXs6H4r3+X6Tvw/1+
-W3+rq3X/QgW5IpMI3AFZTuishnrtEkZh66esNbQ7kKVQFL+nGUs3NrzTdreP2+6k
-Xp0hQVgMu1C9OHkI7t7bG7FNfH9gKx8lKdJiPRIXhJruw3fBkDeAEjTrxKB/LEhk
-2PelYGxu0no9i59E5WGaVDzKAvc26Kh7JYkBIgQQAQIADAUCVtnwlgUDABJ1AAAK
-CRCXELibyletfJuiCAC0ogdwTH8h37DS9uF2BeeZ2wzg83RmiwzlW5dEUb2BSYUj
-yyNG1n0FruTn6dJx5J8EPXtbbC0r0vLD3rhMH/AcpRwBJwjYmA+9pylT2M6UpGfS
-mBFQ7lPD5+lThsM44+Kd+Gtq8reT5n/2EJ67uwj0PF6Um6TKSeJgzYZMuW6rQCfs
-PIcUxyhyoQcr+OQ8OEpMoQ6aVeImCymetzWLcz2AuOEzI7re1wIM1VR7Pu1aryoU
-z3bYMwPgQMAJKWsfy9SzLoxjklnwYXTF/qhIOd4pDlG01kBPTnCiTWOfQlCtyNiY
-3fe9ZKMHEHvbf92+pZAp2NedR+vGKpb7ddQLoIF3iQEhBBABAgAMBQJYieUVBQMA
-EnUAAAoJEJcQuJvKV6181BgH92pMjoiDOMZgERFC0g3rt246FJGeyiJxF5ziR6k3
-M7XICbgf/lLtheZyps+VthOME4nV2ZECZMw01qmRTiLJacQJnKSmQRI1RtIGCPyx
-Pss9HpPb5AwJZ/VnSP91G2YITkDtBlYMZuiIrpnED2pNGVi3YDAwQtj7ulPIf73d
-fcba/hsRmwqhcjI5EE+FHxDOnsCxNCALsl0qbBSm6o+22Hb/PHKBIMrldM7Agy/g
-xktPKEDaQdCcnfke1F2lFOXyoCBpHkRaAtTWskiVK6S2n0q0AIpKw/s3+ccPvuRP
-wx6GHsWrCeL6UWwU4nqMIg58J6FgzMqmUVgpy+jZN1eHgokBIgQQAQIADAUCV6cj
-FAUDABJ1AAAKCRCXELibyletfATKCACEiYC6YvpRT8+8b9SF3RN4uRRa3ld9bY5U
-UaQrn2yyJyOA4aqQitULPgJw7w2X3wOtX7gw7KA54t/6xQ5NkUPqIIgE3viF2ozT
-o9AXYd1K9TyNXLC7/BDgR/yTzLcaLIEX0IjYb4djNp05yqpqljClo0zJyPfen4E4
-F8JMdOVv2UDusbD/RrINOHExils9HqU1qgVn0qNe0Sf0Fpb+kZY97aixSKHCukj3
-3z9bftNy+NpCOBOkfGH2978RdKFmSKpwD7a2asapblWEuyWOTSMSDa/BJ2OeQyui
-5Ulhwvi4H7cLyqW7+4OnUEBxZKQ04/VJRGK+MqQ43+AqCfsiUrQ/iQEiBBABAgAM
-BQJXuEgbBQMAEnUAAAoJEJcQuJvKV618shYIAMUtThzpGNSz8PKWyXr0oPXTg/Uw
-vXcw2XTU1DlTOtIgq9/b8H8zgW3xyTPPWAfp6BYXfNo0DtxepOmYyj6EyYy5aCub
-hy1cnJtV7MdWq1vcAJnSEk5xaLRFhYZp54Hr19U/kS8wYcn9LQwDJxUeVVnVfiAH
-2DZPAa/RstsXk3E9jYNxCVF9FcI/A4IQZ3qV741iHxCkmUTFSSVzarDcpIa/jI5y
-znQDolMSxnVnrsY4SPi0jQcetwPdghKL7KRcWMGfjYHFUdYmksL1s8dtcRtL0/LG
-byVePq6txRIupOzSW6fGuqtIWn5wGs3065afYr/1KRMfJkUuFUUScMQ99XCJASIE
-EAECAAwFAlfKEugFAwASdQAACgkQlxC4m8pXrXynwwgArqCXeDKhFSzjlXSPCFAc
-BzicjUo9VN7fjoUVA2aQzEvO2MnC1t1+igo6UrdcJC5XeCqhOc1WLls8RE8dv6xM
-RlocB/b0MDoRYykfmTwuGhfAF7on5zqgnqn/hBeLo9k2xL8y72IbeFX/avnuOP9w
-3+1HMiGuSXZbkdURbVCg3Guv1rHZ69uY++4BChBraCCDUVxrVAGWA+iYX4hJUcdJ
-A/gPTWl++CGpj+KQdOOwe1Bo2WED63+KQZ/ZnjFoGKaJfkqcPLlHtJVkWpFwSmd+
-RKr2wGfMEbu/fXoYrhqyqJigwgrp+P7qCZmzetgT5oj6cOTbqVC/TvnJaYPR1vKZ
-0YkBIgQQAQIADAUCV9vfJgUDABJ1AAAKCRCXELibyletfBmSCAC3p063gnrzjaIg
-CeQgFMqCd/UhM3bcNeKQnc+tJBNRZPhgL+mFh17p9PD5k4umNQ1zPXdi1YSIq+hF
-KoTNCkVIq6QtStlbHzlQjRObyQkz0FGBreMYlwoN2LV7JqrNo+4BQuKcBb8BPuz9
-l0O8aWgIqUthCwvoBvXSP4JSL5aa6Ig/qzrAaXImnpa0OfiVQtDRt/JUtgVdUOAR
-PKOr2bHD6Mlmz7Yl9rwjPR+I1TDxeAgx2QhCY8Sh9789qlBliB1P7gKSgVRwWfzj
-2gLYB6/KpbK3HkJbv/Mf6UHLSpEIEmurgazN3ITt5Q+0vJEvoSl2nknYG572UDn3
-CCs899UPiQEiBBABAgAMBQJX7QKrBQMAEnUAAAoJEJcQuJvKV618ZboH/A7odWwa
-Nw7541twbpOR4yAMNxJbBd+nilyVTqcztYjz+qMytiykVEKfRdn5UNGTkMjbfqu3
-GxeUHzUtz0FYj33DNlfzmqEEkeZ3KjpBV8D3P7iNAwJ8udItz47SxOJEgWyy6Sk1
-/EvMVNdL77wtFiyk/NeDHKdvchKlUtt7nRMy++uF5x4wgOt8jedyAnU7ZaTnS+JM
-2W2h0Mc5UHxzasrYNCQZn+42nNoYJaT5eFWLbhznooV3iiSeUrs+ZOB5t9+5KW3h
-HNy/5Vea07IUxqKmDfgH3M/kKGqJIeS1ygOHTg2KbpQNo7iwPJfQRrWn6l6HO7JR
-Rv1VOAluI+Sd472JASIEEAECAAwFAlf+JjgFAwASdQAACgkQlxC4m8pXrXzWDAf/
-WI7fqvy+SrEsSyiTesPLYKLQABRzO4oQyElJSX8vMBocJMExNqXALmh+ZbxVQwoW
-0pDQ57auYPe3lfOLMBRcwX7Pz+Un0Yey6khE9WePEWWXRza8jpzqmms2JyPXrr9w
-zNR2xvFbBSZMmCkzUOAdDnA4A/GIulj/7Qd3xUZp92Q3U/7O28lYLyvKGeVPnsJn
-2SWGkBUcQYaZ6T7jwOT3n/DTYcJ5vYOMbZWcwDKiRjZ6wkbuu6kNYHF2Sf/ssM3o
-pc91DzAV4ogE8fhneTzi0k2us76QIMXkOGqnzH5xieHAIwesIC3HKMD11P+l+OSL
-k6aPTW/u9CYxRW7V4S+bBYkBIgQQAQIADAUCWA/yaAUDABJ1AAAKCRCXELibylet
-fAMBB/9avmfh+Gp46hN4woZPc2hQ5XZMyTwsXWFQZayaTWvGuKsPPDQbJLCxA+Ox
-Ck3zt1ZO0oQOuB+ziumbOo/1HBkscoaOX3IEntMqDuc2GVo41BWqzEzK2ddf9qTX
-p+b0N5g6ctO12ORBkEv38wwxG2UGMnoVC1XVNUGeA+QEtmq5zwde5UnIHrwjbub4
-DOQscF0zpGcSHscAqQCGU7lcH9x3fSaXcrMx+uC3R/Rs/XO3t8f3oSpEROz9fZSQ
-KHSuTLQ4DyxwF5vU5VY6pEY03r2yxofU43UgeJUrkldaKvw4NFpKxXyp2IldVfy/
-GjBWdAUcU7kV8c5a/y3CyUu2N43ViQEiBBABAgAMBQJYIVxVBQMAEnUAAAoJEJcQ
-uJvKV618ZXIH/11AHICPlZUDw/QVUoj+Jx4r+hU126K95PD5YJEMa8a5f7PZGi3D
-L0qSWpVbncKNzAJ2GNRMVmxjRFwvzfOzB5DJ87VgNPcMYa0OiJZI8kgajkKBahDK
-PRO+rav/NDI+vBF2NmTSXXghxCKbLTBmsZCUrR8wDP01rbEkE1w2+b+S7GW+4Kwd
-mvSlm/+pin1MGdQ0HWqO8qtK9Hlnzfkn6FGhV1BRN+w/xedt+qez9shJB4SrMC6J
-KpkfEtY55v2L0APw1YtzMzquWlYTekAhbBHH4fIvXzYPeJ2Xs9KsqhO6MYi7x4bC
-qpDx+ngEC6lWtHAXUGQHJFC27qwgsgkSEKeJASIEEAECAAwFAlgy4rsFAwASdQAA
-CgkQlxC4m8pXrXxdRgf/SiTfxwZqMTfeCdelIlQuQpPduPY/6wb1rjymnEVZOf8p
-dm21HJDW4atYX4tpm3tiOxVpAmKlB9NhyfRsLpEvtaecnxGLjItV9Bys1syF3Yv+
-xLWkEAUyBzZ27y5xVftNtqbo8U99JgQ6UtUKV7p5LjU6d2pGxsYjzBi2LkPRfbLL
-Q3emNumXgAY9VVzt9OF8pm6TDlLOPqBfX44xkAKBVJW6ZdExT5XZtbopIz3Q6Yel
-0bJGPUam3mda0mk8kl/d+KwqTFrHHESNL8x//QRTS3F6aNIF6IlU53WS+XLWFIzu
-PWgittHajv/y/NYlPh6sULknP274jZiRxnWH26dkn4kBIgQQAQIADAUCWEQHLgUD
-ABJ1AAAKCRCXELibyletfCufCACT/uwPLmYrEXEOddHkALgksLl8V8k6ML+Soj1T
-l+B87r+S4d2QOQwyqpT+0C5I+MNpuLG/RL9UgMWA7ZNvACL1yWo2yydIBPDFhwpU
-44OMAprc2ogZdqWDaIFoa5zzwI3J6kAAiFxgO0fDMBCiSza/BIUo/QiLPaoiPu8s
-3mWrVy+2NtqiKor5W4Hf8mx7lfzbdMoqbNlNkkrOEM3O4fgYHUD8eyth57XIYyQ+
-AaYlPNEcm7z4dJImuuoT9w27ZJMZSsa/pahGPoN6H5Kzflvn+JVJNiUyrdqG9kON
-qR6mT9npL3q6zrt//m3x/Mw9Nmygz3hp5L5IQPmDFRGugxxXiQEiBBABAgAMBQJY
-ZvVGBQMAEnUAAAoJEJcQuJvKV618tLYH/0CIl63GWciT4ZoXSsvGRkAtwX5nDSi1
-UXbiowXmrEMwMvqMeS9S1QsaPWcE1kpw+kt3j7ftmJMRIYpTj03mISZQmdtG0h09
-84EhCsi0CuYUn1Tz8NDifgkoPExLsEfpJP7Dxd8Vl98H7duz2pnYD+2dcPc7YUw1
-dLXHtbY7sI84WiJ+3arR68VDKTpgVQC3kRalwSOa4zF4wzL83v9+RToW1IQg5xk6
-hD+gkMxgcHZ+08OUjgFsW8DehN/9Zi0P6My3kcoPuAKsKGrB+KhXVFimhD3g8f5p
-tdzdZfDkBdrtPLAz8gFulJ8s0gcPteLqBIRQebpM+zUyjl+8xgHtO4aJASIEEAEC
-AAwFAlh4GM0FAwASdQAACgkQlxC4m8pXrXyjvwgAyoTxSdqv/JSRhoVNybvW+U7U
-wQoXvTdiA8iBiCpNNTq3hBZeikgE65Pk8fexa/DaTjC1DlBfItF67fkyt8zafzGa
-5HwF+ZHBDs/V8/dwcYh2tCPzsFrmdbmTW2Jn9OuX2Cbz7lvS2WOHj3FUDyhuW9Fk
-UV08qN/1yhANh9E6EqicKn/if7lp9rYTWQyt4zVgYSNdUJJKe/4MEPrcjgrdrdO3
-kkbO3YyjebGEpFCF99b2yuAl7aJQNkuno1JtSlFmpLPH5VkEuXpCM8hRtnW8RSrt
-N+Au+jqNZLVKnHEyEky9maqMdFgQ9TqPsZzJace6a5kuzDGJrDnvrFI6l2wlz4kB
-IgQQAQIADAUCWJsIoAUDABJ1AAAKCRCXELibyletfDvCCAClrYTcpygo3kmwd2TU
-9IA0al8PCP0wp4CJ632OrLm7+tUlDn9aZGD9KuCbF2x4jlXJ0iqOXtJCHBbqJxSz
-anf2RsUCIsGgoYVWIMOjxnFHDAuHty88YsrTKB49ilD10YhCcfQiVv2joP93bOwO
-feW+akiDm/hqmDmJi0tr3wniwqlbPF316S5O71rAmbWXdWs9tF9BpCEcJdcEqz73
-OP84pVY+1xNztDU+o2CDMUE1hOai5pkH9WCnHgTKatNW6B8DtBZ7ELttIxKX3Ocg
-1617UKIIlP/qJYp6LaUF5T5dbjh2GTd/knek0oKBCpALb44628mxSs18xDyRW09E
-4/+piQEiBBABAgAMBQJYrNTiBQMAEnUAAAoJEJcQuJvKV6185QQIAMmFj+KbWgO5
-NIK1L55Iyhv0EnIqB8mQAvmlIJJcH6Ya/g0P9qcfaJbv+QHa+kCu/V3hWjMANl6o
-k1vvBtsI10rQul3HTKfcZbWSSu7qHYNYsv3ns9jMYVXYMZjBuvSEIyxRtI9BbPU0
-uPDriS38aaZ/l49N/JE5lc3psb8VdNfUgCDGidyPNPEpCt7KDSxEPsgmP2Z1je2V
-Cb7PrhDm+DaNPSUYrT37WUwNwtmeZq6+twOG5z91QSKPGepC8ivSVnJPBgcwRRQ0
-MjgG9yCgrlzdi0ou/ug285NW/C3OjhvItnVN8IrgZCdexqKPSy3RDPawm7WEji/v
-PS/uivGZY1uJAhwEEAEIAAYFAlfi4cUACgkQaqahMzLICpxbhBAAl9QJe0iuhnNx
-Tb1TIdc3ZEKFHkc0LGUbC2CWchl94kQw0eUVSTTxP0rpuRzOzAE0uhqZyQurZdMW
-fSJDDhPjvCzQSWIflX/MUOAdaz6Ua8YlHJDQZjbrT/y8j63IRnjHpiXQNCbTp5dr
-WJLuHZmjQNMtvh6Ud72d23dvrxyJJWdtdVVw2fCdyBBhj6qLGTYHbIeA+htjC+7a
-VyYS/dvGHrJ7r44EIYFM6mbW1Lp+ycfUvKqE/8zTAVX3/xJDlVBz2MX/8E65+Q6y
-FLAbmQ7MPXmLm9OfNjS56tr07XotIp/e6M7nk4DwaKYqup1AR7mUe15pnQ5OBvQC
-VP0Yec6+PMpuNRgcnGiYGSclW/K7PDrawiPrVsRAOcNclAkKKUYfY6Ufa07jCub0
-D6kIeOXhuGKLwjnuRbmy4FiZ//ILbp/12LzO22wSrre+pGzLZuV1LtANoucxeew1
-llNZekjq5I0eHIlxYPkd4pu0yUEYbVLkmWx6K6tuL/VIcPK42H/WVms+K9XyUeq8
-yA3Ld7/2RobFIzY17jmfvXAocreSw1Um5aCskbm5Yy0DmIJ+qg702wbTR4bUSnqH
-GY24c3ylgr52pRUEK78HtUIiUjVCNOBdepTNiVP8+auiItgSjnENGdG5Bb0GdDqF
-gzNJl4GGDJglv78zOSoq2P7M/P20M2SJAj0EEwEKACcCGwMFCwkIBwMFFQoJCAsF
-FgIDAQACHgECF4AFAlXqhPwFCQ3oRZIACgkQx0bPqedPpLDsQg//bZVI3adBLpwj
-hSdtp5a+MIKmZCacj5gpgmTZ3c5iennIfjlr+3tSqpAsZ2Par0fFKdionQ21tf7T
-NyIZLmg/1GiMXK18NXGPju88QnPI8aOWzDAIgk4fsg5P7Y/cJj5nRTw6LmkEWcWc
-7g52AC/gpeqZliNp0whqBSTH+L4TZxaK53Ow2Jahu9O6fdQLYln5Dp2xfAuTdi/w
-pSTF4n4Y8x/r5zVi1DUJUF/Eu9gR/Pi0iV4psBo8PyRQvTbaynZrWWFupGif1rMJ
-JIS1fDueEjWD1Omm15ytp4SqqAyWttcNsFzgzLKxD7fzaYm8bFpQRdzMpN1TiQ1A
-YiggiEl78egxAlvQzvUen9sOnT+cDlZcbHUgFppJxjMAxjrqy3wxdpbIVvVGhUPF
-If2zRT5FJLaysYgUu8rsSQ+X3FyNGcm8DB4P1nMPywSPqvvxmwnRHy/81Pevnqhx
-M/8bAyzvtLE0mto4tX7wkAHwLh4edIuES3K2J29F+itW3P4ion1tHsu7iYmQEvom
-1tZ5n8OlpOW8QM7FaETiaahIv1Twje48p6yyOKUS2KJTELeIgSkmpMecpOJAcSFC
-NXRzurKFLyK1MWyewp3sgsjKqcUsioqPJWDkNeRFGft4qZiek3z6iY0DC0qbL9U5
-XhaH8F8xBFe157qUOK4CzBGRqgkAmZCJAlQEEwEKAD4CGwMFCwkIBwMFFQoJCAsF
-FgIDAQACHgECF4AWIQT2gs3MOdwP6uEWILbHRs+p50+ksAUCWa/zhAUJD8yAmgAK
-CRDHRs+p50+ksIIkD/9tN1bleftY/9ejAnWlhxPdACB73kb+mUqvYI9waNxx8p3W
-mP8U7EwZe9RGPxtyKOyW/dqITohcm1PRTRPWZ76oy3EaCoZfy2A80SUh0RidSG74
-kLRx3DoLr3ULnGaOc0Mp82/3KNOIc27C0WVO8do3DAYxlEWtw0TqCa/3pPK8AoPE
-hYw9DoS1ORFBYXbTG+y6qVD1Dm3WXv985HQkkNBGUOCli9Rv+ZfwXN2lDec64rn6
-SwkQb+dfz/lIetV/o52fkgN99j0+TZoADFMZuHKQAU2G2gxwKR6w77bXvomhYpqp
-x0Z6C/wMkCHSboRRNRUKqU6oxeagBruvTKgmOeYyuBdbMA2Ny2aHvCats2lsTT4l
-xSpLyZFSQl7IVPzqzShqemXvx90ZbCezxtXuOPGezGobYp7NdAROe67Ml8J/7GbF
-kphNY9dgdEz2255AKMX/6bUe1az1ChttGxtsDiL77szFkO2gNHJvClaBBnJNYVok
-l/OpcAYi/P4Ou6N/ZPqK5DFv8fB2uYR2LLYPXIgKMdKv8w15gbbZtnra8dSJ0i5+
-pCLWVHqK6wIlof2RHZp6rUGAeKgsbPPmXa8J/LnGSu1rFaOE09A/AK88QWWYH9Px
-tt7r0ZhZaliHwhqQX09JhCqINUQDlxdxvYG2l/CcZIClKbzdkzu4NMCvRGemGokB
-HAQQAQIABgUCWninQgAKCRAD+gRj8HrzGNAdB/0VIscOtnsXQyGarAzXVfvSuPRS
-Ia3KcSOzAPG8Ab/bmaRiTDQJ0o7tRfTxHFsjyBw9sWyr3h70bxEsFzuXiVE0Ooa2
-72xGB5VMRhtI1JfN1AwXNxlVv7HTW74KV5goeWJuhmn9UJI51uoxe7dKxpkWciHu
-3SU18R++ZReHL9KqawSUa9g8t3nF2D/ctDjBAHlXSOorqx5c/OqgUsfpk4g9ydpn
-jFPqa81uX1REoOkqCASt5PfBEiwaYTFz3gfkf+e/5I/NJEOOubRvtHIKxBcp2iIG
-QlaWHccUvKJBz2GJt2BJQpI8Syf6Wr+EUOze79QC4LWJ85MvBU9xa5skO7hsiQEc
-BBABAgAGBQJaeKdCAAoJEB1uaW4k3arG0B0H/39NnPvZ7V4f11HAlx5pI0q+hjW8
-++AZeSAw9H9PyNiGFlFBxE46K2yCyuTLlaukaasWCT6U3BQ6E7FUOrDcsHFSW5sI
-UIu7lBQf9bWAL3+W1eIK1jybEFWZCGTG9Mx+cXiRBwGIbcKjYNk6c0ln3hOFkhkP
-tFP9Gos2qLsbwNG7azGXA0jDDbkWH9WJudaYT2hs/2Cvg6QRWHucKqUYmCRKNZKd
-Mr4S09lQjQBKz6/LgEsA8aZGde3smoKyEI9zSyRY64CjGCybEmmtDQqeYlKJ8Jfd
-ruEpdC66IBoxM4rGLIrrB118ZYrH7cfPiOWCEvciOVuVyvl6foOjge0n5g+JARwE
-EAECAAYFAlp4p0IACgkQVb+chhMHnZXQHQgAtO/mJ9DumhF1fEUnQsk2Q8gDTHlC
-WTlXr5Mocn8txxp0Fxbl61deVCFzHY9U4/zKLL79HUg0Q6XxiRKlIONtZ+E4QLbe
-yxwdsckLMcVYY9uun49jnMdlaeetEn3YBvbbfLxKIXlqGpavQP7tqgqGLDn1NUfY
-8pBz/u0JBM6t1EFQPPrf180ZexE0U3+a6O4cSwIF8ZJ0PZtSmBobyWCUZeJHNLFC
-vW0Pifo4aZqE3tT/wLcnEM8HnePyZH4a+pNK5I6qN3kEEZpOOCwA+f5S+0vEQ/54
-mAvlPwHILa1C73OPqdRoArBRDB9wwlBskKq+mtQtAK2ATuBbnwmKMbcM74kBHAQQ
-AQgABgUCWocbywAKCRDUK/+2HyPFvSpjCACDhFUK/98qtsw03v5H4uKljciEgVSv
-bhTGynTOCspH8ye/XVt2nuakfEy8Cgc1Xpi0DJECzL85FbnFwj4tioD0eGHB+ULb
-YxR+VEDLrD1oS8b9vowZLpiGOsBAiz8HWiVhfZbm+S6K+huv0TNvVRQ27nTi0nrK
-lNuF1LoTst9ScAoQmvirVB+zZsjV3WZMuN1FonjiDDGd9fZemw91nLJLYPqjpFY8
-uaA1vyaWjn4ULxSg1oacpfRtUgZyzwx9zwQoN1hhymWbtyuOWeKceUiVzL+S2auZ
-taXV778tKuWok2BbJFVBRihnZnEiplcy0o4WbSQ4gEe8QR2hxBuMhoEHiQGzBBAB
-CAAdFiEEx5dJCsk+2wAGFWgK/BwctoB5heYFAlqFryoACgkQ/BwctoB5heYmQAv9
-EPTTBYbFSv/UYWGgSmSQZhHqW+dn4b6garVriIPsDmi3mkQL4KW9xrezLHSPWPEh
-e+brPXy/JbK5g5EY913YpyW1hK/Ptq2KGWy3JW9sLYRnhrg+5+VmIbEI0cQd/SZL
-MxiJlh+BC5r5PqCwmP0x/SnW/uRZpdIUhAoOS4asO+5XbIUUx62b/nZ9McOpKeg5
-qG+8lf2eQpbQRS9NP3nHv/E52OBrcvMyIG30o7KKAN+ttPV6mBVTaezfGmS1WCXs
-rJkOBDFMskxxYR3X3TrVH+OmNH8/exbLAbIgKNKx9HmDiS1n6OiWRWP2dwk5qLgz
-52jHVAzzPstxrbySMIQMJdJOLJVpP+KjSxup108HU/Y1UtLVDAWTgMUWkSI85iat
-RPx+3y8FrvqwJTkyHKynHz9Uf3EBJ8gdaz2CdLVaJ4ORc2oyWgxYPlehphf/tZIz
-2dmMW6hiTKH5nFiBBPyisxGhSOLXN2vZGjX8GGVFYXJJL2uEn6uQQvX8lucaM1dJ
-iQIcBBMBCAAGBQJadzW0AAoJEBkOX2s/V8OEv1EP/js9fGLg2mgwmTm5UH991U6G
-q05F3Cqtq1K4PHZQ79j4E48gKoqdHFbU0637ItrMx3CriIrMIFZa3zPRsphPI3pi
-gTRPVbN2NzEC/pkjSQz69Upo5uEDGI+qN2Myo+ipMpag6zpnhys/CKfKaLueNnUD
-vlF5TX2/dM67sac4jth5rqLNFfljGL/2jGjMBk27VS1UO2kzS0R9JZ5LG0DvLCXy
-r37JS4W3wG7vxezKlJDw9E9dELtlvDSTZbCbWmD0VgSdBkIJjmUdOEOQg8IFmWfK
-5DlMDvOkPoV4xSTL+vvfZPJ2yRJty2uUxn6NK7iAAnJdxMTbnOjRrpqCyUmqxCQV
-7q/9eyjzupUo0dIrF8k3lPRvTPm8KYhQCGuPmEFvKm/GoGMKD2T5jNT/086JNkmm
-XCg4uueqCe6TKH11uUpEucmYlR9MvQYkul3aJo7E/oQfsIJbGRwokgn+hzmufA42
-te1/FBIZA5iiz7zIaOfH2K6+kQOTddGtslBoEZCK/ZBfNm88l0cVRcnaa+6k/Yac
-qhaRLP1SNKHpgXrdkANQC0wTVqliBdxax4j7jmZPVbRSVlQqKj5++iGV9IO5m9rV
-Rw/j33LraNdoS++35WijIwM8VhZ3hNL4WqfWEEvz12P68MeP14NNVSlxs5NtEopt
-BYbKyHGxvKjQqyK8Jbz2iQIcBBMBCAAGBQJadzYRAAoJEAQONxgsNANiKaAP+wWb
-JMJii6gMpwZnQ0O6hVOtQ+5Nw5OgSkLbHysBGxx5qpCSqAI/Jo7OAGbty1mUL3UB
-zSVDgvg5fjGHXxSBkZ8AjOHVCdNX3ge7j6sEIosfGEyqrxYwdUSfp6p8qb0FyCuS
-nXAj7m4oy1/C0RCRnp7HZ76VzNMg39o4gqWsy2OEoY3ipvBwkwo4YcdZdDe6KSqa
-s7ZaMewZyxVaovN5OlV+IMRcRuLuN4rahx0ch75jsufId3tK8Kd0kn1MzAuNCaqv
-1VWaVtu/EWNmNAxqHDRcJLV+n90pcb4eHTLfDW8Y33WZnATitfrlSu2L/qGp3CyN
-rqS8V81K6ZZRfJqtCXIS0f4UOp4M3zCtZsie0anZ7pYAvXRyx7II6d2Hcb8h1sag
-kMv2uCWFDwsbrENFxpHyu+ag0nFusQdchnNYnH4CiYw7kSIKdVasWgLyzd5dof4F
-Hts224Q+37Ibtg7wqP4qmWX6NZH7ZftlT+BoOLh1k2EcvzPZ3R62Z+E1OTmalzmc
-UID3irYbr+SjDJLk76o/fVal5TLs493ArlZCtaqWY10XciXDHy8UHA+OLsODIJKt
-463cEXsyShbwLlK4U3SrrHj99hXEzfYaw62HVrJpD3QI3lET5Da22OgXY8+k+3f3
-crIzEUhQ1uuhVVviRBtI1LaFs6mRxiiyve6bkDigiQIzBBABCAAdFiEE0CwjActb
-wZLhid9fX1f+weglTlcFAlqTIUAACgkQX1f+weglTlf/sQ//U6Aro5jHtKRBhYUJ
-ex9AWvKaBcsGykVwQhy2KqoNWeesTZPH0uw+BSSQYAjkpdZbr76u0OWmU+LL1AO2
-VTUXVL2fJA28AEFewBesCmaKth/MLlJQf4gjG96rC1+sPwlPaJPcvcxb3BBIbOBO
-2GFbkcuR99ldbLSK40VXDM3UlA6fo5f8QKN079Gli4O5FQuO/p7Xn36OLOpsVIqD
-37uFD85K7gaj7RroS5Oebl0KgP7f9BqFZXwXgEzSM4BefBnJjM8cUJTt+NhAxcnA
-ff29XH9W4SknpGnrUldS5VFapDZQ2U0tgho7r/lbhEYe01m0xcMy+0eAeHCv0SMr
-OTL8J3f3eP+rXPQymjC4ULygZQE7DXF8vfC3UbeYYdGbIA0cr65R6OdNLHiia5s9
-dITnObXef+tMEVpeUAzgU1Pm1c+NceR4YX00DkZZB7D/wr2sfDAAvNOfFPw1NFtE
-Dy5RB9KB7WZz36nblVH9JNKrsIpvmn1NswI4XJbGLtSx6G+0cz6lPAZFqXQpz6zE
-FwHV8GWwVNSP4cJi+/ngaecU5Ocsi0abrCelhlNtXUJNk7kRBntFc0kNynij4mjU
-YA5TxV5Gg5TJ13yhAGq6g9ZLySGP0+ePrLSLhlm9lcXl+pF4u/jMggdFClZ0NNyS
-B5CIp/ZTy00j777DglaOCHbKZOeJAjMEEAEIAB0WIQTVeSxMjG+N6Dd5SdH0g4Cy
-7I+USQUCWng1SgAKCRD0g4Cy7I+USVI6D/901n6nGGKLNh0myVBCDfotCTHvokYE
-SUzDkCxmAK/4T4zwE4qfk4tjlQgw62EiicWvlNioJcbP1QIQlBrjpum6BB1en/uO
-AR70fBNbJNzQUA5aGhIaXPFyJijIq3ovhenWEX2YSnQFGuDs02okog1uboPQatpf
-XRzv36IfWYF8s+Hnc3NGkUR+Ml1mQgaDYFRir7m1HO1+mA8vDSE+n7Vs80VnYB1l
-6Ox0y2aweVB9C/KREZr6r+Wu7ADCs+rOYgYjMG8CkJxXDu5klpTRJm1JPo2DVKdR
-lBOyVyW+PfNswtCHtdcxhmdiOwItUvUTlMjjxRiSyhgFzKPoQlYA8piEAsAEJJHz
-VDuwhBlQTdRY3OkYgMFrizv0qv4/UNuKoG702vrSRQZTr6tYMdQ9rptO+mu3x8gr
-aqZVF5vCJefseTmRlia+vTJ2cTz0iWdneKwSwPPjQRZUnSOm8fNfh2C1sxDbrC/p
-1ujmusKSmc4lvDYG5qiXyaxaka9molTilMY7viQx1y8kL1VFaeuDFcH7XxV9qKVW
-9S2XVfx8ekMozyHw6lU4kh+Tgep1BM73SEIxtcspjKJElcZO6peqxidFqRL3SBjk
-z+Q/Ywi+0DR9IZDIAQ7kS0mD6XEaBH96fQWkAs1Y4fEP2rD0JoGYtMBBPoiqX5vl
-rc9Q9zzaaScmdIkCMwQQAQoAHRYhBKKL9Aw+VRNyZi0U90Gq59zKPYNRBQJaf1+R
-AAoJEEGq59zKPYNR0asQAJfkPzXbHVjhC4EH9S9kHgHR5TE7Y93jCQ9njyQAtTC/
-+z1wfWLudSwk/V0nEPoKgc3DtAefHIgRoIMggM/KBkURGUWiJYvuzJbEbHG63kQm
-pFhL/LrfrKVs7BVe1k3ml+IHl/rKx7ip0F247RGMLe5yspOesP6KLjNj8185uyV+
-UZDxsMH9OHapcTo0LTdpJg3jiFKtzde/S84JBFtg3gGAIXzybz3f8UXzRqdbhkwT
-GSiOSb/V2eUvICqlMg7bChEoY9/JJtZPH0HH9+fBMELnQeyhbQ8I6EZ5lQXglmra
-gY8tQAmzUBwdkH0iUvMYoQREPUd2FAA/x70y1+v7k6odDzd49VaGXSPbvOtRdJSa
-B9pVt0JH+EJDUhp0oeDZXGIWMESa2A2SNvMDUtm3e5rE+wVUPN2g52x/uCIFSL7H
-HmwE0U4acPXVDX6EKPNQqQxsKqCJu83XB+e6yNmP8JWnVT+imcjmo/dLuh6FU24F
-JbnNwrL8wHmCqr4X7fjllh9ZqVM/su0xt8R9N+rpVS1dP4uiBGGE6zaJaAKToRFO
-SJE9qZMDxQm0tplnQI2iQC1D7e97g7RwZuuCABHIV3/QSRHDYVIbcKyDJzPOoMFz
-2PuSI4ztww39f+ukCui++7Ut+AJldExdIPiNrqC+ueWJrmAXYx+IQ4uhjFtd2E5d
-iQIzBBIBCgAdFiEECM2XKpR13PgSXc++uIj7sVEhqJUFAlqJhfUACgkQuIj7sVEh
-qJWbVhAAqoJ7/EI+pedxb4MVb+tUWqeblGZxltmO20nGxRr8+6dzhP4f/pSMHtpK
-RJDAgELlPQEUU8OFiyuPfv2bnmzdO9qfCJNYLQngjLUweMtu9fwdu6RaIDUmPrlq
-8I1PynT2avaMDILIs83jQdSresPXL26u1WNmko/rQRVNgkUr+oH6CdoWD0svxx5y
-1dX5CfA5lcPxwAR44eWnCUQYTSLy+JbEzoWYt5q9Z4HlXdbHLmpigbHTmwUzCJvy
-x1EvPHv0sgmYHu9IbdEmhVpvSFCv8itkFerQiZwxxSFK9IZWNV7b2wXmZ7UVk9+T
-NQ0z1X561RL1EeP92LQgPfUEGjZhpDuq+LUfvgDRLQ7loSlaEgpmoesWdx6+j10O
-tQ/djI3HZ0woLtlHYYm4VJR9a0zZu4mrRrxnKDWDi5Jo5o4mU+wc3GiHAHnwUze8
-k1Tf+KokkbZpMIhTZ0L6NTye6sTi3yj4W4vs9QPbh4wzzC1pKkxE8gzlR5JMwMb0
-cTmVYHNf3y7Drn6K+GKm8usHH9q0jFnat4bfhwveDOo/uU0YH5/Rp0+cKJHLjCBa
-hyfnbWi81V0e79ppmvvuBlxZ8Xxv761B/2FO/AdbEeu7kIYZe4bN7sj4/UdfpAno
-EBZN4iG8G5wid3H6Exmye5iA34JucOh/05f1zB8aw6vffxT1DCuJARwEEAEIAAYF
-Alri5AYACgkQzyZdHxVmMdN72QgAigyNHb2Cq9JWVv4sbjzsthBkJ0WUFPNdX8Gl
-2q6VaSiMSqjDdMEif9q4hIh42V+P4YrBaw9JuFtP0YWEC299/VQ9cjI16BMSKYWE
-Gs7AZEJNR/jvb9cA5T1QvyvcNvzmu1LUjP44GQnnEcBBrdak0SRScyy7uqiJ83k1
-sERzvqAc5Eb1HomFKPCkf3Evx3LYPR+Xhp7EDsM4Uep5+TecVRl+6WDu+lJHdb30
-6QQjrhKyQ53e0KAGHF2bCMvothqdF+9zCKBDMJq/6NEn+E58iZQLHoOxxbAh840A
-z9KVjNdBRT5uC1ULNvzaUJ8AJLPl3c15KVn3bINGFYVAcXT9iIkCMwQQAQgAHRYh
-BL0L9bF0Nd6B411er6UwcIoSYeHMBQJafcL2AAoJEKUwcIoSYeHMQd0P/R+TIFpV
-hZbK/gyRJjiA9U6jVarzu3ebim22qt6bQS7bPgXSrMznXZLJ7ywEaXs10LHHnjRb
-waE5VH5eo9cKktzN5XhPmytkAmVpNktttcUUrdiWHK4jwUVsA/hM4yXxykA0CWEI
-7xiu5bsjxucFotvh+MlJjFJU2lpGN0/55MtbMBS/L3Kg6TVi/rK/PtUtjR07i54i
-cKf7fn2oOv97vbRwIcsM1Zv6vJ89Exym9mRchDkxxBunpJJcFmItf+zsZV7Om3S3
-nalnPHrhPqkwKijNmb1Ca5vIcdCY2UjtHLd8ehj+YmCVVvcvK+8Mmc8eqPqKO1At
-1WQeaGxN/YXAOgV6aosNsL1GC1DsScHzwaNE9IStg1hYCEMJkCv3TK4t/HzDSWL3
-3lM3AOuVQmmQjRcmaowzxHhzrALPMaW/TBEr3id1sY/UFAeKzaxQ8JoQUScd7cQQ
-ouY1Q1mybFRKz6WD799yA7bcVSxbPKRJzNVhB79v1VFvLfwHIs5UvV73Rd7BB0oI
-Dmqf6tfK2R2ZOiXit58YGXyScA5lAV939yCz4BtF3BdgaoiwBFibi1O274cSZ2AA
-3KseRXFxQ3LIwTouMqPEc514sAlvJNbEQoo8ZNeNbgzRa4KhLVzb2Y9mqPYhw4LE
-tfNIvGkCD29t1xvoc2AIBk6msteLWx3EJXaaiQJ5BBIBCgBjFiEEZzHdwoNXvsOO
-NCqvvzNCE/XFygMFAlsuCGBFGmh0dHBzOi8vd3d3LmFsZXNzYW5kcm9tZW50aS5p
-dC9kb3dubG9hZHMva2V5LXNpZ25pbmctcG9saWN5LXYxLjAudHh0AAoJEL8zQhP1
-xcoD/70P/j2Wc4t9dR1keR9cFlAS3mT3sdtWBCwlpLS9Fvhd72U+YhK4ExwRxWCv
-Py1OnUgdqb+gemZoDNWK8rXwQcfyygwUlCngS+1sFB8Ae9KkEAezSGAuWs24giOY
-fSrhy6+5b4WYJEX8TEXWHUm0W6RdtiJPO1w0rp8G8UzeAwFtkFzn147/Tw3ooapW
-bRoObmXMX/dCKEN5RZY3Rdz8m2hjuwMYyUzsUWrUwX7qDNJep0Pr2Gpi24dj+SGm
-a8KYHS6Lr/wpyVzWHXB6CDrcATl3cplN2TNvO/aFX46SPW0rlSi3S2Z/BsarGEHR
-gUlCU9G+wo7iQ3dOd7wBP2rNucGVu3pgUh45xRhb4UimGuzRumDw+SZxUBf+oHni
-HhrFZ0AlNcrTCd3ZbjtXxRpMaab44JalZBXOvdv7xDa0NNB9SDtqBp0txLhLA25l
-pmuimHvhZeQfBrduxBMAe8tKmMlYZQ5aSLjtouySQSl044rZnNq7RVcznkAP9OWE
-jsPZgY3IbleF2HY8LjmgNsFGx1coa0V50tCL8i9MCfVRq6uq50ZNyNEUHIRuYvit
-f3CKPRwjYH5h6OZ+ZFF4EMwtNUM9H4d/TyburuQEQcrBsFJf7jACt6fbuFg0pkd0
-mu+7i+PwpJ0zJOFkTQTtrksviz1G/yG0jHDoyMDE2gkpIuYHSWhPiQJUBBMBCgA+
+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
-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
-3FBkOTDJaBnReCMqNlkeRBVX2vzRiLcMZrrZCMTRb1EpAOjG6QGgM2YgmYG63+i7
-HAWhAhJzulfA9Efk4UdddmOJ2jWbFyLwd/DJsPWTVyycKw+2UI5n9hlmLRfTFON5
-iQEzBBABCAAdFiEEfuEwC9LIlLqR2krmTs/+zJ52kUcFAlp8fAgACgkQTs/+zJ52
-kUfyKwgAtLN29HjP/E7JYab3cDdoH6oitwsoJRdzWrdpl3ZcxkZKcXtWeAwPzN0G
-Z+/VqcTrLEydZkufanshfedAHxEcKsET+WwMr/OPa9vrWkZ91hGHmkYJzhZ4M8UI
-kfr/ISXUsilWxQoYMRizJ3j/Kgg+eSgN2rEd28fRUoYiLTyVRfEidgYPKFdH2ZFO
-XlsO+8SvFzYU8HCMe/0g+qRSTo/be2+0MUxQwi/ILriRptzecBcJ/7tCUEn1CEIa
-/DOXNBihi1ccbKdqeJrlaeGPRrL0jyCrGZstRxzW1ZE5/3s3ehKT41TaJMbH3rhD
-cFtj7nAoUIXf9ZIafb2v8jF/szpbxoiUBBMWCgA8FiEEbDRY7nN84iwO+fo76I/r
-viAs5ZkFAlp5h4geGmh0dHA6Ly93d3cuZ290aGdvb3NlLm5ldC9wZ3AvAAoJEOiP
-674gLOWZdfYA/1tPWVBOJJWM+sr1ajwHXz/VwNUckxF4E8vevLoWWc4IAPwLHZFx
-dQy+GdFHO5Ulz/JER5/rn4hhNub2ofI4HAhzAYh8BBMRCgA8FiEEATjaku3/sn3S
-cPhttHXiB7q1gikFAlp5h6IeGmh0dHA6Ly93d3cuZ290aGdvb3NlLm5ldC9wZ3Av
-AAoJELR14ge6tYIpmbcAn0c8v5gOB4i7jTINIFI2nQ9mFD9aAKDNnlxiQ4BJSkcz
-xyIWoaP9be5g7Ih8BBMRCgA8FiEEU/xahye+HTD+tIYalI/WoOEPUC4FAlp5h7oe
-Gmh0dHA6Ly93d3cuZ290aGdvb3NlLm5ldC9wZ3AvAAoJEJSP1qDhD1AuhmsAoNjm
-NOdvlgHZu/09YbVYiVKzt2DMAJ9yBU+TVIEv4slMjfb0Ez7nfvjEV4kCUgQTAQoA
-PBYhBGnh7gf3pqqOSnd7KnoGhUIeiZBCBQJaeYfXHhpodHRwOi8vd3d3LmdvdGhn
-b29zZS5uZXQvcGdwLwAKCRB6BoVCHomQQvtuD/0RL4HredZgi1KmnHwB4+tnwGsY
-s9ak8g8NDuvAxKrv6GDVuC5OIpZUL/QVtgp4WOPP2+be9m5xsQEy7oCG4yn5lIo+
-qYw/e1x9QN3mqOiiUPBsHD3RWLtYZI8brrSIBofp9rOjanEO0Mr1IijgSBkSSSKS
-QErPv8eW22VGohHYyJv3BrbIzEIb4cojBLlfL23XZnSNxUeoBsqIFVj3i1RiPB3i
-Y4uz/sieEEXDOIXh+yG31eQKJWqyinKbyW4cSL//XWbR80RL8o9HbIGk/cThHrcs
-MDqrrQWDR+jPh4jJGhr3ClrhKbLqelkqDyKN+gLWBdkmK02datheWP3EvEsQokqz
-EQGy/O6BSXeWIEANPn+lMt8YH0PfTRmkQ7RDR0ndjQra3mbqp4K0cb5SFmBwIUdD
-ST7byZIjWUW/I9dANvPdGcU0/ohI5ONQ9Jybvmhsyg9U8wc5JCJG0UNa3IqxdY8p
-j5OmGj+JzKy5YwyfXUmkyiCTOti5hcEVSUBQME8p4t8nWp8L5i8kfuer5NtVBPJe
-T4Fp3wGRWaWaF8o23zwQTvvbY43kfnfIX6uQS1CpqtYhp3x0b225Kz4315wWNqHP
-kPwkFD/zfKM5E2N44yZeuoAjPAcXwgI1/1LU4mUkq6fkWReRw1KN7/jI9gnkd6Cr
-1BAQq9iS6EQsTbzdLYkCMwQTAQgAHRYhBJyGTCHjpZxBI3v/ZhGv5GRFp5QfBQJa
-d3HHAAoJEBGv5GRFp5QfRk8P/1UVjR5bMStH9G8X1XvukCZj1uLLYwcZ8dD68Abb
-1HDqB/Sem8bvXI9I5NGzJy3FIsv37g5dhmhrSotyuvjH+/RC12S/xOY5imO8RODz
-DyKfFEsGpVLr+mk3PM6spTLrNPflJIadquSCo6aDXjVpSTKvpdKlGJziA8WWbcu7
-iwN8DLddNHN6j/bAew+HGmBjlKYY2YywOhI603htYy4OACeTl/FTvrnaDO+qI74o
-g369zUs6PREuhl1tbV2NAhepw5haHKfmpT0SnMP0TLzlrmUVnE1AMZ+nySkYsW/x
-ihTh47B+reIlj4smvhvMPcCIzzRklGwHdaw3OnyvNp/NG/L0hV26riXVhBI5YIcG
-3rlLvjaHxxyAMnWMq9O2IXB39Ke9GYWZnBIuKU5V5dwfokpf6pvLeiSjr3Rv9EiP
-gcXy8NlJu0W7p71lrHC0CSnOhK6lnCjm7U/eUDOQ3ya+nj+jRoysNZJw9r4LLYVQ
-45Xnuprw6R3WNCDIor1/7Bj/jk72Vkd4VmSuYVlLuAWxhRx+3rFDmizzL69r1q9T
-fyRHbS1Zja3Cf0126gd0YeyZVx42nTXGY5tipMy6qdZlCQ8nr4Bwr+dEC1FKB86D
-V8Zb88rNdbBDWox2krknFRRNNrvwujtT3t1V8HxmKVvSfz8j02XzVFZZYVHUsOLz
-/+YAiQQzBBABCAAdFiEEN3eQQUH8qSq/vGsT2E735yq+rWEFAlp/ZdcACgkQ2E73
-5yq+rWEHLCAAr8y7YS0BKV2rcJeDWlfT6lSKz4y6DlSbyOQuo2H7UD4WdEFKE+I1
-FGKtfCpAeVcp+thbra7OyiRx9VUoPsgEc9uhPMipMrInJnoGpSku2/ZMxdljn1HN
-AkHSY/vtT5e1KjoZW2LkkPtQtXwsfekbXRf5crBkbGFGP7BBj892cWUej2cdyx3g
-m98a/WXg3+7NFmncykKPoD95DU/FdS0XknyiMcO6ULN27tJxCOwuEgN9kizuYeDk
-K1EVNIXiLsVY4D8u5VBhBC7n7ScmhhgxQI7uz5nqNYc5yLJjmV702KomX0fUxKyl
-WbO4Gam/cXXFP1Ygt+SppTYZyD222QEI2smLFk5dmDojqocHtUXcwOK43qzg6TSq
-BOJEx5crgVtxDpcerxxVYWLH2O5A/Yu7oT8VwOHrOTuVmYRi4OIY+B1V7m/tOxyS
-8Giptg9xgZi9B64vVg8jm8AZphhivhTDvzS6fxUhsHU8kIw0inrihbtBzeeqz+eX
-n83ehSb7IYvDGJhnovnzmRHwCOFYYXid6A5KmdK9YbXHu2EH5eZISnEyA8FQUYBI
-LfeAAX0kjIF5zie9d7jMhdU4pxrFiaj2U4UDjWRllFPUdGYaWH7Ho8//v6URRkx9
-OYWfui4Mk3FXDIqqob3zMqSb+zSkOnwTn+vPrkIwH1KbIMOifRSUeQh/K0CjRSTg
-FpfKmWshEO5EQNxDMKTQDTLk+j9inTGxis7EmCjTVGt2KG9LNUFlTZ0Ol39UDdfl
-N2/hQ20Cjd7SdfD3phisr7cY33y+1QfsobYS9fW5C7VfUIiDq7CrGniXQKOEzaXg
-Q2+teJq7vjy2fDnVIuMkSMWUWvnq2FrmS9PXGiL3EswM+oPLHZmtNGNsM1zZnLXo
-zdGCqABD9lw8vr2Vy+W9jJaADL8DvY/F9i66kZvWHccJXOIR/dPmPQ0PyhYg/MIy
-LYOtXyBiKGL+NkY7rtHqyMKTNkUgj4F4NL/Enu9kzgoI0020E8dQhc6/JRt6mEer
-k3v7JJELdxgTShY8excllfadRljgzS4RRHJA9y45QGFKJ6BHZrem1CEpFtLe11nh
-MzEsDDJLpsvjuJDe7Tga8aC34UGasQZWgRC2WegHewzA3tPPETkomFWWjGgEX/6A
-67KT7ddTB30oP/w+EF3PVrfCM+GDmqqzJ2S8bltHOyxqroAFGUqIV4K0496bFsEN
-nwEIqPEMSy1XAruUFV9J5ZrbxF3gYB5aKvUXXXASi4GJBj53ArIPYk+FukWZ4PAS
-bGXvb7CX/iFpEc5+QenUl/JUl1qNqQ+bblHtx7JsKkXKR8XK7ccw6pftkFHUXGn1
-rUqCMsniqLHefVukKP6ipScH5BaVTnnQtYkBMwQQAQgAHRYhBPn6jjjKnuCqPlBa
-vpULDuE4JW54BQJaeaC1AAoJEJULDuE4JW541b4IAJt5qaQoI7NuXNthi/LBbHkK
-vsA8UsO/QvVgDODZ3CEql+So7UjmRc2oFwCzzFwk44bmGfeCjEb77Ih7P1O/AqjL
-SlIos0bI53dX0VndLmHaODXai4wsibUWSgkWok1z+zaerWlJ1D9693xm4bFpvKkn
-jUP3+jfDoz3cGb6jGGw2Rkbo7rVaDoI3mtsKB0mOiMj//WHUO9XUAB8ZG9a6CDnx
-GHsw41L8sllB2x9bGXriocs/W5FXTOvxrCbHen9HwV4G6qdplwqJFpdjSdD0ftoB
-eblDHPc1ddZCiESeQwvSOKU0oHvuLvjTW8jO4fkc3mj9IGBlFtBm6mBqHbPU8QyJ
-AjMEEAEIAB0WIQR7pnDpiVYJkAYQgSw2cZOk2/R/dAUCWoMcUgAKCRA2cZOk2/R/
-dHUyEACrs+UyLA0NDD+3cK+TgeXE3OQjcDbqsQFGqhXdflkebSlR8vdY5d7feiyP
-LXJRLyBktCcuQzj4MSezkgsQMKPqWKbFvndEV8zQv9s4zGI1HLJxP4MYuC0hV95L
-b302va0m1dhl7ot1EtQE6s56I+66U9qMtsw/yd+Ty5P50XLn3FV1L7PML3l8Kafa
-yHizXEEJap9mPSyBXwUL0NfO9RBtMyHFn+sS9P8WhpRuuYlwG7jbtG2g+sr/b1rL
-qTSvZhuEgYMVOVDQcS4CmcgXH/KmzjnXIrZ5BuwL0/D/VUJGiUNasavsG3g+EtG2
-ttrQevLR9rRWaldi+o9V2Znb7L3G4ZbfuoCQnk5LTQzk+Mmszt77tSlIg5tvQmvw
-8o1H1dOi2k2GjMoDXm+I4oapH7k9mW2luzEu3kh+iYKarrMX3riEJ2NAb55PwH2a
-6g3Z3/PmayjuiiTd7uMNFR7PmZ08l9Sw1tLDrUrPgZewVnbdzoMF4K27vuTu7rEG
-FzDG8hhhCFriLd3CE6Q3pcxaL3Ymx3o5V1/LoEBuIZLV7lG1IJBoHP3RHToT2psI
-vDAgTYU36Aip5tAitZyjhHe51KvWvBkUcqR/uzWrlOHbqMYvdKnXseeLOVsObgLb
-MtFIoW9EYeOlIeROJpvN8dBtJlxbRp2H/lEUd9yuZsdjVCtb3Ih1BBAWCgAdFiEE
-TVGQANYpzFRXAAm3BwPAXIOiIFsFAlp+5dEACgkQBwPAXIOiIFs98AEAzg+dozKd
-lS0F23QPj2Ct+BIuV3N2rV22dQ3fElJarg4BAMTB51m1uH1Z0JDhnp7/txFR0we8
-Wh9V03MYBPzHHHYCiQIzBBABCgAdFiEEXy0thfDlSC5JvpUzHwavmX4lHuMFAlp+
-5dQACgkQHwavmX4lHuMy3xAAvZjWDVNcGnOt8ht198mkGOCYQA1Is+Iihm1c0T9O
-+q8kKea30D8h7AyaxXlO/TzgSAuBGYffN7/p+xNgKCqTqz6zH1zQ/uVX3jpmRcmQ
-etCVknYyOIlwC16t1mP5py94+vpDYP5otayhXxqNwRR2uidHzCaqCDLFsc2kXe+9
-B6fF23DZx0nIs5AFxhitjd6DIjklWQG0zIzrJOCwqyxpEJJUI3JnNdnJubb4EBCx
-hgQis+WWOTNaq2+y5KRw8TvFyzSTFnoj2H95pSgQxSB9FuUdnD8BNpsdKiGfPrm6
-0VQf4G2pRCczrKts+OGaTgKG96iU8JCPQpOIyN4EDvF0eYGMret0xBFK2visqPsY
-L9DPXcfs6ThO/P1I56Xgr6DuX6yYctH0cHmzf98K7Vv5FNiXKHXHdcmYqCepKwbY
-43ejkyoGxSlAxCywRhL4pQdw46QgEuT5JUUXcBuYdxK04fIlk+Mf48GelwNP8RvH
-x/Bzk4vUBP9IwVHAy7f8l5zNs02hZp/JDgI28nv7EeoUa5I7AD0gFJWdoYBBlrxT
-0MUcWQ0GhRfu9f47y6jFaSfmR2QDNJZIKeWPZqcS2zZp9FXVIYoyxnCfdtyZQTwg
-eFX4GvI/4F3g7EoUf7zYOwX3yd3wJv2ZcWWhCCSB0a+mfVtUly6tWW1BJn/av8sE
-Y2WIdQQQEQoAHRYhBNyzKB84sHEaQcDcIO6NNj0Wh5c4BQJafuXZAAoJEO6NNj0W
-h5c4UwMA/3GVDy7znL29XnkC0dvTsU6xWycGH8YZcC02inKtm7YsAP49oekfMXsF
-jY9fpxpA13me6hYKim+ZRJ7EISNh9T65RokCMwQQAQoAHRYhBO4nFD/UwclahrTY
-PYBlOfqNGMo3BQJaeyWXAAoJEIBlOfqNGMo3jwoP/09ISsClP3KKBKPt+FIuR6Ta
-E5KqqiMwciTNCYLWf0AtzLK9l22VTQTbTa7AIyBZy+6qB/Syde/TgrwjBsq0tgDT
-MVBhgwOOv7LOAentL5IiaopPHGbhd86lkKxj4rn8LfyosnDk9wuKQoC9tUQrsKB1
-YqkOHxbzLqyyLv+hwBH2n06/9nZs+G8EeyqqrtTPe2a+MO89D+O87D1ejV2JNQfG
-0IzBbFVd+w5W0xINxVR3fmniC/TLXvcanStmlc8CA/i6sNTgubIUjB25IWBbDy+a
-RXqX7TnAsiXvAtrX4xOcavPVVJtcV6pe2YRCqXmzMg7dvVJQxY/PsFwLBpRwMMv0
-U2YEDD8192T2EjaGrGBG4v6zSQQjjwJdEdrzLnN5EAJpsO47eV4E0F0uzeYNVHuW
-/cZ4b2HIgXji0/W0hQOoZ3FhrbzlJ576e34UNJpg2us0Q1TKJzGgGdxo8OldhZtm
-MNApoOuHbFjeUA809Yxp8imfx7uOmbyFXGIiqoo2pezlxFmBV0R/00WgMmsBQYxS
-4ekqSE0rJ43kb3VVU1j0qc3vsvYv2FHjez69EyxhwCovMxLyZRaOntSnSA2i2Q/9
-SUpVx68wIn5KLaLctizHLazN8/+DIwglvmhDuNFz02FT8D8jytvmJFotAiuxzLg2
-KORVIyBkw0UfDQ2qO2AUiFwEEBEKAB0WIQTTO8XDwMxZtjmJ13vqe/OXAXViPgUC
-WoWrZQAKCRDqe/OXAXViPpIzAJ9jT1IW4ZuIDLOEo8/lccR55ygaGACWLCiumnax
-eQZmh+HGGQ7tlrVB/IkCMwQQAQoAHRYhBHxK/WHYqudXB5alFyIJ1pAvlpyVBQJa
-hattAAoJECIJ1pAvlpyV3BsP/1ManPqqqnqmV5WQjhx+kNNPZSua82HOdk7hIUVm
-lpz/Qde2O4MrnKV20VMNx0PNkfq2ii9seNtSfwiKSgN6ojexkhtCWqAy6jLmDLq3
-xwYh0mSFzqpE7d+9qA2tIfaxbcw0r8A1YG25tpbmAIMmiU4LTmPsOj1sZbGLuOF1
-nep2zxrB7LBps0r4kV4OwJEFrKlXQVMvgcc5n2ysS55r5+KTe7vXbNEzBNEMfFBs
-tiYA94k4A7uMcCcvDs0saKAVI70E3dFZsJJmWfcLKdNVlPdpYLQBcyZYhoS5r2UW
-b5FT123V6WQSVdSZZzQQoyyWIspN7LtmN8wyX4pi4xlpC0guSZToKnTX0Wiq7AX/
-NhIHiiAXafTivtjN1a+wuMqdICvsxN2sQqBE4kum6RcpOojmxzCRn7fVdhzFyeyH
-VPO6p2/UP/Bd0aX770ptd7iwYEPHnMhU9PvHpsz2JjdJrsZrVuNW+UeMKH+iMM9h
-swOmMSIneWGSxAI/B6YhLgVspsqFhumP1cA5in4T0RpbcMdwtICG+rpDi8Onz0tf
-T9kLLFi3TGMg48EWmWGr7tZ3JW34OOhofL+ltFmQ9evxxaIat13DXQD62f2XQDxv
-/kOGu3uAcel/TWTvSbEVPgDOECAoClpEfcyIatzkaPSF93aUNx0eqyIAsvV3snaj
-4gtDiEYEEBEKAAYFAlp3oLsACgkQaeRidk/FnkRy5wCgvdqRx9y2jMBp/+aMMyW1
-HWU2QhUAniL0CgQQmvZsj/6ZfnQeLvq05jksiQIcBBABCgAGBQJafwPeAAoJEHnp
-JOvtp/P9Hy0P/idmslUfbGhakl0nhLLz/ZEvWUu3sYJFMGTOhmRVqJeOIXmNAadS
-D9I5Rj0wwbNSHlK8lu6SvmoMPDtGXS+OvfJE1k3NbI6/T70NfTKmD7HGgcb+7WBa
-udAXAfMU1PaH1M8hBQFKC7xQyqsVu0MsokZRWyHmsBb2RKF68GIrvoQGGIWiYTks
-dR7eYVYpooBruKUVDH3RoLAOfoptAyZjXsZ6ILGxoBDErucdvITJ1ps9+9fPSJlK
-3QPZgyUr/jc+nBSSUmNU6dB/vm75HXg+Rn86gnlb73fpjw6ptce456yTBfa9nUa7
-PJDTkybpxozvIQi8LrJMuDXwcLajz3t9vHNgkDGa6magSX87gTJ2/oCnSKV5yOk2
-iCdq6ME9QL1e6yCaGXzizk+Mh1YQ5a+9PZA0q+1itXrLjYFJ86TfqPAIWpdz43uR
-52pKm6S3TRfit3u2do4HNwRJ8Q2akryx2ARHG63ANHqPV6Rc9PQbH8W68emnct9H
-yHDVEEtRFX4Du+ccjEfl6ghZRh/s9AZuzL6mDW7orIf1I1zidIAB+q661i+XZyB9
-VQyFucaocnT3v5QnXImu04oEagymtIQBip5Bhs3imjrdrBZnQFvFLk/KM9yaa2v/
-quRRD3zlC2It8ilx/ArLJKDnm2WZr03KZPAj+zl/XLRkZk/X6Ch4N6P9iQIcBBIB
-CAAGBQJaeKWPAAoJEA84YoTAOhFi2AQQAIr+5KfjkSHb+Mf1McPKiYvNoPLJTc0V
-E4pio9RmL5ZF+G03Kr1p0Bo613xfpi3scVkl53zoEMxIDuI4DRCgpTBA1TktSi4j
-JlLj9up8XZ3G3NgYFfEpVxPRvbuU0ap8aUAtdGAr1Lqc+GCeERTvldxoR+OH+eKY
-L1BtLRGoFquIit0/lXHEt3Bq3fFgXBag521AtSaJ68a7jBcGi1YRoiWAA4pR2Tvt
-ZecZ9hz0NG07HTGbpBx+qp3iOGKFAOTBfypGuKi5BTp40EI28gJ5aUK2c3NeIcJz
-C+3fNKfcJWJFRacxrqgr9YgdXGNixo14yv+WNF1c2TD2DUd4eDGD8jRFxpDdQWt2
-eVRzSs9pJ4sWEb+hezQzmJwjWfF8VIIJEVHrx3Jio/y4AudKHu2vquvKUQrxuVzj
-HviVsKEKdWnuTGMPqVcTZYBnSySwJ2akWYgY3Pkitf48N/qkoxmaf8M/TS41Bm1B
-X3agYBVqITMONA9XO2zxi6yRIGA7K0d3OH32btMmR2yJ7cG9jDGHuAOhJmSLM/dE
-nYnMUKpGB48fna04Lj5WYefhYLS/xtcUOpKpBRjHAQMQa/muLRpz0WYGwvnGAPNr
-ghLHqNXEa2abe7v6yMLEudnBKe34gCMZWiWcFNXIphIULc1OZ1kuRupzi68l9d38
-8yz1jl3KgfZiiQIcBBMBCgAGBQJafHUcAAoJEKnIbI3Tro06+QwQAI+B4BwqGMsn
-s0mButw4E9E6pbt6YI4rrWh9MtICu/lYTiLe50Zao1eKevzm5CXIB+zkcoWR2Jlw
-zYBlVNg2i03Xy3LvL0VFeAH0yvvm3nYNQcA05LmjZRe+nRuO0T8J0wIUvHHRsf4q
-6U6MVKwrmO6YUUH2c4x8xCmFHQymOcoBhKLJR9H35wDYuntOQXI6V59kSFb2GEBX
-jHXM3EzH7ENjVDLkkoNTu/BqZ2vSWQsa2MIJL3o6pMNhuqvwE5bHP2yhrrxqect3
-POvYVTNt14RgPgYbh2a0RYqnQLeDeSe7VHVRTBiqxN0WVR2m6XyuyAWdV49tq04m
-tH6jS3P6+DIQdGMwsfOb/ak1RfvmEPvjCwpBR5ryTZ5hfw/ghN1GxrVLvtj+v/61
-QJO3bfrOC+U8eRJWPsx06WGVwz7uksjpfvL2uUO9O+n2dTMD8UmI7MWDW6M5Bm4C
-6qsD4kQPAJJb6vi6EhRuDJz0hWS3BWu4yzSEaVxRDDn0XZBqy6+gHtsoKnrPK66L
-Kv4V1BUbRYXuYQXFEwSDHPf1cKCTw7qsv2ZKe5OqdWzwQChhpB0D9dVhHkwvxHqI
-FB/LeXRDfxz4as0auWFOYDlXwxjGiCkGf0jcs9kqjY48BZ306j8SdZiOYFIe7u63
-ALJN8zZEHXqJGjjRELGlvfmYGxUlih7jiQEzBBABCAAdFiEEls8Ek5hl37zsBogE
-Zd6Z4wSIHBEFAlp9a8IACgkQZd6Z4wSIHBFW7Af/d9UP+Ow9dIFNDJJXIx+VPm71
-xgcX6NjQ7CYkb64CE9LIMYHHT7IM1QZiJvPOPKOkti+n8yWZdW6oh56jJaIzFzmH
-qGQ5RPcyrH/ukJzHgzimg/yF5J3Pm09/yq3fAKseBgxRkNOIkTMftDDxBUuxyJ+p
-rCaxQpekLpxIyjnCuQU/EFCxWJ9vt+vhRTJM4Lt3xiNbU0Is/1stsLahC6/tTw+o
-RhOKL5tVXfpugMfo41xPPSW3/h9zV+D2eKCxaLGsIfBpbAysiaY7J1i+FJx7I3Ol
-v6S4gn4jMU3im0V65bGpaC7J7cNDjwr0yEwEEj68pzbj0bLyna6JBpQjeUVmeIkC
-HAQQAQoABgUCWneQBwAKCRAGBPSQykBVvPCpD/9Vhsp1/mRGBAlMgFvF9YztNiaO
-bIOvIJyPABLVpXq3YMEsFxdFOyqKGG8NtW8mMzJIyyzrdgZaY7Noajp7w1af1Dq/
-T5y5w4jBMtqy62PAel0gz10RlNyY2WIM4s7cjk5++wH+X9XFgzJ2UUGkrYquVeTj
-YQFGeF02gcAo1iVYEuB6ocnQM3AwOSEXpLAqX0FtvgA2yxzEvi0EqbDCc0LH9nyj
-mjHXlvsPrU2FtTGhZyQOjiI8z0Yd1QKIpTESceNEs1ofXfEksmi66lvfG4vvbyiF
-eFiVTJkZj+aokSxJnWtCP5GjDXc60rY06uqCEvfTLXgpk97v6iDQO+jP+JYuWn/4
-Emyi7Hrdf2imfKbC+VD7I9bTeAsD5QbitGn3q6s/jKERyxlZBBt/+lqq6IaKuDis
-u858lXLG278yGhUd4lX9W1fbzahg0Jc+u5V494/7jkBlA/RqCpR0MDNnvYpmh0Tj
-TMTsfQgGIm7wIE7hiuBr7K9aHcPYXNYl4sa+0Q21yefDt1ACyIbYZHreUR2C9sqz
-o79lW8QpEUcMIDrHnT3yEau6QXADOmkPMJfOvo+a2iU5KRU4RNsnDbYBW7b28nOj
-Mu9Q4/ocDKCbmXbrzBe3ppss5NL08stRMLQFdlLGdHmuv9rAazqTDal2PZ5nDaFt
-tDkWC3mEyOsdG1EhuokCMwQTAQgAHRYhBM+bFAhHUJFsTY/KzDnkX7YBQTHkBQJa
-eht9AAoJEDnkX7YBQTHkC/sP/iSHOFO9RZoydPE+C4Vj3hIxAamVPCIL6kwi4T7w
-Fsz0W70JVf8WcMQVLXtK+3lyew2cCTP/nOTWVvM+3tmKFA2rBIpjzIMgECbY/h14
-Aiu2qMGMnR++1o7qoVwqqyEbDFC+5LxnFaGb7HegBkNBqa7Z45Z7mR7mW9vOU18Z
-2uFvva29Usr/e1hK4DNIYuvU/aUpfsZRrryWzVAkrNKdUdgrPUc9WCl1v2qbo13Y
-gJTah5dxZ2xsaK9E0pHKLwdEYDIoTxp6QYeXt7J1JG12F0sMQaNJyvk9Xd2NNohF
-x/zxjsARz9p0DV0Y8c6q1qJSX+VSGZsy7mrcQUVt3BEc4ok/1NdLEGclF2GR5jol
-4fi/Y3fAIoOL8vKyOGO1BibpnIcKj0kG6iTEe75lYgqpTM+QDS+O5CvCD4BYm6rB
-5Fs5ZIRM4jWP2priwlsc8cOeyRWB3fbtoCTQ89z/zpdPA3NkutFJtvo4MWEwpYQH
-J9HgqM9yNgUgMiUvdpjqJ5fphakEf6AmXI0uHl8r7G260mOqPkRB+DioGG7LM9/8
-VTSSSwjDCrU7s0nY6nlGgboExHvwvnXlnC/T0bCN4Z6PBtnqR5Gg2TM4IdUQggZX
-37f6W0OeU1y2JVZKlg9G9HbaJWPxwkWiZTf3a9dPedmtAKhDQ4c7lmD684WmDNkf
-Lk+piQRjBBMBCgBNFiEETRc6vzWoF0G3sDvrGUGb+pb00OgFAlp/CfcvGmh0dHBz
-Oi8vc2VsZW5lLWZlaWdsLmRlL29wZW5wZ3Bfa3NwX3YxLnR4dC5hc2MACgkQGUGb
-+pb00OiPfCAAk/UxhNkca/c+nFu8zameD3ykaQVLLdJOUvCGgRtBkIOJkieUtxUD
-zHv2heATRHmdGSAn4CMM0kf4ytWdme9S2j2ehTfFHfnny7MoWz6r72Q8ZmNcMj9l
-SnGkw4IW8YaKlV9u/JxFndACcI2esH/mDoOjwW3qM3ydc5kPGy5jTDfLLT95TyVk
-XKRWcnnY7sxcmagiAve38QO5dOA1ZMnFbWINZOXX0/hRvdZ6yxUNtLESxZ6o7+b3
-zewTVj34MyhLKMEnpIJD3IH2KdJg8T/FAMGT9qShfduIgAms7nH+5iCzfLdB+62c
-DerAy7veWH7iZWjV1vmf18qX7KUchKzEL5S6DDOub2tGIEYH8WyL47Ij1ePJQTWf
-qar+cqwecI08KSdW+d1efoL7ZpGQM6FTOAnQsOklPZZuDbxZw6WMjxysftnLDfOu
-S46NIV1CGqijB23U6Elo2QJ5wz24a1u8s4bqRcpFpu7FyvMNOsaeak3xpCD5Ms4a
-+rklgd6dvhtN36JiS8xHQ6ED47jGjsBCDZStq85j9b3c2VZK1OQv3emnGHvIyolT
-w5jPIqEYjpgxNgYDIgX9DmBE0yqjnQzxM+ty8/gY56oTnTwXGVCeOKk/0Nohv2+a
-TD9ui4MJc9hk1U8oWWHHf/x6SxpX0HTvyxXcxGniLvDUuvJ6QvoATXIAyWXgU13S
-eOnSZBEeI0IDuPR+reN3T/Cs2KGFfZFgw9JlH3R0Rj7uD7vVzXEEQqS4BU+xCHbN
-wuQhkUJFo5Y4FGf++ngEaHUikC0b/hJ1v44XPDQa5hwUtubUWYqufj29/l4vZVnc
-aBAh0///rcE7WMcS/1NVHZs+UCeUq5U1v8Oq7fLlM/e1cXeMM5GhCt8Jy2ney0vO
-cDivQyHxxQrNMosBcoNeTexTm/DA7B/7/tlctvfiAoE0ygWpstlEvSi0MXsexI0M
-jD2XQvq+N4cEFa+3DYBN/LeFBl8Gqc8ERRZaZTTvj1fQPyr/AjswpHkIBEx9fkEi
-Zcg2aamEPDnSMJU5AI8VLF+bOeITkChjeNsimL6vm1mkz1PLJ5BjOlGlRPcuKbib
-7BR8KYg4qJK5ZuSzBuIZN2Fd2Ee162LYAJlDTObX36R80p/TrkfoKZqz28fJuNsR
-ZwMs431g43ELqyehL+bEciGv0Ua9WmfX85MKlKxhYCeM+XjmlT399eJX2fhMbY3e
-0S1zBbE5VYoPAsZys7gz8P2y6VBrktBUlOCSFxmBPagWakFOc8uRBP3GakHge3Wx
-jz6uXKzTslPrdnAcPeeaub7OXJ24LfSyqbzwD2fgtaCvoqkfaRXU9YeocV7tQRVS
-kpcluoDwyb/EDq2W+dY5OHaAoDF3tzob5IkCMwQQAQoAHRYhBDHZXKttgNJiJEoX
-UKR2IOgB5H6VBQJafyn/AAoJEKR2IOgB5H6VukIP/Atqm7ksSh774ET36cMRst4i
-8EiyMpw04LvjII9p7wW/NyCuA7HAhNN87BAS0b3gtCmU0tbV7MonJLBASbAYOC39
-86qcKH02jNEEbWdNpPDTCO0il7e6UaQYE5hghymRiu0OLqVQiALKPmdw25mB9FtU
-RrlbtVX2lnAcu3c2Z+v2YtLN3mHCpDbzedRgsUNcXz84d0QZZdbv+T1lE3VtUsSf
-+u+xXbvhxFN4VwUfEQLKquYZkbMSrGkn5Nhy+19BxBBrg7QpK9Ly/HDrhhAyUhco
-uYrR4nRHiuBcBSM/UR7gu/oABO2ZJhgtkZBkYIQWz6Hjc8MwhyYwwkY9bz4UxMJh
-dpue6jUGLA/6RZm3JUKnWHKVoy4TNaaX131Wt+UeWlf3dSQNmwlsIq4QGp72N5nn
-Nt9iKjIwD181U7aA4DN0r1SQtkz2OGdroO19mU6wlICYJGEQqNjLQ/C66FRQgeId
-ARQrI5QOnBCVkpuWsc26BVq2KFSHoEOVmgJ3Rsh3f+FacLhCTQSfKnUO75IK0jju
-uWoCDtNQDSWYk4PIeTqO19hHvQyexkA1XjPc3yLapAZ3zLh3ARdwVZeoaNX2lPrE
-OknwS7wea2uCieXV6Jwes9iLLOxflPlMbLmEUZ/uXjO/yrjuKbRtVn2swWWYPNzf
-e48e08VzQlL2ajOnUbL3iQIzBBABCgAdFiEEyoRj3Qw5FXO0yYNPru1hWAIOr/8F
-AlqAh4EACgkQru1hWAIOr/+YpBAAhvf5F9SXC42UGbH0YJuRSnsWAvtH30TUYxgN
-6ab1vElRQN3rtNhX8Fy264nvtlVbWritmETsSzivDKMehvou+ix60vNrghhbA0kb
-BmkfoqVw/g/7MdRpzktWl6dChjQloKibs5aq1O0viI16cogEGfSR0IERjVd2C/a2
-WW31VUkCR2VtvyS1DLWyM9qGbJt5OT7xPsPwkg0ck3VQZ7QEQ4pUN3BNilSGHt4U
-jaFCsQHnfygiCSB9l2mHmaU85qgsHntWjuVMbv3CMAIqK+cBEVhqw1PWQIkzantQ
-KxOUE4OzQbIiRgN0wJJiPornYKvu3VL41GYvb95DdYYDM9OiKlY3X4QFypcWo4dv
-hCIO3zl8P8sB7+RWwV/s2tLHPxwDArj20hoVzpk+LDL0QWN8jU9bEBkWHMW5eToa
-Ty8U15cebABrJM+AxtYVmw+i58G3m1xhIE0bE+AnQPexyI1GI02WIMV8Kt5w3tOn
-uQ7ImkBk49FQSU/Z6rQbM4QWLPnEKdGM6cUhlXkAq3FRgEorzlKxo+0h5XSEBLl5
-3maoVN7mOkG5G8OcR+RL21kCA5gpc1PZ6p8M9FIaFpStX30dGH220UmPB6Go6QDb
-am7+tdRzZtTGHL8R5Z0MFq5a6vVdWfk5d4olF2hGbhtESTZTeu4upge+nUtZGVZ5
-ek7/HIOJAjMEEgEKAB0WIQSC0RmoQMbvym9a+UWe3MmR2atFfgUCWnhOxQAKCRCe
-3MmR2atFfs63D/4v/77XNtyGziqMJVo+DPuf0272UwVvEdk1w3NshmguSECaiYHj
-bHAf8/O8IXJWEzpKk5sl9TDcvze0nEjQ9dDf5MhsqZLVUxncahKkX/IBzgDOHvkF
-Rze8Db6oSfLJThN8pula1CsT28MJcUtCtuEAh9gpqiij5gey3+ZPmqYUk/RH7UYM
-d4/6huAPPIbOSvb4IZa2X2YgqG9NDMYLvRU03e9sRHvd0ecQyIK8oLiY7OkWBpgS
-Ylpm+vjSgsIqpoxMax+jh9Qsxk65BKO8dab7OBcsACzd227xTuubklihGrAuVSQB
-u1/ZnfT8gUFppadAUPsNX3LWr2ltERf90u22vn1CSmvpBzZaF/g/VgGhx80SIarG
-09zu/p8dujZq116NdPUjdf2AcQYNbnYv/0jfT7t7IxFN53W+dSl3NDl4byJUzUcf
-xByaS6BRki5weBuwvcSQ5pwnlJoGFRzxOXIRo7gqELer+Xq+jqKY29x2yqgrLfHY
-NFdJRyqWRiDpRe2VsIprM1yIx3607fRDIe8rK/6KA9gigGSneBpkxffpBecylvaL
-MpNwfg7LutnulaQNDv3a9+8jNvVMnfZUyWT5lJzKZelMqQj+PUzKg8Q1AQFleHfO
-vyTds6gP2bYD1hrGaP9Uey0BPTvlDSGQQVpCXsaJc3Q3nMa6utEidGNM+4kCMwQS
-AQoAHRYhBAzRF1BCw4uxEO+K/uJ0qfywodGCBQJaeE7jAAoJEOJ0qfywodGCeM8P
-/R8bS1eECzuZyU+1qdcZyjs3BIkzz/oVAukWyr643qt0s0uHrrMkewqXSqxGxWI1
-5YMnAg+C3ELAsZg6Biv/DB+vvhaqbwTKKHdVlNIQXMHYG1a2R7auag09xrigxMZD
-9SA53HNJnurwTzSJhWUcCvhew4ON+1x6oDSUf69fm/WYEykt2Smu8A+Vb02ZcNJe
-qC77cFD2Nggw4kwobrMfXiSMCOug6YU7a+zp/kUxBosad75tGpeYegyjG/vCpCSj
-B3gXT0R/0y+VTLZ7C72s7FPZWxw9DQDLYcxoaPygDZ0l/tX0fHnaU4OM5NB67Ez3
-ub+oDi3scJ26a7qC3gEFa89QrR7SRD1rTosR2+yR6cQ7S+g8PqIX62aUw3qamVv1
-fcAoElhGvaxfOQq1CEuOFekCELB8x36Gmvdh6XwzyEfwt0LVdk2PXgalT5u+AgLy
-loG4zncAg7WoGUJOYQY/KSo8YHR0ixGpC8/HlobBH1eeHzMN2nfDus+CAKPmXNKq
-+EMO+Ax2ifOI6E76DtxqUt6fI0goHD05pwqgy6MTrH52QngoH83Qu+xxSOMIo1Nn
-UsGFiiK/+nMYLrnSoyMTbXeWfM0cuA7vakUHW2B2FapBQwOGk8ajbV4oRJlVzs7X
-0l+NkNYf5QK6eJNxApcKLSOz1kaAaUGAgXljTf2plj84iQIzBBMBCAAdFiEEyAry
-0cRMFDoj9m/ZyvpdPXT/AmkFAlp3dT0ACgkQyvpdPXT/AmnzBQ//ciLDPXpD9piR
-iTAkhrCI/nFUDMBnW1tB5Sz+aFwFr/G9gAPXUMc9jBIEZskJKlSX85a1X1tZ9ssA
-ez/NpFDhkd8yJmurF911qyka29UsiPpXRrGlZPdTozNlmQDSJcEYrsFQi1FPJAhX
-aZWH6qBOVYlB4UyYsQ4EBxzEHfMuyuxXOXnQso9gVmcxEWMSa1Shl6OkhqiDiT4V
-TMJUWZfPV6wpm/2YpdMV5KXzcop6HZXJtfvihrOgjxGb8+DsEo96st/PnyzmgSZX
-jvjDPaKchZ4snl+gSB4/ZZZ5pP2Ou+Rh09pMozpq8BhdbTR/NHs4Lz2kDz2FC81L
-fwAMDZB8OPG4Qrp4jjrwjZJkgnKuwv6w82CC3c+SbpPrJCGbID+UarMUjO4UfJE5
-XyI8ZkDB/ixvjGKZ7DUAkWbpURV0vpard+4tPAqaHBq3cTE4WoDO4e/z4p4UnbEk
-Eulhs2E1HOlyj99IiS9Ha9gsb8zeLVnHHDpawBzaP8oqJik7vt1nZQjEtrSi4phE
-t0BUyn3nWdr31jMQOYD7W+ARE/Wd1Db1TY1+v1Y/1XbA2/RzBvta0741MzaPGi0F
-52oIR9KGiUL4tWALeWn6BR7ZtmjMbteYUiL1qUFGBlZ/vdiEIwWOzBUWlNc42PgC
-YAZbOMsBjWh0Dz51MBWTVJtASQvvBKCJAjMEEAEIAB0WIQTuwNuFjmbA2nBiCsB9
-vWrHTeKTJAUCWndVJAAKCRB9vWrHTeKTJICkEACtnQ61PlnHFtNr1pa15X5PQoNE
-E58koWg1WhrzQPwJPD0n60C7zseMB/uruJnX/lvF3JkgE25xq6yboGMzzPCt7OaP
-edCk4lo/eZ2ieeTHTSy0znGB/vCugIEbzafv4R6q1nFLxDXk/QZ1c40jDQPHp2n/
-KXCaU9z1HCHDmvuTxNmZ9U2iMfwL21TSYZtYnhtiYoq5jkfA3U+UIugc59j91F4S
-o7m0Eu1J9wgig/ZGZl5BbQeNYixNsBtKTug7ql1ZkynJwd6cI9n0fdMTJ8JIPVze
-8WJ0k+8otL4C/B+bnXomcJVaF70ZCKTL1QqT0Br1kxYrkxTUuXCPTRb6CD91GZGm
-ShhqVrmMACQFVbUf0QNoUmdQ456G5rNqoIT+GwTCwCJF7L8PvgmAMrVgDLilCxQ/
-mov9yuN0uX0wCR8A2Wfr4rnt/akmT7Ydtl7EbN7FCSxgTgRnCM+ALrBSEL7Cju3r
-lDJb1ZA3bnSQmTcSOww8GvAlXP/DvFOkKYxPA/IouFE7HT62ba7RL5mBnQ5Y0cvS
-37kq9aG2+4ji1BZoQIU3pTpPXoYJeIK0vNIPvPtjUeV6gu+wQCJw9Mcq7OQb+EUj
-nlKd5APRumPdNM1cz1jgPiQhySdofcyvA+z5WItnN1zyuJlwzLXRvbns/DCPzA8V
-7tf4BfXptYsz/xoCz4kCMwQQAQoAHRYhBMMxuj91+3I7WHN4WwbqoGbjl4MvBQJa
-54pVAAoJEAbqoGbjl4MvKNEP/0/z32PRoMLQXbFZNo/g3fvzhOIf6xtDWrS6i+oO
-oXTgs/k2Av5qlwg/H7tsvL+g9zCvdyHwcMtlYC7NfYYsHszDoY5uT6Xe0sPfFz1d
-mY420Cj6UMvM1kre4JF9qK4xQPR5JU+jiHS3x/aVYqGXcIVYE4kiaCdWQ+pnQ3WT
-4WrRPtiKv5h4LfQG3HNWOP2E6gnHRdve+sOFaWTVZ2eqh5Hu/sjxzQUzIpOqIWiH
-64jt1+TwJ94AIybq4Dg6T6qAacef4FXqfLXGVqJ45ESaVVd/lKc7yXwtvsoK+3XC
-zROnC1VU2+uUC9wplcvPIq2gyP9lE4RT0IT0QqllWyc3nq5AQv4ZIIV1a+OvFDOy
-wE2CpGTcLkGHpGD3+KZHwrCJswbWec5cO91g13d75n96O7jOA2iltwd9CVCNcYzq
-imt7/QAUXt6LHvjhDjPK1tmhaPbKr3nPPQXx8Z0PcqS2YYFPyeLGLcSzLQ4CsuDF
-gPXZl0loHNGc0ZZVyrETEVzFZ0jxoRHwVYAQu7YFOxAoxkox4DKeH+X2Yi/xZdN5
-LZ0umQWxieiaFD3Zo8sh5SDhGeL+rff2I3JK61bL7h1vdhQQuK6H+PWJ87ZRwL5d
-+E/JUu1nQx0IxqEDQJHvNPo5AwZRz1ZhSTmXGqQdpNjfBvxkfLteHzgbhHwAxGWc
-9mdfiQIzBBABCAAdFiEEhLFO09aHZVqO+CM6aVcUvRu8X0wFAlp3VW4ACgkQaVcU
-vRu8X0y04w/9Fz/tKp6oG2W3HKrsmVrjMXKGjw7MpPkeR7rVhmJ30cRgYsf2jJhQ
-6KszB4e29ZIT2QNWhu86cxm4Kph49usHrfsZiyL93IaEWxAPn3XGNSxpWu5oPbZj
-3CgcROSWWeY/i3U61XHD2y0azLT4GLLV+XpyWTrTJew4SEjhSbyZexVgr20dVzW3
-tly8fXG93yRzYO1N1YCI8I+QCTdz16XnOA+7tH5w76U66gPAat5XY+bbJcq5Jr7+
-pprbpZMhM4uI6FtRErbcZsH0LKJF19fFXNhIHezlLQvHT48e7BBYuIpAtz45PX32
-Y3jO7T1ME7zmCdJObJl5Wa71ILnJ2CIuSH9Z2w9KxYzQOexV5Og1g3s242uQuZ1g
-RxPQCprxN1j3ISgyzYtMWjMeTS44cCGvTllP2QCSfPlgfYV+cf4NVHNTKsH8gHbg
-QwWGAYloQkLKcjjaJT8bhaHIHDd20mBlVWarmV0+MMw/3rzg5+ZqO0vRHqu0lJKj
-Cp5D/r9/j2KvINAa4Mea+GtkK8S21z3Q0Gnneq3lTC5Z2/Fd9lzPhL0FvxeeHmlT
-Mbpm0CjLIobT2CiQLApH2PyFIB76yV186cwFoVX5Jfm4cX8zTASqFAEucr8dHsxL
-TK0i3/Ix1VN+ydOaWAvvOSO1uW946++eg78FQ/IJaN0CYcSbZTWx6JyJAjMEEAEK
-AB0WIQR39Cp6NEHuUS/QheeQXPLEKkBmTQUCWnoBuwAKCRCQXPLEKkBmTYBWD/4o
-NzGPdjQ9fIG/xFXGYidX1PdWBoERp0vzBbxJ3TM+5nZrnnz1+mTHfo6PIWRBRivb
-3GiJd8iTqcR8vmmMa7kDDKIvkIt4pe69y1XEZJT1CCuEUr9LgxSPkNgVrXqwLUKx
-l9To5GHAwQMHslhjMkEuGukDoNLRWZX5EeWeH28E5kUtTb1qWdznTSwLi6lEQc9T
-ndU+07EPSJ1mVMLpHUBXBiD4fTtGxYi+ELCTc/bVLcqcjn9GgB3dt898IwmHe1iq
-UjAhY+k4LtvwY8WZQsK/wJt5gaqQpxxesrfhK6giX6TKEAmk5cWcUcChzrOTgQc5
-6eXzi2cnSoJPns/GhE0O9GsJx1MQRkcLBnxMYF+wY+Hk8Nzaj73zo+iG2J9uRJOc
-xlVGfbMGCn3EJc+c7ApG7xBLeXiSO4n4c98GQR92zp/x9hgRQA1jziWnzIYEbk/0
-nyrhFWoPo6WMPiN/4W5b7JpBJQALBktRGjNbt8UXu86W42n7u2yhpaKlDZH7Khbb
-KWUtSha5urGtGOo5D8tQ+1+Nj+2ZfRVreGoew+oC9klPtilaAK+UQ2bWYtKrq/Cq
-PlLYUI1+NcmL//02fMoCqR0uQfhniL+v8N+KLjdG1osrrOMOHOsF5OcQeT8hE6zq
-QAbTo52dUoq4KHqorhrj+NHTA9qhn1r7E7MWDfPplokCHAQQAQoABgUCWoAGKgAK
-CRCGblQs90JBsZAKEACKH8rR1HxEjFL4RHV0dDrbZp7NMDLVmCGMlD1U/QORoN7Y
-RnaaXbFBNXX1M2zmcYd7axGrKWojJRF0flyn3vxyUG5JV7sRS7B8oe/A8i+yovw1
-GQt2SbBcilm9J1M+z7pTCensd9/nz1dGU6ncW4WHWM2PIAex4TKXRfUWfNcgzXxW
-8DkpOA+CWz6yMNm7qsns+gQCfGYiLVbBNNH6XD5Qs3ucOCDheFrZyVp4dX2KBNS1
-MjTnVcdVOOuyqbs9n6mlnZZRzMzGJVx8Hy3lVn4vI+IC4e3tEVcsU9sTnTHR9fSX
-D7uETecVCky7Z3QCDGAjF92pprC1eP6PkfIOMq5+Ex0Txc0blZvkTaadsRjLefME
-1UYI2PP49CXXRhdV25k6LdyFtCZRelqmVurCmE5H7T9VC33LgKsXp8y/cMe3FFNM
-TTuYQIvsJgh+IBfQ2WGGZ5AbtW+soD9AFMFtX1LoYbUlrSNYInd/bK0wEpgCL2IW
-P0H/ShOQV1w+OYQBAT+I58sOY1AsslDw8rlx01VNptmUP4/rHTBFK6kLtF8eGnBK
-EUZfnPmzbyGM3vYDd7YL+4FXGrIo9NeSkd9GmRjlDv/EcLsdjC4QB4zxCO/Fu/1V
-XQ9n5FtaMrJJLpOJOYhULB0hv/ebzeaxhIDPH3OXnxJTY9TL7lC0MaNMREvgX4kB
-MwQQAQgAHRYhBEEQBF7npDLWevrIyFQDxUZIELwmBQJaeFynAAoJEFQDxUZIELwm
-v0YIALV+80pKNm968DDKezK2HQYW48tQZ+kEsYJQhpbZbt5z26tYuvYTik34QL49
-kFRx17LyAUQInB0gDklrjarhCu+QS6TK7JCDOjipdf3+D2ACDniZQOg32FCFJi3a
-fGTFOIyqjsib68QUunLHxEWhgm1ixq34E31So33rUvo/nSX2XChogoIux90lo9mr
-AKcVsHkjQR4/HZcD3URgGVOAQfSlzlXcoknse4j3pn8t8rk1pzT7pcSPHZwitOTg
-4HLOjk7Qjtcwg6qwcs59Bpx6+w/uKp9zTD6npkxMSwd02nJSbyVjubHdLRF42/Xv
-izQ6FBTGRAK5VL4f2Il8xhvJfICJAjMEEAEKAB0WIQR0IN+GvOFaRY3OmXY5J42o
-EJ5iRAUCWn+GaAAKCRA5J42oEJ5iRBedD/9gmRTeL4XAODGsqIKNnWz4MBDWWhH3
-0vyLM+wP66Ult0p8daOlhhhd+pzi7ksF3FyJoeMEvkb6++WXczByw8g0v70QiQp2
-cwBB8gjFUBvRUI5lLWQMIYRpsFIn1+EYYsXpjq6K9hRyNeyF1/DThj/geKWNTIJK
-xCyctDgky8DyeZJvhmFYdGRKhwhJqYHwX6GRtRu6sCBzQqkYY5JoUtT9pThV3EXi
-vCCsdJR2VqDI3t7tbyrvLrxSXejxQuKRNp5V/YhrQzTbT2uIb279iUEf72lJNOja
-L+6L5PNcxMnD3ZI1KWsEqMGhrar1ZB+9MNCh98THkAA7RsKuBrs/rBeyREwgiZzS
-rx857GS2hG23zPGdb3Fk+egZQPeQayXsLNW+WdLoSFSr+Bdbc24IkZZ+GsJUo66O
-PmncfMscNhBAFa5ifxfo6Z3kA1Ta8C9gemIHI1ziySHtEx8YZTYbgdrqxeK2vErf
-QJufIB7HdVatFVcmDm/ExE2dTTJfk0rL9rshYV9UbOUcoxwRHeav/yUe8spTlOUs
-6skf2uGe5gpQgQecHp+waAGb111zlvtxnCzv4uYAAnQh3PTUTmHzkfLIDN7OK1ow
-Qid5VLD3cXbjkAV4CN4ie96tIVboLukzz7kyBm8ZP1MC6WG6tyW4SVOPQOOqVEOk
-nlTut1hE8AD4GokCMwQQAQoAHRYhBBvYhvJG/UkIedThUFoJtFdt6AgOBQJaeh17
-AAoJEFoJtFdt6AgOAo0P/23NbRwmgVAEnVkEppCWqZ8PosR4Bue9nWMXW6LJhoUo
-EJtbfvnf7MXQgt0jOFCn704wqiFb64GmAGHki5ynAWZJIBi9f+JwB9ZAONJ8nu4/
-HSBEONrMyOEpoNe0dvXD9aPgA7je+SPh+Yz+klzothZi5GY/xfHbA4o8oF8quoei
-s6KDNDEuPWKu/LPmmJBMXsx159iELvq2tdDw5vcpztZi9qWSkifx4Ljy74+DvoUr
-B5oB977u1JB63k1yOub/Bl09CqvonYloK5RsxnrRk9j4I4p/9OC9RDUj/ZswDgzw
-HJiLY6pHQc5OO/Wl8Z/FZd7R4GDeKk2we4+IZwflk4dm8RP3NEQ+/iyG0sNd1LIK
-QBGmGOZbkHFDeuA4GDeTXPm84pQ6ElvBS3Ntxok4wRxgTShq98XRh871MfAJV2no
-9h9ZYjwpJNYEwselLgz9/jByg1jfSZvDOC/lHXaltb5gsyl7korZoyxd5S6hkAdj
-0XrYxv+9mh6k6aX9O0RNt5aj2w2wwAKDoTDXrGxD/jQ1OBE+Szoi1DkVXzsa1rtb
-kxSGpg+eEeHcaddUN0XJQjOJCu7eEdFY0mwvapgnpMf0kCGIinKz5lxQX4xJmRg6
-XLz1ZHReIXya2yndPn0aYS8Eklavsggy468efSVXu/LchO5IrBgvJJNxtaMktulA
-iQIzBBABCgAdFiEE+4rPp4xyYInDitAmlgWhCYxjuSoFAlp3Je4ACgkQlgWhCYxj
-uSpyEw/+OtcrMCg1SrXatVa8WHPPhTNS2q/TZXVvsarpp06VptUW8NSqYOSzwfru
-oQU+/qhXn9hkmWtzCDNWPiN4DC88yO1g06V57fqtXqo7WD4esRmXv/kbtv1GO2Qh
-900YBXWQh4tkNZHJFKOeWarpOP/zY2JV9ocJKJCma6gQVBgLpXqXK9dCIDWAY27n
-tqvDwrALiEtT9H08NdLHG2kdJS2zF9V4rl7CKZJHBictYbmhB0Ew7EoK41bO1XFN
-D9HR9GLREoFI89TpB9MHHAq7S52s80CP+jdampJ20nTTuhcIHn8QR09gq+qKw5Gs
-QaW+W3hJG9ectJylSCVhNWmj4egIaLtA3cKnUrgNxm3licAAG0b0Bqe/ndnBYQ0+
-uVzqw9dQtjSMK1cKFJhhNWso+1KMrlJfOu7uG40S9IaIwD/i/KQkk3jOqmUPldCH
-R9sA09tIxi/C7CVbBz7TLtP1IEnwXQykSH4WNcCu3dtHoWD8gvqbJiNGyrBqCMrc
-lTEqLxDFqCqNw6j5IWSQXZIpOoNsgJHSAkc/RX9435Rvx9DN69NyHRcYF8WE4fds
-vjXl07XnOMkVUBe6LJQmHJl1Iu/inYeTu9VMiLgusyxaZx/KbHClPCjq4o04/+ki
-lNSZr4OATwhvDoGHjsyLTLl5ANKEE3PWvV0HTGEgbsk3vmbFR7mJAhwEEgEKAAYF
-Alp5wk0ACgkQTqVo/D1q0VNRfA/9FHH1LhxN9apci1BDWwsYX9kRfYcl35sKtyHK
-wYnVu8L6l/fXwc0PyElf0MP5UvyjPcNQMLZ62Db1rRosMn2VIvKXfy24xkcAF6u8
-XOU6QK8Dtb1g7pywP28vDFVx+FVPf+VcplidzECkxAgI875Tp8wsB/ARUV30s51R
-gBTfBDziwfDPyP+IZPjLUaPhcE3qqhUMzMDo2fXuTfux2/suSjOA2FSAe/TNI2Ju
-Xhjx1A73SSPcT8RSlJx2J+KIxyTBvaL5rhlZLOoo5WanrJh8+OxZATpE05SwQoyP
-sKssdKzEsfekh2T53g/DWplEKTTMKGOmyI5MXNny0Z/+ByfaCeSEE3B6B0tO23oD
-aWmuNCnQdkPEhjs72TtvHcxDjW8QmBwcQjHpNrSpE2D2rHi5hwC0iwVZwSgegE5z
-5pA75D3IOXAQDNuD1LONBR3hvq1B815ru2fqGexUrdVN3Xnv3EztYeCJFy7x+joL
-XYDlk2hWUxcB8XgiHHpYs4MVP408QSQhPTd0jv1lyIc1lOavcqLeyq95Lz7Bo54i
-ieKX4ASWb1sbSkhzhrisL3pVlVJqg7FkGA4b76Dfiuyeb6XFa3Qk8yNMzEeQabzs
-B04XVQXuP9RFi+kfLUJCXEVvTr4Jpa4vqpiiYi0mBJJfFBC0F9dodVAwf7t11tkb
-gCgTR7qJAjMEEAEIAB0WIQTGgHtXZl0/Qhr6A9o/fhkrE0m0hAUCWnillwAKCRA/
-fhkrE0m0hBNZEACZlps9yuHWIGY/Kmus+d6CwenTEENrI6cLeZlwVlTjYii8jBUz
-y++RJNtOsubwtUvlIiKK8ABckgU116v7Ur/CbRXbGO2urMR6MbmjcMr9uZi6QF11
-eOlFSdUAj5t0Q9DS2gRePFDCSoc3jPLd235N4zDntGTgvgKnRkkZOwbhPJIlPiDi
-RAS+LuAsULN+mPDDN8BXQtdEzz2J5ONDnK8IPU2I89gevROghVb/S3aQ25csfrb0
-3RAI/xuX6uSn96U9GcZSpIHe0Rc1JEJpddNDqgvyQkpB6jAPzvqZgaUjlz5Hb7rG
-ST0LBDgBELVHkEK0SNbXSU+UbDjN/eOb6vhZIAWP2Bk5Wn/S5MCBKKFF85ZDbYMM
-UWEsXa7ZCGCB/QURajhOKerWSoqnEO78BKul+N+LRCJ3vPNN0XFDnrKbH8hgMJxF
-ALFKrU+Pc1OYuhHYSM639FLD8eITw5P+pBLp4ZH3wyq5jwPqxQwvq9BifB7IENCd
-M8HLcOism9ooZ81YGOWdXriwjGUl7aASV1bCNVw59DlVSfG/YKsNmgnrzqd/X9Ps
-lLYQQphCUdxVgMDWHPYG64foddP6k/viSVOfDNciZRHYrsPodKLDx1iU8FHtGYX5
-ZtZS//E5ab+tJB1dji9W04bPPTpDYidbbcaEolvr6v6Qbee+Sr9qZIgmPokCMwQQ
-AQgAHRYhBHJ6DU3bntn2A5vs74R/XjeQzgl3BQJaebwSAAoJEIR/XjeQzgl3E4AQ
-AJwFyPbIcbn0F8ltwrkbmVPb6Wd3GdzkuaJWHhYUebtR6WPXrHheC3CZ8OTPlkYV
-XzDYIs6CJdyBsKWsVPi+xuDfNj7CQ+O30JBpOU2/jZGDeNP5F7QuZ8p3ZGeZyDW/
-VBYF7Syf4ALoQhncrDCIOqYtXb29UeE/awO3cJFl/9CJDOAbK/obaOcbPWnB/MoP
-pTeBhHbQ6mvu9x5RXHJ7ITYboL9Z5YXZqFcVYHJxjiFkjp/UNtPaQTytWkzSe3yI
-dPQA9oNCjAMD6X5MWEpMrz9oEjTLkYBeMQnLpV8bKhvMqhGXkxKNSEtuYraf+tWl
-KJLe4C10EPMWE0+KGs/8qWDpOFqniOFwtIhK7O5NtkJdGBi10jGkA2jp3o0dgrv/
-lYY86Qs5W2VlodGdvlt4N3ajSU7AeADQ52MXaACricMW8NY4RD/aEeysf73FVaBk
-3T65dtB7vY9rZijMsQdsceLhvFImyTqODixnm7X9m4mQIT7zh+EX6RqG1OjJBXt4
-pnxF7XEE37uihq0GHVagJS6tC41ffaConqbPKCnPDXXgZ2sfV5jCvPb7ZCBQK2HF
-8dxGF/vn+a8C/4ZarzIjMUdss1RHUDQRnXp2t33cL5DiHN265GS6/cY6HgCPQnXe
-8U3dHjXP7La/c3tG+XQ6dm68Rfnsh7JUBX2gxSo6YLvWiQI5BBIBCgAjFiEEm2hv
-FBRNKwibEPKtmKq24xoB+hsFAlp7Xl8FgwlmAYAACgkQmKq24xoB+hu7Nw/9GbfC
-YYFSrgAXg0nTGvCAyztBfgXDngoOuWnSQ1JF+dTP8U8YJoSNmyiW83TOStgegRka
-mnTqWXd+eddWWWJzmreP3g2gc7VROiqCusCP5e65T73B8TvWLvBEE0wLd+9GLMN5
-19+gaBCn+evzPNSTlNqx3x7QYVyosXyVxrdedwG0HIJ/7bBIok0y7YD/YID8bq3m
-+PEYfoJT4iLaUh7WkfRA52mxy5WX56wAbKPIpfy9On4HdjEFEI8sdqnKqXnSXBxj
-nS+gv8k7vO7msMbCukj9ptknxlcrKFXeg2nvD/NCclEM9wTeKXptPLuj+p/zXb1R
-33nItd1E3iQXyx9wgqT/A4Y1JkUH6XiCydhGS3UpGMGij7KDu6msXhZpRps7B7W6
-ooHc9+gv1tT8lA31ntctFYS6SfGLZ2tcLKGvX079Bl/HwkwLR3K0YIdIWPgdeAHW
-eLoWl2wtnDa3mzBapIRpnvNom2GzdSnlJ/DuQ6zboidrPkED9YknGY8dtOj+zSvy
-XYmjA9puNYldaF/548olgmLnX/ZpI4VxQQ15daOVqVS5byOVqC0sS63K4WL3v1ET
-J4UteM3xesfRFOMP4LyvbV44BqO4Zr3xp1A9YauwaRfDT+1ohXjOOCWv5PnUijGV
-uIfTgv4XXaORfnhInlC847ZTbrI0L7DWn+ctD+6JAjMEEAEIAB0WIQSE5yQypbFu
-nBrOjSQduXfNzwZlDwUCWnoIIgAKCRAduXfNzwZlD93GEACDlhELoqpeFb2+kvch
-PRWvPqMHPzYwk1BJ5x+m3B1Bu505KRezlE7pRu4RWsdQ7Mv1uEMand4z8rfcsYlO
-zdtbUEpNy7MkaZbQyE/ZzhXa4U0cCIauHBos+BkAnX8iKWcmBZT1oJm+U35A5qhW
-WSp4V8Wme8HbZ6GxZHlDe39bP8nLpHZi20OqeZ7Nfn6y+GY9eMo+2gMwIG3VV2Ju
-zmDu8/RuN9JMkTgD1pl55/UCmR9Gq9cjvVj3Sf/k/KPIwCGnzms6nqsFumoP8F4q
-3WlBIydD7JeDaalqP2nvxO4qzpgaSN1nBCoNrgwIKKh70hkm656gKB2XEHV6VXZU
-eayaqV+YNUaWlusFHRZlktuOEyIGHi5+9I7m5ixjG3LSZetcdAd6s6GpKH2x5UzM
-DDr12CO4YhJzR4jf41KuNVN0nBMOiHuL6U5wEzA+bsAjGMV4lrCG2A86XY4gBPrh
-fgXPnyK8fZrdvKyr/DXS/fRVkKh3fKdYdpgPn849ZeZMYQ8Ed/hG8DJHl7p8Y3kw
-l15n92L70MY4FbcQ8MdA4VBdoxMv1gaVgHXlwA4pF+99H22WxwMhjn9dvlvDoasw
-37SNmdXUH1xz/nrRGcf2iAs4DGO6WMlI1JVZ6Gi1E9xNRhRCYGLDMJVS999Nf0fP
-n8QqARuiM5dB9OLfXakf6v6AoIkCMwQQAQgAHRYhBAE2PihXKzLRzDPm91/LsoyS
-MzsABQJajbBWAAoJEF/LsoySMzsAXF8P/1JhOshcLPdq6NOOxo0//GLtjq37Qdev
-u/CqJPjyHFDPfJI2FdhuRkjrhr+1FSEVfuAPrYo+gdvNa10lSABvfVZRGW21mdQz
-5o2pl0bVTlhS7EvEOgemW18nK0LhLlVMvGXLOGtvZLDm9F5q6r7UXQDTKhJH9MHG
-lHhKQL6MbXzboBknk8F3w8TCPZlUfVviJv+v53esmSGhX5kWW3cKlQR3T7yKeR37
-d5Zp8Lfv5N6fYyneFVH4J2yYXGd0ycWDQ85Hwd++xpS999hUXEFcpsokEM6sqiQ8
-ws2DMjOo9WsUU568mWTPxeFZb44p6rchQsowLeNXnRFuk3eznRPSXsdQw3QbefSQ
-JEMVW//7oew7CLxSfITJTDyifLRok17UXU4QtIlCQjVi/dycU8C6APSMgq6EwRnu
-8Rtgth0myu8OCOiYf4hPoshph4eMyycCsV5L18T+WNOZrquQySNhS2WE9KL0g+fR
-9fw1PKWFZl0B6o6IfgRtnc7yKjDNJAE5rfjVILhwGeFtpkHi/Xxh5UJHMW0htR4z
-ui2aW8XwJNFgu8VZesi7YJheu9Y7B/eXrzdE95DLE+E+IffZxJBvfm61t088Ujsa
-DZYjbmAsDX3GpMPbpi2LIk8ZE38C1vhJZOxKZxG5a4RJhzFiddR5/jEDHjFgwivY
-S4gdiZIaP6vWiQIzBBMBCgAdFiEExN1pX6cTjyQqoVY4WEl+5R1ddKUFAlp8vUQA
-CgkQWEl+5R1ddKV5RhAAnEn/PNdNnrogU9/sVt82rGFrHtXHunLvzbwvLOm/8Ma/
-GDRspdY8TIfsQZ82XDt8Q3kKlGbxXdQ+DXnvs8loCj8U/EAx9TqU7qSBk8bQdjfs
-UnrlJJuYzmzrqXslo9KTrVvl0xvbv9QVeXO7FyrWr/g4DXKJGgn6vH3BECZwxlX5
-yKqFRThVGvVaHyeOLp1cBzJe2S2nNSfNshIpySsC4VJb9N6KNR/G2gs0VBK88qmZ
-TxaUWEC0Agmi/S/shTAm9+zNQU7L5kqYD9vuInK0LxzXY6+fZomvFQrN0A5Orw62
-cq+m4Wj/z3TdX8TuvUOaMWVpN+uT24FPGMBk3uz2vN2L+0+0KSAs3H8c8Jf8rUkE
-m8QMNvbsuh4qG8pQVjpimN1cuRKoP9OlcbllG8QFm86/gihcHF7wkSokyt5buoGx
-mChc8p3+pZcjgb0/RFHnExUTTIGIOu81mkdHzgqWs9mNdnCBfEzaNaIaRPqbjTyo
-81rYGx+Mtvq8FTF6B5/vOci6wc4xA4/9KAP87DBE/qKf8pAiTNiBYrL8IMfRC+lE
-2dr9WvbgRYPvtvB+iDCnbeRpsfTnq2lG+dmI8o6vFibA5EZzrt/FnhPRRSOo1Edf
-ffrOoa4sN8wW+7ChXBag7FcawJYMdMRb+2xRnrAvnR6YkMoGW87DNIRCdiuJLgGJ
-AhwEEgEIAAYFAlqJmwcACgkQRLa0x/EIOqeoQQ//eHG5F1b2004dASL0UqznWTVF
-Wi4IGCoE2EPxgmMN3/YVQU49yOiBOmZm5L64PGmaGFLokKgiotUf1/AZ16nLCiAo
-kYIu8JXu2CyOHuyctquZZVdNDEX7at1Ddl7t9XmVJcapnVVtPtEXo40CCLTpfdqK
-n9bB8VNZmjAtrBEQOlVI5ZKkCkCc1i76JfYDmupZcKxufmy7QMwn9dYgrgsfD4lx
-TbO8CeL4nXWe6zpA34HSS52czAjMrUuWqdkEyY4jpjDYmEMAnfNxMSYVVbSnIqaH
-3us5MhmDfHr4GBDevByFWmKjIeOWIMI4Z4Ly/mFnegCi979hw5xsPMjTyXtgPIUY
-60JdmKAXO7jbUiCeA8+AeOnzPtzZMNrZdq92L4P/bSBnvwgM+nuoybtN8Bzgw7RZ
-+pIn/hIMgWmLhggyHJ5qNj4OOycGgCNiUXPvlP99K3rhG+OpEEcweaE8GjL51W/F
-97TdJzPsVDNan9PXYJBPDT1q0rHSVoQzQdnymSKi6N/e6ew2h30BeQRNPxJZlYpl
-Bk7cZuRQ0nO1gtnRjq3V5b26bZx40UcK+eBxB6Cvilb6fxar1a429xm0dU8pMokg
-2UbVRexm4Fjsi1XFNSGLIsMfa0TjE58QcTv/p2GufRUF8ysha1qGRM8G69vfdrvT
-nQ2kraHjTj2+UxRL9meJAjMEEAEKAB0WIQQh8iIIM208JkMdAorb1x9FUlUtRAUC
-WpDDqwAKCRDb1x9FUlUtRIPnD/9AyCEWsgqnj/AQYogYmeLzhuh0uSvw4zqS4KLL
-tCLc5G7aAvV4y/HL36rpAFpvWmkCS97lFiXWsYp3XNM+bDp1ZEg+BsWJxQ6tisrI
-PXYyVOWbAMubOKxwm401EY1pznqZ3kPKTMaEeYBPrGjDb80LHf6/UIUn2EkjXFZR
-2uRSKr08Ni9MhS51Dyo9WVBg729Vq51TS1uJ5C/sKlXcUccNnH1PD1MPj65fGFjl
-ka4azpX8F7j0h1HGB8UbruRk/TfsRY2N4kMjKFA7g1oieUoV5AjMUOC5vEjh98HM
-y/QQm6tcjX2TXVbBATXjU2eTHRLre48KXNSgI7/A8o1VTH0k6EuNPNRpZTB8177Q
-WFJFrvff/YtcXxMhQNCfTtWkvMO8w4KqgkmYR4q419TEKnjpN94bcv0CdERtmyKs
-ffwFHm8JNbjO2sKYZl/DK1sUBq2Qu+xiOEoGwQgNaQIw9qhAuesGj5PF3Mg+Txwc
-AzbpQYEUiWdlfTjQJ2iL4VnqCPrB3ZcVtGogKWg5+Grnvg3QSbYEkgEdaJSZpQjB
-G9+Uk8pkuVRL940b9PDWvPy5hkWTDf/7fRxV7Q3mLHqofws25Tw6Ytr+Uor+xphI
-/O8PaGpFLVf4jhtKyjENABjPsANLwoxZXLFUPVXGf4uYi8kjm+EGjTBREtHk7E1o
-ncxPZokCMwQSAQoAHRYhBP/L0p86/tRTrkueMh1A+6Kes5YWBQJajH4gAAoJEB1A
-+6Kes5YW66gP/j4/XuHv2UvvcFEWn59KgyXOmzpAM0nwNah/ElYZLBPlC1e8MPwR
-nxlOyyUr8WlfKo82W2pYx8ejv8Bxpn3mtV0MnjFE/oKwijV2U9wTxYrXVu/7frNX
-tA5I0iwuU5Mjr/aOEygEg3MlPXBF7ERM3jrSq3PFHw2Q5JqplMVx4tYwbkvoYqEU
-1J05kZI3xYW99c8MTqmQ8E6pqFyh9WpGO2kCuO4nbCpyrcAXvp8ih2PF4xc7zvGq
-I7fImAl1KM6BNzPEFMiDTOKZ1zKLDp0iVpQxc9pyFKAGr2TuzLwL9pQHjj0TWtwV
-jfmJM0DhbvuVBjGkSXGEK9NjvQbf6JxQcjpj87sD0YUCRdsYnYsNRPjgpR0fkm9k
-0IEvMu/+lpyX4dti9xR4TblANmx4NV52OurNx26E5qj5hJUdCkgwLao8ygBIdWD8
-Hx7YudnQUbX/9ldTuaMeCkgn8r3QoW+vxdAsAxGCb2hUskhf56M5RXl8ZJR0LWEC
-jnXkLMd9XrNc6rfsYqL20vhOykUAL8O5Y6IFjYXi4jDgbkcDNufE3n7asCSpPYvm
-vGbzuivLp8wW80QPlrxcpVmzf8i+M9sRiG/8WgmEYovePFACK4qafWbDLh9rebRa
-hAxA2UqzVkcuVbATozJO9CeK3FlR1MdvsW47WTFNw6zpRG9HlAPlLqxWiQIzBBAB
-CgAdFiEEBjgyQepwa3vJzDuXKAo6t+NgeCsFAlp5j8oACgkQKAo6t+NgeCsiBg//
-YtQ2LE5gLW4jd1crzBgp+wRO4GSRwe7SWixM0khILq8/YkyXptADNKx5R/CU/R6v
-JPbOZw1NjNiulx5qY1atY5nGg8NS56dEVnz7ytwMdN2fgpIsSB0cROnH0ppg530q
-OJ+HETe8bzQYQv/K06ksQBWQ6+KdzQYZNGqeFNbF7gkJgGL3S6kfNFOs/Ntbx3gG
-wOzZz+4ZMfhpucnWo3C4kaeKMUe/EjuZE2oi4+Qm61rv5fi9ugo+XrYl04BgM5TY
-D77SjQqFGK6t0+jxKNBnV+gt0qW0EKw2WUsLxyJZ9ACPLNNdM+gvo5w9C4ONJLKc
-l8yz+t6rKwLcUbPo5SljDhX1vN68G+M7k0ui/b4J/2BDOyy2cBhdzxJohkG1mnla
-vpFFN9CmwkcSrp0AF4oA20kan71xcqHzwCcT9wcAHJ8QBkAaNAaNSj66YAH543hC
-t4NYwT1ICIyPvhNh1JCtymWpT+GxMPM7yr1P3p23ao8+1BIjs/IQFeMSJabAOx81
-wie/QeKwHSCauhvTvurx62KfNdy63Hvfh2+OkRQOhyRRVhN9UGL6bG4EAZB4gUzE
-MSLzRXeo1uhOMCUGNEpyvRJ83q/EHVElfWvpm9N3LUY2yx+reD++L60WDwiXSaaH
-cEfNLiZo2Fe3G2pZu1gipCzU9ubAx9RSxQZzGUJca3uIXQQQEQIAHRYhBNSlI9B7
-6nS70hhER2iYgizI8lL7BQJaeb+2AAoJEGiYgizI8lL7sEkAoM8zJ+hdvLrNDfIC
-3HINk2jFq25BAKDEOVNql0kU+f2P9ICIdleWofRZjYkCMwQQAQgAHRYhBBZRXR7V
-irywNsMfWYOwuMbL2nHwBQJaeb/EAAoJEIOwuMbL2nHwEt4QALLKUj5+l9MGShHu
-Ppuai70VSXqF4ZPC9ZzFG8bazz6SvMrynaWv7zT5dwLliAEXlC6YeSovJqHqz9XI
-7tGUUaM0OnzkN88VrJZHQTHPfCvgPDLX0lLZYJ7BcDCeM08pfoFiC8DsB6zNOYpL
-dlBnOHV35QS5C19B5HmYl1ULdVjtAYmNouPAR2dL7OICnLWzfh6Lx0cnx1k1Z/oy
-zx3XpaZfBRpqkQ4mFfYt5a+hm47ne+XHbuMymzstdu389F0VJyO4qSzTheu6r+0F
-ytnI0XhVPFw+EeRxP8etuAT64oS8yZjgqAxxVhmzF+hFZQ+Srlh86ONzWWRKWCEN
-6tuhSxHqKJBhBDPPory0wBewenhvBXopuL8BG0ADoTfAbNwaHqmy5vv4zlMTeJr8
-cubVZ8e49Xsktz1eINeKg8Na14QRxVoPEYOM5LOnJs8GD/xxBUCknZwkFkgh9JLH
-fxG7Xfb0t6V/okd+Q83lwSACvcuMD2FFa7zbcpHaMxDSIXf4f8X52tZs0D91VAgM
-QZHhzrPHhT0axFRNsYJFAeAQi0S5XnYNH3/lAU5/CEJBC2ioMIMgoPxLOL0nnk9t
-M1eO6eMlOywbOnMVfFPBG1H1aGdKlbGRLNojB7FL7hFDgAbShZ+Q4GZ8mXhqyQ1A
-afDdCEOeiGzZ4RBS5AN4AAmkK5K5iHUEEBYIAB0WIQQlVSuJ0zqm9oIwHoKuOuRW
-QiVRmgUCWnm/ygAKCRCuOuRWQiVRmpSOAQCH1KrPGC3yvZRwcZCcrqc0954KtbLV
-L5CZxY4mJmbEkgEAuzL/rV1pqBJLIeXUqGsPs5ozM/qdtSGuge7KI0UEswqJAjME
-EAEKAB0WIQRaWlqgsJp6NroqqNzmbmdsCUlMFAUCWn8s0QAKCRDmbmdsCUlMFOK5
-EACoGcbwfTtnt5wl7t6ucaHVfeGvLN3ULrWseZWOCT9J05i3YindCEA2m260Ar9O
-lT1ZAxbKHw3i2XfarSammhKec8j1oKhQruS/q0deswHemhi47/c8axN927AjpvKO
-u7y39tfH6rAYAZjCCEv0ladTyo6XCgHQ7HgOHsIeLqAoVAdFAlUhAuUqXgKnYNTP
-aWR2a+i39DSmzCJU45jEEMdv8lOyQvIZ7ATGXp71Mj/iGC6j6WT6ZSWLSLj3Wbzc
-imuAiE5DuCwvq/xQfvDi6WLxvkOgs70bi8HCpHSIHeBkiqNlc+n0eRRMMkRmh3Xj
-7i/wT3Hdoa83/fIOb/lxuup33eyuYK6peJhh94go8EZXeJjHbwfB9iz9hXUr2S3o
-eV18SfQWluTxPin6rpFD1sTAeMznyVgtiC/ITR6zenWmRioKaAV91hTI4lRfANRs
-A7jIBJFsTuWobjXKkuel0Skqj7lq/tME8YoRy3644pwX8hF19dHg3i8TXub0bJLj
-1ZbNDw9AsIM34LVuE0QwkyN2JQ85VW0WgnwORoGSVMIP/DoFdLu0hMYCnPIuJoWa
-uqzLuIO7GirFxgvRwAl7Z+2mqPPCDMh6z9RLkyzQ4F7GtuTSz6p6YG3ED1Ru8sJC
-Bw1y0D9R0sGcMfmYaG/pUYcEnU+z/9e2VRqm9dx6yq/1Z4kCHAQSAQgABgUCWntL
-XQAKCRBNcQpAfBCrybLVEAC4198+QSnMkz+zZn1L1ODVnKzlTErYRymtuk4hyqA2
-kHO0nY/Zu+pljUQJ9HZIpLGUiUAI5ScM3THyuGW7Ax0HGZSUS7Ucxclt/UzowHVf
-/NV5t3cLoIcLwGcrrPCbNf6ixHYfsku7VaXxM2zCmxT6SVGDweNciCcN6GP4APVO
-QT7AYY5/Tf2zb5fdfyHkodWMrEE+FRrtLYmmB9THeVr0ICbIw/sEuTR1inNjrcdk
-qVmnq9G/ubF2qoy/TfnQ5htPwJjuAc/3HCrinBrfapsmRYc4NkzMoLtAsrThm3Mi
-o1Y+PV09aBH7rD42CXNas/wDdFPRA553/YVyzBXppqkEKgIkM9NGFiSsZ0ndcrN/
-Hj1WDSOtuvuzADJaIAqBxLhmqxuninpYbwebJ4M5SuVGNepNnJHnpZ9ojJ78A4in
-FWxbsCgsXNY8nRe/UJilIkheCPu4SPRsWM22Zybff/8TFY/IZ4c5+yGXGSJfHK0C
-PjyAlMm0gjJ9h9E5EDWiWuHdRP67b/UnzFhwbTvDEoOoWGmpGOLV6Lk3K8R9ZuHd
-fe+alRN57Sf7R1mgCOFSm30dfRQWRSHULsTeGYZPe9G5LW5zlFZJZoAEQXo4S37x
-4zufEtSBwq8OEBpxYEiCc5eHqf2uwD025RMRiuqBFZ5CMtSnL+0xAcakICcQAY2Y
-ZIkCHAQQAQoABgUCWneYCgAKCRBuzvCGKqfnWJiGD/9ocXCrFAN/wbbt7zvPncnV
-b9IWnSgr8R2S2u4J97nqfYALfrLgsd0jDdcAy+CDn0Fe/BpkViPRb+uSivSHtoEy
-x2UzAKMns8ropHrpoYTLulrY4OCgklytxMydQRdFwVkthxx5kXcmNOCxMVCcjVVB
-fi7bpPEL1bwDzfPd2SZ/AiORGKSrIEBuDh0scD6fHTFodeqedtx2piqNLNoiZ+u5
-OXvMiFSKSWVUI8llyNWRhPUV1464rZTfxDVDSZLU1CEbN+hNXzSUNs33wAw3h0T/
-UDfGaMmhbkZG4ThcfSvdqUci7YpMS1gfVAm2RkpLakHEPKte6SdBXNGEpdB3Wwh7
-UfIedQw0Ovtj/Roo2Q9kKErtrHODmvIbtNHo6WEModhiKfm3CnzUl/qmsn6kHQPU
-js0wEsq/tdYWpK20oZiI+JySbEkNmgaU/9/L+n0NoyzYCGdjY7ANSbteVwlAHFkB
-PYvGflwXz8hK3M1dmAtmjUJTqGMOHldeeH1hROSpZWknvo4tUbJLDhrK838GRFjH
-DDl4MBnU2XcgNQgxkLMKOvWnxlYOJrUgV57LGqtSOaKmj6AvdHTBnXzhc3ZOCmc3
-T25Bw0Z2wD0V4HdUB6RZ/Pd0ZA0VHHsr44CaetmU+NncTV5/fJ0RhwTPQpooCnZN
-B5wN5jk6WKxRypi81Vmj6IkCMwQQAQgAHRYhBHfdobaNBHkqj4XYVSNeXIz16N/7
-BQJaeGGdAAoJECNeXIz16N/7G3cP/1wIzYa5PoDZcaCHnj6qPgifzneYXreLvlit
-+8lI5EK/UYfwjXWnEVrsdQ/cxGjsydbskK2czRlbqZIl+e5LB/8eTUB+EqyVWL7v
-ER5DQX5ShVtwtwLglkSfoaUi76bDFReGm/+XX+ytdTtxXu5k1zAtdc7/nln67zcr
-A62Iuey/T9DAhGZTBIrlNy5vLksGRD2ozHIqftInDt5I9COJ4SWq2EdpEqlqkAlp
-gO7jqmQxzU6skZLFKExK7uPJD3VHYZ9Tid5qkLhEZkchvmZoA7Re+nKpd7i/klKG
-cwOtetOcjNIpx7tMpHY14WuBUklAW9qtN2tTlRny4HMK034d7spopbrRAiuHXoVm
-Dm1pjEHPI5KiXLVsL3u+htByn7/cSMa+q1L+5znaj8/8zbf8j6zZVa/J3RDd2r7g
-ScEl9gN3eQAdV6jWIh3Z6jFSgwGKgpMiLLsz3D4jWUIhOpqp8JTSFdUpE/cUDEe/
-Ie9IJmelfWVdl3HVdsT46AlwPpyxIFPuOni/R5kR5tt1ZNvWY3uHFSpdTkDjJsb3
-QM4V9lgj/IT3WQhCGNtg0rU2Jn9SSMdCWGhkgxUIwBGRjx9UL8lLkAzs/7EGbieu
-1cYWOAktGGDn50FPxaTsTbbke6ZsvS8A89/s4fEIHAL3gacu1J/DJsGBfaPZBN+I
-H+6aLpiEiQEcBBABCAAGBQJaifP8AAoJEBMLwVBBQbcsG18H/3yzaNImctEDAh9P
-BVOGjHxDaePLSiXhjxMpdlhe7md5W84jMkYr88VYiOQir0TQ6gGzZbfbbwOoU1xw
-zTE381tc1rwoY9QdwirBPRUUuFMx9ouQRncTjOf+vBmWPkZuAhm1IK2FGFriB9UZ
-Tzxl7demIv0W5RZ13K4ZsIjChc5bB9DrY89tO2Ag4ZMiiRgMwbO74ZWRohtK/H9O
-z3WUY0eRUoR4AE4zjzCfx6iB57Go1gUA5K5uWvKFRSGsJlVQKegJFLE+6WfA15BR
-FrfxrNAy4nKlzYX2agMUoOU53rlQmriyIV0WOPbERWayBqVYNq1IVZmuV0wZlzpp
-WKNOgxSJAhwEEAEIAAYFAlqJ9CcACgkQtA8xpAAAKbq5JBAApuDnnnGeYVJmfhqL
-8ticgIbaW1QfDtTsInTADWee9ravP1dHkBe6hTXl8sEO44QBJqT2a1sw7GiTHemv
-odDbRUqOp55+W2xTHqwwcM9HwYxW/q/HPIgOVYmbduEvYXB/7Nn/S2SQogD5yRR1
-DFwSiiNhRCKagOvb5CsflsATjRfEFWGkyVHRvzfTE+6TkWNWbaiszdEfpb11GoTc
-F/AOMivqijmRApUBnltrk/uuK6Q+stx83Wr/VSP55VCQzeUOlnpM17294C6/DEUC
-eIL4IbISBxRhl6GNaLt+K/HY69/R8csQpFLv83pxjocQ9niATrf2IRjQbjtV/dKe
-/6yRx0op1ccqbcZWJ8jeFXse5nyMVYEUfpusdA3Eja1dmuRZL7WxdvJiYPgmYkbf
-xl/aQJXqCokMFQJ3NhfvfmFGnuZkObLzL6HOqiY5LTXyrp76QxqtTTnna1vGq5qk
-b8zwo137DFqTm3B6SiiPbpa/g0i59spUdCdM/+l7WW3/k7HYgw1MjPoOIzjjesgV
-zqF+tXDc0NTHXLsXnFhHUzroh0HbE60jUu8XX7PMvVr2RXJxIAJFkj634EVPlGRI
-WIY586ijBWyRiKcwbqSUb7WPNAEDt0PUZhBuyaqJ+PNSLxy4iqkLexES7BBsY9Tu
-jwM7QV0XwaMkkKoBTv393gjbSFCJAjMEEAEIAB0WIQR59zCGfRby262nzYZv3OSH
-KYX4RQUCWnywvwAKCRBv3OSHKYX4RczUD/46eUxDhk21XhVg8vrzpfkNHRBthN3O
-ydVXHZ6gQYFjFgJJbqiU2tPFDTsGsVyznwRrtFn/qFSUi9k2tlZTvd5kCbQrUX7G
-EhiyPyrFEC+DBEfGGHn0x0zz5ByCWHNBuHSf3OVjuEJC1EyqKfDsKRa7/v2PvEnR
-HMBraz6+IEVEL742BieDe1stPyqi/ZAgM9giTu4yio91juDrdt5W3tW0+enCzLnx
-/q5wZDcv9eooC/KJxPD1KwQuHH/cuHToEYBjt5YZJNJxuLfyl4IdUmwbzYnrA7Tq
-PE/Z9E60r5ct0Y87WCfKR5+NZqnOV1rR/sz/cTYch/H6AbANtU0wX8io40QQ7UxZ
-nCCGpJmmaltYP+HdT80QkC+ozvPSVTBliofYvlQv7tiRicIbOu5u1qHKZSK51PIJ
-/m/2mpuetnkj+3B0hSDjVYC2wWkQn/PVZY9SmRyfaA4vjruReTK5SYJpECuZsAej
-Xd2NSCUuANXwPPVdaY18nkQ02PiWYQaGJ6A4D2P/3oWF547qvdwDWy9tuuB5n8JB
-rhjRuJuIv835X+hRDp9nj2+7eC0KWKwHb0B0GRqFjYBF72UULPSruunq5oi5c3eU
-PmIkDHGvgbCjEa3VekqrUPggE1pO3Bk4Z/kAcc50EdtksipMphkZ4jUonlNAepaI
-ePhvW+PL7C04S4kCMwQQAQoAHRYhBIRnU8sZITFCxW3JGPXIPAXZzu7uBQJaexou
-AAoJEPXIPAXZzu7uH9AQAJtnxaYWOKeg42lXzaKW2tls+qRnKh9adYK305qt3Grh
-dlsflGiAzrhLZBh2TFvztl1rjFRYsBBwqNbcFBy4B2q4LDSk9LCXM1FDX3g/i+xD
-zB1oLCwncGdHKacsT3sMOcgLeVJ55he33eZJwoN2Ul3BgY8Opzly5xmf3ai/3fiG
-LC047g+bdTeLl6D7ARpxL885MfPAnj6N0/U2J15wgpZ4rvuL5prX8HMmiNhHawSu
-nVFH4uWpYcUhgj72Uh290qyppM2xM5FrBcDsGOzw2dYsDpXppK92SvJx3XARlPJa
-6CBwd1AxVDjkaPQxAEvBwNeaTFLqi5Diz+qD529cForbq+5VKLyju6TmkME05PWy
-QYLpGxmq7bed5OLcaaPtd7KWDwCBvhx08l9TNkEfxfQE9BhlcgldOEIpBfNlIW3D
-GFWnhh9dZQX5wkE3ESUKJpvJMs1GiyW4IrGkPbImEydIaG8U/Ce/ZA/POWfHRjJ+
-oQO+Ds/obU4bxKG6mv1vQEflSXdVoaV/AFJIz5ogJLlY8jqrTq+lsQeXFBagXmcY
-/n/w+9cWRzNS2jMNivXtVP6v/4CvVHxO8OGaAvna8M7r2hVaa5Tk5OlwC+8IvtW4
-/Pm1RUUfLA1z3G6nM4pXRBMvjn5nX7JCznMStQswMZye+ifUBnyCrrNNI8OXRkzS
-iQJ5BBIBCgBjFiEEZzHdwoNXvsOONCqvvzNCE/XFygMFAlspcalFGmh0dHBzOi8v
-d3d3LmFsZXNzYW5kcm9tZW50aS5pdC9kb3dubG9hZHMva2V5LXNpZ25pbmctcG9s
-aWN5LXYxLjAudHh0AAoJEL8zQhP1xcoD+j8P/2K3UezGNUrem3GbQlYgYoma6NWx
-SQs9TiZdzWXZ+OI1ScsNEkM/5Rh1dR/pPCuNKcACRB0csfYb43oMmDlKV6zwQDuh
-27XcQQMdF6Ol4U9g58ESQO6tR/2rKMyQaraeipneHhr0NvtOg3oMg9+9ISZ6l3Ky
-FdRn8juAybWKlFYeLWrCwAIAHgAkbertjvR2Eqv1ZSHbaICUBuDNCdk9kC4kkHGx
-rge0ygh9EuNJt36jZv/abFa9KeIgAl12ahGh9ZszGPP271LdTkhfsuv8WNJGde5b
-awGMb9ruFlgob1VnphTeAAcOUDc/03ott8Zap2Zu3dBcGX1q2P/jf02EnlQlyYBR
-wRvN4steTGNbGW6dF8FwDU3YV8IQQqWu5Hzgq3ryVjt4wx+vAhPEUxlXeqKBRueb
-A7+tKZ+HG4weXIH1QeduADwCyFIW4R/cI7WeoGO1fTE1/VJiYY1wo1Jy+6mvGRTM
-WAI99v0nhpHZTijV3Bwn0H6gzQb+YS8W9ohP5ViJksVQ/KaXC16iMyqyD1UAisQ9
-IY1ZV4/7zjF33ug12lLnN8ZeP928NBitHaLuV7+dXYrkFhZpOZvuscxTHeOHE3th
-aPaZ/tHocZoHUDcJoxAB8i3VQdLkiV8cekjhwlmJTHRELtaHrWfd3jt/aRQGiBZh
-rq/+TdANT1IzYEoAiQJUBBMBCgA+AhsDAh4BAheABQsJCAcDBRUKCQgLBRYCAwEA
-FiEE9oLNzDncD+rhFiC2x0bPqedPpLAFAluJahMFCROHKqUACgkQx0bPqedPpLDF
-7g//TnSAqepaRO7iq4J6ILOAg05QeOq6suVUG1Vp/tAXNgUHTVw0AqxoLXLpymee
-JsBOum4vBYdy08+hJe9JEv0lZ2BKnzMLCdtpBfKaOApMO9I33R5Q/NRS8uSafAX2
-KfpcE1nTC82H1kUxIha3seGZ195hZfaUvnTed887NemUtprtNd+islDSyiMAY8WO
-fqSWZHUnEV9uTv2eMQZndcfLOpOYSYjP+ua1JuIRizSiVsInSlIcAJ9UryFDEw8Y
-7qHiVfkvyti6qWIipK4lq1CYeRtI8ST8tuvdK0kGH0W3qowZNbBINOIoXVZimSSl
-BgcVIaz/5SY5yGCOyqSOYcaegAnBBJx6XJuAM5ncUadPFWfSMLLdwhVff3usX0vd
-Ijz1Yvp+vbM/KuMKun6o78Puiepz9gZpVHeLvYZOi7gaGe9LyIv1u7XomV+pRJgr
-QEzB+doBlifwwIubuJEQhI3XEnqJb041xyRhCZC34pIxQuuuXwObXp4F94KIqRnF
-RXyFNv0pycf0BgMv707PV5w+RFs4SGpqhF9r+NYAC6bQmjo1mrwDsmvAp73DFzMm
-Y1fsO9Swcr38+XgdmtnlXVTnNHD/0m7nOuGoi1ujfKxosQVOj6ISIWiCsrsORsJY
-r7PZeE2lmkuNqc+vYpB62w9KBPwcQCsLmVeGwK+WemwW0kqJAlQEEwEKAD4CGwMC
-HgECF4AFCwkIBwMFFQoJCAsFFgIDAQAWIQT2gs3MOdwP6uEWILbHRs+p50+ksAUC
-YO6OwQUJFxWn1wAKCRDHRs+p50+ksEMzD/9PoJqIDgBVN99PCHpmUwLxMJ+aFIC8
-0Plzq+4PiSRRUy4l2dZv+ZkP5XoQ1zMtnvYJXCm2HWX3tscBuA6BEWr6aeuamS0b
-OdDfix1PqyjLedMvUaKBP/NlbztwgkLR5EK+qPoG9/V9oPGBQUVV2J8Sl2vK4Bc5
-pSxHXFd7CkIRNJviI/hLcp0i9xxA0HIOkxPTM3g217k/S9n9Gor1FvDwQDxan30V
-p50M+xD7Pyt8rHkztBxZnd6JMokO0zRXXG/Uf87xIyiGU56xsueBDlzpfUMcUtOd
-TQ4Km2XOvcNGMVVUOTFw4csNvVhwkqSOeF7MbEVi+cK2xhO9olaLeDk+bfuU26M/
-kqUxMMvWkhe1cHQI7vHCYdIx5dq4sWc9aF05rIVV4SD9+jblXzRKMPEuRjDfolTk
-q8tNPx4SWDwhJAXOkIasMMlCG58hzUz4urPD0NFwE6hySmgcufYzmIm9SQ3n4Jwq
-AB619/3JLRSTfKmZkvWKEsKhBfJng454Al0Tx2+fEvb9spBYSNGAT3WsfkafEYpr
-m+8kYdafjL7NXXwoxMZDupJFO77FccRtXhBnDFaHBMopOJt7tYRy6PUZO3CFYsuD
-kUyWsIuLKSRoBPCFwUO6Sk5hQ5LkBI+Htwu43hyrJutW1wu7KsXArlew8Nv0UhKF
-gl1f2/fECvkryYkCVAQTAQoAPgIbAwIeAQIXgAULCQgHAwUVCgkICwUWAgMBABYh
-BPaCzcw53A/q4RYgtsdGz6nnT6SwBQJhbNcVBQkY9tEBAAoJEMdGz6nnT6SwHj4Q
-ALO9zPt3xA9ByEtn4/30OAC3d075rT8c15iWyI7+5Pf8QxEs64ycC7MvUiCCzAXX
-nPFmf0a8sJXMRqdA8tKyG7prw9KJIPaJLfdS8G3mx7+YE15fRzIANt/dpd6JDI3i
-dk9EIWNd7t8WB/+llqKdqEjwVXDTFTG71yrTJOA2WvUBbFFOrqIp3GIJmjHnCxn+
-gFELvlnIa4ZaCawwKGc9ACBeNCkfou1lh4B6uUQm5ny3vBcKHhtnwjDaRbRNhGnr
-42Z25XMWtjjk56IIlV4VjmAnHJ5dBvqlBqoGc28BKcwIo8WCX9MaWNtPDpmoEfFC
-TrJJFgxujK+fcg1WM0MxL7V3eHWNEiQ2R7wuacAb3NB/ySeHrITr8Z0Lrz+l0k2z
-3nuxjgwoGgXcpWPCs8odAO1yJOUkuZQ6U+R8kA24W3OYP9ZZ6ki571H/+CmW7V8R
-YBoBHefIVtrQXH5zY83op/ZkxrpnXrRCfFPPE0EZ1/LMq3NbFryoAg3i8BwktiCz
-n2GT2esW0ny0p0PAulj5I2d+aP32B2+s7gYY24Ags43pVcocL3ACmdBiqCI959cS
-PGnntjxI1oILgic98vfgIRQsA+6pKjj8ao/xFWr16LbIInJK3wWos4lWgR4lIYOg
-dJJLFoMEA3ezaBqilqUPyj7Trp1/pgDUUIfo4MNP3sSBtCZBc2hpc2ggU0hVS0xB
-IDx3YWhqYXZhQG1lbWJlci5mc2Yub3JnPokCVAQTAQoAPgIbAwIeAQIXgAULCQgH
-AwUVCgkICwUWAgMBABYhBPaCzcw53A/q4RYgtsdGz6nnT6SwBQJfF88vBQkVNFxB
-AAoJEMdGz6nnT6SwHc8P/3PQqqcdWtdlGVjdxdFUhr+x/yJYMYB35EZHAzDVVVzc
-ko10YUu0NQ+MrD7jwUTjN4KWm6r+wTArTm7cvI1f5hcZpgwsZ0g6TK5UK10odvT6
-/Y/aACuesTtD9VIWX2fZJ+aa9IzB/OFpJwkErfxFxTZDNU/vH518VlfKY9aFN88O
-NYQ5r+9b491bpbQSyvtBIKt4odax/EkDwzS+uoW183JVKn58LMbaj2YCy5wuKHzm
-YcWzDr3E9Yk2WUJv2hl8eD5CwI8ynrkqNnngoIv+tww9f22+aG7o5Wx1hWDGPSBo
-CauXjoqR9Gv03hIqXWlrIi1FBz3iQjJK+sq0bw34ZjPlLZau5kt8xO77x8W7Xcjk
-0au35ZI41upCcWmKH0lIwPduKnCqrFii/2WAnWew65tc5aq7nueEJIYaijrnH7TR
-siZMs3aqr1K7uSSe3QP+qO4MlNxmdQx/t2AGlhhtq75Z51bsRGe2J4CHTqKWzP3b
-adB2LkbKqcFEn8sipV8ga4w6uI071B5+UJLqy4o7aFBnVogh0zTlvtxXvwOHIJQ8
-j6gXQg/B+FbUGmn+8hPgxLNvYu81MYso1mieWid32SiSV4QX+lFUyqIVZ9UI701p
-ljONQycR1zeUQU2Dl6Mqz7lHTPofVwAAyKtRkrgabG7cDZwJAhIEGwaVgu0f1gcj
-iQI3BBMBCgAhBQJLxtLQAhsDBQsJCAcDBRUKCQgLBRYCAwEAAh4BAheAAAoJEMdG
-z6nnT6Sw4w4P/2Qb0qUnEE9lNd4fAlJOHoHpCCY0DA7DvTrBcyZqyqtOzzomFqGY
-iR799W9DVwRg6crCuIODir4pzn1WJG89qieSfU9LS56ObrPqxs+8Rtsg+hI/f35e
-I9Gfh87p9RoE+BDm9i7EJSuqkWEap1aXBSgz+BNM8Y+KBTjVSz2gjuiUXNT6EDMh
-O2+R4VpZnsBf6TJ7FHFkbUy1ABc4kgYRMSzrXoikCussrp5c3ozgFAiGwWl+cHYI
-kwE4jn5Jy8t6QOsidVDRnmc19+cFBtJwuHiRVvqoyrlO7qbEo0Cf+Mp1nd2pKTNd
-y5hLTbKIkPJqAPnArVjMfXOEX8cGFmzaVdOMQ+OTDuAeIytAJyT612r8Gn4zMHxs
-BP7n1nEqmDK+GmjWe8t5iFJz5Usw3GmapDWF9ErQOy+lF/gOLauERftHZ245auLG
-wvAWpHbselnft++Y3bAL8UUxDj+C8OXVh1SoyZ3hs5w9yKkrxh53xOSU7quZ/Fk4
-0/3y2C3uE+iOqrLXeaD8IG6YtfzRiYLVtFo5bza64IrLL9xPP+o3+e2p66CgvUwG
-HaOle1nSlW7XvRbvj3fmk/YqDIuVsxUCuxtlgsg8oEkfCT09Z171fVrXqLPAqMu+
-SyOC+zo/OcPQPWHdu1+DZ/G+IVPmFvJzoHYDN7N70n2lZWINGAPygj8+iEoEEBEK
-AAoFAkvG0xEDBQJ4AAoJEB8vhBB2Ll501ioAn3itqtbWB66yK9hkgGELiaWee363
-AJ9FFbyB+7BZ4x7ABDF944PqheONnokBIgQQAQIADAUCS8bQcgUDABJ1AAAKCRCX
-ELibyletfNvGCACLwGO4itqkfBJy7zkv7kD859s04W/WwyeVdgLc34zn9ZtJP9YX
-FatxIRx3epQ65PfLFvEQFRiFZEbf3wOHnQCTuYh2IDqQKwBH/EKnBFu8blg9429W
-eWF7kSlmFqvHxj9un2x4byl8qE1nV/ZWDUMybnxS8hLkbAJl4z//ZrZQYUUh+XQq
-khf6VYrPGbQz9kIeKOv/088nMuyaN3bq3Jc5H+aASeuJ0KRV1254HMFieTmpv7l/
-yXAYQC/EZLxo+DfKGmRhsGlnUIB6yakmZroSRPOGuNLXFZJB1nF6oVKOUZwOMSaH
-FgvW9PbIEml/teSPd1F4UWIaW7TTwXs6nErEiQEiBBABAgAMBQJL2IW6BQMAEnUA
-AAoJEJcQuJvKV618BQIIAKn+P3daDp8hXiaPNDqGzFRDKEUUqX6vXOHu/4rzDjQM
-LENWWClg5po8dZ5AJLoofHruJRINmCGJC7AtLc60CSyAq25TNIaCcGY5um23RzFf
-epoloNd2MbNWK0G3z+LxaYVubJa6qHmby36E1kzJBxTlNn1oFU0kwak4cQyeIgox
-i7WzawyuLZDm1ecdYiiPT6FWSO81wqwhwvAMKIK2PMBlHuI1Vo5iNbS7EETenFtV
-A8J/vMWy2mexQ/A17DYVxXHkVpTuv7xvuAav8h+XGWRsMfuvSKqj3s0HRBY4J9+4
-aZ5+826gj0aG5OYjceXcxL1SdWS/3GTgrjldemTGvLiJASIEEAECAAwFAkvpqz8F
-AwASdQAACgkQlxC4m8pXrXwaawf+L4m1/jk3xwwe6hcx4TCUxCD6+nl5LdZUWuu4
-0sLJ7K9Ibm+h8jS53LJp0w6oBI4ydr5cSQ0EZtFNRFZ7GgPnv1GXczQEsU+qwDTp
-FMdH++QbnICQBv/WvZvdqNCHA4IyYjoaLJXDhEc0rE/XmmPli+0uAEdPLph218TF
-+5zi8SK4A9IxP0ajMc0KInDI1dD89KfmeFIB9pg4oTsK17KOlX/gcHYsIDoh8/ZU
-Y7I41NLArMiY7lTtkt/GtOLkiezgT4jBAIhJomzIRuHQDRedrvJhVRHF6dam9pgG
-9Coq4T6J1DFtTvtnQFG2+qtwPC56WCEk5Rngq8tPqzwE1vmsmokBIgQQAQIADAUC
-S/t10AUDABJ1AAAKCRCXELibyletfKkmB/9EOMSoVQzFzIBe2y+dyk2ckeMSq2Wb
-y6MbIM4rr2Ux7+13ji6MImyq+o/Y+OPV2FnS6H5HU13qYIE++IzS4fqUnhAOirxZ
-GB8WrTccYfEUB7YJtNpltRrtpEe568fNnCwCSw2WyoV2nlerQ/1z+u33VQ1b3djX
-xyx52nq9IVUhxjbSPnHFz1D/FuMEipwMnvkybqH7lmXOAPosO7CDa9DZxZJxQYUC
-7wxHNw+QJ8swFZ1qiOVdEJVhE4DZQjAeSda18Qy0K4rsmI9GrM6jPudEN9i9HoBB
-IsJoGyMyd/18x9139cdo+0fwMnPmqWt2ZnhrV74HI2FXFAv1PWxYZOFCiQEiBBAB
-AgAMBQJMDJmHBQMAEnUAAAoJEJcQuJvKV618zloH/AijrYm5lAoK67D/KvLzH9Ng
-BVueG5BoPcddl6LDsVPxtfnwlA0aFETpxbN73OIj1ISIJD6fwn9WZdxh7NdM7BYQ
-1IG7c6QTiHXfcIQ2fKqAmGYNuhBMpumrjuOAekGkBNUyctwOkqaDXKlcdQr/XOjh
-1YGF01/8Qrhp3Ms4JKeVhzj/iSeQCJoG7LrmgRhV6hv0WiAYrqr3EgV6HOlE3nc9
-yDMjctJ/4jeBoeU0simaq8sA5krzxmyeJ0I+EDi7Ruv1x7QU4ppMbM03rMNaX3mk
-G8HGjL4mCi+nd6YjU5U1b5o2orpLK3dZ1KqLtRc1puk3Q+B+qgfNTxr3poRhy5SI
-RgQQEQIABgUCTDwGhAAKCRA1PcpWtLvzx4+XAKCCMtLHfPOWYBGBeJ+/ifxpeKM9
-9wCdG7GQd7oKxg/mPW66pBjLlTTI4lOJASIEEAECAAwFAkwdvg4FAwASdQAACgkQ
-lxC4m8pXrXzhpggAuGg/83kxdSYtbODmOVVf90HLmdFWbWVjzIPaBX9vjXu0XksE
-YUX9cwUUx39muxe1QX5amYRlbTI8MVUXWtK9WbCAXgNYEeV2IM7X7JeWv2fRYQuS
-FABQ4AdBtyFcSHuc6C+VRtFA7iBKm9lv6dthrNi8tUmQn3ocrHP06ZSHkjkh7z+R
-201g8YsTdNsluovDA+UyWAS8Pwc/67wp3d7FqU4wbagiUFEaVp6glghZDPxJEBAt
-VHCaPiW7qIP6ahNL3uTe56SQfrK06bP8EWAIHnZPb/MVnNRY8AMVMrJQg4cx46e8
-9Tqk1P08Dnfg22ER9PmcEvvmu7WUoE1khdNzS4kBIgQQAQIADAUCTC7hrQUDABJ1
-AAAKCRCXELibyletfDbtB/9eVixiiHCiqOtfoinDwn4xB5Swolc/sZQOwgxEkc9u
-zXV5uIS80TtVLCC3oHB8sV18UodaxRu4qwFkNu6MLTokwStIdAoKaUY3Oce49Cgh
-eE71pWKGDrwKCFBTx4kfrGi0+Ciz0tqK/VZd8OG6iLHi6PlOPh0MJAZIXNuEKA7/
-aswfN/kYnhOYVaElsZJ6GPEwGr7+2JpKJ6W9f+2YXTax/BYw0f/rR8zBo6wkzQvp
-r+e9AQwnhceHL/LSi9ZQ5eLSt8IpvIkLFDwBVIvaKkwdEMwkr+hJZF8UcIjTmALK
-x3AXg2gzokhn9KZvOsUk7UzHhlm+MqxFRZ1r8+GjxRzSiQEiBBABAgAMBQJMQK4I
-BQMAEnUAAAoJEJcQuJvKV618c/MH/jeM3PmMR8WGZm47WGSpm38gF+jtRXl/pFVg
-6Qi2j15R1PrjapI26J48MrSe+vWOEQDQfkxMEyCRyGbSaYtzCbZLGdqC38QQwE+f
-yf1pWInsBgduXrPyMUxLoKEUD34YuhtE6tWpL2yuv1Os0nh1/L0XNZ62IMWa2BqC
-OHn2sMh13kIWxmu4kU25QAoihtaDHxuCxjLhhw8n5Px4kmEJfCc97ey5eYbWEVZs
-Jmi5xs6q8WwtVe9FXZWQua0tOqruVHZofnRIwIW4RMmAtePqMxHyX2KJ3YLv35Li
-n9/1nSgtcC+qVGYZhjfueP4Hn/H9sdoEAclmST3EjmlkVbXanhCIRgQQEQIABgUC
-TK0PCQAKCRCwKi5plrGW/iulAJ91DN2BfOA+pGX2Ln1LyxBtiO5QzgCfejBu7P9K
-9qKu3otAVizoSyWkXfmJASIEEAECAAwFAkxR0ZEFAwASdQAACgkQlxC4m8pXrXz3
-Xgf/ZVEjU+yjgyaKwaQZm3R/+fZg691I9x7KzrG/5FB2dF+YXq55jKXIj6TjDJb4
-agxwpiaOIMb9euuD9udf+cY8H8BXPM3FH66yDQfgh4BmWt7+42DBDZ0bp02AFWbW
-MGKybwzgsOQ5gPqpI/zisoTZ2MOY16Q4ShS2a0Y/nZl7pMofXwspCjjoCxS1od9E
-dIa/tbS1WcydiiJUVSAXc9Hjzd5ViKRMDBZr3Vow/Ks++uaEv0mzR5ehrK4X83cW
-NOfgyPVjk5R6cSOWWcsqq9bT9CcMdgAg7QP6GB1LTEUJOqfDJ2DuGGi3zTiPTBkg
-4ExVvDRuRssaxLTOjc75xXrt5YkBIgQQAQIADAUCTF++RAUDABJ1AAAKCRCXELib
-yletfNbRCAC4G3rdEII2kA4mOngsCHTAeYY1b6d6HZ5wNlz22zddqks97Ix9WknT
-VqQh0SBtbve12Ocf4fi+7LU5+0MVJFV+zqy7dgTgnFnQLeV2e1MHFDwp4NAiMxzI
-Q7k+GNlPNLIWZ3d9dJDuLJW5eZGNCUm0tsP5oZkDE8yS9EF12za2ee+IqBWjftKl
-lD/EUbzcp8TmZjIPTlqf3Tg1ThixgcoFUDu81UqrMowTF+AUz+S8+5akzkFuKG/A
-s3YkNWPa6KXLRAg22Mxdk/KRiV2Mrm7GR78nyAyBElYRWcCsUw3ElIcl1sKd/LUG
-tsMmf8vJiha4hHUBtKQmXi20a+zKDDlOiQEiBBABAgAMBQJMcXYvBQMAEnUAAAoJ
-EJcQuJvKV618Hm4H/j/Pba/RD2QlZ3PAXN7RgKUuu9oVwFOW6uDQxKG9M39WBn9l
-1EjGMjn1onPScEuYwtxvLd+KvL6A/joML1kmcBQUy/F9/67bfkA1qlj0/2P3E+05
-wAEs3uOIMoNa6dwjgdLcIOipPFm7xGb+NFWVtG5d6R3ilEzDKKIp9zaBRc5kZai7
-erg8UjqPKAVXoYe9nZymNrWFIMD16KLhFFOz4jjZcsWfWp+wKQ/hkp1lUmAj0oGK
-D9kna1bzc8rWE6ecdPYiSd3putC8Wrqh5HH49t7kHU0ywGU1UWeLoc5arI3nsqB4
-jBXZNMUldODNwzYXuxjmHwm7xeIHqC7XPR9EH0WJASIEEAECAAwFAkxzg6QFAwAS
-dQAACgkQlxC4m8pXrXxOaQf/ZUs6fRekKZF9W43E8/3O4LKnR0D6izV3ncVP31MZ
-S9z6SFroHeutUe1M+2MuzQO9RR0QvTpiiTdeV4listbHZ7+jCyYI3jiDPGEAotI4
-lsnPeRviuOavOPBqZjfyyY69NKP76aUAYL74YfShdXx4SEB2fwZ67jFWRPTk7wIM
-ihJANu7gJUwQiDQMOId9XsSK/s9rPkRrrYKrMTtJqkRDCdJQXJr1kRFbcFlQcrya
-nUGgTNovuXjVam+YQz8FmfKIS97ZGylv+xumAEHln3c9wjjJrw/Bd3RKhnMnXNhO
-3BnVdfZ0Wjc9ef7FBNNTmmLmynESK3U7f6QDb44msznwZIkBIgQQAQIADAUCTIU8
-WgUDABJ1AAAKCRCXELibyletfJ91B/0Rz2tlbinXg6ht6xncFse5WGC0KGJUI8Uw
-rqLMego2ua46yyZkczo3ViyN4D6frP9GO0BrKokFpvp70RWIGtIiJB5P5qoORkAV
-j/wEeIbCswBg7etfnzuaKEJ+7etjAMwliZydUZFyIvVQBGlUFFFcJ0za69c+4svF
-Lm8K5gbTY8DmdJjqDoMn/mK0LhmFCWC8InCnmSdy1rkgGEGqfXS49sf4GYkHObjf
-rT2GV1Avq5kTEPYaXq5BV9pQzM4kqhJkoHvLfnquHnVqm0AoPmx6NBW85Bcf0AYE
-y/rj1D9AWwRaoV0Szta/PRnOIAa8uX9KO+kseNid9Ter3qD2kPBYiQEiBBABAgAM
-BQJMlwbPBQMAEnUAAAoJEJcQuJvKV618wUMIAKvlFyv3J0E6p6MTUao1tWND7h+9
-XvsWeu8Jy0hNHin8dVsWDOws3QhW0DNDuD3OXXGdlhEK8huRmK9kwefi/KimcfTi
-D040DnH6ZGKrHhfV82mjrU3cPnrXeCz2sKCdf4NsyNCRxD1PVzT60dtP6n46rtUK
-0oe0hH4q55ZJft8QpX4IOHTm6cPIbDcmZl0pEXIVCuw41MMRlRlEc1uoAQ6fWBJk
-gheEX5Gd3no1jmcpEAxZy/f306Gm+PrCrVj9bTjyPjnsCw2jiURaOl+NevPxmKuC
-qUN8PXiugNQJ1dNpODZ+1RVJ37HCuAVudbhh+WyqgUCke7jjTz1BvtWltMmJASIE
-EAECAAwFAkynLdsFAwASdQAACgkQlxC4m8pXrXzWhQf/cUayBilVWEMDkCC9KF7B
-Wu/1bkApqvdniPcdCILfYBJ0g6Y0lBQojl2M6/wCzc7M7tzSoEHnrmjVfw3wYkeX
-6gIaigy0zX5adSeMM8nsZRwm9uS5MnMImaAuzsyIjXgha9CzSs1PLduahK9rE4ey
-8GkyPpJMT320wDxQt49IBLl9DYWc4tY3rlT2Rblav368G/CJrJoIfqkbA1YX8ELT
-jhVAfrH3eCpuz3Nvqg+gDJ+CkopCbaddsFN9fbZN+YrF8mHnJf0TKSOA/Zm9WBHS
-X1Rr/EngG12ZhpHaffPpMsMo35hJtNzAeu3iag6Kbe9HfjfeXqjFaOUYsxK9tTgS
-qYkBIgQQAQIADAUCTLilLAUDABJ1AAAKCRCXELibyletfOy4CADB3fJAd7WYidB+
-KR+AKnZenGHKJp4CT+AO41WpFmADV/QNQIBYTGYpH4BG2gLXJsW79dlS/mIBdbT4
-z+Z9bJghUk+bCfFwowrBhiQxRazjQXtNDbqlSK7u26eYrHbhkW9OuEKhc1tkQ5sT
-AdAiahxSPOIyZ1vrJ2iC6VFx6ATo9OfbWjs3+rvfbJwNwlN00Vg/ylu51mXR1Q0t
-v6zb4EjdV07DNVU2jJXAEKHmJ0r0XYVVPGDNI1b2n4H9+mAHA9OOrDMjrCODThIq
-+ugbpfGe+Rkw7YWBANP0E0LDmyAoMYy6icbYGdQM0cK3vl9N5FMGxDJO0VLP9oKu
-oB1Ch0wLiQEiBBABAgAMBQJMyctGBQMAEnUAAAoJEJcQuJvKV618/aYIALZudWHk
-ubPeCZOm/hihQYmVBs3AzlJjl5DYkjEaV05q24DSXi/v1APYecKe/l9mY+ArCmpI
-ouNHvHPanY3bqeqK7FInrmq5NZb3WT5neDntfzmgIl+tvrQShLMF/Sw+91qan+rf
-8DriB2gZQPXNHWYseYmhQC07X4Q44G6Y9vPg4U+FoSnjX+Lo+XXLTyfFwmceMhtt
-qKpBff8pHy2//qe4w/sRfIjBkOdUovy0TPc9x9qUpF43yu8IlJuX2UmgrdrRZAyS
-ZXtz4u1JkaaRRBUx2/Zq+7kD0hKnh3V+I4S/DPCUV+Bj93zFbr0z7RaZsemJ9kVA
-hh/oGLzP3ixIbCGJASIEEAECAAwFAkza/OIFAwASdQAACgkQlxC4m8pXrXyyuwf/
-Rs+Da8eT+D17URf5T2o59v2j8fbtgKjPglwjF6W66OSYPcyIfkRlfyb2j4qQpmvz
-AWForcadhgpGFKZrvF6RoRg3+CSBPWGsKc5Rq5W7Gqskiue4QY5W/MKeNv+Qzm3q
-TFTOUpA3xE+n5KGc8zT5OgJ0VGK3pBJYXftiBj4VrFU2z/5hi502Tj8EDjBsXSwr
-2e3h6dXshoJO/OnSCxczXlg5aSn6EmUrEgX1SFnNKSU75juBy+8mCVWNJzvwPdrP
-eQV6v8o4vJjaiO78QtwRTDiYcploAL+RGgEke1J7KoYpUawPoh2P4itKct+JQ8aQ
-Epn/FHghKvqL81+kDlcpy4kBHAQQAQIABgUCTO/CBwAKCRDZNxCXpHPJkIHGB/0Q
-x1UO7ABf1nwUadXtGSisx9Z3JOmVISzLyqvFfsN6PNeWmYlaVcWasX9IrB+VgyeE
-xttgwrs67PhfyT2VgeZJ3uCJx2ipx2kEo2wn6X3E87XUsfV4OcTgAQp6l2KOOJTr
-hIt9zfQJCKX4IJcDXccC1ksaqRBLzKAa+YVUsGFCV2rgRBDvtIH1xfqXKQg6+Mgp
-8gkYszElY1+7QTH8kY0F3eR843eP5K82rObcI09DXak3b8c8Q2I0w1ONiH8q8YN0
-I7BjF9wmnK+rCoxWB2qBK5yjhZMSRKzcHModVUeT3gR5lGIBYx8tnmM2OByAnJhO
-p7PaRXnMk1j578IHSHGriQEiBBABAgAMBQJM7CBwBQMAEnUAAAoJEJcQuJvKV618
-LKMH/0c3AL0qNVszkjadKIRMQlaZjkwxn4sFyQyPAus32XUcxzh73ilsdS88MOd9
-aZyuWXAy9d/+4WYchfA5+W8WttGK+FDL3BtsctPtjrCMbPD2uzGgIeD+7HONzjCW
-cU1FXEavlS0O3k7mGJO4YOGV2BifquWSTuIGKVEfeBB+V+gwJaYQW1CUjoODiZSb
-1YgwI8fDM21SV+fy7WeFdYBIwEjHFkt+sNorCRM9P3dmJ7AD4YFugp4QwugPygQ5
-sjcymU6MXFjgPSnwYuQA5QIFlen4xA0UUnXY/HJwL1gliha/1iP4GjOwGiMXL7Fq
-YdrgFHYE1BxUSgtEDa/lGJYDiaOJASIEEAECAAwFAkz97cYFAwASdQAACgkQlxC4
-m8pXrXwbzAf7BzA+nISXqEklQpuCLKliHmx0dMc27zXu0Cw1XEjjPThLG96Xn81D
-2PSdpkNX3afK9hj8uDslXiif3Yl0wauOJgOtAkGKhDU3DckByWa5AornNOh5Mu0L
-j6FLWEUw7Zv7Qmfma1dqqwuKfdjdIbIqTNz9TGgzdFuCpJ2sm5dZ59jIT4HDVsZE
-1xgSGcPiQYVg1ylbVC2WvEx+kCLCfIrR5EY+UtujpH8W8sVU1ylK8cPrxBGrWPac
-0ssAt4gB+h08+CAmg0otz27y+XPGUU9N++Hq7NzlifesXyrppy8yomGRuKxs8jM/
-AVmfnV6g7BO/IRyNH9F1nHW6qoRYUujPYYkBIgQQAQIADAUCTQ+5SwUDABJ1AAAK
-CRCXELibyletfGb9CAC91gQklsaUMWvq01bJ01QLaBDZ+5tp8nz99LEecutmL6+h
-PsUdRvMnzNo7lsQ3m9sR/I8ZZZ5chsS9nv1XyrxGf6Bjasj2QREGGoi0ftYCvhKg
-QUXewv4CchdMCEPEEzycyDtqQeBZ92RI5UHmKxEYPrgGOuWrEcxzKiJwhsI6+OCe
-HAS57UiCxLzkaNy20arxzjBjBfIN429Bs0QA4svfdMXtxlPBzlFVuKroCVeNbBhB
-OWAgwcBSnttMG9N/X+aZXZcfJ7UxZ5I0OO2kkqdtqMthPD6dmk3Mr0I7fGtTkNfP
-DgAJcsAn3+zNT+qvNEsSPlKYwGSz5ao9bodkmMUuiQIgBBABAgAKBQJNGhabAwUC
-eAAKCRBDJwX6zdQDJeIFD/9WSm3YAvOXBHYqLXliz2srIPFWmj1cS0EyLCElaVyV
-5o8u0j0OYdoboXiGRYM6CK/Q053Br1FpH0am+SdnfIfgl5gS3J8ZW+I3Ozi7zdOC
-H9k8OSBZjirgQ0r2s7r0chSjZXjsvyxNyEDXDjPrwD45YVFOj6cOAUhlW02hSg99
-6VMnSfF2zJzrTymHWRSxkAu7cb2rYXo5s/BHdA9O0Vmljz8DNXbLqupjTvQveu8E
-WzGchYuIAH5/92fvmrEf9BZXNV9TQJTN2u0+C9+zd4dNLFqnNLwLm6CtPGh5Yc4z
-7qTSx2uHzVFrbwruUoi/IZ5Kv6YPJUX1hWxa1zjYcDi5oFxZv/8W5v5d88lKVQ62
-uGyPbjD+DUrvV0ROE7x0L0+N55oYRbOC39tBWP+HkmAFqSm5IB0F3/W7ihlCa+JU
-ptH2gHlHhs1RTqeExG/FynJIM6DWA1xMXO8kzI60xWFBgTacqgd5REhoJld1uMg/
-as8/nKqKQ4FpU6ekm6C0QvfXhEpz8fQOaRsy1cnMNG2z8N4GtShZ9735rTRHp4Xu
-aRmHGqSxpkfROaiT1wYri3AufzUNlpv2bNH7QVPiBOiZDaoD09XCxdxocemwb1Yp
-bHUqSRF8ypxZ42uEMBj70RLEQn7J+ROf/ga/+Z9qRsp6HBBhZOerGwWdwkc9lP8M
-aIkBIgQQAQIADAUCTSGFjAUDABJ1AAAKCRCXELibyletfJXVB/43FPwrV5zqTngb
-SATSyJWM4GKAIl5cs9MFXso11+r/WI4ybHXDhEwbQzWCiwMH/4ZdNlXNipPDP/kB
-NHaoxoX8x1+HbezDrwA9fzwaWqOXHPL1Y9dRv7HB5HIU6wkZkE2m9yIbF4FsjrCc
-6UZrT1FXSRYzRe1BQ0z6RyHx0kzEq5/+SQxD2Bf9D/oqfT1fx1xxmvbRHxYi2LfR
-yx0qEbgJ1KcBolzpO0ma6RckT3xDsgCeJnWPG4IPeII03aOMY/GHtvN3gPIHAo+x
-16oRtXfcYh7jtNtMmCx2Ve2JqmqP8ywKGNDOVt23wb6JlP55NDEvc0n4qVzEjc/i
-p1p05dvKiQEiBBABAgAMBQJNM1KhBQMAEnUAAAoJEJcQuJvKV618b4MH/ipLUvYX
-+4mhqtwr5OLFc5xixTLap1IILMH1VCmJ75erUI4QI87gTVDs2cke2uPmZiCGmduV
-5rsmZh8UM8goSb+3Iv5Rm1UB36/wGNSRoV6fud8kOuMm/m4BEHSxeF/p4GzjfnMR
-mNwKiifCClsW7ngXbruQA/Po7OWZRKlsTwCMUvojccFXFz+JaMRiGh3yfs1GPbeG
-d8pttOqlNGKT+1oOUIhuaVxpYpLXUwr8GjzkH5gEZgw7RWgPNVl1eyC/jxGCQJDc
-T8UrJWFf/0yY0OS/sURTD6+Pbr1nLJAQvZT3VgQCWBkFzWojiDZ3RDs/Km2Tb8QG
-aiZxJfAOTHBdWjyJASIEEAECAAwFAk1BTjUFAwASdQAACgkQlxC4m8pXrXwHgAf+
-N+Vq0XstcDE1kWvHuMBFp12dwzAHFd5Y+lHpiM7Zr6uci8Tr/hSDwGSp/xYU/PTM
-qZNglb9swH4/irThadqq50lFMa8V3vk307Gf9pS5raiNOAj3PSzQE/2hye4K7svi
-Ig/14xZKmxgLjP7N9Y8IudQNABZQ1ede7e12uzss8mjvXpu+R3VJDYyZgx0P18LD
-eKR0AUzM0aOhJmxi6MXxccBUzbEwEuIWh6ZshmgH+rPe2l09FuVYbgCMU2VSN0cM
-RGLIoy+iqqNAbzj5rYJEoIWW5lYmMjT6AfA/Uk9hiDZ2N8sPYeJqlxrHzKZOAGHG
-/Ulf7R5MV/YjsYKn9Kbu/okBIgQQAQIADAUCTVL1IAUDABJ1AAAKCRCXELibylet
-fISfB/92D0zGbRqU/BvFjLAjxymbPae3RIghm22sdQYK+FTGOW6/ZwTHQh9WC4Ze
-mT9wxOV07pP692lMDzjRQhCzpth8TirU1Ah3L8v/pPH3dPlNacbsG8oDLLepcdkv
-e+7mmJhqMmXLoiUd3tvDH322K1K9aHaUiblwef1DApgV290mCOoaIKS1PoixWwDy
-aeWzaf5SlKoB9mqgdLdGH3wWS2w57HVEubaVO168zysW0oiOdUveL96azWCtLGfQ
-bO6wO7goCxBbKCmfbqaGrgfXAqavez0XHH1VlaMmdW4RmTx9C6pDH5/rzh5/w/Go
-P5khABDGf03XQs5hVwjrtETRYfZ3iQEiBBABAgAMBQJNZBpoBQMAEnUAAAoJEJcQ
-uJvKV618iKQIAMmFCyiF1y/lN6rtLUQapJaJTymJA2HcMVs0I66phGbA3wZxikJg
-G7x3+8v+o4147b+A4RG03JAM9Cn5i8Cii7+B1twvZk843tKS3OenI5nI22u29G7n
-9N8ge8Ij4r3EQ17kIMm4+eU/wPwHhLfxHqrkp3xRYRFsqVfVbkGjx/iAKioKxZEb
-1vsYvoKjhmtEpI4sgYbiz5a23o7RRzM4WEXGKYZw5sKG7v6wXzwi45KBZ1dMZPF2
-ug1koUGP1s/6aUuEJClx4ERg1l4ZEMLwrfG3h2w7gDCYzGtuC+sDl+Ab8QqzP3f5
-Pd5Q37OkOtoShcWExibjHJPNtd/x4fQe22iJASIEEAECAAwFAk116GgFAwASdQAA
-CgkQlxC4m8pXrXyecAgAvz12kW9KYy9TeiqmUnY01l0/YvzbZyU/1hlXjnoYfF3q
-eY65aV60cFNxKGMUTxZ3Os6R4HyPJu0wqNI4O7PftjHN/nVFUvTbNLFxWbNl9rxK
-cYuCev8OVTaKlxGSDoNCo8XxzAkQ9VxnGZpxRhsYB7m/FRFLqQncLv77pD64kgVF
-LkqGVL1tlz6mGC+XuCTsN9TAHZ9/x9Tg7mvUw5YaB0vb9+P1OIAY0G4OUTAdYmmE
-tA55b6TYiPPBuCeBhEEHsQZkH1sFVJCE9UigS/yQQwrkSGX25pCF9F7nC2Bsnv7i
-OXCXJpx4da4P90hq7hSQ+axqBCMAB22L6jkB210cRIkBIgQQAQIADAUCTYR3SAUD
-ABJ1AAAKCRCXELibyletfEzLCADErNCv/miBbp92jpY/wuYVC+y8ATYTHwgeNm+r
-nyTwR9Wttyf3lVeSul6jnU9ryYY+4EyQz6ncUS3GrarZ2oVS9DjZkuAt9jrQKIBD
-4Nya6JI6JkPTWxK3K+f6SQXUZKRThMnHdSZHGc5foVD6FWkXe7RlYPkBV0I7WvOE
-Kn/e8ysZlxp83STovHkJIsrVpalGszGgONABxYvsHaVlk/PX8xBkAnSGdTTEiDYl
-0fgPewW+xqSdoaT5VSZoXXdT8py/qPaGpmTrzDXwH7q0N+DylmIirokfOUcIJFTD
-DCIQIo1dcjT+nvldQb6Wh5zOr7qEqDVgYQbOtOOGxMOVscJIiQEiBBABAgAMBQJN
-liO7BQMAEnUAAAoJEJcQuJvKV618U88IAJsetOt+gTnyej4edPH2An3A99u2BRBs
-B3EQ/i28zpqI5FYAEqdRofV8QY+NmmnncOCG9amx0dlWPjc/PXmmF3B864LMKu69
-t+gAHOrPScqeAu9lT0TTaw2if7CslkOTj6eMAdwwObDNoVJfTvTE6SuKVWzQKjDW
-wk3VsDayGtix72oTMjAmHBj6Nhj/YLniytYx62a+undmS8IiD8KL8XR4Hmuf/BtX
-9pjniT4qvEu3HlnK6Z6xGgtJ2LPqSTf2h7mr+qV0lPAqOt/7gVOJaPAelaFm8aEX
-IMeBUJXwR/1dK0q8c+FUF6rjGA+4EjOxzd8FvKvcR05Lg4ccfsLYXbCJASIEEAEC
-AAwFAk2n8ngFAwASdQAACgkQlxC4m8pXrXyaRQf+NJf0tp2P4xYKqbyqgOHgotG9
-F81Oj3iRTykdiQVgFu02Mm58cgn5a9uV6ChTnLfXsdrcrYTJfrFwQ67ceEJB7bO1
-l7KqgX3secCOYhXHjy9dXFAVfr4/tWY7xv1t7VbO5icL32A0EiWAytorMZbcS8ja
-AQKhExJOzQkgMRj7/qPBFfsu22blDW3ZueVxBQvCB8HN9lc4MNeQfZOeCbuyaLWB
-bB3IsbAkLXbVaMbmHOkGBf1QWRcBrRhUU1RzvzLuTMdz7dJjQn3+3PuSFcMh3lHi
-Xc7yDwV2so3pLKwlSHxEYuElLPgcO+fXlqX76gKHZy3tIGjg2w8/wjh+ZUc484kB
-IgQQAQIADAUCTbnB7wUDABJ1AAAKCRCXELibyletfIt+B/0SkRCmqGkw28ZLVZ5h
-TPZwjYRV6OYPlT5Wlu0B4f9QyK+d3riQFYJ29Gc9ECIWd2Jeau4oivMlGqqUCTRq
-9g9fwziXlmt+cHPQzg4wn6Lj+vwL6fc32QlOC92PeolhnkNUCRWRbdZZVsLAiUoZ
-jeZRTCJ93pQeC7mPQeHLf5QXj22FJBbQxnA9s6GSBuqwI3GVDUrV8X71OLxE6daS
-uyueEjyFxNfNj0G5+vSHCK7yYXtmS9M9UChsG3nLFiv4fNZMCrh7S8TNKquz68x4
-iXeOmI+ZfonP76Xh+YYrFjVSnuXD2mvVtFBeLUBeXySvH0vzaFQsO29e94rl4305
-S87riQEiBBABAgAMBQJNy45CBQMAEnUAAAoJEJcQuJvKV618vaoH/AgEGDGXqAQ4
-lsdVBh6pOOlPgOeGrd8yUgrOgDXyJ7MzVGWsS82MWvq9iCpmW6e0h74qNgKILXS1
-yHwaO8aXmab6wa7o6M8frTG08JPo66T1YhlBl2sM4TylPborVsTjIfRR+8NFCqS7
-Jm3zTbtvx3jUbYnmKmvf850VNfSWbBO3WjYnleExU8ytZLI9yEQHV4lAG3VIcsgf
-ZzxCsFaxRE07ybvB7FS4AtAcaOY6emnSOvdT4G30cEOcd0JQoEsMSAYaei6fKWnH
-0CrMJcT9xZSZi+m+o7ZRFAGZoKlvZfsJJguZWBqfpQX+gatcXLYWs0baqXSSMtnC
-kLdSheLZUoaJASIEEAECAAwFAk3dWW8FAwASdQAACgkQlxC4m8pXrXwMMwgAuG2d
-kHUuhrJPvNb+aXN/f/yZduv6XIPIWDWCbwpTYl+ldF1x1kK+hFlMu35RJaDh7Uhf
-brCI9z+8q2u3kTF2B5z6LcqJllGKTPj4k06S5llunfi5EsP93HFMRK7p1O/LUWlG
-iEWgAa6QtMnGKhEFpJJOkMPyxAjthf14fcKqViCWGaUB/p3LT1D0/tjo5LuCBY0Q
-JQlifJaMAu1NaQ6kVd5Y4M319Ses1M28gGdcvWn6Ow6sKT6+Zcvi772RCSZAM8pN
-lhXhU5aZXQ8LvAvZnc6F9x3GVG0wzpYnIA7W09BupNmE7sSri+yIC/O3hf2Rg4qT
-q/OZ2u6fpM7GT9Ihv4kBIgQQAQIADAUCTe8oUAUDABJ1AAAKCRCXELibyletfBM8
-CAC9s+QkpDErxD+6SYGn3Z7jdwv7/LvtT+gcd9nPW7lBBafrgvijsOw+s58+XhRZ
-mq0k302TrX/59Bpl+KsJ6xlGr9VRuKn8w8TMlntp6ToLoVS0k1ElIkQEo+DMJwV5
-wsAznHicQlc1jy4zOWxpUQ3JcTy+biczCIwK80/dD/i5tds1bSwUvIZovFyXJjxg
-PtYXMfPYA/tpNrXE6DKZRr2vKcENChbZO8A1WwjCWxeYMABI5hmKJvTGR3IeFqkb
-l+FwXVMMvm5xqwoxO1PXh4aH95fLhBDFjGSxk2AzmMJdgax1dch2vHUurH0s8L27
-1YwxiNgA1QfPa84ZJJj/uX2RiQEiBBABAgAMBQJOAO/bBQMAEnUAAAoJEJcQuJvK
-V618N4QH+wTADY4UepxPeMIDEoSO+3UjVDKFr9tQPFhhiiSTRqMIAky5bqBeYMJz
-56Mod/7jUug0XCxdyXBOnmis20+rBj0Md8yD7ZhpitoDwfVL2u8eGWyVlF1GLn5z
-ikCAxNHnnQGOxsrFsbHZ8pNju/r2nbCuMef0cwOQuqS83+LF3mlmpqJzc5rD33wm
-mih1DQAzbMspFwRuwed+xpu0BBN+Ssf+iiLHR9mepxD94+oKAPoQxidVMy9+GrK5
-vWC6H7ruN6g/oN7wTULC5B3lWwd/kZ64XKCPFvYmsOOc9behkG90j+jnKQBzdCOV
-aP1s0O1obyCLwmXIF9tYoCC/K05vrBeJASIEEAECAAwFAk4SvGIFAwASdQAACgkQ
-lxC4m8pXrXw5/Qf+K678aVlRH1bsAwjqqA950jwRru71bDUF7uxYEhRHmW4haKOZ
-v7L6NW7JfVoRqD0jRomHalcPEUAHZ5K47HoRN1LhbcTDpATxTHszopzkJsyfdcDX
-bZ3r7ao5dRvvkSyQerZnMqRIHK6Hm/p24sMMOItkokOb/e3wEUaTw3UTmi5KyaDc
-LENglSTD27RywrBVbbwzZ7Dqlh1r8vcpPbQgVnocN5cWQJAQgU4VfXotB7g1RgTJ
-C4nQuCMF59iK0Pt/+Gy071Dqqo9+N02Sh06L7JRMP1Bbc3CfGg724xDJfmjHioTq
-9WxG34rk5EyjvqbEHzyfYsJe72taTJBayhj+vokBIgQQAQIADAUCTh8xAgUDABJ1
-AAAKCRCXELibyletfA/nCACQb75tmlBJtnoFpfx9HGC6F5Lk3cK/stgRTXU2X5sB
-tl32WnMtKRc4fFDc/Auf34rRsHbj1sY/xVepS3F0XkpQfEP++ibtB3TBEl8NuRk9
-Z7mC/oeB8uagyiokMvNutiOwqONZDQYotpXP+0SBRKiWPLD5Hbi+9IJKEQLXIssD
-8DjVKMytzwSKFqaFCF8s7mjcFOK8npKcXJpEfsvirW85R+xUpuzTCIVjJpzmFz97
-3xZytJUjqlKPoivRCUWPdRBqi8g305EJChOb4O7iuSjBQ2kOtt4/5SE48rpAFdVZ
-zR2PhzOVNUvdVF0E2HUw2/GCUSzQIGL7hpJZxCg6x+3ZiQEiBBABAgAMBQJOMGPu
-BQMAEnUAAAoJEJcQuJvKV6183nsIAJLMMezXLiS3EI5hJ515GTi1DrbHV0GNlD7/
-/NW1dHDzbFVvkLLdIjumvGS1Q3ZpzpHzViOSdgJuwAvc3/8IBvNpHCOK9xA9g/5L
-PhetsA+Cj3imtae/5BEwTJxk+gj6vKWkjPBmHqtbn2pV5kg+YQVU/E7qPFiercgi
-nimLBIMkaw71DLEUJPxARwsFCqHHX98/fZ3eNv5S2hdIKgAXfJdg1XlJgv6hmRe9
-CDjQ29ivbowIAsTYdCy9VgT5oBEjfeVECEYskJ+ljmSL8qX+XD8yWvImOu8Ld+QJ
-8lOPHkKebSKQ4CDiaaqKX5QJ+038hQP5UbqYLGPW6jup+1y0SDSJASIEEAECAAwF
-Ak5CMa0FAwASdQAACgkQlxC4m8pXrXwd+Qf/W8FSpU1Ofd6UbTtQXwAOHlK7W75j
-MKGZKiUlN2x0AqAK58XPncI8C4anDHGDLj2AkRGoW9Pp3dx8T1TNZMFpzEYSVHwe
-/EsgJFXp40HGlwcllk92qL8owpT3+H767gaZcoxrEJ6J20hnckkESwk8ttuSLbBp
-unRa30tRBeeWXmTonmBa0GF1mkrgU70lXmsT7a1pREeGLJWY6+syAiuq+yZ4GRlx
-5RNyCHEvjlTq1wRRxxKbFJ7784go6KiAvagREW6pSOpXBJoVG0a/twRMVcbf/KgT
-9Wa5MfRirLHDE3rBlmYmEA6slyjIlOH6HYneo5cvrj4xswUYJS0Kkn6gPIkBIgQQ
-AQIADAUCTlP9xAUDABJ1AAAKCRCXELibyletfFhvB/4kgHOiAa8UWQkFPOJy9W4/
-jNsKF/Q/OgeqfdFsoHskUOaqWGYMzWhGleSG2ITtf78QD8mj+qraZiXyowKvVcxx
-4S9o0SarUrvvFil9/DiUeFohni0Urvq6Az34dsbefuV9ZJuHY4WiAkVuVxrWZ/V1
-NucoivbPOHdfGV6X+JRS+adKdFxQGWIBkYJ3eEn4buhzWhAuudOyjoBre76R9y7P
-LHjZ3jNrICAumFzwaE/lFOHBv2DbsTKZRqVP+AFn5ljbkRm7JtCgSYzjj0x2UAhi
-ISxJ0EzmypXUziy48E65+SgtY1kCRMBHt6y0kS04nV0FuYVazh8KYCVRukKhezpS
-iQEiBBABAgAMBQJOZPMLBQMAEnUAAAoJEJcQuJvKV618jfgH/j0MuU+1av/t7IFt
-ihEL8wM68okf/LYJ6suFb69u65Quyv36+5kk8+XWiXgb+o6TPMNqFPajZ9b/MRTz
-V7gkakGCT6VRFrBT15psWOe8RjltW/JcODESmqaNvcbSNML3H432BknNrW3AKD+O
-oNgXMLjmdwKQiyQ/Iu5neX+vpTwI+TNgizk7+/PXrtPG1wQWJMAUNbfWNF3Xp+89
-3EgyhqcAJn4ExarXLKxxdZTfH7TBaa0PtUbRySMRWhYZJI+uox3ms+s/gTHjUWMg
-UkY1XcgIZOblSMnQUEUcZOYXQ+gWFC/6liTONrlOMzJOJyQ3pXu/+JtDntmK5nid
-Gy5R9AaJASIEEAECAAwFAk52RagFAwASdQAACgkQlxC4m8pXrXz5bggAg29/2Tn8
-+XW6Y3YSnpgYhEw5kjg2d4Fgm1DBjV06RxFqySWgptX4usy72Cy5ZoZTlkZpJdw5
-0o46STGOJWkd/CcUx0oaz5pNKEyow+amlC7ULe9DcgKGvlWLYk7hLh6GSJgNhALq
-MnQ9XU5hl6A0cCkQVHf0GpHa6IfEN/xpPWJpB54jyOCKkDABSGqZqFUftb21Qxqk
-kmFXNYDaLinns1X1WA5FL6rOJMkWvTRL8a7y3UWIgQ/25D51eL2Lrt1GY63z07Jy
-iDVG/A5ApuxN4FfNiB040CzRFmBDjwoAVBmMzmQlaoqMKqt+UUGiIHGZ1zl6pCVX
-8pU+CK+wy3hTA4kBIgQQAQIADAUCTogS4AUDABJ1AAAKCRCXELibyletfLl+B/9z
-zEmde4gA98uEdW2EQqrxZAiNoM3bZR3uyEwtV/6sM/rVtkuFYDqLVcj/IQHcgRdq
-79k8B581XZyukM58nLy2vmrL0DCCG+QD5rbgviV5pmMi/ZBTbdOHj9Zjy39+B7PW
-xk96YaCR7Lx6F60aCchRc3Y7g65rywKRutcq56lXa5ohmHLYG5CBTlzYJq7JCiff
-nCxEev6ELFmP8pq6RCdEoDbDbAbfXj/lv3ddBOHcoDhdfhBrxgAfalDob8fwdLye
-4szdfB44QsN0r0odsxKl/1mh406t+oNQdH4ivZsL8pZyYcqEliRYbFRzCKXlqQgo
-9nN/icwJZbInMvIVuAOqiQEiBBABAgAMBQJOmd1fBQMAEnUAAAoJEJcQuJvKV618
-9fQIAIHiVX659dHoUu059gtgVxZ1lanwQjAfBndslyWGqBtUEd5rCGqOcizNQ8BJ
-NNvCv5B7UOTqwfymbk0SsMqs9CH2oXfMTXcjJkBRRt4BnWtQvIYGAeleI1vBmgxz
-8VE19uLIAqOLpwjZmEL33ncfCX2qZGg9uFbxIrsWZWL+duLJJyR8zCDUICvIQh0j
-CUvvm0bi/qOAULPx0xZL8xts9RSODHXF8rdrOx6okkww0bqIQExo8DF3tleMZPau
-i3/JcbezJS+IUGImamoYcVo4HCKMTAw4p4zaVZOHepk9H3NvMb/m+bNlzU/22LgT
-YVvGrdSInsoVGJjTUWXQwhxJ1D2JAhwEEAECAAYFAk5CVasACgkQQycF+s3UAyVF
-lhAAkLUJ2vBdNLklnIIE+N4tokcJMseTmTrNX6y/Iyho/QtwU4EzczlOKFQ4r0+w
-1eQgDDkHh5AErPXGSvV02YJPS2eX9MyMzxd1YzwfXYOQHlL+gPL/+Qfc9YZvVO8c
-u+5v7abwM0KZmotUcxQvZeJ48qrzpnbSRrfIK3Rz1bEzs3oJolutJcwii5VaRCms
-T6kStLtIZeoBwpgR4M4tklt250YiJcXhPAThKIOq71PpqkZWys930akrKQEMSuVB
-Ki1JZXlpimD+O44ITG/H8tSw3RfkdYUewtEllmFIx7AaZz79Wiukps0cDLHOy/gB
-SoxSyJ0eKMtOfTxRmXXnlQBYPk5RjRu+FcvB7Wq4eTuqmm2VkMiReiPcPy63USMO
-ShaOtFKt4Ttci4FS2HuhZDByETgNrMefkLi7sWadMDvlPJ2W884tPpcaqzTHAkn2
-HW3a2MqlP8SsWoUNdMY786ref7LHTH5mboXtMJ5eA0k7KlYZEvw4JXJ0jgyTQMB3
-XXgu4WFZbLf3YPQMSlrNusbGs6JllI6bKpSGJgtp3aIIairZ5RvagTAhJdrfDq+/
-acRwlwnD2KQKHLCqobpT2iXrPfowt+KHE3gxd+7dTOLa3fJ5f6lurEcX51KPv5Hv
-r7U+1+ske62VvW7SaNzRpR1ORNmc+HBoDxBPGJc0Q+KSk4CJASIEEAECAAwFAk6r
-rB0FAwASdQAACgkQlxC4m8pXrXx94gf/Wf7+u/xD7y/WpN6o3M7vMSxSGkNNpdW6
-kBQi31Bg2vsSItHCXwZWBzSLLW6cIG3ynZ8AumjMEpWJlii/ZndawmKPjgG8KYcv
-C6pWkGQRdprwTywfHhN/n6HDfgJbWfz8HRg6ZOS4+u6t1STeidRQU1hmepV0WF7N
-SphIC21v0N1zfIvQaSz0jBN5kx5ZF5HoGrp+J/Tc74R6wGGufwT/SCP7Ev4eYEG7
-Nx7vQEXzqJTFFtX8EVPdQCOFhtY/rwJ8N9vRhcD/tM1aKZmUXFgx1+lVkiU+xJak
-d6VHvDCRvYel9m+gknAXQJyNhyd9TpWrsg1nacg6D3ir/ZTcTVcPSokBIgQQAQIA
-DAUCTrzc3AUDABJ1AAAKCRCXELibyletfMpkCACNi9j+4wCx4XIL3+pppfyiuyyX
-R5ZYB7+ezezphTayNSZx2uTsHYugDFZWnVVF69+uejiba3CCmhpgfiV0h9j7WaHa
-3/VvG6Xwyvl1wLmlf3Mdtk8ulWfsP1q7ct+xhrwo6RWN9N4UuP8Vw7wvWrEKQc94
-EhomkQzyMRizGbLt2kAXXJ7WCLsEcKlp8YPKg4vRb2jOIiqH9Fj2H0+2p+0/SAjY
-BwUv+po1c4ZN6zp+sNz7lMd3SU+h93IWAGqgczfy3aIyS748LLPi2ehATJMaokF4
-bJYzJFHEQChX6jmx+xliSKMaVJwDrNjb9T3YM6wdFgfi3YP81SFZUiQK7nNoiQEi
-BBABAgAMBQJOzqgvBQMAEnUAAAoJEJcQuJvKV618vLgH/18niopvqLsYjVHa4rn2
-ZBjZP1q9Th7aQLXt5ysshAVt4BKL3xXTzq68sqdWjmMRpc0xMarFB0Tli4FU3aC6
-cEdPA6EDYiewSfZVzMtnLxNmh9HsRH6+MasiTBa8vG7VyHDjLtPCRQJoqVAsVmuv
-92TsF1pmWF4IPnM6CkIkqgMYbFiNeKST+y/K9uZaKoOt7/0bTgbS1wgb3FTkZHas
-lfasyHjv+qgbSt7hvP15FWe4of5BbuaBuiKqSzqxluKdrjD/3YLJqXYD/cm3feWi
-jXZgZfEcizL+N79h2gMsnNPERDG8nb7XqlX7da+yQiOVgE7MUNvONvaAMQYeX37p
-UR2JASIEEAECAAwFAk7yQcwFAwASdQAACgkQlxC4m8pXrXxXzgf8D3Vb4BMoArqT
-4b0VexfxR6Wn6szI/6VAq8A1p75ugoifR2PKlEbvJen0LFVaK2c28eAAtgKPOHmk
-+uwmTCOvrCALk+2XwOY8DNXln8D84B+BHrEpEoWJ7TYlKWkUbAPalRQ51p+D2YFC
-pMgF4TeuGBCkzl13jAdvBsYZj9RT5GJ8soUyHOA43lIglH4GPgMTkcZu4rVs82rJ
-5L9bJYtQrWtM+f6Wvnlp4ESAy0ZW/YLJVBO8q+78SfotCQEI++RiNqbplLYxqDAf
-k8dWFD4g7y2izPQVRYPcMIr1tco06YXye+4+2j8ySOk3n8idpV8V8TEJ63oI79W9
-9TiekdMGxYkBIgQQAQIADAUCTwAvkAUDABJ1AAAKCRCXELibyletfE1KB/9y1qua
-mVjdw7fzEoRC4xmlDBcWskoqZdJt3gCeEuUcbReqEZwCjk6cpHj4EdTFz7VRg134
-1qYDja4iNkjJ+lGXkxpb1SP8bN1BTQEnU3pJu0XcxBfcEmYWLjZ8+0FQI+jgZDxb
-JinkUD8/ayqDTcB+tME2Et2kJchs751lht5VaokO6HSg6Te9DDGs08Nf6ExFRB6u
-MaIDZPx9YWEfdix+4+lbx4HE89FOkrof/bhrklBeZCbf0sa2tl2CuOhc+E8FLweV
-+M/xa5IpRYRMj7LajZ7vkADMp5HAdiVIdk9XzChfeMVTv9sSqvfEmPDByfXFQIfC
-u9/CqsO55MBjRw+niQJUBBMBCgA+AhsDAh4BAheABQsJCAcDBRUKCQgLBRYCAwEA
-FiEE9oLNzDncD+rhFiC2x0bPqedPpLAFAlmwZJ8FCQ/M8bEACgkQx0bPqedPpLCX
-sA/+N3ToGPJF0IeqqCk4gqn68p+fAH40FWO7rcz9wB4L5DY0O83AIxnOdqw71uj+
-+XMR6VQ7oXT3maGfBKxElPfTojxxz6U4bIcrgqiDI3ZCA9ivY+UwgVyIfc9E9yl9
-/ahj7Fxlna/59/RfWhShLCWtv+lxkHQ9NMe8zUdrlipfHCzB6L/G8dUv28oM9ToW
-lWU6ixL6ZSF1vRQBTiBQNoL1jI5Bwb0uGtk8xweLykJiqF96lWdwlOsYLbQJDOj4
-aFd2Bp1Y5NG+SrpXCVSzNM8ujPXaG1DNwOyrj8KZviVfz5vlxL6WzVzBpLfW7lK9
-K2yBZk/M/55yAwIUwnKRxr9ULwSu6dLnNXjde+k4W4H8NOdyycOoUgxZkiMR+3IG
-Hk6u8F1RJ5wJCuJHf7ixCDOUBIXhqMj5OoeG9vkDlRjMqdNrvFjh29BrWHf9a3Zo
-lo+8TxP5ys0R1iExMuKiE71KplUMp7J3i8w3KD0Qiz2VykAlbwIVIhP0sXSBpPcH
-gaVbqT517Tpvcd1n31zFK0SAfn02wNh87xm+gunAdYVuFJII3RiD5rgKU1eijg0P
-OIBZnzewlCqDbfxmvXe2ihV52EoDxXCExtiOXknfWZS4LL/6KIuOZdhBMplHm/rd
-BqHzRCu/b1O1yISm/6sDwSimMce6wDAov/K+aIaDhzuiMGGJARwEEAECAAYFAk8H
-HNYACgkQqVPkiRHCauaqrAf+MFxBVxH2tW+Qyd+n0hif2iE111MVHS6hTohu+6bY
-xntvUKAIFaWEcM12QgwHwliyNaY6zy3SdX5L0SUhnPA6sckSpykI04J/VB1WBA7u
-yNyZyr5fkvxdTJLGzuJGWmV00p/sLaL7hyd5D3NFLO8ynNpeo2sHm26vCfsM9d4S
-VrqYQHELR9c73scAQJVKEjhwxzDa5vbzuIQEmESbq9qUm4lpgyItcrLEIfeISAI8
-TwwGeFuuop3hOF4man9DEkTyQ2fBV4wOPXp96yvbW0XjUslTgptqFQWp3NEDpITy
-npxjPxTnXCsFbzhnm4MnuGYpX2cQrw00hsn6kQAuIFnGj4hGBBARAgAGBQJPH309
-AAoJEH1LbhieP5vmHiUAn0wXsZS2OFmgpUnHEqS3zZwt5d6bAJ0WcjNX09FeT5J7
-ey17/3TihqFQAYkBIgQQAQIADAUCTxHk3gUDABJ1AAAKCRCXELibyletfB7qCADI
-B64G57tmM2o3UpPkuzaGB/qUrWh4zd2v0TVyR0lDLaprHfdh6UKXoTCHX9xR7RGP
-/3vY3fxH7oYGNK7HtUCt0pp6+XDHNHPKwvceF7TUbXfi524FWG7mnWv6tiDr2TXr
-M7orWEEoVAY+zEr+m/lUrmdDE7F7OoQVC6bl8F4U+7VNHCsXeX0N12E0Wi7SaAEb
-FMkC5XJsjOn3HoEztrXHfE0ehjfvHYl1AvUepC6GbeO0liAvcsDldWTo76MYZjbA
-n5SyEl9yF8l1NFhfNZXwHiQ6OXChSN5e1dl27LJ5B9B332qARawNkYi7lh26bmIc
-0phxNd8Sej+CLp59gr7uiQEiBBABAgAMBQJPI7O2BQMAEnUAAAoJEJcQuJvKV618
-e+wH/iqzQCZl74Zpx/8BXxOKRKdJoXonIHD3WDaAeng9JruFT4Qeb5lZQ6rLcnZo
-j/VwIxUWb8HVVkXR4FFWTkXI2zlLEZpDCjMfzrv4wZKBqQzN4EiG52o9zhPnBFue
-aMARGebObRCxjqd6kmqCs99MM2QEMSX3wnGfHHZLEaan7ZUlhBGhl+jk3eFx9hzw
-rfE9QGj93lcab9IlywZMfoHQDrFrfl8YGczPxJNnxU6tPgxSaoTDSwjRAykojywI
-DLsafWYxqqMVyPkoY9NHGPB7MQkRDu8YJp4RpqQrmO5wHgNH6TGQCV6/hCHbmbnD
-ZE3q63/xzgOZY+cH+5plw8ByQfCJASIEEAECAAwFAk81fQEFAwASdQAACgkQlxC4
-m8pXrXybeQf/dugGOj4V+SV3+dSmD5WG7DSn1gkwAuqeFmxgRL/lObGG7cK+hwUv
-ZNkDNqXkmmfagj/dPLvV2tN4TOpSo6hbZZI/IYoL/y37Ah7Jtho3g9jNTxAS4xIR
-bd4kqnqFYGz2PPNWTBClyoVa0/Ohj7su9IDviZU0fmPbFfJ+Dvp0gg6KTGGbQ6OX
-vcvSPwIkU4w5a6klsMCNc6kUa/Gd2KvMBVOZPC6aZvLwbHu+XsM7XtPnkJd76A1x
-tibi6HCX12lhFWXfsGBj/qguyZl1UrC3mxShjtx31064dvPfN05RCIslAd1VjbGE
-YgnqTLOvpJQGAqhIAiLAr80J9tiV3B8e2IkBIgQQAQIADAUCT0ZItwUDABJ1AAAK
-CRCXELibyletfA0jB/90c3kYgRZelHtBcECYl4p2lSItM9wd1jVFpIE4FOPPHU7E
-fqh5PL/trdZxxSdI6INfGPRb/C/m3EGleH9o1VhztI/hGsrlgxvVvb+CsTh0uVFO
-+nEjsan/P9s0Px3IFbBTX0naFa4VD+n+OflcMnA/w7oZ3TutDC1y7rChajKxxaQI
-kfItqw9j52r4EwljYiGVIUcrSmrJdRky82fLlMyyR1fQqKMKUJC9pQEec3ShoHH4
-IKJudNqdFWJlCBp+OQSlEomBQzIfMm5Mjym1trnTG+eVhdmAMQ19bMHk/2tErboB
-Jx758b4eo4kO5x7++ZvVNwHMb2oa8zX0CaML+vmsiQIcBBABAgAGBQJPUO33AAoJ
-EIRjrlNwyTqSUCUP/16blpYEvJAn3DNVhnGbH8uRAOYBT58K5dy7lIg/+/JKDW3L
-VbVTbvJMFh1iN6RYQ06OqTYSjTHN6M0CwEQLCoE2L5CtBg/CR2jrnCJkH8Pg6tD3
-ku4dtUOVn4+zHettSyOair3Z8hyRnI0cCk56ddly/qdMjARczRS1GjGQBuZOi6ZF
-GUukhw/cJbeh4SGr5yT8OG7lroad+X1j0KhSvw3uJczgfk9tnyMmi7874SHoASFU
-adqphKWVjNFc3jW2xmzUukMDi65AFgCongl1Zuahq0OcAMTdCu2gJNVXTsn4MmVb
-bmZ/ROoxxsxnt44/HqaXJ08VeX3GjrVC+9bpBmk/aibDROzXSDFl86z+SN5Qky1l
-1LmDF8bYiOt1f9K27BOzhEt9uOwtwkZREQltyMTaGqwEA5JXpHdRpwZttB0/viI6
-Pl8yvXt07W9f2TgcfBsBv64zo5kSTadHYnTyHJMxAvBGDo2AsShRmRaMtnZP4jAP
-kmxTsUOFEXhVibdMvMBCgLC2lWBcyNMDiYabwUhoUimu0tX4BrMYmev2k6+RdauX
-B4tc/AKtq5wgRc7v3/BRLjFrgq1WJEvfMHLLL0zTo2Xvp6XJYgDsV69LR4jd9YVi
-OuboW3RC6VHLEfvdpry66UdWhK/TuzBg+qX6U+KA+9AFu98W1iUi9X3mqx45iQEi
-BBABAgAMBQJPV8KcBQMAEnUAAAoJEJcQuJvKV618ZI8IAMADZ/R7HOsWqh10eY9l
-QUc707v7jPTRJWPKxpFF1bp0nDBGTSZM7MA2KWURp598mo1Hdd3BKLOeZKUCo3oT
-xF/Nbt61sR1bQm0o6eOUUEMwKB/ZStukBpIb+wKkHLr2qBSjh3Wy6DPKGKR73LeK
-gLD+eRe6OWJM81GTmdaqlbQGesCUOOFtw942TwvSDVo2JR2fH+HtzN8RhXcWOppW
-ZXajgZvT4xmwQz4DBbXkAMly3xDLh6lTGb0wG3B4tVYgb5W4CaW/Q/Je4gG5F2kZ
-oWVqR3Li/JznQ25EAHE74F3pao6jVdZtDYFzxce1gd0S0sPO2mNHYeMRC34mLaBj
-XHuJASIEEAECAAwFAk9pgdMFAwASdQAACgkQlxC4m8pXrXwGPwgAuBhd5yurM41c
-IX987+/HDkQqbwzIk1xMF4iGWC+EGN8w4ViHl1TR1BKSPJdBvsYPnb/0ff+F2dYL
-/0Cojx3TU1qs6kuKyZj87w1+4ocz94oxJAfoG0yr6T+ycwGfqRSJLImIRU7A7DST
-u//bJTpHLmf5GIVk1zUgm+M0U9XtZaWEOL/oWc6eof1zXsCVwU4p1eJMPRjGSCHc
-HsSoDbAnZ/f7r0gODUZrjnTsOErY3Tl+n7zotrPOfjRnLleGxmukCn7LAm0hFu0A
-f8HpqpEwt/3tDP/Q4RLMp8PirP1zzj/zJ2+6GRg30eE1vRO2Y2VsM6obDhn53A9J
-QmZsgvkU9YkBIgQQAQIADAUCT3tKiAUDABJ1AAAKCRCXELibyletfFipB/wNap+F
-p4XNBwFAu1GoRGqA+wy0nBcBqghS7lOslGYynjFsJGzYGY/X0/pzeoCisrDTRM5F
-//9Wa1Z0G49q5BezW276Y3MuDGKnXZeDtzqssPcIJXnimKwOBVFJqlnIu0tpiFjM
-onpDvKMmJ6JpxvoaeupS6Ut/8yKcDkpqydT6vMel8ER/NOziSByLEeDwlb3qhjQ/
-93LhGGTpI8ILg0jHcoTqFRJQqc89ZfRYr2EJGUAJhisBexHvxlbEjV7b/R7uy5jJ
-Ks7cLoMTpj9jiByncpnwJtQgmYtXKboKKQ+VIDMq2AJ0I5PH041Y5gide/DL571P
-OMnnIymLY9kH4Eo/iQEiBBABAgAMBQJPjG4jBQMAEnUAAAoJEJcQuJvKV618PqsI
-AKxEXuT3zqPaf57hFbUqH5NoL3osFQYzxPwHokJ9vmV937a5vuUdV0bDHcbdPFrJ
-ksA04zlOX/oXh3IOv0nKPMCH2DsZuENXFbd0j02Tb4E2abAFzmcDc+71ZtEpMrzD
-+P0Pj+8B8DaGB8/fKS8gXQhdLbMyAJ2fWhNtsN229n0hwpczdNM5+Z1wNV+nfFnI
-WjLQZ0/34K0MOV/IdUGNKkYBpofSNcgDJ7pRwQUJiTFR9buVjf6CSPTQvozHkxOT
-5vc3zSZ0p2vjsdpUT7NYKun3koYlW1fgcB4JS8dCUwYoKxq6vxaxpoDWvYRdQ4LM
-Ajqo4F4HrEPy6+4LafHYCgKJASIEEAECAAwFAk+dkjAFAwASdQAACgkQlxC4m8pX
-rXzAbggAkdU1/tv02bc7Fr4UFKDhg7VSl0TLDEz7RLpFw7SDGxNPoJ4GeyNRCv1v
-nkoYFIMWGDTmXwNgd0qNMbgMAZF0yu1F7loYe3I+la6Z35K8LqPLAqK8cIV/A25w
-bnM+ZjbXVCAtEpTMbx7/nHOx+wIWSlPk5v9ZHG9000RAebcdpKT0XRAjTtpVVqzE
-jF5Pz2LlqZU9UzF6DFjadFZ/z6xhQU43a0YI0/Ng+/gB/8yz2lrT0DVHfLnqhSrg
-069m3ZQZmIXfeypLC3Hct8dNk22kGpEzjKshurqRrmeWMgvoZQlml7PEPdlmLlBz
-bdkSOody8RzoVt1v50Xb6929R/rOVYkBIgQQAQIADAUCT69e5wUDABJ1AAAKCRCX
-ELibyletfLNkB/9BbAZzJ1pflA0rfX2mcs6gijDeucUxJFOFkcgHM1ki5wxj31HS
-uJv0+33XoCgHyruWmG9iD700F+mxostdC0aNSznoZWAV3MA3npY4Qw08YeoYh82a
-DQicO1udb+5riiuZT3Dx8xxF2Noib2Ma12M6UdDc1gJDdPo8h+pYusI3SUlmh5ej
-5FGEkEXVD9ULzqOUjcxE/dEPyER5G2YrxmqsiXw2+6PjBwzST0+iKEeILkzHYMFl
-/Tsvai6FO1ov5BB1w9LKBvDlmEEgHV01aGuyJaepk9i4Xt28c9R2y9YT1zpIWCzD
-33ks6HzRGzfjrHTtMjfmSJqR380rWphqa0jNiQEiBBABAgAMBQJPwSreBQMAEnUA
-AAoJEJcQuJvKV618z3YH/AzZDpHbIjpDZwKLg/eQVlOD9PerYFLV60o57IHHGKPs
-R3sY/W8iYgBPmOnRHDK/SQ8dq7+ri+Mjs+lTawlsyRLL/Zd3oUgCEKtPnRTZgTya
-NhR0HSLtvtaMS23mxcX69BFVtuKjG3gdsL4zm2ZLL409D7Hix+nUY+cB+HCwA+lX
-Yvhgb2JuGFvDknNCLhdmeGwUiWfJ81CYsYdMQfATPqhIlKsTo2ox+70jkKM8PYTW
-c1MQjnZD/7ML19/X68K0g2c69MWE3wKxfq4EcsYsiANmHCy+t0pfHbsklbLSt3pG
-GRArtu7m5SLXJpYC12HOJfA/9Mvr0n++8qyH3Pio6xCJASIEEAECAAwFAk/S9/IF
-AwASdQAACgkQlxC4m8pXrXyXoQf/SaWHrfy75VELW85l9dPzwETpdWabvcViUcOA
-DradhQzIxIAcyoO3L2lGaw831zZ3RSJ0GljaqAPK2bdFzDr5vBXajQmBPUepqh9r
-FuPtRfnDgD8QBuQ16eJSwAlZUAdvUVKUVC3leaLCY79YuxH/pHn146VA6UHjG8D2
-7wNuKjCb7/9HRWqkG6opBnRO+AQ3jmE3kZJlUl8pKTGSQIAe749MZ88Xbz6mMi46
-y+CJnPVzJATCtCswICRveqsBBTDdUldmqQRXhJiYUzUrKDolHDvvZqdOZlVpFD4G
-lJo2LNhaPQXObu8HvhVzLbQJVqGgekWd9oT6WUObDA/dBCtK8okBIgQQAQIADAUC
-T+BO9gUDABJ1AAAKCRCXELibyletfK5rB/9h+DgI3vG0BS5Cn/Q1umTk+PIkbErR
-dStlGMhdjaGkbpLmzf2ocp/jhLVe1sjTOLqtAKadbN0iXhfXHRVRKDQOIpW9fgxM
-t+cOJlSK1uFShmA5WFSuTiNaraI6U0lTRgNDRPgFUQhLdfomo0945qNMXS4s3bGT
-docJjeShgLIUVwwPBlDYCGGYgGAaxQLRVMaJdjuCPGgNYgaXFwr17Es7UkGTPj7X
-7iaTW0RS/oQuwDd4XgKRDnlnjQdcV7j5qUDqhz+19e9DbBr7VhemTBgCbrCrv9eQ
-2ZWlWltUgmQYAcT63ohtUu0H0b0xVtsWcinySuW2m840dFRmTpMlTAkYiQEiBBAB
-AgAMBQJP8fIDBQMAEnUAAAoJEJcQuJvKV618AsUH/1wcCiDPhh2CmHLDgF2FogrE
-lCURuFn1a1Dol7Cm96G1KBaKw0fI0DEIr1zVPvvbovos5JO7lBT94NxG4c66+FPX
-ng8Xn+To+Z55SUEDRiOP33fT2VhzowVradjd294nG4Qcz5l6XjwBVkStqi9T7WET
-FQzBbN81OPHEHDZy4IfyhhNS0rTBmbV+NBf1Mm/GW5tD3gmk0G8z7obQM+Sz5QBv
-/qikaiqx5jtRlrgUpK+7qo/hVAyXhzhUiaDaqVrC6y6UTOirkcFq2lxkYw4ePfkH
-/4b2rVl5zVFTDzHJhnFMO3zYHskFHwC8GyquFzCpq2DAHqbGQ6OwPrEfsIJW/+SJ
-ASIEEAECAAwFAlADFocFAwASdQAACgkQlxC4m8pXrXy8fQf9FKtTbb6xYapWLczy
-GZajrqqwfxXsfDzdBr6bdu+5hWajtG39DjQaXV2Ztqf9sKCtSuJ5YYGl0ICBAi6h
-Bd4kghYjGQKPHLpPpnA5p5lwMSsxoDzrdFJDNl54VN9ZxWgcoEabJwov1ewjGtsZ
-hWNLzR1hWr9GOFZtS/AypFvSQ1dqw+u3Iulzg+3DVpXmKiXGvjsd32l9Ee7BAUQK
-VH2MtiRAf/So7i2C/yzZjqXicGrfE4EK68XksImTg8OSyAWryg++C+uJZ+fjn+8Q
-NoFKXoIUxujwKC0H+XFNYecx6KmGX5Jx2Fx6KT3473OBN9VXMtqIR8VmEJm/+g+f
-zoRTuYkCIgQTAQIADAUCUBbtbgWDB4YfgAAKCRAzO+avbayZGBxXD/9P9nxeYuHB
-hj+j0SREaRngfsZWg8DjHVf/vp13gwBT8dCSs/5pxoq39ipnp1qOWhj01DfN4SVQ
-09SflMAWGdDbyxQ8Nu0iqWH1h8nqOOWIw3jPOn2bN7lHUzwcGPy7lPwR0nXc0Evp
-HaLZ9UMv97kpEfly6qgCe8ILl4ZH8qPrQZcl5JaE51nEspSdJWem5Hp/KDSNPYoU
-V6958gu7sMOIueVgAT0OzxgdyYHCrEb7d4TT6ik5HtSXcwBT+KnAIWaUkfWJ+9/b
-negUe0e3+ozRXo1NUcVVfH2w1m1k3bCfZfTmOQxjw2ilQm9scoxH00Q55AbviL0x
-fXFegZnMCGE35nq4Sh5sp+/+lAxeE8F1NhYJChqLRCrmYM3yVUA6VVpe7m9C0bh8
-U/feo1721Adl4CHmDDlDIHnfzYVIo9pFhzZiDvx0iKE7L0tonBiIzbjTPPskA2L8
-oWHo/wP6HYHiHYb6iVpnNpfCz1dPVrb82LZtx0YvOUy781LJ/KqvOoHAcjv4GhDE
-3w6K97it7B3w6NkB6FgeTmdNA5YEv4PjTnf/FUFREh6lUyydfBWCXmhAwmGfyjXj
-RIrRpzT8U8nth5WQEe/GP8vAeVPN8zsEnab5+Lp173j2Vrn4aQwdtjmK8sJkWjmA
-bGHej/+fukvF2mBHCY/t08CurZk523M+yYkBIgQQAQIADAUCUBTi/AUDABJ1AAAK
-CRCXELibyletfMPpB/43ht9s/SOdDZ2wJoFWEPZUi+uFhReaGcIOYkZPa5H9k0py
-rqIqcFLpglG1vQlOljDeEwo2Lx5Py43gFnJuS3/PDtEARRoqvZ3rCyWOIyTw5NEL
-18HKxbVccHnNMhNfSOfa8Dp9HZ13AOTh14kbgA0Y3KRUVvH1YMj4jIhr9kksifAk
-WfSd/o1iPwPMjscMYxuieT71jMI1QitTo49CC3/RNnhaFR0hVyuqMjPqUgHDkPdG
-aIfNk+Us33s2ODj+DmyCbSYfT5sn/Fj8G6ISWjsYfZ53vCYJag8NvHubhqcZtTm+
-omjAiw3LfqTYKqggS6Y4CoJgzVnpS6FF539gqGh3iQEiBBABAgAMBQJRPYdHBQMA
-EnUAAAoJEJcQuJvKV618mM4H/2WfMXfrEuSnDRRZeP+wI2UjzQEAvdwayAo0QCtQ
-pAsk7uk05dmblsJh69l/EsxfJrKpGfaQJUjC1WMLPuMV9wYqwbwUKakIA+m7UBRf
-rn/fXRaMB0JHrrg93io1c7pT4iaHIucUi5doExfwBbLGTdBADFLvLwk/2Mn57Sx1
-7q5vs2OMT+oUnFGqak+PM7M6JwFjZNJTtB4knpAS7DZdc5PN/OWSKDtRgqO61fFB
-vYyZmB4sV0CPBk9cNe/5IGwh/Bs1VWpdRBLH1Mew+W22yTGV1wEDSzGl0mQOHVwI
-xuq1mLPihgfqjBOAihTM7MpLRJhm3JRZPTvhDE/XdUwiGnWJAhwEEAECAAYFAlG8
-aigACgkQwBMwnW1+RFwyeg//UdTgxRDnxgvuok7pA4uFH3WmActR7IOxmcWRpC15
-jnb//yaDAyxEDh+XqZoAbuxsW+GhEhQnb3MH1TszphEIH7zwUGAzPq2gjLZ5NYel
-I9K0P8yukXrtqV2g7abUy8E8IrV7fJWKCwnHu3ETmPW6nQB1zT+k2rGwB5uxWTLt
-CiQSutdlJxDl90Trz9mFmvffnDi++KW01xRxjTtdoL/khPO7cVSH6y4o+rf5F26v
-AiqHpfg6DNDCxAPIajfFUH/IuwX0UPy5YfF0JJyIb69mlDz6+l6xXV3HP5KU1Jo7
-or97tyVeIk6ag+H2KqfPuVK08+fBIR+BsY30N1c6hEef95CIbAhYFR0beVH4s2YP
-vfuZtSgFSTjqK9Lp2PChUCViiKElNyMTY8Zj6ofAPFCIh0AECvnM8iqxgEUQUboa
-Q8N5oIP+b18WOmnOoI3/UvnJWG0c5hZsBlQUyqbyHcxAerClGxHp7/unarxrRj3h
-U9AjdW+yfRZ+Ak6K57vnbWCivUWALMy339CxMqrwIhnwsw+zzJ/Rc8GzouHLnfOC
-jppIpHRJ1035gejKHisT3bmqrTk1HPCdBSOO2v2BgjAfgXafohaGThCyvt/rrpyF
-UpyxfE9pwWNRBUzW3XgrsWQwScdch3O0eda8wkSXLJUFm+ejcHTSvYIOZzT3nO+9
-kXeJAjcEEwEKACECGwMCHgECF4AFAk7wUp0FCwkIBwMFFQoJCAsFFgIDAQAACgkQ
-x0bPqedPpLCVHw/7BIw4LpzvVCckusOOgC1S+sXXJ9RtSSywUITi9OxajIE5tNIJ
-J1ykTfiD+KMm20uApKDft20KIo7onGiXdSYJ0SLI6XONywqd7VV8wYXSMqN4cN+l
-wdmwiBhegBQ/25Sc4l6CUy4i9Ur4LXiYpu263I2AYi5wZQasSdOtP0aujwQQaNTI
-LMP5v/qiIAVQzSPCVUjti/maPY0mh+o+gndurAxph+3vKO35cv4iIefHUdWI174Z
-T0jYLVYKD5/+zsMSPfWRp8yRfqKnptlV/wt8V0PGdQ5PutSdIT0NdzOskrBjLFJQ
-VkpOkvFWNbMscmQuw2sw+uc7NOJPCVNoKal4ehr0qt6dAbZT/fo2nQDs9/Zv/tSw
-tx/iqGlfzJ3qZA6x2gP/kKhd7HiqsjKd+ccIK9gZVZwtlbn4I2WH/pQEYVu9fx/r
-HbodDsIs4TgAayftVGon7lwHtfpEOe4RW3bdzPnBaJyKEelD89F85V9k+v0smX6L
-yEDZ0+ck0o2NFLFfxYWtAs/4Cwv1oQeBsPkeSfiruSqXarGnTDO7ZSFyLMaUE4pi
-jb4SlcXRUpY0w3RPycjAXUsdUTUpzk9bQo37Tytw4zwngaBLfoiggEVFldsmhmS1
-DhrrxJ1TtOxnZqlheeE/9IpnZ/wqq2puFOXcKdG7C6o+fuoMNYt8M8umJ6iJASIE
-EAECAAwFAlN5CDwFAwASdQAACgkQlxC4m8pXrXwS/AgAvsst2Z0tLq58FUP2kyvl
-45KPCs2zgKeRX48IGEC+fEmn+GrV+5KteVqYCM0XSAE548gKUKxMK/1dZULhBSmr
-aiHgopN0m7/WIHwU1kAPoqFvzlFBZFZg6pVJX9MGlm1djuWGGQI1YIbMkoXxtKR2
-CaG/HmW6H1bBKQpHgmpBt/iX0by1CY04LqFJrfOfruIbBbWYGZE4n4E4s0pbiZ0D
-bx+XZFKDZCb/dg9evRzGWVrMnOHPkaRpFDuCEmF2F6KbxS7V62Mf3F0cvRVEJIVs
-/bJ1WjVfJoYb09P0e76zYivhjP5hQvwt4WMmBvbAkd5rc1x0n7g6svw1nm4l4ExL
-yYkBIgQQAQIADAUCVU+vrwUDABJ1AAAKCRCXELibyletfNQbB/wKAlQZ2oeRlnWm
-oZTvE3NsFDadwzQiE9+vORWQyyBmbzNRJznFOK25JyMjvxgMfiDGy1wXYcfmoHOF
-rNcnVKUy04RhpSNs4lcSO7aeqzpp1o4NXcWxUsCwguAoe4JmyKd6ZJKL8HfZhCDB
-h1UNNhkfhKh7je81tRLdAOKTnfFm1lh8ug6wL2K+SmF/bDkg62FAfI6O1Uhv37xv
-IhS/3LBzJwWd2pkUspXpddnNlKDtZzMivSuMN/WJu4Tw+BJPAaWg1icRrvLKUiMG
-jXrQKTsZ9CyRS//M7uHh5rHoKXV/Pu2qdq2eNEkmnZ0Qt8NucYsMx380zmSTGME+
-WaSsOcG1iQEiBBABAgAMBQJTitUaBQMAEnUAAAoJEJcQuJvKV618VGYH/080b3Mk
-260CqVMKIfaNrAQbY6BU6XJ+GcG4FTXlItLnBV83L9zks2LrUhHdRIaBho5tMuqi
-GICJGdnaysl95A0mhBPuYztkh1wJpR3zLxwtE31r9IzgrPQ9bq4eytgtevYPMCkp
-tcxKI2ksQ9a3B0B9u77rBXI1JGYlHvoLwefTbWhY8hMf6p7sN3k7mjHYAlKLVrAL
-z5wxBEV1Z1kjuQYnXMvmHUVBR25yXJQSt8mdX8yuP5sJhalj1IObm86DilqS14vv
-yGq9TPRKyuxZB3IWNeZn9zrxUxKteEsZZvSehEYcPYs/H5jLqKS71jPCovv3c/UJ
-vzR9BokAhiIVIimJASIEEAECAAwFAlXFA/UFAwASdQAACgkQlxC4m8pXrXyXQAgA
-xAq5IV+SCZD8F2H8/N11LWTDUROz11mP0iQdvJfzAH9pFjAU4tT4raZzpdZ2LW17
-iymKQEaWdwmO/tPtnXBG//+gtIdt6R/u15Vr/P5vTIA/BM1Wz+rGAo8/PXb8zOlO
-9wkhdk0KbfEpKTROKb1HgzBXRBIgVix+P0d42hfLr+F5emqz9rzcy51dssP2/jAz
-lpPfU9up31POCg2qQDteZppmyobxPcGcVgvh1qaLkAUR+AAzTiPO/QRjRFbg4C/4
-nRQfCq6Is1Shea8GuW+5L31oH+Mw1ABZSGNLMsF4vmwPTCnimvm8tB0jTc/4n+IA
-CuzSZkUlwyox0q895k3fmIkCHAQQAQIABgUCVesKnAAKCRBrSWZYlD+rIAXKD/9a
-w4Pwum+HhkYnfpIuTQHDFqwMQ+PHiow1x7PVBpCcXiALtNFR+GFRzHvPprzobFwI
-9Yk1/+ASq3TMm3P/OLh3hGbBP0p0uW+fomw1Mfu70n/eFhJxAvEGSwxecLtWc7C3
-JQ9Cnk5vdsCNgdGtVrkBl00FfNfXuelYnlooD41lr6OsqeYKlynzj6AZjtp/5+8y
-XRhnc5V/cFggEEy+wy9lMLc9swxH9cvya11u+uL4t5qrbhcJxg0oATua8W2cQhlx
-oVePJyHKaQrHsUD0QZODsevVJN+LpiYGAxzMIgvMM3LcwYY6lHgusO3QBoYsptIj
-/UiG6TAZnld6OVKcM8UmThqoIQavq88QxS3MsU1hI2CHc1YaUyK577epm0yLQ4NK
-ALghSfl/YC1oMXD6MFqznlrK4Rmkf1NI6MfTpJWS78jel7dF5VKPcRcSyap7ArQd
-wof19DMwpX0lH/oO4hnQAtdnrfpGTzvJRgDtUIpagI2FUUHZMHg4Zbq+RtX3aATg
-8BF6RfQjc8UA2JTKR0iULG6N3yf16iaR06RYsn6rLcVdlf3O1YTpP7B2rxMzMnc1
-Z2y3NxU9lmNvnWTgLyH3CpR3QP2mvqIG2WQ8Z3KL8PJyuwijxhktG8h8ZyA3Yf1N
-IQ8hbLM+dlKDAndf4J/NkN89tU8aAwIPoUvsuBB8nIkCPQQTAQoAJwIbAwIeAQIX
-gAULCQgHAwUVCgkICwUWAgMBAAUCUkNlPQUJCkElzgAKCRDHRs+p50+ksE+sEACv
-XvU745MdnGK8EzO+Oke28QAYhMpFV5ZVE0JJEDVXOMcxdtqsXCzREMtnSCXfdT6n
-MgstGeMxEqfD38RIPYaUp1TpqXvIgk0oat4DMzJvpfHO+8oHjSgPQ57aDfCqUSwF
-XTjlzVGj6xx9kDRJjRKr/B+Ov4LoUQxPw3iZuFinlUQ2BTOkXTB5GtPQDwikJPFT
-QGY8OWa0UJ5VOLDDbmI+oHpB8CENi60q52AnVYyes09ZcYu6+irjcZvz3CWAFAl7
-Z0vOds70VzG6ps96CFM3SiNb5uglqbt5fxPKsPkLJSOiRnni9As/hx+VOjcg+BkQ
-SLTsnTDKfICwTGAi4S4JEGsiLjc9kUs3WBkFLAWmfKgAqFo4rAE57U2l3QK8nUWz
-mVeDyQSEM8eSPTFL8TiazTi0x6IrljU0qMqR5M+u2Nh3/nvQacbskxW3bIaGu6dp
-ZYaFLWCmslNw2MLCqSLi4FJ0FHwM8VDSVU/ajKn9meEU6dAhq3WkJVYZJnIFe7eq
-dbJICo9vo6pl2EevZaFQIj8YkeXHjXoBAofU1HMZUEfQkjeT2Wzmgl+3JezYHcfE
-6eSxWpZV9cIZXS9IzJ6RF4d+eAnU68zREMshVLyDT3ySlscIRGNWD446BAJT1iTd
-oMblFs2Hw0o05TTtYJxr/eyHBf44hF1fNSuq9t5g+4kBIgQQAQIADAUCVtnwlwUD
-ABJ1AAAKCRCXELibyletfKW4CACVj3FiGMUQjQnCoze2jf+rlraiSvMvzKZWEUqc
-amRyT0Piwa4dgKnWcfphJzpz4b6K8dBjpGlpHQCQIovjdN/AIKmWaC7OXiziVJwL
-wZfH0XK/UrJOTEwmFiKSRzpfihRiRRgok0MJjfH8hn3XEAfeiAawvnyhX5rAGtDp
-va2pWOrBBxeMAMa8xsGWGIPn9/B+vjo5HdMVmI9rQHAw6OSz8vZjROLyL0I94ONs
-bg7LzaD4zH5z7wTF34/O9iPga2N7CIy76vXHaaNpKrB96vd2RbC56ZcYTvWIkytj
-69UAHm65oU2fK5MJBg2dfZdM7LvInrmnT5W3k7P0Tiy7JyS/iQEiBBABAgAMBQJX
-pyMUBQMAEnUAAAoJEJcQuJvKV618+DIH/1maTqc0flIur/T3LLafbwbPed5oWobD
-/o2bdDRXCGfq3tLz6nkKsiND6DPJUz3YsCZL6Y0f4y+fle43Md+NeqhwjxXddKyq
-6v1h1/Xl3aMya3RFTZOGFgLQce5Om1fnsdx21EVmkHLzmSspXuO8g0WwoOCd4sq8
-HvhV5Ns80tm7pGOLQ2bsGumUbL/v27uCzB8Q9nM35EI7XoRKgsV4uA1N4e3ybzGB
-aB5pH6XY7XZ9XesxlwbEIRYpJb1AT4u6dvkmujumvODBInKH550mWhLRdDDTCEJA
-tdTYmDb0z4u8x5jd5o52ZLB49SlYazy49wtTF6FZ/+/Dlhb5Sd61762JASIEEAEC
-AAwFAle4SBsFAwASdQAACgkQlxC4m8pXrXxdCggAs4vmnSL3jd06b0dAX+DPKBiU
-CywPsXQp6s2nYuWeInLTnLxNb+2EfuLHH7iR/GyhDH+uYBuSFfJ77O2Aq4bXCjpf
-mCgFiVBZCW3iu08tcTIvvpNQ3pheC+4EKaZjhcEOrzp2nxSBqWsoos/UQHd8eFuV
-qRYtDAKeiykaHtsqdcIZiS9/Myzb4UxCD0n93PfYdkUfhrkGIHVXSltleSe5qjNC
-CcMJk+Vz5FccLiCw96oKwf1QNAZH1NWAlq8dl6hkhEYXHjn/BjxL86ffsTD4cuUP
-PNGNllvtU1UCAUS6kGjBOluJctyyobtpONYrRhsNjAiBGBPBlEzV+EETKSVye4kB
-IgQQAQIADAUCV8oS6AUDABJ1AAAKCRCXELibyletfIJgB/92FWwgy1TjTk0WvMKJ
-x/wiJbiSitzomSYBEqSTrvZbfBBRWSBYOb19MGPi6ndggObkREf6O6iUMEFbMkX7
-NSDcAMI+msPb4B5T3gcQAQ4R/Q2uJt+d29jGT62oDxRwxB6DWzTCY0URfGygBRT+
-y+CbrZ9g1mdTrmm6UROZPkjHyFlir8P/s7JZiWMCwv3tf56lPmptYmYQgIafS6Nw
-Wj//XC9HdiV4QmygcD8s9H+kvBuIrQRkjWSmf9R68AxV+Wl8guxxervNRb0hqzmp
-FuNKUaqEPJL3Apnygv7qslQ01XU3z84p2iDJMOnq1SWqqtFq1aQpEmBwkZEZ+Nxs
-XS/qiQEiBBABAgAMBQJX298mBQMAEnUAAAoJEJcQuJvKV618Sz8H/0YxPohhfSPA
-pLJEZD833264S8DuA58TRkx6cuUVseF4LmRCPwr+KBucpbwA6Y+Ms9eMQJ1Aju4f
-dgRkl8QhqPORrLZ4kFGeaZHK/ZX5JWSWXb5bhQfxSUiIKnkfzmFEmWsIgYuhZ/uS
-U5kCR9KO7pvIQIPN46HoA3pKBSsy3wUs0Msqkv/RMqNjsoBvhW9CvHoEoZf4qkLa
-2Eb13yBlBFevpQMOOIi9q6gEZB1SdSWOwUrcNo4rB4eGsSDdimnHXl2w6czmu43y
-JA82RprCPrBNZfhcb3zZ20/WPOX09x+IY/5gobaywEZ/ltvDmJqURwH4MN9qbd7K
-jYHFP59QG46JASIEEAECAAwFAlftAqsFAwASdQAACgkQlxC4m8pXrXyMwgf/aK8C
-MX+OoRNwhVCA6+khOTe7giQjnHMGCWdEBOJunXRYiU+r+LUA2c7WOaFICmKn326l
-8cNEEPoCHgbOXpqnbycu9vzW0mAZWVMYmtaGTFPY0i+4kxmREiihGq0jRxNo6PdU
-B5C0B/sKmLLwDZU4gZlZcKIvZ3ZAyBpjAtLj2PVv/EcMMwM4dNqutqLCoWrnNdwK
-eP2ldM4qCORke3UZymMd0JL5bfz/+pn/jdY1tj2NjcciRrUbJdRw98Ihxlu8Ohu5
-h+uErDtkBM9C5jBpVkVhprEQNGYyNklZWeLy11IJD02BIN5eUkBrhbSuhiAglStf
-GR3LFsyaHqDgxh3H4YkBIgQQAQIADAUCV/4mOAUDABJ1AAAKCRCXELibyletfMdT
-CACdNIBUtk4BuCQRgRaXkwrZ+VE55F/GAFnKOw+MGcWoStmh/qByB89Q+xAPguvp
-QLGoFmXd8MC6Jo0QT1PYSxZQ8HWtHk1KH7J69uCuFzYZDPiVrlkQgR36fv+xsfzC
-Gg92MjAUncRTnVHxZF/Gt7SD9/6/dAlHCRQPBioxrDj8UyANM/PeHMoJRM54Kuj5
-lm6RRUSxfMofnTuaT9rUQpz1/CyqIZ62v7QwvjzTAOKod9sH7YNaZCNQuyivXSdd
-FMf3eAiqaoVGYAKUxkk38lAKuy60DHfRh6i6bh3UwXIMfo7Xt/wtxfljzVHcqWY6
-s2DlMVQfjL1LT9ZpXOMnkRTciQEiBBABAgAMBQJYD/JoBQMAEnUAAAoJEJcQuJvK
-V618cYoIALhhLdAYB7SfGmJ/J+j9US3dYVvGN2PorJkYJjeztWvX32Q88+eNser4
-ktkLcxqMSmq0nLwzvYDE6f1nBKTn03VaAqsm+MxfVUcLJvTJCv8deDY/asaMkylj
-p0UzdXlNgTNmhQ0Y8RPjLUgI52Fnzx1mNymETjBulveZy5j0nPo7tJpel9RNA+wY
-SqUe+BI1uXGDuA+7h+OHmgPFKYfPkY75ESDb8ctx5aPystQzp6fchPeNDXKGOGDY
-wK7mqga9y9eDEpE/LWdXxPudV9S3IAVlUx70HE975WT0siw7p2ovPrW0X90KQtv4
-BNVyZhDEeLRf+hZIGwnp+NSyumaFRWaJASIEEAECAAwFAlghXFYFAwASdQAACgkQ
-lxC4m8pXrXwMagf+I2cMqn9H/3L0+cae8n1RltEX44mlvq/xsDZCF1jP+s5oHQtF
-fLjN4YvNc8CGisjqKW0ZaSnEuAT1a1gQPkrpByf9Vf0cmVeEL0cJqqYNCoByALna
-74fCZh7+R8ZQUR0Qqbjvu7PzSq4cm5NeQSDLL+NhMtFE/9ZLdJMPwpquQG/0vHHc
-K1ZsJWMNJQG7wweBzENiebUs1wnjcWjAx/I/Nadk0drjAKAxQ07jfJw9ub7diqH6
-/uoevNUOy3IR92B8MWNqqVthCLHNwp7FI+7H+zXKUNHb0GENWb0wla6kEYzkO82Y
-SJ4UhkB/NX3EK63Jmx307lp56eWQ+OcVzfEPcokBIgQQAQIADAUCWDLiuwUDABJ1
-AAAKCRCXELibyletfN3KCADLM5S1IVSQQ4LHj+dvtOlhhntm5VutLrb9dg3XMX4K
-2mUDatLZxrNSVHPP/Mt7Pe889Vz7H7xEAbZbcsVty2p4xaQHrao0vWofXyyNBwoG
-hyB/Qp7eRswL9jHy6KLwOJJB4UJheZvWzho1CCGKauqP7ThMEyvPqgiF8OmxpERB
-Yq8sy7C91GOcB21bCXBInTp1V0njfn3DjjlceYJVzmDcKEIG0aGgBTHFxWKVxe5j
-PL2hWmGtufh9W9RRM9CqqkEsNOz2JDzO+9rL9q3R63mHLibgq/b9OcW8nOSCvmVI
-88ToT11/1wQmrxiJ1Zyj1eaCmwOZHLvx8dG0BkOpHwbHiQEiBBABAgAMBQJYRAcu
-BQMAEnUAAAoJEJcQuJvKV618PmQH/0TZehA9JooIQyEAyXQ0okYLdQfwjDlCdrQv
-SQH0Ki1WjFjwHUh8y8jw4va9okL7uvYMWpOF+1oSnhnn99pw2RlihzBwq6+efgIn
-UWHClLa/1JfSWhXjDCQpskV4Vv6HopeHgUct4HAjTAP8/tHzbtX1YeIf4+xZr3cH
-FsxB4Y3QtQRdWZ/PSXD2g+fQWWixyTGradHRu8RIlauXkcVwFWwZO0QeNnarhprk
-jMChGDXIx+R4k2lO1gpXlcSbc8bnu+/nkaWHdFTMLI63O3MiyweeBPPfLsa9hOXK
-99b9GgvcKK4HmtzCLuuvN98GNRTSC/0QOYSVk1r/yG49+y+wI4aJASIEEAECAAwF
-Alhm9UYFAwASdQAACgkQlxC4m8pXrXwVyggAuK8nSVlATp9uLHwxZrKt+e5spt3T
-cnHum7qIYWtZGiGT9rFkZ1IylmNhAd4kwkkzP/TKK1kZr/rJHZujnyFrNksmKR+E
-v7W0QxcNFM4/wZci6M2QMrp/cbKDA/L8x3mkhMSnnIvFnCDE7oNHLmiaitEYId41
-4lSvMPXj72tK5XRSqSD41cPHaZv4vB/Z4qquJDvgLQXrjy+eOIl2g+R/8wC71tPw
-h5nyNlD7mLJyalPWvYZFOOMbD0RxDK+R/wIFFNCgoDE563/tCxJU0HA0pmq9yOxE
-mFDpZogiuuL2u8fUHO3sftWZO8AZxLQ6c6R421Sc2z3qBfsrXGDaHY+bjIkBIgQQ
-AQIADAUCWHgYzQUDABJ1AAAKCRCXELibyletfEWtB/96q1mnlOHCrGCxYYFR2SK4
-/F2S5gvRnmlzxbb/QwPtN1hDbjTGRgntncBl5/kWBkIG8sb2lFuoecHSr8qTkKSL
-70oDgTDko4EplM4Y9j8zAG+RPeD7Dw00MvVFyZE/GxTGJpH9ePQNTqAlDsSLpaqi
-FyTZVGzIh8TORUfipMizx3BMdotEWDwwiI4eFetaWlREBrNKUNrA59uaZNjqlixn
-M8dPIFVIOl5aiuguT0A0YnID+wmCng1xQl+Ucdi8rKgHeLXJFQDQ4mhWb2wuYqE+
-MhnYq+E5A/LXI5HvUSx3tLL8m07YxtnMkTNxzqQNmrlKKmsxHCv19pNVvReIdNpz
-iQEiBBABAgAMBQJYieUVBQMAEnUAAAoJEJcQuJvKV618x5EIAIWwn96b9B59yx7U
-txz/85ZZm60NNSgDt7ANdhpUE+367gAJFVUQGS+E+KDnmEpjWUh7+DkA/zjNPB1j
-adlfMGBcR3IHG5g9EPj1TWaqy+Je4uPJjKRPW8gwm6MleZt4A02+JUG+eOocqjQ3
-MJgYNG5Hi5gEW++V3uXoJvxCWnPF5ELGrmH9NXhwp7vYRSP+Mg5Xd8IwHd4SSYfq
-Dqw1qRQf6ph+UVxJrOFBFDvyR60k9PnepxTnzSnJpUhkvy1s1zxJXwODn6qdbzuc
-emWLcAXr1wO/akxoLblpGWMMP2VeSZMq6K5IOqSJoCkh3FPKQv8VkHULkW33bx/N
-DCePeMaJASIEEAECAAwFAlibCKAFAwASdQAACgkQlxC4m8pXrXxBQAf9E2NXBGP6
-/yPhnVZiZYdbV43MhLyhCKCFS5QaKnndFZgP/NVouXjzNCLdVSyi5HTKWuZc0kD0
-IIDtVskVMHJgdOW7XjozmzDq00dRQTg5BXkiYx6NkM2Og1+0pz3Bxff4Kxf++VgT
-Vt5u/HTbKZHsjye52RS+UjmwcYCWiPZPIzYh9A+KP0NyiJkOEtTEUKY/uBIhGFEi
-hYZr5UZEgA/8evE3vO/q4PHzdygcWLpehu9rIsVROEgln17r77wc+I/p+jBgba82
-TB/zi7oUecSJVz46rgOMiShhzg9DxNmU1n4pl1YX4X6R1zNO6wieNQ02yBJ8VakI
-XiuITBLQZKz4IYkBIgQQAQIADAUCWKzU4gUDABJ1AAAKCRCXELibyletfBpkCADC
-KqjTlb3yDsdRFcLU+GxYT8jQsn1L9V62W2b/hMMXriEhpYpgn/C4k8XNGPfvj7GL
-QaDv5ILtZg7zynZTrp6oxfM+DavAzMs4ueycr+XO2a2Y0CQg+lm0dnL0i2epRCPN
-MUiRFFneboXNpGmFIPqXsdI1xpG4QOiU+8JI6sQ8fNmY/Hqa9OBPk1M5qnrmXlhq
-MrDgaM95kdL8bZMBPWcUujGgEypp+yiA0tQ9j6Jm5MM1f7F0ArhJJnQUITpmkKMz
-bmuEmp7sm5NvwZbVCqh6u/W8REj/ahlR3Erbpfaot1NjrdcEfXmk9+Uxq8MZLPUK
-kXfoiybd0mw0yCO5cDLliQIcBBABCAAGBQJX4uHFAAoJEGqmoTMyyAqczqIQAMgg
-NBj4zC0TvY5vrBiaju04ciyv9o9exb8iZeejtRo1s7bTzFmKA2FeFcKiuOgX9KFU
-pdiDm61/wG3LzP542XffzkZd1DtFfaIBCErujTbOtZhsne0LtiAdHBmHJUhVUOWP
-7miMcrvmln657Xw7XK+HKha+UywTCHWk+N0DrVq5zcYP8cQReQwaWyU+btTr7eYH
-CfViLSZSgdIzaOh96cArgLE9DeKxbCZNvVq4iOJlJ+yIFl/z+/VypqNzXWNQKTFr
-P9o5ugvcwGe1I0b98Yvr2ar6gXKuc4D3PpzK//aozb2y5HWOqTDSuQZLWgbTKwiV
-xWSycPa+REnAmGH0AuE3y66Yr/BZUoGULdeQoLK84cn5d/PIYrni8NcTjpsYeODZ
-bDXPb0guGC6xdS8fIDinw3N9+cnzPzznZP5FMKUdhW8ocquM5+duVWWIkSqICVBU
-rfqxMTPKjY6aUhnlW1172uMUimbqFNPLLmFmmgdweww2PqM3elYURyyP0yWE4fln
-tEXIRya+OmJDfLdoC+Cmr8ktInyJ2iifqXjBpu4zihHowGPtVBqOCpgfoG4drBXg
-tcWzT5j9qV1bgvBE2IWu3Bu2wJWIWk3jf9yTJloOkqus7eliD1Wt1SreUiZauKEX
-OHPXIxsd4mVfD7bDVbRfC5xRgu4qlRg+KCSqhlcliQI9BBMBCgAnAhsDAh4BAheA
-BQsJCAcDBRUKCQgLBRYCAwEABQJV6oT8BQkN6EWSAAoJEMdGz6nnT6SwWo4P/ihE
-aay1TTWSO8828Gy63lI9F5euUAePPUFKk2ykiZMkKUuWSKpOwqrjmSAcEeb5QfkO
-7WkEqwxrCWDVTWQ/kEXq/9MXfdowe29kVCIRFOHU2yymzmHBQUcOFretEMLb7PUj
-3ztI0e0wDj6ajHPnMbsJKM+xNy8lIXlpCdF8S7ZgNel7462I426U8q8x5GFcxZTy
-M0zTxLmKkFbzBDIt6oCpDZ6GoJLkJe+cgfwWlGaMU4Oxsi0LN8qaAEF0xPh0ro6a
-aNFYQQi78IohCh9n2f7SqicDSVrLeKmoSpNFsMLA2n4WKygWb3lk6QiVmV7bwgZW
-vOXqexLseL1g6EelhkhMFFhru+91oO1SB91th0Zwe/bxffnctFZ0lDhF3dBpWPHa
-ypbZR9kLsWLjuQHCwrrdsih56yTtdKq+R3r1hfZtfIxqQP1epsctmEwv53fe5UBa
-yOBCm0FuCGM8k+Z0wBdJEvHi+j4efypPXlE94oPUxugB1jLNHd+bI1SfxRJmEolE
-rWkuUelD7cQiKugqnE6T3oae1h3eUG80J5XGGrF8sCvn7RjQhBeqIgrC3hB7BtD5
-zYIVEfVld4GNZHEgKw8CjF6zpM4oPkDB6B2GSoiQffqo1h04hKGRyc+QO6hzT2My
-nh2YCHfa7rZeoEXeUClHnKAHoAFFUvU4Tw4Nr5ZviQJUBBMBCgA+AhsDAh4BAheA
-BQsJCAcDBRUKCQgLBRYCAwEAFiEE9oLNzDncD+rhFiC2x0bPqedPpLAFAlmv84QF
-CQ/MgJoACgkQx0bPqedPpLAFRhAAtatG4DsZrRrUh2dmZqixESXZMbAmzzV9C39p
-+n7p8Li9pcE224+MgbQjMGdiuSytmBUlW4ZR7/nCFhfKP36U7Cz2sYDobZm4+6fu
-Qhi115euwhkGBZb3QlhYhPdApZeoI3PR2siJTrgbPCv2DAMstR6Pk0um5TiGiaoP
-0DqcGLrhAp4ruXBF0SkKyKmxuHOwDYDijvHOMISR9m/Tsc71V9qobfe5sVylPUGS
-dtkvrFcmNGHmQurteV8A67Pu8AvKUyC9N6Ql03+onrKVQ1u1lUpvqb/ZGokfORJF
-WOvHTg7jrRDzMf2HNMgWR2aOrc3d696cnX0Lw1c4yt40hhRNSjKOjx6YoNlnJOJ/
-Z9T510gyhfP4YnF9z5nLTruayky3Zy+f5oyMg3awqsao5vn0Jw5pVBahWEQn5n99
-U47zvW4w1ZZOq82vNbR145l7vxvRQ93cjEEZyw8Mwoq76E9KgAf2RHGrjUB9RIld
-UkOzXcrsnU4ZarYme739Sho8zA+2ejhcy1uaZKc/0fi97jnAnIQ6GuZGQksPXlgW
-SzdxfbDx1/k7+l4FX0MH7WJsNL0Zuu+46816Z6yGcyqz4oZ1us76ncGX3RmWE0zd
-h8jKJt33+OX/GusJZXl6jHwn650lqqr5z8ju4hVyucB609m7NXGdQrFKOS45oWAy
-fgsO8eiJARwEEAECAAYFAlp4p0IACgkQA/oEY/B68xgmiAf/R1DZEicwaQCQOK6c
-YQIZcA7eO8EVIvoqXqxwTJyLaGzbwEYoy/0dG+hfgnTkt2ZhlpMs9p81P6FAn7Po
-6VsSRSpt3lGNXsKwEKMrEq6uLp+kqZK4KEaM4Kg0YMiG3s3fUK9s/k3RwEEZ09mU
-5HnwPzXL8dtmakKv03RMUvteBvDUjEsSYJhTpIG/Ug5hIY5oImkDv3G5oRkDl8iE
-lTgdgEBr5JktiyNPQ9XI5kCL7C/YnH7qtT07ChTXgXdF4Ae+v12CtkJHJbBrX90D
-8wHWO7YbbUmKnLrxbZugZ3nY5J1PdPYBz+SNoE1Cnz7EGaaGhmNq0Pf1sSgxfVXh
-XapieIkBHAQQAQIABgUCWninQgAKCRAdbmluJN2qxiaICACcE4hLmnN5VJ+X6umj
-Npa5CyT4myWPyuKrSDATqCrxTqXFJPbitdjKj7MaVln4vI9n7xBeYoznZK//uMD+
-CqbEkW5uDL3swHSUqNgW8+Zc9zpOMe5QH1SdaHcgOl4Xhi+xKi3NdtFxvLm2Y0iW
-Cude63kqu3cDFbd/5hPNpvKo3kAykfyk3P6OawucTonYMtqznMM9SfnHJD8E197+
-9ewkRvCin7eXNnPpaKH12q8Ib52Dj0rZ0jcpCj/JjklzIjqhCkCylsCe6E+jeXn9
-R0mCQ8DBTHXiRW2hQoKwY8xhK8unmNTXINIQ38F35P4blpb3R1ymz6okqbOXkBvH
-9euKiQEcBBABAgAGBQJaeKdCAAoJEFW/nIYTB52VJogH/id5XeH+EDaErPxXOyv/
-Pcrmx9bwrjgA+xTvTh2FmTvE28MmZwRWdV7AYFswDtEPDkiiOMWaf2ljRjNvhxqQ
-FFvvU/e4CJTxwbWXSe66Qzg7PBPjplrc+Bf19UmkQPBlMZkK+9WhHoS03MlVHbvn
-be9k5J1cpcx/OquhBKDVQUGqhAgzcBSB+R4Nv7OPQgG0KUKTpG2MWIxq70PK0pWD
-HzWgL2HwJVLMVcfTRg7Zunn5f1trUAUBNlbgeSdwqL6h6w7j0l9ipKqR+7r07ewE
-ZhfWXspo466HLW+yl4ZXI2igJwRAD7uPovqI+EJbJBeCcFjJX+cLRpQz788dwRGh
-taCJARwEEAEIAAYFAlqHG8wACgkQ1Cv/th8jxb1PqQf+Kqrn0Fjs4/98x8TjlmFQ
-CcMEDDIpqChw9LZhXiVqDKbK7IlDQU107oQk+LRQ2aNf0eScJTZswonumpVHmuCp
-AtRkS68jHl5omYprpN7/Chbm2n/igwRPUaCK49fTrB0z+ZMdFHkPrursP74sxx5V
-JZiBcrUGfdCDGjn/ok9GDNj06TPpJbhRvf6ZDRYS71MJR4iSOd8vvLbLtUNWfQLS
-iNJvCcT67vycESZJkNpS3rgNciBMv2N3m0MLeC9MpAsCUIjqU1I9W8jIKxVGBy1S
-KWCjciJiSUIh3Vyve0HFR7TED7aIomNQiibJfef0dHnbB4tDD8Yrz0qpf3KeD1C/
-FIkBswQQAQgAHRYhBMeXSQrJPtsABhVoCvwcHLaAeYXmBQJaha8tAAoJEPwcHLaA
-eYXmvIgL/2nOhCkNUdQ6HPXrhMvAZynQiNppmL/ibvUZhQydgCpQZx+XLJ32yuYi
-unqbn2UH1XSGOCtW+c1VIPASQS/6EajOYm+GVJ0f9mWY8UdO5rUushZGVeYDWNPE
-o+wS42lkcg+0lXki1sbwRY6IuwJMT9wUx0A3nOifpjuIx3d3syT8z1qMZ3y3Jnu/
-H1kp/EuY13mbQvZOfkF06i+4B8pmYjodpdOan9qCa2UFHG6rdDCZkHtVOANB0glg
-Ni7EIT4ehi4O0U9W6wn1GPQvaXJZL03vWI25pf2XUHnHzBnTcieejx5Ii3ppYnhd
-2D0atsoRE5ucZc+VAdoMcs7lmtSKD9f4RJXvrMbWbNW4ihuZU3h8b+8XPhIFqtuS
-6vzqrg2I9MqrMz89veq5Uq4ghgjKgOX+jXSZpDKNyts4w48qMXYPVEX84nxA4dVr
-w9CuWJwp97GLPBdFqFremO8+3BXD1MuMk8U7grBsKW59JISI5GOxykwu6fJG84VP
-ZRB+wroVqokCHAQTAQgABgUCWnc1wgAKCRAZDl9rP1fDhLpDD/90tPsaOG17dV02
-fZCg0QRxHysYlO0VO4vriqnnp6Z8PFmwR8T55WY7xPMU6ho07iPUBPYEev741zt5
-S6tvhuMuLvE0NoeCfsDiELV3dVNXsSrHIhe8nOcBUocvbAc11OEzTwRBAqYXFcME
-pAv6Z1A5NqvSDFJ2btFK8RozJv2lYnwp24dg9zYvlD8jyMcKx85EkLUkyzbtDY9P
-ZuzsAwSTEpaW17vT+PqtPYNuVVxlWs7aMv4eAMV2Vy9VENL9tcVt2+MbQYH6zLcw
-l09C+HRsP9Gd2o87zjzEcSW/hVQCj2WXtqYYYcKhhGmUDe68DEyns1nFCXS5kgcP
-zHoY8hLD5Sb3WV/MPPiznN1tvlqY1RXbnH8B/vOZ7Yl9gQgzP06brfnuKhpXdv9p
-H1aU440AP5piY2Fr09yT5Bep5eX2axmdN1/3FZM8rc9IZZWBGADzBihcYGc1VzKW
-gkrffwOSzkg+RzlQ1W7Lt40wKzQytKLJZJg/v0m4WkKnXD52WSXcd0J0SMSKEPb/
-DazLSHjNZSBb8wRteyhmU3ZfJuLQ1EK5pkYg5JJWxSVJHxEYa6ZVQxeE4UKVMdkK
-gUtPK4NIdJAomRq668p+/Q0eEyA9AF6MmhWm296oPvV79vLnGnyAr13o7gscH/Ne
-fgxIX+Od/ttZJWlP4akMhdba1RlTnokCHAQTAQgABgUCWnc2EQAKCRAEDjcYLDQD
-YiyAEACUIX/fI1DBJYRGR7x1z3ESKSN31EKluc3uPP8M/Kau2H49cqCxFZYkS7/S
-VOC9SanV8Oku+KcXZw3WUMtYIkNv/f3tcvtuAK8GkD9mzt/wlLjH06vw6ZjntSQN
-y06pSlnq6Xck6BtNkqhUbakwhb4sq1JbD+UD+kyFqshZ3CcFc+It6Ywfn6VZeRGK
-wYDCqApO5vrI8X4WqW2jV0pDEVeL7RqQUvIvp3MJYiEzTaMu2tY0KecpskPcUKWz
-0WnbCqFVLDr/4y3FisPamPCzmAtBDTzRxigxMKatSYDJNGQPCFlXYHHdGPQ+mYhB
-5nZsU/W5C79EUWIdWl9hgyDwAAc5VPyNwRwmcwcpN7cAm0mtlcT/wOP/YdJ1pNTK
-xiJEmQjgJUZ/WIynrkxw2JcIc8oy4gFYivK4Ye2jnQSaQWUFeQrOgtF6hHAEunyV
-cTPqXGyTjZmCABbxpl2barYntzUntmxCdGKbZXuctPiG7dzg3dOgGtFqWkz1EqHf
-c7z3ipTnea4logMIB8PWoEvaY+rWSl6UfgkMDDje47EEVTL4H+h4DEpDCFgTWcMw
-z6moxt1wr0kqfyGHm9T/AdeLm5MfxxZN0eTin9CPqNTzcWjunmZPxGnD2+sbb1Z6
-k2WQ7etzvuKbnwA59sjdC7/Hc0YKhtt+dmrECoac9a72gdLmsYkCMwQQAQgAHRYh
-BNAsIwHLW8GS4YnfX19X/sHoJU5XBQJakyFAAAoJEF9X/sHoJU5XZbwQAJ+YzfdG
-P++3lFUF6tuEI5MSPnOMCyGWI3Nmvq7r84AWqU5yGs4LO6bAPckJOoSEIifK4uIU
-Ique5CR/cP2HeWSJIxyrujtlQ2TT1ahLUE2ih/MkN79uyeyg75ZEI3aUuyvEDZa2
-JgR+HN1GsQ3TxbfQQJvMZ8lkEq/lO68GOIKjvglM2q9jRGzGmQAlyZZgLJwgkEl+
-vKrqp/DKoTygN3RJKM0Z6e6spzRtBO5xdmJt5+exl11Szs+lOedFrY4v9fZWkFLU
-fyHXUlhDdCygFSK+wqf2llHqPXXktB4m60bvqQ9F7YiHG6OHZc+uluZfQDFLCKCC
-KvdZbLQpqiX9pto/zLzAFgiQWO81K87tzyU+5e8qIVO3ICRo7Qr7pJBh0ssUzQjX
-b7lVstiZ+A5R6exxDUV+OW1AE+pVBBcyY4CgfAjHqvezUPPB1kGPgzUzlYzl+wfz
-5fw3pbR3xYRxdmBwo6mPSLA4DiNCBY6JMuupXpFNHdvoG/kn/f/UGz0ttwSXJ8kl
-fyoLe6VznayrteZOVKIOM2oRj/ndVekcGzHFSySqBKZZ2TSmPY/YE1bNiLLkOSyn
-u4XI6gwkau4aTP49GAQ/qxiL/bkh/ZgzJBjCIQoMtoTeb25WYZTv4dnwGHScqprj
-BJJxu2A1EnvrsAVtBYHx5XwbpqpOuZSE0DMSiQIzBBABCAAdFiEE1XksTIxvjeg3
-eUnR9IOAsuyPlEkFAlp4NVgACgkQ9IOAsuyPlEkb/Q//bKzveYKWeAoOKUzrFaOQ
-ef7yAbJH8cVnqqVN13nN/siJNiqMQ5MdRg8obzERKC2mLNlpuCtha+k1b7/EB2Rq
-FCK4pqfAWA5InFlM+pngiXeuNizcv+ahitkpCsGP7XmMC1OjWXLfbr8wnWXBbpc7
-dpjV+P0nfEs7tq9ttqnmwjFyfaUODTEoyzwSRZbCxoFTbi9sjSZgjhaCeXwE//8K
-XIse3j1Us8cFXa0tgN/tOEZTgHGkYKHZ3CJP3S7RphMu/bzhMlTFstfxxe1yFfsS
-k6oDXM6ZFF9IcOSHiblP5U2WJdgVkaD417vE/5Z2mINRrWoxXdv3f515t2QukRqR
-SpJfZLH0OrcQ3QeRC64aGTI+DoVPjqFvTlDJgTFWRFklRZcRLjPSjO6ElEV1Rx/L
-iC7DJFO50Evwj59sWHo5gQ4K7Xb4nIc17PSj9rdy2zSjHfvFlq5cWK2CglFOX6uf
-IAgQOJTFaJIkXTDUN4hC0aDBZcXthc2O94N1nGcO3yycrPZJytua8zj1EjSsK6LW
-vStht8KbXP0msxBgPQiMIuds9A39dAFyCfOv9/x5CQlNt75TwBn+5poAgeb9HWj6
-I5kLA2lEwWUkSrW7piEx5OAaNUwwng0tC5VcfGxmvi0j8ERB5VtzAAFNcby5NYFm
-6xVpswIDrSH90WpsA/hQzjuJAjMEEAEKAB0WIQSii/QMPlUTcmYtFPdBqufcyj2D
-UQUCWn9fkQAKCRBBqufcyj2DUV6UD/9OD0vaukRJtz08I9+gjq/YtPh6pbVpyqMg
-8lE1q9Ck8mAoqeH2zoCYms7vAvatgaUCQRzpLApn7tcRM1b9m4mZJRgbSPs8Arvt
-ujTz1rLlA9T+icFlJSzNQp5rJFmm2vAQGTISHt0QDpeLli3LNpPeyofY2Le3SkLa
-mYCaLEgeH8TGUWMr85wa1FC8K7vl2gtNGm0/REUFPLx77ToGVqbwflqzYWbwYXpk
-UT6DLg4uraISJZM69jg6U/z/fTjyQAMs6Ugf/zFAzoJ5nZWTeYpVO0Oj9HUaypcr
-OMra+TRiQVFF5fyqFbsy3hyzcEQO0Xfpx2gkmpI86OcjcpKDVHchoiCC8ru/0tjV
-E/XhKOyh3bgCGO2xd54nIZQ+vWWPfQfbONEvkbqiUC5IYBx6oUuzGFdrok6/saSm
-S9IaYVRQwx5U1DwRUY8Ug7+7N6GfnWnoZJ8uuVxLdlWiBxgGSuxxr7wZltyGyHTL
-N6CIZ0Wh6SPLvARAi9uNpGhsa4RMyg82aCnCWwfCjERBK9xHFtUUzdts2lVDwE/S
-Rw0tAhHcsGtQfu7Zc7FukF1PAdYXEs1j4v07b4EgSwzWPRmvoDInZA1v4HcuUC/v
-pExM5uGtBQfvg6wEEBNuHqbbIDj5fjJW2bglRoQHcNp0rX5vwtulTglBTz5512tj
-VOflhDKnB4kCMwQSAQoAHRYhBAjNlyqUddz4El3PvriI+7FRIaiVBQJaiYX2AAoJ
-ELiI+7FRIaiVyP8P/i5lZHeElUQIgwc751UnJHASQ9BEm0a0+BSZlEvley0ZBDns
-15oFG1vsOtOLk6ZgQ1yekAjP1qbf5tzssoKfs00kuB5L9Ij0lkAI7NVVe3YWKs/V
-kckVigGcTjSsSE9PKMo5qAfwSiQeuOPv5S7fySeTyoUuLX9l5FXS0jb0OzteHCX3
-OdbOMeGrkTOA5zh6KpR5SrFYbdNFF3uu1z38bPZrtzGljmKJJz0l23Rxa0SzcXtq
-eTxArexEIIqm5vgP3mhCCmeSdMrgbDTi2JdPM2GwBCUd+jTCXRYdfvyw/gnLTEzU
-utUypVVxt7D2zy5npO22400iU29YC3H8s5qo9/FO9BVsDIj1/79kC8xCpGirJFFt
-qHR6/2TlNLlA43vV/Hvr1injMQh3QbBxEZCM20cuTy+NpdHpj2PkZWnd+lgJDdRc
-tGVCIwkhOeGOpugX0APcnXAbN17Lzb04i1jbKPp1QcYlZ1xOD2MGyqD/sUBFog/B
-WFcI7OkD0RWDCgcM3bmyPYGjPf0gtOWPfFUF3lyuzHeI5kj4rIhDwznF7KPp4YMZ
-RU3c3DjrU2Z5iyTUcDoFKDgQGGxin0p7rP6M1mkchahf55GHXO4756WQrYpLsGr7
-Ui/FtXyTil/6gXykPyhWlXo0OVnJ/1UYkIkMiafubd3F2mkRNgS2en1mqnt4iQEc
-BBABCAAGBQJa4uQGAAoJEM8mXR8VZjHTmF8H/RogCKRvnc0ScGemRP9QFrkAGMBC
-ZThagwwv2ickJ2ONGXTanfQ3fzVtDPvg1gf3d0kZj25GPk43JoHx9uzRLhNuysPt
-0toc3Pqc9IbQYRtITX7sxrVDfDidC+AHVEVgWn26fsC5dzycap/igH4vdglWCsZ6
-5MruBQ+zH/1e82Kn864V2iBEuWOnQHIVx9XhRO2yUnXlYQINPyihwKs6r7Iiiv5n
-bFBTgRpOcTSyG3KgP+SMbZs7Y87QT0w3/m3bbe1BLX8jHfmfpG/eW/hoF+3lYEeI
-EKlRZxqenBWS0Guwo5Psz6yNS83v224C2frvtp/TcnMByCHzdMbXdF532JCJAjME
-EAEIAB0WIQS9C/WxdDXegeNdXq+lMHCKEmHhzAUCWn3C9gAKCRClMHCKEmHhzIni
-D/9g696ilyimsiPc50co86WzPAr7s0dkLAmVY9JpvcDkq5NRopZOMY/ZbL6wmGeZ
-BurqZigkWVgc8/xHzevScUVBaUppqbY/bC+r6hI6MYfmW1yanxDSFWzkfYpGGUQa
-QRC+vefMQnibNJbcZmbGqfoys8D2CwN+nR29bFxl9l8zNuT87dti6sKzLV+QTrEy
-wGpBwmaNIn+xHZ+v+8nKxidTX4cyCGGjOGiLJ/YnMvRghrEjzNacJiEtSky2IKKr
-1JsxpY9mCwVI7HCgcyS0GyR3TFL1UzQBWceOIOf/iWBvKdP8SY8fiaqTZ3Xw/NRL
-1K5jm4ahqyp6uVASb9Pc05f/kmTgp0r1J4lT4tUKWRScmdxkD8RxTM6VLhyRZogL
-T+9lJz4CpHpjgt87g36n5qf5DpISi1JwkIQBJjERgmRH2aNOlZI600xnVvJuYW41
-vHhu9wxqDlgTLhfWMnpPlm/fNpm7Kbl0lpyr4v43s8MT0fZXJaKa3DftFlhbmtdr
-5LigBjJ/o5YrpcFC2VwtEKGn5aEV5xnVqLhsHZQxQiFxugprFiH+0wH1DuHkxZPg
-qN+08EdO2zKexJp3BThFmFjji4t53CSLsoMXHeKovErpkwTschFc0mywL7t/eE4n
-zEJ7xArnSRstPHcF9hR9fA2skx+FTl81ZDxAARb+QfqDgIkCMwQQAQgAHRYhBBrY
-H3hbUmlZnWSTky0DfdzX9KweBQJaht3qAAoJEC0DfdzX9KweqVEP/Rhl9D5YPkoz
-kctSUq2XKd0wbgd7/K85pWMr4AEbdbq3/ND19a1/4ziyAdTJcToYCqeUUW8Ir3I6
-IcAI8sqr0S3nk9lGopIqga68nVSX/mrJ8TULI/etrJP62q7xAhzNlZBx9BeLu2r8
-5iSp74YyBgM8+nQ0un+zJgHwWQy2nyARaTQuT1ItccZSeG5wm0Vbi443fTS2yy+W
-/RlOeENcM1Vr6MdPM2w2jHFDQpdoifZdv0DLwC7RYhAP8SUKyqfrOcbpdEYph8M2
-Duu/cs+6PxHICtm5NG6RZmhBgWPBLNHyMLN9iqkNAJF2Q+XhJTzSDD/vJ+HX4OiH
-jcHLUddYTZ3MGAejxQ9H+AQk6S5Zyr3xI3JFXE3spV3KIe/IeO3RNeJTJfDg9CyH
-pF7YXIVdgVyQTnXFAyTwwR5QtbOmJFbxQkhE/V2eqK744jLA2JcstdXA/7TAdWGL
-ecffqO52cKcqhWpJslYQGETtTmqkuQqH/x3ViKwnaaXq5EqepEXhWmHiwXRGmPGR
-yuMnNHuhQDBQSi0KmOeYJvT45S4dyocQsAS5IKfoC+7jDNoa9t3qjDkt582py1cY
-9lTO0L7JoWWql7ty7DvOzGRbxOQsko4EmpRA8psvBy/acoiz6FbfqL9y4bwFtgkM
-KUPevmaMDsOyYfd9cp/mYWbRnBL0th56iQIzBBABCgAdFiEEnqqVtOlzG2t1es1i
-kilpK5pdIFoFAlp74wwACgkQkilpK5pdIFqx9A/+MwuG4knyKqUGMlWmWjgTkwNm
-gGl6LCjVg5YEqkK1QYOlCXJnl/csa4dh0baS/G/lGp2m2ix7jtzcwFLdtt4Jh5lv
-r7lfwXO9h35L5/UfjbcDiFNeP3nKgsv9QVniAMbt5V9BXj1+guqk88Hg2u0rb4C7
-G2wS9+KM3RPAByG0HobzFuVYEzIgkc+/iDJ/8CbhADpOPQ7d8DuU6J8ypb1bFNin
-Nv9DAzgh0KreCngP6LIwvMNg56NBG1pqSDnRMhtbY+WA7ctNCGqx+DNM8wg3F83f
-FBq3efeVXT/TkaPKbmdqU5nZu45uNhWW0IrdTXrSHK69kbJfgEHjM5cPoXxydgnx
-fqyGFIAvek69F+v6Dn3K/EVjyUYX3ol7NepIqH7yR66MxHSjiHCE0zTmWf4NjUJ1
-C4ppUsGsjuiIeGbCk0a2b2qMgMXzOC2QUUw++RgjManUicwPgDrJ9IkuqT0VJcUm
-Rz5nABVa6lsNvtcDbnMTPmS82KIDzuOcLar+Ajy1KUEnUlAx3AziFYy93lq65tLe
-81OIYnfLjVtkDzvu59nfMq6TTiBiBqcor2tHRRYgP2FevJ9BH80T0otQ08IffSKU
-mQ7+wIs6e4LZ+qx2UxWf3c+FRW9DJozaCYqeK9D+02kcs9eZE0UMlLihETb9dq4E
-tc2Hc/4klpmYP7qlZ+qJAjMEEAEKAB0WIQSEf8XEM32c29Rzt6YJZ/0ljWQU+QUC
-WnvjFwAKCRAJZ/0ljWQU+Y4ND/sHHhJg44VpGMPdIXxOiH/RW36L4HCYGZbL8pF4
-P9UaZvpOlmY8x+ZY3ZvoIV4PNLb1mFF2I+OJFZDsfiEcgru3Lk3Mx7ged7prLJ2k
-5qVZaR1/z2SXVkBM1ZW7foDsE8PtyhJhhZQ3/pFB89x5uGJOhcLuWKE51sH3dKFc
-XaSVF4QF8O3d1Uv+Zk6LxXS7hom1eZASyY2kVWhyG4nx+giw53JKAvagkA9Ftg0b
-eEPuRiD4gCE9skoWYLJfBFX4mwvrY5FPgVgAIogGWghms66mif7T+O4/2JPEX3W9
-vT4W3wpx8+DlVqKOomaLVpQdgIXjTNECtc04Vqcff7RGFGIHqwK4wBSdh7s2BU3f
-sG32F74jGjfE/90TP3Al0LVxwIqmKQRCP0giFUgpt8pn/V3yEYNoRabnFgu7mfQ7
-+GU7EI+88Y1N8SaCs2Hm6Iug8LjgUFmZixQoMFMQMVsyu/qHqZtfRsIllDIJjXAm
-qwjqfr2nnqZJtq2xslte+g6rTzCc5G1wMdYE79gtlxfnajcvIk+zOO592OeCjnZp
-dvCbu7ZVjy1OMtjtvzpeqKlk8jKG75aRp+qjZuaJojGsKKP9n9mZLqM8JAa42uzZ
-Rg4ub72fTfWLAL9my+0iLdpaFrTUhJg9TdqsTbSzY4/wl6PePfMQVZvDaAKOtqlE
-glVzE4kCMwQQAQoAHRYhBBiTGrRyDB6jwouVs3dftEwMatCNBQJae+MfAAoJEHdf
-tEwMatCNTPgP/3VXkdkinlc+ZFx4yHz8LFWcBpW+N+yzFXex9zZlcibHQiPAlPTY
-trOIx+Fqd5EWMMuKD35XLEJIQ7ZkWnhfi6kJ+5vRUhBbrxFF6woPQQjwP8FvlA/v
-XSSTxalqZ5jAVAfq87VoVzwahI2z/KLhMn3FIWt/yGjA2kh1tgWjE0PKjPOodiRU
-+Nc+FIJTRbZUKM8gDvlfQhNSAkGozsonmDf+SdkMKmZLDklg5H3rz/7gu68J8b71
-GqOGK/tDDQNVccPBN8WJBLGcAL0kr5xzvSbn6uARAXTdTf+J34/sFOfFmsShfgP6
-nwh2uFsJlMcSpZltyyjmLHBxkMQjewTqFEkVypFNF1FYPAQk7i2bK5vkpV7vfUVn
-QoeZ4FJfJtk1fpsrrVjhebVYvrDMcqLvH9YE5H9UEva7lQFotKLNn2m2/jZdRKlW
-f6hVQX+dlRBdKiEFLlF03+wjV8mEXdOCLr+cAtm7rtmAnF07dVjcL84v+OG22bT3
-V4QeE9RxuYbDp8HoLqTN6z/fsxKYi5ochOXta4IpQAcKGN8vosbdOE+HMy1GL3Jf
-MOxNrz11onv4E6baFdAuDq9dKqBNp0IJgjzLUG8biD87fiCFcyfcvGj4WCyiZYBm
-45iCIrrGRiwInhzFyPM6OYmDxMuazvoyIR/3EUZZT3x2CyVNND4c3AwkiQIzBBAB
-CAAdFiEEvlwjIJrN2s6yDbCijIGJ8ZiMIWYFAlqNmsYACgkQjIGJ8ZiMIWaM4w/9
-Gz6591vFPoNuVpay6gzca1k83G1olIVqvtHQ+5E8QsJb609Df4MWIyX/Jl/2o+v3
-Xlg6OgTof48I2MPkGHCulnNICr2g0ml3aMd7JG1qoEw3CSeAeBbZqvtQcqIXLRfY
-VTgV+qu3zxd6iItkRVvcjfrWa6S24JRY+28InV1qr4srepflDACTrRkdS6xUkCKF
-BbtjRnlcAlcg+jIti3NO2RkDqDsdqUD+7WlRcGuL0ZXv4/8r8kqgM9bNACvz7bum
-Xd408WsX1XKk+a7zWsgvvLpmqht7sxmIPcyKTTmlfnI6ti7Vxzr87YdnyNSSU919
-jss7GNLgTuE5rC5DWe6OHntPwixafyj7xUp7nozuXmKSV4jSFSbV81VCKWDK2O13
-GwCla1o5M30o9OlH5M8diaGyIyfJFqJ5mSAKMAL3yGCJ6MmADsI2xwFGUwv4tAm1
-LDbFTa0gJcUeD8Tjajg5tO024whAxn5uL0mbaIQYNm5Bpk/32BfcblRrqLc35M+a
-FEMGYN8felnqq5BH1gn/y/LfAXw3+lNpspfiXc+ybWV6ubxKt8FAIckORs5qyaWd
-2Ktx9l3IruDi0k9kaAj//PgqoDVs97KcQd4D1gRBK6eZP5+Aq/PgUoKX4a1QIXv9
-bSh8IijFGRo0ovWWznzY1f2hpqPTJ5xrQZr/Azkh6q6JAjMEEAEKAB0WIQTDMbo/
-dftyO1hzeFsG6qBm45eDLwUCWueKVwAKCRAG6qBm45eDLx6xD/9Vzt8i+Aukrguu
-t9Q0HPJIQFt3uVhLkpkf3Xu/wErGZaCM9OTcrbD85t556r+Pl/ZT/UqSuVK4UUi9
-yfFhMtNmNKv3RDXJL4rST8OrRzdsNZYVAbAGz2pklRjeyC7dCkPNl93iYHBmPICs
-hgn6l8og09caLWryjIPerSDXYcWYLy1R5gFK3pRcjQTVCExPdKzvjWTdTd6NFPZS
-Tr4R0DwyAZAqEJ/xggoJdiAJ7gGaBoWDG266bPHl+faJREKB+Y/q/1Pw2U7P9tn4
-6naOGKOgxW+nHRw7RHLTxz0p0Gubu29ESb5hKY3vyfczJFFCeJva6/d4VC6sJEV3
-usKA6OagHVUjsZrsiZGAWuc6BaLaN3lOfD9yDBSNmKBkl+enpcyu4j2wFePH5JJe
-9f097q6kVl8WbeFNqDhfKa+Cbjchd2ZD9Iv9+4AHvipQLOsE52maAJf/aKlOXMhd
-HRVdr5xGEo9t0tAvRNNPJmeQuiybVePGSNTqhO5OXbEVdCjXDIDpKoUxAopNbP0n
-vEj+MGEXDVTdv7zksAFecD6FFgyGzc6s1mHZ3X5uf41keW0/fFaXueumTaSHlOSz
-y4Qqn0J5+vEvUMCVYZjzZDeKdfg0GsaA0CtuWi1aCNkHlpGp+58pgHTk1gw0quHB
-Hs7bZ/Uc1wtxC0El53hmdeshiqVAuokBHAQQAQgABgUCWnpmiwAKCRDPEQnqapW2
-GKTtB/wKY/s9IuG/8m0TG658nw3vgubPo9Anoe5/KWxavHTYZDDDe87eSfguJOWY
-TU1rfQXC8jR7uXPGZ9YiAlAlZSJ6J7y19xmpWsYu5pJGAZz49uas772Jkf/4anQd
-2c4WRmWOH40lUVFFKxMoMeK4ROrqrsAZ1CcYUjvOVuYeAv8OnAZBWX0gCuES7emu
-Iqs6Tdoslnp7NsVCmHWbGt3tevxm0KOEg8dnMWVYZzl4SpU46m/NSvuTA8HzAY8I
-qAJUlAdQmSn1Am0Drdu1wJ0f9eqNRC+1OskS8adT5nWeg8dnhq6EhhzFwNudDnT6
-Je0ZSaRFPIWu6HAB7SY3tRyQ26KziQEcBBABCAAGBQJad1CrAAoJENQr/7YfI8W9
-+j4H/3GYAN4rJ0N63KuUSkvkoplV7RHLczIxf1PLq7jTNwJgPq1zeA3mg7veDe+8
-fBlAu4HK5xMUAiLGRYXPfRLYjnhm31L5MpFIJGJ7z2FkO72AEkO2uzJVyjHuc3vD
-0RjIEd5nYc/xFaiwXy/b+GHdbjCn9scc1mvFmIpItwdK0M3QZraemdhefKSnFZo0
-V6TnKLrUWKBaZlo3vWJUG4tZFJd75SCMjbv2ip19vm0a+Q5PCaL5GuJF1lkJ6WBw
-fqQ2e17AONSJg+2x36yVnE9PCLqzGPy2DfTuxFwNGIEks+y1cPcS//wLFtYnvUIt
-0PCWJ6MJ1rztQNy0M8YKcXrlU/+JAjMEEAEKAB0WIQQGODJB6nBre8nMO5coCjq3
-42B4KwUCWnmPygAKCRAoCjq342B4K4L9EACji+Lrjv7CQL6xuzoxeOvS1F0vquup
-4lPmH9KPjANdPZVVf6GoeJ7l9SRfKtRXWNfUZ5VTvyLJloOjVohDYrvse7ZmSgHr
-47ixmtPfcojsTNMpKRoH1jc4Sw66ta2l7FQqaGMjNSLJNPtMBRMMzv/k+PGNOsaj
-u5RNIf/OYLKtoPeF8U+RXt0c4F3BiipVtL3Bue/RH9a2zpUSROjA4CFuHie8D+b2
-HhFbfGph2dqhyTCjeUCJGzQwVBmlQj7J1yJSti5zRAmALSZkbabi2p+EC27ew6AG
-zLzgfBwt9DrTu6AL5KSYf485OZ18S27rWyILdGsH/UfeQYzpZU/fkzDnQlfiGVWI
-xgu1LSiWVELtpOEb+nX/vUOCYcYWrOE62PKgw8pdx17wlXkN/2NvyEpacMzGtMLR
-fHBygOUT3peS/5lsRMrhzWdr8gTNKSbFArL53yV9D+DgsOdh9YO7Gsxk51DYRuUH
-q0N5wXs0V8w4aqzRbawzH0ukY5e8ZzsIVLUgmeCta37ijH1vbio2CHDnuaRI1T/R
-zCQmBhjeSIQbul/k0oYnM9N/9v/D6OcVZOF/efnqTG0q+dy3zjPDolRG+vACSA6O
-XKza8NIMcdzTSASOgCF07R1aPZ6tmOjqSnOw4IwTS/IXL8RKaek0oqcZOcM4F5vO
-WnVY4vtnYoO4vokCMwQQAQgAHRYhBHumcOmJVgmQBhCBLDZxk6Tb9H90BQJagxxS
-AAoJEDZxk6Tb9H901UIP/A1qGUT/fhCXqpgJLXKApXHVGsDN+1eMUlClFrf1Bh2/
-QQiw/4ObA/rgKr0/2p+kx7ydWFEP15wni8JoubibU3rcmf4QgPXqg1GgqeRYaqKT
-FftimZZ5heURz6ZTbbV9n6P85t+IFF08R3oraYIf/N4MtfV97nf7FK3GRBb3GjD6
-R23K3+qSK7Y/HamXgNQz5zh8K9wjj7f41BJvF2VU+weN2Hve0JCVCIq170PvV8wK
-V2zNvJ+6urjGM3o5YYovDnz54bqxwOT3f81A4yQHHamU6hCSwcz4lxqodCPv+JLv
-H3/B53mEXaaE6nvqeWg5Tx0PDP+Key86ZCdlMdhxdKmV60p90xAR8DINRGTnH6Ak
-Wyvz4N/6oMEg9OuKtTA3DaYhJuy+q7VVXjpE/C9u8baNlZqz1SjHyMBe/c1Ocfum
-XbGEXVEiEl7K9PTcOLqKDDno3WYG0lyGJQAJZORpq1eAybeiUUkknJZapCSqZ635
-09R81WCsUXNr+YgeLE7CmM/kzVj8dcos2hi6O5RBPDoIcdkZKJMXLMZu5qvX3NVJ
-SeZRt/9uL9MTq7xENxNXklBwMFfCF1aR5iXQONGHzXEXYGaokDS62pxAUsNj7IOS
-l89FUfsnwS0mM6bpbtqFolgQSzNe19dlt8oRTFgqCd33ylivrkUTwaugmOLp+VLB
-iQIzBBABCAAdFiEEATY+KFcrMtHMM+b3X8uyjJIzOwAFAlqNsFYACgkQX8uyjJIz
-OwCX8xAAoeQik/0yWnlde5OilNUEfGE/z3hbXrv4ECcmm5v14xLDbu3b5UkZEBsp
-rFVRwBiJ4BMGXqdlnB5pUwVsMRglGcUxLc3UYiKU1UNImWsst7Ia+JYuF27aboH5
-L1rm/V/+OA+bzlhFjgu/aaYXmdRBB/xlw/Lv2oeoZzVaEvnOs3p17z+J5KBKEdu7
-CdIIZuHr6xnbWfiKVYUxzFUQNOQ1qOUZot+JITriH0WoBS+kPkDhsudQabX9N0hI
-SVXLrtRqb9kTAEOxDt9DlJQ6HiWANrm0LDjIUKsTC46Ay2NATcszbJJT8zmacjbN
-nM3s7BNhf7erWHNHavPx1aLkVV1vYgH1ncgvDvkmwdebowvxYT3BqNwyLZBpeTvE
-eVqopOeYuu3ymuyQfTV316gyRX33dG2XC2wCsFZOolRm/LrKPuzHS0pG8x7EJGuO
-Ttke3Yc3DwBZblsmxPWgrJe8IgLswFzuW9O23VVyT8Q2N0fx1n7oUNhhoZj1E90F
-aZ3OXas4tvJ03SCORIPz1vNwHPr5lLEKkuriSfiEqEDxMfHmeB0ql2KzmrvrA2jD
-GnE+YOUg+NNTYDmiftiC7n1DkMqe/7UjxLMHj7DNEhh0Z0JyQzAJS8ewupsjU+Aj
-mLBDKzr9XMs8KXPomptx2ydy08MZuFIMXTpXqVcEC/ww0QbJUEaJAjMEEAEKAB0W
-IQQb2IbyRv1JCHnU4VBaCbRXbegIDgUCWnodewAKCRBaCbRXbegIDuQDD/415u59
-oP3+GjaRnsCpK7/oIzopweHP2WVD3ptbwTfYBF9XbU7SL2tbpMAwnh28y/4HVi1i
-SKMUoltHbYwlz5Fv5G60dBFA3JgyxW9mxIkPweEojb9rMwrLXUlaJ4f8NJsT94Yx
-EoX9L/sE2ubRce+DEasuSXcrQTDtzZZN99/Z5aOK8PXObtvYe2J/jBF1cjUzZDTe
-t7Y6Jq+IgI/khpzK8POG4bXY02akrurShA/CK/JX/6znV3u7hPjoqxNM9X/wXtIK
-JjK16YOslcrV/y5nr4a4N/HQntXPOFrDoD+EhfUD1F1Puv0J4vO6E32GDcQWI5en
-qoY7YR63LRq06HUeHqRv7u63nCiycPVqVbF470zKfjpDfO6a2EMXIC5hV2yIkESk
-+69RC6/2AdNmv/upFI80svqXe+EkfCSHVxHBhjadetucksPN60KttfomVrm0D7Fl
-SoQbHKjaj9rw4wt2mypDWZIq/dGA8DG2ga9upccnD5j1GYpDhht4A57WVB/Ob6Ng
-+kDswiIkj3iSUPPzyVxKtdvrnLWLb9cCRV7RZGiPugEdWJIm2oPnASAZ5/alzhSq
-hvQLMzQQzMs1Baf2jBZ98AH+UXAJkezBDhaZb3TEcF3QERd0QJ3P8dsOZu69hnZl
-ger1ByhzXNyvcylWWdcop4IBGSPquJxtmjVYVIkBMwQQAQgAHRYhBJbPBJOYZd+8
-7AaIBGXemeMEiBwRBQJafWvCAAoJEGXemeMEiBwRoasH/Ah9A84gyuxoc2otbU4W
-la7HnoBSUU5Iz+5mTmGyUwvADFqPfcIReT6SOJOaA79GYmXRzPptqbg7Czga2lb8
-mO445Me7qjSWut45e1Eewu3aCxVNofA7ohAaHk9bZFMgYOAI9Y5cDhYh9Wp/5f76
-pFWBM6KY5yj02szMPyRrOkm1qV1GZmPAYNhsTyvdei8hHKAcJw7umyAG0mWdDPmn
-0hBxIHRm6Akt5ZVhkYsf33QcQmIx/ePH9I4iiYN9v8vC7dlks6g6T3aZ6GSsu8bN
-jv2t9Pitce3qlgQlvh81s7jGOKPyngPdNPMqSRdX0sipB/cqvG3laoV/yOR3dRAr
-tnqJAjMEEAEIAB0WIQSEsU7T1odlWo74IzppVxS9G7xfTAUCWndVbwAKCRBpVxS9
-G7xfTFLjD/0YyDnKkgb+exEzYxK9iFtnSog1H+eecs7bGHOTQWEH36P0yqek49mY
-BCyror3XXYX1E+EGsnyVzMpCMLW511Z/2cdYQXAZ3C49VD92XYcHriwNUCJf98/w
-85Nz/7Bkc2uqYf7S/8E/izVXChYHmNmPvDWYRIHEm5CG0fq1D5t5M9cFZuiGJrmR
-/bqzMRsKobLE+JEM4IYgUV9M8NFPZjTmtsqju2E+ui8/g+GZVEtJq1QAPeoPRaXH
-QOty7am4OkI3B6PjZ4tR/rM6hAd4MgeI6zkOyHHw9qMHiVSx3Rk8s1GX9vqm2fOS
-qYsil1ObuNcK/2rN6ym6+0QUd4LlYA2/V4QRZCb+M1/xeBTq69Qc3ygqQuvOfsZp
-bEQ1A2XOFdJZU5TtPjpfwjhxsk9HvCj30qJI9mrN4kcoxnfnlv19+abxvyIOK3ub
-CTghx+XIdpMcej+Q6YbA41HvDDfw1TcUQiXjLk4utUct6R/jUBsXGOcyDWaPvS1H
-RFReT27bcTMxR2N0ubUqcp7BOlr3TzTrcJgV4Mp0EUwPlfDwYrqgLHy6nKAT6P4e
-mB7Pr2M5dxrHgbAHKUn+/xr4kdCLqEMxQRbo5nfPwdfkLNgWnREGl3se/sPLDwUo
-Mo5kRcGOvu58rBklhbgG5ALE6ZxakPEQyiHqKdipfOVFTH3IlrM5cokCMwQSAQoA
-HRYhBILRGahAxu/Kb1r5RZ7cyZHZq0V+BQJaeE7GAAoJEJ7cyZHZq0V+tzAP/iCD
-LiqqTMQd7SHy3WQ9m0orySRWjMyC8PwKjfCRQoawwRneXBCm5dripIxRpcFHwl2h
-0N8hZuyaMPlTqVi/EUQcWKNdktYnXtvYozdLg/XJ26eGax/5l/yEPOM1KqDWtgHw
-h3zfrIEeJUhxhzI0qrLhBJyfZfyJJmzAGc6AbhTmIZuTjq0vVbUF07lD8s2Fw98i
-w+EeeG9wYDmUOjB3vurycA7s+IZzPRHJ39Yt9hoGKcRYpQMztrJJEMJqWdeb/CG6
-s/WdK9xxB/6cX6V3QMPSYOYhYSCNIdeLbrZveLIFyXKCCp+Ry/8gjB4560xNnrjY
-geZjiXTiko0jkk46YeY91jgXrbRj8MohJIyetA/jPsmwhUwDAjXKG9n61xOXOnrq
-5G2HllZRQxpRMK6uYysUzIROBlJZb0X5A8nqSvAaSZqiBxOx9OWGVxTFIki2pTMo
-w+UNjf7xw7z3TmfFfeh/xfqioU9CouwHqVWsHzJTs/rgxZx4Df+yTXnJkUyXVNkp
-sQe7ey+suuvVJT0rVKTBjXpUVXoPNUOKzpizM3wCUcDl5R+Yra9Sh1gAXYpPhQ3D
-9h/9tq0C1LI45vXsgJB8w8RORtv/6XJB1TA90WzUceM4+W9TYOSrjmXAdC2v9KdV
-3AZAxVVyZqjsqdW17S4StBZpYwWBIbPGi2nmPr/hiQIzBBIBCgAdFiEEDNEXUELD
-i7EQ74r+4nSp/LCh0YIFAlp4TuQACgkQ4nSp/LCh0YLxjBAAhtYKcJY7SUr2644x
-KQ3qSiIQCWRHnkUecNPaLt8ypTcaD/2NjYs5pKxYQktu/45Z5++AnJG9qxuHQnZi
-FRvynvXM53isk9kJZXgWxNm5Dgbufb9jE8AOblPEB9SlKqqx1WUY2k40gBzBXMGb
-n7luN1P/QIdChu5hbHqYGZinp7iA280r7w2E2fCxnq1H4Gm+hGWN9rmHsV8FiQL5
-23F0JLyccDkvE52OU8TOSfdgX2qIdqSLDXhf34maJFvLiWFq4X6D+iTZUGKJi/FI
-bbQFEsWy4ed6DgLqxra+5wVb06A2zW+UdADjrCvWyGFbd+jNrGNrp94A2yvH/M75
-FX/mqdgTNfy3P89Gddr56pooz7rqM0o8mFOh5w6P/W8QoqWAfAIye3q1zq7SScu9
-JWH9gdBGc5ntfy/8K7BcjtyMCXO6MoYMg/4/nRvRYWCnqeVc76NOJrv3v+qLZC2u
-XY1qGQ3x8qsT2sJ8+JYjZj4wOd+5eKsVHVR4oIimPxfckmOFxpUpT1HilMso88zz
-H41bIGtth+I27qohcGvizonTNj1QsUUD90oT5aMHXG1bhUzssNCmlkBXDuui6bWA
-lA+yE5zqqHbluKiWowY/RAni9HH1FZHD5NmbU02ZVl5DFmKSNFFgZ/yy2AeiUF6o
-oiVvLGItktrq6JSLfH6zcrw7xUWJAjMEEAEIAB0WIQTuwNuFjmbA2nBiCsB9vWrH
-TeKTJAUCWndVJAAKCRB9vWrHTeKTJLOMD/9ezgb+l5Q41uJbE9ni7+mLSz2hDoUo
-uaVkyiXcHy5QqIDx8Poa3UG01Ghr7TB0RioukPU98USkvEMNh46xU/gs2/M3H6Ua
-+nMz5i/3kKsCuLnaRmmooNs4ByPMwb3PSsYVwcNRaHC9C2J042P1SgCvNC7tCybd
-PtHcPMngYlHvWN0ZA1GbJMeEldyfbhaDUHfQR0tikBhnyd3CEpWf/zPvvO1egaZf
-nqgiBFe7C+5rH3P+SwhlAIGkrKPouc3b1OjaXyKy9SxrBbfH/DFB5atvnF2jLDQk
-gEUhPr3p8YVTB+0/UCnth2rBRTbFiYOOFRE4JtW7lIt5Jl4yakYQHhgWR9U+CwzM
-wlGSycJ9mV4Bwq6wCL2E1C9ROIDKHraM93ZUf+m1GvYHrnxcYfAiY5PTdrRdJA9t
-MEs4sdofbKgMCLdaqTu6meeKASIu3pL46zWshPkJtAomb/fe3XRS2LlNYKgTDhpy
-dDEyjXgyHCvjylKw1hHtdmgaFyL+peWrY6zozLCRzhx26dTQdGVB2B1vyYrg0hx8
-IwSR6DPJu+XOWTjl2fjyE0iFirtWQ8cBbLA3KeSiRVcKxVJDGLD8lulRY062Xkw4
-K+tZuyZPNUGtx0AU0FLnSwF7bdHWpqpFz3LfOVGnIDHZqiF9TQLEapjJnKm8h9Zw
-vcvYP4KqakAwL4kCMwQSAQoAHRYhBOUjX1uUFaK7dgu/GFeR0PrOCvA8BQJaeGmp
-AAoJEFeR0PrOCvA8SyoQAIko2lbOrCGbLzVmbCvP6vlqVeb8qSUNJmwPqrefQ/mk
-b7TDczXt6LSYZJ+h7zLL37G0EQ1dJ1+PEzu+1JGBzGmx+PL78SUegrqHZahYuC+A
-FFnKRR4bId4F0THWRrmNFLj4uWBH14ttUoCEOhbF5mmJJPYZlD6Wt06rpM4E3ouO
-uo5JGQdtw5tWjoeD1r69IyS1dLqfhMc4OR0SNUGWqYVJFqxhKVUf/4P3EPDLhYX7
-pAiRI9E9/PJQzP8bZmJ5AsHR1T0SLCKsIZRRRlqFuSncMfTvFMtyp16OXZ4ofopi
-XVmhCKa5ZNN2LGCRPYXm4qHzMHazVwicQSdJIXWUrbVkZKtQ+1HhYo5lr+gOGgOX
-vOokADcYXYiPJOnqf31iBpx1CYadUsPdS5Xv67LzseZCSlVcIR0ip7/pmvXl8oXR
-BiQchTAnVuzBmyXSnh4dbwN1yCju9+d/XYqu79BtMW/o1+cduVTgFv153fcA2NZ4
-zXwHxhZCy1WdePCVpKC6ITMNZFiq+cBXxoHvAuUhBv2CGS6bw8FvKmPNDQeLMiOS
-00EvbzS9Be25JHOPByDXQ1ahVY52P4dqY77WbGSuWTyjcaQ5ObxU8MlG82Rk7Pyk
-S2sj2Ys0GilG0fPwHdVXbE/PDNEaGIKjhlzN64FDzy96ig+qrUklAE+kHYWiu12J
-iQIzBBABCAAdFiEEjNcifaRn0+1AT27v21kPc55axFgFAlp/BmgACgkQ21kPc55a
-xFhn6Q//UZuCqhTidsS/9nueU4FUCUdnDPKE6uegOUqnaqUnJM+K2idW1wzclsDR
-ZcLFuUNGKhIBfWvsX34uPoft0R7Yl3YTlQArslMlR4T06XJGChQ48u3ywV6WcIu6
-wrRdRvKbP1v3GmFJyBczl30OSfDLaGmx4TcyFnfmeKh/qw5oU/8S54wDUeE1Vtmv
-eeAbw0S06xSXpkHqByVBtC3ZqVgSndlRkwsKwWOB3khbdeJayIWIvxODJBTqdWuX
-SQFjkH7valsFxG8fq+6M6mHmBAEBEvTz813FN1X5eA0tgt5EbhsJU5Pdvgb+I348
-gy+FK3ZntJxEqc0rYrisNJp1f4B/8F2++Yob/Tauh2AvxN3cO2NcMN9Fg980GIt/
-HvK849NnuIoKEJUq9ATjw1KKL5UWu0qWDFFqR08ExUM1TxPyb5xpdUafvE7LVJ6C
-rVGhj9dTbu+gnTKhYybsv+oxaBButwozMau2FVEuOsCXJJUjZ7Nym0FbbG/kqbIu
-SrLhj9SPFbmzUuX3jrPhCojsAHBkHV4N7CrAnJpjP35kEplz9ZIp5yrzKLgSywMI
-oeDimxD4YOD+E95RZb9x4Ws/oXPaKnMWybQ1jha3BBAASMP13jq7fyTStEwOriUv
-6wcJNqkRYF91/WS4k+bxkVvs4LVUuWyS5tHsB9olSzPMLNVlm3GIRgQQEQoABgUC
-WneguwAKCRBp5GJ2T8WeRKH8AJ0WXRZA0soTbjv7SX5vZxhhWOEllgCgozXoJzSJ
-w7WBBDmbg2ivPlCNGC6JAjMEEAEIAB0WIQR59zCGfRby262nzYZv3OSHKYX4RQUC
-WnywvwAKCRBv3OSHKYX4RSPPEACJ4Fl9iEcX3/Yx7wJdvbuNkqmfEV1LeQXbEF51
-iHEf8AESD26Fgfv6hUR+zHraya2AH04Kxafhr76r/enExvNpMZEEA4RmwW/VUAQR
-3Ywtk65LfdZL3UzJaV2UDP8LfY8fexxG7x2XEdyooWA2OCbVnLdubrHIFEcQPUzC
-8MLP5zerDPMmSyJZl87xZZ80zfsFZ0QFgaBJxUpNWS3fVi3wd0Jf9983B93oL97m
-0WVKQliBT3XXWN50cu7sCPR/pUI8489yoSdzOUACFKM17IbFV9eQrJVpYVlzqq9V
-djUBMkRalOTbXUw5GPiH6/Nqcyt+1Q/FKwq61/ZaCfeTefvDEItJ0wGzpBa6UTj1
-JCT+0wbQoWEE9kYJduu1GSUphS4PAuGobSq5KRDyT5dxzVhha5JDQwwA1PhTaSuN
-m9qANDmi/xqcOAon1/gwf56WqAceYbIArQFEdlLofC4KH0yoi2jTCmJ0WCnt8+C8
-pCtObEGURZrPEoKdS4cDERcJTfIx1Q7BIdTbb9lu4KD6cMm0ohnhiSebB2yROKla
-UVz7jKU9PKdDa5vNVt6+5nfNyrhbOr4claEad6q/r+E9y6bCz9GTZv/mNfhYoCvy
-EPP/gup3GL/h2fz8nwcxV4B8xH3RJc7PpZZpoHBinUW1kHIeqd21OtOY0XgWBqLh
-XHSGiYkCMwQQAQoAHRYhBCHyIggzbTwmQx0CitvXH0VSVS1EBQJakMOrAAoJENvX
-H0VSVS1EWSsP/0Wl8SU+7v+LfR+jW2JlcC3AYcTU645xCgz3608QyFddHzq1c3cX
-GLNKQvYjI7/UQjAaodC4jVNvfTOwVBdjLF95OzPrOqUy6n7pYaS/iQAxi4ifs0CD
-mu8rZ923Wdme+fBSMLDrNYNRRwW6/NRtSFVJzprFwd0JTGllZ5wWQwvKAaqrbwOW
-wtaDa2T6kaSC7bPDC7tJqq+6p+Sx7xDbruS2Xqtur6OPcAnZ2y/OUIck/9pt+1dl
-EQqKLOIDIG2mA8tmdeqw8s+FDOYxc3mG71F/kxOlZ73OeltnCJ1OyPjnao5/i5fM
-kCDMXwfWeStos11S2QduB+ETyqofzpOcEDhNHQRFGQTou/aDecWy1M87xPamOLNg
-LSxIc4CkdsOTELqGj7EzYA/ny6VD1G2pdNM23xec1a12EffmKYv68ajowh6i19A4
-P56Tj97e6XT7YU5WLhaXWRaJoqGUPLufcMsxStQP7JmW851jLwOPfmuzl4kU2dJR
-oozkAoytVsiWDxihsJVKgC6AMD+k5D9lrb43esgdOawBmca6fO+DSkEoaG4weLHZ
-V/aGo83GHG9afGhpAiA7wJq3bOWHUE0ek1bemWZZhw0zrrFNH3gueHryQlTs6lH8
-x3cCAdqPRLVCh6YTR16r3b7N56zlp2gZTV6sIsWEQHBOmB9hWAB20GH5iQQzBBAB
-CAAdFiEEN3eQQUH8qSq/vGsT2E735yq+rWEFAlp/ZdkACgkQ2E735yq+rWFIqh/9
-EkDZ+wISc7KyOZmGGbp8ixDdnyash/A1Nz3qW8Aff/Ms1ylNhsMgdA90EUa5Fs11
-cKZjv6q/aKS1dmmXhBCBnl+959HZ4jKJArTBWDxjGb1rTIYZ8a8Cohmz+06VuI0j
-hJ5QhuoolLzxGO2JGuuK//iNwJaizThCmeeaUcY/Igs/Nb3Uxo1GlFT5rK8pbV+5
-9SDL1GPzwuvJDEpQgGCzk7e4KGO0D6OsnmcmKb2k6I91sidmySPLGhp8ixhtSR7d
-CV/dmc5wLH9u3HLGrTQghIjUBUsZjDQ5eYCdGVpxWGjzycdYgavg4onofm8NGwjx
-Etm6mw9T55GlUXDnCHdZFhY9iOWNU0o0l88SVwO0Y1MXhTdpSmCky6MbHD37L1y8
-8FW8CDx6dvPcVWENuWtaVS0q9kbgIYmf2qXl1w9b7h8nOYVStiepfOcrLAg8YKCS
-1Go5aISp3KDfmbCYlZG8hEK6aNS7pkJizh2IrRm85QDcLS8/wciCH/DsGS+oARjx
-UJSuaKTiDW+61pmXVH8RfL1jpidg5DjV2q6MKrcK8ag1nC0K9Xy9hLnZQqhrw9aK
-SeY0UamZHUj+2Dap5FmNBaFTpLPehtGXq9FLh3iDs1TRSzrCDVzKyOaGNSFgHhH0
-keGKGLpbEEzcqJQQjCtbQcj7Mp6pndKDtGil8oBve163euapdAnxLu5zbnfwIqks
-4pBvXH+JR9Pm9o2TSh6jbDcwJFxfFTbjPHW50y1vZbKAYZ4wUUJKCfoQ5Aqz1XDA
-uwyrPbEkGQAfU8smCVVAfA75hZQ9l/M8lVuIMWuAJTcOsVNxZyQXCHk4uP2KXI97
-ygu5Jk7WDbTV53+5hrFdup8DpT/f1DnBHktnBDElAR8smXuesfjXzrLv7j+4ZvfS
-CttY4W9kWyTTbedMoONpWzPquYJ8svCzV61lmf+XtH+2cv0MY8514Ttm+0MvPJu/
-CMejb6eJKC7O3Udluheg6aE95tDN7hYwUh817+KIXZj6GBfCwLyWyqV9Z8a7/tR2
-kpOoMuqIVJt2Ye48jx6/liGmc4YLBL1W6xJ6Wlz5xweQN3JlqSpbNgUKIZ9gqDJQ
-w7I8KoS/bU67RggQj5tRknQNryuCZeq4GXVZyoLNLbhVFBzfCTJ/1mX9vGm0IWxL
-uAZO0X8UHyvB1485xMEUs00VtKdC2hQDfo6DKt5pcFGD9AWQNB9vXogbHeTwk2pT
-vuqBdN7hwSGFgcQuoxoZTUMqg1H9j+4CBsP8taQm87jV1Yr/Woklaus3ZcRWOYe9
-mjyj2NeQ+AZ/oUyspRzv656bi4StCIMaoejnoRc+jhLX5HqNZrTdVAVI13gGCWSW
-1d+rhDB/de+EQGIvkD2kr4kBMwQQAQgAHRYhBD7z/RwAmaqBVjR3pTh3rQXRWCzb
-BQJaejWmAAoJEDh3rQXRWCzbAgwH+gOz8/1PGXTLVNZGT4xNOfCM3G9RmK3rVPiN
-0nd9MhwXunNcR2gd2HaZl/iSWfeRNYJ6xaPG7Tuk6NLkVyroPo19KEmviyH/QyeR
-JNvQqDv5xhyCc67brU9WKPZLfG/xXWJO5zOR70HiLW45+ujgIpy2fCReuBxweofd
-ELoU0t5xjQvx/4YTMV2QdIEyQSlguvYKfqix8lrYD60rNHesTPJoX1JEtt33bw4l
-xv8SHdcyXBjQMhdmU6EiF1Y2ig7ICSBN+YGLgFHVZ2japZ2L7pm9WNMlifBjA21U
-oIFgjV6kbteYOwJYgE5l5HcXJQ8/FYf3fvJGaGY+wt3wSRKuvguJATMEEAEIAB0W
-IQR+4TAL0siUupHaSuZOz/7MnnaRRwUCWnx8CQAKCRBOz/7MnnaRRzA/B/9QXamA
-7UIC9tboPSMf2OPCvIgy8d7pK2rB+bKEej6cGxg/azu74jJHgV3H/I2Tghz2Aa8O
-M5sP091sCqgBuih7i8iimR5oX9BLPSrSp+Iqyziq1iQHlLYWmLsqsqZiBEykC6+g
-fE7cVvpOgIyb1fe19cY2btitfH+/Jl/Qyzn0DIoRG3X7gQx1S3AuHtjAzCSdqict
-7hDN6cLQrndkaXckkIu/JM5rSZibrHnw317GQ0N+MDOk6BXs7WoQ8wmFx6Fb/wg9
-tgJsTeKeI+QgefADRq8sZUpDM1qf8PSj412IDOyL2yYzHlN6OSbkYHXDc04v0dGg
-QAZpkxyOGDh3jpVHiQIzBBABCAAdFiEEcnoNTdue2fYDm+zvhH9eN5DOCXcFAlp5
-vBUACgkQhH9eN5DOCXcDARAAtOuU6KHkGXm7xAihWDvKenZj8sanVsjGrisz4rIR
-seFnloKBRvT1f/Bs8ihEGMTEHSSh/TJ0NhN/iVj/W4k1+xP0d16sdyLVTFADCYmE
-nbPbQJukb2OJIEuAMatg5bUp5msMDesmsANRbxkOlmmpS79ARV2GR8Y5QO676Bwy
-sX5IZ5iVR33/DfiDVg/090ixZOxWGaKB2Ar6Cs4B5YB2EvVkHmGgC15g+EUr5cOe
-82UkL9PXc3J+SqcDINd1BmKvnWfh2DoWhAcJUb7bK0y42VNPWkh713fDOo0X7HbS
-FmyAWVKDWy94udEzypLKucEBm0B3RmzmOrlBIu9jonXp+8fV5fBio5XpsvHa/gdR
-ZHSxuRH7yPggmEAV+WD5wlaKgUdPxNKayzVE/hPmSGJfNOnTuSjMTv0PbZImbxJP
-mmbm8FIVQ3mGM+V7KcVtgpka87znSBMKR2HvnunseswdDC1U+/kmPUePIZmA7h6u
-4u4HkftZs1IpO+wSzROPt4e6NXd7s/BB6sCaoGwvIIp2cigSdzFLucyipw4IURG2
-qfm4cvMVxT3ScGALdtQG5tYj8Pwv6g4J8SpdNI+4cU1vm/IqFevlaq+410wQSeNk
-3wQYEsugaeu46zJDVgyqGC6+qARmCHCRlmMc78ix4nNh+ZOiYL9qBgXKASYEqQPx
-NzSJAjMEEAEKAB0WIQR39Cp6NEHuUS/QheeQXPLEKkBmTQUCWnoBvAAKCRCQXPLE
-KkBmTXCYD/9WKjkn6tHOUWRcgtNyKYriODU4c+2Yt6pDW4lklREa9MSrBX6Y+i/3
-v6tjVj5m/yHG0INStfJfYGtUMD2o23SOg+QBNPD6oZ7FVDvlN+3s81M+D1ASlxe/
-c4DUeNRAp34S0uNN41ZKRP1E8wMZieUPxUOOVsIqRjs3ED41viDLnW1Vngv19ubr
-BECrRwUqm+7NKM0N0lE8OaEgc+WJ/VOPR90A4WA6jc5Zwy2RVpRnjLlLvVYBmiSj
-op7l7eorBRbp+CacakskxG8BF7HPhPSIbwmEsam4tvCPr6zTMSuXPL2pFslnsTyf
-wJgpXQOwnPh4Lu/mlRShJ2dHth7Ea3RkYEAUiO1w6N1oerjlDwq6iZVK3BN562z+
-eAEUl4ujX0kAGWqo78W9qaRHUDZrHgUzUrSlyvGrG4YGCo9OsxKJ5nY86Y+NHosR
-MdLRiexorgKOdJBiRZe2LT/4f5X2s2xF3AFj1TJOmQe8zla2YW4Dty4jS7F2I/+8
-DrF1LRJ570SNFXCFD5ZBMUU78abtaUAEeHikZB7NfU4duY2hSRljlJ4E1wfFuui9
-+uZezop0u2or2jzBeVRj89ZtyEfeAH76oPLkatbmsgq8dhaRlhop+Wju7its0+LM
-WKFdH16Xoi/etk8Dh7YAk+Ro1yV/DWgnHiUfcXQukmuMXfAhm/MccokCMwQQAQoA
-HRYhBEy3/h4oDsyQ8ppZfm5gi2N9iWfpBQJakJKEAAoJEG5gi2N9iWfpd9oQAKAW
-ZtA5xDUF0ZPfSGh23ByRtVIBl2pNfTPQH+3jNBwbC45bJwnMaYq2vyjtCmjcfcIW
-j/hgWGLreKsesTATT2OBsbj/1hDToy/yicXrFd+YgvkxtMFBP+mEgs9Tw3e/Dl5R
-Ez7ITaCdptWzv5UEzdpQSQ0ViNe5lIBZ7wdgcndSa63VrO/hJSB2B2nm0dbbRI2L
-LwHBZrC7XxkgAnz2/kIAdh/OaTzBww54jfvOUHI32grZ9pJHfVs2uZMAzRdUuSNc
-7ffm9Igna9hmhPo3m8wZm6USrHqa5bd8Rn65azmJbDz3lTGhhYuNUtZ6fWU+GysS
-AB0JFyNbn5+2CyT9Wb8tjIlggnPw4YOjSVy6ArJmr0AEPyyq4+qojhtlXAx2jk15
-NMni3qhfAHTFODItM2q658ytk2IZgtd6iSOQutMSeNhxX0aw4x+fzHZej5x9CPww
-3YxThSUQ2huyziN5Im3UQvvRMEHc3cvtPa/8mtJUqybfcDlUQL724mTIrfUdZlZ9
-5f2bmYjz15x52jbqUmu/gZbs6OPxldeALjU38VFvZW2Ka8q4R603wAOgnD58Zo7m
-Jd6K0U3pdFwgtosaIbR3oEoP4PCp4uPLCrM+gwlkST3XB+ypc9jUmtfBOgjKeeyY
-A231CDr6oUuPiS12I2V5JHleGs8B+2eBjP3EaRvXiQIzBBABCgAdFiEEqO2+mVDs
-H5Z/M2DL+z0lgztqr/gFAlqQkokACgkQ+z0lgztqr/g8GA/+LlbkOdo/bCVT5Kh1
-arWDX4H9Xj5hbUrDVGX3V2Ewlhq1/SnP41BNAK3k3Co/LoPYpBacBUKGR6MR8Gln
-P7pVKI6rtFfor/cIw0CsxRkOoaowTVpW9juAmbUvRTpI0DwAksDbY6QsNhvqSxIg
-rzd/Z5QbKqfAsOwJYuWWnM/dqlhspNjIGEFSLtJLD6TIpg7i3O8YrAXRBEkcvK3/
-wo+WdCRxq0gBOi9m/FLdnDYvCe41yLKtvrVz3OJUV3kohIwPm1K4dJ8Y78Li8MmF
-pbVCrYkcGO1p9au5xhSUZl9+4S1pmXvgRcR1RgrdRE4ttFfL7D/SW74IIvveQaoE
-0J0+cBNfwFKOhAldOBBMWhtMowVL8dOKIrA+S0Fri+xIdP1vpicSMCxdVYHp2fVE
-cPatFvPuml9pIwyWxoVLw3oVm7prkZsFE7qZzKBFBpwzmfJxMqDSoL3bGEQh37h6
-bvQfxbE1fx4EKRRe/fzj+tCQNIQ9rw4cQunyYT/QPcXLHsJ4OONSSn0fFbLoKS8n
-9VDeipjrGX7tZwTYa5RqQOTNL3WevD0zHcJRTuJv+5i6tZvxRZPuOwZuXJ08zjeD
-d3rWry8fMXvoUQ9QwWYZWkcGAzUPeMYTcJDzNsW5zwhIHLdUH/9mVv5YY8iFvpRv
-SaN3bXQwrK/Jp8p72+YWrg8ZFQCJAjkEEgEKACMWIQSbaG8UFE0rCJsQ8q2Yqrbj
-GgH6GwUCWnteYAWDCWYBgAAKCRCYqrbjGgH6G5nmD/4gEEMWwRzYuuBkWSmLEiVa
-8rDXI32nKGv3POq8pADB6u3BSwrlX5/T8wei5ohwUScr6FxCI5ajgije2vqqgTlT
-NU/Z/57H4ZOIgBh4SCGHjRhFyuqXXRLE2o2VF2lWzEaBIvNzBpYdl82joKHSxTGl
-mO4gjlBEe8C+lMtZbXgbcxyj2UF9fdXW2xzWExL7O8Mqwv4k3yr8CDmQ0RgU4skr
-WhlR5tB5J1cM9Dnf0+LEl6tas6/420B0tAQ/5MkTEwEiVBGTdmLud756NxDXAvnZ
-km4ErGqLRmod+TEIyXjoWGycbRGAlU3bOeDb1+eZngjj7CNTI1ZMh9fU+7hL1WYX
-mH20HdcOE1TgRnSbonh5CNoaJkGQa9QSZTxD15yuYN4Mz4VYCtg25z9sVqjIa2bk
-EkWNKcitss+R3waT/4CmUK23oKUo2CTiAArNI6LZ2E6UokSsSsJmbawy+xKGKgNI
-NEct2INKIFq33pWdL5z1ZWLFwzxGNkTPHgjltyOS4GMl0IflEWczUrJKhIIcofLw
-mdKeOJFbx5IfaHGtsRC2YQxCf3EFieI/TSgCOsXcwVeh3arfQxmTeI4hJ0cCUlG2
-a0h0znq7fS7IKSrxcEgfXHd9NeYZW7iGXUVlIp5/cXkNCBEsRkvpRBXXxygzIa12
-bOJonilxKeMi2DznE6hPBokCMwQQAQgAHRYhBLiPFpeal4gSgZNFWRE+JKTjma8a
-BQJafI7TAAoJEBE+JKTjma8a1uIQAK2E+bouXehCcVC4h4iSsqmj3HNYcS2g16p5
-AK2qarUmXICdPSVJbC5tXhKLKXjjB9RP5QELQUPTwzi942QO5z0tqy0/qMQjSeQW
-KuGeglS8lwoKmPa/593eZMkSOIMUt8a+dUsHS7vswtptk9fKVnGndTReG3otWsWg
-HwJTJSOKl3cYZ/ursKSx4KvM/HFjclTGHdQ/RyYGo13/bzUDnnQ7Yv/8F5sakL08
-BQs4/X79JD3HGoze4WbS9H2jNIX+hPYPfBA+jUzbZJuW3UgLlKCM8vrGHT3yTvqi
-3qirCPgxx92ZQF3ej34WZxZ47/d1iyqTLVV65j5FEGt6U/SyoLCFlAq6HEl55S5y
-e3E5M/6QLGSn6xQOSYq5tlG7w27yOpmxZQb5LlHh8XuaoFaw7s69ft3F2FIbFbxJ
-PVOanXmSSMj8Vkn4BLPlvq0fjMVqHZxXpWGOZhY30WktUQJ3+U8l+esE/WaG+Q0m
-eHtuQhXLS+K+ko+7OuTh4w2JeWwsXZMf41qEwcJVHQggRmsjzwmeF2IZopbAyb8n
-ZFOpqdIMyFP66vhjdhAGPuPrTSC1jgWnb8PxqanmKoQPoDnrXexdkeEzrWpNt0qH
-3vD3ray9c0SZgOLReEjYP2EpuuCIfxxR3p3NYR+hmhsinv3UYmZ3Ha7GvwjjiSKc
-gdT0TP7TiQIzBBIBCAAdFiEExwCcU9Z7t/yP1tk+5eGx1JrMKIwFAlp3gkUACgkQ
-5eGx1JrMKIxtkw/7B233gfm2ITrSg8bRMhtCgwxui9iCgWox0wjo6EnojznogYDg
-1KB/WUPjTYP7LHEMjYyeCtZcb7z1MgjUXRFmxZb/MqdxfzmlfWCXcGpK1hwfDN2L
-BnMuzx2UmXiXjIC+pMWYGaNygW9uU5Iqa4grYrW78iHfLUDTgGOxUUXo6ch9f1Ky
-ofGlZUAgFXp9BIM/QnrcEpExfxEeAHcqqxWs1S7kF1ZAo2lwB8XcJzOis25ncwHN
-d4YPzMKagTXAqhyvgo7Lr+gpEqCUrAJTw4IQjTO0cDSLAGeEuYHsjMsai8fpvB+f
-drnNZm+ehMN+DdbqYVNY/amP72sK7KohJhWHfRBqwZS1P/J2ezDFLjDeSB3ER0Lo
-4gtsdVAIq4ZkXvP19TRk/b/bpY9OlzEdini2XCO+LpSuyTTtwMUWJP8PjW2TI+R+
-aOxg9d2Takgv96OLn+wXh/NG5YNAl6TQkdJtTZlzAYyQvzRvL8eUA+3dr1Mw1/hU
-0AyCeV0O7O/O0PJnyUdonyBneJGKQD/6AHZxWLxDwcEoBS+we7D0civV8ksYaMsp
-vCtBk5gEA/35N+tuU0/WgNDGrxFaGZZK7BQKb9bPrUojsLmvwGEfOvwtN97dzRof
-SZjLxehSGH+CkLXZaI1CyZ1aDnq/pYwW6Uo4xMrdq0zR1jHX2paa6wSq+biJATME
-EAEIAB0WIQRBEARe56Qy1nr6yMhUA8VGSBC8JgUCWnhcpwAKCRBUA8VGSBC8JgLi
-B/9GX3eHeU4ofM1qx8H1UVlg/QPVi0tZJW105UZHkk0MtLfvKnapRgteYcYBLojw
-VfmErWGQGb7T1IbOwmWL5IJVkiO93oMETI4iFIoRdlG8ro8l4MC0mzgc9CBk3SSK
-1hwb+u3Vm0CdiPtpZOfYcfEjn72YMACus/UWPshySLASPmLug5MevfqXalzsQ8/u
-y+OeKnYRb9wfWPOG5YeiWC1wk2rVG3hhR9Iz5z90UMOUTyjb3zSnQetzrVsvMzUQ
-98wnPXkJAScrkt9m7unBZ70kr1FHBrK5oc9QjR8Q2FuCRa8xh8vunj0f9it7FPY8
-8nMtQ41k2FXsKyhRrI2lT+wriQIzBBABCAAdFiEELqlzHd9gDvUqU61IKlYjiCD1
-8i4FAlp/GQoACgkQKlYjiCD18i6TKw//Vgirs/RQeq93COmi0IE6QybERB1GgRdM
-xd0CDZdUmTu7a/ZNvUkAhwGfLQS9n9xS6Nh+LBz8tb00Dj+3l7MLeTY9PVLKLPMn
-i5sqS0YAbsDtWoOkfJTpLESbrVzcF9sw8DLCwSWxCYyjh0mQb0hLgqqLQY5HkDl9
-VWAsH4FrT2jj3GWnOJTdP0BgfCLSsl1HbPfufBoi2NmCp1qCFRBjeiumQQFhh/pg
-vrk9qLXioaIeljGAoCZwfobs0bGZPwayoxquOS9e3ulDqR81KgQ4mGJggJX5vGWW
-EHy7YZ/QfzWLwxszfeaJ5OPrtDvsC+3l/iHua249x5ILrrx88Xt/9hmLUlZ5bWlk
-n9WO858LraYgFxb6vRST4lAWylvDJTp2VYMGdMsddvz7lOdjuc9on/J41WNJ9LUC
-PUBARvWR5NIoXD1P9T/vZV1KLeOhQ8VvWJVtkKxQdMhQ4nnm6uUvrwZLlXr03n/Y
-U9CMF+JPs4RcwZaoGvY7DwhpJcCdpH9WTOhGtyC0keP3MBEEnczWjeToNO7Gfi9n
-3zGJLAMiRgBnTYzN9oPrrnTG8m1nWQP8M6Ja1klPY/6QzefARCBygdFAd9qXEQaa
-XLIzDsTtzxuTCkZPywKvoR46NKq75ANSAgm4RqIkG39qZZmHCn+L2N7UA/BEG1Pp
-Kdg9lA0taw2JAhwEEgEIAAYFAlp7S18ACgkQTXEKQHwQq8kU7g//acHNePx/MPNM
-r1Olf3TpkT92iPr+UxbgOmAREazoIGONvL+q4ffgIuSJz23Xp+pcGF1jnW3MFpnu
-vHBwwwo7ow+31AhWopDqPvtxSuwoeZjQWoDFcsXeaSOxt8rk6SQ80oqaPJuzqSu5
-AT271X62Kbqo4Qf2Mm3HF7Ic70ms9/vg3w4e0AAvhm3fzvltn3KUnyH2ETY5lPEc
-eCEYKk/hwW1VqHIOf63gOnzmg/kI2DRItjwy6NdQ0Ufdiqpzh/6A9x7rkjRpopiB
-UT3ZFhxWYdLd2QGyprdL51AJ8zMCUO80pA/3H06nOMEeGkK/P/R4VPpTr7yU+knS
-xn1grNd5mWXcQq2sRhBrxWw6Kgub0sduADmeNsXDDyhGVCgqHr/9Js1959K+0Z5u
-b0COdahUTaPcYdLV++QHMPLVSgApifayLqWWRMn8lxKRYeoUpZ85twIUV+mcPagT
-WpMPxqYj89kNR6BhWeIsAb4pwxZ+iOO9EO30teT9Wod3wqvqBkDQ0eO8taVfz35x
-obnzbQ0WlSJuq7E9EmZO0kJXS/hPh2CSdXBfz+1u+Nw837yMP7xsLStYsCfwp9+n
-wFjhrkPMp66lrJ2gM0bkQQtjKbH9arIDztxBQXGd+IvKVGzdB+Buyx7Gk4ymNcZo
-9vg4gx1TsYJtDGRGC5Cnb7cbcR1GpsuIXQQQEQIAHRYhBNSlI9B76nS70hhER2iY
-gizI8lL7BQJaeb+2AAoJEGiYgizI8lL77eQAn1/bkaAjuUiLmTpEjmSt8jxWYdHs
-AJ9irR+p8b0KAC1SAcApdDibUiz2l4kCMwQQAQgAHRYhBBZRXR7VirywNsMfWYOw
-uMbL2nHwBQJaeb/EAAoJEIOwuMbL2nHwJncP/AySY66L5P20EMTYDU2RYJqpIhtb
-xaiGwwBWevtjYdkOp7830n/pg73J2CN8/LPLb7Mb09todI1k4AHhvsTI8uZiSafB
-EvnKYQDZlQ3mZ//ZxhrYAez7/5nFyXifwG9BdabZg+UuctA7H8s3MS3TK+TrWW9/
-tD257+B4pE7eF2e81vmHJRYXwayPZPVWTsmVXLQfTDQHPgAl8gAZHmTC12r6+bas
-zMxLUxc0n0z2WIX8B6pHHdMKV0q3fVq4kYnf8HYSUXF0Mee+ssh32fnxJTxRw3J/
-nwRYTR3+dB9+zIWMIOZ1NDEtuX99BGDaFBK5kB/wDtNK0AhJweoXBdDSi1nr1Adz
-zROohT/IY7/vMLoSc0e3ZOXc2+F62rANpscAmAbuGpR6QbYBaT7qTU6m9GcrZIIJ
-zhEtKy0weGAABqb2QyXuJ3geZRsg6s03NDD1yBFYqLXrSv0AgBKtjSkOm2TMcp98
-U8e0zX/IUFjsckXqB6WDccb9tBNMxukfvGRkZ/bv+9DdjfC13HvmJ7FNtu7LwjS9
-AdJ3odj1+P0ezYaQOQ8lWBEs9CQgDW3srpTjIr5DRPfZajN2BKp+JMgMBwQqBgej
-8+AIYiK3v0RcNrx8Lqz79AikNSM2zl4LE3umRkBXO80nRLYUmmeuUUhxwyDgKhty
-ZNcoSa9gy9htCNJpiHUEEBYIAB0WIQQlVSuJ0zqm9oIwHoKuOuRWQiVRmgUCWnm/
-ygAKCRCuOuRWQiVRmgBPAP9f9oYSgg3HivyR86KEgyw3MMgbmdSsQfXoUAQVNGdM
-hgEArQvTTZzQuOkAYi/b1rk5MhWodMPidIKimSBBhIlNWAGIdQQQFgoAHRYhBE1R
-kADWKcxUVwAJtwcDwFyDoiBbBQJafuXRAAoJEAcDwFyDoiBbIkIBAKzVg6NStnKO
-4VQvba2ZbD0d5YiHdMnfRyjFOEd+3pQCAQDIdLTP/zz2mGVF+UsKhvvWyV2x5xNP
-xpr9d6QNRgamD4kCMwQQAQoAHRYhBF8tLYXw5UguSb6VMx8Gr5l+JR7jBQJafuXU
-AAoJEB8Gr5l+JR7jm24QAJHmogFLb3hb885ZV4vgXBD3VG2oj5P690D5g7hcGNeR
-Ld5XyQaoYH7Xwy9nnPliKJg8ziyyCTPYmW8z3OQAg+BvVUFrfhzVyNNwYm9cHMV1
-9ZVaeKzEDpKXVqaR/cin0bmHJosDvoCY2v2UHEFv6cCiTOcBZVKDewqGGWpPniR4
-iL0AxENy31UfRm1++aSk8ebCXbY5BXNzrp6JvKmCCHuk1GXRHxpFsGWMRKACGCSt
-FvecYgk+ZCrJ3PYZX4W+Rxk0y+kW0mlONN+G4ktnd1fYifcSELcmKCJbm5z1d6VK
-+saiskU8CfQilAKhQ9UxH3luu+E9jCyOENjYNpsWZbDe92ygg3MhmeUSeQL17Q7E
-VAA/9bbWfNwttvPZlG2LyHw3jSuPg6M4UET6bjF4/pu9LcW1Wek1tP3oJTfFljy7
-wib9bOc12loqI7iMYpczVXG2aUnmXPUhSegLvkLChrTZuRiUg4wuGTCrACIBDN2n
-V9BSD0BMjY1Pe4HXZQe4bxI/lsK7ZO9Ix5rWPqGkd2vv/bCOyoLHoAuuk1di4cUo
-6L0SFREWO3tRPffXkRYU+tVoBK/4xUr4IVsfDf4r8pVWzC/RkZTJPVu8eHVzAice
-KV4Yw0YZDmcXpOgIyfRAwsPV0W8sxWo7BzDVHKaSneWoq6qMY1UEY0OX31GYzis4
-iHUEEBEKAB0WIQTcsygfOLBxGkHA3CDujTY9FoeXOAUCWn7l2QAKCRDujTY9FoeX
-OBTRAPkBQXFVm6qdDbE8HljrtKRbBGVvPW3Of1vTsci21h8XgQD+OTIVmenA9UCO
-xW1ARmS2r7vOc1SeoF/IeTP+uZTEl0KJAjMEEAEIAB0WIQTGgHtXZl0/Qhr6A9o/
-fhkrE0m0hAUCWnillwAKCRA/fhkrE0m0hEwnEACYyDwrwyn5h7aeV6jBXj/iwbjC
-qgguAmrd+QSHmsj56DFbRkUAZ2NNwjfxtw1l2WmuElm1pu7VrR2dKlOSE0e/xRJS
-bsUtEXR6Nmlgcym0DPF4Gb/aoQK2wosbj2vPJTskaGtZQ54vJrYjeSYyvCg0IhG8
-WQAjcKfOKqfGmeDU5qJZFWWWBKO4ZWBlOIr7JEXouRQOuy6QRzXyLphMPpMUKdIO
-x9LU7AJgNBH52S3aVMikFwZdjKWX3Hce54P7MEfDAzPLiVYtpijShIParBjy/D4w
-NgGi0UVHmmgAhphd3ZSpNn5pu7AgcJjP5K21AE0dbTHPD/NFQ/06j1PLwVLT3JVi
-njIjfmzyZGdlAIsFJpEdVUy+liSEkro0+3KDcUXWhpj3S/cgLuPMsZpPpNqNw0U8
-iAlBi6QzU9FVPY2PCOvFqs2ExOcZHPeIlwwmKqI7Eb1qC+defh7i3FP06riZ4suN
-TGvU/D9ch5pc48dv0eEccUnVT+ZCmmvt9TRiMTYuhAqzqvYVWaNnHtwhCajGV/ZL
-+8KyHZX28Nxpi0dAtzpLjXSj+yoaphxUwbte9oy1BPT6jaNtvVy9o4duy03FNgxc
-cQ5sLUkcLp8KK/R4UA8bFQD/4nBGlxD1eOSA1zKRLBStTEAvfJnOO9ltWUzFxLB+
-idCgNKoJTp1jxBQcIYkCHAQSAQgABgUCWniljwAKCRAPOGKEwDoRYi46EACmQZT5
-mZp8wpFL4tJVaq+H26nXIVOi0LrBP8CMs2YH+cTIqzIC9sQpCniVzn99kudmKMkT
-ruBHyGjbSdqenC7R3HOfJgKZFT5pqbuPXsuxk5W3SgtXAPL5NHU75GVuXFwvGOew
-Gn/W2fi7kpCr1g1ojZaZUWgAJAWwshUVxisvmIsqU45aK+g+aYimancFIH3etwhz
-egUpqEpuF5iHrjwMn/g+u6sU+TYtvHP1nyrv5sMrq+6paotWLOSUe813QiUTb5qz
-mLEgwgweyqVIq8NnmEPELQE2rdtMF7phZvIagMF+Iw/VENG3g60Y+WEOB//8wbCJ
-FZWuDRddqimLuuy6DICkIpyiVOJBrDSacD4Cy7eWQ4xFRxWGtFNySFc7ZhgjidPd
-2fFVuFxP87PadkAO1fhjmLy1Z1qjQ/jT20BdxHUytqI/vV/mYXKLH30wEz9RiNBv
-LcFECI6IOr0FnYobT+byCg3smkojIvxWlHOg3RCwSjhn2ebhTpVKWnsuXSXU1o1+
-a/9BPFSfODNsTQUSaVCk2rKmHPTBMqr170XCSr93TiUWHon+zLQpJ37wxAMKJAXV
-f2mvXC2q1MHZtOXvuMA9XKKEZbAoEoFS2uteGCS1Vkytv148Vpw6V8FKzFdgUBjd
-wtvIkuzAa64Gqy2+/u8hrlkA3yMSvzMkWYW3ZokCMwQTAQgAHRYhBM+bFAhHUJFs
-TY/KzDnkX7YBQTHkBQJaeht/AAoJEDnkX7YBQTHkI9IP/0GLcEpHNA/IUHQImbs4
-ji8kd5yfU5Yv1JAwhZ0q8r1//yUK9rLnHZNyhZsfr28KD1R3Rap8sOdrkpQ9Ok3S
-FY4jsYnCw5jtNgdxH0MJZz2FnZ8U5CEotwCzkc4DNiqKvfaOx94jllSAD9/2jKxi
-+XabAdz17y8wbEDe22A0ZcC4VjJoVA7xccrDvr6iMZ526SQJ2r31A3DMlHFOnE6/
-POD83eHikl7TAz6+MsAcPjW9/Gqvg87o4oRjt5E+FhrpbpTH4n+frJz6bhBBbUfv
-9XuRcbn1f86WywM3chbhbXotD+ZdWyN2ttnP+T6JKFQogF7ghqFFmJWq3O16FmTE
-Qo9K1wcAv4CQuPyTPh0seMylyK1i0UH77v6yXf607MmyNH359TYfg2rPFYfDes1N
-0gaWcaEJ0ITRMl4njvxopZqXiwluuU5C8J+slfG9auYyhQ5OQjjG7ifIcnz0KZpZ
-io755CDZrYAMj5AIZtFV0oyY4rS0oxg4wCJ4IDSKnRUiqZb3EHqMmc/R1ltdN+5K
-h4i+hS4EGMEe5WogVw9rgk+4ija5YjiJ73pbGft56XjZM17tERBVfRPjLWV9hz8v
-mEmHcIhkDGxJrGJjqf4vpAiXwbMHpgAhXoHyFITPJmIBVDwhD2S3SJnTiQlvwkmM
-KA5ZxmFoLF0gvO6PURjMQ3MbiQIzBBABCgAdFiEE7icUP9TByVqGtNg9gGU5+o0Y
-yjcFAlp7JZcACgkQgGU5+o0YyjeCoA//WeJpyX4fyDJuxUO14T6mucAP90KABCCl
-3/fJ4NA6eWSKrhqL+PLIIOycaE8L4YdmiaZBaPfHR7wDXmebjoC0sQJo1KW8DiF8
-XfdHhINnDBiyCfEwkhtIbS30OOYBOk4LWgsw9LdKBjey/Nr+SQdpnnvEsaDyFCKJ
-Wxdbsu71889shouYTbuPBwI0zFrcmqu608BYg5ruWIKWfVfc0bo6rgs3fhMJFrXD
-z1vDd0nt+HK5838rC2h1Xdlh/U8gkcKiPskDVu81TFQYu41szZMc/3iLgv8pCV58
-CfE6NlY4IRv2I2KXPyw7AProg818ow8jdEubsTTWw+bpaCXVjTUIehEQau5yZe6g
-goU6Z+sls7GoYRkSQIR2MjGLH+DvCxPd/6taT/kcE3RKIk2tbHiNEYFHPYiqAr+v
-dVgaCZbW5hCFUXHkN636tWs6W483eyGzQkSvOzvuAr44TCaSxhPtM6G865bqG4qY
-tOWZb/Q/uKBWR5zRQhBoO1ZA8JMRr/Gyd/14aLd5FbprafFTcbHkpG7POSnT/+fj
-DQwHX1L/agkmyPsEJso2Wqh4+TAXwReMBQuOoRNuUDvUn+cc0Lj3KVqWgKxOTHmP
-qAtY/m6LLMv3ZB5/Kz5p0y0JpgOsamOqB+18OPC18B5vhCGD3RCWcxU4OOPnYIYP
-gTCF/Mg+ataJAhwEEgEKAAYFAlp5wk0ACgkQTqVo/D1q0VMVfBAAneJLhp28zT/g
-XrFFx7wLT79SEZk0hok8/mNiT4+e64Pd0hiLoUTcupNguOFTX1FzZ0wU09/VFsv4
-htr6KLR6BQrtOz+5ZRo0mxtFDKAZKkjPsCEQsx9Gbabztm+RSGFxip/pxs9O+MS4
-kolTvt7JVMb0/no+yXHEi/EjPHMk48ljPu6S2Smv/rMdKshS4R2OoH8PAhyVlzci
-EbMEgyHR0CxFXnuj0Dc+qLw55QEBxoXeuREMgcfHvPGhtYNURh/oOM6RjOXBoGfi
-lgGMki2K5fXjELTfK2Bzo1OrMAnMpQFor7R1dSZ/kj1QbXYX6Nao6k42VS6HbYot
-2/A8qkzbt2/N3tCVdjoiNxQFbwW0GrNrHz7S0omE89PEXxXD6CN86I8t1qZwiKFr
-F4biBU2AT3dHYQC8Z2VdKrd0+LwSV4rI8+vJ86FCyTNZi7OOg0NDeLC5aBX+ckIt
-DuAupRx0lqCegzqkpgFf1HkXdwxYE7UitAXSoSBlolsRMxSRT2RxqfFu9S/8jzAj
-05pPqrSsNadMcbQKKCgAPeYeFQsaieBe/PiBJGng7JByqmxUwS8z6/Ah2K0HrEFJ
-K+hfHj9KxJFY2+4Lcb3Rsllo44EWIvoEB6ZJ7n2Cl9hxnnJP0JGiAHpxjAYBRcPb
-W21neKE3osFgAcH0v63GuLvZg6KQpuiJAhwEEAEKAAYFAlqABioACgkQhm5ULPdC
-QbE9dhAArNdPIz+ZntK6dMhP80EhX8ZqtxsjKUVpagBGRBDpIGbfZbbVq5kiUj7W
-zp7j+E983gZvGMtyU6KgFDBK9nQRQZDgJMaOVbp46RIuPyWMQ5yIgoA5u+uRA7kX
-VgGO+q3hDEjSuQxBvK24pDimCv/niqKhgEbVcAh8ebNFMbAwJcVtc5Reh7aXQysA
-oDBPnxZZ8jcFpQGNCpFr2/DQLDQw7P3/ssIyjMLul+Ldh+9Rgi9Wtur/2hY7tbIf
-WwvXkA0TP6jeWMJ1YVHQNK+G71rJWpQ9WjDUfzXHejB6yvNLC8Y00HzPuM3/emmI
-e28tP8wehnvDXDyTsZV/V84F86Cdq3G9q3wfir5WROBQeDumGLs56UM4+t/XmwvF
-9DhI3goErDuFyoSO0qd9ANbGA4z46RqkAg5rAwruVtv09DG3xENsln/C0Df8+kzq
-O0zeg1ybZN7I+Vvystp+L22hcIbChdrzNCHXobD+oVhrQLKIjpBKxUje1BV9ftv0
-7OGSCXYlPPWCkKxOHCpuR9u2eVtmqop81FJc1w1mkpcvTvmYVm0jEzl38N+EbhbS
-4PSv6Lo5s1LBmZAR42hvqtdxibsU/AYBBEMVb6wpjj/BO/sVXzeAOVMuToHpZZEo
-eIud+RrKSCoPiV5RaSq6T7GbM/hXm/EXnReReIlY7BKbqYHJrUSJAjMEEwEIAB0W
-IQTICvLRxEwUOiP2b9nK+l09dP8CaQUCWnd1QQAKCRDK+l09dP8CaV/GEACKqHp8
-K1XtBETLyyMVJMpJPfdH/rE1fLtMBckPH3KKTQ2fTt01S6Y07aUw8LDEd06kioDX
-pUg6qbqvvTB3ViPQxy17CwU1NgDVtyfniJgjXEQ43yO4Cl8WtSxXZuKs95kOZ+Fw
-QzbBGermYkCWiHE1bpBDeZqHDuaKFI8ZBriY5Kte17V0Q22DspsMhlmpS5SCbiok
-L9AuQ6GOrJkFqdOgcu8kdGYIo7Q0n3quQT03jX6ZoVMPZ77rJt+aOB7rwAZN8QgL
-vNhAUkWD9e/X0iQOs1uAYIDnXhmO8WSmKyMuJagk0ZMEigRXwu7jr6jqP69TzrsZ
-adBH1XasjorsGujBP38zdrHCz9zgQXcNf4qusaasgm88LrDOFusm27XOEotdg+ZT
-BR5HfCq9qf6kbWa8FLRr36zyb7aDeo8gN01nh2AV8gyJSANVq11wI1+jodZF2hUW
-Oe+3Vj9pJd9Cu+u7YaR2gKw5npt0Yzp5ZT3G3z/nr4nUsmVeq5sfmBbMFu3mg2gj
-W3qnfnwDbgF2nXfrN9VEtVD8JMOALzmBLAfY1CEujwYwZnF9ANpR/tNssDmLKIto
-+r6yB6WGc55Ap6XLaOASmDU+rLVmq2HupzvOtsZYvkNFHchShu1Luu6w6rW5Q+lZ
-nXdhosb+HsRmCgGvYgnXyfSwrCbqX0kDWO/CkYkCMwQQAQgAHRYhBITnJDKlsW6c
-Gs6NJB25d83PBmUPBQJaeggiAAoJEB25d83PBmUPsp8P+gJp12tHk9E1jWmBFHGK
-S1qGbuCKNNoiuOJF43V2/UKgW0BuJq3JS6bVsm5JSxC+Vw4inWLvwDbZ5BGqWbvh
-OIfgN1rBxgaaU06QKp/bfQVQ47jsH80TFeyazMh0s+lB2hRk0LWNu5RXd5dAp/Io
-gIwUi2LbJfQtZERaaApT1f1zjDuf6QBqjR8ZnVx9MlrPbe4kJ700sczLpEZtZo/F
-1WXV1Z2wB5eFgW/W9zjJhuEr0Z2hzlC0xrb+nnDxtxBYyE0/sUQ0Ln1ma4bUTNh/
-DUToraDGKJRVVsN4GiSIGxEm7bp0fMp5onZ3ciP+PpIYY/18I4RfzAx3rhL9Q9Os
-32a2w2bsZ/kADiVjYQECBs8SHEYFuq/bH1rHGlTdAbVSsBuZkx05S1e7sqT6KLDS
-oGmjKsu+93lNv+f2YE3FLGf7vVX9Ds5SmR420YEhmAGyAIzguiSrDWFJaLyDczCm
-IN64Cri+BI04ibIjbjb6pSqSeRk67GIdz5/iBY9UzJ9IGegBlWrCF8eO+NRZ4MtV
-3AKVRah8rojLZO0XDTk/h7ci3th2YwvyU0E+Fo/iokboQCOE82HHEBu29AqQBWNP
-5XXG1PQ4RXBOQ8JTZCPOdBxfg0tN61UdXtn6UPpyaqXwPPSLA/0MAqn44CYqfuMX
-txt0RlSfAHaVAuwjQvWr/1WJiJQEExYKADwWIQRsNFjuc3ziLA75+jvoj+u+ICzl
-mQUCWnmHiR4aaHR0cDovL3d3dy5nb3RoZ29vc2UubmV0L3BncC8ACgkQ6I/rviAs
-5Zk0MgEAla7WIKAPDqVCcGofRu8JCLgUz+ZQR5LJPxWeLJihUQEBAJ+56wpdY1j1
-hqYdfi9kDxv1msbRhwsNPigYBTDD9EwOiHwEExEKADwWIQQBONqS7f+yfdJw+G20
-deIHurWCKQUCWnmHoh4aaHR0cDovL3d3dy5nb3RoZ29vc2UubmV0L3BncC8ACgkQ
-tHXiB7q1ginwwQCfVauf7SJlPZw7h5bmSoe172EYwCMAoKog0JBbd0RnE1VZS0nr
-GLE02WY0iHwEExEKADwWIQRT/FqHJ74dMP60hhqUj9ag4Q9QLgUCWnmHuh4aaHR0
-cDovL3d3dy5nb3RoZ29vc2UubmV0L3BncC8ACgkQlI/WoOEPUC5VeQCfYFZo45bn
-BTGL6X96ZO/hAHCu64kAnAmMFPkQdMv2DDW+55P5P91Up1K/iQJSBBMBCgA8FiEE
-aeHuB/emqo5Kd3sqegaFQh6JkEIFAlp5h9ceGmh0dHA6Ly93d3cuZ290aGdvb3Nl
-Lm5ldC9wZ3AvAAoJEHoGhUIeiZBCdLEP/2D/LGDO8jMKGYLgQM9KSAsaFGAkTA+j
-UDWgO5mjtFaZSSFGxgXpfD6W44KBdGxObHHIECtKbQzKRpBB7tlDILkWMbZS1BTt
-hgcIUHr75FP2K4eMH4cTqpF6DooJdsZV2nEXXiR1aKmYaurtMiidc5R9zMSJCxQR
-kdZbKgG7HqQhjInE8xrt3hKiV+ruRkHyBukQ83hhKsZqzeSGf13HcvBb6ALy2G+L
-5/OiSarrlvbm/dC53CZIC0rR7WPih+Ge/1gDn7if7Rigzls0VsieyKeO6VGUhA3Y
-tfhN5k9G1T4GcYIcLRiIGGWbr7mUCfWcgirpJYOrkY4GZztYl974K3kewQyVRf1o
-DmiZBNaYQjbb+hcExjGbnag8YQQEmIIBFD7uHLSR0b5bHpvLQ3lnmx9Zvj3ddoWe
-MJOzNLLbiS5a/WZZK2/mstw0irjv3TnIIpkVhDQlZ9YsxuXagXH+ZuTKfPNi18DC
-UVe4sGeOSkFEWqjEOJSn+fxYqrdimoPVCRYbuayVpzatIR4qUChHGSIIzCPpJRzZ
-4mj9rd2PV/8HhSl45p4R9wXOwvT1TNpIQzM1YCWYLa4e0B9BFAXX5ZMkgTAyrIyr
-9lOp17Y2c6qTu/IMmePxHClW44MxAp6YscBcYxiH7iaCsMeOOI2B99ehgJsvPQkO
-NAv/PATNG+x+iQEcBBMBCAAGBQJaeDlZAAoJEAhtwqbUC50Epi8H/3ZWzUHJPMeo
-Hf/3D2XtclXWWKwQvpEhoqStPCD4v96jgyd0VaSwMHTIYqmV0sc+iRMNTiF4HqHU
-/vilbaJf5qeXTMhEb3Jc0hnGvqLSbf2ngXo/TacvOhzGyhyGLzhOEjoaqOWTJwii
-pApS6eDGl2ZYiQUxu8SjW6G9U1fQnOmSWwvwBRvCeLWzEJlqbKP1kAhJ0bXTSvyl
-wMAY0Y3MoIWCulhczuzC/JzIne3iDtoiXZfzD1h8Rd9HcVvuY4dALKRclnOatyR4
-bixxMKmOdg+sWEMKTIrgg+70V9Xc9OKeyFRyUe518zYkCJYd2/GsIuR0IeneJGAq
-frbxZrSYq7aJAjMEEAEKAB0WIQTKhGPdDDkVc7TJg0+u7WFYAg6v/wUCWoCHgwAK
-CRCu7WFYAg6v/+dZD/sFpwIQB1M2adTMBVNPYNHCa0d+4hdtjZf9XKlT2tLrflVD
-ucO+Q2nGsQmGljYudrEKoQIDQY3Z6bEYiu8Ul8NPSlXHLrJ8N3H2YLghkIhukVGl
-HkRjct0sN1ywVf5I5hJGEelduMHOo4sneGooLu4dYjARLR88XDMm0cufLVAhGgPL
-hD5OwVooOsIcW6U3ecpqo3yaz4FlaE9iRnOgqLDtI7Y+I+w1FQWIvBGW/LFgABLc
-oKcaCsFwlw1Pl8IzQID+J/NN0HWv8crHCeD/I21oGy9Oiu/BMfTZeSp5ScwX3o/4
-ovjBXwdw01K3/OHsIVgo47ilshPYxCgfgpgj466ZY1CQj3RRletretOJ7OS9sF4p
-rnznUFZQdgkNbqJ+CDHHleKmYVMKEP1MVARSLrXDkNKk1bRI2P6ZIMjptf7C1CEo
-jFm+nh5VUebImG0cUtfDycrQ9UZ58Z8l/hji6m/Bd04hnAWNjREhvGAvdWgQ8+2E
-/iaRrtMYpwRwKi2a/1dVPWS1mj9ercz6UsEQlF+GS1mRmziqK0JU/Nv/RG7859bz
-9mVM/Dhko58TO6Ef4Nz2jWrzejH8WeEAVvZfYNJRfQHWlDOqabsaIGagiVcbuAhG
-6inr28LkFq0/OuKkV/4IBL+LOLWiVyZt3hWR+xoh6b6+7iAONJ4pTnzYvrUIDokB
-MwQQAQgAHRYhBPn6jjjKnuCqPlBavpULDuE4JW54BQJaeaC1AAoJEJULDuE4JW54
-wlwIAKl85yBMalioZQulfNMO+piYSiJq67h8qXtf0IBZ/Q1iElf0vYlUOembec+2
-VD/3ZTcByHHf59IavIIHMdZTuma4j2kYcLni/uDPZdrDVp06ReGyr+9CGR6KbpgL
-eyoIlIpHhgoE9FPix/nOEoA2oPnkAKNyzk5LmyfQ1DW+JCem93klvKnR3geHp0W5
-bV+srQKux/UxPMY5NTXCEMU1xkgC0yxnjGrtA1+hsIfVZ03oTNe1V8ui9E60x4g4
-DIF4XXlIyFzG3IjX4x1Khzqt/J5vG6eh2tj+pRxMlz/wo+Aq5ScvOiWEX1pIxZlK
-UefyvhC+uXm+LcE4Qh+Ig9m5s8OJAhwEEwEKAAYFAlp8dRwACgkQqchsjdOujToW
-fQ/8Cxv00Wwkw8Eg2/NdnXnsS+avb2jGt/mVTP/alzIQhcWQTMh/P/JAX6lXQUTk
-6/ri4X9LOwwuENPXgcy4wyN7dDtJcV0yGGj6QtQp9sCO6J3xT+5Oy/cFkSX/BUrp
-LNCND41ZdQ0aaCP9Rrgms4nLQ6h0rd0DbnbMe2MdOsFUXg+0V9quuRht3mWqNgj7
-MtZbRkGs9DxeeP0EsZ1x3Cuh7qEFfSUNLnPaAWtIiiZHCOCx0SqbqtCuZNpjJEFV
-xrhUmXzcPdJfX5fPYQN7yTnZ6wwRpIzrzeVVsX5VPaXXR3Fc3zqdD1PbRH8kwc9U
-O/pCA/sQZsEOkNeKk9ryqfGfuPdY1mfWTcEZljxSHLdX2qCTqTs3ETFY/7uUBbWN
-J+UgMw7bgF6TZt4zLfWRUBEMxlV5DAV3wZ8IZkahd8WlnHs8nDNe8ippuvsnypW7
-LYCsqg+C2WUGq3JodoB22dWFQ3C8NfVfx4/SaBPEz24uokZ1vNfNb9JCarUtVMGo
-vIULDUH89nqhDfNQ8bmSqRTATsqCyB3q4lNGeUYLDBDjWUbusyswhuwmYGAHs035
-TTokRXP78otvu7HWrpJDN0o4fNi1LvITtktfqlorqeWxMN96ds9dBbeOrGvFbjHe
-pc7HL5m4tKTaVTI0OnGVHTYCBgOjODX3XQoulXSCm3KP+UKJAjMEEwEIAB0WIQSc
-hkwh46WcQSN7/2YRr+RkRaeUHwUCWndx1AAKCRARr+RkRaeUH8DzEAC5Tx5IF728
-EbsumZsp0o1evVAwdJTOeRPeMAvb/yvgHNBC7VDZkK8ajc+bX3EZVux+4m7Zet9z
-nx0UpjLynYcnQNC+rVuI4S/CrcgKJ4yi4vhOyod3c0d3X1IBl1fbYCTjPMs+wacx
-AXimeQIRIV7y26NEwS3nQd38v1zUkP5ysiEfKXfPkMBAwN7joeAFQljHJJYvQJZQ
-mlJUrMvEfZiNQPAN82kupH9rZTfhe0bGWy2P2LRWJtzTOXalW6hzOIPsEbRVyekt
-WXs+fnCoIBq2r6lVYOF7+ovsL87sx7UL1UYXLQ0A9lXoPo2zovb6vmwDb3GTqVKf
-9RuEqfjIIgdzmegBn0lctvjAJCu+7vQlQMaOKY7rmOI7NLb8LzIbNhhSp6KAnoc0
-nPsXU4xF2que2B6SkNXYogaM96eSVljVRFPZjLfc9kMx5giLzHmJ1BmgXkCnFKQ8
-XnvkoxSznFwEXYjBNdAg/7Rdlz96o9o3vCDuPaGH8VaJp92fk0JZYEW17V361c9a
-7rcOsUUXsAeTCDE3XalDb3n/np5abzP+lTmwRj48x/BvepAZNPNSN2CT35eCfpHS
-mZoYSouRJ7WqhfDul28wCvPwa7YUvAMsEzJLVSTJzapSoWdzb2aEpe3KPjiU5yTT
-dDo8SGhNVKxFQvfKtuqmiUCI0uXWg0iTAIkEYwQTAQoATRYhBE0XOr81qBdBt7A7
-6xlBm/qW9NDoBQJafwn+LxpodHRwczovL3NlbGVuZS1mZWlnbC5kZS9vcGVucGdw
-X2tzcF92MS50eHQuYXNjAAoJEBlBm/qW9NDoy68f/3gp12yqEH9uQYhPXFqjPyVy
-jV3f1b+ap68AbZH5hGl/df/kS5P3v97ZuVK7jevdcXswxl3mYC8tmbh90dJhr7DJ
-6hfIbVL4tN7HcPBfHbTFqJkq6aLjrnpZzO8/3rn8LZoZoytCPx9j2zVki+eFMxXA
-hqJ41j68fyJcowtBPax3RiIGqrUdJZIoFhYk5NyMArianf628Mnwq+9pvY/CePRa
-+DI5cN5xFRa8GFeN03Mt9w5yzPcCF0iq3bDzc2PN3gouaEMoPN7q66cIDb3ZBhCS
-fYnkn9HK7V2v+gbJaAfi07FEEp0+Qws1NH1zH8D1pNp6ZZIF64fkQtQyyeMsG5TA
-styLhWc0an0h+f7pBIM5H88/7dRMs7a5LC48NJQhd9t1xcsS6RwRCmSQMU1Pf+4v
-IFbFzp9MVauxFTnHME8ZBdE5zdIVkJ+XdANJVULFfGSlL8crwkworfVZRYfFKe18
-nMqj5Walfxg2XcvkkOJqYGcXCFL5HBql9dMVy3px3M2V5jtDYLKmZBJ+gKrDNOqF
-bevcWPPtapM0tc2M8KflXOuEajtHB2VPIvs7kIQhFWipf599kPU0TpD2Wz1jQkxT
-PK++5ycrMoVQrvBp+Ea1W4erjW9reNiWXkrej3ldo2d+y35vZTYevOXi/RVnNZtM
-YPMbYrgWWRfi66LQIdeNJnHG+ODKjxSONd0cQ5UBbdAwWHdVwvMKxZCQyXb15sp8
-jYugerQJ8PYuN2WYcVp2uC020HLF0LdzZpeP4/Q7zCF3VXbjhcOzBqWgzACIR1qO
-sT2uTetRuYnpl9oOQQFfQt1kwbcs3PdUa877LZJc3WWeo42pH3q5SWm3cGuGjlas
-fIkOfmwwdQb3lSQKkKQp2BO7XjsQIxrMlxkSYDhyqXR0vXM0iBfcW0vZAdZTZhkS
-4qDj9ep/f1jO2uQt/z6M+zT9hR9f91SZ0HpY8rwr4Ur/0VIYNO2Qx+7YuD9GQgEI
-R+Im3y7e8uowaKwERTBiq7jWDCMh163YKmRQGptOsHL4qPYFdpRquWSv/eSJdO82
-PX76PKshtVdniuqWIA/LGVzbK/F/Ym7bptK5NtSXEKkc8cz+8Y5v6LHNBkNUCzJU
-B+wazTKncNZbeki++E4Lbltj/lBBwVlLMcQzUPslCeEipkL/3oj/0B7Qu+7kH0a+
-bXlGm0KWSiwk9rZ2x2cd1a4iiOIWmtgrFK2L9gvAsXevpHP2C5Tu6k/GbmNOSiXb
-/XaJ7MPbSw/fzFl36UoZ+B6hMr7TXv6cCcNuQUZOfPq0M+J2EObVaR5rX/yI10RB
-SeUmXGwgkVwayRBZZ2M/eVqSPo/5ZMhTv9uOx71IXDIrJlfh1QVCyiz6/iunhcaJ
-AjMEEAEKAB0WIQQx2VyrbYDSYiRKF1CkdiDoAeR+lQUCWn8qAAAKCRCkdiDoAeR+
-lX79D/4yZtFD+lpzg+9Xu8rl+votoEGhL4MXg7PI8KMpYAlNKu2IgNz994Ad6A3Y
-lNKIVSyDN8sp4Sxfct5af2iu1ezY8bYRQL1RtADxu4in7ciZD6vY25k6LJBmo3sc
-XKgkRIe3UQefGER/KGuf35so3MjJDqXAX6k89aRj3aGPc+Vso9Ab8FzEIqnt8/zS
-/rXRwVWxTZa3gu8jQEIITLA6MhegSlKT2VQCij9deA+WrYcGxu0Rvxi8RmkmExwg
-ep0K6ZRxY9xRrP2WazQmzfh7Bg3EDOpPuR19mKN2qBxiIU0NZD4YGTl+r5V/p+5C
-XWJJmqaiN3UyPYPMiNWwt0Sg5oaqorDqrRBHbWHURNNg3uGpK93GJNETYaGXbfTi
-Pf6ZhR356Orl7Zgkg9ZssJ92sITbs8i/ZmDQi/Zf0iEcwv23szrfuyGDYujif5p/
-KkyaA2fQ7q51Wu5bBV/PXx52SqWHVD3t30Up7OU3dQHwyZdIGe9y9Q2PPA5Id8dw
-bb2SY4xlQtW8MQ5iv2huUeyaWwXjIVZSTh3b87nDX8KzQHZYGBDBNWfn7gOWGoVK
-IRTg1LZ3A+uJHKxRturGLYhTYEytJxrgFTv7BL5Dv9IsLAvasHT4epaCWNmfjiZG
-bsKafAUQXCefBxK6KUYr1LCnpMzul7O32KDlgN7uXT39hCRFFokCMwQQAQoAHRYh
-BHQg34a84VpFjc6ZdjknjagQnmJEBQJaf4ZpAAoJEDknjagQnmJEMIMQAJmSvgiv
-PkBtFIkmYzhEEreEGVvyl8o9XPty9ZFxc+BBSTCoTrP/WVIqYp+bg9KQbA6jxATk
-Jcu7QTVekM/4b0ssyW/PO89LqZMO2RpbRHRFx9SUiR9yGTFIMa1DS/4U16RBljFw
-j5intKXLUnzDwpBWZE47lyrvG2s1JIucqZG/ataTmkrgtlv1TmPydzsmTPkgZvef
-gUO5Se6YuzUcQ5k5x5mY+eylD0LGAq8TOxRszFVyFEiX+A/j6ht5ZOWy3xTQhxu+
-oLyVrfKbjfbog+aPUKFHOzkv3uoaZdh+3N052/hm9qAxQCfU6YIhoPvbyec3dClT
-EUg1QOi2ovEit4sILSaUdwv8eLtWii4j9UfmOxzzC36byQczDvl05vrLBkyI6hyq
-ZjB9akUv068SKj7ywHNTjcSDDBGDiBV7Qibd6QcGoe3hEKETPvdLjdYh1IqlpIs4
-A4Tf2C7IfRswz5g96B9QV/rRGxmU/l5td6kknXc69h4DjTD7ot7cAs9Dx8UA5nnp
-0HyN7XmXOAmU/AJlkt7QLx27UgmKK6yV3a7rBhSWD3toqyquJFtWXVp0+ixMR6x3
-5u6ZJDnKuP2lHKFOtgyjFvcvz0vj9TMb3lMCNKufvZ5bbqDkzKWF+7BB1owyAqkU
-w6AzOT2jcz34u+VRjgLtWnAG6jX6+gP3ytIYiQIzBBABCgAdFiEEqeqQgXJP+uBI
-TDWhqBzqIryMfi4FAlqHYwAACgkQqBzqIryMfi48BRAAglLsspRxJPRBvLe5OpWR
-60OXbKQ4tMyie+sf2mOBFvznZTb8d9YP4lSp9tFLzgi/TWrSZDV/t0ieTX2IgyjC
-OX/eXSp+i1jTXfcI8vNu7Y/UzIY1OqTkGlHMcqMsmwwD7HN/JhoIoKx6ouEhtccG
-KJILLYG6A4CQl6/eesVdgijQ5A2wpYuPvP8HSo/+0uQQMHX1rYi9kaptCwiRAAWf
-bZeC9fp83KLtGyV42UL+2Q3n+VNZab0rUu8MwTjJm54hrCtSgbI+uAVGepaSWVxF
-0KfoCpe+XdrsXNF339bxKyBisrR71ToMkKc9IyUgqelYwsP97BpGTBJitiOrWqYK
-Y3PFIobpTRVPlm628yieETwD0atFBi+0c2x6WtKUhijmS2+3QkQZrznsE2UbE/oG
-49XX9J4H99BY1JNKeYmWZYAgk+up/DTVgW2PhzNvhk0jZ59GoCI3QB/OqQQFswXU
-l5NSUeDxx2y5Y1F4336GBeSHy/b/Vgc3Z0spqUUfHsX+VWZgWC70ihgPZAAp4HPK
-tvrnhAtrtWokqtvX4W74IdP6XD7ZQTeiImhONMgGE2b99j8cgwyKskdEkF0mgxk+
-Ph4TLakasKulbPsdsyW11zxQgluE0dW+mkEix72EkvfZfz3YRw2p6+7gNjHif/kb
-W4MmSqBnfuf97m0BpCZGcGaJAjMEEAEIAB0WIQQfrwRfm4+LPr8n/H08QQfmgmxA
-5AUCWn8YLQAKCRA8QQfmgmxA5HIXEACch+uIY9oF8mFB6IQADZdI9JHim7Y3fkVm
-NwvCzeQDjLDzqxJxBxVGtQWIxAGFJKCMTP3jKbZ46pxQPgA1vfbj07v8ePyiYTU6
-QLaA554qyiJHgzyenO5H9RVCz0Oa5B21W2xMjwLErvOENEB18Ld5fabYDRALuLCr
-ypqJVyyaK3sBXinL+L7aDhH+nROKxIInyJIDhCRNWJFfuVBO8aO9dwTseDGvrtoc
-GmfSfGF9YTJMMQRxNlFjQFu0qftQrjGLxP0jM+IX2p3p0BnjgvY9ARfPjvyOmsYM
-e96oZ1Q5YXR6S11CuN9Wia76mzxVZwJrd8VtPchn0QKxJrs5TFAeqJ7oiQIFGBIG
-WSfVFV3t/dxv6p+E3CS2M5CA2kxOAi3Of9lVcZAug3fRGtli5qhrYFe1ctjbBBMp
-7ptiR5xdH6H7v8FgEF2kBAGe8gpVkAkfY6G8H7H0wHLxNQSJO+46ZZciCWJiFnBQ
-eFuDN5FFXoH2uF0B0AP3scIrwAA9XGQfwn+VAM7lNsIWiZbb/bz927AhOurIGlD4
-m/yHiKSzLH+3Z5YhSwvhQ74mOuwMO/TqDW3IELSG9sSvicosMam8qygH1NpeGdZO
-Sp5eqsvqFrV2HJWzRxeO9Dpo/NeAXBDYu33vmHM2A1xQPDwpEXklARPf/2YaQmGb
-PiVApngxXokCHAQQAQoABgUCWneQCQAKCRAGBPSQykBVvNX6EACA1sMtf/U1QZbc
-u+3huNtqA/ncQAbp3tE7+kweE6Symt9bhzDPj6Tw90xVV8C7BBgV3vLYdNrrZ06j
-pZ8J5+2HUH5SsG72CHqgPtDpj522rGRqlag7hLPXfUakLjKrqCtg4qajgFaOfoP1
-FqvOCrsm7OqEio7RDNt0Z1ov3E2f8NeePgybqK7ZbHJcZH8niwt1UUFSOgsf3m0y
-HVjT8ByoBjH0sUan0WfUViDbAyea/31vaVWh7mfqRH43ynZjoVLZnoXGjxDTTlB2
-+RvA2UOIh3m1Lp/6rqsvL5c3sPTnq4D/oxSaw/V7hfslhpYx4dsdqak9VySogzt8
-A1qwIsPI6vihcUmJ+5PKdG3BgP3PkLxLJcmwilARXP8yG+afTrF4/TiR7KzNfI/2
-GaE87pqVMKTrmml4VeBPMvaMVVN79KBwauu5aPyL5pRqCGlBdgM+kq322gx1q1EH
-rhEL6ZqZZT0FvpJNvw8TM2F4FazXUf3MRRMfnIuXJK6mmeEjIJug39h9jz6MwuoD
-MDKBRAkt6Ytz8jjCekdCArVoJjA6vy2lgG+38A7+RJvgYXBsE6fvhnDDIebTv6r4
-rtPaIAJSqES5r59Du/I6boDnFxecluc5gDrVdFJWLn4h/1JBYV+pnTcZlE6YPEAR
-Clrf3F6rralw8ls/q3pMWyiJVCAOlIkCHAQQAQoABgUCWneYCgAKCRBuzvCGKqfn
-WKCDEACZ+Ku+NwD2tHr9bdJn+HfT+S4SUmYaY0S9UZdqXunnABOhCDXXObEPYo/7
-/3gPA2AY2J082UGDDxQwL24acIAcj6w9Yf38bv3lF1Ha4WppQP3zuSCXpA2LZLOv
-fAM+SvNv+iAUDm+fNf2ag0qd8gq64WuVTJk+cOuG/mXDKDMrGLsB5oEJmb7bzkC2
-u20z0hzoCOD2WXwTcV9rK/nYXWHhodMk9xmuMqhXyUqNWyISIbxVx1xV1DeXaWpI
-JmCKKqmPAbHbeKexpSSE1k9FetREvxYd5i5lFGmzw5chYbJqahA67Pr35rol3CYb
-8CzAqBjaPqdNjKDtE8olis02fEeji9osdmW10kbOuWMT7Uj6B+ycv2ss+mV5A9XC
-bQm5D3XsPjhPyzpebiGO/zZfgiNxDm92hwyA/NTDKkscZbQXhLnFN0Yrbec3r0+b
-BsEHRUwMOv8TfePXeaY0OokSDflx0wdJl1NWeL7gx15L1KO4E8x6SA9v4xkeeTtS
-AHf/38lKl85AiNNnQimag+0gqJtiiQ3oHPe0n/GLoVH/7ot0l6mpwKeAH6DX/p2K
-ES5Oz9r5qLz2Yf3qKTNS4I9RQh7Vl2JrEZvzSBsvQF33C5Ogkmd2cRY6KyI48Qo7
-s6iShmz9S1+z8yn5YbkviiBsUTD7Iw2Yy2DLL0b7iZF0+E4Uc4kCHAQSAQoABgUC
-WnmvRAAKCRChYhIRistMxZZgD/0bp9uXjXH72tmWsphF6uCyJNtMsi+Z/iF/7hFf
-z175JIRGMD9wSPmj+s8FqJfonzyM9/3m5wTQr7DN1CmRw93MwpDHjaBByGFRdF4P
-t2vfhzctckZAsw3xlSe7PP+k861Ht/ei8PR4noHar59YxJWQdxLlg9bPDtb7w9Db
-rBk5vmBg4PLzL1tbbrwat7x1DflDU0AnFmZBexWCqzxxwR9zNz+znt0b7wLg++l6
-ky/abBrPWANRsI4X22LAFjuijH/Q4cxYvsNqzuhQbIPVe+VqIeWZmlKnSkdGBb14
-fgwRQtPHsP2lj8L131Ivs7hgEHd7RlyU2evEFJGuOCHasy8Lgdn09AnvP+FBFl6E
-kX6jP4QTZBaY0s+WHsl6wr66eTVanRlysqndKR1y2O6eB6sShyxXwTNZZ0STZGfm
-udCg4mx4xumsUWvOqXMewuSMUX294hhQcEj6hv5ekRQAe2TkXfyoL/IE0F6EfaSr
-m1ohoqRSCWcJ8QEFD0rLlbZeyAfRJp534xMl3R46H74rySfNq4zLkSKl78P5m6/0
-o21/L2EUmpEvCj72wJf0chEB/2eKVGRAouTRTyHVT4E3OvZg5kl/J8n3canfd/Ni
-fIlmAdNIunPTjgzf57Ngh0ZdIrqpiC9kcLMTrbPUClJukOrGbnHDfZAV4aTdSEtj
-NjpGbYkCMwQQAQoAHRYhBFpaWqCwmno2uiqo3OZuZ2wJSUwUBQJafyzSAAoJEOZu
-Z2wJSUwUo2sP/1AZnB8ULuFgwMj3T1LJooOU56UZ9k1etSc6R5S9tLqSmi7vV2pI
-v9ZaQSOUFCvedr0mni2pgO3zhLtwUz3LTpmsqEC1/wKBMpDT9hz8qntUt9wW3ld6
-AbIefWXOxnh8xw6KlKjApRr3eao89LNLwf3cfa+8fXm+Dgg6DbHzsCyzXzw4wcKa
-49jLR+ItL7HGN416+3FYAruDS99jfjPRIgqNFregj+TRpLzFNCJvOMJpd3A+/5ln
-XM8NgELEmkrlx6ON6Rq7dOyBWr0SbOaaCuhCQnOiQmi3+10js/x5pUhpoQoalw1R
-iYcOudircEk6O6g7+8+DHx0qTQLuGZ5CqzobeEvYrqPKWCbGVeiVQPaPhtG8vzli
-H0tX80YoKh6hL3PZCE5Addzr9S7D/uin3Bl1+KJzW9PBsuQzQ/3NDaDnjmi7UDIF
-L5KAvdJlRIe+YyeTbqw2uPHWaaAH5PHZcWMASbwyfXVQK95j+v/NBHwussuvC8pJ
-t8zpVcuxx0+Wi246XfZhUX4m9qG6eFgCXc969AqvRiMdAy2rWN/6/XhIhHNMsvqt
-GA6up1WMhpHLC5Po9QUFJ/WSLLYJazTBhJwoB0DTZobI4yW49lUtu3k1iFuhWAkK
-PFGWmDyNyzTjuRz5JXPWiYbJ1QS+ks4lz+y19vsvjl4M5b3tEWMRHRKMiQIcBBAB
-CgAGBQJafwPgAAoJEHnpJOvtp/P99P4QAMC9VVWn1l3fM2c8S1vHVnjZ5l7Bb8N8
-exSbTZ5MdEoDCecmKgraO+Jka9G6BBru/wis8t9qSjL/ZYtNZ4z7ZEjBMBWHJ41n
-zUeUB3WA27aQt5dmUCHrqeYpDHbcXsom9SXgWkGUnb3dmiDbL29cm/K3T9XTCqck
-RZBeZdEYqeKOZuv36vYezXaqofxlFvdkFFKOxRj4AYZeipaPJmqmccjtRjgKrKNp
-QElX9i0lukqG2ULiNuaUrX8YME10zTarocOoecobjLHkDQ0Qtd4KdhIRWSbF1XX5
-yQAXUvD2w2aUA7igBn4beEScwKz2WauGF/XfBqLr1UI0fbb3jv3+PLBpAYasJmSW
-uMbAHHH2C2lz03a3VBaURznjdz1cUWYs4CuLhQ5gtyHBcwXV1sbFZ6xtfmn8D/6S
-iDkFqIQDn+xbJKl9QjthYGEJ6eF/+b0cn7ApoMnF9FnH66gUroYTIMN47ZlWfAUm
-Yhe2RfzyTi9MZfnNrhEETxwUo+NGPBI4oeQsXvkUN43a533jMR/POHTgVebqT+CW
-1KOFkSYUzQlrrn4zAIN2NGtH7x8BMxHeFkGA+37/hBJTNlioi86dHVcsteAvusbU
-kxS87F4u1gfsjzMIITzaZmYY/AGJQcs8TQO2mQBrYNmKDNJXC3oarvFeor3EJS6l
-f+T2MWzYPll4iF0EEBEKAB0WIQTTO8XDwMxZtjmJ13vqe/OXAXViPgUCWoWrZgAK
-CRDqe/OXAXViPsvGAJ4y2f988qEVR1xt3a15kWyMGuwpZgCgrZEiSylkVb9/jrlX
-qBm6KWyzFdmJAjMEEAEKAB0WIQR8Sv1h2KrnVweWpRciCdaQL5aclQUCWoWrbQAK
-CRAiCdaQL5aclXdwD/9+SRr+7fWGM9A3DLejWN2JmaKyjGa29p7kyzVbDxww0u2k
-MYYd0Mi22bW+hcH5fxeEGlBESBcDpNaQRVYyHks2HdgIgKlD+8Re3e4T3LM6jpIJ
-5GJNzfdnV57UyzLeknQWb65Xt2vnKgw4CZ81qERzdGTVXAZ/2pbwe9gB9G62eRLQ
-WHnrdBYU+Gt7iKPoTd3j4SZ+fnzbXWh+IJxyUMDWG2ZMekAM0j4iUBNEIC8b2tZM
-23K1nHP1T/0K/TvjFatIoFr0pygR4Y9UnQhz2D3v6z9nC7ZowoNhEmKAGTBjItYU
-mkYkvWgIm8kAo/AKMeSAvGuJPD9+Fp0SoTYq5uoAsJBMgBOQjVRMENUWxReZHMeL
-t71AjOm/oWzL5O9UHHgOQb+Hk+ZxkT0YI2soLb2R4+rtOzW1Fpiq6e3gLhGw6HRN
-gpxlRYp3C8PKmjHPfLJxOdhkaaBvxXO1oTn5WsNmzJyWABEQ+2SPKmUGwIQJb090
-ovhYKqBpnq3Hq4hXrUzXBJY0OFFNnw0zrzgu7afOkYE0LYPGdSMELdi4PxvuC4Nv
-AjeNuRhlOSrLuFfDcvUV1dBxyXVzgIeIUf/53aDAGxdaLjmtBcNGS18H4FyakyTE
-X34sirIuSqQYNiCH4BcD+ChqKh7gXKRK/eDWAQhXDmqjXetmTyQk/RjpxRsvKYkB
-HAQQAQgABgUCWonz/QAKCRATC8FQQUG3LL7rCACP4FjB2Kk4Si3nYPZkW4wNFPNk
-Gmn1fov1EpD/VA82zqIc+s3bKY8zNp32EiFylaYOrbrATmoy5y0bgAaYM1nO4AoP
-Yh7ZRwqe8v6QyLi1nl1P5MMQKDrXlssXxOp+xOEJz4u9SggDcMfSuVuXM0MgX8vG
-jiR3yGJCGKqBpWTZHAWPbBpo+RcsZ2XrcYmCAbnBk0UtOP0fvgMcao3HQamAFECF
-WHdE6dBd23CH31Iw6aAlzTnxpkKFoP3QdxwmT9Q8NcTN3v5hdQA7/wSLp08VFt0y
-2ovq/Yjcf2wgKKLsJlSbAPuZg54nFgdKk3upMuPLNOmXdhH0KH3S58uR2MSKiQIc
-BBABCAAGBQJaifQnAAoJELQPMaQAACm6LPoQAJ1iRA/oeZBw3TDsdcEetaKFU/X5
-l8GTLH6uOt8aK48BtMmiH06LlgR/WapPIJfEkk09zCsz6P0XbdiElrVinffZe15J
-jNXLxXrEvyc1BxFR+3lOCbX1J6W8jfEMlC2x9g8L9k6OuLxi1nnnnUPU7Hahh7CZ
-teZZ1PKol6syhMW65Phskd8X58k9vyiHFpT1qk1Oziuy2TLbGeye3b88S8PMESq2
-HvIucP7F8NIu1ZP+HoX12kjQSSCcGKX6RjDQ6Rmf4U0XtmGE5I3qjeNmKvqd1uy2
-4ASS0OoL4n/oRRK1Ss594bxNMEik1q3Bxpc5hZt5a8ifra51Q0yc72wT6br9s4JZ
-W/IMnaKooB1Gpz43xBxBMNSvUkAsmK4EEkMmjIeO1pUS8pBeEEmKJUpcgCoU+t3y
-054cKgRIuaFd9o9y0liQWaYo9o5rc4WsZeARoRAJgOFl9uSvXYbNlFpDov4Xb17G
-AsiKDHbfwXRT0KZ3L8wmqNmNoe6cXLbKicFPdWeKPAKAJ30clTDSl0MdklWTzL4c
-BntjFEtzedgLhg2LpDpmNFAYIt5UW1WimIvIgEBtUGg4XxMiCkLxQDOKaLhCtj65
-Vmf8y0J2MIcm9QtdUY0oWMuo2TKHv9wvfOALez2wo+VKOZWLJhDeHG10S8vkE/iO
-RPx+d2fqpBJv674SiQIzBBIBCAAdFiEEb8r2UyU6wvspl+1+HBJgNLxbm9oFAlp5
-pvUACgkQHBJgNLxbm9pn3Q//aPCRYQ+Tg2hIuuzKW1rs6CLupiIfnDjYudJ4WEu4
-1S+rtGapmzkQacwqG16QCZw2c5Z8zkHFdh96uGF2GSzBYINqz18wMx2+FkpOx2V/
-qz2ZTD+8wn1MAolpZgBWRvtOYSQstax0ku0tSu2yuKc+rckvRHPyxKTBYbH356Zz
-+OAye+dWIH5IvRNArXEt+gQcK0aOzW2bXCeLzurNAynBuQ5gDTk0sM3A9YjjOaol
-K1d4602oz5ZFEImKMpYqwVw5CpSjv68oyEYC82AHrdfzkrVDZE9PPssRgWnjIIUM
-O0euTTwcQDTZOu+WTcdeFSRkFbHHQK1/jLKx2PBwkDoudjTv3eBoir8oSslVXVs0
-gzYaDwXDK13QkQueO09F6EYE/8Be87LuREHMW3Epwkcny+msD6siRZ6POjYTf28I
-JOFX1QOn9KXCP41TBSgl3g/9UnQfrFOJe+oejt8R0jPD9tWle9r4mdALSa3p3SxG
-RHpeA5BanlyU2w+ORY0aBG11Jm+ow9c5nxP3c86WjJUyFvZtHWZD4ldxCGKHKH2P
-GwIjyPwNTNUC1Wrb7aXARZEcTM0NIZNChQLrVaF2Fok9Q8U6kvME+zzH9gT10vKa
-fLA7cekPnzxsuhXJjdGAwq+fpnCLdY9RlRdGHVNCI++Jj3wFGvQ3yMivI70+y0r6
-wFeJAl0EEgEKAEcWIQQL4FGyEqUUZAECA1SPOcjvvJeSBgUCWrfeXykaaHR0cHM6
-Ly93d3cubWFyY2h1a292LmNvbS9wZ3AvcG9saWN5LnR4dAAKCRCPOcjvvJeSBo95
-EACb9nbD3ZnN7iz8SJUX+qpZVjX05mMbpgLbnqOPDfKBFCZOCro0sIPxwx4jhazs
-ljVQiMsgW7egLilVKEphLuVZVqOfvECwcVcqj+4QSA6aBkyG9ov6bHIAg3aM7rn+
-24ypwtU9/hE5mU0H4yqpH0OtcHHnE1VpOLTC+dBFy8433L88tbN/FrvHaeniPRZm
-2xA8LKkL9JMX/xJVhC2MPeB10H9MRaVKJSRWOTwqRGTp8ToOa0X1bmDz2n2sRz+4
-nzlLkK2hYn4aBq4jyyvl4d9Q71Dq+Tc7ZJqru8HuIIpX9Z4AevqBPcjwNodDQLi/
-/6cmoYg8G8d9Ds+x0DC685/Tk/E0ltNsxIbleNBgJwWOY7c8yxEXplTAgnEbhATL
-VSROPc2hNEEfXtlHqMK4XeXpGzGnEI5Cqu5SWda/PKcz209uu681pElWeagxqJi0
-B5dPSa5WLqY+PWw8so47n+PyeqZXUsbYj4cjR4O302TOkxt3noHKvsdW+EtXYR7d
-L+LkJvgw8Ymx3zVHMkztDOm2TgE0+nxG9elfdJPbk+dUGM83655DiZVfLQ3JgFE3
-eNvPllXejS67KS+gr5/IAH22psoaabt6bYjsZBUWMX3C7JPykSBDopfRfqtu19kA
-lO+7nlXl1cvsGWxho4GfAq0YnNfPA6cvTqXhhl49DgUuiIkCMwQQAQoAHRYhBIRn
-U8sZITFCxW3JGPXIPAXZzu7uBQJaexouAAoJEPXIPAXZzu7uG3gP/1ouWFmQFsv4
-5N2QlNsD0eNvWkXGckbmoUM+1zeK11sUHHeef3O30NfSuheGYCIBybVTZiMqhpfR
-T95YC/DnWPC7EoV0nTgmoPaCujoPc/wIZR4i6ETxCbw42QnSVRGJ/LhqIE3BpGHg
-7N7TIZjqaw5BdImg96xvOjIAuaLZx7aiS5f+TtOU6xGrPYv+P0QILON6wPt2l/13
-rfGTwRqGTiUN091is3ubMg0gwEHBTkKbHeuM2EMjP6ADVKWIpHsBAMEVpBBnjaHS
-P/+O32haM31cCfO0LPdNlJx4JqQmGcEfkfnKHW/RCQFN3mZWRlL4Fjh7OUj/Chas
-S2DKUfVnXfIWVCuLMYI6dDBn+7VP9e/gHAdYMooOl4a0Uv0ZttdhIWxwXawV+z2I
-EORav3b0tFnZYp8JcLyOjBzSR3TRAcm87AClYNvB72ohEGHHlA5UWbFJj4V3VFYz
-um2tIiXLC2yt0wUFY7OqEsmLzivoPukfqDfc5rRG4Q7t6ynchTf54RSi981oXWbT
-T1NYB2oyEXkJiWPVTa0byi8Cqaqq1/J3hLwXQPMF5wWJCv4rPqVBPCty+AA6gNgD
-jTtg90M2McF48FOasR3OSIwEtxoBwKG0U1W5Pi3wp4k2gKYCd8rqjYKDf4FT2u8+
-KrBKRIxp0kPdERTUTT6LA+5JX+u4P7b9iQIzBBABCAAdFiEEqc5hbfuRsUNbluKO
-6nPmGTmIDg4FAlqUCWsACgkQ6nPmGTmIDg4FLxAAlH4WlicspI8QQRn5SzX3ocGZ
-IkF7X1ywNoEmbBvuOJL+MTmHuxxQW485jZUEWJv2EPsrtBqh33N/1l+gTRTMRCzB
-BRtf3ALBihGtUIuuLb811o52dMdxbrYu7saFOCrQgfdQX5tjNEly6xcBFWlbs1he
-Gc+ejWVI3oYMeF6WrM5avDSuP1Iu5imBJi9T7h+Q8tPMVei9Ihee3X4Q28ryBnXs
-qmpHpdcPTODmd4cQnBnU5pdaf20U9x40vDMO8QsFhVQ3Iit/FOzTfHh8T/Scvgd+
-PXNZ4tnY+kBiU2kHjBVQPaK1MN9ProRoAasr3u1yKkCqIzE+/kKxT8bweuEJbb7K
-oitzJwh2t5NPyQ538qT0DVCqhQb0taUrOkZM4pY0/HfR86+58FaIh+tT4p1dO2iP
-zH1OSXrPc8bNse2rNygRT+SmUjXSTveOO3Ni7MMy2cDwIT/xNWWnzj40pEEcwx3g
-/8vZunszbTCOmvzJ7qvFPI0WY8C65BswpuzMl4Ccr61DthOLJuXPq0yOTtkHdKNh
-9LwYyO2FZ6+/wvhFo7VKA1HNRQQbR8qll1mwwJ2EtwjbuH1ZPSkQMDE3w0+nPg0+
-cOKlTu0UdaGj+iWGHK5lx+I0WTfskuQOptqaLsQX8IO4NkQKKd5L5fdHZ6MENIaK
-3D/COtygfKGPj+n0Wx+JAjMEEAEIAB0WIQTHi06qptaDBBBXkT10NYe8mUYnkQUC
-WpQJcAAKCRB0NYe8mUYnkf2MD/4m/TElgPD1dQm0xb4EGB3JVY0KCiiy+oFwonvm
-/upY68NYN56SBed0tJOYmvAPNbziakh22eUHKCU9BElcqVS1j6tGeskzXn8hlKkJ
-NjHxOzhVpQPGjc9azRb13PWsfRakG/NX63Aw8Ey4Gdml8jqOLvyABF4nMOil3s6j
-G51B+QmYsxKtEsEGvSxz3woOXetVIoXgFFk8wHxhf4VoZ8MUxB39LD1aXPnk++pp
-73PbLiOjdsmEZHvGTaRmedniRCQFkg+5ZeqydMjnbn1xSJzA0ZCWqKCjE1w2Uxur
-Vb5CDd/RbZMEzO/9WcVkMGg5XEvechKOzHrrwPCkmcYqAnh04SuBbyryPiqGClN/
-9fLUL+pl4XLpZr52UQfyKSGpoANmNSuVsX4zZI4ZF/ASVCG0LH6zU038glglYYNh
-pbDJDGYfeNUg7P0PJ0IhifL3RorHqx6OvL8qLQdWDh51FN+bd7q6RBg9zc5LznXu
-/4H+f/fjjQVeky6tDTTEwIVfkXaaxJobR4+eyFsSZwxaFh4CxCbQRVvA+cAdVS2b
-zUqRdcw8nP31pGw3frgqJjPi1xsBBOV+c93n0aDlyMkNIxk29hUvtpMOCoy/Pv3o
-Yrr/UzTY2KrLtYWf/3+INaOwEbovTCndho70h24ORJvHPdcCcz4FMcVz49L6XaUb
-ZuytpYkCMwQQAQgAHRYhBHfdobaNBHkqj4XYVSNeXIz16N/7BQJaeGGdAAoJECNe
-XIz16N/70MIQAKyRgVFIpyxVwkUOko8t9UA8X2ho6HZgmIcIsJmb3mRePiLse9cP
-t5PuzDoeyXFQN54jL2WtxVBIruBHpnEASIGYoZTwXM9fohiYLipA0dQb+YlBrNxH
-BfBaZu7mTYlJqQgRF03kOX58zB2O4MREncTCMB0avjiMT2gv9BSM6IfGZYpfV1tV
-uw2wdrqZi4tirM00KpNe/wMoQ0Zpwri3YFNMWpFwtIfqWhQCVQ22FF5l3DZqCHpZ
-DrGu4XSWoVwlNwkcNskb/QSYkc3u6qeVv0KkLI+LVww3s9av5M8hl45bsDjrnMgq
-J+7o13C6AbOZ1xsHMZyZworaUASMuiYv/bj7Ml/To4jq4wijgEXnB3lG9IqvL0AF
-Ju+nFY/RGleTusLO/U9uSDperYBEHY4ougEoncs9/pBMFtBHSAdZqaHJ9ByWH83d
-DucMW9lhUqt/aMt2NgSOzM40EO1t9FREwLfR+a+eN5k3UIKHWpMTQC5FCaateoQY
-EpLs417DTJARp3baFaPWVSHbtAHvL9u+umhIz5V7rS80taV6puYMneGbl3b7ulw5
-EHxxmPMMpvQ6JiW+UVkb9C0yUmpf9wt8QG5SwjTz0Smnk4TtYJQyTCPwpOzEUb7j
-WEgPq7e/WyJfQii5T2IjWyGCyLw/eoXS1PK8aB4Gt+eLoWjkgBiCRSx+iQIzBBMB
-CgAdFiEExN1pX6cTjyQqoVY4WEl+5R1ddKUFAlp8vUUACgkQWEl+5R1ddKV/CQ/7
-Bya4W5CAcL5mcW23UXXniyNS2Y4V+YDKVXvKVqETOrzcncNjFLeFs7iMiyLSyV6/
-hExpdJ6LbgXkK1a4kjB7Bod9bWjr5EbjlsVOxLOaj8BQvRP4oxhr4cQXwdMEOurU
-WXNtv1u8JfV5HCF3/zhP0e6jptf8oaQAYn93w6LT61pd/aOWm0X9DWOOmSqDm9z8
-snhHbTI1LHVidx2/9LzYuluwOd9pwR8XF5osRwIe9B0KmmT3V3HNbaNerc3XkDbK
-AuD/R8NQIzg9cPZR6LNAwLASVUUqD9DZtOM1ebnhaSnwZ/fOxJv31NeCIivVWwAr
-tsjOJnxGq7+0TSKvYD3akexqeJr3B75qjQebhrrJdNEkN54fYmIy7IVAuu5jpqxj
-Bqa1/9Mfg1lNQxmj5oWg5o4QfsV+TItL8vpEvLmzV42MONSikb0T4ZumGI250t36
-ZkDclFHtBxx564kUOIU+8KAh+i2WOYBVKA2R60Vo1M0HmeuWBNr80rPRKOW9OFKd
-DqQRoz9vhfGdFNBq+f62ak3DsJArSyp0NkT3Y0Y3AjBK5tOBrtnc7A/xkmdUazEw
-Kn3/MaCrc7e5iJQWbVRFdMpJaf93yQTj6q36WHL36QahkLMqlJ9O0tJfuKGJqv8s
-NLVOxDZ1XWkfMr0OedcLnjyXZ1fUn4edAIkpErfpQ82JAjMEEAEKAB0WIQT7is+n
-jHJgicOK0CaWBaEJjGO5KgUCWncl7gAKCRCWBaEJjGO5KpXmD/wN4YajyIFFaWl2
-Ef43nsAP+/VUnJ0WaQVhPrPmEaG5KnPAindMDMYzhLH4FzFD0ravZTqHi8RC6/f9
-xxQddnRZVR1uqRPLIkUTr6BSq0girP76QCgy+Yo/TtYYbeGqQ/ZrytAWbxfU6RAD
-DCI4bSP344g4/DV8o9Sm4A//Zmc0JDVDdnPy28UgTD2oeiZV0OmJmKDsFJIDQVlD
-yKmlRgc2ivyi9Nj6RBBkxnDgF+Uq+HnCgiso30KxLgBL9NKaU/y67ZRSlyCMearX
-sgUaZoPGpb7ebh5ae9lQBf+2wu9dFzJ0qCfVHZV3Fc2Huds1EIFC6hTVJjnHtZ4K
-iPmaP7EUVwVfAmxjt0JHk8YH9ioYK2jD8g9KqDwYDRAC7wkfnMd58hBtFjsxMic3
-Aqlv/Qfe5qoGGgbMPj1JUwKiwmEXFKVfFzz3m92YC53fwq3zYEsRkrxh2zzbAxPv
-HMCj1G1cJeNtfLkMzGU2uIPem0tpOJG6yC5uXnQsEnjdCr4zIXm0nk5i62drDKDP
-igP4n0JNqOF+OByFpl4/Kz2BRGDsfiWjwuqDLKY80flrQYPhq58YK1WmM31OBM18
-7HE4W5FO8ls3XtZfQhrytrM6n3ogCvO5LaXJ50Q6k6SNx9jFcNgK727LsCs4U8lB
-OCopFDLp5GXXL56g1wAWlBU/7J9dzokCHAQSAQgABgUCWombGgAKCRBEtrTH8Qg6
-p0j/EACJs6PQT9FBuyBjWTydqcaUBUaMIBG3EU0EhgmYdIipJOeRPa8qeoiewqAG
-6ppJ88azk0G+avig6pBsdMTtzcxf7UMEB8h+YKrILuoXpq5cKQKHNcQqrfJJFIIv
-MY/JrE6gON1sWmWqRpjcN8sFKr93S8fRjsGI5X8Nuy5D+9UjCbi1TZXQZCEb8Kwi
-baqJkMcUqwgUeytCxDyGuLgsGuT+IVZdjD4UiT21NQDM39alhk+0WVhu0mWbpnga
-y5oiG+a7lLdAW7YdLcGwJ52h4yUbs2PCAVcFaWU//LCupYMWeiMcQGcjolsSsx3B
-2UICgDJdZwVKZAnxRadtcaYl2Q2jonwihN4ivzPOHjjXHFCA7w+FaQ6HXiiEJ28I
-0DBSUNrkRhAq3D/vkEGF6OxxR5LyIlbJwz5w22iKmKGdVTbrHnJ5rTKEeSwyFxlJ
-OKYPS7t5mJZd2UvMGIK0vjzk8fCi75nqrNziBRxf5k6LgSKCu7Pzd64hfwHuqE0I
-AL+QYiz8AnjZnxWvObQ6TadTyqjyrZyeO7qTRVHVsM0OJhJmqls7P1sLHba1kSFc
-XRX6p0w6jWit1IOmTC6YeyoSNlE6ZMUjVSCOcbp5qMPLjTsz46KpY1pfPHonR32N
-4qsdtce3pxaFTCWVg1yOVeQF50aZ4hmyLm3qHPuhp/2kfnwf/YkCMwQSAQoAHRYh
-BLX670wYMDcV3PoHTVhSuUk+spTgBQJaex61AAoJEFhSuUk+spTg/ckP/3BzIygp
-h4P2Psp/6teN74xMxEkN3JPMf+v4Ie87M4SbnFYBZbQK9JxD2jZ/9vLTYVplzwZ8
-t5J+O3QlDzlDX6oZ3L6/AbhgrqiEsfATNAiCh7pUiZ+1am6NePpHWtLVcZ2ocCAH
-4k6ynuRjdWza7aFyAOF+gb5DwwBnAB4Ma9BPT6ZV3kf4U9Hm2uWjw3BQdZsxxfjC
-H91UHSWmrj+suOGP8jn1dTrRp+EH7lTOYoI501h4Mc4t+BDnvz45n8pMoubr4uri
-hv8TqBtG9ElkZu7E6s84k6RdaTpqEf7XzhOan08jP80s+fKPh6uyPwbdrYjn93Bf
-gnDu/s5YPjEh07SwZoIjMUk06rM6Mg+RVF89euEZb1JZyBkP7jb4NfaJYqgcJ5jt
-0kbSXoAeMUWeTbRAmxRR8DA3wssPIc2fTd0d4KGeglupcz27GessF/N8ar01H2IW
-OqIMRKTrHin2SnGZgcD6kJs3dDpr8aUXbVZuri9H2IGIkS/XDpCnNkwUD5WxZQNc
-Njppabu6OeU49n3hFeFAhcixh7+9w0elmT2yvZyHZY8vwxYiEdhiOf/Ts8eHa5WL
-pvTcBI3v9gKd5d08PZchiTj9NA7wj+OPj828acBfpu+KwAkPekr30XAh0xkWxhCE
-0xTWL3pJrm3vaxQqkG31bUT8y4MZS1/zUKphiQIzBBIBCgAdFiEE/8vSnzr+1FOu
-S54yHUD7op6zlhYFAlqMfmUACgkQHUD7op6zlhYS4Q/+NDkPn32xD3Rjh4bo/eay
-7C00RcGq+yE0eotyl4LU9L5f1hUQdArCVQc2I2CZ5lkAUXaZ2rjylW9ia8CZUSta
-nmYCqulD2pygqH2COsArHBfF82orDZMVLXJnq5vnRxWQmeM2kjh0U0WTbL+kj1kf
-R6bP2PhtMieBC9hX2bnX9mxbrB//LrB2o0dLUGa8CVkzcba8vur4cRAleZUf3Avw
-E18oWC+rHrBK4d2APPXkczKgb2nKhJ2k0kDPfFtui/QrY0D88f/4NM8BgIMO5ptL
-0kbiChzMTnkJIe0xGri22ZXfxGO8tFmb62ksBQnVTONbLQBJQU3Mk2x9C5pR0C7H
-m/QFXEokMvTBTWdNG2J2DWC6mt+mEuhLdnxyOWA7eXzCoTCyz0bM9yXpuyMVdqqx
-7ziFNn2dyhA0h5C7j4r4Ssgt895g34dZ0M3KliXpsocCToXCj7q9jYPwyv+RdJIK
-8oSdtO282VTmiXsU/dl1vsbfpcZ5S/AosphR9C5KPB4x4v6STjWMtPr70MSsFn5t
-b46R3eFZJ4DJzKhECr5qICChU8aO04SiRQYZPIS+sWcnBUeXkE20e4JlUiGW/gEz
-LCMlBdfVwRsaQqDhe4VUnwsXVqmCClbvlA3Tl6OKmTmgqkT5sJadUoP4eA1GZnA3
-EblgAMsoSGKlXcfu6agrnKWJAjMEEwEIAB0WIQRMC0kHCxQDWg4PhRWNnnvyfLwq
-oQUCWnsQqAAKCRCNnnvyfLwqoQuhEACi3y4jhAisXv2Hpqov3KwYt5UNNH1EK1ye
-D9NioHLjY1fDDI189Z+6B4IgCsmfHqBp0IKlGGwiR/E0iA2sHFjaAaQ26hzPqsOY
-8MyNEjtuOiRDjApG0tDtaOYKK2vYQ/rRWQP5ZTb5e+98d9nJz7EbFq6j5OO/zb4J
-vcb0430wpPrTiztxwVZiNAiwIv/zSn+5GswfazgMK8eb2rJIQnw9PzxuZavOVbtC
-yLMZkEr7kxMagdkTsyLMwFGyA/KLNf+sEfFy4gXMSaB7X/Gm55wI9hYngcavF/7+
-YT5oI0gJ0H7qoB0sU+HQEZ+DSZ3TcyHhgRZ8VlhbqAVnu2JKPWeubdEdSb6vAk2e
-cd0Muyzb6Lo8bPFd9wzpOkum3heYaPNyy9x0HZmvhSrb/YcoUupuWkBHxbxjdvnc
-9B+bIGfMwfPZ5nOqZsRiDe/SP+TxqVMG2vSnGodVvDB61GPpPQV0e31awJrnl6wh
-CY7vIT7iOzC7fIjxn+x/sNcZQ8a+bIzAhshvylQt8xkavHCKyDDdEG82iyPbbDqd
-RRGb/bhkfyoYEYGQU8NnoDNLCQml6p/WIifWcLArHD8ENenoVxFjzWEEuRu+ytaD
-RU2UKLebsfAXgDxeaQoQmLShUFgt+MEORZ4qYH5aWDg+YGb2L8ttC2Ppovr0K7nP
-nNlLqzWkF4kCeQQSAQoAYxYhBGcx3cKDV77DjjQqr78zQhP1xcoDBQJbKXGpRRpo
+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
-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
+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
-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
+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
-qedPpLAFAmDujsEFCRcVp9cACgkQx0bPqedPpLABtRAAjMOPaGMy48RUPm4zamSY
-ysvy/nDfdpKYlal8DTIQERFQi3anjjSTOY33msBTdYHPHQ/3J3eISvxOXcSiK75f
-Mup1zh00Ph89Nb4I7VWyK7WJrKwanoCyAUZ1JPk+nG99gqyy5J2SGHn3EFpieAgp
-g2IvHIv1pHZ5gM4Wg5ysWGNRXecBxyerhxGoicGXUKZ+P0ThmvHWrtxUdgnCuqUt
-dyBuLQo0YJXSm7uxItRirxUU+1LnS0LNb8O1a6d6lUsWzJUZofmuw5m5DjcpJR98
-9yb+VE2h0X99hsPoWgiRIb30ZCl7QYeZzBgnNMMquhXa7/cYGypTabxf9Wp/ennY
-hrjC8+vjenbMyobtNDTsDppuiijJvv8XpAKCWT0EgXwYDVsTYl0Feva24avRxHuq
-LK7Z2dxlJUbVZuPFoXxcjAbDjiWi8Zxz4Vo/B+gE7/chrV1yLhMbWpdxmuGn4WLp
-+gnkJ+w4b5hnHIrftUDxegx48dcY4Nsd0/R9omyeygsD8NEwiIoxuESDKGWib8DH
-ngaqSXCubv28o+YVKD4HIT/IPdgNlm94rtnsLEb4RnvdWR1cqXRADVcuv0FgRgCJ
-rQh9ERC0lFiljy6996BLzAiMUFtYnmfIXKGLQ79cAfF8c/3H61A/I5yH3/vLvka0
-x7/aLsFfl98f0LHbTpiF7ceJAlQEEwEKAD4CGwMCHgECF4AFCwkIBwMFFQoJCAsF
+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
-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
-9ENKRU/BpdWTI7SR5KwZCGmODCnV+1baqnmZh4hrQSQHp0o+Zn1ZgpbBY7N/0iwK
-owcrQ1lNVrYPZZy/R2tPnT076QcRthSixBTUv8ZnXC274bFSMOC0BQv5rP4v16c8
-dRUCYEj5hZFLJJUIP2d+QkZpvk6Pl/Lb3edflqYURnWRtlPBV/bksMOQvFBuPvi5
-I7iryLfuqmWNSxTiUMaDtPfArFzUGusTFjlCJf4DBlkUABxCFckzmpx7oLoWj7qO
-7I7805mNr9T066ZpvCmnMxZdcKHMn6UsoMzXHCIoAm3nkeE1sQljU94e55sR3agN
-liiHytOYN4tt5mDnXd/QzHNWEUzX1Jq7xiOqGJCDt3J6ooojU5hpbcK+7tQYvZ2v
-wrpHAHyNOCrbPVPgdkPYP5Tsrxp532An+SwKCldl9wJ7+VkHIR340zlXsfFZMxXO
-lYAKqR7Y0hRe0qA87CbzZiUkMv72ZHkN0aSCnVPfB7DgHikmaOUo0q2RX/BEVVFb
-ATFKmGPKuRDCYFkS+hIjzFx/AaWyhnW/H5+JtKouijSYZQE7DZppH0yvAuc9dd+1
-J6O5tYiUBBMWCgA8FiEEbDRY7nN84iwO+fo76I/rviAs5ZkFAlp5h4keGmh0dHA6
-Ly93d3cuZ290aGdvb3NlLm5ldC9wZ3AvAAoJEOiP674gLOWZc9sBAIoeIG6ZuVao
-mgZg6R5mTX7zXyy0fszEV0Wr51vj21p7AQDP7TpuMQ08PWm0Ox/CVZxDHD80w1IV
-2j9tiM7nH/F8AIh7BBMRCgA8FiEEATjaku3/sn3ScPhttHXiB7q1gikFAlp5h6Ie
-Gmh0dHA6Ly93d3cuZ290aGdvb3NlLm5ldC9wZ3AvAAoJELR14ge6tYIp1v0AoIyX
-61t59U7gpDOeYVwxnbVLffvFAJdzzPmJIl8MbX/kGWNm4Jl5z7QuiHwEExEKADwW
-IQRT/FqHJ74dMP60hhqUj9ag4Q9QLgUCWnmHuh4aaHR0cDovL3d3dy5nb3RoZ29v
-c2UubmV0L3BncC8ACgkQlI/WoOEPUC5ESwCg0TsJHYexF/qmR1lZS2WsxtdIlasA
-niacIOGkIUAyduU0V4N0MdXyEsZziQJSBBMBCgA8FiEEaeHuB/emqo5Kd3sqegaF
-Qh6JkEIFAlp5h9ceGmh0dHA6Ly93d3cuZ290aGdvb3NlLm5ldC9wZ3AvAAoJEHoG
-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
+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
+uyPG5wWi2+H4yUmMUlTaWkY3T/nky1swFL8vcqDpNWL+sr8+1S2NHTuLniJwp/t+
+fag6/3u9tHAhywzVm/q8nz0THKb2ZFyEOTHEG6ekklwWYi1/7OxlXs6bdLedqWc8
+euE+qTAqKM2ZvUJrm8hx0JjZSO0ct3x6GP5iYJVW9y8r7wyZzx6o+oo7UC3VZB5o
+bE39hcA6BXpqiw2wvUYLUOxJwfPBo0T0hK2DWFgIQwmQK/dMri38fMNJYvfeUzcA
+65VCaZCNFyZqjDPEeHOsAs8xpb9MESveJ3Wxj9QUB4rNrFDwmhBRJx3txBCi5jVD
+WbJsVErPpYPv33IDttxVLFs8pEnM1WEHv2/VUW8t/AcizlS9XvdF3sEHSggOap/q
+18rZHZk6JeK3nxgZfJJwDmUBX3f3ILPgG0XcF2BqiLAEWJuLU7bvhxJnYADcqx5F
+cXFDcsjBOi4yo8RznXiwCW8k1sRCijxk141uDNFrgqEtXNvZj2ao9iHDgsS180i8
+aQIPb23XG+hzYAgGTqay14tbHcQldpqJAnkEEgEKAGMWIQRnMd3Cg1e+w440Kq+/
+M0IT9cXKAwUCWy4IYEUaaHR0cHM6Ly93d3cuYWxlc3NhbmRyb21lbnRpLml0L2Rv
+d25sb2Fkcy9rZXktc2lnbmluZy1wb2xpY3ktdjEuMC50eHQACgkQvzNCE/XFygP/
+vQ/+PZZzi311HWR5H1wWUBLeZPex21YELCWktL0W+F3vZT5iErgTHBHFYK8/LU6d
+SB2pv6B6ZmgM1YrytfBBx/LKDBSUKeBL7WwUHwB70qQQB7NIYC5azbiCI5h9KuHL
+r7lvhZgkRfxMRdYdSbRbpF22Ik87XDSunwbxTN4DAW2QXOfXjv9PDeihqlZtGg5u
+Zcxf90IoQ3lFljdF3PybaGO7AxjJTOxRatTBfuoM0l6nQ+vYamLbh2P5IaZrwpgd
+Louv/CnJXNYdcHoIOtwBOXdymU3ZM2879oVfjpI9bSuVKLdLZn8GxqsYQdGBSUJT
+0b7CjuJDd053vAE/as25wZW7emBSHjnFGFvhSKYa7NG6YPD5JnFQF/6geeIeGsVn
+QCU1ytMJ3dluO1fFGkxppvjglqVkFc692/vENrQ00H1IO2oGnS3EuEsDbmWma6KY
+e+Fl5B8Gt27EEwB7y0qYyVhlDlpIuO2i7JJBKXTjitmc2rtFVzOeQA/05YSOw9mB
+jchuV4XYdjwuOaA2wUbHVyhrRXnS0IvyL0wJ9VGrq6rnRk3I0RQchG5i+K1/cIo9
+HCNgfmHo5n5kUXgQzC01Qz0fh39PJu6u5ARBysGwUl/uMAK3p9u4WDSmR3Sa77uL
+4/CknTMk4WRNBO2uSy+LPUb/IbSMcOjIwMTaCSki5gdJaE+JAlQEEwEKAD4CGwMF
+CwkIBwMFFQoJCAsFFgIDAQACHgECF4AWIQT2gs3MOdwP6uEWILbHRs+p50+ksAUC
+W4lqEwUJE4cqpQAKCRDHRs+p50+ksC+AEACT1ihpJ7oRq3NEtXcWuGrqesdxVSjH
+9tl3OgR2rv/xzSELq4dV2wtfLdWQJ/mRYU97qUkBIvWJlyrqytIXu9uPTV9bGX3C
+J6JliUBq50PknVTIrETe2mFYxEmqVxXmT5eszAdWLeARVl9YBEXD2gz/u+/vQRcJ
+IXr6JFtmbgfFXPUSFmE8P9TYS7japc/wrbErjBujF08QaItK6GcVeRwo448UmDSp
+6hcJg8tW31J7GD7N97gkC/NX3n74ZIXt37S1aUQRhKR9TUmQDPO5m7+DSPvQ/KGJ
+/61CUBWHw/OzOKMFV25fVTfVj4+q6aWk8b6gTnFyUQWV8hjB9Qz0GXSKkMlV1Zdy
+Z2ISsxurmu321wWP7OJMR3Tss2MEG9HP76X+w/O889fUDRxLQllqcfHIPPqsDiAQ
+EjaX32w6bOvNLVXbwt0qS1lKcghbGMI/e8FmdTqh+TEMOOFaBwt8+F5eCaW730AN
+HwNsDkneN6pNYAh5C/kfpCnPN7DfTG1phVzYIQQq7RZGUTNIlEyJbl/tQOHIoxyR
++/MI5i7qAc0YO0eFqz7mqbuX/l8k57uPddescYETP11X2XBQdiiQ+uwaBqVuIE1L
+mQaN59Vc6NQqr8bEkVPcx54HBh8/43T069b2PCcogPnDwJ1nFygUQGZTpm2NPxLn
+PjvzAbUMHvocNYkCVAQTAQoAPgIbAwULCQgHAwUVCgkICwUWAgMBAAIeAQIXgBYh
+BPaCzcw53A/q4RYgtsdGz6nnT6SwBQJg7o7BBQkXFafXAAoJEMdGz6nnT6SwcZ4P
+/1VE9+LM/70yh+D3LIfcQBrGzvA5DE+ymen2GyLO4jAqJVoVje8UUKslzAZ4CvUq
+4sQN3o/It+WTTJL1n5I6KjVb5frCFZRNwWmbZk5BRdH0yTD0wRKVpRBfQ2itZb/E
+bf4APs1h1jVnUmXl8oYyh6jYeVBd84a954F0re/mQXwKQ7wnNxsdamyoG6RyDyd9
+NckPfcMuGeWYQ+TgXcNGW33qxhY5L9QgT0yW41Z1ho9vWAxSunkOrGrbgqHtHfgx
+YI87C8I2i5XK0tUzM3QbPES6h5yX3uGkPRVFA24OCfwtAKa9z/GLcezOW4FraVqc
+RrT+c2TzZ+NUwPgohupCx0huzjOw0lX7SWqtBXkqve6Fkl1yD/MV2WxaX/z7I8n6
+vB/tur6WZHHThU7mpmk6LALoEunmFU/UluCqpAK3lHJwYoDsHsHm07dW0OEjU8Fk
+cc4C4Jz+xKMV0GgEcSn8tblb2lWr5NsJR2k5pO4eYxWHnrf1YoRIl4KTfYhZzZiM
+nL2RLafyy6iBsD5SXsOfzQj5Kkfin2rKlZc47o0QGtpeljclznYuGg3plMPah54c
+uMcVT45aC3YEiR2Bruw+Qocl3asWsTU0ZbNiexmIrmOlxgmo49z43NeuSVywG5JT
+rAQ4p5OMOD4WMGStMvJWc7DkRhYrhb61c1Rv6co7GXY0iQJUBBMBCgA+AhsDBQsJ
+CAcDBRUKCQgLBRYCAwEAAh4BAheAFiEE9oLNzDncD+rhFiC2x0bPqedPpLAFAmFs
+1xUFCRj20QEACgkQx0bPqedPpLAcZw/+KQOZWub3bacm0ht1GCPwwMrzvW/Q55nx
+qdaweMMrf2ucZ95kzTrkfqKDSbLSNp25MDyU/FWhKYTsXaUWptIq+Jench2VLSFI
+23i83h8HFH+yAr1E/+wXl/l6y1teznVUFWmZDqVCYAcQzaUD+E8a2FA7tHSQTYKQ
+v0irgZ4oIC1I3KHd+QYhl/HC14hcYmAOJYp3F0cM6/IFabbBJx7/HyLMSRimmVKG
+gdLAPc4p+7sTpOobNhUn5js7Mb6v11Dv3JTkcJ2FhzPfq/epFuaY94S87DHK9v3M
+4b/MKjo9PglH+2iIggv7h5dv36yI6ruT4NzntgB3oDTYRsWPoVVasyg58vme8dnm
+v4MB6OQS2BkWFq8FqcVoNvgcmkQRiRx3bRbjg0kTRmxXeqnJSEnRwSAdzpXBVLWQ
+RcvhXKqZdm8AiqSE8j9ac/86T52lhW0gwIWItI4wDsVfLTutmaqFmZS2/OS51dKx
+Y500prQj5Mu351kOjokvaOEAYrf6o8CtvmHufX24J0fWWr9mUQbo2jV2jQFiUokJ
+2Tw4o2ii7uOVqll5WM96PxT3eDassaVj0ME30Z4OaMP72TkW6F3sfL+s/WDfTJJX
+vH78U6196mRCl8crZVcNlBGXuXAqz73IqwTO0ZxKjasJLlw3AhmQ21vigKyA4Qul
+wcE5xuwWl2CJAlQEEwEKAD4CGwMFCwkIBwMFFQoJCAsFFgIDAQACHgECF4AWIQT2
+gs3MOdwP6uEWILbHRs+p50+ksAUCZLt5twUJHLk6TQAKCRDHRs+p50+ksL1jD/4s
+WaOjgEdpi0rj/Z+cADAlbw3MHdIVdMnAb3IGi2VZ72NqJrrIXpv1ZhX2Q+ZGlO8l
+/9ZngJtaFjp8LzyDBuCkDBTNI8CMa2xn8U72AS6M0GhIzIJ/DKLb6boiLl2fmock
+zpwSW3MJnHHGEVmbLgZHdPoo6XOgnZkTLTwvSyE/5jrJHwkLPCxV5l4MeFAr4nBY
+s5s4UQFglX70LIdtwlM/hEPL6dOBdfa9Rh4D9xc0Q0SmDIsq+rCStq0/pCZAu9po
+3rFEugkDvu/5dB2tiytC71PvUQbgUHqDbYYlPb2YGgU+PeEIzfrHbfSc7Ax4d5B1
+EqyxWksYGYm8PcII5OeGTstL5BvlElSTvojYF2/RQjx1GLgd71HjcZoBKZSLybOX
+V6DpxpmoNV1NwMv+kGrMkTJy8flcvJzKbn6BiOa4t12gI4bNDGlPsB7ilEDEbsN6
+s1p32CwrOmvBWz04H+JvckUUdDI7XQ8AJ1WvJ4TATAm318pc/3ivMuJJsHvjh6zr
+/udB+WTV2CWpW5d9xByH9pKRD1UHVHB4eCoKA0hoGvOnyonPHMl2CNSxjIbKuAYc
+uPD2BEkq5CJCTO9YCzc3uQeLd3QaPpBhrFNs896BvY2nUp0YzL6OUlrbx3j04iza
+SJjREskj08YVzouMYCGnyp/sUTauH5USA7nTxWogBrQmQXNoaXNoIFNIVUtMQSA8
+d2FoamF2YUBnb29nbGVtYWlsLmNvbT6JAlQEEwEKAD4CGwMCHgECF4AFCwkIBwMF
+FQoJCAsFFgIDAQAWIQT2gs3MOdwP6uEWILbHRs+p50+ksAUCXxfPLwUJFTRcQQAK
+CRDHRs+p50+ksGraD/0ZvUiRBzekoLa+z8+bRdOnnYLnDwBjEDTiKhK2CJsDtWqC
+VWdQGCNpMr9oDGNQZ12QmzPDDMx9qZ+z7mrTeUBHmdHAYnWceyAgygvBr/dmIgO8
+zY3/F9VQVEPFJ/HRNh+ySkdH2dur7mjlqdh/X1d5vX+oV9cKAm3IgqYnwCWjwIuT
+KrWcmar4Z1lP2bOgbk4x0aHKZadoB690dZG3EW0NHG12S5bzSIYMBuLUIegB3Q4l
+nOi0IvikGbzZguVckA5S2dkAvK+4jdeIOwTPQ4FbnizgoTq4bD8+vYmNOlis5HF/
+RlZk7/Q9IGR94pFlxfAWv3ol96NhdO5oBI06dt4VBvNu7ZdMrLIG+ookjHiEI0CY
+v0cg77AKQRU+4zgORPR8CUSPMJEqzaO6Zk0WI+OeHuLJRrpnqizo+UajnnBtiA3e
+AYJUer0BLEWxFkx3lcpV+0NtP/DMfIpNksYOsYwVijzK6wfiSiw9HfujvDlLGvUO
+N9PqdPcWhMVD+QmtmgsgX8/ppjakydwnGmr2Dm0roJfBOK/hLORivnhMcDBN6bpn
+dkjBK/m6lhyBzMihGs1SixLwsTurmTonYFpDaLrDRW26YaLBe2MFeiexY/CRLB1Y
+FxDgo1cKdUp78mocxjYBFifQEn/QprufZDMAYPgrPE0Wy9OtZpbml+JQKVQgNIkC
+NwQTAQoAIQUCS8a+CgIbAwULCQgHAwUVCgkICwUWAgMBAAIeAQIXgAAKCRDHRs+p
+50+ksFd/D/0VZPwCJ6HwRroiMkHNUKE8vrJ4QlnFL7J3i1pzCBTpEJ9NlPy7OeQg
+P97ATEcc65rmaqvbqraeu/pfW9iwSWV8P6hQFIoxUEt+5fWNxhemeDEtnUgHz1zR
+YW3sntTv2S2s6Q9meoK2wtx3BlTJsyGMX/kfWNK4WU8Ted1EJu4RvYbIXoAfRVfE
+3epsb+OpxeN91fYiOMht1tXoAuyYXGUH2x5Rx/rnPwuUArKvpaX1Hnuy/xMfxRwY
+qyFnE7/0SmUyudHQPHzu2tvSfny6cu+594XNZwSIBZhwal/fq4dJvqnfegLjaRrj
+HKpcqWsoNVngUtLOpirgJoPwz15pT4i9FFT8M1NpN3tY4LigXpv+zl/p0m57m9Qc
+0OC29LPwiMdMDtxBVzTHnmi1DLqU002v0iMbSM9ysnLtp6m9r0q65bTn4Uzfm8Gs
+k7GybluFm1Zy7yZ7KDautAE3chu8wgDMpmgSyKLhiQsu6swFThGAua5E28AiidCk
+hRIE2X9qHhfoAEtwGatr2axfqvzq7Ibj4EoEZ4Z1hpe5AveQWqdLK4lNro5ENYK0
+WZbu+h2Q5/88KX4mK3l4QZ/n1ytfMElk6maFfFDVU+M7SsyEIVfWfyE/8hDY7+zl
+MAe6c52+9+wdhlV0RbYPRP5Hd6/sWRpPRfQtlbuvfdHx7ZWfgoa+24hKBBARCgAK
+BQJLxr79AwUCeAAKCRAfL4QQdi5edE+VAKCxjKL5970QynsBVbb+sfqCjW/CMwCg
+n1yEX6QSkfpxWp/mgwQ1nIFgQs+JASIEEAECAAwFAkvGzu0FAwASdQAACgkQlxC4
+m8pXrXyH8wf/YjCXkphieYGaXeYDDNZf6BSdJ3NbpV4MoUd2IoPZNqxEwcmnlF77
+9Ua6ckV071YTahJK0wrPNBRkmQ7JyKjUbSOdIgCZd6SbDmlB238S7HCVPAxPdKJk
+k3H2bMwQPtPc7wft44kcse+BsVT3WpowaeJDLMRK9MVpCdKrXW0/d+Ji8sWGJitK
+Y1oP+6jLE9ydX+/dv2OSe3MyULfIhH9Xke2lnazSAPD/CsfPH1u7pX2GgTu61Iyl
+1rkh64GAvCfMmb989eCr4PlpFFLV0ajpB3blFMYHUMAf0ItzHfa6tNcs04A1tQ5f
+CS/GAKdL2E76DjuwFvXODzkqLjegrTSKxIkBIgQQAQIADAUCS8bQcgUDABJ1AAAK
+CRCXELibyletfIYqCACTPyViT7MDLLfmWl1Lu+ykiRK3fqp8joN8v6Cm3cViyF6c
+zB/aPoHFsQXFkqCn+8EOC7DYIGypxOaFQ0L6mjNoSDWYxMdqjpL75FtGFT2WadCM
+pSfTPdnZNMM/2bO2ZFy9RWbt8rYmAUB4VVSMegSMQBR5kZapw/LMVCUR3RovVNCP
+/fu+23LHr8F/HSK53Rk3VeEeVyr0qfIsc4GhOKxq0v6xAYnSW8UzRwKKj+2Ot1uf
+ZTokcMDUqeBog1JE0Y8AlTQKJ1wYvD5Lv1tu4qsK/Fd4IZK9akehIaZW3hLHzOOF
+ZqIXtTT5E3JhKuz7sa7mULURYfYcPNsY3F8XdOXGiQEiBBABAgAMBQJL2IW6BQMA
+EnUAAAoJEJcQuJvKV618d6oH/1++rrNzrRSE+/zjrlT+/Q7bpTwG7/YUxkTDMUug
+z4DCFus/N64r8WNKm/UL4Gp4oyRvoq2h7HQ6xA916wtqP1srhAGO94BQNYNaycXH
+0694k13O0+15aMrlmPPwq2FDt6VrElFrL4N9abhtxLp8Skviw7I5qPQqevvrWcGN
+rlLFz5bMM9d7LPCSPnzmGNO6LAK0VfwD4jbsLSexWkqi54GkZBr0ddQ4aRCYaigP
+qs+fXL3TkDKkcapKHBowA0VzqoqWL106TbsjQjMqwV2Rc0tC1tRCsmJmk2WmOA7E
+eUI8zvqhPzlS1Xj+tIHbyG36jDAmLGmEbLIbB4Hosfxj3RKJASIEEAECAAwFAkvp
+qz8FAwASdQAACgkQlxC4m8pXrXyajggAxnJNDPO4yb0ylyZ7pudxhbypNe2KrZaL
+Sl/XBEte7d3TUED8PwWJ5Ywm2xXuFdFKGEsVa9voAjfVg+tnMrRq+eSVVdUKsCqh
+vD4FSNZxEPcPeeaCUXQ/J9Nh/ctB8gOgUBSD0XJo/hG3aSAlDowk+eGEzvzOLtpg
+/SLkQY8vMsGcscU5DhcGJxoZweoUSQDX8H56qIniCjnwCfqzvzwnI9jJ5ekapzZd
+KSPRjLgHSRA7anuxAkCCq6Cp1GLlCZWuIYYdSo9Fv0crIWf2K9Vxlt2PWW2lpPp7
+4yBRT3HIvlRVQD1SaxEEfrgDpS6aP3OTy9WhfjF1Su6SUYiL4WVThokBIgQQAQIA
+DAUCS/t10AUDABJ1AAAKCRCXELibyletfEljCAC6usnGrLvRrVIrdBaqmSL6L3e9
+72QaPzq0IDtHHUJq1pZB6yD5vd96pTQHzbTN1xym0Knrx/WnpiykogMYxhpm43I1
+AG7bK39kyl5e/oR+vXr+szA1DIn0YlDfqLsIelTLoa7hGPKRp7KAlDzvlLUaytRB
+139hFvsCSh17vlrYe4yU6jY13AhCnXQwkWhtObZYeiQKcpYKF4zkeHB1ExvLQXAA
+OizWggL/dGMMj2ujQnoOkroMOdNqMWaDSq+yQ/YHGkOWFE6HZExQlw0gPa7tzElM
+GHqXu4DUIKx+4nXBgQI6JIE4ZN1CIr8QOAs1JLI/yMdLK7SWKWJLa3hU7QtgiQEi
+BBABAgAMBQJMDJmHBQMAEnUAAAoJEJcQuJvKV618hggIALFIUkjsH1LLNTffGJj0
+BOTwbTCcVKDgtZVod8iR8X6fvuwuMod2rb0iCpth3g8BmmOGHAWZ9wXngfkpNrgS
+8DE1JtOsxCZBh3XqTHTKFAhiHVTZs05neSk/AGjd3nQvjs5lCLrlz8dEbb7z/kKg
+bpMnxat2mpCvWKPO39V3TxvivUa5qKsiAcTnDc8tsTMfvnKdQKFTqYNhtLS6VfS7
+kw3D7rRIQZfRMwpOQRB62aRsp5H5EUY6e080MmUn3bcaUBnYW6U9pWqLkaUPaUg+
+kr7Bb5Fddw9JX2dps8WwPTxB2YxsDZ2MeIFUYy3SAbnKf/iI0XG6Zaa3ZIht5+w8
+vjSIRgQQEQIABgUCTDwGhAAKCRA1PcpWtLvzx9IHAJ4vvxIC2v9CaXroPBeXAOQk
+S8+JeQCfa0JNg1Y+Hf4G5o2D9aJ0aDb4F3mJASIEEAECAAwFAkwdvg4FAwASdQAA
+CgkQlxC4m8pXrXynMAgAtIHSEvXIByZ0irDhShq8Wlz2xcILAGu00fOZeBq7+1Oa
+Q2blTCf9UvUUPSzSlrnvjkdieMAr8wm/6eH9xJJaDBNJVh8tH4wFHoFxgL9A93+i
+sTIeA8jVKN4qO433SBYFzSvyBmLDjZnyDK6ddZ4yVXl6KdKQiCX8Gi9ouhz5Giba
+yQIXtGNa+/H8gsKpIFZpxt8Wg6hbQkP0wXmsZQ7Lf602wyhvhSq6hhPTJBjw3mRF
+MPvJzhA5dy2NGa+y5MUBIE63lccjRInQQJziiDtCvTqnYFRUgSL6MgVfBKTzkdty
+4FPRSe6zUb5ksMy44dhZ5+fzivuzcYezRzCRjGxvZIkBIgQQAQIADAUCTC7hrQUD
+ABJ1AAAKCRCXELibyletfGPQB/4g9kdb6AjAeDoHT8LIlWIrbinBNAY1dSMLPCp7
+g1xfdYZFQ1ZpLjPdmD+zCNitWGnAJxez0gri6lZ0IiBH3PArogmO+qnyshOZttCD
+HLo8amnX8Z03yN/+xAgezjjkAHQttPbpGFPOzSt6YWRpsLVSSxjRjRMxSgHMcK4L
+RERv/3pr0Lg4Rmwn64OG4fWv4tC/a2XaLa08mAZdp+C2Szdj7lE365/1sHtNoegx
+HKksa0yd6us+X8jqV5qRpJt9EWy8lmrvN5b/ymgIsDtm3XSPcV5oBg1l9NGfioJt
+IhdMdTe3NG/aATlpkKFOsXTt2yAbOLu92qDrOcKtkkObsvtSiQEiBBABAgAMBQJM
+QK4IBQMAEnUAAAoJEJcQuJvKV6186W0H/0Kg/oOz/u75KL9LfbW2SPozD3vPX5q/
+TmGJl1Sn3LVpoawKxJK/E0i3PHce+waCYxb2A+HYSl9D+lDlrj/QYThSdGvhxUOg
+0yo0X8RmqLyFYTSTcnGX2nQ4XEYXGggnvNmVNu8wo/NsLUuPThDcd3DlxzCvaJ0X
+9fJn9UiaNk55pzTFP/iTP/7DA3F2DlAKaTYmM1xL+VohKKPF8nl21BSJSUFrQbTh
+UZ7iofBvP3fYqTMuT2BC7/43E0GcmBn/HXPPx09iS3zVlNNEWUN9xaX7gnE+p7Ko
+I6SI9y7mVY1pZkyVd3LdU5cFoLXdqlG+6VysUCWRcQB2O6hM2VWY50iIRgQQEQIA
+BgUCTK0PCQAKCRCwKi5plrGW/klMAKCBh7Bmr8/TF5CzuWz/+vqHp5aOowCgrvCL
+WMbHAVyEfl/WbSMU/OPeXlaJASIEEAECAAwFAkxR0ZEFAwASdQAACgkQlxC4m8pX
+rXz6sAf+N1iMOwm+dDScsDbzw3EQkzqql70IxhpjpbVmOqrgfkUwDY4irfvA1b7P
+welqTZ8tLVAG1Ad7cm3jgxks48HUzh/NzzqJ1wvNNjm/D0VP+PNGEf+DrQ4NZGmU
+M2NQnx/5UcRcCDi33+koHU09JLjrvGS8JLCQKEpU9q814WAOgPThVbnN6wD1tek4
+K+ZEzAPgNrqXdMhxqk0F7J3dDVD7NZWO7+LoVs+aD1+ZaWDS6ud26qFkhhmKR66n
+U3FelhurhusHqzKvS0fw55TJyDonFVtqeOP1NH0sBr7d5Ggp73xpq5OJVKNjVnvq
+2j0SOLrVqtwCQJrCkWvwWJRY6bpCe4kBIgQQAQIADAUCTF++RAUDABJ1AAAKCRCX
+ELibyletfFw0B/41GlRNUXL7v3wQyoDs6FwnpbpQcH0NktrErsNk7jEtCQ64Hdb4
+FpooLA0sZHAZgGFZJ+yqYq8U4dGqJrO1GYOpuQPtwmelBryP7gABm402cYYj5aXG
+JCAVjnGKyPZHDIkHPvZi75nF0v++cey6V/2nntFGBFc+gyWnUl6tTZLuMm2eZxIm
+9TKThzIzvqXgQnRs7OFwXbFayjta2ejqFX55U2ao3+8G9d5UgfxhfuJuFmGLn7y8
+eYi0OJachyxIAVFtC/uulw2aqV+pr3LyyqxU/ymixKGDBZRmVThDeQK/rr9k0owI
+MAmWLufgPv4SeE7aFskCxD/HsT1MMryqrf5qiQEiBBABAgAMBQJMcXYvBQMAEnUA
+AAoJEJcQuJvKV6180g8IAKF2uvTfQexwrxdnG0liELla7SnHbc+Qj8JdtkFbA7b3
+bv1zvnZyoZdvXmkjILK3yBA9IINVUZNkg/43Wrv2cZ9YaEyne9BoojC+Skvoo8J7
+wA34VHkzSsAK3KiU51XE9L61tok2Dbu5nfx+bNriNdfoerUfQ0cw+DyH0Vd+4ZVB
+bSODj7HZEuuKfB0nqCq0nw49CBVdpYYsWQCG9HgkAmwyhE/hyh35walUOMqi0eTO
+fk0XFK3EmjaspnknXANGvtNUDXQWAuPfPLRzZZThItHngoz4Ov89YOt+RTiK/uUR
+vsU+gHHHx2F0V/98LJejTqQh2zQGzGZRwN2LDFtueyiJASIEEAECAAwFAkxzg6QF
+AwASdQAACgkQlxC4m8pXrXy9MAf/eRK2b+tjdUS4W+V4uBRM09+cI3dx6UbRnkSB
+IiYeMu6f6peBJ7hF76zc4pA9fNs2Lcl9G/7VaNNdEkKWwsYDbK6NLy1RETjLcAiR
+zxb+Hq1aB5z3dt2JI4uE8FhNr2f8n8DtedGuQKSbIh7n838alrNV7YszFzd7EtFB
+22BRhBo1rX0k/2HAFo/ZWLPrjoAAqDItrZt5J5S+1odM37H1q3PI3FIUpLerAhiW
+gsLlLNLg1E0rp0l+ZFFNUwgM7YzEAzqyAeZr+2n6wJghHB4KA77Zi4oKuPan/pZo
+3DT0eH5wPHGW6/v9rEWnZBwB3fQfKSB3fHjVPvZ7M4wP11OzUokBIgQQAQIADAUC
+TIU8WgUDABJ1AAAKCRCXELibyletfMDoCADCy2MtyboQa1Bb4/kawdh72wawBav5
+MDIaMyOYPWxuJ5Dh8Hom1s4lkKubrg2Qgaq7lAsSstejVzIRIY1NJ2wBpXuUs6M/
+RkJb/c4YRnG6wBwlckX6hXvLOIL43Mr0POq4omiCEhYVoX7bwDH5oVXgXjn/qu6i
+vrKEsqpHC3vszCg5igk+CVyGBj4BSzG0zatSUsbgF1iq5ju2ZIvXSU48GlZvQHMr
+y5ex8i+ZJf7Oh83jC5HyZMgWpngHlP3z7mff3wgnDvES3ovaKKnCiDTLbKc3Cuhb
+VZdyAcRWcp1icbEFzyvSg/sL80FL/ZYl6sW9WBwifx0t+aNoOELTc0U7iQEiBBAB
+AgAMBQJMlwbPBQMAEnUAAAoJEJcQuJvKV618F/EH/A6OsvUzQUQWVs6pphfcIn7A
+IkykoTNrj9Gq3+ZXhC4WYFr/OUPLnUd1Iw8rLMnxrlIaGZ4FXw/6bvHkyHAfvWHH
+xtGZMxNlSdpi+xFIlnCWkvF/ezmRcdDR62idJYuHFk4wFxxpyA02P5bCNGaFoM1h
+2rTbQuy2zzGsn2RBuITmnPKfMBTcCICoMoJp8qlFe80Wp5CSW/ZCZlpSFwKp/duy
+QR4Ku3EjP3jTKcXk+M4S9B8ln9CpnHnhObwQfJENptFxvuBFBHvN9O+J5rThD8xr
+CvkEDT7QAR3Kz3YErQNalNnUB2wf595iORlPwjE6cjmQfel89v8Z229TuN/LK9SJ
+ASIEEAECAAwFAkynLdsFAwASdQAACgkQlxC4m8pXrXyfQwgAjZdiY+e5JkqCOFKR
+y3EURjB7vt5jlGo5VPBBaRZLO4C4i4YSKF9JjV+Eg+QXRJyZQM2KMdbglD4jG3WF
+4LGLByaR2ogcmc+dYJyZSv9FPeSBbJLJxMa2V9kkm9kS5oSS9MQbJeFa+8pBIqJz
+0Kz+jm0/hEIRHke3DXbB4BT8eWeu/lb3D2E+ZzBoAKPDgPFkeiyjGGC0BiurGB+e
+7gRBQ+n4o0uyZDylmaAnN7NSyvo7cxB8gsEXHGs+9dNWw7jOE1dE53UVGJTvsoVG
+9DtaGRUndg4mgB3wsazcNexAIT4kACoUSRHQ4ocKokxBLBJXIPq5h2REeAVCbGm7
+Ij4YSokBIgQQAQIADAUCTLilLAUDABJ1AAAKCRCXELibyletfL8kB/9ueK3mNURh
+sbib0e/suHVYtcdBZPvSi1X/2zEp4ZC+NHU2MkmJc9a7gu9IY0UfWs0JaesMRaYh
+66xCCb0YQtXaGds0saRJvxccdjf8NwPeeUE+d02jm7fhxljl0jWAtlguQTR/muQj
+DqljeP1DWQJUShm34NrIcO/Zs0cmu0Bdvg9DVjxqDXv3sMSj59o+ISWzVu1vFWXs
+CcdxoSTdeZikOBtCbAGZhnOSvf2q00L9XbSzOXtIIq5iVaHuK1kThg3sO7ow/BBM
+zaBBx0fqB3h+FXHZRqvQpWVi79XDWXLLWxWf0y0nAKjT9qPdlIlcEYbvNDMOAMK7
+r61k7CKTBGAeiQEiBBABAgAMBQJMyctFBQMAEnUAAAoJEJcQuJvKV6188f8H/1Dx
+oUhOyjrQTO/ATO10KuODwCybeXou0cep4Fal3s8khMvubveMUTUt9qiXq763Ma1L
+mhoDxv7cjLvw9N3jNcWC7e693ADVaKpLNwSGO3wPsyuKQCq0dmff6FD2KNP93U9t
+1rSiB2fyEd/WYL04UkxOzMm63l33KIgUCsimb2XK/puzZaapba7amLLHMHhuZbg1
+dGjSWh6/2ZJkHxxHR4HHJ7mXMr0S1LWsAZVPpqvQMXVMoQWDBrdPvHsiX494zAhp
+jCcKE80ajyh9iLj11pf4OP4MfAKWSmnAngnQn6u2QxSDLNT4HigacVapPlP58I2W
+Pbj+Ya9YZ4SPs8SYkzKJASIEEAECAAwFAkza/OIFAwASdQAACgkQlxC4m8pXrXyJ
+CwgAge44vgayjV7+tqAZVyFS9kS0L45/Uz6J2nC8ehQMg0GO5HGfgcgoZ0ExgfPR
+d3bgesY21uO7/c1kLi8mRppgl71Jen5gm0Fxi+5RpRrQxl+S+/uOS3PlIx9NfcE0
+R8SpQhdObUAMIwGgvkmnu+j2Ir3EQWOM8XQrfrFKVSYwcG2ri7cOfr3uOcHhVpOb
+GgN5fWg7tiK38q595w5KhxakqglSa3k3pap7cm4pIMvgYvacGeWjdl6OTbCoFJ9D
+k7Y/4tu9haa7dKQXsdWGCtuzZBdHdSYS5dhcu+TnkwfaIzzZ43EVn3dONC88kUjx
+D7tmw1SztnFH/DIAe9E44rexUYkBHAQQAQIABgUCTO/CBwAKCRDZNxCXpHPJkAKv
+B/967hBCGLD0AlPtmEAX9bTMtbtAw9pXDZ6v6GvTA/clHHI+C82212PHPoEaekWk
+5wh9adzTlRv8iVn1Z5Y2iOLIoqwjaGwTpiYJqMFYT/TiQK9+LvWCLM8HdhQh26rL
+1Ro0EWLZdNhEyORcIgbbSFVUW3/uXdjvYscOd5wZHwlLHhtFRlEnBao/HoguP2jw
+v2lYBJRB1M+fWsdVWxXch2C1PPpbfdWOZ/nptBqwSFA+4PsY7q4fZ1XhFR645QNO
+4B6jiY3igrLA3D8PFOYK7FhyT7Zx8qHnxDx3u17ZWzJoUekU1E1eYHDonJVhmuP+
+UOW6xwHdIe3iFG3I7rbAq29FiQEiBBABAgAMBQJM7CBvBQMAEnUAAAoJEJcQuJvK
+V618nGMH/2qS+m4/FfdPfixLLh6Z1IJ0y1BZ13t43TiMjNNysoJ12jNYHuR7hykj
+SLVLYqfNgXu2/0ZnqrGpwJdpa4oj7OKem25HGmtz4LVDOYYAc5gUngHIAclAGXi/
+XFpl5ye2xsdkqbirYRoN/7GeNONCDqONDd1FvJKEu/xUhTXRCPiGPc4NSuLhKrEb
+grqogR7Zipwab0CvmDM5+lhdlLWirXtjaGLfvcyufn79HB1zTxm2e+XhqVDbd5lN
+8wwpeP/+IlxAFsn2sYjd6cIPaDXABJtzkOkL9n2ZEyt056zAOvVLiGBHvEeDzmjU
+Fshc7nibuhpGcCJ1BwAsNVXlhYaO3yyJASIEEAECAAwFAkz97cYFAwASdQAACgkQ
+lxC4m8pXrXwaSwf/Znqpte6Q50tayVDYK6OoXFhhGEfVjO9HdJoxXejIbRNP+0Z4
+sqfXrCujUGfab3Y1c/98QqtwrNPsv1ZY0wJNjWgn8O5ufolYlbTTXuTYXsKMSvdX
+OSmmkUurMDIhLTfbzrxIASdHjqwwOqri8XfKc0AluVW8827fXqoogkgB7RGtTe5V
+Bc8twhrqwfrki810Ps23nKSoTLHOU/BDw0l+vC752eew21t+W77fh1zMgF7octeG
+7SMOU/7Ij9ieRmvsbmoYulRIdYyijY2voiB9A1ZCZWHOaB5WTFWWEeVisQxHzpbj
+8UBiHSZgNFKMaQphfJw5LHshVbtHJ43yMVmPIokBIgQQAQIADAUCTQ+5SwUDABJ1
+AAAKCRCXELibyletfJOHCACaO+lnBctN4C8YkgxA2u6go9EzgHH79RGLOqJ/tp5r
+dajoQwdeFgbmJbn24K1wtGFXbvdn9RmOKJCPZJYmvuAcNc4G/2Ysc4mqWJSI//F9
+R67xwtyOMiEybUVa8eHA+sEl9Hn3BtXAYChIbYXKZ3xyuJ7f9OkLF6iFL02QYYXh
+woPqfMGPSQtqCS7IiXyW15hZ3XiQ4tGM0IdoFmDa4KhrGTE5BRLul8OH+bYlwIpj
+4QwW26nLHP29c1jDUptIDgNQkmvVv/cbNXEvXUzG/e/AE2gHJiuG8Vquqp+i7uS2
+lEOtFTB9rSOJYBh6S5TAHCiFxWmL8qT9E1kgvebWcQh3iQIgBBABAgAKBQJNGhaa
+AwUCeAAKCRBDJwX6zdQDJY0/EACnIwDJXAt2RovQ07xgJjks23x2i7qt8NrbeKyr
+b5Omltn/TAV+Ug2C7Lw0mtuIM9foJevt3lQH6busDbo7uqbQc/IRwm0pijpL2j9h
+RiS/5A1XWHNKbM4JQdI9Tdgf6LNQeySJmva+XiRCGdGeVO0o8ghmyGeeAyE6HsmO
+ryIcM1x/p1/VKhuJVk4T8rRALtu7Q8F6IGJ7tW+MbEdLF6xDpQHEuzmKNlARClN5
+esfgLbJWI0EmGeenJAFhMmYd0vb2fhBcGSOdniYwoPiJNi8pk6QmAJTdSiu7SL2V
+QWCgBQXH2phoA3IeS3OJaQ3AYJwafkaemvJ/cu2qYDcRtskJrdK+F2gBcMENxoiJ
++NeBZceNBG6tGY7tzmR2mXJvAEphSdm9PjzM7wKRzXt2F1Nt6Ipprch6ksmJQc0C
+SL/Jua72y3Ggyg/IKvVXfyvSnQdx+g6ScbybYi1p1znPQ3xKHtUIUx6Qk8NePX5C
+SoGkt8TrbGiOgE9fdQmRKD/r09P7RfEvNePOIrMhsBmwHlyTudgNugkaiZ/OTT53
+Vbq3TASJUih1QqPzAerHMPhHEPSXrOEP5HEoKtscg1qRAmA3Oo8H4FWTxuJoD6pn
+TjfsBgH1jYDKkZnoLlDGwyfohTe4B9+e0H9eQ9MlVHreVL59vy7/e/2gteT61uC6
+/fG58YkBIgQQAQIADAUCTSGFjAUDABJ1AAAKCRCXELibyletfDAMCACGuLCtwiTk
+2gECm2KVVH3TgdFXIRG5Z/s2eE57dHLb/Dm0h2e0e+qTxuKFnp20Y7YMi4PlOAPk
+PVEX2zP8WNmSecpPXSJaGk66a2LJN0230rjFECSx5YSYZ7AUsGWq0h1WgUw+b/m7
+Kh1eXrDS4ZQF5dnscSpEkisDoWAErhMz3ue9nl0mNmsI5Bww2YdTDetHdNKq3Bdb
+Bh/rojvxt/EQyzU+cRcN+t7thE3IMH1/bSkDQoRgJng3omDHfUYoDlwfwMhEvEIT
+i6huxRGtmtGr9PlqzWesMIlDgHOAM5NuHDA7i1lKaEAzFvKXO79DZqOSOD9ihd1U
+5VP6DUbFStctiQEiBBABAgAMBQJNM1KgBQMAEnUAAAoJEJcQuJvKV618SuYH/3x8
+INEEKSvWLIid/UcxBzzMYV8jJdocrUliZd5OkOn2v9YIkAWcujHRDbkObXLk1gu9
+TbLLLUGg3EgONllzgiwxjYu+92ZupplRb1cvYVCXAy/eB4oclqNUISsXcVIHXRJb
+dhHmbywezNh0A1JXM1JfQfEP3k1qPLn3ospxuj7MGcCwZgzIPTWUifl/nBlKLFYS
+7GqcrEUQLCnCV4BZWarWEO52ML0srbyW/1TfalW7xBZ+MNM8vYG1Hn6mNonEXzMc
+ItlSFJ3166AWkFXy8m+xEBHNuNckembcyYiBVUDK/W05XLW6CqaRxp5WFl0i/37F
+HHsVgTNJ0Ran++dm6TyJASIEEAECAAwFAk1BTjQFAwASdQAACgkQlxC4m8pXrXzk
+fQf+MVrzN9H8zCdbQVkcjD0bNbK5/iWmcCyZc0/XySfbfmijufBPwUUxrWneCK76
+A7KuF1tjpGrCQZ3EnILJRoal9fUzvtIvJs+jIlNXTZIRxRjsfIPCi1X7Ou0DXk8y
+6S5T3JEFL31Pp2cse7MMQfTX/smUFuUpqtTMjG6pd1hynACssftBGZ9Qe0gjTJXi
+mtvHgB2zTOst8oLpESj2Ni8ehez6eq01iAPOs8ML9mHrKbMwESHeCBP99SWHgLhM
+WUj+o/8Ydlfhn0LPxTGyHL1fsP2g0MNWtXec0KJQhjViqx+WxqGuOQRehOFzZykX
+e3IQlfguJJFkZEg3BiwGsgdlLIkBIgQQAQIADAUCTVL1IAUDABJ1AAAKCRCXELib
+yletfCfqB/97uKHYceaIafJ31+EeY4WgPW38YpMEdTQMv9A9jYhFVHezqPEkyFQi
++10PaPcb5D8we+sTn4OF4cn6T6HhGqSdFFwWhdZeYukdCgvmgNOTtDYiBDpyhNqY
+P73XIg8gG5j0qyMXOaaGq3Nc1wZS4gE6LjMn1O2XzydXJ9BcdZ/jxZO/W2SaXPbh
+HgE/JDOSNLzUrJ8rC8totxFtP4SKWljisD78eWK0X/IGg8AERLySKAyk8Jq0+UDX
+n7+RtdCjjVp9Vyj69/xlE3MxpsOmEaBkRRFjJlc8c1+l1gmNvyx4eRSzRV4rI53V
+WLl/ScmpLbV3q8NDbaAHKGDXt0T4EU+YiQEiBBABAgAMBQJNZBpoBQMAEnUAAAoJ
+EJcQuJvKV618ZecH/1xNqPgjKQreSAe25KgWsVcevWknn7A0U8Nx+XOaTRP85qpg
++VDnWhvXHhC5yxwopTLNKcFI/+9sYjSbicdodZqYortC7XlS4HiHQCOijEeOkLkU
+Ja7bptSQvl2+Q1us4pSZpDpyCOM0ETQjN96eeZYyiErS0taqXLU5oYKhjNrdeCT7
+0w1VdvzZxfq+1DNepl2J0bXaSoh9M1tHpGDQIdK5xxcxHTshjFWxs+cqOZ2EdL80
+QkqKaUUqA9QvB5mtS65j+WohNnHsy2De98zscWyQV4bTHgUCibXt9/oz/hzQye/v
+nwSMmHWk5D5cxij1bmFXtP5VGTlNicN8RNbYvy6JASIEEAECAAwFAk116GgFAwAS
+dQAACgkQlxC4m8pXrXxAcwf/fyRx4fC2Y6LiPrhbISa8K95M2hdu27QloWdI/QIQ
+pCG8wOaL3JwzVt4vfpUeIvFy1W0JCGOFNioesL1dygwIPZDNDo7FiOz5HNOIdiUz
+oKlqd4Cj7RmaN7p9qCA06aj3kwNWMmxxY2F+9c/zZaND64d4NAFER6K+XvZhQB70
+dDv4J5usp99DZzvsWHXe5DdM4OlanyjqQ3eGKy9e/hqXlo0zxNOE2vzhq1AazZwP
+sgPbb4bD6o3nfkhUek4jMOhWrRe/0YmfIR2F10n5X0fGuoscBn7cCAVudx4loZ3q
+a6naQGVgMen0zOssobDotc9GtJrdMEnXXNUeAeiczXXVAIkBIgQQAQIADAUCTYR3
+SAUDABJ1AAAKCRCXELibyletfIIrB/98zMt//FAkb34jdfLPJKOhe1HCA4zNS2aR
+e3EBGM4YFDzGsRq5TX6lhYsQ4DbDAHlOuKWmD4PmHOLJQ88nCWd1craT4Cawk2Cm
+gqTzdvGqwsBwv9arAIgflVu9vtrSJx6lsxmo2AyAisR4oZDVDrR6lvOkbdK9yF0r
+RA4/5EbGPm4uk3jbV+zSEqZJy+ydTsbufhf2zIUz8JTWwFDgSA6vRpWVoYdvxmUx
+aZxwg6CHMLjnsCydkHwYWZ8EC4I1IY5Fs2ZqCIgp4pp7YHszTU5JeeiGmDJcYZhq
+gHazrVsSvoZOPH3mx9I2nzJV5mFb/XwtPEdfGXnjyKotlk2Sa+o3iQEiBBABAgAM
+BQJNliO7BQMAEnUAAAoJEJcQuJvKV618SKoIAIPzWwtxXkOqwo5PbpnQEI68QhGU
+qQAWcPXAyu3aCJTianyOKFA1zvEBxlyRYTOS6Qit6mEOxeGvBeMkrK1dacbaX5xC
+4RI1uZHVzYhy7uRrOj7cnQKDfNktk7j+UiW0rTZyMyEvgGm4hPdxlUebeDHusfS2
+SU6ha7gFuEBlCZNM0JFYHH0JPQ5hAUd5IWh8gT86yKz3ETae932+dKwlKq2NNVsY
+fgSZ0bxgLFSQl4LuNuW8LvntDFp5m+KVgSO8aEdru+nhoOMC70QKwxyWuejo8Ssh
+0mAlWF67VAooxjJSYID0MMbhZvkQ8RN6KOoe2CZJCeL7VSpWMjFw5Z1NSayJASIE
+EAECAAwFAk2n8ngFAwASdQAACgkQlxC4m8pXrXzgRgf/RffGQQCm3GPAH5C1wFtZ
+5hZHsCBMcmDt624H6jq6SL07tcJDKcTGnAM933GkqgLyaiN4Lw7A6lW4mAYhxSLo
+HUzLXhpQZ1hIR58gS6sx4O+QD5aV00731/lcHckK4VwxN9ktCCOWVu0bhZR42ct/
+ixzqCPIomhYeyodCBirXAC0VX+kBjlVRBZTeXtjUyuf4v9WyTks58A/P/bm088mV
+yFxe5S/ZzI2ZQ/LmreUs+mkF0p/dgYouK0tOaQVatGx8VOr5c0w5MD/a4GopZdQM
+V/OyyoDWE57sCGqoAPPT7CvJn5FzDpCIfFlHVo6ZZLQg/Ecw8c/mBQS4UyriFbES
+F4kBIgQQAQIADAUCTbnB7wUDABJ1AAAKCRCXELibyletfEIRCACUWgS6UKbyy6cD
+0fOyqbCFlPXm6YoCPiZ7y6MYtrKHa1hp9Gjyge8nKsW3pKyS7/Xt1/xe2F7iTgXo
+fe+8gI0H0V3bCj20wrUmt9b2fJVen0qZ52lZcXsNYyJdytHbnWTM8EVJ1xUF/eiS
+6PoAbLW6iU5bUnjAYxkfYKRmAmxdo372rb2gaVYK2Ii+yWdsmVWAJ1nn6YECDAIl
+LFow4wbuhpcokgvaELNJBmOZuYv3LAnuYm1kdB4fKrti7oFL/nYNiz5JvYyNcmPb
+q3UKfQf4C0/ggqauKLCcJZgx3Z+4Pjs/EAH6s8WOnWVkA/LFgA2dFZGgzNrUzN49
+A08N2vCHiQEiBBABAgAMBQJNy45CBQMAEnUAAAoJEJcQuJvKV618ht8IAJ1fb/uq
+KnwdvcmNyAuhO4lyqVVLlb5WWXSGXOmIipkI/Ic9INWlb7vQbOQ8SGcV3rXijQmr
+FDmqUNwN9CE1N23z9SmA6AMrz6uxS4mNZqlBwjsygY9wP5SyLUxAMdD91qDxtMoI
+/EBmVmnAqvHYBavqZYvrDQ3d/V41wvbE9BKepgQxKZBxZqAF4lmoykncEPFiAVQ0
+LtrBnSAqouysxUXl9bhk74qngvrH/S5o9XAJEYDmxgSPxP7qV58WodrJhAzA1rLP
+64sZfBnBmGV6K5KXKUK5LVZuVf0CesLUwSFVOGK1Axz/nsSepouakgs1Kvhdd8Pr
+A4qdtbf1oMh4tv6JASIEEAECAAwFAk3dWW8FAwASdQAACgkQlxC4m8pXrXyZGwgA
+mfo8BSL9IjjhSILDz4VbbRAM8aK8HoSQQTUqPAknlBFCWT3KVZUtRRFI3RfZ65ao
+yZLV82vUlHgOCD9uDO2ZskBr6INSVRmnzZgv836Soh/KmUeyQtXcMIYyZ+ii2DYn
+RQWFkLYcPI6quar4GwW4/CYyO5nNzhl5vnP7yeqYaw5tbDbfF69JHnd7PRVXBWae
+sts7fWJvz3CZ20kjYUMasU5R4aLxEmhNj83RMiwQxiQGLCxy3QZKNy0RrXEMT+qb
+/+ag8CVc4+oCm6KIPDl2nY7sgquyg0o9epekxXP9KY1nbkd162jTRL4YGDyOdS+w
+6ezcUJFaQ3jJb7Tyi0DVQIkBIgQQAQIADAUCTe8oUAUDABJ1AAAKCRCXELibylet
+fM2zB/4gWnt7USdayyeLAVYN6clgLj+8o2VFgoNykC/uFGvKkCAXD20Jx0unw0SZ
+OSw18EYdIvQg/NGw1chJDJ/X9NQc7xGfoZYBLorrk4xoJeLHqgR7Dz7n0n/zbgU6
+w0esTVbYawp8UgP/sFIT+F6tpNYyN1U7q1BRp4rVDr56CsKZ3TrVLGIqnNmX4qQl
+r0uetvxwg8GoJ5QKBRjxTCod80sLVW8zLTiuGh2DIcSnZzBDehV5NPykX8gueH4w
+uzUzN/XkrnWhWJW70CHjdqy2Gczhq4VsNFxq6It83UaA5vxMhLl6je8CIkaf0EeR
+BQ6n6mSajFhYE13QhfOeShtj48DoiQEiBBABAgAMBQJOAO/bBQMAEnUAAAoJEJcQ
+uJvKV618ClQH/1OpWqNeRJZQS3StCjkyNNmnPtOPDFU0HCBEo2iHyMyXAzG4ezAe
+RZpBtsM4k6DkfHHq17am7NXG6lsDr+JkBDrjJ2nGXvYuZSUtgxyAagw2fUaAEetT
+J5sV1vi+RPQalpjaAS6NUWUzjiwGrUSSoBRQhncoHzel8b3W0TccqqNKUWPWrqpR
+IV2NJggMCxghABqZ6jMm2d2+3UoO5QwDCf7lWFDuFafD42dMko6GEJ6pPnTIzwkk
+ag1he/VE2pxWLXAc/LhCnotz5KnPVzWZycOjAJlZjgaulFWW4siMcwyD2mFnBFe3
+oS/MIJgd0X7W6SB8f15Ut3YZEKbR/MaZH4OJASIEEAECAAwFAk4SvGIFAwASdQAA
+CgkQlxC4m8pXrXxoawf/UCL5wcEWMKQ10I+NXDsQZlg9ifW2BlDBYOZiNyo3baBN
+vhz7ZSjncxq0zgV52j5EVWLE0noVrPi8cPNn9kVtOtFt8prptkxOP0HGtVFMUdPz
+yuSWNbe6zz1f6a/LpKwZFmZD2B2PolrGqM+4YuqC13UfAoRRHDMUoWQCldUla47g
+Miqn8qD9YuFUU1Y1EG+lJq+0t66Aj4L2vZE4QeHjy2/vpCLt85P6phrilOo4TyDT
+8XK956Vwz8UfNEoXP9cAJs+E1V621kA/XrtLPjTwNSvPQSQVIlIhEhg5bXHYc7Sr
+Yd6E7Aqi/PS956IjJfed4If2qODEiULIBlvOUdoEAYkBIgQQAQIADAUCTh8xAQUD
+ABJ1AAAKCRCXELibyletfLtxB/9vYs7H8rDkodGIBCZlf7oX4wRJm9AHcPeNNVOx
+GeJw2ai+1U17YCWCpkbMYCHf240fD87Nug5cTTqj0YhfLz3unkLBy/iHo9aWnhiA
+inur2c13Gx10q8utqMURGhiW1epjYAfJrRjy+KDoRo1SduNRTDcWOFxxQJR+QSKy
+M48pi4CRtAt/k/MWEyQEMl6fNxMb5FzUYEcSAxmeXURyA6st00ieihe4lkNJCBAe
+bQNvxzcrO2vmX05FicCZ8azFfa5LjkcTSMEKTs3jYQ2a58w4dk8HgeDc3EEEmVA7
+q+Pcp/3yv57KeW/fQORLYVOdlIUQjd7UGUp6WSKsew9GhQh8iQEiBBABAgAMBQJO
+MGPtBQMAEnUAAAoJEJcQuJvKV618qcQH/i1UjO1pCRKRPVaNpOlb7503U7BleZVD
+RX4N2UZGVe+7XOhTdjIid92REDMpyOsCNoAJuYw25nsOpW7MrXGqyqR+G7eGmMAV
+H85drwpQ4UiERkkCZEhnffjMtpe+gkAK2Q5AELMvbWzebTyG0LViosJqcKMcmeNk
+ehU1+woaCwBRYXuo6Sm2rR8rE9XwV54tfiZWLUW2NalMiaZkatBudBtyHSjwecIo
+i93xLkIlLwQfk2TFLHb2TKJieIC7PIXE5jpaE5K0SZO29mzuliFH67en7o/xxOmC
+0Jxf7VJgj3Kv+fppVboEMA6HX2bPdWIZFOEV+q0boZV6hpRCpelUlsGJASIEEAEC
+AAwFAk5CMa0FAwASdQAACgkQlxC4m8pXrXyGtwf+NG4Ql3JQxySe7QNazCLRMX/i
+0Ie0ZDg6ZqJcPp8LBF7o68Bnj+JINvJierTciYcOjIf8FbWRL/hHguU3JbKKnao+
+5A3UBPDS//uCrGere+TmMN9eEJX4XLwPAnehCrPg+92q37qLkWyQTOVIQbobj0UH
+R4g2mMeZbnbCInULQpaA25QBECE1wriFgVqumG4UTC08xPqUM9TbAk7YVGPXPJGw
+2V7+q0kRyC76pl9382FGN33a6fLG3kGZyXqkct/A2Y54Xt8Yo+cCVEcmcSzttY7a
+AlJaMuuZsKJw1Jvg6Tf1Dksg6p/9fHN1qTafn/m9l+9BhdxJHjpgTuulWLhCw4kB
+IgQQAQIADAUCTlP9xAUDABJ1AAAKCRCXELibyletfLp+CADHTcNWJ3BD+qxTs07O
+BHcU9iHFkLrhr5JzJY776FdVtGMnCsS1bN/oZbuXCiG41Q1L4LpwkL964MVZYHuP
+6J3PQLNCqzcx4b4HiPC00DWPPTc6ICslnipTj1hVQEOmqq3NCDxP9LWTvMccPD7l
+GZV2H71GHaxQu6Qb3GeaPwgKJiFUzkuzR+2sDWGakLwrvyB58Sjos8QJOMo8x10J
+sglovw6qyqWjv23HSKh8uKnjZ9a33x78dtc/stE+VX8+nL34Ttsu674v38oHshlJ
+Ywf1iZXkowN64iRU+jKnS4yFz9siWwtWTM2uVX+k3LSAiWYgzQ4L48fZY3QBhGyK
+BDmIiQEiBBABAgAMBQJOZPMKBQMAEnUAAAoJEJcQuJvKV618mj8H/1lAaR9jKxCY
+gsuLdZrNLFVr57M+Kfibez/obfvVDs/CuckQmgMwwqoiGbIj+StCw/r2M8e57T5X
+QzvFnxd/QeBQnZncF3TQxmPJAVmU7HyiIz/VFhuaVljJNYtucnwTA8xjaPCgByRK
+QQFko4MCH1yrrxL/0g9tjgVG+kqedajt+Fh5t6DMDIkG2+oQEq2iGFgYSSEgbr4Y
+ZzqRZkAFQWpf0ousdtiyn5LIgnl68NAdslJ+h1zATJAHztjH7qndN1NxK4VSXLxS
+IIj2ccfFfcP84/uHQHbDOnkQ/NzBkqK80Shql0qrvpy/nbPMq5KZNILqJW2wdPAm
+vYr8bL12pXyJASIEEAECAAwFAk52RacFAwASdQAACgkQlxC4m8pXrXxkxQf/QgW8
+2XE22DEBkDRWpVwaQP+g4Yvxt438uQvvRSyMewojvj2GipnSDvh6nH8id6aKNBP+
+IaYB12cCXQN0aSdTAqvgeBCFY9W9X3YN0R8INHtydiXR2MjEcDyhB/wo+h/tWyeP
+v4R1cqIArHvZAtcmbPKMlSUDn1ydw3tW/BnIlelRsQp1QBs6xTOH5hw9nUiy7h5Z
+olEIABlh3SuCNygz7dEf4MfKaOeFxUzbxGJ1cKCrPsRA12dp7VsGdRVIA1H/hyfe
+k1QWRqpuGRxa4QpV2AQ6UPX+mUXHgfwSHvpdXIdT3rlq0hmfuua5CLGl0jQ0+PBo
+lQrck1V5tLQdregwaokBIgQQAQIADAUCTogS4AUDABJ1AAAKCRCXELibyletfKaO
+CACzsS4BxHzdSILlaHZp+y2OMzVldZFzfWxZm5inOfIX5eTzWoyQKQMfFNOf5asB
+rpTcf7HjgFmxQndGAAlxqGw1uNQRe6rnRUKgMoWsJX2Z+1JqxPV2QvPuDPjD4Ohg
+fgjnTQC9jXBYTGo9UZAdQulZoFfAeBec+oythc+G7EWaJXZGZIT4zXd+8Hoji0bg
+WM0/U8izP1HSTU+5hormheEBsj8zFcIyXAX0gxmZttRxYxv9eJgpMpHZPsfgsWo2
+nQZ7yg0K6xjLpb+reKrUqi2aQwbhrBkAvXRLqMOXkGhfM3GKxyIjwE9OVLZzFubL
+ft+Ul4tUTzehnkoP2iPoK7KliQEiBBABAgAMBQJOmd1fBQMAEnUAAAoJEJcQuJvK
+V618vagH/REEPj97PwHsG5+FGvi2962RBu0VOh7jAKgZQE9/rJ03JwpO7nTEDYVp
+bD+/7UOkZ6PbFjy/Ee1SxFuTeFCa0F5ueD6D3Mw1wuIzAdcDfMuNmD6pa7Au+gSo
+W+/xji8YCrghWoWuLzhqdDiCw6fo4UAn05cjUF+I18W5WRCzWD2CB1cpd1rqyZ2g
+qRlJf3TiBMvYDWIupDUoGXXZugdltFBi8xn3PukmACQZ4Dmkmph5atD8PplUWWRj
+c9aJ7Iuq2JWeqRP4Vt5RBoGsdnZAgInrxrBL6LfA314zAjYGHlDTfuYht6bLu6sV
+ZqPMZEFEl69XnRJ+iEO/EdWjEaG5XeaJAhwEEAECAAYFAk5CVasACgkQQycF+s3U
+AyWoWg//RHuyiIaEo+Xu4ziHVaoQPQ70BesApR2jjt5HNrqrkHUSghgH8XfdEgU6
+mh6rdEwHjiOHHoMS548cPspi1b6wuevvJTzqfqDgYKGVUU3DUGyYLwQuFw+mQBcp
+ci3SumG8UqquAZtaBcc7iyAIrZPq4HTj09ZjAYGORMcYFc1lRZKh+yyMWRUb7akI
+aNfhHHF4/WcfzHSeDu9yDkYsDiHcy5xov0XT215doHUhfqWjQ3lx3LCeYrDXj0/A
+qwVZOEerxWb58/QSD4yybQjAVeIk2BAyHKHlC15NWF84my9IJ9C6tQ2rEloNdtt8
+YktbfOdL1IZWx57K/UtV8kFRZNT7Knq30IUMW5YSw6yd83gwfKWGULxCvTLUs/Qa
+phPZSrI49nU2Mrw+UK0eyVASiZtH9dtGJk2rm5NUAWQ+nFCbaxlH4h4PBs68X1d3
+U1dJ+wGHXjFKpJm6xn4FzVvO05MN2ao6jLJtAWahPLsihZn/Ol07T90HzEsoEH7G
+iXEZjm2sPcaegU3CMDnvn2JIFlC9TM0zLp7+n906F4DshuHqLg5OCSkLvNWKuurh
+eCjrSi3XUGqYGfd/du/YBcf+L0QVe42zgkTzT6GBvISARUykJunk7Anejvrerd9X
+2T9Z2ad9tOyNcC/FgMIq01x3PjL6dXY7gmWetHs8D16g8TD8v/iJASIEEAECAAwF
+Ak6rrB0FAwASdQAACgkQlxC4m8pXrXzSqAf+PtOUaxF76oKRX7Rj8aJJTPdBf5QQ
+qyp9pJ9PgTCugvCtrhAzgkZDF/HVhesGOlcN1XklgTCuFMz2xHCYemKc1y/H45UY
+0Iy+/6ZQhTJbwb/1wgksXwb9C5M58OUjbmU7n/NE0x9i7dJeI5I6MuQ4L4qR7A5t
+b/X0xyGu0Cpqp9FW+oZp3nQCnbTpvo9ZWBrVqH8+umv59Q4WcsQ/Ij16msbxPdLA
+LTvQJUcI7ZuMTWU53UV95z1fds1xqWq8TZR7imiiUc4QevxiHivAhP06nTNnpat6
+YhbJbTygWwWKt7/c12XPmD0ftutJk76haCM+xr60zRzLn+tf0j0NGj7EwIkBIgQQ
+AQIADAUCTrzc3AUDABJ1AAAKCRCXELibyletfHyLCACHfmT66B72JO2jHBLtHGhO
+htDEmzvBSS0JMu+tW1xNgVgHT1hz0fqMmZPCc77tSxnYaLcw1Tgt2xvUYUbKveV+
+BGGYKMKhHk0wauUgn5iwA8rFs/ZZGPU4zBKIZbcqQklVI0Qq/Po+pdsKZAHmKRfJ
+0Y05G54QU9ezD4kDPpe605alhgBGzAcxqU+m9G+T9MMmj1RhpiXmSZ5AMdmBDfHP
+dTGcynyOwHwZM3JKZBh7QhRyh6jnvgLzWNd2aBY2ZxB0jjtfZkI16DkUelukL39n
+0sY2LwXdjb5ij8zoMnZ5hCiauVuem3F7UAB/Cl9VmhhEI89KPQkbxMziyb+3wS1P
+iQEiBBABAgAMBQJOzqgvBQMAEnUAAAoJEJcQuJvKV618TlwIAJLliZZ+DbM1JYZw
+eFLxSjDTvVORPygc+WSJKjo4zBKcL7QJtQbROi8WnWoX7qJ4SgMmxDy3MmnAAw3J
+Yu4OKnnMrmPVUS7vQGs0AsQ0LBuCMg7Svdp4jwBS7tcY5CK50NuHDj8NmvhEX+9a
+/4fDPaV1q73kiAKp5std2Gh3MnDTaK9bS3VpSbmxuyYhFtwkvMv644Bx/yGioKP4
+hAfLcWWC2DiEDv47TjZeQOkm3sRA76kTnhaBCq4dQk0MPxKNEZ8XmNhET17r/poC
+aOFh5fH82llGSEFfQmGcR8/wnU9kAlalv2itm08MKhfym0ZfWUZ9IcOBavnLiid5
+RXakvoGJASIEEAECAAwFAk7yQcwFAwASdQAACgkQlxC4m8pXrXxuAgf/dmSj1nYw
+C+ips6ICzDzr8GlTopPz45+bMDvKb8u0aF/RC6hX8res2H4h0yA8OlV8v3q5Jdml
+18EFJjq6oKnKTT3KzX8YwuBp0qVKauttQToGUR7g/0jKJ64NClDNpF4//ObDqAx6
++UQWDnocYl3Ue5t5vvRizbbX81ZnoP3V5GdSGLfVrt7EvPP9eHfe69GTWRP39mqF
+tWQ7OW/ScQJZinWhq3OOy7wT3sB4aguzcK56At3KxvOf0xXJ7oXJzrSrA+LedeVQ
+dMT04mc3fQEkTj6wgMRyoNF386dsMtOLD8DwgwPVWyXOpN9sHoZKRUny9out2osO
+xTFywA2xboKsu4kBIgQQAQIADAUCTwAvjwUDABJ1AAAKCRCXELibyletfEpnB/9l
+whDUgf+vrh6dob61TxBNxFdz9tzJtAFfodhYAG2a9lYAjGcHfeGT9a3LpaVNrDAU
+C/aktd+fhcHBR/6mACFfdzUProVMH60BiCZKn/ojn1C3fSLosOwa2JXlQx3jJhgF
+3PK+sQEMB2thkxoELPG842z6Y63W2RDOlX0DayFD4qSWZ9LeXnZMcBa9DQRw8Tc+
+iZnVBLDDNoYzgB9H/OdSR4Lf6ZZ7Qd5s+AzqcB02zNLMKQv+KKpQTdk3wL8GcKvJ
+bzjiQiGWFbtLA7KYrrlgGL03bbvQuX/V1jueU6kLXy2JzxjzXVLCTTDb0GZwuiuF
+RQIHZmOaNpptvsJ0wIdGiQJUBBMBCgA+AhsDAh4BAheABQsJCAcDBRUKCQgLBRYC
+AwEAFiEE9oLNzDncD+rhFiC2x0bPqedPpLAFAlmwZJ8FCQ/M8bEACgkQx0bPqedP
+pLCnEhAAoZjzOb+yyl4QPXc4ybUfYpmxN1EMjzMGV+DkE8z6SwenXpkYxFICDsnb
+vzPrZrqMdC52qliK90wQ/hSJYlPtBfBnYIkHHZDmmdJA2kMIBwkYsgXRZsyoOqAz
+MU3OmmaWhXAW1L35ygYS067rrtk5iv3psN2kvSuDRhTK3tjNcJd3hzoNP56hyIgs
+slDanwmRJafRd59Tmd03LJx804Tfr4K+x2q8GzV8WG6ntJkPOGIoU5ypFstZFMAF
+rAN0OBgdwns5AI2QAlqltWxVWTJzw7lV5OGBHTNjM+v6IacDNrXq9ECFCTR7GIAQ
+nVfQjA5NXIeZllinB5axnTHaHHhMCSpBoEppmNDkQ8jbNOfmXPn6oTcinHFra4Vx
+DjQWeQmenIPc4Vs6qk9D6hv9jW2drTZPX266clZPkpcxQpOq/Y2fQLINVBYXeYbG
+fu3Js3FOv3+VfzmccTRDrJjU6qepQjbutor7CeV2szfm1EKSxvdXJgImKww6QXuS
+3cLur7yTgtRQgMOd+A0uDHyjM/yP9qb2dWS9wskjja0ztyEIA/aY3y3lLLwXS5HN
+GoIABk/aW5zw5Eg98laop3FoYeHDPR8VVCNToUwDbISD/yOed1kLUBeryMYYm+jk
+goytnOaKUe/cAxm72zFYvS+1KY2YHc8Fz6OB7UsS1QkgM+5xYLKJARwEEAECAAYF
+Ak8HHNYACgkQqVPkiRHCauap6AgA0nKgIrIOJJ4yCmgTphxQuLdXZk58V76ldiUg
+J2VdKQR6h+yPq/snBAanVZxABrVgzl31nEnWpwfpeourpw9ZcwyVG8DPvzN/8FsY
+CkbCYk35DcrOvMVeYPCSCjZmA8HkvTQRhqAAEb0eOLmqtKnf4NicDpujyFdrycEv
+bLviIMUKpQ7Q7jt3mJYNUw9smydKnR7u2GS4Z/XvqMH4+E+a9+Idd2QvM+1VR+O7
+CKhCw5m4R/017nsJAVEGBo8HL55Q1w+5dlh3ftGjmQW33yJmOJ8Wy68CCHdlGwwi
+yCKmqSHNr8scr/rKptcoXFzPIMt/3L9eUdw/9/tzBfbIfioL04hGBBARAgAGBQJP
+H309AAoJEH1LbhieP5vmrFUAoOJx46S5D19OQVc1n4O9uMMuU7CyAJ4rv6ckfRdY
+mnl6tsnziIBupldzBYkBIgQQAQIADAUCTxHk3gUDABJ1AAAKCRCXELibyletfIJI
+CACz5Q3vIvdaY97qxP3TJDDznvswZyvleNHwm+8vnznf2hvbMDfRaTVQFnXS+wi5
+jFJsyltuinuqqfHXCbuTJHynK+9mH1cbZ6mAxdeWasybITtofFTMgZHOghNe+pLd
+fbAFPxi3Eip7DeWwEZC1ImT6BoN+n6V+EZFgWtyFGHprvTWHyN/I6hhofJG60Z/V
+0SMRJWNsUT/L8JHeztk+MV0LO/8VMMlXEamcC1lmiUAFStnbFZzTnWNlSPLvu07A
+YHcKv6JmcJlFRxVg1XXASogrorSAYUcqAxwn4MASkCo4bm8kZKRvQ2+gX4VTOd9H
+jng7mFIMca1/6ZYKYUmQH55iiQEiBBABAgAMBQJPI7O1BQMAEnUAAAoJEJcQuJvK
+V618lLQIAKwwQCyceC4ozDGJfjoigj6rJV/yg9/2fSqzf35oJpUCiarmsbrPiMSV
+CG6+ftVZi0/1dYQ8wQFpdLBJpwnuLAOAYaeD7fBAY1OJJhlAdy0DIY7KJMr8W8EQ
+iux8xNLGeJ47f1RQX2OnKDzhRouiWq5X55a1Fi8Bknp2SKUwrofsA77o5dpZ2OQ0
+b2ZlLpd2WYLAY7fKX3f2qhLPHFgImhRShTM+S2UamyDCIuwfv/jt29KXX3b5pzA8
+NV5DO5vRuJ6gK1ExcJ9wM+DoVh9JEwSbjp1kr0FJ6o2PJB+SZm55IKe6sfZgrpQn
+1epyrCz/iF1mLesdxJUAc8S8w1Gb+AeJASIEEAECAAwFAk81fQEFAwASdQAACgkQ
+lxC4m8pXrXxu2Af+PyQOrQkF55KvwX2lqRPUrIgNBUMoE0IWLNszXR+VYtMUSoUt
+Rec1WRgmsh8wz6m8minGogmeWp8ajd5tD0cewZPyE/dQbzIjUUUoh7AFSMjDHn8j
+XG9cpNUv9N33Wrb/u+S/l78m+mfg8j0sjENbwAKTIiYPvZa+vWD2RlE0ucwlZrfW
+9NLTLh9IPvUBzjWB08UYVSo0ETLLCx4HsEGub2JF+zwtdA+CPlTWjMWYNvNOlMAV
+iB9wgVj6BqleZInucL8n0x+VG+GEDMU8+IkfzdQ0jhhh6csOe1dkpwM4IqxiRQN2
+Gy78D+YHSsNyFnc8WW3dsMZk3xCidoSlAaP0t4kBIgQQAQIADAUCT0ZItgUDABJ1
+AAAKCRCXELibyletfGeSB/91Dsr4Di3n4jB1ezH4FSpg8AFUToWmTQ2umB1H2kn0
+30EN8qb2yH6T0LxGkl0CPHpULNRp71aaCvf6kUfshgufWZFFmcWxCElfIklnC9h2
+UGFmRWVmb6aGq00GT7SwOOvSEbTWlVS8MPmppIJ+LOCKtDHz1u/NjufBB9C4dhIm
+GrFOZzdp6FqoDkRjKZpTHWDami2jTgJXOJWKi++kj8995rWUP+nXGDMi740u73Kf
+P/wlaOPDXbMKAWr7m8auCV9OyX6V5EW1dSvDpGK79a+r6Gh2uEUQUhv///2G8rLZ
+bdUU/fXm+Hker0ibMOmBOoTcYp1gKc0Yh7UC+gBft0vyiQIcBBABAgAGBQJPUO33
+AAoJEIRjrlNwyTqSPiUP/0ecEvuHXes7Q/RjIgxkVWpMo2IU6LE1RWEanYliNaMB
+nxbjIsL5MFG+G9DeySMe9kUXvMxOHt/48a4z6Rmo7MVP0CFzVYeK31zksM4ke4tU
+wq+nyeR4hPP7Xa4ZRdUmT6zLNmLWlgWdh2qN5w2XmkDu3GuYexR6e2diUUWJAcjK
+V0YIp2DPAwNfMH1QoCcf3b8oOxAELEpnsBLU9MtwsP6xN4vAyzOU6Tf8gTeJF9rO
+WzS6bKEe3q+dcw9LCqct+YF0fYiXBCoKXmRsNNi0aXj7NMNqwg5wonPc800UqhSY
+57PmkTnQxGbf7CH3NRw/chGeNQ7beWHeIzC6i6iiPkcnbBqxGBtNvU1KOMrpNfda
+3tLKXIocA4fZBQXMsmagU2xBYnZrKJMq1vlZ+2gGUEmjdaQRvWtBLa51VIkjIW20
+HB7tOlwZzHHVNLdPBCDRfZW6b8B1SyAyWexL8fzsndaK+MYYkr7fiKlukt+CfDe6
+YK1LRrx2wUzDyfR5F1EM634i7HLYLIhHhNvwAvUeboVToXJ76NCwsKyVFmXfL6k/
+DAORD3GRenCa4uRzZV0gIOcKurjJpFfryp720GVKRCJaOSyiVHFlHOdEBJJVm13k
+Opw/pOol2f+s5ZmculGwRaWi0ATHXjZQKiUwnGeFc9AdiQo+CnfKlFL56iUFBo4n
+iQEiBBABAgAMBQJPV8KbBQMAEnUAAAoJEJcQuJvKV618Z4wH/Rnem+t28IFAi4Tr
+Ul4dv+CGVm5tziXm/M+y3RGkrP0owwRXn+8nL6EEBSJtXjxNCjpQcSPSECIq7YHg
+LDddwS/ep43kP1k1v6JqSL9knj1ImVFWNPztP56AhUqBQqh6Ez1dc63RSUM+hjU+
+2mtqBaNuWtLqUDg3tgw7V17PFrDCoW5tzxdWnIV0drw9dvI7OGzklrwdd/fNEn9P
+V9rYTjNp0CCmEkaQCPj5nDxLM/5afzS2SKdMVkOOb67g9LRVP1m3XB+sUlw/HbVH
+gqeY7odZFwGOQ9vOuDwfSbpBPxTl0o/I88N+iYDlXpg9NkTmsX6qs6A+G3aj62C4
+N4ZqUuWJASIEEAECAAwFAk9pgdMFAwASdQAACgkQlxC4m8pXrXxPtgf6AxyYOH2d
+OGfctrzGu6H1VAMkkMghrfiZAQQlYdTi6em9nJvcBrHmdJV21w/WHkgSSW5/hqqD
+acXPYdSWYkoNR5WIav/mgSJcMNtdVaASSFT/jmubchgGjCtYqnn2uPExWhkraHzm
+96b/0ZERYMl7o8i5y9zJ9k1peRLOCEEY/NY+LW1OtIg3cj3CAz665SvIRpmCL+WU
+gzz7Q5ju732jD/GW3/e2AVuIRu0aqsn1ELUsfjIWxe5TQvFxhGH7oBfVqNMq2NDu
+YQZXjQR8D+ws/yEe44rxCPFPFZJBfe0bP4w8yZoVYggz4TBi8IkheJlPfn6v/I3n
+egt9G+g6nBZElYkBIgQQAQIADAUCT3tKhwUDABJ1AAAKCRCXELibyletfEtDCAC9
+UwhANsFt/A0S5eJFodpqPiJD8FhOEzwrwTKy/kX2zItnvg5xcvaRbTref1NLTNPW
+BR+/A4nq4YBzJ2WZOkIjc4sYkVWKdYVTDkjQ0RyX2OE3MUQHvnSN16WSWnPpiv0N
+UR9yHjCjel/oKg1IQjGXYZERPGmhrokJowoqXMmEytKqri4m+DLk0jfwzQj/17fG
+jLNoW7rQhcQFbBsB8WfJ5FjOqHKS0uOApB37dwijyPDYcqnC5Uxy7OTQhNSpTFr5
+/vJuP5Dw8RotQJc+G3GAuHIlEf6ZX22EPPzWCPr42SapZ/+r6oSYp427ZPOWiVDz
+X2elATuF+Pnp5AwgQ51KiQEiBBABAgAMBQJPjG4jBQMAEnUAAAoJEJcQuJvKV618
+JwUIALkZ4Bm7lZjwkS5AIOR3QZGZiS4A/fgIoDAFZDWD3a0Rob9OKLpvwwTwCT54
+2mVZ3GBzmjtjgM8uh56GDgAwxe/irk7ix6OIfKytmi0n1BiiHRyqU/PDTiqyWZEf
+/zeLcOQBqU6Zhy27ndeAICcPzi0bsWKEQoPtv1X4NFjID7ZjPI9MZ56h8R6EoYbT
+/Dj7DEzjTuEOXGm8euMkkyi6XrtiKfdgrPEMw9xDvY6EabsrFIN22Kpt2zMhN490
+o1lvxu2Xcv3lCku6KEV3rRCJq2NcH6iRzaevdFok5xfxt17HeEKLLJazCWc3GSHo
++l2Xti6ySgLxfNw3MA3zmN1dClKJASIEEAECAAwFAk+dkjAFAwASdQAACgkQlxC4
+m8pXrXwEXgf/etn5x/pfCjBJFow7Y7q+SwEFqnlMBs+kD1c9z/+4/vqFppHsAM7H
+7PiGaa9mDHSAVFiEgbjofD9DXn2WtBYe+ZOJ+B4mykAwYZV5uvL1VPMQYZf8h7IG
+RxRk1NmJpaiEWZ8Qkl+mR8CfiYg5tOzdrZnaaOPu+b82FqAdjRUpYNukKwUFce14
+kM9TnGlKfTw7w9EqaxDY7PbjIdN1qNyMd+Y4pjoszQhnVcvk77aqXmzm+T6b2zEt
+UdvMdC4wKFqiGvNkdpjqfh3mPT+t0/EsjwBuxQWcoZGVE14d5EZcPR2VbH0UbtGi
+4S9xU3XySkDtjsPyUjuS/zguN0d4MRYm5IkBIgQQAQIADAUCT69e5wUDABJ1AAAK
+CRCXELibyletfPmvB/9mbos0GVEQ92Z6J2gmXjZHfp0hjEkTbhqJCEnNm9fTRJVq
+n/h3km63hd61Xc3QROSzz2IqHvZDsqX6tMyA/mu4fZPr7v24Ju6/UmNBU4Axl2UH
+t05VXeZjUJ+R67dICRsc7W3O2JRfexlN/JSbDXOGqPR3c55N3BJYu6Bsp4AedQA5
+CsMwMR/z0CWiIRH952u24WBOLmkCzjf95NWzweqdnUoyaWPBmqCiSoQ9NupGCA+S
+ZzySlu1YT8BmqTACiiogrCDtXRT+plug09THs/ElEjVujDs1z9OOOWdNMK8Qw+ep
++JjrxYya//HhZc20UqSWNtVkM47luYuARWyn670SiQEiBBABAgAMBQJPwSreBQMA
+EnUAAAoJEJcQuJvKV618QTcIAL42ferPKxlon4wR7WuViufVSyWlKavZGWNIIDXI
+9bbHw3mySbvQnZEVJH6jiuZXOqlqUeH4PLOQ/sqpZueyyF8ZDwOw7e+AVdQYiu0E
+noiaPsTLjIecNUnFiPeU4S+cL02eXdAderTS8ypIbr1hQ5XQByXYUOseVdsg1ZHn
+svqclDBeipyJ/gGe/apsJd8r0/IUcNhADeQn+8vgwpp8cXIqykiEjl0fE1p/2MQJ
+9ZoXszvj7Godun40IUDgx8/MyVvZNzkerdfMUd/xwUp7lIXeg5xphsa7kO/tx6tP
+O7uMLwaSe/L6cKSAYfS7edLlZ5EWGngN0xmVWUItisfRLUqJASIEEAECAAwFAk/S
+9/IFAwASdQAACgkQlxC4m8pXrXxQ8AgAg0zHbDTisCVTOIK6HyDNc4etZFo/OJWJ
+xFaakWSbwKPHawJZsp3oEriXu48xzsxQY7kHBgQ3FMc7B/KngRiCGlSeUPJH33zP
+NyUeBi3i9pk38tzzDZpbA6vFH+Dw0o0tTxCyiIUJyBJlc2GBepzLdIgrhUp1Er/X
+wAv28iVzAfT9700vyie164tCCnodH8t2C2OWKT03Oj17sXLtXEkLVpVQahUmLxH6
+WO7wW8DI/tyb8hrHHtVsCd5NmvrW3XrRKdNsyq2RE2+UpbRtw5Me8iPzD2GF7aN/
+Q4OTurnB6nfokNgVx5etgrnBxIlwcFhkzLGQXrxQR0c0CVg8DCJSFokBIgQQAQIA
+DAUCT+BO9gUDABJ1AAAKCRCXELibyletfIafB/0TAB5OW/UvIKonqBDz5Fln8SMm
+hYsfr62TfTGecodkNz9Hh8saVrDYTHQTVbWoe8HlAlnAALlOKD6MxCdOKB04UW49
+BnoAeZvuqCc1XKAUAK502YnFlJcxjtK8GY/XVQPrAfgMhtnqsgVTlcEgYiyZP7t0
+jVJtSQB1BdAO4lGrW4kep7hy6+269KkhiplX+H19sImU/VxyyeoZJQhZdmjHTmx3
+T+zzajCdQVP79xCIiQt7+hKjSAT1p7CosDFjRylPZNexYIhDeLCD/uLx9IrilVCu
+tADCIBJUhntM1Hrm6bmo4CZ/RtIz15gd3MfzITBZ8Z99aIr8rT9KePgICriUiQEi
+BBABAgAMBQJP8fIDBQMAEnUAAAoJEJcQuJvKV618zj8H/RaVLQSz7dZ35guz5EZU
+fFE4qKRN/elRzKR9IkhiPVZR2yCuILXtUsf/je8SbibKRCB7iDSwFAIuHOy+to7U
+RIjsw6Lc3mGpIwpVPUQLB3ZNx5Wa8Bb7cUczcsT5zW8xcWbszpFhQvhZe8RtdzgM
+HYT5FMmWqpEJdZWOwSpC468jnvWSY6cSzPj8cjl9/Wlr6+PlFvBlEFQJOub4yEH6
+NzLPeTFtLRKVHRmorP92zPp7CrONAnpJjo3jNATtZfG4wc8lt9L/crEqUKfwayYR
+QaPeDyJHGXSQ/9HXwZcLrx6GoccLGrDP4ipJ6yNjnl7DB4QTkyHnFuRCoevWnHVQ
+SEyJASIEEAECAAwFAlADFocFAwASdQAACgkQlxC4m8pXrXxmOwf+MK45tgAS4mij
+lJFDEbVVzNlkzosqqj6rjp7Pr2ek6WPZ0RdpSd10doUV+SkUzU17BkoOT/vTdOzg
+7vsoXeKJxkJeDzsb5kDtIhnjnWsiJLnOQ2HKNDGcOse8z1d+sT2OsfhpoweNU82Y
+6DtIv4uefILv3wz5Nwn7svHCugn83U9NAvWg0NZLbn/9uKTuHWCfvJvc97vq0N8m
+Xi2FkG89RtuHKkQPEiQS4xGrqUCiSd/d9rn6t+OLUTbNkDLGH9qwZ8pxfGH4wamP
+rjukfaOix3uJPtrKBUdt6o4SaKNNgCHgfCWGlVYQSczUBqJnLX/NeIVfQJIXfDWM
+U/BGooKo14kCIgQTAQIADAUCUBbtawWDB4YfgAAKCRAzO+avbayZGHqaEACZAnNe
+jC7rSRXjlq7qXbmT6897S6qJOUygQa0ra78i6XKi+xtphriexHLPTL+evd5Rpnnp
+3mNq+rrus3gzVGo+yMV5Sp0yL/uSeEdHJoPODEgXwc5O1n/9vYWaBZN0QFTT94S6
+y/WlnlPu7tXy/u4F1SrOGU6lP//a0vHm8b5N31Pi6FLyLFJNF8ETiZ5mCdZBjFaB
+6wuN4TuSs5vs5pf6J+lTNv3HouxVaYbObb7y220d+M7f7zcH6+UZFsKyUdoAv/c0
+3DTqoMnU47wNpANicJRlcO6xwYHZNDQ7t7n8/67DmpdI+2HEEAQ5b77QqQ9iEbj/
+5xlC6PfEiSj+f710VTVfWmhRLPBHE6JWG4Y3s+yDtPBzm+LMX0IbQC3joqHjyj6a
+gwcLYV3YywGKBlcZGXSCixug1nVyMx5bRoCmQmiMoOiiFlmUSKY/y03APrqewgnk
+cgWqSQj/AIP9ZEsC6OYxYeUgNIO5u+cfclZwuBj5k/KGT8+xwysTrTr+63/p2dNv
+W+cipFR4YqRBzREfxrzjybBcbxz3d/6CeFJGCElblq9BrW/b+syHVSXDdfkF77LW
+5UzrXTDgvfXAD2HWqpGksGLz7m7EUiiAGiFYVAurDOab9wtwxjBEF8S1gfEzhmBw
+ttvs1JfnC2cBR4dfUKiohA+lrWuWNtwrXpOS9okBIgQQAQIADAUCUBTi/AUDABJ1
+AAAKCRCXELibyletfEYuB/0ceyr8xJSz3B/Y/AlrrL4bzI5Z04q4BhQ5DMzK1MK5
+e0HBuiUOBSQ/luYgYLkFNrHPkObsJZ87MKElCbv3PhOTx/PmcINZauaZwudyFJ8j
++NXirv0WONC9FLkr7TO27ZLyrduuzHWphyw7CLDu/0lU9MKne7U6+dIiRBVSdM9H
+jLIInaT8pwaKDXUzeXqasPUtT6PIXNW9ckTM4QbO0c8gGzn8ivvOpLwL93eDeD6T
+sFOl0gFBKRHCZSzuEXCjx82XwqR7ErZzzIvYKQ4nIHPYnD0Q4hPGlaI+9sibwo7Y
+WB/i6mRSorijSeeOP+h++VisvdTUVEQQdFN8FeFI/uDyiQEiBBABAgAMBQJRPYdH
+BQMAEnUAAAoJEJcQuJvKV618hQwH/i3vjckMDk8Jjj45CAGpjUDUAmB/vQT6ftqV
+/2X7egFYDrzl0Zf/9hlcC6Wsnp0/6c3R5qBFRM6XycJzkHE35CZwg0Cr/p0ahx0X
+1knVroQpfS1nupyQPkqq7b5SB+xKaLWmAER6tQY+t0gzR2A8cA+e1BpjZqwPQ4fB
+0PMyOBza2w7gAXgUqy0/YxrjMf41YsdqFVkt6Ipz45T6ZvsMGQeduh8c4pkA4DGq
+RO3Lvxz4064c5DqafJdIdFQRjKNtQDg7oGNpT/UvZ7ABQJzl4eAZTqzEZH2v/01H
+QqBDoa9MfMfhcEq/MVcSXCEmGBUtJwO5DlAjjMr2pli/HiWeSjqJAhwEEAECAAYF
+AlG8aigACgkQwBMwnW1+RFzI6Q/+Mq2FwV/1dyTAAxo8qpIgcy1yLa6jefEck1vZ
+cL6rSz3ICZr5POE8tWZ0YajULrNh7XQR6k9gn1gnNRmJtIH0m7vuhWU2xGZ5bCre
+a0BTXNkyA8V5DciCMvgw+FuxZNlzDxEdkNE7fwAGxsvqNAl+JvB89gO0z5MkXiWf
+EEEOvNIQeKmpu2v62Uh6NU7UrtVN8OtyZY4HBeAZddLaaB+mG4vfLwGD660HPMcz
+pDARRc8nXZcdWhtk4isgaS8Z8tipyyXzv0MwXmv7grq4qbT7JJbrgCd72oBppBgU
++KquP33Mzlh/GtWcRSgKbzpiBqb2JLspRdeM10qUOZHAlUMXsZaXkkY2hhluVeJq
+SftbuFapDyC61OTFwoda4X25eiaWA6kQ4b+cVxs3yeoWL3ymQCP7CA2fdyoRe94j
+48iWI9OSVlXcmBhiQbBuzStjpQiPz8f7hcNuj5Pru4e6P2SGfgo6NT28kWIAQoZY
+Y2DtXXemwdF9/cJJhUX1AfSZeFbIg96/8PLTv3lYPk6y+YKmexf+N76bEd/tqLY/
+WtE3Nf73xDcsWnlDwKsvFlmTmLvb4kffE5xDb/7AZrYehcLq0jxcOWzfuhyvMhHf
+OYe0MD8FojvCDiPmAx8oHPNvY8iy/KE9U8KsHqVHJZx3cMV8B6QeZxr2xNEOudPb
+tNljoQyJAjcEEwEKACECGwMCHgECF4AFAk7wUoIFCwkIBwMFFQoJCAsFFgIDAQAA
+CgkQx0bPqedPpLDDUA/9Gi4jRX0L6IXBLKdiuPbj++oU9AxWO8Ndbtg7lSpAI63i
+rPjwg+02wPuG4LeqzYzet86HPGnUdPtYgWjHOM1syYyQ2af9jNlGQ81ErN2lQe/o
+oCxl+jKFQxnPLGgLBTlOOywggUwqgsK+VVMYL+TO73ENIlDQDEHOKloWKxS31zYE
+ZwADIYGwtq31Ur9s8C9S8pXTpiZroIsqxmn7maT8ZGEOX2JBN0aggE22xr4jKWRM
+nCH5e6Au1z9LODt6UGVJ0VLs3NGgo1ObSmXA43yaHzGm1SQiN865x/O7Tq3h0H78
+lx4xyyway1yxxAAiPFz7vHcHrnMCdFRDwPRr9RhCb24Jm98io2GsR4Y+ztaPXZvV
+D99VjgizJloT8xROoXCGFNUag4HpawIA0jTwM0zT1sMJRkGmA8ZBz6MnTsQp6hJu
+yPI0CYCNaU/qFfjr9iyfnsTGiOkWJCFXMHc5qi9lIpLsPjQooO0RzpsM4OX5WeIh
+flMQ0y1puO86DRCDJ2qzN/Jz1fd6kHONxLUlvC/tRK7Mn225xL/fo5A7bolCbQUJ
+GHioCp7tSVEGkoWpPKeLfOAxa1T0TCV60MNSmUhWXYsr6DwbYt5kSYsV7DaCaUug
++OQa2uopO1+uYT5Fe9IoDKDgvQGQcSCwUa5GDcAInKbxIhwA2d5ZzJ2UNddS79yJ
+ASIEEAECAAwFAlN5CDwFAwASdQAACgkQlxC4m8pXrXxDIQf/R2VFlwH+z5QCSZTR
+idlO0eMXYSEpleu2Ee+xx6jcceHVh7QBDsSIpRnLcVnZR2/sbvWhR/4tMd3Ljn9E
+k54S5SbZchdiOOXe0nHdkq00NA2dhkNAdDY5/oOq5iMCBUUXl+b1FfVa72Csvy47
+asXlRsYa57Q9zr4H6msh4vhHv1T5PvUHi6wDLzZZ8SLPaCySJYkexTzJ5jeFf+pq
+x3ovgGwi9wBX/5yaEKAU/FP+tpMz+QypB6gZ9s0PJZ7zGsXfv+Tm0+I0p/kbq7qj
+9Ou8c85/JS29iqp+QyvLWqsCh6PZIp1eNk2v55Tee6EfXp0qtuAq1x6H491Bi5UU
+CLJuYokBIgQQAQIADAUCVU+vrwUDABJ1AAAKCRCXELibyletfOuBCADKSepYziI4
+Xwl9A4fpMgm9QdXE9bCGavyX1432xBR4py1Qqhfaf/zj+AGUubFWtj5NUETRNNq7
+4lLqkEqO5FavgpCvO3OzjWKQOiNDhzrXiXLLJyNr9tHAnFHblD+5EGMuvo02XURf
+okN4xke5ryASIyu4f3yzBl2KnvL8GXCpeN4yqr68Hm41b72EpXReLbMUY4KqNOsG
+8wXY1S4e2xiK84Xls8/dyuUMecszSAjKrBf+gn9zOJxmccXvJ1L37lA1iETnDR33
+Jcm6UzAJszEsODhYfwEOZqZoLDbzCkeJUD5ETjFtCvqRYIAetLoyfy2eo6AHIgWX
+5P+HiAGkWWlCiQEiBBABAgAMBQJTitUaBQMAEnUAAAoJEJcQuJvKV618t3AIALME
+aog9aISX4Ff7vk+W8NE8X0exKQM9tOv6pX1VcV9+08ko2B+2evVeVx30qN6zIwdl
+MdXYFDAwchLu6OpxNYypbX6zH/xukXoEU09ZEz0ddrqmj2K0dJz5UKNeOtlAifHg
+1EZZOc65KSAqE+b6+HKUY+xbhm7IVgqWsZqDIUlk8nU6BMhrkSe6aPaJHPHUawBy
+SkIZFBSpxi5Dj2sV+OA63ji3fDedQEg3JTgJwPpKAxY+Uz3CNEElBdXHuvIFiD8S
+EE4lDSdVKGqHccHIv+jUMGr3DNKYXfA510Q/+4/ZLB+LYIsUO9wwBAF2VIa1LJJF
+uiIzVZsNAbnurFDsv1CJASIEEAECAAwFAlXFA/UFAwASdQAACgkQlxC4m8pXrXwe
+Cgf/ef3e5iwomj0BruENqBvecStFkcSr9gsXetP2JoFIab2pqXF4GkiGFTcIokAR
+140/Ha3l9GLk2psJV3TTueaeI6XlNCHlTFtXYVKyD5W6wL3fLYEuWIHuuVKe5NGh
++H9/5/zAhqtNleaC3B93B/IyJs5g9aA7Cxzw3E6Gwo4RDBDqQ3YY/1iTkBZzxNkl
+jM4g3xJqeIWcK16qC+MNwdaM1f07s4tkG6K5sGu0U5R+X8raTFvAG36aMDCnPAdU
+qZrsD2SxBRvDqJQxcT7oke5jYgjkcoMuzUKS7Eg+E67RU5JictWJHKseFd2mdgzD
+Yzc/X3zOPpWiiRlvlM6y1b/sPYkCHAQQAQIABgUCVesKnAAKCRBrSWZYlD+rIGyT
+D/4v/SGbERLd733aX+qicSYCgkzZ/lpUJoXXZLujeCONR+W3ZohgDMnYTVcDFX/Z
+w9HyrLoM5+XQZ2WKn/KoZzeoonK7JEGDHa9cTO0FLTgZUU8q3WkJ08kicNaD57iu
+TBbsdK80kmdS9Afu4XiBXLNXVvRqyfdXgW2IOo5pMmO9pqpCwpxpOpQ0LIqKIour
+tpTP/DZSIxaAKKQ67H3jKP1imr2xSC21UEYz6k9Z1uZRZdEjvwuNpcJ8boXI1acc
+VjOmddPW88+3TosZefeXRIcSX8Ja7SpCIH+WtYlPiEPSw+WYjT1xtx06WzWpmAK5
+T8Z/GNS7mVi71F4VgO4Lv5cgneCC7bKjIxYQMj/g6VBs8WwgzgpKztLHl2+ocdpy
+I9+dMnMeS8XBzDmW+OW7ddakTUwx/3qYFOqi9c7yITIT/RQaj05wlM9LKqMaAnDw
+3//SZrLIDw9+MOkp8jGl2wuois3DTk2X3iQqL59coW2zD77pIOT7bS3FgLMKDSPK
+KUCpOQdSRZiADYrCFIaj7o/I7OtVAPGn80WAgnBvK804w1RZJ1nPcPZG2h2i0mwN
+c+1t9no1g9xGgm/AlfrmaOkAjjgu4XFkH2Qf4cIpwptFMWGwAn5xMltTNqKVOqLV
+p7xf/GT4e7TbnzvTED9ywU/EyeiLIbe9FT1KJ+pizIGE6YkCPQQTAQoAJwIbAwIe
+AQIXgAULCQgHAwUVCgkICwUWAgMBAAUCUkNlPAUJCkElzgAKCRDHRs+p50+ksNV0
+EACfrFMmAcfIjWv/NUz2ORcDlpGnGtPTP2u1g6ur0ogGgevjlZAxjnnDUar72aX7
+MyGShdgvTy9nW6gDoFsuI3r4mdy3iDoNpQTHVFhSZ95zM/8fx2cgck5bEqFMVbjN
+IPB4FcfHgDJM/6wXfKhl342vdKMMFiAINE0e7BOcFLhsubltReLQdWX+pY1i4uJV
+W5YgAINUk9u/Ell5iHdDz56BRZYwDXHkCE7wOp14+KpobxZGnuS3elFswK0wVhxs
+oxZjjChG1xrYwtJmaBrQta6zq4ClI0sNQwbh/JmDQUgA/rATEjunk0fHHu3F8RWg
+ZsfwpziXXwqjz8jjN2qoY3A9OTJL1TpPyKs74tSog8UJuOtJsjCOvwbGSZ9D+Noy
+XiRF4Tt5PaJXRCcJAcc/ETB+KEnI0t23GWP8duovQzyOKC9Lm0s8UUpLk5wtg9bj
+G7DhBHJsTtpra9hY6vgBLvYYL0Py9RTaRHoeaJmUaxjcJmNPmERufxkbR7tXEyKv
+ErU9gsW2aWdH/5EEW94eFKP/Xa6GpSryr8GjKiXhH5WGeHNewGZ+zoQupOPlej8m
+3woG5h7KnIOXGdOt1ZNHjZ6u62cS3m0zxP8FcNG09XVp3uwVx1RQ2ZaXny6BgADF
+oODU8H1DdfulqFCzOVJe4SIhRbpM2yzJtUtlBscXIx1oPokBIgQQAQIADAUCVtnw
+lgUDABJ1AAAKCRCXELibyletfGdUB/9BSO8Mws1wMXp05tlPs0oIN4BZ9Sv2MWB7
+w6NqKHrPaNDxaZ/Ol1jB5Ln2H4hJPgk+wvYdH10n/UvyOqCsD/GY7+tjZ17uUmE8
+ZzfpCy9soJqs1SbYQe+bZae45Y8AQiqVSjBambT1kGLiVi27VtkKQ3f6aK5cNZJE
+7YkzK2VyU8FCHzbsrn3N4MC4IvfuSmquKxeQTPASJC4462e2pVbs68wYwroiAb5o
+J/lM7P+zi962K0DzFG2hCaxQyYECBzItAX7IZffQ/93bAdLJ6+VvKzD831Ta7xu/
+Utow3PGs9+WZcy9Ns3Y+7BXGHuZWcha6bav4PDmYWUZOzhS9CLz1iQEhBBABAgAM
+BQJXpyMUBQMAEnUAAAoJEJcQuJvKV6186IYH92zIED35TqZCACdBBWpK5EZofS1K
+Oj3guTI43hRINJ2pqj2fhd+A+MRmp+4+M/z7njeZER/qHnmj2BoFv6wGU5agjzXg
+Kn5lOVZa/WujMtWjvxXH76wnQ7LVaicNsP6+GiLDRj2BBuloXXAd0ZkbAzxHUT8g
+DFdJdhjIavxx1kBdzoR2Qv2o6PJr2tsytrG+5diTXZxvGASGVR86W3FiVkHULx87
+IO6yQDQhXvZrR3PfyTnNSP/txnfICGRwFbjN6x5XFsJwT2LnQ4CaqDjuuaVxyRI2
+Qe/KeDroLMxoCaRhPEtI6Nli778+j4ZF+14w+rgMfWmKduu89/kkadcw8IkBIgQQ
+AQIADAUCV7hIGwUDABJ1AAAKCRCXELibyletfDzJB/9fIa5MT/FtJZzC92FoNgjN
+PmPtE1W67D7oQuRQpHLYi/KnD9u/8mRuJg9PKDqU0VmJlTzyuAfqmoZNTjvgDAWU
+zV1z1jZVN7rjdQmv0gI2vj7OFbz7xyrScREkCPzQaLCW/N+zgII4pKJUQUPotB+u
+90pDzy0Elk2kGjRWTYCv854J3NwgR5qHWAsODfLeNZqCShxRxfuH0yf20kOO/cGl
+hhLgSISB4cOgld3GTx8i3UJ2Dif4TYtxBEOcCl8Rpdyl7t4dmlhtpKte5SxKcgRe
+kyF4J5I8rx5b6jli1uqUG70q+luCUn5XGMAPJa8qRSHsFgICWYT8YoHgqEGWXzOx
+iQEiBBABAgAMBQJXyhLoBQMAEnUAAAoJEJcQuJvKV618sbwH/04FXV4DGL438aNG
+BGqwNBbrr7fTZOS7t7Q+e5Q2ILQtcf9naNkFtbfqtIZN3uWKyBMgsdsm1GAGk5F4
+T0v28BODz8xSMM3cFwca+YjzLkQ1DH9FPoG+skMv8PITWXf8zrjM00M59ecS6iU0
+qU0ljkaz3WZjkQqYYOOtG70z74w7NeUekBmxFp95TVc0ngPGP6ww4nCL/6qYmfNd
+hEGEiG71X3VNRPNrtV+cXq949RjKXzjSkqP1/Ddx1ncwyGqMTiQJASAXWZ4BJoUZ
+NnSLiO5RslOVhOuwYNf2trpcoz2HtQU57oNC4lnS9gjaQe3t0+HftPWJd5L0JqoJ
+/1gIm8iJASIEEAECAAwFAlfb3yYFAwASdQAACgkQlxC4m8pXrXx6jAf8D/ZugTfg
+jXDVVkLHFm2zZY3mNlGroQb+eq0zykO1nsPvrNP7qvlQYXOv/ErQ0twiuAap2cZQ
+7OAu6B2fVI+hLTQ80KlH63VVkVekGseI/3gVL4ZsdeH9Wd3Lh4r15vIFcWttE76o
+TJIUUWLJl/GIk3j0OuUmYsNPzsRW1aBZwAz+RDVvZChVl/iILY0kRqykiCXUUisc
+NWuNn6rAyiV11Sq0+2gc57Fmv5wzIEjgRkx9j90R+GOZrPMhWsY6uXplWAjjSoN8
+gjfJbnRDrfXQu8wOFnTFMjx10fJrHT6QfbOzrAVd1HseeSDTd04IlOCGamFDC1F5
+WPCz1Mtto0pKQ4kBIgQQAQIADAUCV+0CqwUDABJ1AAAKCRCXELibyletfNFKCACb
+pQQZoG7D0udBZMtrhHS3jSvdnn2Bv3o3pplK7xFMTUSYVU8xRLsbLwCxdMJcA7Ng
+ngzA2fwrlhLRXfVOYG9GRAdNnSNFL0Spzh1EaQQ+8N/f6vtTF8aImHSCiGvovwqL
+GXZnrbkLtMzMzxWMTqXB3hE7jrMYmM/gX9DHyHCwZxu3FirmPtSWXGMcEc9UT6Vb
+rSyb2x5vdS+eEknfJ5nX+b/ldTIlIK3hZCkn5Uf9iZP02SKIQzaMr1M8osW1PAv+
+QRsMDEl10dQ1LXCyDDlTXP363BNaGwsu8fj5GtnWbAUlsn/6ToP6Qsf0WqkY8eCH
+35bsGpjHV9Z59I0VbI4EiQEiBBABAgAMBQJX/iY4BQMAEnUAAAoJEJcQuJvKV618
++2EIALwV5f7CreGCG/4Zzo02MuhxU7Fy6uSjQQmLaumtuEIN1VMa/piey1Lcz704
+qH7jONs5K8Zg2SGIKYBnT7XQji2YlYaDIJStiNKwlyhl6+EUiihd3YgWwS4o7S7N
+r2EWnJLrm8UEPctmNgfSoS1Y6MnjeQ4ffqBtXVk70uiYzn/eLsoR1meuVvtsBpVr
+y9cUqcONsOyODnu+t09++3pUUNXV/r5XLtM34wnJx+pWkxdMUdrq1Kqn0La8hT6B
+iXDmPMTN7jVnRuJZ3bxd0eNnUO+WAI3I1Qk0jNVFcHAmpZdP+RZTOlWIf4tNuGc/
+QFkMwVRG/9EuyEngNiFgEQh7xJaJASIEEAECAAwFAlgP8mgFAwASdQAACgkQlxC4
+m8pXrXwVogf9EkR+YdDiRQcMjAOOEkTnivDnkchWeh6nbitPdEZs8GhYNvyevRKO
+32cn8HYqwls2/vvA+s+Dx5Hu3rEvzAzJCSgQpaEBFtbzP3adGczNQyBKn7yl/jH8
+MPL+xQ+l5ZGGsH4kZxfY+565o3y8mrpawYUnXLsvYSsV9NyzjQ2K4L8uhyUrV/oi
+yQFCwJ7r4bM2pDqN2hkHzDWhnOsp2KGmspXaGKNBlsnJmQoO1uSxKP2mBUOjgKHa
+8X7GzoCiZEL6Uh69s+cIwvn3GH1zW4MhhelCovj5bGBWsb6QRyrw9ghD6uTbuK4Y
+NRFBc+pyg1cCQeDf3nNimbb3AsaApARiRYkBIgQQAQIADAUCWCFcVQUDABJ1AAAK
+CRCXELibyletfNF5B/4x20F/CcPIGncZSMpcVpPDZqXluXkb/SUEWJGzQH1JHT8Q
+ul5CdUxKkag76fm93/dw/z01AaqX/7XrYYFospa+pFDY4mab7Z0iaJjxsvktz5dX
+JTTQ6hSfbB3WeRW5O88WMMGod0wXMDfpDvK/AZNRrJqLOaSqvyoMrLOLbEixtGIU
+y4HmXmyZLJer2agSQA7XXQ74S+8cMXd/CKPJnXyPqeN9GBgREodsG8JoJcvZEtwF
+43ERNVpDOsQJmNPlx1kFkJ0Qv70AXw8AF/1KKlCsqWYWY9cyBR2VJIJG/LyAURdM
+A61iRYJSke0jKEhBGhyVpH4cfGjkdn2X+NGCV9ThiQEiBBABAgAMBQJYMuK7BQMA
+EnUAAAoJEJcQuJvKV618FpcH/jmfzKT04G1HeMobqtc7trK50d7Uyr1KGvv8nlC2
+7B+NIBpwlANHl5Q2x68+SYI3kKTLAIllZyxdAAzyadiE4UCiNlG5Eiarf8Tgz7PG
+1KkqrzymQsju4ARlRD6YAq1x2gEsygglxfRXGXaAOI8VAey7KEW6mhE8hCmIhK/B
+/64N6PaWE49LhoeDdl9GHEIXG1kCEy9x0/XlU4auHGK4+MQZtx2B3PckIMEgJWY0
+oSbguomYwQXmBbvwDP+XNemw8cknAFzjxE6+l9KqrNmC390sNzMoVEGsoxOuCkTC
+RdYJD0aMVYkMKfieljKBEgBhUZNIR4SQq9s3GZRCX4lHyPyJASIEEAECAAwFAlhE
+By4FAwASdQAACgkQlxC4m8pXrXxXFggAsv1S3hr+BDKshO3qBM9tuqJ77MTkyBK3
+tNKNeFHQbDEw78JJ6Pq2+IMdizRghz4ttiF//MoS2Bz1NLP74/1bNbeJ8a3QJu/A
+qCTYiGXYRr7wTwqyY6jcW3RL55syoPEm9257k67BQGgGAGd85vFOdaRoOh9BSbVN
+gYOmA2w36KE5SV13GO/v/lZHX/iy7zd9fS7IoAOiiRwv6iDISOE2hGUSEqAFr2Q5
+BDAWPDSBH58yKabRIzbWbu0T1tuBy9K/YGzO9gNuQn/QDwmnWSV0gwtizLAWsnLl
+FMQJ3wQD9vbMVbvk1mCk7brJVbSb3J7UWMrc0YBf29zXF90250bRPYkBIgQQAQIA
+DAUCWGb1RgUDABJ1AAAKCRCXELibyletfEF9B/wOMU32m7qgw0G2wGtUYBFseo3p
+IA5i0WjFmVxTkyySt9/1P64OGUOjYn+utyz9TQ7xm98u6Lb0B51oy5+klzT5m7Fd
+w2+ZG4L3yBYvjVzX3o/Bb8nBgNcfrFbEM/0XyhAq1KJdSmfGH0v3NTB5Axg5yUdh
+y+j/ts+SqqlNFZgZFXaZrGbQFXYBo6mDOt5X3Sndhb14ZdchMh0lK+tP4FWyLKB2
+rYdHBWGh/FSMYcf/EutQH4zXSE8kWMCTa879gw+8bksYuweRM/2yXQ8ei0lUCi+z
+TEHlXztTbfCl1UvkLoiZLpP77BqJIQJVgFgct8KzmPcD07P5zDa+aOsduOaAiQEi
+BBABAgAMBQJYeBjNBQMAEnUAAAoJEJcQuJvKV618pdQH/0GPfMvqN4i9/LCZPvbf
+G4TrBc9d8Ob5qeNM03aK0W8SxXNf22oikASgvqeurvYGV03v40OlsZA/iiW1F+GY
+LKlTaZR8Ejy9wDu/BqiYsbY1niievipWoUolLc+BkoW7dgg21Krrqez63koWcmvV
+TrjUvFzgIyBKpzCO+fEUhSEvGgNczps0GopKVh4L89UacUqWfkVpohWOWu5SLkpw
+eGRjiVjMATWll91LegrUw26ceuYej0a4jRaWb7KfAc2APzSPB9SdOmn8pG2DnoxN
+P6QMD1FsFyXS0qaJlg84v5GD0h/3XNpyEQbZA6b2WFH2h+IbgpHmVm4iW/OziJhH
+ThmJASIEEAECAAwFAliJ5RUFAwASdQAACgkQlxC4m8pXrXztDQgAxW1KrwEz8U20
+TMlASRYDYROlcUyrYzs9E3P2cVymQ/Hf1yalKgaBnPE1jCbPqSnRCzJPF2OE1ZOx
+PxLIR6XlaIOBGSIs6+Klx87HTxaJnAUJNxlidqw++MMBzGvBsEm05M/i1kwjWu//
+yKRYbHMIMYk0iujKUWg4N42MMJy91zTvZG2CKis/1ZvSmcS3x7AwKe+ViNyMZ3Gj
+WnXIsIJxZjqoy77Oa84h2jyeWLPYXJwfbdp9Y4ORKcQEqnEWXt9ZE04GJTIXIRY8
+XqFtAWyOxHaaQ/UxJMtInxijKzH7Lywdh+UKBhKD4GefTMpXHhk0u9Azi8T2gTKO
+pzMd5UvnNYkBIgQQAQIADAUCWJsIoAUDABJ1AAAKCRCXELibyletfGoeCACkc8jA
+aKNW9UfxA6Spqd7IYQTmCLtK9wiqj27mz1lVnh4mT32tIpcUIYpTABXaNecl+WlI
+KJQgpI48sj2b4qhyt1g9/MuPHSo9s1zRbyn17DY2YrIrW5BhBcc4FQtQE+YIXfUt
+hj2mZUGxaH8xww9NOMywX1fElABWLgZWms6PKPcSei1h2ZDA2HL7GvCnvMGbQAxj
+skPLcYN38ziAmQ4VWZK9bp9ddJSZumhOmrw0JDOpFbxMirEt/qQaRzTL9pOdO45B
+5w5kWWpgw4oztiYMThwTugQKFBH1mbm+Bn8BinbstLT2m/Oej/M+63Y8B1MSlNtr
+/5Ui2/ygBVoVJnqviQEiBBABAgAMBQJYrNTiBQMAEnUAAAoJEJcQuJvKV6184EEH
+/0viR26OvcnW1+/MS8D1YKrIl0+xL1x+PTzkoxTLvmquk/Dsptcmct/x7DEI4nMY
+uJhNFn/wmC+Xa1G5E/xhIthbW/85lGz2GeK7YwYMsTbq2okPGzVo3O3ARND2Zm7k
+8JPN8Qz88HAwg9YYQK7ZPgqQU9KLazovEelRH3qHqvSZQsl/AYclA5ObBz8aaSwB
+4xkyoD+/Mn0svM29ICD+YkZ8oE9DC98fpwO8RNStG+BNcfKBfhXR2aD5Av1aBe2N
+tL8rUGGGFRUMsB4U6XVmGKOq6Fjp4Yuq1Jv4zQO5YemsHibrSvvHHmYtgDgLyQdO
+kFETSzqzSDAt9aKRdymAG3qJAhwEEAEIAAYFAlfi4cUACgkQaqahMzLICpx0uRAA
+t6s1pqItsk+WfKxojxmLspsz3Tb+l0Qq6fcAMWV3WItOQ1GRS5Omhn7Xwzq8m9ha
+j/vgz728NQUtq3a/BlyNdvfXV0QBedUzXitlJXIwop9/MZMD5b0gadMUz/kJkDYJ
+3r1BT9xYsKihmNHXJgI1ZBdn6TP3y+VdV2TiYbOFlQePgY8TeRLaSWqFh+bwMXUg
+4+b6UpQKurxnNMGMXJ7ondmOT4YXv5SawyX/PDE0d07TkO22STfhnwCWJ3mzHPQG
+U0tFxXlJar/23J7GWuSk/WnphCEM+UnrdLJUB+l9kqCqoU5XOMv7LEYL1eSXJHVj
+06NiwS2s0y+/gtPnBfZgB8CDJB/gTrHTr6CedQhmqrCf99N0bc6qdeXaYkRPvFY4
+CgHDRHwXl6oxMb3+fIsXsdT2I9+FIefJMSudkSJA7c7hgPqhdC1OtpVz2hGxYunI
+DlnL+z4Paytoh9wOcIVP38ULL8Jgl9eOhVTfGvBzxA9u6/ga8rbxfPUFzXisgXys
+zpgDB1NNqo4g5lDKCIOzGO1XYpgNLfv12liCjlK8KO+IA7usqAykilSVYb3BbAeO
+PU0cXuyYYtWvcqM9UvUx2EPXQeNi0yMjkW+YDTJ/yy12x/aa5Es3KNgVCPX4ihdx
+maitt1al0bI5UU8k3d01JBvDKZu78/m7vtwMg4Wr2xaJAj0EEwEKACcCGwMCHgEC
+F4AFCwkIBwMFFQoJCAsFFgIDAQAFAlXqhPwFCQ3oRZIACgkQx0bPqedPpLA0vBAA
+weXXQ9L0dDIUN9UAqsXPen1S2IX80iqrQ1Bi/mVtAuk3UzaeNh0nwAZmW1Zl2kMo
+nDBRkMULE3Uta5Fgkwwq20Le+fHOsKdAFHmqvlbntG088K9dsWf6mtPPrPZeghGm
+xWf7P+fkTD6H5mQFK13a53sfMBoPsrw2Wkyzv4eHPHf/yLb5G2H+cTOUT8n/IDJs
+TUllJEkg/y8gwP5NRuYqsleyqWgGrFMwgqDlPAHflilIs9Aq2sH6lxgN6t9zMdj4
+mMvUpil5pYbRLm1fdnP/FsAR2gcecqRU4gXraeLwUE2vA2jLD6a9ee9cM0FtxpLb
+sk/0+mupN0T2m5exVFfmumyCJhnONdfbgnxPMRx5K03ah1whJinXAWAzQOYQbJej
+moDL8oI4a5F2kiIyxziIlTzCn/ZFvPgv93zLBysa1H1Mrz9TpfLoIgjhe1fCVA7Q
+Xdz5xeYTf2c2DT8ssFM7QSAlV1pw07kBvRrKLMS1qRuO2hqzm9ZG2n1IywdG68V7
+baFkb55T8xpMKPtlv9a92Lt/4IYP/b+IzHT8N7j/h2rcRAlfgcOUl+zkwIUHf1w5
+j0gHxA2CIRVknSpT4OQgKvURqNJX9oNAtGpUeMe5E0ny4VQAKlfu131tsGJ998Jl
+JR2sFSU6O87/6VbTj/Rt4rcYD1uuXLCgJ1fhlDrY6NmJAlQEEwEKAD4CGwMCHgEC
+F4AFCwkIBwMFFQoJCAsFFgIDAQAWIQT2gs3MOdwP6uEWILbHRs+p50+ksAUCWa/z
+hAUJD8yAmgAKCRDHRs+p50+ksGcPD/42EXfavqgtq6ewnVbuQEMHjZYWwE+l4vYY
+QYgNaC3AtHb6PAhSQdeFNxIbXA/69RSlXRVgOxM+zJ+YyG+fK71NLC0tKG7bcFiF
+HhkCrfRWF2EziPNU65TZuDr6EOah/ddZsvVi3fBMQUhWSetrynmom1JazUjGHs+d
+qha2AutCzWspP0IKveg+S2pqpOm+mL3ZZbSYBL0pwhAWoUJA0CeFKDYsBNvqyKgA
+CzTOPs+9Pss0Omk6QfsBNCATuA1J84zBWQOmxvbv+PUhd+1iLKRY5vPLJUzN7pnH
+1Zv9LvlaHsPohrHs/jrx23rQlO/6ewJnS8BGB3L3W9wHsMptEXCK+t+VKUyLvJS+
+GXannFykz1YOqe/obLpYyTF1tm7tREDTdkFSVwkpDmmZ8WZs9p2YBs/kB46g+Hx4
+YtMKXw5S5OvOPKjvhp883+wPDKNafulVni7jdyV8WAVaNFveMw+1T6XTyMQpL/bY
+R5rlZdguXjbWNIoZTyvDUXcogynZ3O/vzq8LFoJdw1owHEeDzxXX7LEJ4vsbIdg9
+a8S0sQ5bhrdk0oLVYd60GwvwqeFtwxlCT987Y2/OivkCFmY1xTG/K+4cEyGcpmg9
+mGV7+V++Umx/T1pXs+i4NhAb9U0xXrXqlI4RJx9izSsCdO6411I3YEGdyuDrC866
+gGCxn8ojmokBHAQQAQIABgUCWninQgAKCRAD+gRj8HrzGBxoB/92uQqjBUn/vEuo
+28LCY59P/J0Cc8lgkK+k9D18jFwuoEZvK+8CbJ5RbcDYhIAutqpg0LL/joP4Sihz
+FrYIFjaNHnF6uB2NISP4zv6GsOw05uuOfDSfztS7X21I8DZcF3x9al1FX96t57Yo
+rcvy8YBix80qiuNduMHTBba+mpmgyoBzUTruVAaUJOzQKjO8nZmmMU8OG0V4g7c4
+FPwMmXPe3JflIjVp6CcPnrAAr6wG3vvVDJYkjNzvwTJcHLiVm4wkJV2Q0ipEiYmg
+JTUsGe59pJIoCEu06bfFfxYvhPSLoTDcwdZiHw7sdfU9ivuyqclxd43x0XAAwPYh
+lpk3FN1NiQEcBBABAgAGBQJaeKdCAAoJEB1uaW4k3arGHGgH/jxkyEzZHdGgPNP3
+MhHNYqiFlBpt35BVeNJ3eQ16RMYROENcVyIr310dmI/kY/EJIWKskXp0nphgPa0C
+adASuadCPylhF45gFOxiCAQrhnjwGmZKc+paHc7rXlDQWEmG9qR6AsCa0dmVkeyv
+prfqJQc3/FeXFASJZ/pDjWA9Mvh6b+Ijt3Mewy1JUA3jnejaIeHDDWUFGPbf1krJ
+BpG3yiQ+XYno9Ne2hQrLjBGVRQO9TFQTDkWI2kSJ8oxK8MjNNWNKp72nT2z7NhhN
+efe6e5eudnuYSW5kraBAMIWvWmok/xT7TgPt/QMr2p9ISScL7wCOvewDhaCy7WpV
+MwuCZqCJARwEEAECAAYFAlp4p0IACgkQVb+chhMHnZUcaAf/dE0MwvGP8tjUNEEW
+C2Nsy1n+P4djuAzxgNod86MRKrWq06GiqAetalg+kHx2Ra99T2p9TM1ckrl1Wajk
+bgO2myqBrcdmmt/ntkHEXS/Z7VJRtuMhwXR2nKzArugOAcmWsydw/dJKzqHjhvCB
+0N711itPQR6x/C9sPUyWB5mQzGRvMAAXUYbq+s6Wu60BfGxs51rovNtoxO8M7uO8
+ZqQkC0XSded9clWeUIC3YTJgmcqJKaLRPYnmILmLBSgLxsB7IXh9mBTfVvxLvJgG
+H0SPcpa5KFQm6nNG3KDyVIQJPNOtoV4RIKQVthbbecW5zSUz5oFEyxyFp0qLsnJX
+Sdtk14kBHAQQAQgABgUCWocbzAAKCRDUK/+2HyPFvfO+B/oDajAlGp52RLMye8xs
+ICLor40CFB3cmXgfmk6tq0vF/6vVzue8yU2pECBn0ig0ELGsDXTM73GebePpAt2u
+IM6hgtWyJuzWdU2K+dpO4fOeXJwT4XQ556qKeQjB7keBnx4AmMjX0SuSDrpNpxhv
+EjtHuN/DpCg+SGTUapVUg9rCdJaupnbIeECijq3mjjz97fgtLrpBKhIIRkqxTqdx
++bCJpfWg/B9NgmObvF2U04Tq6qRG21sOlgIdaLoRekDdnSvE7jTzdpEYG/KwfHO2
+KQlquXaCytp74zdrESYJlkMw4zph41dQ9EDy+reXxh7zen3J1LcmKCxa8d6ZftN/
+XcGyiQGzBBABCAAdFiEEx5dJCsk+2wAGFWgK/BwctoB5heYFAlqFrysACgkQ/Bwc
+toB5heZokQv/bzBh7YSovwcWSvnr5avVE3xTSDIgaZKOPT6VQJCQdu86POqkHNNT
+wGdsQAwxmJ3ZPw4uu1Kj4HeNrlemx3v+ZV1Z+AdA8XOlxey88KFvpWjnQxuH1SXO
+sLlinbfzpoKoLfH5wOHKBTKPECB603HAjSv4KI5aGJOMOWt9tbJdh4EhdAhwO8n0
+LNATZBc9n2ElLr4uzczZ+25j8ALLKu1YXO4g9LJSUgWHRdiqSiDcGfTWzIqAg0rC
+NjOSfvJfwbYBgkfIZvaQBCtdRVr97D9Trru0FE/gUbi5rTHIp8bpAJQyiwMahShh
+4JuQpdDYsFYR67Lo30MTWvxaZ872wvq4ZlsTPdVN29lQiaqq4Eb6mVmkmA+LU4G/
+QCItQmXluCUJK7nlHsa1gyUVE3cRSCxZEaqhqfuhsI432XwbqebjB4UflXEUB2U8
+xw5IvPp9ZQx4LjZp355+7eYNBFgofn4V1xurafoJ3MReFK2ywbCAnXH7LuNPbTjG
+BrcKxQTqHVdYiQIcBBMBCAAGBQJadzW7AAoJEBkOX2s/V8OEbnkP+wVGVlMHDq/Y
+hcG5UqRZBolhvfy9/Q20G8Gu4q2oEXhZk56E4iOYZsfGlylNmglwiJv5n3KYEGLZ
+fULl4duTqf90WpjBM1VBl2ZqkISnELQnjMeYSDwuSqS1+YeXJMmV9JstsQ27Nbcf
+ttZSHJVA7dSPwZz/zQk1bUgLJupbBzohG+VNziseyAAfjsfhhqCkXyg/gfCYdnKC
+H3J9nTW6HJf2hZTeMXZryvyRb73C56k1gDS/oPr8YCmsPudonNuqKD7R0kHa4NZq
+chd7FG8goRoeXj4ZZ7uX25QnZiXfp5+u5NX+yob17LmAN4mQ4LJoXhfByMD78cPj
+v0WfA1ReIIvLgk1f13AFkTVCi4YR0CTDVnRnhL2FZI2Y4FiW4W6k/V2qK9873ttU
+0DUFG+nmWc5/HjVLit8lsfVX0hzZTopyc2v31h5BYl4Z8t0OFNSAB1KdlEmbL7hV
+bacS+2NYw9fHd352DF8lqohTiBXeYNZam3rZo7IJCmzclpAUBBSefdWxS2UMcy1o
+npFqlTGiYKBhXENcKbIqpUezPgiWVKsm7yD4Rck6C+9hjaYrHC0csIJEUzoCtk2A
+aIYKSdnNcVskzEBj/piNdJeAvgk+6LZxPCDsSaBK7PXdmIGLDNvQjwPHyAkFa4yl
+VtnmcpdR2ezIRMJvELJYjDd4KshYsMfeiQIcBBMBCAAGBQJadzYRAAoJEAQONxgs
+NANikfgP/0sVZ1l02McAZva3KTDy9em0igTkKD2z38SFzK6KpUWuc3hxCAax9Sdc
+49BdB9bJrNfp7dPYVCsbyMPx7TaKD+Hy5w1xwYiLQaYD3AMAyaq4iwh3cJ2ww4cH
+bbyGncs6HY9UBUGQ4lb/5YEtumzJkRIgVhe4vgph84+Zf+cb1f0vD5k1rdQ4Gy2V
+PbMllk+AKYk2g3VXaX24152xNC5OQ7Ccm/RnEv5d0inWvB0709NfeYx0xsWVnH3P
+O0owpcXFtKipZkl8fJUYfAihPNtfKrpKykccaNrKjnIWak0XxntSSNeOtb58R0VZ
+ueEVdr54XvHsKzs9kFChdU6CiuNA1bx4oi9JOeYV9gSrHOOAcxOWkJh/cNExL9OG
+TET+ZEZwpVc798+4KGrdWBgDLq3d4kPKN+JY1j84PFkYa1OVZDE8KiJNEtUnJ809
+8qFcEYBuRma8DsaJX14dmPzdRWeU0WJmkMXRDp/0vdAploc5mKhfGlPSaZTKqiF8
+tP9ULKJL1XuzA30qLHyDChtoVaXf5C3uF5hY77S5WtUUUjZJG3ZSWmkoVX4AAsH6
+5dqdXAjNZXEK249HMbyyWJLL0ViFm9/aTiNHnMZuOO+xIXc8yxrQQt7C2+P6IMIl
+OVjsjbOTJFweZTUc0Pm4q1U9zzOHKWtBy4PBY/GdzLO60IyW6J1SiQIzBBABCAAd
+FiEE0CwjActbwZLhid9fX1f+weglTlcFAlqTIUAACgkQX1f+weglTlekJA/+OjEg
+Gc8xfIgkQhb9bs1Co8B6KYSBS6dSMet0I3mmJMO4cTvaBDVwys5twZZFEw4oayzC
+N7rzHI8KtbcaYX/CpKjKsCc/4p+5ARItU4mwO2I6GOD+Jxfbk6otbR3vhExVCJiH
+kNIMqKZNCJVgoAEV+LhOPRNJKHc5rjUVIOh4tuZz/7g0BqYAwPrJS5+HGRZbD8EB
+5+W5kLQbOrhy2lrHarw38oec9h4tgL7ZS6w//io38v3u2K2T8ODuzjPHx/N9hIgL
+cev/sonulatCh+Uf6x+tbWEDtcgNZJXGs5Oto+o9ZZTg5c0p2V+ZbEf+s15rKgdH
+Yhd4H5wJDhECtCDQ60Cq1YwZoV/Cdu+074ydez9FNNwOFvOClDGrNqMB3BPf3f/A
+uof6UBxrgUpmnbGioifI0O8muiPYKlBpcSJDySw57y9uP/ixxAuUKqNu6kWmcfEX
+OWamMDRo7+kdrNA6iJyD5BpkWPK4knGGOCX+oxSFcjwt9SZfV3cNn1lB+QDIxD+D
+Ao4RZ2zqtU1+kbg7ECa4xBuF4um/g+msMAKeNJmCOKgoQ/MyxPEDBpFWKKXlji7j
+elUoh6+7O89CQbnzrUX5m+7m3v7+BhbVMzeW5Fc4ba2CcOSKDvn7e/bQQQ4UYW/S
+zPljPQIeGjQrG7kp4/3qilGoVAxMaOzzIRvR9/OJAjMEEAEIAB0WIQTVeSxMjG+N
+6Dd5SdH0g4Cy7I+USQUCWng1RwAKCRD0g4Cy7I+USVHAD/9C0srVziETwYZi9f0s
+YNawjtAMeFbmQDVMbTpnlDhZGxXOUMBXBamEU8x1E3MqKw050B5aHmAD4e2ShfBn
+EzaMDyqkNxxdb08/YscyQEG2B8dQ3mAFIKOkT1ZNHDRP4NhKs+InbI5wHJ2Tjd6m
+YPQN5n4uxDfMrfjZGrRLqgX7eV9I2jrkMUxLXJwcnuRH8Vwa9LKCbPnlRKIKeCZW
+E2qK1q6+KvjdnPY5LSTNO70VdTQHqb/gYhPOyLcrBX8yFkrQB/x3OzyD4Irvsb+y
+GLPJFDf4iatuL6ZyAQ2rCs5vVgAmAoXmWYzojaxmzmY7ZDk84o3EsObSnFucZpD3
+w2MXJN7/fTrHQu6cY86jl8+fvZ5I64HL0ykCfnudZdyB4XmHLJU53GMF6DlJBqvI
+Sqk9/w/qR4DHhbFe2SdOP+eg6CpB3P2oe7Fw2IeVtrzNiyizZzPBorIU5qb+Q2NP
+7pAUbk1gHGzg7Y+zpzWALPafxbgLKnTEv3dwglYtWyRoUfU4+/qxmCeWySTTk5MP
+YlhjSVw9NlHc3gLIL9Zq25mJsEJETdeosjuOjMjguUUHoVf2yMdMchoclbi+a9nQ
+ksqyn+MDZjJ9bALg2l0+bIYtx0wj2HnprNPZEB16L/+H2rQdAYfwWNfTge0LJw6y
++2RYy1yZGU1ufBeMjn0DLidZg4kCMwQQAQoAHRYhBKKL9Aw+VRNyZi0U90Gq59zK
+PYNRBQJaf1+RAAoJEEGq59zKPYNRcCYQAJgmVLk1XMMMuH1sjdCR3etU4qAYLsZo
+N75jYLFzjKtIKgQJPsbWS9Mq7P4jhzoDgjV55HQgG3FlWE0QfJn0KOzx3VoumCKu
+GV/Pu21MSl41X6rbOTINsaIda8MrmUonyY7gXslIRobYW1zRXfPlZz9S7f2e4QFQ
+CyJz7/VpzydLWrJoKrLWTvV7/8vkEBz/mFUusllLtI0I8MKl0svLaAezR1dzorjJ
+R6bL3Do3GqzBTAkK9qp0q2uabzYpeCJfY1u2H8gLwcrt+A4rRAUCoXrlCvnA+LjX
+gfmK4wLd1rTXG0tFJLvHiggLXbyCzd0VlZU+jXfG8/gJZFxq36FxoI8JWip0xZoO
+p0cMMDUSDXW63UM0MX0X5rOcRpLR7zdfBuFCqgyrNuCV471X+d66n8fpasZWGF8j
+fJI9QXZ+mV/rtSdZKHoU4TrhnNHFW7rMuG5PaPV9eBcbzoSgEwqvAWcznnE3ZkAe
+SNw0tptHlBcXFptHvWr9EXKJcmCaKupgjwVk6A5UZHe/c3ohjPIsEuIxLNbslR+l
+0mHE7VKvR9Hr42VslerFFVmTY24gFXhxpLZ3FTtW4zQffADmA7/LHTRrMzHD9h1H
+NGnQqQcGHJHXh1YFBzEX5O0h416bXCBzW0cE3s81ytIL/52FMkNy/WCeu2HNm/kF
+YW3+XxxHEYgAiQIzBBIBCgAdFiEECM2XKpR13PgSXc++uIj7sVEhqJUFAlqJhfYA
+CgkQuIj7sVEhqJXr+Q/+PkVJoK+q5PX+sRt5SYO/emMODOgWD+28S9kbj0u5pfV9
+rEXYkac+KFqvKHchJU96COgnkR+lfKvDchABTcD8tbtPLsTE+RBOGsAOZ56VnSBI
+tiK5dbZE/wYnsf5MDhDviFi2pRkI2SKpvwbwM8wOHKeGTSFQfB1MwVEVgCsyaKOy
+rgazfEcYrzJ/7xvB+dL8U7x/Esarjt979hJ+89IhYUHoZF0Gw5V3aM6dGP9AFx77
+rj9Ldpvi0dcDtrG+MXn0SS1cjit4/cljmFIUOrUA7Vxw8KFh8krWr/07UDi4e40d
+jJbRkbvreuzFXI/6lPDiJ90LPDhhZDkpNYm1F5zIL1nu5Bbv+DSYTu1jyzYdT07u
+WbAE+fm1hdXm2ssZRx4xQwH87xb1Tkw+NWS0qMV9cuIqUcK/Ox4CN+aC1y1cxtcP
+oFsTjtFHVZYBhWLnRgiDdVrZoQzRPXr0sNZQZCkuFdajuYBQ7IlbsZt8CFj8GVSL
+UZA/OHuJP38Vi+1j2kV16wdcJLWFlC5QsoBjvPOIjFoTj8OHqcfKkX1F3qAeL8Pl
+Qd5jBJHQbSsfaxT1kunlp2ndsIruvq7SwKNOd9Acp8jVwfsA6BygO3jbtuB0DtaN
+Dif8tLbjlUkSPkqU2vwQJ+iFReovvavtQg44ghFihGzfKM91jDWZaHlwg4VZizSJ
+ARwEEAEIAAYFAlri5AYACgkQzyZdHxVmMdNnhQgAhFRftBsKuHrlx4ok0lyAyJXL
+VkGLJqnenT9X3RPMb6Sy0ZP9cZXj8NBML+9IKyvDXkoUGqt2fBG5VoxCIksEu9C8
+gZdiBSC2uOzUNEHRvCrtEWaDk72wR6SDPgftTaG7R5KGOiccEeqBfA68R9h5rQed
+oi37nyPd20RGNIokWmZvIRvMfEjBxkTHEwu4EKPNFCPbhq3iST7TAoPfutXqc8tb
+QeTsENx72io7NApl43YjwLykdwkJL4JXPwaEmowwXwug70wCE9icYYlIPAikul2C
+tKg+lKS5BgF1FxcUPXP+oqYaoKSySKmL1nJNKGFqGyWOxcTQ2JEs5dhrKMrHcYkC
+MwQQAQgAHRYhBL0L9bF0Nd6B411er6UwcIoSYeHMBQJafcL2AAoJEKUwcIoSYeHM
+I78QAJg7951smP1hT4fJsTuCAD9UoXG8ryjH3ueNUaEr4dTf5eIRlrA6no1SygLV
+R9+478QBR9U2X/pkFhu10hXei8oQWf4kg8ab7LYJPtY14a4viVwDPtaOCmkunv+y
+VOC9VyyXaXv1O+S7fQsXOpYbgbr2lDplQ4YspCQmV9itOGqyt2xH8tJ6midMbmyL
+9QG59R7U3KGmU//f+gV8TsxrWAkuSCq4lsObvc580pVNn8vN4q7eD1lCaRRzqyAQ
+DNwjUEB2wbB6i53bakdzZSLlvvwRH91mwRJEb8BVzTG9iHqlJgRoHGXYnwn0TX2i
+okvvmTOOlqQetUHFIPRLxJZJUUPpkZGySJUHS4/2+qlbtq7L/Y6RaWMKHvw0EOXT
+BsCvTy3QIgml1i61WvNCCstW0rwiFYZxkhXORhRw4ieXJ7IdwjiF9ZCmbGTSKud+
+prkmRk8hCFg7Ortj23JiHx/hN4naXnmO6BamNUrr9b/uOPD6Ry8BoVGLIG+GbfRg
+PSeKkwMS2jEebLP6TigF1AomeU5XRxUvaXhFLdeQDyYsABkY7XrsFOKlWCrwMX1T
+Y+i/m092q3WQ+WI4DQAgMLihsEGHGHtSq3D8Fx2wEQ0wm9Jn29ukF2K7O6WyxGBQ
+DpqLnhc4ZMJPHWV5Sp37WoDAdDE1+aEAoXbj3t+biECiE8HHiQIzBBABCAAdFiEE
+qc5hbfuRsUNbluKO6nPmGTmIDg4FAlqUCWsACgkQ6nPmGTmIDg5r9g//c3+bADMf
+pTLQPgNydS/nFJvLcAdQcxMEUi5o4sz1ULmIsdt0W2wuPTUK9hYFv3phEjGDfrd7
+fbVJ+UAVy5lqLX8duQXyGrkr4TbBH5F+UkKe1uIJH7AV9Qz3uzt1GJ9FflICIYqI
+WZnkqChLkd4clDcpZZNducMdIS8qwsiazAzq2mR3xQbLWUMNS0e7zAv9viBHrzEz
+VuG52VMsSCAIIRk35epY8C780bgvt0fVq8DHqM/Djq1WnuXY5ZtfRVXBCd12k4P4
+VT1IYmPpIKOYwSd368MwQu3E7yiRdxcJoGoBK8CgScWogo5erjaCKV17yj0olBoc
+OeDdY6xt/G99G6ngSuUuVtpvBVu5axUk8OBYPPuqlsqnOVJZ9JEqwHFSN6GT+wg4
+uDJcatyPVSWEMFJijMlkQPyfb8+zasqwmJ9pkwN0wfDZVC7f5KrbI/3B5XH0uiNI
+vyqPfzD1vY3hIwTV0wiQPsrU3NjWFKRxMD/KtUB0p99yoc8jaxgymgzvq5F+SKaQ
+O5wX1uEjFd46fpP3JeKY5yF89wC3MaqXpGfkjlWE/HukKWMSs5zLYgoMzusKYSVV
+wz/DZWK1nmIo0+8QGgGXODkPbAFiiMlqyARrz1szwzOw6nW7zHfTwQruNAGb4UZS
+E4VOPBvHV9E9C5jlyN2nQmWZUTYBZrTr6D6JAjMEEAEIAB0WIQTHi06qptaDBBBX
+kT10NYe8mUYnkQUCWpQJcAAKCRB0NYe8mUYnkfzBEACnVD8Fh1afIVjg9J1Rh7+l
+lNqqxsM484dhkrcAnTQrynPGYF5kkOWW8PPWrhqj7yLaIF0i0fjjfCP/kDDvYyd0
+6GKTO9yQFLzzV4fzZ/tHhkFIze4Xg8kt7dGgR3cvdwGCSfs1VM3UHF+LTOoxNfV8
+9utXVj6KaH0avVv34azensirc3onJhWXHGMmZwEAOa6Ms10K/ScC1qBzmbVdTimf
+8azpS176udkuMNCpz0ty1skcsXngxUN/kdauV+1abitviZThip4yI7JXyhXA4+pm
+CbTdgirp7LYOkVhDbef/EyI67L8Pq3IosQE4lhjz2Gth8SE6WEn7Vnmhy37gAmsx
+5y3N+Xnq4cjPBolJs9k7v2j5UZO3FnrbzUxWexmSrYszPJnInhzexBJuzKXsTzHn
+9l1foNziLrYVCHW/iUqnF7C9bmqlSjlCjQz8YntfufvBfig1kfF3LVaSddNbctKd
+6OwysD50sizIcVk9IjDLb625k2aFKbpdbc9JMFFh0QzH7iZsDaJqfjisx8V7QHy0
+gJnFLuyBnUopN+0Rqnv1ORBFP6wJUYMonkw6bL+GCEyqFE4XPI2nCn2wJE3j1pYu
+uPcpJE5ZxZPcsmSkekLDl8xbb2vtimL7ezKhQNjTKy38YVETErxdP/qTyACxqbZ6
+i3ExPcxmhs8c/g3Yrko464kCMwQQAQgAHRYhBLiPFpeal4gSgZNFWRE+JKTjma8a
+BQJafI7TAAoJEBE+JKTjma8ail8P/RzSILN6ELkkjhmwn8QKuZBEn38+kaYfS8bn
+Dbv9MiPNe7n49i65JOxt0gtM+UzSSNq4j+Ll2xXQ5wqIYkwE4QLCV0PehSd5VUL3
+HmOj0O/txzPY+eHwic3FHAzFdl/GcS+ZJcsX4RnOftAbwTLtcMuMJBvjWwnF6bUe
+nEvm05K+fM8lfCRqla4O9eAkmL59TT5zrSiaQpbTEOer+jrMUUvDG5LK2GPG7tpn
+OvgYQWyK4nOaeTUWlZCBadnHMTbc3wZ6p5wcPM6tq3332LMmB+zlVGr7enKZ7LAZ
+V87wXnn3ZxtOxeISLZvRcjK8tn4IQNsAPgcD7fb1BX+oMXW23rCv0XzLZT+FUY7f
+Fe91djSSLJ/rto++wZgjkU2i1TfhwByZD1FsPliWIm2BX90tspRmCylrW+7g3TpE
+8Aa7TWvHL3xBZlonv/X18egLMOA4kDly60u9hzAJNqbuOfIv6gTolz5q0nXC11Ci
+isjsktkAGWVWoW6PQRxAMlH+vWyQbIkUeQv2kb1gPHFmn1OjyrUDYWNnyM5cWEiz
+skANqN/G959RnD4EZZA+n9ZxC8WPNUFrhjMEpB2QcS1rqqJnMnpqzIjKY/t8HpUq
+11JxUXFM0C2hGHgdLiruPLwRA+mdfMCdCSDDaSjAy4+IoSKE5rJynuNPgDiKhpMq
+9vIyWn50iQIzBBABCgAdFiEEqeqQgXJP+uBITDWhqBzqIryMfi4FAlqHYv8ACgkQ
+qBzqIryMfi4OuRAAgrTI2VbA7+967pNYOZd3rD9LcDlJPT0fuUWrHguByVyn29Jm
+3CYZO/hg1CrKUb3P21r35F2FrACoe2bH3G2fa6wQfFC0n6qPVLGUVIx97ZysBETr
+vntUCL8reXD9eE6rssCcoxKMu9dDV9t9T6yaD7jBMI53JwL8BrPmM6zA1lE1ZtUY
+JhhyU/W+Fvdfs21P6Yp/Wd8UBlgUQZRv2qMuXQmcQXAiofWtaSk1PaVx0LakNVmV
+wa9J5ENoeftST/SyYhm+DVk96yhQi4dyISqfBHiuDkyoP/d3QfFgkidp1Yg0MuYx
+tToYO+rFmjZIrP+T7ZE6pp3yC9rGilAzr/cjXc3qipZjnU/p6iOnaVdERJV9A9zD
+7jGEg2SFvFdAkC56hMYjJ77GeqgzHn/zLPH+Imesv8bLgObOCShxiWpsh8vklgaK
+SEUr+laS1RMdwo9YVDuxRZl9/MAOm7za9Wpr/gG6EYM35e8q1fD8aoVdbGJ2z8J/
+IxEFVukPtMnNobzSiiT8YHTzEkpALLNXixUzK0rIuOMNMA6pAmfKH07ygg8gh/DU
+q4K13tu4G3WaIoiS3RNEkCJykkhdcG0rR7heqYTwsmgPMQuTiUoZZz8NHQEJ0srj
+/r/EwZJmstFbBNIPJmxzsL8KNGUIs6k4qPnPWM729NjnzWhF2ewhFHLPLs6JAjME
+EAEIAB0WIQQa2B94W1JpWZ1kk5MtA33c1/SsHgUCWobd6gAKCRAtA33c1/SsHkwd
+EACjq9D/pwtq6DoTYSXKm+F1O9O2t53RiN+35LImM4RY5xXPvCc9DQhic0orMoQC
+d4pbRJ9dBTmKc3tUVXLqffeCCWQpQLvlX43VRlHz+dG44oaChJ63NbtGcN8QyfhL
+ZWyI/D/U5BQ35rCykyINS56zb6rcVvQS3l8lK4bvid1/yh7p8wW52cMFEJtDWJ5J
+S086gnTURkjod0xA83dGoMPK9hSZ6irB8g6AdPiYrmfdVgBgvL/hyWnlAS94PYuP
+zgnrZlMapIBqB8/mSIKWb7hutjq84Zsi8482NZIm6b8yVnOEPpz3H07lOZY9N2Xj
+XJn59hm/w4MC1sraO8ES5ZkUPK56ublgsZ9/Lv2yrzO8VD3IqCie0BaO6/7ThLot
+DFH+eMVHGfv+OTkxSvxmn96ET9NLFR9jPKMJdWn6xnMbcjSlPRPMf1b55GccqPXO
+LIOrMpcVZtSk+3LvB+NMiVMxy7jIb4HkEdZF3Jl2h3CwaGEnBF1IdUVqPLtVBdo8
+NT6BVFNotRqyuc6ZtD2Wnf7Eh0znzBM+QM7cx4B2FPQimoi9Td40DS8wsGg3ORCP
+Lm9N86zqXcJ9prSQneWNIU1mh6pTpX7vvkTnWsppNtTshy48KflIQL+Jfxhn4C4e
+6glvkQ74ZNLxrToyF1pLEz0+FxHcDEg6zViDLIoPl37xBYkBHAQTAQgABgUCWng5
+TwAKCRAIbcKm1AudBMogB/9Hj+VPjByxsWjn9aw9vNy4Lg+nwYLcFhgUt+FddyBG
+Fo8rKoO0MqtYkyrIqcjCGqN0/WMwJzfWvoMW+162M+2kYUQCAfk85d6A6aG0UtN+
+Xrz3kgxRSo1XuCP2r50BjaRDnUcJZ3WC0B11UXSkTa3nQohxeztnFEuxf+muTEh5
+kj8i9pyxpVu1iI3Tkgmn8lbAI/tlbxM8wLQBo8TFwjsmF7+FymQQQ/vPb9qGZRmw
+ahyIglkTvtdH9gINU7mYP97La2XtqIKGF7RdILNH/AItCW8znYoNjhkunNgIj+Ou
+uTgoGpDRWKINX5BZQUxYSeUCpDi9piNb4TxYX95z3oCgiQIzBBABCAAdFiEEH68E
+X5uPiz6/J/x9PEEH5oJsQOQFAlp/GC0ACgkQPEEH5oJsQOTSoRAAkKSbmkBMRfby
+pLcUJg4iFiSdBpZ/lYznoyiOxKHRyh/eOXJXqP92BuVLJvSBbOCQY4UC87hUvT34
+UlnZliEYGf1h0OTIxQ04nZI8zGlf6AwuiMSAXIpzkKw6CQ/Brbb+qpkYJctJaMaS
+5J+z0xQkf12mKJ2Z2GlJXU0E6qJ+8Eo/CvmHkcDGM2Wg2c0pf1ziTBLat7/ccDbC
+ADMlfC+XC5iCIqUA6UwT7RUf3sAFZgQLlN9v2eW0eBbG2fIt5sBIuPRFD1MlJAn4
+k/cf1PO8Z2qUh6Rd4h+kzD2nnQkBzgAoXzPuBQ1XfZMKBLWAzing8mBObPmFconp
+hrj9CE3Zpm4Gi67/ICYdsDcA2mUaP03u50XuayvFSB1hrjSf3vCBgBntS5jdh05l
+gOVDCMo1+llb09dNk9s6GexC6ghcyqdPS2tEsgTUCqWWQcR/oEm1Ff/gHPtYcvT6
+xrWWCCm+oH50t+hB9j9Z4Jx3/kk+Nn9kqrDlGQFOXRCv9iwlfXFi/FMJrGthjv2Q
+mE5r+MiqjfKXWnDnqw6e6ILPTdjC+pyzMqpVYQ/+Dei5rOPhw79o0NOH1vBEu3pz
+wLJePSemeNBnu+e7HWaL3tzUpQONbkxexOA7d4+LfPG7uk6qbZQb14NOjs23R03a
+1Evorwfxhkqp6n/dRfE//1QaWT7dx1KJAjMEEAEKAB0WIQRMt/4eKA7MkPKaWX5u
+YItjfYln6QUCWpCShAAKCRBuYItjfYln6flmD/94/ejG1Ne8w2Fsa1ON/0d7GOk3
+RTptrxA/mqDRmbMdfkHhFWXKSIbNoK/XpljltnKLfWcrvubfkeXHB39XpJC9l+n1
+qEHnzkdmbtvbM/apknvBH8yIChcR5nJQOEnh+6Ad9ja9vcFDkdW942xVT5QfcT6m
+NRUvgDiJAW3/yrFoDBYRCljuPJz/mjzOF1bmDjTR/6ZlUcfnk9HBJxKdLkS8wG9A
+UPQ7af4hbwkGeRr5mxcBYvr0wLjotmY4zd5uLO3QYb3RYLsNrO2u9on06iZ7BL/H
+jafWZGoeuBDkXB6MCOPZ5RtENg8ioGBLxi6OC+bDwLcokHvpPzwX7A9ih99BqZGr
+FA21eF75LT1NkJ71yn7yrF4zR6NgAFVty481kZ9/zU6fDAEwLA0AYhC5008WZLR5
+zjzrihPLDBIQzDHXN69v3IU758b9KFDzQUpU7FxyEExYuCWr8u88RZ6jsvvPyR8r
+evW6QMDuOdsm5FUX6BqeeepZXx/rO4KBA1y4BcnyuQEQWIDDYZx3+l/nY00NGkk4
+NGOp3A47rlmwZqtKo7Y/c792IGEy2gN3cxTlXegjgFEhlfv8qo7Bl5ifnvajWpg4
+LHDWgvm9k17C9B2zAYhTRzdrPPGNK4pgASEiLLkQPi3/ilwDE3tyJKVTDSTIlKys
+7JjbjfPKr55YVkhOBokCMwQQAQoAHRYhBKjtvplQ7B+WfzNgy/s9JYM7aq/4BQJa
+kJKJAAoJEPs9JYM7aq/49JsP/1ylQ7evAXdH6K1cVN1L/i/vgzlRPP4o6+QjVhtl
+jka2sOIQEsN+o/IT0bFrejkn8ccxGusPvcHAbCtt7YLLw99cFwhOZr9JuozaSj6/
+lNawh3438hlzilr3V0Akapj4F4yiRACyWaUc4++fXn4YG14EyUAMG/M6t6kDuKxw
+nuAIEmL0nUg1e02B4ErcKXptHo9Y1oFzeO5ykmJ6ejP3MY9FWpt+hYvW6mzxjUWi
+Gtn9JD4TBdFcCMvWG5e1/bCg31ABe4oQZgsDppNQkRQV8FSXrZZid2bJdmhJGYEf
+zSvMuHWRsqi0udxjmqbyP/3HgNZ6/es7x1P9xeHsDDiAPPoMYopfoZ25opWLnCoS
+lb0huan92hKEiW4km3osWN6HxsUQzU7DXPoJ6UsglOoNZonj0+/8scr3sDl/fDCh
+0T2fSBMpPxsfVFHwvHzeoWZAon3rT2CUnS3NDD8CsAzAgwABJy8wuDGdnHgNdGUC
+QO0VBoYYNmwYFXxXpZ+yIskH4ZoTeRdiXMyxUcVmyoG4wnGN7L+StbWmADoO6R+b
+4PgAgwmWHt1nqzY0dlpIv0YnsObei3A2GUxAKoZqtS11nvaOxyRRM8Hr0eF++6tv
+i8LnbfHYjMxmx8wWlHejvw/DXU/GgHMKwQFUyDwBZUw4Lokx8ugwyKJuZ161OSlR
+IUWoiQIzBBIBCgAdFiEEtfrvTBgwNxXc+gdNWFK5ST6ylOAFAlp7HrMACgkQWFK5
+ST6ylOBGqw//R/J4Ab5ngBRehvmSZSFbBmG98B9P4rS+g9b+jha17uVGnxQzI0EJ
+LsjqAfizJB252Vw4cHdURfV0EqA7pGBM+q9rOBGJKMiNmB5pJwfevuPqP+IHp56W
+I61WwBP7iLz1K1/unY6cKdE56hcAfnZfsivmhnHNbpNokiV1iqqKguXiAK7H50Cq
+MjaYxHYYLqY6xqxAid3rdOGXKi4bspxtc37zY8o2OdYvzxE+JNFfRRMH8ejFDIDZ
+AOnfLhPfJTBXbnnPmf9i7sPgtUhzU93aOJVqOI6hT48q2I/nCLV3nMXapWbVaU6a
+30Ghr4idDvAHeyfyY7/T/+tQZnJxw+AUJxqTvBxbUA0ySnnGMoOEnhG10Y7fHz9W
+2qNws1yW5H9c+8aNo/UPr+w99lypilQMnufEZ96seIb4FB/vAHRxMhgO7c877Pf6
+sxWAOh4xojyNYJfRxs+TGdNojezd0Xl9JuaaiMq+hH3a7l2AiEX1cVCMuOhEtBKe
+0SmT9gKWTST/pcyUof5bH/wdt0ETT3X1j47geggA9+DMxvEyxljhLaec5e8C4MCd
+IZ8qnxJ9kBwa889Fm9MPDAabBTh9e57rFhKK+WMzbyQUfgndlDX+89UJUc19gybB
+58/oSQDKkQ4K6Ey+wvBAfnVzvLqynpraZdXkiVhmgCvS3TbEHcQTpz+JAjMEEAEK
+AB0WIQSeqpW06XMba3V6zWKSKWkrml0gWgUCWnvjDAAKCRCSKWkrml0gWrSRD/44
+tbNPyPsbJgOkAlECZeQ/hBvYKE81I8mBXDrQyl7HJAPoMQe++iq4fl5fbx/kGyHF
+vGHqeGCh0iVbJ3NOR59Y/x2iiizbM8RQUj83WkAheCQ8n1aJZ3XkN4RzlQew5fr2
+uvZJ53ymsDu+h9qUkx70W8G/pbojXUhqJwKiMVysK34BJ/8gvq3PlOXjBVgAfTnv
+qzuAWlsHlZk0TbZc5+anFF2LaOrjb0HFqB5hexGalA//LGIcEG1DE4K8BcDHrB6x
+y3AotRaNAL658T8dHPqW3dUlbLyUbIQhmGUGoHe8xRj6oT+B2XMqksYzX9bHNfnl
+/1pqGpOPSqcqELkbKqiWIzU8qkIuJV0vyEktCJc2hHpHlC3kPPtLF2EBfm3Djaes
+6BLlOvu8idg8g3bBb1g2uUqU/tn0vNaQNt2dZAL9K65bm4XAS+yZQnw1S8Xv6nRO
+V4MegcPV3GO/eWbLplRhBAiNyROfKROxVf9biEjEvo2ZSozKZ+3gqkeYQV67KbQv
+1rSCKuwKiAqkMMEYmfB6C3TOHAdkcEGjhN/Izr6OtqxH5awr1wtWI+8xnWrBd9wr
+bys85kjkI0buJMaHbaRWshHJdd+xLAgK40Jf5uuYZb5x7AS6u3dcVk/AMl0Grnvt
+V8gfMt5yTmRyltPn477R4WQ6PF4MiW6iza/6WNrvo4kCMwQQAQoAHRYhBIR/xcQz
+fZzb1HO3pgln/SWNZBT5BQJae+MXAAoJEAln/SWNZBT5KHEP/0S1kli+r+FEnhmp
+O9FBsxYKnC480XaaG10RUB+Xk/voKMgHxL9Q7jy+cLlvZslTOQzInbMktm4rTsBc
+uoY1lEbuO38pppkqTXPO0LuzW0f8yuoQVmIlIiNAM5vCkhdKywA6t56sw2rMuDkc
+HY/6Yeq2/FYwBFQ6mjy19vqLJUSyghrckHII/ZKAG6gh4zhgGm6NDWUScvSNyo+g
+UKxfWP9bofvnMWhE0eNnlinqnTFLDJSvPI/J8W+V1/zL2WNSOEGH+WyKRL29omiu
+zXulZzVF03xq6Z9hzzh6ou4glmJSkp8ViuM45SVh//YZ6LpS8xsIR77YHQMKfjyS
+ZV26q/WZuZHoZN9aMO3kxBrDhag1daO8KaSuZNYjbIoFGzzhqZvqRuyYWsJrbnjG
+NqHm9aBihTIVY5V0lGgwAybSH8+zVe4kXXvEEFOoayfGSyLWLdmcEjv8Vrza0oVD
+7gdah/mwBVvmtbrIags0HLmeYwIpQwjGt/in4YV/d3gNdIQvbWQuuJlMiMk558Pd
+6t2rRgz8gjplVBrTA8odPUXyJtvAPCheT/wT/r5SRPSVQ67HOeYMHo3r6EMyfzAE
+6tyvDPP3ftrtZ/DgnRXgcNOKvZ20MT5Ea/2+ZyXu7GCqRwjfeficM7bXC1PxI9a8
+Is98tboCGFiERAr3hXAz2Sh3Bsj5iQIzBBABCgAdFiEEGJMatHIMHqPCi5Wzd1+0
+TAxq0I0FAlp74x8ACgkQd1+0TAxq0I0PFhAAnA+tKOPr5vvAF12W+Za8PHLNdqiy
+c7Qm/CCnfklFW+o/VHpy1ymxapDaBNzRx9lt9BYiO6Y6OOIaQj95LUC8Y9tSQt2G
+kU1qEuAn96Jh6OqyuJMmj8DwjRGyDIeno19sRElV2ioA6zPcG5TEhRQzqBKGVSKv
+3j47ordq1yCXAHXk6WPCo/jy6I9HU7gWlNrR5rqDQmzpphDYj53uFomyY3PGo+Y/
+pazjOTz9STQMrxtwghakZPBA3WVYs087uIyLlAQgVh9RiU3XCvaAgdTgHMnruPzt
+YMaC9ZZbDUj177WGBXAlHl+DCGUXC57+mC5gqCDyYqN2hHxTQ0FHrYV/3/m1nlZ6
+EjylsuPZHpqNbrkxI+VJDXxhywzdIsP50tyShiIOErBn2FzEwAhrf/MV26PU2CLC
+NeOXze9m/o1VcDuCXxldYyPqzhdjDxTF4vGRyiUj6pCZnidCUZqePJeFXFLWINXt
+3nh0S1oDNGrTRezAlFZevOItDWVTPvoO+xX3rUc+SOz7vYnrWIIimMIjisgwmb5T
+IGWoe+2PvWCGW++cYR4kSFidTWHJyTMrWusDDwabDExu5tOTHR0LcoyN6MpKveKA
+Oj7fG4PlbO9HbdUH2wnAKZcQBjpZuyhe29u+BG4oNHi/dWvrXbLM0R4M/KVOtS/+
+zj04LIC7z2RVs+qJAjMEEwEIAB0WIQRMC0kHCxQDWg4PhRWNnnvyfLwqoQUCWnsQ
+mQAKCRCNnnvyfLwqoTdwEACECsKaW9e4DEZSgVMtd4CaBwaT9uchs8ZrY6Cn9GBY
+ArziN1ft0bS9Ay8SFBoaar34ZLip9Y++dZk+woFfaySY8HUFzGqEPSne6mfNTYEQ
+CkUQz22byEgEc6Mhs1rlzylxgMl17h8fdqJLQkNeYyjoagH1zr/ukly5mx6m8+yn
+yNmauDPOM4qcG5V6KllNQMw1hZN1mY92HYs3MzBEyNgtyvDa8LS5aT52Aik1q08e
+mEFfqrFrnehoT7p63/4T4XOQos5U5vdDsxXDzg/CXpUQD7AmdfFTdppZuFlCTPeC
+i9A7zv+iirbTDWSDxg6rvb1qhS3KjhE2NMfX5pmiCPXvBd50ThMjweV9+UfyYya5
+myje+sYaYJmVZkGGjolEkwT3BtPw8QuKOCk/55yAlJYQdIJdx+dycwTkLit8qFjX
+YTFnEU8sqIXqEpJ4npIleWNSynFN5/m1a6SwTNBBqy8TN40qt4RIPrgTMD/maZQY
+EQPuN/Z2rny5iHTW8gErGYptAjXRQDucEUmRbdME2YayITqx0idDsdMhQMbvJbYF
+FkICrkQ5WX4c7TrZUgsFHOlroi/5R0rbaRa8MOjEYk9DWfxD4kGLrt8GWIhPYEx4
+sJCePq8yEYWPYAtanTomu7HWEJCGaC/Sgq9DOswaL0wnWy77NCyAl7BEdYUWNJlw
+1IkCMwQSAQgAHRYhBMcAnFPWe7f8j9bZPuXhsdSazCiMBQJad4I5AAoJEOXhsdSa
+zCiMDCYP+wcSeF4kvk1riJTEVaFWvXe1RtdZw/pACFaw8EE6y2wfWz9IBBf7sNXt
+lrQ8NZDF8eZKnhtZg0osBFdnWLvui37ysiWMcLb0FoppJAp9l+sCn6FAKb5qgLm2
+OIZI1vpdWGGUvqMSLlT05cTV8Ur1dBjYOfx3PaIOdLoxQRKWY+6GaC9K1IOiPkPx
+5/jb+AQoaXLlwF5G+sah4RJDg2JyNA8WCVHQlBu6oSDwEdvNmiOsA1H7xX8ftRFu
+0sAIdw5rBDWXRcuMvb8KPeeTz8na/IimtIN3HTDHnmOw2RibTi0QG1eSI2s2KyXv
+dePYYgDOAlqcHGoyNBOB0j2aHqUR7ZtaXQdUQnHg0nbWgPTtq2ZzhlJJu7IhzF9o
+8Kzqxsi0CC0nDxIqz/OSK5zM2lq4FSx8BzN9RmZHAdjpBHEIlpo7nQEu7H1t8SUB
+oBKBItDtqD813XqhYN/S0qckmoRxeARLRbLGHZ6Mzh9i00JNqHBAWrIUk5TS8JD7
+umffpOz5KpY+UWoWbiFwLMN5PGJ17xaGbYC+H98DS2Xrb2fr2o7tx4u7tmArNTTC
+bGklOiihSEGU1a7jkmZtnXaAjewJ3xnl4LGv4KWLpfdMeCI90YzKoO3ukXvMRNX6
+HBxNTYR451RqGQ628IeAjc4R5qGf+J+QekbjqXJeOPJumHkjkQU6iQIzBBABCAAd
+FiEEvlwjIJrN2s6yDbCijIGJ8ZiMIWYFAlqNmsUACgkQjIGJ8ZiMIWbC/A//Zk/+
+K5s1XG+K7yma94DnjQ7PyvGsn6g2K5ZH1CC6HfCPX91BuYGVUhQgk0Ugqgoaq5hR
+VGKd+i8AuN6igPotLzNP7j4vnqB3a/Ey/XQkYb6BIaF6s/8s9S5WYKV/6OcvSLU1
+YoWynJKhU/7XobeHPO+gfi/0quVXjU+uPWLglXJp3Y+auIW2/lk+ZzCfehzU/Rpc
+HNZLYcIqu1GyFD4WOjH2QSjyfg5ovlAipc3lBYV8FnY9vEUUcaKDTpVQqcXm+zaM
+IsXE1cuoa/WxNtOtuneqoFzLHJX5NtzLY9PszG1nBwTYLRtPEzmmNz2NE33p33Me
+wbyFbZ7wqxNbJDWXhPldHF0Qfm0qcCGydhsGjfPlpXPzoAQJscMpGZRJq/fyrYSf
+RS6d1EI2NyQLoaYF5sHUnvKP3lTVTli4QsaJBRxHBG52TvHGzJljmM6ulvjFEccw
+lDbcc3EFfJyX62qMT2yS49mWbpTUhVfni7V+tI3U2RMuiE4ddB3zeNUk8wQm4XvC
+m+NlmTw2ORC0GtATASGAcTm5hCo7lpdqwFtdm20Ow056xuI5nMtpYIUocB96E1KD
+nw98O84HRrcxTfHkAnMEVea4TSv8JDhMS0SzZLShUOMcWV0gqaDnwUJ8QWcu0gX9
+mqufHmJ8v6mxrqd+qpiSvuERUtAZynkSR+ZcmIWJAjMEEgEIAB0WIQRvyvZTJTrC
++ymX7X4cEmA0vFub2gUCWnmm9QAKCRAcEmA0vFub2mlhD/0eXqTpLKSzLdV2VBGy
+0OxWzHGfuvTCykNLVf8TVocKlX7Na0W+yWe7TwxZmFSwo9L8wHv6BQs6vfj9cvM1
+sD6Ebs5yarIpDK1v0Esy3+OF7VG/eK3TsAE8ExdQx6PUG9g9iTN5d1Hn/TA9+h4C
+9Iz0Njtf4JUmtu82Jloxx2G34ZSDxIyf/loUBQd0QVxWW8mRFImLSNT0rGqezSr4
+M3+1y4+cDN1A2tPUJ1j1nw6tnxfFIsgLNC+sJGgpXCYNlwaURM1cJgTKCe80XHCg
+1up6jG/A5YoWhIq/uXnIEZ66G1e8lgtbMV7do0ApmFl4F8PK9Jjex3rIZldxFOrh
+QxGWEjlHALo4tuIbGuFJC46e6u7zeYiDCo32kC+YTAdDOxUwweIyKFsn18tPRjyg
+8XeuTgZQKmtJACC/IuHo+XYIZ/PwYhFf42jnzEKBSjzkmgdmTwYynfoSvjG8Fawh
+zcsRUrmfAWR/lFap760VfJLBdTPL18c4vYEM9MkqkazHo6pQzC2zKspw+lf+QaNt
+c1ynRplvMp0pNT8cqulaqMXBmXaFOf6h1PG+hCSlebpq4Lv1qF70GDmjOuNWoSmw
+1gt2+dwi+KawEGf5xdY3XFzhNV5lugJUprUVLaFDqbaYBPhZmClRqAd/PzsT4EvY
+bUfBR2ZEIIwAX1mIVDJRew1tHokCHAQSAQoABgUCWnmvRAAKCRChYhIRistMxdca
+EACUn2YHKzzt+9CikCgtTnfrlUm9vhsMDDOb2iNblj7LL/Aykq/wOxmKy1ScfUt1
+EwAAR5yH8zycKqIwmgBJ87ZwNEFWwm0BHw3Ke0oZDYP5OkDuiYUyskWkbJ798UBe
+fgHQR2r9Z3P9Lv9xrgpWl7FQ1kk3wja3YuXb3k0RuEJH6w3iVIAOFSjx85f29PuQ
+6ieGcZuzyf+xJRCLlRkPokcp3+JqdVsp54FhghEOmfjwB0SRmP7uQy4h/5XzPoih
+ecihZmRMBJBaM0W4DE3ap2phjohKzPY4Ao/nUFLn3TKumLWRIwKsaJIlt3ceXoRM
+EQ6egFoY2w/VkkEowjIEzTFRgeIrwmKUTgfxQ4d/cBR+6Po0nQpq520s2jgCZwh8
+KBs+VAOKSugFMzlflxcbfcLh1CgECT1Tg9IMOruTUkI7St37l86T3+5yN4lTwfSL
+q6Ax3rEcx3laIbM8AR4iP9pmc0isijHN1M4bYRfHSsOz3e2yE8VTV11hTh2LsmbE
+MSXeAIJRw4jS3mW4XrVy829CNHIWCw9CZ24oQ1zPrAjOq3luFRCr/DH9/9Hzvpfh
++clEfdUgxsJlV48doc7xWtM8lVw/+DjrmxdEv8N7ZuPAQqFh8IBqc8Jt5otr7z1v
+46Wmu+VXgWWRqCIOqoFmSYX3VHZ+G4Zu+YOSX9PCbeMknokBHAQQAQgABgUCWnpm
+iwAKCRDPEQnqapW2GBa8B/0eQDnGRNylpmhcoxet722GKDcSm8bwsR/X2UYN26UR
+ZBcsjxWBceNq9A19F8RI5dwGKW4Uwv5SGyBuxNASZk2YgIPujMXbyirfHdCCMerA
+GVWTFQuZR9x4mE+zg62A1ywI+xg/kRkhwkuTN5XeqhJajApgdeMNFT3JqXphlM7t
+tBA6hJqg1HSXNezpl74znsX1LzWUnq4wrS5SbmdXlqFKDTvtxZx4tmRD5TajrMtc
+69Qw7LXEzC5Dexd1wZ28hYc1JGCqRnFzBZrV6RPbRp6WzuRS+s5d5vW1dBA4loSJ
+CBXr3lDyGtK0wytYmDUGtJOrYgIuygPDianf5+S8tf0ziQJdBBIBCgBHFiEEC+BR
+shKlFGQBAgNUjznI77yXkgYFAlq33lwpGmh0dHBzOi8vd3d3Lm1hcmNodWtvdi5j
+b20vcGdwL3BvbGljeS50eHQACgkQjznI77yXkgYLiQ/5AZCchAcQOtyzDHSk7E0t
+PMFCQcBuOeD7fq9N3fYEPCWLgObnJu4XWtRwYr9U5FexS0Wu+kdufONpqMbswcMR
+0Kby9AEtxXcT5WoNLMkWl3cfr6hYAJaoOP/flns8znUBLxC2pGZ57pxWqnnFyg4a
+dCRwA6DLUC9VRT1FTK4aspgPWfDrzGzEdz0jDAY8Y9uyA66yhu2i/8hKqmi4ljCZ
+vGnJ8Hb9TrC8tdCnw7p8SFdWJzBmfwcWazthCU+lblwC43TwL7b8W5u0cPFfXEGU
+bHZ+nuFOGeiPA1neVb99VpCPqeUCcTX2qJtV48Y+sMK/252chk+cL/f/o03xES60
+X6dwbTEoqtXvD+i9fUXnWyzYPsGN7WIHfXh5IwUZ580gs5lAwoca/oJu4mkMkgtI
+wRpI0AWifA+0+PbH+xRa4P37w3uhozPTjN1fcc83GHk+Qpa7HTUZzykVkGR0krds
+5l5rGcYzBLRwL90qJExtqs5KZ9xAEk2ymcBP/X3VWQoVKmri+TXmZLJsg0wyHS09
+jh4DlJUJarB2vkJv1ML/nIpQce+iCYrkBthnQEv9d86MCuJWirgRH3T+SbUGrmOJ
+L8qP317okgiVACSo8is2IRYRj03eECLIUpcjRYlr74GwfEtHFtc60Ktk8T2izi2w
+zQM88Y50WBEDny2TRfEtlpOJAjMEEAEIAB0WIQQuqXMd32AO9SpTrUgqViOIIPXy
+LgUCWn8ZCgAKCRAqViOIIPXyLpksD/4j2fRhvEWHE/fBcfzrVb6aorO3Va7toeg3
+gKcnfvsNz3TvN/jY4cHxOQdbj87LJcxTO+3t/aqV03N8YlKm5AaFLb1KHkgCOo3J
+Bt9QRcgHraicskGlW7M4s/8D6r9HwUOQLB9ZByo9g/kp1h32bxF99BTgBUhp9A1z
+jLo1OYnFS6SxD2/r0zrqI4xe9nu6dBktkNnz5RDdFhg6wxfcGAnjrHnv1ckMnwPw
+aTALOkSQB1gXHiVAWyKJAkYTqDzg27T9Y6RC/xfH4HkG/UlnBewtHvouieTIdSeE
+Oss41+PLCNsIetkZVITfYr+0kEwPmc69TGdG6a/oqBx3LiTCIe9IGfVsAKXSAonM
+6jkywccjKu6TwXg1KqMq56owIMEe5L6QykTf7qJhj011MIhI+EXQC/A9ygwe4tR6
+7ieofQqTYmtp97OUrSj/vchKW3ieb15v8j9mQlqmIafoVza+euc2lPW49+dpFFWV
+cJHVsjg97sLpIq3EjCqnkB2sRtJerGPG7ksEteqEfxLlI2NdDRNqJFsZ5H3xWMOZ
+IFXtL5vKWqSDNewR+yLh74/jFs83rmp4AC2s4/Hj7oICM0L+Yz6PBAYcldqEuZ1p
+XIt5vlFSp+Zq2DgM///7BT6F4FVPOmwK5OTj2OqBllfc6ZWRW39fIrXsCk7kJVDg
+u9ah2pQgRIkCMwQQAQgAHRYhBIzXIn2kZ9PtQE9u79tZD3OeWsRYBQJafwZoAAoJ
+ENtZD3OeWsRYoF8P/0/n9Q5YSAcpkB3dVtXeEQqEMvx38zqTjcKc4kMysHCeU2d4
+73hsZsEKvbRJfY2uPjgwRYXY7d9EvKQUa+JOfGwoI1g2dRnxYI4F2QdwtQGhTA1h
+tPmOIR+nV1G0Isxpu4xrYZr9UP7rT46o51DhUZG/L2bdstoOp615UOV+QtPsnR/p
+DSshzW8VzOy0PXFMdFe67iMILiC/qon8KS85F4M9jxa9KycYXWA728o+6nDgq4ld
+7paqasphmPKhVuhWULXUj11K9JbE4FFCzVPFQu+CwXK09iT7kV2qKeaCNJjFAXJs
+486+DRxsytuL46PAeIqJ0VkMRarcSO/Vivtk7xosBMgbOD3kBgTnGZwA7acg5sDW
+HJa5xU/PxiouWU6ajifkolqXtMlp7OYJ060ffTlDoteZELctUjNjkD1w60H24Ni2
+3JUfholW+gO5Z1zMhnDdJVkz4N9a2VGf2+IuNcSH/DXnIWOQtQ8vkBo/EQcoy61F
+ZBuYfNT4QbiPRyJlpooafUuprjLxra6LTHykId56thGQHfkcWIMf2dYQym1XBJ0j
+hM/oKsIgZFs1VcOQjuzJ2jYy/rB+r+FRsZIvM54mirgQbHG98tnFHNiAYAd6GehZ
+NBWvfs2bKByG713uIr1jhxVi+MHvg4+ipsTdm8BQ3OL1UiOZl7V5k+Xw5ujhiQEz
+BBABCAAdFiEEPvP9HACZqoFWNHelOHetBdFYLNsFAlp6NaUACgkQOHetBdFYLNv9
+CAgArTiC/hnT/qyUe5j34zt+UX1ApoOAuJdqD/KN+vrHHWYAewzrd2B+k1ZhFDKC
+7aX8rqQo+W8ebSA9O8oAWLwHTeQL8H9s/pbEXXtqsEBYNxPmbN01aa72Z7KScN90
+u39ZeyrVKqDg9XWdz7lkQlCCwpfqVUSSGk+m/4erblbY53oz5oJh7PcH5ukeBUyF
+QeYSHG4schaquF0SNIoJlFvcddxQZDkwyWgZ0XgjKjZZHkQVV9r80Yi3DGa62QjE
+0W9RKQDoxukBoDNmIJmBut/ouxwFoQISc7pXwPRH5OFHXXZjido1mxci8HfwybD1
+k1csnCsPtlCOZ/YZZi0X0xTjeYkBMwQQAQgAHRYhBH7hMAvSyJS6kdpK5k7P/sye
+dpFHBQJafHwIAAoJEE7P/syedpFH8isIALSzdvR4z/xOyWGm93A3aB+qIrcLKCUX
+c1q3aZd2XMZGSnF7VngMD8zdBmfv1anE6yxMnWZLn2p7IX3nQB8RHCrBE/lsDK/z
+j2vb61pGfdYRh5pGCc4WeDPFCJH6/yEl1LIpVsUKGDEYsyd4/yoIPnkoDdqxHdvH
+0VKGIi08lUXxInYGDyhXR9mRTl5bDvvErxc2FPBwjHv9IPqkUk6P23tvtDFMUMIv
+yC64kabc3nAXCf+7QlBJ9QhCGvwzlzQYoYtXHGynania5Wnhj0ay9I8gqxmbLUcc
+1tWROf97N3oSk+NU2iTGx964Q3BbY+5wKFCF3/WSGn29r/Ixf7M6W8aIlAQTFgoA
+PBYhBGw0WO5zfOIsDvn6O+iP674gLOWZBQJaeYeIHhpodHRwOi8vd3d3LmdvdGhn
+b29zZS5uZXQvcGdwLwAKCRDoj+u+ICzlmXX2AP9bT1lQTiSVjPrK9Wo8B18/1cDV
+HJMReBPL3ry6FlnOCAD8Cx2RcXUMvhnRRzuVJc/yREef65+IYTbm9qHyOBwIcwGI
+fAQTEQoAPBYhBAE42pLt/7J90nD4bbR14ge6tYIpBQJaeYeiHhpodHRwOi8vd3d3
+LmdvdGhnb29zZS5uZXQvcGdwLwAKCRC0deIHurWCKZm3AJ9HPL+YDgeIu40yDSBS
+Np0PZhQ/WgCgzZ5cYkOASUpHM8ciFqGj/W3uYOyIfAQTEQoAPBYhBFP8Wocnvh0w
+/rSGGpSP1qDhD1AuBQJaeYe6HhpodHRwOi8vd3d3LmdvdGhnb29zZS5uZXQvcGdw
+LwAKCRCUj9ag4Q9QLoZrAKDY5jTnb5YB2bv9PWG1WIlSs7dgzACfcgVPk1SBL+LJ
+TI329BM+5374xFeJAlIEEwEKADwWIQRp4e4H96aqjkp3eyp6BoVCHomQQgUCWnmH
+1x4aaHR0cDovL3d3dy5nb3RoZ29vc2UubmV0L3BncC8ACgkQegaFQh6JkEL7bg/9
+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
-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
+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
-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
+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
-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
+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
+ulrkn+wxE9PMqcTSNs6x1uwRO3EGYmL7pQJ7iu39A25o9cPrVFnHyxah4C1gEFpw
+tyw9DOI8MlSV22Y03IqHKY87UruvFTjofePI7g3PLNH5/DGysJM2uWY2Jb5kfdYf
+Vu4ZXRh5Dt0P/frwDUjuSvjC9nnlcNTC2r8eMCwDxSe9eB2GjmmF2imi5HijGiSu
+cJAprE7QHhyugwrSoDSnK8rBQmyG1BRNzCko4gBEQ4VvSkkQ6d751kgzwwgSjUfJ
+GdTrrVqfnivQAGgmayqLOA2ze3DUvS6fQuOAtHMLdNo2ChWBfmH7i/eSfgz2B1YP
+9mfKjfNtrW/dWrSyFFVwPT7GaLvLP5gAhbIJYOniYKerT5e2lFn08ASkIDhtb8Qd
+xEUhN6GzEfcKpFFjFT2kuNSW5AcPpNfYW7sgc4zlzlFs/qAZKZ7/eYe3pIRWiPEM
+5NXLVXMKjj/5zpIkXJ2StRy8v+KoZedDR4o7JDKJVHUKqnNMv33ejCN5ng/u9x1B
+ik8m+Ks4d7C/HLtclyVY4jpXGg7Y7UtdT5e8leBdC5/4OuhZMbGMzsj9CDO0GOfp
+tfcKLaROnKJDtCdBc2hpc2ggU0hVS0xBIDx3YWhqYXZhQG1lbWJlcnMuZnNmLm9y
+Zz6JAlQEEwEKAD4CGwMCHgECF4AFCwkIBwMFFQoJCAsFFgIDAQAWIQT2gs3MOdwP
+6uEWILbHRs+p50+ksAUCXxfPLwUJFTRcQQAKCRDHRs+p50+ksCY+D/92OWVUW1j2
+0qL2+IR2IBwEp0ejHPFugOrEzHagcnKpbnEgdjxkhaTPYFMuURMqWaEhCckYUcPo
+T/Gf98YhVGtfeQ5rUhbveUr1i5os6o5BD02GOUd8ysMPsBnRlJYzJdh5gqBTYusf
+NBCcEcboheNGKGOEC95Mfudbcq8j9Cmox4F3ctfVsxuvYYTjUuO/av2mePxbcTTm
+Qc5afN8A5OPZionwPpaheMMb/jt1BCegH6A8IqPn0+tc38iAcmMDZrVDCCm1Nn8J
+qT/UvkZD7M7+TSEMOnJ5Z60gJglCeV44lIC4gjvR8utVAJa5DvmU8XyC5fVMOVyI
+4dBZoHy2JeZRR0v6MD4+VZZ3CUfmhrSMnp/fWMGOUS/kSRAQMnW7Z/5kyvrvml8Q
+yTLJ8V+rLldEUOSQaRCGIZ84q6GMdx7AvMgZUr4c7Zfc/aCZjQyC8qU4L8Q47hLX
+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
+sOAeKSZo5SjSrZFf8ERVUVsBMUqYY8q5EMJgWRL6EiPMXH8BpbKGdb8fn4m0qi6K
+NJhlATsNmmkfTK8C5z1137Uno7m1iJQEExYKADwWIQRsNFjuc3ziLA75+jvoj+u+
+ICzlmQUCWnmHiR4aaHR0cDovL3d3dy5nb3RoZ29vc2UubmV0L3BncC8ACgkQ6I/r
+viAs5Zlz2wEAih4gbpm5VqiaBmDpHmZNfvNfLLR+zMRXRavnW+PbWnsBAM/tOm4x
+DTw9abQ7H8JVnEMcPzTDUhXaP22Izucf8XwAiHsEExEKADwWIQQBONqS7f+yfdJw
++G20deIHurWCKQUCWnmHoh4aaHR0cDovL3d3dy5nb3RoZ29vc2UubmV0L3BncC8A
+CgkQtHXiB7q1ginW/QCgjJfrW3n1TuCkM55hXDGdtUt9+8UAl3PM+YkiXwxtf+QZ
+Y2bgmXnPtC6IfAQTEQoAPBYhBFP8Wocnvh0w/rSGGpSP1qDhD1AuBQJaeYe6Hhpo
+dHRwOi8vd3d3LmdvdGhnb29zZS5uZXQvcGdwLwAKCRCUj9ag4Q9QLkRLAKDROwkd
+h7EX+qZHWVlLZazG10iVqwCeJpwg4aQhQDJ25TRXg3Qx1fISxnOJAlIEEwEKADwW
+IQRp4e4H96aqjkp3eyp6BoVCHomQQgUCWnmH1x4aaHR0cDovL3d3dy5nb3RoZ29v
+c2UubmV0L3BncC8ACgkQegaFQh6JkEJpiw//Uc6kfTusWWQUe2Iex5SipkH/Vy6c
+MQpN5vY29+TDUZ6ZNI/YrkbeFO078jA+m9EYZ1L4z7uBnfytYa0ucHxXAb+DmE0E
+Zwm+Z+3bJFN9Vizdiyrjmmp6CFq4C6eEo2fam9roIINpPSYP+tVX1cmIXulNgCUl
+M6xZz5f5LuoxpxmEBiq5XTcpMp327Y9b+PkrwaYmX0xDHolHRlBTlj3DKpneWNb6
+h/acutBmYaoYjyYztYr62RkdayRsczoNXdYm9hEVNp72BgRDmJR3iKb4x7BKwwgS
+mmzoW+JFP+0Q/QBleSMkq/BKYMquzfjHCZEBIfriznCngUWR36IucG0Aymmvm81r
+jhfNSf1aRHxt/Tw1Gv9J9KM5iRABpTOG5DFxoRNPoQCfTv/OOIi30k4O/Mt9oG7P
+SVFNbOkKpikzK8ixm4myyfGbyk4fMPyKgvUHF9VApD8o++50fxWRS9Gb6lgcCtUH
+asMJlzqtDl8gGsyTxOVlb7lGRkm2uX9xV4HM3v1TGo/gmRvonIBqtRZQOcvaw1TF
+lM0KSQb/C3fjatOn7OcIliVHGMUDvmhzequIsYXR3+Sl35aj/Mua91G2SyLpN9Dl
+QezrKydSS+hF2x9guMqMykgcFj4rXUPL45Ozw994kJwYgquJz4AVnIMqG8jkoGJB
+USqQQxxOM/5/RgaJAjMEEAEKAB0WIQQh8iIIM208JkMdAorb1x9FUlUtRAUCWpDD
+qwAKCRDb1x9FUlUtRCneD/0TVQUZve8Co+9IUPejMf+VFqSKQow/7/qs/XU5s+Zg
+Khx2ej3ufTjPCkTfozzLwIj9xVRMGj7wh1v+oD7IsSTdMwyCGa71qkEns1MB8ykh
+9QNN6GId9Z3Wzq0wPNi5Dycn1WKTk/JSHf5Uz+EBIpG6MVwkwU8df8e0T62/Vo+Z
+b897gP8H64Lx7rcbXioNZpSq2HRHAwszfFpXgcL35Ra6pVX7HJJefvRd/6kXHgro
+ey01swU3ZG5gBJg0ZZP5ApdxlSzbZdmyHerfZBWISlKKTZafRdMIpuobOL7LYjr/
+OZ8ow6hFby6hj1BBwe/Xa7hoqK0aSsVA0ZBCUMRq0wR/O9PypxriddDrV9f8uAyn
+tIjLnZDydOKyJw8xFMCTrGcZOVK87+rrA0E7FPwVrE3nHl0m3ES024a5d3ekl9JC
+wGEHces8yrZlLs+UYq9m05F3MrRGnh24r3AxMrYDB2FaCPT9h4GhC/3IcMusI1CA
+bXJwMFeh/gZIl/320UdmyP4EZBMm6CFqm6dDscjfKl8sPPH4x50WwEg+74eV0N3/
+MUEgWIqNP+ttUq4OpcL/kZc0iotb5EykF0AQWzfKgpvRZ/8S7Ba+BSgbPy5ctHNt
+djPltKL4nNcuyL00DGfCgCDzXC1UO45BMjGjBv0dna8ZSdgoI7TVHx1iK70R11ry
+TIkCMwQQAQgAHRYhBHfdobaNBHkqj4XYVSNeXIz16N/7BQJaeGGdAAoJECNeXIz1
+6N/7ShEP/A7ig7XfBA84IOOB+UWG37cZdwafJ14YrOuE9L5UMc/vrgKRAkRZ1hua
+K59/5pKIwzXpRSGI9567bRCAf3yz/UdC8d70bKgSOTeLJtNojkw1G8kpSuhMSUAo
+SiSg05aqDoBAP79S7w4CXv6zDP//0D48Qn15Fq74PjAcD674H/3zKyay5fGdbC9b
+2kBP7ziecDBnc62Ekw/z24/+/FTzwp7PV5VWR7PEvbFyfXvLCtNT6WB9XUKKaEA5
+oF+nkM6+VrIcEEru/Nf64NhiKTyKzrGtJeIteYxwGNy2j68vxR+1p+3EHIG2Wccu
+XrlJrgyiHY8HKDZ/poFqPj66DItsH7Y/Y49XnBNeQt6/yxy3lOpejo95+4vdWHYB
+7JFY/OohsynTcS/XrKoWBhMXyz76eS5pOIJx91W6ZoGrW/PMDrHfUjMvAJY2hRB2
+tP4/NGuSvc0byMoAeJK1yTJ2HszTUBUsuDvhczpPYpAoPXtVwHmMxAJRjRVyEuHR
+WvqSVAiLfrPU/z8FDpVoC2uKODrtUS6VPkL1yw+4Lpy8LHmKrBTHKqsmOrryEHvX
+/krIuDoKg0RnAFbFO6GdG9Nt+uzShZMkRcH21lEAMTunLb8xo08N1iuT44Nb3pdW
+zQ6ENfoRgtRVP3zk8qg1cyJFbATNP4hYx6UQhJQdKuWm8bRh4OspiQEzBBABCAAd
+FiEEQRAEXuekMtZ6+sjIVAPFRkgQvCYFAlp4XKcACgkQVAPFRkgQvCZrfgf9Fwhn
+APNoJPEcxTENDqA57Tpf90LMf+qHTJASB7xBrKFIJnb3/qmxqF3Xk6K5eCgFR84x
+9lrnsFBfC6En8Z3xubE+/eHGbK2Po8hauBp5oTqh97HjknUGK4F8ncOMkZQe5QIl
+nwefh1nVM5I433sI3+kBnQBAdq4YNtWv1iNwPqMhdystEIDE2YKw6cfZyUpp1GDK
+RGRd2sdJN4e4wRwx7em27tyqXCr/drIj4P29FIUSntqrL5e73kFcTkC3/wyKGIzL
+JFmKc+0iWSsEhRcf6dIhOxiVdESSztsvyxS6Tzolm5Hz9eFpAa2dFGo9ihQFPKIk
+kmgWgCBi1R0QjKnrPokCMwQQAQoAHRYhBJ6qlbTpcxtrdXrNYpIpaSuaXSBaBQJa
+e+MMAAoJEJIpaSuaXSBaTp8P/2326auZL33C8/cISi1AoycLoknYiWN7b8kJNOnw
+PKo97p+tL3sU24jFrxAhSQ5EHiU7Os5AsvK6AuLig1j3T/w2zFAwlHQZQhINEAFn
+7hj5fHXWXz9e9yG6xqYkwjiGCE0rjDiCxEnv0tXc27ihohBsr2XVptfF7g/fQIOI
+9Et3DUYvUo+o0CJiwmrHj3GqGBksTyG/q3abmWJmn7u6mD4eg9ooozhuZThWr35i
+grxd9QjyyDgf+eLgEvivfRCEPocbI8ziZy2kQq6Qrv9t1jB2qVuTsxi6wgf+O8W5
+2SIlsaoSUDk2aBkmFeNpjKv4L4nOkGId5PjO2hyRaKRaTf/DnDIje7sbXigfV693
+MhEk6X3u5goARP03G77Q0M0jBooagTwo97kQGlyzGHrAWdZI44y0zqIRXIRYQhPO
+JJdBYp0wJgYzmOCyqFZt/t0S1tWgAEYEhGuz8ak9vMLBEipwfXu+Ck6v1m2WQwvJ
+2zXJG749cS7j0pwPxY9wUvalHIyqEbhFxwROAs1xm9lKxx8tMUQQGwjNwy6+BZ4C
+aRKb85G6uokVlCXWdkNQnplIUPJrxoBXRT84DpuEpozfd1Zzp3xPwF612/0ZhDBk
+by8BU20exP7iWAVjjHpawF+2u/YBUfiHtP78n7K8B1rKK8uC3LLp2zsgMzDZjOOh
+GeXpiQIzBBABCgAdFiEEhH/FxDN9nNvUc7emCWf9JY1kFPkFAlp74xcACgkQCWf9
+JY1kFPkU2BAAiWv2uDty3IXiAwkx3aGcp4gT4AUuHEqVwo7cOxY5fUUxhw1taJh1
+RyEejcXJ8sIk3eMj2bvayA6X5bLlcE/XWN9PG9JSxV6z4r/FMDtLyEm87kuHeRYG
+SjMNqqco0TgT/ecpDXGCzggc8hzBr7+K2ztDVP9pkIWVgzZxGj2RJ4APqKF6Athu
+xZiJV77MoTDgf46StUOZJb+EBzDbd9TswJbancoJOHcz0h3JvPk8zph7YyyvqAOC
+MH5JPUXQvMIDoA8It4rsV9cl53e8yqdCn3m7HJ6ihfXBikKSSNvKN6l4tEN2LpVK
+LpDDomN130hwf9NSjzhHuQakxSiAVQkYEqjG05HiVvlXMf2DAV8rCgpl2Nas1ACa
+MFyvm3pf2RVnDaECfoWQS9MNH/9MLJO2zRKJrot3wehC+SDHjNPlVFpv7Y7+CUqq
+gUH/8WnfzSKXGgwgUCX1lzbRnqRipyJE30bK0R40Ec7SOgimiZLUDHefQmX0Sdse
+Yl/4/QNjPkyCRT6GWNIitthlA6nGFjDKniV/SvxerYi+CkWkt+LDyFN5n81PR5gU
+9oDsMeopuNUsAUyjC2dTwB9Uog51B+u3IMpmexq5ArIp9hn7LX4Q8vVlmpYP+wpL
+0+0A8JXfjyKKcBOUb0Uu5rAVAK20d66PTcDo5b/XXhRJBHOKSYPGA7OJAjMEEAEK
+AB0WIQQYkxq0cgweo8KLlbN3X7RMDGrQjQUCWnvjHwAKCRB3X7RMDGrQjVJ4D/9A
+7lmtgsCTbyK3xt7MTul2EHjuQAbk6wkbdPCARaexKrwW8IDTwgeiuUl+0ww9wxO5
+7akk2vaWjE3ffljNRyyEmtJs0Nia3STg48Qz7Btww/7oH5vdD4NIi3UuJc4AXSfc
+2TVd2tRaAZTv+ZK+Zx7mE30q5R4aiBtijoAerKqhL08Upq4bw6T2ONQYEi2xn/OR
+cefGP0hDxBMidbrTw0aCblnrvuFzdEB7UTk3WIquZkeaziAPzYU4RQ7bgeQcfrno
+ToeFCj6jUPIomoQEHSr5g9q6mQUIuEfBpq6kLG+/Ss0vhPgMqEiRqS72QrQtJI2r
+z/RURUHPC78aAJPi0Ci0UyHoaCBQgnS371nXtCRJb5ITWsA9N+WvBy3FtS9UTLFt
+Srbmt1p4pEMbotVn6UyI5hI3bfcEw7b4wnsxa6Ox7G3RJcaFpFbTq+1DAepAfRvW
+hhnLcB9nLumVGnIVoblbntCmPwp6fCFkNKwomPqwwiy7JU6FJCC0Pc5VbAluQt20
+D3FdR7e1Cwm9LQdOj9o5M/7Y/ZYbBQ7pTx/YXxywu7oWgreX0XXGLbC2BNF3YIq4
+JH0TmG7c6/5/2D6L4S+HJnuAPpY4jYBTbc5aVnviU9ZJmT2xBrpj6TUgSEDPfLoB
+lYP2yRK9m9J2yAOquNOtPzrE7TN90dpnin0yg/XrOIkCMwQQAQoAHRYhBPuKz6eM
+cmCJw4rQJpYFoQmMY7kqBQJadyXuAAoJEJYFoQmMY7kqy84P/R2kic5AS+PnhmeH
+6ae62bHLkKHhb6k9aRJ4X+h4Z4ZJ1rlK8VPFIHuLtGVRCmIaL0jFlA4GpLbt2E/z
+AVK93J1rjDMVJINyfv1R599Bbx2f1GO6aNzp20veAHWiXlE1gvWtfvAxtla+hEBi
+YAX62wPsNRy++t+BS18b8428XQLLaV4dIAyDk1W0KccVP+YY4WDgapvNweWYetkP
+mXO2nYPWpGNNjaEyA1sR/ATQo0GFc1fxEYum5EBax86jsO/OiTgmiU0qIx/yg1H0
+naj2u9ybCUqjD5WYDbr/dubFC6tecvUsg9pP6tMZzoDbVvsjU2wFHy0sNqc5HRdB
+ux8T5CjE4JSP3Jg96QrNtYPN3QudTUzXMM1t9Mmtev59hYQiCRpBmuysIP0T+cSC
+s++qgKGvO4iDYeQnusBptfIZc2FHP79fDOI4mS950Bb+p7Po5m5lkv7Y0527jgny
+SoIKjcaCL0FyvhKwPU1iMRLwPZ7JMMeQCjUpg/KumgFzcdsw7IplTzJEBMteGeBf
+qAvyvu2Z4+JqsrnrQ4UWSfKtOZZyr/5uupfRuLLrmUvaMnknKuhnuTcG5wEnV2ug
+nXPvhAarugpUXMDqMXMpqjS9Fj52IDb/MV6pTeOgDsstNyrl7wIWHpRzuoR4/IAo
+Eh8mXtmip4cAHmtSECyf6LvXkev4iQIzBBMBCAAdFiEEnIZMIeOlnEEje/9mEa/k
+ZEWnlB8FAlp3ccsACgkQEa/kZEWnlB+sGRAAktgRYucQf6seRghT8++On7s9nN8g
+DdwpjsvYyzLZ20Ub7u54lBN1X0MGimVUBJjRiMySpjitHslx7UIJCgU9S0ZDfHfU
+ZzFAfagXWu2bqc61LtYH/zATtUhdadLN1Q7JOaOiRlPYHUycqW+5DP5+r96A2IvN
+7YWqN2s765CaR9TdIBf6L+hYJztX4aDFLz+DshzZ3UcBu0X2dHthPbIZIMkxMBhC
+UE9/+YhIlRl6EHu7cyNQvmDEeRlrqll+lhoT4ubKG3xvGw2RSgClCMD3p+mTp9Hq
+MgYtzdVmo3Q0Y9TxPPo0/09yKZx6QX29tres7nArLW4bHc50orfidQ6s03JiQ4Z1
+WEtErDHjoMKKcyux69fZRGH8ZSTYYu41R0xBS0Tvq2bWUNgqnZ+SAZSV3zZI3BPx
+E9tdfWMR+WATuv8tGLFeKMKMGOTN3QVGVE2SOGeMrHt5KqYDVHRLceJv4xJh+Z8R
+zQuIu0lZBUJodBqK9lo3KXp/ol36As0sm14S0DMw8p2BH8yIMVkxGZ3stcIPM06x
+hmI+YQkzvf9exbtjOEGTn/LO0+NMWpa2yu2nbtNSvsblt2NDKFwywaU+fDiLXuCw
+tIAWIEOcGyff1NZMmMe3JB6A185ukvIN89DQwLhq42R2i6PRcJGcB0GukNEKMdVU
+lUK2lXmy+V3G/N2JAjMEEAEKAB0WIQRaWlqgsJp6NroqqNzmbmdsCUlMFAUCWn8s
+0gAKCRDmbmdsCUlMFH0MEACdwtdiVCksEqPq2Taif2NnsZ0Nd7igu63Z9pzTvO2N
+XF3809baFOUh/kq6SxRqXx4vNvfVRnqhnXolT3YeTBVF1OSc6SYPYJsJBGB8XNFA
+mJGgey2jNjWKhDj9g3TZADUXMdjv3imQjWbKNfyWCFaYV22tBLU4TcHnjzhk2VJL
+G1a/vW8qf+/55bGrgigmSd4RjytX3UmDqrD/2h5JUi8URiORKwnJPaOO934ZXyIx
+UWPVwigT/aac62y6L2WeyDve5XB+i/XBkSszNc2W16C0B8gj075x+flqCVxPd+8W
+JcyFwZHvFcjmgdjYehSaAiZy1vgNV9nc9dNywvF0V1S4tuRRmBdPjuyFx1nGLAFU
++mZeBN+TaucrxIjFkRS98uj/tZHqpjJ5kG+6dxLazjarCqbZXGnkZr110A73IBKs
+xnxAFyqOxGmPBpHh7ppVoVf9jOw8BcF2KZwdONspPpx1QXa5DLI0Z6meTj41LRLy
+0/m6XlYAEADdGGQOBFCBL7RFTkpzJvVKwkufjC2isZyp0aOm6+VjW/dHJCodHcDG
+bi1PDNdwvYQWjTfoBXZfeVbcF96+jBR2fMDD1mDAf4s1gPSrEJg/Y7C/OhypIPTk
+1q3jJJ54Pr95m5zHB8ufweGKuwA1qC3P9QrBv5Z4VQW7tnu9dkOM4LVCbXCsoPRN
+UIkCMwQQAQgAHRYhBHn3MIZ9FvLbrafNhm/c5IcphfhFBQJafLC/AAoJEG/c5Icp
+hfhF5CIQAJccFaGRBKWem45VL56WCXKAUqmaE/IjI+Yb9QEYIqhZw40tUMY/Cjar
+EwIN9mCEY+OeUYiOOezMwbQaupdqNK1HSNAuGyYEupZHkGApkjOv548uxx5/wlDp
+Y0Wl+uXqV/H13Af88xoTcbriMYHVOBJ7RtOey8IyZm+n13X9VUOcuglz3awVwDuM
+h7/e9/uwwnvy9B6mPZtU4aHpXPj1ZZ4fxmJ5KUUX7UVB7r2mIGc2/uNxgMNnGJMP
+Q6tE3GsmxGg+YyXFlZyc6tf5ncB9MHQovWphanjKGZn88o6LpzM6YPGZLR8nSdBC
+DbP4VwE18SNBC21HT9XWI2a8LsWQ133Rqkvt8LOHYI6vU0dv0+AB4ZinDGgJ57uU
++Pjlkky5ZsEi5aKRveknx/RSuieGNrjevGaeotKMcIVRq/69gqJ7z2oi64zP3tE2
+8cnNV2O5GZpzzm3YudIY09Z7Pj/y/K0/EjmVnluTJukYCspjjsSAOni5wEa1iuHQ
+4udQCPf0n/Ai5sVvjfPo2LoGOYem/fW5upe1UxntLuoagMluiKhEWvkg04j+f60Z
+Q9d/UUgDUXuP7iJWrMbmG2vLhLnUK8DlB9ycA6msK7xeijSv0HuMp2Xx8fK8E6Ot
+FgiTR1zC5H+uRCVvWgnJ1ddzNaqxZ4x9CjO8ugX2nir1KWnSTfbZiQEzBBABCAAd
+FiEE+fqOOMqe4Ko+UFq+lQsO4TglbngFAlp5oLUACgkQlQsO4Tglbni0hgf9F7kV
+2vHr6+EAV5Z2hQnFEYoydwr2/elcv5+9D0dx2R07BGgAv8JTwkZ3Ys2Ybk174sgX
+iIoMWbozBkfPRxU/885NG4JmM3jwMJ8sWv5Dw2khz3P2eNl+HWHPLL4MWphb2ApO
+kT3zY7ZMQYwEGZcz1ZqqIAL+L83joGsTRGN/yd3iulsYE0vaMFsx2ib1wubvMsig
+5E/mlDKpcWuU+8zRYen8RLAiqZFNMii+P6noEjsgF0KGcYFzuCj/48ldAwq2laFL
+geyPzDSRVjfvZwAfmjLuXesnxfRln/mBrtMpegsioXPb1CZL8fJO1hmbxOASt3ao
+xSoh2QlLozKu57I3LYkCMwQSAQgAHRYhBMcAnFPWe7f8j9bZPuXhsdSazCiMBQJa
+d4I9AAoJEOXhsdSazCiMlD0QALiU+3GhIfoESMTAEzQk+6nehLqHLyDM+VbBj3PE
+wairQx3UbcYalxwzTWncBdivXCgtLDEjqIDcOPc8MhCLht5iiAHJEJMmrFLFJ04S
+J5fhCnqwaMXG+Hd4vA2CTGCsBluyRQ5kG8rpnIhL4Y/zr6S3tCPZHIxAE+UQ0jfu
+CpzxwhjsausOB9xSi0Cfp8AxcqsEImemzjbLCYONEGlUF1puLwid6CFuqAOutO+2
+KbfOuVoBXdGZ0motuwHpGI5zxXrAE8FdKsgytWkwSUOYwpr2x72RUdqfIWThBWUI
+221vhS7vGkKXXCb4meWQq9GeMT409CS4fccfhCBSLu6Ntz2QcnrpW7QcKgu/mL2h
+0nCPsjQYTGQseopFaaCRNRgJBpkGOUrzqUoCP3nUemZglZhRHtLuWXYofywpt4Le
+M95Gr3TNHTDWNc1aCgXC9XDou0KiXDesbes/We4A1QRRzcDvHwJYVcuce6OIMP1P
+DV/RxH2YmeOLuDf1nhNnWRads1qvJScaL8OlF3H5n6LJjLDiTMMq0spt+6gCeoFm
+vtTzyeHUw2KWUTkATzu+k1rjD2zxOAzuVFmANUzQ+eoZDLfdZWsPmE2Kge1e5NG2
+sxw3EtVPaN9m/m4Lhs2L7uJqj8sGu+oBTNB/N+EHmwq+x05Qn7RzQ0gcGLwEhEap
+tFdMiQEcBBABCAAGBQJad1CrAAoJENQr/7YfI8W9/4YIAJ54VnrwUndrDg9miSrm
+1y9nQqVKmA1SQhiookzAYP4hgkkDROin3XkN5d2k6RTHDgFQcexG+UqgNH0rkCu4
+3aLcrcEKmu9dYEqE6y0HiOIRt1VABaaHP5l4IC6ses1vrpzBptSbMif8o+1zpANK
+uJ2RCUWGsQ1e0L9Vp+Vrhv/jToNs34Nwx3js/+E5Sqi2fv2QiVAW2h9FzjgsPYlz
++juNkdO/2TAVCchxPrVbQm78CVMEUQ60eB3i1IIzskpgnicNi6m79EqfMVd5tb4E
+PA65Ry1DIxV4Xowtih9wrelEvIk3VU4UQYxGAVf/BoXhVo3t1vjcpdSjWYr8xotf
+TJ+JAjMEEgEIAB0WIQRvyvZTJTrC+ymX7X4cEmA0vFub2gUCWnmm9QAKCRAcEmA0
+vFub2lGID/9uxHzUOuvKWeHCxP3JbXPIk2+yxw9Z6nYvjklLmkG3c8PvcDnzp4HC
+g2R3cnIJvZRwFBsCA7SbmYooICcO1Jfj1uAukb1Hj4MHdfeVs2SPtJMZX4N+S/KG
+MILVahOjtpThBe+WfBewucXX7qwB2q8WDhcyirDJnnLvKbaL8b2C1O4aZsHHuKeZ
+CBsbZQq/MelE+PQjAy3ymKqS0v+/N7qtuf1b4jHwAz6Jm4LDRYyqWDTY7rwgzER/
+khiK0kUYwLX8QhmqvZCMzPhxZ3sH7FJxXmhXE83SpvUQyhzzKnBKoCjy8Kb/uYdz
+PBJ02VCcAI9FIC633qPrykorN1JwSI3TsLV7HGAS1xbo8YN9bAPxHWw1U6G0Abns
+mqYDxq/DMo7FrhFeff5l0lVEQwObmvyV+H8IeDwR4n9xW1GfH/ugotPD+N2wymKj
+9Tj0067cMuegy/xIIpDtFAtOgyuAJzSvQeUsLUYEdJ1Yf8geuLitD2aa2NBRYwPf
+tpM9d3SneQ32Il3ZkwMbQoaSYQcjz4JTCtyFZV7vTmro7PCjiMzSZ0POArVuWtc3
+irOeADLwHLt4QN++QQB8rhkGzrML4ox7gljjfbI7dS/C3K6CE+A0/iODQduVK5NY
+lChWhLQU42BXFPEMsu/EdHGOf/jy7F4XOuUjCJKRjJJAO3Dk8xGBd4h1BBAWCgAd
+FiEETVGQANYpzFRXAAm3BwPAXIOiIFsFAlp+5dEACgkQBwPAXIOiIFsSzgD8DxZw
+DMd5vSFcg+Y+SMYbRRhVXQ7RizMbFRfYDnrwklkBALKunVsAHUmiMieP3o6CVHIF
+Nw8vl+OJPx0MyMAQ4u0JiQIzBBABCgAdFiEEXy0thfDlSC5JvpUzHwavmX4lHuMF
+Alp+5dQACgkQHwavmX4lHuNmxRAAn5u1XfqSsTdgGfcSfNJQPh5neVmHjhKDEobj
+b7O5cwJYOkXSeXNCCE0pgebcYg+9YQ10vwVcEiQIck3QLHXt8F6Ucdx320PZ6NJW
+zPFRAAVBDVpsGTNDsoX1HrOUg0/rMSYWRI66T4dT8sXTOeRxOxJrqm5DNeyLyOiw
+jmpG6pbqIVDZn3uh26+kJj8ylTP++nLWfheJsiHxYj7yaEOwx2qx1JiKg5CHeqC+
+XnITYYbcp9LfwBFdoqUoxSJTKWzMOVFHA1waf8ggPWKDywVT/QbjMgrF9O3bYjs4
+MnSftCZuiDNPEX0E3oSp/A0FowBbBuNFjRwfVKG6eDbaXqloLCyatX5CpJgr+eHM
+2tXhE80c3QdBfHyafB0R32KrSuw07UMNK6lKd85j7uFDEOTZPkbr7es5ztED975L
+sNW6glCge6aQNjRjosKrWO3jvKgoFbsposQdWas+1baDkCWTeiRZwEO6p0UpxVQl
+ms5ZADNZsx+swKeof5HT2H9rJsvqUj2e0+pOEcw72+XGE/cYKW0UdZwi2mtl31Pu
+XnaNktBYAEGWUrY1fUhzItGNSGE/bAHHmBy3zjdNtrUTcNRIZMQaYZT54e/7dSK0
+LrT9MhtTyYHoXYruhLLtIrZb7qJ9V00ie6Mf5nXA4cTHF9pujZEzi/Zi8iH7vFsv
+KQJurVCIdQQQEQoAHRYhBNyzKB84sHEaQcDcIO6NNj0Wh5c4BQJafuXZAAoJEO6N
+Nj0Wh5c402YA/14SxI3lskOPA3Mxu2xg07+PGkSztbu5C8EMcTR2lWZkAP0Uk77z
+5vjsmRKw2y0f3lMDV8ppy67+nWKVLUDHJ7ynMYkBMwQQAQgAHRYhBJbPBJOYZd+8
+7AaIBGXemeMEiBwRBQJafWvCAAoJEGXemeMEiBwRX4kH/iwLFVNQGP8eXkD1/u3Z
+M7mypUsnnXzQogP4HKre31Sd2R/n5eq9pxKZb/YoL8THJ7c+AFUubE0EBHBjtZXq
+ScV4x+NqxP6Oo+cVybTgmYQfWlo2jscwxDt+jKuP9ydVLrp1qg+CB7ZZiE96JUnd
+KApa8DA82FHc+GVPg15yBPs5mEZeLcu+PbK4b6W5AY23z8GW/xE/5olVceJvX+IQ
+lCzt6m32J6VQLLkT1umsHWG3KpgBbGfHW5dON6OUt6ukvdPgJF+qfTmsEacFK2+q
+C4ISOLhMLQ1xIzji+8lGs9h4q4w28WNM8vq13sSBq4uMhsw4oDl/xmvXW8ojP0B/
+icOJAjMEEAEIAB0WIQTGgHtXZl0/Qhr6A9o/fhkrE0m0hAUCWnillwAKCRA/fhkr
+E0m0hMzKD/9Tn6H0Rz16zg9I01Kwoe7Z5dP+ADW72z1SWARADTsJRoy7JtrxtQZP
+9pWdUqwGUCJrvHVY8bp6Z697+RBoFenvwuqvA0+8k5yY+j3MPBqKSw4krScvpqPO
++J1vjSfp16d4prr5QMm4lCfMofYG5BzWl+XrIHM+Lgw70ddRUBRKoSwTS0aegAj9
+v+com896pR8AeJAazD7xe1t/6tAjNPPnhDmBQsXI0ablmzvHqifYR/aYslLV3q38
+0lLRFSOAmopjlF8vv3fbDW0uqqJjgriXxzR6/JgPXjWu6h+LBeUho/Dvicny0U/m
+I55VXOWmRLMKl2OoZLvP75zmbBFrSL6XWCeQh19t4VlGwcS/R7bRykvzKPW8M+bp
+5bZmz1jj3oa8R9W74zhxdFegUNfpg8f70z8V4ufnPrV6BQgAgzUDmvbGl9fYJfTo
+pOPlUJkuHGwM08DoljHM5UTlwAfrogGw4ao09hLHczUkZWc0BuNp+RDjGH+5SIDW
+IdKAXzu/y0m2RMIW3PqDWjbdzoKmaUohTsRkUHzIGgTLpvBDAuxiVXRCMhaUcCca
+jgzBrLViGXlJPOmRYsVphQfIywqKWN6VSIEi0BNkHnN+ZJLd/f4AZYTVQvlRmM+D
+dzUWfmFyUkg/lb2ykh38A9mP+MpoKNUHId/NHt36aP9y8p8JVywRS4kCOQQSAQoA
+IxYhBJtobxQUTSsImxDyrZiqtuMaAfobBQJae15gBYMJZgGAAAoJEJiqtuMaAfob
+ul8P/R/pReqtxePDZfHT48igQVobzrhWTzM03s501NmgP8J2WrOvthIfmYbH55+S
+QyOggzTGY23/NnF8dZ1T6B4yesH3UR6dxCF0vkJvFIXnOZCxLaPi0ZOIfjh6jQMs
+a+zPr1F8Bd0D136z0udiDTeM9Exa5MplrrWV3B7towaEzADNZETZWdWVJntr9KoA
+SAWM2c63zRzBBCymsy5SzPforvtxQrFsaa7acAhbYau+jhSKD5XgZiDfmdoyL/6F
+Pr+I8tHEBeN2tSVRwNWXDjNo+qaX0G2xuIqkHoJm+61gCtagUmLAFve/yMv350jo
+5SyQxTA6yuZrTpq6HiJYyQyfm72KWk9efM4ciNGDgKi0x/b8N72RAbWY+J8i92cW
+PjadRnsPHUmR+2m1FOUaMtOiGSMEheRbwZoKbTEr/ZU20ARG9L2gdkfPPw9RE2Zn
+QVggy/WNV4xxfi6uEel57eqTpeSmKq2A9kcDoAKxDYZiTk6Znav8ScaEEOYna8+A
+OtXZ6IGRhH1a2f9Tnvn6un6+UbRXxsMwHaRGmJK/nMQBmCTWzHVdYCAtGHDNOlZh
+hBdlFeSjZg6mdyLEokBbm5c+ZwYqGWxey1K/5LSlzVOq8jNPDPzNIWxAyHhLqMtq
+mrhU5Y10D31fQwPp/rLf6tn4PUN3ZzaN1DCkaVBMdzgsA8YsiQIzBBABCgAdFiEE
+G9iG8kb9SQh51OFQWgm0V23oCA4FAlp6HXsACgkQWgm0V23oCA6Vcg//c0KPJxbf
+Mi5BnPAkXf2arjph7DisQwWraws6ECZNzWauhWjRrAcdTjHL8hibzkYEm8f0OSGN
+fxW/a3d4NyMNjHRcgDYy891gLxFFvUd2UqmwZ8lJkr8+L8363Lx1UmAAHngqlL5W
+zbwQW9ArhT0RKd4dQu2xs1zKtZFIOQ0PTKhpxVa3Ch2AsYeDWGFUyvHVQ5CNFxb2
+y4P7wuE8dNH4JTpiJfU8HN66AAwLszT612mzz3kZt/0GivryulrXALNxWS7+uOla
+OrkF0X0pCOfe4RIQOqWirAlju7YZttyOo41w/tF9m2TTLIZTHisCGSw1GEgzoJEA
+zV6LaQdVuZJxm3/Q3Fsk83JdG8VR1J6n4ukAwFQNgbJgefT4Mz+BIB0W5Bqn9k9M
+36sd7ip2ZqTyA/CNH/3zfAwWrctAEE8VA/egwhhxagAQ/whe8zF33kJkCJ7g5NvF
+BNdpmPJruYezNe3kuxHbz+PCP+n2digm0JMnviayz6FySNRLXm2qK83NmdC373Bu
+hjtijkHe71DWlAbCCvkHYNV8VsB4A0cyGUNoLPLC/I7IjIWh/piiUUG5w1nZsljy
+qMMjifZEcUe41EqZ/eGe3k5yb9fnohy3Nc0oUkuqEC/upNBgSq0sM1pXj/VoQ/70
+qjmJrT8TlEXUiNp9rg10/StAzJj7Id9YueKJAhwEEgEIAAYFAlp7S2EACgkQTXEK
+QHwQq8lVLhAAgX0CiV+1eI21+t+epbTxoZq6KjMFgKGlcN2idcStPeENGlekd8z5
+GEdqJ97/e1t4t0IhLQx9hjBy5eZ3XQd8txks0JJ98WyRi8RZwXAdePlzQaVSZfyP
+K0JtlK/p5NYKvCOC2zAA9u4mTvEpW58PKEaWbfQo6TvhRHt7wJzCVv8ASMfvNqXU
+R+AfkrO0hX9Tvc6Gf+SLaADWh27ySMb0g5eJnEI/wmnDvyP88m6peFixMppBn6Of
+71e5xINeIcrzLrtOGa6/cQCSSWAZT+Pd6sVjmL6E4rjjj8gPJktOkHNXnmp8UQuX
+HxQ3zURKvLZTznM+nYhS1HQ0NkimNzVRr7aSG0gvhJneR7phPqmTbEX36T8XV34i
+GxOnpDUfMQe5oRUfsNRsBEIU+dhUo9hI780qbBG/Nh4TBRiI0dN8zuAWanfoVRu9
+Q0k0kjN3KQNA9U1qN6aiFLa5CLzyonmmkvJs36wr9EW/DaC2xXwjezMgRp3tx9aR
+UVOTCeJxnFB83IkaHDjkoIQ/2rYQoSxjdINz1GAbtJegAXT9tqTGja84wBFV6GHM
+R1cs8IYNJjX8fpY6qL22zdgFtnqBhYKku0JoLTxIHxX1giSqV7/WoW9JsIyDE4ip
+uZDudzyUmhs+qF5p2vaHcdREmpFhSE61j1GAcdcDB8J+DjdLZonMQq2JAjMEEAEK
+AB0WIQR39Cp6NEHuUS/QheeQXPLEKkBmTQUCWnoBuwAKCRCQXPLEKkBmTV4iD/4u
+obzjN69Ri7gjyzKJdPnejtvXen8VlTTPug5UAK/ZGgYXs6u501hgJ9BoKwD5P+hC
+zS2A+0glRXK2gBOUFIyyJ0Nvh9LzXH/tnvmsGlgjxR9z6GvNTGnx9pDWdAzuI5LC
+c042I5tbEHVZa5l0TFMxOXj9rGr2WKOuvwH0a8EVSwC/8QJdfQPZ/kMS4eCtIoUL
+AR+yE5hIvAIw5dADU5gw9FnPADvb8rzmAcM2AdaTr5CL3kbP2UkPgvEWFsyGnNQY
+EO/UMtblD7LeiUIHrlvu79kMPIeXKpAy9jPvVo5rwKFGTnIJzmVfBMgVCZeiA+tQ
+1z/HuSZ9dfii5iUPrm0ZBaDPRWvAOR3SpzczEu3saXDzPSBxFbpHSl6PtOUO1+1K
+CpgwHSEjBaJ9FPhCz3bU3UVi1ApQI5SdHcIQ2GIvmPEaq7pl1hdGK3UtnT5vAmqJ
+6gkDqpVEdwhUaNOKwlb/gNm4V8+498IhwmijQxoOY87FO8RW8evM6l6n+BfsI4Al
+vRYhJSduOR1Sy/KEQnd4kANcMT+yDerTKYaHJqLgGDY9ad2VIUQKrFMUMMKneqqe
+XsmUWm3FNSAsOOWfh0qB3/NI9bftsPytk1tnrpYvGXvN9dPCx2ZNHIPKz3iAsm9F
+1U/kCCHpmm0PsWqHZ17Onlki5EWMeMpbmm978mcl3okCHAQTAQoABgUCWnx1HAAK
+CRCpyGyN066NOqOrEADXAtZHpAUtjfgWLyseZj9MbhHxK+qIIKM/CklvDDdXnU1C
+Hwlw03vzm4w48BaRPvFZnvo+e7Id0W/z9CZU1YBSWcdyFg/yg4Lijno4dH4Ln22Q
+iiYlacCGJRxaCIYKxmdvyd05Y91wYPwOovKw5LlHSDp9tptuWMsP91k59BYZcMNf
+JdM8PA51YKOv716J4LDqMBzgk8ZruhZl8J4hvXTGwyfuy6UaBFAjZ4WATKg3ckxd
+r/ELc23C76+MPzsqrEG+nYnErneocpEDgRMfVwmcoZkVXYY8ICQApVO/8O0dBeaP
+WKcAQOu3Zjn+ZwNkA9m6e+p3dZHgQE1SxsPf8GpGtbO0I3NE/otqijnQ4LXSKm+D
+XNzdGbXzeafcIIsgnjyCWtbuJL+dfE+9U/HDGJFzZ56vILpzrQEEkBimCQlFqc8N
+tQy+NKpnsQbzTHL22jzT/ggH2E7/DWrtzx8sOVQkBcoyPbMOaOvmf+3S4pQxsF+Q
+Rtw7oaGHzQD47gKQw2Bs4dqjHBS0qoisYwfwQ3ZaltDqsKyyatt+8ugD/IAAzndX
+tLvi8mXLB2ssPcKi4Syq+9jQFuZyfcLJZ+2vqwY8LWmBOSATPSW/M4XF2OSJpB4v
+JVf8cG96qwPBVJ0z6GISIg7gCEWlo0Va0sk3KnbtcWphwpfX/lKFfpofjkHhyYkC
+MwQQAQoAHRYhBMqEY90MORVztMmDT67tYVgCDq//BQJagIeFAAoJEK7tYVgCDq//
+1wQQAI29XZvsyvEmrYgRDAtBReBHIiLETA5kEhVXfMqDpJ+aXp6rfz2XlCAlLQBY
+febdI4RZ8cu0vzC9FDZc6+G5jf3xwygp7eb2ECzvdFGZ8k0GbR3Mu+OZFPZlmFEc
+Hpx8suXkhXWqEzryYtp2k983ks2K5vOn3RVKFv9oHESdm8/8XSDumCjvwT6Wd7Ni
+0QscSYQXoHWB95LdPnd0h4ZL9NeYgyBtJr7ezPFqgFnLLabk/QHtfRvODJTqHcK7
+1TrhjWzSITuAl7qakaZGdEy99CH45MbNcVDyyYJ8mz2nE35Ybx85G3WCgNyVtWhU
+uX14QDT9d5J7taM8MJ0RG5uAAAoDQUB2VjRW0JKrtJZDYlZLZAXuQaJ684Naq0gL
+ERDo6FI2DQeaeAHNBst/n2+/KLZz2kzcOiQVzFeXnTnmVSmWTpZfBcKADXukvFEK
+zgUMg5CmewklqE43uuM2G8ofnDkr49/jk7bSH8HsTAZOKnlA2pDE6nB9gKbpsSdr
+XBDJZ4pJCs37smqzDjhVaWPvlXd/BhVb2GYLg0C+R4Ew9BkDNaXoQUssNhzlmGbi
+iLjhE/3eLLytkaCaoT4VKoQwHCH4j9ny992KklQFG055MwVLDqNKj5E2qLkJx0QM
+EEonQ4iWs9vzlrXOrbqiBtGUgYbwPabFFPBO67fA4FKb7WUNiQIzBBABCAAdFiEE
+cnoNTdue2fYDm+zvhH9eN5DOCXcFAlp5vBgACgkQhH9eN5DOCXcf/g/+Ljzc8hig
+HqCDz0EzlBgVDSdkeFeO+WVQD/ICEPcD1ajMQCE1GUTFc94mkSLPsDXqe6LbQko/
+1XwM6PJGPwjTVJqsDGwfIS+nc4SR1fFiFpYLjxi4qII0MFQ6H0plKwoT/ZH2mCFZ
+6jbciab250c95jbPzahoz4HIb9cDUNuiDuiJZtLLNJNXUe8vHnhbI1eLojn0qzFs
+YDMHQt4JRetF18dCN8lhDoBhpTuBWLm48Uz9Z5hKk8Pm1bwRqmVdkdPhiPTTVOKs
+hCvX1PYujH7gmFNqzCoaLxPEg9V45EvfUtYSUrCLMr9fKh5ja5HcSE03qjXzugYQ
+X/bbHXDG9Bnn2SGmcyyNYcHTqZn/bEhXpKCKC4S2yIaYGbyHQhkbQ4rLnKLAJVyX
+/CBkrRhz+ECe7kABA3oABhp+yKB3EaxNWI1vFR3LnujMtSsbcyZgzPEQNcPRxsPm
+4BeIeDb6yLNKiLTVAwX0H25L+rtGM669Xx23AsNwiEhyQpO+DjnJuHMUOR7MGaAq
+ugB+qDnQaFT/ZPeTTMTT9Z2ZUWIBnvOCLdM3Nu9K6KeVgZamdeel8XXZWZfm6cJS
+hlJoku2uORPBvLMbi3xW3yUUwVpX5e5Yapvy/imDkQuQRgY/lV7+zjOjBGjM24CJ
+7a/Fs9rdVKnnRdbt7xCWpkSnPbQAL1hD8EKJAhwEEgEKAAYFAlp5r0QACgkQoWIS
+EYrLTMWKwQ//Uv/w20wf6U81BGZ6CeF9oc+c5d5qUlH+xWIfEgmxmnYQ26nRUyZa
+qulDpWzqtH5+6HpSdUHev2NZODVURIqjRUYo9PCF4CnJvHQEjGdNJcH625k3ufRL
+0wVpB7yDTwK2wpQGBJU10fdYRjFxQlwFWaOToYQf1DoMu1nPuefR4OUGrfueLrZT
+slYUXr4BX7f+2jNdki53XHdXjGUMUzJ/NTSekf9OpvZBeXeTpFhwYMZQMTKk7iHX
+LjlTEAFb5elZ7KfG3pMnr9/I+AiqP40yAtLpsx0I7Y6J7sY2/xqXIdyLNpL/0428
+3NVsuF89lQ3BqzHZp5Y9c8ln5Je7kuqu73hV2qZz1GoW1aRyk2V3a4f28U3QQcWR
+PahZW+Y+ZdsrjxlKpjBUTcuuVCdbEzO2lrH+UCW7+P+SA/JqaGd8p8ID1e67qd0c
+0dkyz8RHTxiUTtmYMUWoRyAnvU5rORGnhW8Ov2zPsv3xsiChLa0miJNpOM+6XQX9
+GepaZaw5ZFZQxkEtD9EOflCAJ+vsyF6WZXi+fGQLQ1uZE0i1SzJjsptdcXzC67/N
+j2PVai0RWLRIFLWZZ5r1RADnHEWP7zeHJIJUYN+BNhF4dGAEb7nrYUc5rn++vGAE
+5Cqj/lFhzLZXjOpgNbicU6yidYADLpOtf9HVh9rpiPZfuoR7+JSbuoGJAjMEEAEK
+AB0WIQQx2VyrbYDSYiRKF1CkdiDoAeR+lQUCWn8p/wAKCRCkdiDoAeR+leRbEACz
+gtEWtznAq4rs4161w6Lw8Xdsf4G0M7cd49Lrlbh2Z0vyQi3jDmqkXLe+TxYpPTMb
+pR/cN6z88igY2AJNcBfiq5iIeOGmle66B0nodolHEbuHKyOBI0nXFPsnBUrnwSm9
+NTuz1TZwttQuI1gWTxvH+09xkjuTIyCZHGfH/CUcgumRoz2lvJwGrHh/STlgYcLo
+ZrZyx2FZQbmxPdIiXeWjxOAPZEEv1vmTzIY2Vpt6cGCzfCthFnmG239o7yAPGqvX
+vR/T3pv0mPmnACHyI+sbOmXtvlyE5niDRBVVmUSiwYTTW3Npn/vbG6O0LG7Ae1SX
+X0QOjSWD2AIX6M1WAKPrAp/RQ23PZ2Y99/9BThhycp52r4N6gAwepeReKnrQazUO
+bRYtV2ZMpAIQJTihPirCA/jCpHF4njZ1Cbe/JwiCQFPnQck+q9pHYsfJKbWwhMoy
+2kelacP7U21mjZiu1NBqeedoCF+wVe5ZBsUDwZFd75MBsUiBq8s1ts8BZj5cIavu
+4LLimzZnjDyrv6QLLM/P61E1kYcspiNZRYwYCijsntHBL3/MUisrSQPftJ5viSEC
+zk+dsa2+bhmS86gwMyJRRI5sm+oZe81FaltdVLEy6ss4zxOmM64zLbUgUUq9Ezq2
+EiM8a/zseI+YWraGn3Z/vbCVOsGVIhiCYu0lBmqar4kCMwQQAQoAHRYhBEy3/h4o
+DsyQ8ppZfm5gi2N9iWfpBQJakJKEAAoJEG5gi2N9iWfpxw0P/393wPyresAp1h2l
+7Yc1TYxXJNipn94JXXmVHJCS1I5w2EKXY8aIemWP7S+97qHKM27WQIKvL4Vc9/dJ
+Xfn7OjGgLkLjpiP5W+k9XlF9v+Q8eqEOTBH0LpVEZ3Rlz80QNsVe4dgm5rBzdfBx
+kkHDafoG0QoCXUAinssCl/cchRYH0/tiuEoYbjdIK1KfXucLHJM06qwP8QYN/QVk
+nU59v/RiAzZ6mO+PT/zXo4RjuQtFk96dHspbfMCEHirFA8/x0QfWInForsLHyAxY
+bLWbNSXjVg0Tap8NYcY39V5xhxX+ozguXPYBgzDVVwHXmZ6e0ni6ppSakR3aiGR3
+yBlLjJOw37EQa5K7NVDtfcdst/lkXTz0xw4c9VmUW/stZrmSISz4nJrjsQ1cPXHC
+Pj3h7kj0ib9LqsgMJjWG39ut9eRsmfFa31CmQgjNkjlN86wCSap3lq/n2ctccyda
+49THWk61AK+Npk1XTa0fxMn4mkkBRwVNxqLDbzu50kOP9IZ4pIvc7K0fM9yVro8y
+uoaepr6fh04fdpGr4g/BJG5h+q6G7HQfeUdwYEInXGe4RLbnSjlSpzPYmvkSL1qo
+3jM2cZvz5fXfjmuR1Xt9skb3Sa8wZKTOPGvEQctIY+ByEvrslUeWuRE1VicTl/zw
+yus6JjozGJx5+7+szgmXatywJ6H2iQIzBBABCgAdFiEEqO2+mVDsH5Z/M2DL+z0l
+gztqr/gFAlqQkokACgkQ+z0lgztqr/gxuBAAr4EXTpJddJydi0DWJwFvbDYb0WgR
+fcuaHPA7B03AZdLJVPfuJyUg5f8yWhXO7Cxp7DhooUYz1Jeze7b96Me+INdn6y0L
+C6Fv0FQM9pBZUqkBHPamSyKX5ZBJXbLXWN5aEgW5OJlDu8EkKW5N+m+x7cnss9aR
+HRjmZMrOvU9Ko9KrG0KYL3vZX/G4qfCqBjyCqkue8ppeL68v3yGcFJ++LlgqLxJs
+sdFPMTbU0dv3fIJ/mcX51aKQljBJu/7u9HstduciG+j14/Kino9Xx/ZAx8CqOjzH
+a53rHGJRiMp+ABrGW8NiGcUM3dd+SnXPy9mwqrYvF7j5Rkw4sTwm1E2aqKIXsAej
+zHoNgfJD6zCDmE4m9g3dz2j5DhP/g9JDDRcUP0y5LeXor+1c4IWE4JSkoAwy9UJ7
+VrRyMid+l/NOcvgNWDpcDCodLee6Fy1uFuGa74t65UAlhumLQE0d1RH73ZiKuwVC
+33PLgN8BQEDHyqiAJwH1IrJPPN6p6Ga5BnP1GvbTZul1V7IcFNOyVNWDNoS1j1ph
+Cvn+WXQNyEoLpnCt1hsVTXn99g40hrxhICzMCFQRvNZDvmtCVw1MrcF0l70DiRlu
+RBB8RUe3uQzgxtsAGBQohvhSw7js/Fu3K5m9uUzMddNKHyTytV58CeWPfKRmXKSO
+uKYIWsppsrKwlg6IXQQQEQIAHRYhBNSlI9B76nS70hhER2iYgizI8lL7BQJaeb+2
+AAoJEGiYgizI8lL7BMIAoL4Wf2EbiHTH6Yz+L4o0JkXALWHeAKD32cMfm4Vtd9ji
+md7zTUtCEBmpGokCMwQQAQgAHRYhBBZRXR7VirywNsMfWYOwuMbL2nHwBQJaeb/E
+AAoJEIOwuMbL2nHwWToP/3KAJjk/tnYuoJ8r6ekOJKVErWu9FtoxJz0yqdc69Jwh
+zdEb18CZq1jjxWeB9ikrLobB+s62qY6kJQT1e+tCdJg5RoP0q9yReSeUQET4KEIm
+YDn3Z2YTUSxwHt6VlRrTL2aIIrOGRnlzRnyBtoEcNLriRPkPL4Wt3kxY5p2hLhTg
+5dwuiujaMYz1nrIzHfeS3rdxhTaLzVwmv+nr07ah0j/+dZditlO4y55k6iF57dKP
+HbzafbkqQvnkR3amLerRddsy2G2txpDues9fTDN2auTFOPlLyT7VzZF4Dy2gHQ8p
+G/aOgJFjQFJxRFUy88BYBqxz2Z4NYTYukZskG1kdB6SbK8F/o0Qd5McvdeLHGD1B
+lIKsVsi8gx4lFE1QgW/Pl8Dtfr2TN9VeaxikWOHCNF2Kz5kiihWRSloaoJIx3gxA
+bgh6u35DOJb/FtL4fQYH9S9SnruHY4UUmBt8Vvpm1/iBQ6MAaQVsx3vl2EBMuNBP
+BaktC/8IBgC+L+y0NT6ueMIJ4YlNTYOWcG8LH2tjSsmdHoI/HGKmpibF2iwh3lXG
+CXvgssGq/lmv6nwjHaoq0Pp+uFyu/8nYCmBDJ7IXpnSYHodH3FxETs7hZGn2A/iF
+0dQrEcmkfjdHYd+iHTEOAlEPytozQOqhaZmctk3KY+omqlQfvl5yYPhyKWuxfKva
+iHUEEBYIAB0WIQQlVSuJ0zqm9oIwHoKuOuRWQiVRmgUCWnm/ygAKCRCuOuRWQiVR
+mpzmAP945S+1pfOiXYr5Z4gjwXgD0oXHhbd+VQbfM2JEQ5etlAD8CpnXmqc/z7tE
+6tTH/XVUTWqVPyKK9DbOIm0kJjqBigCJAl0EEgEKAEcWIQQL4FGyEqUUZAECA1SP
+OcjvvJeSBgUCWrfeYikaaHR0cHM6Ly93d3cubWFyY2h1a292LmNvbS9wZ3AvcG9s
+aWN5LnR4dAAKCRCPOcjvvJeSBjQHD/0aQxHRcy1KgxCCsZZCWi8G6GLh8+kDGa2K
+xuv1VZA9Z5LMjwalpr7Dp7aQ5mCERKX0E397UJgBRCFEgTORkw0GlSbjHoqJMQl/
+2fzuj+x9hV2rs9I6WS5n+HGQiCMEImRT+umedwN1yeOceeZc88a1qr5v3jq/WXZ2
+PCoNLpZvPAPVMTpvlaTYiYorLyfAv4Lyof2EYaerpFxbCuhbQ9xacAJs15VBA6KS
+EqcrBzl/tX6FwuTphjoGP84jxEncfXhy6LoCzNnEDCLw+aDbWVfg5qQtTGe+Bh2G
+oum5aGXJPqSGXUHfVCmlThEqskwqNnlRnHqh15idzj+2bE0cs6gc+2f4lyrGCGsC
+6vGTaiqQe/GIoS4Xo2jtPuZUKvHSdkp6FUtPg1c+vgNQYhw/AIgwPe58V8eJnwZW
+bSRk36NXqD1IZCR78AN1Hsc2o2PxF+8KdA3m0RgPyIjSQVvPXnzN9MfIwi2RnbKI
+qtua5hIPmBfY0le5fvr3G/l9b8Xb7ZvBhoetpd3S2fjiuat8L6qu5Xy4aKN8wCzY
+cu8rWYjWYym3qW5Re+eBDob02t5hGnMgUFNwNNR9z3YD1LQpo/2CoVw1JqGpgR9C
+cbakYWtEoizAcQ8JgICM2Piv3dA7AqPeGrj/SKBeNEStjkIAueRPwgJlit7u8n8t
+qukCGbnb4okCMwQQAQgAHRYhBB+vBF+bj4s+vyf8fTxBB+aCbEDkBQJafxgtAAoJ
+EDxBB+aCbEDkx7EQAKYUA7D7C1mQghZGS0B9vddp2PvOl6EjxjRM5ahmzkwItKt3
+4mcR+iYZb1GX1UT277nqzzIlRLvMVbVz1TCeigLlLb0sH/kbETGJ38tugSVHoial
+qXgd0zA2H5jNtZ+kmGpyyYkcPZtbhX/NijxvcI9UJ43ndWE4qF/0Sxz30tr0t3f0
+m0JPSvLQ6eclQshJ6ayBuapNateW4FKZx+qSjAWabLVBrvcZoF/8W4fXJzqQ3RIt
+TcNrjhovhHClebrXlVQ3ia2S5zhf+395aFrd4nhTdHeNZASNReUa+mha1jaPJDQ9
+aUJgXAULELpz5obBq69rXtkY7hFpu5Uab+Ms+2TKk9fBC9iTMENuwdimd4j+XVmK
+AoxrM9haC9DaAqWtrSvFfoFOxKkcoyn1N/OTO0eIrc+HatTcJY4vwWQArsrYZfEF
+jksLu0g25C76NcBOYziR/+4qjP92GLYBJQdRQV734oWGM79bRjw2OyNE9KHaqnYT
+8EbIcLhP8T4W5XUlG015iDzp0r8gFL0nnLJ6WnPxqv9AMegwAiyqKjy/6PJCEdQ2
+ft6eYZ9MQzwFTO2oF0MyeKzBbKGaDwLK16phDNMHfTboRkmzMJRm9AGUS0b8VEgX
+xD6i6YAC43KbgjEeraQLX2mm6tcIqWgjb13MB/ubvsEj8VDQuZscFBfSwfxZiQIz
+BBABCAAdFiEEhOckMqWxbpwazo0kHbl3zc8GZQ8FAlp6CCIACgkQHbl3zc8GZQ/Z
+CBAAvd18Dvn2mMSQ1lS3IOeXSUHzrSZZLIBX5mSgzCFx5/DzANFTJT6+nvu1JpyZ
+UVgmqie/GFwXjzkzmexQEKCG9v/GN1HT/vkl+iQhP2FBQEu8p/nF2jlxS53YUIMj
+VMnKShf+neKw8o1oiwzL7fg3alvKbSql02QikxzC41gxQHquP6J+7W7l/OIdbCo4
+cq/tRfh7Awvs1bHAksy1AGwcWjyDBoqJ4HLNPSCJMxfA9776CxsSl6xRBKXyIvwx
+i3XSbAnY7xjAI7FQxC/6bJ6nFVIYQQPQxgj4ej2zXdE44PGYVFWfvuG7jbPpCHxT
+B05sRYvm2Jl+IjG1MRdGuJfN1xmdqxutRxfX9Bbb0Z0K5je2SYN35NBbXzeRwQmd
+ryzu9KwcvLPbrbwv3QukpbYbk7bFtzKigC57MGEDE1sysMkafacv27xYucnMMJTQ
+eBq9GqttLe1wPyAexD7GlFde6yR4h1NT54FNn8jiePvQHWEKsCIVh5qETi0y1V3w
+LpPVLmGMthjVHsOqLqcNlJ7u82oBVRyjuk/2q4ZUVaWFji3inMVeHT6KE0ttWP7g
+zNpTsVEjHgwvYu/DPldcihgev8Uq0QqzQgvxBW3r4n1D/EmQaRoAko7GED4YCCk1
+Q9aqUrX8DTEGIFnlkjp/pB9gJDx1oeENl/KLcs8LljtHo0yJAjMEEgEKAB0WIQS1
++u9MGDA3Fdz6B01YUrlJPrKU4AUCWnseswAKCRBYUrlJPrKU4KKaEAC47h9NeMrq
+kxq/DfXGC9G6LNOxHwToj/IpQKuT6Kmv/uc51FIGrdUAMSiq5RVzI+kOsI+P5aAq
+WarGCJ5SxOD666aGNyduDMxxlyXrVWVx6AyxfRZbTGyA7Dg0T6g5gvnzxxQxWIVD
+5IqWasvprxdiVgCfo6qo/NQeNWFupuqZBAPUJLpzd9KJm3bmwKwFVJ2A9CeiAn/Q
++0LS7OUKn+hVT5xBGZ+SFMV+zfYqeZjxdtdwA5daHsjYyLeuWAbMdtf/J9jT0pGg
+ln3wwqXdaGAlifjffOovUrO2g1Dh4m0EA/J0DAic4KehiTmo0iSl4Bw+41CKLAnI
+8qeB8Rd8QMwrlwabeGW27W3a9kkhn6bcePnwNxobUjKqIPOStf0GlroJ7yUfWxJO
+vf8+QnaI86NSJlnGmwSFcQeiP8ijmW/IW+OowsvgXFbfSJHDNmi1EKuENbRuklK2
+JymIhy6maE4x9TSCKti84cgB4SUfmET8LerV7VYqFIi+yn2/g6eyoS2hXsVX+hyf
+NSwh5ovQ8CIJF4H2SxU9HM8CI83g1xeIGkUF/NWdO2s9faFszj9AkSMqjTP3K2WN
+v09euyRDHVrhqtEiBlY51J9BZImfEYBZfd2lyeiERyJI4zxay+T2KB5TpwoyeFV8
+bHUTdZWVirzKGYZe8PtNlawMb55DOuMlYokCHAQQAQoABgUCWneQCAAKCRAGBPSQ
+ykBVvFWvEACHGFmL0o8TPdqFwWml6dpE9bcr1zRikx0SK+zG6rgGLAP0NUL1Lsko
+eBaFTG0gjiQfiCuirPLiZtOVQ7XodmqTKxjh7vcycpPwlDuBt5ePSVyYRbaw51zV
+5icZ0rQEMbSXIUeUMmhWB8lM4kX40OOqmWJVJHabSE+s3aUBUwRreEfhRwzsSzsn
+29fNFLEnRf0wOhpcWVbS4AjCHpH4Tvrw72TRMR7QnxROtzANwgayowmIaiFBVyQu
+b0/nIef83APCAr2fv49VxtB9smvMfsjH9ptGU21sS+drHAxOYdJELquF6Tw3t00A
+9WH7BoRHmg1I8PhADSAej/7QUcCvx6AbGx5eUa8o+CZ+caVNhaWUL6VttOHNDUke
+newJCWx9gHgSbfr2xJ9LUe3w+TQY2CPFos4vbF+25QnfsBr0A+09XjyGf3x6vhBs
+6Twbr5nQiZvFUYyX7n4ep71ilg07ZRr9KwS+793mBSmYLV3sunsd9wPwOo0E4/99
+4zGiSdIGPSIe8hGD6r/81a1HFPDVE0q7PoA7xxU6pNYDXlBsLigtdTTuTbax8LRP
+/r1MPLqBzWfv2wXrBrt6rykVeOVJyimW2EnYrNefy4lKn8pgChlvrvzhTwTkFsa6
+DAB8+Mn3Kso82JOtYPByVdxtyHanW7Gj4I7QWzEZuhfsO7G5vSk5j4kCMwQQAQgA
+HRYhBBrYH3hbUmlZnWSTky0DfdzX9KweBQJaht3qAAoJEC0DfdzX9KweKuwQAK/U
+Rlfi1zpgQzYp5J/PBx2okhFqtm2pveyC0EE0SJUU6ssaYsAr76Btp91a4agq2rdN
+Mo89fk1r74JFZg/g332+7+JGZbjLgsXVs0wwbEbEP4Q26tCqwnxJCnQjkk2sl9HL
+3f4sTBxNz6FxldLOY95DdvF2OYIHtk6Wgic6/Nq/5mHlqaAayTOmSsceuHLt6QHG
+hyGubaZNzyyBW6XTXbKOkUwrCsJawXQ1J5OJHyZrj8vjMpmSDp0yqdlaESc/uNcM
+i0ok5w5Hbj/xZN1ro+KDQG3YaDsFcjyV6c/FRtA9h0KAINIippqMMswLJbPnYRI2
+y1DLBO3Zf+8ZXoAhjWT/sAyHl0e1tn+TDSsqwOSj8XwVeNtgbM7zxffUCnoNZ/ol
+t7Ke5qIbjFBjn9SntQxmqZpblz06gtA6TgHVIEg5uCMjKjUEFkNKh7alq67JXuzh
+NXMSluh/r1XB0DI3gwQXugccstOqdt6LevvvYhF4zVSGYvF/mIJ4dOWYFJYPnfhr
+j/F8ATti86w/1PW56nXtnY60r3q+2ozXKJtivY5Eow47JvOxGpVfJiGoXjaBtFVm
+s1ULHUo4xRaMsysv9Q9V1vXPgNTozuOGUyWzrqcWukm1Oyme/uuZ04IxR+gtdBav
+P3uZYAkVDVx7Fok4zyev94RZhqmhWD6QhoKjzx91iQEcBBABCAAGBQJaemaMAAoJ
+EM8RCepqlbYYfWoH/A6jdrpzyDVJsaHili48eZvqs3HZjZh3k/Sx90btaK0dEIpb
+P4CefgsisEAYpdtfbAet4gbidAZlc41HzOa3SLF4nPYNTqrO8SEdsWVp52B1c2mP
+9CyXRniUuO093cEDsJdkM4UhiEa7NGzjRFlE0B1gBgzxOIJcCTgGXW0kVlgNX8SZ
+JOor4unsBvwpWpp+Eg/XjSBNn9Chq4w4ybn3z0LL8MlRT9qFWnJ3MI0GYm/WPZgE
+mj3h5TBcTFNNsOpagAPSqA7ROOJSLLM8O6AaVfV/TrRHg/cKZxLI+iwpCxYhbXY8
+8bT89sAAyh4vywcoXMjtON0oW0stS89xhIEVrU+JAjMEEAEIAB0WIQSpzmFt+5Gx
+Q1uW4o7qc+YZOYgODgUCWpQJawAKCRDqc+YZOYgODoXFD/wO9IafzPmsjzosbWkJ
+V+qpTzNVgiCyq7QvRXC5jbL+9N0k1/16qXNhHBcwpX3YkgETXztI2RYvs/ow7nOF
+hF659JX4pRjd4QkhkbzIytF2s8Fj2NnNFwuJms1Yr8heczUO2vjbCYUFRbRYMcsk
+8BM7eZHAntRlsuXsQjkXSZMf7SuFEzhs5HBn4HuCBrVVGifzRgRRItAaU2XvGeSG
+UyQD2mLIsEAjLre35n3fx5Ds228FyavUZd//wWj6iANP+qEbyZ52qvJe8ctgM/Iq
+gUle69HP6qij3xfdPQWvlxYwSVkkOKyfL9iAkwMXG626XmCkUY+pn9+TjBB1Fz8T
+Qd9wVFKST2Is1bo/Uuk4hI0SIJgk18ouHQAN5aOgZXDzFX0qngAszxspnbB/T7C3
+6J8VVqDxE4F6pwTltN2c7SSkOAWnx3Ap8rjJEazIF3YB00886y7jT6ljgFbQLtGB
+46OEnrSSDzxoGAHwiQu+Rk5LuLzqEF+b+lxAPzqdZgJSz0JskS5O/FhN5TPCGTiv
+OjSaLbbf+faK15YIbROOVEOYfrNqOXGvdYyyFo7iPa9EYfqe0ULTbwKicYIZxSez
+vAvlSMKnmIFtaOj/1q8k//bRRKEu5ol3WdDKZNcaFOAWJl3HIHVF+GuexDW58/0G
+HzSd4c3k4VH2ykgR/Lg9IV1pe4kCMwQQAQgAHRYhBMeLTqqm1oMEEFeRPXQ1h7yZ
+RieRBQJalAlwAAoJEHQ1h7yZRieRSawQALOT5sbrThkuv7tDrNQi6fFQqiVN4uLJ
+YOtpbyqrwlrKMy6dv0c5IInehuvbiqzTS7ZQzS47WWxWz1fDkF/aiuvVjUK+YDA/
+v5lxB3ca9m5/5Z+ZuzuJQDJ92Q854Qrm6z1nwbe8QhGR3cmnBdVlNppwfW+Fm8Zc
+gEwhfv2slE0Aw3dk5lO92tve9JKwVY7CrtF98XAuR2ZSaQt1KGqU6wwDeZmJSdao
+HKbOp7GLwuQTMS1xVS425SofIh7jUIN4FYf0ckC4IWiBaUIHIfgQ1PYztnH9AR3h
+c9/03gILSh828t5GtP1ZJ2sqAdRtPlby0HD/3doAAAIpipf60SDJOQnNwijys2R3
+1lhjsmbbklNz2XIAwVxpl7ZHh9jE08xKIu/tPqRikdL7I7OgMWVIdBT8gTEE+mY2
+zCuEHMbI40XylPDk9OvHa5gonBehz8i/7P4g5uvt8nkotLXD9XBDeeuXtNwQmrHN
+0/aDXsBTODTrchpEzyiWfSl6Gt7H8aVMxbHxw0yHtjSzJu52DDDiH82Qhw6wmLCU
+QEGj8Ckf+E7MyHhRnSpIK71vQoc7v2FOLnhRh0S8hulwLA6l/giEOWMlu91of8w8
+R0xKTT5iYhYJK/1/6TY/1QASzPAr602efcf2o9t/zevjOQMkyA4Djv+mKHVdZauK
+gTJ96BjxdHJHiQIcBBIBCAAGBQJaiZsOAAoJEES2tMfxCDqn01AP/1yDBZgXMT2U
+yZFSJNVAB5EEVeYihm5TqP3+f5MyCLaxXms1jIqCM6omDZd/SdimWzQrbRQUlKlT
+Jti1KZI5XXa2WHpUTjq/3/sElSJgeDjq33ZDm/VexDkcMlqDYFuocKrT8pMJ42zX
+GSL32Dlx1wMTEIq4SmfxBawemi+6balRuesqtd/kGuwWIUbtLSHdrs2qs2kRIGsm
+BZi6EcmeDIIt9KyY+466guK2740arwE9tPskAtP7OW9XKstri3p3pGjl3qzw72MY
+cQFldi423zbiNUOXTVstekeU160Y1QxD3yYDW245AiF9E74HKKo0PflW26t1X5Wj
+aJ+4wPynC6RNwu1o877xklhqf6NfbRu+t9HKX4490ua8pUJO7cF9yyOF1CeecHtf
+vy7+XPV6CUX8f0EfGwGYoCxhUoUnQ9T35x8A6TjKTrtaM1NWH47KzOXYT4xLz+rK
+Y29sKjh3JjFd/M8O7Z8j8AzhJUte6w3JFyL9KGOCSnMKADceaBSrSP5gcIink7TT
+hsFTuvPZKvV4N7o+wt8h4UabH+IrGPR43uNcZJEpOQRt+BfdIobUIlGvp/TnAOlM
+gws9cHzgbHuUgpk0xcybP7ng2GTPInVrIKCBUKcD3eco+7XslBLtgH034doWaamC
+xVCDdENT24yVSuYGBm/z+rJAz8knSNGNiQEcBBMBCAAGBQJaeDlSAAoJEAhtwqbU
+C50ESBAIAJBiegOvE7QTAgmg72au83RAgonFdikPx/2Pr3v8xDsQK4in/vcz0hsx
+psavpNe6bDEvlRwm9PAszSLr0DYK7IeYLjo12eR8JsQY1FbTfBaOwn/wxJPU1BpE
+mVQbMg3TR5Ex77QjTRemVmyrA2oDhpDEIWuh+bkqXRUPB2p7a284U2e8dS5uDod0
+L/8YEaKF+25BR/b0//Ss5GNLE+aMar/3GxQAtF8TUV1dk3dpNFaEs6N0b+CTevAg
+A7EryHd2EAoVAhiKpUpc58qXW8p4O2AXuQNLlUViNG0vYvWvCrEWboQnnEdHELsa
+ejxUis1GWlEaEJfBvIn8tKnInNavcU6JAjMEEAEKAB0WIQR0IN+GvOFaRY3OmXY5
+J42oEJ5iRAUCWn+GaAAKCRA5J42oEJ5iRDyhD/9PXyK8hAYVa4uiYJAahcNj2kdN
+KV7YWuxqdbpbvGqJHK4hFcwAzx9Y81InNKaYsPip5J2wI6iSW4RUJ9Z8Bvsvb//F
+52TT+xRse/Rz37h3fiW1UEYa8ndhRNjbcdnnnCa7ecyEKqGkiLKAqPYJ2BzAfp3h
+LVy+lSiVHcVtvB+E+AxsRnfwcmPAIdsXXgqJQzQSThc+W/B1oyOcwHVlSHRxQtsA
+V0WjHmBsLgTEf+YaleTyU48mvtDiwbKdqTAVWf6FLE7RFH7lHl+aEZSMqD3T1bIw
+8MsmwGZSk5//k1CahvYTE5ji7lHWEhDNb2P1qJ/3bkJSBd5uyDVQV23DmXnnGFa4
+uqlOb5FYicZFLxfaFQkLTBrOq9UKZuIPV1G/PlNdbHqcitz+P1eoJFfQTGIdH//G
+KF9SBBcF1rdgTHXhxdaAqoSyyYA+dlfeLwbp8KiEX66xgcNpm1uQj/jFuX3JIWfK
+h6RcSNI2TMFliW+gtj0KgR3vkBOK1TqGVWrL31IifjBb8e5YJL9CQPNrpcSME880
+puUhNuXbvFlTA3BLNwAsKmQ4/DxUl5xd5M9o9SpLgEHMUzMQ9ofczhsHsZ9ZVIDD
+5vu/kntydg3zYRxGCC1BbEJc/REApjdVAehnhGzz/s9MhVo52fzIICb4boCiXEcu
+J1+V7BfNsgXZKAo+qokCHAQSAQgABgUCWniljwAKCRAPOGKEwDoRYvc9EACBbrGg
+BhvTygt9SJYVDG2CP5GG9Z/X9pcPVPKFMS3a08I075VHOmMFQxk5kZo+c+zePxtU
+iEBg+HdhIjBUab0s4vjVuRtVRNh4QrXrIJq3Iw1CnHJ+yewyR59ZR2VMVIVXtrsz
+2CSM5LtobuHeFlp8bjDokQlrbpvCQaucK5gDQ7OIfU176eqKvfgegP6D7AGV5AiA
+Rt57f+xZo2kqLkGwrs4IC3LkaB9kJXkIbl5T7EAbnOJcZUqeJAtOB3OS981b0DB1
+N1c9W6HcqwQTOs6yI/nc9y8VJ70mPce4184SR0TAcwkNSCQSgksQ+4qZ6XH6UpOw
+XokTaIo+5OvoBWxuIVdaDldFm0zTo/JFDOMsKznoBrG2+KzUZWGiGpa/2JcLBRa7
+BsRDUvODor6Kw8YE6iornWKFbX4DD0hI46s/S/+QFuYYFgC3sep+qzOAaWWsLLvy
+wsB0Vt02CeAfI40+DRmS1zWBN0iS5Xrv2VkBvKHqsKjZ6JwuYq/KUpxwX1jqNY44
+t5VKNuuo88Q/s0lqLaN+yUUJxDpC4Qwcif69iJ/d7sXWhhiBQq/pRZn4Jf6FhL16
+3UopH5LrCLqsmOrKKO65Ej957pilJCnWfZxQ1zCWk67xDIEs+ccSEDGtyANnizi+
+3KLdsFkGDCMKYUuwHb97Hb+/QcGF4QT9585jbIkCHAQQAQoABgUCWn8D3wAKCRB5
+6STr7afz/fhlD/wLpWDYKiGpNkPtrb0l8CHg8ly+TFtKs6E0Br3pL8cg82oaWhrI
+7M7oT8z1yG67loLfctjyJOdJpEPZv0cDo0ZcLmLpDuBQwUUSJ3a6OeIsEsqLf5b1
+VTyZ9CXlt3h81ZOY98XEPJKpao2P11K3vPR2e1HnI9MALkoZkklEpvXf7uOHnobI
+Bum/7GymE74JY+WM+zODUvHieXBTodz1A7UDuUlAfd83EVzKfLxS4fBqfK0RHpKi
+vMcmMcPdSPIQ2nKBF9Wpz6ELnRcwC9iANhJX9KIXgNpzFY10aLckdgVYl/zUSW5p
+OUXC0MuWk8sBMZeIoHupyKemWUyHJ4tzR4Ti7EvRD8OW6JUen6HuUWz4x8NhSUEh
+SJT2HpmY75DhzCIowCXiWAIVmg3JcmhxRvNxmlLaccbNaen5U0xO7yVSitaocehl
+dNRi91sUivNgqVBMJD5CI1wqhaB54L/aw/A1TeXm+h08zStIWJDTgkasMTLMi2WZ
+dV5EdzHoH26PQRsy4/KtwqOhHYzyVKCq5VN2W+GtODkkB8NkgABsQF2YiTdDNpkq
+Sd+QD+TnUTUPNhrUt78E+yUFUQoKr+SGH/XTgEvhfjQksYxV3H3S+XxJ44CcaDCU
+qsb+3+lipG5lNtc1o/uMlfLAB/bM4u0i6rrPCVTEXpVelZRDDJfvyZh5tIkCMwQQ
+AQgAHRYhBL5cIyCazdrOsg2wooyBifGYjCFmBQJajZrGAAoJEIyBifGYjCFmgGcQ
+AL8QXiro9UqQ0MVwrjnMyzg8GODov75UAC4nUJmC2a7FeLcqgv9OZ2d0qDKdCQIG
+5t4JKpmeeuOZVGVnB3Q4DfSFdgqGQ0KMvNMWLtWyaPHMqVEzztT2LB06A0d6hn/0
+NyD3Cdv278ZmKlq5XjlMXc8xUts7jB8ex3H7uWaOp7YryxfXzFFKhESl37mt2Xvu
+y1EVjEnNo7pveiebcT96EbRfC8BiRoZ9oS6HRuP91b3rOA2jYZTXj6tty8hTxIIT
+rYosmA0w9GvnEbxvMZ9rApm0gFn9ShmicVkjEBNkIdpZevKdpif/NaMHYIXUOqZI
+8Y+aBaCA1hMbuOWhrPo2jSW7jAyERy53U9xBwsoOoqyqoatVdviFe0tXKrzYJD9s
+2osZKRUxXV2ovlK/GKusqZvQu7pW7QnN5fK8J3NAlrfBFRwVij4hw+DBWECXpG0u
+gGzPYL5KAzCe4rAzwEDgFZt05vm2Z1LgxVft7xjpGyGS0a+WCQR2VTMTOxAUKDc8
+uhgXXuouECOyAvt+LvVcb1ZLTj8zXgtK8MZfJS+mvCJyjamJrQMsxrosukOJWKT1
+IBU3uMwbIP6TuBnYDqq6HsXG4L6Fc2P6x03X50XPF28iG/E7hWYhUYOHyHGonZHS
+sYIbX3ukvp250MmcliFb75b9Nb8LV7xMdxy4xx8025/7iQIzBBABCgAdFiEEBjgy
+Qepwa3vJzDuXKAo6t+NgeCsFAlp5j8oACgkQKAo6t+NgeCsy/xAAirEsBCXCCqR+
+QHPLuoMTiZoK8FvwFgT2NpZB1IK91ZzrOhfnlxJQAEFLKuFwj8zbrUJSETCtY0Pc
+jY7yAx4XGXJV0YxCCZroS2yPQoVm/mEbnoknuuG88Sag6eDIZhRyLObN9a8x8b50
+A3LvsfB3jpIPVyHxB/TwDMnBLaVeEeS+9hDqZIupaeiOcwzpHwLwB1CKqD6BjZB9
+Kmv6MQeFzsUcl29BTBlBT/oxZXwqm0KRm7CrLGtOSrNHUuOwYutiJQ/X3AYPvExK
+kHoy3KcpkvDgX4OUQRS1oO/1Rjh/vLQB86tgZ3/WlnVGExAUf8SG1w7Y0DmqLkpu
+pDCjvxUNZs9IxYUToc/+tH4/NSJj1HdmFHpUkK07Xv1J4dO688tHodSppu2xueEo
+MmH2M74hbspMNGtfxjyfPpAKF8MCIyVDeJZ8LqWuSpT1vJcOijiUEtg7o2Bp055R
+XfZtIIC0MLRUA8dYMuXK0AOcaSaiUsra0XxXnPuglO2SGu974sWYSJ1WYdTsAosX
+aLXJFMMpwyE3KUzPCvPrH4QKMSskr5oO510mGQgAoPCsa7bE+OQs5zAg9e8DA3vx
+5lNmBz2BieaALZlgPuuMKiNXjAG2P2QT1cvTWVQNXDXabBvnSRvaPCFqUx/+91bz
+m4iAsqN1QztBaZJ2Unj79tR5psMp5S2JAjMEEwEIAB0WIQRMC0kHCxQDWg4PhRWN
+nnvyfLwqoQUCWnsQtwAKCRCNnnvyfLwqoX2kD/wLTErB7zvPl6ZsiKHa0ELm4Xw+
+cWqr7EU4B8sbQHh9hfTrs3BIUEhOEP9sK0W8X+9z91Dvb+tR2O+KmVP9UAnZKulT
+ZoNq8KbmVNx6WkXACuqDzcLk4U2YrLuI4+u0VJsYBlK21HfC7Gib5ERS+ivtbkWh
+a/OlIVW88NMdhfeZRV/Nb8U2JjOiGxcxHYcrstIzVlbiIdMHKPeaYEveMNsGHJMs
+f89jKQ+xeWnmOPuSRXzZuC+6nypPfQzn3QKJezOMM5YmwhK1L6dtXdDyl0kh1DzF
+JjvxjHbNar+u5AIZw1UFr89V4W6d9F4iIrzOn3F5Gjt2nr4gDBKlqrCr6NKSp/Ww
+s33PC4aux6clHZMr3+VtaxBjJ6hCI486J5wIvLCOOLqi4bYBM0JUT3eJ/b9OAG/J
+iOkN9+jS5V2deQOBMz73l6BjC7hViwWFGJ9e/ZX+343KLPkvHIaDTZiYPTgJqent
+0KAYocJukY72YSPyVYTVvYHybVLnCESYFDto1dZmUSnTTfdqEkkRvz5c09ITU341
+CFE3+TXC0ifvNuJI6FYm9ffP5kx6x9xItWcJwyXyzT8BEtgCGJTlPd5OmyhwBMPs
+MtRKY7x0yFYomOwHY8WGn3XbXldta7jKub50KPgKjsrqw5vX8xM6BWB1+2RAMLs7
+URV1XGU1ZbYah8bTWokCMwQQAQgAHRYhBAE2PihXKzLRzDPm91/LsoySMzsABQJa
+jbBXAAoJEF/LsoySMzsAaqUQAJPdHhsZfcK/mELFGovms7SsJ4wUccBfwx8DqcZ/
+PKaAqH7rIhN9Jjf63FA/ZlQAF64ANPPNLumuJHMgAMZNTzYZmDF6aGkeshkoakSQ
+Gc/no+lu+YyuShlDsLI5J5J4xjnhfWnJyoTeZJHWfTRBmOSC8cItBAzk8vw1slVZ
+tJHgO1LelLcDcdCQnme3hFCv/9d7ugKVYwO3qEWBwdxq5/34556d7rugz8DfI3PZ
+QLJ3SIxxoYOl4WXdgy5oCsKnAkjDv9hN4m9jdstFtG/jMMtxRHlojaLEKt6tmcTa
+DDHLdXe7HgVcRku70YzEs5NEskAVK9dMYG0jltoywuv7X3MNALeSa4qKEcFDSq81
+M9pitXlgDQf9W2DuEYiMOSM7l3hFG0vFcj/PAhS+J6Jrn3AtH6W1W+wYPMJPiOYL
+qTP7SrrkcrxJwGbsGewVL/85w3Hy0XL4DngxYkJ5c1zLHbHcLo99Rh8kbbvr8Cfk
+fYd8WwqWrhAO591KXNgHXvQYFS8b/22CHFXWboM38itCrqxQag9FXVOISoAjDomg
+n2SYICCC6VQZwxF8VPJoBotmxftaAeA8cZTF0qFX9TnPxHRmKrDJz0nvvMCnnvB/
+loqBH4dyPe02cWln+o5UExI3UEbHsKPxiwHrPJUnFsVBoZO0WCVnbdPPEl7CmdUN
+tq4diQIcBBIBCgAGBQJaecJNAAoJEE6laPw9atFTgK4P/RBLBGJDQzcz4sLqiSO3
+TLlzp7ZUbRtYClJGn2eOzjs4raQxAOwykTXmrk+5F4pG9OkxTmufYIq4LudZcr2o
+AW3lU9vsGm9KHIR8Jj/90AcWQ7zCkxowf+w/KS1En9bMH5IVj86BWDf8cHoUBqwb
+BfHnE2Vgt28bcq6P3s04i+8NAHiNiewujTZzyyp2KesV5u58Tnpy0a8OBNPYyG2w
+2ovp1+mUFNYagxVAOF5w4R6dkEqQX5zVFiOkcQMncNROmTx3DhYH7e+8b/CzCOc5
+KaEBmlfJ2zKbj7AMUsLbQVJAkhtv8jVVGafCGnDxGJKPZJbayatpJxpbp3avWl2P
+Am7Qltf5lCbRif2uspWgal7ssT3b3tMaBujI27HFw40dmqlmTVy7iCYK1un49CCy
+txch3ps/GgY+pv70wpoGVPDZ/yNAeG97kaQXFHQhxMkkRNUFDWT2GgulR8YtEiot
+6tl3p5MGSXgTZY3fjNEVXK7Tk05UiCChMEoTDsL9yTsnlC3ZDA67mRaLgDi2J+E5
+KvGJX7VO4484ZUjRsuRw5NlzE9iXe0kGIcYBVd7yFlElnlixcGwWlrj22uoDcRD3
+n1PdPYNRLZc1Kmpal9ji5N2gz+ZTPp3yIBEXJQERFTszSrRx2PGS9b+AQOe66oIN
+VMsviNVevUYOLflryT3+IGVHiQEzBBABCAAdFiEEfuEwC9LIlLqR2krmTs/+zJ52
+kUcFAlp8fAgACgkQTs/+zJ52kUdZwQgAmFT19CnZ0VCKtXzcJRhgt1nWTa6xAUjT
+4VemPx+BQz0tojNz5rHj2IaiYz5IrADiQjyrIUvoTjnYpKnUMUuc285W6Wr8yKGQ
+pSTS6+BHKXNPMv/4nVZL4r7X/oS9UHmVHVd4XWMR+PlajgYb9oOchYrXQWuuZNyv
+z8thJMD0lgrxvSbKwy2/PKF0PQZ9RyGM0Sbvshqdix2NEnV+lnszaXY4CFnCXJXX
+e3MkAM5RFx4XKhhZc4tk5BJJAQVXCtHkbCdoDts++owRErR67zalLaE4XX7pkHJo
+/C1EOOvptxd3zAm0T6yHiCEuR+oEVtuqXzmMM/kbgTrp7dFrfhm8l4kCMwQTAQgA
+HRYhBM+bFAhHUJFsTY/KzDnkX7YBQTHkBQJaehuBAAoJEDnkX7YBQTHkJHwP/Rq5
+yuzQJ2/YRlKgI6BcdEXWGg4MuKR03xuGSGzxeMayMQUl24RRYcnf1S0gO50TklqN
+ux5hSgi/4E4Y9vKAD7NdEd2Zrft9UlJ5QLmUIKziw8C0djFQPbsrb4Sax2I7AhDX
+MVFsc40q8Yp0RXXhFEKD8W5cr8VSYOqD1F5mirQX6IpKsPDKozxF8aIcGA+317Lx
+2HUZ6mcCczQI8xBKsgO75c6JnSqFM/LNaj5sfO20DQUlpMiqgLYCIws1KhVfVcYb
+VBwdvxEWbIoDdhJcuaRnprJ4Uq022IprUlhQwxCUb5ntCC3Hfofd/Uh9Gk67LBKS
+guejRh/vpuF3s67Z/XAXjl0zoX8hpZFKC7cELTJ5XedsMfn04aa77ETAjwX/N8MS
+rkUv0u4Aby+15McLDJ8L6KEyPn72TaXP6VrTTBr6gbEI3mKZCRWTBfhYv0bXbDAo
++BvOrZUOvoJ1duP7QPqxRW05HW8DaTiXs0LooipLaWrO4q3JmcwOy0QhLj5UaJjW
+bjN6sviFQM9Q0CtCZFLNW3beT8pxoP1nxjw+DlEUpIrKGAnger9HZosSi90o9P8A
+A6H7Yr+ne2V6VH+hJg09eZuoEKHs3x65QZghxbA8S9aIm4v4Q6jBDTeCMTMJtpy4
+l/rAldWq2J2yMPgHGRF9CRxvfNIfmtm8qiFnWjcFiQIzBBABCAAdFiEELqlzHd9g
+DvUqU61IKlYjiCD18i4FAlp/GQsACgkQKlYjiCD18i7FMQ/+ILe6FIGYne8aNKa8
+uMfKSusCZvoehkG9oFG1WjsvcBCvDwYpikylGmwvFbSY18geqvVOt/2tbUdHL/tN
+divyClwsAR+rqV/pSDiueXEabCuxDk15+imaWrnAd9Z4HdhU2NM7YoyJCFpZDMZ4
+3Mt40QsgUMjmTnYrNWmlMOr6kyStIx/4jYqaa+qgBlz8xTzrJug7XDLNC9OjcWnh
+rjV2mlIKQV7WFRbtzGCCH1F/4Sk+BMxMUqQZNX910yQMZK6b9ulk5aQrDQTvVcmf
+OuGui2ZbrfSVtDEJWtSCmNJmaNHbVgjDglbzjKj3YFx/7r2Ikwwn1U48s6ADvcQL
+hGlVnDI2e335kkmvrIpVN/8L+gcQWVEP6H8kNjHZ9CGX+TnLARwlOrte1JLDzcqm
+OFv6vOp3yO9l4vXpgUr85sduYrRbmz7CU1EeIuUqn6F62ezKOtQabHpSx1PEFZ/m
+tiXx3SYBPbkFzOT3oDRH7WZP5Y6wqTKFodDPqtOcDim817sVPlEWKjdvY1jdK5i8
+SUPIaTeQa9fpNtQI13S8fgG327aGL2aOsCWB5zYY3ioDaNYTeY/IO4Nzx5typ4pw
+y2AS7PkKuUnGvgUipf5Y9s5s1zOFRnLY75R2JH05lDk2XpFt4iAJV8LgR5mvT3+n
+o92b+sX4ij4N8Wq3FkJ1q3Ly2XeIXQQQEQoAHRYhBNM7xcPAzFm2OYnXe+p785cB
+dWI+BQJahatmAAoJEOp785cBdWI+cyoAn2kz0TOGNGx1ttYk1dW8wLfZRjpQAJwO
+ks5f64OOpkeJXnVlExus6OLOt4kCMwQQAQoAHRYhBHxK/WHYqudXB5alFyIJ1pAv
+lpyVBQJahattAAoJECIJ1pAvlpyVx8EP/1nzos+J4cmIB4TABLZJu6U9mUxjUCIc
+Ez0eCXWt1gX5L+a6Jpsnazwa1KQNW/ka3Io3MKRdFEKLq2CdRH2CfRBa/7lv0Dii
+lNi40asJRxZtYT9bIcPUZJDKQYiVtbg5/nJxi2lQtSaARh80o23erdyngzFrJewi
+k1/s73XSPjgdN2e+P6x5ladsIhh+yPguCQXgN1DbYtCpd0tUZ4YX/xa3Qc7/6UnO
+mgX8v1a9+XFqwBa4pKmt/tkfa+XJpnhmvl5hZLP+hbDp9qoZTp0PYKBLN/FXtGpd
+W3o0Om5gcITdHnr45A/xDcMPOO5FunmrQb4IubO0RmZDmf7rHSsplDJlLk9x3vzP
+vjISxvjJ+YycCrkaMY8v1GR34yU7OdPcbsviPxw0YBN+NoUMrsocPjZE6H4Te9Nv
+NtaKigb0NnlxwxsWXzblxH7n2iXdhEwNIDxkapD+NmWEf+1JodZUSPKdz0JOIRNH
+EwaBB6JwQyYf2BL0hKIfiUdRVw/zJXyF8X9NY/sOf3XVtvmnoclBrI789LHl7hhM
+H19+XA8PY1wHi0aPwRezyXAprrv+ZfBr1Fom4q4h/u7W5ps4wXZ3EHXm6Xm6Kxnf
+ATDwYdqps5y77EJXviQYnDHqGiQcLRHFoPIGFUOXLvQdk9keZ/78NljN3d1wlEWS
+n7IfomaqZCL5iQEcBBABCAAGBQJaifP9AAoJEBMLwVBBQbcsDrEH/RFs1EdfeCXb
+pHJK641PzOAyvJDaZjgjuohM4TiBS0p+f6L6Xt6erfhM+Ukf1rtXPs+1POJRu3Nf
+GMXVaM1uoeR+rtGseV22Dwwpw86AiN0Rt7709Ma848dbLaHlRt5MgNE4eDTi3cMy
+KsB5+mP/TDjchFkCllYWHsCmedVAHKIZqdC9KN/meqYLFeVP39XKLhSU5+gpEboE
+ZinZsBfVqopwt7bqmLCqQBKF9r9KrnnywnSPp9JKGB72wDCfHK4OS7EVJIdBbh/D
+bHw7y+EOu2JydNUfeOhXqPw/2F33XTpIna665ytMZNXdofNfOkUp9N+8/rLmiSKf
+VmdYkG/y3MeJAhwEEAEIAAYFAlqJ9CcACgkQtA8xpAAAKbrP2g//S3hHfJ7wCygM
+2gH7XlKD7DOSkCj4g5QUd7XILILKzhSuMN8DyGGE0ELwDYk/EqxpVXljlOACqhUg
+D26n7mphgs+IwY016q1zuXk9RSA54D4GjcOXRApL/Vo6EbM2qwO0GiB7RJcg0rj7
+Klf1fgX7gN7nkujgTz0iw6hDqtwzYZmdmtT2aji+i/R3FoLjKEBUda3yZfrJXyl8
+JNLxMAjkW/nn7pdmw15n/nfGQGn2uUZV2TfpH6UQa3HzCAX5HqrFQoeTyCOigM4p
+nonnppv7s2yQ0V4UqwFvHj8By73Wdh82qycY6SozzRc16bXZsiSGj2IE/nYREujI
+NeMPhlA5Mt1LyMxFIYo8nBSHgDDitjJE2ctn/PmOkdRNT9nNWRYY5Iatmt+gjdpS
+FJWi5eJ0VhqtsOvbDgYysmHQYahdxSbRtl1SdUA87UTUOUYnekUm92f4gHW5tltC
+2WyrP3t7JH17E61TgxmvkBThWgfOmnaPPwENvMMsxvV9YkkTVUZ1jhYcr+bTPUZH
+LjKQSbQAsZYeUuUXxtDGuU1ABoQ0bA2DwAx/QKC/M7IrXj7g1iuZni7aW/cNnGLi
++dgVm4yaoRX8ihWM+PHzykF4Yny73141NW3SaQH3FYoMxAwvaHplyvFpAMD501l/
+R4rOtJ1w93xUqoCb1Amsiukclyauzb2JAjMEEwEKAB0WIQTE3WlfpxOPJCqhVjhY
+SX7lHV10pQUCWny9RQAKCRBYSX7lHV10pcWeEACcMU9k9CeH6IvQWndyWu6Imood
+xiB5B6Sf1zLSGKDMQ7myKkmmy/rIiOw2/fkounjB4yYmUMiFeNGNE3yuudaBiioB
+d+8TZ8rRXpkg7aDm0/ZCWb8plafI3gKmhR3wkMk+UllO9ildvoGUOzhTaIW9nSeF
+l5Fe33ERJSDt7jW6/nmuKI0ZIxqDCKoYO9oqM9DZ8mapjQuUV4xiJ1/C7TRvOLrN
+jame2Dh0I35EYeVIGz5qaTmLXU6CLYi1B0T3PjlgjbV1vYYXqHFRW5Ywml3Ll4t9
+VE7PTEz+F9cpBd8lGOP5MC5G/0u3v4xDipUBcXwNpike+wOz9UPMJYFfxicWz0tu
+u2Wln3q3MwU+JucOtd1AMzPBoiWp+ezbW4PLKi+aeJGYtGnmVB0Yn1zlXxwGdxWv
+SsUhAFg27SsAHHvJEhxd6u+WLS/Q2mYM8G82WNQgch7lLanuUOqdU9KzODuUvIDU
+DBAvjCYHLx1vdcL5jrO7VnpquwNlcgTNK7xQ+7jTeGikL3KhxWOOPI10awwmAqzM
+jQrdyxgo+MB64dLmeBBgYVayRn3pbHXTYmP3BQ9YnvlG9xNyiR/k2RpOfyozF1/h
+mURajhmSwtkkKAiWecRWADZsPDE5iTr+zF6BRscIWmayxoDfsbBnHnAasuwzwTl0
+AK3e0tzvPeGvzONCHYkCMwQSAQoAHRYhBILRGahAxu/Kb1r5RZ7cyZHZq0V+BQJa
+eE7FAAoJEJ7cyZHZq0V+bR4QAJI5dQAPiJZnYDA7ZBwOZO25oHmcouffXeR2jIuM
+VmjBuzsrrhuxpzXIacdwAA9VyvplZEC7mlZIzbn3WHHJjXbOZg/5xSiQDEC3xXDX
+U0c3tIZAURvnWtZ6nEvexn9LPVEYPf8+s2nlDI2blUhYGwwCsEwuSrCW8jB+Vw2J
+yrxd01WY2dLKg+8/YxC2WvmFd0cgRWm9UPl6raCSHVu7Rb8n+DaMny9hyHr3bH+U
+Ps2rBWJYtG99DJrRsVV9V9M9Ez0E4p+9fDAZO5gAgmrqYmSPHNp0eEeZZ7r8l9wG
+SVBx801UYCC5GUlXXnikkNVChd+Aspgybxk2u+QxFj8s2VDWhjjP0kMzMzF2r983
+OKS7UoMHP0NFq83+rqeLcIOTEUENyJ7jx0+dq9OXw+TA5Mph2A7kzUh/nThNsXzk
+ejMrto1xzitm1NA2mRWfdykW0EMVwwf8y2O0jN8BLVPp9VM99e8tBASkceN1aBsO
+djf4rIwCqF5/+umpqKcfkNMGkNoMKlJIyk5j+2cjOCpTelxVXxWiIp+gaYhgwAsG
+HmhKbTJCJq+JiBajF/1m+rqEXwGuc2Y5pH8NPXLiwNZXeoldSvAxXpSMWF1xX4Ys
+lEHC7O3IVsJio4nAXDy/00nTIZRmMjPp+sM2H0F38QtihGBG3q7bNYDbXPEDAvMT
+WKrbiQIzBBIBCgAdFiEEDNEXUELDi7EQ74r+4nSp/LCh0YIFAlp4TuMACgkQ4nSp
+/LCh0YKw2g/+IhayLMpMcVy0unjB8gaZT6F8Zjh9U06JjLKNX1+wj85HE8pX2QAo
+CIpIhX3WHoTlPIASCa9UYPwd8Vj6ni/1q8zjAqFjS5hK/IdEmG7OtWhTL1+lMk7/
+DEPVJInUVSHHdIsspWesdsIot/NynDSBzYdqhhV/UvlIpUkOmvBKZAmgqKpO/d7I
+zPetsPEULhNTmkQmdGMpQSvUNzkGmk7SY3G8dSKMIbgzFCIzoMasromC15afTMaw
+BeYLI98s1/iTaTSm0KLw9wSTz7YmxHZAiaHvqjCpmEIYh8zpowCEFCgmiW7divba
+lXE4hN7CZ2vqIbTWxv+y1JorN+mPs4tb53JI3h+/TXFDwsOiZrWAF95h54fqIZIR
+g6eGXTk0XabeZq8hkHMbGALwqIAzXNL2fXaC05vmazb7ksJj0q9HC0i0Fz66Ipa8
+wGHTqfhEBrMZbjBvRcL1eOPe5LryHx99Y6Ji3dYCqhnhX1wrXCOgRGxZIGMNi/ru
+zYPVM/5QtWW3XZP2qIkCvp7bnWXkODwEwG/0lpEAHW/8PT3nXi+e17Tn2a2Jo/8V
+KmHhMbUSXm8oiHn5QywrtqOwgBUgnSbOv25remjJnkFBMMHxD8A61tB0DnvSuWAg
+UNudx6eQpA4t9MmBKstt5eatMxrUwDXz/x4gfuHwLZPOYdzURZrF5LGJAjMEEgEK
+AB0WIQT/y9KfOv7UU65LnjIdQPuinrOWFgUCWox+SQAKCRAdQPuinrOWFpo6D/sE
+pBjKSYUc83wugz4CuHxpCAPZOR4WUiECWkc4SWYUdSCvwjK+euFiqQgH/+MWFDsx
+5kEt72Q1ZPvl4huwAs1L4dJCBvzDzaDBY5zSjOa9i3rzTT44QM91SUpWoUuAJSoX
+jXFHZkoXZq6rAx3AlKwQNl/E8DKSu0lCo4c3dkQprrrmptiR/5CK+vVy2v60W3Ka
+fzsI9v3TxGdQzPokjk+QFLyhwpzPSuThvDjWD9Jqjsz1UjrIBqENsWLMu8nPQJ7d
+lvqYsa7TglKTBWu5hmRhx72zectJ3FWp5e0F1DpldzCm6oJV01adKZqbUZ0ZYbV/
+kg7tGYRntIgM9VHcDkQJRNBjeq88wwh+kdJiamETeLV89ureWyZmokOsIGnMAd9e
+AdEHPiyJ3W6PvzI6AOQbdyJHN6krFXbnRpeFhkKt2dSxp7ErhOB/1bEIdR80DozQ
++WNrz+p2u3VOyowoIO1eUJdl6B3KgyCflKCmu+ZfDjK1lF2J+jIPn/D/s7pccteN
+HLRLiWjyaRRMHZYVTIMBF0XjUgffSN3GB2SQAMLZdmuDrEQttKON4LtelXtcr+hG
+6xNwlg8bizCVxjk9YUPNS+YMIATJiUW2ue4zMIMHcKIdWkjbH5ZhZdQgd1FE5uNU
+ktbR+5oaZFRIcPVNmwBc2s0t56iL4q55vwdH6EKDsIkCHAQQAQoABgUCWneYCgAK
+CRBuzvCGKqfnWIDBEACgVVLEwKvKFAxtY74LHPCbIrVHDZlNZHkHSILGsaeZJ6ZH
+LC+vJ+J7Y/PTkFxDUsB1Ew0li5XL1JwsR9acu9VwtQaykCZQnYc5kdOJjgqMZ0yS
+/HXahV9O8k86g+aCx9GUKfpuHhjrj7T4ewm4IgEC/lsfDZiiNvJWWQjExqx69A6j
+FHOoRUB4aKB3ds26Gu9+vxRlIKKwyHjMxqxnsN66XllHuKbgW3VRE8cw6plSIKVd
+pvcn5AQ3CwXHJA6q5WO/Fy07u/eizXi5530eytjgTOVe9gbUsq3c9550WahxznIo
+qAPTKW73qzM3GDZWP47Xx3OtZXdHTrSLtaRfKzZ74FDG1YGCHzVFhdjO5eDm0fLl
+eeAZ9WBa2Kd6G0UpOgvPTyjYLcRqaTPn24BYP8lmMPq4T3RpTZncONs8yHSlnLrM
+IR3OTFu4wZ85h5ct7rzS74k+08NMHXeD/PRcxw0QfzDUov+QjZg1gfnaqHoDLx7e
+8w5ljNDeXBar5HSnenFHbqCUmGikwwSU4KmPDKV9/6xVX17HsIqGdyyXi9wTRr5g
+pGlO7T0RjXgk4BGxQd0Mc1KXxMFdX0EJNhaM4OjURepNglutUoIAgp76t47ASdUp
+KsIAkP5eUnt668PsRrctdMh7tcTS+o4lzllLZMlaEwNOZUPuSr9LkkGjhpzqJ4kC
+MwQQAQgAHRYhBISxTtPWh2VajvgjOmlXFL0bvF9MBQJad1VuAAoJEGlXFL0bvF9M
+80AQALjjwRVpWOfrWgi2s3rCiZ/3mup9JbzhHkWkaSKP0ghPBAEy3s8fOhq/NWBy
+mYuFu0EmqPAtU8d34BOG0tManwQcUWOascP/5gJy0/rjNs+BF+yWoAo+Wse3FW6/
+m3aebNqWVYCfu+OjncJNwQx3rV3khUfJknPAN0znGb0Y9h47ldpb9wyBrWRkLLSg
+uuw0EwbbPPBR/AANl3lFe+QJ7RVUzXZmi04GGMC7AAYPQ/+Db7bZv6Z+Dtt4aCt7
+tKd10H4wvJUHhc3hheHQZzeUDu3mBbvdyyfJCI94wyUR73nz5h6c9JjcwY1YlwY4
+IcrDtBVmoW2p7VoPoDdQfA1h+TwFj+YHwSLxvUNV17E3p1imvlAAVDOzhMK+78GQ
+cIvPQzkL8HGPsKEuT9OIu043emg3gIYB55q7wBheUEmqfOiKu0GOkVqEtpAAu8SC
+YlFus6Qhn1NkO5STFEnOU9e62z1Wbn18+lCdrJ0qXT5jDHl3/1yUqUfGVfDzLIS9
+gQYeaX1rWDQwSiVM1qzUXz0kYwqwm9cmhkTgtoZUavQdhMw1/dtN2DvizQ8yrpcZ
+WVFXERrnTOPPwl+kWb4Gg//5bE1emYXVxu3qHARqcPxm8m1h0F3sueXEiGQysvZl
+2tNadTyX+l8tgjrBHGkypnxooLSn1ajJmr+XT+U3edDeQRleiQJ5BBIBCgBjFiEE
+ZzHdwoNXvsOONCqvvzNCE/XFygMFAlspcalFGmh0dHBzOi8vd3d3LmFsZXNzYW5k
cm9tZW50aS5pdC9kb3dubG9hZHMva2V5LXNpZ25pbmctcG9saWN5LXYxLjAudHh0
-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
+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
-RHwP/jRYZ3eUY95L/gf9hgIn4FSPUYtj42rnWOgZztg3IepX14Z9L9SdYiNw0XeL
-BAF6j5gp2J9eMmmiOMykETJxf/0wWeu5bAtrdk7/cTN4kpge2ZpmDfncLZELpL37
-yvHCCi/g9lja6vhwFpJ5GeoLDEiB1l/Dwc/YfHNAiPSGP6Q064phdx1R9PJGxjEw
-oLyaSFOeCCOI2Tauf5uSPVQ9yRDMA6k65lZ/EZH53aDJJTjVa0is3/iVerJbqDM5
-D2VITnpM08YTmX2nxtrDF/I200GI8lWwufmqTRiL6VgdISFm1ocqdRE1TFKfdlK8
-o1a8TWoA5oc+bOheu/NuMYpv5GPUGe5yD8jZO8uJojohAVa+nC/B1Pb1y3NDN7Sb
-HEQlRAU3HZTLmJYFywAbVBJeQwsgvP5g7L8WLO3YRaFlkXbflvUlw8mpF4XBuS/j
-3xbT/yWGP+T9zCkKH91lLHk9lzX/9ncjPqsfx2HTNPIv6oZqDM1PEJqbN9FP5dO1
-Dk8XtRr2s3S3tSyPkD39Mw4InSTbKSTFa3u+Ub59O0GhanRxmEhPg8KDgQXVEEd8
-YKt0J2n4WbKdzV3lynCg72Mn+ae6rut1hFKVk8TvUCIncXhANFeaR3zjVCCuvCZI
-6TZRyGLAdNyttdgloIjzRZSw5Wh0HCnigSxdQHoymX1k/o78iQIzBBABCAAdFiEE
-1XksTIxvjeg3eUnR9IOAsuyPlEkFAlp4NVAACgkQ9IOAsuyPlElAuA//XFXPv7Xy
-SWr8bR5e7pPf7NttkT+i9oEt7pTEh6q10cTdX/L3tHR9km463fOCb2Chvb+JrQrR
-Vv5vXeUugG3S1Y16D1/PTqQsbcr1Gf7MHQ2iQRwHbdhjP3sRBejMAdmYeL1v+yaD
-DVM9E6iAeQG1oXP8eMFMhTRZq0n7M9DvJIEYwehap3M8uZ0WwbJwiY1tD+JLtiyW
-URowr0hXjw6Jhw6nc7LvV4IE4flEYfq7XiP2+bGVnAcFMDRdzF9cyIygtfjMHGSS
-A4WENw49wfhyfcEr3v/U3VcCgfwE4ajBH5uk7ZGKZHnLr0Ng0VPk9pdKEGLkqJXy
-WNBYd5Rg83f6S2MfhuGnww3zqYtHc9YP2SlCvJegCdGjEKySOf8e0vmJONghPvj7
-880EWCb3zknB2zCE9sM3QgNkF8v1JDN74RG6W/6EH+1qpc1LPPR6tapJryegdWl+
-lgAaidCjmFcQcCZZPinWfeCEkow0LrPFixYsOdB20T9qPe1julztmGFoMT2uD7A6
-ksqcQ4u0jBAfLMxARhNvm5Bi9rVhQw4f1uyyCbydujVTsQ/BhnK80bSAd6zSg0M4
-9IaMGvx4cdCozA6BLQPdhnhofyNNLcsFPJqZsLlNRhPWviGv8Wk56hqsRgEAeJog
-kgcd8zh1lMJVSzsKn1Ah2b765lbia/y1iiuJAjMEEAEKAB0WIQSii/QMPlUTcmYt
-FPdBqufcyj2DUQUCWn9fkgAKCRBBqufcyj2DUY2pD/48qKQ7ktPXIYbFpi0O8M/W
-JnnLAMAAR3Dw3vc72hXTSgKK5OFo5CP25QQC3LekUo6nbqbxqk/2SDyoAfsnkdYz
-CqhuAfNWH35MhH+jnLPawMstX1/iE88oUU4nEKvvM+7nWTykKYjMtmqU5ZSK9Xas
-pG1tH/zZvUsaCNNO0SkkP5WUMrEeGMp1s462ycUpTO42Dhsb6Yo1N/6SiL7y1dlU
-ME73Dw/63+jaHSeowP5d+TY2aWzXgx7UdN2S13aHUSHu1D2eXYtiF+USj7HwaDWC
-I/A9bv3beJGSDam1SP0jWLV8b3ZfkaWQU41IbzDPi8suF9y3w6WSTeES/j1SK/sw
-Zzcj/01bZdRa0ANQkNQSrcIQd97UwqRHpYqeQ440uJE+/OamJ7gCnTKDvcsHwkyY
-rZphMDPNGdiDfRylEOOmUrxWI0QsXOX85q9QY0JEb8q+cDrjkja99wjBN2075BiK
-SVT78AOCDNJ8K1YiJrICHZZx9QMaUxBQirbhcWOFdnqR1A4Uwh50hoJG9/10xUPg
-FrI/ahjXNl+s/XJdXgS8AcNZX5hPzGxgHpR/+DC/DKcwi3SJuGBNlitOFlSErKjb
-8fpfZz6UmVBIE7WxjFz2xDtUSW1SeykRPAXo7Fq4d0Z7bYwIpmxtVYGqMPgLjot0
-eun83+Amxc1OIgHGVoHcIIkCMwQSAQoAHRYhBAjNlyqUddz4El3PvriI+7FRIaiV
-BQJaiYX2AAoJELiI+7FRIaiVzZIQAJmjmDu9B7zKCcBE33Rg7eSaWwh+SXSInZHW
-TXhEy78/ypsvtzMj4jAPadvFHY7y5akUBN86b3HE1WIiuOJumV2zML1dBtte9U3w
-kqawpOTRkZoKpN/7apZyCtZ6AnkhdbwvsTS16wdCMaBdC5V30c9Nybbu1wiCTZOj
-4XDBrNBf2lrdK27w/+NRJUcAfYyeXQh9hC7LM5IJi190DhdSGPKnZRUTkXrYC9WH
-eDC0m7YgGtYB6AMXfvVwMsNIvqhmPkd3MPfkT9dROOJZVqrMqso0aZ/0tEQoS4q6
-wReFhSXWxflQC77H+VSTziwrak0VwUw9jqf//fI4DksCXKjAx+OsFkyVQk9TQFwt
-g0sq68nbCqymJ9dqZ6m3d9AIVMHi5deTzTI5CCvX+2trerjS67xPbyzQuOmtCWBf
-wat0aotjh/7Y1pO27X8KNQ4kHVvEfwnhYSCMuI+8lA8MeWjtmSOBB3PIeCr1JSiB
-GtnHN1YcyKjH42B0VNAlcqQwWbGosmq1YRliAQFi6AG0PHZ1pp5fkNwulr1/LG8V
-v5N6O1mXa/BzquBia5yTpyaHm2ruczXd7wnhhz66iCG7Mkgbu+fS/5NWvYOAeXWg
-rXirzXB1m6dJGhhJzDckVblj0OH3YpBhYMiDruEMhQ45e8capNb6JhfO2AXMwf2u
-5u8HC/8giQEcBBABCAAGBQJa4uQGAAoJEM8mXR8VZjHT8gcIAKNsJZlD0o6PSE41
-yjbGYNiC2kE8RUY2G4qIBy2MnBm0ccawP9QEguIP4k5PlxEbKRgkAG/IsLFzrhe1
-LSYpWHveHOskEx7/WBaAHWbESruIQLFWBhTvHA0OTt4WNVtokhXMrjY8tUdjfXPm
-58htijGpX1Pad3Y/j/O7N3o7aiOGis8VKogS0Gsf41k3nH25d7XIh/wMzni/1Q3Z
-ZajUuzv/i5gCFJSD+MowktlS+MfFGxdeMRupUrqJ5D0K8BjZxCuNUTYVqrJVxqo/
-M1k3KNPYfcsauuNX81Snm64ZRtqKvizltDobmRwiZ8gobuAxbk/020QO7Bjk/yOB
-3uvpF5aJAjMEEAEIAB0WIQS9C/WxdDXegeNdXq+lMHCKEmHhzAUCWn3C9wAKCRCl
-MHCKEmHhzFNkD/9fxBugcsk8Cfea6lGl7XG67RNXfXpA4jgsUpmJvb5HTs8dqyTW
-gS/5db6crvxaYDqWaL+9j4H88grZddI8fdmn92wc3kFulPvq4rVjCrEFyifhmIhT
-t2MeDpgZR18UUqjg0RaGodTJXdR8k8g16CFglzd6AlgKCCo6y/kV4G629xdWJBU8
-ZiK4feAZe6neRXCuS95PR+VBIwNFSTLaPeYUDkH9BJ8giaowCTKiWJ36pU0L/hwg
-jXQ0S9Yau8NJQCeixBC6nxFUQKRf3DaXc7sNcgGU1WVbqbIYiycg0mXACTEt7GyN
-BC1YSWr3WYbUXIY96zuBl0AP/Mh9Fomfbix1fiOqbTxSD4w/9CpD5V1JbJ/lsWdW
-pMKqw2ArOdOrJl2raH9lfhxNw0o0Z7WirabrtUuqH0oyyj2TBHcbTT6zYgE/UdtT
-zzV3gHWRxpMdRggZxzVSTKgo4zIjQPsZozxvtefC+QXwtoABsvIaFmELO/ZZcG5C
-+lp1geWnKIBT+2Z8oC/+eFukGUgZaf/yqps7QKzr8GPQILwRDodfi8S+d3n5fLwF
-M+BFmawg/Zsm3VK35exyBzVJBCSbP6OmyJSv1oX0ucJudk+LTkUy8WKBJkQKpo9A
-grlBefVtr71n6oRXuvRD4UG9s+Ea13RNUD2n3iPaYiNpprtWWQ3UKpDrM4kBMwQQ
-AQgAHRYhBD7z/RwAmaqBVjR3pTh3rQXRWCzbBQJaejWmAAoJEDh3rQXRWCzb6MsH
-/3ou3of9vHTqF1ftrFniyzCZQYC2A9g5f089uaahTMGUobw14EzMkq0qOwTIXABI
-zNVoIg6BuNnpsb1+aGmXNPkd1gkXkbhuFGLv4l9bFzN19b1eG63l4yfHGaqHb+yB
-akkL0xga5e4hAcA2nMVFyJtYPN5jDL9WXM1wJkNpG2MnIcTh3Kc/8ZHKdwAlYEfY
-WwEbEtqda3eAXByh9F3P/zi76FhUvQ89ltxZPrZdqtoBWc5oH2JH/ElcZ1Ntwoci
-DP8ZIEBlgecgt2sbQ2HGrgN5z/ycHa1p9BdnO8D9DbNjSrTi6VwzK2x+7osL4R3D
-wcB87tC1m9PxVWvNh9slGNuJATMEEAEIAB0WIQR+4TAL0siUupHaSuZOz/7MnnaR
-RwUCWnx8CAAKCRBOz/7MnnaRRwS/CAC0CvG/0r5Rry29P5NVSk4ZBli/JdBlhG9l
-JL9I2wxJ0pPRCEChjtXOT3pB+Y3wV9ij4CbvErsivigFQ8dBu45dB6S8ZjEzApVy
-xIPy/FvP1mjLB39R6lVnWSkkTpFaDRygY+0gl055vdRN3qh9Fa1jylocP6Plz+rd
-fleR1VNgXFCQuYee/d9QI3Q71qyM2yBj9AYO/o+aKdDachOxOgcsbY/26spVmpSl
-tqNsWB3ZR2MtL4AcALgnYlFRQfxQx0FsSy4J28CG63Wbk0HeLoQF5cGTJK/UZnng
-WvRxCeBQrKsm3utT/0XSEtVbA6q9IPYiy1Nci2KVJBUmIgEfk0DNiQIzBBIBCgAd
-FiEE/8vSnzr+1FOuS54yHUD7op6zlhYFAlqMflAACgkQHUD7op6zlhZUdw//W+AH
-Gt8+nrYw89MHVan8fE0Dat4xsRBLRH/LqLY/AZ6EClOg3eumGS7o5ZOOpwKLkaH9
-zuOHS7KCaIQq86BoKFP5JEbB4PCbp5iM3IBlkX+BOiXEnBIegycXO9mkclf0F/HA
-YU0qKA6/gZPXnlb2aCLl8RZEKuoqwPgmASDK2AlyK3ZojxBzXqzcT5/XwN6UVXfa
-PeZtK/1734JyMrFrQcaqpAe/845PgOfeBN5mRj4ZtDDAllWLKC5DmWppE5fjF1B9
-PQ+ZrPnRpcsprrpowNeS2jfoBr8nd48vGJaWDPTwFM1Csa4XgOhQA8efhb2UzEXC
-kZhnnulEzBj5kUHGq0vY6a3Ac80Ss8lFmuDSJvx8QbVo54wYaD3sOMB7UsThkCRB
-+tXpt4zLWNokvYCSd5uzn40avTow3Q0aNSmqYuTUqg3GbrGrlJudf9pLCp/2xV52
-bwIwgyW9wD2Ybgdk6rbllSBWhpy2qb2Ei5eP5BxNZUklIJomqlOvT1ihcOuFR5GM
-0Mf9VOhBH4cEji1/UIaWRIVPYFKMLGTAaOC5UlphdMN6zSgJW7DY1REDcknk5E7U
-tYFwroCYP12D5oiF9eaJcJOqm+OvFK7TrTOPlP8Hk2L/RWtLeSzWYw/LkSZsR+3g
-CfN3UvRU+zDDHAkd7vW8VUqdnjKUlbOY47+nL3yIlAQTFgoAPBYhBGw0WO5zfOIs
-Dvn6O+iP674gLOWZBQJaeYeJHhpodHRwOi8vd3d3LmdvdGhnb29zZS5uZXQvcGdw
-LwAKCRDoj+u+ICzlmfrNAQCCxF/BQhPEMAEkJAcz2nTHkZwuUcCfDXd1yWIKrR3C
-HwD9FZVokYJMkWoGYKWmt2PxODILjTilJyddIEi0qT+R9w2IfAQTEQoAPBYhBAE4
-2pLt/7J90nD4bbR14ge6tYIpBQJaeYeiHhpodHRwOi8vd3d3LmdvdGhnb29zZS5u
-ZXQvcGdwLwAKCRC0deIHurWCKa6WAKCHqaY2hg+ufOK23Ip/6eaOZMwKigCgu1KK
-KBw/Dkd993LlY8St/wA/cJWIfAQTEQoAPBYhBFP8Wocnvh0w/rSGGpSP1qDhD1Au
-BQJaeYe7HhpodHRwOi8vd3d3LmdvdGhnb29zZS5uZXQvcGdwLwAKCRCUj9ag4Q9Q
-Lu5/AJ4q0v2TlL9MB/3HQGy808LURrhWtQCeLGervrNZPRfoaf6qGwIyFhIZXsGJ
-AlIEEwEKADwWIQRp4e4H96aqjkp3eyp6BoVCHomQQgUCWnmH1x4aaHR0cDovL3d3
-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
-DT2DYYCu12CDsTQqvBTSsNyoHHY+/38EPqEbDrkLqoUFEyoSRwOXgF2HbDnglxNC
-J8WoR37eouXVSpTzw+knOFd33p8LGcyxlVTCAm3+wIBo1xyPolMWGQov+jL0S4kC
-HAQTAQoABgUCWnx1HAAKCRCpyGyN066NOg1mD/4ukygIngI2IDEow7FweimECWVD
-oeMfIuXqeaVAad2rmT+ZRG6HXzMlQtY/6EZDkbBLEMjdv2de+2mNqjuJug1hpoY/
-ZH24pmgHn5Uqc7fQkwbA8e07eE63gUtu174VttK9WVpU6pJpDaVUAMzVkTYG7yO/
-wD7ZQKfy84Lb7BCW8/kJDhWhPEeweggSm0q2dwuyzWgx6O6IPlsOfFYwR4fQ9l/m
-4JvhllikXtwwqEO4mJ1Rkc4z7mMVhWJxIRDfZfDMOtW4oI3QINgDXq0WGs8/rLPR
-NftJQpbfuO4wb89V2GmEcy8D5X0KR7vENKfzN46ynmuCGYAYioFKYo8a5iH069gc
-dQ3J0sFcEDU83ZyiESE3DwCFkChjYlDRDh+ghYh2w0tyW919d22K60e+pj9JrwZ6
-/iOnYbDpQlao1vC61yZqyBPtCqZ5YIksPAN4ELjk0BizDrNXJLxeqxlZUtuuW+/x
-UpcZ+/3cL3NklGEcfsPOVLHeW2Ut2cSKLJ606SRGjz1z3eV8AuyyfYCVln/aQVFf
-UjWSNy7HMduMsiIw4lOIveOkIO0QCeyRncp+RHVVlAHNt1cfzzTnTJAS6xAaC8C7
-XdEkmFwtSrnAQTL6zV6CyLUjmfirRl+XnrPUPEg82W9GaPV/t4KCklNX6Dve4Skp
-BIoDAj7PB8jet8pmw4kCXQQSAQoARxYhBAvgUbISpRRkAQIDVI85yO+8l5IGBQJa
-t95oKRpodHRwczovL3d3dy5tYXJjaHVrb3YuY29tL3BncC9wb2xpY3kudHh0AAoJ
-EI85yO+8l5IGiN0P/2/pXMakQT2swm8vUN/hkosD3HH2xj5q5G966/y4aV0Ran57
-Rj3q3r70+/nLZhXfTdUhuhXOoePPIvuXQMgKFbpq1QhLdy7uyg25R1VtgOKrPGgz
-2MLVxKZN1YaL8VT87XTbDnmmb9HZiC0PK+rDM0GkYLE2xP/kifbIkQrn+3z30oIO
-r3ooOX+A7vOKL3R1Q0Bs5/M5yFL4hXQg+M/n3C70B+PHfaiH2S+CRlaW+S/tPwS8
-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
-yY1MySynvQ8/uqmfGcpV6/Vu4c3NbNuhTR3Zhfd6S4NKt+9/ZiXr3QqqleqneXML
-oniTJdGyhB3ch+Y0KyM1n5GngA7acTcqqUvnTgit2NHIpbCcRmMhuIgWZKD0PHr8
-0R2TJ2fFZFoDOHJR+DRHzxeK12LbkwQ59+zoZaG3aG6CkbHyVi08ZnWFirwEDmHo
-gKQ1DOe9YmTRxxJ4II2egN5s094zcrmUn4IPnaKic0264t0vLTimBeWuTyBYhoG4
-KsE7gjgN3Q9dW/79Nvu27dJz02OeNY1GwajzBmB5IhetUw7YdRGzGL44ujFa23h1
-CNWZQA9W8fxYVc3YxHv8R6xgeQzjhASKzpjnBnPrzduoKJ922ze4H6wynSx5jHST
-jBc1VJFRK7zXY5sELMReeZiHyxVnNL4jU8363C8eUCllwetDNXxmXqCZRcivaoXe
-p+SP9BHtoYG1l63HAG8k+EaRjaqhF/dR5HR5SUcpwL1tQzmeVQBYwbPOFA6cYnIx
-UHjgYmsiKrP2xcS9FSB+DykqovvBlvkHyF5esGl+1z+siDBrsUI6A3wW574mPgii
-ToGyBTF/GJqv7RMtl+w3aNzVFjNw/NBnURP9O30N0DEjSmu31yJio6bwSh2uYsJP
-l0jYQ7KJBGMEEwEKAE0WIQRNFzq/NagXQbewO+sZQZv6lvTQ6AUCWn8J9C8aaHR0
-cHM6Ly9zZWxlbmUtZmVpZ2wuZGUvb3BlbnBncF9rc3BfdjEudHh0LmFzYwAKCRAZ
-QZv6lvTQ6GuxH/4t++MaInrkyb+LHL2OR6QhV+RZ3q9i7gACZKB6NHjYaRa/U9uR
-AnmnkWbmE7x+ouTwvtZaubVtA7dftAj3y+1F3biU7HfR2EvqoPK4wYXQahlBL5Yq
-AEOMf1+zCUSNXXzCRFQ/cg1YkGmpHjKUUpeAIR2dQOGmvCCP3wkavUbIv1Yu3G4F
-VaF7S66Y/Dy4DrZemwZIcNGM/O/UX57iMeSt6ynMQDE7DBz6iyFH0FZL0NU87lcY
-uxd5s6AR6RDnSbgjSEkNtIrdhKDsCfoRfc1gRac5KVp5uCtFAf8re0V7raL3angs
-RipHEAym+nkd1WZe/p0b8Shzt73yGlv02PufgSa+enYjxWtkqfNO1r+mGMJ9v//+
-vTXaLh82OxD4tJUCERE+orS12gr1/O+7WhTQk4a3DcCnyr1eBvGY96D7I5uyn8N8
-7jT7o/RFogQBFssQ1mXnoWJeFtASWgom1YIQtj9mHSrTawEjUj1MgVZlzUvD0umK
-PW5uaBaLuXKbjtu3jx/o3c76bPkgW989Xbl2UUYV0rDfR9PUM5loT2HG4icGhazg
-LoPh2TgYZWvPDjnwCpR1HcXju5jTzrjZLA49b702548t8IaixBPUqbxcpm2OtxID
-lnAEVn4a2REZ6eHa+ZsvoW/TdS+KxkxlnBDQgT+JrirFHL2xhsmkyOtOj0YW0WSO
-W5YLqThmxF1rTYVv6+zl/nPcnE/txYWMMJWl9wKzEWaOKBhRoVIrjvao7Y9ULoRd
-k+6yE00D/CNW+cRkVGJ9fcDjgPMUj++6JrvL3P1nHf5DaL8JUItEWyQ2hFVtWYYn
-H01TcZtVCFMw8mfLVlc3ociFcDiYT4HMj3I1ul+HXrqiSy8RK1OOYs4Vwe8a8I7O
-w7ozRA7dQAT5jzRjIvUKrXAS8ARA9zx7mHnshgykqfIJpVOgoz6SertH5DTd3Hw2
-jGRBEJ9s2lDh81Dw+sHfnB34yYV+OfaoGOut1TnXymh1xqiyppg9Tv37lBRWEBz0
-AiDuURlTOvI/QiFh3naloCloQPr0wcuMcaQV2TDGrD78oze1nw3BMPUe2gCzkK4T
-XK8Z6yrgVutF2KNd9gEt+yCBKb8hryhNdLknbg8JodQQTn4z4Q3Tp/JfjLjl5UhR
-I/nnvy+ToWf+NiITikacDMm7jTKOAzaaalHpc26B5ZPMCfkWFEkgONwS+eLV/4Wu
-eI69AqzScOzmfyQ/E58b9e5dW/YaZQUr7qokZTJgzIcVvmO+sBfeyvzN3Q8ZpFn3
-JaJPWrf7PXG+2Q0mSvBRZpFn2LA7sg9KlDMuwuV8XZPZ99iatUxqF7FMLBqk3nte
-8EMtfFOYG8H64c+/+CXzS+oRk+bcN9vLWiURiQJdBBIBCgBHFiEEC+BRshKlFGQB
-AgNUjznI77yXkgYFAlq33kspGmh0dHBzOi8vd3d3Lm1hcmNodWtvdi5jb20vcGdw
-L3BvbGljeS50eHQACgkQjznI77yXkgZuQA//TUlfBexEhqo0V+eBj+T1UVss7fIQ
-ju83FdVNyZ4QTyFITmlUl550YeV3+ztFufuH/UN2WyfQI2XktK2n5+YShZVb84PD
-V6FUhqtELf3u8x3s3zn1HOUTj1naaEz/PfNuicZOoa13vkDTzxCcSw507sbPiTOc
-dJ3WJK8IuHbLJvN37nTEspW+0b60/ObEbqdMWnlKCzHNDeHagcXSuFQJuch8GwJi
-lGrY+7MVeA7KilS2yKBZjWHp5rVTZ/KPX/3G9uJJR7g1wtRv485+XPL/VLulsThZ
-OB3SLGyDPxUfLXs67Nb5SIokxbD+iza22F/lNTMiDHutoiwnq8fbjwVWe1r6HN/8
-QEOkNv1tJM5oFE3wZXgX1xsXskqvqphW5LlG3rxmAcWS2fzrkA8e7el8YbTahYqU
-vU0U10lKbOhvyUc8UGt2UhG/2YUuo6bdhYgYqJfBXPB7POtAbJyyKzpAuDjVXAEF
-8GBvZoqO+5eN3OmGKfnDQaLbD3SSSNpofL8ysgvX+cPsbFdCdN/DBD43MJkosJSH
-pj7Diwj56Ko0Cp2g+6NTGETZ1nyvUUByJ5uPOXGTCwMkoRs3/AkM7tz9Yx/ev1a/
-8bzdjDyhnrRhUSZ0L287qKfS+CpW77LOF9ZW5zUPXRQHrRsHRnDvKnyfMxRAoqvm
-u3LCV/GFFzNufaSJARwEEAEIAAYFAlri5AUACgkQzyZdHxVmMdNC6wf/TKu8wXSn
-H1d6Ac7VB4YAlg9H1me9RY9ylx75KUevNg/JNbi0w7yihbzVNvvq3VTsRJgr2oA/
-LPhTxR7JtvMb6HeIETYtyN7ZDn41bA3pFDilA6kE/XnoaPhBrCkD/6dEjhbI4pfg
-KT4U8aCRI20+v7sr+cjoBogtWJg6C6L685sP6/F4vhpHpa88M6kxD8WCRwHHLmlB
-Jk/bRcZNIcElIFPa0vPKltMhyH67fgentgSZgOOS9SBGX4M+f4a0r7DKtGUIci6D
-3hxH2c2jPl2RpZEKsLRff9MyvVlqsJDhiLMduKUqpbOzHzBEzKH+wGjfP3BtqmWg
-uedRtHN1j2lzdIkCMwQQAQgAHRYhBL0L9bF0Nd6B411er6UwcIoSYeHMBQJafcL1
-AAoJEKUwcIoSYeHMDmIQAJ6Yd+4dPbmDVeKnQ7ovdXpyFu8O7NSwm/OQn3dxcTS6
-LkqBIkJfkRA5M3UJ8OUOq8mV/qmQm+ANqLbnzWtBi5oGsPyewjytXOhGZblZLyjb
-8xhjvkaBf60a7gnJFKR6C9VbhVhqi/uxy6udH7iu/KfNcPsqUgSg6Qb1YknIeYiB
-dJokuRTOdKYiEzVMlho+KirtXKlsf//Id9ev2NYkLfnmD8AuN/Juk2LdGyBHkICe
-OaDzoccAwLG+zt1iLtZ8lFIn1QCCdn8FPk6l/RzpySpGCOitEk6pIgJ43gOstKcq
-eTK8nUp8txBAy/HrBnP7vWG6wocbAltQAPGwXDPCadUPob6VwJ4J7aSVVN+IaUOu
-DSGnz1qYguOKYKDGgG7hdvkmg0w7uHafg/keyiCLRVeW+L5II/pIY/8aICWsnmuf
-o6MRMWJPPEZaDhgUeaIcOvqYCvQ/SeVKsCxiwQLYV+Lx3oqSI/jEr2DeyWi/Qu8d
-EwIj0wXy2xiWN59XGdPJLsuDJksSO/p1zCSBq5kWBXE8a8MhI9SJRU0HnCB1vuap
-wFOiXstqicM+Qw3OZEqrKlo4oujSSCj5p7v133zhzd5GAadzox0XDuDTrd/lpSda
-qQ1EvvMQkYkdBYIruUlSGSgRay2bEVmLKHZABxdYKAJznUGDc19xhEzJJfWlmTCV
-iQIzBBABCgAdFiEEwzG6P3X7cjtYc3hbBuqgZuOXgy8FAlrnilUACgkQBuqgZuOX
-gy94ZhAAlua4SvxoLimziDlWi311CDbOOulVTrTihvJcfS/z9e2i82Nm9hjpCMYC
-nd/tmeN6+BqyqHUk9wkdAHEA9b1IDq+KKSW5wJHGwcYhAe0UURJqyVXKZPfO+btl
-IVDm+5ar5XcNz8gl3bXJeaLiUcSeX/KLBwI8UPT+2/vo+w3VN/Ob+Pz7Yf+2FsK+
-hsh66a4vydBdEMQLi6rdi1O3oV35L7/GG3I4Eh5johOIp6+FqU15iDt9SftbAH5U
-UuInrSd8k3YTUCg8ZJ+jlJBTPycxJ5iEjUApuTojVBRgw769TyUVg0r6CXTG6JT6
-4rlL5idtN0ES6vRpBj1MDZj/u+5gqzY5rq5QZa/NSQXtPPgSP4mdkC2lbGCy1+T4
-/CPYZkUve7M4cnWZrg1XkDWzHxsOgrjSZiNXqAldnrbEfSeMzF8I+xTSRbp1htQv
-6eeUZ/NxQF8UJpDgr1CfTGX94JJqds/w2WJ8DJIL+G3sbzjtWfDrlArbba+vNPAW
-oXW/1pzAvFGl8Kpdm1yEtxjAXPLVnkqjHCtdPsyny07UCFhUV2VxQzLipuHcVLUC
-nIcfJIANO5oP/VUX1Ms62y+cyZXQ+fqlLG6RkIcelItT5LpJMCIGv5yUOADR+XdS
-yem+7xOTvnFfIh5zVpTJpZSmCBCGI97GWiqOvoUPWhsnRfaZ0PmJAnkEEgEKAGMW
-IQRnMd3Cg1e+w440Kq+/M0IT9cXKAwUCWylxpkUaaHR0cHM6Ly93d3cuYWxlc3Nh
-bmRyb21lbnRpLml0L2Rvd25sb2Fkcy9rZXktc2lnbmluZy1wb2xpY3ktdjEuMC50
-eHQACgkQvzNCE/XFygNL5RAAmrxvHq0nhgOF0j7v2iuR5aiEj6JuYfTrq+tUjlHP
-RSqi3TV0cHaqnFTziJwpUhjs8fDdScNDkrt5kx8uHT9sEoxqNTj/7FoIZD5LOk/C
-uPIpj1QZrw2rfH4I45sY3g00XcQ+ApN2qLHEC1IVkEWnmqCSd3FZmBO8hN7iMPMd
-L91QzUluvuUlPh4K7KDGBkMW7mZbbNsHr+1oKK1g5XFhTbtlvJS2q09uDpN6tdXr
-g2tyO/hfd97dwarvMgQMEbtvm1+7pmd1Hev7fUz7REbxFMYQAsGYcfkX+GPgyWFV
-zewNgNrXEGeYQjDMvfLbiucjClyGeRjoSKBNI0y9oyEdNDWcYoj6yLvRiVQ7skpe
-TUg5B3EqTaCeBneyx457Cx3wmfmoJ00n5Y6tY/yV25KtPXs4CDbbX7NJczOUuIH1
-uBzjDC85J16qYYjDI6/Y1ReTd/0hSa3IqjF1fvtYzf9vy/qeT9/qWtQRG0KirYOY
-3nC9EXgSZbpFWh7FQwffeOrTq02ly08XgWgMLMHvlMs1Q3diRDsoBrLsSLy3QCm8
-1MmoqdsRSNcPRW2XcJx6yThwNmUkiNmLs3YTr2U0xhTPUL0EPVwOFrS0Rq9TIEMu
-4SSvJP0NOi+MVzSqSCEDjDqBR7NQZFQZYVIwpqIx8YIQdXAuBz4e4oYlFYM0Oa+/
-pSmJAlcEEwEKAEECGwMCHgECF4AFCwkIBwMFFQoJCAsFFgIDAQACGQEWIQT2gs3M
-OdwP6uEWILbHRs+p50+ksAUCW4lqDwUJE4cqpQAKCRDHRs+p50+ksKYWEACAF5FL
-DbgPmiE82ETZjarbJ3z3z6VAzR2zV6lTmDlWtCMItOt0IlgAlSltkkfl81rfAkcl
-guFi/tTukTV/D93P0iPVCj1BZBXyV0Ym2aHhJJQOmpIA2eYDL7o49s/26kSrbVDv
-ri5hwhIvnDXUuGvhS8Ku8nd+hxj4dH+j2FCCEGz/2PDU4c44xfwYyE5bhuyqW36w
-XDcTJa4RUWIioixj/fhy3k5uRdCNEBWORt5q2gv6ngngyaujjZ0uXslI3s5k9tV4
-Ebl++WPzqggyivvVcedBK/Mf5NoBIXFi1IUtPbMPNBwyKbGzQPmOiIKmY4TOoucj
-FSFrVsIhMCHFrF0uom/nAXWj7Rd+sCQQyZ5sg+jzp83LJO/aelSJ3B857B6go85/
-6VkJSkaTKFxqcEvRLMoezSho/dFjlk+Gak+rWNHpsOsQbDhv5RzMPTj6A6FjOg81
-dRtBnYZlGM7XbxtH1TihRaTDpvfLvlf8fR+JFDLdI7HOCsO9GDkZZJwLwngsSuN9
-c5qqAPMl/nsPJTOFsxaAIw3pK5/9UUb2mJ9/DyrzLcP+SMA6IifTlFjntTszJrV9
-y8J9ufMNF7OQLWC4tx80GLfSq9Qiy/i1Z5CXLgyp/fv/CYOwOltjoDd//qUlY9M9
-eJ1HCYA7iiAw0JBc/BzMRDvwCHmTLRt6qSzzoIkCVwQTAQoAQQIbAwIeAQIXgAUL
-CQgHAwUVCgkICwUWAgMBAAIZARYhBPaCzcw53A/q4RYgtsdGz6nnT6SwBQJg7o7B
-BQkXFafXAAoJEMdGz6nnT6Sw5KIP/0PXRrDgI02LmwQiN+qSZwSI3KfureRT/TIf
-/wZ+CrXIt5VWA6mKX+sCaLlbkRJPiS24T/Lba2yHUURAQgGq3ivqgQbP8S+8yMSa
-g2CBefqu4y0CCXreGAGFDcFKqHUGBE1aI9yDC9gk2PV9IVK+x9V4Y2hic10Bozf8
-1Ygl9TmaqQz78NqV39mmkS9M7PHAuj4pHisrr2+yvyd+oBrCeeY9xezCpiXm31i1
-ovWiHA8GAVJgF/n+5YNwZEaZf3MbC6S44kT58TKfsPddr8TFDmaDiGMWm6i03iL3
-FJFEOOwb44ek0R3zBrOOSIR/PsxKiEU2tJWm/Yb28yGzvHT2tIUI3F5JsFzBP1dL
-3Bk5k7gX77IhK1amPsCs/lPZRMmaZbPNcgtmxaJj87AcTPCKU3Y2vC0P+bfWe5F3
-fwf8urB7d3yHjE7uUhuEU5Qaqb2SjlIFHFehQFMQjrxUu+EbQwXem9C0IthD9Om8
-EEhP60XkWq6tpsjjqvvcmu6ZRW2C2XtIgZlxVC5qN2VD438KCkqxVHr/oUboTUa0
-0+v5zRzrJk1QPTrd5oboCC4Zm1PXup1F6/yVCfM40j4GmsrfagcBg6c+q8KxAy+1
-umQm0bBpeHvJTyiz3s7nUW9wZ8KAc//6mxEJacezjSm0qLXKvIcawstPqBC/E87t
-cbsO0krliQIzBBABCAAdFiEEznhJt1WVHYvofeLlNxgLjw7D/jIFAmC2mHAACgkQ
-NxgLjw7D/jKJAg/9EAG1KR+V3ZOF//GCb633wf0Tucyo5ocjqTsRXxzb4HTqy169
-E9iXLP2FW6lHqcNSWeAXVxpiXk6lhh7b5mK3QIXwzlLbc+YbrJ16TjgfYniG1Rzn
-xR50n7e3JycOQI2cyeJlfXtECBKqh1Sc1ydF2OGKCtYYSkZrpdBR60g8eIThWjY5
-b2GzJq5JXv45WUxFTg0KlMU45/3oMv3LS5QXtgi4loUDrQRuwaks/OxqtJA3YYoD
-kjQPwZlfHD8YQKbkbleYnbH11rnWs836+E5WcFEfW6vs/04HHuErJrmwtvYSrITu
-pIuTnKRMmSof+LitfS+qqYA11g4PmD1cUrwm44BgPiRu6rc+JouzdsmvMzREWVcx
-z1icCXn0qJAv6cfFGfxLa5Gws8mApQreXlmKRFhV1Ti6IbWs93vnszVfyU83lNKU
-ejprVGVLq1PkVbGWeEYOEPHkY5BbZTVxGr2sKs7S03qwFRdsEWQxOkZwvzywWdPp
-M2jl/KAgP6qhlD8flf/9m/RWI4mKiHHoZbG3gBGx0kXcDcg3XacZw4jQcdCesd2l
-TZojs20uVikh7FQNvRTvd0MjTzEzH9a5Am038AzIhXq9tTqetK0iESdx7gsI+jXW
-BX0gUrm62C4CO/HeczVqQHfmFNab3/4vjtS0N1Knecm5dZSEwSZKPXiBjtOJAlcE
-EwEKAEECGwMCHgECF4AFCwkIBwMFFQoJCAsFFgIDAQACGQEWIQT2gs3MOdwP6uEW
-ILbHRs+p50+ksAUCYWzXFQUJGPbRAQAKCRDHRs+p50+ksEQ5EACNGb+jtDE+t7Z4
-6icFu/zor/AWx1FkIelG4jTbjqDPfNf7TTQrs8c7cduaLqMlCtPIM48Z3ccsrcAd
-QQZhLN2SDkd9HZdFROufaiKC0KGfj/m11PqBdXtFtvQAHhgXRIw5HkT3STSUm63/
-40HHQvIQw47OktTq9l0yHdGNyU0nWEYeAQPmbxWMgusgnR6u/OgbNf+MaKRSHPN1
-C0F9yvYOCAn2QS0LbU3XAobFSXYZoJVWSbX2SVjeE1csiPCq4qx6Mx41Ltkx9/Xs
-8g7HlToECZYEGJ7WMOSS4mA8L4NEmk+PVV9PgoRctDSDuZHQ2hN9v5x6/h/HMcUp
-BpBplusILsHvgSkvIX3SIcsXo9yMsQDTSulHncO8CV0UhSThbf68zC5lDLWn1UKW
-zdt+eF+WPyWcECqAeddRPtC2MfunTvxd6KSKffUd9AqUxABhqBOwhdxPelOSpKc0
-dqJfkPIJ1EY0NqNV2zaMsz4HwKkRlaxoByc+pOOYWzFdXto6fwZqtx7Wq5GQ91aC
-rR3h1Tw6NDRrWPdkli96Mh0D39IhKys3+Hmt9TIHoXOPvJiZoj15OC4qv5NzZN2b
-nsre7/MGfWup/TZpCVVWJ9R22vzXTUacSK1op3p4zKL9HJoMFm+SLWlpbyHz1Iva
-F2WRc1Qqe8aSHSZqaR7UROXNOUvfXLQ0QXNoaXNoIFNIVUtMQSAoV29yayBBZGRy
-ZXNzKSA8YXNoaXNoQGF1dG9tYXR0aWMuY29tPokCVAQTAQoAPgIbAwIeAQIXgAUL
-CQgHAwUVCgkICwUWAgMBABYhBPaCzcw53A/q4RYgtsdGz6nnT6SwBQJfF88vBQkV
-NFxBAAoJEMdGz6nnT6SwYO4P/jTfp1zf5+ZYjeQ1dJH70qR20miiROZ3oOGAES68
-jelz7+oI9RPEIu/qsDVmYBjj7vLSN2xeMrlaWK+dbQfkOXga1Y1DAkAHMQSuL+6L
-jHlbF4sPskI3BKMtaFwcXGbWHvGUR8LqD4Xrb2EQSJItahjNTpX6nbrq2WLPsZWT
-PYypAQLEhGEyQz6Mmeq7Kw1PIXGOOzI+O5BU7474cdi8JJS/N9HKuMkcchg9YfyC
-SJCy4WsFmJ+Ot8sTqd7uGc38Bmtq5QdJ7CE+kV/s12cqKUSq/e3trsLYEP2Fnpde
-+hiGjLpS4H+lezJh45rHaiYYkR9nWqTnzdBU/bPPF5TDPHBeZWGv0vv39VhPdFZZ
-iSCun7vyTvO75TZgpKus+V34eoc0vqzJ908hpxH4ZKEhXb7BftkM/fQgA7rCkNAg
-aT1lI07OywxxFTA5RvRq6IVHfXkq2F6uRz4m+UjVX3QE57P6NEVMQeiYtXjpJ1ZJ
-kYfOOdPJXL9Jiw4ntRNzj1biJ5vbQHxHXI0dPunLITWwuysqi+xcnPRgB4w505jO
-yh2L4qnWxaNmXjF3Z3LjHTFjZ2tylcZr6u/mKBga1emqDTaxbXaRv6k+vGqY7X9M
-r9yB/9A8HUZoYQuIi7b7sf2PgvMYZVpIbJZWV55U3hopP52lA/SHaQqjiS/96Hlc
-h6JDiQI3BBMBCgAhBQJM6H2FAhsDBQsJCAcDBRUKCQgLBRYCAwEAAh4BAheAAAoJ
-EMdGz6nnT6SwkWoP/1Ke8qc0SMfd7X3n/X/VyBElsOLrdbNAgWlzCEEBRvUC6yKs
-S+nyTluG5NTYUnXvP4QpWPTaCbXeHSP5IvXMX8kiiUJbIbBItUdNGCdTKeQMcODt
-lZvaNDN5awSxzZOTacFTUN9hX+TagTzh9gX38dSm8SQM944vi3P+UV6ls4dmxdZY
-PYzZzJx79D/guqNd59kZcbowmpoAeNjI79fopCrT8nl9LD72U/zNuocssNKE+rwR
-RUo4QJabVqSXgC13xFRCoOKfs+3gbSC1YziF9gpHQ+/H53WxWYWgoDW2AMcqX0f5
-6ThdQIVAW6/cKm3zeB0lo/KW1HIRZhJOwQ1yk9snRVCxOdKlNdrBRPDxabSYYVQN
-Jsgq4cgyp0pA5eBE+ragzeWnt8LV5FakTA80Sn6lVzHb/GgvpVb0QkkxQ2MnlDF1
-Y7mHeUwRfATdab9QfvkvSLQZemWptDOGBzOXoG2pzpJtdhivM+akTe7r5VIQcmiQ
-r+KEu3/E3fusT/t4+fyxN/5FaPYojKhvMRFbxo+Ynfu042I954sAKiikmPnsnDBP
-FgqI0qY0DHdXkTyEetUOSKsGzceufhz6ZaPJdymgHW3CWPQ1vB5bI73JDfqwlIV8
-OKCYK+7AHnkZm27gf5I6QjbVy6bqAtV5wjh4W/jlJbace/841+dE0Wne17ISiQIg
-BBABAgAKBQJNGhaeAwUCeAAKCRBDJwX6zdQDJRivD/4xnPD2SgqOXvp3nRT0k7mJ
-nX31zTB99xTJP1B0m0AiIXOvcokxS5hP05oFINF8ngrHNbnOnDQQ0+n7awt0kHJk
-alogNNxxa4B55Ky+IrkqOU24RflEcc2joclAlYVXEbHLv9hWZXk0YHmHR8NG5ssR
-dAYmvvL+4piBRs2ft/VvEIimCgB3Jj+j8GJm+g4E7ZrfSv4959oXNnq2zd0p9qIo
-VyJb1IeXdUlb6Dqzg42EQLXBQ7YnSh9cl0OiRvdFKn41+lmcYL2GHnt4pDmL2N7x
-ezK5Pt6BvWiiVyWWlarV/jY2NS00eOovILrlhfzdfMFiK498laRKTtvzfObEGif6
-DF+Tg00do9elP/RK1qa7G+yTZW17Up0cHEXOf56GIbaoNQLii+/5glYg0WvoEcNH
-HruOtdPHdE7sw47KIJ4XPyp4gxCuNj7a2WYfRnKzkWMvtWA2bx7IH1ohyEbXITIo
-vQK0w7Lg7IRK6oHh2UU+lxhdLeaUCZpOYpuyChYLolWVdpjI++kWugPl4ovbXuKG
-5W01HQSYUfcb+drPI2fs7ZxtqdUnnZKSVffvSR/CBllHRcX2nazat8T0c6omncOw
-5ouRd6QeneQfUnlUCJtDmSUxE/WILJ8ZPPCKv7xteBINe5pTn//FMPTyo4aiw0aq
-n9lpl2yP52CXzL6JTKDzwIkCHAQQAQIABgUCTkJVrAAKCRBDJwX6zdQDJU3CEACC
-Td/q0u5C7+dFO8PLzgZO1IOmVTx2XtB9ao7iKSgcd9hFq0r3fp/v36T8ghoGuIHf
-g5f84srWWrtpvFrOVB+Hl/p5usRSDfgR4vBT3xoRjo9dQutjptDJHV7P+aaIKeB8
-Nc7k/Al1S8ISdJ4vAe4o+tDbnpaFAMgv+xdKzFAR/U8E2x/035XbmevnxBT3D/EC
-UAjEaOAY50nPFIftN+JSpewHr1VunRW9XRiuDL/bbFi974O4/LCfZ43TkHv+k9mW
-ZHHf7xLByKIhgNqSRAAirpjaRYzrDVe6iAz/I0KFa7MVQn4Sah+H+MMPasaRnY16
-r9AL09nL1VGQsGGCuYTnZfy5xDmqVyhdddfGKZbZkRfH6jvlcNFRaEz4d1WjGZGn
-VqU86dBWsBCJyJ+EHkkEdtvfh95GWjcR5YDcaNkYeidu3cVu+iBpmgxOByPhXars
-foD1T3BosR6ZaDsOEcUHzZxCz6kFDWE0mtnPqGWYvRqYYDkdWjyLo1hEtoDc8JbC
-pN03VgdThZ17M2h3nfKs6xOB3EtZXFu92FVG+vtGHCFVgps9pmOZDWhDGrc1+f2D
-lyUx979vA+C+Np43vZWiP1WqnNOapidAZMlNubfMlaoWyP54H84vlgaQECdj1yCk
-1DraSYsAGSpXT+3tp6gZvdLf7jgIOr5pqK5wt9XiSokCVAQTAQoAPgIbAwIeAQIX
-gAULCQgHAwUVCgkICwUWAgMBABYhBPaCzcw53A/q4RYgtsdGz6nnT6SwBQJZsGSf
-BQkPzPGxAAoJEMdGz6nnT6SwLA4QAKgGpNlUSYq+1v9Sof63hk5U8xRnrYsoTZCs
-2iG77GVRNLMNBW8KM/Eu223VfHft84VNHCDfN5ZwqFZKR1pzkqx4OSPOir0dvUJ6
-JeMGJEQAkBrjXcI5Sm/YwNocgF0S6m1esX6HoAlR6TDgKUHBlgQtcijPhYS6xmL1
-6n6YCMj8KRiMJSMF518gGTxrtjlKNmJUQUtbBuYYhjIXZr8WRfmlP8PbvaYEz3xj
-AyFKpz1Uo2/E7qGPExWZ8u6BEr+vZl2LhNZjXtDix65Y3MN4g0yCbHQKvqx/XHyN
-G6VCD1vz+CnbfrVSMm0wahO7yjtTcp94D+lyR+T6DJvccw6TaALMd9+Z/rgACgI2
-NppColgijh25eEOnOvdB3Tpzdf0w/sg4T5Vpd2sZASFCrcuqKLzNGxRzgFKbRI3g
-89TaQY4/hxXwP4DiLVLQ30dV8rvnKodAKjdo7TpxqnpcCSVDC6HQ8J00ZO0idkmJ
-h62uX4Ih9+ybcAS/aVpKNarb0hG5lHnh7o2BKw+yVxGGSgDfjTUlQF3MDSVdZmzS
-eDLn6xGyhERhV+x0psypIW0Po46Unyyhmh0Tl0LIp6WwO0crRUDQ9KlKy3Gpj2b3
-XE3x+/fOW/ghqvm7Eulbwyyvr6FR922HbnryemFa8IfmH6by57djnY7VQgYYBm/K
-6J+29A9siQEcBBABAgAGBQJPBxzWAAoJEKlT5IkRwmrmfvMIAJwxeCueI1j+wwG4
-HdXjJVvtb28ckYIkGF/RSDH9XGQig09F9EeBumutnGLi1JPIwd+Uw9EPavCSGOnU
-O4bWh4XiOy9gcMyR7oOpeojtjHimMU3QA7uhrXNSJZw3ANSOetJsDdo0p3bnMAzP
-qSjm8jAFlW/57QMkwB0FjPIWq0+O7RsYPhFYhMCY1/VcdL0qXBwKQFjOeFwsegkY
-8An0BX6VHhlodGUFMQS2y+lml+3phZHIYUgZCXyw1Ol2yJeWRJiaPjNsB8VvzE0x
-Cli9wSXunxh2b2xMT3RxweOBLnby3YmWE8CNT0ugpWwRregcjLz+PU5IYWCAs9lh
-lB+VCzuIRgQQEQIABgUCTx99PQAKCRB9S24Ynj+b5iHWAKCGeZXjawo9MB6RdcGk
-vw2d1G/+oACeNujJ9qAvpT4QzeLczj7ZeuFaPyaJAhwEEAECAAYFAk9Q7fcACgkQ
-hGOuU3DJOpJYeA//bIbl44szUPbjARlLF0popTS1G+42oetMwvmGlj/0ZSV1wlL4
-YjyIoDFz45ztUc8Q5iQFffqaRXo1gRyiMfpNFifAO8SIfGmpbk+cs5/eeV5nj6dg
-+k16Bt3NhC0Bw8xsdwoQM6TaZLsDj6SsQVRVQvUwRAAPWSiiyFra+CgFDQVwHkvU
-CmLxM6yVoAEpECE58lV663N+iaPGGtojG636Suyh4WouABs1/vYN6o8IqYqH/QQo
-akcRCqfEuHRJ0s0neLL0PsiwR9s4U1/3IbuyFVr/iRJ5Fx7HfvUSoQYXO8GA4aie
-F/VzGaxaNqT1VmuBhjvVIpUHqvXTA1bWwhZq49qOQBi00SswxS0dJEU0n81hDlt7
-YPyQx3cFs/eyoXmdS6Vl7ezqQJqadCm4o26r+3IjfO6NctSL53zwaKo4CrljRkg4
-BWn85ov79+aSh+08tiuWCKK6PQ93jC0lKrRqXMn9nOx2oixYAJNoojiPtWuu4dgz
-jZ/PvlyYuIg7fIzN1es8IC9gZL7N1XigI7LdgxPzRK4MpvSMcPCXiD0AJbazjVfM
-VdYTlO5Op5wJoRJpEOV5QaxivLeQPSqVL6oJkUKq9aiPynXOLdOS2zhrpdtM6W1B
-K4f1MOLpa2qqjNAoNnMyO1YIiFM41IR2TM2JxaJXkhZjbumgf3cYbMoLeW6JAiIE
-EwECAAwFAlAW7XkFgweGH4AACgkQMzvmr22smRiMpw//e52W1ZArR0SGSjFu8UW+
-zQPoEt96355SJXFr4UZzyXWgu4Btkyvp2oWDxVD6dYxwEMlFFuDgtnY4eDLT0q5B
-/1nWDaxMaNMOVL6KH6WFMhLqr4fDO0T/W+5WTeVMeId/2ykeijq8IJOfUaNVsh1+
-/nxsxrZtnd4OPDFXT4hsSvuadYYukD2WtWa6Lits55VH13I0kHZOx5rTDKgzhfSb
-hCFRSM36bjLSuSmdVPOVlvHTkxZGyuMgQIyBDANdJae04Iq1Z/ItjST+P9nhTc0O
-R52KXmG+HBY3ei0n5GuxLDB5O6iBUhPB5/wmd0/EBfYWGyphCUb6FGm9eeo0Y/6o
-WZ62lRNMPS1omlxWZ2rr13zVBFAJsdUwRSl3VB/f6ub5Rl1LJ8kEoylUNkoX3Y7f
-85YQoO1AqloqSr6jYxYXrnHdUVlRW3+Jhk8/zj2mw3FdxadlQ/A2CjYQSSlbvtDQ
-Dg9OPuLv2FB5LD3D3BddqlIB94PjriiPKF6YNFxk9n1CbwSID6Yu51uF30f8W8eY
-0nGF2UV0RVkMUfFLx193gTj6Npc9npy+2wxNXRJrUDAIySBguvVWw9bqUbSqpfiq
-VK4amUDu2wvS489RyRPhtIQhegupJ+c+Maz3XRIur9RivrwL7khMF8+tk56JIQ+D
-HC4+3x2uR3FaTbCZbCVxE7iJASIEEAECAAwFAlE9h0cFAwASdQAACgkQlxC4m8pX
-rXxX8Af9FfHwAMf46Wo84Xd+btJIcRtkt5Ove9TgfuVkW4AFsHoz/3R9vPBXJtUI
-UdMSrJlmAgr848uuabcHlILxJjiYiqkniAVkKP5LFxGeQJG1blkQYR4isk2wHVFx
-nrVV57TUXpia9PghevavRlwN1LTYM/C+FHtqkd1RrWWGhaE3sVnX/H+GLelGX8BD
-eamqR7V+zCXi6VxZuxDC9e4Iv/8aUuT1fPZHn2biPkOWUKohAkcDCf5RvZTZt8gn
-u28fqQxjQeuJFWhtnCSHcb36IIrAfAdv6mqGWvMiu1J5xAEPd291iKeDdfmajYvt
-QRPQbtnXB021D6NXyo0vejX9LU90+YkCHAQQAQIABgUCUbxqKgAKCRDAEzCdbX5E
-XIECEACUfCVnD7LkcI1f/z7Mylofz/TNcXgtBmqRHyQN4q6hKS6nN9YLstlMZY+e
-ODSt8EFElnrlofrP16CwpcyCi47ILOmkQfhzP6sOSYmT4OMcdyIxChZ2h9qqwD6b
-rF5XikoZwrgQfnIsEUNSFyal3U0ybfOutJs6BNGWlE5nloVHYXFp9OB9ooBggz4J
-nv2THof/vRBzZjxN+3NQO1BpT+0llzX7ps373JC0vh79vGswO3FzS9Na+TfPIi4c
-uq292pCSWtOO0Ld5ZTcbBgMISCF875quVLgpxJNChb5nVLTg55hdNQhYXo76h4mY
-iPvAoV6kIvfviP/M/NwN3HUWxQdG2A++drcc5U3wsQ4DcEJfsi1PwOHPjyH0XqQ+
-FtA3PZQsa7nOmL/tn1/CHO0eVVlwrQ0XVKFI+oU2g7VEd84PU+smJ7pm0YlqRwCR
-S28+9GJ0xJgkaLpinbCKK0HyZHuc1TItzatCNdNuK4FfpJSrII2nrkWsEIFi9Vou
-UCl9eppeCt+Cd/bZp+zPxhim5eTWAN0AhqvVxAfHvCZRKZTj207x63vezoiBcULu
-pFBpO3TzNg+/c9nv3clnT0PLVBv8DJuCTOlEKxEyZSSzH3Ctk2Emt3vrD8UlQcOA
-ZWkOrBZGLWoHc0i+En4Ym0GxTc69xV6qxVo1F0Kd9SEEdHs4LIkCNwQTAQoAIQIb
-AwIeAQIXgAUCTvBSoAULCQgHAwUVCgkICwUWAgMBAAAKCRDHRs+p50+ksHIaD/9G
-QqJow3BoRO1cxGEBQ0XDrXl4Gm2kJbxgQE0mVseurxL1VcFqpQAU2UWd1sVGyX14
-5PiHDW+67FBqMNWBy/4hIigbXtOOcH2GnqTv4izb0c8bJGouzxW5ULr9BfTgOWHi
-EpYBNafUkMkEfSQWCBG04wiY2F3J+kwk3FX1NCLWR0DbqOr0R8WtXjQ3xo+CsqHo
-JZXhv5UtM6qnv4eGmv5Y2CF7Q9yWXQvwWQNspp3VHhYyixhnkrJb8F48dRyMehBa
-IwGk4qlU087yGrMuCs215bS4BjGRNb5Vw8YhiXWqKzREh08dvumFrBJAbxPE4LvH
-1PkPqR4+znDnuvkIZVlSb1IOdQdB+N4Yinfcr/9MzoBj+8YkzemMRkP7y6QdidxT
-Xb5T7q+myZfzx7AitjDEkuP1IvEOyv2ou5PjAOlwn2mlov1QuF0dk3t6ULshXNgg
-5npFd4on3tu8RUnJP6XQBFaPSh0rdbiWQmR4HlJij/FHldw6dbFzUdtrQ9E43sGG
-eNQDxWOXC3IkdIeVCANp/W6XlwS79wCNqj8WWywdiCE2yCnnx25J1pRfu/zFtdoq
-QrSYIR3DUaBaY1olQQzIUdylm5lL7X7N0QsnfpZ5B8HWJCn2kj9LwXaPy7k/4iv+
-TwPviRonZ9LtNBb5wPECOGykAeZRfwgrdVMkGewRX4kBIgQQAQIADAUCVcUD9QUD
-ABJ1AAAKCRCXELibyletfP8yCADAMsu++fTVJfbNaYFJ16pp9gv/up7SWheQ9Q2T
-8zs01zG/REOh9nz57OxvOi5yegDKvt/aya+urftyHoEcceotAU7VJmlhuc7d4WfV
-mhgZPQNF6FRYIy1/7y+PczLOykibolHguyqyycqCtwJd3wWe11/UgYwHMx1n0xAK
-aWPqZHXyZHcnCf/HKoE6Nq7iHSNttB1ZXfn6HZZKDG0hucGdAG83y3pn/HmADNMY
-aV/+wZCvLquWOk9dvd8riJLBu3s/mAS3sNG5EcyTroOThLvEccH99zG3etZ6cHzL
-4gH0cpB3vDzcOrA9eewVUB3aGl440nMFhpO/nrhPR9rsEx4xiQIcBBABAgAGBQJV
-6wqcAAoJEGtJZliUP6sgP00QAKi8HZWdxySi4XhUGFVwR6ep0WnwIrgUp28c6BT3
-4DVFxsfft8AaFGBp+Zqc5ChcntnNPCeNkrAD35wvvK28NPbFVqAq0AJueCeLZPTi
-Nqlw4iB0JZhl//wWSvwDI7g6e8H/kD8+zp/abvchnUtW7KBb8MNUiPVteuvFdRhD
-et1KBDIqUKs22uOqIEcpogtcwfSNA83Idjt0/G2iirBdSl/JvGCBQQDzw/n3BQ2n
-9R5LoxjvKodiNpyTrIxZ16Ag6XySxhP1mo9oPBvdNqw3TQuJZbvJ33rErKrhcQk5
-4s5bZzZZmbWtfYQFPmkOH0rQvGkBMUq7D4cZN9a2SW8KFxM8Qp7G+6MonTDcapzI
-tuM3DoejI/3e7Ds4Q4bgcC6AuAhfpIYOUpVY9yd4rsyJ4si9w/TjYCb71Ejm6yne
-kTR5SCFkzQ/mXNRKneHnPVzWmRzksazvMJnsKmBZfsdVsgNAg3l+unBh2Gtcw19j
-IPijIlOnKzbfW3YS6ADmwWPhnFipbLRQ7P31HqfHACGQT83XPpO6x3Z10rZtnOTK
-dyg02c6CLJCoC/QQKJXi+errknrzV0N10+wWtuia0fKfsTH3Uxw6dbkqsa6xGGSa
-BCtS08be0oMEGumXv7YRGRuMISxJEhq933Km0MB9uiiQJKeno6Ec+erjG0gEaokT
-kGKGiQI9BBMBCgAnAhsDAh4BAheABQsJCAcDBRUKCQgLBRYCAwEABQJSQ2U9BQkK
-QSXOAAoJEMdGz6nnT6SwFS8P/2TW28QIYWByzb9CduH7wMyjg7DsfaW9D791iQvp
-V5d5wgG8VbZwawfljrbnMJSVndkdY4WRIoFArslGuhUPo6k01Pj2QIB23BAhIRok
-q1ZWviyQpBNv6GwIsZCJbBLHsa0oQB/QSGDWpsvinw/OXxMRMgHE8l+zrlLV3dmI
-1cMLzkR9TsoQSA1GJm7Ato2u7EEtHP+90U71uz833FUgjgExN1cItuzjXHuJ3QK4
-aYH5RMWe/OX/X3O2R/6fLiSmxfoiMF3AA5lALEQXFp+UcnBMcxfrmXJykzjoQ0Ja
-TjQ2pc5CYPXH0PhV4gSYUyccUAq4MSRHJfq/vW53HEGmQeW0/BImKisNOfB50Nyn
-jYxjjDlZ4EJ5hlX0PODQ7vbpF9/NCqXDnrWteur+Ng2hdEwP0q96Cw2hJzD7GRh7
-vRx57bGV6achn+IvW3Ra5FNNuyf521o0YgC1f0gGKvTWW+JkhE7Xtm8S6GhpjQDu
-uh0jmOsvAL04PPWQ+NbaUMwe9z7CsZH6hLpm/JVYkr+DJjF3WUhCsUbXjyMv26qh
-huawWYJdNunbi55Laa809wxeTDHHoXYyJT8+LA0ilFkVxxxpNqwo68sNNEJE7nGf
-0pwneAXj/m5NI1sy2mHwtnrKDSSHNrorJRHGft54Nq1rAl2gqzNi1cY7Aff4zIiY
-dOuhiQEiBBABAgAMBQJW2fCXBQMAEnUAAAoJEJcQuJvKV618zKMH/j5jR7fcNL4V
-kC3A+BSOtYbHRu2YBoVQA9tIqygA4PIkkxeN6b0LdKhk1SradtoBLYQlAFx2EWpZ
-I2WQMYfNH3RGKquRPWFEiW9dkrp6NXTpzSCc22TxBFqB95sVjPvtzgajvFXjniM3
-nbAycbWEM0ncVN302Tz/dlqLHKb1A8sLymgCO09BzHCz34iZpm2RJYOqio3G15da
-DvHuwlGXD2vm8SSfac9AaF40v0dLsJiM6DDGJZuzFX1mzcf5uDmlz44gVxUa6paz
-Udy+MoB/qqOuJbOWw5icP2HC4fFwusq++iYRoCZ6EECBb66F29eMlQwhm+cgEr9x
-mCl0ex4Tn6iJASIEEAECAAwFAlenIxQFAwASdQAACgkQlxC4m8pXrXyvWQgAwq7C
-t+kJ4tUDfIw/Y3OYTWmqhf6hF6ePuqivRs4ERdAx8G4EbkfatjpNZ6RRhOyvw2Zq
-uVcxO3SF0xDyV7Io93pVMGMTOjavOcxtIHL7zHRKl9X8oaSq35FE1x1zVdb/++Aw
-UKkYkCC8Kw369yxAFvxRC0lBpChIS8fEMylfoS8Kn+5twPAd91seBzDasOpCh6jg
-iKuZCwINQm2y082smVKnTd3cPEirSivDJgenG5YvqbuF0MOQbA1QubUQo/ehpYTc
-VDbBVXKr+RQCR05zqZyW3/nV5GG4GEu97ApfcU+CYUegN/5XYtEQbhajgpr3GBbc
-eaBOWLYs8+3ly0voEIkBIgQQAQIADAUCV7hIGwUDABJ1AAAKCRCXELibyletfGEc
-CACQpRvH56fIzVKV5zBuhpwe7bb8IS97eVlgOvckfQZTm8EXdNEF/jJzIxthYkB9
-8o8RH0O4gol9ek1xh05mJWUAhhfDgv1jO8rWYOrTBroSzS8KbWegAmL/4VSR9LDE
-YvTNIghg5qS20jQt5kTbd04+YZD9EU3EuHauw2/AvXTHEMGQ5n7bLCGOmKaoA31T
-P8j5qYBEHRgMt4Rr+wj7b9LmTbvgRPCE5ME4fE5aErPDDmiB70UT1Uzsgtw07xAy
-tjLffP+nkEkR1BkDxP2B0YBID3T+gfqpfmHaxoS4S9td0RQeKJC2H8dN87bx7xwt
-X1KAD67466lS3KIJJgyQoZm5iQEiBBABAgAMBQJXyhLoBQMAEnUAAAoJEJcQuJvK
-V618++QH/Ahwu65U2phTYwVAwlTLuuD7KkoOU9owUPCM2LyB3ZkULCvHQTs/nqsQ
-i4P56DelnVcPJ95BFRuCtJIN7m8GHqw7a9c92PYe/FSadbHv6+vKiL+FmGTgBEkG
-3+aD77rYuCWHnzxfa36Vl7bE9KKlMG1sTbGh2RrYD9VR8OOqD63I2zOe7iqWbIC5
-icXFCuxcwXLNFMiGi7k/HGaFgLL8MZzbr+h8AlVByA9vo4fP+uDQYmK2gYA/6Ewo
-m0CQzytjv70qMPRaBR+YOodwYv9jJrzuMp8IFUKOqSTsjZM46Y7s1qJEEPzv5+Zt
-2EQua0tcWzToRZ2y6BjvSpn6fUYTFOiJASIEEAECAAwFAlfb3yYFAwASdQAACgkQ
-lxC4m8pXrXwcGwgAkIAEwzrJVhPErVSXJvnL2HUrZU6SEOyX++f24ThkjeOTR8+w
-HlDuqkCk1+ISTtEqrpJjxh+p9BaGsLocGBW/HLMfCo6G498EgPrtCwZkWl91YQXZ
-gc80yRpmmS61uq4vZMOdEod0W/i0OfjaLX/slGiLOFOgHmg7LV83kFVqZ3RSHhda
-d3Dk0PJAzfpmV4eRcJFyqwru+Kq1zBX2UJeDz9mIj6HNNtT6Qhzy5VfiJi0gwlyS
-CkjUhPmE7Vm2lgqGhbAG7LvtkNhFwDu//E2dHYau4nuONkU9GdmIYrwkc/SmEnoE
-ujadybekqT/hmc44DKhscp+kdSmQUrrmVEmHxokBIgQQAQIADAUCV+0CqwUDABJ1
-AAAKCRCXELibyletfCkkCAC+EfvmhZekU8ku7oJM0+QQQmsMRejCqU3WXSN3e10w
-7CCCo+6cPraEGZS0PTm2CoFTaP53XrGnW5cPtFYo7rYbzvO8BFxbiscsDKa9D+6/
-eCnE94T5nQBqptHyF5uTJ0fhJKFIrIZyIGFSx6oR4BR+8fEDKRQtEOWiFltQQWEm
-u8xsnXcwQ+glkFuyNkV0YqPaZycvyWKDm3e+DsTwCALj1TwLYIy8DFHUOxLu0wjS
-KoDB6XOlMco8HNfRcEAbf0ajUi3eEhOjZ4NsWtCh+fyyFfj2aFCakSka075DLBdK
-Me7n5+0rLaucGcre+05B4E5cg/MfSdMmNTACbjTr6q4GiQEiBBABAgAMBQJX/iY4
-BQMAEnUAAAoJEJcQuJvKV618VfcIAMKLhsD62FzMwjw5lbEVlfpg0OZbJUqc+rEZ
-Wkn/suMARFatKvcvrQO6Ym18gieP5bcpWaPMKguPo+o6CI3kvaoDgfJMoPkx6jXe
-jq464MwPakmJl0WBjyJSABQbLB1Rne3gq0uGNXfD33F52pZFm2iWOh1WimiAIB87
-EkpxMxMf541qCpGW4ZdjJGLVxFGKSqzhkSiZioExgZ32OTNXK+3WpMf7M7vTAQW2
-ue8UbvSVapJI4ujXEg38I/Y1r7YcZI5TeKLZO7/98/C2jE2F7tgdt4MMxv78xpbq
-MX4FJEwpP3KODsHykPZ9DehiIeAbeDGQ4PvaSXNZHJErFPkDfseJASIEEAECAAwF
-AlgP8mgFAwASdQAACgkQlxC4m8pXrXyfiwgAsAhzr08bRWOxtrbrXf11wIYuKKVA
-kP2aRg/Wnk1ntjz8IL0SBsG4nmm9gmAQ3emm9KgWJjagHPNq8ynytEDJ/dJw0SH3
-GAPgKn4q/EoU86xqUApBd9MTKOoq8rHFyd3bZqhENrCsAHhw6hZI341FbjE1908Q
-1T9bUXVkzh9/bZgYfn/gBQnGs3tgv9wZaAsvktPa0NFdqELW7abtkZGskd3o60au
-Wush+0fLiFqzaND/L0NKCPnlAE5flD1qJ2M99e1gzaKT/vqhcIkzYk4BMUyNKxqk
-KtU8tObpQsgOCpyY98NFqO20PZA8PfZ3DNVs/7IwfPJC08VGqhD4jsqzhIkBIgQQ
-AQIADAUCWCFcVgUDABJ1AAAKCRCXELibyletfAtVCACS4xoZCd5ZS8TSxhXY8ClP
-TN7CvvAePcGx69SujezbBMiXiPxD4ReuU50DZHcyjwdwz92qWc6JSmYKX4V9a8h3
-9pnAdFBO1IDjBzTovmZY92N0urJUQZzYICPQ9UkXhhLse1rzv9a8gwkX1uPh3QcO
-aaZRt4wJMw8gRNpvYmvxCj1iazTdItMy5oXevYyQo5xmryJYWs6XapvfOrmZVf9l
-tZim2JWK9vuWkuGSRsi2QGXCXHIJ+RS/HzKhgghax2gvT1peQjcJXROnTmCk+Rsd
-26JJVzh4xCyLISaydnz7LqqTabUQvVmx+6BNlbJKwqpCrII1USX9OxCJr2tLKcjB
-iQEiBBABAgAMBQJYMuK7BQMAEnUAAAoJEJcQuJvKV618OggH/2m315sO5fvceV1G
-qJPuAfwHk1SVWroVFzf7thdHzyD216pdbAU0nw/Ewc5tA97aLBxYPfr+i9pOSIBJ
-e7M23xk295ykHDNxVlK5iA9jKJX54T/X0bxjPZEYOQ+FW0OKiH6kKc9nXnfah7EH
-8ZKNsUbHPZoYx8MGzuxsOUGOOP0kVFcLz9exTZMx3N9XgIPdWQk8DlQ1byUvQvLV
-GuZXf+UMtNsvTX+2UxDkzM+gUUB8qXO68CpoBxPqRLlmgb5guzzZckGKd8YlbZtv
-emW9hdiBDwGKKRvTpk15Fg9H5bKn/DrEhAYukSrWPwRESvdl+tfZ01sN32c7dxTY
-nDjbn9KJASIEEAECAAwFAlhEBy4FAwASdQAACgkQlxC4m8pXrXz+ZAgAoq4yjyc+
-sm2U7n3bXgNowimVrpu6JBhPeaa+llBW+d0tON50uFSXW81oyncMNopd/09hOmQT
-J3+Ab6Sd4GhZkSSBP0SaXk7wM7FNwWs9fNbP5a2XjMX2xCPu5oR1Y4RpJtLMORRz
-Zt4CIyTvf0DYNstBfcdv40m6pDWUslsnkzWb0kBjM5ZClYsx9DsnNta4sMCTZsi8
-JakRU7ew/iWK0FCyU0jCdRUqjO76rdeD/nv1uDh0Fehvwr3Krq4u0GNjGnesUxW6
-4yvdfZNj9udn2ZsvmTlNTbKvDmbYK226btQiLGmzmTUQu7x+hsNRban6WYynGTjC
-j7I2ng9B6A+YVYkBIgQQAQIADAUCWGb1RgUDABJ1AAAKCRCXELibyletfO5zB/oD
-AmbQItR2m/yW2uxdMwXIQi7epMB+U7Y/1LyFPZpLwRjlpWHE9if0P5+G9W9iYtxr
-5OhzgBvNbqaJ8B01W5GWWhLUbW9DR+jhVQxqd3an4DJkHXA/8vdbQTjCpTHOZjcT
-CMgUqhptkHziUm5U0Z7gt/o6B1DUtseUW6ThET+BpHiPxjoF2Xb8+Ow7uY2spPEM
-y7BO2ixLHhj/0fgfH1Eet98F2CWm+nWn1BFkKfJ/AYVTBhem3SJJwAV7hOUE/Rvr
-BrdeFjUNImFN/+cX8CyblcJMN6LrVy7IJVGyO4DxaIpVQYnmHS5B2X3gI0UYqtym
-iZInOI5Ty/Ru7VJlg+ktiQEiBBABAgAMBQJYeBjNBQMAEnUAAAoJEJcQuJvKV618
-lb8IAI0BZfLzWp2LiEfdDpxZjdNLNlCINBWTg4oSkZA/0HjG96J/9DnjVw8RpAGT
-cMOZpGb6OlkCSKIbbP63RUuosH1llyKtnd1LuIHgJywWTQcxS9VskwenmNQ2dRag
-oL2BrqJlwryU0qSwrcpnjS000+5Ys2XFcPvUvBeZ2pvh9IBiWI942A3Rhm6vBlrR
-B2+lVLaK/c4YxJ0mmbHsXu1CQdvTxulYJE5IBpfCOCfT0AvGqHSSdNzQzY282/N3
-wglOirSfr0n5SNNeoPpeXIJiVGF+iQNW2s/XxDbQytwWD0owQG2nnT0JG65bwM/1
-X9PYK10FUFgE2ZZROxP4h6qhIVaJASIEEAECAAwFAliJ5RUFAwASdQAACgkQlxC4
-m8pXrXySpAf+N3P4GH0HoZTkmVp5/LjStFqyWz5pUMFcNdCgDLEtSBkkeSrmWtsF
-ZAVhAgEyKJgFjC010uKaa8hDh5efpFL1l7OJbvw3d01kk2r0Wxf8i1RFcrmHnXbj
-Fo+5zvLLU8EM9kXySbUrDySTAqN+Fw9lXpoeoBlCWLMpZvubWOPNFBDFQVXplQVV
-MVBHChagsiiPDLnvgcIv4rW4Ecjr/HYLkVJElZb+liQNKsVNANtA/6iZJHK20PJ0
-FRvTRsBZCzbYj23wGv10mqldJxucVz90hWEWc4uCVAHB4IZQOxtRq+YV1rVoS8wG
-VWKuZRYlJ/0NhKZY0uAWR433c79f1L+UtokBIgQQAQIADAUCWJsIoAUDABJ1AAAK
-CRCXELibyletfJq/B/4gMKa81SLEE66mTQAO0sYILGfzOW2NjTGqUi4yqS3J0A6z
-wIZ43It/LMrFYdNyuPmtJhIwAfGYrSnAzwPN78YhWMljwpRl+yw6NJyu3JgWRCvO
-Ep5eobje6jTd8OCPDUEyYYa+ETN/YkMkHrpmGnHN31CVMxFC3+7RibrplXccaa8k
-dgVjthDxQSaWQVpfbCoRFiiMYywnIeOw5WYBNVpm4kQKWCr3NhNALRYnrIc4D0Ev
-7Bdm4cFYuyeNFkySANPkrWXZlL5Yb8xsQmDUqf52cYneebM/doTHn6ksjbFz0QVy
-nahEwsh+6Fy0L8kAJmk3HsKljeqQ1aryyeq4gkoYiQEiBBABAgAMBQJYrNTiBQMA
-EnUAAAoJEJcQuJvKV618l/4IAK00m0hbANJQk4NQjfFZ6vuZAdf+l/D36jRNeokI
-Eskif8WHDHHsZRZ2WE/Iyqn1LvAMEYRIIedgDCVKlexLlU//b746yBGDz4dhtBPU
-fvHVYW8L2gFYn4PCUPNe4hQZT1OolRgFreqhzKErpuoKDgsrgd/ijgo9kqNpQXfE
-5x6GorCUwq9HRa0sRfqgv/tjGfqexzKQ9KIL9KN/pA23eI2cH9e2K41rMmcJetvl
-SrMw4R0BuGUyyOcHLGPyJPbIjsv2sDAJlFfaUvdxuhEA8FrNwHVxaNtLkH1CK56T
-de7C/HFslKQWvaG6l0w7SBoZm3IAFy7TRpcLX/hCxP5UcA2JAhwEEAEIAAYFAlfi
-4cUACgkQaqahMzLICpwk7w/7BLsucyhBvnahy1WKs9KYPUmsLE8eXW6j4Pyeq2FA
-SeZEf52V4aiOQI+qsNeAvJ3KZgobwFer4cYqzNVUOBr1vV7Bm8Il2+YxwhcXvn2S
-+CVstZohVFBPjPnUqY7A5g7iX0NYXjXpJEmB3S3fnHmC1aiqJWwjG4LYX3fUpw7k
-mz55hRF2NuUrFr93l9Zvwx/kneWIuKrJS8P6JX4hLWNMnIJNrDuD8g830PQH4SWg
-PY5BuJK+mgno5VvZYSwyC9DZeY75awI3DXrOpRyhjYxEIvgNRbb+FxTRnHxiDTkC
-nqYCcPvaHzpQXKvGUxcRgrLjUH5uLed1vd+v+EFTfKFKN9ZeWB1OQY9+05LMQM+6
-E3ko8M/QX5vy76rLTgv9Khmtaoy6FGQchkQv3pTlY5b8KsJuEgPkONKvCvmKcCns
-8YjJz22grtbJrY3iO23ZaFgZjMWacOc1701VYLLSUXlZL7VWvgiRm+s9PxonetaV
-CBXW9qLOsW8xLPMRjaopLM9QAC9ZEu+Xh/ASvxgy5+qi0k69KEHz6kYzM30Wkcti
-kDji9UP84N4cM23OjslygZ8NEF9FwhgwAEfP3HqEzMnr4Juj0VVN+mkfPhiM1UbU
-xDMHyL9cpUDv385+AoB1rccnhUVWEYlg1viGTVdzPIdb90+nYPmPhhb6UwtiLTez
-4iqJAj0EEwEKACcCGwMCHgECF4AFCwkIBwMFFQoJCAsFFgIDAQAFAlXqhPwFCQ3o
-RZIACgkQx0bPqedPpLCAWhAAwP9Uy6+SqXuSzOjBC9oVZiWIaFDRVKfRMG8xSFU/
-dmhRuZ4Zbxx0EcU8BQk0CXpXr1MMP3NHzWPs8eTsLCDKzaHcyX3F2wypUKWztL6w
-uWj2Ozt+zNJ56iu7h6D73N6i2scGDtMMEk5CltAaoLKS5EraEfPYz3g8qbmbSum/
-Esg0A86ljSMni8Jle6a8c4NrAkdV7sKFMsvM18ma3M4uRZ6IING3bTVHHJAtc6WG
-xdOtQchs1BHJAoK63970MY086jx1prCLo72smlXPmjhZy4BjQCttqRaP5bNX+R6x
-uNLYfghIlhRhCawW3PCetmtHOCyRihtTHww9BC4fDkQVXC23u1Ep8iUoF6YK4yLI
-SmnPeR3Byyo18XwBxhXnnCwTZUjiBybYby399PQEl0F4Q4xBZlOvYN9Gtg1ZEYzW
-8q5vicD26dLRaTVQH4XmoP8iIxTDCztCKzvI+zqBtgyodMRfmVZaq8JcVlIxGwKT
-c3/Wqb8/Zi81lFu3+4FkrtR35SgVYXIAenmwrU6ySFNeNKHOFVStqtCvb3/zsVrw
-gVdp+micinATnChDnm3KyI4VtGczELZhjhTQBaEiaFbiUOrUbnA1fwrtS23sRqd6
-wYS3/XFMaZkxmFSYyhiQ8/Q7UV8llNff6LP57UHTVGfrkywNE1mMZZWPxj1V1rPz
-8V2JAlQEEwEKAD4CGwMCHgECF4AFCwkIBwMFFQoJCAsFFgIDAQAWIQT2gs3MOdwP
-6uEWILbHRs+p50+ksAUCWa/zhAUJD8yAmgAKCRDHRs+p50+ksNR8D/9kNlG4vz0w
-TWPgWnbUZgZihH5YLS9vDvhXuSCvpHZ+sKb6FmIw8gL1ydqPPesiY8lvYAjSy//t
-jn7u5kKR5207r82m1jjX73N1JIQh/DQWAYi1Sg6y7RWxHa95P2SNtyj1M31ss95G
-WJOMmUJfErBmza/un9Ql1z51t7mVLlqPKZrWn33U5wB80hUbPrM+oHTtOOhKDDlp
-EwpcGHrnDhtT+RMPjYWRayv9a2OzINcWX4ckGqfzBX+GJVTTGo0n1/cOZjDaOpmK
-M5icfl88PEcM54tx8svwUXmY51g8GPRxqFIg4e6VD1JxF7uzWnaiGqpkx3edLVoF
-KI0tAq+4Vw5woLwF9ccIXW01hOXN92kKVITPqEwnoXp/8jN4/+BcOnIjnpZpPZwU
-QAq11bqZ7ClzfMJWTSAHMA0gD7cOeSCo/ixs4Yv2G9Ub8J4B2z9Db6NBEzum8sLY
-hSP1xWHQQ49IzNeWMT2NVxxnPm969t34ElSomyuBMJh7zMXnb3pSTnfdOgmddM9u
-x6X9dGspXwlzaNjwGdhh3h5VEij16srSRHB+onTy3oEYGDFGI/xHSSUBfmhkc8CL
-ECDKmXfU3pTkyAtYaqWd5POjGzjeTxxYXVtohaJ6jBNsnFdC6UpJyrMVWFe0VUcD
-0AEayR19wVCHXERTZYtjcOJ4fkCZgW+VvIkBHAQQAQIABgUCWninQgAKCRAD+gRj
-8HrzGD2FB/9/vpTOFgnNCq16vADtEu5b59Ph8hpP2aymgd8GKU05FmvgjlAUUOE8
-jxISdJqgwoLQJk9Dqopz+Cjita9iLiYi8jcl/G5tRoFVRQHCYNQkRJVgnkTwV+9q
-KPlzKZ4H02iXZJ8M/HAz7RCm/i+n1o3v9OCn32LuqqDUVi1XVZSZ07edKB7m5J3B
-86gnn/0+Cm0zsW/spKGEnP4nkkX7hAUll7dvgbEfD5VAISxA4UUftwFYLfLInTdy
-SvoRjNa5BhQCozk1s/Yhy4IrGfk0lx/oAdVhTDdLdxO6RcM/7K4eVrkYmOqpTLn7
-Hbbz9yrbfVQQOY6cemhL0cMt3INcBPWHiQEcBBABAgAGBQJaeKdCAAoJEB1uaW4k
-3arGPYUH/3mvmefudT7tvmkC4DnZ2d46cBFVal14xZ1RcLqVZ+PkabvVMXwSjJ6w
-CTHu/1LNQs8pAfKgIgnhrht/GABGu8gjWnM6Ip9Fq+Ri7fVx9hGQmFb0xl1lo2o5
-lQxLefO/Gf4BNMTE5SeS+wzPDI5ImtVdQvisoYVzqD4oC7M55gWX1jfd0bLohvwK
-DUAjKul6RgmfmoD2/jMum79aZgSGKS12v66R1ACMFiF3Ao2puS05S06gUGgFIDh2
-i6ghiZlG5GQVMm7ELf3Ed69WOes4uzMMLSBPGQdXx0XyhdvtLmQSLwfIyKrczjSf
-R89fbrMsiEz+uIL+yHE+iSUrU6XB1O+JARwEEAECAAYFAlp4p0IACgkQVb+chhMH
-nZU9hQgAgEUTB6N1fOe+PqJ2KThHNM45XUd/dNe7oFE/f3l7pt50zgs0cYLHfkiv
-HPdCqT8VUkV+AoKYNkpVMPTrBqRKw62LmuviP/34aSOR3v4AK0e2Ik66uPi9tLwK
-5lwGeTXCpdSCC2KfjEOrMErPtveXGBPimaPYP55KDNjOz3goFRVgUT5HNKK4x/Ca
-LQaHxP5J1vS51K0pIwY5jN+zhUh//QTs/x4z9+zsWmbL9ICP8qIRKMBphFNM7Gdg
-tb72jtPsMH1MCSba8kH3OS/k9/RgPLf7BupXyKPgJuvYIX8yU+084T66X5H3L+xL
-xDC8d2lpWYLAPMcTzdRLrsbHkai2TokBHAQQAQgABgUCWndQqwAKCRDUK/+2HyPF
-vcoHB/4+19JT/3bHVhant3apteOZ4czj5dd5OX8iezAJMm5KzFAc0QB9xpqMPkHV
-StVIj5NHX95NJxqhgjzmEGTxR8t5farGOU6HPYM5vSAXFYiYEut+MBEFU89YvmSD
-M9CMewEQfmjCVTMKfpdV+pFKKvh1lfo6BINAvO9i5uXxfqyNEZqc8/F5JrTxm5aO
-xAd1J+zvnPGQWdLk343sAj3z7Hbv8IwkdwMMSfedwtM7b/xTrM62VEL/kHC/Jd6S
-nPSIt0LTmCUVmvFu8uMQEwIXqpXX9wMnrdViCKL07ai5T3Tdl5mmG9YD1QEyd1Ey
-sK0nlhqm8C5pkYUG8DvQEhJhwKd5iQEcBBMBCAAGBQJaeDlcAAoJEAhtwqbUC50E
-YQEH/RXNTEvKEG7BzRlePbP5m0Wh9d9hhjvaUH4c43UQAoU/QG2ayxwhI53IGeyA
-Lj8TZiLEVfpqBYFoyc2hIxLnewn/nVC4DyZvGLHTpkJFX56/RzhjMv03Y4WmJubM
-fraAH7ubtra9yR7Qiyt2iG+dzNz+pQK/UIss3bQJKFfaaT9eRSRd9F8rVqGUe1X8
-HkXBK/wRlYTvZShLm0JWoOC9IwOHAAGmcbGLTY5RWAGT/AQ3dS8P/ADdSYOvQW1L
-P0qlEuBMZ9bN2cfxBnVKU2BNOwtUWxEMWim4OoMB+kjoJU0Gm+ABWe8eoQCs0pVd
-Q8sMw4aB5WbG8jv5VD1kEBeoouiJAbMEEAEIAB0WIQTHl0kKyT7bAAYVaAr8HBy2
-gHmF5gUCWoWvMwAKCRD8HBy2gHmF5glIC/9Yur1znLxk4DOY85RGA5ObfCl06cR9
-DEQA7gv5t0k++2Vt7e62jsAcHdBZfBVY7atU7SuBvmAyKu+psnyNEFEMxASHDSbe
-q5H5gWKKFck5nTTNuHBp5nPJQxCeX09cMTQR6DUQRuHnAvMXhtH4n3Xgf0Y3OKXV
-pa+eKl14ltWfbYwkNXIQhUe9n6oqsZKuyFv6nXsoDe6ftJHOPjRlc8gg7i2/RHrK
-S+B+jbMZGVU51VI+OcuZvTqAymXydZYnSx2bAR0h18Tax9dphRU231eUn6YQfDlT
-nD08C3mmud9Ps/U8YU4imaSvfFX6Mdd2VgHt2N7a7thiR5MXlY+QBiI2cnQRPQs7
-BTLJQGlY30i1HUI0l/R8mQ+fhmRyN0woK99KvtCGL3QTaDaK4n1L01AQCUJ76Gqa
-L6cjHzQKDh74Z75i0lTAfj8iL0SBkcxY1e6l+clhaU6fUCJgIsKDcbcroO8VRNgY
-JxZXS0pX2mTVODLOpGmI6lqlBCjP1sahTAKJAhwEEAEKAAYFAlp3kAoACgkQBgT0
-kMpAVbwjjQ/8CVTKmyxZZFnm6+hdyUhNGnf45HrEb8BWPQt1e5wE/QImcOQegoD0
-KxqXiLHlW1SEUtw5g8IWpUAJ0qGfj883IB/PZayF7RVNwlOuFTvyTKYSv1U81VtJ
-OTFaCtif2015SWKc2XxZB86Jxs08VXxm4UZ0bm+m+IHybz00EITIXQzECW3ePc0o
-bZYjgciWCFkqCYX9fIzhyaCDfzTJ6/ixMMS+CQYL/qraS9yvZJ8Fz8k6u2yib/N2
-dT+o5Ntz7pxK2Wq2GESbzxrQ2o8W51gKLGHDmR6L0LJmVvAI3xXG1XDwi9Bm+ORW
-T5XtDIKVcOZRPA6SGIvaSg9tzOel/riSrtTLyvdBxc6eUYyfvn6FdY80aRYy79H0
-DMIQI3PsAfgSZRlJFYu+goJhUk0XN9SE/9jjWZfAyYEQNftjagWGbftnKkmGjkWY
-T3VZ7VVba5vepjZSFjTdICVw+4Wu4AAGEYpr0C/KR/6WTbbwuOdOyRSM+pWHI92L
-oUyQ0+sbXUWwXF5LZlMQa3tk9kiQ52b1I8OR01BELUUUMWWJ+NYjCO5+aqkHZ578
-wXE009EyKlp2UFzlEtnINWRQErwWR3buDrsQi1SDlmUApw6cIlC7OpVHXGwKlS9I
-VfRvWIumXiP1kbFNk7UKRCXQrDGCz+7a+Tf8TRaWXDGnYPBMbDxUD4SJAhwEEwEI
-AAYFAlp3NdwACgkQGQ5faz9Xw4RE1BAAh5e8gJn3k3+r0gKbLIIev9VHOXAaIG6d
-ORo1/ka5P1BIj9xiSIxK9r5hT4l/CEJFp67XGEIPVV4+P+QTVQMmYIa6hdecQBr9
-2z/DMWlkhVyoXfbx7VLx3KVQUBR6lCLWSOzIQp+t91hmooOzyUI27t8bnO7bsGcY
-Ce/agafGMXMCy1QTpQ0sowVyQTtj6tb2l/bWcUP89q/lt9yERLBzmtQBXBs+Fbp+
-v2B7uY+TBz6h/62qSJTQKMSQbo5oUffyFAAuYUaGIiJlH3ZCpON1S+7UL7BB7yG7
-wjLP0RsC2NRdhM8Cfs269k84z7zrG6bGXqREHIwvWpk2ipW/BVris5L6fZgSJIFL
-E1O5yU+AnfQbENMMCEeN76K772YGB3fD37UcdyK/axlUnu/kD2h9S2n1KczM+cwo
-gPr5cS/f1ihN06w2Nqp2ctHM/PDMfg/gSCXFnCfdjh81DVy7wzPiJ1sJHmdBacIP
-kx5VCa7WbrwlemHA8q8rawBHg2coqUH8SrXH5TVQ07KUYKFWpAo6RWuW350kGFSk
-OeZn2BOLAgc7JuxRVQvVe1mfFssCCshmCqUiM2BIvGLW0If6ixtz3JeWsLai/YNa
-+Ip2TqNShFqHYHD0k+QdAstilEqFVad0TOcZVyMqbOEAbPkrI1Mo1UL4uWHvsdXZ
-QGPKaPAHsaOJAhwEEwEIAAYFAlp3NhEACgkQBA43GCw0A2KtSg//acXwW2HE1BiX
-9YuoZxTq9ObiHebQTEImc0hkG+nc4wdIUAyUbrrUhm4/Nu5aQhQ4hTV0M6af2nGv
-I+5JGeNbex3DyOh19pZvn2NA29QQfBeQTwb/RIEKOB4whmkoc5x2S4qm9JSxfa9T
-5XJ3L91Q2dP+Lbt460j+mmYnpOxeihVL1JMpabae8CQ2q7a6WQdZUFTFV9rSxavh
-9bhBp59Jas4W2oISQaAIcbhHCVMBpsDqIx7A0SBECl7Yg2O8x/bFQ2Um/jgFODAZ
-/ZCqIoUSQlWsMvq1JEyQW2SP25geFj8IVyKOUD1YnwnV7OE72jqF9BnW7GqkUL8w
-Ch6HV2XvU7bqd1a+aZG53TaBb0kkVnSpAjtbc8dSN0l0O6L5GQ9p3GPcID7gjDol
-YBwn5FWjUwLzayK/2n0tSooAJmgqAIYlHzwalQRYK0vPc2sSN0wdMUvNX1H248B2
-Csa9S8oHIgJdzw2Ku9BOSm+uIroeTJIVhhv84mpWrBk0CzZ69vcmsz7Cd//BPIKR
-wAjlHJep73NwGj1Fd9cFic6+DQX2XxG+0UYb3h5C+ayhNNi87jZrCqHQaWDGpW8L
-ki/uywXt6nhaLB+5d1cAmkEMT+lPoIgZvHak5WIT/4tp2r2QRKCTt9ndvT0tDmHT
-Rhmla2Cw0F+KZ9n/koG2qR2oEAZU9eSJAjIEEgEKAB0WIQQM0RdQQsOLsRDviv7i
-dKn8sKHRggUCWnhO5AAKCRDidKn8sKHRguTXD/iP6sWygyHUt0d15WWO5GTcmiLW
-6rUuf2EmiFusxCm4y621u3VzZvXzdmAlWjjzMHxdZOpQrblk8ZCjRtrSt64p7u9N
-dsGD9fPcIh6R5Zo5fiGMLcq6mQcrIXSKSoLR7PhqhT9f0b9trEzaTvPLAAEz52v7
-QCdAMZqrkcl0T/Z/Y3dM7Dood00YHZH3KUs7J1dgynVQFoRsJmgpMZN5z5PCCeMu
-BtitYfCj3ZjkYH6+2FZ6B09oWKezXeyRzmR47jmH9CAK+D8CpCYmJZfdUL1yEHVp
-h8A4I4dXLnO3htdXNVaJkq/SKE/y5InOLPa4b7Y7SBhOmTaBOYivU6b79pGP4sjt
-+oL3jMSpVcAjzi6nPj6lKjUyaS0A9gbFQfe76T9RU6gUFcR85XCRqKEhqyPI3KgS
-v/oanNj/U0PtgSRmsBvaxc3TRbJ8UIoHOpVh40Xn1Ezkr/uKmYetydWdzq3qTg2p
-am/WxPHJ+U8XRwJe7eHtljfnsYcrRuDUGtmMDipsij6s3gAGn5DhCvIHJdUZ4Xuo
-2xI11bcOnMdC0U5rUVgTSkWYgrtShYHVlpzxh/QvonEBzDWsHogafgAj+A1gkvCU
-qMoxAf3TdVK1KAQVb83PfQXjXnwDIKhlyDNaeXhrXd3zP2YuPymS8cL3HWcUn84t
-tRbizr7ttgzJ9zgXiQIzBBABCAAdFiEE0CwjActbwZLhid9fX1f+weglTlcFAlqT
-IUAACgkQX1f+weglTlffyQ//VYKGp6mEhF2XFuuL4WOflp58ARoMdIqMg9zERs/g
-+GVIe34o0wMs1Belvy1aK/er3iiGSTiiqesF9KvF62Ny59MAY2mg8lfObfkFaEfO
-k3ZypfL10GZZTB3oYHo7fDRQ077sxc0EtjTpJ7+NYsyYFOfgrL5XPdwLDO4jKmq4
-b6LzlO5KATOQZHzW1TXWviQIfp6JokddbaK5gqKvvBtcTsD3ZJ7/G5vJf4JPjpfG
-YRoSzX4K3NXpOFBAx/O3hM8yNhw5IUzy7xb899jy88kOzzi8G1/huhwWmylmzJWk
-2yxx0FAldMlVZ60NklYfqbIxq0J8g6naNKzmhTFvz9oOcigTCewYXijMAZ1XTNb9
-6P8hFoITv8m4R5ZMZUBBJXJ3WOYRFo1whuiiT+Q5x+KPEw1TgcFSbL8ScyubJY7Y
-TnDPuaRxEy0jL3uoeunrWA32oPylPGh3udoKk2+LAjX7qEW4DJZYUs1MMF93PX6d
-EO49WkWy/5sl5JWMGIZl3OjkjRYwhEpWINRB5t+2BPv7QAtlBuJaTKQMb8ccQ7/1
-c5Cm/z8rZkMtAM1THlsv7xSVkIYCZ59FAVvep7WdA5AvkzI4Z3NHTkZ8rckd+1ES
-mGdCpLmA+KENqKdRqrbJpi5wMSLyn2SdWNdrEZcbE5alVlHtUy69+Y4jela/54lq
-37GJAjMEEAEIAB0WIQTVeSxMjG+N6Dd5SdH0g4Cy7I+USQUCWng1XgAKCRD0g4Cy
-7I+USUGMD/4lBqtdYanxWpkQV7wJOcP1lHDhjtF/5RpLgdidqM9PBwQXDWjxWtE+
-1aQnkSrkfdt/lUaEm6wOSzG77e7U36zj6c5BYZefexKtioQ2g4o1rrtjWFlHYM2H
-CVGqBH6KH0q/d1eDEPgFHipgXE34ZASXTBDmZz2vYaiDmAN22zBrjAYkwTpbBSUm
-y72uih19j6EbYsIlXYwsb22CAP40X11sfWUU4en91IDEb95MlMSq/xcQO1swDBSJ
-OFoKjegVr8ZJwFxmsXHvX6kc6ku3ksAtCack8LmxOo5xVjLaT9kgsl8YxWb3bMfS
-zy06kw6OR4yeN4BoNEJw4QGA85i7dx21ZXN+RmBOoQOTBm+lEXTaBq6FXQr5a8tR
-DQDx8LEZpYb78blhi79vw7Xqaxjlv/jAkeCifE2VCczNh0uRvIiHGiUanOu5LcG6
-QO9M47lU0GCXtfQPnI1aWs+jw4ePanFHdE9yQVeT3HsP4NevPWueqnFIyB1eKM93
-lEP6Jh5eCezaM142dTPdDMl/mHhERXHfj119I5M99wxypA42KhRoj/DhCwWJwtrP
-Ek4DqvgMnqpwd7r9Q0RkpqBWxf3Sw8WdWSUW4sK6Y3cbRncmGXE6XM9xZowylDax
-519XxdFQbvP+qTC2vplpf0g6wGxOjkBs0n0NuERAkGkvaZz33sVJ3YkCMwQQAQoA
-HRYhBKKL9Aw+VRNyZi0U90Gq59zKPYNRBQJaf1+SAAoJEEGq59zKPYNRWZgQAItv
-O2VclGLx6KPMpP9ifyNF5PNaOXOVxL7Jd6vGYm1jZID0suCc4vAI6bVV7430EaSl
-BAoF0p+ZYr6C3ygmpH4wuOMFTQW+m0bqhExDImXG6Wp5GMhs7JA/qTb4kdJ6aK66
-lKud1Dwz8A2519jwCJxh/KwXhOaH3i6be52ohXegISLH19hqqTE1TbPvktpvoTnW
-zTO/pdCiWLYnzI+duCudHsvG0zgh+vTGddM2HY1/xgvGwJZBLFlndldpt602rK1n
-BhPLFjP1JVdqxb4I3YdjXdW7pQG/xSHl8X5TwC2DYnUei96+trCkLtx1lz1viuVK
-7+7yhf8Fc3ppwGOkkwz8Rz82bsDuaI4NSUpp5niFrV1X6WRwJWyoAXZUTGErzZt7
-e/OFI9PxXLL9+8gp4SBOotT4awOIn9NAKuTfxFvxDsdVzyIkYLcKPTIbN4zIIX1w
-YJiuzN1WFVJJ6tnRyqEUOncSHB2A//0tMXc2d7nulI3FBj0tJZAnjgV6x7BuLIYm
-pfO3sHBovGy3+rLPrz/VhOOV8dUA9I19NdqPI/jKMzKEWUFAXRn6VInpp75fsFO8
-oaEuEmkHElrt4c0dIxW+NPvAqQbsRE+/dsKVrAyN+Wbxi8uW82ZizEqD0YxRK2nU
-3oqZo9uce0KdjhAF25YEa71/bxvwExH1ztRXuMFhiQIzBBABCgAdFiEE+4rPp4xy
-YInDitAmlgWhCYxjuSoFAlp3Je4ACgkQlgWhCYxjuSpAixAAgYa5Jvnb7Gx7HbK4
-GqB3+Rgts2MyhI6vJDWnwNWNfq5XMCF9AjnN/p52RCeVojCWEGNdXYw2KxlHOu23
-vTplg0cjZU3H7F56aENNgsJC9/t+pDekPBVI3EfbUa0WxRpE6di7wi3/BBSIpDTg
-+UNtGWVNODfE7111kmM/bSDAdcDYMUVp+3+oGthQcObBL5uvopzZnZg4XTs/5e90
-jVKtoKrRO8LqtMJItYINtTQp+uFNoBWiWoAmw9P3ky4z52Bs/UD9+eOroyu3NGIg
-wbS8TbuGB6J/H9g2euy7Rv0RQzCpMS4o+FkL+x7WJuMM6Au1ae7NDkSzLniHiWjl
-enN+Q/gY82mfgXiifBpj7cNirH1kxC4WXXcospzIrasZtHoijlEXrum+XhgQoZeS
-aqofLJOb4gLfdOgc/Sl9pTWVtPCz37JMLmQV1KclyDekEWqMe8+ngmF5t04T51su
-tlC4AA+GeNK0ch/wQhuuRC8mChvp9kEYoPVlrGkhr09D7fh+ezMtqUODbV0dzOBO
-limWwYsl7OFJrY4xk4QzPVyH7x+vk3CB4gvEfv+7tVPziHYIV9cooAs9h9F4xfhd
-rPQDx9eG/39khuK4kLVHG/t/cQTWQzIwr/ad9zUgFOls4O1OnWT5xp9kTf/N+P+C
-cuFW4EVQr4r/W1kPgg+6OjCmSIOJAjMEEgEKAB0WIQQIzZcqlHXc+BJdz764iPux
-USGolQUCWomF9wAKCRC4iPuxUSGolTJeD/49UJevlfAr1oU5i5mgYitmWDVJCvRq
-cCwa4RAUBcTVi2f+PBNt5LfzXeGS/zlx6yLXI4QpSoF8yTi+sWcLbPY5e8TToBLk
-2vzQp+5UHRXqvxGRuz3tWni3MOfqpq9/xFVqNXxWEUDrMh1vCcWVb2FNG5kyrzib
-XQYycX1XnyweL48cbTtW2VTciZFnrtdFYtnlykg8aA9qMzmeyTVc9ZpkWhFqr+4j
-0UK42KQ28uA8VqAhpUph5Sjlp1mrnfHbLAluRbakFl5KtY5TxHIYo6j2JhJ3dVJ0
-RNgWzENHO3hc8mJpoGk5nkdBYMPkprgQYtBw1YT+vaf+3g5/FnkJkz82H6Vkc1xZ
-5o4gBmUGvR1a740+CRJmO1wJ7DcMbVRwD8iVpe0thcqmxde6g8BJVA4r8+12c6FF
-3Z5kIoNN+UtY3PFpWaTzrOVd4fizrBX/1WBZoy+vfiWI2ZgKEZ647qig8P3L0WXT
-yElaNZMzaaOZsEqfihPcMwo9tQqTjMtOEnVlhpitkUdyVGUavlTZOhbezc2hYMQG
-FeS2G+KDDPcL6Vy8sHJ8CMnHSGXkm1CR7FWv+3R2MnFiJKIpwnXCtYYm74jJsn6Z
-yKBf4GYRdrOE7ANqSrfVb6CmGaNkwTRzgKhQz9F2LvakhgJCj9cZTWMo/cPA0Jzo
-vFGauPQWZ1WoU4kCMwQSAQoAHRYhBILRGahAxu/Kb1r5RZ7cyZHZq0V+BQJaeE7G
-AAoJEJ7cyZHZq0V+CHAQAJoENMgQsU60hizvZOJ+M3Y2xLyDvldfUoDzTMZfQ+g3
-UaEFuFKJweUkHk2gzB/gbKyAXy/V5LReH8/qBlEzRh3kx0XFgJhJ7NNgKXWduy6c
-F03HIbcyddAi5X2+zKKZTF0Jnq8b90B9nCvalz9ttE4rFG3+x/fl8kBOYu1ZJeTB
-+YcsmmAnVlZVpN8H6a7j+s52KrmP5IIJnZm4tF2Y+ayLeDNObglNf4un8acs0gGa
-YRvIR5V1OlIwQYgFj9DbstwsRZShCILjN1iERHrGOMYU6rudnKNSDWNJY6hNJG1t
-yww12SCX05kaoOF/CZnmQd3trFfPiTHWYIlGaQZi1LEZhKJIppdzNHLKkQDrdkcq
-lxiwH6iCQGAPF86KqMsGQ6WA+zJHwZxjLbm1EUY1zucS9RgNZqIyDs/EoyjJOpzb
-vDygif26svbpoowaabYfKYpKumGyTWR8UWW9bkLZYTxAM2Sq6PyIAqxFIgq4RkBb
-zY9aKmoSLnim7V+B7IeFhcz3z6DDKECKIw95qGBHnEAifFyi4K6Z3l1MOHS6YyqL
-rRyrU/4NvCQ5F25Q/2h7N2ss82mxOhXDcLg7Y66AplF/cedVghEh17m9uW6XuhE1
-cFj5ssJUZTG69BKw6//biWHbJhD6LSSjN1px8wMaXz/m0aUifm0pAdK2rylq9Hqw
-iQIzBBIBCgAdFiEE5SNfW5QVort2C78YV5HQ+s4K8DwFAlp4aakACgkQV5HQ+s4K
-8DzhYhAAgusTURGOpLdq4IreXKmy6S7pwRn2WwawD6pNvDCSSl0OSxPPNDidCN/z
-1PfwZLPNepAUtWXbVw1r4PZ5wRWaa6YZO6qrXiN9LVZWBX+Kx5/9BBvyLO5hNXW+
-nNlwNxIL1FEv5CaDtzscgbcTt5kLFhQzIzBjnXBrr+nTH34U+qTvfFdqeazFH0Zs
-pt4FCpml/ffCJvAIPzxfyC6IPWAfnKHFKJedjOoRpzgS8zzNbZA+SmJ/wwxwAkuf
-cvwDrVvbd1JwMFWYGudfX+ITIANQSaoCzmhuz2RUXCRkBdQySk4s/N/9VI8Hq1o5
-EDV+Nhh3nSTXPwXfhGMI7jCzBvRUMqFHp1o2N1qcS5RtkKcmE9k/JWnl22OYORU7
-gERex3kcKn4F9hsPCLCpOfjx7EB47L45cLayMeJobJaW3awBqlrFDvEcI4jfehmx
-P9wIaO6RMxRSBXIvO5nLsbZMZ/DbMWw47wF1KZMxhhr8f9MzgrYryclLH43iRENB
-BTpr4bxEbyZs26kb7DUKbOVXVUDHOnvsQWryHm5ucF1INnlcub7DPD/gcCapihae
-RIly0b4osNI3HJMKLJqK8G80Pfu5dK1OntejJQ88jZbfb04sA8RuvndVQGExmPUP
-Kbq5JyaxxB8rswmHLBI/24UQO9qVh4uRWZto8G63Ye4SV3GNBCmJAjMEEwEIAB0W
-IQSchkwh46WcQSN7/2YRr+RkRaeUHwUCWndx1wAKCRARr+RkRaeUH/XkD/9JqsOc
-jOYtAPrZa0HslUxDFvMdA04mvLma39XrZA0jBaunMQDkKKempjhNey/6BnVp6ORr
-gjq8eFSUVo+4Yvfo8VtZGbNZt3ZK+WbdByGl9PBNbOh3CueGTU0sewr78wQV7FP2
-tV868b6bImlnFA+Ug+fIQoWHAs/+P+mRp+pfEp0ZE7ZnaW/oYAY6x7XAzPyDN6un
-HDr/OBa/pSZ7BYSpbyF5CLc59Mf2ouY5baCp2IY64g6g9f3wgC2GCArIVkpnSJC0
-lntuKQciY0RVGINIdNx8CWTa3Abi/y4Kefvh7RgFMwPb3wIWLZGocGFDj8iYYB/g
-6gaJ9oulcQr/c5xSsWPE/UqDlrzCYmc9EnxI0mJOdTUYfeBlMQqA2i1jLiyk8NEx
-D9Rr/W5pZYIIYbhEyVyI+TlpF7I+a+o/h5yvR57okR3z8h8xsu0TZzm1xr70jz+A
-jDvhSAu8hn08skMaotjhE5c+FbnbaFo0dkB5CDVCwOcqpdtml9YTvkXThRLULKm5
-GRy2C1vGYM5Q65bh8igxSaZPbXQIT6I750D2wxAquEgS5AIECLGlcbQCEYTNW6EE
-FHGpGpT9eVas3VcPSDMsgWPppkxOdqQ4Sn+yH9JrGyzwZU6P7oO2C4+8IAM8SFSI
-ncbsV62OgN8tqIvN+b9cxG0zDNE1rR0+WbJnEYkCMwQTAQgAHRYhBMgK8tHETBQ6
-I/Zv2cr6XT10/wJpBQJad3VRAAoJEMr6XT10/wJpud8P/0U/+THADpmmFJVWTXBN
-FKm7iorvD/cu2nOwXenCBCMeXg70cZ6eHvuD0D3iDZocT4XlEVvGGnq+PnRKvurE
-My8RQRAKJr8Xe0qykiEdMIJmm5PGLH9ngc06vhk5gnrX+8BtU1VyJO389CUZwdIE
-xChTH/3Rt3/mbnnJdHh0n4131Xe6L3TOe2nWLEVW8itgwnUXg3WjAsF86iPGRU78
-0JKUNum8PAFF2a7og1EtYkULQbkcJpORYFdq+oOEkQYTcYhyDTvpkavFqtgNaF5l
-MiWcpuUBUCCQ8vSH8N6yivmrklazc+VdKLVXVg6Hyn2ULTZpTi9sVo1CyYh9Qc+W
-7mOFhA0D2EoTvbUeo+yUBMmTQeEuo6joKbxZFIOWdMSIiHaZdQvO0t1o3Cq4H9we
-fMciUQYps5JCzIRbb/ktLXn3m3c1LBI6EDf8s7abSVUnpRqJFBSJ1TCbBFZZbPFD
-CrSDT8wNWDh44ly/8/thDoNyGkgLumm8b35vLzFUPeox7hI3ePUkxPzwALRLhFNy
-B1h0Mf6s8+dnDScJwrP+Y7Ob8zTboWKqHha3Fy6n0LYgxqfq85het1zpcZMQNvrp
-TTga5rbMuRtML1rHN0RIPY7iGbpq9QqL7MSMLa4J6DwTW8K2kHp76KDk5nN8Hn3n
-NCFFV3EPjAsmOapJs99nVX8TiQIzBBABCAAdFiEEd92hto0EeSqPhdhVI15cjPXo
-3/sFAlp4YZ4ACgkQI15cjPXo3/smiw//eUa0/oxNYYP1iXnKx90eCutet3TjmVhA
-lD9RH32X89YmHmnGUrKc6auo1nlxRy07pv4RYvdpB2bcNBjLt1Q9u4//+NLbAz52
-zYjtRYDvVBWYQQ1F+4ybniNhXTkxjqixK6CDAE3F1NW0zLvBfiHY3Drm59N5lSB5
-o1sTgIs5uaNgnkfCPeqlFXaLMB4dJXdAOR+fJ1zlZcoPJ2BIlr6HsDEsBvUb0PNl
-xUKFJAtTDXTI2VoLaEhhFT1RDTP6gfSv6oGAVk1i0kzEhIhp0Fxw71n41M1gGwKC
-uUBzROQxLikHRpTm60oQTZXpfc6HdybnumRZ0toqnI5/8efBRD4TXwc+WSVceJgz
-cpHRazNZAcyAJenbp5YAol4sa3Y5xakSwJ/yTbq/YPHg7uFrsc6UqOzljZTxyLq4
-60c7ovPY5m356B2k18A8YwMLLYIW46yDWL9hLX6V097Y632iR9TKeJFe8JRuAxRd
-lkUXfZtkzU4znuSjJzJzwrWt9HpyGjUXVabpFnLCSTlBIao8ZEhvYIYLXDD2R5N/
-SfEbxrS0jmAhlhhDSYLClTQQaxfzHRKCY7AsCK3EaUqU2MRTCcdXSn2AT0OZY1MK
-7sA8A2bvl3ZZEOwGGIs7DOJ47ljk3diPJ+BFYhRW6HCrZKhrcy2ygYaoLFxwUL4/
-IFu3VOaOHSyJATMEEAEIAB0WIQRBEARe56Qy1nr6yMhUA8VGSBC8JgUCWnhcpwAK
-CRBUA8VGSBC8JolCB/9qFOpUz9D9w8bbdwvMHLQBfnlMYSac0mXu3VdzlYKASbQi
-bImAZ0lT9qFpT5tZxrR/I6BIu/8jKUDTCg7FbFXmaufz+qhWSH1kmyJt2ZlS+Mq1
-MHa7mKhhboKtT4QtFdaaTsdq2jT8rGlfPht6i372U0h8pWYZOE/xgEdsxVC3g7ai
-yZaz23dHh4m4ipBQW4FPB9JJpeIWjI7L2rEhbmyFeEIKxNsbM+7bfGT87ryqHohg
-0l5WWF63nfsy2BIB10ZYGqtbp5A4aeRlLq52qY2ucxGswGJwdORN45CpM4vftoFA
-iOzlqO1q56T4Rx91dxmb5UaHR37Iz4IkicVFjEzpiQIcBBIBCAAGBQJaeKWPAAoJ
-EA84YoTAOhFibL4P/1eO32c64lvZHh+iLY4hm7Q8K6FqkSkEZV8kdmXEL1xwZ+4Z
-Vo5GcIXxfY7Jq9vUmZFqNZrHbsAPR3sHiiWeFUL8jPhGCPi20TUEK+LHkR7VYjfS
-eOciqjGQouolPyc0nOL0hXBQT8UFIHl4iBCIVFtplZyDZTYnR7kl6yRBrS3upojT
-a61Pfxqbu0Zp5iiUFK58QrerdG6M4Z6/QNzmL1t+7O7NAh2q8qOjStSq1Y3QTYe4
-Xsk7Nootcki74OQzgc+BeckI8EbJS5p8cmJq+Ld26AUNpzdAKq/nkwwCf+k9HblD
-axny+A2ByXyNgbcsbPmPx7Ze8jIkI6wrk+134Grpg1zGNCbg5VT4StU2uqQuqpCC
-fBeiTn9YLkVJx9Gi787nOQvv4Buc69rJTcMY24sQcUpYtdIb7y77AZJlnPLz+C2k
-5/2LbVWMQqOYF4sA+D7YHne+PyWoqBkSvBpbh+eMB/gUtcp8DWNqpdAxGdWwukIg
-jrlYRX4t9bgXX4BL05HRK5yCqvKc8K4SIyWjp4qJhmpb4g8cGa9nAsf2Niweq50j
-2KEx4QpAdwq+PxzXJMD+YHVDk1IDxizS3AmvCPPDFKVM2AfOFX332X7BOQwBcgor
-GfaXSYO4TbSk7M/Kl9T8IQS0nFy+nb/T/mqdzED8c/iLPSTcJ7M+wZncRFNUiQIz
-BBABCAAdFiEExoB7V2ZdP0Ia+gPaP34ZKxNJtIQFAlp4pZgACgkQP34ZKxNJtITJ
-dg//eWUcI7ZqxX5cv/rTqLta4znx7yWI2/F/8UZlkQebDtJPcgAJZt6GQF7T4ZZm
-N/pktUtc3b4uQAGXyIIl1r1dvo4HgwbmRQdWfIcfxJx2FMhdHoaumfrtoUTc5yiC
-VKaL6bdZ6UiDVE9S+B8x09eGTIH/gZVAOrjMcplQdPgomYQao59DT/73+lFLfju8
-p9hWdFIuNQ3B5CNHXytDyrlF3kqe4fbiT5/t6tTqa22de3qJixsKaD/COnHp+Gz7
-9HagJzms3gbJPwRnAhtQJKkMqlxcPVhTQArcxu8vVNMnc0olzKWWqVaXkafvBRzE
-BIn7aZ3yvswRsHOuW/efEHf2IuWCEWqdqhxeJhZLq7HEZCdgJ2P5rBcysT+QPV0o
-+IvR4w9pMOOreIZueKck5eRK7KXrCqc0CYqNa5Wf3yLHxZSs1TgbzNDIoYx8FJkO
-Bq/IzWVX1jPpwn/uT2GGKpt7Z3Fj08f7kcHL2DD1qwlqvA+t6Ff43/1pAUyhRseE
-X4fBIQe7RT+0b3s1tlEjJ6X4YhBiZNLHqKrgju7IFI12WCd7D+qlfCDi9Rnxl8wr
-Gu/TYhm+YIn8oIV6g9Y5P8NV/3jSPfei02mTXQHqlyWt9PhzXNDoiBGHa22oA5+E
-Pf91PhlXPgvp21E0xSs9XEnCyCurmUCjkod0c1kQpiyFFCOIlAQTFgoAPBYhBGw0
-WO5zfOIsDvn6O+iP674gLOWZBQJaeYeJHhpodHRwOi8vd3d3LmdvdGhnb29zZS5u
-ZXQvcGdwLwAKCRDoj+u+ICzlmY8HAQD4xrzhPMIxK704cp4+nde4lPG/BDsrnbhS
-KKwJXdEAhAD/cFnw8XB191yuhmTzyb++pRAsXsNp0pLnpobHXKQo/QOIfAQTEQoA
-PBYhBAE42pLt/7J90nD4bbR14ge6tYIpBQJaeYeiHhpodHRwOi8vd3d3LmdvdGhn
-b29zZS5uZXQvcGdwLwAKCRC0deIHurWCKfsYAJwKNWdfx0KBHZsZLV7u1/Pft55F
-0ACg4KofZuunLyWY1hX2xzO54V0aNymIfAQTEQoAPBYhBFP8Wocnvh0w/rSGGpSP
-1qDhD1AuBQJaeYe7HhpodHRwOi8vd3d3LmdvdGhnb29zZS5uZXQvcGdwLwAKCRCU
-j9ag4Q9QLl3+AKC+5J3VVl76N+Z0zo3adltyinzzAACg+SIHGl+YKTQiAwejL+fO
-2QODo1CJAlIEEwEKADwWIQRp4e4H96aqjkp3eyp6BoVCHomQQgUCWnmH1x4aaHR0
-cDovL3d3dy5nb3RoZ29vc2UubmV0L3BncC8ACgkQegaFQh6JkEIuXw/7BCd9mFIz
-PXdcDuFBaPD2A6E/mUZmTgr22elaOKH7bqUvNhoS9GxeR/JbBmdM+Z15dMGpaV2j
-PswbO6UZwK7jYzhcmn9HV5bb/Hl+M11ETNhVQtfzGSWYmdUR25YoQieRCBH8Igju
-lVQlg4WeRSBXfHO+m6J99ZbaRL6oNVGjTDGhkhudEM15VLWG8u4griioSYQjCVki
-KMc7YWn3H9HBacbeFAxqC5/R3SEHsT5Y00pCmDvBkrq8tCHvOt4Cei+H7zXX1oFh
-pCJMeAbbhMewkL+VRHJu1e5Gig262P0HcqX1CxBTMkh7IYzps76tJL82uPuH9Fay
-yVqNVxMPXTAkAd6px6jZzCrqV2lE6Ci/tnFAzWDu8vEO28JJ1SdaqlwHdQPJXAh5
-qZ9MEvZmupr3tukaME8pi6T/RbWzOo2WzBJCS3SKyQJr6jsk71QyQ+mMQeEzsGzF
-3SDolNCfh1zknHg/RIhkIM7kXMO8C0FRggL06qeiPy4fH8xdXGsvSeTOdn+2PfU/
-iUAJiAMhuDuFVyM4Eczx7qSVMQBI6XG4SUwLlS8tiVW77IXZx+96810xYyXsQIKm
-rA58jU17gfbyeNqPnVJIG3Dkp6F+n0IxnEswPADQVtlQ82PdYLFb4dd8PXH5Dtlu
-baMyp2rYJDWHQxb49+hznCa3jWVkatjTWQiJAjMEEAEKAB0WIQQGODJB6nBre8nM
-O5coCjq342B4KwUCWnmPywAKCRAoCjq342B4K/reEACBNWDr3hn2dph8MVHiFLeN
-UCfLCSjPZ4aCbPnj7BDsPAcgrB8a5DOrO5g5Q07z/P51mFWFJbOxeaWk8Yo5S0dG
-fJYdzuBAFJAqG7pUZoj/OzmMz69SzNXz3K5H7/+UFPGyBenerIC4+pwq/uMMJYSY
-uWsEAqBlIxiiSw/DIsbOBOOJLEEsWchhlgYC9IW13nytxkudINa/5/Am9aZjtDhQ
-gV1Lr7mDgWw8nKnRdR8fANfJ5jG7ZAbyL2WFsPonTht5/MHq/mAsFWHGehM/wOmS
-bVDr2pwwqlgla0HD3zg+i2/rJhZA2Z31M0QSbhIZ4LY/GbODpLa5C9n2Owcn0BFs
-vXDvrf5loCzXNbPDpGfNqkcag7t6GnlO+9ZP+fhrvX+60C4W9FgwVUuoVLZ3WmG2
-N68QCCukxXAz3rGltfOxQfboze3Kg6vpRydHw+uRNXzEJdYyvTFpL3cYRwO6IdzB
-K5LU/lyJWwSRdtgDMYL0ayTSGJC3rM8M7MN5V15m8OH0m7YakF8p9rDlxDSPUV88
-miKoOfdv5ZPIH9xc7zGw8NSJohDTqfg7A3jvQPR/L/6NAeRff1W6tvSG7r6/XuK8
-g6GsYVBUdxHG8+dzXoMftb6D9q7oxrOQ9kivLPDht/vaLHSBI2bPQDfS15BU6c0D
-r8fyc70mjqbvzp6YuQh9RIkBMwQQAQgAHRYhBPn6jjjKnuCqPlBavpULDuE4JW54
-BQJaeaC1AAoJEJULDuE4JW54ODAIAJ8Z0QkwUgEup7SmVgKD+RtzvhX6PiZKjCF8
-VWs0YCBl6p7YVneMen6Q7+YtLvJxlHAEhbTdBtmIrmltXzBW0v6jU+tu8KLTlQtT
-x1RzVsixDhV3GLWQvrRzQyloyxvw6kou+1MdhUR8L0lW7gOxJtLvoq6JW2W2NRFh
-rpuHr+do+V9fIbSo7il0rGervafVbUgyTqmkzGW/AA4sYckMRiPtZuJzRIDbECF8
-BnmG8PWE0IYP43sdU5K6i1oBzJgAcJXlFmBk9OHyLFtGmGuHiCZHIQJYgS5gTk3x
-GQEBVz+SHQBooVWGiNJ7B2xcneFx8HDlTdd1NBhKOpIcEA5ZIKaJAhwEEgEKAAYF
-Alp5r0QACgkQoWISEYrLTMXrbQ/+PDcnLXQj4xAiGa66G8ee2KdRVip2fCDPDb7s
-n3nQus+lopGyNjEk9zvkvLrmkFf0mNxMyLqf6oPurRqotT+NmLfxrkch6fnw0vpX
-5Kk94H6C8kulY8FYz9+GfTRxQdi1g8PrcBchMjFFN9irIg9HSCu2U7+AdMGQKVb/
-t/P2R+ki66GjmbtML34CSLFNirwSjRz5Ymxqw6hUSmgIZJQS30yRMZ3mE6Vojfoi
-hanecvrirhHd5e/HRiednrQrWinMbnu07ewy390BzCD+l4mxQbkOg90wRcDzrcDc
-SL1JBFZTlUgsNG18BSxeoXsIvbGGopsnotsF1e5fdrNTtKr26PIblLXx5BpzVvY3
-QZop/07eUkX8D26JnEDwc97ThWt4QjySBGMA827eM2uhHcLlQvxNUnTQASfizZ8O
-xR7zKgp33o2fzKFSOMPkmA8ucrbYs3rGPPJ0HVEL4PzZyox/oYTaV2wVvj5BbwqP
-LGPmUm1Ck8MfSI5c//eKztJfFdqJGJo+dkzHOivY3KPNL360BhJrSJ7dXMIANLc0
-iO/OPShZXUZ7m+rapKr9pzWkkwBB2PiN6P8bWTEH9WPrC+t0eXsBYUPVWr4VSCpJ
-klOiq1CeohWdcHgi6Wg4sIVj4SbcAJrUi6xbgRY0a8X6xMBbKDXtrHvIAZgddqDr
-BfzCAhmJAjMEEAEIAB0WIQRyeg1N257Z9gOb7O+Ef143kM4JdwUCWnm8IAAKCRCE
-f143kM4Jd6YcEAC6l5yqPjMYAKDfYJTaCXN93tJUjsJzr3Gq7jq6hp2U7wsh+7Zb
-6ty29Rzm6Jjw7o3K/3TW++ksReaE53fCCVlMhTgH3RsaEL2B4T5W+M+2LtmrHgy4
-Ntyoww9Hyv48Sr/OmRn59yGZulGtMbGImXmR/QeD5qPh8K61dg6hT2Py76B8oEcM
-/2s/uTYg2hW6Na5du69Dg1BuIw0B5247usHN59Y4r/U7pg4ROl01u5m73OGoQpHF
-bk4k62/HBS1u0vrq7IlEqiSGpIUOP3WkxghzIFaaQLSptNnRdo05qjq0MGpJNGnu
-mYQ8WF5PkDvfBVInEHStrTGYR0I/XstAoSvWZOVe5lXztCzOs71ZksRYEVCaEFus
-Vt2nBXBAhaEaPgZz1s5F6KWhy5ZjSzq3N8U7A30p5HeQuml9tV1FNpRfxoeeU4YY
-OJmmjC2jHBuMxWxkTMrvZZS6LzumItAO6QzO93mgnuCxxdFMJ9cQJOLRex2jBMiE
-9h2KEjy9Zlfj6Mm3Lut2q21g1C2KL+e4CuV+RcQsEtquyDC86DOYSuGwyCUYV9AY
-ib7TSdVr+eOAyKG2bVSqyyDpE/lpH4yFUMsecXER1MSWeY8ovTQSRxbx8xax6izS
-A965qhf2ks3kcTWiyEXofIs12CzeKfd9EFkwgEhXyshGtGJ547jjbLEra4kCHAQS
-AQoABgUCWnnCTgAKCRBOpWj8PWrRU+CjD/0UZt+M7LJC8Ck5jXiwRPTaxDEndeDw
-7S5ew9Sjk+qOPYDLtUa+1e/HiXH2Thfhi6tyP/IFiNuwua1ncsArUAtwtj6+UDa9
-PF0YA/nMgU5NTo3Cvc1nMAtuCBrQvsLn2Te0Rq1VrSB9DR5cY59Sy8xqAhdMLIw3
-jBCe2w1cdUVfCqB8cE60sacE2QG2PfIoqi6IsOzEzSi5gskcJINNONjmRNNhKx53
-hJZJ3zqIRclcpZFUIj5bx26kNL6oVL1Fy92gkqAnHqA4pVNH+wayEm4NYe8qtkux
-yBBNV5L6JLbgO7fISGoCKttz9NjP+m1vcAWeE3cG48Aj7mgPYjdTpw3nFi5oJr1x
-RLrfckGA/YeGH5wRHJNHE842VbG2bNQ0rJpWIbcqyjK6m7cG3cK9qWbnNJebMtqE
-BONspCD8kxmiTFZzaKjoI8lnqs6d6AmxqRKNKanOiryY5kcNQC/hz+tu10TjwqsO
-KOPczlWRFvpRh0HjLLvL91P+0F4lO5onWBVI7KDqg0QBULMu9AYHJeX0MM45owVa
-3wS7+PFrd/oxICo7YA3efTSiosFIq8Dr/E+fJHlmNvwd4kHlxEX8IxbgAz4+LxVP
-vxwHZh0amtL7zKf823uQkKoaKs34DfjMKJqWwAjE8B03nnV/+OWFJXoKBpCqYGVh
-yxm3kCyG0KtA0IkCMwQQAQoAHRYhBHf0Kno0Qe5RL9CF55Bc8sQqQGZNBQJaegG8
-AAoJEJBc8sQqQGZNV74P/Rj+EGCgEyO+UDfTsLeqk/NC29/aDfxyIX8MLl12W/ND
-51c87hzJ1+IRG3Vxw60jNjNFgnfLiBoxKWPm2uk0CWIkb2qY2XCfoGEC5fqwlMFH
-zfcQhDXwm99HitO8jv13IaTyglC01+YeXd9fjmKgTClQjzIOPUTLicDdzg0Aj6LT
-VpD1woHizFslaQpsGBuEy21ihN77kOucmeeetQiVjT6ywyMsE0hAcdpa1yWBHF0o
-IB73TeTHBP+D8P9jeKuGhg+pnhz/sIaRFnv+/yX9Ng09ea/ObAxPFUHVUXZ8/DB+
-7M5dd6eF9HIbxmjqL+x1TZonigsKnaBVnp7yO1XfU4m/6LYFLYoxFwmXGiSlTUHO
-w23ikH3V5d3WsMIrJARC994sZQ784FG02zQN/LSCEtqQiiul+bwfpvcZ55Z2HH+o
-K36IaPpVjcv3zLY+oYmwn3NBD+rbmlRzEk2ULship1V58VfZUzZ7zZ0tVnzghBA4
-po3a8yT/0B5juonfX2eWNMN7ZheEtjKBUHW6ABYUCFEpKGekhdCZB3flZ4b+e9mr
-4rM4ksZTW4Rp7M67ulAgFu1PPLvgJSy8+0nAn5MJV7zo1M4QlPsEb+h4c32iEtKV
-8qaoazkzOizqcqTmxmrGkB63XfzFRqoYFAS5uVJ2dvop6vxjn5SU7Ia2g6eFupHK
-iQIzBBABCAAdFiEEhOckMqWxbpwazo0kHbl3zc8GZQ8FAlp6CCIACgkQHbl3zc8G
-ZQ8E7RAAuBe0ugMEyerve0PDPqwsWjg66cAAmlChDlSPbO0yfSeyMsKcFfEZcizZ
-xifumD5XBdEuOAKStJKwVxuYAIYV53is8gdRt1UYcsD2cCJJK+m1UZKlzz0f+mpD
-d1lXtba+9VRRdO2WtBBSAkxf35gg5cfFPjwgXfSxpKWjTGyXfcidv2jkvNCogAjG
-5y+B7PbQndqXfkS00pqwXwlbY6YCgNtjn6QuIn9D0VZDhvaxBbEd6smZIOBkcR+t
-WqnmgnCbfi/mvHYrZ5rev7fkgQ+YhUcApX81+gmK11dtlwNvmvYByXa+5uZcGDmd
-OYXB4xjNdIYaFsO0bwlyzgV08zm4KHVWCX6w7HKqYMI2h8urthopQW7l4O2V8o8d
-32bhAr+G43G3tdT6l4+K9WyjBmH5Y19ujU5FsT17KaS+L1DXQ3LO15gfvcDRnDOq
-9i/mNYSzXhEGZItKDMeVMv6apYggRHFhco+bAJrAi4aoAhV0eGemXAMJkMwh2bS8
-WHtcBpIChMSgENAewbIwtQbwgae+SVQGewSyWcrI90AtY8pi8mVDHUu2CVXt0cLZ
-FnEmVyAGr+Lvx1Z21x10bt1yFzrXA7txQhBhXKtOKbFyi3H/71fglEbBnl7F3NdL
-F422aHOYMAGFVwTRrrgxvtOF9GfQPVGG22HzMMFYtprtHQf1QnSJAjMEEwEIAB0W
-IQTPmxQIR1CRbE2Pysw55F+2AUEx5AUCWnobhwAKCRA55F+2AUEx5M8/D/9962b9
-HvQjAS8Kyh1W4WVQ0g24QyeZrdfz1LTV0hRroJeeGAxNR1Q8lc0QmM7ZQ+lVFtU3
-cc239glMXD64xnoFQ4ULoDUeDH/PKJ8u4DDIc+nRjP0VD/ZVzlUgZd9LnNb9OCnV
-qsno2FkPHROmXZQVBxN624K9pAWKZFwV6uEgyiWxEuMlDQe1ejXWR3xtPC9xct89
-8yfcGDQaB6T1IEJyMxJm0EV37gsiJZJg7cPxRVbgGXFPxYg7IL7PKlUW5rAqktLe
-Dw/rm3UMouhg/Xkv6jk4uXjNRk1FLXRUbrw5cJDM36JQ3V6HpuFOMbbuDuckTKTz
-G58NWeECAF/xevj0PJCxkMgi/STr8LPNALtM20PsRpFUIqoziRTY6W6l3i9B+5ea
-KzoDr0nIN87H8oWcw4ViJEPhGu0CWuclvNYlrWxxgbZj3+fwehwxRt7WDM0h7tXM
-2Cjnv6OFZEDAZaDFGSuJIq4zxojAV9StuKgKEiEq91H4WtDoicDbfT7at+bNm2PK
-EAOZToOeYmvBg3VLFCd7bw4FGABkzFF4C1mrYRLUj/B656gWmvS1SVr15bUFosv1
-whD3rT9Sxdcc4WfE8oG2H1ferg7Y4/4rfj2s9SurFWm41V7RLCbc/3Kfii2Svm59
-06KMdbJu2TNJlnCoDwbMTMMd3fmRQPruiY5ZNIkCMwQQAQoAHRYhBBvYhvJG/UkI
-edThUFoJtFdt6AgOBQJaeh17AAoJEFoJtFdt6AgOC00QAI9hD2+/M4XOKRe2S8Um
-voqD86LlW7KEhBg69Jh1dJfrA0AbxWiY46tnJUX8Xf42dD58FYU5a0HNm8KaU9Kv
-Z+1g1deaJu1X/bHbeeBGNSciUenqQFv9AMgq7E+f7DSf9sqFHzK8/ahBtuIBPGqS
-JNZ8+KI/8JNMZkPwz44uTZIZ/nqrU5zPjzOQ6kAxHe3wf5ByRX+cr7sTdwNvIX/F
-iAQ5wONzFg8aFmZDPN195XStdpypBTgsJ7j3iiu1nvHKDwW4TimkDwIAPXn5f0uK
-iyd9tds2Wb3V44UeRSgmYQUGWDU4SrBCoNJiWXYrsJ7L2FVg9iFVXPNADerA0pEf
-9xvuximPPnuxI9RAxNrEHbUu/ry3hAE08HzZfxMf/Xuwy8Cy3P6OSgXDHO2uU73C
-AijMy7VrhDTSSedzQRbQAIZNwItKzYD7udqctVgXOkPHOGI6d3uYFiAdm6yCBPhF
-w1gq5+ujyzXmrpf/2ionK9p6eLftb5md84JYLKU4xOpO3pwKrCYhh1xoKX9UkRJU
-76Udd1KqYtjDWztgch+1/mg6UMy1ToeO5k7CaXWFT/2Z/gR0whN63n8taCii2iLl
-jUKIuqxSUN0MJqnw/RzbvvPqut6ywVfKPOg3Q0ZS2w0bUrJ5d2BAJbDZtvgkMnz9
-gY89V4AiPWriZh+12Xs8WkYxiQEzBBABCAAdFiEEPvP9HACZqoFWNHelOHetBdFY
-LNsFAlp6NaYACgkQOHetBdFYLNsZcgf9GcVPgN5MXsxDLbX5kmeQI76F3XB50Mir
-l+sk7c50Pv3JlLAFGS7wS/rbHuiEx18XunzfbD5mjTaApRGgZLxKT4vikVH8m8Cv
-jFsJIhxD37MENYqCbhyskRZlAEl3x2FeMV/z8oovZahebwQSO4V4qKDiiBS8kaSr
-UQjeroRmRDAORp+aXwP8b79oq1UgIDhCQXm8qaJf6boWQdghi1tviaTp8d0KL57o
-maabo8g0W9Z/ns4H2Xj+H4UQhhlGl7eju4/8JMmukzQ1Xudn5RsSuBKOZdAaQ+3g
-tw774QIJECVH6jbmAOrks3mXd7Lnjll3KSUUIlzevEQ6wnWCVWNfzYkBHAQQAQgA
-BgUCWnpmjAAKCRDPEQnqapW2GM7tB/9Oq/kfk188KiTudBon7ca47S0JGdnE57OK
-VdP0Ss1NWRiKh60kUjPFv4EfQXi1WQ6F2uVCjGwqzP5t5qjFXZNlGxyh7f1sPxzP
-vtQXlEqcvClosJ0TUL47s5PXqJo3OY34VElPGfbOwYB6vJJpVNa9/dTAskZh3r7F
-CpLAdn22p/2yVihQCCfUVz8O5sdgcN9gtcUK4/nufqck3/h7zTd8XKxd/c2HoXvj
-DeuLIosnM40IPJzAsNl5ZqvWGQC9NXf4H3SZ1Z5UexxXNY1kndkU4TNGlNNk6Vgv
-OGNbn6udiRLrGw8eGTX2hJ2JAgnZY65OwfDXrDvVu77mYzo2N98WiF0EEBECAB0W
-IQTUpSPQe+p0u9IYREdomIIsyPJS+wUCWnm/tgAKCRBomIIsyPJS+55HAJ9t0K+S
-Dull9bT//l+3BOfApaTZ4QCfaDMkFwvH9dWgj4pBMqw4BgFIOEmJAjMEEAEIAB0W
-IQQWUV0e1Yq8sDbDH1mDsLjGy9px8AUCWnm/xAAKCRCDsLjGy9px8F2EEACbAMAH
-JJSzgZ+byA1MnjsGjCzpnqomTjVP1Vjb+tcYz5/y9/sqaY2Wuvs6+WQxL99hAiO/
-oZSg3NJ+xR3MCrArLqvaqQcIUbocCjwYzeNxcNP4Z+969nQVDLuHeUe4ywX4a14o
-lNfguJaIazfcA21CREMDn/dcooiGO1DKxxsK0h+TgLBdWuGa+e6FzL73UcYX6sIX
-92TcwMFAUTbIMyhLeC0w2yKWmzM41XBeKQKVxpJqYDsOqZRNNpnvT4el9vykO8Mm
-2YsHkzz3z2m1sn+ZcbaynqVtTQ8AGdXwtP5NU6IYBdXJikbzHSqxH5WkwWSSs0OG
-seHgJiS5xaux0pXRg5xO6GmVQIoAbEXwMXoVX5IwyUjE5lVGt3Nn24pUUi5sRi2Z
-dFOHltjazEAFuG1Mn5wXt/s8MSNnpR1qu6jsRH24o2RWqULhHASjCfmy/tAePAbt
-saCifF5OnblxX6tDe+Xbnix/OJyN8KA8B5wcBk22Vc6nJzARC+6XeAewztS7pdyB
-3+KxKr4OzGRh+W4+6Fgkom79X8vzON0DhXAiD8HYuz7p3Sf7wuUe9XwK8QDQHZPL
-Vxnd0xmBY8SHqXRNXB+I9BdK9ViAUIe0XFezTuY9BJgO0CPOr99f9rs8V95WPJ5y
-qBALiuhVVp//HD9XgruyEcENykRlbsT4opeui4h1BBAWCAAdFiEEJVUridM6pvaC
-MB6CrjrkVkIlUZoFAlp5v8oACgkQrjrkVkIlUZoG6AD/UDcIxeWae2qJ+CCz33UA
-yaVkhAp6fwu8LrylnT9+ziwA/1X+wGX+T1kqvyj7PnMaU+3esb6/gbNbTNi69PwA
-3Z0LiQIzBBMBCAAdFiEETAtJBwsUA1oOD4UVjZ578ny8KqEFAlp7EN4ACgkQjZ57
-8ny8KqG4FBAAjr7o7EuyHtG4Rc3xDdZU0hZpd2rUFyxKj6cH0p/0+RdIrXmePAy/
-rvMGh78cEh2B4bkKG0IYjXAb4gkFJNZFol4/rAWDrtoqyceqC4i3m+5EjUopS2ae
-/hzQEGyCUruZOJeOilDDMd+CffmG/22H7DpAVaq3FG9E3mid5Ul3LvTS00SPfa/D
-Pg7XxzQZN13ucVmoRmI5wUnLq546eZXodHVqYFyVs5PsnKwlR97cwUJKGZD9lQlW
-Qhd/S37uNvgk5C0nrwWPTWaAX6qNubQdxHcz1TJitdHBhBI6UDNHCFOHCJSywVBb
-mG54NbDEWiaULE5+4IgOhwzSmMPKvIoCusfpBwc4n44TmwitnNWCO/Ht5ckYnfp4
-vvQnPjgcnFH+qrGngNBBBPTNGQaes/SGVsU7Uvdcq8yGBUZ8wvbJBHaSp4fMKKTT
-KIo9m51Fj/gcACHEzjAwollEKBn760xaP3gwTHFPDW7OgKUdfNFrbSIZ11iBVbcC
-8geAYtBCbw5LbaeXMZzNKvQK8WoDFC68QCeVZGKlhrp31qGth8SjH50ZPdJDUELl
-BL70JPXw/vYEQ5owjBphjey4mRzkn/cRPwdlzthw+IEBx10F+z2nM6uIG+GhwhAl
-AiKPzYnBvrCIomwiWUZaKarGKVcVyZZ/U5itYZYof+pMGJqIRBA48DqJAjMEEgEK
-AB0WIQS1+u9MGDA3Fdz6B01YUrlJPrKU4AUCWnsetQAKCRBYUrlJPrKU4AHpD/9s
-ZGfjZaEoUVKSYhGWkRn2rPsKVjatjMO85sC/NuoG3riTx99H2jf6mmd2+Z0wvZvO
-pnkvvtihITrKDV+bYXq4nZutuolOdhpw5GpLWh3pWIppbw4mzYXg7aIErN4XQEWT
-7ve+VKFuDRkmQhd4GhbuklXxWVnfm+ndVCDAP8kJuBi4lQ4h50kILIvyNLzLmBqx
-8Uhmy8EANp0Av2ZtgRtBFMjQS8UHE0yvK0fJR5gvNt/fWjBSw+gcH7UhXXsh5FKh
-jbSXHm0j3qHAXDBrnuVAelVPzonarQ7uaJzytegoH5MPBJqN4uJKgswFNj51l/Kj
-B1momINMPUt0Va4p3veZGSwvbU9ccxDe414V3V9XRuNoNnRuTuIoVIEOGhr/yhCE
-kYFznPSUrw1iCpXQQTG+Pd/C7tpKCG67r263wBjgbGtOTAf5Gp23zUqW4lLIcTXU
-0YtdHiiRR8xGvzQDQNgdqIyNAtuL+9pg4QjVYt0jBY0v7bod18AYq3nwDApylTQI
-MdnnKjpcz4dBhoSBm6nsJel93Zc+oA7w72gg7LOXHNoqZNhxT6AQK80UZANxK+0G
-Dew2sOGIpyeUtBUJd5EJlENA5gkCnZ7d4pHDEpnH8Om4S1+Acx4tyo9mRRBlSu2x
-lzCcfDbn7kDNv90BUhCAQ16HDRIsf0ez2PpaLs8dcokCMwQQAQoAHRYhBIRnU8sZ
-ITFCxW3JGPXIPAXZzu7uBQJaexovAAoJEPXIPAXZzu7u7AAP/1JWkUGrsIAqb7nw
-4Ymv9mlAeuLMRz6yRNCorrTi4pSZ+LxTJ0bXnT2TrWo69uccVlxOHtnwEYRunbPr
-EBDF+5aSURIssW18P4DYE9UV0I+fVvXW7Dxysu8bRU0xnYL2/sn3Y0U4BcFjQzgQ
-XUJEUUsM3LEJSUwTHx/kePIbJSLVE6XhIBmQO9FtSBpe4vKn0xVK1xYsWf21dfgf
-x4/mg87xZg9Sa04jnm18xbnA296k6AvtjFjblGXeVpq6aRTkxbzpXjpU61lJrPOt
-zEKFraUHGCnJTyO2rHoMOWNFTi8qAocG+56CQYr8t4akM+3RpEN6jpEEZJb4BsJa
-Jo+RwF1YMRn44t9KnAB1bNrAI0aaUpmeulnj1aysURY97P3TX1rYWcRC2/3rSyNe
-SpMUdOaVuLfpBmFyF0foqqbwBndr4vs9PGZJGRelcu0cDHr9v2kpj/uOHTFWkAHt
-4qRVxGfgkTiUo8BV/Ro1hxWHuDydyrbohb3S+Uc0g7Iu9MRaO8dnGO2SLYqM9L+f
-8mBLDFaCgxQVSg1zp8G4E6BicSofWzsK2U3whNZy4jBLjdTUdiziCbMgqiItuL6l
-Jsr1QieYdIeQ0LOJKL5niNC53POszHJVs5kZsKkQXotRyvS51Easq+FqMH/ENjpl
-IVUA5V4wDkfqdflOvBaLsIiMrCr3iQIzBBABCgAdFiEE7icUP9TByVqGtNg9gGU5
-+o0YyjcFAlp7JZcACgkQgGU5+o0YyjdZkw//c0f/+d9MidnWQ3/R+FfkMu1SzY+n
-wsaPNM8ia4YCeKpcOCrCqluUfMNbMAZ2xYebyCX27ls3aYT0UpQw8WrhfXKBDHpm
-lPYo0i0TDJ0B8sNyr+sSV9t4Lyii2cv3yPkw3jrtUrVP7A5f2a3+WvLdEtPRV05g
-9UCh6MrjI1pSCgERr25fYoZLiy9qln/5az5tV7uPgyXnaRHRxBnbSdo1x6fNr+yc
-Y7jMckRU3ht3nGK5gzM8uB7K+N7SQF6K6fRGOepS3Qby8X95oR4jp1W92aHD0gLG
-2Bn5NMZSFvHshHUJ/qg6rwACuhH94wszz0jMJ8DKXvF76nOtZVy2jsiv20/bNIvZ
-cMaEPOReoh0ByLwyB/F2K7zKqrLK/0kHabMoLu+JIZ/P6bH/TctgRjuCP8NEelLb
-JJ3koHiFNBWZ6aecSHsJivSAESnFyCLzP6LzyX5/A2Rmu0mLgyaV6u3LrAyyPqtV
-iMaIkrRPhpcxuP5gLFg9efByVtmc1KoNkFOP5jznd7GwOjrG3qFHXRy4PQrWs0HM
-AOpzb+JIxhkgebwJP2RmN2FrCLknZuDxi80myWFBmDioJFFc47JFuf1o7+iLu2Im
-Cecp6GfQXe4R8gKa0OxDQWGMptsEiAoPiPc4CZcgs75ghrGUUg6G03+mRhSYXvvQ
-WmDoK9mv81avvD6JAhwEEgEIAAYFAlp7S2cACgkQTXEKQHwQq8m72BAAvQTMFyui
-OhFDQhKrNhnN6x4j8OHa9V7ZyWHJHsk50nKvZ56rSI0zmV+mXmx0nWi/kDD8eA46
-HR5OiNB6AMd+k2+AmGZ0KqSegexEzWPe9BNJuyWGnG4mBIIXUgWpGaagCnOCg/9W
-jIxN/ihdcxzoF70HmhXktv+jTcIm+It5NZ+kslPx8dtsLwKEbp0wtKyojsAOOSUZ
-WSQPNzmmAbEFk2ek/BW5T72ZRPo1xPoz8ZaQCG65sqFdArI6+tiqXzLZgKCllrPU
-q8yVcX1G6rp4oQSNGf7b6Bp2/q+xNgwZMe6rSgBLJ1nPFoiXBx7ciPK1uX+TLQPy
-rmwdbKtPFTkXTjHuiiaLvZ8ofExtI4SeL+hOxY+Pvw/wGHeMlQkhCn44fI6W2Pt0
-goCwyi1AyzjajnxMsBjDaw+hXn15siM8v/lv3XLVxJfK+oilahf7eVE5rmmMGrnu
-ALCV19rphj5+m4K/yLQATx2Lv5oijgbiImKe6cTnwWHtbMHnQqiRn9F3Mm0BbniO
-uGbMmvZoLlWt4X8FMxng44P+QRf9/E6Z6FMmvx5vEufKwBqe+Q4Hii0o7KUSoR4d
-gxNAilcx8zSo8gQXztv8zJ+LObaalVwU6Fp07d7nkAmVTExVq1Ykuiy3unrJWzNB
-PAkHzqOfEWG1s9yjBe5yvfHDAbMqwIIr/DmJAjkEEgEKACMWIQSbaG8UFE0rCJsQ
-8q2YqrbjGgH6GwUCWnteYAWDCWYBgAAKCRCYqrbjGgH6G9/BD/4tdLZmwvjkTxBW
-+L1p0czl8BF4vJizw+GrSO/ezQmJJ1a3wdcDw3OlukoG3uVAwt0TdPfp1Cm/wAkX
-zkoHs5zv2F7fzt9gtRv+qOQGpfjiwcfPFCTYK9Fr4pFKEcvgJylXiDJlTK3ho9OD
-yV9ib0/rxc0oAzQCUWPjyjSzPMmptGASGvkWKijigXe1fDTKjnpwWLT1+m4XNLT9
-NzW7mZXVNThRkzplI9kp8eKIBLibWKIa5JkGszIlwTNPu1wZ6OdpSGOfcOGJo/iV
-rdlDecOFpZ56O0PvNMwlxTs1J1YXKnuCDTdvz3V0pWIGB9ubDzybagyCasJC8tpR
-K3eRGz9Apd2R6LgaCu6A70MwtsmPzllUXbhxqTcWBykS0AJjpnAJB+OD08TFoKt0
-IS3RQhluj3h7OsC5PdKmMzGKbLsb/OWQujSdS3lw5Ct30qHLRRRiWXE9uKq0NaeW
-OO7dFhg3Qzb8j1UCENCJCilSA5OZFnUR5Vpnt9qMg2vesHb5IIkdgfLuiqJH4lvp
-uCmLnjVf3Pt3QgeUB2LXhNUgNqXhdmnOmVDTVonC+gJIWooht4GTJIuo5RgCyVcO
-8sY7zL8yGNcNRwfwloMzhLSNRMDxSWmEQSdRpZlXwooWIcAdSYUL/8ZSJ8bSSdmq
-7/YtO894NRxKG9ozHrTlJiDF6p2S64kCMwQQAQoAHRYhBJ6qlbTpcxtrdXrNYpIp
-aSuaXSBaBQJae+MNAAoJEJIpaSuaXSBaWCQP/0txbFPmACmhmOggNd+6ClT0MF8f
-qsNdc6vDIDUXPtIjrB2oj1cDWnXjyS9YgKZHJjmIyWIX5BkQgHRiT4rBdFm3de4M
-wUX4cuVPK66kKtSzkIT3pl2B5ps/W4Jo4jGjdXId7yTvsGEYMN+NH0g7JO5wv0hA
-Ye2/Fgu1sfPQQqCiYlrr/tN/qoQEP9IuicffM6rIKAM6SgNRdd2K6NLqR88CN8h4
-hIiQUCiX2+GDEHFnMGE3of3zOL4nvi0LJZaEttW7qGj7e+AoUuPEK2Pws9aQfcA2
-hcS9X8HQ6rEeTzfWpUWyhZRU6EOpD8UtHPr5+P/OwyfAWHKgu7C45tlXoitbBo1Q
-y6i5dowXhIY0XnIlukyFa+RSetSzZVF4zOzEoRmYlLbvMiM2OHt82JG6MMXQOl1a
-NVafHZPKKG5Ou7AwSZK6PTAl6Z7uS0i1yWql0jSBaiRqKiKj7SV3SfFTyI1HcZpx
-/SPwuflRqGfWEkgI84jZAu9r206aFVIzDU9V24qOGXvJ13C3I4so4bsE0Q5uVf6W
-44JpuuzvCVQgRAnSUY8vyAM51zC8RPBJcyvcI+wPAUGs9yYaTX1VG6Lnhmn7yo6L
-u1RnwkpIsEbLakTM/yr5/IupQ1EMyBiCMmc7chHoKiQu/aK7wF1bTOKn5aUoHUSk
-kK0aZc/y7/wQIMa2iQIzBBABCgAdFiEEhH/FxDN9nNvUc7emCWf9JY1kFPkFAlp7
-4xgACgkQCWf9JY1kFPk+bw/+OgQi+pyKJg0MasVRle+zOMMEajJ8kL9IEs8SaTy1
-vskUxp1DyvSW8UEQUw1rBBx5ha/HEcBJfy3A2mA8CeJDDpfggdAjpdYWPXNFjmjP
-Zwfg6DMVhpQAI2Y+usJYL3vrsnGU6uphaZ5WyWPsyF30nDbNuTlxVpC2d3sjcm6U
-1B6sQSCbqrzekBDUSBNdmUG0cqyMBe7kRm/KwptvYEubiC55q1xypm7iAxHmRIiG
-WkG85hFeLG9XzjsTWLzZw3mznMPghgZhK86jQO4YCNZwTapJI6+jZXgn+wIJhE//
-K3PLhoHyd0sfFBl8uoka66rzuEWiuj89NGzH79JgF3odM0s/6riVOeSvbjrn9ZrO
-puCnhC5YDiz+67VriTb7M5nzqKQdX70vMuKgwFnjmEG3z6eO96s1yrug3slnAQIl
-UEN3Q9sHMrX3xlWQPygghk30Pw1oQdqGvGHc/RMC+BksD4WnuzHLfiNU09ucveYT
-FXzFQSQ9IPf9paSYUjgR5kWWprVUIzf37fRLsQKwdgfjBHZvbOWzgfiEQLqcmOUj
-M68MIzwte506bveve4HoJRkrFoXh/KyoXBNnmopZTMYrNVOfSVT2yScQNx+eQ37g
-puNcdRGg0xtMhRw79eMjHwn6KxkIBRhHJlckoROZYJ6o/0OE1+xlZrTnIKBdv3/N
-jeWJAjMEEAEKAB0WIQQYkxq0cgweo8KLlbN3X7RMDGrQjQUCWnvjHwAKCRB3X7RM
-DGrQjWk3D/9SAM/eBeus3LQYR7Z1xOg2GZFQ+/gl1hpg2SC+Y7oe8S312rnfsnv4
-OKbhyFPFVsu6gvWxvbaDG0TsH9+Pzs5odH4yLxB/ptN57WXsLMkmS/C9nY16AHAk
-OdnIRSXfHOfo6SvJ76RQ/YUAMb+deh7M8inj101ZX7kgHTGkTTKVrgLYkmXlZ843
-Wk046H+9s99bFD6M77wJif17F92YTvGPluw6u3gWDb3u1HR+xS2+9wWeLDp1kfur
-kMjRZ72igFEuXRe/qu9HI7+sgSjQHaHFyUmuUOnENMcWlBp+TNaHaSiepg9Jfny7
-//G2U1T3SSf4VkGo7cw/g8XVLTSDFPsjZRC5m8ew/uH1R7qgyO5EPP1TT2j3zicY
-7llpuisvH6zJ4vebn1So1HGKrKMHE04eb7MIaBHYIpukKQD7tClwakD2tuBoXrwC
-1gpqtaapAd7F5Jv6VFNoL3qwEYkvaZ39SqQTAcFYKWA6fCWfLZ5rZO4JIgbo40NM
-Cy/2SNJ2KWuCgh7x/iJ9bVZwtDryia7KNQRLmSyW4psEwTvpsYLo/MKm86ncCP7P
-zGzPfcQoeAfLC4aNDsgQKD7shYQMMiLFolODd5kYHhb49gWu0WU+u89qRQjIa0Yi
-683en/wG93klTn9KAmjwFCEdx6tAOQQfHJbl59CP6tUR9e5Isp9srIkCHAQTAQoA
-BgUCWnx1HAAKCRCpyGyN066NOlFVD/wM6I5Kqnao241hKM6pegpUx/C/4d+ioQpw
-YztDNbvUvkPqO7y90oM4liJ9XwjrG0PmRh7qTxAsyEx7nQsRjDery3kp6R9mK/kK
-1nsq0a+jWZBvFsohzcKDi/EyUtjBuCx6Op6PjdqmusiqDSAGT6njArNCil9a//7S
-1UGHELDsy5VT+aCc9ZeLWOc47YJFlkIMproeRtAgpoij1EokCCx7mLG4ylX1oim+
-jM2hQ93rhGiqYQwVWHdDl5aYeV7qIskGRomrSmxJ4mSlJXw/M/93kfY7WULGtlK5
-GTdPH3hFpQmtEMEJETiCD4wTzV/6T11UcCpj+P39TrJYefC4RAdwrzjwGDgdZKxf
-8Kix1gHz6jfFUAKikKZ/KdsLPBzEzmphxHQnC6tNRmMo3kcwUdtVZazHTbWb2TBm
-H/VLpwE6wannsV/yioRr+jmqh1KO/6d11ewnFXlmuipR4mCeXnz7lOuFfWkfuHgQ
-XSqw8b9VCSMb26Tteuc3ftvkT7rYV2YiArG/XtlTNMYuk2Gkb2v/SGpqMYT3ezQ4
-rjh52Rgnzc05vtQiwqS5E+lchjGc4Djdf3U7bAUd12E3qmuhcZAVPP/3ka4Adt4F
-vtziFZeLWEzFV1wMfQwKbdYVasshVyoyvsCENwt72qor4njMPvMNBrAwLSYQt8EQ
-XubwmbN+5YkCMwQQAQgAHRYhBLiPFpeal4gSgZNFWRE+JKTjma8aBQJafI7UAAoJ
-EBE+JKTjma8aV5QP/itdPvyDB05U1I0B6P/yx60yuYCM5Pm3/SFb0dHsodKrDfPr
-XTiA/UD0cxh85FtdLNN/zBljiFU6RZr45XLATv0SuEwJo96W7OzrdGr5H+xQZWA/
-25FflAZFGY6O+LMH26xQ8BIs2B9uAPn4J+8UQvDzbTzBcRfAAT8f/7G5CP6Rftxb
-7lC3LQAVL9vslYjtXSkHZCbqi+GoGtotEH/4/pA3ovo94jrt7m4GQFe74PMNA8Ie
-LOAUcSPCkUzJWjBa5lc5xJHi45WPfeqmueF8zUb2yk1aMWRwgyBgm0B2quM1go+t
-dQUbPfIZUV/eiB7b9EPAUAMTpDnkD13L4bAqRezwxh6QoAlKlJmafs4KIyrPfKNF
-eiob476S+/BVmy3lRj05+rP2W8N3ruhhfpM4IqnMiwcIPNRR4V9vhGJqvOCBiVtO
-GGny/taGkRk2HYsnDGqRtpZ+NBvl3Wd342RUbuhfQ16ow6YMKcHFwLpCXTocO5MU
-sZhWGgKqZ1TreTV4hgNMtWZnGlqa4Uc0VeiYwq3GOG0HA/4EszbRSHNmuy9cdq/i
-c3oZN6q/t0ZjYul9BgT7oZ7gw71oyJQuhuxCAxRzcpZFLrbo3sS/4lsgBWj6WMFW
-YLufAOLyYHt7kTBVHuV8E5dwhtfDAYoi9HdPApKAPlk0zsf8kNZ8AxTygF4giQIz
-BBABCAAdFiEEefcwhn0W8tutp82Gb9zkhymF+EUFAlp8sMAACgkQb9zkhymF+EUn
-jg//aK1pbYGZKczHXbzbh9zdUfqrstx9LDrx8zsNvLLPGqobrjO59Fu5CA6JQVOf
-dLxC3Cz0FUDb7ip6OEXyDno+ucaefe6vmXUa4bqqo37z7iykKbgDMABQT9wTJcyU
-syznHWyN5bN1BVx9t+gf+MGufv9LghnqPrVs+EFH1JNlUyQkwVLhUpA5lvbvRj2Z
-8olbVrnD22E/FmKbGisg4LmUyRNxCn4+aItuCSfl8Uz95RoWTscOJBm8dw9nxLXb
-bseZZiJJ1/ZR3I54cEdXWDI5CiS9RJTN8/DDnPp0gVmfEg4oBxzEDCJJ14ZarJ/Y
-0j0pFP+faKYaVibuPvIiLky5/AZ1IjVhWI2zQoyABh7Hu2CW82snQo3Nili3IVJI
-X/vmMFPpb1upL6aUFMS5fUq/VTyyx2Ry74CJbsaMojoK8acEwR2svWauPJlU1lur
-s0A8YjSSGte78/GhZ7ahz76n7YaFuJwYd4+XTE7TUvzBkwp5OQPo5jyRLHhd2csh
-1W0E/9T7+DNXuZK5qCC3YOwhrFE75QJGywAoC+4FWdBbimcLz+dpbHkz+/3oOLBA
-QULAZ8mRVSqj0Pivaiu9tmFPfQyqoBAMO+ZK+I05rJvydXAS3MB0jTpEFXe3kSKI
-6l3d9t05G7f6EF1dUtLUnykqH/6xBS4wGf3yryjJIzBMbjOJARwEEAEIAAYFAlri
-5AYACgkQzyZdHxVmMdOiqQgAhVokri/tHitZbdGIp0yDrBEPNW1GTWOZ7GhZAyD8
-2gfFPWG3C5lzq+idu4NC9OB63SsQNw/JlRheQ13rJIsp3QoJO11+ofCMUOgUZqDd
-dGZD9y8UEXLBY0MDFb4z1l0C9vSRumfXBZTZt2ggLEogX/5tTuMf42oceM3RXRz8
-s6GBiViuibKLBW0CWgWx/I4CFzeS2m4cQviwWWy8g7pGQbsX1uE4aFB5wLdEnDue
-R9RJWSX1DgafXss4fBItqOKZYrAM6SMnEXeN2cqhGm7CImwhllIK6uwjPmxAeeJE
-iAfeQGXvAjb+Bz+RXjmNrcc5XntThPf6PHplfWQ5Ad8XHYkCMwQQAQgAHRYhBL0L
-9bF0Nd6B411er6UwcIoSYeHMBQJafcL3AAoJEKUwcIoSYeHM8zwP/01twLLFkjqk
-DexTllx4U8XrIv6SAJmIURR/rj3yCiDmz2PH0tzkh4wyUMaiPXAyb902vbxoGrGn
-PLOy/EBvED3qj/eg38eUWQnxL1yhUBcvEHt3NdkjmD7UUh31A7vm32TU9PGy9sIc
-sZHMoZ53TD9SNTPdzURLlHrNByLI4JykAeO20K9G2LtrMwaztHr3pFkrDXNubjDf
-kR3f3IzS0VWXfKbKEuqulZ6G2KeVdCrI9J3svzw+i3AfmYy9iUr/Yuupy3M7id3o
-kmlXJaiD8Vk1QjWXkGVFMot4ruou2WGiQaO8w9sT4fSI49ElKjlGqjcINIZg7hHK
-odNENbWSN7ABNQyBiE2gUAMPSU8UAVwgBo1olOcKBSiWUdCyoASVH8vwoXtXus3M
-DDmTdTt7NyYNYvnvrlysP7nSHHlvHXCBOM4Sv+iPjxFhB8HQi2HEpFiZT2m/tkZh
-q1L0jCvCsy6AgZ+y07PYNNBKQ+TuiD/DnhCnoiJOCiNEs4cXjGtyImdYheIzmCcO
-seFHckoUNNjTcMlJNekEtUuduZyE6G82h7gAtxIkCApNBjUt7L6lUlcRbCQBwWG4
-lMkAUGmq2AcdxPP868q2MlhiqocGZxZFVCtZaWuPrR4Xa9e5a7HWCDf73CAeDxkk
-Nx460Wt5403iysX0cJID14Bs2h6HOi6iiQIzBBABCgAdFiEEwzG6P3X7cjtYc3hb
-BuqgZuOXgy8FAlrnilcACgkQBuqgZuOXgy/4Bw/6At1BqqY1znUU/fCTvD5m1lvD
-8fU26KqM6Iuz7Kp7Oq48koL4OXgvVmrOB+sLLgvDearnGOgB/124GIAkqEzVeqA9
-3DjaqhHNMZ6sb8rrMhJnWs/IxNNCXSoeevicGP7mjSy8I8hNP7Qq7eohf5sLLdXn
-qy4mM3whTowtHlyGx/D+u7i6O2M21SoSHXc/IiriMngsSQfd1jncmvj0OlmSfur5
-41/+5MjLRet2n387dfozs7WEicBd91YhG0EKzzhE8W/1afUnvDd6EIXd67QfbUEa
-RHt4pOXTSWQ2bqVWC9qlsTgnUGsWjhWchav0w5uiFOvdYAAVeH9XMBIcIAX6okUS
-nzEL2bPr+VhNzDBkrGFnXLehA/vcfUC7Z+5rmarX0CJ3OV5zZbfmfSPQzZG67kwe
-snhQg8/3uDrAkw2h4TDjdjnS6/t6Zkhk/1Vzwj6Vm0izM7YWlhI1Prj0oIG6kINC
-9C8UFl+QYVn/zqXyZed+SVmi3YJv3ZarOoTh9Ze/LFPIQL4bh9AfuxKCrBO/Si9c
-CLybjNcmmMA8uEex2aYi0t7pnizHOCVJ2inUvg2Ffv/hRGgZF372oYwaw+BWsNKt
-yf0W1uxA/cN8OpvMGdB07/GqqpWSqbBZVBQvGt8cJ5vMCuNcf7Y0n9LrOvwZF0NS
-DYC6xjtMSw8TTrnkzumJAjMEEAEIAB0WIQS+XCMgms3azrINsKKMgYnxmIwhZgUC
-Wo2axgAKCRCMgYnxmIwhZpy2EAClD573DT+XFUk6BReWdLEr6hBxGjA2GvzkeRmQ
-mhnaKUC5TurdDjFkFcplGTe34UmdKUqlEgvGejT4r2iL8uVuHZCzMmZuIKxEXaoT
-d8AXstc/ALQLvSUP66fBin3RL5aeBwp3Bsg37mlXlahTEFuVFyuWW24ytvuTIAP5
-NW+lOll/dwPbmG3snfWL0dxqxzqpINLrPHeCRe8zGoMWrhF7ZMFx/qNVR5NqiwZQ
-Jc/WLpm1KnPwppUjC8h/QjrJnz1ofENJzFGV8JYR1IB/U4pD8eGXh6MDBodhPLI7
-PetyLaE73E8t8Z+uNRhBZhpU0JN6eEbP3pybGlb9bXU1YCbA5ux5TYiK8x1iX4E/
-A5rOmoSdcS9aeeAtqBULKU/I05wOUBbNhpDasyjMLQY0d2Av3q87RAu9KUwOr4ux
-XjdPcn0o7srIXIguPG72eRT+9TXA057IXYFGwBr3XQgcxyiqucFFU7VwhQz71m3F
-sffx22nMtTsZ0LcruSdoO9DfoBzhiTO+THf6Qwt7n93zQM+5MP/j0MrDt85sGp3J
-khHCDig2rWe6ZkNSJRdvCVY3m4AAcZHLF4Xe67iwJIDQ77PXMXQgentgP6KI8GqC
-WjxX/T/1Z9ISj0gewgPFnEp8FM7FxH/kgZRzzNI9nyYA1W/JJsG6n2yiVv3IaW8o
-40MejIkCMwQQAQoAHRYhBDHZXKttgNJiJEoXUKR2IOgB5H6VBQJafyoAAAoJEKR2
-IOgB5H6VxPQQAJM/IWuebLxMT84Ywoe+fRjkfhHMptX9C887z8JWZuW6Fjr0pS0U
-8nX+afY17BjF9Q3J6bzSsytt1FDXSodeM7EReAuoT6VbbTTJqxSJTiOAySF32e8B
-q5ccTtH8FfYvuH3CpEVlbpdxjy5iHzeRJPknCdbbxkB5TVSdTjuhn69rWOY1Hrd1
-lU4bLYzO7lxl0yMEAudNKL+miNoLznTey2SAN5CBDsUtjn9fQ9TV2hzkwVMwl3qH
-f/9hC5pZ/3DvnbaoBhchq4U+OCU6hoPbTtDPCNc6gSbrsepJDW4xYGVp9pju57VM
-PWugAI1p225aFeceBpHxKbqiG9bKH5ZL66ZBCZC24RcfaYH9oObuUGcdibQtzOdn
-qIWFLlXkMffS9Y27ny1rwocBp4lek7rbH+EGMPR7Q+UNBriivmB7fOC8ju/f01ux
-QRop67uoWrkfCARIKCUeFcPuOVXkATmWvE9cdQf/zC/XVZKWbjhv3XD2UxbU47gY
-BPc/nupuvGqVw0Ad6c85VxaL0Kd1lqHyKTKUihXN9Zz7eLx6mmSlPjFP3SxpQLy+
-KAHaxsYddUfbOKNu6l+tfUnlbDYGiUaqkgy5MxuVLcAm2/r1c9v1NNHDqLYXqOhc
-WdKpDUPd6LpHSoGSUwKrg1KcewTrdsDw9RkQQd6JDn5Si28Djv8z3gdwiQEcBBAB
-CAAGBQJaifP9AAoJEBMLwVBBQbcsh14IAIPdl6eNWbQF2YXD+DRfOxsqrVdrXVCp
-URT7mdpzXG0B80DbUdgPM4YIs9N+Dp7lQ96jO+yxEIdWF10VZlMGm2zEwouVqZws
-7mzvIkV71N5dTcEzNJw4y4t7aCZQvW6uhAZ8YrXbBPB8jkwP5W5zooKnnDFZ9L51
-KWfZgor1wE717/iYhirURmf/05rR4UcySJ9anqI6ZBxHEw6vEdRlsgecgQb2YEvC
-rAW3pxbEgdRwNM1IymlCzunHcL296zrk0bsBzHzqbDRpqmjOItLEZQq1W95aEB9t
-88v7xrCIFVbJm6FuK8dSaHCuG8tTvUsF9ytb59sm5Kr2kZcV/Gy5rC6JAhwEEAEI
-AAYFAlqJ9CgACgkQtA8xpAAAKbohqg/+NcEzgsaTl/OTjXYha7IhpmOaarryWMfe
-AQdkU58M4tKX9CBaffJCw+BupqBirx6d67cO7YErV0HxagAw6RvgctstdGZpnXDf
-r6ZBcHL/Uds7HVNgrfw/ako04rTcX/fsLdtd8qC4p/fd0112So1mRXeH0RZZaqCG
-KlBGtdDrLs+CzcTPz7/tpdI4FDqTap39ZA1VZeEvmT64esZ+iedoEMZFTBerb/E7
-GABagJU8WMn782XOeEi0p8TlXIlZkUgueF1Oy/n0JiMJh3M5ILxy7FLhmf3mx06E
-aSHK0CqAz/yA0DNMX57vKAnHqJuowuxlr6HBI5hqX0xbMKn6Xc6BzUqA1lt8fasS
-+9gYx92EpOGYGW+XYB1eqboTQvLeNn//F2JHKR1F79vuP2EtCNhPE6obE6iMet2c
-Qj73G/qfEpTgDEZqZkVQFRUjhfvR0h20l+uU7+h9mwv6gCBXvgtqE+vlNJZGQsS6
-foeLE6AgFdjXptYfBIFbEu2cF5zU7tPUWdSaD8h1lCBDOvKcqoQP/lZru9j3S4aK
-2K+/UIpYQElcovinXHzoUFbCRWxTn9M3mgIczJD22TDQR6kYr2CcBhr7VD8VtHkJ
-75FxDm2eu1PmbhVS9EDPOy8Of+60v2BqmHC+o4ZKlyGQoRkY+qa5IN0hi6UNJ2P4
-0Y5Ew2nyBGKJAjMEEgEKAB0WIQT/y9KfOv7UU65LnjIdQPuinrOWFgUCWox+cwAK
-CRAdQPuinrOWFl7qD/48vnvyZKp8sWLG+1Hx5aO09wArYgnIobGRa/vFcusJmRVg
-VKA/3luQBQ0Nv6GWjLfRJRNrRYX0ZG1RreCWPgadujmov/gwQq/X5F1PLyH0HOeS
-izNcO3cyE8RVg9OxUtIUNm4ECT2oqmXwiK+0Rcbo30SFnoyCLF+NiDr2AVRx2K8k
-d9XN5548wPLBPbCZ5J5DVbXjIYu4GlBwkpzv+hPp0yWkpHGhZ5wUOaHjjhemQ7hM
-+OQ9YkfqCm/SPelFzv9j5uOTpnqi3WWhwtv6tA8yuvdVT91lTFRZ5uZ2d60Q7D78
-7OGFlli08brZkcy+PzDkkozPg/cDMw2oSeTqAweSS14RwXsVE7towWJ33IW6MhAK
-knyRjTpo874i96+MxR9XYLC02bXXRVhRtRcPQIeA23AaqJnf2Mz1y7qNaPnVnJ5T
-sveWtRCMPvYD1pJNyF/cUIvN4qKjEvvqyCytz1x9OYULKw4YgZXtIoypQYr+cVpb
-JvKrzHsnxyFq9myOJl+Is7zK5sRlt9TQnD+Flj2X6DvsIL6tapqELK9ZRkCVp0Xf
-MGWDIknISlIn0J0IxsQI9i+6udCYd19SCW5d3BkppuG59lhTpytn0vfgRgK8sDC7
-O+CmRw9WKScAnyNP/EsdNbwdPR51fHaOrC2IcktP6yx6VvBatT6zMegXXVIfJIkC
+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
+/GguKbOIOVaLfXUINs466VVOtOKG8lx9L/P17aLzY2b2GOkIxgKd3+2Z43r4GrKo
+dST3CR0AcQD1vUgOr4opJbnAkcbBxiEB7RRREmrJVcpk9875u2UhUOb7lqvldw3P
+yCXdtcl5ouJRxJ5f8osHAjxQ9P7b++j7DdU385v4/Pth/7YWwr6GyHrpri/J0F0Q
+xAuLqt2LU7ehXfkvv8YbcjgSHmOiE4inr4WpTXmIO31J+1sAflRS4ietJ3yTdhNQ
+KDxkn6OUkFM/JzEnmISNQCm5OiNUFGDDvr1PJRWDSvoJdMbolPriuUvmJ203QRLq
+9GkGPUwNmP+77mCrNjmurlBlr81JBe08+BI/iZ2QLaVsYLLX5Pj8I9hmRS97szhy
+dZmuDVeQNbMfGw6CuNJmI1eoCV2etsR9J4zMXwj7FNJFunWG1C/p55Rn83FAXxQm
+kOCvUJ9MZf3gkmp2z/DZYnwMkgv4bexvOO1Z8OuUCtttr6808Bahdb/WnMC8UaXw
+ql2bXIS3GMBc8tWeSqMcK10+zKfLTtQIWFRXZXFDMuKm4dxUtQKchx8kgA07mg/9
+VRfUyzrbL5zJldD5+qUsbpGQhx6Ui1PkukkwIga/nJQ4ANH5d1LJ6b7vE5O+cV8i
+HnNWlMmllKYIEIYj3sZaKo6+hQ9aGydF9pnQ+YkCeQQSAQoAYxYhBGcx3cKDV77D
+jjQqr78zQhP1xcoDBQJbKXGmRRpodHRwczovL3d3dy5hbGVzc2FuZHJvbWVudGku
+aXQvZG93bmxvYWRzL2tleS1zaWduaW5nLXBvbGljeS12MS4wLnR4dAAKCRC/M0IT
+9cXKA0vlEACavG8erSeGA4XSPu/aK5HlqISPom5h9Our61SOUc9FKqLdNXRwdqqc
+VPOInClSGOzx8N1Jw0OSu3mTHy4dP2wSjGo1OP/sWghkPks6T8K48imPVBmvDat8
+fgjjmxjeDTRdxD4Ck3aoscQLUhWQRaeaoJJ3cVmYE7yE3uIw8x0v3VDNSW6+5SU+
+HgrsoMYGQxbuZlts2wev7WgorWDlcWFNu2W8lLarT24Ok3q11euDa3I7+F933t3B
+qu8yBAwRu2+bX7umZ3Ud6/t9TPtERvEUxhACwZhx+Rf4Y+DJYVXN7A2A2tcQZ5hC
+MMy98tuK5yMKXIZ5GOhIoE0jTL2jIR00NZxiiPrIu9GJVDuySl5NSDkHcSpNoJ4G
+d7LHjnsLHfCZ+agnTSfljq1j/JXbkq09ezgINttfs0lzM5S4gfW4HOMMLzknXqph
+iMMjr9jVF5N3/SFJrciqMXV++1jN/2/L+p5P3+pa1BEbQqKtg5jecL0ReBJlukVa
+HsVDB9946tOrTaXLTxeBaAwswe+UyzVDd2JEOygGsuxIvLdAKbzUyaip2xFI1w9F
+bZdwnHrJOHA2ZSSI2YuzdhOvZTTGFM9QvQQ9XA4WtLRGr1MgQy7hJK8k/Q06L4xX
+NKpIIQOMOoFHs1BkVBlhUjCmojHxghB1cC4HPh7ihiUVgzQ5r7+lKYkCVwQTAQoA
+QQIbAwIeAQIXgAULCQgHAwUVCgkICwUWAgMBAAIZARYhBPaCzcw53A/q4RYgtsdG
+z6nnT6SwBQJbiWoPBQkThyqlAAoJEMdGz6nnT6SwphYQAIAXkUsNuA+aITzYRNmN
+qtsnfPfPpUDNHbNXqVOYOVa0Iwi063QiWACVKW2SR+XzWt8CRyWC4WL+1O6RNX8P
+3c/SI9UKPUFkFfJXRibZoeEklA6akgDZ5gMvujj2z/bqRKttUO+uLmHCEi+cNdS4
+a+FLwq7yd36HGPh0f6PYUIIQbP/Y8NThzjjF/BjITluG7KpbfrBcNxMlrhFRYiKi
+LGP9+HLeTm5F0I0QFY5G3mraC/qeCeDJq6ONnS5eyUjezmT21XgRuX75Y/OqCDKK
++9Vx50Er8x/k2gEhcWLUhS09sw80HDIpsbNA+Y6IgqZjhM6i5yMVIWtWwiEwIcWs
+XS6ib+cBdaPtF36wJBDJnmyD6POnzcsk79p6VIncHznsHqCjzn/pWQlKRpMoXGpw
+S9Esyh7NKGj90WOWT4ZqT6tY0emw6xBsOG/lHMw9OPoDoWM6DzV1G0GdhmUYztdv
+G0fVOKFFpMOm98u+V/x9H4kUMt0jsc4Kw70YORlknAvCeCxK431zmqoA8yX+ew8l
+M4WzFoAjDekrn/1RRvaYn38PKvMtw/5IwDoiJ9OUWOe1OzMmtX3Lwn258w0Xs5At
+YLi3HzQYt9Kr1CLL+LVnkJcuDKn9+/8Jg7A6W2OgN3/+pSVj0z14nUcJgDuKIDDQ
+kFz8HMxEO/AIeZMtG3qpLPOgiQJXBBMBCgBBAhsDAh4BAheABQsJCAcDBRUKCQgL
+BRYCAwEAAhkBFiEE9oLNzDncD+rhFiC2x0bPqedPpLAFAmDujsEFCRcVp9cACgkQ
+x0bPqedPpLDkog//Q9dGsOAjTYubBCI36pJnBIjcp+6t5FP9Mh//Bn4Ktci3lVYD
+qYpf6wJouVuREk+JLbhP8ttrbIdRREBCAareK+qBBs/xL7zIxJqDYIF5+q7jLQIJ
+et4YAYUNwUqodQYETVoj3IML2CTY9X0hUr7H1XhjaGJzXQGjN/zViCX1OZqpDPvw
+2pXf2aaRL0zs8cC6PikeKyuvb7K/J36gGsJ55j3F7MKmJebfWLWi9aIcDwYBUmAX
++f7lg3BkRpl/cxsLpLjiRPnxMp+w912vxMUOZoOIYxabqLTeIvcUkUQ47Bvjh6TR
+HfMGs45IhH8+zEqIRTa0lab9hvbzIbO8dPa0hQjcXkmwXME/V0vcGTmTuBfvsiEr
+VqY+wKz+U9lEyZpls81yC2bFomPzsBxM8IpTdja8LQ/5t9Z7kXd/B/y6sHt3fIeM
+Tu5SG4RTlBqpvZKOUgUcV6FAUxCOvFS74RtDBd6b0LQi2EP06bwQSE/rReRarq2m
+yOOq+9ya7plFbYLZe0iBmXFULmo3ZUPjfwoKSrFUev+hRuhNRrTT6/nNHOsmTVA9
+Ot3mhugILhmbU9e6nUXr/JUJ8zjSPgaayt9qBwGDpz6rwrEDL7W6ZCbRsGl4e8lP
+KLPezudRb3BnwoBz//qbEQlpx7ONKbSotcq8hxrCy0+oEL8Tzu1xuw7SSuWJAjME
+EAEIAB0WIQTOeEm3VZUdi+h94uU3GAuPDsP+MgUCYLaYcAAKCRA3GAuPDsP+MokC
+D/0QAbUpH5Xdk4X/8YJvrffB/RO5zKjmhyOpOxFfHNvgdOrLXr0T2Jcs/YVbqUep
+w1JZ4BdXGmJeTqWGHtvmYrdAhfDOUttz5husnXpOOB9ieIbVHOfFHnSft7cnJw5A
+jZzJ4mV9e0QIEqqHVJzXJ0XY4YoK1hhKRmul0FHrSDx4hOFaNjlvYbMmrkle/jlZ
+TEVODQqUxTjn/egy/ctLlBe2CLiWhQOtBG7BqSz87Gq0kDdhigOSNA/BmV8cPxhA
+puRuV5idsfXWudazzfr4TlZwUR9bq+z/Tgce4SsmubC29hKshO6ki5OcpEyZKh/4
+uK19L6qpgDXWDg+YPVxSvCbjgGA+JG7qtz4mi7N2ya8zNERZVzHPWJwJefSokC/p
+x8UZ/EtrkbCzyYClCt5eWYpEWFXVOLohtaz3e+ezNV/JTzeU0pR6OmtUZUurU+RV
+sZZ4Rg4Q8eRjkFtlNXEavawqztLTerAVF2wRZDE6RnC/PLBZ0+kzaOX8oCA/qqGU
+Px+V//2b9FYjiYqIcehlsbeAEbHSRdwNyDddpxnDiNBx0J6x3aVNmiOzbS5WKSHs
+VA29FO93QyNPMTMf1rkCbTfwDMiFer21Op60rSIRJ3HuCwj6NdYFfSBSubrYLgI7
+8d5zNWpAd+YU1pvf/i+O1LQ3Uqd5ybl1lITBJko9eIGO04kCVwQTAQoAQQIbAwIe
+AQIXgAULCQgHAwUVCgkICwUWAgMBAAIZARYhBPaCzcw53A/q4RYgtsdGz6nnT6Sw
+BQJhbNcVBQkY9tEBAAoJEMdGz6nnT6SwRDkQAI0Zv6O0MT63tnjqJwW7/Oiv8BbH
+UWQh6UbiNNuOoM981/tNNCuzxztx25ouoyUK08gzjxndxyytwB1BBmEs3ZIOR30d
+l0VE659qIoLQoZ+P+bXU+oF1e0W29AAeGBdEjDkeRPdJNJSbrf/jQcdC8hDDjs6S
+1Or2XTId0Y3JTSdYRh4BA+ZvFYyC6yCdHq786Bs1/4xopFIc83ULQX3K9g4ICfZB
+LQttTdcChsVJdhmglVZJtfZJWN4TVyyI8KrirHozHjUu2TH39ezyDseVOgQJlgQY
+ntYw5JLiYDwvg0SaT49VX0+ChFy0NIO5kdDaE32/nHr+H8cxxSkGkGmW6wguwe+B
+KS8hfdIhyxej3IyxANNK6Uedw7wJXRSFJOFt/rzMLmUMtafVQpbN2354X5Y/JZwQ
+KoB511E+0LYx+6dO/F3opIp99R30CpTEAGGoE7CF3E96U5KkpzR2ol+Q8gnURjQ2
+o1XbNoyzPgfAqRGVrGgHJz6k45hbMV1e2jp/Bmq3HtarkZD3VoKtHeHVPDo0NGtY
+92SWL3oyHQPf0iErKzf4ea31Mgehc4+8mJmiPXk4Liq/k3Nk3Zueyt7v8wZ9a6n9
+NmkJVVYn1Hba/NdNRpxIrWinenjMov0cmgwWb5ItaWlvIfPUi9oXZZFzVCp7xpId
+JmppHtRE5c05S99ciQJXBBMBCgBBAhsDAh4BAheABQsJCAcDBRUKCQgLBRYCAwEA
+AhkBFiEE9oLNzDncD+rhFiC2x0bPqedPpLAFAmS7ebcFCRy5Ok0ACgkQx0bPqedP
+pLBUPBAAsYLhdksSbGhaQxEl65Ei+6jX0ujsGku/WKUFnH1+E3GTaPzyT09gGyhd
+x+xvfBa2mp7aeO8Dn9EwB1u/ZJmlfhXetMV5zH3bkQvoAV8gB4f5fGenKC2KJ0Db
+ff0r5WLFPf0TKCSeLvm695srG0VjEStEtjyDJr7jCgz/EfXHaEcF/NXhe/52ssx7
+/bYVjc74Ut1x/0T4jF3tvcUHbr0Kj/4J5jHRQzsJP9Z0ia23sndBqHA1PKiPsOnk
+vlmlgrO949ZfUnyDBm2f6zM/Wryon4RW++P8AWdhi0iZnRuvAXKiAtlCJ/Hb05TH
+VHTUdjqN/4VT0ER8frPEpTvcVmRTtMLp/m6GeQtJqmUKnN4EfAqem2C80pj76o5D
+fmqKx+F6Gl1QMS+KRkyXUfpLZ6WYj19Xaz75anjESzi9z0NGOPByWgLJ06C7QAuF
+7I49m0jqbOQCLM+dLOmZpx6Sc39v41pqbSlCqETEftPDj4ayTXyIXxVPdj1a/YMz
++OhqS7Ob+iG0UnrOXQ7/QWzVypHsV5BQXfh7XV1EgQeKgsnhNhaMgk2AVvYCBFjy
+mtY9bHwQS8vTZ4SHnNYji2SznTo6QrFKhA7q+sjZawsPIKPEV+lqb6NKZlkCXcKR
+rii3tPKO5Shm2yOFcpCex+UmH2TAIUQfwAO2Oh3s50QLTo4tLm60NEFzaGlzaCBT
+SFVLTEEgKFdvcmsgQWRkcmVzcykgPGFzaGlzaEBhdXRvbWF0dGljLmNvbT6JAlQE
+EwEKAD4CGwMCHgECF4AFCwkIBwMFFQoJCAsFFgIDAQAWIQT2gs3MOdwP6uEWILbH
+Rs+p50+ksAUCXxfPLwUJFTRcQQAKCRDHRs+p50+ksGDuD/4036dc3+fmWI3kNXSR
++9KkdtJookTmd6DhgBEuvI3pc+/qCPUTxCLv6rA1ZmAY4+7y0jdsXjK5WlivnW0H
+5Dl4GtWNQwJABzEEri/ui4x5WxeLD7JCNwSjLWhcHFxm1h7xlEfC6g+F629hEEiS
+LWoYzU6V+p266tliz7GVkz2MqQECxIRhMkM+jJnquysNTyFxjjsyPjuQVO+O+HHY
+vCSUvzfRyrjJHHIYPWH8gkiQsuFrBZifjrfLE6ne7hnN/AZrauUHSewhPpFf7Ndn
+KilEqv3t7a7C2BD9hZ6XXvoYhoy6UuB/pXsyYeOax2omGJEfZ1qk583QVP2zzxeU
+wzxwXmVhr9L79/VYT3RWWYkgrp+78k7zu+U2YKSrrPld+HqHNL6syfdPIacR+GSh
+IV2+wX7ZDP30IAO6wpDQIGk9ZSNOzssMcRUwOUb0auiFR315Ktherkc+JvlI1V90
+BOez+jRFTEHomLV46SdWSZGHzjnTyVy/SYsOJ7UTc49W4ieb20B8R1yNHT7pyyE1
+sLsrKovsXJz0YAeMOdOYzsodi+Kp1sWjZl4xd2dy4x0xY2drcpXGa+rv5igYGtXp
+qg02sW12kb+pPrxqmO1/TK/cgf/QPB1GaGELiIu2+7H9j4LzGGVaSGyWVleeVN4a
+KT+dpQP0h2kKo4kv/eh5XIeiQ4kCNwQTAQoAIQUCTOh9hQIbAwULCQgHAwUVCgkI
+CwUWAgMBAAIeAQIXgAAKCRDHRs+p50+ksJFqD/9SnvKnNEjH3e195/1/1cgRJbDi
+63WzQIFpcwhBAUb1AusirEvp8k5bhuTU2FJ17z+EKVj02gm13h0j+SL1zF/JIolC
+WyGwSLVHTRgnUynkDHDg7ZWb2jQzeWsEsc2Tk2nBU1DfYV/k2oE84fYF9/HUpvEk
+DPeOL4tz/lFepbOHZsXWWD2M2cyce/Q/4LqjXefZGXG6MJqaAHjYyO/X6KQq0/J5
+fSw+9lP8zbqHLLDShPq8EUVKOECWm1akl4Atd8RUQqDin7Pt4G0gtWM4hfYKR0Pv
+x+d1sVmFoKA1tgDHKl9H+ek4XUCFQFuv3Cpt83gdJaPyltRyEWYSTsENcpPbJ0VQ
+sTnSpTXawUTw8Wm0mGFUDSbIKuHIMqdKQOXgRPq2oM3lp7fC1eRWpEwPNEp+pVcx
+2/xoL6VW9EJJMUNjJ5QxdWO5h3lMEXwE3Wm/UH75L0i0GXplqbQzhgczl6Btqc6S
+bXYYrzPmpE3u6+VSEHJokK/ihLt/xN37rE/7ePn8sTf+RWj2KIyobzERW8aPmJ37
+tONiPeeLACoopJj57JwwTxYKiNKmNAx3V5E8hHrVDkirBs3Hrn4c+mWjyXcpoB1t
+wlj0NbweWyO9yQ36sJSFfDigmCvuwB55GZtu4H+SOkI21cum6gLVecI4eFv45SW2
+nHv/ONfnRNFp3teyEokCIAQQAQIACgUCTRoWngMFAngACgkQQycF+s3UAyUYrw/+
+MZzw9koKjl76d50U9JO5iZ199c0wffcUyT9QdJtAIiFzr3KJMUuYT9OaBSDRfJ4K
+xzW5zpw0ENPp+2sLdJByZGpaIDTccWuAeeSsviK5KjlNuEX5RHHNo6HJQJWFVxGx
+y7/YVmV5NGB5h0fDRubLEXQGJr7y/uKYgUbNn7f1bxCIpgoAdyY/o/BiZvoOBO2a
+30r+PefaFzZ6ts3dKfaiKFciW9SHl3VJW+g6s4ONhEC1wUO2J0ofXJdDokb3RSp+
+NfpZnGC9hh57eKQ5i9je8XsyuT7egb1oolcllpWq1f42NjUtNHjqLyC65YX83XzB
+YiuPfJWkSk7b83zmxBon+gxfk4NNHaPXpT/0Stamuxvsk2Vte1KdHBxFzn+ehiG2
+qDUC4ovv+YJWINFr6BHDRx67jrXTx3RO7MOOyiCeFz8qeIMQrjY+2tlmH0Zys5Fj
+L7VgNm8eyB9aIchG1yEyKL0CtMOy4OyESuqB4dlFPpcYXS3mlAmaTmKbsgoWC6JV
+lXaYyPvpFroD5eKL217ihuVtNR0EmFH3G/nazyNn7O2cbanVJ52SklX370kfwgZZ
+R0XF9p2s2rfE9HOqJp3DsOaLkXekHp3kH1J5VAibQ5klMRP1iCyfGTzwir+8bXgS
+DXuaU5//xTD08qOGosNGqp/ZaZdsj+dgl8y+iUyg88CJAhwEEAECAAYFAk5CVawA
+CgkQQycF+s3UAyVNwhAAgk3f6tLuQu/nRTvDy84GTtSDplU8dl7QfWqO4ikoHHfY
+RatK936f79+k/IIaBriB34OX/OLK1lq7abxazlQfh5f6ebrEUg34EeLwU98aEY6P
+XULrY6bQyR1ez/mmiCngfDXO5PwJdUvCEnSeLwHuKPrQ256WhQDIL/sXSsxQEf1P
+BNsf9N+V25nr58QU9w/xAlAIxGjgGOdJzxSH7TfiUqXsB69Vbp0VvV0Yrgy/22xY
+ve+DuPywn2eN05B7/pPZlmRx3+8SwciiIYDakkQAIq6Y2kWM6w1XuogM/yNChWuz
+FUJ+Emofh/jDD2rGkZ2Neq/QC9PZy9VRkLBhgrmE52X8ucQ5qlcoXXXXximW2ZEX
+x+o75XDRUWhM+HdVoxmRp1alPOnQVrAQicifhB5JBHbb34feRlo3EeWA3GjZGHon
+bt3FbvogaZoMTgcj4V2q7H6A9U9waLEemWg7DhHFB82cQs+pBQ1hNJrZz6hlmL0a
+mGA5HVo8i6NYRLaA3PCWwqTdN1YHU4WdezNod53yrOsTgdxLWVxbvdhVRvr7Rhwh
+VYKbPaZjmQ1oQxq3Nfn9g5clMfe/bwPgvjaeN72Voj9VqpzTmqYnQGTJTbm3zJWq
+Fsj+eB/OL5YGkBAnY9cgpNQ62kmLABkqV0/t7aeoGb3S3+44CDq+aaiucLfV4kqJ
+AlQEEwEKAD4CGwMCHgECF4AFCwkIBwMFFQoJCAsFFgIDAQAWIQT2gs3MOdwP6uEW
+ILbHRs+p50+ksAUCWbBknwUJD8zxsQAKCRDHRs+p50+ksCwOEACoBqTZVEmKvtb/
+UqH+t4ZOVPMUZ62LKE2QrNohu+xlUTSzDQVvCjPxLttt1Xx37fOFTRwg3zeWcKhW
+Skdac5KseDkjzoq9Hb1CeiXjBiREAJAa413COUpv2MDaHIBdEuptXrF+h6AJUekw
+4ClBwZYELXIoz4WEusZi9ep+mAjI/CkYjCUjBedfIBk8a7Y5SjZiVEFLWwbmGIYy
+F2a/FkX5pT/D272mBM98YwMhSqc9VKNvxO6hjxMVmfLugRK/r2Zdi4TWY17Q4seu
+WNzDeINMgmx0Cr6sf1x8jRulQg9b8/gp2361UjJtMGoTu8o7U3KfeA/pckfk+gyb
+3HMOk2gCzHffmf64AAoCNjaaQqJYIo4duXhDpzr3Qd06c3X9MP7IOE+VaXdrGQEh
+Qq3Lqii8zRsUc4BSm0SN4PPU2kGOP4cV8D+A4i1S0N9HVfK75yqHQCo3aO06cap6
+XAklQwuh0PCdNGTtInZJiYetrl+CIffsm3AEv2laSjWq29IRuZR54e6NgSsPslcR
+hkoA3401JUBdzA0lXWZs0ngy5+sRsoREYVfsdKbMqSFtD6OOlJ8soZodE5dCyKel
+sDtHK0VA0PSpSstxqY9m91xN8fv3zlv4Iar5uxLpW8Msr6+hUfdth2568nphWvCH
+5h+m8ue3Y52O1UIGGAZvyuiftvQPbIkBHAQQAQIABgUCTwcc1gAKCRCpU+SJEcJq
+5n7zCACcMXgrniNY/sMBuB3V4yVb7W9vHJGCJBhf0Ugx/VxkIoNPRfRHgbprrZxi
+4tSTyMHflMPRD2rwkhjp1DuG1oeF4jsvYHDMke6DqXqI7Yx4pjFN0AO7oa1zUiWc
+NwDUjnrSbA3aNKd25zAMz6ko5vIwBZVv+e0DJMAdBYzyFqtPju0bGD4RWITAmNf1
+XHS9KlwcCkBYznhcLHoJGPAJ9AV+lR4ZaHRlBTEEtsvpZpft6YWRyGFIGQl8sNTp
+dsiXlkSYmj4zbAfFb8xNMQpYvcEl7p8Ydm9sTE90ccHjgS528t2JlhPAjU9LoKVs
+Ea3oHIy8/j1OSGFggLPZYZQflQs7iEYEEBECAAYFAk8ffT0ACgkQfUtuGJ4/m+Yh
+1gCghnmV42sKPTAekXXBpL8NndRv/qAAnjboyfagL6U+EM3i3M4+2XrhWj8miQIc
+BBABAgAGBQJPUO33AAoJEIRjrlNwyTqSWHgP/2yG5eOLM1D24wEZSxdKaKU0tRvu
+NqHrTML5hpY/9GUldcJS+GI8iKAxc+Oc7VHPEOYkBX36mkV6NYEcojH6TRYnwDvE
+iHxpqW5PnLOf3nleZ4+nYPpNegbdzYQtAcPMbHcKEDOk2mS7A4+krEFUVUL1MEQA
+D1koosha2vgoBQ0FcB5L1Api8TOslaABKRAhOfJVeutzfomjxhraIxut+krsoeFq
+LgAbNf72DeqPCKmKh/0EKGpHEQqnxLh0SdLNJ3iy9D7IsEfbOFNf9yG7shVa/4kS
+eRcex371EqEGFzvBgOGonhf1cxmsWjak9VZrgYY71SKVB6r10wNW1sIWauPajkAY
+tNErMMUtHSRFNJ/NYQ5be2D8kMd3BbP3sqF5nUulZe3s6kCamnQpuKNuq/tyI3zu
+jXLUi+d88GiqOAq5Y0ZIOAVp/OaL+/fmkoftPLYrlgiiuj0Pd4wtJSq0alzJ/Zzs
+dqIsWACTaKI4j7VrruHYM42fz75cmLiIO3yMzdXrPCAvYGS+zdV4oCOy3YMT80Su
+DKb0jHDwl4g9ACW2s41XzFXWE5TuTqecCaESaRDleUGsYry3kD0qlS+qCZFCqvWo
+j8p1zi3Tkts4a6XbTOltQSuH9TDi6WtqqozQKDZzMjtWCIhTONSEdkzNicWiV5IW
+Y27poH93GGzKC3luiQIiBBMBAgAMBQJQFu15BYMHhh+AAAoJEDM75q9trJkYjKcP
+/3udltWQK0dEhkoxbvFFvs0D6BLfet+eUiVxa+FGc8l1oLuAbZMr6dqFg8VQ+nWM
+cBDJRRbg4LZ2OHgy09KuQf9Z1g2sTGjTDlS+ih+lhTIS6q+HwztE/1vuVk3lTHiH
+f9spHoo6vCCTn1GjVbIdfv58bMa2bZ3eDjwxV0+IbEr7mnWGLpA9lrVmui4rbOeV
+R9dyNJB2Tsea0wyoM4X0m4QhUUjN+m4y0rkpnVTzlZbx05MWRsrjIECMgQwDXSWn
+tOCKtWfyLY0k/j/Z4U3NDkedil5hvhwWN3otJ+RrsSwweTuogVITwef8JndPxAX2
+FhsqYQlG+hRpvXnqNGP+qFmetpUTTD0taJpcVmdq69d81QRQCbHVMEUpd1Qf3+rm
++UZdSyfJBKMpVDZKF92O3/OWEKDtQKpaKkq+o2MWF65x3VFZUVt/iYZPP849psNx
+XcWnZUPwNgo2EEkpW77Q0A4PTj7i79hQeSw9w9wXXapSAfeD464ojyhemDRcZPZ9
+Qm8EiA+mLudbhd9H/FvHmNJxhdlFdEVZDFHxS8dfd4E4+jaXPZ6cvtsMTV0Sa1Aw
+CMkgYLr1VsPW6lG0qqX4qlSuGplA7tsL0uPPUckT4bSEIXoLqSfnPjGs910SLq/U
+Yr68C+5ITBfPrZOeiSEPgxwuPt8drkdxWk2wmWwlcRO4iQEiBBABAgAMBQJRPYdH
+BQMAEnUAAAoJEJcQuJvKV618V/AH/RXx8ADH+OlqPOF3fm7SSHEbZLeTr3vU4H7l
+ZFuABbB6M/90fbzwVybVCFHTEqyZZgIK/OPLrmm3B5SC8SY4mIqpJ4gFZCj+SxcR
+nkCRtW5ZEGEeIrJNsB1RcZ61Vee01F6YmvT4IXr2r0ZcDdS02DPwvhR7apHdUa1l
+hoWhN7FZ1/x/hi3pRl/AQ3mpqke1fswl4ulcWbsQwvXuCL//GlLk9Xz2R59m4j5D
+llCqIQJHAwn+Ub2U2bfIJ7tvH6kMY0HriRVobZwkh3G9+iCKwHwHb+pqhlrzIrtS
+ecQBD3dvdYing3X5mo2L7UET0G7Z1wdNtQ+jV8qNL3o1/S1PdPmJAhwEEAECAAYF
+AlG8aioACgkQwBMwnW1+RFyBAhAAlHwlZw+y5HCNX/8+zMpaH8/0zXF4LQZqkR8k
+DeKuoSkupzfWC7LZTGWPnjg0rfBBRJZ65aH6z9egsKXMgouOyCzppEH4cz+rDkmJ
+k+DjHHciMQoWdofaqsA+m6xeV4pKGcK4EH5yLBFDUhcmpd1NMm3zrrSbOgTRlpRO
+Z5aFR2FxafTgfaKAYIM+CZ79kx6H/70Qc2Y8TftzUDtQaU/tJZc1+6bN+9yQtL4e
+/bxrMDtxc0vTWvk3zyIuHLqtvdqQklrTjtC3eWU3GwYDCEghfO+arlS4KcSTQoW+
+Z1S04OeYXTUIWF6O+oeJmIj7wKFepCL374j/zPzcDdx1FsUHRtgPvna3HOVN8LEO
+A3BCX7ItT8Dhz48h9F6kPhbQNz2ULGu5zpi/7Z9fwhztHlVZcK0NF1ShSPqFNoO1
+RHfOD1PrJie6ZtGJakcAkUtvPvRidMSYJGi6Yp2wiitB8mR7nNUyLc2rQjXTbiuB
+X6SUqyCNp65FrBCBYvVaLlApfXqaXgrfgnf22afsz8YYpuXk1gDdAIar1cQHx7wm
+USmU49tO8et73s6IgXFC7qRQaTt08zYPv3PZ793JZ09Dy1Qb/AybgkzpRCsRMmUk
+sx9wrZNhJrd76w/FJUHDgGVpDqwWRi1qB3NIvhJ+GJtBsU3OvcVeqsVaNRdCnfUh
+BHR7OCyJAjcEEwEKACECGwMCHgECF4AFAk7wUqAFCwkIBwMFFQoJCAsFFgIDAQAA
+CgkQx0bPqedPpLByGg//RkKiaMNwaETtXMRhAUNFw615eBptpCW8YEBNJlbHrq8S
+9VXBaqUAFNlFndbFRsl9eOT4hw1vuuxQajDVgcv+ISIoG17TjnB9hp6k7+Is29HP
+GyRqLs8VuVC6/QX04Dlh4hKWATWn1JDJBH0kFggRtOMImNhdyfpMJNxV9TQi1kdA
+26jq9EfFrV40N8aPgrKh6CWV4b+VLTOqp7+Hhpr+WNghe0Pcll0L8FkDbKad1R4W
+MosYZ5KyW/BePHUcjHoQWiMBpOKpVNPO8hqzLgrNteW0uAYxkTW+VcPGIYl1qis0
+RIdPHb7phawSQG8TxOC7x9T5D6kePs5w57r5CGVZUm9SDnUHQfjeGIp33K//TM6A
+Y/vGJM3pjEZD+8ukHYncU12+U+6vpsmX88ewIrYwxJLj9SLxDsr9qLuT4wDpcJ9p
+paL9ULhdHZN7elC7IVzYIOZ6RXeKJ97bvEVJyT+l0ARWj0odK3W4lkJkeB5SYo/x
+R5XcOnWxc1Hba0PRON7BhnjUA8VjlwtyJHSHlQgDaf1ul5cEu/cAjao/FlssHYgh
+Nsgp58duSdaUX7v8xbXaKkK0mCEdw1GgWmNaJUEMyFHcpZuZS+1+zdELJ36WeQfB
+1iQp9pI/S8F2j8u5P+Ir/k8D74kaJ2fS7TQW+cDxAjhspAHmUX8IK3VTJBnsEV+J
+ASIEEAECAAwFAlXFA/UFAwASdQAACgkQlxC4m8pXrXz/MggAwDLLvvn01SX2zWmB
+SdeqafYL/7qe0loXkPUNk/M7NNcxv0RDofZ8+ezsbzoucnoAyr7f2smvrq37ch6B
+HHHqLQFO1SZpYbnO3eFn1ZoYGT0DRehUWCMtf+8vj3MyzspIm6JR4LsqssnKgrcC
+Xd8Fntdf1IGMBzMdZ9MQCmlj6mR18mR3Jwn/xyqBOjau4h0jbbQdWV35+h2WSgxt
+IbnBnQBvN8t6Z/x5gAzTGGlf/sGQry6rljpPXb3fK4iSwbt7P5gEt7DRuRHMk66D
+k4S7xHHB/fcxt3rWenB8y+IB9HKQd7w83DqwPXnsFVAd2hpeONJzBYaTv564T0fa
+7BMeMYkCHAQQAQIABgUCVesKnAAKCRBrSWZYlD+rID9NEACovB2VncckouF4VBhV
+cEenqdFp8CK4FKdvHOgU9+A1RcbH37fAGhRgafmanOQoXJ7ZzTwnjZKwA9+cL7yt
+vDT2xVagKtACbngni2T04japcOIgdCWYZf/8Fkr8AyO4OnvB/5A/Ps6f2m73IZ1L
+VuygW/DDVIj1bXrrxXUYQ3rdSgQyKlCrNtrjqiBHKaILXMH0jQPNyHY7dPxtooqw
+XUpfybxggUEA88P59wUNp/UeS6MY7yqHYjack6yMWdegIOl8ksYT9ZqPaDwb3Tas
+N00LiWW7yd96xKyq4XEJOeLOW2c2WZm1rX2EBT5pDh9K0LxpATFKuw+HGTfWtklv
+ChcTPEKexvujKJ0w3GqcyLbjNw6HoyP93uw7OEOG4HAugLgIX6SGDlKVWPcneK7M
+ieLIvcP042Am+9RI5usp3pE0eUghZM0P5lzUSp3h5z1c1pkc5LGs7zCZ7CpgWX7H
+VbIDQIN5frpwYdhrXMNfYyD4oyJTpys231t2EugA5sFj4ZxYqWy0UOz99R6nxwAh
+kE/N1z6Tusd2ddK2bZzkyncoNNnOgiyQqAv0ECiV4vnq65J681dDddPsFrbomtHy
+n7Ex91McOnW5KrGusRhkmgQrUtPG3tKDBBrpl7+2ERkbjCEsSRIavd9yptDAfboo
+kCSnp6OhHPnq4xtIBGqJE5BihokCPQQTAQoAJwIbAwIeAQIXgAULCQgHAwUVCgkI
+CwUWAgMBAAUCUkNlPQUJCkElzgAKCRDHRs+p50+ksBUvD/9k1tvECGFgcs2/Qnbh
++8DMo4Ow7H2lvQ+/dYkL6VeXecIBvFW2cGsH5Y625zCUlZ3ZHWOFkSKBQK7JRroV
+D6OpNNT49kCAdtwQISEaJKtWVr4skKQTb+hsCLGQiWwSx7GtKEAf0Ehg1qbL4p8P
+zl8TETIBxPJfs65S1d3ZiNXDC85EfU7KEEgNRiZuwLaNruxBLRz/vdFO9bs/N9xV
+II4BMTdXCLbs41x7id0CuGmB+UTFnvzl/19ztkf+ny4kpsX6IjBdwAOZQCxEFxaf
+lHJwTHMX65lycpM46ENCWk40NqXOQmD1x9D4VeIEmFMnHFAKuDEkRyX6v71udxxB
+pkHltPwSJiorDTnwedDcp42MY4w5WeBCeYZV9Dzg0O726RffzQqlw561rXrq/jYN
+oXRMD9KvegsNoScw+xkYe70cee2xlemnIZ/iL1t0WuRTTbsn+dtaNGIAtX9IBir0
+1lviZIRO17ZvEuhoaY0A7rodI5jrLwC9ODz1kPjW2lDMHvc+wrGR+oS6ZvyVWJK/
+gyYxd1lIQrFG148jL9uqoYbmsFmCXTbp24ueS2mvNPcMXkwxx6F2MiU/PiwNIpRZ
+FcccaTasKOvLDTRCRO5xn9KcJ3gF4/5uTSNbMtph8LZ6yg0khza6KyURxn7eeDat
+awJdoKszYtXGOwH3+MyImHTroYkBIgQQAQIADAUCVtnwlwUDABJ1AAAKCRCXELib
+yletfMyjB/4+Y0e33DS+FZAtwPgUjrWGx0btmAaFUAPbSKsoAODyJJMXjem9C3So
+ZNUq2nbaAS2EJQBcdhFqWSNlkDGHzR90RiqrkT1hRIlvXZK6ejV06c0gnNtk8QRa
+gfebFYz77c4Go7xV454jN52wMnG1hDNJ3FTd9Nk8/3Zaixym9QPLC8poAjtPQcxw
+s9+ImaZtkSWDqoqNxteXWg7x7sJRlw9r5vEkn2nPQGheNL9HS7CYjOgwxiWbsxV9
+Zs3H+bg5pc+OIFcVGuqWs1HcvjKAf6qjriWzlsOYnD9hwuHxcLrKvvomEaAmehBA
+gW+uhdvXjJUMIZvnIBK/cZgpdHseE5+oiQEiBBABAgAMBQJXpyMUBQMAEnUAAAoJ
+EJcQuJvKV618r1kIAMKuwrfpCeLVA3yMP2NzmE1pqoX+oRenj7qor0bOBEXQMfBu
+BG5H2rY6TWekUYTsr8NmarlXMTt0hdMQ8leyKPd6VTBjEzo2rznMbSBy+8x0SpfV
+/KGkqt+RRNcdc1XW//vgMFCpGJAgvCsN+vcsQBb8UQtJQaQoSEvHxDMpX6EvCp/u
+bcDwHfdbHgcw2rDqQoeo4IirmQsCDUJtstPNrJlSp03d3DxIq0orwyYHpxuWL6m7
+hdDDkGwNULm1EKP3oaWE3FQ2wVVyq/kUAkdOc6mclt/51eRhuBhLvewKX3FPgmFH
+oDf+V2LREG4Wo4Ka9xgW3HmgTli2LPPt5ctL6BCJASIEEAECAAwFAle4SBsFAwAS
+dQAACgkQlxC4m8pXrXxhHAgAkKUbx+enyM1SlecwboacHu22/CEve3lZYDr3JH0G
+U5vBF3TRBf4ycyMbYWJAffKPER9DuIKJfXpNcYdOZiVlAIYXw4L9YzvK1mDq0wa6
+Es0vCm1noAJi/+FUkfSwxGL0zSIIYOakttI0LeZE23dOPmGQ/RFNxLh2rsNvwL10
+xxDBkOZ+2ywhjpimqAN9Uz/I+amARB0YDLeEa/sI+2/S5k274ETwhOTBOHxOWhKz
+ww5oge9FE9VM7ILcNO8QMrYy33z/p5BJEdQZA8T9gdGASA90/oH6qX5h2saEuEvb
+XdEUHiiQth/HTfO28e8cLV9SgA+u+OupUtyiCSYMkKGZuYkBIgQQAQIADAUCV8oS
+6AUDABJ1AAAKCRCXELibyletfPvkB/wIcLuuVNqYU2MFQMJUy7rg+ypKDlPaMFDw
+jNi8gd2ZFCwrx0E7P56rEIuD+eg3pZ1XDyfeQRUbgrSSDe5vBh6sO2vXPdj2HvxU
+mnWx7+vryoi/hZhk4ARJBt/mg++62Lglh588X2t+lZe2xPSipTBtbE2xodka2A/V
+UfDjqg+tyNsznu4qlmyAuYnFxQrsXMFyzRTIhou5PxxmhYCy/DGc26/ofAJVQcgP
+b6OHz/rg0GJitoGAP+hMKJtAkM8rY7+9KjD0WgUfmDqHcGL/Yya87jKfCBVCjqkk
+7I2TOOmO7NaiRBD87+fmbdhELmtLXFs06EWdsugY70qZ+n1GExToiQEiBBABAgAM
+BQJX298mBQMAEnUAAAoJEJcQuJvKV618HBsIAJCABMM6yVYTxK1Ulyb5y9h1K2VO
+khDsl/vn9uE4ZI3jk0fPsB5Q7qpApNfiEk7RKq6SY8YfqfQWhrC6HBgVvxyzHwqO
+huPfBID67QsGZFpfdWEF2YHPNMkaZpkutbquL2TDnRKHdFv4tDn42i1/7JRoizhT
+oB5oOy1fN5BVamd0Uh4XWndw5NDyQM36ZleHkXCRcqsK7viqtcwV9lCXg8/ZiI+h
+zTbU+kIc8uVX4iYtIMJckgpI1IT5hO1ZtpYKhoWwBuy77ZDYRcA7v/xNnR2GruJ7
+jjZFPRnZiGK8JHP0phJ6BLo2ncm3pKk/4ZnOOAyobHKfpHUpkFK65lRJh8aJASIE
+EAECAAwFAlftAqsFAwASdQAACgkQlxC4m8pXrXwpJAgAvhH75oWXpFPJLu6CTNPk
+EEJrDEXowqlN1l0jd3tdMOwggqPunD62hBmUtD05tgqBU2j+d16xp1uXD7RWKO62
+G87zvARcW4rHLAymvQ/uv3gpxPeE+Z0AaqbR8hebkydH4SShSKyGciBhUseqEeAU
+fvHxAykULRDlohZbUEFhJrvMbJ13MEPoJZBbsjZFdGKj2mcnL8lig5t3vg7E8AgC
+49U8C2CMvAxR1DsS7tMI0iqAwelzpTHKPBzX0XBAG39Go1It3hITo2eDbFrQofn8
+shX49mhQmpEpGtO+QywXSjHu5+ftKy2rnBnK3vtOQeBOXIPzH0nTJjUwAm406+qu
+BokBIgQQAQIADAUCV/4mOAUDABJ1AAAKCRCXELibyletfFX3CADCi4bA+thczMI8
+OZWxFZX6YNDmWyVKnPqxGVpJ/7LjAERWrSr3L60DumJtfIInj+W3KVmjzCoLj6Pq
+OgiN5L2qA4HyTKD5Meo13o6uOuDMD2pJiZdFgY8iUgAUGywdUZ3t4KtLhjV3w99x
+edqWRZtoljodVopogCAfOxJKcTMTH+eNagqRluGXYyRi1cRRikqs4ZEomYqBMYGd
+9jkzVyvt1qTH+zO70wEFtrnvFG70lWqSSOLo1xIN/CP2Na+2HGSOU3ii2Tu//fPw
+toxNhe7YHbeDDMb+/MaW6jF+BSRMKT9yjg7B8pD2fQ3oYiHgG3gxkOD72klzWRyR
+KxT5A37HiQEiBBABAgAMBQJYD/JoBQMAEnUAAAoJEJcQuJvKV618n4sIALAIc69P
+G0Vjsba26139dcCGLiilQJD9mkYP1p5NZ7Y8/CC9EgbBuJ5pvYJgEN3ppvSoFiY2
+oBzzavMp8rRAyf3ScNEh9xgD4Cp+KvxKFPOsalAKQXfTEyjqKvKxxcnd22aoRDaw
+rAB4cOoWSN+NRW4xNfdPENU/W1F1ZM4ff22YGH5/4AUJxrN7YL/cGWgLL5LT2tDR
+XahC1u2m7ZGRrJHd6OtGrlrrIftHy4has2jQ/y9DSgj55QBOX5Q9aidjPfXtYM2i
+k/76oXCJM2JOATFMjSsapCrVPLTm6ULIDgqcmPfDRajttD2QPD32dwzVbP+yMHzy
+QtPFRqoQ+I7Ks4SJASIEEAECAAwFAlghXFYFAwASdQAACgkQlxC4m8pXrXwLVQgA
+kuMaGQneWUvE0sYV2PApT0zewr7wHj3BsevUro3s2wTIl4j8Q+EXrlOdA2R3Mo8H
+cM/dqlnOiUpmCl+FfWvId/aZwHRQTtSA4wc06L5mWPdjdLqyVEGc2CAj0PVJF4YS
+7Hta87/WvIMJF9bj4d0HDmmmUbeMCTMPIETab2Jr8Qo9Yms03SLTMuaF3r2MkKOc
+Zq8iWFrOl2qb3zq5mVX/ZbWYptiVivb7lpLhkkbItkBlwlxyCfkUvx8yoYIIWsdo
+L09aXkI3CV0Tp05gpPkbHduiSVc4eMQsiyEmsnZ8+y6qk2m1EL1ZsfugTZWySsKq
+QqyCNVEl/TsQia9rSynIwYkBIgQQAQIADAUCWDLiuwUDABJ1AAAKCRCXELibylet
+fDoIB/9pt9ebDuX73HldRqiT7gH8B5NUlVq6FRc3+7YXR88g9teqXWwFNJ8PxMHO
+bQPe2iwcWD36/ovaTkiASXuzNt8ZNvecpBwzcVZSuYgPYyiV+eE/19G8Yz2RGDkP
+hVtDioh+pCnPZ1532oexB/GSjbFGxz2aGMfDBs7sbDlBjjj9JFRXC8/XsU2TMdzf
+V4CD3VkJPA5UNW8lL0Ly1RrmV3/lDLTbL01/tlMQ5MzPoFFAfKlzuvAqaAcT6kS5
+ZoG+YLs82XJBinfGJW2bb3plvYXYgQ8Biikb06ZNeRYPR+Wyp/w6xIQGLpEq1j8E
+REr3ZfrX2dNbDd9nO3cU2Jw425/SiQEiBBABAgAMBQJYRAcuBQMAEnUAAAoJEJcQ
+uJvKV618/mQIAKKuMo8nPrJtlO59214DaMIpla6buiQYT3mmvpZQVvndLTjedLhU
+l1vNaMp3DDaKXf9PYTpkEyd/gG+kneBoWZEkgT9Eml5O8DOxTcFrPXzWz+Wtl4zF
+9sQj7uaEdWOEaSbSzDkUc2beAiMk739A2DbLQX3Hb+NJuqQ1lLJbJ5M1m9JAYzOW
+QpWLMfQ7JzbWuLDAk2bIvCWpEVO3sP4litBQslNIwnUVKozu+q3Xg/579bg4dBXo
+b8K9yq6uLtBjYxp3rFMVuuMr3X2TY/bnZ9mbL5k5TU2yrw5m2Cttum7UIixps5k1
+ELu8fobDUW2p+lmMpxk4wo+yNp4PQegPmFWJASIEEAECAAwFAlhm9UYFAwASdQAA
+CgkQlxC4m8pXrXzucwf6AwJm0CLUdpv8ltrsXTMFyEIu3qTAflO2P9S8hT2aS8EY
+5aVhxPYn9D+fhvVvYmLca+Toc4AbzW6mifAdNVuRlloS1G1vQ0fo4VUMand2p+Ay
+ZB1wP/L3W0E4wqUxzmY3EwjIFKoabZB84lJuVNGe4Lf6OgdQ1LbHlFuk4RE/gaR4
+j8Y6Bdl2/PjsO7mNrKTxDMuwTtosSx4Y/9H4Hx9RHrffBdglpvp1p9QRZCnyfwGF
+UwYXpt0iScAFe4TlBP0b6wa3XhY1DSJhTf/nF/Asm5XCTDei61cuyCVRsjuA8WiK
+VUGJ5h0uQdl94CNFGKrcpomSJziOU8v0bu1SZYPpLYkBIgQQAQIADAUCWHgYzQUD
+ABJ1AAAKCRCXELibyletfJW/CACNAWXy81qdi4hH3Q6cWY3TSzZQiDQVk4OKEpGQ
+P9B4xveif/Q541cPEaQBk3DDmaRm+jpZAkiiG2z+t0VLqLB9ZZcirZ3dS7iB4Ccs
+Fk0HMUvVbJMHp5jUNnUWoKC9ga6iZcK8lNKksK3KZ40tNNPuWLNlxXD71LwXmdqb
+4fSAYliPeNgN0YZurwZa0QdvpVS2iv3OGMSdJpmx7F7tQkHb08bpWCROSAaXwjgn
+09ALxqh0knTc0M2NvNvzd8IJToq0n69J+UjTXqD6XlyCYlRhfokDVtrP18Q20Mrc
+Fg9KMEBtp509CRuuW8DP9V/T2CtdBVBYBNmWUTsT+IeqoSFWiQEiBBABAgAMBQJY
+ieUVBQMAEnUAAAoJEJcQuJvKV618kqQH/jdz+Bh9B6GU5Jlaefy40rRasls+aVDB
+XDXQoAyxLUgZJHkq5lrbBWQFYQIBMiiYBYwtNdLimmvIQ4eXn6RS9ZeziW78N3dN
+ZJNq9FsX/ItURXK5h5124xaPuc7yy1PBDPZF8km1Kw8kkwKjfhcPZV6aHqAZQliz
+KWb7m1jjzRQQxUFV6ZUFVTFQRwoWoLIojwy574HCL+K1uBHI6/x2C5FSRJWW/pYk
+DSrFTQDbQP+omSRyttDydBUb00bAWQs22I9t8Br9dJqpXScbnFc/dIVhFnOLglQB
+weCGUDsbUavmFda1aEvMBlVirmUWJSf9DYSmWNLgFkeN93O/X9S/lLaJASIEEAEC
+AAwFAlibCKAFAwASdQAACgkQlxC4m8pXrXyavwf+IDCmvNUixBOupk0ADtLGCCxn
+8zltjY0xqlIuMqktydAOs8CGeNyLfyzKxWHTcrj5rSYSMAHxmK0pwM8Dze/GIVjJ
+Y8KUZfssOjScrtyYFkQrzhKeXqG43uo03fDgjw1BMmGGvhEzf2JDJB66Zhpxzd9Q
+lTMRQt/u0Ym66ZV3HGmvJHYFY7YQ8UEmlkFaX2wqERYojGMsJyHjsOVmATVaZuJE
+Clgq9zYTQC0WJ6yHOA9BL+wXZuHBWLsnjRZMkgDT5K1l2ZS+WG/MbEJg1Kn+dnGJ
+3nmzP3aEx5+pLI2xc9EFcp2oRMLIfuhctC/JACZpNx7CpY3qkNWq8snquIJKGIkB
+IgQQAQIADAUCWKzU4gUDABJ1AAAKCRCXELibyletfJf+CACtNJtIWwDSUJODUI3x
+Wer7mQHX/pfw9+o0TXqJCBLJIn/Fhwxx7GUWdlhPyMqp9S7wDBGESCHnYAwlSpXs
+S5VP/2++OsgRg8+HYbQT1H7x1WFvC9oBWJ+DwlDzXuIUGU9TqJUYBa3qocyhK6bq
+Cg4LK4Hf4o4KPZKjaUF3xOcehqKwlMKvR0WtLEX6oL/7Yxn6nscykPSiC/Sjf6QN
+t3iNnB/XtiuNazJnCXrb5UqzMOEdAbhlMsjnByxj8iT2yI7L9rAwCZRX2lL3cboR
+APBazcB1cWjbS5B9Qiuek3XuwvxxbJSkFr2hupdMO0gaGZtyABcu00aXC1/4QsT+
+VHANiQIcBBABCAAGBQJX4uHFAAoJEGqmoTMyyAqcJO8P+wS7LnMoQb52octVirPS
+mD1JrCxPHl1uo+D8nqthQEnmRH+dleGojkCPqrDXgLydymYKG8BXq+HGKszVVDga
+9b1ewZvCJdvmMcIXF759kvglbLWaIVRQT4z51KmOwOYO4l9DWF416SRJgd0t35x5
+gtWoqiVsIxuC2F931KcO5Js+eYURdjblKxa/d5fWb8Mf5J3liLiqyUvD+iV+IS1j
+TJyCTaw7g/IPN9D0B+EloD2OQbiSvpoJ6OVb2WEsMgvQ2XmO+WsCNw16zqUcoY2M
+RCL4DUW2/hcU0Zx8Yg05Ap6mAnD72h86UFyrxlMXEYKy41B+bi3ndb3fr/hBU3yh
+SjfWXlgdTkGPftOSzEDPuhN5KPDP0F+b8u+qy04L/SoZrWqMuhRkHIZEL96U5WOW
+/CrCbhID5DjSrwr5inAp7PGIyc9toK7Wya2N4jtt2WhYGYzFmnDnNe9NVWCy0lF5
+WS+1Vr4IkZvrPT8aJ3rWlQgV1vaizrFvMSzzEY2qKSzPUAAvWRLvl4fwEr8YMufq
+otJOvShB8+pGMzN9FpHLYpA44vVD/ODeHDNtzo7JcoGfDRBfRcIYMABHz9x6hMzJ
+6+Cbo9FVTfppHz4YjNVG1MQzB8i/XKVA79/OfgKAda3HJ4VFVhGJYNb4hk1XczyH
+W/dPp2D5j4YW+lMLYi03s+IqiQI9BBMBCgAnAhsDAh4BAheABQsJCAcDBRUKCQgL
+BRYCAwEABQJV6oT8BQkN6EWSAAoJEMdGz6nnT6SwgFoQAMD/VMuvkql7kszowQva
+FWYliGhQ0VSn0TBvMUhVP3ZoUbmeGW8cdBHFPAUJNAl6V69TDD9zR81j7PHk7Cwg
+ys2h3Ml9xdsMqVCls7S+sLlo9js7fszSeeoru4eg+9zeotrHBg7TDBJOQpbQGqCy
+kuRK2hHz2M94PKm5m0rpvxLINAPOpY0jJ4vCZXumvHODawJHVe7ChTLLzNfJmtzO
+LkWeiCDRt201RxyQLXOlhsXTrUHIbNQRyQKCut/e9DGNPOo8daawi6O9rJpVz5o4
+WcuAY0ArbakWj+WzV/kesbjS2H4ISJYUYQmsFtzwnrZrRzgskYobUx8MPQQuHw5E
+FVwtt7tRKfIlKBemCuMiyEppz3kdwcsqNfF8AcYV55wsE2VI4gcm2G8t/fT0BJdB
+eEOMQWZTr2DfRrYNWRGM1vKub4nA9unS0Wk1UB+F5qD/IiMUwws7Qis7yPs6gbYM
+qHTEX5lWWqvCXFZSMRsCk3N/1qm/P2YvNZRbt/uBZK7Ud+UoFWFyAHp5sK1OskhT
+XjShzhVUrarQr29/87Fa8IFXafponIpwE5woQ55tysiOFbRnMxC2YY4U0AWhImhW
+4lDq1G5wNX8K7Utt7EanesGEt/1xTGmZMZhUmMoYkPP0O1FfJZTX3+iz+e1B01Rn
+65MsDRNZjGWVj8Y9Vdaz8/FdiQJUBBMBCgA+AhsDAh4BAheABQsJCAcDBRUKCQgL
+BRYCAwEAFiEE9oLNzDncD+rhFiC2x0bPqedPpLAFAlmv84QFCQ/MgJoACgkQx0bP
+qedPpLDUfA//ZDZRuL89ME1j4Fp21GYGYoR+WC0vbw74V7kgr6R2frCm+hZiMPIC
+9cnajz3rImPJb2AI0sv/7Y5+7uZCkedtO6/NptY41+9zdSSEIfw0FgGItUoOsu0V
+sR2veT9kjbco9TN9bLPeRliTjJlCXxKwZs2v7p/UJdc+dbe5lS5ajyma1p991OcA
+fNIVGz6zPqB07TjoSgw5aRMKXBh65w4bU/kTD42FkWsr/WtjsyDXFl+HJBqn8wV/
+hiVU0xqNJ9f3DmYw2jqZijOYnH5fPDxHDOeLcfLL8FF5mOdYPBj0cahSIOHulQ9S
+cRe7s1p2ohqqZMd3nS1aBSiNLQKvuFcOcKC8BfXHCF1tNYTlzfdpClSEz6hMJ6F6
+f/IzeP/gXDpyI56WaT2cFEAKtdW6mewpc3zCVk0gBzANIA+3DnkgqP4sbOGL9hvV
+G/CeAds/Q2+jQRM7pvLC2IUj9cVh0EOPSMzXljE9jVccZz5vevbd+BJUqJsrgTCY
+e8zF5296Uk533ToJnXTPbsel/XRrKV8Jc2jY8BnYYd4eVRIo9erK0kRwfqJ08t6B
+GBgxRiP8R0klAX5oZHPAixAgypl31N6U5MgLWGqlneTzoxs43k8cWF1baIWieowT
+bJxXQulKScqzFVhXtFVHA9ABGskdfcFQh1xEU2WLY3DieH5AmYFvlbyJARwEEAEC
+AAYFAlp4p0IACgkQA/oEY/B68xg9hQf/f76UzhYJzQqterwA7RLuW+fT4fIaT9ms
+poHfBilNORZr4I5QFFDhPI8SEnSaoMKC0CZPQ6qKc/go4rWvYi4mIvI3JfxubUaB
+VUUBwmDUJESVYJ5E8Ffvaij5cymeB9Nol2SfDPxwM+0Qpv4vp9aN7/Tgp99i7qqg
+1FYtV1WUmdO3nSge5uSdwfOoJ5/9PgptM7Fv7KShhJz+J5JF+4QFJZe3b4GxHw+V
+QCEsQOFFH7cBWC3yyJ03ckr6EYzWuQYUAqM5NbP2IcuCKxn5NJcf6AHVYUw3S3cT
+ukXDP+yuHla5GJjqqUy5+x228/cq231UEDmOnHpoS9HDLdyDXAT1h4kBHAQQAQIA
+BgUCWninQgAKCRAdbmluJN2qxj2FB/95r5nn7nU+7b5pAuA52dneOnARVWpdeMWd
+UXC6lWfj5Gm71TF8EoyesAkx7v9SzULPKQHyoCIJ4a4bfxgARrvII1pzOiKfRavk
+Yu31cfYRkJhW9MZdZaNqOZUMS3nzvxn+ATTExOUnkvsMzwyOSJrVXUL4rKGFc6g+
+KAuzOeYFl9Y33dGy6Ib8Cg1AIyrpekYJn5qA9v4zLpu/WmYEhiktdr+ukdQAjBYh
+dwKNqbktOUtOoFBoBSA4douoIYmZRuRkFTJuxC39xHevVjnrOLszDC0gTxkHV8dF
+8oXb7S5kEi8HyMiq3M40n0fPX26zLIhM/riC/shxPoklK1OlwdTviQEcBBABAgAG
+BQJaeKdCAAoJEFW/nIYTB52VPYUIAIBFEwejdXznvj6idik4RzTOOV1Hf3TXu6BR
+P395e6bedM4LNHGCx35Irxz3Qqk/FVJFfgKCmDZKVTD06wakSsOti5rr4j/9+Gkj
+kd7+ACtHtiJOurj4vbS8CuZcBnk1wqXUggtin4xDqzBKz7b3lxgT4pmj2D+eSgzY
+zs94KBUVYFE+RzSiuMfwmi0Gh8T+Sdb0udStKSMGOYzfs4VIf/0E7P8eM/fs7Fpm
+y/SAj/KiESjAaYRTTOxnYLW+9o7T7DB9TAkm2vJB9zkv5Pf0YDy3+wbqV8ij4Cbr
+2CF/MlPtPOE+ul+R9y/sS8QwvHdpaVmCwDzHE83US67Gx5Gotk6JARwEEAEIAAYF
+Alp3UKsACgkQ1Cv/th8jxb3KBwf+PtfSU/92x1YWp7d2qbXjmeHM4+XXeTl/Insw
+CTJuSsxQHNEAfcaajD5B1UrVSI+TR1/eTScaoYI85hBk8UfLeX2qxjlOhz2DOb0g
+FxWImBLrfjARBVPPWL5kgzPQjHsBEH5owlUzCn6XVfqRSir4dZX6OgSDQLzvYubl
+8X6sjRGanPPxeSa08ZuWjsQHdSfs75zxkFnS5N+N7AI98+x27/CMJHcDDEn3ncLT
+O2/8U6zOtlRC/5BwvyXekpz0iLdC05glFZrxbvLjEBMCF6qV1/cDJ63VYgii9O2o
+uU903ZeZphvWA9UBMndRMrCtJ5YapvAuaZGFBvA70BISYcCneYkBHAQTAQgABgUC
+Wng5XAAKCRAIbcKm1AudBGEBB/0VzUxLyhBuwc0ZXj2z+ZtFofXfYYY72lB+HON1
+EAKFP0BtmsscISOdyBnsgC4/E2YixFX6agWBaMnNoSMS53sJ/51QuA8mbxix06ZC
+RV+ev0c4YzL9N2OFpibmzH62gB+7m7a2vcke0Isrdohvnczc/qUCv1CLLN20CShX
+2mk/XkUkXfRfK1ahlHtV/B5FwSv8EZWE72UoS5tCVqDgvSMDhwABpnGxi02OUVgB
+k/wEN3UvD/wA3UmDr0FtSz9KpRLgTGfWzdnH8QZ1SlNgTTsLVFsRDFopuDqDAfpI
+6CVNBpvgAVnvHqEArNKVXUPLDMOGgeVmxvI7+VQ9ZBAXqKLoiQGzBBABCAAdFiEE
+x5dJCsk+2wAGFWgK/BwctoB5heYFAlqFrzMACgkQ/BwctoB5heYJSAv/WLq9c5y8
+ZOAzmPOURgOTm3wpdOnEfQxEAO4L+bdJPvtlbe3uto7AHB3QWXwVWO2rVO0rgb5g
+MirvqbJ8jRBRDMQEhw0m3quR+YFiihXJOZ00zbhwaeZzyUMQnl9PXDE0Eeg1EEbh
+5wLzF4bR+J914H9GNzil1aWvnipdeJbVn22MJDVyEIVHvZ+qKrGSrshb+p17KA3u
+n7SRzj40ZXPIIO4tv0R6ykvgfo2zGRlVOdVSPjnLmb06gMpl8nWWJ0sdmwEdIdfE
+2sfXaYUVNt9XlJ+mEHw5U5w9PAt5prnfT7P1PGFOIpmkr3xV+jHXdlYB7dje2u7Y
+YkeTF5WPkAYiNnJ0ET0LOwUyyUBpWN9ItR1CNJf0fJkPn4ZkcjdMKCvfSr7Qhi90
+E2g2iuJ9S9NQEAlCe+hqmi+nIx80Cg4e+Ge+YtJUwH4/Ii9EgZHMWNXupfnJYWlO
+n1AiYCLCg3G3K6DvFUTYGCcWV0tKV9pk1TgyzqRpiOpapQQoz9bGoUwCiQIcBBAB
+CgAGBQJad5AKAAoJEAYE9JDKQFW8I40P/AlUypssWWRZ5uvoXclITRp3+OR6xG/A
+Vj0LdXucBP0CJnDkHoKA9Csal4ix5VtUhFLcOYPCFqVACdKhn4/PNyAfz2Wshe0V
+TcJTrhU78kymEr9VPNVbSTkxWgrYn9tNeUlinNl8WQfOicbNPFV8ZuFGdG5vpviB
+8m89NBCEyF0MxAlt3j3NKG2WI4HIlghZKgmF/XyM4cmgg380yev4sTDEvgkGC/6q
+2kvcr2SfBc/JOrtsom/zdnU/qOTbc+6cStlqthhEm88a0NqPFudYCixhw5kei9Cy
+ZlbwCN8VxtVw8IvQZvjkVk+V7QyClXDmUTwOkhiL2koPbcznpf64kq7Uy8r3QcXO
+nlGMn75+hXWPNGkWMu/R9AzCECNz7AH4EmUZSRWLvoKCYVJNFzfUhP/Y41mXwMmB
+EDX7Y2oFhm37ZypJho5FmE91We1VW2ub3qY2UhY03SAlcPuFruAABhGKa9Avykf+
+lk228LjnTskUjPqVhyPdi6FMkNPrG11FsFxeS2ZTEGt7ZPZIkOdm9SPDkdNQRC1F
+FDFlifjWIwjufmqpB2ee/MFxNNPRMipadlBc5RLZyDVkUBK8Fkd27g67EItUg5Zl
+AKcOnCJQuzqVR1xsCpUvSFX0b1iLpl4j9ZGxTZO1CkQl0Kwxgs/u2vk3/E0Wllwx
+p2DwTGw8VA+EiQIcBBMBCAAGBQJadzXcAAoJEBkOX2s/V8OERNQQAIeXvICZ95N/
+q9ICmyyCHr/VRzlwGiBunTkaNf5GuT9QSI/cYkiMSva+YU+JfwhCRaeu1xhCD1Ve
+Pj/kE1UDJmCGuoXXnEAa/ds/wzFpZIVcqF328e1S8dylUFAUepQi1kjsyEKfrfdY
+ZqKDs8lCNu7fG5zu27BnGAnv2oGnxjFzAstUE6UNLKMFckE7Y+rW9pf21nFD/Pav
+5bfchESwc5rUAVwbPhW6fr9ge7mPkwc+of+tqkiU0CjEkG6OaFH38hQALmFGhiIi
+ZR92QqTjdUvu1C+wQe8hu8Iyz9EbAtjUXYTPAn7NuvZPOM+86xumxl6kRByML1qZ
+NoqVvwVa4rOS+n2YEiSBSxNTuclPgJ30GxDTDAhHje+iu+9mBgd3w9+1HHciv2sZ
+VJ7v5A9ofUtp9SnMzPnMKID6+XEv39YoTdOsNjaqdnLRzPzwzH4P4EglxZwn3Y4f
+NQ1cu8Mz4idbCR5nQWnCD5MeVQmu1m68JXphwPKvK2sAR4NnKKlB/Eq1x+U1UNOy
+lGChVqQKOkVrlt+dJBhUpDnmZ9gTiwIHOybsUVUL1XtZnxbLAgrIZgqlIjNgSLxi
+1tCH+osbc9yXlrC2ov2DWviKdk6jUoRah2Bw9JPkHQLLYpRKhVWndEznGVcjKmzh
+AGz5KyNTKNVC+Llh77HV2UBjymjwB7GjiQIcBBMBCAAGBQJadzYRAAoJEAQONxgs
+NANirUoP/2nF8FthxNQYl/WLqGcU6vTm4h3m0ExCJnNIZBvp3OMHSFAMlG661IZu
+PzbuWkIUOIU1dDOmn9pxryPuSRnjW3sdw8jodfaWb59jQNvUEHwXkE8G/0SBCjge
+MIZpKHOcdkuKpvSUsX2vU+Vydy/dUNnT/i27eOtI/ppmJ6TsXooVS9STKWm2nvAk
+Nqu2ulkHWVBUxVfa0sWr4fW4QaefSWrOFtqCEkGgCHG4RwlTAabA6iMewNEgRApe
+2INjvMf2xUNlJv44BTgwGf2QqiKFEkJVrDL6tSRMkFtkj9uYHhY/CFcijlA9WJ8J
+1ezhO9o6hfQZ1uxqpFC/MAoeh1dl71O26ndWvmmRud02gW9JJFZ0qQI7W3PHUjdJ
+dDui+RkPadxj3CA+4Iw6JWAcJ+RVo1MC82siv9p9LUqKACZoKgCGJR88GpUEWCtL
+z3NrEjdMHTFLzV9R9uPAdgrGvUvKByICXc8NirvQTkpvriK6HkySFYYb/OJqVqwZ
+NAs2evb3JrM+wnf/wTyCkcAI5RyXqe9zcBo9RXfXBYnOvg0F9l8RvtFGG94eQvms
+oTTYvO42awqh0GlgxqVvC5Iv7ssF7ep4WiwfuXdXAJpBDE/pT6CIGbx2pOViE/+L
+adq9kESgk7fZ3b09LQ5h00YZpWtgsNBfimfZ/5KBtqkdqBAGVPXkiQIyBBIBCgAd
+FiEEDNEXUELDi7EQ74r+4nSp/LCh0YIFAlp4TuQACgkQ4nSp/LCh0YLk1w/4j+rF
+soMh1LdHdeVljuRk3Joi1uq1Ln9hJohbrMQpuMuttbt1c2b183ZgJVo48zB8XWTq
+UK25ZPGQo0ba0reuKe7vTXbBg/Xz3CIekeWaOX4hjC3KupkHKyF0ikqC0ez4aoU/
+X9G/baxM2k7zywABM+dr+0AnQDGaq5HJdE/2f2N3TOw6KHdNGB2R9ylLOydXYMp1
+UBaEbCZoKTGTec+TwgnjLgbYrWHwo92Y5GB+vthWegdPaFins13skc5keO45h/Qg
+Cvg/AqQmJiWX3VC9chB1aYfAOCOHVy5zt4bXVzVWiZKv0ihP8uSJziz2uG+2O0gY
+Tpk2gTmIr1Om+/aRj+LI7fqC94zEqVXAI84upz4+pSo1MmktAPYGxUH3u+k/UVOo
+FBXEfOVwkaihIasjyNyoEr/6GpzY/1ND7YEkZrAb2sXN00WyfFCKBzqVYeNF59RM
+5K/7ipmHrcnVnc6t6k4NqWpv1sTxyflPF0cCXu3h7ZY357GHK0bg1BrZjA4qbIo+
+rN4ABp+Q4QryByXVGeF7qNsSNdW3DpzHQtFOa1FYE0pFmIK7UoWB1Zac8Yf0L6Jx
+Acw1rB6IGn4AI/gNYJLwlKjKMQH903VStSgEFW/Nz30F4158AyCoZcgzWnl4a13d
+8z9mLj8pkvHC9x1nFJ/OLbUW4s6+7bYMyfc4F4kCMwQQAQgAHRYhBNAsIwHLW8GS
+4YnfX19X/sHoJU5XBQJakyFAAAoJEF9X/sHoJU5X38kP/1WChqephIRdlxbri+Fj
+n5aefAEaDHSKjIPcxEbP4PhlSHt+KNMDLNQXpb8tWiv3q94ohkk4oqnrBfSrxetj
+cufTAGNpoPJXzm35BWhHzpN2cqXy9dBmWUwd6GB6O3w0UNO+7MXNBLY06Se/jWLM
+mBTn4Ky+Vz3cCwzuIypquG+i85TuSgEzkGR81tU11r4kCH6eiaJHXW2iuYKir7wb
+XE7A92Se/xubyX+CT46XxmEaEs1+CtzV6ThQQMfzt4TPMjYcOSFM8u8W/PfY8vPJ
+Ds84vBtf4bocFpspZsyVpNsscdBQJXTJVWetDZJWH6myMatCfIOp2jSs5oUxb8/a
+DnIoEwnsGF4ozAGdV0zW/ej/IRaCE7/JuEeWTGVAQSVyd1jmERaNcIbook/kOcfi
+jxMNU4HBUmy/EnMrmyWO2E5wz7mkcRMtIy97qHrp61gN9qD8pTxod7naCpNviwI1
++6hFuAyWWFLNTDBfdz1+nRDuPVpFsv+bJeSVjBiGZdzo5I0WMIRKViDUQebftgT7
++0ALZQbiWkykDG/HHEO/9XOQpv8/K2ZDLQDNUx5bL+8UlZCGAmefRQFb3qe1nQOQ
+L5MyOGdzR05GfK3JHftREphnQqS5gPihDainUaq2yaYucDEi8p9knVjXaxGXGxOW
+pVZR7VMuvfmOI3pWv+eJat+xiQIzBBABCAAdFiEE1XksTIxvjeg3eUnR9IOAsuyP
+lEkFAlp4NV4ACgkQ9IOAsuyPlElBjA/+JQarXWGp8VqZEFe8CTnD9ZRw4Y7Rf+Ua
+S4HYnajPTwcEFw1o8VrRPtWkJ5Eq5H3bf5VGhJusDksxu+3u1N+s4+nOQWGXn3sS
+rYqENoOKNa67Y1hZR2DNhwlRqgR+ih9Kv3dXgxD4BR4qYFxN+GQEl0wQ5mc9r2Go
+g5gDdtswa4wGJME6WwUlJsu9roodfY+hG2LCJV2MLG9tggD+NF9dbH1lFOHp/dSA
+xG/eTJTEqv8XEDtbMAwUiThaCo3oFa/GScBcZrFx71+pHOpLt5LALQmnJPC5sTqO
+cVYy2k/ZILJfGMVm92zH0s8tOpMOjkeMnjeAaDRCcOEBgPOYu3cdtWVzfkZgTqED
+kwZvpRF02gauhV0K+WvLUQ0A8fCxGaWG+/G5YYu/b8O16msY5b/4wJHgonxNlQnM
+zYdLkbyIhxolGpzruS3BukDvTOO5VNBgl7X0D5yNWlrPo8OHj2pxR3RPckFXk9x7
+D+DXrz1rnqpxSMgdXijPd5RD+iYeXgns2jNeNnUz3QzJf5h4REVx349dfSOTPfcM
+cqQONioUaI/w4QsFicLazxJOA6r4DJ6qcHe6/UNEZKagVsX90sPFnVklFuLCumN3
+G0Z3JhlxOlzPcWaMMpQ2sedfV8XRUG7z/qkwtr6ZaX9IOsBsTo5AbNJ9DbhEQJBp
+L2mc997FSd2JAjMEEAEKAB0WIQSii/QMPlUTcmYtFPdBqufcyj2DUQUCWn9fkgAK
+CRBBqufcyj2DUVmYEACLbztlXJRi8eijzKT/Yn8jReTzWjlzlcS+yXerxmJtY2SA
+9LLgnOLwCOm1Ve+N9BGkpQQKBdKfmWK+gt8oJqR+MLjjBU0FvptG6oRMQyJlxulq
+eRjIbOyQP6k2+JHSemiuupSrndQ8M/ANudfY8AicYfysF4Tmh94um3udqIV3oCEi
+x9fYaqkxNU2z75Lab6E51s0zv6XQoli2J8yPnbgrnR7LxtM4Ifr0xnXTNh2Nf8YL
+xsCWQSxZZ3ZXabetNqytZwYTyxYz9SVXasW+CN2HY13Vu6UBv8Uh5fF+U8Atg2J1
+HovevrawpC7cdZc9b4rlSu/u8oX/BXN6acBjpJMM/Ec/Nm7A7miODUlKaeZ4ha1d
+V+lkcCVsqAF2VExhK82be3vzhSPT8Vyy/fvIKeEgTqLU+GsDiJ/TQCrk38Rb8Q7H
+Vc8iJGC3Cj0yGzeMyCF9cGCYrszdVhVSSerZ0cqhFDp3EhwdgP/9LTF3Nne57pSN
+xQY9LSWQJ44FesewbiyGJqXzt7BwaLxst/qyz68/1YTjlfHVAPSNfTXajyP4yjMy
+hFlBQF0Z+lSJ6ae+X7BTvKGhLhJpBxJa7eHNHSMVvjT7wKkG7ERPv3bClawMjflm
+8YvLlvNmYsxKg9GMUStp1N6KmaPbnHtCnY4QBduWBGu9f28b8BMR9c7UV7jBYYkC
+MwQQAQoAHRYhBPuKz6eMcmCJw4rQJpYFoQmMY7kqBQJadyXuAAoJEJYFoQmMY7kq
+QIsQAIGGuSb52+xsex2yuBqgd/kYLbNjMoSOryQ1p8DVjX6uVzAhfQI5zf6edkQn
+laIwlhBjXV2MNisZRzrtt706ZYNHI2VNx+xeemhDTYLCQvf7fqQ3pDwVSNxH21Gt
+FsUaROnYu8It/wQUiKQ04PlDbRllTTg3xO9ddZJjP20gwHXA2DFFaft/qBrYUHDm
+wS+br6Kc2Z2YOF07P+XvdI1SraCq0TvC6rTCSLWCDbU0KfrhTaAVolqAJsPT95Mu
+M+dgbP1A/fnjq6MrtzRiIMG0vE27hgeifx/YNnrsu0b9EUMwqTEuKPhZC/se1ibj
+DOgLtWnuzQ5Esy54h4lo5XpzfkP4GPNpn4F4onwaY+3DYqx9ZMQuFl13KLKcyK2r
+GbR6Io5RF67pvl4YEKGXkmqqHyyTm+IC33ToHP0pfaU1lbTws9+yTC5kFdSnJcg3
+pBFqjHvPp4JhebdOE+dbLrZQuAAPhnjStHIf8EIbrkQvJgob6fZBGKD1ZaxpIa9P
+Q+34fnszLalDg21dHczgTpYplsGLJezhSa2OMZOEMz1ch+8fr5NwgeILxH7/u7VT
+84h2CFfXKKALPYfReMX4Xaz0A8fXhv9/ZIbiuJC1Rxv7f3EE1kMyMK/2nfc1IBTp
+bODtTp1k+cafZE3/zfj/gnLhVuBFUK+K/1tZD4IPujowpkiDiQIzBBIBCgAdFiEE
+CM2XKpR13PgSXc++uIj7sVEhqJUFAlqJhfcACgkQuIj7sVEhqJUyXg/+PVCXr5Xw
+K9aFOYuZoGIrZlg1SQr0anAsGuEQFAXE1Ytn/jwTbeS3813hkv85cesi1yOEKUqB
+fMk4vrFnC2z2OXvE06AS5Nr80KfuVB0V6r8Rkbs97Vp4tzDn6qavf8RVajV8VhFA
+6zIdbwnFlW9hTRuZMq84m10GMnF9V58sHi+PHG07VtlU3ImRZ67XRWLZ5cpIPGgP
+ajM5nsk1XPWaZFoRaq/uI9FCuNikNvLgPFagIaVKYeUo5adZq53x2ywJbkW2pBZe
+SrWOU8RyGKOo9iYSd3VSdETYFsxDRzt4XPJiaaBpOZ5HQWDD5Ka4EGLQcNWE/r2n
+/t4OfxZ5CZM/Nh+lZHNcWeaOIAZlBr0dWu+NPgkSZjtcCew3DG1UcA/IlaXtLYXK
+psXXuoPASVQOK/PtdnOhRd2eZCKDTflLWNzxaVmk86zlXeH4s6wV/9VgWaMvr34l
+iNmYChGeuO6ooPD9y9Fl08hJWjWTM2mjmbBKn4oT3DMKPbUKk4zLThJ1ZYaYrZFH
+clRlGr5U2ToW3s3NoWDEBhXkthvigwz3C+lcvLByfAjJx0hl5JtQkexVr/t0djJx
+YiSiKcJ1wrWGJu+IybJ+mcigX+BmEXazhOwDakq31W+gphmjZME0c4CoUM/Rdi72
+pIYCQo/XGU1jKP3DwNCc6LxRmrj0FmdVqFOJAjMEEgEKAB0WIQSC0RmoQMbvym9a
++UWe3MmR2atFfgUCWnhOxgAKCRCe3MmR2atFfghwEACaBDTIELFOtIYs72TifjN2
+NsS8g75XX1KA80zGX0PoN1GhBbhSicHlJB5NoMwf4GysgF8v1eS0Xh/P6gZRM0Yd
+5MdFxYCYSezTYCl1nbsunBdNxyG3MnXQIuV9vsyimUxdCZ6vG/dAfZwr2pc/bbRO
+KxRt/sf35fJATmLtWSXkwfmHLJpgJ1ZWVaTfB+mu4/rOdiq5j+SCCZ2ZuLRdmPms
+i3gzTm4JTX+Lp/GnLNIBmmEbyEeVdTpSMEGIBY/Q27LcLEWUoQiC4zdYhER6xjjG
+FOq7nZyjUg1jSWOoTSRtbcsMNdkgl9OZGqDhfwmZ5kHd7axXz4kx1mCJRmkGYtSx
+GYSiSKaXczRyypEA63ZHKpcYsB+ogkBgDxfOiqjLBkOlgPsyR8GcYy25tRFGNc7n
+EvUYDWaiMg7PxKMoyTqc27w8oIn9urL26aKMGmm2HymKSrphsk1kfFFlvW5C2WE8
+QDNkquj8iAKsRSIKuEZAW82PWipqEi54pu1fgeyHhYXM98+gwyhAiiMPeahgR5xA
+InxcouCumd5dTDh0umMqi60cq1P+DbwkORduUP9oezdrLPNpsToVw3C4O2OugKZR
+f3HnVYIRIde5vblul7oRNXBY+bLCVGUxuvQSsOv/24lh2yYQ+i0kozdacfMDGl8/
+5tGlIn5tKQHStq8pavR6sIkCMwQSAQoAHRYhBOUjX1uUFaK7dgu/GFeR0PrOCvA8
+BQJaeGmpAAoJEFeR0PrOCvA84WIQAILrE1ERjqS3auCK3lypsuku6cEZ9lsGsA+q
+TbwwkkpdDksTzzQ4nQjf89T38GSzzXqQFLVl21cNa+D2ecEVmmumGTuqq14jfS1W
+VgV/isef/QQb8izuYTV1vpzZcDcSC9RRL+Qmg7c7HIG3E7eZCxYUMyMwY51wa6/p
+0x9+FPqk73xXanmsxR9GbKbeBQqZpf33wibwCD88X8guiD1gH5yhxSiXnYzqEac4
+EvM8zW2QPkpif8MMcAJLn3L8A61b23dScDBVmBrnX1/iEyADUEmqAs5obs9kVFwk
+ZAXUMkpOLPzf/VSPB6taORA1fjYYd50k1z8F34RjCO4wswb0VDKhR6daNjdanEuU
+bZCnJhPZPyVp5dtjmDkVO4BEXsd5HCp+BfYbDwiwqTn48exAeOy+OXC2sjHiaGyW
+lt2sAapaxQ7xHCOI33oZsT/cCGjukTMUUgVyLzuZy7G2TGfw2zFsOO8BdSmTMYYa
+/H/TM4K2K8nJSx+N4kRDQQU6a+G8RG8mbNupG+w1CmzlV1VAxzp77EFq8h5ubnBd
+SDZ5XLm+wzw/4HAmqYoWnkSJctG+KLDSNxyTCiyaivBvND37uXStTp7XoyUPPI2W
+329OLAPEbr53VUBhMZj1Dym6uScmscQfK7MJhywSP9uFEDvalYeLkVmbaPBut2Hu
+EldxjQQpiQIzBBMBCAAdFiEEnIZMIeOlnEEje/9mEa/kZEWnlB8FAlp3cdcACgkQ
+Ea/kZEWnlB/15A//SarDnIzmLQD62WtB7JVMQxbzHQNOJry5mt/V62QNIwWrpzEA
+5CinpqY4TXsv+gZ1aejka4I6vHhUlFaPuGL36PFbWRmzWbd2Svlm3QchpfTwTWzo
+dwrnhk1NLHsK+/MEFexT9rVfOvG+myJpZxQPlIPnyEKFhwLP/j/pkafqXxKdGRO2
+Z2lv6GAGOse1wMz8gzerpxw6/zgWv6UmewWEqW8heQi3OfTH9qLmOW2gqdiGOuIO
+oPX98IAthggKyFZKZ0iQtJZ7bikHImNEVRiDSHTcfAlk2twG4v8uCnn74e0YBTMD
+298CFi2RqHBhQ4/ImGAf4OoGifaLpXEK/3OcUrFjxP1Kg5a8wmJnPRJ8SNJiTnU1
+GH3gZTEKgNotYy4spPDRMQ/Ua/1uaWWCCGG4RMlciPk5aReyPmvqP4ecr0ee6JEd
+8/IfMbLtE2c5tca+9I8/gIw74UgLvIZ9PLJDGqLY4ROXPhW522haNHZAeQg1QsDn
+KqXbZpfWE75F04US1CypuRkctgtbxmDOUOuW4fIoMUmmT210CE+iO+dA9sMQKrhI
+EuQCBAixpXG0AhGEzVuhBBRxqRqU/XlWrN1XD0gzLIFj6aZMTnakOEp/sh/Saxss
+8GVOj+6DtguPvCADPEhUiJ3G7FetjoDfLaiLzfm/XMRtMwzRNa0dPlmyZxGJAjME
+EwEIAB0WIQTICvLRxEwUOiP2b9nK+l09dP8CaQUCWnd1UQAKCRDK+l09dP8Cabnf
+D/9FP/kxwA6ZphSVVk1wTRSpu4qK7w/3LtpzsF3pwgQjHl4O9HGenh77g9A94g2a
+HE+F5RFbxhp6vj50Sr7qxDMvEUEQCia/F3tKspIhHTCCZpuTxix/Z4HNOr4ZOYJ6
+1/vAbVNVciTt/PQlGcHSBMQoUx/90bd/5m55yXR4dJ+Nd9V3ui90zntp1ixFVvIr
+YMJ1F4N1owLBfOojxkVO/NCSlDbpvDwBRdmu6INRLWJFC0G5HCaTkWBXavqDhJEG
+E3GIcg076ZGrxarYDWheZTIlnKblAVAgkPL0h/Desor5q5JWs3PlXSi1V1YOh8p9
+lC02aU4vbFaNQsmIfUHPlu5jhYQNA9hKE721HqPslATJk0HhLqOo6Cm8WRSDlnTE
+iIh2mXULztLdaNwquB/cHnzHIlEGKbOSQsyEW2/5LS1595t3NSwSOhA3/LO2m0lV
+J6UaiRQUidUwmwRWWWzxQwq0g0/MDVg4eOJcv/P7YQ6DchpIC7ppvG9+by8xVD3q
+Me4SN3j1JMT88AC0S4RTcgdYdDH+rPPnZw0nCcKz/mOzm/M026Fiqh4Wtxcup9C2
+IMan6vOYXrdc6XGTEDb66U04Gua2zLkbTC9axzdESD2O4hm6avUKi+zEjC2uCeg8
+E1vCtpB6e+ig5OZzfB595zQhRVdxD4wLJjmqSbPfZ1V/E4kCMwQQAQgAHRYhBHfd
+obaNBHkqj4XYVSNeXIz16N/7BQJaeGGeAAoJECNeXIz16N/7JosP/3lGtP6MTWGD
+9Yl5ysfdHgrrXrd045lYQJQ/UR99l/PWJh5pxlKynOmrqNZ5cUctO6b+EWL3aQdm
+3DQYy7dUPbuP//jS2wM+ds2I7UWA71QVmEENRfuMm54jYV05MY6osSuggwBNxdTV
+tMy7wX4h2Nw65ufTeZUgeaNbE4CLObmjYJ5Hwj3qpRV2izAeHSV3QDkfnydc5WXK
+DydgSJa+h7AxLAb1G9DzZcVChSQLUw10yNlaC2hIYRU9UQ0z+oH0r+qBgFZNYtJM
+xISIadBccO9Z+NTNYBsCgrlAc0TkMS4pB0aU5utKEE2V6X3Oh3cm57pkWdLaKpyO
+f/HnwUQ+E18HPlklXHiYM3KR0WszWQHMgCXp26eWAKJeLGt2OcWpEsCf8k26v2Dx
+4O7ha7HOlKjs5Y2U8ci6uOtHO6Lz2OZt+egdpNfAPGMDCy2CFuOsg1i/YS1+ldPe
+2Ot9okfUyniRXvCUbgMUXZZFF32bZM1OM57koycyc8K1rfR6cho1F1Wm6RZywkk5
+QSGqPGRIb2CGC1ww9keTf0nxG8a0tI5gIZYYQ0mCwpU0EGsX8x0SgmOwLAitxGlK
+lNjEUwnHV0p9gE9DmWNTCu7APANm75d2WRDsBhiLOwzieO5Y5N3YjyfgRWIUVuhw
+q2Soa3MtsoGGqCxccFC+PyBbt1Tmjh0siQEzBBABCAAdFiEEQRAEXuekMtZ6+sjI
+VAPFRkgQvCYFAlp4XKcACgkQVAPFRkgQvCaJQgf/ahTqVM/Q/cPG23cLzBy0AX55
+TGEmnNJl7t1Xc5WCgEm0ImyJgGdJU/ahaU+bWca0fyOgSLv/IylA0woOxWxV5mrn
+8/qoVkh9ZJsibdmZUvjKtTB2u5ioYW6CrU+ELRXWmk7Hato0/KxpXz4beot+9lNI
+fKVmGThP8YBHbMVQt4O2osmWs9t3R4eJuIqQUFuBTwfSSaXiFoyOy9qxIW5shXhC
+CsTbGzPu23xk/O68qh6IYNJeVlhet537MtgSAddGWBqrW6eQOGnkZS6udqmNrnMR
+rMBicHTkTeOQqTOL37aBQIjs5ajtauek+EcfdXcZm+VGh0d+yM+CJInFRYxM6YkC
+HAQSAQgABgUCWniljwAKCRAPOGKEwDoRYmy+D/9Xjt9nOuJb2R4foi2OIZu0PCuh
+apEpBGVfJHZlxC9ccGfuGVaORnCF8X2Oyavb1JmRajWax27AD0d7B4olnhVC/Iz4
+Rgj4ttE1BCvix5Ee1WI30njnIqoxkKLqJT8nNJzi9IVwUE/FBSB5eIgQiFRbaZWc
+g2U2J0e5JeskQa0t7qaI02utT38am7tGaeYolBSufEK3q3RujOGev0Dc5i9bfuzu
+zQIdqvKjo0rUqtWN0E2HuF7JOzaKLXJIu+DkM4HPgXnJCPBGyUuafHJiavi3dugF
+Dac3QCqv55MMAn/pPR25Q2sZ8vgNgcl8jYG3LGz5j8e2XvIyJCOsK5Ptd+Bq6YNc
+xjQm4OVU+ErVNrqkLqqQgnwXok5/WC5FScfRou/O5zkL7+AbnOvayU3DGNuLEHFK
+WLXSG+8u+wGSZZzy8/gtpOf9i21VjEKjmBeLAPg+2B53vj8lqKgZErwaW4fnjAf4
+FLXKfA1jaqXQMRnVsLpCII65WEV+LfW4F1+AS9OR0SucgqrynPCuEiMlo6eKiYZq
+W+IPHBmvZwLH9jYsHqudI9ihMeEKQHcKvj8c1yTA/mB1Q5NSA8Ys0twJrwjzwxSl
+TNgHzhV999l+wTkMAXIKKxn2l0mDuE20pOzPypfU/CEEtJxcvp2/0/5qncxA/HP4
+iz0k3CezPsGZ3ERTVIkCMwQQAQgAHRYhBMaAe1dmXT9CGvoD2j9+GSsTSbSEBQJa
+eKWYAAoJED9+GSsTSbSEyXYP/3llHCO2asV+XL/606i7WuM58e8liNvxf/FGZZEH
+mw7ST3IACWbehkBe0+GWZjf6ZLVLXN2+LkABl8iCJda9Xb6OB4MG5kUHVnyHH8Sc
+dhTIXR6Grpn67aFE3OcoglSmi+m3WelIg1RPUvgfMdPXhkyB/4GVQDq4zHKZUHT4
+KJmEGqOfQ0/+9/pRS347vKfYVnRSLjUNweQjR18rQ8q5Rd5KnuH24k+f7erU6mtt
+nXt6iYsbCmg/wjpx6fhs+/R2oCc5rN4GyT8EZwIbUCSpDKpcXD1YU0AK3MbvL1TT
+J3NKJcyllqlWl5Gn7wUcxASJ+2md8r7MEbBzrlv3nxB39iLlghFqnaocXiYWS6ux
+xGQnYCdj+awXMrE/kD1dKPiL0eMPaTDjq3iGbninJOXkSuyl6wqnNAmKjWuVn98i
+x8WUrNU4G8zQyKGMfBSZDgavyM1lV9Yz6cJ/7k9hhiqbe2dxY9PH+5HBy9gw9asJ
+arwPrehX+N/9aQFMoUbHhF+HwSEHu0U/tG97NbZRIyel+GIQYmTSx6iq4I7uyBSN
+dlgnew/qpXwg4vUZ8ZfMKxrv02IZvmCJ/KCFeoPWOT/DVf940j33otNpk10B6pcl
+rfT4c1zQ6IgRh2ttqAOfhD3/dT4ZVz4L6dtRNMUrPVxJwsgrq5lAo5KHdHNZEKYs
+hRQjiJQEExYKADwWIQRsNFjuc3ziLA75+jvoj+u+ICzlmQUCWnmHiR4aaHR0cDov
+L3d3dy5nb3RoZ29vc2UubmV0L3BncC8ACgkQ6I/rviAs5ZmPBwEA+Ma84TzCMSu9
+OHKePp3XuJTxvwQ7K524UiisCV3RAIQA/3BZ8PFwdfdcroZk88m/vqUQLF7DadKS
+56aGx1ykKP0DiHwEExEKADwWIQQBONqS7f+yfdJw+G20deIHurWCKQUCWnmHoh4a
+aHR0cDovL3d3dy5nb3RoZ29vc2UubmV0L3BncC8ACgkQtHXiB7q1gin7GACcCjVn
+X8dCgR2bGS1e7tfz37eeRdAAoOCqH2brpy8lmNYV9sczueFdGjcpiHwEExEKADwW
+IQRT/FqHJ74dMP60hhqUj9ag4Q9QLgUCWnmHux4aaHR0cDovL3d3dy5nb3RoZ29v
+c2UubmV0L3BncC8ACgkQlI/WoOEPUC5d/gCgvuSd1VZe+jfmdM6N2nZbcop88wAA
+oPkiBxpfmCk0IgMHoy/nztkDg6NQiQJSBBMBCgA8FiEEaeHuB/emqo5Kd3sqegaF
+Qh6JkEIFAlp5h9ceGmh0dHA6Ly93d3cuZ290aGdvb3NlLm5ldC9wZ3AvAAoJEHoG
+hUIeiZBCLl8P+wQnfZhSMz13XA7hQWjw9gOhP5lGZk4K9tnpWjih+26lLzYaEvRs
+XkfyWwZnTPmdeXTBqWldoz7MGzulGcCu42M4XJp/R1eW2/x5fjNdREzYVULX8xkl
+mJnVEduWKEInkQgR/CII7pVUJYOFnkUgV3xzvpuiffWW2kS+qDVRo0wxoZIbnRDN
+eVS1hvLuIK4oqEmEIwlZIijHO2Fp9x/RwWnG3hQMaguf0d0hB7E+WNNKQpg7wZK6
+vLQh7zreAnovh+8119aBYaQiTHgG24THsJC/lURybtXuRooNutj9B3Kl9QsQUzJI
+eyGM6bO+rSS/Nrj7h/RWsslajVcTD10wJAHeqceo2cwq6ldpROgov7ZxQM1g7vLx
+DtvCSdUnWqpcB3UDyVwIeamfTBL2Zrqa97bpGjBPKYuk/0W1szqNlswSQkt0iskC
+a+o7JO9UMkPpjEHhM7Bsxd0g6JTQn4dc5Jx4P0SIZCDO5FzDvAtBUYIC9Oqnoj8u
+Hx/MXVxrL0nkznZ/tj31P4lACYgDIbg7hVcjOBHM8e6klTEASOlxuElMC5UvLYlV
+u+yF2cfvevNdMWMl7ECCpqwOfI1Ne4H28njaj51SSBtw5Kehfp9CMZxLMDwA0FbZ
+UPNj3WCxW+HXfD1x+Q7Zbm2jMqdq2CQ1h0MW+Pfoc5wmt41lZGrY01kIiQIzBBAB
+CgAdFiEEBjgyQepwa3vJzDuXKAo6t+NgeCsFAlp5j8sACgkQKAo6t+NgeCv63hAA
+gTVg694Z9naYfDFR4hS3jVAnywkoz2eGgmz54+wQ7DwHIKwfGuQzqzuYOUNO8/z+
+dZhVhSWzsXmlpPGKOUtHRnyWHc7gQBSQKhu6VGaI/zs5jM+vUszV89yuR+//lBTx
+sgXp3qyAuPqcKv7jDCWEmLlrBAKgZSMYoksPwyLGzgTjiSxBLFnIYZYGAvSFtd58
+rcZLnSDWv+fwJvWmY7Q4UIFdS6+5g4FsPJyp0XUfHwDXyeYxu2QG8i9lhbD6J04b
+efzB6v5gLBVhxnoTP8Dpkm1Q69qcMKpYJWtBw984Potv6yYWQNmd9TNEEm4SGeC2
+Pxmzg6S2uQvZ9jsHJ9ARbL1w763+ZaAs1zWzw6RnzapHGoO7ehp5TvvWT/n4a71/
+utAuFvRYMFVLqFS2d1phtjevEAgrpMVwM96xpbXzsUH26M3tyoOr6UcnR8PrkTV8
+xCXWMr0xaS93GEcDuiHcwSuS1P5ciVsEkXbYAzGC9Gsk0hiQt6zPDOzDeVdeZvDh
+9Ju2GpBfKfaw5cQ0j1FfPJoiqDn3b+WTyB/cXO8xsPDUiaIQ06n4OwN470D0fy/+
+jQHkX39Vurb0hu6+v17ivIOhrGFQVHcRxvPnc16DH7W+g/au6MazkPZIryzw4bf7
+2ix0gSNmz0A30teQVOnNA6/H8nO9Jo6m786emLkIfUSJATMEEAEIAB0WIQT5+o44
+yp7gqj5QWr6VCw7hOCVueAUCWnmgtQAKCRCVCw7hOCVueDgwCACfGdEJMFIBLqe0
+plYCg/kbc74V+j4mSowhfFVrNGAgZeqe2FZ3jHp+kO/mLS7ycZRwBIW03QbZiK5p
+bV8wVtL+o1PrbvCi05ULU8dUc1bIsQ4Vdxi1kL60c0MpaMsb8OpKLvtTHYVEfC9J
+Vu4DsSbS76KuiVtltjURYa6bh6/naPlfXyG0qO4pdKxnq72n1W1IMk6ppMxlvwAO
+LGHJDEYj7Wbic0SA2xAhfAZ5hvD1hNCGD+N7HVOSuotaAcyYAHCV5RZgZPTh8ixb
+Rphrh4gmRyECWIEuYE5N8RkBAVc/kh0AaKFVhojSewdsXJ3hcfBw5U3XdTQYSjqS
+HBAOWSCmiQIcBBIBCgAGBQJaea9EAAoJEKFiEhGKy0zF620P/jw3Jy10I+MQIhmu
+uhvHntinUVYqdnwgzw2+7J950LrPpaKRsjYxJPc75Ly65pBX9JjcTMi6n+qD7q0a
+qLU/jZi38a5HIen58NL6V+SpPeB+gvJLpWPBWM/fhn00cUHYtYPD63AXITIxRTfY
+qyIPR0grtlO/gHTBkClW/7fz9kfpIuuho5m7TC9+AkixTYq8Eo0c+WJsasOoVEpo
+CGSUEt9MkTGd5hOlaI36IoWp3nL64q4R3eXvx0YnnZ60K1opzG57tO3sMt/dAcwg
+/peJsUG5DoPdMEXA863A3Ei9SQRWU5VILDRtfAUsXqF7CL2xhqKbJ6LbBdXuX3az
+U7Sq9ujyG5S18eQac1b2N0GaKf9O3lJF/A9uiZxA8HPe04VreEI8kgRjAPNu3jNr
+oR3C5UL8TVJ00AEn4s2fDsUe8yoKd96Nn8yhUjjD5JgPLnK22LN6xjzydB1RC+D8
+2cqMf6GE2ldsFb4+QW8Kjyxj5lJtQpPDH0iOXP/3is7SXxXaiRiaPnZMxzor2Nyj
+zS9+tAYSa0ie3VzCADS3NIjvzj0oWV1Ge5vq2qSq/ac1pJMAQdj4jej/G1kxB/Vj
+6wvrdHl7AWFD1Vq+FUgqSZJToqtQnqIVnXB4IuloOLCFY+Em3ACa1IusW4EWNGvF
++sTAWyg17ax7yAGYHXag6wX8wgIZiQIzBBABCAAdFiEEcnoNTdue2fYDm+zvhH9e
+N5DOCXcFAlp5vCAACgkQhH9eN5DOCXemHBAAupecqj4zGACg32CU2glzfd7SVI7C
+c69xqu46uoadlO8LIfu2W+rctvUc5uiY8O6Nyv901vvpLEXmhOd3wglZTIU4B90b
+GhC9geE+VvjPti7Zqx4MuDbcqMMPR8r+PEq/zpkZ+fchmbpRrTGxiJl5kf0Hg+aj
+4fCutXYOoU9j8u+gfKBHDP9rP7k2INoVujWuXbuvQ4NQbiMNAeduO7rBzefWOK/1
+O6YOETpdNbuZu9zhqEKRxW5OJOtvxwUtbtL66uyJRKokhqSFDj91pMYIcyBWmkC0
+qbTZ0XaNOao6tDBqSTRp7pmEPFheT5A73wVSJxB0ra0xmEdCP17LQKEr1mTlXuZV
+87QszrO9WZLEWBFQmhBbrFbdpwVwQIWhGj4Gc9bOReilocuWY0s6tzfFOwN9KeR3
+kLppfbVdRTaUX8aHnlOGGDiZpowtoxwbjMVsZEzK72WUui87piLQDukMzvd5oJ7g
+scXRTCfXECTi0XsdowTIhPYdihI8vWZX4+jJty7rdqttYNQtii/nuArlfkXELBLa
+rsgwvOgzmErhsMglGFfQGIm+00nVa/njgMihtm1Uqssg6RP5aR+MhVDLHnFxEdTE
+lnmPKL00EkcW8fMWseos0gPeuaoX9pLN5HE1oshF6HyLNdgs3in3fRBZMIBIV8rI
+RrRieeO442yxK2uJAhwEEgEKAAYFAlp5wk4ACgkQTqVo/D1q0VPgow/9FGbfjOyy
+QvApOY14sET02sQxJ3Xg8O0uXsPUo5Pqjj2Ay7VGvtXvx4lx9k4X4Yurcj/yBYjb
+sLmtZ3LAK1ALcLY+vlA2vTxdGAP5zIFOTU6Nwr3NZzALbgga0L7C59k3tEatVa0g
+fQ0eXGOfUsvMagIXTCyMN4wQntsNXHVFXwqgfHBOtLGnBNkBtj3yKKouiLDsxM0o
+uYLJHCSDTTjY5kTTYSsed4SWSd86iEXJXKWRVCI+W8dupDS+qFS9RcvdoJKgJx6g
+OKVTR/sGshJuDWHvKrZLscgQTVeS+iS24Du3yEhqAirbc/TYz/ptb3AFnhN3BuPA
+I+5oD2I3U6cN5xYuaCa9cUS633JBgP2Hhh+cERyTRxPONlWxtmzUNKyaViG3Ksoy
+upu3Bt3Cvalm5zSXmzLahATjbKQg/JMZokxWc2io6CPJZ6rOnegJsakSjSmpzoq8
+mOZHDUAv4c/rbtdE48KrDijj3M5VkRb6UYdB4yy7y/dT/tBeJTuaJ1gVSOyg6oNE
+AVCzLvQGByXl9DDOOaMFWt8Eu/jxa3f6MSAqO2AN3n00oqLBSKvA6/xPnyR5Zjb8
+HeJB5cRF/CMW4AM+Pi8VT78cB2YdGprS+8yn/Nt7kJCqGirN+A34zCialsAIxPAd
+N551f/jlhSV6CgaQqmBlYcsZt5AshtCrQNCJAjMEEAEKAB0WIQR39Cp6NEHuUS/Q
+heeQXPLEKkBmTQUCWnoBvAAKCRCQXPLEKkBmTVe+D/0Y/hBgoBMjvlA307C3qpPz
+Qtvf2g38ciF/DC5ddlvzQ+dXPO4cydfiERt1ccOtIzYzRYJ3y4gaMSlj5trpNAli
+JG9qmNlwn6BhAuX6sJTBR833EIQ18JvfR4rTvI79dyGk8oJQtNfmHl3fX45ioEwp
+UI8yDj1Ey4nA3c4NAI+i01aQ9cKB4sxbJWkKbBgbhMttYoTe+5DrnJnnnrUIlY0+
+ssMjLBNIQHHaWtclgRxdKCAe903kxwT/g/D/Y3irhoYPqZ4c/7CGkRZ7/v8l/TYN
+PXmvzmwMTxVB1VF2fPwwfuzOXXenhfRyG8Zo6i/sdU2aJ4oLCp2gVZ6e8jtV31OJ
+v+i2BS2KMRcJlxokpU1BzsNt4pB91eXd1rDCKyQEQvfeLGUO/OBRtNs0Dfy0ghLa
+kIorpfm8H6b3GeeWdhx/qCt+iGj6VY3L98y2PqGJsJ9zQQ/q25pUcxJNlC7IYqdV
+efFX2VM2e82dLVZ84IQQOKaN2vMk/9AeY7qJ319nljTDe2YXhLYygVB1ugAWFAhR
+KShnpIXQmQd35WeG/nvZq+KzOJLGU1uEaezOu7pQIBbtTzy74CUsvPtJwJ+TCVe8
+6NTOEJT7BG/oeHN9ohLSlfKmqGs5Mzos6nKk5sZqxpAet138xUaqGBQEublSdnb6
+Ker8Y5+UlOyGtoOnhbqRyokCMwQQAQgAHRYhBITnJDKlsW6cGs6NJB25d83PBmUP
+BQJaeggiAAoJEB25d83PBmUPBO0QALgXtLoDBMnq73tDwz6sLFo4OunAAJpQoQ5U
+j2ztMn0nsjLCnBXxGXIs2cYn7pg+VwXRLjgCkrSSsFcbmACGFed4rPIHUbdVGHLA
+9nAiSSvptVGSpc89H/pqQ3dZV7W2vvVUUXTtlrQQUgJMX9+YIOXHxT48IF30saSl
+o0xsl33Inb9o5LzQqIAIxucvgez20J3al35EtNKasF8JW2OmAoDbY5+kLiJ/Q9FW
+Q4b2sQWxHerJmSDgZHEfrVqp5oJwm34v5rx2K2ea3r+35IEPmIVHAKV/NfoJitdX
+bZcDb5r2Acl2vubmXBg5nTmFweMYzXSGGhbDtG8Jcs4FdPM5uCh1Vgl+sOxyqmDC
+NofLq7YaKUFu5eDtlfKPHd9m4QK/huNxt7XU+pePivVsowZh+WNfbo1ORbE9eymk
+vi9Q10NyzteYH73A0ZwzqvYv5jWEs14RBmSLSgzHlTL+mqWIIERxYXKPmwCawIuG
+qAIVdHhnplwDCZDMIdm0vFh7XAaSAoTEoBDQHsGyMLUG8IGnvklUBnsEslnKyPdA
+LWPKYvJlQx1LtglV7dHC2RZxJlcgBq/i78dWdtcddG7dchc61wO7cUIQYVyrTimx
+cotx/+9X4JRGwZ5exdzXSxeNtmhzmDABhVcE0a64Mb7ThfRn0D1Rhtth8zDBWLaa
+7R0H9UJ0iQIzBBMBCAAdFiEEz5sUCEdQkWxNj8rMOeRftgFBMeQFAlp6G4cACgkQ
+OeRftgFBMeTPPw//fetm/R70IwEvCsodVuFlUNINuEMnma3X89S01dIUa6CXnhgM
+TUdUPJXNEJjO2UPpVRbVN3HNt/YJTFw+uMZ6BUOFC6A1Hgx/zyifLuAwyHPp0Yz9
+FQ/2Vc5VIGXfS5zW/Tgp1arJ6NhZDx0Tpl2UFQcTetuCvaQFimRcFerhIMolsRLj
+JQ0HtXo11kd8bTwvcXLfPfMn3Bg0Ggek9SBCcjMSZtBFd+4LIiWSYO3D8UVW4Blx
+T8WIOyC+zypVFuawKpLS3g8P65t1DKLoYP15L+o5OLl4zUZNRS10VG68OXCQzN+i
+UN1eh6bhTjG27g7nJEyk8xufDVnhAgBf8Xr49DyQsZDIIv0k6/CzzQC7TNtD7EaR
+VCKqM4kU2Olupd4vQfuXmis6A69JyDfOx/KFnMOFYiRD4RrtAlrnJbzWJa1scYG2
+Y9/n8HocMUbe1gzNIe7VzNgo57+jhWRAwGWgxRkriSKuM8aIwFfUrbioChIhKvdR
++FrQ6InA230+2rfmzZtjyhADmU6DnmJrwYN1SxQne28OBRgAZMxReAtZq2ES1I/w
+eueoFpr0tUla9eW1BaLL9cIQ960/UsXXHOFnxPKBth9X3q4O2OP+K349rPUrqxVp
+uNVe0Swm3P9yn4otkr5ufdOijHWybtkzSZZwqA8GzEzDHd35kUD67omOWTSJAjME
+EAEKAB0WIQQb2IbyRv1JCHnU4VBaCbRXbegIDgUCWnodewAKCRBaCbRXbegIDgtN
+EACPYQ9vvzOFzikXtkvFJr6Kg/Oi5VuyhIQYOvSYdXSX6wNAG8VomOOrZyVF/F3+
+NnQ+fBWFOWtBzZvCmlPSr2ftYNXXmibtV/2x23ngRjUnIlHp6kBb/QDIKuxPn+w0
+n/bKhR8yvP2oQbbiATxqkiTWfPiiP/CTTGZD8M+OLk2SGf56q1Ocz48zkOpAMR3t
+8H+QckV/nK+7E3cDbyF/xYgEOcDjcxYPGhZmQzzdfeV0rXacqQU4LCe494ortZ7x
+yg8FuE4ppA8CAD15+X9LiosnfbXbNlm91eOFHkUoJmEFBlg1OEqwQqDSYll2K7Ce
+y9hVYPYhVVzzQA3qwNKRH/cb7sYpjz57sSPUQMTaxB21Lv68t4QBNPB82X8TH/17
+sMvAstz+jkoFwxztrlO9wgIozMu1a4Q00knnc0EW0ACGTcCLSs2A+7nanLVYFzpD
+xzhiOnd7mBYgHZusggT4RcNYKufro8s15q6X/9oqJyvaeni37W+ZnfOCWCylOMTq
+Tt6cCqwmIYdcaCl/VJESVO+lHXdSqmLYw1s7YHIftf5oOlDMtU6HjuZOwml1hU/9
+mf4EdMITet5/LWgootoi5Y1CiLqsUlDdDCap8P0c277z6rressFXyjzoN0NGUtsN
+G1KyeXdgQCWw2bb4JDJ8/YGPPVeAIj1q4mYftdl7PFpGMYkBMwQQAQgAHRYhBD7z
+/RwAmaqBVjR3pTh3rQXRWCzbBQJaejWmAAoJEDh3rQXRWCzbGXIH/RnFT4DeTF7M
+Qy21+ZJnkCO+hd1wedDIq5frJO3OdD79yZSwBRku8Ev62x7ohMdfF7p832w+Zo02
+gKURoGS8Sk+L4pFR/JvAr4xbCSIcQ9+zBDWKgm4crJEWZQBJd8dhXjFf8/KKL2Wo
+Xm8EEjuFeKig4ogUvJGkq1EI3q6EZkQwDkafml8D/G+/aKtVICA4QkF5vKmiX+m6
+FkHYIYtbb4mk6fHdCi+e6Jmmm6PINFvWf57OB9l4/h+FEIYZRpe3o7uP/CTJrpM0
+NV7nZ+UbErgSjmXQGkPt4LcO++ECCRAlR+o25gDq5LN5l3ey545ZdyklFCJc3rxE
+OsJ1glVjX82JARwEEAEIAAYFAlp6ZowACgkQzxEJ6mqVthjO7Qf/Tqv5H5NfPCok
+7nQaJ+3GuO0tCRnZxOezilXT9ErNTVkYioetJFIzxb+BH0F4tVkOhdrlQoxsKsz+
+beaoxV2TZRscoe39bD8cz77UF5RKnLwpaLCdE1C+O7OT16iaNzmN+FRJTxn2zsGA
+erySaVTWvf3UwLJGYd6+xQqSwHZ9tqf9slYoUAgn1Fc/DubHYHDfYLXFCuP57n6n
+JN/4e803fFysXf3Nh6F74w3riyKLJzONCDycwLDZeWar1hkAvTV3+B90mdWeVHsc
+VzWNZJ3ZFOEzRpTTZOlYLzhjW5+rnYkS6xsPHhk19oSdiQIJ2WOuTsHw16w71bu+
+5mM6NjffFohdBBARAgAdFiEE1KUj0HvqdLvSGERHaJiCLMjyUvsFAlp5v7YACgkQ
+aJiCLMjyUvueRwCfbdCvkg7pZfW0//5ftwTnwKWk2eEAn2gzJBcLx/XVoI+KQTKs
+OAYBSDhJiQIzBBABCAAdFiEEFlFdHtWKvLA2wx9Zg7C4xsvacfAFAlp5v8QACgkQ
+g7C4xsvacfBdhBAAmwDABySUs4Gfm8gNTJ47Bows6Z6qJk41T9VY2/rXGM+f8vf7
+KmmNlrr7OvlkMS/fYQIjv6GUoNzSfsUdzAqwKy6r2qkHCFG6HAo8GM3jcXDT+Gfv
+evZ0FQy7h3lHuMsF+GteKJTX4LiWiGs33ANtQkRDA5/3XKKIhjtQyscbCtIfk4Cw
+XVrhmvnuhcy+91HGF+rCF/dk3MDBQFE2yDMoS3gtMNsilpszONVwXikClcaSamA7
+DqmUTTaZ70+Hpfb8pDvDJtmLB5M8989ptbJ/mXG2sp6lbU0PABnV8LT+TVOiGAXV
+yYpG8x0qsR+VpMFkkrNDhrHh4CYkucWrsdKV0YOcTuhplUCKAGxF8DF6FV+SMMlI
+xOZVRrdzZ9uKVFIubEYtmXRTh5bY2sxABbhtTJ+cF7f7PDEjZ6Udaruo7ER9uKNk
+VqlC4RwEown5sv7QHjwG7bGgonxeTp25cV+rQ3vl254sfzicjfCgPAecHAZNtlXO
+pycwEQvul3gHsM7Uu6Xcgd/isSq+DsxkYfluPuhYJKJu/V/L8zjdA4VwIg/B2Ls+
+6d0n+8LlHvV8CvEA0B2Ty1cZ3dMZgWPEh6l0TVwfiPQXSvVYgFCHtFxXs07mPQSY
+DtAjzq/fX/a7PFfeVjyecqgQC4roVVaf/xw/V4K7shHBDcpEZW7E+KKXrouIdQQQ
+FggAHRYhBCVVK4nTOqb2gjAegq465FZCJVGaBQJaeb/KAAoJEK465FZCJVGaBugA
+/1A3CMXlmntqifggs991AMmlZIQKen8LvC68pZ0/fs4sAP9V/sBl/k9ZKr8o+z5z
+GlPt3rG+v4GzW0zYuvT8AN2dC4kCMwQTAQgAHRYhBEwLSQcLFANaDg+FFY2ee/J8
+vCqhBQJaexDeAAoJEI2ee/J8vCqhuBQQAI6+6OxLsh7RuEXN8Q3WVNIWaXdq1Bcs
+So+nB9Kf9PkXSK15njwMv67zBoe/HBIdgeG5ChtCGI1wG+IJBSTWRaJeP6wFg67a
+KsnHqguIt5vuRI1KKUtmnv4c0BBsglK7mTiXjopQwzHfgn35hv9th+w6QFWqtxRv
+RN5oneVJdy700tNEj32vwz4O18c0GTdd7nFZqEZiOcFJy6ueOnmV6HR1amBclbOT
+7JysJUfe3MFCShmQ/ZUJVkIXf0t+7jb4JOQtJ68Fj01mgF+qjbm0HcR3M9UyYrXR
+wYQSOlAzRwhThwiUssFQW5hueDWwxFomlCxOfuCIDocM0pjDyryKArrH6QcHOJ+O
+E5sIrZzVgjvx7eXJGJ36eL70Jz44HJxR/qqxp4DQQQT0zRkGnrP0hlbFO1L3XKvM
+hgVGfML2yQR2kqeHzCik0yiKPZudRY/4HAAhxM4wMKJZRCgZ++tMWj94MExxTw1u
+zoClHXzRa20iGddYgVW3AvIHgGLQQm8OS22nlzGczSr0CvFqAxQuvEAnlWRipYa6
+d9ahrYfEox+dGT3SQ1BC5QS+9CT18P72BEOaMIwaYY3suJkc5J/3ET8HZc7YcPiB
+AcddBfs9pzOriBvhocIQJQIij82Jwb6wiKJsIllGWimqxilXFcmWf1OYrWGWKH/q
+TBiaiEQQOPA6iQIzBBIBCgAdFiEEtfrvTBgwNxXc+gdNWFK5ST6ylOAFAlp7HrUA
+CgkQWFK5ST6ylOAB6Q//bGRn42WhKFFSkmIRlpEZ9qz7ClY2rYzDvObAvzbqBt64
+k8ffR9o3+ppndvmdML2bzqZ5L77YoSE6yg1fm2F6uJ2brbqJTnYacORqS1od6ViK
+aW8OJs2F4O2iBKzeF0BFk+73vlShbg0ZJkIXeBoW7pJV8VlZ35vp3VQgwD/JCbgY
+uJUOIedJCCyL8jS8y5gasfFIZsvBADadAL9mbYEbQRTI0EvFBxNMrytHyUeYLzbf
+31owUsPoHB+1IV17IeRSoY20lx5tI96hwFwwa57lQHpVT86J2q0O7mic8rXoKB+T
+DwSajeLiSoLMBTY+dZfyowdZqJiDTD1LdFWuKd73mRksL21PXHMQ3uNeFd1fV0bj
+aDZ0bk7iKFSBDhoa/8oQhJGBc5z0lK8NYgqV0EExvj3fwu7aSghuu69ut8AY4Gxr
+TkwH+Rqdt81KluJSyHE11NGLXR4okUfMRr80A0DYHaiMjQLbi/vaYOEI1WLdIwWN
+L+26HdfAGKt58AwKcpU0CDHZ5yo6XM+HQYaEgZup7CXpfd2XPqAO8O9oIOyzlxza
+KmTYcU+gECvNFGQDcSvtBg3sNrDhiKcnlLQVCXeRCZRDQOYJAp2e3eKRwxKZx/Dp
+uEtfgHMeLcqPZkUQZUrtsZcwnHw25+5Azb/dAVIQgENehw0SLH9Hs9j6Wi7PHXKJ
+AjMEEAEKAB0WIQSEZ1PLGSExQsVtyRj1yDwF2c7u7gUCWnsaLwAKCRD1yDwF2c7u
+7uwAD/9SVpFBq7CAKm+58OGJr/ZpQHrizEc+skTQqK604uKUmfi8UydG1509k61q
+OvbnHFZcTh7Z8BGEbp2z6xAQxfuWklESLLFtfD+A2BPVFdCPn1b11uw8crLvG0VN
+MZ2C9v7J92NFOAXBY0M4EF1CRFFLDNyxCUlMEx8f5HjyGyUi1ROl4SAZkDvRbUga
+XuLyp9MVStcWLFn9tXX4H8eP5oPO8WYPUmtOI55tfMW5wNvepOgL7YxY25Rl3laa
+umkU5MW86V46VOtZSazzrcxCha2lBxgpyU8jtqx6DDljRU4vKgKHBvuegkGK/LeG
+pDPt0aRDeo6RBGSW+AbCWiaPkcBdWDEZ+OLfSpwAdWzawCNGmlKZnrpZ49WsrFEW
+Pez9019a2FnEQtv960sjXkqTFHTmlbi36QZhchdH6Kqm8AZ3a+L7PTxmSRkXpXLt
+HAx6/b9pKY/7jh0xVpAB7eKkVcRn4JE4lKPAVf0aNYcVh7g8ncq26IW90vlHNIOy
+LvTEWjvHZxjtki2KjPS/n/JgSwxWgoMUFUoNc6fBuBOgYnEqH1s7CtlN8ITWcuIw
+S43U1HYs4gmzIKoiLbi+pSbK9UInmHSHkNCziSi+Z4jQudzzrMxyVbOZGbCpEF6L
+Ucr0udRGrKvhajB/xDY6ZSFVAOVeMA5H6nX5TrwWi7CIjKwq94kCMwQQAQoAHRYh
+BO4nFD/UwclahrTYPYBlOfqNGMo3BQJaeyWXAAoJEIBlOfqNGMo3WZMP/3NH//nf
+TInZ1kN/0fhX5DLtUs2Pp8LGjzTPImuGAniqXDgqwqpblHzDWzAGdsWHm8gl9u5b
+N2mE9FKUMPFq4X1ygQx6ZpT2KNItEwydAfLDcq/rElfbeC8ootnL98j5MN467VK1
+T+wOX9mt/lry3RLT0VdOYPVAoejK4yNaUgoBEa9uX2KGS4svapZ/+Ws+bVe7j4Ml
+52kR0cQZ20naNcenza/snGO4zHJEVN4bd5xiuYMzPLgeyvje0kBeiun0RjnqUt0G
+8vF/eaEeI6dVvdmhw9ICxtgZ+TTGUhbx7IR1Cf6oOq8AAroR/eMLM89IzCfAyl7x
+e+pzrWVcto7Ir9tP2zSL2XDGhDzkXqIdAci8Mgfxdiu8yqqyyv9JB2mzKC7viSGf
+z+mx/03LYEY7gj/DRHpS2ySd5KB4hTQVmemnnEh7CYr0gBEpxcgi8z+i88l+fwNk
+ZrtJi4Mmlerty6wMsj6rVYjGiJK0T4aXMbj+YCxYPXnwclbZnNSqDZBTj+Y853ex
+sDo6xt6hR10cuD0K1rNBzADqc2/iSMYZIHm8CT9kZjdhawi5J2bg8YvNJslhQZg4
+qCRRXOOyRbn9aO/oi7tiJgnnKehn0F3uEfICmtDsQ0FhjKbbBIgKD4j3OAmXILO+
+YIaxlFIOhtN/pkYUmF770Fpg6CvZr/NWr7w+iQIcBBIBCAAGBQJae0tnAAoJEE1x
+CkB8EKvJu9gQAL0EzBcrojoRQ0ISqzYZzeseI/Dh2vVe2clhyR7JOdJyr2eeq0iN
+M5lfpl5sdJ1ov5Aw/HgOOh0eTojQegDHfpNvgJhmdCqknoHsRM1j3vQTSbslhpxu
+JgSCF1IFqRmmoApzgoP/VoyMTf4oXXMc6Be9B5oV5Lb/o03CJviLeTWfpLJT8fHb
+bC8ChG6dMLSsqI7ADjklGVkkDzc5pgGxBZNnpPwVuU+9mUT6NcT6M/GWkAhuubKh
+XQKyOvrYql8y2YCgpZaz1KvMlXF9Ruq6eKEEjRn+2+gadv6vsTYMGTHuq0oASydZ
+zxaIlwce3Ijytbl/ky0D8q5sHWyrTxU5F04x7oomi72fKHxMbSOEni/oTsWPj78P
+8Bh3jJUJIQp+OHyOltj7dIKAsMotQMs42o58TLAYw2sPoV59ebIjPL/5b91y1cSX
+yvqIpWoX+3lROa5pjBq57gCwldfa6YY+fpuCv8i0AE8di7+aIo4G4iJinunE58Fh
+7WzB50KokZ/RdzJtAW54jrhmzJr2aC5VreF/BTMZ4OOD/kEX/fxOmehTJr8ebxLn
+ysAanvkOB4otKOylEqEeHYMTQIpXMfM0qPIEF87b/Myfizm2mpVcFOhadO3e55AJ
+lUxMVatWJLost7p6yVszQTwJB86jnxFhtbPcowXucr3xwwGzKsCCK/w5iQI5BBIB
+CgAjFiEEm2hvFBRNKwibEPKtmKq24xoB+hsFAlp7XmAFgwlmAYAACgkQmKq24xoB
++hvfwQ/+LXS2ZsL45E8QVvi9adHM5fAReLyYs8Phq0jv3s0JiSdWt8HXA8NzpbpK
+Bt7lQMLdE3T36dQpv8AJF85KB7Oc79he387fYLUb/qjkBqX44sHHzxQk2CvRa+KR
+ShHL4CcpV4gyZUyt4aPTg8lfYm9P68XNKAM0AlFj48o0szzJqbRgEhr5Fioo4oF3
+tXw0yo56cFi09fpuFzS0/Tc1u5mV1TU4UZM6ZSPZKfHiiAS4m1iiGuSZBrMyJcEz
+T7tcGejnaUhjn3DhiaP4la3ZQ3nDhaWeejtD7zTMJcU7NSdWFyp7gg03b891dKVi
+Bgfbmw88m2oMgmrCQvLaUSt3kRs/QKXdkei4GgrugO9DMLbJj85ZVF24cak3Fgcp
+EtACY6ZwCQfjg9PExaCrdCEt0UIZbo94ezrAuT3SpjMximy7G/zlkLo0nUt5cOQr
+d9Khy0UUYllxPbiqtDWnljju3RYYN0M2/I9VAhDQiQopUgOTmRZ1EeVaZ7fajINr
+3rB2+SCJHYHy7oqiR+Jb6bgpi541X9z7d0IHlAdi14TVIDal4XZpzplQ01aJwvoC
+SFqKIbeBkySLqOUYAslXDvLGO8y/MhjXDUcH8JaDM4S0jUTA8UlphEEnUaWZV8KK
+FiHAHUmFC//GUifG0knZqu/2LTvPeDUcShvaMx605SYgxeqdkuuJAjMEEAEKAB0W
+IQSeqpW06XMba3V6zWKSKWkrml0gWgUCWnvjDQAKCRCSKWkrml0gWlgkD/9LcWxT
+5gApoZjoIDXfugpU9DBfH6rDXXOrwyA1Fz7SI6wdqI9XA1p148kvWICmRyY5iMli
+F+QZEIB0Yk+KwXRZt3XuDMFF+HLlTyuupCrUs5CE96ZdgeabP1uCaOIxo3VyHe8k
+77BhGDDfjR9IOyTucL9IQGHtvxYLtbHz0EKgomJa6/7Tf6qEBD/SLonH3zOqyCgD
+OkoDUXXdiujS6kfPAjfIeISIkFAol9vhgxBxZzBhN6H98zi+J74tCyWWhLbVu6ho
++3vgKFLjxCtj8LPWkH3ANoXEvV/B0OqxHk831qVFsoWUVOhDqQ/FLRz6+fj/zsMn
+wFhyoLuwuObZV6IrWwaNUMuouXaMF4SGNF5yJbpMhWvkUnrUs2VReMzsxKEZmJS2
+7zIjNjh7fNiRujDF0DpdWjVWnx2TyihuTruwMEmSuj0wJeme7ktItclqpdI0gWok
+aioio+0ld0nxU8iNR3Gacf0j8Ln5Uahn1hJICPOI2QLva9tOmhVSMw1PVduKjhl7
+yddwtyOLKOG7BNEOblX+luOCabrs7wlUIEQJ0lGPL8gDOdcwvETwSXMr3CPsDwFB
+rPcmGk19VRui54Zp+8qOi7tUZ8JKSLBGy2pEzP8q+fyLqUNRDMgYgjJnO3IR6Cok
+Lv2iu8BdW0zip+WlKB1EpJCtGmXP8u/8ECDGtokCMwQQAQoAHRYhBIR/xcQzfZzb
+1HO3pgln/SWNZBT5BQJae+MYAAoJEAln/SWNZBT5Pm8P/joEIvqciiYNDGrFUZXv
+szjDBGoyfJC/SBLPEmk8tb7JFMadQ8r0lvFBEFMNawQceYWvxxHASX8twNpgPAni
+Qw6X4IHQI6XWFj1zRY5oz2cH4OgzFYaUACNmPrrCWC9767JxlOrqYWmeVslj7Mhd
+9Jw2zbk5cVaQtnd7I3JulNQerEEgm6q83pAQ1EgTXZlBtHKsjAXu5EZvysKbb2BL
+m4gueatccqZu4gMR5kSIhlpBvOYRXixvV847E1i82cN5s5zD4IYGYSvOo0DuGAjW
+cE2qSSOvo2V4J/sCCYRP/ytzy4aB8ndLHxQZfLqJGuuq87hForo/PTRsx+/SYBd6
+HTNLP+q4lTnkr2465/Wazqbgp4QuWA4s/uu1a4k2+zOZ86ikHV+9LzLioMBZ45hB
+t8+njverNcq7oN7JZwECJVBDd0PbBzK198ZVkD8oIIZN9D8NaEHahrxh3P0TAvgZ
+LA+Fp7sxy34jVNPbnL3mExV8xUEkPSD3/aWkmFI4EeZFlqa1VCM39+30S7ECsHYH
+4wR2b2zls4H4hEC6nJjlIzOvDCM8LXudOm73r3uB6CUZKxaF4fysqFwTZ5qKWUzG
+KzVTn0lU9sknEDcfnkN+4KbjXHURoNMbTIUcO/XjIx8J+isZCAUYRyZXJKETmWCe
+qP9DhNfsZWa05yCgXb9/zY3liQIzBBABCgAdFiEEGJMatHIMHqPCi5Wzd1+0TAxq
+0I0FAlp74x8ACgkQd1+0TAxq0I1pNw//UgDP3gXrrNy0GEe2dcToNhmRUPv4JdYa
+YNkgvmO6HvEt9dq537J7+Dim4chTxVbLuoL1sb22gxtE7B/fj87OaHR+Mi8Qf6bT
+ee1l7CzJJkvwvZ2NegBwJDnZyEUl3xzn6Okrye+kUP2FADG/nXoezPIp49dNWV+5
+IB0xpE0yla4C2JJl5WfON1pNOOh/vbPfWxQ+jO+8CYn9exfdmE7xj5bsOrt4Fg29
+7tR0fsUtvvcFniw6dZH7q5DI0We9ooBRLl0Xv6rvRyO/rIEo0B2hxclJrlDpxDTH
+FpQafkzWh2konqYPSX58u//xtlNU90kn+FZBqO3MP4PF1S00gxT7I2UQuZvHsP7h
+9Ue6oMjuRDz9U09o984nGO5ZaborLx+syeL3m59UqNRxiqyjBxNOHm+zCGgR2CKb
+pCkA+7QpcGpA9rbgaF68AtYKarWmqQHexeSb+lRTaC96sBGJL2md/UqkEwHBWClg
+Onwlny2ea2TuCSIG6ONDTAsv9kjSdilrgoIe8f4ifW1WcLQ68omuyjUES5ksluKb
+BME76bGC6PzCpvOp3Aj+z8xsz33EKHgHywuGjQ7IECg+7IWEDDIixaJTg3eZGB4W
++PYFrtFlPrvPakUIyGtGIuvN3p/8Bvd5JU5/SgJo8BQhHcerQDkEHxyW5efQj+rV
+EfXuSLKfbKyJAhwEEwEKAAYFAlp8dRwACgkQqchsjdOujTpRVQ/8DOiOSqp2qNuN
+YSjOqXoKVMfwv+HfoqEKcGM7QzW71L5D6ju8vdKDOJYifV8I6xtD5kYe6k8QLMhM
+e50LEYw3q8t5KekfZiv5CtZ7KtGvo1mQbxbKIc3Cg4vxMlLYwbgsejqej43aprrI
+qg0gBk+p4wKzQopfWv/+0tVBhxCw7MuVU/mgnPWXi1jnOO2CRZZCDKa6HkbQIKaI
+o9RKJAgse5ixuMpV9aIpvozNoUPd64RoqmEMFVh3Q5eWmHle6iLJBkaJq0psSeJk
+pSV8PzP/d5H2O1lCxrZSuRk3Tx94RaUJrRDBCRE4gg+ME81f+k9dVHAqY/j9/U6y
+WHnwuEQHcK848Bg4HWSsX/CosdYB8+o3xVACopCmfynbCzwcxM5qYcR0JwurTUZj
+KN5HMFHbVWWsx021m9kwZh/1S6cBOsGp57Ff8oqEa/o5qodSjv+nddXsJxV5Zroq
+UeJgnl58+5TrhX1pH7h4EF0qsPG/VQkjG9uk7XrnN37b5E+62FdmIgKxv17ZUzTG
+LpNhpG9r/0hqajGE93s0OK44edkYJ83NOb7UIsKkuRPpXIYxnOA43X91O2wFHddh
+N6proXGQFTz/95GuAHbeBb7c4hWXi1hMxVdcDH0MCm3WFWrLIVcqMr7AhDcLe9qq
+K+J4zD7zDQawMC0mELfBEF7m8JmzfuWJAjMEEAEIAB0WIQS4jxaXmpeIEoGTRVkR
+PiSk45mvGgUCWnyO1AAKCRARPiSk45mvGleUD/4rXT78gwdOVNSNAej/8setMrmA
+jOT5t/0hW9HR7KHSqw3z6104gP1A9HMYfORbXSzTf8wZY4hVOkWa+OVywE79ErhM
+CaPeluzs63Rq+R/sUGVgP9uRX5QGRRmOjvizB9usUPASLNgfbgD5+CfvFELw8208
+wXEXwAE/H/+xuQj+kX7cW+5Qty0AFS/b7JWI7V0pB2Qm6ovhqBraLRB/+P6QN6L6
+PeI67e5uBkBXu+DzDQPCHizgFHEjwpFMyVowWuZXOcSR4uOVj33qprnhfM1G9spN
+WjFkcIMgYJtAdqrjNYKPrXUFGz3yGVFf3oge2/RDwFADE6Q55A9dy+GwKkXs8MYe
+kKAJSpSZmn7OCiMqz3yjRXoqG+O+kvvwVZst5UY9Ofqz9lvDd67oYX6TOCKpzIsH
+CDzUUeFfb4RiarzggYlbThhp8v7WhpEZNh2LJwxqkbaWfjQb5d1nd+NkVG7oX0Ne
+qMOmDCnBxcC6Ql06HDuTFLGYVhoCqmdU63k1eIYDTLVmZxpamuFHNFXomMKtxjht
+BwP+BLM20UhzZrsvXHav4nN6GTeqv7dGY2LpfQYE+6Ge4MO9aMiULobsQgMUc3KW
+RS626N7Ev+JbIAVo+ljBVmC7nwDi8mB7e5EwVR7lfBOXcIbXwwGKIvR3TwKSgD5Z
+NM7H/JDWfAMU8oBeIIkCMwQQAQgAHRYhBHn3MIZ9FvLbrafNhm/c5IcphfhFBQJa
+fLDAAAoJEG/c5IcphfhFJ44P/2itaW2BmSnMx12824fc3VH6q7LcfSw68fM7Dbyy
+zxqqG64zufRbuQgOiUFTn3S8Qtws9BVA2+4qejhF8g56PrnGnn3ur5l1GuG6qqN+
+8+4spCm4AzAAUE/cEyXMlLMs5x1sjeWzdQVcfbfoH/jBrn7/S4IZ6j61bPhBR9ST
+ZVMkJMFS4VKQOZb270Y9mfKJW1a5w9thPxZimxorIOC5lMkTcQp+PmiLbgkn5fFM
+/eUaFk7HDiQZvHcPZ8S1227HmWYiSdf2UdyOeHBHV1gyOQokvUSUzfPww5z6dIFZ
+nxIOKAccxAwiSdeGWqyf2NI9KRT/n2imGlYm7j7yIi5MufwGdSI1YViNs0KMgAYe
+x7tglvNrJ0KNzYpYtyFSSF/75jBT6W9bqS+mlBTEuX1Kv1U8ssdkcu+AiW7GjKI6
+CvGnBMEdrL1mrjyZVNZbq7NAPGI0khrXu/PxoWe2oc++p+2GhbicGHePl0xO01L8
+wZMKeTkD6OY8kSx4XdnLIdVtBP/U+/gzV7mSuaggt2DsIaxRO+UCRssAKAvuBVnQ
+W4pnC8/naWx5M/v96DiwQEFCwGfJkVUqo9D4r2orvbZhT30MqqAQDDvmSviNOayb
+8nVwEtzAdI06RBV3t5EiiOpd3fbdORu3+hBdXVLS1J8pKh/+sQUuMBn98q8oySMw
+TG4ziQEcBBABCAAGBQJa4uQGAAoJEM8mXR8VZjHToqkIAIVaJK4v7R4rWW3RiKdM
+g6wRDzVtRk1jmexoWQMg/NoHxT1htwuZc6vonbuDQvTget0rEDcPyZUYXkNd6ySL
+Kd0KCTtdfqHwjFDoFGag3XRmQ/cvFBFywWNDAxW+M9ZdAvb0kbpn1wWU2bdoICxK
+IF/+bU7jH+NqHHjN0V0c/LOhgYlYromyiwVtAloFsfyOAhc3ktpuHEL4sFlsvIO6
+RkG7F9bhOGhQecC3RJw7nkfUSVkl9Q4Gn17LOHwSLajimWKwDOkjJxF3jdnKoRpu
+wiJsIZZSCursIz5sQHniRIgH3kBl7wI2/gc/kV45ja3HOV57U4T3+jx6ZX1kOQHf
+Fx2JAjMEEAEIAB0WIQS9C/WxdDXegeNdXq+lMHCKEmHhzAUCWn3C9wAKCRClMHCK
+EmHhzPM8D/9NbcCyxZI6pA3sU5ZceFPF6yL+kgCZiFEUf6498gog5s9jx9Lc5IeM
+MlDGoj1wMm/dNr28aBqxpzyzsvxAbxA96o/3oN/HlFkJ8S9coVAXLxB7dzXZI5g+
+1FId9QO75t9k1PTxsvbCHLGRzKGed0w/UjUz3c1ES5R6zQciyOCcpAHjttCvRti7
+azMGs7R696RZKw1zbm4w35Ed39yM0tFVl3ymyhLqrpWehtinlXQqyPSd7L88Potw
+H5mMvYlK/2LrqctzO4nd6JJpVyWog/FZNUI1l5BlRTKLeK7qLtlhokGjvMPbE+H0
+iOPRJSo5Rqo3CDSGYO4RyqHTRDW1kjewATUMgYhNoFADD0lPFAFcIAaNaJTnCgUo
+llHQsqAElR/L8KF7V7rNzAw5k3U7ezcmDWL5765crD+50hx5bx1wgTjOEr/oj48R
+YQfB0IthxKRYmU9pv7ZGYatS9IwrwrMugIGfstOz2DTQSkPk7og/w54Qp6IiTgoj
+RLOHF4xrciJnWIXiM5gnDrHhR3JKFDTY03DJSTXpBLVLnbmchOhvNoe4ALcSJAgK
+TQY1Ley+pVJXEWwkAcFhuJTJAFBpqtgHHcTz/OvKtjJYYqqHBmcWRVQrWWlrj60e
+F2vXuWux1gg3+9wgHg8ZJDceOtFreeNN4srF9HCSA9eAbNoehzouookCMwQQAQoA
+HRYhBMMxuj91+3I7WHN4WwbqoGbjl4MvBQJa54pXAAoJEAbqoGbjl4Mv+AcP+gLd
+QaqmNc51FP3wk7w+ZtZbw/H1NuiqjOiLs+yqezquPJKC+Dl4L1ZqzgfrCy4Lw3mq
+5xjoAf9duBiAJKhM1XqgPdw42qoRzTGerG/K6zISZ1rPyMTTQl0qHnr4nBj+5o0s
+vCPITT+0Ku3qIX+bCy3V56suJjN8IU6MLR5chsfw/ru4ujtjNtUqEh13PyIq4jJ4
+LEkH3dY53Jr49DpZkn7q+eNf/uTIy0Xrdp9/O3X6M7O1hInAXfdWIRtBCs84RPFv
+9Wn1J7w3ehCF3eu0H21BGkR7eKTl00lkNm6lVgvapbE4J1BrFo4VnIWr9MObohTr
+3WAAFXh/VzASHCAF+qJFEp8xC9mz6/lYTcwwZKxhZ1y3oQP73H1Au2fua5mq19Ai
+dzlec2W35n0j0M2Ruu5MHrJ4UIPP97g6wJMNoeEw43Y50uv7emZIZP9Vc8I+lZtI
+szO2FpYSNT649KCBupCDQvQvFBZfkGFZ/86l8mXnfklZot2Cb92WqzqE4fWXvyxT
+yEC+G4fQH7sSgqwTv0ovXAi8m4zXJpjAPLhHsdmmItLe6Z4sxzglSdop1L4NhX7/
+4URoGRd+9qGMGsPgVrDSrcn9FtbsQP3DfDqbzBnQdO/xqqqVkqmwWVQULxrfHCeb
+zArjXH+2NJ/S6zr8GRdDUg2AusY7TEsPE0655M7piQIzBBABCAAdFiEEvlwjIJrN
+2s6yDbCijIGJ8ZiMIWYFAlqNmsYACgkQjIGJ8ZiMIWacthAApQ+e9w0/lxVJOgUX
+lnSxK+oQcRowNhr85HkZkJoZ2ilAuU7q3Q4xZBXKZRk3t+FJnSlKpRILxno0+K9o
+i/Llbh2QszJmbiCsRF2qE3fAF7LXPwC0C70lD+unwYp90S+WngcKdwbIN+5pV5Wo
+UxBblRcrlltuMrb7kyAD+TVvpTpZf3cD25ht7J31i9Hcasc6qSDS6zx3gkXvMxqD
+Fq4Re2TBcf6jVUeTaosGUCXP1i6ZtSpz8KaVIwvIf0I6yZ89aHxDScxRlfCWEdSA
+f1OKQ/Hhl4ejAwaHYTyyOz3rci2hO9xPLfGfrjUYQWYaVNCTenhGz96cmxpW/W11
+NWAmwObseU2IivMdYl+BPwOazpqEnXEvWnngLagVCylPyNOcDlAWzYaQ2rMozC0G
+NHdgL96vO0QLvSlMDq+LsV43T3J9KO7KyFyILjxu9nkU/vU1wNOeyF2BRsAa910I
+HMcoqrnBRVO1cIUM+9ZtxbH38dtpzLU7GdC3K7knaDvQ36Ac4Ykzvkx3+kMLe5/d
+80DPuTD/49DKw7fObBqdyZIRwg4oNq1numZDUiUXbwlWN5uAAHGRyxeF3uu4sCSA
+0O+z1zF0IHp7YD+iiPBqglo8V/0/9WfSEo9IHsIDxZxKfBTOxcR/5IGUc8zSPZ8m
+ANVvySbBup9solb9yGlvKONDHoyJAjMEEAEKAB0WIQQx2VyrbYDSYiRKF1CkdiDo
+AeR+lQUCWn8qAAAKCRCkdiDoAeR+lcT0EACTPyFrnmy8TE/OGMKHvn0Y5H4RzKbV
+/QvPO8/CVmbluhY69KUtFPJ1/mn2NewYxfUNyem80rMrbdRQ10qHXjOxEXgLqE+l
+W200yasUiU4jgMkhd9nvAauXHE7R/BX2L7h9wqRFZW6XcY8uYh83kST5JwnW28ZA
+eU1UnU47oZ+va1jmNR63dZVOGy2Mzu5cZdMjBALnTSi/pojaC8503stkgDeQgQ7F
+LY5/X0PU1doc5MFTMJd6h3//YQuaWf9w7522qAYXIauFPjglOoaD207QzwjXOoEm
+67HqSQ1uMWBlafaY7ue1TD1roACNadtuWhXnHgaR8Sm6ohvWyh+WS+umQQmQtuEX
+H2mB/aDm7lBnHYm0LcznZ6iFhS5V5DH30vWNu58ta8KHAaeJXpO62x/hBjD0e0Pl
+DQa4or5ge3zgvI7v39NbsUEaKeu7qFq5HwgESCglHhXD7jlV5AE5lrxPXHUH/8wv
+11WSlm44b91w9lMW1OO4GAT3P57qbrxqlcNAHenPOVcWi9CndZah8ikylIoVzfWc
++3i8eppkpT4xT90saUC8vigB2sbGHXVH2zijbupfrX1J5Ww2BolGqpIMuTMblS3A
+Jtv69XPb9TTRw6i2F6joXFnSqQ1D3ei6R0qBklMCq4NSnHsE63bA8PUZEEHeiQ5+
+UotvA47/M94HcIkBHAQQAQgABgUCWonz/QAKCRATC8FQQUG3LIdeCACD3ZenjVm0
+BdmFw/g0XzsbKq1Xa11QqVEU+5nac1xtAfNA21HYDzOGCLPTfg6e5UPeozvssRCH
+VhddFWZTBptsxMKLlamcLO5s7yJFe9TeXU3BMzScOMuLe2gmUL1uroQGfGK12wTw
+fI5MD+Vuc6KCp5wxWfS+dSln2YKK9cBO9e/4mIYq1EZn/9Oa0eFHMkifWp6iOmQc
+RxMOrxHUZbIHnIEG9mBLwqwFt6cWxIHUcDTNSMppQs7px3C9ves65NG7Acx86mw0
+aapoziLSxGUKtVveWhAfbfPL+8awiBVWyZuhbivHUmhwrhvLU71LBfcrW+fbJuSq
+9pGXFfxsuawuiQIcBBABCAAGBQJaifQoAAoJELQPMaQAACm6IaoP/jXBM4LGk5fz
+k412IWuyIaZjmmq68ljH3gEHZFOfDOLSl/QgWn3yQsPgbqagYq8eneu3Du2BK1dB
+8WoAMOkb4HLbLXRmaZ1w36+mQXBy/1HbOx1TYK38P2pKNOK03F/37C3bXfKguKf3
+3dNddkqNZkV3h9EWWWqghipQRrXQ6y7Pgs3Ez8+/7aXSOBQ6k2qd/WQNVWXhL5k+
+uHrGfonnaBDGRUwXq2/xOxgAWoCVPFjJ+/NlznhItKfE5VyJWZFILnhdTsv59CYj
+CYdzOSC8cuxS4Zn95sdOhGkhytAqgM/8gNAzTF+e7ygJx6ibqMLsZa+hwSOYal9M
+WzCp+l3Ogc1KgNZbfH2rEvvYGMfdhKThmBlvl2AdXqm6E0Ly3jZ//xdiRykdRe/b
+7j9hLQjYTxOqGxOojHrdnEI+9xv6nxKU4AxGamZFUBUVI4X70dIdtJfrlO/ofZsL
++oAgV74LahPr5TSWRkLEun6HixOgIBXY16bWHwSBWxLtnBec1O7T1FnUmg/IdZQg
+QzrynKqED/5Wa7vY90uGitivv1CKWEBJXKL4p1x86FBWwkVsU5/TN5oCHMyQ9tkw
+0EepGK9gnAYa+1Q/FbR5Ce+RcQ5tnrtT5m4VUvRAzzsvDn/utL9gaphwvqOGSpch
+kKEZGPqmuSDdIYulDSdj+NGORMNp8gRiiQIzBBIBCgAdFiEE/8vSnzr+1FOuS54y
+HUD7op6zlhYFAlqMfnMACgkQHUD7op6zlhZe6g/+PL578mSqfLFixvtR8eWjtPcA
+K2IJyKGxkWv7xXLrCZkVYFSgP95bkAUNDb+hloy30SUTa0WF9GRtUa3glj4Gnbo5
+qL/4MEKv1+RdTy8h9BznkoszXDt3MhPEVYPTsVLSFDZuBAk9qKpl8IivtEXG6N9E
+hZ6MgixfjYg69gFUcdivJHfVzeeePMDywT2wmeSeQ1W14yGLuBpQcJKc7/oT6dMl
+pKRxoWecFDmh444XpkO4TPjkPWJH6gpv0j3pRc7/Y+bjk6Z6ot1locLb+rQPMrr3
+VU/dZUxUWebmdnetEOw+/OzhhZZYtPG62ZHMvj8w5JKMz4P3AzMNqEnk6gMHkkte
+EcF7FRO7aMFid9yFujIQCpJ8kY06aPO+IvevjMUfV2CwtNm110VYUbUXD0CHgNtw
+GqiZ39jM9cu6jWj51ZyeU7L3lrUQjD72A9aSTchf3FCLzeKioxL76sgsrc9cfTmF
+CysOGIGV7SKMqUGK/nFaWybyq8x7J8chavZsjiZfiLO8yubEZbfU0Jw/hZY9l+g7
+7CC+rWqahCyvWUZAladF3zBlgyJJyEpSJ9CdCMbECPYvurnQmHdfUgluXdwZKabh
+ufZYU6crZ9L34EYCvLAwuzvgpkcPViknAJ8jT/xLHTW8HT0edXx2jqwtiHJLT+ss
+elbwWrU+szHoF11SHySJAjMEEAEIAB0WIQSpzmFt+5GxQ1uW4o7qc+YZOYgODgUC
+WpQJawAKCRDqc+YZOYgODhWGEAD0eXZfxR8VjH5Rv/gjHw+/fRD3rLP75kzHqWoO
+7HVp87apfB+XCmOyHeiehVHMVPI/pS9KsmScNz+YpzpxHp8rNYEMfK2ShPjyGkoo
+cMD0rnDfJBx0HDGyKpQ9vERTFh7A5GshLlHGJ2l3H5bkQ0biGo/67idoSq7a2ebL
+foT/bIOjVl3lnnQ2BCzLYtEtdwBjv9oEd/QL38szJtFU928m1oW+0UGpArANglZY
+UnoQyUwfF9zM8a34tGQ2y7DnmuEOqAfvR07HebzMPwqiAa2wyehoFJGYancRzdVL
+H8yDC4RoY7yOlwAPblRlnBWUxlolyZh6k3M6FakKc6ewnt702iVK+0XNCLkIwTRC
+PrXu0BDJJ9E93/JhbfT9rTWNvEaEF9mUNg3vmauLsUeL+kjUfPgKTlzMuQb0Yell
+hwJ8jVYInC422QJXfYtIsbzfdQa7bjRy0xiOJQvRaPye5FoYHAdg6hfv7oKnWmwv
+cHX6rQB21dbxBUYAYis5l7NYDmeYPaDfhhqL3aw+ZN5NettOY8SLPVmDfatanMMN
+6YOMpRkgLyDukx0cjNHnnbdhNVKRhm8kmYd0BJ976AsE7EycJaoXKrLFkfqa04rl
+lBSrnFTJxGhgWI88NeJl0XfE3JzWZz1wc36TeJd9obEqe0hgUpYidlcBwLmDRGGl
+AmT8uIkCMwQQAQgAHRYhBMeLTqqm1oMEEFeRPXQ1h7yZRieRBQJalAlwAAoJEHQ1
+h7yZRieRJOkP/23fg1XQfsagBllJReRL9ev3FUDhOF4ui4rFCesup5mdLCYCoItX
+eH8cyPqhEBRFrqMQ7nlamiUzY8Bk8Su4ZbKncuMAW/rXbkGXtOUmlIxy0SbhblIi
+xDk58gpozFjuTsw+srOUNv99liksSBH8HH8oLB8GTZYYRZTC1EhHj93/GFWVL91q
+DVz5EDgFi+pU5bPdBDPR3Zp+zciqzvWa5oi39mHAmeAlHyjUAdaFD8WdR6NfvkbD
+HTINQUAKie22n54f1SQg53hS5eQSoWsNceM4Nu2HpW/jeKr0JFoTN7I5OA9pRDqF
+9vEjC9Hll4+mf9reOmG4zFcMfeUl0Pp93X/iYvzjLfeZhMKvDhYcBjZEA6ReMKPd
+c2YMMjIy7Ov220j19Kck3rYTS9qwpbKJSLBj9D7QlLPXMsZkiNog7PSEKZxMGUUY
+nQaSkjsb/w04piy/rQrm7xJ2fqnt6hexuhQjmjL08GDCYQoQAK+BWkoBRpRt8JIV
+tPICDPXghAPnrbaGiecbBqiNGR1ZcdpNDDvg9yLJH9wkNonV1nBiV/aE/UnlXI9y
+toFBOcsEndDMbnSzNboQ8Mu1HOxFE+cqXFCI4hvzYQuPzCUKUgeMHVYfFUpzpuGY
+alBrghq1ibMMRyGGd3HOEb5/g8qOxVE9bmNxh1hgHQWmDQIUZdMCrArWiQIzBBAB
+CgAdFiEEyoRj3Qw5FXO0yYNPru1hWAIOr/8FAlqAh4kACgkQru1hWAIOr/+TEg/8
+CW/PU543uajE6rBb7hwUgREyi3zgprgWytARruU+HBV/PpNns5da6aesnUa0jCPZ
+J2gMdE6wc/V1iCDo5j2Ha0X/9mbUpI6CgKTVvzBZ/V87zAJWf92Nd4x5SLRKF2oU
+LmvjsXQA4stpI40UMryyP61d/MRIWpwdQALshGujfww9++5s8j848FyX7EpPBJIQ
+0nciMKZeUMsoT8Y9Eny/PaSGZbD2ujT7fdDRrBUya/SQD3snIhRvgde8ABkTD1Ij
+DsHsHWQz23Bo3dvrsKu+8x6ChLA3MXgqFDCeOfBezf8cAS5tIHc1UHe0RraQT2vd
+JGgHpnd6xSFNaih/TtlE67hGlLkNOhLgPjzVktzrwaVLiwFBpd74Ea/0ERr2La3v
+lzkK8wC1G3rFkDVDUd85Z+jy8pV8S8KpOCk/hyPV+/aR7ZL3zOEvqogSLT5MwDob
+C5OzvpDEkwmJYHH1lltqFyG4UN74sWb7e0KaT5xdfEfY/qmjES35VpBeGiGKCh3L
+y6PUHTOKZ5RF4F+tlcHQqLTXdWLCGgAYiz8kJ69Zy5Je4iztQSSeV2x2fy5L24gf
+d3q9YnZR/FmdW6h4oPCbVS/7EbN2lOcfcEq2TnIkKXgY09Oztwg2RWDr6Jj2bMVU
+R5DoM0qSPQW7rC25DnioVRd3jOvzkHgDTmoZoVIJhaaJAjMEEAEIAB0WIQQBNj4o
+Vysy0cwz5vdfy7KMkjM7AAUCWo2wWAAKCRBfy7KMkjM7AGMLEACKDmBtAsMJYxnu
+oq9JKd0cKcWIP+EnD+IJJOGWkCFzi1Vvdn+XqgSzxA0V+lx1Ad/Bu4iqBu0N/qN8
+8nVMRWZePYaf3Z3crnjDH1r6JLZWnM/QRm3frupc02UuL/oU/YqyxfLO7ZsjHjrg
+vFHTjYisVEETCIz4J/itpPJXYHxnWyL6Xxum5s/l3BjczxZMBNc+1Kxbjkbrw9KO
+MTZQ4KoMbsAZbc61opYRlBPNvCCVRCex7jU9hXRFPBYPtDeQi+CHDrlyhW0GWlBG
+nbwWA+Hu0Fo5K0k2ZD89mGCjNKByEAMKsN31CFc25TVBsjgZU6VRSDrnQZW0+VAf
+Gw7tVxR8EFNF0sqmC1b1XeJyoPxwG+vu7oKdfWK4wu29VoQDi7g9EmJ1qeVew7AJ
+10RmHV6QKOUs22JbJwxPCfhrYgwlU1p5cM4+oIq+2DudyJSEaiKLun2FN3n/5ni8
+XKHdvZRomXD8lQQvrY56YBZA/3hET1I8Gtf5KAZmYT+AjoOMtgkjdfOrCGpi8fkN
+gnqMaZD4sNJp2Yqf28IfoULD8rlfxqCoQMJFpiogwV9tX0TEKJrq0xVhfrNfNPO2
+qf237wRQFT61ieTWpfrkNHIZKktOJUk4qr5HIErSgtWvJDFAmZie8KrsSHpiW7Rh
+BZAtltn30zEzNJniX+be5zTEDhlgpokCMwQSAQgAHRYhBG/K9lMlOsL7KZftfhwS
+YDS8W5vaBQJaeab2AAoJEBwSYDS8W5vaJv8P/iOX4h0EiyO2n2qjcIan8ZgUEXcl
+CI/3QvXgyiKW4VPdVVxa7Pc4mQZnuTwjAstBLRFt4wWK62zpxcdEwzUHfoH2O5z/
+UnKmZuRmrEH3YIpVAkqLO4VLOhlMWpBQyC3j3ZqMhJCXS2EfTtOYxFauJ1cuwYpK
+6a9Vo8EudB0f7muEDeT0Qs2hwzLEti33bQkTy57gD887oG9sZBNg3WVgxoLO1Si9
+5sOBIXveEW3u5kkPeCVLejHg4DzRL2Q+jmjrXH3UwwAQw5U78ZtZj1apPW/s1AUw
+F++0giKBsZDFXLvR3r1Fnidl9OC42HTu8weJ49qVM9RRujyth++EZpJVVLWgr7Ph
+9fzCp+E6BPMOZLuoTXPLKivIZ58e6XJ2pS7itSEu8CiEP5KpBbwbKsaxcpmSr4BS
+deTzNv4m8XJ2Bx87CZU94cYq5PKVkq0s4PdvG5FlErOQV8FI53oofVbd76NItkfC
+hko4GXmVmuc/Q42RvwKzaf3wo4CGMhKxkCWmYzNzKcLrcgu+dztqsGOeMu3mpv2S
+59KERSFS1Wyunw/zwRW3L+3t4XK/DDFQvVMHK9fcun1cXfAY7WFCAuFWKzFdEaEk
+zZOhdQSW0T0F9fJMeNNr8eOAsocI4RS0BpmrLLcmpQ0V9slrrFs0GmIht085Skz5
+X54WUTBfekY51GzpiQIzBBABCAAdFiEEjNcifaRn0+1AT27v21kPc55axFgFAlp/
+BmkACgkQ21kPc55axFh/uw//TAnhxmzK9UlkoCfxxBZRb5nXIvZmhQNhGXGUlL4M
+2Gm4wxaGeaEKID0uCa8Evnyp4rBIgp/EMu6tPi3Q0XQ+n5kvIQ7bChYay24A4nxI
+aWOPsaYn1O8v2qyMsSkPCj9TFWZSvAblAXuP+/DsNj6+0tIqABtAGR72Fi54Bg30
+fJ3T1r473nwudIBQpFwwj9LHHRrEv37n+jiLIW9tNlPfLq5uvgwlyvaubFCUEiNE
+HiwtpkkSdDsfY2GEQ/rZMKafNYFur+K4gD884++z3vL/0POHnzFDl6Qspb+ehLxl
+P24QivnZGweG+12z8EHC1UEf3rm01F/gc2XPXgZ6X0i9V4mdMST0F7YPCIZux8NE
+h/lfOBAtvXDPF8S+8/HtXhICLRUi5m0qCX84bfoB0vkt35pU13Zqfim7dKWDXIOU
+lOSdHIxCWP6i2v9nYKUmCBkQe1SppPF3B3FJJMGJwf1bmsRn8ihKIM9cIm1ACyok
+3jMUaZXFwIEQ0yP0xsL+orMj87v3haKVdNb8LnXOSE5YxT0LoyxB3LDspXEP9dTx
+36jt9wPcLURvLZVye+J+GJDBhmIyN7mVLYi/hkX+IwKxb611rBsu65BUFCOwEys7
+6G4oHFdbLeizlzmEgoSRjIz8SdtqLg81ojVJw5KZObsrCmy4xzz7G8762Vk0XGRH
+2HiJAjMEEwEKAB0WIQTE3WlfpxOPJCqhVjhYSX7lHV10pQUCWny9RgAKCRBYSX7l
+HV10peaeD/sEwlgx8QjMaO/sdI8QWKAiV+ODTgJazfS2HbB40Vgdc1TACYIbGlPf
+pc1ze5zo+86qWstAgzGNwhRnPyPTwGA7S6diV9WtTl/jyZxt27cUkOP5+cbjAiXD
+Y/Q66LjeWpZG0Mq9C1p4sKKRRJv7z32Oj1U9kAQdxugQdHQzvKPC40t3adOeMXpg
+UiqXJYwHkgk9cD+cuZyMW8xyjSrv1DW1MLCgYjjs2um9y8nl9dqa/QjJNGavRO8L
+Myq69aCh1cEj57p/fM33OLugxMI6PeFxTUA/i5c1xi+fY8vM9qQivYHm6POp2Hqa
+zHI2t1BblHmyepZwuw6OF95Qw2OiIg5tCQ6BLudgsYRiuJjmPfouOwgOJ2bqIw1L
+sRVErYHqGvvSqwN9tO58fYLTrD2kqDRxEo6SKasUKt+Z+wQRGGicF47m5gDeB+iY
+BXOtcLT3jgZ0yz60tp6FVp9/2gUMRI7Ode7EC8suOmbrzMLzQkV1lxJkbpkc4SyB
+fJLijc386Iv4v+GiFiS4LjhpYZikiOJbUdp218HfckG61brx/3p6W8XXRygcZOl3
+aeXFPVQd674BiMb/JOgrsUq8aPTBgdD7p1fTciahhXd7z2AQpLgnGHbhqbIzGAb2
+pgYA3XTbcGmYdlTUCl3/FcJlA9jcc9kv8+EyA/mxMJgL4a1e7YlJgIkEYwQTAQoA
+TRYhBE0XOr81qBdBt7A76xlBm/qW9NDoBQJafwoALxpodHRwczovL3NlbGVuZS1m
+ZWlnbC5kZS9vcGVucGdwX2tzcF92MS50eHQuYXNjAAoJEBlBm/qW9NDoTM4f/2AX
+XNE+QRKb6wPwvfZDUfGpHdTJRYtdgKJsYowVuy9HefCMzC3MUF6FAzhliUhydEqR
+M3j75OSmKL9EfyAo+myGZVNK9hSd8J44siBr8PYx0un7TYukFBwOXnWL7f4CQCvp
+roVl8ps7Qz9TqVsqZU02EZm2nQK6BrI6g5UwJQP38brQH2J0jWs9wlwFG7Nk+6PO
+PBtmavUJZpwEz56eWY9I4gUgPy7RsiiL9P7C1b9AhdcMRbxBKkL1NbTeKY8vaf1r
+FqSVLVczTZmXc2mkZc9o8E/h6ZPtqCLsdJfKfFvoVoBgH7MYImn29/d9gzWceSCl
+R42fD2Ie4b1suLD4xGxQbf8uVTc6omp12txNUntSr6APRZIUC58BjBdqqP2FHSnC
+8kkJoQZ5jBoY8Lowlsmv9wsKkWUGNGNR44vDT3BB5SwGedJ2OlnweNVx1uR6ddrf
+HB8FISklYD78oF9dkRHk7wGrFz2JQHQV+OpVP4VaOVDaqBhGtmrEn214toOrjRCa
+0sKaScxOMpx/EeJRCC7P20i+T2LZJFxcrU1hPNr/dG7/VPi5eQ6Y+caFetmlt7x+
+h+WK88Aaj54CH77/iWcYKt/cDbZecdUYsQa7Pp/Dy9eBXwyxq0+XyG/vbRlTgsF4
+eHDd/MQp2jwilOfsagYyE+3v2o27vyD6uhUNU/fKKzJdWfBy/rG8F5POezN1jYEu
+TZH0Fi13Z9CU5qJTR9Sf8dA2GZmymMFJDiTtbg3N1I4S3IX+IvZ6wpWpWqEoLWqB
+z6Zc8ZjIb37RYMtK0c8kPdBeXpNnj5aWlj00fDh0oHmeoY87VHBUh/ZmbisbQ8jT
+sOFu6glvaENV0gBkVNCRP8U7sMLMqIb3srfSLelN5bAs1nyWJevu/gfgBHzmVq8h
+hVT6M69iXxZ5nxk5jVakxQJ1a/ubtdpHlzErcAGpT9aQJ6KwkXb1Vven2Rqd7SvD
+9HkxrDnWCzZOCx2LDDDj/iCRplur0GlJeLjo8fheyw9Q0vBsROJKzmhhvljE/hj3
+Sp1f5+DCQjUa8VoBSb3y58yIlTeEnv1mjW/hETfByfMtgyBumH3/D6/VzzDqKAya
+W3x4FiYMpAtMYI17AeWrACT9AVALPUz003hFcJFmj7A6Ddqk64rJU1weMLC7IJfZ
+EteYD/PV36Gme4u8/hJUxooP7fe5Xg5L04tzgnwqzalrG8fLwFVz+nTk882uPJdf
+gZeHP+SS7TSnmkvRcb0bI8xXUMB2V6+DVSA9Giq094HwIoPW4bJCZZW0Cm89xSAM
+T63Yv1Gm2HJzqpv/5m9SYPq/24IMOcJHvP3SLofCTHR+wuVSjHyURmom3QPfuOax
+iZ+iTHeDicT2pMXLEnOJAhwEEgEIAAYFAlqJmx4ACgkQRLa0x/EIOqf9zw//exog
+a9M+Td68jma0XhkaoBtfsuGv0VOxlDPCXiBYcUMVdI/WkH8IGDvGQk/2po9//uQ1
+geZ5lnqI2hwESzUVvQsSx1A4yI7eXMvtiRlYSRfLgzNXuyD4CAceNIxGCVA7JTYq
+m/DADFL8BrMmBQh02iJAHR6FdhmOqsBS3PJTngew8ha+ywi0hkWhDfPJknyCbvU6
+GeIHoWMxKpXeoRWC0j/vJyvjd8uHz2C8TYZiFI6a3z1UKNJf8hLXI28Lp3jh5kgS
+IHFQ8bFkZdn8aBy2yRk2xZ4DQDkdqWi3vSSFJ54wlYZV7ToyNYhEeIEQZabIhiiH
+oZagpnMRXS0A9sBMzNF1wrymmf5NR3eBNP1EC5ceN8Gd17MGpBi4rrqkkks277+O
+bHypwQh99XbtjYSsgLOO3QC/lIUXjT/l7oNgOjSSkSv9ZjECi3m2orOt1Mc67Flx
+cptZctGKQNowFXvdFZjjgTCtAo+gfzWeY1K8y4RyLAokbqg9o7Tm14uBYhliqpZ8
+wn7XKtqU6qjUbzW4A/fIgmI8PHolglctXRVVkXFi2460ayot3UDHAzDKAaoi7WEA
+lFVzoIna5eK9FhFPaC4Efp9mOYwL8UyVV7JaDCidsiopTc+1or1Xk2Tf7hnpDu9Q
+eTx3akCgzGU+lJiLe3lhMMMcRAEcy96N9IpCYMWJAjMEEAEKAB0WIQQh8iIIM208
+JkMdAorb1x9FUlUtRAUCWpDDrAAKCRDb1x9FUlUtRCfzEACff7m7CdlEuKhoKlot
+xlwa4cLWbvSX0xtbiWZ3XVnRLZ7i3YQJNsF6QbMWD2itFJbPSpoByatRnaC6twEA
+SLwZWz/w99a1xvbL5BWd+GEDaJBzeingz/zF/hOKs5j+IvLrmBXyaEn8REpfiihX
++l9Z/FLEXKUFyi8oy3hXjHKLD5YL5FMNLUVWfXlO63voV4Hti8fzUs4V5zs1luGl
+Nj6lsAugqupUDdFqhW52D90su5dp2iQrJLrSPWsIEusTaKkb8j+YU/ZntQX8iDT7
+E+z73qqJIPHnXpoL8TWmPMzCOvtQL9iuEFSaoRWKzbIz5MMDCCKEnJtdn1be0QJs
+TntKahI3VbTxSC7BRgouSC6eoYMshcgju5FWe3a24ZsIU0DNrVTaCM8PBe2Z8zxj
+eMfazzmGAuSMiTj+FKoHu42qDVSt7n2+vkW7755Q/JydEEjgFPU66xHwDrStTIZJ
+TtC8mZJIKh8iLSx7Go+Pey0Svo67mOORHRapE908LgwryM+NSwRdYrposXdrFZ94
+M5m870KJxVZXhozEHXwjSNRswbkWLL8GSH127l4eUz09oaBPrxnj4IlhF/flTCSm
+U8Abd71QwCiJTQQge89OTKAArd3Tv+PxJ1dhcMHYissiUdKsLUmlzKjzwZ6Nt3Fy
+jiyN9Q0wD+vO/FoiLMYLx8vh34kCMwQQAQgAHRYhBBrYH3hbUmlZnWSTky0DfdzX
+9KweBQJaht3rAAoJEC0DfdzX9KweJqUP/2shyVlMunq8XBngHft95xHMMKIh7YjR
+tVlbDE9IvegQKZM3ihzMWR9Ui2talqt42pxrGyNAddUeqLRhz1oPzr8nYqr8uIav
+FjQrr6FN3/atbcGVMeul6TRvOgxmaJh8yedveipzUljfWTmIRozCyD2+x61wLlGj
+35VAGBKb2IPQx2XXijTd+T7VQaC+/IGquVcDo9Fra2Y5Ix2MNEko/hEL/w6eJRKU
+aronfr0njnMieLp6KH9LXBSSjJHRBe3Ua6KG9BXIZ8EWaShXZmD/HwpLQHvnjgD4
+LWHqsTUUWgFcLcNJSaCXJ7wORiiP9RIFfGujj0jl5qn/DwQ8aSoPPFMueEGQ/P73
+B3w9S5A9ilLOyRx/6o+6WgIZ83GIc/pNhUdmGpUeoR774CMUfGRHESYI8t8JwYlF
+5VmKEWyi9Y489nai5fFldRK9B7OLHrJzVuX3AjLoc8qZVJXmEP0WFOThuY3m99s8
+Jv+IIJWvNhNJQ9OQT9ZjeVxxa2QCW0cVpHamynww6Lz+80QQRTFPLTgn2HiGD5BL
+3W4LfA5EVOgukLccwvbg8X6P+ERx3z3bYlseXHd+CgjZHyZySgw1FTbdnQLuuKaj
+DVApZdC/BnX1Hydywaga50GS0Upee1eMpZUE+fz/FIpuO5db29j51ranxUfI3a7T
+5pn71XbWtXY2iQIzBBABCgAdFiEEqeqQgXJP+uBITDWhqBzqIryMfi4FAlqHYwAA
+CgkQqBzqIryMfi4wlw//Uy1fYrbOHzqxqeknBfgRwHa2vmKDpCu7nlJeQXczEpsM
+smgwLpOftxiPp++Q3AC0wUchmp9vf3GrdYb/vMynv3vuh9NFgPMiSs4bv+5yeqhl
+LL59Nxi+9LO17W2LTCLpV5hmOowHMvpZh99Ps5EYk6U1AO4SGuN0z62QIbjREqH4
+PKGmYPszlzCROMjaVvzAt3RcQWNboVnhNQMhBtel3bz5JdM442G70JdLRcqLMYtg
+8BC1KF3XMteCS4ayypGV4LLQN8X0UAfCMeSKnJwnm7Rv0dUI7nXtLu9zPG96sV+f
+AXiRDxXw4odi+CcSWVS7O2WIiktERhNLQ8EvkeO5cyWOFSMSamHqsmereXH2EmJ4
+LRDggALLKKuSqkHD9//ofy0UZWUnuVyXAfdPFsqt+VL8Fitjc90Yp4W7v2bZX3zF
+PePjjjA/9j6XMh3SYGRgpKqrcMb/zV9nH2wJZWcFkTR5s//0l89af+GG7arFdXaI
+9QBaN8AIqvE3Y0BzOE7oKBdS+TUIHQDZbCLrNR5EpqEAFKpOvxpOez3l63URSrA5
+L17DSu5uX+wdASML9JZ2WL0B1h+eJd+seJK7FqugE1M4qozPk2IiCwY30NqfAxb/
+ERhQtEzgk8U9SblIIpUYTf9KWsR6+SyA7Zp7XNxxN629iH78s0Gn0FeFDbkqZ2eI
+dQQQFgoAHRYhBE1RkADWKcxUVwAJtwcDwFyDoiBbBQJafuXRAAoJEAcDwFyDoiBb
+VcwBAKkgUwy08UGqPHgeDmWwpw2Gyht3BBIbiYhQYaS26GAAAQC9gK6Tq3R46W+u
+p373b5PhEJ/lvngSh3pVzrDQZJL1BYkCMwQQAQoAHRYhBF8tLYXw5UguSb6VMx8G
+r5l+JR7jBQJafuXUAAoJEB8Gr5l+JR7jztYP/0YVHbi6mhztNPcFYceVWlkuCCrz
+VC5vbckrXB5MzFAunN59i4rS1dhWoNeo8uED+yZVH5N0UBUxGNmJ8I5yruq3kTnu
+NXUqH+n2NVTGyOWvEkjg+UN9C6rE6+8iOPn7HCMKxZG7m32MnB72MEYrdR/YvmVf
+5ymQAuB/h3KVwVrd52Mf09Fv8S3/HvyxBoc+u5K49/z9ck+BFY+ZYL+Ai12HJPXp
+9yq8nfjTyVsjQeBr84Fo/eDwkaN/lZnJo/Ngi+qNjFlGQu0OgEoqqPFE8+hi2xvT
+h9Xs4OCp7dzsnk5gPHVpGtOeCb/du6oKs5EXHL3z4cY8K9eFtKXokIpFEAyNvWJ2
+MJ3RllC/YYrQftGvYoJqA53NVDNy6WpcDS0JWOuLzwVVxdViIBFU/tuiN4ORBb72
+/tzrbfuR0Pqqco04jRb5xw3tl7JOeI8uRjSNBz3+xU58jel2HAKYPBJ0MbUnqisx
+hmY/4FFU6VWE4Uzn/DstseqwlcR9Ff2KznAaPJ5qqyULwH6BJLf3KNF/ratDIcrl
+BY6aB2PMO5hggewu6LRjEpjr9ayNYYRDj57vHsVgn8zPcCKFk30lhgkqcBw0f7Nc
+82WIOfwcMaqr9pz09HWune4+JvbxHzcffGsyFzrttUahHkHBCu+u/1TTRuIiad7z
+t3eXIHEAnw9p9IWMiHUEEBEKAB0WIQTcsygfOLBxGkHA3CDujTY9FoeXOAUCWn7l
+2QAKCRDujTY9FoeXOFiKAP94Nre8AVnGDCi/BOy9Ki445Aw1fQo95Z4RWz+1c8UU
+fAD/Qb7hxd3BURjXZdg+4tbEeM7nSyyPx0StUbd3vfVbojaJAjMEEAEIAB0WIQQu
+qXMd32AO9SpTrUgqViOIIPXyLgUCWn8ZCwAKCRAqViOIIPXyLiZQEADV6QosR0M0
+SIGI3FAwzxfgZLH0zdXHckqFfsDKljadJXmU2H1SjPhZz6JoowM3FuLBbCIPNqCG
+/21NLGtWNi2O6Dt0MLWNUYjFr4lZTkW1x2MaT2xFpa06AKPogSKeMz4nVCAx++/n
+FbsfceAENt83mBbEp22xtEEXwqtBegt0ocjbryo7c//cQEkwuxAFWs8BzXhI9UmR
+h+XehWsnI7wfrCwsjkY2QBvGdIC8G6zTEqh0ynlwTM+Q/WmqfitUEo0NirzH+ov3
+1qOTk1T6uw8kMEXu0klskmUdSWu6SRVnICm1XvHQST9hdA/Z57F2NXT69p0eDZPd
+U/eMO7EWMsxU7SNM5Dmv01oZo+fzSrnev6vK6MoJu7YdX+XE45MkKyCEChZztXaD
+7AB1DRiXF2GTC/wXWQWAqw+X9uaIz/nfi3jlDHCWqwcDVNmUReNUhhca8bPMAY6r
+5zQlnt0g1XBRIDli2fB7oudJpiGnqTN5zoghmqKiEB/rGrg6Q0W3Asi5eZ3WbbFo
+xKFA+WjCThtiJ5QiHASourpl02dDsVBocHm6uDuIQaKPDz8voXKkPvIQHKCAnrDX
+oZnoFRVU3DjDFOdbsuNaMdPGfVChfHVrPV/6tLe5lNpAlnBPFfBbDToaxRne87tR
+pxMk3Arb9A1fTY/V+Vvn6eLxIUO6/vHo+okCHAQQAQoABgUCWoAGKgAKCRCGblQs
+90JBsSL0D/9Cav4RKKKH3DHF9t9zerKuj/IW0xPikuj1r9DvO+WLuPDS5XKz4vkP
+zdY4iCxiQLpQ0/nGwRdUgUrKhEtIiRTbfJAO8rY7fS+i38QDhGJ3OZWCH/180iEl
+txRuxnmFy2WnWHwGmvclN3h+B/G8lCOqqy5TpSYFDytAcs6a7qrHuoIuzGhvS9I3
+ZYdvfpwDSHFIM4UHl5AT6/et4U0nBtFu2Bhr8C2ZJIO1vP6wwKoaQ/sPHrcWfPb+
+0fyvhVyypaPovUTbpzfXr85JvsZlHv5luQ9SaR+bc0i71wE4+fI0LufXBz+CAVx0
+DWPjRyecdgr/VSoCpqTZF/4+vytIqItGY9y+8MRKhnJGmYMAW67wncEOyvKvXj2p
+GWmRdVILeVaHZdSyyjkMv7zkr/bnkpYj8ZDQt9Lebcvk00KdAc0j/rc0nXHSBO2x
+1fDbUNpzML0drLoNbd2y5Jyw8HBw/Bn5LigPve0cmRtCcSanjXITdyS+64LUYdDs
+dkpYQP8qPDRqbL7Nkur0pYNNxpE9LYhJ00CJ+D9qiH9++jGfJoRPKQv+eCeE1ZhI
+fOu8HaKaY0kvqMKmTAK36+QGZWZnsxQwpcgDcF1fAfKcBfv4EwZVLpV/ETaVuc8U
+1rt21BlgGSOwzOiHeJ6iKd3a6UUgXjpkay0OpmwIbwtjPGTxC+EcyIkCXQQSAQoA
+RxYhBAvgUbISpRRkAQIDVI85yO+8l5IGBQJat95qKRpodHRwczovL3d3dy5tYXJj
+aHVrb3YuY29tL3BncC9wb2xpY3kudHh0AAoJEI85yO+8l5IGMFQQAJffrI6Q6zRZ
+nY5GhWFSuXBd4tzHgjAo+g3SKVVBTPAvGL0pj6AstpifR2HassqOhnQgTPSI0w5p
+NuCnynze893zd2OLYW0RRG2+R3kxhrUWovJJOl1Kn5PNSsOCZR3bYYxX4traImJJ
+FY26AtBs/nr3oM+JUkH2ID0EUlsRxQPJowR8KL596gL/nbhlwCXPF2ts8KkJU3Ld
+fcDwEW9zA/vVl/jVXEMRleM12h0OFYVlgEHyMGZD8tCO77XNrHE9PPtlwdvxQrT4
+rQbmi5qEDgOxIQvKlnakyMy7F0pHnB3QsshFXMjyIXIM2C+mShGQJ+JOVVVQu/xQ
+n7y9ttfixeLoCafNiUoJH+zalfDK1zjhHN0OiAEwF0/WvnPm3B6HjyH//3e816Mc
+kgSFJy6GrlpvWj0NXzMDDxP3KgBG1FjbCnMnQaKrmUnA8xSsmUbatw+qDsIdKrEd
+DXAwma7tGv4wTsFicRK6rDtbO7gMdjiDJFKeoMTytPsBruTc2+wAR8BJpZJBhsM/
+NPYM56I/kCwm7MlXmQKInP8LQPEQmjao9r7qFOw2VoJtaVAFrWz9IKmjpsX8cHML
+MkRf5ohK7tWOeW30aeMh83QqQbmsTa1pEqMl3387MPLdcOo51yVqPQzsPtofU3PD
+dx0RjTQZYxaIrMiXjkHELBO6hpAmKvN3iQIzBBABCAAdFiEEe6Zw6YlWCZAGEIEs
+NnGTpNv0f3QFAlqDHFMACgkQNnGTpNv0f3Rnpw/+OUo/XgoWlz48VcA9NVtjgQi1
+yx9zrDNVckVL2iOqiywxEHQCECspHrDdJB8yQtW5STIJL0zzLCZUNuccyhShTciw
+QPcpRgJlCDTmkoEbCD0hFYEBENFI8g7aKG6IN5vpEBT9mJtuHSd7l5igRES8f+NJ
+RrySJsVLC37RK8LeKvf6irpTjxV9DcYp4Mw7fkI/AXfmFKc/Y/GzzH5etF+hgY7i
+iOTuFJ8YALiUuMPSuhulGrCDiJXAYH7oqAj5FjdPvIOug+dqXckip68VN5B4yQ5+
+raNJmOJohbkf6GFPxgoZ0h/Bc7rQhyrJ/fdV7x3H1vA3k15gWWGeyAZPg27v63sa
+sGuxjxpS/IZjh79xZPCPxNN1TObMf+UVBNldvpupfwlxiVruT/FpmlXSG0uN24Dv
+QHLM4Btr+tY4XndxmpTvhW+iXPDnpNVRSBBXwk8XQjZ6oLG5miEs2DTQB7QrI4zO
+kuwKXYNLdzfj+/TgNIR4GW0TR88W7V6pJ89/blHj3HMjMV276bCKf0A+7ZQnSKu7
+M36h6ONXRtHA5Gu4VIcwJKEf9SKdZlcHGNk7nNgq8TkeQwHluiwdCBPUX+Ba+NsK
+UdmdPlMBelGXoF1WcSrBjo/r4TlZ5UTSvh29bzp8RKO2t5+YwMYQOABDry/cpYs5
+e/9bJDxDFsA2Oqn3Q7mJAjMEEAEKAB0WIQRaWlqgsJp6NroqqNzmbmdsCUlMFAUC
+Wn8s1AAKCRDmbmdsCUlMFKPAD/45S1ByquEFvCpz2zz6f6w1cX2871i35UXXNdn5
+ZpFgCqVmbWTb6DHgHm3wyhUcO3oHBTSqIS938jjqyiwNbNe5RH3IEFM1rPqSzJvM
+1fpJoEEj5NdwfzUFAvrWsupCJNdQtEzDumRBlLsdyVBodWGItPxbGFTERY3Acmz2
+dsl2F5J2kEOR1M+TDSHC4vh+0ssehyFUnmKAQYxStelzrWstaE0VyNjhJggwwUTA
+3CxsvQwPb/Z0zeKT+P7orG3H7YctofAdCTXW1qyUSdunQvSyNJN4S9nlkXqudeUU
+54glJRGYrf+KsoA69Q8sp0br75PflVfbMUTX41eXoML1yDqX5f/JmczWc7Yu7wsG
+tVbk0s508jnJBiO21LlRtq5joWwyhk/6iIZc3/99lv61goNXXreCS+EIQhB80CL4
+yUszWCygB3gFS9iU2K+yNg4q/KTzQLUV6txh2IyrcZzZWbi32P8upI5Jvbv+0i5Z
+PcExDuKTa2Y8IUy/SchXkuyixhEV+xP5QiGDRNl88SbDzje9y3LTCMp6TJR8nTyg
+nI8lHLGiNDzZN/yXVgzp3zNNrpNqBQgaF1FlLBnyGRXdSNdAhdVCx4M2XCE5MbrR
+vuh/srMlelSp4jiJ5g/fwxBEAPCfUiDEU78fcsVqFCVr5V5OMTpm2gGynUiGmKqW
+wYGQD4kCMwQQAQgAHRYhBB+vBF+bj4s+vyf8fTxBB+aCbEDkBQJafxguAAoJEDxB
+B+aCbEDkTd4P/27ybODp2eMAzRUjJdOLecVmfmSvRoUh3aHarqm0AKdPPhkXiBEg
+X4005/TXpUasOz93Djd8Xmzh9X4oVvQbkvf2iU703ynfsPbHT7lywqtQHuSGGCtO
+EHBifv2DBFSEY4kmAoTMI336Eq5fLXeorE1NRjzOAtp2IZ8rQ8AKf4StkQDoCFM/
+40jBQSXIwXp6vNNGZAiPta/uOaRAxQvxU6nNtFKMaJgz1UTcIWDCPerm2SpOyW9N
+P7oaRrqN/zYp1ZtlTMXGjyTS0DrN2qyV8/84KjaalypwX53mjvGwYry5102XgBgy
+B6imvW7rAPac6Vpq2QQiugnBRcywlmAGX+ZJ0hCJzykCc968vwLuh72N0ImUAmdh
+r4Wh+J3BohSolYZ9+QUQAbervBNZ+YaVFZTkN93v9/4Z/eIxJ/i1wt78FPXT2CNq
++b/Cpjj82Q3NGsbBYgohAFa66dzqBrtA+ZjREcu9jwd9yj516VJoTQifRF3IEOkP
+IU+ziBgWopnFPO/RhKD60Fvy2nVrGCBJVco5hHNS0QQrrffRmFxKRm1lHULD4KSp
+MNwqtrqykw9JxOFGO0HRG7VoE58/RzozWlolNgUT1zhHcHOU5KjYj1VsaI7uzpLk
+okSGwkcPsQZoEZkHSL35aBTAa/YQsgGPESycs43whs+pZiHVrrof1A1biQEzBBAB
+CAAdFiEEfuEwC9LIlLqR2krmTs/+zJ52kUcFAlp8fAkACgkQTs/+zJ52kUcgQAf/
+eX43121EKej2JC870ZvhLc70d36wY6w4dc7trQ/IlCizCfQ0jZH/sjZgIPshXWjJ
+PBI/wjRBOkQXKI38aMYJ+x1HQiFACy23ZYvZsKn6Rj2O7F0PpnQRfPPRiobPvPhY
+NonjZLw3FRtbwHePBUgeIurlGMcwjjabXkW8mjplXCJ5EkZQ0l7/auVbPK59wVvn
+WAAsLWnNCMCgh9sGLvx14vBi3lVf3FKFSBZCaAp8A+anznT+qw0vKqueZK9p50LL
+X+mZyL0hkB2rqNIAHeL6iJiG3in1FACFDYJctAPqWPxlHo/1QTQizQEBLyR9TQ6x
+BgmLzk4e++SpLR5Pr0zElokBMwQQAQgAHRYhBJbPBJOYZd+87AaIBGXemeMEiBwR
+BQJafWvDAAoJEGXemeMEiBwRx/QH/RRVuOEQmR9Ufhmw+4w3CU3eqHf8cXm5rr8M
+oVCrGWdTNqAM5uvMb+8ZiGSHf39hmgvUVSDxG2av4VBpBLLAJ09PLUataPBPrv49
+i2P4ABWmANIIfJ+90kCrQFbqP2FENZLWryP0kdMaueXtylP8XhSUO6D2wtuuIFhN
+RaPdSFityu+8wnhRPhGfW1NvvrmbpWOsIy9OJV1C0PmDIZcfIj/CQWf13yWedr5L
+x1cYUXGNGahngUk6aPPUzyFYh7WmwaE5/ST9TAZ6qSUPnzkCFzLv3y/kj/jNRbH0
+mg6jWPGRW4FfkhOrPBsA9Msqz7ck2m3Ruue2oOKcXEr9QTGJ4E2JAjMEEAEKAB0W
+IQR0IN+GvOFaRY3OmXY5J42oEJ5iRAUCWn+GaQAKCRA5J42oEJ5iRAxhD/4pmaAy
+kxIICcP5DwxVpa1DmxSKdUE3Hq7zWr4yafvJZkgiFMj+t8rbqr8tX6soOdkBQpzo
+8sssb7CC0g6Dbcs8cveilEvo1FsUuVJpVKhVOkq8lGqIsvXDj6IAYggyJKWOJpqd
+YaeS7Y+IJwngFHFOOLKuhQO2ukVuu3frubJA0dO+s9WwKWw4D2lbrbpMyMA0UbYZ
+PLj/1Toyola2trdCS2vArD3PkI/9W6AqTbIJ4Pc3Tx1nowkc/sHdLQGwrDO3hIOs
+UHF/+19fRRlIu2nQ/R27K90X5zc9bcL+XYV4pEKxcX74SvbpSdM51lREbThm4gw4
+IVOB4l7ywkyRT/lYIV75blWbZgaMEJqMdqFsfnVGExolJJ/vS8G6jaj3R05OYfS+
+s8NCDMxM2KIg08yhlSurNtTMkSUaFrEcd0haR25kste+vpdb7aX/GT0Gc4PpC0tX
+iIKnpFi85FTyIbK9LUH9qggfJa/k4u8wNcwgYJN7/aWl7QKSEj+me57/WvtesqUy
+bK4ZvNu2vDxXqhpak9MYJ+yFsisNHdHe/WyAJ0Xw/mSNlAegctI23tHkkrSQ8cV1
+74Sc+0KqpBNKRhg+wOIDuGMQEfGc2/XOWm5gH7CkRuS2Gi+kGC/udAewaOZWZA1H
+pDRXoSAW4pPYA4ufJbI6I5kRdUzZKjmx6GaU7okCMwQQAQoAHRYhBEy3/h4oDsyQ
+8ppZfm5gi2N9iWfpBQJakJKFAAoJEG5gi2N9iWfpLPUP/A5gt4eOdnKv0nwwVQEY
+Jsu6jT9wkQdmp1102LqDO+LWP4MbjiJA1BYvHHXfN9qiGOXJX/duiGr3jpUgEAwn
+4ORoDgwrFjhmgkuAX4i97a7XzPJhdtVMNjYvw498TtMjbxjKee6cneTLHnQCeLNy
+htlep2yIGDfb7GtdlNQxtOFCVdotjpIDKvY6UujOl2akHcsV15UKG8uxUzr3aQjN
+JRFtGmgxZCe/YXrJwilVGMNF25x1LdVS0jeCahbRdnnDE2ly91TXQ8RGoBwOPQ9G
+W6Lc1FpWO931J2iwVh0F4x1ptIdNhD16i9WZcEVbLvXtEJI4b1tullu7QrDUw6ic
+52KApERjdfnrLsWHEOp9B79NUR0MdmOCHz+wC7ToZNg6nlWaXkYn9wDgTgoIpxfK
+li/QPg1SCBo4onFcbOel3TZTo0zlbT5Ewgq5XYaiffjCg/EdevK/VFqzHpvOTUvV
+4c/aSEP7dd+2qoNrFlXuwVk3nm8+ceGVeLeyORV2mlY5MGKtsFGWhnZsSU1kbABM
+cy9drrP03NJ4VxiK3u9UpFMlKkAi6yD6o4x7M5Mz4BqtI8s1QFzQMJDisD5U/aat
+N7a7o4EOnxFiViYUVQbkFc1ALUrd0PwRYyJXaU2iLC4Ph86KTsCqG2QkVIlfoILP
+qTRjX8zKXX0F85wO6lLxhkxFiQIzBBABCgAdFiEEqO2+mVDsH5Z/M2DL+z0lgztq
+r/gFAlqQkokACgkQ+z0lgztqr/icIQ//VeqdJVJOpgDcZpxD0EChlE8s+tAkP6zb
+PnyNnZnQwBJ0xJFUKSeNPS+jfEV+DpZQiQj28N6r2vQm6v3FfUdSRDWrb+vF90pV
+e0e4tCdzWE296DguNx1Af579W/JbJvAxUqRdFBmWBdAdZrVYj7zUf48JGO+PZGoT
+7Dez8GyyRVyMCD1QA+uNwhX3bjtxy1p97x3g0RdwUrs89i7JIetZTYXFji7fyp3O
+rMmdlWyYCto7O6ENNwgzoEZYurRwsfRAF9NaihgDPlkEf3BWGvQs/19bMcb3JA8Q
+/z60kmChbryqcSgfEKfX6QPXQlVDLrUQQnithWtfJwH7xhLeOkcG0wRnuS5zFU9q
+jtwHPZXJj9vu66VmQoSsBks3K7xynYnNZXsScjxinAJ8geVemJDphIRuXoYnNxj0
+vjxrl2SF0QCPUBCMydCY/64rLt69pmSvlWm/Kk4nU18kzvs+JnjU+1vgqstOl2JK
+8kPG0SNHI0C1Sk5HrT4eBDSOv6czl6ROhVw/JgEzi4yj2rY2mGLL56usE5ieyZ/U
+Q34hNdtUuyEAye5lwvusiA2vStRhMH6vk+DKzXV31NBdcqs27tjkQrDqZTSzAZlt
+Qda+XzDgmm7jLqHUh6et9qTWft2R/5hEDaV+Mj3q1mx0jV711XhCaIWt4Q5jGcIX
+QAQ/llFl2C6JBDMEEAEIAB0WIQQ3d5BBQfypKr+8axPYTvfnKr6tYQUCWn9l2gAK
+CRDYTvfnKr6tYWcoH/0S+mlaclg2av+8NhR+bcrs7by5mPUDMkpPD5EhEgjl4fX3
+BXAq6FwkJyz5joRCVzryR32O/r3saVDds6rSA/TtJMQURiaFjDpSPT1edozlUhH8
+dU+yoO9uUA29EVhkRVDnJbnV7DTz8xFBZzhoW/vGgUuRJMdq3YM6XtXsOBWNDTID
+NFG+osLWkZkOPQktI35GK9uQYq/rAahLHNTq28KCgdUzBRXAWrZq4K2B3+RQ0t0s
+NK5MoTdAKcvD2ZQ4aml5MKLYRAVdk5x1bo/4O0QXmxCa9d5Wi+nxGEcPWtKIyJ5J
+v1Xhq2ghR7e7y0VFTTdUhADTQZOTJ22pWUWLaC8TbKsGIP8BA1HGdNrCikOqOM8t
+slFdaJBhdU6NqQlH/h/TePDAF+F9qCg+XmJT4xMno/4kovUd/p+e2Hg1MYcURV6Z
+MEd3Xpb/lsmhSL0tR7ODuRH9NbDKfZYEOdUcealPCnQ/WStioo60qLhzoT2c2rBk
+w+rTTBNco2xa9UPQV5FQAqZSJ+wzRtwCqo5LP5RCxOe/sgiaSuvm8xNz4TclYwC8
+iHQoI9db4QAupxErupkUAAHQTBTBl948U5Lz8rfk/1tJf4WcKWHJ92wDiI6Lnioz
+VuPvUIjSeat6GHawdoB0V6EFwXEBME+ZC7xn3smFaVppeGxXd9PvK2sSjFy9wFN0
+5ojOkFE5RA7oW/XkO1UjFswQnZ7ciQ2xIHt4sRO3inffM/Jthheo6a/k1ugwqJZ8
+T81RcQTecxq9IRG9Lyu+zuW22ECEvgix431wIiRUCwy6Vr9M88luypAYhFhac89+
+VEMopLFBGNkgLZ/ntGQTYl5NlURWAoQdJn9l2gPf/IZDDT9tXqAy//xqGKIjtqQX
+I/eCd8g8pm7N9+EJUcbxfpvMg0guI4UkMtAffvkn4WkH4gQkJ2xEJxFMucKJ/L5A
+P/VGyxno6zsG8O0Hc5/Cbu8TBSDFqETmb8akGwvdnq9FcMIIbLx+MIaGw+3CkQVK
+4VJMdHkw9wOlRLFH8y8knokdVInmEnyHspnoafc6Rej2dJpkIjpBJybyTsWpXZpv
+uNdI3N3X/h9zpRd1kgCPik0aN3CBE5VLwrNpp5IMWkVDWO/MNvxgwg6eiWGGRzn2
+uOBFlIgTvtLlxrMpuHjVET98mmmnkhfElVMVoFKMJRKNOX5Or9Op9+YQLb1n80k6
+lTQRg9dIpuTbWWLjF8w45NjFs29joiOjhOuN2ri54N3U3faF/VdvSJ3OPr788tQ3
+WICfPOT3fncwkdH74c89a5w4OXZ6i26aaoPVnW0tmyqR0peHU38X8LT0f1trUunn
+lRHFiSknp7BFXvCI/QjE4J7rjVkLSkhj+Z3Tk+vyiF0EEBEKAB0WIQTTO8XDwMxZ
+tjmJ13vqe/OXAXViPgUCWoWrZgAKCRDqe/OXAXViPiQrAKCkD4S3zqinJxgUmQtF
+lpRHSuTRzwCgv0/NU60lmHTquvysfGHQcwPwmG6JAjMEEAEKAB0WIQR8Sv1h2Krn
+VweWpRciCdaQL5aclQUCWoWrbgAKCRAiCdaQL5aclc3gEACdQqGOInJ+g0Dp9u8o
+qRqGVYx3MYxInq9p1giZU8fWM5YiaaZnPTWuK/jhmYTg+kT6F6nZfmVtTbLkOJVX
+TcS+FPuicceFIc4Xc65f2EBLUJ9ujTCKTdWKX2uf8jSb5iPOy4ikVWs5uUQEWFZT
+LoU7GYFL6yzTfjSn3HPUoehX730ytnibT0Wdf6Z26PMi+YslDHCAcuOs4gSb/pq9
+eNX/01ldOcjpwYZx3xTjXfAmt3pAfHFw1PdgVK4xt/JBTYu+DVNz7sB7GcwIVW6I
+WxbA2U0Pls4+NDaIYcOau5J1fGJI37wan5Vc4BdigtMbdwtX3iIn7mq15FvZQv2r
+P/hJJQJp6c5UyhlfmNnWkdn7KUyzangzJyRdvL2fB5tBcv9IAwQP3tlpDFWaLkze
+DUWVjeJC2+207OmbgLksZhcTS63zfLM0EQuNME2BRrEIohgfLczT5VrOfePBwK6w
+klEeWd+ikEgroFHXVaYXkmWub3i2RtrWunoIk3rrY9eN8WE0Pv9exQjqPxFQ6Xxa
+G7qwM3iSeW3khtaaZaI0t4Zl4UsS3QkdRFk3Sm8JpqFNIcrROxZchVsKlPAD6F16
+b9Jr1ly902OioOQOvsNPybPipotRm6OG/MI/1LDxir8tfMnxvpWtLP2WO3Fbh8Jo
+GbNhPh6M9o7gJwBmjwgg2SWcIYkCeQQSAQoAYxYhBGcx3cKDV77DjjQqr78zQhP1
+xcoDBQJbLghhRRpodHRwczovL3d3dy5hbGVzc2FuZHJvbWVudGkuaXQvZG93bmxv
+YWRzL2tleS1zaWduaW5nLXBvbGljeS12MS4wLnR4dAAKCRC/M0IT9cXKA+VfD/4m
+Fxih46geeqBmTOZ7ZG6yl07/5Jgc97+SMHn8J6GZmBq9958YjjSc4NfLTS/nJs3j
+xjOhBny5QzYKU5DjAF1N/6j1S2frT6l+9UpvbWGUW8HP1Wn9uxA+h/tdBBEN6Wxq
+hdOgKfA/tvIHJ1cgNA+29cqbpk/xGaKBXz2ZIXuYEabt6Nr/qjaLW4uilmTowLQ2
+PkxCXuplI8kb/0K/jkex1u/qsPOWAf1Aq7f5JI/dv1fKNcDaxRjXFXtSLe82ghgk
+3Qt6YLyspy6YHxUOZ9Jr/5WdxhU6hC5NLjE2Wvuk9AZrGWZc7KLwtNuoksd/TV3q
+S9ONt8dtIO/BOkCClc8VO03wD5AxUL8imB3rCoaIzhaXVOkRngtpgiHcLMNY/3EE
+0O9fVgU3bEyUMmp5qlssaVWBIVSu0TZrPjhhVZoJmrWbfb8O5/RsUCvDVKBP4V07
++5a51ztofNO4twy48EusR13ZkBvaNxUBjagMkLRTllV5C4cHsRsAcLXEzS9IUQ+R
+Co/o2Q6suc7Zdp0Nrx2ZU9GOK9x0ohJJG5jsMEoxHlPr5PeHVkd3iHHtdAkRR5+q
+A4bLoyQ09Z7tghky9kijSgpB5M9Am0qtkadHLTyxzlZG912k6hmk5jeQCoUyP/Gb
+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
-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
+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
-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
+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
+23znNTCvljmIFqKuSKXBi5v7yNmHZ+4Ey1ezUK2JARwEEAECAAYFAlp4p0IACgkQ
+HW5pbiTdqsaPcQf+J7pTZUdk559tU0mSNw1CwUXBgJL/sd398auGuS+O2j7vJhgN
+Gjd7/uV4Ep0qatJRCkLYy5AIG8+rTbGl/n6bWqSboLsi5upiSPXSU1aagGxhCVbF
+aZGgpMZygAD0F81gGHGxhJmNJNx9Fz8seHARbDinrpy2VD1yaqPV2VUK5DKjFMww
+YiS8jIiRv3O4ZFT2jhK/vejxGrqMdMYPmG5y7tUIcEm597CSmfNizGx74hmCza9v
+klhKTDNsdlnDsjqOQ7TDflM8/81eZqZoHYp05zJq2oS9vOq3BKWMt+UbyiONRpO2
+w22c/5l0Fjkn8IfPS3QNNkf48ePvQ49PyG8vyIkBHAQQAQIABgUCWninQgAKCRBV
+v5yGEwedlY9xB/sFoK1LK/HthD5Ne1JeR+rn05Qw54m58BMRqngLYeT8YzKbCoTy
+qphUFNE1CQ0QI3GRmEh350gl8EUG5OTQDwJy7dXN2knZjoFCHrTEW8br/U1waHhF
+7gzsMic7424Gxf4xfom8Di14D8Yp9wuykeM2uekXg/Mia/7zN2DJ3Y4zNk5euChv
++kg1ZZ0m7xfIWd4t62+9L6hsEpzBiW/CY0/afkKXd1+GCPp+yCZcgqNUvMW2G5ao
+bwF+hvjqL9YZJo4jSrtNrEFGHsqg+ye7d6c2AJtFiJ3F5n7i3oGtzmHYo/azDZzg
++IMhoW7+95inQ9RnKirSoVFGrWozgPaEtJhZiQEcBBABCAAGBQJaemaMAAoJEM8R
+CepqlbYYXFgH/3JMfOP8y4MH799YJfRdjolVpCQtOoa4tnAr2JixSZQNodsBtjgw
+j4Eu/CjX4fkZKNxq0yglsrczAIbay9vJqrWru7DEhST6n6yzoJLMdF0VGKVy3FTT
+MvDNR6RuTxxFpNCPfhMKQkas4mYPVT4e7QDU3y7DPgbO1Gf8L+Zyezrsomys2RqM
+eAddjzVwwloj+lwyIaK6g3ziFt9Db66FurTGrAWw1Xhkw3hfHiHSubu3WPW8MqIa
+3nBL0iDZHColaIJLPUNpI0mpYmgw1ecpbGnv2HJCdiLp5FP9esyVuhmsHtNeHs/S
+fvTzGkjPDLrjtBUrarJh5KHh+GuxgHmZzMiJARwEEAEIAAYFAlqHG80ACgkQ1Cv/
+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
+rOw2UQWYfahYLafiR95vj6K5Dq2U5KQIDs/zk9TdP4zVTMqxrYBHASvrsdTBknWi
+L2EaqZECHznDCc9NBKXIFaCSf9E1+d9uoeOwDTPEkAgmrV8iGnXFveiJpOvVxseX
+qKF4tV6azdkOqDsRGiWKG9J8V9A+4K+aIk9gz+SAyV/R0YLRgAEQAAEBAAAAAAAA
+AAAAAAAA/9j/4AAQSkZJRgABAQEAWQBZAAD//gAETWX/2wBDAAEBAQEBAQEBAQEB
AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
-AQEBAQEBAQEBAQEBAQEBAf/bAEMBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
-AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAGYAgAMB
-IgACEQEDEQH/xAAeAAEAAQQDAQEAAAAAAAAAAAAABwUGCAkDBAoBAv/EADgQAAEE
-AQMDAgUBBgQHAAAAAAMBAgQFBgARIQcSMQgTFCJBUWFxCRUjMpGxFoGhwSQnM1KC
-0vD/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/a
-AAwDAQACEQMRAD8A9/GmmmgaaaKu3K6DozpwYIXmM5Gtajl5VE8ff7In3/z8JzrW
-9Qnr+xbAp0/FcAijzTKYRDRZkgchwMappg3OG8EucFji2c2KRu0iBXI0LFaWLJtY
-MwTwNuj159bpeBYpCwHE7AsTNM1imIaXFIrJNDirCuiyrARmKhI8+2kMNV1RhtQg
-RguJwDR5kCG9+kiFjzBPQhU54/m2X/JNuPynCL+qLtoJPzv1BddeqUoh7/ObmFBK
-rkSix2XJx+jGFXqRAOgVxxLYDG/dwi3J7KYxEY18pyDH2xQWBczPnl2M+S/fdVPK
-OVd18puR799vqu6IqLsn11eIY7WNa1jEamyJ45+yfhETb7L/AOPjXMo3J9+OON0X
-fld+FROefpvvoLGjV9zWyEl10+ZCkpsqSIhzRpDVRUVvaYLxkRUVN052+XlfC6mv
-EfUR6g8JOMlZ1MyeYIfDo2QymZQB4m7O9rtyFloQKfK1O+IWOdqN7Wmaxz2rZat2
-4VFRfO68/wBFXf7a/DmIrV/RUThvlUVP+386DbH6cf2gFDnVzAwXqjFg4flc0wod
-ZbRnGTGLuaZyMDDaskh5NBNO9zRR41hKmQpJmNGO1bMlxq12zURGFY17FRzXIioq
-fVF5/P35T6flFRV8guQjJHsyPXjuci+V5T7fT7cpy1d0+vjdx6APVXO6iQF6S59Y
-fEZbQV7S45cSzq6VklHERoyxJjyL/wAVd0zVGrjo50q0rHfFnGSVW2lhJDaNpoi7
-6aBpppoGmmmgapF5PbW1p5b3I1omqquVURERGucq7rwmyIqr+E1V9Y4+rO/JjfQH
-qLZBV7Tux+ygRns8jlWddMgRSr9UYKRIGUip8yDY7tRXbIoaUeol1d9dOq+dZq/J
-o5Is2cosUiugERsejgPdEpq6aqSyIIDa4TJBjQW977awkznDIMJ49pRYnSzKjlG2
-ZLoK8DlchJAJNhayGI3dU9uGSvqhlQu2zXOniUTHtK4T3sdGdb/RVkg0iVKJ3Kjy
-uXdd133VfH6J9k/vrKZiru38om39l/umgiWp6NSTHI2yyJ7ojW/wHU0AMKYUjttn
-SHWS3ABCE1Vb7IhPIYiDL8RGEwkY3asOit+BY6V82FYikHQJyEivryQBKqKkt7Vm
-yh2Ixp3qUIXQzKVBMC1zTEJFyAo2McRndtuvbx4/PH4Tx+VVF51Jixo/wqO2burU
-8fbzui/f8efp58hr6zbBJGHmhnbMl2NZOYyO+RKbDY+NbtUxHDYOJHjqyHMBzEQr
-pTwkiGEeW8h4yGsBybKqc+VTn/77c8frrOzL6mutYc2snBaaJLE4Zm77OaqK14ih
-enzBkRytYeMcaoUEkQjicwg2Obhnk2NWeLTI0ewUcqLLUrYFrHRzQyCBarljSxOa
-1IVk8LSSmRBvkCOAUg0Y70iyhxwhrMoTndp2N4TyqNXdqJs7lURdkTjjb+u2y9jo
-3nU/pt1OwfNK8hRlx/JK2YZBEcIkiuU7Y9vBQictZY1RptebhWqKUVHsI1ysW8pk
-UcsLxPRFRyLtv9FXZd+d+ONl+myrui7qqRbOx+TClsIJquGhWIjkROFRyLsv6Kqd
-yoiKn2430HrlqZPxlbDlefeC1/8Aqqf6bbb/AF86qGrbxBHpjVQhN+9Iuzt/KKhS
-Jt/lttq5NA0000DTTTQNat/2wPqIL6aPRzZZsPCJ+dMyDqFh+CSocKYteGnh3gbq
-dJvLCakKekeOwdOtVDc+Ooy3dtUx3uRplRdpGrF6l4jEzrBcmxaWGGZLapmgifHp
-vGBZpHI+qmvcjXvG6DYtjTBGExxQlAwok9xjdB5d/Rx6l+jfXStJBw22PV5lDjLM
-tcFyIQq/JIsdiCaebEGwx4lzWjIVrHTayTIcBrwrPBBIcYlzGzbN8X6dYxc5pmNu
-GlxzH4qS7OwM0j2gGQwo0cbBBYQ55EuWUEOHHCN5pMs4Y4mPIRrVxjxfA5OSy+tG
-f9WKzphVZ30qu6Wb0JzfHsIsam1yCrLX286yuZ+VtubKTU1NTRrQybjHshkkiz2m
-ucaktkkeH2si7HHK7L0juyShgWtNNhQpcihyOti2IBSmoOQFJVdOCeOkyCZd0V4e
-8BmqrFR2zkDAy1/afUL7ZKvph0zu8iY9/tx597OSrOd6KjUWLQ1US5lnE967jcSw
-iH7e3vije9WNlik9emf4zNgm669G8iwTC7hg2xskjY/ksZK15Vb2nmBthObYR0aQ
-anDEcCwAP+MGHNcQcd0l9dKjqZifSK4s/TDVYdW9SIGQUcWPiBMPjqbI8WmBlAt7
-Giswmh4zW2VHYmqCNgZK1rJ9cO3PFX3IYQzMh6mq/wCWXTYd9dPyLqDY4NigurdF
-IomAqKfM5GPQXZmCJc/DV9TeV7L11iKJFp6SRW/CKITLmY1inOHZr8pp8vqa/Isd
-tIVxSXEUc6ss687JEOZFMncwwTDVU2/mYRrtiCIjxEYwjHsbYHUyGkzD7Q6BQpKr
-4a4G9dkLHFXSBmsDgVeUJ+6UsBOGz5ziMWK3u95WuuSgxOgxGCWsxikrMfrTTJNg
-tdTQY9bXJMluR8s4oMRgYwHyCN9+R7QhoaQ4sgjVOUpH8eSDHIpLWCZ7hDn18yC8
-rURXDZLASM57Gu2RzmoRVajuFVOUROdBjHW0ttduOlaMY48UkaPJsZLHvjjmzihB
-BrgCY8Sy50gkgDzjSQAVbAIlhMMnuQIljcZOnFUsoFbY5Jk82ZLKaJ7FMzHIkQZg
-hcSSAZZtSeac0VUVjpvuV8VURqMaOYx4XyDWDi49j+OR69hJpwWcsjnjCrpNlZya
-O9IaQ4DHvI73CuV6AY8rosMbY4e4UYTdVB1ctGBs+aFZRGyApXWqMa2XKBAs6kVi
-B6M7BOOrZMZjziGBkkhSCINrwuKcN4PRLMVz7pThOVkc18qxqVDZFGD4UJ7iplyq
-a6kR43mNGk21fNPGju2eCOQYiIj2ORJT1B3psxyTivQ7p5VS+34g1TKvy9u+++WW
-9jlSe4ioitP23LfiGKnyH9xvO2+px0DTTTQNNNNA1D3X++kYz0Z6lXcRXJKr8Lya
-TGcxXI5hwUdgcT2ub8zVa8SKjk5Tz9NTDq181xqJmOJZJi01GfDX9HbU5HEar2DS
-zr5MBSOYnLkYkhXKicrtxzoPN3jVHcWMyjp7GVI+FvJUm4soZFcg3Y5jZYJ5MbZ3
-cIrLC5nY9WTYJhEFNo5twNUarWvblLDaAhmNkEGMbijH3Ec1re8hGjEzdyoivIRW
-DY3y572saiuciLDGTZADp/mMqXfw5cSFKpa/H/cDEkyx0FtR212S0g2PwsYywTWj
-rWuiwka1W2U6odXv9ua2rDM6MfqjEyJ9lRF6edRTRjxjxmkkY+KPAtHGGqBjBnNt
-GPr3Se9vZNs/3XFrnu7582uIJ6jDISZGCA6DErVRVTdE8qvCqvKr9FVd90ReUVPK
-arMGMJzfm23248bqm/5/9kTf6Kqcx9Sts49PUhupTJtuGsrw2swO/tSrEUQTJ0ke
-4wJ7UiS0xWo4Afle3+ENU7EuEU5w04d+eP1+3lP9+V++g715IhwBKQjka1qKu/Kb
-JuvPG6ovC8crsirunG8D5ZlQ5TXxYqr2qmznJsu26IqoitXx5VE87fMu2y7Spchb
-bAcErl544VETdU+qpsvlUT7qnhUVNQZk2PNqXoRjlVj1VERd90VV3+v+qf0/AfaC
-RMnWEEA1esOlC6ylIglkPFMsHSIlXPHFG1Ty2wRRLYZo4yNRSToh3BkjARjMreif
-Q276w5NDdY/GuwyqmiNkEuSEUccWJ70eWTH48uIEAz31oFoiyoscfdVsMKVOkEjM
-hx7jDbpxJLbdVMexYEqXBdkuU4fhhCRmsKNIFlZwwyp6tKNUU8b/ABIf2vaeNwT1
-yI47mEkR19JlDR1GNU9dRUNfGqqisjNjwYERnYEAkVXuXlVeUpivIeTIM4kiVIIW
-TIKU5SEcFTCEUcQgAEMAADYEIQsaMQRDajBiENiNYMY2NRjGMajWNRGtRERE1yaa
-aBpppoGmmmga60vuUD0b5VF/sv8Avtrs6+KiKmy+NB5/fXFMr+mXW6bCNGtjCy6r
-jZwqVsRnwNUCylTq2aaztLCRBrYpbC9qLKWARpveVJStAi+2gW4/0XXXCaoMFTMt
-TMnsI6EcUzFHCltCqNM6M4mTjWSgVcjSrH95o1XZzk3Tfd36yukU3OenTMuxGpNa
-5/09fJsKWujcFv6KwWK3JsZduqta6YGDBtq+QMJZgrekgRwI+JOsYc3UBidFb3SS
-bU9NSYJKsnDdPkwgx7i8sxuTf3HTlh1sUEkLVV0c06PfAV7+4kRRjcw4XpiHVPB8
-2nEp6K6GW8jwFs5NJIGSPYhgsOKKSUjXI6NLjikGCEkmvkzIzCFGxTdz0TUh6pFT
-T1lFHeGCJGOM9Cy5ZiOPOnnRvb8ROlkVx5JWsRBC9xyjjR2CixWAihCEf5sLyDAY
-riFbum/CKirv9tt+N/pvtz50FUMZgGOI9URGorl348J5/p9/tqCstuJFxbx6eqaw
-006qo0e1zwRgtcjTT5jRuGRY4FciNE0oiyzqOMMgu4kgHNfZhNtpTaelEkiwO1Hs
-D3KjAAc540mzXM7nBiI9rmsVGqSQVjgx2vI1ysvXD8PDRhfIkOdLspStLOnGREKc
-qNVGta1FcgI4UcrI0YbvbAxXLu8xTGKHP0TxWtrOvHSaGncQwspx+Q55e1TmkCvI
-1jJlFVrWMcUx2FlHcMY2d7nqxjGp2p6CE8Jt4+mtPnp36Q2ma9cKHMoz3RajAES4
-tZXb/MeWCbCqqyO53c1TzifFGMqsewVfBmtc+PJkQXu3BomyIn2TbQNNNNA0000D
-TTTQNNNNB1pg3ljGYxdnuYqNX677a0K9ZOnuddJcwuxT6+cHGyWk0tDdNEQlVKrC
-nKaEJ81jUACwDFVopkMyhMhgHKEL4TgnLvz10JVbDmNchwDerkVN1ai+fPlNB5r7
-XqOSIg40qWwZzMV8eOLvPNksb/MsWGBpJUrZOV9gRXI3dV+VFXXFW1mS5e9Ht+Ip
-q9yoqzZSALZnYvLXQ4LkPHhse17HIeyQksTmFjnphucyQPOj199MKzGlxbOscpIl
-eIpZ1DfGgRI4EOcipaURJLQMY7+Go8gY6U9va8soACk9x8Vi4e9NsgdLGgCL87dk
-5232Tj9fwnHjb7aCQMaw+qxsCjhRmseR6lkFe55pMo6taxTypR3EkyjqxjGKaQYp
-fbawff2MYiSRjeO3GW31TjOPxWy7e5lpDhBe9Qx2KgyHkSpZ0YRY8GDEDImzTMEY
-rIscqx48mR7UctERd0Rfum+s6fR5ge7b7qXPB/1VNi2MvexdnACUR8jsQOVrhlES
-cGHTBOJ7TRpVTfQytRpOQyZ6R9M4PSrDwY3GktsZ55ki1vbdsZYn70tZTRBUzYqm
-kJHBFgRoNZFGhXuWLBCU7ySiyDEk/TTQNNNNA0000DTTTQNNNNA0000EVdWenVD1
-JxK3xbIge/V20ZAyGse4RhuEUcmNJjlYiqGTDlgBLilRHe3IAJ6tciK1dbYPQ5fU
-t0d+EZdT2EIhHuBEylsyslxm93yjNY09bZAnK7fko6itQaNRPZMrlejTQXP0/wDT
-xkuYZLLoZ9zS1cKhkqHJZkA8ybNYMZzAIygFKqI8aUYxQECKVZ/BiiMIycSBPUTq
-w2z2jpKrG6etoaSGKvqamIGDAhh7lYGOBqNajnkc8pivXch5ByEkSTvIeQUhiEI5
-poKrpppoGmmmgaaaaD//2YkCVAQTAQoAPgIbAwULCQgHAwUVCgkICwUWAgMBAAIe
-AQIXgBYhBPaCzcw53A/q4RYgtsdGz6nnT6SwBQJfF88vBQkVNFxBAAoJEMdGz6nn
-T6SwanMP/RzBZ5+xw8mHvpJiSBl2GC3hAbO+YaTqzy6e6FZSqqCYISx3l3+mhkA2
-eN+M/YEE3bj4moi2nb4UMHQVAnrvxpY6qzZP2kCm2tsFgosag8wZtjZ+WULpAcOU
-r1bxV2198sRe0agTM/J1p/GVuoWrE21hoqzuAsyjBiawz9i0Hb5zMpRUB+MPHsn7
-1mYbDNW8fRWmdoZHXubCl8ZvZXiygr/KyevU8npMtFp0t0WQj6UwdUukVL4qDnt6
-1xC0spP69L12LgwhMXGJmwmlL2At7qFWtlVvxhyEs17bTaQzI5sqrTnDv8dgV4T4
-TqUI2mDlxWXq1bHyekV/DtAPk/UtquH81rQkhz9CTOiLmjtaH8tZWhVzRfkOsxf4
-/xCni03PzQFW7C4LbIgkhhx+zYda8azTVi4V+qdJ4aKsgRPP8t51oxQxJi3D5dk3
-6osWlZUNnKXKbY1VFR5DAzh3mZKqKlL82ts/fUvM6z4u9uCm6TOx9mGtCOiy6Vwk
-X429X+ffbgCRPop3tnD84lAOZdBA9i2RLSOGAM+qEw/ypHCP95xcU5hH8L6mCSUa
-7yBUnXbR35sj5/cSPMc64/rPhMlui1TlpOsdIxlVog+X1I6zCKz0jZJsd5OxrRkS
-EJ37My7v2QOcvtiAl3UmlslmF+JbpfVciYR/yI+mHkZB9qO//hYjiEYEEBECAAYF
-Akw8BoQACgkQNT3KVrS788eCFQCdEHYt53r+JtbjShdQYiz8V66rUBkAn2yinJfk
-pkva3+ymwv+qkzA8VAOViEYEEBECAAYFAkytDwkACgkQsCouaZaxlv4aigCeKN9G
-wS5m0Yx/mjVh7gZVJEhkoUEAoMdekUxOGERPVfe3eTjboH4xUOgRiEYEEBECAAYF
-Ak8ffT0ACgkQfUtuGJ4/m+YSSQCeKWh69Q5GvvXYFbznw8GUSs1Q0BAAoIWJoids
-RL+0jrhFFHAvnN1K8zgAiEYEEBEKAAYFAkvGy7IACgkQHy+EEHYuXnTA0ACgmz/p
-IrB36r1LD63fxYaPd4SMxQoAoLwQ6wAO4439ZYIoPzHas7EEADiqiQEcBBABAgAG
-BQJM78IHAAoJENk3EJekc8mQaAoIAJx+JakytQQBqzPYacY8y8UAiGEpLIJOFnK+
-wA/S1YrwjK/LiM0Xl+jh5/69usmygYv9rxOjiatMevNGUEeh5DIjAFyAOcHUUzwv
-na9NHOUT1mkGMO9mKYT5DDdlI8mDJc9hEoFD8xcHf/jOTFlHSKsUc5E6Xd7ByUDm
-93yXPV+qh4vmusvnIZAZeULqDuWXTb5Q8vySKvnzbVyrv3X6FANSh7h27NeAuacc
-wTHcvXAvXq/7merryqBgZQUxLd4Jb8N9MrDK85REziXP9NL9AfU4547VzjPRz5H2
-FIz2whM5DrLmMzoGBn/3n+rVWDHYbeiSAmSTHIm7tipx/xDYwICJARwEEAECAAYF
-Ak8HHNYACgkQqVPkiRHCaubXJggAoZ16EH1uJFiB4eiSXTHnD2/okzZAaEXTNjRH
-q9ESdsja9zF3IDFOC30AgbjNLN+YbkaEe7AE2l9rimxN+QuiJNoWnbNuglm4X+Pu
-6yFvj/ZMGxw8QXi4KnKZzKfLc5E7DwfPI8wlJbVAn7kIgh2+A1wvTe1eDc/MPKl9
-qnK4u70BN98Q5kkyVqdrpd15l7vpQi7tAeL2JyfzDaMN/8NzqzZtOO6AFYlXtec4
-futfRKFkBB7752aqn2WYXQsuMzKzOhJWpVkbcpInPLroFhkLayQ28wYEzVOqmg9I
-b6LoHCojd3a3/W9K4aA8bJFSMchNwlS4W1qyZbsq8xIWaq6Q1IkCHAQQAQIABgUC
-TkJVrAAKCRBDJwX6zdQDJWeCD/sGEosF5dy2mbJNYWWyvNusJj9RB96igBPq1G25
-6FEIqnNRyApKpG3jR36LO89karKmvGSn8tyoWzMqyL3ytB7WJSmHX/21XaoTQujq
-t+gRELTbBpMwX27QAJUfVPgqQvovO9Q5XJdkCctvzoeyUVry7iDIfXpJh9gxbYWp
-zNe+KEQlKVjxaNh489UEqUJqg4BqBjSYMingcG+ndr/lg2m6+95w4q40C6yUVx0w
-Z2T/8ss4ON+iAdNRZ6EcrOJsIQrN81suJE4L8j5FughSnq/Qtg9CmjwVnQ60NrAf
-wKykfCIhSwXe+xoeQAvZY9wOpjdXN1MVmfXU5k/LnGyz51kYzmZyDn2Wc/2CfnJP
-YTDG3BSwcnvPWyZT8C89TjC3CPQ9xtuuy5BA8a4LR9tdk2jx2fqwkrmM5sd6EJgA
-m/9U6i07c/mOSgSHhqKxKAJfYOnY9SfCCmrkCPMYHE97dt+vYrRlGNGjb16++x/b
-dNoyKa2ulerZPZf1EL1vmS+HFT2lxCgxO3541jxcot7da8Kua1vNvSZg02LX9zaF
-yGfJPKz9Ae5DmtnhOObiX6w+fEli3A2bvDWa4u5Br2SZo4z7+6AC37StuXKZMv7+
-odSdlU3pOoHB2C6lO2/rz1NwF0N4/60GLGdWHpFw71qpnUXOMTvjxo57yM/KFeNJ
-ry9HT4kCHAQQAQIABgUCT1Dt+AAKCRCEY65TcMk6kkcJEACC9dFjT/ec2/0DICR3
-yFcmY6L05b/y/grFIaCNWnNy75KZBIqQTi+Pcs4ZdCyDqmJWp6SpSrJRhr2tO5iY
-wKJPzyIE5/ys22zp0N/HWKrkgNW3eNlGjC2mPa/ZP2L1xU+3pML/WSw9tDqyzS+3
-5talcmuDpGSNwMl9YsW+5rx/Z0plgiRMk0cxg+WPZO5UuIJ5lVlPXreOc6RldZc5
-m7G2o95rfCmOBjswRME+05qUij5XdgzTa7q6QdWebIhFAVCiI2MTJq8pZ5MrMZi3
-DLDJqlxCuBgR1J3iGedD1ujjVi8YJzj864ET9kl9BqToiEa/tgzrpubDNReIa2UR
-GXz8VSrVkZ8W6VwNL/URrS7V/At17y7oPaZ2UVAXoQ6H3IczIjdicG7icli7zmTT
-ak6tmrfpLkqWiW+Sv7dBVeg5if6sjcpa2JqepYcnYZ4ARMNDuno5F8/sEWFQ3POF
-afcjM9w8SwBL+aoOHYkPF6gwif+KWEDd/ZPXr+aa7ciVnHbwdGu3Z4mkPuVU7dQR
-/n99HNZLNDYBkBq3wJ39O6NO5bFwXtnoyTIK3N7ISHvUrOV314pQ8PbQXj0a9ZHQ
-ClUQ8WCMmikJONx2XPhRGtE/6DKOggB0Rmmprg0No2t4PgeNaPuJv1Oqd71YPNlu
-vEimketZcpqcfdJJDH4a728/kokCIAQQAQIACgUCTRoWoAMFAngACgkQQycF+s3U
-AyVmRw//Rot4zmi4bxZ+6Vpx7TB5miX1BI7T9DW95HWhW/u4FkW2IhuGBaQiK8g1
-7AK9oe8tAmq2S4r1Af4VlPQM9AjiklcwsyqrAb92cNtutY78EKwxHAworfXpxOwn
-p8JvaVgIvaGIumwXRCjltrSZiwrHfQKUWx/l8vrgosESeWISymW3YYvyEbV2dh5A
-pBdzQp0kSpERRx37tZPQNbOrHuA1xIpO3wYXcz0U8rG06XXxZx++O8W8KDgbTIlC
-k9rY+uAmKuJvb+93jaJswtecschy9BOvMDNA8QF26L11hOcc/OegFHQZU5SVkjHr
-j089799Oc8UZwEPkfjyJ6xV14jn7CFy+1oMKwMudcqGgyDogARcODdItRJksivWW
-YZEySq9DOsqPSZWDNKET/jwt0KmVK8b4FWFoWnNKDirtcwYdXBXvqB3XYIneENk+
-HtMSmBUB/tZ6Va1sab3rQRq5OKOQD/xR2ut3U1CXuzT2wxA5L6ktaZsk4+fYNJ5a
-641Dwe45H3QSxPc9OxJz59YEXZ5/0F2RoY55tMjE3cHGHH7IJDxZaXRmzm87ri+Z
-9oeVq5L6Iwtbtg9QmQ1E/l9jhHjtnr7rGbpo3TLXZfkBvu5elxEh8DJY3YhJaRm2
-+I9M8G6sXLxvd7A+2JioUGjADoeLR77whEafcDiRNndPdlKA0G6JAiIEEwECAAwF
-AlAW7X0FgweGH4AACgkQMzvmr22smRi44g//fywvs/HxiM2JHpnDWvnBYboL5S+d
-GR6PhapJk/RcefZUzZmLrZWI2GO5xcAZbCgFy0jT0B43hKWUuN0Up1WJNqQstrLp
-OuvHjkvJgpNPLWgauimS4oso32/TenPIC3ZS4NJSD5cI2geG+ebpeOCGYlSMY+Zv
-pzzpRiae6WC9R7tWkD3F+bapICBcyXKhcNnfCeHC57uhw1d7Nu/W9gcZbVOUmk0P
-3DdeNIklMjUDDX8nmzC5MLZm6EiGbm7DyKvixZMIc+9n74rpK4+Cyu3Q6IL4M2Tv
-t43/UH/7Gcndvj0JBGAqIWeQHy/BIlzNiXhKJUxk0PU5AqgsAB1kJ5hMS4IStv+u
-m0h4ni+E4acBJRDafLc0RdZKPsgl26xmrNIdot9iDtwegszn6v0095pVzc+8LLJ8
-AhcrpCmW8GqyV+lVaOAAwaS4H1nLDlvJbBtTlB7XC+Ytl2LswNBQ1wkRSlXwyeXg
-n6ZPQNShQLawpNVsg9dZq582w42BriO/rjaNMQLfKFrI+C+AKCKJnwpSWHeo6Ta3
-Ff7jK7Dgzo3LxWhmwhN5qIjBXsMX3UECpyERvLjCxa/GuVT4FJ128KTFSTa2FZQM
-G4po7PrhSfuNKbxTNeyiNoMN9BAxxFDAGjUnAnJ299V4zzLXlCyvOdEFsdJPLPTT
-JlLuX8qgYYpH0A6JAlQEEwEKAD4CGwMFCwkIBwMFFQoJCAsFFgIDAQACHgECF4AW
-IQT2gs3MOdwP6uEWILbHRs+p50+ksAUCWbBknwUJD8zxsQAKCRDHRs+p50+ksH3F
-D/9U7hXZldRmVDCALKyazoM8F4hIXFcgcmNs0TAD1meNWL1lsez6NUp5E7IdYYYM
-ALnUkeRKrFN2d8Uq+S42Cyq5ajtHqpKw2cViXZKBmGilSz+nBZocaE46if9tpDC3
-u6z286LSaR/vmRcV8iuHvvqHMZtImysICmHb/Fp1UZj5JPF8lk7gqp62aqnJA9+T
-8UGXCrFgl7cCmVkKdLCXuwbgecsRaJdtsLSkwnxtrnizqkrU5Z2RVPr91GZ992tg
-SbyYT5gMkGHEG615ETKF2aBdMnj+jFP+OR7lJ/RhE/RN0SvHNrbN4CZAuMg/7F7O
-zWOClGWImMWd/kuCle7hMyc3QILFxuR2g8oKu+vEakSDAGWiBfFDRFbs/AsnQSk8
-bonl+HKaY4ENKNnLwmUMNsIVFTyjGo0zdK3nQru4FSof9QF37pOuwTWLOSZwuV57
-JXfZ0AA5eSqoxGLTjbcYBQSW1+gTaU68u7eH4Qf0ti3DZhe393717xIxsT9uI4KL
-BnlSpCB/OJQU7NUJEWetgD257kQv+dnP26lusrsBUKO1I9mS5wBPZXOTfDUlg6RH
-bUvOySNXlQN5XyC8vBsEaQDwZkVa8nul9DTkwzo7WUGqrtw17EpPuybuiP06SuDc
-a86z2yRfiQaIuuEY4GFVmIaeozNJ0c9z88OaOxLD/ulih4kCHAQQAQIABgUCUbxq
-KwAKCRDAEzCdbX5EXHWID/9tMZu/1B+Ago0WFI7PSNu/nXzz500FgIrCSk7yVmhX
-wWwu5cZJZN4NHna103rsIej/l19LcjbPHbnaOgWb8wScH1+52I/W8UuF/mQ7a1cG
-QWKNmd4E9n9hq1JoqB/z8kNqa46+AK37r3g4X1wt+wet3cqCQfFR7wNNQUcKhKjz
-Z3l6AbKeVzp7ORKJLsio6gYKxTmPUyQ8VcTiDhFRsX5WTkK24Y7DEL0t0X0ihQTI
-79gAv3JbhhyIVJEIOsuwhpUuDAfDQHSv92LR5N2T2NisvSMaB49Yoizun95XOBVx
-HTKCWtJsF53lYazh3JUz4ThvvZPVSdAnPv1pWhQxvgHks1SQTkUtx7HprW81mNlw
-hQiY/Aa9WFSt4oL1mTvKNbb1gBRDv2lyOCDJLalpuIR45iza7+FhXc8D8PSDa2cV
-uoQmVF/GEjYpb916QD1bf4ohqZ1nrPHrK8fHRvwKh6ivHy66JOoKUWsyKhMGq5aj
-uookr389rEnL3DCB8t7WjleWVICCyAceU73eNUC4KHeK4eKt8vuXa2mKlbW8M3ld
-6gcKo5aa/KxUF3XQJXwYe0zqJYyAVDI8mbDbTq3qvTqC4Jr3OTNkc9dv47oaMmhs
-dUuEXPjIVSFtMCDoQFrMVInDDMLVEe958Q39oLHvtyftOCNd8nly0N0yvI+AjJwl
-XokCNwQTAQoAIQUCS8bLewIbAwULCQgHAwUVCgkICwUWAgMBAAIeAQIXgAAKCRDH
-Rs+p50+ksJukEAChvP95M7plDYV1vlaf+0fTDifyquumz3R2ohG7h3+mIROFU7VA
-oLYuvC0pis4gZUgm87N14j9BnFRxLKOj/wsDOVWoqLhx8ebh++SBRkddLpGtZCOS
-00WWnYJFUODYsYlj83y7wT01OU7SRNrI5WvKJ+JxbiOM6/SApKctEDSSuXKMqsM/
-aganoROd7HoZ/g3IdwUGU23KOSaarFWXH1BxermbzDGwK5wNC9qD23fDzMHuThwJ
-Ypk+laWT8F+WGe8lnD4WFoFKqwlK+fyEKzGDnXeWr56z5GvCHZlFXdP+0ANs5fKH
-+S3ubwX8jo0R02TjOq+fcBzg4r2ip7eeLgLNvkRbks4m2Gy90F3aeNOrD3HXwWtX
-iEQw6C85UfrfbzOcE+YePlG4Fy/EliMyXQ6UqqM0Oq666AY+cM8Q5qlCsFANvpuS
-4GsIoO+M1rxLBIe9zF0lFIjR/g8DxNdbbd2zApWLh5mUlSFWg11WbFFxex+Usk/o
-LvnjYyEqVYFk2Clu5XrK4GjkkAGR/Tqjv1ShvSruzyrDl+u1Gpu7J+fVpV3tgYUR
-3xpXDW30OzESDx3DGZzbrgj1m2PexUis12w4Q+kZqXdbrxTupjLH3t6Wwu/YPd8A
-9n6IhR35qUwviKDQj31bpGBn5w5RwxBrqJNeFfQUq4xGtGE/XorWzLODsokCHAQQ
-AQIABgUCVesKnAAKCRBrSWZYlD+rIP4MD/4onNBOv0oeUoDcbLJ2PSYNEdLuqMTt
-n+6iYHxUv/A1eJ6nbQr2KPOn4qmmu98FaubIslOE3B1a/cltb1E9BqGP7395DHI7
-3ys7FbdGjXX4i5w6rpZFIWEgWgteCr2GlT08VpDsQjGZIiYA52iqez80VzPI56Tb
-PDLnqbW+qfTBZIfPCxe2guqiNOkLs3pKlO8I6so5skgX1bQ26XY7pdWUWAMffBkI
-caGDnPIWJmwkP3OinBYnbkht+svrDb70pK+7nhejW+36yGDUQ4sdm14w1xpcKVYO
-e7BDnXss9qS/J6NhhRIFJ0yQSA1/3GTSc17GJ3SMZVEk9kUIsPRAtaLZTbrmMfem
-vggxFrqZo9fjo4lW6RrslO1h8lfEfPv06i3C6l/UyLa1jWk1ggitJfT8TxsUEEYz
-PsMYK4BsOEZ0B2+tjh56paxvLLomQLU+/MsRPqL0YiQYU79sEbLgidCqNKKlPIAs
-xImlON8qqy949kF+iKpKiFCSQzx88WRjNnisIU5wSVtVYecRjDm4is9I6zg/J9WR
-iNEj+ImtiWYJmCX30ReXtnTyruVHr9xUJ5xyN9IScdBbOdgFyKicxZqBnYX22CdY
-Ax2ovdawcHZZPzRWgzfZg0De33srM84bidTS/BRbCvfvbZYj7KqP0tnXhQQtWp+z
-Psu9oa4Xo+6hBIkCPQQTAQoAJwIbAwULCQgHAwUVCgkICwUWAgMBAAIeAQIXgAUC
-UkNlPQUJCkElzgAKCRDHRs+p50+ksMpZEAChP9UMwmPHmerkUTFHmCg+fl4d+e/d
-k4LYKxSoL+H11HPwKrBwdKxMmk9f/IcYoxRUzSgDM0TGEm7/zOlu3uDun8zO7OyT
-96WPB/i+v0yAWnaLCH8cK+WPbem7lLRIxg0CfTSUumv4cFRJ2/s6fQZ/GgXG8lOk
-bz/pvXTvjDAsi6jpvlKrKAHmiArTFQjHsmDr5e83i21Vlf85bykXKCNry7YatwsZ
-TqHiMW0x5ZMEgGryMHCxwbsKrj3KtX2oiPr5TJsQap+6WqdHr2OO3VrfOspe6NVC
-P+LIymCNdZ/EC5QJv0NFv/8zDczJprvvBVjTMBtBTituEOOmQo4TbIgdA5mBQ5NI
-ABqBOdMCPSwUnBjYIoCaRl2gTQU6xHmTtQ4Umq6GLBOHAW4oCn6foqUjywuEaX49
-taHbXIz+4druaNqZsTlJdeaqITD4Vd9GgptSAyOjRhfQ9WTLTb7JKVi1gUzJ/NcN
-IUBmcLFN+aBWxJBf1rTRFt9y5fnwosd1vrNhmLHLgQtG+bdE3NbB3+7vJ/4TmQwT
-ToE1B308dgAPXfLFGQOXEtkn9MzJYhzL+a9IQV88FM8OSWyV3qYc0ydAb1FznvvD
-VmTctbueqh3R0b/tpOgvT7FpxlP6gfyBUkaNNAESE/qTiuK6jSMl43xZoRzGW3pl
-ikH47hPZhMcjwokCHAQQAQgABgUCV+LhxQAKCRBqpqEzMsgKnBWBD/0eRFkxL+wt
-Ou1sjD0oLQ1MeCaVZzqXLvl6bBqsmNRjHHCWfyyqkN71r29rucRZXeOLnAYPECsE
-7pMKuE1OTcFHSgr4nGUrcz9RxafpkQzIcTvDrXwm1nOIippEt3p/7HU3sBeCTFmw
-QlJ9cjerJeKtEDd3f8D/uxJlouiLucPttcTSGeAEYJ/FExu0F+GqDqbIQ1WXd6Pv
-v5UGnaas5ZuePdlaS1mKD05bLKkbqX2NZyxjMjO+EVmvOSwyS0MbXaWWr07ntRkj
-Tmm5LyC0gUcHcUemuWm2r00oJQxT4f8QS/p8hNGCGvIP2t/hnq/2HKj7I4iR//l3
-FKxz+OQ//FYfh/pGWs/45x/tIod1BlMvCkrgSfNHqWXulEgAkGHcC5cNDx6JzeXg
-eWnnA/1YECjQJwinWVozlyy69zh+LxyYjVfXdBULE0soS2AE+06GB2GWIekDUOTj
-LP9g19mGCJXD7PrtN5A7EIbxXQ8Jt66w6kisLHveOquZWBbtKVXq2cKHUfowio1j
-oYHSFr7n1Z3cqE9/ACVU3BUugkY4YFpC+QdMT4xgrA9nO9jsJ+KBJYcc/juURpSD
-qvFNFn5IegUbNj2hHQkNLNdIz65Fof2HujgQ6zXHXzzaXoqKhtyuGAz8X65eHMK0
-3C4DZryvsSaQ7BDSKHfZYokgQ6ShlRC36IkCPQQTAQoAJwIbAwULCQgHAwUVCgkI
-CwUWAgMBAAIeAQIXgAUCVeqE/AUJDehFkgAKCRDHRs+p50+ksMBVD/9b8WXZwvh2
-4o+8FMpNEZ+4Tc02hgkmE9UAnHDJqXrus4FdUPtXfmSGSAYeloaZhOT8fFRx+PZg
-4ftywbHh/IDUuZ0bt98DHQoS5qar4ibe8owmokcIPde1Xg4ff4B22M79WJvyefbC
-YV7ct0MEFJKdCVFKvDbPuF76xT4Mcsi/+G6fHNB8Wa6khOHNpXu+IPth5ScmpkXs
-TZ9rYlg5YYuIqibwVxw4glxIMWS49WLgbIKbrOZn1yn4NMzYwdFUNguw6ri2S+s4
-qBZpb5V8yUT2uYh3l0U83jZKfhVuG5sOjReWojmwY4jqiFNiTbys9+uZFPiyLKix
-OzL4LTIIjN6onZ7eFdLp5KFHuN2Y5y2xEOvJ3kZ4kAxZGx8ssYTHCyAeEI2P73cG
-ubKfbExdSIRxdIPI9Nr2tipcIaEmYdhlEBJ9Oc6FKX5xfXv6WpbZw4s5I7+FeG+j
-s8AaQeKLc+M0g1biNREKj2mtfQEgQMc3fnS9ygae50IR2uvldFxOO083e3hnJooO
-6vXMPlj5M2ybdxrsWFlJgCGbMYAukOqGbavHz+1XeolQN57+Wt/1783pbAsBpF87
-9cnLuRdt2P+G1EMLIFLT0ePVO73r9AIBIK1hFPmACfueqZMpfvz4wHJrdhBFDKwI
-2lQmJ2FP8jTn67X6eL3lC9nOQDDZs/DjQYkCVAQTAQoAPgIbAwULCQgHAwUVCgkI
-CwUWAgMBAAIeAQIXgBYhBPaCzcw53A/q4RYgtsdGz6nnT6SwBQJZr/OEBQkPzICa
-AAoJEMdGz6nnT6Sw96MP/3cKw1tsUj6HgCo+GqFupSG66/ow7nTvcoZTxdlx19TJ
-Wx7FzrpzOzGmDLRoNsXrdX6kGrjLvP6LV4luKBPtsaTcVmIiBgszyWigBxDs+fy9
-08LHXQoMnihQOVDrKVpz6WAowXAtrMbHOIUvCVM/C1udXQDMaiRFY2423sibLKag
-PG9eo9CPVUVcvvGCUYeYhyAawIANGGao9w7pGfLGVvJNHBLjwIB50d4BP45u9v4x
-YTZfH108gfm63n5yU+lefakmLaLcijsJbvNz/GcyMJVJZrWfgTdKnL/xpBHjoNCc
-gawvcvYDvrG43zdCinrM5mwHb1YTcTfcrJzNfvqEF0+atnFxtgMlgo57Nilt7+/I
-bqttMCX18tt0MjiuzFs1iTwTZE5NwEZjnu1Z4yXKsy0ihTSnXcVdpWAFXD390j5Z
-dZHTyunvuk++ZRuWeU88RUH5sw2aEeEx39Iqgp3wzOSA9Z5Usdd0kCb6K4k2AJ4f
-EOBtQvJR5QVNMCv1Sl1B0p3nMsQn+CsFq6MpQPSvZlRIipkgLeMbrsazNelppL77
-TfTuYiNtTaZIQ8K2wra7rTJyYf/p3AQgVzYvtn6lZHp4DcQHBdP5HwmkCW2DVH2H
-mYYnGYpi35VcwW0mKWyGPOkm/bIcwK5zqgUW7i8YILR1tZL1Fkr3IUbxEHKxAWZz
-iF0EEBEKAB0WIQTTO8XDwMxZtjmJ13vqe/OXAXViPgUCWoWrZgAKCRDqe/OXAXVi
-PmY/AKCcZzHCHT2uC43Jt68Lhuhfqv7LcACgisTFm5Wa57TVFtuCaY7zPi1733KI
-dQQQEQoAHRYhBNyzKB84sHEaQcDcIO6NNj0Wh5c4BQJafuXZAAoJEO6NNj0Wh5c4
-arUA/RhcE9o+ySqpHVChXzE8GEwTklMy2d0ps3ggClK88us4AQCEnNvAXFPHWKYj
-iy3503nDnsIid/go9/kOk3+ipqOL0oh1BBAWCgAdFiEETVGQANYpzFRXAAm3BwPA
-XIOiIFsFAlp+5dEACgkQBwPAXIOiIFv+ywD+LOxWoa42WN6Sb6fFbX6PZzeSKlLa
-zz81mVgpWphsphkBAIqyzIHXrZ+1x1w0K8rPBZ32ac1pfxiQe5/h+iuIt7UIiQEc
-BBABAgAGBQJaeKdCAAoJEAP6BGPwevMY7PEIAJ4A5NoxrpMIaNowV0tHsCqCWnwd
-Hwl64ZgenE87xqMC1gVaNaVHDK7UJJ3Xi/vionRs9BnwquuxQsHqwnJ49Hou5PdC
-PhKNtwcSdPrBUcF61b8DwJGSVvYXFC2o0DEgo5bsXmmOpndRYLom7qLtmSgnzzU6
-qzu91IFd0UgwPQ635kGVjsJqQbj54eEGQZUJdCIgvXC3rTrbCLzmrxfiJLYMfxxd
-3IvNFF+Cwgv4GQCig+qPeMXC9s6HxOEZ2Ca5/F9j+GDf15v3Bc9garCUgAWr22z1
-2+o980YdevVjaWEAKYrzURPuPr51qTlbSg/1OMxSJcaIUCny7m/bS5xK7kaJARwE
-EAECAAYFAlp4p0IACgkQHW5pbiTdqsbs8QgAztAkBqWfy66v3tKsj/gSDPt0FEa1
-sEyaOX1S+UjE1ASmUQtDlWlrBUKgC7pgCSeH3217IFaQ/Rgeidod2ldhe+D3jyNr
-PoR6ySS0cUL+Cz4mpYA1pQ14txR5Ij541JsfSU3FOpymlAbclPp5kmCL9QbZvTUg
-UusCx/e9ztlkbgW4w77lczhgWn8QQYPrcM/JVfA7K0ZyJahrr7sQB/ceXaZto+P7
-cYn6J/sVVvLs7gGWDuCREQfjulUnOXsR3dm7qHkiedCkUV8cqjejPjoTwRywkQjS
-Q9eSin4jPbt7S8iNYto6tClxu3rxT5IGsRPVfx5JqrGcEAGAz7Q2PZGYnokBHAQQ
-AQIABgUCWninQgAKCRBVv5yGEwedlezxB/45zdUHmvuWudxfi7juUcQq75l2tKZa
-gCcxfNsAxjWK2XMRKPenXZZF3sV2GRI9iJ68J35g56p743aQhgS4S0Zvun2aKpqV
-XrikMgTNHvzdngsXptwF5lmxumm1b4b1arKrvcj4m+6VvazJlB0TU0Q29DLhUcfc
-Y5NGdtBt5m/7InKLDJOViA2b8BZtVas1gTrZuzZGriOdbETg9rQZAE2WIzvQ9uTS
-BrBGVmpcxk9mBABlUeXFJQ6kcVCyC2bV7A0yEhT6IFIvFZ//5tKA46e4UaqeFV88
-7a7nST08pauBKQUV6cPYp7pERFrljbjxLv0lxQbruHJorsXM61zBsAq8iQEcBBAB
-CAAGBQJad1CsAAoJENQr/7YfI8W9eE4IAIhchx03eHn5n75MGlabNbQDicV3VQdx
-b6jF3yXQA7e+aJBs9RQBzUopc54s9VGsLchSt/UJn9+hzo9hPrpg9e2lxEYsP4Oc
-Wmhnub5OxXeIgRmw+rOCgjRXgq8VRDo7fZgujDjvG9r7bUh3+yqqbC6ruwV55w+T
-XzosKlp2On2Hkd6+3TKjw6ANq6sUGFOyJnnMkQ1mHAnDXnp8ySaveDjp389NbiGF
-IkkRfaK/S6i8HiHOmxSD/qYK0WiZSjzG4pC2vPBUjRJzsvfPMjwgWMMYTHhJdeFJ
-gRzmytoA0kuB4rv2ifV0a0RVUIsVsc7LyjyvnnEo9dOwmjxoLUDPvcmJARwEEAEI
-AAYFAlp6ZowACgkQzxEJ6mqVthhGHwgAljszOIpbCvgXBn+lY3RlkQMXXJsyXcN8
-GKLoXd5dTwnXoD7810sZZFp2nUxL5zPPvBr8teij2B2g+kNfAi0NzQAroJ+hkc+z
-NdpMBhEe/szP+vFJJOQSLTFaSQOpBQdzcdIQyFtPF2Y1AcXormIhQIcygUHJPkgI
-rZgBWlqetcnIAVzjhUeJ4J1glFr70wz7kxHnruTNjvZTVpbw0x+D9TntZKfXMPE7
-kYriYyjDm2mcnGDDnIoYnecOuw4U9eJTQMS6GCBE22oPr0bcaHBJeWadKoeQ4mbi
-2BDZSoUIvp3qIc/wfHmlUHo4g3MBpaHbOdzZRBNjk/GJvLgYDIbrYIkBMwQQAQgA
-HRYhBD7z/RwAmaqBVjR3pTh3rQXRWCzbBQJaejWmAAoJEDh3rQXRWCzbHFkH/1KI
-bT+JLawch8LeAe4sgZCCkVv0uaqwoD+LgT9xaSw9tojjyHnmjkued4LLNXjte9Fo
-fVJmt6Tx0g0eVzMxZdwLn7Mnpyt3WAhiSLxA8BF3WAJ8QdygBWvsTndhtqcwdJy8
-ao/0jGNkGTIsvrZz2fPsub3tZTjr53HrbR5f9tbKwt4ld5YD0PrG3XINwIPvwYix
-Fqyl8CMZqQuRpf71G0o7KBhDInyWV9b6s0XsNR2cAezIHS/YpNLEsS4eZLFHmokF
-kh8+kApudR+v2/i4TLzVTH/swG4+ebbV9CKAb4Rxcfr7Cc70YJV1FG5RXTGtfv/k
-VF/cfxk3qGBdlgu8TOSJATMEEAEIAB0WIQRBEARe56Qy1nr6yMhUA8VGSBC8JgUC
-WnhcpwAKCRBUA8VGSBC8Jne9B/0ZTSGTz+0O5QWInjTlavuO3Rw/KGKhD5sN4v1x
-HPRrb8r5aFTQ1NSXaA2nGswwlvXPraXthG4fAmSZhE806/8QZYWDehpxpiYgs0lQ
-C2KReEUfLHgArvXTUbmiV4qn9xh+GkAQihJ8LwpQwff1r4cavR07eI7Uo31lzAIY
-ssyPePg3nyGMiW1L8kYqPD5aWaT1t3zQ5snFR9NJgGP3eMjTsvjNcoCU2/MRO5ld
-kUDXFkKyabjGQEiQtQrDqDkTU+SClyX2m0++NQiqPSeuL86cMqt/EKwEJ1T3Vtcp
-/x1euIbRDjQV4C9sa8rBF7+KAiokQo3EwEVt9XKrQMGRH7OeiQEzBBABCAAdFiEE
-fuEwC9LIlLqR2krmTs/+zJ52kUcFAlp8fAkACgkQTs/+zJ52kUeiAggAnP3ebU6G
-Yf/QPhVtUg7G7GdDbxuzCgTqhCnK2cMwLjw14reR7YpAnA3uYC08NIMzSQV/a5/U
-O+B7cWkL95hdIdWrXYTyGExZMuEutlcSjqDTvh0D3ny0Qn+Y3kW2c/AjPH2tsGPA
-VgLBmKKgN6PRnXU3ZaJvRhu+ycsW85BRZssdEOVjRKY8MxWCSh+g3EQE78VsXC8j
-WcAy2moJdZM/d+wUXQGv8nd/XXCLWJa8yskT+LjzWz+2B+CAABGBFvRzOwwj+KdD
-ULNeoWe4sgypDptriSRHALwQ6IBnloKhjlvQde38Zlu7TDCius/QaXK4LH32YePC
-1QLcGjImNEoKKokBMwQQAQgAHRYhBJbPBJOYZd+87AaIBGXemeMEiBwRBQJafWvD
-AAoJEGXemeMEiBwRDwYIAKGym3ahElrbnblx55ww6/q0vxH9vb0IRQWrCHw+RXUA
-UrA4gS44gC/RgdH9ng15p9f+gPOmFCQ68bPrB34+fL0/2seS7ajs2YwNgjGO+i8U
-xZ6EbkFyckHglB8h2WgyAB98vFty+5DP9W/LklBCRXFshKoO456YMWcX7yu6ZvZq
-jwkw4HLe7bW9tAZxxyGJMNPmtvwV+bBb1E0V8n780CUoMXsyCMJJNN0nPxZMWipq
-iOwtZGKhrhHTm2fQCg/H2Bn2VcW+IF6UHPZbyzEL8QMo23Yrtr3c82VulHZBUi+y
-kqUDIM/IrpNnSe54Tfddy4zdbgnfDR4WG/tlCD+sxFWJAbMEEAEIAB0WIQTHl0kK
-yT7bAAYVaAr8HBy2gHmF5gUCWoWvNwAKCRD8HBy2gHmF5oZlC/4gP7WcxBPY7CV+
-OWRCBsrvEvMp0wDrBYDJ9MUY2tW1egQiv6+KfdsP6xaKtfTKAOVB4s68o8UiyXee
-z9IpVW+VYTWb66HgPr9YDM3P7sQK+4TnXLbotYhv8o3FwMFc4xOsy587Oxnjee/w
-1Nj/NFA5PZCpcEdni60DUojJmtYsprWH406LPkWkVVwKOp5pIY67xUnFhE8x2Uhz
-2ubU5Q78cN26VGoveHyssfdyR+em1V+T9SeO284PqWJs5BPbVJ2f6ZKKnFy0eZex
-Ahu89hk2UlwrFCpIkJoLnHS85zSvpFYT7yfQDCvN2yAhpnDDD0ZtM69EcX95RRSy
-1AnCpEGnBwlh6W+laZBb7Mw0mp/oUBtkx9urL++BrWGvWBVhx2GjkewtiTuok+MW
-YkeHcMTG+JV4G5J9o9IGafnLyIXEEsTKRHGvj7QQ1LvC6ohaqUnjFN/49yu760YA
-RSbqsklbNjAuwDWbO6c+CEO1e6hA8xD63ajySZMV1pq3C0P4vK+JAhwEEAEKAAYF
-AlqABioACgkQhm5ULPdCQbHYNQ//eLguU5D4jppylSMdpltoM7a7Lp73Pi9tOpMv
-K3IqLdqBOaY3ird+zDsIQwglZbSjZmmHgvwLgen3lJg7TPmjS/u/MqsK0L/+KVpl
-WWiHaZK8vGjbvzXkq6GUvdAEZppxEHxKLrXPUOeT+q20h5++gF6o03TcUMyKdEuz
-uNcy4gfTZBYXq7/8O8xAQ+N3xXrVUlA2+tQDQHkSLHrb3K/xwEN9kf1OX5y4HxZ+
-ahnANcX6OQrMVzxLwUZna+tnBW+ljZuYn0dmXnvqjCI04MFryFuXUdAXpe2W+CIp
-4J3vzj9kArtoopRId60xlqYXSXcxFp3oLG7dUIYF72CREOTmRcLdFEnOSQFcjlto
-gNWr/WkCCk9wV/oe2n4kQmUj3x0mCn6FC41uXDDrzwA62b4IZ6N3+ejrxBPYB8Wc
-LRBLRnQLi2F0H4xRwmuH7fIlcde2GxW70RYde/hV1WSoKuCsl5UNpydxdVsrv8Bv
-yvy03iNbSDjoJdd498fswy+dzM3X3vUjqlyuuqx7BkLVWDtlBufAgiPSbnHAo0Dm
-6o2zMPOaC329l/7uZqg1MRGxLHJ8svirPNwBhaYnFtd0JMcVQZNYittbAjsuZiY5
-yA0Mg3tS4tvlM376cZO0QE+8rQQHD58ZdvSQ7fzQGtyPHBdFlJnDTPUW3MItTjXF
-M+mgN/yJAhwEEwEIAAYFAlp3NfAACgkQGQ5faz9Xw4QQdw/9FwzG880x+uyo/mxc
-XGOi8QfMmRxdXf/ONJCDb/F49z00wEGQT9W7go1rpxVWcNdzIzLzUBozVmx/HVy+
-+T21FOmdCogtSlrbesICjpaFPaF5juhQVwJv3k07OK5HRgAWjsC9zeuktCnHXgJY
-2qobA50VxdzqH9ygoyXszS8TIcjuIetvi/7IhXlsUTF6zqL/fpO4axBDlyJqmEpf
-EQ83AxDbUF4GYJ1DEcdpEex8sdUW/NkpJeZRJBLdtXlAsvCg7nQgPkADgz26m/lP
-j/UNKPcNmnex0Fzn4nSJY36x5yZ+Rklazgu1kfh2u4wnM3igWLGMZeNdzWuwnzIj
-X0FsNZqprVPq+pHEOEsdVOo7zOXYGMh/3v9R/huaTqGQoPpiWIfRlW7p056td9et
-xi6VUsPw0VZfl6Wu+SPjIVl6SDRqG2PWTUc8xp+EGwKGJBdbZVLMPl4o4cjFg6Ud
-Hk99Ilm5WXCQG84/Legji/Wp46yjm5nw3mSSQsHb7O1d27lWZbVwqBePS33FKdhR
-d5kvivcPd0CJQOzjZmW1FKAPInJNue0hg7DdBcD9p53J4DYravRgqKGfAcYJFwBy
-Jadv17AY9jaP1PHoeoCn3IjcCpY2AkpjhJfM3I+TcRLh7+mAogzcpOxNXzzX+N8R
-qgZiPl/Pp8pYLRr41FGYYQ4Ub7KJAhwEEwEIAAYFAlp3NhIACgkQBA43GCw0A2J7
-NRAAvDeNLyio9NRVmVy2Un543HXBj44zMmbLFANaArSc4y/6ocA5/IEMhNqJc6d2
-woHC6agIgHCMcovfEp9u9jGwQy8I5VxcPE8ckFquz2AF+dW39QVJIPxy0SweumBT
-CdzmwLpPUvNcRlfk0m89ZYmfHzsZXbSFM8+UGv9vpRcO7qbbKQpcoLbjYPmg3lpR
-ixfn+bpQgHK67hJVEU15bZU6vmPRjnvw8j0c/vlNTMJjo6S2DArysCHoYir9o72+
-MAnSpIKlcjSG1tFxhzGT5eL+L7UWnRqGUc/vtJbzhvPhrTY8kpiJNz4epC9OaLrb
-EsUGh8ln2pdaNLKV0d4MipC72+YVD4vP6Dzaqyv0m28UwPO+txu2c86VlZkPqnMe
-enW8CP6bmdc3Y1RrkWAZeHG9OVnxqVyPjoDPvjqxQ1UMyCPRMAnx3QRAKk6iHreU
-b7cXFurTOEbqNFNw/MV18Km3PENaa42X4UqEYsBu+uqqDDBIFc/CtLRLA9nbEMrp
-6OORRvUkP25YmCVC+Db+15KcJrTXcal7CTR332DF1qrtVZgNBaemVDUvVaSTFlf6
-umzngZZhsyObzTU780b0MQO71KNqyzB06Afa6CrgB9mfEMh8csrX7ML/eyA7UHDB
-0JdIqlYMHmb40rTDWiZ9amqH4ePVzOUY7eevH0AmbrjKiSOJAjMEEAEIAB0WIQQB
-Nj4oVysy0cwz5vdfy7KMkjM7AAUCWo2wWQAKCRBfy7KMkjM7ADArEACQLCxC8ocE
-nrL+zZZ2H9LYCc4rISgiC640+DtkSPHO+XY+xqQ41og+4zbq6G1HltbBHNpo4KAh
-DmGqrM57ApWJrKvR98yyXqT+nH/ModMjWSmfGoqeI2JliD7/DukTACcvkr8C5WpQ
-DnMUcBIoL/2vXDt3v29QlICdq2EpV3V2eUS1PTE4aK10zeuXyfypT5bq0wWwW2A6
-Vq0zIJz8jfjPnF0nD89G4Am77B8BR21UyearQlcaBiluAEdpOm7lZ5zIQbJuhUDI
-A08cAHdn5ziONIFss3myWi+XMihxBGIsebKPl/pfWpGXfSwZNsuJByklDnuVBRfm
-jbNL1rzG7Oqb8uSE9+mwsZUwk76wsZgzVxFP+4sKqNAb6PA+i/GyFZIYG0/wj9Q0
-/sUuzt50EDtV31feOmewDH0FB6/uNR3E71N4TukcGQQ3SKHwJmqyNsnxxSfw7bml
-PiYEZDEpCoW1+997jE8kXgLWGyvNLuilVp0tocJjKQeH/GnvBsCFmsmGnpxs7tXj
-+NbZtGGLv95tsizoZXBmN3sVIq8FoK88lMaiGwJftS1oHj3eHRmXlGQDRAd+EFCC
-c1Qd674E9l9WOLmRjqn6O5nNNHDwQGLhEZq2nQGwSBi/wLrJOEZgRsCYt8RNG381
-ISZkV35bhex0AiKmRahNk73Bh8s1ysq1K4kCMwQQAQgAHRYhBBrYH3hbUmlZnWST
-ky0DfdzX9KweBQJaht3rAAoJEC0DfdzX9KweeW0P/iDuqcfLnc9JnJ741anRwVls
-VmHRw9WpJJCf/N/CJnD+bEn4DvfNZWX+ZiuR14SSPGpmEZ4YUcZq9R69eSmTkMzY
-DW6S/rlta5spuf2HekwV4bNlIntzd5u3d/7Y2UEek1vsOS7ogRu8Pi8PH83kR8m/
-s1KzllXBWcpf4cY3WT4lox99nv6ZXS+AgjWvLaNW/pgLUxHWSxmzeXECiap38vzg
-lY/0yaeEeWrmeEmoEkBm04Xcp5/Vccb3BBTneWfhb0M01UXqfk0v0Gq7vHn6k+tB
-k6/cww+83YubzFfB/1oCXzXi0WxC0ck2etFd67AMKadyb10JSI+EPtr9oR1XSuYK
-inDiDKuqTLe1wh38JuDb8F9/9no8XhN7GmDrAKWmI7cMdvLPGkNiMNEa3NF+2+Ov
-KyFLWt9prvI8WCVs8w1WlD8Nkt0yIrYBsz6uM3VbW+pTJE2S4dKVfLfjXV3cnmrb
-mnXEXqSWrSwgBOaR77zb1nQTZAS/GDAUqzK52uDLO2X30VOPFU/zm3+urr5fgY99
-ZPLVcj81b4Mxv2Lb/nokvt3XIteXGiVsx3jFbbny5A4s2EWf/pNMAkMbScBFGBhK
-8kqrsM9cpWwJ2alfQJGNHRJ/wN1ullk543GgsqkXacEEEGQfW/uV4vxGQ+Ay/ClA
-l6nTyqpnC053cOc+RvGgiQIzBBABCAAdFiEEH68EX5uPiz6/J/x9PEEH5oJsQOQF
-Alp/GC8ACgkQPEEH5oJsQORldw//TBp5BLqfLztSzd6tMRiAcuULsVyxPXzKHOn2
-K6ffrg/bx9GgZj5GB2uraiUuo4QaodI4XeymIKSqLrPgwwIJ2HlTzSQUvZ1Pw6sq
-WRr3Fe09FtD4v6ua1mNZ/GO+aZEXtl7SnIilEJv0CS1U58nQVk1xyaT2jhvHV9DD
-Ok18W1AVC019DOreK68vvVuqTlqiE7GEBqEYYRO/DnsMRkAeDqkr6c7veOuSOWpr
-QFjjMu0BGOhyrDaqqyFzt+CwphLI9K6wLyIUVFrj+EMngYkrjK3ckWJYjVKLs4u3
-4c/wnBrpq6rfunjVplp9R36zZ9tHJ4QR/kzF2E/tBbC52nMnPpIHK2fD7rz6L+kx
-0hAFenqwbJeKeqnd5GRinzFXUfrYAt4DbucnVkxWCQDjGwrTKH0eyGEjTBWQmCeY
-fGfx+BsMeGK7L4xERdzF3GieExyGzbAglBPds1xi9bMMTlmh4Dw7G+AVtJtHxwLD
-QAVvZjSzrpBSRz3xoomUnahsKkagN/dmQ38GDTiyRK6EyccKkafobqOI02UrJbh+
-mBuFYIwLsHmdKUGBTe2LDuOb2jaBqMBIF7vOr8jUepPq/IY1fn+IRDucLOBSoKnk
-LcN0RQsLYqWkHRrpg2GrhgMPGo/o0+Yr5PWm72FwRqBFQeAZjYfFYHMK/p9dfEfq
-UV1eWQ+JAjMEEAEIAB0WIQQuqXMd32AO9SpTrUgqViOIIPXyLgUCWn8ZCwAKCRAq
-ViOIIPXyLg3JD/0T6zgPmcy6MnWdt3en7rNi/854+8NBA08CQX9t814kuEOnFTQ/
-cuaWK4sh0CN92PGeYbWbE+QAsLdLdIYm3hvU71ymzTaipGX3QNVIxT3zakTvqqDs
-VZdZG6AhZXkU8jNuMBSLC7z6WdGp5Z6cPWLGxYgdUufDKcPnEHHfAi+CWNQmAfuw
-W2jW8twhNT6lN7mG16EqmQvTGKiD5LFnHv5H/oekWg0ITPr9xkbmmNSjnHQUGlPz
-qCmg0pYJ8FQmYZzqWnlrHUSvsEubeCiIDwxFoy4DEdNAwbWk2zVIfFA3nKkrwOl0
-RN2OpH+jvYeIMfw0vKSBtfDPNP9qugjHpcVxwBwfjQyQtLHYJ6I3BIX9bKYVaJgI
-o4kATfoNpTYDhfSX/uDNKee/vfYL+q57xIh1rN4J1j87oDcOmzWn1qjMEgiWqtuk
-blYnLp65WFDcCujppVvApCTlNOC22cEH2P1MzTZ+MhOFU9pNZzGRkdU/KZbiNF3G
-v65Du3zZbwqkJxVOMja6KexgOm/AHwpbTCNEVAbQhHUqE7dm4/OBg3wFV7ouHyLR
-nZTTn8WG8/jatIFeOOvZfUz/g8KgP40ouwrkLv9c34QpredUOOcSdEREYCyYUNoS
-p1OFiBBVuOVinv7oq90C7pRYXC7kDOvIcWJsKjGkZO7Uw56G9PbNzgf+DYkCMwQQ
-AQgAHRYhBHfdobaNBHkqj4XYVSNeXIz16N/7BQJaeGGeAAoJECNeXIz16N/7c90P
-/iD3DleFBfcI6F6QU7axDkpr5sFZdBqvOsmEDzNkPEiEDzK3JbNpYB0Qepyh0f7I
-AsM2yjzqniZGKJiey66nHhYkbfzlCfSfmn+1mV5e+muho7zIrYdvGzwmtaZsPrke
-Ia8CDmuHBj9sFwURtM1G4H6XqZxw5+vI/9FvG8N9kNhcixsywyp1mnxXctgWpI3q
-dFBA6t2n2EsHUbs/hURJlHucmOiMiSmV1zjA3fMRsm9RN4/CC5obZvaesKN7u7Cf
-6ZRPkWkIht/LDOEJNcg8FaWRGhZU37EYE2hUCeL5Z0vTHpO9D48FJg75oxL9S+2d
-VdfQDTHjSQ8/lqskSnqSdjZFYk3awTkDaY7EjWHAmd1NEyEetLt/WrdZVxkO/PKZ
-NcB2xCugTPaAWxd2VJiamavRKPTsImEc7LQfMiuijiuhhk+zRHm0SiCQcYzAx+v1
-dYFsgU91SXN4sfxTT671vXHfxJGTCSz5Z1bCpcCnMTVmcrzGNKvnLKOnrwMXOVbx
-FERz1hzAD7LYKX/m31E5SJVS9q+viBx8Rk9Z4d7tv4wp4B6R6Z3L6T2nC8sPqF2T
-a28hntr+w8t737hAQgerxgC6a8DfHmu5CfFsVUFW/y/nXMwUUQZvoydftErNCvUS
-CWu8Q5F6S7ag31tzMR08ykiKE1w3LpRaqIf6Fcq1gbqciQIzBBABCAAdFiEEefcw
-hn0W8tutp82Gb9zkhymF+EUFAlp8sMAACgkQb9zkhymF+EUZfA//T1q91iT3iQbb
-SI2j5wf0KpXxykd12bJxTj4jPMO2dHYpjZECWtPMKsHu0r0dENjuZyTaORNazD1h
-vZkIkDK1vOzMzf54cUvj+IoHlYWzKWE1i0u/6iNDWqP+e5hy1k0VhSJ0kV0u0JS5
-JOCoq7XP/HaFa7jnz1VyyexteWbMWlSoJtPMHCdt//cy3T36xfg/BJ1/xeiLHrzd
-5c3l6CXgJZjcoToxcwvDuLS5WTbFPlumziXAvKjRYpS2fJCCO5jYvPRCl1rqXEgl
-xOfXDiCyFmwYZ96e6dboPxq534NhlosxNlH+iD4ojwbDa4EI+QMViijrIcJvgJU5
-ThDcWNUVuQovhoMZM5VwSGwjbjIfK4dm66kMzZ3AGq2oK2cRqL6pRgt41y9RCd0f
-5zvvfPterzwSQme/X0T5byh4bC0CR+HAum50BKw2EKqCdvW5Gsb2PWigTyIIW+dE
-PPf7Hng0DfoYZKlJE7ZPnHIfjVjtPOxh3wy0otvwQuqJU5DCrTw8Fd4XDHW3mLg0
-quKmPQx2pRqp0XBzWkUVZ+OdT10qGCIMGM62pJxjYPKTxr5FpTKV4UgJMNDzEXTv
-RykmnzVaxZihINzbiTq8joYcrr5XPs3wl0t8aUSAgH26q7EzMIp9/X7JLaOjJpln
-Mb7mQBFTFAssXN2hjimyItXhzmNXkGuJAjMEEAEIAB0WIQR7pnDpiVYJkAYQgSw2
-cZOk2/R/dAUCWoMcUwAKCRA2cZOk2/R/dBfmD/4/Mev5Ci5Om8dOr1/tvWY+v4Oh
-Bx7fCXhSU9vw5KHhAoYAaehOh0E+dpsVAInpaOJ6DrfJeOFwIlAEHKkCikf24U1L
-ZR/4swZNY5OnFpmX9QQefWZgR+YA1blPjCHewd5MzBmqAZKFf1l9Ccn93RywDgsS
-9cIKwAg+siVGKSJU3J/CmknfxNvWCi5HHTUDkmDL6klOnyKN4PEiyveGARC82fvV
-v6czCQH14R40oU/FfMeLXlg7LcpmbC+F/dYM66AC8LIQzlFFfShpXfDWCOwCsPKB
-O2bykprklAAQ9IOJzWMX/BEwtnsUJwf1rVPzbid97f/JHaIgJ7apYRLQ7nJ/a44u
-LMNVyRzirkB7gVjS824hBDahJk/VvrtrDXBytdpPJjoK9XRMMr0dITY5lFxlkncr
-NSCpJz1nS5ktGQXunzjA7eciXBSkd9/cBtTG0lL9xDN/sUfYve0c5qgxBmih8gRh
-YidJguE7Ibbw5VOqHEPtszEyu/TbtfZ9W829rOkRLwzIUGCaZllwPJ0niE3l0iqi
-m+62STrB0LVUEB2FqVBB4DBP89vqdQRP4ruIEIREP0GPw6A9Ukn8mC3ET6qhLC8E
-JXjwhw237+RgbelJmypWhM/Jf92OeV0x5DZFrEjBo/c15b5b/4J0KI4OylsnjVEh
-ccChf4aVrJqaDl8M24kCMwQQAQgAHRYhBISxTtPWh2VajvgjOmlXFL0bvF9MBQJa
-d1VvAAoJEGlXFL0bvF9M36cQAKu8M+vjxG5tAQocoIK6bM00vkRIZgreseHjmL/4
-jw8nKYizjJuc25/3IwHladNZI8b26SFjR4CQocbAk2KTyFFXUCvvnRiht+0Hxd0x
-2l1j5cplgTt998bQuf8dLanMl84bTfDe0eN2JvxzUJK4FufyR8q+6e+hPYZSMrba
-0P5bk+5oAP3acEhtsnqMMKbsLIlh5r3H56WYY8kEzHCSyDCkXn7cPyPYEiNO9Fky
-DwZbIDclT7ZZ37JqaKjUke+EL62hha62NJ2iyh+XB9QANyWqGrrAo6CtCkyUXsuM
-2DrrxI1Qnsl3DmsXQQl3s01rGH+K5hvkcUXq9MD2H9NTbAdFhUqeZqvSG475v0F4
-O6Q6yXGa4wC2Q2G3yVbqljd4iq/pvM87Q9lJhG7SRTnDwQRdaDUJ9Wg4n4NNooIE
-cA+c6rrwvcyyzs3x/+f3E/5jx7/01IolsPAbAboeMye8kPWtbfeF3CXqDdI7MFYB
-MCz6aoxTk4GRe3GrSr6d0ugWUlVGS7sABALF3HasZuSnqO/V/Cxr904bW+lwJWW5
-WlZ+VWPz6Nby0iHDudzCvV3UCTyfIhaAf2CXqMNakC4CtClmgAWPcRctk83P8whn
-MmMtY0JhumedeE394NLX45zgcvwU7/3btH6xCdGH3II8rF5bZo9DqJ4XzCaJnvZ/
-cr0AiQIzBBABCAAdFiEEhOckMqWxbpwazo0kHbl3zc8GZQ8FAlp6CCMACgkQHbl3
-zc8GZQ96ZA//atv9gO5Zyz4DAs55V809sawFM5hzSScHi3mErN4R1f1cZ1geDxej
-j7EsWtUzuDNoiK0XSjpV/Eo21mDrdvcoKip/jYtod3Nk1V171zhfvzmAk0mAm3c7
-8bxKRldd5ZCPvVS+od5FVbw8U1NJxdUhsuZFBqToogVqAfcZwm0J0jFLLjUtHcjv
-+wAmCqtG8HW6iWuVEg6qBT3hiIV2pahOI0GuRqTTmYiB67iP6i5o85FyjszIjgbm
-BgZ0xqreNYXIPdUjW/tqUtNn20zxAdG5DxZPjUeRZl4ZIp9WkTXpwN++1w/R4KUh
-5/zvb9ZhTMnV3AhNsUhfycqAq1wGGrekb+9VgLKmmaUs95b6D76sT1lyQg/rQ3pq
-Ms780+4wiRsDiYX78OzVSzkZSSdwfAiz9n/0+6DbJDsXqER2+6D+aw2IrQM0nkhJ
-wbD0vltGxJKh2T13dP+EqtEbYEKOk62MR3Spk1oX0L7y8qnGKl7jpBxMUOxZ9MaQ
-bY1WFL8ZoKV/lRCBCi+1h5Pk3Vhv8kviADocUuNRSKq9c5BzV/jPyMiZsYXAN5DM
-0yZOLDNOwZSdSF+zCaz+NLSJmHE1H1qZrdF1nGvrzPzQOG6ZqhTFbKJr2xHAi1/V
-YHvqU2T/B4XIbu4hKGuVmeH6fvsM6TV453KND7rM++u5Y7Eo27lrUimJAjMEEAEI
-AB0WIQSM1yJ9pGfT7UBPbu/bWQ9znlrEWAUCWn8GaQAKCRDbWQ9znlrEWKzHEADM
-f51ozULPpaN1Mv1izT0RcF2D8Ln/zaoW7ZIA2q9K9QHm21y5RW7y/PWvWRp7yomj
-c5mmV0CxcEXfwm9KUkO/TTGZF/FM22DdvJrZPSrx/ayKuLOsDdCrzDnnv6YwDAkJ
-KrbbhjNsOGD2ej7KflAVW2yhTv3+vtKf7Strjfpy10ZpzBmDFR6UCm3Sjs9tmaVB
-I4BLCP6EtEnqC6kwaVM6WAWbiZsLE0x3STISZUNzJ+VpptzjPYbJjX7hqNZO7gXY
-7w9Fw30SNoXOrr4vircTHVtNyFYxZojnVhRByTAtnVksGnvijwNcPJ83F57MIu7c
-OmK2FvOP7tGIWTse6GXJrGponS/P3l2aTrW9dexcS4jL7OYC68DEKzsHHQcL8EZ1
-lx8Il/3M86SfArNBCvaNythwiSzKUBJXJRGYrTQEOkPAm+gi75n09WVsfeOkAcb5
-HuZUFNMzAfsA6TUVWE9VxS8A1Q/AtDoKd1j8HNCnKLce7z/JgGSiFa54dF/v7dcB
-611sqg/uJw82/oK5zBfH+UsGT1uUKbec5AI1mursqLdXE70gqL5NOwtXKuiKJd9c
-/Am4xI5e0GwqAhVveMe2EyAIKtwzjUNrZPb+LnaaYSZAVX/bQoJT2gV1fCkKshkm
-8WpUrniHtFGbLYDFIz0ztsr74ixwfC6GYppLVh4bk4kCMwQQAQgAHRYhBKnOYW37
-kbFDW5bijupz5hk5iA4OBQJalAlsAAoJEOpz5hk5iA4O3F0P/0CjgdURK2gouxJV
-iLVOhlYEUsMQStJEgeYoshHNc5Iwj+O29yJc0X6Bv4UfqKHRJYQ6LwDsVGaYGFUV
-DP9VrXW0JbUit3KyqRXN61WCnaWf+UpwKriyyJI1xfVn65L+SArEHvR93f1f8fwg
-j/DRk+jPYzIIC5RyK4vkLlVxaxJTgY5RHNFuc+5xjTFaiDx7at0s2mu1LD0CF1D7
-ic96jK2DO1w+vYpinKar62uFBv/qLTOS/7X2Y0YLg2jvKQB+UuA/IBdg0UpCaqWD
-U82nz0AZwGhc72kQW3UdkBucNrDqfpAlzpZ8marmaqEfCamaUMiZUEC3d4ti2dXJ
-Pnar/EwdzVaEIn/Upc7CFqdV0nOccjKBf3bMnIRptTmDxWdcVBny4uBnJXf8LexP
-IAqsg9rOCqjFNPduf29F6HaQS1BNDAaHxXkw+lyoOAKf7sKvE2qtcc2ztKqhBRrM
-4A6lFWPnHa2NIfrob5wg0l+MwkSPTsS3BC8+ttxMbojqucqoxNAlFFBksxeVALxu
-9UUWVaYvrwHNhwxTb7hU3261AWjjnbR9uP2xYqL3W1gwtqQlRpJCyvuMPyACBpXi
-qp9j5hb/a8q4u5P1pi9du5oG6vhOD66QMIkmob+/QWGpF5nUOGKWgYFJf1rS2HJp
-EJvm54R2zloX6bifKT+QWU9P7Ni/iQIzBBABCAAdFiEEuI8Wl5qXiBKBk0VZET4k
-pOOZrxoFAlp8jtQACgkQET4kpOOZrxo0jRAAiuVlaUaVtkPYyl4j852puR0Z/6gz
-jAyaD0DBRFCT8jADIMd1dhbMry21VDcBddsMEwj5l0W4DEfSpNM3bQBDk7EQDK7M
-wW3/S95Ycd6DoMyfzk1o1EHajJ5xCkisHZDSz0HnTv04T/Mp7yTXz4BaLn5tRPy2
-suDJYKRopbUWDpRRhHjO1geJAcdAdY9sfrPq1XtUbIDDoXP0OLmeOlRuTv40MBX9
-8Jlhs3uAtan3oLomEkgll1ZNyr+lkybdW1SC0m/dSCVxcSztodJEpJhJMGT4wA9u
-XY+VBHNSBGGRvqWzy9oYD1gcofkR1cjNf9Jy8D29sDQD8Quk9uqPrOVtpDgMk7wf
-/QjfrkVEozZ9UR/qFr5bVJzr4GTmkOdSj+BEiFMuWO4l+Hvgt5tKPoglnrdlH7B0
-a8q9Hy/6M3iKxoAmOD4cAZJXRQLcK0rlpouqydo6M2Jgl0NJT9KTVOZ1+b/yk2R4
-S5U1CI+Pss75q1TnFygnDtrQeOxI8BHBGmHfXFAdcQqKQJUPDw0YDGZ+RTb/rN+d
-uoQ7O2wIlkCrgTXVHv6oYwhNXis2rwyCQq7jX8VgJQ5A7O0NGitRSt7PhkDYEhrR
-/A6Lrgf1KZew00IYirTABn1TtiU41TaT2f1iHstAHjVQWV2jI6h2RLY9EwIJJXpT
-XF/Pp58EZxhT/kOJAjMEEAEIAB0WIQS+XCMgms3azrINsKKMgYnxmIwhZgUCWo2a
-xgAKCRCMgYnxmIwhZoEVEAC3AAC5oVptEwg86IZz9Ll21L8Hq6HKxyeUuogqF8dk
-6gNJF5Vt61I2ZXo9z6/YWbVQ6zmTSzZPvsouPIgR7HVxEwyqzXymOAtWyrZlRpS2
-TS9d5THgXtH82UQC9pdteMw2ZlXWXt650bfgItpJWKlZzd6ve0wPT7bKK8DUntW0
-LxV3//JaugI7llrNrOFAMbfrctQ/KA8/b2JSswNRkcqCF4xxfQ6bzUbTOlERl2Cd
-NowjyNQveCgDQYgcqwZ0JWEdu3jHdRCmI+WQzksy5ZtYD1YutOovSd5vkPrhnHiI
-UI9cEICT1Gl30bXX7lmi+iZq+OFNkQjMX90KGGKrUXK4+BMd7drdCNeITolE09ct
-4rvpR2f75WeogUbRwrNAR7yDCOrcN2M3M1Yy1RCSTRTKY3eypbVmkxECX1s7igcz
-9FPCiJmjRINGZ6WZzpuzfFcB2DbpfrMg3NrKS5XOnGCdm1CKZBYf3zBfbPBknzZJ
-2QshuNJad90I0Pm5KWdXMqhoSLMTTGYo9vraeiy5TsqRxa1j6KDwOJNcBiTr3TOe
-6JMDMk6Dt3DffycG5vaLDgFsd38sFHdlTbRUol1gBqt4qdbOa0WswP7/ksCKUkQR
-K4alEHMhQfDUKzaSKydYoaroxVsoMvxdt9ylz//UwB/zMNfIWp6NEUq295csWFQs
-2YkCMwQQAQgAHRYhBMaAe1dmXT9CGvoD2j9+GSsTSbSEBQJaeKWYAAoJED9+GSsT
-SbSEZcMP/3yyJUAVgvbc3xcfWVrO4ZPtzFSL3xoHhkCgfvPm4NVbwNKSjuVfKilo
-VqpwNxZszaIBRtyTNWqfjwIxhhpERg/Zh+Jup2WzPGtf2UhykvujR0BFTPGVr45z
-dTVuxYxIG8FpPzjKPPPy0/IfianA03NGl8QXZsZGzjEgAzvrc2bzXP7YM5llMguG
-kCR6VNTV2mAr+M+a80APYeyWCkIYN64+oFjd73yLE2gETOz9p8MJQ616bQiZ7FYk
-jYpqaSP27MhlEIhXHqawnaV7i1Lvkl0PGFrUfIP12wrjtQ0WwoJAF86uU1zKh7Aj
-qWx83wN5mCjPvTPefCMq7Mq8hOw51TR9s9ciSth8oFIC4w6z/7zPxC66gyL9dQgM
-i8LOmf+Gzj1K5DeNQMzTKaXP/5wlSHyHYASkfuAmlvILQuK7a9CmDhVyIF3CD2Xs
-p7Po2Rq5qc+3el3iFOTmRNMuPNv37XH4MZrfkMeT99ccJOqrD6/J4yqTr1LXLHR6
-0GwJ4FIdIxJuL9hLVc7F5/5CRqjqurj8ci/ADN9ZWWnfdP/sugVE67QUlSIFGaxE
-cBJrF5U7Fq6OO1lr/OQDt5TCwJPDPJzS5fYN5iUDp559u8eakYeWJn0mgud4RAFl
-6UHMogQSd6yudnkscjUExJdxKWcC2jfi1GW6/bkEAGtP1+C+I1NTiQIzBBABCAAd
-FiEEx4tOqqbWgwQQV5E9dDWHvJlGJ5EFAlqUCXAACgkQdDWHvJlGJ5FdGxAAh6tT
-PRdh8e4+xEseYrftEEa+yvbv5ynhX8Zs3u+mnmjJmOFvMtefr7XEhLAKiQbaP1Lt
-dAN0z9sdKtd39aOQ872ceiIj14bQN7LrSPm/eTT/6g2ynp93NzCDKGv1myElyCya
-mF2Wg2EO6dMD48qJISUZQIHi1I5MZ62UY3LIriF6o/WvBQzSxGxCrqZpHorwe/mC
-abtCjZrq9PhjyhAz8IpJWmpSmQwbtTqFMPM7mz3O7lHo2RTyvgT40AVhEEme6M06
-d4DaC5z5P7vVVJk0wm0/hXeHTfSx55waPdkhrb4b0t1eiA3qJ57Z9NqoIt8b1U9m
-uqw+8AX4Gs7gZrjLaVV8+8mVr1UTYZsx1nCrCvaouGTY/aAWdvJI6KgL2dGKfzIZ
-jMqGyhFN6D6GEvRWBXAYFLsHWz3BFjIs7gDWL4SQpQoMhfxWRQwN+Hva9EhyD/Vy
-HJ+9gTBDC4V+rGVN1H3eBCrk1OKH30s3J8YNwnL4a/qOcKadHsWVY1XkcRAsgdXj
-VjsmLDi2qc6DcRj12th5QT6OSAIBgLf04IaOHLGss2Z1f9IfzqJA6h6to+ftusmj
-pMOmcStRIRhh0XjFgOK0IqrMvxp/acrGY7jyrdCg4AGKgX7dbUS08wVMZl3ByMJh
-gSAc3AG1a0bISHZ0+UzowPs8z5kQasSAtBkT4RyJAjMEEAEIAB0WIQTQLCMBy1vB
-kuGJ319fV/7B6CVOVwUCWpMhQQAKCRBfV/7B6CVOV1iRD/4kjkRsXFqV0UzhZ/Ki
-AI90msqMbPFXSh9r0UHcCl15k+arC4ZsFVqRlKA3MuB9fYaGaVvLy67TrM/OTlWg
-MEfKatxfJAthSA3GCPd10lTd3ognngY36hgQa+FvH/Uc2MbqJRwVAXZ1SJ6xGUj9
-riSnshLrktz9+0RRUZyX+Gih8O8CzNeMPMAvNYhZGZ2EEkTcB3NQhZc/5T6QJP5o
-q7CfH8/e2wipP2hwxynfWWATTx6vXAmPegJKW60jPq4rB+IFsMeYhAIF9REXSJwt
-bEJurWngYRk2ccMZaFnK6izx8xrNaqLQs5vKJOoD39VTiAXh5D49vFDQeVlcslCh
-ZP4jH45o03vL+Eiasgv4BCQ4jaLiTkPDp9FPPgciYnAomjuz9TyP7AkphlJj0u3s
-zJMhkMMYWmjaDxLReUtFlxdUwlMhudSZZmt3JdQcFRYdqo6cV2ZeM+8B7b6H5Ect
-uHMFZixA4Tdui7QiA+y0r5wb78i4+B2Vhc397QxriksBnlpqLHEtrz7ByGVQNq/z
-GPCinufOhiLi8b3qCAzvX5z5ZFkSP6zL4q/W0FPE3g9gzkR933zi3rAiDYspf96T
-2/+p7bQ9oXc1TevJD39AEXgG+1qeNFB2AI5ks5GCgvdaPs8sLMlgiNmgSNcf/b69
-xbQkTP5kQHMUxuuZrWBi6nmPLIkCMwQQAQoAHRYhBAY4MkHqcGt7ycw7lygKOrfj
-YHgrBQJaeY/LAAoJECgKOrfjYHgr7ZoP/RMZ4hxDxAMIXG1cl7H6IA3CWVfkKQ8Z
-SAUNxqzIZzYCXtngyftrxcDDQnK9SbDZOGE5pQ2kfSSI2/mxu++Il1FfqfWsntNJ
-Zvlg7l1PNdd/61zE2uqv9ikeZ8iHw2mUvkiYGZF4YFQVwPygEv1rOLtcsct1NXD+
-UZPsEB2FBzDNXsYJ2aislIfFAaPzgTwt9e7cVfQsqNO8n/2L0j33IXnbpQGKwyo/
-O+7/ha9SQixJquWaiTSEPm/Y0Nz3g85cR3E9KgM1KPatwE1wuFs3AQxXwxq5bPcb
-E/wiyBMz/t+19S8Hp/sLXONJn8cvBjQgo2zvgraNJDfeMvAEEMR5q+xrhbK66dva
-Bw3OWFhc8FXHr0E9mInRuFQOI28P5X+Fh5Wgb85Z4D5exnj2I6TYmzdSMsTovp4g
-9ohAeb1JDOJiQ8zWtZZBf4HFFUU0XBXkIimpSwDXN4vDRiKL0bHm0//YEx6Q1rJn
-Edzn/gMf3AiKYnBzUmEwR2bCf5UY8IaEIEXk8wPU2QztvycD742aFfl5wfAeBiGA
-M1Rfpw90PDewPsfW+p6FtxJKQU8E2KfNJ4Arz1/vsg89+Mu/1ar1vGSsu69UwHx7
-1tAyV/fhaK7NjlaI2A4/qwTjfr14dnoYxX6ZBoNSzq9aIM7RAIm+YNHclpB/5VrN
-BjB7iCS7bsldiQIzBBABCgAdFiEEG9iG8kb9SQh51OFQWgm0V23oCA4FAlp6HXsA
-CgkQWgm0V23oCA6rUhAA4ApGrQ4fzhe1U99/OA9fAHLC3ttySLzQzVzRZK+bU0Dy
-llnOiGTOomk651GzqLW6Z3373Ckes6SJpDDf21nrIEathINvywTTcJHc3NRs3ALa
-xqofHWYMPb8LUyCgsaPG2yJxABi0tMLpSMFMb29Mj1Rtw1wV6PksIWsxjrG5Rw/u
-IbZJurDWrPGGjn4MEDkXiFcjbBf8zrGQVFAll9X5DHlCxr3mnNx0MjeVVeB2NIAB
-lCn9rlxQ4dkW0jKbDNeuiNA6sTJYUJm+jr6kmtwYqbmw0Uw+Q6zfmcg0N+Ww9/xv
-HBcSJPJHLVGLqpJcNgRsYSqOm703DPBhgHAJVMywK15Mmyd8rqhluutYhpkBVuyA
-vnf/bzGXFsKEetrurp3EPhSZ5znBLv7B6lwhHfhXSA/JaHto2ALRwB9pm2Gb4IQW
-juwBI7Nmzq5qm7jKz7m/NWlwZbzE/yErw0H8tozLsLLHf13l7ocBj2KhxlB+qql6
-Zie1EnvyaRzIBPyAUrUr+lCDhJ/rxcSEcF5J+rq9hRc25OR1/I48W/PaRZXPLfqe
-VifeuaWEe2pwzS+05hUzIRvQ2w5kO8CC6f7nJKdOwosaFALDVHu5BgfOiykk6xQa
-Vxo1qiQjTssjJp20dNeSVBp8PL7hMi5z+bH2DiqrNOXczwIYGAxkHSJSYMbcihOJ
-AjMEEAEKAB0WIQQh8iIIM208JkMdAorb1x9FUlUtRAUCWpDDrAAKCRDb1x9FUlUt
-RMjcD/4+LDKj01BlOWgGgyuDJxRDtwAgr/P71q4Aqhc1qZpafbKA6ZqTX8mbfcAL
-77IXPeBq0VC8MKCpE/yEKe20omuSf3zvugDLaHGSq/XDPcENwDuEbVWNUzaO9IMW
-ZRwUVlSD8eUrT0K+n+s9Qk+8t1mw0qPwNVpHCzxGqiskUxt45t01wjZqjwTWhC0s
-US6qU03009Unc2oMXemNBgqcMZ4xhseIsfPAdc6N77qAW8DNTo9BkwNBK5gRBjKE
-8b3e1mrhdP8sdcPCK+bTUYKZ0wAiyxxq7feNjGXYDFQrGWQBgX3Hjl9fMwVo0mKB
-fqcqB24pLs6Fo0c//IWX4dCHe3XUSQcsRKsOGua5/m0oTf2R9gcLIYFXF150GI71
-c4XP/1GsP1G86yO8VmBlVKR7VOuSLK6583O8Bl3THzkflzUWNquXEnLqI3xDKkS3
-Ogmznah88K1Uwc2dYY9xLpaPmzb3grDAkJNPEdDk0A9LaHNgZCUMm14AUwXmpxT4
-teHZxg9zfJd4ixVdxZmN/bRh2CWEYd0cVTqVBjThJOQrn6TsQQk2WeEeHJEhjAcu
-ZTvyptYOMlMv/XJC8pV1g+dItAVBT/jhDaG3XU/9VZKCXPLlApVI6NptL9RPXIut
-f3ikW48iGN2e/ssIzNggp+SR4OO9F8v0ks1hhheK42Oxg5uQmokCMwQQAQoAHRYh
-BEy3/h4oDsyQ8ppZfm5gi2N9iWfpBQJakJKFAAoJEG5gi2N9iWfpKLQP/ifM6z4S
-HofH6fgA2iAUWKiDm30zUvHokSbScP/HD/767QDi+zkHhA5K3A7s37jqRvT166gb
-cedpf99IYQmPvXaTAeHcTzbSEZ+TaA91LDoo6yz40460Lo5LKbThogw2QKC+YkjD
-aIrx+LXSLY8QZtX1IwbjhIbxuV3Und+7kSVVca85Fqueg+vYtvkd9fTCajPLZgJZ
-ScOGk3fvcAqDvFDBbntINq4kn+TKP04ES5YNWjbbW+WsO7Jego79/vFMU6nL6Ya/
-QUAJeSYZyIbff9AxlSx7jfCB6+NyZ+9Quy6f+fLTShcJOYEb9m8KLULjKrEPQ0jW
-IjOnbtZ9GTB18YFPPCoVsrDiR/24i3JqZls2mLzCbutuhz/dgboWbIBbGyX2hs1J
-hEOpagHl/PFs6Um6dOVO43M9Tr6n/PXSylC0R/vNbG3jpvhzS5BxAOjOiiShyDOM
-QHNpC9kQQoImc6ahv0Owf4zYQofWVESTLreM/VitHZ8fhKahrOtsgkZ2GIFEkrop
-IA9Yrygj/AS70OpCiHuTu2GLMydYv2y1i7C3+mOSGkL6kki0qx5fEWGP3sowyjEf
-EZ/h9Vgk83ql1UNxpgPDeltjziqtE200H84mvvPdBETO8WCyGtntS/xa4TGvvVuC
-qcVr6v6wMLYkoX2xpbvgeWs8vxort42Gk1ZGiQIzBBABCgAdFiEEWlpaoLCaeja6
-Kqjc5m5nbAlJTBQFAlp/LNUACgkQ5m5nbAlJTBQKpBAAqlkptw/bomsYC36S2yFo
-UmCzqQKSLr2lUM5eh8fztOlqEn51GCDAwTwfQjXQ1Ov062hkLe9xuGuYnibpw08J
-AoxTz9tFFQWtfrJve7bkJyvtss89hLuH0Q6AZIPd+KLs0rx/Eeikr8Wh/jMV/HfE
-ZMELlIneuFXDBen8WIbIFzefatx3EkpFOEhgcqN5lgufVuSAO2B5abR113pLbyJc
-1oosCkwHwzef2M0jDrs2RGyyRSvTzZm0jCBbojqNfDJFIHgFlJrxBzaqcQEsNeXC
-c61WOaAW4vAjf5KoIRAnZxiC/Zo+rWWF4zD7+ZP/B1EuOZKqs0c09iNGwX8VZYo+
-w/xOMEDTDIfn+rcJ0Gaxk7he4jee77Rn+nZw+XuFlqOAV0opDia5CA6P8cFNV19k
-mGPUCJOVcfvCfSM3MNdJtTF3fFaYM3q18Gmx/9tdRixmQCDvU7t7EPQvj2R6PPWb
-/klowb0ztyFUvttDptPbGR2+Se//cZcIl6+Jxkp4SyFvGKT6CTucHzklWSWoYjzi
-5WwaAExkhIJ/IGkvksPbYNqcvZTSMbRqgF/rP73/5/IMcAwAWxXKGCQxJhguT4/s
-omNcmz8F6JC8u9oHYEM2eqdxjaDH+5q924GbLyWGdZqNQXnM7K+URlos0VUWRxuo
-0EkigFxkkMai7pvjvvsk+T+JAjMEEAEKAB0WIQRfLS2F8OVILkm+lTMfBq+ZfiUe
-4wUCWn7l1AAKCRAfBq+ZfiUe46x9D/4uSQ7BMPHQcKjBq7LLEoHM501zGj60ZdW/
-KtmoT7OEtNpY/1fdlAJldXsOYUGLDx/JeF7y8MGWKLWThfyaLk/wah8mfJmLo0W1
-xUBjZbt0YDNlgHLSicK5jS9GJixMllW03Wa5kCvavgb9uIh2R5THBSoq0nnWDCNK
-RDmrc5AStkNmuZFI6pRpwZRUs+LB3LeWr/GnhC71eZ6RHkWgmMJLEZK+uBlCnIta
-c13VQ9rfCt6r2qaMEMnepQrB8bnul7yvZb22rhLfOad2DK2AqrJ/yVtFQcsLZ1Yy
-T708Pi6HeaBKg/BlE2d+1WmmKQzbElCf5fV6ykoCyvoGi7vID/TmEQS7UxF8oqLX
-71XobQ6l7pmMouULdCBSXrzHnJXzdZhNt5YiHqXS/fo2RbcoiQ07Okfn6vKfzS1E
-gW+o8NCB2xsdd2EbVhVRPB8HT80a5vDAekwZGlBXH6/RiZGuJeQAQme2X4jR9H4a
-QLMjme5h2bb85jlsb2FDCM9ndEQXyGTrAeyJTSPM5VsLNJ0hxo2Bflugj45BK/t4
-eihj4d5WJwZpad4dXRVydFw5TTNKoaJohlQabph1O68PfBoL8RhnNhiLhaRN6L5e
-dl6tiX4Ivw/d3wV1w4dUAP1nheSz/TPS2RdDaN0iRSTkuId5vUXW0bXiOV2QYsi1
-/llJPM1KFIkCMwQQAQoAHRYhBHf0Kno0Qe5RL9CF55Bc8sQqQGZNBQJaegG9AAoJ
-EJBc8sQqQGZN3IAP/3GrGPmG+IUBY3SSQYoxmXSzLO18/vESfrGtQWyCefNZpP2/
-GLjoFHQrnw+4miX7T9mdkeLBL8sAuTjUlnZhuDkzWAyJITxszHaobdJivJWa66np
-j0CCFjiU9ONhakwb6LOZidNffq5GXZeL5PaM/TdrkveWpxceKkUG5W2h8wz1HYRd
-8EOVri4KOEz3pWJysnyX+KPco6r16iG+0w2wayimwPJPpbu6LUufYE1HX7MolRtY
-/YSZnQx/NwGBxiBg4MwD1FgeM4emV0NHAFaiIZxehhgGqE3KJaqK3HNlcfXOn1wZ
-XSZfm43/w7BqVcRc2OY6TL4iJBPc1Uvtf/YyptjcgcDdOSR/TAnH0c4p854SV3gy
-bIpVtBqpTEli0ZlkR1bsmVEsAHZ+WCBRLP6K614FmvE5Id6oKsarJVHaQG2M69tM
-/fspcfBZ4OOf4KVMiy18Wmr3mZm4EiOJfHtq/LkXCWvvTh/dlvEbedgn2qsal7M0
-sjs1Oozn51nBJuKpR75oPWkU+aNGHq9I09HCYIfn02l9qYcYIIY78oY8nMNz9W/c
-/E5mloNwvDOwK3+267hjXsCmG7Psw+m9Aqgzbhe/He9Q3comcUbtd1c/zr+27Gx/
-EVCQzleCMnflekXCWo4mz8AWijvLZc9K+xBA2uPe2ZjNMJ7V8ig3nOkc5UNFiQIz
-BBABCgAdFiEEfEr9Ydiq51cHlqUXIgnWkC+WnJUFAlqFq24ACgkQIgnWkC+WnJVx
-5Q/7B1HDk/D6vx7VK+Jca2YayKL5yZZ9Elm+G80XfsNXqPCNUZTAAPwQutzrLNZ3
-9I83z0sOkpWPKvXVOCb2YB52iTPx5Q5hqtgFgQhh3v2lQOxX06LNJzWo4VN3C/WQ
-AUB/ACm1xmg4UTn5V5OX1sbFAKV2GU6qLQF7/pt3l+frrS/2d6T3aMtqk25BFegL
-7ZAjmIbC/YKxi3ifGlZY38JdyutpQvPuHHIJ6HZNSw7KzUxQl8Uugrga7tWFw+CB
-/JUK8PxGS36vHYvuYJBh94R7RtEW4WD1QUW5HwRb/JKD79sbCkikxQrniNU8Corc
-GsE0tRtP/rHZHFShbOz354pCmHrGyEg7ljzecYD9dk5yagSUAzAW2P3D2rhEU9jU
-cOUl31z2WfQECQ71WNkes4jCM9YoH39HlW/2g2M+ejDLclEmKzVhftTdAJ0+aP71
-uZ43SsMOhnQgdeLWahpY+NoaaAZl/p4AoaNKtOvvW0OWOeRGT/wdybc9D7affynq
-AaMYdta7HZBq2W31FBwZMZxfHaMtKc6xd/64zIqCwbLbpplJN0i9oNYHRpLsL2iN
-y6iWg6rY5b3wiuqGVseyz5gWPFpOGkQnhp50UAU15vFjGgnMq0IH8FhAoBNW89hg
-4e+fBy95W6rnt6ZlpcwDS441x43c8615+ecSLlNrGuUHMaCJAjMEEAEKAB0WIQSi
-i/QMPlUTcmYtFPdBqufcyj2DUQUCWn9fkgAKCRBBqufcyj2DUeV2D/9S7HDarppq
-gq2psYfzII4NRoDgXtf/Y4v3b7gZN7E4jkzTtz7LS9+QWsgpEJTKZtpEzaZ+RKlJ
-UKgF77ZVWWSNigLuQf5Neyb2Mz1xXye61JUdUWcVotIoyMkD2PukG2wC4QhqMRUP
-n3wmRYV0cIYX6rvqplnjYt2cAMhfMIyhb4fQ1Cjoj8vF1lfuARVVb44JsU22IDDi
-AuGhLI025o8W7Py6NUnB7xMiJ8B97DCGMbdPbZ6Y4kHEIIqLk5gn0Ncwn6ilL+xF
-+p8GA3J3kcJT872hLXHDtlcB4dCpyCyvu2Qw2O3Tm3cIrnO92MkpvZrnShcISD/6
-5ndgFfvOLBz7E/JDJ8HMkiDChXtvEXK4dTzNbHtc8VBiaQ1nR0fVT8BBSzZs8OYT
-LHw+VMc4+/dLvjQGLKC0C5Hgprqm3rZ2CKsdcoA8lcII+yZmnytoNzNxOGvUWZC3
-eS1/OT2mCJWXEwjTxTFfdx4+u6AOAmg+QUFAVdFfe9itiQ13lwWIZGv/jhtsrtSU
-hS1vfb11B1yRNgFNI7jxroEsU8sh6M6HmCp1eWVZYDMjsrOs3UPrt1XxYCbJj20G
-wcZPaGm2/tc2v3DJxMitVuNALa5Y2qmMRoYkytl8pN8aSSipc2bR1WzRaJgD1IPS
-Bf+SRO5PxmmiobVOwE1FrPxV/AxOWiZVqIkCMwQQAQoAHRYhBKjtvplQ7B+WfzNg
-y/s9JYM7aq/4BQJakJKKAAoJEPs9JYM7aq/4rr8P/2dPIW+WHeqM5sI5ZRVznFeE
-XykryCtq14+d7eCxTyT4vrjP1maViGhRtRmRATPuvmafnQW0bVby7iimp24qDNSD
-2rG472PT3/1TumHnICH/l94ctztXrlV/0BWn6FgjY+A8Irx/gMtRxo5yUHbXrMg0
-6mHL07dY/vo8rjZcV3RgiSE4RHGDpmVBANOVzR1K8IYbCF6kRIi6XXwpA2MCHt63
-Dv89FYXJzSwVq+WiIXibjumit0FgAPuMYOcFxXL5MmOgC8Aae6LjShg2LdmV+afx
-fGQdkYzW9++jgdPk8AKNRs6nvBLPEOM5WVgbjYZAmde9AubawpcpYn3fZknGD0XR
-O7tJERpLSz/Ie81r2hfPbEMeLrXhiRs8WAFmEYD02CY8tnU7ITog4b+FDCrOxc7O
-kIXq54mLRRq+petx/yh61eWGTnfDJd0v4+zyQuys+EE3q5kVScH10olMgThconnh
-fVjuifJb6iO6pMw/UcLY9nbDdeW9QiyiCKjhS03GSQL2PZWjyFDMU8RZpjCzuBJX
-9GMGnkRhLi0o+B6FyTZMWe6fBzBOA0R2aQjROi7UNgxaq2hrZ5IDfpOXsjIXo9rv
-BqI9/xKYKSyRIsqbWHQ/5QQM4oqYQLhv/kHKaoTHMb1chLbQuJM3DPgTrx/npGfY
-9KSCWLKOB34rslaD91rfiQIzBBABCgAdFiEEqeqQgXJP+uBITDWhqBzqIryMfi4F
-AlqHYwAACgkQqBzqIryMfi7O9g/8Ctc3jJ/6nx5MvxPA0b8yJ2jq5amX7Gi40b2N
-Xdqvw3em6/di7J+PCSr25PBEvA8iqDvgCRvKjwm++WjDIzcICqnBjGy0sqXWSAuT
-mv6khgDsN4ppjpOjzK0IeS39Uibz00VrfUnFug8ET6emv8i2g8Egt5XiHOMATssC
-yIPtegIzP4faxt2LG1egqUCZN5gkYqWKQZDRD+ytO/spE3g9Dg2B97MyXVRcTA4r
-MzMok5s7yKzdIp5MQZ3UJxj2cKkRewgdXEaVYdudsjzt97vMYgV2ztUZsN2VYFLB
-Jt144MekzOEymi6Xqu15WWeHI+JxYjH0oOgja3YESmA/QxeOc+K1V7FjX6BDVthR
-GIp1YzLzE+3ZiapwNlA20BG2WCJntpephLsLYknzjiX4iZeyXTxVlZDsAnwIjudU
-kO5sBxBgF068QGceFzRW2TTVP1xeDFLZpguR9lOapaqntDBHvHEVql3aqxO2cXg2
-gzkK1ayXo9tvEik5ppTrHdI13qObUoEJ/ZUKBmSrYYj5g6XdXe518RgnVyH/qN19
-HWBzvSMz4QXF0FfCf/zJ+xRvoxf4vSXTiTBYF94X/id/JQ16k0f+ZvljSAPG5lim
-6PksBgImBO9rz91ZIb7v/ss6A4y4fwgEx7XJiSefKzyJwOlgp8SxRGfOy0A7UBPX
-q4VamQGJAjMEEgEIAB0WIQRvyvZTJTrC+ymX7X4cEmA0vFub2gUCWnmm9gAKCRAc
-EmA0vFub2hKiD/9kFAQlQeds8+0lJwvVq1hJptEuWf/jTLLe0yjuAsMb/2XLWSMI
-DnKoD0Yrli4wdfpOm7RF1nRhPL+SFcCftB9/SI5hBkxBL30aKHDDUvPulMiN/uDq
-MV0xd3J+1nS797NhQHwObRcHIAgzhkBLevn4qLccHhz9Af8vEfiv6/TXwxYHw/MY
-FfPCq51PyTbU6P+E8/z/En1XzVJWSijCEkJSdJwsV8Jz081PlddtqMBKCs5tBBpD
-Ma7qhSvqNT52Wtt7Oe45pUjT2Hypi5wDpvj++0MwZrBHqVOcthwqmob+qwRnEIOY
-ZSKeFAH/mPkzRIhrUuXAniSE4ftkprGKE0rybM+hjTc/6KEJ6F+ANs1lPeBPIX+f
-yOu6VM/y3vNuzOYVXUGgB5moGCddGiMPHVNF/9XMAuVmTa8pjQrVkSoIaRe8SiWe
-xlQC4LTm1xYx14+9u8s3LdgHLtvfHjNbSbT7w9DUC+CE9nSfigeXgpvJpJzkuadg
-oBt/5TjPCne29U4uC579Lc8XdFSagEja9Kw8EMGKsG6fGix5VpStFsF+1RY7pTlq
-18ztUz+WkNR632G8XjtRrgEQtA9c7JGYUy50rRxxoHHdezpIKwgGqyy4sc+lr0+e
-78yNJEORCg3uVKBw4qZdrXSOW8+bKkvg4+wuPX+DHoMP7ZCg9TKERVI2uYkCMwQS
-AQoAHRYhBAjNlyqUddz4El3PvriI+7FRIaiVBQJaiYX3AAoJELiI+7FRIaiVHD4P
-/08uVFESoY6iZjs0p33j2idwyFdka/N4ValG4oi8YY+61TNDUD8QpNIDgvJRPfqu
-dNl8JN7dkIirz4Dns77Sb3pjcSIDrCgT1ka9c985Oe8M8yktkacvGRc3kelcpaYT
-3SA//RSx8KwQXCV90h7PJTD14r9R7Ob8K9yDHpV7xekjmX01JWM56uoX1T169qzy
-rEeJ6Zq4U/2etc7N/CKRDIKQocArI4fcYG48u2DMc2ohha+ozBRDalrwEGdu4sDB
-dRq0Awz+qf/dSrzu7+ZWzI2SI87kpY/8hDtKkqgn4Atz/3WRz1nl1E0dr7E6K60C
-0P81quQegzCUbKVufLDf3YZFW3h7Nyrtl/xVGuZO+DUmv8+fAtQkwsniVZ09IKUj
-lm/IOaTxpZE6EHLp4ZE9PhHoxufsrxgLGnNHb9JwZw/wjZcXRQVrZ6PyyfR305RA
-kLddxZFLvYaDGPxiHhtYobFbNphBdzhexFaveaHlb9jQ+wOpwPD2HSYiFyFzd5Yk
-+xhbc3DAQXEWnId8+4eXJloTObqcHuMycuWxgn2tn/wsgWQBNh7ydAorp0YwM8uq
-394KmNM9OVwnDwBRQkBhnyvU8Gg9WRnI8Ot9UgVOiVrw0iMIBrLjmPFVcsqe8xwF
-MKGL2bt+KwAkQSTxS1y3kyrzxXQTe9B8XzQDdY4IupZFiQIzBBIBCgAdFiEE5SNf
-W5QVort2C78YV5HQ+s4K8DwFAlp4aaoACgkQV5HQ+s4K8DxnWw/8CH3J57Lho9um
-XOGnlgZ9lKlJEJS1uM7OPtUSTdLCFkqzOWNP6d2nV1VUA98r11jnZx3+04S+83D9
-86Tr12OuOGtaPH+q/fxLcpv4mRBnOCnAaodr6XNc/1xPMa7jRpEyNNePFeQSUQw9
-7VzkktF3Futlnn7NoIa4U8NhzxukKccBGABCU3S8B/Pu5On55PITF+aH+9mdpZfa
-j1THtyUzI1uqyM3u1YxiRrcdDPmeGk1VOtn0bfGFfaI+6kLJWBKgTdr2CZj6aLLI
-E35xvGW/F2Krn0aPyxqV44uqhCk6lYhmunlSdRB4qAzGotHXw1nYV9sAMoy2Jmwl
-YjkXVcb7KR5KF6OgzUYwjOxqmu2+kj0N4IgdmlWyd3qreuZcZYtuyMN8+WX6WnmP
-EyfN+xaz1iOkxdUUpV3+gDTS3wNOe2crjyBbez3K72xqLIAg7ykTj6MBJYQnqpTE
-ZAlbXFB9KkwXXJa9quZe+vvY/kP5flilRTpPpQZpd8mvUgIK+qMmfhWTq0uB2sxx
-m/jS0OgGkWHxI7lVlMEv2HiM6S93TAAlimZAYi9czo5iZC/JS0c6Mx+FVK1833L/
-CdyEkOc1eP0MQ1ok93QmbDgkv2zmE8FOzL8j6ZERoohlnc80jFNy0quUgAlpnIMB
-cQVo6gTvr0tClOHKtKEcNxeDxKSMyNeJAjMEEwEKAB0WIQTE3WlfpxOPJCqhVjhY
-SX7lHV10pQUCWny9RgAKCRBYSX7lHV10pT1qD/9xMJ0n6hVQZLZZik5XvhjIZXOR
-EHTZ/LzEPaS3pZw2600Y1d9qpWir+rlj3rws2xgBGNQ+Kie6HBqfXLRXAyunCAat
-Gkg8XdQWpSGDK4nDVcQ6wPPDFWRhKEToiXhVlwsobU0uqzNYt2rVg7emtXRMizXn
-AD+Ln7lagOMY+dASQ3/n6dZu+WEKk55F7TRgNb4OFnlSKCkPgYT3eE91+MQ2HtJs
-vZxtsngNtD7zxJF+ieO1CSJTZge/dMSafY3fha7XvM5mC/1ddAJFwgaHBGrJkPkU
-3C9NMmKZciqKGcgwiP5Odrlitr5r/w6JjilCWu3LhksWdx/0+k1glEbL9czm/x33
-bO4ZjH4ZByH2cm7bzenWeReZjublO6jCfGOHsfeJRZO5ZLv+DwxGP57cH8ITo+LW
-xe0MxBf7eTUPMJB2D3++vVrhtC4r53WQaxMU0u7lCiYtZJCnXwR3PlN7+boL/QGp
-1FJ0Zokrz076SBPyw/1YXqEoYvU4GpVj2siJLpFyxVMSoC4+R+HLkIA83F7K3/Ro
-EQCrNB+hJ9lq/tcd1w/DVtrO6V8NQyVnRwa0GVTI+9YT9LD4RCwfcO4BnaJRjyJi
-HFirNEMzSB+x3zIOJv0vfYrZ//H82hp6YQH8idZwGTZAqUMFpytc8GJ1pZXV30bq
-drrXdLDanOD+RelnuYkBHAQQAQgABgUCWuLkBwAKCRDPJl0fFWYx08CrB/4qUVa9
-SyHigNT8jzzF1HfKlZ+LNz52iQBUgb/4nCi/CG/PhQELZOYN7MQ9xSdqbW8waHao
-lPXZ3gDEypW1+j8ZFMRJRYmQ+E7YBXxIimDAODHAsXYBlAqdXBGNd/ZgxZgT76FS
-wTVWLraOmdFEhKREFrUHv/LSjWdHmVZm+MFI9SDUBnIgKkEaMMtb+VUCqJPz+mph
-Jt2FbZ2x11bd+ueRcPN1wIa2YW9apscNyqkcQf0LWp7lZ/tMYAr3S5TevsKvLJxc
-4b75mCftETfJ8lxZVRg2E5u+QcxUyZBilkgCFHJQCcWJ6d8HoVadp79f22/GpOc0
-PvWyO8cOjPR7Wz/qiQIzBBABCAAdFiEEvQv1sXQ13oHjXV6vpTBwihJh4cwFAlp9
-wvgACgkQpTBwihJh4cwzdg//VdxWpn/uloyuWXRFFSX9SbdAQiYjUq39/+iElwSN
-xTUXHwOgdUcRluj5hfELsPOg9RJe7Jdkg0uU+1zMIdkYMWHgx2UcjWMH9jR6/PGv
-A2HJb3bxP1kVAI3uEDsxwnxwNPSvgPXqEJ1TP62pFsJFwKnuZghlEGfhKAajEZ/e
-puexa+9D6Zdsf2y2BXr1kptRXRm6v8Cc8aziDF8C7k2n/cADz4w+6q+Y7N+j64iS
-lo8Q0jmTqrfQ5hEEjJ8MzTzCpKh55P9EoeCDWwtj9bNAO2s80l4f9EBy3aQVYTAX
-Osy8RVvvJzc5JaafwrXkObBADgpnEVNHTy51r6DZP07futgJ/3JKCjrJkEzUq7aL
-hq8uBwVBV8qN5jAwHs0gqtjQA0rOZIimhSqKlCXvHjAjNR67vh5NH5UTFGkb/8Qd
-lkJKSKmsRUhYb9fFCxLxJG1oS5yiEBL4ceUA5ARg2H2jAYdCJpvFdSBSsBtRL1/l
-0WjlAVtoblJjV7TJlonoyP8rsU/eOjFQSorXCXjtfeWRctOoo+4smEZWqG53pgWA
-UvRgcdpGrmsSz+bDPDs6wFpR6sLtcB/iKXT+3fYoO2627oxY97qs7Y3lcUtCg6T8
-tulwMWU3W61BbmlR0sGEOIx+5dlg50TBnC/9hJvUYBriEDmGvULxUWvo+iA4JVRl
-xrSJAjMEEAEKAB0WIQTDMbo/dftyO1hzeFsG6qBm45eDLwUCWueKWAAKCRAG6qBm
-45eDLzGWEACdaRLKizwCj/tHwTVxDdWAsbOd2MR2DcI/kP58sF8s0UXJFc2LmXHU
-FIvsczvlMMXO11chqzhqug9+wNStGFkVRsSuz9DkcY1r3D6Gt3IuWqIlbfyGxxlX
-ThuMNMbqUDVTzSG13kVWcTwZCeFWok+2xPLJfqCjMWWcxbNgMq7NS7bKEKi2u1Ak
-8zxRv6bo2tFh7pasHPK2d1Qfe6FleNYXdp1UZJQXvxcaU/ihV8H7spfujI9yeHD/
-bW0gJw9ijUhkQpcDSdIz9PeXIxmgRf5psuvH0sk67UeEFUOhiXkEq4xG4WikcrOJ
-ZKa/XTReWtFrSDIrxAFaCdtFTLg4Jx+PMDWVJFu9rYeb6cyhkLpaWiguzgz7ufXG
-K96cGqt1syhR8sdrfyoSXU0Gk93mC6oWxBtvCECdYRPXMbVCeOUY2mIRxxh26nBq
-44IMREqoLv1CuahRI9V9eOSHFLy7Emb+9fhMbv6wNM5JlWQrium7Ge0jb54TUWbR
-/mtPHAk1Z2VvkglbXbjIEZjPSqRtk2WdpO+8biQfC3eZZlhB/fF2FEAJIAn/v2NR
-iNQqWWRDLhWpeK8JWYJHcHcnf392FFcRbk72fFBn0MS8Q35FhN2PA/6dsXdvCgVG
-CiSvyui18Rm/tvQ0xeuhl2SMbr2tSQMYkNzNB5LJMIXpd8WStxLy4IkCeQQSAQoA
-YxYhBGcx3cKDV77DjjQqr78zQhP1xcoDBQJbKXGqRRpodHRwczovL3d3dy5hbGVz
-c2FuZHJvbWVudGkuaXQvZG93bmxvYWRzL2tleS1zaWduaW5nLXBvbGljeS12MS4w
-LnR4dAAKCRC/M0IT9cXKA55XD/9huf6ftE8XwjNS+IToqjtRjmX6QycM/tbe6PFE
-K/k4vDQJyAJsEO9+hBLn+JDgUQi+Fp7En2w7uXVUK8LHUgltaILJPglGAjbbTyOH
-5qxWBN/YrfWs2qrVVbwH76CqHaMLdjAqJetbNaFObiHPDfzkc+jqDJEkJt6Xv3LK
-dI1LkiW7U9krC5kfTwQJyVpA4Ubv7STS7kfVxqfVK+AtPyhLFHUfE/euGbX9s42F
-F0SjWwzcDqGHTJ45adf3cdQYuJCJAPFgQGGvF36/5/UU96/IbqXHvOP/2XZXnE5R
-FZ3d/hOgkUyGcYbNpR8v1GTbtq/10aWY3FCKJOU6vg7aqEkLrq6fZhq2lB/nExFV
-LwCjjAQF4czhJF/jCUSMDDPMKGPugH6yKhUzffEfWFZwygJ/1j+OewK7pzaHkQY7
-0idwuCH54+m2M33Pc2INAVatpKkZx+MD2cxg8w6+45e0ljm5zbSvHrHPN7XwGdNB
-kpnHKC+AabhCmmIQB3KlDJVcylNkXgCChjsgzNp9irR7ZWWf8bje174T44vV99Gc
-FREGwppALF7QN3xQBHQVdF/lL8bF3Mmpt4hZ+aGgkiPwmoDtJYMfqKjvUVQg7TlS
-dDvv23altG6bimSl20vVAtB/y27rIR2xQhk8Y9ls+1gReIZOinWWtAedXqjZyEUI
-XsCttIkCVAQTAQoAPgIbAwULCQgHAwUVCgkICwUWAgMBAAIeAQIXgBYhBPaCzcw5
-3A/q4RYgtsdGz6nnT6SwBQJbiWoUBQkThyqlAAoJEMdGz6nnT6Sw9A4QALD7Cuxh
-tPOzMD8vkSZpyDGg2dPQhr5BM7Tt9wZoDKc7+mWylUgtm3uHn3shrV9dYwJizUiV
-mNYjiXGY7mQSf4d5n23rI74/DZk6CwNg82xO1j3BQoVNKGzjlOZD5PcSeu9G6M6h
-3pMZNicTrQJN+WWDyX2IbB7qGKO2f63bdnMZ7fHwf46JdUn4J96OhMz6uzyEGEiM
-ZQylUHSVZr87tvZr+auItIJWj9w482xkD+WUKvukEfZSHYw491kFKPsH/VvejcmD
-9bCew02JrbWafSoX88J2iC1mn59Lv9wy7ByMSDfsoiivY1+dUx2MUHOpVCOmypma
-9GTlgdXh3IqV7NPRGUxr0gu0GQMpg7BxVKtZeqdzYpU58vXgOXiHeDamvkO2PVyt
-jhTHQr/Oht7gE+CgcmbkLOi5Q3FEri3KngCtgdx1zztFdRRjkvhXKHLxatmzZ2S0
-C6yqCqO/R/8xUrl+Bu24cRzkbNDtHKAtdPwqCIWPklh39oO1BTYe3N1bwT8KGYDh
-WmaiDADcel/tfJOIWzId87+OlVhRLWTumNgmEB3xkL8VGylLqysvoUe5/ElNNrIW
-o0OauJAAVHLBG6R2kGaxagslv4hf+dbHIJQM645QNzaVzGCyZ4V+LleConYumAEo
-YaDcdcHkq013etOrAaMtb76PO1m9GUoKDsxOiQJUBBMBCgA+AhsDBQsJCAcDBRUK
-CQgLBRYCAwEAAh4BAheAFiEE9oLNzDncD+rhFiC2x0bPqedPpLAFAmDujsEFCRcV
-p9cACgkQx0bPqedPpLBOFRAAjgNge2CJX+ryBmXibIQLABIjNLusZyTopGO6ctGu
-xDPY9AOWM4LCQGBSrYpK96xIFIcMOubop8R2ATes9NyvTAHBJsBJCLmTAjf+Gbaa
-Wrj25xdaY7tFaDYG7ckG41lahC+/GJkvy16fjysYv2ug05e4VQVWBHrhqPv/O4+4
-j+TnDIdWAr0ZVHm19lbjOXRZ3RLwOiQp/h5MzgpPooUIEPc/Ef1e3G2w4rdF9BYi
-FoNSHFO6M7aRXn6FsYOaauVTvBwq+W39phk7qnSG1K4ROaSCLHYuqGyqClpv5/gQ
-7AWzhGahEfOhOxJkCUnDvBQLPz/WAqxdk3vuM1Us03VhNP/yrw7+axduwKJpu6pp
-S8z0rs4C6YYLY3d8j0KTLYPuKCNgkZ0GeifJemForBwfhZJae6QK2+5l3B7Ylkww
-3XHk7gMPa2bAULFI4QN7vcU2U82fIK6crEOSOguLtx5V6xYsjIHEv/zi1P3s06aO
-rmiVAKa6nGcNSGvE+aOoaFZrt4fh7Ut+2Rb0y3wbVWr+P+/dLjKV+QUPEDJidLCl
-2sCer+XBY/3u3JaSujWUqriRwTaI1s7l8z6JeJ+NkHSD6x0yz4UbXVVDTiDpB04H
-8M6a+0fIohUygSJYY7ktoWV+THmD/58eSwaa6sMqacajtlGdCyxFc5+K/j9o1I7o
-596JAlQEEwEKAD4CGwMFCwkIBwMFFQoJCAsFFgIDAQACHgECF4AWIQT2gs3MOdwP
-6uEWILbHRs+p50+ksAUCYWzXFQUJGPbRAQAKCRDHRs+p50+ksDc8D/9aZVmjjBBq
-LR9Bj4ax7eTkxQWAAt3mjtKgf3Ib4uP0GIYM9cOPzuzv9v3Sf4HddGwV2yPvpjU/
-b+aQbWd/+LJLeESH+JyDhLhpopCoaKm59zHiP41jFl1K0SpWHrV8UlZSBN8qzv/q
-/LhjGHCt/eq6azjGx4lFswjgnvs5yvZzKQma29SvHvyse33w4xnZYj1Paf6tqwnh
-aLr3cnSVG6PGc64snH4iPsFT9vueWfVp1UkiMGdS4VDcAv6u3krVeHKsq7QfqO2d
-kJhRDuP4Q+LOxpSWzFt1ApAuqHqEsuyDQJqe5Wl5Ico97uI7JSDaqQ0V2B5A2I33
-PC83///lrm9kTrYxyGRoiUdq4+3zVPrE0Scv/2wZG1Gv/tmCBCay2UhBQUSBlZ4F
-kTxCSn1zuGOTSQ8PpB9Fo+4pmaRVhaC/9XJJhPbiK4Ihn1s0zeCBRYsf6RXfqu/m
-ffPE1vbhKQe7mdZfLYz6NzpgTn+J7PG2IHXZHATq+5AZGTF91YC4NAGQVJmFekIK
-b2P+SDDKHmZGbPVl2nRPBquv6K4SeZb39rcK8ZJH2Iov4/Kfb2s5ArEgaV/aniu/
-SrbPoZ99y5BfwBr75IfRGCDb04Tc/wBY674NRMy5HjaazsO4Crhil64W8fF8XBAw
-ae+4eAFb4ldirGcyWzY3Bu5pncTQ9xaAhLkCDQRLxKZqARAAvaL7qcdZeAG1purS
-1IF0ZYHgnmxDUM36hjCskzrkM9X6rjoQSI1h5MtZ/7CiGbwwp7ohTBvnrqRDaLFq
-54uqm4qnoDpnHqv6S+1zSfxgiT2huXHQteqLeIaFEdbVutcjj0V1mAsCJnXfNW6Z
-5UrWka9Lbjp3Rvzb7tNCE/bPK87mKl8UC/gkWMThu5shspcvSxrfFs7wRy+ZxiXH
-/yMxCrJCzP3UGlUsXb6+uKslptXeOg0+5GiefzJdnApT/5DaSoNEDCjq4D7db5vy
-O6qs/Y8JoPdtT8JugQ31lLaxfs416IXECMsCOdC6fVWSPQ6b6idfKFZaPGJ2rSc6
-FsW73Bc/PqjHQKlcC3JC0NBxsYt3rzS8qdCd29/SBatexxwEqQNNj0XgK94r5lTL
-qXzi5IXwei5tLlNDS7lxxAH2dBNpnZ9OkxPH41tt7fFRPzpvCvyx3lg3yUQ8fuft
-SmRbdus1xbvhcKav00FMPAY6ctC1dVYJDS/Im+rC6z71SXrnPCch5SQPm+NwCiRu
-jq308tXrI5J6MQ9RMxnuC+YHvL39nuBbpsfiTTN45jrLmh6SWWuqngB3bTVaGTJJ
-AgAk9jEPelga6AN6YbUNEh3CFlba5yErJww4m71dluVro8mfSc6NPJXSok4kThGL
-iByt/hfhK7Sz0TCOfNtllnKB9BkAEQEAAYkCHwQYAQoACQUCS8SmagIbDAAKCRDH
-Rs+p50+ksM1kEACp3YwQ/pXKHGt5U+q801cqx4yrfQeSc53FALcWfSqTfIi8Dz2M
-5Jbe6YUmbB/4kShCl06X2FCshSI7e5kDer1Wzwj2vp1piC/Js81D4iyDjDY4hCkZ
-qdJxaN5yHWStz7eOT9a4QePM7v87EizG0wPWZSXydupIbCyMOiylNwArdJ/5neHU
-ltsH1BOIBfEKNjGdlQ5ALuLLKd6zJjfGymzuwNO6wMBCgJ2pLsBHeCBwzZPtjEYe
-/zJYP1q7dlz3iwvUtR6ou3egniQ1oUROiSHCg1Pjw9/dJTVLdNoxoa8+G6p0k6Nu
-KQl2tb0ckfVWu3crUwUsWNLw2feBuTo7BcbYbyuiXMjxOi/ZoR42GKik/+IeqQrO
-fk/ytL+kQhWU+e0z0IX10JjzzLLLYTLvWDsRw9xImUSymlEfGOuJrZMYaNwMoM0P
-H59X6h2sq1/8sukWJA00m+HWCgnAR1mbWAumuFZt5RX2b429UBIuqr4IgsnNdqHA
-ZRbYmxxIEurHSHOB4ZftWP6jzXWfXy19BBxXyf17q+fTtUx1s560+DYyqsz1Gx3T
-HKJDdJFln6YHDz58a4dyIno71V279Gu1HmaqSObIBf0q1FWSj4O8Qqd/BrDKC/lw
-gxguCcOeEkk11HJJKfVEHyupKG1m9hHmIWSd72HtYsmNE4TLbl0fMctolrkCDQRY
-UQqWARAAreLl6Icuyfm/SqdTs1LiP8zSt5tM/lF6v6800JJVH+8lHqqbUxsRAi0h
-W+x5GV9tGA993azrYvf5/F50tyLuJkpVdw6fUVgSZ+0zoaWD3/GzaffbX6kuZjzx
-rsLU+W5f30PIJSXHKq3kOouxEYk/Rdm+mMtQp56M4mhu+1UffLBXbnFuUbMPS9z5
-lgfKGDdBge/lgcx0ZLEzyjmYTTRDjZtt4YSjsFYopOTHxKqOKwIXgrFTGsW3oiEu
-tYTqpyU2Qhh8cBGWGGH5Ay+ZwqmqB3fo9vHcc+609ZSQ6qdHXZy7cm5Rc1pi94U5
-eYW76JDGgZPiBtYIKG8EZ3aToBtMqgK19C6LrAozAa+Au0GF1NvBVck2VintxNAr
-jPTuYAJzfOKTypuyIy4WYmnOkePO3NEBMdBvwuZwBKx+85BsIQDdRqSSbuaIr/7j
-3+KIl6OtrbjmIpAS4F53J0v72mM83br+QDp5e2fztvNEQPWr8wyjIirVppMtWleD
-ZKPGV5XZ2HyoCZwOtwMRY0Ap89lRWN5lqT24qS9KNkyM0iC/+siIQV95ZXj3NkmC
-2YVo/6Fot+0DXFx0oDXybjiKM4yT25Y66m9bDtPWbA+mSo9BUPQcOSA9rhQoIOvx
-jTpBD8e22x/XB95l3SFAd8VLtoVZfEESiT+mLM11SkvpmV6cp7sAEQEAAYkCSAQo
-AQoAMhYhBPaCzcw53A/q4RYgtsdGz6nnT6SwBQJYba5IFB0DRG9uZSB3aXRoIHRl
-c3RpbmcuAAoJEMdGz6nnT6SwAEQQAIlXpbj4QaC9mLS4xb7UCQYTCsy/GOJuQXwG
-PgRcP6MijUcWtJUfqc5MAb7HEK+9CDdjEJrUzd/91fv5juikOOIQfMQB2xtEsUiI
-5cZpH+jilMArgK1p3GevvSZPFIV15IhtBaXPHmbKGultqh4sh7oqjWNCgUyFgroL
-9qpRi8UqSno4WjfpZG7cuyehbaPlhDeKGSAjadjiSYYpSijku/FpiPFWgRg11Ocd
-XUyCLNf3QAqM+xoN3ojCdr9hsVBmO2kiqELfUjacJpSnzojP/pqkvtdMl6Lab+as
-7fnUGjr8qaRftSUtYM9cy/LvJBQB4fZrOAc69avHUFL2PAe7+kPzxeS5sQ/apYQl
-ITZweioF15a2HNWKaTmTUVChZq/AMPMCtW1gwUxF3oo/AQoV3qpz1FRVGlnRqE2U
-xGHgo8AzCCVPC0rWwxhs4y6ale8gmQkKfgmY5tQ3WsmjsTcYu8sbVWKOWd0gOwBX
-ZTpOgqM+IwkSwmPknlD9liGlZPp+StrUghYPdV3fFYA3sSXxAeZAkE7MXZrKbNKB
-4+VtQkY8FEcfHTrCdZMuaY1OFKyJSH6XJrd62g6YMZbaywAQb0XfAQbxrZ5yXz7e
-wrSNWQzE4ZNtL48zDPG7er7Z8vqmE3CytxXMOi18xlJ5i8JY4b4HNGaizPPECC7v
-QB7nGLw0iQRyBBgBCgAmFiEE9oLNzDncD+rhFiC2x0bPqedPpLAFAlhRCpYCGy4F
-CQHhM4ACQAkQx0bPqedPpLDBdCAEGQEKAB0WIQQ2yP9pvkkfHnJZHf1Rp1Nlvo8D
-5QUCWFEKlgAKCRBRp1Nlvo8D5Z72EACX4xF9IU2Ksznudbuv49Am8ACPB0CCBzf8
-J7Ve0oTp3FaCOU1hot1mxKZAXpWWgPY8B8TS2YBdQ7cPOtJoWcwfycoNZW1Rh+PD
-5/A9kzA+HDo7XlgKFGK6z1mGIR71VsRnM1iyioG2PoPVm2KsR/UbeO6UFVLI//7k
-+CvpQLApzj8gJWUJYJESqYRUHMQDAx71amrJKvQicyQL/Fke4dmPMZuB5Sq2AUsg
-xoYSHEIiYJNGlGpd+PaTVEybdqGtU6FTzaLQDBkNYtQg6GlltvVl+GFktrLhVtTf
-qc5UHiGNhB+5olCNtEoYdDZVeqLK+uRtTbbHpzAtLoWGflWIHiOk6fUfxNtPYa9T
-4dfpjjcolgPyut6a+HaNDU3P+ruBht9BnNFLhcbhgWOPw2DMrYWgUnC7EWDxmj3g
-IpGshjb2iDhPLakBoETMePNd9Oua0S1KM95grYbdcHQX14bgr8aVKGrML+QkFjWp
-+M4V+Ytwei8f56+spGJvd3nw9vyzPj31evA0P4Hl6Gs409eu6yzlyIqqd5YzpDJL
-O4z6aJHOBp92W0t7DJxe65s6G/wFUY+cCJsSOB0M8mkCQMvqEZMxA3FQ/alvaulK
-zHcX6B6EdQqFy70pNCIN3gGJTlBn5YLJkxogl9TLbWsAXiKDGjXmPhxLiQy6U7k1
-7tYDNo6Og6d8D/9xFPlqnigXc+y6m/8c/IHqW3tMWTDhy3BtgXQHZa0/VelIcfjW
-lWf3eWWVWbFgvDzc0rpst148iLAc7C0QS/+/mZIa3h/257vJX1GdqEsCUHza0VIb
-/1njRxJcjaHjKWdbVFiiVG1YNHxFBTCCjU5NcdvNIHOkToIZCl+qfTOxwA3Vemqc
-Q3Ri+F/mEVxl45xmSyVCY5J0ZeFzCw6/pJlenzVk7XDwY/uGzlsIIade08t7Fa7Y
-hxHQkod+WMwPYPo2zRFmNp0MaNK3I0uxLfKbUk9PrKthxHLQnLImtcMOOcX6gtjZ
-TmjIeT7I4kUBEap81VTtqRH8Ymhn6D5Fvww5Bv8JSzFNkCtfcCVJlVOOZQCYCFaa
-bh9nvCulEtwQlOZaGJXOoW0if5hYzJvjvMXKkhT2IFf4Bun5aCBbSOypN74YV9f0
-gSGo6bk4iLBuSGB177XxutmLZADRiWi8+oFs4CYLBDyBwkE76Pf3WPx0u8YBkbc7
-YAvMF1d7yTUeorz4YEmWBGJYs9/jcrlAqQWPAZUIKrplF5KRnfWaL2dVCtKvm2wl
-SofDO6w/811VHWU+qO15h7TNO7HGnLHHGJmogv2C1Mauak7gIrabZlWoHxo01HdP
-/tvSeIS8kL8lfHX3Z/WoBN2eCCjeYOpzrAdBav6JHUXcuXVXKceMznbUqQ==
-=4EOk
+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
+KceMznbUqQ==
+=EbhS
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/bjk.key b/documentation/static/pgpkeys/bjk.key
index 01d78ad8eb..76b8195a00 100644
--- a/documentation/static/pgpkeys/bjk.key
+++ b/documentation/static/pgpkeys/bjk.key
@@ -2,11 +2,11 @@
[.literal-block-margin]
....
-pub rsa3104/28D9A6F364EB7512 2013-12-24 [SC] [expires: 2021-12-03]
+pub rsa3104/28D9A6F364EB7512 2013-12-24 [SC] [expires: 2023-12-09]
Key fingerprint = D961 95E0 4D80 45FF 4160 FD17 28D9 A6F3 64EB 7512
uid Benjamin Kaduk <bjk@FreeBSD.org>
uid Benjamin Kaduk <kaduk@mit.edu>
-sub rsa3104/BE2F61FDB528443D 2013-12-24 [E] [expires: 2021-12-03]
+sub rsa3104/BE2F61FDB528443D 2013-12-24 [E] [expires: 2023-12-09]
....
@@ -156,187 +156,216 @@ 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
-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
-=P0Ce
+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
+NsatRArDtNavnjo=
+=4mnM
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/blackend.key b/documentation/static/pgpkeys/blackend.key
index 880c336479..d6edcf1605 100644
--- a/documentation/static/pgpkeys/blackend.key
+++ b/documentation/static/pgpkeys/blackend.key
@@ -1,44 +1,80 @@
-// sh addkey.sh blackend 4F8E74E8;
+// sh addkey.sh blackend 41A99FEB3861AF27 ;
[.literal-block-margin]
....
-pub 1024D/4F8E74E8 2004-12-25 Marc Fonvieille <blackend@FreeBSD.org>
- Key fingerprint = 55D3 4883 4A04 828A A139 A5CF CD0F 51C0 4F8E 74E8
+pub rsa4096/41A99FEB3861AF27 2023-12-10 [SC]
+ Empreinte de la clef = 188D 1EC9 6EBA FA85 FE1C A41B 41A9 9FEB 3861 AF27
uid Marc Fonvieille <marc@blackend.org>
-uid Marc Fonvieille <marc@freebsd-fr.org>
-sub 1024g/37AD4E7D 2004-12-25
+uid Marc Fonvieille <blackend@FreeBSD.org>
+sub rsa4096/67D3EB1F729DE30C 2023-12-10 [E]
+
....
[.literal-block-margin]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-mQGiBEHNnEURBADK+anixdFH+aSxIGLw1soiwMXSiVPD56dmoA/VAFqrE3XVo/y6
-bPqpSNwvvhL8Um2v9G/7EDMorqekYErS3sgUOtrA05NSJlOUJk/97ZFzAlGZ4/u3
-CwtpFBdiATaCvAdMocWhxVkyIFvo6AqVNz6RkTldJUuwVzGelXWk9IfI1wCg586A
-r7CU9HIsVJD7/vIbIIsKDncEAKYh6XKEBHWI1pF3Ony+rPhlXCV9W3yraiBb/YXS
-XaPr2Wy3XC86ufHZs8ewug40DqcSfRobj7qV5II1CMoVrwhUuJ9Y087ETjt7xC9d
-xI4jrkVZlaRt0m/LUKLLfz6L9KaLWRkBfFhOjJH6TAv779q0n/KfaiU48Xuue6ff
-KNDtA/96/oTg9+NWjm47zCdQeyZGzEE27btvzbrLZuG6TcP7gAV0F6udGbImgw1f
-mKrQZn4ZtVKCKS8IzTn/UM/P26Pn9JOzDKd2voPE9Ee8D0L8ywg3mxmBdm+TY9vs
-r2OEV89Nc2sJZm5CeiqEvfACI8KwbExqWy5TW7Qz+zLi3zk+ErQjTWFyYyBGb252
-aWVpbGxlIDxtYXJjQGJsYWNrZW5kLm9yZz6IXgQTEQIAHgIbAwYLCQgHAwIDFQID
-AxYCAQIeAQIXgAUCQhzb7QAKCRDND1HAT4506BdRAKCaBqu+lvdAp3fhgIJxL0XY
-YG6vhgCeIyaLMYFzQfii5s20wePEhG3rfMq0JU1hcmMgRm9udmllaWxsZSA8bWFy
-Y0BmcmVlYnNkLWZyLm9yZz6IXgQTEQIAHgUCQc2dRAIbAwYLCQgHAwIDFQIDAxYC
-AQIeAQIXgAAKCRDND1HAT4506PmiAKDanV0mSeUSRJuDmfA13o4ELsQ38gCfaEgn
-LyzKfRawEhJdqsGPWW/fnte0Jk1hcmMgRm9udmllaWxsZSA8YmxhY2tlbmRARnJl
-ZUJTRC5vcmc+iGEEExECACECGwMGCwkIBwMCAxUCAwMWAgECHgECF4AFAkIc2/AC
-GQEACgkQzQ9RwE+OdOisEwCfY8xxYIhN0w9CSUbsN1/EoYp0D+gAoLedf7wiwvmQ
-O0XpcJaXgtlO4x6fuQENBEHNnEgQBADPHKv6eOKxk2HPrm180rVAM6/d3LQkBEGL
-Ma4QuSXXbTDXpzfrt6YOLi+ILe/hu5DNnGbQyvkBB1lLdmqW03lat1ape9wytNoA
-kHOX2C4kom2WA3FvtAoxojmylEn8S0koH7RUuhhTM29rVBap0W+UpwpnxmtbGXEO
-NciLWy5CzwADBQP8CSp5Hh4+7uXIRpp+RQ8PKJ2vQVnf7c+QTPDN5MLXEv1UK9gK
-vtb4sms2yr2IuBMP1FSAFN6DpedjoZSKimxqCyMNbyy0io2pMrNDCpqCadKOyLWN
-gJhJTxE+3kYeZqzZExvf8q+faQqXp91bbS4XZ4JzgAkT3B0mvQ1OHlVlAauISQQY
-EQIACQUCQc2cSAIbDAAKCRDND1HAT4506PAVAKCWlLnQdfJsRZtt0Q880glcLzc8
-SwCg47K+qs1q5klc1cCIaCj+/TtsLCk=
-=rg/z
+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
+f67nbLE1+SauDU/HJS8=
+=+zgk
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/bnovkov.key b/documentation/static/pgpkeys/bnovkov.key
new file mode 100644
index 0000000000..169916bd09
--- /dev/null
+++ b/documentation/static/pgpkeys/bnovkov.key
@@ -0,0 +1,28 @@
+// sh addkey.sh bnovkov 1E379E98BB219F2B ;
+
+[.literal-block-margin]
+....
+pub ed25519/1E379E98BB219F2B 2024-02-18 [SC] [expires: 2027-02-17]
+ Key fingerprint = B01B E8BD 9D85 F0FA 84A7 E554 1E37 9E98 BB21 9F2B
+uid Bojan Novković <bnovkov@FreeBSD.org>
+sub cv25519/BE5C48E8F0C6FDED 2024-02-18 [E] [expires: 2027-02-17]
+
+....
+
+[.literal-block-margin]
+....
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mDMEZdIQsxYJKwYBBAHaRw8BAQdA/V2uVmdN7VY2Ps8wDgLlWU3b9+kPdg9bf+FH
+gEEX49S0JUJvamFuIE5vdmtvdmnEhyA8Ym5vdmtvdkBGcmVlQlNELm9yZz6ImQQT
+FgoAQRYhBLAb6L2dhfD6hKflVB43npi7IZ8rBQJl0hCzAhsDBQkFo5qABQsJCAcC
+AiICBhUKCQgLAgQWAgMBAh4HAheAAAoJEB43npi7IZ8rzb0A/0aY3c/XubbtQzNy
+A0xzyKNZlDc9zesxEMVi6rOAZNz/AQC2QmBTBEcbyOKDfJ5m02LpudVi9thZxlrr
+2n0ZX9kgA7g4BGXSELMSCisGAQQBl1UBBQEBB0Dn3m+8g7KTp3yC4CLICis/CIon
+FfNqQcJOVv6Gd73adQMBCAeIfgQYFgoAJhYhBLAb6L2dhfD6hKflVB43npi7IZ8r
+BQJl0hCzAhsMBQkFo5qAAAoJEB43npi7IZ8ruPcBAJM5wq5j64RFu4sczrryK4Fe
+CTt/Xhfyn3UhT2hHuYkPAQDWHDN6XZ097C5wUkWUr8ywHDlMM5gWIDbr9TMUudoc
+Aw==
+=3MkE
+-----END PGP PUBLIC KEY BLOCK-----
+....
diff --git a/documentation/static/pgpkeys/bofh.key b/documentation/static/pgpkeys/bofh.key
index 7b4ec106d1..45f4cde021 100644
--- a/documentation/static/pgpkeys/bofh.key
+++ b/documentation/static/pgpkeys/bofh.key
@@ -2,13 +2,13 @@
[.literal-block-margin]
....
-pub rsa4096/BDB9B5A617C0BC91 2014-12-17 [SCA] [expires: 2022-12-31]
+pub rsa4096/BDB9B5A617C0BC91 2014-12-17 [SCA] [expires: 2025-12-31]
Key fingerprint = 4DF7 5112 8506 8D06 4A05 2F9F BDB9 B5A6 17C0 BC91
-uid Muhammad Moinur Rahman <moin@bofh.im>
uid Muhammad Moinur Rahman (FreeBSD) <bofh@freebsd.org>
-uid Muhammad Moinur Rahman (VU) <m.m.rahman@student.vu.nl>
-sub elg4096/41CD79B64360E65D 2020-02-01 [E] [expires: 2024-02-01]
+uid Muhammad Moinur Rahman <moin@bofh.im>
+sub elg4096/41CD79B64360E65D 2020-02-01 [E] [expires: 2025-12-31]
sub ed25519/69B2B768BA6E7C99 2020-10-26 [A]
+sub ed25519/67F68FF7EE17C4CB 2022-10-30 [A]
....
@@ -27,20 +27,158 @@ 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
-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
+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
@@ -102,527 +240,477 @@ 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
-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
-=IJhf
+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
+j8QxpaMsileD
+=31rw
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/carlavilla.key b/documentation/static/pgpkeys/carlavilla.key
index 899c1780c8..3c7ea13957 100644
--- a/documentation/static/pgpkeys/carlavilla.key
+++ b/documentation/static/pgpkeys/carlavilla.key
@@ -1,46 +1,64 @@
-// sh addkey.sh carlavilla A5CBF1197F11F6DF ;
[.literal-block-margin]
....
-pub rsa2048/A5CBF1197F11F6DF 2019-05-25 [SC] [expires: 2022-05-24]
- Key fingerprint = 1A2E 31C0 27BC 5A60 5595 C2D8 A5CB F119 7F11 F6DF
-uid Sergio Carlavilla <carlavilla@FreeBSD.org>
-sub rsa2048/355B068E3B2B9218 2019-05-25 [E] [expires: 2022-05-24]
-
+pub rsa4096/0x84FF52B9222FC3AA 2022-07-28 [SC] [expires: 2024-07-27]
+ D1455CBF7A65E555C807917A84FF52B9222FC3AA
+uid Sergio Carlavilla <carlavilla@FreeBSD.org>
+sub rsa4096/0x4FD3CA099056FA08 2022-07-28 [E] [expires: 2024-07-27]
....
[.literal-block-margin]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-mQENBFzpi58BCADJBqV8Oux6u44NFtYyRBUbP7HIR5X4maA0mxxAnXYUqvcGUYFL
-55TSHGwz7qsOs+Wj6cDrEF78vPZzpIjfTjlkx95O8ElJbmhj5XvBFvhYJVT1tuF5
-am4Oi3rkRC1S9PTtyiqeIHhiF76PO0GyiKg9mWBbvE9cuKzhpfZXebkNITGyNGij
-/xZ/G5Axaqh2Tey9KSty64aDOvHqpPY5T93CHMIUpk59WhAFGnBrdwIwkycPwPNW
-BTC+C1+kfAvG3KLCBGfA7RGxLN1YgKXfSMmTuR9S6IePHDJpCEtW+oEeDuS9INRE
-ca5+EitnEUE7XIdWospPUvmmB/xQL1a0Z90bABEBAAG0KlNlcmdpbyBDYXJsYXZp
-bGxhIDxjYXJsYXZpbGxhQEZyZWVCU0Qub3JnPokBUwQTAQoAPhYhBBouMcAnvFpg
-VZXC2KXL8Rl/EfbfBQJc6YufAhsDBQkFo5qABQsJCAcDBRUKCQgLBRYDAgEAAh4B
-AheAAAoJEKXL8Rl/EfbfREoH91NnW3vjstpWvaaEKdLUYXvKzxgfev/An+XN/MG1
-IuJilpDQDn+mp8I5TH6ekLvHfGMXCxmlaihMzuz8VVe3at1pOhVxyWZMW97ld147
-bmm5vxDBR5n9gsSLZN7JlQcyBNMp3D8fiZM5pAyWzbN05AWSIWV/R4KqO1RC9GPH
-zOtgY3cZE9W5/tjBeT1kzv2hxhvxRZyksbu3HbiaCUb70D1vBptYQGCIGVwKaSM4
-tQwDwQzMsqw321A3D6MoAxI7tneDJU03lyAUs61mvm8gbQWiU6cgNMgGupoXYwrH
-7fgSqmcWRessCW4UFBnBK1dG13/Yz3FSLj85G97s1KyO+7kBDQRc6YufAQgA9sLb
-OcCK3zxvJmXWItleX1EZIope0BVD16144GqYh51CuXQfosRbKUZnLhBQhJjZ+eb/
-7ay52P0I3NhaXBKXhPt6+Me8j5QKriqZP3KyZs6rMF1+s0wfj7yRwh9zZGE5pb0I
-GUU9mhpzboT2AcSI0t+xt3JlHbiGxWPXRbrYMqPXwIi/UNgU8ZwodJjgstYF8vtm
-GDNhWY/GPOSYpUjUypOPurRL3/Qzhe1b2h2zU37eRPtazZBRIhxS1iA+h2K3namm
-W3a8s+jHdK5FU1WQ0lMRcgmL76S+wxr73qfmdnrVdROQ13XD6inbjXj/aCdAWVGx
-s+bIcYJN2+6pp+HMfQARAQABiQE8BBgBCgAmFiEEGi4xwCe8WmBVlcLYpcvxGX8R
-9t8FAlzpi58CGwwFCQWjmoAACgkQpcvxGX8R9t/TQQf/ZtWwqBU/DhpCzWlzreVY
-wLAT952FcX1Di38rDSRaBLKuP2esf8u0H31mpyzTKeRYWfWH9UT7mB7gCBWMVuAl
-6PU7Z5YnIX24rNCmdsaoQNo3ZCjfSWemwhoRc0l1+t0MtUoWC6K6+t8F3jA2v8P4
-LoCsXOGDXwSXoR3PPwOpVKvtsgk+51QUlGYb3jKzjDzvanUWPys8OgmmucwsnF1N
-wJ+y1iTm7+biWRrCsUnMG/aT8akwSThkNM5g+NsAelXFaIRZSGbkS4cHr63RH+jt
-N1v6PV6CDd6D0wKbbYZFnHQL8ItsNgHUIggCXXc2jQFZ4K3e5s/9tVS9LNVnFNqp
-Og==
-=IFca
+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
+uPG3B2D357MCslX6BqlftUfz
+=zmD8
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/cc.key b/documentation/static/pgpkeys/cc.key
new file mode 100644
index 0000000000..018e54b3ff
--- /dev/null
+++ b/documentation/static/pgpkeys/cc.key
@@ -0,0 +1,66 @@
+// sh addkey.sh cc F9BE886D1486EF98 ;
+
+[.literal-block-margin]
+....
+pub rsa4096/F9BE886D1486EF98 2023-02-24 [SC] [expires: 2028-02-23]
+ Key fingerprint = 3F09 F706 806F 21E9 BF38 E92E F9BE 886D 1486 EF98
+uid Cheng Cui <cc@freebsd.org>
+sub rsa4096/EBE0BEF304ED09EA 2023-02-24 [E] [expires: 2028-02-23]
+
+....
+
+[.literal-block-margin]
+....
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+LWs=
+=9/5J
+-----END PGP PUBLIC KEY BLOCK-----
+....
diff --git a/documentation/static/pgpkeys/christos.key b/documentation/static/pgpkeys/christos.key
new file mode 100644
index 0000000000..e48ffe215e
--- /dev/null
+++ b/documentation/static/pgpkeys/christos.key
@@ -0,0 +1,45 @@
+// sh addkey.sh christos CE4552A98F4F79CA ;
+
+[.literal-block-margin]
+....
+pub rsa2048/CE4552A98F4F79CA 2023-05-22 [SC] [expires: 2026-05-21]
+ Key fingerprint = 1D3B 3830 BF40 202F F106 47A4 CE45 52A9 8F4F 79CA
+uid Christos Margiolis <christos@FreeBSD.org>
+sub rsa2048/361C2255A11DEA46 2023-05-22 [E] [expires: 2026-05-21]
+
+....
+
+[.literal-block-margin]
+....
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQENBGRro0IBCAC7oBMKKl1vqVDUBF4XjW1fF6CIvRoCEY2MCuY30jHBaYUJsEYy
+VYI5r2ev7xEP8OXer8WviFo56a7Rtz+L0J6THd6r5KX9RHiuoOSAw1JMQlLyorjM
+GDIJh1BCpqhZm4zQYEX37Kf7vU+uHqsXelqnGN4lqRzMioLnqfwYj9Mc+br6Mp0Z
+9xfj3fZ/ptN4IXyxmJc39/Z7XCsEfmh5RRLXbCmBQfWnm/nG79iqsyE6ktwHVHre
+KWXzbxfSD/MTGBvuu3FKdppI+LWjSvG1eaxQfoZzgdKlJMl7bgwBDu8qLAjIpSfD
+HFn6Smdz7xKSjr1pdzkRpOBsIVhgHFJKDbTzABEBAAG0KUNocmlzdG9zIE1hcmdp
+b2xpcyA8Y2hyaXN0b3NARnJlZUJTRC5vcmc+iQFUBBMBCgA+FiEEHTs4ML9AIC/x
+BkekzkVSqY9PecoFAmRro0ICGwMFCQWjmoAFCwkIBwMFFQoJCAsFFgMCAQACHgUC
+F4AACgkQzkVSqY9PecqKcwf+L9FcmblH22cZlMqobcwMtR7vB+s8LfwWDwzAnmWQ
+tf+gHZI2Imo2N482nVE4qHrKMTMz0wlffQ8pY23PI5wgzV7X/Nf6Qof0upK0Wl54
+vMl8pYn6/ns4GTi36LRN9X4lJEAZGAG38DLv1ah3iHLJt7OH+fzjeifJxOAbEZ0O
+WRj9E/bKX42NaQqWAEf9kyWHtAru9Z4bSlAhY4AyviZiYthiFE8ujJI3GyJzv1qx
+ndOzuu2crg20ubT0BcEuLZKF1eVlQrcwnySiDzFyPene4s/OORyGYXmN6mqGyiLp
+16/nXW3eCnCiL5raMCLMFN/N68o1HKRkCUG0vVh/ihieGbkBDQRka6NCAQgAzpNy
+Y8TJEn8UR66J8agk1KmEUNSk2U935MXQoXMrORqpyFdVyvtHmakDB/hqsvK26Das
+zKZxuWKzbBaeO3j9GgrXXUajdKiLMsFLU2UgoOPehDPtfobNwl3wQFTF0nf+GCF2
+jyYhZkQ+m8nHYBSMjVwqkQ766s0ohSn/jiv1Vxx+zKtOaDatQqP63KHJ5z0/5qT/
+bOWgVA8vn4CAa/Hhg68I6+jM8ips3UuQsAASrsv3N3Gq2qDOUMLp4WRUf2aawyLj
+m21nJ0e7OnT0hoYQALyFwGjz1EMzpMU0TSz9nUtImHLpLok5FO+xb5vBJCSlm2pX
+XPuysCa0hKyXOJ1fwwARAQABiQE8BBgBCgAmFiEEHTs4ML9AIC/xBkekzkVSqY9P
+ecoFAmRro0ICGwwFCQWjmoAACgkQzkVSqY9PecrQaQgAgYD8806S9+AKDYL8sJ4X
+RkLpiDoAB49eXPg1QDU3xEonWL3tZhvTahIvSPLD4qW7AjTITWj/KRSBGT9cNWwl
+wv3fuZgyLwF4nk+SJH1LOYt5EnroO8k6OgYHoqU+JNAeTVG0FbxbyPGhOpAWHtzT
+VfkjJapP/77VGCZj2mz6nZ8Ze7AevC1bDtNz1+kzle38q1g2s/Fj4NPGJDESv5zF
+C2Ev1KrT5//RC4DtjnirUx+E2oLkuk+mxu5dY5h37Vn+ttSrHFayc+6sN96Qh829
+Wvz53MK09DN/gFTszvvDGptmDlk4xbmzaoPH5OnKJ37benrTntwID/XS7WkmQlti
+Zw==
+=iXaL
+-----END PGP PUBLIC KEY BLOCK-----
+....
diff --git a/documentation/static/pgpkeys/core-secretary.key b/documentation/static/pgpkeys/core-secretary.key
index dde742899b..222653b095 100644
--- a/documentation/static/pgpkeys/core-secretary.key
+++ b/documentation/static/pgpkeys/core-secretary.key
@@ -1,11 +1,11 @@
-// sh addkey.sh core-secretary D8C8C83B49F26F17 ;
+// sh addkey.sh core-secretary 4D632518C3546B05 ;
[.literal-block-margin]
....
-pub rsa4096/D8C8C83B49F26F17 2020-06-26 [SC] [expires: 2022-06-30]
- Key fingerprint = 4B64 E9E0 BDE9 B3EC C06B 5C66 D8C8 C83B 49F2 6F17
-uid FreeBSD Core Team Secretary <core-secretary@freebsd.org>
-sub rsa4096/377C937536E4821B 2020-06-26 [E] [expires: 2022-06-30]
+pub rsa4096/4D632518C3546B05 2024-02-17 [SC] [expires: 2025-02-16]
+ Key fingerprint = 1A23 6A92 528D 00DD 7965 76FE 4D63 2518 C354 6B05
+uid FreeBSD Core Team Secretary <core-secretary@FreeBSD.org>
+sub rsa4096/CABFDE12CA516ED2 2024-02-17 [E] [expires: 2025-02-16]
....
@@ -13,73 +13,54 @@ sub rsa4096/377C937536E4821B 2020-06-26 [E] [expires: 2022-06-30]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-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
-=3AI7
+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
+=MkAH
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/corvink.key b/documentation/static/pgpkeys/corvink.key
new file mode 100644
index 0000000000..ac3ee1f6a6
--- /dev/null
+++ b/documentation/static/pgpkeys/corvink.key
@@ -0,0 +1,66 @@
+// sh addkey.sh corvink D854DA56315E026A ;
+
+[.literal-block-margin]
+....
+pub rsa4096/D854DA56315E026A 2022-11-03 [SC] [expires: 2027-11-02]
+ Key fingerprint = 82F4 5295 ADE6 DADF C7D9 4F46 D854 DA56 315E 026A
+uid Corvin Köhne <corvink@FreeBSD.org>
+sub rsa4096/E9D02936E7C550DF 2022-11-03 [E] [expires: 2027-11-02]
+
+....
+
+[.literal-block-margin]
+....
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+h3+7dcZIRza0foM=
+=U5mY
+-----END PGP PUBLIC KEY BLOCK-----
+....
diff --git a/documentation/static/pgpkeys/cperciva.key b/documentation/static/pgpkeys/cperciva.key
index da8580f2b7..92430f1c09 100644
--- a/documentation/static/pgpkeys/cperciva.key
+++ b/documentation/static/pgpkeys/cperciva.key
@@ -1,69 +1,155 @@
-// sh addkey.sh cperciva 0C6A6A6E;
-
+// sh addkey.sh cperciva 3897F2E22E65AD3F ;
[.literal-block-margin]
....
-pub 1024D/0C6A6A6E 2009-01-12
- Key fingerprint = EAF4 8BBA 7CC7 7A30 FEFC 0DA9 38CE CA69 0C6A 6A6E
-uid Colin Percival <cperciva@tarsnap.com>
-uid Colin Percival <cperciva@FreeBSD.org>
-uid Colin Percival <cperciva@alumni.sfu.ca>
-sub 2048g/DC606691 2009-01-12
+pub rsa4096/3897F2E22E65AD3F 2023-12-27 [SC]
+ Key fingerprint = 8256 3B84 D062 0EDC 0DFB 8641 3897 F2E2 2E65 AD3F
+uid Colin Percival <cperciva@daemonology.net>
+uid Colin Percival <cperciva@FreeBSD.org>
+uid Colin Percival <cperciva@tarsnap.com>
+sub rsa4096/EF67952951690AB4 2023-12-27 [E]
+
....
[.literal-block-margin]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-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
-=RYUS
------END PGP PUBLIC KEY BLOCK-----
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.4.9 (FreeBSD)
-Comment: A revocation certificate should follow
-
-iHgEIBECADgFAklrBn0xHQFOZXcga2V5LCBJZCAweDBDNkE2QTZFIGdlbmVyYXRl
-ZCBvbiAyMDA5LTAxLTEyLgAKCRAy3h7N0JNH/J60AKCk8fKCpx2gXrbWMHrulX8Z
-mxuFNwCg+1koNtGfe3LQZj/CSV2zfr1mTA4=
-=GSTt
+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
+cDzzfY57o+D4zcLOIEI6qsCSrnHpKoCFrevbO5du3OxIgsMup8eHboqo8t3VvwMo
+0FVPqH262Z/qcfnnRyOAuG/gPCtgVrM0VNDv1CM0JanNz5YpX28kcNh8hH4lMX1c
+tCVDb2xpbiBQZXJjaXZhbCA8Y3BlcmNpdmFAdGFyc25hcC5jb20+iQJRBBMBCAA7
+FiEEglY7hNBiDtwN+4ZBOJfy4i5lrT8FAmWMSyYCGwMICwkNCAwHCwMFFQoJCAsF
+FgMCAQACHgUCF4AACgkQOJfy4i5lrT+iYg/+PYyJNoFuygtV5t/skcjYmvEC93mn
+azEvh+x99vGYZnGKeJ8NDOF4QCUzeHquOWxDi8ZlreXyswKcrIquPxxX6+YyGe97
+VbvLnez3ksfzOYRj1F4qV0Rq8ZNK51+bvIrbcS3SfDaRioAkD7WWwFor8y/hSwxY
+kfsKbtP5PRcem20JUxuC085zqWLaKv5t5n2CBzAGMjwJaQ3tM3AXVwWJuJaHA6ot
+/6fntJlmkfcyCYyyr0D6b0guRj3STbZ2hNn5o2AI+f6LJJ31s2sPFjl6rs7fORf3
+hFSNOHDd2HxfVBXFdQy24ROkC4orBBz2xh9GScjxxT/hbXkfufkubFubw7n0HkvH
+zA3UF+QqA8JiI3n+d7ocsP0/5BQ2sZdeqPGJgHx6RkAMuW1tJ29wSvCN1qMgFwhY
+kpQdfvHlociQrimUfvlRfSrBEe8o7tvIuEdpvwvCZSTJqQbVoMw8UHFE7nzyCXUS
+ab5h6PbjakCqim13ekVO2KFFTTPcz5o5jEeUY75tzbIwcDfFbT5KqNjWy06TVdM9
+VEJDHSfOfxHR3kSEwZ+tT2aTvL3grsUngFwSNcj4Cl4CRFfUw8zVZY+7O7RiMlhB
+qykikvUurrdGKc1Scwa0yuppdA6eVvylyTWSQGrQ+uLWtV1LUKN7ZqKJWBkLPt9n
+S4XZWGyBvxOHYqiIXQQQEQIAHRYhBOr0i7p8x3ow/vwNqTjOymkMampuBQJljK+m
+AAoJEDjOymkMampu5g0AoLxK1zCVn1AKpKR64N7TPLvP4ofjAJ0SBNv5+pyPEaFt
+bVTkEjYwyxnx+IkBMwQQAQgAHRYhBLso1As2Du6Tau0Vb+X3vMujvd34BQJlnGY4
+AAoJEOX3vMujvd34JoUIAKowows0cqWzAnQW0sdHrqmpkKQ4/im5ModQ8/TbQTMx
+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
+ZeceT0v2RDVukCOSNM43
+=F7RM
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/dbaio.key b/documentation/static/pgpkeys/dbaio.key
index 83c1b56867..405947099b 100644
--- a/documentation/static/pgpkeys/dbaio.key
+++ b/documentation/static/pgpkeys/dbaio.key
@@ -2,11 +2,10 @@
[.literal-block-margin]
....
-pub rsa4096/9A937B2DF32E88D7 2017-02-02 [SC] [expires: 2024-02-08]
+pub rsa4096/9A937B2DF32E88D7 2017-02-02 [SC] [expires: 2026-03-17]
Key fingerprint = 3918 F451 3B23 CC2C BE7A 7224 9A93 7B2D F32E 88D7
-uid Danilo G. Baio (dbaio) <dbaio@bsd.com.br>
uid Danilo G. Baio <dbaio@FreeBSD.org>
-sub rsa4096/352413A12CD63C23 2017-02-02 [E] [expires: 2024-02-08]
+sub rsa4096/352413A12CD63C23 2017-02-02 [E] [expires: 2026-03-17]
....
@@ -25,176 +24,188 @@ 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
-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
-=jNrQ
+tClEYW5pbG8gRy4gQmFpbyAoZGJhaW8pIDxkYmFpb0Bic2QuY29tLmJyPokCNgQw
+AQgAIBYhBDkY9FE7I8wsvnpyJJqTey3zLojXBQJl932xAh0AAAoJEJqTey3zLojX
+t1oP/iZ46D61uEY99/8vtshCEMNn9Nn/vs4ruqhighEoCao6U1jtz9rt8GWhvBSh
+b9v5fpjJTZrxP9DyXm/Cb6nwzkNLb93p1sSU3MQBVPHpErnhtAI0KzpcNywKLB8N
+pMcgS8VpRFiCTNmpeXKRMLUVRsQnwFpSEIq1UGorpdbTKmTVdCLR3kXGOBPkxvDA
+xyMgr+L3mCCwZo0jrMsJYyLsK6PH380278ldLZkuhSUMOJgpkp1Li69Pmej/RNRW
+p6ypRaS2MGdBfRhAnaeNCouHYK8TUU4HwkOxb+28cjUS6+A0zpEvRV2hHhJM1wvM
+lB7gw/SNQTGEW8GcQDtn6qHVkW6fdi+4roSUhdCKMVKkgF71Efha+oleSrgc6V8W
+MLebuAfXrE+QdQDS10bxPtSRAH45vkHwSndtZ5EvpF8RzFwZjB1GiaRqCI4Jvky5
+hHNFqgI7BTLuW1754Dl02+v3KI3zBf8GunrmfLlV9pn437QJSPh/SfmFKvc2O7Vr
+dxg85ghqNB+DoTY6OqxTB2icHzKZCgC9k67GVUviSJ3BGKdSJzQ9gTl796f9vP9E
+EeUaJHhvhpK9T1vMDfEnzMjBhPR6zueKU39cieAnahBbdQf57df0cwySgJZCL+as
+oKWizgydYwl050SvOdM6pzA0mqoD4P4EH/DbaMfDgSOdEi9fiQI9BBMBCgAnBQJY
+kwtmAhsDBQkHhh+ABQsJCAcDBRUKCQgLBRYCAwEAAh4BAheAAAoJEJqTey3zLojX
+GIgP/isioUK1LHEYt49mWtpj693xaX5UyvvqhbYgUOZ23QjjHcKvHZUER6fKE58a
+Wsxsyl7tszViXpXBrPG1eGyltUYhJDKYRURZzRN49ZVg4J2wZNua0Qbz+Xwl00zg
+tQv4EIDCbM2fS7QHDafelquwELi2nHA/cSbMYwLmQ/k0Ok2J35hjkcL7gRu075Kt
+CX889UUHWUf/CWwBO9wevBfl0GBVi7FV+Iaecx2YQ+0PHd4zmwkYzG3UPm9FKUgU
+X9dR3t5DPLbTSR4Gp9DCLJXlR13uYqkF4kevatOTDNjYB31ze3mRCa/ewUQmE9gI
+rJoZsuI3Wgxrm6CikSRrsJsuVulVT08XdwE89VWqEe1uPVrujgChkBM9myF6viOP
+Z+WNhslAjLPJfjHu0QBm4z3WZ31JeHwGWKxSg967eFgLS9xsVga+qbwXdJMlqRcj
+jU058MGvW2U/fG/h34yXrcpQlPHhrfNePTlJGBNb/UT++XgdZ3G8HtjrPg99ICjr
+CXOQ3W9aXHRYiVati5XFzVjr5ZVzLeBCONHTrauSk40gZWuvx+vmoFaBz5imZdR3
+ORsBiRJtd53I0uP7/EdEZcUQ4ys3ypQzak8Mrg+RPG7352CIH9y1n2yZN5HCqHc/
+S7pQUBMKb5TfvUmrPjy3MEKp1pm/kKXdW4EPmMEHaZ71gqKAiQJABBMBCgAqAhsD
+BQkHhh+ABQsJCAcDBRUKCQgLBRYCAwEAAh4BAheABQJZDIkDAhkBAAoJEJqTey3z
+LojXdigQAJa41ycShRCG8CN+WzhrfCCQ/X5HskBAeCAVtbzpughLBYU6DWf2+3fe
+Zoyisowpoz23gjYcZdt0axKZWepLc5ELu4E7dTofZU+cgrT4kq5wzchQ+LaESuMw
+35b4WQai3LwmOKkGTZSQBOPFJnaP5SVEBX70j3j4vcDUnq/czpBnzcdDmvQv1I83
+qAyUryYWfpQTkzwSd7wv0ToYKezdZGkjuuymnCIkBNJ45nkgNLQPNOAe1jatPhfc
+jTbQ005wfBln8bxGJAqhrWE6uNTVVOkiPc02U9MyALD8mADaERSUiz2g0NOQZe9C
+ZD/hYwTYCLaD26s6krCZNaUzB3IQT+0/3x2I6zGSfyQaCcT/yEW0JaMv6cb66uEI
+FsibvKBVzbulXEVyY7/S+ka1xWlI0o90gHQ3ZTz5s578JY2AeOLQaL8eUTFdu1My
+6cU6Aw6KOEvXTxB3G45W2u+WbSSBMicncG7sBjKIiUrbqQS3wAs3OrL+pM9wGKmd
+EyOCKSO+6BCBu5q7+mZuFUE6Z4+M/rytmCLHG+uPYTJT3kIlM/N05hPr2KRBrxa3
+gZI7EQaJYd7E6g26hvu5dbuHPHGfXVohqbvWtLdaXv9ezK4oPa4E+Ocrt3hYQOkT
+UIYjW25c1SB+UpMFNkkUT5zVdeP8PMRQ/4ImeSjKA3Y31DeZ33jDiQJABBMBCgAq
+AhsDBQsJCAcDBRUKCQgLBRYCAwEAAh4BAheAAhkBBQJZDS3fBQkFpHL5AAoJEJqT
+ey3zLojXnlkP/Rq3ykV28Uva09fzD3UJmyYK49HtBW90+s8GdeIbDWFjcMyrLH+h
+clXjVN08hiqqBFVpXMShpfKxLeTa1uT87hrjYMDnV4z4ahVqh2y06tNIm9S5Zz3u
+NA1/HNcZeZ9DKpibX0kh04QLLTjjp24eacAjgvv3MpV0VrJdKdBU+GJRXlGEd48s
+U2fUS2ud09tW/VuwANq0mJepygb5VdLrdeg4mh+3T8phH2alQ8hne+V5anEBBKM6
+kpMGVLi7LkZY7rqEu49pKRjC+FrfOCgbD3e83dJfy461NTdXg9aOfnw+3p+rB2r1
+7WNmLBESrgnoC9+V4mMHrH0XSTRlcTk7TpC97kowPqgsZCpQynBuLA+sHpNO14kN
+X5a60VCM1e0chJ/kZxUPhnkeHkYZIUvx1crjiitHHbYGj3EMHPhwfViE2hCBAfhf
+1i5OOKFT3K0lA4xCURg4oNmf+sdtq6At9D3JJ4FFElWLUPclwqnYgQXn/At+Y7Tk
+I+ptgWuCe/fsecRFp5KY6VvxAoT3vn8b+Fg0bPt8K92n0LTC4NpSg4dvEYcLOlBh
+aof6TXSFBWOgtTXqlXIorjkuI2SmqmImoMsK6FKaiKG8kKKEtSOhvVdPZD7CdYHm
+9NxRqM0v/5PzYVLwNRfkPADlBH0+3hhwwcrlX0FT8zTgiw46tCkHnuYziQJXBBMB
+CgBBAhsDBQsJCAcDBRUKCQgLBRYCAwEAAh4BAheAAhkBFiEEORj0UTsjzCy+enIk
+mpN7LfMuiNcFAl45REkFCQlpxzMACgkQmpN7LfMuiNcs2Q/+Msvy5NfmI1aP79OO
+xxb3VXTU01bsDtJpuRzrzmG+uXvH03ng45DSGf5Ws73MoFl2o73j0IEFVUgVkd+g
+TFkkGK6DSuFDR3Wf/+jVN+cM+tRdRlTC3J1W54bVPkAu/7Ze+2RoKO8iAFhJXfQL
+kojM8iV3CakSwJfLKSD8aPI49jeFrrKsWChnUpy6KurAzbD2hO89MXoJbn0nxZqk
+oQV0QpctM+mecjYIV6gTsSHiJjjlCfljCIj+AgyCZCkIO96dr71v93ARTYUuFWM6
+F9p9kMnXBP0sRdcwl0KHoLx/Dk6g+H+nvORe6oSLKATTOvMa5YBLHa7lIrpV2ZuT
+W4iTUTTnUM9udaDeemg3ycwwv5rjoGO3O28ftm8/cousD0fG1Tk0wTTo+PaBzwKC
+QKlNNgfv6HTzLcURx16hDOQR9Rq/90KuBJgZg3Kh1gh3YxZ2R9HO2Bv3ZnHkQgwH
+HOQ17KwYGrOVkat2HfnHECxKWa97iTMB3lJKbJ5sJy2OmyfLIr0JiZVsRdypDFFj
+65kK0uQ1DP/sOYaS2lbeAlnMRFhOnCUQhhl4z44lVNAQtUi5O2yDdNMJF+xl9n82
++2JEtN/nRd9GuGu/i7qHVNUWqX1tJT6Gg7vgrjlbLK78ZJO9i3K4GilerA7f0KMo
+MpybAYMLeoXDZnX0er7shNDDGA2JAlcEEwEKAEECGwMFCwkIBwMFFQoJCAsFFgID
+AQACHgECF4ACGQEWIQQ5GPRROyPMLL56ciSak3st8y6I1wUCZfd8rgUJESbYSAAK
+CRCak3st8y6I1+dnD/9pl62oIV8DN0ZCTh3BbxxwtsztcinHwlYH5jPJ80ebtm/n
+O9LEdA27QpMDCnpfU9p7Yo7hB16R3+DA57TCzt92792iC3L5aCgtuumanQzStN/8
+5q1m0+XKiCBEusFHuupjNMTB8KcGH3nfS52kdQVfCN4GWW34COZPO2qGCDqGr83q
+8D1RHXbspboJHiPnxJOmOdYtoPL0hkKf5AUplFHnaWEbgZJBd6XPKFZVeAmByxP8
+S7VlqsvpDZ7mCgnr0j/viPOMcy0lCGH+PPCPf4mDVqs3DLI51DgC86gAdNvLeyGh
+xhdVv/jrWB6I6ad1xhboy5/5mhwg6tLSmS5Yf5gvPDcQj78XqlVL2RjMKbqs0H9d
+N3QzRI8GRe7TR1pupZwcQifCqZ/WvAAuvE7llCyaN0Oo+jXdsuCBK7nNjjUgIwOz
+hz6IzQZY27DVRMa/Xhl4QIaE434miQ/o5mDowQ+1p6Kiz/wg02+HVTXYQKoppY84
+pYeqqcGKXg7InkBik2xx3mVeSmowH6k1neuFr99BwYqxdk3ROQzuYYYBAY1bRc04
+08+Cld7wpZh4+LR5qOneZb46T7RsQ/LUw+/REdRp+jfMbSOJNJN5r1lKFEIhUj6Z
+mc/QGfVuAsGKvQNhz8H98GQuUnk5Y9ID4yV1Fk4JQPX5vVENRRHZtoFtu+NoKrQi
+RGFuaWxvIEcuIEJhaW8gPGRiYWlvQEZyZWVCU0Qub3JnPokCPQQTAQoAJwIbAwUL
+CQgHAwUVCgkICwUWAgMBAAIeAQIXgAUCWQ0t6wUJBaRy+QAKCRCak3st8y6I19cp
+EADGScvDRFAzNACx4TZ5HQp665yAY0XtQ8Tdc/if7qrUDlICezZueXDgL2wC14/C
+stfozijRXTDwTRgK9j7IARCz0WWI33PZVu2eGBjXDF+m84V4W6tw8iWNlLOXjKRW
+6qaRWY9C2eN97Rju/Yt7URVoP+ymIltBjxFQq9TpY7QjL1cQogVgbIOM18cComEv
+lYjFBjGYTK6Iai6Gx2CkXDqrXNME2KRUcQvqnmzuGZuJteUfvq5ErDlPLFHGg1Oo
+Nmd7OZygQvgUL1hQDGw8/6cT/P41QWPhOAKp0/C2m9qHxLdvohmCQfeVujpHwhpO
+ShUsyBoUYazpdQY5Ks0J+yCTBXlqTO9vTgeeQ/FRdC48o0FLmjGV4fYzGRmswowe
+IO6uPkK82zSzAZFVf+bjgYcm1ZjRkBOz7Q0pfzTRg8ew3X9+MepLaNlgRxrTtABB
+/7lcnSp5Hg/MezEOUuOY397XbsuUZDJvhgFiKRT5MPMjWO07XV0EHc4884lB12/u
+U4hi7G99lB/xtNya87ZEU+IaI9XOKkJFpQQLBuv+nLBNMjeD2ty9XJhV6gXpmner
+VpBugFWkuU2i4Na/JwPl1bXhZekqwPcpObpBDqZxIjUuwdCj9hfDHSB1jaXqsQDz
+YbGMxg7aYBGkvjx1LkuADfkp3+q+EyMOW6mKcFvOoxecLokCPQQTAQoAJwUCWQyI
+8wIbAwUJB4YfgAULCQgHAwUVCgkICwUWAgMBAAIeAQIXgAAKCRCak3st8y6I127D
+D/9QDDYwXKwAPFArW0mfRSLa14J34KQ+kHjjAwZFwduqEJnm7dBjAtEesGCN6PfM
+DNaB2dJydPkFEvFYQAqAF+nScFJLGboKDgJqNT6J7njC2l5gdFYEu8vKOETpSELh
+ULVz6E5ChysS0JwrVSVLYqeNY6wyvhk6pujMmQHHoPNnp4t4GyY6QvB9Jn5wBHP1
+FgjUkkLXDovfS3PYwkblZJvMzrP08lHuRUwSmm0ToDqEDk8j20qalFrl2z8ymKp7
+K+7YrU7TB2bM6hLePFwDA6Z6CVy722Y/iNtcu5nQW656HK4Dh7EYqp28ZF+s/U/M
+2ItSiviwVxZkxZXia/w8ST+Jh0WVlAMcKO7p15sOAOCO0CXk2yLYQ1/Da4614P/G
+zk7B+fkYaXZMlHvvgfw0DObKgBXoM4/p8Aym74XImlEWpAD/AsWq+LCt/KSLYNtO
+l2DVkI1omKQP21GVP1ne8vu8MaAdrdPzMQbV882f2iAhhCJhQG28HhFseMTdRWcP
+pXsKCf3K3UpMCAshyFNXXpuAP5cXfUx2kaErmFr5G81v3cxPW2oEI5MJ8oEtscxG
+sWkYAdujfnqQcBrrLhN+dhSebUUEIEFbw5izhLWzlGboZzPLiZOa1EV6E9LnIKgF
+/ThmCnQxOai6EKyKroh1hoAhl1JH2+ipi2qBrCH6mKshB4kCVAQTAQoAPgIbAwUL
+CQgHAwUVCgkICwUWAgMBAAIeAQIXgBYhBDkY9FE7I8wsvnpyJJqTey3zLojXBQJe
+OURSBQkJacczAAoJEJqTey3zLojXZ/UQAL6eEVT3YtlBMhUJljAS4noNngvvrqD6
+xDRb2IcB5/N8SrMbaDjvGpL8w91QrdUehvoYn5+LJDuEdqkDjN2uADhJxu/j7Yt8
+aU5Kog5prSR78AtJZqtDN3QMideEG5YviuCsCp2Irew9p+sFJCnSXcqKOe3W1eHL
+G3NTzYMXkd0Im9j5/umhI/8sJxB4KA+gjYgFNmiFL2+792hr4SKLFs+Hr+EPp+rs
+rgnr3hH8sZmQMwIn9cxNh+uP8SiquYiK+3HhXyY0Tq+WJKki9wHuotB4IR2rPboB
+Ph7iym4ut4eyo+dqVkQ6wCY773kg8KlFNge1bWBKbAgNXBLa5xmlF3kQmT6q7z72
+lGviBPRTy11C0pci+VLqj+MIkCwz26Arft1j0BwYbPYawyM7zYxM5WZM/m7c0Lan
++PqOeRRwSqC62KWogiRHgxOTZzn6eaXoCNOHISnhDKGIHlY5416J45h1oYuTf+5+
+MnNkXF9QcdT1M/8NPm/w7zxIIXiFVkKXH5mIn+yGWaBbGyy/VId2UflBE/B1rcNY
+drBb06PBIZJCfv3uW524ub7EOvbidmPCLBrCU6ip5u9FIr+n70z/FMkjahw7TsoT
+cJ28KS3JnSVUNRhRS7tbdMXSHWDePqEV5lHeeSn1LkiuZHHALiVsi8r7ZPAaqpRc
+R9TLGhnqED0PiQJUBBMBCgA+AhsDBQsJCAcDBRUKCQgLBRYCAwEAAh4BAheAFiEE
+ORj0UTsjzCy+enIkmpN7LfMuiNcFAmX3fLIFCREm2EgACgkQmpN7LfMuiNd1OhAA
+rZnOZFF9xxnTPRjz680lBfMTjroiQk3SnRURGvc5XXgPkky/ruR61r1wuqV7Tfz6
+TZFfFF06U/TlL6q7D9vev9bHBa8Fa8wUBhOwufhKcA9uzP1s/PtTkIvnOdzGdKjT
+o1QM2Aw7DLX4vWM6bJ/9BD4eiVVqJXhm5THl2YJyEjNrG6z0apIohdP31XkFztCa
+stOEJ6ye3CgP9pPJyT5wKFuna7GMzIUWljmyanFPoNSJBlLmG/SmkHmWIEDYxlBW
+g+6Syyz0g3OQHirQki3686XWCcfktqcXQcFdDk3f60Bd1y6Mio5Q4W2bGSqpO3Wv
+F+8wGCULlljT9Ay4MSEoCjuvS/4AKYn+68OL4t+vDrK8E5PK1FTKgAkVUoEyqRhn
+jW1TMEn/0Go+VyyaS4M4Y5PCtsoA5K9ObuStwR0xiiHRiIlUPYk7nkMccoOgOw8Y
+2gEYPgYanwxak0BF6YlBBe7opcC35qAj/kxy+Xd4+Rf7PP96hB5RtZgWPYFBZ8Q4
+4I5P9XhxtGIyAA1NkKLmeAHQiZrD4KR9iNaUtwBEIL/rlA5PU4Qp4Kz9tm7ZEJgL
+FSRypbsGemPQeWoEiE2IQsaSY6ym2p0rjWJ4zkgqND3WfDYQLYv2oPfUXU+h8ZKt
+2EQktE6avT7hdys8lsl48As071FQAgMBAhvbJXJKPvO5Ag0EWJMLZgEQAK34OCB/
+bFrdOJ4/L6iRKdAIvqtEf0F020rwNDVmBF5YN2HL2dN2awlEdEzhwy3WJH2T7s5M
+aPioMILZwq7+n73sqvuh2rReheJodXlCmQ/WrAwfGFTmVNE2gAkiYWsQUBNaATw+
+wm5yaAl1VU7nlX3VlGrvMmgznxvN+1gjpOtcr5YU0FXo8DUOQO7TZaJyAoQbub9L
+qmNxvkbTenpzb0YmQYFyuCacrmwa0WIbLgeQ5H9lLFkjZLku2m4H3J5rI1u58l4l
+cDRfKCisvcOO3ecX43f9DHr9GadHTwKf0WpFrSHqDO7T2doZ7L5CqiJGjFOKdfIg
+v0jsBXc4mk2kaSFVCkDQ2hfi1rIzv9r/OMGxE2buSbc9Ll5CGHgzcxex4n0+jdsI
+J8lYcs3qlN+FWtkuCPR+OI83CNKNZIS/0azJ4Zrdgxu2JVfpDajsyZcNrrOgukGJ
+R90PRqPdTAr1BupVQ1i8OWrw76PdyfyofEzkqZmgn/LCrBCzxXkdkznIQsHPyAA7
+hz8Dn9mRk39R98ayLOHxbatIXMFBkhTleprMINPZ2spjmKSG6cjq16ZUyvRyzFG1
+NUw6cteApTUy376AgGoU4MPLDyAipLc3AZdZUp0kn0A0pz0rPDZsGLqOOUzZ2UYV
+ZGmqcVig06KDAXRkDRaTlazW4dk6jQrk19KPABEBAAGJAiUEGAEKAA8FAliTC2YC
+GwwFCQeGH4AACgkQmpN7LfMuiNfz9RAAyBrlORB98LvQlD/NLbKqtxzwd4x//ian
+whYUZ5GXqGIKo+fiiyusPw6/bdatDeeZ2NXDHUJuDH+jmCyNEBe2SCxcG9tgRPZ5
+ZsC2vfgTyVglrKOapAYlIwyzFxUNCt2gGIUfxinOe3ot4RDpiRuOCUKJrjsidGBN
+c7bB9sPYNg4TGtH/3zinzC8Wj1jyl5GDim18taQGMXtBNUYhdn9z3WyHa+P6Sr9O
+V3eedLSW+lo8UVuN+Y+Tvx4lwanhNrOdKzHPx6bNzn1h9CbYe/9D3dbg3oaiW1TI
+xw2Qm+GpqPQYlaUbH06s9GVRf0pL9RPrmsSY6CFFRKnEY+zpWq1BwfHEoVZzetC0
+oZnVH7HW4HHkj45NwPP7yG1H+vfldSruAKR1B+Ym7Skswe54PMXjeT/ARk4gFJgV
+/oMo4XQLLQEVVNVjq04nNOsgcBhRrTeo11tCvDJv85oz136WCrnC3EbGVYh4H9+W
+Vdzcd/jHo6O0qOrJ6407mSo+JPfYyo3qsA+Oqqi3J02O+AJ2q71qIW6OVPfTz7yd
+buIa8EIn6SCCww+MUpUYPRa6LubSNAFC32M/NJ8h+KPu13JmYnNoZFYeIU+NejEJ
+DJezQsH0fvauke3s1WgMzoXTWJRBVwdsiUnEviJ2FllHqya3oYB7fMHcK6eQFo5X
+dEHjyXs8KbeJAiUEGAEKAA8CGwwFAlkNLhEFCQWkcysACgkQmpN7LfMuiNfkfA/+
+MMfxCzZ8wG7pbKxUQp/NobaO6Uxg7ZPsuyNBS4/+OVK12u3LTrCqZLjUBuyyFIiw
+hw9FKYq2PqfVojwuqJnAfu68iICASJWfPDtYaK7UWX1a0CWwITJCIXIhA6Ppjw3Y
+eBzfrNPsLDjXg8I2vX3Frz7JiX3tLP1csOIvHRss0IVIDrp22+MVL9ar6jaVMXaZ
+1jheZR+khOp1FsPeT1/U1xdLF9hGrMPzwOUoCMbQpX4m2n0Nk9kWISx72KAM1iYX
+qnZIMOklHKeWHgC3aKvZJsegVxCf354qeIYwUu22nCxlXx1TQQAuYNt6yznjUXqC
+zJtcvwXd237R1/kvKe5rkTet3qrn+k0+SEWSX20ZwjLweIGHJxcDY9IxuGVuZUGY
+UIW7nHa/lRCYwbG6EQPIRtbbe0P6vfStMDEl5jkZSDhmXAem57twZx9he6ibnykT
+bcCtbHkzClCK0RwlXM98mjL0j3Y60eX8QVANPbL6k+IuQeEQ4mGVHERFC6BCMpBN
+Pfp97j5nYXpLMmN+6FRvzpbT1mFcO2yue6sPzyQfG5QPQpUUzL0fwiQt2WhfAjks
+6puXw/AcWcV+ZAgvuhiQ6R8wdnao8GqDWGtaMqiOHEearBH2199hQTTaza+IFpyr
+C+LrSQySsPvcUuZ1A0gFFipE++h+USDkyGP/V1iqL26JAjwEGAEKACYCGwwWIQQ5
+GPRROyPMLL56ciSak3st8y6I1wUCXjldMwUJCWngHQAKCRCak3st8y6I1xzoEADI
+ic1/67nsLg4alQ9jLMMahUGpZczU6oaIoWEjHIAUnoCcji6LIBkzvXYHpw/SNMFs
+jJ1E3j7c47+KYFxqaSv+r8TS0xUrZOMkp3yyoRHmc+01sKONjYReadFQxNm3bXR/
+/cQfCpnER+wl6u4Q3winGoYlx+BxN6Lorm/TNiVpQOBZ9ojfN+MRnCcxw2gbF9CW
+ylcAYLeZ6gWxhcp4MQqrxxJ/wCGpJTKs0j/r+GN7yz/qf+hB3vmIGbyYwM9elftX
+vm81v1VQoHzJspdNNSsjOPFvuJF8swHw/UGkiZhTaEhE1Yg/gFgq7g8twgQV9M/O
+OTsOieee/M4Hq4Z4KD+aQ7qZC6sLnb9C4dNfzAY2fdO6aJWqbdOchR3+p+sggxBC
+JfLfVZ76iZphTmRxHig+zW26fDsav/EUr0UDru14Y/b9/CMO9RI+rPeydjqUPal4
+NLavs8ygzlGPBnzS2oVpfCq2ErsYya6bWu5TnrSDJiAULIjXyhKgZIZ4LyDM40ZK
+6Nzh+/ZqABfL8oexbUXo5ecg5rTO7dDjJA5IwEH3wlweIN5AYj95ObStMo8OMuXc
+RsrtCgRQhLHvCx1PfH9saNASOBJLFN7FOKjXZXrV15hP9sbKDpeSY++53fToCjet
+GlCMjFuPP6cbKtGQ6od9DIQSeChtDKQraqo+eKoQdokCPAQYAQoAJgIbDBYhBDkY
+9FE7I8wsvnpyJJqTey3zLojXBQJl930fBQkRJti5AAoJEJqTey3zLojX0HEP/2m9
+N1Vut2TqSlL8SwAayVn//uf4iMWAC77sMVqncepOWpfcZXWJkQ8AFJBux5u7OAfX
+EHHk0a3u3/h57DVaYqVKRuHH2YfmWvOZXMCII6DeH73eOWuOfpDp//ogDP6Cfpbp
+1IbhDskjf0vqsGF7v3AdJow7VGshtD4xHHBYH7lJ9FC1vkP0OVGn92gsx5eZKghq
+D8O3BIFwDVEu49XXSXd+h1xx+b4L41tFX4ZzO5vJ4fPcd7LFpku+1WmEr5AC2yXJ
+PeSuB5tIwp+ywP31JL4ZQE2244nBGBw3xxVv8dlL0xBw6MG9Iq4kyf+Wo9eVhS6C
+LvjWKMX1HQp+Ax4yv48rz7YX8Meu6opB6n1y7vDHIz0jme+LQiEsk+Z2fJ5XFTuv
+zzDmYZC/i5crSRw8a5635LIN6A9kBdmZZgSmn43ecRkp0SYJXDf79iveBOfE1qRu
+LHhUAvFMurvEhBU+35tTvKaDB1dfoE7wMF+0JWOTCic+XbitgtG9zK++MxT4eIiN
+ZRwVbPCM+QMTgzxsl8nP1KYybNmz4vBaA/QalS8/aoo5YdU7GsTVNsORWhWjlORS
+RT/s64/9K7JON17dsyj1y7hC5/oRGDrKo0aIhtnI5v8evkOfR9dNOSGxyxp3xFPM
+kp45teBreLc8kJRdtH20xCj9jEKNfCj1qPttMUZQ
+=RrpM
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/debdrup.key b/documentation/static/pgpkeys/debdrup.key
index 49d00ef00e..91fe5f39f3 100644
--- a/documentation/static/pgpkeys/debdrup.key
+++ b/documentation/static/pgpkeys/debdrup.key
@@ -2,10 +2,10 @@
[.literal-block-margin]
....
-pub rsa2048/85DE2FC63FA7C505 2020-05-04 [SC] [expires: 2023-05-04]
+pub rsa2048/85DE2FC63FA7C505 2020-05-04 [SC] [expires: 2026-02-06]
Key fingerprint = 0B7B 34A7 3FD9 3F40 E978 8367 85DE 2FC6 3FA7 C505
uid Daniel Ebdrup Jensen <debdrup@freebsd.org>
-sub rsa2048/06BDB86948D0C5CB 2020-05-04 [E] [expires: 2023-05-04]
+sub rsa2048/06BDB86948D0C5CB 2020-05-04 [E] [expires: 2026-02-06]
sub rsa2048/3ECE61487CCDF3BA 2020-05-05 [S]
....
@@ -20,27 +20,27 @@ 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
-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
+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
-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
+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
@@ -61,7 +61,6 @@ kql4qrW5QaeBvj7EXf+QmeW2JayUNh+4TSr5ln08umw4Xhk6pHpg/x++qRWrDJG7
f3Zp4+XXQbRTDCFw7A9uW6XXTSLgiAPBnV6eAYpkUboMmUixn+nnv8UNnDP4aKt2
DLP3ibezvHPWTbE5QEEs8kKzKrj2fhJFnuA6jNi6sf5hW3bE0IOOUpBLMVDEkVoU
AfEPn1jnc46M6f26FEhR6gQ63kGvOFYUSoc4sHuOwlQM
-=yN3a
+=7D7P
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/decke.key b/documentation/static/pgpkeys/decke.key
index 1a9eaa6e3f..299458eccf 100644
--- a/documentation/static/pgpkeys/decke.key
+++ b/documentation/static/pgpkeys/decke.key
@@ -2,11 +2,11 @@
[.literal-block-margin]
....
-pub rsa2048/4DD88C3F9F3B8333 2015-05-05 [SC] [expires: 2024-04-03]
+pub rsa2048/4DD88C3F9F3B8333 2015-05-05 [SC] [expires: 2027-02-07]
Key fingerprint = 3924 2DE3 BD34 BB70 529C 03D2 4DD8 8C3F 9F3B 8333
-uid Bernhard Froehlich <decke@bluelife.at>
uid Bernhard Froehlich <decke@FreeBSD.org>
-sub rsa2048/623F4D906034D944 2015-05-05 [E] [expires: 2024-04-03]
+uid Bernhard Froehlich <decke@bluelife.at>
+sub rsa2048/623F4D906034D944 2015-05-05 [E] [expires: 2027-02-07]
....
@@ -21,33 +21,33 @@ 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
-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
+BRYDAgEAAh4BAheAFiEEOSQt4700u3BSnAPSTdiMP587gzMFAmXEpYAFCRYfwcEA
+CgkQTdiMP587gzPxDwf+OtI0Ig2LVBioz8VeRO5j2U/GXpVr3k+xLLGDfeDEkHTU
+VGNvR42AYmg/SPF17N0qCVG3xAyZWJM96phtgKKYJwcahERVdloymKXgpgu20SOT
+MioxChoPgZkyIX8WI2bZ4w5dzSEKKB1Dc3nkB66Vf07xFppVGYcgkoQf3nmuTmHq
+bn9tzs6yplRXzQTlBuHadlKi1TyX0HBI/Lb1meqPLcCgsazTLFyg7XwER6mccJmu
+v5byqYTYMP3WO/YCXjYQXfEyg8q9xFGzSthluadxxNsyyDANgaPuo+MjRgvzc1WB
+ARvHsfI9wPacSwdnhjNta/7rHkPVDsgHOeFQPwIYBLQmQmVybmhhcmQgRnJvZWhs
aWNoIDxkZWNrZUBGcmVlQlNELm9yZz6JAVQEEwEKAD4CGwMFCwkIBwMFFQoJCAsF
-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
+FgMCAQACHgECF4AWIQQ5JC3jvTS7cFKcA9JN2Iw/nzuDMwUCZcSlhwUJFh/BwQAK
+CRBN2Iw/nzuDMwtxB/9n1SpPonWWDw7ApFNpg1VaxrZBieStLlRr9LTOEGigLOn4
+WtiG2XnkxzNa9Yid3H3+f3pkgKLz3syeEt1nbjp368zjIuzVE78ylYOSfBLSeHeE
+RIgGf9YjdEwGYyjYu9SU16ZDYm1IghGPxc2Xlc94NTgCJo6d23a3P9hmdwCYyT2Y
+0cYLvxylPU2geF8GknO+9M5EZ4p62Sf6kJbG/FzDjRhX4/XgB2Tw2VRritSyhZcy
+g0P4Ja+Z5/R125M1f/qzLamArC1K0+nbQvIsyKUSjpXLVXLUiKejyHknvroEC7NC
+433ACcQrTLQD602Tny/AB0F/puv4qJ/x+OPm5k2euQENBFVIfj8BCAC9vAV8VxRD
lEuG8+N1P8MIT8aTKAhVtBZQM/WDWig2nO3TniLrEJeEKSCdgHHUjJd0n3W2HQ6z
IDjQ46PzahiUicPVsf0m7mPClSvQ6EKknTHUwplez49dlZjISRBCuqBzgSa/q4yq
Sl/DviesM6iVKCE6Uf4n+GKlwtXQz6NnDjr6jKWzdwyccB5d7hJb5/TRuQB0R7Qp
qHu1X+texFB+tjsaZSFGj5nkwzO0sHdOhsc9swyo4afhQbk99lEo11+wMiVEdI/H
f2wQtIcf472KV0qVkAQWU48VOve003A6T1XnOtyDtzmvxY9cCuHwuJcFqFtnZNsB
0u8KyWnFkw5VABEBAAGJATwEGAEKACYCGwwWIQQ5JC3jvTS7cFKcA9JN2Iw/nzuD
-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
-=yvet
+MwUCZcSlqQUJFh/B6gAKCRBN2Iw/nzuDM+gcB/9N0Fll2Jm+By0KQ5UDPzQOdaL8
+8U1xe16ybClyZYr8k+t02ve27/66cacEwrept8wXZGhvKmf7SSMcFaqAAjwqw0Kr
+j4ccvAqmMmyAwE+iDQ0Vqagd+rfULtPXred60acpzkFwTx494CiJEnyQSya+iWrW
+TopfLkjO9yukRQCwsHNLP4g63jKoqxhreLAaVoZ1X0/Swyg+jqpgIpglSYgYsUZL
+YuLp4bLJ9tb6GxTNHraJ1/my+iGDZ7bnJlsdYGMzOrmP+gbp2LK7eVClkboFgJU3
+okrDdtYpSxizoT9p3/mnQ1TQKpz2HpFOZakpigU4CXySbEKXoybPt1zphBOo
+=6ldZ
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/delphij.key b/documentation/static/pgpkeys/delphij.key
index 6a4076a317..a3fe4e1e05 100644
--- a/documentation/static/pgpkeys/delphij.key
+++ b/documentation/static/pgpkeys/delphij.key
@@ -1,14 +1,14 @@
-// sh addkey.sh delphij 40797F7C95F4834F ;
+// sh addkey.sh delphij 1103E2EB9759E4C5 ;
[.literal-block-margin]
....
-pub rsa4096/40797F7C95F4834F 2018-09-07 [SC] [expires: 2023-10-31]
- Key fingerprint = 71E3 60E4 D10C 6489 22F3 49D0 4079 7F7C 95F4 834F
+pub ed25519/1103E2EB9759E4C5 2023-09-05 [SC] [expires: 2029-01-01]
+ Key fingerprint = BB24 936A 5735 AB6C 6A97 8DCF 1103 E2EB 9759 E4C5
uid Xin LI <delphij@FreeBSD.org>
uid Xin LI <delphij@gmail.com>
-uid Xin LI <delphij@delphij.net>
uid Xin LI <d@delphij.net>
-sub rsa4096/D185FCB4F534A88B 2018-09-07 [E] [expires: 2023-10-31]
+uid Xin LI <delphij@delphij.net>
+sub cv25519/CB7DF69E70E064C1 2023-09-05 [E]
....
@@ -16,189 +16,74 @@ sub rsa4096/D185FCB4F534A88B 2018-09-07 [E] [expires: 2023-10-31]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-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
-61I0Oyd/
-=Fokf
+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
+95tS71O69ynpdzJ5SCvP/QZSzwI=
+=OwHB
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/des.key b/documentation/static/pgpkeys/des.key
index 39c4b8ca6d..befedd83af 100644
--- a/documentation/static/pgpkeys/des.key
+++ b/documentation/static/pgpkeys/des.key
@@ -2,12 +2,12 @@
[.literal-block-margin]
....
-pub rsa4096/92C843456DA6A66E 2013-09-24 [SC] [expires: 2023-01-01]
+pub rsa4096/92C843456DA6A66E 2013-09-24 [SC] [expires: 2025-01-01]
Key fingerprint = BB57 22E5 C9B6 77D1 73C3 8CFC 92C8 4345 6DA6 A66E
uid Dag-Erling Smørgrav <des@des.no>
uid Dag-Erling Smørgrav <des@freebsd.org>
uid Dag-Erling Smørgrav <des@des.dev>
-sub rsa4096/9B90A1FCF8FBEC80 2013-09-24 [E] [expires: 2023-01-01]
+sub rsa4096/9B90A1FCF8FBEC80 2013-09-24 [E] [expires: 2025-01-01]
....
@@ -228,18 +228,18 @@ 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
-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
+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
@@ -485,18 +485,18 @@ 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
-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
+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
@@ -747,18 +747,18 @@ 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
-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
+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
@@ -805,18 +805,18 @@ R00zFn04TB3rXWK9SxhKfpXOxlD+u9nfeU1Xk4fWdYRFQkMcc9JBW8ABxuj5KCXA
LloKWor3lq9U8QEYLs9Q4GhUBxz3d/it6j/XP/YK7Iek9I2Px3Hym79UmvE3U4NQ
w3yF5c8xQYB0i5Yb0YAqpdubM1RVWv/xUrIP/JU0bYjpuvbdImVcMSTMe5FpRKBw
5fbNsWk4OsTzGS2ZxjbniRimQBCx0Rm80Adaz1hryJ+2r4kCPAQYAQoAJgIbDBYh
-BLtXIuXJtnfRc8OM/JLIQ0VtpqZuBQJh8GnyBQkRb+ivAAoJEJLIQ0VtpqZuUngP
-/3TALYsQZsTtgC3UZo7blj0e+FY/kRB6d8jYu9aKICeGU9pLC8Xnm3fYX1zLNAj1
-WD4vddKJEjcbRRiWbJHtVrmvyBPGZgw1MZNK+zlbjWZv4M6NW/czTjogeem04WNB
-Vzt9P5S+pyheylXeLxxb84P6clz9VYAVEkD1FeNIDdf1zQlqYNzWTaaOEeVMRBLw
-nYe+e0MkZYiXg6Xk1rHM+W8BPfT9lS0okCmMSwQQmCIlI8J+0hW0zJlsw/TZqtq5
-pYndZWFuzPXyWlg88IQHPu7xTx5Vy79Xo2kgI9+QOk1ID9ZABeZSzp1LUQdhoNiY
-waV6oNvr+2LApXHgXcLu8Uaw2xtnxjELJqbZMXzyFY10YnuO7GkDhsxxpEwOGp3b
-eiQdLOKCKZHnBHH1kgeT5qPHgpH6UHL7AwnCMfPS4QqHSf8H6xxx2uAbw//RF5JH
-MdgVNRv0LXaqD5ljT7hxJc9zVRhTdNZY7/Z88pM5ySocxvw+KrNEO4Y1CHfTJrvl
-nSC28eiAahM+1+boohAcxXwA9rDsnqxRBdgIuxJUIYfCf+zoY789s9+mQKmty1oT
-3X1wBGJ95UrQ2E/0PLmP86xecP7pdH4TtL/WtIEnk9nfjHYX+ON44K983woY3ky1
-x3Qq0RjhGTd1Z6FnrBboH3IjT86JqiFhmYdtO69rbJZi
-=++J5
+BLtXIuXJtnfRc8OM/JLIQ0VtpqZuBQJly741BQkVMvhuAAoJEJLIQ0VtpqZur6UQ
+ALtIxbf88iKxLVOBhXCTAO6/UW9gMChWDmUWd+aH9PN7kFF5IMztgE1Q5+s/fOch
+rJWehPNdqokOr7xB8871SjnDiTyGfZGh7SazgLsgtjrH78pfOWjf1GM+rfVL4NV1
+At0R29+9kgiMMxvLU5VP8i3DsociGBhniGvTC3GbMiKw+eCH1JzsmuXVHyLJkxrb
+1OEO/66NlIf+AB7AagGhUP4EyhBcvRVWs0MZ0OpDfRiZiBLw31UfxrvJ/359ipVG
+R7BeeaWsqG0NNKo5P+kV89aJvz64oyxkjI7HU5i7nOAiYF3LOIkzWARbZrQH5c+x
+RkpRP6IQifwaopA7vi3e55rcJlsD3Hud/y8Nhb3UYO/o4RsEPEbMTFTTRyymWYye
+8Z1rm7EfelqTEp4myn3cGEB5zFufZiO9Vf0m8UBPDB6TH/pk4/jpvuP+Ldg0N1ht
+3O/RyvZ+w2E1mSgYYkFAy7DTHjKkYnB+nH0vfD6JbMjuyl5Tsg2ITxiZPRWSX5kz
+TjYqXfg4lqkufYaDUZVwakOFTzG6MKrsHHbzE0NWBozAcX/rYHWY/M40sQi8qGvA
+Srv51+F5H39nv8s+29j0CtvwV6Z4jGjPdigBMMWm24QU2CuQTwzWp1a2BqnOVOKQ
+xIMvAMMFpFhgr/NvxxPaVciKizB4KGpRlkTkHjHGIyWn
+=C1Ld
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/dhw.key b/documentation/static/pgpkeys/dhw.key
index 335b72cb7e..c5f48758df 100644
--- a/documentation/static/pgpkeys/dhw.key
+++ b/documentation/static/pgpkeys/dhw.key
@@ -1,11 +1,11 @@
-// sh addkey.sh dhw B4FBA3DF578231D4 ;
+// sh addkey.sh dhw 628A9896857631E5 ;
[.literal-block-margin]
....
-pub ed25519/B4FBA3DF578231D4 2021-11-24 [SC] [expires: 2023-11-24]
- Key fingerprint = ABD0 ACEF F942 5163 7C1F 3A28 B4FB A3DF 5782 31D4
+pub ed25519/628A9896857631E5 2023-11-24 [SC] [expires: 2025-11-26]
+ Key fingerprint = 932F 3392 6E89 882B 9DDF 8C59 628A 9896 8576 31E5
uid David H. Wolfskill <david@catwhisker.org>
-sub cv25519/A06D4B9DA5B47D0F 2021-11-24 [E] [expires: 2023-11-24]
+sub cv25519/6A84D5BC58182B5A 2023-11-24 [E] [expires: 2025-11-26]
....
@@ -13,16 +13,16 @@ sub cv25519/A06D4B9DA5B47D0F 2021-11-24 [E] [expires: 2023-11-24]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-mDMEYZ5ZqhYJKwYBBAHaRw8BAQdAWc7ZDXt4gQY3A+ShR6z7OeicdENJ8aKV6oMx
-yMBPtKG0KURhdmlkIEguIFdvbGZza2lsbCA8ZGF2aWRAY2F0d2hpc2tlci5vcmc+
-iJYEExYKAD4WIQSr0Kzv+UJRY3wfOii0+6PfV4Ix1AUCYZ5ZqgIbAwUJA8JnAAUL
-CQgHAwUVCgkICwUWAwIBAAIeBQIXgAAKCRC0+6PfV4Ix1JDKAP92sEJPaZzSavk+
-4a7vaznZ5r+XI5ngD/PMkIYL/1qBCgEAtiXf1DHgcvWHDVzxotYvMm8M92bKZDAi
-+gV+nQiDbAm4OARhnlmqEgorBgEEAZdVAQUBAQdAa77j+eENx2NpN+tNiZ5VCeMx
-FSjLum48swyU5d0slCgDAQgHiH4EGBYKACYWIQSr0Kzv+UJRY3wfOii0+6PfV4Ix
-1AUCYZ5ZqgIbDAUJA8JnAAAKCRC0+6PfV4Ix1J1hAQDSPAmWtTI95PqKhL+BgGJH
-cUmwULElrvS/h4Byp2z4cwEA+twRLf40wllYI3lMsDsbdSyuJdNfb5aSbUD+aDwj
-SgY=
-=nw9O
+mDMEZWCRdhYJKwYBBAHaRw8BAQdAdLWoJypmxIYaXXUG8xgP5yWezMSolwW5geVd
+pD36/bS0KURhdmlkIEguIFdvbGZza2lsbCA8ZGF2aWRAY2F0d2hpc2tlci5vcmc+
+iJYEExYKAD4WIQSTLzOSbomIK53fjFliipiWhXYx5QUCZWCRdgIbAwUJA8ZbgAUL
+CQgHAwUVCgkICwUWAwIBAAIeBQIXgAAKCRBiipiWhXYx5Td6AP42DwbSBe6DJLCG
+y5wwRZrPQNg2IXf7TT0jQfP7JxlSdQEAy0viX7M/LpqNZdZoQxyuCarPWWppGip3
+Lt2faxFXUwe4OARlYJF2EgorBgEEAZdVAQUBAQdARjtOzaWm2CQx/kBjYUXWmKLV
+RJTVw9E/SfNK86zjgFgDAQgHiH4EGBYKACYWIQSTLzOSbomIK53fjFliipiWhXYx
+5QUCZWCRdgIbDAUJA8ZbgAAKCRBiipiWhXYx5b/yAQDgITcGCvMaYZjDmrcy9l7y
+JjswkO2aTRlmRL/Mv/5BKQD/b705aiOwLuIQaG7x5g0okOrKMRhk1OK4gLoLfcP0
+Egc=
+=VxRM
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/dinoex.key b/documentation/static/pgpkeys/dinoex.key
index ccae4d9ae6..b77f188570 100644
--- a/documentation/static/pgpkeys/dinoex.key
+++ b/documentation/static/pgpkeys/dinoex.key
@@ -8,11 +8,11 @@ uid Dirk Meyer <dinoex@FreeBSD.org>
uid Dirk Meyer <dirk.meyer@dinoex.sub.org>
uid Dirk Meyer <dirk.meyer@guug.de>
-pub 4096R/DDC60C60090CE918 2017-01-22 [expires: 2023-09-07]
+pub 4096R/DDC60C60090CE918 2017-01-22 [expires: 2026-01-13]
Key fingerprint = 9079 E906 F4C9 2513 B3F3 32B8 DDC6 0C60 090C E918
uid Dirk Meyer <dirk.meyer@dinoex.sub.org>
uid Dirk Meyer <dinoex@FreeBSD.org>
-sub 4096R/FA8CA937327D1787 2017-01-22 [expires: 2023-09-07]
+sub 4096R/FA8CA937327D1787 2017-01-22 [expires: 2026-01-13]
....
[.literal-block-margin]
@@ -32,18 +32,18 @@ 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
-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
+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
@@ -60,18 +60,18 @@ EQIAKwUCXuYLlgWDAeKFAB4aaHR0cDovL3d3dy5jYWNlcnQub3JnL2Nwcy5waHAA
CgkQ0rsNAWXQ/ViaPACfYptKy1CZ9u5Whte27f7ldyiHjPkAoJveA0rXXiCHmc5r
FDegXEjFMIpjtB9EaXJrIE1leWVyIDxkaW5vZXhARnJlZUJTRC5vcmc+iQJUBBMB
CgA+AhsDBQsJCAcDBRUKCQgLBRYDAgEAAh4BAheAFiEEkHnpBvTJJROz8zK43cYM
-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
+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
@@ -97,20 +97,20 @@ g1i0jzJMaJyVJgC0IjK4ICcJyTI6mwUF77rLOByhrUa0oW1deEhX+vHbBgMd8lt2
U1Fa7yfaWaP4Yzj1I46JxVGguX+wqLZHwuNnXP5RsGH5ngvWtThvf4MrIXlomVcj
z+oxoblk3i/N9iXGBZxT4m9hZaWmJJCWy7+u2NiOxT+7FsBk8WVtTmkF9jfVt3Yy
ymUjr6LRwD5qkqjxlZyHhnvFD/Uj5qMtnGmESKusHY+rwfAL7VbILoGncn38VPjl
-ABEBAAGJAjwEGAEKACYCGwwWIQSQeekG9MklE7PzMrjdxgxgCQzpGAUCYTcUmgUJ
-DHRYyAAKCRDdxgxgCQzpGFJwD/9BHxxZ3Jl4KnGWFo0MuTMyv4nz7DVWyo8Nfv8z
-1Do0otX1tt/DlGwrtIbTeRX1zPZ/kEefYO9oWwDBuzSRBXsLQ3Coapue/y4tI0x1
-pDe3r29iKElqmKWMwTmZKu8+qlGx5vsR+bEKbA1DnRBzhSiv/OVPpzejsZ8CwuIm
-MxzU0FnxQ/Vhk5YoSmVo8kPt1ysy8gMUwMm8C3HJX+Q8kooeNElxneLumX3HyJCd
-dgGk6+nMoRGawTfVgH/kjt3NcW+COmLzQKudvjaUHcuNczNnJ7kTROL5GHiikgWY
-1Y/Zb/FX316zPMZdKSEjJkAzwwszwJil944Pw6IQrbwkr4Jewec1am8rYSRhFPPA
-fXhVFAEL+YRir1Rg8Eycympm5SYwIwu5U5ehp499dLnXmRS3jXQGqDndotK4dmA4
-4focwGIXwq/jqj6Wn5LdJTcntr2f7BAZ2qiPzt+S1TqIlqhLm+rH3apG6yHW42xx
-bV/gr71g3YEPtqxkx3HeGT3pIh/7XIjUP2hHrne3ncebEvVZCId9K1xPrBAFEG5A
-jRWmatVvaPmR4NqArh8Mcz+ERdjo7DxhW0rKXbqFbJVqgyia2dc9tGDyuu8YK8mK
-J3kxiIEcF+f7bOswB0aE5kUN9bfBJXnmbrbqGdyqR0XkxmlbcfRuVNIGZsdv5KGE
-f4AgHw==
-=H0yS
+ABEBAAGJAjwEGAEKACYCGwwWIQSQeekG9MklE7PzMrjdxgxgCQzpGAUCZaRCOQUJ
+EOGGZwAKCRDdxgxgCQzpGOarEACQMHZB266nhPlnQe+mQHZi3zf0EP2edp2Z4aW3
+lfAtPy617TI0ExmGAJebq58djsI8VbuivYSoIz1JWS18U4/m/nec9OimyQ8bs+hX
+/zuWJ9VRVfq6asM+NKajQnz9URRJqmoXsbxSPbH+rZkKrIwFQxXDClGKbHrN07jT
+485AUjGWFVwik0kxkQahNY/CwUTjWA6JcAtjxJo6zhLOxUKf8/6sodikQNFUkHNs
+lD18sNRuQeSgIUEUTslwmNJcCTSJSVkk9vYTtM5u8nVQE0WLbenrYaYgy7olBnRy
+rFY8Ffy7RGcBgB4fS51MBOcgOHX0smwg2nmX9K2PgGdjCjSkLJUwr/17/bLuMbjk
++L3P5KlD0fyA8ldMDmc+i9s4mJIvqnjnf+V/ygEVa/t/hDSfTrhc5zgoFj1W+Vhb
+lWrsiM/quTgyWE1Knxwghf/W9CQzuTc+JU9xwzcgY/Xf5JNhVKRvUaBmryEdevz/
+zY50M59VWFZvRwzyIi4ddcitzgmCxS6Ek+bm+4jfQBd/t6CW6CvUyJ0hNXykR3Gp
+lBGxLaqMu7098cnuBZI090W9FVeHGabcXD6K6NfDv/NB61oNFG4IvyPBzeYwWVMp
+lSXnO2CJs6RNRF52wWJ4cgeLZWvnIXw2Zq8dAWXgWC3GYBHPtWp/V+sf0pXHRMge
+Upi98g==
+=Gr32
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/dsl.key b/documentation/static/pgpkeys/dsl.key
new file mode 100644
index 0000000000..7896189410
--- /dev/null
+++ b/documentation/static/pgpkeys/dsl.key
@@ -0,0 +1,80 @@
+// sh addkey.sh dsl CEDA4464564B041D ;
+
+[.literal-block-margin]
+....
+pub rsa4096/CEDA4464564B041D 2022-07-19 [SC] [expires: 2025-07-18]
+ Key fingerprint = DDCB E700 A176 E878 45DF D29E CEDA 4464 564B 041D
+uid Dmitry Salychev <dsl@FreeBSD.org>
+uid Dmitry Salychev <dsl@mcusim.org>
+sub rsa4096/CE8AB82FF4A34E5A 2022-07-19 [E] [expires: 2025-07-18]
+
+....
+
+[.literal-block-margin]
+....
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+/dyAMabzMBYyJoRW+yRON0ZBAcgU
+=jLqz
+-----END PGP PUBLIC KEY BLOCK-----
+....
diff --git a/documentation/static/pgpkeys/dumbbell.key b/documentation/static/pgpkeys/dumbbell.key
new file mode 100644
index 0000000000..bfee58b604
--- /dev/null
+++ b/documentation/static/pgpkeys/dumbbell.key
@@ -0,0 +1,421 @@
+// sh addkey.sh dumbbell D938F9C86816981C ;
+
+[.literal-block-margin]
+....
+pub rsa4096/D938F9C86816981C 2014-01-14 [SC] [expires: 2033-09-20]
+ Key fingerprint = D72F 4B84 7098 9244 20E6 2B93 D938 F9C8 6816 981C
+uid Jean-Sébastien Pédron <jean-sebastien.pedron@dumbbell.fr>
+uid Jean-Sébastien Pédron <dumbbell@FreeBSD.org>
+uid Jean-Sébastien Pédron <jean-sebastien@rabbitmq.com>
+sub rsa4096/A185D28321B02B03 2014-01-14 [E] [expires: 2033-09-20]
+ Key fingerprint = FDC4 0948 8453 5198 3EA1 5F56 A185 D283 21B0 2B03
+sub rsa4096/39E99761A5FD94CC 2014-01-14 [S] [expires: 2033-09-20]
+ Key fingerprint = 6708 7FD1 AEAE 0E12 DBC6 A6F0 39E9 9761 A5FD 94CC
+
+....
+
+[.literal-block-margin]
+....
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+=e92F
+-----END PGP PUBLIC KEY BLOCK-----
+....
diff --git a/documentation/static/pgpkeys/dutra.key b/documentation/static/pgpkeys/dutra.key
new file mode 100644
index 0000000000..d44a428053
--- /dev/null
+++ b/documentation/static/pgpkeys/dutra.key
@@ -0,0 +1,66 @@
+// sh addkey.sh dutra F6E554A5779BECF9 ;
+
+[.literal-block-margin]
+....
+pub rsa4096/F6E554A5779BECF9 2024-01-18 [SC] [expires: 2027-01-17]
+ Key fingerprint = BE72 4AAB D326 4135 8D95 9E05 F6E5 54A5 779B ECF9
+uid Gabriel M. Dutra <dutra@freebsd.org>
+sub rsa4096/FDF2F503C4571491 2024-01-18 [E] [expires: 2027-01-17]
+
+....
+
+[.literal-block-margin]
+....
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+f5a/neLn/WTCSeJ1sHrS
+=kIkn
+-----END PGP PUBLIC KEY BLOCK-----
+....
diff --git a/documentation/static/pgpkeys/ebrandi.key b/documentation/static/pgpkeys/ebrandi.key
index 7ffca4ffad..33429a5f51 100644
--- a/documentation/static/pgpkeys/ebrandi.key
+++ b/documentation/static/pgpkeys/ebrandi.key
@@ -1,244 +1,53 @@
-// sh addkey.sh ebrandi FFD3035B;
+// sh addkey.sh ebrandi 604D961A8EC70166 ;
[.literal-block-margin]
....
-pub 3072R/FFD3035B 2012-11-26 [expires: 2017-11-25]
- Key fingerprint = 443B 5363 564F 06C3 EA54 9482 209E 9B54 FFD3 035B
-uid Edson Brandi <ebrandi@FreeBSD.org>
-uid Edson Brandi <ebrandi@fugspbr.org>
-uid Edson Brandi <ebrandi@ebrandi.eti.br>
-uid Edson Brandi <edson.brandi@gmail.com>
-uid Edson Brandi <ebrandi@primeirospassos.org>
-uid Edson Brandi <ebrandi@gmail.com>
-uid Edson Brandi <ebrandi@fug.com.br>
-uid Edson Brandi <contato@edsonbrandi.com>
-uid Edson Brandi (Born 1977-08-14 in S. S. DA GRAMA, SP - Brazil)
-sub 3072R/A34B8175 2012-11-26 [expires: 2013-11-26]
-sub 3072R/4EB0E0EA 2012-11-26 [expires: 2013-11-26]
-sub 3072R/89917E73 2012-11-26 [expires: 2013-11-26]
+pub rsa2048/604D961A8EC70166 2023-04-18 [SC] [expires: 2026-04-17]
+ Key fingerprint = 0F45 A17A B562 3E12 B4FC 0F1A 604D 961A 8EC7 0166
+uid Edson Brandi <ebrandi@FreeBSD.Org>
+sub rsa2048/1D80FEEF75CB31EC 2023-04-18 [E] [expires: 2026-04-17]
+
....
[.literal-block-margin]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-Comment: GPGTools - http://gpgtools.org
-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
-=aO2j
+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
+=/z37
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/eduardo.key b/documentation/static/pgpkeys/eduardo.key
index 483b6ec1d2..a0cd6fa2c3 100644
--- a/documentation/static/pgpkeys/eduardo.key
+++ b/documentation/static/pgpkeys/eduardo.key
@@ -4,6 +4,7 @@
....
pub rsa2048/83E906AB840C723A 2021-01-29 [SC] [expires: 2024-01-29]
Key fingerprint = 53EF EC13 6388 D018 3F12 6CF6 83E9 06AB 840C 723A
+uid Nuno Teixeira <eduardo@FreeBSD.org>
uid Nuno Eduardo Simões Leal Teixeira <ed.arrakis@gmail.com>
sub rsa2048/C25E09130A2D621D 2021-01-29 [E] [expires: 2024-01-29]
@@ -27,19 +28,27 @@ J1Nnp4ZDR0KJsdhV8H6p2YbfuK+mIk7Fss7EU9KlNeiDVyxBA7G0FKzMdk3fun25
sPyf2LuOy92PaPtrQVLVrLoXyc9Bw0eZr3VUQsX/nL4nTblOyBW8EYFcuefeBelG
Q0k+0AQuKmceX83wxckSOgqCDPgIbY81jg6sQeTmmNdfw9N4Jaxi3Pc22ch6Jms5
bvzi20hnboYs9dVxkbqEyWVKiMBXvrHAmbZKnpMAtn2A7/ytHAPhw4UlMnep6O3P
-09y5AQ0EYBPF/AEIAM4DyZl1eBL5xq+wWYMHnPMjFV9P4ncZSvOzo1kXguq+y8PU
-F35OoF7c0pv/3A7eeNO66ix31shzS5Wz1xNm8jn+BBVsvPYXYSYavsUv4wnbBH4X
-S/5T130tRysYLjFhPLv++FX0E3wkm8/vFiC/3h+0kIEDhS5yKqxvBTug5NX1f2/9
-JAEL0Ap8Bhlr7q8V883AinjWWWSHwE0k61x1zsp4X3ZLKLpSmCoiiq1D6w/5+fJ9
-vT7unOWv/HNHJ0cOsSYTWt/Iq1i+oujGz1Tf07qa08c2dvtxOc95vLP/FM6Eg0XI
-Y74OLXRc0Ou/03lEBAbJc/4qhhhUsZ5ewWqr4NsAEQEAAYkBPAQYAQoAJhYhBFPv
-7BNjiNAYPxJs9oPpBquEDHI6BQJgE8X8AhsMBQkFo5qAAAoJEIPpBquEDHI6QNMH
-/3FKADYIayAOfG1ytvzSG6nPRsmdYChjstIh0KeReDMgCgojjDyUKVEk9gvQqA19
-dNOWPU/aSz8ERFMONwRbzOXATGlMnI9tClwGFpqI+eTybuTnAJP1OLI1doM4FngS
-W366JPjDazUEygAIpq7mlskv7fFOh8jsLtlAt87bYtevz1PQBH9Vm3FTQ4fGavf0
-1lPqGzti8u43iU9XywrAeL2m3gSy0WGqHyl21VwKxJzOl/Vsd53NQGy8nnGYdqNm
-nkB8XsueDRyW5JvslIhWPIO3eYxHdMUpOMmMqmkq7+5Cvm+Ub8vkAerwf5wJ6nAY
-cMSgsrnxF32dwVRy60KM9IY=
-=+ryt
+09y0I051bm8gVGVpeGVpcmEgPGVkdWFyZG9ARnJlZUJTRC5vcmc+iQFUBBMBCgA+
+FiEEU+/sE2OI0Bg/Emz2g+kGq4QMcjoFAmPfs28CGwMFCQWjmoAFCwkIBwMFFQoJ
+CAsFFgMCAQACHgUCF4AACgkQg+kGq4QMcjo4YAgAuBnEmeLpsv/gQVLj8Zo9MEMy
+97mL5wG4xXcFejJKHXMaP3CHNatl52WdrQx2CL+HaWaDLEyFQ+Yiwkh/TcabTCgD
+ZAom7ldwJFTvpoD/GHbsCgAx9O5b4FADoGoFeSDL6r4218MVix2YiK9mb+mqb0IO
+sEciIuz09zp3H23JlE9ysSMVAOXMMDE6ARsZpY59IfhFjGE689q/wFr2MP8Ql5p7
+2ZZfY09HqtLSoaKoNy1+ClqWDvndCWR6gyPiDx94qIqO3TLC/6VSFlhhX58eRu/d
+84XOVSUB8cOzYcFvWIxxtLZdTkVi8OTIc6rbXDrraYgIQjCAX7954Bmjs2wD9rkB
+DQRgE8X8AQgAzgPJmXV4EvnGr7BZgwec8yMVX0/idxlK87OjWReC6r7Lw9QXfk6g
+XtzSm//cDt5407rqLHfWyHNLlbPXE2byOf4EFWy89hdhJhq+xS/jCdsEfhdL/lPX
+fS1HKxguMWE8u/74VfQTfCSbz+8WIL/eH7SQgQOFLnIqrG8FO6Dk1fV/b/0kAQvQ
+CnwGGWvurxXzzcCKeNZZZIfATSTrXHXOynhfdksoulKYKiKKrUPrD/n58n29Pu6c
+5a/8c0cnRw6xJhNa38irWL6i6MbPVN/TuprTxzZ2+3E5z3m8s/8UzoSDRchjvg4t
+dFzQ67/TeUQEBslz/iqGGFSxnl7Baqvg2wARAQABiQE8BBgBCgAmFiEEU+/sE2OI
+0Bg/Emz2g+kGq4QMcjoFAmATxfwCGwwFCQWjmoAACgkQg+kGq4QMcjpA0wf/cUoA
+NghrIA58bXK2/NIbqc9GyZ1gKGOy0iHQp5F4MyAKCiOMPJQpUST2C9CoDX1005Y9
+T9pLPwREUw43BFvM5cBMaUycj20KXAYWmoj55PJu5OcAk/U4sjV2gzgWeBJbfrok
++MNrNQTKAAimruaWyS/t8U6HyOwu2UC3ztti16/PU9AEf1WbcVNDh8Zq9/TWU+ob
+O2Ly7jeJT1fLCsB4vabeBLLRYaofKXbVXArEnM6X9Wx3nc1AbLyecZh2o2aeQHxe
+y54NHJbkm+yUiFY8g7d5jEd0xSk4yYyqaSrv7kK+b5Rvy+QB6vB/nAnqcBhwxKCy
+ufEXfZ3BVHLrQoz0hg==
+=vAkd
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/ehaupt.key b/documentation/static/pgpkeys/ehaupt.key
index bc47e58078..09bf7ffd41 100644
--- a/documentation/static/pgpkeys/ehaupt.key
+++ b/documentation/static/pgpkeys/ehaupt.key
@@ -1,11 +1,11 @@
-// sh addkey.sh ehaupt 104E62C545316E89 ;
+// sh addkey.sh ehaupt 57F0C6A16B8C57F4 ;
[.literal-block-margin]
....
-pub rsa2048/104E62C545316E89 2016-01-30 [SC] [expires: 2024-02-05]
- Key fingerprint = D9F1 1649 6964 99EA ADBF D1C4 104E 62C5 4531 6E89
+pub rsa4096/57F0C6A16B8C57F4 2024-02-23 [SC] [expires: 2027-02-22]
+ Key fingerprint = C3AC 5946 B567 0FE6 5CF6 F50C 57F0 C6A1 6B8C 57F4
uid Emanuel Haupt <ehaupt@FreeBSD.org>
-sub rsa2048/AB8EF8AD753A7017 2016-01-30 [E] [expires: 2024-02-05]
+sub rsa4096/D2ED7F2EE1223EE7 2024-02-23 [E] [expires: 2027-02-22]
....
@@ -13,39 +13,54 @@ sub rsa2048/AB8EF8AD753A7017 2016-01-30 [E] [expires: 2024-02-05]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-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
-xdKz35SzJ/Q+XblX9hVMvpyrzojHkxP3Hak=
-=bm+j
+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
+ZRD/U0xIUgl4RyxoOg==
+=VO+m
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/erj.key b/documentation/static/pgpkeys/erj.key
index babbebd1b6..a98dfdaa85 100644
--- a/documentation/static/pgpkeys/erj.key
+++ b/documentation/static/pgpkeys/erj.key
@@ -2,14 +2,14 @@
[.literal-block-margin]
....
-pub rsa4096/96F0C6FD61E05DE3 2015-01-28 [SC] [expires: 2023-06-23]
+pub rsa4096/96F0C6FD61E05DE3 2015-01-28 [SC] [expires: 2025-07-18]
Key fingerprint = C5FA EC74 96D2 C61B C548 FA37 96F0 C6FD 61E0 5DE3
uid Eric Joyner <erj@erj.cc>
uid Eric Joyner <eric.joyner@intel.com>
uid Eric Joyner <erj@freebsd.org>
uid Eric Joyner <ricera10@gmail.com>
uid [jpeg image of size 5419]
-sub rsa4096/D2427EB089BCF21B 2015-01-28 [E] [expires: 2023-06-23]
+sub rsa4096/D2427EB089BCF21B 2015-01-28 [E] [expires: 2025-07-18]
....
@@ -29,58 +29,58 @@ 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
-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
+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
-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
+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
-+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
++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
-+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
++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
@@ -195,18 +195,18 @@ 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
-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
+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
@@ -218,18 +218,18 @@ DbqPPjYGttvkwyQInt6Bld02n0qZrQuW0CSbUvlk4kNuUSWgvwadwN2GaVJjd9jm
rNeLTEpRKJ2bgudFGvyv3Wr1ZvLTQxusEJMwfHa264Ow9gDV38NIiDnSl6pFY0IG
hekfqH+6eeyRDR0oBOU2xUA6k2XCATkva5LRWnp5FvqqQp3G1AYCOJbsj6bWzpUz
idMrG5BUswOi/HJnuqa6uHthABEBAAGJAjwEGAEKACYCGwwWIQTF+ux0ltLGG8VI
-+jeW8Mb9YeBd4wUCYNOp1gUJD8ytTwAKCRCW8Mb9YeBd46PUD/9qjUniWcqc7oOd
-eHec1rNc6Jg5mNYmcJf4RVhjM0iVTld0g+dr0Yt8JAUe3xWPeRhjVWJBbeXzmUWO
-iuRaDm3E8FQj1BxnYcs8Tva8qjSxhfMnBcyqCHhNI5Lcw91aqSXbn/q8U8x3mwAa
-8QEYKBKwq7DuM/xW14Xl6Njz2drc/ISfos56Hh6nDlI98CtPm/vqX2SALEHGu4Sg
-t87QqlZtilfzfI7yJdfky1j8tH7+WzkbknUQhpCSLuItTgdqyVuPexOjwcm/gVrK
-3LeS8aVlyTT2ThPSJASgkosXvK5vGdUL4ioKhaMhLsNElg00/a7XrhP2nCNuq+vR
-lmZElnBXLh1RncYeSmARCIdhOAgWbZhZrQuhAQgadXiebDHrp5ICfpM3VFZ1FopI
-lnCubyKoy6Y1T4lm+gv2AWfzXUexWkjo9NZZUKOTOB+2HioHoq39Vb+XA0Og3EQX
-Kl3Hw3XcSfbwcBwpGruxnkIfgcV2zj4RXHhLkOGcZDiNEBjAqtYLJUbeKqHsC6xN
-PH5lEmsyIPHPPzS6sDWrG7RtDIt2xysZtotumcddB5YbQQBZohBuOXsyF9xpMZO3
-CEgw9t7BPCgwEWtnPYdrLkI7XENKAci/GwGIZskz4wzIbVe5Ue3rYD6w0FT7Jk8i
-0rEa+2dJMGRAqgwdm/XMQVFfezFTXA==
-=UdOH
++jeW8Mb9YeBd4wUCZLhj1gUJE7FnTwAKCRCW8Mb9YeBd473FD/9i2pE6SPC3SVyA
+U2OiKG/aeBS61mFd62yNeyUEz0/a9ZWxdgIVHdDRptm7QpUY+/obRY2mgr/f2PF1
+5Uc1BCKinHVk+Ah/YIGOQhZVaGP5JT0NMtU6mA+CyAzEREFhb5PTtPFg1vh8Eg9j
+bQH6e5jxhXWkpS2HVl/U2JvvjyVn/R/y1EdOWlHS7OTkIg8Uv55aj/2vN3DBJLYo
+37BfiIlNG2+D36rtJtvSjDwboI0sys2LHVatIPTlfU0bukPVENYp7KhH2UuCLP05
+iHI+hP9JjviBdXs+Iv4Go/qtSeuhaFaTrbgjCNTHHiDY+uK552m0xI3BD9TyoHRR
+YNqlaiybNlsRUABxPsEMctBttPYeN4S50I9e25aW3bg3CQ+DdFzFl0f4bqGkE1Ov
+4K1H1n4g0FYUvl5Z87lVByP9tuBxW5+0An3hpQ6yLqoTKpoGFqQVwi1R2otsTYht
+h7pisb0w6HvzoOAPDR/q3hH0G8tv13mXDQJ4NVdPhjP3ztGnl6N05NphbiaFYYKk
+VS5KWkjH6fXwrt7sbjqLwnuVzkdpUJpIKDQ3p+YWTPwEHn+EOi2v9koVxuyGfMvK
+ApKoDhcni3S+bL61aLI+cgZXBj4r+tPbGCxfUiS4SPhdHadY0nuVIcFmwQbRhfVG
+ZeAtsroF+iA0YnkSlKboZ7r+zgJbvA==
+=hzLa
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/eugen.key b/documentation/static/pgpkeys/eugen.key
index e0e551de87..86eb365cef 100644
--- a/documentation/static/pgpkeys/eugen.key
+++ b/documentation/static/pgpkeys/eugen.key
@@ -1,12 +1,11 @@
-// sh addkey.sh eugen 8455C3737D4754CA ;
+// sh addkey.sh eugen 84DEBC5137FDE423 ;
[.literal-block-margin]
....
-pub rsa2048/8455C3737D4754CA 2017-03-07 [SC] [expires: 2023-02-16]
- Key fingerprint = 372B 1367 8667 4CDB BF9C F66E 8455 C373 7D47 54CA
+pub rsa2048/84DEBC5137FDE423 2023-02-15 [SC] [expires: 2026-02-14]
+ Key fingerprint = 8A3B 95FD 29A0 B868 9AD0 A693 84DE BC51 37FD E423
uid Eugene Grosbein <eugen@grosbein.net>
-sub rsa2048/B9B1FD511F8AE904 2017-03-07 [E] [expires: 2023-02-16]
-sub rsa2048/B0CD1AF226988B28 2017-03-07 [S] [expires: 2023-02-16]
+sub rsa2048/86B39E13076279C1 2023-02-15 [E] [expires: 2026-02-14]
....
@@ -14,54 +13,32 @@ sub rsa2048/B0CD1AF226988B28 2017-03-07 [S] [expires: 2023-02-16]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-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
-=T+Ei
+mQENBGPtBqYBCAD9qCvZMD8vhQwhbdOK+P26sP0F7T/K3Wa6lojgzjlWLW6FaIVm
+hNGPxwFS1j0D87S+pZ8NinCWd7UibyXrt3Iepi0NEQr4bl934Nx9lY8l+LKfkyDV
+YFev6w0jl+KpDvWxUrTMxulip98V5uW2UcP+Dai3puKvWgd5P0uSo3J2JVUzhuVS
+UUbn4OS60tjOOu075X7E1fu6klxpBktupMZAJ5DP/FA/X5K4eQMkgic55quhcQtY
+/mzD4CibDJQ1VgDM/kd7yXVYTl5Vg+eGhr1wjPFXGc65RKsIA8pp8ArGWPgfJqy5
+FWeyylUKWo4SbgrNyPhuuev4pl9orHdXqBifABEBAAG0JEV1Z2VuZSBHcm9zYmVp
+biA8ZXVnZW5AZ3Jvc2JlaW4ubmV0PokBVAQTAQoAPhYhBIo7lf0poLhomtCmk4Te
+vFE3/eQjBQJj7QamAhsDBQkFo5qABQsJCAcDBRUKCQgLBRYDAgEAAh4FAheAAAoJ
+EITevFE3/eQjVFgIAJWhzgFExexltQWnmeGMlQ8LrN/CJKiUE89lFz1Byy7CTC+G
+5vCDNRwzK5bFqM5qOXBHxsiakQQcqq8ofh9Rn9adp294+MkIMH3u6w8kz0o+Z+UW
+QYs7lcbM7Q2t9HuVQAqfMcaRMvhllCRLiy074ihA3gNdOABriXjS92VGYb4gMfU6
+zXK0IZYn298FP0tQtWpnJUZthzeXKDxtgffaPEBE8xTTkcoY4cRPtCM+u2vSRDeg
+u5u33bW6t/+m7jTciBBo3V9BaTjU31LdfPHoDxSz7AmcbriVQRs/pfwo2czd2JRF
+/b+Iii4LPNFmPu6Yo4+eNPQzvQaUrducdxwAFLC5AQ0EY+0GpgEIANlQHbLEeZmr
+oFbirnSE9v/KaleKAquSdW0GTvKsexLuPLH5l33AApsDpdBpKlr0gq2cwMerFtkZ
+gJn+NAqvrviYBSd/WGOoDMY3Hwabg2iETGxKzG/uKCaFbdnRMegV1mjiCk7FPsK2
+MDnMgpb0mdlMhtrChdqZC3Ic0VidNDNK6QbAScOiHNLrGNhupmVQZtK1Shn+hAz2
+W3/limZNgBmzGyq51PAfrtOWira4zdRyUJbrKx2+hdq8THpmBZJ7XasmDOi3XsRd
+xfUyV/Kqxj4T/jxdhK4tU19tk+DI1x/m2fj+8La/oqU448DFFKqBi3OlES49iRVU
+lMK0F9+DQFMAEQEAAYkBPAQYAQoAJhYhBIo7lf0poLhomtCmk4TevFE3/eQjBQJj
+7QamAhsMBQkFo5qAAAoJEITevFE3/eQj0AIIAOB7yckMorop0tAnhElQhRYOJPU2
+L1ntvtucQ56kk/7aWjPjSv7JFphMw7NaYXokstEgvFGbNQGmsdW2WdxiNAiFi+IL
+mw1mpTxHdJ+4gm5GChHTolz0d9B8YsL9t+Y+D/VhknxauCGePtwKa8q49+29QFrF
+Oykwy08Kx1jhpOOrDPUJvTxveWcSlDlGm9jQReiWVqtnI59X1TdQgl4KlktKbsFV
+NFEsFdbThh0Jdy8InDFqnRoMUpSkX0EEgBf7MVkfiaYjMxQ7gFsGU8iuRyWvTY7i
+4s4rzRdqxe6iplTihAjQGZrAGYYnolQDsx/HYruZq3JJ2F4kmLLgUxfJ/Gc=
+=FZ33
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/farrokhi.key b/documentation/static/pgpkeys/farrokhi.key
index 1285d4bb4f..ca3468501a 100644
--- a/documentation/static/pgpkeys/farrokhi.key
+++ b/documentation/static/pgpkeys/farrokhi.key
@@ -1,13 +1,17 @@
-// sh addkey.sh farrokhi 73586D509275D6DE ;
+// sh addkey.sh farrokhi 99E95EA4FCE567A8 ;
[.literal-block-margin]
....
-pub rsa4096/73586D509275D6DE 2019-06-18 [SC] [expires: 2024-02-27]
- Key fingerprint = C5DA B533 A7C0 F0DE F19B D580 7358 6D50 9275 D6DE
+pub rsa4096/99E95EA4FCE567A8 2020-04-16 [C]
+ Key fingerprint = 13FD 0368 0931 ECD2 0D7E F23A 99E9 5EA4 FCE5 67A8
uid Babak Farrokhi <babak@farrokhi.net>
-uid Babak Farrokhi <farrokhi@imenpardis.com>
uid Babak Farrokhi <farrokhi@FreeBSD.org>
-sub rsa4096/13B9FE6CB930A384 2019-06-18 [E] [expires: 2024-02-27]
+sub rsa4096/DCBF25301C0F5FD8 2020-04-16 [S] [expires: 2026-05-16]
+ Key fingerprint = D480 1958 CD82 316E 5BD9 C426 DCBF 2530 1C0F 5FD8
+sub rsa4096/941DB42EA4671245 2020-04-16 [E] [expires: 2026-05-16]
+ Key fingerprint = B9E0 7AA8 DA88 4FC6 DE61 C1F3 941D B42E A467 1245
+sub rsa4096/280703E1C3D296FA 2020-04-16 [A] [expires: 2026-05-16]
+ Key fingerprint = 2073 ED3B 0686 40DD 10FA FDFA 2807 03E1 C3D2 96FA
....
@@ -15,177 +19,156 @@ sub rsa4096/13B9FE6CB930A384 2019-06-18 [E] [expires: 2024-02-27]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-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
-2uONHLk=
-=ezR6
+mQINBF6Yo+YBEADIFO9COuwSULONbgNMgnQv5sjRuYv6kEDEcz9uWaqKk2PMMqe0
+OpysNwtQNxMDJTV1LJ0nQEuAGoaVGzwx3FVfnbU+f3Oz3kWQLte3dA8g2bWDDpOF
+kpDu3waQP7etDCgmt/A3Q1xOEsMeYxHcLdF3Jw/4v+dZkNe5CnpgjpYFibeJmtXr
+nJvFqvBD5d3jcCBLMnohgd308PRTh7O+Z1dxWLSVO7Fn+qql2Tb/uYFemtKmOhSl
+KUk9P3bTY3NcvbtfabXjDk00WqPy1s23n1TtYMh6kSycblM3kSo2GC/4AjhBMaUQ
+nS2qbY4I5Rs7tIoJtcHGFRbJ9atcexyT8wD/QYX/Nt+aJ8f+4jV8LFNoHj3yUf9q
+oJoI78yf6fQdSPVDtU4sPGVtTC0i3DdY9Iz+9mXBHv0IrSt0JPy++W05Gp3wu09C
+W1hsUT39s89UPjHX8t8qOt+K30YZSfm6ZwRwe60rf+FGkZowGfTNfKEVsmNbB7Pe
+/fwFZ7tENnRVFLVPudOX5ddpQ7yhgjB9Vs8TZxt1p24/5EdzcOLdwzl8A44vKFCd
+EMiYcZXoEwIetRuuAl+QVzG/EmmQ7Ub0NKpxCjoEHjCv4Ct+qKjtkDx8EnpLvtGH
+OcevbrGdKUNAgcU4yHCJmM3DDO22OG/vW84kMxYGZkh1dwLy44418aNbxQARAQAB
+tCNCYWJhayBGYXJyb2toaSA8YmFiYWtAZmFycm9raGkubmV0PokDZwQTAQoBUQIb
+AQULCQgHAwUVCgkICwUWAwIBAAIeAQIXgAIZARYhBBP9A2gJMezSDX7yOpnpXqT8
+5WeoBQJkJaI7UBSAAAAAABAAN3Byb29mQGFyaWFkbmUuaWRodHRwczovL3R3aXR0
+ZXIuY29tL2ZhcnJva2hpL3N0YXR1cy8xNjQxNDUzMTQxNTg0Njc0ODE5MhSAAAAA
+ABAAGXByb29mQGFyaWFkbmUuaWRkbnM6ZmFycm9raGkubmV0P3R5cGU9VFhUNhSA
+AAAAABAAHXByb29mQGFyaWFkbmUuaWRodHRwczovL3VuaXguZmFtaWx5L0BmYXJy
+b2toaVoUgAAAAAAQAEFwcm9vZkBhcmlhZG5lLmlkaHR0cHM6Ly9naXN0LmdpdGh1
+Yi5jb20vZmFycm9raGkvMGQ3NjlkNTk4ZWYwMzQxNmQ5MWI5ZGVjOTVhYzE4OWQA
+CgkQmelepPzlZ6i0dxAAuhXSKOlygFQIpFm9C6cU4dHD/bXBDzHmvM2igOU7RO30
+NjYeA22HruU+M/N5ShKAn3mTWmvWEIbK5Q7wqXV6DFIwk3h5FbJ+JcY+O57EP7Rg
++aAQlNO1Sw0zi/UeTLfUv4s7cEZDrmZJnkicPuHXJ76JmmgpSlaQLq0VcJ3r4I8g
+yPLdtDNTFWLh/dca6NlL4r9R/eB9w/BaKRxtwua1Ts7zs91UqWGzlrDBH9Zd7lW9
+cPuU7W989v+7kuwxFxamQ8uVnMJm1OZ7LbQmB+2LUH75poF0DZAH6QNldQZ7TyK/
+dj7imveuQUXMsdKhno6sKg5O3fgwqJwl3PwkLR73efrJHSLDWwx4VP4sgDXtD38Y
+gi6JY2vXi14GvHo6gV5uvhjQ+5q6rekkqPO2FBeCMZZwFyCqjR9Gu3jotH1nbssu
+kUihFyJ2leyB2qAb1t+FlzIgQM9AvqI8AWXO+CR/LD0d//SQQQ/Wvk9+aoLeSvMp
+6Cn4OQoZsVrqRq89xnmZUA/DJR+P6Cc29D2Wc6+3j+bx7XrrmmhoMy3etnckYk0V
+VjSgjqCbhG7FPpYTGHiaJ9wWeHlaCYWjunQWTLqDUNv4tqZ5GZIFW92+mPx94012
+/Nu1JFC8Y1sSSsRWGMPqHBZj4joSFIqrc8HDQ+CvgJ8YCXPYRSxioS+ebD1R2uGJ
+AjMEEAEKAB0WIQTwgV+IYb8t6vJh6cFrJnrYXWMumgUCXpikSgAKCRBrJnrYXWMu
+mjVKD/9BUb34BkmFxTJO81lX5333WH9lR9k8P9tPRlQ/vQUxRAzeuNN9HTjoDFU7
+t14J5nVpNzSiPTvK36iQwzsGufVEEbOxMH+bfParoCszByH0DrReB4RUHLaZCOP0
+U+okzMlPNaVNKXPcun2emhUa0TGTnTrxwpd0OkAypi4G3ydLHuBnmQ7CT9/Iqqov
+s7HrdrYahR0HhBp5Q5FWYcKmd/QI/jpQ6+0kacZZTJvPcyoAlBQupvXWyk+9I2y9
+npIOoo/jtr83Bzryj1/jY745IaDC0KdvqnkTBNuaKuDh5FY8k7qJkmu33FARzM2z
+DeqN8+VSN527HOojRMnXT+vzgCKrHzTni6ohWLV3dF+Pw94qZWlB4LmVFMQl9dMU
+Z8mtbCXh9X1wg5edKIAdQOz/piTkDneQvzosB8koyceJaurRG6cGQjP1t2NswOHI
+k/HjQyWhxqlEhpDIB6MQP8/xKPSe/n451ndczjT/W1fE6/aB88coMEmY/eBOmPf/
+OmJi21uaFmqLhMEtTIjiIUjJSjfsPTS5Dju4BN2n2cfEuihsHMamCAhDpnPvZBWS
+NEqC2Dpp6UR2ainOaa1faVVZV9hfoK4HC0v1ohRsLtQfHucsZhCjZz41JuPE78hc
+pJzIZcopI3SDuLujhA6Jc0wGw4SLR9vCnhzMKIotK5lJFa8N/IkCMwQQAQoAHRYh
+BMXatTOnwPDe8ZvVgHNYbVCSddbeBQJemKRgAAoJEHNYbVCSddbedl0P/A5HXqgE
+Q8zBAWaYPjm1+44En5e78yAPbCvq8Z4AKLxnfezdqMcifZn3IaDpXXmcm9DrVfqY
+1ra+16JdwmPPie0YHdvbbthZTZ8IFiwZPBOIWfa05TkUHobPo1AfwiGea26xvCds
+KIElHXBm+59UApvEWkgReNg21I343hYtCMiTf3g68s0FZtow1ngT8sFGNoH/Z+T1
+/yjukOcStaQGbqhUL7uD75NbeYKYX9GYmX+1lm8dwC9QVJ2mSwBNSCaxfz4awl21
+H/r4uU464iG43XV4TqL+qKegOcb9PfFd0tIWia+1AK5n3XBcLd3wiP8mniAp9EQg
+8b8M2VCkJoIFasFA5c28X+y3Zj/Ww0mkt+fsKfeBdQp8RyuqDw5onTu9mnEkTFZ0
+u7E7mwBcZgb7fdOIgJebBc0FY7Yw/CxN/XWOrV9T0FE610zZqsL2UAwBnR3fAD8M
+LS/rcFKwN+6DSfgT/GeQl9+t/8VWaWuN21VL0/QEpeIWG4aXFjTDoCwZBcfcrgAc
+B5/5iOjraRKwWv5VYkPit4J0Q+6l7ED4WZPCBkPuKzCTbOZ5IYERScNUYz7iHGL+
+JefthBmwK/LoD/ADRk82xARAFa7qRi6a8Pd3Oxh6ntzpxh7n9yKG7lXcC6Bp6Ig/
+XOs+H+0INGTIwICms6/Q8a2gE/l5gBYAQAMVtCVCYWJhayBGYXJyb2toaSA8ZmFy
+cm9raGlARnJlZUJTRC5vcmc+iQJOBBMBCgA4AhsBBQsJCAcDBRUKCQgLBRYDAgEA
+Ah4BAheAFiEEE/0DaAkx7NINfvI6melepPzlZ6gFAmQlobYACgkQmelepPzlZ6jA
+AA//dsEUM2YixY3TGwT7uhWLGflC/zbkD+XlarksaneWzrnA3ujp3lX9RW6ScB/t
+hx0u2mJTpBiyAmCkyrkhn2t9n8vH1O/H5gWPkOwvWCaoECtI1c6ArzmxHkn6pT0D
+Lrqy6GZHg3bDcSiy24OB/H6grf5mMP0azu69j//3mxPhAcAlekWZFudGd4LCbhTj
+cOWHigXyf/QIwJn6vnB8T20a+a8j24b+QFtNVFQTglCn8zrMfTWGm+hKEHTfRwGr
+ujLK+p28D6IKFpqwviB/tApg76BxcL3AANK9dw9qAWy5s8GdHaYkNBTFOtUrelJ6
+OEKHQFxJipIVUM2oDfe4D4k0Usg7uH/LU+y4EAvRq+m70AVqNb96ThOnPIsA2HTr
+sIeokKM76dh555QZTWKcPx7nruHIPtumnZQtlrztAjdyEWM1Ys/H+/a9xgl5WdzC
+L+ke2pn6EU5r7a0wIR657r9pWhq42NUMDdQJ7WCF1/lyJlagb5yNs3BnIvaNrVJO
+2Lq/0WaEGQORzZg6SCnBnvHa/ZBcfwsSF0IMfGBDNTpGIouuM5QvhXpFJWcV7m6e
+V7AV8qxV+Um9/Fhx4rosAAqUwrjJyYa02lC4fuO3YX1SjIZWBv+a+yBJdzyniPTF
+IcH5ofJ80Pftgo+ZbsUIfc5UONIxs7DoO+HJhAIdQI9yicq5Ag0EXpilywEQANVU
+fcpkTI2etszXgXFFyLjMIADzEte0VnpYokbfmqtAGWM8Fbeg6KnldhDxR0Y7Hy8y
+AvOaFeyn4lAcqqwovIb0NObPpw471Hwg4T19mFCyrHQ5j5IJwxl/6vqWDsjlrHnX
+2AlxK4Ji5LxKr1hz0ve1wB7ZgG0wlIhNdLLd05mhEaAC95UMMNPfC3XfmyejcEVw
+mrCLnSn4It19VA4l39fYHjJW3x02HK3rCsbQP4UjmZCk3YAdfzkB5W4D+7Dud161
+fq+Sadr8XJ0V4ZFOdl0e1+3iip1mJgaJ5IktEzwhqO/sa/xpV2zYdWb4kpW2zawu
+6eUO4Pq7Y2KWM3fNKruQE5XhDF3YQhdfrN6OxpOIIjBBdgcINK2NLArBpSAaHA9f
+U6veJykdfgOdVffoeKH/ic6KinOWYfMzm0rKLqcDtn0UlsG5PEEU6ev8u7ZDa/hZ
+BZY5Hhud7Yu5WAcLAeVplvWdW4UW3dTutknwNIENPvm3NSWfIw7yv1Hdm3q8lXYA
+ZJaX58PXN+1WVofBaxIHR8GZ1F3FzcSk6wHAAg0lnk420VOER2zRexCQ/f4yqBNb
+c7D9nSobIK8Ga0lQFGdMU3K7UIOxlOHu+rnEVev9+nIsEbj8XSGiSK0Apj+f15b8
+Q4+ZRkJ/xGTiK0EDQg+7N9wcKKYS26i9k0vmwm2FABEBAAGJBNIEGAEKACYCGwIW
+IQQT/QNoCTHs0g1+8jqZ6V6k/OVnqAUCYoQbYQUJC3BDlgKgwdQgBBkBCgB9FiEE
+1IAZWM2CMW5b2cQm3L8lMBwPX9gFAl6YpctfFIAAAAAALgAoaXNzdWVyLWZwckBu
+b3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEQ0ODAxOTU4Q0Q4MjMx
+NkU1QkQ5QzQyNkRDQkYyNTMwMUMwRjVGRDgACgkQ3L8lMBwPX9hS2RAAyDFE6VgR
+RPj747DNeB7fx3lmhgdUO8IEpkGaclG9QV411XwIiEH/+w7CfM39thJowQrdplWO
+v7JIaqM6tIJ9se1o1/1OMWACzH4UJFIxaABXajql+JuyqtHrcrUyZzL+MEPeLuMO
+VJCRxTXJOXGF5Y7ilyg37hH3MvpowKnmH8ySlqZFL99xKkRBiKhaVGzVxeWNFViM
++8nAFB/KO2rE0Pfj2Ua+3ToZrF5ZtmLN8+vImd+cWbVvDUP//Ec8MUndeRGnDZ3A
+tP9uzrUZFlSJcPhFm4LYYDkYY3agQzpuelaMdrdrxSZ45JZ3swGZDvoe3Exbi6e7
+6ZL8rfz3P9RvNZQtYd1eBiFfRhzVtLsNQsLylt6j0KLJeAe45ySWzKssLYVnCRlR
+oMZlfKypynS9n5huARG9Wm6XbRgPLXT8vs3SxdQYO2a9iPlg5VQg+Ay97+BUsdn6
+dmprsXeKgHxyeT0y2QuVQZQF7LU3KVLJcdUJ+PDYwisDN78UnN8/VFXbCHdTXJ7t
+X1uhQqMQczIlDRaSQyrQdTtW5nH7qhRYyAsKBKl/yAxChPYcWTAlNkhR69q2acV6
+zLpycbbjYM4BBa8qKlp2u3hN36Q3j3yS91Ray3LbGG2E3IqKZsaKj+UArbozFUyf
+OLe7oUDMDD/UyqIBKSCwHfZYQf+JyRkjckYJEJnpXqT85WeoTaIQAMbAeHLSq/Bl
+yVlEa7VlS2pVzMmo8W7glEcdHV+Dri0CZZVNthbDxNMkeIgIwVP5q0mWNEWVm4fV
+vHdwWg7yOZOk9ngFbVsCx113hh+MlIm5J+FdaI4HZn4uH0zip9pfWhuJLeMg568g
+p/SU4IWbbCavsUDCqsvRiKoBisYQAAV+v3zKTVJAETXyUsGyEZsiGu0MT1ENXUqw
+Ptqfa0Ml6htndYBSeQpJAmg8QSgk+BDy9RPoNEr2dpEK0uEei17I6xqUOJCypRip
+BKUFDFAW7dCfqRJew2jM+MSVXaG63s/gdXU2Qb5KxY9fDagPDvwWIs1rhZZUPmvF
+6epsfcNQIk2ecFbTLzvj459V2Ho1kkdGq2Ecm3tYRYMmGezYQWqUve8tFLSAQ6GD
+ve+k0Whw3afxzskx5lXylf1Aen+4Jt4H9ORC+XSvLeOwcQB84FnAMwEMQVrqiE5o
+dGJpmzkQTgXrrKtCBPV4VaERN4xXBwsU/2KiLyxqxbWZAy4MRnUpRH8SG8qJDLyS
+GItytD5MdIeyvIO+3tEBLE2PxD7+ystp2KTrt/gD4eODNKmf+ZoaGTsmmnoOVUdL
+IfKJ7GB8D/PPQdUxmCVtpUmPmXkWmDNlcjVMhySFsOzL8rkwxygzUqERE/BLJd9C
+HyXRkw/NmmRy2TNojWt6GSA5HuK06XJpuQINBF6YphUBEADjdeTisEbBkLcQTo79
+cSVS2v/biJnRhytUd8nQnFUzErGk0HeCClmO3veEiREUCKwuYYLFmCUwCfreb7Lo
+2Y2QKgIvSPsRTxBd8w/SPGdugz/JxwqQnbVb5WQOyn41WICUCfEC6l9l0FXm0IwJ
+ct6QERPYmYH9bS2SaVuQqA26um3x2gUKYK7x1It9CP2nSrKkKenbBujA3Q9XAWWd
+BoXhVI+nK+s2cPcxxSlabxzwjIRRspdaFdtOYynD5qOCZw+pIsJ073MwBj2QtVia
+g5tPO+VEbUQe22RSKF7qQA5h4PAvBrTGqpxVvL2P7JCOFGr4daoRUFqFL89KMu7Z
+X0u4qnK8pLwbzmxBbGXdEIeIDM8XZDB1YU0DYEh00ALxBcVCefFT8dBMjBbNyHlL
+kwBiXEwnwkc+WL4NvI9F/BZJWyZnhvB5OQqiWqHqOAew2Yguz76TmK1E5OaRrxpR
+8DyXyQQOp4SUymydgXiXuNbdItbqxinkBvjAntgFLxlzGgR0fKTM8rDfNVUVN44D
+hQEyzKzJL2vNXIdKq5ff8TPXyC0AW0zeiOWSCm+7mRG5SYBm1RunzOa1fZGftdc+
+YDJlgr1UuNinjK4YtBh526dls+HKQ6SFPUZcl+Y8pZLlYEkwjr4iSDu6D4WTM/FK
+GFtlG5IB9tzUcQwzx052ewiagQARAQABiQI8BBgBCgAmAhsMFiEEE/0DaAkx7NIN
+fvI6melepPzlZ6gFAmKEG2IFCQtwQ0wACgkQmelepPzlZ6jxDA/+M/0hMhpaA2JL
+gwCTPh0nyAGVaTeus8RpD2K9zgJxOXAjSRjHix84xAz65928NaBt7vS0C+YgUk46
+Sf1TWWDq37dcg4MF8ORKaEziEquqpWkyLdsc35uJGIE6IPWoa6K4ZgWZaHD/e8p/
+d7FDqoJbxDmMCjX2qQRa1DMx6WfFTAVZ/sQN70qD50xnQoOEfNkvbW//OGSS2QjL
+g+YK2gKDP/RwATuKMRED3C0ZcgbdBLGQzR82fY9zC6sww+cQwd5WW8ywav7acC0i
+9+TdboxsbAkEMEp1J5g+Ds0tpf0b0JJvxzFNqtt513X9dJJlRfVU36sleiRn7kAm
+RsemBeaalexl8f1Omx4C1hO4vsO8WudiAkV2rV9oWpbob7gNEL5VYVSDPSNnGZom
+mrDlvZNfpVzNGkTp3hiKd9dH2lyyKDnhpG97BIoBMp7otEXqpU9Twzks2S5hvKRZ
+7ufiYVb382kg1yaD19I26lA5v1AR7sP66LGbSU1xAzIwgRiqdZi1+uac3QQtsjC2
+MmPcobU7r8DxGUFAXE/pRNBHeOyaF2bUSSYYHwzt4QqknSH53JANBMiorND/vQKK
+3K1U3bpd7oK/UwIhC4gA+psq5HdVcNX4S87A+x3e+kXGAK3gQBArBY/R9BsUDB34
+RTzttG+r2OW8PYQu7JqcD+1RezAEGjW5Ag0EXpimigEQAL6QYddkAV4v8jxWAisv
+PPCXauqQeTgyO3b1CQErO3cMi1rAeS1AnwNYsk+OPP+Dpi6MzoKSSAVGjoJ4POS5
+kBE4nbHPjRx9h5XOCLSwxVmiYBWKgy0k02mWaq2+ys3Xo3mhV/XzdeFpiNBMAqtB
+TbGIFKZ8iI/zqXBACXHAkrK6ImHQPBtrbBFVfr78U5aii7uMEy+RnTQ0vEFRYcM1
+NtM0eXKGeMjISh83OIIPk1qwvBXFAvFP5hnYGszmHQpMSvUkUdMbp+26kcrPEhs0
+qOg1t6iwL4vN4v+HHo8ZHUQjlJCX/AG0iN7cyvoEbGJ3DHXvyYZILmJJvIfnwugz
+AH2mYuhFHg23FTD50n44jbu4JM9xZ5JasKjODX91Wz8J/XD6v9S9gzJHLmeaB3ln
+hgOQ/kzujiQk1ZQK+JOLJxVtzmk6e3h2zNQ/UL9ZWmDB2/8oEgvMj0dqaQLqUlnw
+wCMnNmNK/brvfUHL6Cjt/+9WLsY+3d1N2iLKheBYG3yo2mQhl6zbjd5qYcQCoyPh
+r0fFy1Tbo0uapVO6lmBQDa9RVChzC1/IlGbo7eCZ2tcKwxIAQE6qbAZlWw8m+PUn
+VuxAIOhnx0aQG7BtygeShlGZjWtWnr+m3oU8vPsa4oXgYHTLmpUC8e/kgnx5j6oX
+03h2/HE2rsB+AwKWoqI6xZivABEBAAGJAjwEGAEKACYCGyAWIQQT/QNoCTHs0g1+
+8jqZ6V6k/OVnqAUCYoQbYgUJC3BC1wAKCRCZ6V6k/OVnqLTzD/4zukOBH2Mvol2O
+guwuRLQSeT682J1blChbo+KoVzwjF79LGYSKdIj24YKI52Ig6GuDoHswmkH/cb2j
+iETuBJDygKURiMDUyZ11QMywMmWe7J6u9DZE5gIpKFvsSOQEnOw0FaFsnGvERfAC
+0j/tfDYKVtuzDKt/u7XHKHK+zZ4WZsiOeWjkbkXKdXt3aUcFqXTYsf4wZH2A31Gp
+ENlWA74nRH+2Uq8V2bOWqMmFaJ+fBZ+0ssPYiIWDZDy4zKftIXtKmLX4AGBNIdfC
+nEruQuPG9GmUqTwSW+2lV05mOqG5Wr7WLOT8XYt+NTwNXiVFbGckxbynXWOXosIi
+vmf+NFMZzkykEr11FRrpz5nhzOHDGL02qy14+sp1QLx9//V2VAan2C5z90j7SGpt
+Lm8BNZrcVy/i3QoiOnwQsnyT3PA/aR1H9PokOySlVC8d4uuwC3o3Mw5GgtbjAgXM
+ZNgaxVxqmaUXM0cnOjSGevh0ij4tgXMk4s5QER/6BHkeRXtFoYJTdLDT9ZATUskT
+fRuoCuo5jwn6wVygGEi3b+ugK+zMvH9UBU+4egB0bY6ZcPo3NqkYf2cBLs151BO7
+5VoRPCYQ3XyNf+uj/9OSo0AclOkNokOLbT4d1WYTWE/XZqJxkvAVNZMaO5tWqQ2J
+nmLb6eEQYYTQczi9GT251UEn2QH7RA==
+=LkCk
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/flo.key b/documentation/static/pgpkeys/flo.key
index 029b93f7a3..b4c92b27e1 100644
--- a/documentation/static/pgpkeys/flo.key
+++ b/documentation/static/pgpkeys/flo.key
@@ -2,11 +2,11 @@
[.literal-block-margin]
....
-pub rsa4096/EF5BA4DCD5A9F3C0 2018-01-31 [SC] [expires: 2024-01-31]
+pub rsa4096/EF5BA4DCD5A9F3C0 2018-01-31 [SC] [expires: 2026-01-06]
Key fingerprint = ECB3 68B8 7908 BFB6 914D 7269 EF5B A4DC D5A9 F3C0
uid Florian Smeets <flo@smeets.xyz>
uid Florian Smeets <flo@FreeBSD.org>
-sub rsa4096/D46EC80E1D10DEF6 2018-01-31 [E] [expires: 2024-01-31]
+sub rsa4096/D46EC80E1D10DEF6 2018-01-31 [E] [expires: 2026-01-06]
....
@@ -50,80 +50,117 @@ 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
-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
-ZF47CIjHPPF2KtersqRo
-=E3jA
+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
+N0uB3yIMbIdNOWCiQ9mX
+=+TXX
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/fuz.key b/documentation/static/pgpkeys/fuz.key
new file mode 100644
index 0000000000..9f8b6da07d
--- /dev/null
+++ b/documentation/static/pgpkeys/fuz.key
@@ -0,0 +1,80 @@
+// sh addkey.sh fuz 597C4349CA92DE05 ;
+
+[.literal-block-margin]
+....
+pub rsa4096/597C4349CA92DE05 2023-02-06 [SC] [expires: 2026-02-05]
+ Key fingerprint = C567 01AD CA05 63B2 CC68 FC6F 597C 4349 CA92 DE05
+uid Robert Clausecker (FreeBSD signing key) <fuz@freebsd.org>
+uid Robert Clausecker <fuz@fuz.su>
+sub rsa4096/D03E0E57A03CDC4B 2023-02-06 [E]
+
+....
+
+[.literal-block-margin]
+....
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+=Y7Vc
+-----END PGP PUBLIC KEY BLOCK-----
+....
diff --git a/documentation/static/pgpkeys/gahr.key b/documentation/static/pgpkeys/gahr.key
index 30a85d90a9..acdc4206c0 100644
--- a/documentation/static/pgpkeys/gahr.key
+++ b/documentation/static/pgpkeys/gahr.key
@@ -2,11 +2,11 @@
[.literal-block-margin]
....
-pub rsa4096/40993B5A4A8F3F12 2018-09-13 [SC] [expires: 2022-09-13]
+pub rsa4096/40993B5A4A8F3F12 2018-09-13 [SC] [expires: 2023-09-26]
Key fingerprint = 546D E77C FA14 CEA4 480A D7FA 4099 3B5A 4A8F 3F12
uid Pietro Cerutti <gahr@gahr.ch>
uid Pietro Cerutti <gahr@FreeBSD.org>
-sub rsa4096/628EAA09AA81154B 2018-09-13 [E] [expires: 2022-09-13]
+sub rsa4096/628EAA09AA81154B 2018-09-13 [E] [expires: 2023-09-26]
....
@@ -26,32 +26,32 @@ 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
-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
+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
-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
+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
@@ -63,18 +63,18 @@ yx3j8A7wgjVnYI9qScYshYIGX1ovkw6fxzm9/cZSG8g5AW1NKr7NvPFKeCBXr+++
JGYUcIGuWM0HB0hdsn/0j3MiSkj3bmIb5szpcJE4xbXeXpH6A/s626q32PfrJ9r1
0jY9O8UKctArjA7LRRAk7I+pGndvqUNPW6XV+XBWy0Pcja62kbgZEHFN2vW5xFlZ
DkQaAt+1uKXJ/f73/MsAEQEAAYkCPAQYAQoAJgIbDBYhBFRt53z6FM6kSArX+kCZ
-O1pKjz8SBQJhPyZZBQkHhkKZAAoJEECZO1pKjz8S0aAP/Rk+YsRWf0t6wZcMmBOv
-585bJTHawq+mDcsnUPANS/4tFh+l6ThQC9b6r4rANdtCDbRrl22eFr/ATMCkavtJ
-u3lgnqiNf5tsqft6tpmfr129kIbTLLZLgpIzejUfZ1fzjvts3E0uajZRFmkDEjjd
-3PGalK3RuxkU/ilF20zmxuPnnCsZNAVLvN64tssutp7RndnhH63VNWC5OOGT8lox
-LyVmEhyF3cCIq6uOQ4TmeQ2OELxOiPGeN6up5gAjJq3jUVLe+W6j8F/slxxiw6CT
-FnSO7zYk61IEsISrRVTbRG7CAWJpU59KAVkNMksD3GqZMNQEG7tZ1XAchbQlj06V
-Q90ebiDLorrapS5CLTw/4M0NdGh3UMfh8MYgLJqj6Rb90YD5mEFqaU9W1SrYMk4g
-T3LbeUbodSy+DUWP2dODOPsf/T311m/K8sTJPpECW2skedtRdSbvxPXn6Jv3qtor
-+0/7PFW4Km0JqyxhjBFlR7R02LdA7VcerHPexR8aGcV8O99wXhDAy3wQKqGFf0mX
-E7liSIBwMF6eZ6H+ebb5LS1LnoeLJsFDzZtiAfgVUUXs12MDreMAI/77U/3MW5Zc
-5z5OGdDlDiZWLMob55SKUNV9XLeCGR/PG2gev2cvlK8h59gP2i4vHlSipVUPP9J+
-xlIP3OSjZ/IsWdAJvAJMIw5D
-=T3HB
+O1pKjz8SBQJjMVAvBQkJeGxvAAoJEECZO1pKjz8SploP/jKEu7GhyXiKf80nJudF
+7SFvkESdOwpKSaDUSsXmEIFXfz3+OA9+lvIvi1iTHkQtRjFncDsBVb+t56EpqRLv
+2ffMhEOEjlrWyLvVmWHfoS7pREdJkSUsDR09i0Xfu5Oa/oHwW7Nra1lo/RaEG5y6
++i/+ClXYFK+HkxmKr1q9HPD60CsfyenMrxdNTCpvLSaV/gncTiWMjwquryq/iJni
+WyKveXkGy9fNO5QDoho2oFk0aUrzj4FBFye0/mpr1bXTmIYo3ZBZS0aG5yPoM4Oq
+ggvHKjKy/rP5d79pw4uz+WBUwP8cnhfZHqIHVKMGwxB9W2DCjsEmtkAbObYOG4BM
+rBnZFCDy1CiyEldgf+DRKWvJV143RBx3LGbPJnbDzxwsYOy44CRzu6Z1CI1zc1UZ
+dFgGLC5yX5BJUvSMb6FErl0tQrvcusDbqe4vVg3V4NCT5keLM7ObELCEYzDqwqwJ
+8Uro34MdQ78RLPFxXoe5DQAabrIldGux+Cq2Ml0QVrIP80ZcoeKamDLo67EIm/s2
+I2dJe3BScb9PObpMzZMANpK39af+Q4ehZUxDEkMdgkXJoSchLFNH9+MxT6Ek2163
+00ryNMh9+ObVkf2xmHFGatKIe6pq4282KHNXlwpHV0p7N0t8i1/TVLKLqMTJthBt
+iZHJwVfdPo1uosZJORq2f1ix
+=gYVi
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/ganbold.key b/documentation/static/pgpkeys/ganbold.key
index f8b92d6663..68932a922e 100644
--- a/documentation/static/pgpkeys/ganbold.key
+++ b/documentation/static/pgpkeys/ganbold.key
@@ -2,11 +2,11 @@
[.literal-block-margin]
....
-pub rsa4096/8617408EEAAC693A 2013-10-05 [SC] [expires: 2022-10-24]
+pub rsa4096/8617408EEAAC693A 2013-10-05 [SC] [expires: 2024-10-31]
Key fingerprint = EB31 9B1E D3EA 4D95 A96E 7103 8617 408E EAAC 693A
uid Ganbold Tsagaankhuu <ganbold@freebsd.org>
uid Ganbold Tsagaankhuu <ganbold@gmail.com>
-sub rsa4096/A7E14611600EF443 2013-10-05 [E] [expires: 2022-10-24]
+sub rsa4096/A7E14611600EF443 2013-10-05 [E] [expires: 2024-10-31]
....
@@ -27,18 +27,18 @@ dNAKKajquTAkF7G90WmZEagRUeFmx+dK4sjC4J0lsHuKVoXQZhG8oSESUW2OcgU8
hqC+agZbdnQxxRnIZbONoVNJzIwhgVqCw/JqozehJ3c520kUUX1QLrsaMwARAQAB
tClHYW5ib2xkIFRzYWdhYW5raHV1IDxnYW5ib2xkQGZyZWVic2Qub3JnPokCVwQT
AQoAQQIbAwULCQgHAwUVCgkICwUWAwIBAAIeAQIXgAIZARYhBOsxmx7T6k2VqW5x
-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
+A4YXQI7qrGk6BQJlQcp0BQkU0yErAAoJEIYXQI7qrGk6xCkP/0WxIIrtNKiYnODY
+3WmCTJBeuYjFo/TN6tNl/hBKR/jtYEWY0bQcZQGaSNKjwgiKd1Udl6Bd/ux5JmNJ
+KsPhAhkc5tFRYegyaen8FSeeyCmNtj4m2aUOuSvc6s4+4UpitHq1/tUgii5XjZ/O
+XqNRqf3df6YSsBk674kXwD/o6wvL5JrgeQOdqtt+e7VWF3M2nEzwjWF3lO+xm8kn
+wZ/hs3C31tp2czBr2CnJeydGOdYcBNkffBpZ7qzWRZ37/vu3hqYAcy6GzwWil99v
+hxqNo+3pWMJxe+yU4+C4iIojfDTkb0/VNvy4zXY16Wo5q65uRd19QoRZlnMkTFvP
+r1ZEWAeDMgyC0DNVUwvb5mjL6Cylrp02DqyuLwOaEZkWNGokPFm4H4JD6xi2fFra
+C9TH3oYQcm63W7o3/QwpoYe9VEDk4tYXDMdaKN8DYn6vtTRaS3tIY74J4y6B/Bgt
+zH7oBddUlGUppCAU0/qNXXvtPx2c/yDtvFtuy5/oB0VAjmWP4Auk8hdpQMgIWpKO
+hYwsx4tdD25rcJEbY9Mz38N/pSH8+aWqmq8RtomDyxqtcS1RItzl2WPFklXVUb8/
+Yht9MhlJ56fnLG7Y3CvGh3zTgzaSLyUm1lf5E4REwgaqQbXlRVgzdF1MTNXF5YEb
+ZiCUGqXSqY2FwPRelaZizTInJayJiEYEExEKAAYFAlJP5SgACgkQ1Pcq73j2Ql5r
ygCfbZwKm1M2tY22nQ2JLPuV7VeglGgAn0YNo7PUO8SPoF/SYFWV0tVnOvxFiQI9
BBMBCgAnBQJST9zJAhsDBQkJZgGABQsJCAcDBRUKCQgLBRYDAgEAAh4BAheAAAoJ
EIYXQI7qrGk6uhwQAIpoyshLA/c/35fGMET5FgSsW4Hldkc6oT8IpxKmv6EbCGk4
@@ -54,18 +54,18 @@ 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
-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
+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
@@ -90,18 +90,18 @@ gNFzQld4DMNHA6nPWmspFGmw6s11+rAPYlGMYKjCP1Lm0JCdQ/z6ypumL28S3qC3
dcCPQ+5S7szd/NWkq//p430LidORBPSN5SESbat52Ja0iAtbphJuZam+f4QOezmn
TjdSxl95EZQfu4WvyUb8jIPSprm2Y4uXsw5N9MiaP1qB8PqQS4xZuU3JOSVTckto
OqKJuixu0/cVryHtulIcCHttt3vNBJfb6gh+P1yiCeEAEQEAAYkCPAQYAQoAJgIb
-DBYhBOsxmx7T6k2VqW5xA4YXQI7qrGk6BQJhdV1cBQkRBrQTAAoJEIYXQI7qrGk6
-3skQAI0O8GSkzrWJGaTSI4oC9bKqNV3XJ/YN4BV62TSHcQGLrKYVmFrh7UU6I1jp
-f7SgAf/fh8bEMlBISOysv5HG/u1v3XjYdJZBp0YxqOK8hcVEz1TD8PO+U/u0EBWG
-RP87pn7gaVEiYKK/c+LGX7uClrhSjAiZUxY9JV7iJNloRszVIbSQ4Nbh8te5ouya
-qe8Mb0EOknnH61KmIweI7NFFe1Uasrpze6egsRzanQAjdUrGt4Mnj2Pu4Eu1r0J0
-D9DgUYz8JNJLAdG9ieNw+oqPpha5qOzOopaJv0SRVlB+jLBjeGVa29jjlpNnpI1Y
-I4gBadgjpi8qGEl33luni+98bOISO037QVXRn5VRbLesOQ+00JjBBqGeRK1gn5Xg
-fuTDPbK3K0Q81cH458GHRRZBrBcCIgvqe/EU76CuDUD9qc5xNWVLVsl1Z5wGhS3V
-GvWVAtzHzGKqtyJK9N5Gox9zSr5q0UvlVa0aDyxqM91Pd9aufGGw8Q/Ki1Qi6txB
-//EQA2N20LzJVtblVZHp20/D81nFi7bbrNJD+vYZfSd/W+m1q8JQEEang4lVYAkB
-XFrqi4s3a/cXaXeSwjLMYDfXffUk9WFwrYnGNBk4dIx4LdVy2LblC8pM3VKXmpnt
-vlMA3l06VS0mPB7ptDCb4eqNHUzVr4duGsQs4Uw36A8vrZLN
-=H3go
+DBYhBOsxmx7T6k2VqW5xA4YXQI7qrGk6BQJlQcqPBQkU0yFGAAoJEIYXQI7qrGk6
+QdIQAIliJJZr5FLdAK5P6ZoakP838a/onprg6VoGxOcND9w4xQIr6eyqfZkk9WYT
+OADmPrWkqKecK3HEA1lq7l/KiMN/QqsaFr9S2aq+ZZ7m2iekeBID7M+YMR00a0Jw
+QzPIld5Gd4OylDbeAxsQIEneSSzXJ9qqGzrY1A0KdwnUfQ4OsmGg99ysSNZRxS9M
+j3xsD4kT7rPF77Ov6hF3KVoE95FXznOWZlNuFpWdP629hB8+M6ej8E4XD8GBjA6v
+Z4lBECm7iN2g+bOrSmqhS7Tn/USRrUZb6bytIpjFkcdVQdT32i1gBzrDZv9vasgE
+nxNwHUlNreKALJmQkhTrOrqjrJyxP/wx2YVX1R3Xg/BI08H2mjV4zFiV6OaHmBBi
+q1X02Bv+zEdnNMKGAbFTFNq3uVHb1IHHYZNWUemkzD4+0dBg4PfrmptipuSD0c4U
+XggPPAXwd5viKk4bAsh9zAmLFt7RikE6DhAGU/3MynKXW1s9jcjYgl99BRxglnnl
+8uo9PoyGpD/vpkJ+yTm+1ZZluHUE43nfPUw9wmnr2mogCPxgVOeC+7w5bwbjrlq0
+K0FwAHdA8N8ULbZ0uCBO7WEjnYvEeZqZm5OWKurC1cHZ6p8+vxQm8BACMt68lFdS
+BRG5wW5S7zhnqv2A7bvO/Sy6SLeWluDcLnsAonKlEtrPYMgT
+=zVJW
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/garga.key b/documentation/static/pgpkeys/garga.key
index d4bac71c47..f0696d8edd 100644
--- a/documentation/static/pgpkeys/garga.key
+++ b/documentation/static/pgpkeys/garga.key
@@ -1,13 +1,13 @@
-// sh addkey.sh garga 6A5918C8F4222329 ;
+// sh addkey.sh garga 39BE8FC7125C657A ;
[.literal-block-margin]
....
-pub rsa2048/6A5918C8F4222329 2020-06-03 [SC] [expires: 2023-06-03]
- Key fingerprint = 48B7 0638 B779 1114 9400 2749 6A59 18C8 F422 2329
+pub rsa2048/39BE8FC7125C657A 2023-07-11 [SC] [expires: 2026-07-10]
+ Key fingerprint = 44BE C3C5 E81B 9E1E F14E 2439 39BE 8FC7 125C 657A
uid Renato Botelho (FreeBSD) <garga@FreeBSD.org>
uid Renato Botelho (FreeBSD) <garga.bsd@gmail.com>
uid Renato Botelho (Personal) <rbgarga@gmail.com>
-sub rsa2048/70F73941F80D196B 2020-06-03 [E] [expires: 2023-06-03]
+sub rsa2048/BDFAEAB5B14314C2 2023-07-11 [E] [expires: 2026-07-10]
....
@@ -15,50 +15,49 @@ sub rsa2048/70F73941F80D196B 2020-06-03 [E] [expires: 2023-06-03]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-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
+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
-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
-gZl/Xp2joykgniXT2qbVUjXjGRc=
-=TFvG
+VAQTAQoAPhYhBES+w8XoG54e8U4kOTm+j8cSXGV6BQJkrWt2AhsDBQkFo5qABQsJ
+CAcDBRUKCQgLBRYDAgEAAh4FAheAAAoJEDm+j8cSXGV6ymoIAJVRlR1vnzvyEMwF
+8UTAvXg+xqUvPdvyTWpqY9A2GxSccv2xeqPW8+LcdESH7W6jjpZ7K8xop2pUZjP4
+m6284W4DjhBJnFFpP1bX4UOmpCfIGBQTUwWyZx32nAyrgS4oj89RP77srcJuUCcF
+o+TDN4c6Qi6eF7AoLnmcaN1ENmE3UGO7D1qhafu7IYTt1jCeAWP8AonLw31fDrRL
+Rx+5K4L/sKm8QxXF5tB50G5sNc9mBKxmAeJFv+U9ckP5Sd3biT7sdKK8Avo192Eq
+AVRccywWDNfMXpl1Kpjbxzll8rSsrKYgcw4KWT0tQbSsaPVP8VonkxBTRH3JMnko
+c/vY5SG5AQ0EZK1q/AEIANQ7n6MUnAPglkG1EesxMSLvMF0Cq4bkbeAxtgYMp0+x
+DFLxAWnXG0EWV7AaXpjX53HPQMcrrf/q1osiiX/QS0LqP/UGJkkb1tVOvtCyVGJn
+YJDMgXmGj5Pr57LL/7vYy7r1exVYMhNMpNYmliCjlQw/l60AjrxsPbknHga0Mgsq
+NwP3kTP/qb5wwmssEetzyhPt2sZOpXzXRit052lpkt9P2QwmZTbF7qqa6keCXU+c
+F4nbOaN+nbLieRGdtLOYTTA9+LOGK9WNUfXpR+qgbBQqaM7NPo8KwK8avlCSQkeo
+R+VvGRMCbUQvLc0fJkRNVssM1wV2I9GIXxs7UCMWXJEAEQEAAYkBPAQYAQoAJhYh
+BES+w8XoG54e8U4kOTm+j8cSXGV6BQJkrWr8AhsMBQkFo5qAAAoJEDm+j8cSXGV6
+9b4H/0il4aGXFFOSO06nGx4NJSc/bSAk7qQhh1q/7EkII4faBDOY9cKluxZQhj/d
+E5fStIN6MPWHW4VO1SuO9KOqcpl/VfXix8xoJGTvyjBLRgXitbvuXj4wifzCuQdt
+Sjgy0lO1qyC9VTeXHl30Dy2LdNizC7T64vqHbhw+kTQXgO1EtQ1M5XquRfTRxm71
+dlOwXQ1Hs6YjvDWhYxWVQddSOXffRcVDOVxlbLSN1YbESmcY2NCp6ic2kIExbDxp
+rwFH2VSDdaV4F4nnYT16a/PmOuIz/qR1cKVZodc2Fi+vqt5KhTlFT+nOYojHqBF2
+b4Cc+8fwAnpN1+YL7vB6XL/jGSI=
+=j30p
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/gbe.key b/documentation/static/pgpkeys/gbe.key
index 937ab073d0..f734751220 100644
--- a/documentation/static/pgpkeys/gbe.key
+++ b/documentation/static/pgpkeys/gbe.key
@@ -2,10 +2,10 @@
[.literal-block-margin]
....
-pub rsa2048/3905F657CACFD3DC 2020-06-09 [SC] [expires: 2023-06-09]
+pub rsa2048/3905F657CACFD3DC 2020-06-09 [SC] [expires: 2026-07-16]
Key fingerprint = 61B5 88D0 A639 5FBC 87FC 5CB8 3905 F657 CACF D3DC
uid Gordon Bergling <gbe@FreeBSD.org>
-sub rsa2048/DE2EFAFAB925ACFE 2020-06-09 [E] [expires: 2023-06-09]
+sub rsa2048/DE2EFAFAB925ACFE 2020-06-09 [E] [expires: 2026-07-16]
....
@@ -19,27 +19,26 @@ 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
-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
+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
-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
-=uIww
+nhktGa8AEQEAAYkBPAQYAQoAJgIbDBYhBGG1iNCmOV+8h/xcuDkF9lfKz9PcBQJk
+tPoBBQkLeRINAAoJEDkF9lfKz9PcbwAIAOvXMbRRMMQZImmVOtJn6O6SGW5rFniv
+NzOvbGHkgLsNcMocZ2c6xgjSMXk1H4nUTPf/fNtYMxKBhKPANpZflMZvXRH7MxT8
+gnNY2AVFUPP+eWQSMC+MwVMeCtByBVYwj5ZlRVkT/L0Xy0noCoKa6UIvPk+ChnRa
+8kTW0v+W+3QoliZ+F0SKFby8LAaHve0yc1nHezk+OxpQO7PCqFYM8Y39kbxdWZRh
+hixj/xnMK3A4Rf+yWdTPVMy4egrrgb4rsmucfFHE9vRmi9A0r720gR0brCLUZyrc
+lD+Jp3Rp61dUif8FSF/yqUWcEDuOOQo8JI4IqKY8fGhhrG2hG5qLvJk=
+=gfkR
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/gjb.key b/documentation/static/pgpkeys/gjb.key
index 9bf665232b..433495d326 100644
--- a/documentation/static/pgpkeys/gjb.key
+++ b/documentation/static/pgpkeys/gjb.key
@@ -2,17 +2,17 @@
[.literal-block-margin]
....
-pub rsa2048/524F0C37A0B946A3 2010-08-03 [SC] [expires: 2023-09-21]
+pub rsa2048/524F0C37A0B946A3 2010-08-03 [SC] [expires: 2025-09-07]
Key fingerprint = 78B3 42BA 26C7 B2AC 681E A7BE 524F 0C37 A0B9 46A3
uid Glen Barber <gjb@FreeBSD.org>
uid Glen Barber <glen.j.barber@gmail.com>
uid Glen Barber <gjb@glenbarber.us>
uid Glen Barber <gjb@keybase.io>
-sub rsa2048/EA524D216C0527E5 2010-08-03 [E] [expires: 2023-09-21]
-sub rsa4096/B96CDDEAAF8B5ED0 2013-09-23 [S] [expires: 2023-09-21]
-sub rsa4096/D69CAA1C932929D7 2013-09-23 [E] [expires: 2023-09-21]
-sub rsa4096/031458A5478FE293 2014-09-26 [S] [expires: 2023-09-21]
-sub rsa4096/16FBC9DAA891055A 2014-09-26 [E] [expires: 2023-09-21]
+sub rsa2048/EA524D216C0527E5 2010-08-03 [E] [expires: 2025-09-07]
+sub rsa4096/B96CDDEAAF8B5ED0 2013-09-23 [S] [expires: 2025-09-07]
+sub rsa4096/D69CAA1C932929D7 2013-09-23 [E] [expires: 2025-09-07]
+sub rsa4096/031458A5478FE293 2014-09-26 [S] [expires: 2025-09-07]
+sub rsa4096/16FBC9DAA891055A 2014-09-26 [E] [expires: 2025-09-07]
....
@@ -27,13 +27,13 @@ FCGD6uqFXM6s+kkgtqFlWuFB4tAM5epxt++WLEyLCL/znRhZK+tTstZxqLudJnFB
ooFOEffYvDB1pNWOarBmSKHncYNjHRqEcNFyMXJ9Fn39I50QDvoh9ps83V+NjuE/
FYzt3MmYA1j9H79tDYpJp7OEvGY5sJCZrMKjABEBAAG0HUdsZW4gQmFyYmVyIDxn
amJARnJlZUJTRC5vcmc+iQFXBBMBCgBBAhsDAh4BAheABQsJCAcDBRUKCQgLBRYC
-AwEAAhkBFiEEeLNCuibHsqxoHqe+Uk8MN6C5RqMFAmFJTqwFCRi0PNEACgkQUk8M
-N6C5RqPwWwf8CkKiqVxOqcz+kPJxS/OV2U8WuCzPYLHpWDDHsk53yh8SSGrROWp8
-o4AF7C8TKuO1DN1TysOB6vRNVOyXUx7eSIRzZq1z22241X9aVysnEua28cl+oeK7
-ZS3riTahNticLELeUL2qVBJFyH3nAHo80I0hWJonujbuo6XuqzaF9cjmJeFKXvBM
-1kTR7+odkg7bzZEa3es1xESTJX0f+h1RxVOYmQYsiTeaUyE5VYzIKXMzDRE5+1S5
-a3g2GufIqGEWDkwgTIo56o8HHVrteTcQZNhFc6wIHdbDIXf4FoCpAxTKF1so92/G
-7PAKtVrybOvnk4mO1EfMXE+HpZs4w+gvzYhGBBARAgAGBQJNCnfGAAoJEGfzMRpu
+AwEAAhkBFiEEeLNCuibHsqxoHqe+Uk8MN6C5RqMFAmT6aEcFCRxlVmwACgkQUk8M
+N6C5RqNIUQgAr1nmruHtBeVEU+uBoCJoPwdrb9y+yyjowygjIG3PDUi/yHHUXjkW
+AZgJcpdiE9SYk/6bhcRsSvF4SYuDXhoPmiF0eYPyuZosLYIauKnO3VShycIJsN5G
+Szkbgs8nXxXkSCTxTFnBkTGrlKyeSdAOOHrTa3VbClmgOydqbYfYIZ7l52h6ORjn
+gZYoGoJlxRPOXWGM9PfKuQAYGNiB7dqkD3/iYdLAJPLfoU2bMuXaqIwyt8idG0Ab
+RflfHWXtjsClcJTuVofD1wiFI6I/AVV2JBjp6HdsdJAX2DPb37AyVsWwOgEYlEM7
+wxT4skHQzX1rOevZya2YyZNNJizSmUBNdohGBBARAgAGBQJNCnfGAAoJEGfzMRpu
D7SU72cAn0ZTp2OdSNHWCAYGwmQdQmefJYP2AJsEAzZoeIAoHPKGCd2iYWgSEQaC
zYhGBBARCgAGBQJTeSCyAAoJELn3yIZpF8O5uHgAoJxz6+HLIdP0W/QowlD1qcnC
zKwxAJ9GdQR/hS2NnCVdW1ndZzF3kV3t14hKBBARAgAKBQJSEbQPAwUBeAAKCRAV
@@ -200,13 +200,13 @@ TVkwqm0BBFI7sG+AChCVGdNR3FTC0vGv2G1eaepQ+3gTc1kIwIFH24FRMdkledqJ
dG1naPEfS0KAKaocRRjRIsXlo9i+ydKw2w41xZTmmhEmmENQvO00osjJ3dLq9RJ4
00+6fCdtw5Bca22t/TjktL3tSsYOhb97oT+wDx1I1ZlJMp2Nx0sStCVHbGVuIEJh
cmJlciA8Z2xlbi5qLmJhcmJlckBnbWFpbC5jb20+iQFUBBMBCgA+AhsDAh4BAheA
-BQsJCAcDBRUKCQgLBRYCAwEAFiEEeLNCuibHsqxoHqe+Uk8MN6C5RqMFAmFJTqwF
-CRi0PNEACgkQUk8MN6C5RqMtRQf/WA1ZggTQiIfib+vCTeZJchU1uivcnn44+Iyf
-Ry9Lg7ivmB+UZBBUtL3U/9XA6tg0PizMcO6dNK2SVh5ktD0qggAJ+I3f7bsK47vl
-1I82+TxQY0c5deywK7JOUU2TXN/wUFbyUird3xfvG/OPN7qQ4mzvozE9ItYxSsnu
-zOMwiEg7tR+H+m255V0zULPuN4Y83qs2wy1NADRZh0ssBA8S5CQSbEkormdAkc1I
-+daKx1DrSNeo++umQ305uWAX4qwQ3PbJ0664f0U/EJWvCHy8ikW2jcOffeKvPjXb
-qbfnTirMmSAuNRxXF7Yw76e4qyjK+dW2eVUUh6Ko/E+lpnFe5IhGBBARCgAGBQJT
+BQsJCAcDBRUKCQgLBRYCAwEAFiEEeLNCuibHsqxoHqe+Uk8MN6C5RqMFAmT6aEcF
+CRxlVmwACgkQUk8MN6C5RqPobAf/QCeLGKheX48HPUjq8K94iZPEOwghWKXHMpz8
+1T/LbHEgHKLEfdXCLDbdeagcz2njhkWWVfANwZUDPp4nLbOmeQ4BlgdLco+rjuma
+itBEf0vPfV5BD+84+MdXYvcj5niuyf0BDxKllCkVNsBgs5CNNjBuCMnu6vWGlzA0
+FjwPQfmsIsgBI99ACi3fYlHXBDO8RdfHjcqCnWc9z+QTE8SJHxGjQ+LTatlOD99B
+0NGO17Te/idfT2iqBtEh1HfrQ30jEKq3E/R0rKljHJ9DAgKXbtXEWgDpsLtRGpZp
+vwEJawWc+UHAk5VgdeB21QBm6hswh7YCWebSQq0bjpbEoLR9bIhGBBARCgAGBQJT
eSCyAAoJELn3yIZpF8O5pUQAniBxC6MeSEFLjZ9mu2QSogNYTvrXAKC11/2iKo73
p6wHlU5RzYQEJyoIdohGBBMRAgAGBQJMasu0AAoJEGfzMRpuD7SUS0MAniMTk1GS
DPGmMHIjNk/Z3dcck5cVAJ4q7aFqVMg02DQ5AZEH9THrz9tA3ohKBBARAgAKBQJS
@@ -377,13 +377,13 @@ q6k8KCW6z9cH2MZxrUvbVOR/uhngTKA+7uuHHbnJKOQd4mJTVc4gbM1g4RKz/4sy
jzwCk0ICtlm9bzml9Cm18qHiNLOyz1+Uhb2ZfNk9Tsj5bSd07g1aOHriLO4zpjG/
mJUwJ6u2U8dvRIdUFPrw+mLLU7QfR2xlbiBCYXJiZXIgPGdqYkBnbGVuYmFyYmVy
LnVzPokBVAQTAQoAPgIbAwIeAQIXgAULCQgHAwUVCgkICwUWAgMBABYhBHizQrom
-x7KsaB6nvlJPDDeguUajBQJhSU6sBQkYtDzRAAoJEFJPDDeguUajDSYH/jBcTseh
-DXmCEWUlIxdwHCrRe3iE7D18XDvU/ndyfPh/r0bEsJtnAtg0RmFL58m6VR1OU+6b
-/wCOb2QewZ/QoNaFr3PToqx822QAunC1TAmrbasR6bavLXyWBZPpl+CoUS6GCzhJ
-4dRPi7/e1AzQj9BiFwPa+9y6advzBIiojOEehYtl7q1KnIaCqd7PvQaR4c9GDhJK
-vPb8tBi3f8yTqmc/JbwEzgnSebXcOTCdk9q6VfVnNoZMByRfKOYY2t1qMF1Bdd2z
-/1wrIE07ofMLudQ/lex1QSG37ykfGDFDxltoy3hPmwABJnFQKO2NONq0n7zkoVcQ
-GjL6tuOmANbQD2iIRgQQEQIABgUCTQp3xgAKCRBn8zEabg+0lGmbAJ0UjCGXz7gz
+x7KsaB6nvlJPDDeguUajBQJk+mhHBQkcZVZsAAoJEFJPDDeguUajScoIAK03O/os
+7gHnPf3oAoRjFKuPyZRbrOZSaa+sHy7UTHiEO+AZBhmb6+9XvOufN+GDclKu5Ygl
+7k6CxvZEUD+rVWKRCiH4hFrG81dox1JSiXwq0YzlINXeTEAWv2Y0AU0nghKyYxy5
+IJsDERyUtHBLVh3PqnA842ZaiG/o806n5/jFgzqr6pe0W5ze4O9ZNa6iA2uK2PMS
+aJYUklWqL3tfTswq4wHAIf6yN7xZCqdGfkm6mq4MyC90LsPI72Uf4soOkZ7uMXv1
+3RboE5/x/kj8YKqY46cVlhVpB/OSFfl6NfdO595NG2+Z5TYSrCvvWd/zPwt4XnI0
+pGNEc4JYxyRfaq6IRgQQEQIABgUCTQp3xgAKCRBn8zEabg+0lGmbAJ0UjCGXz7gz
oPhOqm+2buNbNdCbfgCfV0GB9EBQ2tzr+SIHEKdgTEqnZBGIRgQQEQoABgUCU3kg
sgAKCRC598iGaRfDuUC6AJ9U1fwyD2JtIwBDI73OdEBSelDB4QCfeR+2XlTAtc9y
sAap51+xIpmimtWISgQQEQIACgUCUhG0DwMFAXgACgkQFRKuUnJ3cX85LgCeJFx8
@@ -556,13 +556,13 @@ XK/ebAbFR7bQwNvjao5ReCtDcMl3sB6Kfe3tsrmiGjVS6GWhqQT3Z/yHm/KzdRuY
0EZxwZgLP5s5FnV1+ZOXMgZXMrPZP7y+W1isH/JdfjGM9pe+AY59aOaB7e9PPKfA
npashhnfeZwE/CjhYNxMAzEAY9rQqqc080c/FCwHz9O5jYYXQyfwCgZsU+bGfI1S
ATa0HEdsZW4gQmFyYmVyIDxnamJAa2V5YmFzZS5pbz6JAVQEEwEKAD4CGwMFCwkI
-BwMFFQoJCAsFFgIDAQACHgECF4AWIQR4s0K6JseyrGgep75STww3oLlGowUCYUlO
-rAUJGLQ80QAKCRBSTww3oLlGo6QPB/99KLgSdqm2NEbZDirpuvHBlvefSo2PWxNS
-dvOGjKL3IDKr+qpWv1JqZcMd6BPIX3Z6U+X9K4q4GLJxpTyLrY+qSMnxee+vUKmw
-KGsvLkTR1Q5qUH9imcpCatyYkLliNOn85UF46NBtwtJtIgfjYDD4cpvJZ8I1Psvb
-YdAtDEMTGdNCsmGMYc1dR9Nd1q0vFS1D49ldufmfc1bXyZi3KZ6eyXLNyRSina9Q
-GcQ1osesyN+LM+X/ASM8jHCUsDfX10lxglsunoSAadzhFjOCk+2ojK0owmNBf0tY
-0BNDkPEbqyKWpCPWyqFQo6V17o5kMsjTeEwXGPbdqwNfmeG/yEGiiQIcBBABCgAG
+BwMFFQoJCAsFFgIDAQACHgECF4AWIQR4s0K6JseyrGgep75STww3oLlGowUCZPpo
+RwUJHGVWbAAKCRBSTww3oLlGo6VgB/9+0nUqTSE+rBHKXA5SC8AEDTB8xGxrAugp
+4bUc32XSbtK2Tzpsw/ZjbSiV0dsyv5q3QN/nqfkB0UjLywFCOIeIyqQZlgAiOFoj
+QXp6vpS7SekMbsFG7s6AX8pc0HEBoWv1YzR5lYxxpFtXG2TJTfuTfY7HHkECe7lv
+cW8EQPqRHxgZhSzSYvBHlI9mu669yeoX2r+Cj0jZWT79KeAp/AdVkySrerZuKmEi
+z8prEaFY98HL+DxhPgPOOpr562p35w3frJeHQoQByRROhv02j0nJYPJFeoI7d/9f
+59tDPTMixxClj4uAggsLJsftUNI5TCxoQnr6ff7BdSY0e9Uh4QhBiQIcBBABCgAG
BQJVwoEpAAoJEKLgWC06Z9w2i4AP/2rx3FfmmI38hpPYtXNenYE6Ny3AP9W34T+y
OEL3uYc6BY+6DYhXMOocogqf7CpDdDgBQxW1eLKIi8tbOKrIAe+UFFZzRKtLbHds
Ibb7yEk3p271qgLiUOss4OydxU5pkZYa7g0sWyP6hyW8u2aRP3NAptbNQddvIBVz
@@ -588,13 +588,13 @@ JGh6g1dKRrL3vAi79ii0Bw8KvTBCr8D6r3qdw18qHKXu+XJr13y8mk25j5OOvqj3
FxpXzV16TCW48u0R+dYJcd62UubsnKIoyqDbG5R3Swj72k4KcMsO2xxKZIKaCBS6
FMAqIN8clA2XkCrScMwjw3iS2fIcaLMnuMueSsXDSLxMwMlfXa7uOOK22FQZuFtp
RNeZhrGjWVszHB6IY/V0VnqQwicAgtYvfHiJgD7J6FuDuwUAEQEAAYkBPAQYAQoA
-JgIbDBYhBHizQromx7KsaB6nvlJPDDeguUajBQJhSU6EBQkYtDypAAoJEFJPDDeg
-uUaj0FQH/AgI7FiR2IuRke+IMr9SdGK+tvhz3i606UnWQLNNnErvSdt+MZ5IKwLc
-/pFa/XyJgyqG3BBnuJTnUrmPLrdoLR+DCiJof2oLFLcO/sisSzxFnCxIZ7+7JmzH
-lJ0aS/rFslSbVVURzmUW/xkg7zN3xVqPMr87fbSNBFdUYyOk75w+C+NmY1DPsoBk
-mwkUq8N1t4wYJfarLp0grHyDPtMeE/MuHH8Wh1denM3MHRXbSyV8QK7EMvUTbpst
-yOCRtI9Qm9b46XKHxQe/Tb90pNDE1H7TGfv9KehyzBNvo15D8tUhV/BzoFIk74x2
-IYVhKL53KUZ8iAA62kadlaDZ3sMKHFS5Ag0EUkBYswEQANWnqU1AKouqng5u07xH
+JgIbDBYhBHizQromx7KsaB6nvlJPDDeguUajBQJk+mhgBQkcZVaFAAoJEFJPDDeg
+uUajC8IH+we2zu8lUrfP6+qaq06uHm2l5sTg82ItPH3KxqIzAd1DP68DSZVDb74q
+7HnXBTxVe/1iRbBUtlSgE+KQUnkimsNo0GDL6Y0pb+HWnEpX30ij/fmkfZBYsDa2
+Ti9dRzICXdfbLwkP7aXgyjqMkwX5qJrTgZ/emfN0ewYcvD5I+FCPH9vdo5Gfske4
+e1o5CAwdGaql42hZFTGj0ooVkUHuBXaffDT4UYjhn0K37bpMq5WF9UfvOnp840yx
+xtCoIjlTWptNGDPTQ7VlljXcHe1WpsTLmRQ+LlmU/dlACFCj1NjVh5Hk1B5OfX6f
+jahTiVyptYhZOy/T8zBgpKLpsz4GA165Ag0EUkBYswEQANWnqU1AKouqng5u07xH
J+/wKJ45/M6swpKH6S6ksLIPitwawKx82CZkSO/2IQN3l7002yD8uFZ8KxRp4+8L
P5Eg//oHhdUmQGSwaOgovBqLF9iGPqRDsmQ+5oxDfHq0AC5KnlxntlxTgVL46xEy
SzNh95Fd5JfaxP+jmOsFGyj8lMuUizEh4hR196xtkPrQI8EW3WH3Or68kpYaIMbm
@@ -606,7 +606,7 @@ GhKYH9SCokKDAc+fdiG/3FoNPtmwsRJ37IVcJH4vwtdKnrkrbPvsu/B94GeGR2m6
IWAeHewILu4jqQxq1R9c6HBd0jlz7/DasotiQRbeQ77i54UhxVZCodVYWD8ZKEIy
UDu4hPY8jIbQuQNs3UW9OUdobQO5C65ldZldtPKFQwEEvJe6HpsaSPLrx0ebHOId
5p+7Zvfnx+nV4VMbb9f8kkd/ABEBAAGJA1sEGAEKACYCGwIWIQR4s0K6JseyrGge
-p75STww3oLlGowUCYUlOmgUJEstc5wIpwV0gBBkBCgAGBQJSQFizAAoJELls3eqv
+p75STww3oLlGowUCZPpoYAUJFnx2rQIpwV0gBBkBCgAGBQJSQFizAAoJELls3eqv
i17Q6BwQAL+bScycTJbveiBiqpryFiTCzdWvpl0idHZNro0qq7EwUfgbrPJimlSJ
kPa7xrQkrkepwD0xuuzHnxn1tw0gSFlxc3zuyZYmPH9c18hHrn260s9jl+F57DR9
sNOBvQuqD7yo9st8dr0cMK0O5ppyYUUj4ysRnG2jve44DORPSdx2w2SpVf5+alKz
@@ -618,12 +618,12 @@ AiO4py3tNNFve7hVyaL+U67kjmDLYY/wiiqmcHhqNwSuIYnXB0k3m95TlbzJR0qR
5vyc+sAfZ5TY9mjiVYKfM+9J9bprHCXTURBSf72u5cNPliSVYBrJWSOSpXqqzVnf
tYPiBy/hWCScm2CUnHKnCvCn/pH5B9Tk+q29KwJ+vbYiqa4LCcijvgETWDM0FTOG
PZzScq4By4xRQBqITnJq1wvYK6XjkHjjAPDS6+0hpy9hwBZZ1wraCRBSTww3oLlG
-o/oBB/9AW0k9hcNGqG1kku8FN/IaRKEVH28mNGPEQArVXBYp+fO5CjkpsnPLFRAG
-DXuTYwY0KWUXt+HTXELkd96jpbTWcTV1JqJGPebRL19wDe2sdhwASVON/kQ/pUd1
-wllrAR6eanvk3iDYOeKv0KdWokBQn/+no80+fwqVeyITyh0kowkgHoci0f9dTDSP
-6kfQmWsDgY5y/CTRtU/km0wmhEQvwO8+US2CxBWxKyNaZzPyEzfLRUSZ9MIsMhpq
-vNwTbnnF6Fs7tY/LQgQQ6ZHWwHyDYLh9BpbrpLinBKv2Cc6ekhtVRcDXrwTkuFKv
-mkX0TWvgnjRELOp87XFhStGhjf7luQINBFJAWPIBEACrj+a+DZJJhDDaJ+aMWQp9
+o0flB/4kXNAGj1qFfqyHd/prqlPBk+rdOihGCpEhPC3PMQOq+9iU8r3irZQ/WzWY
+f4DQRQyxdjDai5WJFS09SXZ09HJyuZDAewZpUrUvx5XCQLS/2IxE+AU+PXh5z6BR
+QEDNb38GTVaX8DBpmOWWUXjHLiTZPsGH4mOapE9C32Wi1hzzz0K0wZPd4ffKzrh1
+NYgHh3orQ2up1Y4+KCwDgmd6GpOJwxDwlGnnbw050l5V9kZ0xLINI20zYCfeKrG0
+5nDTWUcgnkHiC4Z8zWykaNRr9dUsVKwIDWOTjZwGSZP2YZMRfXViKtZ8elI04aZm
+pqQr/LVoOdDB/91ANAbWImWqkJK7uQINBFJAWPIBEACrj+a+DZJJhDDaJ+aMWQp9
m374d8rKphzIKbdGGLU5nw/JaIlrpH90qSJW/mrY+p5JjH2a1uOpkTbAIc56Ulft
WFuohfir09hdln4KKCoPWN9fN40J/a21QD8YHdOOH+heU2ixBnlR6vw1dtnLkdsk
nb1HK39XqhelA3LPbMgzZRDrSbqFsh0zoWzgCtE07qaL0Cmf3x1FM+S6RtpW4Xn9
@@ -635,13 +635,13 @@ bNm6iLYu/Sxaiw/K6fK29RTra4TCHoFg0RgKKD4/FdwnzwDgdttfrNrz5Lw/AReh
UlJ5JNDKAyR1TGTviHvfJ2RiFsxxhm8hbqudpzuHAg60vd2/NI2Se895mCang+wt
3OjUJ6r48PPdFrAk6fQZzexmj1LGENSi5PDtnuw53Bo5PBS4UViHUR3QrEN424sI
8Oke2X1p3CJhMS5zW14vJwARAQABiQE8BBgBCgAmAhsMFiEEeLNCuibHsqxoHqe+
-Uk8MN6C5RqMFAmFJTuUFCRLLXPMACgkQUk8MN6C5RqMOUggAt/65IC/nwFBkFA7I
-wa1LWQRDepS73uA5KBIYk1Zie0UKZ100GpRb5LQgZsioN58EvtUjAXpZlFVktWkw
-5Dmm9u5FtDJcgCO99k/HEQ9ntbCJabgzn3hpjWMbPtUPSVu8E6rGsnA6WEoN8xWb
-FK9UDXeo9Ysu9K/1Vn+TrAtdiNGA0VqjORmzEqbUkjkd/YMRXFkQZfmupgFXA050
-DpcRp2laMhBYsKWIHGOFN75YiQvsorvGFZgF5Le2or2MvxyZ7W8zgexsPSk+6aZB
-wIL9nCeNilAHwmb1aumrEm3ft3td+akp8202tzZ905lMPpsAW/oPb6CbcNt9yQ41
-kzuZ7rkCDQRUJdh+ARAApRNbTWXe1eVON+XphA8dPuiuBkMHFta41jbfN8zJDeKM
+Uk8MN6C5RqMFAmT6aGAFCRZ8dm4ACgkQUk8MN6C5RqPffAf6AgiQ1/kDhYSrZvig
+KsfEfJE4JEW8WoV4XBCRiuroM1B/JO2+DloWhIEmo6cJV0O3ASJzFCO4sRJkp4rv
+mxzm4GrYeg9Er8IFXHGR/CVE64aCcvjoWydLiNJmpJ+3x8GrrbZCGAAb4cJmMvb5
+V96A/5tRddsWStqbm7A1FUMdbVxGBrrcuNrlgkgmNU3YK1U4cj9D/Zraz9lq4Pl5
+vkN49SJ4M2JWxANgizlKcbHASZ3306Pjn9iz8UXVzdGSQ++oYuXFLWnGZzoQl77/
+Q9wI8bZgOB5A1FG7Vx8MEEVM3AenDmlyzVqC+2fREK6J84VBWxynVNRDifqveYgG
+M8atoLkCDQRUJdh+ARAApRNbTWXe1eVON+XphA8dPuiuBkMHFta41jbfN8zJDeKM
zKWwcemOMu1sdPVgqKMFG+zCkh1Fd0A6QOWxF/wlR8H5XzzYGG0/MX3dNGTemvFj
g0Ral5GO/NgNNZzDSGukrePDmOeUGV/xsguFOPU5fHLmIM2T8Xpl3UW6r+S5Ei5q
sTcXYW/Yht7dIipzXeAToM06jraz6RSB/nUdVQY8M5Y1TXCbSnjStX3r3Uoepikg
@@ -652,8 +652,8 @@ TcN4X2QVF/awwG2cC67y+FDohnl8GBPuwrkKcxh+qIGoFxAIp9gF1uey/GJa7EH0
SNTqw6owl8g9XP4vVOCzkn4gC9A8q8Kk+dcRW2acxrjP/KblGUd1WFD/prmjQ0G2
ndiXDq5gBQ2ReXoGwbe0FYiqT4VYbSElE+GKKLB+HrOU3+XnfsoTNz61BJFEysXS
LkebG8HyvLREzSMJtqZ97SBFj2ATD8SZ1MUrP3OlNsLfELqU2ToPZ/nKO70aDDMA
-EQEAAYkDWwQYAQoAJgIbAhYhBHizQromx7KsaB6nvlJPDDeguUajBQJhSU7lBQkQ
-5d1nAinBXSAEGQEKAAYFAlQl2H4ACgkQAxRYpUeP4pNdjQ/9FyxYM1j3fME3Y9Yu
+EQEAAYkDWwQYAQoAJgIbAhYhBHizQromx7KsaB6nvlJPDDeguUajBQJk+mhgBQkU
+lvbiAinBXSAEGQEKAAYFAlQl2H4ACgkQAxRYpUeP4pNdjQ/9FyxYM1j3fME3Y9Yu
OCjIyybt/t+ulMoLgOJYuxiWf0Ju2qytO1pgj/FS2bsu34M3LfDTU95frCMFuEME
kI4T9fh209CHvH/A3FFaWk9lfa6j/h9Ytk3SypUMCBe9gqwS+oscXmC6bS+IkLJy
bJwPwYKFAbLJQAsALpj0TYunUOWQT+soqWXvdf9jKgi0Auc8Qogil/f1YQ/Z8XOK
@@ -664,13 +664,13 @@ f/3diIS/H6cqxXrTOAtir1SM+a1X+Qb4DEE9BCB05t268EG/MqdzqNiBby787Tsr
p+mivXC1sSQ+IMec8mKQ8KKJER5u6gId+oYF+btq+kPBn0leUA2urNCtptJ7GBWQ
7exSyGjPuSPrNFEijhtmYG4eiGd/SY/rCfRoDRVJL18I57B//loimdjwiSfN98IJ
hW13SysIVT+ctlmyzh+4Uykak0jGB7Z/DPzUxep84D2K8SsqZmnxu+kQwbzCh9bC
-4Czjdn/JokmS/ubRslWM2C7+VLUJEFJPDDeguUajztsH/i33SHyFGduxcwTvgiNw
-mzHj7UZAIj7TSsCax3EWcaqvK62ggPFqXs1VV71SSja8iXQWsSsYeIeICbVaytsG
-47gS5/QR+OeAFPF3QDpWKIF6DnGeBlBEMdjrqtZmqlPwqS1h7LL8ZUBIsyxOKaM/
-4lwDJscdxPQYlPw6u/3wDttTGBHSliaymRph9SouyqogFU0CDyJli2hVicm0f49T
-FCRObzXGdeIVIAALZ0D0Pm9hFOvY5GO/XvrodKvi6vZXF3QTtoNsWnayBkkqtBKH
-tg5gHNkzG4zMgvM5p1RcjR3qgNHTQzWPQh51PscunpRzm3VHBnP8H9KHaSQwv5pD
-lVC5Ag0EVCXYnQEQAL5ocGPQDmqSbLf++INC52xvCvlHpYpsU3G6DiLHDn9Y77C8
+4Czjdn/JokmS/ubRslWM2C7+VLUJEFJPDDeguUajS9gH+gPM/kDfgaOfST3hF1/8
++2mTbMDtL0vIThqCIiX1ZjQkOWApnmw1tvS3lIyuJxBpohM0xggvL7hBX7K7AuMs
+aEnBFRoXqeSbNx//mNAg4oB2cjR9SGzj2v3l5Xk8QfovLlIFGM8s9HIZv1MMqqz7
+AQ5yf56zVYvcaOZTzTleN6KbEQnMeotrh0ZZOOXg0dQQNi0pjmecEqqhxryLVM//
+mZSUIibDHQ4GR+eg48a100Cz6LyC0aG/wgBgVRd2DLQegWqQnxiY4UjEJXBdlp0p
+yVXhTJ/ERKFmhnXN5zJmIhg3xjMzB1guXimeRSnsaQMtFdcZqtWpYsKt157cUOWZ
+/Ea5Ag0EVCXYnQEQAL5ocGPQDmqSbLf++INC52xvCvlHpYpsU3G6DiLHDn9Y77C8
J+k9ELkGtAGuWd6P1wGm3Eg5u5xZUiz467dRsnlH2UkP1oXtAESz/nSvHUyluSHj
YZ9zgmZOWrF4z2MAJ0cXmXVubYlZhla7mSGgARdK/nLvbAwvFo0R8pNzvKvuLS4A
kgH/Pdh47wunB+1ipXYKfnBXdsz0PQxx87u+bwrjCrwR1NgmHg7RsQMmoAyh0f6h
@@ -681,13 +681,13 @@ NOamNLURVWpfEldWaxpRJBXbNwKh1fp8jYRL88P+JQd2oskFDoSFfRBEQsG3GhrU
MW/eTsybB8KkX/NrZ3U0vrIAng1bXwtlJ6L5nZtZdCubEizK5VUXkbve8Z2X6m88
GxMQg3iDr2O+xQUaZ8I+hDMRtiBcsfN9HuZ+crV2SpL+I+ccRU5w6r50ZPMaEE5A
xTCKeiniUv5Z9JFV+HVb41eF5qMbQo4/jscHm9GI3OmoK2hsC5nCo8hmJ22fABEB
-AAGJATwEGAEKACYCGwwWIQR4s0K6JseyrGgep75STww3oLlGowUCYUlO5QUJEOXd
-SAAKCRBSTww3oLlGo8URB/4mImJ2GqaUbacGkacYiiUfk+HV/4Yo/XLtTqk7OfqD
-g+TIO1jb0ILWTh4INpTdBzKMThBeTvh/wQa1HSO65/ZYXg/dJpvv+kpWWlTRmWaT
-FNryrMKqgvWyXXG+HTDHcTZ2tYXt/gjpCChP6vg/9EVEYz1zxJLr8Ls+Ipr0CGth
-g5BLOLfaWBjKeYrvs36IDqIyPXbmv00idzFWlYlLRUtn+6eJf81kwe+xqWwcDu6t
-RIqMJoh07FF8GDLMNKQUiGD2yyAkkE6Vl/0HmnSogjcFPB/TOOLbRhC6lGxNmbBz
-KF0bZOfFme9S31/HNa48BQvW9GWlcdZS21N4caKeRSn8
-=hWVp
+AAGJATwEGAEKACYCGwwWIQR4s0K6JseyrGgep75STww3oLlGowUCZPpoYAUJFJb2
+wwAKCRBSTww3oLlGo0I9B/0bfY+dlQ6BdPRtEbHiqKcID5lOsQvea2KO77BzAbHv
+abte4m/tfMoxXo97eRj+nRkjpKLAyM8xH59qDwdxk9b6ubNnnnXbW2qDj2vliXMr
+DwnDvvyjDqWrG9LiiGEKhPhqVz4oBljxFHd8wt1on6CVtWKRNKC/Kr+SdlDF/XGl
+u5TJKu7b8PM1bVQM8QSZCZCNZQLh2oIytlHDvYp685wKLVcrLm2Pg9KHFijYYsWj
+ecGq/UG3sn8/YYxTICuquxgBxbaHGcjHDTrGcfYBfML537ccE83VVbEChurL5uQg
+WI19VojqpWVi3f46QdDcxZjAaFpiBlhMYrD2331CMYq/
+=0uQH
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/glebius.key b/documentation/static/pgpkeys/glebius.key
index 18e1f4eade..2bbaa9df37 100644
--- a/documentation/static/pgpkeys/glebius.key
+++ b/documentation/static/pgpkeys/glebius.key
@@ -1,52 +1,37 @@
-// sh addkey.sh glebius 6C7E5E82;
+// sh addkey.sh glebius FEFF58C05D05CC22 ;
[.literal-block-margin]
....
-pub 2048D/6C7E5E82 2013-01-30 [expires: 2023-08-25]
- Key fingerprint = 6E06 7260 B83D CF2C A93C 566F 5185 0968 6C7E 5E82
-uid Gleb Smirnoff <glebius@FreeBSD.org>
-sub 2048g/11E89DCE 2013-01-30 [expires: 2023-08-25]
+pub ed25519/FEFF58C05D05CC22 2023-08-25 [SC] [expires: 2033-08-25]
+ Key fingerprint = FEAE 0B63 891C EADC B6D0 DCD9 FEFF 58C0 5D05 CC22
+uid Gleb Smirnoff <glebius@glebi.us>
+uid Gleb Smirnoff <glebius@FreeBSD.org>
+sub cv25519/778B86EDB6DA4DB8 2023-08-25 [E] [expires: 2033-08-25]
+
....
[.literal-block-margin]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-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
-=EioC
+mDMEZOhRoRYJKwYBBAHaRw8BAQdAWBrA6etXy+BrVw11ixY/+IPIwPauz6iNDSiP
++CHFaZ20IEdsZWIgU21pcm5vZmYgPGdsZWJpdXNAZ2xlYmkudXM+iJYEExYKAD4W
+IQT+rgtjiRzq3LbQ3Nn+/1jAXQXMIgUCZOhSJAIbAwUJEs/3gAULCQgHAwUVCgkI
+CwUWAgMBAAIeBQIXgAAKCRD+/1jAXQXMIvvxAQCe4/2vDUMUPX3yHY7wMrh9j8um
+Uyt+fMu4DjPPrJYi7wEAuXKhlR9fWJo9hy3V4sfvRlSK8BqTWxtC9HLcq0XO2AeI
+dQQQEQoAHRYhBG4GcmC4Pc8sqTxWb1GFCWhsfl6CBQJk6FMTAAoJEFGFCWhsfl6C
+hBABAJwTUTl7c2MHv+sol+pRJJKKxQNAR4JNQdfeoo1XVtchAP4w1A0A2aRDu8iq
+KGkf8ojK6wt1MbSROw+ElUsNjLwOz7QjR2xlYiBTbWlybm9mZiA8Z2xlYml1c0BG
+cmVlQlNELm9yZz6IlgQTFgoAPhYhBP6uC2OJHOrcttDc2f7/WMBdBcwiBQJk6FGh
+AhsDBQkSz/eABQsJCAcDBRUKCQgLBRYCAwEAAh4FAheAAAoJEP7/WMBdBcwi1r8A
+/1sdPi5RKp0ERc54LaYMCZSBSqTUFVkDdIQ9SNQeXXNgAQCUR0fXx51SSMb+byAg
+yaTkhiR0DCaATxm5tlwhfGm+Aoh1BBARCgAdFiEEbgZyYLg9zyypPFZvUYUJaGx+
+XoIFAmToUxMACgkQUYUJaGx+XoL3HAD/Yuefp15PWBSKJughGrvH9b0Dcek++SEW
+Sdu3NNF1ZJAA/A7lxLaqHWbLTPjF61ksvRH+WWtj5miy93wj5Wv+a9QduDgEZOhR
+oRIKKwYBBAGXVQEFAQEHQDBrzHEEU57rBG2BI/pBODcxc5XWFwVBtxQuhlD+78wa
+AwEIB4h+BBgWCgAmFiEE/q4LY4kc6ty20NzZ/v9YwF0FzCIFAmToUaECGwwFCRLP
+94AACgkQ/v9YwF0FzCJ4DQD/cYDncoVcDFJgr8r3huUAe8rP9ak9FyTEdtBH35gr
+734BAIHKT/fi5x74E+XU40HPca5XJTL/eSWl9FIjUfHpOPQJ
+=qAdd
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/gnn.key b/documentation/static/pgpkeys/gnn.key
index 00d4ed220b..d1dfdff3df 100644
--- a/documentation/static/pgpkeys/gnn.key
+++ b/documentation/static/pgpkeys/gnn.key
@@ -1,12 +1,12 @@
-// sh addkey.sh gnn D3EB383C47F5F375 ;
+// sh addkey.sh gnn 08FD53639F320872 ;
[.literal-block-margin]
....
-pub rsa4096/D3EB383C47F5F375 2020-08-11 [SC] [expires: 2024-08-11]
- Key fingerprint = CD55 D022 491F 783E 1FC7 7F66 D3EB 383C 47F5 F375
-uid George Neville-Neil <gnn@neville-neil.com>
-uid George Neville-Neil <gnn@freebsd.org>
-sub rsa4096/2D00124E8C2C6FD4 2020-08-11 [E] [expires: 2024-08-11]
+pub rsa4096/08FD53639F320872 2023-09-05 [SC] [expires: 2027-09-05]
+ Key fingerprint = E438 5C36 34BC AB5A 8AF4 CD49 08FD 5363 9F32 0872
+uid George V. Neville-Neil <gnn@neville-neil.com>
+uid George V. Neville-Neil <gnn@freebsd.org>
+sub rsa4096/05CB2F830F4F2F32 2023-09-05 [E] [expires: 2027-09-05]
....
@@ -14,69 +14,67 @@ sub rsa4096/2D00124E8C2C6FD4 2020-08-11 [E] [expires: 2024-08-11]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-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
-zQ==
-=iwSr
+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
+=EjBh
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/gordon.key b/documentation/static/pgpkeys/gordon.key
index ce5ff0f846..a5c37d717a 100644
--- a/documentation/static/pgpkeys/gordon.key
+++ b/documentation/static/pgpkeys/gordon.key
@@ -2,11 +2,11 @@
[.literal-block-margin]
....
-pub rsa2048/E5F7BCCBA3BDDDF8 2016-04-23 [SC] [expires: 2023-03-25]
+pub rsa2048/E5F7BCCBA3BDDDF8 2016-04-23 [SC] [expires: 2025-03-19]
Key fingerprint = BB28 D40B 360E EE93 6AED 156F E5F7 BCCB A3BD DDF8
uid Gordon Tetlow <gordon@tetlows.org>
uid Gordon Tetlow <gordon@FreeBSD.org>
-sub rsa2048/62B06BA80727E1FA 2016-04-23 [E] [expires: 2023-03-25]
+sub rsa2048/62B06BA80727E1FA 2016-04-23 [E] [expires: 2025-03-19]
....
@@ -29,13 +29,13 @@ QAHsAzENDSDXsDj73PQk092hiMoLtjvTuSc8VRM3nOp4MQezYykCmfiO8aZVcclZ
a8JueTT4mxrh4f4L8pFqqZ4tQgFfaq+HqUPoQ8Qvr+QdcjMEudvIXNwzJHq7zEyg
zb5XotL0HFvvya5NXWn5Ss5GIMh+OkAdcsYCr3kpdTIL447WpCOWplddWqmwHTD7
12+J2ZfH/2z4p9RznX17WVk/4n8zItXf3sR604kBVwQTAQoAQQIbAwULCQgHAwUV
-CgkICwUWAwIBAAIeAQIXgAIZARYhBLso1As2Du6Tau0Vb+X3vMujvd34BQJgXKrg
-BQkNA/t3AAoJEOX3vMujvd34HFoH/ifJSgQcc2YeEEVyHLuhP4qseiU+tRstaiTy
-1uKHOI3HTG575Lg5lWbIw4OVBap073ZYMlhTOEiQ4xARqENfR26jWHIYvK5qApMb
-vGJPVDcGqbd+YV9VUEr0llj/quqDo7qwjxgcjJcIkHTns4gmzZdq/t/c5kuBhCF3
-ajxbxJRSrqry4OGbTLXfZ8GGO59WK5wyNoil8X6/6JCeu14lCpJxHOX/oYPrOpNO
-GQ9auBYS2clXNfjFZeIeQsIlBPdCFOPeBaHA3dZts98U4rWAYTxC0P+A8V+PHDTN
-no5ii0kC4ZDy46ENJAUwA18dqZhYNWlianG2yYQnTNxUvy0noemJARwEEAEIAAYF
+CgkICwUWAwIBAAIeAQIXgAIZARYhBLso1As2Du6Tau0Vb+X3vMujvd34BQJkF9Ri
+BQkQvyT5AAoJEOX3vMujvd34Pk0H/RcqOaPdiDPTpPTyV+hDAbqNYLY0h/00YNQV
+FJITYdUvCahLU2enFRErZjrRphjbEfPbG7YUcSdNX+o7nvcjreEX0tv/uxhbB43n
+4iqyZIcbLe1JgU0xSWN3wsBBj2/CJVH0b5ulq0TxEzVGjdIhnALDWa64kFFaRY78
+4KRHUpkxmIPLz3Xy6KmiQzDB4y5ufm/xq2YjnimUXAOS5HMcku3wiwvkWU6VQvKt
+HoXaZJhjWnIBYxnHI0F14+NHIbRZbVjWtUeSCbouOKtHSiF2h5tfB3thcNvX8rM1
+nm/VkTRPXIA9OgbXtLaOyKPGfI1uP+oEJqSsdciTIvvKrKVdbuqJARwEEAEIAAYF
AldcTckACgkQsRs4BJwO4BDiugf/ZF51sXkHPPfVgwe5Gn2Cu1LjBdjM5/+V1bQ3
aEQwYm+Wby7COrvioREgDXX99u8GOe7vIjYakvEp1/so/Hk3tn9uSn+o14+/7M8l
65Q1mAsrYm7zDsMU0MlqDE94qXtxB4BKxgQnpYx0pWJwyczDY1udS99kmmflwoCn
@@ -154,199 +154,213 @@ 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
-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
-DetfxteN45acYt1c8g==
-=xus0
+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
+=K+4S
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/grahamperrin.key b/documentation/static/pgpkeys/grahamperrin.key
new file mode 100644
index 0000000000..740b55d346
--- /dev/null
+++ b/documentation/static/pgpkeys/grahamperrin.key
@@ -0,0 +1,92 @@
+// sh addkey.sh grahamperrin B767486F4A18D40B ;
+
+[.literal-block-margin]
+....
+pub rsa4096/B767486F4A18D40B 2022-06-02 [SC] [expires: 2025-06-01]
+ Key fingerprint = 593F E5B2 C307 07ED BC97 2F0A B767 486F 4A18 D40B
+uid Graham Perrin <grahamperrin@freebsd.org>
+sub rsa4096/EF7EA3AE9BC3C20D 2022-06-02 [E] [expires: 2025-06-01]
+
+....
+
+[.literal-block-margin]
+....
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+DvD3lVGQcO/xnwHod2q4HcNkLu+PEwss
+=PnBx
+-----END PGP PUBLIC KEY BLOCK-----
+....
diff --git a/documentation/static/pgpkeys/gshapiro.key b/documentation/static/pgpkeys/gshapiro.key
index ccc86b3b0e..22cb569584 100644
--- a/documentation/static/pgpkeys/gshapiro.key
+++ b/documentation/static/pgpkeys/gshapiro.key
@@ -2,14 +2,14 @@
[.literal-block-margin]
....
-pub rsa4096/7B529648EE857264 2017-08-27 [SC] [expires: 2022-08-22]
+pub rsa4096/7B529648EE857264 2017-08-27 [SC] [expires: 2024-10-03]
Key fingerprint = 296C 94DB D028 0245 BFD3 91D7 7B52 9648 EE85 7264
uid Gregory Neil Shapiro <gshapiro@gshapiro.net>
uid Gregory Neil Shapiro <gshapiro@FreeBSD.org>
uid Gregory Neil Shapiro <gshapiro@sendmail.org>
-sub rsa4096/E06797B94ECB7FF3 2017-08-27 [E] [expires: 2022-08-22]
+sub rsa4096/E06797B94ECB7FF3 2017-08-27 [E] [expires: 2024-10-03]
Key fingerprint = 556B B17C EA8E 3237 AC47 412B E067 97B9 4ECB 7FF3
-sub rsa4096/389DBDBF7CB42F23 2017-08-27 [A] [expires: 2022-08-22]
+sub rsa4096/389DBDBF7CB42F23 2017-08-27 [A] [expires: 2024-10-03]
Key fingerprint = 3D1C 235E E7C2 8671 12E8 C9B6 389D BDBF 7CB4 2F23
....
@@ -169,379 +169,441 @@ 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
-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
-vPCbWO+l
-=B3Sx
+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
+sg==
+=gV9M
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/jadawin.key b/documentation/static/pgpkeys/jadawin.key
index 3fca609c31..a385aa7399 100644
--- a/documentation/static/pgpkeys/jadawin.key
+++ b/documentation/static/pgpkeys/jadawin.key
@@ -1,14 +1,12 @@
-// sh addkey.sh jadawin 3D5DD05DE3EDC705 ;
+// sh addkey.sh jadawin CB8AC0D04E833FA4 ;
[.literal-block-margin]
....
-pub 4096R/3D5DD05DE3EDC705 2014-05-27 [expires: 2016-05-26]
- Key fingerprint = C1CA C5C4 F29A 40BF 507A D85B 3D5D D05D E3ED C705
-uid Philippe Audeoud <jadawin@tuxaco.net>
-uid Philippe Audeoud (Main ID) <philippe@tuxaco.net>
-uid Philippe Audeoud (FreeBSD) <jadawin@FreeBSD.org>
-sub 4096R/BC29A282B624266C 2014-05-27 [expires: 2016-05-26]
-sub 4096R/705007E333EEE843 2014-05-27 [expires: 2016-05-26]
+pub ed25519/CB8AC0D04E833FA4 2024-02-29 [SC] [expires: 2027-02-28]
+ Key fingerprint = 1612 31E3 A1B5 814A E354 20AA CB8A C0D0 4E83 3FA4
+uid Philippe Audeoud <jadawin@FreeBSD.org>
+uid Philippe Audeoud <jadawin@tuxaco.net>
+sub cv25519/FD655BBB6C112433 2024-02-29 [E] [expires: 2027-02-28]
....
@@ -16,118 +14,20 @@ sub 4096R/705007E333EEE843 2014-05-27 [expires: 2016-05-26]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-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
-=amXj
+mDMEZeBCGxYJKwYBBAHaRw8BAQdAgPYDddqhot2D27V4ix52swiMlibbkVmZB3Vv
+RbFiZGG0JVBoaWxpcHBlIEF1ZGVvdWQgPGphZGF3aW5AdHV4YWNvLm5ldD6ImQQT
+FgoAQRYhBBYSMeOhtYFK41QgqsuKwNBOgz+kBQJl4EIbAhsDBQkFo5qABQsJCAcC
+AiICBhUKCQgLAgQWAgMBAh4HAheAAAoJEMuKwNBOgz+knHwA/itZJEXtIk48oDhf
+ZKDQyDJemN7EQnxNKZnBpX2NJfZ9AQAAb28SyE/OCeTMuJBBbhaCNPBBWAwYPq+G
+pTVgNALJCrQmUGhpbGlwcGUgQXVkZW91ZCA8amFkYXdpbkBGcmVlQlNELm9yZz6I
+mQQTFgoAQRYhBBYSMeOhtYFK41QgqsuKwNBOgz+kBQJl4EKJAhsDBQkFo5qABQsJ
+CAcCAiICBhUKCQgLAgQWAgMBAh4HAheAAAoJEMuKwNBOgz+kuIMA/0PAYZc7tEAs
++erQCP6SFCTJR63l2ViC9J5gwax6zPmBAP9eUXgUdet6VA2fEWzWg/pFnJSc0XFZ
+dqzV/NRhnA02C7g4BGXgQhsSCisGAQQBl1UBBQEBB0A26xrzvCarNRQe9vYhHZuz
+pKtf8KHlETPC/9Gwu+p0VQMBCAeIfgQYFgoAJhYhBBYSMeOhtYFK41QgqsuKwNBO
+gz+kBQJl4EIbAhsMBQkFo5qAAAoJEMuKwNBOgz+kxPAA/3sXbviB19SLOHBnSqhZ
+21uXZz1w2jhVX1hnKKqv+zEWAP9qXo7vS2Ilo4Pz6Q1dw/ZAupkWUBpPImpWvDbp
+TwDKBQ==
+=9rp5
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/jah.key b/documentation/static/pgpkeys/jah.key
new file mode 100644
index 0000000000..21de8e5f86
--- /dev/null
+++ b/documentation/static/pgpkeys/jah.key
@@ -0,0 +1,54 @@
+// sh addkey.sh jah BB9F8BF992841D1B ;
+
+[.literal-block-margin]
+....
+pub rsa2048/BB9F8BF992841D1B 2015-03-09 [SC] [expires: 2026-02-07]
+ Key fingerprint = D6F7 142D E415 8182 FFC5 E685 BB9F 8BF9 9284 1D1B
+uid Jason A. Harmening <jason.harmening@gmail.com>
+uid Jason A. Harmening <jah@FreeBSD.org>
+sub rsa2048/65B797684FD3EC2F 2015-03-09 [E] [expires: 2026-02-07]
+
+....
+
+[.literal-block-margin]
+....
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+PfTj
+=m7Yt
+-----END PGP PUBLIC KEY BLOCK-----
+....
diff --git a/documentation/static/pgpkeys/jbo.key b/documentation/static/pgpkeys/jbo.key
new file mode 100644
index 0000000000..5068aea2a7
--- /dev/null
+++ b/documentation/static/pgpkeys/jbo.key
@@ -0,0 +1,66 @@
+// sh addkey.sh jbo F01712834F43375C ;
+
+[.literal-block-margin]
+....
+pub rsa4096/F01712834F43375C 2023-09-08 [SC] [expires: 2026-09-07]
+ Key fingerprint = 99E1 A540 90DD 424D BECF 6C05 F017 1283 4F43 375C
+uid Joel Bodenmann <jbo@freebsd.org>
+sub rsa4096/A285A2AC71B8545F 2023-09-08 [E] [expires: 2026-09-07]
+
+....
+
+[.literal-block-margin]
+....
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+Zh0ESH6ZmfCP6j0=
+=OHS+
+-----END PGP PUBLIC KEY BLOCK-----
+....
diff --git a/documentation/static/pgpkeys/jfree.key b/documentation/static/pgpkeys/jfree.key
new file mode 100644
index 0000000000..205ca2511a
--- /dev/null
+++ b/documentation/static/pgpkeys/jfree.key
@@ -0,0 +1,55 @@
+// sh addkey.sh jfree ;
+
+[.literal-block-margin]
+....
+pub rsa3072/A8578CAE88863843 2023-11-03 [SC] [expires: 2027-11-02]
+ Key fingerprint = 8B64 64B3 0EF0 30EC 3CF0 1A3E A857 8CAE 8886 3843
+uid Jake Freeland <jfree@FreeBSD.org>
+sub rsa3072/986EECB0C108727F 2023-11-03 [E] [expires: 2027-11-02]
+
+....
+
+[.literal-block-margin]
+....
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+/JDeKdMr8GdUzuRGtGHCQEUjQqLiRinmre/TNA==
+=ou9q
+-----END PGP PUBLIC KEY BLOCK-----
+....
diff --git a/documentation/static/pgpkeys/jkoshy.key b/documentation/static/pgpkeys/jkoshy.key
index b20cb01da5..fa67bae8d9 100644
--- a/documentation/static/pgpkeys/jkoshy.key
+++ b/documentation/static/pgpkeys/jkoshy.key
@@ -1,17 +1,22 @@
-// sh addkey.sh jkoshy D93798B6;
+// sh addkey.sh jkoshy ABB86ED3D93798B6 3304E1EA21BF01DF ;
[.literal-block-margin]
....
-pub 1024D/D93798B6 2001-12-21 Joseph Koshy (FreeBSD) <jkoshy@freebsd.org>
- Key fingerprint = 0DE3 62F3 EF24 939F 62AA 2E3D ABB8 6ED3 D937 98B6
-sub 1024g/43FD68E9 2001-12-21
+pub dsa1024/ABB86ED3D93798B6 2001-12-21 [SCA]
+ Key fingerprint = 0DE3 62F3 EF24 939F 62AA 2E3D ABB8 6ED3 D937 98B6
+uid Joseph Koshy (FreeBSD) <jkoshy@freebsd.org>
+sub elg1024/F8E93D4F43FD68E9 2001-12-21 [E]
+
+pub rsa3072/3304E1EA21BF01DF 2023-02-17 [SC] [expires: 2026-02-16]
+ Key fingerprint = BDC7 74CB D0B7 38A9 CA1D EDEB 3304 E1EA 21BF 01DF
+uid Joseph Koshy <jkoshy@FreeBSD.org>
+sub rsa3072/8B34C9A594327909 2023-02-17 [E] [expires: 2026-02-16]
+
....
[.literal-block-margin]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.0.6 (FreeBSD)
-Comment: For info see http://www.gnupg.org
mQGiBDwi3FcRBADkiWSSJSOX38CIPgbUnnDQ8S79eZ0zQYnYn5aeRMi7w0B4SnQP
1DcFZ/EHNtQWJTCaQBWQZZWvL1ZjdK284YrpSKs7gfoV5BufcFqKatewWZUfsUad
@@ -31,8 +36,46 @@ ZhOuEF/uql7IDKMQcOfsvVrF8cZfNwAECwP/UvxNG/RUOlOHdRo3hY3H5l7zmaCi
AwUU6Z+LxDn+fwERX7wL5rasafi1r7/9VvGADfelpxKR0kZM1eKYPtri1zS6Zm5a
CC+QVyyoTcb+x0mWForq6FxLDf7+l/O0TuEG7VOH4RgLaT2N33yoScEvxdB/Qo4w
KnT39F7lYjbzBvGIRgQYEQIABgUCPCLcYgAKCRCruG7T2TeYth30AKCzp2KXBqsa
-N6wOyM+tHQ4DKNMasgCglJCipoxpnnvCsGiZJv9AgNQFDGM=
-=a9D2
+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
+ayOLphA+8IQ+1Iw=
+=dXcW
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/jrm.key b/documentation/static/pgpkeys/jrm.key
index b01d52bcf4..6e16377eb7 100644
--- a/documentation/static/pgpkeys/jrm.key
+++ b/documentation/static/pgpkeys/jrm.key
@@ -2,14 +2,14 @@
[.literal-block-margin]
....
-pub rsa4096/36A40C83B0D6EF9E 2015-03-23 [SC] [expires: 2022-08-01]
+pub rsa4096/36A40C83B0D6EF9E 2015-03-23 [SC] [expires: 2024-08-04]
Key fingerprint = 55B0 93A7 26C3 8855 7122 BAD5 36A4 0C83 B0D6 EF9E
uid Joseph R. Mingrone <jrm@ftfl.ca>
uid Joseph R. Mingrone <mingrone@dal.ca>
uid Joseph R. Mingrone <jrm@mathstat.dal.ca>
uid Joseph R. Mingrone <jrm@FreeBSD.org>
uid Joseph R. Mingrone <jrm@freebsdfoundation.org>
-sub rsa4096/D9F31F5F75F9B14D 2015-03-23 [E] [expires: 2022-08-01]
+sub rsa4096/D9F31F5F75F9B14D 2015-03-23 [E] [expires: 2024-08-04]
Key fingerprint = 9A56 C620 3523 8308 953F ED18 D9F3 1F5F 75F9 B14D
....
@@ -31,18 +31,18 @@ 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
-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
+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
@@ -244,18 +244,18 @@ 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
-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
+1u+eBQJi7TnlBQkRoDSVAAoJEDakDIOw1u+eIgIP/1tKrdqZLpyO7v0OcPDsJ4wM
+gQpINximfGvEn0BYcsviPTVpRxIba/6nI5rKhOXoy/pzWPaAM5wAiUQCIHl9vqfo
+QCgjmTXpV132VH4Sy4PgtpCj6dk3cJleP+auSbSW2EG4sZOKQRkRtAq27BjCPOlS
+jGe3IXXsu06P/G+8pLBqPF7aJa3t/bokOJvcwzCWm5CsshVVVO3I9wN6yGa8X1oA
+xmsqXvy1LJN1bgAdKKuAHuWQbftdkmPwC/yOuO4pBbCL4gsbi1VkQwx9ZZt/Sbnd
+D69kyZIZLBqcXzVm1CmkrdlC/BfrcrNjgSj8V08KGUyc8O7vja/2VempcziP4+sQ
+uUyG9y7Ze2R4W9/MtnUBc2UVOvusvH4gxL9pRVR4Xvkwm5NTn6aLEkGKWBhvPzUc
+rwbu5p9GOgOsaRD4V3mVFER3eDtjO5XOWivv3epYUOwZawGdDZQBYGjQBO1NZW+N
+IV5nB7pPMJqEvVZndJ6eI7OqEJLwwl+vgHD603NF+QFMy5ppVmv2PNtW8sYJyUIM
+bKM5GxDK3xhlalLmjSZ5SXFmfdx4tAOLvySdFj9BMwY0HPPws7XcPIjCmovRr30l
+J15uf0l6B7vwEIIp1Zk62034OQjqZXNfMYJ67UTo9YHk3VAcKfN7hjB+oP7HDTfT
+lagwy6VH8+7O9RsYDynIiQEcBBABCgAGBQJVEMvzAAoJEO50AsWCQcqcrZ0IAICL
WLLMb3sci+xiezoxdLtGsGSEedGxX0xI5FsjUFX9uapaJWGmZDqvD0yjDuDl8FBj
vhbwBgYm3sJwFFvlYll+1kVslt3AMFSs+C8Qe5R0gZvOeSUTe/3hjE3mtWplnwyw
Ox+Fm7/bep0sDxGvWoPUsmGkBqKjz7d2zogbwDgDeWS30N/bouc2qtcZar503q92
@@ -426,18 +426,18 @@ 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
-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
+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
@@ -608,19 +608,19 @@ NSfufAtyzgS7uKRu7QUbPRjHt+sKlfzGO+McHDTYLH+Vu9rNU7U1iKad2NIVIawm
0TRTyFBtJ4io4SpBEMvqvwkjHb4oWDyDZFW+1gRSj4GKyrRJ+324hGAfqL8dbxt6
pGIy9/vfNAksoYiEYvNT1jnnhqrtyRlIvTd8jcXYy5kkFRokxUTXCLQkSm9zZXBo
IFIuIE1pbmdyb25lIDxqcm1ARnJlZUJTRC5vcmc+iQJUBBMBCgA+AhsDBQsJCAcD
-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
+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
@@ -633,20 +633,20 @@ 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
-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
+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
@@ -657,19 +657,19 @@ NsucfNKG8UUvD/AtNTTUyNSSEBTu75izqXTd3itT6MQYjjKQ+DC/TYsKFidZoSqI
03yoIJbzhOpqRDsrdMN/DUYQRtcBYCNQ0FDcaKqxKsabwIAfhrIoTHsveDr0m+XP
yiAycG4sIgcEgJavuzYSsK1/Y0K6wnAG2bW2aLBNqpzupNG7hoXO61RuVeY9oWX3
W77GjOc3aC5T6qXm06EBmyC6lZKKzpVLLLIEObbnX9xxIVN6syC5NUfwnTONvQAR
-AQABiQI8BBgBCgAmAhsMFiEEVbCTpybDiFVxIrrVNqQMg7DW754FAl8jRWoFCQ3Y
-4xoACgkQNqQMg7DW756TRBAAhL9J75ng8WO2R+1IWNeRjoQPCkElGcvHBWR/eCub
-eUIX688OtCnRhxxNs204eWlroDaPkMOICAY9RJLV8MSrxpzfxLtjbSF6MtJe2Qwh
-p9Kem3pED+0xSMsfGHCDATzgdm5gLNVmSnh1PBHmAhO8Zyhewj77qS21XlkQvF9D
-pfu+2YG3WvvOBVOyftEtBPKda+E1hcOq23JiC53JpdSb4CEDCZnnGTOEC7TsI9W7
-fdug+95QFdb6EAjAM++V8gJJiLpIdK9rHKXuPFF8a/bN+Nn/A0EILfb71+0yjp9H
-F+46ep6jo7eNd/O4jps/nIsDG0b1Mdu2CtQInR41d4DHyGTLb4StQ97OIG2YVjW8
-EvJ6OU+X11qn1GRUmiqLlHUuRuma490KpINg14vov1B/8FQ3gk86r3KiD8Q+LxqI
-3djjcTm4D1bc85+Q0wigZWjlbXteiXEBn2agaO0FPwrg3QToQs0Mn4W4XUZV99TG
-7eREA81L8Rljdu5MXTqKch36Fd175u/SIZ09ASHxhJeQa5v2G0gFQHgkc/867X/f
-zBwXr9nkA0m//aXz5WFgt7IgcCCqrjIc5xH5kra94GGkbvVmuWDqWHpbEwQe2jat
-fhUcN5Afi4YwzxWO6TUqv8Sst3qFpCGFOPI73c6QYY8O9T60EVqSET8pfNGncaXl
-8Zc=
-=YR4M
+AQABiQI8BBgBCgAmAhsMFiEEVbCTpybDiFVxIrrVNqQMg7DW754FAmLtOfEFCRGg
+NKEACgkQNqQMg7DW756JRw//fGyWQEupmTWkdQycXolk4D5rnAOdhRZTSYNWCAgB
+rKV61vhmycabu4d5DV7Y+86IpixNDZVj6NFEdYfZlA7ne2BfBsJI2AEYU58LIZ6W
+w7mO1CtUteFaXRf4FcZIMBqSmgzzW+p3fXCKpMetTCMJfJIAq8B8LnJqEQdBwjZQ
+bURrQjnc4NOMBHGhwocb1Eeet98KQjDP1Q+44NECXFIoF5MbUTQWs5Td+FZLc8W+
+VF/zaRMWUJ+o2fJFPWEYDpsQk9mMJJF2B/ECsKZizIsimh03QkMtRGUhuE5B6E8e
+tIx1AuVQtmPbsaMbkS1CdTZ2vFaq2se5secZDoA0Fxl8lS37dy+wc2ygQkY7INqL
+/NrNFOLajeIKggWHU97zm2uTBssJSlY+Dqe6C8IlWlXFsXfuSy5bPkBJ2G15JBjG
+FHfHli0DNrjrW05Dn/ftkG1sagT2I8x7u7wGgV25Axtml0e26ypqXk4/GUhroNxx
+E/FXkCzyZcGz66m6JExCZ9k/kNxt2NGSMgGQoWNjy2Xh0o+AeO+1E6+emhKPY0xH
+L0BS3S9/P70Ml3VZGvFzBzqKw98KgH6C17eh40wMcHrT2XhICNpAMWFrG+CdDu69
+nPKKzSWNeun+rhHlSnsdw8/a+IWZD5HTrnf4kRASaeYxAX+7N6G1P6wQEjwkXzAX
+RYE=
+=TCe1
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/kaktus.key b/documentation/static/pgpkeys/kaktus.key
index f9c789f45c..62e5afdbb5 100644
--- a/documentation/static/pgpkeys/kaktus.key
+++ b/documentation/static/pgpkeys/kaktus.key
@@ -1,14 +1,17 @@
-// sh addkey.sh kaktus 9DE435AB65096082 ;
+// sh addkey.sh kaktus FF627E3155A79933 ;
[.literal-block-margin]
....
-pub rsa4096/9DE435AB65096082 2017-10-28 [SC] [expires: 2022-10-30]
- Key fingerprint = F38A 492F 5735 2A36 263C D807 9DE4 35AB 6509 6082
+pub rsa4096/FF627E3155A79933 2021-07-23 [SC] [expires: 2031-07-21]
+ Key fingerprint = E8B9 121D BFC1 7D84 A35D 9AEC FF62 7E31 55A7 9933
+uid Pawel Biernacki <pawel@biernacki.dev>
uid Pawel Biernacki <pawel.biernacki@gmail.com>
-uid Paweł Biernacki <pawel.biernacki@mysteriouscode.io>
-uid Paweł Biernacki <kaktus@FreeBSD.org>
-sub rsa4096/5F77177A2E0E3478 2017-10-28 [A] [expires: 2022-10-30]
-sub rsa4096/0F977967B07A7C5D 2017-10-28 [E] [expires: 2022-10-30]
+uid Pawel Biernacki <pawel.biernacki@mysteriouscode.com>
+uid Pawel Biernacki <pawel.biernacki@mysteriouscode.pl>
+uid Pawel Biernacki <pawel.biernacki@mysteriouscode.io>
+uid Pawel Biernacki <kaktus@freebsd.org>
+sub rsa4096/339C2CC86DF97C5C 2021-07-23 [E] [expires: 2031-07-21]
+sub rsa4096/99E0A14ACBCA7DA5 2021-07-23 [A] [expires: 2031-07-21]
....
@@ -16,129 +19,144 @@ sub rsa4096/0F977967B07A7C5D 2017-10-28 [E] [expires: 2022-10-30]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-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
-=MiAR
+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
+=yt8V
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/karels.key b/documentation/static/pgpkeys/karels.key
index b02cb725e7..91ab596c86 100644
--- a/documentation/static/pgpkeys/karels.key
+++ b/documentation/static/pgpkeys/karels.key
@@ -1,11 +1,12 @@
-// sh addkey.sh karels 8CCF69ECC5CF284F ;
+// sh addkey.sh karels A2CEDE3E0382D8B8 ;
[.literal-block-margin]
....
-pub rsa2048/8CCF69ECC5CF284F 2016-06-16 [SC] [expires: 2022-08-31]
- Key fingerprint = EAB9 5249 B48A A991 130D 6746 8CCF 69EC C5CF 284F
-uid Michael Karels <karels@freebsd.org>
-sub rsa2048/B4CE5C0549FFC668 2016-06-16 [E] [expires: 2022-08-31]
+pub rsa4096/A2CEDE3E0382D8B8 2024-02-07 [SC] [expires: 2027-02-06]
+ Key fingerprint = AA61 6F8C A1E5 A257 F7E9 FC21 A2CE DE3E 0382 D8B8
+uid Michael Karels <karels@FreeBSD.org>
+uid Michael Karels <mike@karels.net>
+sub rsa4096/63D289305A038041 2024-02-07 [E] [expires: 2027-02-06]
....
@@ -13,33 +14,67 @@ sub rsa2048/B4CE5C0549FFC668 2016-06-16 [E] [expires: 2022-08-31]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-mQENBFdiAwQBCACo9yOG/128ozKKBtbpjUUkE48+rXvGqlO+gf0tn2qsXxLg61Bu
-eneBKwXoBmR2bn8MrqPhsP85CgL7F5cNDH4z9FsqKtGGKmDxK0W5LFKm5v8WwVYt
-VoQakEdejiZHWJqxgMzcKhJ/ZgPCjWcOr0dqdGV8nGpKj74lR0OEuillVYfrc0Lt
-8Whdcm2U09AQFIjftReSaqHaBghkoQs3Q2/bbGNlfrJgODfXkp/waUusTraWkOPm
-uNf56WyXA9P+89bET7EMLe9CQ89FP1/hzSFIyb9izz1mGEf6fL8+m6zze5GWQ7Fs
-kBITK0YTLpRLG7YLo9nwcEf3xaJSFhYIAcs9ABEBAAG0I01pY2hhZWwgS2FyZWxz
-IDxrYXJlbHNAZnJlZWJzZC5vcmc+iQFUBBMBCAA+AhsDBQsJCAcCBhUICQoLAgQW
-AgMBAh4BAheAFiEE6rlSSbSKqZETDWdGjM9p7MXPKE8FAl1sMeIFCQutyV4ACgkQ
-jM9p7MXPKE+L/ggAhvGHSKFi/J+MLJMgtPxaC0UBJG1FGfYXzLgghL7b8hLQ2ONd
-VuqTuNjFQ+B7vrff/XQSoY/VCJ876Oj09dSjzKsNGnCgD9mqfGDeBiXWeLeqKs/G
-QpNQzOJhodrCGlUQCC8hLwoQ8Ngou9QdUNVSFD7prZKpvU24Q1DsSu6glDFckbKa
-UQKGy9YYNx8uuZORAOzTqH5TJh1s9jwXHG9ziSNLejPtE3z1d3CBdjIIAVuImtq6
-H19cpTiDHGgsneAfaC5UiQGdSeq6IynEEYooJjPzz6kjHnzhrQGUPR2msx4QVhc/
-gm8TRjZm4XwdXjx8AgTCBaGORmloZamNzM1q3LkBDQRXYgMEAQgAsUyEmUzp1Kja
-+yyvNdMpKn0+Ux3bmWYLzXwNNuGEh4lmp+GIw5d4LzS/ouSCaAb9JDUS77rQjEqS
-T2UUeg2yr5GwEj4Yk50tTRL7PGywyvM4AH9/4RYnQLSVhu7er39+HP5YCgtn0J5h
-01A57BTQsmzw09Lh0RskU9nB7+L3N4By+C96xxK8/5qPzTLVHako5GdsQhup7ham
-fyMEXsu3PaPpUb9LS72HR0vRe8c3LfkdmAxHzEVrvgRxVz71iEIj0ZmdOJ9vIG3Y
-Y7bY2oSdZr6/KosqaeuZLTimAzKED+VJ5zI4Fp77GGqgtRTwxglG0VFBCEGjTkAM
-RBDbysvV1wARAQABiQE8BBgBCAAmAhsMFiEE6rlSSbSKqZETDWdGjM9p7MXPKE8F
-Al1sMkwFCQutycgACgkQjM9p7MXPKE/UIQf/ZTxNdOVAAV/t6vHf6OGjjH45MAHf
-yH6ivK99PwQcmjCWZK0q+p06Av8eViqPUCNoLkJU9ptwVB22SdBw20I+31Qd1BrL
-9jB4wSjqUXOa5k3JZ/h5h8YHTwxyBcZ3PIPEbWJiZgrawsiG1X+l3XutDLgRh7Wf
-A9V9Pi4lhZdGJqywsWAbY9fKZTr/+gd34Vgy5Ylo3bX3QZrD3IIEKz0G71vQDhhX
-bce2UyqnACvGWFOIyCoIzwHdXelsbp05MLvqekk0Wv7I2J8FZlM6X8n2yxoxXtCc
-sOCUl0GzUCLPB3TjjONFAhDG/OdOawt0oJXIkGezOkIAkCAmN/REDDV8sg==
-=E/D3
+mQINBGXD+swBEADP8TmgFMyteGwrSifEXaCh3db4LrpAV3BMzz6EE+l/kGcOi6hq
+XA4aiBoaRjlskFCDQAQ9mteZPe0frzIx8ONhCt/VZEE/RCUjUgG3QvMihS4qr3yD
+LzG5+7IRM0/dKFfglB2m/l8ueUA43/LDdADXImpBSC3C1tWUDzQxQDx1dC6Sv/UW
+8d0n4CDjizxl0wKsrF95we6YPIRdtT9limaorZ79Vd6VMBLd1lfIIl7/Gcar9Fyf
+Sj64wCDFLD6QblLZgUCsk0voIGnl2N0CumBr6A6m4RspA+Z50ymLmzqHOvLSVzDJ
+v4NR0DksP7AXtyO/cVKFCc9rMlaBPfnOrVan/Cn9/MGt3nh4UtvbLp6sn3GOl15Y
+nuMQJLKkrmyL+MxhmJSmz/0mKlutmctZrJcdilg/zyT6QirqAWdAcj4uEcqsC0nb
+T5/Ile8+VJvVl1Lw+VvXuy3GKdvcKd9mbIqg8np2iS/6Nx415znszDgyPOFb31jh
+qkz4caIxRiUVhdLcKnK/cbweTDEsMMGdtf4F/4WW6SHTwHCqmm4oQI/xBAXaQwyo
+jxQSO2jQbJRMpt9s9qxZ/SXUPu7shfdH0sxXydG6+msTze9wDtwhBjlvU1c8LM+t
+QI8yUSce9ssa3MFSwnXf6Mnj+5SSdY3OzJWa4GyIsuri8+J6TLgrxEhCBwARAQAB
+tCBNaWNoYWVsIEthcmVscyA8bWlrZUBrYXJlbHMubmV0PokCVAQTAQoAPhYhBKph
+b4yh5aJX9+n8IaLO3j4Dgti4BQJlw/rMAhsDBQkFo5qABQsJCAcDBRUKCQgLBRYD
+AgEAAh4FAheAAAoJEKLO3j4Dgti4FlEQALzphCEEds5WAkLJWJNCoAmZ8yqBFmIe
+TmhkWltB+F0O56S1XxRPQMhoUvlXmEWd8VXiCT82PPBoEMkr2rzEU4zFlPFBT5jJ
+1bgqdogiEJZOGKG1/yKAIkepEFGL4UXd9hPH5uvUE9+3Egug9tjKTNFBN/V/k9dx
+B87g2Yl7v7igsO7QGeuZLLpJH4u77Y4jStqMFU5qWG9Rkt0sUNboYupuNACdgRr4
+ygArhJUS+7oDppeCggcVLMZStthe4UF3B7p5AIoEz5QcmKZy9OuX6l6gpOQ5VTnS
+GFIh8s1UpIAcmFkmtXbrHKIGJeaPlQRZJ85BVvs119LB/qHHp+2fbwC208Eavl6T
+2v/BQ65ut8804hEN7J2qBnU0vlxguopON3v2Pc6JTZ2VpTTlFmaxAzz0/7gn2q9U
+DwjlJ/H0iPdgZxszjqLuI4k4/ggJ8xe+OqdcQ7tBQzh18BN4a8SGv/tJnndw6+lY
+6MGqkxJuvYJpeTerpdHakU+ARYEQl8ZhHFcLVLCqjcS/3BAvwGc1fCEl89waCTXP
+xSfZGuMaeCJO2gzBp0Z3apSKPVUDCcgTX/IvYAtIbL1PC33ZqW9T6+JYlVx0m3BO
+QRbPmGUReD0oNGNnTq8Ik74P5aPmm8c7/dVIwRcApRyilpjIE77cJWFQVcGnvhj9
+ngkGoolz6D/1tCNNaWNoYWVsIEthcmVscyA8a2FyZWxzQEZyZWVCU0Qub3JnPokC
+VAQTAQoAPhYhBKphb4yh5aJX9+n8IaLO3j4Dgti4BQJlw/z9AhsDBQkFo5qABQsJ
+CAcDBRUKCQgLBRYDAgEAAh4FAheAAAoJEKLO3j4Dgti4oYoQALI6VLNK6qfWipUk
+y9Sjjz2/nlChHl8P+dshB3WdViScIe6fIsEBochF+nAWhGzq/dotAJznRqupRM+J
+2hprfTQlB9ouSIRBPBGiv+TsiQnGOzfjiV/BNweOAXUAzl/bu89pY424QRXguDB5
+M/BVjmffI3c96/KAKCdFov6rWsv+p5v1HreS1R+UNNKZ6IHrUkE8ckSi8pVlZMET
+owlIHmT9fKTeYG3c4FgzUqmOBNePw+F2l6KdZ4ic6sd17ZUYw29QX7gPxt6m+dx+
+Ks0U/4sDlWz6eQT5NkRgXcLKKbMeANDLOZkawkG12RVM2nGAnKRIkYREAN7M850o
+/+12uowSnn6OKxHg4lmRibBHithD9uqontCGGarB5K+urTI+JvHCusSV0u8pQUXt
+tk/0uu6+CesMcruFMVeZyxcZiO40JJbj8uG6pOCT7HH5wfjJxUeiaN7szgB0jKD/
+7ULbof7m6svcELSf2CzOrlhkAbjz/JaejTrkA+icIBS39pjKuig5dW5MxP4IefuU
+Bx4LeiuYJNV0DRgd5wJXIpqifDXOSH97DSQYaOnkFLMoliv6tim2wO2hk3o90EIT
+mldRwh4YQQX9d4tPu8+7dPadwCTFqKuj6y/daehL1z2RuFQifZKa2EgcJcaILZyP
+z4tDjUpm1k8WLLbNI2cJRsB/cY2OuQINBGXD+swBEADduDwsl9A+ITbwmJdQLx83
+GqN1bAl8y64LL7xf8yMB5RYFWiPcAUOS21g0bIWrldUeCUxBiPaWVrYPvq7PGTxs
+MN/jLJMbBK4B39V7DEqkRZfAgmYcEYy8k5JPlZUtUC7Tb33e92kZeYOAqr1NwkKf
+oxsIx0I/VpZ+r2RyhRgcNmjYEMTdnZrJiU9Xx/CeBtjjBHj7eAwyJW4uizqWis8Y
+kUfMmyH0slxjW73Khup/aqbYoNGaQNl0WOO0rEOf9Vg085zntlPPSR6lbvQ66Zfq
+Io9Xl+clzUeXr7UA4mOCmQlDOtK/5+DdeoMkdhhJ/evfG25dOBeXzRRCpt5aIHOf
+Nq8SdszJMqt/izWnWQaXBcpGBlPrH8oKg1IjMsdukF+aqxtpumLDM6rdGA+LJZNN
+ulq7HDTyzuOFLkJZ0mguFLOTwy9MekeTvSDqYRpVOiDJ0oD0E4cnXi/lWcrJr/Dt
+CV4IBibs2Hod9M2eK/vZLPz99MvuPudFt3lqT8hx1avoHfNSlxYa90UwcKlgIbCz
+KEokQnXl3Nyid312PAB3i8R18GfOCGmQvVsru1k3gWkKQDC5Z3G2C2mC22sEIlQ+
+xld57SWnVLqtVktAKxJdi+hYrc2JbyCjOcAlEDsv5COFCNcyIeSZqRxkNOLroYbr
+wCM8Lf0urHfAr3cbs8KM/wARAQABiQI8BBgBCgAmFiEEqmFvjKHlolf36fwhos7e
+PgOC2LgFAmXD+swCGwwFCQWjmoAACgkQos7ePgOC2Lgt1BAAwkn8RNOPC4xYmhNB
+xXXkNmsdfLBL1P74YilkCFryCtbvLBJaUcmt3rMlz5jQ3FTHrcJSol6IaHmZvgX7
+EAG75hHm06NF/sWLYgVPdU8uREwMpNYl7PgRMF2FGjqn1xTG241ueNF5MUJHAwjt
+VJ+OyXgRIZ2CAN3NgoMVxsSQ1d350ziy5lBorc1sZHJCSAMbDk7xd5Z4t4EixPsc
+RiYFXpivfp4KsN1Lfx8SXyLFpFLXRrofeGdIl5DJmgCyGMwzVyQ3oppzKp7ny/dk
+fwdMC6tFaNsJ6fsD/tiNpGFsh0zOjkL5AideWtKyJ/gj8jV9fIZ9OAbKI4808I9v
+TGY4GnhAU5hPaBoqAhNl02onm99dZ/WkuI8H2L9EPmUHaDI5Dt+UjEwIVDf8FxeM
+sctoh6JipTvwO9sUKXox8M/Df9EKICjWZEKNK0CytP8hzzA/SvAkHK2VPGgeo1iR
+n3ui3AsRYQYI8uYuGheg1irEulQfMSAwis3qloEHJJEzr+dd44JyFtdf2b4jOlNi
+iqEkwAnYsnDdTz/ZI3OG1jhAG7bW1t1dOOrztCguyBc9NPCf7rtrFgbVyaEWR6sM
+AGSOrzebrRD0FVNwH6U87sQqwUEVV6GjxhOdrrGH+q3uRnpb3oIl6DIcbrbkC3z2
+QfMIo50zYS3wMOaEW8D3KkOf1qY=
+=l2IO
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/kd.key b/documentation/static/pgpkeys/kd.key
new file mode 100644
index 0000000000..a5ef4fc103
--- /dev/null
+++ b/documentation/static/pgpkeys/kd.key
@@ -0,0 +1,94 @@
+// sh addkey.sh kd 92D84FFEBCEF1ED3 ;
+
+[.literal-block-margin]
+....
+pub rsa4096/92D84FFEBCEF1ED3 2022-06-29 [SC] [expires: 2025-06-28]
+ Key fingerprint = CC07 1A37 137C 0988 3C0D 690F 92D8 4FFE BCEF 1ED3
+uid Kornel Dulęba <kd@FreeBSD.org>
+uid Kornel Dulęba <kornel555@gmail.com>
+uid Kornel Dulęba <mindal@semihalf.com>
+sub rsa4096/AA21DF42F6670012 2022-06-29 [E] [expires: 2025-06-28]
+
+....
+
+[.literal-block-margin]
+....
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+=+BnG
+-----END PGP PUBLIC KEY BLOCK-----
+....
diff --git a/documentation/static/pgpkeys/kevans.key b/documentation/static/pgpkeys/kevans.key
index ad9ab2f7f3..b38ab02066 100644
--- a/documentation/static/pgpkeys/kevans.key
+++ b/documentation/static/pgpkeys/kevans.key
@@ -2,7 +2,7 @@
[.literal-block-margin]
....
-pub ed25519/194EB41387470B7B 2018-06-16 [SC] [expires: 2023-10-01]
+pub ed25519/194EB41387470B7B 2018-06-16 [SC] [expires: 2027-01-16]
Key fingerprint = FBFF 642E E0D3 745C 2C13 FE4C 194E B413 8747 0B7B
uid Kyle Evans <self@kyle-evans.net>
uid Kyle Evans <admin@sineful.com>
@@ -10,8 +10,8 @@ uid Kyle Evans <kevans@FreeBSD.org>
uid Kyle Evans <kevans91@ksu.edu>
uid Kyle Evans <admin@digispan.org>
uid Kyle Evans <admin@audeuro.com>
-sub cv25519/68D6006ED44CA043 2018-06-16 [E] [expires: 2023-10-01]
-sub rsa4096/1014FBA83ABB6996 2018-06-16 [S] [expires: 2023-10-01]
+sub cv25519/68D6006ED44CA043 2018-06-16 [E] [expires: 2027-01-16]
+sub rsa4096/1014FBA83ABB6996 2018-06-16 [S] [expires: 2027-01-16]
....
@@ -22,8 +22,8 @@ sub rsa4096/1014FBA83ABB6996 2018-06-16 [S] [expires: 2023-10-01]
mDMEWySaMRYJKwYBBAHaRw8BAQdAdk/Fqvvw2gwIzw2l1UAbv5mrT35Y5ylfHyUB
EcWY3Ay0Hkt5bGUgRXZhbnMgPGFkbWluQHNpbmVmdWwuY29tPoiWBBMWCAA+AhsD
BQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEE+/9kLuDTdFwsE/5MGU60E4dHC3sF
-AmFXeYYFCQn1RlUACgkQGU60E4dHC3uGDgEA7xw33Be5NQwonhST9el5EOOGl2na
-GSbFExy8fbRfuQEBAO1kEvhUkfrGmouCdMJ6DboYdpNlg+G/01nFDBsTFusMiQIz
+AmWnZiYFCRAmZnUACgkQGU60E4dHC3tVYQEA+P1VksisA4RK+097dkCoWFZAbMLR
+VfTmN8ondIsu1KcA/1WtD6jqneL9L8FE8uYecE9uG8xDdER/IvicOKQ+ESEMiQIz
BBABCAAdFiEEhjzmNAxGPiGtUi0zxuG+g6VBbAIFAlskm6EACgkQxuG+g6VBbAKj
sBAApoU2BkJt06wG0esSaJXCrf+1OuAJWVewR/ijXgd1erwKOERXsTnhw+kSnXhH
cLJ0ow8Sy5JaFUNoidS5yKdUdpjjoYo4fZAZAuLi0+oDczbG97NsrK5bpYfwnWdO
@@ -37,9 +37,9 @@ D69/uAfNwpURR2dQlVq84njSpwR9X6Rif4PbtuGHCX7CW4ifGJfgvGuIgb2D+bUj
OJ6+2CFFfP4kirli4t6IrzYPAgHsexVum8AQWDaXHJWq2j6Er7lEmZQeR2f26Her
jfS0keA/zemA59KmHo+/JlpW0OP9HBkeg8QW5AhTKO+B4F60H0t5bGUgRXZhbnMg
PGtldmFuc0BGcmVlQlNELm9yZz6IlgQTFggAPgIbAwULCQgHAgYVCgkICwIEFgID
-AQIeAQIXgBYhBPv/ZC7g03RcLBP+TBlOtBOHRwt7BQJhV3mKBQkJ9UZVAAoJEBlO
-tBOHRwt7sgUBAMV+0Ln7PWPdTVJfO/iDoSPVrJlCYSb0n0vxXNSw+5DOAP48eytj
-46BU7afusXwNorZJTO/jte4H531ZWlSxM+ldDokCMwQQAQgAHRYhBIY85jQMRj4h
+AQIeAQIXgBYhBPv/ZC7g03RcLBP+TBlOtBOHRwt7BQJlp2YoBQkQJmZ1AAoJEBlO
+tBOHRwt7krYBAPnGTE/v9EcirWF5oGU+J19nr0wOpPCQzMOxCf5e2km5AQDHIznI
+haLvZYUwLlxiBE7MEs/2w4WfXRgW+LuAkzedCYkCMwQQAQgAHRYhBIY85jQMRj4h
rVItM8bhvoOlQWwCBQJbJJujAAoJEMbhvoOlQWwCBrgP/0pUlp/FDK0UbYKn98kO
gcKkevJCW9RpWs46mipZkz4wWxRt1ddSDXNDuEFUpq6h7AFgqwiT8aAmHeTqXb8m
1Ov4doWkW52OR5LSFt8mPkEY1Ldipz2qwMW/ciXge1b5iy61sNjJsMMEVpzTw66G
@@ -53,9 +53,9 @@ Fpsqa2X9wI7QeYivp1Vt1J5gXYXCGAHNxeP2lIil3P8S6uZU+F8/gz5ekXiQtyFM
WSFFdKj7joUwxia9xT4AEP9APtou6wc+pkIDtwmzzrJmCOd/+Ossxpjz9X2T7IYX
pmfxm6UPdjFXukWqOVFaGQwHtB1LeWxlIEV2YW5zIDxrZXZhbnM5MUBrc3UuZWR1
PoiWBBMWCAA+AhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEE+/9kLuDTdFws
-E/5MGU60E4dHC3sFAmFXeYoFCQn1RlUACgkQGU60E4dHC3timwD/byYmYcrer6zO
-tzaZfxzJQn3//8A4NgzAwHx5LVASbI0A+wQkwUbAYBpxxe06CGiRGpbmhe+pcqmK
-uoYq72qJKIgLiQIzBBABCAAdFiEEhjzmNAxGPiGtUi0zxuG+g6VBbAIFAlskm6MA
+E/5MGU60E4dHC3sFAmWnZigFCRAmZnUACgkQGU60E4dHC3vWRAEA9UiyfcvJFXly
+j3sCQpZ4GBqP9/EYTb+4ChzCl6u/dBAA/RjDHVFTzuajS0awI5NOMeR26Q9UnvFZ
+ok1clo5mj20KiQIzBBABCAAdFiEEhjzmNAxGPiGtUi0zxuG+g6VBbAIFAlskm6MA
CgkQxuG+g6VBbALP1g/6A9QGZGs/V5MBwzUxQS99L+7H9DEUvp/6RZ5qvf5AkAoh
qdvcqP8N8CWQ5LCPtVkBvOdHmxJbbrZH9fGPgmsX2BTGCQu//Hm5V4Ow4bnqyFZz
fOGFKHslyTqScGL8NC1TXoX8uH6eVCReDHuwnP/+7BNV4zOb9lxBbCF7YDvmsM+p
@@ -68,9 +68,9 @@ a/MuSNKHNh1nKlT5b8/6I1mHGfGyHymo53sChE5InEgvBb7MmmkGN3RhzxSmuy83
C38ivc7Aj78nnyvYrTYbbwBpzb3dj3FbO276IvyM6f2cCgOIWOVSvhxLdSxjiuXC
JD2gQW0urnep3Xvp1k/0sziLBEq0lYTWcKuZlEK44RvMXkqCEnPe88aPdd9QXZa0
IEt5bGUgRXZhbnMgPHNlbGZAa3lsZS1ldmFucy5uZXQ+iJYEExYIAD4CGwMFCwkI
-BwIGFQoJCAsCBBYCAwECHgECF4AWIQT7/2Qu4NN0XCwT/kwZTrQTh0cLewUCYVd5
-igUJCfVGVQAKCRAZTrQTh0cLe4yNAP9Zai4BVABHLwBkyO3Q0RzERGrbcW3NLBrU
-lAei9LWUrgEA9oKhKPCmmnOghEXQ4/5g0loYsfajnpI+clwH8RuC7g6JAjMEEAEI
+BwIGFQoJCAsCBBYCAwECHgECF4AWIQT7/2Qu4NN0XCwT/kwZTrQTh0cLewUCZadm
+KQUJECZmdQAKCRAZTrQTh0cLexoGAQC+RLJG3qWSTqlqstLyzOypJAkx7liQlCd0
+f6aNCZGYQQEAwAwgK8uP9ap6x2k/6ZBEwHKi4vowvUgWdRVVTG8opQeJAjMEEAEI
AB0WIQSGPOY0DEY+Ia1SLTPG4b6DpUFsAgUCWySbowAKCRDG4b6DpUFsAvtuD/4+
EZWSBlawpRR92XWNSkEX9E3i80suQSPItr7s+aKPst/thiONaLqU3zZISxXhzPcl
8S6VlTYgwdl0oBGMaqS0B8rbPlazo7OQxwVhrH529rCADJTGcp2wLSWtlpv2DmjH
@@ -84,9 +84,9 @@ LmQeBHWaEDKGHLZl38m+hEphAMPNJ0vg/N7QSXx/J4UDd7QQhk6kXewi0wQz8pVt
1v/kpYymv/0Nc1YBuFCpRiIEoz7cotDFxtvXnwJ/raQ/1KHxtSq4QDqTEmEsk4J1
XHeUTKMCcHldYBIF9Zk6AqyPvYMXUzi7WOJv7hKF9LQfS3lsZSBFdmFucyA8YWRt
aW5AZGlnaXNwYW4ub3JnPoiWBBMWCAA+AhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4B
-AheAFiEE+/9kLuDTdFwsE/5MGU60E4dHC3sFAmFXeYoFCQn1RlUACgkQGU60E4dH
-C3tAGAEAiYUiPpLX7im56ujAKd+9XOZxgLzZFYsEPauj4rXWGzoA/0G3p2bKZvry
-R4t/G7NGT+gL9vntbqAJ1l/Bw01fQDEAiQIzBBABCAAdFiEEhjzmNAxGPiGtUi0z
+AheAFiEE+/9kLuDTdFwsE/5MGU60E4dHC3sFAmWnZikFCRAmZnUACgkQGU60E4dH
+C3vpkgEA6hh6n/6KROECFnYr2bZcSxRjsW62r+HUjrTaVjP6v6wA/RJrQRkRgNU2
+HMLZOrToha98h7PcjXry7GewYanx1tQGiQIzBBABCAAdFiEEhjzmNAxGPiGtUi0z
xuG+g6VBbAIFAlskm6MACgkQxuG+g6VBbAJymQ//b3htes1BiA3fjvB4saivU3lS
2bk4XQxTyYEaS+5ByZm7PrdB+cF44+r7qireEqx6dMIuHR0uwdppZDMx5ZOjEKjz
wv+yfvo1noMcV+RYtWs87KzNpT2oG+QQvGk10IXjNDUYnn754X7yIhkHQQ1BFVEZ
@@ -100,9 +100,9 @@ ToyZ7ZbGytTUOkHRegx0my3osq06LzYcOQ0SEACAyHnthc8nBXDiPUa4WWlGcsqL
PcjE5pX/Uh029LWuwiqj//MB2n7DEaw0AnG08chLuji//YMQ2WBXTKDXqbLk6MYw
8ybvH+LLn6YSx/jogj60Hkt5bGUgRXZhbnMgPGFkbWluQGF1ZGV1cm8uY29tPoiW
BBMWCAA+AhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEE+/9kLuDTdFwsE/5M
-GU60E4dHC3sFAmFXeYoFCQn1RlUACgkQGU60E4dHC3tQHAD9F03EZ6qdNlYICTEm
-l8T9P/PQ45YFnt9VlnnSwjp2BFAA/RNoVgz7M69bG8phhhwCbyTA4w6Et8W+baW7
-v4k3mwYFiQIzBBABCAAdFiEEhjzmNAxGPiGtUi0zxuG+g6VBbAIFAlskm6MACgkQ
+GU60E4dHC3sFAmWnZikFCRAmZnUACgkQGU60E4dHC3s/ngD+OcJxmF2IyQAA7QoL
+lsgQjgV9WLv7oxtaJbLAZ0M+XDgA/1gHwEA8IFhb0smDDEMT4cRDVT41RXGRlnte
+c226+tMGiQIzBBABCAAdFiEEhjzmNAxGPiGtUi0zxuG+g6VBbAIFAlskm6MACgkQ
xuG+g6VBbAJkEA//RIdnJo6dUckDr/tmRo1HZ3AyXu9YwDaCRF8U3H7/0AJPROS0
XBaHWkFt49cY3PmDUVEStWONQEo14dKEDGVqcpmt2bL7G0nS2nKav7/N9X7XWQSz
V5jMDamF4bYu010Dd38OWRsJrfvAQ4DHFdHDRdYegR1iRZuFVucGdnIR8C/MPpVV
@@ -115,9 +115,9 @@ u65GUbGbxX+xCemLsrpeO/x4XbqG3gAEuvM19mzzEVDoINAnQs1cu5t8x0wKzDVu
w3E4BAJiPn8SHoQ/4HLmvoEWi4KB2E7p/V09dySLD5SUpM5I1t+SZBHl/CemJ/fc
OaCTjCx8zo1Tvv7hnJ1Bhv1+ITJRmunACd0/JJVy51iHJLvpU7R8wOdrTda4OARb
JJoxEgorBgEEAZdVAQUBAQdAfOA4DErGOoRvtaOe1yQLqo/nVXxvnrCpxIjuk/PO
-imADAQgHiH4EGBYIACYCGwwWIQT7/2Qu4NN0XCwT/kwZTrQTh0cLewUCYVd5sQUJ
-CfVGgAAKCRAZTrQTh0cLe69EAP0Zy5wRfjmbB9Z4PinnpoNMdJMOypIzFjzvV5oc
-+Wc9TQD8DMVhISFEDfeUTgLfuBDL28hUDS48QHJ+XmFpYKAYBgq5Ag0EWySd0gEQ
+imADAQgHiH4EGBYIACYCGwwWIQT7/2Qu4NN0XCwT/kwZTrQTh0cLewUCZadmTgUJ
+ECZmnQAKCRAZTrQTh0cLe+b/APwKubYugAgxuvx36Hafa33nfVECB6uOaOsplI9k
+54UyVgD+OVrb/NAQfk4hHFghu5HDmAd4XKmZQ/JPL34raPG9ygS5Ag0EWySd0gEQ
ANk7Lp/STETHkSHMzT89B0Ly82KAVCAyUPhezAfnxqQeKKH8H/7TdeECb5A49/gE
ul3glcXhEJfGBNzuVjdAPgmAWfRmgsJad1zAekwUNAyAEAJH6+jVt4dxDGmjaouz
rxsrjzau+Vw4WMjYZRZ4NwtA1zgOrWLtguq9fSwnsY2Y6NBOtgYjMcJFmhVUeqMo
@@ -129,7 +129,7 @@ NwjhGh5FrBGe8fJWs2g9fUvfH3AbM5e3KQ0oByeXrdnIO+okTFmcq0rYiqgYaUhI
9N3AcRkCctPCiz4WBDs0Ru+xDnHmBtgHCKsUJwDOmawuTS/tqWYo4GIgRUNQc/YB
lmG2FR1Znd3NrcAywxr4BVW4IIX8QDt1kvtUrqBEBZwRpu4XKZsXGA6/dN9JPPBj
JqEyOoxXEI3i1j67OcCUdB/RF5IBlg8bkqPUiyVzXCjnABEBAAGJArQEGBYIACYC
-GwIWIQT7/2Qu4NN0XCwT/kwZTrQTh0cLewUCYVd5sQUJCfVC3wJAwXQgBBkBCAAd
+GwIWIQT7/2Qu4NN0XCwT/kwZTrQTh0cLewUCZadmXAUJECZjCgJAwXQgBBkBCAAd
FiEE3gJfirmYjuaWFv4NEBT7qDq7aZYFAlskndIACgkQEBT7qDq7aZYWvA//TF41
BmLZztlA8cKbD94CYgmUK+WiWlpBwFQYJDbRUBRmNNkoLn0Dfnw5k7ORWaJBkQ+X
X7H4JZA6SYjLSe2T3q64gL4VtUx/7+S6wy1zKJMuOYQZRDvIimW38nEWMQTiZTqa
@@ -141,9 +141,9 @@ Ei2aPs/pNSB/UOUSHHtuPCR/7m8zoj1tm7O7XUbVTLpNQDYbg4WOuXu/ifO5yxJ5
TKLtLUs+E8gp2QMfV/v2ydEo+fetHZDLlDNOoQXTieQmeQ8q9wYECidH0hg7Yv3M
T5eMQwNCXoSz8kvTiF5CAgRaAh/n1v6pXSvo+yB4p7BdulmdwF/2UjwN0XiL/PaD
OPb78tFOU7+eHUfrpJZLYkG7MhWavrVMeE4/qCjEonlcn+0CleIy3LF2rrolvbXN
-SJp+QrOpzkAcX5AwLlUCAXlctrBCcvb70t2q364JEBlOtBOHRwt7SCIBAKIWWuq8
-3H6H6TwLj1xvNOIEYQPgzM9eKiXajwoIawxeAQDIugN/9CPfRbX0GhDh3iaajXX+
-Ug07tJRqAeztUzelDA==
-=l/lT
+SJp+QrOpzkAcX5AwLlUCAXlctrBCcvb70t2q364JEBlOtBOHRwt7o94BAMWd+hmt
+fpKBzz2YzayP6lt7XTricF+4JndgMc9Df/e/AQCU70OjOTAjCAR8qUh3Y+5kbcYS
+T0WrntrwoPkXF5MjDg==
+=0aEl
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/khng.key b/documentation/static/pgpkeys/khng.key
index ccabd2fb71..1463c7aa6d 100644
--- a/documentation/static/pgpkeys/khng.key
+++ b/documentation/static/pgpkeys/khng.key
@@ -2,10 +2,10 @@
[.literal-block-margin]
....
-pub rsa4096/F98B65F589AE6371 2021-03-16 [SCA] [expires: 2024-03-15]
+pub rsa4096/F98B65F589AE6371 2021-03-16 [SCA] [expires: 2027-02-10]
Key fingerprint = FECB 3F06 E64F FFB1 0238 8464 F98B 65F5 89AE 6371
uid Ka Ho Ng <khng@FreeBSD.org>
-sub rsa4096/63DA79E9857A8B97 2021-03-16 [E] [expires: 2024-03-15]
+sub rsa4096/63DA79E9857A8B97 2021-03-16 [E] [expires: 2027-02-10]
....
@@ -24,43 +24,55 @@ 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
-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
-jmvL
-=SgDc
+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
++O4rQ5Ry1scCNcPRr/G12HzMWPPAsfTdR0A=
+=hMSf
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/krion.key b/documentation/static/pgpkeys/krion.key
index 9b0d881716..bd5141e057 100644
--- a/documentation/static/pgpkeys/krion.key
+++ b/documentation/static/pgpkeys/krion.key
@@ -2,11 +2,11 @@
[.literal-block-margin]
....
-pub rsa2048/0F223DFCB302CA45 2017-01-24 [SC] [expires: 2023-04-30]
+pub rsa2048/0F223DFCB302CA45 2017-01-24 [SC] [expires: 2025-08-31]
Key fingerprint = 2421 D116 1100 42E8 CA9E 2D69 0F22 3DFC B302 CA45
uid Kirill Ponomarev <kp@krion.cc>
uid Kirill Ponomarev <krion@FreeBSD.org>
-sub rsa2048/689A26385A12AC21 2017-01-24 [E] [expires: 2023-04-30]
+sub rsa2048/689A26385A12AC21 2017-01-24 [E] [expires: 2025-08-31]
....
@@ -21,77 +21,77 @@ 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
-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
+AQIXgAIZARYhBCQh0RYRAELoyp4taQ8iPfyzAspFBQJjEGFgBQkQLG/bAAoJEA8i
+PfyzAspF3jYH+QGbPTzIjSyjzIronKoeox/Ukde4OJ8g3VXyVVMcuIADBmGaEue0
+rzPGwKHe0gHsniABijz1JCDMzB7grfuWXAZAipSTTxrVvbm0mdUTFeVQgH8ynnvJ
+9oJPCCkk7bC+vzdxXEyU/TItkND7STFjIMO5HmslNjb4P4ay1cH7Yel68ICATwpU
+Ei8Mq37+P/vEZ36JOMD77JU0mUUTHTGG9apIiZwDXs2Kj/gRKyUt2h6h7SHQNTXr
+FcvxS4YPY0aFECmy1wrbJ237H71G3jm4MFdm5peAn516ioFsrY5RLJ1dCtZE2lDJ
+xFubaLNoScTuQraj2oqX6dioxlauETMAD7yJAVQEEwEIAD4CGwMFCwkIBwIGFQgJ
+CgsCBBYCAwECHgECF4AWIQQkIdEWEQBC6MqeLWkPIj38swLKRQUCWbRTywUJCpLJ
+RgAKCRAPIj38swLKRfmwCACFJjVIun19ihXlEsPCcS798PNQNKokgmlocJei1k3P
+HD1/FV4R39ed/42bvA0O41cxEge0leK5AUYGd2gSlLEq66OXipN4xlxXSp02i3xg
+pMH0PiDncCY5JuR/3jZwWpQ96+IZ8HYyLXNNxy8kIsdsuc3bmFCakri3NFGbBRq3
+qaLE/U0RFt7oUtpLRVdvSufkXHyBzhu7jTk7qCvtB0BuOJeB2WsVZ4dsVSuWUsU/
+HOvIqgrYcq30h0COtTbuLd2BtNRLuAq4saKCpkHE/XVWbp5cYPOPIiDBbCR1tfgc
+QLizwnbCpqvtOewycSb2JP98d8P7g0JpIeyYGxjfSULFiQFUBBMBCAA+FiEEJCHR
+FhEAQujKni1pDyI9/LMCykUFAliHjAUCGwMFCQPCZwAFCwkIBwIGFQgJCgsCBBYC
+AwECHgECF4AACgkQDyI9/LMCykVf9gf+PdW1NwFq9WDJIfua8JJGUrEewCljJ+Yr
+I0E8nOqw82Pbi/5xOwggX5pOWpIVuv0vgFjTRog9XxzLJeOnAHt7ETSLgt8p6SZy
+djFAyEGFrfakrEPVKGD9SEdgbYtcWNzO8dEo/DDnRwFl6BDpOKIV4yZyb/HCF83Y
+tTLJkRiWCBPwv1ZlriGMaQ6yJq6Z0d1rSFLfwF3beMgnBapUuGvoc2nKnuxfG6Bq
+2aJaEpcTmCwJwyo/dapMUb5O/4maLdJqAMk1/mCw8nb2ZLR8DqDe0hFdynd+uvcL
+Ggmfuisff8NRg5dl+HqeEAGFHdoPredT7C/ZHIatM04reyhcsnW4MrQwS2lyaWxs
+IFBvbm9tYXJldiA8a2lyaWxsLnBvbm9tYXJldkB1bml2aWUuYWMuYXQ+iQFUBBMB
+CAA+FiEEJCHRFhEAQujKni1pDyI9/LMCykUFAlo5ljsCGwMFCQqSyUYFCwkIBwIG
+FQgJCgsCBBYCAwECHgECF4AACgkQDyI9/LMCykVzzggAj8Q40qukyoMTyxE8ZSa+
+XjAhmey+LsRpW2i1yxcW9Ux9D7UUjq0/O2W+pUNy5TeueVl2rSuqsVnyyXbDlXu/
+h0D6u104Eat/S6mQoEBtr9PBaHTP+Yz0/wZTkW5jFdMQRX69AZxXwoFxf0VRI6BW
+Ql/59Aw8eOwBT7/4UVLt7DvKdHhkRQrWyjXMQKmQ6DEgDe2OjisULWL7W/0cybRC
+seI/jbIg0F9hGT1KSc1Ua1zKZuhX7fM1Ua5UcOHwpm/P7ECAXEglOOEbr7Z0KRL/
+GQkA103pLofEjFSj5Mp5WeEi6klW+pYgM8iqyT1jnxl/zx5D75NxYo0JNxVtiuPY
+dIkBNgQwAQgAIBYhBCQh0RYRAELoyp4taQ8iPfyzAspFBQJbAFVMAh0gAAoJEA8i
+PfyzAspFixMH/2QtqlwnncHYYqLLWWKLa9KTmxBJjxEiUlINoOE8Povq6cL1np2B
++xl+hwjFBtLwkyQ0D5EefleGvuFHPClcw40DGJjJXgC0zFFugLl1T3wWVKgew+sD
+I0tZ3ySdNVmG9WN7IdLHwySZRl60TPnR7J/aEs9yosCKM4c/uX1Sig/frAbMiSnI
+1KHKffaI1KrBczLROIAVNnrrzFg0rV9ci8bynVX51rxKvLgjk2mHWQ5z0WbdWg0P
+FXgk6EmESH2+R45aSwg1eUm0mPXywEVPrS+iAyCuiLCRSHkglw9pVhOSgriHVAjI
+o7flOajpi4SUr+Fm6n9jKbUiCJoEUjTaknu0JEtpcmlsbCBQb25vbWFyZXYgPGty
+aW9uQEZyZWVCU0Qub3JnPokBVAQTAQgAPgIbAwULCQgHAgYVCAkKCwIEFgIDAQIe
+AQIXgBYhBCQh0RYRAELoyp4taQ8iPfyzAspFBQJjEGFgBQkQLG/bAAoJEA8iPfyz
+AspFgmYH/3bA2+rIgqTy1hZWDPIvA8BS4rYywZN7rrIXzCZy/ucRrmQWj08v12pM
+lRvWBFvVvzp3ztSYhmahJefjROZdWA5fQS/ObJ5GIjvAhXfZS6Hj0jGCe8RH5i4X
+O1lDbgx8/n/aNVmSrve2jma99wbkm6N45/PREaQ3WUgtPbVe1XLLnMcYRGGHxP/D
+APWIs/YvAjwpGpOQO1bilupBq2AoV55/xAlwWX69Nr1MO2VQk4KdWDd0+GoUXblN
+yWL4uHTuGmGkaLO2iUSuR0Wi6FDbj3SZaoc48yUjgKvbr1HVWpw2kqHmu2DDLPkk
+Gd5ylqcjEoJg7y2ECqmTQDMWrToShv20NEtpcmlsbCBQb25vbWFyZXYgPGtpcmls
+bC5wb25vbWFyZXZAb3Blbi14Y2hhbmdlLmNvbT6JAVQEEwEIAD4WIQQkIdEWEQBC
+6MqeLWkPIj38swLKRQUCWkPlpAIbAwUJCpLJRgULCQgHAgYVCgkICwIEFgIDAQIe
+AQIXgAAKCRAPIj38swLKRa2fB/0SjdRyGPvt1vz2Pjefk/LsuWlPVyGHtFgLmmn9
+8aW5urujCKlvlb3qmwg0aTrRA0MHWsTWPwfhu9XBYZZ78u21uhaWg8UaJDAFxz8l
+cFdnyPtsPPtcuO9OMParalWxw4wnmY6KfbibFtDAwyz9HUiFFFHOufALDN30Uj1o
+SGJQ2CAIJugNxyGaSzo+kfKmLfjjRc+ANFh1U6Q1cQ23N04+xX7JWpD1hn46dXr+
+8/r1v/BDhIAsuSerFsPKscqjsZXG2kVxoCrKu811uo4ZgA+eSweD1OKZenpy6LW0
+owTPWeJ1xgHU2kmEeOhGXy3j67e9zEgRNAmq88Ht9AftkH/OiQE2BDABCAAgFiEE
+JCHRFhEAQujKni1pDyI9/LMCykUFAlsAVQQCHSAACgkQDyI9/LMCykUIGQf+PagP
+mxjQIjG801xhcXt5/dkDWkZIcziVEIl3MXrjpYgZvG/Y+rOToC4HQkVFeo7CokkX
+GEp7u5x+qTI2J1zaxt88P3Af4TlOzZ4KOxGqIn+27oTxWF+XuadTd9lr8YWR4Fwe
+a3m4PZBO9+mq7ETJLEP8gWglIGmhRoLCWNLmPU5ZQI0D9UvF+4mjQ8fUpHnQ48f9
+Da5mcDyFimqQ1B5iPREaUkd4yfjnPkFiUpCv9wgts5narqETYDiWMfrJTI3mbrL8
+zQZhwkvw9SkCMNP7UfD5OM+lw8MbxX2tgYLkeXqNYJU6AewyMV5fJwEdeUvtjE6z
+TsPoTR879HM92dpvnLkBDQRYh4wFAQgAypZgjvZhmUHWi77TqjQWOzJ4RTeRY2l+
t/DCvvLRGQ+ghL2MSftspskomN4eosieTQgx3/uLodkVcmVWLyckeII4tQmqmabG
9rIEXG99l+oF7lmr54sRRQuj7WHjArsf1HTEV8vQIL2AwHgrXE0ZhKo6x08GM53Z
eJksvIxICyh+dCASofyKosak88SsrxDQIKAGdBzP0nQ+KdWOpoRx40qJnoYj6DtN
qC1xWXUGpI2F4d6ElLj0vWPKEJRZUHb5Y4iYHfPy/IjyD8cuyHBax79Vya60ocwa
Z5EOzXxu/HO2bewYXj0r3E7O3I3OyhQlfZvnsnkkproExcfVPqnDcwARAQABiQE8
-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
-bxJEz6tQwGCnwUoZeigH0ZSV1Xp0cqUQVcquow==
-=v6oe
+BBgBCAAmAhsMFiEEJCHRFhEAQujKni1pDyI9/LMCykUFAmMQY10FCRAscdgACgkQ
+DyI9/LMCykVj5Af/cI7/xazS91YW8y+RnMdaHWW965nW/fWr4e1eJGmknDWazuXJ
+wY6vK/UTI3ySFT/KsPTDfOd9YkZWnvKyn7u0eWprWKAvX2NMBHdYdhG3EZ0+8SFJ
+T/wNZypM9MZJ+i2ngZSJSf0a7eBVc2n2JxeUtEEyNaDVXNkW2MaitBeIQIlGbd8h
+djNUubW419vkMC+PENhoyy/0NB5IhtfBygiqAZJL3302yM+LlnuRE0DGYBowS70+
+2f3u5OZMszvewi5NzqirWA2wmp3JCgVMayStwUbtduiZjAWDCwPoM7GRvMeU/lq5
+/pcQXefOkt32HdBwuacVwDwhV1iGzIqKfMVNPw==
+=SIp7
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/ler.key b/documentation/static/pgpkeys/ler.key
index c3e49b0312..5fddc19693 100644
--- a/documentation/static/pgpkeys/ler.key
+++ b/documentation/static/pgpkeys/ler.key
@@ -2,15 +2,13 @@
[.literal-block-margin]
....
-pub rsa2048/697C99B1AB48A77D 2017-01-10 [SC] [expires: 2023-12-13]
+pub rsa2048/697C99B1AB48A77D 2017-01-10 [SC] [expires: 2027-11-18]
Key fingerprint = 1E38 249D E761 5B3B C983 0573 697C 99B1 AB48 A77D
uid Larry Rosenman <ler@FreeBSD.org>
uid Larry Rosenman <ler@lerctr.org>
uid Larry Rosenman <larryrtx@gmail.com>
-uid Larry Rosenman (WhereTo Senior Site Reliability Engineer) <larry@whereto.com>
-uid Larry Rosenman <larry.rosenman@us.fcm.travel>
-sub rsa2048/FD0614DC2AD28ED9 2017-01-10 [E] [expires: 2023-12-13]
-sub rsa2048/BD9C5F296C54285F 2021-12-13 [A] [expires: 2023-12-13]
+sub rsa2048/FD0614DC2AD28ED9 2017-01-10 [E] [expires: 2027-11-18]
+sub rsa2048/BD9C5F296C54285F 2021-12-13 [A] [expires: 2027-11-18]
....
@@ -53,50 +51,93 @@ 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
-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
+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
-q0infQUCYbakiAUJDQS7XgAKCRBpfJmxq0infTAAB/9q0w9yTi8RqhBQinI9TkNV
-e079IwQjPOjIQN6AuWoZT/6Zb5Wm4iwPqiNX0zb0za4DBR9RHX8oK442Dj4cOuHZ
-LXF72sIHBS8uzL/TnQcZJQXOfm8Hnaqg8skQvSGDh/JeqXj4A/4aj0z+5ugijU7n
-PWtbxv/k4zO3mrhKvVNTUSQxkxu1mKUknq64lgsuyCiVhtJUiFabLxV0yu7fnpPC
-FU0uNBDklkHbcYHkQB78+dD1o1REasK5SbYZln+rYcoHlmw0xG3e/ew42ft0CL3d
-vFUpe6YWP8k+sNKk1zKZDuMzjzsiRZeiGZhGUd2NfpaoNEL+kMg9Z+oVcWGtcp8C
+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
@@ -112,54 +153,130 @@ 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
-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
-vJySzamIMaIdT6f+FLdm885NDkbrrHw=
-=WyjZ
+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
+=ot8I
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/leres.key b/documentation/static/pgpkeys/leres.key
index 4b67575385..31eb705b72 100644
--- a/documentation/static/pgpkeys/leres.key
+++ b/documentation/static/pgpkeys/leres.key
@@ -1,15 +1,13 @@
-// sh addkey.sh leres 50AEC5D1367B0F3E ;
+// sh addkey.sh leres BDA1640BC593785D ;
[.literal-block-margin]
....
-pub rsa3072/50AEC5D1367B0F3E 2020-09-01 [SC] [expires: 2023-09-01]
- Key fingerprint = 6843 5145 F1B7 EF47 3289 D1B6 50AE C5D1 367B 0F3E
+pub rsa3072/BDA1640BC593785D 2023-11-29 [SC] [expires: 2026-11-28]
+ Key fingerprint = E90E 4B67 5C26 B50E 5BF5 972F BDA1 640B C593 785D
+uid Craig Leres <leres@xse.com>
uid Craig Leres <craigleres@gmail.com>
uid Craig Leres <leres@freebsd.org>
-uid Craig Leres <leres@ee.lbl.gov>
-uid Craig Leres <caleres@lbl.gov>
-uid Craig Leres <leres@xse.com>
-sub rsa3072/D33160A8B63B31A2 2020-09-01 [E] [expires: 2023-09-01]
+sub rsa3072/4DE22A2624F331C8 2023-11-29 [E] [expires: 2026-11-28]
....
@@ -17,86 +15,64 @@ sub rsa3072/D33160A8B63B31A2 2020-09-01 [E] [expires: 2023-09-01]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-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
-C4JOZcLz+KdVgzn4TC/YaoowEg==
-=/wof
+mQGNBGVntA8BDADqJbmwYZNvplq13k15/fzCIhyUD7iyqTCw7FHKPJ9O7YLGLb8I
+Za27VZfk6lsCPmrA1GQ8Ruzih/L5FSh/51/DOENED68YPatkIo+NfBq/lCqaEjef
+O4rDtZJLjMgAToB5esASxShOSRWcPBbZPuzHFTF9YHgHYz4pNOrXVzCWbhUypbhj
+AzpNlkPuKjqt1RZ9tbcW1xFCo8dH7uQzvMYkYFw0+vW7aQu1/WKvnY3SWxWfZnFf
+R/khJ1Sv65bUsQt9IxTGZqOu7p7F2QmUJPY9VrPrOeY8eLzZjF+Bti0hp6AvrdcH
+lCpV4Zfo+8rkPKEkt/YxXj47c5ee6Jb3eOcr14D9tP03NuB4CaluTP2tsjlD4oVs
+5mrfjTx5m/+GIuWSxtZDyQLqcGA4ZhXzUj3CifZq4Hz52FVBb28P67x9uBhqZmsz
+ECzKW7P0oN8IB4PdJVVXQIFL0zsuutvjyEesfm79hyBJGX0rY6V1HaFBnsThwPOJ
++rGMBk1AXzFnNJUAEQEAAbQiQ3JhaWcgTGVyZXMgPGNyYWlnbGVyZXNAZ21haWwu
+Y29tPokB1wQTAQgAQRYhBOkOS2dcJrUOW/WXL72hZAvFk3hdBQJlZ7QPAhsDBQkF
+o5qABQsJCAcCAiICBhUKCQgLAgQWAgMBAh4HAheAAAoJEL2hZAvFk3hdVjYMANVT
+qROD0ZYzpFv/TyZKFXkHr96XIoQT8ubzC105iIsdfQC14DR2lHzmkDbjN7VSWED2
+qt2Q0HNypSHdY5OEsStJhK8Vx19HLSY6dF/2ZxABhTMUiNiNhHisDDShyv8EUfpc
+Cwg9kUcZGqIXBkoMoib68LIpN/LOat+t+wwTHRFTeEZPSuZGOiC6+pyY5LFFR7nV
+D4InzZsFGuSYcQnOsQiMoDZ+K/JoHCEhHHWaASmvyWo/gT2pMLRSKYRwKGw2jXoM
+ZqkJKRUSgyZrla8bToQUgJdeAHoyF9R3z5p9IL/6NAek5yIFPERaC8YK4sUoc5Ze
+dsgP0Gwgd4HC2khnN6TqlzSb+ddsGq3uSMP1xmsLBMNoNLBoS8G4c/PTkdC/6URk
+4QV6GpMqi+8TlYZdSr4PIOhpSCqy4AnXPKvnvXS+pEQ/nx0SOMA2v7MNWvqO689K
+OCFir2lFd0tW9BvI80nw9dzIcdKjherRvspMnH7WHVAAeQa5eZS5zJb6GCG87LQf
+Q3JhaWcgTGVyZXMgPGxlcmVzQGZyZWVic2Qub3JnPokB1wQTAQgAQRYhBOkOS2dc
+JrUOW/WXL72hZAvFk3hdBQJlZ7UVAhsDBQkFo5qABQsJCAcCAiICBhUKCQgLAgQW
+AgMBAh4HAheAAAoJEL2hZAvFk3hdd1oMAJ7MDf6bTBuv43PXMRSj7DkY5X0saCsu
+QCOxGdlUcdOhf2YTjhEZF7Ok59JK+xSBGTaWadVDd8PaTEpDPcvmHVzehscR/vCp
+swkV70ddhqdnABE+muh0X37Zp3QqVt4SpV9y2xbS+2npH0kQfEdchbLLWn8urOIh
+WpWM1+Kgyf+YrF3lJ2UYADJ8GEoD9tFyWFqBWeXp0eh6X/+DgC5cPImcnzNo/gkx
+3C6+jS0nuzanvlWAcRL3j3q8MPucCfcBeq4vJMXTOlmK+ixtBCscOmVpIxZUaXjw
+be0UqPoaeVPSau3nI/k74qw58YkClOIJCbGO2tBf1mx5YUOxbkHUNoFm/Xv1/tXY
+HmmcB77HhWwAFsFUyf6l/oSoIh7qsKE22GXSsBJYnkANdgYPYbByOHRjsG6gaofW
+jEtr6yQiOu2trreBmOVbFd2y8SgvD+0jnuPr2MGtvdn82Q2aU1nKzYJV6J/3kAmH
+U0FFV9HSk/6QvVIHSk+Jlh56sKyaWeLc47QbQ3JhaWcgTGVyZXMgPGxlcmVzQHhz
+ZS5jb20+iQHXBBMBCABBFiEE6Q5LZ1wmtQ5b9ZcvvaFkC8WTeF0FAmVntTUCGwMF
+CQWjmoAFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AACgkQvaFkC8WTeF0SSQwA
+iIyfj3zmQiIzo5LqzUbBN7eLkD078f9pavrtXvozERQicIxf7n18es9FHHWBuhPj
+DnOOdV3agLMZ3lmfmYlUj0/hghbIEblDb7xHH06i9gzu59Q7Fh830/Y0Ls3aeMdb
+nZbJEsx5zlqWsOO1u14EWpgL55c93QwvPQDbo7ntlU0p7D+Ow/QWcGDZhRMCTkE8
+/DO+rhtGAibusTeEhfViTo/b74SdQntv+lfOvClgaobmjeH9vGz382g1ZUbcwGX7
+AieOCeHuldqu+iHJo6rlsoWTbvhIDAaTv1LBOejXk3dPApVnwjIsGBWspYt6kWYf
+CqCHp6sXMZqqFVycZ+VthcPdbMaTcNLikiwWnYsYSoEmC+QxECLw09GiJf5qDD3c
+VHLB1tNeFK4UgsfQT0v6CibkmF6QgUOT0tZZp0DgLxzLhtH8+Kx3rgP0WhYGbIlt
+SWEet7khtCU9AUYZgkW32Zv5fYkHyKWBJ2wIG/51X5jbRaj5jQ6TkfOCX1ylOZ/O
+uQGNBGVntA8BDADHZ1KLCP46x/d2Y+dnCzzZzNNAumzmsXNek0LhV1FAjZBoDsOE
+d6Xcg+f2m2FagObWEwu+U6vQmSkElps0SggkbQaDWHFzq6wquKvLrRcPxZypZKtq
+USNOLu3bwK4kiH3rGaivVNAhuBWAmJoYksB9CnbCibPvPFUvxZdBviNz7jPQGfqL
+AF76QTmdseFNyaVg9UW11CQOOMfR+ET1fXMUuR0EiZhYtTbYMvLJ/g+oM+MC59Bg
+d7oGTIG6yBH5Y/9tnhVAcGnR17gDkC8HbYiirZWENR19mj/fDDoFfvyrKOboLZMd
+X/zy7JYutieWBy4lgZATDVmCEi0FZnYOn+7KUifJoL8d8gbrb2aVbXyi5qE3dum2
+0lRiwr/LpCYAo6rEpX92MMc9bTJTys4BYAiJwkMXOzhxkW/Q5eyWZTEsGexDCwAr
+xVurtdI/QW/QnXZ2sXrDAt/Bk0MPD18gXmuaQi/rwqAVHZDOo8GXvd7wkavdfHOr
+eNI+Sems+x2Qd/EAEQEAAYkBvAQYAQgAJhYhBOkOS2dcJrUOW/WXL72hZAvFk3hd
+BQJlZ7QPAhsMBQkFo5qAAAoJEL2hZAvFk3hdhf0MAOIDkzx+zFWW4Ur1tl1XNHcV
+ItvP9cJTgsHl5pinpcUiw9O3tP3mE54LABHuPBbm9uOgm81nYYUpRvsaFz9qaBgl
+RAgc/9/3aGAJcp3Z/qViuBBxsaHN3ZJkdfOx3Rt64mgMzwUPEzKIHeQfPJHc81HD
+Qu7oWhlNQWug8QZ6oCNEdhbFeY0ITfrV8tMA8yhZ9TyZoRH/Q8iT/k1f9YwLMxHt
+blCDUBxlYWiG9dnIjJN9Ln0u4ul4xTRjZ7mPRCSm8asxQTCjkbypeLahcEVgcSxQ
+p4cvzTzINC/GK2pX6ymHfdPZBZVqxDU/RQS5zWzGkbYLSBtl6gPmTbh8wiuMaDzc
+Cy7+9OY6DGO8+DwMr1J/SfmKmM2fij4vkwZazlEupzQdD6SgxXA9etSIDAxug5df
+M30LvoFlsC30cFL9DaJg1eLtjx5iqG7zaJ11vVnhmmh5Ml+m2kt8FZIV4rJAW9hB
+RLJpWR7RHAq3eKHlsC/Fu3NAAdIQDngHrlc0fghuCg==
+=46ts
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/marck.key b/documentation/static/pgpkeys/marck.key
index 4c1bbab1f1..41d0af82f4 100644
--- a/documentation/static/pgpkeys/marck.key
+++ b/documentation/static/pgpkeys/marck.key
@@ -9,7 +9,7 @@ uid Dmitry Morozovsky <marck@FreeBSD.org>
sub 4096R/65AA79C860E297A8 2013-11-25 [expires: 2025-03-10]
sub 4096R/948FF5948B7DAAA4 2013-11-25 [expires: 2025-03-10]
-pub 1024D/85D450456B691B03 2001-07-20 [expires: 2024-03-10]
+pub 1024D/85D450456B691B03 2001-07-20 [expires: 2026-04-02]
Key fingerprint = 39AC E336 F03D C0F8 5305 B725 85D4 5045 6B69 1B03
uid Dmitry Morozovsky <marck@rinet.ru>
uid Dmitry Morozovsky <marck@FreeBSD.org>
@@ -21,853 +21,838 @@ sub 2048g/EC88D8AE44D656F8 2001-07-20
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-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
-cC/xJXVT32KTcELbcAHkgmqrFjFZ1VtyAk+Vw149n/O0VYYfob9++pI+kYA/GHbJ
-DjwXE2NiuuCVEG8pjkDRl4OvgTWu7QmW8avgpEU7wAHXnS6dL+yZCpaUPozRL8PJ
-mywiiM8AEQEAAYkEuwQYAQgAJgIbAhYhBGvz7hVeLUb1C1c6gQZQvMBCRzlJBQJd
-dMJ1BQkNqStnAonBvSAEGQEIAGYFAlKTgQ5fFIAAAAAALgAoaXNzdWVyLWZwckBu
-b3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEE3REM0NDZBRDU0NkMw
-QzA0NTQ4MUE4MjY1QUE3OUM4NjBFMjk3QTgACgkQZap5yGDil6i7sxAAoAYip6qo
-Xk+uabGw/c+xXCJ7vxVcrSL0uB45ZN6UFwToJAVblRIvw3Rx+1L3MfcF/joZQW4m
-H0Yt8YoH1CrXsLj42S/q1bS75EWMunp3d+BCjes1/lWayexzAeVXMpS1wV6bYrg4
-eLYlUYLP0CjIXxuEzeoQ+EVtY3rYHwJoOckA2e/Ejpfu+ZdAtWv1qx1co36ecLw+
-R5vfL/oRfxyGWLDMPq8CwY75Bh+XUxblJRo2AZEz6l0eePr7v+pGNfJ827TlAGqq
-4P+gxb9dFKtaRDSBA3DDF44YfJJsOa7qQ29f14zQrfUJdge5cuFpYODEuIXiPddE
-jHlKo/5FfH6oXxIESAUtA0Jhc/ZtYKA9NXF/eIu3AEronGvGYGFPqX3YYBefGLzK
-2lBzWJZzIL1p3GNQQEJBQBHwBAhea+TDS9TzsTcCwrkAwfT3lnpOytAFFzeC8Abb
-wlM+Q4HJpWyn7TFHwOtPxeZpTiZMw0M9tc3n5SI+pkJ3QT3uo7tZjyx/z4qGhWZ3
-mIbiubBAtlqzeLK8hc6FuervamqStWwylkOto02KZMsN6x1N4LnJkRQCOlH1e61l
-cQ4FwUHPs8YGCUez09pSgmq/oPfiwvmttGnEAEJdBzJVgCQagBna9ltO9qsy15e+
-cRf465YVBvNc/bgjE62x5JsC59Z4G/duILAJEAZQvMBCRzlJU7YQAIj4AXWIr3au
-pR1BupGzvBu51omF4b6Zgu2opdhO0EdeJXpmu2zPZE4llm/NjLKbgkv6vRyFdpNQ
-kDWhYDXCediXIOYivkLDFWdkAe2/bz/2hlgZr6JtEB+FS5d8nY5DxjPJmdGbYqag
-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
-w5PKW481T6g=
-=KJ+T
+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
+=PDUz
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/markj.key b/documentation/static/pgpkeys/markj.key
index 13bc94ff8c..452af59910 100644
--- a/documentation/static/pgpkeys/markj.key
+++ b/documentation/static/pgpkeys/markj.key
@@ -2,10 +2,10 @@
[.literal-block-margin]
....
-pub rsa4096/81EA2FA79A8578FF 2020-09-25 [SC] [expires: 2023-09-25]
+pub rsa4096/81EA2FA79A8578FF 2020-09-25 [SC] [expires: 2026-09-26]
Key fingerprint = 0062 0D9D 91BD 1FA0 DD26 B593 81EA 2FA7 9A85 78FF
uid Mark Johnston <markj@FreeBSD.org>
-sub rsa4096/5A6159844748A479 2020-09-25 [E] [expires: 2023-09-25]
+sub rsa4096/5A6159844748A479 2020-09-25 [E] [expires: 2026-09-26]
....
@@ -24,20 +24,20 @@ cXObKQiyCmAuB4KUpCajTLzk/fVttjK3+ZDW3YD6uYZiflUofVxj3khE5UNti7tS
ljSSqlDeeL3I6lu0rbDaTXo9HKVt44QdOiY89H3VJ+wmp90kKns8qaMV7kseR8aE
9p9TrOKuiVJksd2sLJ4bDuFXb8sZuFVPY0ueT849ronHly2TTZ0VWvu3hdPbVfuB
9bYGjmjdsbSzhoj8vVUhUmWrBCI+fA5sB/OIsUimpRMYNvIJD63gx+iYaQARAQAB
-tCFNYXJrIEpvaG5zdG9uIDxtYXJrakBGcmVlQlNELm9yZz6JAlQEEwEKAD4WIQQA
-Yg2dkb0foN0mtZOB6i+nmoV4/wUCX23yVgIbAwUJBaOagAULCQgHAwUVCgkICwUW
-AwIBAAIeAQIXgAAKCRCB6i+nmoV4/1RPD/408kzOIkngiIDjmKqn0fkLambpiL3t
-Nk+LbB1GM+GXIRlOYDEHaQHcWlhejSMWZDjqkR/4ZzdQD9aFH8M740hFv0EqtITO
-qwWSCQWKQpeNIU+5R5EOiPIP9DMMdDO6DD0UPzqH0eUu5unIoMWbdZldWxRplfTH
-TsFavUDrcMWrTHBmDxj4m/m7kLezz1fEgYmelCmExOsThXiJusDoJ0+bR3J4b290
-UXLmhdIDXYddz5qRAtwrLQLV1J+4dNnTxTIhRtRg8Xu93cLz8zRyUoUHIJjeZD0Q
-JaxJBEhFwFaGuX+zR4HB33WJ9FrYJLmsSRziyT5uWDZiEO3JkvnPH0bWqOn3i73r
-+QCZ35u7NiLPMk8PiHt75sytVgFLG5ZZKAjstB5WySFMsa/8cCs7Kb6hIw2209vF
-qNgokEatE193e7QjQbpf57A9q7Km/LdBjBnPQBbIysh4nr7RnFHvskplrJjwAlG/
-9YKZr2txZqw+XfNHV20WttNDTgXIHQsHa9X5CWiQgNhGkpzKUfBeaYLl05Aa9jFb
-bLihJ36zhkdaNpUCrHaNSxEpyEGvTioU/81RqfmKEIgZKysD/V+/YDsCvONlT1+S
-RpWoEzjw7iUqrmS2BxrS/0ZTi+2H/1A4+cCZ35O6qBHF5xgxxzBe4AUuHmX3UP2p
-t0xyZtxbZEDoQrkCDQRfbfJWARAAxeC/ssxT4A8JThzxmEHxMCL1IDtutVRjT/nG
+tCFNYXJrIEpvaG5zdG9uIDxtYXJrakBGcmVlQlNELm9yZz6JAlQEEwEKAD4CGwMF
+CwkIBwMFFQoJCAsFFgMCAQACHgECF4AWIQQAYg2dkb0foN0mtZOB6i+nmoV4/wUC
+ZRSTHAUJC0o7RgAKCRCB6i+nmoV4/2zDD/9zvlWqJ6jhUDH6zLkCdZPedlALTwHT
+J5I6kVsxD4MHNMrn9JAnnPfRfH8oMlC4YScKqKDN7PwXgpH7lwCraI3Gmr2u7bEF
+Rcw2BBpp0qY/f9Keu2pPC9bqn+dZklvt+g3gXYmICziQoqrFFwE4EQPhPoCj5WZm
+AQBFa51K/siPA5rH6xrCB9H30UhcI+BhSY5y2gCIgu47+Sezy3MHaXdDQZByoUNx
+1mnrGIbhDqTyuHWnqqLEQAe4Va54c/5T/6f/cbo3W9bz8Ti7iocQ2GAzt06+0c3T
+XGak0HmLWNZHnEfK+K62uUkHWJJj12aoLbJgsWZqFpqksvR8q6stXx0Nyngslx6R
+D9DfkERAa2qeCq/bDAK79E2+gDHxoe3Y6BXVWQuLUOdDPCPfMiogomR8VZqTj9Ta
+WAr+QRhH3n0rS33b4xG23HWF2cAk88OJ7PuGSn+67B9hVMQdGGB1GN0V+Gx/wBxh
+x0alRBeSqg2xpGmEUBb1QQO6zESyKlAYn1TTAw+oN58bw1Me5rx2E8LJGjCKUdzj
+XNskTvmdeuKsyOxFlitywyFRQc8DkpyaF/G1R5oKMrpUHn3TmPCefOpr6Fr6p4P7
+rnF4cocMMfnpe8m31r1RHIGfgzTMcPQ3U9uoWH2cb/+2JZb4fUXV01eRKmg1k6pd
+HqMz0hx6tWbd3bkCDQRfbfJWARAAxeC/ssxT4A8JThzxmEHxMCL1IDtutVRjT/nG
tT6CIgum+/8xF8lXpF60VGXf1yE5C/UJjRyLCgAtJ+nqj65voEpdjNgS5BWcryix
VFmorwCk2Aa7V4oQi3MQTXHCLZMaCu9bJDj3k9XF3s8jYnohmx8MJYQqmIdt4RFQ
RloKfY/l9YrjJ3FprKLkvJApBicAaoHXXvOw15o8RMXAj/tIAgicI6/tkzZ7G/tP
@@ -48,20 +48,19 @@ jEmsCwAHoGAkfUuy/nq0qufxWmCoQIagoKyVR0KLigjwMjJF47+GHge6PkUXUNoG
o34ysFP0jE3bEymIw8Wk+dqTp0yQ64Byay42VTlCC48XTlmWyq45E/ona97hgVt4
gD3ot0w3uRAyZSXXycUW4wY4cpPIaaixi4+Wt9kyuJ3ANL4uXcGpfMSJisTlYiLI
9BLbtmCgu+j2qxf8Ds1eZcDpN3rnteJRyiB2gf4LMJpeAnwzKyXJI56YjKh8dk/w
-1Uz7DXkAEQEAAYkCPAQYAQoAJhYhBABiDZ2RvR+g3Sa1k4HqL6eahXj/BQJfbfJW
-AhsMBQkFo5qAAAoJEIHqL6eahXj/TBAP/Rc9h5vo+qHchiAtDigtUx7szHmCo4dr
-d9rUQRvlqo32UyQT2Lc5G6GQee8WirUMCltCaRwjHUJ7y2lK8rZ9cCgFY72e9HJW
-nYqyNBh3OAtdMQjl3IQ8jc7NkzGCHFs1fC+J/p3YMdii7HF5qtGCyRW1sWTb0VDF
-d5MvXe/za8fGw0WsxUaE3JwwB4q7+NdIWYxdoS54DxuiEThrwhdDsSaYNJTiJGdw
-rJgEx6vbzsAHk5qrZs+AeOWdf7jIlySRRQegNmX6SPH9iHHbV0FhSBDEI5+nVgxE
-j/kXR671ws6wLmW5OFZmyNWgoOj0Rt3E+rHwUeBn/UTESIvVOVCWYaZ0xJzuLJTz
-APD8qjEb3LWaq5wr4TKTbEa1jKtq2Zjb+e0AUY7rlb7D+moFJriKsjtxsqLjtDW8
-+mQI4iCuK17RXy8+n7jIGq2qgOpD8JZMq1pQBXVAVWzzwpTqrOi6X3z+FJ3VuMVS
-uHCLsbXrXJjZCwsGSZvlsiR8o8q/PTNbLCZYT8eRstP4Y6Q26b/Zn+66bXGg8ckm
-CYn6T+qVt2eQijHBnrua2A/Fyzl/lPlOdGLQrtJOXBVjssE1Vn89jbd4zspjJJmM
-45XhSdNi/VZvzSAqr8sYeRFWuSXvjZzChHECz+wvw+XCUS/3Lvang8kRVhY53L/R
-uwqiVYbcmNQr
-=YZQD
+1Uz7DXkAEQEAAYkCPAQYAQoAJgIbDBYhBABiDZ2RvR+g3Sa1k4HqL6eahXj/BQJl
+FJMtBQkLSjtXAAoJEIHqL6eahXj/UZMQAIo5Hmkt0Gf95obKPii1hHCgZc4NgtSD
+MN6MoYzMn0pvvNPYf5VCCQxEgFyttoDXcwMNBmphLURmF3TQHvYwpNNRoyOwi6Is
+yzGc8zd3lTzLreWya8/CdRUEHlkJxBtBGqOGfoxDBMOSCkOsnBy+5gMJ4vA7k3X9
+gMvrgkZCsf10Z1wFAg+ez9Vkbmck9rZVhEhLuFvdwsT3DFhSwUBRi4Zl430a6mDB
+b+oz3xReShbnM7hdSraUkjBrhnLjnOH4ouHhhLJbhw5T0X0AIBZeDVsAw/boAGwV
+9rpRsDWQO77bgzjV7p/hH0v3/hKPsQHIaWa5qTLrZ41FAcUUnAhTCNxQqUUUNsma
+dR7PMHtd6EGrIAuepdkH6moEdviwM9LNQrlOX8WXmOd9jcKvAfhSSb1BtABcjxRD
+cSaruB34RkSvZf//9zxRKfBP3YC52PbmuPhjgUZ7M2+MqUY1HjMqvhijLM8IMGIH
+baPnmSwFYeoZsMkswc9VpRl12CMjshRSasCKgn9hzBDX0OQ1bXeVbAgSSJW4r9Ny
+DO1+Vxyla1wjrie5L9sMv7ktDToK50Wue/DRi378Ka5QZke7D+/lcixYVKkIDoK3
+oDfIRnszav0IYFfcEuLI2l0QScmHKJJUBYWqF/ONSf444J6/QAQLve7EUcQo2Mhy
+qaRO6mhsegnV
+=q0DX
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/martymac.key b/documentation/static/pgpkeys/martymac.key
index 51528d9eb2..c1e4e24f41 100644
--- a/documentation/static/pgpkeys/martymac.key
+++ b/documentation/static/pgpkeys/martymac.key
@@ -1,12 +1,12 @@
-// sh addkey.sh martymac 7A362DA14FA08FD4 ;
+// sh addkey.sh martymac F942ADECEDA0D50A ;
[.literal-block-margin]
....
-pub rsa4096/7A362DA14FA08FD4 2019-10-10 [SC] [expires: 2022-10-09]
- Key fingerprint = E472 2D30 F5C6 E63A 774D 763A 7A36 2DA1 4FA0 8FD4
+pub rsa4096/F942ADECEDA0D50A 2022-08-30 [SC] [expires: 2025-08-29]
+ Key fingerprint = 66F1 D457 E513 A874 6002 0C89 F942 ADEC EDA0 D50A
uid Ganael Laplanche <martymac@FreeBSD.org>
uid Ganael Laplanche <ganael.laplanche@martymac.org>
-sub rsa4096/B9A384169769DAB5 2019-10-10 [E] [expires: 2022-10-09]
+sub rsa4096/73BAA4F0327AF490 2022-08-30 [E] [expires: 2025-08-29]
....
@@ -14,92 +14,91 @@ sub rsa4096/B9A384169769DAB5 2019-10-10 [E] [expires: 2022-10-09]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-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
-9hDp/Qdgg/f7RtR79KaJOm4FdLc=
-=wnN9
+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
+sQtOWrBSQ3SKNWnLdjc3NaAJ/uMusqKAIOjl8w==
+=8lDH
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/mat.key b/documentation/static/pgpkeys/mat.key
index 756d31ee0f..1ca99ddd69 100644
--- a/documentation/static/pgpkeys/mat.key
+++ b/documentation/static/pgpkeys/mat.key
@@ -1,17 +1,17 @@
-// sh addkey.sh mat 3A4516F35183CE48 29EB0902911D7E02 ;
+// sh addkey.sh mat 3A4516F35183CE48 29EB0902911D7E02 079A9100DA2D6EE9 ;
[.literal-block-margin]
....
-pub rsa4096/3A4516F35183CE48 2013-09-23 [SC] [expires: 2022-10-05]
+pub rsa4096/3A4516F35183CE48 2013-09-23 [SC] [expires: 2024-09-02]
Key fingerprint = 3AB6 9789 D2ED 1210 6440 BA5B 3A45 16F3 5183 CE48
uid Mathieu Arnold <mat@FreeBSD.org>
uid Mathieu Arnold <mat@mat.cc>
uid Mathieu Arnold <m@absolight.fr>
uid Mathieu Arnold <m@w2my.net>
uid Mathieu Arnold <mat@coopacomp.fr>
-sub rsa4096/A99F9AA711E3DFC9 2013-09-23 [E] [expires: 2022-10-05]
+sub rsa4096/A99F9AA711E3DFC9 2013-09-23 [E] [expires: 2024-09-02]
Key fingerprint = CCE8 22F3 DFA7 F33B 765C 1B72 A99F 9AA7 11E3 DFC9
-sub ed25519/7452CD3238E991B0 2019-08-06 [A] [expires: 2022-10-05]
+sub ed25519/7452CD3238E991B0 2019-08-06 [A] [expires: 2024-09-02]
Key fingerprint = 5B89 C4BE 2DC5 67A6 D383 7B55 7452 CD32 38E9 91B0
pub rsa4096/29EB0902911D7E02 2020-02-05 [CA] [expires: 2025-02-03]
@@ -20,9 +20,24 @@ uid Mathieu Arnold <mat@mat.cc>
uid Mathieu Arnold <mat@coopacomp.fr>
uid Mathieu Arnold <m@absolight.fr>
uid Mathieu Arnold <mat@FreeBSD.org>
+uid Mathieu Arnold <m.arnold@ovea.com>
sub rsa2048/79C993FC0F629D7D 2021-10-05 [SE] [expires: 2025-10-04]
Key fingerprint = 143E 2330 AC33 E547 7C63 0BB7 79C9 93FC 0F62 9D7D
+pub ed25519/079A9100DA2D6EE9 2022-11-19 [C] [expires: 2027-11-18]
+ Key fingerprint = CFE6 6888 A24C D5D5 2543 DA4A 079A 9100 DA2D 6EE9
+uid Mathieu Arnold <mat@mat.cc>
+uid Mathieu Arnold <m.arnold@ovea.com>
+uid Mathieu Arnold <mat@coopacomp.fr>
+uid Mathieu Arnold <m@absolight.fr>
+uid Mathieu Arnold <mat@FreeBSD.org>
+sub rsa3072/7F620E0A9E9D41BE 2022-11-19 [S] [expires: 2024-11-18]
+ Key fingerprint = F572 41A4 97AD 5A2C E410 151E 7F62 0E0A 9E9D 41BE
+sub rsa3072/55C34DDE0B18B196 2022-11-19 [E] [expires: 2024-11-18]
+ Key fingerprint = 76D3 D992 0375 0020 C372 81A3 55C3 4DDE 0B18 B196
+sub rsa3072/48F2BF9EDC8AC5B3 2022-11-19 [A] [expires: 2024-11-18]
+ Key fingerprint = E706 3919 8890 1BA3 5F72 E565 48F2 BF9E DC8A C5B3
+
....
[.literal-block-margin]
@@ -574,1000 +589,1053 @@ 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
-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
-we9IBmGhI//CR2tdUKSMhU+aqTf7+vLiK2Q4aot4LLBMwAN/e/2IMM4E5fgbOq+z
-QeZHjtjGrBRnGYzUeVhgcOm9qmWNGJEkjnIXCjneHmWQuxJqCjiUZ1WLC9+EcbaM
-CLFKToJcESKpkWGC8OOOBa8g7MkZpmMyXusyn+FL/VJrZN0pfYjmCOC98xOGxzVm
-+tAN0qaqSy1/R6SXK77zCvaVBgd+uefHLHNU1T0+gnNq+GJ/RwEKtqSEDuaZSd2p
-/sgn1GCir9X/mvxpyA3po2oJvXQMHJcij+oBle1jcTDn63TxSErreQu7DIain3dk
-YEzAicYcNRc1jYlj73KAfeTarwmJAhwEEAEIAAYFAlM7k78ACgkQ53EDGZLde7N/
-2g/+IKrRMBDgIuI7DHmyJAzBBUvVFueYeKQ9F/GxGA1MPNB/5RCNDIwOPw8XuXuz
-O8TDcewpqNM+62cKsiCTR4O40fHfIPICeocXzm7dImYbWSr/ZzF42KPPshG5Bu/h
-Dodjj6mcFUWDg9L2b/cCS5gNt1S8Mg9QwVGdD64WfPfEmZWIWZGzIHTQmhKtJAep
-54W9kSmMKGZ88DSUCFQaiRbhIGHV4br/QqD7QxwZMRswN38xFzQnUHN6mQLuI2cB
-NS/tPRtgtQLN5zH7GrxjHbrbpp/I6ZVu8p7FU5DcvDotB3Ak2OkErANPyixvpEBw
-f/DxRDhi8fsXjd3CBoOqHKJjqGDaOLO4iYHhif8W7BTFwiCPgjKWYVZdH7F6yLvB
-d6xJ8yCo7IQjJUqjhdRyFaVxyse+qZj0Rda0pU4W1q8AMsDODPIG19Z13kXblcDw
-jxhXpDOUx2HHbMIl2Sy6ha33LCo7GyVrNoyD4Rw3x3TL/SsYRyKOQYNB9yUrS+nl
-St6uqaKuzaijzU47tN5PIxVouUkPhiqJc0THUZYM0+QfCv/+shWjb7a6W2M8b1KO
-JvCSnkep9VPj3jo41SkyBOtlTG9vwhuNYM0hT6VFd8SoWvY1bGKv8v4tYmr3+4pW
-eQ/R4s1XFVgjNRXkhURkSgCWi5j1iyBKUtuM3II0/FKaYYOJAhwEEAEIAAYFAlM7
-56oACgkQMjjRal9z+jJT8BAAnwtZ+jVqgzMZg1o3Ob/VCOVWi0wwq1Ex5TLYNIfu
-fnTDM6fPvi5SIjtnmhJErQerwa8UxflLaISVUgV4tWpnNCWzRvXSAqYeAhY2GLf7
-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
+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
+JiTurJuZo061amDudhic6p7eYostBFWZkyAy5Y7bxFdjbc3C/vO62B7ERtmWNGIx
+qLsU9Wnj38JqfQltN37P6PWsMvdsXg95xZ1kYd8YqiF20wKGyELove+3Yjv93zev
+MnyPKe0YT1x9WdwcS7bzERs+tHLqcb6aIbFdeVNpUosnFwYZPaqvCbwCMDD383EB
+NRJcgqyFbx5Bbctr6DSh9I/KSm4H7y9HvWcPG3iRsYkCYwQTAQgATQIbAwUJCWYB
+gAULCQgHAwUVCgkICwUWAwIBAAIeAQIXgAUCUkBKYCUYaGtwOi8vc3Vic2V0LnBv
+b2wuc2tzLWtleXNlcnZlcnMubmV0AAoJEDpFFvNRg85IwC0P/0t5vAYHs69htXYi
+hfDnlOXL4hjeHuN6VCneVcHQ6E0Bn3Koq0xlbvOweMX5MoxW+gRvj8LPVD1cJKyW
+zRkgQQxdJOMXq/miDaHKVSYvN9aojHoT3/KM6/wPjPy89xwGHMQC6xd5qpj6XcfG
+jaZSjo9PKOOzLBIGV7U8Wcf96UKEY0x3A4516F35183CE48FAILED///////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////4kCnQQSAQIAhwUC
-UztQlGQUgAAAAAAQAEtDRDQyRkYwMEBkaXRpLm1laHR0cDovL2RpdGkubWUvcGdw
-L2NlcnRzLzNBQjY5Nzg5RDJFRDEyMTA2NDQwQkE1QjNBNDUxNkYzNTE4M0NFNDgu
-bm90ZXMuYXNjGxpodHRwOi8vZGl0aS5tZS9wZ3AvI3BvbGljeQAKCRAxpJEhzUL/
-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
-4MbDwjn9AeLz1Tqgxr0bqOAQN8k26tHNYV491HVhtwaKTmMrFF7euDKO7WiHDlY7
-voYji5UXixbrVaFVOn6wCK+n1CcIUuUgqloRbXDBKY6PANGwte6wQ9eEjzuJIbl1
-KUhGkgVbq1bn2U1zZeSUFIHCbY9mi8in4je7aCRV0/VxC0SIePoSTRCDfittevE8
-JJ8uIAWuEalmXdHWZ/YgCtp4RaSg/F0/wVTfeKAoAKROFnzZwNPFGhUE1fgnWcd1
-NhruAVsh5jbwuObpnGw1tWJEo9OIYczAG9dTuxk9lispX6hV+deeuIxddhsEkE2J
-u5yi1z9GaMrdeSlkgMl8pOdbQaOiUBE1wJ/EWyUTollPTg2sN1wr3zDrtGvIv/au
-L7sreRgB0qSja8zRSFRW7GblOZai3dbur/onjH1hkgv/QQfQXRINxLKCyvzeWDt0
-rOE0HCHX++EJYM70+36Fbn1sr0o17ZuJRZ2VijjAbo3apy3qGtmrTVbMK8STleoU
-H83PM2nvrGppWHfeA81rswEnmmObMpmsLIM7uWmG4nJK8xr53EpcuW6IBGTN8c1k
-Q6ISb6tNgM8bCBtp9vAgpCrzB161epFsX8Q4Zp/Fe6Tz99mtSFwCUTXPwCLtBz4b
-bGASKJ9jZzaCDAaUvDjtvIGPssEpVNCJAmMEEwEIAE0CGwMFCQlmAYAFCwkIBwMF
-FQoJCAsFFgMCAQACHgECF4AFAlJASmAlGGhrcDovL3N1YnNldC5wb29sLnNrcy1r
-ZXlzZXJ2ZXJzLm5ldAAKCRA6RRbzUYPOSNr3D/wLdovVBxG3OCgfRPDPb7Plu0ut
-tI+qKrIJk/5k8UjvmXIKvpjd2cedu3C5aOD2Az+VuGdK4CSUuKtMy+ljj/zINqG2
-etN+3aKDp84mG9xpmpua5EpqhChGNMdwOOdehd+dfNwhOPBQCCxA+v//////////
////////////////////////////////////////////////////////////////
+////////////////////////////iQKdBBIBAgCHBQJTO1CUZBSAAAAAABAAS0NE
+NDJGRjAwQGRpdGkubWVodHRwOi8vZGl0aS5tZS9wZ3AvY2VydHMvM0FCNjk3ODlE
+MkVEMTIxMDY0NDBCQTVCM0E0NTE2RjM1MTgzQ0U0OC5ub3Rlcy5hc2MbGmh0dHA6
+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
+QPr/////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
@@ -1575,622 +1643,649 @@ etN+3aKDp84mG9xpmpua5EpqhChGNMdwOOdehd+dfNwhOPBQCCxA+v//////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
-/////////////////4kCnQQSAQIAhwUCUztQlGQUgAAAAAAQAEtDRDQyRkYwMEBk
-aXRpLm1laHR0cDovL2RpdGkubWUvcGdwL2NlcnRzLzNBQjY5Nzg5RDJFRDEyMTA2
-NDQwQkE1QjNBNDUxNkYzNTE4M0NFNDgubm90ZXMuYXNjGxpodHRwOi8vZGl0aS5t
-ZS9wZ3AvI3BvbGljeQAKCRAxpJEhzUL/AFjuD/49DHfM7Izn36ulQwOdjBiUttFD
-vI6gLbnCE5qilH+hQmOH8J73Ps9BtPU0gZLsFNSSbnStrUh4VTKhcG6djh5eTCSG
-PFI04hevhXpGhyLLQiq1YV1qk/yKvPtVrMWlN0XKxbaWxNQ4GfKqvsLzE6YJk5My
-rG2K96x6F4csxD/wehZihvcKukdxriTAJykmz+t+c48d3AWD4/+a1Vyv+HcmGtNO
-TqxePCMv+vySZ18M+F43eOcwaMXpRPByAgGo2BsnDWd0dAm3wplrf8w7WhkW4Zmt
-HtMK8LtI9lHKJVH62XWNp5u44a1keRcdnYLay/LgjgZQ1dvkqFyxPbHvdkTbMHvt
-sZ5xKTIvvUiRGi2TkUz2cSsvWWnWoxSvpoPyHmcrg4s9m8SYAmukGVZSrWQiavnL
-D/R2VcgMIYQ/w8+AzfBhJ9u6ZEXJ+hdNxiVKWIZJoT2Xr41qyZnwrKf7Nr5q2riN
-mAMsmTUfRj+PYEZ6D338ke+vVW/O2vKBn4Dj4krKTZF3fqgAgmKU2wp4UhAGTwGg
-zffonJpxhSDgX0dtZ4MY1Jyn/2zK8oRF571srbkJsgiAmhCMVsZakQ3Gc3jYiOVh
-KD3typU90WazTW0edo7gOeDHFSZB2gY8aEMkOPtqOqHLOSgde9v5u4BuDlN1ASQX
-Mj/wEnxlwNKCm9y9IYkEHAQQAQoABgUCUvimuQAKCRBJQMCP2t6qDukZIACbdCDm
-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
-MakT+424QbSuiNL+7yZ21DX6rEpXaD1cbvgz+YYki6ZGY3R+g+lNQq9LL0USruXq
-AXSqgTs5bANkDQrTq9jt6dzG2b/WggYhuiTPAF363f3KHOJ7iMSaNYEQmpATUICC
-leleUZCapCpUE+fEKZUeuZ3KBWyGPlzuwT/EDdByHgQykrSDHLOvA0mn1lSch4KP
-YKTLTycJ+41v+gU/HZeRjlmYKhb5i2Ev9yi4Se+erWFtu5s+YjW5i0Pf9GNK2iT9
-hCIDYfZmkTERCxVO5SdkDhkpmNhw/eku2b78P6+fZwK1LH4dGZDe+mDsl5VVdYCM
-DcPGw3qEo0o7jOKmzoUBdr1W7FdevMvczihlG3godaAJnn83DQJ+KMGC+GhDQOnC
-Ry4r96xRgt19FSLJ27y7BMd1ioyZiW7qzZdTaNNtaweRzGjpJ5RjvDZwFstLS22x
-dzZGy9ETxvTTsxC8dY+X3aSWBJ7mR5rBxi1W7ukUkqkB4OXgXtcwN4MLr5V7qTDw
-/xbZB45TGcNQgn27v5RuT3c8EUSnTQon6K5WqHrrWsEaGHmvfEQEK/zK3ubVQxrV
-KwSHLFBvlto637GNNAKdasDKQ68rO8hRReodliSKklUzjQruA/YF8IHN6qiii753
-TmDpivgy0BEGeeA7HQEVgdjWRxu4PKu+xpSJAmMEEwEKAE0CGwMFCwkIBwMFFQoJ
+//////////////////////////////+JAp0EEgECAIcFAlM7UJRkFIAAAAAAEABL
+Q0Q0MkZGMDBAZGl0aS5tZWh0dHA6Ly9kaXRpLm1lL3BncC9jZXJ0cy8zQUI2OTc4
+OUQyRUQxMjEwNjQ0MEJBNUIzQTQ1MTZGMzUxODNDRTQ4Lm5vdGVzLmFzYxsaaHR0
+cDovL2RpdGkubWUvcGdwLyNwb2xpY3kACgkQMaSRIc1C/wBY7g/+PQx3zOyM59+r
+pUMDnYwYlLbRQ7yOoC25whOaopR/oUJjh/Ce9z7PQbT1NIGS7BTUkm50ra1IeFUy
+oXBunY4eXkwkhjxSNOIXr4V6Rociy0IqtWFdapP8irz7VazFpTdFysW2lsTUOBny
+qr7C8xOmCZOTMqxtiveseheHLMQ/8HoWYob3CrpHca4kwCcpJs/rfnOPHdwFg+P/
+mtVcr/h3JhrTTk6sXjwjL/r8kmdfDPheN3jnMGjF6UTwcgIBqNgbJw1ndHQJt8KZ
+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
-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
-HatDHaNVkmqEW15216HfYfYm6lW60oKR5INAVN6BAmyFpqejx+P/GP5TQLYw0HMR
-cYPf/2aAs2WNxDVX0f3U0ZwWV3ZY/cuavB9Q/+9iXggasXSZbH9iHe3QkqSHgDGc
-RdhggjnLtlpvW8535ZUMejjFVZ6+sc+8L6LngbLTk7VhYF1PkcciKmw4LBBYZk34
-c25695Fe2EUAG3kZr4clhGRK3vp7FwVPbbfAnNutM7cmrnvHywZbQbrRqg5wS1OW
-mcZQa04Te15c4migJaU5Sf2aAhlSdflxHJ8E749yfCDS8vmswGR30tslLfuPmQ5Z
-y+0nRMDQBVnOpbhSrRTMqrqVDB/Pk6ZdTPdgxWZfsuDsPNvJig82EhI5a15nh2r1
-PmlDSMROiVP3SFa/0ZXZD0/rl0Gb9IInOdhjDqNPAZ5yVaHuNvgKwi5VPeOJAp0E
-EgECAIcFAlM7UJRkFIAAAAAAEABLQ0Q0MkZGMDBAZGl0aS5tZWh0dHA6Ly9kaXRp
-Lm1lL3BncC9jZXJ0cy8zQUI2OTc4OUQyRUQxMjEwNjQ0MEJBNUIzQTQ1MTZGMzUx
-ODNDRTQ4Lm5vdGVzLmFzYxsaaHR0cDovL2RpdGkubWUvcGdwLyNwb2xpY3kACgkQ
-MaSRIc1C/wCgwg/8C1vLSzqKQvKYKiEM8CRWYGUjE+Ewwi7zYkUxxu5BEkdZ+rhu
-jjclhO2xUwkBBdPkGP8YT8ezzJ8BTW9xseHn3qrKZaVoKKwSuSHsqtZFFf6uzxyb
-5/K+EPO2+cWnIPT9V9URf6ZvOEezmKEY0x3A4516F35183CE48FAILED////////
+Lm5ldBYhBDq2l4nS7RIQZEC6WzpFFvNRg85IBQJbo6OrBQkNJcGoAAoJEDpFFvNR
+g85IflUP/iRUudh8Ao31DzriGcUOy9vGXml8IhejEFdu1zTvf9Iq4Wg8gYsMgNhk
+F2v5TnPW9Jey1gmyRwyCy07x+jgal3pixinaaRdKCbNbeF5R0U9DOHNxSNurNuVQ
+dt1W4asH81JZwZz5vWKlqpfKJL/aN7F14xKdgdfavX0XiRglEu/tVTfvRDSHhDJb
+VxpRxUzQRPUuL199Sj0SDaefjUtRYvudUs+c/Oob9G4m3p1paVSWuljm6RAXtj0e
+zJLVVdtZhHuQjcFCjXBE8i0e4/a4u6KNvBnV3IGBD/g78kMMSg5cEadGrtBOq4nw
+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
+V9URf6ZvOEezmKEY0x3A4516F35183CE48FAILED////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
@@ -2198,401 +2293,567 @@ jjclhO2xUwkBBdPkGP8YT8ezzJ8BTW9xseHn3qrKZaVoKKwSuSHsqtZFFf6uzxyb
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////+JAhwE
-EAECAAYFAlV7dkoACgkQG2HPlENjWfq7IA//crzpksoRnQl9lkQBJecc+46hYjkV
-eMCQAeZeRUFj4awmnt48xs0q3bu8+c1ZRYfOBeEkflcXESpfX3lKTeZqDqmKHg/x
-2l/ufZqvxLsX6exeeiml4hT/WjNfJF5A94NR1llaeXXtTyv1JwslKVO9d3NXif1c
-9RA+RmSdJs6anlFU9JbE/NZ7EINGEvGdpZ6vjKpMNZCgFwbjXSIlcKT6hUKU3zWU
-cP5H5SuyYFkGg4kqV0JUE1helO2Z+zWm+My2WMNhI/JJfU1xRFmOQiYBiNSSVMLc
-fzUt90DuvbVutWxTk/30VIoaa1ghjbqfe9xycaKwE/9Swav/DPKtfQdO8j0NTdKm
-zeNzMKvywgiip3LSo7uDSSTrsOtJHDVIciq+omwYLxMqDP8k22jBcobvKnuF24se
-IdTcbr2AIr2YHpzB/dzkqdLn/dPVTkdqzyn5GFQU/+zs09RHeTC2O6wDlIGTh9hE
-OtXE+N2PqA88qomOLzPqJ7BfVSuOcO9gCCcyVG3rB/weaEZQPobkDJCMXfMGtyMI
-0JaYpFSpT1gZgin7ukyeeyzhtCUVq/dJpn/0mwqw8zDNGkXpNjzGX8/iyOg0/NOh
-lgTyArvGKaninqx1cPwo4kEjya5dx27b5rTDKfH9HnH7B8KeIf+7fjEnZk/7bj+M
-rdyKrt1PCitJsgGJAhwEEAECAAYFAlV7pekACgkQY8VhS7RkGQvWmQ//XzvOAVWv
-N4CO9Lnk9cPN4EOarobc8USHkuNvBmFiRljwTdIr8eZkeR8r7/NVwGoVFqfxZshr
-TmzjAJupKcpcvrU0lAWyf3FL4i2YAbCQV+SXjuRK2MobyRtb99/kQXOyY7mdMDpb
-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
-=kexe
+//////////////////////////////////////////+JAhwEEAECAAYFAlV7dkoA
+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
+=hMwf
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/matthew.key b/documentation/static/pgpkeys/matthew.key
index de99002710..03f43e9edb 100644
--- a/documentation/static/pgpkeys/matthew.key
+++ b/documentation/static/pgpkeys/matthew.key
@@ -2,16 +2,16 @@
[.literal-block-margin]
....
-pub rsa4096/036F6C9EE7F39EBF 2013-09-29 [SC] [expires: 2023-04-24]
+pub rsa4096/036F6C9EE7F39EBF 2013-09-29 [SC] [expires: 2025-04-23]
Key fingerprint = 72CF AC21 79BC B024 B5B5 4590 036F 6C9E E7F3 9EBF
uid Matthew Seaman <m.seaman@infracaninophile.co.uk>
uid Matthew Seaman <matthew@freebsd.org>
-uid Matthew Seaman <matthew.seaman@perspectum.com>
-sub rsa4096/5D0DFEAF7BFB01B4 2013-09-29 [E] [expires: 2023-04-24]
-sub rsa4096/BB23AF518E1A4013 2013-10-06 [S] [expires: 2023-04-24]
-sub rsa4096/E527EC985DBEA0A8 2013-10-06 [E] [expires: 2023-04-24]
-sub rsa4096/00513F10E0A9E4E7 2013-10-06 [S] [expires: 2023-04-24]
-sub rsa4096/0AC81803C8520138 2013-10-06 [E] [expires: 2023-04-24]
+uid Matthew Seaman <matthew.seaman@it.ox.ac.uk>
+sub rsa4096/5D0DFEAF7BFB01B4 2013-09-29 [E] [expires: 2025-04-23]
+sub rsa4096/BB23AF518E1A4013 2013-10-06 [S] [expires: 2025-04-23]
+sub rsa4096/E527EC985DBEA0A8 2013-10-06 [E] [expires: 2025-04-23]
+sub rsa4096/00513F10E0A9E4E7 2013-10-06 [S] [expires: 2025-04-23]
+sub rsa4096/0AC81803C8520138 2013-10-06 [E] [expires: 2025-04-23]
....
@@ -97,19 +97,19 @@ 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
-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
+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
@@ -176,344 +176,344 @@ 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
-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
-u4Uc2hBUPLp/IrnDsFiyjIUlqMJkUJlohiOi2w==
-=1cDq
+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
+AhYhBHLPrCF5vLAktbVFkANvbJ7n856/BQJmJ1DIBQkVt0G1AonBvSAEGQEKAGYF
+AlJRQpNfFIAAAAAALgAoaXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0
+aGhvcnNlbWFuLm5ldDE5RjE1NEVDQkYxMTJFNTA1NDRFM0YzMDAwNTEzRjEwRTBB
+OUU0RTcACgkQAFE/EOCp5OdNFg//ZqeVdGoKkMvALPzZjGz84+6l0kcMxSN4TfWm
+ec0YpSmDEzCw4/SZoGqHlZb8lcTevmNrNXg6c+wVw6P+Ycl20Nzb98Kt9C5sz+zG
+VmPPK+3O9gaPnEqlIKnnbxKXXNHQdd8Mf0UTpifMqX0IkWOqhe/tQKGoQ9+feKvL
+IaToIe/NjosW6vJ9YAgFqZ0015zwbElhMNFmgDMOI2SgjBZ9ngP1U82Mqb7/7G9G
+xHtnwuJBSnPJgN8tav2O9uWPC0N8deyZBH4y9ERBPTFMc46wjkW030olcq7g4hZ5
+5rpPIEyGQZCq4u1gGibbiQJZEyUQT7BJm70/PeUr3uNjPlQODV/lF5TBvqGHEmlS
+Qfo6Yb/QQx07CK9bvhUSO2XP3ybS8JwoMZlgZzZcjiPiQF9ot6152/Cp/XrsKgtk
++fg5ARZpyywRlQk1JCHRZvhgXIxqNYA04uwdPFcLI4vPiDaLS8mhXHLRZsSpHmIB
+qqrnam5Lq7iDc39UZrSJMM40oy3iAOI2B7AOCbzxRuEplJd3E/tEqrnFGcPVN+h5
+2ka74lEyfkwA2RrASWJJcXLN3/VsizEj8okepefzjU/UPnU8sirzeWWo8Z4uKddo
+vk//NwAPUJbee4vZLjYE6MWdpEoZP9CZXbtIPWuc9Djg16aHOgv44JPokDMaHA27
+A4rw2KwJEANvbJ7n856/6kIP/j3wA+D/2dOTY2dGF07lrlX7iG/di3dIuhpOQdBn
+M8NNpFITER4NWv/JCvqw9MomIHEXN49/8fJ0PDqFFZNb2BMZJbGCdMHtUbfqJgVP
+hiojW3PR4JdD6SbDALqBKYOtIda8PloCJT0IpriwAK8VMBuhrOnT4dSXcQNaEO9o
+woyFSQOr7XQtn4RuBikav43DiGgYaOY3QNRK9KbutjwFbv5nf+O9jaLJ+PUShFhk
+HpWF7P5GUaeFgVgkgZVpbjF7VA3tyTKNxV2/MraYse7vFfN4P1MSMYABFEsrlD1q
+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
+qDyTPHOehU7NfSZoh9+SkoeOS6XEmw697Q==
+=b+Ft
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/maxim.key b/documentation/static/pgpkeys/maxim.key
index 7b3f2dd7d4..cdd50ad3b2 100644
--- a/documentation/static/pgpkeys/maxim.key
+++ b/documentation/static/pgpkeys/maxim.key
@@ -2,11 +2,11 @@
[.literal-block-margin]
....
-pub 4096R/9C5E7FA2F54977D4 2020-01-06 [expires: 2023-01-09]
+pub rsa4096/9C5E7FA2F54977D4 2020-01-06 [SC] [expires: 2027-01-02]
Key fingerprint = 41DB 9271 3D3B F4BF F3EE 9106 9C5E 7FA2 F549 77D4
-uid Maxim Konovalov <maxim@nginx.com>
-uid Maxim Konovalov <maxim@FreeBSD.org>
-sub 4096R/230DB271E4EDC4DD 2020-01-06 [expires: 2023-01-09]
+uid Maxim Konovalov <maxim@nginx.com>
+uid Maxim Konovalov <maxim@FreeBSD.org>
+sub rsa4096/230DB271E4EDC4DD 2020-01-06 [E] [expires: 2027-01-02]
....
@@ -25,158 +25,134 @@ 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
-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
-saVRdhbFe9aNd/O5iNgDcQtCUg==
-=692S
+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
+=Jo0/
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/meta.key b/documentation/static/pgpkeys/meta.key
index 78bf991c96..bcaeb911cf 100644
--- a/documentation/static/pgpkeys/meta.key
+++ b/documentation/static/pgpkeys/meta.key
@@ -2,12 +2,12 @@
[.literal-block-margin]
....
-pub rsa4096/9F72CDBC01BF10EB 2017-06-20 [SC] [expires: 2022-09-21]
+pub rsa4096/9F72CDBC01BF10EB 2017-06-20 [SC] [expires: 2023-10-27]
Key fingerprint = 61EC EABB F2BB 40E3 A35D F30A 9F72 CDBC 01BF 10EB
uid Koichiro IWAO <meta@vmeta.jp>
uid Koichiro Iwao <meta@FreeBSD.org>
-sub rsa4096/77C1E7C4CCDE08AA 2017-06-20 [E] [expires: 2022-09-21]
-sub rsa4096/03993B4065E7193B 2020-06-06 [S] [expires: 2022-09-21]
+sub rsa4096/77C1E7C4CCDE08AA 2017-06-20 [E] [expires: 2023-10-27]
+sub rsa4096/03993B4065E7193B 2020-06-06 [S] [expires: 2023-10-27]
....
@@ -28,32 +28,32 @@ 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
-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
+LmNvbRYhBGHs6rvyu0Djo13zCp9yzbwBvxDrBQJjWg86BQkL8nd7AAoJEJ9yzbwB
+vxDrx2YQAL/Yeg+8xbvw3fMemnAu/UR9GGgOkSeH4v8rYKQSfCMkGhQQwhli4oCs
+NPlX3HyLaR5rbG1ySd29jI/p9B4M+0A7zTymODeZ2xDRUmc2Xad+V4iEuTgI0AhY
+rTMAZvezD5khbZXQnAt0WBV+vAS+wA9xcBsNQ1cm0xqP/I2/uy7pR1SV8vDpE4re
+Kuw4DA31Imwz6mWpoe8crye27uYoF1NwHvzGDsnIqzy+YwniOM3IMAmaxNyGlL0f
+fN3E/bDcZCVN4IsDjS8t6YTAf57zOKR7PXAFRxapOMM0dqFFIpfCL225W06/uQYH
+aek2RqBSuI/hDDGaLZNR6NlxZN6U/D/tmeT2O3fX2125gO712jphHb1+pqebljm9
+Rh8xVQV7oUY7N6FbE1RUeai7PU0SCRrBylwkPQVZ7WW2LG5zl9aFaSqucToTZGgf
+kCVzsTvfuiBAfQ/WVWnl7bjvHw734gPTGfwJ1BHQMXBHbaCR02ktxg7xNUL2WumP
+TXwbhoV0KvsMD5LKh8qMM5RkpGf7scDrw5DJHjBI8Z+2sZqbwsSWjUfbuBEP+S7L
+aCPJPM6720E9q06UIShxjDSrz/h069DyHV86x8dcZ99K0NjX/FflwTZY0oMTdO7A
++e9hU4THnx8QOHtQame3Wchr30Vgya6lKrMjYHyfuXqIuKG/13HntCBLb2ljaGly
byBJd2FvIDxtZXRhQEZyZWVCU0Qub3JnPokCcgQTAQgAXAIbAwULCQgHAgYVCgkI
CwIEFgIDAQIeAQIXgB0YaHR0cHM6Ly9rZXlzZXJ2ZXIudWJ1bnR1LmNvbRYhBGHs
-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
+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
@@ -65,18 +65,18 @@ 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
-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
+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
@@ -88,7 +88,7 @@ SWMRl5/GLAzq27Kf+GvSQsDVE/D8qz9X1tErlfa3L+3Yhcn2M0hDzHsShxxqceYi
ijxR8fGynsvYIM+Da+8VVb7qGKOJ/hfL5l8w+lPg4kUUOcOJdbgWneXMpcNvaDlG
QgRb/87F1cAUzxF+tmIiAwAO7CuH4nSObjkv64mE+5m5c8tEkkV3JwowCluhOSrX
iPNS/UDGlf2gmPfBGOM66leMuL74MV1vABEBAAGJBHIEGAEIACYCGwIWIQRh7Oq7
-8rtA46Nd8wqfcs28Ab8Q6wUCYUmKawUJBE8HtwJAwXQgBBkBCAAdFiEEGKuDipBx
+8rtA46Nd8wqfcs28Ab8Q6wUCY1oPaAUJBl+MtAJAwXQgBBkBCAAdFiEEGKuDipBx
Z3RZFIcZA5k7QGXnGTsFAl7btjQACgkQA5k7QGXnGTtGwg//UXtfGouT3ScI+5Jy
PZl4VunOJ/Br8qLGyCW2O7a/NVC3c29HrYKOQnQMfw9qzoOVYTVuhbLIRO5MFwaj
NrJHIHaowre4mzTn/20aN+e/zOObZqurzY55GY/dE+55yEkbjlf7+n2FLECMERTK
@@ -100,18 +100,18 @@ MvEVmFELHWM0ElMEPrAGEpepqTWhjKGkC7cx0i4bnB+H7SACpj1Jj+XdHXnZvEu8
rcRu8h8PLCCYdO5KjeqLfgHOglSDStavm7h3/Lr1k+RxdcJ4JV2uKvjVZ7m/32Bu
V/zUzltpkq2dOUDw5klHGJCgwoOt8NJ7Zye4bRsqiUXXiGL3ejshj6GuWTzkZ9XD
Mmv3zfEXVTXOWE6ICKywPPnqaQfsd3FelyOuoQrKtoLyB/k25E5XEFtbs+V5R/jx
-j7nLC9axZ6coz1zHACCjP++eSlwJEJ9yzbwBvxDrIc4P/39+6H0FcxTaeQftlT62
-h1FyG5cBKfmeJGqUQA5gzgeJgz+YFUQd7Mq6kUqdI1MRig6POTNVCCrasZ2Wa74k
-t7iv82vrCCGHuMIlJCRlYmeRCP6/pgzZh1m/iD4Jwz74fB8QIWoctBsB6rWUBtWB
-OxlXb7iKqiVOkd1dlnGOYgA66ujIXeqUaVYWiPfv2RDnte+hLrlrFYOKjvPHjJW4
-y27lgpPdx4hR3LXWHvRSbwSet5LkbiqxouaaWKtR+Qcy4YSSKIbH5Np2TKbwrFcN
-7bj2P+r59G2PCT0VhicvhzP/x4gvlE5ceUaxdl5YyQfX4ILKOnvFRLsJxLsZWJ1n
-aYrMjtMkXwnithZtFf7fkpGZCUiATLdsYgavjltb+q80iEy/XAfckSOl+eV2GLV6
-5mcGMClWj5HL64Y0qPxaTvZfW1WNOyrWSI1GNkTPNZtRaikHyK1D6npXmP/JTlID
-eTFUQ3dxlnhFLdtivQwnWiIqtOdpnYmJpyMR8xIAw6tdIAahVOiBDyRveEOIigBk
-nR0jBzh2x9ToYpF4ofcEsWkjlTwCvhT+9x3+hbQDAIobqSnTusx4SXfZsYSRtZmX
-8W3l6bKkLOypYGTCNFYCfFyGILljxR9998k5Ehj96oOWqIv6FcZsWwIRZOCNBpIx
-BIpZlccjIn2Zsqgg/VlMpZGQ
-=f36j
+j7nLC9axZ6coz1zHACCjP++eSlwJEJ9yzbwBvxDrzI4P/jD3sJhZOMGzBbqan9+5
+6ys+zo0qniPUN23whPqrTQ8JjkO2YxPiFEhU1sChRgOux8WU0i3MLJNS6sUF3z/B
+lqlJjsvCoeLJiVb5yVUxUFnQ1kj71rDLRh0qD7i4e6wufTOKtKstvhJoasYpy4ic
+h7TRLxIIS9lqURf1M2CgZyt2Wc/xi4mkUxUquoDas4d5N7bg+0YWL7W8u4ISk4/L
++Xyu+qpiVmBHkRh8UARrqH7skMmkZ8QxKiO8r61XWahhXaOQgcZSXs87EmBsa04P
+9em4czOQfNGvIKtujQ2tILcodjiGUEDcTXUe6oIwBVMUBXr+dkk5xd6EwWj8kDp1
+a6zXGJaZO/tI7bfBVUkRzkriHAqWdtJctETUTCfP47PBlx2K54pgmmbi0XDLKz5x
+inHO9iPpoeESrAx1JUKS9Q7XySdl9IfosK8TCYxmvGNunlFiWZopodxbUBjWHx8S
+Tt+TTE0QDCex7P1O0r0p5b7MsrP49LDDk8a7rarGfgME9R4hGI1q1p3C2A+sTB+u
+7lwYnwks9m+/MF4Jx2Avk6XzxCD6B4TiTuYGtv2m0O2zmJx0NHY303/OlN2Rt7E8
+GJx3t69UkvarsGKh0yEx6ufei3sh6U16wfgWa5paMfXQk1pQRzM/DWM9/pML6Cj7
+H7u/ixKuickf4TWzIfbH+eEN
+=D6pK
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/mfechner.key b/documentation/static/pgpkeys/mfechner.key
index 236ee8ae2d..6756674fe0 100644
--- a/documentation/static/pgpkeys/mfechner.key
+++ b/documentation/static/pgpkeys/mfechner.key
@@ -2,13 +2,13 @@
[.literal-block-margin]
....
-pub rsa4096/B68B75DC9FD747E1 2018-03-04 [SC] [expires: 2023-03-03]
+pub rsa4096/B68B75DC9FD747E1 2018-03-04 [SC] [expires: 2027-02-14]
Key fingerprint = 6960 7AE2 60A9 F34E 183A DAAE B68B 75DC 9FD7 47E1
uid Matthias Fechner <idefix@fechner.net>
uid Matthias Fechner <matthias@fechner.net>
uid Matthias Fechner <matthias.fechner@fmdata.net>
uid Matthias Fechner <mfechner@freebsd.org>
-sub rsa4096/640EB84EEFCCE295 2018-03-04 [E] [expires: 2023-03-03]
+sub rsa4096/640EB84EEFCCE295 2018-03-04 [E] [expires: 2027-02-14]
....
@@ -42,75 +42,136 @@ unpxqXQl4QR0qXAuglsOMJ6yTogb6lc0qyEdOa5VCXQTLSD9yZpolSQOjOe1XEyM
J4CneI9YHc+joU2cXQi5MP1NzgMOV43XEZCiTW0OBWM1+857gmDqGbybE7F3UFpv
Bs9/NRWnuxoKaYxYbqCOc3mIXQQQEQoAHRYhBN8XhzXKDvF/yCwFNJGUv6kbdW72
BQJaojEcAAoJEJGUv6kbdW72dxkAoJLyFwR8qpT0rsI+8RJ3UQC7KIYZAKDISRNQ
-54x62wIvCBeBl5rCScmh7bQnTWF0dGhpYXMgRmVjaG5lciA8bWF0dGhpYXNAZmVj
-aG5lci5uZXQ+iQJUBBMBCgA+FiEEaWB64mCp804YOtqutot13J/XR+EFAlqca+IC
-GwMFCQlmAYAFCwkIBwMFFQoJCAsFFgMCAQACHgECF4AACgkQtot13J/XR+EC5Q//
-VP27UjB2c8hQrCf2YOIVy5wdCr2dkyhyWtvI7zH0xrqlAlpwFAguVE4kZFGSUKIv
-acj2crn2j5J0e7vDl21klWflUgGjSbENJPV0gPeC/KtFo2OnDQptAOPA+g69Zcll
-xirtMu2Amo4NdZ3tkMPOzmdTnFyhIyuaNnQMaEUab8+jwEy2L3yN2LvFHuC8Hfge
-fBzxcCXzfsoiu3LGuPE9qB7XQhQCrhSJNK935f8Gt4iRZc8pK1NXJAHT5+aF+lMW
-sp3uJMcqSYtSIZFL1QmQGykssAZTK2p4Y13TH87HSsLAlW8XwItMPIrS7RXdKjKC
-Y793bQtprh5Cf1SfENsJDecX42P1jDFQUL2PciFRRphUScUIDKA4znTBJi9Uu7K6
-0mZylwoWrmf5UPNOtYrzmIf62putwVmQKy9gX9nXMpAK07hYCBQxY+5WS4nUB0Ib
-7mRzZl3SSSF+x/FYWcVYlBn7iMeozCXldIaU0ukfLxAsO/dZKrG0t1S5Gf6n3p2p
-DiucVjsJ3zJKisRwRjZjDjJ8QzOrptQZunyucGD8lVGEyZ2/dnxZl761aybNkce0
-Q1FSSSwJ/U6cwHyD1dtwNaGMOnPgTTOjA/HtZIFaYs4fMt+QqtYygvr5/IPN2h+V
-kLFu+HWOb1BHhGDNW9jWbiCSTpCiAhZClJp7JY21/ICIXQQQEQoAHRYhBN8XhzXK
-DvF/yCwFNJGUv6kbdW72BQJaojEgAAoJEJGUv6kbdW72zxIAnRbu0LkMkuZ+Wmzc
-Ed/hRD4MylSyAJ9NI5tHeOAvgSlNdkJ8j78oPg3gh7QuTWF0dGhpYXMgRmVjaG5l
-ciA8bWF0dGhpYXMuZmVjaG5lckBmbWRhdGEubmV0PokCVAQTAQoAPhYhBGlgeuJg
-qfNOGDrarraLddyf10fhBQJanGwOAhsDBQkJZgGABQsJCAcDBRUKCQgLBRYDAgEA
-Ah4BAheAAAoJELaLddyf10fh7P0P/3keqxti9v1CSWKs0YsOlW8o2UgVb9DGBEme
-ls9mD1WlwIn3U6+h3JJUr7EkcUhipAUN2ID5p1Xk5MK/lp0mD6BwzdyVZINBwFvs
-/JXWD5jgAVaGGzqCCARZv2MCUYEo4oAJYb+Zgz/Vb2NJAC+I9UvO8U9VdKWYaidq
-uXOcSEmQ8oHW+PFiV3nPtL41TKBEL9KVMNX8dKtIvs7ogUlH5X3O7amSmcXKjR48
-f9fp9m6nNaTBRdEBtawHeGS0D8rHq2Phak816cl7STeKmPGaHvf8KpO8f9KxcFbP
-QJzKWkcM1zeTPJ9O0HtbSAbVnPz/FMI6eirqGpAyNKt1IxdThYNS1Fsk6VhOck+V
-Od82RPQeYMEtf80fFTT5yXWMPwXTaANOdQFC5DXsXcDV8yG9+FqzRG13nwtWynqz
-RntaMP/ym28b0C4eLtYES7OpZ8A8aTTrewLVeN2F/CrL6pm8PQPlI8orS8m4ft+C
-C4t8QDSgrFv/CLSMmXfBbwIZTXJFC56MMyWPinX18Gabj1nP8KPWF+9rXZ6rU62w
-IpMswXZjVswJhoo+rl9MvI2HvFNftdmvDwgfZyDUBYdQdmjSq4R4zr2YIE5MAyaZ
-TaKjriaE9mystUCVEnEv+8n4/AM352R9Nf6QZKV3m0nXnunze/JBikZKCKehcxcD
-+rpD2A+/iF0EEBEKAB0WIQTfF4c1yg7xf8gsBTSRlL+pG3Vu9gUCWqIxIAAKCRCR
-lL+pG3Vu9vSqAJ9a0WNvvM+blgnRI1itXx8+EONCZwCfVHOZloba63oTIb4qWtU5
-gXxYIbC0J01hdHRoaWFzIEZlY2huZXIgPG1mZWNobmVyQGZyZWVic2Qub3JnPokC
-VAQTAQoAPhYhBGlgeuJgqfNOGDrarraLddyf10fhBQJcM0f8AhsDBQkJZgGABQsJ
-CAcDBRUKCQgLBRYDAgEAAh4BAheAAAoJELaLddyf10fhbYQP/2ui+8XTAQcJK7Gf
-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
-/yaBqRn1jqlhrE8XvwJ0HF8Y/A8=
-=oQ6U
+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
+upcdu0+WPP4+2WOze1LNfiib
+=DvkK
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/michaelo.key b/documentation/static/pgpkeys/michaelo.key
new file mode 100644
index 0000000000..43adfe3133
--- /dev/null
+++ b/documentation/static/pgpkeys/michaelo.key
@@ -0,0 +1,96 @@
+// sh addkey.sh michaelo 1A2A1C94BDE89688 ;
+
+[.literal-block-margin]
+....
+pub rsa2048/1A2A1C94BDE89688 2010-11-27 [SC] [expires: 2024-06-04]
+ Key fingerprint = 6A81 4B1F 869C 2BBE AB7C B727 1A2A 1C94 BDE8 9688
+uid Michael Osipov (Java developer) <1983-01-06@gmx.net>
+uid Michael Osipov <michaelo@apache.org>
+uid Michael Osipov <michaelo@FreeBSD.org>
+sub rsa2048/A3F393B5D034A0A3 2010-11-27 [E] [expires: 2024-06-04]
+
+....
+
+[.literal-block-margin]
+....
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+=lxwG
+-----END PGP PUBLIC KEY BLOCK-----
+....
diff --git a/documentation/static/pgpkeys/misha.key b/documentation/static/pgpkeys/misha.key
new file mode 100644
index 0000000000..5cc032507d
--- /dev/null
+++ b/documentation/static/pgpkeys/misha.key
@@ -0,0 +1,33 @@
+// sh addkey.sh misha 93D8B69679F7260E ;
+
+[.literal-block-margin]
+....
+pub ed25519/93D8B69679F7260E 2023-03-03 [SC] [expires: 2026-03-02]
+ Key fingerprint = 251A 86C8 BED9 9371 26EE 4A0C 93D8 B696 79F7 260E
+uid Mikhail Pchelin <Mikhail.Pchelin@gmail.com>
+uid Mikhail Pchelin <misha@freebsd.org>
+sub cv25519/AAF943628471C98E 2023-03-03 [E] [expires: 2026-03-02]
+
+....
+
+[.literal-block-margin]
+....
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mDMEZAIOGhYJKwYBBAHaRw8BAQdA9shECRUWNZvSpN5y9zIUE4MyzlrRp4YmskKG
+VYnCUoO0I01pa2hhaWwgUGNoZWxpbiA8bWlzaGFAZnJlZWJzZC5vcmc+iJYEExYI
+AD4WIQQlGobIvtmTcSbuSgyT2LaWefcmDgUCZAIOGgIbAwUJBaOagAULCQgHAgYV
+CgkICwIEFgIDAQIeAQIXgAAKCRCT2LaWefcmDvaTAP9+sx0fvRzX1gbLOyznOYTN
+0Aw8ez13cGe8tUtIAMTFjQEA4Ce5EUNJTKkbh2hdFXfLtWwxYSujlmD04VCZ1l4h
+sAa0K01pa2hhaWwgUGNoZWxpbiA8TWlraGFpbC5QY2hlbGluQGdtYWlsLmNvbT6I
+lgQTFggAPhYhBCUahsi+2ZNxJu5KDJPYtpZ59yYOBQJkAg5WAhsDBQkFo5qABQsJ
+CAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEJPYtpZ59yYOvaQA/1Bnh6PZayegjHLI
+4iJWcM9OU777qIGW//7BnO0Zj0J7AQDTFufLyjFyLsrSeb76ahqgSraehvXCPGBu
+86N9gEZJBrg4BGQCDhoSCisGAQQBl1UBBQEBB0BSq/nK8SEpcbr24No9Mu/3Hfyg
+5xMG1sL5KTO0s5DKTgMBCAeIfgQYFggAJhYhBCUahsi+2ZNxJu5KDJPYtpZ59yYO
+BQJkAg4aAhsMBQkFo5qAAAoJEJPYtpZ59yYOd0sBAMt0enfp3euIb7+sDhacH0V5
+viPa4HGZhcGhek1dVtXJAP4sIiXMZ3gx851M5515LYB0p6QnBITqCzNefY9Tq9IP
+Ag==
+=TxVz
+-----END PGP PUBLIC KEY BLOCK-----
+....
diff --git a/documentation/static/pgpkeys/mm.key b/documentation/static/pgpkeys/mm.key
index 35b21ab8db..b28f55109a 100644
--- a/documentation/static/pgpkeys/mm.key
+++ b/documentation/static/pgpkeys/mm.key
@@ -1,12 +1,12 @@
-// sh addkey.sh mm EC560C81CEC2276E ;
+// sh addkey.sh mm 5848A18B8F14184B ;
[.literal-block-margin]
....
-pub rsa4096/EC560C81CEC2276E 2019-12-21 [SC] [expires: 2022-12-20]
- Key fingerprint = A5A4 5B12 AD92 D964 B89E EE2D EC56 0C81 CEC2 276E
-uid Martin Matuska <mm@FreeBSD.org>
+pub rsa3072/5848A18B8F14184B 2022-12-09 [SC] [expires: 2025-12-08]
+ Key fingerprint = DB2C 7CF1 B4C2 65FA EF56 E3FC 5848 A18B 8F14 184B
uid Martin Matuska <martin@matuska.org>
-sub rsa4096/26759B2C1AAAFF1E 2019-12-21 [E] [expires: 2022-12-20]
+uid Martin Matuska <mm@FreeBSD.org>
+sub rsa3072/2BBFFE6B3326FB35 2022-12-09 [E] [expires: 2025-12-08]
....
@@ -14,68 +14,54 @@ sub rsa4096/26759B2C1AAAFF1E 2019-12-21 [E] [expires: 2022-12-20]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-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
-SnhsHUNk+W65LKZ22ZjsJek8cQ==
-=BSXs
+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
+HXDL
+=1aSj
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/mp.key b/documentation/static/pgpkeys/mp.key
index 7e04b3db5f..39112bfdaf 100644
--- a/documentation/static/pgpkeys/mp.key
+++ b/documentation/static/pgpkeys/mp.key
@@ -2,14 +2,14 @@
[.literal-block-margin]
....
-pub rsa4096/4EE524FA96F4534E 2014-02-07 [SC] [expires: 2021-06-22]
+pub rsa4096/4EE524FA96F4534E 2014-02-07 [SC] [expires: 2025-08-12]
Key fingerprint = 8A12 DC54 2EBD BB37 015F B102 4EE5 24FA 96F4 534E
uid Mark Peek <mark@peek.org>
uid Mark Peek <markpeek@gmail.com>
uid Mark Peek <mp@FreeBSD.org>
uid Mark Peek <markpeek@keybase.io>
uid Mark Peek <markpeek@vmware.com>
-sub rsa4096/F2A0C29D400364D8 2014-02-07 [E] [expires: 2021-06-22]
+sub rsa4096/F2A0C29D400364D8 2014-02-07 [E] [expires: 2025-08-12]
....
@@ -40,20 +40,20 @@ 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
-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
+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
-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
+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
@@ -66,19 +66,19 @@ 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
-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
+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
@@ -91,19 +91,19 @@ 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
-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
+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
@@ -116,32 +116,32 @@ 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
-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
+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
@@ -153,19 +153,18 @@ lumFFIBswfp+pMsPuUadzB0WTy/e0Z1DQgSOi9/+iMCmGRCO102EsW2TfCTD/wyQ
e/J55Lrw6csMQP/1291PJt2wRLHqcmHXxn2fjwWY6ovoDK/S1Y5PvCRlefpfoJQ7
e50ofQggFzBMcZEUGr2yzpB3NE+OwG4d0mT4mWoavQ2mi3yiXRKo7b0TacOtXw2R
6qk27y/m1YEIsVqUA1t4EAm/AQoEC2LqU/4O5TSOIhlfNPKvIwARAQABiQI8BBgB
-AgAmAhsMFiEEihLcVC69uzcBX7ECTuUk+pb0U04FAl0P6vwFCQ3dVscACgkQTuUk
-+pb0U04GTQ//VC6n6oczodJTBu7ZnPIQOjUbw7qSQrZ+t7fASOMje3niU/N9trmm
-bq/KZ0nN+5OFUrGiZG9FYjqsOyF1Ayh0gxe1l5pm78rSFWDFL1Ta5nvrNAwM2Nh5
-HSjyvGbBaJtptJ+BDVlEzV34PnrTONZo27goxlGbEGu6ktpTifHx+eJuPGwxwC3l
-4rP+e1N4LdxXDFZD4CYip4mj0+aTZwu/dqWh80whMZzlVAstemGlDhxHQXhGKLKV
-6BZ1iTDak6bdnzkUaHdb+10PEXMhDbXKpsD9ws3lIy2m0T9n+N/aNCpDJglYom23
-04gq4IylnzMyGJ9sAtRTTGnvJOqJqfdjgq6wDK/nSpsZ/hA+GBiwwkbUfvg1VNZV
-5eGjLBr/1UwmPFKA40GFd1ocgjlSxGW+NdxmwQwfkkrKMZdSPP0bl0Q0fb8ODbaZ
-fFmc7WC3WYBjJt7zqEEzHR5RgsX0TkPOQ1lgzfRBjMgSFpJFLiNKGEaqUPJD6MUY
-Os+gVpeNpuqr80K8dWIHgZeTGet7zEnFDz6m3CuFgNvhogoR9V2aqYpIWClGeWcx
-1bfdCmDvidcn9OsHvLXLXgSFnz8Lyg+reUV/OKqQTcs/rRSnxRSllGvivcBfuwwo
-JFLoNsjxQ6Lm5gTdnELgoeJcY8JlqTkxDs2YJJgvPclbWfkGKV5QHAE=
-=j80w
+CAAmAhsMFiEEihLcVC69uzcBX7ECTuUk+pb0U04FAmTZYaUFCRWmzXAACgkQTuUk
++pb0U07J5A/7B12Qb7f/GD6Of6uYT2qL1eoROUEbGro3QYeMJEHMkM0GK0/abb2E
+5BJyiR1HARUgCEUdWbvsD4NhHlq0TPJecYxuyJDc0z+367zGfo3IppoNljkVBbS+
+dcawHMq3jFCmD/vERMWvgh4nKtPO51n5LtY5QBRoPaUMC2OX4qea/uZSSXul1xvy
+sjfViqWLs01EUPADyVwaMEbyEDvCaQL/9S822Ky/ZwWgaTaiXz2A7I9xnIDMovKM
+T3aYYerMQDl47XrhsZRIEFb5mqFaHlbtBRDTe/I1PwtEtd1BmsYL5ko83W5zzeso
+owNU6sipuEWRxAaOBBqQpi56/IDkCjE7M7kH14fNUZ3vAB5C/ow+VpbE06nFHUFL
+fHgwjALLfW88fOBMMNRk0oXoW40tWvZg2iTKde/sFh5K9DD48R91LoGAtOFS0GrW
+9MG4H3ooFSW94u3Mbym5+FGNJcu/nHTm20wa/jJxTrCrV1Ra+RbL8ohH3vS5Tn5O
+98bKoWs78cjeK+A7xDMvxSS1qNbxkffBhIqu6Ja1w+ftqg+FntdfbewXF0fkLtj5
+mQLlaok5EF0HdC55x2tCTMoYUyzHm0PZhIF/mUTf0K4fI1ZfgSh5Rvv+nWKjiBou
+bZvuwAVq43NymRlEOgTMsgblw0FksmfF9YfbVkKarT36kQAFpVs5Xyo=
+=0PCt
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/netchild.key b/documentation/static/pgpkeys/netchild.key
index 7a6a3f68a3..12e3956006 100644
--- a/documentation/static/pgpkeys/netchild.key
+++ b/documentation/static/pgpkeys/netchild.key
@@ -2,14 +2,14 @@
[.literal-block-margin]
....
-pub rsa4096/8F31830F9F2772BF 2016-08-16 [SC] [expires: 2024-02-08]
+pub rsa4096/8F31830F9F2772BF 2016-08-16 [SC] [expires: 2026-02-06]
Key fingerprint = 0340 55A3 1F55 0AD0 32E2 F6D7 8F31 830F 9F27 72BF
uid Alexander Leidinger <Alexander@Leidinger.net>
uid Alexander Leidinger <netchild@FreeBSD.org>
uid [jpeg image of size 9696]
-sub rsa4096/F37CBE8CE11D33C3 2018-10-07 [E] [expires: 2024-02-08]
-sub rsa4096/9A4BD0687E689F31 2018-10-07 [S] [expires: 2024-02-08]
-sub rsa4096/120DB09B03F8D886 2018-10-07 [S] [expires: 2024-02-08]
+sub rsa4096/F37CBE8CE11D33C3 2018-10-07 [E] [expires: 2026-02-06]
+sub rsa4096/9A4BD0687E689F31 2018-10-07 [S] [expires: 2026-02-06]
+sub rsa4096/120DB09B03F8D886 2018-10-07 [S] [expires: 2026-02-06]
....
@@ -30,18 +30,18 @@ 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
-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
+0DLi9tePMYMPnydyvwUCZcNBZwUJEdKv5gAKCRCPMYMPnydyvwkmD/9+qSadneLT
+xKJw2gGDJkOkD78OejUQPyHpRF/vSW5QJC+jewfzef5JoKft5HgCIWhNyecMEmsw
+SavqrllyE/ctKygaiga3Llvic1xORbRrKAK4T2YMoMUtj1bh//vdmRL4cP+yayJ+
+xpzjvYhqu5cuKmOtg7IuacvP9tAIeqNmmHxEcVv5CU00VjAbC5GIphQe8wImZgFg
+PauJ6Uu2D4gugpo+DMuEVzIv+jLhbU1GQ+TxaLAbws+OWQnJ/mQjmU3Rb1p0h62I
+LcTMD5nE0gJ9R9nPZhq4L/8CeDeAzvz9HsF2v5V2ZaBH9/o2d9nFUM/h5BS1GRcL
+OGMYR4hOarzT61qaZ+vZI94xfwgju/x79X/Tpw29pA2jurxRo61A5yOqHcempUFp
+xL6E59LYwm6PbdwUKYXU1OdJrQZ8Y3fTVv+A43oo+HE/9HeUz3M5blxIzNVWETDH
+a4/tfjh3aqxo8sdG5fGL6Hr8hNsfDxscjeLKrK10UzaV9yCC04h9mLYdNxKa/1Iv
+bf6MnybRZAQfeqzXfz+ZUICPXUVTjaGCD1bfDMolBizJOTNQvuvWfCEJ9eH4NQFf
+lYp1AQIR3R0DCichXz0qwsr3tuFn33zZ3So35nd/3v4NUa3ryYJlPbUc53s7929k
+L9W90OPwE2vpJULq5y8eKhA6DJjc5i6ah4kCHAQTAQoABgUCV7L6vAAKCRDHc2lr
O6wX3H0vEACTcSGYZwrporj1iwc7UnrDKarxrocNP40YWNNNIwGzwjofVBOx9dYM
9PlkIxKDowtQWW9IlvWOHJfVSxmQUnxELRw0hMaKl/vj5QMkdfWtc3NfnqjFNI4g
xfxdoETnf7V5ma5S41zG9VVfPBWlLnRb9b3aSWemvi62U2mycq2u0cWccDyelWPn
@@ -53,353 +53,443 @@ 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
-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
-Bdmb7wfJneDo7aoc5Oo/lLZn9I3wFqKGTQ==
-=5+p2
+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
+qJcnYA==
+=5ipl
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/ngie.key b/documentation/static/pgpkeys/ngie.key
index 38c0fb4702..f003bce0d4 100644
--- a/documentation/static/pgpkeys/ngie.key
+++ b/documentation/static/pgpkeys/ngie.key
@@ -1,11 +1,11 @@
-// sh addkey.sh ngie E4914D31978318DE ;
+// sh addkey.sh ngie 1A91390E33EC3498 ;
[.literal-block-margin]
....
-pub rsa4096/E4914D31978318DE 2018-12-24 [SC] [expires: 2023-12-24]
- Key fingerprint = B6FB 7137 A90E 9651 05DE 7997 E491 4D31 9783 18DE
+pub rsa4096/1A91390E33EC3498 2024-03-03 [SC] [expires: 2027-03-03]
+ Key fingerprint = 9077 DEC4 6449 DE06 1174 0DA0 1A91 390E 33EC 3498
uid Enji Cooper <yaneurabeya@gmail.com>
-sub rsa4096/057B0DCA584EE2AC 2018-12-24 [E] [expires: 2023-12-24]
+sub rsa4096/2DFA57126249D2CA 2024-03-03 [E] [expires: 2027-03-03]
....
@@ -13,55 +13,54 @@ sub rsa4096/057B0DCA584EE2AC 2018-12-24 [E] [expires: 2023-12-24]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-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
+mQINBGXkHwgBEACqVO/bxv1AnyXLb51o4ju8PXhPVBA09nY3HL+gx3msounXDx4l
+w9DJrtiFJcsB3AJresBcIMwch0nNTGW3bGJRU5O0ushlOEmA2rt5SVT/JQn/tRRT
+q09CTPwGH7FOCqL23gyaNGhlDuXXHnFyN7t9FVQaaepynXJ2iLaNJk2TYQkF1EqV
+llMHNC7GFbDvhRx277ZY2ihFDPS8batEYT+/ZAbsCzZ2xQkEUdEDrBb+2iBbxeQP
+iggxwG3aW7tDjSVSwwVGAKfDqlJs38TGVt13w3dmfhBo7oIYXRV45KP8nyjirBK0
+jU86RklE/4guRt183uadw61X2Z9kXmYf/cWqKgoaigFy4P2THiXA7ia0Cd3uhHtf
+ZieLPlw73h5Y/5ZdRsbHCYipZ+8MjM2QXTxS7Gp4hC805d/LGYTdx0+sAa2Zt244
+4/O+yl5GFoMynoDSwMYa1YRseHOGwTmczqctR5tlEO2hBNTd/19X5vU6YsOY4Azs
+UeyTB0TDLgl38CntK39q3Oqx+VI9ZrpaEL77GAm6cDOOvr60u7GS3HW2t1vSjtVJ
+mnUbedPZuJqJvSbbkIvjFI8ok07K1uiAWMQPf9aocyd2JOh/FNY41QXS+gF+Ccs8
+08wi6vbJEfOxG+ShCmjarprv+hpEwaUsl2qitd+iCiMzTRUn1odS69psswARAQAB
tCNFbmppIENvb3BlciA8eWFuZXVyYWJleWFAZ21haWwuY29tPokCVAQTAQgAPhYh
-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
-W+gSPgq9DYqCQ+A=
-=NgrV
+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
+BJo1rnFxby/FXmc=
+=YH+2
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/olce.key b/documentation/static/pgpkeys/olce.key
new file mode 100644
index 0000000000..108719b160
--- /dev/null
+++ b/documentation/static/pgpkeys/olce.key
@@ -0,0 +1,116 @@
+[.literal-block-margin]
+....
+pub rsa4096/E71A7F17EBE6B2A3 2020-02-20 [C] [expires: 2030-01-01]
+ Key fingerprint = 0EE5 8C15 B74A 35E8 B422 7CCD E71A 7F17 EBE6 B2A3
+uid Olivier Certner (FreeBSD) <olce@FreeBSD.org>
+uid Olivier Certner (FreeBSD @ certner.fr) <olce.freebsd@certner.fr>
+sub rsa4096/20C6AECFB48475F1 2020-02-20 [E] [expires: 2030-01-01]
+ Key fingerprint = 6E61 8CCC 5C4A EA27 9705 C170 20C6 AECF B484 75F1
+sub rsa4096/8CA13040971E2627 2020-09-17 [S] [expires: 2030-01-01]
+ Key fingerprint = 98D0 B11E 3928 B1A8 B42D 822E 8CA1 3040 971E 2627
+
+....
+
+[.literal-block-margin]
+....
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQINBF5O978BEADXxzdR+fuI5BX7woCXJr7HLV1ukwyNiirhd5ZI57xXHvzjNefD
+4O7Gz7JDGQqKGwP5+jwkwsG1cCcVGmp4ElLY9UTbRyf8Z2e8BPZyak0F1pFrmZrq
+RVhblmnSuiyxiuk9+b663Uyij56Qk3pIYWuPcU/hVO3G6xwIy5voW8yjq3U1k0+W
+fwmqlEgD0YJ0nCwVrAiHYRJoiNhbzuNK99QSDTu7SiFSOFW9OZ4zYXOdx1BymwgO
+kcqLQMQrjQ+qIQvRtPC5ig4KSHuxToesBYMvC3EbiCw6lB0cR37n6CwTJhuImlR6
+zep4EJhEiTERqj+u2TKrRGORxpIBczK/2xSRsmWAnWTfPvu8uSWiHQv/Dj8BxYMM
+6oaH7mpQx2uieEHnIegkBQ6knH9egZkQZlyU+51tCG8gcV762RgD+J2JTBGUjgfi
+9+AtL2/xMNbHPBixydbwQ4b4eFaw/SA7iCVw8fy92MtTLCShoF31zox7HU3IrkK4
+0cA++LdDPXzBYn6eYpL7ThqtSHfrKWnQV7JdL4sIkrjwIUDisb6Mt0xvg6py2E1X
+dReOR5TpWOHb4kQoHXqHU2t6cx6/Sy1nMAt6qfHCMibEdmriNyroupqEGVy8Xihu
+QC3WB2TazcdgtyafQjC0FBtzWeaYB9LAlwx46fD0xCsPrNtJ1EVMW3WzzQARAQAB
+tCxPbGl2aWVyIENlcnRuZXIgKEZyZWVCU0QpIDxvbGNlQEZyZWVCU0Qub3JnPokC
+UQQTAQgAOxYhBA7ljBW3SjXotCJ8zecafxfr5rKjBQJlduKZAhsBBQkSjODBBQsJ
+DQgMAxUJCAQWAgEAAh4FAheAAAoJEOcafxfr5rKjHEgP/Am7vZbwP42oWvB8xM+U
+rWLZQexP2ogmBFhgB3ehjkg5UgWETFLI0n6y9xqKQ3VO1HkAF6lGKU4jyK2VtIpj
+S+fmwok1B/KD4UUHhFOpLsGB/ImV5FrSvUpGshQKz10xAeEJvuSem6cROYsH0hEP
+G5AYyZioQksVsN8ZDgqfehtlNDgUi5bTgdasp7Fjqmlukglstg7i+meUHWHCzc5I
+xq65pLd3XwLinJC7t9s2ko5rGk+sun/fF5SHP5SlH4FC5w32goVZjUY2PT19KNv9
++Z0gpEXoQCbl5g4nsiE9d9qCB0GlIHXAuEtC8blqJZSWY898qHMrwOOlW54E1VJq
+3wQTKsAFxA7olBQcmPJi/VwMoRd2ZgGTEPf8yT9jkNvwA0c66JJEm/B7MBZsIICR
+T1O/948PJk+T9aVplz5wTAdF1mxXXvj8JYA1ilw8+8TvEmb05XepPESNYCYv5Jgc
+fL1d3DzTBf4Yg/if2x69ssERLnuEZc7tuH9KtmrJCKHQXQZ61JsAQ0Vo7VzZMwaf
+C2w4Ns6UfzvxAyJdeyfSvHb1HjNlAjoszorRlsacyVBxO73gQ7Png49OosnUIm05
+nFlAZoTLjeDixAE3UV4z81IW5l3GUAe79gcWYhMjt790YMxIwPo3vdV4KR8GLDpg
+m7xChCaWH8KWHJWDxpkSRft3tEBPbGl2aWVyIENlcnRuZXIgKEZyZWVCU0QgQCBj
+ZXJ0bmVyLmZyKSA8b2xjZS5mcmVlYnNkQGNlcnRuZXIuZnI+iQJRBBMBCAA7FiEE
+DuWMFbdKNei0InzN5xp/F+vmsqMFAmV3E5kCGwEFCRKM4MEFCwkNCAwDFQkIBBYC
+AQACHgUCF4AACgkQ5xp/F+vmsqPWeQ/+PNxKLZZT6TdyJquiFpSWV+3nFD6imXEi
+tt5ZzQH4+jHiEookeEPrJG05N18g4UKO4UiAaCeDG2qGA2g65aDOYSiQkc5W3APo
+0Q/2Svg9NuXHUlFQYru6GFQiiQcAvtpYzq2CaVp0DPxKAXjNFTE+CH/5T/UrlNLz
+MewyeggUN2jAkjXTF6L9TQaBEgDLZIBN6vGAR2fsYc6OL6Fogx15bX2j5GeyWYv3
+Inus3zEBGtV94pNrbcugDnFwXLMvVTUb11A7DQWITqk9G/n5a7gOTqsbUO5+SCi/
+XMHL0H3X/jp/nG/tS9gcqcES2QHxvVE3w3HY+zyYWpMOzQmYhoHCOkDlm0wNOrRD
+P1qCP8YyQ7vXhB82OJ7Csi48PZTewLz122IKYI3Q3MPN0Yf1t9ZIvRwJH8ob8BTW
+oZKwfbPTJL9FpKls0Tc66bS1PziFE0lEgOloflC3hhk8VOtbUIpPlqEwzdWSYWxl
+Qf4FKDMSjRDhnfXo1dAwRB5Z5mv5Q1107TOYgi9lJtz+IIrf9xQqIfGMrwUF9c7R
+NOVjZALu5bCqiqvYVqsdc4u1t3hGIQmJKLxp8n2V8VsKk1zIS/iSAJz//ZLC5wP3
+gGbGwLIfgDHPI0SPV1i5zu6M0W7FKqMtXrpg9hF4c5AeuBWdACeN3Or4avf2EzCR
+RIjIPD354YG5Ag0EXk73vwEQAMUNQ+Wttzd/pw7SOZNSpH+qaJoYgEddFMLHRGHE
+X9iGrjhBXSZgNI69ify8tS46cCVaWnAr3cDTNaQRQCvgyROFWGCwJU1cNohSEGdu
+7F316OGSaAVDYNqqasROFTL/xeeqpmVUAul61PMDz0tfkEqjbeua5vzUxrBB43mU
+8YCnzoPG781IJhhBJ6yt3HHKp1ObO8E3PAgoh5fde1L6YvioVaMj7NCiVscthKkz
+TH+wRlqhNcDgPkExN9sAeIr1tU5oetFXuQr0pae0En3JzqNKMUS1drqlufMMpCbG
+zdxJb3Z9i6S92QKwIzgB7HXHxLSPNnlKBt8JDmSXBq4JQ8WizKVbsCfGH58S+9oQ
+9HQ4OHw9m68Z7/vrUWlvGwOCszrm0G4T3t2yTMkW9130+lw9xwSQq81mHdN7fB/0
+J5s9okqa8/K3oWmhhsQgdReWzp9t9HtY13wCktoCl1TchpI17E3ZXR1bjRuLigP6
+/Y9EMrIDs8yd+bXjpD5T9o6frYEe/nIvDcl4jVkvAUq7Lpf6GWeQSjyQtOYJhV26
+Nw5ARbaLhP14YbecQqejfQpJ1DtA+RKwyd/KKmJL6yn8JIeBw3Ep9wT+WDHblRN7
+cmNyYQ6qtJxNmPuqmU5VqTndXsWGJUY8JB5h61DXggO49fH+0ub0w6e+klz1so9w
+ZdNfABEBAAGJAjwEGAEIACYCGwwWIQQO5YwVt0o16LQifM3nGn8X6+ayowUCZXbi
+VgUJEozgwQAKCRDnGn8X6+ayo40RD/4isSTl2P2+0nbE1xKCRO5knwqfbmn30n15
+b5e2N6E0KnhRROhzmxAXwcUWL1s4VazWBeKg3J2dptpUVMdWhimxFVxrWclWn8JM
+8PZ6EKVTzoL/qZgW5uY0YtGhptikUwkgb8zZwjV0LnrR/6G2c09uYxhq44vcoIBM
+ivoo47Rmi+QQXwcEopXVNNx4NO0rVsdrhxFzFTmAXAdLdB0GtzNVfzISf68ewXY0
++gXnbWNZnEcqcxIlwjkbjR10yT4rtV3si7AEskxEyFpLuXbOlHIC6E0ExJv6Tv6T
+ByGyIqdqUQyZyrJrQHZpQf+9s5JaSU+coKLij3KImzGR0Y2k5FeOXrcUwQ4vNgud
+FrRilAdxobwJqV/dhsZJDa1chuyoBO5THUuNKIySKBf6NmtC94TQ1efpzrwKeFyN
+c7FMQOX4iDR4o8iHl4uAP+N8433KmWZ87JJe+xhoXULwF78ix+KVMlx7VgpAh7/V
+6zsaS8EYP+oXISVwA3d6sLTS82Wmnt+B8oU9WOjCT1Mtz8KiXBH7/EU9suKW3h3w
+LBPgv1rqyW3HcfLY1m4+30puF8PoFfo5A9qClXh2TYM2qvT1OuIfYbEmoKRZwwnt
+WU0BFrxzerQsaIAL+vhJ9Vt9iL8gTHY8OfWgiMsRxlz8v3ZEHvip0em3dwQEWete
+1uMlS/NS+LkCDQRfY5koARAAu1axVVJZUIKpJT4c5gWk7Q4t71uNbguXCr6Le/vQ
+vZK+bkPch/cUDpifLjh6cVVPFQW3uid1e7EihS320FH3nVnJM9mhBYdn4fsVMsNe
+VFQJ5hJ9bcMIRiS97eISKQMRJl6UKHfwS94KS+djsJlKwqIf6xTiKwq0DBaz4GAA
+AYkXs80+rJCD+JPRpIM3hVy/2uNVxPwZqKJeUxcV5En/T+Nr+f1A/pSNik/nCk5W
+FJ3/+lV3okHl47sloKorxPTBk3tF/Nqq4okfYPtixhM6C04G4m2FVAGl+fxjHYrH
+k/EtLbQwOlYO5574DE//HHiuVYXREeee9eXieDD8LOOE7S+P79no8MmWofNop3fB
+6z9erNAdITcAF53MsViWPRBexYqyf24U2dv1dYCxcfJZ9ngeyonsbu2Vv3DQwIeT
+p1wJuMLpbEJqgR1XOZY4s+OjJC/ZOBcBmWxdFMQnK5lgZdVuncgZ4JgJ3m/y8KnH
+ydJz+t2ELKi0mqNEj6aoRXrtOD7kWEgB4Jxoqbw+pdLKodzOl870pnASQfWT8sX0
+9L0f//bKfR2+S+1dRLhk5U7Xp0IvmClr9ySZmeTGHWRKP6mzQF6u2l7lSHQQEdZ7
+8z8ocrOdUfJPRaQxJo+u6nNS/2Ow2rvVXBgrTzZgBpjc1eZE28h5nONy6bfkfAEq
+phUAEQEAAYkEcgQYAQgAJgIbAhYhBA7ljBW3SjXotCJ8zecafxfr5rKjBQJlduJW
+BQkReD9YAkDBdCAEGQEIAB0WIQSY0LEeOSixqLQtgi6MoTBAlx4mJwUCX2OZKAAK
+CRCMoTBAlx4mJ6M8EACr2FzT4zCxAWRRV0hGhyhtlz2tJ3DOrTrFJM7qY6e85Kr2
+bJBfkuzACgOfen6j1GC3gdhXYc9HoS9JlHVt4vjTpG71Lm53cPq0EGIoNGG+V+cQ
+PnasWc4U+ldwY0b8RFTF/niGhswuCBYn4TpAi/1OZNnaP2xl0fTfSIl6/PHof1tq
+pm3OdyuivpotaNI39ZUJehUoxSRL3wkYzutmmJhOuNIGdgpU2WyyLjF62De0tgcc
+yb3Vv+Pi/SiMKt04PkkRwTAMeTewARoYUOjY+98EvkgInh7ubT/cjqBL2NtwIh3P
++drErAlh6bcQBysWFlix9iJ+tLGqtd+/ZEOmF5+o4XRyIrqwcff80ZDez9xXjsDg
+AbpW0iOmkYGSJWJf6rxu8tgDMuMvCV3XzEQbJGrjwp1vnLY+9laZ0Pzvf+DGIZqQ
+TTv2ZTqD1sQ7F6d3/v7hAod6pZt4CEtznuGIQH8P+7+cWN+EyGpjwew3IUGVdQxB
+6toAC7WRGu4KfUTwtHSYScZbYU15unjWy0CCWkgTu/zE7fn3IgGBWj8ZB4K74Jp/
+JxmCVkScyJboPvWoSwUcSPkCLPJq6MruN7lmbJxAvxhuH/KGZjowvs2s/HE4bYw5
+4Ff4D9yLX5vntmpSLM5JSfFI89YlLXzKxjp0P0VnQVYK2kD3jmmGXWHqbI6UVAkQ
+5xp/F+vmsqPR5w/9FnbXxTmvdUdpiePxbIqo48QDLZi8PrjEfV1if0driwbMS0z1
+rWRQvlF+B1c8Ccu45dkv7zZlBc3/itY0Ib+xh7LlQXV5sypDJ936LJ97KszxVaKY
+YEW8S/HK9CCpdCQvUjZKbrSLJe5VDITUPRPzwJ60oJ8pN6xuZZ54++0vyixdmsmy
+/cZLG0H8JKKqHyNA95ZIDIN9qIEVuSZWEzdM3INLeMuFPV9+jXxCJHdNCWSjqAU2
+qK/B1V1WBfaxTTgbheOXXuWzr95PurubWTaVNLyIBAmqOnmpnejgpGqc0Mr5+pyS
+N7x2qtuLoSyxw5FvzzGMpZq8FO+nQdnMZ6e0B3rtyTyVjZOwdwkqHxVBxCnhvAYT
+T9scK+E41uk6xPcdaULIlRFTZVZVPglIbFdlD0toZErv90kH/JMj5DNVCZrdVoJR
+R81Jvt3h5cls/j6rivC5d1+6UktZd5Uxwv/t63CFQ7bAnUTNuX8zRH2DEEk7yqKe
+L6PVvhHun0lCZeyFtlYNuG1CS8L/B8y39nDNqTfR0lgmhivyy/1bqcrlw43hryfv
+zOKcDrAH0qN5B+R3JBGRZwYiWJNjUxzwhqQj94HGELnrxMk46xWlxq2DWpf/81X5
+LL8RqAPZM6cZTW8n1E8rnRPg4R+gP1dd8NBZ9WPQDxx5jPtzX/AD10GFd2U=
+=eCcC
+-----END PGP PUBLIC KEY BLOCK-----
+....
diff --git a/documentation/static/pgpkeys/olgeni.key b/documentation/static/pgpkeys/olgeni.key
index 31c47a93e6..2b3e072133 100644
--- a/documentation/static/pgpkeys/olgeni.key
+++ b/documentation/static/pgpkeys/olgeni.key
@@ -2,10 +2,10 @@
[.literal-block-margin]
....
-pub 4096R/FCDB3E82F778D8D7 2013-11-10 [expires: 2023-03-19]
+pub 4096R/FCDB3E82F778D8D7 2013-11-10 [expires: 2025-04-03]
Key fingerprint = EE37 B427 91C5 7707 EC54 064A FCDB 3E82 F778 D8D7
uid Jimmy Olgeni <olgeni@FreeBSD.org>
-sub 4096R/4B2EC123F42A1D2C 2013-11-10 [expires: 2023-03-19]
+sub 4096R/4B2EC123F42A1D2C 2013-11-10 [expires: 2025-04-03]
Key fingerprint = 33D9 24C3 C728 0411 916D A431 4B2E C123 F42A 1D2C
....
@@ -68,19 +68,19 @@ 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
-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
+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
@@ -91,19 +91,19 @@ fKuRu+0GXxpXvV/XFFNPRGt3pvChsovGwY/hrIKvI/4JSg0JXtaZ3AUI9PEd1yUz
TjxQjbFQARcxoXdVcx02NkAYfz3EejO9T4YvOUQNw2o4eHwbgO6tDjSM74LfnO/D
A1al0LeCAgg+j7Fxe5ghDEx/WibEfHQnhdGu6KHV1oKCcuP3lEudHwtm6Qi56FtQ
tbEqi54AkOZ2Z6neHg9kJHFuQbAxiEXShEOPQISy0ykTIzDvDlrt0NfiZ/BApjJP
-bg793QARAQABiQI8BBgBCgAmAhsMFiEE7je0J5HFdwfsVAZK/Ns+gvd42NcFAmIs
-goUFCRGXXLwACgkQ/Ns+gvd42NfIjhAAxplqcMa62c1nyJwSRpTjtb+1Bszd3zr4
-x4ojmuogHFOkn75LOjigy+X6Swjjt9wC5Im/rw4cN/fHe2lzfqTbun5sUV3eDxR+
-QG6w0bPjwbnchRtxn20vbssd7WIl7dS6keb5yPd3I1+EHFWG6c3+oLHDAdUi6kFN
-XEmRFZLVhx5FCpSCo08DFHOYx5JUqMxJQ6nmN0LOwT8/YhR0vZWa4ny1SMvdhTRN
-+T1lVXSW1DtQPqsucCL4WWXq6A9kna2d4VTqad1yJeXwqZkvD0t0k1voHOxwHIlW
-pN4wLcXKZQyEwSnB9iUH4l1Ur+eY+ZTNSuv1aZPghpnlrh8mxB4tbdohwwc9jCO6
-fdN5syso2fumwmzV9aspD7G4IhGioMKzomN3mkpVqIZ1s4MrZLcWie/jG+RnJSES
-GCGUgbDNvzy1U5nitm3QiJiPUewg6bvCAZ6QMzKyPmWV9t48wBp/VojZmZAwwxQ/
-jp4CHz0CTRrUAf8Rh0L5Kb3qcYRpw4oFTxevJept6Z3jC80quiZtHlcI0Ue5JLSN
-gftIqUYqbmsAT0y1WR3paJkf14bs9jlu0UrBjaCGH7S+vPnbsnmF8iExCgP49Rf/
-+SIMMnaSn97qcNdQUEH8tohNDvImEwxL6oSz9VWzNsCoWniBHMugh5I/6lV/Paml
-yGSlvsFqh7E=
-=DT34
+bg793QARAQABiQI8BBgBCgAmAhsMFiEE7je0J5HFdwfsVAZK/Ns+gvd42NcFAmYN
+Gc4FCRVuuYkACgkQ/Ns+gvd42Nd/qxAAh3OERKA2uXMBwzOj9mbR8jeMAkv6N7vZ
+5BL92yV3QXoAMhc7xcoy+GUaZ6e0XQiHTFPj7MjQEIkzx8X+r59xnOmQ6DyYg3r/
+tclg4wiAo5qUvnzm01xCufLrWKhw8vgajN/w2DBQy110TVNraZBQtlf8B6zPU4x1
+CcepBb2V82PD5N1+zDX2c9QFu3+4rW/0eXEjXAjIRLcRp3eD0yL9fzFZ3muLqK8U
+bDkbw/vupsRTTF8BKsZi/EKdC4BshtGpzF0evgw5Paal67/TbHwPVYl0XkTb3pTX
+MNE+pciA9ABga+Q3SEsywdSzV+kMW5O7j28K0mFbC5mOG8KCid5oRoKssGwSpebv
+q/7XhfX8Nojk3wn/jib308jhzXtP5HXQsVMdfWYgPMUtvTCGVfIRj4J4hns9L9pv
+5I+VTsb+g+Ig9/1dXFmGmKQ7TtII21z0laEHaa0ux59B5uPaNNuCB6acliSNtyE7
+Mxp2Xxhg+5u88QEYZzQEFys+MzMLWp9LyfkbNXOc18KO99r6pOAVo+EXORNdQW3O
+bV63zsPAHXeTAl9+gKIvE1YLZ9j30i/vK5jnxNv5JLRwS1CVsI6rBiPHlT2T5x2Y
+/ibr622fBeBfEA2IVxAIlkIEXysWh7LwaDiamKuHEeX6h0wKtV63wnJ40RGj3XWZ
+dNC1Ggftu2Y=
+=lZSY
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/pauamma.key b/documentation/static/pgpkeys/pauamma.key
new file mode 100644
index 0000000000..fae6143b7b
--- /dev/null
+++ b/documentation/static/pgpkeys/pauamma.key
@@ -0,0 +1,56 @@
+// sh addkey.sh pauamma 02403BC4BB115DB9 ;
+
+[.literal-block-margin]
+....
+pub rsa4096/02403BC4BB115DB9 2022-06-26 [SC] [expires: 2024-06-25]
+ Key fingerprint = 07A2 EB3C 30DA B5A7 EB57 8393 0240 3BC4 BB11 5DB9
+uid Pau Amma <pauamma@FreeBSD.org>
+sub cv25519/D68A3AE50115C043 2022-06-26 [E]
+
+....
+
+[.literal-block-margin]
+....
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+0Eg+6MzEUafJu8fZ0K0=
+=DCEg
+-----END PGP PUBLIC KEY BLOCK-----
+....
diff --git a/documentation/static/pgpkeys/peterj.key b/documentation/static/pgpkeys/peterj.key
index cce9785021..5f25dd2573 100644
--- a/documentation/static/pgpkeys/peterj.key
+++ b/documentation/static/pgpkeys/peterj.key
@@ -2,15 +2,15 @@
[.literal-block-margin]
....
-pub rsa4096/1D9214A2699F8CB2 2014-03-11 [SC] [expires: 2022-12-27]
+pub rsa4096/1D9214A2699F8CB2 2014-03-11 [SC] [expires: 2025-01-14]
Key fingerprint = D8CE A5F2 F7C8 78E0 0297 8B94 1D92 14A2 699F 8CB2
uid Peter Jeremy (preferred) <peter@rulingia.com>
uid Peter Jeremy <peter.jeremy@auug.org.au>
uid Peter Jeremy <peterj@freebsd.org>
uid Peter Jeremy <peterjeremy@acm.org>
uid [jpeg image of size 4183]
-sub rsa4096/E0E07EC247C92CA8 2014-03-11 [E] [expires: 2022-12-27]
-sub rsa4096/16A597A0E4A20B34 2014-03-12 [S] [expires: 2022-12-27]
+sub rsa4096/E0E07EC247C92CA8 2014-03-11 [E] [expires: 2025-01-14]
+sub rsa4096/16A597A0E4A20B34 2014-03-12 [S] [expires: 2025-01-14]
....
@@ -31,18 +31,18 @@ Gx+Ic/GYDSd53OquM5NeO5ZE5Vhry0qt3tZh73HVkFhaAC7UcCs4gpaqdUQOGdAW
zAjU7q/IqelHbUlWO8zJF1Sbu6JciCc3UnytFxDyVPw8vVI7dTuZ6iRpTQARAQAB
tC1QZXRlciBKZXJlbXkgKHByZWZlcnJlZCkgPHBldGVyQHJ1bGluZ2lhLmNvbT6J
AlcEEwEKAEECGwMFCwkIBwMFFQoJCAsFFgMCAQACHgECF4ACGQEWIQTYzqXy98h4
-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
+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
@@ -130,19 +130,19 @@ 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
-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
+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
@@ -218,18 +218,18 @@ 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
-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
+ApeLlB2SFKJpn4yyBQJjw7S1BQkUZzmrAAoJEB2SFKJpn4yyQ0wQAIl04JBegDcU
+WR3Uw3uTt8rvSM/Cx5GfjUWIx40AKpAv7h0ZH/broYhOCuz6B6IWPGk3cH76W+dX
+4eIpDbUGU4mSdjtWJFYCAe7qJHz81FVOdDV7tFLULmWp3YqHP8ZChlWgd3tOj2Xt
+dU6HGgDoVK3R9XWQu80qcyhG5g4KU3YxrIo3zBIZ/1lsM49xTk9kDLptXrI4FVYo
+JE1i7Qr4KXuEmnaGbrbqE3TApWmJl4rMzxFLP0zKMDqHivrpGyKuGQtMNsftUCe1
+4gBqEj4DJwk4QhGKVtsZccdHEsTefuCYJcw+2l6aVMSYvTEhZN3mdWuDde6HEXcp
+MMTcXGyMGxi2mxi8lHPjshh2yfR3oxDOoZjoYkNNhktwZPp8Esk0ZCmG5azqK4Q9
+R0exyHUg8Y50eKYuIbl6+prhW064Md1ihvlrkBxaFisk0ZU1O/M99W9kKCLsIBzH
+oOk++AouFBvHRTQ4PH86wdh2yLuHTn1Yg3BjuKpHmmVvihMdIHU84LwkdFTvAG7g
+C9WV/CM+AzVEIOTdQfl0KCchj3smzwx0Xg3ws5AgLTTVQt5mSPXGzq7ljqZOY0y2
+eGjUow2LPzMwxEGKJRXUbmB2DIJFVZz+LATuua3PQCmJ2/QOD53J7kNbGtq/+5Fz
+fNayY9/tOMyphlt1EsZ3O3RmAaWVOVwdiEYEEBEKAAYFAlMgJm4ACgkQ/opHv/AP
uIcPKACgoP8IEZ5qj8jn2x0dY8Ea/tm3rDgAoKnjS6jrpEuNsgwI2COLtlM1ZpAx
iEYEEBECAAYFAlMhgjEACgkQoh0qDQCmqDDbCwCfbTi/uHEq6nO7VipbNt8M97k7
RYsAoLEf+ZDbw9bfxgduvLpdh+KuvjjriQIcBBABCgAGBQJTIYSCAAoJEBx8Qe3r
@@ -305,18 +305,18 @@ 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
-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
+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
@@ -491,18 +491,18 @@ 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
-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
+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
@@ -599,18 +599,18 @@ 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
-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
+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
@@ -622,7 +622,7 @@ Sh3Db0g/2CWPYRh62QPbLW92ji2dx90XcMXU7lIwXN9/1m7THEU6sqKLIQIWdZSo
RXnRbUxv+jnuz5xba/84do5zkRdy0Nd7pU9DaYbwyDFKsYMzIYGPOCKmxPxvVh4e
STgBjQkwYwXC8oT5XCp3sWQ8cbxi+uiRfNY3omX8Gb7gdmh4cOiB6ECRXJiWGD9T
HZraGsDEbBWs2GpoWkb/8W4i2751uqoxIOrCWT4Us/zPABEBAAGJBLsEGAEKACYC
-GwIWIQTYzqXy98h44AKXi5QdkhSiaZ+MsgUCX+gEHwUJEIoyEwKJwb0gBBkBCgBm
+GwIWIQTYzqXy98h44AKXi5QdkhSiaZ+MsgUCY8O05gUJFGXi2gKJwb0gBBkBCgBm
BQJTIDkMXxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9wZW5wZ3AuZmlm
dGhob3JzZW1hbi5uZXRFRUIyOTg2QzMwNjcxRTc0RTY1QzIyN0UxNkE1OTdBMEU0
QTIwQjM0AAoJEBall6Dkogs0Wj8P/1SVXseUHCgyWZNPioYsXP8oxRuGubjCSzVr
@@ -636,19 +636,18 @@ H0am1mVwFEyFQWTG6G0ZnP/jTqiv2EMeInFwR8PcsjVEP3ysKI/rkmZNLMuFIaWa
iu0YffBALGGKDb6YI3a3r+zWP+R2ZOZOjGp9AYy8Q1OqeiHDtH16BxHKB7S1tOVX
FipbKI7jjI7v5oT60tf3dIi5eziJcTpkli9nFRP7WUpDFV8jB8g1HLbQdSsdrILg
EM8jm04v118ZB3YDO7Ba9uWBXoTyUlMtArSDHcX4ldxIZwbEBjV/s62f0McoQANJ
-1z4wf4LaCRAdkhSiaZ+Msqt6D/9FPtDKFhcwjXtAL9IC73oAVyiPwQ9BtpDrgct8
-Mh/BrtM6g3ScGMb3eNWuYhoar3xDemze1KUvHlBrPqIYExON8ianU49q7kD3gm5c
-vJTUDbLHHs+mRyai89DCUvEDxI0Ea+SGpya7a/FFCqZPWCMcDeXKZsGjMFCmudLJ
-D9kAi+Z9ZrSUF17OvTxekytxvGW0UNpF/lUOKKhGnj5tem0bUofFcar5gess7RJ0
-MfWWkdnrZJtN26j9MgYdqKfAMmgjqdbVPwcpvbm4D3zrGWrJUA0qA4SQZ5gHIfj/
-3m0tcJjfG5XEELgNdfyksViY88FHhwXxH+rk1r4NkCE5u60ODxn69C67h0J3jot0
-RsNvGntvFd1Pbxp/Uj0v7p3FtFf6CBdCL245RQ52NaYQ9oDbSrPnTVCE3EXv5w9v
-ZN3mQvAQB8RDg8XLfDqxOsdgPZyRNDWChb/H8mm0PSyo9htywfy2o28hMgmzG1V8
-KoVijXBz7q3dgp7Pl3BoNZ2trMxBAzDe5YQPpwVddtSo18uRuuY/v/Wshnmwi+mw
-eY1ykfBDmKlgjNNHWfbC+HfOEtYM9RTMnAj5rUZSneDiwThB5lg/wkTc3682c2W3
-jYXogp6QiSTKfs4TSZI/ItOBaUYaUcbFOWevZYSdRGijRIu41XsB6v6Z2MpVNWja
-F5z1ZQ==
-=95cq
+1z4wf4LaCRAdkhSiaZ+MsuNVD/9B4z1ZyIxlpSMT0BipbCjWAbmZO/oUKLYa0Jgx
+k9eJe+0ZR4DXgY+NPiENiEpSqL0cFvm82IeaH+CmfRr6MxDrwIU7hpUHKpbhrupz
+sYk51gf5jipcnjN/egNz3ZZMa0Jkr6US6Wd0w15K1tPySHDGka+7lUAbVxCY7/yg
+JbRFuIJr9oV63f3/F307Wyh0Qf+s7OYpkvc40Rb8bgCgyDkj5ae4stmCcW8+ongT
+gq/EgxKAz2tQe50igPo9YwomoxDBw2C12Cy6fcR60rvLAE/FGwG9clIxqYArxZwS
+Vanx4pt7SGL+wnP0nknd8C3LaNO9McvbwVRGA0vshZ8NJV2LHFbtqgRERDPGknTT
+AvcqwWpxkxkr/l1N+1K1EZLqF+lC3LnN3scRAg/lIORtzet/OiWkBiC61BepaVZn
+yp9zYIBDDqiDoWdngLaw9AmK2/noq7CEYchMm8AFU/SqKAkugZBEJo221K46fD8B
+apsBUUnycFGfmHKWXwwqciFiXrvL8hisnafauL6wJRRzWTbj63Ax9FArPIQH8wc3
+oyqML65vgqZwlDT3qNMton7rGLfgggkWqtO4t3HFQW/tb0oBF1tCifdpIX1QAWbn
+oeTnpiNaTugCyJMwD6s8R8USOifPFYmck+Vb7FKQxaKy2rfG2r5ziaNvRX/UOs3D
+ualU4w==
+=3uso
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/philip.key b/documentation/static/pgpkeys/philip.key
index 544f9295a3..36a28015bd 100644
--- a/documentation/static/pgpkeys/philip.key
+++ b/documentation/static/pgpkeys/philip.key
@@ -2,13 +2,13 @@
[.literal-block-margin]
....
-pub ed25519/BB6D8A14AFE7D96B 2021-05-25 [SC] [expires: 2024-07-01]
+pub ed25519/BB6D8A14AFE7D96B 2021-05-25 [SC] [expires: 2025-07-01]
Key fingerprint = B851 CD3A C248 F2ED 3E2C C18C BB6D 8A14 AFE7 D96B
uid Philip Paeps <philip@trouble.is>
uid Philip Paeps <philip@freebsd.org>
-sub ed25519/D92733BA06C579C2 2021-05-25 [S] [expires: 2023-07-01]
-sub cv25519/235A60C6046F82F9 2021-05-25 [E] [expires: 2023-07-01]
-sub ed25519/252E8C8E533D50C5 2021-05-25 [A] [expires: 2023-07-01]
+sub ed25519/D92733BA06C579C2 2021-05-25 [S] [expires: 2024-07-01]
+sub cv25519/235A60C6046F82F9 2021-05-25 [E] [expires: 2024-07-01]
+sub ed25519/252E8C8E533D50C5 2021-05-25 [A] [expires: 2024-07-01]
....
@@ -19,26 +19,26 @@ sub ed25519/252E8C8E533D50C5 2021-05-25 [A] [expires: 2023-07-01]
mDMEYKyY8hYJKwYBBAHaRw8BAQdAIXiSTuKHgUIE2Zjco63bMMvb4pJ305MmoUyP
uaiIqfS0IFBoaWxpcCBQYWVwcyA8cGhpbGlwQHRyb3VibGUuaXM+iJ0EExYKAEUC
GwMFCwkIBwIDIgIBBhUKCQgLAgQWAgMBAh4HAheAAhkBFiEEuFHNOsJI8u0+LMGM
-u22KFK/n2WsFAmJvkHcFCQXWAU4ACgkQu22KFK/n2WvFqQEAu2kViu2eEF2lzri3
-doEOpmnUWrS8Qy8eRgdYQzWfBnoBAOBXPmiPnSOUv+dxVVu0+T5YxFwq4a/Hu2OB
-a/rqHPoDtCFQaGlsaXAgUGFlcHMgPHBoaWxpcEBmcmVlYnNkLm9yZz6ImgQTFgoA
+u22KFK/n2WsFAmRQd+0FCQe3NNAACgkQu22KFK/n2WvWSwEA3wwILfXGZuSTRMJl
+CfT/6Km4dG+d90eQGW1gISWdrQEA/Rgja3aE64RxQVGuRCfCo5YKyEwRQONCexKY
+t1bk3I0NtCFQaGlsaXAgUGFlcHMgPHBoaWxpcEBmcmVlYnNkLm9yZz6ImgQTFgoA
QgIbAwULCQgHAgMiAgEGFQoJCAsCBBYCAwECHgcCF4AWIQS4Uc06wkjy7T4swYy7
-bYoUr+fZawUCYm+QhAUJBdYBTgAKCRC7bYoUr+fZa1wiAQCNVnLsfoEan63YOjAV
-HkqIpotxVOlGEsUTC/wQxX+cbAD/ZkuBCZwJs/7pUscP3jBkdoY5DvyQV5vYYcXw
-LJYWcAG4MwRgrJlsFgkrBgEEAdpHDwEBB0AjN6sanKZplYEZ1REyb02vMSIfg7Jh
-9uNF4i72RdAX94j1BBgWCgAmAhsCFiEEuFHNOsJI8u0+LMGMu22KFK/n2WsFAmJv
-kKQFCQPze9YAgXYgBBkWCgAdFiEEkJ1LuRY1fuOXdPQB2SczugbFecIFAmCsmWwA
+bYoUr+fZawUCZFB4AwUJB7c00AAKCRC7bYoUr+fZawDJAP4ovNM+GHmpTsD/2nOX
+8eWCdYRzjSdl9f1BG2kDF2hGugEAiEeT+b67lrgMJh0sCFEcU03MDqOzylu9BqeV
+qgD6kwu4MwRgrJlsFgkrBgEEAdpHDwEBB0AjN6sanKZplYEZ1REyb02vMSIfg7Jh
+9uNF4i72RdAX94j1BBgWCgAmAhsCFiEEuFHNOsJI8u0+LMGMu22KFK/n2WsFAmRQ
+eCoFCQXWANwAgXYgBBkWCgAdFiEEkJ1LuRY1fuOXdPQB2SczugbFecIFAmCsmWwA
CgkQ2SczugbFecLiHQD+KWkaHCz15F2NKuhWVSDaW2EL2T8osDEBupPsxxpVI2wB
-AMwLYIjuMhF7W8nzU637j/ThD+DQKXkkWRu9gIKPkZYGCRC7bYoUr+fZa2ALAP94
-2/sq2+NEmgg52OnhryyyTotCdW6X30Nu0hsrOVxaEgEA1WpxQgUHhe2U2DfWhOz+
-LSvFx++uLXBbHg12LcUFwQm4OARgrJmDEgorBgEEAZdVAQUBAQdA43q+QOECkVQn
+AMwLYIjuMhF7W8nzU637j/ThD+DQKXkkWRu9gIKPkZYGCRC7bYoUr+fZay+dAPsF
+NKFb3GEgAFkETaCy/5pSqYGYfIoRqifRW0lXQYPVJAEArTYW5K8C0IJdUtVPDQBZ
+TwDYlIMgKqbIyR04c+MPiQq4OARgrJmDEgorBgEEAZdVAQUBAQdA43q+QOECkVQn
PcmLuM1+ToWo4vVeU3K+yOjABDtsOxkDAQgHiH4EGBYKACYCGwwWIQS4Uc06wkjy
-7T4swYy7bYoUr+fZawUCYm+QswUJA/N7vwAKCRC7bYoUr+fZaw5sAQCC+hoi3Wn1
-MYdfiadgphIUMg2h60Bn4EKD+2axfeY8WgEAsSYmXbKHWL95Q5d6luFG937R+QS3
-uDZYcsbzGuVHAQK4MwRgrJmVFgkrBgEEAdpHDwEBB0BZL2Zkanycm9ZxXyblVkJY
+7T4swYy7bYoUr+fZawUCZFB4KgUJBdYAxQAKCRC7bYoUr+fZa4+EAQCLSSE1PzK8
+XnsALdCrE4ZZTPiDA7lZckakLCsd1Cd6EQEAyb7w8quncxNJTstvMg70iAsbb+0i
+nXEFNpEW85fSkQ+4MwRgrJmVFgkrBgEEAdpHDwEBB0BZL2Zkanycm9ZxXyblVkJY
7uftl1+DtY4cCF/mP8K21Yh+BBgWCgAmAhsgFiEEuFHNOsJI8u0+LMGMu22KFK/n
-2WsFAmJvkMMFCQPze60ACgkQu22KFK/n2WsmhQEA3qZn7MtCwTIH9sGXRMVoyWbk
-q3ad71afC4pgpnP0PxUBAJ/882JTllFCsnIJtAoz+uxwrpjo/iImyIK/toioJh4B
-=GHHY
+2WsFAmRQeCoFCQXWALMACgkQu22KFK/n2Wt/3AEAhnSkKER2XnzihDsmhDnn2Nol
+xvnOPgLJ/iIavt/xHfwA/30GRshX3NpVLTMEOzNmyFTXQuBYQP718a6YgivKNBwG
+=6t2q
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/phk.key b/documentation/static/pgpkeys/phk.key
index 0e303f14ff..7d935c53b3 100644
--- a/documentation/static/pgpkeys/phk.key
+++ b/documentation/static/pgpkeys/phk.key
@@ -1,15 +1,14 @@
-// sh addkey.sh phk 8E5F44BA68E689C5 ;
+// sh addkey.sh phk 3618A2C260A2B245 ;
[.literal-block-margin]
....
-pub rsa4096/8E5F44BA68E689C5 2013-09-28 [SC] [expires: 2023-09-29]
- Key fingerprint = 4357 5923 B8E1 1D70 3C66 5540 8E5F 44BA 68E6 89C5
-uid Poul-Henning Kamp <phk@FreeBSD.org>
+pub ed25519/3618A2C260A2B245 2023-09-14 [SC]
+ Key fingerprint = 71D2 D85F 1529 593A 8276 561B 3618 A2C2 60A2 B245
+uid Poul-Henning Kamp <phk@datamuseum.dk>
uid Poul-Henning Kamp <phk@phk.freebsd.dk>
-uid Poul-Henning Kamp <phk@ing.dk>
uid Poul-Henning Kamp <phk@varnish.org>
-uid keybase.io/phk <phk@keybase.io>
-sub rsa4096/1A605690A520ABD6 2013-09-28 [E] [expires: 2023-09-29]
+uid Poul-Henning Kamp <phk@FreeBSD.org>
+sub cv25519/81A218FE41235C3D 2023-09-14 [E]
....
@@ -17,661 +16,100 @@ sub rsa4096/1A605690A520ABD6 2013-09-28 [E] [expires: 2023-09-29]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-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
-=eHVj
+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
+asMHuD76KMmSAA==
+=hbwX
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/pi.key b/documentation/static/pgpkeys/pi.key
index 40ba8a30ef..e474ae2802 100644
--- a/documentation/static/pgpkeys/pi.key
+++ b/documentation/static/pgpkeys/pi.key
@@ -2,11 +2,10 @@
[.literal-block-margin]
....
-pub 4096R/2A4392E050E8798D 2014-04-24 [expires: 2022-06-18]
+pub 4096R/2A4392E050E8798D 2014-04-24 [expires: 2028-09-29]
Key fingerprint = FD38 1F8F 1360 2A49 26D4 4CF3 2A43 92E0 50E8 798D
uid Kurt Jaeger <pi@FreeBSD.org>
-sub 4096R/2FC3A793B283D724 2014-04-24 [expires: 2022-06-18]
-
+sub 4096R/2FC3A793B283D724 2014-04-24 [expires: 2028-09-29]
....
[.literal-block-margin]
@@ -24,43 +23,90 @@ TC5eqglBSQ9Il6jfOrXS7MOYC/NHtMSe6jgXK8BRaIZBOvxyfsXoQLwDepzueX6k
BUv8gM4Z8zCKcUuctougg3UydHgHIGqBUWK98t1AMPm9VKx9dS9S9jjm7h69iA8R
vjUVMAOLSGxS4cLVw9IQJgwdjCfVR7uLvA6+ER/zZI/6cKRf8cD6AjvH2AbxeekG
y9KbLIG1bnmWsuxxECFG54xX61OZm4j5MDriyRETqg2F0YbBJ2DT6JmnCQARAQAB
-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
-RIlhMTspaQ==
-=atUj
+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
+OPuepgO66Mak
+=yBLL
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/portmgr-secretary.key b/documentation/static/pgpkeys/portmgr-secretary.key
index 0a8d48765c..55e3a7c886 100644
--- a/documentation/static/pgpkeys/portmgr-secretary.key
+++ b/documentation/static/pgpkeys/portmgr-secretary.key
@@ -1,13 +1,11 @@
-// sh addkey.sh portmgr-secretary D8294EC3BBC4D7D5 ;
+// sh addkey.sh portmgr-secretary E3C401F60D709D59 ;
[.literal-block-margin]
....
-pub rsa2048/D8294EC3BBC4D7D5 2012-07-24 [SC]
- Key fingerprint = FB37 45C8 6F15 E8ED AC81 32FC D829 4EC3 BBC4 D7D5
+pub ed25519/E3C401F60D709D59 2023-03-06 [SC] [expires: 2027-03-05]
+ Key fingerprint = BED4 A1D3 6555 B681 2E9F ABDA E3C4 01F6 0D70 9D59
uid FreeBSD Ports Management Team Secretary <portmgr-secretary@FreeBSD.org>
-sub rsa2048/5CC117965F65CFE7 2012-07-24 [E]
-sub rsa4096/CA20328577064EB7 2013-10-05 [S]
-sub rsa4096/8B114B3613867E00 2013-10-05 [E]
+sub cv25519/2C92B55E27A641C3 2023-03-06 [E] [expires: 2027-03-05]
....
@@ -15,108 +13,34 @@ sub rsa4096/8B114B3613867E00 2013-10-05 [E]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-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
-WLuj9Q==
-=e71t
+mDMEZAXJvxYJKwYBBAHaRw8BAQdASFAC20WL3R1T6uNyGMZbfJCxDkcP4C5vi3Op
+tcZ2fbq0R0ZyZWVCU0QgUG9ydHMgTWFuYWdlbWVudCBUZWFtIFNlY3JldGFyeSA8
+cG9ydG1nci1zZWNyZXRhcnlARnJlZUJTRC5vcmc+iJYEExYKAD4WIQS+1KHTZVW2
+gS6fq9rjxAH2DXCdWQUCZAXJvwIbAwUJB4TOAAULCQgHAwUVCgkICwUWAwIBAAIe
+BQIXgAAKCRDjxAH2DXCdWYN1AP43TjyfZtZ3DLYT++g0+SuPsoO/3yWVybA+UmFL
+zb8MngEA+LLNUfvEwCuXS/soh+ww5bpfmi3UUmeGiQEAXug3iA+JATMEEAEKAB0W
+IQT7N0XIbxXo7ayBMvzYKU7Du8TX1QUCZAXLkwAKCRDYKU7Du8TX1XHMB/9R1MX4
+6zMgpKqPPt76GOI+eGEdBK6bY8aJZjQGdqTh9f6VtXVoTGIG7cvhc9X8tDBoB0PT
+2KZWheF51AV1+NHU4HwLAQ1BMebrFvWSfkw4xg4fBGwDhz9/GN85No+Js772V5ey
+8lRiL6meRVWxMlLyWcxGd8JjcC5yX/iAUQ3SBGCLqW7unWjjg7CTd+AMBwcqPGrv
+ax8q6eFVguJcHJAjMnKf6HAy4cpK3s+uMoUBCGnszSN12B3ysKfyC4pNO/pix5tA
+Q5v8aRqTeFPh5zmNhWo0KGPzplTPqRQSHDl7GDQC8Ru3MhzFkeWzHsexjZVwS6W2
+DPcYpuuAsA0XOZIZiQIzBBABCgAdFiEEEBpxaxYrAOVb7eoFrbv4YQo3ibcFAmQF
+0u0ACgkQrbv4YQo3ibccwg/9F2Xuic3nhKxRbB3mJeDo6SYQETa/Gh1qQ34+8zlt
+8UMazOx67gnYQfy+pXjro6eQ2up0a4eUYezcNOudqAQD21nRz3HA6EQVNcE/TzEA
+xl5CJntTaLOt7S+EDXFW5BuQIvhhoMGgm8+WNVgA0EJ7tfL0OcYBSvr19fqwChEn
+9c14cSk6mgHSsleP5NvskYN053pxHwy0LTSb8YBBv52th37t/CRFC1363rS5q+D7
+JixFopd1O5pKpA5ipvE4gGgRjPtwjx0SjjepwK/3fuhEJQQyKzTIKlMfu2Dj/iR2
+Li1Sfccau5LQXOj9fUITU3u1YG7yrm8VGzT7ao4d+KRwgMLjd2pLqiGIbbJwGBiP
+FRmtilWQoeIlmSlFX4obAA517DOK0pW1mH8+eEn4EJd3SekT3yzFyKTASv0J48Z8
+3F928xg+eZvHxVC0t1J+J5IG0gt3EEncuWKIPQGR7PiQbti6R3FQVTz6WfMWOebP
+Qi0E9F/Aqakr6Vj2sKGrDq+ebpaF5G8Yw1YrUl2IDiPzkCegp3ZbI0wh11Xvzhi8
+LXPQGK4jBQas4G8cegfitzmtdGRHYrbMv0R9I4mvaL+WlOuD2AvyVG28lguqVhnN
+AZP+ohdquYyX2CNCVvbKWAtXo6Ur0vWG8BL8m6defAtEkIwVBALaOHQOSI3aNUz4
+lwy4OARkBcm/EgorBgEEAZdVAQUBAQdAsefmSfxEOdOr02+K/6noYCuJ1FeAWVz6
+jFYQ+9w6jggDAQgHiH4EGBYKACYWIQS+1KHTZVW2gS6fq9rjxAH2DXCdWQUCZAXJ
+vwIbDAUJB4TOAAAKCRDjxAH2DXCdWRl4AP9h5ot212BK29S6ZcMBhHvmtF5PG1oD
+c7LnZycSRmbFiwEAndCMpAGOhDW8iVgDd0wLQq/ZMPe+xccfG1b3zFH2EgE=
+=iiAT
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/rakuco.key b/documentation/static/pgpkeys/rakuco.key
index c4e5db1d19..6077d4ef3b 100644
--- a/documentation/static/pgpkeys/rakuco.key
+++ b/documentation/static/pgpkeys/rakuco.key
@@ -2,7 +2,7 @@
[.literal-block-margin]
....
-pub rsa4096/8DD07D2118DCEED6 2011-10-03 [SCEA] [expires: 2023-04-14]
+pub rsa4096/8DD07D2118DCEED6 2011-10-03 [SCEA] [expires: 2024-04-02]
Key fingerprint = 6911 54FE BA6E 6106 5789 7099 8DD0 7D21 18DC EED6
uid Raphael Kubo da Costa (Personal key) <rakuco@FreeBSD.org>
uid Raphael Kubo da Costa (Personal Gmail account.) <kubito@gmail.com>
@@ -61,18 +61,18 @@ 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
-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
+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
@@ -136,18 +136,18 @@ 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
-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
+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
@@ -210,6 +210,6 @@ HJsE9O0Ja8kpcyJFWBS1HH7Ifx7CpqSJF/jBYBBx9cZh2EFnmtFp9v5J7qd/X1vP
ZqykjwyPj8oJj2qfcYdQbUHJTfoltjM4z+zjcz+3e4eTHGjwmN4o3KLBb5Q0dchi
iKQcbs4iLiEheV8pG71HaJEwE3r87L2Ge9QTnrFTR+ZQsVc5Y1J9vfpzhfSnLEfS
fOnuStOA7Mh6m3tJqczZ4VE=
-=x36q
+=BsvM
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/rcm.key b/documentation/static/pgpkeys/rcm.key
new file mode 100644
index 0000000000..9a5aa71970
--- /dev/null
+++ b/documentation/static/pgpkeys/rcm.key
@@ -0,0 +1,45 @@
+// sh addkey.sh rcm 933682316005CE7E ;
+
+[.literal-block-margin]
+....
+pub ed25519/933682316005CE7E 2023-11-16 [C] [expires: 2025-11-19]
+ Key fingerprint = 9055 E244 CF3F 7642 7B79 43A9 9336 8231 6005 CE7E
+uid R. Christian McDonald <rcm@rcm.sh>
+uid R. Christian McDonald <rcm@FreeBSD.org>
+sub cv25519/39E5A866DB24AB51 2023-11-16 [E] [expires: 2024-11-19]
+sub ed25519/555A217C9B3FD494 2023-11-16 [A] [expires: 2024-11-19]
+sub ed25519/A2C377A70FBB25ED 2023-11-16 [S] [expires: 2024-11-19]
+
+....
+
+[.literal-block-margin]
+....
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mDMEZVZ3RBYJKwYBBAHaRw8BAQdAJum8xVvCnzOV20INciRmiHIuz9dXUx1Js1pO
+toXvqDC0IlIuIENocmlzdGlhbiBNY0RvbmFsZCA8cmNtQHJjbS5zaD6InAQTFgoA
+RAIbAQULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgAIZARYhBJBV4kTPP3ZCe3lD
+qZM2gjFgBc5+BQJlW2F/BQkDx1E7AAoJEJM2gjFgBc5+1EcA/14ZB4Tbs3Cfo36K
+oZgymtdIYYHsUFG0jMjbqHLuEcJyAQCviZT9i36/hbzxqbGlKG2Pz+PnkhS6LG0l
+JQPsW7sTCLQnUi4gQ2hyaXN0aWFuIE1jRG9uYWxkIDxyY21ARnJlZUJTRC5vcmc+
+iJkEExYKAEECGwEFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AWIQSQVeJEzz92
+Qnt5Q6mTNoIxYAXOfgUCZVthfwUJA8dROwAKCRCTNoIxYAXOfjuaAP9FW0HsZ79F
+PDiztb8leXZxtMtEm7xAwXDmvnJF/Hh1FQEA/fXXxL0vEhiQC8eFMPccpU8/54pJ
+qPYUtHxv5js8IwO4OARlVnrvEgorBgEEAZdVAQUBAQdAAhEHVlAd8rX/6otNfcU3
+CRMULCVBAh961wplWOUYUwUDAQgHiH4EGBYKACYCGwwWIQSQVeJEzz92Qnt5Q6mT
+NoIxYAXOfgUCZVthkAUJAeYaIQAKCRCTNoIxYAXOfg7JAP9JCZPQDsWmx6J8vf/5
+KbVrmvAEhfbBEqC+3x1K/GqxRQD/Q51F/DT2OoHZyABUtjx1ZBPtoxz8SCoguL1F
+fo++Bwu4MwRlVnsrFgkrBgEEAdpHDwEBB0CxPtFjqC3e93tqq94ql45JpVg3KfKR
+T2Rb2rOst1sKf4h+BBgWCgAmAhsgFiEEkFXiRM8/dkJ7eUOpkzaCMWAFzn4FAmVb
+YZAFCQHmGeUACgkQkzaCMWAFzn5/FgEApMuR5/xx6n9h54mWA2wFQq9DaWalN8Ak
+r7xyOTY0ASYA+wZEcMzBm/ZfPXRnXT14QckEXYwtjSVTvZOQnQZ6DgANuDMEZVZ7
+dBYJKwYBBAHaRw8BAQdA6ynGf1JqOtkCdouv+MdeK+kEi+j9EWhl+lMsR64eWreI
+9QQYFgoAJgIbAhYhBJBV4kTPP3ZCe3lDqZM2gjFgBc5+BQJlW2GQBQkB5hmcAIF2
+IAQZFgoAHRYhBOiv/D/lYgHYIAoivKLDd6cPuyXtBQJlVnt0AAoJEKLDd6cPuyXt
+bisBAJtuVo4cbG7guqeJEaOHjQY7PC9ohXpKWmLyTxdhElRYAP9QRdPGnQCeiOxJ
+sB4w+m337KjpkNu/S3t8NBXm++6uDgkQkzaCMWAFzn4x0gEA1XNGPHHcTEhN0jhp
+y7+KyxXY9nHAOSoKTvqlqLJzjOwBAJki3Z4BD1pKdN+7CyusJoUJkf7teKevnKCq
+VERTvDoM
+=JX6K
+-----END PGP PUBLIC KEY BLOCK-----
+....
diff --git a/documentation/static/pgpkeys/rene.key b/documentation/static/pgpkeys/rene.key
index ec00a6551d..b805e65f57 100644
--- a/documentation/static/pgpkeys/rene.key
+++ b/documentation/static/pgpkeys/rene.key
@@ -2,10 +2,10 @@
[.literal-block-margin]
....
-pub rsa4096/ADBBF8610A3789B7 2012-11-18 [SC] [expires: 2023-01-12]
+pub rsa4096/ADBBF8610A3789B7 2012-11-18 [SC] [expires: 2025-01-20]
Key fingerprint = 101A 716B 162B 00E5 5BED EA05 ADBB F861 0A37 89B7
uid René Ladan <rene@freebsd.org>
-sub rsa4096/CB77BE03B67184C6 2012-11-18 [E] [expires: 2023-01-12]
+sub rsa4096/CB77BE03B67184C6 2012-11-18 [E] [expires: 2025-01-20]
....
@@ -26,18 +26,18 @@ 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
-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
+AmWtPVIFCRblHksACgkQrbv4YQo3ibdbwhAA02NjIBQl/+S+XzWmcXMRofu51ZFj
+t9uOYLdqDuyBVReDbc+SlYvRJqNm7zO1oXQ7aqmgITfpmx34UJJQiNrzQqJpwCxt
+n18On76PnSSmROUVhm2wGJdYMatsfkIyXLtWzRQ3cqgJN+z+9oU1yzrpAnPObIl1
+gthV6RufheogjurwWMY8CvftS2fITGPBoYdjEUwG3AdziGSYzO5lnhdo2zMaFcuu
+ucXi5BoDPRBJdIvGjgyTdvMAcya4mlYsyuxzgbigA/xDxopD58CX7EGg16c+jOiA
+CEIBHq7ldMIeQ5W4vSZFTXJDrANpy9+6eUdFusE+UocMaWEHKrOpTehyDF/KrZMo
+Yzr2eq2P+nllfUNThr/g22ia5SB3OaXLUfc8G8qOrvUGIOpF0nDofGlsWYyNSQud
+FRY9XW1kgPNIFkHaz58hvBzKQpFCyp28kTZDrMfdSbTaOpKKLxwTeR3IWRHp8f1u
+ECWXd587NVbUvSmuLYmRz1myswxv5gZsWCcJKDq1BVa+AYaHADPddDKlOn1BWax6
+swEHGjuLUA9nHTWAV+AS8kSzq7k6nKOlbH69PYkXGKkflLGRdVEMUumU6V5T/1SB
+riUQ01bs0cZOtQxN1S+vNJva7YUJg5Rk74W3G1O2rWx55dl/lSaSh7LkmYxTOp3G
+5wN0T9uUXLp9Q+SJAhwEEAEIAAYFAlCp0z0ACgkQqchsjdOujTqBFQ/+IRl+WvxW
qduN4MEFgpe3flJanjKZIh7sOsMVhKTdlCq09c7Sr4axQPslBvmklvO5IaOMaTgx
b7fo7dqjrhYozE2MWEHf7qTa2TQG/ZU9sBM0W+u7GbBY8WAokIidqm4FcxPqneJG
iG34ebtv+I3ZPwKJn/0AwvDlmG0oONm6JftJigxnl2dsxG5PHYtEt0FtpsN0D4fG
@@ -95,18 +95,18 @@ ugFs5d0z1sTi3kWXWNBK0UV7cKJp2mrk8jxtKGphYRP7X09KMkljQgs8yJfVO6I3
sSshdnt30wo/AJtf1gGCCuSgZdi/jcwYFQeR28c/dlLpw864vJR+uWZnxfibPZjJ
+MPQqoa6YuhOkJAg+dfwwkOEDIADhMfiBrPRMRThIWG46BXLaEBrWgIkbtQnXmYD
Ppz5auJVaRkIPZM+BnnQkobMNwQ5++m3TVKd4QT5ABEBAAGJAjwEGAEKACYCGwwW
-IQQQGnFrFisA5Vvt6gWtu/hhCjeJtwUCYd9F9gUJExcm7wAKCRCtu/hhCjeJt/Pt
-D/9lKfmLSnASrlhChIpmo1OGQuFryocmYnOq9Ygga/sFOOJ2xoSmqjsSeijnxq6W
-26ykwtalHIc5ZuSIQMhJJlTu+Jbq+bzs5ndtxNfeHbqU6Q/BSEoUsiwz2wtOWNX/
-Y6WpF5k7Bj61wzVBDiQg1tT/aAhvF3IHUGmuDZ7paDAG9+sxDSIE2S9Mv7wOIeSi
-iOh27439mDY98Dw3cY77oMIg0XVWYpzFVqzhyRb5/TBMOmeIKCauz1f25j6NMY3Z
-E54cwQ4+okuxeEcxSGGdJ7ubkqXVpGbpphjS/uQKftM/uwasaKF1Vnhg9AJbcTt5
-k3M3gxD2mZYEJs9F3SXr/7JrrMGjtSDaZGdbjJoYvEtdHjdllvjpvV7LubYHZxo9
-oRVrL8vx5zsT1FmGuqw+hDJH2xe0rHn6GZgEvLL+u4Q+5Jrlp6IBBHeqQdEa38on
-A8MHxDBZwjy2BQL+76o1G5vckCTJi65+qQXti9Nizd24Q3UfWBBY93yjCcB7+2gu
-hYlujjRtWxgJzjQfLw4J1UZp1ILjq8lEC6ioNfbQw5yvHvPjTVBI3/uqrYVr31Cp
-Zo4HiX3UEShEzIHwExZdStA5ESCkAa2VjadiVNLHchSSK82BGtRHy6od8AZu4IYq
-bBcRDSi2dcQWiCdQ3NHm2exSbqQAK4imIQMbN5/f6en4qw==
-=GsRP
+IQQQGnFrFisA5Vvt6gWtu/hhCjeJtwUCZa09qAUJFuUeoQAKCRCtu/hhCjeJt9Vp
+EACkvflveiJwRopnOdZKb3CNOaqMPq+JnL4yBCmYVCi+EvhBeWTKm7ymzPIMqX5q
+6kCwtrMwuaca0Td9JFLmxlxdAvS1GvABOhqZC+3D8sP1Ah+1lx826g8Mp0Z38tRB
+cbcfd6YTVaw+z+jK0pyJm5LQIf5Qmd9JJlt6IYjw17escPmRRmXT72aw+DVcUwSl
+tVz/Vx+wMVp5lXKyEkOUylGM3zFnHZSBZqXyUnIsXzMUa5sk48G6iUWjDDwOiukV
+hzxGvZB3oW+XkKrxHzyh2O4kDsVcbbTPmybZMCYeKbNRDKtB/WSOHJaov7FD7k96
+ypEv8LRW5u+rwk+aG15lMiKLT+JOoi3HZdnbsgscnvryzqPjikUEVIRAmC7M0Xsr
+OBWzp77pG1MY85UAxvICJreQHCJTdGBXh3g+yNTlTkRkvPLm+tPnUT+GwLj1XwuT
+E8XgvxWaS9JKQQ+j7NqeRb1bsRyxenRCfTr6MR4Yjmuojpuj7JU0EYnPdUePq8nW
+v0a/6fCMpGAoY98EPgo4wlXhkEpxLmKBxvxE4y5wlXqqbtm4bWKlCTucTsbgySqv
+lY4V3MqdiKYDZ0KF7wk69udjOpv3O/Gv2h48h/nCPPJSxr48bJlG5IsiXVoTGhY7
+q83GeTmmWNXywqSs6lt3xxMyynMPVJSVzrhXAv6WI2jB/Q==
+=RZP8
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/rew.key b/documentation/static/pgpkeys/rew.key
index a9f8cc11ce..abde55d462 100644
--- a/documentation/static/pgpkeys/rew.key
+++ b/documentation/static/pgpkeys/rew.key
@@ -1,11 +1,11 @@
-// sh addkey.sh rew C9986ACBFC9EF9A5 ;
+// sh addkey.sh rew C4EE9BF141C4BDA7 ;
[.literal-block-margin]
....
-pub rsa2048/C9986ACBFC9EF9A5 2020-07-27 [SC] [expires: 2023-07-27]
- Key fingerprint = D223 1048 3A99 CE6C E9E9 70A1 C998 6ACB FC9E F9A5
+pub rsa2048/C4EE9BF141C4BDA7 2023-12-12 [SC] [expires: 2026-12-11]
+ Key fingerprint = 9770 C9D3 07B9 8323 15BF 98D7 C4EE 9BF1 41C4 BDA7
uid Robert Wing <rew@FreeBSD.org>
-sub rsa2048/869983F7492BC0A2 2020-07-27 [E] [expires: 2023-07-27]
+sub rsa2048/54E264579968E8E9 2023-12-12 [E] [expires: 2026-12-11]
....
@@ -13,33 +13,32 @@ sub rsa2048/869983F7492BC0A2 2020-07-27 [E] [expires: 2023-07-27]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-mQENBF8fPPcBCACxfP6GyhOogZeyAqvFMoHeWi3MreALbt0wSzrIvFGQdHmpTH6H
-tJflggt0YyA95k2F4G3hkKkgpf39q4Zl200KKruk5Cv6bSR0wJe9AN/LrxiLlQXB
-h7WORfeB/3fZxN4sVelXpXeB0TXYTxjhM6Uvb4DySdFTU+C1YFekyJVdhyGWfYjj
-qBWoTA4X7VqEARfA4+28ncs4YaCEPPQF4VH9XUMfyKu6EECefAOIC4a6RNwbMl/S
-0QzQOYt5ZjHJ2xHr4ha4RLKX/PnEfjvQ3e7LRSl4+vySeqAGOXBXsrE0Ibn832+h
-uAHIjFtz7AB+DralOOhSs7LEHIAE0uPL2BHJABEBAAG0HVJvYmVydCBXaW5nIDxy
-ZXdARnJlZUJTRC5vcmc+iQFUBBMBCgA+FiEE0iMQSDqZzmzp6XChyZhqy/ye+aUF
-Al8fPPcCGwMFCQWjmoAFCwkIBwMFFQoJCAsFFgMCAQACHgECF4AACgkQyZhqy/ye
-+aWjfQf+Ohwvd9dqIwGCLIkrBeoMfA6f3Oj/bbSoysHaPqiiTWCGu0usUqfHoYyG
-P8dbDwQ2y/1zjhRHUOyGJ3DwWD16tPyOrr6e8//bgpCGroHSFQ9kClCp9w3kpt3s
-GS8AryiclBhYhKqYWOvByM5j/Kq4Kw0vA0OCyQqca0C3HN2nc/svcuVasHBjpKSx
-gvqAlJ763uQ4NeElIY5lwbszEjib6EGzmUili4972V1rE1WbZ2eTm/GRc80PsdC6
-ujA5/VqrWPWYqSIfpAaT2S+zvTFzkk8+zHuGkRDGs6v/4lIIdPhJRyrqxARuSrgq
-rcUAMqvbJRlZPnypTHdzPsbEAOJnsrkBDQRfHzz3AQgAvw9uvKOFyKD9ortQozfU
-JR8ne8Bn7OUSYMLeDTqjEyBVnZLfvX8HeIwLhKr0SlIshLW+xgSkxHWdj//0sPeQ
-MaZhm1XmkX0iit5xTqckADWaG6Zy6GMech2umi42kBS2dPdxKy4kKQliKMPXdYRp
-kfxKmCLhVbmUv+pAQ4ThgBBKFizo7U2Fr5O5+eElNM2jkF5WGL9Xc/K7pNwJDQHq
-b4He6AmXF+TsvBPXILZxQeD9Y9rS7/6DzRpGEOO5snQICYwTxZwG2LUgaVZtpjML
-PiFQgWUoROeCtoiVMgfUOKuUFx4jnxtRELVXjUbTabPUfypDUrMKvpEMkcP/pkxH
-OwARAQABiQE8BBgBCgAmFiEE0iMQSDqZzmzp6XChyZhqy/ye+aUFAl8fPPcCGwwF
-CQWjmoAACgkQyZhqy/ye+aUGewf/aHcFFXpoIdndw1q6wmgoNKKo3b6EAV/mcHtz
-yTtvereLowOO5/m4STHEYX4vC1YU18S8wmGCUDJVQJOHmfGYjbAjAwqg5b8T0GcJ
-64gPcHz+5irEU87goUH1FZG25fSQeEYtGpUUc7Rms2c4h75CFrxjY2R0cNROviiZ
-LMrcWHjVFrJpoHv1oZy0KEDAs6TtraWgVhl4Dq+LEfdz+daeNnG3mYd1i5wKzoot
-6e6RBxVc0Cbi+ZDS3NjLcXGiQDRSWqtbN46q0QtUp1g7UD/qKCPJyDRJ08Hxx/w5
-KcLhcqH+KDMhprHlZQypPP1Pz+uKMOlrk3AGfAvBmMhWbBMpYw==
-=5CVS
+mQENBGV4x3wBCAC+3pbfuVmeuiDk+re8ZaEH2Hq0cG/PNSW2RH8OR2NblUaF0jvq
+ILMgpAO1INH3rTqq8JLX/yWOHse3mfi/51txfHZU/11gkR/Rgh1b5bI8Rf28cmi9
+t6FePtILZ8sJRov+j1Rv5TMaINNl+EVXJiMWt9SJiGKworBmY/5yBJtxb74Qeaob
+XhUnfz9n8ibeTEgAsndETKmb/1Q83l2A91UtNRum7Ism+iJXmaPu0WCkUkt8/Jee
+3f8srzlQOmLnornyHOqI/Dm64MmBn+u7k0LTtzx7S7bjKTaFyAOALvdgHhnqii93
+7+YnCSISEDcCba6KB/8UWKrBEGGGlpNsVdo9ABEBAAG0HVJvYmVydCBXaW5nIDxy
+ZXdARnJlZUJTRC5vcmc+iQFXBBMBCABBFiEEl3DJ0we5gyMVv5jXxO6b8UHEvacF
+AmV4x3wCGwMFCQWjmoAFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AACgkQxO6b
+8UHEvadr6Af/ciLkE7n6WXZxvY0EsDI+87lC31W5eTKlahQBUYKIarlv/S+uYo52
+ICaqMsUlIPkFqqERrRo8xJFdG7evfe+7XE/zD+RqlLpmxzjD2N7MNpIu/GmmIXMX
+xqYyCXTWpA2+uEZx958SjY9p23g9oKicvEOrzR2/8ztaHBwa2v/5CrNWkJMDatci
+dkkZchJzS59MpRT3DKbZGQhbO1ZSiGC0uHVWKC3s/0xvRa2BUsUTgcMiemQvng03
+ow0CWGDOl6gwBY53Pl06BLZL60lfuCX4xTUE6hpzgmtpbJzeVZiSNB2XJIeLNfSm
+HYzeGhI7Y0GK7dvJjV61SWo7zZR8gRA5Z7kBDQRleMd8AQgA0zDtoJg2CmvEhc/y
+IjrJdko9mKZLAngN2RnapgqqbPqkj4JSlCUKAzq0t82BYcpCejKwYhVSzyZDVrkl
+FsYRXuTGqPhQIpTiCzG2IJA6vfDzkDdZn+V3OsYq+zhBsrCnFoPlj5/OvrJ8M5r2
+KBWArHzYmMcfyAPfHkPKzOnHwfK3c8C2LoKBKph0srkAEBW30XawqWa4Uxzst9Ld
+N9w1XKMhK0bv7Y7+njpXksx7G+G3Nwbti7Tja8EGenrsdhAAYGQ/iQC2ogL0B92r
+t8Wh/aU1ibArwIUsWfbLrDQ7uXTl+QGxOY0Xq4ipgoLTqE/EuHsvGwylxtmyYicd
+axWR4QARAQABiQE8BBgBCAAmFiEEl3DJ0we5gyMVv5jXxO6b8UHEvacFAmV4x3wC
+GwwFCQWjmoAACgkQxO6b8UHEvacS2gf/cIa7ujqK4PWf2wQqVINO58dJD6OjoAwu
+8S741l+OiFd/nyB5rptqQ3hYsy16lw7s8tYc89yxWobqbnB5NZfoBBFLHn1GE1Bi
+BCeQN8rarwUn5gaGlf5mcnwj7js+NCdBY4c9AedYc/WnOnp/yeirX+lFawcfrlU/
+FWIv7Yuwaub1LF4AmExEgxsiXnBvBU4beGI+o/Zz/dKNShGk3TiNAKMFKmYy3VU9
+Qch6CQHp8z+gCtlHR1us9N9hYoKr7jIhHymUIGItWbmQHfSPn477tbU51JU51S1q
+rx21Ss9rANKjzCpzeDLYmDD6nYpo+D8i0C4DCQQa6cJ/WHybdEkCdg==
+=CEOk
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/riggs.key b/documentation/static/pgpkeys/riggs.key
index aebbc1d66a..268a78d8cb 100644
--- a/documentation/static/pgpkeys/riggs.key
+++ b/documentation/static/pgpkeys/riggs.key
@@ -2,13 +2,13 @@
[.literal-block-margin]
....
-pub rsa4096/0D766192C7F78C63 2016-08-27 [SC] [expires: 2023-08-18]
+pub rsa4096/0D766192C7F78C63 2016-08-27 [SC] [expires: 2027-08-18]
Key fingerprint = B8B5 09A4 A0F5 2002 2FF1 71B5 0D76 6192 C7F7 8C63
uid Thomas Zander <riggs@FreeBSD.org>
uid Thomas Zander <thomas.e.zander@googlemail.com>
-sub rsa4096/13982E487B690037 2016-08-27 [E] [expires: 2022-08-18]
+sub rsa4096/13982E487B690037 2016-08-27 [E] [expires: 2027-08-18]
Key fingerprint = E7B4 E843 D023 FC73 C565 187D 1398 2E48 7B69 0037
-sub rsa4096/856D8ED47C7EAFA5 2016-08-27 [S] [expires: 2022-08-18]
+sub rsa4096/856D8ED47C7EAFA5 2016-08-27 [S] [expires: 2027-08-18]
Key fingerprint = 3473 A596 DDD2 6FB6 5A6F E3B8 856D 8ED4 7C7E AFA5
....
@@ -30,33 +30,33 @@ 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
-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
+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
-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
+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
@@ -69,18 +69,18 @@ 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
-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
+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
@@ -92,7 +92,7 @@ Kp6f0vruiK0LtD6Wb1OInTdnSWKATfoYi0naCvXZ5wYI79Y9DG4156vQNhaMPneX
U7LS26dnYEmxp567i1WEIZEJ53mhCo5/0JFqYAlLOxm5kKCG5q0L1mAVoPDkA3ok
qFJ2HuFVIBQ8rIqNCC7KLyGzbDzlzOxmmTueDSluTFjC3Pd3egu4h3PPfi4RuJDF
PlMNy7kA7W0/VNVTfYZtFFnaN0ngkvQ4nidcOCOLABEBAAGJBFsEGAEKACYCGwIW
-IQS4tQmkoPUgAi/xcbUNdmGSx/eMYwUCXVpx+gUJCzwhWAIpwV0gBBkBCgAGBQJX
+IQS4tQmkoPUgAi/xcbUNdmGSx/eMYwUCYv8ymQUJFKNI9wIpwV0gBBkBCgAGBQJX
wesiAAoJEIVtjtR8fq+lgKcP/Apu0sLPwRk24miA8Ak7zPztkBkpZqw+Uyf2Dqys
jEZQwOBqkYI1FCfQh1Q9wQUpCI4A6gl/C0n1OeUSuFfJMxfai9yaUInsIk1U6Ybp
1oK8p4BT6ZkkMhIgB3hFyCY+r83ycv6tHf+IftLPnQBQ2sMUFf2FriAVdNHHUBVm
@@ -104,19 +104,18 @@ rRKBHDdpFiwMJce4sF4eQLDlwcCjRY3GX78CVJv9uR84Yf9JLB4w6vS+xbf8VXGj
Y0yrHuTon0kV5/dQKR1srQT5Bl0E1V2LE3c4PfrzZJ97VcbsoY49b/PaLhh8xte6
GM7B7M1tnMUQISjaN+oMr7aN3Q2G+0ob/IYEyzH42Jp2y1rRoIBQiRjiuCODs5Yg
KwbLC6Kb21hkePeVzfRxDj1i/N6i82z9g/nQJwGluQH6OsVCcxB3StMz3z+i8NoV
-zcPZCRANdmGSx/eMY4ulEADffH2tr8YpP1mZ6NHZ/DsQ37OXUW8Ir93t2R8e9pV/
-snGNou09G8SoP4NFiN2tR/nCgJkDuXmF7ILDpunidV2YP4qpRmqFU3Sim082dr83
-fJfNV6QbfUe2VyPaA8/27/gb1H64b0sOsvwU6okRhajuT78PgPHivZLUlmMT5RFx
-BjQrZRvwOmcr1sYOtYgmqwcRhzU898fXRgrvdlFW6iA95SQBDUKb4kdRHTot2vVA
-dghla+xUfLOVBjuF5LlbfubiY1gnRqnEUn8LE0ql41MXGUfEcWWOspRhfwxJXXl0
-joaI9vPPMKx/pzTPC3hUinZjJPKjJSbpPdEDw3c3kJzfpPjWOqJd9YP7+hsO7vhT
-PrZYD4ku6zZsY9TQGFZ8NSxT92zUAARh8mYMPNG2Uc86jxggYBKOhSSz1KigxeNQ
-vAUcfGmemV51eDppZkmGmIWDBbXlzoyEi0wkrhG2BYat8jbTRteD8c2JVS6bMWte
-5MuRp2oJhf4Htjo7+GG1Ygv0vwqSk/1e6ZEu5MxpJLZvF2NFKqTGioYVe3WHqRkB
-x8W6HpW7EknRmFrVfpYeKQiI+rt3vTEV62BW2EFZt5tySwLzdjwMreqXjP1WAhxD
-SGiFbvZ0U2RrI/4PHLLMM89QfDCrxoauxw+4IFQTxHjeumASJ5llumxs++7/qgvf
-jA==
-=2kzm
+zcPZCRANdmGSx/eMY8tNEAC3HrUGdOGYthO6e5zn9zGtqEoc6tiDGRsZqQeO1FTK
+p/eBNZkMghbI5bx7kjVAxYlmBfNUgsQa9hfSeDMukm9jpv0ds2foTAS0ofHExTWS
+tljWey3CO4M7Ek56XYoCV9+syeKgIW+NDbcUxHdOsocwEtQZ6b3oH9VgTVYy00T1
+1V+DJ9zlT/wEMhrOv95/lucdRWQRT1wc0WqIkc2XyXAnJ1M4taHvI9QQQ8aEzURZ
+ToYjq1Qk/45PgxEfRNUWmtwDOfu4gagDkF+sV/99S594i9XWkLZiTW4zRkHxMHUL
+q9HvwsrsBiHQPORLi3qmi5YqKuOa5ODCtZL5ijQU/sCfqgNI6oGg0NAIH4ePNvov
+zj7/nEOFLOyneGIKqLLfdMX+T14WZP7nE3VM5zjdziRtJrGI1z7cVxzc+N3+j6SY
+ACHZOnZSco69U+YzF33nZ7afuZv9CpfO9Mt69Jt0A9D4uB2BSZ5VWywbKocKw14t
+bVSiFDsI3s7RyTcnv0PLufMa882wzzCImGfRjrmtXz40hLJDLMEnMm7Wu10Rsi9/
+/QbJl58JO0OFRolTuSo3cg0eHRhpB2MkhF5tmEitlIYg7SKO6n/06/omET+74DwS
+ICG4d0hplUfTbAqVTn4bgyh8f0YMxm01C8U7OiMBmLyEmL6u54MrCd+KOXBhXmTl
+Ig==
+=EW6G
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/rlibby.key b/documentation/static/pgpkeys/rlibby.key
index 129b88cf74..df0a3c392b 100644
--- a/documentation/static/pgpkeys/rlibby.key
+++ b/documentation/static/pgpkeys/rlibby.key
@@ -2,13 +2,13 @@
[.literal-block-margin]
....
-pub rsa2048/A20FFBBFDF35FD57 2016-07-11 [SC] [expires: 2022-09-02]
+pub rsa2048/A20FFBBFDF35FD57 2016-07-11 [SC] [expires: 2024-10-10]
Key fingerprint = 9849 809F 64AD 4250 32BF 7975 A20F FBBF DF35 FD57
uid Ryan Libby <rlibby@gmail.com>
uid Ryan Libby <rlibby@FreeBSD.org>
sub rsa2048/7D8F4693B660FE97 2016-07-11 [E]
Key fingerprint = E70A 9C90 A595 62F9 2AC8 E503 7D8F 4693 B660 FE97
-sub rsa2048/2354FB7E60023CBC 2017-06-12 [S] [expires: 2022-09-02]
+sub rsa2048/2354FB7E60023CBC 2017-06-12 [S] [expires: 2024-10-10]
Key fingerprint = 77CD 6F72 4EA8 89DC 3ADE 2FD1 2354 FB7E 6002 3CBC
....
@@ -24,13 +24,13 @@ RVdFR9BGjI2Z3P4AcjvF18ibPmPIhITJkH4QPzxcBN17IpcgpugD3Gs89db1c161
NNyJyTpDl41JvFmRlqj2bYk4mmWrueBnDiPpiR9wqisiwLC4cBYXkkTuRPbzNHDL
7+nu7EwnVnlYVbQv6GnkyyUljjn6ZGpyJb8fABEBAAG0HVJ5YW4gTGliYnkgPHJs
aWJieUBnbWFpbC5jb20+iQFXBBMBCgBBAhsDAh4BAheAAhkBBQsJCAcDBRUKCQgL
-BRYDAgEAFiEEmEmAn2StQlAyv3l1og/7v981/VcFAmBJd+EFCQuNhvoACgkQog/7
-v981/VfoLwf/aJL6IPt1aw7EUD+QwzasvPBJJj8zEaQkefRk4I2y1D6Xz2FfobGu
-hHoYEicBrj33gFjGh418sIjTHoozrPpJG9yV8n8rac3qgKQQp3SajzdSmT41be1H
-0+i28t0rLUbh9YczOfcgRvFFyZ2JfCX4SMC+ffE2j71dmzu9KXQBjSN8EU9BOsbH
-ysYdPnPZYsRTJChtMam2iddMkAGDnjRJCSDdfHhhTJhMOp0ZVTb1tfRqDQoVYTjG
-8bZLG5ucgSDw797g8kyyBXz8itKT1T3cAbCUda+TrkwPNinzrRyCxi0B6bYJrrUv
-5W3kwOHYyaMD1QotDFGAqpMgJExclBwALYkBQAQTAQoAKgIbAwIeAQIXgAIZAQUJ
+BRYDAgEAFiEEmEmAn2StQlAyv3l1og/7v981/VcFAmNF+FMFCQ+EhGwACgkQog/7
+v981/VdgXgf+If4zp+Q3xbCNouKGhLRKZ3MnE2hMOZu/wuJSt0H8/UQyrInyb1EM
+nekhv8JLIynM8nJwpxQq1v8DX9hBeJubEkue+3xEj2uDj4SixofjjgpKAzl/1tjC
+1+xXimL03eASCYe/qj27VevgxxoyHCUK4gK6m854D30UsVYaRvKkJj6WOlzrRGU0
+45X3o6ZiWM62OU/ulCn89etCeubGsuszgqsV0ikwxiuFyD4wzrGMuVagMIwYZWG6
+Z3zJpxX9w+5qu+C+6qVSo1zoVEYoOx1oeigjnKFgaUrPdz4MkjIzx/xcgj3NuLB4
+Z47ZSpv7bS7TSnIaCwThBwTLEk0Dpf0f4okBQAQTAQoAKgIbAwIeAQIXgAIZAQUJ
B1/DNAUCWUAMMgULCQgHAwUVCgkICwUWAwIBAAAKCRCiD/u/3zX9V6JYB/9flpLx
29vMCXFgg8Ts364Ckq0qAcDzXd+rveudifQB3HYILJvDyuQRWjntkZkgojo2Bits
k/OWT7ubJ+O4lW9r+e2Cjei3ICPAmBEs69gT6slialO0HDY2izftl8Pn99BMklG7
@@ -50,66 +50,80 @@ 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
-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
-lA==
-=WoEn
+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
+S6SvtgAYC1UlUOKhmBjstrSU
+=MM5J
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/rnagy.key b/documentation/static/pgpkeys/rnagy.key
new file mode 100644
index 0000000000..2e07d6cb4e
--- /dev/null
+++ b/documentation/static/pgpkeys/rnagy.key
@@ -0,0 +1,55 @@
+// sh addkey.sh rnagy E1739298256B1593 ;
+
+[.literal-block-margin]
+....
+pub rsa3072/E1739298256B1593 2023-02-09 [SC] [expires: 2026-02-08]
+ Key fingerprint = C044 3F71 AA04 7C13 ECCB 695C E173 9298 256B 1593
+uid Robert Nagy <rnagy@FreeBSD.org>
+sub rsa3072/EA881F00A5FA5B56 2023-02-09 [E] [expires: 2026-02-08]
+
+....
+
+[.literal-block-margin]
+....
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+cmvnatZLzi4P6eynf2GJ4dZeGvS2n1c=
+=moKI
+-----END PGP PUBLIC KEY BLOCK-----
+....
diff --git a/documentation/static/pgpkeys/ronald.key b/documentation/static/pgpkeys/ronald.key
new file mode 100644
index 0000000000..2d92ffa129
--- /dev/null
+++ b/documentation/static/pgpkeys/ronald.key
@@ -0,0 +1,27 @@
+// sh addkey.sh ronald 551E8E6207A42166 ;
+
+[.literal-block-margin]
+....
+pub ed25519/551E8E6207A42166 2022-10-16 [SC]
+ Key fingerprint = 6DB6 44CD E168 CEBB 8F33 9BE3 551E 8E62 07A4 2166
+uid Ronald Klop <ronald@FreeBSD.org>
+sub cv25519/27F32EFB528C1B61 2022-10-16 [E]
+
+....
+
+[.literal-block-margin]
+....
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mDMEY0vq7BYJKwYBBAHaRw8BAQdAnh7w7VIH7FTFJbOrrXcWBcugeFmniR9N0G2j
+SM2VhXW0IFJvbmFsZCBLbG9wIDxyb25hbGRARnJlZUJTRC5vcmc+iJAEExYKADgW
+IQRttkTN4WjOu48zm+NVHo5iB6QhZgUCY0vq7AIbAwULCQgHAwUVCgkICwUWAwIB
+AAIeBQIXgAAKCRBVHo5iB6QhZqwCAP0TsaBW0vNPa/FQ/7Lj7Ybn9U96biM526Gg
+yD7YC0k0WQD/S5Cg8RDEDG5XP8PYe03Mtwo2GAgxl50+a1gna4NsBAG4OARjS+rs
+EgorBgEEAZdVAQUBAQdABptf8Vi4QH5KGh5S6NV9s9n7F6sZGDJHIPm6JMr5+CUD
+AQgHiHgEGBYKACAWIQRttkTN4WjOu48zm+NVHo5iB6QhZgUCY0vq7AIbDAAKCRBV
+Ho5iB6QhZgmDAQCCP1kQnfru2qulj3cBeYcvxNcXL0EogH6Xql8hsTfwFgEAAFuG
+TueQDo82bkkMUymWNxxkLHd785xxa1ZCgf23PAc=
+=A/Bt
+-----END PGP PUBLIC KEY BLOCK-----
+....
diff --git a/documentation/static/pgpkeys/rscheff.key b/documentation/static/pgpkeys/rscheff.key
index 90397bc1b7..f32f532475 100644
--- a/documentation/static/pgpkeys/rscheff.key
+++ b/documentation/static/pgpkeys/rscheff.key
@@ -1,11 +1,11 @@
-// sh addkey.sh rscheff A6E8CCB956E86C29 ;
+// sh addkey.sh rscheff 17BE5899E0B1439B ;
[.literal-block-margin]
....
-pub ed25519/A6E8CCB956E86C29 2020-04-09 [SCA] [expires: 2025-04-09]
- Key fingerprint = 7D80 E0F3 B839 80F3 7746 D882 A6E8 CCB9 56E8 6C29
+pub ed25519/17BE5899E0B1439B 2023-02-24 [SC] [expires: 2028-02-23]
+ Key fingerprint = 364B B799 AC83 445A B3CD B471 17BE 5899 E0B1 439B
uid Richard Scheffenegger <rscheff@freebsd.org>
-sub cv25519/8E3D6702E25FF971 2020-04-09 [E] [expires: 2025-04-09]
+sub cv25519/D8158E4BC47BA420 2023-02-24 [E] [expires: 2028-02-23]
....
@@ -13,17 +13,16 @@ sub cv25519/8E3D6702E25FF971 2020-04-09 [E] [expires: 2025-04-09]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-mDMEXo735hYJKwYBBAHaRw8BAQdAjHsw9ra4wwb6TTxKiPloKAJDgLv7D2sEfx1U
-zdIvJuq0K1JpY2hhcmQgU2NoZWZmZW5lZ2dlciA8cnNjaGVmZkBmcmVlYnNkLm9y
-Zz6IlQQTFggAPhYhBH2A4PO4OYDzd0bYgqbozLlW6GwpBQJejvfmAhsjBQkJZ006
-BQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEKbozLlW6GwpS+4BAPCC+2FZcSep
-YFBi7zdmSuTuyEy2Ft795Lw09/QmbwyeAPY3fHrS/lNDfaReUhLfVYMS/kVbvylN
-wMXOD+YJlvEOuDgEXo735hIKKwYBBAGXVQEFAQEHQHwIPsn+3gCgaS3MKeRSXR1j
-EaBAeMCqX5Nsj2mgaPl6AwEIB4h+BBgWCAAmFiEEfYDg87g5gPN3RtiCpujMuVbo
-bCkFAl6O9+YCGwwFCQlnTToACgkQpujMuVbobCnpTgD/SQ1zxDtDpO0+TtYynFVU
-1Q6xAMgu39Mr6NMCTheGwSQA+wUXpHAdX9ei6Z953sbh3p62wYM/GR8lE9/xSOZm
-b/IN
-=phr2
+mDMEY/i74RYJKwYBBAHaRw8BAQdAwtnvjlFVnnzNXO9hjHtB6MPGSY19L/BHh/iz
+iPF0Fzq0K1JpY2hhcmQgU2NoZWZmZW5lZ2dlciA8cnNjaGVmZkBmcmVlYnNkLm9y
+Zz6ImgQTFgoAQhYhBDZLt5msg0Ras820cRe+WJngsUObBQJj+LvhAhsDBQkJZgGA
+BQsJCAcCAyICAQYVCgkICwIEFgIDAQIeBwIXgAAKCRAXvliZ4LFDm4ylAQCSw2/n
+vht8kExJ31M+3qpjOqdVypMp+/Ojvh5Zlsk96QEA5HCBkteJcrohwRA7llZvLH3m
+25hcJdzmDh39mc0cSgO4OARj+LvhEgorBgEEAZdVAQUBAQdA1Dim8ZWpXRS5i9hb
+3O4RNHub8XvqTTkYyiZ2lSkXDwYDAQgHiH4EGBYKACYWIQQ2S7eZrINEWrPNtHEX
+vliZ4LFDmwUCY/i74QIbDAUJCWYBgAAKCRAXvliZ4LFDm2TGAQDcg+bAEPqOH+JC
+IND8wZ62MwnjFyXFv73qevXkUHHNSgEApUgpHW9f6UaIAQpc3R185xjz6tk8XXBx
+eYpxKgIAeQ8=
+=QSeG
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/salvadore.key b/documentation/static/pgpkeys/salvadore.key
index c40a687d51..ccca5390c3 100644
--- a/documentation/static/pgpkeys/salvadore.key
+++ b/documentation/static/pgpkeys/salvadore.key
@@ -1,4 +1,4 @@
-// sh addkey.sh salvadore B58F7C3CF6DB8A38 4F61AC5186F9AC20 ;
+// sh addkey.sh salvadore B58F7C3CF6DB8A38 850E0F7350D20966 ;
[.literal-block-margin]
....
@@ -7,10 +7,10 @@ pub rsa2048/B58F7C3CF6DB8A38 2022-04-03 [SC] [expires: 2025-04-02]
uid Lorenzo Salvadore <salvadore@FreeBSD.org>
sub rsa2048/058D487E056795FE 2022-04-03 [E] [expires: 2025-04-02]
-pub rsa2048/4F61AC5186F9AC20 2019-12-25 [SC] [expires: 2022-12-24]
- Key fingerprint = 75F0 E0FE C914 D646 0498 CAD3 4F61 AC51 86F9 AC20
+pub rsa2048/850E0F7350D20966 2023-06-19 [SC] [expires: 2026-06-18]
+ Key fingerprint = 7A9A 33E1 F77A 1C17 0178 677E 850E 0F73 50D2 0966
uid Lorenzo Salvadore <salvadore@FreeBSD.org>
-sub rsa2048/A4A5DE173430F950 2019-12-25 [E] [expires: 2022-12-24]
+sub rsa2048/D345EB31C77B208D 2023-06-19 [E] [expires: 2026-06-18]
....
@@ -44,33 +44,33 @@ FvIrQ/e3Ws6BSD4dyZmeIOHZEQJzOS/9BtjRQ9Wn7Eqau0gc9jwwY/kXCumFTWyd
RvpULPtektLDNb8pfcgJtiCJ748hg4Gfo2RsJ6XUfaS2m7Ka/VCw2xBguUbgTa4g
/04tNw3SW/q1rNFbCul390EmihgXn/n1yRBdrFQbe61VbDD21+yA7jL8lXNw6uEx
VN6cGkdZmk02HQ9r1jSMSO7RvfVV9m/rCKFo7mFLVph75+LSi4TV1x27jASD4eal
-3dw+vFKZAQ0EXgPk8wEIALPIODWhOn41sTajlVQmKo1YZsxeABUNPFXDoCuZLjG2
-NI+9xcB2Odraw+LLOMwmJP55gDG+KmDbjBYuR5e4nGVvp+fd0ypkKCQnvsr0GKmL
-1ZIfuSQvzv6ko7LvEngReASBOPq/fwAEWLaUIJmOMAlHeFp8mrUWJKUGnqg/wnDk
-hOafXnq9+LbfJlDX7Ex9lfmzU2wu1IHv/i9I/EzK8p/oBFmajt1zRFWpsJInLIUU
-4QCggGS9zNRWJ1DsHosz+fPpYzQukKS5dUpofS4osOovDi/2sVdpSzx271BFLM2S
-4YziqmhPY8a2CwP+MKGXJ2Cqf7AgxMw7WEHzbSOVYEcAEQEAAbQpTG9yZW56byBT
-YWx2YWRvcmUgPHNhbHZhZG9yZUBGcmVlQlNELm9yZz6JAVQEEwEKAD4WIQR18OD+
-yRTWRgSYytNPYaxRhvmsIAUCXgPk8wIbAwUJBaOagAULCQgHAwUVCgkICwUWAwIB
-AAIeAQIXgAAKCRBPYaxRhvmsIOtJB/42RLaktIzi8o1BgJQjOjJkjTC9/I2pIcYP
-AKBFafRIt4vJX0jwpSkO9a8QX6bNBBBUzOoqVoCuz7PghaQ/uEzSYT/8JfG305WW
-+5hr6dqkPIyD1Z9Fmd7lXFgEhAmD0xH9zPlvm38n9IyF0RzFc8GjTKSArwOeh4r9
-CTvLJbEpf7O51/5XKlEaFlR43wjBoSe2SrS76ptzbRsgtjfn/0orzNariDddpduV
-swhWdNt7IVafnj6OToLWpFXr/UP/GhekydEOTfVK9zREgAPGbTzoPgR0jLBlGCPk
-tSy+IQYf0nmiupxaDh3mTX95AEhTfKvw6KoS308hVSiYWmmFCwljuQENBF4D5PMB
-CADfG1izmybPRluW10ZKZsrCwtIAxvIu7Iry7klgn3Uu+tRnwyT94iKo5gaMfSg/
-Aj2RJxjC5CB9M5m56Ci/uR3tRh18kW/XlQolrVh1mPfqsFquILsF8jh3JT7TZRtx
-OowocIEMdyONpDeGBciEOMHEXGQPaiIBwm/89PZhSUUtC/EDb+0EFHVmbe16XEd1
-ZO1uuisGc1v07t/EuwT9HeIqD400vt7OdJ3yIDgnmtDnMM9m0g3vtRMU9c06P+6q
-rKi4BLla+9CKUrEiqJSX0qzB9n5objkENDYCrqIbTDfUXSNsnkCLbCFAeaRLxil2
-vvdlsJjJrhTem9aOc+PCWuvTABEBAAGJATwEGAEKACYWIQR18OD+yRTWRgSYytNP
-YaxRhvmsIAUCXgPk8wIbDAUJBaOagAAKCRBPYaxRhvmsIJ8wCACnEbb55GujqFXx
-eyzaozD8yJXqQAP9dglVYZBqv+1ismnugdnAu49rzbIjufUCr5IbFE4n44KmrMS1
-MXiMWyERu+R/styRwGyu9tbUbZBckUC/AGrwPHtPUUrqtLDgXZ0U/T8bXtxts8JL
-W9LZoyyRmLaj+FUCFT3+JL3WbNNpNGWbmOphm2T+YrUYHQwL7VtDEqgqJ6X1Qj6j
-a/PkuDw0mcJy+8WS54bVWK9AO35L9qc4ZB3z8fRtk1KLCxkEDBtfMTZqcmmkvOI/
-d43CZ/LznKPlpGsWaTTO5bpCEknBFN0Ds2w5bo/HI9YQSqXKawW03vcyc79i6Jzm
-QtHk8oc7
-=A0gH
+3dw+vFKZAQ0EZJCLUQEIALy/UKR+6S9iHfzJYmaT31iX9fmnjxe8WbhyMzgXyLaF
+nRFInEBl82DFbzw7PFUnRK8uyFBobCQXnYWvgU2+9w7xBmFoSPX23ap0UR6dvPDg
+WB2EGK4o5J3YDlUWyHuiuNCErMEnqnkk0owUKFu4EnhFRL+k8qX6nJUZIF2EHxgd
+igNqOtL/viN7HwfDvcrajPTiuu9xTcdrpsX/v5l+abl13sDYyOUByese4gIA4VRH
+Z3/dLHOetm0vXJrmuB0JnAMCJMkE5KXdm9Wr+8K9BOhmJux7HqBR5Zi58lcqwYkB
+igfAvTd2casZaRFP+tFX2NDVTXua6ohvJKNZrKHD15MAEQEAAbQpTG9yZW56byBT
+YWx2YWRvcmUgPHNhbHZhZG9yZUBGcmVlQlNELm9yZz6JAVQEEwEKAD4WIQR6mjPh
+93ocFwF4Z36FDg9zUNIJZgUCZJCLUQIbAwUJBaOagAULCQgHAwUVCgkICwUWAwIB
+AAIeBQIXgAAKCRCFDg9zUNIJZolMB/4jzYAuUr0VD45/6SajVvTIf7X/oNnL/gSN
+M7uLhmqqCagc8r/TQVJOp8gBsDg4nQIUbFKOyD1ErYgvAtzDhrtAh8RiscfEFDnn
+43vx0lnIQr1WHaDnCmbLtQIOoe9jfE5QKOPeuVRX5m3OSgtcQZPgpK6kAQ64kbjL
+RJJOn+t55YpY+ZPVE5GLkhxDmgMoa3mOImQflnRPyDFoPAGI6ssYG0E2qs8M9fye
+OV2LnIKieFZ8ml+CGnieEMX+rTGRrpDiccba3ZlbH2rnSv16mU9Hx8aujZYd7fLV
+rv+KjIvKfDMnlAt6rAPGLtCoY157U4HRPDKIwvFOdnE/yr7lPInruQENBGSQi1EB
+CADUzf+1MWL7wa1AJjBW5kFAafE5hiEQA3+ACzmIGYMY9/ZUJ+wKzXfIM4brrWm5
+ZDlnHUNuuisWuO2sYJOUgcTARSQ4QEkI5jaTYEeiMfcmJn7zrhqc5JYWEpnEqgyI
+NNxad7jjdDetl5ar9ZsHLRQw75MtzxAhn3QwsxYH+nPoF/R2mW/sdy1LGO8usGFe
+PtYuKJTaoy4892HbEtMRcV4PLkGWhyrDhDnoWYBbbQAzzl3foPcCNJM2GUgknaXr
+6jDfhTxvFuLcadX5HlF8rq/FHXJXFWc23XSdSUGAlWjcIEnOmfdoiigqsg6fS/8U
+ZjJfUcLU4KgXKOuGDaQS4agXABEBAAGJATwEGAEKACYWIQR6mjPh93ocFwF4Z36F
+Dg9zUNIJZgUCZJCLUQIbDAUJBaOagAAKCRCFDg9zUNIJZm85B/475T0GlDxDH1yz
+Yvt+4emGHOD3I73lhIvqmiDax4UY7MpUCnzPZmxX23sWVoOJZPDOsiTUiuYXf5Lu
+i54zDel03Ih+LbMkxjoo+pQJA7B4Jcks0xMZIBWrmHTfiKzIDeQS20kMVqlm9Fjm
+Lcc2jCjL1ZJbKMutqhoBNOGBz1mNF6+o1+zvoJxW6e29AA0t7mVIdYONW3pB5oBM
+Bi2CNs0OBJur2/ZXqZMp32nlqeuNpbayqvKbseE9NgHYaRjLVknRAFjO9xRyUxc4
+Hd6Ngmb/xBHsl7lucoKzK5VHxKJwiERqZJe7wu8FmW/JrR1H2XHgMdcWfbv2gK8W
+LuDvIu9Q
+=aqEk
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/se.key b/documentation/static/pgpkeys/se.key
index ab19c723b0..09963f77e9 100644
--- a/documentation/static/pgpkeys/se.key
+++ b/documentation/static/pgpkeys/se.key
@@ -2,10 +2,10 @@
[.literal-block-margin]
....
-pub rsa2048/47EBB5EF5AFDF544 2015-06-05 [SC] [verfällt: 2022-08-31]
- Schl.-Fingerabdruck = A371 EA65 9C0B ECC8 2B71 5313 47EB B5EF 5AFD F544
-uid Stefan Eßer (FreeBSD) <se@freebsd.org>
-sub rsa2048/ACCC7EFAB7B32CCA 2015-06-05 [E] [verfällt: 2022-08-31]
+pub rsa2048/0x47EBB5EF5AFDF544 2015-06-05 [SC] [verfällt: 2024-07-04]
+ A371EA659C0BECC82B71531347EBB5EF5AFDF544
+uid [ ultimativ ] Stefan Eßer (FreeBSD) <se@freebsd.org>
+sub rsa2048/0xACCC7EFAB7B32CCA 2015-06-05 [E] [verfällt: 2024-07-04]
....
@@ -13,33 +13,75 @@ sub rsa2048/ACCC7EFAB7B32CCA 2015-06-05 [E] [verfällt: 2022-08-31]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-mQENBFVxiRIBCADOLNOZBsqlplHUQ3tG782FNtVT33rQli9EjNt2fhFERHIo4NxH
+xsBNBFVxiRIBCADOLNOZBsqlplHUQ3tG782FNtVT33rQli9EjNt2fhFERHIo4NxH
lWBpHLnUb0s4L/eItx7au0i7Gegv01A9LUMwOnAc9EFAm4EW3Wmoa6MYrcP7xDCl
ohg/Y69f7SNpEs3xYATBy+L6NzWZbJjZXD4vqPgZSDuMcLU7BEdJf0f+6h1BJPnG
uwHpsSdnnMrZeIM8xQ8PPUVQL0GZkVojHgNUngJH6e21qDrud0BkdiBcij0M3TCP
4GQrJ/YMdurfc8mhueLpwGR2U1W8TYB74UY+NLw0McThOCLCxXflIeF/Y7jSB0zx
-zvb/H3LWkodUTkV57yX9IbUAGA5RKRg9zsUtABEBAAG0J1N0ZWZhbiBFw59lciAo
-RnJlZUJTRCkgPHNlQGZyZWVic2Qub3JnPokBVAQTAQoAPgIbAwULCQgHAwUVCgkI
-CwUWAwIBAAIeAQIXgBYhBKNx6mWcC+zIK3FTE0frte9a/fVEBQJda6AABQkNnbFu
-AAoJEEfrte9a/fVEgUYH/AxMAQsCgWZvjC7tXbG7dhP/ELUGUa1loe3Is22+u6J9
-CyOCnKAsejB9EjySlQYjuosFEeGsyFeR701JrZAgt5GCTPLYuesMWHYARTpfliHv
-0kgBYBloBmb3sj7uCkzvW8MkQQkPMVs+/BwJh1Ip3gfY/k6qpgcUS/z9kSb9G4lT
-JJ7WhpgVl0CNHuspyR/IJ7IVjtCkHosJn76zdl/KKde2AaekQkh5T4wdsAtAXK19
-laAJIe2xXntjAN3z/i8qn1V0vAeWc7PPS7cjy00yFgFr47rEVWI1eGvJJ/SoqVk1
-4tmrzC542QXaNzfcHLF5ewV2g/S7YomPLY6U1nVQxLC5AQ0EVXGJEgEIALEj9qCX
-MZVucjpcd3QxM/TlUr98m5viEd1z4tCnPUyRWcICEVtj2h5xMH+2iB0q1+KWhq+N
-sWtvScmEmfHnsr7dJ1K677OdpDhKVaJk61eeRulFY1R4yb6C1MMxK+WgYB+vvpG0
-UeyR0M4uBewcPvRsq4yGUHFQKtLAbMdoPTSryJA+ElnmK1vdY+rPcHgiOIMBZM7a
-hsPXC0C9K4e5SP9clGyIoMpbfHXdx9q+Rp3zVtlbhyk3BS/xccu/+9pk9ICXL6GR
-js2sNnJ0wxdU1DsAlC59a5MnSruwiZFwRnkQhr3x6wk97Lg7sLS9jjTnCN7LGlVm
-SmpOEMy6uq1AWfUAEQEAAYkBPAQYAQoAJgIbDBYhBKNx6mWcC+zIK3FTE0frte9a
-/fVEBQJda6BHBQkNnbG1AAoJEEfrte9a/fVEEAsH/jRwIaaUoG8Gzpy/IzSPbV6A
-JrxBCmFyLDweFxWMq+vKI+gmbiREKRkA+J7Rc8vpCXy+nkK0ni9Bs0/R7nZ/EYd3
-4ht951eemnNLUPWmUhR0QdxyIZXfGf+i2bAEa3hbfwlqtNYBuMF3z7uAm0bAM1MC
-bqKnRmd6m4LWk23a8vylH3+uDkhLBBx3IKUX0jjO4QZaewj9F8w6R6/N+zEJIwc5
-l4BezBz936HtMicssBBy9CB+aA6RlFwdBSwItxDzAftNICqhK15dn79Lnopza9VY
-+sELMCgKbmbhF2kel8Fs2vRYTtB7oow/F+zFEsYqZLjimg/GaRCZh5eQCya+Jwg=
-=Od3p
+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
+e6KMPxfsxRLGKmS44poPxmkQmYeXkAsmvicI
+=eSHH
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/secteam-secretary.key b/documentation/static/pgpkeys/secteam-secretary.key
deleted file mode 100644
index 33c444a166..0000000000
--- a/documentation/static/pgpkeys/secteam-secretary.key
+++ /dev/null
@@ -1,89 +0,0 @@
-// sh addkey.sh secteam-secretary 3CB2EAFCC3D6C666;
-
-[.literal-block-margin]
-....
-pub 4096R/3CB2EAFCC3D6C666 2013-09-24 [expires: 2018-01-01]
- Key fingerprint = FA97 AA04 4DF9 0969 D5EF 4ADA 3CB2 EAFC C3D6 C666
-uid FreeBSD Security Team Secretary <secteam-secretary@FreeBSD.org>
-sub 4096R/509B26612335EB65 2013-09-24 [expires: 2018-01-01]
-....
-
-[.literal-block-margin]
-....
------BEGIN PGP PUBLIC KEY BLOCK-----
-
-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
-=5gJ7
------END PGP PUBLIC KEY BLOCK-----
-....
-
diff --git a/documentation/static/pgpkeys/security-officer.key b/documentation/static/pgpkeys/security-officer.key
index 05f1b76f2c..283bf95c1c 100644
--- a/documentation/static/pgpkeys/security-officer.key
+++ b/documentation/static/pgpkeys/security-officer.key
@@ -1,11 +1,12 @@
-// sh addkey.sh security-officer D39792F49EA7E5C2 ;
+// sh addkey.sh security-officer D9AD2A18057474CB ;
[.literal-block-margin]
....
-pub rsa4096/D39792F49EA7E5C2 2017-08-16 [SC] [expires: 2023-01-02]
- Key fingerprint = FC0E 878A E5AF E788 028D 6355 D397 92F4 9EA7 E5C2
-uid FreeBSD Security Officer <security-officer@FreeBSD.org>
-sub rsa4096/6DD0A349F26ADEFD 2017-08-16 [E] [expires: 2023-01-02]
+pub rsa4096/D9AD2A18057474CB 2022-12-11 [C] [expires: 2026-01-24]
+ Key fingerprint = 0BE3 3275 D74C 953C 79F8 1107 D9AD 2A18 0574 74CB
+uid FreeBSD Security Officer <security-officer@freebsd.org>
+sub rsa4096/6E58DE901F001AEF 2022-12-11 [S] [expires: 2025-01-15]
+sub rsa4096/46DB26D62F6039B7 2022-12-11 [E] [expires: 2025-01-15]
....
@@ -13,73 +14,143 @@ sub rsa4096/6DD0A349F26ADEFD 2017-08-16 [E] [expires: 2023-01-02]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-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
-=8rds
+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
+lIHlSwox7qfdO0Kz2XncSbIA
+=QvUh
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/tcberner.key b/documentation/static/pgpkeys/tcberner.key
index 3ced4d03fc..0360ff94ee 100644
--- a/documentation/static/pgpkeys/tcberner.key
+++ b/documentation/static/pgpkeys/tcberner.key
@@ -2,11 +2,11 @@
[.literal-block-margin]
....
-pub rsa2048/021DB73A50293AD0 2017-09-08 [SC] [expires: 2023-01-04]
+pub rsa2048/021DB73A50293AD0 2017-09-08 [SC] [expires: 2027-02-16]
Key fingerprint = BA58 38E2 61D1 A3C8 0960 C50B 021D B73A 5029 3AD0
uid Tobias Christian Berner <tcberner@FreeBSD.org>
uid Tobias Christian Berner <tcberner@gmail.com>
-sub rsa2048/F06E731A05C1E357 2017-09-08 [E] [expires: 2023-01-04]
+sub rsa2048/F06E731A05C1E357 2017-09-08 [E] [expires: 2028-01-30]
....
@@ -22,12 +22,12 @@ vv/2JhqRnl+CfGMFdjCuqM00422XOHB00qAp26LSd502OGKPlep5ngjrqk2n1jil
zA3amvpY2N291WSFFzcP1/YtOHSmOg4ja3tHABEBAAG0LlRvYmlhcyBDaHJpc3Rp
YW4gQmVybmVyIDx0Y2Jlcm5lckBGcmVlQlNELm9yZz6JAVcEEwEKAEECGwMFCwkI
BwMFFQoJCAsFFgMCAQACHgECF4ACGQEWIQS6WDjiYdGjyAlgxQsCHbc6UCk60AUC
-XhHSUAUJCgJDaQAKCRACHbc6UCk60Mk7B/9kk5HuhDj2PwpHY2aaumFokwcB/c9/
-Xs9usHY4JFOBcz4e39DMI5p+Cz9ljrR2EbjQfk8PNokgbhJPkFdB7o4Nt8Z1NMOn
-ZR/8bhzLj6Ul+hOCZ+uglEdfgBnn1xGfp0MDE63rEc14udzxJsY1YZC9z6V6dmCK
-zOIkXDblorsPTuXL5rLzSMp8x2xkXpwz6S7cqyRkBPDIvfL1996m2MoJzqJUyO/o
-1EqleiTdkoYxAsHnUX1afOS56wKMJ9knxIx2c3ePWJ8vITAMWRC1x6R5F/KfrUvm
-2oD9nPfmnIuwRTQLot/4Xk8bbwNsLmH1sM4PS8amUBj8Q+Y5qe+vrjbLiQIcBBAB
+ZdDTVAUJEcFEbQAKCRACHbc6UCk60A5/CACWtEmqNI5yQ0j71bLt7S1ceM8XFJhP
+saNZkcv7oCJSdZ2jSXA0iitRKOIFt4ggbBSH4PoeZNnyPa7Iq/SzkAMTyy7RniT+
+3Gno4yqUFJ72wPjVzpkaZE/wqjPvrKYK1QHdzmArZ1gUK4lVWEjnWGefaxVf1Yv+
+GNjiUVx6+FhRPMEltqK9GQ8YgaHZEIk7sxq1lgZqlBNJF0I9+bAk1Mi43YtA71d6
+2uGpOmdHcKpBeYY8gCS8KV114bWnNNjLX+S4AoWlzZ2lHUjDLW3dOZk2CiQR6o7+
+rDnP1ulhzSIPENl/1FjPmXNmbfPQqEiM0s3hnzH2t+tV9dqiK4aK/gd7iQIcBBAB
CAAGBQJZs7D2AAoJEH/qPaYWnHfWWKMP+wSem3+eh6qZq/nF3rtErxsdXZz2eeIo
IXBQp8ugqHd+1+gPMwAuoYcvn2hEGXDJozgqyfGLu3UwA6EUkSLNwxnG/QqepYiv
uAR7pVJUvQs2Qxbzl6d97eydiHNegYnAJ1Oe84xyMx7NDP1jPrGqs9JWGFcVP5iW
@@ -41,13 +41,13 @@ xo/aqOsULLdmmeEthHPq/sVeNAJM+Ceblz3rIwnvnfu3xtDi2PkosNJYJP4VrDCB
F13f7e+IQJM/1BRn41yTwUqy9Tqi0NIdftEm0dWyqKXTUAwxR1XopnaD2yAxE7wV
JMs7uwEosijytCxUb2JpYXMgQ2hyaXN0aWFuIEJlcm5lciA8dGNiZXJuZXJAZ21h
aWwuY29tPokBVAQTAQoAPgIbAwULCQgHAwUVCgkICwUWAwIBAAIeAQIXgBYhBLpY
-OOJh0aPICWDFCwIdtzpQKTrQBQJeEdJtBQkKAkNpAAoJEAIdtzpQKTrQeQwH/j0f
-NcbmnU6K9PhKZxC+FTJ8zqQFyV4yxQB6Ndgcxh6HnLYg0r6IAk+RSLmurLUS8PmH
-LgRjaKUfWgmMOSBZkjF05SIVpayiqL/M+9ofVhZMrzeZM93F1ridgS+yaoSIzuet
-TM1KSmjwp3quOKK31bC3TLnQrN2BdENDjOmMuhnwlCyb9RxcX1KiAA9EZdWP/c7i
-eeJfloZtP2S7RbtgHz9mhkjCLjiYLJaRe4v0YxM4hVRhsZRUPEV+2Jnvk6PCL6z/
-yC1v0p2zTcp0VIlAxRqFv1VV5otL4W610hwaHTQ2j1wVB8EX+IXw89yqkNdawGqG
-XVRewIw9KrAFvDlkHp2JAhwEEAEIAAYFAlmzsPYACgkQf+o9phacd9YO7BAAsxUt
+OOJh0aPICWDFCwIdtzpQKTrQBQJl0NNjBQkRwURtAAoJEAIdtzpQKTrQVbUH/1p0
+q3uqW9AHJkp+wfcsvHP8il4P2vGju4pCnlNj8jbg2ABQPuXtWQBkO14LHI81E12Q
+p5seH8vvKjEAq2wJc+BTgqX4UkRdG/DhSc0A7J7zaxS8O1wMWEtPC/WBIBBODyfp
+TPm+EFWtRx0YXooX7W/pVs/soF9FQgyH8UsOx/I4mdUh1fLNq6BfnsJo/uEo/MuH
+UtyfsnQpg1jj6ZJUwgERp7vRT6HKo/LSjS50kJKFkY+my22HfoXddhf0wWtSXzQV
+1Lk8lTA4t/TAlhHMiGxBSpFJ1PHVs3STifQQ7m/6AjbVwL1E0X/ycuejS1I/zdqG
+5pyS47PAFOBC5UXJ3ViJAhwEEAEIAAYFAlmzsPYACgkQf+o9phacd9YO7BAAsxUt
BIeVhmH/iFV/dZayFs6GUQQUjgBKmcEbF2LmkX7gpIvrv3HL7+qY8pItgzlPlaBQ
aJPSV9BmpnwtrfMJ1vfHT13XuU+WQxbDyzRYYu1wKsXBYWMYebHLuk2CAprQ8/PR
HqO1RNburshG2pROAURvLk7LDijr/KSqh+pGqNK0S7eq6YZwDiSJtMxZw6IeNfdC
@@ -65,13 +65,12 @@ ET4X783K5Y+QTBLOMwTqjbTWrFHGw0bte04cK/z1ylvr62Nv+g4aKx9PT5doO3Z3
9xl0J2FadX3/jJ8aFOkIYmANIdWcAdxZmg368Gi5KkamgFXxgfvaV1UfsAjFxtwv
bakyiMRNg4eMYQjNUXtVsuuBfg4cuv9kNP/3lhRprWEWnaSi6FxU4vh/eZJOLMS3
ITR961ijdG8AEQEAAYkBPAQYAQoAJgIbDBYhBLpYOOJh0aPICWDFCwIdtzpQKTrQ
-BQJeEdKmBQkKAkO/AAoJEAIdtzpQKTrQXVkH/2qC55aJchyBRIcV/ieuIg+kLkpL
-FJfzvByg3wLf0GYBQFvcOLo53ZAh5u+LTeMDk6JUGEOfR8VQkgGL4UJJRCWfU1eR
-YovKa2lsOgE+ZElZpk5iNAJoZoDfpOAT3jjTTozu95aQ5VgZRNz2oF18znwLYm6/
-o9iT8oHSRH0NvDIZxhjJLWytGMCJY7pEJ3+sQyUM8u9R1cebJl7ApbRZDM8ObBSs
-SYuJIIPmhu5fP7lXzmvXRRJCHB55K8hTay4NJI8GSUovnSbzkhcRcId3WMaGrnj2
-F7nVtaa3uTiyhMC5/EF0YSdG9ew6X3PrLSIAvMjLVWLyNfiZqx1q8blMnis=
-=gZ0c
+BQJj2KsXBQkTi4MwAAoJEAIdtzpQKTrQpC8H/2V5hcm7NEt1aQGdEZaS7EXNguOM
+oMv0Uh5FNuqYtFUZCzDdvyP02rv30T/LvgRQE5Rf62oAIiIQNHQn0Z3EUL2S8GeE
+z4tLjVFHf5e9bcm6ToiVY0li0ILaB6yVpbJ39QwJT2TQ8LRY+hZONBLwmbbykkFN
+2wUxCzz/uuj06979T+njEP5/9ioGMeepkaWJ5Mc+E+OUBIN20WIruBr/hPZRdfjy
+xtuGZtzeXsJSpwdGWzg+3DhJW7VWdYcG4WHonu8Yuo+0Lo6jWECtRrUrEkhV1b1+
+b3oFkuIoaTTkr42zd8RqZFnnIG6YxCgCfi4uK1RVMLoqiKVjBbeEAAh2Mug=
+=+/kj
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/thierry.key b/documentation/static/pgpkeys/thierry.key
index bfa1a63a28..afa556058d 100644
--- a/documentation/static/pgpkeys/thierry.key
+++ b/documentation/static/pgpkeys/thierry.key
@@ -2,13 +2,13 @@
[.literal-block-margin]
....
-pub 4096R/F1C516B3C8359753 2013-09-23 [expire : 2023-09-28]
+pub 4096R/F1C516B3C8359753 2013-09-23 [expire : 2025-09-28]
Empreinte de la clef = E536 BE85 3853 99D0 0B6F AA76 F1C5 16B3 C835 9753
uid Thierry Thomas <thierry@pompo.net>
uid Thierry Thomas <thierry@FreeBSD.org>
-uid [jpeg image of size 1968]
uid keybase.io/thierry <thierry@keybase.io>
-sub 4096R/32B32808E6B52F4F 2013-09-23 [expire : 2023-09-28]
+uid [jpeg image of size 1968]
+sub 4096R/32B32808E6B52F4F 2013-09-23 [expire : 2025-09-28]
....
@@ -27,588 +27,683 @@ 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
-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
-keV/76J3io2HaExHzaCbIeVohidjXMmQYfbnbwGnfvjOdwXhGTDTV6qHoJearlNu
-IC1cIQ1tKTfCFy7+6UKU/mTha9Mk5Aqu9NsdN4uHjq6ZkzzEVqTJU/CPFvTcqFrN
-8XlgI90/yJKJ1H8KMFJyLZ5YYn+X+Kc53ts8gxXgVGxhNTbGtTxCEk0dkVAiLNCx
-rkdWU4hrBBARAgArBQJiJ5ynBYMB4oUAHhpodHRwOi8vd3d3LmNhY2VydC5vcmcv
-Y3BzLnBocAAKCRDSuw0BZdD9WL7JAJ41uScZVm13x+OMJGb0L7bC1wemJACgj1T8
-1OeNHc+0ZN5Un+q2rYgNiDPRxwPHAQEQAAEBAAAAAAAAAAAAAAAA/9j/4AAQSkZJ
-RgABAgAAAQABAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8KCwkMEQ8SEhEP
-ERATFhwXExQaFRARGCEYGhwdHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4e
-FBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e
-Hh4eHh7/wAARCABQAFADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAEC
-AwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJx
-FDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpT
-VFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ip
-qrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6
-/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcF
-BAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl
-8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6
-goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU
-1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD12KKGJ96lyR0y
-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
-bPbj0nU=
-=uP8S
+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
+Hh4eHh4eHh4eHh4eHh4eHh4eHv/AABEIAFAAUAMBIgACEQEDEQH/xAAfAAABBQEB
+AQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMA
+BBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1
+Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOU
+lZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm
+5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/
+xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJ
+IzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNk
+ZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4
+ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhED
+EQA/APXYooYn3qXJHTJqXzlY/dOR7Vl/bFP8WKja8I6Ma01OW6NiS4UA7Sc1UlvX
+VfnJAPpVEXe48nJpz3abPnIxTEON6mcZJ/WprZlmcHa2PXpVQXlt/cP55qRtRiji
+LHCIBkknGKGJGlM9uI8HII7ViaoYZZAUA3e9UpvFGnO2xbhSPXBxTWWO4QSRTEqe
+hUjFEZJ9S5wlHdDwHRgzOoA9KhvLuLcTvWonsS5+e4lYemacLOADb5an3NXdEpHl
+6eJPiPGyl7K0YscBGUcnr2b0Bp3/AAlfxISQH+xbSQdNoXj6/fzXWmME9uKBGKzu
+w0MTT/F/jFAft3hiObgYMMvl/wAy2anfx/dwRk3nhm+ST+6CMY/EVr+WRyDTWUgd
+aHfoFjn5fimVV/L8OX5YfcBcKD9Tjj9ayfE/xE/tK0t4RG+nKxO9JmGWPt6iuwce
+vNeRfGSwsj4ht5ZzMd0KyFVPXkggfgo/Osaqly6s6cIr1UbEXiKL/UrdxeZ/dLgG
+tCy8fXHh63Z3tHvY3cBo1Ygr15HBrzQ2ekalqTaj++tkOPkHy5wMdK6bRLf7VqNs
+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
+=rk3J
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/tobik.key b/documentation/static/pgpkeys/tobik.key
index 406771eea8..7ef699704e 100644
--- a/documentation/static/pgpkeys/tobik.key
+++ b/documentation/static/pgpkeys/tobik.key
@@ -2,10 +2,10 @@
[.literal-block-margin]
....
-pub rsa2048/A4F09FB73CC51F61 2017-02-13 [SC] [expires: 2024-04-07]
+pub rsa2048/A4F09FB73CC51F61 2017-02-13 [SC] [expires: 2027-04-01]
Key fingerprint = 957B D310 973A 78F8 1D42 EA1B A4F0 9FB7 3CC5 1F61
uid Tobias Kortkamp <tobik@FreeBSD.org>
-sub rsa2048/CB30D0C27F086269 2017-02-13 [E] [expires: 2024-04-07]
+sub rsa2048/CB30D0C27F086269 2017-02-13 [E] [expires: 2027-04-01]
....
@@ -19,26 +19,26 @@ Gf/gPdATs0qIyd23Ed6vrA+lJIZAszcCnCjzEXPQ3ONExtPrWlAPqOpUD/Gnz3W2
7NKKZx/vMNKoAHGkly01rcX1lywPNjO/thTe/mSxAaXD94Jsjiy8bp9ffMmWljna
EZDExbe+2wvXaNZz4+rfcqDEZQr6gu23eJ9YBWtbJ6lVKVZPVh+CM133Ig5Bj4hb
hZSLY+mDqGCb7ahr/mFPo7Eri7keQVcDbSBZABEBAAG0I1RvYmlhcyBLb3J0a2Ft
-cCA8dG9iaWtARnJlZUJTRC5vcmc+iQFUBBMBCgA+AhsDBQsJCAcDBRUKCQgLBRYD
-AgEAAh4BAheAFiEElXvTEJc6ePgdQuobpPCftzzFH2EFAmJQFVwFCQ1w5i0ACgkQ
-pPCftzzFH2EYowf/WPhKYM6AX0GMyH4kfE8K4xIX6F+7etuPKfKR9HUU4qliva3g
-VFPtgNksH6IwK8soZP15nVBUtm8U95xw6kfcKx+oMUSjLbWexkTDHBAdlP91vdL8
-nfb1b3krj2sCfsONYXvEBL+VuVvJdzc59S3xIdyUNr4sDNC0JPh7EHkj/uOFTFqQ
-q/ghQNOkCpwe2dalnn8qrTdGzkT6a0xcyhVzxTFBEK860PHS/LvMRmpBUXdL3sWG
-1mAuPkq9eBZASn3YEKwH3pwKD8LJTdjrhfvCe+iml7QxXtKdA58Rd5rwkgIb+Sua
-EB2Am5KMcR1KSTGB9aTg0or5fMr1kRPWcd6WOrkBDQRYoZYvAQgAsWeF/0wOlebQ
-pFqYyP7DZiORQTDuEHPrMR5F5zH9yvf/3BriNhmv6MU2CcAUASrYTpr23OnycU4y
-V36yoOrByT31OQA52rE2JVop5wqmhyc3yuYYduwdPWMuLZGVfchTWQ3DSBtQysKZ
-ordRP2Tuqp/qfc6GQtIlyWRIdCAu5lpvrYX0STfNgtJBHJw6W8nGAZgmuaDsBpsL
-dr89dsy+WQG/1KX5zEJpReqo1m39Behz/DXgc/E1RCnYSYMl4Ji671ELJeGV7ufG
-E8dBW0L9umFS73vzGuMmTR9Z0xXR5vOyVg3E/Dzu27Aw5ez2XiaxsdMpoCXxtxj5
-dv14gfGzKQARAQABiQE8BBgBCgAmAhsMFiEElXvTEJc6ePgdQuobpPCftzzFH2EF
-AmJQFXEFCQ1w5kIACgkQpPCftzzFH2G4AAf9GLEMT+W3qc5FWdSHGjiwvnl8gNGb
-dEGq/lIszwdySBBnyz0vK9ULrpGdp1V53z+XoXaV5JtyjnkM9GBNMa9KMRSAJ3hC
-Dm2omyXFpMa1j4xHky6BYwzD9cZF7lqgl1Mw0Ajgwx5cRR/2hmwntOREA9ZpdX1/
-1lyVZzndyHTGbzcqgNuYKN3uZuId1ND5u7Iu2OaXaEWvPOXQg6O1STVAcKedWOYZ
-YIwVYvK3g1o+/DuZ+khnGKgojAcS1y+dmYCihSvvOpWCCtdh3KXOYzzWyKowg/8/
-ewxG1fyA0p0593eDDYSgV2DG86MysjYkesYqld4UTNPnTwRK6RJa98bnMQ==
-=+qJK
+cCA8dG9iaWtARnJlZUJTRC5vcmc+iQFXBBMBCgBBAhsDBQsJCAcDBRUKCQgLBRYD
+AgEAAh4BAheAAhkBFiEElXvTEJc6ePgdQuobpPCftzzFH2EFAmYLLl8FCRMNMrAA
+CgkQpPCftzzFH2GwHwf9HnjpVXCt8EdcNPAsZppuo3LpFV/G1RPZVNRpjwafWGrj
+OMFYvntMTgj1WkJrIWIyglFdowkXZ/KCN7UsIqiUa4MUE+Cvr9/vDPyEDO7ThvCd
++8oZHQkuz/Trmg+lZsE1kevDEiTWX1jvT6ISQQ67xAXgVNWxVByCG6uJtYZ7vZRt
+4N/BVS/H4GdiCvXwmGIttvn6II4mlJPNnU9ni2Du7guhnXKxUBV2k2lrylzRpdb0
+V9inSFCskEBF/+SewJhmINwumC7x9nzrrxDQ2bkBadeMxzkvPoXDQfQu5vR6E0m3
+QBrC0y98j1dReU4lJxblrcAS5wmKcRs6RIZDnnqxQLkBDQRYoZYvAQgAsWeF/0wO
+lebQpFqYyP7DZiORQTDuEHPrMR5F5zH9yvf/3BriNhmv6MU2CcAUASrYTpr23Ony
+cU4yV36yoOrByT31OQA52rE2JVop5wqmhyc3yuYYduwdPWMuLZGVfchTWQ3DSBtQ
+ysKZordRP2Tuqp/qfc6GQtIlyWRIdCAu5lpvrYX0STfNgtJBHJw6W8nGAZgmuaDs
+BpsLdr89dsy+WQG/1KX5zEJpReqo1m39Behz/DXgc/E1RCnYSYMl4Ji671ELJeGV
+7ufGE8dBW0L9umFS73vzGuMmTR9Z0xXR5vOyVg3E/Dzu27Aw5ez2XiaxsdMpoCXx
+txj5dv14gfGzKQARAQABiQE8BBgBCgAmAhsMFiEElXvTEJc6ePgdQuobpPCftzzF
+H2EFAmYLLl8FCRMNMrAACgkQpPCftzzFH2H6oQf/Wq7m0b14H/VGVzKTdomN3iQB
+ndHZowZAcHR5A0MYn/edjcB9WUFB5q8m+/XbUZNkXrsvPmT72v5tOb537GUUFi29
+OT508mew3HHxVwJk6p+xTXpWNOWqPYbelW9EmM0gyTYBFqo9yDpCzFrRFwkBe7ic
+3+kO12C4q8ybUVVkQMitpWBhb/refLaIHUrCcCtj9tjyjWY2/8A6Au4mpAKXuV1K
+1kH1iV3O8ovdI+qtTvStMs+DkjlN0bg2fp3BfmwQvyNHLcxjAu8UN9Q6S64M/W+r
+GquWBvo7HcdbKRtV0Ilml9YOLqkH0Gpp7f9ECceD6qJ1FVsSt31TRjnXMsRJmQ==
+=Mbuj
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/uzsolt.key b/documentation/static/pgpkeys/uzsolt.key
new file mode 100644
index 0000000000..7d2665af36
--- /dev/null
+++ b/documentation/static/pgpkeys/uzsolt.key
@@ -0,0 +1,55 @@
+// sh addkey.sh uzsolt AD501D76A7F5FE99 ;
+
+[.literal-block-margin]
+....
+pub rsa3072/AD501D76A7F5FE99 2024-01-26 [SC] [expires: 2027-01-25]
+ Key fingerprint = 92C1 1E92 1C0F 25A8 0ECD CE6C AD50 1D76 A7F5 FE99
+uid Zsolt Udvari <uzsolt@FreeBSD.org>
+sub rsa3072/B755984A46E9CBE2 2024-01-26 [E] [expires: 2027-01-25]
+
+....
+
+[.literal-block-margin]
+....
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+ulFMk9V3ov40EJNC0v+2L6uei831uwWmmsVlNg==
+=jqD/
+-----END PGP PUBLIC KEY BLOCK-----
+....
diff --git a/documentation/static/pgpkeys/vd.key b/documentation/static/pgpkeys/vd.key
index 4e5fa0db60..5a4f332221 100644
--- a/documentation/static/pgpkeys/vd.key
+++ b/documentation/static/pgpkeys/vd.key
@@ -1,57 +1,279 @@
-// sh addkey.sh vd F6C1A420;
+// sh addkey.sh vd CE712013582E2230 ;
[.literal-block-margin]
....
-pub 1024D/F6C1A420 2004-12-08
- Key fingerprint = B1D5 04C6 26CC 0D20 9525 14B8 170E 923F F6C1 A420
-uid Vasil Dimov <vd@FreeBSD.org>
-uid Vasil Dimov <vd@datamax.bg>
-sub 4096g/A0148C94 2004-12-08
+pub rsa8192/CE712013582E2230 2018-12-25 [SC]
+ Key fingerprint = 850E 138B A9C0 9238 81DF D55F CE71 2013 582E 2230
+uid Vasil Dimov <vd@myforest.net>
+uid Vasil Dimov <vd@FreeBSD.org>
+uid Vasil Dimov <vasild@gmail.com>
+sub rsa8192/E09A5F0C8B4B3AF5 2018-12-25 [E]
+sub rsa8192/54DF06F64B55CBBF 2018-12-25 [S]
+
....
[.literal-block-margin]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-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
-XmPkHj0KHckscg/fYw==
-=Yp1b
+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
+=mA2f
-----END PGP PUBLIC KEY BLOCK-----
....
-
diff --git a/documentation/static/pgpkeys/vishwin.key b/documentation/static/pgpkeys/vishwin.key
index 663c41dd1a..463061aeed 100644
--- a/documentation/static/pgpkeys/vishwin.key
+++ b/documentation/static/pgpkeys/vishwin.key
@@ -1,11 +1,12 @@
-// sh addkey.sh vishwin FEB7852BE29B3E87 ;
+// sh addkey.sh vishwin 678F936058415CCA ;
[.literal-block-margin]
....
-pub rsa4096/FEB7852BE29B3E87 2021-05-02 [SC] [expires: 2023-05-16]
- Key fingerprint = 2577 79BA D34D 8697 8770 1331 FEB7 852B E29B 3E87
+pub ed25519/678F936058415CCA 2023-05-05 [SC] [expires: 2025-06-06]
+ Key fingerprint = 5340 0EEF 05FA 3CCB 5CC4 D6BA 678F 9360 5841 5CCA
uid Charlie Li (FreeBSD Project) <vishwin@FreeBSD.org>
-sub rsa4096/2F452088A7FB535E 2021-05-02 [E] [expires: 2023-05-02]
+sub cv25519/89D366E76A3B1761 2023-05-05 [E] [expires: 2025-06-06]
+ Key fingerprint = 61F4 C068 BA81 8F12 9FD8 D83D 89D3 66E7 6A3B 1761
....
@@ -13,54 +14,16 @@ sub rsa4096/2F452088A7FB535E 2021-05-02 [E] [expires: 2023-05-02]
....
-----BEGIN PGP PUBLIC KEY BLOCK-----
-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
-7ChTGV5tKqPdWMTfdWjLks8d7C4782boDbQ=
-=UfX2
+mDMEZFWWqBYJKwYBBAHaRw8BAQdAINFDmM+bgGkT1C4nD5a3BxgcH8Xnx5qTJbPu
+IBxD57K0MkNoYXJsaWUgTGkgKEZyZWVCU0QgUHJvamVjdCkgPHZpc2h3aW5ARnJl
+ZUJTRC5vcmc+iJkEExYKAEEWIQRTQA7vBfo8y1zE1rpnj5NgWEFcygUCZFWWqAIb
+AwUJA+3ogAULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgAAKCRBnj5NgWEFcylla
+AP9CGICFEvTUOv5BYh/H8m49VJ87a/wd0obeQfVBnS464AD9FopTHbjEs0HDV0ZY
+mJPxzJIznjumsj9gBxX0bBqqTgy4OARkVZaoEgorBgEEAZdVAQUBAQdA6BUWuG5R
+uT0vmtoDyCUUqiJGdtd78GM5ic3kw2AntSADAQgHiH4EGBYKACYWIQRTQA7vBfo8
+y1zE1rpnj5NgWEFcygUCZFWWqAIbDAUJA+3ogAAKCRBnj5NgWEFcyn55AP9ezKDC
+UgHqAq6JX976abb9pYdbSjxxNJqnrjgNkfhgIQD/QhR+fgnUHhcGTMBy+pYHZUGH
+5DCuITsK1U4+v252uws=
+=cNYY
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/vvd.key b/documentation/static/pgpkeys/vvd.key
new file mode 100644
index 0000000000..a1294bccd6
--- /dev/null
+++ b/documentation/static/pgpkeys/vvd.key
@@ -0,0 +1,27 @@
+// sh addkey.sh vvd 8006FAABBF942F73 ;
+
+[.literal-block-margin]
+....
+pub ed25519/8006FAABBF942F73 2023-04-27 [SC] [expires: 2026-04-26]
+ Key fingerprint = 0956 DE50 9EAD 9D7E 4E61 8CC2 8006 FAAB BF94 2F73
+uid Vladimir Druzenko <vvd@freebsd.org>
+sub cv25519/D9E8405F72978A9E 2023-04-27 [E] [expires: 2026-04-26]
+
+....
+
+[.literal-block-margin]
+....
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+xjMEZEmcEhYJKwYBBAHaRw8BAQdAzzVRU/u5Oe4kUEFSvaiRoAPwsXMi4uBnfKqF
+TOIxjaDNI1ZsYWRpbWlyIERydXplbmtvIDx2dmRAZnJlZWJzZC5vcmc+wo8EExYI
+ADcWIQQJVt5Qnq2dfk5hjMKABvqrv5QvcwUCZEmcEgUJBaOagAIbAwQLCQgHBRUI
+CQoLBRYCAwEAAAoJEIAG+qu/lC9z/qcBALviJppCfpN8fLj5HfnQ75ARS/RvOL+b
+PHB422uv9PFOAP982mg4uqoYr1BvSVqmrtB7/oxkqReIeieBIkyBTM97As44BGRJ
+nBMSCisGAQQBl1UBBQEBB0D41GJgPsXUyWQckRf725z8CsGADMjlIpJbVhWUQLi4
+fwMBCAfCfgQYFggAJhYhBAlW3lCerZ1+TmGMwoAG+qu/lC9zBQJkSZwTBQkFo5qA
+AhsMAAoJEIAG+qu/lC9z4bgA/jGNXk0cGGKii1lXk55Gwh2EQhC4pLxQe/36TZiR
+29IBAP40fSUJOJ41IS0d8k6d5DQ0E9BJuRf+1S5AzsAUz0rmBQ==
+=x+2b
+-----END PGP PUBLIC KEY BLOCK-----
+....
diff --git a/documentation/static/pgpkeys/ygy.key b/documentation/static/pgpkeys/ygy.key
index fbb8fb8a30..2eab2bf79e 100644
--- a/documentation/static/pgpkeys/ygy.key
+++ b/documentation/static/pgpkeys/ygy.key
@@ -2,11 +2,11 @@
[.literal-block-margin]
....
-pub rsa4096/3068752A2C2EAF21 2017-08-21 [SCA] [expires: 2025-03-20]
+pub rsa4096/3068752A2C2EAF21 2017-08-21 [SCA] [expires: 2025-11-25]
Key fingerprint = 8A50 E4BC F82F CF01 79E4 AA59 3068 752A 2C2E AF21
uid Guangyuan Yang <ygy@FreeBSD.org>
uid Guangyuan Yang <yzgyyang@outlook.com>
-sub rsa4096/FE95523C21630E20 2017-08-21 [E] [expires: 2025-03-20]
+sub rsa4096/FE95523C21630E20 2017-08-21 [E] [expires: 2025-11-25]
....
@@ -27,31 +27,31 @@ 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
-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
+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
-5Lz4L88BeeSqWTBodSosLq8hBQJiN/2EBQkOQHmNAAoJEDBodSosLq8hB+4P/0di
-AHm/9h2qVdMsQjzRbOiynigrghHr1wgAhuV9LRlSIZ6Cv4cnPUggGjfQwLRv4XzT
-faNamqgMe1L0V/6RMnpxo64DTJeY1CHoewnK4MVM3UnXFkm2BbKgwDSkA+msGJU4
-Da5nSapsQQLCTarfnHtT/40CcUtBTU8q6DAAcUBnwixQ1ZMNc5lhMpVK1vaW+8DH
-0qlSQ+ACKSVzvvpJRmUUuuxW20/nAwCisFRpW+ftz4DSM/Njz3mFFSKUgGgtUoyW
-6Y1GmTdyXBs4gFA9aj1g0Z6hWomFIV9TeTU2WC9J6DS/NnrMMiMjoFBKcoWB053c
-t36LzHolYwyxv47durcCtVHo3VM2fcZP90gg9+/Ia3ZSnnANtPo+Xc7VXN96Meq6
-xEBOEbeciVajrDAVlnMBBa2iJ0T6VOfjQfO3uopnQXwHRKtu65o0sVnad0Cyl2PQ
-14kHSVPYvCdsgtb5MunhRKQe+qZU3dG+KVYmq/akVurFLt9rleQej7xVsWrCKEzk
-0o9tXmKRanhiN5vXUwb7eUmxSuA+nGYOvbQBPYwRrg5dzBZy6LtIZ15zWhbj0JnQ
-46l03SsEKkDWzJ+QtjzzNzu/6JNKb2e4YErSbTLwmSrpVthCVjE/KVJZJycbNXwQ
-S2mLvthQ9wjyfQ5pEJmyJgeeHfhxuycBkMWK2pIMuQINBFmbHnMBEADBBeyM2QQo
+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
@@ -63,18 +63,18 @@ EGSWqLiBD7376AjnNB/OV/SDLILW3KjoXJiELssMgDwdx8NC9hSpfkqhzUgwidne
Ig7BJeZPoWaz+6xI70oIcB5vxUgRqDu5z99C8S7OW9TXchPzVA+V+HPRLLkZi4E4
IeBkUxXU+jJS70KB5mUUDCq8P43RZXKJUdqdtKlROzjPUaHIFEQFymqi4BhfHtG1
n1+3bEREOBukHWQs91WN+GRP70Ob6vgKsQARAQABiQI8BBgBCAAmAhsMFiEEilDk
-vPgvzwF55KpZMGh1KiwuryEFAmI3/acFCQ5AebQACgkQMGh1KiwuryGtCw/+JvmI
-/wTrNwXQ7oDa4n5NzPbQH8SDmGmhW4zFCOusxLms93GO853twvcDfgk00GSYXVcw
-3z1l14jDHMaxzzj4EXaBJ6tp5NdCYCB008HFPExAihGEZ434PiIs4BqhuJn9y5nO
-ZX87zXKyGIOKM97KgVllQlBrs1lvZ+FQ6mWrbP1+8wPZJZApTGHMyR/s9Dt3rG50
-QZnJulTtJ45DpDm4St2xeN6XSRAkCBcGiXCAHabOJBOlzVKRLDvW3A9ToiMNK5Nq
-lYuYgN8ei1P7CVn5FphvzsPXt4cUEBNBStv73D+P/bDaupU/+KrzOrby+xixyOQs
-5+6goS1gD2fa0NbGHsLVjAzhjkY2BsHTd8878IQpWbLl/xF2IJuTT1qyfFc8Wy+5
-rmNyOKSCj3w6KcNczBngph5AQxW2U6ODFOE2x+R9xxxhdEuohq0vJsODsAC+mygs
-Fy1AINt5R/O/LwDQyIa7CF2SaIqbeRX9Fc7bKFpPhv3W7GiT41CRdB/9Y7NqXF67
-Ndk+xPs5ZAbJ+OAPvdpNf0drxv/DbyyNIBr0G2I6/6jthEEXyatvhdzKnMZ8AJe6
-IW6cUEhb6nlwji9Wze5iL+lZiPbGrVRj5iZKFLDyWPl6YLt5X30j6d1b+M7Lk2O6
-e9nIo9FvXGYybeHldCn6jAig6ox1xX1HMd4+4lw=
-=pIPA
+vPgvzwF55KpZMGh1KiwuryEFAmVi0u8FCQ+KG3wACgkQMGh1KiwuryEQJg//Y5fY
+lUhIxRUyPyTFQjq8U92jraFlpBJ9tz9UnZcB6S2Oy/lqACfxoRHfwAkvYxaWrx4C
+3A/o+KABcU2HKnzrFUo7qk9WOuAZarVhZ3HQgqGy8A0oz6SUvwGC30aDvUzsICmN
+ENPA0EZ8pWDEsc750jXUcWn2LKhw7eg1QdIoPU19OrxghAdf8lCPutz7FACqZXnH
+2HO98C/04hvptQsWl3Glx7czndajAxO3cFm4rzySzVWrkljh51AWe5cuvkhaxB7k
+3whZ1fYlTXHmCD/Bl9H8oPKYwL/vZ+sKTR0+uXc2Q27iZiqXuMPuiNXjpMCjh8J9
+iorRPphBICiRaa71BYNXffiVguF38D1o+G5YZS9HYB0IbyKkUrm/KD2pnwc6mPL+
+125mSTt/VI607K1w8DE0mBekdqt8QQxj1xPngQz/kXUTNZF3cqROT/HkyJiaoOaq
+wvMwFRXYtpWK75IaaeQwaaGUM3mcoyMa88rii7fyOGauFXevNMF0QqaerksbV4Fi
+KL2svCkyNE5GtawSpjCuVQgeGH41GrkSfZW9Hbx0NfY5UXRRcDLGvxbUtbrzPN2j
+QZIf5ANKCfmgrTJbm87irdgKS/rUx057DHdRpglKzCzI6t+FnO2GY2xOinTIcX2r
+cJQcNxVSgLoSq2yJbfDyhl8nowU9UpyHHDMVz0s=
+=lF65
-----END PGP PUBLIC KEY BLOCK-----
....
diff --git a/documentation/static/pgpkeys/zirias.key b/documentation/static/pgpkeys/zirias.key
new file mode 100644
index 0000000000..01de179662
--- /dev/null
+++ b/documentation/static/pgpkeys/zirias.key
@@ -0,0 +1,32 @@
+// sh addkey.sh zirias 54ADE0069879F231 ;
+
+[.literal-block-margin]
+....
+pub ed25519/54ADE0069879F231 2022-08-02 [SC] [expires: 2025-08-01]
+ Key fingerprint = 6936 13D5 5BBF 4837 B212 3ACC 54AD E006 9879 F231
+uid Felix Palmen <zirias@FreeBSD.org>
+uid Felix Palmen <felix@palmen-it.de>
+sub cv25519/706CBCB4E1AE67C8 2022-08-02 [E] [expires: 2025-08-01]
+
+....
+
+[.literal-block-margin]
+....
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mDMEYukWxhYJKwYBBAHaRw8BAQdA7sqVBDPo/CLhv2oWPApofgDyt/onalk1HNjt
+Ank8x0O0IUZlbGl4IFBhbG1lbiA8ZmVsaXhAcGFsbWVuLWl0LmRlPoiWBBMWCgA+
+FiEEaTYT1Vu/SDeyEjrMVK3gBph58jEFAmLpFsYCGwMFCQWjmoAFCwkIBwMFFQoJ
+CAsFFgMCAQACHgUCF4AACgkQVK3gBph58jEqRwEAgV9y/uzpGOsIPF02eN/lEeCJ
+hXZBVCSbcRbKE6BEN5QA/3i7HLhG8mv7phOFYXDP8eBLB/IWiHQAlWDKXtNvodUD
+tCFGZWxpeCBQYWxtZW4gPHppcmlhc0BGcmVlQlNELm9yZz6IlgQTFgoAPhYhBGk2
+E9Vbv0g3shI6zFSt4AaYefIxBQJi6RhVAhsDBQkFo5qABQsJCAcDBRUKCQgLBRYD
+AgEAAh4FAheAAAoJEFSt4AaYefIxqHcBAP6Hk2x914LsGipwzGg+EgHmbba+whfO
+oBPd47VhNfMoAQD3fbwNGNMbk4xXi5iaKeY+Gi5avZxD6NIXxyaWnvpiDbg4BGLp
+FsYSCisGAQQBl1UBBQEBB0Aj2cXIYlGWkh5zkltu5UArxjR89jaPETet3lGVbS6v
+FQMBCAeIfgQYFgoAJhYhBGk2E9Vbv0g3shI6zFSt4AaYefIxBQJi6RbGAhsMBQkF
+o5qAAAoJEFSt4AaYefIx/vwA/3TtyV3GyGDZ5mFiRkBV5n69U4ycciD4uhwOf8fJ
+6AiUAPwP4Wa10mOLbnpx0/KI6vdUjjEdY8EbJ6k4r8Rkq8JeCw==
+=+9un
+-----END PGP PUBLIC KEY BLOCK-----
+....
diff --git a/documentation/static/pgpkeys/zlei.key b/documentation/static/pgpkeys/zlei.key
new file mode 100644
index 0000000000..ff3cf9708e
--- /dev/null
+++ b/documentation/static/pgpkeys/zlei.key
@@ -0,0 +1,87 @@
+// sh addkey.sh zlei 5A038D27FDE1A833 ;
+
+[.literal-block-margin]
+....
+pub rsa4096/5A038D27FDE1A833 2022-10-19 [C] [expires: 2025-10-19]
+ Key fingerprint = 8013 DC43 2366 74AB 6897 BC6C 5A03 8D27 FDE1 A833
+uid Zhenlei Huang <zlei.huang@gmail.com>
+uid Zhenlei Huang <zlei@FreeBSD.org>
+sub ed25519/C6249E8981B7745F 2022-10-30 [S] [expires: 2025-10-19]
+sub cv25519/2F2EF340460FCEAA 2022-10-30 [E] [expires: 2025-10-19]
+
+....
+
+[.literal-block-margin]
+....
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+UtTeuI3qMeXD7cThnQ==
+=hhwY
+-----END PGP PUBLIC KEY BLOCK-----
+....
diff --git a/documentation/themes/beastie/LICENSE b/documentation/themes/beastie/LICENSE
index e94c3e41c7..013f5e28fe 100644
--- a/documentation/themes/beastie/LICENSE
+++ b/documentation/themes/beastie/LICENSE
@@ -1,5 +1,5 @@
-Copyright (c) 2020-2022, The FreeBSD Project
-Copyright (c) 2020-2022, Sergio Carlavilla <carlavilla@FreeBSD.org>
+Copyright (c) 1994-2023, The FreeBSD Project
+Copyright (c) 2020-2023, Sergio Carlavilla <carlavilla@FreeBSD.org>
Redistribution and use in source and binary forms, with or without
diff --git a/documentation/themes/beastie/assets/js/copy-clipboard.js b/documentation/themes/beastie/assets/js/copy-clipboard.js
index 126f2bf8b1..7ee41cfef4 100644
--- a/documentation/themes/beastie/assets/js/copy-clipboard.js
+++ b/documentation/themes/beastie/assets/js/copy-clipboard.js
@@ -1,8 +1,8 @@
/*
BSD 2-Clause License
-Copyright (c) 2001-2022, The FreeBSD Documentation Project
-Copyright (c) 2021-2022, Sergio Carlavilla
+Copyright (c) 1994-2023, The FreeBSD Documentation Project
+Copyright (c) 2021-2023, Sergio Carlavilla
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/documentation/themes/beastie/assets/js/search.js b/documentation/themes/beastie/assets/js/search.js
index 0cf9a29bb2..12e9fc3b04 100644
--- a/documentation/themes/beastie/assets/js/search.js
+++ b/documentation/themes/beastie/assets/js/search.js
@@ -1,8 +1,8 @@
/*
BSD 2-Clause License
-Copyright (c) 2001-2022, The FreeBSD Documentation Project
-Copyright (c) 2021-2022, Sergio Carlavilla
+Copyright (c) 1994-2023, The FreeBSD Documentation Project
+Copyright (c) 2021-2023, Sergio Carlavilla
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/documentation/themes/beastie/assets/js/theme-chooser.js b/documentation/themes/beastie/assets/js/theme-chooser.js
index cc52d7084b..62b6235853 100644
--- a/documentation/themes/beastie/assets/js/theme-chooser.js
+++ b/documentation/themes/beastie/assets/js/theme-chooser.js
@@ -1,8 +1,8 @@
/*
BSD 2-Clause License
-Copyright (c) 2001-2022, The FreeBSD Documentation Project
-Copyright (c) 2021-2022, Sergio Carlavilla
+Copyright (c) 1994-2023, The FreeBSD Documentation Project
+Copyright (c) 2021-2023, Sergio Carlavilla
All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -41,9 +41,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
} else if (theme === "theme-high-contrast") {
setTheme('theme-high-contrast');
themeChooser.value = 'theme-high-contrast';
- } else {
+ } else if (theme === "theme-light") {
setTheme('theme-light');
themeChooser.value = 'theme-light';
+ } else {
+ setTheme('theme-system');
+ themeChooser.value = 'theme-system';
}
themeChooser.addEventListener('change', function() {
@@ -53,13 +56,24 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
setTheme('theme-dark');
} else if (theme === "theme-high-contrast") {
setTheme('theme-high-contrast');
- } else {
+ } else if (theme === "theme-light") {
setTheme('theme-light');
+ } else {
+ setTheme('theme-system');
}
});
function setTheme(themeName) {
localStorage.setItem('theme', themeName);
- document.documentElement.className = themeName;
+
+ if (themeName === 'theme-system') {
+ if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
+ document.documentElement.className = 'theme-dark';
+ } else {
+ document.documentElement.className = 'theme-light';
+ }
+ } else {
+ document.documentElement.className = themeName;
+ }
}
})();
diff --git a/documentation/themes/beastie/assets/styles/documentation.scss b/documentation/themes/beastie/assets/styles/documentation.scss
index 7826480db8..678e3c4cbc 100644
--- a/documentation/themes/beastie/assets/styles/documentation.scss
+++ b/documentation/themes/beastie/assets/styles/documentation.scss
@@ -1,6 +1,6 @@
/*
- * Copyright (c) 2001-2022, The FreeBSD Documentation Project
- * Copyright (c) 2021-2022, Sergio Carlavilla <carlavilla@FreeBSD.org>
+ * Copyright (c) 1994-2023, The FreeBSD Documentation Project
+ * Copyright (c) 2021-2023, Sergio Carlavilla <carlavilla@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -26,7 +26,7 @@
*
*/
-.articles-books-list {
+.documents-list {
list-style: none;
padding-left: 10px;
@@ -47,11 +47,10 @@
.main-wrapper-article {
display: flex;
- margin-top: var(--header-height);
justify-content: center;
margin-left: auto;
margin-right: auto;
- max-width: 1440px;
+ max-width: var(--max-width);
width: 100%;
.article {
@@ -65,16 +64,19 @@
padding-left: 1.5rem;
padding-right: 1.5rem;
transition: .2s ease-in-out;
+
+ h1 {
+ margin: .8rem 0;
+ }
}
}
.main-wrapper-book {
display: flex;
- margin-top: var(--header-height);
justify-content: center;
margin-left: auto;
margin-right: auto;
- max-width: 1440px;
+ max-width: var(--max-width);
width: 100%;
.book-menu {
@@ -99,6 +101,7 @@
}
#search-book {
+ margin-top: 1.5rem;
margin-bottom: .75rem;
border: 1px solid #CCC;
border-radius: 4px;
@@ -135,7 +138,7 @@
#MenuContents {
position: sticky;
overflow: auto;
- max-height: calc(90vh);
+ max-height: calc(100vh - 8rem);
line-height: 2;
ul {
@@ -171,7 +174,7 @@
padding: var(--documentation-padding);
width: 90vw;
min-width: 20rem;
- max-width: 1440px;
+ max-width: var(--max-width);
padding-left: 1.5rem;
padding-right: 1.5rem;
transition-duration: 0.2s;
diff --git a/documentation/themes/beastie/assets/styles/footer.scss b/documentation/themes/beastie/assets/styles/footer.scss
index aece947208..dca2960eb9 100644
--- a/documentation/themes/beastie/assets/styles/footer.scss
+++ b/documentation/themes/beastie/assets/styles/footer.scss
@@ -1,6 +1,6 @@
/*
- * Copyright (c) 2001-2022, The FreeBSD Documentation Project
- * Copyright (c) 2021-2022, Sergio Carlavilla <carlavilla@FreeBSD.org>
+ * Copyright (c) 1994-2023, The FreeBSD Documentation Project
+ * Copyright (c) 2021-2023, Sergio Carlavilla <carlavilla@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -27,159 +27,161 @@
*/
footer {
- display: flex;
- flex-flow: row wrap;
- padding: 30px 20px 20px 20px;
+ margin-top: 1rem;
+ padding: 1rem;
color: var(--global-font-color);
- background-color: var(--footer-background);
- border-top: 1px solid var(--footer-border-color);
- align-items: center;
- justify-content: center;
+ background-color: var(--footer-background-color);
+}
- .container {
- display: flex;
- max-width: 1440px;
- flex-flow: row wrap;
- }
+.footer-container {
+ display: grid;
+ gap: 1rem;
+ grid-template-columns: 1fr;
+ grid-template-areas:
+ "logo"
+ "about"
+ "documentation"
+ "community"
+ "legal"
+ "copyright";
+ max-width: var(--max-width);
+ margin-left: auto;
+ margin-right: auto;
+}
- > * {
- flex: 1 100%;
- }
+.logo-column {
+ grid-area: logo;
+}
- .footer-project-language {
- margin-right: 1.25em;
- margin-bottom: 2em;
-
- h1 {
- font-weight: bolder;
- font-size: 1.5rem;
- }
-
- .options-container {
- display: flex;
- align-items: center;
-
- .theme-container {
- display: none;
- margin-left: 2rem;
-
- select {
- border: 1px solid #CCC;
- border-radius: 4px;
- box-sizing: border-box;
- background-color: #FCFCFD;
- color: #444;
- }
- }
-
- .language-container {
- display: flex;
- align-items: center;
-
- a {
- display: flex;
- align-items: center;
- text-decoration: none;
- color: var(--global-font-color);
- border-radius: 1px;
- padding: .3rem;
-
- img {
- display: inline-flex;
- padding-right: 10px;
- align-items: center;
- justify-content: center;
- height: 1.5rem;
- width: 1.5rem;
- }
- }
- }
-
- }
+.about-column {
+ grid-area: about;
+}
- }
+.community-column {
+ grid-area: community;
+}
- .footer-nav {
- display: flex;
- list-style: none;
- margin: 0;
- padding: 0;
-
- > * {
- flex: 1 50%;
- margin-right: 1.25em;
- }
-
- .title {
- font-weight: bolder;
- font-size: 15px;
- border-bottom: 1px solid var(--white);
- }
-
- h2 {
- border: none !important;
- }
-
- ul {
- list-style: none;
- padding-left: 0;
-
- li {
- line-height: 2em;
-
- a {
- text-decoration: none;
- color: var(--global-font-color);
- }
- }
- }
- }
+.documentation-column {
+ grid-area: documentation;
+}
- .footer-nav > li {
- margin-bottom: 2rem;
- }
+.legal-column {
+ grid-area: legal;
+}
- .copyright {
- display: flex;
- flex-wrap: wrap;
- width: 100%;
- color: var(--global-font-color);
-
- .love {
- display: flex;
- align-items: center;
- font-weight: bolder;
-
- .heart {
- color: red;
- }
- }
- }
+.copyright-column {
+ grid-area: copyright;
+ padding-top: 1rem;
+ border-top: 1px solid #E5E7EB;
+ line-height: 1rem;
+ font-size: .8rem;
+}
+.column-title {
+ margin-top: 0;
+ font-size: inherit;
+ border-bottom: none;
}
-@media screen and (min-width: 24rem) {
- .copyright .love {
- margin-left: auto;
- }
+.column-elements-container {
+ margin: .5rem 0;
+ padding: 0;
+ list-style: none;
+}
+
+.column-elements-container li {
+ margin-top: .7rem;
+}
+
+.column-element {
+ text-decoration: none;
+ line-height: 2rem;
+ color: inherit;
+ font-size: inherit;
+}
+
+.heart {
+ font-size: 1.2rem;
+ color: #E38582;
+}
+
+.heart:hover {
+ color: #D1332E;
+}
+
+.options-container {
+ display: flex;
+ align-items: center;
+}
+
+.theme-container {
+ display: none;
+ margin-left: 2rem;
+}
+
+.theme-container select {
+ border: 1px solid #CCC;
+ border-radius: 4px;
+ box-sizing: border-box;
+ background-color: #FCFCFD;
+ color: #444;
+}
+
+.language-container {
+ display: flex;
+ align-items: center;
}
-@media screen and (min-width: 40rem) {
- .footer-project-language {
- flex: 1 0px;
+.language-container a {
+ display: flex;
+ align-items: center;
+ text-decoration: none;
+ color: var(--global-font-color);
+ border-radius: 1px;
+ padding: .3rem;
+}
+
+.language-container a img {
+ display: inline-flex;
+ padding-right: 10px;
+ align-items: center;
+ justify-content: center;
+ height: 1.5rem;
+ width: 1.5rem;
+}
+
+@media screen and (min-width: 450px) {
+ .footer-container {
+ gap: 2rem;
+ grid-template-columns: 1fr 1fr;
+ grid-template-areas:
+ "logo logo"
+ "about community"
+ "documentation legal"
+ "copyright copyright";
}
+}
- .footer-nav > * {
- flex: 1;
+@media screen and (min-width: 900px) {
+ footer {
+ padding: 2rem;
}
- .footer-nav {
- flex: 2 0px;
+ .footer-container {
+ grid-template-columns: 1.5fr 1fr 1fr 1fr 1fr;
+ grid-template-areas:
+ "logo about documentation community legal"
+ "copyright copyright copyright copyright copyright";
+ gap: 1rem;
}
}
-@media screen and (max-width: 41rem) {
- .footer-nav {
- display: block !important;
+@media screen and (min-width: 1451px) {
+ footer {
+ padding: 2rem 5rem;
+ }
+
+ .footer-container {
+ gap: 2rem;
}
}
diff --git a/documentation/themes/beastie/assets/styles/global.scss b/documentation/themes/beastie/assets/styles/global.scss
index c6e2bbaf6d..98881886be 100644
--- a/documentation/themes/beastie/assets/styles/global.scss
+++ b/documentation/themes/beastie/assets/styles/global.scss
@@ -1,6 +1,6 @@
/*
- * Copyright (c) 2001-2022, The FreeBSD Documentation Project
- * Copyright (c) 2021-2022, Sergio Carlavilla <carlavilla@FreeBSD.org>
+ * Copyright (c) 1994-2023, The FreeBSD Documentation Project
+ * Copyright (c) 2021-2023, Sergio Carlavilla <carlavilla@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -38,7 +38,8 @@ html {
}
}
-html, body {
+html,
+body {
text-rendering: optimizeLegibility;
line-height: 1.5;
}
@@ -60,20 +61,13 @@ body {
.main-wrapper {
display: flex;
flex-direction: column;
- margin-top: var(--header-height);
justify-content: center;
- margin-left: auto;
- margin-right: auto;
- max-width: 1440px;
+ margin: 0 auto;
+ width: 100%;
+ max-width: var(--max-width);
transition: padding .15s;
background-color: var(--global-background-color);
- .article {
- .paragraph {
- padding-left: .5rem;
- }
- }
-
.welcome-container {
display: flex;
width: 100%;
@@ -90,7 +84,7 @@ body {
h2 {
margin: 0;
border-bottom: 0px;
- margin-left: auto;
+ margin-left: 10%;
}
a {
@@ -112,10 +106,11 @@ body {
width: 100%;
background-color: var(--global-background-color);
justify-content: center;
+ border: none;
input {
display: block;
- width: 50%;
+ width: 80%;
padding: 10px 20px;
border: 1px solid #CCC;
border-radius: 4px;
@@ -128,52 +123,46 @@ body {
}
.cards-container {
- display: flex;
- flex-direction: column;
- justify-content: center;
- width: 100%;
+ display: grid;
+ grid-gap: 1rem;
+ margin: 0 auto;
margin-top: 3rem;
margin-bottom: 3rem;
+ padding-right: 10%;
+ padding-left: 10%;
- .row {
- display: flex;
- flex-direction: row;
- justify-content: center;
- width: 100%;
- margin-bottom: 2rem;
+ .card {
+ padding: 1rem;
+ border: 1px solid var(--card-border-color);
+ background-color: var(--card-background-color);
- .card {
+ a {
display: flex;
- flex: 280px 0;
- margin-left: 16px;
- padding: 24px;
- border: 1px solid var(--card-border-color);
- background-color: var(--card-background-color);
-
- a {
- display: flex;
- flex-direction: column;
- text-decoration: none;
-
- h5 {
- color: var(--global-font-color);
- font-weight: 700;
- font-size: 22px;
- margin: 0px 0px 8px 0px;
- border-bottom: 0px;
- }
+ flex-direction: column;
+ text-decoration: none;
+
+ h5 {
+ color: var(--global-font-color);
+ font-weight: 700;
+ font-size: 22px;
+ margin: 0px 0px 8px 0px;
+ border-bottom: 0px;
+ }
- p {
- color: var(--global-font-color);
- font-size: 18px;
- margin: 0px;
- margin-top: auto;
- text-align: inherit;
- }
+ p {
+ color: var(--global-font-color);
+ font-size: 18px;
+ margin: 0px;
+ margin-top: auto;
+ text-align: inherit;
}
}
}
}
+
+ .document {
+ padding: var(--documentation-padding);
+ }
}
ul.language-list {
@@ -197,72 +186,31 @@ ul.language-list {
}
}
-@media (max-width: 55em) {
+@media (min-width: 600px) {
.main-wrapper {
- padding: 0rem 1rem 2rem 1rem;
-
.welcome-container {
- margin-bottom: 2.5rem;
-
- form {
- input {
- width: 100%;
- background-color: var(--white);
+ .title-language-container {
+ h2 {
+ margin-left: auto;
}
}
- }
-
- .cards-container {
- display: block;
- width: 100%;
- margin: 0;
- padding: 0;
-
- .row {
- display: block;
- width: 100%;
-
- .card {
- display: block;
- width: 100%;
- margin: 0px;
- margin-bottom: 2rem;
- padding: 0px;
-
- a {
- display: flex;
- padding: 20px;
- min-height: 100px;
- }
+ form {
+ input {
+ width: 50%;
}
}
}
}
-}
-
-@media (min-width: 1200px) {
- .main-wrapper {
- .cards-container {
- .row {
- .card {
- width: 33.3%;
- }
- }
- }
+ .cards-container {
+ grid-template-columns: repeat(2, 1fr);
}
}
-@media (min-width: 768px) {
- .main-wrapper {
- .cards-container {
- .row {
- .card {
- width: 50%;
- }
- }
- }
+@media (min-width: 900px) {
+ .cards-container {
+ grid-template-columns: repeat(3, 1fr);
}
}
@@ -278,6 +226,7 @@ h4,
h5,
h6 {
margin: 0;
+ padding-bottom: .3rem;
}
h1,
@@ -302,6 +251,7 @@ h2 {
h3 {
font-size: var(--size-550);
+ padding-top: .8rem;
}
h4 {
@@ -316,59 +266,40 @@ h6 {
font-size: var(--size-300);
}
-h2,
-h3,
-h4,
-h5,
-h6 {
- border-bottom: 1px solid var(--lines-color);
-}
+h2>.anchor,
+h3>.anchor,
+h4>.anchor,
+h5>.anchor,
+h6>.anchor {
+ text-decoration: none;
-h1 .anchor,
-h2 .anchor,
-h3 .anchor,
-h4 .anchor,
-h5 .anchor,
-h6 .anchor,
-h1 .link,
-h2 .link,
-h3 .link,
-h4 .link,
-h5 .link,
-h6 .link {
- text-decoration: none !important;
- color: var(--global-font-color);
+ &:hover {
+ text-decoration: none;
+ }
}
-h1 .anchor,
-h2 .anchor,
-h3 .anchor,
-h4 .anchor,
-h5 .anchor,
-h6 .anchor {
+h2>.anchor::before,
+h3>.anchor::before,
+h4>.anchor::before,
+h5>.anchor::before,
+h6>.anchor::before {
visibility: hidden;
- font-weight: normal;
- margin-right: 5px;
+ margin-left: .3rem;
+ content: "#";
+ color: var(--global-font-color);
}
-h1 .anchor::before,
-h2 .anchor::before,
-h3 .anchor::before,
-h4 .anchor::before,
-h5 .anchor::before,
-h6 .anchor::before {
- content: "\00a7";
-}
+h2,
+h3,
+h4,
+h5,
+h6 {
+ border-bottom: 1px solid var(--lines-color);
-h1:hover .anchor,
-h2:hover .anchor,
-h3:hover .anchor,
-h4:hover .anchor,
-h5:hover .anchor,
-h6:hover .anchor {
- visibility: visible;
- font-weight: normal;
- margin-right: 5px;
+ &:hover .anchor::before {
+ visibility: visible;
+ transition: visibility 0s easy 0s;
+ }
}
hr {
@@ -424,7 +355,10 @@ p {
text-justify: inter-word;
}
-b, dt, strong, th {
+b,
+dt,
+strong,
+th {
font-weight: bolder;
}
@@ -477,9 +411,11 @@ blockquote {
.colist td {
padding-top: 4px;
padding-bottom: 4px;
+ vertical-align: top;
}
-.colist tr td b, .programlisting b {
+.colist tr td b,
+.programlisting b {
display: none;
}
@@ -523,17 +459,20 @@ table.tableblock {
padding: .5em .625em .625em;
font-size: inherit;
border-width: 0 1px 1px 0;
+ vertical-align: top;
}
td.icon {
border: none;
}
- td:first-of-type, th:first-of-type {
+ td:first-of-type,
+ th:first-of-type {
border-left: none;
}
- td:last-of-type, th:last-of-type {
+ td:last-of-type,
+ th:last-of-type {
border-right: none;
}
}
@@ -580,27 +519,27 @@ table.stretch {
}
.icon-note::before {
- content:"\f05a";
+ content: "\f05a";
color: var(--admonition-note-color);
}
.icon-tip::before {
- content:"\f0eb";
+ content: "\f0eb";
color: var(--admonition-tip-color)
}
.icon-warning::before {
- content:"\f071";
+ content: "\f071";
color: var(--admonition-warning-color);
}
.icon-caution::before {
- content:"\f06d";
+ content: "\f06d";
color: var(--admonition-caution-color);
}
.icon-important::before {
- content:"\f06a";
+ content: "\f06a";
color: var(--admonition-important-color);
}
}
@@ -657,7 +596,8 @@ table.stretch {
}
/* Example */
-.example, .exampleblock {
+.example,
+.exampleblock {
border-left: 5px solid var(--example-block-color);
padding: 1rem;
background-color: var(--example-block-background-color);
@@ -674,7 +614,7 @@ table.stretch {
.content {
.literalblock {
- .content{
+ .content {
background: #fefde6 !important;
border: none !important;
color: var(--global-font-color);
@@ -695,8 +635,8 @@ table.stretch {
/* Misc */
.fa {
- font-family: FontAwesome;
- font-style: normal;
+ font-family: FontAwesome;
+ font-style: normal;
}
.listingblock {
@@ -704,14 +644,37 @@ table.stretch {
position: relative;
}
+.listingblock .title {
+ position: absolute;
+ top: -1em;
+ left: 1em;
+}
+
.highlight {
- padding-top: 1.5rem;
- padding-bottom: 1.5rem;
+ padding: 1.5em 2em;
+
+ code {
+ font-size: 0.75rem;
+ padding: 0;
+ border-radius: inherit;
+ background-color: transparent;
+ color: inherit;
+ }
+
+ &:hover code::before {
+ content: attr(data-lang);
+ position: absolute;
+ top: 0.5em;
+ right: 3em;
+ }
}
code {
font-family: "DejaVu Sans Mono", Menlo, Consolas, Monaco, Liberation Mono, Lucida Console, monospace;
- font-size: 0.75rem;
+ padding: .12rem .20rem;
+ border-radius: .25rem;
+ background-color: var(--pre-background-color);
+ color: var(--pre-font-color);
}
.filename {
@@ -729,13 +692,13 @@ details {
kbd {
font-family: "DejaVu Sans", "DejaVu Sans Bold";
display: inline-block;
- color: rgba(0,0,0,.8);
+ color: rgba(0, 0, 0, .8);
font-size: .65em;
line-height: 1.45;
background-color: #F7F7F7;
border: 1px solid #ccc;
border-radius: 3px;
- box-shadow: 0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #FFF inset;
+ box-shadow: 0 1px 0 rgba(0, 0, 0, .2), 0 0 0 .1em #FFF inset;
margin: 0 .15em;
padding: .2em .5em;
vertical-align: middle;
diff --git a/documentation/themes/beastie/assets/styles/header.scss b/documentation/themes/beastie/assets/styles/header.scss
index 04c953103e..6f7461c8c0 100644
--- a/documentation/themes/beastie/assets/styles/header.scss
+++ b/documentation/themes/beastie/assets/styles/header.scss
@@ -1,6 +1,6 @@
/*
- * Copyright (c) 2001-2022, The FreeBSD Documentation Project
- * Copyright (c) 2021-2022, Sergio Carlavilla <carlavilla@FreeBSD.org>
+ * Copyright (c) 1994-2023, The FreeBSD Documentation Project
+ * Copyright (c) 2021-2023, Sergio Carlavilla <carlavilla@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -27,147 +27,322 @@
*/
header {
- position: fixed;
+ position: sticky;
+ top: 0;
+ z-index: 9999;
+ padding: .5rem 1rem;
background-color: var(--header-background);
- box-shadow: 1px 1px 4px 0 rgba(0,0,0,.1);
+}
+
+.header-container {
+ display: flex;
width: 100%;
- z-index: 9999;
+ max-width: var(--max-width);
+ margin-left: auto;
+ margin-right: auto;
+ align-items: center;
+}
- nav {
- display: block;
- max-width: 1440px;
- width: 100%;
- margin-left: auto;
- margin-right: auto;
- }
+.logo-menu-bars-container {
+ display: flex;
+ align-items: center;
+}
- ul {
- margin: 0;
- padding: 0;
- list-style: none;
- overflow: hidden;
- background-color: var(--header-background);
+.logo {
+ display: flex;
+ align-items: center;
+ margin-right: 1rem;
+}
- li {
- list-style: none;
+header nav {
+ margin-left: 0;
+ margin-right: 0;
+}
- a {
- display: block;
- padding: 20px 20px;
- border-right: 1px solid var(--header-background);
- text-decoration: none;
- color: var(--header-font-color);
- font-weight: bolder;
- }
- }
- }
+header ul {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ overflow: hidden;
+}
- .logo {
- display: block;
- float: left;
- font-size: 2em;
- padding: 10px 20px;
- padding-bottom: 0px;
- text-decoration: none;
- }
+header ul li {
+ list-style: none;
+}
- .menu {
- clear: both;
- max-height: 0;
- transition: max-height .2s ease-out;
+.menu-bars {
+ display: none;
+ margin-left: auto;
+ color: var(--white);
+ cursor: pointer;
+}
- .first-element{
- border-top: 1px solid transparent;
- box-shadow: inset 0 1px 0 rgba(255,255,255,.1);
- }
- }
+input[type='checkbox'] {
+ display: none;
+}
- .menu-icon {
- cursor: pointer;
- display: inline-block;
- float: right;
- padding: 28px 20px;
- position: relative;
- user-select: none;
- margin-top: 5px;
-
- .navicon {
- background: var(--white);
- display: block;
- height: 2px;
- position: relative;
- transition: background .2s ease-out;
- width: 18px;
- }
- }
-}
-
-header li a:hover,
-header .menu-btn:hover {
- background-color: var(--header-background);
+.menu {
+ display: flex;
+ padding: 0;
+ margin: 0;
+}
+
+.menu-item {
+ display: flex;
+ margin-right: 1rem;
+ align-items: center;
+ color: var(--white) !important;
+ margin-top: 0px !important;
}
-header .menu-icon .navicon:before,
-header .menu-icon .navicon:after {
- background: var(--white);
- content: '';
- display: block;
- height: 100%;
+.menu-item a {
+ padding: 1rem 0;
+ color: inherit;
+}
+
+.menu-item a,
+.donate a {
+ text-decoration: none;
+ font-weight: 600;
+}
+
+.menu-item a:hover,
+.donate a:hover {
+ text-decoration: none;
+}
+
+.donate a {
+ color: var(--black) !important;
+}
+
+.menu-item i {
+ margin-left: .1rem;
+}
+
+.sub-menu {
+ visibility: hidden;
position: absolute;
- transition: all .2s ease-out;
- width: 100%;
+ top: 55px;
+ padding: 1rem .75rem;
+ min-width: 250px;
+ background-color: var(--white);
+ border-radius: .4rem;
+ color: #444;
+ border: 1px solid #CDCDCD;
+ z-index: 999;
}
-header .menu-icon .navicon:before {
- top: 5px;
+.sub-menu:hover {
+ visibility: visible;
}
-header .menu-icon .navicon:after {
- top: -5px;
+.menu-item a:hover+.sub-menu {
+ visibility: visible;
}
-header .menu-btn {
- display: none;
+.sub-menu li {
+ margin-top: 0;
+ padding: .75rem .6rem;
}
-header .menu-btn:checked ~ .menu {
- max-height: 300px;
+.sub-menu .title {
+ border-bottom: 1px solid #E5E7EB;
}
-header .menu-btn:checked ~ .menu-icon .navicon {
- background: transparent;
+.sub-menu li a {
+ font-weight: normal !important;
}
-header .menu-btn:checked ~ .menu-icon .navicon:before {
- transform: rotate(-45deg);
+.sub-menu .title a {
+ font-weight: bolder !important;
}
-header .menu-btn:checked ~ .menu-icon .navicon:after {
- transform: rotate(45deg);
+.search-donate-container {
+ display: flex;
+ align-items: center;
+ margin-top: 0px;
+ margin-left: auto;
}
-header .menu-btn:checked ~ .menu-icon:not(.steps) .navicon:before,
-header .menu-btn:checked ~ .menu-icon:not(.steps) .navicon:after {
- top: 0;
+.search {
+ display: flex;
+ border-radius: .4rem;
+ background-color: var(--white);
+ border: 1px solid var(--white);
+ margin-top: 0px;
+}
+
+.search input[type='text'] {
+ display: inline-block;
+ width: 100%;
+ padding: .3rem .8rem;
+ border: none;
+ border-radius: .4rem;
+ appearance: none;
+ outline: none;
+ background-color: var(--white);
+ color: var(--black);
+}
+
+.search button {
+ background-color: var(--white);
+ border: none;
+ border-radius: .4rem;
+}
+
+.search button i {
+ color: var(--black);
+}
+
+.donate {
+ margin-left: .5rem;
}
-@media (min-width: 55em) {
- header li {
- float: left;
- list-style: none;
+.donate a {
+ display: inline-block;
+ padding: .5rem 1rem;
+ background-color: var(--white);
+ border-radius: .4rem;
+}
+
+.donate a .heart,
+.heart .heart {
+ font-size: 1.2rem;
+ color: #E38582;
+}
+
+.donate:hover a .heart,
+.heart:hover .heart {
+ color: #D1332E;
+}
+
+@media screen and (max-width: 1100px) {
+ .header-container {
+ flex-direction: column;
}
- header li a {
- padding: 20px 30px;
+ .logo-menu-bars-container {
+ width: 100%;
+ padding: .5rem 0;
}
- header .menu {
- clear: none;
- float: right;
- max-height: none;
+ nav {
+ width: 100%;
+ margin: 0;
+ padding: 0;
+ }
+
+ .menu-bars {
+ display: block;
+ }
+
+ .menu {
+ display: none;
+ width: 100%;
+ }
+
+ #menu-bars:checked~nav .menu {
+ display: block !important;
+ }
+
+ .menu-item {
+ flex-direction: column;
+ width: 100%;
+ margin-right: 0px;
+ border-top: 1px solid var(--white);
+ cursor: pointer;
+ }
+
+ .menu-item a {
+ width: 100%;
+ }
+
+ .menu-item a:hover+.sub-menu {
+ visibility: visible;
+ }
+
+ .menu-item-description {
+ display: flex;
+ width: 100%;
+ cursor: pointer;
+ }
+
+ .menu-item-description i {
+ margin-left: auto;
+ }
+
+ .sub-menu {
+ display: none;
+ flex-direction: column;
+ width: 100%;
+ padding: 0px;
+ position: static;
+ visibility: visible;
+ border: none;
+ background-color: inherit;
+ color: inherit;
+ box-shadow: inherit;
}
- header .menu-icon {
+ .sub-menu .title {
display: none;
+ border-bottom: none;
+ }
+
+ .sub-menu li {
+ padding-left: 0px;
+ padding-right: 0px;
+ }
+
+ #about:checked~.sub-menu,
+ #download:checked~.sub-menu,
+ #documentation:checked~.sub-menu,
+ #community:checked~.sub-menu {
+ display: flex;
+ }
+
+ .search-donate-container {
+ display: none;
+ }
+
+ .search {
+ width: 100%;
+ }
+
+ #menu-bars:checked~.search-donate-container {
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ margin-left: unset;
+ padding-top: .2rem;
+ }
+
+ .donate {
+ display: flex;
+ width: 100%;
+ margin-left: unset;
+ padding-top: .8rem;
+ }
+
+ .donate a {
+ width: 100%;
+ text-align: center;
+ }
+
+ .donate a .heart {
+ font-size: 1.2rem;
+ color: #D1332E;
+ }
+}
+
+@media screen and (min-width: 900px) {
+ header {
+ padding: .5rem 2rem;
+ }
+}
+
+@media screen and (min-width: 1451px) {
+ header {
+ padding: .5rem 5rem;
}
}
diff --git a/documentation/themes/beastie/assets/styles/main.scss b/documentation/themes/beastie/assets/styles/main.scss
index 8d3fdbb1c9..48db35239d 100644
--- a/documentation/themes/beastie/assets/styles/main.scss
+++ b/documentation/themes/beastie/assets/styles/main.scss
@@ -1,6 +1,6 @@
/*
- * Copyright (c) 2001-2022, The FreeBSD Documentation Project
- * Copyright (c) 2021-2022, Sergio Carlavilla <carlavilla@FreeBSD.org>
+ * Copyright (c) 1994-2023, The FreeBSD Documentation Project
+ * Copyright (c) 2021-2023, Sergio Carlavilla <carlavilla@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/documentation/themes/beastie/assets/styles/variables.scss b/documentation/themes/beastie/assets/styles/variables.scss
index 717f154347..16199befd6 100644
--- a/documentation/themes/beastie/assets/styles/variables.scss
+++ b/documentation/themes/beastie/assets/styles/variables.scss
@@ -1,6 +1,6 @@
/*
- * Copyright (c) 2001-2022, The FreeBSD Documentation Project
- * Copyright (c) 2021-2022, Sergio Carlavilla <carlavilla@FreeBSD.org>
+ * Copyright (c) 1994-2023, The FreeBSD Documentation Project
+ * Copyright (c) 2021-2023, Sergio Carlavilla <carlavilla@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -27,9 +27,10 @@
*/
:root {
+ --max-width: 1450px;
--header-height: 4.5rem;
--documentation-padding: 0px 20px 20px 20px;
- --size-200: 0.50rem;
+
--size-300: 0.75rem;
--size-400: 1rem;
--size-500: 1.33rem;
@@ -37,24 +38,20 @@
--size-600: 1.77rem;
--size-700: 2.30rem;
--size-750: 2.40rem;
- --size-800: 3.15rem;
- --size-900: 4.2rem;
-
- --flow-space: var(--size-700);
}
.theme-light {
--white: #FFF;
--black: #000;
--global-font-color: #444;
- --header-background: #9F0E0F;
+ --header-background: #AB2B28;
--header-font-color: #FFF;
--global-background-color: #FFF;
--card-background-color: #F0F1F5;
--card-border-color: #F0F1F5;
--table-header-background-color: #F1F3F1;
--table-header-font-color: #444;
- --footer-background: #F0F1F5;
+ --footer-background-color: #F0F1F5;
--footer-border-color: #F0F1F5;
--lines-color: #DDD;
--links-color: #0645AD;
@@ -77,56 +74,57 @@
--example-block-color: #F1BB16;
--example-block-background-color: #FEF8E7;
--example-block-font-color: #444;
+
+ --footer-logo: "";
}
.theme-dark {
- --white: #FFF;
- --black: #000;
- --global-font-color: #EEEFF1;
- --header-background: #9F0E0F;
- --header-font-color: #EEEFF1;
- --global-background-color: #333333;
- --card-background-color: #272727;
- --card-border-color: #272727;
- --table-header-background-color: #F1F3F1;
- --table-header-font-color: #444;
- --footer-background: #2B2B2B;
- --footer-border-color: #2B2B2B;
- --lines-color: #4d4d4d;
- --links-color: #BAD7FF;
- --pre-background-color: #272727;
- --pre-font-color: #EEEFF1;
- --copy-clipboard-tooltip-background-color: #43453B;
+ --white: #FFF;
+ --black: #000;
+ --global-font-color: #EEEFF1;
+ --header-background: #AB2B28;
+ --header-font-color: #EEEFF1;
+ --global-background-color: #333333;
+ --card-background-color: #272727;
+ --card-border-color: #272727;
+ --table-header-background-color: #F1F3F1;
+ --table-header-font-color: #444;
+ --footer-background-color: #2B2B2B;
+ --footer-border-color: #2B2B2B;
+ --lines-color: #4d4d4d;
+ --links-color: #BAD7FF;
+ --pre-background-color: #272727;
+ --pre-font-color: #EEEFF1;
+ --copy-clipboard-tooltip-background-color: #43453B;
- --admonition-font-color: #444;
- --admonition-links-color: #1A79FF;
- --admonition-note-color: #19407C;
- --admonition-note-background-color: #EAF1FB;
- --admonition-warning-color: #BF6900;
- --admonition-warning-background-color: #FFF4E6;
- --admonition-important-color: #BF0000;
- --admonition-important-background-color: #FFE6E6;
- --admonition-caution-color: #BF3400;
- --admonition-caution-background-color: #FFECE6;
- --admonition-tip-color: #43B929;
- --admonition-tip-background-color: #EDFAEA;
- --example-block-color: #F1BB16;
- --example-block-background-color: #FEF8E7;
- --example-block-font-color: #272727;
-}
+ --admonition-font-color: #444;
+ --admonition-links-color: #1A79FF;
+ --admonition-note-color: #19407C;
+ --admonition-note-background-color: #EAF1FB;
+ --admonition-warning-color: #BF6900;
+ --admonition-warning-background-color: #FFF4E6;
+ --admonition-important-color: #BF0000;
+ --admonition-important-background-color: #FFE6E6;
+ --admonition-caution-color: #BF3400;
+ --admonition-caution-background-color: #FFECE6;
+ --admonition-tip-color: #43B929;
+ --admonition-tip-background-color: #EDFAEA;
+ --example-block-color: #F1BB16;
+ --example-block-background-color: #FEF8E7;
+ --example-block-font-color: #272727;}
.theme-high-contrast {
--white: #FFF;
--black: #000;
--global-font-color: #FFF;
- --header-background: #9F0E0F;
+ --header-background: #AB2B28;
--header-font-color: #FFF;
--global-background-color: #000;
--card-background-color: #000;
--card-border-color: #FFF;
--table-header-background-color: #FFF;
--table-header-font-color: #000;
- --footer-background: #000;
+ --footer-background-color: #000;
--footer-border-color: #FFF;
--lines-color: #FFF;
--links-color: #9F0E0F;
diff --git a/documentation/themes/beastie/i18n/bn-bd.toml b/documentation/themes/beastie/i18n/bn-bd.toml
index 1e8a387b99..86a78009ba 100644
--- a/documentation/themes/beastie/i18n/bn-bd.toml
+++ b/documentation/themes/beastie/i18n/bn-bd.toml
@@ -115,6 +115,8 @@ other = "FreeBSD Manual Pages"
# ---------------------------------------------------
# Footer
# ---------------------------------------------------
+[system]
+other = "System"
[light]
other = "Light"
@@ -226,6 +228,15 @@ other = "Adobe, Acrobat, Acrobat Reader, Flash and PostScript are either registe
[apple]
other = "Apple, AirPort, FireWire, iMac, iPhone, iPad, Mac, Macintosh, Mac OS, Quicktime, and TrueType are trademarks of Apple Inc., registered in the U.S. and other countries."
+[git]
+other = "Git and the Git logo are either registered trademarks or trademarks of Software Freedom Conservancy, Inc., corporate home of the Git Project, in the United States and/or other countries."
+
+[github]
+other = "GitHub is a trademark of GitHub Inc., registered in the United States and other countries."
+
+[gitlab]
+other = "GITLAB is a trademark of GitLab Inc. in the United States and other countries and regions."
+
[intel]
other = "Intel, Celeron, Centrino, Core, EtherExpress, i386, i486, Itanium, Pentium, and Xeon are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries."
diff --git a/documentation/themes/beastie/i18n/da.toml b/documentation/themes/beastie/i18n/da.toml
index 1e8a387b99..edc3eb986b 100644
--- a/documentation/themes/beastie/i18n/da.toml
+++ b/documentation/themes/beastie/i18n/da.toml
@@ -115,6 +115,9 @@ other = "FreeBSD Manual Pages"
# ---------------------------------------------------
# Footer
# ---------------------------------------------------
+[system]
+other = "System"
+
[light]
other = "Light"
@@ -226,6 +229,15 @@ other = "Adobe, Acrobat, Acrobat Reader, Flash and PostScript are either registe
[apple]
other = "Apple, AirPort, FireWire, iMac, iPhone, iPad, Mac, Macintosh, Mac OS, Quicktime, and TrueType are trademarks of Apple Inc., registered in the U.S. and other countries."
+[git]
+other = "Git and the Git logo are either registered trademarks or trademarks of Software Freedom Conservancy, Inc., corporate home of the Git Project, in the United States and/or other countries."
+
+[github]
+other = "GitHub is a trademark of GitHub Inc., registered in the United States and other countries."
+
+[gitlab]
+other = "GITLAB is a trademark of GitLab Inc. in the United States and other countries and regions."
+
[intel]
other = "Intel, Celeron, Centrino, Core, EtherExpress, i386, i486, Itanium, Pentium, and Xeon are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries."
diff --git a/documentation/themes/beastie/i18n/de.toml b/documentation/themes/beastie/i18n/de.toml
index 649bca3856..68ba7e0f78 100644
--- a/documentation/themes/beastie/i18n/de.toml
+++ b/documentation/themes/beastie/i18n/de.toml
@@ -115,6 +115,9 @@ other = "FreeBSD Manual Pages"
# ---------------------------------------------------
# Footer
# ---------------------------------------------------
+[system]
+other = "System"
+
[light]
other = "Light"
@@ -226,6 +229,15 @@ other = "Adobe, Acrobat, Acrobat Reader und PostScript sind entweder eingetragen
[apple]
other = "Apple, FireWire, Mac, Macintosh, Mac OS, Quicktime und TrueType sind eingetragene Warenzeichen von Apple Computer, Inc., in den Vereinigten Staaten und anderen Ländern."
+[git]
+other = "Git and the Git logo are either registered trademarks or trademarks of Software Freedom Conservancy, Inc., corporate home of the Git Project, in the United States and/or other countries."
+
+[github]
+other = "GitHub is a trademark of GitHub Inc., registered in the United States and other countries."
+
+[gitlab]
+other = "GITLAB is a trademark of GitLab Inc. in the United States and other countries and regions."
+
[intel]
other = "Intel, Celeron, EtherExpress, i386, i486, Itanium, Pentium und Xeon sind Warenzeichen oder eingetragene Warenzeichen der Intel Corporation oder ihrer Gesellschaften in den Vereinigten Staaten und in anderen Ländern."
@@ -242,7 +254,7 @@ other = "Motif, OSF/1 und UNIX sind eingetragene Warenzeichen und IT DialTone un
other = "QUALCOMM und Eudora sind eingetragene Warenzeichen von QUALCOMM Incorporated."
[sparc]
-other = "Sparc, Sparc64, und UltraSPARC sind Warenzeichen von SPARC International, Inc in den Vereinigten Staaten und in anderen Ländern. Produkte, die das Warenzeichen SPARC tragen, basieren auf einer von Sun Microsystems, Inc. entwickelten Architektur."
+other = "Sparc, Sparc64, und UltraSPARC sind Warenzeichen von SPARC International, Inc in den Vereinigten Staaten und in anderen Ländern. Produkte, die das Warenzeichen SPARC tragen, basieren auf einer von Sun Microsystems, Inc. entwickelten Architektur."
[sun]
other = "Sun, Sun Microsystems, Java, Java Virtual Machine, JDK, JSP, JVM, Netra, Solaris, StarOffice und SunOS sind Warenzeichen oder eingetragene Warenzeichen von Sun Microsystems, Inc. in den Vereinigten Staaten und in anderen Ländern."
@@ -302,4 +314,4 @@ other = "XFree86 ist ein Warenzeichen von The XFree86 Project, Inc."
other = "This article was originally published in the January 2000 issue of <a class=\"link\" href=\"http://www.daemonnews.org/\">DaemonNews</a>. This version of the article may include updates from Matt and other authors to reflect changes in FreeBSD's VM implementation."
[general]
-other = "Viele Produktbezeichnungen von Herstellern und Verkäufern sind Warenzeichen. Soweit dem FreeBSD Project das Warenzeichen bekannt ist, werden die in diesem Dokument vorkommenden Bezeichnungen mit dem Symbol “™” oder dem Symbol “®” gekennzeichnet."
+other = "Viele Produktbezeichnungen von Herstellern und Verkäufern sind Warenzeichen. Soweit dem FreeBSD Project das Warenzeichen bekannt ist, werden die in diesem Dokument vorkommenden Bezeichnungen mit dem Symbol “™” oder dem Symbol “®” gekennzeichnet."
diff --git a/documentation/themes/beastie/i18n/el.toml b/documentation/themes/beastie/i18n/el.toml
index 1fdffc4fa8..16bc4035bd 100644
--- a/documentation/themes/beastie/i18n/el.toml
+++ b/documentation/themes/beastie/i18n/el.toml
@@ -8,103 +8,103 @@ other = "FreeBSD"
other = "The FreeBSD Project"
[freebsd-foundation]
-other = "The FreeBSD Foundation"
+other = "Το ίδρυμα FreeBSD"
[freebsd-documentation]
-other = "FreeBSD Documentation"
+other = "Τεκμηρίωση FreeBSD"
[freebsd-documentation-main-desc]
-other = "FreeBSD is an operating system used to power modern servers, desktops, and embedded platforms."
+other = "Το FreeBSD είναι ένα λειτουργικό σύστημα το οποίο χρησιμοποιείται από servers, desktops, και ενσωματωμένα συστήματα."
[global-search-placeholder]
-other = "Search in the articles, books and guides."
+other = "Αναζήτηση σε άρθρα, βιβλία και οδηγούς"
[toc]
-other = "Table of Contents"
+other = "Πίνακας περιεχομένων"
[resources]
-other = "Resources"
+other = "Πηγές"
[download-pdf]
-other = "Download PDF"
+other = "Λήψη PDF"
[edit-page]
-other = "Edit this page"
+other = "Τροποποίηση αυτής της σελίδας"
[trademarks]
-other = "trademarks"
+other = "Εμπορικά σύμβολα"
[books]
-other = "Books"
+other = "Βιβλία"
[articles]
-other = "Articles"
+other = "Άρθρα"
[choose-language]
-other = "Choose language"
+other = "Επιλογή γλώσσας"
[last-modified]
-other = "Last modified on"
+other = "Τελευταία τροποποίηση"
[by]
-other = "by"
+other = "από"
[search]
-other = "Search"
+other = "Αναζήτηση"
# ---------------------------------------------------
# Header
# ---------------------------------------------------
[documentation]
-other = "Documentation"
+other = "Τεκμηρίωση"
[community]
-other = "Community"
+other = "Κοινότητα"
# ---------------------------------------------------
# Main page
# ---------------------------------------------------
[getting-started]
-other = "Getting started"
+other = "Εισαγωγή"
[learn-basics]
-other = "Learn about FreeBSD basics"
+other = "Μάθετε τα βασικά σχετικά με το FreeBSD"
[download]
other = "Download"
[download-freebsd]
-other = "Download FreeBSD"
+other = "Λήψη του FreeBSD"
[handbook]
-other = "FreeBSD Handbook"
+other = "Εγχειρίδιο FreeBSD"
[handbook-desc]
-other = "A constantly evolving, comprehensive resource for FreeBSD users"
+other = "Μια συνεχώς εξελισσόμενη, περιεκτική πηγή για χρήστες του FreeBSD"
[porters-handbook]
other = "FreeBSD Porter's Handbook"
[porters-handbook-desc]
-other = "A complete reference about the FreeBSD ports system"
+other = "Ένας ολοκληρωμένος οδηγός για την συλλογή Ports του FreeBSD"
[faq]
other = "FreeBSD FAQ"
[faq-desc]
-other = "FreeBSD frequently Asked Questions (FAQ) for 13.X and 12.X"
+other = "Συχνές ερωτήσεις για το FreeBSD"
[fdp]
other = "Documentation Project Primer"
[fdp-desc]
-other = "A complete guide about how to start contributing to the documentation"
+other = "Ένας ολοκληρωμένος οδηγός για το πως να συνεισφέρετε στην τεκμηρίωση"
[books-list]
-other = "List of FreeBSD books"
+other = "Λίστα βιβλίων FreeBSD"
[articles-list]
-other = "List of FreeBSD articles"
+other = "Λίστα άρθρων FreeBSD"
[manual-pages]
other = "Manual pages"
@@ -115,6 +115,9 @@ other = "FreeBSD Manual Pages"
# ---------------------------------------------------
# Footer
# ---------------------------------------------------
+[system]
+other = "Σύστημα"
+
[light]
other = "Light"
@@ -122,31 +125,31 @@ other = "Light"
other = "Dark"
[high-contrast]
-other = "High contrast"
+other = "Υψηλή αντίθεση"
[previous-versions]
-other = "Previous versions"
+other = "Προηγούμενες εκδόσεις"
[4-4bsd-documents]
other = "4.4BSD Documents"
[about]
-other = "About"
+other = "Σχετικά"
[legal]
other = "Legal"
[donations]
-other = "Donations"
+other = "Δωρεές"
[legal-notices]
-other = "Legal notices"
+other = "Νομικές συστάσεις"
[made-with]
other = "Made with"
[by-freebsd-community]
-other = "by the FreeBSD Community"
+other = "από την κοινότητα FreeBSD"
[copyright]
other = "All rights reserved."
@@ -155,19 +158,19 @@ other = "All rights reserved."
# Articles page
# ---------------------------------------------------
[list-desc-articles]
-other = "Explore a comprehensive list of FreeBSD articles."
+other = "Εξερευνήστε μια αναλυτική λίστα άρθρων FreeBSD."
# ---------------------------------------------------
# Books page
# ---------------------------------------------------
[prev]
-other = "Prev"
+other = "Προηγούμενη"
[next]
-other = "Next"
+other = "Επόμενη"
[home]
-other = "Home"
+other = "Αρχική"
[split-html]
other = "Split HTML"
@@ -176,22 +179,22 @@ other = "Split HTML"
other = "Single HTML"
[book-chapters]
-other = "Book chapters"
+other = "Κεφάλαια βιβλίων"
[book-menu]
other = "Book menu"
[list-desc-books]
-other = "Explore a comprehensive list of FreeBSD books."
+other = "Εξερευνήστε μία αναλυτική λίστα βιβλίων FreeBSD."
# ---------------------------------------------------
# Languages page
# ---------------------------------------------------
[select-language]
-other = "Select a language"
+other = "Επιλογή γλώσσας"
[current-selection]
-other = "Current selection:"
+other = "Τρέχουσα επιλογή:"
# ---------------------------------------------------
# Copyright
@@ -203,7 +206,7 @@ other = "Το FreeBSD είναι ένα κατοχυρωμένο εμπορικ
other = "This article was written 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."
[coverity]
-other = "Η λέξη Coverity είναι ένα κατοχυρωμένο εμπορικό σύμβολο. Οι λέξεις ή φράσεις Coverity Extend, Coverity Prevent και Coverity Prevent SQS είναι εμπορικά σύμβολα της Coverity, Inc."
+other = "Η λέξη Coverity είναι ένα κατοχυρωμένο εμπορικό σύμβολο. Οι λέξεις ή φράσεις Coverity Extend, Coverity Prevent και Coverity Prevent SQS είναι εμπορικά σύμβολα της Coverity, Inc."
[ibm]
other = "Οι λέξεις ή φράσεις IBM, AIX, OS/2, PowerPC, PS/2, S/390, και ThinkPad είναι εμπορικά σύμβολα της International Business Machines Corporation στις Ηνωμένες Πολιτείες, άλλες χώρες, ή και στα δύο ταυτόχρονα."
@@ -226,6 +229,15 @@ other = "Οι λέξεις ή φράσεις Adobe, Acrobat, Acrobat Reader, κ
[apple]
other = "Οι λέξεις ή φράσεις Apple, AirPort, FireWire, Mac, Macintosh, Mac OS, Quicktime, και TrueType είναι εμπορικά σύμβολα της Apple Computer, Inc., κατοχυρωμένα στις Ηνωμένες Πολιτείες και σε άλλες χώρες."
+[git]
+other = "Git and the Git logo are either registered trademarks or trademarks of Software Freedom Conservancy, Inc., corporate home of the Git Project, in the United States and/or other countries."
+
+[github]
+other = "GitHub is a trademark of GitHub Inc., registered in the United States and other countries."
+
+[gitlab]
+other = "GITLAB is a trademark of GitLab Inc. in the United States and other countries and regions."
+
[intel]
other = "Οι λέξεις Intel, Celeron, EtherExpress, i386, i486, Itanium, Pentium, και Xeon είναι εμπορικά σύμβολα ή κατοχυρωμένα εμπορικά σύμβολα της Intel Corporation και των θυγατρικών της στις Ηνωμένες Πολιτείες και σε άλλες χώρες."
@@ -242,10 +254,10 @@ other = "Οι λέξεις Motif, OSF/1, και UNIX είναι κατοχυρω
other = "Οι λέξεις QUALCOMM και Eudora είναι κατοχυρωμένα εμπορικά σύμβολα της QUALCOMM Incorporated."
[sparc]
-other = "Οι λέξεις ή φράσεις SPARC, SPARC64, και UltraSPARC είναι εμπορικά σύμβολα της SPARC International, Inc. στις Ηνωμένες Πολιτείες και σε άλλες χώρες. Η SPARC International Inc. κατέχει όλα τα εμπορικά δικαιώματα των συμβόλων SPARC και επιτρέπει την ορθή χρήση τους από όλα τα μέλη της, κατόπιν σχετικής άδειας."
+other = "Οι λέξεις ή φράσεις SPARC, SPARC64, και UltraSPARC είναι εμπορικά σύμβολα της SPARC International, Inc. στις Ηνωμένες Πολιτείες και σε άλλες χώρες. Η SPARC International Inc. κατέχει όλα τα εμπορικά δικαιώματα των συμβόλων SPARC και επιτρέπει την ορθή χρήση τους από όλα τα μέλη της, κατόπιν σχετικής άδειας."
[sun]
-other = "Οι λέξεις ή φράσεις Sun, Sun Microsystems, Java, Java Virtual Machine, JDK, JRE, JSP, JVM, Netra, OpenJDK, Solaris, StarOffice, SunOS και VirtualBox είναι εμπορικά σύμβολα ή κατοχυρωμένα εμπορικά σύμβολα της Sun Microsystems, Inc. στις Ηνωμένες Πολιτείες και σε άλλες χώρες."
+other = "Οι λέξεις ή φράσεις Sun, Sun Microsystems, Java, Java Virtual Machine, JDK, JRE, JSP, JVM, Netra, OpenJDK, Solaris, StarOffice, SunOS και VirtualBox είναι εμπορικά σύμβολα ή κατοχυρωμένα εμπορικά σύμβολα της Sun Microsystems, Inc. στις Ηνωμένες Πολιτείες και σε άλλες χώρες."
[unix]
other = "Η λέξη UNIX είναι κατοχυρωμένο εμπορικό σύμβολο του Open Group στις Ηνωμένες Πολιτείες και σε άλλες χώρες."
@@ -299,7 +311,7 @@ other = "Οι λέξεις ή φράσεις Ogg Vorbis και Xiph.Org είνα
other = "Η λέξη XFree86 είναι ένα εμπορικό σύμβολο του The XFree86 Project, Inc."
[daemon-news]
-other = "This article was originally published in the January 2000 issue of <a class=\"link\" href=\"http://www.daemonnews.org/\">DaemonNews</a>. This version of the article may include updates from Matt and other authors to reflect changes in FreeBSD's VM implementation."
+other = "Αυτό το άρθρο δημοσιεύτηκε αρχικά στο τεύχος του Ιανουαρίου 2000 <a class=\"link\" href=\"http://www.daemonnews.org/\">DaemonNews</a>. Αυτή η έκδοση του άρθρου μπορεί να περιέχει ενημερώσεις από τον Matt και άλλους συγγραφείς, που αντικατοπτρίζουν τις αλλαγές στην υλοποίηση της εικονικοποίησης του FreeBSD."
[general]
other = "Πολλές από τις λέξεις ή φράσεις οι οποίες χρησιμοποιούνται από τους κατασκευαστές ή τους πωλητές τους για να διακρίνουν τα προϊόντα τους θεωρούνται εμπορικά σύμβολα. Όπου αυτές εμφανίζονται σε αυτό το κείμενο και για όσες από αυτές γνωρίζει η Ομάδα Ανάπτυξης του FreeBSD ότι είναι πιθανόν να είναι εμπορικά σύμβολα, θα δείτε ένα από τα σύμβολα: “™” ή “®”."
diff --git a/documentation/themes/beastie/i18n/en.toml b/documentation/themes/beastie/i18n/en.toml
index 1e8a387b99..1d56010387 100644
--- a/documentation/themes/beastie/i18n/en.toml
+++ b/documentation/themes/beastie/i18n/en.toml
@@ -52,6 +52,12 @@ other = "by"
[search]
other = "Search"
+[stale-warning-message]
+other = "This translation may be out of date. To help with the translations please access the"
+
+[translation-instance]
+other = "FreeBSD translations instance"
+
# ---------------------------------------------------
# Header
# ---------------------------------------------------
@@ -61,6 +67,84 @@ other = "Documentation"
[community]
other = "Community"
+[h-about]
+other = "About"
+
+[h-freebsd]
+other = "FreeBSD"
+
+[h-freebsd-foundation]
+other = "FreeBSD Foundation"
+
+[h-code-of-conduct]
+other = "Code of Conduct"
+
+[h-get-freebsd]
+other = "Get FreeBSD"
+
+[h-release-information]
+other = "Release Information"
+
+[h-release-engineering]
+other = "Release Engineering"
+
+[h-security-advisories]
+other = "Security Advisories"
+
+[h-documentation]
+other = "Documentation"
+
+[h-documentation-portal]
+other = "Documentation portal"
+
+[h-freebsd-handbook]
+other = "FreeBSD Handbook"
+
+[h-porter-handbook]
+other = "Porter's Handbook"
+
+[h-documentation-handbook]
+other = "Documentation Project Handbook"
+
+[h-manual-pages]
+other = "Manual pages"
+
+[h-presentation-and-papers]
+other = "Presentations and papers"
+
+[h-wiki]
+other = "Wiki"
+
+[h-books]
+other = "Books"
+
+[h-articles]
+other = "Articles"
+
+[h-community]
+other = "Community"
+
+[h-get-involved]
+other = "Get involved"
+
+[h-community-forum]
+other = "Forum"
+
+[h-mailing-lists]
+other = "Mailing lists"
+
+[h-irc-channels]
+other = "IRC Channels"
+
+[h-bug-tracker]
+other = "Bug Tracker"
+
+[h-support]
+other = "Support"
+
+[h-donate]
+other = "Donate"
+
# ---------------------------------------------------
# Main page
# ---------------------------------------------------
@@ -74,7 +158,7 @@ other = "Learn about FreeBSD basics"
other = "Download"
[download-freebsd]
-other = "Download FreeBSD"
+other = "Get FreeBSD"
[handbook]
other = "FreeBSD Handbook"
@@ -92,7 +176,7 @@ other = "A complete reference about the FreeBSD ports system"
other = "FreeBSD FAQ"
[faq-desc]
-other = "FreeBSD frequently Asked Questions (FAQ) for 13.X and 12.X"
+other = "Frequently Asked Questions for FreeBSD"
[fdp]
other = "Documentation Project Primer"
@@ -115,6 +199,9 @@ other = "FreeBSD Manual Pages"
# ---------------------------------------------------
# Footer
# ---------------------------------------------------
+[system]
+other = "System"
+
[light]
other = "Light"
@@ -124,33 +211,87 @@ other = "Dark"
[high-contrast]
other = "High contrast"
-[previous-versions]
+[f-about]
+other = "About"
+
+[f-freebsd]
+other = "FreeBSD"
+
+[f-freebsd-foundation]
+other = "FreeBSD Foundation"
+
+[f-get-freebsd]
+other = "Get FreeBSD"
+
+[f-code-of-conduct]
+other = "Code of Conduct"
+
+[f-security-advisories]
+other = "Security Advisories"
+
+[f-documentation]
+other = "Documentation"
+
+[f-documentation-portal]
+other = "Documentation portal"
+
+[f-manual-pages]
+other = "Manual pages"
+
+[f-presentation-and-papers]
+other = "Presentations and papers"
+
+[f-previous-versions]
other = "Previous versions"
-[4-4bsd-documents]
+[f-44bsd-documents]
other = "4.4BSD Documents"
-[about]
-other = "About"
+[f-wiki]
+other = "Wiki"
+
+[f-community]
+other = "Community"
+
+[f-get-involved]
+other = "Get involved"
+
+[f-community-forum]
+other = "Community forum"
+
+[f-mailing-lists]
+other = "Mailing lists"
+
+[f-irc-channels]
+other = "IRC Channels"
-[legal]
+[f-bug-tracker]
+other = "Bug Tracker"
+
+[f-legal]
other = "Legal"
-[donations]
+[f-donations]
other = "Donations"
-[legal-notices]
+[f-licensing]
+other = "Licensing"
+
+[f-privacy-policy]
+other = "Privacy Policy"
+
+[f-legal-notices]
other = "Legal notices"
-[made-with]
+[f-all-rights-reserved]
+other = "The FreeBSD Project. All rights reserved"
+
+[f-made-with]
other = "Made with"
-[by-freebsd-community]
+[f-by-freebsd-community]
other = "by the FreeBSD Community"
-[copyright]
-other = "All rights reserved."
-
# ---------------------------------------------------
# Articles page
# ---------------------------------------------------
@@ -226,6 +367,15 @@ other = "Adobe, Acrobat, Acrobat Reader, Flash and PostScript are either registe
[apple]
other = "Apple, AirPort, FireWire, iMac, iPhone, iPad, Mac, Macintosh, Mac OS, Quicktime, and TrueType are trademarks of Apple Inc., registered in the U.S. and other countries."
+[git]
+other = "Git and the Git logo are either registered trademarks or trademarks of Software Freedom Conservancy, Inc., corporate home of the Git Project, in the United States and/or other countries."
+
+[github]
+other = "GitHub is a trademark of GitHub Inc., registered in the United States and other countries."
+
+[gitlab]
+other = "GITLAB is a trademark of GitLab Inc. in the United States and other countries and regions."
+
[intel]
other = "Intel, Celeron, Centrino, Core, EtherExpress, i386, i486, Itanium, Pentium, and Xeon are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries."
diff --git a/documentation/themes/beastie/i18n/es.toml b/documentation/themes/beastie/i18n/es.toml
index 68784326b1..2330482edd 100644
--- a/documentation/themes/beastie/i18n/es.toml
+++ b/documentation/themes/beastie/i18n/es.toml
@@ -115,6 +115,9 @@ other = "Páginas del Manual de FreeBSD"
# ---------------------------------------------------
# Footer
# ---------------------------------------------------
+[system]
+other = "System"
+
[light]
other = "Claro"
@@ -226,6 +229,15 @@ other = "Adobe, Acrobat, Acrobat Reader, Flash y PostScript son marcas registrad
[apple]
other = "Apple, AirPort, FireWire, iMac, iPhone, iPad, Mac, Macintosh, Mac OS, Quicktime, y TrueType son marcas comerciales de Apple Inc., registradas en los Estados Unidos de América y otros países."
+[git]
+other = "Git and the Git logo are either registered trademarks or trademarks of Software Freedom Conservancy, Inc., corporate home of the Git Project, in the United States and/or other countries."
+
+[github]
+other = "GitHub is a trademark of GitHub Inc., registered in the United States and other countries."
+
+[gitlab]
+other = "GITLAB is a trademark of GitLab Inc. in the United States and other countries and regions."
+
[intel]
other = "Intel, Celeron, Centrino, Core, EtherExpress, i386, i486, Itanium, Pentium, y Xeon son marcas registradas de ntel Corporation o sus subsidiarias en los Estados Unidos de América y otros países."
@@ -299,7 +311,7 @@ other = "Ogg Vorbis y Xiph.Org son marcas comerciales de Xiph.Org."
other = "XFree86 es una marca comercial de The XFree86 Project, Inc."
[daemon-news]
-other = "Este artículo fue publicado originalmente en la edición de Enero de 2000 de <a class=\"link\" href=\"http://www.daemonnews.org/\">DaemonNews</a>. Esta versión del artículo podría incluir actualizaciones de Matt y otros autores para reflejar cambios en la implementación de memoria virtual de FreeBSD."
+other = "Este artículo fue publicado originalmente en la edición de Enero de 2000 de <a class=\"link\" href=\"http://www.daemonnews.org/\">DaemonNews</a>. Esta versión del artículo podría incluir actualizaciones de Matt y otros autores para reflejar cambios en la implementación de memoria virtual de FreeBSD."
[general]
other = "Muchos de los nombres usados por los fabricantes y vendedores para diferenciar sus productos son designados como marcas comerciales. Allí donde estos nombres aparezcan en este documento y el Proyecto FreeBSD fuera consciente de la alegación de marca comercial, los nombres tienen a continuación el símbolo “™” o “®”."
diff --git a/documentation/themes/beastie/i18n/fr.toml b/documentation/themes/beastie/i18n/fr.toml
index 5678dbd984..91a9b435b4 100644
--- a/documentation/themes/beastie/i18n/fr.toml
+++ b/documentation/themes/beastie/i18n/fr.toml
@@ -115,6 +115,9 @@ other = "Pages de manuel FreeBSD"
# ---------------------------------------------------
# Footer
# ---------------------------------------------------
+[system]
+other = "System"
+
[light]
other = "Clair"
@@ -226,6 +229,15 @@ other = "Adobe, Acrobat, Acrobat Reader, Flash and PostScript are either registe
[apple]
other = "Apple, AirPort, FireWire, iMac, iPhone, iPad, Mac, Macintosh, Mac OS, Quicktime, and TrueType are trademarks of Apple Inc., registered in the U.S. and other countries."
+[git]
+other = "Git and the Git logo are either registered trademarks or trademarks of Software Freedom Conservancy, Inc., corporate home of the Git Project, in the United States and/or other countries."
+
+[github]
+other = "GitHub is a trademark of GitHub Inc., registered in the United States and other countries."
+
+[gitlab]
+other = "GITLAB is a trademark of GitLab Inc. in the United States and other countries and regions."
+
[intel]
other = "Intel, Celeron, Centrino, Core, EtherExpress, i386, i486, Itanium, Pentium, and Xeon are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries."
diff --git a/documentation/themes/beastie/i18n/hu.toml b/documentation/themes/beastie/i18n/hu.toml
index 81d267b112..acb13b242f 100644
--- a/documentation/themes/beastie/i18n/hu.toml
+++ b/documentation/themes/beastie/i18n/hu.toml
@@ -115,6 +115,9 @@ other = "FreeBSD Manual Pages"
# ---------------------------------------------------
# Footer
# ---------------------------------------------------
+[system]
+other = "System"
+
[light]
other = "Light"
@@ -226,6 +229,15 @@ other = "Az Adobe, Acrobat, Acrobat Reader, és PostScript az Adobe Systems Inco
[apple]
other = "Az Apple, AirPort, FireWire, Mac, Macintosh, Mac OS, Quicktime, és TrueType az Apple Computer, Inc., bejegyzett védjegyei az Egyesült Államokban és más országokban."
+[git]
+other = "Git and the Git logo are either registered trademarks or trademarks of Software Freedom Conservancy, Inc., corporate home of the Git Project, in the United States and/or other countries."
+
+[github]
+other = "GitHub is a trademark of GitHub Inc., registered in the United States and other countries."
+
+[gitlab]
+other = "GITLAB is a trademark of GitLab Inc. in the United States and other countries and regions."
+
[intel]
other = "Az Intel, Celeron, EtherExpress, i386, i486, Itanium, Pentium és Xeon az Intel Corporation vagy leányvállalatainak védjegyei vagy bejegyzett védjegyei az Egyesült Államokban és más országokban."
@@ -242,7 +254,7 @@ other = "A Motif, OSF/1 és UNIX a The Open Group bejegyzett védjegyei, az IT D
other = "A QUALCOMM és Eudora a QUALCOMM Incorporated bejegyzett védjegyei."
[sparc]
-other = "A SPARC, SPARC64, és UltraSPARC a SPARC International, Inc védjegyei az Egyesült államokban és más országokban. A SPARC International, Inc birtokolja az összes SPARC védjegyet és annak tagjai között teszi azok megfelelõ használatát elérhetõvé a licencelési megegyezések alapján."
+other = "A SPARC, SPARC64, és UltraSPARC a SPARC International, Inc védjegyei az Egyesült államokban és más országokban. A SPARC International, Inc birtokolja az összes SPARC védjegyet és annak tagjai között teszi azok megfelelõ használatát elérhetõvé a licencelési megegyezések alapján."
[sun]
other = "A Sun, Sun Microsystems, Java, Java Virtual Machine, JDK, JRE, JSP, JVM, Netra, OpenJDK, Solaris, StarOffice, SunOS és VirtualBox a Sun Microsystems, Inc. védjegyei vagy bejegyzett védjegyei az Egyesült Államokban és más országokban."
@@ -302,4 +314,4 @@ other = "Az XFree86 az XFree86 Project, Inc. védjegye."
other = "This article was originally published in the January 2000 issue of <a class=\"link\" href=\"http://www.daemonnews.org/\">DaemonNews</a>. This version of the article may include updates from Matt and other authors to reflect changes in FreeBSD's VM implementation."
[general]
-other = "A gyártók és terjesztõk által használt megnevezések közül sok védjegy jogot követel. Ahol ilyen megnevezés tûnik fel ebben a dokumentumban, és a FreeBSD Projektnek tudomása volt a védjegyrõl, a megnevezést a “™” vagy a “®” szimbólum követi."
+other = "A gyártók és terjesztõk által használt megnevezések közül sok védjegy jogot követel. Ahol ilyen megnevezés tûnik fel ebben a dokumentumban, és a FreeBSD Projektnek tudomása volt a védjegyrõl, a megnevezést a “™” vagy a “®” szimbólum követi."
diff --git a/documentation/themes/beastie/i18n/it.toml b/documentation/themes/beastie/i18n/it.toml
index 57cb5b08c4..5a92339c6c 100644
--- a/documentation/themes/beastie/i18n/it.toml
+++ b/documentation/themes/beastie/i18n/it.toml
@@ -50,7 +50,7 @@ other = "Ultima modifica"
other = "da"
[search]
-other = "Search"
+other = "Ricerca"
# ---------------------------------------------------
# Header
@@ -115,6 +115,9 @@ other = "FreeBSD man page"
# ---------------------------------------------------
# Footer
# ---------------------------------------------------
+[system]
+other = "System"
+
[light]
other = "Light"
@@ -206,10 +209,10 @@ other = "Questo articolo è stato scritto per il FreeBSD Project da ThinkSec AS
other = "Coverity è un marchio registrato; Coverity Extend, Coverity Prevent e Coverity Prevent SQS sono marchi registrati di Coverity, Inc."
[ibm]
-other = "IBM, AIX, OS/2, PowerPC, PS/2, S/390, e ThinkPad sono marchi della International Business Machines Corporation negli Stati Uniti, in altri paesi, o in entrambi."
+other = "IBM, AIX, OS/2, PowerPC, PS/2, S/390 e ThinkPad sono marchi della International Business Machines Corporation negli Stati Uniti, in altri paesi, o in entrambi."
[ieee]
-other = "IEEE, POSIX, e 802 sono marchi registrati dell'Institute of Electrical and Electronics Engineers, Inc. negli Stati Uniti."
+other = "IEEE, POSIX e 802 sono marchi registrati dell'Institute of Electrical and Electronics Engineers, Inc. negli Stati Uniti."
[redhat]
other = "Red Hat e RPM sono marchi o marchi registrati della Red Hat, Inc. negli Stati Uniti e in altri paesi."
@@ -218,16 +221,25 @@ other = "Red Hat e RPM sono marchi o marchi registrati della Red Hat, Inc. negli
other = "3Com e HomeConnect sono marchi registrati della 3Com Corporation."
[amd]
-other = "AMD, AMD Athlon, AMD Opteron, Athlon, Élan, Opteron, e PCnet sono marchi della Advanced Micro Devices, Inc."
+other = "AMD, AMD Athlon, AMD Opteron, Athlon, Élan, Opteron e PCnet sono marchi della Advanced Micro Devices, Inc."
[adobe]
-other = "Adobe, Acrobat, Acrobat Reader, e PostScript sono marchi o marchi registrati della Adobe Systems Incorporated negli Stati Uniti e/o in altri paesi."
+other = "Adobe, Acrobat, Acrobat Reader e PostScript sono marchi o marchi registrati della Adobe Systems Incorporated negli Stati Uniti e/o in altri paesi."
[apple]
-other = "Apple, AirPort, FireWire, Mac, Macintosh, Mac OS, Quicktime, e TrueType sono marchi della Apple Computer, Inc., registrati negli Stati Uniti e in altri paesi."
+other = "Apple, AirPort, FireWire, Mac, Macintosh, Mac OS, Quicktime e TrueType sono marchi della Apple Computer, Inc., registrati negli Stati Uniti e in altri paesi."
+
+[git]
+other = "Git and the Git logo are either registered trademarks or trademarks of Software Freedom Conservancy, Inc., corporate home of the Git Project, in the United States and/or other countries."
+
+[github]
+other = "GitHub è un marchio registrato di GitHub Inc., registrato negli Stati Uniti e in altri paesi."
+
+[gitlab]
+other = "GITLAB è un marchio registrato di GitLab Inc. negli Stati Uniti e in altri paesi e regioni."
[intel]
-other = "Intel, Celeron, EtherExpress, i386, i486, Itanium, Pentium, e Xeon sono marchi o marchi registrati della Intel Corporation o delle sue sussidiarie negli Stati Uniti e in altri paesi."
+other = "Intel, Celeron, EtherExpress, i386, i486, Itanium, Pentium e Xeon sono marchi o marchi registrati della Intel Corporation o delle sue sussidiarie negli Stati Uniti e in altri paesi."
[linux]
other = "Linux è un marchio registrato di Linus Torvalds."
@@ -236,13 +248,13 @@ other = "Linux è un marchio registrato di Linus Torvalds."
other = "Microsoft, IntelliMouse, MS-DOS, Outlook, Windows, Windows Media e Windows NT sono marchi o marchi registrati della Microsoft Corporation negli Stati Uniti e/o in altri paesi."
[opengroup]
-other = "Motif, OSF/1, e UNIX sono marchi registrati e IT DialTone e The Open Group sono marchi del The Open Group negli Stati Uniti e in altri paesi."
+other = "Motif, OSF/1 e UNIX sono marchi registrati e IT DialTone e The Open Group sono marchi del The Open Group negli Stati Uniti e in altri paesi."
[qualcomm]
other = "QUALCOMM e Eudora sono marchi registrati della QUALCOMM Incorporated."
[sparc]
-other = "Sparc, Sparc64, e UltraSPARC sono marchi SPARC International, Inc negli Stati Uniti e in altri paesi. I prodotti che portano il marchio SPARC sono basati su architettura sviluppata dalla Sun Microsystems, Inc."
+other = "Sparc, Sparc64 e UltraSPARC sono marchi SPARC International, Inc negli Stati Uniti e in altri paesi. I prodotti che portano il marchio SPARC sono basati su architettura sviluppata dalla Sun Microsystems, Inc."
[sun]
other = "Sun, Sun Microsystems, Java, Java Virtual Machine, JDK, JRE, JSP, JVM, Netra, Solaris, StarOffice e SunOS sono marchi o marchi registrati della Sun Microsystems, Inc. negli Stati Uniti e in altri paesi."
@@ -254,7 +266,7 @@ other = "UNIX è un marchio registrato del The Open Group negli Stati Uniti e in
other = "NetBSD è un marchio registrato della Fondazione NetBSD."
[realnetworks]
-other = "RealNetworks, RealPlayer, e RealAudio sono marchi registrati della RealNetworks, Inc."
+other = "RealNetworks, RealPlayer e RealAudio sono marchi registrati della RealNetworks, Inc."
[oracle]
other = "Oracle è un marchio registrato della Oracle Corporation."
@@ -272,7 +284,7 @@ other = "Adaptec è un marchio registrato della Adaptec, Inc."
other = "Android è un marchio registrato di Google Inc."
[heidelberger]
-other = "Heidelberg, Helvetica, Palatino, e Times Roman sono marchi o marchi registrati della Heidelberger Druckmaschinen AG negli Stati Uniti e in altri paesi."
+other = "Heidelberg, Helvetica, Palatino e Times Roman sono marchi o marchi registrati della Heidelberger Druckmaschinen AG negli Stati Uniti e in altri paesi."
[intuit]
other = "Intuit e Quicken sono marchi registrati e/o marchi di servizi registrati della Intuit Inc., o una delle sue sussidiarie, negli Stati Uniti e in altri paesi."
@@ -302,4 +314,4 @@ other = "XFree86 è un marchio della The XFree86 Project, Inc."
other = "Questo articolo è stato publicato originalmente nel numero di gennaio 2000 di <a class=\"link\" href=\"http://www.daemonnews.org/\">DaemonNews</a>. Questa versione dell'articolo può includere aggiornamenti da Matt e da altri autori per seguire le modifiche dell'implementazione della memoria virtuale di FreeBSD."
[general]
-other = "Molti dei nomi identificativi usati dai produttori e dai venditori per distinguere i loro prodotti sono anche dei marchi. Quando questi nomi appaiono nel libro, e il FreeBSD Project è al corrente del marchio, vengono fatti seguire dal simbolo “™” o “®”."
+other = "Molti dei nomi identificativi usati dai produttori e dai venditori per distinguere i loro prodotti sono anche dei marchi. Quando questi nomi appaiono nel documento, e il FreeBSD Project è al corrente del marchio, vengono fatti seguire dal simbolo “™” o “®”."
diff --git a/documentation/themes/beastie/i18n/ja.toml b/documentation/themes/beastie/i18n/ja.toml
index abbb4e549e..cb19b3fdbf 100644
--- a/documentation/themes/beastie/i18n/ja.toml
+++ b/documentation/themes/beastie/i18n/ja.toml
@@ -115,6 +115,9 @@ other = "FreeBSD Manual Pages"
# ---------------------------------------------------
# Footer
# ---------------------------------------------------
+[system]
+other = "System"
+
[light]
other = "Light"
@@ -226,6 +229,15 @@ other = "Adobe, Acrobat, Acrobat Reader, Flash および PostScript は アメ
[apple]
other = "Apple, AirPort, FireWire, iMac, iPhone, iPad, Mac, Macintosh, Mac OS, Quicktime および TrueType は Apple Inc. の商標で、 アメリカ合衆国およびその他の国で登録されています。"
+[git]
+other = "Git and the Git logo are either registered trademarks or trademarks of Software Freedom Conservancy, Inc., corporate home of the Git Project, in the United States and/or other countries."
+
+[github]
+other = "GitHub is a trademark of GitHub Inc., registered in the United States and other countries."
+
+[gitlab]
+other = "GITLAB is a trademark of GitLab Inc. in the United States and other countries and regions."
+
[intel]
other = "Intel, Celeron, Centrino, Core, EtherExpress, i386, i486, Itanium, Pentium および Xeon はアメリカ合衆国およびその他の国における Intel Corporation またはその関連会社の商標または登録商標です。"
@@ -275,7 +287,7 @@ other = "Android は Google Inc. の商標です。"
other = "Heidelberg, Helvetica, Palatino, および Times Roman はアメリカ合衆国およびその他の国における Heidelberger Druckmaschinen AG の登録商標または商標です。"
[intuit]
-other = "Intuit および Quicken は アメリカ合衆国およびその他の国における Intuit Inc. またはその関連会社の 商標および/または登録商標です。"
+other = "Intuit および Quicken は アメリカ合衆国およびその他の国における Intuit Inc. またはその関連会社の 商標および/または登録商標です。"
[lsilogic]
other = "LSI Logic, AcceleRAID, eXtremeRAID, MegaRAID および Mylex は LSI Logic Corp. の商標または登録商標です。"
diff --git a/documentation/themes/beastie/i18n/ko.toml b/documentation/themes/beastie/i18n/ko.toml
index 1e8a387b99..edc3eb986b 100644
--- a/documentation/themes/beastie/i18n/ko.toml
+++ b/documentation/themes/beastie/i18n/ko.toml
@@ -115,6 +115,9 @@ other = "FreeBSD Manual Pages"
# ---------------------------------------------------
# Footer
# ---------------------------------------------------
+[system]
+other = "System"
+
[light]
other = "Light"
@@ -226,6 +229,15 @@ other = "Adobe, Acrobat, Acrobat Reader, Flash and PostScript are either registe
[apple]
other = "Apple, AirPort, FireWire, iMac, iPhone, iPad, Mac, Macintosh, Mac OS, Quicktime, and TrueType are trademarks of Apple Inc., registered in the U.S. and other countries."
+[git]
+other = "Git and the Git logo are either registered trademarks or trademarks of Software Freedom Conservancy, Inc., corporate home of the Git Project, in the United States and/or other countries."
+
+[github]
+other = "GitHub is a trademark of GitHub Inc., registered in the United States and other countries."
+
+[gitlab]
+other = "GITLAB is a trademark of GitLab Inc. in the United States and other countries and regions."
+
[intel]
other = "Intel, Celeron, Centrino, Core, EtherExpress, i386, i486, Itanium, Pentium, and Xeon are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries."
diff --git a/documentation/themes/beastie/i18n/mn.toml b/documentation/themes/beastie/i18n/mn.toml
index f46f1e08d7..218b61786e 100644
--- a/documentation/themes/beastie/i18n/mn.toml
+++ b/documentation/themes/beastie/i18n/mn.toml
@@ -115,6 +115,9 @@ other = "FreeBSD Manual Pages"
# ---------------------------------------------------
# Footer
# ---------------------------------------------------
+[system]
+other = "System"
+
[light]
other = "Light"
@@ -226,6 +229,15 @@ other = "Adobe, Acrobat, Acrobat Reader, болон PostScript нь бүртгэ
[apple]
other = "Apple, AirPort, FireWire, Mac, Macintosh, Mac OS, Quicktime, болон TrueType нь Америкийн Нэгдсэн Улс ба/эсвэл бусад улсуудад бүртгэгдсэн Apple Computer, Inc.-ийн худалдааны тэмдэгнүүд юм."
+[git]
+other = "Git and the Git logo are either registered trademarks or trademarks of Software Freedom Conservancy, Inc., corporate home of the Git Project, in the United States and/or other countries."
+
+[github]
+other = "GitHub is a trademark of GitHub Inc., registered in the United States and other countries."
+
+[gitlab]
+other = "GITLAB is a trademark of GitLab Inc. in the United States and other countries and regions."
+
[intel]
other = "Intel, Celeron, EtherExpress, i386, i486, Itanium, Pentium, болон Xeon нь Америкийн Нэгдсэн Улс болон бусад улсууд дахь Intel корпораци эсвэл түүний салбаруудын худалдааны тэмдэгнүүд эсвэл бүртгэгдсэн худалдааны тэмдэгнүүд юм."
diff --git a/documentation/themes/beastie/i18n/nl.toml b/documentation/themes/beastie/i18n/nl.toml
index 279a9b8237..6a2e71de7d 100644
--- a/documentation/themes/beastie/i18n/nl.toml
+++ b/documentation/themes/beastie/i18n/nl.toml
@@ -115,6 +115,9 @@ other = "FreeBSD Manual Pages"
# ---------------------------------------------------
# Footer
# ---------------------------------------------------
+[system]
+other = "System"
+
[light]
other = "Light"
@@ -226,6 +229,15 @@ other = "Adobe, Acrobat, Acrobat Reader, en PostScript zijn òfwel geregistreerd
[apple]
other = "Apple, AirPort, FireWire, Mac, Macintosh, Mac OS, Quicktime, en TrueType zijn handelsmerken van Apple Computer, Inc., geregistreerd in de Verenigde Staten en andere landen."
+[git]
+other = "Git and the Git logo are either registered trademarks or trademarks of Software Freedom Conservancy, Inc., corporate home of the Git Project, in the United States and/or other countries."
+
+[github]
+other = "GitHub is a trademark of GitHub Inc., registered in the United States and other countries."
+
+[gitlab]
+other = "GITLAB is a trademark of GitLab Inc. in the United States and other countries and regions."
+
[intel]
other = "Intel, Celeron, EtherExpress, i386, i486, Itanium, Pentium, en Xeon zijn handelsmerken of geregistreerde handelsmerken van Intel Corporation of haar dochterondernemingen in de Verenigde Staten en andere landen."
@@ -242,7 +254,7 @@ other = "Motif, OSF/1, en UNIX zijn geregistreerde handelsmerken en IT DialTone
other = "QUALCOMM en Eudora zijn geregistreerde handelsmerken van QUALCOMM Incorporated."
[sparc]
-other = "SPARC, SPARC64, en UltraSPARC zijn handelsmerken van SPARC International, Inc. in de Verenigde Staten en andere landen. SPARC International, Inc. bezit alle handelsmerken van SPARC en staat onder licentie het juiste gebruik van deze handelsmerken toe door zijn leden."
+other = "SPARC, SPARC64, en UltraSPARC zijn handelsmerken van SPARC International, Inc. in de Verenigde Staten en andere landen. SPARC International, Inc. bezit alle handelsmerken van SPARC en staat onder licentie het juiste gebruik van deze handelsmerken toe door zijn leden."
[sun]
other = "Sun, Sun Microsystems, Java, Java Virtual Machine, JDK, JRE, JSP, JVM, Netra, OpenJDK, Solaris, StarOffice, SunOS en VirtualBox zijn handelsmerken of geregistreerde handelsmerken van Sun Microsystems, Inc. in de Verenigde Staten en andere landen."
@@ -302,4 +314,4 @@ other = "XFree86 is een handelsmerk van The XFree86 Project, Inc."
other = "This article was originally published in the January 2000 issue of <a class=\"link\" href=\"http://www.daemonnews.org/\">DaemonNews</a>. This version of the article may include updates from Matt and other authors to reflect changes in FreeBSD's VM implementation."
[general]
-other = "Veel van de termen die door fabrikanten en verkopers worden gebruikt om hun producten te onderscheiden worden geclaimd als handelsmerk. Op de plaatsen waar deze handelsmerken in dit document voorkomen, en het &os; Project op de hoogte was van de claim op het handelsmerk, worden de termen gevolgd door het symbool “™” of het symbool “®”."
+other = "Veel van de termen die door fabrikanten en verkopers worden gebruikt om hun producten te onderscheiden worden geclaimd als handelsmerk. Op de plaatsen waar deze handelsmerken in dit document voorkomen, en het &os; Project op de hoogte was van de claim op het handelsmerk, worden de termen gevolgd door het symbool “™” of het symbool “®”."
diff --git a/documentation/themes/beastie/i18n/pl.toml b/documentation/themes/beastie/i18n/pl.toml
index 1e8a387b99..edc3eb986b 100644
--- a/documentation/themes/beastie/i18n/pl.toml
+++ b/documentation/themes/beastie/i18n/pl.toml
@@ -115,6 +115,9 @@ other = "FreeBSD Manual Pages"
# ---------------------------------------------------
# Footer
# ---------------------------------------------------
+[system]
+other = "System"
+
[light]
other = "Light"
@@ -226,6 +229,15 @@ other = "Adobe, Acrobat, Acrobat Reader, Flash and PostScript are either registe
[apple]
other = "Apple, AirPort, FireWire, iMac, iPhone, iPad, Mac, Macintosh, Mac OS, Quicktime, and TrueType are trademarks of Apple Inc., registered in the U.S. and other countries."
+[git]
+other = "Git and the Git logo are either registered trademarks or trademarks of Software Freedom Conservancy, Inc., corporate home of the Git Project, in the United States and/or other countries."
+
+[github]
+other = "GitHub is a trademark of GitHub Inc., registered in the United States and other countries."
+
+[gitlab]
+other = "GITLAB is a trademark of GitLab Inc. in the United States and other countries and regions."
+
[intel]
other = "Intel, Celeron, Centrino, Core, EtherExpress, i386, i486, Itanium, Pentium, and Xeon are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries."
diff --git a/documentation/themes/beastie/i18n/pt-br.toml b/documentation/themes/beastie/i18n/pt-br.toml
index ff00ae1f00..f6537ccc75 100644
--- a/documentation/themes/beastie/i18n/pt-br.toml
+++ b/documentation/themes/beastie/i18n/pt-br.toml
@@ -52,6 +52,12 @@ other = "por"
[search]
other = "Search"
+[stale-warning-message]
+other = "Esta tradução pode estar desatualizada. Para ajudar com as traduções, acesse a"
+
+[translation-instance]
+other = "ferramenta de traduções do FreeBSD"
+
# ---------------------------------------------------
# Header
# ---------------------------------------------------
@@ -115,6 +121,9 @@ other = "Páginas de Manual do FreeBSD"
# ---------------------------------------------------
# Footer
# ---------------------------------------------------
+[system]
+other = "System"
+
[light]
other = "Light"
@@ -226,6 +235,15 @@ other = "Adobe, Acrobat, Acrobat Reader, Flash and PostScript are either registe
[apple]
other = "Apple, AirPort, FireWire, iMac, iPhone, iPad, Mac, Macintosh, Mac OS, Quicktime, and TrueType are trademarks of Apple Inc., registered in the U.S. and other countries."
+[git]
+other = "Git and the Git logo are either registered trademarks or trademarks of Software Freedom Conservancy, Inc., corporate home of the Git Project, in the United States and/or other countries."
+
+[github]
+other = "GitHub is a trademark of GitHub Inc., registered in the United States and other countries."
+
+[gitlab]
+other = "GITLAB is a trademark of GitLab Inc. in the United States and other countries and regions."
+
[intel]
other = "Intel, Celeron, Centrino, Core, EtherExpress, i386, i486, Itanium, Pentium, and Xeon are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries."
diff --git a/documentation/themes/beastie/i18n/ru.toml b/documentation/themes/beastie/i18n/ru.toml
index a4bd2f44b6..7c80ae5d74 100644
--- a/documentation/themes/beastie/i18n/ru.toml
+++ b/documentation/themes/beastie/i18n/ru.toml
@@ -1,215 +1,389 @@
+#
+# The FreeBSD Russian Documentation Project
+#
+# Original EN revision (14.07.2023): fbf328b48f749b62f2166771e94b5cd0664dd52d
+#
+
# ---------------------------------------------------
-# Global
+# Глобальные значения
# ---------------------------------------------------
[freebsd]
other = "FreeBSD"
[freebsd-project]
-other = "The FreeBSD Project"
+other = "Проект FreeBSD"
[freebsd-foundation]
-other = "The FreeBSD Foundation"
+other = "Фонд FreeBSD"
[freebsd-documentation]
-other = "FreeBSD Documentation"
+other = "Документация FreeBSD"
[freebsd-documentation-main-desc]
-other = "FreeBSD is an operating system used to power modern servers, desktops, and embedded platforms."
+other = "FreeBSD - это операционная система, обеспечивающая работу современных серверов, настольных компьютеров и встраиваемых платформ."
[global-search-placeholder]
-other = "Search in the articles, books and guides."
+other = "Поиск в статьях, книгах и руководствах."
[toc]
-other = "Table of Contents"
+other = "Содержание"
[resources]
-other = "Resources"
+other = "Материалы"
[download-pdf]
-other = "Download PDF"
+other = "Скачать PDF"
[edit-page]
-other = "Edit this page"
+other = "Редактировать эту страницу"
[trademarks]
-other = "trademarks"
+other = "товарные знаки"
[books]
-other = "Books"
+other = "Книги"
[articles]
-other = "Articles"
+other = "Статьи"
[choose-language]
-other = "Choose language"
+other = "Выберите язык"
[last-modified]
-other = "Last modified on"
+other = "Изменено"
[by]
other = "by"
[search]
-other = "Search"
+other = "Поиск"
+
+[stale-warning-message]
+other = "Этот перевод может быть устаревшим. Для того, чтобы помочь с переводом, пожалуйста, обратитесь к"
+
+[translation-instance]
+other = "Сервер переводов FreeBSD"
# ---------------------------------------------------
-# Header
+# Верхний колонтитул
# ---------------------------------------------------
[documentation]
-other = "Documentation"
+other = "Документация"
[community]
-other = "Community"
+other = "Сообщество"
+
+[h-about]
+other = "О нас"
+
+[h-freebsd]
+other = "FreeBSD"
+
+[h-freebsd-foundation]
+other = "Фонд FreeBSD"
+
+[h-code-of-conduct]
+other = "Кодекс Этики"
+
+[h-get-freebsd]
+other = "Получить FreeBSD"
+
+[h-release-information]
+other = "Информация о релизах"
+
+[h-release-engineering]
+other = "Подготовка релизов"
+
+[h-security-advisories]
+other = "Бюллетени Безопасности"
+
+[h-documentation]
+other = "Документация"
+
+[h-documentation-portal]
+other = "Портал документации"
+
+[h-freebsd-handbook]
+other = "Руководство"
+
+[h-porter-handbook]
+other = "Руководство по созданию портов"
+
+[h-documentation-handbook]
+other = "Учебник Проекта Документирования"
+
+[h-manual-pages]
+other = "Страницы Справочника"
+
+[h-presentation-and-papers]
+other = "Презентации и публикации"
+
+[h-wiki]
+other = "Wiki"
+
+[h-books]
+other = "Книги"
+
+[h-articles]
+other = "Статьи"
+
+[h-community]
+other = "Сообщество"
+
+[h-get-involved]
+other = "Стать участником"
+
+[h-community-forum]
+other = "Форум"
+
+[h-mailing-lists]
+other = "Списки рассылки"
+
+[h-irc-channels]
+other = "Каналы IRC"
+
+[h-bug-tracker]
+other = "Трекер ошибок"
+
+[h-support]
+other = "Поддержка"
+
+[h-donate]
+other = "Пожертвования"
# ---------------------------------------------------
-# Main page
+# Главная страница
# ---------------------------------------------------
[getting-started]
-other = "Getting started"
+other = "Начать знакомство"
[learn-basics]
-other = "Learn about FreeBSD basics"
+other = "Изучить основы FreeBSD"
[download]
-other = "Download"
+other = "Скачать"
[download-freebsd]
-other = "Download FreeBSD"
+other = "Скачать FreeBSD"
[handbook]
-other = "FreeBSD Handbook"
+other = "Руководство по FreeBSD"
[handbook-desc]
-other = "A constantly evolving, comprehensive resource for FreeBSD users"
+other = "Постоянно развивающийся и обширный источник информации для пользователей FreeBSD"
[porters-handbook]
-other = "FreeBSD Porter's Handbook"
+other = "Руководство FreeBSD по созданию портов"
[porters-handbook-desc]
-other = "A complete reference about the FreeBSD ports system"
+other = "Полное справочное руководство по системе управления портами FreeBSD"
[faq]
other = "FreeBSD FAQ"
[faq-desc]
-other = "FreeBSD frequently Asked Questions (FAQ) for 13.X and 12.X"
+other = "Часто Задаваемые Вопросы (ЧаВО) по FreeBSD 13.X и 12.X"
[fdp]
-other = "Documentation Project Primer"
+other = "Учебник Проекта Документирования"
[fdp-desc]
-other = "A complete guide about how to start contributing to the documentation"
+other = "Полное руководство, посвящённое тому, как принять участие в создании документации"
[books-list]
-other = "List of FreeBSD books"
+other = "Список книг о FreeBSD"
[articles-list]
-other = "List of FreeBSD articles"
+other = "Список статей о FreeBSD"
[manual-pages]
-other = "Manual pages"
+other = "Страницы Справочника"
[manual-pages-desc]
-other = "FreeBSD Manual Pages"
+other = "Страницы Справочника FreeBSD"
# ---------------------------------------------------
-# Footer
+# Нижний колонтитул
# ---------------------------------------------------
+[system]
+other = "Система"
+
[light]
-other = "Light"
+other = "Светлый"
[dark]
-other = "Dark"
+other = "Тёмный"
[high-contrast]
-other = "High contrast"
+other = "Высокая контрастность"
+
+[f-about]
+other = "О нас"
+
+[f-freebsd]
+other = "FreeBSD"
+
+[f-freebsd-foundation]
+other = "Фонд FreeBSD"
+
+[f-get-freebsd]
+other = "Получить FreeBSD"
+
+[f-code-of-conduct]
+other = "Кодекс Этики"
+
+[f-security-advisories]
+other = "Бюллетени Безопасности"
+
+[f-documentation]
+other = "Документация"
+
+[f-documentation-portal]
+other = "Портал документации"
+
+[f-manual-pages]
+other = "Страницы Справочника"
+
+[f-presentation-and-papers]
+other = "Презентации и публикации"
+
+[f-previous-versions]
+other = "Предыдущие версии"
+
+[f-44bsd-documents]
+other = "Документы 4.4BSD"
+
+[f-wiki]
+other = "Wiki"
+
+[f-community]
+other = "Сообщество"
+
+[f-get-involved]
+other = "Принять участие"
+
+[f-community-forum]
+other = "Форум Сообщества"
+
+[f-mailing-lists]
+other = "Списки рассылки"
+
+[f-irc-channels]
+other = "Каналы IRC"
+
+[f-bug-tracker]
+other = "Трекер ошибок"
+
+[f-legal]
+other = "Юридическая информация"
+
+[f-donations]
+other = "Пожертвования"
+
+[f-licensing]
+other = "Лицензирование"
+
+[f-privacy-policy]
+other = "Политика Конфиденциальности"
+
+[f-legal-notices]
+other = "Юридические оговорки"
+
+[f-all-rights-reserved]
+other = "Проект FreeBSD. Все права защищены"
+
+[f-made-with]
+other = "Сделано с помощью"
+
+[f-by-freebsd-community]
+other = "Сообществом FreeBSD"
[previous-versions]
-other = "Previous versions"
+other = "Предыдущие версии"
[4-4bsd-documents]
-other = "4.4BSD Documents"
+other = "Документы 4.4BSD"
[about]
-other = "About"
+other = "О нас"
[legal]
-other = "Legal"
+other = "Юридическая информация"
[donations]
-other = "Donations"
+other = "Пожертвования"
[legal-notices]
-other = "Legal notices"
+other = "Юридические оговорки"
[made-with]
-other = "Made with"
+other = "Сделано при помощи"
[by-freebsd-community]
-other = "by the FreeBSD Community"
+other = "Сообществом FreeBSD"
[copyright]
-other = "All rights reserved."
+other = "Все права защищены."
# ---------------------------------------------------
-# Articles page
+# Страница публикаций
# ---------------------------------------------------
[list-desc-articles]
-other = "Explore a comprehensive list of FreeBSD articles."
+other = "Изучите обширный список публикаций FreeBSD."
# ---------------------------------------------------
-# Books page
+# Страница книг
# ---------------------------------------------------
[prev]
-other = "Prev"
+other = "Назад"
[next]
-other = "Next"
+other = "Далее"
[home]
-other = "Home"
+other = "Главная"
[split-html]
-other = "Split HTML"
+other = "Постраничный HTML"
[single-html]
-other = "Single HTML"
+other = "Единый HTML"
[book-chapters]
-other = "Book chapters"
+other = "Главы книг"
[book-menu]
-other = "Book menu"
+other = "Меню книг"
[list-desc-books]
-other = "Explore a comprehensive list of FreeBSD books."
+other = "Изучите обширный список книг по FreeBSD."
# ---------------------------------------------------
-# Languages page
+# Страница языков
# ---------------------------------------------------
[select-language]
-other = "Select a language"
+other = "Выберите язык"
[current-selection]
-other = "Current selection:"
+other = "Текущий выбор:"
# ---------------------------------------------------
-# Copyright
+# Авторские права
# ---------------------------------------------------
[freebsd-copyright]
-other = "FreeBSD это зарегистрированная торговая марка FreeBSD Foundation."
+other = "FreeBSD является зарегистрированным товарным знаком Фонда FreeBSD."
[pam]
-other = "This article was written 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."
+other = "Эта статья была написана для Проекта FreeBSD компаниями ThinkSec AS и Network Associates Laboratories, входящей в Security Research Division of Network Associates, Inc., в рамках договора DARPA/SPAWAR N66001-01-C-8035 (“CBOSS”), как часть исследовательской программы DARPA CHATS."
[coverity]
-other = "Coverity is a registered trademark; Coverity Extend, Coverity Prevent and Coverity Prevent SQS are trademarks of Coverity, Inc."
+other = "Coverity является зарегистрированным товарным знаком; Coverity Extend, Coverity Prevent и Coverity Prevent SQS являются зарегистрированными товарными знаками Coverity, Inc."
[ibm]
-other = "IBM, AIX, OS/2, PowerPC, PS/2, S/390 и ThinkPad это торговые марки International Business Machines Corporation в Соединенных Штатах, других странах, или по всему миру."
+other = "IBM, AIX, OS/2, PowerPC, PS/2, S/390 и ThinkPad являются товарными знаками International Business Machines Corporation в Соединённых Штатах, других странах, или по всему миру."
[ieee]
-other = "IEEE, POSIX и 802 это зарегистрированные торговые марки Institute of Electrical and Electronics Engineers, Inc. в Соединенных Штатах."
+other = "IEEE, POSIX и 802 являются зарегистрированными товарными знаками Institute of Electrical and Electronics Engineers, Inc. в Соединённых Штатах."
[redhat]
other = "Red Hat и RPM это торговые марки или зарегистрированные торговые марки Red Hat, Inc. в Соединенных Штатах и других странах."
@@ -226,11 +400,20 @@ other = "Adobe, Acrobat, Acrobat Reader и PostScript это или зареги
[apple]
other = "Apple, AirPort, FireWire, Mac, Macintosh, Mac OS, Quicktime и TrueType это торговые марки Apple Computer, Inc., зарегистрированные в Соединенных Штатах и других странах."
+[git]
+other = "Git и логотип Git являются зарегистрированными торговыми знаками или торговыми знаками Software Freedom Conservancy, Inc., являющимся корпоративным местонахождением Git Project, в Соединённых Штатах и/или других странах."
+
+[github]
+other = "GitHub является торговым знаком GitHub Inc., зарегистрированным в Соединённых Штатах и других странах."
+
+[gitlab]
+other = "GITLAB является торговым знаком GitLab Inc. в Соединённых Штатах и других странах и регионах."
+
[intel]
other = "Intel, Celeron, EtherExpress, i386, i486, Itanium, Pentium и Xeon это торговые марки или зарегистрированные торговые марки Intel Corporation или ее дочерних компаний в Соединенных Штатах и других странах."
[linux]
-other = "Linux это зарегистрированная торговая марка Linus Torvalds."
+other = "Linux является торговым знаком Linus Torvalds."
[microsoft]
other = "Microsoft, FrontPage, IntelliMouse, MS-DOS, Outlook, Windows, Windows Media и Windows NT это или зарегистрированные торговые марки или торговые марки Microsoft Corporation в Соединенных Штатах и/или других странах."
@@ -242,7 +425,7 @@ other = "Motif, OSF/1 и UNIX это зарегистрированные тор
other = "QUALCOMM и Eudora это зарегистрированные торговые марки QUALCOMM Incorporated."
[sparc]
-other = "Sparc, Sparc64, и UltraSPARC это торговые марки SPARC International, Inc в Соединенных Штатах и других странах. Продукты с торговой маркой SPARC основаны на архитектуре, разработанной Sun Microsystems, Inc."
+other = "Sparc, Sparc64, и UltraSPARC это торговые марки SPARC International, Inc в Соединенных Штатах и других странах. Продукты с торговой маркой SPARC основаны на архитектуре, разработанной Sun Microsystems, Inc."
[sun]
other = "Sun, Sun Microsystems, Java, Java Virtual Machine, JDK, JRE, JSP, JVM, Netra, Solaris, StarOffice, SunOS это торговые марки или зарегистрированные торговые марки Sun Microsystems, Inc. в Соединенных Штатах и других странах."
@@ -269,7 +452,7 @@ other = "ARM это зарегистрированная торговая мар
other = "Adaptec это зарегистрированная торговая марка Adaptec, Inc."
[google]
-other = "Android is a trademark of Google Inc."
+other = "Android является товарным знаком Google Inc."
[heidelberger]
other = "Heidelberg, Helvetica, Palatino и Times Roman это или зарегистрированные торговые марки или торговые марки Heidelberger Druckmaschinen AG в США и других странах."
@@ -278,28 +461,28 @@ other = "Heidelberg, Helvetica, Palatino и Times Roman это или зарег
other = "Intuit и Quicken это зарегистрированные торговые марки и/или зарегистрированные сервис марки Intuit Inc., или одной из ее дочерних компаний в Соединенных Штатах и других странах."
[lsilogic]
-other = "LSI Logic, AcceleRAID, eXtremeRAID, MegaRAID и Mylex это торговые марки или зарегистрированные торговые марки LSI Logic Corp."
+other = "LSI Logic, AcceleRAID, eXtremeRAID, MegaRAID и Mylex является товарными знаками или зарегистрированные торговыми марками LSI Logic Corp."
[themathworks]
-other = "MATLAB это зарегистрированная торговая марки MathWorks, Inc."
+other = "MATLAB является товарным знаком MathWorks, Inc."
[thomson]
-other = "SpeedTouch это торговая марка Thomson."
+other = "SpeedTouch является товарным знаком Thomson."
[vmware]
-other = "VMware это торговая марка VMware, Inc."
+other = "VMware является товарным знаком VMware, Inc."
[wolframresearch]
-other = "Mathematica это зарегистрированная торговая марки Wolfram Research, Inc."
+other = "Mathematica является товарным знаком Wolfram Research, Inc."
[xiph]
-other = "Ogg Vorbis и Xiph.Org это торговые марки Xiph.Org."
+other = "Ogg Vorbis и Xiph.Org являются товарными знаками Xiph.Org."
[xfree86]
-other = "XFree86 это торговая марка XFree86 Project, Inc."
+other = "XFree86 является товарным знаком XFree86 Project, Inc."
[daemon-news]
-other = "This article was originally published in the January 2000 issue of <a class=\"link\" href=\"http://www.daemonnews.org/\">DaemonNews</a>. This version of the article may include updates from Matt and other authors to reflect changes in FreeBSD's VM implementation."
+other = "Эта статья была впервые опубликована в январском номере 2000 года издания <a class=\"link\" href=\"http://www.daemonnews.org/\">DaemonNews</a>. Данная версия публикации может содержать обновления от Мэтта и других авторов, отражающие изменения в реализации VM во FreeBSD."
[general]
-other = "Многие из обозначений, используемые производителями и продавцами для обозначения своих продуктов, заявляются в качестве торговых марок. Когда такие обозначения появляются в этом документе, и Проекту FreeBSD известно о торговой марке, к обозначению добавляется знак “™” или “®”."
+other = "Многие из обозначений, используемые производителями и продавцами для обозначения своих продуктов, заявляются в качестве товарных знаков. Когда такие обозначения появляются в этом документе, и Проекту FreeBSD известно о товарном знаке, к обозначению добавляется знак “™” или “®”."
diff --git a/documentation/themes/beastie/i18n/tr.toml b/documentation/themes/beastie/i18n/tr.toml
index 1e8a387b99..edc3eb986b 100644
--- a/documentation/themes/beastie/i18n/tr.toml
+++ b/documentation/themes/beastie/i18n/tr.toml
@@ -115,6 +115,9 @@ other = "FreeBSD Manual Pages"
# ---------------------------------------------------
# Footer
# ---------------------------------------------------
+[system]
+other = "System"
+
[light]
other = "Light"
@@ -226,6 +229,15 @@ other = "Adobe, Acrobat, Acrobat Reader, Flash and PostScript are either registe
[apple]
other = "Apple, AirPort, FireWire, iMac, iPhone, iPad, Mac, Macintosh, Mac OS, Quicktime, and TrueType are trademarks of Apple Inc., registered in the U.S. and other countries."
+[git]
+other = "Git and the Git logo are either registered trademarks or trademarks of Software Freedom Conservancy, Inc., corporate home of the Git Project, in the United States and/or other countries."
+
+[github]
+other = "GitHub is a trademark of GitHub Inc., registered in the United States and other countries."
+
+[gitlab]
+other = "GITLAB is a trademark of GitLab Inc. in the United States and other countries and regions."
+
[intel]
other = "Intel, Celeron, Centrino, Core, EtherExpress, i386, i486, Itanium, Pentium, and Xeon are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries."
diff --git a/documentation/themes/beastie/i18n/zh-cn.toml b/documentation/themes/beastie/i18n/zh-cn.toml
index 25cd823f7c..db6a1e628e 100644
--- a/documentation/themes/beastie/i18n/zh-cn.toml
+++ b/documentation/themes/beastie/i18n/zh-cn.toml
@@ -115,6 +115,9 @@ other = "FreeBSD Manual Pages"
# ---------------------------------------------------
# Footer
# ---------------------------------------------------
+[system]
+other = "System"
+
[light]
other = "Light"
@@ -226,6 +229,15 @@ other = "Adobe、 Acrobat、 Acrobat Reader、 Flash, 以及 PostScript 是 Ad
[apple]
other = "Apple, AirPort, FireWire, iMac, iPhone, iPad, Mac, Macintosh, Mac OS, Quicktime, 以及 TrueType 是 Apple Inc. 在美国以及其他国家的注册商标。"
+[git]
+other = "Git and the Git logo are either registered trademarks or trademarks of Software Freedom Conservancy, Inc., corporate home of the Git Project, in the United States and/or other countries."
+
+[github]
+other = "GitHub is a trademark of GitHub Inc., registered in the United States and other countries."
+
+[gitlab]
+other = "GITLAB is a trademark of GitLab Inc. in the United States and other countries and regions."
+
[intel]
other = "Intel, Celeron, Centrino, Core, EtherExpress, i386, i486, Itanium, Pentium, 和 Xeon 是 Intel Corporation 及其分支机构在美国和其他国家的商标或注册商标。"
diff --git a/documentation/themes/beastie/i18n/zh-tw.toml b/documentation/themes/beastie/i18n/zh-tw.toml
index d67e1ac68e..000f75ff9a 100644
--- a/documentation/themes/beastie/i18n/zh-tw.toml
+++ b/documentation/themes/beastie/i18n/zh-tw.toml
@@ -115,6 +115,9 @@ other = "FreeBSD Manual Pages"
# ---------------------------------------------------
# Footer
# ---------------------------------------------------
+[system]
+other = "System"
+
[light]
other = "淺色"
@@ -226,6 +229,15 @@ other = "Adobe, Acrobat, Acrobat Reader, Flash 以及 PostScript 是 Adobe Syste
[apple]
other = "Apple, AirPort, FireWire, iMac, iPhone, iPad, Mac, Macintosh, Mac OS, Quicktime 以及 TrueType 是 Apple Inc. 在美國以及其他國家的註冊商標。"
+[git]
+other = "Git and the Git logo are either registered trademarks or trademarks of Software Freedom Conservancy, Inc., corporate home of the Git Project, in the United States and/or other countries."
+
+[github]
+other = "GitHub is a trademark of GitHub Inc., registered in the United States and other countries."
+
+[gitlab]
+other = "GITLAB is a trademark of GitLab Inc. in the United States and other countries and regions."
+
[intel]
other = "Intel, Celeron, Centrino, Core, EtherExpress, i386, i486, Itanium, Pentium 以及 Xeon 是 Intel Corporation 及其分支機構在美國和其他國家的商標或註冊商標。"
diff --git a/documentation/themes/beastie/layouts/_default/languages.html b/documentation/themes/beastie/layouts/_default/languages.html
index ba487c26c3..8743c86312 100644
--- a/documentation/themes/beastie/layouts/_default/languages.html
+++ b/documentation/themes/beastie/layouts/_default/languages.html
@@ -4,17 +4,19 @@
<body>
{{ block "header" . }}{{ partial "site-header.html" .}}{{ end }}
<main class="main-wrapper">
- {{ $home := .Site.Home }}
- <h1>{{ i18n "select-language" }}</h1>
- <p>{{ i18n "current-selection" }} {{ .Site.Language.LanguageName }}</p>
- <ul class="language-list">
- {{ range $.Site.Home.AllTranslations }}
- {{ $isCurrentLang := eq $home.Language .Language }}
- <li {{ if $isCurrentLang}} class="selected" {{ end }}>
- <a href="{{ .RelPermalink }}" lang="{{ .Language.Params.languageCode }}">{{.Language.LanguageName }}</a>
- </li>
- {{ end }}
- </ul>
+ <div class="document">
+ {{ $home := .Site.Home }}
+ <h1>{{ i18n "select-language" }}</h1>
+ <p>{{ i18n "current-selection" }} {{ .Site.Language.LanguageName }}</p>
+ <ul class="language-list">
+ {{ range $.Site.Home.AllTranslations }}
+ {{ $isCurrentLang := eq $home.Language .Language }}
+ <li {{ if $isCurrentLang}} class="selected" {{ end }}>
+ <a href="{{ .RelPermalink }}" lang="{{ .Language.Params.languageCode }}">{{.Language.LanguageName }}</a>
+ </li>
+ {{ end }}
+ </ul>
+ </div>
</main>
{{ block "footer" . }}{{ partial "site-footer.html" .}}{{ end }}
</body>
diff --git a/documentation/themes/beastie/layouts/articles/list.html b/documentation/themes/beastie/layouts/articles/list.html
index e03ae61918..deecb60507 100644
--- a/documentation/themes/beastie/layouts/articles/list.html
+++ b/documentation/themes/beastie/layouts/articles/list.html
@@ -2,6 +2,15 @@
<main class="main-wrapper-article">
<div class="article">
<h1 class="title">{{ .Title }}</h1>
+ {{ $siteLanguage := string $.Site.Language }}
+ {{ if ne $siteLanguage "en" }}
+ <div class="admonitionblock note">
+ <p>
+ <i class="fa fa-exclamation-circle" aria-hidden="true"></i>
+ {{ i18n "stale-warning-message" }} <a href="https://translate-dev.freebsd.org/" target="_blank">{{ i18n "translation-instance" }}</a>.
+ </p>
+ </div>
+ {{ end }}
{{ if .Params.subtitle }}
<h3 class="subtitle">{{ .Params.subtitle }}</h3>
{{ end }}
@@ -36,9 +45,9 @@
{{ $pathSections := split .Page.File "/" }}
{{ $path := printf "%s/%s/%s_%s.pdf" (index $pathSections 0) (index $pathSections 1) (index $pathSections 1) $.Site.Home.Language }}
{{ $pdfUrl := printf "%s%s/%s" $.Site.Params.downloadBaseUrl $.Site.Home.Language $path }}
- <li><i class="fa fa-file-pdf-o" aria-hidden="true"></i><a href="{{ $pdfUrl }}">{{ i18n "download-pdf" }}</a></li>
+ <li><i class="fa fa-file-pdf-o" aria-hidden="true" title="{{ i18n "download-pdf" }}"></i><a href="{{ $pdfUrl }}">{{ i18n "download-pdf" }}</a></li>
{{ $editUrl := printf "%s%s/%s" $.Site.Params.editBaseUrl $.Site.Home.Language .Page.File }}
- <li><i class="fa fa-pencil-square-o" aria-hidden="true"></i><a href="{{ $editUrl }}" target="_blank">{{ i18n "edit-page" }}</a></li>
+ <li><i class="fa fa-pencil-square-o" aria-hidden="true" title="{{ i18n "edit-page" }}"></i><a href="{{ $editUrl }}" target="_blank">{{ i18n "edit-page" }}</a></li>
</ul>
</div>
</div>
diff --git a/documentation/themes/beastie/layouts/articles/single.html b/documentation/themes/beastie/layouts/articles/single.html
index e03ae61918..deecb60507 100644
--- a/documentation/themes/beastie/layouts/articles/single.html
+++ b/documentation/themes/beastie/layouts/articles/single.html
@@ -2,6 +2,15 @@
<main class="main-wrapper-article">
<div class="article">
<h1 class="title">{{ .Title }}</h1>
+ {{ $siteLanguage := string $.Site.Language }}
+ {{ if ne $siteLanguage "en" }}
+ <div class="admonitionblock note">
+ <p>
+ <i class="fa fa-exclamation-circle" aria-hidden="true"></i>
+ {{ i18n "stale-warning-message" }} <a href="https://translate-dev.freebsd.org/" target="_blank">{{ i18n "translation-instance" }}</a>.
+ </p>
+ </div>
+ {{ end }}
{{ if .Params.subtitle }}
<h3 class="subtitle">{{ .Params.subtitle }}</h3>
{{ end }}
@@ -36,9 +45,9 @@
{{ $pathSections := split .Page.File "/" }}
{{ $path := printf "%s/%s/%s_%s.pdf" (index $pathSections 0) (index $pathSections 1) (index $pathSections 1) $.Site.Home.Language }}
{{ $pdfUrl := printf "%s%s/%s" $.Site.Params.downloadBaseUrl $.Site.Home.Language $path }}
- <li><i class="fa fa-file-pdf-o" aria-hidden="true"></i><a href="{{ $pdfUrl }}">{{ i18n "download-pdf" }}</a></li>
+ <li><i class="fa fa-file-pdf-o" aria-hidden="true" title="{{ i18n "download-pdf" }}"></i><a href="{{ $pdfUrl }}">{{ i18n "download-pdf" }}</a></li>
{{ $editUrl := printf "%s%s/%s" $.Site.Params.editBaseUrl $.Site.Home.Language .Page.File }}
- <li><i class="fa fa-pencil-square-o" aria-hidden="true"></i><a href="{{ $editUrl }}" target="_blank">{{ i18n "edit-page" }}</a></li>
+ <li><i class="fa fa-pencil-square-o" aria-hidden="true" title="{{ i18n "edit-page" }}"></i><a href="{{ $editUrl }}" target="_blank">{{ i18n "edit-page" }}</a></li>
</ul>
</div>
</div>
diff --git a/documentation/themes/beastie/layouts/articles/total-list.html b/documentation/themes/beastie/layouts/articles/total-list.html
index 1a279510ad..e266ed2618 100644
--- a/documentation/themes/beastie/layouts/articles/total-list.html
+++ b/documentation/themes/beastie/layouts/articles/total-list.html
@@ -1,6 +1,6 @@
{{ define "main" }}
<main class="main-wrapper">
- <div class="article">
+ <div class="document">
{{ .Content }}
</div>
</main>
diff --git a/documentation/themes/beastie/layouts/books/list.html b/documentation/themes/beastie/layouts/books/list.html
index a9fcae0cbc..2668a3de8a 100644
--- a/documentation/themes/beastie/layouts/books/list.html
+++ b/documentation/themes/beastie/layouts/books/list.html
@@ -5,7 +5,6 @@
{{ if eq .Params.showBookMenu true }}
<aside class="book-menu">
<div class="book-menu-content">
- <h3>{{ i18n "book-chapters" }}</h3>
<input id="search-book" type="text" placeholder="{{ i18n "search" }}" aria-label="{{ i18n "search" }}" maxlength="128" />
<nav id="MenuContents">
{{ partial "menu" . }}
@@ -18,13 +17,22 @@
<div class="book-menu-mobile">
<label for="menu-control">
<span class="menu-control-button">
- <i class="fa fa-list" aria-hidden="true"></i>
+ <i class="fa fa-list" aria-hidden="true" title="{{ i18n "book-menu" }}"></i>
{{ i18n "book-menu" }}
</span>
</label>
</div>
{{ end }}
<h1 class="title">{{ .Title }}</h1>
+ {{ $siteLanguage := string $.Site.Language }}
+ {{ if ne $siteLanguage "en" }}
+ <div class="admonitionblock note">
+ <p>
+ <i class="fa fa-exclamation-circle" aria-hidden="true"></i>
+ {{ i18n "stale-warning-message" }} <a href="https://translate-dev.freebsd.org/" target="_blank">{{ i18n "translation-instance" }}</a>.
+ </p>
+ </div>
+ {{ end }}
{{ if .Params.copyright }}
<div class="copyright">
Copyright © {{ .Params.copyright }}
@@ -61,7 +69,7 @@
<div class="buttons">
{{ if .Params.prev }}
<div class="prev">
- <i class="fa fa-angle-left" aria-hidden="true"></i>
+ <i class="fa fa-angle-left" aria-hidden="true" title="{{ i18n "prev" }}"></i>
<div class="container">
{{ if $.Site.Params.isOnline }}
<a href={{ .Params.Prev | absLangURL }} class="direction">{{ i18n "prev" }}</a>
@@ -80,7 +88,7 @@
</div>
{{ end }}
<div class="home">
- <i class="fa fa-home" aria-hidden="true"></i>
+ <i class="fa fa-home" aria-hidden="true" title="{{ i18n "home" }}"></i>
<div class="container">
{{ if $.Site.Params.isOnline }}
<a href="../" class="direction">{{ i18n "home" }}</a>
@@ -107,7 +115,7 @@
{{ end }}
{{ end }}
</div>
- <i class="fa fa-angle-right" aria-hidden="true"></i>
+ <i class="fa fa-angle-right" aria-hidden="true" title="{{ i18n "next" }}"></i>
</div>
{{ end }}
</div>
@@ -122,15 +130,11 @@
<h3>{{ i18n "resources" }}</h3>
<ul class="contents">
{{ $pathSections := split .Page.File "/" }}
- {{ if $.Site.Params.isOnline }}
- {{ $singlePagePath := printf "%s/%s/book/" (index $pathSections 0) (index $pathSections 1) }}
- <li><i class="fa fa fa-book" aria-hidden="true"></i><a href={{ $singlePagePath | absLangURL }}>{{ i18n "single-html" }}</a></li>
- {{ end }}
{{ $path := printf "%s/%s/%s_%s.pdf" (index $pathSections 0) (index $pathSections 1) (index $pathSections 1) $.Site.Home.Language }}
{{ $pdfUrl := printf "%s%s/%s" $.Site.Params.downloadBaseUrl $.Site.Home.Language $path }}
- <li><i class="fa fa-file-pdf-o" aria-hidden="true"></i><a href="{{ $pdfUrl }}">{{ i18n "download-pdf" }}</a></li>
+ <li><i class="fa fa-file-pdf-o" aria-hidden="true" title="{{ i18n "download-pdf" }}"></i><a href="{{ $pdfUrl }}">{{ i18n "download-pdf" }}</a></li>
{{ $editUrl := printf "%s%s/%s" $.Site.Params.editBaseUrl $.Site.Home.Language .Page.File }}
- <li><i class="fa fa-pencil-square-o" aria-hidden="true"></i><a href="{{ $editUrl }}" target="_blank">{{ i18n "edit-page" }}</a></li>
+ <li><i class="fa fa-pencil-square-o" aria-hidden="true" title="{{ i18n "edit-page" }}"></i><a href="{{ $editUrl }}" target="_blank">{{ i18n "edit-page" }}</a></li>
</ul>
</div>
</div>
diff --git a/documentation/themes/beastie/layouts/books/single.html b/documentation/themes/beastie/layouts/books/single.html
index a9fcae0cbc..2668a3de8a 100644
--- a/documentation/themes/beastie/layouts/books/single.html
+++ b/documentation/themes/beastie/layouts/books/single.html
@@ -5,7 +5,6 @@
{{ if eq .Params.showBookMenu true }}
<aside class="book-menu">
<div class="book-menu-content">
- <h3>{{ i18n "book-chapters" }}</h3>
<input id="search-book" type="text" placeholder="{{ i18n "search" }}" aria-label="{{ i18n "search" }}" maxlength="128" />
<nav id="MenuContents">
{{ partial "menu" . }}
@@ -18,13 +17,22 @@
<div class="book-menu-mobile">
<label for="menu-control">
<span class="menu-control-button">
- <i class="fa fa-list" aria-hidden="true"></i>
+ <i class="fa fa-list" aria-hidden="true" title="{{ i18n "book-menu" }}"></i>
{{ i18n "book-menu" }}
</span>
</label>
</div>
{{ end }}
<h1 class="title">{{ .Title }}</h1>
+ {{ $siteLanguage := string $.Site.Language }}
+ {{ if ne $siteLanguage "en" }}
+ <div class="admonitionblock note">
+ <p>
+ <i class="fa fa-exclamation-circle" aria-hidden="true"></i>
+ {{ i18n "stale-warning-message" }} <a href="https://translate-dev.freebsd.org/" target="_blank">{{ i18n "translation-instance" }}</a>.
+ </p>
+ </div>
+ {{ end }}
{{ if .Params.copyright }}
<div class="copyright">
Copyright © {{ .Params.copyright }}
@@ -61,7 +69,7 @@
<div class="buttons">
{{ if .Params.prev }}
<div class="prev">
- <i class="fa fa-angle-left" aria-hidden="true"></i>
+ <i class="fa fa-angle-left" aria-hidden="true" title="{{ i18n "prev" }}"></i>
<div class="container">
{{ if $.Site.Params.isOnline }}
<a href={{ .Params.Prev | absLangURL }} class="direction">{{ i18n "prev" }}</a>
@@ -80,7 +88,7 @@
</div>
{{ end }}
<div class="home">
- <i class="fa fa-home" aria-hidden="true"></i>
+ <i class="fa fa-home" aria-hidden="true" title="{{ i18n "home" }}"></i>
<div class="container">
{{ if $.Site.Params.isOnline }}
<a href="../" class="direction">{{ i18n "home" }}</a>
@@ -107,7 +115,7 @@
{{ end }}
{{ end }}
</div>
- <i class="fa fa-angle-right" aria-hidden="true"></i>
+ <i class="fa fa-angle-right" aria-hidden="true" title="{{ i18n "next" }}"></i>
</div>
{{ end }}
</div>
@@ -122,15 +130,11 @@
<h3>{{ i18n "resources" }}</h3>
<ul class="contents">
{{ $pathSections := split .Page.File "/" }}
- {{ if $.Site.Params.isOnline }}
- {{ $singlePagePath := printf "%s/%s/book/" (index $pathSections 0) (index $pathSections 1) }}
- <li><i class="fa fa fa-book" aria-hidden="true"></i><a href={{ $singlePagePath | absLangURL }}>{{ i18n "single-html" }}</a></li>
- {{ end }}
{{ $path := printf "%s/%s/%s_%s.pdf" (index $pathSections 0) (index $pathSections 1) (index $pathSections 1) $.Site.Home.Language }}
{{ $pdfUrl := printf "%s%s/%s" $.Site.Params.downloadBaseUrl $.Site.Home.Language $path }}
- <li><i class="fa fa-file-pdf-o" aria-hidden="true"></i><a href="{{ $pdfUrl }}">{{ i18n "download-pdf" }}</a></li>
+ <li><i class="fa fa-file-pdf-o" aria-hidden="true" title="{{ i18n "download-pdf" }}"></i><a href="{{ $pdfUrl }}">{{ i18n "download-pdf" }}</a></li>
{{ $editUrl := printf "%s%s/%s" $.Site.Params.editBaseUrl $.Site.Home.Language .Page.File }}
- <li><i class="fa fa-pencil-square-o" aria-hidden="true"></i><a href="{{ $editUrl }}" target="_blank">{{ i18n "edit-page" }}</a></li>
+ <li><i class="fa fa-pencil-square-o" aria-hidden="true" title="{{ i18n "edit-page" }}"></i><a href="{{ $editUrl }}" target="_blank">{{ i18n "edit-page" }}</a></li>
</ul>
</div>
</div>
diff --git a/documentation/themes/beastie/layouts/books/total-list.html b/documentation/themes/beastie/layouts/books/total-list.html
index 1a279510ad..e266ed2618 100644
--- a/documentation/themes/beastie/layouts/books/total-list.html
+++ b/documentation/themes/beastie/layouts/books/total-list.html
@@ -1,6 +1,6 @@
{{ define "main" }}
<main class="main-wrapper">
- <div class="article">
+ <div class="document">
{{ .Content }}
</div>
</main>
diff --git a/documentation/themes/beastie/layouts/index.html b/documentation/themes/beastie/layouts/index.html
index 2a4dc2cde1..5d69987cc1 100644
--- a/documentation/themes/beastie/layouts/index.html
+++ b/documentation/themes/beastie/layouts/index.html
@@ -1,72 +1,68 @@
{{ define "main" }}
- {{ $language := "" }}
- {{ $currentLang := $.Site.Language.Lang }}
+ {{ $downloadurl := "" }}
+ {{ $language := $.Site.Language.Lang }}
- {{ if ne $currentLang "en" }}
- {{ $language = $currentLang }}
+ {{ if ne $language "en" }}
+ {{ $downloadurl = printf "%s/%s/%s/" $.Site.Params.websiteURL $language "where" }}
+ {{ else }}
+ {{ $downloadurl = printf "%s/%s/" $.Site.Params.websiteURL "where" }}
{{ end }}
<main class="main-wrapper">
{{ partial "global-search.html" . }}
<section class="cards-container">
- <div class="row">
- <div class="card">
- <a href={{ "books/handbook/basics" | absLangURL }}>
- <h5>{{ i18n "getting-started" }}</h5>
- <p>{{ i18n "learn-basics" }}</p>
- </a>
- </div>
- <div class="card">
- <a href={{ printf "%s%s/%s" $.Site.Params.websiteURL $language "where" }}>
- <h5>{{ i18n "download" }}</h5>
- <p>{{ i18n "download-freebsd" }}</p>
- </a>
- </div>
- <div class="card">
- <a href={{ "books/handbook/" | absLangURL }}>
- <h5>{{ i18n "handbook" }}</h5>
- <p>{{ i18n "handbook-desc" }}</p>
- </a>
- </div>
+ <div class="card">
+ <a href={{ "books/handbook/basics" | absLangURL }}>
+ <h5>{{ i18n "getting-started" }}</h5>
+ <p>{{ i18n "learn-basics" }}</p>
+ </a>
</div>
- <div class="row">
- <div class="card">
- <a href={{ "books/porters-handbook/" | absLangURL }}>
- <h5>{{ i18n "porters-handbook" }}</h5>
- <p>{{ i18n "porters-handbook-desc" }}</p>
- </a>
- </div>
- <div class="card">
- <a href={{ "books/faq/" | absLangURL }}>
- <h5>{{ i18n "faq" }}</h5>
- <p>{{ i18n "faq-desc" }}</p>
- </a>
- </div>
- <div class="card">
- <a href={{ "books/fdp-primer/" | absLangURL }}>
- <h5>{{ i18n "fdp" }}</h5>
- <p>{{ i18n "fdp-desc" }}</p>
- </a>
- </div>
+ <div class="card">
+ <a href={{ $downloadurl }}>
+ <h5>{{ i18n "download" }}</h5>
+ <p>{{ i18n "download-freebsd" }}</p>
+ </a>
</div>
- <div class="row">
- <div class="card">
- <a href={{ "books" | absLangURL }}>
- <h5>{{ i18n "books" }}</h5>
- <p>{{ i18n "books-list" }}</p>
- </a>
- </div>
- <div class="card">
- <a href={{ "articles" | absLangURL }}>
- <h5>{{ i18n "articles" }}</h5>
- <p>{{ i18n "articles-list" }}</p>
- </a>
- </div>
- <div class="card">
- <a href="https://www.FreeBSD.org/cgi/man.cgi">
- <h5>{{ i18n "manual-pages" }}</h5>
- <p>{{ i18n "manual-pages-desc" }}</p>
- </a>
- </div>
+ <div class="card">
+ <a href={{ "books/handbook/" | absLangURL }}>
+ <h5>{{ i18n "handbook" }}</h5>
+ <p>{{ i18n "handbook-desc" }}</p>
+ </a>
+ </div>
+ <div class="card">
+ <a href={{ "books/porters-handbook/" | absLangURL }}>
+ <h5>{{ i18n "porters-handbook" }}</h5>
+ <p>{{ i18n "porters-handbook-desc" }}</p>
+ </a>
+ </div>
+ <div class="card">
+ <a href={{ "books/faq/" | absLangURL }}>
+ <h5>{{ i18n "faq" }}</h5>
+ <p>{{ i18n "faq-desc" }}</p>
+ </a>
+ </div>
+ <div class="card">
+ <a href="https://docs.FreeBSD.org/en/books/fdp-primer/">
+ <h5>{{ i18n "fdp" }}</h5>
+ <p>{{ i18n "fdp-desc" }}</p>
+ </a>
+ </div>
+ <div class="card">
+ <a href={{ "books" | absLangURL }}>
+ <h5>{{ i18n "books" }}</h5>
+ <p>{{ i18n "books-list" }}</p>
+ </a>
+ </div>
+ <div class="card">
+ <a href={{ "articles" | absLangURL }}>
+ <h5>{{ i18n "articles" }}</h5>
+ <p>{{ i18n "articles-list" }}</p>
+ </a>
+ </div>
+ <div class="card">
+ <a href="https://man.FreeBSD.org/cgi/man.cgi">
+ <h5>{{ i18n "manual-pages" }}</h5>
+ <p>{{ i18n "manual-pages-desc" }}</p>
+ </a>
</div>
</section>
</main>
diff --git a/documentation/themes/beastie/layouts/partials/global-search.html b/documentation/themes/beastie/layouts/partials/global-search.html
index 8d497ec2b3..26b3c0db4b 100644
--- a/documentation/themes/beastie/layouts/partials/global-search.html
+++ b/documentation/themes/beastie/layouts/partials/global-search.html
@@ -6,12 +6,10 @@
</a>
</div>
<p>{{ i18n "freebsd-documentation-main-desc" }}</p>
- <form method="get" id="search-form" action="https://duckduckgo.com/" onsubmit="document.getElementById('words').value+=' site:docs.FreeBSD.org'" name="search-form">
- <input type="hidden" name="ka" value="v">
- <input type="hidden" name="kt" value="v">
- <input type="hidden" name="kh" value="1">
- <input type="hidden" name="kj" value="r2">
- <input id="words" name="q" type="text" size="20" maxlength="255" onfocus="if( this.value==this.defaultValue ) this.value='';" value="" placeholder="{{ i18n "global-search-placeholder" }}">
+ {{ $currentLanguage := $.Site.Language }}
+ <form class="search" method="get" id="search-form" action="https://docs.freebsd.org/search" name="search-form">
+ <input type="hidden" name="DB" value="{{ $currentLanguage }}" />
+ <input id="global-search-input" name="P" type="text" size="20" maxlength="255" value="" placeholder="{{ i18n "global-search-placeholder" }}">
<span>&nbsp;</span>
</form>
</section>
diff --git a/documentation/themes/beastie/layouts/partials/menu.html b/documentation/themes/beastie/layouts/partials/menu.html
index 1b3ddf3b7d..e189abad53 100644
--- a/documentation/themes/beastie/layouts/partials/menu.html
+++ b/documentation/themes/beastie/layouts/partials/menu.html
@@ -1,4 +1,12 @@
-{{ with .Site.GetPage .Params.path }}
+{{/* always extract the first part of the path to match it only with the main document/book. */}}
+{{ $path := "" }}
+{{ $regex := `^(\/[^\/]+\/[^\/]+)` }}
+{{ $matches := findRE $regex .Params.path }}
+{{ if gt (len $matches) 0 }}
+ {{ $path = index $matches 0 }}
+{{ end }}
+
+{{ with .Site.GetPage $path }}
<ul>
{{ range .Pages }}
<li>
diff --git a/documentation/themes/beastie/layouts/partials/site-footer.html b/documentation/themes/beastie/layouts/partials/site-footer.html
index 06099138e9..aab2506f36 100755
--- a/documentation/themes/beastie/layouts/partials/site-footer.html
+++ b/documentation/themes/beastie/layouts/partials/site-footer.html
@@ -1,67 +1,114 @@
<footer>
- <div class="container">
- <div class="footer-project-language">
- <h1>
- {{ i18n "freebsd-project" }}
- </h1>
- <div class="options-container">
+ <div class="footer-container">
+ <section class="logo-column">
{{ if $.Site.Params.isOnline }}
- <div class="language-container">
- <a id="languages" href="{{ "languages" | absLangURL }}">
- <img src="{{ absLangURL ($.Site.BaseURL ) }}images/language.png" class="language-image" alt="{{ i18n "choose-language" }}">
- <span>{{ .Site.Language.LanguageName }}</span>
- </a>
- </div>
+ <img src="{{ absLangURL ($.Site.BaseURL) }}images/FreeBSD-colors.svg" width="160" height="50" alt="FreeBSD logo" />
+ {{ else }}
+ <img src="/images/FreeBSD-colors.svg" width="160" height="50" alt="FreeBSD logo" />
{{ end }}
- <div class="theme-container">
- <select id="theme-chooser">
- <option value="theme-light">{{ i18n "light" }}</option>
- <option value="theme-dark">{{ i18n "dark" }}</option>
- <option value="theme-high-contrast">{{ i18n "high-contrast" }}</option>
- </select>
+ <div class="options-container">
+ {{ if $.Site.Params.isOnline }}
+ <div class="language-container">
+ <a id="languages" href="{{ "languages" | absLangURL }}">
+ <img src="{{ absLangURL ($.Site.BaseURL ) }}images/language.png" class="language-image" alt="{{ i18n "choose-language" }}">
+ <span>{{ .Site.Language.LanguageName }}</span>
+ </a>
+ </div>
+ {{ end }}
+ <div class="theme-container">
+ <select id="theme-chooser">
+ <option value="theme-system">{{ i18n "system" }}</option>
+ <option value="theme-light">{{ i18n "light" }}</option>
+ <option value="theme-dark">{{ i18n "dark" }}</option>
+ <option value="theme-high-contrast">{{ i18n "high-contrast" }}</option>
+ </select>
+ </div>
</div>
- </div>
- </div>
- <ul class="footer-nav">
- <li>
- <h2 class="title">{{ i18n "documentation" }}</h2>
- <ul>
+ </section>
+ <section class="about-column">
+ <h3 class="column-title">{{ i18n "f-about" }}</h3>
+ <ul class="column-elements-container">
+ <li>
+ <a href="https://www.freebsd.org/about/" target="_blank" class="column-element">{{ i18n "f-freebsd" }}</a>
+ </li>
+ <li>
+ <a href="https://freebsdfoundation.org/" target="_blank" class="column-element">{{ i18n "f-freebsd-foundation" }}</a>
+ </li>
+ <li>
+ <a href="https://www.freebsd.org/where/" target="_blank" class="column-element">{{ i18n "f-get-freebsd" }}</a>
+ </li>
<li>
- <a href="https://docs-legacy.freebsd.org/doc/">{{ i18n "previous-versions" }}</a>
+ <a href="https://www.freebsd.org/internal/code-of-conduct" target="_blank" class="column-element">{{ i18n "f-code-of-conduct" }}</a>
</li>
<li>
- <a href="https://docs-legacy.freebsd.org/44doc/">{{ i18n "4-4bsd-documents" }}</a>
+ <a href="https://www.freebsd.org/security/" target="_blank" class="column-element">{{ i18n "f-security-advisories" }}</a>
</li>
</ul>
- </li>
- <li>
- <h2 class="title">{{ i18n "about" }}</h2>
- <ul>
+ </section>
+ <section class="documentation-column">
+ <h3 class="column-title">{{ i18n "f-documentation" }}</h3>
+ <ul class="column-elements-container">
+ <li>
+ <a href="{{ .Site.BaseURL | relLangURL }}" class="column-element">{{ i18n "f-documentation-portal" }}</a>
+ </li>
+ <li>
+ <a href="https://man.FreeBSD.org" target="_blank" class="column-element">{{ i18n "f-manual-pages" }}</a>
+ </li>
+ <li>
+ <a href="https://papers.FreeBSD.org" target="_blank" class="column-element">{{ i18n "f-presentation-and-papers" }}</a>
+ </li>
+ <li>
+ <a href="https://docs-archive.freebsd.org/doc/" target="_blank" class="column-element">{{ i18n "f-previous-versions" }}</a>
+ </li>
<li>
- <a href="https://www.FreeBSD.org/">{{ i18n "freebsd-project" }}</a>
+ <a href="https://docs-archive.freebsd.org/44doc/" target="_blank" class="column-element">{{ i18n "f-44bsd-documents" }}</a>
</li>
<li>
- <a href="https://freebsdfoundation.org/">{{ i18n "freebsd-foundation" }}</a>
+ <a href="https://wiki.freebsd.org/" target="_blank" class="column-element">{{ i18n "f-wiki" }}</a>
</li>
</ul>
- </li>
- <li>
- <h2 class="title">{{ i18n "legal" }}</h2>
- <ul>
+ </section>
+ <section class="community-column">
+ <h3 class="column-title">{{ i18n "f-community" }}</h3>
+ <ul class="column-elements-container">
+ <li>
+ <a href={{ "articles/contributing" | absLangURL }} class="column-element">{{ i18n "f-get-involved" }}</a>
+ </li>
+ <li>
+ <a href="https://forums.freebsd.org/" target="_blank" class="column-element">{{ i18n "f-community-forum" }}</a>
+ </li>
+ <li>
+ <a href="https://lists.freebsd.org/" target="_blank" class="column-element">{{ i18n "f-mailing-lists" }}</a>
+ </li>
+ <li>
+ <a href="https://wiki.freebsd.org/IRC/Channels" target="_blank" class="column-element">{{ i18n "f-irc-channels" }}</a>
+ </li>
+ <li>
+ <a href="https://bugs.freebsd.org/bugzilla/" target="_blank" class="column-element">{{ i18n "f-bug-tracker" }}</a>
+ </li>
+ </ul>
+ </section>
+ <section class="legal-column">
+ <h3 class="column-title">{{ i18n "f-legal" }}</h3>
+ <ul class="column-elements-container">
+ <li>
+ <a href="https://freebsdfoundation.org/donate/" target="_blank" class="column-element">{{ i18n "f-donations" }}</a>
+ </li>
+ <li>
+ <a href="https://www.freebsd.org/copyright/freebsd-license/" target="_blank"
+ class="column-element">{{ i18n "f-licensing" }}</a>
+ </li>
<li>
- <a href="https://freebsdfoundation.org/donate/">{{ i18n "donations" }}</a>
+ <a href="https://www.freebsd.org/privacy/" target="_blank" class="column-element">{{ i18n "f-privacy-policy" }}</a>
</li>
<li>
- <a href="https://www.freebsd.org/copyright/">{{ i18n "legal-notices" }}</a>
+ <a href="https://www.freebsd.org/copyright/" target="_blank" class="column-element">{{ i18n "f-legal-notices" }}</a>
</li>
</ul>
- </li>
- </ul>
- <div class="copyright">
- <p>&copy; 1995-{{ now.Format "2006" }} {{ i18n "freebsd-project" }} {{ i18n "copyright" }}
- <div class="love">
- <span>{{ i18n "made-with" }} <span class="heart">♥</span> {{ i18n "by-freebsd-community" }}</span>
- </div>
- </div>
+ </section>
+ <section class="copyright-column">
+ <p>&copy; 1994-{{ now.Format "2006" }} {{ i18n "f-all-rights-reserved" }}</p>
+ <span>{{ i18n "f-made-with" }} <span class="heart">♥</span> {{ i18n "f-by-freebsd-community" }}</span>
+ </section>
</div>
</footer>
diff --git a/documentation/themes/beastie/layouts/partials/site-head.html b/documentation/themes/beastie/layouts/partials/site-head.html
index 7db1145ebd..1031387406 100644
--- a/documentation/themes/beastie/layouts/partials/site-head.html
+++ b/documentation/themes/beastie/layouts/partials/site-head.html
@@ -2,14 +2,14 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="{{ if .IsHome }}{{ .Site.Params.description }}{{ else }}{{ .Description }}{{ end }}"/>
- <meta name="keywords" content="{{ with .Site.Params.tags -}}{{ delimit . ", " }}{{- end }}" />
- <meta name="copyright" content="1995-2021 The FreeBSD Foundation">
+ <meta name="keywords" content="{{ with .Params.tags -}}{{ delimit . ", "}}{{- end }}"/>
+ <meta name="copyright" content="1995-{{ now.Format "2006" }} The FreeBSD Foundation" />
<link rel="canonical" href="{{ .Permalink }}" />
<title>{{ with .Params.Title }}{{ . }} | {{ end }} {{ block "title" . }}{{ .Site.Title }}{{ end }}</title>
<meta name="theme-color" content="#790000">
- <meta name="color-scheme" content="light dark high-contrast">
+ <meta name="color-scheme" content="system light dark high-contrast">
{{ if $.Site.Params.isOnline }}
<link rel="shortcut icon" href="{{ absLangURL ($.Site.BaseURL) }}favicon.ico">
diff --git a/documentation/themes/beastie/layouts/partials/site-header.html b/documentation/themes/beastie/layouts/partials/site-header.html
index 25e98b01fc..642ca7e468 100755
--- a/documentation/themes/beastie/layouts/partials/site-header.html
+++ b/documentation/themes/beastie/layouts/partials/site-header.html
@@ -1,21 +1,105 @@
<header>
- <nav>
- <a href="{{ $.Site.Params.websiteURL }}" class="logo">
+ <div class="header-container">
+ <div class="logo-menu-bars-container">
+ <a href="{{ $.Site.Params.websiteURL }}" class="logo">
{{ if $.Site.Params.isOnline }}
- <img src="{{ absLangURL ($.Site.BaseURL) }}images/freebsd-logo.svg" width="160" height="50" alt="FreeBSD logo" />
+ <img src="{{ absLangURL ($.Site.BaseURL) }}images/FreeBSD-monochromatic.svg" width="160" height="50" alt="FreeBSD logo" />
{{ else }}
- <img src="/images/freebsd-logo.svg" width="160" height="50" alt="FreeBSD logo" />
+ <img src="/images/FreeBSD-monochromatic.svg" width="160" height="50" alt="FreeBSD logo" />
{{ end }}
- </a>
- <input class="menu-btn" type="checkbox" id="menu-btn" />
- <label class="menu-icon" for="menu-btn"><span class="navicon"></span></label>
- <ul class="menu">
- {{ if $.Site.Params.isOnline }}
- <li class="first-element"><a href="{{ .Site.BaseURL | relLangURL }}">{{ i18n "documentation" }}</a></li>
- <li><a href={{ "books" | absLangURL }}>{{ i18n "books" }}</a></li>
- <li><a href={{ "articles" | absLangURL }}>{{ i18n "articles" }}</a></li>
- <!--<li><a href={{ "communit" | absLangURL }}>{{ i18n "community" }}</a></li>-->
- {{ end }}
- </ul>
- </nav>
+ </a>
+ <label class="menu-bars" for="menu-bars">
+ <i class="fa fa-bars" aria-hidden="true"></i>
+ </label>
+ </div>
+ <input id="menu-bars" type="checkbox" />
+ <nav>
+ <ul class="menu">
+ <li class="menu-item">
+ <input id="about" type="checkbox" />
+ <a href="#" aria-label="Navigate to About section">
+ <label class="menu-item-description" for="about">
+ {{ i18n "h-about" }}
+ <i class="fa fa-angle-down fa-lg" aria-hidden="true"></i>
+ </label>
+ </a>
+ <ul class="sub-menu">
+ <li class="title"><a href="https://www.freebsd.org/about/" target="_blank">{{ i18n "h-about" }}</a></li>
+ <li><a href="https://www.freebsd.org/about/" target="_blank">{{ i18n "h-freebsd" }}</a></li>
+ <li><a href="https://freebsdfoundation.org/about-us/about-the-foundation/" target="_blank">{{ i18n "h-freebsd-foundation" }}</a></li>
+ <li><a href="https://www.freebsd.org/internal/code-of-conduct/" target="_blank">{{ i18n "h-code-of-conduct" }}</a></li>
+ </ul>
+ </li>
+ <li class="menu-item">
+ <input id="download" type="checkbox" />
+ <a href="#" aria-label="Navigate to get FreeBSD section">
+ <label class="menu-item-description" for="download">
+ {{ i18n "h-get-freebsd" }}
+ <i class="fa fa-angle-down fa-lg" aria-hidden="true"></i>
+ </label>
+ </a>
+ <ul class="sub-menu">
+ <li class="title"><a href="https://www.freebsd.org/where/" target="_blank">{{ i18n "h-get-freebsd" }}</a></li>
+ <li><a href="https://www.freebsd.org/releases/" target="_blank">{{ i18n "h-release-information" }}</a></li>
+ <li><a href="https://www.freebsd.org/releng/" target="_blank">{{ i18n "h-release-engineering" }}</a></li>
+ <li><a href="https://www.freebsd.org/security/" target="_blank">{{ i18n "h-security-advisories" }}</a></li>
+ </ul>
+ </li>
+ <li class="menu-item">
+ <input id="documentation" type="checkbox" />
+ <a href="#" aria-label="Navigate to get Documentation section">
+ <label class="menu-item-description" for="documentation">
+ {{ i18n "h-documentation" }}
+ <i class="fa fa-angle-down fa-lg" aria-hidden="true"></i>
+ </label>
+ </a>
+ <ul class="sub-menu">
+ <li class="title"><a href="{{ .Site.BaseURL | relLangURL }}">{{ i18n "h-documentation-portal" }}</a></li>
+ <li><a href={{ "books/handbook" | absLangURL }}>{{ i18n "h-freebsd-handbook" }}</a></li>
+ <li><a href={{ "books/porters-handbook" | absLangURL }}>{{ i18n "h-porter-handbook" }}</a></li>
+ <li><a href="https://docs.FreeBSD.org/en/books/fdp-primer">{{ i18n "h-documentation-handbook" }}</a></li>
+ <li><a href="https://man.FreeBSD.org" target="_blank">{{ i18n "h-manual-pages" }}</a></li>
+ <li><a href="https://papers.FreeBSD.org" target="_blank">{{ i18n "h-presentation-and-papers" }}</a></li>
+ <li><a href="https://wiki.FreeBSD.org" target="_blank">{{ i18n "h-wiki" }}</a></li>
+ <li><a href={{ "books" | absLangURL }}>{{ i18n "h-books" }}</a></li>
+ <li><a href={{ "articles" | absLangURL }}>{{ i18n "h-articles" }}</a></li>
+ </ul>
+ </li>
+ <li class="menu-item">
+ <input id="community" type="checkbox" />
+ <a href="#" aria-label="Navigate to get Community section">
+ <label class="menu-item-description" for="community">
+ {{ i18n "h-community" }}
+ <i class="fa fa-angle-down fa-lg" aria-hidden="true"></i>
+ </label>
+ </a>
+ <ul class="sub-menu">
+ <li class="title"><a href="https://www.freebsd.org/community/">{{ i18n "h-community" }}</a></li>
+ <li><a href={{ "articles/contributing" | absLangURL }}>{{ i18n "h-get-involved" }}</a></li>
+ <li><a href="https://forums.freebsd.org/" target="_blank">{{ i18n "h-community-forum" }}</a></li>
+ <li><a href="https://lists.freebsd.org/" target="_blank">{{ i18n "h-mailing-lists" }}</a></li>
+ <li><a href="https://wiki.freebsd.org/IRC/Channels" target="_blank">{{ i18n "h-irc-channels" }}</a></li>
+ <li><a href="https://bugs.freebsd.org/bugzilla/" target="_blank">{{ i18n "h-bug-tracker" }}</a></li>
+ <li><a href="https://www.freebsd.org/support/" target="_blank">{{ i18n "h-support" }}</a></li>
+ </ul>
+ </li>
+ </ul>
+ </nav>
+ <div class="search-donate-container">
+ {{ $currentLanguage := $.Site.Language }}
+ <form class="search" method="get" id="search-header-form" action="https://docs.freebsd.org/search" name="search-header-form">
+ <input type="hidden" name="DB" value="{{ $currentLanguage }}" />
+ <input id="words" name="P" type="text" size="20" maxlength="255" value="" />
+ <button>
+ <i class="fa fa-search" aria-hidden="true"></i>
+ </button>
+ </form>
+ <div class="donate">
+ <a href="https://freebsdfoundation.org/donate/" target="_blank">
+ <span class="heart">♥</span>
+ {{ i18n "h-donate" }}
+ </a>
+ </div>
+ </div>
+ </div>
</header>
diff --git a/documentation/themes/beastie/layouts/partials/trademarks.html b/documentation/themes/beastie/layouts/partials/trademarks.html
index d8dab2ac54..2266c2a2db 100644
--- a/documentation/themes/beastie/layouts/partials/trademarks.html
+++ b/documentation/themes/beastie/layouts/partials/trademarks.html
@@ -44,6 +44,18 @@
<p>{{ i18n "apple" }}</p>
{{ end }}
+ {{ if in $trademarks "git" }}
+ <p>{{ i18n "git" }}</p>
+ {{ end }}
+
+ {{ if in $trademarks "github" }}
+ <p>{{ i18n "github" }}</p>
+ {{ end }}
+
+ {{ if in $trademarks "gitlab" }}
+ <p>{{ i18n "gitlab" }}</p>
+ {{ end }}
+
{{ if in $trademarks "intel" }}
<p>{{ i18n "intel" }}</p>
{{ end }}
diff --git a/documentation/themes/beastie/layouts/robots.txt b/documentation/themes/beastie/layouts/robots.txt
index b94bcd43cf..2499651555 100644
--- a/documentation/themes/beastie/layouts/robots.txt
+++ b/documentation/themes/beastie/layouts/robots.txt
@@ -1,19 +1,4 @@
-# $FreeBSD$
-
User-agent: *
-#Crawl-delay: 10
-Disallow: /cgi/confirm-code.cgi
-Disallow: /cgi/cvsweb.cgi
-Disallow: /cgi/dosendpr.cgi
-Disallow: /cgi/getmsg.cgi
-Disallow: /cgi/mailindex.cgi
-Disallow: /cgi/man.cgi?apropos=2&
-Disallow: /cgi/mid.cgi
-Disallow: /cgi/mirror.cgi
-Disallow: /cgi/missing_handler.cgi
-Disallow: /cgi/ports.cgi
-Disallow: /cgi/query-pr-summary.cgi
-Disallow: /cgi/query-pr.cgi
-Disallow: /cgi/search.cgi
-Disallow: /cgi/url.cgi
Disallow: /statistic
+Disallow: /doc/
+
diff --git a/documentation/themes/beastie/layouts/shortcodes/list-articles-directories.html b/documentation/themes/beastie/layouts/shortcodes/list-articles-directories.html
index 6105d1e874..33eab8f495 100644
--- a/documentation/themes/beastie/layouts/shortcodes/list-articles-directories.html
+++ b/documentation/themes/beastie/layouts/shortcodes/list-articles-directories.html
@@ -1,14 +1,3 @@
-{{ $articles := slice}}
-
-{{ range where .Site.Pages "Section" "articles" }}
- {{ with .File }}
- {{ $subDirsNumer := .File.Path | strings.Count "/" }}
- {{ if eq $subDirsNumer 2 }}
- {{ $articles = $articles | append (dict "page" . "path" .File.Path) }}
- {{ end }}
- {{ end }}
-{{ end }}
-
{{ partial "global-search.html" . }}
<h1>{{ i18n "articles" }}</h1>
@@ -17,25 +6,12 @@
<hr class="line"/>
-{{ $articles := slice}}
-
-{{ range where .Site.Pages "Section" "articles" }}
- {{ $subDirsNumer := .File.Path | strings.Count "/" }}
- {{ if eq $subDirsNumer 2 }}
- {{ $articles = $articles | append (dict "page" . "path" .File.Path) }}
- {{ end }}
-{{ end }}
-
-<ul class="articles-books-list">
-{{ range sort $articles "weight" "path" }}
- {{ if in .path "_index.adoc" }}
- {{ $articlePath := replaceRE "/_index.adoc" "" .path }}
- {{ $articlePath = replaceRE "articles/" "" $articlePath }}
- {{ $articleName := replaceRE "articles/" "" $articlePath }}
+<ul class="documents-list">
+{{ $articles := .Site.GetPage "section" "articles" }}
+{{ range $articles.Sections }}
<li>
- <a href="{{ $articlePath }}"><strong>{{ .page.Title }}</strong></a>
- <p>{{ .page.Params.description }}</p>
+ <a href="{{ .Permalink }}"><strong>{{ .Title }}</strong></a>
+ <p>{{ .Params.description }}</p>
</li>
- {{ end }}
{{ end }}
</ul>
diff --git a/documentation/themes/beastie/layouts/shortcodes/list-books-directories.html b/documentation/themes/beastie/layouts/shortcodes/list-books-directories.html
index 46e8aef165..d98353f942 100644
--- a/documentation/themes/beastie/layouts/shortcodes/list-books-directories.html
+++ b/documentation/themes/beastie/layouts/shortcodes/list-books-directories.html
@@ -1,14 +1,3 @@
-{{ $books := slice}}
-
-{{ range where .Site.Pages "Section" "books" }}
- {{ with .File }}
- {{ $subDirsNumer := .File.Path | strings.Count "/" }}
- {{ if eq $subDirsNumer 2 }}
- {{ $books = $books | append (dict "page" . "path" .File.Path) }}
- {{ end }}
- {{ end }}
-{{ end }}
-
{{ partial "global-search.html" . }}
<h1>{{ i18n "books" }}</h1>
@@ -17,25 +6,13 @@
<hr class="line"/>
-{{ $books := slice}}
-
-{{ range where .Site.Pages "Section" "books" }}
- {{ $subDirsNumer := .File.Path | strings.Count "/" }}
- {{ if eq $subDirsNumer 2 }}
- {{ $books = $books | append (dict "page" . "path" .File.Path) }}
- {{ end }}
-{{ end }}
+<ul class="documents-list">
-<ul class="articles-books-list">
-{{ range sort $books "bookOrder" "path" }}
- {{ if in .path "_index.adoc" }}
- {{ $bookPath := replaceRE "/_index.adoc" "" .path }}
- {{ $bookPath = replaceRE "books/" "" $bookPath }}
- {{ $articleName := replaceRE "books/" "" $bookPath }}
+{{ $books := .Site.GetPage "section" "books" }}
+{{ range $books.Sections }}
<li>
- <a href="{{ $bookPath }}"><strong>{{ .page.Title }}</strong></a>
- <p>{{ .page.Params.description }}</p>
+ <a href="{{ .Permalink }}"><strong>{{ .Title }}</strong></a>
+ <p>{{ .Params.description }}</p>
</li>
- {{ end }}
{{ end }}
</ul>
diff --git a/documentation/themes/beastie/static/images/FreeBSD-colors.svg b/documentation/themes/beastie/static/images/FreeBSD-colors.svg
new file mode 100755
index 0000000000..decb8e0f53
--- /dev/null
+++ b/documentation/themes/beastie/static/images/FreeBSD-colors.svg
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ viewBox="0 0 561 152"
+ fill="#fff"
+ fill-rule="evenodd"
+ stroke="#000"
+ stroke-linecap="round"
+ stroke-linejoin="round"
+ version="1.1"
+ id="svg11"
+ sodipodi:docname="FreeBSD-colors.svg"
+ inkscape:export-filename="freebsd-official.svg"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96"
+ inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <defs
+ id="defs15" />
+ <sodipodi:namedview
+ id="namedview13"
+ pagecolor="#ffffff"
+ bordercolor="#000000"
+ borderopacity="0.25"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ showgrid="false"
+ inkscape:zoom="3.1052633"
+ inkscape:cx="544.72032"
+ inkscape:cy="114.32203"
+ inkscape:window-width="1280"
+ inkscape:window-height="895"
+ inkscape:window-x="1280"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg11" />
+ <use
+ xlink:href="#A"
+ x="0"
+ y="0"
+ id="use2"
+ inkscape:label="logo"
+ transform="translate(0.5,0.5)" />
+ <text
+ xml:space="preserve"
+ style="font-size:6px;fill:#000000;fill-opacity:0"
+ x="159.96211"
+ y="10.23839"
+ id="text224"
+ inkscape:label="copyright"><tspan
+ sodipodi:role="line"
+ id="tspan222"
+ x="159.96211"
+ y="10.23839">®</tspan></text>
+ <symbol
+ id="A"
+ overflow="visible"
+ inkscape:label="FreeBSD-logo">
+ <g
+ stroke="none"
+ fill-rule="nonzero"
+ id="g8"
+ inkscape:label="container">
+ <path
+ d="M423.524 38.213c6.2 1.7 11.5 7.2 13.2 13.4 1.9 6.7-.2 13.5-4.7 18.6 5.5 3 10.2 7.7 12 13.8 1.7 5.7 1.3 12.3-1.6 17.5-3.2 5.7-9.2 10.3-15.6 11.7-3.5.7-7.2.5-10.8.5h-21.8c-2.8 0-4.2-2-4.2-4.5v-51.1c.1-25.9 27.6-21.5 33.5-19.9zm-26 21v9.6h22.8c8.9 0 10.3-12.4 9.1-16-1.3-3.8-4.9-6.3-8.5-7.5-3-.7-23.4-5.5-23.4 13.9zm0 16.6v30.3c0 .8 0 .7.8.7h17c4.7 0 9.6.2 14-2 5.5-2.7 8.8-10 8.2-16s-4.7-10.1-10.2-12.2c-2.7-1-6.5-.9-9.5-.9-3 .1-20.3.1-20.3.1zm104.5-33.7c0-3.3 2-5 6-5h20.6c20.5 0 31 19.8 31 38.8 0 19.4-12.7 38.2-33.1 38.2h-20.2c-3.3 0-4.4-.6-4.4-4.3v-67.7zm7.7 2.6v61.8h16.3c16.5 0 25.4-15.2 25.4-30.6 0-15.8-8-31.2-23.9-31.2zm-38.9.2c-6.7 0-12.9 5.5-12.9 12.7 0 6.5 8.7 10.2 17.3 14.9 9.1 5 18.9 9.9 18.9 20.5 0 14.5-10.9 22-24.9 22-6.4 0-12.3-1.7-17.4-5.1-1.8-1.2-2.7-2.7-2.7-4.5 0-2.3 1.1-3.4 3.4-3.4 1.1 0 2.3.4 3.6 1.2 4 2.4 9 3.9 13.5 3.9 8.8 0 16.3-3.9 16.3-13.6 0-6.1-7.3-9.9-15.2-14.1-9.9-5.2-21.1-10.9-21.1-21.4 0-13.3 10.1-21 22.8-21 5.5 0 11.5 1.5 17.2 4.7 1.9 1.1 2.8 2.9 2.8 4.7 0 2-1.4 4-3.5 4-1.2 0-2.4-.9-3.9-1.8-3.1-2.2-8.9-3.7-14.2-3.7zm-235.9 65.6c-.1 1.8-1.3 3.4-3.6 3.4s-3.5-1.7-3.5-3.5v-33.8c0-9.5 6.6-17.1 19.1-17.1 6.5 0 11.5 1.1 15.6 2.8 1.6.7 2.6 2.2 2.6 3.4 0 2.2-1.6 2.9-3.2 2.9-2.9 0-6.9-2.3-13-2.3-8.9 0-14.1 4.3-14.1 10.8zm-42.5-34.6v34.7c-.1 1.8-1.3 3.3-3.5 3.3-2.3 0-3.5-1.7-3.5-3.5v-50.7c.4-16.1 11.2-24.1 22.5-24.1h13.6c3 0 4.6 1.3 4.6 3.7 0 2.3-1.6 3.5-4.6 3.5h-13.3c-8.5 0-15.7 5.3-15.7 17.1l-.1 5s0-1.6 0 4.1h23.4c1.9 0 3.5 1.6 3.5 3.5s-1.6 3.5-3.5 3.5zm187.7 7.1c-.9-6.8-4.5-13.1-10.1-17.8-4.6-3.8-10.4-5.8-16.7-5.8-12.6 0-24.4 10-26.4 22.4-2.1 12.9 5.5 25.8 17.6 30 5.3 1.8 11.3 1.8 17.8-.1 2-.6 4.3-1.4 5.6-3 1-1.2 1-3.4 0-4.5-.7-.8-1.9-1.2-3.2-1.2-.4 0-.8.2-1.3.4-.1.1-.3.2-.5.2l-2.7 1.1c-3.6 1.3-7.2 1.5-10.8.8-3.9-.8-7.1-2.5-9.8-5.3-2.3-2.3-4-5.2-5-8.4l-.1-.4h41.8c1.3 0 2.3-.4 2.9-1.1 1.4-1.6 1.2-4.7.9-7.3zm-7.2 1.4h-39v-.4c.7-5.2 3.6-10.1 8-13.5 3.1-2.4 6.9-3.6 11.5-3.6 4.7 0 8.7 1.4 12.5 4.5 3.4 2.8 6.9 8 6.9 12.6v.4zm-54-1.4c-.9-6.8-4.5-13.1-10.1-17.8-4.6-3.8-10.4-5.8-16.7-5.8-12.6 0-24.4 10-26.4 22.4-2.1 12.9 5.5 25.8 17.6 30 5.3 1.8 11.3 1.8 17.8-.1 2-.6 4.3-1.4 5.6-3 1-1.2 1-3.4 0-4.5-.7-.8-1.9-1.2-3.2-1.2-.5 0-.8.2-1.3.4-.1.1-.3.2-.5.2l-2.7 1.1c-3.6 1.3-7.2 1.5-10.8.8-3.9-.8-7.1-2.5-9.8-5.3-2.3-2.3-4-5.2-5-8.4l-.1-.4h41.8c1.3 0 2.3-.4 2.9-1.1 1.4-1.6 1.2-4.7.9-7.3zm-7.3 1.4h-39l.1-.4c.7-5.2 3.6-10.1 8-13.5 3.1-2.4 6.9-3.6 11.5-3.6 4.7 0 8.7 1.4 12.5 4.5 3.4 2.8 6.9 8 6.9 12.6z"
+ fill="#070909"
+ id="path4"
+ inkscape:label="text" />
+ <path
+ d="M151.124 2.513c8.1 8.1-14.4 43.7-18.2 47.5s-13.4.3-21.5-7.8-11.6-17.7-7.8-21.5c3.8-3.9 39.4-26.3 47.5-18.2zm-113.6 8.6c-12.4-7-30-14.8-35.6-9.2-5.7 5.7 2.4 23.7 9.5 36.1 6.3-11.1 15.3-20.3 26.1-26.9zm101.2 36.1c1.1 3.9.9 7.1-.9 8.9-4.3 4.3-16-.3-26.5-10.3-.7-.7-1.5-1.3-2.2-2.1-3.8-3.8-6.8-7.8-8.6-11.6-3.7-6.6-4.6-12.4-1.8-15.2 1.5-1.5 3.9-1.9 6.9-1.4a148.97 148.97 0 0 1 6.7-4 73.24 73.24 0 0 0-33.9-8.3c-40.6 0-73.5 32.9-73.5 73.5s32.9 73.5 73.5 73.5 73.5-32.9 73.5-73.5c0-13.1-3.4-25.4-9.5-36.1-1.2 2.5-2.5 4.7-3.7 6.6z"
+ fill="#ad2829"
+ id="path6"
+ inkscape:label="image" />
+ </g>
+ </symbol>
+ <text
+ xml:space="preserve"
+ style="font-size:6px;fill:#000000;fill-opacity:0"
+ x="551.95764"
+ y="43.234615"
+ id="text224-1"
+ inkscape:label="copyright"><tspan
+ sodipodi:role="line"
+ id="tspan222-0"
+ x="551.95764"
+ y="43.234615">®</tspan></text>
+</svg>
diff --git a/documentation/themes/beastie/static/images/FreeBSD-monochromatic.svg b/documentation/themes/beastie/static/images/FreeBSD-monochromatic.svg
new file mode 100755
index 0000000000..e62c678fea
--- /dev/null
+++ b/documentation/themes/beastie/static/images/FreeBSD-monochromatic.svg
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ version="1.1"
+ id="svg2"
+ xml:space="preserve"
+ width="746.15997"
+ height="200.64"
+ viewBox="0 0 746.15997 200.64"
+ sodipodi:docname="FreeBSD-header-logo.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <defs
+ id="defs6" />
+ <sodipodi:namedview
+ id="namedview4"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0" />
+ <g
+ id="g8"
+ inkscape:groupmode="layer"
+ inkscape:label="ink_ext_XXXXXX"
+ transform="matrix(1.3333333,0,0,-1.3333333,0,200.64)">
+ <g
+ id="g10"
+ transform="scale(0.1)">
+ <path
+ d="m 3975.3,745.66 c 0,0 0,-271.39 0,-303.461 0,-8.179 -0.38,-7 8.22,-7 19.97,0 149.91,0 169.83,0 47.28,0 96.34,-1.527 139.84,20.031 55.18,27.372 87.59,100.461 81.76,159.852 -5.9,59.945 -47.1,100.938 -101.75,121.551 -27.28,10.293 -65.43,9.027 -94.51,9.027 -31.11,0 -203.39,0 -203.39,0 z m 0.06,166.465 -0.04,-96.5 228.04,-0.008 c 88.8,0 103.19,124.391 90.73,160.446 -13.01,37.647 -48.56,63.097 -84.76,74.587 -30.06,6.83 -233.97,55.37 -233.97,-138.525 z m 259.5,209.525 c 61.75,-17.42 114.94,-72.02 132.39,-133.611 19.02,-67.098 -2.23,-134.578 -47.4,-185.996 55.31,-30.5 101.76,-76.52 120.38,-138.133 17.22,-57.004 13.06,-122.812 -15.83,-175.359 -31.53,-57.36 -91.79,-102.969 -155.58,-116.61 -35.03,-7.472 -72,-4.91 -107.64,-4.91 -37.19,0 -180.4,0 -217.59,0 -27.7,0 -42.48,19.719 -42.48,45.071 0,54.378 0,108.753 0,163.136 0,158.778 0,188.981 0,347.774 0,258.938 274.65,215.298 333.75,198.638"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path12" />
+ <path
+ d="M 5097,1056.54 V 438.77 h 163.25 c 165.39,0 253.78,151.839 253.78,305.777 0,158.066 -80.09,311.993 -239.18,311.993 z m -76.97,26 c 0,33.28 19.76,49.91 60.31,49.91 h 205.93 c 204.88,0 309.93,-197.591 309.93,-387.903 0,-194.488 -126.9,-381.676 -330.74,-381.676 h -201.75 c -33.27,0 -43.68,6.231 -43.68,42.617 v 677.052"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path14" />
+ <path
+ d="m 4708.11,1055.29 c -66.97,0 -128.81,-54.77 -128.81,-126.794 0,-64.902 87.2,-102.437 173.45,-149.098 91.25,-49.707 188.63,-99.406 188.63,-204.906 0,-145.051 -108.52,-220.113 -248.51,-220.113 -63.89,0 -122.73,17.25 -174.46,50.723 -18.25,12.187 -27.38,27.398 -27.38,44.628 0,23.34 11.16,34.489 34.47,34.489 11.18,0 23.34,-4.059 35.53,-12.168 39.54,-24.332 90.26,-38.539 134.9,-38.539 88.27,0 163.29,38.539 163.29,135.918 0,60.851 -73.02,99.414 -152.13,141.004 -99.41,51.722 -210.99,108.515 -210.99,214.007 0,132.889 101.43,209.959 228.22,209.959 54.77,0 114.63,-15.2 172.45,-46.63 19.25,-11.17 28.38,-29.42 28.38,-46.68 0,-20.27 -14.2,-39.56 -35.49,-39.56 -12.18,0 -24.34,9.14 -38.53,18.26 -32.47,20.3 -90.31,35.5 -143.02,35.5"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path16" />
+ <path
+ d="m 2349.38,399.102 c -0.94,-17.903 -13.14,-34.082 -35.75,-34.082 -22.6,0 -34.86,16.96 -34.86,34.871 v 338.277 c 0,95.164 65.95,170.535 191.28,170.535 65.01,0 114.95,-11.301 156.42,-28.254 16,-6.605 26.39,-21.679 26.39,-33.929 0,-21.672 -16.03,-29.227 -32.04,-29.227 -29.22,0 -68.8,22.629 -130.04,22.629 -88.58,0 -141.36,-43.344 -141.36,-108.352 l -0.04,-332.468"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path18" />
+ <path
+ d="M 1924.32,744.793 V 398.219 c -0.92,-17.91 -12.68,-33.18 -35.29,-33.18 -22.59,0 -34.87,16.961 -34.87,34.852 v 496.246 11.222 c 4.12,160.631 111.94,240.921 225.4,240.921 h 136.09 c 30.49,0 46.27,-12.62 46.27,-36.81 0,-23.13 -15.78,-34.7 -46.27,-34.7 l -133.25,0.41 c -85.31,0 -156.97,-53.07 -156.97,-170.61 l -0.59,-50.109 c 0,0 0,16.266 -0.04,-40.836 h 234.01 c 19.48,0 35.26,-15.801 35.26,-35.273 0,-19.469 -15.78,-35.254 -35.26,-35.254 l -234.49,-0.305"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path20" />
+ <path
+ d="m 3728.87,659.77 h -389.75 l 0.49,3.921 c 6.74,51.7 36.03,100.797 80.34,134.747 31.48,24.078 69,35.789 114.77,35.789 47.06,0 86.84,-14.364 125.2,-45.188 34.26,-27.508 68.95,-79.547 68.95,-125.805 z m 72.02,13.742 c -8.79,67.937 -44.78,131.004 -101.38,177.57 -45.8,37.66 -103.6,57.566 -167.13,57.566 -125.73,0 -244.04,-100.339 -263.73,-223.679 -20.62,-129.094 54.94,-258.16 175.8,-300.231 53.15,-18.488 112.97,-18.269 177.92,0.703 20.48,5.981 43.4,13.731 56.44,30.207 9.91,12.481 9.89,33.93 -0.06,45.024 -7.05,7.91 -18.83,12.43 -32.23,12.43 -4.5,0 -8.29,-1.942 -12.71,-4.172 -1.47,-0.758 -3,-1.532 -4.56,-2.239 -9.63,-4.332 -18.57,-7.941 -27.34,-10.98 -36.15,-12.57 -72.25,-15.231 -107.87,-7.941 -38.8,7.96 -70.98,25.171 -98.34,52.562 -22.97,22.973 -40.1,52.129 -49.61,84.277 l -1.3,4.45 h 417.69 c 12.98,0 22.56,3.695 29.27,11.328 14.4,16.39 12.46,47.695 9.14,73.125"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path22" />
+ <path
+ d="m 3116.49,659.77 h -389.78 l 0.5,3.921 c 6.73,51.7 36.03,100.797 80.33,134.747 31.48,24.078 69.01,35.789 114.76,35.789 47.08,0 86.88,-14.364 125.24,-45.188 34.27,-27.508 68.95,-79.547 68.95,-125.805 z m 72.01,13.742 c -8.77,67.937 -44.78,131.004 -101.37,177.57 -45.79,37.66 -103.61,57.566 -167.15,57.566 -125.74,0 -244.06,-100.339 -263.74,-223.679 -20.63,-129.094 54.95,-258.16 175.79,-300.231 53.16,-18.488 112.99,-18.269 177.97,0.703 20.46,5.981 43.4,13.731 56.42,30.207 9.92,12.481 9.9,33.93 -0.03,45.024 -7.08,7.91 -18.83,12.43 -32.24,12.43 -4.51,0 -8.3,-1.942 -12.72,-4.172 -1.5,-0.758 -3,-1.532 -4.57,-2.239 -9.63,-4.332 -18.58,-7.941 -27.35,-10.98 -36.15,-12.57 -72.26,-15.231 -107.87,-7.941 -38.81,7.96 -70.99,25.171 -98.36,52.562 -22.97,22.973 -40.1,52.129 -49.59,84.277 l -1.31,4.45 h 417.71 c 13,0 22.59,3.695 29.27,11.328 14.41,16.39 12.46,47.695 9.14,73.125"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path24" />
+ <path
+ d="m 1619.42,1409.15 c 1.39,0 2.73,0.05 4.02,0.16 1.28,0.11 2.4,0.42 3.35,0.94 0.95,0.51 1.72,1.22 2.31,2.14 0.59,0.92 0.88,2.22 0.88,3.91 0,1.39 -0.31,2.49 -0.93,3.3 -0.63,0.8 -1.41,1.43 -2.37,1.86 -0.95,0.45 -2.02,0.72 -3.19,0.83 -1.17,0.11 -2.31,0.16 -3.41,0.16 h -9.02 v -13.3 z m -8.36,-25.85 h -7.48 v 45.54 h 17.27 c 5.5,0 9.64,-1.03 12.43,-3.09 2.79,-2.05 4.18,-5.39 4.18,-10.01 0,-4.1 -1.14,-7.11 -3.41,-9.01 -2.27,-1.91 -5.1,-3.05 -8.47,-3.41 l 12.76,-20.02 h -8.47 l -11.77,19.47 h -7.04 z m 39.6,23.53 c 0,4.99 -0.81,9.57 -2.42,13.75 -1.61,4.19 -3.85,7.78 -6.71,10.78 -2.86,3.01 -6.19,5.34 -10.01,6.99 -3.81,1.65 -7.92,2.48 -12.32,2.48 -4.47,0 -8.63,-0.83 -12.48,-2.48 -3.85,-1.65 -7.21,-3.98 -10.07,-6.99 -2.86,-3 -5.1,-6.59 -6.71,-10.78 -1.61,-4.18 -2.42,-8.76 -2.42,-13.75 0,-4.69 0.74,-9.09 2.2,-13.2 1.47,-4.1 3.57,-7.7 6.33,-10.78 2.75,-3.07 6.06,-5.51 9.95,-7.31 3.89,-1.8 8.29,-2.7 13.2,-2.7 4.4,0 8.51,0.83 12.32,2.48 3.82,1.65 7.15,3.98 10.01,6.98 2.86,3.01 5.1,6.59 6.71,10.73 1.61,4.15 2.42,8.74 2.42,13.8 z m 8.8,0 c 0,-6.15 -1.08,-11.76 -3.25,-16.82 -2.16,-5.07 -5.09,-9.39 -8.79,-12.99 -3.71,-3.59 -8,-6.38 -12.88,-8.36 -4.87,-1.97 -9.99,-2.96 -15.34,-2.96 -5.94,0 -11.38,1.04 -16.33,3.13 -4.95,2.09 -9.21,4.97 -12.76,8.64 -3.56,3.66 -6.35,8.01 -8.36,13.03 -2.02,5.02 -3.03,10.47 -3.03,16.33 0,6.17 1.08,11.78 3.25,16.83 2.16,5.07 5.09,9.39 8.8,12.99 3.7,3.58 8.01,6.37 12.92,8.36 4.91,1.97 10.08,2.97 15.51,2.97 5.35,0 10.47,-1 15.34,-2.97 4.88,-1.99 9.17,-4.78 12.88,-8.36 3.7,-3.6 6.63,-7.92 8.79,-12.99 2.17,-5.05 3.25,-10.66 3.25,-16.83"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path26" />
+ <path
+ d="m 5554.74,1093.12 c 1.39,0 2.73,0.05 4.01,0.16 1.28,0.11 2.4,0.42 3.36,0.93 0.95,0.52 1.72,1.23 2.3,2.15 0.59,0.92 0.88,2.21 0.88,3.91 0,1.39 -0.31,2.48 -0.93,3.3 -0.62,0.8 -1.41,1.43 -2.36,1.86 -0.96,0.45 -2.02,0.72 -3.2,0.83 -1.17,0.11 -2.31,0.16 -3.4,0.16 h -9.02 v -13.3 z m -8.36,-25.85 h -7.48 v 45.53 h 17.27 c 5.5,0 9.64,-1.02 12.42,-3.08 2.79,-2.05 4.18,-5.39 4.18,-10.01 0,-4.1 -1.13,-7.11 -3.4,-9.01 -2.28,-1.91 -5.1,-3.05 -8.48,-3.41 l 12.77,-20.02 h -8.47 l -11.78,19.46 h -7.03 z m 39.6,23.53 c 0,4.99 -0.81,9.57 -2.42,13.75 -1.62,4.18 -3.85,7.77 -6.71,10.78 -2.87,3.01 -6.2,5.34 -10.01,6.99 -3.82,1.65 -7.92,2.48 -12.32,2.48 -4.48,0 -8.64,-0.83 -12.49,-2.48 -3.85,-1.65 -7.21,-3.98 -10.07,-6.99 -2.85,-3.01 -5.09,-6.6 -6.71,-10.78 -1.61,-4.18 -2.41,-8.76 -2.41,-13.75 0,-4.69 0.73,-9.09 2.19,-13.2 1.47,-4.1 3.58,-7.7 6.33,-10.78 2.75,-3.07 6.07,-5.52 9.95,-7.31 3.89,-1.8 8.29,-2.7 13.21,-2.7 4.4,0 8.5,0.83 12.32,2.48 3.81,1.65 7.14,3.98 10.01,6.98 2.86,3.01 5.09,6.59 6.71,10.73 1.61,4.14 2.42,8.74 2.42,13.8 z m 8.8,0 c 0,-6.16 -1.09,-11.76 -3.25,-16.82 -2.16,-5.07 -5.1,-9.39 -8.8,-12.99 -3.7,-3.59 -7.99,-6.38 -12.87,-8.36 -4.88,-1.97 -9.99,-2.97 -15.34,-2.97 -5.95,0 -11.39,1.05 -16.34,3.14 -4.95,2.09 -9.2,4.97 -12.76,8.64 -3.56,3.66 -6.34,8.01 -8.36,13.03 -2.02,5.02 -3.03,10.47 -3.03,16.33 0,6.16 1.09,11.77 3.25,16.83 2.16,5.07 5.1,9.39 8.8,12.99 3.7,3.59 8.01,6.37 12.92,8.36 4.92,1.97 10.09,2.97 15.52,2.97 5.35,0 10.46,-1 15.34,-2.97 4.88,-1.99 9.17,-4.77 12.87,-8.36 3.7,-3.6 6.64,-7.92 8.8,-12.99 2.16,-5.06 3.25,-10.67 3.25,-16.83"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path28" />
+ <path
+ d="m 1510.88,1479.11 c 81.02,-80.98 -143.59,-436.95 -181.55,-474.93 -37.97,-37.914 -134.4,-3.04 -215.4,77.97 -81.01,80.99 -115.91,177.44 -77.94,215.41 37.96,37.99 393.9,262.56 474.89,181.55"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path30" />
+ <path
+ d="m 374.773,1393.42 c -123.691,70.19 -299.6714,148.25 -355.6636,92.26 -56.7383,-56.71 24.1914,-236.67 95.1056,-360.59 63.105,109.73 152.89,202.09 260.558,268.33"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path32" />
+ <path
+ d="m 1387.33,1032.12 c 11.38,-38.64 9.33,-70.557 -9.13,-88.983 -43.16,-43.168 -159.7,2.773 -264.75,102.763 -7.35,6.57 -14.61,13.4 -21.76,20.56 -37.98,38 -67.54,78.47 -86.45,115.72 -36.799,66 -46.002,124.3 -18.185,152.11 15.155,15.15 39.405,19.28 68.985,13.95 19.29,12.19 42.05,25.79 67.02,39.71 -101.53,52.95 -216.962,82.87 -339.435,82.87 C 377.477,1470.82 48.1875,1141.6 48.1875,735.402 48.1875,329.262 377.477,0 783.625,0 c 406.165,0 735.445,329.262 735.445,735.402 0,131.168 -34.42,254.176 -94.58,360.808 -12.99,-23.72 -25.63,-45.46 -37.16,-64.09"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path34" />
+ </g>
+ </g>
+</svg>
diff --git a/documentation/tools/README b/documentation/tools/README
index 8e6cf312bb..744bfe35e1 100644
--- a/documentation/tools/README
+++ b/documentation/tools/README
@@ -54,7 +54,7 @@ key IDs on the command line, addkey.sh will look for a key that
matches your FreeBSD.org email address.
The script will generate a file named <freefall-login>.key (des.key in
-my case) with programlisting elements: one that contains the
+my case) with literal-block-margin elements: one that contains the
fingerprints of all the keys you exported, and one that contains an
ASCII dump of those keys, as produced by 'gpg --armor --export'. It
will also add a line to pgpkeys.ent defining an external entity named
diff --git a/documentation/tools/asciidoctor.sh b/documentation/tools/asciidoctor.sh
index a834b2e532..1bf1e61554 100755
--- a/documentation/tools/asciidoctor.sh
+++ b/documentation/tools/asciidoctor.sh
@@ -27,8 +27,15 @@
LOCALBASE="/usr/local"
-ASCIIDOCTORPDF_CMD="${LOCALBASE}/bin/asciidoctor-pdf"
-ASCIIDOCTOREPUB_CMD="${LOCALBASE}/bin/asciidoctor-epub3"
+
+if [ "$USE_RUBYGEMS" = "YES" ]; then
+ GEMBASE="${GEM_PATH}"
+else
+ GEMBASE="${LOCALBASE}"
+fi
+
+ASCIIDOCTORPDF_CMD="${GEMBASE}/bin/asciidoctor-pdf"
+ASCIIDOCTOREPUB3_CMD="${GEMBASE}/bin/asciidoctor-epub3"
build_pdf() {
if [ "$1" = "" ] || [ "$2" = "" ] || [ "$3" = "" ]; then
@@ -42,6 +49,8 @@ build_pdf() {
local cur_dir_source="content/$doc_lang/$doc_type/$doc_name/"
local cur_dir_output="public/$doc_lang/$doc_type/$doc_name/"
+ local theme_font=""
+
if [ ! -d "$cur_dir_output" ]; then
mkdir -p "$cur_dir_output"
fi
@@ -61,6 +70,27 @@ build_pdf() {
local asciidoctor_file_name="_index.adoc"
fi
+ # Check non default fonts
+ case "$doc_lang" in
+ zh-cn)
+ if [ ! -f "$LOCALBASE/share/docproj-fonts-cjk/NotoSansSC-Medium.otf" ]; then
+ echo " font not found, skipping pdf build"
+ return
+ fi
+ theme_font="-a pdf-theme=./shared/zh-cn/zh-cn-theme.yml -a pdf-fontsdir=$LOCALBASE/share/docproj-fonts-cjk"
+ ;;
+ zh-tw)
+ if [ ! -f "$LOCALBASE/share/docproj-fonts-cjk/NotoSansTC-Medium.otf" ]; then
+ echo " font not found, skipping pdf build"
+ return
+ fi
+ theme_font="-a pdf-theme=./shared/zh-tw/zh-tw-theme.yml -a pdf-fontsdir=$LOCALBASE/share/docproj-fonts-cjk/"
+ ;;
+ *)
+ theme_font="-a pdf-theme=default-with-fallback-font"
+ ;;
+ esac
+
$ASCIIDOCTORPDF_CMD \
-r ./shared/lib/man-macro.rb \
-r ./shared/lib/git-macro.rb \
@@ -73,7 +103,7 @@ build_pdf() {
-a lang="$doc_lang" \
-a isonline=1 \
-a env-beastie=1 \
- -a pdf-theme=default-with-fallback-font \
+ ${theme_font} \
-o "${cur_dir_output}${doc_name}_${doc_lang}.pdf" \
"${cur_dir_source}${asciidoctor_file_name}"
}
@@ -110,7 +140,7 @@ build_epub() {
local asciidoctor_file_name="_index.adoc"
fi
- $ASCIIDOCTOREPUB_CMD \
+ $ASCIIDOCTOREPUB3_CMD \
-r ./shared/lib/man-macro.rb \
-r ./shared/lib/git-macro.rb \
-r ./shared/lib/packages-macro.rb \
@@ -161,7 +191,10 @@ archive() {
"$pub_dir" \
public/css/ \
public/fonts/ \
+ public/images/FreeBSD-colors.svg \
+ public/images/FreeBSD-monochromatic.svg \
public/js/ \
+ public/styles/ \
$source_doc_dir \
$image_doc_dir
diff --git a/documentation/tools/global-pgpkeys-creator.rb b/documentation/tools/global-pgpkeys-creator.rb
index 87fe29cc29..f47573713f 100644
--- a/documentation/tools/global-pgpkeys-creator.rb
+++ b/documentation/tools/global-pgpkeys-creator.rb
@@ -3,8 +3,8 @@
=begin
BSD 2-Clause License
-Copyright (c) 2020-2022, The FreeBSD Project
-Copyright (c) 2020-2022, Sergio Carlavilla <carlavilla@FreeBSD.org>
+Copyright (c) 2020-2023, The FreeBSD Project
+Copyright (c) 2020-2023, Sergio Carlavilla <carlavilla@FreeBSD.org>
This script will merge all the pgpkeys into one single file